summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2022-09-02 14:22:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2022-09-05 20:21:00 +0000
commit7d2c5d177e9813077a621df8d18c0deda73099b3 (patch)
tree88ad4850908e124d4f5d59f2bca571d63df34bf7
parentc5dbcb143405a38088d78b4b760d64aaff5157ab (diff)
downloadqtwebengine-chromium-7d2c5d177e9813077a621df8d18c0deda73099b3.tar.gz
BASELINE: Update Chromium to 102.0.5005.177
Change-Id: I0229f2402b8321f58c0092ec81d63372bec7e789 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
-rw-r--r--chromium/BUILD.gn2
-rw-r--r--chromium/DEPS16
-rw-r--r--chromium/PRESUBMIT.py1
-rw-r--r--chromium/build/util/LASTCHANGE2
-rw-r--r--chromium/build/util/LASTCHANGE.committime2
-rw-r--r--chromium/chrome/VERSION2
-rw-r--r--chromium/chrome/app/resources/chromium_strings_es.xtb6
-rw-r--r--chromium/chrome/app/resources/chromium_strings_eu.xtb2
-rw-r--r--chromium/chrome/app/resources/chromium_strings_fa.xtb14
-rw-r--r--chromium/chrome/app/resources/chromium_strings_te.xtb24
-rw-r--r--chromium/chrome/app/resources/generated_resources_am.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_ar.xtb13
-rw-r--r--chromium/chrome/app/resources/generated_resources_bg.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_bn.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_bs.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_ca.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_da.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_de.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_en-GB.xtb26
-rw-r--r--chromium/chrome/app/resources/generated_resources_es-419.xtb28
-rw-r--r--chromium/chrome/app/resources/generated_resources_es.xtb68
-rw-r--r--chromium/chrome/app/resources/generated_resources_et.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_eu.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_fa.xtb64
-rw-r--r--chromium/chrome/app/resources/generated_resources_fi.xtb36
-rw-r--r--chromium/chrome/app/resources/generated_resources_fr.xtb58
-rw-r--r--chromium/chrome/app/resources/generated_resources_gl.xtb74
-rw-r--r--chromium/chrome/app/resources/generated_resources_hi.xtb22
-rw-r--r--chromium/chrome/app/resources/generated_resources_hr.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_hu.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_hy.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_id.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_it.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_iw.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_ja.xtb20
-rw-r--r--chromium/chrome/app/resources/generated_resources_kk.xtb88
-rw-r--r--chromium/chrome/app/resources/generated_resources_km.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_kn.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_ko.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_ky.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_lo.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_lv.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_ml.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_mn.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_mr.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_ms.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_my.xtb36
-rw-r--r--chromium/chrome/app/resources/generated_resources_ne.xtb16
-rw-r--r--chromium/chrome/app/resources/generated_resources_nl.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_no.xtb18
-rw-r--r--chromium/chrome/app/resources/generated_resources_pa.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_pt-BR.xtb14
-rw-r--r--chromium/chrome/app/resources/generated_resources_pt-PT.xtb30
-rw-r--r--chromium/chrome/app/resources/generated_resources_ro.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_ru.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_si.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_sk.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_sl.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_sr-Latn.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_sr.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_ta.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_te.xtb510
-rw-r--r--chromium/chrome/app/resources/generated_resources_th.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_tr.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_ur.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_uz.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_vi.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_zh-CN.xtb100
-rw-r--r--chromium/chrome/app/resources/generated_resources_zh-TW.xtb14
-rw-r--r--chromium/chrome/app/resources/generated_resources_zu.xtb4
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_es-419.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_es.xtb8
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_eu.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_fa.xtb14
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_fr.xtb40
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_lt.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_te.xtb18
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_tr.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_zh-CN.xtb2
-rw-r--r--chromium/chrome/browser/extensions/api/debugger/debugger_api.cc7
-rw-r--r--chromium/chrome/browser/extensions/api/file_system/request_file_system_notification.cc52
-rw-r--r--chromium/chrome/browser/extensions/api/sessions/sessions_api.cc4
-rw-r--r--chromium/chrome/browser/extensions/api/sessions/sessions_apitest.cc23
-rw-r--r--chromium/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc17
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/multidevice_internals/multidevice_internals_phone_hub_handler.cc5
-rw-r--r--chromium/chrome/browser/ui/webui/tab_strip/tab_strip_page_handler.cc27
-rw-r--r--chromium/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb8
-rw-r--r--chromium/components/background_fetch/background_fetch_delegate_base.cc1
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb4
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb4
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb6
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb4
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb4
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb18
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb2
-rw-r--r--chromium/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb2
-rw-r--r--chromium/components/certificate_transparency/chrome_ct_policy_enforcer.cc2
-rw-r--r--chromium/components/certificate_transparency/chrome_ct_policy_enforcer.h8
-rw-r--r--chromium/components/content_settings/browser/ui/cookie_controls_controller.h5
-rw-r--r--chromium/components/download/content/internal/download_driver_impl.cc2
-rw-r--r--chromium/components/download/internal/common/download_utils.cc9
-rw-r--r--chromium/components/download/public/background_service/download_params.h6
-rw-r--r--chromium/components/download/public/common/download_url_parameters.cc3
-rw-r--r--chromium/components/download/public/common/download_url_parameters.h9
-rw-r--r--chromium/components/embedder_support/user_agent_utils.cc14
-rw-r--r--chromium/components/embedder_support/user_agent_utils_unittest.cc32
-rw-r--r--chromium/components/javascript_dialogs/android/translations/javascript_dialogs_android_strings_te.xtb2
-rw-r--r--chromium/components/os_crypt/key_storage_keyring_unittest.cc3
-rw-r--r--chromium/components/services/quarantine/quarantine_mac_unittest.mm15
-rw-r--r--chromium/components/signin/core/browser/account_reconcilor.cc2
-rw-r--r--chromium/components/strings/components_chromium_strings_te.xtb2
-rw-r--r--chromium/components/strings/components_google_chrome_strings_fr.xtb2
-rw-r--r--chromium/components/strings/components_strings_am.xtb14
-rw-r--r--chromium/components/strings/components_strings_be.xtb2
-rw-r--r--chromium/components/strings/components_strings_bn.xtb2
-rw-r--r--chromium/components/strings/components_strings_bs.xtb2
-rw-r--r--chromium/components/strings/components_strings_ca.xtb10
-rw-r--r--chromium/components/strings/components_strings_da.xtb6
-rw-r--r--chromium/components/strings/components_strings_de.xtb8
-rw-r--r--chromium/components/strings/components_strings_en-GB.xtb2
-rw-r--r--chromium/components/strings/components_strings_es-419.xtb44
-rw-r--r--chromium/components/strings/components_strings_es.xtb32
-rw-r--r--chromium/components/strings/components_strings_eu.xtb4
-rw-r--r--chromium/components/strings/components_strings_fa.xtb26
-rw-r--r--chromium/components/strings/components_strings_fr-CA.xtb2
-rw-r--r--chromium/components/strings/components_strings_fr.xtb32
-rw-r--r--chromium/components/strings/components_strings_gl.xtb2
-rw-r--r--chromium/components/strings/components_strings_hi.xtb10
-rw-r--r--chromium/components/strings/components_strings_hy.xtb4
-rw-r--r--chromium/components/strings/components_strings_id.xtb2
-rw-r--r--chromium/components/strings/components_strings_it.xtb6
-rw-r--r--chromium/components/strings/components_strings_ja.xtb42
-rw-r--r--chromium/components/strings/components_strings_kk.xtb52
-rw-r--r--chromium/components/strings/components_strings_ko.xtb6
-rw-r--r--chromium/components/strings/components_strings_lt.xtb2
-rw-r--r--chromium/components/strings/components_strings_mr.xtb2
-rw-r--r--chromium/components/strings/components_strings_ne.xtb2
-rw-r--r--chromium/components/strings/components_strings_nl.xtb2
-rw-r--r--chromium/components/strings/components_strings_pa.xtb2
-rw-r--r--chromium/components/strings/components_strings_pl.xtb2
-rw-r--r--chromium/components/strings/components_strings_pt-BR.xtb10
-rw-r--r--chromium/components/strings/components_strings_pt-PT.xtb6
-rw-r--r--chromium/components/strings/components_strings_ru.xtb8
-rw-r--r--chromium/components/strings/components_strings_te.xtb200
-rw-r--r--chromium/components/strings/components_strings_tr.xtb6
-rw-r--r--chromium/components/strings/components_strings_uk.xtb2
-rw-r--r--chromium/components/strings/components_strings_vi.xtb2
-rw-r--r--chromium/components/strings/components_strings_zh-CN.xtb16
-rw-r--r--chromium/components/strings/components_strings_zh-TW.xtb4
-rw-r--r--chromium/components/strings/components_strings_zu.xtb12
-rw-r--r--chromium/content/browser/devtools/protocol/page_handler.cc9
-rw-r--r--chromium/content/browser/devtools/protocol/page_handler.h4
-rw-r--r--chromium/content/browser/devtools/render_frame_devtools_agent_host.cc3
-rw-r--r--chromium/content/browser/download/download_browsertest.cc52
-rw-r--r--chromium/content/browser/service_worker/service_worker_version.cc25
-rw-r--r--chromium/content/browser/service_worker/service_worker_version.h2
-rw-r--r--chromium/content/browser/web_contents/web_contents_impl.cc14
-rw-r--r--chromium/content/browser/web_contents/web_contents_impl.h4
-rw-r--r--chromium/content/browser/web_contents/web_contents_observer_browsertest.cc26
-rw-r--r--chromium/docs/testing/web_test_expectations.md8
-rw-r--r--chromium/docs/website/.eleventy.js183
-rw-r--r--chromium/docs/website/.firebaserc7
-rw-r--r--chromium/docs/website/.gclient27
-rw-r--r--chromium/docs/website/.vpython350
-rw-r--r--chromium/docs/website/AUTHORS6
-rw-r--r--chromium/docs/website/CONTENT_OWNERS9
-rw-r--r--chromium/docs/website/DEPS112
-rw-r--r--chromium/docs/website/DIR_METADATA3
-rw-r--r--chromium/docs/website/OWNERS4
-rw-r--r--chromium/docs/website/PRESUBMIT.cfg8
-rw-r--r--chromium/docs/website/PRESUBMIT.py105
-rw-r--r--chromium/docs/website/README.md15
-rw-r--r--chromium/docs/website/docs/AUTHORING.md158
-rw-r--r--chromium/docs/website/docs/CONTRIBUTING.md98
-rw-r--r--chromium/docs/website/docs/OWNERS1
-rw-r--r--chromium/docs/website/infra/config/PRESUBMIT.py22
-rw-r--r--chromium/docs/website/infra/config/generated/commit-queue.cfg43
-rw-r--r--chromium/docs/website/infra/config/generated/cr-buildbucket.cfg80
-rw-r--r--chromium/docs/website/infra/config/generated/luci-logdog.cfg9
-rw-r--r--chromium/docs/website/infra/config/generated/luci-milo.cfg19
-rw-r--r--chromium/docs/website/infra/config/generated/luci-scheduler.cfg36
-rw-r--r--chromium/docs/website/infra/config/generated/project.cfg15
-rw-r--r--chromium/docs/website/infra/config/generated/realms.cfg61
-rw-r--r--chromium/docs/website/infra/config/generated/tricium-prod.cfg30
-rwxr-xr-xchromium/docs/website/infra/config/main.star214
-rw-r--r--chromium/docs/website/node_modules.tar.gz.sha11
-rwxr-xr-xchromium/docs/website/npmw46
-rw-r--r--chromium/docs/website/originals.tar.gz.sha11
-rw-r--r--chromium/docs/website/package-lock.json19081
-rw-r--r--chromium/docs/website/package.json26
-rw-r--r--chromium/docs/website/scripts/404s.txt44
-rw-r--r--chromium/docs/website/scripts/common.py238
-rwxr-xr-xchromium/docs/website/scripts/crawl.py264
-rwxr-xr-xchromium/docs/website/scripts/export.py457
-rwxr-xr-xchromium/docs/website/scripts/fetch_lobs.py117
-rwxr-xr-xchromium/docs/website/scripts/fetch_node_modules.py76
-rwxr-xr-xchromium/docs/website/scripts/gen_paths_that_were_edited_by_hand42
-rwxr-xr-xchromium/docs/website/scripts/gen_paths_to_skip21
-rw-r--r--chromium/docs/website/scripts/html2markdown.py1343
-rw-r--r--chromium/docs/website/scripts/paths_that_were_edited_by_hand.txt96
-rw-r--r--chromium/docs/website/scripts/paths_to_crawl.txt299
-rw-r--r--chromium/docs/website/scripts/paths_to_skip.txt140
-rw-r--r--chromium/docs/website/scripts/subpages.js132
-rwxr-xr-xchromium/docs/website/scripts/upload_lobs.py172
-rw-r--r--chromium/docs/website/site/Home/chromecompatfaq/index.md271
-rw-r--r--chromium/docs/website/site/Home/chromium-clobber-landmines/index.md162
-rw-r--r--chromium/docs/website/site/Home/chromium-privacy/index.md52
-rw-r--r--chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/covert-tracking/index.md88
-rw-r--r--chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/Sensitivity of Cohorts.pdf.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/index.md181
-rw-r--r--chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/index.md153
-rw-r--r--chromium/docs/website/site/Home/chromium-security/OWNERS8
-rw-r--r--chromium/docs/website/site/Home/chromium-security/adding-permissions/index.md10
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/decode-mitigation-flags.html232
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/index.md244
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/diag4.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram1.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram2.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram3.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/index.md431
-rw-r--r--chromium/docs/website/site/Home/chromium-security/articles/index.md18
-rw-r--r--chromium/docs/website/site/Home/chromium-security/binding-integrity/index.md90
-rw-r--r--chromium/docs/website/site/Home/chromium-security/boringssl/contributing/index.md84
-rw-r--r--chromium/docs/website/site/Home/chromium-security/boringssl/index.md38
-rw-r--r--chromium/docs/website/site/Home/chromium-security/brag-sheet/index.md157
-rw-r--r--chromium/docs/website/site/Home/chromium-security/bugs/automated-triage/index.md12
-rw-r--r--chromium/docs/website/site/Home/chromium-security/bugs/automatic-filing/index.md20
-rw-r--r--chromium/docs/website/site/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz/index.md13
-rw-r--r--chromium/docs/website/site/Home/chromium-security/bugs/index.md93
-rw-r--r--chromium/docs/website/site/Home/chromium-security/bugs/reproducing-clusterfuzz-bugs/index.md94
-rw-r--r--chromium/docs/website/site/Home/chromium-security/bugs/using-clusterfuzz/index.md13
-rw-r--r--chromium/docs/website/site/Home/chromium-security/certificate-transparency/index.md12
-rw-r--r--chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/index.md15
-rw-r--r--chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/mmd_monitor_root.crt34
-rw-r--r--chromium/docs/website/site/Home/chromium-security/chromium-and-emet/index.md143
-rw-r--r--chromium/docs/website/site/Home/chromium-security/clean-software-alliance/index.md38
-rw-r--r--chromium/docs/website/site/Home/chromium-security/client-identification-mechanisms/index.md764
-rw-r--r--chromium/docs/website/site/Home/chromium-security/corb-for-developers/index.md121
-rw-r--r--chromium/docs/website/site/Home/chromium-security/core-principles/index.md103
-rw-r--r--chromium/docs/website/site/Home/chromium-security/crlsets/CRLSetComponents.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/crlsets/index.md40
-rw-r--r--chromium/docs/website/site/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes/index.md131
-rw-r--r--chromium/docs/website/site/Home/chromium-security/deprecating-powerful-features-on-insecure-origins/index.md115
-rw-r--r--chromium/docs/website/site/Home/chromium-security/education/index.md54
-rw-r--r--chromium/docs/website/site/Home/chromium-security/education/security-tips-for-crx-and-apps/index.md121
-rw-r--r--chromium/docs/website/site/Home/chromium-security/education/security-tips-for-ipc/index.md219
-rw-r--r--chromium/docs/website/site/Home/chromium-security/education/tls/index.md349
-rw-r--r--chromium/docs/website/site/Home/chromium-security/education/tls/sha-1/index.md73
-rw-r--r--chromium/docs/website/site/Home/chromium-security/enamel/goals-for-the-origin-info-bubble/index.md208
-rw-r--r--chromium/docs/website/site/Home/chromium-security/enamel/index.md181
-rw-r--r--chromium/docs/website/site/Home/chromium-security/enamel/origins.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/enamel/permissions/index.md21
-rw-r--r--chromium/docs/website/site/Home/chromium-security/enamel/restricting-iframe-permissions/index.md12
-rw-r--r--chromium/docs/website/site/Home/chromium-security/extension-content-script-fetches/index.md352
-rw-r--r--chromium/docs/website/site/Home/chromium-security/guts/Chrome Security Architecture.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/guts/index.md66
-rw-r--r--chromium/docs/website/site/Home/chromium-security/hall-of-fame/index.md1157
-rw-r--r--chromium/docs/website/site/Home/chromium-security/index.md142
-rw-r--r--chromium/docs/website/site/Home/chromium-security/ipc-security-reviews/index.md30
-rw-r--r--chromium/docs/website/site/Home/chromium-security/malicious-extensions-protection/index.md11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages with User Input.gif.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages@1x.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 1.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 2.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/form-and-incognito-http-bad-verbose.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/http-bad-sep-2018.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/index.md329
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-narrow.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-wide.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/mds/index.md87
-rw-r--r--chromium/docs/website/site/Home/chromium-security/memory-safety/index.md129
-rw-r--r--chromium/docs/website/site/Home/chromium-security/memory-safety/piechart.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/memory-safety/rust-and-c-interoperability/index.md182
-rw-r--r--chromium/docs/website/site/Home/chromium-security/memory-safety/sat3CHOc8lXZbGicChW6w5Q.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/owp/index.md116
-rw-r--r--chromium/docs/website/site/Home/chromium-security/owp/web-platform-security-backlog/index.md12
-rw-r--r--chromium/docs/website/site/Home/chromium-security/pdfium-security/index.md56
-rw-r--r--chromium/docs/website/site/Home/chromium-security/pgp-key/index.md146
-rw-r--r--chromium/docs/website/site/Home/chromium-security/prefer-secure-origins-for-powerful-new-features/index.md111
-rw-r--r--chromium/docs/website/site/Home/chromium-security/pwnium-2/index.md56
-rw-r--r--chromium/docs/website/site/Home/chromium-security/pwnium-3/index.md55
-rw-r--r--chromium/docs/website/site/Home/chromium-security/pwnium-4/index.md364
-rw-r--r--chromium/docs/website/site/Home/chromium-security/quarterly-updates/index.md4092
-rw-r--r--chromium/docs/website/site/Home/chromium-security/reporting-security-bugs/index.md129
-rw-r--r--chromium/docs/website/site/Home/chromium-security/reviews-and-consulting/index.md33
-rw-r--r--chromium/docs/website/site/Home/chromium-security/root-ca-policy/index.md191
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-bug-lifecycle/index.md258
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-faq/index.md12
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-faq/service-worker-security-faq/index.md340
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-labels/index.md12
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-release-management/index.md156
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-reviews/index.md84
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (1).png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (2).png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (3).png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-sheriff/Screen Shot 2016-05-20 at 15.41.22.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/security-sheriff/index.md12
-rw-r--r--chromium/docs/website/site/Home/chromium-security/site-isolation/OWNERS3
-rw-r--r--chromium/docs/website/site/Home/chromium-security/site-isolation/index.md377
-rw-r--r--chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-1.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-2.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/site-isolation/site-per-process-flag.png.sha11
-rw-r--r--chromium/docs/website/site/Home/chromium-security/ssca/index.md109
-rw-r--r--chromium/docs/website/site/Home/chromium-security/strict-origin-isolation-trial/index.md95
-rw-r--r--chromium/docs/website/site/Home/chromium-security/symantec-legacy-pki/index.md87
-rw-r--r--chromium/docs/website/site/Home/chromium-security/vulnerability-rewards-program/index.md14
-rw-r--r--chromium/docs/website/site/Home/debugging-on-webview/index.md8
-rw-r--r--chromium/docs/website/site/Home/domui-testing/index.md127
-rw-r--r--chromium/docs/website/site/Home/domui-testing/webui-browser_tests/index.md230
-rw-r--r--chromium/docs/website/site/Home/domui-testing/webui-browser_tests/webui-accessibility-audit/index.md12
-rw-r--r--chromium/docs/website/site/Home/flying_browser.png.sha11
-rw-r--r--chromium/docs/website/site/Home/google-ssl.xml9
-rw-r--r--chromium/docs/website/site/Home/ice-cream-sandwich-support-deprecation-faq/index.md78
-rw-r--r--chromium/docs/website/site/Home/index.md76
-rw-r--r--chromium/docs/website/site/Home/loading/clovis/index.md18
-rw-r--r--chromium/docs/website/site/Home/loading/index.md69
-rw-r--r--chromium/docs/website/site/Home/loading/oor-cors/index.md242
-rw-r--r--chromium/docs/website/site/Home/loading/oor-cors/netlogchk.html231
-rw-r--r--chromium/docs/website/site/Home/memory/index.md11
-rw-r--r--chromium/docs/website/site/Home/third-party-developers/index.md191
-rw-r--r--chromium/docs/website/site/Home/tls13/index.md46
-rw-r--r--chromium/docs/website/site/OWNERS3
-rw-r--r--chromium/docs/website/site/_assets/customLogo.png.sha11
-rw-r--r--chromium/docs/website/site/_includes/page.njk117
-rw-r--r--chromium/docs/website/site/_scripts/selector.js138
-rw-r--r--chromium/docs/website/site/_stylesheets/_reset.scss100
-rw-r--r--chromium/docs/website/site/_stylesheets/default.scss418
-rw-r--r--chromium/docs/website/site/administrators/advanced-integration-for-saml-sso-on-chrome-devices/index.md264
-rw-r--r--chromium/docs/website/site/administrators/certificate-management-extension-api-on-chrome-os/index.md281
-rw-r--r--chromium/docs/website/site/administrators/common-problems-and-solutions/index.md241
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks4.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks5.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks6.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/index.md245
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/reg1.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/reg2.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/reg3.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/complex-policies-on-windows/reg4.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/configuring-other-preferences/index.md272
-rw-r--r--chromium/docs/website/site/administrators/configuring-policy-for-extensions/index.md227
-rw-r--r--chromium/docs/website/site/administrators/diagnostic-mode/diagmode_wiki.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/diagnostic-mode/index.md56
-rw-r--r--chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/1.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/2.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/3.png.sha11
-rw-r--r--chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/index.md28
-rw-r--r--chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/index.md13
-rw-r--r--chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/redirect-dh.xml12
-rw-r--r--chromium/docs/website/site/administrators/frequently-asked-questions/index.md230
-rw-r--r--chromium/docs/website/site/administrators/guide-for-chrome-os-saml-sso-smart-card-integration/index.md95
-rw-r--r--chromium/docs/website/site/administrators/index.md59
-rw-r--r--chromium/docs/website/site/administrators/installation/index.md16
-rw-r--r--chromium/docs/website/site/administrators/ios-mdm-policy-format/index.md180
-rw-r--r--chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_chrome_policy.plist98
-rw-r--r--chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_encoded_chrome_policy.plist28
-rw-r--r--chromium/docs/website/site/administrators/linux-quick-start/index.md105
-rw-r--r--chromium/docs/website/site/administrators/log-messages/index.md52
-rw-r--r--chromium/docs/website/site/administrators/mac-quick-start/index.md68
-rw-r--r--chromium/docs/website/site/administrators/policy-list-3/atomic_groups/index.md875
-rw-r--r--chromium/docs/website/site/administrators/policy-list-3/cookie-legacy-samesite-policies/index.md142
-rw-r--r--chromium/docs/website/site/administrators/policy-list-3/deprecated-policies/index.md1046
-rw-r--r--chromium/docs/website/site/administrators/policy-list-3/extension-settings-full/index.md121
-rw-r--r--chromium/docs/website/site/administrators/policy-list-3/index.md10
-rw-r--r--chromium/docs/website/site/administrators/policy-list-3/user-data-directory-variables/index.md93
-rw-r--r--chromium/docs/website/site/administrators/policy-templates/index.md86
-rw-r--r--chromium/docs/website/site/administrators/pre-installed-extensions/index.md178
-rw-r--r--chromium/docs/website/site/administrators/turning-off-auto-updates/index.md109
-rw-r--r--chromium/docs/website/site/administrators/url-blacklist-filter-format/index.md11
-rw-r--r--chromium/docs/website/site/administrators/url-blocklist-filter-format/index.md140
-rw-r--r--chromium/docs/website/site/administrators/windows-quick-start/GoogleChromeStandaloneEnterprise.msi.sha11
-rw-r--r--chromium/docs/website/site/administrators/windows-quick-start/index.md74
-rw-r--r--chromium/docs/website/site/android/contributing-to-drm_hwcomposer/index.md9
-rw-r--r--chromium/docs/website/site/android/drm_hwcomposer-overview/index.md10
-rw-r--r--chromium/docs/website/site/android/index.md6
-rw-r--r--chromium/docs/website/site/apple-touch-icon.png.sha11
-rw-r--r--chromium/docs/website/site/audio-video/ChromiumMediaBuffering.png.sha11
-rw-r--r--chromium/docs/website/site/audio-video/ChromiumMediaBuffering.svg.sha11
-rw-r--r--chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack (1).png.sha11
-rw-r--r--chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack.png.sha11
-rw-r--r--chromium/docs/website/site/audio-video/autoplay/autoplay-policy-design-rationale/index.md174
-rw-r--r--chromium/docs/website/site/audio-video/autoplay/autoplay-pre-seeding-in-chrome/index.md31
-rw-r--r--chromium/docs/website/site/audio-video/autoplay/index.md251
-rw-r--r--chromium/docs/website/site/audio-video/index.md159
-rw-r--r--chromium/docs/website/site/audio-video/media-internals/index.md77
-rw-r--r--chromium/docs/website/site/blink/activedomobject/index.md48
-rw-r--r--chromium/docs/website/site/blink/blink-api-owners-requirements/index.md9
-rw-r--r--chromium/docs/website/site/blink/blink-gardening/index.md10
-rw-r--r--chromium/docs/website/site/blink/blink-gc/index.md10
-rw-r--r--chromium/docs/website/site/blink/blink-in-js/index.md278
-rw-r--r--chromium/docs/website/site/blink/blink-network-stack/index.md14
-rw-r--r--chromium/docs/website/site/blink/blink-post-merge-faq/index.md165
-rw-r--r--chromium/docs/website/site/blink/blink-testing-and-the-w3c/index.md203
-rw-r--r--chromium/docs/website/site/blink/blink-triaging/index.md105
-rw-r--r--chromium/docs/website/site/blink/coding-style/index.md69
-rw-r--r--chromium/docs/website/site/blink/coding-style/layout-test-style-guidelines/index.md11
-rw-r--r--chromium/docs/website/site/blink/deprecating-features/index.md28
-rw-r--r--chromium/docs/website/site/blink/developer-faq/index.md318
-rw-r--r--chromium/docs/website/site/blink/developer-faq/lewishead.jpg.1365009990294.png.sha11
-rw-r--r--chromium/docs/website/site/blink/developer-faq/paulhead.jpg.1365009992996.png.sha11
-rw-r--r--chromium/docs/website/site/blink/directory-dependency-in-blink/before.png.sha11
-rw-r--r--chromium/docs/website/site/blink/directory-dependency-in-blink/before_merge_resized.png.sha11
-rw-r--r--chromium/docs/website/site/blink/directory-dependency-in-blink/index.md76
-rw-r--r--chromium/docs/website/site/blink/dom-exceptions/index.md52
-rw-r--r--chromium/docs/website/site/blink/getting-started-with-blink-debugging/index.md193
-rw-r--r--chromium/docs/website/site/blink/guidelines/api-owners/index.md76
-rw-r--r--chromium/docs/website/site/blink/guidelines/api-owners/procedures/index.md77
-rw-r--r--chromium/docs/website/site/blink/guidelines/api-owners/requirements/index.md59
-rw-r--r--chromium/docs/website/site/blink/guidelines/blink-api-owners-requirements/index.md77
-rw-r--r--chromium/docs/website/site/blink/guidelines/index.md9
-rw-r--r--chromium/docs/website/site/blink/guidelines/values/index.md36
-rw-r--r--chromium/docs/website/site/blink/guidelines/web-exposed/index.md28
-rw-r--r--chromium/docs/website/site/blink/guidelines/web-platform-changes-guidelines/index.md321
-rw-r--r--chromium/docs/website/site/blink/guidelines/web-platform-changes-process/index.md11
-rw-r--r--chromium/docs/website/site/blink/how-repaint-works/index.md12
-rw-r--r--chromium/docs/website/site/blink/importing-the-w3c-tests/index.md136
-rw-r--r--chromium/docs/website/site/blink/index.md117
-rw-r--r--chromium/docs/website/site/blink/intent-security-triage/index.md65
-rw-r--r--chromium/docs/website/site/blink/launching-features/OWNERS2
-rw-r--r--chromium/docs/website/site/blink/launching-features/how-chrome-status-communicates/index.md55
-rw-r--r--chromium/docs/website/site/blink/launching-features/index.md629
-rw-r--r--chromium/docs/website/site/blink/launching-features/let-developers-know/index.md115
-rw-r--r--chromium/docs/website/site/blink/launching-features/old-process/index.md113
-rw-r--r--chromium/docs/website/site/blink/layoutng/index.md237
-rw-r--r--chromium/docs/website/site/blink/layoutng/kern-ng.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/kern_legacy.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/legacy_ar_wrap.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/legacy_dlig_jp.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/legacy_float_margin.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/legacy_float_overlap.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/legacy_shape.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/ng_ar_wrap.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/ng_dlig_jp.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/ng_float_margin.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/ng_float_overlap.png.sha11
-rw-r--r--chromium/docs/website/site/blink/layoutng/ng_shape.png.sha11
-rw-r--r--chromium/docs/website/site/blink/memory-team/index.md46
-rw-r--r--chromium/docs/website/site/blink/origin-trials/index.md46
-rw-r--r--chromium/docs/website/site/blink/origin-trials/portals/DevTools_Breakpoint_Workaround.png.sha11
-rw-r--r--chromium/docs/website/site/blink/origin-trials/portals/consolewarning.png.sha11
-rw-r--r--chromium/docs/website/site/blink/origin-trials/portals/index.md153
-rw-r--r--chromium/docs/website/site/blink/origin-trials/running-an-origin-trial/index.md344
-rw-r--r--chromium/docs/website/site/blink/platform-predictability/compat-tools/index.md163
-rw-r--r--chromium/docs/website/site/blink/platform-predictability/index.md133
-rw-r--r--chromium/docs/website/site/blink/platform-predictability/objectives/index.md177
-rw-r--r--chromium/docs/website/site/blink/public-c-api/index.md121
-rw-r--r--chromium/docs/website/site/blink/removing-features/index.md12
-rw-r--r--chromium/docs/website/site/blink/runtime-enabled-features/index.md11
-rw-r--r--chromium/docs/website/site/blink/serviceworker/getting-started/index.md77
-rw-r--r--chromium/docs/website/site/blink/serviceworker/index.md94
-rw-r--r--chromium/docs/website/site/blink/serviceworker/service-worker-faq/index.md126
-rw-r--r--chromium/docs/website/site/blink/serviceworker/service-worker-faq/resources-sw.png.sha11
-rw-r--r--chromium/docs/website/site/blink/serviceworker/testing/index.md71
-rw-r--r--chromium/docs/website/site/blink/sheriffing/index.md106
-rw-r--r--chromium/docs/website/site/blink/sheriffing/triaging-gasper-alerts/index.md13
-rw-r--r--chromium/docs/website/site/blink/slimming-paint/historical-documents/index.md29
-rw-r--r--chromium/docs/website/site/blink/slimming-paint/index.md112
-rw-r--r--chromium/docs/website/site/blink/spec-mentors/index.md121
-rw-r--r--chromium/docs/website/site/blink/unittesting/index.md473
-rw-r--r--chromium/docs/website/site/blink/unittesting/printto-confusing.cpp39
-rw-r--r--chromium/docs/website/site/blink/unittesting/printto-workaround.cpp80
-rw-r--r--chromium/docs/website/site/blink/v8-bindings/index.md10
-rw-r--r--chromium/docs/website/site/blink/web-workers/index.md70
-rw-r--r--chromium/docs/website/site/blink/webcrypto/index.md445
-rw-r--r--chromium/docs/website/site/blink/webidl/blink-idl-extended-attributes/index.md13
-rw-r--r--chromium/docs/website/site/blink/webidl/index.md682
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 3.19.28 PM.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 4.18.39 PM.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.36.49 PM.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.38.39 PM.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Untitled-5.fw.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromestatus42.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromeversion.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/cr-commit-pos.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/f3a.png.sha11
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/index.md93
-rw-r--r--chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/omahaprox.png.sha11
-rw-r--r--chromium/docs/website/site/careers/index.md23
-rw-r--r--chromium/docs/website/site/careers/logo_chrome_color_144dp.png.sha11
-rw-r--r--chromium/docs/website/site/cecpq2/index.md57
-rw-r--r--chromium/docs/website/site/chrome-apps/index.md716
-rw-r--r--chromium/docs/website/site/chrome-os-devices-and-kernel-versions/index.md8
-rw-r--r--chromium/docs/website/site/chrome-release-channels/index.md198
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Chrome EC.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Overview.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/ARM coreboot porting.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware - 2017.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware Summit- Sundries.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/ChromeOS firmware summit - Depthcharge.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/Coreboot Mainboard Porting.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/index.md121
-rw-r--r--chromium/docs/website/site/chromium-os/2014-firmware-summit/x86 coreboot porting.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/OWNERS213
-rw-r--r--chromium/docs/website/site/chromium-os/android-apps/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/bias-on-chromium-os/index.md40
-rw-r--r--chromium/docs/website/site/chromium-os/bluetooth-pairing-method-confusion-on-chrome-os/index.md45
-rw-r--r--chromium/docs/website/site/chromium-os/build/OWNERS1
-rw-r--r--chromium/docs/website/site/chromium-os/build/add-sdk-package/index.md80
-rw-r--r--chromium/docs/website/site/chromium-os/build/bypassing-tests-on-a-per-project-basis/index.md20
-rw-r--r--chromium/docs/website/site/chromium-os/build/c-exception-support/index.md67
-rw-r--r--chromium/docs/website/site/chromium-os/build/chromite-parallel/index.md156
-rw-r--r--chromium/docs/website/site/chromium-os/build/chroot_version_hooks/index.md60
-rw-r--r--chromium/docs/website/site/chromium-os/build/cros-deploy/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/build/cros-flash/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/build/faq/index.md71
-rw-r--r--chromium/docs/website/site/chromium-os/build/index.md103
-rw-r--r--chromium/docs/website/site/chromium-os/build/local-trybot-documentation/index.md152
-rw-r--r--chromium/docs/website/site/chromium-os/build/sdk-config-management/index.md35
-rw-r--r--chromium/docs/website/site/chromium-os/build/sdk-creation/index.md202
-rw-r--r--chromium/docs/website/site/chromium-os/build/tour-of-the-chromiumos-buildbot/index.md153
-rw-r--r--chromium/docs/website/site/chromium-os/build/using-remote-trybots/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/SourcePowerRule.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/index.md177
-rw-r--r--chromium/docs/website/site/chromium-os/ccd/951-00273-01_20180607_suzyqable_SCH_1.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/ccd/index.md9
-rw-r--r--chromium/docs/website/site/chromium-os/ccd/suzy-qs-1.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-adb-debugging-over-usb/index.md79
-rw-r--r--chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-android-apps/index.md619
-rw-r--r--chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-instant-tethering/index.md180
-rw-r--r--chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-linux/index.md156
-rw-r--r--chromium/docs/website/site/chromium-os/chromeos-graphics-reading-list/index.md72
-rw-r--r--chromium/docs/website/site/chromium-os/chromium-os-faq/index.md81
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/example.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/index.md229
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/boot_design_diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/index.md1014
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cbi-cros-board-info/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-battery-life-overview/index.md66
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-performance-overview/index.md29
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-volume-keys/index.md61
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-cgroups/index.md40
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/dco/index.md31
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/index.md191
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/submitting-patches/index.md462
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-libcros/index.md322
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-printing-design/index.md93
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cras-chromeos-audio-server/index.md123
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/cellular-activation/index.md159
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/chrome-network-debugging/index.md23
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-cromo/index.md53
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-gsm-modem/index.md53
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fakemodem/index.md22
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-mode/index.md570
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-shell-access/index.md167
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/disk-format/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter (1).png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flowpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updaterpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/index.md92
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bitspng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_imagepng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/ChromeOSFilesystemAutoupdate.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/index.md133
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/ChromeOSFirmwareBootandRecoveryPUBLISHED.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/eeprom-mappng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/flowchart1png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/index.md695
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/s0hDprW1DevZ8KuyE5lsKIg_903.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-updates/index.md27
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data/index.md256
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/index.md119
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/KbdReset.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/index.md83
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/library-optimization/index.md70
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/login/index.md145
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/lucid-sleep/index.md257
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine (1).png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/index.md130
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/onc/index.md12
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/open-network-configuration/index.md17
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/index.md339
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.espn.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.gmail.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/index.md85
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/resize_partitionpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/powerwash/index.md135
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromeOSCryptohomeTPMusage.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromiumOS_TPM_Cryptohome.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--ecryptfs2bext3-1008hapdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--no-encryptionpdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-on-chrome-os--dmcrypt2bext42b1008hapdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/index.md496
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/index.md383
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/sk78RvI_UcGGddwNUBzsAcA.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/srjy2ox0dbMkVTv25qW2QdA.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/security-overview/index.md492
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/chromepng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/firmwarepng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/index.md95
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/overviewpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/systempng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/index.md220
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/repo-archpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-hardening/index.md692
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-notifications/index.md344
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/tab-discarding-and-reloading/index.md101
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture2.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window_demo.swf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/index.md275
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/input.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/syncing-input-methods/index.md102
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md157
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/upstream-first/index.md54
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/user-accounts-and-management/index.md219
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/userland-boot/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/cryptospecs.webp.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/index.md440
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures (1).png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/firmware.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/index.md174
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/kernel.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/keyblock.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/normal.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/readonly.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/recovery.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbpublickey.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbsignature.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/diag2png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/index.md382
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/verify-prebuilts-using-content-hashing/index.md85
-rw-r--r--chromium/docs/website/site/chromium-os/comp2_200x146.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/comp2jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/containers-update/index.md54
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/BugTrackerName.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/TrackerName.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/beaglebone/index.md67
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/index.md367
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/mount_event_propagation.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/developer-workflow/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/directory-structure/index.md12
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/disk-layout-format/index.md79
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/gerrit-guide/index.md74
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/go-in-chromium-os/index.md344
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/index.md12
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/upstreaming-drm-patches/index.md74
-rw-r--r--chromium/docs/website/site/chromium-os/developer-guide/using-serial-tty/index.md57
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottm-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottom.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-top-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/back.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/index.md297
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/newback.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-card-front.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-front.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-10-side-right-grey.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-2-front-grey.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-4-left-grey.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-5-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-6-right-grey.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-7-side-left.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-8-side-left-grey.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-9-side-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/index.md85
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-screws.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-case-bottom.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-top-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/index.md225
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards-small.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/index.md228
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0000_Acer-Chromebook-15-01-front.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0001_Acer-Chromebook-15-02-left.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0002_Acer-Chromebook-15-03-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0003_Acer-Chromebook-15-04-side-left.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0004_Acer-Chromebook-15-05-side-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0005_Acer-Chromebook-15-06-group-black.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0006_Acer-Chromebook-15-07-group-white.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/index.md77
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-card-front.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-front.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-2-left.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-3-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-4-side-left.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-5-side-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/index.md133
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox/index.md166
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-negative-polarity.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel-2015/index.md133
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/index.md270
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts-labeled.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOff.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/cr48_recovery_button.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48/index.md615
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/index.md459
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-bottom-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-top-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/custom-firmware/index.md220
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/Selection_459.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/index.md109
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/wolf_wp.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/generic/index.md67
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware/index.md48
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11/index.md88
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/hero.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/index.md86
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-1.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-2.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-3.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-4.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-5.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-6.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-7.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-8.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebox/index.md169
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-bottom-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-cpanel.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-dpanel.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-keyboard.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-wp.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/index.md113
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/index.md3858
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-11/index.md21
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-card-hinge.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-hinge.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-2-front.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-3-left.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-4-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-5-hinge.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-6-side-left.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-7-side-right.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/index.md112
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/index.md144
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-bottom.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-top.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-bottom.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-top.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-F-101_White_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-card-F-101_White_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-10-S-102_Black_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-11-S-101_White_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-12-S-101_Black_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-2-F-101_Black_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-3-B-113_White_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-4-B-113_Black_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-5-B-102F_White_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-6-B-102F_Black_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-7-S-103_White_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-8-S-103_Black_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-9-S-102_White_Monitor_from-Sandbox.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/index.md120
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook/index.md191
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-bottom-screw.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside-annotated.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/index.md316
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-bottom-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.xcf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2/index.md169
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/coreboot-vmx-hack/index.md301
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/index.md319
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-case.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-dev-switch.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-bare.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-top.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-bare.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-cards.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-dev-switch.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-bare.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-full.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-mid.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/a.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts-no-battery.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-top-guts.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex_reset.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/cc.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/index.md299
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/c720-chromebook-innards.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/chromebook_leon_write_protect.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/index.md111
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/index.md58
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_black.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_blue.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_top.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/whirlwind-dev-screw.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook/index.md127
-rw-r--r--chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/workaround-for-battery-discharge-in-dev-mode/index.md249
-rw-r--r--chromium/docs/website/site/chromium-os/developing-apps-on-your-chromium-os-device/index.md44
-rw-r--r--chromium/docs/website/site/chromium-os/dingdong/810-10117-03_20151211_dingdong_SCH_0.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/dingdong/DingDong Block Diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/dingdong/chromium-os-dingdong.tar.bz2.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/dingdong/index.md110
-rw-r--r--chromium/docs/website/site/chromium-os/donnettes/index.md15
-rw-r--r--chromium/docs/website/site/chromium-os/donnettes/smart receptacle-05042017.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/ap-ec-communication/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/charge-manager/index.md169
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/ec-3po/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/cr50.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/index.md395
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/storage2.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/getting-started-building-ec-images-quickly/index.md65
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/stack-size-analyzer/index.md682
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/PD Low Battery Boot.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/index.md132
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/new_low_bat.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/samus_low_bat.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/external-bsp-hosting/index.md365
-rw-r--r--chromium/docs/website/site/chromium-os/extracting-a-recovery-kernel-from-a-recovery-image/index.md85
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/index.md337
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/the-crosfw-script/index.md88
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/Verified Boot Flow.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/index.md347
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/firmware-ec-write-protection/index.md95
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/fmap/index.md360
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/index.md122
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-porting-guide/u-boot-drivers/index.md1447
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-summit/index.md18
-rw-r--r--chromium/docs/website/site/chromium-os/firmware-update/index.md328
-rw-r--r--chromium/docs/website/site/chromium-os/forced-re-enrollment/index.md51
-rw-r--r--chromium/docs/website/site/chromium-os/fwmp/index.md107
-rw-r--r--chromium/docs/website/site/chromium-os/gentoo-package-upgrade-process/index.md436
-rw-r--r--chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/ChromeOSCompatibilitylist-20091121-A.xlsx.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/index.md470
-rw-r--r--chromium/docs/website/site/chromium-os/getting-dev-hardware/index.md21
-rw-r--r--chromium/docs/website/site/chromium-os/getting-started-with-glmark2/glmark2-9999.ebuild54
-rw-r--r--chromium/docs/website/site/chromium-os/getting-started-with-glmark2/index.md96
-rw-r--r--chromium/docs/website/site/chromium-os/getting-started-with-platform2/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/gfx-test-notes/index.md217
-rw-r--r--chromium/docs/website/site/chromium-os/glitch-vulnerability-status/index.md39
-rw-r--r--chromium/docs/website/site/chromium-os/hoho/810-10116-02_20150109_hdmi_SCH_0.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram (1).png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/hoho/chromium-os-hoho.tar.bz2.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/hoho/index.md106
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/index.md121
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/perf.patch.txt24
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/add-a-new-package/index.md59
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/.config.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/cmdline18
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/index.md144
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/rk3228-veyron-jaq.its36
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/chrome-api-keys-in-the-chroot/index.md54
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-factory-test-images/index.md16
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chrome-with-libcras-on-gprecise/index.md42
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-architecture-porting-guide/index.md61
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/index.md588
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/private-boards/index.md131
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/create-a-cl/index.md31
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/creating-local-mirrors/index.md105
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/index.md113
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/manual-e362-setup/index.md58
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/modem-debugging-with-mmcli/index.md57
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-features/index.md138
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-hangs/index.md51
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/host-file-access/index.md67
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/index.md193
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/setting-up-tcpdump/index.md17
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/target-serial-access/index.md178
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/developer-faq/index.md137
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/extension-support-for-app-webviews/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/force-out-of-box-experience-oobe/index.md19
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/GSM PIN code types.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/index.md242
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-helpers/index.md33
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-server-side-information/index.md28
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-troubleshooting/index.md102
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/helper-scripts/index.md90
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images/index.md134
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/index.md279
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-faq/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-rebase-notes/index.md768
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/llvm-clang-build/index.md39
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0001-FROMLIST-drm-panel-add-Kingdisplay-kd097d04-panel-dr.patch560
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0002-CHROMIUM-drm-Add-drm_master_relax-debugfs-file-non-r.patch173
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0003-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_MAP_DUMB-for-rende.patch58
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0004-CHROMIUM-drm-Allow-render-node-access-to-KMS-getters.patch87
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0005-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_DESTROY_DUMB-for-r.patch48
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0006-CHROMIUM-drm-rockchip-Enable-rendernode.patch32
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0007-CHROMIUM-drm-rockchip-Add-GEM-ioctls.patch227
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0008-CHROMIUM-Revert-drm-vgem-create-a-render-node-for-vg.patch35
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/index.md124
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/index.md193
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/measuring-boot-time-performance/index.md311
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/modemmanager/index.md58
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/network-based-development/index.md723
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/nfs-quickstart/index.md152
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/openvpn-manual-setup/index.md31
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/portage-build-faq/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/remote-debugging/index.md136
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/Screenshot-QEMU-KVM.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/serial-debugging-howto/index.md185
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/tsc-resynchronization/index.md148
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/upgrade-ebuild-eapis/index.md227
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-an-upstream-kernel-on-snow/index.md267
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/xbuddy-for-devserver/index.md19
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/Screenshot from 2013-04-08 13_46_48.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/index.md44
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-on-a-branch/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-with-your-overlay-faq/index.md71
-rw-r--r--chromium/docs/website/site/chromium-os/index.md129
-rw-r--r--chromium/docs/website/site/chromium-os/lazy-fp-restore-vulnerability-status/index.md185
-rw-r--r--chromium/docs/website/site/chromium-os/licensing/building-a-distro/index.md113
-rw-r--r--chromium/docs/website/site/chromium-os/licensing/index.md36
-rw-r--r--chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-developers/index.md220
-rw-r--r--chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-package-owners/index.md184
-rw-r--r--chromium/docs/website/site/chromium-os/mds-on-chromeos/index.md253
-rw-r--r--chromium/docs/website/site/chromium-os/meltdown-spectre-vulnerability-status/index.md1454
-rw-r--r--chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.gif.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/minimuffin/index.md64
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/energy-aware-scheduling/index.md61
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/index.md156
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/timeline.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/portage-package-status/index.md176
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/quiche-notes/index.md284
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/recall/index.md175
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Properties for src.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Resource Filters.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build env.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/chrome remote main.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debug connection.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger main.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger shared libraries.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/index.md28
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/resource-filters.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/obsolete/using-sdk-standalone/index.md96
-rw-r--r--chromium/docs/website/site/chromium-os/packages/biod/biod_diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/packages/biod/index.md12
-rw-r--r--chromium/docs/website/site/chromium-os/packages/crash-reporting/debugging-a-minidump/index.md200
-rw-r--r--chromium/docs/website/site/chromium-os/packages/crash-reporting/faq/index.md519
-rw-r--r--chromium/docs/website/site/chromium-os/packages/crash-reporting/index.md19
-rw-r--r--chromium/docs/website/site/chromium-os/packages/crash-reporting/stack-traces-from-chrome-os-crash-dumps/index.md96
-rw-r--r--chromium/docs/website/site/chromium-os/packages/cros-flashrom/index.md336
-rw-r--r--chromium/docs/website/site/chromium-os/packages/implicit-system/index.md126
-rw-r--r--chromium/docs/website/site/chromium-os/packages/index.md129
-rw-r--r--chromium/docs/website/site/chromium-os/packages/libchrome/index.md16
-rw-r--r--chromium/docs/website/site/chromium-os/packages/libchromeos/index.md185
-rw-r--r--chromium/docs/website/site/chromium-os/packages/portage/index.md135
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/battery-notifications/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/inactivity-delays/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/input/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/keyboard-backlight/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/screen-brightness/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/index.md14
-rw-r--r--chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/suspend_flowchart.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/packages/pydevi2c/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/IMG_5169.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/Plankton Raiden MCU command table.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/Plankton Raiden Software Care & Feed.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/Plankton_raiden block diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/buttons.jpeg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/index.md312
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/leds.jpeg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/plankton/plankton-master.tar.gz.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/platform/index.md205
-rw-r--r--chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/dev.bmp.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/index.md9
-rw-r--r--chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/meh2.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/tdev.bmp.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/profiling-in-chromeos/index.md122
-rw-r--r--chromium/docs/website/site/chromium-os/python-mock/index.md90
-rw-r--r--chromium/docs/website/site/chromium-os/python-style-guidelines/index.md9
-rw-r--r--chromium/docs/website/site/chromium-os/quick-start-guide/index.md123
-rw-r--r--chromium/docs/website/site/chromium-os/security-advisories/index.md38
-rw-r--r--chromium/docs/website/site/chromium-os/servo/810-10010-03_20120227_servo_SCH_0.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/IMG_20151019_085815 (1) (1).jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/LICENSE69
-rw-r--r--chromium/docs/website/site/chromium-os/servo/chromium_os_servo_v2.tar.gz.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/chromium_os_yoshi_flex.tar.gz.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/image00.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servo-v2/index.md19
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servo_v2_bot.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servo_v2_top.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servomicro/652-00166-05_20190308_servo_micro_SCH_0.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servomicro/Case-Closed Debug in Chromebooks and Servo Micro.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servomicro/index.md19
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servov4/650-00588-01_20170601_servo_v4_pvt1_SCH_0.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/servo/servov4/index.md19
-rw-r--r--chromium/docs/website/site/chromium-os/shell-style-guidelines/index.md15
-rw-r--r--chromium/docs/website/site/chromium-os/sideload-android-apps-on-chromebook/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/stadia-on-chromebooks/index.md300
-rw-r--r--chromium/docs/website/site/chromium-os/steam-on-chromeos/index.md280
-rw-r--r--chromium/docs/website/site/chromium-os/testing/adding-unit-tests-to-the-build/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/testing/afe-rpc-infrastructure/index.md86
-rw-r--r--chromium/docs/website/site/chromium-os/testing/anatomy-of-test-test/index.md56
-rw-r--r--chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/arcp1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autoserv-packaging/index.md232
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-and-ebuilds/index.md131
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-design-patterns/index.md403
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/autotest-server-usage/index.md35
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/index.md720
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/setup-autotest-server/index.md235
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-graphics-documentation/index.md701
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-keyvals/index.md49
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-keyvals/perf-keyvals/index.md134
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.svg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/autotest-user-doc/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/testing/building-and-running-tests/index.md330
-rw-r--r--chromium/docs/website/site/chromium-os/testing/cellular-testing/index.md22
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio - New Page (4).png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board Block Diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release PCB.zip.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/index.md179
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_51_43.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_53_38.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/index.md261
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium-usb-audio/index.md37
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/CAT9883CRegisterRev01.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon Video - New Page (4).png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon-B1_R1.2_Release %5Bfor external use%5D.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.1_BOM.xlsx.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2- Gerber file.zip.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2_Release.brd.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/FPGA pins.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/IT6506 Programming Guide.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/IT6506_Datasheet_for_Google_v1.3.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/IT6803 Programming Guide.1.05.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/IT6803TE Datasheet_for_Google v0.83.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/cat9883c_datasheet_for_Google_Rev1 3.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/index.md441
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/png;base644fb8f58c45521404.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/s2mbf9hZBTGKMFHBgqQqDiA.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/s3x3vmsvmeWSlhdK4GEG60A.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/sjR3S5TzIrNaCyuUbwvWwbA.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/spstW8nBPTZeJhUk-NjRnQg.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/swKcCTHdtRXI6IJ-pzsZR9Q.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/chamelium/video-chameleon-658cadce37849ec8330f7cbfa01135983984ec24.tar.gz.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/collecting-stats-for-graphite/index.md182
-rw-r--r--chromium/docs/website/site/chromium-os/testing/common-testing-workflows/index.md205
-rw-r--r--chromium/docs/website/site/chromium-os/testing/cros-autotest/cap1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/cros-autotest/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/testing/dynamic-suites/dynamic-test-suites/index.md441
-rw-r--r--chromium/docs/website/site/chromium-os/testing/dynamic-suites/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/dynamic-suites/test-dependencies-in-dynamic-suites/index.md126
-rw-r--r--chromium/docs/website/site/chromium-os/testing/dynamic-test-suites/index.md257
-rw-r--r--chromium/docs/website/site/chromium-os/testing/existing-autotest-utilities/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/gs-offloader/index.md84
-rw-r--r--chromium/docs/website/site/chromium-os/testing/hardware_qualification/HWQual.pdf.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/hardware_qualification/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/testing/index.md131
-rw-r--r--chromium/docs/website/site/chromium-os/testing/infrastructure-components/index.md70
-rw-r--r--chromium/docs/website/site/chromium-os/testing/infrastructure-components/keyvals/index.md51
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab-faq/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/cpcon-release-notes/index.md19
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/Running FAFT (Fully Automated Firmware Tests) with MobLab.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/create_job_faft.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/servo v2 diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/index.md30
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/index.md13
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_colours.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_main_page.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_repair_dialog.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image00.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image01.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/index.md228
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/pre-requirements-of-issue-creation/index.md40
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/5AjtD5fj5XrBV3X.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/65cXCzDADkz.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/944NKgXvoL9ubsp.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_38.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_50.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/index.md654
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob1.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob2.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_38.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_50.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_968.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_970.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_971.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_972.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_973.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/image00.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/image01.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/image02.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/image03.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/setup/index.md17
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/user-manual/index.md15
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_945.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_946.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image00.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image01.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image02.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image03.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/index.md15
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/index.md49
-rw-r--r--chromium/docs/website/site/chromium-os/testing/perf-data/index.md371
-rw-r--r--chromium/docs/website/site/chromium-os/testing/perf-regression-detection/index.md114
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/index.md12
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/index.md12
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetp1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetu1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltg1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp_rand1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu1
-rw-r--r--chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu_rand20
-rw-r--r--chromium/docs/website/site/chromium-os/testing/qemu-unittests/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/running-smoke-suite-on-a-vm-image/index.md263
-rw-r--r--chromium/docs/website/site/chromium-os/testing/running-unit-tests-on-the-target/index.md60
-rw-r--r--chromium/docs/website/site/chromium-os/testing/specific-test-documentation/index.md11
-rw-r--r--chromium/docs/website/site/chromium-os/testing/suite_scheduler-1/index.md105
-rw-r--r--chromium/docs/website/site/chromium-os/testing/suite_scheduler/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-client-helper-libraries/index.md86
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs/index.md205
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting/index.md178
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/index.md458
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/dynamic-suite-codelab/index.md372
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/index.md16
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/control24
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/index.md855
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/power_MyBacklightTest.py190
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-dependencies-in-dynamic-suites/index.md95
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-lab-setup/index.md110
-rw-r--r--chromium/docs/website/site/chromium-os/testing/test-suites/index.md513
-rw-r--r--chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/index.md160
-rw-r--r--chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/test-deps-faq/index.md232
-rw-r--r--chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/testing-your-changes-faq/index.md92
-rw-r--r--chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/writing-tests-faq/index.md388
-rw-r--r--chromium/docs/website/site/chromium-os/tips-and-tricks-for-chromium-os-developers/index.md806
-rw-r--r--chromium/docs/website/site/chromium-os/tpm_firmware_update/index.md467
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/PulseviewRequestAccept.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/PulseviewSourceCap_request.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/Twinkie-diagram.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/build-sigrok-and-pulseview-from-sources/index.md49
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/chromium-os-twinkie-v2.tar.bz2.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/index.md334
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/index.md102
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/twinkie_v1.1.2705-bc6d966.combined.bin.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/pulseview_3packets.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V_A.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packet.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packetx3.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/twinkie_programming.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.19-9e81762f2.bin.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.20-005227d8f.bin.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.21-3e33e08af.webusb.bin.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/twinkies-1.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/twinkies-2.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/twinkie/twinkies-3.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/index.md10
-rw-r--r--chromium/docs/website/site/chromium-os/u2f-ecdsa-vulnerability/index.md366
-rw-r--r--chromium/docs/website/site/chromium-os/unchecked_tpm_reset/index.md97
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/Concept.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/Concept2.jpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/access-points/apppng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/access-points/index.md31
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/ajpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/bjpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/cjpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel1.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/content-browser/Full.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/content-browser/index.md52
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/djpg.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/Desktop.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/Display.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/Form Factors.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/Tablet.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/index.md99
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/laptop.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/netbook.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/Tablet.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/index.md59
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.100.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.105.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.106.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.107.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.108.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.109.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.141.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.150.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet_concept.mp4.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/video_still.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/index.md9
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Open.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Save.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/index.md38
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/panels/Chrome-OS-Panels.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/panels/index.md96
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/panels/panel-spec.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/panels/panelspng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/panels/windowstylespng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/sdres_0000_Basic.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/sdres_0001_App-Menu.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/sdres_0002_Panels.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/settings/1-General.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/settings/2-Internet.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/settings/3-Browser.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/settings/4-PersonalStuff.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/settings/5-UnderTheHood.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/settings/index.md54
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/shelf/Shelf.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/shelf/index.md37
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/system-status-icons/NetworkMenu.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/system-status-icons/Screen shot 2009-12-01 at 12.23.56 PM.PNG.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/system-status-icons/index.md43
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/tab-ui/index.md35
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/tab-ui/tab_stripspng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/video_placeholderpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.app.1.0.0.zip.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-management/OverviewSketch.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-management/index.md53
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchNav.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchUI.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-ui/compact_navpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-ui/index.md111
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-ui/navpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/user-experience/window-ui/side_navpng.sha11
-rw-r--r--chromium/docs/website/site/chromium-os/usi-enabled-devices/OWNERS5
-rw-r--r--chromium/docs/website/site/chromium-os/usi-enabled-devices/index.md201
-rw-r--r--chromium/docs/website/site/chromium-os/works-with-chromebook-certified/index.md12
-rw-r--r--chromium/docs/website/site/chromium-projects/chrome-24.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-projects/chrome-32.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-projects/chrome-64.png.sha11
-rw-r--r--chromium/docs/website/site/chromium-projects/index.md49
-rw-r--r--chromium/docs/website/site/chromium-projects/logo_chrome_color_1x_web_32dp.png.sha11
-rw-r--r--chromium/docs/website/site/conduct/index.md11
-rw-r--r--chromium/docs/website/site/config/app/images/customLogo/customLogo.gif.sha11
-rw-r--r--chromium/docs/website/site/config/customLogo.gif.sha11
-rw-r--r--chromium/docs/website/site/contact/index.md20
-rw-r--r--chromium/docs/website/site/dev-sentence-diagram.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/Web-page-views/WebContents.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/Web-page-views/WebContents.png.sha11
-rw-r--r--chromium/docs/website/site/developers/Web-page-views/WebContents2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/Web-page-views/WebContents3.png.sha11
-rw-r--r--chromium/docs/website/site/developers/Web-page-views/index.md28
-rw-r--r--chromium/docs/website/site/developers/about-signin-internals/index.md77
-rw-r--r--chromium/docs/website/site/developers/accessibility/chromevox-on-desktop-linux/index.md12
-rw-r--r--chromium/docs/website/site/developers/accessibility/chromevox/index.md12
-rw-r--r--chromium/docs/website/site/developers/accessibility/html-accessibility/index.md159
-rw-r--r--chromium/docs/website/site/developers/accessibility/index.md68
-rw-r--r--chromium/docs/website/site/developers/accessibility/linux-accessibility/index.md24
-rw-r--r--chromium/docs/website/site/developers/accessibility/mac-accessibility/index.md95
-rw-r--r--chromium/docs/website/site/developers/accessibility/testing/automated-testing/ax-inspect/index.md168
-rw-r--r--chromium/docs/website/site/developers/accessibility/testing/automated-testing/index.md121
-rw-r--r--chromium/docs/website/site/developers/accessibility/testing/axe-core/index.md277
-rw-r--r--chromium/docs/website/site/developers/accessibility/testing/index.md16
-rw-r--r--chromium/docs/website/site/developers/accessibility/views-accessibility/index.md91
-rw-r--r--chromium/docs/website/site/developers/accessibility/webkit-accessibility/index.md38
-rw-r--r--chromium/docs/website/site/developers/accessibility/webui-accessibility-audit/index.md132
-rw-r--r--chromium/docs/website/site/developers/accessibility/windows-accessibility/index.md121
-rw-r--r--chromium/docs/website/site/developers/adding-3rd-party-libraries/index.md11
-rw-r--r--chromium/docs/website/site/developers/android-eclipse-dev/index.md10
-rw-r--r--chromium/docs/website/site/developers/androidwebview/android-webview-beta/index.md20
-rw-r--r--chromium/docs/website/site/developers/androidwebview/android-webview-beta/screen.png.sha11
-rw-r--r--chromium/docs/website/site/developers/androidwebview/index.md26
-rw-r--r--chromium/docs/website/site/developers/androidwebview/webview-ct-bug/index.md172
-rw-r--r--chromium/docs/website/site/developers/applescript/index.md23
-rw-r--r--chromium/docs/website/site/developers/bisect-builds-py/index.md153
-rw-r--r--chromium/docs/website/site/developers/blink-gc-plugin-errors/index.md509
-rw-r--r--chromium/docs/website/site/developers/calendar/Chrome RC.png.sha11
-rw-r--r--chromium/docs/website/site/developers/calendar/Chrome RCX.png.sha11
-rw-r--r--chromium/docs/website/site/developers/calendar/Chrome Release Cycle 6.png.sha11
-rw-r--r--chromium/docs/website/site/developers/calendar/index.md542
-rw-r--r--chromium/docs/website/site/developers/change-logs/index.md36
-rw-r--r--chromium/docs/website/site/developers/checkstyle/index.md160
-rw-r--r--chromium/docs/website/site/developers/chromium-string-usage/index.md96
-rw-r--r--chromium/docs/website/site/developers/clang-mac/index.md46
-rw-r--r--chromium/docs/website/site/developers/class-diagram-webkit-webcore-to-chrome-browser/index.md17
-rw-r--r--chromium/docs/website/site/developers/cluster-telemetry/6bAxkmCFOA8.png.sha11
-rw-r--r--chromium/docs/website/site/developers/cluster-telemetry/LW5ZqMVpXdw.png.sha11
-rw-r--r--chromium/docs/website/site/developers/cluster-telemetry/index.md110
-rw-r--r--chromium/docs/website/site/developers/code-browsing-in-chromium/index.md27
-rw-r--r--chromium/docs/website/site/developers/code-coverage/index.md9
-rw-r--r--chromium/docs/website/site/developers/coding-style/chromium-style-checker-errors/index.md492
-rw-r--r--chromium/docs/website/site/developers/coding-style/cocoa-dos-and-donts/index.md94
-rw-r--r--chromium/docs/website/site/developers/coding-style/cpp-dos-and-donts/index.md14
-rw-r--r--chromium/docs/website/site/developers/coding-style/important-abstractions-and-data-structures/index.md214
-rw-r--r--chromium/docs/website/site/developers/coding-style/index.md14
-rw-r--r--chromium/docs/website/site/developers/coding-style/java/index.md13
-rw-r--r--chromium/docs/website/site/developers/committers-responsibility/index.md94
-rw-r--r--chromium/docs/website/site/developers/common-terms--techno-babble/corruption.png.sha11
-rw-r--r--chromium/docs/website/site/developers/common-terms--techno-babble/index.md9
-rw-r--r--chromium/docs/website/site/developers/content-module/Content.png.sha11
-rw-r--r--chromium/docs/website/site/developers/content-module/content-api/index.md11
-rw-r--r--chromium/docs/website/site/developers/content-module/index.md20
-rw-r--r--chromium/docs/website/site/developers/contributing-code/-bug-syntax/index.md101
-rw-r--r--chromium/docs/website/site/developers/contributing-code/direct-commit/index.md26
-rw-r--r--chromium/docs/website/site/developers/contributing-code/external-contributor-checklist/index.md36
-rw-r--r--chromium/docs/website/site/developers/contributing-code/flag-ownership/index.md12
-rw-r--r--chromium/docs/website/site/developers/contributing-code/index.md10
-rw-r--r--chromium/docs/website/site/developers/contributing-code/minimizing-review-lag-across-time-zones/index.md37
-rw-r--r--chromium/docs/website/site/developers/contributing-code/watchlists/index.md12
-rw-r--r--chromium/docs/website/site/developers/core-principles/index.md159
-rw-r--r--chromium/docs/website/site/developers/core-principles/no-hidden-preferences/index.md52
-rw-r--r--chromium/docs/website/site/developers/cpp-in-chromium-101-codelab/index.md12
-rw-r--r--chromium/docs/website/site/developers/crash-reports/crash-with-invalid-handle/index.md188
-rw-r--r--chromium/docs/website/site/developers/crash-reports/handle-file-upload-scheme/index.md116
-rw-r--r--chromium/docs/website/site/developers/crash-reports/index.md257
-rw-r--r--chromium/docs/website/site/developers/creating-and-using-profiles/index.md70
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/0-prof-only.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/1-plot-internal.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/2-distorted.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/3-undistorted.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/4-autoscale.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2013-10-06 at 7.33.59 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.20.48 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.27.21 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/index.md153
-rw-r--r--chromium/docs/website/site/developers/debugging-with-crash-keys/index.md9
-rw-r--r--chromium/docs/website/site/developers/decoding-crash-dumps/index.md122
-rw-r--r--chromium/docs/website/site/developers/deep-memory-profiler/cpp-object-type-identifier/index.md127
-rw-r--r--chromium/docs/website/site/developers/deep-memory-profiler/index.md582
-rw-r--r--chromium/docs/website/site/developers/design-documents/64-bit-support/index.md28
-rw-r--r--chromium/docs/website/site/developers/design-documents/about-conflicts/incompatibility_thumb.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/about-conflicts/index.md135
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/Event_Watcher_Toolbar.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/Inspect_Toolbar.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/chrome-a11y-2010-09-02.zip.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/chrome_font_and_languages.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/chrome_toolbar.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/create_shortcut.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/custom_colors.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/flag_added.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/index.md177
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/properties.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.pdf.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.txt159
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_andApplications.pdf.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_and_Applications.txt330
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/tracker/ChromeWindowsAccessIssueTracker(public).csv89
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/tracker/index.md23
-rw-r--r--chromium/docs/website/site/developers/design-documents/accessibility/xoom_menu.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/advancedspellchecker/index.md133
-rw-r--r--chromium/docs/website/site/developers/design-documents/android-jni/index.md11
-rw-r--r--chromium/docs/website/site/developers/design-documents/applescript/index.md116
-rw-r--r--chromium/docs/website/site/developers/design-documents/appmode-mac/index.md343
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/Chrome Graphics Infrastructure.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/index.md252
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-05-23 5-48-07 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-20 6_31_36 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-26 3_50_42 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/col.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/index.md71
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/ChromeAshViewsAuradependencies.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/index.md19
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/aura-overview/index.md55
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/client-api/index.md76
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/event-handling/arch4.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/event-handling/index.md69
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/focus-and-activation/index.md72
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/gesture-recognizer-tests/index.md135
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/index.md191
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/output.png.1379091770284.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/index.md74
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/index.md49
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/layout-managers/index.md34
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/multi-desktop/index.md52
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/system-tray/index.md278
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/views/Views.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/views/Views.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/aura/views/index.md29
-rw-r--r--chromium/docs/website/site/developers/design-documents/auto-throttled-screen-capture-and-mirroring/index.md428
-rw-r--r--chromium/docs/website/site/developers/design-documents/automaticspellingcorrection/index.md90
-rw-r--r--chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/BlinkCoordinates.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/index.md107
-rw-r--r--chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/menu.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/blink-scrollbarthemes/index.md43
-rw-r--r--chromium/docs/website/site/developers/design-documents/blocking-cross-site-documents/index.md164
-rw-r--r--chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/index.md35
-rw-r--r--chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.dia.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/index.md21
-rw-r--r--chromium/docs/website/site/developers/design-documents/browser-components/cookbook/index.md14
-rw-r--r--chromium/docs/website/site/developers/design-documents/browser-components/index.md26
-rw-r--r--chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/browser-window/LunaBrowserWindow.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/browser-window/index.md50
-rw-r--r--chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsArchitecture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsStack.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chaps-technical-design/ClassHierarchy.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chaps-technical-design/KeyHierarchy.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chaps-technical-design/index.md537
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromeviews/index.md106
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/debugging-with-nsight/index.md72
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/graphics.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/gpuraster.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/index.md95
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/index.md277
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/aura ubercomp.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/index.md348
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/mac ubercomp.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-impl-events/index.md15
-rw-r--r--chromium/docs/website/site/developers/design-documents/chromium-graphics/surfaces/index.md259
-rw-r--r--chromium/docs/website/site/developers/design-documents/command-dispatch-mac/index.md140
-rw-r--r--chromium/docs/website/site/developers/design-documents/compositor-hit-testing/index.md105
-rw-r--r--chromium/docs/website/site/developers/design-documents/compositor-thread-architecture/index.md182
-rw-r--r--chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/Content.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/index.md88
-rw-r--r--chromium/docs/website/site/developers/design-documents/constrained-popup-windows/index.md38
-rw-r--r--chromium/docs/website/site/developers/design-documents/conventions-and-patterns-for-multi-platform-development/index.md214
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookbook/Life of a Browser Component.pdf.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookbook/index.md290
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookbook/layercake.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookie-prompt-replacement/index.md104
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookie-split-loading/index.md189
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.pdf.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/cookies-and-prerender/index.md68
-rw-r--r--chromium/docs/website/site/developers/design-documents/create-amazing-password-forms/index.md50
-rw-r--r--chromium/docs/website/site/developers/design-documents/crypto/index.md80
-rw-r--r--chromium/docs/website/site/developers/design-documents/dependency-management/index.md10
-rw-r--r--chromium/docs/website/site/developers/design-documents/desktop-notifications/api-specification/index.md167
-rw-r--r--chromium/docs/website/site/developers/design-documents/desktop-notifications/index.md124
-rw-r--r--chromium/docs/website/site/developers/design-documents/directwrite-font-cache/index.md565
-rw-r--r--chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/Removing DWrite font cache (1).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/index.md102
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer v2.ai.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer-v2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer.ai.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/index.md283
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/layers.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering browser.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/dns-prefetching/index.md207
-rw-r--r--chromium/docs/website/site/developers/design-documents/download/index.md151
-rw-r--r--chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_complete.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_interrupted.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_restart.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_start.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_unpaused.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/downloadmanagersequences/index.md58
-rw-r--r--chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (1).png.1379119292169.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (2).png.1379119349348.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser.png.1379119228467.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/index.md205
-rw-r--r--chromium/docs/website/site/developers/design-documents/encrypted-partition-recovery/index.md97
-rw-r--r--chromium/docs/website/site/developers/design-documents/experiments/index.md41
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/accessibility/index.md75
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/api-pattern-design-doc/index.md346
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-lg.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark.crx.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/index.md79
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/default-apps/index.md45
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/ExtSourceServer.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/extension-doc-server.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/index.md47
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-to-update-the-release-notes/index.md77
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/index.md43
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/extension-manifesto/index.md228
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/i18n/index.md326
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/index.md13
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/img.txt1
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/index.md23
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/payload.txt1
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/auto-install-of-android-companion-extensions/index.md123
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/bluetooth-extension-api/index.md359
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/browser-keys/index.md154
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/clear/index.md273
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_3.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_4.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/index.md262
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/desktop-notification-api/index.md160
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/downloads-api/index.md17
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/executecontentscript-proposal/index.md112
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/font-settings/index.md121
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/get-extension-views-by-type-proposal/index.md74
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/gleam-api/index.md169
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/history-api/index.md65
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/i18n-api/index.md73
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/index.md16
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/input-method-editor/index.md452
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/instructions-for-api-shepherds/index.md19
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/language-detection/index.md103
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/managed-storage-api/index.md146
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/media-gallery/index.md98
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/notifications-of-web-request-and-navigation/index.md860
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/book_screenshot.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/coverflow_screenshot.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/index.md256
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/screenshot.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/omnibox-api/index.md88
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/Screen shot 2011-10-06 at 3.47.53 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/index.md88
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/power-management-api/index.md142
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/preference-api/index.md77
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/privacy/index.md163
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/index.md297
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/process-extension-screenshot.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/profile-extension-api/index.md77
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/proposal-chrome-extensions-cookies-api/index.md807
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/push-messaging/index.md190
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/rlz-api/index.md237
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings/index.md207
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings_pages/index.md65
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/system-indicator-api/index.md122
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/systeminfo/index.md315
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/text-translate-api/index.md104
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/usb-api/index.md416
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webnavigation-v2/index.md121
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/TabCaptureStates.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/index.md140
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/window-management/index.md218
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apiwishlist/index.md157
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/creating-new-apis/index.md407
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/breaking-changes/index.md91
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/index.md15
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/install-dialog-2/index.md142
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/index.md13
-rw-r--r--chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/spellcheck-api/index.md81
-rw-r--r--chromium/docs/website/site/developers/design-documents/find-bar/FindBar.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/find-bar/FindBarGeneral.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/find-bar/FindBarTabSwitching.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/find-bar/index.md132
-rw-r--r--chromium/docs/website/site/developers/design-documents/first-run-customizations/index.md90
-rw-r--r--chromium/docs/website/site/developers/design-documents/focus-and-activation-in-views-and-aura/index.md70
-rw-r--r--chromium/docs/website/site/developers/design-documents/form-autofill/index.md131
-rw-r--r--chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18n_design.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/index.md111
-rw-r--r--chromium/docs/website/site/developers/design-documents/form-styles-that-chromium-understands/index.md84
-rw-r--r--chromium/docs/website/site/developers/design-documents/fullscreen-mac/index.md101
-rw-r--r--chromium/docs/website/site/developers/design-documents/generic-sensor/index.md862
-rw-r--r--chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/index.md61
-rw-r--r--chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/google-cloud-print-proxy-design/index.md143
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/CompositingwiththeGPUProcess.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/HandlingMultipleContexts.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/SoftwareRenderingArchitecture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/TheGPUProcess.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/compositing_with_the_gpu_process.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap/index.md102
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/index.md422
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/software_rendering_architecture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_compositing_forest.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_gpu_process.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-command-buffer/index.md434
-rw-r--r--chromium/docs/website/site/developers/design-documents/gpu-memory-buffer/index.md12
-rw-r--r--chromium/docs/website/site/developers/design-documents/graphics-and-skia/index.md292
-rw-r--r--chromium/docs/website/site/developers/design-documents/greasemonkey/index.md11
-rw-r--r--chromium/docs/website/site/developers/design-documents/high-dpi-resources/index.md159
-rw-r--r--chromium/docs/website/site/developers/design-documents/http-authentication/index.md234
-rw-r--r--chromium/docs/website/site/developers/design-documents/http-authentication/writing-a-spnego-authenticator-for-chrome-on-android/index.md174
-rw-r--r--chromium/docs/website/site/developers/design-documents/idealized-mediastream-design/index.md473
-rw-r--r--chromium/docs/website/site/developers/design-documents/idl-build/index.md357
-rw-r--r--chromium/docs/website/site/developers/design-documents/idl-compiler/index.md12
-rw-r--r--chromium/docs/website/site/developers/design-documents/idn-in-google-chrome/index.md11
-rw-r--r--chromium/docs/website/site/developers/design-documents/image-filters/index.md128
-rw-r--r--chromium/docs/website/site/developers/design-documents/immersive-fullscreen/index.md234
-rw-r--r--chromium/docs/website/site/developers/design-documents/impl-side-painting/index.md174
-rw-r--r--chromium/docs/website/site/developers/design-documents/index.md384
-rw-r--r--chromium/docs/website/site/developers/design-documents/indexeddb/index.md428
-rw-r--r--chromium/docs/website/site/developers/design-documents/indexeddb/indexeddbbackup/index.md430
-rw-r--r--chromium/docs/website/site/developers/design-documents/info-bars/2infobars.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/info-bars/index.md138
-rw-r--r--chromium/docs/website/site/developers/design-documents/instant/index.md11
-rw-r--r--chromium/docs/website/site/developers/design-documents/instant/instant-support/index.md344
-rw-r--r--chromium/docs/website/site/developers/design-documents/inter-process-communication/index.md313
-rw-r--r--chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md210
-rw-r--r--chromium/docs/website/site/developers/design-documents/isolated-sites/index.md78
-rw-r--r--chromium/docs/website/site/developers/design-documents/java-resources-on-android/index.md83
-rw-r--r--chromium/docs/website/site/developers/design-documents/layered-components-design/index.md154
-rw-r--r--chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/index.md187
-rw-r--r--chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/making-autofill-into-a-layered-component/index.md158
-rw-r--r--chromium/docs/website/site/developers/design-documents/layout-tests-results-dashboard/index.md391
-rw-r--r--chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md100
-rw-r--r--chromium/docs/website/site/developers/design-documents/mac-occlusion/index.md118
-rw-r--r--chromium/docs/website/site/developers/design-documents/mac-plugins/index.md140
-rw-r--r--chromium/docs/website/site/developers/design-documents/mac-xib-files/index.md16
-rw-r--r--chromium/docs/website/site/developers/design-documents/making-chrome-independent-of-extensions/index.md49
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture (1).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture (1).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/index.md375
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/media_router_overflow.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/media_router_screen_selector.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/media_router_ui_diagram.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/media-router/media_router_universal_remote.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/mouse-lock/index.md148
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-column-layout/index.md592
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-architecture/Multiprocessarchitecture.ai.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-architecture/arch.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-architecture/architecture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-architecture/chrome_archoverview.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-architecture/how-to-add-new-features/index.md69
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-architecture/index.md170
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resource-loading.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resourceloading2.ai.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/index.md86
-rw-r--r--chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/resource_loader.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/native-controls/index.md146
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-settings/index.md110
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/Chromium HTTP Network Request Diagram.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/Chromium Network Stack.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance-new.tiff.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.jpeg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.pdf.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/index.md180
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/debugging-net-proxy/index.md14
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc2.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-benchmarking/index.md93
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-v3/index.md475
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files2.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files3.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files4.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/index.md434
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/very-simple-backend/index.md151
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/http-authentication-throttling/index.md183
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/http-cache/index.md174
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/http-cache/t.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/http-pipelining/index.md51
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/index.md298
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/netlog/NetLog1.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/netlog/index.md223
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/index.md97
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/salient-bug-list/index.md69
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/index.md16
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/network-stack-objectives/index.md592
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/network-stack-use-in-chromium/index.md106
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/preconnect/index.md93
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/fox-proxy-settings.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.dot9
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.dot27
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.dot7
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-server-settings.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-settings.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/index.md76
-rw-r--r--chromium/docs/website/site/developers/design-documents/network-stack/socks-proxy/index.md74
-rw-r--r--chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/imeomni.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/index.md180
-rw-r--r--chromium/docs/website/site/developers/design-documents/omnibox-prefetch-for-default-search-engines/index.md127
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/Cross Process Tabs (for posting).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document (1).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document 2015 (for posting).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees (for posting).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees 2015 (for posting).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/Local vs Remote Frame diagram.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/framehandle/index.md27
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/index.md270
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/Design Doc- Rendering and compositing out-of-process iframes.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/index.md323
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - compositor frame routing.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - ogres are like onions.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - rendering trees.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - texture routing.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/os-x-interprocess-communication/index.md311
-rw-r--r--chromium/docs/website/site/developers/design-documents/os-x-password-manager-keychain-integration/index.md223
-rw-r--r--chromium/docs/website/site/developers/design-documents/password-generation/01_form.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/password-generation/02_hover.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/password-generation/03_suggestion.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/password-generation/04_filled.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/password-generation/EditingUI.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/password-generation/GenerationUI.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/password-generation/index.md115
-rw-r--r--chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/Pepper design.ai.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/index.md477
-rw-r--r--chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/pepper_design.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/per-page-suborigins/index.md299
-rw-r--r--chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitecture.ai.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitectureoutofprocess.ai.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/plugin-architecture/in_process_plugins.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/plugin-architecture/index.md140
-rw-r--r--chromium/docs/website/site/developers/design-documents/plugin-architecture/out_of_process_plugins.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsinprocess.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsoutofprocess.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/preferences/index.md474
-rw-r--r--chromium/docs/website/site/developers/design-documents/prerender/CroppedPrerenderingDiagram.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/prerender/Prerenderingdiagram.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/prerender/Wickedflowchart.gif.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/prerender/index.md236
-rw-r--r--chromium/docs/website/site/developers/design-documents/print-preview/index.md220
-rw-r--r--chromium/docs/website/site/developers/design-documents/printing/index.md30
-rw-r--r--chromium/docs/website/site/developers/design-documents/process-models/OWNERS3
-rw-r--r--chromium/docs/website/site/developers/design-documents/process-models/index.md289
-rw-r--r--chromium/docs/website/site/developers/design-documents/profile-architecture/dot.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/profile-architecture/graph5.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/profile-architecture/index.md287
-rw-r--r--chromium/docs/website/site/developers/design-documents/profile-chooser-menu/Avatar Menu Classes.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/profile-chooser-menu/index.md52
-rw-r--r--chromium/docs/website/site/developers/design-documents/rappor/index.md282
-rw-r--r--chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-hw-rendering.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-sw-rendering.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-non-composited-sw-rendering.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-request-anim-frame.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/index.md55
-rw-r--r--chromium/docs/website/site/developers/design-documents/rendering-benchmarks/index.md217
-rw-r--r--chromium/docs/website/site/developers/design-documents/rendertext/index.md19
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details1.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details2.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details3.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details4.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/browse.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/csdservice.svg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection_without_legend.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/index.md147
-rw-r--r--chromium/docs/website/site/developers/design-documents/safebrowsing/legend.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/safesearch/index.md62
-rw-r--r--chromium/docs/website/site/developers/design-documents/sandbox/Sandbox-FAQ/index.md13
-rw-r--r--chromium/docs/website/site/developers/design-documents/sandbox/index.md12
-rw-r--r--chromium/docs/website/site/developers/design-documents/sandbox/osx-sandboxing-design/index.md108
-rw-r--r--chromium/docs/website/site/developers/design-documents/sandbox/sbox_top_diagram.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/sane-time/index.md171
-rw-r--r--chromium/docs/website/site/developers/design-documents/secure-web-proxy/index.md74
-rw-r--r--chromium/docs/website/site/developers/design-documents/service-processes/index.md90
-rw-r--r--chromium/docs/website/site/developers/design-documents/site-engagement/index.md90
-rw-r--r--chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-arch.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-siteinstances.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/site-isolation/OWNERS3
-rw-r--r--chromium/docs/website/site/developers/design-documents/site-isolation/index.md350
-rw-r--r--chromium/docs/website/site/developers/design-documents/software-updates-courgette/index.md211
-rw-r--r--chromium/docs/website/site/developers/design-documents/startup/index.md12
-rw-r--r--chromium/docs/website/site/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase/index.md140
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/client-tag-based-model-type-processor/index.md130
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/diagnostics/index.md138
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/index.md49
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/model-api/index.md317
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/sync-data-best-practices/index.md45
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/index.md421
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/system-dictionary-pop-up-architecture/index.md227
-rw-r--r--chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/tab-strip-mac/index.md321
-rw-r--r--chromium/docs/website/site/developers/design-documents/tab-strip-mac/translucent.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/tabtastic-2-requirements/index.md43
-rw-r--r--chromium/docs/website/site/developers/design-documents/themes/index.md44
-rw-r--r--chromium/docs/website/site/developers/design-documents/threading/index.md12
-rw-r--r--chromium/docs/website/site/developers/design-documents/threading/suble-threading-bugs-and-patterns-to-avoid-them/index.md14
-rw-r--r--chromium/docs/website/site/developers/design-documents/time-safety-and-readability/index.md92
-rw-r--r--chromium/docs/website/site/developers/design-documents/time-sources/index.md79
-rw-r--r--chromium/docs/website/site/developers/design-documents/tpm-usage/index.md295
-rw-r--r--chromium/docs/website/site/developers/design-documents/translate/index.md97
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-development-practices/index.md72
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-localization/index.md330
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-localization/mac-notes/index.md264
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/index.md451
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/user-scripts/index.md75
-rw-r--r--chromium/docs/website/site/developers/design-documents/video-capture/VideoCaptureBrowserClasses.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/video-capture/index.md140
-rw-r--r--chromium/docs/website/site/developers/design-documents/video-playback-and-compositor/index.md188
-rw-r--r--chromium/docs/website/site/developers/design-documents/video/index.md169
-rw-r--r--chromium/docs/website/site/developers/design-documents/video/video_stack_arch.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/video/video_stack_arch.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/views-rect-based-targeting/index.md127
-rw-r--r--chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.graffle.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/views-windowing/index.md198
-rw-r--r--chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview (1).png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/web-midi/index.md52
-rw-r--r--chromium/docs/website/site/developers/design-documents/web-nfc/index.md162
-rw-r--r--chromium/docs/website/site/developers/design-documents/web-nfc/ndef_reader.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/web-nfc/ndef_writer.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/web-nfc/nfc_android_platform.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/webnavigation-api-internals/index.md139
-rw-r--r--chromium/docs/website/site/developers/design-documents/widget-refactor/index.md28
-rw-r--r--chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.graffle.zip.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/wrench-menu-mac/index.md34
-rw-r--r--chromium/docs/website/site/developers/design-documents/xss-auditor/XSSAuditorViewSource.png.sha11
-rw-r--r--chromium/docs/website/site/developers/design-documents/xss-auditor/index.md157
-rw-r--r--chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/DumpCFReg.zip.sha11
-rw-r--r--chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image0.png.sha11
-rw-r--r--chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image1.png.sha11
-rw-r--r--chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image3.png.sha11
-rw-r--r--chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image4.png.sha11
-rw-r--r--chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/index.md270
-rw-r--r--chromium/docs/website/site/developers/diagnostics/index.md10
-rw-r--r--chromium/docs/website/site/developers/diagnostics/installer-error-strings/index.md125
-rw-r--r--chromium/docs/website/site/developers/discussion-groups/index.md71
-rw-r--r--chromium/docs/website/site/developers/dns-over-https/index.md54
-rw-r--r--chromium/docs/website/site/developers/enterprise-changes/index.md108
-rw-r--r--chromium/docs/website/site/developers/experimental-branches/index.md24
-rw-r--r--chromium/docs/website/site/developers/extensions-deployment-faq/index.md129
-rw-r--r--chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.52.02 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.57.03 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.12 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.21 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 4.27.30 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/f-script-anywhere/index.md90
-rw-r--r--chromium/docs/website/site/developers/fast-intro-to-git-internals/index.md9
-rw-r--r--chromium/docs/website/site/developers/finding-somebody-who-knows-how-a-piece-of-code-works/index.md42
-rw-r--r--chromium/docs/website/site/developers/generated-files/index.md94
-rw-r--r--chromium/docs/website/site/developers/gerrit-guide/index.md171
-rw-r--r--chromium/docs/website/site/developers/git-cache/index.md8
-rw-r--r--chromium/docs/website/site/developers/github-collaboration/index.md44
-rw-r--r--chromium/docs/website/site/developers/gn-build-configuration/index.md270
-rw-r--r--chromium/docs/website/site/developers/gyp-environment-variables/index.md251
-rw-r--r--chromium/docs/website/site/developers/gyp-environment-variables/menu_check.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/bashrc-tail85
-rw-r--r--chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/goma-ninja10
-rw-r--r--chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/index.md72
-rw-r--r--chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/ninja7
-rw-r--r--chromium/docs/website/site/developers/how-tos/android-build-instructions/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/angle-infra/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/angle-wrangling/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/api-keys/index.md179
-rw-r--r--chromium/docs/website/site/developers/how-tos/build-instructions-android-webview/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/build-instructions-cast/index.md14
-rw-r--r--chromium/docs/website/site/developers/how-tos/build-instructions-chromeos/index.md17
-rw-r--r--chromium/docs/website/site/developers/how-tos/build-instructions-windows/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/chrome-frame-cfinstall/index.md107
-rw-r--r--chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/index.md34
-rw-r--r--chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/screenshot-chromeframe.jpeg.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/chromium-modularization/index.md201
-rw-r--r--chromium/docs/website/site/developers/how-tos/closure-compilation/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/component-build/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope-update11
-rw-r--r--chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope.el41
-rw-r--r--chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/index.md24
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-gpu-related-code/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-android/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-os-x/building-with-ninja-debugging-with-xcode/index.md13
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-os-x/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-windows/StepIntoSpecific.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-windows/example-of-working-with-a-dump/index.md304
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-windows/gflags.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/graphicsdebugger.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/index.md69
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-windows/index.md496
-rw-r--r--chromium/docs/website/site/developers/how-tos/debugging-on-windows/windbg-help/index.md249
-rw-r--r--chromium/docs/website/site/developers/how-tos/depottools/gclient/index.md13
-rw-r--r--chromium/docs/website/site/developers/how-tos/depottools/index.md196
-rw-r--r--chromium/docs/website/site/developers/how-tos/depottools/presubmit-scripts/index.md275
-rw-r--r--chromium/docs/website/site/developers/how-tos/drover/1.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/drover/2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/drover/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/editing-the-spell-checking-dictionaries/index.md163
-rw-r--r--chromium/docs/website/site/developers/how-tos/enterprise/adding-new-policies/index.md15
-rw-r--r--chromium/docs/website/site/developers/how-tos/enterprise/index.md20
-rw-r--r--chromium/docs/website/site/developers/how-tos/enterprise/protobuf-encoded-policy-blobs/index.md56
-rw-r--r--chromium/docs/website/site/developers/how-tos/enterprise/running-the-cloud-policy-test-server/index.md288
-rw-r--r--chromium/docs/website/site/developers/how-tos/file-web-bluetooth-bugs/index.md223
-rw-r--r--chromium/docs/website/site/developers/how-tos/get-the-code-v2/index.md313
-rw-r--r--chromium/docs/website/site/developers/how-tos/get-the-code/gclient-managed-mode/index.md54
-rw-r--r--chromium/docs/website/site/developers/how-tos/get-the-code/index.md39
-rw-r--r--chromium/docs/website/site/developers/how-tos/get-the-code/multiple-working-directories/index.md61
-rw-r--r--chromium/docs/website/site/developers/how-tos/get-the-code/working-with-branches/index.md220
-rw-r--r--chromium/docs/website/site/developers/how-tos/get-the-code/working-with-nested-repos/index.md69
-rw-r--r--chromium/docs/website/site/developers/how-tos/get-the-code/working-with-release-branches/index.md94
-rw-r--r--chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/Content.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/index.md358
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-gardening/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-overdraw-debugging-tool/index.md103
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step1.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/check_gpu_bots.py498
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/index.md91
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-wrangling/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/gpu-wrangling/wrangler.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers/index.md39
-rw-r--r--chromium/docs/website/site/developers/how-tos/index.md34
-rw-r--r--chromium/docs/website/site/developers/how-tos/inspecting-ash/Screenshot from 2017-08-28 14_28_36.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/inspecting-ash/XoWGyYBg5EA.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/inspecting-ash/chrome_inspect_other.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/inspecting-ash/distances.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/inspecting-ash/dom_tree.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/inspecting-ash/index.md99
-rw-r--r--chromium/docs/website/site/developers/how-tos/inspecting-ash/screenshot2.gif.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/install-depot-tools/index.md23
-rw-r--r--chromium/docs/website/site/developers/how-tos/leak-gdi-object-in-windows/index.md114
-rw-r--r--chromium/docs/website/site/developers/how-tos/mac-development/index.md46
-rw-r--r--chromium/docs/website/site/developers/how-tos/make-a-web-standards-proposal/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/old-get-the-code/index.md205
-rw-r--r--chromium/docs/website/site/developers/how-tos/order-file-development-guide/index.md86
-rw-r--r--chromium/docs/website/site/developers/how-tos/retrieving-crash-reports-on-ios/index.md88
-rw-r--r--chromium/docs/website/site/developers/how-tos/run-chromium-with-flags/index.md162
-rw-r--r--chromium/docs/website/site/developers/how-tos/run-mojo-shell/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/scopedlogger/index.md11
-rw-r--r--chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_09.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_29.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_54_06.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_55_28.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-24 11_16_39.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2019-11-27 23-09-36.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/index.md67
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/3dtracing2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/Screenshot-about_gpu.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracing2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracingfinal.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/index.md273
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov1.mp4.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov2.mp4.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov3.mp4.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov4.mp4.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/Screen Shot 2013-05-14 at 9.10.55 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/frameviewer.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/index.md79
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/index.md96
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/2. MemoryInfra- From trace JSON to Tracks.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 5.30.33 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 7.42.47 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/dump.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.34.32 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.38.32 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/index.md16
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA (1).png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/detailed_dump.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/heap.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/index.md16
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/new.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/howto-adding-memory-infra-tracing-to-a-component/index.md226
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/index.md14
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/memory_infra_logo.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/startup-tracing-with-memory-profiling/index.md74
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 1.37.00 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.46.58 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.47.34 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-30.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-44.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-19-11.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/index.md299
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s3.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s4.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/sunburst.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-flow.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-frame-viewer.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-scheduler.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-systrace.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/checkboxes.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/index.md99
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/picture.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skdebugger2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skpsite.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/smallabouttracing.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.39.51 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.46.48 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/first.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/index.md623
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/sixth-before-import.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/synchanell.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace3.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation/index.md149
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual trace.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information is.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_frameviewer_trace.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_normal_trace.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/index.md566
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/nytimes_scroll_trace.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/output_optimized_frame.gif.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_reduced_trace.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_trace.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png.sha11
-rw-r--r--chromium/docs/website/site/developers/how-tos/using-drmemory/index.md232
-rw-r--r--chromium/docs/website/site/developers/how-tos/using-r-to-reduce-page-cycler-regressions/index.md202
-rw-r--r--chromium/docs/website/site/developers/how-tos/vectorized-icons-in-native-chrome-ui/index.md12
-rw-r--r--chromium/docs/website/site/developers/how-tos/visualstudio-tricks/index.md83
-rw-r--r--chromium/docs/website/site/developers/how-tos/webkit-gardening/index.md11
-rw-r--r--chromium/docs/website/site/developers/index.md309
-rw-r--r--chromium/docs/website/site/developers/installer/index.md215
-rw-r--r--chromium/docs/website/site/developers/irc/index.md101
-rw-r--r--chromium/docs/website/site/developers/javascript-unittests/Coverage.png.sha11
-rw-r--r--chromium/docs/website/site/developers/javascript-unittests/EnableCoverage.png.sha11
-rw-r--r--chromium/docs/website/site/developers/javascript-unittests/QUnit.png.sha11
-rw-r--r--chromium/docs/website/site/developers/javascript-unittests/index.md219
-rw-r--r--chromium/docs/website/site/developers/leak-detection/index.md80
-rw-r--r--chromium/docs/website/site/developers/learning-your-way-around-the-code/index.md72
-rw-r--r--chromium/docs/website/site/developers/libraries-guide/index.md21
-rw-r--r--chromium/docs/website/site/developers/linux-technical-faq/index.md91
-rw-r--r--chromium/docs/website/site/developers/lock-and-condition-variable/index.md1160
-rw-r--r--chromium/docs/website/site/developers/mandoline/Mandoline.png.sha11
-rw-r--r--chromium/docs/website/site/developers/mandoline/build/index.md202
-rw-r--r--chromium/docs/website/site/developers/mandoline/index.md30
-rw-r--r--chromium/docs/website/site/developers/markdown-documentation/index.md29
-rw-r--r--chromium/docs/website/site/developers/md5-certificate-statistics/index.md94
-rw-r--r--chromium/docs/website/site/developers/meet-the-web-platform-companion/index.md228
-rw-r--r--chromium/docs/website/site/developers/memory-bloat/index.md235
-rw-r--r--chromium/docs/website/site/developers/memory-usage-backgrounder/aboutmemory.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/memory-usage-backgrounder/chrometaskmanager.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/memory-usage-backgrounder/index.md261
-rw-r--r--chromium/docs/website/site/developers/memory-usage-backgrounder/taskmanager.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/memory/index.md10
-rw-r--r--chromium/docs/website/site/developers/memory_watcher/index.md153
-rw-r--r--chromium/docs/website/site/developers/mus-ash/index.md162
-rw-r--r--chromium/docs/website/site/developers/new-features/index.md12
-rw-r--r--chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked bubble.png.sha11
-rw-r--r--chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked yellow slide and bubble.png.sha11
-rw-r--r--chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked-yellow-slide.png.sha11
-rw-r--r--chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.09.10 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.10.16 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/npapi-deprecation/index.md259
-rw-r--r--chromium/docs/website/site/developers/npapi-deprecation/npapimock.png.sha11
-rw-r--r--chromium/docs/website/site/developers/os-x-keyboard-handling/index.md143
-rw-r--r--chromium/docs/website/site/developers/owners-files/index.md10
-rw-r--r--chromium/docs/website/site/developers/page-sets-and-benchmarks/index.md130
-rw-r--r--chromium/docs/website/site/developers/pepper-api-best-practices/index.md101
-rw-r--r--chromium/docs/website/site/developers/polymer-0-8/index.md9
-rw-r--r--chromium/docs/website/site/developers/postmortems/index.md98
-rw-r--r--chromium/docs/website/site/developers/profiling-chromium-and-webkit/index.md129
-rw-r--r--chromium/docs/website/site/developers/profiling-flame-graphs/flamegraph.png.sha11
-rw-r--r--chromium/docs/website/site/developers/profiling-flame-graphs/index.md56
-rw-r--r--chromium/docs/website/site/developers/public-calendar-for-meetings-discussing-new-ideas/index.md20
-rw-r--r--chromium/docs/website/site/developers/quarantined-pages/index.md9
-rw-r--r--chromium/docs/website/site/developers/quarantined-pages/meeting-notes/index.md71
-rw-r--r--chromium/docs/website/site/developers/quick-reference/index.md147
-rw-r--r--chromium/docs/website/site/developers/recent-changes-credential-management-api/index.md213
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/01-movement.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/02-frameviewr.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/03-zoom.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/04-rects.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/05-tapdelay.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/06-invalidation.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/07-hypothetsis.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/08-after.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/09-layertree.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/10-dramatically.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/11-investigation.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/12-asusual.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/13-recalc.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/14-otherlayers.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/15-difflayertree.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/16-after.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/17-loadrelatedjank.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/18-verylong.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/19-populated.png.sha11
-rw-r--r--chromium/docs/website/site/developers/rendering-performance-case-study-1/index.md303
-rw-r--r--chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_1.pdf.sha11
-rw-r--r--chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_2.pdf.sha11
-rw-r--r--chromium/docs/website/site/developers/rtl-in-webkit/index.md241
-rw-r--r--chromium/docs/website/site/developers/severity-guidelines/index.md171
-rw-r--r--chromium/docs/website/site/developers/shutdown/index.md71
-rw-r--r--chromium/docs/website/site/developers/slack/blob_cheer.png.sha11
-rw-r--r--chromium/docs/website/site/developers/slack/blob_peek.png.sha11
-rw-r--r--chromium/docs/website/site/developers/slack/blob_praise.png.sha11
-rw-r--r--chromium/docs/website/site/developers/slack/blob_stop.png.sha11
-rw-r--r--chromium/docs/website/site/developers/slack/blob_think.png.sha11
-rw-r--r--chromium/docs/website/site/developers/slack/index.md116
-rw-r--r--chromium/docs/website/site/developers/slickedit-editor-notes/index.md77
-rw-r--r--chromium/docs/website/site/developers/smart-pointer-guidelines/index.md193
-rw-r--r--chromium/docs/website/site/developers/speed-hall-of-fame/index.md349
-rw-r--r--chromium/docs/website/site/developers/speed-infra/chrome_speed_color.png.sha11
-rw-r--r--chromium/docs/website/site/developers/speed-infra/index.md10
-rw-r--r--chromium/docs/website/site/developers/speed-infra/perf-bug-faq/index.md12
-rw-r--r--chromium/docs/website/site/developers/speed-infra/speed_logo.png.sha11
-rw-r--r--chromium/docs/website/site/developers/status-update-email-best-practices/index.md42
-rw-r--r--chromium/docs/website/site/developers/sublime-text/SublimeExample.png.sha11
-rw-r--r--chromium/docs/website/site/developers/sublime-text/compile_current_file.py217
-rw-r--r--chromium/docs/website/site/developers/sublime-text/index.md475
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/index.md8
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/release-process/buildbot_screenshot.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/release-process/chromium-24.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/release-process/death_metal_rooster3.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/release-process/index.md465
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/release-process/release process version 2.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/release-process/starwars-disturbance2.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/tech-talk-videos/release-process/update_software_popup.png.sha11
-rw-r--r--chromium/docs/website/site/developers/technical-discussion-groups/index.md312
-rw-r--r--chromium/docs/website/site/developers/telemetry/add_a_measurement/index.md61
-rw-r--r--chromium/docs/website/site/developers/telemetry/benchmark-organization-diagram.png.sha11
-rw-r--r--chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/Screen Shot 2014-12-10 at 9.42.17 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/index.md111
-rw-r--r--chromium/docs/website/site/developers/telemetry/index.md10
-rw-r--r--chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.28 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.51 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/telemetry/performance-try-bots/index.md11
-rw-r--r--chromium/docs/website/site/developers/telemetry/profiling/index.md249
-rw-r--r--chromium/docs/website/site/developers/telemetry/record_a_page_set/WebPageReplayDiagram.png.sha11
-rw-r--r--chromium/docs/website/site/developers/telemetry/record_a_page_set/index.md125
-rw-r--r--chromium/docs/website/site/developers/telemetry/run_locally/index.md12
-rw-r--r--chromium/docs/website/site/developers/telemetry/running-telemetry-on-chrome-os/index.md13
-rw-r--r--chromium/docs/website/site/developers/telemetry/telemetry-feature-guidelines/index.md73
-rw-r--r--chromium/docs/website/site/developers/telemetry/telemetry-mac-keychain-setup/index.md31
-rw-r--r--chromium/docs/website/site/developers/telemetry/telemetry-profile-generation/index.md59
-rw-r--r--chromium/docs/website/site/developers/telemetry/telemetry-unittests/index.md12
-rw-r--r--chromium/docs/website/site/developers/telemetry/upload_to_cloud_storage/index.md104
-rw-r--r--chromium/docs/website/site/developers/testing/adding-performance-tests/Screen Shot 2013-12-20 at 9.03.31 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/adding-performance-tests/index.md31
-rw-r--r--chromium/docs/website/site/developers/testing/adding-tests-to-the-main-waterfall/index.md49
-rw-r--r--chromium/docs/website/site/developers/testing/addresssanitizer/index.md12
-rw-r--r--chromium/docs/website/site/developers/testing/android-tests/android-webview-tests/index.md14
-rw-r--r--chromium/docs/website/site/developers/testing/android-tests/index.md163
-rw-r--r--chromium/docs/website/site/developers/testing/android-tests/testing-android-code-that-crosses-the-c-java-boundary/index.md76
-rw-r--r--chromium/docs/website/site/developers/testing/browser-tests/index.md223
-rw-r--r--chromium/docs/website/site/developers/testing/changedashboard/index.md53
-rw-r--r--chromium/docs/website/site/developers/testing/chrome-test-apis/index.md21
-rw-r--r--chromium/docs/website/site/developers/testing/chromium-build-infrastructure/index.md11
-rw-r--r--chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/index.md269
-rw-r--r--chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/page_cycler_plot.png.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/chromium-build-infrastructure/repro-a-build/index.md38
-rw-r--r--chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/index.md343
-rw-r--r--chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/waterfall.png.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/commit-queue/chromium_trybot-json/index.md32
-rw-r--r--chromium/docs/website/site/developers/testing/commit-queue/design/index.md171
-rw-r--r--chromium/docs/website/site/developers/testing/commit-queue/index.md16
-rw-r--r--chromium/docs/website/site/developers/testing/commit-queue/integration-with-rietveld/index.md193
-rw-r--r--chromium/docs/website/site/developers/testing/contacting-a-trooper/index.md12
-rw-r--r--chromium/docs/website/site/developers/testing/control-flow-integrity/index.md209
-rw-r--r--chromium/docs/website/site/developers/testing/control-flow-integrity/overhead/index.md139
-rw-r--r--chromium/docs/website/site/developers/testing/dr-fuzz/index.md12
-rw-r--r--chromium/docs/website/site/developers/testing/fake-bidi/index.md41
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky2.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky3.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/index.md167
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/missingorextra.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/newFailingTest.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults2.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/testing/frame-rate-test/index.md172
-rw-r--r--chromium/docs/website/site/developers/testing/gpu-testing/gpu-bot-details/index.md14
-rw-r--r--chromium/docs/website/site/developers/testing/gpu-testing/index.md12
-rw-r--r--chromium/docs/website/site/developers/testing/index.md69
-rw-r--r--chromium/docs/website/site/developers/testing/instrumented-libraries-for-dynamic-tools/index.md109
-rw-r--r--chromium/docs/website/site/developers/testing/isolated-testing/deterministic-builds/index.md188
-rw-r--r--chromium/docs/website/site/developers/testing/isolated-testing/for-swes/index.md224
-rw-r--r--chromium/docs/website/site/developers/testing/isolated-testing/index.md35
-rw-r--r--chromium/docs/website/site/developers/testing/isolated-testing/infrastructure/index.md204
-rw-r--r--chromium/docs/website/site/developers/testing/leaksanitizer/index.md160
-rw-r--r--chromium/docs/website/site/developers/testing/libfuzzer/index.md11
-rw-r--r--chromium/docs/website/site/developers/testing/memorysanitizer/index.md267
-rw-r--r--chromium/docs/website/site/developers/testing/multi-process-ram-usage-analysis-on-android/index.md141
-rw-r--r--chromium/docs/website/site/developers/testing/no-compile-tests/index.md69
-rw-r--r--chromium/docs/website/site/developers/testing/page-heap-for-chrome/index.md114
-rw-r--r--chromium/docs/website/site/developers/testing/running-tests/index.md141
-rw-r--r--chromium/docs/website/site/developers/testing/threadsanitizer-tsan-v2/index.md233
-rw-r--r--chromium/docs/website/site/developers/testing/time-complexity-tests/index.md384
-rw-r--r--chromium/docs/website/site/developers/testing/try-server-usage/index.md12
-rw-r--r--chromium/docs/website/site/developers/testing/undefinedbehaviorsanitizer/index.md51
-rw-r--r--chromium/docs/website/site/developers/testing/webgl-conformance-tests/index.md21
-rw-r--r--chromium/docs/website/site/developers/testing/webkit-layout-tests/content-shell/index.md14
-rw-r--r--chromium/docs/website/site/developers/testing/webkit-layout-tests/identifying-tests-that-depend-on-order/index.md14
-rw-r--r--chromium/docs/website/site/developers/testing/webkit-layout-tests/index.md12
-rw-r--r--chromium/docs/website/site/developers/testing/webkit-layout-tests/testexpectations/index.md14
-rw-r--r--chromium/docs/website/site/developers/testing/webkit-layout-tests/using-breakpad-with-content-shell/index.md14
-rw-r--r--chromium/docs/website/site/developers/testing/windows-installer-tests/index.md51
-rw-r--r--chromium/docs/website/site/developers/the-json-test-results-format/index.md10
-rw-r--r--chromium/docs/website/site/developers/the-rendering-critical-path/index.md273
-rw-r--r--chromium/docs/website/site/developers/threaded-task-tracking/index.md654
-rw-r--r--chromium/docs/website/site/developers/ticket-milestone-punting/index.md51
-rw-r--r--chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-design-overview/index.md91
-rw-r--r--chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan/index.md40
-rw-r--r--chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-users-guide/index.md651
-rw-r--r--chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/how-to-contribute-to-grit/index.md54
-rw-r--r--chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/index.md31
-rw-r--r--chromium/docs/website/site/developers/tools-we-use-in-chromium/index.md35
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/chrome-in-chromeos-gardening/index.md21
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/handling-a-failing-test/index.md98
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/index.md52
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-04-23 at 8.04.15 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.23.35 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.29.17 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.33.54 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.39.38 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.50.40 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/SheriffBadge2.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screen Shot 2013-05-28 at 6.18.39 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screenshot from 2013-08-20 09_14_59.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/index.md14
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/index.md19
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Builders.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/ChromeOS Parallel CQ - Linear view of CLs.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Screenshot.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Test Orchestrator.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/cloud-storage.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/crash-example.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/index.md25
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/Waterfall.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/index.md20
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/tree_status.png.sha11
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-o-matic/index.md17
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriff-philosophy/index.md23
-rw-r--r--chromium/docs/website/site/developers/tree-sheriffs/sheriffing-bug-queues/index.md14
-rw-r--r--chromium/docs/website/site/developers/triggered-reset-api/index.md54
-rw-r--r--chromium/docs/website/site/developers/u-boot/index.md487
-rw-r--r--chromium/docs/website/site/developers/u-boot/ttyusb57
-rw-r--r--chromium/docs/website/site/developers/updating-webui-for-material-design/index.md124
-rw-r--r--chromium/docs/website/site/developers/updating-webui-for-material-design/settings-material-design/index.md113
-rw-r--r--chromium/docs/website/site/developers/updating-webui-for-material-design/testing-asynchronous-ui/index.md72
-rw-r--r--chromium/docs/website/site/developers/updating-webui-for-material-design/testing-webui-with-mocha/index.md219
-rw-r--r--chromium/docs/website/site/developers/updating-webui-for-material-design/using-polymer-icons/index.md91
-rw-r--r--chromium/docs/website/site/developers/useful-extensions/index.md155
-rw-r--r--chromium/docs/website/site/developers/using-atom-as-your-ide/index.md10
-rw-r--r--chromium/docs/website/site/developers/using-eclipse-with-chromium/index.md12
-rw-r--r--chromium/docs/website/site/developers/version-numbers/index.md94
-rw-r--r--chromium/docs/website/site/developers/web-development-style-guide/index.md10
-rw-r--r--chromium/docs/website/site/developers/web-idl-interfaces/index.md485
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-09 at 7.43.31 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 11.59.08 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 12.40.51 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.00.09 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.02.41 AM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.48.28 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.56.03 PM.png.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/index.md633
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/noinstalls.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/web-intents-in-chrome/with.PNG.sha11
-rw-r--r--chromium/docs/website/site/developers/web-platform-status/forms/index.md266
-rw-r--r--chromium/docs/website/site/developers/web-platform-status/index.md1419
-rw-r--r--chromium/docs/website/site/developers/webkit-core-projects/index.md108
-rw-r--r--chromium/docs/website/site/developers/webui/index.md453
-rw-r--r--chromium/docs/website/site/developers/webview-changes/index.md42
-rw-r--r--chromium/docs/website/site/developers/whistling.jpg.sha11
-rw-r--r--chromium/docs/website/site/developers/windows-binary-sizes/index.md286
-rw-r--r--chromium/docs/website/site/devtools/announcements/index.md8
-rw-r--r--chromium/docs/website/site/devtools/breakpoints-tutorial/index.md15
-rw-r--r--chromium/docs/website/site/devtools/capturing-a-timeline-trace/index.md29
-rw-r--r--chromium/docs/website/site/devtools/capturing-a-timeline-trace/save timeline.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/feed-icon16x16.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/arrow.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_1.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dir.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dirxml.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_one.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_zero.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_id.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_inspect.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_bottom.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_top.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_css_syntax_highlighting.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_event_listeners_gear.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_hover.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_metrics.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_p.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_panel.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_properties_paner.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_search.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_checkboxes.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_edit.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/exclude_selected_function.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/focus_selected_function.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_compare.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_drill_down.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/index.md9
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/page_menu.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiles_panel_1.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_cpu_1.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_search.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_click_sidebar.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_drag_drop.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_enable_window.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_panel.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_size.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_sort_by.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints_2.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel_2.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_paused.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_cookie.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_database.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_sql_query.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_sticky_note.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_panel.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_records.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_slider_right.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/top_tool_bar_w_console.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/two_profiles.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench-icon.jpg.sha11
-rw-r--r--chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/index.md12
-rw-r--r--chromium/docs/website/site/devtools/page_menu.png.sha11
-rw-r--r--chromium/docs/website/site/devtools/wrench-icon.jpg.sha11
-rw-r--r--chromium/docs/website/site/embeddedsearch/index.md208
-rw-r--r--chromium/docs/website/site/events/blinkon-14/index.md213
-rw-r--r--chromium/docs/website/site/events/blinkon-15/index.md116
-rw-r--r--chromium/docs/website/site/events/blinkon-16/index.md74
-rw-r--r--chromium/docs/website/site/events/blinkon-resources/index.md15
-rw-r--r--chromium/docs/website/site/events/index.md15
-rw-r--r--chromium/docs/website/site/favicon.ico.sha11
-rw-r--r--chromium/docs/website/site/flag-ownership/index.md8
-rw-r--r--chromium/docs/website/site/flash-roadmap/deprecating-wildcards/index.md289
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 15.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 27.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Aug 10.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 6.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 9.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update May 24.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Daily Actives - Oct 13, 2017.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact - Usage.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impressions - Oct 13, 2017.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Usage Trend - Jan 25th, 2017.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 15.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 27.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Aug 10.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 6.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 9.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update May 24.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after (Updated).png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after.jpg.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 before.png.sha11
-rw-r--r--chromium/docs/website/site/flash-roadmap/flash-usage-trends/index.md33
-rw-r--r--chromium/docs/website/site/flash-roadmap/index.md607
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/chromium-bug-labels/index.md119
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/crash-with-gdb9
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/index.md72
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/index.md180
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/reporting-crash-bug/index.md107
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/triage-best-practices/index.md120
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/blockthirdpartycookies.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/index.md23
-rw-r--r--chromium/docs/website/site/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds/index.md122
-rw-r--r--chromium/docs/website/site/for-testers/command-line-flags/index.md11
-rw-r--r--chromium/docs/website/site/for-testers/enable-logging/configure providers.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/enable-logging/index.md122
-rw-r--r--chromium/docs/website/site/for-testers/faft/FAFT (1).jpg.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/FAFT Hardware Setup Layout.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/Servo2_with_labels.jpg.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/ServoV4-typeC-micro.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/ServoV4.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/index.md10
-rw-r--r--chromium/docs/website/site/for-testers/faft/pd_typeC.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/rc_typeA.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/rc_typec.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/rc_typec_official.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/faft/servo_v4.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing/index.md56
-rw-r--r--chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/index.md45
-rw-r--r--chromium/docs/website/site/for-testers/frontend-testing/index.md17
-rw-r--r--chromium/docs/website/site/for-testers/frontend-testing/spell-check/index.md42
-rw-r--r--chromium/docs/website/site/for-testers/frontend-testing/spell-check/spell-check--basic-testing/index.md54
-rw-r--r--chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/index.md16
-rw-r--r--chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/list_chrome.zip.sha11
-rw-r--r--chromium/docs/website/site/for-testers/index.md31
-rw-r--r--chromium/docs/website/site/for-testers/installer/index.md41
-rw-r--r--chromium/docs/website/site/for-testers/installer/installer--basic-testing/index.md135
-rw-r--r--chromium/docs/website/site/for-testers/providing-memory-details/index.md29
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/Screen Shot 2017-04-26 at 11.18.49 AM.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/capture-bytes.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/inclue-bytes-mobile.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/index.md84
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/net-export-61.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/net-export-raw-bytes-61.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/net-internals.PNG.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/netexport.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/netinternals_export.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/save-to-file.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/providing-network-details/start-logging-to-disk.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/saft/index.md222
-rw-r--r--chromium/docs/website/site/for-testers/test-cases/index.md180
-rw-r--r--chromium/docs/website/site/for-testers/touch-firmware-tests/TouchFWTests.png.sha11
-rw-r--r--chromium/docs/website/site/for-testers/touch-firmware-tests/index.md108
-rw-r--r--chromium/docs/website/site/for-testers/unhealthy-tests-report/index.md8
-rw-r--r--chromium/docs/website/site/geforce-now-on-chromebooks/index.md297
-rw-r--r--chromium/docs/website/site/getting-involved/become-a-committer/index.md199
-rw-r--r--chromium/docs/website/site/getting-involved/bug-triage/index.md183
-rw-r--r--chromium/docs/website/site/getting-involved/dev-channel/index.md208
-rw-r--r--chromium/docs/website/site/getting-involved/dev-channel/wrench.png.sha11
-rw-r--r--chromium/docs/website/site/getting-involved/download-chromium/index.md74
-rw-r--r--chromium/docs/website/site/getting-involved/get-bug-editing-privileges/index.md60
-rw-r--r--chromium/docs/website/site/getting-involved/index.md38
-rw-r--r--chromium/docs/website/site/getting-involved/summerofcode2013/index.md79
-rw-r--r--chromium/docs/website/site/glossary/index.md8
-rw-r--r--chromium/docs/website/site/hsts/email.png.sha11
-rw-r--r--chromium/docs/website/site/hsts/index.md60
-rw-r--r--chromium/docs/website/site/index.md3
-rw-r--r--chromium/docs/website/site/infra/index.md27
-rw-r--r--chromium/docs/website/site/irc-support-faq/index.md27
-rw-r--r--chromium/docs/website/site/irc/index.md12
-rw-r--r--chromium/docs/website/site/issue-tracking/autotriage/index.md176
-rw-r--r--chromium/docs/website/site/issue-tracking/creating-a-bug-template-url/index.md78
-rw-r--r--chromium/docs/website/site/issue-tracking/editing-components/Component Edit View.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/editing-components/Component List.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/editing-components/Components.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/editing-components/Development Process.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/editing-components/index.md40
-rw-r--r--chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Confirm.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Worked.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/how-to-bulk-edit/index.md46
-rw-r--r--chromium/docs/website/site/issue-tracking/index.md29
-rw-r--r--chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/Conceptual Model.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/State Diagram.jpg.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/index.md17
-rw-r--r--chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit - Confirm.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/migrating-issue-components/Component List.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/migrating-issue-components/Components.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/migrating-issue-components/Depercate Component.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/migrating-issue-components/Development Process.png.sha11
-rw-r--r--chromium/docs/website/site/issue-tracking/migrating-issue-components/index.md66
-rw-r--r--chromium/docs/website/site/issue-tracking/release-block-guidelines/index.md63
-rw-r--r--chromium/docs/website/site/issue-tracking/requesting-a-component-or-label/index.md66
-rw-r--r--chromium/docs/website/site/issue-tracking/tips-and-tricks/index.md44
-rw-r--r--chromium/docs/website/site/july-2021---new-features-fixit-stability-security-fixes-interop-fixes-and-more/index.md268
-rw-r--r--chromium/docs/website/site/layout-test-contest/index.md293
-rw-r--r--chromium/docs/website/site/layout-test-contest/layout-test-contest-leaderboard/index.md8
-rw-r--r--chromium/docs/website/site/nativeclient/day-to-day/codereview/index.md76
-rw-r--r--chromium/docs/website/site/nativeclient/day-to-day/index.md9
-rw-r--r--chromium/docs/website/site/nativeclient/day-to-day/infrastructure-faq/index.md219
-rw-r--r--chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/index.md244
-rw-r--r--chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/nacl_diagram.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/getting-started/index.md9
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md146
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md287
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md155
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md52
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md81
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md33
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md63
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md51
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md222
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md121
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md19
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md72
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md93
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md194
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md339
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/index.md9
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md105
-rw-r--r--chromium/docs/website/site/nativeclient/index.md24
-rw-r--r--chromium/docs/website/site/nativeclient/life-of-sel_ldr/index.md256
-rw-r--r--chromium/docs/website/site/nativeclient/nameservice/index.md170
-rw-r--r--chromium/docs/website/site/nativeclient/nameservice/naming-issues----rationale/index.md93
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/Fragment padding.png.1355408184699.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/index.md303
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/bitcode-abi/index.md12
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers/index.md145
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/developing-pnacl/index.md503
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/experimenting-with-generated-bitcode/index.md77
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/index.md9
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/introduction-to-portable-native-client/index.md151
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/StabilityofthePNaClbitcodeABI.pdf.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/index.md1118
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/subzero/index.md11
-rw-r--r--chromium/docs/website/site/nativeclient/pnacl/subzero/simple-loop-example/index.md373
-rw-r--r--chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/index.md161
-rw-r--r--chromium/docs/website/site/nativeclient/reference/arm-overview/index.md12
-rw-r--r--chromium/docs/website/site/nativeclient/reference/external-resource-directory/index.md75
-rw-r--r--chromium/docs/website/site/nativeclient/reference/index.md9
-rw-r--r--chromium/docs/website/site/nativeclient/reference/research-papers/index.md30
-rw-r--r--chromium/docs/website/site/nativeclient/reference/research-papers/pnacl.pdf.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/styleguide/index.md322
-rw-r--r--chromium/docs/website/site/network-speed-experiments/index.md28
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/HQP Search.jpg.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/HQP.jpg.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/HQP.tiff.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 2.59.44 PM.png.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 3.16.49 PM.png.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/caching/Initialization.png.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/caching/Shutdown.png.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/caching/ShutdownDetail.png.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/caching/Startup.png.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/caching/StartupDetail.png.sha11
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/caching/index.md122
-rw-r--r--chromium/docs/website/site/omnibox-history-provider/index.md222
-rw-r--r--chromium/docs/website/site/pages.json1439
-rw-r--r--chromium/docs/website/site/platform-privacy/index.md22
-rw-r--r--chromium/docs/website/site/quic/index.md111
-rw-r--r--chromium/docs/website/site/quic/parse-client-hello/index.md11
-rw-r--r--chromium/docs/website/site/quic/playing-with-quic/index.md118
-rw-r--r--chromium/docs/website/site/quic/quic-faq/index.md70
-rw-r--r--chromium/docs/website/site/rvalue-references/index.md625
-rw-r--r--chromium/docs/website/site/searchbox/index.md218
-rw-r--r--chromium/docs/website/site/security-keys/index.md217
-rw-r--r--chromium/docs/website/site/servicification/index.md81
-rw-r--r--chromium/docs/website/site/site.json3
-rw-r--r--chromium/docs/website/site/spdy/An_Argument_For_Changing_TCP_Slow_Start.pdf.sha11
-rw-r--r--chromium/docs/website/site/spdy/More_Bandwidth_Doesn_t_Matter_2_(2).pdf.sha11
-rw-r--r--chromium/docs/website/site/spdy/effect_of_initial_cwnd_on_plt(1).png.sha11
-rw-r--r--chromium/docs/website/site/spdy/http2/index.md20
-rw-r--r--chromium/docs/website/site/spdy/index.md73
-rw-r--r--chromium/docs/website/site/spdy/link-headers-and-server-hint/index.md74
-rw-r--r--chromium/docs/website/site/spdy/link-headers-and-server-hint/link-rel-subresource/index.md11
-rw-r--r--chromium/docs/website/site/spdy/spdy-authentication/index.md173
-rw-r--r--chromium/docs/website/site/spdy/spdy-best-practices/index.md61
-rw-r--r--chromium/docs/website/site/spdy/spdy-data/index.md37
-rw-r--r--chromium/docs/website/site/spdy/spdy-data/spdy-bytes.png.sha11
-rw-r--r--chromium/docs/website/site/spdy/spdy-data/spdy-pktloss.png.sha11
-rw-r--r--chromium/docs/website/site/spdy/spdy-data/spdy-rtt.png.sha11
-rw-r--r--chromium/docs/website/site/spdy/spdy-data/spdy-rtt2.png.sha11
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/index.md24
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/controlframetypes/index.md48
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/index.md921
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft2/index.md1250
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-1/index.md1653
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-2/index.md1711
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3/index.md1754
-rw-r--r--chromium/docs/website/site/spdy/spdy-protocol/spdyprotocol-xml/index.md10
-rw-r--r--chromium/docs/website/site/spdy/spdy-tools-and-debugging/index.md55
-rw-r--r--chromium/docs/website/site/spdy/spdy-whitepaper/index.md541
-rw-r--r--chromium/docs/website/site/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png.sha11
-rw-r--r--chromium/docs/website/site/spdy/spdy-whitepaper/spdy_design_and_features_layers.png.sha11
-rw-r--r--chromium/docs/website/site/sts/index.md11
-rw-r--r--chromium/docs/website/site/sts/redirect.xml12
-rw-r--r--chromium/docs/website/site/tab-to-search/index.md49
-rw-r--r--chromium/docs/website/site/teams/animations/OWNERS2
-rw-r--r--chromium/docs/website/site/teams/animations/animation-objectives/index.md261
-rw-r--r--chromium/docs/website/site/teams/animations/animation-worklet/index.md73
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/animations-documentation-throughput-metrics-code-health-capability-delegation-user-input-security-and-more/index.md148
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/april-2019-volume-ii/index.md85
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/april-2019/index.md86
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/april-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md106
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/april-2021---new-features-testing-stability-fixes-interop-fixes-metrics-and-more/index.md298
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/april-2021-vol-2---new-features-testing-stability-fixes-interop-fixes-and-more/index.md257
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/august-2019/index.md84
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/august-2020---code-health-animations-context-menu-and-more/index.md175
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/august-2021---new-features-fixit-testing-code-health-and-more/index.md361
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/august-2021-vol-2---new-features-code-health-stability-security-fixes/index.md146
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/february-2021-new-features-testing-stability-fixes-code-health-and-more/index.md255
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/index.md131
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/january-2020---off-thread-paintworklet-web-animation-scrolltimeline-virtual-scroller-scrollsnap-and-more/index.md124
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/january-2021---code-health-new-features-testing-and-stability-fixes/index.md304
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/july-2019/index.md92
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/june-2019-volume-ii/index.md93
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/june-2019/index.md89
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/june-2020---web-animations-scroll-linked-animations-throughput-metrics-scroll-unification-webdriver-pointer-events-and-more/index.md193
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/june-2021---new-features-stability-fixes-interop-fixes-and-more/index.md255
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/june-2021-vol-2---new-features-stability-fixes-interop-fixes-and-more/index.md240
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/march-2019/index.md107
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/march-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md222
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/march-2021---fixit-week-new-features-testing-interop-metrics-and-more/index.md440
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/may-2019/index.md83
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/may-2021---new-features-testing-stability-fixes-interop-fixes-and-more/index.md220
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/nov-dec-2019---blinkon-scrollsnap-lottie-hittesting-virtualscroller-websharedlibrary-wpt-and-more/index.md116
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/november-2021-highlights/index.md150
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/october-2019/index.md128
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/october-2020---code-health-scroll-timelines-synthetic-user-activation-scroll-unification-and-more/index.md135
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/october-2021---2-sprints-worth-of-highlights/index.md162
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/september-2020---code-heath-animation-timelines-smoothness-metrics-animation-event-handlers-and-more/index.md121
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/september-2020-vol-2---code-health-logical-property-animation-off-thread-paintworklet-capability-delegation-and-more/index.md99
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/september-2021---new-features-testing-code-health-interop-fixes-and-more/index.md228
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/september-update/index.md119
-rw-r--r--chromium/docs/website/site/teams/animations/highlights-archive/web-animation-scroll-linked-animation-snap-after-layout-throughput-metrics-and-more/index.md123
-rw-r--r--chromium/docs/website/site/teams/animations/index.md93
-rw-r--r--chromium/docs/website/site/teams/animations/paint-worklet/index.md40
-rw-r--r--chromium/docs/website/site/teams/binding-team/index.md40
-rw-r--r--chromium/docs/website/site/teams/device-team/index.md33
-rw-r--r--chromium/docs/website/site/teams/devtools/index.md65
-rw-r--r--chromium/docs/website/site/teams/dom-team/index.md18
-rw-r--r--chromium/docs/website/site/teams/ecosystem-infra/index.md20
-rw-r--r--chromium/docs/website/site/teams/index.md7
-rw-r--r--chromium/docs/website/site/teams/input-dev/index.md153
-rw-r--r--chromium/docs/website/site/teams/input-dev/input-objectives/2015-okrs/index.md428
-rw-r--r--chromium/docs/website/site/teams/input-dev/input-objectives/2016-okrs/index.md603
-rw-r--r--chromium/docs/website/site/teams/input-dev/input-objectives/2017-okrs/index.md965
-rw-r--r--chromium/docs/website/site/teams/input-dev/input-objectives/2018-okrs/index.md343
-rw-r--r--chromium/docs/website/site/teams/input-dev/input-objectives/index.md103
-rw-r--r--chromium/docs/website/site/teams/layout-team/bug-triage/index.md53
-rw-r--r--chromium/docs/website/site/teams/layout-team/eliminating-simple-text/index.md125
-rw-r--r--chromium/docs/website/site/teams/layout-team/index.md103
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/20141209/index.md72
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/20150107/index.md221
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/friday-october-2-2015/index.md822
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/index.md135
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/march-2-2015/index.md76
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/may-28-2015/index.md201
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-11-2016/index.md66
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-13-2015/index.md94
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-20-2015/index.md60
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-25-2016/index.md74
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-27-2015/index.md107
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-4-2016/index.md60
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-6-2015/index.md60
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-10-2015/index.md49
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-17-2015/index.md69
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-24-2015/index.md93
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-29-2016/index.md76
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-3-2015/index.md101
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-31-2015/index.md55
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-1-2016/index.md80
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-2/index.md54
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-21-2016/index.md75
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-22-2016/index.md77
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-23-2015/index.md106
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-28-2016/index.md69
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-29-2016/index.md88
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-8-2016/index.md74
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-9/index.md61
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-11-2016/index.md60
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-4-2016/index.md88
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-13-2015/index.md121
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-18-2016/index.md99
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-20-2015/index.md93
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-1-2015/index.md142
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-22-2015/index.md113
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-27-2016/index.md89
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-6-2016/index.md79
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-8-2015/index.md53
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-16-2015/index.md76
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-23-2015/index.md126
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-30-2015/index.md216
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-7-2016/index.md96
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-9-2015/index.md123
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-16-2016/index.md102
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-4-2015/index.md83
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-23-2015/index.md156
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-30-2015/index.md85
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-12-2015/index.md60
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-19-2015/index.md91
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-5-2015/index.md72
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-14-2015/index.md151
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-28-2015/index.md76
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-april-2-2015/index.md327
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-june-4-2015/index.md265
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-february-16-2016/index.md109
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-june-16-2015/index.md119
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-march-15-2016/index.md109
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-may-26-2015/index.md102
-rw-r--r--chromium/docs/website/site/teams/layout-team/meeting-notes/wednesday-february-18/index.md246
-rw-r--r--chromium/docs/website/site/teams/layout-team/okrs/2015q1/index.md182
-rw-r--r--chromium/docs/website/site/teams/layout-team/okrs/2015q2/index.md163
-rw-r--r--chromium/docs/website/site/teams/layout-team/okrs/2015q3/index.md143
-rw-r--r--chromium/docs/website/site/teams/layout-team/okrs/2015q4/index.md250
-rw-r--r--chromium/docs/website/site/teams/layout-team/okrs/2016q1/index.md215
-rw-r--r--chromium/docs/website/site/teams/layout-team/okrs/index.md19
-rw-r--r--chromium/docs/website/site/teams/layout-team/potential-projects/index.md45
-rw-r--r--chromium/docs/website/site/teams/paint-team/canvas-okrs/index.md273
-rw-r--r--chromium/docs/website/site/teams/paint-team/index.md11
-rw-r--r--chromium/docs/website/site/teams/paint-team/okrs/index.md1217
-rw-r--r--chromium/docs/website/site/teams/paint-team/paint-team-members/index.md39
-rw-r--r--chromium/docs/website/site/teams/rendering/index.md440
-rw-r--r--chromium/docs/website/site/teams/rendering/okrs/2020-q1/index.md156
-rw-r--r--chromium/docs/website/site/teams/rendering/okrs/2020-q2/index.md99
-rw-r--r--chromium/docs/website/site/teams/rendering/okrs/index.md11
-rw-r--r--chromium/docs/website/site/teams/speed-metrics-team/index.md9
-rw-r--r--chromium/docs/website/site/teams/style-team/index.md61
-rw-r--r--chromium/docs/website/site/teams/web-capabilities-fugu/index.md74
-rw-r--r--chromium/docs/website/site/teams/worker-team/index.md30
-rw-r--r--chromium/docs/website/site/testing-chrome-ad-filtering/index.md35
-rw-r--r--chromium/docs/website/site/throttling/anti-ddos-http-throttling-in-older-versions-of-chrome/index.md14
-rw-r--r--chromium/docs/website/site/throttling/index.md62
-rw-r--r--chromium/docs/website/site/updates/chips/OWNERS2
-rw-r--r--chromium/docs/website/site/updates/chips/index.md189
-rw-r--r--chromium/docs/website/site/updates/first-party-sets/OWNERS3
-rw-r--r--chromium/docs/website/site/updates/first-party-sets/index.md90
-rw-r--r--chromium/docs/website/site/updates/index.md6
-rw-r--r--chromium/docs/website/site/updates/same-site/faq/index.md138
-rw-r--r--chromium/docs/website/site/updates/same-site/incompatible-clients/index.md87
-rw-r--r--chromium/docs/website/site/updates/same-site/index.md405
-rw-r--r--chromium/docs/website/site/updates/same-site/test-debug/index.md379
-rw-r--r--chromium/docs/website/site/updates/same-site/test-debug/tsyEts8ZOXE.png.sha11
-rw-r--r--chromium/docs/website/site/updates/schemeful-same-site/index.md8
-rw-r--r--chromium/docs/website/site/updates/schemeful-same-site/schemeful-same-site-devtools-issues/index.md114
-rw-r--r--chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of Issue.png.sha11
-rw-r--r--chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of flags.png.sha11
-rw-r--r--chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/index.md216
-rw-r--r--chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/tsyEts8ZOXE.png.sha11
-rw-r--r--chromium/docs/website/site/updates/trust-token/index.md62
-rw-r--r--chromium/docs/website/site/updates/ua-ch/OWNERS2
-rw-r--r--chromium/docs/website/site/updates/ua-ch/index.md95
-rw-r--r--chromium/docs/website/site/updates/ua-reduction/OWNERS2
-rw-r--r--chromium/docs/website/site/updates/ua-reduction/index.md454
-rw-r--r--chromium/docs/website/site/user-experience/Chrome.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/ChromeOS.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/assistive-technology-support/index.md66
-rw-r--r--chromium/docs/website/site/user-experience/bookmarklets/default.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/bookmarklets/index.md51
-rw-r--r--chromium/docs/website/site/user-experience/bookmarklets/install_dialog.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/bookmarklets/menu.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/bookmarklets/menu_context.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/bookmarks/bookmark_add.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/bookmarks/bookmarks_bar.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/bookmarks/index.md81
-rw-r--r--chromium/docs/website/site/user-experience/downloads-1/index.md9
-rw-r--r--chromium/docs/website/site/user-experience/downloads/Moodstats_1.22.zip.sha11
-rw-r--r--chromium/docs/website/site/user-experience/downloads/download_shelf.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/downloads/index.md32
-rw-r--r--chromium/docs/website/site/user-experience/feed-subscriptions/default.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/feed-subscriptions/index.md123
-rw-r--r--chromium/docs/website/site/user-experience/feed-subscriptions/rss_preview.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/find-in-page/find_bar.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/find-in-page/index.md19
-rw-r--r--chromium/docs/website/site/user-experience/history/history_browse.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/history/history_results.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/history/index.md41
-rw-r--r--chromium/docs/website/site/user-experience/incognito/incognito2.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/incognito/index.md19
-rw-r--r--chromium/docs/website/site/user-experience/index.md157
-rw-r--r--chromium/docs/website/site/user-experience/infobars/blue-gradient.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/controls.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/dialog.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/example-ext-crash.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/example-theme.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/example-translate-confirm.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/example-translate.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/02_embedded_infobar.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/03_contentsettings.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/04_exceptions.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/05_exceptionsproperties.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/06_tracking.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/07_trackingbubble.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/1.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/example-geolocation.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/geolocation/index.md30
-rw-r--r--chromium/docs/website/site/user-experience/infobars/grey-gradient.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/infobars/index.md193
-rw-r--r--chromium/docs/website/site/user-experience/infobars/yellow-gradient.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/keyboard-access/index.md126
-rw-r--r--chromium/docs/website/site/user-experience/low-vision-support/index.md123
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/05_signed_in.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/09_options_not_signed_in.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2010-11-18 at 2.59.56 PM.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2011-11-01 at 11.21.45 AM.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/cupcake_2.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/index.md174
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/profile_menu3.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multi-profiles/signin_1.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multitouch/GesturesImages.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multitouch/gestures_concept.mp4.sha11
-rw-r--r--chromium/docs/website/site/user-experience/multitouch/index.md90
-rw-r--r--chromium/docs/website/site/user-experience/new-tab-page/index.md60
-rw-r--r--chromium/docs/website/site/user-experience/new-tab-page/new_tab_resources.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/notifications/Notifications.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/notifications/index.md34
-rw-r--r--chromium/docs/website/site/user-experience/omnibox/cheese_results.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/omnibox/index.md180
-rw-r--r--chromium/docs/website/site/user-experience/omnibox/keyword.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/omnibox/omnibox-bug-triage-process/index.md13
-rw-r--r--chromium/docs/website/site/user-experience/omnibox/omnibox_results.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/options/index.md31
-rw-r--r--chromium/docs/website/site/user-experience/options/options_basics.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2009-10-14 at 8.47.17 AM.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2010-02-02 at 10.51.45 AM.PNG.sha11
-rw-r--r--chromium/docs/website/site/user-experience/resolution-independence/index.md54
-rw-r--r--chromium/docs/website/site/user-experience/screen-reader-support/index.md10
-rw-r--r--chromium/docs/website/site/user-experience/status-bubble/index.md65
-rw-r--r--chromium/docs/website/site/user-experience/status-bubble/status_bubble.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/status-bubble/status_bubble_hover.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/status-bubble/status_bubble_whiter.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/tabs/index.md38
-rw-r--r--chromium/docs/website/site/user-experience/tabs/tab.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/tabs/throbber/chrome_throbber_64.gif.sha11
-rw-r--r--chromium/docs/website/site/user-experience/tabs/throbber/index.md20
-rw-r--r--chromium/docs/website/site/user-experience/tabs/throbber/throbber.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/toolbar/index.md78
-rw-r--r--chromium/docs/website/site/user-experience/touch-access/chromeos_touch_accessibility_user_flow.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/touch-access/index.md322
-rw-r--r--chromium/docs/website/site/user-experience/touch-access/playing_around (2).png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/ui-strings/index.md117
-rw-r--r--chromium/docs/website/site/user-experience/user-data-directory/index.md10
-rw-r--r--chromium/docs/website/site/user-experience/visual-design/chrome_0.2_psd.zip.sha11
-rw-r--r--chromium/docs/website/site/user-experience/visual-design/chrome_colorscheme.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/visual-design/index.md84
-rw-r--r--chromium/docs/website/site/user-experience/visual-design/mathemagics (1).png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/window-frame/frame_corners.png.sha11
-rw-r--r--chromium/docs/website/site/user-experience/window-frame/index.md37
-rw-r--r--chromium/docs/website/site/x-subresources/index.md119
-rw-r--r--chromium/docs/website/site/x-subresources/x-subresources-1/index.md252
-rw-r--r--chromium/docs/website/third_party/node/linux/node-linux-x64.tar.gz.sha11
-rw-r--r--chromium/docs/website/third_party/node/mac/node-darwin-x64.tar.gz.sha11
-rw-r--r--chromium/docs/website/third_party/node/win/node.exe.sha11
-rw-r--r--chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.cc2
-rw-r--r--chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.h3
-rw-r--r--chromium/extensions/browser/updater/update_data_provider.cc91
-rw-r--r--chromium/extensions/browser/updater/update_data_provider.h6
-rw-r--r--chromium/extensions/strings/extensions_strings_te.xtb4
-rw-r--r--chromium/gpu/command_buffer/service/dawn_service_memory_transfer_service.cc11
-rw-r--r--chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc1
-rw-r--r--chromium/gpu/config/gpu_lists_version.h2
-rwxr-xr-xchromium/headless/lib/browser/devtools_api/client_api_generator_unittest.py4
-rw-r--r--chromium/infra/config/generated/builders/ci/Android Release (Nexus 5X)/properties.json72
-rw-r--r--chromium/infra/config/generated/builders/ci/Android WebView M (dbg)/properties.json105
-rw-r--r--chromium/infra/config/generated/builders/ci/Android WebView N (dbg)/properties.json105
-rw-r--r--chromium/infra/config/generated/builders/ci/Android WebView O (dbg)/properties.json105
-rw-r--r--chromium/infra/config/generated/builders/ci/Android WebView P (dbg)/properties.json105
-rw-r--r--chromium/infra/config/generated/builders/ci/Android arm Builder (dbg)/properties.json71
-rw-r--r--chromium/infra/config/generated/builders/ci/Android arm64 Builder (dbg)/properties.json414
-rw-r--r--chromium/infra/config/generated/builders/ci/Android x64 Builder (dbg)/properties.json68
-rw-r--r--chromium/infra/config/generated/builders/ci/Android x86 Builder (dbg)/properties.json68
-rw-r--r--chromium/infra/config/generated/builders/ci/Cast Android (dbg)/properties.json71
-rw-r--r--chromium/infra/config/generated/builders/ci/Cast Linux Debug/properties.json66
-rw-r--r--chromium/infra/config/generated/builders/ci/Cast Linux/properties.json66
-rw-r--r--chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/properties.json140
-rw-r--r--chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (Intel HD 630)/properties.json93
-rw-r--r--chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (NVIDIA)/properties.json93
-rw-r--r--chromium/infra/config/generated/builders/ci/Fuchsia ARM64/properties.json70
-rw-r--r--chromium/infra/config/generated/builders/ci/Fuchsia x64/properties.json69
-rw-r--r--chromium/infra/config/generated/builders/ci/GPU Linux Builder/properties.json105
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json133
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux ASan LSan Tests (1)/properties.json95
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux ASan Tests (sandboxed)/properties.json88
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux Builder (Wayland)/properties.json106
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux Builder (dbg)/properties.json108
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux Builder/properties.json105
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux Release (NVIDIA)/properties.json93
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux TSan Builder/properties.json104
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux TSan Tests/properties.json97
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux Tests (Wayland)/properties.json94
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux Tests (dbg)(1)/properties.json101
-rw-r--r--chromium/infra/config/generated/builders/ci/Linux Tests/properties.json93
-rw-r--r--chromium/infra/config/generated/builders/ci/Marshmallow 64 bit Tester/properties.json103
-rw-r--r--chromium/infra/config/generated/builders/ci/Nougat Phone Tester/properties.json108
-rw-r--r--chromium/infra/config/generated/builders/ci/Oreo Phone Tester/properties.json108
-rw-r--r--chromium/infra/config/generated/builders/ci/VR Linux/properties.json69
-rw-r--r--chromium/infra/config/generated/builders/ci/android-cronet-arm-dbg/properties.json72
-rw-r--r--chromium/infra/config/generated/builders/ci/android-cronet-arm-rel/properties.json72
-rw-r--r--chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg-10-tests/properties.json111
-rw-r--r--chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg/properties.json116
-rw-r--r--chromium/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json72
-rw-r--r--chromium/infra/config/generated/builders/ci/android-marshmallow-x86-rel/properties.json72
-rw-r--r--chromium/infra/config/generated/builders/ci/android-official/properties.json19
-rw-r--r--chromium/infra/config/generated/builders/ci/android-pie-arm64-dbg/properties.json106
-rw-r--r--chromium/infra/config/generated/builders/ci/android-pie-arm64-rel/properties.json71
-rw-r--r--chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-dbg/properties.json72
-rw-r--r--chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-lacros-dbg/properties.json67
-rw-r--r--chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-rel/properties.json5
-rw-r--r--chromium/infra/config/generated/builders/ci/chromeos-arm-generic-rel/properties.json5
-rw-r--r--chromium/infra/config/generated/builders/ci/chromeos-arm64-generic-rel/properties.json5
-rw-r--r--chromium/infra/config/generated/builders/ci/chromeos-kevin-rel/properties.json5
-rw-r--r--chromium/infra/config/generated/builders/ci/fuchsia-arm64-cast/properties.json69
-rw-r--r--chromium/infra/config/generated/builders/ci/fuchsia-official/properties.json20
-rw-r--r--chromium/infra/config/generated/builders/ci/fuchsia-x64-cast/properties.json69
-rw-r--r--chromium/infra/config/generated/builders/ci/ios-simulator-cronet/properties.json66
-rw-r--r--chromium/infra/config/generated/builders/ci/ios-simulator-full-configs/properties.json69
-rw-r--r--chromium/infra/config/generated/builders/ci/ios-simulator/properties.json69
-rw-r--r--chromium/infra/config/generated/builders/ci/lacros-amd64-generic-rel/properties.json76
-rw-r--r--chromium/infra/config/generated/builders/ci/lacros-arm-generic-rel/properties.json73
-rw-r--r--chromium/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json20
-rw-r--r--chromium/infra/config/generated/builders/ci/linux-chromeos-dbg/properties.json72
-rw-r--r--chromium/infra/config/generated/builders/ci/linux-chromeos-rel/properties.json5
-rw-r--r--chromium/infra/config/generated/builders/ci/linux-lacros-builder-rel/properties.json108
-rw-r--r--chromium/infra/config/generated/builders/ci/linux-lacros-dbg/properties.json62
-rw-r--r--chromium/infra/config/generated/builders/ci/linux-lacros-tester-rel/properties.json101
-rw-r--r--chromium/infra/config/generated/builders/ci/linux-official/properties.json19
-rw-r--r--chromium/infra/config/generated/builders/try/android-cronet-arm-dbg/properties.json64
-rw-r--r--chromium/infra/config/generated/builders/try/android-cronet-x86-dbg-10-tests/properties.json111
-rw-r--r--chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json113
-rw-r--r--chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json106
-rw-r--r--chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json82
-rw-r--r--chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel/properties.json75
-rw-r--r--chromium/infra/config/generated/builders/try/android-official/properties.json17
-rw-r--r--chromium/infra/config/generated/builders/try/android-oreo-arm64-dbg/properties.json105
-rw-r--r--chromium/infra/config/generated/builders/try/android-pie-arm64-dbg/properties.json109
-rw-r--r--chromium/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json74
-rw-r--r--chromium/infra/config/generated/builders/try/android-pie-arm64-rel/properties.json67
-rw-r--r--chromium/infra/config/generated/builders/try/android_compile_dbg/properties.json65
-rw-r--r--chromium/infra/config/generated/builders/try/android_compile_x64_dbg/properties.json61
-rw-r--r--chromium/infra/config/generated/builders/try/android_compile_x86_dbg/properties.json61
-rw-r--r--chromium/infra/config/generated/builders/try/android_cronet/properties.json65
-rw-r--r--chromium/infra/config/generated/builders/try/android_optional_gpu_tests_rel/properties.json62
-rw-r--r--chromium/infra/config/generated/builders/try/cast_shell_android/properties.json63
-rw-r--r--chromium/infra/config/generated/builders/try/cast_shell_linux/properties.json58
-rw-r--r--chromium/infra/config/generated/builders/try/cast_shell_linux_dbg/properties.json58
-rw-r--r--chromium/infra/config/generated/builders/try/chromeos-amd64-generic-dbg/properties.json63
-rw-r--r--chromium/infra/config/generated/builders/try/chromeos-amd64-generic-lacros-dbg/properties.json17
-rw-r--r--chromium/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/properties.json132
-rw-r--r--chromium/infra/config/generated/builders/try/fuchsia-arm64-cast/properties.json59
-rw-r--r--chromium/infra/config/generated/builders/try/fuchsia-official/properties.json17
-rw-r--r--chromium/infra/config/generated/builders/try/fuchsia-x64-cast/properties.json59
-rw-r--r--chromium/infra/config/generated/builders/try/fuchsia_arm64/properties.json60
-rw-r--r--chromium/infra/config/generated/builders/try/fuchsia_x64/properties.json59
-rw-r--r--chromium/infra/config/generated/builders/try/ios-simulator-cronet/properties.json60
-rw-r--r--chromium/infra/config/generated/builders/try/ios-simulator-full-configs/properties.json71
-rw-r--r--chromium/infra/config/generated/builders/try/ios-simulator/properties.json71
-rw-r--r--chromium/infra/config/generated/builders/try/lacros-amd64-generic-rel/properties.json67
-rw-r--r--chromium/infra/config/generated/builders/try/lacros-arm-generic-rel/properties.json64
-rw-r--r--chromium/infra/config/generated/builders/try/linux-blink-rel/properties.json55
-rw-r--r--chromium/infra/config/generated/builders/try/linux-chromeos-compile-dbg/properties.json60
-rw-r--r--chromium/infra/config/generated/builders/try/linux-chromeos-dbg/properties.json59
-rw-r--r--chromium/infra/config/generated/builders/try/linux-lacros-rel/properties.json100
-rw-r--r--chromium/infra/config/generated/builders/try/linux-official/properties.json17
-rw-r--r--chromium/infra/config/generated/builders/try/linux-rel-compilator/properties.json180
-rw-r--r--chromium/infra/config/generated/builders/try/linux-rel/properties.json173
-rw-r--r--chromium/infra/config/generated/builders/try/linux-wayland-rel/properties.json101
-rw-r--r--chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json100
-rw-r--r--chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json93
-rw-r--r--chromium/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json98
-rw-r--r--chromium/infra/config/generated/builders/try/linux_chromium_dbg_ng/properties.json96
-rw-r--r--chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json104
-rw-r--r--chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/properties.json97
-rw-r--r--chromium/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json57
-rw-r--r--chromium/infra/config/generated/builders/try/linux_optional_gpu_tests_rel/properties.json59
-rw-r--r--chromium/infra/config/generated/builders/try/linux_vr/properties.json61
-rw-r--r--chromium/infra/config/generated/builders/try/try-nougat-phone-tester/properties.json105
-rw-r--r--chromium/infra/config/generated/cq-usage/default.cfg66
-rw-r--r--chromium/infra/config/generated/cq-usage/full.cfg329
-rw-r--r--chromium/infra/config/generated/luci/commit-queue.cfg436
-rw-r--r--chromium/infra/config/generated/luci/cr-buildbucket.cfg9728
-rw-r--r--chromium/infra/config/generated/luci/luci-milo.cfg1474
-rw-r--r--chromium/infra/config/generated/luci/luci-notify.cfg576
-rw-r--r--chromium/infra/config/generated/luci/luci-scheduler.cfg706
-rw-r--r--chromium/infra/config/generated/luci/project.cfg2
-rw-r--r--chromium/infra/config/generated/luci/realms.cfg19
-rw-r--r--chromium/infra/config/lib/builders.star16
-rw-r--r--chromium/infra/config/lib/ci.star11
-rw-r--r--chromium/infra/config/settings.json3
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.android.fyi.star54
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.android.star120
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.angle.star28
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.chromiumos.star24
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.clang.star8
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.dawn.star53
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.fuzz.star90
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.fyi.star146
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star109
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.gpu.star24
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.linux.star64
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.memory.star52
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.rust.star12
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.star56
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.swangle.star36
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.updater.star20
-rw-r--r--chromium/infra/config/subprojects/chromium/ci/chromium.win.star20
-rw-r--r--chromium/infra/config/subprojects/chromium/gpu.try.star8
-rw-r--r--chromium/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star10
-rw-r--r--chromium/infra/config/subprojects/findit/findit.star7
-rw-r--r--chromium/infra/orchestrator/BUILD.gn25
-rw-r--r--chromium/mojo/public/cpp/bindings/interface_endpoint_client.h22
-rw-r--r--chromium/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc46
-rw-r--r--chromium/net/base/features.cc9
-rw-r--r--chromium/net/base/features.h9
-rw-r--r--chromium/net/cookies/canonical_cookie.cc48
-rw-r--r--chromium/net/cookies/canonical_cookie.h5
-rw-r--r--chromium/net/cookies/canonical_cookie_unittest.cc125
-rw-r--r--chromium/net/http/transport_security_state_static.json.gzbin1353766 -> 1353766 bytes
-rw-r--r--chromium/net/spdy/alps_decoder.cc57
-rw-r--r--chromium/net/spdy/alps_decoder_test.cc86
-rw-r--r--chromium/pdf/pdfium/findtext_unittest.cc18
-rw-r--r--chromium/pdf/pdfium/pdfium_engine.cc3
-rw-r--r--chromium/services/network/network_context.cc6
-rw-r--r--chromium/services/network/network_context.h1
-rw-r--r--chromium/services/network/public/mojom/network_context.mojom4
-rw-r--r--chromium/skia/ext/skia_commit_hash.h2
-rwxr-xr-xchromium/testing/scripts/check_static_initializers.py6
-rw-r--r--chromium/testing/scripts/common.py6
-rwxr-xr-xchromium/testing/scripts/headless_python_unittests.py4
-rwxr-xr-xchromium/testing/scripts/metrics_python_tests.py4
-rw-r--r--chromium/third_party/blink/public/strings/translations/blink_accessibility_strings_zh-CN.xtb2
-rw-r--r--chromium/third_party/blink/public/strings/translations/blink_strings_ar.xtb2
-rw-r--r--chromium/third_party/blink/public/strings/translations/blink_strings_te.xtb8
-rw-r--r--chromium/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb6
-rw-r--r--chromium/third_party/blink/renderer/core/display_lock/display_lock_context.cc3
-rw-r--r--chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc3
-rw-r--r--chromium/third_party/blink/renderer/modules/BUILD.gn1
-rw-r--r--chromium/third_party/blink/renderer/modules/webgpu/BUILD.gn14
-rw-r--r--chromium/third_party/blink/renderer/modules/webgpu/DEPS1
-rw-r--r--chromium/third_party/blink/renderer/modules/webgpu/gpu.cc5
-rw-r--r--chromium/third_party/blink/renderer/modules/webgpu/gpu.h10
-rw-r--r--chromium/third_party/blink/renderer/modules/webgpu/gpu_context_lost_test.cc229
-rw-r--r--chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc22
-rw-r--r--chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.h4
-rw-r--r--chromium/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py11
-rw-r--r--chromium/third_party/blink/tools/blinkpy/common/config/builders.json12
-rw-r--r--chromium/third_party/blink/tools/blinkpy/common/host_mock.py11
-rw-r--r--chromium/third_party/blink/tools/blinkpy/common/system/platform_info.py16
-rw-r--r--chromium/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py4
-rw-r--r--chromium/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py3
-rw-r--r--chromium/third_party/blink/tools/blinkpy/common/system/system_host_mock.py3
-rw-r--r--chromium/third_party/blink/tools/blinkpy/web_tests/port/base.py4
-rw-r--r--chromium/third_party/blink/tools/blinkpy/web_tests/port/mac.py27
-rw-r--r--chromium/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py23
-rw-r--r--chromium/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py9
-rw-r--r--chromium/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc13
-rw-r--r--chromium/third_party/dawn/webgpu-cts/expectations.txt10
-rw-r--r--chromium/third_party/icu/README.chromium2
-rw-r--r--chromium/third_party/icu/common/icudtb.datbin10404784 -> 10397952 bytes
-rw-r--r--chromium/third_party/icu/common/icudtl.datbin10404784 -> 10397952 bytes
-rw-r--r--chromium/third_party/icu/ios/icudtl.datbin6181872 -> 6175040 bytes
-rw-r--r--chromium/third_party/icu/source/data/misc/metaZones.txt1
-rw-r--r--chromium/third_party/icu/source/data/misc/timezoneTypes.txt1
-rw-r--r--chromium/third_party/icu/source/data/misc/zoneinfo64.txt1267
-rw-r--r--chromium/third_party/icu/tzres/metaZones.resbin43156 -> 43168 bytes
-rw-r--r--chromium/third_party/icu/tzres/timezoneTypes.resbin20172 -> 20212 bytes
-rw-r--r--chromium/third_party/icu/tzres/zoneinfo64.resbin155992 -> 149116 bytes
-rw-r--r--chromium/third_party/node/node_modules.tar.gz.sha12
-rw-r--r--chromium/third_party/node/node_modules/@babel/code-frame/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/code-frame/lib/index.js163
-rw-r--r--chromium/third_party/node/node_modules/@babel/code-frame/package.json29
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/buffer.js265
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/base.js96
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/classes.js173
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/expressions.js317
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/flow.js795
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/index.js148
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/jsx.js145
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/methods.js149
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/modules.js234
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/statements.js327
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/template-literals.js33
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/types.js279
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/generators/typescript.js806
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/index.js97
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/node/index.js111
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/node/parentheses.js342
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/node/whitespace.js214
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/printer.js540
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/lib/source-map.js78
-rw-r--r--chromium/third_party/node/node_modules/@babel/generator/package.json36
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-function-name/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-function-name/lib/index.js188
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-function-name/package.json25
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-get-function-arity/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-get-function-arity/lib/index.js27
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-get-function-arity/package.json23
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-hoist-variables/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-hoist-variables/lib/index.js58
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-hoist-variables/package.json27
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/lib/index.js67
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/package.json23
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-validator-identifier/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/identifier.js84
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/index.js57
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/keyword.js38
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-validator-identifier/package.json24
-rw-r--r--chromium/third_party/node/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js75
-rw-r--r--chromium/third_party/node/node_modules/@babel/highlight/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/highlight/lib/index.js116
-rw-r--r--chromium/third_party/node/node_modules/@babel/highlight/package.json29
-rw-r--r--chromium/third_party/node/node_modules/@babel/parser/LICENSE19
-rwxr-xr-xchromium/third_party/node/node_modules/@babel/parser/bin/babel-parser.js15
-rw-r--r--chromium/third_party/node/node_modules/@babel/parser/lib/index.js14699
-rw-r--r--chromium/third_party/node/node_modules/@babel/parser/package.json42
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/builder.js81
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/formatters.js71
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/index.js32
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/literal.js80
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/options.js83
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/parse.js188
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/populate.js135
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/lib/string.js22
-rw-r--r--chromium/third_party/node/node_modules/@babel/template/package.json26
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/cache.js26
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/context.js137
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/hub.js23
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/index.js118
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/ancestry.js180
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/comments.js42
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/context.js253
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/conversion.js468
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/evaluation.js401
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/family.js407
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/asserts.js5
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/validators.js5
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/virtual-types.js3
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/index.js253
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/index.js156
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js206
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferers.js261
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/introspection.js436
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/hoister.js206
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js38
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/virtual-types.js230
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/modification.js232
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/removal.js73
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/path/replacement.js260
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/scope/binding.js75
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/scope/index.js1015
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/scope/lib/renamer.js146
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/types.js5
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/lib/visitors.js242
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/package.json35
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/asserts.js25
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/validators.js43
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/virtual-types.js24
-rw-r--r--chromium/third_party/node/node_modules/@babel/traverse/scripts/package.json1
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/asserts/assertNode.js17
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/asserts/generated/index.js1492
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/ast-types/generated/index.js0
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/builders/builder.js42
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js20
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js30
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/index.js1261
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/uppercase.js1507
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/builders/react/buildChildren.js29
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js21
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/clone/clone.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeep.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneNode.js114
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/comments/addComment.js15
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/comments/addComments.js23
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritInnerComments.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritLeadingComments.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritTrailingComments.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritsComments.js19
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/comments/removeComments.js16
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/constants/generated/index.js99
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/constants/index.js49
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/Scope.js0
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/ensureBlock.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js75
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js14
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toBlock.js34
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toComputedKey.js15
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toExpression.js33
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toIdentifier.js30
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toKeyAlias.js46
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toSequenceExpression.js21
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/toStatement.js47
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/converters/valueToNode.js99
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/core.js1590
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/experimental.js142
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/flow.js481
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/index.js103
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/jsx.js161
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/misc.js31
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/placeholders.js33
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/typescript.js469
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/definitions/utils.js324
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/index.js647
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/index.js.flow2539
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js15
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js78
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/modifications/inherits.js31
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js13
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/modifications/removeProperties.js30
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js15
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js54
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js104
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js15
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverse.js55
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverseFast.js28
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/utils/inherit.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js47
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/utils/shallowEqual.js18
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js13
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/generated/index.js4731
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/is.js33
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isBinding.js31
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isBlockScoped.js14
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isImmutable.js24
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isLet.js14
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isNode.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isNodesEquivalent.js67
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isPlaceholderType.js21
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isReferenced.js127
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isScope.js20
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isSpecifierDefault.js14
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isType.js24
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidES3Identifier.js14
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidIdentifier.js20
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/isVar.js16
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/matchesPattern.js42
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isCompatTag.js10
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isReactComponent.js12
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/lib/validators/validate.js32
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/package.json39
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/asserts.js50
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/ast-types.js139
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/builders.js163
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/constants.js15
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/docs.js277
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/flow.js260
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/typescript-legacy.js369
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/generators/validators.js87
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/package.json1
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/utils/formatBuilderName.js8
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/utils/lowerFirst.js3
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/utils/stringifyValidator.js66
-rw-r--r--chromium/third_party/node/node_modules/@babel/types/scripts/utils/toFunctionName.js4
-rw-r--r--chromium/third_party/node/node_modules/ansi-styles/index.js165
-rw-r--r--chromium/third_party/node/node_modules/ansi-styles/license9
-rw-r--r--chromium/third_party/node/node_modules/ansi-styles/package.json56
-rw-r--r--chromium/third_party/node/node_modules/balanced-match/index.js62
-rw-r--r--chromium/third_party/node/node_modules/balanced-match/package.json48
-rw-r--r--chromium/third_party/node/node_modules/brace-expansion/LICENSE21
-rw-r--r--chromium/third_party/node/node_modules/brace-expansion/index.js201
-rw-r--r--chromium/third_party/node/node_modules/brace-expansion/package.json47
-rw-r--r--chromium/third_party/node/node_modules/chalk/index.js228
-rw-r--r--chromium/third_party/node/node_modules/chalk/index.js.flow93
-rw-r--r--chromium/third_party/node/node_modules/chalk/license9
-rw-r--r--chromium/third_party/node/node_modules/chalk/package.json71
-rw-r--r--chromium/third_party/node/node_modules/chalk/templates.js128
-rw-r--r--chromium/third_party/node/node_modules/color-convert/LICENSE21
-rw-r--r--chromium/third_party/node/node_modules/color-convert/conversions.js868
-rw-r--r--chromium/third_party/node/node_modules/color-convert/index.js78
-rw-r--r--chromium/third_party/node/node_modules/color-convert/package.json46
-rw-r--r--chromium/third_party/node/node_modules/color-convert/route.js97
-rw-r--r--chromium/third_party/node/node_modules/color-name/LICENSE8
-rw-r--r--chromium/third_party/node/node_modules/color-name/index.js152
-rw-r--r--chromium/third_party/node/node_modules/color-name/package.json25
-rw-r--r--chromium/third_party/node/node_modules/color-name/test.js7
-rw-r--r--chromium/third_party/node/node_modules/commander/LICENSE22
-rw-r--r--chromium/third_party/node/node_modules/commander/index.js1224
-rw-r--r--chromium/third_party/node/node_modules/commander/package.json38
-rw-r--r--chromium/third_party/node/node_modules/concat-map/LICENSE18
-rw-r--r--chromium/third_party/node/node_modules/concat-map/README.markdown62
-rw-r--r--chromium/third_party/node/node_modules/concat-map/index.js13
-rw-r--r--chromium/third_party/node/node_modules/concat-map/package.json43
-rw-r--r--chromium/third_party/node/node_modules/debug/LICENSE20
-rw-r--r--chromium/third_party/node/node_modules/debug/package.json59
-rw-r--r--chromium/third_party/node/node_modules/debug/src/browser.js269
-rw-r--r--chromium/third_party/node/node_modules/debug/src/common.js274
-rw-r--r--chromium/third_party/node/node_modules/debug/src/index.js10
-rw-r--r--chromium/third_party/node/node_modules/debug/src/node.js263
-rw-r--r--chromium/third_party/node/node_modules/escape-string-regexp/index.js11
-rw-r--r--chromium/third_party/node/node_modules/escape-string-regexp/license21
-rw-r--r--chromium/third_party/node/node_modules/escape-string-regexp/package.json41
-rw-r--r--chromium/third_party/node/node_modules/esutils/LICENSE.BSD19
-rw-r--r--chromium/third_party/node/node_modules/esutils/lib/ast.js144
-rw-r--r--chromium/third_party/node/node_modules/esutils/lib/code.js135
-rw-r--r--chromium/third_party/node/node_modules/esutils/lib/keyword.js165
-rw-r--r--chromium/third_party/node/node_modules/esutils/lib/utils.js33
-rw-r--r--chromium/third_party/node/node_modules/esutils/package.json44
-rw-r--r--chromium/third_party/node/node_modules/function-bind/LICENSE20
-rw-r--r--chromium/third_party/node/node_modules/function-bind/implementation.js52
-rw-r--r--chromium/third_party/node/node_modules/function-bind/index.js5
-rw-r--r--chromium/third_party/node/node_modules/function-bind/package.json63
-rw-r--r--chromium/third_party/node/node_modules/globals/globals.json1563
-rw-r--r--chromium/third_party/node/node_modules/globals/index.js2
-rw-r--r--chromium/third_party/node/node_modules/globals/license9
-rw-r--r--chromium/third_party/node/node_modules/globals/package.json41
-rw-r--r--chromium/third_party/node/node_modules/has-flag/index.js8
-rw-r--r--chromium/third_party/node/node_modules/has-flag/license9
-rw-r--r--chromium/third_party/node/node_modules/has-flag/package.json44
-rw-r--r--chromium/third_party/node/node_modules/has/LICENSE-MIT22
-rw-r--r--chromium/third_party/node/node_modules/has/package.json48
-rw-r--r--chromium/third_party/node/node_modules/has/src/index.js5
-rw-r--r--chromium/third_party/node/node_modules/is-core-module/LICENSE20
-rw-r--r--chromium/third_party/node/node_modules/is-core-module/core.json150
-rw-r--r--chromium/third_party/node/node_modules/is-core-module/index.js69
-rw-r--r--chromium/third_party/node/node_modules/is-core-module/package.json69
-rw-r--r--chromium/third_party/node/node_modules/js-tokens/LICENSE21
-rw-r--r--chromium/third_party/node/node_modules/js-tokens/index.js23
-rw-r--r--chromium/third_party/node/node_modules/js-tokens/package.json30
-rw-r--r--chromium/third_party/node/node_modules/jsesc/LICENSE-MIT.txt20
-rwxr-xr-xchromium/third_party/node/node_modules/jsesc/bin/jsesc148
-rw-r--r--chromium/third_party/node/node_modules/jsesc/jsesc.js329
-rw-r--r--chromium/third_party/node/node_modules/jsesc/man/jsesc.194
-rw-r--r--chromium/third_party/node/node_modules/jsesc/package.json54
-rw-r--r--chromium/third_party/node/node_modules/minimatch/LICENSE15
-rw-r--r--chromium/third_party/node/node_modules/minimatch/minimatch.js923
-rw-r--r--chromium/third_party/node/node_modules/minimatch/package.json30
-rw-r--r--chromium/third_party/node/node_modules/ms/index.js162
-rw-r--r--chromium/third_party/node/node_modules/ms/package.json37
-rw-r--r--chromium/third_party/node/node_modules/path-is-inside/LICENSE.txt47
-rw-r--r--chromium/third_party/node/node_modules/path-is-inside/lib/path-is-inside.js28
-rw-r--r--chromium/third_party/node/node_modules/path-is-inside/package.json21
-rw-r--r--chromium/third_party/node/node_modules/resolve/LICENSE21
-rw-r--r--chromium/third_party/node/node_modules/resolve/index.js6
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/async.js320
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/caller.js8
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/core.js53
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/core.json83
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/is-core.js5
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/node-modules-paths.js42
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/normalize-options.js10
-rw-r--r--chromium/third_party/node/node_modules/resolve/lib/sync.js199
-rw-r--r--chromium/third_party/node/node_modules/resolve/package.json51
-rw-r--r--chromium/third_party/node/node_modules/resolve/readme.markdown279
-rw-r--r--chromium/third_party/node/node_modules/supports-color/browser.js5
-rw-r--r--chromium/third_party/node/node_modules/supports-color/index.js131
-rw-r--r--chromium/third_party/node/node_modules/supports-color/license9
-rw-r--r--chromium/third_party/node/node_modules/supports-color/package.json53
-rw-r--r--chromium/third_party/node/node_modules/to-fast-properties/index.js27
-rw-r--r--chromium/third_party/node/node_modules/to-fast-properties/license10
-rw-r--r--chromium/third_party/node/node_modules/to-fast-properties/package.json35
-rw-r--r--chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.cpp5
-rw-r--r--chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.h3
-rw-r--r--chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.cpp10
-rw-r--r--chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.h6
-rw-r--r--chromium/third_party/pdfium/core/fpdfdoc/cpdf_nametree.cpp46
-rw-r--r--chromium/third_party/sqlite/src/amalgamation/sqlite3.c8
-rw-r--r--chromium/third_party/sqlite/src/amalgamation/sqlite3.h2
-rw-r--r--chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.c8
-rw-r--r--chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.h2
-rw-r--r--chromium/third_party/sqlite/src/manifest2
-rw-r--r--chromium/third_party/sqlite/src/manifest.uuid2
-rw-r--r--chromium/third_party/sqlite/src/src/select.c4
-rw-r--r--chromium/third_party/webrtc/pc/rtp_sender.cc8
-rw-r--r--chromium/third_party/webrtc/pc/rtp_sender_receiver_unittest.cc38
-rw-r--r--chromium/tools/metrics/histograms/metadata/net/histograms.xml12
-rw-r--r--chromium/tools/metrics/histograms/metadata/phonehub/histograms.xml5
-rwxr-xr-xchromium/tools/variations/fieldtrial_to_struct.py2
-rw-r--r--chromium/tools/variations/fieldtrial_util.py2
-rw-r--r--chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_kk.xtb2
-rw-r--r--chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb2
-rw-r--r--chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_pa.xtb4
-rw-r--r--chromium/ui/base/ime/ash/input_method_ash.cc11
-rw-r--r--chromium/ui/base/ime/ash/input_method_ash_unittest.cc6
-rw-r--r--chromium/ui/base/ime/fuchsia/keyboard_client.cc5
-rw-r--r--chromium/ui/events/keycodes/dom/keycode_converter.cc55
-rw-r--r--chromium/ui/events/keycodes/dom/keycode_converter.h33
-rw-r--r--chromium/ui/events/keycodes/dom/keycode_converter_unittest.cc2
-rw-r--r--chromium/ui/events/keycodes/keyboard_code_conversion_unittest.cc8
-rw-r--r--chromium/ui/events/ozone/layout/keyboard_layout_engine_unittest.cc2
-rw-r--r--chromium/ui/gfx/render_text_harfbuzz.cc2
-rw-r--r--chromium/ui/gfx/render_text_unittest.cc13
-rw-r--r--chromium/ui/strings/translations/ax_strings_kk.xtb4
-rw-r--r--chromium/ui/strings/translations/ax_strings_te.xtb2
-rw-r--r--chromium/ui/strings/translations/ui_strings_eu.xtb2
-rw-r--r--chromium/ui/strings/translations/ui_strings_ml.xtb2
-rw-r--r--chromium/ui/strings/translations/ui_strings_te.xtb6
-rw-r--r--chromium/ui/strings/translations/ui_strings_zh-TW.xtb2
-rw-r--r--chromium/v8/include/v8-version.h2
-rw-r--r--chromium/v8/src/builtins/x64/builtins-x64.cc1
-rw-r--r--chromium/v8/src/compiler/backend/instruction-selector.cc21
-rw-r--r--chromium/v8/src/compiler/backend/instruction-selector.h14
-rw-r--r--chromium/v8/src/compiler/backend/loong64/instruction-selector-loong64.cc2
-rw-r--r--chromium/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc2
-rw-r--r--chromium/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc2
-rw-r--r--chromium/v8/src/compiler/backend/x64/instruction-selector-x64.cc2
-rw-r--r--chromium/v8/src/compiler/escape-analysis.cc6
-rw-r--r--chromium/v8/src/objects/value-serializer.cc54
-rw-r--r--chromium/v8/src/objects/value-serializer.h3
3442 files changed, 61707 insertions, 276566 deletions
diff --git a/chromium/BUILD.gn b/chromium/BUILD.gn
index 30774d5f7c1..a78d555910d 100644
--- a/chromium/BUILD.gn
+++ b/chromium/BUILD.gn
@@ -1391,7 +1391,9 @@ if (!is_ios) {
"//third_party/blink/web_tests/platform/mac-mac10.13/",
"//third_party/blink/web_tests/platform/mac-mac10.14/",
"//third_party/blink/web_tests/platform/mac-mac10.15/",
+ "//third_party/blink/web_tests/platform/mac-mac11/",
"//third_party/blink/web_tests/platform/mac-mac11-arm64/",
+ "//third_party/blink/web_tests/platform/mac-mac12-arm64/",
]
}
diff --git a/chromium/DEPS b/chromium/DEPS
index e83cb63fa4b..4294b3bafb4 100644
--- a/chromium/DEPS
+++ b/chromium/DEPS
@@ -253,11 +253,11 @@ vars = {
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling Skia
# and whatever else without interference from each other.
- 'skia_revision': '3338e90707323d2cd3a150276acb9f39933deee2',
+ 'skia_revision': 'd4442274e967ec96d89345d2afd2d81f09e416ed',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling V8
# and whatever else without interference from each other.
- 'v8_revision': 'd0882b3dff76a9fc86bbf93381df1585d58f4f57',
+ 'v8_revision': 'ede1022bcf27ba7a8180e7d4beadb67b0cbfb82e',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling ANGLE
# and whatever else without interference from each other.
@@ -269,7 +269,7 @@ vars = {
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling PDFium
# and whatever else without interference from each other.
- 'pdfium_revision': '62ad9af8a9f9494645b659674b64bb51775cde05',
+ 'pdfium_revision': '3466cc056b052eb5e8e9d7d5f8f2aa3ab33e3bd6',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling BoringSSL
# and whatever else without interference from each other.
@@ -364,7 +364,7 @@ vars = {
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling feed
# and whatever else without interference from each other.
- 'dawn_revision': 'fa8cc68ff7c055512e83a538e5517400f5f053bc',
+ 'dawn_revision': '9e92b76b20bd24876ad55df6e0d3659f3c012576',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling feed
# and whatever else without interference from each other.
@@ -1261,7 +1261,7 @@ deps = {
Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e',
'src/third_party/icu':
- Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'e1f2f4f42368555835a7a0894188716556c32871',
+ Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'f600eded18fa83fd64466871748c0ea3a38b91e0',
'src/third_party/icu4j': {
'packages': [
@@ -1643,7 +1643,7 @@ deps = {
Var('chromium_git') + '/external/github.com/google/snappy.git' + '@' + '65dc7b383985eb4f63cd3e752136db8d9b4be8c0',
'src/third_party/sqlite/src':
- Var('chromium_git') + '/chromium/deps/sqlite.git' + '@' + 'a54d5d154f4b349705a67107ed190d1943f94646',
+ Var('chromium_git') + '/chromium/deps/sqlite.git' + '@' + '9328fbe3d1e09dd7290d55e993aa85256e055d9c',
'src/third_party/sqlite4java': {
'packages': [
@@ -1731,7 +1731,7 @@ deps = {
Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '958d732db02c2a70bcf4a2b0986f09318db4adfb',
'src/third_party/webrtc':
- Var('webrtc_git') + '/src.git' + '@' + 'd4f4b84f50e4cf82a89580f8a01846a25dda6ba2',
+ Var('webrtc_git') + '/src.git' + '@' + 'edbd42cda0308d42a3e16e6efdfa95a6fc3fe7b3',
'src/third_party/libgifcodec':
Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'),
@@ -1801,7 +1801,7 @@ deps = {
Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'),
'src-internal': {
- 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6d651b2438a579c5982225a3ba1fd7a3c2fc27dd',
+ 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@9629343751d1aae642f1f568199de026c45e27a1',
'condition': 'checkout_src_internal',
},
diff --git a/chromium/PRESUBMIT.py b/chromium/PRESUBMIT.py
index 81b1b62c3ef..bd85c711954 100644
--- a/chromium/PRESUBMIT.py
+++ b/chromium/PRESUBMIT.py
@@ -1139,6 +1139,7 @@ _GENERIC_PYDEPS_FILES = [
'third_party/blink/tools/merge_web_test_results.pydeps',
'tools/binary_size/sizes.pydeps',
'tools/binary_size/supersize.pydeps',
+ 'tools/perf/process_perf_results.pydeps',
]
diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE
index 6b00a313a05..1ba9c2e1198 100644
--- a/chromium/build/util/LASTCHANGE
+++ b/chromium/build/util/LASTCHANGE
@@ -1,2 +1,2 @@
-LASTCHANGE=d40c1c345c6c905254498a9622b8cd89297dd0f2-refs/branch-heads/5005@{#1191}
+LASTCHANGE=3b4fa75faf59221ce4f363ea7574747b1b7322eb-refs/branch-heads/5005@{#1326}
LASTCHANGE_YEAR=2022
diff --git a/chromium/build/util/LASTCHANGE.committime b/chromium/build/util/LASTCHANGE.committime
index 1cebc058cea..ecbae53e193 100644
--- a/chromium/build/util/LASTCHANGE.committime
+++ b/chromium/build/util/LASTCHANGE.committime
@@ -1 +1 @@
-1655859640 \ No newline at end of file
+1662057456 \ No newline at end of file
diff --git a/chromium/chrome/VERSION b/chromium/chrome/VERSION
index 96ae4bfab48..58c5555c845 100644
--- a/chromium/chrome/VERSION
+++ b/chromium/chrome/VERSION
@@ -1,4 +1,4 @@
MAJOR=102
MINOR=0
BUILD=5005
-PATCH=137
+PATCH=177
diff --git a/chromium/chrome/app/resources/chromium_strings_es.xtb b/chromium/chrome/app/resources/chromium_strings_es.xtb
index b112ec6fb0c..dee5c02ce23 100644
--- a/chromium/chrome/app/resources/chromium_strings_es.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_es.xtb
@@ -16,7 +16,7 @@ Es posible que algunas funciones no estén disponibles y que no se guarden los c
<translation id="1524282610922162960">Compartir una pestaña de Chromium</translation>
<translation id="1553461853655228091">Para crear un mapa 3D de tu entorno, Chromium necesita permiso para acceder a tu cámara</translation>
<translation id="1602421994560205104">Chromium ha bloqueado este archivo porque es demasiado grande como para realizar una comprobación de seguridad. Vuelve a intentarlo con archivos de hasta 50 MB.</translation>
-<translation id="1607715478322902680">{COUNT,plural, =0{Tu administrador pide que reinicies Chromium para aplicar una actualización}=1{Tu administrador pide que reinicies Chromium para aplicar una actualización. La ventana de incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chromium para aplicar una actualización. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="1607715478322902680">{COUNT,plural, =0{Tu administrador pide que reinicies Chromium para aplicar una actualización}=1{Tu administrador pide que reinicies Chromium para aplicar una actualización. La ventana de Incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chromium para aplicar una actualización. Las # ventanas de Incógnito no se volverán a abrir.}}</translation>
<translation id="1625909126243026060">Revisa los controles principales de privacidad y de seguridad en Chromium</translation>
<translation id="1632539827495546968">Si quieres usar esta cuenta solo una vez, puedes usar el <ph name="GUEST_LINK_BEGIN" />Modo Invitado<ph name="GUEST_LINK_END" /> en el navegador Chromium. Si quieres añadir una cuenta para otra persona, <ph name="LINK_BEGIN" />añade una persona<ph name="LINK_END" /> a tu <ph name="DEVICE_TYPE" />.
@@ -98,11 +98,11 @@ Los permisos que hayas dado a sitios web y aplicaciones se pueden aplicar a esta
<translation id="3567254597502212821">Tu historial de navegación, un registro de los sitios que has visitado usando Chromium en este dispositivo.</translation>
<translation id="3575459661164320785">Se ha detectado software dañino en tu ordenador. Chromium puede eliminarlo, restaurar tu configuración y desactivar las extensiones para que el navegador vuelva a funcionar con normalidad.</translation>
<translation id="3639635944603682591">Los datos de navegación de este usuario se eliminarán del dispositivo. Para recuperar tus datos, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation>
-<translation id="364817392622123556">{COUNT,plural, =0{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el navegador.}=1{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el navegador. La ventana de incógnito no se volverá a abrir.}other{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el navegador. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="364817392622123556">{COUNT,plural, =0{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el navegador.}=1{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el navegador. La ventana de Incógnito no se volverá a abrir.}other{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el navegador. Las # ventanas de Incógnito no se volverán a abrir.}}</translation>
<translation id="3651803019964686660">Para enviar un número desde <ph name="ORIGIN" /> a tu teléfono Android, inicia sesión en Chromium con ambos dispositivos.</translation>
<translation id="3685209450716071127">Chromium no puede comprobar tus contraseñas. Revisa tu conexión a Internet.</translation>
<translation id="3702352323269013324">Más información sobre la personalización de anuncios en Chromium</translation>
-<translation id="370962675267501463">{COUNT,plural, =0{Tu administrador pide que reinicies Chromium para aplicar esta actualización}=1{Tu administrador pide que reinicies Chromium para aplicar esta actualización La ventana de incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chromium para aplicar esta actualización Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="370962675267501463">{COUNT,plural, =0{Tu administrador pide que reinicies Chromium para aplicar esta actualización}=1{Tu administrador pide que reinicies Chromium para aplicar esta actualización La ventana de Incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chromium para aplicar esta actualización Las # ventanas de Incógnito no se volverán a abrir.}}</translation>
<translation id="3713809861844741608">Abrir enlace en una pes&amp;taña nueva de Chromium</translation>
<translation id="3728336900324680424">Chromium accederá a tu Drive para mostrarte sugerencias en la barra de direcciones</translation>
<translation id="378917192836375108">Chromium te permite hacer clic en un número de teléfono en la Web y llamar mediante Skype.</translation>
diff --git a/chromium/chrome/app/resources/chromium_strings_eu.xtb b/chromium/chrome/app/resources/chromium_strings_eu.xtb
index 0ed40618610..4d36b0800a3 100644
--- a/chromium/chrome/app/resources/chromium_strings_eu.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_eu.xtb
@@ -238,7 +238,7 @@ Baliteke eginbide batzuk erabilgarri ez egotea. Adierazi beste profil-direktorio
<translation id="6929417474050522668">Probak abian diren bitartean, iragarkien neurketari esker, bisitatzen dituzun webguneek Chromium-i informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webguneen arteko jarraipena.</translation>
<translation id="6940431691900807093">Beranduago, bisitatzen duzun webgune batek zure interesak ikusteko eska diezaioke Chromium-i, agertzen zaizkizun iragarkiak pertsonalizatze aldera. Chromium-ek hiru interes parteka ditzake gehienez.</translation>
<translation id="6964305034639999644">Ireki esteka Chromium-eko &amp;ezkutuko moduko leiho batean</translation>
-<translation id="6978145336957848883">Seguruak ez diren pasahitzak erraz asmatzen dira. Utzi Chromium-i <ph name="BEGIN_LINK" />pasahitz seguruak sortzen eta gogoratzen<ph name="END_LINK" />.</translation>
+<translation id="6978145336957848883">Seguruak ez diren pasahitzak erraz asmatzen dira. Utzi Chromium-i <ph name="BEGIN_LINK" />pasahitz konplexuak sortzen eta gogoratzen<ph name="END_LINK" />.</translation>
<translation id="6985329841647292029">Chromium OS-ren baldintzak</translation>
<translation id="6990124437352146030">Chromium-ek webgune honen izenean mikrofonoa atzitzeko baimena behar du</translation>
<translation id="705851970750939768">Eguneratu Chromium</translation>
diff --git a/chromium/chrome/app/resources/chromium_strings_fa.xtb b/chromium/chrome/app/resources/chromium_strings_fa.xtb
index bf78789ead3..763b7244df8 100644
--- a/chromium/chrome/app/resources/chromium_strings_fa.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_fa.xtb
@@ -15,7 +15,7 @@
<translation id="1553461853655228091">‏Chromium برای ایجاد نقشه سه‌بعدی محیط شما باید اجازه دسترسی به دوربین داشته باشد</translation>
<translation id="1602421994560205104">‏Chromium این فایل را مسدود کرد زیرا برای بررسی امنیتی بسیار بزرگ است. با فایل‌هایی که حداکثر ۵۰ مگابایت باشد دوباره امتحان کنید</translation>
<translation id="1607715478322902680">{COUNT,plural, =0{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید}=1{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید. پنجره ناشناس بازگشایی نمی‌شود.}one{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید. # پنجره ناشناس بازگشایی نمی‌شود.}other{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید. # پنجره ناشناس بازگشایی نمی‌شود.}}</translation>
-<translation id="1625909126243026060">‏مرور کنترل‌های اصلی امنیت و حریم‌خصوصی در Chromium</translation>
+<translation id="1625909126243026060">‏مرور کنترل‌های اصلی امنیت و حریم خصوصی در Chromium</translation>
<translation id="1632539827495546968">‏اگر می‌خواهید فقط یک‌بار از این حساب استفاده کنید، می‌توانید از <ph name="GUEST_LINK_BEGIN" />حالت مهمان<ph name="GUEST_LINK_END" /> در مرورگر Chromium استفاده کنید. اگر می‌خواهید برای شخص دیگری حساب اضافه کنید، به <ph name="DEVICE_TYPE" /> خود <ph name="LINK_BEGIN" />شخص جدیدی اضافه کنید<ph name="LINK_END" />.
اجازه‌هایی که قبلاً به وب‌سایت‌ها و برنامه‌ها داده‌اید ممکن است در این حساب اعمال شود. می‌توانید «حساب‌های Google» خود را در بخش <ph name="SETTINGS_LINK_BEGIN" />تنظیمات<ph name="SETTINGS_LINK_END" /> مدیریت کنید.</translation>
@@ -68,7 +68,7 @@
<translation id="3032706164202344641">‏Chromium نمی‌تواند گذرواژه‌هایتان را بررسی کند. بعداً دوباره امتحان کنید.</translation>
<translation id="3032787606318309379">‏افزودن به Chromium…</translation>
<translation id="3068515742935458733">‏با ارسال گزارش‌های خرابی و <ph name="UMA_LINK" /> به Google، به بهبود Google کمک کنید</translation>
-<translation id="3101560983689755071">‏سابقه مرور شما بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم‌خصوصی شما، Chromium علایقتان را هر ماه به‌طور خودکار و چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
+<translation id="3101560983689755071">‏سابقه مرور شما بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم خصوصی شما، Chromium علایقتان را هر ماه به‌طور خودکار و چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
<translation id="3103660991484857065">‏نصب‌کننده در خارج کردن بایگانی از حالت فشرده ناموفق بود. لطفاً دوباره Chromium را بارگیری کنید.</translation>
<translation id="3130323860337406239">‏Chromium درحال استفاده از میکروفون شما است.</translation>
<translation id="3155163173539279776">‏اجرای مجدد Chromium</translation>
@@ -91,7 +91,7 @@
<translation id="3474745554856756813">‏این کار <ph name="ITEMS_COUNT" /> مورد را از این دستگاه حذف می‌کند. برای بازیابی داده‌هایتان در فرصتی دیگر، با <ph name="USER_EMAIL" /> به سیستم Chromium وارد شوید.</translation>
<translation id="3497319089134299931">‏با <ph name="SHORTCUT" /> می‌توانید بین نمایه‌های Chromium جابه‌جا شوید</translation>
<translation id="3509308970982693815">‏لطفاً همه پنجره‌های Chromium را ببندید و دوباره سعی کنید.</translation>
-<translation id="3533435340678213462">‏برای محافظت از حریم‌خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chromium مدنظر قرار دهد حذف کنید.</translation>
+<translation id="3533435340678213462">‏برای محافظت از حریم خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chromium مدنظر قرار دهد حذف کنید.</translation>
<translation id="3567254597502212821">‏سابقه مرور شما، سابقه سایت‌هایی که بااستفاده از Chromium در این دستگاه از آن‌ها بازدید کرده‌اید.</translation>
<translation id="3575459661164320785">‏نرم‌افزار مضری در رایانه‌تان وجود دارد. Chromium می‌تواند آن را بردارد، تنظیمات را بازیابی کند و افزونه‌ها را غیرفعال کند تا عملکرد مرورگرتان دوباره عادی شود.</translation>
<translation id="3639635944603682591">‏داده‌های محصول مرور این کاربر از این دستگاه حذف می‌شود. برای بازیابی داده‌ها، با نام <ph name="USER_EMAIL" /> به سیستم Chromium وارد شوید.</translation>
@@ -154,7 +154,7 @@
<translation id="5224391634244552924">‏گذرواژه ذخیره‌شده‌ای وجود ندارد. Chromium زمانی می‌تواند گذرواژه‌هایتان را بررسی کند که آن‌ها را ذخیره کرده باشید.</translation>
<translation id="5252179775517634216">‏<ph name="EXISTING_USER" /> قبلاً به سیستم این نمایه Chromium وارد شده است. با این کار، نمایه Chromium جدیدی برای <ph name="USER_EMAIL_ADDRESS" /> ایجاد خواهد شد</translation>
<translation id="5277894862589591112">‏برای اعمال تغییراتتان، Chromium را راه‌اندازی مجدد کنید</translation>
-<translation id="5296845517486664001">‏اگر نسخه آزمایشی روشن باشد و Chromium به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم‌خصوصی شما، Chromium علایقتان را هر ماه به‌طور چرخشی حذف می‌کند.</translation>
+<translation id="5296845517486664001">‏اگر نسخه آزمایشی روشن باشد و Chromium به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم خصوصی شما، Chromium علایقتان را هر ماه به‌طور چرخشی حذف می‌کند.</translation>
<translation id="5358375970380395591">‏شما با حساب مدیریت‌شده وارد سیستم می‌شوید و به سرپرست آن اجازه کنترل بر نمایه Chromium خود را می‌دهید. داده‌های Chromium شما شامل برنامه‌ها، نشانک‌ها، سابقه، گذرواژه‌ها و سایر تنظیمات برای همیشه به <ph name="USER_NAME" /> مرتبط خواهد شد. می‌توانید این داده‌ها را از طریق داشبورد حساب‌های Google حذف کنید اما نمی‌توانید این داده‌ها را به حساب دیگری مرتبط سازید. <ph name="LEARN_MORE" /></translation>
<translation id="5386450000063123300">‏درحال به‌روزرسانی Chromium (<ph name="PROGRESS_PERCENT" />)</translation>
<translation id="538767207339317086">‏مجاز کردن ورود به سیستم Chromium</translation>
@@ -162,7 +162,7 @@
<translation id="5427571867875391349">‏تنظیم Chromium به عنوان مرورگر پیش‌فرضتان</translation>
<translation id="5438241569118040789"><ph name="PAGE_TITLE" /> - Chromium Beta</translation>
<translation id="5480860683791598150">‏Chromium برای هم‌رسانی مکانتان با این سایت باید به مکان شما دسترسی داشته باشد</translation>
-<translation id="5487574057737591516">‏برای محافظت از حریم‌خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. و اگر Chromium به‌اشتباه علاقه‌ای را اضافه کند یا شما نخواهید آگهی‌های مشخصی را ببینید، می‌توانید آن علاقه را بردارید.</translation>
+<translation id="5487574057737591516">‏برای محافظت از حریم خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. و اگر Chromium به‌اشتباه علاقه‌ای را اضافه کند یا شما نخواهید آگهی‌های مشخصی را ببینید، می‌توانید آن علاقه را بردارید.</translation>
<translation id="549669000822060376">‏وقتی Chromium جدیدترین به‌روزرسانی‌های سیستم را نصب می‌کند، لطفاً صبر کنید.</translation>
<translation id="5496810170689441661">‏Chromium می‌خواهد گذرواژه‌ها را ویرایش کند. برای اینکه اجازه دهید این کار انجام شود، گذرواژه Windows خود را تایپ کنید.</translation>
<translation id="5527463683072221100">‏باز کردن فایل‌های PDF در Chromium</translation>
@@ -174,7 +174,7 @@
<translation id="5883558403894052917">‏Chromium متوجه شده است که این موارد حاوی بدافزار هستند:</translation>
<translation id="5895138241574237353">راه‌اندازی مجدد</translation>
<translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - ورود به سیستم شبکه</translation>
-<translation id="5972142260211327093">‏اگر Chromium به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم‌خصوصی شما، Chromium علایقتان را هر ماه به‌طور چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
+<translation id="5972142260211327093">‏اگر Chromium به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم خصوصی شما، Chromium علایقتان را هر ماه به‌طور چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
<translation id="5987687638152509985">‏به‌روزرسانی Chromium برای شروع همگام‌سازی</translation>
<translation id="5988505247484123880">‏امری عادی است که سایت‌هایی که بازدید می‌کنید برای شخصی کردن تجربه‌تان، علایق شما را به‌خاطر آورند. به‌علاوه، سایت‌ها می‌توانند بااستفاده از Chromium اطلاعاتی درباره علایقتان ذخیره کنند.</translation>
<translation id="6055895534982063517">‏نسخه جدیدی از Chromium وجود دارد که سریع‌تر از همیشه است.</translation>
@@ -277,7 +277,7 @@ Chromium قادر به بازیابی تنظیمات شما نیست.</translati
<translation id="7790626492778995050"><ph name="PAGE_TITLE" /> - Chromium Canary</translation>
<translation id="7828947555739565424">‏درحال‌حاضر یک نمایه Chromium با این حساب در این دستگاه وجود دارد</translation>
<translation id="7867198900892795913">‏Chromium به جدیدترین نسخه به‌روزرسانی نشد، بنابراین قابلیت‌های جدید و رفع اشکال‌های امنیتی را ندارید.</translation>
-<translation id="7877292582355102282">‏<ph name="BEGIN_BOLD" />چگونه می‌توانید داده‌هایتان را مدیریت کنید:<ph name="END_BOLD" /> برای محافظت از حریم‌خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشد به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chromium مدنظر قرار دهد حذف کنید.</translation>
+<translation id="7877292582355102282">‏<ph name="BEGIN_BOLD" />چگونه می‌توانید داده‌هایتان را مدیریت کنید:<ph name="END_BOLD" /> برای محافظت از حریم خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشد به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chromium مدنظر قرار دهد حذف کنید.</translation>
<translation id="7937630085815544518">‏شما بعنوان <ph name="USER_EMAIL_ADDRESS" /> وارد سیستم Chromium شده‌اید. لطفاً برای ورود به سیستم مجدد از همان حساب استفاده کنید.</translation>
<translation id="7975919845073681630">‏این نصب ثانویه Chromium است و نمی‌تواند مرورگر پیش‌فرضتان شود.</translation>
<translation id="7982481011030453202">‏اگر تنظیمی در این صفحه نشان داده نمی‌شود، در <ph name="LINK_BEGIN" />
diff --git a/chromium/chrome/app/resources/chromium_strings_te.xtb b/chromium/chrome/app/resources/chromium_strings_te.xtb
index 60311af40a9..0fca858f794 100644
--- a/chromium/chrome/app/resources/chromium_strings_te.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_te.xtb
@@ -20,7 +20,7 @@
మీరు వెబ్‌సైట్‌లు, యాప్‌లకు ఇప్పటికే ఇచ్చిన అనుమతులు ఈ ఖాతాకు వర్తించవచ్చు. మీ Google ఖాతాలను మీరు <ph name="SETTINGS_LINK_BEGIN" />సెట్టింగ్‌లు<ph name="SETTINGS_LINK_END" /> లింక్‌లో మేనేజ్ చేయవచ్చు.</translation>
<translation id="1708666629004767631">Chromium యొక్క కొత్త సురక్షితమైన వెర్షన్ అందుబాటులో ఉంది.</translation>
-<translation id="1774152462503052664">బ్యాక్‌గ్రౌండ్‌లో Chromiumని అమలు చేయడానికి అనుమతించు</translation>
+<translation id="1774152462503052664">బ్యాక్‌గ్రౌండ్‌లో Chromiumని అమలు చేయడానికి అనుమతించండి</translation>
<translation id="1779356040007214683">Chromiumను సురక్షితం చేయడానికి, మేము <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />లో లిస్ట్‌ చేయబడని మరియు మీకు తెలియకుండానే జోడించబడిన కొన్ని ఎక్స్‌టెన్షన్‌లను నిలిపివేసాము.</translation>
<translation id="1808667845054772817">Chromiumను మళ్లీ ఇన్‌స్టాల్ చేయి</translation>
<translation id="185970820835152459">మీరు సైన్ ఇన్ చేసిన Google ఖాతాలను మీరు మేనేజ్ చేయవచ్చు. Chromium బ్రౌజర్, Play Store, Gmail, ఇంకా మరిన్నింటి కోసం మీ Google ఖాతాలు ఉపయోగించబడతాయి. ఫ్యామిలీ మెంబర్ వంటి వారి కోసం మీరు ఖాతాను జోడించాలనుకుంటే, బదులుగా కొత్త వ్యక్తిని మీ <ph name="DEVICE_TYPE" />కు జోడించండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
@@ -36,7 +36,7 @@
<translation id="2008474315282236005">ఇది ఈ పరికరం నుండి 1 అంశాన్ని తొలగిస్తుంది. మీ డేటాను తర్వాత తిరిగి పొందడానికి, Chromiumకు <ph name="USER_EMAIL" /> లాగా సైన్ ఇన్ చేయండి.</translation>
<translation id="2020032459870799438">డేటా ఉల్లంఘనల నుండి, ఇతర భద్రతా సమస్యల నుండి మీ ఇతర పాస్‌వర్డ్‌లు సురక్షితంగా ఉన్నాయో లేదో చెక్ చేయడానికి, <ph name="BEGIN_LINK" />Chromiumకు సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation>
<translation id="2049376729098081731">Google సర్వీస్‌లలో మరింత వ్యక్తిగతీకరించిన అనుభవం కోసం Chromium హిస్టరీని చేర్చాలో, లేదో ఎంచుకోండి</translation>
-<translation id="2174178932569897599">Chromiumను అనుకూలంగా మార్చు</translation>
+<translation id="2174178932569897599">Chromiumను అనుకూలంగా మార్చండి</translation>
<translation id="2185166961232948079">Chromium - నెట్‌వర్క్ సైన్ ఇన్ - <ph name="PAGE_TITLE" /></translation>
<translation id="2241627712206172106">మీరు కంప్యూటర్‌ను షేర్‌ చేస్తే, స్నేహితులు, కుటుంబ సభ్యులు విడివిడిగా బ్రౌజ్ చేయవచ్చు. Chromiumను వారికి నచ్చిన రీతిలో సెటప్ చేసుకోవచ్చు.</translation>
<translation id="2313870531055795960">Chromiumలో స్టోర్ చేయబడిన సురక్షితం కాని సైట్‌ల లిస్ట్‌తో కూడిన URLలను చెక్ చేస్తుంది. ఏదైనా సైట్ మీ పాస్‌వర్డ్‌ను దొంగిలించే ప్రయత్నం చేసినా, లేదంటే ఏదైనా హానికరమైన ఫైల్‌ను మీరు డౌన్‌లోడ్ చేసినా, సదరు URLలను, ఆయా పేజీల కంటెంట్‌లోని కొన్ని భాగాలను కూడా Chromium, 'సురక్షిత బ్రౌజింగ్'కు పంపవచ్చు.</translation>
@@ -58,14 +58,14 @@
<translation id="2770231113462710648">డిఫాల్ట్ బ్రౌజర్‌ను దీనికి మార్చు:</translation>
<translation id="2799223571221894425">మళ్లీ ప్రారంభించు</translation>
<translation id="2837693172913560447">ఇది <ph name="USER_EMAIL_ADDRESS" />కు కొత్త Chromium ప్రొఫైల్‌ను క్రియేట్ చేస్తుంది</translation>
-<translation id="2847479871509788944">Chromium నుండి తీసివేయి...</translation>
+<translation id="2847479871509788944">Chromium నుండి తీసివేయండి...</translation>
<translation id="2850691299438350830">Chromiumలో మిమ్మల్ని సురక్షితంగా ఉంచుతుంది, మీరు సైన్ ఇన్ చేసినప్పుడు ఇతర Google యాప్‌లలో మీ సెక్యూరిటీని మెరుగుపరచడానికి ఉపయోగించబడవచ్చు</translation>
<translation id="2885378588091291677">విధి సంచాలకులు</translation>
<translation id="2910007522516064972">&amp;Chromium గురించి</translation>
<translation id="2977470724722393594">Chromium తాజాగా ఉంది</translation>
<translation id="2977506796191543575">ఏదైనా సైట్ మీ పాస్‌వర్డ్‌ను దొంగిలించే ప్రయత్నం చేసినా, లేదంటే ఏదైనా హానికరమైన ఫైల్‌ను మీరు డౌన్‌లోడ్ చేసినా, సదరు URLలను, ఆయా పేజీల కంటెంట్‌లోని కొన్ని భాగాలను కూడా Chromium, 'సురక్షిత బ్రౌజింగ్'కు పంపవచ్చు</translation>
<translation id="2983934633046890458">Chromium పాస్‌వర్డ్‌లను ఎడిట్ చేయడానికి ప్రయత్నిస్తోంది.</translation>
-<translation id="3032706164202344641">Chromium మీ పాస్‌వర్డ్‌లను తనిఖీ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
+<translation id="3032706164202344641">Chromium మీ పాస్‌వర్డ్‌లను చెక్ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
<translation id="3032787606318309379">Chromiumకి జోడిస్తోంది...</translation>
<translation id="3068515742935458733">Googleకు వినియోగ గణాంకాలు, <ph name="UMA_LINK" />ను పంపడం ద్వారా Chromiumను మెరుగుపరచడంలో సహాయపడండి</translation>
<translation id="3101560983689755071">మీ బ్రౌజింగ్ హిస్టరీ మీరు చూసే యాడ్‌లను, దిగువున అంచనా వేసిన ఆసక్తులపై ప్రభావం చూపుతుంది. మీ గోప్యతను రక్షించడానికి, Chromium ప్రతి నెలా దశల వారీగా మీ ఆసక్తులను ఆటోమేటిక్‌గా తొలగిస్తుంది. ఆసక్తులు మీరు తీసివేస్తే మినహా, రిఫ్రెష్ అవుతూనే ఉంటాయి.</translation>
@@ -105,7 +105,7 @@
<translation id="3830894615770080216">ChromiumOS సిస్టమ్</translation>
<translation id="3848258323044014972"><ph name="PAGE_TITLE" /> - Chromium</translation>
<translation id="386822487697155367">ChromiumOSతో సహాయాన్ని పొందండి</translation>
-<translation id="388648406173476553">Chromiumను అనుకూలీకరించండి మరియు నియంత్రించండి. మీరు గమనించాల్సిన విషయం ఒకటి ఉంది - వివరాల కోసం క్లిక్ చేయండి.</translation>
+<translation id="388648406173476553">Chromiumను అనుకూలంగా మార్చండి మరియు నియంత్రించండి. మీరు గమనించాల్సిన విషయం ఒకటి ఉంది - వివరాల కోసం క్లిక్ చేయండి.</translation>
<translation id="3889543394854987837">Chromiumను తెరిచి, బ్రౌజింగ్‌ను ప్రారంభించడానికి మీ పేరును క్లిక్ చేయండి.</translation>
<translation id="390528597099634151"><ph name="EXISTING_USER" /> ఇప్పటికే ఈ Chromium ప్రొఫైల్‌కు సైన్ ఇన్ చేశారు. మీరు బ్రౌజ్ చేసిన వాటిని విడిగా ఉంచడానికి, Chromium మీ కోసం మీ సొంత ప్రొఫైల్‌ను క్రియేట్ చేయగలదు.</translation>
<translation id="3945058413678539331">పాస్‌వర్డ్‌లను కాపీ చేయడానికి Chromium ప్రయత్నిస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్‌వర్డ్‌ను టైప్ చేయండి.</translation>
@@ -124,7 +124,7 @@
<translation id="439358628917130594">మీరు ఈ పరికరాన్ని ఉపయోగించడానికి ముందు సర్వీస్ నియమాలను చదివి, అంగీకరించాలని <ph name="MANAGER" /> కోరుతోంది. ఈ నియమాలు ChromiumOS నియమాలను విస్తరింపజేయవు, సవరించవు లేదా పరిమితం చేయవు.</translation>
<translation id="4407044323746248786">ఏదేమైనా Chromium నుండి నిష్క్రమించాలా?</translation>
<translation id="4415566066719264597">బ్యాక్‌గ్రౌండ్‌లో అమలయ్యేందుకు Chromiumని అనుమతించండి</translation>
-<translation id="4423735387467980091">Chromiumను అనుకూలీకరించండి మరియు నియంత్రించండి</translation>
+<translation id="4423735387467980091">Chromiumను అనుకూలంగా మార్చండి మరియు నియంత్రించండి</translation>
<translation id="4427306783828095590">ఫిషింగ్, అలాగే మాల్‌వేర్‌ను బ్లాక్ చేయడానికి మెరుగుపరచిన రక్షణ మరింత చేయగలదు</translation>
<translation id="4440114195512068100">మీ పరికరం అప్‌డేట్ అయ్యి ఉందో లేదో చూడటానికి, <ph name="LINK_BEGIN" />ChromiumOS సెట్టింగ్‌లు<ph name="LINK_END" /> ఆప్షన్‌కు వెళ్లండి</translation>
<translation id="452711251841752011">Chromiumకు స్వాగతం; కొత్త బ్రౌజర్ విండో తెరవబడింది</translation>
@@ -181,7 +181,7 @@
<translation id="6072279588547424923">Chromiumకు <ph name="EXTENSION_NAME" /> జోడించబడింది</translation>
<translation id="608006075545470555">ఈ బ్రౌజర్‌కు వర్క్ ప్రొఫైల్‌ను జోడించండి</translation>
<translation id="608189560609172163">సైన్ ఇన్ చేయడంలో ఎర్రర్ కారణంగా Chromium మీ డేటాను సింక్ చేయలేకపోయింది.</translation>
-<translation id="6096348254544841612">Chromiumను అనుకూలీకరించండి మరియు నియంత్రించండి. అప్‌డేట్ అందుబాటులో ఉంది.</translation>
+<translation id="6096348254544841612">Chromiumను అనుకూలంగా మార్చండి మరియు నియంత్రించండి. అప్‌డేట్ అందుబాటులో ఉంది.</translation>
<translation id="6120345080069858279">Chromium ఈ పాస్‌వర్డ్‌ను మీ Google ఖాతాలో సేవ్ చేస్తుంది. మీరు దీనిని గుర్తుంచుకోవాల్సిన అవసరం లేదు.</translation>
<translation id="6129621093834146363"><ph name="FILE_NAME" /> హానికరం, కావున Chromium దాన్ని బ్లాక్ చేసింది.</translation>
<translation id="6134968993075716475">సురక్షిత బ్రౌజింగ్ ఆఫ్ చేయబడింది. దాన్ని ఆన్ చేయమని Chromium సిఫార్సు చేస్తోంది.</translation>
@@ -210,7 +210,7 @@
<translation id="6475912303565314141">ఇది మీరు Chromiumని ప్రారంభించేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation>
<translation id="6510925080656968729">Chromiumను అన్ఇన్‌స్టాల్ చేయి</translation>
<translation id="6542839706527980775">ప్రతి ప్రొఫైల్‌లో బుక్‌మార్క్‌లు, హిస్టరీ, పాస్‌వర్డ్‌లు లాంటి దాని సొంత Chromium సమాచారం ఉంటుంది</translation>
-<translation id="6570579332384693436">అక్షరక్రమ లోపాలను పరిష్కరించడానికి, మీరు వచన ఫీల్డ్‌లలో టైప్ చేసే వచనాన్ని, Chromium Googleకి పంపుతుంది</translation>
+<translation id="6570579332384693436">అక్షరక్రమ లోపాలను పరిష్కరించడానికి, మీరు వచన ఫీల్డ్‌లలో టైప్ చేసే వచనాన్ని, Chromium Googleకు పంపుతుంది</translation>
<translation id="6598877126913850652">Chromium నోటిఫికేషన్ సెట్టింగ్‌లకు వెళ్లు</translation>
<translation id="6613594504749178791">మీ మార్పులు మీరు Chromiumని మరుసటిసారి ప్రారంభించినప్పుడు ప్రభావాన్ని చూపుతాయి.</translation>
<translation id="665732753414869868">మీ పరిసరాల 3D మ్యాప్‌ను క్రియేట్ చేయడానికి Chromiumకు కెమెరా అనుమతి అవసరం</translation>
@@ -229,7 +229,7 @@
<translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation>
<translation id="6863361426438995919">Google Pay (Chromiumకి కాపీ చేయబడింది)</translation>
<translation id="6873893289264747459">"<ph name="EXTENSION_NAME" />"లో మాల్‌వేర్ ఉన్నట్టుగా Chromium కనుగొన్నది</translation>
-<translation id="6893813176749746474">Chromium నవీకరించబడింది, కానీ మీరు దీన్ని గత 30 రోజులుగా ఉపయోగించలేదు.</translation>
+<translation id="6893813176749746474">Chromium అప్‌డేట్ చేయబడింది, కానీ మీరు దీన్ని గత 30 రోజులుగా ఉపయోగించలేదు.</translation>
<translation id="691026815377248078">పెయిరింగ్‌ను కొనసాగించడానికి Chromiumకు
బ్లూటూత్ యాక్సెస్ అవసరం. <ph name="IDS_BLUETOOTH_DEVICE_CHOOSER_AUTHORIZE_BLUETOOTH_LINK" /></translation>
<translation id="6929417474050522668">ట్రయల్స్ ఆన్‌లో ఉన్నప్పుడు, మీరు సందర్శించే సైట్‌లను Chromium నుండి సమాచారాన్ని రిక్వెస్ట్ చేసేలా 'యాడ్‌ల అంచనా' అనుమతిస్తుంది, ఇది యాడ్‌ల పనితీరును అంచనా వేయడంలో సైట్‌కు సహాయపడుతుంది. 'యాడ్‌ల అంచనా', సైట్‌ల మధ్య వీలయినంత తక్కువ సమాచారాన్ని బదిలీ చేసి, క్రాస్-సైట్ ట్రాకింగ్‌ను తగ్గిస్తుంది.</translation>
@@ -260,7 +260,7 @@
<translation id="7467949745582939695">Chromiumను రీ-లాంచ్ చేయాలా?</translation>
<translation id="7483335560992089831">ప్రస్తుతం అమలు అవుతోన్న అదే Chromium వెర్షన్‌ను ఇన్‌స్టాల్ చేయలేరు. దయచేసి Chromiumను మూసివేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="753534427205733210">{0,plural, =1{1 నిమిషంలో Chromium తిరిగి ప్రారంభించబడుతుంది}other{# నిమిషాల్లో Chromium తిరిగి ప్రారంభించబడుతుంది}}</translation>
-<translation id="7561906087460245826">అలాగే (<ph name="URL" />)లో ఉన్న Chromiumకి సంబంధించిన డేటాని తీసివేయి</translation>
+<translation id="7561906087460245826">అలాగే (<ph name="URL" />)లో ఉన్న Chromiumకి సంబంధించిన డేటాను తీసివేయండి</translation>
<translation id="7582945390259497898">Chromium మీ ఆసక్తులను అంచనా వేయగలదు. తర్వాత, మీరు చూసే యాడ్‌లను వ్యక్తిగతీకరించడం కోసం, మీరు సందర్శించే సైట్ మీ ఆసక్తులను చూడమని Chromiumను అడగవచ్చు.</translation>
<translation id="7597596667193879455">మీరు మీ ఖాతాలో మెరుగైన సురక్షిత బ్రౌజింగ్‌ను ఆన్ చేశారు. ఇప్పుడు దాన్ని Chromiumలో పొందండి.</translation>
<translation id="761356813943268536">Chromium మీ కెమెరా మరియు మైక్రోఫోన్‌ని ఉపయోగిస్తోంది.</translation>
@@ -271,7 +271,7 @@
<translation id="7689606757190482937">మీ పరికరాల అంతటా Chromiumను సింక్ చేయండి మరియు వ్యక్తిగతీకరించండి</translation>
<translation id="7729447699958282447">Chromium మీ డేటాను సింక్ చేయ‌లేక‌పోయింది. ఎందుకంటే మీ డొమైన్‌కు సింక్‌ అందుబాటులో లేదు.</translation>
<translation id="7745317241717453663">ఇది ఈ పరికరం నుండి మీ బ్రౌజింగ్ డేటాను తొలగిస్తుంది. మీ డేటాను తర్వాత తిరిగి పొందడానికి, Chromiumకు <ph name="USER_EMAIL" /> లాగా సైన్ ఇన్ చేయండి.</translation>
-<translation id="7747138024166251722">ఇన్‌స్టాలర్ ఒక తాత్కాలిక డైరక్టరీని సృష్టించలేకపోయింది. సాఫ్ట్‌వేర్‌ను ఇన్‌స్టాల్ చేయడానికి దయచేసి ఖాళీ డిస్క్ స్థలం, అనుమతిని తనిఖీ చేయండి.</translation>
+<translation id="7747138024166251722">ఇన్‌స్టాలర్ ఒక తాత్కాలిక డైరక్టరీని సృష్టించలేకపోయింది. సాఫ్ట్‌వేర్‌ను ఇన్‌స్టాల్ చేయడానికి దయచేసి ఖాళీ డిస్క్ స్థలం, అనుమతిని చెక్ చేయండి.</translation>
<translation id="7790626492778995050"><ph name="PAGE_TITLE" /> - Chromium Canary</translation>
<translation id="7828947555739565424">ఈ పరికరంలో ఇప్పటికే ఈ ఖాతాతో ఒక Chromium ప్రొఫైల్ ఉంది</translation>
<translation id="7867198900892795913">Chromiumను తాజా వెర్షన్‌కు అప్‌డేట్ చేయడం సాధ్యం కాలేదు, కాబట్టి మీరు కొత్త ఫీచర్‌లు మరియు భద్రతా పరిష్కారాలను పొందడం లేదు.</translation>
@@ -287,7 +287,7 @@
<translation id="8133124826068723441">మీ డొమైన్ కోసం సింక్ అందుబాటులో లేనందున, ChromiumOS మీ డేటాను సింక్ చేయలేకపోయింది.</translation>
<translation id="81770708095080097">ఈ ఫైల్ అపాయకరమైనది, కాబట్టి Chromium దీన్ని బ్లాక్ చేసింది.</translation>
<translation id="8248265253516264921">చిత్రంలో ఉపయోగకరమైన వివరణ లేకుంటే, మీ కోసం ఒక వివరణను అందించడానికి Chromium ప్రయత్నిస్తుంది. వివరణలను క్రియేట్ చేయడానికి, చిత్రాలు Googleకు పంపబడతాయి. మీరు దీన్ని ఎప్పుడైనా సెట్టింగ్‌లలో ఆఫ్ చేయవచ్చు.</translation>
-<translation id="8266560134891435528">మీరు సైన్ ఇన్ చేయనందున Chromium మీ పాస్‌వర్డ్‌లను తనిఖీ చేయలేదు</translation>
+<translation id="8266560134891435528">మీరు సైన్ ఇన్ చేయనందున Chromium మీ పాస్‌వర్డ్‌లను చెక్ చేయలేదు</translation>
<translation id="8276522524898344151">పాస్‌వర్డ్‌లను కాపీ చేయడానికి Chromium ప్రయత్నిస్తోంది.</translation>
<translation id="8290862415967981663">ఈ ఫైల్ అపాయకరం కావచ్చు, కాబట్టి Chromium దీన్ని బ్లాక్ చేసింది.</translation>
<translation id="8330519371938183845">మీ పరికరాల అంతటా Chromiumను సింక్ చేయడానికి, వ్యక్తిగతీకరించడానికి సైన్ ఇన్ చేయండి</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_am.xtb b/chromium/chrome/app/resources/generated_resources_am.xtb
index 50940449d81..87742efc515 100644
--- a/chromium/chrome/app/resources/generated_resources_am.xtb
+++ b/chromium/chrome/app/resources/generated_resources_am.xtb
@@ -1001,7 +1001,7 @@
<translation id="1932098463447129402">በፊት ያልሆነ</translation>
<translation id="1935303383381416800">አካባቢዎን ለማየት ተፈቅዷል</translation>
<translation id="1936931585862840749">ስንት ቅጂዎች መታተም እንዳለባቸው ለማመላከት ቁጥር ይጠቀሙ (ከ1 እስከ <ph name="MAX_COPIES" />)።</translation>
-<translation id="1937774647013465102"><ph name="ARCHITECTURE_DEVICE" /> በሆነው በዚህ መሣሪያ የመያዣ ኪነ ሕንጻ አይነት <ph name="ARCHITECTURE_CONTAINER" />ን ማስመጣት አይቻልም። ይህን መያዣ በተለየ መሣሪያ ወደነበረበት ለመመለስ መሞከር፣ ወይም ደግሞ በፋይሎች መተግበሪያ ውስጥ በመክፈት በዚህ መያዣ ውስጥ ይያሉ ፋይሎችን መድረስ ይችላሉ።</translation>
+<translation id="1937774647013465102"><ph name="ARCHITECTURE_DEVICE" /> በሆነው በዚህ መሣሪያ የመያዣ ኪነ ህንፃ አይነት <ph name="ARCHITECTURE_CONTAINER" />ን ማስመጣት አይቻልም። ይህን መያዣ በተለየ መሣሪያ ወደነበረበት ለመመለስ መሞከር፣ ወይም ደግሞ በፋይሎች መተግበሪያ ውስጥ በመክፈት በዚህ መያዣ ውስጥ ይያሉ ፋይሎችን መድረስ ይችላሉ።</translation>
<translation id="1938351510777341717">ውጫዊ ትዕዛዝ</translation>
<translation id="1940546824932169984">የተገናኙ መሣሪያዎች</translation>
<translation id="1941410638996203291">መነሻ ሰዓት <ph name="TIME" /></translation>
@@ -3562,7 +3562,7 @@
<translation id="4432621511648257259">የይለፍ ቃል ትክክል አይደለም</translation>
<translation id="443454694385851356">የቆየ (ለደህንነት የማያስተማምን)</translation>
<translation id="443475966875174318">ተኳኋኝ ያልሆኑ መተግበሪያዎችን ያዘምኑ ወይም ያስወግዱ</translation>
-<translation id="4438043733494739848">ግልጽ</translation>
+<translation id="4438043733494739848">ግልፅ</translation>
<translation id="4440097423000553826"><ph name="WEBSITE" /> ማሳወቂያ ወደ ስልክዎ ልኳል። እርስዎ መሆንዎን ለማረጋገጥ የ«<ph name="NOTIFICATIONTITLE" />» ማሳወቂያውን መታ ያድርጉ እና እርምጃዎቹን ይከተሉ።</translation>
<translation id="4441124369922430666">ማሽኑ ሲበራ ይህን መተግበሪያ በራስ-ሰር እንዲጀመር ይፈልጋሉ?</translation>
<translation id="4441147046941420429">ለመቀጠል የደህንነት ቁልፍዎን ከመሣሪያዎ ያስወግዱት፣ ከዚያ ዳግም ያስገቡትና ይንኩት</translation>
@@ -3872,7 +3872,7 @@
<translation id="4742334355511750246">ምስሎችን ለማሳየት አልተፈቀደም</translation>
<translation id="4742970037960872810">ማድመቂያውን አስወግድ</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />እንዴት መተግበሪያዎችን ማዘመን እንደሚቻል ይረዱ<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{የጣቢያን ድምጸ-ከል አንሳ}one{የጣቢያዎችን ድምጸ-ከል አንሳ}other{የጣቢያዎችን ድምጸ-ከል አንሳ}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{የጣቢያን ድምጸ-ከል ያንሱ}one{የጣቢያዎችን ድምጸ-ከል ያንሱ}other{የጣቢያዎችን ድምጸ-ከል ያንሱ}}</translation>
<translation id="474609389162964566">ረዳትዎን በ«Hey Google» ይድረሱበት</translation>
<translation id="4746351372139058112">መልዕክቶች</translation>
<translation id="4748783296226936791">ያልተለመዱ የቁልፍ ሰሌዳዎችን፣ የጨዋታ መቆጣጠሪያዎችን እና ሌሎች መሣሪያዎችን ለሚጠቀሙ ባህሪዎች ጣቢያዎች ብዙውን ጊዜ ከ HID መሣሪያዎች ጋር ይገናኛሉ</translation>
@@ -4096,7 +4096,7 @@
<translation id="4972129977812092092">ማተሚያን ያርትዑ</translation>
<translation id="4972164225939028131">የተሳሳተ የይለፍ ቃል</translation>
<translation id="4972737347717125191">ጣቢያዎች ምናባዊ የእውነታ መሣሪያዎችን እና ውሂብን ለመጠቀም መጠየቅ ይችላሉ</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{ጣቢያ ላይ ድምጸ-ከል አድርግ}one{ጣቢያዎች ላይ ድምጸ-ከል አድርግ}other{ጣቢያዎች ላይ ድምጸ-ከል አድርግ}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{ጣቢያ ላይ ድምጸ-ከል አድርግ}one{ጣቢያዎች ላይ ድምጸ-ከል ያድርጉ}other{ጣቢያዎች ላይ ድምጸ-ከል ያድርጉ}}</translation>
<translation id="497403230787583386">የደህንነት ፍተሻዎች ተከናውነዋል። የእርስዎ ሰነድ ይታተማል።</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">መዳረሻ ያረጋግጡ</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ar.xtb b/chromium/chrome/app/resources/generated_resources_ar.xtb
index 4eec1516e8e..f14c514e2ec 100644
--- a/chromium/chrome/app/resources/generated_resources_ar.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ar.xtb
@@ -998,7 +998,7 @@
<translation id="1936931585862840749">استخدِم رقمًا للإشارة إلى عدد النُسخ المطلوب طباعتها (من 1 إلى <ph name="MAX_COPIES" />).</translation>
<translation id="1937774647013465102">يتعذّر استيراد نوع بنية الحاوية <ph name="ARCHITECTURE_CONTAINER" /> باستخدام هذا الجهاز الذي يمثل <ph name="ARCHITECTURE_DEVICE" />.يمكنك محاولة استعادة هذه الحاوية على جهاز مختلف، أو يمكنك الوصول إلى الملفات داخل صورة الحاوية هذه عن طريق فتح تطبيق "الملفات".</translation>
<translation id="1938351510777341717">‏مفتاح Command الخارجي</translation>
-<translation id="1940546824932169984">الأجهزة المرتبطة</translation>
+<translation id="1940546824932169984">الأجهزة المتصلة</translation>
<translation id="1941410638996203291">وقت البدء: <ph name="TIME" /></translation>
<translation id="1941553344801134989">الإصدار: <ph name="APP_VERSION" /></translation>
<translation id="1942128823046546853">الاطّلاع على جميع بياناتك وتغييرها على جميع المواقع الإلكترونية</translation>
@@ -1585,7 +1585,7 @@
<translation id="247208220409682803">يتم حذف قائمة المواقع الإلكترونية التي تحدّد اهتماماتك، ويتم تحديثها كل شهر. وقد يظهر في القائمة مرة أخرى أي موقع إلكتروني تتكرّر زيارته. يمكنك إزالة أي موقع إلكتروني إذا كنت لا تريد مطلقًا أن يحدّد لك اهتماماتك.</translation>
<translation id="2473195200299095979">ترجم هذه الصفحة</translation>
<translation id="2475982808118771221">حدث خطأ</translation>
-<translation id="2476578072172137802">إعدادات الموقع الإلكتروني</translation>
+<translation id="2476578072172137802">إعدادات المواقع الإلكترونية</translation>
<translation id="2476974672882258506">‏يجب إيقاف تشغيل نظام Windows لإلغاء تثبيت <ph name="PARALLELS_DESKTOP" />.</translation>
<translation id="2477065602824695373">بما أنّه سبق لك إعداد عدة مفاتيح تحكّم، تم إيقاف ميزة "المسح التلقائي".</translation>
<translation id="2478176599153288112">أذونات ملف الوسائط لـ "<ph name="EXTENSION" />"</translation>
@@ -2850,7 +2850,8 @@
<translation id="3732530910372558017">يجب ألا يزيد رقم التعريف الشخصي عن 63 حرفًا</translation>
<translation id="3732857534841813090">‏معلومات ذات صلة بخدمة "مساعد Google"</translation>
<translation id="3733296813637058299">‏سنثبّت هذه التطبيقات بالنيابة عنك. ويمكنك العثور على المزيد من التطبيقات لجهاز <ph name="DEVICE_TYPE" /> في "متجر Play".</translation>
-<translation id="3735740477244556633">ترتيب بحسب</translation>
+<translation id="3735740477244556633">الترتيب حسب
+</translation>
<translation id="3738632186060045350">سيتم حذف بيانات <ph name="DEVICE_TYPE" /> خلال 24 ساعة</translation>
<translation id="3738924763801731196"><ph name="OID" />:</translation>
<translation id="3739254215541673094">هل ترغب في فتح <ph name="APPLICATION" />؟</translation>
@@ -3867,7 +3868,7 @@
<translation id="4742334355511750246">المواقع الإلكترونية التي لا يُسمح لها بعرض الصور</translation>
<translation id="4742970037960872810">إزالة التمييز</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />التعرّف على كيفية تحديث التطبيقات<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{إعادة صوت موقع إلكتروني واحد}zero{إعادة صوت المواقع الإلكترونية}two{إعادة صوت موقعيِّ الويب}few{إعادة صوت المواقع الإلكترونية}many{إعادة صوت المواقع الإلكترونية}other{إعادة صوت المواقع الإلكترونية}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{إعادة صوت الموقع الإلكتروني}zero{إعادة صوت المواقع الإلكترونية}two{إعادة صوت الموقعَين الإلكترونيين}few{إعادة صوت المواقع الإلكترونية}many{إعادة صوت المواقع الإلكترونية}other{إعادة صوت المواقع الإلكترونية}}</translation>
<translation id="474609389162964566">‏الوصول إلى "مساعد Google" من خلال قول Ok Google</translation>
<translation id="4746351372139058112">الرسائل</translation>
<translation id="4748783296226936791">‏تتّصل المواقع الإلكترونية عادةً بأجهزة HID لتتيح الميزات التي تستخدم لوحات المفاتيح غير العادية ووحدات التحكّم في الألعاب وغيرها من الأجهزة.</translation>
@@ -4091,7 +4092,7 @@
<translation id="4972129977812092092">تعديل الطابعة</translation>
<translation id="4972164225939028131">كلمة مرور غير صحيحة</translation>
<translation id="4972737347717125191">السماح للمواقع الإلكترونية بطلب استخدام أجهزة الواقع الافتراضي وبياناتها</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{كتم صوت موقع إلكتروني واحد}zero{كتم صوت المواقع الإلكترونية}two{كتم صوت موقعيِّ الويب}few{كتم صوت المواقع الإلكترونية}many{كتم صوت المواقع الإلكترونية}other{كتم صوت المواقع الإلكترونية}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{كتم صوت الموقع الإلكتروني}zero{كتم صوت المواقع الإلكترونية}two{كتم صوت الموقعَين الإلكترونيين}few{كتم صوت المواقع الإلكترونية}many{كتم صوت المواقع الإلكترونية}other{كتم صوت المواقع الإلكترونية}}</translation>
<translation id="497403230787583386">اكتملت عمليات فحص الأمان. ستتم طباعة المستند.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">تأكيد الدخول</translation>
@@ -4639,7 +4640,7 @@
<translation id="5533001281916885985">يريد <ph name="SITE_NAME" /></translation>
<translation id="5534304873398226603">إلغاء صورة أو فيديو</translation>
<translation id="5535941515421698170">إزالة البيانات الحالية من هذا الجهاز أيضًا</translation>
-<translation id="5537725057119320332">إرسال</translation>
+<translation id="5537725057119320332">بث</translation>
<translation id="5539221284352502426">رفض الخادم كلمة المرور التي أدخلتَها. وتتضمن الأسباب المحتملة ما يلي: كلمة المرور قصيرة جدًا. يجب أن تتضمن كلمة المرور أرقامًا أو رموزًا. يجب أن تكون كلمة المرور مختلفة عن كلمات المرور السابقة.</translation>
<translation id="5541694225089836610">تم إيقاف الإجراء من قِبل المشرف.</translation>
<translation id="5542132724887566711">الملف التعريفي</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_bg.xtb b/chromium/chrome/app/resources/generated_resources_bg.xtb
index 943615fd917..b026094d0ac 100644
--- a/chromium/chrome/app/resources/generated_resources_bg.xtb
+++ b/chromium/chrome/app/resources/generated_resources_bg.xtb
@@ -2115,7 +2115,7 @@ https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featu
<translation id="2966937470348689686">Управление на предпочитанията за Android</translation>
<translation id="2967926928600500959">URL адресите, съответстващи на тези правила, задължително ще се отварят в конкретен браузър.</translation>
<translation id="2972581237482394796">&amp;Възстановяване</translation>
-<translation id="2973324205039581528">Заглушаване на сайта</translation>
+<translation id="2973324205039581528">Спиране на звука на сайта</translation>
<translation id="2973537811036309675">Страничен панел</translation>
<translation id="2976557544729462544">Някои устройства изискват да деактивирате защитата на достъпа до данните, в противен случай не работят нормално или с пълна скорост.</translation>
<translation id="2977480621796371840">Премахване от групата</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_bn.xtb b/chromium/chrome/app/resources/generated_resources_bn.xtb
index d817f920f46..110c7ba4da9 100644
--- a/chromium/chrome/app/resources/generated_resources_bn.xtb
+++ b/chromium/chrome/app/resources/generated_resources_bn.xtb
@@ -7165,7 +7165,7 @@
<translation id="8023133589013344428">ChromeOS Flex সেটিংসে ভাষা ম্যানেজ করুন</translation>
<translation id="8023801379949507775">এক্সটেনশগুলি এখনই আপডেট করুন</translation>
<translation id="8025151549289123443">লক স্ক্রিন ও সাইন-ইন</translation>
-<translation id="8026334261755873520">ব্রাউজ করা ডেটা সাফ করুন</translation>
+<translation id="8026334261755873520">ব্রাউজিং ডেটা সাফ করুন</translation>
<translation id="8028060951694135607">Microsoft মূল পুনরুদ্ধার</translation>
<translation id="8028803902702117856">ডাউনলোড হচ্ছে <ph name="SIZE" />, <ph name="FILE_NAME" /></translation>
<translation id="8028993641010258682">সাইজ</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_bs.xtb b/chromium/chrome/app/resources/generated_resources_bs.xtb
index fe27694bd42..e70c71e661b 100644
--- a/chromium/chrome/app/resources/generated_resources_bs.xtb
+++ b/chromium/chrome/app/resources/generated_resources_bs.xtb
@@ -3879,7 +3879,7 @@ Domena <ph name="DOMAIN" /> zahtijeva da pametna kartica ostane umetnuta.</trans
<translation id="4742334355511750246">Nije dozvoljeno prikazivanje slika</translation>
<translation id="4742970037960872810">Ukloni istaknuti tekst</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Saznajte kako ažurirati aplikacije<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{Omogući zvuk na web lokaciji}one{Omogući zvuk na web lokacijama}few{Omogući zvuk na web lokacijama}other{Omogući zvuk na web lokacijama}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{Uključi zvuk web lokacije}one{Uključi zvuk web lokacija}few{Uključi zvuk web lokacija}other{Uključi zvuk web lokacija}}</translation>
<translation id="474609389162964566">Pristupite Asistentu pomoću fraze "Ok Google"</translation>
<translation id="4746351372139058112">Poruke</translation>
<translation id="4748783296226936791">Web lokacije se obično povezuju s HID uređajima radi funkcija koje koriste neuobičajene tastature, kontrolere igara i ostale uređaje</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ca.xtb b/chromium/chrome/app/resources/generated_resources_ca.xtb
index cc790fea63b..c6fe11502eb 100644
--- a/chromium/chrome/app/resources/generated_resources_ca.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ca.xtb
@@ -4196,7 +4196,7 @@ i Ctrl+Alt+disminueix la brillantor per reduir.</translation>
<translation id="5090637338841444533">Sense permís per fer un seguiment de la posició de la càmera</translation>
<translation id="5093569275467863761">Submarc d'incògnit desat a la memòria cau back-forward: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation>
<translation id="5094176498302660097">Amb aquesta aplicació pots obrir i editar fitxers admesos des de l'aplicació Fitxers o des d'altres aplicacions. Si vols controlar quins fitxers s'obren amb aquesta aplicació de manera predeterminada, <ph name="BEGIN_LINK" />obtén més informació sobre com pots establir aplicacions predeterminades al dispositiu<ph name="END_LINK" />.</translation>
-<translation id="5094721898978802975">Comunicació amb aplicacions natives cooperatives</translation>
+<translation id="5094721898978802975">Comunicar-se amb aplicacions natives cooperatives</translation>
<translation id="5097002363526479830">S'ha produït un error en connectar amb la xarxa "<ph name="NAME" />": <ph name="DETAILS" /></translation>
<translation id="5097306410549350357">Més informació sobre com s'utilitza la ubicació</translation>
<translation id="5097649414558628673">Eina: <ph name="PRINT_NAME" /></translation>
diff --git a/chromium/chrome/app/resources/generated_resources_da.xtb b/chromium/chrome/app/resources/generated_resources_da.xtb
index 5e3aaa5db75..78645869c9e 100644
--- a/chromium/chrome/app/resources/generated_resources_da.xtb
+++ b/chromium/chrome/app/resources/generated_resources_da.xtb
@@ -208,7 +208,7 @@
<translation id="1193927020065025187">Dette website forsøger muligvis at narre dig til at tillade påtrængende notifikationer</translation>
<translation id="1195210374336998651">Gå til appindstillinger</translation>
<translation id="1195447618553298278">Ukendt fejl.</translation>
-<translation id="1195558154361252544">Notifikationer blokeres automatisk for alle website med undtagelse dem, du har givet tilladelse til</translation>
+<translation id="1195558154361252544">Notifikationer blokeres automatisk for alle websites med undtagelse af dem, du har givet tilladelse til</translation>
<translation id="1197088940767939838">Orange</translation>
<translation id="1197199342062592414">Lad os komme i gang</translation>
<translation id="1197935538609051549">Deaktiver</translation>
@@ -2517,7 +2517,7 @@ og tryk på Ctrl+Alt+lysstyrke ned for at zoome ud.</translation>
<translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
<translation id="3404065873681873169">Der er ikke gemt nogen adgangskoder til dette website</translation>
<translation id="3404249063913988450">Aktivér Pauseskærm</translation>
-<translation id="3405664148539009465">Tilpas skriftstørrelser</translation>
+<translation id="3405664148539009465">Tilpas skrifttyper</translation>
<translation id="3405763860805964263">...</translation>
<translation id="3406290648907941085">Har tilladelse til at bruge virtual reality-enheder og -data</translation>
<translation id="3406396172897554194">Søg efter sproget eller navnet på indtastningsmetoden</translation>
@@ -4106,7 +4106,7 @@ Vil du starte <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation>
<translation id="4972129977812092092">Rediger printer</translation>
<translation id="4972164225939028131">Forkert adgangskode</translation>
<translation id="4972737347717125191">Websites kan anmode om tilladelse til at bruge virtual reality-enheder og -data</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Slå lyden fra på website}one{Slå lyden fra på website}other{Slå lyden fra på websites}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Slå lyden fra på dette website}one{Slå lyden fra på dette website}other{Slå lyden fra på disse websites}}</translation>
<translation id="497403230787583386">Sikkerhedstjekkene blev gennemført. Dit dokument udskrives.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Bekræft adgang</translation>
@@ -5685,7 +5685,7 @@ Flere kontakter kan tildeles denne handling.</translation>
<translation id="6556903358015358733">Tema og baggrund</translation>
<translation id="6557290421156335491">Mine genveje</translation>
<translation id="6560151649238390891">Forslaget blev indsat</translation>
-<translation id="6561560012278703671">Få lydløse meddelelser (dette sørger for, at dine notifikationsprompts ikke forstyrrer dig)</translation>
+<translation id="6561560012278703671">Få lydløse meddelelser (dette sørger for, at dine notifikationer ikke forstyrrer dig)</translation>
<translation id="6561726789132298588">enter</translation>
<translation id="6562117348069327379">Gem systemlogs i mappen Downloads.</translation>
<translation id="656293578423618167">Filstien eller -navnet er for langt. Gem med et kortere navn eller på en anden placering.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_de.xtb b/chromium/chrome/app/resources/generated_resources_de.xtb
index ad931eec608..62b46b3809a 100644
--- a/chromium/chrome/app/resources/generated_resources_de.xtb
+++ b/chromium/chrome/app/resources/generated_resources_de.xtb
@@ -2498,7 +2498,7 @@ Servernachricht: <ph name="SERVER_MSG" /></translation>
<translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
<translation id="3404065873681873169">Für diese Website sind keine Passwörter gespeichert</translation>
<translation id="3404249063913988450">Bildschirmschoner aktivieren</translation>
-<translation id="3405664148539009465">Schriftart anpassen</translation>
+<translation id="3405664148539009465">Schriftarten anpassen</translation>
<translation id="3405763860805964263">...</translation>
<translation id="3406290648907941085">Dürfen Virtual-Reality-Geräte und ‑Daten verwenden</translation>
<translation id="3406396172897554194">Anhand einer Sprache oder Eingabemethode suchen</translation>
@@ -3866,7 +3866,7 @@ Möchtest du <ph name="CONTROL_PANEL_APPLET_NAME" /> starten?</translation>
<translation id="474609389162964566">Mit „Hey Google“ auf Assistant zugreifen</translation>
<translation id="4746351372139058112">Messages</translation>
<translation id="4748783296226936791">Websites verbinden sich normalerweise für solche Funktionen mit HID-Geräten, für die ungewöhnliche Tastaturen, Gamecontroller und andere Geräte verwendet werden</translation>
-<translation id="4750185073185658673">Überprüfe weitere Berechtigungen auf deinem Smartphone. Kontrolliere, ob Bluetooth und WLAN auf dem Smartphone aktiviert sind.</translation>
+<translation id="4750185073185658673">Auf deinem Smartphone kannst du noch andere Berechtigungen prüfen. Kontrolliere außerdem, ob Bluetooth und WLAN auf dem Smartphone aktiviert sind.</translation>
<translation id="4750394297954878236">Vorschläge</translation>
<translation id="475088594373173692">Erster Nutzer</translation>
<translation id="4756378406049221019">Stopp/Neu laden</translation>
@@ -5657,12 +5657,12 @@ Du kannst dieser Aktion mehrere Schalter zuweisen.</translation>
<translation id="6555432686520421228">Alle Nutzerkonten entfernen und das <ph name="IDS_SHORT_PRODUCT_NAME" />-Gerät auf die Werkseinstellungen zurücksetzen</translation>
<translation id="6555604601707417276">Linux-Sicherung wiederhergestellt</translation>
<translation id="6555810572223193255">Die Bereinigung ist derzeit nicht verfügbar</translation>
-<translation id="6556477848444788999">Die PIN bzw. das Passwort trägt zum Schutz der Daten auf diesem Gerät (<ph name="DEVICE_TYPE" />) bei, einschließlich der Inhalte, die du über dein Smartphone streamst.</translation>
+<translation id="6556477848444788999">Die PIN bzw. das Passwort hilft, die Daten auf diesem Gerät (<ph name="DEVICE_TYPE" />) zu schützen. Dies gilt auch für alle Inhalte, die auf deinem Smartphone gespeichert sind und die du auf dieses Gerät streamst.</translation>
<translation id="6556866813142980365">Wiederholen</translation>
<translation id="6556903358015358733">Design und Hintergrund</translation>
<translation id="6557290421156335491">Meine Verknüpfungen</translation>
<translation id="6560151649238390891">Vorschlag eingefügt</translation>
-<translation id="6561560012278703671">Ein Symbol in der Adressleiste einblenden (störende Aufforderungen zum Annehmen von Benachrichtigungen werden blockiert)</translation>
+<translation id="6561560012278703671">Unaufdringlichere Benachrichtigungen verwenden (störende Aufforderungen zum Annehmen von Benachrichtigungen werden blockiert)</translation>
<translation id="6561726789132298588">Eingabe</translation>
<translation id="6562117348069327379">Systemprotokolle im Downloadverzeichnis speichern.</translation>
<translation id="656293578423618167">Der Dateipfad oder Dateiname ist zu lang. Verwende bitte einen kürzeren Namen oder einen anderen Speicherort.</translation>
@@ -8056,7 +8056,7 @@ Speichere deine Schlüsseldatei an einem sicheren Ort. Du benötigst die Datei,
<translation id="8934732568177537184">Weiter</translation>
<translation id="8938800817013097409">USB-C-Gerät (rechter Port hinten)</translation>
<translation id="8940081510938872932">Dein Computer erledigt momentan zu viele Aufgaben gleichzeitig. Bitte versuche es später erneut.</translation>
-<translation id="8940381019874223173">Von deinen Google Fotos</translation>
+<translation id="8940381019874223173">Aus deinen Google Fotos</translation>
<translation id="8941173171815156065">Berechtigung "<ph name="PERMISSION" />" aufheben</translation>
<translation id="894360074127026135">Netscape International Step-up</translation>
<translation id="8944099748578356325">Den Akku schneller verbrauchen (aktueller Stand: <ph name="BATTERY_PERCENTAGE" /> %)</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_en-GB.xtb b/chromium/chrome/app/resources/generated_resources_en-GB.xtb
index 750571d685d..0bde08ef9bb 100644
--- a/chromium/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chromium/chrome/app/resources/generated_resources_en-GB.xtb
@@ -168,7 +168,7 @@
<translation id="1153636665119721804">Google Advanced Protection programme</translation>
<translation id="1155545602507378023">No, this device only</translation>
<translation id="1155816283571436363">Connecting to your phone</translation>
-<translation id="1158080958325422608">Make upper case</translation>
+<translation id="1158080958325422608">Make Upper Case</translation>
<translation id="1158238185437008462">See memories</translation>
<translation id="1161575384898972166">Please sign in to <ph name="TOKEN_NAME" /> to export the client certificate.</translation>
<translation id="116173250649946226">Your administrator has set a default theme which cannot be changed.</translation>
@@ -604,7 +604,7 @@ Permissions that you've already given to apps may apply to this account. You can
<translation id="1588438908519853928">Normal</translation>
<translation id="1588870296199743671">Open Link With...</translation>
<translation id="1588919647604819635">Right-click card</translation>
-<translation id="1589055389569595240">Show spelling and grammar</translation>
+<translation id="1589055389569595240">Show Spelling and Grammar</translation>
<translation id="1591679663873027990">Give Parallels Desktop permission to access USB devices. Parallels Desktop won't remember a USB device after it's removed.</translation>
<translation id="1592074621872221573"><ph name="MANAGER" /> has disabled ADB debugging, which will reset your <ph name="DEVICE_TYPE" />. Back up your files before restarting.</translation>
<translation id="1592126057537046434">Quick Answers translation</translation>
@@ -1137,7 +1137,7 @@ You can manage this account’s settings by installing the Family Link app on yo
<translation id="2079545284768500474">Undo</translation>
<translation id="2080070583977670716">More settings</translation>
<translation id="2081816110395725788">Idle power on battery</translation>
-<translation id="2082187087049518845">Group tab</translation>
+<translation id="2082187087049518845">Group Tab</translation>
<translation id="2082510809738716738">Pick a theme colour</translation>
<translation id="208586643495776849">Please try again</translation>
<translation id="208634871997892083">Always-on VPN</translation>
@@ -2297,7 +2297,7 @@ and Ctrl+Alt+Brightness down to zoom out.</translation>
<translation id="3151616662954589507">Selfie camera</translation>
<translation id="3151786313568798007">Orientation</translation>
<translation id="3152356229013609796">View, dismiss and reply to your phone's notifications</translation>
-<translation id="3157387275655328056">Add to Reading List</translation>
+<translation id="3157387275655328056">Add to reading list</translation>
<translation id="3157931365184549694">Restore</translation>
<translation id="3158033540161634471">Set up your fingerprint</translation>
<translation id="3158770568048368350">This may cause your mobile network to briefly disconnect</translation>
@@ -2522,7 +2522,7 @@ and Ctrl+Alt+Brightness down to zoom out.</translation>
<translation id="3406396172897554194">Search by language or input name</translation>
<translation id="3406605057700382950">&amp;Show bookmarks bar</translation>
<translation id="3409785640040772790">Maps</translation>
-<translation id="3412265149091626468">Jump to selection</translation>
+<translation id="3412265149091626468">Jump to Selection</translation>
<translation id="3413122095806433232">CA Issuers: <ph name="LOCATION" /></translation>
<translation id="3414952576877147120">Size:</translation>
<translation id="3414966631182382431">Your <ph name="BEGIN_LINK" />browser is managed<ph name="END_LINK" /> by <ph name="MANAGER" /></translation>
@@ -2816,7 +2816,7 @@ and Ctrl+Alt+Brightness down to zoom out.</translation>
<translation id="3691231116639905343">Keyboard apps</translation>
<translation id="369135240373237088">Sign in again with a school account</translation>
<translation id="3693415264595406141">Password:</translation>
-<translation id="3694027410380121301">Select previous tab</translation>
+<translation id="3694027410380121301">Select Previous Tab</translation>
<translation id="369489984217678710">Passwords and other sign-in data</translation>
<translation id="369522892592566391">{NUM_FILES,plural, =0{Security checks are complete. Your data will be uploaded.}=1{Security checks are complete. Your file will be uploaded.}other{Security checks are complete. Your files will be uploaded.}}</translation>
<translation id="3698471669415859717">Review complete</translation>
@@ -3828,7 +3828,7 @@ and Ctrl+Alt+Brightness down to zoom out.</translation>
<translation id="4681930562518940301">Open original image in new tab</translation>
<translation id="4682551433947286597">Wallpapers appear on the sign-in screen.</translation>
<translation id="4682830185876172415">Recent downloads</translation>
-<translation id="4683629100208651599">Make lower case</translation>
+<translation id="4683629100208651599">Make Lower Case</translation>
<translation id="4683947955326903992"><ph name="PERCENTAGE" />% (default)</translation>
<translation id="4684427112815847243">Sync everything</translation>
<translation id="4684471265911890182"><ph name="APP_NAME" /> is trying to access the camera. Turn off the camera privacy switch to allow access.</translation>
@@ -3937,7 +3937,7 @@ and Ctrl+Alt+Brightness down to zoom out.</translation>
<translation id="480990236307250886">Open the homepage</translation>
<translation id="4809927044794281115">Light theme</translation>
<translation id="4811212958317149293">Switch Access keyboard auto-scan</translation>
-<translation id="4811503964269049987">Group selected tab</translation>
+<translation id="4811503964269049987">Group Selected Tab</translation>
<translation id="4813136279048157860">My Images</translation>
<translation id="4813512666221746211">Network error</translation>
<translation id="4814378367953456825">Enter a name for this fingerprint</translation>
@@ -4156,7 +4156,7 @@ and Ctrl+Alt+Brightness down to zoom out.</translation>
<translation id="5032430150487044192">Can't create QR code</translation>
<translation id="5033137252639132982">Not allowed to use motion sensors</translation>
<translation id="5033266061063942743">Geometric shapes</translation>
-<translation id="5037676449506322593">Select all</translation>
+<translation id="5037676449506322593">Select All</translation>
<translation id="5038022729081036555">You can use it for <ph name="TIME_LIMIT" /> tomorrow.</translation>
<translation id="5038818366306248416">You previously chose not to allow any extensions on <ph name="ORIGIN" /></translation>
<translation id="5039696241953571917">View and manage saved passwords in your Google Account</translation>
@@ -5580,7 +5580,7 @@ You can assign multiple switches to this action.</translation>
<translation id="6459488832681039634">Use Selection for Find</translation>
<translation id="6459799433792303855">Active window moved to another display.</translation>
<translation id="6460566145397380451">Allowed to connect to MIDI devices</translation>
-<translation id="6460601847208524483">Find next</translation>
+<translation id="6460601847208524483">Find Next</translation>
<translation id="6461170143930046705">Searching for networks...</translation>
<translation id="6463795194797719782">&amp;Edit</translation>
<translation id="6464825623202322042">This device</translation>
@@ -5997,7 +5997,7 @@ You can assign multiple switches to this action.</translation>
<translation id="686609795364435700">Quiet</translation>
<translation id="686664946474413495">Colour temperature</translation>
<translation id="6867086642466184030">Other apps are set to open the same links as <ph name="APP_NAME" />. This will disable <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, <ph name="APP_NAME_4" /> and <ph name="NUMBER_OF_OTHER_APPS" /> other apps from opening supported links.</translation>
-<translation id="6867400383614725881">New Incognito tab</translation>
+<translation id="6867400383614725881">New incognito tab</translation>
<translation id="6868934826811377550">See details.</translation>
<translation id="6871644448911473373">OCSP Responder: <ph name="LOCATION" /></translation>
<translation id="6872781471649843364">The password that you entered was rejected by the server.</translation>
@@ -7698,7 +7698,7 @@ Keep your key file in a safe place. You will need it to create new versions of y
<translation id="8571213806525832805">Last 4 weeks</translation>
<translation id="8571687764447439720">Add Kerberos ticket</translation>
<translation id="8574990355410201600">Always allow sound on <ph name="HOST" /></translation>
-<translation id="8575286410928791436">Hold <ph name="KEY_EQUIVALENT" /> to quit</translation>
+<translation id="8575286410928791436">Hold <ph name="KEY_EQUIVALENT" /> to Quit</translation>
<translation id="8576885347118332789">{NUM_TABS,plural, =1{Add tab to reading list}other{Add tabs to reading list}}</translation>
<translation id="8578639784464423491">Cannot exceed 99 letters</translation>
<translation id="857943718398505171">Allowed (recommended)</translation>
@@ -8041,7 +8041,7 @@ Keep your key file in a safe place. You will need it to create new versions of y
<translation id="8893928184421379330">Sorry, the device <ph name="DEVICE_LABEL" /> could not be recognised.</translation>
<translation id="8894761918470382415">Data access protection for peripherals</translation>
<translation id="8895454554629927345">Bookmark list</translation>
-<translation id="8898786835233784856">Select next tab</translation>
+<translation id="8898786835233784856">Select Next Tab</translation>
<translation id="8898822736010347272">Sends URLs of some pages that you visit, limited system information and some page content to Google, to help discover new threats and protect everyone on the web.</translation>
<translation id="8899851313684471736">Open link in new &amp;window</translation>
<translation id="8900413463156971200">Enable mobile</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_es-419.xtb b/chromium/chrome/app/resources/generated_resources_es-419.xtb
index dd4a406234d..ef438d41506 100644
--- a/chromium/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chromium/chrome/app/resources/generated_resources_es-419.xtb
@@ -205,7 +205,7 @@
<translation id="1193927020065025187">Es posible que este sitio esté intentando engañarte para que permitas notificaciones intrusivas</translation>
<translation id="1195210374336998651">Ir a la configuración de la app</translation>
<translation id="1195447618553298278">Error desconocido.</translation>
-<translation id="1195558154361252544">Se bloquearon automáticamente las notificaciones para todos los sitios, excepto en los sitios en que las permites</translation>
+<translation id="1195558154361252544">Las notificaciones se bloquean automáticamente en todos los sitios, excepto en los que las permites</translation>
<translation id="1197088940767939838">Naranja</translation>
<translation id="1197199342062592414">Comencemos</translation>
<translation id="1197935538609051549">Desactivar</translation>
@@ -322,7 +322,7 @@
<translation id="1317637799698924700">La estación de conectores funcionará en modo compatible con USB tipo C.</translation>
<translation id="1319983966058170660">Botón para volver de la subpágina <ph name="SUBPAGE_TITLE" /></translation>
<translation id="1322046419516468189">Consulta y administra las contraseñas guardadas en tu <ph name="SAVED_PASSWORDS_STORE" /></translation>
-<translation id="1324106254079708331">Protege las cuentas personales de Google de los usuarios que estén en riesgo de sufrir ataques dirigidos</translation>
+<translation id="1324106254079708331">Protege las cuentas personales de Google de los usuarios que estén en riesgo de sufrir ataques dirigidos.</translation>
<translation id="1326317727527857210">Accede a Chrome para obtener las pestañas de tus otros dispositivos.</translation>
<translation id="1327272175893960498">Tickets de Kerberos</translation>
<translation id="1327495825214193325">Para habilitar la depuración de adb, es necesario restablecer este dispositivo <ph name="DEVICE_TYPE" />. Si quieres inhabilitarla, deberás restablecer la configuración de fábrica.</translation>
@@ -1959,7 +1959,7 @@ y Ctrl + Alt + Disminuir brillo para alejar.</translation>
<translation id="2836635946302913370">El administrador ha inhabilitado el inicio de sesión para este nombre de usuario.</translation>
<translation id="283669119850230892">Para utilizar la red <ph name="NETWORK_ID" />, primero debes establecer la conexión a Internet que se especifica a continuación.</translation>
<translation id="2838379631617906747">Instalando</translation>
-<translation id="2839032553903800133">Se bloquearon las notificaciones</translation>
+<translation id="2839032553903800133">Notificaciones bloqueadas</translation>
<translation id="2841013758207633010">Hora</translation>
<translation id="2841837950101800123">Proveedor</translation>
<translation id="2843560154284403323">Para finalizar la configuración de Linux, actualiza Chrome OS y vuelve a intentarlo.</translation>
@@ -2101,7 +2101,7 @@ y Ctrl + Alt + Disminuir brillo para alejar.</translation>
<translation id="2966937470348689686">Administrar las preferencias de Android</translation>
<translation id="2967926928600500959">Se forzará la apertura de las URLs que coincidan con estas reglas en un navegador específico.</translation>
<translation id="2972581237482394796">&amp;Rehacer</translation>
-<translation id="2973324205039581528">Silenciar el sitio</translation>
+<translation id="2973324205039581528">Silenciar sitio</translation>
<translation id="2973537811036309675">Panel lateral</translation>
<translation id="2976557544729462544">En algunos dispositivos, debes inhabilitar la protección de acceso a los datos para que funcionen correctamente o con el máximo rendimiento.</translation>
<translation id="2977480621796371840">Quitar del grupo</translation>
@@ -2613,7 +2613,7 @@ y Ctrl + Alt + Disminuir brillo para alejar.</translation>
<translation id="3503995387997205657">Puedes restablecer tus apps anteriores.</translation>
<translation id="3505030558724226696">Revocar el acceso al dispositivo</translation>
<translation id="3505100368357440862">Sugerencias de compra</translation>
-<translation id="3507132249039706973">Se activó la protección estándar</translation>
+<translation id="3507132249039706973">Se activó la protección estándar.</translation>
<translation id="3507421388498836150">Permisos actuales para "<ph name="EXTENSION_NAME" />"</translation>
<translation id="3507888235492474624">Vuelve a buscar dispositivos Bluetooth</translation>
<translation id="3508492320654304609">No se pudieron borrar tus datos de acceso</translation>
@@ -3437,7 +3437,7 @@ y Ctrl + Alt + Disminuir brillo para alejar.</translation>
<translation id="4312701113286993760">{COUNT,plural, =1{1 Cuenta de Google}other{<ph name="EXTRA_ACCOUNTS" /> Cuentas de Google}}</translation>
<translation id="4312866146174492540">Bloquear (predeterminado)</translation>
<translation id="4314497418046265427">Conecta tu teléfono a <ph name="DEVICE_TYPE" /> para mejorar tu productividad</translation>
-<translation id="4314815835985389558">Administrar la sincronización</translation>
+<translation id="4314815835985389558">Administrar sincronización</translation>
<translation id="4315933848520197627">Desvincular cuenta</translation>
<translation id="4316850752623536204">Sitio web del programador</translation>
<translation id="4317820549299924617">No se completó la verificación</translation>
@@ -3862,7 +3862,7 @@ y Ctrl + Alt + Disminuir brillo para alejar.</translation>
<translation id="4742334355511750246">No puede mostrar imágenes</translation>
<translation id="4742970037960872810">Dejar de destacar</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Obtener información sobre cómo actualizar las aplicaciones<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{Activar el sonido del sitio}other{Activar el sonido de los sitios}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{Activar sonido del sitio}other{Activar sonido de los sitios}}</translation>
<translation id="474609389162964566">Accede a tu Asistente con "Hey Google"</translation>
<translation id="4746351372139058112">Mensajes</translation>
<translation id="4748783296226936791">Por lo general, los sitios se conectan a dispositivos HID para usarlos en funciones que utilizan teclados poco habituales, controles de juegos y otros dispositivos.</translation>
@@ -4086,7 +4086,7 @@ y Ctrl + Alt + Disminuir brillo para alejar.</translation>
<translation id="4972129977812092092">Editar impresora</translation>
<translation id="4972164225939028131">Contraseña incorrecta</translation>
<translation id="4972737347717125191">Permitir que los sitios soliciten permiso para usar datos y dispositivos de realidad virtual</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Silenciar el sitio}other{Silenciar los sitios}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Silenciar sitio}other{Silenciar sitios}}</translation>
<translation id="497403230787583386">Se completaron los controles de seguridad. Se imprimirá el documento.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Confirmar acceso</translation>
@@ -4657,7 +4657,7 @@ Puedes asignar varios interruptores a esta acción.</translation>
<translation id="5554720593229208774">Entidad de certificación de correo electrónico</translation>
<translation id="5555363196923735206">Girar cámara</translation>
<translation id="5555525474779371165">Elige tu protección de Navegación segura</translation>
-<translation id="5556459405103347317">Cargar de nuevo</translation>
+<translation id="5556459405103347317">Volver a cargar</translation>
<translation id="5558125320634132440">Se bloqueó este sitio porque puede incluir contenido para mayores de edad</translation>
<translation id="5558129378926964177">Acercar</translation>
<translation id="55601339223879446">Ajustar los límites de tu escritorio en la pantalla</translation>
@@ -5171,7 +5171,7 @@ Puedes asignar varios interruptores a esta acción.</translation>
<translation id="6077189836672154517">Sugerencias y actualizaciones para <ph name="DEVICE_TYPE" /></translation>
<translation id="6077476112742402730">Hablar para escribir</translation>
<translation id="6078121669093215958">{0,plural, =1{Invitado}other{# ventanas de invitado abiertas}}</translation>
-<translation id="6078323886959318429">Agregar un acceso directo</translation>
+<translation id="6078323886959318429">Agregar acceso directo</translation>
<translation id="6078752646384677957">Comprueba el micrófono y los niveles de audio.</translation>
<translation id="6078769373519310690">"<ph name="CHROME_EXTENSION_NAME" />" quiere conectarse a un dispositivo HID</translation>
<translation id="608029822688206592">No se encontraron redes. Inserta tu tarjeta SIM y vuelve a intentarlo.</translation>
@@ -5361,7 +5361,7 @@ Puedes asignar varios interruptores a esta acción.</translation>
<translation id="6266532094411434237">Conectando a <ph name="DEVICE" /></translation>
<translation id="6267166720438879315">Seleccionar un certificado para autenticarte como <ph name="HOST_NAME" /></translation>
<translation id="6268252012308737255">Abrir con <ph name="APP" /></translation>
-<translation id="6270391203985052864">Los sitios podrán preguntarte si quieres recibir notificaciones</translation>
+<translation id="6270391203985052864">Los sitios pueden preguntarte si quieres recibir notificaciones</translation>
<translation id="6270770586500173387">Enviar <ph name="BEGIN_LINK2" />métricas<ph name="END_LINK2" /> e <ph name="BEGIN_LINK1" />información de apps y el sistema<ph name="END_LINK1" /></translation>
<translation id="6271348838875430303">se deshizo la corrección</translation>
<translation id="6271780480930459892">Para obtener la nueva versión, comunícate con el administrador.</translation>
@@ -6055,7 +6055,7 @@ Puedes asignar varios interruptores a esta acción.</translation>
<translation id="6950627417367801484">Restablecer apps</translation>
<translation id="6952242901357037157">También puedes mostrar las contraseñas de tu <ph name="BEGIN_LINK" />Cuenta de Google<ph name="END_LINK" /> aquí</translation>
<translation id="6955446738988643816">Inspeccionar ventana emergente</translation>
-<translation id="6955535239952325894">Esta configuración está inhabilitada en navegadores administrados</translation>
+<translation id="6955535239952325894">Esta configuración está inhabilitada en navegadores administrados.</translation>
<translation id="6955698182324067397">Estás habilitando las funciones de depuración del Chrome OS que configurarán el daemon sshd y habilitarán el inicio desde unidades USB.</translation>
<translation id="6955893174999506273">Asignar 1 interruptor más</translation>
<translation id="6957044667612803194">Esta llave de seguridad no es compatible con los PIN</translation>
@@ -6067,7 +6067,7 @@ Puedes asignar varios interruptores a esta acción.</translation>
<translation id="6965382102122355670">Aceptar</translation>
<translation id="6965648386495488594">Puerto</translation>
<translation id="6965978654500191972">Dispositivo</translation>
-<translation id="6966370001499648704">Controla qué teléfonos usas como llaves de seguridad</translation>
+<translation id="6966370001499648704">Controla qué teléfonos usas como llaves de seguridad.</translation>
<translation id="6967430741871315905">No se pudo comprobar si el dispositivo está habilitado</translation>
<translation id="696780070563539690">Los sitios no pueden usar tus cookies para ver la actividad de navegación en diferentes sitios, por ejemplo, con el fin de personalizar anuncios</translation>
<translation id="6968288415730398122">Ingresa tu contraseña para configurar el bloqueo de pantalla</translation>
@@ -8321,7 +8321,7 @@ Mantén el archivo de clave en un lugar seguro. Debes crear las nuevas versiones
<translation id="9199503643457729322">Haz clic para salir de la Guía de privacidad.</translation>
<translation id="9200339982498053969"><ph name="ORIGIN" /> podrá editar los archivos de la carpeta <ph name="FOLDERNAME" /></translation>
<translation id="920045321358709304">Buscar en <ph name="SEARCH_ENGINE" /></translation>
-<translation id="9201023452444595544">Se borrarán los datos sin conexión</translation>
+<translation id="9201023452444595544">Se borrarán los datos sin conexión.</translation>
<translation id="9201117361710210082">Visto anteriormente</translation>
<translation id="9201220332032049474">Opciones de bloqueo de pantalla</translation>
<translation id="9201842707396338580">Se produjo un error. Comunícate con el administrador o el propietario de tu dispositivo. Código de error: <ph name="ERROR_CODE" />.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_es.xtb b/chromium/chrome/app/resources/generated_resources_es.xtb
index 6d7a3114f54..cbde791702a 100644
--- a/chromium/chrome/app/resources/generated_resources_es.xtb
+++ b/chromium/chrome/app/resources/generated_resources_es.xtb
@@ -365,7 +365,7 @@
<translation id="1363585519747660921">Es necesario configurar la impresora USB</translation>
<translation id="1367951781824006909">Selecciona un archivo</translation>
<translation id="1369149969991017342">Accesibilidad con interruptores (controla el ordenador con uno o dos interruptores)</translation>
-<translation id="1371863479305430391">Consulta, cierra y responde a notificaciones de tu teléfono. Emite aplicaciones de mensajería de tu teléfono.</translation>
+<translation id="1371863479305430391">Consulta, descarta y responde notificaciones de tu teléfono. Proyecta aplicaciones de mensajería de tu teléfono.</translation>
<translation id="1372841398847029212">Sincronizar con tu cuenta</translation>
<translation id="1373176046406139583">La visibilidad de tu dispositivo determina quién puede compartir archivos contigo mientras tu pantalla está desbloqueada. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
<translation id="1374844444528092021">El certificado requerido por la red "<ph name="NETWORK_NAME" />" no está instalado o ya no es válido. Consigue un nuevo certificado y prueba a conectarte de nuevo.</translation>
@@ -707,7 +707,7 @@ Los permisos que hayas dado a aplicaciones se pueden aplicar a esta cuenta. Pued
<translation id="1668979692599483141">Información sobre sugerencias</translation>
<translation id="1670399744444387456">Básico</translation>
<translation id="1673137583248014546"><ph name="URL" /> quiere ver la marca y el modelo de tu llave de seguridad</translation>
-<translation id="1674073353928166410">Abrir todas (<ph name="URL_COUNT" />) en una ventana de incógnito</translation>
+<translation id="1674073353928166410">Abrir todas (<ph name="URL_COUNT" />) en una ventana de Incógnito</translation>
<translation id="1677306805708094828">No se ha podido añadir <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
<translation id="1677472565718498478">Queda: <ph name="TIME" /></translation>
<translation id="1679068421605151609">Herramientas para desarrolladores</translation>
@@ -716,7 +716,7 @@ Los permisos que hayas dado a aplicaciones se pueden aplicar a esta cuenta. Pued
<translation id="1680841347983561661">Intenta iniciar Google Play de nuevo dentro de unos minutos.</translation>
<translation id="1680849702532889074">No se ha podido instalar la aplicación de Linux.</translation>
<translation id="16815041330799488">No permitir que los sitios vean el texto y las imágenes que se hayan copiado en el portapapeles</translation>
-<translation id="1682548588986054654">Nueva ventana de incógnito</translation>
+<translation id="1682548588986054654">Nueva ventana de Incógnito</translation>
<translation id="1682867089915960590">¿Activar navegación por cursor de texto?</translation>
<translation id="1684279041537802716">Color para destacar</translation>
<translation id="168511795252678620">Fotos y aplicaciones de mensajería recientes</translation>
@@ -867,7 +867,7 @@ Los permisos que hayas dado a aplicaciones se pueden aplicar a esta cuenta. Pued
<translation id="1817871734039893258">Recuperación de archivos de Microsoft</translation>
<translation id="1818007989243628752">Eliminar la contraseña de <ph name="USERNAME" /></translation>
<translation id="1818913467757368489">Se está subiendo el registro.</translation>
-<translation id="1819443852740954262">Abrir todas en una ventana de incógnito</translation>
+<translation id="1819443852740954262">Abrir todas en una ventana de Incógnito</translation>
<translation id="1819721979226826163">Toca Notificaciones de aplicaciones &gt; Servicios de Google Play.</translation>
<translation id="1820028137326691631">Introduce la contraseña proporcionada por el administrador</translation>
<translation id="1822140782238030981">¿Ya utilizas Chrome? Inicia sesión</translation>
@@ -1108,7 +1108,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="2059913712424898428">Zona horaria</translation>
<translation id="2060375639911876205">Quitar perfil de eSIM</translation>
<translation id="2061366302742593739">Nada que mostrar</translation>
-<translation id="2062354623176996748">Navega por Internet sin guardar tu historial de navegación con una ventana de incógnito</translation>
+<translation id="2062354623176996748">Navega por Internet sin guardar tu historial de navegación con una ventana de Incógnito</translation>
<translation id="2065405795449409761">Un software automatizado de pruebas está controlando Chrome.</translation>
<translation id="2071393345806050157">No hay ningún archivo de registro local.</translation>
<translation id="2071692954027939183">Se han bloqueado automáticamente las notificaciones porque no las sueles permitir.</translation>
@@ -1317,7 +1317,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="2249605167705922988">p. ej. 1-5, 8, 11-13</translation>
<translation id="2251218783371366160">Abrir con visor del sistema</translation>
<translation id="225163402930830576">Actualizar redes</translation>
-<translation id="2251809247798634662">Nueva ventana de incógnito</translation>
+<translation id="2251809247798634662">Nueva ventana de Incógnito</translation>
<translation id="225240747099314620">Permitir identificadores para contenido protegido (es posible que sea necesario reiniciar el ordenador)</translation>
<translation id="2255077166240162850">Este dispositivo ha sido bloqueado en un dominio o modo diferente.</translation>
<translation id="2255317897038918278">Impresión de fecha de Microsoft</translation>
@@ -2023,7 +2023,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="2893180576842394309">Es posible que Google utilice tu historial para personalizar la Búsqueda y otros servicios de Google</translation>
<translation id="2894757982205307093">Nueva pestaña en grupo</translation>
<translation id="289695669188700754">ID de clave: <ph name="KEY_ID" /></translation>
-<translation id="2897713966423243833">Este ajuste personalizado se quitará cuando cierres todas tus ventanas de incógnito</translation>
+<translation id="2897713966423243833">Este ajuste personalizado se quitará cuando cierres todas tus ventanas de Incógnito</translation>
<translation id="2897878306272793870">¿Seguro que quieres abrir <ph name="TAB_COUNT" /> pestañas?</translation>
<translation id="2900477968385519153">Buscar en la pantalla con <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
<translation id="290105521672621980">El archivo utiliza funciones no admitidas</translation>
@@ -2104,7 +2104,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="2966937470348689686">Gestionar preferencias de Android</translation>
<translation id="2967926928600500959">Las URLs que se correspondan con estas reglas serán forzadas a abrirse en un navegador concreto.</translation>
<translation id="2972581237482394796">&amp;Rehacer</translation>
-<translation id="2973324205039581528">Silenciar sitio web</translation>
+<translation id="2973324205039581528">Silenciar sitio</translation>
<translation id="2973537811036309675">Panel lateral</translation>
<translation id="2976557544729462544">Algunos dispositivos necesitan que inhabilites la protección de acceso a datos para funcionar adecuadamente o al máximo rendimiento.</translation>
<translation id="2977480621796371840">Quitar del grupo</translation>
@@ -2261,7 +2261,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="3129215702932019810">No se ha podido ejecutar la aplicación</translation>
<translation id="3130528281680948470">Tu dispositivo se restablecerá y se eliminarán todas las cuentas de usuario y todos los datos locales. Esta acción no se puede deshacer.</translation>
<translation id="313205617302240621">¿Has olvidado tu contraseña?</translation>
-<translation id="3132277757485842847">No se ha podido mantener la conexión con tu teléfono. Comprueba que tengas el teléfono cerca, que esté desbloqueado y que las conexiones Bluetooth y Wi‑Fi estén activadas.</translation>
+<translation id="3132277757485842847">No se ha podido mantener la conexión con tu teléfono. Asegúrate de que tengas el teléfono cerca, de que esté desbloqueado y de que el Bluetooth y el Wi‑Fi estén activados.</translation>
<translation id="3132896062549112541">Regla</translation>
<translation id="3132996321662585180">Actualizar todos los días</translation>
<translation id="3134393957315651797">Selecciona el estado del experimento <ph name="EXPERIMENT_NAME" />. Descripción del experimento: <ph name="EXPERIMENT_DESCRIPTION" /></translation>
@@ -2281,7 +2281,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="3151562827395986343">Borra el historial, las cookies, la caché y mucho más</translation>
<translation id="3151616662954589507">Cámara frontal</translation>
<translation id="3151786313568798007">Orientación</translation>
-<translation id="3152356229013609796">Consulta, cierra y responde a notificaciones de tu teléfono</translation>
+<translation id="3152356229013609796">Consulta, descarta y responde notificaciones de tu teléfono</translation>
<translation id="3157387275655328056">Añadir a lista de lectura</translation>
<translation id="3157931365184549694">Restaurar</translation>
<translation id="3158033540161634471">Configura la huella digital</translation>
@@ -2641,7 +2641,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="3526034519184079374">No se pueden leer ni cambiar los datos del sitio web</translation>
<translation id="3527085408025491307">Carpeta</translation>
<translation id="3528498924003805721">Accesos directos</translation>
-<translation id="3531383404180922673">Consulta fotos, contenido multimedia y notificaciones recientes de tu teléfono. Emite aplicaciones de mensajería de tu teléfono.</translation>
+<translation id="3531383404180922673">Consulta fotos, contenido multimedia y notificaciones recientes de tu teléfono. Proyecta aplicaciones de mensajería de tu teléfono.</translation>
<translation id="3532273508346491126">Gestión de sincronización</translation>
<translation id="3532521178906420528">Estableciendo conexión de red...</translation>
<translation id="353316712352074340"><ph name="WINDOW_TITLE" />: audio silenciado</translation>
@@ -2681,7 +2681,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="3569407787324516067">Salvapantallas</translation>
<translation id="3569682580018832495"><ph name="ORIGIN" /> puede ver los siguientes archivos y carpetas:</translation>
<translation id="3571734092741541777">Configurar</translation>
-<translation id="3575121482199441727">Permitir para este sitio web</translation>
+<translation id="3575121482199441727">Permitir en este sitio web</translation>
<translation id="3577745545227000795">Recogida de datos de hardware de <ph name="DEVICE_OS" /></translation>
<translation id="3578594933904494462">Se está compartiendo el contenido de esta pestaña.</translation>
<translation id="3578874072190212775">Ayuda a los sitios a luchar contra el fraude y a distinguir a los bots de las personas</translation>
@@ -3016,7 +3016,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="3888586133700543064">Esta información nos ayudará a entender mejor tu problema con el Asistente. Se almacena durante un máximo de 90 días y solo podrán acceder a estos datos los equipos correspondientes de ingeniería y sugerencias.</translation>
<translation id="3890064827463908288">Activa la Sincronización de Chrome para usar la Sincronización Wi‑Fi</translation>
<translation id="389313931326656921">Asignar interruptor para "Siguiente"</translation>
-<translation id="3893295674388762059">Para borrar los datos, cierra todas las ventanas de incógnito</translation>
+<translation id="3893295674388762059">Para borrar los datos, cierra todas las ventanas de Incógnito</translation>
<translation id="3893536212201235195">Leer y cambiar tu configuración de accesibilidad</translation>
<translation id="3893630138897523026">ChromeVox (conversión de texto a voz)</translation>
<translation id="3893764153531140319"><ph name="DOWNLOADED_SIZE" />/<ph name="DOWNLOAD_SIZE" /></translation>
@@ -3685,7 +3685,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="4562155214028662640">Añadir huella digital</translation>
<translation id="4563210852471260509">El lenguaje de entrada inicial es el chino.</translation>
<translation id="4563880231729913339">Dedo 3</translation>
-<translation id="4564245002465020751">Termina de configurar tu teléfono</translation>
+<translation id="4564245002465020751">Termina la configuración en tu teléfono</translation>
<translation id="4565377596337484307">Ocultar contraseña</translation>
<translation id="4565917129334815774">Almacenar registros del sistema</translation>
<translation id="4566170377336116390">Si quieres cambiarlo después de registrarte, tendrás que restablecer el estado de fábrica (Powerwash) de tu dispositivo.</translation>
@@ -3864,7 +3864,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="4742334355511750246">No puede mostrar imágenes</translation>
<translation id="4742970037960872810">Eliminar resaltado</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Cómo actualizar aplicaciones<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{Activar sonido del sitio web}other{Activar sonido de los sitios}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{Activar sonido del sitio}other{Activar sonido de los sitios}}</translation>
<translation id="474609389162964566">Accede al Asistente diciendo "Hey Google"</translation>
<translation id="4746351372139058112">Mensajes</translation>
<translation id="4748783296226936791">Los sitios se suelen conectar a dispositivos HID para usarlos en funciones que utilizan teclados poco habituales, mandos de juegos y otros dispositivos</translation>
@@ -4088,7 +4088,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="4972129977812092092">Editar impresora</translation>
<translation id="4972164225939028131">Contraseña incorrecta</translation>
<translation id="4972737347717125191">Los sitios pueden solicitar permiso para utilizar datos y dispositivos de realidad virtual</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Silenciar sitio web}other{Silenciar sitios}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Silenciar sitio}other{Silenciar sitios}}</translation>
<translation id="497403230787583386">Se han realizado las comprobaciones de seguridad. El documento se imprimirá.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Confirmar acceso</translation>
@@ -4293,7 +4293,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="5191251636205085390">Más información sobre las nuevas tecnologías que aspiran a reemplazar las cookies de terceros y cómo controlarlas</translation>
<translation id="5192062846343383368">Abre la aplicación Family Link para ver la configuración de supervisión</translation>
<translation id="5193988420012215838">Se ha copiado al portapapeles</translation>
-<translation id="5194256020863090856">Esto solo afecta a las ventanas de incógnito</translation>
+<translation id="5194256020863090856">Esto solo afecta a las ventanas de Incógnito</translation>
<translation id="5195074424945754995">Las URLs que se correspondan con estas reglas no activarán ningún cambio de navegador y podrán abrirse en <ph name="BROWSER_NAME" /> o en <ph name="ALTERNATIVE_BROWSER_NAME" />.</translation>
<translation id="5195863934285556588"><ph name="BEGIN_PARAGRAPH1" />El servicio de ubicación de Google usa fuentes como redes Wi‑Fi o móviles y sensores para determinar la ubicación de este dispositivo.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Puedes desactivar la ubicación de Android en este dispositivo cuando quieras si vas a Ajustes &gt; Aplicaciones &gt; Google Play Store &gt; Gestionar preferencias de Android &gt; Seguridad y ubicación &gt; Ubicación. También puedes desactivar el uso de redes Wi‑Fi o móviles y sensores para determinar la ubicación de Android si desactivas Precisión de la ubicación de Google en el mismo menú.<ph name="END_PARAGRAPH2" /></translation>
@@ -4438,7 +4438,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami
<translation id="5336688142483283574">Esta página también se eliminará del historial y de la actividad de <ph name="SEARCH_ENGINE" />.</translation>
<translation id="5337771866151525739">Instalada por una aplicación externa</translation>
<translation id="5337926771328966926">El nombre actual del dispositivo es <ph name="DEVICE_NAME" /></translation>
-<translation id="5338338064218053691">Puedes navegar en privado con una ventana de incógnito</translation>
+<translation id="5338338064218053691">Puedes navegar en privado con una ventana de Incógnito</translation>
<translation id="5338503421962489998">Almacenamiento local</translation>
<translation id="5339031667684712858">Sitios que has eliminado</translation>
<translation id="5340638867532133571">Permitir a los sitios instalar controladores de pago (recomendado)</translation>
@@ -5178,7 +5178,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="6078769373519310690">"<ph name="CHROME_EXTENSION_NAME" />" solicita conectarse a un dispositivo HID</translation>
<translation id="608029822688206592">No se ha encontrado ninguna red. Inserta tu tarjeta SIM y vuelve a intentarlo.</translation>
<translation id="6080689532560039067">Comprueba la hora del sistema</translation>
-<translation id="6082877069782862752">Mapeo de teclas</translation>
+<translation id="6082877069782862752">Asignación de teclas</translation>
<translation id="608531959444400877"><ph name="WINDOW_TITLE" />: parte de un grupo sin nombre</translation>
<translation id="6085886413119427067">Determina cómo conectarse a sitios web mediante una conexión segura</translation>
<translation id="6086004606538989567">La cuenta que has verificado no tiene autorización para acceder a este dispositivo.</translation>
@@ -5662,12 +5662,12 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="6555432686520421228">Elimina todas las cuentas de usuario y restablece tu dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /> como si lo acabaras de comprar.</translation>
<translation id="6555604601707417276">Copia de seguridad de Linux restaurada</translation>
<translation id="6555810572223193255">No se puede eliminar en este momento</translation>
-<translation id="6556477848444788999">El PIN o la contraseña protegerán tus datos en este <ph name="DEVICE_TYPE" />, incluido cualquier contenido que veas en streaming desde tu teléfono.</translation>
+<translation id="6556477848444788999">Este PIN o contraseña protegerán los datos que tengas en este <ph name="DEVICE_TYPE" />, incluido cualquier contenido que proyectes desde tu teléfono.</translation>
<translation id="6556866813142980365">Rehacer</translation>
<translation id="6556903358015358733">Tema y fondo de pantalla</translation>
<translation id="6557290421156335491">Mis accesos directos</translation>
<translation id="6560151649238390891">Sugerencia insertada</translation>
-<translation id="6561560012278703671">Usar notificaciones más discretas (bloquea las notificaciones emergentes para evitar interrupciones)</translation>
+<translation id="6561560012278703671">Usar notificaciones más discretas (bloquea las notificaciones emergentes para que no te interrumpan)</translation>
<translation id="6561726789132298588">intro</translation>
<translation id="6562117348069327379">Almacena registros del sistema en el directorio Descargas.</translation>
<translation id="656293578423618167">La ruta o el nombre del archivo es demasiado largo. Especifica un nombre más corto o guarda el archivo en otra ubicación.</translation>
@@ -5758,7 +5758,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="6651495917527016072">Sincroniza redes Wi‑Fi con tu teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
<translation id="665355505818177700">La integración de <ph name="MS_AD_NAME" /> con Chrome solo se admite en plataformas x86_64. Los Chromebooks basados en una plataforma ARM o x86 no admiten esta función.</translation>
<translation id="6654509035557065241">Establecer como red preferida</translation>
-<translation id="6655190889273724601">Modo de desarrollador</translation>
+<translation id="6655190889273724601">Modo Desarrollador</translation>
<translation id="6655458902729017087">Ocultar cuentas</translation>
<translation id="6657585470893396449">Contraseña</translation>
<translation id="6659213950629089752">Esta página fue ampliada por la extensión <ph name="NAME" /></translation>
@@ -5904,7 +5904,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="6808039367995747522">Para seguir, inserta y toca tu llave de seguridad</translation>
<translation id="6808166974213191158">Escritor de imágenes del sistema de ChromeOS Flex</translation>
<translation id="6808193438228982088">Zorro</translation>
-<translation id="6809470175540814047">Abrir en una ventana de incógnito</translation>
+<translation id="6809470175540814047">Abrir en una ventana de Incógnito</translation>
<translation id="6809656734323672573">Si aceptas, el Asistente de Google permanecerá en modo inactivo para detectar el comando "Hey Google" y podrá reconocer tu voz con Voice Match.
<ph name="BR" />
Con Voice Match, el Asistente puede reconocer tu voz y diferenciarla de otras. Lo consigue utilizando grabaciones de tu voz para crear un modelo de voz único que solo se almacena en tu dispositivo. Puede que tu modelo de voz se envíe temporalmente a Google para identificar mejor tu voz.
@@ -6090,7 +6090,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="6979158407327259162">Google Drive</translation>
<translation id="6979440798594660689">Silenciar (predeterminado)</translation>
<translation id="6979737339423435258">Desde siempre</translation>
-<translation id="6981553172137913845">Para navegar en privado, haz clic en el icono de puntos y abre una ventana de incógnito</translation>
+<translation id="6981553172137913845">Para navegar en privado, haz clic en el icono de puntos y abre una ventana de Incógnito</translation>
<translation id="6981761993313539853">Comprueba que tu dispositivo Bluetooth esté cerca y en modo Emparejamiento. Emparéjalo solo con dispositivos de confianza. <ph name="BEGIN_LINK_LEARN_MORE" />Más información<ph name="END_LINK_LEARN_MORE" /></translation>
<translation id="6981982820502123353">Accesibilidad</translation>
<translation id="6983507711977005608">Desconectar red de conexión compartida instantánea</translation>
@@ -6173,7 +6173,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="7053983685419859001">Bloquear</translation>
<translation id="7055152154916055070">Redirección bloqueada:</translation>
<translation id="7055451306017383754">No se ha podido dejar de compartir esta carpeta porque una aplicación está usándola. La carpeta dejará de compartirse la próxima vez que se apague Parallels Desktop.</translation>
-<translation id="7056418393177503237">{0,plural, =1{Incógnito}other{# ventanas de incógnito abiertas}}</translation>
+<translation id="7056418393177503237">{0,plural, =1{Incógnito}other{# ventanas de Incógnito abiertas}}</translation>
<translation id="7056526158851679338">&amp;Inspeccionar dispositivos</translation>
<translation id="7057184853669165321">{NUM_MINS,plural, =1{La comprobación de seguridad se ha realizado hace 1 minuto}other{La comprobación de seguridad se ha realizado hace {NUM_MINS} minutos}}</translation>
<translation id="7057767408836081338">No se han podido obtener datos de la aplicación. Intentando ejecutarla de todos modos...</translation>
@@ -6322,7 +6322,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="7228523857728654909">Bloqueo de pantalla e inicio de sesión</translation>
<translation id="7230222852462421043">&amp;Restaurar ventana</translation>
<translation id="7230787553283372882">Personalizar el tamaño del texto</translation>
-<translation id="7231260028442989757">Consulta, cierra y responde a notificaciones de tu teléfono</translation>
+<translation id="7231260028442989757">Consulta, descarta y responde notificaciones de tu teléfono</translation>
<translation id="7232750842195536390">No se ha podido cambiar el nombre</translation>
<translation id="723343421145275488">Buscar imágenes con <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
<translation id="7234010996000898150">Cancelando restauración de Linux</translation>
@@ -6534,7 +6534,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="744341768939279100">Crear un nuevo perfil</translation>
<translation id="744366959743242014">Se están cargando los datos. Este proceso puede tardar unos segundos.</translation>
<translation id="7443806024147773267">Accede cuando quieras a tus contraseñas con tu cuenta de Google</translation>
-<translation id="7444970023873202833">Explora más recuerdos en Google Fotos</translation>
+<translation id="7444970023873202833">Revive más recuerdos en Google Fotos</translation>
<translation id="7444983668544353857">Inhabilitar <ph name="NETWORKDEVICE" /></translation>
<translation id="7448430327655618736">Instalar aplicaciones automáticamente</translation>
<translation id="7449752890690775568">¿Quitar la contraseña?</translation>
@@ -6654,7 +6654,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits):
<translation id="7562099761826673163">Personaliza tu dispositivo</translation>
<translation id="756445078718366910">Abrir ventana del navegador</translation>
<translation id="7564847347806291057">Finalizar proceso</translation>
-<translation id="756503097602602175">Puedes gestionar las cuentas de Google con las que se haya iniciado sesión en <ph name="LINK_BEGIN" />Configuración<ph name="LINK_END" />. Es posible que los permisos que hayas dado a sitios web y aplicaciones se apliquen a todas las cuentas. Si no quieres que los sitios ni las aplicaciones accedan a la información de tu cuenta, puedes iniciar sesión en tu <ph name="DEVICE_TYPE" /> como invitado o navegar por Internet en una <ph name="LINK_2_BEGIN" />ventana de incógnito<ph name="LINK_2_END" />.</translation>
+<translation id="756503097602602175">Puedes gestionar las cuentas de Google con las que se haya iniciado sesión en <ph name="LINK_BEGIN" />Configuración<ph name="LINK_END" />. Es posible que los permisos que hayas dado a sitios web y aplicaciones se apliquen a todas las cuentas. Si no quieres que los sitios ni las aplicaciones accedan a la información de tu cuenta, puedes iniciar sesión en tu <ph name="DEVICE_TYPE" /> como invitado o navegar por Internet en una <ph name="LINK_2_BEGIN" />ventana de Incógnito<ph name="LINK_2_END" />.</translation>
<translation id="7566118625369982896">Gestionar enlaces de aplicaciones de Play</translation>
<translation id="756809126120519699">Datos de Chrome borrados</translation>
<translation id="756876171895853918">Personalizar avatar</translation>
@@ -7277,7 +7277,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="8141725884565838206">Administra tus contraseñas</translation>
<translation id="814204052173971714">{COUNT,plural, =1{un vídeo}other{# vídeos}}</translation>
<translation id="8143442547342702591">La aplicación no es válida</translation>
-<translation id="8143475123634606318">Emite aplicaciones de mensajería de tu teléfono</translation>
+<translation id="8143475123634606318">Proyecta aplicaciones de mensajería de tu teléfono</translation>
<translation id="8143609395536282994">Cómo puedes gestionar tus datos:</translation>
<translation id="8143951647992294073">Seleccionar <ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" /></translation>
<translation id="8146177459103116374">Si ya te has registrado en este dispositivo, puedes <ph name="LINK2_START" />iniciar sesión con tu nombre de usuario<ph name="LINK2_END" />.</translation>
@@ -7403,7 +7403,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="8264024885325823677">Este ajuste lo gestiona tu administrador.</translation>
<translation id="8264718194193514834"><ph name="EXTENSION_NAME" /> ha activado el modo de pantalla completa.</translation>
<translation id="826511437356419340">Se ha cambiado al modo de vista general de ventanas. Desliza el dedo para desplazarte o pulsa el tabulador si estás utilizando un teclado.</translation>
-<translation id="8265671588726449108">{COUNT,plural, =1{1 ventana de incógnito no se abrirá después de reiniciar}other{{COUNT} ventanas de incógnito no se volverán a abrir después de reiniciar}}</translation>
+<translation id="8265671588726449108">{COUNT,plural, =1{1 ventana de Incógnito no se abrirá después de reiniciar}other{{COUNT} ventanas de Incógnito no se volverán a abrir después de reiniciar}}</translation>
<translation id="8266947622852630193">Todos los métodos de introducción de texto</translation>
<translation id="8267539814046467575">Añadir impresora</translation>
<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Estos datos incluyen información general sobre tu dispositivo y sobre cómo lo usas (como el nivel de batería, la actividad de las aplicaciones y del sistema, y los errores). Sirven para mejorar Android, y parte de los datos recogidos también ayudan a las aplicaciones y partners de Google, como los desarrolladores de Android, a mejorar sus productos y aplicaciones.<ph name="END_PARAGRAPH1" />
@@ -7435,7 +7435,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="8289509909262565712">Te damos la bienvenida a <ph name="DEVICE_OS" /></translation>
<translation id="8293206222192510085">Añadir marcador</translation>
<translation id="8294431847097064396">Origen</translation>
-<translation id="8298429963694909221">Ahora puedes recibir notificaciones de tu teléfono en tu <ph name="DEVICE_TYPE" />. Cuando cierres una notificación en tu <ph name="DEVICE_TYPE" />, también se cerrará en tu teléfono. Comprueba que tengas el teléfono cerca y que el Bluetooth y el Wi‑Fi estén activados.</translation>
+<translation id="8298429963694909221">Ahora puedes recibir notificaciones de tu teléfono en tu <ph name="DEVICE_TYPE" />. Cuando descartes una notificación en tu <ph name="DEVICE_TYPE" />, también se descartará en tu teléfono. Asegúrate de que tengas el teléfono cerca y de que el Bluetooth y el Wi‑Fi estén activados.</translation>
<translation id="8299319456683969623">Actualmente no tienes conexión.</translation>
<translation id="8300011035382349091">Editar marcador de esta pestaña</translation>
<translation id="8300374739238450534">Azul noche</translation>
@@ -7986,7 +7986,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="8863753581171631212">Abrir enlace en una ventana nueva de <ph name="APP" /></translation>
<translation id="8864055848767439877">Compartiendo <ph name="TAB_NAME" /> con <ph name="APP_NAME" /></translation>
<translation id="8864458770072227512">Se ha eliminado <ph name="EMAIL" /> del dispositivo</translation>
-<translation id="8865112428068029930">¿Usas un ordenador compartido? Prueba a abrir una ventana de incógnito.</translation>
+<translation id="8865112428068029930">¿Usas un ordenador compartido? Prueba a abrir una ventana de Incógnito.</translation>
<translation id="8867102760244540173">Buscar pestañas...</translation>
<translation id="8867228703146808825">Copiar detalles de compilación al portapapeles</translation>
<translation id="8868333925931032127">Iniciando modo Demo</translation>
@@ -8221,7 +8221,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="9094859731829297286">¿Seguro que quieres reservar un disco de tamaño fijo para Linux?</translation>
<translation id="9094982973264386462">Quitar</translation>
<translation id="9095253524804455615">Quitar</translation>
-<translation id="909554839118732438">Cerrar ventanas de incógnito</translation>
+<translation id="909554839118732438">Cerrar ventanas de Incógnito</translation>
<translation id="9100416672768993722">Para cambiar al último método de introducción de texto usado, pulsa <ph name="BEGIN_SHORTCUT" /><ph name="BEGIN_CTRL" />Ctrl<ph name="END_CTRL" /><ph name="SEPARATOR" /><ph name="BEGIN_SPACE" />Espacio<ph name="END_SPACE" /><ph name="END_SHORTCUT" /></translation>
<translation id="9100765901046053179">Configuración avanzada</translation>
<translation id="9101691533782776290">Iniciar aplicación</translation>
@@ -8317,7 +8317,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="9186963452600581158">Iniciar sesión con la cuenta de Google de un niño/a</translation>
<translation id="9187967020623675250">Las teclas no coinciden. Pulsa cualquier tecla para <ph name="RESPONSE" />.</translation>
<translation id="9188732951356337132">Enviar datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos recogidos también ayudarán a las aplicaciones y los colaboradores de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo. <ph name="BEGIN_LINK2" />Más información<ph name="END_LINK2" /></translation>
-<translation id="919679265671373777">Consulta fotos y contenido multimedia recientes de tu teléfono. Emite aplicaciones de mensajería de tu teléfono.</translation>
+<translation id="919679265671373777">Consulta fotos y contenido multimedia recientes de tu teléfono. Proyecta aplicaciones de mensajería de tu teléfono.</translation>
<translation id="919686179725692564">Más información sobre cómo crear una copia de seguridad de tus aplicaciones</translation>
<translation id="9198090666959937775">Usar un teléfono Android como llave de seguridad</translation>
<translation id="9199503643457729322">Haz clic para salir de la guía de privacidad.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_et.xtb b/chromium/chrome/app/resources/generated_resources_et.xtb
index 3e6d6a7b819..f739cd206a4 100644
--- a/chromium/chrome/app/resources/generated_resources_et.xtb
+++ b/chromium/chrome/app/resources/generated_resources_et.xtb
@@ -2287,7 +2287,7 @@ väljasuumimiseks klahvikombinatsiooni Ctrl + Alt + Ereduse vähendamine.</trans
<translation id="3151562827395986343">Ajaloo, küpsisefailide, vahemälu ja muu kustutamine</translation>
<translation id="3151616662954589507">Selfikaamera</translation>
<translation id="3151786313568798007">Suund</translation>
-<translation id="3152356229013609796">Vaadake oma telefoni märguandeid, loobuge neist ja vastake neile</translation>
+<translation id="3152356229013609796">Teie telefoni märguannete vaatamine, neist loobumine ja neile vastamine</translation>
<translation id="3157387275655328056">Lisa lugemisloendisse</translation>
<translation id="3157931365184549694">Taasta</translation>
<translation id="3158033540161634471">Sõrmejälje seadistamine</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_eu.xtb b/chromium/chrome/app/resources/generated_resources_eu.xtb
index 3bb13d525fe..420652ddafd 100644
--- a/chromium/chrome/app/resources/generated_resources_eu.xtb
+++ b/chromium/chrome/app/resources/generated_resources_eu.xtb
@@ -5487,7 +5487,7 @@ Txartel adimenduna sartuta edukitzea eskatzen du <ph name="DOMAIN" /> domeinuak.
<translation id="6388429472088318283">Bilatu hizkuntzak</translation>
<translation id="6388577073199278153">Ezin zara sartu mugikorreko kontuan</translation>
<translation id="6390020764191254941">Eraman fitxa leiho berri batera</translation>
-<translation id="6393156038355142111">Iradoki pasahitz seguru bat</translation>
+<translation id="6393156038355142111">Iradoki pasahitz konplexu bat</translation>
<translation id="6393550101331051049">Segurua ez den edukia erakuts dezakete</translation>
<translation id="6395423953133416962">Bidali <ph name="BEGIN_LINK1" />sistemari buruzko informazioa<ph name="END_LINK1" /> eta <ph name="BEGIN_LINK2" />estatistikak<ph name="END_LINK2" /></translation>
<translation id="6396175271241405634">Sistema-aplikazioa</translation>
@@ -6458,7 +6458,7 @@ Inoiz Voice Match erabiltzeari utzi nahi badiozu, ken ezazu Laguntzailea zerbitz
<translation id="737728204345822099">Baliteke webgune hau bisitatu izana erregistratzea segurtasun-giltzan.</translation>
<translation id="7377451353532943397">Jarraitu sentsoreetarako sarbidea blokeatzen</translation>
<translation id="7377481913241237033">Konektatu kode bat erabilita</translation>
-<translation id="7378611153938412599">Seguruak ez diren pasahitzak erraz asmatzen dira. Ziurtatu pasahitz seguruak sortzen dituzula. <ph name="BEGIN_LINK" />Ikusi segurtasun-aholku gehiago.<ph name="END_LINK" /></translation>
+<translation id="7378611153938412599">Seguruak ez diren pasahitzak erraz asmatzen dira. Ziurtatu pasahitz konplexuak sortzen dituzula. <ph name="BEGIN_LINK" />Ikusi segurtasun-aholku gehiago.<ph name="END_LINK" /></translation>
<translation id="73786666777299047">Ireki Chrome Web Store</translation>
<translation id="7380459290951585794">Ziurtatu telefonoa hurbil eta desblokeatuta dagoela, eta Bluetooth-a eta wifia aktibatuta dauzkala</translation>
<translation id="7380622428988553498">Balio ez duten karaktereak ditu gailuaren izenak</translation>
@@ -7099,7 +7099,7 @@ Esleipen bat kentzeko, berriz, sakatu esleipen bat daukan erabilerraztasun-eteng
<translation id="7974936243149753750">Bilatu gainetik</translation>
<translation id="7975504106303186033">Chrome Education-eko gailu hau G Suite for Education-eko kontu batekin erregistratu behar duzu. Beste kontu bat erregistratzeko, joan g.co/workspace/edusignup helbidera.</translation>
<translation id="7978412674231730200">Gako pribatua</translation>
-<translation id="7978450511781612192">Zure Google-ko kontuen saioa amaituko da. Aurrerantzean, ez dira sinkronizatuko laster-markak, historia, pasahitzak eta beste.</translation>
+<translation id="7978450511781612192">Zure Google-ko kontuetako saioa amaituko da. Aurrerantzean, ez dira sinkronizatuko laster-markak, historia, pasahitzak eta beste.</translation>
<translation id="7980084013673500153">Erreproduzigai IDa: <ph name="ASSET_ID" /></translation>
<translation id="7981313251711023384">Aurrekargatu orriak azkarrago arakatzeko eta bilatzeko</translation>
<translation id="798145602633458219">Erantsi <ph name="SUGGESTION_NAME" /> iradokizuna bilaketa-koadroan</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_fa.xtb b/chromium/chrome/app/resources/generated_resources_fa.xtb
index 05d479b3f7e..269f53acacf 100644
--- a/chromium/chrome/app/resources/generated_resources_fa.xtb
+++ b/chromium/chrome/app/resources/generated_resources_fa.xtb
@@ -9,7 +9,7 @@
<translation id="1005333234656240382">‏اشکال‌زدایی ADB (پل اشکال‌زدایی Android) فعال شود؟</translation>
<translation id="1006873397406093306">این افزونه می‌تواند داده‌هایتان را در سایت‌ها بخواند و تغییر دهد. می‌توانید سایت‌هایی را که این افزونه به آن‌ها دسترسی دارد کنترل کنید.</translation>
<translation id="1008186147501209563">صادرکردن نشانک‌ها</translation>
-<translation id="1008557486741366299">اکنون نه</translation>
+<translation id="1008557486741366299">حالا نه</translation>
<translation id="1009476156254802388">مکان <ph name="WEB_DRIVE" /></translation>
<translation id="1010498023906173788">این برگه به درگاه سریال متصل است.</translation>
<translation id="1010833424573920260">{NUM_PAGES,plural, =1{صفحه غیرپاسخگو}one{صفحه‌های غیرپاسخگو}other{صفحه‌های غیرپاسخگو}}</translation>
@@ -777,11 +777,11 @@
<translation id="1734212868489994726">آبی روشن</translation>
<translation id="1734230530703461088">افزونه‌ها در محدوده زمانی تعیین‌شده بار نشدند. لطفاً با سرپرست تماس بگیرید.</translation>
<translation id="1734824808160898225"><ph name="PRODUCT_NAME" /> ممکن است نتواند خود را به‌روز نگه دارد</translation>
-<translation id="173522743738009831">درباره «جعبه ایمنی حریم‌خصوصی»</translation>
+<translation id="173522743738009831">درباره «جعبه ایمنی حریم خصوصی»</translation>
<translation id="173628468822554835">متوجه شدم. به‌طور پیش‌فرض، سایت‌های جدیدی را که بازدید کرده‌اید برایتان اعلان نمی‌فرستند.</translation>
<translation id="1736419249208073774">کاوش</translation>
<translation id="1737968601308870607">اشکال پرونده</translation>
-<translation id="1739684185846730053">دوره آزمایشی «جعبه ایمنی حریم‌خصوصی» هنوز در مرحله توسعه فعال است و در مناطق منتخب دردسترس است. درحال‌حاضر، ممکن است سایت‌ها همچنان که از فناوری‌های کوکی‌های شخص ثالث استفاده می‌کنند، «جعبه ایمنی حریم‌خصوصی» را نیز امتحان کنند.</translation>
+<translation id="1739684185846730053">دوره آزمایشی «جعبه ایمنی حریم خصوصی» هنوز در مرحله توسعه فعال است و در مناطق منتخب دردسترس است. درحال‌حاضر، ممکن است سایت‌ها همچنان که از فناوری‌های کوکی‌های شخص ثالث استفاده می‌کنند، «جعبه ایمنی حریم خصوصی» را نیز امتحان کنند.</translation>
<translation id="1741190788710022490">شارژ تطبیقی</translation>
<translation id="174123615272205933">سفارشی</translation>
<translation id="1741314857973421784">ادامه</translation>
@@ -1313,7 +1313,7 @@
<translation id="2232876851878324699">این فایل دارای یک مجوز است، که وارد نشده است:</translation>
<translation id="2233502537820838181">&amp;اطلاعات بیشتر</translation>
<translation id="223356358902285214">فعالیت برنامه و وب</translation>
-<translation id="2234827758954819389">راهنمای حریم‌خصوصی</translation>
+<translation id="2234827758954819389">راهنمای حریم خصوصی</translation>
<translation id="2234876718134438132">‏همگام‌سازی و سرویس‌های Google</translation>
<translation id="2235344399760031203">کوکی‌های شخص ثالث مسدود شده‌اند</translation>
<translation id="2238379619048995541">داده‌های حالت فرکانس</translation>
@@ -1369,7 +1369,7 @@
<translation id="2290615375132886363">دکمه‌های پیمایش رایانه لوحی</translation>
<translation id="229182044471402145">هیچ مورد منطبقی پیدا نشد</translation>
<translation id="2292848386125228270">‏لطفاً <ph name="PRODUCT_NAME" /> را به‌عنوان یک کاربر معمولی راه‌اندازی کنید. اگر می‌خواهید آن را به‌عنوان ریشه برای طراحی اجرا کنید، با پرچم no-sandbox آن را دوباره اجرا کنید.</translation>
-<translation id="2294081976975808113">حریم‌خصوصی صفحه‌نمایش</translation>
+<translation id="2294081976975808113">حریم خصوصی صفحه‌نمایش</translation>
<translation id="2294358108254308676">آیا می‌خواهید <ph name="PRODUCT_NAME" /> را نصب کنید؟</translation>
<translation id="229477815107578534">مرور تنظیمات</translation>
<translation id="2295864384543949385"><ph name="NUM_RESULTS" /> نتیجه</translation>
@@ -2369,7 +2369,7 @@
<translation id="3254516606912442756">تشخیص خودکار منطقه زمانی غیرفعال شده است</translation>
<translation id="3254715652085014625">‏برنامه Chrome را در تلفن Android باز کنید و به «تنظیمات &gt; گذرواژه‌ها &gt; استفاده از تلفن به‌عنوان کلید امنیتی» بروید، و دستورالعمل‌های مربوطه را دنبال کنید.</translation>
<translation id="3255355328033513170">همه داده‌های ذخیره‌شده توسط <ph name="SITE_GROUP_NAME" /> و سایت‌های زیرمجموعه آن حذف خواهند شد. این مورد کوکی‌ها را شامل می‌شود. از سیستم این سایت‌ها (ازجمله در برگه‌های باز) خارج خواهید شد.</translation>
-<translation id="3257733480216378006"><ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" /> مجاز شود؟</translation>
+<translation id="3257733480216378006">به <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" /> اجازه داده شود؟</translation>
<translation id="3259723213051400722">لطفاً دوباره امتحان کنید.</translation>
<translation id="3261268979727295785">بعد از تکمیل راه‌اندازی، می‌توانید کنترل‌های والدین را برای فرزندان بزرگ‌تر اضافه کنید. می‌توانید اطلاعات را در کنترل‌های والدین در برنامه «کاوش» پیدا کنید.</translation>
<translation id="3262986719682892278">بسیار بزرگ است</translation>
@@ -2498,7 +2498,7 @@
<translation id="3388094447051599208">سینی خروجی تقریباً پر است</translation>
<translation id="3388788256054548012">این فایل رمزگذاری شده است. از مالک بخواهید آن را رمزگشایی کند.</translation>
<translation id="3390013585654699824">جزئیات برنامه</translation>
-<translation id="3391512812407811893">دوره‌های آزمایشی «جعبه ایمنی حریم‌خصوصی»</translation>
+<translation id="3391512812407811893">دوره‌های آزمایشی «جعبه ایمنی حریم خصوصی»</translation>
<translation id="3393554941209044235">‏تجزیه‌وتحلیل اسناد Chrome</translation>
<translation id="3393582007140394275">محتوای صفحه ارسال نشد.</translation>
<translation id="3394850431319394743">سایت‌هایی که مجاز هستند از شناسه‌ها برای پخش محتوای محافظت‌شده استفاده کنند</translation>
@@ -2601,7 +2601,7 @@
<translation id="3476303763173086583">‏داده‌های استفاده و عیب‌یابی را ارسال کنید. با ارسال خودکار داده‌های عیب‌یابی و داده‌های استفاده از دستگاه و برنامه به Google به بهبود تجربه Android خود کمک کنید. این داده‌ها برای شناسایی فرزندتان استفاده نخواهند شد و به بهبود پایداری سیستم و برنامه و موارد دیگر کمک خواهد کرد. بعضی داده‌های انبوهشی نیز به برنامه‌ها و شرکای Google (مانند برنامه‌نویس‌های Android) کمک می‌کند. این <ph name="BEGIN_LINK1" />تنظیم<ph name="END_LINK1" /> توسط مالک اعمال می‌شود. ممکن است مالک انتخاب کند داده‌های استفاده و عیب‌یابی این دستگاه به Google ارسال شود. اگر تنظیم «فعالیت وب و برنامه» تکمیلی برای فرزندتان روشن باشد، ممکن است این داده‌ها در حساب Google او ذخیره شود. <ph name="BEGIN_LINK2" />بیشتر بدانید<ph name="END_LINK2" /></translation>
<translation id="347670947055184738">وای! سیستم نتوانست خط‌مشی را برای دستگاهتان واکشی کند.</translation>
<translation id="347785443197175480">همچنان دسترسی به دوربین و میکروفون شما، توسط <ph name="HOST" /> مجاز باشد</translation>
-<translation id="3479552764303398839">اکنون نه</translation>
+<translation id="3479552764303398839">حالا نه</translation>
<translation id="3479685872808224578">سرور چاپ شناسایی نشد. لطفاً نشانی را بررسی و دوباره امتحان کنید.</translation>
<translation id="3480612136143976912">اندازه و سبک زیرنویس ناشنوایان را برای «زیرنویس ناشنوایان زنده» سفارشی می‌کند. برخی از برنامه‌ها و سایت‌ها نیز از این تنظیم استفاده خواهند کرد.</translation>
<translation id="3480827850068960424"><ph name="NUM" /> برگه پیدا شد</translation>
@@ -2832,7 +2832,7 @@
<translation id="3707163604290651814">درحال‌حاضر به‌عنوان <ph name="NAME" /> به سیستم وارد شده‌اید</translation>
<translation id="3708684582558000260">به سایت‌های بسته‌شده اجازه داده نشود ارسال و دریافت داده را تکمیل کنند</translation>
<translation id="3709244229496787112">مرور قبل از اتمام بارگیری بسته شد.</translation>
-<translation id="371174301504454251">برای محافظت از حریم‌خصوصی شما، سایت‌های موجود در فهرست را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. سایت‌هایی که مجدداً از آن‌ها بازدید می‌کنید ممکن است دوباره در فهرست نمایش داده شود. یا اگر نمی‌خواهید سایت خاصی هرگز به علایق شما پی ببرد می‌توانید آن سایت را از فهرست بردارید.</translation>
+<translation id="371174301504454251">برای محافظت از حریم خصوصی شما، سایت‌های موجود در فهرست را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. سایت‌هایی که مجدداً از آن‌ها بازدید می‌کنید ممکن است دوباره در فهرست نمایش داده شود. یا اگر نمی‌خواهید سایت خاصی هرگز به علایق شما پی ببرد می‌توانید آن سایت را از فهرست بردارید.</translation>
<translation id="3711931198657368127">جای‌گذاری و رفتن به <ph name="URL" /></translation>
<translation id="3711945201266135623"><ph name="NUM_PRINTERS" /> چاپگر از سرور چاپ پیدا شد</translation>
<translation id="3712050472459130149">حساب باید به‌روزرسانی شود</translation>
@@ -2884,7 +2884,7 @@
<translation id="3760460896538743390">بازرسی صفحه &amp;پس‌زمینه</translation>
<translation id="37613671848467444">باز کردن در پنجره &amp;ناشناس</translation>
<translation id="3761556954875533505">به سایت اجازه می‌دهید فایل‌ها را ویرایش کند؟</translation>
-<translation id="3763549179847864476">دکمه برگشت «راهنمای حریم‌خصوصی»</translation>
+<translation id="3763549179847864476">دکمه برگشت «راهنمای حریم خصوصی»</translation>
<translation id="3764314093345384080">اطلاعات دقیق ساخت</translation>
<translation id="3764583730281406327">{NUM_DEVICES,plural, =1{‏ارتباط با یک دستگاه USB}one{‏ارتباط با # دستگاه USB}other{‏ارتباط با # دستگاه USB}}</translation>
<translation id="3764753550716962406">‏آیا به Google اجازه می‌دهید از سبد خریدتان برای پیدا کردن تخفیف‌های دردسترس استفاده کند؟</translation>
@@ -2900,7 +2900,7 @@
<translation id="3775432569830822555">‏گواهی سرور SSL</translation>
<translation id="3775705724665058594">ارسال به دستگاه‌هایتان</translation>
<translation id="3776508619697147021">سایت‌ها می‌توانند بارگیری خودکار چند فایل را درخواست کنند</translation>
-<translation id="3776796446459804932">‏این افزونه حریم‌خصوصی «نت‌بازار Chrome» را نقض می‌کند.</translation>
+<translation id="3776796446459804932">‏این افزونه حریم خصوصی «نت‌بازار Chrome» را نقض می‌کند.</translation>
<translation id="3777483481409781352">دستگاه تلفن همراه فعال نشد</translation>
<translation id="3777806571986431400">برنامه افزودنی فعال شد</translation>
<translation id="3778152852029592020">بارگیری لغو شد.</translation>
@@ -3828,7 +3828,7 @@
<translation id="4683629100208651599">تبدیل به حروف کوچک</translation>
<translation id="4683947955326903992"><ph name="PERCENTAGE" />% (پیش‌فرض)</translation>
<translation id="4684427112815847243">همگام‌سازی همه</translation>
-<translation id="4684471265911890182"><ph name="APP_NAME" /> می‌خواهد به دوربین دسترسی داشته باشد. برای مجاز کردن دسترسی، کلید «حریم‌خصوصی دوربین» را خاموش کنید.</translation>
+<translation id="4684471265911890182"><ph name="APP_NAME" /> می‌خواهد به دوربین دسترسی داشته باشد. برای مجاز کردن دسترسی، کلید «حریم خصوصی دوربین» را خاموش کنید.</translation>
<translation id="4687613760714619596">دستگاه نامشخص (<ph name="DEVICE_ID" />)</translation>
<translation id="4688036121858134881">شناسه گزارش محلی: <ph name="WEBRTC_EVENT_LOG_LOCAL_ID" />.</translation>
<translation id="4688176403504673761"><ph name="MANAGER" /> درحال برگرداندن این دستگاه را به نسخه قبلی است (<ph name="PROGRESS_PERCENT" />)</translation>
@@ -4263,7 +4263,7 @@
<translation id="514575469079499857">‏از نشانی IP برای تعیین مکان (پیش‌فرض) استفاده شود</translation>
<translation id="5147103632304200977">‏وقتی سایتی می‌خواهد به دستگاه‌های HID دسترسی پیدا کند سؤال شود (توصیه می‌شود)</translation>
<translation id="5148277445782867161">‏«خدمات مکان Google» از منابعی مانند Wi-Fi، شبکه‌های تلفن همراه، و حسگرها برای کمک به تخمین مکان دستگاهتان استفاده می‌کند.</translation>
-<translation id="5150070631291639005">تنظیمات حریم‌خصوصی</translation>
+<translation id="5150070631291639005">تنظیمات حریم خصوصی</translation>
<translation id="5150254825601720210">‏نام سرور SSL گواهی Netscape</translation>
<translation id="5151354047782775295">فضای دیسک را آزاد کنید، در غیر این صورت ممکن است داده‌های انتخابی به‌صورت خودکار حذف شوند</translation>
<translation id="5153234146675181447">فراموش کردن تلفن</translation>
@@ -4411,7 +4411,7 @@
<translation id="5294097441441645251">باید با نویسه حروف کوچک یا زیرخط شروع شود</translation>
<translation id="5294618183559481278">‏<ph name="DEVICE_TYPE" /> از حسگر داخلی برای شناسایی افراد مقابل دستگاه استفاده می‌کند. همه داده‌ها بلافاصله در دستگاهتان پردازش و سپس حذف می‌شود. داده‌های حسگر هرگز به Google ارسال نمی‌شود. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation>
<translation id="5297082477358294722">گذرواژه ذخیره شد. گذرواژه‌های ذخیره‌شده‌تان را در <ph name="SAVED_PASSWORDS_STORE" /> مشاهده و مدیریت کنید.</translation>
-<translation id="5297946558563358707">وقتی فرد دیگری به صفحه‌نمایشتان نگاه کند، نماد چشم «حریم‌خصوصی» در پایین سمت چپ صفحه‌نمایش نشان داده می‌شود</translation>
+<translation id="5297946558563358707">وقتی فرد دیگری به صفحه‌نمایشتان نگاه کند، نماد چشم «حریم خصوصی» در پایین سمت چپ صفحه‌نمایش نشان داده می‌شود</translation>
<translation id="5298219193514155779">ایحاد زمینه توسط</translation>
<translation id="5299109548848736476">ردیابی نشود</translation>
<translation id="5299558715747014286">مشاهده و مدیریت گروه‌های برگه</translation>
@@ -5307,7 +5307,7 @@
<translation id="6206311232642889873">&amp;کپی تصویر</translation>
<translation id="6207200176136643843">بازنشانی به سطح بزرگ‌نمایی پیش‌فرض</translation>
<translation id="6207937957461833379">کشور/منطقه</translation>
-<translation id="6208382900683142153">کدهای اطمینان حریم‌خصوصی را در وب بهبود می‌بخشد و نمی‌توان از آن‌ها برای پی بردن به هویت شما استفاده کرد.</translation>
+<translation id="6208382900683142153">کدهای اطمینان حریم خصوصی را در وب بهبود می‌بخشد و نمی‌توان از آن‌ها برای پی بردن به هویت شما استفاده کرد.</translation>
<translation id="6208521041562685716">داده تلفن همراه درحال فعال شدن است</translation>
<translation id="6208725777148613371">در <ph name="WEB_DRIVE" /> ذخیره نشد - <ph name="INTERRUPT_REASON" /></translation>
<translation id="6209838773933913227">درحال به‌روزرسانی مؤلفه</translation>
@@ -5559,7 +5559,7 @@
<translation id="6445450263907939268">اگر این تغییرات مدنظر شما نبود، می‌توانید تنظیمات قبلی‌تان را بازیابی کنید.</translation>
<translation id="6446213738085045933">ایجاد میان‌بر دسک تاپ</translation>
<translation id="6447842834002726250">کوکی‌ها</translation>
-<translation id="6450876761651513209">تغییر تنظیمات مربوط به حریم‌خصوصی شما</translation>
+<translation id="6450876761651513209">تغییر تنظیمات مربوط به حریم خصوصی شما</translation>
<translation id="6451344358166983408">سایت یا صفحه</translation>
<translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> و ۱ برگه دیگر}one{<ph name="PAGE_TITLE" /> و # برگه دیگر}other{<ph name="PAGE_TITLE" /> و # برگه دیگر}}</translation>
<translation id="6451689256222386810">اگر عبارت عبورتان را فراموش کرده‌اید یا می‌خواهید این تنظیم را تغییر دهید، <ph name="BEGIN_LINK" />همگام‌سازی را بازنشانی کنید<ph name="END_LINK" />.</translation>
@@ -5952,7 +5952,7 @@
<translation id="6831043979455480757">ترجمه</translation>
<translation id="6833479554815567477">برگه از گروه <ph name="GROUP_NAME" /> برداشته شد - <ph name="GROUP_CONTENTS" /></translation>
<translation id="683373380308365518">به مرورگری هوشمند و ایمن جابه‌جا شوید</translation>
-<translation id="6833996806551876956">دوره آزمایشی «جعبه ایمنی حریم‌خصوصی»</translation>
+<translation id="6833996806551876956">دوره آزمایشی «جعبه ایمنی حریم خصوصی»</translation>
<translation id="6834652994408928492">«حالت تاریک» هنگام غروب آفتاب به‌طور خودکار روشن خواهد شد</translation>
<translation id="6835762382653651563">برای به‌روزرسانی <ph name="DEVICE_TYPE" />، لطفاً به اینترنت وصل شوید.</translation>
<translation id="6839225236531462745">خطای حذف مجوز</translation>
@@ -6160,7 +6160,7 @@
<translation id="7022562585984256452">صفحه اصلی شما تنظیم شد.</translation>
<translation id="7025082428878635038">معرفی روشی جدید برای پیمایش با اشاره‌ها</translation>
<translation id="7025190659207909717">مدیریت خدمات داده‌های تلفن همراه</translation>
-<translation id="7025895441903756761">امنیت و حریم‌خصوصی</translation>
+<translation id="7025895441903756761">امنیت و حریم خصوصی</translation>
<translation id="7027258625819743915">{COUNT,plural, =0{باز کردن همه در پنجره ناشناس}=1{باز کردن در پنجره ناشناس}one{باز کردن همه ({COUNT}) در پنجره ناشناس}other{باز کردن همه ({COUNT}) در پنجره ناشناس}}</translation>
<translation id="7029307918966275733">‏Crostini نصب نشده است. لطفاً برای مشاهده اعتبارها، Crostini را نصب کنید.</translation>
<translation id="7029809446516969842">گذرواژه‌ها</translation>
@@ -6253,7 +6253,7 @@
<translation id="7123030151043029868">اجازه دارد چند فایل را به‌طور خودکار بارگیری کند</translation>
<translation id="7123302939607518173">اگر فکر می‌کنید آگهی‌های مربوط به این مورد برایتان مفید خواهد بود، علاقه یا سایت را اضافه کنید.</translation>
<translation id="7124013154139278147">اختصاص دادن کلید به کنش «قبلی»</translation>
-<translation id="7125029162161377569">با دوره‌های آزمایشی «جعبه ایمنی حریم‌خصوصی»، سایت‌ها می‌توانند تجربه مرور یکسانی را بااستفاده از اطلاعات شخصی کمتر ارائه دهند. به‌عبارت‌دیگر، حریم‌خصوصی‌تان بهبود می‌یابد و ردیابی بین‌سایتی کاهش پیدا می‌کند. هروقت دوره‌های آزمایشی جدیدی برای آزمایش کردن آماده شد، آن‌ها را اضافه می‌کنیم.</translation>
+<translation id="7125029162161377569">با دوره‌های آزمایشی «جعبه ایمنی حریم خصوصی»، سایت‌ها می‌توانند تجربه مرور یکسانی را بااستفاده از اطلاعات شخصی کمتر ارائه دهند. به‌عبارت‌دیگر، حریم خصوصی‌تان بهبود می‌یابد و ردیابی بین‌سایتی کاهش پیدا می‌کند. هروقت دوره‌های آزمایشی جدیدی برای آزمایش کردن آماده شد، آن‌ها را اضافه می‌کنیم.</translation>
<translation id="7125148293026877011">‏حذف Crostini</translation>
<translation id="7127980134843952133">سابقه بارگیری</translation>
<translation id="7128151990937044829">وقتی اعلان‌ها مسدود شده‌اند، نشانگری در نوار نشانی نشان داده شود</translation>
@@ -6457,7 +6457,7 @@
<translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> صفحه در <ph name="PRINTER_NAME" /></translation>
<translation id="7361297102842600584">برای اجرای <ph name="PLUGIN_NAME" /> کلیک راست کنید</translation>
<translation id="7362387053578559123">سایت‌ها می‌توانند برای اتصال به دستگاه‌های بلوتوث درخواست دهند</translation>
-<translation id="7363349185727752629">راهنمای گزینه‌های حریم‌خصوصی</translation>
+<translation id="7363349185727752629">راهنمای گزینه‌های حریم خصوصی</translation>
<translation id="7364591875953874521">دسترسی درخواست شده</translation>
<translation id="7364745943115323529">پخش محتوا…</translation>
<translation id="7364796246159120393">انتخاب فایل</translation>
@@ -6614,7 +6614,7 @@
<translation id="7509097596023256288">درحال راه‌اندازی مدیریت</translation>
<translation id="7509246181739783082">هویتتان را به‌تأیید برسانید</translation>
<translation id="7509539379068593709">حذف نصب برنامه</translation>
-<translation id="7511415964832680006">وقتی روشن باشد، سایت‌ها می‌توانند برای ارائه محتوا و سرویس‌هایشان از تکنیک‌های حفظ حریم‌خصوصی نشان داده‌شده در اینجا استفاده کنند. این تکنیک‌ها شامل روش‌های جایگزین برای ردیابی بین‌سایتی می‌شود. ممکن است در گذر زمان، دوره‌های آزمایشی بیشتری اضافه شود.</translation>
+<translation id="7511415964832680006">وقتی روشن باشد، سایت‌ها می‌توانند برای ارائه محتوا و سرویس‌هایشان از تکنیک‌های حفظ حریم خصوصی نشان داده‌شده در اینجا استفاده کنند. این تکنیک‌ها شامل روش‌های جایگزین برای ردیابی بین‌سایتی می‌شود. ممکن است در گذر زمان، دوره‌های آزمایشی بیشتری اضافه شود.</translation>
<translation id="7514239104543605883">کپی در دستگاه</translation>
<translation id="7514365320538308">بارگیری</translation>
<translation id="7514417110442087199">افزودن تخصیص</translation>
@@ -6742,7 +6742,7 @@
<translation id="7635048370253485243">سرپرستتان آن را پین کرده است</translation>
<translation id="7636919061354591437">نصب در این دستگاه</translation>
<translation id="7637593984496473097">فضای دیسک کافی نیست</translation>
-<translation id="7639914187072011620">‏نشانی وب هدایت SAML از سرور واکشی نشد</translation>
+<translation id="7639914187072011620">‏نشانی وب هدایتگر SAML از سرور واکشی نشد</translation>
<translation id="764017888128728"><ph name="PASSWORD_MANAGER_BRAND" /> شما را به‌صورت خودکار در سایت‌های واجد شرایط با گذرواژه‌هایی که ذخیره کرده‌اید ثبت ورود می‌کند.</translation>
<translation id="7641513591566880111">نام نمایه جدید</translation>
<translation id="764178579712141045"><ph name="USER_EMAIL" /> اضافه شد</translation>
@@ -6769,7 +6769,7 @@
<translation id="7658239707568436148">لغو</translation>
<translation id="7659154729610375585">درهرصورت از «حالت ناشناس» خارج می‌شوید؟</translation>
<translation id="7659297516559011665">فقط گذرواژه‌های ذخیره‌شده در این دستگاه</translation>
-<translation id="7659336857671800422">مشاهده «راهنمای حریم‌خصوصی»</translation>
+<translation id="7659336857671800422">مشاهده «راهنمای حریم خصوصی»</translation>
<translation id="7659584679870740384">مجاز به استفاده از این دستگاه نیستید. لطفاً برای دریافت اجازه ورود به سیستم با سرپرست تماس بگیرید.</translation>
<translation id="7660146600670077843">روی یکی از برگه‌ها کلیک راست کنید و «افزودن برگه به گروه جدید» را انتخاب کنید</translation>
<translation id="7661259717474717992">اجازه به سایت‌ها برای ذخیره کردن و خواندن داده‌های کوکی</translation>
@@ -7018,7 +7018,7 @@
<translation id="788453346724465748">درحال بار کردن اطلاعات حساب…</translation>
<translation id="7886279613512920452">{COUNT,plural, =1{یک مورد}one{# مورد}other{# مورد}}</translation>
<translation id="7886605625338676841">سیم‌کارت داخلی</translation>
-<translation id="7887174313503389866">در گشت با راهنمای مربوط به کنترل‌های اصلی امنیت و حریم‌خصوصی شرکت کنید. برای گزینه‌های بیشتر، به‌طور جداگانه به هر تنظیم بروید.</translation>
+<translation id="7887174313503389866">در گشت با راهنمای مربوط به کنترل‌های اصلی امنیت و حریم خصوصی شرکت کنید. برای گزینه‌های بیشتر، به‌طور جداگانه به هر تنظیم بروید.</translation>
<translation id="7887334752153342268">کپی‌برداری</translation>
<translation id="7887864092952184874">موشواره بلوتوث مرتبط شد</translation>
<translation id="7889371445710865055">تغییر زبان تایپ صوتی</translation>
@@ -7313,7 +7313,7 @@
<translation id="816055135686411707">خطا در تنظیم اعتماد مجوز</translation>
<translation id="8160775796528709999">با فعال کردن «زیرنویس ناشنوایان زنده» در تنظیمات، برای صدا و ویدیو زیرنویس ناشنوایان دریافت کنید</translation>
<translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />، <ph name="TIME_REMAINING" /></translation>
-<translation id="81610453212785426">‏Chrome بااستفاده از <ph name="BEGIN_LINK" />جعبه ایمنی حریم‌خصوصی<ph name="END_LINK" /> درحال توسعه فناوری‌های جدیدی است که ضمن حفظ وبِ باز، از شما در برابر ردیابی بین‌سایتی محافظت می‌کند.</translation>
+<translation id="81610453212785426">‏Chrome بااستفاده از <ph name="BEGIN_LINK" />جعبه ایمنی حریم خصوصی<ph name="END_LINK" /> درحال توسعه فناوری‌های جدیدی است که ضمن حفظ وبِ باز، از شما در برابر ردیابی بین‌سایتی محافظت می‌کند.</translation>
<translation id="8161293209665121583">«حالت خواننده» برای صفحه‌های وب</translation>
<translation id="8162984717805647492">{NUM_TABS,plural, =1{انتقال دادن برگه به پنجره جدید}one{انتقال دادن برگه‌ها به پنجره جدید}other{انتقال دادن برگه‌ها به پنجره جدید}}</translation>
<translation id="8165997195302308593">‏بازارسال درگاه Crostini</translation>
@@ -7343,7 +7343,7 @@
<translation id="8188389033983459049">تنظیمات دستگاه را بررسی کنید و برای ادامه، آن را روشن کنید</translation>
<translation id="8188742492803591566">‏برای ارسال محتوای صفحه، کد دسترسی نمایش داده‌شده در Chromecast یا تلویزیون را وارد کنید.</translation>
<translation id="8189306097519446565">حساب‌های مدرسه</translation>
-<translation id="8189750580333936930">جعبه ایمنی حریم‌خصوصی</translation>
+<translation id="8189750580333936930">جعبه ایمنی حریم خصوصی</translation>
<translation id="8191230140820435481">مدیریت برنامه‌ها، افزونه‌ها و طرح‌های زمینه</translation>
<translation id="8192944472786724289"><ph name="APP_NAME" /> می‌خواهد محتوای صفحه‌نمایشتان را هم‌رسانی کند</translation>
<translation id="8193953846147532858"><ph name="BEGIN_LINK" />دستگاه‌های شما<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -7596,7 +7596,7 @@
<translation id="8457451314607652708">وارد کردن نشانک‌ها</translation>
<translation id="8458341576712814616">میان‌بر</translation>
<translation id="8458627787104127436">باز کردن همه (<ph name="URL_COUNT" /> مورد) در پنجره جدید</translation>
-<translation id="8460448946170646641">مرور کنترل‌های اصلی امنیت و حریم‌خصوصی</translation>
+<translation id="8460448946170646641">مرور کنترل‌های اصلی امنیت و حریم خصوصی</translation>
<translation id="8460490661223303637">‏برای صرفه‌جویی در حافظه، Chrome برخی محتوا را پاک کرد</translation>
<translation id="8460932807646981183">مدیریت موتورهای جستجو و جستجوی سایت</translation>
<translation id="84613761564611563">واسط کاربر پیکربندی شبکه درخواست شد، لطفاً صبر کنید…</translation>
@@ -7623,7 +7623,7 @@
<translation id="8480869669560681089">دستگاه نامشخص از <ph name="VENDOR_NAME" /></translation>
<translation id="8481187309597259238">‏تأیید مجوز USB</translation>
<translation id="8481980314595922412">ویژگی‌های آزمایشی روشن است</translation>
-<translation id="848666842773560761">برنامه‌ای می‌خواهد به دوربین دسترسی داشته باشد. برای مجاز کردن دسترسی، کلید «حریم‌خصوصی دوربین» را خاموش کنید.</translation>
+<translation id="848666842773560761">برنامه‌ای می‌خواهد به دوربین دسترسی داشته باشد. برای مجاز کردن دسترسی، کلید «حریم خصوصی دوربین» را خاموش کنید.</translation>
<translation id="8487678622945914333">بزرگ‌نمایی</translation>
<translation id="8489156414266187072">پیشنهادهای شخصی فقط در حساب شما نمایش داده می‌شوند</translation>
<translation id="8490896350101740396">برنامه‌های کیوسک زیر «<ph name="UPDATED_APPS" />» به‌روز شده‌اند. لطفاً برای تکمیل فرآیند به‌روزرسانی دستگاه را مجدداً راه‌اندازی کنید.</translation>
@@ -7861,7 +7861,7 @@
<translation id="8731851055419582926">گذرواژه‌های بررسی‌شده</translation>
<translation id="8732030010853991079">با کلیک کردن روی این نماد از این برنامه افزودنی استفاده کنید.</translation>
<translation id="8732212173949624846">خواندن و تغییر سابقه مرورتان در همه دستگاه‌های وارد به سیستم خودتان</translation>
-<translation id="8732844209475700754">تنظیمات بیشتر مرتبط با حریم‌خصوصی، امنیت و جمع‌آوری داده‌ها</translation>
+<translation id="8732844209475700754">تنظیمات بیشتر مرتبط با حریم خصوصی، امنیت و جمع‌آوری داده‌ها</translation>
<translation id="8734073480934656039">فعال کردن این تنظیم به برنامه‌های کیوسک اجازه می‌دهد تا به صورت خودکار در شروع به کار راه‌اندازی شوند.</translation>
<translation id="8734674662128056360">مسدود کردن کوکی‌های شخص ثالث</translation>
<translation id="873545264931343897">وفتی به‌روزرسانی <ph name="PLUGIN_NAME" /> تمام شد، برای فعال کردن آن، صفحه را تازه‌سازی کنید</translation>
@@ -8025,7 +8025,7 @@
<translation id="8880054210564666174">فهرست مخاطبین بارگیری نشد. لطفاً اتصال شبکه‌تان را بررسی کنید یا <ph name="LINK_BEGIN" />دوباره امتحان کنید<ph name="LINK_END" />.</translation>
<translation id="8881020143150461183">لطفاً دوباره امتحان کنید. برای پشتیبانی فنی، با <ph name="CARRIER_NAME" /> تماس بگیرید.</translation>
<translation id="8883273463630735858">فعال کردن شتاب‌دهنده صفحه لمسی</translation>
-<translation id="8884023684057697730"><ph name="BEGIN_BOLD" />چگونه می‌توانید داده‌هایتان را مدیریت کنید:<ph name="END_BOLD" /> برای محافظت از حریم‌خصوصی شما، سایت‌های موجود در فهرست را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. سایت‌هایی که مجدداً از آن‌ها بازدید می‌کنید ممکن است دوباره در فهرست نمایش داده شود. یا اگر نمی‌خواهید سایت خاصی هرگز به علایق شما پی ببرد می‌توانید آن سایت را از فهرست بردارید.</translation>
+<translation id="8884023684057697730"><ph name="BEGIN_BOLD" />چگونه می‌توانید داده‌هایتان را مدیریت کنید:<ph name="END_BOLD" /> برای محافظت از حریم خصوصی شما، سایت‌های موجود در فهرست را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. سایت‌هایی که مجدداً از آن‌ها بازدید می‌کنید ممکن است دوباره در فهرست نمایش داده شود. یا اگر نمی‌خواهید سایت خاصی هرگز به علایق شما پی ببرد می‌توانید آن سایت را از فهرست بردارید.</translation>
<translation id="8884570509232205463">اکنون دستگاهتان ساعت <ph name="UNLOCK_TIME" /> قفل می‌شود.</translation>
<translation id="8888253246822647887">وقتی ارتقا به پایان برسد، برنامه‌تان باز خواهد شد. ارتقا ممکن است چند دقیقه طول بکشد.</translation>
<translation id="8888432776533519951">رنگ:</translation>
@@ -8183,7 +8183,7 @@
<translation id="9040661932550800571">گذرواژه <ph name="ORIGIN" /> به‌روزرسانی شود؟</translation>
<translation id="9041692268811217999">دسترسی به فایل‌های محلی موجود در دستگاهتان، توسط سرپرست شما غیرفعال شده است</translation>
<translation id="904224458472510106">این عملیات را نمی‌توان واگرد کرد</translation>
-<translation id="9042893549633094279">حریم‌خصوصی و امنیت</translation>
+<translation id="9042893549633094279">حریم خصوصی و امنیت</translation>
<translation id="904451693890288097">لطفاً گذرکلید "<ph name="DEVICE_NAME" />" را وارد کنید:</translation>
<translation id="9044646465488564462">اتصال به شبکه انجام نشد: <ph name="DETAILS" /></translation>
<translation id="9045160989383249058">فهرست خواندن به پانل کناری جدید منتقل شده است. آن را در اینجا امتحان کنید.</translation>
@@ -8334,7 +8334,7 @@
<translation id="919679265671373777">رسانه و عکس‌های جدید تلفنتان را مشاهده کنید. برنامه‌های پیام‌رسانی تلفن را جاری‌سازی کنید.</translation>
<translation id="919686179725692564">درباره پشتیبان‌گیری از برنامه‌ها بیشتر بدانید</translation>
<translation id="9198090666959937775">‏استفاده از تلفن Android به‌عنوان کلید امنیتی</translation>
-<translation id="9199503643457729322">برای خارج شدن از «راهنمای حریم‌خصوصی»، کلیک کنید.</translation>
+<translation id="9199503643457729322">برای خارج شدن از «راهنمای حریم خصوصی»، کلیک کنید.</translation>
<translation id="9200339982498053969"><ph name="ORIGIN" /> خواهد توانست فایل‌های <ph name="FOLDERNAME" /> را ویرایش کند</translation>
<translation id="920045321358709304">جستجوی <ph name="SEARCH_ENGINE" /></translation>
<translation id="9201023452444595544">هرنوع داده آفلاینی حذف خواهد شد</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_fi.xtb b/chromium/chrome/app/resources/generated_resources_fi.xtb
index 27cbdce92d1..bf988a47243 100644
--- a/chromium/chrome/app/resources/generated_resources_fi.xtb
+++ b/chromium/chrome/app/resources/generated_resources_fi.xtb
@@ -340,7 +340,7 @@
<translation id="1338631221631423366">Laiteparia muodostetaan…</translation>
<translation id="1338802252451106843"><ph name="ORIGIN" /> haluaa avata tämän sovelluksen.</translation>
<translation id="1338950911836659113">Poistetaan…</translation>
-<translation id="1339009753652684748">Käytä Assistantia sanomalla "Ok Google". Jos haluat säästää virtaa, valitse Käytössä (suositus). Assistant vastaa vain, jos laite on kytketty virtalähteeseen tai laturiin.</translation>
+<translation id="1339009753652684748">Käytä Assistantia sanomalla "Hey Google". Jos haluat säästää virtaa, valitse Käytössä (suositus). Assistant vastaa vain, jos laite on kytketty virtalähteeseen tai laturiin.</translation>
<translation id="13392265090583506">A11y</translation>
<translation id="1340527397989195812">Varmuuskopioi mediatiedostot laitteelta Tiedostot-sovelluksen avulla.</translation>
<translation id="1341988552785875222"><ph name="APP_NAME" /> asetti nykyisen taustakuvan. Saatat joutua poistamaan sovelluksen <ph name="APP_NAME" /> ennen kuin voit valita uuden taustakuvan.</translation>
@@ -1222,7 +1222,7 @@ Voit ylläpitää tilin asetuksia asentamalla laitteellesi Family Link ‑sovell
<translation id="2147218225094845757">Piilota sivupaneeli</translation>
<translation id="2148219725039824548">Virhe jaon käyttöönotossa. Kyseistä jakoa ei löytynyt verkosta.</translation>
<translation id="2148756636027685713">Alustus valmis</translation>
-<translation id="2148892889047469596">Suoratoista välilehti</translation>
+<translation id="2148892889047469596">Striimaa välilehti</translation>
<translation id="2149973817440762519">Muokkaa kirjanmerkkiä</translation>
<translation id="2150139952286079145">Hae kohteita</translation>
<translation id="2150661552845026580">Lisätäänkö <ph name="EXTENSION_NAME" />?</translation>
@@ -1408,7 +1408,7 @@ Voit ylläpitää tilin asetuksia asentamalla laitteellesi Family Link ‑sovell
<translation id="23030561267973084"><ph name="EXTENSION_NAME" /> on pyytänyt lisäoikeuksia.</translation>
<translation id="23055578400314116">Valitse käyttäjänimi</translation>
<translation id="2307462900900812319">Määritä verkko</translation>
-<translation id="2307553512430195144">Jos hyväksyt tämän, Google Assistant odottaa lepotilassa, kunnes se kuulee sanat "Ok Google" ja tunnistaa Voice Matchilla puhujaksi käyttäjän <ph name="SUPERVISED_USER_NAME" />.
+<translation id="2307553512430195144">Jos hyväksyt tämän, Google Assistant odottaa lepotilassa, kunnes se kuulee sanat "Hey Google" ja tunnistaa Voice Matchilla puhujaksi käyttäjän <ph name="SUPERVISED_USER_NAME" />.
<ph name="BR" />
Voice Matchin avulla Google Assistant voi tunnistaa käyttäjän (<ph name="SUPERVISED_USER_NAME" />) äänen laitteellasi (<ph name="DEVICE_TYPE" />) ja erottaa hänet muista.
<ph name="BR" />
@@ -2295,7 +2295,7 @@ ja loitonna painamalla Ctrl + Alt + kirkkauden vähennys.</translation>
<translation id="3151562827395986343">Tyhjennä historia, evästeet, välimuisti ja muita tietoja</translation>
<translation id="3151616662954589507">Selfie-kamera</translation>
<translation id="3151786313568798007">Suunta</translation>
-<translation id="3152356229013609796">Katso ja hylkää puhelimen ilmoituksia ja vastaa niihin</translation>
+<translation id="3152356229013609796">katsoa ja hylätä puhelimen ilmoituksia ja vastata niihin</translation>
<translation id="3157387275655328056">Lisää lukulistalle</translation>
<translation id="3157931365184549694">Palauta</translation>
<translation id="3158033540161634471">Määritä sormenjälki</translation>
@@ -2363,7 +2363,7 @@ ja loitonna painamalla Ctrl + Alt + kirkkauden vähennys.</translation>
<translation id="3244294424315804309">Jatka äänen mykistystä</translation>
<translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – verkkovirhe</translation>
<translation id="3248902735035392926">Turvallisuudella on väliä. Käytä nyt hetki <ph name="BEGIN_LINK" />laajennusten tarkistamiseen<ph name="END_LINK" />.</translation>
-<translation id="3251714896659475029">Salli, että <ph name="SUPERVISED_USER_NAME" /> voi käyttää Google Assistantia sanomalla "Ok Google"</translation>
+<translation id="3251714896659475029">Salli, että <ph name="SUPERVISED_USER_NAME" /> voi käyttää Google Assistantia sanomalla "Hey Google"</translation>
<translation id="3251759466064201842">&lt;Ei osa varmennetta&gt;</translation>
<translation id="325238099842880997">Määritä digitaaliset pelisäännöt, joiden avulla lapsesi voi pelata, tutkia ja oppia sekä tehdä koulutehtäviä kotona.</translation>
<translation id="3253448572569133955">Tuntematon tili</translation>
@@ -2694,7 +2694,7 @@ ja loitonna painamalla Ctrl + Alt + kirkkauden vähennys.</translation>
<translation id="3569382839528428029">Haluatko sovelluksen <ph name="APP_NAME" /> jakavan näyttösi?</translation>
<translation id="3569407787324516067">Näytönsäästäjä</translation>
<translation id="3569682580018832495"><ph name="ORIGIN" /> saa nähdä seuraavat tiedostot ja kansiot</translation>
-<translation id="3571734092741541777">Määritä</translation>
+<translation id="3571734092741541777">Ota käyttöön</translation>
<translation id="3575121482199441727">Salli tällä sivustolla</translation>
<translation id="3577745545227000795">Laitedatan kerääminen: <ph name="DEVICE_OS" /></translation>
<translation id="3578594933904494462">Tämän välilehden sisältöä jaetaan.</translation>
@@ -3878,7 +3878,7 @@ ja loitonna painamalla Ctrl + Alt + kirkkauden vähennys.</translation>
<translation id="4742970037960872810">Poista korostus</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Katso, miten sovelluksia päivitetään<ph name="END_LINK" /></translation>
<translation id="4744981231093950366">{NUM_TABS,plural, =1{Poista sivuston mykistys}other{Poista sivustojen mykistys}}</translation>
-<translation id="474609389162964566">Käytä Assistantia sanomalla "Ok Google"</translation>
+<translation id="474609389162964566">Käytä Assistantia sanomalla "Hey Google"</translation>
<translation id="4746351372139058112">Viestit</translation>
<translation id="4748783296226936791">Sivustot yhdistävät yleensä HID-laitteisiin esim. käyttääkseen epätavallisia näppäimistöjä, peliohjaimia tai muita laitteita</translation>
<translation id="4750185073185658673">Voit tarkistaa muutamia muita lupia puhelimellasi. Varmista, että puhelimen Bluetooth ja Wi-Fi ovat päällä.</translation>
@@ -3970,7 +3970,7 @@ ja loitonna painamalla Ctrl + Alt + kirkkauden vähennys.</translation>
<translation id="4844633725025837809">Salasanat kannattaa salata turvallisuussyistä laitteella ennen niiden tallentamista Googlen Salasanojen ylläpitoon</translation>
<translation id="4846680374085650406">Noudatat järjestelmänvalvojan tätä asetusta koskevaa suositusta.</translation>
<translation id="4847902821209177679"><ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" /> valittu, valitse albumeita (<ph name="TOPIC_SOURCE" />) painamalla Enter</translation>
-<translation id="4848191975108266266">Google Assistantin Ok Google</translation>
+<translation id="4848191975108266266">Google Assistantin Hey Google</translation>
<translation id="4849286518551984791">Asetettu yleisaika (Coordinated Universal Time, UTC/GMT)</translation>
<translation id="4849517651082200438">Älä asenna</translation>
<translation id="485053257961878904">Ilmoitusten synkronointia ei voitu ottaa käyttöön</translation>
@@ -5167,7 +5167,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="6059276912018042191">Viimeaikaiset Chrome-välilehdet</translation>
<translation id="6059652578941944813">Varmennehierarkia</translation>
<translation id="6063284707309177505">Luo QR-koodi</translation>
-<translation id="6063847492705284550"><ph name="BEGIN_BOLD" />Huom.<ph name="END_BOLD" /> Käyttäjän (<ph name="SUPERVISED_USER_NAME" />) henkilökohtaisiin tuloksiin voi olla mahdollista päästä käsiksi myös, jos hänen ääntään on nauhoitettu tai jonkun toisen ääni muistuttaa hänen ääntään. Jos haluat säästää virtaa, muuta käyttäjän <ph name="SUPERVISED_USER_NAME" /> Assistantin asetuksia niin, että "Ok Google" on käytössä vain, kun laite on kytketty virtalähteeseen.</translation>
+<translation id="6063847492705284550"><ph name="BEGIN_BOLD" />Huom.<ph name="END_BOLD" /> Käyttäjän (<ph name="SUPERVISED_USER_NAME" />) henkilökohtaisiin tuloksiin voi olla mahdollista päästä käsiksi myös, jos hänen ääntään on nauhoitettu tai jonkun toisen ääni muistuttaa hänen ääntään. Jos haluat säästää virtaa, muuta käyttäjän <ph name="SUPERVISED_USER_NAME" /> Assistantin asetuksia niin, että "Hey Google" on käytössä vain, kun laite on kytketty virtalähteeseen.</translation>
<translation id="6064217302520318294">Näytön lukitus</translation>
<translation id="6065289257230303064">Varmenteen kohdehakemiston attribuutit</translation>
<translation id="6066794465984119824">Tiivistettyä kuvaa ei ole määritetty</translation>
@@ -5701,7 +5701,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="6583328141350416497">Jatka latausta</translation>
<translation id="6584878029876017575">Microsoftin elinikäinen allekirjoitus</translation>
<translation id="6586099239452884121">Vierailijakäyttö</translation>
-<translation id="6586213706115310390">Käytä Assistantia sanomalla "Ok Google".</translation>
+<translation id="6586213706115310390">Käytä Assistantia sanomalla "Hey Google".</translation>
<translation id="6586451623538375658">Vaihda hiiren ykköspainiketta</translation>
<translation id="6587958707401001932">Valitse oletusasetus</translation>
<translation id="6588043302623806746">Käytä suojattua DNS:ää</translation>
@@ -5918,7 +5918,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="6808166974213191158">ChromeOS Flex ‑järjestelmän näköistiedoston kirjoittaja</translation>
<translation id="6808193438228982088">Kettu</translation>
<translation id="6809470175540814047">Avaa incognito-ikkunassa</translation>
-<translation id="6809656734323672573">Jos hyväksyt tämän, Google Assistant odottaa lepotilassa, kunnes se kuulee sanat "Ok Google" ja tunnistaa Voice Matchilla puhujaksi sinut.
+<translation id="6809656734323672573">Jos hyväksyt tämän, Google Assistant odottaa lepotilassa, kunnes se kuulee sanat "Hey Google" ja tunnistaa Voice Matchilla puhujaksi sinut.
<ph name="BR" />
Voice Matchin avulla Assistant osaa tunnistaa sinut ja erottaa sinut muista. Assistant luo tallenteista yksilöllisen äänimallin, joka tallennetaan vain laitteellesi. Äänimalli voidaan lähettää tilapäisesti Googlelle jotta äänesi voidaan tunnistaa paremmin.
<ph name="BR" />
@@ -5964,7 +5964,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="6842749380892715807">XML-sivustoluettelot ladattiin viimeksi <ph name="LAST_DATE_DOWNLOAD" />.</translation>
<translation id="6842868554183332230">Sivustot havaitsevat yleensä, kun käytät laitetta aktiivisesti ja määrittävät sen perusteella saatavuutesi chat-sovelluksissa</translation>
<translation id="6843264316370513305">Verkon virheenkorjaus</translation>
-<translation id="6843423766595476978">Ok Google on valmiina</translation>
+<translation id="6843423766595476978">Hey Google on valmiina</translation>
<translation id="6845038076637626672">Avaa suuressa koossa</translation>
<translation id="6846178040388691741"><ph name="EXTENSION_NAME" /> haluaa tulostaa tiedoston <ph name="FILE_NAME" /> tulostimella <ph name="PRINTER_NAME" />.</translation>
<translation id="6847125920277401289">Vapauta tilaa jatkaaksesi</translation>
@@ -6150,7 +6150,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="701080569351381435">Näytä lähdekoodi</translation>
<translation id="7014174261166285193">Asennus epäonnistui.</translation>
<translation id="7014480873681694324">Poista korostus</translation>
-<translation id="7017004637493394352">Sano ”Ok Google” uudelleen</translation>
+<translation id="7017004637493394352">Sano ”Hey Google” uudelleen</translation>
<translation id="7017219178341817193">Lisää uusi sivu</translation>
<translation id="7017354871202642555">Tilaa ei voi asettaa ikkunan asettamisen jälkeen.</translation>
<translation id="7018275672629230621">Lukea ja muokata selaushistoriaasi</translation>
@@ -6402,7 +6402,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="7298195798382681320">Suositus</translation>
<translation id="7299337219131431707">Ota vierailijaselaus käyttöön</translation>
<translation id="7299515639584427954">Vaihdetaanko tuetut linkit avaava oletussovellus?</translation>
-<translation id="7301470816294041580">Voit kysyä "Ok Google, what song is this?" tai "Ok Google, what's on my screen?"</translation>
+<translation id="7301470816294041580">Voit kysyä "Hey Google, what song is this?" tai "Hey Google, what's on my screen?"</translation>
<translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Tämä sovellus saattaa estää Chromea toimimasta oikein}other{Nämä sovellukset saattavat estää Chromea toimimasta oikein}}</translation>
<translation id="7303281435234579599">Hups, jotain meni vikaan esittelytilan määrityksessä.</translation>
<translation id="7303900363563182677">Tämä sivu ei saa nähdä leikepöydälle kopioitua tekstiä tai kuvia.</translation>
@@ -6621,7 +6621,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="7515998400212163428">Android</translation>
<translation id="7516981202574715431"><ph name="APP_NAME" /> on keskeytetty</translation>
<translation id="7520766081042531487">Incognito-portaali: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="7522255036471229694">Sano ”Ok Google”.</translation>
+<translation id="7522255036471229694">Sano ”Hey Google”.</translation>
<translation id="7523585675576642403">Nimeä profiili uudelleen</translation>
<translation id="7525067979554623046">Luo</translation>
<translation id="7525625923260515951">Kuuntele valittu teksti</translation>
@@ -6809,7 +6809,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä):
<translation id="7690853182226561458">Lisää kansio...</translation>
<translation id="7691073721729883399">Kioskisovelluksen cryptohomea ei voitu ottaa käyttöön.</translation>
<translation id="7691077781194517083">Tätä suojausavainta ei voi nollata. Virhe: <ph name="ERROR_CODE" /></translation>
-<translation id="7691163173018300413">"Ok Google"</translation>
+<translation id="7691163173018300413">"Hey Google"</translation>
<translation id="7691698019618282776">Crostini-päivitys</translation>
<translation id="7694246789328885917">Korostustyökalu</translation>
<translation id="7696063401938172191"><ph name="PHONE_NAME" />:</translation>
@@ -6980,7 +6980,7 @@ Poista määritys painamalla määritettyä kytkintä tai näppäintä.</transla
<translation id="7850717413915978159"><ph name="BEGIN_PARAGRAPH1" />Antamalla ChromeOS-laitteiden lähettää raportteja automaattisesti voit auttaa meitä korjaamaan ja kehittämään ChromeOS:n ominaisuuksia. Raportteihin voi sisältyä esimerkiksi tietoja ChromeOS:n kaatumisista, käytetyistä ominaisuuksista ja tyypillisestä muistin käytöstä sekä Android-sovellusten diagnostiikka- ja käyttödataa. Kootusta datasta on hyötyä myös Googlen sovelluksille ja kumppaneille, esim. Android-kehittäjille.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Voit sallia tai estää raporttien lähettämisen milloin tahansa ChromeOS-laitteen asetuksissa. Jos olet verkkotunnuksen järjestelmänvalvoja, voit muuttaa asetusta hallintakonsolissa.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />Jos Verkko‑ ja sovellustoiminta ‑asetus on päällä Google-tililläsi, Android-dataa voidaan tallentaa tilillesi. Voit nähdä dataa, poistaa sitä ja muuttaa tiliasetuksia osoitteessa account.google.com.<ph name="END_PARAGRAPH3" /></translation>
-<translation id="7851021205959621355"><ph name="BEGIN_BOLD" />Huom.<ph name="END_BOLD" /> Samanlaisella äänellä tai äänitteellä saattaa päästä henkilökohtaisiin tuloksiisi tai Assistantiisi. Jos haluat säästää virtaa, muuta Assistantin asetuksia niin, että "Ok Google" on käytössä vain, kun laite on kytkettynä virtalähteeseen.</translation>
+<translation id="7851021205959621355"><ph name="BEGIN_BOLD" />Huom.<ph name="END_BOLD" /> Samanlaisella äänellä tai äänitteellä saattaa päästä henkilökohtaisiin tuloksiisi tai Assistantiisi. Jos haluat säästää virtaa, muuta Assistantin asetuksia niin, että "Hey Google" on käytössä vain, kun laite on kytkettynä virtalähteeseen.</translation>
<translation id="7851457902707056880">Kirjautuminen on sallittu vain omistajatilillä. Käynnistä tietokone uudelleen ja kirjaudu omistajatilillä. Tietokone käynnistetään uudelleen 30 sekunnin kuluttua.</translation>
<translation id="7851716364080026749">Estä kameran ja mikrofonin käyttö aina</translation>
<translation id="7851720427268294554">IPP-jäsentäjä</translation>
@@ -8371,7 +8371,7 @@ Tallenna avaintiedosto suojattuun sijaintiin. Tarvitset sitä, jos haluat luoda
<translation id="936646668635477464">Kamera ja mikrofoni</translation>
<translation id="936801553271523408">Järjestelmän diagnostiikkatiedot</translation>
<translation id="93766956588638423">Korjaa laajennus</translation>
-<translation id="938568644810664664">Kokeile kysyä "Ok Google, what song is this?" tai "Ok Google, what's on my screen?"</translation>
+<translation id="938568644810664664">Kokeile kysyä "Hey Google, what song is this?" tai "Hey Google, what's on my screen?"</translation>
<translation id="938623846785894166">Epätavallinen tiedosto</translation>
<translation id="939401694733344652">Näitä tilejä ei käytetä Android-sovellusten kanssa tällä hetkellä. Jos valitset Android-sovelluksen kanssa käytettävän tilin, sitä voidaan käyttää myös muilla Android-sovelluksilla. Voit muokata Android-sovelluksen pääsyä valitsemalla <ph name="LINK_BEGIN" />Asetukset &gt; Tilit<ph name="LINK_END" />.</translation>
<translation id="939598580284253335">Anna tunnuslause</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_fr.xtb b/chromium/chrome/app/resources/generated_resources_fr.xtb
index 19feb27af5a..3e534f1ceea 100644
--- a/chromium/chrome/app/resources/generated_resources_fr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_fr.xtb
@@ -223,7 +223,7 @@
<translation id="121384500095351701">Impossible de télécharger ce fichier de manière sécurisée</translation>
<translation id="1215411991991485844">Nouvelle application en arrière-plan ajoutée</translation>
<translation id="1216542092748365687">Supprimer une empreinte</translation>
-<translation id="1217114730239853757">Voulez-vous activer ChromeVox, le lecteur d'écran intégré pour Chrome OS Flex ? Si oui, appuyez sur la barre d'espace.</translation>
+<translation id="1217114730239853757">Voulez-vous activer ChromeVox, le lecteur d'écran intégré pour ChromeOS Flex ? Si oui, appuyez sur la barre d'espace.</translation>
<translation id="1217483152325416304">Vos données locales seront bientôt supprimées</translation>
<translation id="1217668622537098248">Réactiver le clic gauche après l'action</translation>
<translation id="121783623783282548">Les mots de passe ne correspondent pas.</translation>
@@ -275,7 +275,7 @@
<translation id="126387934568812801">Inclure cette capture d'écran et les titres des onglets ouverts</translation>
<translation id="1264083566674525434">Modifier les autorisations du site</translation>
<translation id="1264337193001759725">Pour voir les journaux d'interface utilisateur du réseau, accédez à : <ph name="DEVICE_LOG_LINK" /></translation>
-<translation id="1265279736024499987">Vos applis et paramètres seront synchronisés sur tous les appareils Chrome OS Flex où vous êtes connecté à votre compte Google. Pour voir les options de synchronisation du navigateur, accédez aux <ph name="LINK_BEGIN" />paramètres de Chrome<ph name="LINK_END" />.</translation>
+<translation id="1265279736024499987">Vos applis et paramètres seront synchronisés sur tous les appareils ChromeOS Flex où vous êtes connecté à votre compte Google. Pour voir les options de synchronisation du navigateur, accédez aux <ph name="LINK_BEGIN" />paramètres de Chrome<ph name="LINK_END" />.</translation>
<translation id="126710816202626562">Langue de traduction :</translation>
<translation id="126768002343224824">16x</translation>
<translation id="1272079795634619415">Arrêter</translation>
@@ -371,7 +371,7 @@
<translation id="1373176046406139583">Le paramètre de visibilité permet de sélectionner les personnes qui peuvent partager des fichiers avec vous lorsque l'écran est déverrouillé. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
<translation id="1374844444528092021">Le certificat requis par le réseau "<ph name="NETWORK_NAME" />" n'est pas installé ou n'est plus valide. Veuillez obtenir un nouveau certificat et réessayer de vous connecter.</translation>
<translation id="1375321115329958930">Mots de passe enregistrés</translation>
-<translation id="1375557162880614858">Voulez-vous activer ChromeVox, le lecteur d'écran intégré pour Chrome OS Flex ?</translation>
+<translation id="1375557162880614858">Voulez-vous activer ChromeVox, le lecteur d'écran intégré pour ChromeOS Flex ?</translation>
<translation id="137651782282853227">Les adresses enregistrées s'afficheront ici</translation>
<translation id="1376771218494401509">Nommer la &amp;fenêtre</translation>
<translation id="1377600615067678409">Ignorer pour le moment</translation>
@@ -793,7 +793,7 @@ Les autorisations que vous avez déjà accordées aux applis peuvent s'appliquer
<translation id="1753905327828125965">Les + visités</translation>
<translation id="1755601632425835748">Taille du texte</translation>
<translation id="1755872274219796698">Transférer les mots de passe</translation>
-<translation id="1757132445735080748">Pour terminer la configuration de Linux, mettez à jour Chrome OS Flex et réessayez.</translation>
+<translation id="1757132445735080748">Pour terminer la configuration de Linux, mettez à jour ChromeOS Flex et réessayez.</translation>
<translation id="1757301747492736405">Désinstallation en attente</translation>
<translation id="175772926354468439">Activer le thème</translation>
<translation id="17584710573359123">Afficher sur le Chrome Web Store</translation>
@@ -1245,7 +1245,7 @@ Vous pouvez gérer les paramètres de ce compte en installant l'application Fami
<translation id="217576141146192373">Impossible d'ajouter une imprimante. Vérifiez la configuration de votre imprimante et réessayez.</translation>
<translation id="2175927920773552910">Code QR</translation>
<translation id="2177950615300672361">Onglet de navigation privée : <ph name="TAB_NAME" /></translation>
-<translation id="2178585470774851578">Les fonctionnalités de débogage de Chrome OS Flex que vous activez configurent le daemon sshd et autorisent le démarrage à partir de clés USB.</translation>
+<translation id="2178585470774851578">Les fonctionnalités de débogage de ChromeOS Flex que vous activez configurent le daemon sshd et autorisent le démarrage à partir de clés USB.</translation>
<translation id="2178614541317717477">Autorité de certification compromise</translation>
<translation id="2179416702468739594">Recherche des profils disponibles… Votre réseau mobile risque de se déconnecter pendant quelques minutes.</translation>
<translation id="2180620921879609685">Bloquer du contenu sur n'importe quelle page</translation>
@@ -1376,7 +1376,7 @@ Vous pouvez gérer les paramètres de ce compte en installant l'application Fami
<translation id="2301402091755573488">Onglet partagé</translation>
<translation id="2302342861452486996"><ph name="BEGIN_H3" />Fonctionnalités de débogage<ph name="END_H3" />
<ph name="BR" />
- Vous pouvez activer les fonctionnalités de débogage sur votre appareil Chrome OS Flex pour y installer et y tester du code personnalisé. Vous pourrez ainsi :<ph name="BR" />
+ Vous pouvez activer les fonctionnalités de débogage sur votre appareil ChromeOS Flex pour y installer et y tester du code personnalisé. Vous pourrez ainsi :<ph name="BR" />
<ph name="BEGIN_LIST" />
<ph name="LIST_ITEM" />supprimer la vérification rootfs de façon à pouvoir modifier des fichiers de l'OS ;
<ph name="LIST_ITEM" />activer l'accès SSH à l'appareil à l'aide des touches de test standards afin de pouvoir utiliser des outils comme <ph name="BEGIN_CODE" />cros flash<ph name="END_CODE" /> pour accéder à l'appareil ;
@@ -1502,7 +1502,7 @@ Vous pouvez gérer les paramètres de ce compte en installant l'application Fami
<translation id="2392163307141705938">Tu as atteint la limite de temps définie par un parent pour <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
<translation id="2392369802118427583">Activer</translation>
<translation id="2393136602862631930">Configurer <ph name="APP_NAME" /> sur votre Chromebook</translation>
-<translation id="2393313392064891208">Sommaire des conditions d'utilisation de Google Chrome OS Flex</translation>
+<translation id="2393313392064891208">Sommaire des conditions d'utilisation de Google ChromeOS Flex</translation>
<translation id="2395616325548404795">Votre <ph name="DEVICE_TYPE" /> a bien été enregistré pour bénéficier de la gestion d'entreprise, mais l'envoi d'informations concernant ses éléments et sa position a échoué. Veuillez saisir ces informations manuellement depuis la console d'administration de cet appareil.</translation>
<translation id="2396783860772170191">Saisissez un code à quatre chiffres (entre 0000 et 9999)</translation>
<translation id="2398546389094871088">Utiliser Powerwash ne supprimera pas vos profils eSIM. Accédez à <ph name="LINK_BEGIN" />Paramètres du mobile<ph name="LINK_END" /> pour supprimer manuellement ces profils.</translation>
@@ -1534,7 +1534,7 @@ Vous pouvez gérer les paramètres de ce compte en installant l'application Fami
<translation id="2433836460518180625">Déverrouiller l'appareil uniquement</translation>
<translation id="2434449159125086437">Échec de la configuration de l'imprimante. Veuillez vérifier la configuration, puis réessayer.</translation>
<translation id="2434758125294431199">Sélectionnez qui peut partager des fichiers avec vous</translation>
-<translation id="2435137177546457207">Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS Flex</translation>
+<translation id="2435137177546457207">Conditions d'utilisation supplémentaires de Google Chrome et ChromeOS Flex</translation>
<translation id="2435248616906486374">Réseau déconnecté.</translation>
<translation id="2435457462613246316">Afficher le mot de passe</translation>
<translation id="2439626940657133600"><ph name="WINDOW_TITLE" /> : chargement…</translation>
@@ -1650,7 +1650,7 @@ Vous pouvez gérer les paramètres de ce compte en installant l'application Fami
<translation id="2531530485656743109"><ph name="BEGIN_PARAGRAPH1" />Un problème est survenu. <ph name="DEVICE_OS" /> n'a pas pu être installé.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Pour obtenir de l'aide, rendez-vous sur g.co/flex/InstallErrors.<ph name="END_PARAGRAPH2" /></translation>
<translation id="2532144599248877204">Prolonge l'autonomie de la batterie en maintenant son niveau à environ 80 %. La batterie se rechargera complètement avant que l'appareil ne soit débranché de sa source d'alimentation.</translation>
-<translation id="2532198298278778531">Gérer le DNS sécurisé dans les paramètres de Chrome OS Flex</translation>
+<translation id="2532198298278778531">Gérer le DNS sécurisé dans les paramètres de ChromeOS Flex</translation>
<translation id="2532589005999780174">Mode Contraste élevé</translation>
<translation id="2533649878691950253">Votre position exacte est bloquée pour ce site, car vous refusez habituellement de la communiquer</translation>
<translation id="253434972992662860">&amp;Pause</translation>
@@ -3145,7 +3145,7 @@ Souhaitez-vous lancer <ph name="CONTROL_PANEL_APPLET_NAME" /> ?</translation>
<translation id="3988996860813292272">Sélectionner un fuseau horaire</translation>
<translation id="399179161741278232">Importés</translation>
<translation id="3993887353483242788">Synchronisez votre <ph name="DEVICE_TYPE" /> pour que vos préférences soient appliquées sur n'importe quel appareil lorsque vous vous connectez avec votre compte Google. Les préférences regroupent les applis, les paramètres, les mots de passe Wi-Fi, les langues, le fond d'écran, les raccourcis clavier, etc.</translation>
-<translation id="3994318741694670028">Malheureusement, votre ordinateur est configuré avec un ID matériel incorrect. Cela empêche l'installation des derniers correctifs de sécurité sur Chrome OS Flex et rend votre ordinateur <ph name="BEGIN_BOLD" />potentiellement vulnérable aux attaques malveillantes<ph name="END_BOLD" />.</translation>
+<translation id="3994318741694670028">Malheureusement, votre ordinateur est configuré avec un ID matériel incorrect. Cela empêche l'installation des derniers correctifs de sécurité sur ChromeOS Flex et rend votre ordinateur <ph name="BEGIN_BOLD" />potentiellement vulnérable aux attaques malveillantes<ph name="END_BOLD" />.</translation>
<translation id="3994374631886003300">Déverrouillez votre téléphone et rapprochez-le de votre <ph name="DEVICE_TYPE" /> pour le déverrouiller.</translation>
<translation id="3994878504415702912">&amp;Zoom</translation>
<translation id="3995138139523574647">Appareil USB de type C (port situé sur la droite de l'appareil, à l'arrière)</translation>
@@ -3618,7 +3618,7 @@ Souhaitez-vous lancer <ph name="CONTROL_PANEL_APPLET_NAME" /> ?</translation>
<translation id="4501530680793980440">Confirmer la suppression</translation>
<translation id="4502423230170890588">Supprimer de cet appareil</translation>
<translation id="4502477450742595012">Effectuez un clic droit sur un onglet et sélectionnez "Ajouter l'onglet à un nouveau groupe"</translation>
-<translation id="4503748371388753124">Votre ordinateur comprend un dispositif de sécurité avec module de plate-forme sécurisée (TPM, Trusted Platform Module) qui permet d'implémenter plusieurs fonctionnalités de sécurité critiques dans Chrome OS Flex. Consultez le centre d'aide Chromebook pour en savoir plus : https://support.google.com/chromebook/?p=tpm</translation>
+<translation id="4503748371388753124">Votre ordinateur comprend un dispositif de sécurité avec module de plate-forme sécurisée (TPM, Trusted Platform Module) qui permet d'implémenter plusieurs fonctionnalités de sécurité critiques dans ChromeOS Flex. Consultez le centre d'aide Chromebook pour en savoir plus : https://support.google.com/chromebook/?p=tpm</translation>
<translation id="4504374760782163539">{COUNT,plural, =0{Les cookies sont autorisés}=1{Les cookies sont autorisés, 1 exception}one{Les cookies sont autorisés, {COUNT} exception}other{Les cookies sont autorisés, {COUNT} exceptions}}</translation>
<translation id="4504940961672722399">Utilisez cette extension en cliquant sur cette icône ou en appuyant sur <ph name="EXTENSION_SHORTCUT" /></translation>
<translation id="450552327874992444">Terme déjà ajouté</translation>
@@ -3990,7 +3990,7 @@ Souhaitez-vous lancer <ph name="CONTROL_PANEL_APPLET_NAME" /> ?</translation>
<translation id="4876273079589074638">Aidez nos ingénieurs à trouver l'origine de ce plantage pour y apporter une solution. Dans la mesure du possible, indiquez précisément les étapes suivies. Chaque détail compte.</translation>
<translation id="4876895919560854374">Verrouiller et déverrouiller l'écran</translation>
<translation id="4877276003880815204">Examiner les éléments</translation>
-<translation id="4877652723592270843">Voulez-vous activer ChromeVox, le lecteur d'écran intégré pour Chrome OS Flex ? Si oui, appuyez sur les deux boutons de volume pendant cinq secondes.</translation>
+<translation id="4877652723592270843">Voulez-vous activer ChromeVox, le lecteur d'écran intégré pour ChromeOS Flex ? Si oui, appuyez sur les deux boutons de volume pendant cinq secondes.</translation>
<translation id="4878634973244289103">Impossible d'envoyer les commentaires. Veuillez réessayer plus tard.</translation>
<translation id="4878653975845355462">Votre administrateur a désactivé les arrière-plans personnalisés</translation>
<translation id="4878718769565915065">Échec de l'ajout d'une empreinte à cette clé de sécurité</translation>
@@ -4121,7 +4121,7 @@ Souhaitez-vous lancer <ph name="CONTROL_PANEL_APPLET_NAME" /> ?</translation>
<translation id="5008936837313706385">Nom de l'activité</translation>
<translation id="5009463889040999939">Changement de nom du profil… Cela peut prendre quelques minutes.</translation>
<translation id="5010043101506446253">Autorité de certification</translation>
-<translation id="501057610015570208">L'appli dont le fichier manifeste comporte un attribut "kiosk_only" doit être installée en mode Kiosque pour Chrome OS Flex</translation>
+<translation id="501057610015570208">L'appli dont le fichier manifeste comporte un attribut "kiosk_only" doit être installée en mode Kiosque pour ChromeOS Flex</translation>
<translation id="5015344424288992913">Résolution du proxy...</translation>
<translation id="5016491575926936899">Vous pouvez envoyer des SMS depuis votre ordinateur, partager votre connexion Internet, répondre à une conversation depuis une notification et déverrouiller votre <ph name="DEVICE_TYPE" /> avec votre téléphone.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
<translation id="5017643436812738274">Vous pouvez parcourir les pages à l'aide d'un curseur de texte. Pour désactiver la navigation au clavier, appuyez sur Ctrl+Recherche+7.</translation>
@@ -4226,7 +4226,7 @@ Souhaitez-vous lancer <ph name="CONTROL_PANEL_APPLET_NAME" /> ?</translation>
<translation id="5121130586824819730">Votre disque dur est saturé. Veuillez enregistrer à un autre emplacement ou libérer de l'espace sur le disque dur.</translation>
<translation id="5123433949759960244">Basket-ball</translation>
<translation id="5125751979347152379">URL incorrecte</translation>
-<translation id="5125967981703109366">À propos de cette carte</translation>
+<translation id="5125967981703109366">À propos de cette fiche</translation>
<translation id="5126611267288187364">Afficher les modifications</translation>
<translation id="5127242257756472928">Non autorisé à utiliser les infos au sujet de vos écrans pour ouvrir et placer des fenêtres</translation>
<translation id="5127620150973591153">Code de connexion sécurisée : <ph name="TOKEN" /></translation>
@@ -4545,7 +4545,7 @@ Vous pouvez associer plusieurs contacteurs à cette action.</translation>
<translation id="5449716055534515760">Fe&amp;rmer la fenêtre</translation>
<translation id="5452976525201205853"><ph name="LANGUAGE" /> (fonctionne hors connexion)</translation>
<translation id="5454166040603940656">avec <ph name="PROVIDER" /></translation>
-<translation id="5455603387986949153">Lire les numéros de série des appareils et des composants Chrome OS Flex.</translation>
+<translation id="5455603387986949153">Lire les numéros de série des appareils et des composants ChromeOS Flex.</translation>
<translation id="5457113250005438886">Non valide</translation>
<translation id="5457459357461771897">Accéder aux photos, à la musique et aux autres fichiers multimédias stockés sur votre ordinateur et les supprimer</translation>
<translation id="5458214261780477893">Dvorak</translation>
@@ -4984,7 +4984,7 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation>
<translation id="5889282057229379085">Le nombre maximal d'autorités de certification intermédiaires a été dépassé : <ph name="NUM_INTERMEDIATE_CA" /></translation>
<translation id="5891688036610113830">Réseaux Wi-Fi favoris</translation>
<translation id="5895138241574237353">Redémarrer</translation>
-<translation id="5895335062901455404">Vous retrouverez votre activité et vos préférences enregistrées sur tous les appareils Chrome OS Flex où vous vous connecterez avec votre compte Google. Vous pouvez sélectionner les éléments à synchroniser dans les paramètres.</translation>
+<translation id="5895335062901455404">Vous retrouverez votre activité et vos préférences enregistrées sur tous les appareils ChromeOS Flex où vous vous connecterez avec votre compte Google. Vous pouvez sélectionner les éléments à synchroniser dans les paramètres.</translation>
<translation id="5896436821193322561">Ne pas autoriser</translation>
<translation id="5900302528761731119">Photo du profil Google</translation>
<translation id="590036993063074298">Informations sur la qualité de la duplication d'écran</translation>
@@ -5905,7 +5905,7 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation>
<translation id="6805647936811177813">Connectez-vous à <ph name="TOKEN_NAME" /> pour importer le certificat client de <ph name="HOST_NAME" /></translation>
<translation id="680572642341004180">Activer le suivi RLZ pour <ph name="SHORT_PRODUCT_OS_NAME" /></translation>
<translation id="6808039367995747522">Pour continuer, insérez la clé de sécurité et appuyez dessus</translation>
-<translation id="6808166974213191158">Écriture des images système Chrome OS Flex</translation>
+<translation id="6808166974213191158">Écriture des images système ChromeOS Flex</translation>
<translation id="6808193438228982088">Renard</translation>
<translation id="6809470175540814047">Ouvrir dans une fenêtre de navigation privée</translation>
<translation id="6809656734323672573">Si vous êtes d'accord, l'Assistant Google attendra le mot clé "Hey Google" en mode veille et utilisera Voice Match pour vérifier que c'est bien vous qui parlez.
@@ -6537,7 +6537,7 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation>
<translation id="744341768939279100">Créer un profil</translation>
<translation id="744366959743242014">Chargement des données en cours. Cette opération peut prendre quelques secondes.</translation>
<translation id="7443806024147773267">Accédez à vos mots de passe chaque fois que vous êtes connecté à votre compte Google</translation>
-<translation id="7444970023873202833">Redécouvrez encore plus de souvenirs dans Google Photos</translation>
+<translation id="7444970023873202833">Découvrez plus de souvenirs dans Google Photos</translation>
<translation id="7444983668544353857">Désactiver <ph name="NETWORKDEVICE" /></translation>
<translation id="7448430327655618736">Installer automatiquement des applications</translation>
<translation id="7449752890690775568">Supprimer le mot de passe ?</translation>
@@ -6853,10 +6853,10 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation>
<translation id="7744192722284567281">Détecté lors d'une violation des données</translation>
<translation id="7744649840067671761">Appuyez sur un nouveau contacteur ou une nouvelle touche du clavier pour commencer l'association.
Appuyez sur un contacteur ou une touche associé(e) pour supprimer l'association.</translation>
-<translation id="7746739418892731373">Vous voyez une sélection de photos et de vidéos de votre bibliothèque Google Photos. Vous pouvez contrôler ce qui s'affiche dans cette sélection sur <ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" />.
+<translation id="7746739418892731373">Ceci est une sélection de photos et vidéos de votre bibliothèque Google Photos. Vous pouvez contrôler ce qui s'affiche sur <ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" />.
<ph name="BREAK" />
<ph name="BREAK" />
- Vous pouvez gérer les paramètres de cette carte dans le menu associé ou voir plus d'options dans "Personnaliser Chrome".</translation>
+ Vous pouvez gérer les paramètres de cette fiche depuis son menu ou voir plus d'options dans "Personnaliser Chrome".</translation>
<translation id="7750228210027921155">Mode PIP (Picture-in-Picture)</translation>
<translation id="7751260505918304024">Tout afficher</translation>
<translation id="7751619076382363711">Vous n'avez supprimé aucun site</translation>
@@ -6884,7 +6884,7 @@ Appuyez sur un contacteur ou une touche associé(e) pour supprimer l'association
<translation id="7768526219335215384"><ph name="ORIGIN" /> pourra consulter les fichiers du dossier <ph name="FOLDERNAME" /></translation>
<translation id="7768770796815395237">Modifier</translation>
<translation id="7768784765476638775">Sélectionner pour prononcer</translation>
-<translation id="7770406201819593386">Exécuter des tests de diagnostic Chrome OS Flex.</translation>
+<translation id="7770406201819593386">Exécuter des tests de diagnostic ChromeOS Flex.</translation>
<translation id="7770450735129978837">Clic droit de la souris</translation>
<translation id="7770566005197683248">Adapté en cas de bonne luminosité.</translation>
<translation id="7770612696274572992">Image copiée depuis un autre appareil</translation>
@@ -6978,7 +6978,7 @@ Appuyez sur un contacteur ou une touche associé(e) pour supprimer l'association
<translation id="78526636422538552">La fonctionnalité d'ajout d'autres comptes Google est désactivée</translation>
<translation id="7853747251428735">Plus d'outi&amp;ls</translation>
<translation id="7855678561139483478">Déplacer l'onglet vers une nouvelle fenêtre</translation>
-<translation id="7857004848504343806">Votre ordinateur contient un module de sécurité qui permet d'implémenter de nombreuses fonctionnalités de sécurité critiques dans Chrome OS Flex. Consultez le centre d'aide Chromebook pour en savoir plus : https://support.google.com/chromebook/?p=sm</translation>
+<translation id="7857004848504343806">Votre ordinateur contient un module de sécurité qui permet d'implémenter de nombreuses fonctionnalités de sécurité critiques dans ChromeOS Flex. Consultez le centre d'aide Chromebook pour en savoir plus : https://support.google.com/chromebook/?p=sm</translation>
<translation id="7857093393627376423">Suggestions écrites</translation>
<translation id="7857949311770343000">Est-ce la page Nouvel onglet que vous attendiez ?</translation>
<translation id="7858328180167661092"><ph name="APP_NAME" /> (Windows)</translation>
@@ -7146,7 +7146,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="8017679124341497925">Raccourci modifié</translation>
<translation id="8018298733481692628">Voulez-vous supprimer ce profil ?</translation>
<translation id="8018313076035239964">Contrôler les informations que les sites Web peuvent utiliser et le contenu qu'ils peuvent afficher</translation>
-<translation id="8023133589013344428">Gérer les langues dans les paramètres de Chrome OS Flex</translation>
+<translation id="8023133589013344428">Gérer les langues dans les paramètres de ChromeOS Flex</translation>
<translation id="8023801379949507775">Mettre à jour les extensions maintenant</translation>
<translation id="8025151549289123443">Écran de verrouillage et connexion</translation>
<translation id="8026334261755873520">Effacer les données de navigation</translation>
@@ -7200,7 +7200,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="8062844841289846053">{COUNT,plural, =1{1 feuille de papier}one{{COUNT} feuille de papier}other{{COUNT} feuilles de papier}}</translation>
<translation id="8063235345342641131">Avatar vert par défaut</translation>
<translation id="8063535366119089408">Afficher le fichier</translation>
-<translation id="8064015586118426197">Chrome OS Flex</translation>
+<translation id="8064015586118426197">ChromeOS Flex</translation>
<translation id="8064279191081105977">Groupe <ph name="GROUP_NAME" /> - <ph name="GROUP_CONTENTS" /> - <ph name="COLLAPSED_STATE" /></translation>
<translation id="8066444921260601116">Boîte de dialogue de connexion</translation>
<translation id="8070662218171013510">Retour haptique</translation>
@@ -7761,7 +7761,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ou <ph name="RE_SCAN_LINK" /></translation>
<translation id="8648408795949963811">Température des couleurs de l'Éclairage nocturne</translation>
<translation id="8648544143274677280"><ph name="SITE_NAME" /> souhaite obtenir les autorisations suivantes : <ph name="FIRST_PERMISSION" /> et <ph name="SECOND_PERMISSION" />, entre autres</translation>
-<translation id="864892689521194669">Contribuer à améliorer les fonctionnalités et les performances de Chrome OS Flex</translation>
+<translation id="864892689521194669">Contribuer à améliorer les fonctionnalités et les performances de ChromeOS Flex</translation>
<translation id="8650543407998814195">Bien que vous ne puissiez plus accéder à votre ancien profil, vous pouvez quand même le supprimer.</translation>
<translation id="8651585100578802546">Forcer l'actualisation de cette page</translation>
<translation id="8652400352452647993">Erreur relative à la mise en package des extensions</translation>
@@ -7859,7 +7859,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="8737709691285775803">Shill</translation>
<translation id="8737914367566358838">Sélectionner la langue dans laquelle la page doit être traduite</translation>
<translation id="8740247629089392745">Vous pouvez remettre ce Chromebook à <ph name="SUPERVISED_USER_NAME" />. La configuration est presque terminée. Ensuite, place à l'exploration !</translation>
-<translation id="8740672167979365981">Mise à jour de Chrome OS Flex requise</translation>
+<translation id="8740672167979365981">Mise à jour de ChromeOS Flex requise</translation>
<translation id="8741944563400125534">Guide de configuration de Switch Access</translation>
<translation id="8742998548129056176">Ces informations d'ordre général concernent votre appareil et l'utilisation que vous en faites (comme le niveau de la batterie, les erreurs, ainsi que l'activité du système et des applications). Elles serviront à améliorer Android, et certaines données globales aideront également nos développeurs d'applications et nos partenaires tels que les développeurs Android, à perfectionner leurs applications et leurs produits.</translation>
<translation id="8746654918629346731">Vous avez déjà fait une demande pour "<ph name="EXTENSION_NAME" />"</translation>
@@ -7872,7 +7872,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="8751419011949619279">Ouvrir les sites Web dans les applis installées sur votre appareil</translation>
<translation id="8752451679755290210">Se déplacer automatiquement entre les éléments</translation>
<translation id="8753868764580670305">Voir et gérer les mots de passe enregistrés sur cet appareil</translation>
-<translation id="8753948258138515839">L'appli Fichiers vous permet d'accéder rapidement aux fichiers que vous avez enregistrés dans Google Drive, sur un périphérique de stockage externe ou sur votre appareil Chrome OS Flex.</translation>
+<translation id="8753948258138515839">L'appli Fichiers vous permet d'accéder rapidement aux fichiers que vous avez enregistrés dans Google Drive, sur un périphérique de stockage externe ou sur votre appareil ChromeOS Flex.</translation>
<translation id="8754200782896249056">&lt;p&gt;Lorsque vous exécutez <ph name="PRODUCT_NAME" /> dans un environnement de bureau compatible, les paramètres proxy du système sont utilisés. Cependant, soit votre système n'est pas compatible, soit un problème est survenu lors du lancement de votre configuration système.&lt;/p&gt;
&lt;p&gt;Vous avez toujours la possibilité d'effectuer la configuration via la ligne de commande. Pour plus d'informations sur les indicateurs et les variables d'environnement, veuillez vous reporter à &lt;code&gt;man <ph name="PRODUCT_BINARY_NAME" />&lt;/code&gt;.&lt;/p&gt;</translation>
@@ -7913,7 +7913,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="8785622406424941542">Stylet</translation>
<translation id="8786824282808281903">Quand votre enfant voit cette icône, il peut utiliser l'empreinte pour s'identifier ou approuver des achats.</translation>
<translation id="8787575090331305835">{NUM_TABS,plural, =1{Groupe sans nom - 1 onglet}one{Groupe sans nom - # onglet}other{Groupe sans nom - # onglets}}</translation>
-<translation id="8791534160414513928">Envoyer une demande "Interdire le suivi" pendant la navigation</translation>
+<translation id="8791534160414513928">Envoyer une requête "Interdire le suivi" pendant la navigation</translation>
<translation id="879413103056696865">Lors de l'utilisation du point d'accès, votre <ph name="PHONE_NAME" /> :</translation>
<translation id="8795916974678578410">Nouvelle fenêtre</translation>
<translation id="8797459392481275117">Ne jamais traduire ce site</translation>
@@ -8311,7 +8311,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="9174401638287877180">Envoyer des données d'utilisation et de diagnostic. Contribuez à l'amélioration de l'expérience de votre enfant sur Android en envoyant automatiquement à Google des données liées à l'utilisation de l'appareil et des applications, ainsi que des données de diagnostic. Ces informations ne seront pas utilisées pour identifier votre enfant, mais elles nous aideront à améliorer, entre autres, la stabilité du système et des applications. Certaines données globales seront également utiles aux développeurs des applications Google et à nos partenaires tels que les développeurs Android. Si vous avez activé le paramètre "Activité supplémentaire sur le Web et les applications" pour votre enfant, ces données peuvent être enregistrées dans son compte Google.</translation>
<translation id="9176476835295860688">Envoyer des données d'utilisation et de diagnostic. À l'heure actuelle, cet appareil envoie automatiquement à Google des données relatives aux diagnostics et à l'utilisation de l'appareil et des applications. Ce processus permettra d'améliorer, entre autres, la stabilité du système et des applications. Certaines données globales seront également utiles aux développeurs des applications Google et à nos partenaires, tels que les développeurs Android. Ce <ph name="BEGIN_LINK1" />paramètre<ph name="END_LINK1" /> est appliqué par le propriétaire. Si vous activez le paramètre relatif à l'activité supplémentaire sur le Web et les applications, ces données peuvent être enregistrées dans votre compte Google. <ph name="BEGIN_LINK2" />En savoir plus<ph name="END_LINK2" /></translation>
<translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Appareil Bluetooth connecté</translation>
-<translation id="9177949831069307748">Lire les infos provenant de l'appareil Chrome OS Flex et ses données.</translation>
+<translation id="9177949831069307748">Lire les infos provenant de l'appareil ChromeOS Flex et ses données.</translation>
<translation id="9178061802301856367">Supprimer les données de connexion</translation>
<translation id="9179524979050048593">Nom d'utilisateur sur l'écran de connexion</translation>
<translation id="9180281769944411366">Cette opération peut prendre quelques minutes. Démarrage du conteneur Linux…</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_gl.xtb b/chromium/chrome/app/resources/generated_resources_gl.xtb
index 5bdf99d8171..64f84426b63 100644
--- a/chromium/chrome/app/resources/generated_resources_gl.xtb
+++ b/chromium/chrome/app/resources/generated_resources_gl.xtb
@@ -28,7 +28,7 @@
<translation id="1029317248976101138">Zoom</translation>
<translation id="1031362278801463162">Cargando vista previa</translation>
<translation id="1032605640136438169">Revísaas</translation>
-<translation id="103279545524624934">Libera espazo en disco para iniciar as aplicacións de Android.</translation>
+<translation id="103279545524624934">Libera espazo en disco para iniciar as aplicacións para Android.</translation>
<translation id="1033780634303702874">Acceder aos teus dispositivos en serie</translation>
<translation id="1034484273907870301">Franxa de pestanas con miniaturas para o modo de tableta</translation>
<translation id="1036348656032585052">Desactivar</translation>
@@ -73,7 +73,7 @@
<translation id="1071917609930274619">Codificación de datos</translation>
<translation id="1072700771426194907">Detectouse un dispositivo USB</translation>
<translation id="107278043869924952">Usar PIN ademais do contrasinal</translation>
-<translation id="1073264809281558926"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos Chrome OS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes poden incluírse datos sobre as funcións que se utilizaron e o espazo de memoria que adoita empregarse, así como datos de uso e diagnóstico das aplicacións Android, entre outros. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
+<translation id="1073264809281558926"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos Chrome OS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes poden incluírse datos sobre as funcións que se utilizaron e o espazo de memoria que adoita empregarse, así como datos de uso e diagnóstico das aplicacións para Android, entre outros. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Podes permitir ou deter o envío destes informes cando queiras desde a configuración do dispositivo Chrome OS do teu fillo ou filla. Se administras un dominio, podes cambiar esta opción de configuración na consola de administración.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />A desactivación desta función non afecta á capacidade deste dispositivo de enviar a información necesaria para servizos esenciais, como as actualizacións do sistema e a seguranza.<ph name="END_PARAGRAPH3" />
<ph name="BEGIN_PARAGRAPH4" />Se está activada a opción Actividade web e das aplicacións na Conta de Google da túa filla ou fillo, pódense gardar nela os seus datos. Consulta máis información acerca destas opcións de configuración e sobre como axustalas en families.google.com.<ph name="END_PARAGRAPH4" />
@@ -421,7 +421,7 @@
<translation id="1420732223884894666">Accede ao contido multimedia e ás fotos recentes do teu teléfono desde o dispositivo <ph name="DEVICE_TYPE" /></translation>
<translation id="1420834118113404499">Licenzas multimedia</translation>
<translation id="1420920093772172268"><ph name="TURN_ON_BLUETOOTH_LINK" /> para permitir a sincronización</translation>
-<translation id="1421934779300263861">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de ChromeOS, permite que se lle envíen a Google de forma automática os informes de fallos, así como os datos de uso e de diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións Android. Se tes activada a opción Actividade web e das aplicacións na Conta de Google, pódense gardar nela os teus datos de Android.</translation>
+<translation id="1421934779300263861">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de ChromeOS, permite que se lle envíen a Google de forma automática os informes de fallos, así como os datos de uso e de diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións para Android. Se tes activada a opción Actividade web e das aplicacións na Conta de Google, pódense gardar nela os teus datos de Android.</translation>
<translation id="1422159345171879700">Cargar scripts non seguros</translation>
<translation id="1423716227250567100">Ao realizar esta acción, ocorrerá o seguinte:
<ph name="LINE_BREAKS" />
@@ -455,9 +455,9 @@
<translation id="1442851588227551435">Definir como activo un tícket de Kerberos</translation>
<translation id="1444628761356461360">Esta configuración está xestionada polo propietario do dispositivo, <ph name="OWNER_EMAIL" />.</translation>
<translation id="144518587530125858">Non se puido cargar "<ph name="IMAGE_PATH" />" para o tema.</translation>
-<translation id="1448264954024227422">Podes usar esta conta con aplicacións Android. Se queres engadir unha conta para outra persoa, <ph name="LINK_BEGIN" />engade unha persoa nova<ph name="LINK_END" /> ao teu dispositivo (<ph name="DEVICE_TYPE" />).
+<translation id="1448264954024227422">Podes usar esta conta con aplicacións para Android. Se queres engadir unha conta para outra persoa, <ph name="LINK_BEGIN" />engade unha persoa nova<ph name="LINK_END" /> ao teu dispositivo (<ph name="DEVICE_TYPE" />).
-Pode que se lle apliquen a esta conta os permisos que xa lles concedeses ás aplicacións. Podes controlar os permisos correspondentes ás aplicacións Android en <ph name="APPS_LINK_BEGIN" />Configuración das aplicacións<ph name="APPS_LINK_END" />.</translation>
+Pode que se lle apliquen a esta conta os permisos que xa lles concedeses ás aplicacións. Podes controlar os permisos correspondentes ás aplicacións para Android en <ph name="APPS_LINK_BEGIN" />Configuración das aplicacións<ph name="APPS_LINK_END" />.</translation>
<translation id="1448779317883494811">Ferramenta de pincel</translation>
<translation id="1449191289887455076">Preme de novo <ph name="CURRENTKEY" /> para confirmar a asignación e <ph name="RESPONSE" /></translation>
<translation id="1451375123200651445">Páxina web (nun só ficheiro)</translation>
@@ -804,11 +804,11 @@ Pode que se lle apliquen a esta conta os permisos que xa lles concedeses ás apl
<translation id="176587472219019965">&amp;Nova ventá</translation>
<translation id="1766575458646819543">Saíches do modo de pantalla completa</translation>
<translation id="1766957085594317166">Garda contrasinais de forma segura na túa Conta de Google e non volvas escribilos nunca</translation>
-<translation id="1767043563165955993">Usar con aplicacións Android</translation>
+<translation id="1767043563165955993">Usar con aplicacións para Android</translation>
<translation id="1768212860412467516">Envía comentarios sobre este experimento: <ph name="EXPERIMENT_NAME" />.</translation>
<translation id="1768278914020124551">Produciuse un problema ao contactar co servidor de inicio de sesión. Comproba a conexión de rede, verifica o dominio e, despois, volve tentalo.</translation>
<translation id="1769104665586091481">Abrir a ligazón nunha &amp;ventá nova</translation>
-<translation id="177053719077591686">Facer unha copia de seguranza das aplicacións Android en Google Drive.</translation>
+<translation id="177053719077591686">Facer unha copia de seguranza das aplicacións para Android en Google Drive.</translation>
<translation id="177336675152937177">Datos da aplicación aloxada</translation>
<translation id="1775706469381199282">Non permitir que os sitios utilicen JavaScript</translation>
<translation id="1776712937009046120">Engadir usuario</translation>
@@ -1161,7 +1161,7 @@ https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featu
<translation id="2100273922101894616">Inicio de sesión automático</translation>
<translation id="2101225219012730419">Versión:</translation>
<translation id="2102396546234652240">Non permitir que os sitios utilicen o teu micrófono</translation>
-<translation id="2102495993840063010">Aplicacións de Android</translation>
+<translation id="2102495993840063010">Aplicacións para Android</translation>
<translation id="2105809836724866556">Ocultouse <ph name="MODULE_TITLE" /></translation>
<translation id="2108349519800154983">{COUNT,plural, =1{Número de teléfono}other{# números de teléfono}}</translation>
<translation id="211144231511833662">Borrar tipos</translation>
@@ -1171,7 +1171,7 @@ https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featu
<translation id="2113479184312716848">Abrir &amp;ficheiro...</translation>
<translation id="2113921862428609753">Acceso a información de autoridades</translation>
<translation id="2114326799768592691">Volver cargar &amp;marco</translation>
-<translation id="2114413269775311385">Usar esta conta con aplicacións Android. Podes controlar os permisos correspondentes ás aplicacións Android en <ph name="LINK_BEGIN" />Configuración das aplicacións<ph name="LINK_END" />.</translation>
+<translation id="2114413269775311385">Usar esta conta con aplicacións para Android. Podes controlar os permisos correspondentes ás aplicacións para Android en <ph name="LINK_BEGIN" />Configuración das aplicacións<ph name="LINK_END" />.</translation>
<translation id="2114820389966440614">Mostrar aquí Destacadas recentes e outras lembranzas</translation>
<translation id="2114896190328250491">Foto de <ph name="NAME" /></translation>
<translation id="2114995631896158695">Non se inseriu ningunha tarxeta SIM</translation>
@@ -1204,7 +1204,7 @@ https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featu
<translation id="2143765403545170146">Mostrar sempre a barra de ferramentas no modo de pantalla completa</translation>
<translation id="2143778271340628265">Configuración manual do proxy</translation>
<translation id="2144536955299248197">Visualizador de certificados: <ph name="CERTIFICATE_NAME" /></translation>
-<translation id="2144557304298909478">Programación de aplicacións de Android en Linux</translation>
+<translation id="2144557304298909478">Programación de aplicacións para Android en Linux</translation>
<translation id="2146263598007866206">Os sitios poderían descargar automaticamente conxuntos de ficheiros relacionados para aforrarche tempo</translation>
<translation id="2147151613919729065">Para borrar o historial do modo Convidados, pecha todas as ventás da sesión de convidado.</translation>
<translation id="2147218225094845757">Ocultar panel lateral</translation>
@@ -1411,7 +1411,7 @@ Se máis tarde decides que prefires que o teu fillo ou filla non utilice Voice M
<translation id="2316129865977710310">Non, grazas</translation>
<translation id="2317842250900878657"><ph name="PROGRESS_PERCENT" /> % listo</translation>
<translation id="2318143611928805047">Tamaño de papel</translation>
-<translation id="2318817390901984578">Para usar as aplicacións de Android, carga e actualiza o dispositivo <ph name="DEVICE_TYPE" />.</translation>
+<translation id="2318817390901984578">Para usar as aplicacións para Android, carga e actualiza o dispositivo <ph name="DEVICE_TYPE" />.</translation>
<translation id="2319993584768066746">Fotos na pantalla de inicio de sesión</translation>
<translation id="2320295602967756579">Activar tema claro</translation>
<translation id="2322193970951063277">Cabeceiras e pés de páxina</translation>
@@ -1427,7 +1427,7 @@ Se máis tarde decides que prefires que o teu fillo ou filla non utilice Voice M
<translation id="2328561734797404498">Reinicia o teu dispositivo para utilizar <ph name="APP_NAME" />.</translation>
<translation id="2328636661627946415">Estás no modo de incógnito, os sitios só poden utilizar as cookies para consultar a actividade de navegación que levaches a cabo no seu propio sitio. As cookies elimínanse ao final da sesión do modo mencionado.</translation>
<translation id="2329597144923131178">Inicia sesión para ter os marcadores, o historial, os contrasinais e o resto da túa configuración en todos os teus dispositivos.</translation>
-<translation id="2330878972945412956"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos Chrome OS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes pode incluírse información como as funcións que utilizas, o espazo de memoria que adoitas empregar, os datos de uso e diagnóstico das aplicacións Android e os erros. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
+<translation id="2330878972945412956"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos Chrome OS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes pode incluírse información como as funcións que utilizas, o espazo de memoria que adoitas empregar, os datos de uso e diagnóstico das aplicacións para Android e os erros. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Podes permitir ou deter o envío destes informes cando queiras desde a configuración do teu dispositivo Chrome OS. Se administras un dominio, podes cambiar esta opción de configuración na consola de administración.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />Se tes activada a opción Actividade web e das aplicacións na Conta de Google, pódense gardar nela os teus datos de Android. Podes consultar os teus datos, eliminalos e cambiar a configuración da conta en account.google.com.<ph name="END_PARAGRAPH3" />
<ph name="BEGIN_PARAGRAPH4" />Se o propietario do dispositivo activa a opción Enviar datos de uso e diagnóstico, é posible que os informes de fallos tamén se carguen en Google.<ph name="END_PARAGRAPH3" /></translation>
@@ -1734,7 +1734,7 @@ Se máis tarde decides que prefires que o teu fillo ou filla non utilice Voice M
<translation id="2626799779920242286">Téntao de novo máis tarde.</translation>
<translation id="2627424346328942291">Non se puido compartir o ficheiro</translation>
<translation id="2628770867680720336">É necesario restablecer a configuración de fábrica deste Chromebook para poder activar a depuración de ADB. <ph name="BEGIN_LINK_LEARN_MORE" />Máis información<ph name="END_LINK_LEARN_MORE" /></translation>
-<translation id="2629227353894235473">Programar aplicacións de Android</translation>
+<translation id="2629227353894235473">Programar aplicacións para Android</translation>
<translation id="2631498379019108537">Mostrar opcións de entrada no estante</translation>
<translation id="2633212996805280240">Queres eliminar "<ph name="EXTENSION_NAME" />"?</translation>
<translation id="263325223718984101"><ph name="PRODUCT_NAME" /> non puido completar a instalación, pero continuará executándose desde a súa imaxe de disco.</translation>
@@ -1906,7 +1906,7 @@ Se máis tarde decides que prefires que o teu fillo ou filla non utilice Voice M
<translation id="2789486458103222910">Aceptar</translation>
<translation id="2791529110887957050">Quitar Linux</translation>
<translation id="2791952154587244007">Produciuse un erro. A aplicación de quiosco non poderá iniciarse automaticamente neste dispositivo.</translation>
-<translation id="2792290659606763004">Queres eliminar as aplicacións de Android?</translation>
+<translation id="2792290659606763004">Queres eliminar as aplicacións para Android?</translation>
<translation id="2792465461386711506">Activar Sincronización de Chrome para acceder ás pestanas recentes de Chrome desde o teléfono</translation>
<translation id="2792697226874849938">Imaxe de restrición</translation>
<translation id="2794233252405721443">O sitio está bloqueado</translation>
@@ -2922,7 +2922,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="380408572480438692">Activar a recompilación de datos de rendemento axudará a Google a mellorar o sistema co tempo. Non se enviarán datos ata que presentes un informe de comentarios (Alt-Maiús-I) e inclúas datos sobre o rendemento. Podes volver a esta pantalla para desactivar a recompilación cando queiras.</translation>
<translation id="3807249107536149332">Non se permite o uso de <ph name="EXTENSION_NAME" /> (ID da extensión "<ph name="EXTENSION_ID" />") nunha pantalla de inicio de sesión.</translation>
<translation id="3807747707162121253">&amp;Cancelar</translation>
-<translation id="3808443763115411087">Programación de aplicacións de Android en Crostini</translation>
+<translation id="3808443763115411087">Programación de aplicacións para Android en Crostini</translation>
<translation id="38089336910894858">Mostrar advertencia antes de saír da pantalla con ⌘Q</translation>
<translation id="3809272675881623365">Coello</translation>
<translation id="3809280248639369696">Alieníxena</translation>
@@ -2968,7 +2968,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="3842552989725514455">Tipo de letra Serif</translation>
<translation id="3843464315703645664">Lista de entidades permitidas internamente</translation>
<translation id="3844888638014364087">Púxose o emoji</translation>
-<translation id="3846116211488856547">Consigue ferramentas para programar sitios web, aplicacións Android etc. A instalación de Linux provocará a descarga de <ph name="DOWNLOAD_SIZE" /> de datos.</translation>
+<translation id="3846116211488856547">Consigue ferramentas para programar sitios web, aplicacións para Android etc. A instalación de Linux provocará a descarga de <ph name="DOWNLOAD_SIZE" /> de datos.</translation>
<translation id="3847319713229060696">Axudar a mellorar a seguranza na Web para todos</translation>
<translation id="3848547754896969219">Abrir nunha ventá do modo de &amp;incógnito</translation>
<translation id="385051799172605136">Atrás</translation>
@@ -3278,7 +3278,7 @@ Podes xestionar a configuración desde o menú da tarxeta ou ver máis opcións
<translation id="4133076602192971179">Abrir a aplicación para cambiar o contrasinal</translation>
<translation id="4135746311382563554">Condicións de servizo adicionais de Google Chrome e Chrome OS</translation>
<translation id="4136203100490971508">A opción Luz nocturna desactivarase automaticamente ao amencer</translation>
-<translation id="41365691917097717">Ao continuar, activarase a depuración de ADB para crear e probar aplicacións de Android. Ten en conta que esta acción permite a instalación de aplicacións de Android non verificadas por Google e que require un restablecemento dos valores de fábrica para desactivarse.</translation>
+<translation id="41365691917097717">Ao continuar, activarase a depuración de ADB para crear e probar aplicacións para Android. Ten en conta que esta acción permite a instalación de aplicacións para Android non verificadas por Google e que require un restablecemento dos valores de fábrica para desactivarse.</translation>
<translation id="4138267921960073861">Mostrar nomes de usuario e fotos na pantalla de inicio de sesión</translation>
<translation id="4138598238327913711">O corrector gramatical só está dispoñible en inglés actualmente</translation>
<translation id="413915106327509564"><ph name="WINDOW_TITLE" />: conectouse o dispositivo HID</translation>
@@ -3339,7 +3339,7 @@ Podes xestionar a configuración desde o menú da tarxeta ou ver máis opcións
<translation id="4210048056321123003">Descargando máquina virtual</translation>
<translation id="421182450098841253">&amp;Mostrar a barra de marcadores</translation>
<translation id="4211851069413100178">Enviar datos de uso e de diagnóstico. Envía automaticamente datos de diagnóstico e de uso do dispositivo e das aplicacións a Google para axudar a mellorar a túa experiencia en Android. Esta información permitirá aumentar a estabilidade do sistema e das aplicacións, e realizar outras melloras. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android. Esta <ph name="BEGIN_LINK1" />opción de configuración<ph name="END_LINK1" /> contrólaa o propietario. O cal pode optar por enviar datos de diagnóstico e uso deste dispositivo a Google. Se está activada a opción Actividade web e das aplicacións adicional, estes datos pódense gardar na túa conta de Google. <ph name="BEGIN_LINK2" />Máis información<ph name="END_LINK2" /></translation>
-<translation id="4211904048067111541">Deixar de usar con aplicacións Android</translation>
+<translation id="4211904048067111541">Deixar de usar con aplicacións para Android</translation>
<translation id="42126664696688958">Exportar</translation>
<translation id="42137655013211669">O servidor non permitiu acceder a este recurso.</translation>
<translation id="4217558091331485702">Analiza este ficheiro antes de abrilo</translation>
@@ -3881,7 +3881,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="4768332406694066911">Tes certificados destas organizacións que te identifican</translation>
<translation id="4770119228883592393">Permiso solicitado; preme ⌘ + Option (Opción) + Down arrow (Frecha abaixo) para responder</translation>
<translation id="4773112038801431077">Actualizar Linux</translation>
-<translation id="4775142426314270551">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de ChromeOS, permite que se lle envíen a Google de forma automática os informes de fallos, así como os datos de uso e de diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións Android. Se está activada a opción Actividade web e das aplicacións na Conta de Google da túa filla ou fillo, pódense gardar nela os seus datos de Android.</translation>
+<translation id="4775142426314270551">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de ChromeOS, permite que se lle envíen a Google de forma automática os informes de fallos, así como os datos de uso e de diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións para Android. Se está activada a opción Actividade web e das aplicacións na Conta de Google da túa filla ou fillo, pódense gardar nela os seus datos de Android.</translation>
<translation id="477647109558161443">Crear acceso directo do escritorio</translation>
<translation id="4776594120007763294">Se queres engadir unha páxina para ler máis adiante, fai clic no botón</translation>
<translation id="4777458362738635055">Os demais usuarios deste dispositivo poden usar esta rede</translation>
@@ -4021,7 +4021,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="4900652253009739885">Non se pode quitar o único interruptor que ten asignada a acción Seleccionar. Preme calquera tecla para <ph name="RESPONSE" />.</translation>
<translation id="4901309472892185668">Seleccionar estado do experimento <ph name="EXPERIMENT_NAME" />.</translation>
<translation id="49027928311173603">A política descargada do servidor non é válida: <ph name="VALIDATION_ERROR" />.</translation>
-<translation id="4904511036057277323">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de Chrome OS, permite que se lle envíen a Google de forma automática os datos de uso e diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións Android. Se está activada a opción Actividade web e das aplicacións na Conta de Google da túa filla ou fillo, pódense gardar nela os seus datos de Android.</translation>
+<translation id="4904511036057277323">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de Chrome OS, permite que se lle envíen a Google de forma automática os datos de uso e diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións para Android. Se está activada a opción Actividade web e das aplicacións na Conta de Google da túa filla ou fillo, pódense gardar nela os seus datos de Android.</translation>
<translation id="4906490889887219338">Configurar ou xestionar sistemas de ficheiros compartidos en rede. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation>
<translation id="4907129260985716018">Escolle cando esta extensión pode ler e cambiar os datos dos teus sitios</translation>
<translation id="4907161631261076876">Este ficheiro non se descarga habitualmente e pode ser perigoso.</translation>
@@ -4037,7 +4037,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="4918086044614829423">Aceptar</translation>
<translation id="4918134162946436591">Mostrar superposición de suxestións</translation>
<translation id="4921348630401250116">Conversión de texto a voz</translation>
-<translation id="492299503953721473">Eliminar aplicacións de Android</translation>
+<translation id="492299503953721473">Eliminar aplicacións para Android</translation>
<translation id="492363500327720082">Desinstalando <ph name="APP_NAME" />…</translation>
<translation id="4924002401726507608">Enviar comentarios</translation>
<translation id="4924352752174756392">12x</translation>
@@ -4112,7 +4112,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="5000922062037820727">Bloqueado (recomendado)</translation>
<translation id="5005498671520578047">Copiar contrasinal</translation>
<translation id="5006118752738286774">Hai 2 anos</translation>
-<translation id="5006218871145547804">ADB para aplicacións de Android en Crostini</translation>
+<translation id="5006218871145547804">ADB para aplicacións para Android en Crostini</translation>
<translation id="5007392906805964215">Revisar</translation>
<translation id="50080882645628821">Quitar perfil</translation>
<translation id="5008936837313706385">Nome da actividade</translation>
@@ -4203,7 +4203,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="5101839224773798795">Facer clic automaticamente cando se deteña o cursor</translation>
<translation id="510695978163689362">Family Link supervisa <ph name="USER_EMAIL" />. Podes engadir contas de centro educativo para acceder a recursos didácticos con supervisión parental.</translation>
<translation id="5107443654503185812">Unha extensión desactivou a opción Navegación segura</translation>
-<translation id="5108967062857032718">Configuración: eliminar aplicacións de Android</translation>
+<translation id="5108967062857032718">Configuración: eliminar aplicacións para Android</translation>
<translation id="5109044022078737958">Atleta</translation>
<translation id="5109816792918100764">Quitar <ph name="LANGUAGE_NAME" /></translation>
<translation id="5111646998522066203">Saír do modo de incógnito</translation>
@@ -4379,7 +4379,7 @@ Código de erro: <ph name="ERROR_CODE" />.</translation>
<translation id="5280335021886535443">Preme |<ph name="ACCELERATOR" />| para enfocar este globo.</translation>
<translation id="5280426389926346830">Queres crear un atallo?</translation>
<translation id="5281013262333731149">Ábrese en: <ph name="OPEN_BROWSER" /></translation>
-<translation id="528208740344463258">Para descargar e utilizar aplicacións Android, primeiro debes instalar esta actualización obrigatoria. Non podes utilizar o dispositivo <ph name="DEVICE_TYPE" /> mentres se está actualizando. O <ph name="DEVICE_TYPE" /> reiniciarase tras finalizar a instalación.</translation>
+<translation id="528208740344463258">Para descargar e utilizar aplicacións para Android, primeiro debes instalar esta actualización obrigatoria. Non podes utilizar o dispositivo <ph name="DEVICE_TYPE" /> mentres se está actualizando. O <ph name="DEVICE_TYPE" /> reiniciarase tras finalizar a instalación.</translation>
<translation id="5282733140964383898">Ao activar a opción Non seguir, incluirase unha solicitude no teu tráfico de navegación. O efecto producido depende de se o sitio web responde á solicitude e da interpretación desta. Por exemplo, algúns sitios web poden responder a esta solicitude mostrándoche anuncios que non estean baseados noutros sitios web que visitases. Moitos sitios web seguirán recompilando e utilizando os teus datos de navegación para, por exemplo, mellorar a seguranza, fornecer contido, anuncios e recomendacións e para crear estatísticas de informes. <ph name="BEGIN_LINK" />Máis información<ph name="END_LINK" /></translation>
<translation id="5283677936944177147">Vaites! Produciuse un erro no sistema e non puido determinar o modelo do dispositivo ou o número de serie.</translation>
<translation id="5284445933715251131">Continuar coa descarga</translation>
@@ -4791,7 +4791,7 @@ Podes asignarlles esta acción a varios interruptores.</translation>
<translation id="5691581861107245578">Recibe suxestións de emojis baseadas no que escribas</translation>
<translation id="5691772641933328258">Non se recoñeceu a impresión dixital</translation>
<translation id="5692183275898619210">Finalizou a impresión</translation>
-<translation id="5695184138696833495">ADB para aplicacións de Android en Linux</translation>
+<translation id="5695184138696833495">ADB para aplicacións para Android en Linux</translation>
<translation id="5696143504434933566">Informar dun uso inadecuado de <ph name="EXTENSION_NAME" /></translation>
<translation id="5696679855467848181">Ficheiro PPD actual en uso: <ph name="PPD_NAME" /></translation>
<translation id="5697832193891326782">Selector de emojis</translation>
@@ -5131,7 +5131,7 @@ Podes asignarlles esta acción a varios interruptores.</translation>
<translation id="6047632800149092791">A sincronización non funciona. Tenta pechar sesión e iniciala de novo.</translation>
<translation id="6049797270917061226">Con este ficheiro, os atacantes poderían roubarche información persoal.</translation>
<translation id="6051354611314852653">O sistema non puido autorizar o acceso á API para este dispositivo.</translation>
-<translation id="6051638103735819069"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos ChromeOS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes poden incluírse datos sobre cando falla ChromeOS, as funcións que se utilizaron e o espazo de memoria que adoita empregarse, así como datos de uso e de diagnóstico das aplicacións Android, entre outros. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
+<translation id="6051638103735819069"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos ChromeOS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes poden incluírse datos sobre cando falla ChromeOS, as funcións que se utilizaron e o espazo de memoria que adoita empregarse, así como datos de uso e de diagnóstico das aplicacións para Android, entre outros. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Podes permitir ou deter o envío destes informes cando queiras desde a configuración do dispositivo ChromeOS do teu fillo ou filla. Se es un administrador de dominio, podes cambiar esta opción de configuración na consola de administración.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />A desactivación desta función non afecta á capacidade deste dispositivo de enviar a información necesaria para servizos esenciais, como as actualizacións do sistema e a seguranza.<ph name="END_PARAGRAPH3" />
<ph name="BEGIN_PARAGRAPH4" />Se está activada a opción Actividade web e das aplicacións na Conta de Google da túa filla ou fillo, pódense gardar nela os seus datos. Obtén máis información acerca destas opcións de configuración e sobre como axustalas en families.google.com.<ph name="END_PARAGRAPH4" /></translation>
@@ -5392,7 +5392,7 @@ Podes xestionar a configuración desde o menú da tarxeta ou ver máis opcións
<translation id="6295158916970320988">Todos os sitios</translation>
<translation id="6295855836753816081">Gardando...</translation>
<translation id="629730747756840877">Conta</translation>
-<translation id="6298962879096096191">Utiliza Google Play para instalar aplicacións Android</translation>
+<translation id="6298962879096096191">Utiliza Google Play para instalar aplicacións para Android</translation>
<translation id="6300177430812514606">Sitios que non poden rematar de enviar ou recibir datos</translation>
<translation id="630065524203833229">Sa&amp;ír</translation>
<translation id="6300718114348072351"><ph name="PRINTER_NAME" /> non se puido configurar automaticamente. Indica os detalles avanzados da impresora. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation>
@@ -6201,7 +6201,7 @@ Se máis tarde decides que non queres usar Voice Match, tan só tes que desactiv
<translation id="7086672505018440886">Incluír ficheiros de rexistro de Chrome no arquivo.</translation>
<translation id="7088434364990739311">Erro ao iniciar a comprobación da actualización (código de erro <ph name="ERROR" />).</translation>
<translation id="7088674813905715446">O administrador cambiou o estado do dispositivo para que non se poida utilizar. Para que se poida rexistrar, o administrador debe colocar o dispositivo en estado pendente.</translation>
-<translation id="7090160970140261931">Podes engadir contas adicionais ao teu dispositivo (<ph name="DEVICE_TYPE" />) para utilizalas en sitios web e aplicacións Android. Tamén podes controlar cales das contas se utilizan con aplicacións Android.</translation>
+<translation id="7090160970140261931">Podes engadir contas adicionais ao teu dispositivo (<ph name="DEVICE_TYPE" />) para utilizalas en sitios web e aplicacións para Android. Tamén podes controlar cales das contas se utilizan con aplicacións para Android.</translation>
<translation id="7093220653036489319">Respostas rápidas</translation>
<translation id="7093416310351037609">Por motivos de seguranza de datos, a túa organización esixe que todas as descargas aptas se garden na conta de <ph name="WEB_DRIVE" /> da túa organización.</translation>
<translation id="7093434536568905704">GTK+</translation>
@@ -6332,7 +6332,7 @@ Se máis tarde decides que non queres usar Voice Match, tan só tes que desactiv
<translation id="7243632151880336635">Borrar e pechar sesión</translation>
<translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (a mellor)</translation>
<translation id="7246230585855757313">Volve introducir a túa chave de seguranza e téntao de novo</translation>
-<translation id="724835896049478274">Contas dispoñibles para aplicacións Android</translation>
+<translation id="724835896049478274">Contas dispoñibles para aplicacións para Android</translation>
<translation id="7249197363678284330">Cambia esta opción de configuración na barra de enderezos.</translation>
<translation id="7249764475759804559">Incluír esta aplicación como opción ao abrir ficheiros</translation>
<translation id="7250616558727237648">O dispositivo co que tentaches compartir o ficheiro non respondeu. Téntao de novo.</translation>
@@ -6580,7 +6580,7 @@ Se máis tarde decides que non queres usar Voice Match, tan só tes que desactiv
<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{1 cookie}other{{NUM_COOKIES} cookies}}</translation>
<translation id="7493386493263658176">A extensión <ph name="EXTENSION_NAME" /> pode recompilar todo o texto que escribas, incluídos os datos persoais, como contrasinais e números de tarxetas de crédito. Queres utilizala?</translation>
<translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
-<translation id="7495149565104413027">Aplicación Android</translation>
+<translation id="7495149565104413027">Aplicación para Android</translation>
<translation id="7495778526395737099">Esqueciches o teu contrasinal anterior?</translation>
<translation id="7497981768003291373">Non se capturou ningún rexistro WebRTC recentemente.</translation>
<translation id="7501957181231305652">ou</translation>
@@ -6676,7 +6676,7 @@ Se máis tarde decides que non queres usar Voice Match, tan só tes que desactiv
<translation id="7589461650300748890">Ten coidado.</translation>
<translation id="7593653750169415785">Bloqueouse automaticamente porque rexeitaches notificacións varias veces</translation>
<translation id="7594725637786616550">Fai un Powerwash e restablece o teu dispositivo (<ph name="DEVICE_TYPE" />) para que quede como novo.</translation>
-<translation id="7595453277607160340">Para utilizar aplicacións Android e facer que o dispositivo <ph name="DEVICE_TYPE" /> funcione correctamente, volve iniciar sesión e actualiza a encriptación do dispositivo.</translation>
+<translation id="7595453277607160340">Para utilizar aplicacións para Android e facer que o dispositivo <ph name="DEVICE_TYPE" /> funcione correctamente, volve iniciar sesión e actualiza a encriptación do dispositivo.</translation>
<translation id="7595547011743502844"><ph name="ERROR" /> (código de erro <ph name="ERROR_CODE" />).</translation>
<translation id="7598466960084663009">Reiniciar ordenador</translation>
<translation id="7599527631045201165">O nome do dispositivo é demasiado longo. Introduce un máis curto e téntao de novo.</translation>
@@ -6783,7 +6783,7 @@ Se máis tarde decides que non queres usar Voice Match, tan só tes que desactiv
<translation id="7683373461016844951">Para continuar, fai clic en Aceptar e, despois, en Engadir persoa se queres crear un perfil para o teu enderezo de correo electrónico de <ph name="DOMAIN" />.</translation>
<translation id="7684212569183643648">Extensión instalada polo administrador</translation>
<translation id="7684559058815332124">Visitar a páxina de inicio de sesión do portal cautivo</translation>
-<translation id="7684718995427157417">Activa Android Debug Bridge (ADB) para poder crear e probar as túas aplicacións. Ten en conta que esta acción permite a instalación de aplicacións de Android non verificadas por Google e que require un restablecemento dos valores de fábrica para desactivarse.</translation>
+<translation id="7684718995427157417">Activa Android Debug Bridge (ADB) para poder crear e probar as túas aplicacións. Ten en conta que esta acción permite a instalación de aplicacións para Android non verificadas por Google e que require un restablecemento dos valores de fábrica para desactivarse.</translation>
<translation id="7685049629764448582">Memoria JavaScript</translation>
<translation id="7685087414635069102">PIN obrigatorio</translation>
<translation id="7686938547853266130"><ph name="FRIENDLY_NAME" /> (<ph name="DEVICE_PATH" />)</translation>
@@ -6926,7 +6926,7 @@ Podes xestionar a configuración desta tarxeta desde o menú correspondente ou v
<translation id="7807711621188256451">Permitir sempre a <ph name="HOST" /> acceder á túa cámara</translation>
<translation id="7810202088502699111">Bloqueáronse as ventás emerxentes nesta páxina.</translation>
<translation id="781167124805380294">Emitir <ph name="FILE_NAME" /></translation>
-<translation id="7811886112806886172">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de Chrome OS, permite que se lle envíen a Google de forma automática os datos de uso e diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións Android. Se tes activada a opción Actividade web e das aplicacións na Conta de Google, pódense gardar nela os teus datos de Android.</translation>
+<translation id="7811886112806886172">Se queres axudar a mellorar as funcións e o rendemento de Chrome e de Chrome OS, permite que se lle envíen a Google de forma automática os datos de uso e diagnóstico. Algúns datos agregados tamén serán útiles para os socios de Google e as aplicacións para Android. Se tes activada a opción Actividade web e das aplicacións na Conta de Google, pódense gardar nela os teus datos de Android.</translation>
<translation id="7814458197256864873">&amp;Copiar</translation>
<translation id="7815680994978050279">Bloqueouse unha descarga perigosa</translation>
<translation id="7817361223956157679">O teclado en pantalla aínda non está dispoñible en aplicacións de Linux</translation>
@@ -6961,7 +6961,7 @@ Podes xestionar a configuración desta tarxeta desde o menú correspondente ou v
<translation id="7847212883280406910">Preme Ctrl + Alt + S para cambiar a <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
<translation id="7849264908733290972">Abrir &amp;imaxe na pestana nova</translation>
<translation id="784934925303690534">Intervalo de tempo</translation>
-<translation id="7850717413915978159"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos Chrome OS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes pode incluírse información como os momentos nos que falla Chrome OS, as funcións que utilizas, o espazo de memoria que adoitas empregar e os datos de uso e diagnóstico das aplicacións Android. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
+<translation id="7850717413915978159"><ph name="BEGIN_PARAGRAPH1" />Ao permitir que os dispositivos Chrome OS envíen informes de forma automática, axúdasnos a establecer prioridades en relación cos aspectos que necesitan corrixirse e mellorarse no sistema operativo. Nestes informes pode incluírse información como os momentos nos que falla Chrome OS, as funcións que utilizas, o espazo de memoria que adoitas empregar e os datos de uso e diagnóstico das aplicacións para Android. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Podes permitir ou deter o envío destes informes cando queiras desde a configuración do teu dispositivo Chrome OS. Se administras un dominio, podes cambiar esta opción de configuración na consola de administración.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />Se tes activada a opción Actividade web e das aplicacións na Conta de Google, pódense gardar nela os teus datos de Android. Podes consultar os teus datos, eliminalos e cambiar a configuración da conta en account.google.com.<ph name="END_PARAGRAPH3" /></translation>
<translation id="7851021205959621355"><ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> Cunha gravación ou voz similar á túa poderíase acceder aos teus resultados persoais ou ao teu Asistente. Para aforrar batería, podes seleccionar na configuración do teu Asistente ter activado “Hey Google” tan só cando o dispositivo está conectado a unha fonte de alimentación.</translation>
@@ -7308,7 +7308,7 @@ Mantén o ficheiro de clave nun lugar seguro, xa que o precisarás para crear no
<translation id="8176332201990304395">Rosa e branco</translation>
<translation id="8177196903785554304">Detalles da rede</translation>
<translation id="8177318697334260664">{NUM_TABS,plural, =1{Mover pestana a unha ventá nova}other{Mover pestanas a unha ventá nova}}</translation>
-<translation id="8179188928355984576">Non se utiliza con aplicacións Android</translation>
+<translation id="8179188928355984576">Non se utiliza con aplicacións para Android</translation>
<translation id="8179976553408161302">Intro</translation>
<translation id="8180786512391440389">"<ph name="EXTENSION" />" pode ler e eliminar ficheiros de imaxes, vídeo e son nas localizacións seleccionadas.</translation>
<translation id="8181215761849004992">O dispositivo non se puido vincular ao dominio. Comproba a túa conta para ver se tes privilexios suficientes para engadir dispositivos.</translation>
@@ -7662,7 +7662,7 @@ Mantén o ficheiro de clave nun lugar seguro, xa que o precisarás para crear no
<translation id="8551588720239073785">Configuración de data e hora</translation>
<translation id="8553342806078037065">Xestionar outras persoas</translation>
<translation id="8554899698005018844">Ningún idioma</translation>
-<translation id="855604308879080518">Permite que as aplicacións Android accedan a dispositivos USB neste Chromebook. Pediráseche permiso cada vez que conectes un dispositivo USB. As distintas aplicacións Android solicitarán outros permisos adicionais.</translation>
+<translation id="855604308879080518">Permite que as aplicacións para Android accedan a dispositivos USB neste Chromebook. Pediráseche permiso cada vez que conectes un dispositivo USB. As distintas aplicacións para Android solicitarán outros permisos adicionais.</translation>
<translation id="8557022314818157177">Sigue tocando a chave de seguranza ata que se capture a túa impresión dixital</translation>
<translation id="8557180006508471423">No Mac, vai a Location Services (Servizos de localización) e activa Google Chrome</translation>
<translation id="8557856025359704738">A seguinte descarga terá lugar neste momento: <ph name="NEXT_DATE_DOWNLOAD" />.</translation>
@@ -8355,7 +8355,7 @@ Consulta máis información sobre os datos que recompila Google e por que o fai
<translation id="93766956588638423">Reparar extensión</translation>
<translation id="938568644810664664">Tenta dicir: “Hey Google, que canción é esta?” ou “Hey Google, que hai na miña pantalla?”</translation>
<translation id="938623846785894166">O ficheiro non é habitual</translation>
-<translation id="939401694733344652">Neste momento, estas contas non se están usando con aplicacións Android. Se seleccionas unha conta para usala con esta aplicación de Android, tamén se pode utilizar con outras aplicacións Android. Podes cambiar o acceso ás aplicacións Android en <ph name="LINK_BEGIN" />Configuración &gt; Contas<ph name="LINK_END" />.</translation>
+<translation id="939401694733344652">Neste momento, estas contas non se están usando con aplicacións para Android. Se seleccionas unha conta para usala con esta aplicación para Android, tamén se pode utilizar con outras aplicacións para Android. Podes cambiar o acceso ás aplicacións para Android en <ph name="LINK_BEGIN" />Configuración &gt; Contas<ph name="LINK_END" />.</translation>
<translation id="939598580284253335">Introducir frase de acceso</translation>
<translation id="939736085109172342">Cartafol novo</translation>
<translation id="942532530371314860"><ph name="APP_NAME" /> está compartindo audio e unha pestana de Chrome.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hi.xtb b/chromium/chrome/app/resources/generated_resources_hi.xtb
index 2f6119a1b1d..c1a4bcc8263 100644
--- a/chromium/chrome/app/resources/generated_resources_hi.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hi.xtb
@@ -156,7 +156,7 @@
<translation id="1147322039136785890">अब <ph name="SUPERVISED_USER_NAME" /> इस डिवाइस का इस्तेमाल कर सकते हैं</translation>
<translation id="1147991416141538220">ऐक्सेस मांगने के लिए, इस डिवाइस के एडमिन से संपर्क करें.</translation>
<translation id="1148063863818152153">आपके डिवाइस का ईआईडी नंबर</translation>
-<translation id="1148624853678088576">आप बिल्कुल तैयार हैं!</translation>
+<translation id="1148624853678088576">आप बिलकुल तैयार हैं!</translation>
<translation id="1149401351239820326">समाप्ति माह</translation>
<translation id="1149725087019908252"><ph name="FILE_NAME" /> स्कैन हो रही है</translation>
<translation id="1150490752229770117">इस <ph name="DEVICE_TYPE" /> के लिए अपने-आप होने वाला यह आखिरी साॅफ़्टवेयर और सुरक्षा अपडेट था. आने वाले समय में अपडेट पाने के लिए, नए माॅडल पर अपग्रेड करें. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
@@ -1939,7 +1939,7 @@
<translation id="2804043232879091219">वैकल्पिक ब्राउज़र नहीं खोला जा सका</translation>
<translation id="2804667941345577550">आपको इस साइट और खुले हुए टैब से साइन आउट कर दिया जाएगा</translation>
<translation id="2804680522274557040">कैमरा बंद किया गया</translation>
-<translation id="2805539617243680210">अब आप बिल्कुल तैयार हैं!</translation>
+<translation id="2805539617243680210">अब आप बिलकुल तैयार हैं!</translation>
<translation id="2805646850212350655">Microsoft Encrypting File System</translation>
<translation id="2805756323405976993">ऐप्स</translation>
<translation id="2805760958323556153">नीति का ExtensionInstallForcelist मान अमान्य है. कृपया अपने एडमिन से संपर्क करें.</translation>
@@ -2293,7 +2293,7 @@
<translation id="3150927491400159470">फिर से लोड करना मुश्किल</translation>
<translation id="315116470104423982">मोबाइल डेटा</translation>
<translation id="3151539355209957474">शुरू होने का समय</translation>
-<translation id="3151562827395986343">इतिहास, कुकी, कैश वगैरह साफ़ करें</translation>
+<translation id="3151562827395986343">इतिहास, कुकी, कैश वगैरह मिटाएं</translation>
<translation id="3151616662954589507">सेल्फ़ी कैमरा</translation>
<translation id="3151786313568798007">अभिविन्‍यास</translation>
<translation id="3152356229013609796">फ़ोन पर मिलने वाली सूचनाओं को देखें, उन्हें खारिज करें, और उनका जवाब दें</translation>
@@ -5289,7 +5289,7 @@
<translation id="6178664161104547336">किसी प्रमाणपत्र को चुनें</translation>
<translation id="6178682841350631965">आपने साइन इन करने के लिए जो डेटा डाला है, वह अपडेट हो गया</translation>
<translation id="6180510783007738939">लाइन खींचने का टूल</translation>
-<translation id="6181431612547969857">डाउनलोड अवरोधित किया गया</translation>
+<translation id="6181431612547969857">डाउनलोड करना ब्लॉक किया गया</translation>
<translation id="6184099524311454384">टैब खोजें</translation>
<translation id="6185132558746749656">डिवाइस स्थान</translation>
<translation id="6188346519670155113">Chrome ब्राउज़र का सिंक चालू है</translation>
@@ -5675,7 +5675,7 @@
<translation id="6551739526055143276">इसे Family Link से मैनेज किया जाता है</translation>
<translation id="655384502888039633"><ph name="USER_COUNT" /> उपयोगकर्ता</translation>
<translation id="655483977608336153">दोबारा कोशिश करें</translation>
-<translation id="6555432686520421228">सभी उपयोगकर्ता खातों को हटाएं और अपने <ph name="IDS_SHORT_PRODUCT_NAME" /> डिवाइस को बिल्कुल नया जैसा बनाने के लिए रीसेट करें.</translation>
+<translation id="6555432686520421228">सभी उपयोगकर्ता खातों को हटाएं और अपने <ph name="IDS_SHORT_PRODUCT_NAME" /> डिवाइस को बिलकुल नया जैसा बनाने के लिए रीसेट करें.</translation>
<translation id="6555604601707417276">Linux का बैक अप वापस लाया गया</translation>
<translation id="6555810572223193255">क्‍लीनअप अभी उपलब्ध नहीं है</translation>
<translation id="6556477848444788999">पिन या पासवर्ड, आपके <ph name="DEVICE_TYPE" /> पर मौजूद डेटा को सुरक्षित रखता है. इसमें, इस डिवाइस से स्ट्रीम किया गया डेटा भी शामिल है.</translation>
@@ -6695,7 +6695,7 @@
<translation id="758895749110326677">Chromebook पर गेमिंग को बेहतर बनाने में मदद करें</translation>
<translation id="7589461650300748890">अरे, सुनिए. सतर्क रहें.</translation>
<translation id="7593653750169415785">आपने कुछ सूचनाओं को अस्वीकार कर दिया, इसलिए यह अपने आप ब्लॉक हो गया है</translation>
-<translation id="7594725637786616550">पावरवॉश आपके <ph name="DEVICE_TYPE" /> को बिल्कुल नए जैसा रीसेट कर देगा.</translation>
+<translation id="7594725637786616550">पावरवॉश आपके <ph name="DEVICE_TYPE" /> को बिलकुल नए जैसा रीसेट कर देगा.</translation>
<translation id="7595453277607160340">Android ऐप्लिकेशन का इस्तेमाल करने और आपका <ph name="DEVICE_TYPE" /> ठीक से काम करता रहे, इसके लिए फिर से साइन इन करें और अपडेट करें.</translation>
<translation id="7595547011743502844"><ph name="ERROR" /> (गड़बड़ी कोड <ph name="ERROR_CODE" />).</translation>
<translation id="7598466960084663009">कंप्यूटर फिर से चालू करें</translation>
@@ -7083,7 +7083,7 @@
<translation id="7946586320617670168">शुरुआती जगह सुरक्षित होनी चाहिए</translation>
<translation id="794676567536738329">अनुमतियों की पुष्टि करें</translation>
<translation id="7947962633355574091">वीडियो के पते को कॉ&amp;पी करें</translation>
-<translation id="7947964080535614577">आम तौर पर, साइटें विज्ञापन दिखाती हैं, ताकि कॉन्टेंट या सेवाएं बिल्कुल मुफ़्त में उपलब्ध कराई जा सकें. हालांकि, कुछ साइटें तंग या गुमराह करने वाले विज्ञापन दिखाती हैं.</translation>
+<translation id="7947964080535614577">आम तौर पर, साइटें विज्ञापन दिखाती हैं, ताकि कॉन्टेंट या सेवाएं बिलकुल मुफ़्त में उपलब्ध कराई जा सकें. हालांकि, कुछ साइटें तंग या गुमराह करने वाले विज्ञापन दिखाती हैं.</translation>
<translation id="7948407723851303488"><ph name="DOMAIN_NAME" /> के सभी पेज</translation>
<translation id="7951265006188088697">Google Pay के पैसे चुकाने के तरीके को जोड़ने या प्रबंधित करने के लिए, अपने <ph name="BEGIN_LINK" />Google खाते<ph name="END_LINK" /> पर जाएं</translation>
<translation id="7952708427581814389">साइटें आपके क्लिपबोर्ड पर टेक्स्ट पढ़ने और इमेज देखने के लिए कह सकती हैं</translation>
@@ -7161,7 +7161,7 @@
<translation id="8023133589013344428">ChromeOS Flex की सेटिंग में भाषाओं को मैनेज करें</translation>
<translation id="8023801379949507775">एक्सटेंशन अभी अपडेट करें</translation>
<translation id="8025151549289123443">लॉक स्क्रीन और साइन-इन</translation>
-<translation id="8026334261755873520">ब्राउज़िंग डेटा साफ़ करें</translation>
+<translation id="8026334261755873520">ब्राउज़िंग डेटा मिटाएं</translation>
<translation id="8028060951694135607">Microsoft Key Recovery</translation>
<translation id="8028803902702117856">डाउनलोड हो रही है <ph name="SIZE" />, <ph name="FILE_NAME" /></translation>
<translation id="8028993641010258682">आकार</translation>
@@ -7282,7 +7282,7 @@
<translation id="8133676275609324831">खोजकर्ता में &amp;दिखाएं</translation>
<translation id="8135557862853121765"><ph name="NUM_KILOBYTES" />k</translation>
<translation id="8136269678443988272">आपने जो पिन डाले हैं, वे बेमेल हैं</translation>
-<translation id="8137559199583651773">एक्सटेंशन प्रबंधित करें</translation>
+<translation id="8137559199583651773">एक्सटेंशन मैनेज करें</translation>
<translation id="8138082791834443598">वैकल्पिक — इस डिवाइस के साथ जोड़ी जाने वाली नई जानकारी डालें या मौजूदा जानकारी को अपडेट करें.</translation>
<translation id="8138217203226449454">क्या आपका मतलब खोज की सुविधा देने वाली कंपनी बदलने से था?</translation>
<translation id="8138997515734480534"><ph name="VM_NAME" /> की स्थिति</translation>
@@ -7710,7 +7710,7 @@
<translation id="8588868914509452556"><ph name="WINDOW_TITLE" /> - VR हेडसेट को दिखा रहा है</translation>
<translation id="8590375307970699841">स्वचालित अपडेट सेट अप करें</translation>
<translation id="8591783563402255548">1 सेकंड</translation>
-<translation id="8592141010104017453">सूचनाएं बिल्कुल न दिखाएं</translation>
+<translation id="8592141010104017453">सूचनाएं बिलकुल न दिखाएं</translation>
<translation id="859246725979739260">इस साइट को, आपकी जगह की जानकारी ऐक्सेस करने से रोका गया है.</translation>
<translation id="8593121833493516339">इस्तेमाल और निदान से जुड़ा डेटा भेजें. Google को निदान, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने आप भेजकर, अपने बच्चे के Android अनुभव को बेहतर बनाने में मदद करें. इसका इस्तेमाल आपके बच्चे की पहचान करने के लिए नहीं किया जाएगा. यह सिस्टम और ऐप्लिकेशन की स्थिरता और दूसरे सुधारों में मदद करेगा. कुछ एग्रीगेट डेटा Google ऐप्लिकेशन और पार्टनर, जैसे कि Android डेवलपरों की भी मदद करेगा. अगर आपके बच्चे के लिए दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा उसके Google खाते में सेव किया जा सकता है. <ph name="BEGIN_LINK1" />ज़्यादा जानें<ph name="END_LINK1" /></translation>
<translation id="8594908476761052472">वीडियो कैप्चर करें</translation>
@@ -8035,7 +8035,7 @@
<translation id="8890170499370378450">हो सकता है कि आपको मोबाइल डेटा का शुल्क देना पड़े</translation>
<translation id="8890516388109605451">स्रोत</translation>
<translation id="8890529496706615641">प्रोफ़ाइल का नाम नहीं बदला जा सका. कृपया फिर से कोशिश करें या तकनीकी सहायता पाने के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें.</translation>
-<translation id="8892168913673237979">बिल्कुल तैयार है!</translation>
+<translation id="8892168913673237979">बिलकुल तैयार है!</translation>
<translation id="8893801527741465188">अनइंस्टॉल पूरा हुआ</translation>
<translation id="8893928184421379330">क्षमा करें, डिवाइस <ph name="DEVICE_LABEL" /> की पहचान नहीं हो सकी.</translation>
<translation id="8894761918470382415">सहायक डिवाइस (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) के लिए डेटा ऐक्सेस सुरक्षा</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hr.xtb b/chromium/chrome/app/resources/generated_resources_hr.xtb
index 36c26547481..0da3696a0c2 100644
--- a/chromium/chrome/app/resources/generated_resources_hr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hr.xtb
@@ -2107,7 +2107,7 @@ i Ctrl + Alt + Smanjivanje svjetline da biste smanjili prikaz.</translation>
<translation id="2966937470348689686">Upravljanje postavkama Androida</translation>
<translation id="2967926928600500959">URL-ovima koji se podudaraju s tim pravilima nametnut će se otvaranje u određenom pregledniku.</translation>
<translation id="2972581237482394796">&amp;Vrati poništeno</translation>
-<translation id="2973324205039581528">Zanemari web-lokaciju</translation>
+<translation id="2973324205039581528">Isključi zvuk na web-lokaciji</translation>
<translation id="2973537811036309675">Bočna ploča</translation>
<translation id="2976557544729462544">Neki uređaji zahtijevaju da onemogućite zaštitu pristupa podacima kako bi radili pravilno ili potpuno funkcionalno.</translation>
<translation id="2977480621796371840">Ukloni iz grupe</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hu.xtb b/chromium/chrome/app/resources/generated_resources_hu.xtb
index e47d89c523d..b68b291d523 100644
--- a/chromium/chrome/app/resources/generated_resources_hu.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hu.xtb
@@ -3850,7 +3850,7 @@ Elindítja a következőt: <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation
<translation id="4701335814944566468">Tegnap tekintette meg</translation>
<translation id="4701540735981103145">A rendszergazda letiltotta a bejelentkezést</translation>
<translation id="4707337002099455863">Mindig, minden webhelyen</translation>
-<translation id="4708794300267213770">Lezárási képernyő megjelenítése, az alvó módból történő felébresztéskor</translation>
+<translation id="4708794300267213770">Lezárási képernyő megjelenítése az alvó módból történő felébresztéskor</translation>
<translation id="4708849949179781599">Kilépés a <ph name="PRODUCT_NAME" />-ból</translation>
<translation id="4711638718396952945">A beállítások visszaállítása</translation>
<translation id="47158868804223727">Kattintson a csoport nevére a kibontásához vagy összecsukásához</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hy.xtb b/chromium/chrome/app/resources/generated_resources_hy.xtb
index 29de27efcc0..12042eeafec 100644
--- a/chromium/chrome/app/resources/generated_resources_hy.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hy.xtb
@@ -2509,7 +2509,7 @@
<translation id="3409785640040772790">Քարտեզներ</translation>
<translation id="3412265149091626468">Jump to Selection</translation>
<translation id="3413122095806433232">Հավաստագրման կենտրոնի թողարկողներ՝ <ph name="LOCATION" /></translation>
-<translation id="3414952576877147120">Չափը՝</translation>
+<translation id="3414952576877147120">Չափսը՝</translation>
<translation id="3414966631182382431">Ձեր <ph name="BEGIN_LINK" />դիտարկիչը կառավարվում է<ph name="END_LINK" /> <ph name="MANAGER" />-ի կողմից</translation>
<translation id="341589277604221596">Կենդանի ենթագրեր – <ph name="LANGUAGE" /></translation>
<translation id="3416468988018290825">Միշտ ցույց տալ ամբողջական URL-ները</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_id.xtb b/chromium/chrome/app/resources/generated_resources_id.xtb
index 004d75c452e..f0c682e4569 100644
--- a/chromium/chrome/app/resources/generated_resources_id.xtb
+++ b/chromium/chrome/app/resources/generated_resources_id.xtb
@@ -1828,7 +1828,7 @@ Anda dapat mengelola setelan akun ini dengan menginstal aplikasi Family Link di
<translation id="2705736684557713153">Scroll ke bagian bawah layar dan aktifkan Tethering Instan, jika muncul. Jika tidak muncul, artinya Anda sudah siap.</translation>
<translation id="2707024448553392710">Komponen sedang didownload</translation>
<translation id="270921614578699633">Rata-rata Pemindahan</translation>
-<translation id="2709516037105925701">Isi-Otomatis</translation>
+<translation id="2709516037105925701">Isi otomatis</translation>
<translation id="2710101514844343743">Data penggunaan dan diagnostik</translation>
<translation id="271033894570825754">Baru</translation>
<translation id="2711073837061989559">Uji coba</translation>
@@ -2119,7 +2119,7 @@ dan Ctrl+Alt+Kurangi kecerahan untuk memperkecil.</translation>
<translation id="2966937470348689686">Kelola preferensi Android</translation>
<translation id="2967926928600500959">URL yang sesuai dengan aturan ini akan dipaksa dibuka di browser tertentu.</translation>
<translation id="2972581237482394796">&amp;Ulang</translation>
-<translation id="2973324205039581528">Matikan Notifikasi Situs</translation>
+<translation id="2973324205039581528">Nonaktifkan Notifikasi Situs</translation>
<translation id="2973537811036309675">Panel Samping</translation>
<translation id="2976557544729462544">Beberapa perangkat mengharuskan Anda menonaktifkan perlindungan akses data agar dapat berfungsi dengan benar atau dalam performa penuh.</translation>
<translation id="2977480621796371840">Hapus dari grup</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_it.xtb b/chromium/chrome/app/resources/generated_resources_it.xtb
index f02f15ad739..7ae825f4a38 100644
--- a/chromium/chrome/app/resources/generated_resources_it.xtb
+++ b/chromium/chrome/app/resources/generated_resources_it.xtb
@@ -772,7 +772,7 @@ A questo account potrebbero essere applicate le autorizzazioni già concesse all
<translation id="173628468822554835">Ok. Per impostazione predefinita, i nuovi siti che visiti non ti invieranno notifiche.</translation>
<translation id="1736419249208073774">Esplora</translation>
<translation id="1737968601308870607">Segnala bug</translation>
-<translation id="1739684185846730053">Le prove di Privacy Sandbox sono ancora in fase di sviluppo attivo e sono disponibili soltanto in alcune aree geografiche. Per il momento i siti possono provare Privacy Sandbox continuando a usare le attuali tecnologie web quali i cookie di terze parti.</translation>
+<translation id="1739684185846730053">Le prove di Privacy Sandbox sono ancora in fase di sviluppo attivo e sono disponibili soltanto in alcune regioni. Per il momento i siti possono provare Privacy Sandbox continuando a usare le attuali tecnologie web quali i cookie di terze parti.</translation>
<translation id="1741190788710022490">Ricarica adattiva</translation>
<translation id="174123615272205933">Personalizzati</translation>
<translation id="1741314857973421784">Continua</translation>
@@ -5116,7 +5116,7 @@ Puoi assegnare più sensori a questa azione.</translation>
<translation id="6027945736510816438">Intendevi <ph name="WEBSITE" />?</translation>
<translation id="6028117231645531007">Aggiungi impronta</translation>
<translation id="6031600495088157824">Opzioni di immissione nella barra degli strumenti</translation>
-<translation id="6032091552407840792">Questa prova è attiva soltanto in <ph name="BEGIN_LINK" />alcune aree geografiche<ph name="END_LINK" />.</translation>
+<translation id="6032091552407840792">Questa prova è attiva soltanto in <ph name="BEGIN_LINK" />alcune regioni<ph name="END_LINK" />.</translation>
<translation id="6032715498678347852">Per consentire a un'estensione di accedere a questo sito, fai clic sull'estensione.</translation>
<translation id="6032912588568283682">File system</translation>
<translation id="603539183851330738">Pulsante per annullare la correzione automatica. Ripristina <ph name="TYPED_WORD" />. Premi Invio per attivare o Esc per ignorare.</translation>
@@ -6575,7 +6575,7 @@ Puoi assegnare più sensori a questa azione.</translation>
<translation id="7484645889979462775">Mai per questo sito</translation>
<translation id="7487141338393529395">Attiva il controllo ortografico avanzato</translation>
<translation id="7487969577036436319">Nessun componente installato</translation>
-<translation id="7488682689406685343">Il sito potrebbe tentare di ingannarti per indurti a consentire notifiche invasive.</translation>
+<translation id="7488682689406685343">Questo sito potrebbe tentare di ingannarti per indurti a consentire notifiche invasive.</translation>
<translation id="7489761397368794366">Chiama dal tuo dispositivo</translation>
<translation id="749028671485790643">Persona <ph name="VALUE" /></translation>
<translation id="7491962110804786152">Tab</translation>
@@ -6995,7 +6995,7 @@ Premi un sensore o un tasto assegnato per rimuovere l'assegnazione.</translation
<translation id="7879631849810108578">Scorciatoia impostata: <ph name="IDS_SHORT_SET_COMMAND" /></translation>
<translation id="7880591377632733558">Ti diamo il benvenuto in Chrome, <ph name="ACCOUNT_FIRST_NAME" /></translation>
<translation id="7880685873361171388">Quando la funzionalità è attivata e lo stato è attivo, Chrome usa la tua cronologia di navigazione di 7 giorni per definire un gruppo, o "coorte", di cui fai parte. Gli inserzionisti possono selezionare annunci per il gruppo. La cronologia di navigazione rimane privata sul tuo dispositivo. Questa prova è attiva soltanto in
- <ph name="BEGIN_LINK" />alcune aree geografiche<ph name="END_LINK" />.</translation>
+ <ph name="BEGIN_LINK" />alcune regioni<ph name="END_LINK" />.</translation>
<translation id="7880823633812189969">I dati locali verranno eliminati al riavvio</translation>
<translation id="7881066108824108340">DNS</translation>
<translation id="7881483672146086348">Visualizza account</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_iw.xtb b/chromium/chrome/app/resources/generated_resources_iw.xtb
index 5a57465d912..b796b1eaca4 100644
--- a/chromium/chrome/app/resources/generated_resources_iw.xtb
+++ b/chromium/chrome/app/resources/generated_resources_iw.xtb
@@ -2039,7 +2039,7 @@
<translation id="2894757982205307093">כרטיסייה חדשה בקבוצה</translation>
<translation id="289695669188700754">מזהה מפתח: <ph name="KEY_ID" /></translation>
<translation id="2897713966423243833">לאחר הסגירה של כל החלונות האנונימיים, ההגדרה שהותאמה אישית תוסר</translation>
-<translation id="2897878306272793870">ברצונך באמת לפתוח <ph name="TAB_COUNT" /> כרטיסיות?</translation>
+<translation id="2897878306272793870">רוצה לפתוח <ph name="TAB_COUNT" /> כרטיסיות, בטוח?</translation>
<translation id="2900477968385519153">מחפשים במסך באמצעות <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
<translation id="290105521672621980">הקובץ דורש תכונות שאינן נתמכות</translation>
<translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> לא הצליח לתקשר עם המדפסת הזו. יש לוודא שהמדפסת מחוברת ולנסות שוב.</translation>
@@ -2119,7 +2119,7 @@
<translation id="2966937470348689686">‏ניהול העדפות ל-Android</translation>
<translation id="2967926928600500959">‏כתובות ה‑URL שמתאימות לכללים האלה יאולצו להיפתח בדפדפן מסוים.</translation>
<translation id="2972581237482394796">&amp;ביצוע חוזר</translation>
-<translation id="2973324205039581528">השתקת האתר</translation>
+<translation id="2973324205039581528">השתקת האודיו באתר</translation>
<translation id="2973537811036309675">חלונית צדדית</translation>
<translation id="2976557544729462544">יש מכשירים שיפעלו בצורה נכונה או מיטבית רק אם הגנת הגישה לנתונים תושבת.</translation>
<translation id="2977480621796371840">הסרה מהקבוצה</translation>
@@ -3881,7 +3881,7 @@
<translation id="4742334355511750246">לא מורשים להציג תמונות</translation>
<translation id="4742970037960872810">הסרת ההדגשה</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />איך לעדכן אפליקציות<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{ביטול השתקת האתר}two{ביטול השתקת האתרים}many{ביטול השתקת האתרים}other{ביטול השתקת האתרים}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{ביטול ההשתקה של האודיו באתר}two{ביטול ההשתקה של האודיו באתרים}many{ביטול ההשתקה של האודיו באתרים}other{ביטול ההשתקה של האודיו באתרים}}</translation>
<translation id="474609389162964566">‏רוצה לקבל גישה ל-Assistant עם "Hey Google"?</translation>
<translation id="4746351372139058112">הודעות</translation>
<translation id="4748783296226936791">‏בדרך כלל, אתרים מתחברים למכשירי HID כדי לתמוך בתכונות שמשתמשות במקלדות, בשלטים רחוקים למשחקים ובמכשירים אחרים שאינם נפוצים</translation>
@@ -4105,7 +4105,7 @@
<translation id="4972129977812092092">עריכת מדפסת</translation>
<translation id="4972164225939028131">סיסמה שגויה</translation>
<translation id="4972737347717125191">אתרים יכולים לבקש הרשאה להשתמש בנתונים ובמכשירים של מציאות מדומה</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{השתקת האתר}two{השתקת האתרים}many{השתקת האתרים}other{השתקת האתרים}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{השתקת האודיו באתר}two{השתקת האודיו באתרים}many{השתקת האודיו באתרים}other{השתקת האודיו באתרים}}</translation>
<translation id="497403230787583386">בדיקות האבטחה הסתיימו. המסמך יודפס.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_LIMIT" />/<ph name="CHARACTER_COUNT" /></translation>
<translation id="4977942889532008999">אישור גישה</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ja.xtb b/chromium/chrome/app/resources/generated_resources_ja.xtb
index 80881237567..02699ac130e 100644
--- a/chromium/chrome/app/resources/generated_resources_ja.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ja.xtb
@@ -444,7 +444,7 @@
<translation id="1429300045468813835">すべて消去</translation>
<translation id="1430915738399379752">印刷</translation>
<translation id="1431188203598586230">最後のソフトウェア アップデート</translation>
-<translation id="1432581352905426595">検索エンジンの管理</translation>
+<translation id="1432581352905426595">検索エンジンを管理</translation>
<translation id="1434696352799406980">起動ページ、新しいタブページ、検索エンジン、固定タブをリセットします。また、すべての拡張機能を無効にし、Cookie などの一時データを削除します。ただし、ブックマーク、履歴、保存したパスワードはそのまま残ります。</translation>
<translation id="1434886155212424586">ホームページは新しいタブのページです</translation>
<translation id="1436390408194692385">有効期限まであと <ph name="TICKET_TIME_LEFT" /></translation>
@@ -1956,7 +1956,7 @@
<translation id="2836635946302913370">このユーザー名でのログインは、管理者によって無効にされています。</translation>
<translation id="283669119850230892">ネットワーク <ph name="NETWORK_ID" /> を使用するには、まずインターネット接続を完了してください(下記参照)。</translation>
<translation id="2838379631617906747">インストール中</translation>
-<translation id="2839032553903800133">通知がブロックされています</translation>
+<translation id="2839032553903800133">通知をブロック中</translation>
<translation id="2841013758207633010">時間</translation>
<translation id="2841837950101800123">提供元</translation>
<translation id="2843560154284403323">Linux の設定を完了するには、Chrome OS を更新してからもう一度お試しください。</translation>
@@ -3254,7 +3254,7 @@
<translation id="4117637339509843559">ダークモード</translation>
<translation id="4117714603282104018">タッチパッドの触覚フィードバック</translation>
<translation id="4118579674665737931">デバイスを再起動してもう一度お試しください。</translation>
-<translation id="412022815379960229">ログインすれば常に、Google フォトの「思い出」の写真を見ることができます。</translation>
+<translation id="412022815379960229">ログインすれば、いつでも Google フォトの「思い出」の写真を見ることができます。</translation>
<translation id="4120388883569225797">このセキュリティ キーはリセットできません</translation>
<translation id="4120817667028078560">パスが長すぎます</translation>
<translation id="4124823734405044952">セキュリティ キーがリセットされました</translation>
@@ -3428,8 +3428,8 @@
<translation id="431076611119798497">詳細(&amp;D)</translation>
<translation id="4312701113286993760">{COUNT,plural, =1{1 件の Google アカウント}other{<ph name="EXTRA_ACCOUNTS" /> 件の Google アカウント}}</translation>
<translation id="4312866146174492540">ブロック(デフォルト)</translation>
-<translation id="4314497418046265427">スマートフォンと <ph name="DEVICE_TYPE" /> を接続すると、生産性が向上します</translation>
-<translation id="4314815835985389558">同期の管理</translation>
+<translation id="4314497418046265427">スマートフォンと <ph name="DEVICE_TYPE" /> をリンクすれば、生産性が向上します</translation>
+<translation id="4314815835985389558">同期を管理</translation>
<translation id="4315933848520197627">アカウントのリンク解除</translation>
<translation id="4316850752623536204">デベロッパーのウェブサイト</translation>
<translation id="4317820549299924617">確認が失敗しました</translation>
@@ -3857,7 +3857,7 @@
<translation id="474609389162964566">「OK Google」と話しかけてアシスタントにアクセス</translation>
<translation id="4746351372139058112">メッセージ</translation>
<translation id="4748783296226936791">一般的ではないキーボードや、ゲーム コントローラなどのデバイスを使用する機能に対応するために、多くのサイトは HID デバイスに接続します</translation>
-<translation id="4750185073185658673">スマートフォンでいくつかのアクセス許可を確認してください。スマートフォンの Bluetooth と Wi-Fi がオンになっていることをご確認ください。</translation>
+<translation id="4750185073185658673">スマートフォンでアクセス許可の設定を見直し、スマートフォンの Bluetooth と Wi-Fi がオンになっていることをご確認ください。</translation>
<translation id="4750394297954878236">候補</translation>
<translation id="475088594373173692">最初のユーザー</translation>
<translation id="4756378406049221019">停止 / 再読み込み</translation>
@@ -4132,7 +4132,7 @@
<translation id="5038022729081036555">明日は <ph name="TIME_LIMIT" />まで使えます。</translation>
<translation id="5038818366306248416"><ph name="ORIGIN" /> の拡張機能を一切許可しないよう選択しています</translation>
<translation id="5039696241953571917">Google アカウントでの保存パスワードの表示と管理</translation>
-<translation id="5039804452771397117">許可</translation>
+<translation id="5039804452771397117">許可する</translation>
<translation id="5040823038948176460">その他のコンテンツの設定</translation>
<translation id="5041509233170835229">Chrome アプリ</translation>
<translation id="5043440033854483429">名前には文字、数字、ハイフン(-)を使用できます。1~15 文字の間で指定してください。</translation>
@@ -4765,7 +4765,7 @@
<translation id="567643736130151854">ログインして同期を有効にすれば、ブックマーク、パスワード、その他の設定をどのデバイスからでもご利用いただけます</translation>
<translation id="567740581294087470">お送りいただくフィードバックの種類を選択してください。</translation>
<translation id="5677503058916217575">ページの言語:</translation>
-<translation id="5677928146339483299">ブロック中</translation>
+<translation id="5677928146339483299">ブロック</translation>
<translation id="5678550637669481956"><ph name="VOLUME_NAME" /> への読み書きのアクセス権が許可されました。</translation>
<translation id="5678821117681811450"><ph name="WEB_DRIVE" /> に送信しています</translation>
<translation id="5678955352098267522"><ph name="WEBSITE_1" /> でのユーザーデータの読み取り</translation>
@@ -6830,10 +6830,10 @@
<translation id="7744047395460924128">印刷履歴の表示</translation>
<translation id="7744192722284567281">データ侵害で漏洩</translation>
<translation id="7744649840067671761">新しいスイッチかキーボードのキーを押すと割り当てを開始できます。割り当て済みのスイッチかキーを押すと割り当てが解除されます。</translation>
-<translation id="7746739418892731373">Google フォト ライブラリの写真と動画のハイライトが表示されています。ハイライトに何を表示するかは、<ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" /> で管理できます。
+<translation id="7746739418892731373">Google フォト ライブラリの写真と動画のハイライトが表示されます。ハイライトに何を表示するかは、<ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" /> で制御できます。
<ph name="BREAK" />
<ph name="BREAK" />
- カードメニューからこのカードの設定を管理することや、[Chrome をカスタマイズ] でその他のオプションを見ることができます。</translation>
+ カードメニューからこのカードの設定を管理することができ、[Chrome をカスタマイズ] でその他のオプションを確認できます。</translation>
<translation id="7750228210027921155">ピクチャー イン ピクチャー</translation>
<translation id="7751260505918304024">すべて表示</translation>
<translation id="7751619076382363711">削除されたサイトはありません</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_kk.xtb b/chromium/chrome/app/resources/generated_resources_kk.xtb
index 5ed77882085..b2704d9f371 100644
--- a/chromium/chrome/app/resources/generated_resources_kk.xtb
+++ b/chromium/chrome/app/resources/generated_resources_kk.xtb
@@ -179,7 +179,7 @@
<translation id="1166596238782048887">"<ph name="TAB_TITLE" />" қойындысы "<ph name="DESK_TITLE" />" үстеліне тиесілі.</translation>
<translation id="1168020859489941584"><ph name="TIME_REMAINING" /> ішінде ашылады…</translation>
<translation id="1169435433292653700"><ph name="FILE_NAME" /> файлында құпия немесе қауіпті деректер болуы мүмкін. Әкімші хабары: "<ph name="CUSTOM_MESSAGE" />".</translation>
-<translation id="1171135284592304528">Нысан өзгерген кезде оны пернетақта арқылы бөлектеу</translation>
+<translation id="1171135284592304528">Нысан өзгерген кезде оны пернетақта арқылы ерекшелеу</translation>
<translation id="1171515578268894665"><ph name="ORIGIN" /> веб-сайты HID құрылғысына жалғанғысы келеді.</translation>
<translation id="1172750555846831341">Екі бетіне басып шығару (күнтізбе)</translation>
<translation id="1173894706177603556">Атын өзгерту</translation>
@@ -732,9 +732,9 @@
<translation id="1697150536837697295">Өнер</translation>
<translation id="1697686431566694143">Файлды өңдеу</translation>
<translation id="1700079447639026019">Cookie файлдарын пайдалана алмайтын сайттар</translation>
-<translation id="1700201317341192482">Виртуалды картаны жою</translation>
+<translation id="1700201317341192482">Виртуалдық картаны жою</translation>
<translation id="1703331064825191675">Құпия сөздеріңіз жайлы уайымдамаңыз</translation>
-<translation id="1703666494654169921">Сайттардың виртуалды шындық құрылғыларын немесе деректерді пайдалануына рұқсат бермеу</translation>
+<translation id="1703666494654169921">Сайттардың виртуалдық шындық құрылғыларын немесе деректерді пайдалануына рұқсат бермеу</translation>
<translation id="1704097193565924901">Бас әріпке өзгерту</translation>
<translation id="1704230497453185209">Сайттардың дыбысты шығаруына рұқсат бермеу</translation>
<translation id="1704970325597567340">Қауіпсіздік шарасы <ph name="DATE" /> күні қолданылды.</translation>
@@ -1010,7 +1010,7 @@
<translation id="1962233722219655970">Бұл бет компьютеріңізде жұмыс істемейтін Native Client қолданбасын пайдаланады.</translation>
<translation id="1963227389609234879">Барлығын жою</translation>
<translation id="1963976881984600709">Стандартты қорғау</translation>
-<translation id="196425401113508486">Жылжытқан кезде, көрсеткіні бөлектеу</translation>
+<translation id="196425401113508486">Жылжытқан кезде, көрсеткіні ерекшелеу</translation>
<translation id="1965624977906726414">Арнайы рұқсаттары жоқ.</translation>
<translation id="1969654639948595766">WebRTC мәтіндік журналы (<ph name="WEBRTC_TEXT_LOG_COUNT" />)</translation>
<translation id="1970368523891847084">Бейне режимі қосылды</translation>
@@ -1091,7 +1091,7 @@
<translation id="204622017488417136">Құрылғыңыз бұрын орнатылған Chrome нұсқасына қайтарылады. Барлық пайдаланушы аккаунттары мен жергілікті деректер жойылады. Бұл әрекетті кері қайтару мүмкін емес.</translation>
<translation id="2046702855113914483">Рамен</translation>
<translation id="2046770133657639077">Құрылғының EID нөмірін көрсету</translation>
-<translation id="204706822916043810">Виртуалды құрылғы тексерілуде</translation>
+<translation id="204706822916043810">Виртуалдық құрылғы тексерілуде</translation>
<translation id="2048182445208425546">Желілік трафигіңізге кіру</translation>
<translation id="2048554637254265991">Контейнер басқарушысын іске қосу қатесі. Қайталап көріңіз.</translation>
<translation id="2048653237708779538">Әрекет қолжетімді емес</translation>
@@ -1222,7 +1222,7 @@
<translation id="2157474325782140681">Қосымша функцияларды пайдалану үшін осы Chromebook құрылғысымен жұмыс істеуге арналған қондыру станциясын пайдаланыңыз.</translation>
<translation id="215753907730220065">Толық экраннан шығу</translation>
<translation id="2157875535253991059">Бұл бет енді толық экранға ауысты.</translation>
-<translation id="2158475082070321257">Бөлектелген мәтіннің сілтемесін көшіру</translation>
+<translation id="2158475082070321257">Ерекшеленген мәтіннің сілтемесін көшіру</translation>
<translation id="2159488579268505102">USB-C</translation>
<translation id="216169395504480358">Wi-Fi желісін қосу…</translation>
<translation id="2162155940152307086">Синхрондау, сіз параметрлерден шыққан кезде, басталады.</translation>
@@ -1231,7 +1231,7 @@
<translation id="2163937499206714165">Қараңғы режимді қосу</translation>
<translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> және тағы 1 ауыстырғыш</translation>
<translation id="2165102982098084499">Бұл құрылғыларды QR кодын сканерлеу арқылы байланыстырдыңыз.</translation>
-<translation id="2165177462441582039">Әр элемент қанша уақыт бөлектеліп тұруы керектігін таңдаңыз</translation>
+<translation id="2165177462441582039">Әр элемент қанша уақыт ерекшеленіп тұруы керектігін таңдаңыз</translation>
<translation id="2166369534954157698">аәбвгғдеёжзийкқлмнңоөпрстуұүфхһцчшщъыіьэюя</translation>
<translation id="2169062631698640254">Бәрібір кіру</translation>
<translation id="2173302385160625112">Интернет байланысын тексеріңіз</translation>
@@ -1417,7 +1417,7 @@
<translation id="2322622365472107569">Аяқталу уақыты: <ph name="TIME" /></translation>
<translation id="2323018538045954000">Сақталған Wi-Fi желілері</translation>
<translation id="2325444234681128157">Құпия сөзді есте сақтау</translation>
-<translation id="2325760149602186433">Виртуалды картаны өшіру</translation>
+<translation id="2325760149602186433">Виртуалдық картаны өшіру</translation>
<translation id="2326188115274135041">Құлыпты автоматты түрде ашу функциясын қосу үшін PIN кодын растаңыз.</translation>
<translation id="2326931316514688470">Қолданбаны &amp;қайта жүктеу</translation>
<translation id="2327492829706409234">Қолданбаны қосу</translation>
@@ -1569,7 +1569,7 @@
<translation id="2468205691404969808">Бұл беттерді ашпасаңыз да, cookie файлдарын пайдаланып, параметрлерді сақтап қалады</translation>
<translation id="2468402215065996499">Тамагочи</translation>
<translation id="2468845464436879514">{NUM_TABS,plural, =1{<ph name="GROUP_TITLE" /> – 1 қойынды}other{<ph name="GROUP_TITLE" /> – # қойынды}}</translation>
-<translation id="2469141124738294431">Виртуалды машина күйі</translation>
+<translation id="2469141124738294431">Виртуалдық машина күйі</translation>
<translation id="2469259292033957819">Ешқандай принтер сақталмаған.</translation>
<translation id="2469375675106140201">Емлені тексеруді реттеу</translation>
<translation id="247051149076336810">Ортақ каталогтің URL мекенжайы</translation>
@@ -1653,7 +1653,7 @@
<translation id="253557089021624350">Кеңейтімдер қолданатын процестер саны</translation>
<translation id="2535799430745250929">Ешқандай ұялы байланыс желісі жоқ.</translation>
<translation id="2537395079978992874"><ph name="ORIGIN" /> мына файлдар мен қалталарды көреді және өңдей алады.</translation>
-<translation id="2537927931785713436">Виртуалды құрылғы кескіні тексерілуде</translation>
+<translation id="2537927931785713436">Виртуалдық құрылғы кескіні тексерілуде</translation>
<translation id="2538084450874617176">Бұл <ph name="DEVICE_TYPE" /> құрылғысын кім пайдаланады?</translation>
<translation id="2538361623464451692">Синхрондау өшірілген</translation>
<translation id="2540449034743108469">"Бастау" түймесін басып, кеңейтім әрекеттерін тыңдаңыз.</translation>
@@ -2043,7 +2043,7 @@
<translation id="2913331724188855103">Сайттарға cookie деректерін сақтауға және оқуға рұқсат беру (ұсынылған)</translation>
<translation id="2915102088417824677">Әрекеттер журналын көру</translation>
<translation id="2915873080513663243">Автоматты түрде сканерлеу</translation>
-<translation id="2916073183900451334">Веб-бетте "Қойынды" түймесін басқанда, сілтемелер мен нысан өрістері бөлектеледі</translation>
+<translation id="2916073183900451334">Веб-бетте "Қойынды" түймесін басқанда, сілтемелер мен нысан өрістері ерекшеленеді</translation>
<translation id="2916745397441987255">Кеңейтімдерден іздеу</translation>
<translation id="2918484639460781603">Параметрлерге өту</translation>
<translation id="2918484644467055090">Бұл құрылғыны аккаунтыңыз кіретін ұйымға тіркеу мүмкін емес, себебі құрылғы басқа ұйым арқылы басқару үшін белгіленген.</translation>
@@ -2377,7 +2377,7 @@
<translation id="3275778913554317645">Терезе ретінде ашу</translation>
<translation id="3278001907972365362">Google аккаунттарыңызды тексеріңіз</translation>
<translation id="3279092821516760512">Таңдалған контактілер маңайда болған кезде, сізбен бөлісе алады. Сіз қабылдамайынша, тасымалдау басталмайды.</translation>
-<translation id="3279230909244266691">Бұл процесс бірнеше минутқа созылуы мүмкін. Виртуалды құрылғы іске қосылуда.</translation>
+<translation id="3279230909244266691">Бұл процесс бірнеше минутқа созылуы мүмкін. Виртуалдық құрылғы іске қосылуда.</translation>
<translation id="3280237271814976245">Басқаша &amp;сақтау…</translation>
<translation id="3280243678470289153">Chrome браузерінде қалу</translation>
<translation id="3281892622610078515">Кепілдік берілетін файлдар мен бағдарламалар:</translation>
@@ -2451,7 +2451,7 @@
<translation id="3349933790966648062">Пайдаланылатын жад көлемі</translation>
<translation id="3354972872297836698"><ph name="DEVICE_NAME" /> құрылғысымен жұптау мүмкін болмады; әрекетті қайталау үшін құрылғыны таңдаңыз.</translation>
<translation id="3355936511340229503">Байланыс қатесі</translation>
-<translation id="3356469410714175391">(виртуалды карта қосулы)</translation>
+<translation id="3356469410714175391">(виртуалдық карта қосулы)</translation>
<translation id="3356580349448036450">Аяқталған</translation>
<translation id="3359256513598016054">Сертификат саясатының шектеулері</translation>
<translation id="3360297538363969800">Басып шығару әрекеті сәтсіз аяқталды. Принтерді тексеріп, әрекетті қайталаңыз.</translation>
@@ -2499,7 +2499,7 @@
<translation id="3404249063913988450">Скринсейверді қосу</translation>
<translation id="3405664148539009465">Қаріптерді реттеу</translation>
<translation id="3405763860805964263">...</translation>
-<translation id="3406290648907941085">Виртуалды шындық құрылғыларын мен деректерін пайдалануға рұқсаты барлар</translation>
+<translation id="3406290648907941085">Виртуалдық шындық құрылғыларын мен деректерін пайдалануға рұқсаты барлар</translation>
<translation id="3406396172897554194">Тілді немесе енгізу әдісін көрсетіңіз</translation>
<translation id="3406605057700382950">Бетбелгілер жолағын &amp;көрсету</translation>
<translation id="3409785640040772790">Maps</translation>
@@ -2561,7 +2561,7 @@
<translation id="3454213325559396544">Бұл – <ph name="DEVICE_TYPE" /> құрылғысына арналған бағдарламалық құрал мен қауіпсіздік жүйесінің жаңа нұсқасы. Бұдан кейін де жаңа нұсқаларын алғыңыз келсе, жаңа үлгіге өтіңіз.</translation>
<translation id="3455436146814891176">Синхрондауды шифрлау құпия сөзі</translation>
<translation id="345693547134384690">&amp;Кескінді жаңа қойындыда ашу</translation>
-<translation id="3458451003193188688">Желідегі қатеге байланысты виртуалды құрылғы орнатылмады. Әрекетті қайталаңыз немесе әкімшіге хабарласыңыз. Қате коды: <ph name="ERROR_CODE" />.</translation>
+<translation id="3458451003193188688">Желідегі қатеге байланысты виртуалдық құрылғы орнатылмады. Әрекетті қайталаңыз немесе әкімшіге хабарласыңыз. Қате коды: <ph name="ERROR_CODE" />.</translation>
<translation id="3458794975359644386">Бөлісуден бас тартылмады</translation>
<translation id="3459509316159669723">Басып шығару</translation>
<translation id="3459697287128633276">Аккаунтыңыз Google Play Store дүкеніне кіре алуы үшін идентификатор провайдері арқылы аутентификациялаңыз.</translation>
@@ -2596,7 +2596,7 @@
<translation id="3487007233252413104">анонимді функция</translation>
<translation id="3490695139702884919">Жүктеп алынуда… <ph name="PERCENT" />%</translation>
<translation id="3491669675709357988">Балаңыздың аккаунты Family Link ата-ана бақылауы үшін реттелмеген. Реттеуді аяқтағаннан кейін, ата-ана бақылауын қоса аласыз. Ата-ана бақылауы туралы ақпаратты Explore қолданбасынан таба аласыз.</translation>
-<translation id="3491678231052507920">VR сеанстарына кіре алуыңыз үшін, сайттар әдетте виртуалды шындық құрылғыларын және деректерді қолданады.</translation>
+<translation id="3491678231052507920">VR сеанстарына кіре алуыңыз үшін, сайттар әдетте виртуалдық шындық құрылғыларын және деректерді қолданады.</translation>
<translation id="3493486281776271508">Интернет байланысы керек.</translation>
<translation id="3493881266323043047">Жарамдылық</translation>
<translation id="3494769164076977169">Сайт бірінші файлдан кейін файлдарды автоматты түрде жүктеуге әрекет еткенде сұрау (ұсынылған)</translation>
@@ -2827,7 +2827,7 @@
<translation id="3719826155360621982">Негізгі бет</translation>
<translation id="372062398998492895">CUPS</translation>
<translation id="3721119614952978349">Сіз және Google</translation>
-<translation id="3722108462506185496">Виртуалды құрылғы қызметін іске қосу кезінде қате шықты. Кейінірек қайталап көріңіз.</translation>
+<translation id="3722108462506185496">Виртуалдық құрылғы қызметін іске қосу кезінде қате шықты. Кейінірек қайталап көріңіз.</translation>
<translation id="3727144509609414201">Қолжетімді WiFi желілері</translation>
<translation id="3727187387656390258">Қалқымалы терезені тексеру</translation>
<translation id="372722114124766626">Бір рет қана</translation>
@@ -3129,7 +3129,7 @@
<translation id="3984135167056005094">Электрондық мекенжайды қамтымау</translation>
<translation id="3984159763196946143">Демо режимі іске қосылмады</translation>
<translation id="3984431586879874039">Бұл сайтқа қауіпсіздік кілтін көруге рұқсат етілсін бе?</translation>
-<translation id="398477389655464998">Бөлектелген мәтіннің сілтемесін көшіру</translation>
+<translation id="398477389655464998">Ерекшеленген мәтіннің сілтемесін көшіру</translation>
<translation id="3984862166739904574">Жылдам жауаптар ұсынған анықтама</translation>
<translation id="3986164906089840270"><ph name="BEGIN_PARAGRAPH1" />ChromeOS құрылғыларына автоматты түрде жасалған есептерді жіберуге рұқсат берсеңіз, бізге ChromeOS жүйесіндегі ақауларды жоюға және оны жетілдіруге қатысты басымдықтарды анықтауға көмектесесіз. Мұндай есептерде ChromeOS бұзылған кезде қолданыста болған функциялар және әдетте пайдаланылатын жад көлемі сияқты ақпарат қамтылуы мүмкін.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Chrome құрылғыңыздың параметрлері арқылы кез келген уақытта мұндай есептерді жіберуге рұқсат бере және тыйым сала аласыз. Егер домен әкімшісі болсаңыз, бұл параметрді әкімші консолі арқылы өзгерте аласыз.<ph name="END_PARAGRAPH2" />
@@ -3313,7 +3313,7 @@
<translation id="4181841719683918333">Тілдер</translation>
<translation id="4184803915913850597">HID құрылғысы (<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />)</translation>
<translation id="4187424053537113647"><ph name="APP_NAME" /> орнатылуда...</translation>
-<translation id="4190828427319282529">Пернетақта фокусын бөлектеу</translation>
+<translation id="4190828427319282529">Пернетақта фокусын ерекшелеу</translation>
<translation id="4193836101014293726">Бұл профильді жою мүмкін емес</translation>
<translation id="419427585139779713">Бірден буынмен енгізу</translation>
<translation id="4194570336751258953">Tap-to-click мүмкіндігін қосу</translation>
@@ -3574,7 +3574,7 @@
<translation id="4460014764210899310">Топты тарату</translation>
<translation id="4462159676511157176">Реттелетін атау серверлері</translation>
<translation id="4465236939126352372"><ph name="APP_NAME" /> қолданбасы үшін шектелген уақыт: <ph name="TIME" /></translation>
-<translation id="4466068638972170851">Дауыстап оқылатын мазмұнды бөлектеп, "Іздеу + S" пернелерін басыңыз. Іздеу пернесін басып тұрыңыз немесе күй науасының жанындағы "Select-to-Speak" белгішесін түртіп, таңдау жасаңыз.</translation>
+<translation id="4466068638972170851">Дауыстап оқылатын мазмұнды ерекшелеп, "Іздеу + S" пернелерін басыңыз. Іздеу пернесін басып тұрыңыз немесе күй науасының жанындағы "Select-to-Speak" белгішесін түртіп, таңдау жасаңыз.</translation>
<translation id="4466839823729730432">Естеліктеріңізді осы жерден қараңыз</translation>
<translation id="4469324811108161144">Ескертпелерде <ph name="CHARACTER_LIMIT" /> таңбаға дейін болуы мүмкін.</translation>
<translation id="4469762931504673593"><ph name="ORIGIN" /> <ph name="FOLDERNAME" /> қалтасындағы файлдарды өңдей алады.</translation>
@@ -3859,7 +3859,7 @@
<translation id="473936925429402449">Таңдалды, <ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" />-картадағы қосымша мазмұн</translation>
<translation id="4739639199548674512">Билеттер</translation>
<translation id="4742334355511750246">Суреттерді көрсетуге рұқсаты жоқтар</translation>
-<translation id="4742970037960872810">Бөлектемеу</translation>
+<translation id="4742970037960872810">Ерекшелемеу</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Қолданбаларды жаңарту әдісі туралы ақпарат алу<ph name="END_LINK" /></translation>
<translation id="4744981231093950366">{NUM_TABS,plural, =1{Сайттың дыбысын қосу}other{Сайттардың дыбысын қосу}}</translation>
<translation id="474609389162964566">Assistant қолданбасына "Ok Google" деу арқылы кіру</translation>
@@ -3948,7 +3948,7 @@
<translation id="4838907349371614303">Құпия сөз жаңартылды</translation>
<translation id="4839303808932127586">Бейнені басқаша сақ&amp;тау…</translation>
<translation id="4840096453115567876">Бәрібір инкогнито режимінен шығасыз ба?</translation>
-<translation id="4841741146571978176">Талап етілетін виртуалды машина жоқ. Жалғастыру үшін "<ph name="VM_TYPE" />" виртуалды машинасын орнатып көріңіз.</translation>
+<translation id="4841741146571978176">Талап етілетін виртуалдық машина жоқ. Жалғастыру үшін "<ph name="VM_TYPE" />" виртуалдық машинасын орнатып көріңіз.</translation>
<translation id="4842976633412754305">Бұл бет аутентификацияланбаған дереккөздерден сценарийлерді жүктеуге әрекет етуде.</translation>
<translation id="4844333629810439236">Басқа пернетақталар</translation>
<translation id="4844633725025837809">Қосымша қауіпсіздік үшін Google Құпия сөз менеджеріне сақтамас бұрын құрылғыдағы құпия сөздерді шифрлауға болады.</translation>
@@ -4084,7 +4084,7 @@
<translation id="4971735654804503942">Қауіпті веб-сайттардан, жүктеп алынған файлдардан және кеңейтімдерден жылдам әрі белсенді қорғау. Құпия сөздің қолды болғанын хабарлайды. Браузерді пайдалану деректерінің Google-ға жіберілуін талап етеді.</translation>
<translation id="4972129977812092092">Принтер ақпаратын өзгерту</translation>
<translation id="4972164225939028131">Құпия сөз дұрыс емес</translation>
-<translation id="4972737347717125191">Сайттар виртуалды шындық құрылғыларын және деректерді пайдалануға рұқсат сұрай алады.</translation>
+<translation id="4972737347717125191">Сайттар виртуалдық шындық құрылғыларын және деректерді пайдалануға рұқсат сұрай алады.</translation>
<translation id="4973325300212422370">{NUM_TABS,plural, =1{Сайттың дыбысын өшіру}other{Сайттардың дыбысын өшіру}}</translation>
<translation id="497403230787583386">Қауіпсіздік тексерісі жүргізілді. Құжатыңыз басып шығарылады.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
@@ -4103,7 +4103,7 @@
<translation id="4992458225095111526">Powerwash растау</translation>
<translation id="4992473555164495036">Әкімшіңіз қолжетімді енгізу әдістерінің санын шектеді.</translation>
<translation id="4994754230098574403">Реттелуде</translation>
-<translation id="4996851818599058005">{NUM_VMS,plural, =0{"<ph name="VM_TYPE" />" виртуалды машиналары табылмады.}=1{1 "<ph name="VM_TYPE" />" виртуалды машинасы табылды: <ph name="VM_NAME_LIST" />.}other{{NUM_VMS} "<ph name="VM_TYPE" />" виртуалды машинасы табылды: <ph name="VM_NAME_LIST" />.}}</translation>
+<translation id="4996851818599058005">{NUM_VMS,plural, =0{"<ph name="VM_TYPE" />" виртуалдық машиналары табылмады.}=1{1 "<ph name="VM_TYPE" />" виртуалдық машинасы табылды: <ph name="VM_NAME_LIST" />.}other{{NUM_VMS} "<ph name="VM_TYPE" />" виртуалдық машинасы табылды: <ph name="VM_NAME_LIST" />.}}</translation>
<translation id="4997086284911172121">Интернет байланысы жоқ.</translation>
<translation id="4998430619171209993">Қосулы</translation>
<translation id="4999804342505941663">Мазаламау режимін қосу</translation>
@@ -4131,7 +4131,7 @@
<translation id="5027550639139316293">Электрондық пошта сертификаты</translation>
<translation id="5027562294707732951">Кеңейтім қосу</translation>
<translation id="5029568752722684782">Көшірмені өшіру</translation>
-<translation id="5029873138381728058">Виртуалды машиналар тексерілмеді.</translation>
+<translation id="5029873138381728058">Виртуалдық машиналар тексерілмеді.</translation>
<translation id="503155457707535043">Қолданбалар жүктеп алынуда</translation>
<translation id="5032430150487044192">QR кодын жасау мүмкін емес.</translation>
<translation id="5033137252639132982">Қозғалыс датчиктерін пайдалануға рұқсаты жоқтар</translation>
@@ -4305,7 +4305,7 @@
<translation id="5206215183583316675">"<ph name="CERTIFICATE_NAME" />" сертификатын жою керек пе?</translation>
<translation id="520621735928254154">Сертификатты импорттау қатесі</translation>
<translation id="5206787458656075734">{COUNT,plural, =1{Ұрланған құпия сөз өзгертілді. Тағы # құпия сөзіңіз ұрланған. Chrome осы құпия сөзді қазір тексеруге кеңес береді.}other{Ұрланған құпия сөз өзгертілді. Тағы # құпия сөзіңіз ұрланған. Chrome осы құпия сөздерді қазір тексеруге кеңес береді.}}</translation>
-<translation id="5207949376430453814">Мәтін курсорын бөлектеу</translation>
+<translation id="5207949376430453814">Мәтін курсорын ерекшелеу</translation>
<translation id="520840839826327499"><ph name="SERVICE_NAME" /> жарамды ChromeOS құрылғысын пайдаланып жатқаныңызды тексергісі келеді.</translation>
<translation id="5208548918290612795"><ph name="WEB_DRIVE" /> аутентификация токенін сақтау</translation>
<translation id="520902706163766447">Ағымдағы сәтте ашық қойындылар бойынша іздеу үшін Chrome пайдаланушы интерфейсінің жоғарғы бөлігіндегі қалқымалы анықтаманы қосады.</translation>
@@ -4628,7 +4628,7 @@
<translation id="5526745900034778153">Синхрондауды жалғастыру үшін аккаунтқа қайта кіріңіз</translation>
<translation id="5527463195266282916">Кеңейтімнің ескі нұсқасын орнатуға әрекет жасалды.</translation>
<translation id="5527474464531963247">Басқа желіні таңдауыңызға да болады.</translation>
-<translation id="5528295196101251711">Виртуалды машина атауы</translation>
+<translation id="5528295196101251711">Виртуалдық машина атауы</translation>
<translation id="5532223876348815659">Ғаламдық</translation>
<translation id="5533001281916885985"><ph name="SITE_NAME" /> үшін қажетті әрекеттер:</translation>
<translation id="5534304873398226603">Фотосурет не бейне жойылсын ба?</translation>
@@ -4889,7 +4889,7 @@
<translation id="5798079537501238810">Сайттар төлем өңдегіштерін орната алады.</translation>
<translation id="579915268381781820">Қауіпсіздік кілтіңіз өшірілді.</translation>
<translation id="5799478978078236781"><ph name="DEVICE_TYPE" /> құрылғысына қатысты кеңестерді, ұсыныстарды және жаңалықтарды алыңыз және пікірлер қалдырыңыз.</translation>
-<translation id="5799508265798272974">Linux виртуалды машинасы: <ph name="LINUX_VM_NAME" /></translation>
+<translation id="5799508265798272974">Linux виртуалдық машинасы: <ph name="LINUX_VM_NAME" /></translation>
<translation id="5800020978570554460">Мақсатты файл соңғы жүктеуден кейін қысқартылды немесе жойылды.</translation>
<translation id="5800351251499368110">Бүйірлік панельде іздеу бетін жабыңыз. Бүйірлік панельде іздеу беті ашық.</translation>
<translation id="5801568494490449797">Параметрлер</translation>
@@ -5021,7 +5021,7 @@
<translation id="5935158534896975820">Сертификатқа қол қою сұрауы дайындалуда (сервер жауабы күтілуде)</translation>
<translation id="5935656526031444304">"Қауіпсіз шолу" функциясын басқару</translation>
<translation id="5938002010494270685">Қауіпсіздік бойынша жаңартылған нұсқа бар</translation>
-<translation id="5938153366081463283">Виртуалды карта қосыңыз.</translation>
+<translation id="5938153366081463283">Виртуалдық карта қосыңыз.</translation>
<translation id="5939518447894949180">Қалпына келтіру</translation>
<translation id="5939719276406088041">Таңбаша жасау мүмкін емес.</translation>
<translation id="594048410531370124">Перне анықталмады. <ph name="RESPONSE" /> үшін кез келген пернені басыңыз.</translation>
@@ -5861,7 +5861,7 @@
<translation id="6776729248872343918">Fast Pair функциясын қосу</translation>
<translation id="6777817260680419853">Бағыттауға тыйым салынған</translation>
<translation id="6778737459546443941">Ата-анаңыз әлі мақұлдаған жоқ</translation>
-<translation id="6779092717724412415">Осылай бөлектеу үшін мәтінді таңдап, тінтуірдің оң жақ түймесін басыңыз.</translation>
+<translation id="6779092717724412415">Осылай ерекшелеу үшін мәтінді таңдап, тінтуірдің оң жақ түймесін басыңыз.</translation>
<translation id="6779447100905857289">себеттеріңіз</translation>
<translation id="677965093459947883">Тым кішкентай</translation>
<translation id="6781005693196527806">&amp;Іздеу жүйелерін басқару...</translation>
@@ -5879,8 +5879,8 @@
<translation id="6790428901817661496">Ойнату</translation>
<translation id="6790497603648687708"><ph name="EXTENSION_NAME" /> қашықтан қосылды</translation>
<translation id="6790820461102226165">Адам қосу…</translation>
-<translation id="6793604637258913070">Шыққанда не жылжығанда, курсорды бөлектеу</translation>
-<translation id="6795371939514004514">Автосканерлеу функциясы экрандағы элементтер арасында автоматты түрде жылжуға мүмкіндік береді. Элемент бөлектелген кезде, оны іске қосу үшін "Таңдау" пернесін басыңыз.</translation>
+<translation id="6793604637258913070">Шыққанда не жылжығанда, курсорды ерекшелеу</translation>
+<translation id="6795371939514004514">Автосканерлеу функциясы экрандағы элементтер арасында автоматты түрде жылжуға мүмкіндік береді. Элемент ерекшеленген кезде, оны іске қосу үшін "Таңдау" пернесін басыңыз.</translation>
<translation id="6795884519221689054">Панда</translation>
<translation id="6797493596609571643">Бір нәрсе дұрыс емес.</translation>
<translation id="6798420440063423019">PIN коды бірнеше рет қате енгізілгендіктен, қауіпсіздік кілті құлыпталды. Қауіпсіздік кілтін бастапқы күйге қайтаруыңыз қажет.</translation>
@@ -5892,7 +5892,7 @@
<translation id="6801129617625983991">Жалпы параметрлер</translation>
<translation id="6801435275744557998">Сенсорлық экранды калибрлеу</translation>
<translation id="6802031077390104172"><ph name="USAGE" /> (<ph name="OID" />)</translation>
-<translation id="680488281839478944">"<ph name="DEFAULT_VM_NAME" />" виртуалды машинасы бар.</translation>
+<translation id="680488281839478944">"<ph name="DEFAULT_VM_NAME" />" виртуалдық машинасы бар.</translation>
<translation id="6805647936811177813"><ph name="HOST_NAME" /> хостынан клиент сертификатын импорттау үшін <ph name="TOKEN_NAME" /> таңбалауышына кіріңіз.</translation>
<translation id="680572642341004180"><ph name="SHORT_PRODUCT_OS_NAME" /> жүйесінде RLZ бақылауын қосу.</translation>
<translation id="6808039367995747522">Жалғастыру үшін қауіпсіздік кілтін салып, іске қосу түймесін түртіңіз.</translation>
@@ -5958,7 +5958,7 @@
<translation id="6853388645642883916">Жаңарту құралы ұйқы режимінде</translation>
<translation id="68541483639528434">Басқа қойындыларды жабу</translation>
<translation id="6855892664589459354">Crostini қолданбалары мен файлдарының сақтық көшірмесін жасау және оларды қалпына келтіру</translation>
-<translation id="6856348640027512653">Виртуалды шындық құрылғыларын немесе деректерді пайдалануға рұқсаты жоқтар</translation>
+<translation id="6856348640027512653">Виртуалдық шындық құрылғыларын немесе деректерді пайдалануға рұқсаты жоқтар</translation>
<translation id="6856623341093082836">Сенсорлық экран дәлдігін орнату және реттеу</translation>
<translation id="6856850379840757744">Іске қосылса, барлық хабарландыру үнсіз болады.</translation>
<translation id="6857145580237920905">Powerwash функциясын пайдаланбас бұрын, eSIM профильдерін өшіріңіз</translation>
@@ -6078,7 +6078,7 @@
<translation id="6973611239564315524">Debian 10 (Buster) нұсқасы қолжетімді</translation>
<translation id="69739764870135975">Егер Google әдепкі іздеу жүйесі болса, сізге тиімді, контекске сай ұсыныстар беріледі.</translation>
<translation id="6974609594866392343">Офлайн демо режимі</translation>
-<translation id="697508444536771064">Linux виртуалды құрылғысын өшіру</translation>
+<translation id="697508444536771064">Linux виртуалдық құрылғысын өшіру</translation>
<translation id="6978121630131642226">Іздеу жүйелері</translation>
<translation id="6979044105893951891">Басқарылатын қонақ сеанстарын іске қосу және олардан шығу</translation>
<translation id="6979158407327259162">Google Drive</translation>
@@ -6130,7 +6130,7 @@
<translation id="7009709314043432820"><ph name="APP_NAME" /> камераңызды пайдалануда.</translation>
<translation id="701080569351381435">Дереккөзді көру</translation>
<translation id="7014174261166285193">Орнату сәтсіз аяқталды.</translation>
-<translation id="7014480873681694324">Бөлектемеу</translation>
+<translation id="7014480873681694324">Ерекшелемеу</translation>
<translation id="7017004637493394352">Қайтадан "Ok Google" деп айтыңыз</translation>
<translation id="7017219178341817193">Жаңа бет қосу</translation>
<translation id="7017354871202642555">Терезе орнатылғаннан кейін режимді орнату мүмкін емес.</translation>
@@ -6355,7 +6355,7 @@
<translation id="7260186537988033909">Құрылғыны киоск режимінде немесе цифрлық тақтада тіркеу аяқталды</translation>
<translation id="7262004276116528033">Бұл кіру қызметі <ph name="SAML_DOMAIN" /> доменінде орналасқан</translation>
<translation id="7264695323040866038">Қолдау көрсетілетін сілтемелер әрдайым <ph name="APP" /> қолданбасында ашылсын ба?</translation>
-<translation id="7267044199012331848">Виртуалды құрылғы орнатылмады. Әрекетті қайталаңыз немесе әкімшіге хабарласыңыз. Қате коды: <ph name="ERROR_CODE" />.</translation>
+<translation id="7267044199012331848">Виртуалдық құрылғы орнатылмады. Әрекетті қайталаңыз немесе әкімшіге хабарласыңыз. Қате коды: <ph name="ERROR_CODE" />.</translation>
<translation id="7267875682732693301">Саусақ ізінің басқа бөліктерін енгізу үшін саусағыңызды көтеріп тұрыңыз.</translation>
<translation id="7268127947535186412">Бұл параметрді құрылғы иесі басқарады.</translation>
<translation id="7269736181983384521">Nearby Share дерек трафигі</translation>
@@ -6451,7 +6451,7 @@
<translation id="7371490947952970241">Құрылғыдағы негізгі геодерек параметрін өшіру арқылы орналасқан жердің анықталуын өшіруге болады. Сонымен қатар Wi‑Fi мен мобильдік желілердің және сенсорлардың орынды анықтау үшін қолданылуын геодерек параметрлерінен өшіре аласыз.</translation>
<translation id="7371917887111892735">қойындылар бекітілген қойынды еніне дейін кішірейеді</translation>
<translation id="7374376573160927383">USB құрылғыларын басқару</translation>
-<translation id="7376553024552204454">Тінтуір курсорын қозғалыс барысында бөлектеу</translation>
+<translation id="7376553024552204454">Тінтуір курсорын қозғалыс барысында ерекшелеу</translation>
<translation id="737728204345822099">Осы сайтқа кіргеніңіз туралы жазба қауіпсіздік кілтінде сақталуы мүмкін.</translation>
<translation id="7377451353532943397">Датчиктерді пайдалануға тыйым салуды тоқтатпау</translation>
<translation id="7377481913241237033">Код арқылы қосылу</translation>
@@ -6777,7 +6777,7 @@
<translation id="7679171213002716280">Басқарылатын <ph name="PRINTER_COUNT" /> принтер бар.</translation>
<translation id="7680416688940118410">Сенсорлық экранды калибрлеу</translation>
<translation id="7681095912841365527">Сайт Bluetooth функциясын пайдалана алады</translation>
-<translation id="7681597159868843240">Сайттар әдетте виртуалды шындық немесе фитнес-трекер сияқты функциялар үшін құрылғының қозғалыс датчиктерін пайдаланады.</translation>
+<translation id="7681597159868843240">Сайттар әдетте виртуалдық шындық немесе фитнес-трекер сияқты функциялар үшін құрылғының қозғалыс датчиктерін пайдаланады.</translation>
<translation id="7683373461016844951">Жалғастыру үшін "Жарайды" түймесін түртіп, <ph name="DOMAIN" /> электрондық пошта мекенжайыңыздың жаңа профилін жасау үшін "Адамды қосу" түймесін түртіңіз.</translation>
<translation id="7684212569183643648">Әкімшіңіз орнатқан</translation>
<translation id="7684559058815332124">Адаптивті портал арқылы кіру бетіне өту</translation>
@@ -6792,7 +6792,7 @@
<translation id="7691077781194517083">Қауіпсіздік кілтін бастапқы күйіне қайтару мүмкін емес. Қате: <ph name="ERROR_CODE" />.</translation>
<translation id="7691163173018300413">"Ok Google"</translation>
<translation id="7691698019618282776">Crostini жүйесін жаңарту</translation>
-<translation id="7694246789328885917">Бөлектеу құралы</translation>
+<translation id="7694246789328885917">Ерекшелеу құралы</translation>
<translation id="7696063401938172191">"<ph name="PHONE_NAME" />" телефонында:</translation>
<translation id="769824636077131955">Бұл құжат қауіпсіздік тексерісін жүргізу үшін тым үлкен. 50 МБ-қа дейінгі құжаттарды басып шығаруға болады.</translation>
<translation id="7698507637739331665">Кейбір элемент бөгелді</translation>
@@ -7016,7 +7016,7 @@
<translation id="7903742244674067440">Файлда осы сертификат беруші орталықтарды анықтайтын сертификаттарыңыз бар</translation>
<translation id="7903925330883316394">Утилита: <ph name="UTILITY_TYPE" /></translation>
<translation id="7904526211178107182">Linux порттарын желідегі басқа құрылғыларға қолжетімді етіңіз.</translation>
-<translation id="7907837847548254634">Ерекшеленген нысанды жақсырақ көрінетіндей бөлектеу</translation>
+<translation id="7907837847548254634">Ерекшеленген нысанды жақсырақ көрінетіндей ерекшелеу</translation>
<translation id="7908378463497120834">Кешіріңіз, сыртқы жад құрылғыңыздағы кемінде бір бөлімді орнату мүмкін емес.</translation>
<translation id="7909324225945368569">Профиліңіздің атын өзгертіңіз.</translation>
<translation id="7909969815743704077">Инкогнито режимінде жүктелген</translation>
@@ -7729,7 +7729,7 @@
<translation id="863109444997383731">Сайттардың сізге хабарландырулар көрсету туралы сұрауына тыйым салынады. Сайт хабарландырулар жіберуге рұқсат сұраса, мекенжай жолағында тыйым салынғаны туралы индикатор пайда болады.</translation>
<translation id="8632104508818855045">Бұған дейін <ph name="ORIGIN" /> сайтында ешқандай кеңейтімге рұқсат бермеуді таңдағансыз.</translation>
<translation id="8633025649649592204">Соңғы іс-әрекеттер</translation>
-<translation id="8634348081024879304">Бұдан былай виртуалды картаны Google Pay қызметінде пайдалана алмайтын боласыз. <ph name="BEGIN_LINK" />Виртуалды карта туралы толығырақ<ph name="END_LINK" /></translation>
+<translation id="8634348081024879304">Бұдан былай виртуалдық картаны Google Pay қызметінде пайдалана алмайтын боласыз. <ph name="BEGIN_LINK" />Виртуалдық карта туралы толығырақ<ph name="END_LINK" /></translation>
<translation id="8635628933471165173">Қайта жүктелуде…</translation>
<translation id="8636284842992792762">Кеңейтімдер дайындалуда…</translation>
<translation id="8636500887554457830">Сайттардың қалқымалы терезелерді жіберуіне немесе бағытты ауыстыру тәсілдерін пайдалануына рұқсат бермеу</translation>
@@ -7991,7 +7991,7 @@
<translation id="8871974300055371298">Мазмұн параметрлері</translation>
<translation id="8872155268274985541">Жарамсыз киоск қолданбасының сыртқы жаңарту манифест файлы табылды. Киоск қолданбасын жаңарту сәтсіз аяқталды. USB картасын алып тастаңыз.</translation>
<translation id="8872506776304248286">Қолданбадан ашу</translation>
-<translation id="8872777911145321141">Cайтқа виртуалды шындық құрылғыларыңызды немесе деректерді пайдалануға рұқсат беру алдында сұрау (ұсынылады)</translation>
+<translation id="8872777911145321141">Cайтқа виртуалдық шындық құрылғыларыңызды немесе деректерді пайдалануға рұқсат беру алдында сұрау (ұсынылады)</translation>
<translation id="8874184842967597500">Қосылмаған</translation>
<translation id="8874341931345877644">Келесі құрылғыға трансляциялау:</translation>
<translation id="8875520811099717934">Linux жүйесін жаңарту</translation>
@@ -8139,7 +8139,7 @@
<translation id="9024158959543687197">Ортақ файлды орнату кезінде қате шықты. Ортақ қалтаның URL сілтемесін тексеріп, қайта орнатып көріңіз.</translation>
<translation id="9024692527554990034">Белгілі бір сайтта жылдам іздеу немесе басқа іздеу жүйесіне өту үшін мекенжай жолағында таңбашалар пайдалана аласыз.</translation>
<translation id="9026731007018893674">жүктеу</translation>
-<translation id="9026852570893462412">Бұл процесс бірнеше минутқа созылуы мүмкін. Виртуалды құрылғы жүктелуде.</translation>
+<translation id="9026852570893462412">Бұл процесс бірнеше минутқа созылуы мүмкін. Виртуалдық құрылғы жүктелуде.</translation>
<translation id="9027459031423301635">Сілтемені жаңа &amp;қойындыда ашу</translation>
<translation id="9029667986262585240">Аккаунтыңызда Күшейтілген Safe Browsing функциясын өшірдіңіз.</translation>
<translation id="9030515284705930323">Ұйымыңыз аккаунт үшін Google Play Store қызметін қоспаған. Қосымша ақпарат алу үшін әкімшіге хабарласыңыз.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_km.xtb b/chromium/chrome/app/resources/generated_resources_km.xtb
index 29b9a409b0f..b30b7100a3e 100644
--- a/chromium/chrome/app/resources/generated_resources_km.xtb
+++ b/chromium/chrome/app/resources/generated_resources_km.xtb
@@ -2119,7 +2119,7 @@
<translation id="2966937470348689686">គ្រប់គ្រងចំណូលចិត្ត Android</translation>
<translation id="2967926928600500959">URL ដែលត្រូវនឹង​វិធានទាំងនេះ​នឹងត្រូវបានបង្ខំឱ្យបើក​នៅក្នុង​កម្មវិធីរុករក​តាមអ៊ីនធឺណិត​ជាក់លាក់។</translation>
<translation id="2972581237482394796">ធ្វើវិញ</translation>
-<translation id="2973324205039581528">បិទសំឡេង​ទំព័រ</translation>
+<translation id="2973324205039581528">បិទសំឡេង​គេហទំព័រ</translation>
<translation id="2973537811036309675">ផ្ទាំង​ចំហៀង</translation>
<translation id="2976557544729462544">ឧបករណ៍មួយចំនួនតម្រូវឱ្យអ្នកបិទការការពារការចូលប្រើទិន្នន័យ ដើម្បីដំណើរការបានត្រឹមត្រូវ ឬពេញលេញ។</translation>
<translation id="2977480621796371840">លុបចេញ​ពីក្រុម</translation>
@@ -5000,7 +5000,7 @@
<translation id="5891688036610113830">បណ្ដាញ Wi-Fi ជា​អាទិភាព</translation>
<translation id="5895138241574237353">ចាប់ផ្តើមឡើងវិញ</translation>
<translation id="5895335062901455404">សកម្មភាព និង​ចំណូលចិត្ត​ដែលអ្នក​បានរក្សាទុក​នឹងអាចប្រើបាន​នៅលើរាល់​ឧបករណ៍ ChromeOS Flex នៅពេលអ្នក​ចូល​ដោយប្រើ​គណនី Google របស់អ្នក។ អ្នកអាចជ្រើសរើស​អ្វីដែលត្រូវធ្វើសមកាលកម្ម​នៅក្នុងការកំណត់។</translation>
-<translation id="5896436821193322561">កុំអនុញ្ញាត</translation>
+<translation id="5896436821193322561">មិនអនុញ្ញាត</translation>
<translation id="5900302528761731119">រូបថត Google ទម្រង់</translation>
<translation id="590036993063074298">ព័ត៌មានលម្អិតអំពីគុណភាពនៃការបញ្ចាំង</translation>
<translation id="5901069264981746702">ទិន្នន័យស្នាមម្រាមដៃ​របស់អ្នកត្រូវបាន​រក្សាទុកយ៉ាង​មានសុវត្ថិភាព និងមិនចេញពី <ph name="DEVICE_TYPE" /> របស់អ្នកឡើយ។ <ph name="LINK_BEGIN" />ស្វែងយល់បន្ថែម<ph name="LINK_END" /></translation>
diff --git a/chromium/chrome/app/resources/generated_resources_kn.xtb b/chromium/chrome/app/resources/generated_resources_kn.xtb
index acbf1141e71..65a3ce1c1cc 100644
--- a/chromium/chrome/app/resources/generated_resources_kn.xtb
+++ b/chromium/chrome/app/resources/generated_resources_kn.xtb
@@ -3873,7 +3873,7 @@
<translation id="4742334355511750246">ಚಿತ್ರಗಳನ್ನು ತೋರಿಸಲು ಈ ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation>
<translation id="4742970037960872810">ಹೈಲೈಟ್ ತೆಗೆದುಹಾಕಿ</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{ಸೈಟ್‌ ಅನ್ನು ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡಿ}one{ಸೈಟ್‌ಗಳನ್ನು ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡಿ}other{ಸೈಟ್‌ಗಳನ್ನು ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡಿ}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{ಸೈಟ್‌ ಅನ್ನು ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡಿ}one{ಸೈಟ್‌ ಅನ್ನು ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡಿ}other{ಸೈಟ್‌ಗಳನ್ನು ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡಿ}}</translation>
<translation id="474609389162964566">"Ok Google" ಎಂದು ಎಚ್ಚರಿಸುವ ಮೂಲಕ ನಿಮ್ಮ Assistant ಅನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
<translation id="4746351372139058112">Messages</translation>
<translation id="4748783296226936791">ಅಸಹಜ ಕೀಬೋರ್ಡ್‌ಗಳು, ಗೇಮ್ ಕಂಟ್ರೋಲರ್‌ಗಳು ಮತ್ತು ಇತರ ಸಾಧನಗಳನ್ನು ಬಳಸುವ ಫೀಚರ್‌ಗಳಿಗಾಗಿ ಸೈಟ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ HID ಸಾಧನಗಳಿಗೆ ಕನೆಕ್ಟ್ ಆಗುತ್ತವೆ</translation>
@@ -4098,7 +4098,7 @@
<translation id="4972129977812092092">ಪ್ರಿಂಟರ್‌ ಅನ್ನು ಎಡಿಟ್‌ ಮಾಡಿ</translation>
<translation id="4972164225939028131">ಪಾಸ್‌ವರ್ಡ್ ತಪ್ಪಾಗಿದೆ</translation>
<translation id="4972737347717125191">ಸೈಟ್‌ಗಳು, ವರ್ಚುವಲ್ ರಿಯಾಲಿಟಿ ಸಾಧನಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಬಳಸಲು ಕೇಳಬಹುದು</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{ಸೈಟ್‌ ಅನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}one{ಸೈಟ್‌ಗಳನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}other{ಸೈಟ್‌ಗಳನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{ಸೈಟ್‌ ಅನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}one{ಸೈಟ್‌ ಅನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}other{ಸೈಟ್‌ಗಳನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಿ}}</translation>
<translation id="497403230787583386">ಭದ್ರತೆ ಪರಿಶೀಲನೆಗಳನ್ನು ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಪ್ರಿಂಟ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">ಪ್ರವೇಶ ದೃಢೀಕರಿಸಿ</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ko.xtb b/chromium/chrome/app/resources/generated_resources_ko.xtb
index 6e986a09558..5074dc20c86 100644
--- a/chromium/chrome/app/resources/generated_resources_ko.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ko.xtb
@@ -3277,7 +3277,7 @@
<translation id="4117637339509843559">어두운 모드</translation>
<translation id="4117714603282104018">터치패드 햅틱 반응</translation>
<translation id="4118579674665737931">기기를 재부팅한 후 다시 시도해 주세요.</translation>
-<translation id="412022815379960229">로그인할 때마다 Google 포토에서 나의 소중한 추억들과 다시 만나세요.</translation>
+<translation id="412022815379960229">로그인할 때마다 Google 포토에서 소중한 추억들을 만나보세요.</translation>
<translation id="4120388883569225797">보안 키를 재설정할 수 없습니다.</translation>
<translation id="4120817667028078560">경로가 너무 김</translation>
<translation id="4124823734405044952">보안 키가 재설정되었습니다.</translation>
@@ -3880,7 +3880,7 @@ https://support.google.com/chromebook/?p=tpm</translation>
<translation id="4742334355511750246">이미지 표시가 허용되지 않음</translation>
<translation id="4742970037960872810">강조표시 삭제</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />애플리케이션 업데이트 방법 알아보기<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{사이트 숨기기 취소}other{사이트 숨기기 취소}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{사이트 음소거 취소}other{사이트 음소거 취소}}</translation>
<translation id="474609389162964566">"Hey Google"로 어시스턴트에 액세스</translation>
<translation id="4746351372139058112">메시지</translation>
<translation id="4748783296226936791">사이트에서는 흔히 사용되지 않는 키보드, 게임 컨트롤러, 기타 기기가 필요한 기능을 지원하기 위해 주로 HID 기기에 연결합니다.</translation>
@@ -4104,7 +4104,7 @@ https://support.google.com/chromebook/?p=tpm</translation>
<translation id="4972129977812092092">프린터 수정</translation>
<translation id="4972164225939028131">잘못된 비밀번호</translation>
<translation id="4972737347717125191">사이트에서 가상 현실 기기 및 데이터의 사용을 요청할 수 있음</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{사이트 숨기기}other{사이트 숨기기}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{사이트 음소거}other{사이트 음소거}}</translation>
<translation id="497403230787583386">보안 확인이 완료되었습니다. 문서가 인쇄됩니다.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">액세스 확인</translation>
@@ -5683,7 +5683,7 @@ https://support.google.com/chromebook/?p=tpm</translation>
<translation id="6556903358015358733">테마 및 배경화면</translation>
<translation id="6557290421156335491">내 바로가기</translation>
<translation id="6560151649238390891">추천 그림 이모티콘 삽입됨</translation>
-<translation id="6561560012278703671">눈에 띄지 않는 메시지 사용(방해가 되지 않도록 알림 메시지 차단)</translation>
+<translation id="6561560012278703671">조용한 메시지 사용(방해가 되지 않도록 알림 메시지 차단)</translation>
<translation id="6561726789132298588">입력</translation>
<translation id="6562117348069327379">시스템 로그를 다운로드 디렉터리에 저장합니다.</translation>
<translation id="656293578423618167">파일 경로 또는 이름이 너무 깁니다. 짧은 이름으로 변경하거나 다른 위치에 저장하세요.</translation>
@@ -6866,7 +6866,7 @@ https://support.google.com/chromebook/?p=tpm</translation>
<translation id="7744192722284567281">정보 유출에 포함됨</translation>
<translation id="7744649840067671761">할당을 시작하려면 새 스위치 또는 키보드 키를 누르세요.
할당을 삭제하려면 할당된 스위치 또는 키를 누르세요.</translation>
-<translation id="7746739418892731373">Google 사진 라이브러리의 사진 및 동영상 하이라이트입니다. <ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" />에서 하이라이트에 표시되는 항목을 제어할 수 있습니다.
+<translation id="7746739418892731373">Google 포토 라이브러리의 사진 및 동영상 하이라이트입니다. <ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" />에서 하이라이트에 표시되는 항목을 제어할 수 있습니다.
<ph name="BREAK" />
<ph name="BREAK" />
카드 메뉴에서 카드 설정을 관리하거나 Chrome 맞춤설정에서 추가 옵션을 볼 수 있습니다.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ky.xtb b/chromium/chrome/app/resources/generated_resources_ky.xtb
index 47ae70643bb..505b411ea78 100644
--- a/chromium/chrome/app/resources/generated_resources_ky.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ky.xtb
@@ -832,7 +832,7 @@
<translation id="177989070088644880">Колдонмо (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
<translation id="1780152987505130652">Топту жабуу</translation>
<translation id="1780273119488802839">Кыстармалар өткөрүлүп алынууда...</translation>
-<translation id="178092663238929451">Жакын жердеги кишилерден файлдарды алуу жана жөнөтүү үчүн Nearby Share функциясын жөндөңүз</translation>
+<translation id="178092663238929451">Жакын жердеги кишилерден файлдарды алуу жана жөнөтүү үчүн Nearby Share функциясын тууралаңыз</translation>
<translation id="1781291988450150470">Учурдагы PIN код</translation>
<translation id="1781502536226964113">Жаңы өтмөк бетин ачуу</translation>
<translation id="1781771911845953849">Аккаунттар жана шайкештирүү</translation>
@@ -1805,7 +1805,7 @@ Family Link колдонмосун түзмөгүңүзгө орнотуп, бу
<translation id="267978143066552517">{NUM_APPS,plural, =1{Колдоого алынбаган 1 колдонмону өчүрүү}other{Колдоого алынбаган # колдонмону өчүрүү}}</translation>
<translation id="268053382412112343">Та&amp;ржымал</translation>
<translation id="2681124317993121768">Конок профилдер колдоого алынбайт</translation>
-<translation id="2682498795777673382">Ата-эненин жаңыртуусу</translation>
+<translation id="2682498795777673382">Ата-энең параметрлерди өзгөрттү</translation>
<translation id="2683638487103917598">Папка ылганды</translation>
<translation id="2684004000387153598">Улантуу үчүн "Макул" дегенге тийиңиз да, "Адам кошуу" баскычын чыкылдатып, электрондук почта дарегиңиз үчүн жаңы профиль түзүп алыңыз.</translation>
<translation id="2687403674020088961">Бардык cookie файлдарды бөгөттөө (сунушталбайт)</translation>
@@ -2119,7 +2119,7 @@ Family Link колдонмосун түзмөгүңүзгө орнотуп, бу
<translation id="2966937470348689686">Android жеке жөндөөлөрүн башкаруу</translation>
<translation id="2967926928600500959">Бул эрежелерге туура келген URL'дер белгилүү бир серепчиде мажбурланып ачылат.</translation>
<translation id="2972581237482394796">&amp;Кайталоо</translation>
-<translation id="2973324205039581528">Сайттын үнүн өчүрүү</translation>
+<translation id="2973324205039581528">Сайттын үнүн басуу</translation>
<translation id="2973537811036309675">Капталдагы тилке</translation>
<translation id="2976557544729462544">Айрым түзмөктөрдүн туура иштеши же майнаптуулугун жогорулатуу үчүн дайын-даректерге кирүүнү коргоо функциясын өчүрүү талап кылынат.</translation>
<translation id="2977480621796371840">Топтон алып салуу</translation>
@@ -4266,7 +4266,7 @@ Family Link колдонмосун түзмөгүңүзгө орнотуп, бу
<translation id="514575469079499857">Жайгашкан жерди аныктоо үчүн IP дарегиңизди колдонуңуз (демейки)</translation>
<translation id="5147103632304200977">Сайт HID түзмөктөрүн колдонгону жатканда уруксат суралсын (сунушталат)</translation>
<translation id="5148277445782867161">Google'дун жайгашкан жерди аныктоо кызматы түзмөктүн жайгашкан жерин болжолдоп билүү үчүн Wi‑Fi, мобилдик тармактар жана сенсорлор сыяктуу булактарды колдонот.</translation>
-<translation id="5150070631291639005">Купуялык жөндөөлөрү</translation>
+<translation id="5150070631291639005">Купуялык параметрлери</translation>
<translation id="5150254825601720210">Netscape Тастыктама SSL сервер аталышы</translation>
<translation id="5151354047782775295">Дисктен орун бошотуңуз же автоматтык түрдө жок кылына турган дайындарды тандаңыз</translation>
<translation id="5153234146675181447">Телефон унутулсун</translation>
@@ -6862,7 +6862,7 @@ Family Link колдонмосун түзмөгүңүзгө орнотуп, бу
<translation id="7742558784808143689"><ph name="SITE_NAME" />, анын астындагы бардык сайттардагы, ошондой эле орнотулган колдонмолордогу сайтка тиешелүү маалыматтар жана уруксаттар тазалансынбы?</translation>
<translation id="7742706086992565332">Айрым сайттардын көрүнүшүн чоңойтуу же кичирейтүү функциясын колдоно аласыз</translation>
<translation id="7742879569460013116">Шилтемени төмөнкү менен бөлүшүү:</translation>
-<translation id="774377079771918250">Кайда сакталаарын тандаңыз</translation>
+<translation id="774377079771918250">Кайда сакталарын тандаңыз</translation>
<translation id="7744047395460924128">Басып чыгаруу таржымалыңызды көрүү</translation>
<translation id="7744192722284567281">Сырсөз уурдалды</translation>
<translation id="7744649840067671761">Башка аракеттерди дайындоо үчүн жаңы которгучту же баскычтоптогу баскычты таптап коюңуз.
diff --git a/chromium/chrome/app/resources/generated_resources_lo.xtb b/chromium/chrome/app/resources/generated_resources_lo.xtb
index f8e7d2c802c..595baba0513 100644
--- a/chromium/chrome/app/resources/generated_resources_lo.xtb
+++ b/chromium/chrome/app/resources/generated_resources_lo.xtb
@@ -2118,7 +2118,7 @@
<translation id="2966937470348689686">ຈັດການການຕັ້ງຄ່າ Android</translation>
<translation id="2967926928600500959">URL ທີ່ກົງກັບກົດລະບຽບເຫຼົ່ານີ້ຈະຖືກບັງຄັບໃຫ້ເປີດໃນໂປຣແກຣມທ່ອງເວັບສະເພາະ.</translation>
<translation id="2972581237482394796">ເຮັດຄືນ</translation>
-<translation id="2973324205039581528">ປິດເວັບໄຊ</translation>
+<translation id="2973324205039581528">ປິດສຽງເວັບໄຊ</translation>
<translation id="2973537811036309675">ແຜງຄວບຄຸມດ້ານຂ້າງ</translation>
<translation id="2976557544729462544">ອຸປະກອນບາງຢ່າງຕ້ອງການໃຫ້ທ່ານປິດການນຳໃຊ້ການປົກປ້ອງການເຂົ້າເຖິງຂໍ້ມູນເພື່ອໃຫ້ເຮັດວຽກໄດ້ຢ່າງຖືກຕ້ອງ ຫຼື ເຕັມປະສິດທິພາບ.</translation>
<translation id="2977480621796371840">ລຶບອອກຈາກກຸ່ມ</translation>
@@ -7848,7 +7848,7 @@
<translation id="8720816553731218127">ການລິເລີ່ມຄຸນລັກສະນະເວລາການຕິດຕັ້ງໝົດເວລາແລ້ວ.</translation>
<translation id="8722912030556880711">ສົ່ງຂໍ້ມູນການນຳໃຊ້ ແລະ ການວິເຄາະ. ອຸປະກອນນີ້ກຳລັງສົ່ງຂໍ້ມູນການວິເຄາະ, ຂໍ້ມູນອຸປະກອນ ແລະ ການໃຊ້ແອັບໃຫ້ Google ໂດຍອັດຕະໂນມັດໃນຂະນະນີ້. ນີ້ຈະຊ່ວຍປັບປຸງຄວາມສະຖຽນຂອງລະບົບ ແລະ ແອັບ ແລະ ການປັບປຸງອື່ນໆ. ບາງຂໍ້ມູນແບບຮວມກັນຍັງຈະຊ່ວຍແອັບ ແລະ ຮຸ້ນສ່ວນຂອງ Google ນຳອີກ ເຊັ່ນ: ຜູ້ພັດທະນາ Android. ຖ້າເປີດການຕັ້ງຄ່າການເຄື່ອນໄຫວເວັບ ແລະ ແອັບເພີ່ມເຕີມຂອງທ່ານ, ລະບົບອາດຈະບັນທຶກຂໍ້ມູນນີ້ໄວ້ໃນບັນຊີ Google ຂອງທ່ານ. <ph name="BEGIN_LINK2" />ສຶກສາ​ເພີ່ມ​ເຕີມ<ph name="END_LINK2" /></translation>
<translation id="8724405322205516354">ເມື່ອທ່ານເຫັນໄອຄອນນີ້, ໃຫ້ໃຊ້ນິ້ວມືຂອງທ່ານເພື່ອລະບຸຕົວຕົນ ຫຼື ອະນຸມັດການສັ່ງຊື້.</translation>
-<translation id="8724409975248965964">ເພີ່ມລາຍນີ້ວມືແລ້ວ</translation>
+<translation id="8724409975248965964">ເພີ່ມລາຍນິ້ວມືແລ້ວ</translation>
<translation id="8724859055372736596">ສະ​ແດງ​ຢູ່​ໃນ​ໂຟລ​ເດີ</translation>
<translation id="8725066075913043281">ລອງໃໝ່ອີກ</translation>
<translation id="8725178340343806893">ລາຍການທີ່ມັກ/ບຸກມາກ</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_lv.xtb b/chromium/chrome/app/resources/generated_resources_lv.xtb
index 804ed0299a8..debce2e47a3 100644
--- a/chromium/chrome/app/resources/generated_resources_lv.xtb
+++ b/chromium/chrome/app/resources/generated_resources_lv.xtb
@@ -2106,7 +2106,7 @@ Saskaņā ar domēna <ph name="DOMAIN" /> prasībām viedkartei ir jābūt ievie
<translation id="2966937470348689686">Pārvaldīt Android preferences</translation>
<translation id="2967926928600500959">Šīm kārtulām atbilstošie URL tiks piespiedu kārtā atvērti noteiktā pārlūkā.</translation>
<translation id="2972581237482394796">&amp;Pāratsaukt</translation>
-<translation id="2973324205039581528">Nerādīt vietni</translation>
+<translation id="2973324205039581528">Izslēgt skaņu vietnē</translation>
<translation id="2973537811036309675">Sānu panelis</translation>
<translation id="2976557544729462544">Dažās perifērajās ierīcēs ir jāatspējo datu piekļuves aizsardzība, lai tās darbotos pareizi vai pilnīgi.</translation>
<translation id="2977480621796371840">Noņemt no grupas</translation>
@@ -3867,7 +3867,7 @@ Vai vēlaties palaist rīku <ph name="CONTROL_PANEL_APPLET_NAME" />?</translatio
<translation id="4742334355511750246">Nedrīkst rādīt attēlus</translation>
<translation id="4742970037960872810">Atcelt teksta atzīmēšanu</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Uzzināt, kā atjaunināt lietojumprogrammas<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{Rādīt vietni}zero{Rādīt vietnes}one{Rādīt vietnes}other{Rādīt vietnes}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{Ieslēgt skaņu vietnē}zero{Ieslēgt skaņu vietnēs}one{Ieslēgt skaņu vietnēs}other{Ieslēgt skaņu vietnēs}}</translation>
<translation id="474609389162964566">Piekļuve Asistentam ar komandu “Ok Google”</translation>
<translation id="4746351372139058112">Messages</translation>
<translation id="4748783296226936791">Parasti vietnēs savienojums ar HID ierīcēm tiek veidots, lai nodrošinātu funkcijas, kuru darbībai nepieciešamas reti sastopamas tastatūras, spēļu vadāmierīces un citas ierīces.</translation>
@@ -4091,7 +4091,7 @@ Vai vēlaties palaist rīku <ph name="CONTROL_PANEL_APPLET_NAME" />?</translatio
<translation id="4972129977812092092">Printera rediģēšana</translation>
<translation id="4972164225939028131">Nepareiza parole</translation>
<translation id="4972737347717125191">Atļaut vietnēm pieprasīt atļauju izmantot virtuālās realitātes ierīces un datus</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Nerādīt vietni}zero{Nerādīt vietnes}one{Nerādīt vietnes}other{Nerādīt vietnes}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Izslēgt skaņu vietnē}zero{Izslēgt skaņu vietnēs}one{Izslēgt skaņu vietnēs}other{Izslēgt skaņu vietnēs}}</translation>
<translation id="497403230787583386">Drošības pārbaudes ir pabeigtas. Dokuments tiks izdrukāts.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Piekļuves apstiprināšana</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ml.xtb b/chromium/chrome/app/resources/generated_resources_ml.xtb
index 75308f5d91c..e699d814127 100644
--- a/chromium/chrome/app/resources/generated_resources_ml.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ml.xtb
@@ -254,7 +254,7 @@
<translation id="124116460088058876">കൂടുതൽ ഭാഷകൾ</translation>
<translation id="1241753985463165747">നിർദ്ദേശിക്കപ്പെടുമ്പോൾ നിലവിലെ വെബ്‌സൈറ്റിലെ നിങ്ങളുടെ ഡാറ്റ മുഴുവൻ വായിച്ച് അതിൽ മാറ്റം വരുത്തുക</translation>
<translation id="1242633766021457174"><ph name="THIRD_PARTY_TOOL_NAME" />, നിങ്ങളുടെ ക്രമീകരണം റീസെറ്റ് ചെയ്യാൻ താൽപ്പര്യപ്പെടുന്നു.</translation>
-<translation id="1243314992276662751">അപ്‌ലോഡുചെയ്യുക</translation>
+<translation id="1243314992276662751">അപ്‌ലോഡ് ചെയ്യുക</translation>
<translation id="1243436884219965846">പാസ്‌വേഡുകൾ അവലോകനം ചെയ്യൂ</translation>
<translation id="1244265436519979884">Linux പുനഃസ്ഥാപിക്കൽ നിലവിൽ പുരോഗതിയിലാണ്</translation>
<translation id="1244303850296295656">വിപുലീകരണ പിശക്</translation>
@@ -2663,7 +2663,7 @@
<translation id="3554493885489666172">നിങ്ങളുടെ ഉപകരണം മാനേജ് ചെയ്യുന്നത് <ph name="PROFILE_NAME" /> ആണ്. ഈ ഉപകരണത്തിലെ ഏത് പ്രൊഫൈലിലുള്ള ഡാറ്റയും അഡ്‌മിൻമാർക്ക് ആക്‌സസ് ചെയ്യാം.</translation>
<translation id="3555812735919707620">വിപുലീകരണം നീക്കംചെയ്യുക</translation>
<translation id="3556000484321257665">നിങ്ങളുടെ തിരയൽ യന്ത്രം <ph name="URL" /> എന്നതിലേക്ക് മാറ്റി.</translation>
-<translation id="3556433843310711081">നിങ്ങൾക്ക് വേണ്ടി ഇത് അൺബ്ലോക്കുചെയ്യാൻ മാനേജർക്ക് കഴിയും</translation>
+<translation id="3556433843310711081">നിങ്ങൾക്ക് വേണ്ടി ഇത് അൺബ്ലോക്ക് ചെയ്യാൻ മാനേജർക്ക് കഴിയും</translation>
<translation id="3557101512409028104">Family Link ഉപയോഗിച്ച് വെബ്സൈറ്റ് നിയന്ത്രണങ്ങളും സ്ക്രീൻ സമയ പരിധികളും സജ്ജീകരിക്കുക</translation>
<translation id="3559262020195162408">ഉപകരണത്തിൽ നയം ഇൻസ്‌റ്റാൾ ചെയ്യാനായില്ല.</translation>
<translation id="3559533181353831840">ഏകദേശം <ph name="TIME_LEFT" /> ശേഷിക്കുന്നു</translation>
@@ -4827,7 +4827,7 @@
<translation id="5728450728039149624">Smart Lock സ്ക്രീൻ ലോക്ക് ഓപ്ഷനുകൾ</translation>
<translation id="5729712731028706266">&amp;കാണുക</translation>
<translation id="5731247495086897348">ഒട്ടിക്കു&amp;കയും പോകുകയും ചെയ്യുക</translation>
-<translation id="5732392974455271431">നിങ്ങൾക്ക് വേണ്ടി ഇത് അൺബ്ലോക്കുചെയ്യാൻ രക്ഷിതാക്കൾക്ക് കഴിയും</translation>
+<translation id="5732392974455271431">നിങ്ങൾക്ക് വേണ്ടി ഇത് അൺബ്ലോക്ക് ചെയ്യാൻ രക്ഷിതാക്കൾക്ക് കഴിയും</translation>
<translation id="5734362860645681824">കമ്മ്യൂണിക്കേഷനുകൾ</translation>
<translation id="5734697361979786483">ഫയൽ പങ്കിടൽ ചേർക്കുക</translation>
<translation id="5736796278325406685">ശരിയായ ഉപയോക്തൃനാമം നൽകുക</translation>
@@ -6861,7 +6861,7 @@
<translation id="7753735457098489144">സ്‌റ്റോറേജ് സ്‌പെയ്‌സ് ഇല്ലാത്തതിനാൽ ഇൻസ്‌റ്റാൾ ചെയ്യാനായില്ല. ഇടം സൃഷ്‌ടിക്കാൻ, ഉപകരണ സ്റ്റോറേജിൽ നിന്ന് ഫയലുകൾ ഇല്ലാതാക്കുക.</translation>
<translation id="7754347746598978109">JavaScript ഉപയോഗിക്കാൻ അനുവദിക്കുന്നില്ല</translation>
<translation id="7754704193130578113">ഡൗൺലോഡ് ചെയ്യുന്നതിനു മുമ്പ് ഓരോ ഫയലും എവിടെ സംരക്ഷിക്കണമെന്ന് ചോദിക്കുക</translation>
-<translation id="7755287808199759310">നിങ്ങൾക്ക് വേണ്ടി ഇത് അൺബ്ലോക്കുചെയ്യാൻ രക്ഷിതാവിന് കഴിയും</translation>
+<translation id="7755287808199759310">നിങ്ങൾക്ക് വേണ്ടി ഇത് അൺബ്ലോക്ക് ചെയ്യാൻ രക്ഷിതാവിന് കഴിയും</translation>
<translation id="7757592200364144203">ഉപകരണത്തിന്റെ പേര് മാറ്റുക</translation>
<translation id="7757739382819740102">സമീപത്തുള്ള കോൺടാക്റ്റുകൾക്ക് നിങ്ങളുമായി പങ്കിടാം. അനുമതി ആവശ്യമാണ്.</translation>
<translation id="7757787379047923882"><ph name="DEVICE_NAME" /> ഉപകരണത്തിൽ നിന്ന് പങ്കിട്ട ടെക്‌സ്റ്റ്</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_mn.xtb b/chromium/chrome/app/resources/generated_resources_mn.xtb
index 58836e6a0de..a277cff2304 100644
--- a/chromium/chrome/app/resources/generated_resources_mn.xtb
+++ b/chromium/chrome/app/resources/generated_resources_mn.xtb
@@ -1123,7 +1123,7 @@
<translation id="2073148037220830746">{NUM_EXTENSIONS,plural, =1{Өргөтгөлийг суулгахын тулд товшино уу}other{Эдгээр өргөтгөлийг суулгахын тулд товшино уу}}</translation>
<translation id="2073496667646280609">Таны төхөөрөмж эсвэл сонгосон нөөцлөлтийн байршилд хангалттай сул хадгалах сан байхгүй байж магадгүй. Сул зай гаргах эсвэл өөр байршил сонгож үзнэ үү.</translation>
<translation id="2073505299004274893"><ph name="CHARACTER_LIMIT" /> эсвэл үүнээс цөөн тэмдэгт ашиглана уу</translation>
-<translation id="2075474481720804517"><ph name="BATTERY_PERCENTAGE" />% батерей</translation>
+<translation id="2075474481720804517"><ph name="BATTERY_PERCENTAGE" />% батарей</translation>
<translation id="2075959085554270910">Танд tap-to-click болон чирэлтийг товшихыг идэвхжүүлэх/идэвхгүй болгохыг зөвшөөрдөг</translation>
<translation id="2076269580855484719">Энэ нэмэлт өргөтгөлийг нуух</translation>
<translation id="2076672359661571384">Дунд (санал болгосон)</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_mr.xtb b/chromium/chrome/app/resources/generated_resources_mr.xtb
index 765298e60f1..bf68c1ac90a 100644
--- a/chromium/chrome/app/resources/generated_resources_mr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_mr.xtb
@@ -2678,7 +2678,7 @@
<translation id="3554493885489666172">तुमचे डिव्हाइस <ph name="PROFILE_NAME" /> द्वारे व्यवस्थापित केले आहे. अ‍ॅडमिनिस्ट्रेटर या डिव्हाइसवरील कोणत्याही प्रोफाइलचा डेटा ॲक्सेस करू शकतो.</translation>
<translation id="3555812735919707620">एक्स्टेंशन काढून टाका</translation>
<translation id="3556000484321257665">तुमचे शोध इंजीन <ph name="URL" /> मध्‍ये बदलले.</translation>
-<translation id="3556433843310711081">तुमचा व्यवस्थापक तुमच्यासाठी ती अनावरोधित करू शकतो</translation>
+<translation id="3556433843310711081">तुमचा व्यवस्थापक तुमच्यासाठी ती अनब्लॉक करू शकतो</translation>
<translation id="3557101512409028104">Family Link सह वेबसाइटवरील बंधने आणि स्क्रीन वेळ मर्यादा सेट करा</translation>
<translation id="3559262020195162408">डिव्हाइसवर धोरण इंस्टॉल करता आले नाही.</translation>
<translation id="3559533181353831840">सुमारे <ph name="TIME_LEFT" /> शिल्लक</translation>
@@ -2719,7 +2719,7 @@
<translation id="360180734785106144">नवीन वैशिष्ट्ये उपलब्ध होताच क्षणी ते ऑफर करते</translation>
<translation id="3602290021589620013">पूर्वावलोकन</translation>
<translation id="3602870520245633055">प्रिंट आणि स्कॅन करा</translation>
-<translation id="3603622770190368340">नेटवर्क सर्टिफिकेट प्राप्त करा</translation>
+<translation id="3603622770190368340">नेटवर्क सर्टिफिकेट मिळवा</translation>
<translation id="3604713164406837697">वॉलपेपर बदला</translation>
<translation id="3605780360466892872">बटनडाउन</translation>
<translation id="3608576286259426129">वापरकर्ता इमेज पूर्वावलोकन</translation>
@@ -4841,7 +4841,7 @@
<translation id="5728450728039149624">Smart Lock चे स्क्रीन लॉक करण्याचे पर्याय</translation>
<translation id="5729712731028706266">&amp;दृश्य</translation>
<translation id="5731247495086897348">पे&amp;स्ट करा आणि जा</translation>
-<translation id="5732392974455271431">तुमचे पालक तुमच्यासाठी ती अनावरोधित करू शकतात</translation>
+<translation id="5732392974455271431">तुमचे पालक तुमच्यासाठी ती अनब्लॉक करू शकतात</translation>
<translation id="5734362860645681824">संप्रेषणे</translation>
<translation id="5734697361979786483">फाइल शेअर जोडा</translation>
<translation id="5736796278325406685">कृपया एक वैध वापरकर्ता नाव एंटर करा</translation>
@@ -6875,7 +6875,7 @@
<translation id="7753735457098489144">स्टोरेज जागेच्या अभावी इंस्टॉल करता आले नाही. जागा मोकळी करण्यासाठी, डिव्हाइस स्टोरेजमधून फाइल हटवा.</translation>
<translation id="7754347746598978109">JavaScript वापरण्याची अनुमती नाही</translation>
<translation id="7754704193130578113">डाउनलोड करण्यापूर्वी प्रत्येक फाइल कुठे सेव्ह करावी ते विचारा</translation>
-<translation id="7755287808199759310">तुमचे पालक तुमच्यासाठी ती अनावरोधित करू शकतात</translation>
+<translation id="7755287808199759310">तुमचे पालक तुमच्यासाठी ती अनब्लॉक करू शकतात</translation>
<translation id="7757592200364144203">डिव्हाइसचे नाव बदला</translation>
<translation id="7757739382819740102">जवळपास असलेले संपर्क तुमच्यासोबत शेअर करू शकतात. मंजुरी आवश्यक असेल.</translation>
<translation id="7757787379047923882"><ph name="DEVICE_NAME" /> वरून शेअर केलेला मजकूर</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ms.xtb b/chromium/chrome/app/resources/generated_resources_ms.xtb
index 1ec50d65f43..ffe49693b2a 100644
--- a/chromium/chrome/app/resources/generated_resources_ms.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ms.xtb
@@ -2119,7 +2119,7 @@ dan Ctrl+Alt+Kurangkan kecerahan untuk zum keluar.</translation>
<translation id="2966937470348689686">Urus pilihan Android</translation>
<translation id="2967926928600500959">URL yang sepadan dengan peraturan ini akan dipaksa untuk dibuka dalam penyemak imbas tertentu.</translation>
<translation id="2972581237482394796">&amp;Buat Semula</translation>
-<translation id="2973324205039581528">Redam Tapak</translation>
+<translation id="2973324205039581528">Redam Laman</translation>
<translation id="2973537811036309675">Panel Sisi</translation>
<translation id="2976557544729462544">Sesetengah peranti menghendaki perlindungan akses data dilumpuhkan agar dapat berfungsi dengan baik atau memberikan prestasi maksimum.</translation>
<translation id="2977480621796371840">Alih keluar daripada kumpulan</translation>
@@ -2545,7 +2545,7 @@ dan Ctrl+Alt+Kurangkan kecerahan untuk zum keluar.</translation>
<translation id="343115368966109153">Muat turun <ph name="FILE_NAME" />? Sesiapa sahaja yang menggunakan peranti dapat melihat fail itu.</translation>
<translation id="3432227430032737297">Alih Keluar Semua Yang Ditunjukkan</translation>
<translation id="3432762828853624962">Pekerja Kongsi</translation>
-<translation id="3433507769937235446">Kunci apabila meninggalkan</translation>
+<translation id="3433507769937235446">Kunci apabila jauh</translation>
<translation id="3433621910545056227">Op! Sistem gagal mewujudkan kunci atribut masa pemasangan peranti.</translation>
<translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation>
<translation id="3434272557872943250">Jika tetapan Aktiviti Web &amp; Apl tambahan dihidupkan untuk anak anda, data ini mungkin disimpan pada Akaun Googlenya. Ketahui lebih lanjut tentang tetapan ini dan cara melaraskan tetapan ini melalui families.google.com.</translation>
@@ -3881,7 +3881,7 @@ dan Ctrl+Alt+Kurangkan kecerahan untuk zum keluar.</translation>
<translation id="4742334355511750246">Tidak dibenarkan untuk memaparkan imej</translation>
<translation id="4742970037960872810">Alih keluar serlahan</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Ketahui cara mengemas kini aplikasi<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{Nyahredam tapak}other{Nyahredam tapak}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{Nyahredam laman}other{Nyahredam laman}}</translation>
<translation id="474609389162964566">Akses Assistant anda dengan “Ok Google”</translation>
<translation id="4746351372139058112">Mesej</translation>
<translation id="4748783296226936791">Laman biasanya menyambung kepada peranti HID untuk ciri yang menggunakan papan kekunci yang tidak biasa digunakan, pengawal permainan dan peranti lain</translation>
@@ -4105,7 +4105,7 @@ dan Ctrl+Alt+Kurangkan kecerahan untuk zum keluar.</translation>
<translation id="4972129977812092092">Edit pencetak</translation>
<translation id="4972164225939028131">Kata laluan salah</translation>
<translation id="4972737347717125191">Tapak boleh meminta untuk menggunakan peranti dan data realiti maya</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Redam tapak}other{Redam tapak}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Redam laman}other{Redam laman}}</translation>
<translation id="497403230787583386">Semakan keselamatan sudah selesai. Dokumen anda akan dicetak.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Sahkan Akses</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_my.xtb b/chromium/chrome/app/resources/generated_resources_my.xtb
index 9cc7e20c5ab..43ada3cc312 100644
--- a/chromium/chrome/app/resources/generated_resources_my.xtb
+++ b/chromium/chrome/app/resources/generated_resources_my.xtb
@@ -13,7 +13,7 @@
<translation id="1009476156254802388"><ph name="WEB_DRIVE" /> တည်နေရာ</translation>
<translation id="1010498023906173788">ဤတဘ်ကို အမှတ်စဉ်ပို့တ်တစ်ခုနှင့် ချိတ်ဆက်ထားသည်။</translation>
<translation id="1010833424573920260">{NUM_PAGES,plural, =1{စာမျက်နှာ တုံ့ပြန်မှုနှေးကွေးသည်}other{စာမျက်နှာများ တုံ့ပြန်မှုနှေးကွေးသည်}}</translation>
-<translation id="1011355516189274711">စာသားမှ စကားပြော အသံအတိုးအကျယ်</translation>
+<translation id="1011355516189274711">စာ-မှ-စကား အသံအတိုးအကျယ်</translation>
<translation id="1012794136286421601">သင်၏ စာတမ်းများ၊ စာရွက်များ၊ ဆလိုက်များ၊ နှင့် ဆွဲပုံ ဖိုင်များကို စင့်က် လုပ်ပေးနေသည်။ ၎င်းတို့ကို အွန်လိုင်း သို့မဟုတ် အော့ဖ်လိုင်း ရယူသုံးရန် Google ဒရိုက်ဗ် အက်ပ်ကို ဖွင့်ပါ။</translation>
<translation id="1012876632442809908">USB-C ကိရိယာ (အရှေ့ပိုင်း ပို့တ်)</translation>
<translation id="1015041505466489552">TrackPoint</translation>
@@ -437,7 +437,7 @@
<translation id="1426410128494586442">Yes</translation>
<translation id="142655739075382478"><ph name="APP_NAME" /> ကို ပိတ်ထားသည်</translation>
<translation id="1426870617281699524">ထပ်လုပ်ကြည့်ရန် ကို နှိပ်ပြီး သင့်ကွန်ပျူတာပေါ်ရှိ မေးမြန်းမှုအကွက်ထဲတွင် လက်ခံရန် ကို နှိပ်ပါ။</translation>
-<translation id="1427179946227469514">စာသားမှ စကားပြော အသံအနိမ့်အမြင့်</translation>
+<translation id="1427179946227469514">စာ-မှ-စကား အသံအနိမ့်အမြင့်</translation>
<translation id="1427269577154060167">နိုင်ငံ</translation>
<translation id="142758023928848008">စေးကပ် ကီးများကို ဖွင့်ထားရန် (ကီးဘုတ် ဖြတ်လမ်းများကို ၎င်းတို့ကို ဆက်တိုက် ရိုက်လျက် အသုံးပြုရန် အတွက်)</translation>
<translation id="142765311413773645"><ph name="APP_NAME" /> လိုင်စင် သက်တမ်းကုန်သွားပါပြီ</translation>
@@ -531,7 +531,7 @@
<translation id="1521774566618522728">ယနေ့ အသုံးပြုထားသည်</translation>
<translation id="152234381334907219">ဘယ်တော့မှ သိမ်းဆည်းခြင်းမပြုပါ</translation>
<translation id="1523279371236772909">ယခင်လတွင် ကြည့်ထားသည်</translation>
-<translation id="1523978563989812243">စာသားမှ စကားပြော အင်ဂျင်များ</translation>
+<translation id="1523978563989812243">စာ-မှ-စကား အင်ဂျင်များ</translation>
<translation id="1524430321211440688">ကီးဘုတ်</translation>
<translation id="1524563461097350801">မလိုပါ</translation>
<translation id="1525740877599838384">တည်နေရာ သိရှိနိုင်ရန် Wi-Fi ကိုသာ အသုံးပြုပါ</translation>
@@ -2117,7 +2117,7 @@
<translation id="2966937470348689686">Android စိတ်ကြိုက်ရွေးချယ်မှုများကို စီမံခန့်ခွဲရန်</translation>
<translation id="2967926928600500959">ဤစည်းမျဉ်းများနှင့် ကိုက်ညီသော URL များကို သက်ဆိုင်ရာဘရောင်ဇာတွင် မဖြစ်မနေဖွင့်မည်။</translation>
<translation id="2972581237482394796">&amp;ပြန်လုပ်ရန်</translation>
-<translation id="2973324205039581528">ဝဘ်ဆိုက် ဖျောက်ထားခြင်း</translation>
+<translation id="2973324205039581528">ဝဘ်ဆိုက် အသံပိတ်ရန်</translation>
<translation id="2973537811036309675">ဘေးအကန့်</translation>
<translation id="2976557544729462544">စက်အချို့ မှန်ကန်စွာအလုပ်လုပ်ရန် (သို့) စွမ်းဆောင်ရည်အပြည့် အလုပ်လုပ်ရန်အတွက် ဒေတာသုံးခွင့်အကာအကွယ်ကို ပိတ်ရန် လိုအပ်သည်။</translation>
<translation id="2977480621796371840">အဖွဲ့မှ ဖယ်ရှားပါ</translation>
@@ -2800,7 +2800,7 @@
<translation id="3678156199662914018">တိုးချဲ့မှု: <ph name="EXTENSION_NAME" /></translation>
<translation id="3678188444105291936">ဤဝင်းဒိုးတွင်ကြည့်သည့် စာမျက်နှာများကို ကြည့်ရှုခြင်းမှတ်တမ်းတွင် ပြမည်မဟုတ်ပါ။ ထို့ပြင် အကောင့်မှထွက်လိုက်ပြီးနောက် ကွန်ပျူတာတွင် ၎င်းတို့က ကွတ်ကီးများကဲ့သို့ အခြားသဲလွန်စများ ချန်ခဲ့မည်မဟုတ်ပါ။ သင်ဒေါင်းလုဒ်လုပ်သော ဖိုင်များနှင့် လိပ်စာများကို သိမ်းထားမည်မဟုတ်ပါ။</translation>
<translation id="368019053277764111">ဘေးအကန့်တွင် ရှာဖွေမှုဖွင့်နိုင်သည်</translation>
-<translation id="3680683624079082902">စာသားမှ စကားပြော အသံ</translation>
+<translation id="3680683624079082902">စာ-မှ-စကား အသံ</translation>
<translation id="3681311097828166361">အကြံပြုပေးသည့်အတွက် ကျေးဇူးတင်ပါသည်။ သင်ယခုအော့ဖ်လိုင်းဖြစ်နေလျှင် သင့်အစီရင်ခံစာကို နောက်မှ ပို့ပါမည်။</translation>
<translation id="3682824389861648626">လှုပ်ရှားမှု ခံနိုင်စွမ်း</translation>
<translation id="3683524264665795342"><ph name="APP_NAME" /> မျက်နှာပြင် မျှဝေရန် တောင်းဆိုချက်</translation>
@@ -3878,7 +3878,7 @@
<translation id="4742334355511750246">ပုံများပြရန် ခွင့်ပြုမထားပါ</translation>
<translation id="4742970037960872810">မြင်သာအောင်လုပ်ထားသည်ကို ဖယ်ရှားရန်</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />အပလီကေးရှင်းများ အပ်ဒိတ်လုပ်နည်းကို လေ့လာရန်<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{ဝဘ်ဆိုက် ပြန်ဖွင့်ရန်}other{ဝဘ်ဆိုက်များ ပြန်ဖွင့်ရန်}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{ဝဘ်ဆိုက် အသံပြန်ဖွင့်ရန်}other{ဝဘ်ဆိုက်များ အသံပြန်ဖွင့်ရန်}}</translation>
<translation id="474609389162964566">“Ok Google” ဖြင့် Assistant သုံးခြင်း</translation>
<translation id="4746351372139058112">စာတိုများ</translation>
<translation id="4748783296226936791">သုံးလေ့မရှိသော ကီးဘုတ်များ၊ ဂိမ်းခလုတ်များနှင့် အခြားကိရိယာများကို သုံးသော ဝန်ဆောင်မှုများအတွက် HID ကိရိယာများနှင့် ဝဘ်ဆိုက်များက ချိတ်ဆက်လေ့ရှိသည်</translation>
@@ -4051,7 +4051,7 @@
<translation id="4918021164741308375"><ph name="ORIGIN" /> သည် ပရိုဂရမ်အဆက်"<ph name="EXTENSION_NAME" />" နှင့် ဆက်သွယ်လိုသည်</translation>
<translation id="4918086044614829423">လက်ခံရန်</translation>
<translation id="4918134162946436591">ထိန်းချုပ်မှုထပ်ပိုးလွှာ ပြရန်</translation>
-<translation id="4921348630401250116">စာသားမှ စကားပြော</translation>
+<translation id="4921348630401250116">စာ-မှ-စကား</translation>
<translation id="492299503953721473">Android အက်ပ်များကို ဖယ်ရှားပါ</translation>
<translation id="492363500327720082"><ph name="APP_NAME" /> ကို ဖယ်ရှားနေသည်...</translation>
<translation id="4924002401726507608">အကြံပြုချက် ပို့ရန်</translation>
@@ -4102,7 +4102,7 @@
<translation id="4972129977812092092">ပရင်တာကို တည်းဖြတ်ရန်</translation>
<translation id="4972164225939028131">စကားဝှက် မှားနေသည်</translation>
<translation id="4972737347717125191">ဝဘ်ဆိုက်များက ပကတိအသွင်စက်နှင့် ဒေတာများ အသုံးပြုလိုပါက ခွင့်တောင်းနိုင်သည်</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{ဝဘ်ဆိုက် ဖျောက်ထားရန်}other{ဝဘ်ဆိုက်များ ဖျောက်ထားရန်}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{ဝဘ်ဆိုက် အသံပိတ်ရန်}other{ဝဘ်ဆိုက်များ အသံပိတ်ရန်}}</translation>
<translation id="497403230787583386">လုံခြုံရေးစစ်ဆေးမှုများ ပြီးပြီ။ သင်၏မှတ်တမ်းဖိုင်ကို ပုံနှိပ်ထုတ်ပါမည်။</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">အသုံးပြုရန် အတည်ပြုသည်</translation>
@@ -4575,7 +4575,7 @@
<translation id="5468173180030470402">ဖိုင်မျှဝေမှုများကို ရှာနေသည်</translation>
<translation id="5469852975082458401">စာရိုက်သည့်ပုံကာဆာဖြင့် စာမျက်နှာများကို ကြည့်ရှုနိုင်သည်။ ပိတ်ရန် F7 ကို နှိပ်ပါ။</translation>
<translation id="5470735824776589490">Powerwash ဖြင့် သင့်စက်ကို ပြင်ဆင်သတ်မှတ်ခြင်းမပြုမီ ပြန်စရန်လိုအပ်သည်။ <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation>
-<translation id="5471768120198416576">မင်္ဂလာပါ။ ကျွန်ုပ်သည် သင်၏ စာသားမှ စကားပြောသို့ ပြောင်းပေးသော အသံဖြစ်ပါသည်။</translation>
+<translation id="5471768120198416576">မင်္ဂလာပါ။ ကျွန်ုပ်သည် သင်၏ စာ-မှ-စကား ပြောင်းပေးသော အသံဖြစ်ပါသည်။</translation>
<translation id="5472627187093107397">ဤဝဘ်ဆိုက်အတွက် စကားဝှက်များကို သိမ်းရန်</translation>
<translation id="5473075389972733037">IBM</translation>
<translation id="5473099001878321374">ရှေ့ဆက်ခြင်းအားဖြင့် ဤစက်ပစ္စည်းသည် Google၊ သင့်ကလေး၏ ဖုန်းဝန်ဆောင်မှုပေးသူနှင့် ဤစက်ပစ္စည်း ထုတ်လုပ်သူတို့ထံမှ အပ်ဒိတ်များနှင့် အက်ပ်များကို အလိုအလျောက် ဒေါင်းလုဒ်လုပ်၍ ထည့်သွင်းနိုင်ကြောင်းကို သင်က သဘောတူရာ ရောက်ပြီး ယင်းသို့ထည့်သွင်းရာတွင် ဆယ်လူလာ ဒေတာအသုံးပြုနိုင်ပါသည်။ အချို့သော အက်ပ်များတွင် အက်ပ်အတွင်းဝယ်ယူခြင်းများကို ကမ်းလှမ်းနိုင်သည်။</translation>
@@ -5537,7 +5537,7 @@
<translation id="6419524191360800346">Debian 11 (Bullseye) သို့ အဆင့်မြှင့်တင်နိုင်ပါပြီ</translation>
<translation id="6419546358665792306">ဖြည်ထားသည့် နောက်ဆက်တွဲကို ဖွင့်ပါ</translation>
<translation id="642469772702851743">ဤစက်ပစ္စည်း (SN- <ph name="SERIAL_NUMBER" />) ကို ပိုင်ရှင်က လော့ခ်ချထားသည်။</translation>
-<translation id="6425556984042222041">စာသားမှ စကားပြော မြန်နှုန်း</translation>
+<translation id="6425556984042222041">စာ-မှ-စကား မြန်နှုန်း</translation>
<translation id="6426200009596957090">ChromeVox ဆက်တင်ကို ဖွင့်ရန်</translation>
<translation id="642729974267661262">အသံဖွင့်ရန် ခွင့်ပြုမထားပါ</translation>
<translation id="6429384232893414837">အပ်ဒိတ်အမှားအယွင်း</translation>
@@ -5749,7 +5749,7 @@
<translation id="6635362468090274700">သင့်ကိုယ်သင် ဖျောက်မထားမှသာ အခြားသူများက သင်နှင့် မျှဝေနိုင်ပါမည်။<ph name="BR" /><ph name="BR" />သင့်ကို ယာယီမြင်နိုင်ရန် အခြေအနေပြနေရာတွင် 'အနီးတစ်ဝိုက် မြင်နိုင်မှု' ကိုဖွင့်ပါ။</translation>
<translation id="6635674640674343739">ကွန်ရက်ချိတ်ဆက်မှု စတင်၍မရပါ။ သင့်ကွန်ရက်ချိတ်ဆက်မှုကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။</translation>
<translation id="6635944431854494329">ပိုင်ရှင်သည် ဤဝန်ဆောင်မှုကို 'ဆက်တင်များ &gt; အဆင့်မြင့် &gt; အမှားရှာဖွေခြင်းနှင့် အသုံးပြုမှုဒေတာများကို Google သို့ အလိုအလျောက်ပို့ရန်' တွင် ထိန်းချုပ်နိုင်သည်။</translation>
-<translation id="6635956300022133031">စာသားမှ စကားပြောသို့ ပြောင်းခြင်း အသံများကို ရွေးချယ်ပြီး စိတ်ကြိုက်ပြင်ဆင်ရန်</translation>
+<translation id="6635956300022133031">စာ-မှ-စကား အသံများကို ရွေးချယ်ပြီး စိတ်ကြိုက်ပြင်ဆင်ရန်</translation>
<translation id="6636623428211296678">အောက်ရှိ နောက်ထပ်ဆက်တင်များကို စူးစမ်းလေ့လာပါ (သို့) ယခုအပြီးသတ်ပါ</translation>
<translation id="6639554308659482635">SQLite မဲမိုရီ</translation>
<translation id="6640268266988685324">တဘ်ဖွင့်ရန်</translation>
@@ -6383,7 +6383,7 @@
<translation id="727441411541283857">ပြည့်လာမည့် အထိ<ph name="PERCENTAGE" /> % - <ph name="TIME" /></translation>
<translation id="727952162645687754">ဒေါင်းလုဒ် အမှား</translation>
<translation id="7280041992884344566">အန္တရာယ်ရှိသည့် ဆော့ဖ်ဝဲကို Chrome က ရှာဖွေနေရာတွင် အမှားအယွင်းရှိနေသည်</translation>
-<translation id="7280649757394340890">'စာသားမှ စကားပြောသို့ ပြောင်းခြင်း' အသံဆက်တင်များ</translation>
+<translation id="7280649757394340890">စာ-မှ-စကား အသံဆက်တင်များ</translation>
<translation id="7280877790564589615">ခွင့်ပြုချက် တောင်းဆို၏</translation>
<translation id="7282547042039404307">ချောမွေ့</translation>
<translation id="7282992757463864530">အချက်အလက်ဘားတန်း</translation>
@@ -7522,13 +7522,13 @@
<translation id="8382913212082956454">အီးမေးလ် လိပ်စာ &amp;ကူးယူရန်</translation>
<translation id="8383266303049437646"><ph name="BEGIN_PARAGRAPH1" />ဤပြဿနာရှာဖွေဖြေရှင်းခြင်း အဆင့်များကို စမ်းကြည့်ပါ-
<ph name="BEGIN_LIST" />
- <ph name="LIST_ITEM" />HDD၊ SSD (သို့) eMMC ကဲ့သို့ စက်အတွင်းသိမ်းဆည်းရန်နေရာများ ကောင်းမွန်ကြောင်း သေချာပါစေ
- <ph name="LIST_ITEM" />သင့်စက်အတွင်း သိမ်းဆည်းရန်နေရာသည် 16GB ထက် ပို၊ မပို စစ်ဆေးပါ
- <ph name="LIST_ITEM" />ကိုင်တွယ်ကြည့်နိုင်ပါက စက်အတွင်းသိမ်းဆည်းရန်နေရာသို့ ချိတ်ဆက်မှုကို စစ်ဆေးပါ
- <ph name="LIST_ITEM" />အသိအမှတ်ပြုထားသောမော်ဒယ်ကို အသုံးပြုနေကြောင်း သေချာစေပြီး ထည့်သွင်းပုံမှတ်စုများကို စစ်ဆေးပါ
+ <ph name="LIST_ITEM" />HDD၊ SSD (သို့) eMMC ကဲ့သို့ စက်တွင်းသိုလှောင်ခန်း ကောင်းမွန်ကြောင်း သေချာပါစေ
+ <ph name="LIST_ITEM" />သင်၏ စက်တွင်းသိုလှောင်ခန်းသည် ၁၆ GB ထက်ပိုများခြင်း ရှိ၊ မရှိ စစ်ပါ
+ <ph name="LIST_ITEM" />ကိုင်တွယ်ကြည့်နိုင်ပါက စက်တွင်းသိုလှောင်ခန်းသို့ ချိတ်ဆက်မှုကို စစ်ပါ
+ <ph name="LIST_ITEM" />အသိအမှတ်ပြုထားသောမော်ဒယ်ကို အသုံးပြုနေကြောင်း သေချာစေပြီး ထည့်သွင်းပုံမှတ်စုများကို ကြည့်ပါ
<ph name="END_LIST" />
<ph name="END_PARAGRAPH1" />
- <ph name="BEGIN_PARAGRAPH2" />နောက်ထပ်အကူအညီလိုလျှင် ဤသို့ ဝင်ကြည့်ပါ- g.co/flex/InstallErrors။<ph name="END_PARAGRAPH2" /></translation>
+ <ph name="BEGIN_PARAGRAPH2" />နောက်ထပ်အကူအညီလိုလျှင် g.co/flex/InstallErrors သို့သွားပါ။<ph name="END_PARAGRAPH2" /></translation>
<translation id="8386091599636877289">မူဝါဒကို မတွေ့ပါ။</translation>
<translation id="8387361103813440603">သင့်တည်နေရာကို ကြည့်ရန် ခွင့်ပြုမထားပါ</translation>
<translation id="8388770971141403598">ဒုတိယ ပရိုဖိုင်များကို ပံ့ပိုးမထားပါ</translation>
@@ -8203,7 +8203,7 @@
<ph name="BREAK" />
Google စုဆောင်းသည့် ဒေတာများအကြောင်းနှင့် မည်သည့်အတွက် စုဆောင်းကြောင်း <ph name="BEGIN_LINK2" />policies.google.com<ph name="END_LINK2" /> တွင် လေ့လာပါ။</translation>
<translation id="9066777626153702300">မသုံးသော ဝဘ်ဆိုက်များ</translation>
-<translation id="9066782832737749352">စာသားမှ-စကားပြောအဖြစ်သို့</translation>
+<translation id="9066782832737749352">စာ-မှ-စကား</translation>
<translation id="9068298336633421551">ဤစက်၏ တည်နေရာကို အသုံးပြုရန် တည်နေရာခွင့်ပြုချက်ပါသော Android အက်ပ်များနှင့် ဝန်ဆောင်မှုများကို ခွင့်ပြုပါ။ Google သည် တည်နေရာဒေတာများကို အခါအားလျော်စွာ စုဆောင်းပြီး တည်နေရာတိကျ မှန်ကန်မှုနှင့် တည်နေရာ အခြေပြု ဝန်ဆောင်မှုများ ပိုမိုကောင်းမွန်လာစေရန် ၎င်းဒေတာကို အမည်မဖော်ဘဲ အသုံးပြုနိုင်ပါသည်။</translation>
<translation id="9068878141610261315">ပံ့ပိုးမထားသော ဖိုင်အမျိုးအစား</translation>
<translation id="9070342919388027491">တဘ်ကို ဘယ်သို့ရွှေ့လိုက်သည်</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ne.xtb b/chromium/chrome/app/resources/generated_resources_ne.xtb
index 3b97345b722..e8527d04294 100644
--- a/chromium/chrome/app/resources/generated_resources_ne.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ne.xtb
@@ -353,7 +353,7 @@
<translation id="1353980523955420967">PPD फेला पार्न सकिएन। आफ्नो Chromebook अनलाइन भएको सुनिश्चित गरी फेरि प्रयास गर्नुहोस्।</translation>
<translation id="1354045473509304750"><ph name="HOST" /> लाई तपाईंको डिभाइसको क्यामेरा प्रयोग गर्ने तथा क्यामेरा यताउता घुमाउने अनुमति दिइराख्नुहोस्</translation>
<translation id="1355088139103479645">सबै डेटा मेटाउने हो?</translation>
-<translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> माथि रोक लगाइएको छ</translation>
+<translation id="1355466263109342573"><ph name="PLUGIN_NAME" /> लाई ब्लक गरिएको छ</translation>
<translation id="1358741672408003399">हिज्जे तथा व्याकरण</translation>
<translation id="1359923111303110318">तपाईंको यन्त्र Smart Lock प्रयोग गरी अनलक गर्न सकिन्छ। अनलक गर्न Enter थिच्नुहोस्।</translation>
<translation id="1361164813881551742">म्यानुअल तरिकाले थप्नुहोस्</translation>
@@ -431,7 +431,7 @@
<ph name="LINE_BREAKS" />
बुकमार्क, इतिहास तथा सुरक्षित गरिएका पासवर्डहरूमा केही पनि असर पर्ने छैन।</translation>
<translation id="1426410128494586442">हो</translation>
-<translation id="142655739075382478"><ph name="APP_NAME" /> माथि रोक लगाइएको छ</translation>
+<translation id="142655739075382478"><ph name="APP_NAME" /> लाई ब्लक गरिएको छ</translation>
<translation id="1426870617281699524">फेरि प्रयास गर्नुहोस् नामक बटनमा क्लिक गर्नुहोस् र आफ्नो कम्प्युटरमा प्रम्प्टलाई स्वीकार गर्नुहोस्</translation>
<translation id="1427179946227469514">टेक्स्ट-टू-स्पिचको पिच</translation>
<translation id="1427269577154060167">देश</translation>
@@ -1177,7 +1177,7 @@
<translation id="2119349053129246860"><ph name="APP" /> मा खोल्नुहोस्</translation>
<translation id="2119461801241504254">सुरक्षित ब्राउजिङ सक्रिय छ र यसले हानिकारक साइट र डाउनलोडहरूबाट तपाईंलाई सुरक्षित राख्दै छ</translation>
<translation id="2120297377148151361">क्रियाकलाप तथा अन्तर्क्रियाहरू</translation>
-<translation id="2120639962942052471"><ph name="PERMISSION" /> माथि रोक लगाइएको छ</translation>
+<translation id="2120639962942052471"><ph name="PERMISSION" /> लाई ब्लक गरिएको छ</translation>
<translation id="2121055421682309734">{COUNT,plural, =0{कुकीहरूलाई रोक लगाइएको छ}=1{कुकीहरूलाई रोक लगाइएको छ, १ वटा बाहेक}other{कुकीहरूलाई रोक लगाइएको छ, {COUNT} वटा बाहेक}}</translation>
<translation id="2121825465123208577">पुनःआकार मिलाउनुहोस्</translation>
<translation id="2123766928840368256">कुनै अर्को फाइल छनौट गर्नुहोस्</translation>
@@ -2701,7 +2701,7 @@
<translation id="3599221874935822507">उठेको</translation>
<translation id="3600051066689725006">वेबको अनुरोधसम्बन्धी जानकारी</translation>
<translation id="360180734785106144">नयाँ सुविधाहरू उपलब्ध भएपछि प्रस्ताव गर्नुहोस्</translation>
-<translation id="3602290021589620013">पूर्वावलोकन</translation>
+<translation id="3602290021589620013">प्रिभ्यु गर्नुहोस्</translation>
<translation id="3602870520245633055">प्रिन्ट गर्नुहोस् र स्क्यान गर्नुहोस्</translation>
<translation id="3603622770190368340">नेटवर्क प्रमाणपत्र हासिल गर्नुहोस्</translation>
<translation id="3604713164406837697">वालपेपर परिवर्तन गर्नुहोस्</translation>
@@ -2809,7 +2809,7 @@
<translation id="3700993174159313525">साइटहरूलाई मेरो क्यामेराको स्थिति ट्र्याक गर्ने अनुमति नदिइयोस्</translation>
<translation id="3702500414347826004">तपाईंका सुरुवात पृष्ठहरूलाई परिवर्तन गरी <ph name="URL" /> समावेश गर्ने बनाइएको छ।</translation>
<translation id="3703699162703116302">टिकट पुनः ताजा गरियो</translation>
-<translation id="370415077757856453">JavaScript माथि रोक लगाइएको छ</translation>
+<translation id="370415077757856453">JavaScript लाई ब्लक गरिएको छ</translation>
<translation id="3704331259350077894">अपरेशनको समाप्ति</translation>
<translation id="3705722231355495246">-</translation>
<translation id="3706463572498736864">प्रति पाना पृष्ठहरू</translation>
@@ -4261,7 +4261,7 @@
<translation id="5160634252433617617">भौतिक किबोर्ड</translation>
<translation id="5160857336552977725">तपाईँको <ph name="DEVICE_TYPE" /> मा साइन इन गर्नुहोस्</translation>
<translation id="5161251470972801814"><ph name="VENDOR_NAME" /> का USB डिभाइसहरू</translation>
-<translation id="5162905305237671850"><ph name="DEVICE_TYPE" /> माथि रोक लगाइएको छ</translation>
+<translation id="5162905305237671850"><ph name="DEVICE_TYPE" /> लाई ब्लक गरिएको छ</translation>
<translation id="5163910114647549394">यो ट्याब ट्याबस्ट्रिपको अन्त्यमा सारियो</translation>
<translation id="5166596762332123936"><ph name="PLUGIN_NAME" /> को म्याद सकिएको हुनाले यसमाथि रोक लगाइयो</translation>
<translation id="516747639689914043">हाइपरटेक्स्ट ट्रान्स्पोर्ट प्रोटोकोल (HTTP)</translation>
@@ -4753,7 +4753,7 @@
<translation id="5642508497713047">CRL हस्ताक्षरकर्ता</translation>
<translation id="5643321261065707929">सीमा तोकिएको नेटवर्क</translation>
<translation id="5643620609347735571">खाली गरी जारी राख्नुहोस्</translation>
-<translation id="5646376287012673985">स्थान</translation>
+<translation id="5646376287012673985">लोकेसन</translation>
<translation id="5646558797914161501">व्यापारी</translation>
<translation id="5648166631817621825">पछिल्ला ७ दिन</translation>
<translation id="5651308944918885595">नजिकैका डिभाइससँग सेयर गर्ने सुविधामा भएको 'भेटिने क्षमता' नामक विकल्प</translation>
@@ -6698,7 +6698,7 @@
<translation id="7614260613810441905">कुनै साइटले तपाईंको डिभाइसका फाइल वा फोल्डरहरू सम्पादन गर्न खोज्दा सोध्नुहोस् (सिफारिस गरिएको)</translation>
<translation id="761530003705945209">Google ड्राइभमा ब्याकअप गर्नुहोस् जुनसुकै बेला सजिलैसँग आफ्नो डेटा पुनर्स्थापना गर्नुहोस् वा यन्त्र बदल्नुहोस्। तपाईंको ब्याकअपमा एपको डेटा समावेश हुन्छ। तपाईंका ब्याकअपहरू Google मा अपलोड गरी तपाईंको Google खाताको पासवर्ड प्रयोग गरेर इन्क्रिप्ट गरिन्छन्।</translation>
<translation id="7615365294369022248">खाता थप्ने क्रममा कुनै त्रुटि भयो</translation>
-<translation id="7616214729753637086">यन्त्र दर्ता गर्दै...</translation>
+<translation id="7616214729753637086">डिभाइस दर्ता गरिँदै छ...</translation>
<translation id="7617263010641145920">Play Store अन गर्नुहोस्</translation>
<translation id="7617366389578322136">"<ph name="DEVICE_NAME" />" मा जडान गरिँदै</translation>
<translation id="7617648809369507487">आवाज नआउने म्यासेजिङ प्रयोग गर्नुहोस्</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_nl.xtb b/chromium/chrome/app/resources/generated_resources_nl.xtb
index 51d184860f6..30851726322 100644
--- a/chromium/chrome/app/resources/generated_resources_nl.xtb
+++ b/chromium/chrome/app/resources/generated_resources_nl.xtb
@@ -2631,7 +2631,7 @@ Foutcode: <ph name="ERROR_CODE" />.</translation>
<translation id="3518985090088779359">Accepteren en doorgaan</translation>
<translation id="3519564332031442870">Backend-service voor afdrukken</translation>
<translation id="3519938335881974273">Pagina opslaan als...</translation>
-<translation id="3520824492621090923">Apparaatinschrijving voor kiosks en digitale borden bevestigen?</translation>
+<translation id="3520824492621090923">Apparaatinschrijving voor kiosken en digitale borden bevestigen?</translation>
<translation id="3521606918211282604">Schijfgrootte wijzigen</translation>
<translation id="3522088408596898827">Er is zeer weinig schijfruimte beschikbaar. Maak schijfruimte vrij en probeer het opnieuw.</translation>
<translation id="3524518036046613664">Apparaten vinden in je lokale netwerk, zoals printers</translation>
@@ -3369,7 +3369,7 @@ Je kunt instellingen beheren via het kaartmenu of meer opties bekijken in het ge
<translation id="424963718355121712">Apps moeten worden weergegeven vanaf de host waarop ze betrekking hebben</translation>
<translation id="4250229828105606438">Screenshot</translation>
<translation id="4250680216510889253">Nee</translation>
-<translation id="4251377547188244181">Apparaatinschrijving voor kiosks en digitale borden</translation>
+<translation id="4251377547188244181">Apparaatinschrijving voor kiosken en digitale borden</translation>
<translation id="4252035718262427477">Webpagina, één bestand (webbundel)</translation>
<translation id="4252899949534773101">Bluetooth staat uit</translation>
<translation id="4252996741873942488"><ph name="WINDOW_TITLE" />: content van tabblad gedeeld</translation>
@@ -5993,7 +5993,7 @@ Als je later besluit dat je Voice Match niet wilt gebruiken, verwijder je dit ge
<translation id="6892812721183419409">Link openen als <ph name="USER" /></translation>
<translation id="6895032998810961280">Gegevens aan Google melden over schadelijke software, systeeminstellingen en processen die op je computer zijn aangetroffen tijdens deze opschoonbewerking</translation>
<translation id="6895902329218596456"><ph name="USER_EMAIL" /> wordt beheerd door <ph name="MANAGER" /> en je beheerder heeft inloggen als secundair account geblokkeerd</translation>
-<translation id="6896758677409633944">Kopieer</translation>
+<translation id="6896758677409633944">Kopiëren</translation>
<translation id="6897363604023044284">Sites kiezen om te wissen</translation>
<translation id="6898440773573063262">Kiosk-apps kunnen nu worden geconfigureerd voor automatisch starten op dit apparaat.</translation>
<translation id="6900284862687837908">Achtergrond-app: <ph name="BACKGROUND_APP_URL" /></translation>
@@ -6352,7 +6352,7 @@ Als je later besluit dat je Voice Match niet wilt gebruiken, verwijder je dit ge
<translation id="7257666756905341374">Gegevens lezen die je kopieert en plakt</translation>
<translation id="7258192266780953209">Transformaties</translation>
<translation id="7258225044283673131">De app reageert niet. Selecteer 'Nu sluiten' om de app te sluiten.</translation>
-<translation id="7260186537988033909">Apparaatinschrijving voor kiosks en digitale borden afgerond</translation>
+<translation id="7260186537988033909">Apparaatinschrijving voor kiosken en digitale borden afgerond</translation>
<translation id="7262004276116528033">Deze inlogservice wordt gehost door <ph name="SAML_DOMAIN" />.</translation>
<translation id="7264695323040866038">De <ph name="APP" />-app altijd gebruiken om ondersteunde weblinks te openen?</translation>
<translation id="7267044199012331848">Kan de virtuele machine niet installeren. Probeer het opnieuw of neem contact op met je beheerder. Foutcode: <ph name="ERROR_CODE" />.</translation>
@@ -6361,7 +6361,7 @@ Als je later besluit dat je Voice Match niet wilt gebruiken, verwijder je dit ge
<translation id="7269736181983384521">Datagebruik van Dichtbij delen</translation>
<translation id="7272674038937250585">Geen beschrijving opgegeven</translation>
<translation id="7273110280511444812">laatst aangesloten op <ph name="DATE" /></translation>
-<translation id="7273970016743909808">Je gebruikt een upgrade voor kiosks en digitale borden waardoor het apparaat alleen de kioskmodus of modus voor digitale borden kan gebruiken. Als je wilt dat gebruikers kunnen inloggen op het apparaat, ga je terug en schrijf je het in via Chrome Enterprise Upgrade.</translation>
+<translation id="7273970016743909808">Je gebruikt een upgrade voor kiosken en digitale borden waardoor het apparaat alleen de kioskmodus of modus voor digitale borden kan gebruiken. Als je wilt dat gebruikers kunnen inloggen op het apparaat, ga je terug en schrijf je het in via Chrome Enterprise Upgrade.</translation>
<translation id="727441411541283857"><ph name="PERCENTAGE" />% - <ph name="TIME" /> tot volledig opgeladen</translation>
<translation id="727952162645687754">Downloadfout</translation>
<translation id="7280041992884344566">Er is een fout opgetreden terwijl Chrome naar schadelijke software zocht</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_no.xtb b/chromium/chrome/app/resources/generated_resources_no.xtb
index 5315653a991..17ded4a44a1 100644
--- a/chromium/chrome/app/resources/generated_resources_no.xtb
+++ b/chromium/chrome/app/resources/generated_resources_no.xtb
@@ -1505,7 +1505,7 @@ Du kan administrere innstillingene for denne kontoen ved å installere Family Li
<translation id="2387602571959163792"><ph name="DESK_NAME" /> (gjeldende)</translation>
<translation id="2389775852302560582">IP</translation>
<translation id="2390347491606624519">Kan ikke koble til proxy-tjeneren – logg på på nytt</translation>
-<translation id="2390782873446084770">Wi-Fi-synkronisering</translation>
+<translation id="2390782873446084770">Wifi-synkronisering</translation>
<translation id="2391419135980381625">Standardskrift</translation>
<translation id="2392163307141705938">Du har nådd tidsgrensen som forelderen din har angitt for <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
<translation id="2392369802118427583">Aktiver</translation>
@@ -2113,7 +2113,7 @@ og Ctrl + Alt + lysstyrke ned for å zoome ut.</translation>
<translation id="2966937470348689686">Administrer Android-innstillinger</translation>
<translation id="2967926928600500959">Nettadresser som gir treff på disse reglene, blir tvunget til å åpnes i en spesifikk nettleser.</translation>
<translation id="2972581237482394796">Gjø&amp;r om</translation>
-<translation id="2973324205039581528">Kutt lyden for nettsted</translation>
+<translation id="2973324205039581528">Demp lyden for nettstedet</translation>
<translation id="2973537811036309675">Sidepanel</translation>
<translation id="2976557544729462544">For at enkelte enheter skal fungere ordentlig eller med full ytelse, må du slå av datatilgangsbeskyttelse.</translation>
<translation id="2977480621796371840">Fjern fra gruppen</translation>
@@ -3023,7 +3023,7 @@ og Ctrl + Alt + lysstyrke ned for å zoome ut.</translation>
<translation id="3888053818972567950"><ph name="WEB_DRIVE" />-tilkobling</translation>
<translation id="3888550877729210209">Tar notater med <ph name="LOCK_SCREEN_APP_NAME" /></translation>
<translation id="3888586133700543064">Denne informasjonen gir oss bedre forståelse av Assistent-problemet. Den lagres i opptil 90 dager, og bare relevante tekniske team og tilbakemeldingsteam får tilgang.</translation>
-<translation id="3890064827463908288">Slå på Chrome-synkronisering for å bruke Wi-Fi-synkronisering</translation>
+<translation id="3890064827463908288">Slå på Chrome-synkronisering for å bruke wifi-synkronisering</translation>
<translation id="389313931326656921">Tilordne bryter for «Neste»</translation>
<translation id="3893295674388762059">For å slette data, lukk alle inkognitovinduer</translation>
<translation id="3893536212201235195">lese og endre innstillingene for tilgjengelighet</translation>
@@ -3150,7 +3150,7 @@ og Ctrl + Alt + lysstyrke ned for å zoome ut.</translation>
<translation id="3987993985790029246">Kopiér link</translation>
<translation id="3988996860813292272">Velg tidssone</translation>
<translation id="399179161741278232">Importert</translation>
-<translation id="3993887353483242788">Synkroniser <ph name="DEVICE_TYPE" />, slik at preferansene dine er klare på alle enheter når du logger på med Google-kontoen din. Preferanser betyr blant annet apper, innstillinger, Wi-Fi-passord, språk, bakgrunnsbilde og hurtigtaster.</translation>
+<translation id="3993887353483242788">Synkroniser <ph name="DEVICE_TYPE" />, slik at preferansene dine er klare på alle enheter når du logger på med Google-kontoen din. Preferanser betyr blant annet apper, innstillinger, wifi-passord, språk, bakgrunnsbilde og hurtigtaster.</translation>
<translation id="3994318741694670028">Dessverre er datamaskinen konfigurert med en feilformatert maskinvare-ID. Dette forhindrer ChromeOS Flex fra å ta i bruk de siste sikkerhetsoppdateringene, og datamaskinen <ph name="BEGIN_BOLD" />kan være sårbar for skadelige angrep<ph name="END_BOLD" />.</translation>
<translation id="3994374631886003300">Lås opp telefonen, og hold den nærmere for å låse opp <ph name="DEVICE_TYPE" />-enheten.</translation>
<translation id="3994878504415702912">&amp;Zoom</translation>
@@ -4096,7 +4096,7 @@ og Ctrl + Alt + lysstyrke ned for å zoome ut.</translation>
<translation id="4972129977812092092">Endre skriveren</translation>
<translation id="4972164225939028131">Feil passord</translation>
<translation id="4972737347717125191">Nettsteder kan be om å få bruke virtuell virkelighet-enheter og -data</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Kutt lyden for nettstedet}other{Kutt lyden for nettstedene}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Demp lyden for nettstedet}other{Demp lyden for nettstedene}}</translation>
<translation id="497403230787583386">Sikkerhetssjekkene er fullført. Dokumentet blir skrevet ut.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Bekreft tilgangen</translation>
@@ -4435,7 +4435,7 @@ og Ctrl + Alt + lysstyrke ned for å zoome ut.</translation>
<translation id="5327248766486351172">Navn</translation>
<translation id="5327570636534774768">Denne enheten er merket for administrering av et annet domene. Fjern tilgangen og ressursene fra det domenet før du konfigurerer demomodus.</translation>
<translation id="5327912693242073631">Funksjoner som krever varsler, kommer ikke til å virke</translation>
-<translation id="532943162177641444">Trykk på varselet på <ph name="PHONE_NAME" />-enheten din for å konfigurere en mobil Wi-Fi-sone denne enheten kan bruke.</translation>
+<translation id="532943162177641444">Trykk på varselet på <ph name="PHONE_NAME" />-enheten din for å konfigurere en mobil wifi-sone denne enheten kan bruke.</translation>
<translation id="5329858601952122676">&amp;Slett</translation>
<translation id="5331069282670671859">Du har ingen sertifikater i denne kategorien</translation>
<translation id="5331425616433531170">«<ph name="CHROME_EXTENSION_NAME" />» vil koble til</translation>
@@ -4717,7 +4717,7 @@ og Ctrl + Alt + lysstyrke ned for å zoome ut.</translation>
<translation id="5605623530403479164">Andre søkemotorer</translation>
<translation id="5605758115928394442">Vi har sendt et varsel til telefonen din for å bekrefte at det er deg.</translation>
<translation id="5606849116180480101">{NUM_EXTENSIONS,plural, =1{Denne utvidelsen er blokkert}other{Disse utvidelsene er blokkert}}</translation>
-<translation id="560834977503641186">Wi-Fi-synkronisering – finn ut mer</translation>
+<translation id="560834977503641186">Wifi-synkronisering – finn ut mer</translation>
<translation id="5608580678041221894">Trykk på de følgende tastene for å justere eller flytte beskjæringsområdet</translation>
<translation id="5609231933459083978">Appen ser ut til å være ugyldig.</translation>
<translation id="5610038042047936818">Bytt til kameramodus</translation>
@@ -5083,7 +5083,7 @@ og Ctrl + Alt + lysstyrke ned for å zoome ut.</translation>
<translation id="5978277834170881274">&amp;Bruk grunnleggende stavekontroll</translation>
<translation id="5979084224081478209">Kontrollér passordene</translation>
<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Du har slått på igjen én potensielt skadelig utvidelse}other{Du har slått på igjen {NUM_EXTENSIONS} potensielt skadelige utvidelser}}</translation>
-<translation id="5979353814339191480">Dette alternativet gjelder for Chromebook-enheter med dataabonnement- eller mobilnettverksdongler, eller ved bruk av delt internett fra en flyttbar Wi-Fi-sone</translation>
+<translation id="5979353814339191480">Dette alternativet gjelder for Chromebook-enheter med dataabonnement- eller mobilnettverksdongler, eller ved bruk av delt internett fra en flyttbar wifi-sone</translation>
<translation id="5979421442488174909">Overset&amp;t til <ph name="LANGUAGE" /></translation>
<translation id="5979469435153841984">For å sette sider som bokmerker, klikk på stjernen i adressefeltet</translation>
<translation id="5981362776161841923">For å tillate en utvidelse, endre standardinnstillingen nedenfor.</translation>
@@ -8426,6 +8426,6 @@ Jeg tror ikke det er nødvendig å blokkere dette nettstedet.</translation>
<translation id="995782501881226248">YouTube</translation>
<translation id="996250603853062861">Etablerer sikker tilkobling ...</translation>
<translation id="996803490569799917">Se minner av favorittpersonene dine med mer</translation>
-<translation id="99731366405731005">Slå på <ph name="LINK1_BEGIN" />Chrome-synkronisering<ph name="LINK1_END" /> for å bruke Wi-Fi-synkronisering. <ph name="LINK2_BEGIN" />Finn ut mer<ph name="LINK2_END" /></translation>
+<translation id="99731366405731005">Slå på <ph name="LINK1_BEGIN" />Chrome-synkronisering<ph name="LINK1_END" /> for å bruke wifi-synkronisering. <ph name="LINK2_BEGIN" />Finn ut mer<ph name="LINK2_END" /></translation>
<translation id="998747458861718449">I&amp;nspiser</translation>
</translationbundle> \ No newline at end of file
diff --git a/chromium/chrome/app/resources/generated_resources_pa.xtb b/chromium/chrome/app/resources/generated_resources_pa.xtb
index 03459c0fb49..360caa4040a 100644
--- a/chromium/chrome/app/resources/generated_resources_pa.xtb
+++ b/chromium/chrome/app/resources/generated_resources_pa.xtb
@@ -2936,7 +2936,7 @@
<translation id="3802486193901166966">ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਲਈ ਕਿਸੇ ਖਾਸ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ ਅਤੇ ਇਸ ਤੱਕ ਕਿਸੇ ਸਾਈਟ ਦੀ ਕੋਈ ਵਾਧੂ ਪਹੁੰਚ ਨਹੀਂ ਹੈ</translation>
<translation id="380329542618494757">ਨਾਮ</translation>
<translation id="3803345858388753269">ਵੀਡੀਓ ਕੁਆਲਿਟੀ</translation>
-<translation id="380408572480438692">ਦਰਸ਼ਨ ਡਾਟਾ ਦੇ ਇਕੱਤਰੀਕਰਨ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਣ ਨਾਲ ਇਹ ਸਮਾਂ ਬੀਤਣ ਤੇ Google ਸਿਸਟਮ ਨੂੰ ਸੁਧਾਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰੇਗਾ। ਉਦੋਂ ਤੱਕ ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾਂਦਾ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਇੱਕ ਫੀਡਬੈਕ ਰਿਪੋਰਟ ਦਾਖ਼ਲ ਨਹੀਂ ਕਰਦੇ (Alt-Shift-I) ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦੇ। ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਸਮੇਂ ਇਕੱਤਰੀਕਰਨ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਣ ਲਈ ਇਸ ਸਕ੍ਰੀਨ ਤੇ ਵਾਪਸ ਜਾ ਸਕਦੇ ਹੋ।</translation>
+<translation id="380408572480438692">ਕਾਰਗੁਜ਼ਾਰੀ ਡਾਟਾ ਦੇ ਇਕੱਤਰੀਕਰਨ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਸਮੇਂ ਦੇ ਨਾਲ Google ਸਿਸਟਮ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਉਦੋਂ ਤੱਕ ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾਂਦਾ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਿਚਾਰਾਂ ਸੰਬੰਧੀ ਰਿਪੋਰਟ ਸਪੁਰਦ ਨਹੀਂ ਕਰਦੇ (Alt-Shift-I) ਅਤੇ ਕਾਰਗੁਜ਼ਾਰੀ ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦੇ। ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਸਮੇਂ ਇਕੱਤਰੀਕਰਨ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਇਸ ਸਕ੍ਰੀਨ 'ਤੇ ਵਾਪਸ ਆ ਸਕਦੇ ਹੋ।</translation>
<translation id="3807249107536149332">ਲੌਗ-ਇਨ ਸਕ੍ਰੀਨ ਵਿੱਚ <ph name="EXTENSION_NAME" /> (ਐਕਸਟੈਂਸ਼ਨ ਆਈ.ਡੀ. "<ph name="EXTENSION_ID" />") ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।</translation>
<translation id="3807747707162121253">&amp;ਰੱਦ ਕਰੋ</translation>
<translation id="3808443763115411087">Crostini Android ਐਪ ਵਿਕਾਸ</translation>
@@ -7018,7 +7018,7 @@
<translation id="7880823633812189969">ਜਦੋਂ ਤੁਸੀਂ ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋਗੇ ਤਾਂ ਸਥਾਨਕ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ</translation>
<translation id="7881066108824108340">DNS</translation>
<translation id="7881483672146086348">ਖਾਤਾ ਦੇਖੋ</translation>
-<translation id="7883792253546618164">ਕਿਸੇ ਵੀ ਵੇਲੇ ਗਾਹਕੀ ਹਟਾਓ।</translation>
+<translation id="7883792253546618164">ਕਿਸੇ ਵੀ ਵੇਲੇ ਅਣਸਬਸਕ੍ਰਾਈਬ ਕਰੋ।</translation>
<translation id="788453346724465748">ਖਾਤਾ ਜਾਣਕਾਰੀ ਲੋਡ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...</translation>
<translation id="7886279613512920452">{COUNT,plural, =1{ਇੱਕ ਆਈਟਮ}one{# ਆਈਟਮ}other{# ਆਈਟਮਾਂ}}</translation>
<translation id="7886605625338676841">ਈ-ਸਿਮ</translation>
@@ -8114,7 +8114,7 @@
<translation id="8973596347849323817">ਤੁਸੀਂ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਆਪਣੀਆਂ ਲੋੜਾਂ ਦੇ ਅਨੁਸਾਰ ਵਿਉਂਤਬੱਧ ਕਰ ਸਕਦੇ ਹੋ। ਇਹਨਾਂ ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾਕੇ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।</translation>
<translation id="897414447285476047">ਕਿਸੇ ਕਨੈਕਸ਼ਨ ਸਮੱਸਿਆ ਦੇ ਕਾਰਨ ਮੰਜ਼ਿਲ ਫ਼ਾਈਲ ਅਧੂਰੀ ਸੀ।</translation>
<translation id="897525204902889653">ਕੁਰਾਟੀਨ ਸੇਵਾ</translation>
-<translation id="8975396729541388937">ਤੁਹਾਨੂੰ ਪ੍ਰਾਪਤ ਹੋਣ ਵਾਲੀਆਂ ਈਮੇਲਾਂ ਵਿੱਚ ਦਿੱਤੇ ਗਏ ਲਿੰਕ ਨੂੰ ਕਿਸੇ ਵੀ ਸਮੇਂ ਕਲਿੱਕ ਕਰਕੇ ਗਾਹਕੀ ਹਟਾਓ।</translation>
+<translation id="8975396729541388937">ਤੁਹਾਨੂੰ ਪ੍ਰਾਪਤ ਹੋਣ ਵਾਲੀਆਂ ਈਮੇਲਾਂ ਵਿੱਚ ਦਿੱਤੇ ਗਏ ਲਿੰਕ ਨੂੰ ਕਿਸੇ ਵੀ ਸਮੇਂ ਕਲਿੱਕ ਕਰ ਕੇ ਅਣਸਬਸਕ੍ਰਾਈਬ ਕਰੋ।</translation>
<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ਅਤੇ 1 ਹੋਰ ਟੈਬ}other{"<ph name="TAB_TITLE" />" ਅਤੇ # ਹੋਰ ਟੈਬਾਂ}}</translation>
<translation id="8977811652087512276">ਗਲਤ ਪਾਸਵਰਡ ਜਾਂ ਖਰਾਬ ਫ਼ਾਈਲ</translation>
<translation id="8978154919215542464">ਚਾਲੂ - ਸਭ ਕੁਝ ਸਿੰਕ ਕਰੋ</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_pt-BR.xtb b/chromium/chrome/app/resources/generated_resources_pt-BR.xtb
index 92f7521c06a..7c98acbffab 100644
--- a/chromium/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chromium/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -208,7 +208,7 @@
<translation id="1193927020065025187">O site pode estar tentando enganar você para que permita notificações invasivas</translation>
<translation id="1195210374336998651">Acessar as configurações do app</translation>
<translation id="1195447618553298278">Erro desconhecido.</translation>
-<translation id="1195558154361252544">As notificações são bloqueadas automaticamente para todos os sites, exceto aqueles que têm permissão</translation>
+<translation id="1195558154361252544">As notificações são bloqueadas automaticamente para todos os sites, exceto para aqueles que têm permissão</translation>
<translation id="1197088940767939838">Laranja</translation>
<translation id="1197199342062592414">Vamos começar</translation>
<translation id="1197935538609051549">Desativar</translation>
@@ -2739,7 +2739,7 @@ e Ctrl + Alt + Diminuir brilho para diminuí-lo.</translation>
<translation id="3616741288025931835">&amp;Limpar dados de navegação...</translation>
<translation id="3617891479562106823">Os planos de fundo estão indisponíveis. Tente novamente mais tarde.</translation>
<translation id="3619115746895587757">Cappuccino</translation>
-<translation id="3619962278978697442">Escolha uma delas cada vez que fizer login</translation>
+<translation id="3619962278978697442">Escolha uma opção toda vez que fizer login</translation>
<translation id="3621807901162200696">Ajudar a melhorar os recursos e o desempenho do ChromeOS</translation>
<translation id="362266093274784978">{COUNT,plural, =1{um app}one{# app}other{# apps}}</translation>
<translation id="362333465072914957">Esperando um certificado CA</translation>
@@ -3887,7 +3887,7 @@ e Ctrl + Alt + Diminuir brilho para diminuí-lo.</translation>
<translation id="474609389162964566">Acesse o Google Assistente usando o "Ok Google"</translation>
<translation id="4746351372139058112">Mensagens</translation>
<translation id="4748783296226936791">Os sites geralmente se conectam a dispositivos HID para recursos que usam teclados diferentes, controles de jogos e outros dispositivos</translation>
-<translation id="4750185073185658673">Use o smartphone para revisar mais algumas permissões. Confira se o Bluetooth e o Wi-Fi dele estão ativados.</translation>
+<translation id="4750185073185658673">No smartphone, reveja se as permissões estão corretas. Confira se o Bluetooth e o Wi-Fi estão ativados.</translation>
<translation id="4750394297954878236">Sugestões</translation>
<translation id="475088594373173692">Primeiro usuário</translation>
<translation id="4756378406049221019">Parar/Recarregar</translation>
@@ -5532,7 +5532,7 @@ Não exponha nenhuma informação confidencial.</translation>
<translation id="641469293210305670">Instalar atualizações e apps</translation>
<translation id="6414878884710400018">Abrir preferências do sistema</translation>
<translation id="6414888972213066896">Você perguntou ao seu responsável se pode visitar este site</translation>
-<translation id="6415900369006735853">Conecte-se à internet pelo smartphone</translation>
+<translation id="6415900369006735853">Conectar à Internet pelo smartphone</translation>
<translation id="6416743254476733475">Permita ou bloqueie no seu computador.</translation>
<translation id="6417265370957905582">Google Assistente</translation>
<translation id="6417468503703810114">Comportamento padrão</translation>
@@ -6342,7 +6342,7 @@ Não exponha nenhuma informação confidencial.</translation>
<translation id="7228523857728654909">Bloqueio de tela e login</translation>
<translation id="7230222852462421043">&amp;Restaurar janela</translation>
<translation id="7230787553283372882">Personalizar o tamanho do texto</translation>
-<translation id="7231260028442989757">Veja, dispense e responda às notificações do smartphone.</translation>
+<translation id="7231260028442989757">Ver, dispensar e responder às notificações do smartphone</translation>
<translation id="7232750842195536390">Falha na renomeação</translation>
<translation id="723343421145275488">Pesquisar imagens com <ph name="VISUAL_SEARCH_PROVIDER" /></translation>
<translation id="7234010996000898150">Cancelando restauração do Linux</translation>
@@ -6597,7 +6597,7 @@ Não exponha nenhuma informação confidencial.</translation>
<translation id="7484645889979462775">Nunca para este site</translation>
<translation id="7487141338393529395">Ativar a verificação ortográfica aprimorada</translation>
<translation id="7487969577036436319">Nenhum componente instalado</translation>
-<translation id="7488682689406685343">Esse site pode estar tentando enganar você para que permita notificações invasivas.</translation>
+<translation id="7488682689406685343">Este site pode estar tentando enganar você para que permita notificações invasivas.</translation>
<translation id="7489761397368794366">Ligar do seu dispositivo</translation>
<translation id="749028671485790643">Pessoa <ph name="VALUE" /></translation>
<translation id="7491962110804786152">tab</translation>
@@ -6873,7 +6873,7 @@ Pressione um interruptor ou tecla atribuídos para remover a atribuição.</tran
<translation id="7746739418892731373">Você está vendo destaques de fotos e vídeos da sua biblioteca do Google Fotos. É possível controlar o que aparece nos seus destaques em <ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" />.
<ph name="BREAK" />
<ph name="BREAK" />
- Você pode gerenciar as configurações desse card no menu dele ou ver mais opções em "Personalizar o Chrome".</translation>
+ Você pode gerenciar as configurações no menu desse card ou ver mais opções em "Personalizar o Chrome".</translation>
<translation id="7750228210027921155">Picture-in-picture</translation>
<translation id="7751260505918304024">Exibir todos</translation>
<translation id="7751619076382363711">Você não removeu nenhum site</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
index b2d1427a5dd..685545ce93e 100644
--- a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -13,7 +13,7 @@
<translation id="1009476156254802388">Localização do <ph name="WEB_DRIVE" /></translation>
<translation id="1010498023906173788">Este separador está associado a uma porta de série.</translation>
<translation id="1010833424573920260">{NUM_PAGES,plural, =1{Página sem resposta}other{Páginas sem resposta}}</translation>
-<translation id="1011355516189274711">Volume da síntese de voz</translation>
+<translation id="1011355516189274711">Volume da conversão de texto em voz</translation>
<translation id="1012794136286421601">Os seus ficheiros de Docs, Folhas, Slides e Desenhos estão a ser sincronizados. Abra a app Google Drive para aceder aos ficheiros online ou offline.</translation>
<translation id="1012876632442809908">Dispositivo USB-C (porta frontal)</translation>
<translation id="1015041505466489552">TrackPoint</translation>
@@ -435,7 +435,7 @@
<translation id="1426410128494586442">Sim</translation>
<translation id="142655739075382478">A app <ph name="APP_NAME" /> está bloqueada</translation>
<translation id="1426870617281699524">Clique em Tentar novamente e aceite o pedido no computador.</translation>
-<translation id="1427179946227469514">Tom da síntese de voz</translation>
+<translation id="1427179946227469514">Tom da conversão de texto em voz</translation>
<translation id="1427269577154060167">País</translation>
<translation id="142758023928848008">Ativar as teclas aderentes (para executar atalhos de teclado escrevendo-os sequencialmente)</translation>
<translation id="142765311413773645">A licença da app <ph name="APP_NAME" /> expirou</translation>
@@ -529,7 +529,7 @@ As autorizações que já concedeu às apps podem aplicar-se a esta conta. Pode
<translation id="1521774566618522728">Ativo hoje</translation>
<translation id="152234381334907219">Nunca guardado</translation>
<translation id="1523279371236772909">Visto no mês passado</translation>
-<translation id="1523978563989812243">Motores da síntese de voz</translation>
+<translation id="1523978563989812243">Motores da conversão de texto em voz</translation>
<translation id="1524430321211440688">Teclado</translation>
<translation id="1524563461097350801">Não, Obrigado</translation>
<translation id="1525740877599838384">Utilizar apenas Wi-Fi para determinar a localização</translation>
@@ -726,7 +726,7 @@ As autorizações que já concedeu às apps podem aplicar-se a esta conta. Pode
<translation id="1688935057616748272">Introduza uma letra.</translation>
<translation id="168991973552362966">Adicionar uma impressora próxima</translation>
<translation id="1689945336726856614">Copiar &amp;URL</translation>
-<translation id="1692115862433274081">Utilizar outra conta</translation>
+<translation id="1692115862433274081">Usar outra conta</translation>
<translation id="1692118695553449118">A sincronização está ativada</translation>
<translation id="1692210323591458290">Roxo escuro</translation>
<translation id="1695487653372841667">Pode controlar os dados que são partilhados com a Google. Pode alterar esta definição em qualquer altura nas Definições.</translation>
@@ -810,7 +810,7 @@ As autorizações que já concedeu às apps podem aplicar-se a esta conta. Pode
<translation id="1768278914020124551">Ups! Ocorreu um problema ao contactar o servidor de início de sessão. Verifique a sua ligação de rede e o nome do domínio, e tente novamente.</translation>
<translation id="1769104665586091481">Abrir Link Numa Nova &amp;Janela</translation>
<translation id="177053719077591686">Faça uma cópia de segurança das apps Android para o Google Drive.</translation>
-<translation id="177336675152937177">Dados de aplicações alojadas</translation>
+<translation id="177336675152937177">Dados de apps alojadas</translation>
<translation id="1775706469381199282">Não permitir que os sites utilizem JavaScript</translation>
<translation id="1776712937009046120">Adicionar utilizador</translation>
<translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
@@ -2788,7 +2788,7 @@ Pretende pará-lo?</translation>
<translation id="3678156199662914018">Extensão: <ph name="EXTENSION_NAME" /></translation>
<translation id="3678188444105291936">As páginas visualizadas nesta janela não serão apresentadas no histórico do navegador nem no histórico de pesquisas e não deixarão outros vestígios, como cookies, no computador depois de terminar sessão. Os ficheiros transferidos e os marcadores criados não serão preservados.</translation>
<translation id="368019053277764111">Abra a pesquisa no painel lateral</translation>
-<translation id="3680683624079082902">Voz da síntese de voz</translation>
+<translation id="3680683624079082902">Voz da conversão de texto em voz</translation>
<translation id="3681311097828166361">Obrigado pelo seu feedback. Neste modo, está offline, pelo que o seu relatório será enviado mais tarde.</translation>
<translation id="3682824389861648626">Limite de movimentos</translation>
<translation id="3683524264665795342">Pedido de Partilha de Ecrã de <ph name="APP_NAME" /></translation>
@@ -3866,7 +3866,7 @@ Pretende pará-lo?</translation>
<translation id="4742334355511750246">Sem autorização para mostrar imagens</translation>
<translation id="4742970037960872810">Remover realce</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Saiba como atualizar aplicações<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{Reativar o som do site}other{Reativar o som dos sites}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{Reativar som do site}other{Reativar som dos sites}}</translation>
<translation id="474609389162964566">Aceda ao Assistente com "OK Google"</translation>
<translation id="4746351372139058112">Mensagens</translation>
<translation id="4748783296226936791">Normalmente, os sites estabelecem ligação a dispositivos HID para funcionalidades que utilizam teclados, comandos de jogos e outros dispositivos pouco comuns</translation>
@@ -4090,7 +4090,7 @@ Pretende pará-lo?</translation>
<translation id="4972129977812092092">Editar impressora</translation>
<translation id="4972164225939028131">Palavra-passe incorreta.</translation>
<translation id="4972737347717125191">Os sites podem solicitar a utilização de dados e dispositivos de realidade virtual</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Desativar o som do site}other{Desativar o som dos sites}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Desativar som do site}other{Desativar som dos sites}}</translation>
<translation id="497403230787583386">As verificações de segurança estão concluídas. O documento vai ser impresso.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Confirmar acesso</translation>
@@ -4563,7 +4563,7 @@ Pode atribuir vários interruptores a esta ação.</translation>
<translation id="5468173180030470402">À procura de partilhas de ficheiros…</translation>
<translation id="5469852975082458401">Pode navegar pelas páginas com um cursor de texto. Prima F7 para desativar esta opção.</translation>
<translation id="5470735824776589490">É necessário reiniciar antes de ser possível repor o dispositivo com o Powerwash. <ph name="LINK_BEGIN" />Saber mais<ph name="LINK_END" /></translation>
-<translation id="5471768120198416576">Olá! Sou a sua voz para a síntese de voz.</translation>
+<translation id="5471768120198416576">Olá! Sou a sua voz para a conversão de texto em voz.</translation>
<translation id="5472627187093107397">Guardar palavras-passe para este site</translation>
<translation id="5473075389972733037">IBM</translation>
<translation id="5473099001878321374">Ao continuar, aceita que este dispositivo também pode transferir e instalar automaticamente atualizações e apps da Google, do operador da criança e do fabricante deste dispositivo, possivelmente através de dados móveis. Algumas destas apps podem oferecer compras na app.</translation>
@@ -5526,7 +5526,7 @@ Certifique-se de que não revela informações confidenciais.</translation>
<translation id="6419524191360800346">Está disponível uma atualização para a versão Debian 11 (Bullseye).</translation>
<translation id="6419546358665792306">Carregar expandida</translation>
<translation id="642469772702851743">Este dispositivo (SN: <ph name="SERIAL_NUMBER" />) foi bloqueado pelo proprietário.</translation>
-<translation id="6425556984042222041">Taxa da síntese de voz</translation>
+<translation id="6425556984042222041">Taxa da conversão de texto em voz</translation>
<translation id="6426200009596957090">Abrir as definições do ChromeVox</translation>
<translation id="642729974267661262">Sem autorização para reproduzir som</translation>
<translation id="6429384232893414837">Atualizar erro</translation>
@@ -5740,7 +5740,7 @@ Certifique-se de que não revela informações confidenciais.</translation>
<translation id="6635362468090274700">Ninguém conseguirá partilhar consigo enquanto não se tornar visível.<ph name="BR" /><ph name="BR" />Para se tornar temporariamente visível, abra a área de estado e, em seguida, ative a Visibilidade na proximidade.</translation>
<translation id="6635674640674343739">Não é possível estabelecer ligação à rede. Verifique a ligação de rede e tente novamente.</translation>
<translation id="6635944431854494329">O proprietário pode controlar esta funcionalidade em Definições &gt; Avançadas &gt; Enviar automaticamente dados de diagnóstico e de utilização para a Google.</translation>
-<translation id="6635956300022133031">Selecionar e personalizar as vozes para a síntese de voz.</translation>
+<translation id="6635956300022133031">Selecionar e personalizar as vozes para a conversão de texto em voz.</translation>
<translation id="6636623428211296678">Explore mais definições abaixo ou conclua agora</translation>
<translation id="6639554308659482635">Memória SQLite</translation>
<translation id="6640268266988685324">Separador aberto</translation>
@@ -5983,7 +5983,7 @@ Certifique-se de que não revela informações confidenciais.</translation>
<translation id="686609795364435700">Baixo</translation>
<translation id="686664946474413495">Temperatura da cor</translation>
<translation id="6867086642466184030">Outras apps estão definidas para abrir os mesmos links que a app <ph name="APP_NAME" />. Isto irá impedir que as apps <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, <ph name="APP_NAME_4" /> e mais <ph name="NUMBER_OF_OTHER_APPS" /> apps abram links suportados.</translation>
-<translation id="6867400383614725881">Novo separador de navegação anónima</translation>
+<translation id="6867400383614725881">Novo separador anónimo</translation>
<translation id="6868934826811377550">Ver detalhes</translation>
<translation id="6871644448911473373">Serviço de resposta de OCSP: <ph name="LOCATION" /></translation>
<translation id="6872781471649843364">A palavra-passe introduzida foi rejeitada pelo servidor.</translation>
@@ -6374,7 +6374,7 @@ Certifique-se de que não revela informações confidenciais.</translation>
<translation id="727441411541283857"><ph name="PERCENTAGE" />% – <ph name="TIME" /> até ficar completa</translation>
<translation id="727952162645687754">Erro de transferência</translation>
<translation id="7280041992884344566">Ocorreu um erro enquanto o Chrome procurava software prejudicial.</translation>
-<translation id="7280649757394340890">Definições de voz para a síntese de voz</translation>
+<translation id="7280649757394340890">Definições de voz para a conversão de texto em voz</translation>
<translation id="7280877790564589615">Autorização solicitada</translation>
<translation id="7282547042039404307">Suave</translation>
<translation id="7282992757463864530">Barra de informações</translation>
@@ -6417,7 +6417,7 @@ Certifique-se de que não revela informações confidenciais.</translation>
<translation id="7334014994694414993">Escolha o tema de cores do Launcher, da prateleira, das Definições rápidas e muito mais</translation>
<translation id="7334274148831027933">Ativar lupa ancorada</translation>
<translation id="7335974957018254119">Utilizar o corretor ortográfico para</translation>
-<translation id="7336799713063880535">Notific. bloqueadas.</translation>
+<translation id="7336799713063880535">Notific. bloqueadas</translation>
<translation id="7338630283264858612">O número de série do dispositivo é inválido.</translation>
<translation id="7339763383339757376">PKCS #7, certificado único</translation>
<translation id="7339785458027436441">Verificar a ortografia durante a escrita</translation>
@@ -6915,7 +6915,7 @@ Prima uma tecla ou um interruptor atribuído para remover a atribuição.</trans
<translation id="7789963078219276159">O fundo da página de início foi alterado para <ph name="CATEGORY" />.</translation>
<translation id="7791543448312431591">Adicionar</translation>
<translation id="7792012425874949788">Ocorreu um erro ao iniciar sessão</translation>
-<translation id="7792388396321542707">Parar a partilha</translation>
+<translation id="7792388396321542707">Parar partilha</translation>
<translation id="779308894558717334">Verde claro</translation>
<translation id="7793098747275782155">Azul escuro</translation>
<translation id="7797246427375693110">Ativado/Desativa-se automaticamente à(s) <ph name="TIME" /></translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ro.xtb b/chromium/chrome/app/resources/generated_resources_ro.xtb
index d3157960007..876842f62ec 100644
--- a/chromium/chrome/app/resources/generated_resources_ro.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ro.xtb
@@ -1129,7 +1129,7 @@ Poți gestiona setările contului dacă instalezi aplicația Family Link pe disp
<translation id="2082187087049518845">Adaugă fila la un grup</translation>
<translation id="2082510809738716738">Alege o culoare pentru temă</translation>
<translation id="208586643495776849">Încearcă din nou</translation>
-<translation id="208634871997892083">Rețea VPN activată permanent</translation>
+<translation id="208634871997892083">VPN activat permanent</translation>
<translation id="2087822576218954668">Printați: <ph name="PRINT_NAME" /></translation>
<translation id="2088092308059522196">Înregistrarea este acceptată numai după ce instalezi <ph name="DEVICE_OS" />.</translation>
<translation id="208928984520943006">Pentru a accesa oricând ecranul de pornire, glisează în sus din partea de jos.</translation>
@@ -4184,7 +4184,7 @@ Mesaj de la server: <ph name="SERVER_MSG" /></translation>
<translation id="5075910247684008552">Conținutul nesigur este blocat în mod prestabilit pe site-urile securizate</translation>
<translation id="5078638979202084724">Marchează toate filele</translation>
<translation id="5078796286268621944">Cod PIN incorect</translation>
-<translation id="5079010647467150187">Adaugă o rețea VPN încorporată…</translation>
+<translation id="5079010647467150187">Adaugă un VPN încorporat…</translation>
<translation id="5079950360618752063">Folosește parola sugerată</translation>
<translation id="508059534790499809">Actualizează un tichet Kerberos</translation>
<translation id="5084328598860513926">Fluxul de provizionare a fost întrerupt. Încearcă din nou sau contactează proprietarul dispozitivului ori administratorul. Cod de eroare: <ph name="ERROR_CODE" />.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ru.xtb b/chromium/chrome/app/resources/generated_resources_ru.xtb
index 0585aa2462b..1be6c4a74e0 100644
--- a/chromium/chrome/app/resources/generated_resources_ru.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ru.xtb
@@ -208,7 +208,7 @@
<translation id="1193927020065025187">Возможно, этот сайт пытается обманным путем заставить вас разрешить навязчивые уведомления.</translation>
<translation id="1195210374336998651">Открыть настройки приложений</translation>
<translation id="1195447618553298278">Неизвестная ошибка.</translation>
-<translation id="1195558154361252544">Уведомления со всех сайтов, кроме тех, которым вы предоставили отдельные разрешения, автоматически блокируются.</translation>
+<translation id="1195558154361252544">Уведомления от всех сайтов блокируются автоматически – кроме тех, которым вы дали разрешение.</translation>
<translation id="1197088940767939838">Оранжевый</translation>
<translation id="1197199342062592414">Приступим</translation>
<translation id="1197935538609051549">Отключить</translation>
@@ -2931,7 +2931,7 @@
<translation id="3809280248639369696">Пришелец</translation>
<translation id="3810593934879994994"><ph name="ORIGIN" /> может просматривать файлы в указанных ниже папках.</translation>
<translation id="3810914450553844415">Администратор запретил добавлять дополнительные аккаунты Google</translation>
-<translation id="3810973564298564668">Перейти</translation>
+<translation id="3810973564298564668">Управление</translation>
<translation id="381202950560906753">Добавить ещё</translation>
<translation id="3812525830114410218">Недопустимый сертификат</translation>
<translation id="3813296892522778813">Поиск не дал результатов? Перейдите в <ph name="BEGIN_LINK_CHROMIUM" />Справочный центр Google Chrome<ph name="END_LINK_CHROMIUM" />.</translation>
@@ -5175,7 +5175,7 @@
<translation id="6077189836672154517">Обновления и полезные советы по работе с <ph name="DEVICE_TYPE" /></translation>
<translation id="6077476112742402730">Голосовой ввод</translation>
<translation id="6078121669093215958">{0,plural, =1{Гость}one{# открытое окно в гостевом режиме}few{# открытых окна в гостевом режиме}many{# открытых окон в гостевом режиме}other{# открытого окна в гостевом режиме}}</translation>
-<translation id="6078323886959318429">Добавить ярлык</translation>
+<translation id="6078323886959318429">Новый ярлык</translation>
<translation id="6078752646384677957">Проверьте микрофон и уровни громкости.</translation>
<translation id="6078769373519310690">Расширение "<ph name="CHROME_EXTENSION_NAME" />" запрашивает разрешение на подключение к HID-устройству</translation>
<translation id="608029822688206592">Сеть не найдена. Установите SIM-карту и повторите попытку.</translation>
@@ -6855,7 +6855,7 @@
<translation id="7746739418892731373">Это фото и видео с лучшими моментами из вашей библиотеки Google Фото. Управлять ими можно на странице <ph name="BEGIN_LINK" />photos.google.com/settings<ph name="END_LINK" />.
<ph name="BREAK" />
<ph name="BREAK" />
- Вы можете управлять настройками в меню карточки. Чтобы посмотреть дополнительные параметры, выберите "Настроить Chrome".</translation>
+ Вы можете задать нужные настройки в меню карточки. Чтобы посмотреть дополнительные параметры, выберите "Настроить Chrome".</translation>
<translation id="7750228210027921155">Картинка в картинке</translation>
<translation id="7751260505918304024">Показать все</translation>
<translation id="7751619076382363711">Вы не удаляли сайты.</translation>
@@ -7309,7 +7309,7 @@
<translation id="8168071266284693455">Закладки, пароли, история и другие данные теперь синхронизируются на всех ваших устройствах.</translation>
<translation id="8168435359814927499">Контент</translation>
<translation id="8169165065843881617">{NUM_TABS,plural, =1{Добавить вкладку в список для чтения}one{Добавить вкладки в список для чтения}few{Добавить вкладки в список для чтения}many{Добавить вкладки в список для чтения}other{Добавить вкладки в список для чтения}}</translation>
-<translation id="8171334254070436367">Скрыть все подсказки</translation>
+<translation id="8171334254070436367">Скрыть все карточки</translation>
<translation id="8174047975335711832">Сведения об устройстве</translation>
<translation id="8174876712881364124">Резервное копирование на Google Диск. Позволяет в любой момент восстановить данные (в том числе данные приложений) или перенести их на новое устройство. Резервные копии загружаются в Google и шифруются с помощью пароля аккаунта вашего ребенка. <ph name="BEGIN_LINK1" />Подробнее…<ph name="END_LINK1" /></translation>
<translation id="8176332201990304395">Розовый с белым</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_si.xtb b/chromium/chrome/app/resources/generated_resources_si.xtb
index 2886afdf276..5b97dafe4b1 100644
--- a/chromium/chrome/app/resources/generated_resources_si.xtb
+++ b/chromium/chrome/app/resources/generated_resources_si.xtb
@@ -4093,7 +4093,7 @@ Linux ස්ථාපනය කිරීම දත්තවලින් <ph name
<translation id="4972129977812092092">මුද්‍රකය සංස්කරණය</translation>
<translation id="4972164225939028131">වැරදි මුරපදයකි</translation>
<translation id="4972737347717125191">අඩවි අතථ්‍ය යථාර්ථ උපාංග සහ දත්ත භාවිත කිරීමට ඉල්ලිය හැකිය</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{වෙබ් අඩවිය නිහඬ කරන්න}one{වෙබ් අඩවි නිහඬ කරන්න}other{වෙබ් අඩවි නිහඬ කරන්න}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{අඩවිය නිහඬ කරන්න}one{අඩවි නිහඬ කරන්න}other{අඩවිය නිහඬ කරන්න}}</translation>
<translation id="497403230787583386">ආරක්ෂක පරීක්ෂා සිදු කර ඇත. ඔබගේ ලේඛනය මුද්‍රණය කරනු ඇත.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">පිවිසුම තහවුරු කරන්න</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sk.xtb b/chromium/chrome/app/resources/generated_resources_sk.xtb
index d608d754309..760364e96af 100644
--- a/chromium/chrome/app/resources/generated_resources_sk.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sk.xtb
@@ -2283,7 +2283,7 @@ stlačením klávesov Ctrl + Alt + zníženie jasu zobrazenie oddialite.</tr
<translation id="3151562827395986343">Vymazanie histórie, súborov cookie, vyrovnávacej pamäte a ďalších dát</translation>
<translation id="3151616662954589507">Selfie fotoaparát</translation>
<translation id="3151786313568798007">Orientácia</translation>
-<translation id="3152356229013609796">Upozornenia telefónu môžete zobraziť, odmietnuť alebo na ne odpovedať</translation>
+<translation id="3152356229013609796">Zobraziť, odmietnuť alebo odpovedať na upozornenia telefónu</translation>
<translation id="3157387275655328056">Pridať do čitateľského zoznamu</translation>
<translation id="3157931365184549694">Obnoviť</translation>
<translation id="3158033540161634471">Nastavenie odtlačku prsta</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sl.xtb b/chromium/chrome/app/resources/generated_resources_sl.xtb
index 025f3dee267..8c3f771c16d 100644
--- a/chromium/chrome/app/resources/generated_resources_sl.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sl.xtb
@@ -4108,7 +4108,7 @@ Domena <ph name="DOMAIN" /> zahteva, da je pametna kartica vstavljena.</translat
<translation id="4972129977812092092">Urejanje tiskalnika</translation>
<translation id="4972164225939028131">Napačno geslo</translation>
<translation id="4972737347717125191">Spletna mesta lahko zahtevajo uporabo naprav in podatkov za navidezno resničnost</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{Izklop zvoka spletnega mesta}one{Izklop zvoka spletnih mest}two{Izklop zvoka spletnih mest}few{Izklop zvoka spletnih mest}other{Izklop zvoka spletnih mest}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{Izklopi zvok spletnega mesta}one{Izklopi zvok spletnih mest}two{Izklopi zvok spletnih mest}few{Izklopi zvok spletnih mest}other{Izklopi zvok spletnih mest}}</translation>
<translation id="497403230787583386">Varnostni pregledi so opravljeni. Vaš dokument bo natisnjen.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">Potrditev dostopa</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sr-Latn.xtb b/chromium/chrome/app/resources/generated_resources_sr-Latn.xtb
index 567e0056d9f..71c3068e73b 100644
--- a/chromium/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -2280,7 +2280,7 @@ a Ctrl+Alt+taster za smanjivanje osvetljenosti da biste umanjili prikaz.</transl
<translation id="3151562827395986343">Obrišite istoriju, kolačiće, keš i druge stavke</translation>
<translation id="3151616662954589507">Kamera za selfije</translation>
<translation id="3151786313568798007">Položaj</translation>
-<translation id="3152356229013609796">Pregledajte i odbacite obaveštenja na telefonu ili odgovorite na njih</translation>
+<translation id="3152356229013609796">da pregleda i odbaci obaveštenja na telefonu ili odgovori na njih</translation>
<translation id="3157387275655328056">Dodaj na listu za čitanje</translation>
<translation id="3157931365184549694">Ponovo otvori</translation>
<translation id="3158033540161634471">Podesite otisak prsta</translation>
@@ -5662,7 +5662,7 @@ Vodite računa da ne otkrijete nikakve osetljive informacije.</translation>
<translation id="6555432686520421228">Uklonite sve korisničke naloge i restartujte <ph name="IDS_SHORT_PRODUCT_NAME" /> uređaj da bi bio kao nov.</translation>
<translation id="6555604601707417276">Vraćena je rezervna kopija Linux-a</translation>
<translation id="6555810572223193255">Čišćenje je trenutno nedostupno</translation>
-<translation id="6556477848444788999">Ovaj PIN ili lozinka štiti podatke na ovom uređaju <ph name="DEVICE_TYPE" />, uključujući sav sadržaj koji strimujete sa telefona.</translation>
+<translation id="6556477848444788999">Ovaj PIN ili lozinka štiti podatke na ovom <ph name="DEVICE_TYPE" />-u, uključujući sav sadržaj koji strimujete sa telefona.</translation>
<translation id="6556866813142980365">Ponovi</translation>
<translation id="6556903358015358733">Tema i pozadina</translation>
<translation id="6557290421156335491">Moje prečice</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sr.xtb b/chromium/chrome/app/resources/generated_resources_sr.xtb
index 7f7a9cc8cc1..e5126e94b95 100644
--- a/chromium/chrome/app/resources/generated_resources_sr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sr.xtb
@@ -2280,7 +2280,7 @@
<translation id="3151562827395986343">Обришите историју, колачиће, кеш и друге ставке</translation>
<translation id="3151616662954589507">Камера за селфије</translation>
<translation id="3151786313568798007">Положај</translation>
-<translation id="3152356229013609796">Прегледајте и одбаците обавештења на телефону или одговорите на њих</translation>
+<translation id="3152356229013609796">да прегледа и одбаци обавештења на телефону или одговори на њих</translation>
<translation id="3157387275655328056">Додај на листу за читање</translation>
<translation id="3157931365184549694">Поново отвори</translation>
<translation id="3158033540161634471">Подесите отисак прста</translation>
@@ -5662,7 +5662,7 @@
<translation id="6555432686520421228">Уклоните све корисничке налоге и рестартујте <ph name="IDS_SHORT_PRODUCT_NAME" /> уређај да би био као нов.</translation>
<translation id="6555604601707417276">Враћена је резервна копија Linux-а</translation>
<translation id="6555810572223193255">Чишћење је тренутно недоступно</translation>
-<translation id="6556477848444788999">Овај PIN или лозинка штити податке на овом уређају <ph name="DEVICE_TYPE" />, укључујући сав садржај који стримујете са телефона.</translation>
+<translation id="6556477848444788999">Овај PIN или лозинка штити податке на овом <ph name="DEVICE_TYPE" />-у, укључујући сав садржај који стримујете са телефона.</translation>
<translation id="6556866813142980365">Понови</translation>
<translation id="6556903358015358733">Тема и позадина</translation>
<translation id="6557290421156335491">Моје пречице</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ta.xtb b/chromium/chrome/app/resources/generated_resources_ta.xtb
index cbe4475aa51..4432712ebe0 100644
--- a/chromium/chrome/app/resources/generated_resources_ta.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ta.xtb
@@ -2119,7 +2119,7 @@
<translation id="2966937470348689686">Android விருப்பத்தேர்வுகளை நிர்வகி</translation>
<translation id="2967926928600500959">இந்த விதிகளுக்குப் பொருந்தும் URLகள் குறிப்பிட்ட உலாவியில் திறக்கப்படும்.</translation>
<translation id="2972581237482394796">&amp;மீண்டும் செய்</translation>
-<translation id="2973324205039581528">தளத்தில் ஒலி இயக்கு</translation>
+<translation id="2973324205039581528">தளத்தின் ஒலியை இயக்கு</translation>
<translation id="2973537811036309675">பக்கவாட்டுப் பேனல்</translation>
<translation id="2976557544729462544">சரியாக அல்லது முழுச் செயல்திறனுடன் செயல்பட இதை முடக்குமாறு சில சாதனங்கள் கோரும்.</translation>
<translation id="2977480621796371840">குழுவிலிருந்து அகற்று</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_te.xtb b/chromium/chrome/app/resources/generated_resources_te.xtb
index 8e1f07c5d7d..8e953fb5fc0 100644
--- a/chromium/chrome/app/resources/generated_resources_te.xtb
+++ b/chromium/chrome/app/resources/generated_resources_te.xtb
@@ -14,7 +14,7 @@
<translation id="1010498023906173788">ఈ ట్యాబ్ ఒక సీరియల్ పోర్ట్‌కు కనెక్ట్ చేయబడింది.</translation>
<translation id="1010833424573920260">{NUM_PAGES,plural, =1{పేజీ ప్రతిస్పందించడం లేదు}other{పేజీలు ప్రతిస్పందించడం లేదు}}</translation>
<translation id="1011355516189274711">టెక్ట్స్-టు-స్పీచ్ వాల్యూమ్</translation>
-<translation id="1012794136286421601">మీ డాక్స్, షీట్‌లు, స్లయిడ్‌లు మరియు డ్రాయింగ్‌ల ఫైళ్లు సమకాలీకరించబడుతున్నాయి. వీటిని ఆన్‌లైన్ లేదా ఆఫ్‌లైన్‌లో యాక్సెస్ చేయడానికి Google Drive యాప్‌ని తెరవండి.</translation>
+<translation id="1012794136286421601">మీ డాక్స్, షీట్‌లు, స్లయిడ్‌లు మరియు డ్రాయింగ్‌ల ఫైళ్లు సింక్ చేయబడుతున్నాయి. వీటిని ఆన్‌లైన్ లేదా ఆఫ్‌లైన్‌లో యాక్సెస్ చేయడానికి Google Drive యాప్‌ని తెరవండి.</translation>
<translation id="1012876632442809908">USB-C పరికరం (ముందువైపు పోర్ట్)</translation>
<translation id="1015041505466489552">TrackPoint</translation>
<translation id="1015318665228971643">ఫోల్డర్ పేరును ఎడిట్ చేయండి</translation>
@@ -38,7 +38,7 @@
<translation id="1039337018183941703">ఫైల్ చెల్లదు లేదా పాడైంది</translation>
<translation id="1041175011127912238">ఈ పేజీ ప్రతిస్పందించడం లేదు</translation>
<translation id="1041263367839475438">అందుబాటులో ఉన్న పరికరాలు</translation>
-<translation id="1042174272890264476">మీ కంప్యూటర్‌‍లో కూడా <ph name="SHORT_PRODUCT_NAME" /> యొక్క అంతర్గత RLZ లైబ్రరీ ఉంటుంది. RLZ సెర్చ్‌లను మరియు నిర్దిష్ట ప్రమోషనల్ ప్రచారం ద్వారా ఉపయోగించబడిన <ph name="SHORT_PRODUCT_NAME" /> వినియోగాన్ని లెక్కించడానికి, ప్రత్యేకం కానటువంటి, వ్యక్తిగతంగా గుర్తించలేని ట్యాగ్‌ను సమర్పిస్తుంది. ఈ లేబుళ్లు కొన్నిసార్లు <ph name="PRODUCT_NAME" />లోని Google శోధన ప్రశ్నలలో కనిపిస్తాయి.</translation>
+<translation id="1042174272890264476">మీ కంప్యూటర్‌‍లో కూడా <ph name="SHORT_PRODUCT_NAME" /> యొక్క అంతర్గత RLZ లైబ్రరీ ఉంటుంది. RLZ సెర్చ్‌లను మరియు నిర్దిష్ట ప్రమోషనల్ ప్రచారం ద్వారా ఉపయోగించబడిన <ph name="SHORT_PRODUCT_NAME" /> వినియోగాన్ని లెక్కించడానికి, ప్రత్యేకం కానటువంటి, వ్యక్తిగతంగా గుర్తించలేని ట్యాగ్‌ను సమర్పిస్తుంది. ఈ లేబుళ్లు కొన్నిసార్లు <ph name="PRODUCT_NAME" />లోని Google Search ప్రశ్నలలో కనిపిస్తాయి.</translation>
<translation id="1043505821207197890">ఏదో తప్పు జరిగింది. Linux పాక్షికంగా మాత్రమే అప్‌గ్రేడ్ అయి ఉండవచ్చు. మరింత సమాచారం కోసం లాగ్స్‌ను రివ్యూ చేయండి. Files &gt; నా ఫైల్స్ &gt; <ph name="LOG_FILE" /> అనే సెట్టింగ్‌లో లాగ్స్ సేవ్ చేయబడ్డాయి</translation>
<translation id="1043818413152647937">అలాగే, ఈ యాప్‌ల నుండి డేటాను క్లియర్ చేయాలా?</translation>
<translation id="1043824690776631483">ఈ సైట్‌కు వెళ్లడానికి మీకు అనుమతి అవసరం. ఇందులో అనుచితమైన కంటెంట్ ఉండవచ్చు.</translation>
@@ -84,7 +84,7 @@
<translation id="1076766328672150609">పరికరాన్ని అన్‌లాక్ చేయడానికి మీ చిన్నారి PINను ఉపయోగించవచ్చు.</translation>
<translation id="1076818208934827215">Microsoft Internet Explorer</translation>
<translation id="1076882167394279216"><ph name="LANGUAGE" />కు స్పెల్ చెక్ నిఘంటువును డౌన్‌లోడ్ చేయడం సాధ్యపడలేదు. మళ్లీ ట్రై చేయండి.</translation>
-<translation id="1079766198702302550">ఎల్లప్పుడూ కెమెరా యాక్సెస్‌ను బ్లాక్ చేయి</translation>
+<translation id="1079766198702302550">ఎల్లప్పుడూ కెమెరా యాక్సెస్‌ను బ్లాక్ చేయండి</translation>
<translation id="1081956462909987459">{NUM_TABS,plural, =1{<ph name="GROUP_TITLE" /> - 1 ట్యాబ్}other{<ph name="GROUP_TITLE" /> - # ట్యాబ్‌లు}}</translation>
<translation id="1082214733466244292">ఈ పరికరంలో కొంత ఫంక్షనాలిటీని మీ అడ్మినిస్ట్రేటర్ బ్లాక్ చేశారు</translation>
<translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> మీ Chrome సెట్టింగ్‌లను వాటి అసలు డిఫాల్ట్‌లకు పునరుద్ధరించాలనుకుంటోంది. ఇది మీ హోమ్ పేజీని, కొత్త ట్యాబ్ పేజీని మరియు సెర్చ్ ఇంజిన్‌ను రీసెట్ చేస్తుంది, మీ ఎక్స్‌టెన్షన్‌లను నిలిపివేస్తుంది మరియు ట్యాబ్‌లు అన్నింటినీ అన్‌పిన్ చేస్తుంది. ఇది కుక్కీలు, కంటెంట్ మరియు సైట్ డేటా వంటి ఇతర తాత్కాలిక మరియు కాష్ చేసిన డేటాను కూడా తీసివేస్తుంది.</translation>
@@ -161,7 +161,7 @@
<translation id="1149725087019908252"><ph name="FILE_NAME" />ను స్కాన్ చేస్తోంది</translation>
<translation id="1150490752229770117">ఈ <ph name="DEVICE_TYPE" />కు ఇదే చివరి ఆటోమేటిక్ సాఫ్ట్‌వేర్ మరియు భద్రతాపరమైన అప్‌డేట్. భవిష్యత్తు అప్‌డేట్‌లను పొందడానికి, సరికొత్త మోడల్‌కు అప్‌గ్రేడ్ చేయండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
<translation id="1150565364351027703">చలువ అద్దాలు</translation>
-<translation id="1151917987301063366">సెన్సార్‌లను యాక్సెస్ చేయడానికి ఎల్లవేళలా <ph name="HOST" />ని అనుమతించు</translation>
+<translation id="1151917987301063366">సెన్సార్‌లను యాక్సెస్ చేయడానికి ఎల్లవేళలా <ph name="HOST" />ని అనుమతించండి</translation>
<translation id="1152181876167086799"><ph name="SITE_NAME" />‌ను చదివి, మార్చడానికి అన్ని ఎక్స్‌టెన్షన్‌లకు అనుమతినివ్వండి</translation>
<translation id="1152346050262092795">మీ ఖాతాను వెరిఫై చేయడానికి మీ పాస్‌వర్డ్‌ను మళ్లీ ఎంటర్ చేయండి.</translation>
<translation id="1153356358378277386">జత చేసిన పరికరాలు</translation>
@@ -187,13 +187,13 @@
<translation id="1173894706177603556">పేరుమార్చు</translation>
<translation id="1174073918202301297">షార్ట్‌కట్ జోడించబడింది</translation>
<translation id="1174366174291287894">Chrome మీకు మరొక విధంగా చెప్తే తప్ప మీ కనెక్షన్ ఎల్లప్పుడూ సురక్షితంగానే ఉంటుంది</translation>
-<translation id="117445914942805388">మీ అన్ని సమకాలీకరించబడుతున్న పరికరాలతో సహా, మీ Google ఖాతా నుండి బ్రౌజింగ్ డేటాను తీసివేయడానికి, <ph name="BEGIN_LINK" />సింక్‌ సెట్టింగ్‌లను సందర్శించండి<ph name="END_LINK" />.</translation>
+<translation id="117445914942805388">మీ అన్ని సింక్ చేయబడుతున్న పరికరాలతో సహా, మీ Google ఖాతా నుండి బ్రౌజింగ్ డేటాను తీసివేయడానికి, <ph name="BEGIN_LINK" />సింక్‌ సెట్టింగ్‌లను సందర్శించండి<ph name="END_LINK" />.</translation>
<translation id="1175364870820465910">&amp;ముద్రించు...</translation>
<translation id="1176471985365269981">మీ పరికరంలోని ఫైళ్లు లేదా ఫోల్డర్‌లను ఎడిట్ చేయడానికి అనుమతించబడలేదు</translation>
<translation id="1177863135347784049">అనుకూల</translation>
<translation id="1178581264944972037">పాజ్ చేయి</translation>
<translation id="117916940443676133">మీ 'సెక్యూరిటీ కీ'కి పిన్ రక్షణ లేదు. సైన్-ఇన్ డేటాను నిర్వహించడానికి, ముందు పిన్‌ను క్రియేట్ చేయండి.</translation>
-<translation id="1181037720776840403">తీసివేయి</translation>
+<translation id="1181037720776840403">తీసివేయండి</translation>
<translation id="1183237619868651138">స్థానిక కాష్‌లో <ph name="EXTERNAL_CRX_FILE" />ను ఇన్‌స్టాల్ చేయడం సాధ్యపడదు.</translation>
<translation id="1185924365081634987">మీరు ఈ నెట్‌వర్క్ ఎర్ర‌ర్‌ను పరిష్కరించడానికి <ph name="GUEST_SIGNIN_LINK_START" />అతిథిగా బ్రౌజ్ చేయడాన్ని<ph name="GUEST_SIGNIN_LINK_END" /> కూడా ప్రయత్నించవచ్చు.</translation>
<translation id="1186771945450942097">హానికరమైన సాఫ్ట్‌వేర్‌ని తీసివేయండి</translation>
@@ -211,7 +211,7 @@
<translation id="1197088940767939838">నారింజ రంగు</translation>
<translation id="1197199342062592414">ప్రారంభించండి</translation>
<translation id="1197935538609051549">డీయాక్టివేట్ చేయండి</translation>
-<translation id="119944043368869598">అన్ని క్లియర్ చేయి</translation>
+<translation id="119944043368869598">అన్ని క్లియర్ చేయండి</translation>
<translation id="1199814941632954229">ఈ సర్టిఫికెట్ ప్రొఫైల్‌లకు సర్టిఫికెట్‌లు అందించబడుతాయి</translation>
<translation id="120069043972472860">చూడదగినది కాదు</translation>
<translation id="1201402288615127009">తరువాత</translation>
@@ -267,7 +267,7 @@
<translation id="1254593899333212300">ప్రత్యక్ష ఇంటర్నెట్ కనెక్షన్</translation>
<translation id="1258491128795710625">కొత్తగా ఏమి ఉన్నాయి</translation>
<translation id="1259152067760398571">భద్రతా తనిఖీ నిన్న రన్ చేయబడింది</translation>
-<translation id="1260451001046713751"><ph name="HOST" /> నుండి ఎల్లప్పుడూ పాప్-అప్‌లు మరియు మళ్ళింపులను అనుమతించు</translation>
+<translation id="1260451001046713751"><ph name="HOST" /> నుండి ఎల్లప్పుడూ పాప్-అప్‌లు మరియు మళ్ళింపులను అనుమతించండి</translation>
<translation id="1260810365552581339">Linux తగినంత డిస్క్ స్పేస్‌ను కలిగి ఉండకపోవచ్చు. మీ Linux డిస్క్ స్పేస్‌ను మీరు పెంచుకొని, <ph name="LINK_START" />సెట్టింగ్‌లలో<ph name="LINK_END" /> తిరిగి రీస్టోర్ చేయడానికి ట్రై చేయవచ్చు.</translation>
<translation id="1261380933454402672">మధ్యస్థం</translation>
<translation id="126156426083987769">డెమో మోడ్ పరికర లైసెన్స్‌లకు సంబంధించి ఒక సమస్య ఏర్పడింది.</translation>
@@ -288,7 +288,7 @@
<translation id="1277020343994096713">మీ ప్రస్తుత PINకు భిన్నంగా ఉన్న ఒక కొత్త PINను క్రియేట్ చేయండి</translation>
<translation id="1278859221870828664">Google Play యాప్‌లు, సర్వీస్‌లను రివ్యూ చేయండి</translation>
<translation id="127946606521051357">సమీపంలోని పరికరం షేర్ చేస్తోంది</translation>
-<translation id="1280965841156951489">ఎడిటింగ్‌ను అనుమతించు</translation>
+<translation id="1280965841156951489">ఎడిటింగ్‌ను అనుమతించండి</translation>
<translation id="1282465000333679776">సిస్టమ్ ఆడియోను షేర్ చేయండి</translation>
<translation id="1285320974508926690">ఈ సైట్‌ను ఎప్పటికీ అనువదించవద్దు</translation>
<translation id="1285484354230578868">మీ Google Drive ఖాతాలో డేటాను నిల్వ చేయండి</translation>
@@ -305,7 +305,7 @@
<translation id="1297175357211070620">గమ్యం</translation>
<translation id="129770436432446029"><ph name="EXPERIMENT_NAME" />‌పై మీ ఫీడ్‌బ్యాక్‌ను పంపండి</translation>
<translation id="1301135395320604080"><ph name="ORIGIN" /> కింది ఫైళ్లను సవరించగలదు</translation>
-<translation id="1302227299132585524">Apple ఈవెంట్‌ల నుండి JavaScriptని అనుమతించు</translation>
+<translation id="1302227299132585524">Apple ఈవెంట్‌ల నుండి JavaScriptని అనుమతించండి</translation>
<translation id="1303101771013849280">HTML ఫైల్‌ని బుక్‌మార్క్ చేస్తుంది</translation>
<translation id="1303671224831497365">బ్లూటూత్ పరికరాలు ఏవీ కనుగొనబడలేదు</translation>
<translation id="130491383855577612">Linux యాప్‌లు, ఫైళ్లు విజయంతంగా భర్తీ చేయబడ్డాయి</translation>
@@ -363,7 +363,7 @@
<translation id="1361164813881551742">మాన్యువల్‌గా జోడించండి</translation>
<translation id="1361655923249334273">ఉపయోగించనిది</translation>
<translation id="1361872463926621533">ప్రారంభంలో ధ్వనిని ప్లే చేయండి</translation>
-<translation id="1362865166188278099">మెషీన్‌లో సమస్య. ప్రింటర్‌ను తనిఖీ చేయండి</translation>
+<translation id="1362865166188278099">మెషీన్‌లో సమస్య. ప్రింటర్‌ను చెక్ చేయండి</translation>
<translation id="1363585519747660921">USB ప్రింటర్ కోసం తప్పక కాన్ఫిగర్ చేయాలి</translation>
<translation id="1367951781824006909">ఒక ఫైల్‌ని ఎంచుకోండి</translation>
<translation id="1369149969991017342">స్విచ్ యాక్సెస్ (కేవలం ఒకటి లేదా రెండు స్విచ్‌లతో కంప్యూటర్‌ను నియంత్రించండి)</translation>
@@ -406,8 +406,8 @@
<translation id="1407069428457324124">ముదురు రూపం</translation>
<translation id="1407135791313364759">అన్నీ తెరువు</translation>
<translation id="140723521119632973">సెల్యులార్ యాక్టివేషన్</translation>
-<translation id="1407489512183974736">మధ్యకు కత్తిరించు</translation>
-<translation id="1408504635543854729">ఫైల్స్ యాప్‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. కంటెంట్‌ను నిర్వాహకులు పరిమితం చేశారు మరియు దాన్ని సవరించడం సాధ్యపడదు.</translation>
+<translation id="1407489512183974736">మధ్యకు కత్తిరించండి</translation>
+<translation id="1408504635543854729">ఫైల్స్ యాప్‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. కంటెంట్‌ను నిర్వాహకులు పరిమితం చేశారు మరియు దాన్ని ఎడిట్ చేయడం సాధ్యపడదు.</translation>
<translation id="1408980562518920698">వ్యక్తిగత సమాచారాన్ని నిర్వహించండి</translation>
<translation id="1410197035576869800">యాప్ చిహ్నం</translation>
<translation id="1410616244180625362">మీ కెమెరాను యాక్సెస్ చేయడానికి <ph name="HOST" />కు అనుమతిని కొనసాగించండి</translation>
@@ -471,7 +471,7 @@
<translation id="1459693405370120464">వాతావరణం</translation>
<translation id="146000042969587795">ఈ ఫ్రేమ్‌లో అసురక్షిత కంటెంట్ ఉండటం వల్ల, అది బ్లాక్ చేయబడింది.</translation>
<translation id="146219525117638703">ONC స్థితి</translation>
-<translation id="146220085323579959">ఇంటర్నెట్ డిస్‌కనెక్ట్ చేయబడింది. దయచేసి మీ ఇంటర్నెట్ కనెక్షన్‌ని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="146220085323579959">ఇంటర్నెట్ డిస్‌కనెక్ట్ చేయబడింది. దయచేసి మీ ఇంటర్నెట్ కనెక్షన్‌ని చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="1462850958694534228">చిహ్నానికి సంబంధించిన అప్‌డేట్‌ను రివ్యూ చేయండి</translation>
<translation id="1463112138205428654">అధునాతన రక్షణ ప్రోగ్రామ్ ద్వారా <ph name="FILE_NAME" /> బ్లాక్ చేయబడింది.</translation>
<translation id="1464044141348608623">మీరు మీ పరికరాన్ని యాక్టివ్‌గా ఉపయోగించే సమయాలను తెలుసుకోవడానికి సైట్‌లను అనుమతించకండి</translation>
@@ -497,12 +497,12 @@
<translation id="1480571698637441426">మీరు ప్రశ్నలు అడిగినప్పుడు అనుకూలమైన సమాధానాలను పొందడానికి, మీ స్క్రీన్‌పై ఉన్న దాని స్క్రీన్‌షాట్‌ను యాక్సెస్ చేయడానికి మీ Assistantను అనుమతించండి. ఇందులో ప్లే అవుతున్న పాటలు లేదా వీడియోల గురించి సమాచారం కూడా ఉండవచ్చు.</translation>
<translation id="1480663089572535854">"తర్వాత" కోసం అసైన్ చేసిన స్విచ్‌ను మార్చడానికి మీరు వెనుకకు వెళ్లచ్చు. మీరు సెట్టింగ్‌లలో ఎప్పుడైనా ఆటో-స్కాన్‌ను ఆఫ్ చేయవచ్చు.</translation>
<translation id="1481537595330271162">డిస్క్ పరిమాణాన్ని మార్చడంలో ఎర్రర్ ఏర్పడింది</translation>
-<translation id="1482626744466814421">ఈ ట్యాబ్‌ను బుక్‌మార్క్ చేయి...</translation>
+<translation id="1482626744466814421">ఈ ట్యాబ్‌ను బుక్‌మార్క్ చేయండి...</translation>
<translation id="1483493594462132177">పంపు</translation>
<translation id="1484979925941077974">బ్లూటూత్‌ను సైట్ ఉపయోగిస్తోంది</translation>
<translation id="1485015260175968628">ఇప్పుడు ఇది వీటిని చేయగలదు:</translation>
<translation id="1485141095922496924">వెర్షన్ <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
-<translation id="1486096554574027028">పాస్‌వర్డ్‌లను వెతుకు</translation>
+<translation id="1486096554574027028">పాస్‌వర్డ్‌లను వెతకండి</translation>
<translation id="1487335504823219454">ఆన్ - అనుకూల సెట్టింగ్‌లు</translation>
<translation id="1489664337021920575">మరొక ఎంపికను ఎంచుకోండి</translation>
<translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> కోసం వేచి ఉంది...</translation>
@@ -510,7 +510,7 @@
<translation id="1495677929897281669">తిరిగి ట్యాబ్‌కు వెళ్లు</translation>
<translation id="1500297251995790841">తెలియని పరికరం [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation>
<translation id="1503881256180274819">సపోర్ట్ లేని Chrome యాప్‌ల గురించి మరింత తెలుసుకోండి</translation>
-<translation id="150411034776756821"><ph name="SITE" />ని తీసివేయి</translation>
+<translation id="150411034776756821"><ph name="SITE" />ని తీసివేయండి</translation>
<translation id="1504551620756424144">Windowsలో <ph name="BASE_DIR" />లో షేర్ చేసిన ఫోల్డర్‌లు అందుబాటులో ఉన్నాయి.</translation>
<translation id="1506061864768559482">సెర్చ్ ఇంజిన్</translation>
<translation id="1507170440449692343">ఈ పేజీ మీ కెమెరాను యాక్సెస్‌ చేయకుండా బ్లాక్ చేయబడింది.</translation>
@@ -520,7 +520,7 @@
<translation id="1509281256533087115">ఏ <ph name="DEVICE_NAME_AND_VENDOR" />ని అయినా USB ద్వారా యాక్సెస్ చేయడానికి అనుమతి</translation>
<translation id="1510238584712386396">లాంచర్</translation>
<translation id="1510785804673676069">మీరు ప్రాక్సీ సర్వర్‌ను ఉపయోగిస్తుంటే, ప్రాక్సీ సర్వర్ పని చేస్తోందని
- తనిఖీ చేయడానికి మీ ప్రాక్సీ సెట్టింగ్‌లను తనిఖీ చేయండి లేదా మీ నెట్‌వర్క్
+ చెక్ చేయడానికి మీ ప్రాక్సీ సెట్టింగ్‌లను చెక్ చేయండి లేదా మీ నెట్‌వర్క్
నిర్వాహకుడిని సంప్రదించండి. మీరు ప్రాక్సీ సర్వర్‌ను ఉపయోగిస్తున్నారని
విశ్వసించకుంటే, మీ <ph name="LINK_START" />ప్రాక్సీ సెట్టింగ్‌ల<ph name="LINK_END" />ను సర్దుబాటు చేయండి.</translation>
<translation id="1511997356770098059">ఈ 'సెక్యూరిటీ కీ'లో సైన్-ఇన్ డేటా ఏదీ నిల్వ చేయబడదు</translation>
@@ -530,7 +530,7 @@
<translation id="1515163294334130951">ప్రారంభించండి</translation>
<translation id="1521442365706402292">సర్టిఫికెట్‌లను మేనేజ్ చేయండి</translation>
<translation id="1521774566618522728">ఈ రోజు యాక్టివ్‌గా ఉంది</translation>
-<translation id="152234381334907219">ఎప్పటికి సేవ్ చెయ్యబడవు</translation>
+<translation id="152234381334907219">ఎప్పటికి సేవ్ చేయబడవు</translation>
<translation id="1523279371236772909">గత నెలలో చూశారు</translation>
<translation id="1523978563989812243">టెక్ట్స్-టు-స్పీచ్ ఇంజిన్‌లు</translation>
<translation id="1524430321211440688">కీబోర్డ్</translation>
@@ -639,7 +639,7 @@
<translation id="1615433306336820465">మీ సెక్యూరిటీ కీలో స్టోర్ చేసి ఉన్న సైన్-ఇన్ డేటాను మేనేజ్ చేయండి</translation>
<translation id="1616206807336925449">ఈ ఎక్స్‌టెన్షన్‌కు ప్రత్యేక అనుమతులు ఏవీ అవసరం లేదు.</translation>
<translation id="1616298854599875024">ఇది షేర్ చేసిన మాడ్యూల్ కానందున ఎక్స్‌టెన్షన్ "<ph name="IMPORT_NAME" />"ను దిగుమతి చేయడం సాధ్యపడలేదు</translation>
-<translation id="1617765145568323981">{NUM_FILES,plural, =0{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ డేటాను తనిఖీ చేస్తోంది...}=1{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ ఫైల్‌ను తనిఖీ చేస్తోంది...}other{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ ఫైల్స్‌ను తనిఖీ చేస్తోంది...}}</translation>
+<translation id="1617765145568323981">{NUM_FILES,plural, =0{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ డేటాను చెక్ చేస్తోంది...}=1{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ ఫైల్‌ను చెక్ చేస్తోంది...}other{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ ఫైల్స్‌ను చెక్ చేస్తోంది...}}</translation>
<translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation>
<translation id="1618268899808219593">స&amp;హాయ కేంద్రం</translation>
<translation id="1619879934359211038">Google Playకు కనెక్ట్ చేయడం సాధ్యపడలేదు. మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసి, మళ్లీ ట్రై చేయండి. ఎర్రర్ కోడ్: <ph name="ERROR_CODE" />.</translation>
@@ -665,7 +665,7 @@
<translation id="1630768113285622200">రీస్టార్ట్ చేసి, కొనసాగించు</translation>
<translation id="1632082166874334883">మీ Google ఖాతాలో పాస్‌వర్డ్ స్టోర్ చేయబడింది</translation>
<translation id="1632756664321977232">కత్తిరింపు టూల్</translation>
-<translation id="1632803087685957583">మీ కీబోర్డ్ పునరావృత రేటు, పద సూచన మొదలైనవి సర్దుబాటు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది</translation>
+<translation id="1632803087685957583">మీ కీబోర్డ్ రిపీట్ రేటు, పద సూచన మొదలైనవి సర్దుబాటు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది</translation>
<translation id="163309982320328737">ప్రారంభ అక్షరం వెడల్పు నిండింది</translation>
<translation id="1633947793238301227">Google Assistantను డిజేబుల్ చేయండి</translation>
<translation id="1634783886312010422">మీరు ఇప్పటికే ఈ పాస్‌వర్డ్‌ను <ph name="WEBSITE" />లో మార్చారా?</translation>
@@ -725,7 +725,7 @@
<translation id="168511795252678620">తాజా ఫోటోలు, మెసేజింగ్ యాప్‌లు</translation>
<translation id="1686550358074589746">'పదం పూర్తయ్యేదాకా వేలిని తీసివేయకుండా టైప్ చేయడం'ను ఎనేబుల్ చేయండి</translation>
<translation id="168715261339224929">మీ బుక్‌మార్క్‌లను మీ అన్ని పరికరాలలోనూ పొందాలంటే, సింక్‌ను ఆన్ చేయండి.</translation>
-<translation id="1688867105868176567">సైట్ డేటాని క్లియర్ చేయాలా?</translation>
+<translation id="1688867105868176567">సైట్ డేటాను క్లియర్ చేయాలా?</translation>
<translation id="1688935057616748272">అక్షరాన్ని టైప్ చేయండి</translation>
<translation id="168991973552362966">సమీపంలోని ప్రింటర్‌ను జోడించండి</translation>
<translation id="1689945336726856614">&amp;URLను కాపీ చేయండి</translation>
@@ -736,7 +736,7 @@
<translation id="1695510246756136088">ఇంటర్నెట్‌కు కనెక్ట్ చేయడం సాధ్యపడదు. మళ్లీ ట్రై చేయండి.</translation>
<translation id="169675691788639886">పరికరానికి SSH సర్వర్ కాన్ఫిగ‌ర్ చేయబడింది. గోప్యమైన ఖాతాలతో సైన్ ఇన్ చేయవద్దు.</translation>
<translation id="1697150536837697295">కళ</translation>
-<translation id="1697686431566694143">ఎడిటింగ్‌ను అనుమతించు</translation>
+<translation id="1697686431566694143">ఎడిటింగ్‌ను అనుమతించండి</translation>
<translation id="1700079447639026019">కుక్కీలను ఉపయోగించే అనుమతి ఎప్పటికీ లేని సైట్‌లు</translation>
<translation id="1700201317341192482">మీ వర్చువల్ కార్డ్‌ను తీసివేయండి</translation>
<translation id="1703331064825191675">మీ పాస్‌వర్డ్‌ల గురించి ఎప్పుడూ చింతించకండి</translation>
@@ -817,7 +817,7 @@
<translation id="1766957085594317166">పాస్‌వర్డ్‌లను మీ Google ఖాతాలో సురక్షితంగా సేవ్ చేయండి, మీరు ఇంకెప్పుడూ మళ్లీ టైప్ చేయవలసిన అవసరం ఉండదు</translation>
<translation id="1767043563165955993">Android యాప్‌లతో ఉపయోగించండి</translation>
<translation id="1768212860412467516"><ph name="EXPERIMENT_NAME" /> కోసం ఫీడ్‌బ్యాక్‌ను పంపండి.</translation>
-<translation id="1768278914020124551">అయ్యో! లాగాన్ సర్వర్‌ను సంప్రదించడంలో సమస్య ఉంది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను మరియు డొమైన్ పేరును తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="1768278914020124551">అయ్యో! లాగాన్ సర్వర్‌ను సంప్రదించడంలో సమస్య ఉంది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను మరియు డొమైన్ పేరును చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="1769104665586091481">లింక్‌ను కొత్త &amp;విండోలో తెరువు</translation>
<translation id="177053719077591686">Google Driveకు Android యాప్‌లను బ్యాకప్ చేయండి.</translation>
<translation id="177336675152937177">హోస్ట్ చేసిన యాప్‌ డేటా</translation>
@@ -842,7 +842,7 @@
<translation id="1784849162047402014">పరికరంలో ఖాళీ నిల్వ స్థలం తక్కువగా ఉంది</translation>
<translation id="1787350673646245458">యూజర్ చిత్రం</translation>
<translation id="1788329699711791226">మీ Chrome బ్రౌజర్‌లోని డేటాను <ph name="ACCOUNT_EMAIL" /> నుండి యాక్సెస్ చేయండి</translation>
-<translation id="1790976235243700817">యాక్సెస్‌ను తీసివేయి</translation>
+<translation id="1790976235243700817">యాక్సెస్‌ను తీసివేయండి</translation>
<translation id="1791662854739702043">వ్యవస్థాపించబడింది</translation>
<translation id="1792619191750875668">విస్తారిత డిస్‌ప్లే</translation>
<translation id="1794051631868188691"><ph name="MERCHANT" />ను ఎప్పుడూ చూపవద్దు</translation>
@@ -870,7 +870,7 @@
<translation id="1810366086647840386">ఇమేజ్ సర్వర్</translation>
<translation id="1813278315230285598">సేవలు</translation>
<translation id="18139523105317219">EDI వేడుక పేరు</translation>
-<translation id="1815083418640426271">సాదా వచనం లాగా అతికించు</translation>
+<translation id="1815083418640426271">సాదా వచనం లాగా పేస్ట్ చేయండి</translation>
<translation id="1815181278146012280">HID పరికరాలను సైట్ యాక్సెస్ చేయాలనుకున్నప్పుడు అడుగు</translation>
<translation id="181577467034453336">మరో <ph name="NUMBER_OF_VIEWS" />...</translation>
<translation id="1816036116994822943">కీబోర్డ్ స్కానింగ్ వేగం</translation>
@@ -885,11 +885,11 @@
<translation id="18245044880483936">బ్యాకప్ డేటా మీ చిన్నారి డిస్క్ స్టోరేజ్ కోటాలో లెక్కించబడదు.</translation>
<translation id="1825565032302550710">పోర్ట్ 1024, 65535 మధ్య ఉండాలి</translation>
<translation id="1826192255355608658">మీ Chrome బ్రౌజర్ బుక్‌మార్క్‌లు, పాస్‌వర్డ్‌‌లు, హిస్టరీ, ఇంకా మరిన్నింటిని సింక్ చేయండి</translation>
-<translation id="1826516787628120939">తనిఖీ చేస్తోంది</translation>
+<translation id="1826516787628120939">చెక్ చేస్తోంది</translation>
<translation id="1827738518074806965">చిత్రకళా గ్యాలరీ</translation>
<translation id="1828378091493947763">ఈ పరికరంలో ఈ ప్లగిన్‌కు మద్దతు లేదు</translation>
<translation id="1828879788654007962">{COUNT,plural, =0{అన్నింటినీ &amp;తెరువు}=1{బుక్‌మార్క్‌ను &amp;తెరువు}other{అన్నింటినీ ({COUNT}) &amp;తెరువు}}</translation>
-<translation id="1828901632669367785">సిస్టమ్ డైలాగ్‌ను ఉపయోగించి ముద్రించు...</translation>
+<translation id="1828901632669367785">సిస్టమ్ డైలాగ్‌ను ఉపయోగించి ప్రింట్ చేయండి...</translation>
<translation id="1829129547161959350">పెంగ్విన్</translation>
<translation id="1829192082282182671">&amp;దూరంగా జూమ్ చేయి</translation>
<translation id="1830550083491357902">సైన్ ఇన్ చేయలేదు</translation>
@@ -898,7 +898,7 @@
<translation id="1832848789136765277">మీ సింక్ చేసిన డేటాను మీరు ఎల్లప్పుడూ యాక్సెస్ చేయగలరని నిర్ధారించుకోవడానికి, అది మీరేనని వెరిఫై చేయండి</translation>
<translation id="1834503245783133039">డౌన్‌లోడ్ విజయవంతం కాలేదు: <ph name="FILE_NAME" /></translation>
<translation id="1835261175655098052">Linux‌ను అప్‌గ్రేడ్ చేయడం</translation>
-<translation id="1838374766361614909">శోధనను తీసివేయి</translation>
+<translation id="1838374766361614909">శోధనను తీసివేయండి</translation>
<translation id="1839021455997460752">మీ ఈమెయిల్ అడ్రస్</translation>
<translation id="1839540115464516994"><ph name="LOCATION" />‌లో చూపించండి</translation>
<translation id="1841616161104323629">పరికర రికార్డ్ కనుగొనబడటం లేదు.</translation>
@@ -1035,11 +1035,11 @@
<translation id="1974060860693918893">అధునాతన సెట్టింగ్‌లు</translation>
<translation id="1974159333077206889">అన్ని స్పీకర్‌లతోనూ ఒకేలాంటి ఆడియో</translation>
<translation id="1974821797477522211">నెట్‌వర్క్‌కి కనెక్ట్ చేయండి</translation>
-<translation id="1975841812214822307">తీసివేయి...</translation>
+<translation id="1975841812214822307">తీసివేయండి...</translation>
<translation id="1976150099241323601">భద్రతా పరికరానికి సైన్ ఇన్ చేయండి</translation>
<translation id="1976928778492259496">వేలిముద్ర సెన్సార్ మీ <ph name="DEVICE_TYPE" />కు ఎడమ వైపున ఉంది ఏదైనా వేలితో దాన్ని తేలికగా టచ్ చేయండి.</translation>
<translation id="1977965994116744507">మీ <ph name="DEVICE_TYPE" />ను అన్‌లాక్ చేయడానికి మీ ఫోన్‌ను సమీపంలోకి తీసుకురండి.</translation>
-<translation id="1978057560491495741">అడ్రస్‌ను తీసివేయి</translation>
+<translation id="1978057560491495741">అడ్రస్‌ను తీసివేయండి</translation>
<translation id="1979095679518582070">ఈ ఫీచర్‌ను ఆఫ్ చేయడం వలన సిస్టమ్ అప్‌డేట్‌లు, భద్రత లాంటి ముఖ్యమైన సర్వీస్‌లకు అవసరమైన సమాచారాన్ని పంపగల ఈ పరికర సామర్థ్యం ప్రభావితం కాదు.</translation>
<translation id="1979280758666859181">మీరు <ph name="PRODUCT_NAME" /> పాత వెర్షన్ ఉన్న ఛానెల్‌కు మారుతున్నారు. ఈ ఛానెల్ వెర్షన్, మీ పరికరంలో ప్రస్తుతం ఇన్‌స్టాల్ అయిన వెర్షన్‌కు సరిపోలినప్పుడు ఛానెల్ మార్పు వర్తిస్తుంది.</translation>
<translation id="197989455406964291">ఎన్‌క్రిప్షన్ రకానికి KDC మద్దతు లేదు</translation>
@@ -1054,7 +1054,7 @@
<translation id="1990727803345673966">బ్యాకప్ చేసిన మీ Linux ఫైల్స్, యాప్‌లు రీస్టోర్ చేయబడుతున్నాయి</translation>
<translation id="199191324030140441">'అంతరాయం కలిగించవద్దు'ను ఆఫ్ చేయండి</translation>
<translation id="1992397118740194946">సెట్ చెయ్యలేదు</translation>
-<translation id="1992924914582925289">పరికరం నుండి తీసివేయి</translation>
+<translation id="1992924914582925289">పరికరం నుండి తీసివేయండి</translation>
<translation id="1994173015038366702">సైట్ URL</translation>
<translation id="1995916364271252349">సైట్‌లు ఉపయోగించగల సమాచారాన్ని, అవి చూపగల కంటెంట్‌ను (లొకేషన్, కెమెరా, పాప్-అప్‌లు, మరిన్ని) నియంత్రిస్తుంది</translation>
<translation id="1997616988432401742">మీ ప్రమాణపత్రాలు</translation>
@@ -1095,7 +1095,7 @@
మీ పరికరంలో Family Link యాప్ ఇన్‌స్టాల్ చేయడం ద్వారా మీరు ఈ ఖాతా సెట్టింగ్‌లను నిర్వహించవచ్చు. మీకు ఈమెయిల్‌లో సూచనలను పంపాము.</translation>
<translation id="2039464276165755892">వేరొకరిని గుర్తించినప్పుడు, నోటిఫికేషన్ కంటెంట్‌ను దాచండి</translation>
-<translation id="2040460856718599782">అయ్యో! మిమ్మల్ని ప్రామాణీకరించడానికి ప్రయత్నిస్తున్నప్పుడు ఏదో తప్పు జరిగింది. దయచేసి మీ సైన్-ఇన్ ప్రమాణాలను ఒకటికి రెండుసార్లు తనిఖీ చేసుకుని మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="2040460856718599782">అయ్యో! మిమ్మల్ని ప్రామాణీకరించడానికి ప్రయత్నిస్తున్నప్పుడు ఏదో తప్పు జరిగింది. దయచేసి మీ సైన్-ఇన్ ప్రమాణాలను ఒకటికి రెండుసార్లు చెక్ చేసుకుని మళ్లీ ప్రయత్నించండి.</translation>
<translation id="2040894699575719559">లొకేషన్ బ్లాక్ చేయబడింది</translation>
<translation id="2042279886444479655">యాక్టివ్ ప్రొఫైళ్లు</translation>
<translation id="2044014337866019681">సెషన్‌ను అన్‌లాక్ చేయడానికి, మీరు <ph name="ACCOUNT" />ను వెరిఫై చేస్తున్నారని దయచేసి నిర్ధారించుకోండి.</translation>
@@ -1105,7 +1105,7 @@
<translation id="204622017488417136">మీ పరికరం మునుపు ఇన్‌స్టాల్ చేసిన Chrome వెర్షన్‌కు తిరిగి మార్చబడింది. అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడుతుంది. దీన్ని రద్దు చేయడం సాధ్యపడదు.</translation>
<translation id="2046702855113914483">రామెన్</translation>
<translation id="2046770133657639077">పరికర EIDని చూపండి</translation>
-<translation id="204706822916043810">వర్చువల్ మెషిన్‌ను తనిఖీ చేస్తోంది</translation>
+<translation id="204706822916043810">వర్చువల్ మెషిన్‌ను చెక్ చేస్తోంది</translation>
<translation id="2048182445208425546">మీ నెట్‌వర్క్ ట్రాఫిక్‌ను యాక్సెస్ చేయండి</translation>
<translation id="2048554637254265991">కంటైనర్ మేనేజర్‌ను ప్రారంభించడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ట్రై చేయండి.</translation>
<translation id="2048653237708779538">చర్య అందుబాటులో లేదు</translation>
@@ -1152,7 +1152,7 @@
<ph name="BR" />
మీరు మీ పరికరంలో అనుకూల కోడ్‌ను ఇన్‌స్టాల్ చేసి, టెస్ట్ చేయడానికి మీ ChromeOS పరికరంలో డీబగ్గింగ్ ఫీచర్‌లను ఎనేబుల్ చేయవచ్చు. ఇది వీటిని చేయడానికి మిమ్మల్ని అనుమతిస్తుంది:<ph name="BR" />
<ph name="BEGIN_LIST" />
- <ph name="LIST_ITEM" />rootfs వెరిఫికేషన్‌ను తీసివేయడానికి, తద్వారా మీరు OS ఫైల్స్‌ను సవరించవచ్చు
+ <ph name="LIST_ITEM" />rootfs వెరిఫికేషన్‌ను తీసివేయడానికి, తద్వారా మీరు OS ఫైల్స్‌ను ఎడిట్ చేయవచ్చు
<ph name="LIST_ITEM" />స్టాండర్డ్ టెస్ట్ 'కీ'లను ఉపయోగించి పరికరానికి SSH యాక్సెస్‌ను ఎనేబుల్ చేయడానికి, తద్వారా మీరు పరికరాన్ని యాక్సెస్ చేయడానికి <ph name="BEGIN_CODE" />'cros flash'<ph name="END_CODE" /> వంటి టూల్స్‌ను ఉపయోగించవచ్చు
<ph name="LIST_ITEM" />USB నుండి బూట్ చేయడాన్ని ఎనేబుల్ చేయడానికి, తద్వారా మీరు USB డిస్క్ నుండి OS ఇమేజ్‌ను ఇన్‌స్టాల్ చేయవచ్చు
<ph name="LIST_ITEM" />డెవలపర్ అలాగే సిస్టమ్ రూట్ లాగిన్ పాస్‌వర్డ్ రెండింటినీ అనుకూల విలువకు సెట్ చేయడానికి, తద్వారా మీరు పరికరంలోకి మాన్యువల్‌గా SSH చేయవచ్చు
@@ -1168,7 +1168,7 @@
<ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" /> ప్రాసెస్ సమయంలో సిస్టమ్ రీబూట్ అవుతుంది.</translation>
<translation id="2095774564753225041">సపోర్ట్ ఉన్న ఫైల్ రకాలు</translation>
<translation id="2096715839409389970">మూడవ పక్షం కుక్కీలను తొలగించు</translation>
-<translation id="2098805196501063469">మిగిలిన పాస్‌వర్డ్‌లను తనిఖీ చేయండి</translation>
+<translation id="2098805196501063469">మిగిలిన పాస్‌వర్డ్‌లను చెక్ చేయండి</translation>
<translation id="2099686503067610784">సర్వర్ ప్రమాణపత్రం "<ph name="CERTIFICATE_NAME" />" తొలగించాలా?</translation>
<translation id="2100273922101894616">ఆటోమేటిక్ సైన్-ఇన్</translation>
<translation id="2101225219012730419">వెర్షన్:</translation>
@@ -1176,12 +1176,12 @@
<translation id="2102495993840063010">Android యాప్‌లు</translation>
<translation id="2105809836724866556"><ph name="MODULE_TITLE" /> దాచబడ్డాయి</translation>
<translation id="2108349519800154983">{COUNT,plural, =1{ఫోన్ నంబర్}other{# ఫోన్ నంబర్‌లు}}</translation>
-<translation id="211144231511833662">రకాలను క్లియర్ చేయి</translation>
+<translation id="211144231511833662">రకాలను క్లియర్ చేయండి</translation>
<translation id="2111670510994270194">కుడివైపున కొత్త ట్యాబ్</translation>
<translation id="2112554630428445878">స్వాగతం, <ph name="USERNAME" /></translation>
<translation id="21133533946938348">ట్యాబ్‌ను పిన్ చేయి</translation>
<translation id="2113479184312716848">ఫైల్‌ను &amp;తెరువు...</translation>
-<translation id="2113921862428609753">అధికార సమాచార ప్రాప్తి</translation>
+<translation id="2113921862428609753">అధికార సమాచార యాక్సెస్‌</translation>
<translation id="2114326799768592691">&amp;ఫ్రేమ్‌ను మళ్లీ లోడ్ చేయి</translation>
<translation id="2114413269775311385">Android యాప్‌లతో ఈ ఖాతాను ఉపయోగించండి. మీరు Android యాప్‌లకు అనుమతులను <ph name="LINK_BEGIN" />యాప్‌ల సెట్టింగ్‌లు<ph name="LINK_END" /> లింక్‌లో కంట్రోల్ చేయవచ్చు.</translation>
<translation id="2114820389966440614">"ఇటీవలి హైలైట్‌లు" అలాగే ఇతర మెమరీలను ఇక్కడ చూడండి</translation>
@@ -1234,7 +1234,7 @@
<translation id="2156294658807918600">సర్వీస్ వర్కర్: <ph name="SCRIPT_URL" /></translation>
<translation id="2156877321344104010">భద్రతా తనిఖీని మళ్లీ రన్ చేయండి</translation>
<translation id="2157474325782140681">ఈ Chromebookకు అనుగుణంగా పని చేయడానికి రూపొందించబడిన డెల్ డాకింగ్ స్టేషన్‌ను ఉపయోగించి, అదనపు ఫీచర్‌లను పొందండి.</translation>
-<translation id="215753907730220065">ఫుల్-స్క్రీన్‌ను నిష్క్రమించు</translation>
+<translation id="215753907730220065">ఫుల్-స్క్రీన్‌ను నిష్క్రమించండి</translation>
<translation id="2157875535253991059">ఈ పేజీ ఇప్పుడు ఫుల్-స్క్రీన్‌లో ఉంది.</translation>
<translation id="2158475082070321257">హైలైట్ చేసిన టెక్స్ట్‌కు లింక్‌ను కాపీ చేయండి</translation>
<translation id="2159488579268505102">USB-C</translation>
@@ -1248,11 +1248,11 @@
<translation id="2165177462441582039">ప్రతి ఐటెమ్ ఎంత సమయం హైలైట్‌గా ఉండాలో ఎంచుకోండి</translation>
<translation id="2166369534954157698">దేశ భాషలందు తెలుగు లెస్స</translation>
<translation id="2169062631698640254">ఏదేమైనా సైన్ ఇన్ చేయండి</translation>
-<translation id="2173302385160625112">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి</translation>
+<translation id="2173302385160625112">మీ ఇంటర్నెట్ కనెక్షన్‌ను చెక్ చేయండి</translation>
<translation id="2173801458090845390">ఈ పరికరానికి రిక్వెస్ట్‌ IDని జోడించండి</translation>
<translation id="2175384018164129879">సెర్చ్ ఇంజిన్‌లను, సైట్ సెర్చ్‌ను &amp;మేనేజ్ చేయండి</translation>
<translation id="2175607476662778685">త్వరిత ప్రారంభ బార్</translation>
-<translation id="217576141146192373">ప్రింటర్‌ను జోడించడం సాధ్యపడలేదు. దయచేసి మీ ప్రింటర్ కాన్ఫిగరేషన్ తనిఖీ చేసుకుని, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="217576141146192373">ప్రింటర్‌ను జోడించడం సాధ్యపడలేదు. దయచేసి మీ ప్రింటర్ కాన్ఫిగరేషన్ చెక్ చేసుకుని, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
<translation id="2175927920773552910">QR కోడ్</translation>
<translation id="2177950615300672361">అజ్ఞాత ట్యాబ్: <ph name="TAB_NAME" /></translation>
<translation id="2178585470774851578">మీరు ChromeOS Flex డీబగ్గింగ్ ఫీచర్‌లను ఎనేబుల్ చేస్తున్నారు, ఇది sshd daemonను సెటప్ చేస్తుంది అలాగే USB డిస్క్‌ల నుండి బూట్ చేయడాన్ని ఎనేబుల్ చేస్తుంది.</translation>
@@ -1264,7 +1264,7 @@
<translation id="2186711480981247270">మరో పరికరం నుండి పేజీ షేర్ చేయబడింది</translation>
<translation id="2187675480456493911">మీ ఖాతాలోని ఇతర పరికరాలతో సింక్ చేయబడింది. ఇతర యూజర్‌ల చేత మార్చబడిన సెట్టింగ్‌లు సింక్ చేయబడవు. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
<translation id="2187895286714876935">సర్వర్ ప్రమాణపత్రం దిగుమతి ఎర్రర్</translation>
-<translation id="2187906491731510095">ఎక్స్‌టెన్షన్‌లు నవీకరించబడ్డాయి</translation>
+<translation id="2187906491731510095">ఎక్స్‌టెన్షన్‌లు అప్‌డేట్ చేయబడ్డాయి</translation>
<translation id="2188881192257509750"><ph name="APPLICATION" />ని తెరువు</translation>
<translation id="2189787291884708275">ట్యాబ్ ఆడియోను షేర్ చేయండి</translation>
<translation id="2190069059097339078">WiFi క్రెడెన్షియల్స్ గెట్టర్</translation>
@@ -1285,7 +1285,7 @@
<translation id="2204034823255629767">మీరు టైప్ చేసేదాన్ని చదవడం మరియు మార్చడం</translation>
<translation id="220858061631308971">దయచేసి ఈ PIN కోడ్‌ను "<ph name="DEVICE_NAME" />"లో నమోదు చేయండి:</translation>
<translation id="2210462644007531147">ఇన్‌స్టాలేషన్‌ను పూర్తి చేయడం సాధ్యపడలేదు</translation>
-<translation id="2212565012507486665">కుక్కీలను అనుమతించు</translation>
+<translation id="2212565012507486665">కుక్కీలను అనుమతించండి</translation>
<translation id="2214018885812055163">షేర్ చేసిన ఫోల్డర్‌లు</translation>
<translation id="2214884991347062907">పాస్‌వర్డ్ తప్పు, మళ్లీ ప్రయత్నించండి</translation>
<translation id="2214893006758804920">{LINE_COUNT,plural, =1{&lt;1 పంక్తి చూపబడలేదు&gt;}other{&lt;<ph name="NUMBER_OF_LINES" /> పంక్తులు చూపబడలేదు&gt;}}</translation>
@@ -1305,7 +1305,7 @@
<translation id="2226449515541314767">ఈ సైట్ MIDI పరికరాలకు పూర్తి నియంత్రణ లేకుండా బ్లాక్ చేయబడింది.</translation>
<translation id="2226826835915474236">ఇన్‌యాక్టివ్ షార్ట్‌కట్‌లు</translation>
<translation id="2226907662744526012">ఒకసారి పిన్ ఎంటర్ చేసిన తర్వాత ఆటోమేటిక్‌గా అన్‌లాక్ చేయి</translation>
-<translation id="2227179592712503583">సూచనను తీసివేయి</translation>
+<translation id="2227179592712503583">సూచనను తీసివేయండి</translation>
<translation id="2229161054156947610">1 గంట పైగా మిగిలి ఉంది</translation>
<translation id="222931766245975952">ఫైల్ కుదించబడింది</translation>
<translation id="2230005943220647148">సెల్సియస్</translation>
@@ -1329,7 +1329,7 @@
<translation id="2251218783371366160">సిస్టమ్ వ్యూయర్‌తో తెరువు</translation>
<translation id="225163402930830576">నెట్‌వర్క్‌లను రిఫ్రెష్ చేయి</translation>
<translation id="2251809247798634662">కొత్త అజ్ఞాత విండో</translation>
-<translation id="225240747099314620">రక్షిత కంటెంట్ కోసం ఐడెంటిఫైయర్‌లను అనుమతించు (కంప్యూటర్‌ను పునఃప్రారంభించాల్సి రావచ్చు)</translation>
+<translation id="225240747099314620">రక్షిత కంటెంట్ కోసం ఐడెంటిఫైయర్‌లను అనుమతించండి (కంప్యూటర్‌ను పునఃప్రారంభించాల్సి రావచ్చు)</translation>
<translation id="2255077166240162850">వేరే డొమైన్ లేదా మోడ్‌కు ఈ పరికరం లాక్ చేయబడింది.</translation>
<translation id="2255317897038918278">Microsoft Time Stamping</translation>
<translation id="2256115617011615191">ఇప్పుడే పునఃప్రారంభించు</translation>
@@ -1384,14 +1384,14 @@
<translation id="2299941608784654630">debugd ద్వారా సేకరించబడిన అన్ని లాగ్ ఫైళ్లను వేరుగా ఆర్కైవ్ లాగా చేర్చండి.</translation>
<translation id="2300214399009193026">PCIe</translation>
<translation id="2300332192655962933">సైట్‌లో ఫైల్ అందుబాటులో లేదు</translation>
-<translation id="2300383962156589922"><ph name="APP_NAME" />ను అనుకూలీకరించండి మరియు నియంత్రించండి</translation>
+<translation id="2300383962156589922"><ph name="APP_NAME" />ను అనుకూలంగా మార్చండి మరియు నియంత్రించండి</translation>
<translation id="2301382460326681002">ఎక్స్‌టెన్ష‌న్‌ మూలం డైరెక్టరీ చెల్లదు.</translation>
<translation id="2301402091755573488">షేర్ చేసిన ట్యాబ్</translation>
<translation id="2302342861452486996"><ph name="BEGIN_H3" />డీబగ్గింగ్ ఫీచర్‌లు<ph name="END_H3" />
<ph name="BR" />
మీరు మీ పరికరంలో అనుకూల కోడ్‌ను ఇన్‌స్టాల్ చేసి, టెస్ట్ చేయడానికి మీ ChromeOS Flex పరికరంలో డీబగ్గింగ్ ఫీచర్‌లను ఎనేబుల్ చేయవచ్చు. ఇది వీటిని చేయడానికి మిమ్మల్ని అనుమతిస్తుంది:<ph name="BR" />
<ph name="BEGIN_LIST" />
- <ph name="LIST_ITEM" />rootfs వెరిఫికేషన్‌ను తీసివేయడానికి, తద్వారా మీరు OS ఫైల్స్‌ను సవరించవచ్చు
+ <ph name="LIST_ITEM" />rootfs వెరిఫికేషన్‌ను తీసివేయడానికి, తద్వారా మీరు OS ఫైల్స్‌ను ఎడిట్ చేయవచ్చు
<ph name="LIST_ITEM" />స్టాండర్డ్ టెస్ట్ 'కీ'లను ఉపయోగించి పరికరానికి SSH యాక్సెస్‌ను ఎనేబుల్ చేయడానికి, తద్వారా మీరు పరికరాన్ని యాక్సెస్ చేయడానికి <ph name="BEGIN_CODE" />'cros flash'<ph name="END_CODE" /> వంటి టూల్స్‌ను ఉపయోగించవచ్చు
<ph name="LIST_ITEM" />USB నుండి బూట్ చేయడాన్ని ఎనేబుల్ చేయడానికి, తద్వారా మీరు USB డ్రైవర్ నుండి OS ఇమేజ్‌ను ఇన్‌స్టాల్ చేయవచ్చు
<ph name="LIST_ITEM" />డెవలపర్ అలాగే సిస్టమ్ రూట్ లాగిన్ పాస్‌వర్డ్ రెండింటినీ అనుకూల విలువకు సెట్ చేయడానికి, తద్వారా మీరు పరికరంలోకి మాన్యువల్‌గా SSH చేయవచ్చు
@@ -1454,7 +1454,7 @@
<translation id="233471714539944337">గోప్యమైన కంటెంట్</translation>
<translation id="2335111415680198280">{0,plural, =1{# విండోను మూసివేయి}other{# విండోలను మూసివేయి}}</translation>
<translation id="2335122562899522968">ఈ పేజీ కుక్కీలను సెట్ చేస్తుంది.</translation>
-<translation id="2336228925368920074">అన్ని ట్యాబ్‌లను బుక్‌మార్క్ చేయి...</translation>
+<translation id="2336228925368920074">అన్ని ట్యాబ్‌లను బుక్‌మార్క్ చేయండి...</translation>
<translation id="2336376423977300504">బ్రౌజర్ విండోలు మూసివేసేటప్పుడు ఎల్లప్పుడూ కుక్కీ‌లను క్లియర్ చేయండి</translation>
<translation id="2336381494582898602">పవర్‌వాష్ చేయి</translation>
<translation id="2337236196941929873">మీరు సందర్శించవచ్చని Chrome భావించే పేజీలను ప్రీలోడ్ చేస్తుంది. ఇది చేయడానికి, మీరు కుక్కీలను అనుమతిస్తే, అలాగే సైట్‌ల నుండి మీ గుర్తింపును దాచడానికి Google ద్వారా పేజీలను ఎన్‌క్రిప్ట్ చేసి పంపితే, Chrome కుక్కీలను ఉపయోగించవచ్చు.</translation>
@@ -1480,7 +1480,7 @@
<translation id="2355314311311231464">మీ ఖాతా వివరాలను తిరిగి పొందడం సాధ్యపడలేదు కనుక, కేటాయింపు విధానం విఫలమైయ్యింది. దయచేసి మళ్లీ ట్రై చేయండి. ఎర్రర్ కోడ్: <ph name="ERROR_CODE" />.</translation>
<translation id="2355604387869345912">తక్షణ టెథెరింగ్‌ను ఆన్ చేయడం</translation>
<translation id="2356070529366658676">అడుగు</translation>
-<translation id="2357330829548294574"><ph name="USER_NAME" />ను తీసివేయి</translation>
+<translation id="2357330829548294574"><ph name="USER_NAME" />ను తీసివేయండి</translation>
<translation id="2358561147588818967">సైట్‌లు JavaScriptను ఉపయోగించగలవు</translation>
<translation id="2359071692152028734">Linux యాప్‌లు ప్రతిస్పందించకపోవచ్చు.</translation>
<translation id="2359345697448000899">'సాధనాలు' మెనూలోని ఎక్స్‌టెన్షన్‌లను క్లిక్ చేయడం ద్వారా మీ ఎక్స్‌టెన్షన్‌లను నిర్వహించండి.</translation>
@@ -1489,7 +1489,7 @@
<translation id="2361100938102002520">మీరు ఈ బ్రౌజర్‌కు మేనేజ్ చేయబడిన ప్రొఫైల్‌ను జోడిస్తున్నారు. మీ అడ్మినిస్ట్రేటర్ ప్రొఫైల్‌పైన కంట్రోల్‌ను కలిగి ఉన్నారు, అలాగే దాని డేటాను యాక్సెస్ చేయగలరు.</translation>
<translation id="236117173274098341">ఆప్టిమైజ్ చేయండి</translation>
<translation id="2361340419970998028">ఫీడ్‌బ్యాక్‌ను పంపుతోంది...</translation>
-<translation id="236141728043665931">ఎల్లప్పుడూ మైక్రోఫోన్ యాక్సెస్‌ను బ్లాక్ చేయి</translation>
+<translation id="236141728043665931">ఎల్లప్పుడూ మైక్రోఫోన్ యాక్సెస్‌ను బ్లాక్ చేయండి</translation>
<translation id="2363744066037724557">&amp;విండోను రీస్టోర్ చేయండి</translation>
<translation id="2364498172489649528">ఆమోదించినవి</translation>
<translation id="2365507699358342471">క్లిప్‌బోర్డ్‌కు కాపీ చేసిన వచనం మరియు చిత్రాలను ఈ సైట్ చూడగలదు.</translation>
@@ -1502,7 +1502,7 @@
<translation id="2377667304966270281">Hard Faultలు</translation>
<translation id="237828693408258535">ఈ పేజీని అనువదించాలా?</translation>
<translation id="2378982052244864789">ఎక్స్‌టెన్ష‌న్‌ డైరెక్టరీని ఎంచుకోండి.</translation>
-<translation id="2379281330731083556">సిస్టమ్ డైలాగ్‌ ఉపయోగించి ముద్రించు ...<ph name="SHORTCUT_KEY" /></translation>
+<translation id="2379281330731083556">సిస్టమ్ డైలాగ్‌ ఉపయోగించి ప్రింట్ చేయండి ...<ph name="SHORTCUT_KEY" /></translation>
<translation id="2381499968174336913">షేర్ చేయబడిన ట్యాబ్ తాలూకు ప్రివ్యూ</translation>
<translation id="2381756643783702095">పంపడానికి ముందు అడుగుతుంది (సిఫార్సు చేయబడింది)</translation>
<translation id="2386202302581016807">సెటప్‌ను పూర్తి చేయడానికి అందుబాటులో ఉన్న మీ పరికర స్టోరేజ్ చాలా తక్కువగా ఉంది</translation>
@@ -1513,7 +1513,7 @@
<translation id="2390782873446084770">Wi-Fi సింక్</translation>
<translation id="2391419135980381625">ప్రామాణిక ఫాంట్</translation>
<translation id="2392163307141705938"><ph name="IDS_SHORT_PRODUCT_NAME" /> కోసం మీ తల్లి/తండ్రి సెట్ చేసిన సమయ పరిమితిని మీరు చేరుకున్నారు.</translation>
-<translation id="2392369802118427583">సక్రియం చేయి</translation>
+<translation id="2392369802118427583">యాక్టివేట్ చేయండి</translation>
<translation id="2393136602862631930">మీ Chromebookలో <ph name="APP_NAME" />ను సెటప్ చేయండి</translation>
<translation id="2393313392064891208">Google ChromeOS Flex నియమాల కంటెంట్‌లు</translation>
<translation id="2395616325548404795">మీ <ph name="DEVICE_TYPE" /> ఎంటర్‌ప్రైజ్ నిర్వహణ కోసం విజయవంతంగా నమోదు చేయబడింది, కానీ దాని లక్షణ మరియు స్థాన సమాచారాన్ని పంపడంలో విఫలమైంది. దయచేసి ఈ పరికరం కోసం ఈ సమాచారాన్ని మీ నిర్వాహక కన్సోల్ నుండి మాన్యువల్‌గా నమోదు చేయండి.</translation>
@@ -1539,7 +1539,7 @@
<translation id="2428510569851653187">ట్యాబ్ క్రాష్ అయిన సమయంలో మీరు ఏం చేస్తున్నారో వివరించండి</translation>
<translation id="2428939361789119025">Wi-Fiను ఆఫ్ చేయండి</translation>
<translation id="2428978615149723410">ఈ కార్ట్‌లు</translation>
-<translation id="2431027948063157455">Google అసిస్టెంట్‌ను లోడ్ చేయడం సాధ్యపడలేదు, దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసుకుని మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="2431027948063157455">Google Assistantను లోడ్ చేయడం సాధ్యపడలేదు, దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసుకుని మళ్లీ ప్రయత్నించండి.</translation>
<translation id="243179355394256322">మీ సంస్థ అధికారిక యూజర్‌లకు మాత్రమే పరికర నమోదును పరిమితం చేస్తుంది. ఈ యూజర్‌కు పరికరాలను ఎన్‌రోల్ చేసే అధికారం లేదు. దయచేసి అడ్మిన్ కన్సోల్ యూజర్‌ల విభాగంలోని యూజర్ "Google Meet హార్డ్‌వేర్‌ను ఎన్‌రోల్ చేయి" అడ్మినిస్ట్రేటర్ ప్రత్యేక హక్కును కలిగి ఉన్నారని నిర్ధారించుకోండి.</translation>
<translation id="243275146591958220">డౌన్‌లోడ్‌ను రద్దు చేయండి</translation>
<translation id="2433452467737464329">పేజీని స్వీయ రీఫ్రెష్ చేయడానికి URLలో ప్రశ్న పరామితిని జోడించండి: chrome://network/?refresh=&lt;sec&gt;</translation>
@@ -1553,7 +1553,7 @@
<translation id="2439626940657133600"><ph name="WINDOW_TITLE" /> లోడ్ అవుతోంది</translation>
<translation id="2440604414813129000">&amp;సోర్స్‌ను చూడండి</translation>
<translation id="2441719842399509963">డిఫాల్ట్‌లకు రీసెట్ చేయి</translation>
-<translation id="244231003699905658">అడ్రస్‌ చెల్లదు. దయచేసి అడ్రస్‌ను తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="244231003699905658">అడ్రస్‌ చెల్లదు. దయచేసి అడ్రస్‌ను చెక్ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
<translation id="2442916515643169563">వచన నీడ</translation>
<translation id="2443487764245141020">ఐడెంటిఫయర్‌‌ను ఉపయోగించి సైట్‌లు మీ పరికరాన్ని గుర్తించాల్సిన అవసరం కూడా ఉంది</translation>
<translation id="244475495405467108">ఎడమ వైపునకు ట్యాబ్‌లను మూసివేయండి</translation>
@@ -1588,7 +1588,7 @@
<translation id="2468845464436879514">{NUM_TABS,plural, =1{<ph name="GROUP_TITLE" /> - 1 ట్యాబ్}other{<ph name="GROUP_TITLE" /> - # ట్యాబ్‌లు}}</translation>
<translation id="2469141124738294431">వర్చువల్ మెషీన్ స్టేటస్</translation>
<translation id="2469259292033957819">మీ వద్ద సేవ్ చేసిన ప్రింటర్‌లు ఏవీ లేవు.</translation>
-<translation id="2469375675106140201">స్పెల్ చెక్‌ను అనుకూలంగా మార్చు</translation>
+<translation id="2469375675106140201">స్పెల్ చెక్‌ను అనుకూలంగా మార్చండి</translation>
<translation id="247051149076336810">ఫైల్ షేర్ URL</translation>
<translation id="2470702053775288986">మద్దతు లేని ఎక్స్‌టెన్షన్‌లు నిలిపివేయబడ్డాయి</translation>
<translation id="2471469610750100598">నలుపు (ఆటోమేటిక్ సెట్టింగ్)</translation>
@@ -1601,10 +1601,10 @@
<translation id="2477065602824695373">మీరు అనేక స్విచ్‌లను సెటప్ చేసినందున, ఆటో-స్కాన్ ఆఫ్ చేయబడింది.</translation>
<translation id="2478176599153288112">"<ph name="EXTENSION" />" కోసం మీడియా-ఫైల్ అనుమతులు</translation>
<translation id="248003956660572823">పాస్‌వర్డ్‌లు సేవ్ చేయబడలేదు</translation>
-<translation id="2480868415629598489">మీరు కాపీ చేసి, అతికించే డేటాను సవరించడం</translation>
+<translation id="2480868415629598489">మీరు కాపీ చేసి, అతికించే డేటాను ఎడిట్ చేయడం</translation>
<translation id="2482878487686419369">నోటిఫికేషన్‌లు</translation>
<translation id="2482895651873876648">ట్యాబ్, గ్రూప్‌నకు తరలించబడింది <ph name="GROUP_NAME" /> - <ph name="GROUP_CONTENTS" /></translation>
-<translation id="2484959914739448251">మీ అన్ని సమకాలీకరించబడుతున్న పరికరాలతో సహా, మీ Google ఖాతా నుండి బ్రౌజింగ్ డేటాను తీసివేయడానికి, <ph name="BEGIN_LINK" />మీ రహస్య పదబంధాన్ని నమోదు చేయండి<ph name="END_LINK" />.</translation>
+<translation id="2484959914739448251">మీ అన్ని సింక్ చేయబడుతున్న పరికరాలతో సహా, మీ Google ఖాతా నుండి బ్రౌజింగ్ డేటాను తీసివేయడానికి, <ph name="BEGIN_LINK" />మీ రహస్య పదబంధాన్ని నమోదు చేయండి<ph name="END_LINK" />.</translation>
<translation id="2485394160472549611">మీ కోసం ఉత్తమంగా ఎంపిక చేసినవి</translation>
<translation id="2485422356828889247">అన్ఇన్‌స్టాల్ చేయి</translation>
<translation id="2485681265915754872">Google Play సర్వీస్ నియమాలు</translation>
@@ -1650,9 +1650,9 @@
<translation id="2518024842978892609">మీ క్లయింట్ స‌ర్టిఫికెట్‌లను ఉపయోగించడానికి అనుమతి</translation>
<translation id="2519517390894391510">సర్టిఫికెట్ ప్రొఫైల్ పేరు</translation>
<translation id="2520644704042891903">అందుబాటులో ఉన్న సాకెట్ కోసం వేచి ఉంది...</translation>
-<translation id="2521854691574443804">మీ సంస్థకు చెందిన భద్రతా పాలసీలతో <ph name="FILE_NAME" />ను తనిఖీ చేస్తోంది...</translation>
-<translation id="252219247728877310">అంశం నవీకరించబడలేదు</translation>
-<translation id="2523184218357549926">మీరు సందర్శించే పేజీల URLలను Googleకి పంపుతుంది</translation>
+<translation id="2521854691574443804">మీ సంస్థకు చెందిన భద్రతా పాలసీలతో <ph name="FILE_NAME" />ను చెక్ చేస్తోంది...</translation>
+<translation id="252219247728877310">అంశం అప్‌డేట్ చేయబడలేదు</translation>
+<translation id="2523184218357549926">మీరు సందర్శించే పేజీల URLలను Googleకు పంపుతుంది</translation>
<translation id="252418934079508528"><ph name="DEVICE_OS" />‌ను ఇన్‌స్టాల్ చేయండి</translation>
<translation id="252502352004572774">హానికరమైన సాఫ్ట్‌వేర్ కోసం Chrome మీ కంప్యూటర్‌ను చెక్ చేస్తోంది...</translation>
<translation id="2526590354069164005">డెస్క్‌టాప్</translation>
@@ -1670,7 +1670,7 @@
<translation id="253557089021624350">సక్రియ కార్యాచరణల గణన</translation>
<translation id="2535799430745250929">సెల్యులార్ నెట్‌వర్క్ ఏదీ లేదు</translation>
<translation id="2537395079978992874">కింది ఫైళ్లు, ఫోల్డర్‌లను <ph name="ORIGIN" /> చూడగలదు, సవరించగలదు</translation>
-<translation id="2537927931785713436">వర్చువల్ మెషిన్ ఇమేజ్‌ను తనిఖీ చేస్తోంది</translation>
+<translation id="2537927931785713436">వర్చువల్ మెషిన్ ఇమేజ్‌ను చెక్ చేస్తోంది</translation>
<translation id="2538084450874617176"><ph name="DEVICE_TYPE" />ను ఎవరు ఉపయోగిస్తున్నారు?</translation>
<translation id="2538361623464451692">సింక్ నిలిపివేయబడింది</translation>
<translation id="2540449034743108469">ఎక్స్‌టెన్షన్ యాక్టివిటీలను వినడానికి "ప్రారంభించు" నొక్కండి</translation>
@@ -1705,7 +1705,7 @@
<translation id="2575407791320728464">చెల్లని URL. ఇది సరిగ్గా ఫార్మాట్ చేయబడిందని నిర్ధారించుకోండి.</translation>
<translation id="2575441894380764255">అనుచితమైన లేదా తప్పుదారి పట్టించే యాడ్‌లను చూపించడానికి అనుమతి లేదు.</translation>
<translation id="257779572837908839">మీటింగ్‌ల కోసం Chromebox లాగా సెటప్ చేయండి</translation>
-<translation id="2580889980133367162">బహుళ ఫైళ్లను డౌన్‌లోడ్ చేయడానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించు</translation>
+<translation id="2580889980133367162">బహుళ ఫైళ్లను డౌన్‌లోడ్ చేయడానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించండి</translation>
<translation id="258095186877893873">ఎక్కువ</translation>
<translation id="2582253231918033891"><ph name="PRODUCT_NAME" /> <ph name="PRODUCT_VERSION" /> (ప్లాట్‌ఫారమ్ <ph name="PLATFORM_VERSION" />) <ph name="DEVICE_SERIAL_NUMBER" /></translation>
<translation id="2584109212074498965">Kerberos టిక్కెట్‌ను పొందడం సాధ్యపడలేదు. మళ్లీ ప్రయత్నించండి లేదా మీ సంస్థ పరికర నిర్వాహకులను సంప్రదించండి. (ఎర్రర్ కోడ్ <ph name="ERROR_CODE" />).</translation>
@@ -1734,10 +1734,10 @@
<translation id="2610260699262139870">&amp;సాధారణ పరిమాణం</translation>
<translation id="2610780100389066815">Microsoft Trust List Signing</translation>
<translation id="2611776654555141051">దీర్ఘచతురస్ర టూల్</translation>
-<translation id="2612676031748830579">కార్డ్ సంఖ్య</translation>
+<translation id="2612676031748830579">కార్డ్ నంబర్</translation>
<translation id="2613210758071148851"><ph name="RESTRICTED_SITE" />‌లో ఎటువంటి ఎక్స్‌టెన్షన్‌లనూ అనుమతించకండి</translation>
<translation id="2613535083491958306"><ph name="ORIGIN" />, <ph name="FILENAME" />‌ను ఎడిట్ చేయగలుగుతుంది</translation>
-<translation id="2616366145935564096"><ph name="WEBSITE_1" />లో ఉన్న మీ డేటాని చదవడం మరియు మార్చడం</translation>
+<translation id="2616366145935564096"><ph name="WEBSITE_1" />లో ఉన్న మీ డేటాను చదవడం మరియు మార్చడం</translation>
<translation id="2618797463720777311">సమీప షేరింగ్‌ను సెటప్ చేయండి</translation>
<translation id="2619761439309613843">రోజూ రిఫ్రెష్ అవుతుంది</translation>
<translation id="2620215283731032047"><ph name="FILE_NAME" />ను సురక్షితంగా డౌన్‌లోడ్ చేయడం సాధ్యం కాదు.</translation>
@@ -1782,7 +1782,7 @@
<translation id="2660779039299703961">ఈవెంట్</translation>
<translation id="266079277508604648">ప్రింటర్‌కు కనెక్ట్ చేయడం సాధ్యం కాలేదు. ప్రింటర్‌ని ఆన్ చేసినట్లు, దానిని Wi-Fi లేదా USB ద్వారా మీ Chromebookకి కనెక్ట్ చేసినట్లు నిర్ధారించుకోండి.</translation>
<translation id="2661315027005813059">వెనుకకు-ముందుకు కాష్ పేజీ: <ph name="BACK_FORWARD_CACHE_PAGE_URL" /></translation>
-<translation id="2661714428027871023">లైట్ మోడ్‌లో మరింత వేగంగా బ్రౌజ్ చేయండి, అలాగే డేటాని తక్కువగా ఉపయోగించండి. మరింత తెలుసుకోవడానికి క్లిక్ చేయండి.</translation>
+<translation id="2661714428027871023">లైట్ మోడ్‌లో మరింత వేగంగా బ్రౌజ్ చేయండి, అలాగే డేటాను తక్కువగా ఉపయోగించండి. మరింత తెలుసుకోవడానికి క్లిక్ చేయండి.</translation>
<translation id="2662876636500006917">Chrome వెబ్ స్టోర్</translation>
<translation id="2663302507110284145">భాష</translation>
<translation id="2665394472441560184">కొత్త పదాన్ని జోడించు</translation>
@@ -1882,7 +1882,7 @@
<translation id="2748061034695037846"><ph name="DOMAIN" /> పాజ్ చేయబడింది</translation>
<translation id="2749756011735116528"><ph name="PRODUCT_NAME" />కు సైన్ ఇన్ చేయండి</translation>
<translation id="2749836841884031656">SIM</translation>
-<translation id="2749881179542288782">స్పెల్ చెక్‌తో పాటు వ్యాకరణాన్ని కూడా తనిఖీ చేయి</translation>
+<translation id="2749881179542288782">స్పెల్ చెక్‌తో పాటు వ్యాకరణాన్ని కూడా చెక్ చేయండి</translation>
<translation id="2753677631968972007">సైట్ అనుమతులను మాన్యువల్‌గా నియంత్రించడం.</translation>
<translation id="2755349111255270002">ఈ <ph name="DEVICE_TYPE" />ను రీసెట్ చేయండి</translation>
<translation id="2755367719610958252">యాక్సెస్‌ ఫీచ‌ర్‌ల‌ను నిర్వహించండి</translation>
@@ -2003,7 +2003,7 @@
<translation id="2862815659905780618">Linux డెవలప్‌మెంట్ ఎన్విరాన్మెంట్‌ను తీసివేయండి</translation>
<translation id="2864601841139725659">మీ ప్రొఫైల్ చిత్రాన్ని సెట్ చేయండి</translation>
<translation id="2865919525181940183">ప్రస్తుతం స్క్రీన్‌పై ఉన్న ప్రోగ్రామ్‌ల స్క్రీన్‌షాట్</translation>
-<translation id="286674810810214575">పవర్ మూలాలను తనిఖీ చేస్తోంది...</translation>
+<translation id="286674810810214575">పవర్ మూలాలను చెక్ చేస్తోంది...</translation>
<translation id="2867768963760577682">పిన్ చేసిన ట్యాబ్ లాగా తెరువు</translation>
<translation id="2868746137289129307">ఈ ఎక్స్‌టెన్షన్ చాలా పాతది, బిజినెస్ విధానం కారణంగా నిలిపివేయబడింది. అయితే, కొత్త వెర్షన్ అందుబాటులో ఉన్నప్పుడు ఇది ఆటోమేటిక్‌గా ప్రారంభించబడవచ్చు.</translation>
<translation id="2870560284913253234">సైట్</translation>
@@ -2045,7 +2045,7 @@
<translation id="2902265136119311513">గెస్ట్‌లాగా బ్రౌజ్ చేయండి</translation>
<translation id="2902312830803030883">మరిన్ని చర్యలు</translation>
<translation id="2903457445916429186">ఎంచుకున్న అంశాలను తెరవండి</translation>
-<translation id="2903882649406874750">సెన్సార్‌లను యాక్సెస్ చేయనీయకుండా ఎల్లప్పుడూ <ph name="HOST" />ని బ్లాక్ చేయి</translation>
+<translation id="2903882649406874750">సెన్సార్‌లను యాక్సెస్ చేయనీయకుండా ఎల్లప్పుడూ <ph name="HOST" />ని బ్లాక్ చేయండి</translation>
<translation id="2907619724991574506">ప్రారంభ URLలు</translation>
<translation id="2907798539022650680">'<ph name="NAME" />'కు కనెక్ట్ చేయడంలో విఫలమైంది: <ph name="DETAILS" />
సర్వర్ మెసేజ్‌: <ph name="SERVER_MSG" /></translation>
@@ -2069,7 +2069,7 @@
<translation id="2921081876747860777">దయచేసి మీ స్థానిక డేటాను రక్షించడానికి పాస్‌వర్డ్‌ను క్రియేట్ చేయండి.</translation>
<translation id="2923006468155067296">మీ <ph name="DEVICE_TYPE" /> ఇప్పుడు లాక్ చేయబడింది.
మీ స్మార్ట్ కార్డ్‌ను ఇన్‌సర్ట్ చేసి ఉంచమని <ph name="DOMAIN" /> మిమ్మల్ని కోరుతుంది.</translation>
-<translation id="2923234477033317484">ఈ ఖాతాను తీసివేయి</translation>
+<translation id="2923234477033317484">ఈ ఖాతాను తీసివేయండి</translation>
<translation id="2923644930701689793">మీ ఫోన్ కెమెరా రోల్‌ను యాక్సెస్ చేయండి</translation>
<translation id="2926085873880284723">డిఫాల్ట్ షార్ట్‌కట్‌లను పునరుద్ధరించండి</translation>
<translation id="2926620265753325858"><ph name="DEVICE_NAME" /> సపోర్ట్ చేయదు.</translation>
@@ -2091,15 +2091,15 @@
<translation id="2941696810925320401">మీ స్క్రీన్‌లలో అదనపు డాక్యుమెంట్‌లను లేదా ఫుల్ స్క్రీన్ కంటెంట్‌ను చూపడానికి సైట్‌లు సాధారణంగా విండోలను తెరిచి, ఉంచుతాయి</translation>
<translation id="2942279350258725020">Android Messages</translation>
<translation id="2942560570858569904">వేచి ఉంది...</translation>
-<translation id="2942581856830209953">ఈ పేజీని అనుకూలీకరించండి</translation>
-<translation id="2944060181911631861">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను Googleకి ఆటోమేటిక్‌గా పంపడం ద్వారా మీ Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="2942581856830209953">ఈ పేజీని అనుకూలంగా మార్చండి</translation>
+<translation id="2944060181911631861">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను Googleకు ఆటోమేటిక్‌గా పంపడం ద్వారా మీ Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
<translation id="2946054015403765210">ఫైల్స్‌కు వెళ్లండి</translation>
<translation id="2946119680249604491">కనెక్షన్‌ని జోడించండి</translation>
<translation id="2946640296642327832">Bluetoothని ప్రారంభించు</translation>
-<translation id="2947605845283690091">వెబ్ బ్రౌజింగ్ వేగంగా ఉండాలి. ఇప్పుడే <ph name="BEGIN_LINK" />మీ ఎక్స్‌టెన్షన్‌లను తనిఖీ చేయడానికి<ph name="END_LINK" /> సమయం తీసుకోండి.</translation>
+<translation id="2947605845283690091">వెబ్ బ్రౌజింగ్ వేగంగా ఉండాలి. ఇప్పుడే <ph name="BEGIN_LINK" />మీ ఎక్స్‌టెన్షన్‌లను చెక్ చేయడానికి<ph name="END_LINK" /> సమయం తీసుకోండి.</translation>
<translation id="2948300991547862301"><ph name="PAGE_TITLE" />కు వెళ్లండి</translation>
<translation id="29488703364906173">ఆధునిక వెబ్ కోసం రూపొందించబడిన వేగవంతమైన, సరళమైన మరియు సురక్షితమైన వెబ్ బ్రౌజర్.</translation>
-<translation id="2949289451367477459">స్థానాన్ని ఉపయోగించండి. స్థాన అనుమతిని కలిగిన యాప్‌లు మరియు సేవలు ఈ పరికర స్థానాన్ని ఉపయోగించడానికి అనుమతించండి. Google కాలానుగుణంగా స్థాన డేటాని సేకరించవచ్చు మరియు స్థాన ఖచ్చితత్వం మరియు స్థానం-ఆధారిత సేవలను మెరుగుపరచడం కోసం ఈ డేటాని అనామకంగా ఉపయోగించవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="2949289451367477459">స్థానాన్ని ఉపయోగించండి. స్థాన అనుమతిని కలిగిన యాప్‌లు మరియు సేవలు ఈ పరికర స్థానాన్ని ఉపయోగించడానికి అనుమతించండి. Google కాలానుగుణంగా స్థాన డేటాను సేకరించవచ్చు మరియు స్థాన ఖచ్చితత్వం మరియు స్థానం-ఆధారిత సేవలను మెరుగుపరచడం కోసం ఈ డేటాను అనామకంగా ఉపయోగించవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
<translation id="2950666755714083615">నన్ను సైన్ అప్ చేయనివ్వు</translation>
<translation id="2953019166882260872">మీ ఫోన్‌ను కేబుల్‌తో కనెక్ట్ చేయండి</translation>
<translation id="2956070239128776395">విభాగం గ్రూప్‌లో ఉంది: <ph name="ERROR_LINE" /></translation>
@@ -2121,7 +2121,7 @@
<translation id="2973324205039581528">సైట్‌ను మ్యూట్ చేయండి</translation>
<translation id="2973537811036309675">సైడ్ ప్యానెల్</translation>
<translation id="2976557544729462544">సరిగ్గా లేదా పూర్తి స్థాయిలో పనిచేయడానికి డేటా యాక్సెస్ రక్షణను డిజేబుల్ చేయడానికి కొన్ని పరికరాలకు మీరు అవసరం.</translation>
-<translation id="2977480621796371840">గుంపు నుండి తీసివేయి</translation>
+<translation id="2977480621796371840">గుంపు నుండి తీసివేయండి</translation>
<translation id="2979639724566107830">కొత్త విండోలో తెరువు</translation>
<translation id="2981113813906970160">పెద్ద మౌస్ కర్సర్‌ను చూపు</translation>
<translation id="2983373101216420412">కేస్ బ్యాటరీ స్థాయి <ph name="PERCENTAGE" />%.</translation>
@@ -2144,7 +2144,7 @@
<translation id="3001144475369593262">చిన్నారి ఖాతాలు</translation>
<translation id="3003144360685731741">ప్రాధాన్య నెట్‌వర్క్‌లు</translation>
<translation id="3003623123441819449">CSS క్యాష్</translation>
-<translation id="3003828226041301643">పరికరాన్ని డొమైన్‌కు చేర్చడం సాధ్యపడలేదు. పరికరాలను జోడించగల అధికారాలు మీకు ఉన్నాయో లేదో మీ ఖాతాలో తనిఖీ చేయండి.</translation>
+<translation id="3003828226041301643">పరికరాన్ని డొమైన్‌కు చేర్చడం సాధ్యపడలేదు. పరికరాలను జోడించగల అధికారాలు మీకు ఉన్నాయో లేదో మీ ఖాతాలో చెక్ చేయండి.</translation>
<translation id="3003967365858406397">మీ <ph name="PHONE_NAME" /> ప్రైవేట్ Wi-Fi కనెక్షన్‌ని సృష్టిస్తుంది.</translation>
<translation id="3005574332301273731">చూపవద్దు</translation>
<translation id="3006881078666935414">వినియోగ డేటా లేదు</translation>
@@ -2164,7 +2164,7 @@
<translation id="301525898020410885">భాష అనేది, మీ సంస్థ ద్వారా సెట్ చేయబడుతుంది</translation>
<translation id="3015639418649705390">ఇప్పుడే పునఃప్రారంభించు</translation>
<translation id="3016381065346027039">లాగ్ నమోదులు లేవు</translation>
-<translation id="3016641847947582299">అంశం నవీకరించబడింది</translation>
+<translation id="3016641847947582299">అంశం అప్‌డేట్ చేయబడింది</translation>
<translation id="3017079585324758401">నేపథ్యం</translation>
<translation id="3019023222666709803">బాణం టూల్</translation>
<translation id="3019285239893817657">ఉప పేజీ బటన్</translation>
@@ -2213,7 +2213,7 @@
<translation id="3060987956645097882">మీ ఫోన్‌తో కనెక్షన్‌ను ఏర్పాటు చేయడం మాకు సాధ్యపడలేదు. మీ ఫోన్ సమీపంలోనే ఉండి, అలాగే బ్లూటూత్, Wi-Fi ఆన్ చేయబడి ఉందని నిర్ధారించుకోండి.</translation>
<translation id="3064871050034234884">సైట్‌లు సౌండ్‌ను ప్లే చేయగలవు</translation>
<translation id="3065041951436100775">ట్యాబ్ మూసివేత ప్ర‌తిస్పంద‌న‌.</translation>
-<translation id="3065522099314259755">కీబోర్డ్ పునరావృత ప్రతిస్పందన సమయం</translation>
+<translation id="3065522099314259755">కీబోర్డ్ రిపీట్ ప్రతిస్పందన సమయం</translation>
<translation id="3067198179881736288">యాప్‌ను ఇన్‌స్టాల్ చేయాలా?</translation>
<translation id="3067198360141518313">ఈ ప్లగ్ఇన్‌ను అమలు చేయి</translation>
<translation id="3071624960923923138">మీరు కొత్త ట్యాబ్‌ను తెరవడానికి ఇక్కడ క్లిక్ చేయవచ్చు</translation>
@@ -2362,7 +2362,7 @@
<translation id="3242665648857227438">ఈ ప్రొఫైల్ ChromeOS ప్రాక్సీ సెట్టింగ్‌లను ఉపయోగిస్తోంది.</translation>
<translation id="3244294424315804309">సౌండ్‌ని మ్యూట్ చేయడాన్ని కొనసాగించు</translation>
<translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - నెట్‌వర్క్ ఎర్రర్</translation>
-<translation id="3248902735035392926">భద్రత చాలా ముఖ్యమైనది. <ph name="BEGIN_LINK" />ఇప్పుడే మీ ఎక్స్‌టెన్షన్‌లను తనిఖీ చేయడానికి<ph name="END_LINK" /> సమయం తీసుకోండి</translation>
+<translation id="3248902735035392926">భద్రత చాలా ముఖ్యమైనది. <ph name="BEGIN_LINK" />ఇప్పుడే మీ ఎక్స్‌టెన్షన్‌లను చెక్ చేయడానికి<ph name="END_LINK" /> సమయం తీసుకోండి</translation>
<translation id="3251714896659475029">"Ok Google" అని అనడం ద్వారా Google Assistantను యాక్సెస్ చేయడానికి <ph name="SUPERVISED_USER_NAME" />ను అనుమతించండి</translation>
<translation id="3251759466064201842">&lt;సర్టిఫికెట్‌లో భాగం కాదు&gt;</translation>
<translation id="325238099842880997">చిన్నారులు ఆడుకోవడానికి, అన్వేషించడానికి, అలాగే ఇంట్లో పాఠశాల విద్యను అభ్యసించడానికి సహాయపడేలా డిజిటల్ గ్రౌండ్ నియమాలను సెట్ చేయండి</translation>
@@ -2405,7 +2405,7 @@
<translation id="328571385944182268">మీ పాస్‌వర్డ్‌లను సేవ్ చేయాలా?</translation>
<translation id="3288047731229977326">డెవలపర్ మోడ్‌లో అమలవుతున్న ఎక్స్‌టెన్ష‌న్‌లు మీ కంప్యూటర్‌కు హాని కలిగించవచ్చు. మీరు డెవలపర్ కాకపోతే, సురక్షితంగా ఉంచడానికి డెవలపర్ మోడ్‌లో అమలవుతున్న ఈ ఎక్స్‌టెన్ష‌న్‌లను నిలిపివేయాలి.</translation>
<translation id="3289668031376215426">ఆటోమెటిక్ క్యాపిటలైజేషన్</translation>
-<translation id="3289856944988573801">అప్‌డేట్‌ల కోసం తనిఖీ చేయడానికి, దయచేసి ఈథర్‌నెట్ లేదా Wi-Fiని ఉపయోగించండి.</translation>
+<translation id="3289856944988573801">అప్‌డేట్‌ల కోసం చెక్ చేయడానికి, దయచేసి ఈథర్‌నెట్ లేదా Wi-Fiని ఉపయోగించండి.</translation>
<translation id="3290249595466894471">కొత్త రకం ప్రమాదాలను గుర్తించడంలో సహాయపడటానికి కొన్ని నమూనా పేజీలు, డౌన్‌లోడ్‌లు, ఎక్స్‌టెన్షన్ యాక్టివిటీ, సిస్టమ్ సమాచారాన్ని కూడా పంపుతుంది</translation>
<translation id="3293644607209440645">ఈ పేజీని పంపండి</translation>
<translation id="32939749466444286">Linux కంటైనర్ ప్రారంభించబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
@@ -2458,10 +2458,10 @@
<translation id="3340251637492627067">మీ సంస్థ అవసరాల ప్రకారం అర్హత ఉన్న డౌన్‌లోడ్‌లు <ph name="WEB_DRIVE" />లో సేవ్ అవ్వాలి. సైన్ ఇన్ చేసిన తర్వాత, ప్రత్యేకమైన ప్రామాణీకరణ టోకెన్ స్టోర్ చేయబడుతుంది, ఇంకా అది భవిష్యత్తులో అర్హత ఉన్న డౌన్‌లోడ్‌ల కోసం ఉపయోగించబడుతుంది.</translation>
<translation id="3340620525920140773">దీని డౌన్‌లోడ్ పూర్తయింది: <ph name="FILE_NAME" />.</translation>
<translation id="3341699307020049241">పిన్ తప్పు. మీకు <ph name="RETRIES" /> ప్రయత్నాలు మిగిలి ఉన్నాయి.</translation>
-<translation id="3341703758641437857">ఫైల్ URLలకు ప్రాప్తిని అనుమతించు</translation>
+<translation id="3341703758641437857">ఫైల్ URLలకు యాక్సెస్‌ను అనుమతించండి</translation>
<translation id="3342361181740736773">"<ph name="TRIGGERING_EXTENSION_NAME" />" ఈ ఎక్స్‌టెన్షన్‌ని తీసివేయాలనుకుంటోంది.</translation>
<translation id="3345135638360864351">ఈ సైట్‌ను యాక్సెస్ చేయడానికి మీరు చేసిన రిక్వెస్ట్‌ <ph name="NAME" />కు పంపబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
-<translation id="3345634917232014253">ఒక క్షణం క్రితం భద్రతా తనిఖీ చేయబడింది</translation>
+<translation id="3345634917232014253">ఒక క్షణం క్రితం భద్రతా చెక్ చేయబడింది</translation>
<translation id="3345886924813989455">మద్దతు గల బ్రౌజర్ కనుగొనబడలేదు</translation>
<translation id="3347086966102161372">చిత్రం అడ్రస్‌ను కా&amp;పీ చేయి</translation>
<translation id="3348038390189153836">తొలగించగల పరికరం కనుగొనబడింది</translation>
@@ -2472,7 +2472,7 @@
<translation id="3356469410714175391">(వర్చువల్ కార్డ్ ఎనేబుల్ చేయబడింది)</translation>
<translation id="3356580349448036450">పూర్తయింది</translation>
<translation id="3359256513598016054">సర్టిఫికెట్ విధాన పరిమితులు</translation>
-<translation id="3360297538363969800">ముద్రణ విఫలమైంది. దయచేసి మీ ప్రింటర్‌ను తనిఖీ చేసి మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="3360297538363969800">ముద్రణ విఫలమైంది. దయచేసి మీ ప్రింటర్‌ను చెక్ చేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> మీతో <ph name="ATTACHMENTS" />ని షేర్ చేస్తోంది.}other{<ph name="DEVICE_NAME" /> మీతో <ph name="ATTACHMENTS" />ని షేర్ చేస్తోంది.}}</translation>
<translation id="3364986687961713424">మీ నిర్వాహకుడి నుండి: <ph name="ADMIN_MESSAGE" /></translation>
<translation id="3365598184818502391">Ctrl లేదా Altను ఉపయోగించండి</translation>
@@ -2515,7 +2515,7 @@
<translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
<translation id="3404065873681873169">ఈ సైట్ కోసం పాస్‌వర్డ్‌లు సేవ్ చేయబడలేదు</translation>
<translation id="3404249063913988450">స్క్రీన్ సేవర్‌ను ఎనేబుల్ చేయి</translation>
-<translation id="3405664148539009465">ఫాంట్‌లను అనుకూలంగా మార్చు</translation>
+<translation id="3405664148539009465">ఫాంట్‌లను అనుకూలంగా మార్చండి</translation>
<translation id="3405763860805964263">...</translation>
<translation id="3406290648907941085">వర్చువల్ రియాలిటీ పరికరాలను, అలాగే డేటాను ఉపయోగించడానికి అనుమతించబడింది</translation>
<translation id="3406396172897554194">భాష లేదా ఇన్‌పుట్ పేరు ఆధారంగా సెర్చ్ చేయండి</translation>
@@ -2536,13 +2536,13 @@
<translation id="3423463006624419153">మీ '<ph name="PHONE_NAME_1" />' మరియు '<ph name="PHONE_NAME_2" />'లో:</translation>
<translation id="3423858849633684918">దయచేసి <ph name="PRODUCT_NAME" />ని తిరిగి ప్రారంభించండి</translation>
<translation id="3424969259347320884">ట్యాబ్ క్రాష్ అయిన సమయంలో మీరు ఏం చేస్తున్నారో వివరించండి</translation>
-<translation id="3427092606871434483">అనుమతించు (డిఫాల్ట్)</translation>
+<translation id="3427092606871434483">అనుమతించండి (డిఫాల్ట్)</translation>
<translation id="3429086384982427336">కింద లిస్ట్ చేయబడిన యాప్‌లు ఎప్పటికీ ప్రోటోకాల్ లింక్‌లను హ్యాండిల్ చేయవు.</translation>
<translation id="3429160811076349561">ట్రయల్ ఫీచర్‌లు ఆఫ్ చేయబడి ఉన్నాయి</translation>
<translation id="3429271624041785769">వెబ్ కంటెంట్ భాషలు</translation>
<translation id="3429275422858276529">ఈ పేజీని తర్వాత సులభంగా కనుగొనడానికి దీనిని బుక్‌మార్క్ చేయండి</translation>
<translation id="343115368966109153"><ph name="FILE_NAME" />‌ను డౌన్‌లోడ్ చేయాలా? పరికరాన్ని ఉపయోగించే ఎవరైనా దీన్ని చూడగలరు.</translation>
-<translation id="3432227430032737297">చూపుతున్నవన్నీ తీసివేయి</translation>
+<translation id="3432227430032737297">చూపుతున్నవన్నీ తీసివేయండి</translation>
<translation id="3432762828853624962">షేర్డ్ వర్కర్స్</translation>
<translation id="3433507769937235446">వదిలి వెళ్లినప్పుడు లాక్ చేయండి</translation>
<translation id="3433621910545056227">అయ్యో! పరికరం ఇన్‌స్టాలేషన్-సమయ లక్షణాల లాక్‌ను ఏర్పాటు చేయడంలో సిస్టమ్ విఫలమైంది.</translation>
@@ -2568,7 +2568,7 @@
<translation id="3446274660183028131">Windowsను ఇన్‌స్టాల్ చేయడానికి, దయచేసి parallels desktopను ప్రారంభించండి.</translation>
<translation id="344630545793878684">అనేక వెబ్‌సైట్‌ల్లోని మీ డేటాను చదవండి</translation>
<translation id="3446650212859500694">ఈ ఫైల్‌లో గోప్యమైన కంటెంట్ ఉంది</translation>
-<translation id="3447644283769633681">అన్ని మూడవ-పార్టీ కుక్కీలను బ్లాక్ చేయి</translation>
+<translation id="3447644283769633681">అన్ని మూడవ-పార్టీ కుక్కీలను బ్లాక్ చేయండి</translation>
<translation id="3448492834076427715">ఖాతాను అప్‌డేట్ చేయి</translation>
<translation id="3449393517661170867">ట్యాబ్‌లు ఉన్న కొత్త విండో</translation>
<translation id="3449839693241009168"><ph name="EXTENSION_NAME" />కు ఆదేశాలను పంపడానికి <ph name="SEARCH_KEY" /> నొక్కండి</translation>
@@ -2600,11 +2600,11 @@
<translation id="3473479545200714844">స్క్రీన్ మాగ్నిఫైయర్</translation>
<translation id="3474218480460386727">కొత్త పదాలకు 99 అక్షరాలు లేదా తక్కువ ఉపయోగించండి</translation>
<translation id="3475843873335999118">క్షమించండి, మీ వేలిముద్ర ఇప్పటికీ గుర్తించబడలేదు. దయచేసి మీ పాస్‌వర్డ్‌ను నమోదు చేయండి.</translation>
-<translation id="3476303763173086583">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకి పంపేలా యజమాని ఎంచుకోవచ్చు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="3476303763173086583">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకు పంపేలా యజమాని ఎంచుకోవచ్చు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="347670947055184738">అయ్యో! మీ పరికరానికి సంబంధించిన విధానాన్ని పొందడంలో సిస్టమ్ విఫలమైంది.</translation>
<translation id="347785443197175480">మీ కెమెరా మరియు మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి <ph name="HOST" />ను అనుమతించడాన్ని కొనసాగించండి</translation>
<translation id="3479552764303398839">ఇప్పుడు కాదు</translation>
-<translation id="3479685872808224578">ప్రింట్ సర్వర్‌ని కనుగొనలేకపోయింది. దయచేసి అడ్రస్‌ను తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="3479685872808224578">ప్రింట్ సర్వర్‌ని కనుగొనలేకపోయింది. దయచేసి అడ్రస్‌ను చెక్ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
<translation id="3480612136143976912">లైవ్ క్యాప్షన్ కోసం క్యాప్షన్ సైజ్‌ను, స్టయిల్‌ను అనుకూలంగా మార్చండి. ఈ సెట్టింగ్‌ను కొన్ని యాప్‌లు, సైట్‌లు కూడా ఉపయోగిస్తాయి.</translation>
<translation id="3480827850068960424"><ph name="NUM" /> ట్యాబ్‌లు కనుగొనబడ్డాయి</translation>
<translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> క్షణాలలో <ph name="ALTERNATIVE_BROWSER_NAME" />లో తెరవబోతోంది</translation>
@@ -2652,14 +2652,14 @@
<translation id="3524518036046613664">ప్రింటర్‌ల వంటి మీ లోకల్ నెట్‌వర్క్‌లో పరికరాలను కనుగొనండి</translation>
<translation id="3524965460886318643">యాక్టివిటీలను ఎగుమతి చేయి</translation>
<translation id="3525426269008462093">సెటప్ చేసిన తర్వాత పరికర సింక్‌ను రివ్యూ చేయండి</translation>
-<translation id="3526034519184079374">సైట్ డేటాని చదవడం లేదా మార్చడం సాధ్యం కాదు</translation>
+<translation id="3526034519184079374">సైట్ డేటాను చదవడం లేదా మార్చడం సాధ్యం కాదు</translation>
<translation id="3527085408025491307">ఫోల్డర్</translation>
<translation id="3528498924003805721">షార్ట్‌కట్ లక్ష్యాలు</translation>
<translation id="3531383404180922673">మీ ఫోన్‌లోని తాజా ఫోటోలు, మీడియా, నోటిఫికేషన్‌లను చూడండి. మీ ఫోన్‌లోని మెసేజింగ్ యాప్‌లలో ఉన్న వాటిని స్ట్రీమ్ చేయండి.</translation>
<translation id="3532273508346491126">సింక్ మేనేజ్‌మెంట్</translation>
<translation id="3532521178906420528">నెట్‌వర్క్ కనెక్షన్‌ను ఏర్పాటు చేస్తోంది...</translation>
<translation id="353316712352074340"><ph name="WINDOW_TITLE" /> - ఆడియో మ్యూట్ చేయబడింది</translation>
-<translation id="3537881477201137177">దీన్ని తర్వాత సెట్టింగ్‌లలో సవరించవచ్చు</translation>
+<translation id="3537881477201137177">దీన్ని తర్వాత సెట్టింగ్‌లలో ఎడిట్ చేయవచ్చు</translation>
<translation id="3538066758857505094">Linuxని అన్‌ఇన్‌స్టాల్ చేయడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="354060433403403521">AC అడాప్టర్</translation>
<translation id="354068948465830244">ఇది సైట్ డేటాను చదవగలదు మరియు మార్చగలదు</translation>
@@ -2676,7 +2676,7 @@
<translation id="3552097563855472344"><ph name="NETWORK_NAME" /> - <ph name="SPAN_START" /><ph name="CARRIER_NAME" /><ph name="SPAN_END" /></translation>
<translation id="3552780134252864554">నిష్క్రమణలో క్లియర్ చేయబడింది</translation>
<translation id="3554493885489666172">మీ పరికరం <ph name="PROFILE_NAME" /> ద్వారా మేనేజ్ చేయబడుతుంది. ఈ పరికరంలో ఎలాంటి ప్రొఫైల్‌లోని డేటాను అయినా అడ్మినిస్ట్రేటర్‌లు యాక్సెస్ చేయగలరు.</translation>
-<translation id="3555812735919707620">ఎక్సటెన్షన్‌ని తీసివేయి</translation>
+<translation id="3555812735919707620">ఎక్సటెన్షన్‌ని తీసివేయండి</translation>
<translation id="3556000484321257665">మీ శోధన ఇంజిన్ <ph name="URL" />కు మార్చబడింది.</translation>
<translation id="3556433843310711081">మీ నిర్వాహకుడు మీ కోసం దీన్ని అన్‌బ్లాక్ చేయగలరు</translation>
<translation id="3557101512409028104">Family Linkతో వెబ్‌సైట్ పరిమితులు &amp; పరికర వినియోగ వ్యవధిని సెట్ చేయండి</translation>
@@ -2695,7 +2695,7 @@
<translation id="3569407787324516067">స్క్రీన్ సేవర్</translation>
<translation id="3569682580018832495"><ph name="ORIGIN" />, కింద ఉన్న ఫైళ్లను, ఫోల్డర్‌లను చూడగలదు</translation>
<translation id="3571734092741541777">సెటప్ చేయి</translation>
-<translation id="3575121482199441727">ఈ సైట్‌కు అనుమతించు</translation>
+<translation id="3575121482199441727">ఈ సైట్‌కు అనుమతించండి</translation>
<translation id="3577745545227000795"><ph name="DEVICE_OS" /> హార్డ్‌వేర్ డేటా సేకరణ</translation>
<translation id="3578594933904494462">ఈ ట్యాబ్ యొక్క కంటెంట్ భాగస్వామ్యం చేయబడుతోంది.</translation>
<translation id="3578874072190212775">మోసాలను ఎదుర్కోవడంలో, అలాగే వ్యక్తులు, బాట్‌ల మధ్య ఉన్న తేడాను గుర్తించడంలో సైట్‌లకు సహాయపడుతుంది</translation>
@@ -2710,10 +2710,10 @@
<translation id="3590194807845837023">ప్రొఫైల్‌ను అన్‌లాక్ చేసి, మళ్లీ ప్రారంభించు</translation>
<translation id="3590295622232282437">నిర్వహిత సెషన్‌లోకి ప్రవేశిస్తోంది.</translation>
<translation id="3592260987370335752">&amp;మరింత తెలుసుకోండి</translation>
-<translation id="3593152357631900254">Fuzzy-Pinyin మోడ్‌ను అనుమతించు</translation>
+<translation id="3593152357631900254">Fuzzy-Pinyin మోడ్‌ను అనుమతించండి</translation>
<translation id="3593965109698325041">సర్టిఫికెట్ పేరు పరిమితులు</translation>
<translation id="3596012367874587041">యాప్ సెట్టింగ్‌లు</translation>
-<translation id="3596414637720633074">అజ్ఞాతంలో థర్డ్-పార్టీ కుక్కీలను బ్లాక్ చేయి</translation>
+<translation id="3596414637720633074">అజ్ఞాతంలో థర్డ్-పార్టీ కుక్కీలను బ్లాక్ చేయండి</translation>
<translation id="3599221874935822507">పైకి ఉన్నట్లుగా</translation>
<translation id="3600051066689725006">వెబ్ రిక్వెస్ట్‌ సమాచారం</translation>
<translation id="360180734785106144">కొత్త ఫీచర్‌లు అందుబాటులోకి వస్తే వాటిని అందించడం</translation>
@@ -2799,7 +2799,7 @@
<translation id="3677911431265050325">మొబైల్ సైట్‌ను రిక్వెస్ట్ చేయండి</translation>
<translation id="3677959414150797585">యాప్‌లు, వెబ్‌పేజీలు, మరిన్ని ఇందులో ఉంటాయి. మీరు డేటా వినియోగాన్ని షేర్ చేయడాన్ని ఎంచుకుంటే మాత్రమే సూచనలు మెరుగుపరచడానికి గణాంకాలను పంపుతుంది.</translation>
<translation id="3678156199662914018">ఎక్స్‌టెన్షన్‌: <ph name="EXTENSION_NAME" /></translation>
-<translation id="3678188444105291936">మీరు ఈ విండోలో వీక్షించే పేజీలు బ్రౌజింగ్ హిస్టరీలో కనిపించవు, మీరు సైన్ అవుట్ చేసిన తర్వాత కంప్యూటర్‌లో అవి కుక్కీల వంటి ఇతర ట్రేస్‌లను వదలవు. మీరు డౌన్‌లోడ్ చేసే ఫైళ్లు, అలాగే క్రియేట్ చేసే బుక్‌మార్క్‌లు భద్రపరచబడవు.</translation>
+<translation id="3678188444105291936">మీరు ఈ విండోలో చూసే పేజీలు బ్రౌజింగ్ హిస్టరీలో కనిపించవు, మీరు సైన్ అవుట్ చేసిన తర్వాత కంప్యూటర్‌లో అవి కుక్కీల వంటి ఇతర ట్రేస్‌లను వదలవు. మీరు డౌన్‌లోడ్ చేసే ఫైళ్లు, అలాగే క్రియేట్ చేసే బుక్‌మార్క్‌లు భద్రపరచబడవు.</translation>
<translation id="368019053277764111">సైడ్ ప్యానెల్‌లో సెర్చ్‌ను తెరవండి</translation>
<translation id="3680683624079082902">టెక్ట్స్-టు-స్పీచ్ వాయిస్</translation>
<translation id="3681311097828166361">మీ అభిప్రాయం తెలియజేసినందుకు ధన్యవాదాలు. మీరు ప్రస్తుతం ఆఫ్‌లైన్‌లో ఉన్నారు, మీ రిపోర్ట్‌ తర్వాత పంపబడుతుంది.</translation>
@@ -2965,7 +2965,7 @@
<translation id="3826071569074535339">మోషన్ సెన్సార్‌లను ఉపయోగించడానికి అనుమతించబడింది</translation>
<translation id="3826440694796503677">మరిన్ని Google ఖాతాలను చేర్చడాన్ని మీ నిర్వాహకుడు నిలిపివేశారు</translation>
<translation id="3827774300009121996">&amp;పూర్తి స్క్రీన్</translation>
-<translation id="3828029223314399057">బుక్‌మార్క్‌లను వెతుకు</translation>
+<translation id="3828029223314399057">బుక్‌మార్క్‌లను వెతకండి</translation>
<translation id="3828953470056652895">నేను <ph name="BEGIN_LINK1" />Google సర్వీస్ నియమాలు<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />Chrome, అలాగే ChromeOS అదనపు సర్వీస్ నియమాలు<ph name="END_LINK2" />, అలాగే <ph name="BEGIN_LINK3" />Play సర్వీస్ నియమాలను<ph name="END_LINK3" /> చదివి అంగీకరిస్తున్నాను.</translation>
<translation id="3829765597456725595">SMB ఫైల్ షేర్</translation>
<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{మీ నిర్వాహకుడు, హానికరమైనది అయ్యే అవకాశం ఉన్న 1 ఎక్స్‌టెన్షన్‌ను తిరిగి ఆన్ చేశారు}other{మీ నిర్వాహకుడు, హానికరమైనవి అయ్యే అవకాశం ఉన్న {NUM_EXTENSIONS} ఎక్స్‌టెన్షన్‌లను తిరిగి ఆన్ చేశారు}}</translation>
@@ -2974,12 +2974,12 @@
<translation id="3834775135533257713"><ph name="TO_INSTALL_APP_NAME" /> యాప్ "<ph name="INSTALLED_APP_NAME" />"కి వైరుధ్యంగా ఉన్నందున దాన్ని జోడించలేరు.</translation>
<translation id="3835904559946595746">Linux బ్యాకప్‌ను రీస్టోర్ చేయడం సాధ్యపడలేదు</translation>
<translation id="3836093801854521982">మీ అడ్మినిస్ట్రేటర్ "<ph name="EXTENSION_NAME" />"ని ఇన్‌స్టాల్ చేశారు కానీ ఈ Chrome యాప్‌కి ఇప్పుడిక సపోర్ట్ లేదు. దీన్ని తీసివేయడానికి మీ అడ్మినిస్ట్రేటర్‌ను సంప్రదించండి.</translation>
-<translation id="383669374481694771">ఈ పరికరం, దీనిని ఉపయోగించే పద్ధతి (బ్యాటరీ స్థాయి, సిస్టమ్, యాప్ యాక్టివిటీ, ఎర్రర్‌లు లాంటివి) గురించి ఇది సాధారణ సమాచారం. ఈ డేటా Androidను మెరుగుపరచడం కోసం ఉపయోగించబడుతుంది. కొంత ఏకీకృత సమాచారం కూడా Google యాప్‌లు, Android డెవలపర్‌ల లాంటి భాగస్వాముల యాప్‌లు, ఉత్పత్తులను మెరుగుపరచడంలో సహాయపడుతుంది.</translation>
+<translation id="383669374481694771">ఈ పరికరం, దీనిని ఉపయోగించే పద్ధతి (బ్యాటరీ స్థాయి, సిస్టమ్, యాప్ యాక్టివిటీ, ఎర్రర్‌లు లాంటివి) గురించి ఇది సాధారణ సమాచారం. ఈ డేటా Androidను మెరుగుపరచడం కోసం ఉపయోగించబడుతుంది. కొంత ఏకీకృత సమాచారం కూడా Google యాప్‌లు, Android డెవలపర్‌ల లాంటి భాగస్వాముల యాప్‌లు, ప్రోడక్టులను మెరుగుపరచడంలో సహాయపడుతుంది.</translation>
<translation id="3838085852053358637">ఎక్స్‌టెన్షన్‌ను లోడ్ చేయడం విఫలమైంది</translation>
<translation id="3838486795898716504">మరిన్ని <ph name="PAGE_TITLE" /></translation>
<translation id="383891835335927981">సైట్‌లు ఏవీ దగ్గరకు లేదా దూరానికి జూమ్ చేయబడలేదు</translation>
<translation id="3839509547554145593">మౌస్ స్క్రోల్ యాక్సిలరేషన్‌ను ఎనేబుల్ చేయండి</translation>
-<translation id="3839516600093027468">క్లిప్‌బోర్డ్‌ను చూడనీయకుండా ఎల్లప్పుడూ <ph name="HOST" />ని బ్లాక్ చేయి</translation>
+<translation id="3839516600093027468">క్లిప్‌బోర్డ్‌ను చూడనీయకుండా ఎల్లప్పుడూ <ph name="HOST" />ని బ్లాక్ చేయండి</translation>
<translation id="3841964634449506551">పాస్‌వర్డ్ చెల్లదు</translation>
<translation id="3842552989725514455">Serif ఫాంట్</translation>
<translation id="3843464315703645664">ఇంటర్నల్‌గా వైట్‌లిస్ట్ చేయబడింది</translation>
@@ -2993,7 +2993,7 @@
<translation id="3854967233147778866">ఇతర భాషలలోకి వెబ్‌సైట్‌లను అనువదించడాన్ని ఆఫర్ చేస్తుంది</translation>
<translation id="3854976556788175030">అవుట్‌పుట్ ట్రే నిండిపోయింది</translation>
<translation id="3855441664322950881">ప్యాక్ ఎక్స్‌టెన్షన్‌</translation>
-<translation id="3855676282923585394">బుక్‌మార్క్‌లు మరియు సెట్టింగ్‌లను దిగుమతి చేయి...</translation>
+<translation id="3855676282923585394">బుక్‌మార్క్‌లు మరియు సెట్టింగ్‌లను దిగుమతి చేయండి...</translation>
<translation id="3856096718352044181">దయచేసి ఇది చెల్లుబాటు అయ్యే ప్రొవైడర్ అని వెరిఫై చేయండి లేదా తర్వాత మళ్లీ ట్రై చేయండి</translation>
<translation id="3856800405688283469">సమయ మండలిని ఎంచుకోండి</translation>
<translation id="3857807444929313943">పైకి ఎత్తి, మళ్లీ తాకండి</translation>
@@ -3056,14 +3056,14 @@
<translation id="39103738135459590">యాక్టివేషన్ కోడ్</translation>
<translation id="3911824782900911339">కొత్త‌ ట్యాబ్ పేజీ</translation>
<translation id="3914173277599553213">అవసరమైనవి</translation>
-<translation id="3915280005470252504">వాయిస్ ద్వారా వెతుకు</translation>
+<translation id="3915280005470252504">వాయిస్ ద్వారా వెతకండి</translation>
<translation id="3916233823027929090">భద్రతా తనిఖీలు పూర్తయ్యాయి</translation>
<translation id="3916445069167113093">ఈ రకం ఫైల్‌ మీ కంప్యూటర్‌కు హాని చేయవచ్చు. అయినా సరే <ph name="FILE_NAME" />ని ఉంచాలని అనుకుంటున్నారా?</translation>
<translation id="3917184139185490151">మీ కంప్యూటర్‌లో ఒక సెక్యూరిటీ మాడ్యూల్ ఉంది, ఇది ChromeOSలో అనేక కీలకమైన సెక్యూరిటీ ఫీచర్‌లను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=sm</translation>
<translation id="3918972485393593704">ఈ వివరాలను Googleకు రిపోర్ట్ చేయండి</translation>
<translation id="3919145445993746351">మీ అన్ని కంప్యూటర్‌లలో మీ ఎక్స్‌టెన్షన్‌లను పొందడానికి, సింక్‌ను ఆన్ చేయండి</translation>
<translation id="3919229493046408863">పరికరాలు సమీపంలో ఉన్నప్పుడు నోటిఫికేషన్‌లను ఆఫ్ చేయండి</translation>
-<translation id="3919798653937160644">మీరు ఈ విండో‌లో వీక్షించే పేజీలు బ్రౌజింగ్ హిస్టరీలో కనిపించవు, అలాగే తెరిచిన అన్ని గెస్ట్ విండోలను మీరు మూసివేసిన తర్వాత, అవి కంప్యూటర్‌లో కుక్కీల వంటి ఇతర ట్రేస్‌లను వదలవు. అయితే, మీరు డౌన్‌లోడ్ చేసే ఫైళ్లు భద్రపరచబడతాయి.</translation>
+<translation id="3919798653937160644">మీరు ఈ విండో‌లో చూసే పేజీలు బ్రౌజింగ్ హిస్టరీలో కనిపించవు, అలాగే తెరిచిన అన్ని గెస్ట్ విండోలను మీరు మూసివేసిన తర్వాత, అవి కంప్యూటర్‌లో కుక్కీల వంటి ఇతర ట్రేస్‌లను వదలవు. అయితే, మీరు డౌన్‌లోడ్ చేసే ఫైళ్లు భద్రపరచబడతాయి.</translation>
<translation id="3920504717067627103">సర్టిఫికెట్ విధానాలు</translation>
<translation id="392089482157167418">ChromeVox (చదవబడే అభిప్రాయం)ను ప్రారంభించు</translation>
<translation id="3920909973552939961">పేమెంట్ హ్యాండ్లర్‌లను ఇన్‌స్టాల్ చేయడానికి అనుమతించబడలేదు</translation>
@@ -3089,14 +3089,14 @@
<translation id="3937640725563832867">సర్టిఫికెట్ జారీ చేసినవారి ప్రత్యామ్నాయ పేరు</translation>
<translation id="3937734102568271121">ఎల్లప్పుడూ <ph name="LANGUAGE" /> భాషలోది అనువదించు</translation>
<translation id="3938128855950761626"><ph name="VENDOR_ID" /> విక్రేత నుండి అందించే పరికరాలు</translation>
-<translation id="3940233957883229251">ఆటోమేటిక్‌గా పునరావృతం చేయడాన్ని ప్రారంభించు</translation>
+<translation id="3940233957883229251">ఆటోమేటిక్‌గా రిపీట్‌ చేయడాన్ని ప్రారంభించు</translation>
<translation id="3941565636838060942">ఈ ప్రోగ్రామ్‌కు యాక్సెస్‌ను దాచడానికి, మీరు దీన్ని నియంత్రణ ప్యానెల్‌లోని
<ph name="CONTROL_PANEL_APPLET_NAME" />ను ఉపయోగించి అన్‌ఇన్‌స్టాల్ చేయాలి.
మీరు <ph name="CONTROL_PANEL_APPLET_NAME" />ను ప్రారంభించాలనుకుంటున్నారా?</translation>
<translation id="3942420633017001071">నిర్ధారణలు</translation>
<translation id="3943582379552582368">&amp;వెనుకకు</translation>
-<translation id="3943857333388298514">అతికించు</translation>
+<translation id="3943857333388298514">పేస్ట్ చేయండి</translation>
<translation id="3945513714196326460">చిన్న పేరును ట్రై చేయండి</translation>
<translation id="3948027458879361203">హోస్ట్‌పేరును మార్చండి</translation>
<translation id="3948116654032448504">చిత్రం కోసం <ph name="SEARCH_ENGINE" />లో &amp;శోధించండి</translation>
@@ -3113,12 +3113,12 @@
<translation id="3957079323242030166">బ్యాకప్ డేటా, మీ డిస్క్ స్టోరేజ్ కోటాలో లెక్కించబడదు.</translation>
<translation id="3957149833646341246">{NUM_APPS,plural, =1{మీ యాప్‌లలో 1 ఇకపై సపోర్ట్ చేయదు.}other{మీ యాప్‌లలో # ఇకపై సపోర్ట్ చేయవు.}}</translation>
<translation id="3957844511978444971">ఈ Google సేవల సెట్టింగ్‌ల విషయంలో మీ ఎంపికను మీరు నిర్ధారిస్తున్నట్లు తెలియజేయడానికి “ఆమోదించు” నొక్కండి.</translation>
-<translation id="3958088479270651626">బుక్‌మార్క్‌లను మరియు సెట్టింగ్‌లను దిగుమతి చేయి</translation>
+<translation id="3958088479270651626">బుక్‌మార్క్‌లను మరియు సెట్టింగ్‌లను దిగుమతి చేయండి</translation>
<translation id="3960566196862329469">ONC</translation>
<translation id="3962119236270174787">ప్రమాదకరమైనవిగా గుర్తించబడిన వెబ్‌సైట్‌లు, డౌన్‌లోడ్‌లు, ఎక్స్‌టెన్షన్‌ల నుండి ప్రామాణిక రక్షణ</translation>
<translation id="3964480518399667971">సెల్యూలార్ నెట్‌వర్క్‌ను ఆఫ్ చేయడం</translation>
<translation id="3965811923470826124">దీనితో</translation>
-<translation id="3965965397408324205"><ph name="PROFILE_NAME" /> నుండి నిష్క్రమించు</translation>
+<translation id="3965965397408324205"><ph name="PROFILE_NAME" /> నుండి నిష్క్రమించండి</translation>
<translation id="3966072572894326936">మరొక ఫోల్డర్‌ను ఎంచుకోండి...</translation>
<translation id="3967822245660637423">డౌన్‌లోడ్ పూర్తయింది</translation>
<translation id="3967841595862839006">మీ భాష &amp; కీబోర్డ్‌ను ఎంచుకోండి</translation>
@@ -3126,21 +3126,21 @@
<translation id="397105322502079400">గణిస్తోంది...</translation>
<translation id="3971764089670057203">ఈ సెక్యూరిటీ 'కీ'లో వేలిముద్రలు ఉన్నాయి</translation>
<translation id="3973005893595042880">యూజర్‌కు అనుమతి లేదు</translation>
-<translation id="3973660817924297510">పాస్‌వర్డ్‌లను తనిఖీ చేస్తోంది (<ph name="TOTAL_PASSWORDS" />లో <ph name="CHECKED_PASSWORDS" />)…</translation>
+<translation id="3973660817924297510">పాస్‌వర్డ్‌లను చెక్ చేస్తోంది (<ph name="TOTAL_PASSWORDS" />లో <ph name="CHECKED_PASSWORDS" />)…</translation>
<translation id="3974514184580396500">స్క్రీన్‌పై మీ ఫోకస్‌ను ముందుకు జరపడానికి, “తర్వాత” ఆప్షన్‌ను ఉపయోగించండి</translation>
<translation id="3975201861340929143">వివరణ</translation>
<translation id="3975565978598857337">సర్వర్ కోసం నెట్‌వర్క్ పరిధిని కనెక్ట్ చేయడంలో విఫలమైంది</translation>
<translation id="3976108569178263973">అందుబాటులో ఉన్న ప్రింటర్లు లేవు.</translation>
<translation id="397703832102027365">పూర్తి చేస్తోంది...</translation>
<translation id="3977145907578671392">అజ్ఞాత మోడ్‌లో కొన్ని సైట్‌లలోని ఫీచర్‌లు పని చేయవు</translation>
-<translation id="3977886311744775419">ఈ రకమైన నెట్‌వర్క్‌లో ఆటోమేటిక్ అప్‌డేట్‌లు డౌన్‌లోడ్ చేయబడవు, కానీ మీరు మాన్యువల్‌గా అప్‌డేట్‌లను తనిఖీ చేయవచ్చు.</translation>
+<translation id="3977886311744775419">ఈ రకమైన నెట్‌వర్క్‌లో ఆటోమేటిక్ అప్‌డేట్‌లు డౌన్‌లోడ్ చేయబడవు, కానీ మీరు మాన్యువల్‌గా అప్‌డేట్‌లను చెక్ చేయవచ్చు.</translation>
<translation id="3979395879372752341">కొత్త ఎక్స్‌టెన్షన్‌ జోడించబడింది (<ph name="EXTENSION_NAME" />)</translation>
<translation id="3979748722126423326"><ph name="NETWORKDEVICE" />ను ప్రారంభించు</translation>
<translation id="3981058120448670012">సమీపంలోని పరికరాలకు <ph name="REMAINING_TIME" /> పాటు <ph name="DEVICE_NAME" />గా కనిపిస్తుంది...</translation>
<translation id="3981760180856053153">చెల్లని సేవ్ రకం ఎంటర్ చేయబడింది.</translation>
<translation id="3981902534690264083">యాడ్‌ల పనితీరును అడ్వర్టయిజర్‌లు అర్థం చేసుకోగలరు</translation>
<translation id="3982375475032951137">సులువైన కొద్ది దశలతో మీ బ్రౌజర్‌ని సెటప్ చేయండి</translation>
-<translation id="3983400541576569538">కొన్ని యాప్‌ల డేటాని కోల్పోవచ్చు</translation>
+<translation id="3983400541576569538">కొన్ని యాప్‌ల డేటాను కోల్పోవచ్చు</translation>
<translation id="3983586614702900908">తెలియని విక్రేత అందించిన పరికరాలు</translation>
<translation id="3983764759749072418">Play Store అప్లికేషన్‌లు ఈ పరికరానికి యాక్సెస్‌ను కలిగి ఉన్నాయి.</translation>
<translation id="3983769721878416534">క్లిక్ చర్యను అమలు చేసే ముందు వేచి ఉండాల్సిన జాప్యం</translation>
@@ -3194,7 +3194,7 @@
<translation id="4037084878352560732">గుర్రం</translation>
<translation id="403725336528835653">ముందు దీన్ని ట్రై చేయండి</translation>
<translation id="4040105702484676956"><ph name="SITE_NAME" />, ఇంకా దానికి సంబంధించిన ఇన్‌స్టాల్ చేయబడిన యాప్‌లో సైట్ డేటాను, ఇంకా అనుమతులను క్లియర్ చేయాలనుకుంటున్నారా?</translation>
-<translation id="4042863763121826131">{NUM_PAGES,plural, =1{పేజీ నుండి నిష్క్రమించు}other{పేజీల నుండి నిష్క్రమించు}}</translation>
+<translation id="4042863763121826131">{NUM_PAGES,plural, =1{పేజీ నుండి నిష్క్రమించండి}other{పేజీల నుండి నిష్క్రమించండి}}</translation>
<translation id="4044612648082411741">మీ ప్రమాణపత్రం పాస్‌వర్డ్‌ను నమోదు చేయండి</translation>
<translation id="4044708573046946214">స్క్రీన్ లాక్ పాస్‌వర్డ్</translation>
<translation id="404493185430269859">డిఫాల్ట్ శోధన ఇంజిన్</translation>
@@ -3212,13 +3212,13 @@
<translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
<translation id="4057896668975954729">స్టోర్‌లో చూడండి</translation>
<translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
-<translation id="4058793769387728514">డాక్యుమెంట్‌ను ఇప్పుడు తనిఖీ చేయి</translation>
+<translation id="4058793769387728514">డాక్యుమెంట్‌ను ఇప్పుడు చెక్ చేయండి</translation>
<translation id="4061374428807229313">షేర్ చేయడానికి, Files యాప్‌లోని ఫోల్డర్‌పై కుడి క్లిక్ చేయండి, తర్వాత "Parallels desktopతో షేర్ చేయి"ని ఎంచుకోండి.</translation>
<translation id="406213378265872299">అనుకూలంగా మార్చిన ప్రవర్తనలు</translation>
<translation id="4062561150282203854">మీ <ph name="DEVICE_TYPE" /> యాప్‌లు, సెట్టింగ్‌లు, ఇంకా మరిన్నింటిని సింక్ చేయండి</translation>
<translation id="4064575710864784237">1x</translation>
<translation id="4065876735068446555">మీరు ఉపయోగిస్తున్న నెట్‌వర్క్ (<ph name="NETWORK_ID" />)కి మీరు దాని లాగిన్ పేజీని సందర్శించడం అవసరం కావచ్చు.</translation>
-<translation id="4066207411788646768">మీ నెట్‌వర్క్‌లో అందుబాటులో గల ప్రింటర్లను చూడడానికి మీ కనెక్షన్‌ను తనిఖీ చేయండి</translation>
+<translation id="4066207411788646768">మీ నెట్‌వర్క్‌లో అందుబాటులో గల ప్రింటర్లను చూడడానికి మీ కనెక్షన్‌ను చెక్ చేయండి</translation>
<translation id="4068776064906523561">సేవ్ చేయబడిన వేలిముద్రలు</translation>
<translation id="407173827865827707">క్లిక్ చేసినప్పుడు</translation>
<translation id="4072701974556190758">పాస్‌వర్డ్, మీ Google ఖాతా <ph name="ACCOUNT" />లో సేవ్ చేయబడుతుంది. మీరు దీన్ని గుర్తుంచుకోవాల్సిన అవసరం లేదు.</translation>
@@ -3231,7 +3231,7 @@
<translation id="4079140982534148664">మెరుగైన స్పెల్ చెక్‌ను ఉపయోగించు</translation>
<translation id="4081242589061676262">ఫైల్‌ని ప్రసారం చేయడం సాధ్యపడలేదు.</translation>
<translation id="408223403876103285"><ph name="WEBSITE" /> మీ ఫోన్‌కు నోటిఫికేషన్‌ను పంపింది. అది మీరేనని నిర్ధారించడానికి, అక్కడ ఉన్న దశలను ఫాలో అవ్వండి.</translation>
-<translation id="4084682180776658562">బుక్‌మార్క్ చేయి</translation>
+<translation id="4084682180776658562">బుక్‌మార్క్ చేయండి</translation>
<translation id="4084835346725913160"><ph name="TAB_NAME" />ని మూసివేయి</translation>
<translation id="4085298594534903246">ఈ పేజీపై JavaScript నిరోధించబడింది.</translation>
<translation id="4087089424473531098">ఎక్స్‌టెన్షన్‌ క్రియేట్ చేయబడింది:
@@ -3305,7 +3305,7 @@
<translation id="4144468798716165316">క్విక్ కమాండ్స్</translation>
<translation id="4146026355784316281">ఎల్లప్పుడూ సిస్టమ్ వ్యూయర్‌తో తెరువు</translation>
<translation id="4146785383423576110">రీసెట్ చేసి హానికరమైన వాటిని తీసివేయండి</translation>
-<translation id="4147897805161313378">Google ఫోటోలు</translation>
+<translation id="4147897805161313378">Google Photos</translation>
<translation id="4147911968024186208">దయచేసి మళ్లీ ప్రయత్నించండి. మీకు ఈ ఎర్రర్ మళ్లీ కనిపిస్తే, దయచేసి మీ మద్దతు ప్రతినిధిని సంప్రదించండి.</translation>
<translation id="4150201353443180367">డిస్‌ప్లే</translation>
<translation id="4150569944729499860">స్క్రీన్ కాంటెక్ట్స్</translation>
@@ -3321,7 +3321,7 @@
<translation id="4167686856635546851">వీడియో గేమ్‌లు లేదా వెబ్ ఫారమ్‌లు వంటి డిస్‌ప్లే ఇంటరాక్టివ్ ఫీచర్‌ల కోసం సాధారణంగా సైట్‌లు JavaScriptను ఉపయోగించుకుంటాయి</translation>
<translation id="4168015872538332605"><ph name="PRIMARY_EMAIL" />కు సంబంధించిన కొన్ని సెట్టింగ్‌లు మీతో షేర్‌ చేయబడుతున్నాయి. ఈ సెట్టింగ్‌లు బహుళ సైన్-ఇన్‌ను ఉపయోగించేటప్పుడు మాత్రమే మీ ఖాతాను ప్రభావితం చేస్తాయి.</translation>
<translation id="4168651806173792090"><ph name="LAST_FOUR_DIGITS" />తో ముగిసే <ph name="NETWORK_NAME" /></translation>
-<translation id="4170314459383239649">నిష్క్రమించేటప్పుడు క్లియర్ చేయి</translation>
+<translation id="4170314459383239649">నిష్క్రమించేటప్పుడు క్లియర్ చేయండి</translation>
<translation id="417096670996204801">ఒక ప్రొఫైల్‌ను ఎంచుకోండి</translation>
<translation id="4175137578744761569">లేత వంగ రంగు మరియు తెలుపు</translation>
<translation id="4175737294868205930">నిరంతర నిల్వ</translation>
@@ -3354,7 +3354,7 @@
<translation id="4209251085232852247">ఆఫ్ చేయబడింది</translation>
<translation id="4210048056321123003">వర్చువల్ మెషిన్‌ను డౌన్‌లోడ్ చేస్తోంది</translation>
<translation id="421182450098841253"> &amp;బుక్‌మార్క్‌ల బార్‌ను చూపు</translation>
-<translation id="4211851069413100178">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను Googleకి ఆటోమేటిక్‌గా పంపడం ద్వారా మీ Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకి పంపేలా యజమాని ఎంచుకోవచ్చు. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="4211851069413100178">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను Googleకు ఆటోమేటిక్‌గా పంపడం ద్వారా మీ Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకు పంపేలా యజమాని ఎంచుకోవచ్చు. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="4211904048067111541">Android యాప్‌లతో ఉపయోగించడాన్ని ఆపివేయండి</translation>
<translation id="42126664696688958">ఎగుమతి చేయి</translation>
<translation id="42137655013211669">సర్వర్ ఈ వనరుకు యాక్సెస్‌ను నిషేధించింది.</translation>
@@ -3399,8 +3399,8 @@
<translation id="4260182282978351200"><ph name="FILE_NAME" /> ప్రమాదకరమైనది కావచ్చు. స్కాన్ చేయడానికి Google అధునాతన రక్షణకు పంపాలా? డౌన్‌లోడ్‌ల బార్ ప్రాంతంలోకి వెళ్లడం కోసం 'Shift+F6' నొక్కండి.</translation>
<translation id="4261429981378979799">ఎక్స్‌టెన్షన్ అనుమతులు</translation>
<translation id="4262004481148703251">హెచ్చరికను విస్మరించండి</translation>
-<translation id="4263223596040212967">మీ కీబోర్డ్ లేఅవుట్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
-<translation id="426564820080660648">అప్‌డేట్‌ల కోసం తనిఖీ చేయడానికి, దయచేసి ఈథర్‌నెట్, Wi-Fi లేదా మొబైల్ డేటాను ఉపయోగించండి.</translation>
+<translation id="4263223596040212967">మీ కీబోర్డ్ లేఅవుట్‌ను చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="426564820080660648">అప్‌డేట్‌ల కోసం చెక్ చేయడానికి, దయచేసి ఈథర్‌నెట్, Wi-Fi లేదా మొబైల్ డేటాను ఉపయోగించండి.</translation>
<translation id="4266679478228765574">ఫోల్డర్‌లను తీసివేయడం వలన షేరింగ్ ఆపివేయబడుతుంది, కానీ ఫైళ్లు తొలగించబడవు.</translation>
<translation id="4267455501101322486">విద్యా సంబంధమైన వనరులకు యాక్సెస్ కోసం ఖాతాను యాడ్ చేయడానికి, మీకు అనుమతి ఇవ్వాల్సిందిగా తల్లి/తండ్రిని అడగండి</translation>
<translation id="4267924571297947682">అనుమతి కోసం తల్లి/తండ్రిని అడగండి</translation>
@@ -3439,7 +3439,7 @@
<translation id="4301011537467809690"><ph name="BEGIN_PARAGRAPH1" />ChromeOS పరికరాలు మాకు ఆటోమేటిక్ రిపోర్ట్‌లను పంపడాన్ని అనుమతించడం ద్వారా, ChromeOSలో దేనిని ముందుగా పరిష్కరించి, మెరుగుపరచాలనే అంశం గురించి నిర్ణయం తీసుకోవడంలో మాకు సహాయం లభిస్తుంది. ఈ రిపోర్ట్‌లలో ChromeOS ఎప్పుడెప్పుడు క్రాష్ అవుతోంది, ఏ ఫీచర్‌లు ఉపయోగించబడ్డాయి, సాధారణంగా ఎంత మెమరీ ఉపయోగించడం జరుగుతోంది వంటి వివరాలు ఉంటాయి.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />మీ చిన్నారి ChromeOS పరికర సెట్టింగ్‌లలో ఈ రిపోర్ట్‌లను అనుమతించడాన్ని మీరు ఎప్పుడైనా ప్రారంభించవచ్చు లేదా ఆపివేయవచ్చు. మీరు డొమైన్ అడ్మినిస్ట్రేటర్ అయితే, మీరు ఈ సెట్టింగ్‌ను అడ్మిన్ కన్సోల్‌లో మార్చవచ్చు.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />ఈ ఫీచర్‌ను ఆఫ్ చేయడం వలన సిస్టమ్ అప్‌డేట్‌లు, సెక్యూరిటీ లాంటి ముఖ్యమైన సర్వీస్‌లకు అవసరమైన సమాచారాన్ని పంపగల ఈ పరికర సామర్థ్యం ప్రభావితం కాదు.<ph name="END_PARAGRAPH3" /></translation>
-<translation id="4301671483919369635">ఈ పేజీకి, ఫైళ్లను సవరించే అనుమతి ఉంది</translation>
+<translation id="4301671483919369635">ఈ పేజీకి, ఫైళ్లను ఎడిట్ చేసే అనుమతి ఉంది</translation>
<translation id="4302577930366020750">Steamను ఉపయోగించడానికి దయచేసి మీ పరికరాన్ని రీస్టార్ట్ చేయండి</translation>
<translation id="4303079906735388947">మీ సెక్యూరిటీ కీ కోసం కొత్త పిన్‌ని సెటప్ చేయండి</translation>
<translation id="4304713468139749426">పాస్‌వర్డ్ మేనేజర్</translation>
@@ -3449,10 +3449,10 @@
<translation id="4307992518367153382">ప్రాథమికాలు</translation>
<translation id="4309165024397827958">లొకేషన్ అనుమతిని కలిగిన Android యాప్‌లు, సర్వీస్‌లు మీ పరికర లొకేషన్‌ను ఉపయోగించడానికి అనుమతించండి. Google కాలానుగుణంగా లొకేషన్ డేటాను సేకరించవచ్చు, లొకేషన్ ఖచ్చితత్వాన్ని, లొకేషన్-ఆధారిత సర్వీస్‌లను మెరుగుపరచడం కోసం ఈ డేటాను అజ్ఞాతంగా ఉపయోగించవచ్చు.</translation>
<translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ప్రత్యక్షంగా)</translation>
-<translation id="4310139701823742692">ఫైల్ తప్పు ఫార్మాట్‌లో ఉంది. PPD ఫైల్‌ని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="4310139701823742692">ఫైల్ తప్పు ఫార్మాట్‌లో ఉంది. PPD ఫైల్‌ని చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="431076611119798497">&amp;వివరాలు</translation>
<translation id="4312701113286993760">{COUNT,plural, =1{1 Google ఖాతా}other{<ph name="EXTRA_ACCOUNTS" /> Google ఖాతాలు}}</translation>
-<translation id="4312866146174492540">బ్లాక్ చేయి (డిఫాల్ట్)</translation>
+<translation id="4312866146174492540">బ్లాక్ చేయండి (డిఫాల్ట్)</translation>
<translation id="4314497418046265427">మీ ఫోన్‌ను మీ <ph name="DEVICE_TYPE" />కు కనెక్ట్ చేసినప్పుడు మరిన్ని ప్రయోజనాలు పొందండి</translation>
<translation id="4314815835985389558">సింక్‌ను నిర్వహించండి</translation>
<translation id="4315933848520197627">ఖాతాను అన్‌లింక్ చేయండి</translation>
@@ -3466,7 +3466,7 @@
<translation id="4330387663455830245"><ph name="LANGUAGE" />ని ఎప్పటికీ అనువదించవద్దు</translation>
<translation id="4332976768901252016">తల్లిదండ్రుల నియంత్రణలను సెటప్ చేయండి</translation>
<translation id="4333854382783149454">RSA ఎన్‌క్రిప్షన్‌తో PKCS #1 SHA-1</translation>
-<translation id="4336434711095810371">మొత్తం డేటాను క్లియర్ చేయి</translation>
+<translation id="4336434711095810371">మొత్తం డేటాను క్లియర్ చేయండి</translation>
<translation id="4339203724549370495">యాప్‌ను అన్‌ఇన్‌స్టాల్ చేయి</translation>
<translation id="4340125850502689798">చెల్లని యూజర్‌నేమ్</translation>
<translation id="4340515029017875942"><ph name="ORIGIN" />, <ph name="EXTENSION_NAME" />యాప్‌తో కమ్యూనికేట్ చేయాలనుకుంటోంది</translation>
@@ -3481,7 +3481,7 @@
<translation id="4348426576195894795">ఈ ఖాతాను తీసివేస్తే, ఈ ఖాతాతో సైన్ ఇన్ అయిన Chrome ప్రొఫైల్స్ ఏవైనా ఉంటే, అవి కూడా తొలగించబడతాయి</translation>
<translation id="4348766275249686434">లోపాలను సేకరించు</translation>
<translation id="4349828822184870497">సహాయకరమైనవి</translation>
-<translation id="4350230709416545141">మీ లొకేషన్‌ను యాక్సెస్ చేయకుండా <ph name="HOST" />ను ఎల్లప్పుడూ బ్లాక్ చేయి</translation>
+<translation id="4350230709416545141">మీ లొకేషన్‌ను యాక్సెస్ చేయకుండా <ph name="HOST" />ను ఎల్లప్పుడూ బ్లాక్ చేయండి</translation>
<translation id="4350782034419308508">హే Google</translation>
<translation id="4351770750390404505"><ph name="BEGIN_PARAGRAPH1" />అత్యుత్తమ అనుభవం అందించడానికి, పరికరాలకు సంబంధించిన హార్డ్‌వేర్ డేటాను <ph name="DEVICE_OS" /> సేకరిస్తుంది, అలాగే ఏ అప్‌డేట్‌లను డెలివరీ చేయాలో నిర్ణయించడం కోసం Googleకు దీనిని షేర్ చేస్తుంది. ఆప్షనల్‌గా, <ph name="DEVICE_OS" /> అనుభవం, సర్వీస్‌కు సపోర్ట్, మెరుగుదలల వంటి అదనపు ప్రయోజనాల కోసం ఈ డేటాను Google వినియోగించేందుకు మీరు అనుమతించవచ్చు.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />అప్‌డేట్‌లను ఫిల్టర్ చేయడానికి Googleకు పంపిన డేటాను, అలాగే మీరు Googleతో డేటాను షేర్ చేయడానికి ఎంచుకున్న ఏ ఇతర సందర్భాలను అయినా చూడటానికి ఈ పరికరంలో లాగిన్ చేసి, chrome://systemలోని CHROMEOSFLEX_HARDWARE_INFO విభాగాన్ని సందర్శించండి.<ph name="END_PARAGRAPH2" />
@@ -3600,7 +3600,7 @@
<translation id="4471354919263203780">స్పీచ్ రికగ్నిషన్ ఫైళ్లు డౌన్‌లోడ్ అవుతున్నాయి... <ph name="PERCENT" />%</translation>
<translation id="447252321002412580">Chrome ఫీచర్‌లు మరియు పనితీరును మెరుగుపరచడంలో సహాయపడండి</translation>
<translation id="4472575034687746823">ప్రారంభించండి</translation>
-<translation id="4474155171896946103">అన్ని ట్యాబ్‌లను బుక్‌మార్క్ చేయి...</translation>
+<translation id="4474155171896946103">అన్ని ట్యాబ్‌లను బుక్‌మార్క్ చేయండి...</translation>
<translation id="4475552974751346499">డౌన్‌లోడ్‌లను వెతకండి</translation>
<translation id="4475830133618397783">ఏ పాస్‌వర్డ్‌లను తరలించాలో ఎంచుకోండి. మీరెప్పుడు సైన్ ఇన్ చేసినా, వాటిని యాక్సెస్ చేయవచ్చు.</translation>
<translation id="4476590490540813026">అథ్లెట్</translation>
@@ -3630,7 +3630,7 @@
<translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> క్రాష్ అయింది</translation>
<translation id="450099669180426158">ఆశ్చర్యార్థక గుర్తు చిహ్నం</translation>
<translation id="4501530680793980440">తీసివేతను నిర్ధారించండి</translation>
-<translation id="4502423230170890588">ఈ పరికరం నుండి తీసివేయి</translation>
+<translation id="4502423230170890588">ఈ పరికరం నుండి తీసివేయండి</translation>
<translation id="4502477450742595012">ట్యాబ్‌పై కుడి క్లిక్ చేసి, "కొత్త గ్రూప్‌నకు ట్యాబ్‌ను జోడించండి" అనే ఆప్షన్‌ను ఎంచుకోండి</translation>
<translation id="4503748371388753124">మీ కంప్యూటర్ విశ్వసనీయ ప్లాట్‌ఫామ్ మాడ్యూల్ (TPM) సెక్యూరిటీ పరికరాన్ని కలిగి ఉంది, ఇది ChromeOS Flexలో అనేక కీలకమైన సెక్యూరిటీ ఫీచర్‌లను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=tpm</translation>
<translation id="4504374760782163539">{COUNT,plural, =0{కుక్కీలు అనుమతించబడ్డాయి}=1{కుక్కీలు అనుమతించబడ్డాయి, 1 మినహాయింపు}other{కుక్కీలు అనుమతించబడ్డాయి, {COUNT} మినహాయింపులు}}</translation>
@@ -3647,7 +3647,7 @@
<translation id="4513946894732546136">ఫీడ్‌బ్యాక్</translation>
<translation id="451407183922382411"><ph name="COMPANY_NAME" /> అందిస్తోంది</translation>
<translation id="4514610446763173167">ప్లే లేదా పాజ్ చేయడానికి వీడియోని టోగుల్ చేయండి</translation>
-<translation id="451515744433878153">తీసివేయి</translation>
+<translation id="451515744433878153">తీసివేయండి</translation>
<translation id="4515872537870654449">సేవ పొందడానికి డెల్‌ను సంప్రదించండి. ఫ్యాన్ పని చేయలేదంటే, ఈ డాక్ షట్ డౌన్ అవుతుంది.</translation>
<translation id="4519331665958994620">మీ కెమెరాను ఉపయోగించడానికి సైట్‌లు అడగవచ్చు</translation>
<translation id="4519935350946509010">కనెక్షన్ ఎర్రర్.</translation>
@@ -3733,7 +3733,7 @@
<translation id="4592891116925567110">స్టైలస్ డ్రాయింగ్ యాప్</translation>
<translation id="4593021220803146968"><ph name="URL" />కు &amp;వెళ్ళండి</translation>
<translation id="4594577641390224176">సిస్టమ్‌కు సంబంధించిన వివరాల పేజీ కోసం వెతుకుతున్నారా? సందర్శించండి</translation>
-<translation id="4595560905247879544">యాప్‌లు మరియు ఎక్స్‌టెన్షన్‌లను నిర్వాహకుడు (<ph name="CUSTODIAN_NAME" />) మాత్రమే సవరించగలరు.</translation>
+<translation id="4595560905247879544">యాప్‌లు మరియు ఎక్స్‌టెన్షన్‌లను నిర్వాహకుడు (<ph name="CUSTODIAN_NAME" />) మాత్రమే ఎడిట్ చేయగలరు.</translation>
<translation id="4596295440756783523">మీకు ఫైల్‌లో ఈ సర్వర్‌లను గుర్తించే ప్రమాణపత్రాలు ఉన్నాయి</translation>
<translation id="4598556348158889687">నిల్వ నిర్వహణ</translation>
<translation id="4598776695426288251">బహుళ పరికరాల ద్వారా Wi-Fi అందుబాటులో ఉంది</translation>
@@ -3763,7 +3763,7 @@
<translation id="4627442949885028695">మరో పరికరం నుండి కొనసాగించండి</translation>
<translation id="4628762811416793313">Linux కంటెయినర్ సెటప్ పూర్తి కాలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="4629521233550547305"><ph name="PROFILE_NAME" /> ప్రొఫైల్‌ను తెరవు</translation>
-<translation id="4632655012900268062">కార్డ్‌లను అనుకూలంగా మార్చు</translation>
+<translation id="4632655012900268062">కార్డ్‌లను అనుకూలంగా మార్చండి</translation>
<translation id="4633003931260532286">"<ph name="IMPORT_NAME" />" యొక్క వెర్షన్ కనీసం "<ph name="IMPORT_VERSION" />" ఉండాలని ఎక్స్‌టెన్షన్ కోరుతోంది, కానీ "<ph name="INSTALLED_VERSION" />" వెర్షన్ మాత్రమే ఇన్‌స్టాల్ చేయబడి ఉంది</translation>
<translation id="4633757335284074492">Google Driveలో బ్యాకప్ చేయండి. సులభంగా డేటాను పునరుద్ధరించండి లేదా ఏ సమయంలో అయినా పరికరాన్ని మార్చండి. ఈ బ్యాకప్‌లో యాప్ డేటా కూడా ఉంటుంది. బ్యాకప్‌లు Googleకు అప్‌లోడ్ అవుతాయి, మీ చిన్నారి Google ఖాతా పాస్‌వర్డ్‌ను ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి.</translation>
<translation id="4634575639321169635">పని కోసం లేదా వ్యక్తిగత వినియోగం కోసం ఈ పరికరాన్ని సెటప్ చేయండి</translation>
@@ -3776,7 +3776,7 @@
<translation id="4637189644956543313">కెమెరాను మళ్లీ ఉపయోగించు</translation>
<translation id="4637252186848840278">{COUNT,plural, =1{టెక్స్ట్}other{# టెక్స్ట్‌లు}}</translation>
<translation id="4638930039313743000">ADB డీబగ్గింగ్‌ను ఎనేబుల్ చేయండి</translation>
-<translation id="4641539339823703554">Chrome సిస్టమ్ సమయాన్ని సెట్ చేయలేకపోయింది. దయచేసి దిగువ సమయాన్ని తనిఖీ చేసి, అవసరమైతే సరిదిద్దండి.</translation>
+<translation id="4641539339823703554">Chrome సిస్టమ్ సమయాన్ని సెట్ చేయలేకపోయింది. దయచేసి దిగువ సమయాన్ని చెక్ చేసి, అవసరమైతే సరిదిద్దండి.</translation>
<translation id="4643612240819915418">కొత్త ట్యాబ్‌లో వీడియోను &amp;తెరవండి</translation>
<translation id="4643833688073835173">మీ పరికరం ముందు వ్యక్తులను గుర్తించడానికి మీ Chromebook బిల్ట్-ఇన్ సెన్సార్‌ను ఉపయోగిస్తుంది. మీ పరికరంలో డేటా మొత్తం వెంటనే ప్రాసెస్ చేయబడుతుంది, ఆ తర్వాత తొలగించబడుతుంది. సెన్సార్ డేటా ఎప్పుడూ Googleకు పంపబడదు.</translation>
<translation id="4644205769234414680">అజ్ఞాతంలో అనుమతించండి</translation>
@@ -3853,7 +3853,7 @@
<translation id="4701540735981103145">సైన్ ఇన్‌ను మీ అడ్మిన్ బ్లాక్ చేశారు</translation>
<translation id="4707337002099455863">ఎల్లప్పుడూ అన్ని సైట్‌లలో అనుమతించండి</translation>
<translation id="4708794300267213770">నిద్రావస్థ నుండి సక్రియం అవుతున్నప్పుడు లాక్ స్క్రీన్‌ని చూపు</translation>
-<translation id="4708849949179781599"><ph name="PRODUCT_NAME" /> నిష్క్రమించు</translation>
+<translation id="4708849949179781599"><ph name="PRODUCT_NAME" /> నిష్క్రమించండి</translation>
<translation id="4711638718396952945">సెట్టింగ్‌లను పునరుద్ధరించు</translation>
<translation id="47158868804223727">గ్రూప్ పేరుపై క్లిక్ చేసి, దాన్ని విస్తరించండి లేదా కుదించండి</translation>
<translation id="4716483597559580346">అదనపు భద్రత కోసం పవర్ వాష్ చేయండి</translation>
@@ -3880,7 +3880,7 @@
<translation id="4742334355511750246">ఇమేజ్‌లను చూపడానికి అనుమతించబడలేదు</translation>
<translation id="4742970037960872810">హైలైట్‌ను తీసివేయండి</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />అప్లికేషన్‌లను ఎలా అప్‌డేట్ చేయాలో తెలుసుకోండి<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{సైట్‌ను అన్‌మ్యూట్ చేయి}other{సైట్‌లను అన్‌మ్యూట్ చేయి}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{సైట్‌ను అన్‌మ్యూట్ చేయండి}other{సైట్‌లను అన్‌మ్యూట్ చేయండి}}</translation>
<translation id="474609389162964566">"Ok Google"తో మీ Assistantను యాక్సెస్ చేయండి</translation>
<translation id="4746351372139058112">Messages</translation>
<translation id="4748783296226936791">అసాధారణ కీబోర్డ్‌లు, గేమ్ కంట్రోలర్‌లు, అలాగే ఇతర పరికరాలను ఉపయోగించే ఫీచర్‌ల కోసం సైట్‌లు సాధారణంగా HID పరికరాలకు కనెక్ట్ అవుతాయి</translation>
@@ -3911,7 +3911,7 @@
<translation id="4781443161433589743">మీరు అత్యంత సురక్షితమైన Chrome సెక్యూరిటీని కలిగి ఉన్నారు</translation>
<translation id="4785719467058219317">మీరు ఈ వెబ్‌సైట్‌తో నమోదు కాని సెక్యూరిటీ కీని ఉపయోగిస్తున్నారు</translation>
<translation id="4785914069240823137">కత్తిరింపును రద్దు చేయండి</translation>
-<translation id="4788092183367008521">దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="4788092183367008521">దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="4789550509729954245">పరికరాలు సమీపంలోని షేర్ చేస్తున్నప్పుడు నోటిఫికేషన్‌ను చూడండి</translation>
<translation id="4791000909649665275"><ph name="NUMBER" /> ఫోటో</translation>
<translation id="4791037424585594169">(UDP)</translation>
@@ -3925,7 +3925,7 @@
<translation id="479863874072008121">పరికరాలను మేనేజ్ చేయండి</translation>
<translation id="4800839971935185386">పేరు &amp; చిహ్నం అప్‌డేట్‌లను రివ్యూ చేయండి</translation>
<translation id="4801448226354548035">ఖాతాలను దాచు</translation>
-<translation id="4801512016965057443">మొబైల్ డేటా రోమింగ్‌ను అనుమతించు</translation>
+<translation id="4801512016965057443">మొబైల్ డేటా రోమింగ్‌ను అనుమతించండి</translation>
<translation id="4804818685124855865">డిస్‌కనెక్ట్ చేయి</translation>
<translation id="4804827417948292437">వెన్నపండు</translation>
<translation id="4806457879608775995">ఈ నిబంధనలను రివ్యూ చేయండి, మీ డేటాను కంట్రోల్ చేయండి</translation>
@@ -4054,7 +4054,7 @@
<translation id="4918086044614829423">ఆమోదించు</translation>
<translation id="4918134162946436591">సూచించే ఓవర్‌లేను చూపించు</translation>
<translation id="4921348630401250116">టెక్స్ట్-టు-స్పీచ్</translation>
-<translation id="492299503953721473">Android యాప్‌లను తీసివేయి</translation>
+<translation id="492299503953721473">Android యాప్‌లను తీసివేయండి</translation>
<translation id="492363500327720082"><ph name="APP_NAME" />ను అన్ఇన్‌స్టాల్ చేస్తోంది...</translation>
<translation id="4924002401726507608">ఫీడ్‌బ్యాక్‌ను సమర్పించండి</translation>
<translation id="4924352752174756392">12x</translation>
@@ -4104,12 +4104,12 @@
<translation id="4972129977812092092">ప్రింటర్‌ను ఎడిట్ చేయండి</translation>
<translation id="4972164225939028131">పాస్‌వర్డ్ తప్పు</translation>
<translation id="4972737347717125191">వర్చువల్ రియాలిటీ పరికరాలు, డేటాను ఉపయోగించడానికి సైట్‌లు అడగగలవు</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{సైట్‌ని మ్యూట్ చేయండి}other{సైట్‌లను మ్యూట్ చేయండి}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{సైట్‌ను మ్యూట్ చేయండి}other{సైట్‌లను మ్యూట్ చేయండి}}</translation>
<translation id="497403230787583386">సెక్యూరిటీ చెక్‌లు పూర్తయ్యాయి. మీ డాక్యుమెంట్ ప్రింట్ చేయబడుతుంది.</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">యాక్సెస్‌ను నిర్ధారించండి</translation>
<translation id="4980805016576257426">ఈ ఎక్స్‌టెన్షన్‌లో మాల్వేర్ ఉంది.</translation>
-<translation id="4981449534399733132">మీ అన్ని సమకాలీకరించబడుతున్న పరికరాలతో సహా, మీ Google ఖాతా నుండి బ్రౌజింగ్ డేటాను తీసివేయడానికి, <ph name="BEGIN_LINK" />సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation>
+<translation id="4981449534399733132">మీ అన్ని సింక్ చేయబడుతున్న పరికరాలతో సహా, మీ Google ఖాతా నుండి బ్రౌజింగ్ డేటాను తీసివేయడానికి, <ph name="BEGIN_LINK" />సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation>
<translation id="4982236238228587209">పరికరం సాఫ్ట్‌వేర్</translation>
<translation id="4985248278475639481">యాడ్‌ల వ్యక్తిగతీకరణ గురించి</translation>
<translation id="4986728572522335985">ఇది 'సెక్యూరిటీ కీ'లోని మొత్తం డేటాను, అలాగే దాని పిన్‌ను తొలగిస్తుంది</translation>
@@ -4130,7 +4130,7 @@
<translation id="5005498671520578047">పాస్‌వర్డ్ కాపీచేయడం</translation>
<translation id="5006118752738286774">2 సంవత్సరాల క్రితం</translation>
<translation id="5006218871145547804">Crostini Android యాప్ ADB</translation>
-<translation id="5007392906805964215">సమీక్షించు</translation>
+<translation id="5007392906805964215">రివ్యూ చేయండి</translation>
<translation id="50080882645628821">ప్రొఫైల్‌ను తీసివేయండి</translation>
<translation id="5008936837313706385">యాక్టివిటీ పేరు</translation>
<translation id="5009463889040999939">ప్రొఫైల్ పేరు మార్చుతోంది. దీనికి కొన్ని నిమిషాలు పట్టవచ్చు.</translation>
@@ -4149,7 +4149,7 @@
<translation id="5026874946691314267">దీన్ని మళ్లీ చూపవద్దు</translation>
<translation id="5027550639139316293">ఈమెయిల్‌ సర్టిఫికెట్</translation>
<translation id="5027562294707732951">ఎక్స్‌టెన్షన్‌ని జోడించు</translation>
-<translation id="5029568752722684782">కాపీని తీసివేయి</translation>
+<translation id="5029568752722684782">కాపీని తీసివేయండి</translation>
<translation id="5029873138381728058">వర్చువల్ మెషీన్‌లను చెక్ చేయడం విఫలమైంది</translation>
<translation id="503155457707535043">యాప్‌లు డౌన్‌లోడ్ చేయబడుతున్నాయి</translation>
<translation id="5032430150487044192">QR కోడ్‌ను క్రియేట్ చేయడం సాధ్యపడదు</translation>
@@ -4159,7 +4159,7 @@
<translation id="5038022729081036555">మీరు రేపు <ph name="TIME_LIMIT" /> పాటు ఉపయోగించవచ్చు.</translation>
<translation id="5038818366306248416">మీరు మునుపు <ph name="ORIGIN" />లో ఎటువంటి ఎక్స్‌టెన్షన్‌లను అనుమతించకూడదని ఎంచుకున్నారు</translation>
<translation id="5039696241953571917">మీ Google ఖాతాలో సేవ్ చేసిన పాస్‌వర్డ్‌లను చూడండి, మేనేజ్ చేయండి</translation>
-<translation id="5039804452771397117">అనుమతించు</translation>
+<translation id="5039804452771397117">అనుమతించండి</translation>
<translation id="5040823038948176460">అదనపు కంటెంట్ సెట్టింగ్‌లు</translation>
<translation id="5041509233170835229">Chrome యాప్</translation>
<translation id="5043440033854483429">పేరులో అక్షరాలు, నంబర్‌లు, ఇంకా హైఫన్‌లు (-) ఉపయోగించవచ్చు, ఇంకా పేరు తప్పనిసరిగా 1 నుండి 15 (వీటిని కలుపుకుని) అక్షరాల మధ్యలో ఉండాలి.</translation>
@@ -4220,7 +4220,7 @@
<translation id="5101839224773798795">కర్సర్ ఆపినప్పుడు ఆటోమేటిక్‌గా క్లిక్ అవుతుంది</translation>
<translation id="510695978163689362"><ph name="USER_EMAIL" /> Family Link ద్వారా పర్యవేక్షించబడుతుంది. మీరు తల్లిదండ్రుల పర్యవేక్షణతో స్కూల్ రిసోర్స్‌లను యాక్సెస్ చేయడానికి స్కూల్ ఖాతాలను జోడించవచ్చు.</translation>
<translation id="5107443654503185812">ఎక్స్‌టెన్షన్, సురక్షిత బ్రౌజింగ్‌ను ఆఫ్ చేసింది</translation>
-<translation id="5108967062857032718">సెట్టింగ్‌లు - Android యాప్‌లను తీసివేయి</translation>
+<translation id="5108967062857032718">సెట్టింగ్‌లు - Android యాప్‌లను తీసివేయండి</translation>
<translation id="5109044022078737958">మియా</translation>
<translation id="5109816792918100764"><ph name="LANGUAGE_NAME" />‌ను తీసివేస్తుంది</translation>
<translation id="5111646998522066203">అజ్ఞాత మోడ్‌ని విడిచిపెట్టు</translation>
@@ -4375,7 +4375,7 @@
<translation id="5260334392110301220">స్మార్ట్ కోట్‌లు</translation>
<translation id="5260508466980570042">క్షమించండి, మీ ఈమెయిల్‌ లేదా పాస్‌వర్డ్ ధృవీకరించబడలేదు. దయచేసి మళ్ళీ ప్రయత్నించండి.</translation>
<translation id="5261683757250193089">వెబ్ స్టోర్‌లో తెరవండి</translation>
-<translation id="5262178194499261222">పాస్‌వర్డ్‌ను తీసివేయి</translation>
+<translation id="5262178194499261222">పాస్‌వర్డ్‌ను తీసివేయండి</translation>
<translation id="526260164969390554">ఫుల్ స్క్రీన్ మ్యాగ్నిఫైయర్‌ను ఆన్ లేదా ఆఫ్ చేయడానికి Ctrl+<ph name="SEARCH_KEY_NAME" />+M కీలను నొక్కండి. దగ్గరగా జూమ్ చేసినప్పుడు అంతటా తిరగడానికి Ctrl+Alt+బాణం కీలను నొక్కండి.</translation>
<translation id="5262784498883614021">నెట్‌వర్క్‌కు ఆటోమేటిక్‌గా కనెక్ట్ చేయడం</translation>
<translation id="5264148714798105376">ఇది ఇంచుమించు ఒక నిమిషంలో పూర్తి కావచ్చు.</translation>
@@ -4388,7 +4388,7 @@
<translation id="5273806377963980154">సైట్ URLను ఎడిట్ చేయండి</translation>
<translation id="5275352920323889391">కుక్క</translation>
<translation id="527605719918376753">ట్యాబ్‌ను మ్యూట్ చేయి</translation>
-<translation id="527605982717517565"><ph name="HOST" />పై ఎల్లప్పుడూ JavaScriptను అనుమతించు</translation>
+<translation id="527605982717517565"><ph name="HOST" />పై ఎల్లప్పుడూ JavaScriptను అనుమతించండి</translation>
<translation id="5277127016695466621">సైడ్ ప్యానెల్‌ను చూడండి</translation>
<translation id="5278823018825269962">స్టేటస్ Id</translation>
<translation id="5280064835262749532"><ph name="SHARE_PATH" /> కోసం ఆధారాలు అప్‌డేట్ చేయండి</translation>
@@ -4512,7 +4512,7 @@
<translation id="5398572795982417028">పేజీ సూచన పరిమితిని దాటిపోయారు, పరిమితి <ph name="MAXIMUM_PAGE" /></translation>
<translation id="5401426944298678474">సైట్‌ను అన్-ఫాలో చేయండి</translation>
<translation id="5402815541704507626">మొబైల్ డేటా ఉపయోగించి అప్‌డేట్‌ను డౌన్‌లోడ్ చేయండి</translation>
-<translation id="540296380408672091"><ph name="HOST" />లో కుక్కీలను ఎల్లప్పుడూ బ్లాక్ చేయి</translation>
+<translation id="540296380408672091"><ph name="HOST" />లో కుక్కీలను ఎల్లప్పుడూ బ్లాక్ చేయండి</translation>
<translation id="5404740137318486384">స్విచ్ లేదా కీబోర్డ్ కీని "<ph name="ACTION" />"కు అసైన్ చేయడానికి సదరు స్విచ్ లేదా కీబోర్డ్ కీని నొక్కండి.
మీరు ఈ చర్య కోసం అనేక స్విచ్‌లను అసైన్ చేయవచ్చు.</translation>
<translation id="540495485885201800">మునుపటి దానితో స్వాప్ చేయి</translation>
@@ -4544,7 +4544,7 @@
<translation id="5434065355175441495">PKCS #1 RSA ఎన్‌క్రిప్షన్</translation>
<translation id="5435779377906857208">మీ లొకేషన్‌ను యాక్సెస్ చేయడానికి <ph name="HOST" />ని ఎల్లప్పుడూ అనుమతించండి</translation>
<translation id="5436492226391861498">ప్రాక్సీ టనెల్ కోసం వేచి ఉంది...</translation>
-<translation id="5436510242972373446"><ph name="SITE_NAME" /> వెతుకు:</translation>
+<translation id="5436510242972373446"><ph name="SITE_NAME" /> వెతకండి:</translation>
<translation id="5436575196282187764">Google Photos జ్ఞాపకాలు</translation>
<translation id="5439680044267106777">స్కిప్ చేసి, కొత్త ప్రొఫైల్‌ను సెటప్ చేయండి</translation>
<translation id="544083962418256601">షార్ట్‌కట్‌లను క్రియేట్ చేయండి...</translation>
@@ -4555,7 +4555,7 @@
<translation id="5447384712203291074"><ph name="ITEM_COUNT_MULTIPLE" /> ఐటెమ్‌లు</translation>
<translation id="5448293924669608770">అయ్యో, సైన్ ఇన్ చేయడంలో ఏదో తప్పు జరిగింది</translation>
<translation id="5449551289610225147">పాస్‌వర్డ్ చెల్లదు</translation>
-<translation id="5449588825071916739">అన్ని ట్యాబ్‌లను బుక్‌మార్క్ చేయి</translation>
+<translation id="5449588825071916739">అన్ని ట్యాబ్‌లను బుక్‌మార్క్ చేయండి</translation>
<translation id="5449716055534515760">&amp;విండో మూసివెయ్యి</translation>
<translation id="5452976525201205853"><ph name="LANGUAGE" /> (ఆఫ్‌లైన్‌లో పని చేస్తుంది)</translation>
<translation id="5454166040603940656"><ph name="PROVIDER" />తో</translation>
@@ -4593,7 +4593,7 @@
<translation id="5486261815000869482">పాస్‌వర్డ్‌ని నిర్ధారించండి</translation>
<translation id="5486561344817861625">బ్రౌజర్ పునఃప్రారంభాన్ని ప్రారంభించండి</translation>
<translation id="5487460042548760727"><ph name="PROFILE_NAME" />కు ప్రొఫైల్ పేరుమార్చండి</translation>
-<translation id="5487521232677179737">డేటాని తీసివేయి</translation>
+<translation id="5487521232677179737">డేటాను తీసివేయండి</translation>
<translation id="5488093641312826914">'<ph name="COPIED_ITEM_NAME" />' కాపీ చేయబడింది</translation>
<translation id="5488508217173274228">సింక్ ఎన్‌క్రిప్షన్ ఆప్షన్‌లు</translation>
<translation id="5489435190927933437"><ph name="DOMAIN" /> కోసం సేవ్ చేసిన పాస్‌వర్డ్‌లు</translation>
@@ -4659,7 +4659,7 @@
<translation id="554229901779827904">మీ ఖాతాను <ph name="MANAGER_NAME" /> మేనేజ్ చేస్తున్నారు. మీ అడ్మినిస్ట్రేటర్ ఈ Chrome బ్రౌజర్ ప్రొఫైల్‌ను, దాని డేటాను చూడగలరు, ఎడిట్ చేయగలరు. మీ డేటాలో బుక్‌మార్క్‌లు, హిస్టరీ, పాస్‌వర్డ్‌లు ఉంటాయి.</translation>
<translation id="5542750926112347543"><ph name="DOMAIN" /> నుండి కుక్కీలు బ్లాక్ చేయబడ్డాయి</translation>
<translation id="5542949973455282971"><ph name="CARRIER_NAME" />కు కనెక్ట్ చేయబడుతోంది</translation>
-<translation id="5543983818738093899">స్థితి కోసం తనిఖీ చేస్తోంది...</translation>
+<translation id="5543983818738093899">స్థితి కోసం చెక్ చేస్తోంది...</translation>
<translation id="554517701842997186">రెండరర్</translation>
<translation id="5545335608717746497">{NUM_TABS,plural, =1{ట్యాబ్‌ను గ్రూప్‌నకు జోడించు}other{ట్యాబ్‌లను గ్రూప్‌నకు జోడించు}}</translation>
<translation id="5545693483061321551">వివిధ సైట్‌లలో మీ బ్రౌజింగ్ యాక్టివిటీని చూడటానికి సైట్‌లు మీ కుక్కీలను ఉపయోగించలేవు, ఉదాహరణకు, యాడ్‌లను వ్యక్తిగతీకరించడం. కొన్ని సైట్‌లలోని ఫీచర్‌లు పని చేయకపోవచ్చు.</translation>
@@ -4722,7 +4722,7 @@
<translation id="5600706100022181951"><ph name="UPDATE_SIZE_MB" /> MB మొబైల్ డేటాను ఉపయోగించి అప్‌డేట్‌ డౌన్‌లోడ్ చేయబడుతుంది. మీరు కొనసాగాలని అనుకుంటున్నారా?</translation>
<translation id="5601503069213153581">PIN</translation>
<translation id="5601823921345337195">MIDI పరికరాలకు కనెక్ట్ చేయడానికి అనుమతించబడలేదు</translation>
-<translation id="5602765853043467355">ఈ పరికరం నుండి బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు వంటివాటిని తీసివేయి</translation>
+<translation id="5602765853043467355">ఈ పరికరం నుండి బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు వంటివాటిని తీసివేయండి</translation>
<translation id="5605623530403479164">ఇతర సెర్చ్ ఇంజిన్‌లు</translation>
<translation id="5605758115928394442">మీరేనని నిర్ధారించుకోవడానికి మీ ఫోన్‌కు ఒక నోటిఫికేషన్ పంపబడింది.</translation>
<translation id="5606849116180480101">{NUM_EXTENSIONS,plural, =1{ఈ ఎక్స్‌టెన్షన్ బ్లాక్ చేయబడింది}other{ఈ ఎక్స్‌టెన్షన్‌లు బ్లాక్ చేయబడ్డాయి}}</translation>
@@ -4778,7 +4778,7 @@
<translation id="5653154844073528838">మీరు సేవ్ చేయబడిన <ph name="PRINTER_COUNT" /> ప్రింటర్‌లు కలిగి ఉన్నారు.</translation>
<translation id="5655296450510165335">పరికర ఎన్‌రోల్‌మెంట్</translation>
<translation id="5656845498778518563">Googleకు ఫీడ్‌బ్యాక్‌ పంపండి</translation>
-<translation id="5657156137487675418">అన్ని కుక్కీలను అనుమతించు</translation>
+<translation id="5657156137487675418">అన్ని కుక్కీలను అనుమతించండి</translation>
<translation id="5657667036353380798">బాహ్య ఎక్స్‌టెన్షన్‌కు chrome వెర్షన్ <ph name="MINIMUM_CHROME_VERSION" /> లేదా అంతకంటే అధిక వెర్షన్‌ను ఇన్‌స్టాల్ చేయడం అవసరం.</translation>
<translation id="5658415415603568799">అదనపు భద్రత కోసం, 20 గంటల తర్వాత మీ పాస్‌వర్డ్‌‌ను నమోదు చేయమని మీ Smart Lock అడుగుతుంది.</translation>
<translation id="5659593005791499971">ఈమెయిల్‌</translation>
@@ -4868,7 +4868,7 @@
<translation id="5762787084360227629">Google ఖాతా సమాచారాన్ని ఎంటర్ చేయండి</translation>
<translation id="5763751966069581670">USB పరికరాలు కనుగొనబడలేదు</translation>
<translation id="5764483294734785780">ఆడియోని ఇలా సే&amp;వ్ చేయి...</translation>
-<translation id="57646104491463491">తేదీ సవరించబడింది</translation>
+<translation id="57646104491463491">తేదీ ఎడిట్ చేయబడింది</translation>
<translation id="5764797882307050727">దయచేసి మీ పరికరంలో కొంత స్థలాన్ని ఖాళీ చేయండి.</translation>
<translation id="5765425701854290211">క్షమించండి, కొన్ని ఫైళ్లు పాడయ్యాయి. అప్‌డేట్ విజయవంతం కాలేదు. మీ సింక్ చేసిన‌ ఫైళ్లు సురక్షితంగా ఉన్నాయి.</translation>
<translation id="5765491088802881382">నెట్‌వర్క్‌లు ఏవీ అందుబాటులో లేవు</translation>
@@ -4879,7 +4879,7 @@
<translation id="5772265531560382923">{NUM_PAGES,plural, =1{ఇది ప్రతిస్పందించే వరకు మీరు వేచి ఉండవచ్చు లేదా పేజీ నుండి మీరు నిష్క్రమించవచ్చు.}other{ఇవి ప్రతిస్పందించే వరకు మీరు వేచి ఉండవచ్చు లేదా పేజీల నుండి మీరు నిష్క్రమించవచ్చు.}}</translation>
<translation id="577322787686508614">దీనిలో చదివే చర్యకు అనుమతి లేదు: "<ph name="DEVICE_NAME" />".</translation>
<translation id="5774295353725270860">ఫైల్స్ యాప్‌ను తెరువు</translation>
-<translation id="577624874850706961">కుకీలను వెతుకు</translation>
+<translation id="577624874850706961">కుకీలను వెతకండి</translation>
<translation id="5776450228446082914">ఈ వెబ్‌సైట్‌ల లిస్ట్‌ను ఏదొక బ్రౌజర్‌లో తెరవవచ్చు.</translation>
<translation id="5776571780337000608">మీ ఫైల్ బ్రౌజర్ లేదా ఇతర యాప్‌ల నుండి ఈ యాప్‌తో, సపోర్ట్ ఉన్న ఫైల్స్‌ను మీరు తెరవవచ్చు, ఎడిట్ చేయవచ్చు. ఈ యాప్‌తో ఆటోమేటిక్‌గా ఏ ఫైల్స్ తెరుచుకోవాలి అనే దానిని కంట్రోల్ చేయడానికి, <ph name="BEGIN_LINK" />మీ పరికరంలో ఆటోమేటిక్ యాప్‌లను సెట్ చేయడం ఎలాగో తెలుసుకోండి<ph name="END_LINK" />.</translation>
<translation id="5777468213129569553">Chromeని తెరవండి</translation>
@@ -4904,7 +4904,7 @@
<translation id="5794034487966529952"><ph name="DESK_TITLE" /> డెస్క్‌లో <ph name="NUM_BROWSERS" /> బ్రౌజర్ విండోలు తెరిచి ఉన్నాయి</translation>
<translation id="5794414402486823030">ఎల్లప్పుడూ సిస్టమ్ వ్యూయర్‌తో తెరువు</translation>
<translation id="5794700615121138172">Linux షేర్ చేసిన ఫోల్డర్‌లు</translation>
-<translation id="5794786537412027208">అన్ని Chrome యాప్‌ల నుండి నిష్క్రమించు</translation>
+<translation id="5794786537412027208">అన్ని Chrome యాప్‌ల నుండి నిష్క్రమించండి</translation>
<translation id="5796485699458186843">కొత్త అజ్ఞాత ట్యాబ్</translation>
<translation id="5797521893972859201">సెర్చ్ బాక్స్‌లోని హిస్టరీతో సహా క్లియర్ చేస్తుంది</translation>
<translation id="5798079537501238810">సైట్‌లు పేమెంట్ హ్యాండ్లర్‌లను ఇన్‌స్టాల్ చేయగలవు</translation>
@@ -4987,7 +4987,7 @@
<translation id="5876576639916258720">రన్ అవుతోంది...</translation>
<translation id="5876851302954717356">కుడివైపున కొత్త ట్యాబ్</translation>
<translation id="5877064549588274448">ఛానెల్ మార్చబడింది. మార్పులను వర్తింపజేయడానికి మీ పరికరాన్ని పునఃప్రారంభించండి.</translation>
-<translation id="5877584842898320529">ఎంచుకున్న ప్రింటర్ అందుబాటులో లేదు లేదా సరిగ్గా ఇన్‌స్టాల్ చేయబడలేదు. <ph name="BR" /> మీ ప్రింటర్‌ను తనిఖీ చేయండి లేదా మరొక ప్రింటర్‌ను ఎంచుకోవడాన్ని ప్రయత్నించండి.</translation>
+<translation id="5877584842898320529">ఎంచుకున్న ప్రింటర్ అందుబాటులో లేదు లేదా సరిగ్గా ఇన్‌స్టాల్ చేయబడలేదు. <ph name="BR" /> మీ ప్రింటర్‌ను చెక్ చేయండి లేదా మరొక ప్రింటర్‌ను ఎంచుకోవడాన్ని ప్రయత్నించండి.</translation>
<translation id="5882919346125742463">తెలిసిన నెట్‌వర్క్‌లు</translation>
<translation id="5883356647197510494"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ఆటోమేటిక్‌గా బ్లాక్ చేయబడ్డాయి</translation>
<translation id="5884474295213649357">ఈ ట్యాబ్ USB పరికరానికి కనెక్ట్ చేయబడింది.</translation>
@@ -5123,7 +5123,7 @@
<translation id="6016551720757758985">మునుపటి వెర్షన్‌కు తిరిగి మార్చేలా చేసే పవర్‌వాష్‌ను నిర్ధారించండి</translation>
<translation id="6016972670657536680">'భాష మరియు కీబోర్డ్‌ను ఎంచుకోండి' బటన్‌. ప్రస్తుతం ఎంచుకున్న భాష <ph name="LANGUAGE" />.</translation>
<translation id="6017514345406065928">ఆకుపచ్చ</translation>
-<translation id="6019169947004469866">కత్తిరించు</translation>
+<translation id="6019169947004469866">కత్తిరించండి</translation>
<translation id="6019851026059441029">అద్భుతం - HD</translation>
<translation id="6020431688553761150">మీకు ఈ వనరుని యాక్సెస్‌ చేయడానికి సర్వర్ అధికారం ఇవ్వలేదు.</translation>
<translation id="6022526133015258832">ఫుల్-స్క్రీన్‌ను తెరువు</translation>
@@ -5143,7 +5143,7 @@
<translation id="6040143037577758943">మూసివేయి</translation>
<translation id="6041046205544295907"><ph name="BEGIN_PARAGRAPH1" />మీ పరికర స్థానాన్ని అంచనా వేయడంలో సహాయపడటానికి Wi‑Fi, మొబైల్ నెట్‌వర్క్‌లు మరియు సెన్సార్‌ల వంటి మూలాధారాలను Google స్థాన సేవ ఉపయోగిస్తుంది.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />మీరు మీ పరికరంలో ప్రధాన స్థాన సెట్టింగ్‌ని ఆఫ్ చేయడం ద్వారా స్థానాన్ని ఆఫ్ చేయవచ్చు. మీరు స్థాన సెట్టింగ్‌లలో స్థానం కోసం Wi‑Fi, మొబైల్ నెట్‌వర్క్‌లు మరియు సెన్సార్‌ల వినియోగాన్ని కూడా ఆఫ్ చేయవచ్చు.<ph name="END_PARAGRAPH2" /></translation>
-<translation id="6041155700700864984">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించు</translation>
+<translation id="6041155700700864984">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించండి</translation>
<translation id="6042308850641462728">మరింత చూపించు</translation>
<translation id="604388835206766544">కాన్ఫిగరేషన్ అన్వయింపు విఫలమైంది</translation>
<translation id="6043994281159824495">ఇప్పుడే సైన్ అవుట్ చేయి</translation>
@@ -5159,13 +5159,13 @@
<translation id="6052284303005792909">•</translation>
<translation id="6052488962264772833">ప్రసారం చేయడాన్ని ప్రారంభించడానికి యాక్సెస్ కోడ్‌ను టైప్ చేయండి</translation>
<translation id="6052976518993719690">SSL ధృవీకరణ అధికారం</translation>
-<translation id="6053401458108962351">&amp;బ్రౌజింగ్‌ డేటాను క్లియర్ చేయి...</translation>
+<translation id="6053401458108962351">&amp;బ్రౌజింగ్‌ డేటాను క్లియర్ చేయండి...</translation>
<translation id="6054284857788651331">ఇటీవల మూసివేసిన ట్యాబ్ గ్రూప్</translation>
<translation id="6054961935262556546">విజిబిలిటీను మార్చు</translation>
<translation id="6055171183283175969">మీరు నమోదు చేసిన పాస్‌వర్డ్ తప్పు.</translation>
<translation id="6055392876709372977">RSA ఎన్‌క్రిప్షన్‌తో PKCS #1 SHA-256</translation>
<translation id="6056710589053485679">సాధారణంగా మళ్లీ లోడ్ చేయి</translation>
-<translation id="6057312498756061228">భద్రతా తనిఖీ చేయడానికి వీల్లేనంతగా ఈ ఫైల్ చాలా పెద్దగా ఉంది. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను తెరవగలరు.</translation>
+<translation id="6057312498756061228">భద్రతా చెక్ చేయడానికి వీల్లేనంతగా ఈ ఫైల్ చాలా పెద్దగా ఉంది. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను తెరవగలరు.</translation>
<translation id="6057381398996433816">మోషన్ మరియు లైట్ సెన్సార్‌లను ఉపయోగించనీయకుండా ఈ సైట్ బ్లాక్ చేయబడింది.</translation>
<translation id="6059276912018042191">ఇటీవలి Chrome ట్యాబ్‌లు</translation>
<translation id="6059652578941944813">సర్టిఫికెట్ అధికార క్రమం</translation>
@@ -5183,17 +5183,17 @@
<translation id="6073903501322152803">యాక్సెస్‌ ఫీచర్‌లను జోడించండి</translation>
<translation id="6075731018162044558">అయ్యో! ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్‌ టోకెన్‌ను పొందడంలో సిస్టమ్ విఫలమైంది.</translation>
<translation id="6075907793831890935"><ph name="HOSTNAME" /> పేరు గల పరికరంతో డేటాను ఇచ్చిపుచ్చుకోవడానికి అనుమతి</translation>
-<translation id="6076175485108489240">స్థానాన్ని ఉపయోగించండి. స్థాన అనుమతిని కలిగిన యాప్‌లు మరియు సేవలు మీ పరికర స్థానాన్ని ఉపయోగించడానికి అనుమతించండి. Google కాలానుగుణంగా స్థాన డేటాని సేకరించవచ్చు మరియు స్థాన ఖచ్చితత్వం మరియు స్థానం-ఆధారిత సేవలను మెరుగుపరచడం కోసం ఈ డేటాని అనామకంగా ఉపయోగించవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="6076175485108489240">స్థానాన్ని ఉపయోగించండి. స్థాన అనుమతిని కలిగిన యాప్‌లు మరియు సేవలు మీ పరికర స్థానాన్ని ఉపయోగించడానికి అనుమతించండి. Google కాలానుగుణంగా స్థాన డేటాను సేకరించవచ్చు మరియు స్థాన ఖచ్చితత్వం మరియు స్థానం-ఆధారిత సేవలను మెరుగుపరచడం కోసం ఈ డేటాను అనామకంగా ఉపయోగించవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
<translation id="6076491747490570887">లేత బూడిద రంగు</translation>
-<translation id="6077131872140550515">ప్రాధాన్య నెట్‌వర్క్‌ల నుండి తీసివేయి</translation>
+<translation id="6077131872140550515">ప్రాధాన్య నెట్‌వర్క్‌ల నుండి తీసివేయండి</translation>
<translation id="6077189836672154517"><ph name="DEVICE_TYPE" />కు సంబంధించిన చిట్కాలు మరియు అప్‌డేట్‌లు</translation>
<translation id="6077476112742402730">స్పీక్-టు-టైప్</translation>
<translation id="6078121669093215958">{0,plural, =1{గెస్ట్}other{# తెరవబడిన గెస్ట్ విండోలు}}</translation>
<translation id="6078323886959318429">షార్ట్‌కట్‌ను జోడించు</translation>
-<translation id="6078752646384677957">దయచేసి మీ మైక్రోఫోన్ మరియు ఆడియో స్థాయిలను తనిఖీ చేయండి.</translation>
+<translation id="6078752646384677957">దయచేసి మీ మైక్రోఫోన్ మరియు ఆడియో స్థాయిలను చెక్ చేయండి.</translation>
<translation id="6078769373519310690">"<ph name="CHROME_EXTENSION_NAME" />" ఒక HID పరికరానికి కనెక్ట్ కావాలని కోరుకుంటుంది</translation>
<translation id="608029822688206592">నెట్‌వర్క్ ఏదీ కనుగొనబడలేదు. దయచేసి మీ SIMను ఇన్‌సర్ట్ చేసి, మళ్లీ ట్రై చేయండి.</translation>
-<translation id="6080689532560039067">మీ సిస్టమ్ సమయాన్ని తనిఖీ చేయండి</translation>
+<translation id="6080689532560039067">మీ సిస్టమ్ సమయాన్ని చెక్ చేయండి</translation>
<translation id="6082877069782862752">కీ మ్యాపింగ్</translation>
<translation id="608531959444400877"><ph name="WINDOW_TITLE" /> - పేరు లేని గ్రూప్‌లో భాగం</translation>
<translation id="6085886413119427067">సెక్యూర్ కనెక్షన్ ద్వారా వెబ్‌సైట్‌లకు ఎలా కనెక్ట్ కావాలో నిశ్చయిస్తుంది</translation>
@@ -5223,7 +5223,7 @@
<translation id="6111972606040028426">Google Assistantను ఎనేబుల్ చేయండి</translation>
<translation id="6112294629795967147">పరిమాణం మార్చడం కోసం తాకండి</translation>
<translation id="6112727384379533756">టిక్కెట్‌ను జోడించు</translation>
-<translation id="6112931163620622315">మీ ఫోన్‌ని తనిఖీ చేయండి</translation>
+<translation id="6112931163620622315">మీ ఫోన్‌ని చెక్ చేయండి</translation>
<translation id="6113434369102685411">Chrome బ్రౌజర్, <ph name="DEVICE_TYPE" /> లాంచర్ కోసం మీ ఆటోమేటిక్ సెర్చ్ ఇంజిన్‌ను సెట్ చేయండి</translation>
<translation id="6113942107547980621">Smart Lockను ఉపయోగించడానికి, మీ ఫోన్‌లో ప్రాథమిక వినియోగదారు ప్రొఫైల్‌కు మారండి</translation>
<translation id="6116921718742659598">భాష మరియు ఇన్‌పుట్ సెట్టింగ్‌లను మార్చండి</translation>
@@ -5278,7 +5278,7 @@
<translation id="6163522313638838258">అన్నీ విస్తరించు...</translation>
<translation id="6165508094623778733">మరింత తెలుసుకోండి</translation>
<translation id="6166185671393271715">Chromeకి పాస్‌వర్డ్‌లను దిగుమతి చేయండి</translation>
-<translation id="6169040057125497443">దయచేసి మీ మైక్రోఫోన్‌ని తనిఖీ చేయండి.</translation>
+<translation id="6169040057125497443">దయచేసి మీ మైక్రోఫోన్‌ని చెక్ చేయండి.</translation>
<translation id="6169967265765719844">Steam ద్వారా ఇన్‌స్టాల్ చేయబడిన గేమ్‌లు, యాప్‌ల కోసం అనుమతులు <ph name="LINK_BEGIN" />Steam యాప్ సెట్టింగ్‌ల<ph name="LINK_END" />లో మేనేజ్ చేయబడతాయి.</translation>
<translation id="6170470584681422115">శాండ్విచ్</translation>
<translation id="6170498031581934115">ADB డీబగ్గింగ్‌ను ఎనేబుల్ చేయడం సాధ్యపడలేదు. సెట్టింగ్‌లకు వెళ్లి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
@@ -5350,12 +5350,12 @@
<translation id="6240821072888636753">ప్రతిసారి అడుగు</translation>
<translation id="6241530762627360640">మీ సిస్టమ్‌తో జత చేయబడిన బ్లూటూత్ పరికరాలకు సంబంధించిన సమాచారాన్ని యాక్సెస్‌ చేయడానికి, సమీపంలోని బ్లూటూత్ పరికరాలను కనుగొనడానికి అనుమతి.</translation>
<translation id="6241844896329831164">యాక్సెస్ అవసరం లేదు</translation>
-<translation id="6242574558232861452">మీ సంస్థకు చెందిన భద్రతా పాలసీలను తనిఖీ చేస్తోంది.</translation>
+<translation id="6242574558232861452">మీ సంస్థకు చెందిన భద్రతా పాలసీలను చెక్ చేస్తోంది.</translation>
<translation id="6242589501614145408">మీ సెక్యూరిటీ కీని రీసెట్ చేయండి</translation>
<translation id="6242852299490624841">ఈ ట్యాబ్‌పై దృష్టి కేంద్రీకరించు</translation>
<translation id="6243280677745499710">ప్రస్తుతం సెట్ చేసినది</translation>
<translation id="6243774244933267674">సర్వర్ అందుబాటులో లేదు</translation>
-<translation id="6244245036423700521">ONC ఫైల్‌ను దిగుమతి చేయి</translation>
+<translation id="6244245036423700521">ONC ఫైల్‌ను దిగుమతి చేయండి</translation>
<translation id="6246790815526961700">పరికరం నుండి అప్‌లోడ్ చేయి</translation>
<translation id="6247557882553405851">Google Password Manager</translation>
<translation id="6247620186971210352">యాప్‌లు ఏవీ కనుగొనబడలేదు</translation>
@@ -5429,7 +5429,7 @@
<translation id="6311220991371174222">మీ ప్రొఫైల్‌ను తెరుస్తున్నప్పుడు ఏదో తప్పు జరిగినందున Chromeను తెరవడం సాధ్యపడలేదు. Chromeను పునఃప్రారంభించడానికి ప్రయత్నించండి.</translation>
<translation id="6312567056350025599">{NUM_DAYS,plural, =1{భద్రతా తనిఖీ జరిగి 1 రోజు అయింది}other{భద్రతా తనిఖీ జరిగి {NUM_DAYS} రోజులు అయింది}}</translation>
<translation id="6312638141433622592">సపోర్ట్ ఉన్న సందర్భాలలో, రీడర్ మోడ్‌లో కథనాలను చూడగలిగే అవకాశం అందిస్తుంది</translation>
-<translation id="6313641880021325787">VRని నిష్క్రమించు</translation>
+<translation id="6313641880021325787">VRని నిష్క్రమించండి</translation>
<translation id="6313950457058510656">తక్షణ టెథరింగ్‌ను ఆఫ్ చేయడం</translation>
<translation id="6314819609899340042">మీరు ఈ <ph name="IDS_SHORT_PRODUCT_NAME" /> పరికరంలో డీబగ్గింగ్ ఫీచ‌ర్‌లను విజయవంతంగా ప్రారంభించారు.</translation>
<translation id="6315493146179903667">అన్నీ ముందుకు తీసుకెళ్లు</translation>
@@ -5511,7 +5511,7 @@
<translation id="6395423953133416962"><ph name="BEGIN_LINK1" />సిస్టమ్ సమాచారం<ph name="END_LINK1" /> మరియు <ph name="BEGIN_LINK2" />గణాంకాలు<ph name="END_LINK2" /> పంపు</translation>
<translation id="6396175271241405634">సిస్టమ్ యాప్</translation>
<translation id="6398715114293939307">Google Play Storeను తీసివేయండి</translation>
-<translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించు</translation>
+<translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించండి</translation>
<translation id="6399774419735315745">గూఢచారి</translation>
<translation id="6401597285454423070">మీ కంప్యూటర్ విశ్వసనీయ ప్లాట్‌ఫామ్ మాడ్యూల్ (TPM) సెక్యూరిటీ పరికరాన్ని కలిగి ఉంది, ఇది ChromeOSలో అనేక కీలకమైన సెక్యూరిటీ ఫీచర్‌లను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=tpm</translation>
<translation id="6404187344102273690">Chromebook గేమింగ్</translation>
@@ -5519,7 +5519,7 @@
<translation id="6406303162637086258">బ్రౌజర్ పునఃప్రారంభాన్ని ప్రారంభించు</translation>
<translation id="6406506848690869874">Sync</translation>
<translation id="6406708970972405507">సెట్టింగ్‌లు - <ph name="SECTION_TITLE" /></translation>
-<translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> మరియు <ph name="WEBSITE_3" />లో ఉన్న మీ డేటాని చదవడం మరియు మార్చడం</translation>
+<translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> మరియు <ph name="WEBSITE_3" />లో ఉన్న మీ డేటాను చదవడం మరియు మార్చడం</translation>
<translation id="6410257289063177456">చిత్రం ఫైళ్లు</translation>
<translation id="6410328738210026208">ఛానెల్ మరియు పవర్‌వాష్‌ను మార్చు</translation>
<translation id="6410390304316730527">ప్రమాదకరమైన సాఫ్ట్‌వేర్ ఇన్‌స్టాల్ చేసే విధంగా లేదా మీ పాస్‌వర్డ్‌లు, ఫోన్ నంబర్‌లు లేదా క్రెడిట్ కార్డ్‌ల వంటి మీ వ్యక్తిగత సమాచారాన్ని బహిర్గతం చేసే విధంగా మిమ్మల్ని మాయ చేసే హ్యాకర్‌ల నుండి మిమ్మల్ని సురక్షిత బ్రౌజింగ్ రక్షిస్తుంది. మీరు దీన్ని ఆఫ్ చేస్తే, అపరిచిత లేదా విశ్వసనీయం కాని సైట్‌లను బ్రౌజ్ చేసినప్పుడు జాగ్రత్త వహించండి.</translation>
@@ -5533,7 +5533,7 @@
<translation id="6417265370957905582">Google Assistant</translation>
<translation id="6417468503703810114">ఆటోమేటిక్ సెట్టింగ్ ప్రవర్తన</translation>
<translation id="6418160186546245112">మునుపు ఇన్‌స్టాల్ చేసిన <ph name="IDS_SHORT_PRODUCT_NAME" /> వెర్షన్‌కు తిరిగి మారుస్తోంది</translation>
-<translation id="6418481728190846787">అన్ని యాప్‌ల కోసం యాక్సెస్‌ను శాశ్వతంగా తీసివేయి</translation>
+<translation id="6418481728190846787">అన్ని యాప్‌ల కోసం యాక్సెస్‌ను శాశ్వతంగా తీసివేయండి</translation>
<translation id="6418511932144861495">కీలకమైన అప్‌డేట్‌ను ఇన్‌స్టాల్ చేయండి</translation>
<translation id="641899100123938294">కొత్త పరికరాల కోసం స్కాన్ చేయండి</translation>
<translation id="6419524191360800346">Debian 11 (Bullseye) కు అప్‌గ్రేడ్ అందుబాటులో ఉంది</translation>
@@ -5615,7 +5615,7 @@
<translation id="6499143127267478107">ప్రాక్సీ స్క్రిప్ట్‌లో హోస్ట్‌ను పరిష్కరిస్తోంది...</translation>
<translation id="6499764981457476645">సమీపంలో పరికరాలు ఏవీ కనుగొనబడలేదు</translation>
<translation id="6501957628055559556">అన్ని కంటైనర్లు</translation>
-<translation id="650266656685499220">ఆల్బమ్‌లను క్రియేట్ చేయడానికి, 'Google ఫోటోలు'కు వెళ్లండి</translation>
+<translation id="650266656685499220">ఆల్బమ్‌లను క్రియేట్ చేయడానికి, 'Google Photos'కు వెళ్లండి</translation>
<translation id="6503077044568424649">ఎక్కువగా సందర్శించేవి</translation>
<translation id="650457560773015827">ఎడమవైపు బటన్</translation>
<translation id="6504601948739128893">మీ పరికరంలో ఇన్‌స్టాల్ చేయబడిన ఫాంట్‌లను ఉపయోగించడానికి సైట్‌లకు అనుమతి లేదు</translation>
@@ -5636,7 +5636,7 @@
<ph name="EVENT_NAME" /></translation>
<translation id="6519689855001245063">అర్హతను చెక్ చేస్తోంది</translation>
<translation id="6520087076882753524">మీరు Google పాస్‌వర్డ్ మేనేజర్‌లో సేవ్ చేసిన పాస్‌వర్డ్‌లను చూడవచ్చు, మేనేజ్ చేయవచ్చు</translation>
-<translation id="6520876759015997832"><ph name="LIST_SIZE" /> శోధన ఫలితం <ph name="LIST_POSITION" />: <ph name="SEARCH_RESULT_TEXT" />. విభాగానికి నావిగేట్ చేయడానికి ఎంటర్ నొక్కండి.</translation>
+<translation id="6520876759015997832"><ph name="LIST_SIZE" /> సెర్చ్ ఫలితం <ph name="LIST_POSITION" />: <ph name="SEARCH_RESULT_TEXT" />. విభాగానికి నావిగేట్ చేయడానికి ఎంటర్ నొక్కండి.</translation>
<translation id="6521214596282732365">సైట్‌లు సాధారణంగా మీ ఫాంట్‌లను ఉపయోగించుకుంటాయి, తద్వారా ఆన్‌లైన్ డిజైన్, గ్రాఫిక్స్ టూల్స్‌తో మీరు అధిక క్వాలిటీ గల కంటెంట్‌ను క్రియేట్ చేయవచ్చు</translation>
<translation id="6523303810310758032">మీరు బ్రౌజింగ్ హిస్టరీ — మొత్తాన్ని లేదా ఒక నిర్దిష్ట సైట్‌కు సంబంధించిన బ్రౌజింగ్ హిస్టరీని తొలగించినప్పుడు — అనుబంధించి ఉన్న అంచనా సమాచారాన్ని కూడా మీరు తొలగిస్తారు. <ph name="BEGIN_LINK" />మీ బ్రౌజింగ్ హిస్టరీని<ph name="END_LINK" /> చూడండి</translation>
<translation id="6524735478670290456">మేము ఈ డేటాను ఎలా ఉపయోగిస్తాము:</translation>
@@ -5649,9 +5649,9 @@
<translation id="6532101170117367231">Google డిస్క్‌‌కు సేవ్ చేయండి</translation>
<translation id="6532106788206463496">మార్పులను సేవ్ చేయి</translation>
<translation id="6532206849875187177">భద్రత మరియు సైన్ ఇన్</translation>
-<translation id="6532527800157340614">మీ యాక్సెస్ టోకెన్‌ని పొందడం సాధ్యం కాలేదు కాబట్టి, సైన్ ఇన్ విఫలమైంది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="6532527800157340614">మీ యాక్సెస్ టోకెన్‌ని పొందడం సాధ్యం కాలేదు కాబట్టి, సైన్ ఇన్ విఫలమైంది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="6532663472409656417">ఎంటర్‌ప్రైజ్ నమోదు చేయబడింది</translation>
-<translation id="6535331821390304775">అనుబంధిత యాప్‌లో ఈ రకమైన లింక్‌లను తెరవడానికి <ph name="ORIGIN" />ను ఎల్లప్పుడూ అనుమతించు</translation>
+<translation id="6535331821390304775">అనుబంధిత యాప్‌లో ఈ రకమైన లింక్‌లను తెరవడానికి <ph name="ORIGIN" />ను ఎల్లప్పుడూ అనుమతించండి</translation>
<translation id="653659894138286600">డాక్యుమెంట్‌లు, ఇమేజ్‌లను స్కాన్ చేయండి</translation>
<translation id="6537613839935722475">పేరులో అక్షరాలు, నంబర్‌లు, అడ్డు గీతలు (-) ఉపయోగించవచ్చు</translation>
<translation id="6538098297809675636">కోడ్‌ను గుర్తించడంలో ఎర్రర్ ఏర్పడింది</translation>
@@ -5659,7 +5659,7 @@
<translation id="653983593749614101">కొనసాగించబడుతోంది…</translation>
<translation id="654039047105555694"><ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" /> డేటా సేకరణ వలన పనితీరు తగ్గవచ్చు, అందువల్ల‌ మీరు చేస్తున్నది మీకు తెలిసినప్పుడు లేదా ఇలా చేయాలని మీకు చెప్పినప్పుడు మాత్రమే ప్రారంభించండి.</translation>
<translation id="6541638731489116978">ఈ సైట్ మీ మోషన్ సెన్సార్‌లను యాక్సెస్ చేయనీయకుండా బ్లాక్ చేయబడింది.</translation>
-<translation id="6545665334409411530">పునరావృత రేటు</translation>
+<translation id="6545665334409411530">రిపీట్ రేటు</translation>
<translation id="6545867563032584178">Mac సిస్టమ్ ప్రాధాన్యతలలో మైక్రోఫోన్‌ ఆఫ్ చేయబడింది</translation>
<translation id="6546856949879953071">అప్‌గ్రేడ్ సమాచారా వివరాల కోసం, Files &gt; నా ఫైల్స్ &gt; <ph name="LOG_FILE" /> అనే సెట్టింగ్‌లో లాగ్స్ సేవ్ చేయబడతాయి</translation>
<translation id="6547354035488017500">కనీసం 512 MB స్థలాన్ని ఖాళీగా ఉంచండి, లేదంటే పరికరం ఇక స్పందించదు. స్థలాన్ని ఖాళీ చేయడానికి, పరికర నిల్వ నుండి ఫైళ్లను తొలగించండి.</translation>
@@ -5753,13 +5753,13 @@
<translation id="6635362468090274700">మీరు మీ సమీప షేరింగ్ విజిబిలిటీ సెట్టింగ్‌ను 'కనిపించు'కు సెట్ చేసేంత వరకు మీతో ఎవరూ షేర్ చేయలేరు.<ph name="BR" /><ph name="BR" />మీ సెట్టింగ్‌ను తాత్కాలికంగా 'కనిపించు'గా ఉంచడానికి స్టేటస్ ప్రాంతాన్ని తెరిచి, ఆపై సమీప విజిబిలిటీని ఆన్ చేయండి.</translation>
<translation id="6635674640674343739">నెట్‌వర్క్ కనెక్షన్‌ను ఏర్పాటు చేయడం సాధ్యపడలేదు. మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసి, మళ్లీ ట్రై చేయండి.</translation>
<translation id="6635944431854494329">యజమాని ఈ ఫీచర్‌ను, సెట్టింగ్‌లు &gt; అధునాతనం &gt; సమస్య విశ్లేషణ, వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపు ఎంపిక ద్వారా నియంత్రించవచ్చు.</translation>
-<translation id="6635956300022133031">వచనం-నుండి-ప్రసంగం వాయిస్‌లను ఎంచుకోండి మరియు అనుకూలీకరించండి</translation>
+<translation id="6635956300022133031">వచనం-నుండి-ప్రసంగం వాయిస్‌లను ఎంచుకోండి మరియు అనుకూలంగా మార్చండి</translation>
<translation id="6636623428211296678">కింద మరిన్ని సెట్టింగ్‌లను అన్వేషించండి లేదా ఇప్పుడే పూర్తి చేయండి</translation>
<translation id="6639554308659482635">SQLite మెమరీ</translation>
<translation id="6640268266988685324">తెరిచి ఉన్న ట్యాబ్</translation>
<translation id="6642720633335369752">తెరిచి ఉన్న అన్ని యాప్ విండోలనూ చూడటానికి, కింది నుండి పైకి స్వైప్ చేసి, పట్టుకోండి.</translation>
<translation id="664290675870910564">నెట్‌వర్క్ ఎంపిక</translation>
-<translation id="6643016212128521049">క్లియర్ చేయి</translation>
+<translation id="6643016212128521049">క్లియర్ చేయండి</translation>
<translation id="6644512095122093795">పాస్‌వర్డ్‌లను సేవ్ చేయడానికి ప్రతిపాదించు</translation>
<translation id="6644513150317163574">URL ఫార్మాట్ చెల్లదు. SSO ప్రామాణీకరణను ఉపయోగించినప్పుడు, సర్వర్‌ను తప్పనిసరిగా హోస్ట్ పేరు రూపంలో పేర్కొనాలి.</translation>
<translation id="6644846457769259194">మీ పరికరం అప్‌డేట్ చేయబడుతోంది (<ph name="PROGRESS_PERCENT" />)</translation>
@@ -5839,14 +5839,14 @@
<translation id="6721744718589119342">మరింత సమాచారం లేదా అప్‌డేట్‌ల కోసం మేము మీకు ఈమెయిల్ చేయవచ్చు</translation>
<translation id="6721972322305477112">&amp;ఫైల్</translation>
<translation id="672208878794563299">ఈ సైట్ తర్వాతి సారి మళ్లీ అడుగుతుంది.</translation>
-<translation id="6723661294526996303">బుక్‌మార్క్‌లను మరియు సెట్టింగులను దిగుమతి చేయి...</translation>
+<translation id="6723661294526996303">బుక్‌మార్క్‌లను మరియు సెట్టింగులను దిగుమతి చేయండి...</translation>
<translation id="6723839827191551955">మీరు కాస్ట్ చేసే మీడియాను కంట్రోల్ చేయండి</translation>
<translation id="6723839937902243910">పవర్</translation>
<translation id="6725073593266469338">UI సేవ</translation>
<translation id="6725206449694821596">ఇంటర్నెట్ ముద్రణ ప్రోటోకాల్ (IPP)</translation>
<translation id="6725970970008349185">ప్రతి పేజీకి ప్రదర్శించడానికి అభ్యర్థుల సంఖ్య</translation>
<translation id="672609503628871915">కొత్తగా ఏమి ఉన్నాయో చూడండి</translation>
-<translation id="67269783048918309">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="67269783048918309">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="6727969043791803658">కనెక్ట్ చేయబడింది, <ph name="BATTERY_PERCENTAGE" />% బ్యాటరీ ఉంది</translation>
<translation id="6731320427842222405">దీనికి కొన్ని నిమిషాలు పట్టవచ్చు</translation>
<translation id="6733620523445262364">'<ph name="BOOKMARK_TITLE" />' క్రియేట్ చేయబడింది.</translation>
@@ -5862,7 +5862,7 @@
<translation id="6745592621698551453">ఇప్పుడే అప్‌డేట్ చేయి</translation>
<translation id="6746124502594467657">క్రిందికి తరలించు</translation>
<translation id="674632704103926902">నొక్కి లాగడాన్ని ప్రారంభించు</translation>
-<translation id="6748465660675848252">మీరు కొనసాగించవచ్చు, కానీ మీ సింక్ చేసిన డేటా మరియు సెట్టింగ్‌లు మాత్రమే పునరుద్ధరించబడతాయి. మొత్తం స్థానిక డేటాని కోల్పోవడం జరుగుతుంది.</translation>
+<translation id="6748465660675848252">మీరు కొనసాగించవచ్చు, కానీ మీ సింక్ చేసిన డేటా మరియు సెట్టింగ్‌లు మాత్రమే పునరుద్ధరించబడతాయి. మొత్తం స్థానిక డేటాను కోల్పోవడం జరుగుతుంది.</translation>
<translation id="6748980958975836188">నేను <ph name="BEGIN_LINK1" />Google సర్వీస్ నియమాలు<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />Chrome, ఇంకా ChromeOS అదనపు సర్వీస్ నియమాలను<ph name="END_LINK2" /> చదివి అంగీకరిస్తున్నాను.</translation>
<translation id="6750757184909117990">సెల్యులార్‌ను డిజేబుల్ చేయడం</translation>
<translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (అజ్ఞాతంగా)</translation>
@@ -5930,7 +5930,7 @@
<ph name="FOOTER_MESSAGE" /></translation>
<translation id="6810613314571580006">నిల్వ చేసిన ఆధారాలను ఉపయోగించి ఆటోమేటిక్‌గా వెబ్‌సైట్‌లకు సైన్ ఇన్ చేస్తుంది. ఫీచ‌ర్‌ను నిలిపివేసినప్పుడు, మీరు వెబ్‌సైట్‌కు సైన్ ఇన్ చేసే ప్రతిసారి నిర్ధారణ కోసం మిమ్మల్ని అడుగుతుంది.</translation>
<translation id="6810768462515084623">అయ్యో! మీ పాస్‌వర్డ్ గడువు ముగిసింది. దయచేసి మరో పరికరంలో దానిని పునరుద్ధరించి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
-<translation id="6811034713472274749">పేజీ వీక్షించడానికి సిద్ధంగా ఉంది</translation>
+<translation id="6811034713472274749">పేజీ చూడటానికి సిద్ధంగా ఉంది</translation>
<translation id="6811151703183939603">గట్టిగా జరపండి</translation>
<translation id="6811332638216701903">DHCP హోస్ట్‌పేరు</translation>
<translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> రూట్‌గా రన్ చేయలేదు.</translation>
@@ -5946,7 +5946,7 @@
<translation id="6826872289184051766">USB ద్వారా ధృవీకరించు</translation>
<translation id="6827121912381363404"><ph name="PERMITTED_SITE" />‌ను చదివి, మార్చడానికి అన్ని ఎక్స్‌టెన్షన్‌లకు అనుమతినివ్వండి</translation>
<translation id="6827517233063803343">మీరు మీ Google ఖాతాతో సైన్ ఇన్ చేసిన ChromeOS పరికరాలు అన్నిటిలోనూ మీ యాప్‌లు, సెట్టింగ్‌లు సింక్ చేయబడతాయి. బ్రౌజర్ సింక్ ఆప్షన్‌ల కోసం, <ph name="LINK_BEGIN" />Chrome సెట్టింగ్‌లు<ph name="LINK_END" /> ఆప్షన్‌కు వెళ్లండి.</translation>
-<translation id="6828153365543658583">కింది వినియోగదారులకు మాత్రమే సైన్-ఇన్‌ను అనుమతించు:</translation>
+<translation id="6828153365543658583">కింది వినియోగదారులకు మాత్రమే సైన్-ఇన్‌ను అనుమతించండి:</translation>
<translation id="6828182567531805778">మీ డేటాను సింక్ చేయడానికి మీ రహస్య పదబంధాన్ని నమోదు చేయండి</translation>
<translation id="682871081149631693">QuickFix</translation>
<translation id="6828860976882136098">వినియోగదారులందరి కోసం ఆటోమేటిక్ అప్‌డేట్‌లను సెటప్ చేయడం విఫలమైంది (ప్రీఫ్లయిట్ అమలు ఎర్రర్: <ph name="ERROR_NUMBER" />)</translation>
@@ -6044,13 +6044,13 @@
<translation id="6919868320029503575">బలహీనమైన పాస్‌వర్డ్‌లు</translation>
<translation id="6919952941889172531">అలాగే ఈ Chrome ప్రొఫైల్‌కు మెరుగైన సురక్షిత బ్రౌజింగ్‌ను ఆన్ చేయండి?</translation>
<translation id="6920989436227028121">సాధారణ ట్యాబ్‌‌ లాగా తెరువు</translation>
-<translation id="6921104647315081813">యాక్టివిటీలను తీసివేయి</translation>
+<translation id="6921104647315081813">యాక్టివిటీలను తీసివేయండి</translation>
<translation id="692114467174262153"><ph name="ALTERNATIVE_BROWSER_NAME" />ను తెరవలేకపోయింది</translation>
<translation id="6922128026973287222">Google డేటా సేవర్‌ను ఉపయోగించి డేటాను ఆదా చేయండి. వేగంగా బ్రౌజ్ చేయండి. మరింత తెలుసుకోవడానికి క్లిక్ చేయండి.</translation>
<translation id="6922745772873733498">ముద్రించడానికి పిన్‌ను నమోదు చేయండి</translation>
<translation id="6922763095098248079">మీ పరికరం మీ సంస్థ ద్వారా మేనేజ్ చేయబడుతుంది. ఈ పరికరంలో ఎలాంటి ప్రొఫైల్‌లోని డేటాను అయినా అడ్మినిస్ట్రేటర్‌లు యాక్సెస్ చేయగలరు.</translation>
<translation id="6923132443355966645">స్క్రోల్ / క్లిక్</translation>
-<translation id="6923633482430812883">షేర్‌ని మౌంట్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మీరు కనెక్ట్ చేస్తున్న ఫైల్ సర్వర్‌లో SMBv2 లేదా అంతకంటే తాజా వెర్షన్‌కు మద్దతు ఉందో లేదో తనిఖీ చేయండి.</translation>
+<translation id="6923633482430812883">షేర్‌ని మౌంట్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మీరు కనెక్ట్ చేస్తున్న ఫైల్ సర్వర్‌లో SMBv2 లేదా అంతకంటే తాజా వెర్షన్‌కు మద్దతు ఉందో లేదో చెక్ చేయండి.</translation>
<translation id="6925127338315966709">మీరు ఈ బ్రౌజర్‌కు మేనేజ్ చేయబడిన ప్రొఫైల్‌ను జోడిస్తున్నారు. మీ అడ్మినిస్ట్రేటర్ ప్రొఫైల్‌పైన కంట్రోల్‌ను కలిగి ఉన్నారు, అలాగే దాని డేటాను యాక్సెస్ చేయగలరు. బుక్‌మార్క్‌లు, హిస్టరీ, పాస్‌వర్డ్‌లు, అలాగే ఇతర సెట్టింగ్‌లను మీ ఖాతాకు సింక్ చేయవచ్చు, అలాగే మీ అడ్మినిస్ట్రేటర్ ద్వారా మేనేజ్ చేయవచ్చు.</translation>
<translation id="6929126689972602640">పాఠశాల ఖాతాలకు తల్లిదండ్రుల కంట్రోల్స్ సపోర్ట్ చేయబడవు. ఇంట్లో పాఠశాల విద్య కోసం Google Classroom, అలాగే ఇతర వెబ్‌సైట్‌లను యాక్సెస్ చేసేందుకు పాఠశాల ఖాతాను జోడించడానికి, ముందుగా మీ చిన్నారి వ్యక్తిగత ఖాతా నుండి సైన్ ఇన్ చేయండి. మీరు సెటప్‌లో పాఠశాల ఖాతాను తర్వాత జోడించవచ్చు.</translation>
<translation id="6929760895658557216">Okay Google</translation>
@@ -6081,7 +6081,7 @@
<translation id="6960648667961844909"><ph name="LANGUAGE" /> స్పీచ్ ఫైల్‌లను డౌన్‌లోడ్ చేయడం సాధ్యపడలేదు. మీ డౌన్‌లోడ్ తర్వాత మళ్లీ ప్రారంభమవుతుంది. డౌన్‌లోడ్ పూర్తయ్యే వరకు, ప్రాసెసింగ్ కోసం స్పీచ్ Googleకు పంపబడుతుంది.</translation>
<translation id="696103774840402661">ఈ <ph name="DEVICE_TYPE" />లో యూజర్‌లందరికీ సంబంధించిన అన్ని ఫైళ్లు, లోకల్ డేటా శాశ్వతంగా తొలగించబడ్డాయి.</translation>
<translation id="6964390816189577014">వీరుడు</translation>
-<translation id="6964760285928603117">గుంపు నుండి తీసివేయి</translation>
+<translation id="6964760285928603117">గుంపు నుండి తీసివేయండి</translation>
<translation id="6965382102122355670">సరే</translation>
<translation id="6965648386495488594">పోర్ట్</translation>
<translation id="6965978654500191972">పరికరం</translation>
@@ -6091,7 +6091,7 @@
<translation id="6968288415730398122">స్క్రీన్ లాక్‌ను కాన్ఫిగర్ చేయడానికి మీ పాస్‌వర్డ్‌ను నమోదు చేయండి</translation>
<translation id="6969047215179982698">సమీప షేరింగ్‌ను ఆఫ్ చేయండి</translation>
<translation id="6970480684834282392">ప్రారంభ రకం</translation>
-<translation id="6970856801391541997">నిర్దిష్ట పేజీలను ముద్రించు</translation>
+<translation id="6970856801391541997">నిర్దిష్ట పేజీలను ప్రింట్ చేయండి</translation>
<translation id="6970861306198150268">మీరు ఈ సైట్‌లో మీ ప్రస్తుత పాస్‌వర్డ్‌ను సేవ్ చేస్తున్నారని నిర్ధారించుకోండి</translation>
<translation id="6972180789171089114">ఆడియో/వీడియో</translation>
<translation id="6972754398087986839">ప్రారంభించండి</translation>
@@ -6113,7 +6113,7 @@
<translation id="6983783921975806247">రిజిస్టర్ చేసిన OID</translation>
<translation id="6984299437918708277">సైన్-ఇన్ స్క్రీన్‌లో మీ ఖాతా కోసం ప్రదర్శించడానికి చిత్రాన్ని ఎంచుకోండి</translation>
<translation id="6985235333261347343">Microsoft Key Recovery Agent</translation>
-<translation id="698524779381350301">కింది సైట్‌లలో యాక్సెస్‌ను ఆటోమేటిక్‌గా అనుమతించు</translation>
+<translation id="698524779381350301">కింది సైట్‌లలో యాక్సెస్‌ను ఆటోమేటిక్‌గా అనుమతించండి</translation>
<translation id="6985607387932385770">ప్రింటర్‌లు</translation>
<translation id="6988094684494323731">Linux కంటెయినర్‌ను ప్రారంభిస్తోంది</translation>
<translation id="6988403677482707277">Tab టాబ్‌స్ట్రిప్ ప్రారంభానికి తరలించబడింది</translation>
@@ -6195,7 +6195,7 @@
<translation id="7057767408836081338">యాప్ డేటాను పొందడంలో సమస్య ఉంది, యాప్‌ను రన్ చేయడానికి ప్రయత్నిస్తోంది...</translation>
<translation id="7058024590501568315">దాచబడిన నెట్‌వర్క్</translation>
<translation id="7059858479264779982">స్వీయ-ప్రారంభానికి సెట్ చేయి</translation>
-<translation id="7062222374113411376">డేటాను పంపడం మరియు స్వీకరించడం పూర్తి చేయడానికి ఇటీవల మూసివేసిన సైట్‌లను అనుమతించు (సిఫార్సు చేయబడింది)</translation>
+<translation id="7062222374113411376">డేటాను పంపడం మరియు స్వీకరించడం పూర్తి చేయడానికి ఇటీవల మూసివేసిన సైట్‌లను అనుమతించండి (సిఫార్సు చేయబడింది)</translation>
<translation id="7063129466199351735">షార్ట్‌కట్‌లను ప్రాసెస్ చేస్తోంది...</translation>
<translation id="7063311912041006059">ప్రశ్న యొక్క ప్రదేశంలో <ph name="SPECIAL_SYMBOL" />తో URL</translation>
<translation id="706342288220489463">సహాయం చేయడానికి మీ Assistantను మీ స్క్రీన్‌పై సమాచారాన్ని ఉపయోగించనివ్వండి</translation>
@@ -6210,7 +6210,7 @@
<translation id="7070484045139057854">ఇది సైట్ డేటాను చదవగలదు మరియు మార్చగలదు</translation>
<translation id="7072010813301522126">షార్ట్‌కట్ పేరు</translation>
<translation id="7075513071073410194">RSA ఎన్‌క్రిప్షన్‌తో PKCS #1 MD5</translation>
-<translation id="7075625805486468288">HTTPS/SSLసర్టిఫికెట్లు మరియు సెట్టింగ్‌లను నిర్వహించండి</translation>
+<translation id="7075625805486468288">HTTPS/SSLసర్టిఫికెట్లు మరియు సెట్టింగ్‌లను మేనేజ్ చేయండి</translation>
<translation id="7076875098323397992">అప్‌గ్రేడ్‌ను ప్రారంభించడం సాధ్యం కాదు</translation>
<translation id="7077829361966535409">సైన్ ఇన్ పేజీ ప్రస్తుత ప్రాక్సీ సెట్టింగ్‌లను ఉపయోగించి లోడ్ కావడంలో విఫలమైంది. దయచేసి <ph name="GAIA_RELOAD_LINK_START" />మళ్లీ సైన్ ఇన్ చేయడానికి ప్రయత్నించండి<ph name="GAIA_RELOAD_LINK_END" /> లేదా విభిన్న <ph name="PROXY_SETTINGS_LINK_START" />ప్రాక్సీ సెట్టింగ్‌ల<ph name="PROXY_SETTINGS_LINK_END" />ను ఉపయోగించండి.</translation>
<translation id="7078120482318506217">అన్ని నెట్‌వర్క్‌లు</translation>
@@ -6306,8 +6306,8 @@
<translation id="7191159667348037">తెలియని ప్రింటర్ (USB)</translation>
<translation id="7193051357671784796">మీ సంస్థ ద్వారా ఈ యాప్ జోడించబడింది. యాప్‌ను పునఃప్రారంభించడం ద్వారా దీని ఇన్‌స్టాలేషన్‌ను పూర్తి చేయండి.</translation>
<translation id="7193374945610105795"><ph name="ORIGIN" /> కోసం పాస్‌వర్డ్‌లు సేవ్ చేయబడలేదు</translation>
-<translation id="7196913789568937443">Google Driveకు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా మీ డేటాని పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. ఈ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది. బ్యాకప్‌లు Googleకి అప్‌లోడ్ చేయబడతాయి మరియు మీ Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
-<translation id="7197190419934240522">మీరు బ్రౌజ్ చేసే ప్రతిసారి Google శోధన మరియు Google స్మార్ట్‌లను పొందండి</translation>
+<translation id="7196913789568937443">Google Driveకు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా మీ డేటాను పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. ఈ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది. బ్యాకప్‌లు Googleకు అప్‌లోడ్ చేయబడతాయి మరియు మీ Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="7197190419934240522">మీరు బ్రౌజ్ చేసే ప్రతిసారి Google Search మరియు Google స్మార్ట్‌లను పొందండి</translation>
<translation id="719791532916917144">కీబోర్డ్ షార్ట్‌కట్</translation>
<translation id="7198503619164954386">మీరు ఎంటర్ప్రైజ్-ఎన్‌రోల్ చేసిన పరికరంలో ఉండాలి</translation>
<translation id="7199158086730159431">సహా&amp;యం పొందండి</translation>
@@ -6317,7 +6317,7 @@
<translation id="7201420661433230412">ఫైళ్లను చూడండి</translation>
<translation id="7203150201908454328">విస్తరించబడింది</translation>
<translation id="7206693748120342859"><ph name="PLUGIN_NAME" />ని డౌన్‌లోడ్ చేస్తోంది...</translation>
-<translation id="720715819012336933">{NUM_PAGES,plural, =1{పేజీ నుండి నిష్క్రమించు}other{పేజీల నుండి నిష్క్రమించు}}</translation>
+<translation id="720715819012336933">{NUM_PAGES,plural, =1{పేజీ నుండి నిష్క్రమించండి}other{పేజీల నుండి నిష్క్రమించండి}}</translation>
<translation id="7207457272187520234">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ డేటాను, పరికరం డేటాను, దానితో పాటు యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపుతోంది. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత ఏకీకృత డేటా కూడా Google యాప్‌లకు, Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ సెట్టింగ్‌ను యజమాని సెట్ చేశారు. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు.</translation>
<translation id="7207631048330366454">యాప్‌లను వెతకండి</translation>
<translation id="7210499381659830293">ఎక్స్‌టెన్షన్ ప్రింటర్‌లు</translation>
@@ -6337,7 +6337,7 @@
<translation id="7227458944009118910">కింద లిస్ట్ చేయబడిన యాప్‌లు ప్రోటోకాల్ లింక్‌లను కూడా హ్యాండిల్ చేయగలవు. ఇతర యాప్‌లు అనుమతి కోసం అడుగుతాయి.</translation>
<translation id="7228523857728654909">స్క్రీన్ లాక్ మరియు సైన్ ఇన్</translation>
<translation id="7230222852462421043">&amp;విండోను రీస్టోర్ చేయండి</translation>
-<translation id="7230787553283372882">మీ వచన పరిమాణాన్ని అనుకూలీకరించండి</translation>
+<translation id="7230787553283372882">మీ వచన పరిమాణాన్ని అనుకూలంగా మార్చండి</translation>
<translation id="7231260028442989757">మీ ఫోన్ నోటిఫికేషన్‌లను చూడండి, విస్మరించండి, వాటికి రిప్లయి చేయండి</translation>
<translation id="7232750842195536390">పేరు మార్చడం విఫలమైంది</translation>
<translation id="723343421145275488"><ph name="VISUAL_SEARCH_PROVIDER" />‌ ఇమేజ్ సెర్చ్</translation>
@@ -6486,7 +6486,7 @@
<translation id="73843634555824551">ఇన్‌పుట్‌లు, కీబోర్డ్‌లు</translation>
<translation id="7384687527486377545">కీబోర్డ్ ఆటో-రిపీట్</translation>
<translation id="7385490373498027129">ఈ <ph name="DEVICE_TYPE" />లో యూజర్‌లందరికీ సంబంధించిన అన్ని ఫైళ్లు, లోకల్ డేటా శాశ్వతంగా తొలగించబడతాయి.</translation>
-<translation id="7385854874724088939">ముద్రించడానికి ప్రయత్నించే సమయంలో ఏదో తప్పు జరిగింది. దయచేసి కోడ్‌ను తనిఖీ చేసి, మళ్ళీ ప్రయత్నించండి.</translation>
+<translation id="7385854874724088939">ముద్రించడానికి ప్రయత్నించే సమయంలో ఏదో తప్పు జరిగింది. దయచేసి కోడ్‌ను చెక్ చేసి, మళ్ళీ ప్రయత్నించండి.</translation>
<translation id="7387273928653486359">ఆమోదించదగినది</translation>
<translation id="7387951778417998929">ఆటోమేటిక్ సెర్చ్ ఇంజిన్ కాకుండా వేరొక సెర్చ్ ఇంజిన్‌ను ఉపయోగించాలంటే, అడ్రస్ బార్‌లో దాని షార్ట్‌కట్‌ను టైప్ చేసి, ఆ తర్వాత మీ ప్రాధాన్య కీబోర్డ్ షార్ట్‌కట్‌ను టైప్ చేయండి. మీరు ఇక్కడ మీ ఆటోమేటిక్ సెర్చ్ ఇంజిన్‌ను కూడా మార్చవచ్చు.</translation>
<translation id="7388209873137778229">కేవలం సపోర్ట్ ఉన్న పరికరాలను మాత్రమే చూపుతుంది.</translation>
@@ -6541,7 +6541,7 @@
<translation id="7433957986129316853">అలాగే ఉంచండి</translation>
<translation id="7434509671034404296">డెవలపర్</translation>
<translation id="7434757724413878233">మౌస్ యాక్సిలరేషన్</translation>
-<translation id="7434969625063495310">ప్రింట్ సర్వర్‌ని జోడించడం సాధ్యపడలేదు. దయచేసి సర్వర్ కాన్ఫిగరేషన్ తనిఖీ చేసుకుని, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="7434969625063495310">ప్రింట్ సర్వర్‌ని జోడించడం సాధ్యపడలేదు. దయచేసి సర్వర్ కాన్ఫిగరేషన్ చెక్ చేసుకుని, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
<translation id="7436921188514130341">అయ్యో! పేరు మారుస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది.</translation>
<translation id="7438495332316988804">లాంచర్‌లో "Chrome" అని టైప్ చేయడం ద్వారా స్టాండర్డ్ బ్రౌజర్‌ను కనుగొనవచ్చు.</translation>
<translation id="7439519621174723623">కొనసాగించడానికి, పరికరం పేరును జోడించండి</translation>
@@ -6632,7 +6632,7 @@
<translation id="7526989658317409655">ప్లేస్‌హోల్డర్</translation>
<translation id="7527758104894292229">మీ Google ఖాతా <ph name="ACCOUNT" />లో దానిని అప్‌డేట్ చేయండి</translation>
<translation id="7528224636098571080">తెరవవద్దు</translation>
-<translation id="7529411698175791732">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి. సమస్య కొనసాగితే, సైన్ అవుట్ చేసి, మళ్లీ సైన్ ఇన్ చేయడాన్ని ప్రయత్నించండి.</translation>
+<translation id="7529411698175791732">మీ ఇంటర్నెట్ కనెక్షన్‌ను చెక్ చేయండి. సమస్య కొనసాగితే, సైన్ అవుట్ చేసి, మళ్లీ సైన్ ఇన్ చేయడాన్ని ప్రయత్నించండి.</translation>
<translation id="7529876053219658589">{0,plural, =1{గెస్ట్ విండోను మూసివేయండి}other{గెస్ట్ విండోను మూసివేయండి}}</translation>
<translation id="7530016656428373557">వాట్‌లలో తరుగుదల రేట్</translation>
<translation id="7531310913436731628">Mac సిస్టమ్ ప్రాధాన్యతలలో లొకేషన్ ఆఫ్ చేయబడింది</translation>
@@ -6643,7 +6643,7 @@
<translation id="7535791657097741517">లేత రంగు రూపాన్ని ఆన్ చేయండి</translation>
<translation id="7537451260744431038">మీ బ్రౌజింగ్ అనుభవాన్ని మెరుగుపరచడానికి సైట్‌లు కుక్కీలను ఉపయోగించలేవు, ఉదాహరణకు, మిమ్మల్ని సైన్ ఇన్ చేసి ఉంచడం, మీ షాపింగ్ కార్ట్‌లో ఐటెమ్‌లను గుర్తు చేయడం లాంటివి</translation>
<translation id="7538932151125743389">ChromeOS పరికరం, అలాగే కాంపోనెంట్ సీరియల్ నంబర్‌లను చదువుతుంది.</translation>
-<translation id="7540972813190816353">అప్‌డేట్‌ల కోసం తనిఖీ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది: <ph name="ERROR" /></translation>
+<translation id="7540972813190816353">అప్‌డేట్‌ల కోసం చెక్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది: <ph name="ERROR" /></translation>
<translation id="7541076351905098232"><ph name="MANAGER" />, ఈ పరికరాన్ని మునుపటి వెర్షన్‌కు మార్చారు. దయచేసి ముఖ్యమైన ఫైళ్లను సేవ్ చేసి, ఆపై రీస్టార్ట్ చేయండి. ఈ పరికరంలో ఉన్న మొత్తం డేటా తొలగించబడుతుంది.</translation>
<translation id="7541773865713908457"><ph name="APP_NAME" /> యాప్‌తో <ph name="ACTION_NAME" /></translation>
<translation id="754207240458482646">మీ ఖాతాలోని ఇతర పరికరాలతో సింక్ చేయబడింది. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
@@ -6656,7 +6656,7 @@
<translation id="7551059576287086432"><ph name="FILE_NAME" /> డౌన్‌లోడ్ విఫలమైంది</translation>
<translation id="7551643184018910560">అరకు పిన్ చేయండి</translation>
<translation id="7552846755917812628">కింది చిట్కాలను ప్రయత్నించండి:</translation>
-<translation id="7553012839257224005">Linux కంటెయినర్‌ను తనిఖీ చేస్తోంది</translation>
+<translation id="7553012839257224005">Linux కంటెయినర్‌ను చెక్ చేస్తోంది</translation>
<translation id="7553242001898162573">మీ పాస్‌వర్డ్‌ను నమోదు చేయండి</translation>
<translation id="755472745191515939">మీ అడ్మినిస్ట్రేటర్ ఈ భాషను అనుమతించరు</translation>
<translation id="7554791636758816595">కొత్త ట్యాబ్</translation>
@@ -6774,7 +6774,7 @@
<translation id="7659336857671800422">గోప్యతా గైడ్‌ను ఉపయోగించండి</translation>
<translation id="7659584679870740384">ఈ పరికరాన్ని ఉపయోగించడానికి మీకు అధికారం లేదు. దయచేసి సైన్-ఇన్ అనుమతి కోసం నిర్వాహకుడిని సంప్రదించండి.</translation>
<translation id="7660146600670077843">ట్యాబ్‌పై కుడి క్లిక్ చేసి, "కొత్త గ్రూప్‌నకు ట్యాబ్‌ను జోడించండి" అనే ఆప్షన్‌ను ఎంచుకోండి</translation>
-<translation id="7661259717474717992">కుక్కీ డేటాను సేవ్ చేయడానికి మరియు చదవడానికి సైట్‌లను అనుమతించు</translation>
+<translation id="7661259717474717992">కుక్కీ డేటాను సేవ్ చేయడానికి మరియు చదవడానికి సైట్‌లను అనుమతించండి</translation>
<translation id="7661451191293163002">నమోదు ప్రమాణపత్రాన్ని పొందడం సాధ్యపడలేదు.</translation>
<translation id="7662283695561029522">కాన్ఫిగర్ చేయడానికి నొక్కండి</translation>
<translation id="7663719505383602579">స్వీకర్త: <ph name="ARC_PROCESS_NAME" /></translation>
@@ -6795,7 +6795,7 @@
<translation id="7674537509496907005"><ph name="APP_COUNT" /> యాప్‌లు</translation>
<translation id="7674542105240814168">లొకేషన్ యాక్సెస్ తిరస్కరించబడింది</translation>
<translation id="7676119992609591770">'<ph name="SEARCH_TEXT" />' కోసం <ph name="NUM" /> ట్యాబ్ కనుగొనబడింది</translation>
-<translation id="7676867886086876795">మీరు రాయాలనుకునేది Googleకి చెబితే చాలు వెంటనే వచన రూపంలోకి మారుస్తుంది.</translation>
+<translation id="7676867886086876795">మీరు రాయాలనుకునేది Googleకు చెబితే చాలు వెంటనే వచన రూపంలోకి మారుస్తుంది.</translation>
<translation id="7679171213002716280">ఇక్కడ <ph name="PRINTER_COUNT" /> మేనేజ్ చేయబడే ప్రింటర్‌లు ఉన్నాయి.</translation>
<translation id="7680416688940118410">టచ్‌స్క్రీన్ కాలిబ్రేషన్</translation>
<translation id="7681095912841365527">సైట్ బ్లూటూత్‌ను ఉపయోగించవచ్చు</translation>
@@ -6839,15 +6839,15 @@
<translation id="7716781361494605745">Netscape సర్టిఫికెట్ అధికార విధాన URL</translation>
<translation id="7717014941119698257">డౌన్‌లోడ్ అవుతోంది: <ph name="STATUS" /></translation>
<translation id="771721654176725387">ఇది మీ బ్రౌజింగ్ డేటాను ఈ పరికరం నుండి శాశ్వతంగా తొలగిస్తుంది. డేటాను తిరిగి పొందడానికి, ఇలా సింక్‌ను ఆన్ చేయండి</translation>
-<translation id="7717845620320228976">అప్‌డేట్‌ల కోసం తనిఖీ చేయి</translation>
+<translation id="7717845620320228976">అప్‌డేట్‌ల కోసం చెక్ చేయండి</translation>
<translation id="7719367874908701697">పేజీ జూమ్</translation>
<translation id="7719588063158526969">పరికరం పేరు చాలా పొడవుగా ఉంది</translation>
<translation id="7720216670798402294">ChromeOS పరికర సమాచారాన్ని, ఇంకా పరికర డేటాను చదువుతుంది.</translation>
-<translation id="7721179060400456005">డిస్‌ప్లేల మేరకు విస్తరించేలా విండోలను అనుమతించు</translation>
+<translation id="7721179060400456005">డిస్‌ప్లేల మేరకు విస్తరించేలా విండోలను అనుమతించండి</translation>
<translation id="7721237513035801311"><ph name="SWITCH" /> (<ph name="DEVICE_TYPE" />)</translation>
<translation id="7721258531237831532">మీ ఆర్గనైజేషన్‌కు ఒక ప్రొఫైల్ అవసరం</translation>
<translation id="7722040605881499779">అప్‌డేట్ చేయడానికి కావాల్సిన స్థలం: <ph name="NECESSARY_SPACE" /></translation>
-<translation id="7724603315864178912">కత్తిరించు</translation>
+<translation id="7724603315864178912">కత్తిరించండి</translation>
<translation id="7728465250249629478">పరికర భాషను మార్చండి</translation>
<translation id="7728570244950051353">నిద్రావస్థలో ఉండగా స్క్రీన్‌ను లాక్ చేయండి</translation>
<translation id="7728668285692163452">ఛానెల్ మార్పు తర్వాత వర్తింపజేయబడుతుంది</translation>
@@ -6915,7 +6915,7 @@
<translation id="7782717250816686129">లాగిన్ స్క్రీన్‌లో డేటాను నిరంతరం సేవ్ చేయండి, సెషన్‌లోకి ఆధారాలను ఇంజెక్ట్ చేయండి.</translation>
<translation id="778330624322499012"><ph name="PLUGIN_NAME" />ను లోడ్ చేయడం సాధ్యపడలేదు</translation>
<translation id="7784067724422331729">మీ కంప్యూటర్‌లోని భద్రతా సెట్టింగ్‌లు ఈ ఫైల్‌ను బ్లాక్ చేసాయి.</translation>
-<translation id="7784796923038949829">సైట్ డేటాని చదవడం లేదా మార్చడం సాధ్యం కాదు</translation>
+<translation id="7784796923038949829">సైట్ డేటాను చదవడం లేదా మార్చడం సాధ్యం కాదు</translation>
<translation id="778480864305029524">తక్షణ టెథెరింగ్‌ని ఉపయోగించాలంటే, Google Play సేవల కోసం నోటిఫికేషన్‌లను ఆన్ చేయండి.</translation>
<translation id="7785471469930192436">వర్తిస్తే, మీ సెర్చ్ హిస్టరీని తొలగించడానికి మీ సెర్చ్ ఇంజిన్ సూచనలను చూడండి</translation>
<translation id="7786889348652477777">యాప్‌ను &amp;మళ్లీ లోడ్ చేయి</translation>
@@ -6985,7 +6985,7 @@
<ph name="BEGIN_PARAGRAPH3" />మీ Google ఖాతాకు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, మీ Android డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. మీరు account.google.com లో మీ డేటాను చూడవచ్చు, తొలగించవచ్చు, మీ ఖాతా సెట్టింగ్‌లను మార్చవచ్చు.<ph name="END_PARAGRAPH3" /></translation>
<translation id="7851021205959621355"><ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" /> ఒకే రీతిలో ఉండే వాయిస్ లేదా రికార్డింగ్ సైతం మీ వ్యక్తిగత ఫలితాలను లేదా మీ Assistantను యాక్సెస్ చేయగలిగే అవకాశం ఉంది. బ్యాటరీని సేవ్ చేయడానికి, మీ పరికరాన్ని పవర్ సోర్స్‌కు కనెక్ట్ చేసినప్పుడు మాత్రమే “Ok Google” ఆన్ అవ్వాలని మీ Assistant సెట్టింగ్‌లలో మీరు ఎంచుకోవచ్చు.</translation>
<translation id="7851457902707056880">సైన్-ఇన్ అనేది, యజమాని ఖాతాకు మాత్రమే పరిమితం చేయబడింది. దయచేసి రీబూట్ చేసి యజమాని ఖాతాతో సైన్ ఇన్ చేయండి. మెషీన్ 30 సెకన్లలో ఆటోమేటిక్‌గా రీబూట్ అవుతుంది.</translation>
-<translation id="7851716364080026749">ఎల్లప్పుడూ కెమెరా మరియు మైక్రోఫోన్ యాక్సెస్‌ను బ్లాక్ చేయి</translation>
+<translation id="7851716364080026749">ఎల్లప్పుడూ కెమెరా మరియు మైక్రోఫోన్ యాక్సెస్‌ను బ్లాక్ చేయండి</translation>
<translation id="7851720427268294554">IPP పార్సర్</translation>
<translation id="78526636422538552">మరిన్ని Google ఖాతాలను జోడించడం నిలిపివేయబడింది</translation>
<translation id="7853747251428735">మరిన్ని సాధనా&amp;లు</translation>
@@ -7005,7 +7005,7 @@
<translation id="7870790288828963061">సరికొత్త వెర్షన్ అందుబాటులో ఉన్న కియోస్క్ యాప్‌లేవీ కనుగొనబడలేదు. అప్‌డేట్ చేయడానికి ఏదీ లేదు. దయచేసి USB స్టిక్‌ను తీసివేయండి.</translation>
<translation id="7871109039747854576">అభ్యర్థి లిస్ట్‌ను పేజీ చేయడానికి <ph name="COMMA" />, <ph name="PERIOD" /> కీలను ఉపయోగించండి</translation>
<translation id="787268756490971083">ఆఫ్ చేయబడి ఉంది</translation>
-<translation id="7872758299142009420">చాలా ఎక్కువ నెస్ట్ చేయబడిన గ్రూప్‌లు: <ph name="ERROR_LINE" /></translation>
+<translation id="7872758299142009420">చాలా ఎక్కువ Nest చేయబడిన గ్రూప్‌లు: <ph name="ERROR_LINE" /></translation>
<translation id="7874257161694977650">Chrome నేపథ్యాలు</translation>
<translation id="7876027585589532670">షార్ట్‌కట్‌ను ఎడిట్ చేయడం సాధ్యపడదు</translation>
<translation id="7877451762676714207">తెలియని సర్వర్ ఎర్రర్. దయచేసి మళ్లీ ప్రయత్నించండి లేదా సర్వర్ నిర్వాహకుడిని సంప్రదించండి.</translation>
@@ -7104,7 +7104,7 @@
<translation id="7966241909927244760">చిత్రం అడ్రస్‌ను కా&amp;పీ చేయండి</translation>
<translation id="7966571622054096916">{COUNT,plural, =1{బుక్‌మార్క్ లిస్ట్‌లో 1 ఐటెమ్ ఉంది}other{బుక్‌మార్క్ లిస్ట్‌లో {COUNT} ఐటెమ్‌లు ఉన్నాయి}}</translation>
<translation id="7968072247663421402">ప్రొవైడర్ ఆప్షన్‌లు</translation>
-<translation id="7968742106503422125">మీరు కాపీ చేసి, అతికించే డేటాను చదవడం మరియు సవరించడం</translation>
+<translation id="7968742106503422125">మీరు కాపీ చేసి, అతికించే డేటాను చదవడం మరియు ఎడిట్ చేయడం</translation>
<translation id="7968833647796919681">పనితీరు డేటా సేకరణను ప్రారంభించు</translation>
<translation id="7968982339740310781">వివరాలను చూడండి</translation>
<translation id="7969046989155602842">ఆదేశం</translation>
@@ -7118,7 +7118,7 @@
<translation id="7974936243149753750">ఓవర్‌స్కాన్ సర్దుబాటు</translation>
<translation id="7975504106303186033">మీరు ఈ Chrome Education పరికరాన్ని ఎడ్యుకేషన్ ఖాతాలో తప్పనిసరిగా ఎన్‌రోల్ చేయాలి. కొత్త ఖాతా కోసం సైన్ అప్ చేయడానికి, దయచేసి g.co/workspace/edusignupను సందర్శించండి.</translation>
<translation id="7978412674231730200">వ్యక్తిగత కీ</translation>
-<translation id="7978450511781612192">ఇది మిమ్మల్ని మీ Google ఖాతాల నుండి సైన్ అవుట్ చేస్తుంది. మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు మరియు మరిన్ని ఇకపై సమకాలీకరించబడవు.</translation>
+<translation id="7978450511781612192">ఇది మిమ్మల్ని మీ Google ఖాతాల నుండి సైన్ అవుట్ చేస్తుంది. మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు మరియు మరిన్ని ఇకపై సింక్ చేయబడవు.</translation>
<translation id="7980084013673500153">అసెట్ ID: <ph name="ASSET_ID" /></translation>
<translation id="7981313251711023384">బ్రౌజింగ్, సెర్చ్‌లను మరింత వేగవంతం చేయడం కోసం పేజీలను ముందస్తుగా లోడ్ చేస్తుంది</translation>
<translation id="798145602633458219"><ph name="SUGGESTION_NAME" /> సూచనను శోధన పెట్టెకు అనుబంధించండి</translation>
@@ -7139,20 +7139,20 @@
<translation id="8002274832045662704">అధునాతన ప్రింటర్ కాన్ఫిగరేషన్</translation>
<translation id="8002670234429879764">ఇకపై <ph name="PRINTER_NAME" /> అందుబాటులో ఉండదు</translation>
<translation id="8004582292198964060">బ్రౌజర్</translation>
-<translation id="8005600846065423578">క్లిప్‌బోర్డ్‌ను చూడటానికి ఎల్లప్పుడూ <ph name="HOST" />ని అనుమతించు</translation>
+<translation id="8005600846065423578">క్లిప్‌బోర్డ్‌ను చూడటానికి ఎల్లప్పుడూ <ph name="HOST" />ని అనుమతించండి</translation>
<translation id="8006630792898017994">Space లేదా Tab</translation>
-<translation id="8008356846765065031">ఇంటర్నెట్ డిస్‌కనెక్ట్ చేయబడింది. దయచేసి మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి.</translation>
+<translation id="8008356846765065031">ఇంటర్నెట్ డిస్‌కనెక్ట్ చేయబడింది. దయచేసి మీ ఇంటర్నెట్ కనెక్షన్‌ను చెక్ చేయండి.</translation>
<translation id="8009225694047762179">పాస్‌వర్డ్‌లను నిర్వహించండి</translation>
<translation id="8011372169388649948">'<ph name="BOOKMARK_TITLE" />' తరలించబడింది.</translation>
<translation id="8012647001091218357">మేము ప్రస్తుతం మీ తల్లిదండ్రులను సంప్రదించలేకపోయాము. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="8013993649590906847">చిత్రంలో ఉపయోగకరమైన వివరణ లేకుంటే, మీ కోసం ఒక వివరణను అందించడానికి Chrome ప్రయత్నిస్తుంది. వివరణలను క్రియేట్ చేయడానికి, చిత్రాలు Googleకు పంపబడతాయి.</translation>
-<translation id="8014154204619229810">అప్‌డేటర్ ప్రస్తుతం అమలులో ఉంది. మళ్లీ తనిఖీ చేయడానికి ఒక నిమిషం తర్వాత రిఫ్రెష్ చేయండి.</translation>
+<translation id="8014154204619229810">అప్‌డేటర్ ప్రస్తుతం అమలులో ఉంది. మళ్లీ చెక్ చేయడానికి ఒక నిమిషం తర్వాత రిఫ్రెష్ చేయండి.</translation>
<translation id="8014206674403687691"><ph name="IDS_SHORT_PRODUCT_NAME" /> మునుపు ఇన్‌స్టాల్ చేసిన వెర్షన్‌కు తిరిగి మారలేకపోయింది. దయచేసి మీ పరికరాన్ని పవర్‌వాష్ చేయడానికి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="8015163965024115122">మీ తల్లి/తండ్రి <ph name="IDS_SHORT_PRODUCT_NAME" /> లేదా <ph name="IDS_SHORT_PRODUCT_NAME" /> యాప్‌లపై సెట్ చేసిన పరిమితి మించిపోయింది.</translation>
<translation id="8016266267177410919">తాత్కాలిక నిల్వ</translation>
<translation id="8017176852978888182">Linux షేర్ చేసిన డైరెక్టరీలు</translation>
<translation id="8017335670460187064"><ph name="LABEL" /></translation>
-<translation id="8017679124341497925">షార్ట్‌కట్ సవరించబడింది</translation>
+<translation id="8017679124341497925">షార్ట్‌కట్ ఎడిట్ చేయబడింది</translation>
<translation id="8018298733481692628">ఈ ప్రొఫైల్‌ను తొలగించాలా?</translation>
<translation id="8018313076035239964">వెబ్‌‍సైట్‌లు ఉపయోగించగల సమాచారాన్ని మరియు అవి మీకు చూపగల కంటెంట్‌ను నియంత్రించండి</translation>
<translation id="8023133589013344428">ChromeOS Flex సెట్టింగ్‌లలో భాషలను మేనేజ్ చేయండి</translation>
@@ -7191,7 +7191,7 @@
<translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
<translation id="8050191834453426339">మళ్లీ వెరిఫై చేయండి</translation>
<translation id="8051193500142930381">ఏ ఫీచర్‌లకు కెమెరా అవసరం అవుతుందో అవి పని చేయవు</translation>
-<translation id="8051390370038326517">MIDI డివైజ్‌ల పూర్తి కంట్రోల్‌ను కలిగి ఉండటానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించు</translation>
+<translation id="8051390370038326517">MIDI డివైజ్‌ల పూర్తి కంట్రోల్‌ను కలిగి ఉండటానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించండి</translation>
<translation id="8053278772142718589">PKCS #12 ఫైళ్ళు</translation>
<translation id="8053390638574070785">ఈ పేజీని మళ్లీ లోడ్ చేయి</translation>
<translation id="8054517699425078995">ఈ రకమైన ఫైల్ మీ పరికరానికి హాని కలిగించవచ్చు. ఏది ఏమైనా <ph name="FILE_NAME" />ను ఉంచాలని అనుకుంటున్నారా?</translation>
@@ -7213,7 +7213,7 @@
<translation id="8064279191081105977">గ్రూప్ <ph name="GROUP_NAME" /> - <ph name="GROUP_CONTENTS" /> - <ph name="COLLAPSED_STATE" /></translation>
<translation id="8066444921260601116">కనెక్షన్ డైలాగ్</translation>
<translation id="8070662218171013510">స్పర్శ ప్రతిస్పందన</translation>
-<translation id="8071432093239591881">చిత్రం లాగా ముద్రించు</translation>
+<translation id="8071432093239591881">చిత్రం లాగా ప్రింట్ చేయండి</translation>
<translation id="8073499153683482226"><ph name="BEGIN_PARAGRAPH1" />కాంటాక్ట్‌లు, మెసేజ్‌లు మరియు ఫోటోల వంటి యాప్ సేవ్ చేసిన (డెవలపర్ సెట్టింగ్‌ల ఆధారంగా) ఎలాంటి డేటా అయినా యాప్ డేటాగా పరిగణించబడుతుంది.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />బ్యాకప్ డేటా మీ చిన్నారి డిస్క్ నిల్వ కోటాలో లెక్కించబడదు.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />మీరు సెట్టింగ్‌లలో ఈ సేవని ఆఫ్ చేయవచ్చు.<ph name="END_PARAGRAPH3" /></translation>
@@ -7233,8 +7233,8 @@
<translation id="808894953321890993">పాస్‌వర్డ్‌ను మార్చు</translation>
<translation id="8090234456044969073">మీరు అత్యంత తరచుగా సందర్శించిన వెబ్‌సైట్‌ల లిస్ట్‌ను చదవడానికి అనుమతి</translation>
<translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> ప్రతిస్పందించడం లేదు</translation>
-<translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Google Driveకు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా మీ డేటాని పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. మీ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది.<ph name="END_PARAGRAPH1" />
- <ph name="BEGIN_PARAGRAPH2" />మీ బ్యాకప్‌లు Googleకి అప్‌లోడ్ చేయబడతాయి మరియు మీ Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి.<ph name="END_PARAGRAPH2" />
+<translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Google Driveకు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా మీ డేటాను పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. మీ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది.<ph name="END_PARAGRAPH1" />
+ <ph name="BEGIN_PARAGRAPH2" />మీ బ్యాకప్‌లు Googleకు అప్‌లోడ్ చేయబడతాయి మరియు మీ Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి.<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />కాంటాక్ట్‌లు, మెసేజ్‌లు మరియు ఫోటోల వంటి యాప్ సేవ్ చేసిన (డెవలపర్ సెట్టింగ్‌ల ఆధారంగా) ఎలాంటి డేటా అయినా యాప్ డేటాగా పరిగణించబడుతుంది.<ph name="END_PARAGRAPH3" />
<ph name="BEGIN_PARAGRAPH4" />బ్యాకప్ డేటా మీ డిస్క్ నిల్వ కోటాలో లెక్కించబడదు.<ph name="END_PARAGRAPH4" />
<ph name="BEGIN_PARAGRAPH5" />మీరు సెట్టింగ్‌లలో ఈ సేవని ఆఫ్ చేయవచ్చు.<ph name="END_PARAGRAPH5" /></translation>
@@ -7322,14 +7322,14 @@
<translation id="8169165065843881617">{NUM_TABS,plural, =1{చదవాల్సిన లిస్ట్‌కు ట్యాబ్‌ను జోడించండి}other{చదవాల్సిన లిస్ట్‌కు ట్యాబ్‌లను జోడించండి}}</translation>
<translation id="8171334254070436367">అన్ని కార్డ్‌లను దాచు</translation>
<translation id="8174047975335711832">పరికర సమాచారం</translation>
-<translation id="8174876712881364124">Google Driveకు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా డేటాని పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. ఈ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది. బ్యాకప్‌లు Googleకి అప్‌లోడ్ చేయబడతాయి మరియు మీ చిన్నారి Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="8174876712881364124">Google Driveకు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా డేటాను పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. ఈ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది. బ్యాకప్‌లు Googleకు అప్‌లోడ్ చేయబడతాయి మరియు మీ చిన్నారి Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
<translation id="8176332201990304395">గులాబీ రంగు మరియు తెలుపు</translation>
<translation id="8177196903785554304">నెట్‌వర్క్ వివరాలు</translation>
<translation id="8177318697334260664">{NUM_TABS,plural, =1{ట్యాబ్‌ను కొత్త విండోకు తరలించు}other{ట్యాబ్‌లను కొత్త విండోకు తరలించు}}</translation>
<translation id="8179188928355984576">Android యాప్‌లతో ఉపయోగించబడలేదు</translation>
<translation id="8179976553408161302">Enter</translation>
<translation id="8180786512391440389">"<ph name="EXTENSION" />" ఎంచుకున్న స్థానాల్లోని చిత్రాలను, వీడియోను, సౌండ్ ఫైల్స్‌ను చదవగలదు. తొలగించగలదు.</translation>
-<translation id="8181215761849004992">డొమైన్‌కు చేర్చడం సాధ్యపడలేదు. పరికరాలను జోడించడానికి తగిన అధికారాలు మీకు ఉన్నాయో లేదో మీ ఖాతాలో తనిఖీ చేయండి.</translation>
+<translation id="8181215761849004992">డొమైన్‌కు చేర్చడం సాధ్యపడలేదు. పరికరాలను జోడించడానికి తగిన అధికారాలు మీకు ఉన్నాయో లేదో మీ ఖాతాలో చెక్ చేయండి.</translation>
<translation id="8182105986296479640">అప్లికేషన్ స్పందించడం లేదు.</translation>
<translation id="8182412589359523143">ఈ <ph name="DEVICE_TYPE" /> నుండి మొత్తం డేటాను తొలగించడానికి, <ph name="BEGIN_LINK" />ఇక్కడ క్లిక్ చేయండి<ph name="END_LINK" />.</translation>
<translation id="8182664696082410784"><ph name="REASON" />
@@ -7339,7 +7339,7 @@
<translation id="8184472985242519288">ఏకరీతి</translation>
<translation id="8186609076106987817">సర్వర్ ఫైల్‌ను కనుగొనలేకపోయింది.</translation>
<translation id="8186704951085064172"><ph name="VISUAL_SEARCH_PROVIDER" /> సహాయంతో పేజీలోని భాగాన్ని సెర్చ్ చేయండి</translation>
-<translation id="8188389033983459049">మీ పరికర సెట్టింగ్‌లను తనిఖీ చేసి, కొనసాగించడానికి దాన్ని ఆన్ చేయండి</translation>
+<translation id="8188389033983459049">మీ పరికర సెట్టింగ్‌లను చెక్ చేసి, కొనసాగించడానికి దాన్ని ఆన్ చేయండి</translation>
<translation id="8188742492803591566">మీ స్క్రీన్‌ను ప్రసారం చేయడం ప్రారంభించడానికి, Chromecast లేదా TVలో కనిపించే యాక్సెస్ కోడ్‌ను ఎంటర్ చేయండి.</translation>
<translation id="8189306097519446565">స్కూల్ ఖాతాలు</translation>
<translation id="8189750580333936930">గోప్యతా పరిరక్షణ టెక్నాలజీల సెట్</translation>
@@ -7424,7 +7424,7 @@
<ph name="BEGIN_PARAGRAPH4" />అదనంగా మీ చిన్నారి కోసం వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో నిల్వ చేయబడవచ్చు. ఈ సెట్టింగ్‌ల గురించి, వీటిని సర్దుబాటు చేయడం గురించి families.google.comలో మరింత తెలుసుకోండి.<ph name="END_PARAGRAPH4" /></translation>
<translation id="826905130698769948">చెల్లని క్లయింట్ సర్టిఫికెట్</translation>
<translation id="827097179112817503">హోమ్ బటన్‌ను చూపు</translation>
-<translation id="8271268254812352141">మీరు టెక్స్ట్‌ను కుడి క్లిక్ చేసినప్పుడు లేదా తాకి, నొక్కి ఉంచినప్పుడు నిర్వచనాలు, అనువాదాలు, లేదా యూనిట్ మార్పిడులను పొందండి. <ph name="LINK_BEGIN" />వెబ్‌సైట్ భాషల<ph name="LINK_END" />లో అనువాద భాషలను అనుకూలీకరించండి.</translation>
+<translation id="8271268254812352141">మీరు టెక్స్ట్‌ను కుడి క్లిక్ చేసినప్పుడు లేదా తాకి, నొక్కి ఉంచినప్పుడు నిర్వచనాలు, అనువాదాలు, లేదా యూనిట్ మార్పిడులను పొందండి. <ph name="LINK_BEGIN" />వెబ్‌సైట్ భాషల<ph name="LINK_END" />లో అనువాద భాషలను అనుకూలంగా మార్చండి.</translation>
<translation id="8271379370373330993">తల్లిదండ్రులారా, తర్వాత కొన్ని దశలు మీ కోసం. ఖాతాను సెటప్ చేసిన తర్వాత మీరు <ph name="DEVICE_TYPE" />ను చిన్నారికి తిరిగి ఇవ్వవచ్చు.</translation>
<translation id="8272194309885535896">చిత్రాన్ని డౌన్‌లోడ్ చేయి</translation>
<translation id="8272443605911821513">"మరిన్ని సాధనాలు" మెనూలోని ఎక్స్‌టెన్షన్‌లను క్లిక్ చేయడం ద్వారా మీ ఎక్స్‌టెన్షన్‌లను నిర్వహించండి.</translation>
@@ -7432,7 +7432,7 @@
<translation id="8274332263553132018">ఫైల్‌ను ప్రసారం చేయండి</translation>
<translation id="8274921654076766238">మ్యాగ్నిఫైయర్ కీబోర్డ్ ఫోకస్‌ను ఫాలో చేస్తుంది</translation>
<translation id="8274924778568117936">అప్‌డేట్ పూర్తయ్యే వరకు మీ <ph name="DEVICE_TYPE" />ని ఆఫ్ చేయవద్దు లేదా మూసివేయవద్దు. ఇన‌స్ట‌లేష‌న్‌ పూర్తయిన తర్వాత మీ <ph name="DEVICE_TYPE" /> పునఃప్రారంభమవుతుంది.</translation>
-<translation id="8275038454117074363">దిగుమతి చేయి</translation>
+<translation id="8275038454117074363">దిగుమతి చేయండి</translation>
<translation id="8275080796245127762">మీ పరికరం నుండి కాల్ చేయండి</translation>
<translation id="8275339871947079271">మీరు ఎక్కడ సైన్ ఇన్ చేసినా మీ పాస్‌వర్డ్‌ను సురక్షితంగా యాక్సెస్ చేయడానికి దానిని మీ Google ఖాతాకు తరలించండి</translation>
<translation id="8276560076771292512">కాష్‌ను ఖాళీ చేసి, నిర్బంధంగా మళ్లీ లోడ్ చేయి</translation>
@@ -7566,7 +7566,7 @@
<translation id="8425768983279799676">మీరు మీ పిన్‌ని ఉపయోగించి మీ పరికరాన్ని అన్‌లాక్ చేయవచ్చు.</translation>
<translation id="8426111352542548860">గ్రూప్‌ను సేవ్ చేయండి</translation>
<translation id="8426713856918551002">ప్రారంభించబడుతోంది</translation>
-<translation id="8427213022735114808">మీరు రాయాలనుకునేది Googleకి చెబితే చాలు వెంటనే వచన రూపంలోకి మారుస్తుంది.</translation>
+<translation id="8427213022735114808">మీరు రాయాలనుకునేది Googleకు చెబితే చాలు వెంటనే వచన రూపంలోకి మారుస్తుంది.</translation>
<translation id="8427292751741042100">ఏదైనా హోస్ట్‌లో పొందుపరచబడింది</translation>
<translation id="8428213095426709021">సెట్టింగ్‌లు</translation>
<translation id="8428271547607112339">పాఠశాల ఖాతాను జోడించండి</translation>
@@ -7592,7 +7592,7 @@
<translation id="8456512334795994339">పని, ఆటకు సంబంధించిన యాప్‌లను కనుగొనండి</translation>
<translation id="8456761643544401578">ఆటోమేటిక్ డార్క్ మోడ్</translation>
<translation id="845702320058262034">కనెక్ట్ చేయడం సాధ్యపడదు. మీ ఫోన్‌లో బ్లూటూత్ ఆన్ చేసి ఉందని నిర్ధారించుకోండి.</translation>
-<translation id="8457451314607652708">బుక్‌మార్క్‌లను దిగుమతి చేయి</translation>
+<translation id="8457451314607652708">బుక్‌మార్క్‌లను దిగుమతి చేయండి</translation>
<translation id="8458341576712814616">షార్ట్‌కట్</translation>
<translation id="8458627787104127436">అన్నింటినీ (<ph name="URL_COUNT" />) కొత్త విండోలో తెరవండి</translation>
<translation id="8460448946170646641">ముఖ్య గోప్యతా, సెక్యూరిటీ కంట్రోల్స్ రివ్యూ</translation>
@@ -7645,7 +7645,7 @@
<translation id="8509967119010808787">మీ ట్యాబ్‌లను సెర్చ్ చేయడానికి, ఇక్కడ క్లిక్ చేయండి</translation>
<translation id="8512396579636492893">{COUNT,plural, =0{బలహీనమైన పాస్‌వర్డ్‌లు ఏవీ కనుగొనబడలేదు}=1{{COUNT} బలహీనమైన పాస్‌వర్డ్ కనుగొనబడింది}other{{COUNT} బలహీనమైన పాస్‌వర్డ్‌లు కనుగొనబడ్డాయి}}</translation>
<translation id="8512476990829870887">ప్రాసెస్‌ని ముగించు</translation>
-<translation id="851263357009351303">చిత్రాలను చూపించడానికి ఎల్లప్పుడూ <ph name="HOST" />ను అనుమతించు</translation>
+<translation id="851263357009351303">చిత్రాలను చూపించడానికి ఎల్లప్పుడూ <ph name="HOST" />ను అనుమతించండి</translation>
<translation id="8513108775083588393">ఆటో-రొటేట్</translation>
<translation id="8514746246728959655">వేరొక సెక్యూరిటీ కీని ప్రయత్నించండి</translation>
<translation id="8523493869875972733">మార్పులను అలాగే ఉంచు</translation>
@@ -7672,7 +7672,7 @@
<translation id="8543556556237226809">ప్రశ్నలు ఏమైనా ఉన్నాయా? మీ ప్రొఫైల్‌ను పర్యవేక్షించే వ్యక్తిని సంప్రదించండి.</translation>
<translation id="8546186510985480118">పరికరంలో తక్కువ స్థలం ఉంది</translation>
<translation id="8546306075665861288">చిత్రం కాష్</translation>
-<translation id="8546930481464505581">టచ్ బార్‌ని అనుకూలీకరించండి</translation>
+<translation id="8546930481464505581">టచ్ బార్‌ని అనుకూలంగా మార్చండి</translation>
<translation id="8547013269961688403">ఫుల్-స్క్రీన్‌ మాగ్నిఫయర్‌ను ప్రారంభించండి</translation>
<translation id="85486688517848470">ఎగువ-అడ్డు వరుసలోని కీల ప్రవర్తనను మార్చడానికి శోధన కీని నొక్కి ఉంచండి</translation>
<translation id="8549316893834449916">మీ Chromebookకు సైన్ ఇన్ చేయడానికి మీరు మీ Google ఖాతాను ఉపయోగిస్తారు – Gmail, Drive, YouTube మరిన్నింటి కోసం మీరు ఉపయోగించే అదే ఖాతా.</translation>
@@ -7692,7 +7692,7 @@
<translation id="8569682776816196752">గమ్యస్థానాలు కనుగొనబడలేదు</translation>
<translation id="8571213806525832805">గత 4 వారాలు</translation>
<translation id="8571687764447439720">Kerberos టిక్కెట్‌ను జోడించండి</translation>
-<translation id="8574990355410201600"><ph name="HOST" />లో ఎల్లప్పుడూ ధ్వనిని అనుమతించు</translation>
+<translation id="8574990355410201600"><ph name="HOST" />లో ఎల్లప్పుడూ ధ్వనిని అనుమతించండి</translation>
<translation id="8575286410928791436">నిష్క్రమించడానికి <ph name="KEY_EQUIVALENT" />ని పట్టుకొని ఉంచండి</translation>
<translation id="8576885347118332789">{NUM_TABS,plural, =1{చదవాల్సిన లిస్ట్‌కు ట్యాబ్‌ను జోడించండి}other{చదవాల్సిన లిస్ట్‌కు ట్యాబ్‌లను జోడించండి}}</translation>
<translation id="8578639784464423491">99 అక్షరాలను మించకూడదు</translation>
@@ -7709,7 +7709,7 @@
<translation id="8591783563402255548">1 సెకను</translation>
<translation id="8592141010104017453">నోటిఫికేషన్‌లను అస్సలు చూపవద్దు</translation>
<translation id="859246725979739260">మీ లొకేషన్‌ను యాక్సెస్ చేయనివ్వకుండా ఈ సైట్ బ్లాక్ చేయబడింది.</translation>
-<translation id="8593121833493516339">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీని ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ కావచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="8593121833493516339">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీని ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ కావచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
<translation id="8594908476761052472">వీడియోను క్యాప్చర్ చేయి</translation>
<translation id="8596540852772265699">అనుకూల ఫైళ్ళు</translation>
<translation id="8597845839771543242">లక్షణ ఆకృతి:</translation>
@@ -7724,7 +7724,7 @@
<translation id="8611682088849615761">MIDI డివైజ్‌లపై పూర్తి కంట్రోల్‌ను కలిగి ఉండటానికి ఈ సైట్‌ను అనుమతించడాన్ని కొనసాగించు</translation>
<translation id="8613164732773110792">లోయర్‌కేస్ అక్షరాలు, అంకెలు, కింది గీతలు లేదా డాష్‌లు మాత్రమే</translation>
<translation id="8613645710357126807">ఎక్స్‌టెన్షన్‌లను ఉపయోగించడానికి అనుమతి లేదు</translation>
-<translation id="8613786722548417558">భద్రతా తనిఖీ చేయడానికి వీల్లేనంతగా <ph name="FILE_NAME" /> చాలా పెద్దగా ఉంది. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను తెరవగలరు.</translation>
+<translation id="8613786722548417558">భద్రతా చెక్ చేయడానికి వీల్లేనంతగా <ph name="FILE_NAME" /> చాలా పెద్దగా ఉంది. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను తెరవగలరు.</translation>
<translation id="8615618338313291042">అజ్ఞాత యాప్: <ph name="APP_NAME" /></translation>
<translation id="8616441548384109662">మీ కాంటాక్ట్‌లకు <ph name="CONTACT_NAME" />ను జోడించండి</translation>
<translation id="8617748779076050570">సురక్షిత కనెక్షన్ ID: <ph name="CONNECTION_ID" /></translation>
@@ -7754,7 +7754,7 @@
<translation id="8636284842992792762">ఎక్స్‌టెన్షన్‌లను ప్రారంభిస్తోంది...</translation>
<translation id="8636500887554457830">పాప్-అప్‌లను పంపడానికి లేదా మళ్లింపులను ఉపయోగించడానికి సైట్‌లను అనుమతించకండి</translation>
<translation id="8637688295594795546">సిస్టమ్ అప్‌డేట్‌ అందుబాటులో ఉంది. డౌన్‌లోడ్ చేయ‌డానికి సిద్ధం చేస్తోంది...</translation>
-<translation id="8639047128869322042">హానికరమైన సాఫ్ట్‌వేర్‌ కోసం తనిఖీ చేస్తోంది...</translation>
+<translation id="8639047128869322042">హానికరమైన సాఫ్ట్‌వేర్‌ కోసం చెక్ చేస్తోంది...</translation>
<translation id="8639635302972078117">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ డేటాను, పరికరం డేటాను, దానితో పాటు యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపుతోంది. ఇది మీ చిన్నారిని గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత ఏకీకృత డేటా కూడా Google యాప్‌లకు, Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు.</translation>
<translation id="8642900771896232685">2 సెకన్లు</translation>
<translation id="8642947597466641025">టెక్స్ట్‌ని పెద్దదిగా చేయి</translation>
@@ -7785,7 +7785,7 @@
<translation id="8662811608048051533">చాలా సైట్‌ల నుండి మిమ్మల్ని సైన్ అవుట్ చేస్తుంది.</translation>
<translation id="8662911384982557515">మీ హోమ్ పేజీని దీనికి మార్చండి: <ph name="HOME_PAGE" /></translation>
<translation id="8662978096466608964">వాల్‌పేపర్‌ను Chrome సెట్ చేయలేదు.</translation>
-<translation id="8663099077749055505"><ph name="HOST" />లో ఎల్లప్పుడూ బహుళ ఆటోమేటిక్‌ డౌన్‌లోడ్‌లను బ్లాక్ చేయి</translation>
+<translation id="8663099077749055505"><ph name="HOST" />లో ఎల్లప్పుడూ బహుళ ఆటోమేటిక్‌ డౌన్‌లోడ్‌లను బ్లాక్ చేయండి</translation>
<translation id="8664389313780386848">పేజీ మూలాన్ని &amp;వీక్షించండి</translation>
<translation id="8665110742939124773">మీరు తప్పు యాక్సెస్ కోడ్‌ను ఎంటర్ చేశారు. మళ్లీ ట్రై చేయండి.</translation>
<translation id="8665180165765946056">బ్యాకప్ పూర్తయింది</translation>
@@ -7829,7 +7829,7 @@
<translation id="8705580154597116082">ఫోన్ ద్వారా Wi-Fi అందుబాటులో ఉంది</translation>
<translation id="8705629851992224300">మీ 'సెక్యూరిటీ కీ'లోని ఆధారాలను చూడటం సాధ్యం కాలేదు</translation>
<translation id="8706111173576263877">QR code స్కాన్ చేయబడింది.</translation>
-<translation id="8708000541097332489">నిష్క్రమించేటప్పుడు క్లియర్ చేయి</translation>
+<translation id="8708000541097332489">నిష్క్రమించేటప్పుడు క్లియర్ చేయండి</translation>
<translation id="870805141700401153">Microsoft Individual Code Signing</translation>
<translation id="8708671767545720562">&amp;మరింత సమాచారం</translation>
<translation id="8711402221661888347">ఊరగాయలు</translation>
@@ -7845,7 +7845,7 @@
<translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> డౌన్‌లోడ్ విఫలమైంది</translation>
<translation id="8720200012906404956">మొబైల్ నెట్‌వర్క్‌ కోసం చూస్తోంది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
<translation id="8720816553731218127">ఇన్‌స్టాలేషన్-సమయాల లక్షణాలు ప్రారంభిస్తుండగా సమయం మించిపోయింది.</translation>
-<translation id="8722912030556880711">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="8722912030556880711">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపుతుంది. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="8724405322205516354">మీకు ఈ చిహ్నం కనిపించినప్పుడు, గుర్తింపు లేదా కొనుగోళ్ల ఆమోదం కోసం మీ వేలిముద్రను ఉపయోగించండి.</translation>
<translation id="8724409975248965964">వేలిముద్ర జోడించబడింది</translation>
<translation id="8724859055372736596">ఫోల్డర్‌లో &amp;చూపించు</translation>
@@ -7870,7 +7870,7 @@
<translation id="8740247629089392745">మీరు ఈ Chromebookను <ph name="SUPERVISED_USER_NAME" />కు ఇవ్వవచ్చు. సెటప్ దాదాపు పూర్తయింది, మరిన్ని విషయాలను తెలుసుకునే సమయం ఆసన్నమైంది.</translation>
<translation id="8740672167979365981">ChromeOS Flex అప్‌డేట్ అవసరం</translation>
<translation id="8741944563400125534">స్విచ్ యాక్సెస్ సెటప్ గైడ్</translation>
-<translation id="8742998548129056176">మీ పరికరం గురించి, మీరు దానిని ఉపయోగించే పద్ధతి గురించి (బ్యాటరీ స్థాయి, సిస్టమ్, యాప్‌ల యాక్టివిటీ, ఎర్రర్‌ల లాంటివి) తెలియజేసే సాధారణ సమాచారం. Androidను మెరుగుపరచడం కోసం ఈ డేటా ఉపయోగించబడుతుంది. కొంత ఏకీకృత సమాచారం- Google యాప్‌లు, Android డెవలపర్‌ల వంటి భాగస్వాముల యాప్‌లను, ఉత్పత్తులను మెరుగుపరచడంలో సహాయపడుతుంది.</translation>
+<translation id="8742998548129056176">మీ పరికరం గురించి, మీరు దానిని ఉపయోగించే పద్ధతి గురించి (బ్యాటరీ స్థాయి, సిస్టమ్, యాప్‌ల యాక్టివిటీ, ఎర్రర్‌ల లాంటివి) తెలియజేసే సాధారణ సమాచారం. Androidను మెరుగుపరచడం కోసం ఈ డేటా ఉపయోగించబడుతుంది. కొంత ఏకీకృత సమాచారం- Google యాప్‌లు, Android డెవలపర్‌ల వంటి భాగస్వాముల యాప్‌లను, ప్రోడక్టులను మెరుగుపరచడంలో సహాయపడుతుంది.</translation>
<translation id="8746654918629346731">మీరు "<ph name="EXTENSION_NAME" />"ను ఇప్పటికే రిక్వెస్ట్ చేశారు</translation>
<translation id="874689135111202667">{0,plural, =1{ఈ సైట్‌కు ఒక ఫైల్‌ను అప్‌లోడ్ చేయాలా?}other{ఈ సైట్‌కు # ఫైళ్లను అప్‌లోడ్ చేయాలా?}}</translation>
<translation id="8749805710397399240">మీ స్క్రీన్‌ను ప్రసారం చేయడం సాధ్యపడలేదు. సిస్టమ్ ప్రాధాన్యతలలో ఉన్న 'స్క్రీన్ రికార్డింగ్' అనుమతిని చెక్ చేయండి.</translation>
@@ -7896,7 +7896,7 @@
<translation id="8761945298804995673">ఈ వినియోగదారు ఇప్పటికే ఉన్నారు.</translation>
<translation id="8762886931014513155">మీ <ph name="DEVICE_TYPE" />ని అప్‌డేట్ చేయాలి</translation>
<translation id="8763927697961133303">USB పరికరం</translation>
-<translation id="87646919272181953">Google ఫోటోల ఆల్బమ్</translation>
+<translation id="87646919272181953">Google Photos ఆల్బమ్</translation>
<translation id="8767621466733104912">అందరు వినియోగదారుల కోసం Chromeను ఆటోమేటిక్‌గా అప్‌డేట్ చేయి</translation>
<translation id="8767765348545497220">సహాయ బబుల్‌ను మూసివేయి</translation>
<translation id="8769901904650373714">Steamను సెటప్ చేయడంలో సమస్య ఏర్పడింది</translation>
@@ -7954,7 +7954,7 @@
<translation id="8821268776955756404"><ph name="APP_NAME" /> ఉపయోగించడానికి సిద్ధంగా ఉంది.</translation>
<translation id="882204272221080310">అదనపు భద్రత కోసం ఫర్మ్‌వేర్‌ను అప్‌డేట్ చేయండి.</translation>
<translation id="8823514049557262177">లింక్ వచ&amp;నం కాపీ చేయి</translation>
-<translation id="8823559166155093873">కుక్కీలను బ్లాక్ చేయి</translation>
+<translation id="8823559166155093873">కుక్కీలను బ్లాక్ చేయండి</translation>
<translation id="8823704566850948458">పాస్‌వర్డ్‌‌ను సూచించండి...</translation>
<translation id="8824701697284169214">పే&amp;జీని జోడించండి...</translation>
<translation id="8827125715368568315"><ph name="PERMISSION" />, మరో <ph name="COUNT" /> బ్లాక్ చేయబడ్డాయి</translation>
@@ -7964,7 +7964,7 @@
<translation id="8828933418460119530">DNS పేరు</translation>
<translation id="883062543841130884">ప్రత్యామ్నాయాలు</translation>
<translation id="8830779999439981481">అప్‌డేట్‌లను వర్తింపజేయడానికి రీస్టార్ట్ అవుతోంది</translation>
-<translation id="8830796635868321089">ప్రస్తుత ప్రాక్సీ సెట్టింగ్‌లను ఉపయోగించి అప్‌‌డేట్‌ను తనిఖీ చేయడం విఫలమైంది. దయచేసి మీ <ph name="PROXY_SETTINGS_LINK_START" />ప్రాక్సీ సెట్టింగ్‌ల<ph name="PROXY_SETTINGS_LINK_END" />ను సర్దుబాటు చేయండి.</translation>
+<translation id="8830796635868321089">ప్రస్తుత ప్రాక్సీ సెట్టింగ్‌లను ఉపయోగించి అప్‌‌డేట్‌ను చెక్ చేయడం విఫలమైంది. దయచేసి మీ <ph name="PROXY_SETTINGS_LINK_START" />ప్రాక్సీ సెట్టింగ్‌ల<ph name="PROXY_SETTINGS_LINK_END" />ను సర్దుబాటు చేయండి.</translation>
<translation id="8832781841902333794">మీ ప్రొఫైళ్లు</translation>
<translation id="8834039744648160717">నెట్‌వర్క్ కాన్ఫిగరేషన్‌ను <ph name="USER_EMAIL" /> నియంత్రిస్తున్నారు.</translation>
<translation id="8835786707922974220">మీరు మీ సేవ్ చేయబడిన పాస్‌వర్డ్‌లను ఎల్లప్పుడూ యాక్సెస్ చేయగలరని నిర్ధారించుకోండి</translation>
@@ -8090,7 +8090,7 @@
<translation id="895347679606913382">ప్రారంభిస్తోంది...</translation>
<translation id="8953654039337655940">మీ తల్లి/తండ్రికి వారి Google Family Link యాప్‌నకు, అలాగే families.google.comకు ఒక అప్రూవల్ రిక్వెస్ట్ పంపబడింది. ఒకవేళ మీ తల్లి/తండ్రి ఆ రిక్వెస్ట్‌ను ఆమోదిస్తే, మీకు నోటిఫికేషన్ వస్తుంది.</translation>
<translation id="8956230710625245889">రీడర్‌లో తెరవండి</translation>
-<translation id="8957757410289731985">ప్రొఫైల్‌ను అనుకూలంగా మార్చు</translation>
+<translation id="8957757410289731985">ప్రొఫైల్‌ను అనుకూలంగా మార్చండి</translation>
<translation id="895944840846194039">JavaScript మెమరీ</translation>
<translation id="8960208913905765425">త్వరిత సమాధానాల యూనిట్ మార్పిడి</translation>
<translation id="8962051932294470566">మీరు ఒకసారి ఒక ఫైల్‌ను మాత్రమే షేర్ చేయగలరు. ప్రస్తుత బదిలీ పూర్తయినప్పుడు మీరు మళ్లీ ట్రై చేయండి.</translation>
@@ -8105,14 +8105,14 @@
<translation id="8968766641738584599">కార్డ్‌ని సేవ్ చేయండి</translation>
<translation id="89720367119469899">ఎస్కేప్</translation>
<translation id="8972513834460200407">దయచేసి Google సర్వర్‌ల నుండి డౌన్‌లోడ్‌లను ఫైర్‌వాల్ బ్లాక్ చేయడం లేదని నిర్ధారించుకోవడానికి మీ నెట్‌వర్క్ నిర్వాహకుడిని సంప్రదించండి.</translation>
-<translation id="8973557916016709913">జూమ్ స్థాయిని తీసివేయి</translation>
-<translation id="8973596347849323817">మీరు మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలీకరించవచ్చు. ఈ యాక్సెస్ చేయగల ఫీచర్లను సెట్టింగ్స్‌లో తర్వాత మార్చవచ్చు.</translation>
+<translation id="8973557916016709913">జూమ్ స్థాయిని తీసివేయండి</translation>
+<translation id="8973596347849323817">మీరు మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలంగా మార్చవచ్చు. ఈ యాక్సెస్ చేయగల ఫీచర్లను సెట్టింగ్స్‌లో తర్వాత మార్చవచ్చు.</translation>
<translation id="897414447285476047">కనెక్షన్ సమస్య కారణంగా గమ్యస్థాన ఫైల్ సంపూర్ణంగా లేదు.</translation>
<translation id="897525204902889653">క్వారెంటైన్ సేవ</translation>
<translation id="8975396729541388937">మీరు అందుకునే ఇమెయిల్‌లలోని లింక్‌ను క్లిక్ చేయడం ద్వారా ఎప్పుడైనా సబ్‌స్క్రిప్షన్‌ను తీసివేయవచ్చు.</translation>
<translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ఇంకా 1 వేరే ట్యాబ్}other{"<ph name="TAB_TITLE" />" ఇంకా # వేరే ట్యాబ్‌లు}}</translation>
<translation id="8977811652087512276">పాస్‌వర్డ్ తప్పు లేదా ఫైల్ పాడైంది</translation>
-<translation id="8978154919215542464">ఆన్‌లో ఉంది - ప్రతిదీ సమకాలీకరిస్తుంది</translation>
+<translation id="8978154919215542464">ఆన్‌లో ఉంది - ప్రతిదీ సింక్ చేస్తుంది</translation>
<translation id="897939795688207351"><ph name="ORIGIN" />లో</translation>
<translation id="8980345560318123814">Feedback రిపోర్ట్‌లు</translation>
<translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - క్రాష్ అయ్యింది</translation>
@@ -8131,8 +8131,8 @@
<translation id="899657321862108550">మీ Chrome, అన్ని పరికరాలలో పొందవచ్చు</translation>
<translation id="899676909165543803">మీ కీబోర్డ్‌లో దిగువున కుడివైపు కీ కింది భాగంలో వేలిముద్ర సెన్సార్ ఉంది. ఏదైనా వేలితో దానిపై మెల్లగా తాకండి.</translation>
<translation id="8999560016882908256">ఒక విభాగంలో సింటాక్స్ ఎర్రర్: <ph name="ERROR_LINE" /></translation>
-<translation id="9003647077635673607">అన్ని వెబ్‌సైట్‌ల్లో అనుమతించు</translation>
-<translation id="9003677638446136377">మళ్లీ తనిఖీ చేయి</translation>
+<translation id="9003647077635673607">అన్ని వెబ్‌సైట్‌ల్లో అనుమతించండి</translation>
+<translation id="9003677638446136377">మళ్లీ చెక్ చేయండి</translation>
<translation id="9004754973617721124"><ph name="SITE_NAME" />, దానికి సంబంధించిన అన్ని సైట్‌లు, ఇంకా ఇన్‌స్టాల్ చేయబడిన యాప్‌లో సైట్ డేటాను, ఇంకా అనుమతులను క్లియర్ చేయాలనుకుంటున్నారా?</translation>
<translation id="9008201768610948239">విస్మరించు</translation>
<translation id="9008201858626224558"><ph name="SUBPAGE_TITLE" /> వివరాలకు సంబంధించిన పేజీ 'వెనుకకు' బటన్</translation>
@@ -8153,10 +8153,10 @@
<translation id="9021662811137657072">వైరస్ కనుగొనబడింది</translation>
<translation id="902236149563113779">గేమ్‌లు లేదా ముందస్తు హెచ్చరిక దిశలు వంటి AR ఫీచర్‌ల కోసం సాధారణంగా సైట్‌లు మీ కెమెరా పొజిషన్‌ను ట్రాక్ చేస్తాయి</translation>
<translation id="9022847679183471841">ఈ ఖాతా ఈ కంప్యూటర్‌లో ఇప్పటికే <ph name="AVATAR_NAME" /> ద్వారా ఉపయోగించబడుతోంది.</translation>
-<translation id="9023015617655685412">ఈ ట్యాబ్‌ను బుక్‌మార్క్ చేయి...</translation>
+<translation id="9023015617655685412">ఈ ట్యాబ్‌ను బుక్‌మార్క్ చేయండి...</translation>
<translation id="9023909777842748145">ఈ ఫీచర్‌ను ఆఫ్ చేయడం వలన సిస్టమ్ అప్‌డేట్‌లు, భద్రత లాంటి ముఖ్యమైన సేవలకు అవసరమైన సమాచారాన్ని పంపగల మీ పరికర సామర్థ్యం ప్రభావితం కాదు.</translation>
<translation id="9024127637873500333">&amp;కొత్త‌ ట్యాబ్‌లో తెరువు</translation>
-<translation id="9024158959543687197">షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. ఫైల్ షేర్ URLని తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="9024158959543687197">షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. ఫైల్ షేర్ URLని చెక్ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
<translation id="9024692527554990034">ఒక నిర్దిష్ట సైట్‌ను వేగంగా వెతకడానికి లేదా వేరొక సెర్చ్ ఇంజిన్‌ను ఉపయోగించడానికి మీరు అడ్రస్ బార్‌లో షార్ట్‌కట్‌లను ఉపయోగించవచ్చు</translation>
<translation id="9026731007018893674">డౌన్‌లోడ్</translation>
<translation id="9026852570893462412">ఈ ప్రాసెస్‌కు కొన్ని నిమిషాలు పట్టవచ్చు. మర్చువల్ మెషీన్ డౌన్‌లోడ్ అవుతోంది.</translation>
@@ -8189,7 +8189,7 @@
<translation id="9048745018038487540">అన్ని ఫాంట్‌లను ఎంచుకోండి</translation>
<translation id="9050666287014529139">రహస్య పదబంధం</translation>
<translation id="9052404922357793350">బ్లాక్ చేయడాన్ని కొనసాగించు</translation>
-<translation id="9053563360605707198">రెండు వైపులా ముద్రించు</translation>
+<translation id="9053563360605707198">రెండు వైపులా ప్రింట్ చేయండి</translation>
<translation id="9053893665344928494">నా ఎంపికను గుర్తుంచుకో</translation>
<translation id="9055636786322918818">RC4 ఎన్‌క్రిప్షన్‌ను అమలు చేయండి. ఈ ఎంపికను ఉపయోగించడం వలన RC4 సైఫర్‌లు అసురక్షితమైనవి కాబట్టి మీకు హాని పెరుగుతుంది.</translation>
<translation id="9056810968620647706">పోలికలు ఏవీ దొరకలేదు.</translation>
@@ -8231,8 +8231,8 @@
<translation id="9094033019050270033">పాస్‌వర్డ్‌ను అప్‌డేట్ చేయి</translation>
<translation id="9094038138851891550">వినియోగదారు పేరు చెల్లదు</translation>
<translation id="9094859731829297286">మీరు ఖచ్చితంగా Linux కోసం ఒక స్థిర పరిమాణం గల డిస్క్‌ను రిజర్వ్ చేయాలనుకుంటున్నారా?</translation>
-<translation id="9094982973264386462">తీసివేయి</translation>
-<translation id="9095253524804455615">తీసివేయి</translation>
+<translation id="9094982973264386462">తీసివేయండి</translation>
+<translation id="9095253524804455615">తీసివేయండి</translation>
<translation id="909554839118732438">అజ్ఞాత విండోలన్నింటినీ మూసివేయండి</translation>
<translation id="9100416672768993722">చివరిగా ఉపయోగించిన ఇన్‌పుట్ విధానానికి స్విచ్ చేయడానికి, <ph name="BEGIN_SHORTCUT" /><ph name="BEGIN_CTRL" />Ctrl<ph name="END_CTRL" /><ph name="SEPARATOR" /><ph name="BEGIN_SPACE" />Space<ph name="END_SPACE" /><ph name="END_SHORTCUT" /> కీలను నొక్కండి</translation>
<translation id="9100765901046053179">అధునాతన సెట్టింగ్‌లు</translation>
@@ -8285,7 +8285,7 @@
<translation id="9142637293078737510">ఇమేజ్ మారుపేరు</translation>
<translation id="9143298529634201539">సూచనను తీసివేయాలా?</translation>
<translation id="9147392381910171771">&amp;ఐచ్ఛికాలు</translation>
-<translation id="9148058034647219655">నిష్క్రమించు</translation>
+<translation id="9148058034647219655">నిష్క్రమించండి</translation>
<translation id="9148126808321036104">మళ్ళీ సైన్ ఇన్ చేయండి</translation>
<translation id="9148963623915467028">ఈ సైట్ మీ లొకేషన్‌ను యాక్సెస్ చేయగలదు.</translation>
<translation id="9149529198050266366">సూర్యోదయ సమయానికి డార్క్ మోడ్ ఆటోమేటిక్‌గా ఆఫ్ అవుతుంది</translation>
@@ -8293,12 +8293,12 @@
<translation id="9150045010208374699">మీ కెమెరాను ఉపయోగించండి</translation>
<translation id="9150079578948279438">ప్రొఫైల్‌ను తీసివేయడం సాధ్యపడలేదు. దయచేసి మళ్లీ ట్రై చేయండి లేదా టెక్నికల్ సపోర్ట్ కోసం మీ క్యారియర్‌ను సంప్రదించండి.</translation>
<translation id="9150860646299915960">మీ Linux కంటెయినర్‌ను అప్‌గ్రేడ్ చేయండి</translation>
-<translation id="9154194610265714752">నవీకరించబడింది</translation>
+<translation id="9154194610265714752">అప్‌డేట్ చేయబడింది</translation>
<translation id="91568222606626347">షార్ట్‌కట్‌ను క్రియేట్ చేయండి...</translation>
<translation id="9157096865782046368">0.8 సెకన్లు</translation>
<translation id="9157697743260533322">వినియోగదారులందరి కోసం ఆటోమేటిక్ అప్‌డేట్‌లను సెటప్ చేయడం విఫలమైంది (ప్రీఫ్లయిట్ ప్రారంభ ఎర్రర్: <ph name="ERROR_NUMBER" />)</translation>
<translation id="9157915340203975005">ప్రింటర్ డోర్ తెరిచి ఉంది</translation>
-<translation id="9158715103698450907">అయ్యో! ప్రామాణీకరణ సమయంలో నెట్‌వర్క్ కమ్యూనికేషన్ సమస్య ఏర్పడింది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="9158715103698450907">అయ్యో! ప్రామాణీకరణ సమయంలో నెట్‌వర్క్ కమ్యూనికేషన్ సమస్య ఏర్పడింది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="9159643062839240276">ఇలా ప్రయత్నించండి:
<ph name="BEGIN_LIST" />
<ph name="LIST_ITEM" />నెట్‌వర్క్ కేబుల్‌లు, మోడెమ్, రూటర్‌ను చెక్ చేయండి
@@ -8317,7 +8317,7 @@
<translation id="9170884462774788842">మీ కంప్యూటర్‌లోని మరో ప్రోగ్రామ్ జోడించిన థీమ్ కారణంగా Chrome పని చేసే విధానం మారవచ్చు.</translation>
<translation id="917350715406657904"><ph name="APP_NAME" /> కోసం మీ తల్లి/తండ్రి సెట్ చేసిన సమయ పరిమితిని మీరు చేరుకున్నారు. మీరు రేపు దానిని <ph name="TIME_LIMIT" /> సమయం ఉపయోగించవచ్చు.</translation>
<translation id="9174401638287877180">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారిని గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత ఏకీకృత డేటా కూడా Google యాప్‌లకు, Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు.</translation>
-<translation id="9176476835295860688">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="9176476835295860688">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపుతుంది. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. మీ అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - బ్లూటూత్ పరికరం కనెక్ట్ చేయబడింది</translation>
<translation id="9177949831069307748">ChromeOS Flex పరికర సమాచారం అలాగే పరికర డేటాను చదవండి.</translation>
<translation id="9178061802301856367">సైన్-ఇన్ డేటాను తొలగించండి</translation>
@@ -8328,13 +8328,13 @@
<translation id="918352324374649435">{COUNT,plural, =1{యాప్}other{# యాప్‌లు}}</translation>
<translation id="9186963452600581158">చిన్నారి Google ఖాతాతో సైన్ ఇన్ చేయండి</translation>
<translation id="9187967020623675250">కీలు మ్యాచ్ కాలేదు. <ph name="RESPONSE" /> కోసం ఏదైనా కీని నొక్కండి.</translation>
-<translation id="9188732951356337132">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
+<translation id="9188732951356337132">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ యాక్టివిటీ సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="919679265671373777">మీ ఫోన్‌లోని తాజా ఫోటోలు, మీడియాను చూడండి. మీ ఫోన్‌లోని మెసేజింగ్ యాప్‌లలో ఉన్న వాటిని స్ట్రీమ్ చేయండి.</translation>
<translation id="919686179725692564">మీ యాప్‌లను బ్యాకప్ చేయడం గురించి మరింత తెలుసుకోండి</translation>
<translation id="9198090666959937775">మీ Android ఫోన్‌ను సెక్యూరిటీ కీగా ఉపయోగించండి</translation>
<translation id="9199503643457729322">గోప్యతా గైడ్ నుండి దూరంగా నావిగేట్ అవ్వడానికి క్లిక్ చేయండి.</translation>
<translation id="9200339982498053969"><ph name="ORIGIN" />, <ph name="FOLDERNAME" />‌లోని ఫైళ్లను ఎడిట్ చేయగలదు</translation>
-<translation id="920045321358709304"><ph name="SEARCH_ENGINE" />ని వెతుకు</translation>
+<translation id="920045321358709304"><ph name="SEARCH_ENGINE" />ని వెతకండి</translation>
<translation id="9201023452444595544">ఏదైనా ఆఫ్‌లైన్ డేటా ఉంటే తీసివేయబడుతుంది</translation>
<translation id="9201117361710210082">గతంలో చూశారు</translation>
<translation id="9201220332032049474">స్క్రీన్ లాక్ ఎంపికలు</translation>
@@ -8342,7 +8342,7 @@
<translation id="9203398526606335860">&amp;ప్రొఫైలింగ్ అనుమతించబడింది</translation>
<translation id="9203904171912129171">ఒక పరికరాన్ని ఎంచుకోండి</translation>
<translation id="9206889157914079472">స్టైలస్ లాక్ స్క్రీన్ నుండి విషయ సేకరణ</translation>
-<translation id="9209563766569767417">Linux కంటెయినర్ సెటప్‌ను తనిఖీ చేస్తోంది</translation>
+<translation id="9209563766569767417">Linux కంటెయినర్ సెటప్‌ను చెక్ చేస్తోంది</translation>
<translation id="9209689095351280025">వెబ్ అంతటా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే కుక్కీలను సైట్‌లు ఉపయోగించడం సాధ్యం కాదు</translation>
<translation id="9211177926627870898">అప్‌డేట్ అవసరం</translation>
<translation id="9214520840402538427">అయ్యో! ఇన‌స్ట‌లేష‌న్-సమయ లక్షణాల ప్రారంభ సమయం ముగిసింది. దయచేసి మీ మద్దతు ప్రతినిధిని సంప్రదించండి.</translation>
@@ -8360,8 +8360,8 @@
<translation id="930893132043726269">ప్రస్తుతం రోమింగ్‌లో ఉంది</translation>
<translation id="932327136139879170">హోమ్</translation>
<translation id="932508678520956232">ముద్రించడాన్ని ప్రారంభించడం సాధ్యం కాలేదు.</translation>
-<translation id="933427034780221291">{NUM_FILES,plural, =1{భద్రతా తనిఖీ చేయడానికి వీల్లేనంతగా ఈ ఫైల్ చాలా పెద్దగా ఉంది. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను అప్‌లోడ్ చేయగలరు.}other{ఈ ఫైల్స్‌లో కొన్ని, భద్రతా తనిఖీ చేయడానికి వీల్లేనంత పెద్దగా ఉన్నాయి. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను అప్‌లోడ్ చేయగలరు.}}</translation>
-<translation id="93343527085570547">చట్టపరమైన కారణాలతో కంటెంట్ మార్పులను అభ్యర్ధించడానికి <ph name="BEGIN_LINK1" />చట్టపరమైన అంశాల సహాయ పేజీ<ph name="END_LINK1" />కు వెళ్లండి. కొంత ఖాతా మరియు సిస్టమ్ సమాచారం Googleకి పంపబడవచ్చు. సాంకేతిక సమస్యల పరిష్కారానికి మరియు మా సేవలను మెరుగుపరచడానికి మీరు మాకు ఇచ్చిన సమాచారాన్ని మా <ph name="BEGIN_LINK2" />గోప్యతా పాలసీ<ph name="END_LINK2" /> మరియు <ph name="BEGIN_LINK3" />సేవా నిబంధనలు<ph name="END_LINK3" />కు లోబడి మేము ఉపయోగిస్తాము.</translation>
+<translation id="933427034780221291">{NUM_FILES,plural, =1{భద్రతా చెక్ చేయడానికి వీల్లేనంతగా ఈ ఫైల్ చాలా పెద్దగా ఉంది. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను అప్‌లోడ్ చేయగలరు.}other{ఈ ఫైల్స్‌లో కొన్ని, భద్రతా చెక్ చేయడానికి వీల్లేనంత పెద్దగా ఉన్నాయి. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్‌ను అప్‌లోడ్ చేయగలరు.}}</translation>
+<translation id="93343527085570547">చట్టపరమైన కారణాలతో కంటెంట్ మార్పులను అభ్యర్ధించడానికి <ph name="BEGIN_LINK1" />చట్టపరమైన అంశాల సహాయ పేజీ<ph name="END_LINK1" />కు వెళ్లండి. కొంత ఖాతా మరియు సిస్టమ్ సమాచారం Googleకు పంపబడవచ్చు. సాంకేతిక సమస్యల పరిష్కారానికి మరియు మా సేవలను మెరుగుపరచడానికి మీరు మాకు ఇచ్చిన సమాచారాన్ని మా <ph name="BEGIN_LINK2" />గోప్యతా పాలసీ<ph name="END_LINK2" /> మరియు <ph name="BEGIN_LINK3" />సేవా నిబంధనలు<ph name="END_LINK3" />కు లోబడి మేము ఉపయోగిస్తాము.</translation>
<translation id="93393615658292258">పాస్‌వర్డ్ మాత్రమే</translation>
<translation id="934244546219308557">ఈ గ్రూప్‌నకు పేరు పెట్టండి</translation>
<translation id="934503638756687833">అవసరమైతే ఇక్కడ లిస్ట్‌ చేయబడని అంశాలను కూడా తీసివేయవచ్చు. Chrome గోప్యత విధాన డాక్యుమెంట్‌లో &lt;a href="<ph name="URL" />"&gt;అవాంఛిత సాఫ్ట్‌వేర్ రక్షణ&lt;/a&gt; గురించి మరింత తెలుసుకోండి.</translation>
@@ -8404,7 +8404,7 @@
<translation id="971510864672937292"><ph name="SITE_NAME" />లో, అలాగే ఆ సైట్‌కు సంబంధించిన అన్ని సైట్‌లలో సైట్ డేటాను, ఇంకా అనుమతులను క్లియర్ చేయాలనుకుంటున్నారా?</translation>
<translation id="971774202801778802">బుక్‌మార్క్ URL</translation>
<translation id="972996901592717370">మీ వేలితో పవర్ బటన్‌ను తాకండి. మీ డేటా సురక్షితంగా స్టోర్ చేయబడుతుంది, ఎప్పటికీ మీ <ph name="DEVICE_TYPE" />లోనే ఉంటుంది.</translation>
-<translation id="973473557718930265">నిష్క్రమించు</translation>
+<translation id="973473557718930265">నిష్క్రమించండి</translation>
<translation id="975893173032473675">అనువదించాల్సిన భాష</translation>
<translation id="976499800099896273"><ph name="TYPED_WORD" />ను <ph name="CORRECTED_WORD" />కు మార్చేలా వచ్చిన ఆటోమేటిక్ కరెక్షన్‌ను రద్దు చేసే డైలాగ్ చూపబడుతోంది. యాక్సెస్ చేయడానికి పై వైపు బాణాన్ని, అలాగే విస్మరించడానికి ఎస్కేప్‌ను నొక్కండి.</translation>
<translation id="978146274692397928">ప్రారంభ విరామచిహ్న వెడల్పు నిండింది</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_th.xtb b/chromium/chrome/app/resources/generated_resources_th.xtb
index 5122e2a35fc..7116aef6cc8 100644
--- a/chromium/chrome/app/resources/generated_resources_th.xtb
+++ b/chromium/chrome/app/resources/generated_resources_th.xtb
@@ -3865,7 +3865,7 @@
<translation id="4742334355511750246">ไม่ได้รับอนุญาตให้แสดงรูปภาพ</translation>
<translation id="4742970037960872810">นำไฮไลต์ออก</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />ดูวิธีอัปเดตแอปพลิเคชัน<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{เลิกซ่อนเว็บไซต์}other{เลิกซ่อนเว็บไซต์}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{เปิดเสียงเว็บไซต์}other{เปิดเสียงเว็บไซต์}}</translation>
<translation id="474609389162964566">เข้าถึง Assistant โดยพูดว่า "Ok Google"</translation>
<translation id="4746351372139058112">ข้อความ</translation>
<translation id="4748783296226936791">โดยปกติแล้วเว็บไซต์จะเชื่อมต่อกับอุปกรณ์ HID เพื่อดำเนินการตามฟีเจอร์ที่ใช้แป้นพิมพ์ ตัวควบคุมเกม และอุปกรณ์อื่นๆ ที่ไม่ใช่แบบที่ใช้กันทั่วไป</translation>
@@ -4089,7 +4089,7 @@
<translation id="4972129977812092092">แก้ไขเครื่องพิมพ์</translation>
<translation id="4972164225939028131">รหัสผ่านไม่ถูกต้อง</translation>
<translation id="4972737347717125191">เว็บไซต์ขอใช้อุปกรณ์และข้อมูล Virtual Reality ได้</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{ซ่อนเว็บไซต์}other{ซ่อนเว็บไซต์}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{ปิดเสียงเว็บไซต์}other{ปิดเสียงเว็บไซต์}}</translation>
<translation id="497403230787583386">ตรวจสอบความปลอดภัยเสร็จแล้ว ระบบจะพิมพ์เอกสารของคุณ</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">ยืนยันการเข้าถึง</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_tr.xtb b/chromium/chrome/app/resources/generated_resources_tr.xtb
index f4a40dcab77..63d73404220 100644
--- a/chromium/chrome/app/resources/generated_resources_tr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_tr.xtb
@@ -3436,7 +3436,7 @@ Sunucunun mesajı: <ph name="SERVER_MSG" /></translation>
<translation id="431076611119798497">&amp;Ayrıntılar</translation>
<translation id="4312701113286993760">{COUNT,plural, =1{1 Google Hesabı}other{<ph name="EXTRA_ACCOUNTS" /> Google Hesabı}}</translation>
<translation id="4312866146174492540">Engelle (varsayılan)</translation>
-<translation id="4314497418046265427">Telefonunuzu <ph name="DEVICE_TYPE" /> cihazınıza bağladığınızda daha üretken olun</translation>
+<translation id="4314497418046265427">Telefonunuzu <ph name="DEVICE_TYPE" /> cihazınıza bağlayarak üretkenliğinizi artırın</translation>
<translation id="4314815835985389558">Senkronizasyonu yönetin</translation>
<translation id="4315933848520197627">Hesabın Bağlantısını Kaldırın</translation>
<translation id="4316850752623536204">Geliştirici Web Sitesi</translation>
@@ -5570,7 +5570,7 @@ Hassas bilgileri vermediğinizden emin olun.</translation>
<translation id="6466258437571594570">Sitelerin bildirim gönderme isteğinde bulunarak işinizi bölmesi engellenir</translation>
<translation id="6466988389784393586">Tüm Yer İşaretlerini &amp;Aç</translation>
<translation id="6467304607960172345">Tam ekran videoları optimize et</translation>
-<translation id="6467377768028664108">O zaman <ph name="DEVICE_TYPE" /> cihazınız:</translation>
+<translation id="6467377768028664108">Bağlantı kurduğunuzda <ph name="DEVICE_TYPE" /> cihazınızla şunları yapabilirsiniz:</translation>
<translation id="6468485451923838994">Yazı tipleri</translation>
<translation id="6468773105221177474"><ph name="FILE_COUNT" /> Dosya</translation>
<translation id="6469557521904094793">Hücresel ağı aç</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ur.xtb b/chromium/chrome/app/resources/generated_resources_ur.xtb
index 1a10baaec41..cce015ffa12 100644
--- a/chromium/chrome/app/resources/generated_resources_ur.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ur.xtb
@@ -3866,7 +3866,7 @@
<translation id="4742334355511750246">تصاویر دکھانے کی اجازت نہیں ہے</translation>
<translation id="4742970037960872810">ہائی لائٹ کو ہٹائیں</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />ایپلیکیشنز کو اپ ڈیٹ کرنے کا طریقہ جانیں<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{سائٹ کی آواز چالو کریں}other{سائٹس کی آواز چالو کریں}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{سائٹ کی آواز چلائیں}other{سائٹس کی آواز چلائیں}}</translation>
<translation id="474609389162964566">‏"Ok Google" کے ساتھ اپنی اسسٹنٹ تک رسائی حاصل کریں</translation>
<translation id="4746351372139058112">پیغامات</translation>
<translation id="4748783296226936791">‏سائٹس عام طور پر غیر معمول کی بورڈز، گیم کنٹرولرز اور دیگر آلات استعمال کرنے والی خصوصیات کے لئے HID آلات سے منسلک ہوتی ہیں</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_uz.xtb b/chromium/chrome/app/resources/generated_resources_uz.xtb
index dcc9def4b50..27018f85f3c 100644
--- a/chromium/chrome/app/resources/generated_resources_uz.xtb
+++ b/chromium/chrome/app/resources/generated_resources_uz.xtb
@@ -2106,7 +2106,7 @@ kichiklashtirish uchun Ctrl+Alt+Yorqinlikni pasaytirish tugmalarini bosing.</tra
<translation id="2966937470348689686">Android sozlamalarini boshqarish</translation>
<translation id="2967926928600500959">Bu qoidalarga mos keluvchi URL manzillar maxsus brauzerda majburan ochiladi.</translation>
<translation id="2972581237482394796">&amp;Qaytarish</translation>
-<translation id="2973324205039581528">Sayt ovozini o‘chirish</translation>
+<translation id="2973324205039581528">Saytni ovozsiz qilish</translation>
<translation id="2973537811036309675">Yon panel</translation>
<translation id="2976557544729462544">Ayrim qurilmalar xatosiz ishlashi uchun maʼlumotlarga kirishni cheklashni faolsizlantirish kerak</translation>
<translation id="2977480621796371840">Guruhdan chiqarish</translation>
@@ -3868,7 +3868,7 @@ kichiklashtirish uchun Ctrl+Alt+Yorqinlikni pasaytirish tugmalarini bosing.</tra
<translation id="4742334355511750246">Rasmlarni chiqarish taqiqlangan</translation>
<translation id="4742970037960872810">Belgilovni olib tashlash</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />Ilovalarni yangilash haqida axborot<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{Sayt ovozini yoqish}other{Saytlar ovozini yoqish}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{Sayt ovozini chiqarish}other{Saytlar ovozini chiqarish}}</translation>
<translation id="474609389162964566">Asistentdan “Ok Google” deb aytib foydalaning</translation>
<translation id="4746351372139058112">Xabarlar</translation>
<translation id="4748783296226936791">Saytlar odatda notanish klaviatura, oʻyin joystiklari va hokazo qurilmalardan foydalanish uchun HID qurilmalarga ulanadi</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_vi.xtb b/chromium/chrome/app/resources/generated_resources_vi.xtb
index 20f391850ad..427ec48c8fd 100644
--- a/chromium/chrome/app/resources/generated_resources_vi.xtb
+++ b/chromium/chrome/app/resources/generated_resources_vi.xtb
@@ -1663,7 +1663,7 @@ Bạn có thể quản lý các tùy chọn cài đặt của tài khoản này
<translation id="2530166226437958497">Khắc phục sự cố</translation>
<translation id="2531530485656743109"><ph name="BEGIN_PARAGRAPH1" />Đã xảy ra lỗi và không thể cài đặt <ph name="DEVICE_OS" />.<ph name="END_PARAGRAPH1" />
<ph name="BEGIN_PARAGRAPH2" />Để được trợ giúp thêm, hãy truy cập: g.co/flex/InstallErrors.<ph name="END_PARAGRAPH2" /></translation>
-<translation id="2532144599248877204">Kéo dài tuổi thọ pin nhờ duy trì mức sạc ở 80%. Pin sẽ sạc đầy trước thời điểm mà bạn thường rút thiết bị khỏi nguồn điện.</translation>
+<translation id="2532144599248877204">Kéo dài thời lượng pin nhờ duy trì mức sạc ở 80%. Pin sẽ sạc đầy trước thời điểm mà bạn thường rút thiết bị khỏi nguồn điện.</translation>
<translation id="2532198298278778531">Quản lý tính năng DNS bảo mật trong phần cài đặt ChromeOS Flex</translation>
<translation id="2532589005999780174">Chế độ tương phản cao</translation>
<translation id="2533649878691950253">Vì bạn thường không cho phép truy cập thông tin vị trí nên hệ thống đã chặn không cho trang web này biết vị trí chính xác của bạn</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_zh-CN.xtb b/chromium/chrome/app/resources/generated_resources_zh-CN.xtb
index 0cc9b784386..775a8f7fa7f 100644
--- a/chromium/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chromium/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -79,7 +79,7 @@
<ph name="BEGIN_PARAGRAPH4" />如果您已为孩子的 Google 帐号开启“网络与应用活动记录”设置,孩子的数据可能会被保存到其 Google 帐号中。访问 families.google.com 可详细了解这些设置以及如何进行调整。<ph name="END_PARAGRAPH4" />
<ph name="BEGIN_PARAGRAPH4" />如果设备所有者开启“发送使用情况数据和诊断数据”,系统还可能会将崩溃报告上传到 Google。<ph name="END_PARAGRAPH3" /></translation>
<translation id="1076176485976385390">使用文本光标浏览网页</translation>
-<translation id="1076382954055048850">显示其他投射会话</translation>
+<translation id="1076382954055048850">显示其他投放会话</translation>
<translation id="1076698951459398590">启用主题背景</translation>
<translation id="1076766328672150609">您的孩子可以使用 PIN 码解锁此设备。</translation>
<translation id="1076818208934827215">Microsoft Internet Explorer</translation>
@@ -790,7 +790,7 @@
<translation id="1757132445735080748">若要完成 Linux 安装,请更新 ChromeOS Flex 并重试。</translation>
<translation id="1757301747492736405">待卸载</translation>
<translation id="175772926354468439">启用主题背景</translation>
-<translation id="17584710573359123">在 Chrome 网上应用店中查看详情</translation>
+<translation id="17584710573359123">在 Chrome 应用商店中查看详情</translation>
<translation id="1761845175367251960"><ph name="NAME" />的帐号</translation>
<translation id="176193854664720708">指纹传感器位于电源按钮中。请用任一根手指轻轻触摸它。</translation>
<translation id="176272781006230109">购物建议</translation>
@@ -903,7 +903,7 @@
<translation id="1852322248807969514">系统会将密码保存到 <ph name="GOOGLE_PASSWORD_MANAGER" />中</translation>
<translation id="1852799913675865625">尝试读取文件时发生错误:<ph name="ERROR_TEXT" />。</translation>
<translation id="1854049213067042715">从先前中断之处继续操作。您可将应用设为始终在系统启动时恢复,也可在“设置”中关闭恢复功能。</translation>
-<translation id="1854180393107901205">停止投射</translation>
+<translation id="1854180393107901205">停止投放</translation>
<translation id="1855079636134697549">摄像头已开启</translation>
<translation id="1856715684130786728">添加位置…</translation>
<translation id="1858585891038687145">信任该证书,以便标识软件编写者的身份</translation>
@@ -1204,7 +1204,7 @@
<translation id="2147218225094845757">隐藏侧边栏</translation>
<translation id="2148219725039824548">装载共享资源时出错。在网络上找不到所指定的共享资源。</translation>
<translation id="2148756636027685713">格式化已完成</translation>
-<translation id="2148892889047469596">投射标签页</translation>
+<translation id="2148892889047469596">投放标签页</translation>
<translation id="2149973817440762519">修改书签</translation>
<translation id="2150139952286079145">搜索目标打印机</translation>
<translation id="2150661552845026580">要添加“<ph name="EXTENSION_NAME" />”吗?</translation>
@@ -1320,7 +1320,7 @@
<translation id="2262477216570151239">重复前的延迟时间</translation>
<translation id="2263189956353037928">退出并重新登录</translation>
<translation id="2263371730707937087">屏幕刷新频率</translation>
-<translation id="2263679799334060788">非常感谢您的反馈!这对我们改进 Google Cast 很有帮助。如需获取与排查投射问题有关的帮助,请参阅<ph name="BEGIN_LINK" />帮助中心<ph name="END_LINK" />。</translation>
+<translation id="2263679799334060788">非常感谢您的反馈!这对我们改进 Google Cast 很有帮助。如需获取与排查投放问题有关的帮助,请参阅<ph name="BEGIN_LINK" />帮助中心<ph name="END_LINK" />。</translation>
<translation id="22665427234727190">在网站想访问蓝牙设备时询问您(推荐)</translation>
<translation id="2266957463645820432">USB 型 IPP (IPPUSB)</translation>
<translation id="2268130516524549846">蓝牙已停用</translation>
@@ -1653,7 +1653,7 @@
<translation id="2538361623464451692">同步功能已停用</translation>
<translation id="2540449034743108469">请按“开始”以监听扩展程序活动</translation>
<translation id="2540651571961486573">出了点问题。错误代码:<ph name="ERROR_CODE" />。</translation>
-<translation id="2541002089857695151">优化全屏投射?</translation>
+<translation id="2541002089857695151">优化全屏投放?</translation>
<translation id="2541423446708352368">显示所有下载内容</translation>
<translation id="2541706104884128042">已设定新的就寝时间</translation>
<translation id="2542050502251273923">使用 ff_debug 设定网络连接管理器和其他服务的调试级别。</translation>
@@ -1761,7 +1761,7 @@
<translation id="266079277508604648">无法连接到打印机。请确保该打印机已开机且已通过 Wi-Fi 或 USB 连接到您的 Chromebook。</translation>
<translation id="2661315027005813059">往返缓存版页面:<ph name="BACK_FORWARD_CACHE_PAGE_URL" /></translation>
<translation id="2661714428027871023">在精简模式下,网页加载速度会更快且消耗的流量会更少。点击即可了解详情。</translation>
-<translation id="2662876636500006917">Chrome 网上应用店</translation>
+<translation id="2662876636500006917">Chrome 应用商店</translation>
<translation id="2663302507110284145">语言</translation>
<translation id="2665394472441560184">添加新字词</translation>
<translation id="2665647207431876759">已过期</translation>
@@ -2095,7 +2095,7 @@
<translation id="2966937470348689686">管理 Android 偏好设置</translation>
<translation id="2967926928600500959">与这些规则匹配的网址将被强制在一款特定浏览器中打开。</translation>
<translation id="2972581237482394796">重做(&amp;R)</translation>
-<translation id="2973324205039581528">将单个网站静音</translation>
+<translation id="2973324205039581528">将网站静音</translation>
<translation id="2973537811036309675">侧边栏</translation>
<translation id="2976557544729462544">某些设备需要停用数据访问保护设置才能正常运行或马力全开。</translation>
<translation id="2977480621796371840">从组中移除</translation>
@@ -2175,7 +2175,7 @@
<translation id="3046910703532196514">网页,全部</translation>
<translation id="304747341537320566">语音引擎</translation>
<translation id="3048336643003835855">来自供应商 <ph name="VENDOR_ID" /> 的 HID 设备</translation>
-<translation id="3048917188684939573">投射和设备日志</translation>
+<translation id="3048917188684939573">投放和设备日志</translation>
<translation id="3051250416341590778">显示屏上的内容大小</translation>
<translation id="3053013834507634016">证书密钥用法</translation>
<translation id="3053273573829329829">启用用户 PIN 码</translation>
@@ -2238,7 +2238,7 @@
<translation id="3117791853215125017">{COUNT,plural, =1{未能将 <ph name="ATTACHMENTS" />发送到“<ph name="DEVICE_NAME" />”}other{未能将 <ph name="ATTACHMENTS" />发送到“<ph name="DEVICE_NAME" />”}}</translation>
<translation id="3118319026408854581"><ph name="PRODUCT_NAME" />帮助</translation>
<translation id="3118654181216384296">请稍等片刻,然后再次尝试启动 Linux。</translation>
-<translation id="3119948370277171654">您当时投射的是什么内容/网址?</translation>
+<translation id="3119948370277171654">您当时投放的是什么内容/网址?</translation>
<translation id="3120430004221004537">“<ph name="DEVICE_NAME" />”上某项指定操作的加密强度不足。</translation>
<translation id="3122464029669770682">CPU</translation>
<translation id="3122496702278727796">无法创建数据目录</translation>
@@ -2479,7 +2479,7 @@
<translation id="3390013585654699824">应用详细信息</translation>
<translation id="3391512812407811893">试用隐私沙盒</translation>
<translation id="3393554941209044235">Chrome 文档分析</translation>
-<translation id="3393582007140394275">无法投射屏幕。</translation>
+<translation id="3393582007140394275">无法投放屏幕。</translation>
<translation id="3394850431319394743">可以使用标识符来播放受保护内容</translation>
<translation id="3396744558790608201">在网络上浏览和购物时,如果您想详细了解所看到的视觉内容,只需右键点击相应内容并选择“使用 Google 智能镜头搜索图片”,即可搜索网站的任何区域。</translation>
<translation id="3396800784455899911">点击“接受并继续”按钮,即表示您同意上述针对这些 Google 服务的处理方式。</translation>
@@ -2770,7 +2770,7 @@
<translation id="3670229581627177274">开启蓝牙</translation>
<translation id="3672681487849735243">检测到出厂错误</translation>
<translation id="3673097791729989571">由 <ph name="SAML_DOMAIN" /> 托管的登录服务</translation>
-<translation id="3673622964532248901">您不得投射到此设备。</translation>
+<translation id="3673622964532248901">您不得投放到此设备。</translation>
<translation id="367645871420407123">如果您要将根密码设为默认的测试图片值,则将此字段留空</translation>
<translation id="3677106374019847299">请输入自定义提供商</translation>
<translation id="3677911431265050325">请求切换到移动版网站</translation>
@@ -2853,7 +2853,7 @@
<translation id="3753033997400164841">一次储存,随时随地使用</translation>
<translation id="3755411799582650620">您的“<ph name="PHONE_NAME" />”现在也可用来为此 <ph name="DEVICE_TYPE" /> 解锁。</translation>
<translation id="375636864092143889">该网站正在使用您的麦克风</translation>
-<translation id="3756485814916578707">正在投射屏幕</translation>
+<translation id="3756485814916578707">正在投放屏幕</translation>
<translation id="3756578970075173856">设置 PIN 码</translation>
<translation id="3756795331760037744">允许 Google 助理使用<ph name="SUPERVISED_USER_NAME" />的屏幕上的信息提供帮助</translation>
<translation id="3757733214359997190">未找到任何网站</translation>
@@ -2879,7 +2879,7 @@
<translation id="3775432569830822555">SSL 服务器证书</translation>
<translation id="3775705724665058594">发送到您的设备</translation>
<translation id="3776508619697147021">网站可以请求自动下载多个文件</translation>
-<translation id="3776796446459804932">此扩展程序违反了 Chrome 网上应用店政策。</translation>
+<translation id="3776796446459804932">此扩展程序违反了 Chrome 应用商店政策。</translation>
<translation id="3777483481409781352">无法激活移动网络设备</translation>
<translation id="3777806571986431400">扩展程序已启用</translation>
<translation id="3778152852029592020">已取消下载。</translation>
@@ -3200,12 +3200,12 @@
<translation id="4072701974556190758">系统会将该密码保存在您的 Google 帐号 (<ph name="ACCOUNT" />) 中。您无需记住该密码。</translation>
<translation id="407520071244661467">缩放</translation>
<translation id="407543464472585404"><ph name="NAME" />的个人资料已关联到 <ph name="EMAIL" /></translation>
-<translation id="4075639477629295004">无法投射“<ph name="FILE_NAME" />”。</translation>
+<translation id="4075639477629295004">无法投放“<ph name="FILE_NAME" />”。</translation>
<translation id="4077917118009885966">已拦截此网站上的广告</translation>
<translation id="4077919383365622693"><ph name="SITE" /> 存储的所有数据和 Cookie 都会被清除。</translation>
<translation id="4078738236287221428">首次加载时强制缓存</translation>
<translation id="4079140982534148664">使用增强的“拼写检查”功能</translation>
-<translation id="4081242589061676262">无法投射文件。</translation>
+<translation id="4081242589061676262">无法投放文件。</translation>
<translation id="408223403876103285"><ph name="WEBSITE" /> 向您的手机发送了一条通知。请按其中的步骤操作以证实您的身份。</translation>
<translation id="4084682180776658562">添加书签</translation>
<translation id="4084835346725913160">关闭 <ph name="TAB_NAME" /></translation>
@@ -3253,7 +3253,7 @@
<translation id="4117637339509843559">深色模式</translation>
<translation id="4117714603282104018">触控板触感反馈</translation>
<translation id="4118579674665737931">请重新启动此设备,然后重试。</translation>
-<translation id="412022815379960229">登录后即可开始浏览您在 Google 相册中的“回忆”集锦。</translation>
+<translation id="412022815379960229">登录后即可开始浏览您在 Google 相册中的回忆集锦。</translation>
<translation id="4120388883569225797">无法重置此安全密钥</translation>
<translation id="4120817667028078560">路径过长</translation>
<translation id="4124823734405044952">您的安全密钥已重置完毕</translation>
@@ -3429,7 +3429,7 @@
<translation id="431076611119798497">详细信息(&amp;D)</translation>
<translation id="4312701113286993760">{COUNT,plural, =1{1 个 Google 帐号}other{<ph name="EXTRA_ACCOUNTS" /> 个 Google 帐号}}</translation>
<translation id="4312866146174492540">屏蔽(默认)</translation>
-<translation id="4314497418046265427">通过将手机连接到 <ph name="DEVICE_TYPE" /> 提高工作效率</translation>
+<translation id="4314497418046265427">将手机连接到 <ph name="DEVICE_TYPE" />,可提高工作效率</translation>
<translation id="4314815835985389558">管理同步数据</translation>
<translation id="4315933848520197627">解除帐号关联</translation>
<translation id="4316850752623536204">开发者网站</translation>
@@ -3470,7 +3470,7 @@
<translation id="4361142739114356624">缺少此客户端证书的私钥,或私钥无效</translation>
<translation id="4361745360460842907">作为标签页打开</translation>
<translation id="4362675504017386626"><ph name="ACCOUNT_EMAIL" /> 是您 <ph name="DEVICE_TYPE" /> 上的默认帐号</translation>
-<translation id="4363771538994847871">找不到投射目标。需要帮助吗?</translation>
+<translation id="4363771538994847871">找不到投放目标。需要帮助吗?</translation>
<translation id="4364327530094270451">甜瓜</translation>
<translation id="4364567974334641491"><ph name="APP_NAME" /> 正在共享窗口。</translation>
<translation id="4364830672918311045">显示通知</translation>
@@ -3505,7 +3505,7 @@
<translation id="4400367121200150367">一律不保存密码的网站将显示在这里</translation>
<translation id="4400632832271803360">按住启动器键可切换顶行键的行为</translation>
<translation id="4400963414856942668">点击星形图标即可为标签页添加书签</translation>
-<translation id="4401912261345737180">使用代码连接后即可投射</translation>
+<translation id="4401912261345737180">使用代码连接后即可投放</translation>
<translation id="4402755511846832236">禁止网站了解您何时在主动使用此设备</translation>
<translation id="4403266582403435904">随时轻松恢复数据或更换设备。备份内容将上传到 Google 并使用您孩子的 Google 帐号密码进行加密。</translation>
<translation id="4403775189117163360">另选一个文件夹</translation>
@@ -3694,7 +3694,7 @@
<translation id="4576541033847873020">配对蓝牙设备</translation>
<translation id="4576763597586015380">若要继续将密码保存在您的 Google 帐号中,请验证您的身份</translation>
<translation id="4579453506923101210">移除已连接的手机</translation>
-<translation id="4579581181964204535">无法投射 <ph name="HOST_NAME" />。</translation>
+<translation id="4579581181964204535">无法投放 <ph name="HOST_NAME" />。</translation>
<translation id="4579876313423027742">若要设置浏览器通知,请转到 <ph name="LINK_BEGIN" />Chrome 浏览器设置<ph name="LINK_END" /></translation>
<translation id="4581774856936278355">恢复 Linux 容器时出错</translation>
<translation id="4582297591746054421">网站通常会读取您的剪贴板内容以实现某些功能(例如保留您所复制文字的格式)</translation>
@@ -3968,7 +3968,7 @@
<translation id="4870758487381879312">请输入管理员提供的密码以获取配置信息</translation>
<translation id="4870903493621965035">没有已配对的设备</translation>
<translation id="4870995365819149457">部分受支持的链接仍会在“<ph name="APP_NAME" />”、“<ph name="APP_NAME_2" />”、“<ph name="APP_NAME_3" />”和另外 1 款应用中打开。</translation>
-<translation id="4871308555310586478">并非来自 Chrome 网上应用店。</translation>
+<translation id="4871308555310586478">并非来自 Chrome 应用商店。</translation>
<translation id="4871322859485617074">PIN 码包含无效字符</translation>
<translation id="4871370605780490696">添加书签</translation>
<translation id="4871568871368204250">关闭同步功能</translation>
@@ -4032,7 +4032,7 @@
<translation id="4924002401726507608">提交反馈</translation>
<translation id="4924352752174756392">12 倍</translation>
<translation id="4925320384394644410">您的端口将会显示在此处</translation>
-<translation id="49265687513387605">无法投射屏幕,请查看您是否已确认开始共享屏幕的提示。</translation>
+<translation id="49265687513387605">无法投放屏幕,请查看您是否已确认开始共享屏幕的提示。</translation>
<translation id="4927753642311223124">这里没有任何通知,往前走吧。</translation>
<translation id="4929386379796360314">打印目的地</translation>
<translation id="4930447554870711875">开发者</translation>
@@ -4063,7 +4063,7 @@
<translation id="4959262764292427323">系统会将密码保存在您的 Google 帐号中,以便您在任意设备上使用密码</translation>
<translation id="496027654926814138">攻击者可能会利用 <ph name="FILE_NAME" /> 窃取您的个人信息。</translation>
<translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
-<translation id="4961318399572185831">投射屏幕</translation>
+<translation id="4961318399572185831">投放屏幕</translation>
<translation id="4961361269522589229">食谱建议</translation>
<translation id="496185450405387901">您的管理员已安装此应用。</translation>
<translation id="4963789650715167449">移除当前标签页</translation>
@@ -4347,7 +4347,7 @@
<translation id="5258992782919386492">在此设备上安装</translation>
<translation id="5260334392110301220">智能引号</translation>
<translation id="5260508466980570042">抱歉,您的电子邮件地址或密码无法进行验证,请重试。</translation>
-<translation id="5261683757250193089">在 Chrome 网上应用店中打开</translation>
+<translation id="5261683757250193089">在 Chrome 应用商店中打开</translation>
<translation id="5262178194499261222">移除密码</translation>
<translation id="526260164969390554">按 Ctrl+<ph name="SEARCH_KEY_NAME" />+M 可开启或关闭全屏放大镜。按 Ctrl+Alt+箭头键可在放大后的屏幕上四处移动。</translation>
<translation id="5262784498883614021">自动连接到网络</translation>
@@ -4518,7 +4518,7 @@
<translation id="5435779377906857208">始终允许 <ph name="HOST" /> 使用您的位置信息</translation>
<translation id="5436492226391861498">正在等待代理隧道的响应...</translation>
<translation id="5436510242972373446">用 <ph name="SITE_NAME" /> 搜索:</translation>
-<translation id="5436575196282187764">Google 相册中的“回忆”集锦</translation>
+<translation id="5436575196282187764">Google 相册中的回忆集锦</translation>
<translation id="5439680044267106777">跳过此步骤并设置新的个人资料</translation>
<translation id="544083962418256601">创建快捷方式...</translation>
<translation id="5442228125690314719">创建磁盘映像时出错。请重试。</translation>
@@ -4625,7 +4625,7 @@
<translation id="5533001281916885985"><ph name="SITE_NAME" />想要</translation>
<translation id="5534304873398226603">舍弃照片或视频</translation>
<translation id="5535941515421698170">一并从这台设备中移除您的现有数据</translation>
-<translation id="5537725057119320332">投射</translation>
+<translation id="5537725057119320332">投放</translation>
<translation id="5539221284352502426">您输入的密码被服务器拒绝了。可能的原因包括:此密码太短。此密码必须包含数字或符号,且必须不同于旧密码。</translation>
<translation id="5541694225089836610">操作已被您的管理员禁止执行</translation>
<translation id="5542132724887566711">个人资料</translation>
@@ -4735,7 +4735,7 @@
<translation id="563535393368633106">使用前先询问(推荐)</translation>
<translation id="5636996382092289526">要使用“<ph name="NETWORK_ID" />”,您可能需要先<ph name="LINK_START" />访问该网络的登录页面<ph name="LINK_END" />,该页面会在几秒钟后自动打开。如果未打开,就表示该网络无法使用。</translation>
<translation id="5637476008227280525">移动数据开关</translation>
-<translation id="5638309510554459422">在 <ph name="BEGIN_LINK" />Chrome 网上应用店<ph name="END_LINK" />中查找扩展程序和主题背景</translation>
+<translation id="5638309510554459422">在 <ph name="BEGIN_LINK" />Chrome 应用商店<ph name="END_LINK" />中查找扩展程序和主题背景</translation>
<translation id="5639549361331209298">重新加载此网页,按下可查看更多选项</translation>
<translation id="5640133431808313291">管理安全密钥</translation>
<translation id="5641608986289282154">开始使用 <ph name="DEVICE_OS" /></translation>
@@ -4831,7 +4831,7 @@
<translation id="5747552184818312860">到期时间</translation>
<translation id="5747785204778348146">开发者版本 - 不稳定</translation>
<translation id="5747809636523347288">粘贴并转到 <ph name="URL" /></translation>
-<translation id="5755022574660047665">Google 相册中的“回忆”集锦</translation>
+<translation id="5755022574660047665">Google 相册中的回忆集锦</translation>
<translation id="5756163054456765343">帮助中心(&amp;E)</translation>
<translation id="5757375109985023827">选择一个标签页即可预览</translation>
<translation id="5758631781033351321">您的阅读清单会显示在此处</translation>
@@ -5127,7 +5127,7 @@
<ph name="BEGIN_PARAGRAPH4" />如果您已为孩子的 Google 帐号开启“网络与应用活动记录”设置,孩子的数据可能会被保存到其 Google 帐号中。访问 families.google.com 可详细了解这些设置以及如何调整它们。<ph name="END_PARAGRAPH4" /></translation>
<translation id="6051811090255711417">贵组织屏蔽了此文件,因为它不符合安全政策</translation>
<translation id="6052284303005792909">•</translation>
-<translation id="6052488962264772833">输入访问代码即可开始投射</translation>
+<translation id="6052488962264772833">输入访问代码即可开始投放</translation>
<translation id="6052976518993719690">SSL 证书授权中心</translation>
<translation id="6053401458108962351">清除浏览数据(&amp;C)...</translation>
<translation id="6054284857788651331">最近关闭的标签页组</translation>
@@ -5393,7 +5393,7 @@
<translation id="6308493641021088955">登录服务提供方:<ph name="EXTENSION_NAME" /></translation>
<translation id="6308937455967653460">链接另存为(&amp;K)...</translation>
<translation id="6309443618838462258">您的管理员不允许使用此输入法</translation>
-<translation id="630948338437014525">“回忆”集锦</translation>
+<translation id="630948338437014525">回忆集锦</translation>
<translation id="6309510305002439352">麦克风已关闭</translation>
<translation id="6310141306111263820">无法安装 eSIM 卡配置文件。如需帮助,请与您的运营商联系。</translation>
<translation id="6311220991371174222">打开您的个人资料时出了点问题,无法启动 Chrome。请尝试重新启动 Chrome。</translation>
@@ -5518,7 +5518,7 @@
<translation id="6434104957329207050">点扫描速度</translation>
<translation id="6434309073475700221">舍弃</translation>
<translation id="6434325376267409267">您需要更新设备,才能使用 <ph name="APP_NAME" />。</translation>
-<translation id="6436164536244065364">在 Chrome 网上应用店中查看</translation>
+<translation id="6436164536244065364">在 Chrome 应用商店中查看</translation>
<translation id="6436610005579237680">如果想获得为您量身定制的回复,您不妨允许 Google 助理在您提问后使用您的屏幕上内容的屏幕截图。Google 助理可能还会使用正在播放的歌曲或视频的相关信息。</translation>
<translation id="6436778875248895551">您的管理员已屏蔽扩展程序“<ph name="EXTENSION_NAME" />”</translation>
<translation id="6438234780621650381">重置设置</translation>
@@ -5788,7 +5788,7 @@
<translation id="6698810901424468597">读取和更改您在<ph name="WEBSITE_1" />和<ph name="WEBSITE_2" />上的数据</translation>
<translation id="6699883973579689168">您现在可以在一个位置集中管理您的所有 Google 帐号。现在,如果您已向 Chrome 和 Google Play 中的网站、应用和扩展程序授予了访问权限和其他权限,这些权限可以应用于您的所有已登录的帐号。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
<translation id="6700093763382332031">移动网络 SIM 卡锁定</translation>
-<translation id="6700480081846086223">投射 <ph name="HOST_NAME" /></translation>
+<translation id="6700480081846086223">投放 <ph name="HOST_NAME" /></translation>
<translation id="6701535245008341853">无法获取个人资料。</translation>
<translation id="6702639462873609204">修改(&amp;E)...</translation>
<translation id="6703212423117969852">您可以稍后在 Chrome 中重试。</translation>
@@ -5810,7 +5810,7 @@
<translation id="6721972322305477112">文件(&amp;F)</translation>
<translation id="672208878794563299">此网站下次仍会请求您授权。</translation>
<translation id="6723661294526996303">导入书签和设置...</translation>
-<translation id="6723839827191551955">控制您正在投射的媒体</translation>
+<translation id="6723839827191551955">控制您正在投放的媒体</translation>
<translation id="6723839937902243910">电源</translation>
<translation id="6725073593266469338">界面服务</translation>
<translation id="6725206449694821596">互联网打印协议 (IPP)</translation>
@@ -6431,7 +6431,7 @@
<translation id="7362387053578559123">网站可以请求连接到蓝牙设备</translation>
<translation id="7363349185727752629">隐私控制选项指南</translation>
<translation id="7364591875953874521">已请求访问权限</translation>
-<translation id="7364745943115323529">投射…</translation>
+<translation id="7364745943115323529">投放…</translation>
<translation id="7364796246159120393">选择文件</translation>
<translation id="7365076891350562061">显示器上的内容大小</translation>
<translation id="7366316827772164604">正在搜寻附近的设备…</translation>
@@ -6448,7 +6448,7 @@
<translation id="7377451353532943397">继续禁止使用传感器</translation>
<translation id="7377481913241237033">利用代码连接</translation>
<translation id="7378611153938412599">安全系数低的密码容易被人猜到。请务必设置安全系数高的密码。<ph name="BEGIN_LINK" />查看更多安全提示<ph name="END_LINK" />。</translation>
-<translation id="73786666777299047">打开 Chrome 网上应用店</translation>
+<translation id="73786666777299047">打开 Chrome 应用商店</translation>
<translation id="7380459290951585794">请确保您的手机就在附近、处于解锁状态,且已开启蓝牙和 Wi-Fi</translation>
<translation id="7380622428988553498">设备名称包含无效字符</translation>
<translation id="7380768571499464492">已更新<ph name="PRINTER_NAME" /></translation>
@@ -6484,7 +6484,7 @@
<translation id="7409735910987429903">网站可能会发送弹出式窗口以展示广告,或者使用重定向将您引导至您可能不想访问的网站</translation>
<translation id="7409854300652085600">书签已导入完毕。</translation>
<translation id="7410344089573941623"><ph name="HOST" /> 想要使用摄像头和麦克风时询问我是否同意</translation>
-<translation id="7410852728357935715">投射到设备</translation>
+<translation id="7410852728357935715">投放到设备</translation>
<translation id="741204030948306876">立即开启</translation>
<translation id="7412226954991670867">GPU 内存</translation>
<translation id="7414464185801331860">18 倍</translation>
@@ -6501,7 +6501,7 @@
<translation id="7423513079490750513">移除<ph name="INPUT_METHOD_NAME" /></translation>
<translation id="7423807071740419372"><ph name="APP_NAME" /> 需要获得相应权限才能运行</translation>
<translation id="7424818322350938336">已添加网络</translation>
-<translation id="7427315069950454694">您今天的“回忆”集锦</translation>
+<translation id="7427315069950454694">今天的回忆集锦</translation>
<translation id="7427348830195639090">后台网页:<ph name="BACKGROUND_PAGE_URL" /></translation>
<translation id="7427798576651127129">通过<ph name="DEVICE_NAME" />拨打电话</translation>
<translation id="7431719494109538750">找不到任何 HID 设备</translation>
@@ -6520,7 +6520,7 @@
<translation id="744341768939279100">创建新的个人资料</translation>
<translation id="744366959743242014">正在加载数据,这最多可能需要几秒钟的时间。</translation>
<translation id="7443806024147773267">只要您登录自己的 Google 帐号,即可获取您的密码</translation>
-<translation id="7444970023873202833">在 Google 相册中发掘您的更多美好回忆</translation>
+<translation id="7444970023873202833">在 Google 相册中找寻更多美好回忆</translation>
<translation id="7444983668544353857">停用<ph name="NETWORKDEVICE" /></translation>
<translation id="7448430327655618736">自动安装应用</translation>
<translation id="7449752890690775568">移除此密码?</translation>
@@ -6800,7 +6800,7 @@
<translation id="7707108266051544351">此网站已被禁止使用移动传感器。</translation>
<translation id="7707922173985738739">使用移动数据</translation>
<translation id="7709152031285164251">失败 - <ph name="INTERRUPT_REASON" /></translation>
-<translation id="7710568461918838723">投射(&amp;C)…</translation>
+<translation id="7710568461918838723">投放(&amp;C)…</translation>
<translation id="7711900714716399411">请使用一根 USB 线将手机连接到计算机。如果您的手机已连接到计算机,请拔下 USB 线,然后再重新插上。</translation>
<translation id="7712739869553853093">“打印预览”对话框</translation>
<translation id="7714307061282548371">已允许来自 <ph name="DOMAIN" /> 的 Cookie</translation>
@@ -6915,7 +6915,7 @@
<translation id="7807117920154132308"><ph name="SUPERVISED_USER_NAME" />似乎已在另一部设备上设置了 Google 助理。<ph name="SUPERVISED_USER_NAME" />只需在此设备上开启屏幕上下文功能,即可更充分地利用 Google 助理。</translation>
<translation id="7807711621188256451">始终允许 <ph name="HOST" /> 使用您的摄像头</translation>
<translation id="7810202088502699111">已拦截此网页上的弹出式窗口。</translation>
-<translation id="781167124805380294">投射“<ph name="FILE_NAME" />”</translation>
+<translation id="781167124805380294">投放“<ph name="FILE_NAME" />”</translation>
<translation id="7811886112806886172">自动向 Google 发送诊断数据和使用情况数据,协助改进 Chrome 和 Chrome 操作系统的功能和性能。部分汇总数据还会对 Android 应用和 Google 合作伙伴有所帮助。如果您已为自己的 Google 帐号开启“网络与应用活动记录”设置,您的 Android 数据可能会被保存到您的 Google 帐号中。</translation>
<translation id="7814458197256864873">复制(&amp;C)</translation>
<translation id="7815680994978050279">已屏蔽危险的下载内容</translation>
@@ -7139,7 +7139,7 @@
<translation id="8029539783236818164">可以使用您的屏幕的相关信息打开并放置窗口</translation>
<translation id="8030169304546394654">连接已断开</translation>
<translation id="8030852056903932865">批准</translation>
-<translation id="8032244173881942855">无法投射标签页。</translation>
+<translation id="8032244173881942855">无法投放标签页。</translation>
<translation id="8032569120109842252">已关注</translation>
<translation id="8033827949643255796">已选中</translation>
<translation id="8033958968890501070">已超时</translation>
@@ -7313,7 +7313,7 @@
<translation id="8186609076106987817">服务器找不到该文件。</translation>
<translation id="8186704951085064172">使用 <ph name="VISUAL_SEARCH_PROVIDER" />搜索网页的某个部分</translation>
<translation id="8188389033983459049">请检查您的设备设置,并开启蓝牙以继续</translation>
-<translation id="8188742492803591566">只需输入 Chromecast 或电视上显示的访问代码,即可开始投射您的屏幕。</translation>
+<translation id="8188742492803591566">只需输入 Chromecast 或电视上显示的访问代码,即可开始投放您的屏幕。</translation>
<translation id="8189306097519446565">学校帐号</translation>
<translation id="8189750580333936930">隐私沙盒</translation>
<translation id="8191230140820435481">管理您的应用、扩展程序和主题背景</translation>
@@ -7321,7 +7321,7 @@
<translation id="8193953846147532858"><ph name="BEGIN_LINK" />您的设备<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
<translation id="8195027750202970175">占用的存储空间</translation>
<translation id="8195191503358432289">添加密码</translation>
-<translation id="8198456017687137612">正在投射标签页</translation>
+<translation id="8198456017687137612">正在投放标签页</translation>
<translation id="8199300056570174101">网络(服务)和设备属性</translation>
<translation id="8200772114523450471">继续</translation>
<translation id="8201717382574620700">选择 <ph name="TOPIC_SOURCE" />影集</translation>
@@ -7402,7 +7402,7 @@
<translation id="8272194309885535896">下载图片</translation>
<translation id="8272443605911821513">点击“更多工具”菜单中的“扩展程序”,可以管理您的扩展程序。</translation>
<translation id="8273905181216423293">立即下载</translation>
-<translation id="8274332263553132018">投射文件</translation>
+<translation id="8274332263553132018">投放文件</translation>
<translation id="8274921654076766238">放大镜跟随键盘焦点</translation>
<translation id="8274924778568117936">在完成更新之前,请勿关闭您的 <ph name="DEVICE_TYPE" />。您的 <ph name="DEVICE_TYPE" /> 将会于安装完毕后重启。</translation>
<translation id="8275038454117074363">导入</translation>
@@ -7473,7 +7473,7 @@
<translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /> 项</translation>
<translation id="8357388086258943206">安装 Linux 时出错</translation>
<translation id="8358685469073206162">要恢复页面吗?</translation>
-<translation id="8358912028636606457">此设备不支持投射标签页中的音频。</translation>
+<translation id="8358912028636606457">此设备不支持投放标签页中的音频。</translation>
<translation id="835951711479681002">保存到您的 Google 帐号中</translation>
<translation id="8363095875018065315">稳定</translation>
<translation id="8363142353806532503">已禁止使用麦克风</translation>
@@ -7487,7 +7487,7 @@
<translation id="8376137163494131156">请将 Google Cast 发生的情况告诉我们。</translation>
<translation id="8376384591331888629">包括此网站上的第三方 Cookie</translation>
<translation id="8376451933628734023">如果此 Web 应用试图诱骗您认为它是另一款应用,请卸载它。</translation>
-<translation id="8378714024927312812">由贵单位管理</translation>
+<translation id="8378714024927312812">由贵组织管理</translation>
<translation id="8379156816349755485">一旦您登录,系统便会存储一个独一无二的身份验证令牌,并会使用它保存今后所有符合条件的下载内容。</translation>
<translation id="8379878387931047019">此设备不支持该网站要求使用的安全密钥的类型</translation>
<translation id="8379991678458444070">只需为此标签页添加书签,便可在需要时快速返回到此处</translation>
@@ -7846,7 +7846,7 @@
<translation id="8742998548129056176">这是关于您的设备及其使用情况(例如电池电量、系统与应用活动以及错误)的一般信息。我们会使用这些数据来改善 Android,部分汇总信息还会有助于改善 Google 应用,并会协助我们的合作伙伴(例如 Android 开发者)改善其应用和产品。</translation>
<translation id="8746654918629346731">您已请求安装“<ph name="EXTENSION_NAME" />”</translation>
<translation id="874689135111202667">{0,plural, =1{将 1 个文件上传到此网站?}other{将 # 个文件上传到此网站?}}</translation>
-<translation id="8749805710397399240">无法投射您的屏幕。请在“系统偏好设置”中启用“屏幕录制”权限。</translation>
+<translation id="8749805710397399240">无法投放您的屏幕。请在“系统偏好设置”中启用“屏幕录制”权限。</translation>
<translation id="8749826920799243530">此设备尚未注册</translation>
<translation id="8749863574775030885">访问来自未知供应商的 USB 设备</translation>
<translation id="8750155211039279868"><ph name="ORIGIN" /> 想连接到串行端口</translation>
@@ -7907,7 +7907,7 @@
<translation id="8805140816472474147">请确认同步设置以开始同步。</translation>
<translation id="8806680466228877631"><ph name="SHORTCUT" /> 可以重新打开意外关闭的标签页</translation>
<translation id="8807632654848257479">稳定</translation>
-<translation id="8808478386290700967">Chrome 网上应用店</translation>
+<translation id="8808478386290700967">Chrome 应用商店</translation>
<translation id="8808686172382650546">猫</translation>
<translation id="8809147117840417135">浅蓝绿色</translation>
<translation id="8811862054141704416">Crostini 麦克风使用权限</translation>
@@ -7986,7 +7986,7 @@
<translation id="8872506776304248286">在应用中打开</translation>
<translation id="8872777911145321141">在网站想使用您的虚拟实境设备和数据时询问您(推荐)</translation>
<translation id="8874184842967597500">未连接</translation>
-<translation id="8874341931345877644">投射到设备:</translation>
+<translation id="8874341931345877644">投放到设备:</translation>
<translation id="8875520811099717934">Linux 升级</translation>
<translation id="8875736897340638404">选择您的公开范围</translation>
<translation id="8876307312329369159">在演示会话中,此设置无法更改。</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_zh-TW.xtb b/chromium/chrome/app/resources/generated_resources_zh-TW.xtb
index f1450db3817..878f00b77fd 100644
--- a/chromium/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chromium/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1814,7 +1814,7 @@
<translation id="270921614578699633">平均取樣數:</translation>
<translation id="2709516037105925701">自動填入</translation>
<translation id="2710101514844343743">使用狀況與診斷資料</translation>
-<translation id="271033894570825754">新</translation>
+<translation id="271033894570825754">全新</translation>
<translation id="2711073837061989559">試用</translation>
<translation id="2712173769900027643">要求權限</translation>
<translation id="2713106313042589954">關閉攝影機</translation>
@@ -3162,7 +3162,7 @@
<translation id="4021941025609472374">關閉左側的分頁</translation>
<translation id="4022426551683927403">新增到字典(&amp;A)</translation>
<translation id="4023146161712577481">正在確定裝置設定。</translation>
-<translation id="4025039777635956441">將所選網站設為靜音</translation>
+<translation id="4025039777635956441">關閉所選網站的音訊</translation>
<translation id="4028467762035011525">新增輸入法</translation>
<translation id="4029556917477724407">從「<ph name="PAGE_TITLE" />」頁面返回</translation>
<translation id="4031179711345676612">可使用麥克風</translation>
@@ -3437,7 +3437,7 @@
<translation id="4312701113286993760">{COUNT,plural, =1{1 個 Google 帳戶}other{<ph name="EXTRA_ACCOUNTS" /> 個 Google 帳戶}}</translation>
<translation id="4312866146174492540">封鎖 (預設)</translation>
<translation id="4314497418046265427">將手機連接 <ph name="DEVICE_TYPE" /> 以提升工作效率</translation>
-<translation id="4314815835985389558">管理同步功能資料</translation>
+<translation id="4314815835985389558">管理同步資料</translation>
<translation id="4315933848520197627">取消連結帳戶</translation>
<translation id="4316850752623536204">開發人員網站</translation>
<translation id="4317820549299924617">驗證失敗</translation>
@@ -3862,7 +3862,7 @@
<translation id="4742334355511750246">不得顯示圖片</translation>
<translation id="4742970037960872810">移除醒目顯示</translation>
<translation id="4743260470722568160"><ph name="BEGIN_LINK" />瞭解如何更新應用程式<ph name="END_LINK" /></translation>
-<translation id="4744981231093950366">{NUM_TABS,plural, =1{開啟網站音訊}other{開啟多個網站的音訊}}</translation>
+<translation id="4744981231093950366">{NUM_TABS,plural, =1{開啟這個網站的音訊}other{開啟這些網站的音訊}}</translation>
<translation id="474609389162964566">說出「Ok Google」即可存取 Google 助理</translation>
<translation id="4746351372139058112">Messages</translation>
<translation id="4748783296226936791">網站通常會連線至 HID 裝置,是因為有功能需要使用非標準鍵盤、遊戲控制器和其他裝置。</translation>
@@ -4086,7 +4086,7 @@
<translation id="4972129977812092092">編輯印表機資訊</translation>
<translation id="4972164225939028131">密碼錯誤</translation>
<translation id="4972737347717125191">網站可以要求使用虛擬實境裝置和資料</translation>
-<translation id="4973325300212422370">{NUM_TABS,plural, =1{關閉網站音訊}other{關閉多個網站的音訊}}</translation>
+<translation id="4973325300212422370">{NUM_TABS,plural, =1{關閉這個網站的音訊}other{關閉這些網站的音訊}}</translation>
<translation id="497403230787583386">已完成安全性檢查,即將列印文件。</translation>
<translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation>
<translation id="4977942889532008999">確認存取權</translation>
@@ -4688,7 +4688,7 @@
<ph name="BEGIN_PARAGRAPH2" />即使關閉這項功能,你的裝置仍然可以傳送基本服務 (例如系統更新與安全服務) 所需的資訊。<ph name="END_PARAGRAPH2" />
<ph name="BEGIN_PARAGRAPH3" />裝置擁有者如要管理這項功能,可依序前往 [設定] &gt; [進階] &gt; [自動將診斷資料和使用情況資料傳送給 Google]。<ph name="END_PARAGRAPH3" />
<ph name="BEGIN_PARAGRAPH4" />如果你另外開啟了「網路和應用程式活動」設定,這項資料可能會儲存在你的 Google 帳戶中。如要查看/刪除你的資料,或是變更帳戶設定,請前往 account.google.com。<ph name="END_PARAGRAPH4" /></translation>
-<translation id="5585019845078534178">卡片</translation>
+<translation id="5585019845078534178">資訊卡</translation>
<translation id="5585118885427931890">無法建立書籤資料夾。</translation>
<translation id="558563010977877295">開啟某個特定網頁或一組網頁</translation>
<translation id="5585898376467608182">你的裝置儲存空間不足。使用「<ph name="APP_NAME" />」至少需要 <ph name="MINIMUM_SPACE" /> 的可用空間。如要增加可用空間,請刪除裝置中的檔案。</translation>
@@ -7047,7 +7047,7 @@
<translation id="7932741659804096942">密碼已儲存至這部裝置上的 <ph name="GOOGLE_PASSWORD_MANAGER" /></translation>
<translation id="793293630927785390">新的 Wi-Fi 網路對話方塊</translation>
<translation id="7932969338829957666">在 Linux 中,你可以前往 <ph name="BASE_DIR" /> 存取共用資料夾。</translation>
-<translation id="7933314993013528982">{NUM_TABS,plural, =1{開啟網站音訊}other{開啟多個網站的音訊}}</translation>
+<translation id="7933314993013528982">{NUM_TABS,plural, =1{開啟這個網站的音訊}other{開啟這些網站的音訊}}</translation>
<translation id="7933518760693751884">如要儲存頁面以便稍後閱讀,請按一下「書籤」圖示</translation>
<translation id="7933634003144813719">管理共用資料夾</translation>
<translation id="793531125873261495">下載虛擬機器時發生錯誤,請再試一次。</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_zu.xtb b/chromium/chrome/app/resources/generated_resources_zu.xtb
index b56ac630b7a..65e9fa24ccf 100644
--- a/chromium/chrome/app/resources/generated_resources_zu.xtb
+++ b/chromium/chrome/app/resources/generated_resources_zu.xtb
@@ -3700,7 +3700,7 @@ I-<ph name="DOMAIN" /> idinga ukuba ugcine ikhadi lakho elimsathi lifakiwe.</tra
<translation id="4559617833001311418">Leli sayithi lifinyelela kuzinzwa zakho zokunyakaza noma zokukhanya.</translation>
<translation id="4561893854334016293">Azikho izimvume ezishintshwe kamuva</translation>
<translation id="4562155214028662640">Engeza izigxivizo zeminwe</translation>
-<translation id="4563210852471260509">Ulimi lokufaka lasekuqaleni isi-Chinese</translation>
+<translation id="4563210852471260509">Ulimi lokufaka lasekuqaleni Chinese</translation>
<translation id="4563880231729913339">Umunwe 3</translation>
<translation id="4564245002465020751">Qedela ukusetha efonini yakho</translation>
<translation id="4565377596337484307">Fihla iphasiwedi</translation>
@@ -7564,7 +7564,7 @@ Gcina ifayela lakho elingukhiye endaweni evikelekile. Uzolidinga ukuze udale izi
<translation id="8418445294933751433">Bonisa njengethebhu</translation>
<translation id="8419098111404128271">Imiphumela yosesho ye-'<ph name="SEARCH_TEXT" />'</translation>
<translation id="8420308167132684745">Hlela okufakwa kusichazamazwi</translation>
-<translation id="8421361468937925547">Okushuthwe Bukhoma (I-English kuphela)</translation>
+<translation id="8421361468937925547">Okushuthwe Bukhoma (English kuphela)</translation>
<translation id="8422787418163030046">Ithreyi alikho</translation>
<translation id="8424250197845498070">Ivinjwe Ukuvikela Okuthuthukile</translation>
<translation id="8425213833346101688">Guqula</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_es-419.xtb b/chromium/chrome/app/resources/google_chrome_strings_es-419.xtb
index 43a9128849a..a70cbb8e48d 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_es-419.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -266,7 +266,7 @@
Es posible que se apliquen a esta cuenta los permisos que otorgaste a sitios web y apps. Puedes administrar tus Cuentas de Google en <ph name="SETTINGS_LINK_BEGIN" />Configuración<ph name="SETTINGS_LINK_END" />.</translation>
<translation id="7062128746136194023">Tu padre o madre desactivaron la opción "Permisos para sitios, apps y extensiones" para Chrome. No se permite agregar esta <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
<translation id="7085332316435785646">Elige si quieres incluir el historial de Chrome para tener experiencias más personalizadas en los servicios de Google</translation>
-<translation id="7088681679121566888">Chrome está actualizado</translation>
+<translation id="7088681679121566888">Chrome está actualizado.</translation>
<translation id="7098166902387133879">Google Chrome está usando tu micrófono.</translation>
<translation id="7099479769133613710">Reiniciar para actualizar Chrome OS</translation>
<translation id="7106741999175697885">Administrador de tareas - Google Chrome</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_es.xtb b/chromium/chrome/app/resources/google_chrome_strings_es.xtb
index ef32e02a8aa..ddc3295a9dc 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_es.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_es.xtb
@@ -11,7 +11,7 @@ Es posible que algunas funciones no estén disponibles y que no se guarden los c
<translation id="110877069173485804">Este es tu navegador Chrome</translation>
<translation id="1125124144982679672">¿Qué perfil de Chrome quieres usar?</translation>
<translation id="1142745911746664600">No se puede actualizar Chrome</translation>
-<translation id="1152920704813762236">Información de Chrome OS</translation>
+<translation id="1152920704813762236">Información de ChromeOS</translation>
<translation id="1154147086299354128">&amp;Abrir en Chrome</translation>
<translation id="1178374936842835197">Si no se muestra alguno de los ajustes en esta página, mira en la <ph name="LINK_BEGIN" />
configuración de ChromeOS Flex<ph name="LINK_END" /></translation>
@@ -134,7 +134,7 @@ Es posible que algunas funciones no estén disponibles y que no se guarden los c
<translation id="3541482654983822893">Chrome no puede comprobar tus contraseñas. Vuelve a intentarlo en 24 horas.</translation>
<translation id="3576528680708590453">El administrador del sistema ha configurado Google Chrome para que abra otro navegador al acceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
<translation id="3582972582564653026">Sincroniza y personaliza Chrome en todos tus dispositivos</translation>
-<translation id="3596080736082218006">{COUNT,plural, =0{Tu administrador pide que reinicies Chrome para aplicar una actualización}=1{Tu administrador pide que reinicies Chrome para aplicar una actualización. La ventana de incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chrome para aplicar una actualización. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="3596080736082218006">{COUNT,plural, =0{Tu administrador pide que reinicies Chrome para aplicar una actualización}=1{Tu administrador pide que reinicies Chrome para aplicar una actualización. La ventana de Incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chrome para aplicar una actualización. Las # ventanas de Incógnito no se volverán a abrir.}}</translation>
<translation id="3622797965165704966">Ahora es más fácil utilizar Chrome con tu cuenta de Google y en ordenadores compartidos.</translation>
<translation id="3673813398384385993">Chrome ha detectado que "<ph name="EXTENSION_NAME" />" contiene software malicioso</translation>
<translation id="3703994572283698466">ChromeOS se ha creado gracias a <ph name="BEGIN_LINK_CROS_OSS" />software libre<ph name="END_LINK_CROS_OSS" /> adicional, como el <ph name="BEGIN_LINK_LINUX_OSS" />entorno de desarrollo de Linux<ph name="END_LINK_LINUX_OSS" />.</translation>
@@ -220,7 +220,7 @@ Google Chrome no puede recuperar tu configuración.</translation>
<translation id="556024056938947818">Google Chrome está intentando mostrar contraseñas.</translation>
<translation id="5566025111015594046">Google Chrome (tráfico mDNS entrante)</translation>
<translation id="565744775970812598">Es posible que <ph name="FILE_NAME" /> sea peligroso, por lo que Chrome lo ha bloqueado.</translation>
-<translation id="5678190148303298925">{COUNT,plural, =0{Tu administrador pide que reinicies Chrome para aplicar esta actualización}=1{Tu administrador pide que reinicies Chrome para aplicar esta actualización. La ventana de incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chrome para aplicar esta actualización. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="5678190148303298925">{COUNT,plural, =0{Tu administrador pide que reinicies Chrome para aplicar esta actualización}=1{Tu administrador pide que reinicies Chrome para aplicar esta actualización. La ventana de Incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chrome para aplicar esta actualización. Las # ventanas de Incógnito no se volverán a abrir.}}</translation>
<translation id="5686916850681061684">Personaliza y controla Google Chrome. Se requiere tu intervención. Haz clic aquí para obtener más información.</translation>
<translation id="5690427481109656848">Google LLC</translation>
<translation id="5715063361988620182">{SECONDS,plural, =1{Google Chrome se reiniciará en 1 segundo}other{Google Chrome se reiniciará en # segundos}}</translation>
@@ -278,7 +278,7 @@ Los permisos que hayas dado a sitios web y aplicaciones se pueden aplicar a esta
<translation id="7098166902387133879">Google Chrome está utilizando el micrófono.</translation>
<translation id="7099479769133613710">Reiniciar para actualizar &amp;ChromeOS</translation>
<translation id="7106741999175697885">Administrador de tareas de Google Chrome</translation>
-<translation id="7140653346177713799">{COUNT,plural, =0{Hay una nueva actualización de Chrome disponible que se aplicará cuando reinicies el navegador.}=1{Hay una nueva actualización de Chrome disponible que se aplicará cuando reinicies el navegador. La ventana de incógnito no se volverá a abrir.}other{Hay una nueva actualización de Chrome disponible que se aplicará cuando reinicies el navegador. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="7140653346177713799">{COUNT,plural, =0{Hay una nueva actualización de Chrome disponible que se aplicará cuando reinicies el navegador.}=1{Hay una nueva actualización de Chrome disponible que se aplicará cuando reinicies el navegador. La ventana de Incógnito no se volverá a abrir.}other{Hay una nueva actualización de Chrome disponible que se aplicará cuando reinicies el navegador. Las # ventanas de Incógnito no se volverán a abrir.}}</translation>
<translation id="7155997830309522122">Si es así, edita la contraseña guardada en Chrome para que coincida con la nueva.</translation>
<translation id="7161904924553537242">Bienvenido a Google Chrome</translation>
<translation id="7177959540995930968">Puedes obtener más información sobre estas funciones en la configuración de Chrome.</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_eu.xtb b/chromium/chrome/app/resources/google_chrome_strings_eu.xtb
index 017feb315a5..2030f3a026f 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_eu.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -100,7 +100,7 @@ Eginbide batzuk agian dira erabilgarri egongo eta hobespenei egindako aldaketak
<translation id="2871893339301912279">Chrome-n saioa hasi duzu.</translation>
<translation id="2885378588091291677">Zereginen kudeatzailea</translation>
<translation id="2888126860611144412">Chrome-ri buruz</translation>
-<translation id="2926676257163822632">Seguruak ez diren pasahitzak erraz asmatzen dira. Utzi Chrome-ri <ph name="BEGIN_LINK" />pasahitz seguruak sortzen eta gogoratzen<ph name="END_LINK" />.</translation>
+<translation id="2926676257163822632">Seguruak ez diren pasahitzak erraz asmatzen dira. Utzi Chrome-ri <ph name="BEGIN_LINK" />pasahitz konplexuak sortzen eta gogoratzen<ph name="END_LINK" />.</translation>
<translation id="2926952073016206995">Chrome-k kamera atzitzeko baimena behar du webgune honetan</translation>
<translation id="2929907241665500097">Chrome ez da eguneratu arazoren bat izan delako. <ph name="BEGIN_LINK" />Konpondu Chrome eguneratzeko arazoak eta huts egindako eguneratzeak.<ph name="END_LINK" /></translation>
<translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Hasi saioa sarean - Chrome</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_fa.xtb b/chromium/chrome/app/resources/google_chrome_strings_fa.xtb
index 50bc1c9057b..ae485f91204 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_fa.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -32,7 +32,7 @@
<translation id="1587325591171447154">‏<ph name="FILE_NAME" /> خطرناک است، بنابراین Chrome آن را مسدود کرده ست.</translation>
<translation id="1597911401261118146">‏برای بررسی اینکه از گذرواژه‌هایتان دربرابر نقض داده یا دیگر مشکلات امنیتی محافظت می‌شود، <ph name="BEGIN_LINK" />به سیستم Chrome وارد شوید<ph name="END_LINK" />.</translation>
<translation id="1619887657840448962">‏برای ایمن‌تر کردن Chrome، افزونه زیر را که در <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> فهرست نشده است و ممکن است بدون اطلاع شما اضافه شده باشد، غیرفعال کردیم.</translation>
-<translation id="1627304841979541023">‏<ph name="BEGIN_BOLD" />چگونه می‌توانید داده‌هایتان را مدیریت کنید:<ph name="END_BOLD" /> برای محافظت از حریم‌خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشد به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chrome مدنظر قرار دهد حذف کنید.</translation>
+<translation id="1627304841979541023">‏<ph name="BEGIN_BOLD" />چگونه می‌توانید داده‌هایتان را مدیریت کنید:<ph name="END_BOLD" /> برای محافظت از حریم خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشد به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chrome مدنظر قرار دهد حذف کنید.</translation>
<translation id="1628000112320670027">‏دریافت کمک برای Chrome</translation>
<translation id="1662146548738125461">‏درباره ChromeOS Flex</translation>
<translation id="1674870198290878346">‏باز کردن پیوند در پنجره &amp;ناشناس Chrome</translation>
@@ -58,7 +58,7 @@
<translation id="2120620239521071941">‏این کار <ph name="ITEMS_COUNT" /> مورد را از این دستگاه حذف می‌کند. برای بازیابی داده‌هایتان در فرصتی دیگر، با <ph name="USER_EMAIL" /> وارد سیستم Chrome شوید.</translation>
<translation id="2121284319307530122">‏راه‌اندازی مجدد برای به‌روزرسانی Chrome</translation>
<translation id="2123055963409958220">‏با گزارش <ph name="BEGIN_LINK" />تنظیمات کنونی<ph name="END_LINK" />، به بهتر شدن Chrome کمک کنید</translation>
-<translation id="2131230230468101642">‏برای محافظت از حریم‌خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chrome مدنظر قرار دهد حذف کنید.</translation>
+<translation id="2131230230468101642">‏برای محافظت از حریم خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. یا می‌توانید علایقی را که نمی‌خواهید Chrome مدنظر قرار دهد حذف کنید.</translation>
<translation id="2139300032719313227">‏بازراه‌اندازی ChromeOS</translation>
<translation id="2151406531797534936">‏لطفاً اکنون Chrome را بازراه‌اندازی کنید</translation>
<translation id="2258103955319320201">‏برای دسترسی به چیزهایتان در مرورگر Chrome در همه دستگاه‌هایتان، به سیستم وارد شوید، سپس همگام‌سازی را روشن کنید</translation>
@@ -183,7 +183,7 @@
<translation id="4771048833395599659">‏این فایل ممکن است خطرناک باشد، بنابراین Chrome آن را مسدود کرده است.</translation>
<translation id="479167709087336770">‏از همان غلط‌یاب املا استفاده می‌کند که در جستجوی Google استفاده می‌شود. نوشتاری که در مرورگر تایپ کرده‌اید برای Google ارسال می‌شود. هروقت بخواهید می‌توانید این رفتار را در تنظیمات تغییر دهید.</translation>
<translation id="4842397268809523050">‏ChromeOS Flex نتوانست داده‌هایتان را همگام‌سازی کند زیرا همگام‌سازی برای دامنه شما دردسترس نیست.</translation>
-<translation id="4873783916118289636">‏مرور کنترل‌های اصلی امنیت و حریم‌خصوصی در Chrome</translation>
+<translation id="4873783916118289636">‏مرور کنترل‌های اصلی امنیت و حریم خصوصی در Chrome</translation>
<translation id="4891791193823137474">‏اجازه به Google Chrome برای اجرا در پس‌زمینه</translation>
<translation id="4895437082222824641">‏باز کردن پیوند در &amp;برگه جدید Chrome</translation>
<translation id="4953650215774548573">‏تنظیم Google Chrome به عنوان مرورگر پیش‌فرضتان</translation>
@@ -208,7 +208,7 @@
<translation id="5394833366792865639">‏هم‌رسانی برگه Chrome</translation>
<translation id="5412485296464121825">‏سایت‌ها می‌توانند بااستفاده از Chrome اطلاعاتی درباره علایقتان ذخیره کنند. برای مثال، اگر برای خرید کفش مخصوص ماراتون از سایتی بازدید کنید، ممکن است آن سایت علاقه شما را به‌صورت دونده ماراتون مشخص کند. بعداً، اگر برای ثبت‌نام در مسابقه‌ای به سایتی دیگر مراجعه کردید، آن سایت می‌تواند براساس علایقتان آگهی‌ای برای کفش مخصوص دویدن به شما نشان دهد.</translation>
<translation id="5430073640787465221">‏فایل اولویت‌های شما خراب یا نامعتبر است. Google Chrome نمی‌تواند تنظیمات شما را بازیابی کند.</translation>
-<translation id="5524761631371622910">‏اگر نسخه آزمایشی روشن باشد و Chrome به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم‌خصوصی شما، Chrome علایقتان را هر ماه به‌طور چرخشی حذف می‌کند.</translation>
+<translation id="5524761631371622910">‏اگر نسخه آزمایشی روشن باشد و Chrome به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم خصوصی شما، Chrome علایقتان را هر ماه به‌طور چرخشی حذف می‌کند.</translation>
<translation id="556024056938947818">‏Google Chrome می‌خواهد گذرواژه‌ها را نمایش دهد.</translation>
<translation id="5566025111015594046">‏Google Chrome (ورودی mDNS)</translation>
<translation id="565744775970812598">‏<ph name="FILE_NAME" /> ممکن است خطرناک باشد، بنابراین Chrome آن را مسدود کرده است.</translation>
@@ -216,7 +216,7 @@
<translation id="5686916850681061684">‏Google Chrome ‫را سفارشی و کنترل کنید. چیزی نیاز به رسیدگی دارد، برای اطلاعات بیشتر کلیک کنید.</translation>
<translation id="5690427481109656848">Google LLC</translation>
<translation id="5715063361988620182">{SECONDS,plural, =1{‏Google Chrome بعد از ۱ ثانیه بازراه‌اندازی می‌شود}one{‏Google Chrome بعد از # ثانیه بازراه‌اندازی می‌شود}other{‏Google Chrome بعد از # ثانیه بازراه‌اندازی می‌شود}}</translation>
-<translation id="5727531838415286053">‏اگر Chrome به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم‌خصوصی شما، Chrome علایقتان را هر ماه به‌طور چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
+<translation id="5727531838415286053">‏اگر Chrome به‌طور تصادفی نسخه آزمایشی را برایتان فعال کرده باشد، سابقه مرورتان بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم خصوصی شما، Chrome علایقتان را هر ماه به‌طور چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
<translation id="5736850870166430177">‏اگر سایتی تلاش کند گذرواژه شما را به‌سرقت ببرد، یا وقتی فایل مخربی بارگیری می‌کنید، Chrome ممکن است نشانی‌های وب را نیز به‌همراه بخش‌های کوچکی از محتوای صفحه، به «مرور ایمن» ارسال کند</translation>
<translation id="5756509061973259733">‏درحال‌حاضر یک نمایه Chrome با این حساب در این دستگاه وجود دارد</translation>
<translation id="5763280521700030406">‏Chrome این فایل را مسدود کرد زیرا برای بررسی امنیتی بسیار بزرگ است. با فایل‌هایی که حداکثر ۵۰ مگابایت باشد دوباره امتحان کنید</translation>
@@ -351,7 +351,7 @@
<translation id="8712767363896337380">‏تقریباً به‌روزرسانی شده است! برای تکمیل به‌روزرسانی، Chrome را راه‌اندازی مجدد کنید.</translation>
<translation id="873133009373065397">‏Google Chrome نمی‌تواند مرورگر پیش‌فرض را تعیین یا تنظیم کند</translation>
<translation id="8823341990149967727">‏نسخه Chrome قدیمی است</translation>
-<translation id="8825634023950448068">‏برای محافظت از حریم‌خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. و اگر Chrome به‌اشتباه علاقه‌ای را اضافه کند یا شما نخواهید آگهی‌های مشخصی را ببینید، می‌توانید آن علاقه را بردارید.</translation>
+<translation id="8825634023950448068">‏برای محافظت از حریم خصوصی شما، علایقی را که قدیمی‌تر از ۴ هفته باشند به‌طور خودکار حذف می‌کنیم. وقتی به مرور کردن ادامه می‌دهید، ممکن است علاقه‌ای مجدداً به فهرست اضافه شود. و اگر Chrome به‌اشتباه علاقه‌ای را اضافه کند یا شما نخواهید آگهی‌های مشخصی را ببینید، می‌توانید آن علاقه را بردارید.</translation>
<translation id="8834965163890861871">‏Google Chrome می‌خواهد گذرواژه‌ها را ویرایش کند. برای اینکه اجازه دهید این کار انجام شود، گذرواژه Windows خود را تایپ کنید.</translation>
<translation id="884296878221830158">‏این برنامه همچنین صفحه‌ای را که هنگام راه‌اندازی Chrome یا کلیک کردن روی دکمه صفحه اصلی نشان داده می‌شود، کنترل می‌کند.</translation>
<translation id="8862326446509486874">شما حقوق لازم برای نصب در سطح سیستم را ندارید. دوباره به‌عنوان سرپرست نصب‌کننده را اجرا کنید.</translation>
@@ -359,7 +359,7 @@
<translation id="8922193594870374009">‏برای ارسال شماره از <ph name="ORIGIN" /> به تلفن Android خود، در هر دو دستگاه به سیستم Chrome وارد شوید.</translation>
<translation id="8983720963221508955">‏«مرور ایمن پیشرفته» را در حسابتان روشن کرده‌اید. اکنون آن را برای Chrome دریافت کنید.</translation>
<translation id="8986207147630327271">با این کار، نمایه کاری را به این مرورگر اضافه می‌کنید و فقط کنترل نمایه کاری را دراختیار سرپرست قرار می‌دهید.</translation>
-<translation id="8989968390305463310">‏سابقه مرور شما بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم‌خصوصی شما، Chrome علایقتان را هر ماه به‌طور خودکار و چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
+<translation id="8989968390305463310">‏سابقه مرور شما بر آگهی‌هایی که می‌بینید و علایقتان که در زیر برآورد شده است تأثیر می‌گذارد. برای محافظت از حریم خصوصی شما، Chrome علایقتان را هر ماه به‌طور خودکار و چرخشی حذف می‌کند. ممکن است علایق بازآوری شود، مگر اینکه آن‌ها را بردارید.</translation>
<translation id="8999208279178790196">{0,plural, =0{‏به‌روزرسانی Chrome دردسترس است}=1{‏به‌روزرسانی Chrome دردسترس است}one{‏به‌روزرسانی Chrome از # روز پیش دردسترس است}other{‏به‌روزرسانی Chrome از # روز پیش دردسترس است}}</translation>
<translation id="9053892488859122171">‏سیستم ChromeOS Flex</translation>
<translation id="9067395829937117663">‏Google Chrome به Windows 7 یا بالاتر نیاز دارد.</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_fr.xtb b/chromium/chrome/app/resources/google_chrome_strings_fr.xtb
index f2b37c9551d..6fe75dabd4d 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_fr.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -13,11 +13,11 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="1152920704813762236">À propos de Chrome OS</translation>
<translation id="1154147086299354128">&amp;Ouvrir dans Chrome</translation>
<translation id="1178374936842835197">Si un paramètre ne s'affiche pas sur cette page, accédez aux <ph name="LINK_BEGIN" />
- paramètres de Chrome OS Flex<ph name="LINK_END" /></translation>
+ paramètres de ChromeOS Flex<ph name="LINK_END" /></translation>
<translation id="1182414570724401860">Chrome vous recommande de ne pas télécharger ni ouvrir ce fichier</translation>
<translation id="1278833599417554002">Relancer et mettre à jour &amp;Chrome</translation>
<translation id="1302523850133262269">Veuillez patienter pendant que Chrome installe les dernières mises à jour du système.</translation>
-<translation id="1335640173511558774"><ph name="MANAGER" /> exige que vous lisiez et acceptiez les conditions d'utilisation suivantes pour utiliser cet appareil. Celles-ci n'étendent, ne modifient ni ne restreignent les conditions d'utilisation de Google Chrome OS Flex.</translation>
+<translation id="1335640173511558774"><ph name="MANAGER" /> exige que vous lisiez et acceptiez les conditions d'utilisation suivantes pour utiliser cet appareil. Celles-ci n'étendent, ne modifient ni ne restreignent les conditions d'utilisation de Google ChromeOS Flex.</translation>
<translation id="1363996462118479832">Impossible de synchroniser vos données dans Chrome OS, car une erreur s'est produite lors de la connexion.</translation>
<translation id="137466361146087520">Version bêta de Google Chrome</translation>
<translation id="1399397803214730675">Une version plus récente de Google Chrome est déjà installée sur cet ordinateur. Si celle-ci ne fonctionne pas, désinstallez Google Chrome, puis réessayez.</translation>
@@ -35,7 +35,7 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="1619887657840448962">Afin de rendre Chromium plus sûr, nous avons désactivé l'extension suivante qui n'est pas répertoriée sur le <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> et qui a pu être ajoutée à votre insu.</translation>
<translation id="1627304841979541023"><ph name="BEGIN_BOLD" />Comment vous pouvez gérer vos données<ph name="END_BOLD" /> : pour protéger votre confidentialité, nous supprimons automatiquement vos centres d'intérêt s'ils datent de plus de quatre semaines. Au fil de votre navigation, un centre d'intérêt peut réapparaître dans la liste. Vous pouvez aussi supprimer des centres d'intérêt si vous ne souhaitez pas que Chrome les prenne en compte.</translation>
<translation id="1628000112320670027">Obtenir de l'aide avec Chrome</translation>
-<translation id="1662146548738125461">À propos de Chrome OS Flex</translation>
+<translation id="1662146548738125461">À propos de ChromeOS Flex</translation>
<translation id="1674870198290878346">Ouvrir le lien dans la fenêtre de navi&amp;gation privée Chrome</translation>
<translation id="1682634494516646069">Google Chrome ne peut pas lire et écrire dans son répertoire de données :
@@ -55,9 +55,9 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="1952239763774043237">Vous devez disposer de macOS 10.13 ou d'une version ultérieure pour recevoir les futures mises à jour de Google Chrome. Or, c'est la version macOS 10.12 qui est installée sur cet ordinateur.</translation>
<translation id="2018528049276128029">Chaque profil possède ses propres informations Chrome, comme des favoris, un historique, des mots de passe, etc.</translation>
<translation id="207902854391093810">Pendant les essais, Ad Measurement autorise les sites que vous visitez à demander à Chrome des informations pour les aider à mesurer les performances de leurs annonces. Cette API limite le suivi intersites en transférant le minimum d'informations entre les sites.</translation>
-<translation id="2094648590148273905">Conditions d'utilisation de Chrome OS Flex</translation>
+<translation id="2094648590148273905">Conditions d'utilisation de ChromeOS Flex</translation>
<translation id="2094919256425865063">Quitter Chrome quand même ?</translation>
-<translation id="2106831557840787829">Chrome OS Flex dépend d'autres <ph name="BEGIN_LINK_CROS_OSS" />logiciels Open Source<ph name="END_LINK_CROS_OSS" /> et l'<ph name="BEGIN_LINK_LINUX_OSS" />environnement de développement Linux<ph name="END_LINK_LINUX_OSS" /> en est un.</translation>
+<translation id="2106831557840787829">ChromeOS Flex dépend d'autres <ph name="BEGIN_LINK_CROS_OSS" />logiciels Open Source<ph name="END_LINK_CROS_OSS" /> et l'<ph name="BEGIN_LINK_LINUX_OSS" />environnement de développement Linux<ph name="END_LINK_LINUX_OSS" /> en est un.</translation>
<translation id="2120620239521071941">Cette action aura pour effet de supprimer <ph name="ITEMS_COUNT" /> éléments de cet appareil. Pour récupérer vos données ultérieurement, connectez-vous à Chrome en tant que <ph name="USER_EMAIL" />.</translation>
<translation id="2121284319307530122">Relancer et mettre à jour &amp;Chrome</translation>
<translation id="2123055963409958220">Aidez-nous à améliorer Chrome en nous signalant vos <ph name="BEGIN_LINK" />paramètres actuels<ph name="END_LINK" /></translation>
@@ -104,7 +104,7 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="2926952073016206995">Chrome a besoin de l'autorisation d'accéder à la caméra pour ce site</translation>
<translation id="2929907241665500097">Échec de la mise à jour de Chrome en raison d'une erreur. <ph name="BEGIN_LINK" />Découvrez comment résoudre ce type de problème.<ph name="END_LINK" /></translation>
<translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Connexion au réseau - Chrome</translation>
-<translation id="3019382870990049182">Relancer et mettre à jour &amp;Chrome OS Flex</translation>
+<translation id="3019382870990049182">Relancer et mettre à jour &amp;ChromeOS Flex</translation>
<translation id="303514781271618814">Chrome développe de nouvelles fonctionnalités qui permettent aux sites de proposer la même expérience de navigation en utilisant moins de données</translation>
<translation id="3037838751736561277">Google Chrome est exécuté en mode arrière-plan.</translation>
<translation id="3059710691562604940">La navigation sécurisée étant désactivée, Chrome vous recommande de l'activer.</translation>
@@ -113,7 +113,7 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="3080151273017101988">Poursuivre l'exécution d'applications en arrière-plan après la fermeture de Google Chrome</translation>
<translation id="3089968997497233615">Une nouvelle version de Google Chrome encore plus sûre est disponible.</translation>
<translation id="3100998948628680988">Nommer votre profil Chrome</translation>
-<translation id="3103390129666310801">Pour savoir si votre appareil est à jour, accédez aux <ph name="LINK_BEGIN" />paramètres de Chrome OS Flex<ph name="LINK_END" /></translation>
+<translation id="3103390129666310801">Pour savoir si votre appareil est à jour, accédez aux <ph name="LINK_BEGIN" />paramètres de ChromeOS Flex<ph name="LINK_END" /></translation>
<translation id="3114643501466072395">Pour vérifier si vos autres mots de passe sont suffisamment sécurisés afin d'empêcher toute violation de données et autres problèmes de sécurité, <ph name="BEGIN_LINK" />connectez-vous à Chrome<ph name="END_LINK" />.</translation>
<translation id="3140883423282498090">Vos modifications seront prises en compte au prochain redémarrage de Google Chrome.</translation>
<translation id="3149510190863420837">Applications Chrome</translation>
@@ -137,12 +137,12 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="3622797965165704966">Il est désormais plus facile d'utiliser Chrome avec votre compte Google et sur des ordinateurs partagés.</translation>
<translation id="3673813398384385993">Chrome a détecté que <ph name="EXTENSION_NAME" /> contient un logiciel malveillant</translation>
<translation id="3703994572283698466">Chrome OS dépend d'autres <ph name="BEGIN_LINK_CROS_OSS" />logiciels Open Source<ph name="END_LINK_CROS_OSS" />, et l'<ph name="BEGIN_LINK_LINUX_OSS" />environnement de développement Linux<ph name="END_LINK_LINUX_OSS" /> en est un.</translation>
-<translation id="3716540481907974026">Version de Chrome OS Flex</translation>
+<translation id="3716540481907974026">Version de ChromeOS Flex</translation>
<translation id="3718181793972440140">Cette action aura pour effet de supprimer 1 élément de cet appareil. Pour récupérer vos données ultérieurement, connectez-vous à Chrome en tant que <ph name="USER_EMAIL" />.</translation>
<translation id="3735758079232443276">L'extension <ph name="EXTENSION_NAME" /> a modifié la page qui s'affiche lorsque vous démarrez Chrome.</translation>
<translation id="3744202345691150878">Obtenir de l'aide avec Chrome OS</translation>
<translation id="3780814664026482060">Chrome – <ph name="PAGE_TITLE" /></translation>
-<translation id="3785324443014631273">Chrome OS Flex n'a pas pu synchroniser vos données en raison d'une erreur lors de la connexion.</translation>
+<translation id="3785324443014631273">ChromeOS Flex n'a pas pu synchroniser vos données en raison d'une erreur lors de la connexion.</translation>
<translation id="3795971588916395511">Google Chrome OS</translation>
<translation id="3835168907083856002">Cela va créer un profil Chrome pour <ph name="USER_EMAIL_ADDRESS" /></translation>
<translation id="386202838227397562">Veuillez fermer toutes les fenêtres de Google Chrome et réessayer.</translation>
@@ -177,7 +177,7 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="4571503333518166079">Accéder aux paramètres de notification de Chrome</translation>
<translation id="459622048091363950">Une fois l'accès à une ressource accordé à Chrome, les sites Web sont également en mesure de vous demander l'accès.</translation>
<translation id="4600710005438004015">Échec de l'installation de la dernière version de Chrome. Vous ne disposez donc pas des nouvelles fonctionnalités, ni des correctifs de sécurité.</translation>
-<translation id="4627412468266359539">Facultatif : contribuez à améliorer les fonctionnalités et performances de Chrome OS Flex en envoyant automatiquement des données d'utilisation et de diagnostic à Google.</translation>
+<translation id="4627412468266359539">Facultatif : contribuez à améliorer les fonctionnalités et performances de ChromeOS Flex en envoyant automatiquement des données d'utilisation et de diagnostic à Google.</translation>
<translation id="4633000520311261472">Afin de rendre Chrome plus sûr, nous avons désactivé certaines extensions qui ne sont pas répertoriées sur le <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> et qui ont pu être ajoutées à votre insu.</translation>
<translation id="469553575393225953">Les extensions, les applications et les thèmes provenant de sources inconnues risquent d'endommager votre appareil. Chrome recommande de les installer uniquement à partir du Chrome Web Store</translation>
<translation id="4728575227883772061">Échec de l'installation suite à une erreur non spécifiée. Si Google Chrome est en cours d'exécution, fermez-le puis réessayez.</translation>
@@ -185,13 +185,13 @@ Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifica
<translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
<translation id="4771048833395599659">Chrome a bloqué ce fichier, car ce dernier peut être dangereux.</translation>
<translation id="479167709087336770">Le correcteur orthographique utilisé est le même que celui employé dans la recherche Google. Le texte que vous saisissez dans le navigateur est envoyé à Google. Vous pouvez toujours modifier ce comportement dans les paramètres.</translation>
-<translation id="4842397268809523050">Chrome OS Flex n'a pas pu synchroniser vos données, car la synchronisation n'est pas disponible pour votre domaine.</translation>
+<translation id="4842397268809523050">ChromeOS Flex n'a pas pu synchroniser vos données, car la synchronisation n'est pas disponible pour votre domaine.</translation>
<translation id="4873783916118289636">Examinez les paramètres clés de confidentialité et de sécurité dans Chrome</translation>
<translation id="4891791193823137474">Laisser Google Chrome s'exécuter en arrière-plan</translation>
<translation id="4895437082222824641">Ouvrir le lien dans un nouvel ongle&amp;t Chrome</translation>
<translation id="4953650215774548573">Définir Google Chrome en tant que navigateur par défaut</translation>
<translation id="495931528404527476">Dans Chrome</translation>
-<translation id="4969674060580488087">Chrome OS Flex n'a pas pu synchroniser vos données, car les infos de connexion de votre compte sont obsolètes.</translation>
+<translation id="4969674060580488087">ChromeOS Flex n'a pas pu synchroniser vos données, car les infos de connexion de votre compte sont obsolètes.</translation>
<translation id="4970761609246024540">Bienvenue sur la page de profils Chrome</translation>
<translation id="4970880042055371251">Version de Chrome OS</translation>
<translation id="4990567037958725628">Google Chrome Canary</translation>
@@ -208,7 +208,7 @@ Certaines fonctionnalités peuvent être indisponibles. Veuillez spécifier un r
<translation id="5334309298019785904">Impossible de synchroniser vos données dans Chrome OS, car la synchronisation n'est pas disponible pour votre domaine.</translation>
<translation id="5334487786912937552">Pour télécharger des fichiers, Chrome a besoin d'accéder à l'espace de stockage</translation>
<translation id="5337648990166757586">Facultatif : contribuez à améliorer les fonctionnalités et les performances de Chrome OS en envoyant automatiquement des données de diagnostic et d'utilisation à Google.</translation>
-<translation id="5357889879764279201">Obtenir de l'aide pour Chrome OS Flex</translation>
+<translation id="5357889879764279201">Obtenir de l'aide pour ChromeOS Flex</translation>
<translation id="5386244825306882791">Elle contrôle également la page qui s'affiche au démarrage de Chrome ou lorsque vous effectuez une recherche dans l'omnibox.</translation>
<translation id="5394833366792865639">Partager un onglet Chrome</translation>
<translation id="5412485296464121825">Les sites peuvent stocker des informations sur vos centres d'intérêt dans Chrome. Par exemple, si vous allez sur un site afin d'acheter des chaussures pour un marathon, le site peut définir le marathon comme l'un de vos centres d'intérêt. Ensuite, si vous consultez un autre site pour vous enregistrer pour une course, ce site peut diffuser une annonce pour des chaussures de running en se basant sur vos centres d'intérêt.</translation>
@@ -251,11 +251,11 @@ Google Chrome ne peut pas récupérer vos paramètres.</translation>
<translation id="6506909944137591434">Pour créer un plan 3D de votre environnement, Chrome a besoin de l'autorisation d'accéder à la caméra</translation>
<translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome pour les développeurs</translation>
<translation id="659498884637196217">Dans le Gestionnaire de mots de passe Google sur cet appareil</translation>
-<translation id="6632473616050862500">Chrome OS Flex dépend d'autres <ph name="BEGIN_LINK_CROS_OSS" />logiciels Open Source <ph name="END_LINK_CROS_OSS" />.</translation>
+<translation id="6632473616050862500">ChromeOS Flex dépend d'autres <ph name="BEGIN_LINK_CROS_OSS" />logiciels Open Source <ph name="END_LINK_CROS_OSS" />.</translation>
<translation id="6676384891291319759">Accéder à Internet</translation>
<translation id="6679975945624592337">Laisser Google Chrome s'exécuter en arrière-plan</translation>
<translation id="6696915334902295848">Chrome a besoin de l'autorisation d'accéder au micro pour ce site</translation>
-<translation id="6735387454586646204">Système Chrome OS Flex</translation>
+<translation id="6735387454586646204">Système ChromeOS Flex</translation>
<translation id="6739177684496155661">Continuer avec un nouveau profil Chrome ?</translation>
<translation id="6750954913813541382">Pour corriger les fautes d'orthographe, Chrome envoie à Google le texte que vous saisissez dans le navigateur</translation>
<translation id="677276454032249905">Quitter Chrome quand même ?</translation>
@@ -294,7 +294,7 @@ Les autorisations que vous avez déjà accordées aux sites Web et aux applis pe
<translation id="7486227612705979895">Chromium va accéder à votre Drive pour proposer des suggestions dans la barre d'adresse</translation>
<translation id="7535429826459677826">Google Chrome pour les développeurs</translation>
<translation id="7592736734348559088">Impossible de synchroniser vos données dans Google Chrome, car les informations de connexion de votre compte ne sont plus à jour.</translation>
-<translation id="7606334485649076285">Google Chrome OS Flex</translation>
+<translation id="7606334485649076285">Google ChromeOS Flex</translation>
<translation id="7626032353295482388">Bienvenue dans Chrome</translation>
<translation id="7626072681686626474"><ph name="MANAGER" /> exige que vous lisiez et acceptiez les conditions d'utilisation suivantes pour utiliser cet appareil. Celles-ci n'étendent, ne modifient ni ne restreignent les conditions d'utilisation de Google Chrome OS.</translation>
<translation id="7629695634924605473">Chrome vous indique si vos mots de passe ont été piratés</translation>
@@ -314,12 +314,12 @@ Les autorisations que vous avez déjà accordées aux sites Web et aux applis pe
<translation id="7896673875602241923">Un utilisateur s'est récemment connecté à Chrome sur cet ordinateur en tant que <ph name="ACCOUNT_EMAIL_LAST" />. Veuillez créer un autre utilisateur Chrome pour séparer vos informations.</translation>
<translation id="7917876797003313048">Vous pouvez gérer les comptes Google auxquels vous êtes connecté. Ils vous permettent d'accéder au navigateur Chrome, au Play Store, à Gmail, etc. Pour ajouter le compte d'une autre personne, comme un membre de votre famille, ajoutez un nouvel utilisateur à votre <ph name="DEVICE_TYPE" /> à la place. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
<translation id="7930071585467473040">Google Chrome tente de copier les mots de passe.</translation>
-<translation id="7951272445806340501">Redémarrez Chrome OS Flex pour appliquer la mise à jour.</translation>
+<translation id="7951272445806340501">Redémarrez ChromeOS Flex pour appliquer la mise à jour.</translation>
<translation id="7962410387636238736">Cet ordinateur ne recevra plus les mises à jour de Google Chrome, car la compatibilité n'est plus assurée sur Windows XP et Windows Vista</translation>
<translation id="8005666035647241369">Dans le Gestionnaire de mots de passe Google sur cet appareil</translation>
<translation id="8008534537613507642">Réinstaller Chrome</translation>
<translation id="8013993649590906847">Si une image n'est pas accompagnée d'une description utile, Chrome essaiera de vous en proposer une. Pour nous permettre de créer des descriptions, les images sont envoyées à Google.</translation>
-<translation id="8064015586118426197">Chrome OS Flex</translation>
+<translation id="8064015586118426197">ChromeOS Flex</translation>
<translation id="8129812357326543296">À propos de &amp;Google Chrome</translation>
<translation id="822971176939352383">Les comptes suivants ne sont connectés à aucun profil Chrome. Si vous souhaitez utiliser un compte pour un autre profil, supprimez d'abord le profil.</translation>
<translation id="8255190535488645436">Votre webcam et votre micro sont en cours d'utilisation dans Google Chrome.</translation>
@@ -367,14 +367,14 @@ Les autorisations que vous avez déjà accordées aux sites Web et aux applis pe
<translation id="8986207147630327271">Vous êtes sur le point d'ajouter un profil professionnel à ce navigateur et d'en donner le contrôle à votre administrateur.</translation>
<translation id="8989968390305463310">Votre historique de navigation influe sur les annonces que vous voyez et les centres d'intérêt estimés ci-dessous. Pour protéger votre confidentialité, Chrome supprime automatiquement vos centres d'intérêt tous les mois. Les centres d'intérêt peuvent s'actualiser, sauf si vous les supprimez.</translation>
<translation id="8999208279178790196">{0,plural, =0{Une mise à jour de Chrome est disponible}=1{Une mise à jour de Chrome est disponible}one{Une mise à jour de Chrome est disponible depuis # jour}other{Une mise à jour de Chrome est disponible depuis # jours}}</translation>
-<translation id="9053892488859122171">Système Chrome OS Flex</translation>
+<translation id="9053892488859122171">Système ChromeOS Flex</translation>
<translation id="9067395829937117663">Vous devez disposer de Windows 7 ou version ultérieure pour utiliser Google Chrome.</translation>
<translation id="911206726377975832">Supprimer également vos données de navigation ?</translation>
<translation id="9138603949443464873">Pour appliquer vos modifications, relancez Chrome</translation>
<translation id="9195993889682885387">Chrome peut estimer quels sont vos centres d'intérêt en fonction de votre historique de navigation des dernières semaines. Ces informations restent sur votre appareil.</translation>
<translation id="919706545465235479">Mettre à jour Chrome pour lancer la synchronisation</translation>
<translation id="922152298093051471">Personnaliser Chrome</translation>
-<translation id="93760716455950538">Redémarrer Chrome OS Flex</translation>
+<translation id="93760716455950538">Redémarrer ChromeOS Flex</translation>
<translation id="940313311831216333">Pour retrouver vos réglages Chrome sur tous vos appareils, connectez-vous, puis activez la synchronisation.</translation>
<translation id="989369509083708165">Google Chrome est votre navigateur par défaut</translation>
<translation id="989816563149873169"><ph name="SHORTCUT" /> permet de passer d'un profil Chrome à un autre</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_lt.xtb b/chromium/chrome/app/resources/google_chrome_strings_lt.xtb
index 80c02a8918d..130f16991f7 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_lt.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -28,7 +28,7 @@ Kai kurios funkcijos gali būti nepasiekiamos ir nuostatų pakeitimai nebus išs
<translation id="1516530951338665275">„Google Chrome“ reikia pasiekti „Bluetooth“, kad galėtų sieti
toliau. <ph name="IDS_BLUETOOTH_DEVICE_CHOOSER_AUTHORIZE_BLUETOOTH_LINK" /></translation>
<translation id="1547295885616600893">„Chrome“ OS pasiekiama naudojant papildomą <ph name="BEGIN_LINK_CROS_OSS" />atvirojo šaltinio programinę įrangą<ph name="END_LINK_CROS_OSS" />.</translation>
-<translation id="1553358976309200471">Atnaujinkite „Chrome“</translation>
+<translation id="1553358976309200471">Atnaujinti „Chrome“</translation>
<translation id="1583073672411044740">Naudotojas (<ph name="EXISTING_USER" />) jau yra prisijungęs prie šio „Chrome“ profilio. Bus sukurtas naujas <ph name="USER_EMAIL_ADDRESS" /> „Chrome“ profilis</translation>
<translation id="1587223624401073077">„Google Chrome“ naudoja jūsų fotoaparatą.</translation>
<translation id="1587325591171447154">Failas „<ph name="FILE_NAME" />“ pavojingas, todėl „Chrome“ jį užblokavo.</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_te.xtb b/chromium/chrome/app/resources/google_chrome_strings_te.xtb
index 04519bc7b31..1a8717b4d67 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_te.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_te.xtb
@@ -2,7 +2,7 @@
<!DOCTYPE translationbundle>
<translationbundle lang="te">
<translation id="1001534784610492198">ఇన్‌స్టాలర్ ఆర్కైవ్ పాడైంది లేదా చెల్లదు. దయచేసి Google Chromeను మ‌ళ్లీ డౌన్‌లోడ్ చేయండి.</translation>
-<translation id="102763973188675173">Google Chromeను అనుకూలీకరించండి మరియు నియంత్రించండి. అప్‌డేట్ అందుబాటులో ఉంది.</translation>
+<translation id="102763973188675173">Google Chromeను అనుకూలంగా మార్చండి మరియు నియంత్రించండి. అప్‌డేట్ అందుబాటులో ఉంది.</translation>
<translation id="1051826050538111504">మీ కంప్యూటర్‌లో మీ భద్రతకు హాని కలిగించే సాఫ్ట్‌వేర్‌ ఉంది. మీ బ్రౌజర్‌ని మళ్లీ సాధారణంగా పని చేసేలా చేయడానికి Chrome దానిని తీసివేసి, మీ సెట్టింగ్‌లను పునరుద్ధరించి, ఎక్స్‌టెన్షన్‌లను నిలిపివేయగలదు.</translation>
<translation id="1065672644894730302">మీ ప్రాధాన్యతలు చదవబడలేవు. కొన్ని లక్షణాలు అందుబాటులో ఉండకపోవచ్చు మరియు ప్రాధాన్యతలకు మార్పులు సేవ్ చేయబడకపోవచ్చు.</translation>
<translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> మునుపు Chromeని ఉపయోగించింది</translation>
@@ -67,7 +67,7 @@
<translation id="2309047409763057870">ఇది Google Chrome యొక్క రెండవ ఇన‌స్ట‌లేష‌న్. దీన్ని మీ డిఫాల్ట్ బ్రౌజర్‌గా చేయడం సాధ్యపడదు.</translation>
<translation id="2345992953227471816">ఈ ఎక్స్‌టెన్షన్‌లు మాల్‌వేర్‌ను కలిగి ఉన్నట్టుగా Chrome కనుగొన్నది:</translation>
<translation id="2348335408836342058">ఈ సైట్ కోసం మీ కెమెరా మరియు మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి Chromeకు అనుమతి అవసరం</translation>
-<translation id="234869673307233423">Chrome మీ పాస్‌వర్డ్‌లను తనిఖీ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
+<translation id="234869673307233423">Chrome మీ పాస్‌వర్డ్‌లను చెక్ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
<translation id="235650106824528204">ఈ ప్రొఫైల్‌ను ఉపయోగిస్తున్నప్పుడు జెనరేట్ అయిన ఏదైనా Chrome డేటాను (బుక్‌మార్క్‌లు, హిస్టరీ, పాస్‌వర్డ్‌లు, ఇంకా ఇతర సెట్టింగ్‌లు వంటివి క్రియేట్ చేయడం) వర్క్ ప్రొఫైల్ అడ్మినిస్ట్రేటర్ తీసివేయవచ్చు. <ph name="LEARN_MORE" /></translation>
<translation id="2359808026110333948">కొనసాగించు</translation>
<translation id="2401189691232800402">ChromeOS సిస్టమ్</translation>
@@ -124,7 +124,7 @@
<translation id="3451115285585441894">Chromeకు జోడిస్తోంది...</translation>
<translation id="345171907106878721">Chromeకు మిమ్మల్ని జోడించుకోండి</translation>
<translation id="3453763134178591239">ChromeOS నియమాలు</translation>
-<translation id="34857402635545079">అలాగే (<ph name="URL" />)లో ఉన్న Chromeకి సంబంధించిన డేటాని తీసివేయి</translation>
+<translation id="34857402635545079">అలాగే (<ph name="URL" />)లో ఉన్న Chromeకి సంబంధించిన డేటాను తీసివేయండి</translation>
<translation id="3503306920980160878">ఈ సైట్‌తో మీ స్థానాన్ని షేర్ చేయడానికి Chromeకు మీ స్థాన యాక్సెస్ అవసరం</translation>
<translation id="3533694711092285624">సేవ్ చేసిన పాస్‌వర్డ్‌లు లేవు. మీరు మీ పాస్‌వర్డ్‌లను సేవ్ చేసినప్పుడు Chrome వాటిని చెక్ చేయగలదు.</translation>
<translation id="3541482654983822893">మీ పాస్‌వర్డ్‌లను Chrome చెక్ చేయలేకపోయింది. 24 గంటల తర్వాత మళ్లీ ట్రై చేయండి.</translation>
@@ -148,7 +148,7 @@
<translation id="3889417619312448367">Google Chromeను అన్‌ఇన్‌స్టాల్ చేయండి</translation>
<translation id="4035053306113201399">అప్‌డేట్‌ను వర్తింపచేయడానికి ChromeOSను రీస్టార్ట్ చేయాలి.</translation>
<translation id="4050175100176540509">ముఖ్యమైన భద్రతా మెరుగుదలలు మరియు కొత్త ఫీచర్‌లు తాజా వెర్షన్‌లో అందుబాటులో ఉన్నాయి.</translation>
-<translation id="4053720452172726777">Google Chromeను అనుకూలీకరించండి మరియు నియంత్రించండి</translation>
+<translation id="4053720452172726777">Google Chromeను అనుకూలంగా మార్చండి మరియు నియంత్రించండి</translation>
<translation id="4106587138345390261">Chrome మీ సమాచారాన్ని తక్కువగా ఉపయోగిస్తూ అదే బ్రౌజింగ్ అనుభవాన్ని అందించడానికి సైట్‌లను అనుమతించే కొత్త ఫీచర్‌ల కోసం అన్వేషిస్తోంది</translation>
<translation id="4110895483821904099">మీ కొత్త Chrome ప్రొఫైల్‍ని సెట్ అప్ చేయండి</translation>
<translation id="4147555960264124640">మీరు నిర్వహించబడే ఖాతాతో సైన్ ఇన్ చేస్తున్నారు. దీని నిర్వాహకునికి మీ Google Chrome ప్రొఫైల్‌పై నియంత్రణను అందిస్తున్నారు. మీ యాప్‌లు, బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు, ఇతర సెట్టింగ్‌ల వంటి మీ Chrome డేటా శాశ్వతంగా <ph name="USER_NAME" />కు అనుబంధించబడుతుంది. మీరు Google ఖాతాల డ్యాష్‌బోర్డ్ ద్వారా ఈ డేటాను తొలగించవచ్చు. కానీ ఈ డేటాను మరో ఖాతాతో అనుబంధించలేరు. <ph name="LEARN_MORE" /></translation>
@@ -164,7 +164,7 @@
<translation id="4328355335528187361">Google Chrome డెవలపర్ (mDNS-In)</translation>
<translation id="4335235004908507846">డేటా ఉల్లంఘనలు, చెడు ఎక్స్‌టెన్షన్‌లు మొదలైన వాటి నుండి మిమ్మల్ని సురక్షితంగా ఉంచడంలో Chrome సహాయపడగలదు</translation>
<translation id="4343195214584226067">Chromeకు <ph name="EXTENSION_NAME" /> జోడించబడింది</translation>
-<translation id="4384570495110188418">మీరు సైన్ ఇన్ చేయలేదు కాబట్టి Chrome మీ పాస్‌వర్డ్‌లను తనిఖీ చేయలేదు</translation>
+<translation id="4384570495110188418">మీరు సైన్ ఇన్ చేయలేదు కాబట్టి Chrome మీ పాస్‌వర్డ్‌లను చెక్ చేయలేదు</translation>
<translation id="4427306783828095590">ఫిషింగ్, అలాగే మాల్‌వేర్‌ను బ్లాక్ చేయడానికి మెరుగుపరచిన రక్షణ మరింత చేయగలదు</translation>
<translation id="4450664632294415862">Chrome - నెట్‌వర్క్ సైన్ ఇన్ - <ph name="PAGE_TITLE" /></translation>
<translation id="4458462641685292929">Google Chromeలో మరొక వ్యవస్థాపన జరుగుతోంది. దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి.</translation>
@@ -213,7 +213,7 @@
<translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
<translation id="565744775970812598"><ph name="FILE_NAME" /> హానికరం కావచ్చు, కావున Chrome దాన్ని బ్లాక్ చేసింది.</translation>
<translation id="5678190148303298925">{COUNT,plural, =0{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromeను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు}=1{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromeను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ అజ్ఞాత విండో మళ్లీ తెరవబడదు.}other{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromeను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ # అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.}}</translation>
-<translation id="5686916850681061684">Google Chromeను అనుకూలీకరించండి, నియంత్రించండి. మీరు గమనించాల్సిన విషయం ఒకటి ఉంది - వివరాల కోసం క్లిక్ చేయండి.</translation>
+<translation id="5686916850681061684">Google Chromeను అనుకూలంగా మార్చండి, నియంత్రించండి. మీరు గమనించాల్సిన విషయం ఒకటి ఉంది - వివరాల కోసం క్లిక్ చేయండి.</translation>
<translation id="5690427481109656848">Google LLC</translation>
<translation id="5715063361988620182">{SECONDS,plural, =1{Google Chrome 1 సెకనులో పునఃప్రారంభమవుతుంది}other{Google Chrome # సెకన్లలో పునఃప్రారంభమవుతుంది}}</translation>
<translation id="5727531838415286053">Chrome ర్యాండమ్‌గా మిమ్మల్ని యాక్టివ్‌గా ఉన్న ఒక ట్రయల్‌లో ఉంచినట్లయితే, మీ బ్రౌజింగ్ హిస్టరీ మీరు చూసే యాడ్‌లను, దిగువున అంచనా వేసిన ఆసక్తులపై ప్రభావం చూపుతుంది. మీ గోప్యతను రక్షించడానికి, Chrome ప్రతి నెలా దశల వారీగా మీ ఆసక్తులను తొలగిస్తుంది. ఆసక్తులు మీరు తీసివేస్తే మినహా, రిఫ్రెష్ అవుతూనే ఉంటాయి.</translation>
@@ -295,14 +295,14 @@
<translation id="7641148173327520642"><ph name="TARGET_URL_HOSTNAME" />ను యాక్సెస్ చేయడం కోసం <ph name="ALTERNATIVE_BROWSER_NAME" />ను తెరిచే విధంగా Google Chromeను మీ సిస్టమ్ నిర్వాహకుడు కాన్ఫిగర్ చేశారు.</translation>
<translation id="7651907282515937834">Chrome ఎంటర్‌ప్రైజ్ లోగో</translation>
<translation id="7655455401911432608">మీ బ్రౌజింగ్ హిస్టరీ, ఈ పరికరంలో Chromeను ఉపయోగించి మీరు సందర్శించిన సైట్‌ల రికార్డ్.</translation>
-<translation id="7747138024166251722">ఇన్‌స్టాలర్ ఒక తాత్కాలిక డైరక్టరీని సృష్టించలేకపోయింది. సాఫ్ట్‌వేర్‌ను ఇన్‌స్టాల్ చేయడానికి దయచేసి ఖాళీ డిస్క్ స్థలం, అనుమతిని తనిఖీ చేయండి.</translation>
+<translation id="7747138024166251722">ఇన్‌స్టాలర్ ఒక తాత్కాలిక డైరక్టరీని సృష్టించలేకపోయింది. సాఫ్ట్‌వేర్‌ను ఇన్‌స్టాల్ చేయడానికి దయచేసి ఖాళీ డిస్క్ స్థలం, అనుమతిని చెక్ చేయండి.</translation>
<translation id="7761834446675418963">Chromeను తెరిచి, బ్రౌజింగ్‌ను ప్రారంభించడానికి మీ పేరును క్లిక్ చేయండి.</translation>
<translation id="7777080907402804672">చిత్రంలో ఉపయోగకరమైన వివరణ లేకుంటే, మీ కోసం ఒక వివరణను అందించడానికి Chrome ప్రయత్నిస్తుంది. వివరణలను క్రియేట్ చేయడానికి, చిత్రాలు Googleకు పంపబడతాయి. మీరు దీన్ని ఎప్పుడైనా సెట్టింగ్‌లలో ఆఫ్ చేయవచ్చు.</translation>
<translation id="7781002470561365167">Google Chrome యొక్క కొత్త వెర్షన్ ఇప్పుడు అందుబాటులో ఉంది.</translation>
<translation id="778331955594035129">ఈ సైట్ కోసం Chromeకు లొకేషన్ అనుమతి అవసరం</translation>
<translation id="7787950393032327779">ఈ ప్రొఫైల్‌ను మరొక కంప్యూటర్ (<ph name="HOST_NAME" />)లో మరో Google Chrome ప్రాసెస్ (<ph name="PROCESS_ID" />) ఉపయోగిస్తున్నట్లు కనిపిస్తోంది. ఆ ప్రొఫైల్ పాడవకూడదనే ఉద్దేశ్యంతో Chrome దానిని లాక్ చేసింది. ఈ ప్రొఫైల్‌ను వేరే ఇతర ప్రాసెస్‌లు ఏవీ ఉపయోగించడం లేదని మీకు ఖచ్చితంగా తెలిస్తే, మీరు ప్రొఫైల్‌ను అన్‌లాక్ చేసి Chromeను మళ్లీ లాంచ్ చేయవచ్చు.</translation>
<translation id="7801699035218095297">పాస్‌వర్డ్‌లను కాపీ చేయడానికి Google Chrome ప్రయత్నిస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్‌వర్డ్‌ను టైప్ చేయండి.</translation>
-<translation id="7808348361785373670">Chrome నుండి తీసివేయి...</translation>
+<translation id="7808348361785373670">Chrome నుండి తీసివేయండి...</translation>
<translation id="7825851276765848807">నిర్దిష్టంగా తెలియ‌ని ఎర్ర‌ర్‌ కారణంగా ఇన్‌స్ట‌లేష‌న్‌ విఫలమైంది. దయచేసి Google Chromeను మ‌ళ్లీ డౌన్‌లోడ్ చేయండి.</translation>
<translation id="7890208801193284374">మీరు కంప్యూటర్‌ను షేర్‌ చేస్తే, స్నేహితులు, కుటుంబ సభ్యులు విడివిడిగా బ్రౌజ్ చేయవచ్చు. Chromeను వారికి నచ్చిన రీతిలో సెటప్ చేసుకోవచ్చు.</translation>
<translation id="7896673875602241923">మునుపు ఒకరు ఈ కంప్యూటర్‌లో Chromeకు <ph name="ACCOUNT_EMAIL_LAST" /> లాగా సైన్ ఇన్ చేశారు. దయచేసి మీ సమాచారాన్ని విడిగా ఉంచడానికి కొత్త Chrome వినియోగదారును క్రియేట్ చేయండి.</translation>
@@ -367,7 +367,7 @@
<translation id="9138603949443464873">మీ మార్పులను వర్తింపజేయడానికి, Chromeని పునఃప్రారంభించండి</translation>
<translation id="9195993889682885387">గత కొన్ని వారాల మీ బ్రౌజింగ్ హిస్టరీ ఆధారంగా Chrome మీ ఆసక్తులను అంచనా వేయగలదు. ఈ సమాచారం మీ పరికరంలో ఉంటుంది.</translation>
<translation id="919706545465235479">సింక్‌ను ప్రారంభించడానికి Chromeను అప్‌డేట్ చేయాలి</translation>
-<translation id="922152298093051471">Chromeను అనుకూలంగా మార్చు</translation>
+<translation id="922152298093051471">Chromeను అనుకూలంగా మార్చండి</translation>
<translation id="93760716455950538">ChromeOS Flexను రీస్టార్ట్ చేయండి</translation>
<translation id="940313311831216333">మీ అన్ని పరికరాలలో మీ Chrome సంబంధిత అంశాలను యాక్సెస్ చేయడానికి, సైన్ ఇన్ చేసి, ఆపై సింక్‌ను ఆన్ చేయండి.</translation>
<translation id="989369509083708165">మీ డిఫాల్ట్ బ్రౌజర్ Google Chrome</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_tr.xtb b/chromium/chrome/app/resources/google_chrome_strings_tr.xtb
index c635cf85eec..ee047441b6c 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_tr.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -368,7 +368,7 @@ Web sitelerine ve uygulamalara verdiğiniz izinler, bu hesap için geçerli olab
<translation id="9138603949443464873">Yaptığınız değişiklikleri uygulamak için Chrome'u yeniden başlatın</translation>
<translation id="9195993889682885387">Chrome son birkaç haftalık tarama geçmişinize göre ilgi alanlarınızı tahmin edebilir. Bu bilgi, cihazınızda kalır.</translation>
<translation id="919706545465235479">Senkronizasyonu başlatmak için Chrome'u güncelleyin</translation>
-<translation id="922152298093051471">Chrome'u özelleştirin</translation>
+<translation id="922152298093051471">Chrome'u özelleştir</translation>
<translation id="93760716455950538">ChromeOS Flex'i yeniden başlatın</translation>
<translation id="940313311831216333">Chrome öğelerinize tüm cihazlarınızda erişmek için oturum açın ve senkronizasyonu etkinleştirin.</translation>
<translation id="989369509083708165">Google Chrome varsayılan tarayıcınız oldu</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chromium/chrome/app/resources/google_chrome_strings_zh-CN.xtb
index c0b50827437..c156d7350e5 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_zh-CN.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -174,7 +174,7 @@
<translation id="4600710005438004015">Chrome 无法更新至最新版本,因此您未能获得最新的功能和安全修复程序。</translation>
<translation id="4627412468266359539">可选:自动向 Google 发送诊断数据和使用情况数据,协助改进 ChromeOS Flex 的功能和性能。</translation>
<translation id="4633000520311261472">为了提高 Chrome 的安全性,系统停用了一些未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />中、可能是在您不知情的情况下添加的扩展程序。</translation>
-<translation id="469553575393225953">来源不明的扩展程序、应用和主题可能会危害您的设备。Chrome 建议只从 Chrome 网上应用店安装这些内容</translation>
+<translation id="469553575393225953">来源不明的扩展程序、应用和主题可能会危害您的设备。Chrome 建议只从 Chrome 应用商店安装这些内容</translation>
<translation id="4728575227883772061">未知错误导致安装失败。如果 Google Chrome 浏览器正在运行,请将其关闭,然后重试。</translation>
<translation id="4747730611090640388">Chrome 可以推测出您的兴趣。之后,您访问的网站可向 Chrome 请求查看您的兴趣,以便向您展示个性化广告。</translation>
<translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chromium/chrome/browser/extensions/api/debugger/debugger_api.cc b/chromium/chrome/browser/extensions/api/debugger/debugger_api.cc
index bee4712cca6..fc4b3eb1e84 100644
--- a/chromium/chrome/browser/extensions/api/debugger/debugger_api.cc
+++ b/chromium/chrome/browser/extensions/api/debugger/debugger_api.cc
@@ -41,6 +41,7 @@
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
+#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/web_contents.h"
@@ -209,6 +210,12 @@ bool ExtensionMayAttachToWebContents(const Extension& extension,
web_contents.GetLastCommittedURL(), error)) {
return false;
}
+ if (web_contents.GetController().GetPendingEntry() &&
+ !ExtensionMayAttachToURL(
+ extension, extension_profile,
+ web_contents.GetController().GetPendingEntry()->GetURL(), error)) {
+ return false;
+ }
return ExtensionMayAttachToRenderFrameHost(
extension, extension_profile, web_contents.GetMainFrame(), error);
diff --git a/chromium/chrome/browser/extensions/api/file_system/request_file_system_notification.cc b/chromium/chrome/browser/extensions/api/file_system/request_file_system_notification.cc
index b2513554866..b8b4647e4c8 100644
--- a/chromium/chrome/browser/extensions/api/file_system/request_file_system_notification.cc
+++ b/chromium/chrome/browser/extensions/api/file_system/request_file_system_notification.cc
@@ -8,8 +8,11 @@
#include <utility>
#include "base/callback.h"
+#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "build/chromeos_buildflags.h"
#include "chrome/browser/ash/file_manager/volume_manager.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/chrome_app_icon_loader.h"
@@ -34,9 +37,10 @@ namespace {
const int kIconSize = 48;
// Loads an app's icon and uses it to display a notification.
-class AppNotificationLauncher : public AppIconLoaderDelegate {
+class AppNotificationLauncher : public AppIconLoaderDelegate,
+ public message_center::NotificationDelegate {
public:
- // This class owns and deletes itself after showing the notification.
+ // This class owns and deletes itself after the shown notification closes.
AppNotificationLauncher() = default;
AppNotificationLauncher(const AppNotificationLauncher&) = delete;
@@ -51,24 +55,33 @@ class AppNotificationLauncher : public AppIconLoaderDelegate {
icon_loader_ =
std::make_unique<ChromeAppIconLoader>(profile, kIconSize, this);
icon_loader_->FetchImage(extension.id());
-
- // |this| may be destroyed!
}
// AppIconLoaderDelegate overrides:
+ // This is triggered from FetchImage() in InitAndShow(), and can be called
+ // multiple times, synchronously or asynchronously.
void OnAppImageUpdated(const std::string& id,
const gfx::ImageSkia& image) override {
pending_notification_->set_icon(ui::ImageModel::FromImageSkia(image));
- NotificationDisplayService::GetForProfile(profile_)->Display(
- NotificationHandler::Type::TRANSIENT, *pending_notification_,
- /*metadata=*/nullptr);
- delete this;
+ auto* notification_display_service =
+ NotificationDisplayService::GetForProfile(profile_);
+
+ notification_display_service->Display(NotificationHandler::Type::TRANSIENT,
+ *pending_notification_,
+ /*metadata=*/nullptr);
+ }
+
+ // message_center::NotificationDelegate override.
+ void Close(bool by_user) override {
+ // On notification close, free |pending_notification| (which holds a
+ // reference to this) to trigger self-deletion.
+ pending_notification_.reset();
}
private:
~AppNotificationLauncher() override = default;
- Profile* profile_;
+ base::raw_ptr<Profile> profile_;
std::unique_ptr<AppIconLoader> icon_loader_;
std::unique_ptr<message_center::Notification> pending_notification_;
};
@@ -81,13 +94,19 @@ void ShowNotificationForAutoGrantedRequestFileSystem(
const base::WeakPtr<Volume>& volume,
bool writable) {
DCHECK(profile);
+ static int sequence = 0;
+ // Create globally unique |notification_id| so that notifications are not
+ // suppressed, thus allowing each AppNotificationLauncher instance to
+ // correspond to an actual notification, and properly deallocated on close.
+ const std::string notification_id =
+ base::StringPrintf("%s-%s-%d", extension.id().c_str(),
+ volume->volume_id().c_str(), sequence);
+ ++sequence;
// If the volume is gone, then do not show the notification.
if (!volume.get())
return;
- const std::string notification_id =
- extension.id() + "-" + volume->volume_id();
message_center::RichNotificationData data;
// TODO(mtomasz): Share this code with RequestFileSystemDialogView.
@@ -100,6 +119,10 @@ void ShowNotificationForAutoGrantedRequestFileSystem(
: IDS_FILE_SYSTEM_REQUEST_FILE_SYSTEM_NOTIFICATION_MESSAGE,
display_name);
+ // Helper that self-deletes when the displayed notification closes.
+ scoped_refptr<AppNotificationLauncher> app_notification_launcher =
+ base::MakeRefCounted<AppNotificationLauncher>();
+
std::unique_ptr<message_center::Notification> notification(new Notification(
message_center::NOTIFICATION_TYPE_SIMPLE, notification_id,
base::UTF8ToUTF16(extension.name()), message,
@@ -108,11 +131,10 @@ void ShowNotificationForAutoGrantedRequestFileSystem(
GURL(),
message_center::NotifierId(message_center::NotifierType::SYSTEM_COMPONENT,
notification_id),
- data, base::MakeRefCounted<message_center::NotificationDelegate>()));
+ data, app_notification_launcher));
- // AppNotificationLauncher will delete itself.
- (new AppNotificationLauncher())
- ->InitAndShow(profile, extension, std::move(notification));
+ app_notification_launcher->InitAndShow(profile, extension,
+ std::move(notification));
}
} // namespace extensions
diff --git a/chromium/chrome/browser/extensions/api/sessions/sessions_api.cc b/chromium/chrome/browser/extensions/api/sessions/sessions_api.cc
index de02aca8d02..2279fd5040d 100644
--- a/chromium/chrome/browser/extensions/api/sessions/sessions_api.cc
+++ b/chromium/chrome/browser/extensions/api/sessions/sessions_api.cc
@@ -19,6 +19,7 @@
#include "build/chromeos_buildflags.h"
#include "chrome/browser/extensions/api/sessions/session_id.h"
#include "chrome/browser/extensions/api/tab_groups/tab_groups_util.h"
+#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/api/tabs/windows_util.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/window_controller.h"
@@ -605,6 +606,9 @@ ExtensionFunction::ResponseAction SessionsRestoreFunction::Run() {
if (profile != profile->GetOriginalProfile())
return RespondNow(Error(kRestoreInIncognitoError));
+ if (!ExtensionTabUtil::IsTabStripEditable())
+ return RespondNow(Error(tabs_constants::kTabStripNotEditableError));
+
if (!params->session_id)
return RespondNow(RestoreMostRecentlyClosed(browser));
diff --git a/chromium/chrome/browser/extensions/api/sessions/sessions_apitest.cc b/chromium/chrome/browser/extensions/api/sessions/sessions_apitest.cc
index 6531d778668..1b71e54a30c 100644
--- a/chromium/chrome/browser/extensions/api/sessions/sessions_apitest.cc
+++ b/chromium/chrome/browser/extensions/api/sessions/sessions_apitest.cc
@@ -19,6 +19,7 @@
#include "build/chromeos_buildflags.h"
#include "chrome/browser/extensions/api/sessions/sessions_api.h"
#include "chrome/browser/extensions/api/tabs/tabs_api.h"
+#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_function_test_utils.h"
#include "chrome/browser/profiles/profile_manager.h"
@@ -26,6 +27,7 @@
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/test_browser_window.h"
#include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/sync/base/client_tag_hash.h"
@@ -352,6 +354,27 @@ IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, RestoreInIncognito) {
"Can not restore sessions in incognito mode."));
}
+IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, RestoreNonEditableTabstrip) {
+ CreateSessionModels();
+
+ // Set up a browser with a non-editable tabstrip, simulating one in the midst
+ // of a tab dragging session.
+ std::unique_ptr<TestBrowserWindow> browser_window =
+ std::make_unique<TestBrowserWindow>();
+ Browser::CreateParams params(browser()->profile(), true);
+ params.type = Browser::TYPE_NORMAL;
+ params.window = browser_window.get();
+ std::unique_ptr<Browser> browser =
+ std::unique_ptr<Browser>(Browser::Create(params));
+ browser_window->SetIsTabStripEditable(false);
+
+ EXPECT_TRUE(base::MatchPattern(
+ utils::RunFunctionAndReturnError(
+ CreateFunction<SessionsRestoreFunction>(true).get(), "[\"1\"]",
+ browser.get()),
+ tabs_constants::kTabStripNotEditableError));
+}
+
IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, GetRecentlyClosedIncognito) {
std::unique_ptr<base::ListValue> result(
utils::ToList(utils::RunFunctionAndReturnSingleResult(
diff --git a/chromium/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc b/chromium/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc
index 707e884c746..46a0026b19d 100644
--- a/chromium/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc
+++ b/chromium/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc
@@ -317,7 +317,8 @@ static constexpr const char* const kChromeUrls[] = {
"chrome://linux-proxy-config",
"chrome://multidevice-setup",
"chrome://network",
- "chrome://oobe",
+ // TODO(crbug.com/1329058): Eliminate chrome://oobe/login
+ "chrome://oobe/login",
"chrome://os-credits",
"chrome://os-settings",
"chrome://power",
diff --git a/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index d29dc6e3fb2..c864dfac286 100644
--- a/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -222,6 +222,7 @@
#include "chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.h"
#include "chrome/browser/ash/printing/print_management/printing_manager.h"
#include "chrome/browser/ash/printing/print_management/printing_manager_factory.h"
+#include "chrome/browser/ash/profiles/profile_helper.h"
#include "chrome/browser/ash/scanning/chrome_scanning_app_delegate.h"
#include "chrome/browser/ash/scanning/scan_service.h"
#include "chrome/browser/ash/scanning/scan_service_factory.h"
@@ -278,8 +279,10 @@
#include "chrome/browser/ui/webui/nearby_internals/nearby_internals_ui.h"
#include "chrome/browser/ui/webui/nearby_share/nearby_share_dialog_ui.h"
#include "chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h"
+#include "chrome/common/chrome_switches.h"
#include "chromeos/services/network_health/public/mojom/network_diagnostics.mojom.h" // nogncheck
#include "chromeos/services/network_health/public/mojom/network_health.mojom.h" // nogncheck
+#include "content/public/common/content_switches.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#endif
@@ -990,8 +993,18 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<chromeos::multidevice_setup::MultiDeviceSetupDialogUI>;
if (url.host_piece() == chrome::kChromeUINetworkHost)
return &NewWebUI<chromeos::NetworkUI>;
- if (url.host_piece() == chrome::kChromeUIOobeHost)
- return &NewWebUI<chromeos::OobeUI>;
+ if (url.host_piece() == chrome::kChromeUIOobeHost) {
+ // TODO(crbug.com/1329058): Eliminate chrome://oobe/login and fix OOBE tests
+ // running inside the session.
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ bool is_running_test = command_line->HasSwitch(::switches::kTestName) ||
+ command_line->HasSwitch(::switches::kTestType);
+ if (ash::ProfileHelper::IsSigninProfile(profile) ||
+ (url.path() == "/login" && is_running_test)) {
+ return &NewWebUI<chromeos::OobeUI>;
+ }
+ return nullptr;
+ }
if (url.host_piece() == chrome::kChromeUIOSSettingsHost)
return &NewWebUI<chromeos::settings::OSSettingsUI>;
if (url.host_piece() == chrome::kChromeUIPowerHost)
diff --git a/chromium/chrome/browser/ui/webui/chromeos/multidevice_internals/multidevice_internals_phone_hub_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/multidevice_internals/multidevice_internals_phone_hub_handler.cc
index aa782eb4975..0fb6bc71d3e 100644
--- a/chromium/chrome/browser/ui/webui/chromeos/multidevice_internals/multidevice_internals_phone_hub_handler.cc
+++ b/chromium/chrome/browser/ui/webui/chromeos/multidevice_internals/multidevice_internals_phone_hub_handler.cc
@@ -355,7 +355,10 @@ void MultidevicePhoneHubHandler::EnableRealPhoneHubManager() {
}
void MultidevicePhoneHubHandler::EnableFakePhoneHubManager() {
- DCHECK(!fake_phone_hub_manager_);
+ // Don't create FakePhoneHubManager if it already exists to prevent UAF.
+ if (fake_phone_hub_manager_)
+ return;
+
PA_LOG(VERBOSE) << "Setting fake Phone Hub Manager";
fake_phone_hub_manager_ = std::make_unique<phonehub::FakePhoneHubManager>();
ash::SystemTray::Get()->SetPhoneHubManager(fake_phone_hub_manager_.get());
diff --git a/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_page_handler.cc b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_page_handler.cc
index 9977cd20c4b..b46a9b2bb3d 100644
--- a/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_page_handler.cc
+++ b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_page_handler.cc
@@ -644,10 +644,11 @@ void TabStripPageHandler::GetThemeColors(GetThemeColorsCallback callback) {
void TabStripPageHandler::GroupTab(int32_t tab_id,
const std::string& group_id_string) {
int tab_index = -1;
- bool got_tab = extensions::ExtensionTabUtil::GetTabById(
- tab_id, browser_->profile(), /*include_incognito=*/true, nullptr, nullptr,
- nullptr, &tab_index);
- DCHECK(got_tab);
+ if (!extensions::ExtensionTabUtil::GetTabById(
+ tab_id, browser_->profile(), /*include_incognito=*/true, nullptr,
+ nullptr, nullptr, &tab_index)) {
+ return;
+ }
absl::optional<tab_groups::TabGroupId> group_id =
tab_strip_ui::GetTabGroupIdFromString(
@@ -660,10 +661,11 @@ void TabStripPageHandler::GroupTab(int32_t tab_id,
void TabStripPageHandler::UngroupTab(int32_t tab_id) {
int tab_index = -1;
- bool got_tab = extensions::ExtensionTabUtil::GetTabById(
- tab_id, browser_->profile(), /*include_incognito=*/true, nullptr, nullptr,
- nullptr, &tab_index);
- DCHECK(got_tab);
+ if (!extensions::ExtensionTabUtil::GetTabById(
+ tab_id, browser_->profile(), /*include_incognito=*/true, nullptr,
+ nullptr, nullptr, &tab_index)) {
+ return;
+ }
browser_->tab_strip_model()->RemoveFromGroup({tab_index});
}
@@ -812,10 +814,11 @@ void TabStripPageHandler::ShowTabContextMenu(int32_t tab_id,
gfx::PointF point(location_x, location_y);
Browser* browser = nullptr;
int tab_index = -1;
- const bool got_tab = extensions::ExtensionTabUtil::GetTabById(
- tab_id, browser_->profile(), true /* include_incognito */, &browser,
- nullptr, nullptr, &tab_index);
- CHECK(got_tab);
+ if (!extensions::ExtensionTabUtil::GetTabById(
+ tab_id, browser_->profile(), true /* include_incognito */, &browser,
+ nullptr, nullptr, &tab_index)) {
+ return;
+ }
if (browser != browser_) {
// TODO(crbug.com/1141573): Investigate how a context menu is being opened
diff --git a/chromium/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb b/chromium/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb
index 20e89b1e13b..17017b3fff4 100644
--- a/chromium/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb
+++ b/chromium/components/autofill_assistant/android/internal/java/strings/translations/android_chrome_autofill_assistant_strings_te.xtb
@@ -10,16 +10,16 @@
<translation id="3018033505440165876">Chromeలో Google Assistantను\nట్రై చేయండి</translation>
<translation id="4130750466177569591">నేను అంగీకరిస్తున్నాను</translation>
<translation id="4404736763084919307">Google Assistantకు మీ అనుమతి అవసరం</translation>
-<translation id="4437727785356380473">Chromeలో Google అసిస్టెంట్ మూసివేయబడింది.</translation>
+<translation id="4437727785356380473">Chromeలో Google Assistant మూసివేయబడింది.</translation>
<translation id="4517854969512651305">విలువను పెంచుతుంది</translation>
<translation id="4850886885716139402">వీక్షణ</translation>
<translation id="4952448020231702394">శోధన, చెక్అవుట్ వంటి వెబ్ చర్యలను పూర్తి చేయడంలో మీకు సహాయపడటం ద్వారా Google Assistant మీ సమయాన్ని ఆదా చేస్తుంది.</translation>
<translation id="4982366513646093083">కేవలం కొన్ని సార్లు ట్యాప్ చేయడం ద్వారా\nఆహారాన్ని ఆర్డర్ చేయండి</translation>
-<translation id="5267269112080050255">Chromeలో Google అసిస్టెంట్ పూర్తి ఎత్తులో తెరవబడింది.</translation>
+<translation id="5267269112080050255">Chromeలో Google Assistant పూర్తి ఎత్తులో తెరవబడింది.</translation>
<translation id="5447168050208292829">కేవలం కొన్ని సార్లు ట్యాప్ చేయడం ద్వారా\nమీ విమానంలోకి చెక్ ఇన్ చేయండి</translation>
<translation id="5545898449961003030">హాయ్, కేవలం కొన్ని ట్యాప్‌లు చేయడం ద్వారా టికెట్‌లను కొనుగోలు చేయడంలో నేను మీకు సహాయం చేయగలను</translation>
<translation id="5801568494490449797">ప్రాధాన్యతలు</translation>
-<translation id="6555233628095991027">Chromeలో Google అసిస్టెంట్ సగం ఎత్తులో తెరవబడింది.</translation>
+<translation id="6555233628095991027">Chromeలో Google Assistant సగం ఎత్తులో తెరవబడింది.</translation>
<translation id="6785872064505734160">Chromeలో Google Assistant మీ కోసం వెబ్‌సైట్‌ల అంతటా చర్యలను పూర్తి చేయగలదు</translation>
<translation id="6973932557599545801">క్షమించండి నేను సహాయం చేయలేకపోయాను, దయచేసి మీరే స్వంతంగా కొనసాగండి.</translation>
<translation id="7135664311366978968">కేవలం కొన్ని సార్లు ట్యాప్ చేయడం ద్వారా\nసినిమా టిక్కెట్‌లను కొనుగోలు చేయండి</translation>
@@ -27,7 +27,7 @@
<translation id="7658239707568436148">రద్దు చేయండి</translation>
<translation id="780301667611848630">వద్దు , ధన్యవాదాలు</translation>
<translation id="7953600313732929223">వెబ్‌సైట్‌లలో\nవాయిస్ చర్యలను ట్రై చేయండి</translation>
-<translation id="8253702004019660079">Chromeలో Google అసిస్టెంట్.</translation>
+<translation id="8253702004019660079">Chromeలో Google Assistant.</translation>
<translation id="8500511870202433545">కేవలం కొన్ని సార్లు ట్యాప్ చేయడం ద్వారా \nకారు అద్దెకు తీసుకోండి</translation>
<translation id="9084406551994160152">మీ Google Assistant మీరు సురక్షితంగా స్టోర్ చేసిన వివరాలను ఉపయోగించి సినిమా టికెట్‌లను కొనుగోలు చేయడాన్ని సులభతరం చేస్తుంది</translation>
<translation id="945522503751344254">ఫీడ్‌బ్యాక్ పంపండి</translation>
diff --git a/chromium/components/background_fetch/background_fetch_delegate_base.cc b/chromium/components/background_fetch/background_fetch_delegate_base.cc
index 5f88192eb4e..26f7716ae83 100644
--- a/chromium/components/background_fetch/background_fetch_delegate_base.cc
+++ b/chromium/components/background_fetch/background_fetch_delegate_base.cc
@@ -101,6 +101,7 @@ void BackgroundFetchDelegateBase::DownloadUrl(
weak_ptr_factory_.GetWeakPtr());
params.traffic_annotation =
net::MutableNetworkTrafficAnnotationTag(traffic_annotation);
+ params.request_params.update_first_party_url_on_redirect = false;
JobDetails* job_details = GetJobDetails(job_id);
if (job_details->job_state == JobDetails::State::kPendingWillStartPaused ||
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
index 2399ccc32f2..6f9baa109a2 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
@@ -229,7 +229,7 @@
<translation id="6545864417968258051">Bluetooth-scanning</translation>
<translation id="6552800053856095716">{PERMISSIONS_SUMMARY_BLOCKED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> og <ph name="NUM_MORE" /> mere er blokeret}one{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" />, and <ph name="NUM_MORE" /> more blocked}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> og <ph name="NUM_MORE" /> mere er blokeret}}</translation>
<translation id="6554732001434021288">Senest besøgt for <ph name="NUM_DAYS" /> dage siden</translation>
-<translation id="6561560012278703671">Få lydløse meddelelser (dette sørger for, at dine notifikationsprompts ikke forstyrrer dig)</translation>
+<translation id="6561560012278703671">Få lydløse meddelelser (dette sørger for, at dine notifikationer ikke forstyrrer dig)</translation>
<translation id="6593061639179217415">Standardwebsite</translation>
<translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation>
<translation id="6612358246767739896">Beskyttet indhold</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
index d26e1a4ab7c..6659793fed0 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -229,7 +229,7 @@
<translation id="6545864417968258051">Bluetooth-Suche</translation>
<translation id="6552800053856095716">{PERMISSIONS_SUMMARY_BLOCKED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> und <ph name="NUM_MORE" /> weitere blockiert}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> und <ph name="NUM_MORE" /> weitere blockiert}}</translation>
<translation id="6554732001434021288">Vor <ph name="NUM_DAYS" /> Tagen zuletzt besucht</translation>
-<translation id="6561560012278703671">Ein Symbol in der Adressleiste einblenden (störende Aufforderungen zum Annehmen von Benachrichtigungen werden blockiert)</translation>
+<translation id="6561560012278703671">Unaufdringlichere Benachrichtigungen verwenden (störende Aufforderungen zum Annehmen von Benachrichtigungen werden blockiert)</translation>
<translation id="6593061639179217415">Desktopwebsite</translation>
<translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation>
<translation id="6612358246767739896">Geschützte Inhalte</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
index 243878e8f8b..1f4a0b67ede 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -187,7 +187,7 @@
<translation id="5516455585884385570">Abrir la configuración de notificaciones</translation>
<translation id="5527111080432883924">Preguntar antes de permitir que los sitios lean el texto y las imágenes del portapapeles (recomendado)</translation>
<translation id="5553374991681107062">Recientes</translation>
-<translation id="5556459405103347317">Cargar de nuevo</translation>
+<translation id="5556459405103347317">Volver a cargar</translation>
<translation id="5596627076506792578">Más opciones</translation>
<translation id="5649053991847567735">Descargas automáticas</translation>
<translation id="5668404140385795438">Anular la solicitud de inhabilitación del zoom de un sitio web</translation>
@@ -218,7 +218,7 @@
<translation id="6216432067784365534">Opciones de <ph name="NAME_OF_LIST_ITEM" /></translation>
<translation id="6231752747840485235">¿Quieres desinstalar "<ph name="APP_NAME" />"?</translation>
<translation id="6262279340360821358">Bloqueados: <ph name="PERMISSION_1" /> y <ph name="PERMISSION_2" /></translation>
-<translation id="6270391203985052864">Los sitios podrán preguntarte si quieres recibir notificaciones</translation>
+<translation id="6270391203985052864">Los sitios pueden preguntarte si quieres recibir notificaciones</translation>
<translation id="6295158916970320988">Todos los sitios</translation>
<translation id="6320088164292336938">Vibrar</translation>
<translation id="6388207532828177975">Borrar y restablecer</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
index 7f049b52aaa..22a44b9ff65 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
@@ -229,7 +229,7 @@
<translation id="6545864417968258051">Búsqueda de dispositivos Bluetooth</translation>
<translation id="6552800053856095716">{PERMISSIONS_SUMMARY_BLOCKED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más bloqueados}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y <ph name="NUM_MORE" /> más bloqueados}}</translation>
<translation id="6554732001434021288">Última visita: hace <ph name="NUM_DAYS" /> días</translation>
-<translation id="6561560012278703671">Usar notificaciones más discretas (bloquea las notificaciones emergentes para evitar interrupciones)</translation>
+<translation id="6561560012278703671">Usar notificaciones más discretas (bloquea las notificaciones emergentes para que no te interrumpan)</translation>
<translation id="6593061639179217415">Vista ordenador</translation>
<translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation>
<translation id="6612358246767739896">Contenido protegido</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
index 6761ef625e9..ea7d9cefc77 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
@@ -101,7 +101,7 @@
<translation id="3295602654194328831">Masquer les informations</translation>
<translation id="3328801116991980348">Informations sur le site</translation>
<translation id="3333961966071413176">Tous les contacts</translation>
-<translation id="3386292677130313581">Demander avant d'autoriser des sites à accéder à ma position (recommandé)</translation>
+<translation id="3386292677130313581">Demander avant d'autoriser des sites à connaître votre position (recommandé)</translation>
<translation id="3538390592868664640">Empêcher les sites de créer un plan 3D de votre environnement ou de suivre la position de la caméra</translation>
<translation id="3551268116566418498">Quitter la navigation privée ?</translation>
<translation id="3586500876634962664">Utilisation de la caméra et du micro</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
index 8bcdeef33f4..804bcfcf38d 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
@@ -251,7 +251,7 @@
<translation id="6992289844737586249">साइटों को अपने माइक्रोफ़ोन का इस्तेमाल करने देने से पहले अनुमति लेना ज़रूरी बनाएं (सुझाया गया)</translation>
<translation id="7000754031042624318">Android सेटिंग में बंद कर दिया गया है</translation>
<translation id="7016516562562142042">मौजूदा सर्च इंजन के लिए अनुमति दी गई है</translation>
-<translation id="702463548815491781">उस समय के लिए सुझाया गया जब 'टॉकबैक' या 'ऐक्सेस करने का तरीका बदलें' चालू हों</translation>
+<translation id="702463548815491781">उस समय के लिए सुझाया गया जब 'TalkBack' या 'ऐक्सेस करने का तरीका बदलें' चालू हों</translation>
<translation id="7053983685419859001">ब्लॉक करें</translation>
<translation id="7066151586745993502">{NUM_SELECTED,plural, =1{1 चुना गया}one{# चुने गए}other{# चुने गए}}</translation>
<translation id="7087918508125750058"><ph name="ITEM_COUNT" /> चुने गए. विकल्प, स्क्रीन के ऊपरी भाग के पास उपलब्ध हैं</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
index 33e0fdbfd52..cbe9cd98a80 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
@@ -101,7 +101,7 @@
<translation id="3295602654194328831">Sembunyikan Info</translation>
<translation id="3328801116991980348">Informasi situs</translation>
<translation id="3333961966071413176">Semua kontak</translation>
-<translation id="3386292677130313581">Minta izin sebelum memungkinkan situs mengetahui lokasi Anda (disarankan)</translation>
+<translation id="3386292677130313581">Minta izin sebelum mengizinkan situs mengetahui lokasi Anda (disarankan)</translation>
<translation id="3538390592868664640">Blokir situs agar tidak membuat peta 3D untuk area di sekeliling Anda atau melacak posisi kamera</translation>
<translation id="3551268116566418498">Keluar dari mode Samaran?</translation>
<translation id="3586500876634962664">Kamera dan mikrofon aktif</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
index f8bb3ef17b8..3a2395b8add 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
@@ -163,7 +163,7 @@
<translation id="509133520954049755">Richiedi visualizzazione desktop</translation>
<translation id="5100237604440890931">Compresso. Fai clic per espandere.</translation>
<translation id="5123685120097942451">Scheda di navigazione in incognito</translation>
-<translation id="5134599672855298214">Richiedi visualizzazione per dispositivi mobili (opzione consigliata)</translation>
+<translation id="5134599672855298214">Richiedi visualizzazione mobile (opzione consigliata)</translation>
<translation id="5186036860380548585">Opzione disponibile nella parte superiore dello schermo</translation>
<translation id="5197729504361054390">I contatti che selezioni verranno condivisi con <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />.</translation>
<translation id="5216942107514965959">Ultima visita: oggi</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
index 4107cfc992c..a5629fa8bb6 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -156,7 +156,7 @@
<translation id="4994033804516042629">連絡先が見つかりませんでした</translation>
<translation id="4996978546172906250">共有方法</translation>
<translation id="5014906230196386306">Cookie を消去しますか?</translation>
-<translation id="5039804452771397117">許可</translation>
+<translation id="5039804452771397117">許可する</translation>
<translation id="5048398596102334565">サイトによるモーション センサーへのアクセスを許可する(推奨)</translation>
<translation id="5050380848339752099">このサイトの情報がシークレット モードの外部のアプリに共有されようとしています。</translation>
<translation id="5063480226653192405">使用状況</translation>
@@ -191,7 +191,7 @@
<translation id="5596627076506792578">その他のオプション</translation>
<translation id="5649053991847567735">自動ダウンロード</translation>
<translation id="5668404140385795438">ウェブサイトのズーム防止リクエストを上書きします</translation>
-<translation id="5677928146339483299">ブロック中</translation>
+<translation id="5677928146339483299">ブロック</translation>
<translation id="5689516760719285838">位置情報</translation>
<translation id="5690795753582697420">Android の設定でカメラがオフになっています</translation>
<translation id="5719847187258001597"><ph name="ORIGIN" /> またはホーム画面の同アプリにより保存されたすべてのデータおよび Cookie が削除されます。</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
index 01fd59ae884..329503647dd 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
@@ -145,11 +145,11 @@
<translation id="4534723447064627427"><ph name="APP_NAME" /> браузері микрофонды пайдалануы үшін, <ph name="BEGIN_LINK" />Android параметрлерінде<ph name="END_LINK" /> оны да қосыңыз.</translation>
<translation id="4570913071927164677">Мәліметтер</translation>
<translation id="4645575059429386691">Ата-ана басқарады</translation>
-<translation id="4670064810192446073">Виртуалды шындық</translation>
+<translation id="4670064810192446073">Виртуалдық шындық</translation>
<translation id="4751476147751820511">Қозғалыс не жарық датчиктері</translation>
<translation id="4836046166855586901">Сайт сіз құрылғыңызды қашан белсенді пайдаланатыныңыз туралы білгісі келгенде, рұқсат сұралады.</translation>
<translation id="4883854917563148705">Басқарылатын параметрлер бастапқы күйге қайтарылмайды.</translation>
-<translation id="4887024562049524730">Cайттарға виртуалды шындық құрылғыңызды немесе деректерді пайдалануға рұқсат беру алдында сұрау (ұсынылады)</translation>
+<translation id="4887024562049524730">Cайттарға виртуалдық шындық құрылғыңызды немесе деректерді пайдалануға рұқсат беру алдында сұрау (ұсынылады)</translation>
<translation id="4962975101802056554">Құрылғыға арналған барлық рұқсаттардың күші жойылсын.</translation>
<translation id="497421865427891073">Алға өту</translation>
<translation id="4976702386844183910">Cоңғы кіру: <ph name="DATE" /></translation>
@@ -223,7 +223,7 @@
<translation id="6320088164292336938">Діріл</translation>
<translation id="6388207532828177975">Тазарту және қалпына келтіру</translation>
<translation id="6398765197997659313">Толық экраннан шығу</translation>
-<translation id="6439114592976064011">Сайттардың виртуалды шындық құрылғыңызды және деректеріңізді пайдалануына тыйым салу</translation>
+<translation id="6439114592976064011">Сайттардың виртуалдық шындық құрылғыңызды және деректеріңізді пайдалануына тыйым салу</translation>
<translation id="6447842834002726250">Cookie файлдары</translation>
<translation id="6527303717912515753">Бөлісу</translation>
<translation id="6545864417968258051">Bluetooth құрылғыларын іздеу</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
index 8a790f8feb0..383dd7f4b71 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
@@ -229,7 +229,7 @@
<translation id="6545864417968258051">블루투스 검색</translation>
<translation id="6552800053856095716">{PERMISSIONS_SUMMARY_BLOCKED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> 외 <ph name="NUM_MORE" />개 차단됨}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> 외 <ph name="NUM_MORE" />개 차단됨}}</translation>
<translation id="6554732001434021288">최근 방문: <ph name="NUM_DAYS" />일 전</translation>
-<translation id="6561560012278703671">눈에 띄지 않는 메시지 사용(방해가 되지 않도록 알림 메시지 차단)</translation>
+<translation id="6561560012278703671">조용한 메시지 사용(방해가 되지 않도록 알림 메시지 차단)</translation>
<translation id="6593061639179217415">데스크톱 사이트</translation>
<translation id="6608650720463149374"><ph name="GIGABYTES" />GB</translation>
<translation id="6612358246767739896">보호된 콘텐츠</translation>
@@ -251,7 +251,7 @@
<translation id="6992289844737586249">사이트에서 마이크를 사용하기 전에 확인(권장)</translation>
<translation id="7000754031042624318">Android 설정에서 사용 중지됨</translation>
<translation id="7016516562562142042">현재 검색엔진에 허용됨</translation>
-<translation id="702463548815491781">음성 안내 지원 또는 스위치 제어를 사용 중일 때 권장됩니다.</translation>
+<translation id="702463548815491781">TalkBack 또는 스위치 제어를 사용 중일 때 권장됩니다.</translation>
<translation id="7053983685419859001">차단</translation>
<translation id="7066151586745993502">{NUM_SELECTED,plural, =1{1개 선택됨}other{#개 선택됨}}</translation>
<translation id="7087918508125750058"><ph name="ITEM_COUNT" />개 선택됨. 화면 상단에서 옵션 선택 가능</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
index 219739a470d..4307a299f86 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
@@ -101,7 +101,7 @@
<translation id="3295602654194328831">Informatie verbergen</translation>
<translation id="3328801116991980348">Site-informatie</translation>
<translation id="3333961966071413176">Alle contacten</translation>
-<translation id="3386292677130313581">Vragen of je sites toegang wilt verlenen tot je locatie (aanbevolen)</translation>
+<translation id="3386292677130313581">Eerst vragen voordat sites toegang krijgen tot je locatie (aanbevolen)</translation>
<translation id="3538390592868664640">Voorkomen dat sites een 3D-kaart van je omgeving maken of de camerapositie volgen</translation>
<translation id="3551268116566418498">Incognitomodus verlaten?</translation>
<translation id="3586500876634962664">Camera- en microfoongebruik</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
index e4ca1189d2b..15dd2efdb68 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
@@ -195,7 +195,7 @@
<translation id="5689516760719285838">Геоданные</translation>
<translation id="5690795753582697420">Камера выключена в настройках Android.</translation>
<translation id="5719847187258001597">Будут удалены все данные и файлы cookie, которые сохранены сайтом <ph name="ORIGIN" /> или его приложением, добавленным на главный экран.</translation>
-<translation id="5771720122942595109">Заблокировано: <ph name="PERMISSION_1" /></translation>
+<translation id="5771720122942595109"><ph name="PERMISSION_1" />: заблокировано</translation>
<translation id="5804241973901381774">Разрешения</translation>
<translation id="5860033963881614850">ВЫКЛ</translation>
<translation id="5876056640971328065">Приостановить видео</translation>
@@ -297,7 +297,7 @@
<translation id="813082847718468539">Сведения о сайте</translation>
<translation id="8131740175452115882">Подтвердить</translation>
<translation id="8154912474061769055">Функции многих сайтов могут стать недоступными</translation>
-<translation id="8197286292360124385">Разрешено: <ph name="PERMISSION_1" /></translation>
+<translation id="8197286292360124385"><ph name="PERMISSION_1" />: разрешено</translation>
<translation id="8200772114523450471">Возобновить</translation>
<translation id="8206354486702514201">Этот параметр включен администратором.</translation>
<translation id="8211406090763984747">Безопасное подключение</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
index 7bbef23ae8c..571ee18c29c 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -5,7 +5,7 @@
<translation id="1044891598689252897">సైట్‌లు సాధారణ రీతిలో పని చేస్తాయి</translation>
<translation id="1124090076051167250">ఇది మీ హోమ్ స్క్రీన్‌పై ఉన్న, సైట్‌లు లేదా యాప్‌ల ద్వారా స్టోర్ చేయబడిన <ph name="DATASIZE" /> డేటా, కుక్కీలను క్లియర్ చేస్తుంది.</translation>
<translation id="1178581264944972037">పాజ్ చేయి</translation>
-<translation id="1181037720776840403">తీసివేయి</translation>
+<translation id="1181037720776840403">తీసివేయండి</translation>
<translation id="1201402288615127009">తరువాత</translation>
<translation id="1242008676835033345"><ph name="WEBSITE_URL" />లో పొందుపరచబడింది</translation>
<translation id="1272079795634619415">ఆపు</translation>
@@ -24,7 +24,7 @@
<translation id="1647582022260550163">మీరు ఖచ్చితంగా అనుమతులను రీసెట్ చేసి, అలాగే కుక్కీలు, సైట్ డేటాను క్లియర్ చేయాలనుకుంటున్నారా?</translation>
<translation id="1660204651932907780">ధ్వనిని ప్లే చేయగలిగేలా సైట్‌లను అనుమతిస్తుంది (సిఫార్సు చేయబడింది)</translation>
<translation id="1677097821151855053">మిమ్మల్ని గుర్తుంచుకోవడానికి కుక్కీలు, ఇతర సైట్ డేటా ఉపయోగించబడతాయి, ఉదాహరణకు మిమల్ని సైన్ ఇన్ చేయడం కోసం లేదా యాడ్‌లను వ్యక్తిగతీకరించడం కోసం. అన్ని సైట్‌లకు కుక్కీలను మేనేజ్ చేయడానికి, <ph name="BEGIN_LINK" />సెట్టింగ్‌ల<ph name="END_LINK" />ను చూడండి.</translation>
-<translation id="1688867105868176567">సైట్ డేటాని క్లియర్ చేయాలా?</translation>
+<translation id="1688867105868176567">సైట్ డేటాను క్లియర్ చేయాలా?</translation>
<translation id="169515064810179024">మోషన్ సెన్సార్‌లను యాక్సెస్ చేయనీయకుండా సైట్‌లను బ్లాక్ చేస్తుంది</translation>
<translation id="1717218214683051432">మోషన్ సెన్సార్‌లు</translation>
<translation id="1743802530341753419">ఏదైనా పరికరానికి కనెక్ట్ చేయగలిగేలా సైట్‌లను అనుమతించే ముందు మిమ్మల్ని అడుగుతుంది (సిఫార్సు చేయడమైనది)</translation>
@@ -47,7 +47,7 @@
<translation id="2146738493024040262">తక్షణ యాప్‌ను తెరువు</translation>
<translation id="2148716181193084225">ఈ రోజు</translation>
<translation id="2182457891543959921">మీ పరిసరాల 3D మ్యాప్‌ను రూపొందించడానికి లేదా కెమెరా పొజిషన్‌ను ట్రాక్ చేయడానికి సైట్‌లను అనుమతించే ముందు అడగాలి (సిఫార్సు చేయడమైనది)</translation>
-<translation id="2212565012507486665">కుక్కీలను అనుమతించు</translation>
+<translation id="2212565012507486665">కుక్కీలను అనుమతించండి</translation>
<translation id="2228071138934252756">మీ కెమెరాను యాక్సెస్ చేయడానికి <ph name="APP_NAME" />ని అనుమతించడానికి, <ph name="BEGIN_LINK" />Android సెట్టింగ్‌ల<ph name="END_LINK" />లో కూడా కెమెరాను ఆన్ చేయండి.</translation>
<translation id="2241634353105152135">ఒకసారి మాత్రమే</translation>
<translation id="2253414712144136228"><ph name="NAME_OF_LIST_ITEM" />‌ను తీసివేయండి</translation>
@@ -73,7 +73,7 @@
<translation id="2597457036804169544">సైట్‌లకు ముదురు రంగు రూపాన్ని వర్తింపజేయకండి</translation>
<translation id="2621115761605608342">నిర్దిష్ట సైట్ కోసం జావా స్క్రిప్ట్‌ను అనుమతిస్తుంది.</translation>
<translation id="2653659639078652383">సమర్పించు</translation>
-<translation id="2677748264148917807">నిష్క్రమించు</translation>
+<translation id="2677748264148917807">నిష్క్రమించండి</translation>
<translation id="2687403674020088961">అన్ని కుక్కీలను బ్లాక్ చేయండి (సిఫార్సు చేయడం లేదు)</translation>
<translation id="2704606927547763573">కాపీ చేయబడింది</translation>
<translation id="2717722538473713889">ఈమెయిల్‌ అడ్రస్‌లు</translation>
@@ -107,7 +107,7 @@
<translation id="3586500876634962664">కెమెరా, మైక్రోఫోన్‌ల ఉపయోగం</translation>
<translation id="358794129225322306">పలు ఫైళ్లను ఆటోమేటిక్‌గా డౌన్‌లోడ్ చేయడం కోసం సైట్‌ని అనుమతించండి.</translation>
<translation id="3594780231884063836">వీడియోను మ్యూట్ చేయండి</translation>
-<translation id="3596414637720633074">అజ్ఞాతంలో థర్డ్-పార్టీ కుక్కీలను బ్లాక్ చేయి</translation>
+<translation id="3596414637720633074">అజ్ఞాతంలో థర్డ్-పార్టీ కుక్కీలను బ్లాక్ చేయండి</translation>
<translation id="3600792891314830896">ధ్వనిని ప్లే చేసే సైట్‌లను మ్యూట్ చేస్తుంది</translation>
<translation id="3744111561329211289">బ్యాక్‌గ్రౌండ్ సింక్</translation>
<translation id="3763247130972274048">10సె దాటవేయడానికి వీడియోపై రెండుసార్లు ఎడమ లేదా కుడివైపు ట్యాప్ చేయండి</translation>
@@ -134,7 +134,7 @@
<translation id="4278390842282768270">అనుమతించబడింది</translation>
<translation id="429312253194641664">ఒక సైట్‌లో మీడియా ప్లే చేయబడుతోంది</translation>
<translation id="42981349822642051">విస్తరించు</translation>
-<translation id="4336434711095810371">మొత్తం డేటాను క్లియర్ చేయి</translation>
+<translation id="4336434711095810371">మొత్తం డేటాను క్లియర్ చేయండి</translation>
<translation id="4402755511846832236">మీరు ఈ పరికరాన్ని యాక్టివ్‌గా ఉపయోగిస్తున్నప్పుడు ఆ విషయాన్ని ఇతర సైట్‌లు తెలుసుకోకుండా బ్లాక్ చేయండి</translation>
<translation id="4428065317363009941">యాడ్ వ్యక్తిగతీకరణ</translation>
<translation id="4434045419905280838">పాప్-అప్‌లు మరియు మళ్లింపులు</translation>
@@ -156,7 +156,7 @@
<translation id="4994033804516042629">కాంటాక్ట్‌లు కనుగొనబడలేదు</translation>
<translation id="4996978546172906250">దీని ద్వారా భాగస్వామ్యం చే.</translation>
<translation id="5014906230196386306">కుక్కీలను క్లియర్ చేయాలా?</translation>
-<translation id="5039804452771397117">అనుమతించు</translation>
+<translation id="5039804452771397117">అనుమతించండి</translation>
<translation id="5048398596102334565">మోషన్ సెన్సార్‌లను యాక్సెస్ చేయడానికి సైట్‌లను అనుమతించండి (సిఫార్సు చేస్తున్నాము)</translation>
<translation id="5050380848339752099">ఈ సైట్ అజ్ఞాత మోడ్ వెలుపల ఉన్న ఒక యాప్‌తో సమాచారాన్ని షేర్ చేయబోతోంది.</translation>
<translation id="5063480226653192405">నిల్వ వినియోగం</translation>
@@ -222,7 +222,7 @@
<translation id="6295158916970320988">అన్ని సైట్‌లు</translation>
<translation id="6320088164292336938">వైబ్రేట్ చేయి</translation>
<translation id="6388207532828177975">క్లియర్ చేసి, రీసెట్ చేయి</translation>
-<translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించు</translation>
+<translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించండి</translation>
<translation id="6439114592976064011">మీ వర్చువల్ రియాలిటీ పరికరాన్ని, డేటాను ఉపయోగించనివ్వకుండా సైట్‌లను బ్లాక్ చేస్తుంది</translation>
<translation id="6447842834002726250">కుక్కీలు</translation>
<translation id="6527303717912515753">షేర్ చేయండి</translation>
@@ -234,7 +234,7 @@
<translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation>
<translation id="6612358246767739896">రక్షిత కంటెంట్</translation>
<translation id="662080504995468778">ఇందులోనే ఉంచు</translation>
-<translation id="6643016212128521049">క్లియర్ చేయి</translation>
+<translation id="6643016212128521049">క్లియర్ చేయండి</translation>
<translation id="6689172468748959065">ప్రొఫైల్ ఫోటోలు</translation>
<translation id="6697925417670533197">యాక్టివ్‌గా ఉన్న డౌన్‌లోడ్‌లు</translation>
<translation id="6722828510648505498">గుర్తింపు సర్వీస్‌ల నుండి సైన్-ఇన్ ప్రాంప్ట్‌లను బ్లాక్ చేయండి.</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
index 9686c58a934..602bf901bd4 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
@@ -126,7 +126,7 @@
<translation id="4008040567710660924">Дозволити файли cookie для конкретного сайту.</translation>
<translation id="4046123991198612571">Наступна композиція</translation>
<translation id="4149994727733219643">Спрощений перегляд веб-сторінок</translation>
-<translation id="4165986682804962316">Налаштування сайту</translation>
+<translation id="4165986682804962316">Налаштування сайтів</translation>
<translation id="4194328954146351878">Запитувати, перш ніж дозволяти сайтам переглядати й змінювати інформацію на пристроях NFC (рекомендовано)</translation>
<translation id="4200726100658658164">Відкрити налаштування доступу до моїх геоданих</translation>
<translation id="4226663524361240545">Коли надходитимуть сповіщення, пристрій може вібрувати</translation>
diff --git a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
index bc23e243569..bc65d38424c 100644
--- a/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
+++ b/chromium/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
@@ -139,7 +139,7 @@
<translation id="4428065317363009941">廣告個人化</translation>
<translation id="4434045419905280838">彈出式視窗與重新導向</translation>
<translation id="445467742685312942">允許網站播放受保護的內容</translation>
-<translation id="4468959413250150279">將特定網站設為靜音。</translation>
+<translation id="4468959413250150279">關閉特定網站的音訊。</translation>
<translation id="4479647676395637221">允許網站使用你的攝影機前,必須先詢問你 (建議)</translation>
<translation id="4505788138578415521">已展開網址</translation>
<translation id="4534723447064627427">如要允許 <ph name="APP_NAME" /> 存取裝置的麥克風,請一併在 <ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />中開啟麥克風。</translation>
diff --git a/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.cc b/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.cc
index 884f44d04ac..98b0f0fc7cb 100644
--- a/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.cc
+++ b/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.cc
@@ -203,6 +203,8 @@ bool ChromeCTPolicyEnforcer::IsLogOperatedByGoogle(
}
bool ChromeCTPolicyEnforcer::IsLogDataTimely() const {
+ if (ct_log_list_always_timely_for_testing_)
+ return true;
// We consider built-in information to be timely for 10 weeks.
return (clock_->Now() - log_list_date_).InDays() < 70 /* 10 weeks */;
}
diff --git a/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.h b/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.h
index c167e4e281c..e013db0dd71 100644
--- a/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.h
+++ b/chromium/components/certificate_transparency/chrome_ct_policy_enforcer.h
@@ -91,6 +91,10 @@ class COMPONENT_EXPORT(CERTIFICATE_TRANSPARENCY) ChromeCTPolicyEnforcer
return log_operator_history_;
}
+ void SetCTLogListAlwaysTimelyForTesting(bool always_timely) {
+ ct_log_list_always_timely_for_testing_ = always_timely;
+ }
+
void SetOperatorHistoryForTesting(
std::map<std::string, OperatorHistoryEntry> log_operator_history) {
log_operator_history_ = std::move(log_operator_history);
@@ -145,6 +149,10 @@ class COMPONENT_EXPORT(CERTIFICATE_TRANSPARENCY) ChromeCTPolicyEnforcer
// generated.
base::Time log_list_date_;
+ // If set, the CT log list will be considered timely regardless of its last
+ // update time.
+ bool ct_log_list_always_timely_for_testing_ = false;
+
// If set, this log ID will be considered a valid, Google operated log.
// Calling UpdateCTLogList clears this value if set.
absl::optional<std::string> valid_google_log_for_testing_;
diff --git a/chromium/components/content_settings/browser/ui/cookie_controls_controller.h b/chromium/components/content_settings/browser/ui/cookie_controls_controller.h
index 35b0be837f0..715727366fd 100644
--- a/chromium/components/content_settings/browser/ui/cookie_controls_controller.h
+++ b/chromium/components/content_settings/browser/ui/cookie_controls_controller.h
@@ -7,6 +7,7 @@
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
+#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "base/scoped_observation.h"
#include "components/content_settings/browser/page_specific_content_settings.h"
@@ -25,7 +26,9 @@ class CookieSettings;
class CookieControlsView;
// Handles the tab specific state for cookie controls.
-class CookieControlsController : content_settings::CookieSettings::Observer {
+class CookieControlsController
+ : content_settings::CookieSettings::Observer,
+ public base::SupportsWeakPtr<CookieControlsController> {
public:
CookieControlsController(
scoped_refptr<content_settings::CookieSettings> cookie_settings,
diff --git a/chromium/components/download/content/internal/download_driver_impl.cc b/chromium/components/download/content/internal/download_driver_impl.cc
index 2b2da55b06e..b207ce5c6bd 100644
--- a/chromium/components/download/content/internal/download_driver_impl.cc
+++ b/chromium/components/download/content/internal/download_driver_impl.cc
@@ -229,6 +229,8 @@ void DownloadDriverImpl::Start(
download_url_params->set_isolation_info(
request_params.isolation_info.value());
}
+ download_url_params->set_update_first_party_url_on_redirect(
+ request_params.update_first_party_url_on_redirect);
download_manager_coordinator_->DownloadUrl(std::move(download_url_params));
}
diff --git a/chromium/components/download/internal/common/download_utils.cc b/chromium/components/download/internal/common/download_utils.cc
index 11f52486132..454326720b5 100644
--- a/chromium/components/download/internal/common/download_utils.cc
+++ b/chromium/components/download/internal/common/download_utils.cc
@@ -386,8 +386,10 @@ std::unique_ptr<network::ResourceRequest> CreateResourceRequest(
// cross-site URL has been visited before.
url::Origin origin = url::Origin::Create(params->url());
request->trusted_params->isolation_info = net::IsolationInfo::Create(
- net::IsolationInfo::RequestType::kMainFrame, origin, origin,
- net::SiteForCookies::FromOrigin(origin));
+ params->update_first_party_url_on_redirect()
+ ? net::IsolationInfo::RequestType::kMainFrame
+ : net::IsolationInfo::RequestType::kOther,
+ origin, origin, net::SiteForCookies::FromOrigin(origin));
request->site_for_cookies = net::SiteForCookies::FromUrl(params->url());
}
@@ -395,7 +397,8 @@ std::unique_ptr<network::ResourceRequest> CreateResourceRequest(
request->referrer = params->referrer();
request->referrer_policy = params->referrer_policy();
request->is_outermost_main_frame = true;
- request->update_first_party_url_on_redirect = true;
+ request->update_first_party_url_on_redirect =
+ params->update_first_party_url_on_redirect();
// Downloads should be treated as navigations from Fetch spec perspective.
// See also:
diff --git a/chromium/components/download/public/background_service/download_params.h b/chromium/components/download/public/background_service/download_params.h
index 8b911276e75..a976d470094 100644
--- a/chromium/components/download/public/background_service/download_params.h
+++ b/chromium/components/download/public/background_service/download_params.h
@@ -126,6 +126,12 @@ struct RequestParams {
// be invalidate during download resumption in new browser session. Not
// supported on iOS.
absl::optional<net::IsolationInfo> isolation_info;
+
+ // First-party URL redirect policy: During server redirects, whether the
+ // first-party URL for cookies will need to be changed. Download is normally
+ // considered a main frame navigation. However, this is not true for
+ // background fetch.
+ bool update_first_party_url_on_redirect = true;
};
// The parameters that describe a download request made to the DownloadService.
diff --git a/chromium/components/download/public/common/download_url_parameters.cc b/chromium/components/download/public/common/download_url_parameters.cc
index 3dec7148d86..25ea6f13e0d 100644
--- a/chromium/components/download/public/common/download_url_parameters.cc
+++ b/chromium/components/download/public/common/download_url_parameters.cc
@@ -34,7 +34,8 @@ DownloadUrlParameters::DownloadUrlParameters(
traffic_annotation_(traffic_annotation),
download_source_(DownloadSource::UNKNOWN),
require_safety_checks_(true),
- has_user_gesture_(false) {}
+ has_user_gesture_(false),
+ update_first_party_url_on_redirect_(true) {}
DownloadUrlParameters::~DownloadUrlParameters() = default;
diff --git a/chromium/components/download/public/common/download_url_parameters.h b/chromium/components/download/public/common/download_url_parameters.h
index ba0a03cb035..61eb9af8a00 100644
--- a/chromium/components/download/public/common/download_url_parameters.h
+++ b/chromium/components/download/public/common/download_url_parameters.h
@@ -279,6 +279,11 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadUrlParameters {
has_user_gesture_ = has_user_gesture;
}
+ void set_update_first_party_url_on_redirect(
+ bool update_first_party_url_on_redirect) {
+ update_first_party_url_on_redirect_ = update_first_party_url_on_redirect;
+ }
+
OnStartedCallback& callback() { return callback_; }
bool content_initiated() const { return content_initiated_; }
const std::string& last_modified() const { return last_modified_; }
@@ -335,6 +340,9 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadUrlParameters {
return isolation_info_;
}
bool has_user_gesture() const { return has_user_gesture_; }
+ bool update_first_party_url_on_redirect() const {
+ return update_first_party_url_on_redirect_;
+ }
// STATE CHANGING: All save_info_ sub-objects will be in an indeterminate
// state following this call.
@@ -383,6 +391,7 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadUrlParameters {
bool require_safety_checks_;
absl::optional<net::IsolationInfo> isolation_info_;
bool has_user_gesture_;
+ bool update_first_party_url_on_redirect_;
};
} // namespace download
diff --git a/chromium/components/embedder_support/user_agent_utils.cc b/chromium/components/embedder_support/user_agent_utils.cc
index 16bc7f1bc77..b82c1c48630 100644
--- a/chromium/components/embedder_support/user_agent_utils.cc
+++ b/chromium/components/embedder_support/user_agent_utils.cc
@@ -510,11 +510,21 @@ blink::UserAgentBrandVersion GetGreasedUserAgentBrandVersion(
output_version_type);
}
}
-// TODO(crbug.com/1103047): This can be removed/re-refactored once we use
-// "macOS" by default
+
std::string GetPlatformForUAMetadata() {
#if BUILDFLAG(IS_MAC)
+ // TODO(crbug.com/1103047): This can be removed/re-refactored once we use
+ // "macOS" by default
return "macOS";
+#elif BUILDFLAG(IS_CHROMEOS)
+ // TODO(crbug.com/1334198): The branding change to remove the space caused a
+ // regression that's solved here. Ideally, we would just use the new OS name
+ // without the space here too, but that needs a launch plan.
+# if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ return "Chrome OS";
+# else
+ return "Chromium OS";
+# endif
#else
return version_info::GetOSType();
#endif
diff --git a/chromium/components/embedder_support/user_agent_utils_unittest.cc b/chromium/components/embedder_support/user_agent_utils_unittest.cc
index 1b520c2ce36..adc9d623e66 100644
--- a/chromium/components/embedder_support/user_agent_utils_unittest.cc
+++ b/chromium/components/embedder_support/user_agent_utils_unittest.cc
@@ -15,6 +15,7 @@
#include "base/test/scoped_command_line.h"
#include "base/test/scoped_feature_list.h"
#include "base/version.h"
+#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "components/embedder_support/pref_names.h"
#include "components/prefs/pref_registry_simple.h"
@@ -603,12 +604,35 @@ TEST_F(UserAgentUtilsTest, UserAgentMetadata) {
#endif
// This makes sure no extra information is added to the platform version.
EXPECT_EQ(metadata.platform_version.find(";"), std::string::npos);
- // TODO(crbug.com/1103047): This can be removed/re-refactored once we use
- // "macOS" by default
-#if BUILDFLAG(IS_MAC)
+ // If you're here because your change to GetOSType broke this test, it likely
+ // means that GetPlatformForUAMetadata needs a new special case to prevent
+ // breaking client hints. Check with the code owners for further guidance.
+#if BUILDFLAG(IS_WIN)
+ EXPECT_EQ(metadata.platform, "Windows");
+#elif BUILDFLAG(IS_IOS)
+ EXPECT_EQ(metadata.platform, "iOS");
+#elif BUILDFLAG(IS_MAC)
EXPECT_EQ(metadata.platform, "macOS");
+#elif BUILDFLAG(IS_CHROMEOS)
+# if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ EXPECT_EQ(metadata.platform, "Chrome OS");
+# else
+ EXPECT_EQ(metadata.platform, "Chromium OS");
+# endif
+#elif BUILDFLAG(IS_ANDROID)
+ EXPECT_EQ(metadata.platform, "Android");
+#elif BUILDFLAG(IS_LINUX)
+ EXPECT_EQ(metadata.platform, "Linux");
+#elif BUILDFLAG(IS_FREEBSD)
+ EXPECT_EQ(metadata.platform, "FreeBSD");
+#elif BUILDFLAG(IS_OPENBSD)
+ EXPECT_EQ(metadata.platform, "OpenBSD");
+#elif BUILDFLAG(IS_SOLARIS)
+ EXPECT_EQ(metadata.platform, "Solaris");
+#elif BUILDFLAG(IS_FUCHSIA)
+ EXPECT_EQ(metadata.platform, "Fuchsia");
#else
- EXPECT_EQ(metadata.platform, version_info::GetOSType());
+ EXPECT_EQ(metadata.platform, "Unknown");
#endif
EXPECT_EQ(metadata.architecture, content::GetLowEntropyCpuArchitecture());
EXPECT_EQ(metadata.model, content::BuildModelInfo());
diff --git a/chromium/components/javascript_dialogs/android/translations/javascript_dialogs_android_strings_te.xtb b/chromium/components/javascript_dialogs/android/translations/javascript_dialogs_android_strings_te.xtb
index 3d8b5540255..7785559c06e 100644
--- a/chromium/components/javascript_dialogs/android/translations/javascript_dialogs_android_strings_te.xtb
+++ b/chromium/components/javascript_dialogs/android/translations/javascript_dialogs_android_strings_te.xtb
@@ -2,5 +2,5 @@
<!DOCTYPE translationbundle>
<translationbundle lang="te">
<translation id="1623104350909869708">ఈ పేజీని అదనపు డైలాగ్‌లు సృష్టించనీయకుండా నిరోధించు</translation>
-<translation id="2677748264148917807">నిష్క్రమించు</translation>
+<translation id="2677748264148917807">నిష్క్రమించండి</translation>
</translationbundle> \ No newline at end of file
diff --git a/chromium/components/os_crypt/key_storage_keyring_unittest.cc b/chromium/components/os_crypt/key_storage_keyring_unittest.cc
index ae92edbb1f9..071a1bd5185 100644
--- a/chromium/components/os_crypt/key_storage_keyring_unittest.cc
+++ b/chromium/components/os_crypt/key_storage_keyring_unittest.cc
@@ -130,7 +130,8 @@ class GnomeKeyringTest : public testing::Test {
};
GnomeKeyringTest::GnomeKeyringTest()
- : task_runner_(new base::TestSimpleTaskRunner()), keyring_(task_runner_, "chromium") {
+ : task_runner_(new base::TestSimpleTaskRunner()),
+ keyring_(task_runner_, kApplicationName) {
MockGnomeKeyringLoader::ResetForOSCrypt();
}
diff --git a/chromium/components/services/quarantine/quarantine_mac_unittest.mm b/chromium/components/services/quarantine/quarantine_mac_unittest.mm
index c7358a3ddff..36572f572f6 100644
--- a/chromium/components/services/quarantine/quarantine_mac_unittest.mm
+++ b/chromium/components/services/quarantine/quarantine_mac_unittest.mm
@@ -68,7 +68,8 @@ class QuarantineMacTest : public testing::Test {
base::scoped_nsobject<NSURL> file_url_;
};
-TEST_F(QuarantineMacTest, CheckMetadataSetCorrectly) {
+// TODO(crbug.com/1334495): Enable this test.
+TEST_F(QuarantineMacTest, DISABLED_CheckMetadataSetCorrectly) {
QuarantineFile(
test_file_, source_url_, referrer_url_, "",
base::BindOnce(&CheckQuarantineResult, QuarantineFileResult::OK));
@@ -76,7 +77,8 @@ TEST_F(QuarantineMacTest, CheckMetadataSetCorrectly) {
EXPECT_TRUE(IsFileQuarantined(test_file_, source_url_, referrer_url_));
}
-TEST_F(QuarantineMacTest, SetMetadataMultipleTimes) {
+// TODO(crbug.com/1334495): Enable this test.
+TEST_F(QuarantineMacTest, DISABLED_SetMetadataMultipleTimes) {
GURL dummy_url("http://www.dummy.example.com");
QuarantineFile(
test_file_, source_url_, referrer_url_, "",
@@ -97,7 +99,8 @@ TEST_F(QuarantineMacTest, IsFileQuarantined_NoAnnotationsOnFile) {
EXPECT_FALSE(IsFileQuarantined(test_file_, GURL(), GURL()));
}
-TEST_F(QuarantineMacTest, IsFileQuarantined_SourceUrlOnly) {
+// TODO(crbug.com/1334495): Enable this test.
+TEST_F(QuarantineMacTest, DISABLED_IsFileQuarantined_SourceUrlOnly) {
QuarantineFile(
test_file_, source_url_, GURL(), std::string(),
base::BindOnce(&CheckQuarantineResult, QuarantineFileResult::OK));
@@ -108,7 +111,8 @@ TEST_F(QuarantineMacTest, IsFileQuarantined_SourceUrlOnly) {
EXPECT_FALSE(IsFileQuarantined(test_file_, referrer_url_, GURL()));
}
-TEST_F(QuarantineMacTest, IsFileQuarantined_FullMetadata) {
+// TODO(crbug.com/1334495): Enable this test.
+TEST_F(QuarantineMacTest, DISABLED_IsFileQuarantined_FullMetadata) {
QuarantineFile(
test_file_, source_url_, referrer_url_, std::string(),
base::BindOnce(&CheckQuarantineResult, QuarantineFileResult::OK));
@@ -121,7 +125,8 @@ TEST_F(QuarantineMacTest, IsFileQuarantined_FullMetadata) {
EXPECT_FALSE(IsFileQuarantined(test_file_, referrer_url_, referrer_url_));
}
-TEST_F(QuarantineMacTest, IsFileQuarantined_Sanitize) {
+// TODO(crbug.com/1334495): Enable this test.
+TEST_F(QuarantineMacTest, DISABLED_IsFileQuarantined_Sanitize) {
GURL host_url{"https://user:pass@example.com/foo/bar?x#y"};
GURL host_url_clean{"https://example.com/foo/bar?x#y"};
GURL referrer_url{"https://user:pass@example.com/foo/index?x#y"};
diff --git a/chromium/components/signin/core/browser/account_reconcilor.cc b/chromium/components/signin/core/browser/account_reconcilor.cc
index c93bf597888..66e07043701 100644
--- a/chromium/components/signin/core/browser/account_reconcilor.cc
+++ b/chromium/components/signin/core/browser/account_reconcilor.cc
@@ -710,7 +710,7 @@ void AccountReconcilor::ScheduleStartReconcileIfChromeAccountsChanged() {
SetState(AccountReconcilorState::ACCOUNT_RECONCILOR_SCHEDULED);
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&AccountReconcilor::StartReconcile,
- base::Unretained(this),
+ weak_factory_.GetWeakPtr(),
Trigger::kTokenChangeDuringReconcile));
} else if (error_during_last_reconcile_.state() ==
GoogleServiceAuthError::NONE) {
diff --git a/chromium/components/strings/components_chromium_strings_te.xtb b/chromium/components/strings/components_chromium_strings_te.xtb
index b05ca65ba24..ad7d8feda0b 100644
--- a/chromium/components/strings/components_chromium_strings_te.xtb
+++ b/chromium/components/strings/components_chromium_strings_te.xtb
@@ -14,7 +14,7 @@
<ph name="PROXIES_TITLE" />
&gt;
LAN సెట్టింగ్‌లకు వెళ్లండి
- మరియు "మీ LAN కోసం ప్రాక్సీ సర్వర్‌ను ఉపయోగించండి" తనిఖీ పెట్టె ఎంపికను తీసివేయండి.</translation>
+ మరియు "మీ LAN కోసం ప్రాక్సీ సర్వర్‌ను ఉపయోగించండి" చెక్ బాక్స్‌ ఎంపికను తీసివేయండి.</translation>
<translation id="4622039161600275920">Chromium ద్వారా ఈ పేజీ బ్లాక్ చేయబడింది</translation>
<translation id="48558539577516920">మీ ఫైర్‌వాల్ లేదా యాంటీవైరస్ సెట్టింగ్‌ల్లో నెట్‌వర్క్‌ను యాక్సెస్ చేయడానికి
Chromiumను అనుమతించండి.</translation>
diff --git a/chromium/components/strings/components_google_chrome_strings_fr.xtb b/chromium/components/strings/components_google_chrome_strings_fr.xtb
index 885d0a5c985..f2b1c27b533 100644
--- a/chromium/components/strings/components_google_chrome_strings_fr.xtb
+++ b/chromium/components/strings/components_google_chrome_strings_fr.xtb
@@ -41,5 +41,5 @@
<translation id="8187289872471304532">Sélectionnez
Applications &gt; Préférences système &gt; Réseau &gt; Avancé &gt; Proxys
et désélectionnez les serveurs proxy sélectionnés.</translation>
-<translation id="864712724203364111">La configuration initiale de Chrome OS Flex n'est pas terminée.</translation>
+<translation id="864712724203364111">La configuration initiale de ChromeOS Flex n'est pas terminée.</translation>
</translationbundle> \ No newline at end of file
diff --git a/chromium/components/strings/components_strings_am.xtb b/chromium/components/strings/components_strings_am.xtb
index 53283e0ca4d..2a5f7b18e75 100644
--- a/chromium/components/strings/components_strings_am.xtb
+++ b/chromium/components/strings/components_strings_am.xtb
@@ -268,7 +268,7 @@
<translation id="1620510694547887537">ካሜራ</translation>
<translation id="1622571349153632031">የተክል-በል ምግብ</translation>
<translation id="1623104350909869708">ይህ ገጽ ተጨማሪ መገናኛዎችን እንዳይፈጥር አግድ</translation>
-<translation id="16338877384480380">ስነ-ሕንጻ-B</translation>
+<translation id="16338877384480380">ስነ-ህንፃ-B</translation>
<translation id="1634828734222219955">ጠቅላላ</translation>
<translation id="163669211644121865">የግብር ዝግጅት እና ዕቅድ</translation>
<translation id="1638780421120290329">ካርድን ማስቀመጥ አይቻልም</translation>
@@ -425,7 +425,7 @@
<translation id="2071692954027939183">ማሳወቂያዎች ብዙውን ጊዜ ስለማይፈቅዱሏቸው በራስ-ሰር ታግደዋል</translation>
<translation id="2072275792380684364">ፋሽን እና ስታይል</translation>
<translation id="2079545284768500474">ቀልብስ</translation>
-<translation id="20817612488360358">የስርዓት ተኪ ቅንብሮች ስራ ላይ እንዲውሉ ተቀናብረዋል ግን ግልጽ የሆነ የተኪ ውቅርም ተገልጿል።</translation>
+<translation id="20817612488360358">የስርዓት ተኪ ቅንብሮች ስራ ላይ እንዲውሉ ተቀናብረዋል ግን ግልፅ የሆነ የተኪ ውቅርም ተገልጿል።</translation>
<translation id="2082238445998314030">ውጤት <ph name="RESULT_NUMBER" /> ከ<ph name="TOTAL_RESULTS" /></translation>
<translation id="2085876078937250610">አስቀምጥ…</translation>
<translation id="2088086323192747268">የአስምር አዝራርን ያቀናብሩ፣ በChrome ቅንብሮች ውስጥ ምን መረጃ እንደሚያሰምሩ ለማቀናበር አስገባን ይጫኑ</translation>
@@ -553,7 +553,7 @@
<translation id="2448295565072560657">እርስዎ በመለያ ገብተው ሳለ ተቀጥላዎች ከዚህ መሣሪያ ጋር ተያይዘዋል</translation>
<translation id="2450021089947420533">ጉዞዎች</translation>
<translation id="2463739503403862330">ሙላ</translation>
-<translation id="2465402087343596252">ስነ-ሕንጻ-E</translation>
+<translation id="2465402087343596252">ስነ-ህንፃ-E</translation>
<translation id="2465655957518002998">የማድረሻ ዘዴ ይምረጡ</translation>
<translation id="2465688316154986572">ስቴፕለር ምታ</translation>
<translation id="2465914000209955735">በChrome ውስጥ ያወረዷቸውን ፋይሎች ያቀናብሩ</translation>
@@ -1267,7 +1267,7 @@
<translation id="4433642172056592619">ችላ ተብሏል ምክንያቱም ተጠቃሚው ከማሽኑ አስተዳደር ጋር አጋር ስላልሆነ ወይም ማሽኑ ስለማይተዳደረ።</translation>
<translation id="4434045419905280838">ብቅ-ባዮች እና አቅጣጫ ማዞሮች</translation>
<translation id="4435702339979719576">የፖስታ ካርድ)</translation>
-<translation id="443673843213245140">የተኪ መጠቀም ተሰናክሏል ግን ግልጽ የሆነ የተኪ ውቅር ተገልጿል።</translation>
+<translation id="443673843213245140">የተኪ መጠቀም ተሰናክሏል ግን ግልፅ የሆነ የተኪ ውቅር ተገልጿል።</translation>
<translation id="4441832193888514600">መመሪያው ሊዋቀር የሚችለው እንደ ደመና ተጠቃሚ መመሪያ ብቻ ስለሆነ ችላ ተብሏል።</translation>
<translation id="4450893287417543264">ዳግም አታሳይ</translation>
<translation id="4451135742916150903">ከHID መሣሪያዎች ጋር ለመገናኘት መጠየቅ ይችላል</translation>
@@ -1286,7 +1286,7 @@
<translation id="4492519888999857993">እነዚህ ባህሪዎች በነባሪነት ተሰናክሏል። በወደፊት የChrome ስሪቶች ላይ አይገኙም።</translation>
<translation id="4493480324863638523">ልክ ያልሆነ ዩአርኤል። ደረጃውን የጠበቀ ቅርጸ አጻጻፍ ያለው ዩአርኤል መሆን አለበት፣ ለምሳሌ፦ http://example.com ወይም https://example.com.</translation>
<translation id="4500587658229086076">ደህንነቱ ያልተጠበቀ ይዘት</translation>
-<translation id="4503882053543859973">ስነ-ሕንጻ-D</translation>
+<translation id="4503882053543859973">ስነ-ህንፃ-D</translation>
<translation id="4506176782989081258">የማረጋገጥ ስህተት፦ <ph name="VALIDATION_ERROR" /></translation>
<translation id="4506599922270137252">የሥርዓት አስተዳዳሪውን ማነጋገር</translation>
<translation id="450710068430902550">ከአስተዳዳሪ ጋር ማጋራት</translation>
@@ -1348,7 +1348,7 @@
<translation id="467809019005607715">Google ስላይዶች</translation>
<translation id="4682496302933121474">ገጽ ይተርጎም?</translation>
<translation id="468314109939257734">የእርስዎን ምናባዊ ካርድ ቁጥር ይመልከቱ</translation>
-<translation id="4691835149146451662">ስነ-ሕንጻ-A (የደብዳቤ ፖስታ)</translation>
+<translation id="4691835149146451662">ስነ-ህንፃ-A (የደብዳቤ ፖስታ)</translation>
<translation id="4692623383562244444">የፍለጋ ፕሮግራሞች</translation>
<translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation>
<translation id="4702504834785592287">ጎን</translation>
@@ -1692,7 +1692,7 @@
<translation id="5598944008576757369">የመክፈያ ዘዴ ይምረጡ</translation>
<translation id="560412284261940334">አስተዳደር አይደገፍም</translation>
<translation id="5605670050355397069">ሌጀር</translation>
-<translation id="5607240918979444548">ስነ-ሕንጻ-C</translation>
+<translation id="5607240918979444548">ስነ-ህንፃ-C</translation>
<translation id="5610142619324316209">ግንኙነቱን መፈተሽ</translation>
<translation id="5610807607761827392">ካርዶችን እና አድራሻዎችን በ<ph name="BEGIN_LINK" />ቅንብሮች<ph name="END_LINK" /> ውስጥ ማቀናበር ይችላሉ።</translation>
<translation id="561165882404867731">በGoogle ትርጉም አማካኝነት ይህን ገጽ ይተርጉሙ</translation>
diff --git a/chromium/components/strings/components_strings_be.xtb b/chromium/components/strings/components_strings_be.xtb
index 6d9bf8dd7e9..1c8a73f5695 100644
--- a/chromium/components/strings/components_strings_be.xtb
+++ b/chromium/components/strings/components_strings_be.xtb
@@ -621,7 +621,7 @@
<translation id="2601150049980261779">Фільмы пра каханне</translation>
<translation id="2604589665489080024">Поп-музыка</translation>
<translation id="2609632851001447353">Варыянты</translation>
-<translation id="2610561535971892504">Капіруецца адным дотыкам</translation>
+<translation id="2610561535971892504">Капіруецца адным націсканнем</translation>
<translation id="2617988307566202237">Chrome <ph name="BEGIN_EMPHASIS" />не будзе захоўваць<ph name="END_EMPHASIS" /> наступную інфармацыю:
<ph name="BEGIN_LIST" />
<ph name="LIST_ITEM" />вашу гісторыю прагляду сайтаў;
diff --git a/chromium/components/strings/components_strings_bn.xtb b/chromium/components/strings/components_strings_bn.xtb
index ee012486baf..1eccf003df9 100644
--- a/chromium/components/strings/components_strings_bn.xtb
+++ b/chromium/components/strings/components_strings_bn.xtb
@@ -2550,7 +2550,7 @@
<translation id="8009225694047762179">পাসওয়ার্ড পরিচালনা করুন</translation>
<translation id="8012116502927253373">{NUM_CARDS,plural, =1{এই কার্ড ও সেটির বিলিং ঠিকানা সেভ করা হবে। <ph name="USER_EMAIL" />-এ সাইন-ইন করে থাকা অবস্থায় আপনি সেটি ব্যবহার করতে পারবেন।}one{এই কার্ডগুলি ও সেগুলির বিলিং ঠিকানা সেভ করা হবে। <ph name="USER_EMAIL" />-এ সাইন-ইন করে থাকা অবস্থায় আপনি সেগুলি ব্যবহার করতে পারবেন।}other{এই কার্ডগুলি ও সেগুলির বিলিং ঠিকানা সেভ করা হবে। <ph name="USER_EMAIL" />-এ সাইন-ইন করে থাকা অবস্থায় আপনি সেগুলি ব্যবহার করতে পারবেন।}}</translation>
<translation id="8025119109950072390">Attackers on this site may trick you into doing something dangerous like installing software or revealing your personal information (for example, passwords, phone numbers, or credit cards).</translation>
-<translation id="8026334261755873520">ব্রাউজ করা ডেটা সাফ করুন</translation>
+<translation id="8026334261755873520">ব্রাউজিং ডেটা সাফ করুন</translation>
<translation id="8027077570865220386">ট্রে ১৫</translation>
<translation id="8028698320761417183"><ph name="CREATE_GOOGLE_FORM_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Forms-এ চটপট নতুন ফর্ম তৈরি করতে প্রথমে Tab, তারপরে Enter প্রেস করুন</translation>
<translation id="8028960012888758725">কাজের পর ট্রিম করুন</translation>
diff --git a/chromium/components/strings/components_strings_bs.xtb b/chromium/components/strings/components_strings_bs.xtb
index 58f9812b7b3..9faa55d99f8 100644
--- a/chromium/components/strings/components_strings_bs.xtb
+++ b/chromium/components/strings/components_strings_bs.xtb
@@ -769,7 +769,7 @@ To će u suprotnom biti blokirano prema vašim postavkama privatnosti. Ovo će o
<translation id="3029752078111257850">Vijesti iz svijeta</translation>
<translation id="3037605927509011580">Oh, ne!</translation>
<translation id="3041612393474885105">Informacije o potvrdi</translation>
-<translation id="305162504811187366">Historija Chrome udaljenog računara, uključujući vremenske oznake, host računare i ID-jeve sesija klijenta</translation>
+<translation id="305162504811187366">Historija Chrome udaljenog računara, uključujući vremenske oznake, host računare i ID-ove sesija klijenta</translation>
<translation id="3060227939791841287">C9 (omotnica)</translation>
<translation id="3061707000357573562">Usluga za zakrpe</translation>
<translation id="306573536155379004">Igra je počela.</translation>
diff --git a/chromium/components/strings/components_strings_ca.xtb b/chromium/components/strings/components_strings_ca.xtb
index 3507b0ec529..25f563299d9 100644
--- a/chromium/components/strings/components_strings_ca.xtb
+++ b/chromium/components/strings/components_strings_ca.xtb
@@ -832,7 +832,7 @@ En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà q
<translation id="3240791268468473923">S'ha obert el full de credencials no coincidents de credencials de pagament segur</translation>
<translation id="324180406144491771">Els enllaços de "<ph name="HOST_NAME" />" estan bloquejats</translation>
<translation id="3248611290851046188">Aquest lloc web defineix interessos que altres llocs web poden utilitzar per mostrar-te anuncis. També obté els teus interessos de Chrome per mostrar-te anuncis més rellevants.</translation>
-<translation id="3249151924975132674">Préstecs estudiantils i finançament d'estudis universitaris</translation>
+<translation id="3249151924975132674">Crèdits d'estudi i finançament universitari</translation>
<translation id="3249845759089040423">Atrevida</translation>
<translation id="3250640885957938546">Publicitat i màrqueting</translation>
<translation id="3252266817569339921">Francès</translation>
@@ -1595,7 +1595,7 @@ En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà q
<translation id="5307166000025436103">Vàlid</translation>
<translation id="5308380583665731573">Connecta</translation>
<translation id="5308689395849655368">La creació d'informes de bloqueig està desactivada.</translation>
-<translation id="5310178588836736698">Vehicles 4x4</translation>
+<translation id="5310178588836736698">Vehicles tot terreny</translation>
<translation id="5314967030527622926">Creador de fullets</translation>
<translation id="5316812925700871227">Gira en sentit antihorari</translation>
<translation id="5317780077021120954">Desa</translation>
@@ -1998,7 +1998,7 @@ En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà q
<translation id="6521745193039995384">No activa</translation>
<translation id="6529173248185917884">Setè corró</translation>
<translation id="6529602333819889595">&amp;Refés la supressió</translation>
-<translation id="6535751101619004418">Divises i canvi de moneda estrangera</translation>
+<translation id="6535751101619004418">Monedes i canvi de divisa</translation>
<translation id="6540534463546766581">Fons d'inversió</translation>
<translation id="6545864417968258051">Cerca de dispositius Bluetooth</translation>
<translation id="6547208576736763147">Encunyació doble a l'esquerra</translation>
@@ -2557,7 +2557,7 @@ Detalls addicionals:
<translation id="8052898407431791827">S'ha copiat al porta-retalls</translation>
<translation id="8055534648776115597">Formació professional i continuada</translation>
<translation id="8057711352706143257"><ph name="SOFTWARE_NAME" /> no s'ha configurat correctament. Normalment el problema se soluciona desinstal·lant <ph name="SOFTWARE_NAME" />. <ph name="FURTHER_EXPLANATION" /></translation>
-<translation id="8058009102480785916">Producció d'aliments</translation>
+<translation id="8058009102480785916">Producció alimentària</translation>
<translation id="8066955247577885446">S'ha produït un error.</translation>
<translation id="8067872629359326442">Acabes d'introduir la contrasenya en un lloc web enganyós. Chromium pot ajudar-te. Per canviar la contrasenya i notificar a Google que el compte pot estar en perill, fes clic a Protegeix el compte.</translation>
<translation id="8070439594494267500">Icona de l'aplicació</translation>
@@ -2912,7 +2912,7 @@ Detalls addicionals:
<translation id="9117930699067497412">Fresca</translation>
<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />: prem Tab i després Retorn per reprendre el recorregut i veure activitat rellevant a l'historial de Chrome</translation>
<translation id="9119042192571987207">Penjat</translation>
-<translation id="9122954576417194280">Comerç de mercaderies i futurs</translation>
+<translation id="9122954576417194280">Comerç de matèries primeres i futurs</translation>
<translation id="9128016270925453879">Les polítiques s'han carregat</translation>
<translation id="9128870381267983090">Connecta't a la xarxa</translation>
<translation id="9131119348384879525">Vols capturar el contingut confidencial?</translation>
diff --git a/chromium/components/strings/components_strings_da.xtb b/chromium/components/strings/components_strings_da.xtb
index 9756551c598..cad2336fb29 100644
--- a/chromium/components/strings/components_strings_da.xtb
+++ b/chromium/components/strings/components_strings_da.xtb
@@ -78,7 +78,7 @@ Ellers vil det blive blokeret af dine privatlivsindstillinger. Det giver det ind
<translation id="1178581264944972037">Pause</translation>
<translation id="1181037720776840403">Fjern</translation>
<translation id="1186201132766001848">Tjek adgangskoder</translation>
-<translation id="1195558154361252544">Notifikationer blokeres automatisk for alle website med undtagelse dem, du har givet tilladelse til</translation>
+<translation id="1195558154361252544">Notifikationer blokeres automatisk for alle websites med undtagelse af dem, du har givet tilladelse til</translation>
<translation id="1197088940767939838">Orange</translation>
<translation id="1201402288615127009">Næste</translation>
<translation id="1201895884277373915">Mere fra dette website</translation>
@@ -899,7 +899,7 @@ Ellers vil det blive blokeret af dine privatlivsindstillinger. Det giver det ind
<translation id="3395827396354264108">Afhentningsmetode</translation>
<translation id="3399952811970034796">Leveringsadresse</translation>
<translation id="3402261774528610252">Den forbindelse, der blev brugt til at indlæse dette website, benyttede TSL 1.0 eller TLS 1.1, som er blevet udfaset, og som bliver deaktiveret inden for den nærmeste fremtid. Når deaktiveringen har fundet sted, kan brugerne ikke indlæse dette website. Serveren bør aktivere TLS 1.2 eller nyere.</translation>
-<translation id="3405664148539009465">Tilpas skriftstørrelser</translation>
+<translation id="3405664148539009465">Tilpas skrifttyper</translation>
<translation id="3409896703495473338">Administrer sikkerhedsindstillinger</translation>
<translation id="3414952576877147120">Størrelse:</translation>
<translation id="3417660076059365994">De filer, du uploader eller vedhæfter, sendes til Google Cloud eller tredjeparter, hvor de analyseres. De kan f.eks. blive scannet for følsomme oplysninger eller malware.</translation>
@@ -2312,7 +2312,7 @@ Yderligere oplysninger:
<translation id="7392089738299859607">Opdater adresse</translation>
<translation id="7399802613464275309">Sikkerhedstjek</translation>
<translation id="7400418766976504921">Webadresse</translation>
-<translation id="7403392780200267761">Del denne side ved at dele linket, oprette en QR-kode, caste m.m.</translation>
+<translation id="7403392780200267761">Del denne fane ved at dele linket, oprette en QR-kode, caste m.m.</translation>
<translation id="7403591733719184120">Din <ph name="DEVICE_NAME" /> administreres</translation>
<translation id="7407424307057130981">&lt;p&gt;Denne fejl vises, hvis du har Superfish-software på din Windows-computer.&lt;/p&gt;
&lt;p&gt;Følg denne vejledning for at deaktivere softwaren midlertidigt, så du kan komme på nettet. Du skal have administratorrettigheder.&lt;/p&gt;
diff --git a/chromium/components/strings/components_strings_de.xtb b/chromium/components/strings/components_strings_de.xtb
index 1ed66f535b9..0661ae3a17c 100644
--- a/chromium/components/strings/components_strings_de.xtb
+++ b/chromium/components/strings/components_strings_de.xtb
@@ -895,7 +895,7 @@ Du wirst sonst gemäß deinen Datenschutzeinstellungen blockiert. Wenn Cookies u
<translation id="3395827396354264108">Abholoption</translation>
<translation id="3399952811970034796">Lieferadresse</translation>
<translation id="3402261774528610252">Diese Website wurde unter Verwendung von TLS 1.0 oder TLS 1.1 geladen. Diese Versionen wurden eingestellt und werden zukünftig deaktiviert. Sobald sie deaktiviert wurden, können Nutzer diese Website nicht mehr aufrufen. Auf dem Server sollte TLS 1.2 oder höher laufen.</translation>
-<translation id="3405664148539009465">Schriftart anpassen</translation>
+<translation id="3405664148539009465">Schriftarten anpassen</translation>
<translation id="3409896703495473338">Sicherheitseinstellungen verwalten</translation>
<translation id="3414952576877147120">Größe:</translation>
<translation id="3417660076059365994">Hochgeladene oder angehängte Dateien werden zur Analyse an Google Cloud oder Dritte gesendet. Sie werden beispielsweise auf sensible Daten oder Malware geprüft.</translation>
@@ -1404,7 +1404,7 @@ Du wirst sonst gemäß deinen Datenschutzeinstellungen blockiert. Wenn Cookies u
<translation id="483241715238664915">Warnmeldungen aktivieren</translation>
<translation id="4834250788637067901">Zahlungsmethoden, Angebote und Adressen aus Google Pay</translation>
<translation id="4838327282952368871">Träumerisch</translation>
-<translation id="4840250757394056958">Chrome-Verlauf anzeigen</translation>
+<translation id="4840250757394056958">Chrome-Verlauf ansehen</translation>
<translation id="484462545196658690">Auto</translation>
<translation id="484671803914931257">Erhalte Rabatte bei <ph name="MERCHANT_NAME" /> und weiteren Händlern</translation>
<translation id="4850886885716139402">Anzeigen</translation>
@@ -1754,7 +1754,7 @@ Du wirst sonst gemäß deinen Datenschutzeinstellungen blockiert. Wenn Cookies u
<translation id="5789643057113097023">.</translation>
<translation id="5803412860119678065">Möchtest du die Daten deiner <ph name="CARD_DETAIL" /> eingeben?</translation>
<translation id="5804241973901381774">Berechtigungen</translation>
-<translation id="5808435672482059465">Chrome-Verlauf anzeigen</translation>
+<translation id="5808435672482059465">Chrome-Verlauf ansehen</translation>
<translation id="5808542072418270309">Simulationsspiele</translation>
<translation id="5810442152076338065">Deine Verbindung zu <ph name="DOMAIN" /> ist mit einer veralteten Codier-Suite verschlüsselt.</translation>
<translation id="5812947184178430888">Wenn Chrome Sicherheitshinweise meldet, werden relevante Informationen an deinen Administrator gesendet. Dazu gehören z. B. URLs der von dir in Chrome besuchten Seiten, Dateinamen oder Metadaten sowie der Nutzername, den du zum Anmelden in Webanwendungen, auf deinem Gerät und in Chrome verwendest.</translation>
@@ -1815,7 +1815,7 @@ Du wirst sonst gemäß deinen Datenschutzeinstellungen blockiert. Wenn Cookies u
<translation id="598637245381783098">Fehler beim Öffnen der Zahlungs-App</translation>
<translation id="5989320800837274978">Weder feste Proxyserver noch eine PAC-Skript-URL sind festgelegt.</translation>
<translation id="5992691462791905444">Technische Z-Faltung</translation>
-<translation id="5995727681868049093">Daten, Datenschutz- und Sicherheitseinstellungen in deinem Google-Konto verwalten</translation>
+<translation id="5995727681868049093">Daten, Datenschutz- und Sicherheits­einstellungen in deinem Google-Konto verwalten</translation>
<translation id="6000758707621254961"><ph name="RESULT_COUNT" /> Ergebnisse für "<ph name="SEARCH_TEXT" />"</translation>
<translation id="6006484371116297560">Klassisch</translation>
<translation id="6008122969617370890">N-zu-1-Reihenfolge</translation>
diff --git a/chromium/components/strings/components_strings_en-GB.xtb b/chromium/components/strings/components_strings_en-GB.xtb
index b2067efb301..b15db9d648a 100644
--- a/chromium/components/strings/components_strings_en-GB.xtb
+++ b/chromium/components/strings/components_strings_en-GB.xtb
@@ -2245,7 +2245,7 @@ This will otherwise be blocked by your privacy settings. This will allow the con
<translation id="7219179957768738017">The connection uses <ph name="SSL_VERSION" />.</translation>
<translation id="7220786058474068424">Processing</translation>
<translation id="7221855153210829124">Show notifications</translation>
-<translation id="722454870747268814">New Incognito Tab</translation>
+<translation id="722454870747268814">New incognito tab</translation>
<translation id="7233592378249864828">Print confirmation sheet</translation>
<translation id="7234638337680728591">Gas prices and vehicle fueling</translation>
<translation id="7237492777898608035">Don't show this message again for this site</translation>
diff --git a/chromium/components/strings/components_strings_es-419.xtb b/chromium/components/strings/components_strings_es-419.xtb
index 0d582dac50f..a9fe104b72e 100644
--- a/chromium/components/strings/components_strings_es-419.xtb
+++ b/chromium/components/strings/components_strings_es-419.xtb
@@ -78,7 +78,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="1178581264944972037">Detener</translation>
<translation id="1181037720776840403">Quitar</translation>
<translation id="1186201132766001848">Revisar contraseñas</translation>
-<translation id="1195558154361252544">Se bloquearon automáticamente las notificaciones para todos los sitios, excepto en los sitios en que las permites</translation>
+<translation id="1195558154361252544">Las notificaciones se bloquean automáticamente en todos los sitios, excepto en los que las permites</translation>
<translation id="1197088940767939838">Naranja</translation>
<translation id="1201402288615127009">Siguiente</translation>
<translation id="1201895884277373915">Más sobre este sitio</translation>
@@ -115,7 +115,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="1263231323834454256">Lista de lectura</translation>
<translation id="1264309058268477500">Alternativa</translation>
<translation id="1264974993859112054">Deportes</translation>
-<translation id="1269516672602708785">Crear un sitio nuevo en Google Sites rápidamente</translation>
+<translation id="1269516672602708785">Crea un sitio nuevo en Google Sites rápidamente</translation>
<translation id="1270502636509132238">Método de retiro</translation>
<translation id="1281476433249504884">Apilador 1</translation>
<translation id="1285320974508926690">Nunca traducir este sitio</translation>
@@ -155,7 +155,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="1355301061807280185">Empleos</translation>
<translation id="1355754231781595724">Seguridad vial y vehicular</translation>
<translation id="1357195169723583938">Quién usó el dispositivo recientemente y cuándo</translation>
-<translation id="1358187717814494928">Crear hoja</translation>
+<translation id="1358187717814494928">Crear hoja de cálculo</translation>
<translation id="1360955481084547712">Abre una nueva ventana de incógnito para navegar de forma privada</translation>
<translation id="1363819917331173092">No ofrecer la traducción de las páginas en <ph name="SOURCE_LANGUAGE" /></translation>
<translation id="1364822246244961190">Como esta política está bloqueada, se omitirá su valor.</translation>
@@ -280,7 +280,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="1642410292376109062">Botón Cambiar la contraseña de Google, presiona Intro para cambiar la contraseña de tu Cuenta de Google</translation>
<translation id="1644574205037202324">Historial</translation>
<translation id="1645368109819982629">Protocolo no compatible</translation>
-<translation id="1650602712345345441">Administrar tu configuración de Chrome</translation>
+<translation id="1650602712345345441">Administra tu configuración de Chrome</translation>
<translation id="1652415888492971589">JIS B8</translation>
<translation id="1656024727720460136">Chrome simplificó esta página para facilitar la lectura. Chrome recuperó la página original mediante una conexión segura.</translation>
<translation id="1656489000284462475">Retiro</translation>
@@ -385,7 +385,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="1943994668912612445">Diseño</translation>
<translation id="1945968466830820669">Es posible que hayas perdido el acceso a la cuenta de tu organización o sufrido un robo de identidad. Chromium te recomienda que cambies la contraseña ahora.</translation>
<translation id="1947454675006758438">Grapa en la esquina superior derecha</translation>
-<translation id="1956486093533522234">Encontrar tu dispositivo, protegerlo y borrar sus datos</translation>
+<translation id="1956486093533522234">Encuentra tu dispositivo, protégelo y borra sus datos</translation>
<translation id="1958218078413065209">Tu puntuación más alta es <ph name="SCORE" />.</translation>
<translation id="1959001866257244765">Si quieres ayudar a mejorar la seguridad de la Web para todos, envía <ph name="BEGIN_WHITEPAPER_LINK" />las URL de algunas páginas que visitas, información limitada sobre el sistema y determinado contenido de páginas<ph name="END_WHITEPAPER_LINK" /> a Google. <ph name="BEGIN_PRIVACY_PAGE_LINK" />Política de Privacidad<ph name="END_PRIVACY_PAGE_LINK" /></translation>
<translation id="1962204205936693436">Favoritos de <ph name="DOMAIN" /></translation>
@@ -533,7 +533,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="236340516568226369">Menú para cambio de tamaño</translation>
<translation id="2367567093518048410">Nivel</translation>
<translation id="2380886658946992094">Legal</translation>
-<translation id="2383455408879745299">Personalizar tus herramientas de accesibilidad en la configuración de Chrome</translation>
+<translation id="2383455408879745299">Personaliza tus herramientas de accesibilidad en la configuración de Chrome</translation>
<translation id="2384307209577226199">Empresa (predeterminada)</translation>
<translation id="2385809941344967209">Actualiza Chrome desde la configuración</translation>
<translation id="2386255080630008482">Se ha revocado el certificado del servidor.</translation>
@@ -691,7 +691,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="2824775600643448204">Barra de direcciones y de búsqueda</translation>
<translation id="2826760142808435982">La conexión se encriptó y autenticó con <ph name="CIPHER" />, y utiliza <ph name="KX" /> como el mecanismo de intercambio de claves.</translation>
<translation id="2835170189407361413">Eliminar formulario</translation>
-<translation id="2839032553903800133">Se bloquearon las notificaciones</translation>
+<translation id="2839032553903800133">Notificaciones bloqueadas</translation>
<translation id="2839501879576190149">El sitio al que quieres acceder es falso</translation>
<translation id="2850739647070081192">Invite (Envelope)</translation>
<translation id="2854764410992194509">Proveedores de servicios de Internet (ISPs)</translation>
@@ -748,7 +748,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="2987034854559945715">No hay funciones que coincidan</translation>
<translation id="2989742184762224133">Grapas dobles en la parte superior</translation>
<translation id="2991174974383378012">Compartir con los sitios web</translation>
-<translation id="299122504639061328">Administrar la búsqueda de sitios y el motor de búsqueda predeterminados</translation>
+<translation id="299122504639061328">Administra el motor de búsqueda predeterminado y las búsquedas en sitios</translation>
<translation id="2991571918955627853">No puedes visitar <ph name="SITE" /> ahora porque el sitio web usa HSTS. Los ataques y errores de red suelen ser temporales, por lo que es posible que esta página funcione más tarde.</translation>
<translation id="2995517112308048736">Tamaño del archivo:</translation>
<translation id="299990983510665749">Autos de tres o cinco puertas</translation>
@@ -1221,7 +1221,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="4306812610847412719">portapapeles</translation>
<translation id="4312613361423056926">B2</translation>
<translation id="4312866146174492540">Bloquear (predeterminado)</translation>
-<translation id="4314815835985389558">Administrar la sincronización</translation>
+<translation id="4314815835985389558">Administrar sincronización</translation>
<translation id="4318312030194671742">Servicio para crear vista previa de sitios web</translation>
<translation id="4318566738941496689">Tu nombre de dispositivo y la dirección de red</translation>
<translation id="4325600325087822253">Bandeja 17</translation>
@@ -1415,7 +1415,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="485316830061041779">Alemán</translation>
<translation id="4853901935952445031">Este sitio no podrá usar la API de U2F después de febrero de 2022. Si eres el propietario del sitio, deberás modificarlo para que use la API de Web Authentication.</translation>
<translation id="4854362297993841467">Este método de entrega no está disponible. Prueba otro método.</translation>
-<translation id="4854853140771946034">Crear una nota nueva en Google Keep rápidamente</translation>
+<translation id="4854853140771946034">Crea una nota nueva en Google Keep rápidamente</translation>
<translation id="485902285759009870">Verificando código…</translation>
<translation id="4866506163384898554">Presiona |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| para mostrar tu cursor</translation>
<translation id="4876188919622883022">Vista simplificada</translation>
@@ -1675,7 +1675,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="5541546772353173584">Agregar correo electrónico</translation>
<translation id="5545756402275714221">Artículos para ti</translation>
<translation id="5552137475244467770">Chrome revisa tus contraseñas de forma periódica para comprobar si aparecen en listas que se hayan publicado en línea. Durante esta acción, se encriptan tus contraseñas y nombres de usuario para que nadie, ni siquiera Google, pueda leer esta información.</translation>
-<translation id="5556459405103347317">Cargar de nuevo</translation>
+<translation id="5556459405103347317">Volver a cargar</translation>
<translation id="5560088892362098740">Fecha de vencimiento</translation>
<translation id="55635442646131152">Esquema del documento</translation>
<translation id="5565613213060953222">Abrir pestaña de incógnito</translation>
@@ -2105,7 +2105,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="6869334554832814367">Préstamos personales</translation>
<translation id="6873456682041376666">Bandeja superior</translation>
<translation id="6874604403660855544">&amp;Rehacer Agregar</translation>
-<translation id="6881240511396774766">Crea un nuevo documento de Google rápidamente</translation>
+<translation id="6881240511396774766">Crea un documento de Google nuevo rápidamente</translation>
<translation id="6883221904761970440">Está cerrada la hoja de autenticación de credenciales de pago seguro</translation>
<translation id="6884662655240309489">Tamaño 1</translation>
<translation id="6886577214605505410"><ph name="LOCATION_TITLE" /> <ph name="SHORT_URL" /></translation>
@@ -2136,7 +2136,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="695140971690006676">Restablecer todos los valores</translation>
<translation id="6954049078461159956">Hockey</translation>
<translation id="6957887021205513506">El certificado del servidor parece falso.</translation>
-<translation id="6958564499836457428">Administrar la configuración de privacidad de Google en tu Cuenta de Google</translation>
+<translation id="6958564499836457428">Administra la configuración de privacidad de Google en tu Cuenta de Google</translation>
<translation id="695864015080711809">Empleo y educación</translation>
<translation id="6961733224437895943">Seguros de vivienda</translation>
<translation id="6961844873822989059">Puede solicitar permiso para usar las fuentes instaladas en el dispositivo</translation>
@@ -2149,7 +2149,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p
<translation id="696703987787944103">Perceptual</translation>
<translation id="6968269510885595029">Usar tu llave de seguridad</translation>
<translation id="6970216967273061347">Distrito</translation>
-<translation id="6971439137020188025">Crear una presentación de Google nueva en Presentaciones rápidamente</translation>
+<translation id="6971439137020188025">Crea una presentación de Google nueva en Presentaciones rápidamente</translation>
<translation id="6972629891077993081">Dispositivos HID</translation>
<translation id="6973656660372572881">Se especifican servidores proxy fijos y URL de secuencias de comandos .pac.</translation>
<translation id="6973932557599545801">No puedo ayudarte. Continúa por tu cuenta.</translation>
@@ -2260,7 +2260,7 @@ Detalles adicionales:
<translation id="7298195798382681320">Recomendada</translation>
<translation id="7300012071106347854">Azul cobalto</translation>
<translation id="7304030187361489308">Alto</translation>
-<translation id="7304562222803846232">Administra la configuración de privacidad de la Cuenta de Google</translation>
+<translation id="7304562222803846232">Administrar configuración de privacidad de la Cuenta de Google</translation>
<translation id="7305756307268530424">Empezar más despacio</translation>
<translation id="7308436126008021607">sincronización en segundo plano</translation>
<translation id="7310392214323165548">El dispositivo se reiniciará en breve</translation>
@@ -2390,7 +2390,7 @@ Detalles adicionales:
<translation id="7578104083680115302">Paga con rapidez en sitios y apps a través de varios dispositivos con tarjetas que guardaste en Google.</translation>
<translation id="7579442726219254162">La configuración administrada de "<ph name="APPLICATION_ID" />" contiene la variable desconocida "<ph name="VARIABLE" />".</translation>
<translation id="7581199239021537589">Cambio en el eje Y del lado 2 de la imagen</translation>
-<translation id="7582602800368606489">Crear un evento nuevo en el Calendario de Google rápidamente</translation>
+<translation id="7582602800368606489">Crea un evento nuevo en el Calendario de Google rápidamente</translation>
<translation id="7583969447617676942">Servicios jurídicos</translation>
<translation id="7591288787774558753">¿Deseas compartir contenido confidencial?</translation>
<translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> desea utilizar cookies y datos de los sitios en <ph name="TOP_LEVEL_URL" /></translation>
@@ -2432,7 +2432,7 @@ Detalles adicionales:
<translation id="7681273392938116652">Deportes de fantasía</translation>
<translation id="7682287625158474539">Envío</translation>
<translation id="7682451652090915298">Rugby</translation>
-<translation id="7687186412095877299">Completa los formularios de pago con la información que tengas guardada</translation>
+<translation id="7687186412095877299">Completa los formularios de pago con tus formas de pago guardadas.</translation>
<translation id="7687305263118037187">Se agotó el tiempo de espera para reintentar</translation>
<translation id="7687451951329798396">¿Qué dicen otras fuentes?</translation>
<translation id="7693583928066320343">Orden de páginas recibido</translation>
@@ -2449,12 +2449,12 @@ Detalles adicionales:
<translation id="7716375162095500223">Se omitió o aún no se cargó</translation>
<translation id="7716424297397655342">No se puede cargar este sitio desde la caché</translation>
<translation id="7723047071702270851">Editar tarjeta</translation>
-<translation id="7734285854693414638">Crear un formulario nuevo en Formularios de Google rápidamente</translation>
+<translation id="7734285854693414638">Crea un formulario nuevo en Formularios de Google rápidamente</translation>
<translation id="773466115871691567">Traducir siempre las páginas en <ph name="SOURCE_LANGUAGE" /></translation>
<translation id="7740996059027112821">Estándar</translation>
<translation id="77424286611022110">Este sitio muestra anuncios intrusivos o engañosos. <ph name="LEARN_MORE_LINK_TEXT" /></translation>
<translation id="774634243536837715">Se bloqueó contenido peligroso.</translation>
-<translation id="7751971323486164747">Personalizar el tamaño de las fuentes y los tipos de letra en Chrome</translation>
+<translation id="7751971323486164747">Personaliza el tamaño de las fuentes y los tipos de letra en Chrome</translation>
<translation id="7752995774971033316">Sin administrar</translation>
<translation id="7755624218968747854">Rollo principal</translation>
<translation id="7757555340166475417">Dai-Pa-Kai</translation>
@@ -2563,7 +2563,7 @@ Detalles adicionales:
<translation id="8067872629359326442">Ingresaste tu contraseña en un sitio engañoso. Chromium puede ayudarte. Para cambiar la contraseña y notificar a Google que tu cuenta podría estar en riesgo, haz clic en Proteger cuenta.</translation>
<translation id="8070439594494267500">Ícono de la app</translation>
<translation id="8074253406171541171">10x13 (Envelope)</translation>
-<translation id="8075736640322370409">Crear una nueva hoja de cálculo de Google rápidamente</translation>
+<translation id="8075736640322370409">Crea una hoja de cálculo de Google nueva rápidamente</translation>
<translation id="8075898834294118863">Administrar la configuración de sitios</translation>
<translation id="8078141288243656252">No se pueden realizar anotaciones cuando el documento está rotado</translation>
<translation id="8079031581361219619">¿Deseas volver a cargar el sitio?</translation>
@@ -2790,7 +2790,7 @@ Detalles adicionales:
<translation id="87601671197631245">Este sitio usa una configuración de seguridad obsoleta. Si envías información (p. ej., contraseñas, mensajes o tarjetas de crédito) a este sitio, es posible que quede expuesta.</translation>
<translation id="8761567432415473239">La navegación segura de Google <ph name="BEGIN_LINK" />encontró programas peligrosos<ph name="END_LINK" /> recientemente en <ph name="SITE" />.</translation>
<translation id="8763927697961133303">Dispositivo USB</translation>
-<translation id="8763986294015493060">Cerrar todas las ventanas de incógnito que estén abiertas</translation>
+<translation id="8763986294015493060">Cierra todas las ventanas de incógnito que estén abiertas</translation>
<translation id="8766943070169463815">Está abierta la hoja de autenticación de credenciales de pago seguro</translation>
<translation id="877985182522063539">A4</translation>
<translation id="8785658048882205566">Motocicletas</translation>
@@ -2825,7 +2825,7 @@ Detalles adicionales:
<translation id="8870413625673593573">Cerrado recientemente</translation>
<translation id="8870494189203302833">Mismo orden hacia abajo</translation>
<translation id="8870700989640064057">¿Deseas imprimir un archivo confidencial?</translation>
-<translation id="8871553383647848643">Personalizar el estilo del navegador</translation>
+<translation id="8871553383647848643">Personaliza el estilo del navegador</translation>
<translation id="8874824191258364635">Ingresa un número de tarjeta válido</translation>
<translation id="8876033571432926051">Juegos casuales</translation>
<translation id="8877780815363510165">Pesca</translation>
diff --git a/chromium/components/strings/components_strings_es.xtb b/chromium/components/strings/components_strings_es.xtb
index 7091a690086..d1c17e92616 100644
--- a/chromium/components/strings/components_strings_es.xtb
+++ b/chromium/components/strings/components_strings_es.xtb
@@ -156,7 +156,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="1355754231781595724">Vehículo y seguridad vial</translation>
<translation id="1357195169723583938">Quién ha utilizado este dispositivo recientemente y cuándo</translation>
<translation id="1358187717814494928">Crear hoja de cálculo</translation>
-<translation id="1360955481084547712">Abre una nueva ventana de incógnito para navegar en privado</translation>
+<translation id="1360955481084547712">Abre una nueva ventana de Incógnito para navegar en privado</translation>
<translation id="1363819917331173092">No ofrecer que se traduzcan páginas en <ph name="SOURCE_LANGUAGE" /></translation>
<translation id="1364822246244961190">Esta política está bloqueada, su valor será ignorado.</translation>
<translation id="1368318639262510626">Juego del dinosaurio. Un dinosaurio pixelado esquiva cactus y pterodáctilos mientras corre por un paisaje desértico. Cuando escuches una señal sonora, pulsa la barra espaciadora para saltar los obstáculos.</translation>
@@ -736,7 +736,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="2948083400971632585">Puedes inhabilitar los servidores proxy configurados para una conexión en la página de configuración.</translation>
<translation id="2949183777371959169">Ignorada porque el equipo no está registrado con Gestión en la nube del navegador Chrome.</translation>
<translation id="2951588413176968965">Mi buzón de correo</translation>
-<translation id="2952820037279740115">Cerrar todas las ventanas de incógnito</translation>
+<translation id="2952820037279740115">Cerrar todas las ventanas de Incógnito</translation>
<translation id="295526156371527179">Advertencia: Esta política no se ha combinado como un diccionario tal como se especifica en la política porque no es un diccionario.</translation>
<translation id="2955913368246107853">Cerrar la barra de búsqueda</translation>
<translation id="2958544468932521864">Críquet</translation>
@@ -928,7 +928,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="346601286295919445">Química</translation>
<translation id="3467763166455606212">El nombre del titular de la tarjeta es obligatorio</translation>
<translation id="3468054117417088249"><ph name="TAB_SWITCH_SUFFIX" />, abierta actualmente; pulsa el tabulador y luego Intro para cambiar a la pestaña abierta</translation>
-<translation id="3470563864795286535"><ph name="CLOSE_INCOGNITO_WINDOWS_FOCUSED_FRIENDLY_MATCH_TEXT" />: pulsa Tabulador y, después, Intro para cerrar todas las ventanas de incógnito que estén abiertas</translation>
+<translation id="3470563864795286535"><ph name="CLOSE_INCOGNITO_WINDOWS_FOCUSED_FRIENDLY_MATCH_TEXT" />: pulsa Tabulador y, después, Intro para cerrar todas las ventanas de Incógnito que estén abiertas</translation>
<translation id="3477679029130949506">Cartelera y horarios de cines</translation>
<translation id="3479552764303398839">Ahora no</translation>
<translation id="3484560055331845446">Podrías perder el acceso a tu cuenta de Google. Chrome te recomienda que cambies la contraseña ahora. Se te pedirá que inicies sesión.</translation>
@@ -952,7 +952,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="3566021033012934673">La conexión no es privada</translation>
<translation id="3567778190852720481">No te puedes registrar con la cuenta de empresa (la cuenta de empresa no reúne los requisitos).</translation>
<translation id="3574305903863751447"><ph name="CITY" />, <ph name="STATE" /> <ph name="COUNTRY" /></translation>
-<translation id="3575121482199441727">Permitir para este sitio web</translation>
+<translation id="3575121482199441727">Permitir en este sitio web</translation>
<translation id="3576616784287504635">Una página insertada en <ph name="SITE" /> dice</translation>
<translation id="3577902790357386792">Gimnasia</translation>
<translation id="3581089476000296252">Chrome te avisará cuando la página esté lista. &lt;a&gt;Cancelar&lt;/a&gt;</translation>
@@ -1000,7 +1000,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="3676592649209844519">ID del dispositivo:</translation>
<translation id="3677008721441257057">Quizás quisiste decir: &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;</translation>
<translation id="3678029195006412963">No se ha podido firmar la solicitud</translation>
-<translation id="3678529606614285348">Abre una página en una nueva ventana de incógnito (Ctrl + Mayús + N).</translation>
+<translation id="3678529606614285348">Abre una página en una nueva ventana de Incógnito (Ctrl + Mayús + N).</translation>
<translation id="3681007416295224113">Datos del certificado</translation>
<translation id="3701427423622901115">Se han restablecido los ajustes.</translation>
<translation id="3704162925118123524">La red que estás utilizando puede requerir el acceso a su página de inicio de sesión.</translation>
@@ -1189,7 +1189,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
&lt;li&gt;En la página de inicio de sesión que se abre, inicia sesión para utilizar la conexión a Internet.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Paso 2: Abre la página en modo Incógnito (solo en ordenadores)&lt;/h4&gt;
- &lt;p&gt;Abre la página que estabas visitando en una ventana de incógnito.&lt;/p&gt;
+ &lt;p&gt;Abre la página que estabas visitando en una ventana de Incógnito.&lt;/p&gt;
&lt;p&gt;Si la página se abre, significa que una extensión de Chrome no funciona correctamente. Para solucionarlo, desactiva esa extensión.&lt;/p&gt;
&lt;h4&gt;Paso 3: Actualiza tu sistema operativo&lt;/h4&gt;
&lt;p&gt;Comprueba que tu dispositivo esté actualizado.&lt;/p&gt;
@@ -1435,7 +1435,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="4881695831933465202">Abrir</translation>
<translation id="4885256590493466218">Paga con <ph name="CARD_DETAIL" /> al tramitar la compra.</translation>
<translation id="4888600795924685526">Estudios de lenguas extranjeras</translation>
-<translation id="4889420713887366944">Botón Abrir una ventana de incógnito, pulsa Intro para abrir una ventana de incógnito para navegar de forma privada</translation>
+<translation id="4889420713887366944">Botón Abrir una ventana de Incógnito, pulsa Intro para abrir una ventana de Incógnito para navegar de forma privada</translation>
<translation id="4892518386797173871">Parte trasera</translation>
<translation id="4895877746940133817"><ph name="TYPE_1" />, <ph name="TYPE_2" /> y <ph name="TYPE_3" /></translation>
<translation id="4896809202198625921">Olimpiadas</translation>
@@ -1541,7 +1541,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="515292512908731282">C4 (sobre)</translation>
<translation id="5153314898060540200">Rock duro y progresivo</translation>
<translation id="5158275234811857234">Portada</translation>
-<translation id="5159010409087891077">Abre una página en una nueva ventana de incógnito (⇧ + ⌘ + N)</translation>
+<translation id="5159010409087891077">Abre una página en una nueva ventana de Incógnito (⇧ + ⌘ + N)</translation>
<translation id="5161334686036120870">Asunto:</translation>
<translation id="5161506081086828129">Apilador 9</translation>
<translation id="5164798890604758545">Se ha introducido texto</translation>
@@ -1933,7 +1933,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="6305205051461490394">No se puede acceder a <ph name="URL" />.</translation>
<translation id="6312113039770857350">Página web no disponible</translation>
<translation id="6316226860534107313">Escúteres y ciclomotores</translation>
-<translation id="63172326633386613">Gestionar la configuración de accesibilidad</translation>
+<translation id="63172326633386613">Gestionar configuración de accesibilidad</translation>
<translation id="6319249456820053699">Cámaras y videocámaras</translation>
<translation id="6321917430147971392">Comprueba tu configuración de DNS</translation>
<translation id="6322182122604171028">No se ha podido usar Windows Hello</translation>
@@ -2229,7 +2229,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el
<translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}other{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}}</translation>
<translation id="7179323680825933600">Guardar y autocompletar métodos de pago</translation>
<translation id="7180611975245234373">Actualizar</translation>
-<translation id="7181261019481237103">Abrir ventana de incógnito</translation>
+<translation id="7181261019481237103">Abrir ventana de Incógnito</translation>
<translation id="7182878459783632708">No hay políticas establecidas.</translation>
<translation id="7186367841673660872">Esta página se ha traducido del<ph name="ORIGINAL_LANGUAGE" />al<ph name="LANGUAGE_LANGUAGE" />.</translation>
<translation id="718872491229180389">Cheerleading</translation>
@@ -2268,7 +2268,7 @@ Más información:
<translation id="7298195798382681320">Recomendada</translation>
<translation id="7300012071106347854">Azul cobalto</translation>
<translation id="7304030187361489308">Alto</translation>
-<translation id="7304562222803846232">Gestionar configuración de privacidad de la cuenta de Google</translation>
+<translation id="7304562222803846232">Gestionar configuración de privacidad de cuenta de Google</translation>
<translation id="7305756307268530424">Empezar más lento</translation>
<translation id="7308436126008021607">sincronización en segundo plano</translation>
<translation id="7310392214323165548">El dispositivo se reiniciará en breve</translation>
@@ -2462,7 +2462,7 @@ Más información:
<translation id="7740996059027112821">Estándar</translation>
<translation id="77424286611022110">Este sitio muestra anuncios invasivos o engañosos. <ph name="LEARN_MORE_LINK_TEXT" /></translation>
<translation id="774634243536837715">Contenido peligroso bloqueado.</translation>
-<translation id="7751971323486164747">Personaliza el tamaño de fuente y los tipos de letra de Chrome</translation>
+<translation id="7751971323486164747">Personaliza los tamaños de fuente y los tipos de letra de Chrome</translation>
<translation id="7752995774971033316">No administrado</translation>
<translation id="7755624218968747854">Rollo principal</translation>
<translation id="7757555340166475417">Dai-Pa-Kai</translation>
@@ -2785,7 +2785,7 @@ Más información:
<translation id="8730621377337864115">Hecho</translation>
<translation id="8731544501227493793">Botón Gestionar contraseñas, pulsa Intro para ver y gestionar tus contraseñas desde la configuración de Chrome</translation>
<translation id="8734529307927223492"><ph name="MANAGER" /> gestiona tu <ph name="DEVICE_TYPE" /></translation>
-<translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, pulsa Tabulador y, a continuación, Intro para abrir una ventana de incógnito para navegar de forma privada</translation>
+<translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, pulsa Tabulador y, a continuación, Intro para abrir una ventana de Incógnito para navegar de forma privada</translation>
<translation id="8737685506611670901">Abrir enlaces de <ph name="PROTOCOL" /> en lugar de <ph name="REPLACED_HANDLER_TITLE" /></translation>
<translation id="8738058698779197622">Para establecer una conexión segura, tu reloj debe estar correctamente configurado. Esto se debe a que los certificados utilizados por los sitios web para identificarse son solo válidos durante períodos específicos de tiempo. Dado que la hora de tu dispositivo no es correcta, Chromium no puede verificar estos certificados.</translation>
<translation id="8740359287975076522">No se ha podido encontrar la &lt;abbr id="dnsDefinition"&gt;dirección DNS&lt;/abbr&gt; de la página <ph name="HOST_NAME" />. Se está diagnosticando el problema.</translation>
@@ -2797,7 +2797,7 @@ Más información:
<translation id="87601671197631245">Este sitio web usa una configuración de seguridad obsoleta y puede que exponga tu información (por ejemplo, las contraseñas, los mensajes o las tarjetas de crédito) cuando se envíe a este sitio web.</translation>
<translation id="8761567432415473239">La función de Navegación segura de Google <ph name="BEGIN_LINK" />encontró programas dañinos<ph name="END_LINK" /> recientemente en el sitio <ph name="SITE" />.</translation>
<translation id="8763927697961133303">Dispositivo USB</translation>
-<translation id="8763986294015493060">Cierra todas las ventanas de incógnito que estén abiertas</translation>
+<translation id="8763986294015493060">Cierra todas las ventanas de Incógnito que estén abiertas</translation>
<translation id="8766943070169463815">La hoja de autenticación de credenciales de pago seguras está abierta</translation>
<translation id="877985182522063539">A4</translation>
<translation id="8785658048882205566">Motocicletas</translation>
@@ -2814,7 +2814,7 @@ Más información:
<translation id="8816395686387277279"><ph name="UPDATE_CHROME_FOCUSED_FRIENDLY_MATCH_TEXT" />, pulsa Tabulador y, a continuación, Intro para actualizar Chrome desde la configuración de Chrome</translation>
<translation id="8820817407110198400">Marcadores</translation>
<translation id="882338992931677877">Ranura manual</translation>
-<translation id="8834380158646307944">Botón Cerrar todas las ventanas de incógnito: pulsa Intro para cerrar todas las ventanas de incógnito que estén abiertas</translation>
+<translation id="8834380158646307944">Botón Cerrar todas las ventanas de Incógnito: pulsa Intro para cerrar todas las ventanas de Incógnito que estén abiertas</translation>
<translation id="883848425547221593">Otros marcadores</translation>
<translation id="884264119367021077">Dirección de envío</translation>
<translation id="884923133447025588">No se ha encontrado ningún mecanismo de revocación.</translation>
@@ -2832,7 +2832,7 @@ Más información:
<translation id="8870413625673593573">Cerrado recientemente</translation>
<translation id="8870494189203302833">Mismo orden boca abajo</translation>
<translation id="8870700989640064057">¿Imprimir archivo confidencial?</translation>
-<translation id="8871553383647848643">Personaliza el diseño de tu navegador</translation>
+<translation id="8871553383647848643">Personaliza el aspecto de tu navegador</translation>
<translation id="8874824191258364635">Introduce un número de tarjeta válido</translation>
<translation id="8876033571432926051">Juegos casuales</translation>
<translation id="8877780815363510165">Pesca</translation>
diff --git a/chromium/components/strings/components_strings_eu.xtb b/chromium/components/strings/components_strings_eu.xtb
index 69f099c37ce..7dd314ce7ab 100644
--- a/chromium/components/strings/components_strings_eu.xtb
+++ b/chromium/components/strings/components_strings_eu.xtb
@@ -434,7 +434,7 @@ Bestela, pribatutasun-ezarpenek blokeatu egingo dute baimen hori. Baimen honekin
<translation id="2096368010154057602">Departamentua</translation>
<translation id="2099652385553570808">Hiru grapa ezkerrean</translation>
<translation id="2101225219012730419">Bertsioa:</translation>
-<translation id="2102134110707549001">Iradoki pasahitz seguru bat…</translation>
+<translation id="2102134110707549001">Iradoki pasahitz konplexu bat…</translation>
<translation id="2102495993840063010">Android-erako aplikazioak</translation>
<translation id="2107021941795971877">Inprimatze-euskarriak</translation>
<translation id="2108755909498034140">Berrabiarazi ordenagailua</translation>
@@ -1722,7 +1722,7 @@ Bestela, pribatutasun-ezarpenek blokeatu egingo dute baimen hori. Baimen honekin
<translation id="5701381305118179107">Erdiratu</translation>
<translation id="570530837424789914">Kudeatu…</translation>
<translation id="5707154300732650394">Berrekin bilaketa-ibilbideari</translation>
-<translation id="57094364128775171">Iradoki pasahitz seguru bat…</translation>
+<translation id="57094364128775171">Iradoki pasahitz konplexu bat…</translation>
<translation id="571403275720188526">(arm64)</translation>
<translation id="571510845185711675">Albaitariak</translation>
<translation id="5720705177508910913">Oraingo erabiltzailea</translation>
diff --git a/chromium/components/strings/components_strings_fa.xtb b/chromium/components/strings/components_strings_fa.xtb
index 6e5c5880f30..59116f8cf5f 100644
--- a/chromium/components/strings/components_strings_fa.xtb
+++ b/chromium/components/strings/components_strings_fa.xtb
@@ -2,7 +2,7 @@
<!DOCTYPE translationbundle>
<translationbundle lang="fa">
<translation id="1003222766972176318">یادآوری: پیشنهاد ذخیره‌شده دردسترس است</translation>
-<translation id="1008557486741366299">اکنون نه</translation>
+<translation id="1008557486741366299">حالا نه</translation>
<translation id="100957008357583611">از مکان شما استفاده شود؟</translation>
<translation id="1010200102790553230">بار کردن صفحه در فرصتی دیگر</translation>
<translation id="1011206368273183593">درحال آماده‌سازی فایل‌ها</translation>
@@ -71,7 +71,7 @@
<translation id="1165852471352757509">مستند تلویزیونی و غیرتخیلی</translation>
<translation id="1174723505405632867">می‌خواهید به <ph name="EMBEDDED_URL" /> اجازه دهید از کوکی‌ها و داده‌های سایت در <ph name="TOP_LEVEL_URL" /> استفاده کند؟
-اگر اجازه ندهید، تنظیمات حریم‌خصوصی مانع از این دسترسی می‌شود. این اجازه کمک می‌کند محتوایی که با آن تعامل داشته‌اید درست کار کند، اما می‌تواند به <ph name="EMBEDDED_URL" /> هم اجازه دهد فعالیت شما را ردیابی کند.</translation>
+اگر اجازه ندهید، تنظیمات حریم خصوصی مانع از این دسترسی می‌شود. این اجازه کمک می‌کند محتوایی که با آن تعامل داشته‌اید درست کار کند، اما می‌تواند به <ph name="EMBEDDED_URL" /> هم اجازه دهد فعالیت شما را ردیابی کند.</translation>
<translation id="1175364870820465910">&amp;چاپ...</translation>
<translation id="1175875016430184367">سه منگنه در راست</translation>
<translation id="1177802847690410663">مرورگر وب</translation>
@@ -177,7 +177,7 @@
<translation id="1407135791313364759">باز کردن همه</translation>
<translation id="1408787208417187241">سه منگنه در بالا</translation>
<translation id="1413407968866574823">بازی‌های اکشن و سکویی</translation>
-<translation id="1413809658975081374">خطای حریم‌خصوصی</translation>
+<translation id="1413809658975081374">خطای حریم خصوصی</translation>
<translation id="1414134146594747368">پیش‌دبستانی</translation>
<translation id="1422930527989633628">می‌تواند برای پیدا کردن دستگاه‌های بلوتوث اطراف درخواست دهد</translation>
<translation id="1426410128494586442">بله</translation>
@@ -338,7 +338,7 @@
<translation id="1778646502362731194">JIS B0</translation>
<translation id="1787142507584202372">برگه‌های بازتان در اینجا نشان داده می‌شوند</translation>
<translation id="1791429645902722292">Google Smart Lock</translation>
-<translation id="1791820510173628507">‏<ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای مدیریت اطلاعات، حریم‌خصوصی، و امنیت در «حساب Google»، کلید «جهش» و سپس «ورود» را فشار دهید</translation>
+<translation id="1791820510173628507">‏<ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای مدیریت اطلاعات، حریم خصوصی، و امنیت در «حساب Google»، کلید «جهش» و سپس «ورود» را فشار دهید</translation>
<translation id="1798447301915465742">‏<ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />، چند کنش دردسترس است، برای جابه‌جایی بین آن‌ها، کلید Tab را فشار دهید</translation>
<translation id="1800473098294731951">B9</translation>
<translation id="1803020234906945288">تغذیه سالم</translation>
@@ -551,7 +551,7 @@
<translation id="2413155254802890957">قدیمی</translation>
<translation id="2413528052993050574">این سرور نتوانست اثبات کند که این <ph name="DOMAIN" /> است؛ ممکن است گواهی امنیتی آن باطل شده باشد. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصال شما را قطع کرده است.</translation>
<translation id="2414886740292270097">تاریک</translation>
-<translation id="2430968933669123598">‏مدیریت «حساب Google»؛ برای مدیریت اطلاعات، حریم‌خصوصی، و امنیت در «حساب Google»، کلید «ورود» را فشار دهید</translation>
+<translation id="2430968933669123598">‏مدیریت «حساب Google»؛ برای مدیریت اطلاعات، حریم خصوصی، و امنیت در «حساب Google»، کلید «ورود» را فشار دهید</translation>
<translation id="2436186046335138073">به <ph name="HANDLER_HOSTNAME" /> امکان داده شود همه پیوندهای <ph name="PROTOCOL" /> را باز کند؟</translation>
<translation id="2438874542388153331">چهار سوراخ در راست</translation>
<translation id="2448295565072560657">لوازم جانبی متصل به این دستگاه در مدت ورود به سیستم</translation>
@@ -930,7 +930,7 @@
<translation id="3468054117417088249">‏<ph name="TAB_SWITCH_SUFFIX" />، اکنون باز است، برای جابه‌جا شدن به برگه باز، ابتدا دکمه Tab سپس Enter را فشار دهید</translation>
<translation id="3470563864795286535"><ph name="CLOSE_INCOGNITO_WINDOWS_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای بستن همه پنجره‌های ناشناسی که درحال‌حاضر باز هستند، کلید «جهش» و سپس «ورود» را فشار دهید</translation>
<translation id="3477679029130949506">فهرست فیلم و ساعات کار سینما</translation>
-<translation id="3479552764303398839">اکنون نه</translation>
+<translation id="3479552764303398839">حالا نه</translation>
<translation id="3484560055331845446">‏ممکن است دسترسی به حساب Google را از دست بدهید. Chrome توصیه می‌کند اکنون گذرواژه‌تان را تغییر دهید. از شما خواسته می‌شود به سیستم وارد شوید.</translation>
<translation id="3487845404393360112">سینی ۴</translation>
<translation id="3495081129428749620">یافتن در صفحه
@@ -1110,7 +1110,7 @@
<translation id="4010758435855888356">دسترسی به فضای ذخیره‌سازی مجاز شود؟</translation>
<translation id="4014128326099193693">{COUNT,plural, =1{‏سند PDF {COUNT} صفحه دارد}one{‏سند PDF {COUNT} صفحه دارد}other{‏سند PDF {COUNT} صفحه دارد}}</translation>
<translation id="4023431997072828269">از آنجایی‌که این فرم درحال ارسال ازطریق اتصال ناامنی است، دیگران می‌توانند اطلاعات شما را ببینند.</translation>
-<translation id="4025913568718019429">‏دکمه «مدیریت تنظیمات حریم‌خصوصی Google»؛ برای رفتن به تنظیمات حریم‌خصوصی «حساب Google»، کلید «ورود» را فشار دهید</translation>
+<translation id="4025913568718019429">‏دکمه «مدیریت تنظیمات حریم خصوصی Google»؛ برای رفتن به تنظیمات حریم خصوصی «حساب Google»، کلید «ورود» را فشار دهید</translation>
<translation id="4030383055268325496">&amp;واگرد افزودن</translation>
<translation id="4040350669425716613">دانشکده و دانشگاه</translation>
<translation id="4056223980640387499">سپیا</translation>
@@ -1484,12 +1484,12 @@
<translation id="5029568752722684782">پاک کردن نسخه کپی</translation>
<translation id="5030338702439866405">صدور توسط</translation>
<translation id="503069730517007720">برای «<ph name="SOFTWARE_NAME" />» گواهینامه ریشه‌ لازم است اما نصب نشده است. برای رفع این مشکل، سرپرست فناوری اطلاعات شما باید دستورالعمل‌های پیکربندی مربوط به «<ph name="SOFTWARE_NAME" />» را بررسی کند. <ph name="FURTHER_EXPLANATION" /></translation>
-<translation id="5031870354684148875">‏درباره ‏‫ترجمه Google‬</translation>
+<translation id="5031870354684148875">‏درباره «ترجمه Google»‬</translation>
<translation id="503498442187459473"><ph name="HOST" /> می‌خواهد از دوربین و میکروفن شما استفاده کند</translation>
<translation id="5035135400558156732">باغبانی</translation>
<translation id="5039762155821394373">اندازه قلم</translation>
<translation id="5039804452771397117">اجازه دادن</translation>
-<translation id="5040262127954254034">حریم‌خصوصی</translation>
+<translation id="5040262127954254034">حریم خصوصی</translation>
<translation id="5043480802608081735">پیوندی که کپی کرده‌اید</translation>
<translation id="5044545992476246592">‏گذرواژه‌ای که اکنون استفاده کردید در سرقت اطلاعات شبکه پیدا شده است. «دستیار Google» می‌تواند گذرواژه‌تان را به‌طور خودکار تغییر دهد.</translation>
<translation id="5045550434625856497">گذرواژه نادرست</translation>
@@ -1826,7 +1826,7 @@
<translation id="598637245381783098">برنامه پرداخت باز نشد</translation>
<translation id="5989320800837274978">‏سرور پروکسی ثابت و URL اسکریپت pac. تعیین نشده‌اند.</translation>
<translation id="5992691462791905444">‏تاخوردگی Z شکل مهندسی</translation>
-<translation id="5995727681868049093">‏مدیریت اطلاعات، حریم‌خصوصی، و امنیت در «حساب Google»</translation>
+<translation id="5995727681868049093">‏مدیریت اطلاعات، حریم خصوصی، و امنیت در «حساب Google»</translation>
<translation id="6000758707621254961"><ph name="RESULT_COUNT" /> نتیجه برای «<ph name="SEARCH_TEXT" />»</translation>
<translation id="6006484371116297560">کلاسيک</translation>
<translation id="6008122969617370890">‏ترتیب N تا ۱</translation>
@@ -2144,7 +2144,7 @@
<translation id="695140971690006676">بازنشانی همه</translation>
<translation id="6954049078461159956">هاكی</translation>
<translation id="6957887021205513506">به نظر می‌رسد که گواهی سرور جعلی باشد.</translation>
-<translation id="6958564499836457428">‏مدیریت تنظیمات حریم‌خصوصی Google در «حساب Google»</translation>
+<translation id="6958564499836457428">‏مدیریت تنظیمات حریم خصوصی Google در «حساب Google»</translation>
<translation id="695864015080711809">شغل و تحصیلات</translation>
<translation id="6961733224437895943">بیمه مسکن</translation>
<translation id="6961844873822989059">می‌تواند برای استفاده از قلم‌های نصب‌شده در دستگاه درخواست دهد</translation>
@@ -2178,7 +2178,7 @@
<translation id="7029809446516969842">گذرواژه‌ها</translation>
<translation id="7030436163253143341">گواهی معتبر نیست</translation>
<translation id="7031646650991750659">‏برنامه‌های Google Play که نصب کرده‌اید</translation>
-<translation id="7038063300915481831">‏<ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای مدیریت تنظیمات حریم‌خصوصی «حساب Google» خود، کلید «جهش» و سپس «ورود» را فشار دهید</translation>
+<translation id="7038063300915481831">‏<ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای مدیریت تنظیمات حریم خصوصی «حساب Google» خود، کلید «جهش» و سپس «ورود» را فشار دهید</translation>
<translation id="7050187094878475250">تلاش کردید به دامنه <ph name="DOMAIN" /> بروید اما گواهینامه‌ای که سرور ارائه کرد، دارای یک تاریخ اعتبار بسیار طولانی است و مورداعتماد نیست.</translation>
<translation id="705310974202322020">{NUM_CARDS,plural, =1{درحال‌حاضر این کارت ذخیره نمی‌شود}one{درحال‌حاضر این کارت‌ها ذخیره نمی‌شوند}other{درحال‌حاضر این کارت‌ها ذخیره نمی‌شوند}}</translation>
<translation id="7053983685419859001">مسدود کردن</translation>
@@ -2268,7 +2268,7 @@
<translation id="7298195798382681320">توصیه می‌شود</translation>
<translation id="7300012071106347854">آبی پررنگ</translation>
<translation id="7304030187361489308">بالا</translation>
-<translation id="7304562222803846232">‏مدیریت تنظیمات حریم‌خصوصی «حساب Google»</translation>
+<translation id="7304562222803846232">‏مدیریت تنظیمات حریم خصوصی «حساب Google»</translation>
<translation id="7305756307268530424">شروع آهسته‌تر</translation>
<translation id="7308436126008021607">همگام‌سازی پس‌زمینه</translation>
<translation id="7310392214323165548">دستگاه به‌زودی بازراه‌اندازی خواهد شد</translation>
diff --git a/chromium/components/strings/components_strings_fr-CA.xtb b/chromium/components/strings/components_strings_fr-CA.xtb
index 3b8255a6a78..70513526e42 100644
--- a/chromium/components/strings/components_strings_fr-CA.xtb
+++ b/chromium/components/strings/components_strings_fr-CA.xtb
@@ -1631,7 +1631,7 @@
<translation id="5421136146218899937">Effacer les données de navigation...</translation>
<translation id="5426179911063097041"><ph name="SITE" /> veut vous envoyer des notifications.</translation>
<translation id="5428105026674456456">Espagnol</translation>
-<translation id="5430298929874300616">Supprimer le favori</translation>
+<translation id="5430298929874300616">Retirer le favori</translation>
<translation id="5439770059721715174">Erreur de validation du schéma à « <ph name="ERROR_PATH" /> » : <ph name="ERROR" /></translation>
<translation id="5443468954631487277">Ordre inversé, face vers le haut</translation>
<translation id="5447765697759493033">Ce site ne sera pas traduit</translation>
diff --git a/chromium/components/strings/components_strings_fr.xtb b/chromium/components/strings/components_strings_fr.xtb
index d4b5dd505e3..7a53b3b39fa 100644
--- a/chromium/components/strings/components_strings_fr.xtb
+++ b/chromium/components/strings/components_strings_fr.xtb
@@ -115,7 +115,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="1263231323834454256">Liste de lecture</translation>
<translation id="1264309058268477500">Autre</translation>
<translation id="1264974993859112054">Sports</translation>
-<translation id="1269516672602708785">Créer rapidement un site dans Google Sites</translation>
+<translation id="1269516672602708785">Créez rapidement un site dans Google Sites</translation>
<translation id="1270502636509132238">Mode d'enlèvement</translation>
<translation id="1281476433249504884">Empileur 1</translation>
<translation id="1285320974508926690">Ne jamais traduire ce site</translation>
@@ -669,7 +669,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" /> : appuyer sur Tabulation, puis sur Entrée pour gérer vos paiements et informations sur vos cartes de crédit dans les paramètres Chrome</translation>
<translation id="271663710482723385">Appuyez sur |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| pour quitter le mode plein écran</translation>
<translation id="2721148159707890343">Demande réussie.</translation>
-<translation id="2723669454293168317">Effectuer un contrôle de sécurité dans les paramètres de Chrome</translation>
+<translation id="2723669454293168317">Effectuez un contrôle de sécurité dans les paramètres de Chrome</translation>
<translation id="2726001110728089263">Bac latéral</translation>
<translation id="2728127805433021124">Le certificat du serveur a été signé avec un algorithme de signature faible.</translation>
<translation id="2730326759066348565"><ph name="BEGIN_LINK" />Exécuter les diagnostics de connectivité<ph name="END_LINK" /></translation>
@@ -752,7 +752,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="2987034854559945715">Aucune fonctionnalité correspondante</translation>
<translation id="2989742184762224133">Double agrafe en haut</translation>
<translation id="2991174974383378012">Partage avec les sites Web</translation>
-<translation id="299122504639061328">Gérer votre moteur de recherche par défaut et la recherche de sites</translation>
+<translation id="299122504639061328">Gérez votre moteur de recherche par défaut et la recherche de sites</translation>
<translation id="2991571918955627853">Le site <ph name="SITE" /> est actuellement inaccessible, car il utilise la technologie HSTS. Les erreurs réseau et les attaques sont généralement temporaires. Vous devriez donc pouvoir accéder à cette page plus tard.</translation>
<translation id="2995517112308048736">Taille du fichier :</translation>
<translation id="299990983510665749">Voitures à hayon</translation>
@@ -1423,7 +1423,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="485316830061041779">Allemand</translation>
<translation id="4853901935952445031">Ce site ne pourra plus utiliser l'API U2F après février 2022. S'il vous appartient, vous devriez changer l'API et utiliser Web Authentication.</translation>
<translation id="4854362297993841467">Mode de livraison non disponible. Choisissez-en un autre.</translation>
-<translation id="4854853140771946034">Créer rapidement une note dans Google Keep</translation>
+<translation id="4854853140771946034">Créez rapidement une note dans Google Keep</translation>
<translation id="485902285759009870">Validation du code…</translation>
<translation id="4866506163384898554">Appuyez sur |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| pour afficher le curseur</translation>
<translation id="4876188919622883022">Vue simplifiée</translation>
@@ -1826,7 +1826,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="598637245381783098">Impossible d'ouvrir l'application de paiement</translation>
<translation id="5989320800837274978">Aucun serveur proxy déterminé ou URL de script .pac n'a été indiqué.</translation>
<translation id="5992691462791905444">Technique de pli en Z</translation>
-<translation id="5995727681868049093">Gérer vos infos, votre vie privée et votre sécurité dans votre compte Google</translation>
+<translation id="5995727681868049093">Gérez vos infos, la confidentialité de vos données et votre sécurité dans votre compte Google</translation>
<translation id="6000758707621254961"><ph name="RESULT_COUNT" /> résultats pour "<ph name="SEARCH_TEXT" />"</translation>
<translation id="6006484371116297560">Classique</translation>
<translation id="6008122969617370890">Ordre N à 1</translation>
@@ -2113,7 +2113,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="6869334554832814367">Prêts personnels</translation>
<translation id="6873456682041376666">Bac supérieur</translation>
<translation id="6874604403660855544">&amp;Rétablir l'ajout</translation>
-<translation id="6881240511396774766">Créer rapidement un document Google Docs</translation>
+<translation id="6881240511396774766">Créez rapidement un document Google Docs</translation>
<translation id="6883221904761970440">La fiche d'authentification concernant les infos de paiement sécurisé est fermée</translation>
<translation id="6884662655240309489">Taille 1</translation>
<translation id="6886577214605505410"><ph name="LOCATION_TITLE" /> <ph name="SHORT_URL" /></translation>
@@ -2157,7 +2157,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="696703987787944103">Perceptuel</translation>
<translation id="6968269510885595029">Utiliser votre clé de sécurité</translation>
<translation id="6970216967273061347">District</translation>
-<translation id="6971439137020188025">Créer rapidement une présentation Google dans Slides</translation>
+<translation id="6971439137020188025">Créez rapidement une présentation Google dans Slides</translation>
<translation id="6972629891077993081">Périphériques HID</translation>
<translation id="6973656660372572881">Les serveurs proxy déterminés et une URL de script .pac sont spécifiés tous les deux.</translation>
<translation id="6973932557599545801">Malheureusement, je ne peux pas vous aider. Veuillez continuer manuellement.</translation>
@@ -2200,7 +2200,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit
<translation id="7096937462164235847">L'identité de ce site Web n'a pas été validée.</translation>
<translation id="7101893872976785596">Films d'horreur</translation>
<translation id="7102079138917191645">Construction et maintenance</translation>
-<translation id="7102554173784142865">Jouer au jeu du dino Chrome</translation>
+<translation id="7102554173784142865">Jouer au jeu du dino de Chrome</translation>
<translation id="7108338896283013870">Masquer</translation>
<translation id="7108634116785509031"><ph name="HOST" /> souhaite utiliser votre appareil photo</translation>
<translation id="7108819624672055576">Autorisé par une extension</translation>
@@ -2313,7 +2313,7 @@ Informations supplémentaires :
<translation id="7392089738299859607">Modifier l'adresse</translation>
<translation id="7399802613464275309">Contrôle de sécurité</translation>
<translation id="7400418766976504921">URL</translation>
-<translation id="7403392780200267761">Partager cet onglet en le castant, en créant un code QR, en partageant le lien, etc.</translation>
+<translation id="7403392780200267761">Partagez cet onglet en le castant, en créant un code QR, en partageant le lien, etc.</translation>
<translation id="7403591733719184120">Votre <ph name="DEVICE_NAME" /> est géré</translation>
<translation id="7407424307057130981">&lt;p&gt;Ce message d'erreur s'affiche si le logiciel Superfish est installé sur votre ordinateur Windows.&lt;/p&gt;
&lt;p&gt;Suivez ces étapes pour désactiver temporairement le logiciel afin d'accéder au Web. Vous devez disposer des droits d'administrateur.&lt;/p&gt;
@@ -2399,7 +2399,7 @@ Informations supplémentaires :
<translation id="7578104083680115302">Payez rapidement sur des sites et dans des applications sur tous vos appareils au moyen de cartes que vous avez enregistrées sur Google.</translation>
<translation id="7579442726219254162">Variable inconnue "<ph name="VARIABLE" />" dans la configuration gérée de "<ph name="APPLICATION_ID" />".</translation>
<translation id="7581199239021537589">Décalage Y de l'image côté 2</translation>
-<translation id="7582602800368606489">Créer rapidement un événement dans Google Agenda</translation>
+<translation id="7582602800368606489">Créez rapidement un événement dans Google Agenda</translation>
<translation id="7583969447617676942">Services juridiques</translation>
<translation id="7591288787774558753">Partager le contenu confidentiel ?</translation>
<translation id="7591636454931265313">Le site <ph name="EMBEDDED_URL" /> souhaite utiliser les cookies et les données de site sur <ph name="TOP_LEVEL_URL" /></translation>
@@ -2458,12 +2458,12 @@ Informations supplémentaires :
<translation id="7716375162095500223">Importation en attente (ou bien le rapport a été ignoré)</translation>
<translation id="7716424297397655342">Impossible de charger ce site à partir du cache</translation>
<translation id="7723047071702270851">Modifier la carte</translation>
-<translation id="7734285854693414638">Créer rapidement un formulaire dans Google Forms</translation>
+<translation id="7734285854693414638">Créez rapidement un formulaire dans Google Forms</translation>
<translation id="773466115871691567">Toujours traduire les pages en <ph name="SOURCE_LANGUAGE" /></translation>
<translation id="7740996059027112821">Standard</translation>
<translation id="77424286611022110">Ce site affiche des annonces intrusives ou trompeuses. <ph name="LEARN_MORE_LINK_TEXT" /></translation>
<translation id="774634243536837715">Contenu dangereux bloqué.</translation>
-<translation id="7751971323486164747">Personnaliser la taille des polices et des polices de caractères dans Chrome</translation>
+<translation id="7751971323486164747">Personnalisez la taille des polices et les polices de caractères dans Chrome</translation>
<translation id="7752995774971033316">Non géré</translation>
<translation id="7755624218968747854">Rouleau principal</translation>
<translation id="7757555340166475417">Dai-Pa-Kai</translation>
@@ -2498,7 +2498,7 @@ Informations supplémentaires :
<translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> : <ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation>
<translation id="7862185352068345852">Quitter le site Web ?</translation>
<translation id="7865448901209910068">Vitesse optimale</translation>
-<translation id="7871445724586827387">Changer le mot de passe de votre compte Google</translation>
+<translation id="7871445724586827387">Changez le mot de passe de votre compte Google</translation>
<translation id="7877007680666472091">ID de contenus protégés</translation>
<translation id="7878562273885520351">Votre mot de passe a peut-être été piraté</translation>
<translation id="7880146494886811634">Enregistrer l'adresse</translation>
@@ -2572,7 +2572,7 @@ Informations supplémentaires :
<translation id="8067872629359326442">Vous venez de saisir votre mot de passe sur un site trompeur. Chromium peut vous aider. Pour modifier votre mot de passe et informer Google que votre compte a peut-être été piraté, cliquez sur "Protéger le compte".</translation>
<translation id="8070439594494267500">Icône de l'appli</translation>
<translation id="8074253406171541171">10x13 (enveloppe)</translation>
-<translation id="8075736640322370409">Créer rapidement une feuille de calcul Google Sheets</translation>
+<translation id="8075736640322370409">Créez rapidement une feuille de calcul Google Sheets</translation>
<translation id="8075898834294118863">Gérer les paramètres des sites</translation>
<translation id="8078141288243656252">Impossible d'ajouter des annotations si le document a pivoté</translation>
<translation id="8079031581361219619">Actualiser le site Web ?</translation>
@@ -2833,7 +2833,7 @@ Informations supplémentaires :
<translation id="8870413625673593573">Récemment fermés</translation>
<translation id="8870494189203302833">Même ordre, face vers le bas</translation>
<translation id="8870700989640064057">Imprimer le fichier confidentiel ?</translation>
-<translation id="8871553383647848643">Personnaliser l'apparence de votre navigateur</translation>
+<translation id="8871553383647848643">Personnalisez l'apparence de votre navigateur</translation>
<translation id="8874824191258364635">Saisissez un numéro de carte valide</translation>
<translation id="8876033571432926051">Jeux grand public</translation>
<translation id="8877780815363510165">Pêche</translation>
@@ -2950,7 +2950,7 @@ Informations supplémentaires :
<translation id="917450738466192189">Le certificat du serveur n'est pas valide.</translation>
<translation id="9174623988242579721">Véhicules puissants et personnalisés</translation>
<translation id="9174917557437862841">Bouton pour changer d'onglet, appuyez sur Entrée pour passer à cet onglet</translation>
-<translation id="9179703756951298733">Gérez vos paiements et les informations sur vos cartes de crédit dans les paramètres Chrome</translation>
+<translation id="9179703756951298733">Gérez vos informations de paiement et de cartes de crédit dans les paramètres Chrome</translation>
<translation id="9183302530794969518">Google Docs</translation>
<translation id="9183425211371246419"><ph name="HOST_NAME" /> utilise un protocole incompatible.</translation>
<translation id="9187461866967718678">Sports extrêmes</translation>
diff --git a/chromium/components/strings/components_strings_gl.xtb b/chromium/components/strings/components_strings_gl.xtb
index 50b37dcaaf3..8815b41098f 100644
--- a/chromium/components/strings/components_strings_gl.xtb
+++ b/chromium/components/strings/components_strings_gl.xtb
@@ -438,7 +438,7 @@ En caso contrario, a configuración de privacidade impedirao. Se o permites, o c
<translation id="2099652385553570808">Tres grampas na parte esquerda</translation>
<translation id="2101225219012730419">Versión:</translation>
<translation id="2102134110707549001">Suxerir contrasinal seguro…</translation>
-<translation id="2102495993840063010">Aplicacións de Android</translation>
+<translation id="2102495993840063010">Aplicacións para Android</translation>
<translation id="2107021941795971877">Soportes de impresión</translation>
<translation id="2108755909498034140">Reinicia o ordenador</translation>
<translation id="2111166930115883695">Pulsa Espazo para xogar</translation>
diff --git a/chromium/components/strings/components_strings_hi.xtb b/chromium/components/strings/components_strings_hi.xtb
index 96ebe7ec698..f15309e76a8 100644
--- a/chromium/components/strings/components_strings_hi.xtb
+++ b/chromium/components/strings/components_strings_hi.xtb
@@ -292,7 +292,7 @@
<translation id="1682696192498422849">शॉर्ट एज फ़र्स्ट</translation>
<translation id="168693727862418163">इस नीति का मान अपनी स्कीमा के हिसाब से काम नहीं कर सका और इसे अनदेखा किया जाएगा.</translation>
<translation id="168841957122794586">सर्वर प्रमाणपत्र में कमज़ोर क्रिप्टोग्राफ़िक कुंजी है.</translation>
-<translation id="1697532407822776718">आप बिल्कुल तैयार हैं!</translation>
+<translation id="1697532407822776718">आप बिलकुल तैयार हैं!</translation>
<translation id="1699570257714336246">जानकारी मौजूद नहीं है</translation>
<translation id="1703835215927279855">लेटर</translation>
<translation id="1706625117072057435">ज़ूम स्तर</translation>
@@ -348,7 +348,7 @@
<translation id="1807246157184219062">हल्का</translation>
<translation id="1807528111851433570">स्टार्ट शीट</translation>
<translation id="1812527064848182527">लैंडस्केप</translation>
-<translation id="1813414402673211292">ब्राउज़िंग डेटा साफ़ करें</translation>
+<translation id="1813414402673211292">ब्राउज़िंग डेटा मिटाएं</translation>
<translation id="182139138257690338">अपने-आप होने वाले डाउनलोड</translation>
<translation id="1821930232296380041">अमान्य अनुरोध या अनुरोध पैरामीटर</translation>
<translation id="1822540298136254167">आप किन वेबसाइटों पर जाते हैं और उन पर कितना समय देते हैं</translation>
@@ -973,7 +973,7 @@
<translation id="361438452008624280">सूची एंट्री "<ph name="LANGUAGE_ID" />": अनजान या काम नहीं करने वाली भाषा.</translation>
<translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome की सेटिंग में, सुरक्षा जांच करने के लिए पहले Tab और फिर Enter दबाएं</translation>
<translation id="3615877443314183785">खत्म होने की मान्य तारीख डालें</translation>
-<translation id="36224234498066874">ब्राउज़िंग डेटा साफ़ करें...</translation>
+<translation id="36224234498066874">ब्राउज़िंग डेटा मिटाएं...</translation>
<translation id="362276910939193118">पूरा इतिहास दिखाएं</translation>
<translation id="3630155396527302611">अगर वह नेटवर्क एक्सेस करने की अनुमति पाए हुए प्रोग्राम के रूप में पहले से ही सूची में शामिल है, तो
उसे सूची से हटाने और फिर से जोड़ने की कोशिश करें.</translation>
@@ -1637,7 +1637,7 @@
<translation id="540969355065856584">यह सर्वर यह प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; इसका सुरक्षा प्रमाण पत्र इस समय मान्य नहीं है. ऐसा गलत कॉन्फ़िगरेशन या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन में अवरोध डालने के कारण हो सकता है.</translation>
<translation id="5412236728747081950">यह साइट आपकी दिलचस्पी के बारे में Chrome से पता करती है, ताकि आपको ज़्यादा काम के विज्ञापन दिखा सके</translation>
<translation id="541416427766103491">स्टैकर 4</translation>
-<translation id="5421136146218899937">ब्राउज़िंग डेटा साफ़ करें...</translation>
+<translation id="5421136146218899937">ब्राउज़िंग डेटा मिटाएं...</translation>
<translation id="5426179911063097041"><ph name="SITE" /> वेबसाइट आपको सूचनाएं भेजना चाहती है</translation>
<translation id="5428105026674456456">स्पैनिश</translation>
<translation id="5430298929874300616">बुकमार्क निकालें</translation>
@@ -2550,7 +2550,7 @@
<translation id="8009225694047762179">पासवर्ड संभालें</translation>
<translation id="8012116502927253373">{NUM_CARDS,plural, =1{इस कार्ड और इसके बिलिंग पते को सेव किया जाएगा. <ph name="USER_EMAIL" /> में साइन इन रहने पर आप इसका इस्तेमाल कर पाएंगे.}one{ये कार्ड और इनके बिलिंग पते सेव किए जाएंगे. <ph name="USER_EMAIL" /> में साइन इन रहने पर आप उनका इस्तेमाल कर पाएंगे.}other{ये कार्ड और इनके बिलिंग पते सेव किए जाएंगे. <ph name="USER_EMAIL" /> में साइन इन रहने पर आप उनका इस्तेमाल कर पाएंगे.}}</translation>
<translation id="8025119109950072390">इस साइट पर मौजूद हमलावर आपको धोखा देकर आपसे कुछ जोखिम वाला काम करा सकते हैं, जैसे सॉफ़्टवेयर इंस्टॉल करना या आपकी व्यक्तिगत जानकारी (उदाहरण के लिए, पासवर्ड, फ़ोन नंबर या क्रेडिट कार्ड) के बारे में बताना.</translation>
-<translation id="8026334261755873520">ब्राउज़िंग डेटा साफ़ करें</translation>
+<translation id="8026334261755873520">ब्राउज़िंग डेटा मिटाएं</translation>
<translation id="8027077570865220386">ट्रे 15</translation>
<translation id="8028698320761417183"><ph name="CREATE_GOOGLE_FORM_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Forms में जल्दी से नया फ़ॉर्म बनाने के लिए, पहले Tab दबाएं और फिर Enter दबाएं</translation>
<translation id="8028960012888758725">जॉब के बाद ट्रिम करें</translation>
diff --git a/chromium/components/strings/components_strings_hy.xtb b/chromium/components/strings/components_strings_hy.xtb
index 5047d682da0..a3210464e99 100644
--- a/chromium/components/strings/components_strings_hy.xtb
+++ b/chromium/components/strings/components_strings_hy.xtb
@@ -901,7 +901,7 @@
<translation id="3402261774528610252">Կապը, որի միջոցով բեռնվել է այս կայքը, օգտագործում է TLS-ի 1.0 կամ 1.1 տարբերակները, որոնք հնացած են և չեն աջակցվի ապագայում։ Անջատվելուց հետո այցելուները այլևս չեն կարողանա դիտել այս կայքը։ Սերվերը պետք է ակտիվացնի TLS-ի 1.2 կամ ավելի բարձր տարբերակ։</translation>
<translation id="3405664148539009465">Հարմարեցնել տառատեսակները</translation>
<translation id="3409896703495473338">Կառավարել անվտանգության կարգավորումները</translation>
-<translation id="3414952576877147120">Չափը՝</translation>
+<translation id="3414952576877147120">Չափսը՝</translation>
<translation id="3417660076059365994">Ձեր վերբեռնած կամ կցած ֆայլերը ուղարկվում են Google Cloud կամ գործընկեր կազմակերպություններին՝ վերլուծության նպատակով։ Օրինակ, դրանցում կարող է ստուգվել խիստ անձնական տվյալների կամ վնասագրերի առկայությունը։</translation>
<translation id="3422248202833853650">Փակեք մյուս ծրագրերը՝ տարածք ազատելու համար:</translation>
<translation id="3422472998109090673"><ph name="HOST_NAME" />-ը ներկայումս անհասանելի է:</translation>
@@ -1460,7 +1460,7 @@
<translation id="4955242332710481440">A5-Extra</translation>
<translation id="4958444002117714549">Ընդարձակել ցանկը</translation>
<translation id="4964505745997821360">Առողջության ապահովագրություն</translation>
-<translation id="4968522289500246572">Այս հավելվածը նախատեսված է բջջային սարքերի համար։ Չափը փոխելուց հետո հավելվածը կարող է սխալներով աշխատել։</translation>
+<translation id="4968522289500246572">Այս հավելվածը նախատեսված է բջջային սարքերի համար։ Չափսը փոխելուց հետո հավելվածը կարող է սխալներով աշխատել։</translation>
<translation id="4969341057194253438">Ջնջել տեսագրությունը
</translation>
<translation id="4973922308112707173">Երկու անցք վերևում</translation>
diff --git a/chromium/components/strings/components_strings_id.xtb b/chromium/components/strings/components_strings_id.xtb
index f6b2fb57843..c3de93ec995 100644
--- a/chromium/components/strings/components_strings_id.xtb
+++ b/chromium/components/strings/components_strings_id.xtb
@@ -660,7 +660,7 @@ Jika tidak, ini akan diblokir oleh setelan privasi Anda. Ini akan memungkinkan k
<translation id="2704283930420550640">Nilai tidak sesuai format.</translation>
<translation id="2704606927547763573">Disalin</translation>
<translation id="2705137772291741111">Salinan tersimpan (dalam cache) situs ini tidak dapat dibaca.</translation>
-<translation id="2709516037105925701">Isi-Otomatis</translation>
+<translation id="2709516037105925701">Isi otomatis</translation>
<translation id="2713444072780614174">Putih</translation>
<translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan Tab lalu Enter untuk mengelola info pembayaran dan kartu kredit di setelan Chrome</translation>
<translation id="271663710482723385">Tekan |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| untuk keluar dari mode layar penuh</translation>
diff --git a/chromium/components/strings/components_strings_it.xtb b/chromium/components/strings/components_strings_it.xtb
index f3ca88bb7b3..7b3b946f53c 100644
--- a/chromium/components/strings/components_strings_it.xtb
+++ b/chromium/components/strings/components_strings_it.xtb
@@ -1127,7 +1127,7 @@ In caso contrario l'uso sarà bloccato dalle impostazioni sulla privacy. I conte
<translation id="4089152113577680600">Vassoio 14</translation>
<translation id="4098354747657067197">Sito ingannevole in vista</translation>
<translation id="4099048595830172239">Il criterio dell'amministratore sconsiglia la condivisione dello schermo con <ph name="APPLICATION_TITLE" /> quando sono visibili contenuti riservati:</translation>
-<translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, premi Tab e poi Invio per personalizzare le dimensioni dei caratteri e i caratteri alternativi in Chrome</translation>
+<translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, premi Tab e poi Invio per personalizzare le dimensioni dei caratteri e i caratteri tipografici in Chrome</translation>
<translation id="4101413244023615925">Testo e grafica</translation>
<translation id="410148943680000050">Desktop publishing</translation>
<translation id="4103249731201008433">Il numero di serie del dispositivo non è valido</translation>
@@ -1616,7 +1616,7 @@ In caso contrario l'uso sarà bloccato dalle impostazioni sulla privacy. I conte
<translation id="5340250774223869109">L'applicazione è bloccata</translation>
<translation id="534295439873310000">Dispositivi NFC</translation>
<translation id="5344579389779391559">Questa pagina potrebbe tentare di addebitarti dei costi</translation>
-<translation id="5347645913823149105">Pulsante Personalizza caratteri in Chrome, premi Invio per personalizzare dimensioni dei caratteri e caratteri alternativi in Chrome.</translation>
+<translation id="5347645913823149105">Pulsante Personalizza caratteri in Chrome, premi Invio per personalizzare dimensioni dei caratteri e caratteri tipografici in Chrome.</translation>
<translation id="5355557959165512791">Al momento non puoi visitare il sito <ph name="SITE" /> perché il relativo certificato è stato revocato. In genere gli errori di rete e gli attacchi sono temporanei, pertanto questa pagina potrebbe funzionare più tardi.</translation>
<translation id="5356837363448394805">Faccina con guance rosse</translation>
<translation id="5357848622083956825">Design e arti visive</translation>
@@ -2458,7 +2458,7 @@ Ulteriori dettagli:
<translation id="7740996059027112821">Standard</translation>
<translation id="77424286611022110">Questo sito mostra annunci invasivi o fuorvianti. <ph name="LEARN_MORE_LINK_TEXT" /></translation>
<translation id="774634243536837715">Contenuti pericolosi bloccati.</translation>
-<translation id="7751971323486164747">Personalizza le dimensioni dei caratteri e i caratteri alternativi in Chrome</translation>
+<translation id="7751971323486164747">Personalizza le dimensioni dei caratteri e i caratteri tipografici in Chrome</translation>
<translation id="7752995774971033316">Non gestito</translation>
<translation id="7755624218968747854">Rullo principale</translation>
<translation id="7757555340166475417">Dai-Pa-Kai</translation>
diff --git a/chromium/components/strings/components_strings_ja.xtb b/chromium/components/strings/components_strings_ja.xtb
index 935d4034273..da78b163971 100644
--- a/chromium/components/strings/components_strings_ja.xtb
+++ b/chromium/components/strings/components_strings_ja.xtb
@@ -156,7 +156,7 @@
<translation id="1355754231781595724">交通安全</translation>
<translation id="1357195169723583938">最近デバイスを使用したユーザーとその日時</translation>
<translation id="1358187717814494928">スプレッドシートを作成</translation>
-<translation id="1360955481084547712">新しいシークレット ウィンドウを開いてシークレット モードでブラウジングする</translation>
+<translation id="1360955481084547712">新しいシークレット ウィンドウを開いてシークレット モードでブラウジングします</translation>
<translation id="1363819917331173092"><ph name="SOURCE_LANGUAGE" /> のページを翻訳するか尋ねない</translation>
<translation id="1364822246244961190">このポリシーはブロックされているため、値は無視されます。</translation>
<translation id="1368318639262510626">Dino ゲーム。ピクセル画像の恐竜がサボテンやプテロダクティルスをよけながら、荒地を走り抜けます。合図の音が聞こえたら、Space キーを押して障害物を飛び越えましょう。</translation>
@@ -186,7 +186,7 @@
<translation id="1428729058023778569">この警告は、サイトが HTTPS に対応していない場合に表示されます。<ph name="BEGIN_LEARN_MORE_LINK" />詳細<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="1430915738399379752">印刷</translation>
<translation id="1432187715652018471">このページはサービス ハンドラのインストールを求めています。</translation>
-<translation id="1432581352905426595">検索エンジンの管理</translation>
+<translation id="1432581352905426595">検索エンジンを管理</translation>
<translation id="1436185428532214179">デバイスのファイルやフォルダの編集を要求できる</translation>
<translation id="1442386063175183758">右観音折り</translation>
<translation id="1442987760062738829">パンチ</translation>
@@ -343,7 +343,7 @@
<translation id="1807246157184219062">明</translation>
<translation id="1807528111851433570">開始シート</translation>
<translation id="1812527064848182527">横向き</translation>
-<translation id="1813414402673211292">閲覧履歴データの削除</translation>
+<translation id="1813414402673211292">閲覧履歴データを削除</translation>
<translation id="182139138257690338">自動ダウンロード</translation>
<translation id="1821930232296380041">無効なリクエストまたはリクエスト パラメータです</translation>
<translation id="1822540298136254167">アクセスしたウェブサイトと閲覧時間</translation>
@@ -403,7 +403,7 @@
<translation id="2001146170449793414">{COUNT,plural, =1{他 1 個}other{他 # 個}}</translation>
<translation id="2003709556000175978">今すぐパスワードを再設定してください</translation>
<translation id="2003775180883135320">4 穴パンチ(上)</translation>
-<translation id="201174227998721785">Chrome の設定ですべてのサイトに保存されている権限とデータを管理する</translation>
+<translation id="201174227998721785">Chrome の設定ですべてのサイトに保存されている権限とデータを管理します</translation>
<translation id="2019607688127825327">[ユーザー補助設定を管理] ボタンです。Enter キーを押すと Chrome の設定でユーザー補助ツールをカスタマイズできます</translation>
<translation id="2025115093177348061">拡張現実(AR)</translation>
<translation id="2025186561304664664">プロキシは自動設定になっています。</translation>
@@ -535,7 +535,7 @@
<translation id="2380886658946992094">Legal</translation>
<translation id="2383455408879745299">Chrome の設定でユーザー補助ツールをカスタマイズします</translation>
<translation id="2384307209577226199">企業のデフォルト</translation>
-<translation id="2385809941344967209">Chrome の設定で Chrome を更新する</translation>
+<translation id="2385809941344967209">Chrome の設定で Chrome を更新します</translation>
<translation id="2386255080630008482">サーバーの証明書は取り消されています。</translation>
<translation id="239293030466334554">オープンカー</translation>
<translation id="2392959068659972793">値が設定されていないポリシーを表示する</translation>
@@ -665,7 +665,7 @@
<translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" /> です。Tab キー、Enter キーの順に押すと、Chrome の設定でお支払いとクレジット カードの情報を管理します</translation>
<translation id="271663710482723385">全画面表示を終了するには |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| を押します</translation>
<translation id="2721148159707890343">リクエストを正常に送信しました</translation>
-<translation id="2723669454293168317">Chrome の設定で安全確認を実行</translation>
+<translation id="2723669454293168317">Chrome の設定で安全確認を実行します</translation>
<translation id="2726001110728089263">サイドトレイ</translation>
<translation id="2728127805433021124">サーバーの証明書は脆弱な署名アルゴリズムを使用して署名されています。</translation>
<translation id="2730326759066348565"><ph name="BEGIN_LINK" />接続診断ツールを実行する<ph name="END_LINK" /></translation>
@@ -691,7 +691,7 @@
<translation id="2824775600643448204">アドレス検索バー</translation>
<translation id="2826760142808435982">接続は <ph name="CIPHER" /> を使用して暗号化および認証されており、<ph name="KX" /> が鍵交換メカニズムとして使用されています。</translation>
<translation id="2835170189407361413">フォームをクリア</translation>
-<translation id="2839032553903800133">通知がブロックされています</translation>
+<translation id="2839032553903800133">通知をブロック中</translation>
<translation id="2839501879576190149">偽のサイトにアクセスしようとしています</translation>
<translation id="2850739647070081192">Invite(封筒)</translation>
<translation id="2854764410992194509">インターネット サービス プロバイダ(ISP)</translation>
@@ -852,7 +852,7 @@
<translation id="3287510313208355388">オンライン時にダウンロード</translation>
<translation id="3288238092761586174">お客様のお支払い情報を検証するため、<ph name="URL" /> は追加の手順を必要とする場合があります</translation>
<translation id="3293642807462928945"><ph name="POLICY_NAME" /> ポリシーの詳細</translation>
-<translation id="3295444047715739395">Chrome の設定でパスワードを表示、管理する</translation>
+<translation id="3295444047715739395">Chrome の設定でパスワードを表示、管理します</translation>
<translation id="3303855915957856445">一致する結果は見つかりませんでした</translation>
<translation id="3304073249511302126">Bluetooth のスキャン</translation>
<translation id="33073482541490531">たった今使用したパスワードがデータ侵害で検出されました。パスワード マネージャーでは、このパスワードを今すぐ変更することをおすすめします。</translation>
@@ -896,7 +896,7 @@
<translation id="3399952811970034796">配達先住所</translation>
<translation id="3402261774528610252">このサイトの読み込みで、TLS 1.0 または TLS 1.1 の接続が使用されました。これらの TLS バージョンのサポートは終了し、今後無効となる予定です。無効になると、このサイトは読み込めなくなります。サーバーで TLS 1.2 以降を有効にする必要があります。</translation>
<translation id="3405664148539009465">フォントをカスタマイズ</translation>
-<translation id="3409896703495473338">セキュリティ設定を管理する</translation>
+<translation id="3409896703495473338">セキュリティ設定を管理</translation>
<translation id="3414952576877147120">サイズ:</translation>
<translation id="3417660076059365994">アップロードまたは添付したファイルは分析のため Google Cloud または第三者に送信されます。たとえば、機密データやマルウェアがないかスキャンされます。</translation>
<translation id="3422248202833853650">メモリを解放するために、他のプログラムを終了してみてください。</translation>
@@ -1220,7 +1220,7 @@
<translation id="4306812610847412719">クリップボード</translation>
<translation id="4312613361423056926">B2</translation>
<translation id="4312866146174492540">ブロック(デフォルト)</translation>
-<translation id="4314815835985389558">同期の管理</translation>
+<translation id="4314815835985389558">同期を管理</translation>
<translation id="4318312030194671742">Paint Preview Compositor サービス</translation>
<translation id="4318566738941496689">デバイスの名前とネットワーク アドレス</translation>
<translation id="4325600325087822253">トレイ 17</translation>
@@ -1479,7 +1479,7 @@
<translation id="503498442187459473"><ph name="HOST" /> から、カメラとマイクの使用許可を求められています</translation>
<translation id="5035135400558156732">ガーデニング</translation>
<translation id="5039762155821394373">フォントサイズ</translation>
-<translation id="5039804452771397117">許可</translation>
+<translation id="5039804452771397117">許可する</translation>
<translation id="5040262127954254034">プライバシー</translation>
<translation id="5043480802608081735">コピーしたリンク</translation>
<translation id="5044545992476246592">たった今使用したパスワードがデータ侵害で検出されました。Google アシスタントを使用して、パスワードを自動で変更できます。</translation>
@@ -1575,7 +1575,7 @@
<translation id="5273658854610202413">警告: このポリシーは統合可能な辞書ポリシーに含まれていないため、PolicyDictionaryMultipleSourceMergeList ポリシーで指定されているとおりには統合されませんでした。</translation>
<translation id="5273881944177595304">ウェブ アプリケーション、オンライン ツール</translation>
<translation id="5274025349362408263">書籍、文学</translation>
-<translation id="5279286380302340275">ダウンロードを管理する</translation>
+<translation id="5279286380302340275">ダウンロードを管理</translation>
<translation id="5283044957620376778">B1</translation>
<translation id="5284295735376057059">ドキュメント プロパティ</translation>
<translation id="528468243742722775">終了</translation>
@@ -1694,7 +1694,7 @@
<translation id="5607240918979444548">Architecture-C</translation>
<translation id="5610142619324316209">接続を確認する</translation>
<translation id="5610807607761827392">カードと住所は [<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />] で管理できます。</translation>
-<translation id="561165882404867731">Google 翻訳でこのページを翻訳する</translation>
+<translation id="561165882404867731">Google 翻訳でこのページを翻訳します</translation>
<translation id="5612720917913232150"><ph name="URL" /> から、パソコンの現在地情報の使用許可を求められています</translation>
<translation id="561669346091975195">SF 番組、ファンタジー番組</translation>
<translation id="5617949217645503996"><ph name="HOST_NAME" /> でリダイレクトが繰り返し行われました。</translation>
@@ -2259,7 +2259,7 @@
<translation id="7298195798382681320">推奨</translation>
<translation id="7300012071106347854">コバルトブルー</translation>
<translation id="7304030187361489308">高め</translation>
-<translation id="7304562222803846232">Google アカウントのプライバシー設定を管理する</translation>
+<translation id="7304562222803846232">Google アカウントのプライバシー設定を管理</translation>
<translation id="7305756307268530424">低速から開始</translation>
<translation id="7308436126008021607">バックグラウンド同期</translation>
<translation id="7310392214323165548">間もなくデバイスが再起動します</translation>
@@ -2563,7 +2563,7 @@
<translation id="8070439594494267500">アプリのアイコン</translation>
<translation id="8074253406171541171">10x13(封筒)</translation>
<translation id="8075736640322370409">新しい Google スプレッドシートをすばやく作成します</translation>
-<translation id="8075898834294118863">サイトの設定を管理する</translation>
+<translation id="8075898834294118863">サイトの設定を管理</translation>
<translation id="8078141288243656252">回転時に注釈を追加することはできません</translation>
<translation id="8079031581361219619">このサイトを再読み込みしますか?</translation>
<translation id="8081087320434522107">セダン</translation>
@@ -2640,7 +2640,7 @@
<translation id="8281084378435768645">Large-Photo</translation>
<translation id="8281886186245836920">スキップ</translation>
<translation id="8282947398454257691">デバイス固有の ID の認識</translation>
-<translation id="8284769179630993263">Chrome の設定でセーフ ブラウジングなどを管理する</translation>
+<translation id="8284769179630993263">Chrome の設定でセーフ ブラウジングなどを管理します</translation>
<translation id="8286036467436129157">ログイン</translation>
<translation id="8288807391153049143">証明書を表示</translation>
<translation id="8289355894181816810">確認方法がわからない場合は、ネットワーク管理者までお問い合わせください。</translation>
@@ -2677,7 +2677,7 @@
<translation id="8381674639488873545">料金の請求は 1 回限りの場合も繰り返し行われる場合もあり、課金されたかどうかわからないこともあります。<ph name="BEGIN_LINK" />理解したうえで表示する<ph name="END_LINK" /></translation>
<translation id="8390725133630534698"><ph name="ORIGIN_NAME" /> から <ph name="VM_NAME" /> への貼り付けは管理者が設定したポリシーによってブロックされています</translation>
<translation id="8398790343843005537">スマートフォンを検出</translation>
-<translation id="8405579342203358118">Chrome の設定で同期する情報を管理する</translation>
+<translation id="8405579342203358118">Chrome の設定で同期する情報を管理します</translation>
<translation id="8409413588194360210">支払いハンドラ</translation>
<translation id="8412145213513410671">障害数(<ph name="CRASH_COUNT" />)</translation>
<translation id="8412392972487953978">同じパスフレーズを 2 回入力する必要があります。</translation>
@@ -2711,11 +2711,11 @@
<translation id="8503813439785031346">ユーザー名</translation>
<translation id="8507227106804027148">コマンドライン</translation>
<translation id="8508648098325802031">検索アイコン</translation>
-<translation id="8511402995811232419">Cookie を管理する</translation>
+<translation id="8511402995811232419">Cookie を管理</translation>
<translation id="851353418319061866">正確性チェック</translation>
<translation id="8519753333133776369">管理者が許可した HID デバイス</translation>
<translation id="8522552481199248698">Chrome には Google アカウントの保護とパスワードの変更をサポートする機能があります。</translation>
-<translation id="8530813470445476232">Chrome の設定で閲覧履歴、Cookie、キャッシュなどを消去する</translation>
+<translation id="8530813470445476232">Chrome の設定で閲覧履歴、Cookie、キャッシュなどを削除します</translation>
<translation id="853332391023689529">ピックアップ トラック</translation>
<translation id="8533619373899488139">&lt;strong&gt;chrome://policy&lt;/strong&gt; で、ブロックされた URL のリストとシステム管理者が設定した他のポリシーを確認できます。</translation>
<translation id="8539500321752640291">2 つのアイテムの使用を許可しますか?</translation>
@@ -2824,7 +2824,7 @@
<translation id="8870413625673593573">最近閉じたタブ</translation>
<translation id="8870494189203302833">同じ順序(下向き)</translation>
<translation id="8870700989640064057">機密ファイルを印刷しますか?</translation>
-<translation id="8871553383647848643">ブラウザのデザインをカスタマイズ</translation>
+<translation id="8871553383647848643">ブラウザのデザインをカスタマイズします</translation>
<translation id="8874824191258364635">有効なクレジット カード番号を入力してください</translation>
<translation id="8876033571432926051">カジュアル ゲーム</translation>
<translation id="8877780815363510165">釣り</translation>
@@ -2941,7 +2941,7 @@
<translation id="917450738466192189">サーバーの証明書が無効です。</translation>
<translation id="9174623988242579721">カスタムカー、高性能車</translation>
<translation id="9174917557437862841">タブの切り替えボタンです。Enter キーを押すとこのタブに切り替わります</translation>
-<translation id="9179703756951298733">Chrome の設定でお支払いとクレジット カード情報を管理する</translation>
+<translation id="9179703756951298733">Chrome の設定でお支払いとクレジット カード情報を管理します</translation>
<translation id="9183302530794969518">Google ドキュメント</translation>
<translation id="9183425211371246419"><ph name="HOST_NAME" /> ではサポートされていないプロトコルが使用されています。</translation>
<translation id="9187461866967718678">エクストリーム スポーツ</translation>
diff --git a/chromium/components/strings/components_strings_kk.xtb b/chromium/components/strings/components_strings_kk.xtb
index 7802f1b9b36..533aed73218 100644
--- a/chromium/components/strings/components_strings_kk.xtb
+++ b/chromium/components/strings/components_strings_kk.xtb
@@ -425,7 +425,7 @@
<translation id="2053553514270667976">Пошта индексі</translation>
<translation id="2064691555167957331">{COUNT,plural, =1{1 ұсыныс}other{# ұсыныс}}</translation>
<translation id="2068528718802935086">Нәрестелер мен сәбилер</translation>
-<translation id="2071156619270205202">Бұл нөмір виртуалды карта нөмірі үшін жарамсыз.</translation>
+<translation id="2071156619270205202">Бұл нөмір виртуалдық карта нөмірі үшін жарамсыз.</translation>
<translation id="2071692954027939183">Сіз әдетте хабарландыруларға рұқсат бермейтін болғандықтан, олар автоматты түрде бөгелді.</translation>
<translation id="2072275792380684364">Сән және стиль</translation>
<translation id="2079545284768500474">Қайтару</translation>
@@ -701,7 +701,7 @@
<translation id="2854764410992194509">Интернет провайдерлері</translation>
<translation id="2856444702002559011"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> сайтындағы шабуылдаушылар ақпаратыңызды (мысалы, құпия сөздер, хабарлар немесе несиелік карталар) ұрлауға әрекет етуі мүмкін.<ph name="BEGIN_LEARN_MORE_LINK" />Толығырақ<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="2859806420264540918">Бұл сайтта мазалайтын немесе жалған ақпаратты жарнамалар көрсетіледі.</translation>
-<translation id="286512204874376891">Виртуалды карта қолданыстағы картаны алаяқтықтан қорғауға көмектеседі. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_ENROLLMENT_LEARN_MORE_LINK_LABEL" /></translation>
+<translation id="286512204874376891">Виртуалдық карта қолданыстағы картаны алаяқтықтан қорғауға көмектеседі. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_ENROLLMENT_LEARN_MORE_LINK_LABEL" /></translation>
<translation id="287596039013813457">Ақ ниетті</translation>
<translation id="28761159517501904">Фильмдер</translation>
<translation id="2876489322757410363">Сыртқы қолданба арқылы төлеу үшін инкогнито режимінен шығасыз. Жалғастыру керек пе?</translation>
@@ -841,7 +841,7 @@
<translation id="3252266817569339921">француз</translation>
<translation id="3256863843508922226">Зейнетке шығу және зейнетақы</translation>
<translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Calendar-да жылдам жаңа іс-шара жасау үшін Tab, содан кейін Enter пернесін басыңыз.</translation>
-<translation id="3261488570342242926">Виртуалды карта туралы толығырақ</translation>
+<translation id="3261488570342242926">Виртуалдық карта туралы толығырақ</translation>
<translation id="3264837738038045344">Chrome параметрлерін басқару түймесі, Chrome параметрлеріне өту үшін Enter пернесін басыңыз.</translation>
<translation id="3266793032086590337">Мән (қарама-қайшы)</translation>
<translation id="3268451620468152448">Ашық қойындылар</translation>
@@ -864,7 +864,7 @@
<translation id="3320021301628644560">Төлем мекенжайын қосу</translation>
<translation id="3324983252691184275">Қызыл күрең</translation>
<translation id="3329013043687509092">Қанықтық</translation>
-<translation id="3333762389743153920">Виртуалды карта үшін жарамсыз</translation>
+<translation id="3333762389743153920">Виртуалдық карта үшін жарамсыз</translation>
<translation id="3338095232262050444">Қауіпсіз</translation>
<translation id="3339440062908617027">Жүгіру және жүру</translation>
<translation id="3339446062576134663">Бұлт (Ash)</translation>
@@ -875,7 +875,7 @@
<translation id="3360103848165129075">Төлем өңдегіш парағы</translation>
<translation id="3360313521703038580">Экология және қоршаған орта</translation>
<translation id="3362968246557010467">Бұл саясат ескі <ph name="OLD_POLICY" /> саясатынан автоматты түрде көшірілді. Орнына осы саясатты пайдаланғаныңыз жөн.</translation>
-<translation id="3364869320075768271">Сайт (<ph name="URL" />) виртуалды шындық құрылғысын және деректерді пайдалануға рұқсат сұрайды.</translation>
+<translation id="3364869320075768271">Сайт (<ph name="URL" />) виртуалдық шындық құрылғысын және деректерді пайдалануға рұқсат сұрайды.</translation>
<translation id="3366477098757335611">Карталарды көру</translation>
<translation id="3369192424181595722">Сағат қатесі</translation>
<translation id="3369459162151165748">Автобөлшектер мен керек-жарақтар</translation>
@@ -922,7 +922,7 @@
<translation id="3454555520521576458">Өлшемін өзгертуге болады</translation>
<translation id="3456231139987291353">Number-11 (Envelope)</translation>
<translation id="3461266716147554923"><ph name="URL" /> беті буферге көшірілген мәтін мен кескіндерді көргісі келеді</translation>
-<translation id="3461824795358126837">Бөлектеу құралы</translation>
+<translation id="3461824795358126837">Ерекшелеу құралы</translation>
<translation id="3462200631372590220">Кеңейтілген мәліметті жасыру</translation>
<translation id="346601286295919445">Химия</translation>
<translation id="3467763166455606212">Карта иесінің аты қажет</translation>
@@ -967,7 +967,7 @@
<translation id="3603507503523709">Қолданбаны әкімші бөгеген</translation>
<translation id="3608932978122581043">Беру бағыты</translation>
<translation id="3611317423880285981">Үйге арналған тауарлар</translation>
-<translation id="3611395257124510155"><ph name="CARD_IDENTIFIER" /> виртуалды картасы</translation>
+<translation id="3611395257124510155"><ph name="CARD_IDENTIFIER" /> виртуалдық картасы</translation>
<translation id="3614103345592970299">Өлшемі: 2</translation>
<translation id="361438452008624280">"<ph name="LANGUAGE_ID" />" тізім жазбасы: тіл белгісіз немесе оған қолдау көрсетілмейді.</translation>
<translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />. Chrome параметрлерінен қауіпсіздік тексерісін іске қосу үшін Tab, сосын Enter пернесін басыңыз.</translation>
@@ -1174,7 +1174,7 @@
<ph name="SITE" /> сайты үшін сұрауыңызды орындай алмайды. Сайттың қауіпсіздік параметрлері мен
басқа сипаттарын конфигурациялау үшін сайт операторлары түпнұсқа саясаттарын қолдануы мүмкін.</translation>
<translation id="4210602799576081649">Растау кодының мерзімі өткен, жаңа код сұраңыз.</translation>
-<translation id="421066178035138955">Виртуалды шындық құрылғыларын және деректерді пайдалану</translation>
+<translation id="421066178035138955">Виртуалдық шындық құрылғыларын және деректерді пайдалану</translation>
<translation id="4213305257324635756">Анимациялық фильмдер</translation>
<translation id="4213500579045346575">Бодибилдинг</translation>
<translation id="4214357935346142455">кіру экраны профилі</translation>
@@ -1206,7 +1206,7 @@
<translation id="4250680216510889253">Жоқ</translation>
<translation id="4253168017788158739">Ескертпе</translation>
<translation id="425582637250725228">Енгізілген өзгертулер сақталмауы мүмкін.</translation>
-<translation id="425869179292622354">Қауіпсіздік виртуалды картамен күшейтілсін бе?</translation>
+<translation id="425869179292622354">Қауіпсіздік виртуалдық картамен күшейтілсін бе?</translation>
<translation id="4258748452823770588">Қолтаңба жарамсыз</translation>
<translation id="4261046003697461417">Қорғалған құжаттарға аннотация қосу мүмкін емес.</translation>
<translation id="4265872034478892965">Әкімші рұқсат берген</translation>
@@ -1348,13 +1348,13 @@
<translation id="4660567771874403130">Қуат және коммуналдық кәсіпорындар</translation>
<translation id="4666114623408286498">Фармацевтика және биотехнология</translation>
<translation id="4668929960204016307">,</translation>
-<translation id="4670064810192446073">Виртуалды шындық</translation>
+<translation id="4670064810192446073">Виртуалдық шындық</translation>
<translation id="4673460618347856347">Динозавр ойыны, ойнау</translation>
<translation id="467662567472608290">Бұл сервер өзінің <ph name="DOMAIN" /> екенін дәлелдей алмады; оның қауіпсіздік сертификатында қателер бар. Бұл дұрыс конфигурацияланбағаннан немесе зиянды бағдарламаның байланысқа кедергі келтіргенінен болуы мүмкін.</translation>
<translation id="4677585247300749148"><ph name="URL" /> арнайы мүмкіндіктер оқиғаларына жауап бергісі келеді</translation>
<translation id="467809019005607715">Google Slides</translation>
<translation id="4682496302933121474">Бет аударылсын ба?</translation>
-<translation id="468314109939257734">Виртуалды карта нөмірін көру</translation>
+<translation id="468314109939257734">Виртуалдық карта нөмірін көру</translation>
<translation id="4691835149146451662">Architecture-A (Envelope)</translation>
<translation id="4692623383562244444">Іздеу жүйелері</translation>
<translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation>
@@ -1374,7 +1374,7 @@
<translation id="4733082559415072992"><ph name="URL" /> құрылғыңыздың орналасқан жер деректерін пайдаланғысы келеді</translation>
<translation id="4736491186715342415">Моторлы көліктер</translation>
<translation id="4736825316280949806">Chromium браузерін қайта іске қосу</translation>
-<translation id="4736934858538408121">Виртуалды карта</translation>
+<translation id="4736934858538408121">Виртуалдық карта</translation>
<translation id="473775607612524610">Жаңарту</translation>
<translation id="4738601419177586157">Ұсынылатын сұрау: <ph name="TEXT" /></translation>
<translation id="4742407542027196863">Құпия сөздерді басқару...</translation>
@@ -1518,7 +1518,7 @@
<translation id="5109892411553231226">Төлеу әдістерін басқару</translation>
<translation id="5112422516732747637">A5</translation>
<translation id="5114288597538800140">18-науа</translation>
-<translation id="5114987907971894280">виртуалды шындық</translation>
+<translation id="5114987907971894280">виртуалдық шындық</translation>
<translation id="5115216390227830982">European-Edp</translation>
<translation id="5115232566827194440">Шектелген басқарылатын қонақ сеансын қайта анықтау</translation>
<translation id="5115563688576182185">(64 биттік)</translation>
@@ -1531,7 +1531,7 @@
<translation id="5127934926273826089">Гүлдер</translation>
<translation id="5135404736266831032">Мекенжайларды басқару...</translation>
<translation id="5136841603454277753">Дұрыс код енгізіңіз.</translation>
-<translation id="5138014172396933048">Қазір виртуалды карта қолжетімсіз. Банкіңізге хабарласыңыз.</translation>
+<translation id="5138014172396933048">Қазір виртуалдық карта қолжетімсіз. Банкіңізге хабарласыңыз.</translation>
<translation id="5138227688689900538">Жию</translation>
<translation id="5145883236150621069">Қате коды саясат жауабында көрсетіледі</translation>
<translation id="5146995429444047494"><ph name="ORIGIN" /> сайты үшін хабарландырулар бөгелді</translation>
@@ -1746,13 +1746,13 @@
<translation id="5743638595296120378">Көлік сатып алу</translation>
<translation id="5743898850056428078">Мотоцикл жарысы</translation>
<translation id="5745733273847572235">Орналасқан жеріңізді сұрай алады</translation>
-<translation id="5745980000221562234">{NUM_CARDS,plural, =1{Осы карта үшін виртуалды нөмірді пайдаланыңыз}other{Картаны таңдаңыз}}</translation>
+<translation id="5745980000221562234">{NUM_CARDS,plural, =1{Осы карта үшін виртуалдық нөмірді пайдаланыңыз}other{Картаны таңдаңыз}}</translation>
<translation id="5752552348183096912">Антиперспиранттар, дезодоранттар және денеге арналған спрейлер</translation>
<translation id="5754400531489347219">Үй жануарлары мен аңдар</translation>
<translation id="5759751709240058861">Камераны пайдалану және жылжыту</translation>
<translation id="5763042198335101085">Дұрыс электрондық пошта мекенжайын енгізіңіз</translation>
<translation id="5765072501007116331">Жеткізу әдістері мен талаптарын көру үшін мекенжайды таңдаңыз</translation>
-<translation id="57689295674415555">Виртуалды карта нөмірі толтырылмаған ба?</translation>
+<translation id="57689295674415555">Виртуалдық карта нөмірі толтырылмаған ба?</translation>
<translation id="5776313857861697733">Басымдық</translation>
<translation id="5781136890105823427">Эксперимент қосылды.</translation>
<translation id="578305955206182703">Қою сары</translation>
@@ -1806,7 +1806,7 @@
<translation id="5928444777041341328">Үй және бақша</translation>
<translation id="5932224571077948991">Сайтта мазалайтын не жалған ақпаратты жарнамалар көрсетіледі</translation>
<translation id="5937560539988385583">Бет аударылды.</translation>
-<translation id="5938153366081463283">Виртуалды карта қосыңыз.</translation>
+<translation id="5938153366081463283">Виртуалдық карта қосыңыз.</translation>
<translation id="5938793338444039872">Troy</translation>
<translation id="5946937721014915347"><ph name="SITE_NAME" /> ашылуда…</translation>
<translation id="5951495562196540101">Тұтынушының аккаунтымен тіркеу мүмкін емес (лицензия пакеті бар).</translation>
@@ -1821,7 +1821,7 @@
<translation id="5979084224081478209">Құпия сөздерді тексеру</translation>
<translation id="5980920751713728343">Index-3x5</translation>
<translation id="5984570616552610254">Камераның ылғалдылығы</translation>
-<translation id="5984712050237025014">Кеңейтілген және виртуалды шындық</translation>
+<translation id="5984712050237025014">Кеңейтілген және виртуалдық шындық</translation>
<translation id="598637245381783098">Төлем қолданбасы ашылмайды</translation>
<translation id="5989320800837274978">Бекітілген прокси серверлері де, .pac сценарий URL мекенжайы да көрсетілмеген.</translation>
<translation id="5992691462791905444">Z тәрізді етіп жиі бүктеу</translation>
@@ -2057,7 +2057,7 @@
<translation id="6687335167692595844">Қаріп өлшемі сұралды</translation>
<translation id="6687696737818665306">Актерлік шеберлік және театр</translation>
<translation id="6688743156324860098">Жаңарту…</translation>
-<translation id="6688775486821967877">Қазір виртуалды карта қолжетімсіз. Кейінірек қайталап көріңіз.</translation>
+<translation id="6688775486821967877">Қазір виртуалдық карта қолжетімсіз. Кейінірек қайталап көріңіз.</translation>
<translation id="6689249931105087298">Қара нүктені сығуға қатысты</translation>
<translation id="6689271823431384964">Сіз аккаунтқа кіргендіктен, Chrome браузері карталарыңызды Google аккаунтына сақтауды ұсынып отыр. Мұны "Параметрлер" бөлімінен өзгертуіңізге болады. Карта иесінің аты-жөнін аккаунтыңыздан алынады.</translation>
<translation id="6694681292321232194"><ph name="FIND_MY_PHONE_FOCUSED_FRIENDLY_MATCH_TEXT" />. Google аккаунтында құрылғыңызды табу үшін Tab, сосын Enter пернесін басыңыз.</translation>
@@ -2105,7 +2105,7 @@
<translation id="6831043979455480757">Аудару</translation>
<translation id="6833752742582340615">Қауіпсіз әрі жылдамырақ төлеу үшін карта мен төлем туралы ақпаратты Google аккаунтына сақтаңыз</translation>
<translation id="6839929833149231406">Аудан</translation>
-<translation id="6846340164947227603">Виртуалды карта нөмірін пайдалану...</translation>
+<translation id="6846340164947227603">Виртуалдық карта нөмірін пайдалану...</translation>
<translation id="6852204201400771460">Қолданба қайта жүктелсін бе?</translation>
<translation id="686485648936420384">Тұтыну ресурстары</translation>
<translation id="6865412394715372076">Бұл картаны дәл қазір растау мүмкін емес</translation>
@@ -2119,7 +2119,7 @@
<translation id="6888584790432772780">Chrome бұл режимде беттің оқылуын жеңілдетті. Chrome браузерінде бастапқы бет қорғалмаған байланыс арқылы алынды.</translation>
<translation id="6890443033788248019">Локацияны пайдалануға рұқсат берілсін бе?</translation>
<translation id="6891596781022320156">Саясат деңгейіне қолдау көрсетілмеген.</translation>
-<translation id="6895143722905299846">Виртуалды нөмір:</translation>
+<translation id="6895143722905299846">Виртуалдық нөмір:</translation>
<translation id="6895330447102777224">Картаңыз расталды</translation>
<translation id="6897140037006041989">Пайдаланушы агенті</translation>
<translation id="6898699227549475383">Ұйым (O)</translation>
@@ -2278,7 +2278,7 @@
<translation id="7334320624316649418">&amp;Қайта ретке келтіруді қайталау</translation>
<translation id="7335157162773372339">Камераңызды қолдануға рұқсат сұрай алады</translation>
<translation id="7337248890521463931">Жолдарды көбірек көрсету</translation>
-<translation id="7337418456231055214">Виртуалды карта нөмірі толтырылмаған ба? Көшірілетін карта мәліметтерін басыңыз. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
+<translation id="7337418456231055214">Виртуалдық карта нөмірі толтырылмаған ба? Көшірілетін карта мәліметтерін басыңыз. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
<translation id="7337706099755338005">Сіздің платформаңызда қолжетімді емес.</translation>
<translation id="733923710415886693">Сервер сертификаты Сертификат айқындығы саясатымен ашылмады.</translation>
<translation id="7341357280245177602">Жүрілген көліктер</translation>
@@ -2535,7 +2535,7 @@
<translation id="7977894662897852582">Edp</translation>
<translation id="7981129096182302364">Биге арналған және электрондық музыка</translation>
<translation id="7981260203882740562">Келесімен байланыстырылды:</translation>
-<translation id="798134797138789862">Виртуалды шындық құрылғыларын және деректерді пайдалануға рұқсат сұрай алады.</translation>
+<translation id="798134797138789862">Виртуалдық шындық құрылғыларын және деректерді пайдалануға рұқсат сұрай алады.</translation>
<translation id="7983008347525536475">Кроссоверлер</translation>
<translation id="7984945080620862648">Қазір <ph name="SITE" /> сайтына кіру мүмкін емес, себебі веб-сайт Chrome өңдей алмайтын шифрланған есептік деректерді жіберді. Желі қателері мен шабуылдары әдетте уақытша болғандықтан, бұл бет кейінірек жұмыс істеуі мүмкін.</translation>
<translation id="7986319120639858961"><ph name="CARD_TITLE" /> <ph name="TIME" /> <ph name="BOOKMARKED" /> <ph name="TITLE" /> <ph name="DOMAIN" /></translation>
@@ -2666,7 +2666,7 @@
<translation id="831997045666694187">Кеш</translation>
<translation id="8321476692217554900">хабарландырулар</translation>
<translation id="8332188693563227489"><ph name="HOST_NAME" /> сайтына кіруге тыйым салынған</translation>
-<translation id="833262891116910667">Бөлектеу</translation>
+<translation id="833262891116910667">Ерекшелеу</translation>
<translation id="8339163506404995330"><ph name="LANGUAGE" /> тіліндегі беттер аударылмайды</translation>
<translation id="8340095855084055290"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
<translation id="834457929814110454">Қауіп-қатерлерді түсінсеңіз, зиянды бағдарламалар жойылмай жатып, <ph name="BEGIN_LINK" />осы сайтқа кіруіңізге<ph name="END_LINK" /> болады.</translation>
@@ -2740,7 +2740,7 @@
<translation id="8564985650692024650">Chromium басқа сайттарда пайдаланылған <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> құпия сөзін қайта орнатуды ұсынады.</translation>
<translation id="8574899947864779331">Карталарыңызды жылдам растау үшін Touch ID пайдаланыңыз.</translation>
<translation id="8576310925653847813">Үй кинотеатры жүйелері</translation>
-<translation id="8577348305244205642">Виртуалды карта қолжетімсіз</translation>
+<translation id="8577348305244205642">Виртуалдық карта қолжетімсіз</translation>
<translation id="858637041960032120">Телефон нөмірін қосу</translation>
<translation id="8589998999637048520">Ең жақсы сапа</translation>
<translation id="8600271352425265729">Тек осы жолы</translation>
@@ -2817,7 +2817,7 @@
<translation id="883848425547221593">Басқа бетбелгілер</translation>
<translation id="884264119367021077">Жөнелту мекенжайы</translation>
<translation id="884923133447025588">Қайтарып алу механизмі табылмады.</translation>
-<translation id="8849262850971482943">Қауіпсіздікті арттыру үшін виртуалды картаны пайдаланыңыз.</translation>
+<translation id="8849262850971482943">Қауіпсіздікті арттыру үшін виртуалдық картаны пайдаланыңыз.</translation>
<translation id="8852567725116633427">Микроавтомобильдер және екі есікті шағын автомобильдер</translation>
<translation id="885306012106043620">Теннис</translation>
<translation id="8855742650226305367">Би</translation>
diff --git a/chromium/components/strings/components_strings_ko.xtb b/chromium/components/strings/components_strings_ko.xtb
index c9b07011c9c..2bc33b9b15c 100644
--- a/chromium/components/strings/components_strings_ko.xtb
+++ b/chromium/components/strings/components_strings_ko.xtb
@@ -145,7 +145,7 @@
<ph name="LIST_ITEM" />고용주 또는 학교
<ph name="LIST_ITEM" />인터넷 서비스 제공업체
<ph name="END_LIST" /></translation>
-<translation id="1337692097987160377">탭 공유</translation>
+<translation id="1337692097987160377">이 탭 공유</translation>
<translation id="1339601241726513588">등록 도메인:</translation>
<translation id="1340482604681802745">수령 주소</translation>
<translation id="1346748346194534595">오른쪽</translation>
@@ -259,7 +259,7 @@
<translation id="1592005682883173041">로컬 데이터 액세스</translation>
<translation id="1594030484168838125">선택</translation>
<translation id="1596296697375291157">스릴러, 범죄 및 미스터리 영화</translation>
-<translation id="160851722280695521">Chrome 공룡 게임 플레이</translation>
+<translation id="160851722280695521">Chrome 공룡 달리기 게임 플레이</translation>
<translation id="161042844686301425">청록색</translation>
<translation id="1611101756749861742">2번째 롤</translation>
<translation id="1615402009686901181">기밀 콘텐츠가 보일 때 관리자 정책에서 화면 캡처를 사용 중지합니다.</translation>
@@ -602,7 +602,7 @@
<translation id="2557417190997681027">비즈니스 여행</translation>
<translation id="2562087035394240049">노하우, DIY 및 전문가 콘텐츠</translation>
<translation id="2563042576090522782">신혼여행 및 로맨틱 휴가</translation>
-<translation id="2570734079541893434">설정 관리하기</translation>
+<translation id="2570734079541893434">설정 관리</translation>
<translation id="2573834589046842510">인쇄 및 출판</translation>
<translation id="257674075312929031">그룹화</translation>
<translation id="2576880857912732701">보안 설정 관리 버튼, Chrome 설정에서 세이프 브라우징 등의 기능을 관리하려면 Enter를 누르세요</translation>
diff --git a/chromium/components/strings/components_strings_lt.xtb b/chromium/components/strings/components_strings_lt.xtb
index a19caedce8d..ab48c8dd947 100644
--- a/chromium/components/strings/components_strings_lt.xtb
+++ b/chromium/components/strings/components_strings_lt.xtb
@@ -240,7 +240,7 @@ Kitu atveju tai bus užblokuota pagal jūsų privatumo nustatymus. Taip turinys,
<translation id="1549470594296187301">Norint naudoti šią funkciją, reikia įgalinti „JavaScript“.</translation>
<translation id="155039086686388498">Engineering-D</translation>
<translation id="1551884710160394169">Programinė įranga be mokesčio ar su laikinu mokesčiu</translation>
-<translation id="1553358976309200471">Atnaujinkite „Chrome“</translation>
+<translation id="1553358976309200471">Atnaujinti „Chrome“</translation>
<translation id="1555130319947370107">Mėlyna</translation>
<translation id="1559447966090556585">Gauti pranešimus?</translation>
<translation id="1559528461873125649">Nėra tokio failo ar katalogo</translation>
diff --git a/chromium/components/strings/components_strings_mr.xtb b/chromium/components/strings/components_strings_mr.xtb
index 4d28b6c9f60..b41b739d4c8 100644
--- a/chromium/components/strings/components_strings_mr.xtb
+++ b/chromium/components/strings/components_strings_mr.xtb
@@ -918,7 +918,7 @@
<translation id="3443726618221119081">Juuro-Ku-Kai</translation>
<translation id="3447661539832366887">या डिव्हाइसच्या मालकाने डायनासोर गेम बंद केला आहे.</translation>
<translation id="3447884698081792621">सर्टिफिकेट दाखवा (<ph name="ISSUER" /> ने जारी केलेले)</translation>
-<translation id="3452404311384756672">मध्यंतर प्राप्त करा:</translation>
+<translation id="3452404311384756672">मध्यंतर मिळवा:</translation>
<translation id="3453962258458347894">किती वेळा पुन्हा प्रयत्न केले</translation>
<translation id="3454555520521576458">आकार बदलण्यायोग्य</translation>
<translation id="3456231139987291353">Number-11 (Envelope)</translation>
diff --git a/chromium/components/strings/components_strings_ne.xtb b/chromium/components/strings/components_strings_ne.xtb
index 74ec6d01838..a382b01216b 100644
--- a/chromium/components/strings/components_strings_ne.xtb
+++ b/chromium/components/strings/components_strings_ne.xtb
@@ -1094,7 +1094,7 @@
<translation id="3964661563329879394">{COUNT,plural, =0{कुनै पनि होइन}=1{१ साइटबाट }other{# साइटहरूबाट }}</translation>
<translation id="3969052498612555048">तपाईंले आफ्नो कोड भेट्टाउन सक्नुभएन? <ph name="BEGIN_LINK" />नयाँ कोड प्राप्त गर्नुहोस्<ph name="END_LINK" /></translation>
<translation id="397105322502079400">हिसाब गर्दै...</translation>
-<translation id="3973234410852337861"><ph name="HOST_NAME" /> माथि रोक लगाइएको छ।</translation>
+<translation id="3973234410852337861"><ph name="HOST_NAME" /> लाई ब्लक गरिएको छ।</translation>
<translation id="3978338123949022456">सर्च मोड, <ph name="KEYWORD_SUFFIX" /> मार्फत क्वेरी खोज्न उक्त क्वेरी टाइप गर्नुहोस् र इन्टर थिच्नुहोस्</translation>
<translation id="398470910934384994">चराहरू</translation>
<translation id="3986705137476756801">अहिलेका लागि लाइभ क्याप्सन अफ गर्नुहोस्</translation>
diff --git a/chromium/components/strings/components_strings_nl.xtb b/chromium/components/strings/components_strings_nl.xtb
index 47a224426de..9f002f8fb5e 100644
--- a/chromium/components/strings/components_strings_nl.xtb
+++ b/chromium/components/strings/components_strings_nl.xtb
@@ -660,7 +660,7 @@ Anders wordt dit geblokkeerd door je privacyinstellingen. Hierdoor werkt de cont
<translation id="2702801445560668637">Leeslijst</translation>
<translation id="2704283930420550640">Waarde komt niet overeen met notatie.</translation>
<translation id="2704606927547763573">Gekopieerd</translation>
-<translation id="2705137772291741111">De in het cachegeheugen opgeslagen versie van deze site is niet bereikbaar.</translation>
+<translation id="2705137772291741111">De gecachete versie van deze site is niet bereikbaar.</translation>
<translation id="2709516037105925701">Automatisch invullen</translation>
<translation id="2713444072780614174">Wit</translation>
<translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />. Druk op Tab en vervolgens op Enter om je betalingen en creditcardgegevens te beheren in de Chrome-instellingen.</translation>
diff --git a/chromium/components/strings/components_strings_pa.xtb b/chromium/components/strings/components_strings_pa.xtb
index 1a6c86355b0..61eefe4e95f 100644
--- a/chromium/components/strings/components_strings_pa.xtb
+++ b/chromium/components/strings/components_strings_pa.xtb
@@ -1509,7 +1509,7 @@
<translation id="5114288597538800140">ਟ੍ਰੇਅ 18</translation>
<translation id="5114987907971894280">ਆਭਾਸੀ ਵਾਸਤਵਿਕਤਾ</translation>
<translation id="5115216390227830982">ਯੂਰਪੀ-Edp</translation>
-<translation id="5115232566827194440">ਪ੍ਰਤੀਬੰਧਿਤ ਕੀਤੇ ਗਏ ਪ੍ਰਬੰਧਿਤ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਨੂੰ ਓਵਰਰਾਈਡ ਕਰੋ</translation>
+<translation id="5115232566827194440">ਪ੍ਰਤਿਬੰਧਿਤ ਕੀਤੇ ਗਏ ਪ੍ਰਬੰਧਿਤ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਨੂੰ ਓਵਰਰਾਈਡ ਕਰੋ</translation>
<translation id="5115563688576182185">(64-bit)</translation>
<translation id="5123063207673082822">ਵੀਕੈਂਡ</translation>
<translation id="5123433949759960244">ਬਾਸਕਟਬਾਲ</translation>
diff --git a/chromium/components/strings/components_strings_pl.xtb b/chromium/components/strings/components_strings_pl.xtb
index 1f1619e56fd..ca4e27e343a 100644
--- a/chromium/components/strings/components_strings_pl.xtb
+++ b/chromium/components/strings/components_strings_pl.xtb
@@ -156,7 +156,7 @@ Jeśli się nie zgodzisz, zostaną one zablokowane ze względu na Twoje ustawien
<translation id="1355754231781595724">Bezpieczeństwo ruchu i pojazdów</translation>
<translation id="1357195169723583938">Kto i kiedy ostatnio używał urządzenia</translation>
<translation id="1358187717814494928">Utwórz arkusz</translation>
-<translation id="1360955481084547712">Otwórz nowe okno incognito, by przeglądać w trybie prywatnym</translation>
+<translation id="1360955481084547712">Otwórz nowe okno incognito, aby przeglądać w trybie prywatnym</translation>
<translation id="1363819917331173092">Nie proponuj tłumaczenia stron w tym języku: <ph name="SOURCE_LANGUAGE" /></translation>
<translation id="1364822246244961190">Ta zasada jest zablokowana. Jej wartość będzie ignorowana.</translation>
<translation id="1368318639262510626">Gra z dinozaurem. Pikselowy dinozaur biegnie przez pustynię, unikając kaktusów i pterodaktyli. Gdy usłyszysz dźwięk, naciśnij spację, aby przeskoczyć przeszkodę.</translation>
diff --git a/chromium/components/strings/components_strings_pt-BR.xtb b/chromium/components/strings/components_strings_pt-BR.xtb
index bfd9bff83ce..727ec9a6ff9 100644
--- a/chromium/components/strings/components_strings_pt-BR.xtb
+++ b/chromium/components/strings/components_strings_pt-BR.xtb
@@ -78,7 +78,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac
<translation id="1178581264944972037">Pausar</translation>
<translation id="1181037720776840403">Remover</translation>
<translation id="1186201132766001848">Verificar senhas</translation>
-<translation id="1195558154361252544">As notificações são bloqueadas automaticamente para todos os sites, exceto aqueles que têm permissão</translation>
+<translation id="1195558154361252544">As notificações são bloqueadas automaticamente para todos os sites, exceto para aqueles que têm permissão</translation>
<translation id="1197088940767939838">Laranja</translation>
<translation id="1201402288615127009">Próxima</translation>
<translation id="1201895884277373915">Mais deste site</translation>
@@ -280,7 +280,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac
<translation id="1642410292376109062">Botão para mudar a senha do Google. Pressione Enter para mudar a senha da sua Conta do Google</translation>
<translation id="1644574205037202324">Histórico</translation>
<translation id="1645368109819982629">Protocolo não compatível</translation>
-<translation id="1650602712345345441">Gerenciar configurações do Chrome</translation>
+<translation id="1650602712345345441">Gerencie as configurações do Chrome</translation>
<translation id="1652415888492971589">JIS B8</translation>
<translation id="1656024727720460136">O Chrome simplificou esta página para facilitar a leitura. A página original foi recuperada por uma conexão segura.</translation>
<translation id="1656489000284462475">Retirada</translation>
@@ -533,7 +533,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac
<translation id="236340516568226369">Menu de redimensionamento</translation>
<translation id="2367567093518048410">Nível</translation>
<translation id="2380886658946992094">Legal</translation>
-<translation id="2383455408879745299">Personalizar ferramentas de acessibilidade nas configurações do Chrome</translation>
+<translation id="2383455408879745299">Personalize as ferramentas de acessibilidade nas configurações do Chrome</translation>
<translation id="2384307209577226199">Padrão da empresa</translation>
<translation id="2385809941344967209">Atualize o navegador nas configurações do Chrome</translation>
<translation id="2386255080630008482">O certificado do servidor foi revogado.</translation>
@@ -556,7 +556,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac
<translation id="2465402087343596252">Arch E</translation>
<translation id="2465655957518002998">Escolher método de entrega</translation>
<translation id="2465688316154986572">Grampear</translation>
-<translation id="2465914000209955735">Gerenciar arquivos transferidos por download no Chrome</translation>
+<translation id="2465914000209955735">Gerencie os arquivos transferidos por download no Chrome</translation>
<translation id="2466004615675155314">Mostrar informações da Web</translation>
<translation id="2467272921457885625">Especificações e estatísticas de hardware do dispositivo, como histórico de uso da CPU/RAM</translation>
<translation id="2467694685043708798"><ph name="BEGIN_LINK" />Executar o Diagnóstico de Rede<ph name="END_LINK" /></translation>
@@ -748,7 +748,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac
<translation id="2987034854559945715">Nenhum recurso correspondente</translation>
<translation id="2989742184762224133">Dois grampos na parte superior</translation>
<translation id="2991174974383378012">Compartilhar com websites</translation>
-<translation id="299122504639061328">Gerenciar a pesquisa no site e o mecanismo de pesquisa padrão</translation>
+<translation id="299122504639061328">Gerencie a pesquisa no site e o mecanismo de pesquisa padrão</translation>
<translation id="2991571918955627853">Você não pode visitar <ph name="SITE" /> agora, porque o site usa HSTS. Erros de rede e ataques são geralmente temporários. Esta página provavelmente funcionará mais tarde.</translation>
<translation id="2995517112308048736">Tamanho do arquivo:</translation>
<translation id="299990983510665749">Carros hatch</translation>
diff --git a/chromium/components/strings/components_strings_pt-PT.xtb b/chromium/components/strings/components_strings_pt-PT.xtb
index b5f1868d03d..9aeb71e3cec 100644
--- a/chromium/components/strings/components_strings_pt-PT.xtb
+++ b/chromium/components/strings/components_strings_pt-PT.xtb
@@ -606,7 +606,7 @@ Se não permitir, isto será bloqueado pelas suas definições de privacidade. I
<translation id="2557417190997681027">Viagens de negócios</translation>
<translation id="2562087035394240049">Faça você mesmo e conteúdo para especialistas e de procedimentos</translation>
<translation id="2563042576090522782">Luas de mel e escapadelas românticas</translation>
-<translation id="2570734079541893434">Faça a gestão das definições</translation>
+<translation id="2570734079541893434">Gerir definições</translation>
<translation id="2573834589046842510">Impressão e publicação</translation>
<translation id="257674075312929031">Grupo</translation>
<translation id="2576880857912732701">Botão Gerir definições de segurança, prima Enter para gerir a Navegação segura e muito mais nas definições do Chrome</translation>
@@ -1933,7 +1933,7 @@ Se não permitir, isto será bloqueado pelas suas definições de privacidade. I
<translation id="6305205051461490394"><ph name="URL" /> está inacessível.</translation>
<translation id="6312113039770857350">Página Web não disponível</translation>
<translation id="6316226860534107313">Scooters e motorizadas</translation>
-<translation id="63172326633386613">Faça a gestão das definições de acessibilidade</translation>
+<translation id="63172326633386613">Gerir definições de acessibilidade</translation>
<translation id="6319249456820053699">Câmaras e câmaras de vídeo</translation>
<translation id="6321917430147971392">Verificar as definições do DNS</translation>
<translation id="6322182122604171028">Não foi possível utilizar o Windows Hello</translation>
@@ -2246,7 +2246,7 @@ Se não permitir, isto será bloqueado pelas suas definições de privacidade. I
<translation id="7219179957768738017">A ligação utiliza <ph name="SSL_VERSION" />.</translation>
<translation id="7220786058474068424">A processar</translation>
<translation id="7221855153210829124">Mostrar notificações</translation>
-<translation id="722454870747268814">Novo separador de navegação anónima</translation>
+<translation id="722454870747268814">Novo separador anónimo</translation>
<translation id="7233592378249864828">Imprimir folha de confirmação</translation>
<translation id="7234638337680728591">Preços da gasolina e combustíveis</translation>
<translation id="7237492777898608035">Não voltar a mostrar esta mensagem para este site</translation>
diff --git a/chromium/components/strings/components_strings_ru.xtb b/chromium/components/strings/components_strings_ru.xtb
index 2f766e5b156..f2073a408f4 100644
--- a/chromium/components/strings/components_strings_ru.xtb
+++ b/chromium/components/strings/components_strings_ru.xtb
@@ -78,7 +78,7 @@
<translation id="1178581264944972037">Пауза</translation>
<translation id="1181037720776840403">Удалить</translation>
<translation id="1186201132766001848">Проверить пароли</translation>
-<translation id="1195558154361252544">Уведомления со всех сайтов, кроме тех, которым вы предоставили отдельные разрешения, автоматически блокируются.</translation>
+<translation id="1195558154361252544">Уведомления от всех сайтов блокируются автоматически – кроме тех, которым вы дали разрешение.</translation>
<translation id="1197088940767939838">Оранжевый</translation>
<translation id="1201402288615127009">Далее</translation>
<translation id="1201895884277373915">Другие записи по этому сайту</translation>
@@ -259,7 +259,7 @@
<translation id="1592005682883173041">Доступ к данным на устройстве</translation>
<translation id="1594030484168838125">Выбрать</translation>
<translation id="1596296697375291157">Триллеры, криминальные и детективные фильмы</translation>
-<translation id="160851722280695521">Играть в Chrome Dino</translation>
+<translation id="160851722280695521">Играть в игру Dino Run в Chrome</translation>
<translation id="161042844686301425">Голубой</translation>
<translation id="1611101756749861742">Второй рулон</translation>
<translation id="1615402009686901181">Администратор запретил запись экрана, когда видны конфиденциальные данные.</translation>
@@ -1048,7 +1048,7 @@
<translation id="3807270098669886186">Поставщики услуг телефонной связи</translation>
<translation id="3807366285948165054">Смещение изображения по оси X</translation>
<translation id="3807873520724684969">Заблокирован опасный контент</translation>
-<translation id="3810973564298564668">Перейти</translation>
+<translation id="3810973564298564668">Управление</translation>
<translation id="3816482573645936981">Значение (заменяемое)</translation>
<translation id="382518646247711829">Если вы используете прокси-сервер...</translation>
<translation id="3827112369919217609">Абсолютный</translation>
@@ -2258,7 +2258,7 @@
<translation id="7298195798382681320">Рекомендованные</translation>
<translation id="7300012071106347854">Синий (кобальт)</translation>
<translation id="7304030187361489308">Высокий</translation>
-<translation id="7304562222803846232">Перейти в настройки конфиденциальности аккаунта Google</translation>
+<translation id="7304562222803846232">Управление настройками конфиденциальности аккаунта Google</translation>
<translation id="7305756307268530424">Запустить медленнее</translation>
<translation id="7308436126008021607">Фоновая синхронизация</translation>
<translation id="7310392214323165548">Скоро устройство будет перезагружено</translation>
diff --git a/chromium/components/strings/components_strings_te.xtb b/chromium/components/strings/components_strings_te.xtb
index 4c6638f9b39..0b6192bff66 100644
--- a/chromium/components/strings/components_strings_te.xtb
+++ b/chromium/components/strings/components_strings_te.xtb
@@ -32,7 +32,7 @@
<translation id="1056898198331236512">హెచ్చరిక</translation>
<translation id="1058344460600311577"><ph name="PLAY_CHROME_DINO_GAME_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chromeలో Dino Run గేమ్‌ను ఆడటానికి Tabను నొక్కి, ఆపై Enterను నొక్కండి</translation>
<translation id="1058479211578257048">కార్డ్‌లు సేవ్ చేయబడుతున్నాయి...</translation>
-<translation id="10614374240317010">ఎప్పటికి సేవ్ చెయ్యబడవు</translation>
+<translation id="10614374240317010">ఎప్పటికి సేవ్ చేయబడవు</translation>
<translation id="1062160989074299343">Prc10 (ఎన్వలప్)</translation>
<translation id="106701514854093668">డెస్క్‌టాప్‌ బుక్‌మార్క్‌లు</translation>
<translation id="1068672505746868501"><ph name="SOURCE_LANGUAGE" />లో ఉన్న పేజీలను ఎప్పుడూ అనువదించవద్దు</translation>
@@ -64,7 +64,7 @@
<translation id="1151972924205500581">పాస్‌వర్డ్ అవసరం</translation>
<translation id="1156303062776767266">మీరు స్థానిక లేదా షేర్ చేసిన ఫైల్‌ను చూస్తున్నారు</translation>
<translation id="1158211211994409885"><ph name="HOST_NAME" /> ఊహించని విధంగా కనెక్షన్‌ను మూసివేసింది.</translation>
-<translation id="115926840831309955">మీ CVCని తనిఖీ చేసి మళ్ళీ ప్రయత్నించండి లేదా గడువు ముగింపు తేదీని అప్‌డేట్ చేయండి</translation>
+<translation id="115926840831309955">మీ CVCని చెక్ చేసి మళ్ళీ ప్రయత్నించండి లేదా గడువు ముగింపు తేదీని అప్‌డేట్ చేయండి</translation>
<translation id="1161325031994447685">Wi-Fiకి మళ్లీ కనెక్ట్ చేయడం</translation>
<translation id="1165039591588034296">ఎర్రర్</translation>
<translation id="1165174597379888365">పేజీని సందర్శించినప్పుడు</translation>
@@ -76,7 +76,7 @@
<translation id="1175875016430184367">కుడివైపు ట్రిపుల్ స్టేపుల్</translation>
<translation id="1177802847690410663">వెబ్ బ్రౌజర్‌లు</translation>
<translation id="1178581264944972037">పాజ్ చేయి</translation>
-<translation id="1181037720776840403">తీసివేయి</translation>
+<translation id="1181037720776840403">తీసివేయండి</translation>
<translation id="1186201132766001848">పాస్‌వర్డ్‌లను చెక్ చేయండి</translation>
<translation id="1195558154361252544">మీరు అనుమతించినవి మినహా, ఇతర అన్ని సైట్‌లకు నోటిఫికేషన్‌లు ఆటోమేటిక్‌గా బ్లాక్ చేయబడ్డాయి</translation>
<translation id="1197088940767939838">నారింజ రంగు</translation>
@@ -102,10 +102,10 @@
<translation id="1246424317317450637">బోల్డ్</translation>
<translation id="1250759482327835220">తర్వాతిసారి మరింత వేగంగా పేమెంట్ చేయడానికి, మీ కార్డ్, పేరు మరియు బిల్లింగ్ అడ్రస్‌ను మీ Google ఖాతాకు సేవ్ చేయండి.</translation>
<translation id="1252799212227771492">'షీట్‌ను క్రియేట్ చేయండి' బటన్, కొత్త Google షీట్‌ను త్వరగా క్రియేట్ చేయడానికి Enterను నొక్కండి</translation>
-<translation id="1253921432148366685"><ph name="TYPE_1" />, <ph name="TYPE_2" /> (సమకాలీకరించబడ్డాయి)</translation>
+<translation id="1253921432148366685"><ph name="TYPE_1" />, <ph name="TYPE_2" /> (సింక్ చేయబడ్డాయి)</translation>
<translation id="1256368399071562588">&lt;p&gt;మీరు ఏదైనా వెబ్‌సైట్‌ను తెరవడానికి ప్రయత్నించినప్పుడు, అది తెరవబడకుంటే, ముందుగా ఈ సమస్య నివారణ ప్రక్రియ దశలను ఉపయోగించి ఎర్రర్‌ను పరిష్కరించడానికి ప్రయత్నించండి:&lt;/p&gt;
&lt;ol&gt;
- &lt;li&gt;వెబ్ అడ్రస్‌లో అక్షరక్రమ దోషాలు ఉన్నాయేమో తనిఖీ చేయండి.&lt;/li&gt;
+ &lt;li&gt;వెబ్ అడ్రస్‌లో అక్షరక్రమ దోషాలు ఉన్నాయేమో చెక్ చేయండి.&lt;/li&gt;
&lt;li&gt;మీ ఇంటర్నెట్ కనెక్షన్ సరిగ్గానే పని చేస్తున్నట్లు నిర్ధారించుకోండి.&lt;/li&gt;
&lt;li&gt;వెబ్‌సైట్ యజమానిని సంప్రదించండి.&lt;/li&gt;
&lt;/ol&gt;</translation>
@@ -125,7 +125,7 @@
<translation id="129553762522093515">ఇటీవల మూసివెయ్యబడినవి</translation>
<translation id="1296930489679394997">విక్రయాలు</translation>
<translation id="129863573139666797"><ph name="BEGIN_LINK" />మీ కుక్కీలను తీసివేయడానికి ప్రయత్నించండి<ph name="END_LINK" /></translation>
-<translation id="1301324364792935241">మీ సెక్యూర్ DNS సెట్టింగ్‌లను తనిఖీ చేయండి</translation>
+<translation id="1301324364792935241">మీ సెక్యూర్ DNS సెట్టింగ్‌లను చెక్ చేయండి</translation>
<translation id="1307966114820526988">విస్మరించబడిన ఫీచర్‌లు</translation>
<translation id="1308113895091915999">ఆఫర్ అందుబాటులో ఉంది</translation>
<translation id="1314311879718644478">అగ్‌మెంటెడ్ రియాలిటీ కంటెంట్‌ను చూడండి</translation>
@@ -166,7 +166,7 @@
<translation id="1374692235857187091">సూచిక-4x6 (పోస్ట్‌కార్డ్)</translation>
<translation id="1375198122581997741">వెర్షన్ గురించి</translation>
<translation id="1376836354785490390">తక్కువ చూపు</translation>
-<translation id="1377321085342047638">కార్డ్ సంఖ్య</translation>
+<translation id="1377321085342047638">కార్డ్ నంబర్</translation>
<translation id="1380591466760231819">లెటర్ ఫోల్డ్</translation>
<translation id="138218114945450791">లేత నీలి రంగు</translation>
<translation id="1382194467192730611">మీ నిర్వాహకుడు అనుమతించే USB పరికరం</translation>
@@ -238,7 +238,7 @@
<translation id="153384715582417236">ఇప్పటికి ఇంతే</translation>
<translation id="1536390784834419204">పేజీని అనువాదం చేయి</translation>
<translation id="1539840569003678498">రిపోర్ట్ పంపబడింది:</translation>
-<translation id="154408704832528245">బట్వాడా అడ్రస్‌ను ఎంచుకోండి</translation>
+<translation id="154408704832528245">డెలివరీ అడ్రస్‌ను ఎంచుకోండి</translation>
<translation id="1549470594296187301">ఈ ఫీచర్‌ను ఉపయోగించడానికి జావాస్క్రిప్ట్ తప్పనిసరిగా ప్రారంభించాలి.</translation>
<translation id="155039086686388498">ఇంజనీరింగ్-D</translation>
<translation id="1551884710160394169">ఫ్రీవేర్ &amp; షేర్‌వేర్</translation>
@@ -349,15 +349,15 @@
<translation id="1807246157184219062">లేత</translation>
<translation id="1807528111851433570">మొదటి షీట్</translation>
<translation id="1812527064848182527">ల్యాండ్‌స్కేప్‌లో ఉంది</translation>
-<translation id="1813414402673211292">బ్రౌజింగ్‌ డేటాను క్లియర్ చేయి</translation>
+<translation id="1813414402673211292">బ్రౌజింగ్‌ డేటాను క్లియర్ చేయండి</translation>
<translation id="182139138257690338">ఆటోమేటిక్ డౌన్‌లోడ్‌లు</translation>
<translation id="1821930232296380041">చెల్లని రిక్వెస్ట్‌ లేదా రిక్వెస్ట్‌ పారామీట‌ర్‌లు</translation>
<translation id="1822540298136254167">మీరు సందర్శించిన వెబ్‌సైట్‌లు, వాటిపై వెచ్చించిన సమయం</translation>
<translation id="1824402189105105503">ఎయిత్ రోల్</translation>
-<translation id="1826516787628120939">తనిఖీ చేస్తోంది</translation>
+<translation id="1826516787628120939">చెక్ చేస్తోంది</translation>
<translation id="1828959155404624835">అద్దెకు కార్లు</translation>
<translation id="1834321415901700177">ఈ సైట్‌లో హానికరమైన ప్రోగ్రామ్‌లు ఉన్నాయి</translation>
-<translation id="1838374766361614909">శోధనను తీసివేయి</translation>
+<translation id="1838374766361614909">శోధనను తీసివేయండి</translation>
<translation id="1839551713262164453">విధాన విలువల క్రమబద్ధీకరణ ఎర్రర్‌లతో విఫలమైంది</translation>
<translation id="1842969606798536927">చెల్లింపు</translation>
<translation id="1855370856221982654">బాక్సింగ్</translation>
@@ -405,7 +405,7 @@
<translation id="1991830984769263878">ఆటోమొబైల్ బీమా</translation>
<translation id="1992184150316179036">రేడియో కంట్రోల్ &amp; మోడలింగ్</translation>
<translation id="1992331125980284532">JIS B3</translation>
-<translation id="1997484222658892567"><ph name="URL" /> శాశ్వతంగా అధిక డేటాని మీ స్థానిక కంప్యూటర్‌లో నిల్వ చేయాలనుకుంటోంది</translation>
+<translation id="1997484222658892567"><ph name="URL" /> శాశ్వతంగా అధిక డేటాను మీ స్థానిక కంప్యూటర్‌లో నిల్వ చేయాలనుకుంటోంది</translation>
<translation id="2001146170449793414">{COUNT,plural, =1{మరియు మరొకటి}other{మరియు మరో #}}</translation>
<translation id="2003709556000175978">ఇప్పుడే మీ పాస్‌వర్డ్‌ని రీసెట్ చేయండి</translation>
<translation id="2003775180883135320">ఎగువ భాగంలో నాలుగు రంధ్రాలు</translation>
@@ -414,7 +414,7 @@
<translation id="2025115093177348061">అగ్‌మెంటెడ్ రియాలిటీ</translation>
<translation id="2025186561304664664">ప్రాక్సీ ఆటోమేటిక్‌గా కాన్ఫిగర్ చేయబడేలా సెట్ చేయబడింది.</translation>
<translation id="2025891858974379949">అసురక్షితమైన కంటెంట్</translation>
-<translation id="2032962459168915086"><ph name="BEGIN_LINK" />ప్రాక్సీ మరియు ఫైర్‌వాల్‌ను తనిఖీ చేయడం<ph name="END_LINK" /></translation>
+<translation id="2032962459168915086"><ph name="BEGIN_LINK" />ప్రాక్సీ మరియు ఫైర్‌వాల్‌ను చెక్ చేయడం<ph name="END_LINK" /></translation>
<translation id="2034971124472263449">ఏదేమైనా సేవ్ చేయి</translation>
<translation id="2035400064145347639">ట్రావెల్ గైడ్‌లు &amp; యాత్రా విశేషాలు</translation>
<translation id="2036983605131262583">ఆల్టర్నేట్ రోల్</translation>
@@ -482,7 +482,7 @@
<translation id="2213606439339815911">నమోదులను పొందుతోంది...</translation>
<translation id="2213612003795704869">పేజీ ప్రింట్ చేయబడింది</translation>
<translation id="2215632862494199917">వాహన ప్రదర్శనలు</translation>
-<translation id="2215727959747642672">ఫైల్‌ను సవరించడం</translation>
+<translation id="2215727959747642672">ఫైల్‌ను ఎడిట్ చేయడం</translation>
<translation id="2215963164070968490">కుక్కలు</translation>
<translation id="2218879909401188352"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />లోని హ్యాకర్‌లు మీ పరికరంలో హానికరమైన యాప్‌లను ఇన్‌స్టాల్ చేయవచ్చు. మీ మొబైల్ బిల్‌లో అదృశ్య ఛార్జీలకు కారణం కావచ్చు లేదా మీ వ్యక్తిగత సమాచారాన్ని దొంగిలించవచ్చు. <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="2224337661447660594">ఇంటర్నెట్ లేదు</translation>
@@ -530,7 +530,7 @@
<translation id="2350796302381711542"><ph name="REPLACED_HANDLER_TITLE" />కి బదులుగా అన్ని <ph name="PROTOCOL" /> లింక్‌లను తెరవడానికి <ph name="HANDLER_HOSTNAME" />ను అనుమతించాలా?</translation>
<translation id="2354001756790975382">ఇతర బుక్‌మార్క్‌లు</translation>
<translation id="2354430244986887761">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />హానికర యాప్‌లను కనుగొంది<ph name="END_LINK" />.</translation>
-<translation id="2355395290879513365">దాడికి పాల్పడేవారు ఈ సైట్‌లో మీరు చూస్తున్న చిత్రాలను చూడగలరు, వాటిని సవరించడం ద్వారా మిమ్మల్ని మోసగించవచ్చు.</translation>
+<translation id="2355395290879513365">దాడికి పాల్పడేవారు ఈ సైట్‌లో మీరు చూస్తున్న చిత్రాలను చూడగలరు, వాటిని ఎడిట్ చేయడం ద్వారా మిమ్మల్ని మోసగించవచ్చు.</translation>
<translation id="2356070529366658676">అడుగు</translation>
<translation id="2357481397660644965"><ph name="DEVICE_MANAGER" /> మీ పరికరాన్ని మేనేజ్ చేస్తోంది, <ph name="ACCOUNT_MANAGER" /> మీ ఖాతాను మేనేజ్ చేస్తోంది.</translation>
<translation id="2359347814217202136">{NUM_DAYS,plural, =0{రోజు కంటే తక్కువలో}=1{రోజులో}other{{NUM_DAYS} రోజుల్లో}}</translation>
@@ -560,7 +560,7 @@
<translation id="2450021089947420533">Chrome హిస్టరీలో మీ యాక్టివిటీలు</translation>
<translation id="2463739503403862330">పూరించు</translation>
<translation id="2465402087343596252">ఆర్కిటెక్చర్-E</translation>
-<translation id="2465655957518002998">బట్వాడా పద్ధతిని ఎంచుకోండి</translation>
+<translation id="2465655957518002998">డెలివరీ పద్ధతిని ఎంచుకోండి</translation>
<translation id="2465688316154986572">స్టేపుల్</translation>
<translation id="2465914000209955735">Chromeలో మీరు డౌన్‌లోడ్ చేసిన ఫైల్‌లను మేనేజ్ చేయండి</translation>
<translation id="2466004615675155314">వెబ్ నుండి సమాచారాన్ని చూపించు</translation>
@@ -581,7 +581,7 @@
<translation id="2509167091171468975">ఆహారం &amp; కిరాణా వస్తువుల రిటైలర్‌లు</translation>
<translation id="2512101340618156538">అనుమతించనివి (ఆటోమేటిక్ సెట్టింగ్)</translation>
<translation id="2512413427717747692">Chromeను ఆటోమేటిక్ బ్రౌజర్‌గా సెట్ చేసే బటన్, 'Enter'ను నొక్కి iOS సెట్టింగ్‌లలో Chromeను ఆటోమేటిక్ బ్రౌజర్‌గా సెట్ చేయండి</translation>
-<translation id="2515629240566999685">మీ ప్రాంతంలో సిగ్నల్‌ను తనిఖీ చేయడం</translation>
+<translation id="2515629240566999685">మీ ప్రాంతంలో సిగ్నల్‌ను చెక్ చేయడం</translation>
<translation id="2521385132275182522">కుడివైపు దిగువ భాగంలో స్టేపుల్</translation>
<translation id="2521736961081452453">ఫారమ్‌ను క్రియేట్ చేయండి</translation>
<translation id="2523886232349826891">ఈ పరికరంలో మాత్రమే సేవ్ చేయబడి ఉంటుంది</translation>
@@ -592,7 +592,7 @@
<translation id="2536110899380797252">అడ్రస్‌ను జోడించు</translation>
<translation id="2539524384386349900">గుర్తించు</translation>
<translation id="2540701853218677861">టైమ్ స్టాంప్‌‌లు, విఫలమైన ప్రయత్నాలతో సహా పరికర లాగిన్/లాగవుట్ హిస్టరీ</translation>
-<translation id="2541219929084442027">మీ అజ్ఞాత ట్యాబ్‌లు అన్నింటినీ మూసివేసిన తర్వాత మీ బ్రౌజర్ హిస్టరీ, కుక్కీ స్టోర్ లేదా సెర్చ్ హిస్టరీలో మీరు అజ్ఞాత ట్యాబ్‌లలో వీక్షించిన పేజీలు ఉంచబడవు. అయితే, మీరు డౌన్‌లోడ్ చేసే ఏవైనా ఫైళ్లు లేదా మీరు క్రియేట్ చేసే ఏవైనా బుక్‌మార్క్‌లు అలాగే ఉంచబడతాయి.</translation>
+<translation id="2541219929084442027">మీ అజ్ఞాత ట్యాబ్‌లు అన్నింటినీ మూసివేసిన తర్వాత మీ బ్రౌజర్ హిస్టరీ, కుక్కీ స్టోర్ లేదా సెర్చ్ హిస్టరీలో మీరు అజ్ఞాత ట్యాబ్‌లలో చూసిన పేజీలు ఉంచబడవు. అయితే, మీరు డౌన్‌లోడ్ చేసే ఏవైనా ఫైళ్లు లేదా మీరు క్రియేట్ చేసే ఏవైనా బుక్‌మార్క్‌లు అలాగే ఉంచబడతాయి.</translation>
<translation id="2542106216580219892">సర్ఫింగ్</translation>
<translation id="2544546346215446551">మీ అడ్మినిస్ట్రేటర్ మీ పరికరాన్ని రీస్టార్ట్ చేశారు</translation>
<translation id="2544644783021658368">ఒక డాక్యుమెంట్</translation>
@@ -603,7 +603,7 @@
<translation id="255002559098805027"><ph name="HOST_NAME" /> చెల్లని ప్రతిస్పందనను పంపింది.</translation>
<translation id="2552246211866555379">హగాకీ</translation>
<translation id="2552295903035773204">ఇప్పటి నుండి కార్డ్‌లను నిర్ధారించడానికి స్క్రీన్ లాక్‌ను ఉపయోగించండి</translation>
-<translation id="2553853292994445426">మీ సెక్యూర్ DNS సెట్టింగ్‌లను తనిఖీ చేయండి. మీరు కాన్ఫిగర్ చేసిన సెక్యూర్ సర్వర్‌కు కనెక్ట్ కావడంలో వైఫల్యం ఎదురవుతూ ఉన్నట్టుంది.</translation>
+<translation id="2553853292994445426">మీ సెక్యూర్ DNS సెట్టింగ్‌లను చెక్ చేయండి. మీరు కాన్ఫిగర్ చేసిన సెక్యూర్ సర్వర్‌కు కనెక్ట్ కావడంలో వైఫల్యం ఎదురవుతూ ఉన్నట్టుంది.</translation>
<translation id="2556876185419854533">&amp;సవరించడాన్ని రద్దు చేయి</translation>
<translation id="2557417190997681027">బిజినెస్ ట్రావెల్</translation>
<translation id="2562087035394240049">ఎలా-చేయాలి, DIY &amp; నిపుణుల కంటెంట్</translation>
@@ -654,7 +654,7 @@
<translation id="2674804415323431591">సూచనలను దాచు</translation>
<translation id="2676271551327853224">ROC 8K</translation>
<translation id="2677696497921480781">పుట్టినరోజులు &amp; నామకరణం చేసిన రోజులు</translation>
-<translation id="2677748264148917807">నిష్క్రమించు</translation>
+<translation id="2677748264148917807">నిష్క్రమించండి</translation>
<translation id="2684561033061424857">11x12</translation>
<translation id="2687555958734450033">సరిపోయేలా అమర్చు</translation>
<translation id="2688969097326701645">అవును, కొనసాగించు</translation>
@@ -696,7 +696,7 @@
<translation id="2820957248982571256">స్కాన్ చేస్తోంది...</translation>
<translation id="2824775600643448204">అడ్రస్‌ మరియు శోధన బార్</translation>
<translation id="2826760142808435982"><ph name="CIPHER" />ను ఉపయోగించి కనెక్షన్ ఎన్‌క్రిప్ట్ చేయ‌బ‌డింది, ప్రామాణీకరించబడింది మరియు <ph name="KX" />ను కీలకమైన పరివర్తన విధానంగా ఉపయోగిస్తుంది.</translation>
-<translation id="2835170189407361413">ఫారమ్‌ను క్లియర్ చేయి</translation>
+<translation id="2835170189407361413">ఫారమ్‌ను క్లియర్ చేయండి</translation>
<translation id="2839032553903800133">నోటిఫికేషన్‌లు బ్లాక్ చేయబడ్డాయి</translation>
<translation id="2839501879576190149">ముందున్న సైట్ నకిలీది</translation>
<translation id="2850739647070081192">ఆహ్వానం (ఎన్వలప్)</translation>
@@ -725,7 +725,7 @@
<translation id="2916038427272391327">ఇతర ప్రోగ్రామ్‌లను మూసివేయండి</translation>
<translation id="2918922650248459053">డైవింగ్ &amp; నీటి లోపల చేసే యాక్టివిటీలు</translation>
<translation id="2922350208395188000">సర్వర్ యొక్క ప్రమాణపత్రం తనిఖీ చెయ్యబడదు.</translation>
-<translation id="2925673989565098301">బట్వాడా పద్ధతి</translation>
+<translation id="2925673989565098301">డెలివరీ పద్ధతి</translation>
<translation id="2928905813689894207">బిల్లింగ్ అడ్రస్‌</translation>
<translation id="2929525460561903222">{SHIPPING_ADDRESS,plural, =0{<ph name="SHIPPING_ADDRESS_PREVIEW" />}=1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> మరియు మరో <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> మరియు మరో <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" />}}</translation>
<translation id="2930577230479659665">ప్రతి కాపీ తర్వాత కత్తిరించండి</translation>
@@ -758,7 +758,7 @@
<translation id="2991571918955627853">వెబ్‌సైట్ HSTS ఉపయోగిస్తున్నందున మీరు ప్రస్తుతం <ph name="SITE" />‌ను సందర్శించలేరు. నెట్‌వర్క్ ఎర్ర‌ర్‌లు మరియు దాడులు సాధారణంగా తాత్కాలికమే. కనుక ఈ పేజీ తర్వాత పని చేయవచ్చు.</translation>
<translation id="2995517112308048736">ఫైల్ సైజ్:</translation>
<translation id="299990983510665749">హ్యాచ్‌బ్యాక్‌లు</translation>
-<translation id="3002501248619246229">ఇన్‌పుట్ ట్రే మీడియాను తనిఖీ చేయి</translation>
+<translation id="3002501248619246229">ఇన్‌పుట్ ట్రే మీడియాను చెక్ చేయండి</translation>
<translation id="3005723025932146533">సేవ్ చేయబడిన కాపీని చూపు</translation>
<translation id="3008447029300691911"><ph name="CREDIT_CARD" /> కార్డ్ CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్ చేయబడతాయి.</translation>
<translation id="3010559122411665027">లిస్ట్‌ నమోదు "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation>
@@ -785,9 +785,9 @@
<translation id="3096195745018397576">పిల్లల దుస్తులు</translation>
<translation id="3098513225387949945">'*'కు సమానమైన ఆకృతి డిజేబుల్ లిస్ట్‌లో ఉంది, ఇది పాలసీని డిజేబుల్ చేయడానికి సమానం, అందుకే ఇది విస్మరించబడింది.</translation>
<translation id="3105172416063519923">అసెట్ ID:</translation>
-<translation id="3107591622054137333"><ph name="BEGIN_LINK" />సెక్యూర్ DNS కాన్ఫిగరేషన్‌ని తనిఖీ చేస్తోంది<ph name="END_LINK" /></translation>
+<translation id="3107591622054137333"><ph name="BEGIN_LINK" />సెక్యూర్ DNS కాన్ఫిగరేషన్‌ని చెక్ చేస్తోంది<ph name="END_LINK" /></translation>
<translation id="3108943290502734357">మిడిల్ ట్రే</translation>
-<translation id="3109728660330352905">మీకు ఈ పేజీని వీక్షించడానికి అధికారం లేదు.</translation>
+<translation id="3109728660330352905">మీకు ఈ పేజీని చూడటానికి అధికారం లేదు.</translation>
<translation id="3113284927548439113">మూడవ షిఫ్ట్</translation>
<translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> కోసం మీరు మీ డేటాను బ్యాకప్ చేసి, ఈ <ph name="DEVICE_TYPE" />ని రిటర్న్ చేయాల్సి ఉంటుంది.</translation>
<translation id="3116158981186517402">లామినేట్</translation>
@@ -797,7 +797,7 @@
<translation id="3137507986424712703">{COUNT,plural, =0{ఏమీ లేవు}=1{1 ఖాతా సైన్ ఇన్ డేటా}other{# ఖాతాల సైన్ ఇన్ డేటా}}</translation>
<translation id="3145945101586104090">ప్రతిస్పందనను డీకోడ్ చేయడంలో విఫలమైంది</translation>
<translation id="3150653042067488994">తాత్కాలిక సర్వర్ ఎర్రర్</translation>
-<translation id="3154506275960390542">ఈ పేజీలో ఉన్న ఫారమ్‌ను సురక్షితంగా సమర్పించలేకపోవచ్చు. బదిలీ చేయబడే సమయంలో మీరు పంపే డేటాని ఇతరులు వీక్షించవచ్చు లేదా సర్వర్ స్వీకరించే డేటాను మార్చడం కోసం హ్యాకర్‌లు దీనిని సవరించవచ్చు.</translation>
+<translation id="3154506275960390542">ఈ పేజీలో ఉన్న ఫారమ్‌ను సురక్షితంగా సమర్పించలేకపోవచ్చు. బదిలీ చేయబడే సమయంలో మీరు పంపే డేటాను ఇతరులు చూడవచ్చు లేదా సర్వర్ స్వీకరించే డేటాను మార్చడం కోసం హ్యాకర్‌లు దీనిని ఎడిట్ చేయవచ్చు.</translation>
<translation id="3154987252551138431">'సమీపంలోని షేరింగ్'ను ఉపయోగిస్తున్నప్పుడు ఏదో తప్పు జరిగింది</translation>
<translation id="315504272643575312"><ph name="MANAGER" /> మీ ఖాతాను మేనేజ్ చేస్తోంది.</translation>
<translation id="3157931365184549694">పునరుద్ధరించు</translation>
@@ -805,7 +805,7 @@
<translation id="3162559335345991374">మీరు ఉపయోగిస్తున్న Wi-Fiకి మీరు దాని లాగిన్ పేజీని సందర్శించడం అవసరం.</translation>
<translation id="3169472444629675720">కనుగొను</translation>
<translation id="3174168572213147020">దీవి</translation>
-<translation id="3176929007561373547">ప్రాక్సీ సర్వర్ పని చేస్తున్నట్లు నిర్ధారించుకోవడానికి మీ ప్రాక్సీ సెట్టింగ్‌లను తనిఖీ చేయండి లేదా
+<translation id="3176929007561373547">ప్రాక్సీ సర్వర్ పని చేస్తున్నట్లు నిర్ధారించుకోవడానికి మీ ప్రాక్సీ సెట్టింగ్‌లను చెక్ చేయండి లేదా
మీ నెట్‌వర్క్ నిర్వాహకుడిని సంప్రదించండి. మీరు ప్రాక్సీ సర్వర్‌నే ఉపయోగిస్తున్నట్లు మీకు
నమ్మకంగా లేకుంటే:
<ph name="PLATFORM_TEXT" /></translation>
@@ -834,7 +834,7 @@
<translation id="3229041911291329567">మీ పరికరం, బ్రౌజర్‌ల వెర్షన్ సమాచారం</translation>
<translation id="323107829343500871"><ph name="CREDIT_CARD" /> కార్డ్ CVCని నమోదు చేయండి</translation>
<translation id="3234666976984236645">ఈ సైట్‌లో ఎప్పుడూ ముఖ్యమైన కంటెంట్‌ను గుర్తించు</translation>
-<translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, మీ బ్రౌజర్ రూపాన్ని అనుకూలీకరించడానికి 'Tab'ను నొక్కి, ఆపై 'Enter'ను నొక్కండి</translation>
+<translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, మీ బ్రౌజర్ రూపాన్ని అనుకూలంగా మార్చడానికి 'Tab'ను నొక్కి, ఆపై 'Enter'ను నొక్కండి</translation>
<translation id="3240791268468473923">సురక్షితమైన పేమెంట్ ఆధారానికి సంబంధించిన మ్యాచ్ అయ్యే ఆధారాల షీట్ ఏదీ తెరవబడలేదు</translation>
<translation id="324180406144491771">“<ph name="HOST_NAME" />” లింక్‌లు బ్లాక్ చేయబడ్డాయి</translation>
<translation id="3248611290851046188">మీకు యాడ్‌లను చూపడానికి ఇతర సైట్‌లు ఉపయోగించగల ఆసక్తులను ఈ సైట్ నిర్వచిస్తుంది. మీకు మరింత సందర్భోచితమైన యాడ్‌లను చూపడానికి ఈ సైట్ మీ ఆసక్తులను Chrome నుండి కూడా పొందుతుంది.</translation>
@@ -896,20 +896,20 @@
<translation id="3381668585148405088">మీ కొనుగోలును వెరిఫై చేయండి</translation>
<translation id="3383566085871012386">ప్రస్తుతం ఉన్న ప్రాధాన్యత క్రమం</translation>
<translation id="3387261909427947069">పేమెంట్ ఆప్షన్‌లు</translation>
-<translation id="3391030046425686457">బట్వాడా అడ్రస్‌</translation>
+<translation id="3391030046425686457">డెలివరీ అడ్రస్‌</translation>
<translation id="3391482648489541560">ఫైల్‌ను ఎడిట్ చేయడం</translation>
<translation id="3395827396354264108">పికప్ పద్ధతి</translation>
-<translation id="3399952811970034796">బట్వాడా అడ్రస్‌</translation>
+<translation id="3399952811970034796">డెలివరీ అడ్రస్‌</translation>
<translation id="3402261774528610252">ఈ సైట్‌ను లోడ్ చేయడానికి ఉపయోగించిన కనెక్షన్ TLS 1.0 లేదా TLS 1.1ను ఉపయోగించింది, ఇవి విస్మరించబడ్డాయి, భవిష్యత్తులో నిలిపివేయబడతాయి. ఒక సారి నిలిపివేయబడితే, యూజర్‌లు ఈ సైట్‌ను లోడ్ చేయకుండా నివారించబడతారు. సర్వర్ TLS 1.2 లేదా ఆపై వెర్షన్‌లను ఎనేబుల్ చేయాలి.</translation>
-<translation id="3405664148539009465">ఫాంట్‌లను అనుకూలంగా మార్చు</translation>
+<translation id="3405664148539009465">ఫాంట్‌లను అనుకూలంగా మార్చండి</translation>
<translation id="3409896703495473338">భద్రతా సెట్టింగ్‌లను మేనేజ్ చేయండి</translation>
<translation id="3414952576877147120">పరిమాణం:</translation>
<translation id="3417660076059365994">మీరు అప్‌లోడ్ లేదా జోడించిన ఫైల్స్ Google క్లౌడ్ లేదా థర్డ్ పార్టీలకు విశ్లేషణ కోసం పంపబడతాయి. ఉదాహరణకు, వాటిని సున్నితమైన వ్యక్తిగత సమాచారం లేదా మాల్‌వేర్ కోసం స్కాన్ చేయబడవచ్చు.</translation>
<translation id="3422248202833853650">మెమరీని ఖాళీ చేయడానికి ఇతర ప్రోగ్రామ్‌ల నుండి నిష్క్రమించడాన్ని ప్రయత్నించండి.</translation>
<translation id="3422472998109090673"><ph name="HOST_NAME" />ని ప్రస్తుతం చేరుకోవడం సాధ్యపడదు.</translation>
<translation id="3423742043356668186">సిస్టమ్ పేర్కొన్నవి</translation>
-<translation id="3427092606871434483">అనుమతించు (డిఫాల్ట్)</translation>
-<translation id="3427342743765426898">&amp;సవరించడాన్ని పునరావృతం చేయి</translation>
+<translation id="3427092606871434483">అనుమతించండి (డిఫాల్ట్)</translation>
+<translation id="3427342743765426898">&amp;సవరించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="342781501876943858">మీరు మీ పాస్‌వర్డ్‌ని ఇతర సైట్‌లలో తిరిగి ఉపయోగించినట్లయితే దీనిని రీసెట్ చేయాల్సిందిగా Chromium సిఫార్సు చేస్తోంది.</translation>
<translation id="3428151540071562330">DnsOverHttpsTemplates సర్వర్ టెంప్లేట్‌ URIలు చెల్లవు, ఉపయోగించబడవు.</translation>
<translation id="3431636764301398940">ఈ కార్డ్‌ను ఈ పరికరానికి సేవ్ చేయి</translation>
@@ -954,12 +954,12 @@
<translation id="3566021033012934673">మీ కనెక్షన్ ప్రైవేట్ కాదు</translation>
<translation id="3567778190852720481">ఎంటర్‌ప్రైజ్ ఖాతాతో ఎన్‌రోల్ చేయడం సాధ్యపడదు (ఎంటర్‌ప్రైజ్ ఖాతాకు అర్హత లేదు).</translation>
<translation id="3574305903863751447"><ph name="CITY" />, <ph name="STATE" /> <ph name="COUNTRY" /></translation>
-<translation id="3575121482199441727">ఈ సైట్‌కు అనుమతించు</translation>
+<translation id="3575121482199441727">ఈ సైట్‌కు అనుమతించండి</translation>
<translation id="3576616784287504635"><ph name="SITE" />లో పొందుపరిచిన పేజీ ఇలా చెబుతోంది</translation>
<translation id="3577902790357386792">జిమ్నాస్టిక్స్</translation>
<translation id="3581089476000296252">ఈ పేజీ సిద్ధమైనప్పుడు Chrome మీకు తెలియజేస్తుంది. &lt;a&gt;రద్దు చేయి&lt;/a&gt;</translation>
<translation id="3582930987043644930">పేరు జోడించండి</translation>
-<translation id="3583757800736429874">&amp;తరలించడాన్ని పునరావృతం చేయి</translation>
+<translation id="3583757800736429874">&amp;తరలించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="3584299510153766161">దిగువ భాగంలో రెండు రంధ్రాలు</translation>
<translation id="3586931643579894722">వివరాలను దాచిపెట్టు</translation>
<translation id="3587738293690942763">మధ్యలో</translation>
@@ -975,7 +975,7 @@
<translation id="361438452008624280">లిస్ట్‌ నమోదు "<ph name="LANGUAGE_ID" />": తెలియని లేదా మద్దతు లేని భాష.</translation>
<translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome సెట్టింగ్‌లలో భద్రతా తనిఖీని రన్ చేయడానికి 'Tab'ను నొక్కి ఆపై 'Enter'ను నొక్కండి</translation>
<translation id="3615877443314183785">చెల్లుబాటు అయ్యే గడువు ముగింపు తేదీని నమోదు చేయండి</translation>
-<translation id="36224234498066874">బ్రౌజింగ్ డేటాను క్లియర్ చేయి...</translation>
+<translation id="36224234498066874">బ్రౌజింగ్ డేటాను క్లియర్ చేయండి...</translation>
<translation id="362276910939193118">పూర్తి చరిత్రను చూపించు</translation>
<translation id="3630155396527302611">ఇప్పటికే ఇది నెట్‌వర్క్‌ను యాక్సెస్ చేయడానికి అనుమతించబడిన ప్రోగ్రామ్ లాగా లిస్ట్‌ చేయబడి ఉంటే,
దీన్ని లిస్ట్‌ నుండి తీసివేసి, ఆపై మళ్లీ జోడించి ప్రయత్నించండి.</translation>
@@ -1017,7 +1017,7 @@
<translation id="3714633008798122362">వెబ్ క్యాలెండర్</translation>
<translation id="3714780639079136834">మొబైల్ డేటా లేదా Wi-Fiని ఆన్ చేయడం</translation>
<translation id="3715597595485130451">Wi-Fiకి కనెక్ట్ చేయండి</translation>
-<translation id="3717027428350673159"><ph name="BEGIN_LINK" />ప్రాక్సీ, ఫైర్‌వాల్ మరియు DNS కాన్ఫిగరేషన్‌ను తనిఖీ చేయడం<ph name="END_LINK" /></translation>
+<translation id="3717027428350673159"><ph name="BEGIN_LINK" />ప్రాక్సీ, ఫైర్‌వాల్ మరియు DNS కాన్ఫిగరేషన్‌ను చెక్ చేయడం<ph name="END_LINK" /></translation>
<translation id="372429172604983730">ఈ ఎర్రర్‌కు దారితీసే అప్లికేషన్‌లలో యాంటీవైరస్, ఫైర్‌వాల్ మరియు వెబ్ ఫిల్టరింగ్ లేదా ప్రాక్సీ సాఫ్ట్‌వేర్ ఉండవచ్చు.</translation>
<translation id="3727101516080730231"><ph name="CREATE_GOOGLE_SLIDE_FOCUSED_FRIENDLY_MATCH_TEXT" />, కొత్త Google ప్రెజెంటేషన్‌ను Slidesలో త్వరగా క్రియేట్ చేయడానికి Tabను నొక్కి, ఆపై Enterను నొక్కండి</translation>
<translation id="373042150751172459">B4 (ఎన్వలప్)</translation>
@@ -1132,7 +1132,7 @@
<translation id="4089152113577680600">ట్రే 14</translation>
<translation id="4098354747657067197">ముందున్న సైట్ మోసపూరితమైనది</translation>
<translation id="4099048595830172239">గోప్యమైన కంటెంట్ కనిపిస్తునప్పుడు, మీ స్క్రీన్‌ను <ph name="APPLICATION_TITLE" />తో షేర్ చేయడాన్ని అడ్మినిస్ట్రేటర్ పాలసీ సిఫార్సు చేయదు:</translation>
-<translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chromeలో ఫాంట్ సైజ్‌లను, టైప్‌ఫేస్‌లను అనుకూలీకరించడానికి Tabను నొక్కి, ఆపై Enterను నొక్కండి</translation>
+<translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chromeలో ఫాంట్ సైజ్‌లను, టైప్‌ఫేస్‌లను అనుకూలంగా మార్చడానికి Tabను నొక్కి, ఆపై Enterను నొక్కండి</translation>
<translation id="4101413244023615925">టెక్స్ట్, గ్రాఫిక్స్</translation>
<translation id="410148943680000050">డెస్క్‌టాప్ పబ్లిషింగ్</translation>
<translation id="4103249731201008433">పరికరం క్రమ సంఖ్య చెల్లదు</translation>
@@ -1141,14 +1141,14 @@
<translation id="4111546256784973544">పెయింట్‌బాల్</translation>
<translation id="4112140312785995938">వెనుకకు జరుపు</translation>
<translation id="4114146879518089587">సైట్‌కు కొనసాగండి</translation>
-<translation id="4116663294526079822">ఈ సైట్‌లో ఎల్లప్పుడూ అనుమతించు</translation>
+<translation id="4116663294526079822">ఈ సైట్‌లో ఎల్లప్పుడూ అనుమతించండి</translation>
<translation id="4116701314593212016">JIS B7</translation>
<translation id="4117700440116928470">విధానం పరిధికి మద్దతు లేదు.</translation>
<translation id="4121428309786185360">గడువు ముగిసేది</translation>
<translation id="4123572138124678573">దిగువ భాగంలో మూడు రంధ్రాలు</translation>
<translation id="4127575959421463246">ChromeOS ఫ్లాగ్‌ల కోసం వెతుకుతున్నారా? సందర్శించండి</translation>
<translation id="4129401438321186435">{COUNT,plural, =1{మరో 1}other{మరో #}}</translation>
-<translation id="4130226655945681476">నెట్‌వర్క్ కేబు‌ల్‌లు, మోడెమ్ మరియు రూటర్‌ను తనిఖీ చేయడం</translation>
+<translation id="4130226655945681476">నెట్‌వర్క్ కేబు‌ల్‌లు, మోడెమ్ మరియు రూటర్‌ను చెక్ చేయడం</translation>
<translation id="4134123981501319574">డాక్‌ను క్రియేట్ చేయండి</translation>
<translation id="413544239732274901">మరింత తెలుసుకోండి</translation>
<translation id="4142935452406587478">ట్రే 10</translation>
@@ -1167,9 +1167,9 @@
<translation id="4176535426287761656">టైమ్‌షేర్‌లు &amp; వెకేషన్ ప్రాపర్టీలు</translation>
<translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
<translation id="4194250254487269611">మీ కార్డ్‌ను ప్రస్తుతం సేవ్ చేయలేము</translation>
-<translation id="4196861286325780578">&amp;తరలించడాన్ని పునరావృతం చేయి</translation>
+<translation id="4196861286325780578">&amp;తరలించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="4202554117186904723">ఫిఫ్త్ రోల్</translation>
-<translation id="4203896806696719780"><ph name="BEGIN_LINK" />ఫైర్‌వాల్ మరియు యాంటీవైరస్ కాన్ఫిగరేషన్‌లను తనిఖీ చేయడం<ph name="END_LINK" /></translation>
+<translation id="4203896806696719780"><ph name="BEGIN_LINK" />ఫైర్‌వాల్ మరియు యాంటీవైరస్ కాన్ఫిగరేషన్‌లను చెక్ చేయడం<ph name="END_LINK" /></translation>
<translation id="4209092469652827314">పెద్దది</translation>
<translation id="4209166701302774460">మీరు వెళ్లాలనుకుంటున్న సర్వర్ <ph name="ORIGIN" />, దానికి చేసే అన్ని రిక్వెస్ట్‌లకు
ఆరిజిన్ పాలసీ వర్తింపజేసేలా అభ్యర్థించింది. కానీ అది ఇప్పుడు
@@ -1230,13 +1230,13 @@
<translation id="4306529830550717874">అడ్రస్‌ను సేవ్ చేయాలా?</translation>
<translation id="4306812610847412719">క్లిప్‌బోర్డ్</translation>
<translation id="4312613361423056926">B2</translation>
-<translation id="4312866146174492540">బ్లాక్ చేయి (డిఫాల్ట్)</translation>
+<translation id="4312866146174492540">బ్లాక్ చేయండి (డిఫాల్ట్)</translation>
<translation id="4314815835985389558">సింక్‌ను నిర్వహించండి</translation>
<translation id="4318312030194671742">పెయింట్ ప్రివ్యూ కంపోజిటర్ సర్వీస్</translation>
<translation id="4318566738941496689">మీ పరికరం పేరు, నెట్‌వర్క్ అడ్రస్‌</translation>
<translation id="4325600325087822253">ట్రే 17</translation>
<translation id="4325863107915753736">కథనాన్ని కనుగొనడం విఫలమైంది</translation>
-<translation id="4326324639298822553">మీ గడువు ముగింపు తేదీని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి</translation>
+<translation id="4326324639298822553">మీ గడువు ముగింపు తేదీని చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation>
<translation id="4329871760342656885">పాలసీని అన్వయించడంలో ఎర్రర్: <ph name="ERROR" /></translation>
<translation id="4331519897422864041">స్టాకర్ 5</translation>
<translation id="4331708818696583467">సురక్షితం కాదు</translation>
@@ -1404,7 +1404,7 @@
<translation id="4792686369684665359">మీరు సమర్పించబోయే సమాచారం సురక్షితమైనది కాదు</translation>
<translation id="4796594887379589189">జాబ్ ఖాతా ID</translation>
<translation id="4798078619018708837">మీ కార్డ్ వివరాలను అప్‌డేట్ చేయడానికి <ph name="CREDIT_CARD" /> కార్డ్ గడువు ముగింపు తేదీ, CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ Google ఖాతా నుండి కార్డ్ వివరాలు ఈ సైట్‌తో షేర్ చేయబడతాయి.</translation>
-<translation id="4800132727771399293">మీ గడువు ముగింపు తేదీ మరియు CVCని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి</translation>
+<translation id="4800132727771399293">మీ గడువు ముగింపు తేదీ మరియు CVCని చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation>
<translation id="480334179571489655">అసలు విధానం ఎర్రర్</translation>
<translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
<translation id="4809079943450490359">మీ పరికర అడ్మినిస్ట్రేట‌ర్ నుండి సూచనలు:</translation>
@@ -1424,7 +1424,7 @@
<translation id="4852429274334674023">ఆపరేటింగ్ సిస్టమ్‌లు</translation>
<translation id="485316830061041779">జర్మన్</translation>
<translation id="4853901935952445031">ఫిబ్రవరి 2022 తర్వాత, ఈ సైట్ U2F APIను ఉపయోగించలేదు. ఈ సైట్ మీది అయితే, వెబ్ ప్రామాణీకరణ APIను ఉపయోగించడానికి మీరు దాని సెట్టింగ్‌ను మార్చాలి.</translation>
-<translation id="4854362297993841467">ఈ బట్వాడా పద్ధతి అందుబాటులో లేదు. వేరే పద్ధతిని ప్రయత్నించండి.</translation>
+<translation id="4854362297993841467">ఈ డెలివరీ పద్ధతి అందుబాటులో లేదు. వేరే పద్ధతిని ప్రయత్నించండి.</translation>
<translation id="4854853140771946034">Google Keepలో త్వరగా కొత్త నోట్‌ను క్రియేట్ చేయండి</translation>
<translation id="485902285759009870">కోడ్‌ను వెరిఫై చేస్తోంది...</translation>
<translation id="4866506163384898554">మీ కర్సర్‌‌ను చూపించడానికి |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| నొక్కండి</translation>
@@ -1483,14 +1483,14 @@
<translation id="5019198164206649151">బ్యాకింగ్ నిల్వ చెల్లని స్థితిలో ఉంది</translation>
<translation id="5020776957610079374">ప్రపంచవ్యాప్తంగాా వినదగిన మ్యూజిక్</translation>
<translation id="5023310440958281426">మీ నిర్వాహకుని విధానాలను చూడండి</translation>
-<translation id="5029568752722684782">కాపీని తీసివేయి</translation>
+<translation id="5029568752722684782">కాపీని తీసివేయండి</translation>
<translation id="5030338702439866405">వీరిచే జారీచేయబడింది</translation>
<translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" యొక్క రూట్ సర్టిఫికేట్ అవసరం, కానీ అది ఇన్‌స్టాల్ చేయబడలేదు. ఈ సమస్యను పరిష్కరించాలంటే, మీ IT నిర్వాహకులు "<ph name="SOFTWARE_NAME" />" యొక్క కాన్ఫిగరేషన్ సూచనలను పరిశీలించాలి. <ph name="FURTHER_EXPLANATION" /></translation>
<translation id="5031870354684148875">Google Translate గురించి</translation>
<translation id="503498442187459473"><ph name="HOST" /> మీ కెమెరాను మరియు మైక్రోఫోన్‌ను ఉపయోగించాలనుకుంటోంది</translation>
<translation id="5035135400558156732">తోటపని</translation>
<translation id="5039762155821394373">ఫాంట్ సైజ్</translation>
-<translation id="5039804452771397117">అనుమతించు</translation>
+<translation id="5039804452771397117">అనుమతించండి</translation>
<translation id="5040262127954254034">గోప్యత</translation>
<translation id="5043480802608081735">మీరు కాపీ చేసిన లింక్</translation>
<translation id="5044545992476246592">మీరు ఇప్పుడే ఉపయోగించిన పాస్‌వర్డ్, డేటా ఉల్లంఘనలో కనగొనబడింది. మీ Google Assistant మీ పాస్‌వర్డ్‌ను ఆటోమేటిక్‌గా మార్చగలదు.</translation>
@@ -1503,7 +1503,7 @@
<translation id="5068234115460527047">భద్రతా నిధులు</translation>
<translation id="5068524481479508725">A10</translation>
<translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 వినియోగంలో ఉంది)}other{(# వినియోగంలో ఉన్నాయి)}}</translation>
-<translation id="5070335125961472645"><ph name="BEGIN_LINK" />ప్రాక్సీ అడ్రస్‌ను తనిఖీ చేయడం<ph name="END_LINK" /></translation>
+<translation id="5070335125961472645"><ph name="BEGIN_LINK" />ప్రాక్సీ అడ్రస్‌ను చెక్ చేయడం<ph name="END_LINK" /></translation>
<translation id="5070838744279127212">టెన్త్ రోల్</translation>
<translation id="507130231501693183">మెయిల్‌బాక్స్ 4</translation>
<translation id="5078060223219502807">మీరు ఇప్పుడే ఉపయోగించిన పాస్‌వర్డ్, డేటా ఉల్లంఘనలో కనగొనబడింది. మీ ఖాతాలను సురక్షితం చేయడానికి, ఆ పాస్‌వర్డ్‌ను ఇప్పుడే మార్చి, ఆపై మీరు సేవ్ చేసిన పాస్‌వర్డ్‌లను చెక్ చేయమని పాస్‌వర్డ్ మేనేజర్ సిఫార్సు చేస్తోంది.</translation>
@@ -1568,7 +1568,7 @@
<translation id="5222812217790122047">ఈమెయిల్‌ అవ‌స‌రం</translation>
<translation id="5228404122310299359">పార్టీ &amp; సెలవులోని వేడుకలకు సంబంధించిన సామగ్రి</translation>
<translation id="5229588705416009823">చాలా ఎక్కువ మంది ఆడే గేమ్‌లు</translation>
-<translation id="5230733896359313003">బట్వాడా అడ్రస్‌</translation>
+<translation id="5230733896359313003">డెలివరీ అడ్రస్‌</translation>
<translation id="5230815978613972521">B8</translation>
<translation id="5233045608889518621">12x19</translation>
<translation id="5234764350956374838">తొలగించు</translation>
@@ -1621,7 +1621,7 @@
<translation id="5340250774223869109">యాప్ బ్లాక్ చేయబడింది</translation>
<translation id="534295439873310000">NFC పరికరాలు</translation>
<translation id="5344579389779391559">ఈ పేజీ మీకు డబ్బు ఛార్జీ చేయడానికి ప్రయత్నించవచ్చు</translation>
-<translation id="5347645913823149105">'Chromeలో ఫాంట్‌లను అనుకూలీకరించండి' బటన్, Chromeలో ఫాంట్ సైజ్‌లను, టైప్‌ఫేస్‌లను అనుకూలీకరించడానికి Enterను నొక్కండి</translation>
+<translation id="5347645913823149105">'Chromeలో ఫాంట్‌లను అనుకూలంగా మార్చండి' బటన్, Chromeలో ఫాంట్ సైజ్‌లను, టైప్‌ఫేస్‌లను అనుకూలంగా మార్చడానికి Enterను నొక్కండి</translation>
<translation id="5355557959165512791"><ph name="SITE" /> యొక్క ప్రమాణపత్రం రద్దు చేయబడినందున మీరు ప్రస్తుతం దీన్ని సందర్శించలేరు. నెట్‌వర్క్ లోపాలు మరియు దాడులు సాధారణంగా తాత్కాలికమే, కనుక ఈ పేజీ తర్వాత పని చేయవచ్చు.</translation>
<translation id="5356837363448394805">ఎర్రబారిన ముఖం</translation>
<translation id="5357848622083956825">విజువల్ ఆర్ట్ &amp; డిజైన్</translation>
@@ -1639,7 +1639,7 @@
<translation id="540969355065856584">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం ప్రస్తుతం చెల్లదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడి చేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
<translation id="5412236728747081950">మీకు మరింత సందర్భోచితమైన యాడ్‌లను చూపడానికి ఈ సైట్ మీ ఆసక్తులను Chrome నుండి పొందుతుంది</translation>
<translation id="541416427766103491">స్టాకర్ 4</translation>
-<translation id="5421136146218899937">బ్రౌజింగ్ డేటాను క్లియర్ చేయి...</translation>
+<translation id="5421136146218899937">బ్రౌజింగ్ డేటాను క్లియర్ చేయండి...</translation>
<translation id="5426179911063097041"><ph name="SITE" /> మీకు నోటిఫికేషన్‌లను పంపాలనుకుంటోంది</translation>
<translation id="5428105026674456456">స్పానిష్</translation>
<translation id="5430298929874300616">బుక్‌మార్క్‌ను తీసివేయండి</translation>
@@ -1653,7 +1653,7 @@
<translation id="5463625433003343978">పరికరాలను కనుగొంటోంది...</translation>
<translation id="5469868506864199649">ఇటాలియన్</translation>
<translation id="5470230812924696184">సివిల్ ఇంజినీరింగ్</translation>
-<translation id="5470861586879999274">&amp;సవరించడాన్ని పునరావృతం చేయి</translation>
+<translation id="5470861586879999274">&amp;సవరించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="5471337644440862957">కామెడీ సినిమాలు</translation>
<translation id="5478437291406423475">B6/C4 (ఎన్వలప్)</translation>
<translation id="5481076368049295676">ఈ కంటెంట్ మీ సమాచారాన్ని దొంగిలించగల లేదా తొలగించగల హానికరమైన సాఫ్ట్‌వేర్‌ను మీ పరికరంలో ఇన్‌స్టాల్ చేయడానికి ప్రయత్నించవచ్చు. <ph name="BEGIN_LINK" />ఏదేమైనా చూపు<ph name="END_LINK" /></translation>
@@ -1676,7 +1676,7 @@
<translation id="5528532273234423708">హోమ్ ఆటోమేషన్</translation>
<translation id="55293785478302737">కుట్టిన అంచులు</translation>
<translation id="553484882784876924">Prc6 (ఎన్వలప్)</translation>
-<translation id="5535133333442455806">'బ్రౌజింగ్ డేటాను క్లియర్ చేయి' బటన్, Chrome సెట్టింగ్‌లలో మీ బ్రౌజింగ్ హిస్టరీ, కుక్కీలు, కాష్ ఇంకా మరిన్నింటిని క్లియర్ చేయడానికి 'Enter' నొక్కండి</translation>
+<translation id="5535133333442455806">'బ్రౌజింగ్ డేటాను క్లియర్ చేయండి' బటన్, Chrome సెట్టింగ్‌లలో మీ బ్రౌజింగ్ హిస్టరీ, కుక్కీలు, కాష్ ఇంకా మరిన్నింటిని క్లియర్ చేయడానికి 'Enter' నొక్కండి</translation>
<translation id="5536214594743852365">"<ph name="SECTION" />" విభాగాన్ని చూపించు</translation>
<translation id="5539243836947087108">రాఫ్ట్</translation>
<translation id="5540224163453853">రిక్వెస్ట్ చేసిన కథనాన్ని కనుగొనడం సాధ్యపడలేదు.</translation>
@@ -1694,7 +1694,7 @@
<translation id="5570825185877910964">ఖాతాను సంరక్షించు</translation>
<translation id="5571083550517324815">ఈ అడ్రస్‌ నుండి పికప్ చేసుకోవడం సాధ్యం కాదు. వేరే అడ్రస్‌ను ఎంచుకోండి.</translation>
<translation id="557886905979275351">రేజర్లు &amp; షేవర్‌లు</translation>
-<translation id="5580958916614886209">మీ గడువు ముగింపు నెలను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి</translation>
+<translation id="5580958916614886209">మీ గడువు ముగింపు నెలను చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation>
<translation id="5586446728396275693">సేవ్ చేయబడిన అడ్రస్‌లు లేవు</translation>
<translation id="5587987780934666589">ప్లాట్‌ఫామ్ యూజర్</translation>
<translation id="5593349413089863479">కనెక్షన్ పూర్తిగా సురక్షితమైనది కాదు</translation>
@@ -1703,7 +1703,7 @@
<translation id="560412284261940334">నిర్వహణకు మద్దతు లేదు</translation>
<translation id="5605670050355397069">లెడ్జర్</translation>
<translation id="5607240918979444548">ఆర్కిటెక్చర్-C</translation>
-<translation id="5610142619324316209">కనెక్షన్‌ను తనిఖీ చేయడం</translation>
+<translation id="5610142619324316209">కనెక్షన్‌ను చెక్ చేయడం</translation>
<translation id="5610807607761827392">మీరు కార్డ్‌లు మరియు అడ్రస్‌లను <ph name="BEGIN_LINK" />సెట్టింగ్‌ల<ph name="END_LINK" />లో నిర్వహించగలరు.</translation>
<translation id="561165882404867731">Google Translateతో ఈ పేజీని అనువదించండి</translation>
<translation id="5612720917913232150"><ph name="URL" /> మీ కంప్యూటర్ స్థానాన్ని ఉపయోగించాలనుకుంటోంది</translation>
@@ -1754,14 +1754,14 @@
<translation id="5754400531489347219">పెంపుడు జంతువులు &amp; ఇతర జంతువులు</translation>
<translation id="5759751709240058861">మీ కెమెరాను ఉపయోగించండి, తరలించండి</translation>
<translation id="5763042198335101085">చెల్లుబాటు అయ్యే ఈమెయిల్‌ అడ్రస్‌ను నమోదు చేయండి</translation>
-<translation id="5765072501007116331">బట్వాడా పద్ధతులు మరియు అవసరాలను చూడాలంటే, అడ్రస్‌ను ఎంచుకోండి</translation>
+<translation id="5765072501007116331">డెలివరీ పద్ధతులు మరియు అవసరాలను చూడాలంటే, అడ్రస్‌ను ఎంచుకోండి</translation>
<translation id="57689295674415555">వర్చువల్ కార్డ్ నంబర్ పూరించబడలేదా?</translation>
<translation id="5776313857861697733">ప్రాధాన్యత</translation>
<translation id="5781136890105823427">ప్రయోగం ప్రారంభించబడింది</translation>
<translation id="578305955206182703">కాషాయ రంగు</translation>
<translation id="57838592816432529">మ్యూట్ చేయి</translation>
-<translation id="5784606427469807560">మీ కార్డ్‌ను నిర్ధారించడంలో సమస్య ఏర్పడింది. మీ ఇంటర్నెట్ కనెక్షన్‌ని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
-<translation id="5785756445106461925">అలాగే, ఈ పేజీలో సురక్షితం కాని ఇతర వనరులు ఉన్నాయి. ఈ వనరులను బదిలీ చేస్తున్నప్పుడు ఇతరులు చూడగలరు మరియు దాడికి పాల్పడేవారు పేజీ రూపాన్ని మార్చేలా వీటిని సవరించగలరు.</translation>
+<translation id="5784606427469807560">మీ కార్డ్‌ను నిర్ధారించడంలో సమస్య ఏర్పడింది. మీ ఇంటర్నెట్ కనెక్షన్‌ని చెక్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="5785756445106461925">అలాగే, ఈ పేజీలో సురక్షితం కాని ఇతర వనరులు ఉన్నాయి. ఈ వనరులను బదిలీ చేస్తున్నప్పుడు ఇతరులు చూడగలరు మరియు దాడికి పాల్పడేవారు పేజీ రూపాన్ని మార్చేలా వీటిని ఎడిట్ చేయగలరు.</translation>
<translation id="5786044859038896871">మీరు మీ కార్డ్ సమాచారం పూరించాలనుకుంటున్నారా?</translation>
<translation id="578633867165174378">డేటా ఉల్లంఘనలో మీరు ఇప్పుడే ఉపయోగించిన పాస్‌వర్డ్‌ను Chrome కనుగొనింది. ఇప్పుడే ఈ పాస్‌వర్డ్‌ను మార్చమని మేము సిఫార్సు చేస్తున్నాము.</translation>
<translation id="5789643057113097023">.</translation>
@@ -1771,7 +1771,7 @@
<translation id="5808542072418270309">సిమ్యులేషన్ గేమ్‌లు</translation>
<translation id="5810442152076338065"><ph name="DOMAIN" />కు గల మీ కనెక్షన్ వాడుకలో లేని సైఫర్ సూట్ ఉపయోగించి ఎన్‌క్రిప్ట్ చేయ‌బ‌డింది.</translation>
<translation id="5812947184178430888">భద్రతా ఈవెంట్‌లను Chrome ద్వారా ఫ్లాగ్ చేసినప్పుడు, ఈవెంట్‌లకు సంబంధించిన డేటా మీ అడ్మినిస్ట్రేటర్‌కు పంపబడుతుంది. ఇందులో మీరు Chromeలో వెళ్లిన పేజీల URLలు, ఫైల్ పేర్లు లేదా మెటాడేటా, ఇంకా వెబ్ ఆధారితమైన యాప్‌లు, మీ పరికరం, అలాగే Chromeకు సైన్ ఇన్ చేయడానికి మీరు ఉపయోగించే యూజర్‌నేమ్ ఉండవచ్చు.</translation>
-<translation id="5813119285467412249">&amp;జోడించడాన్ని పునరావృతం చేయి</translation>
+<translation id="5813119285467412249">&amp;జోడించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="5813309815819933152">టీవీ రియాలిటీ షోలు</translation>
<translation id="5813753398265398978">భౌతిక శాస్త్రం</translation>
<translation id="5817918615728894473">జత చేయి</translation>
@@ -1798,7 +1798,7 @@
<translation id="5903264686717710770">శీర్షిక:</translation>
<translation id="5904360430676679685">కుటుంబం &amp; సంబంధాలు</translation>
<translation id="5905445707201418379"><ph name="ORIGIN" /> యొక్క ఆరిజిన్ ఎర్రర్ విధానం ప్రకారం బ్లాక్ చేయబడింది.</translation>
-<translation id="5908541034548427511"><ph name="TYPE_1" /> (సమకాలీకరించబడింది)</translation>
+<translation id="5908541034548427511"><ph name="TYPE_1" /> (సింక్ చేయబడింది)</translation>
<translation id="59174027418879706">ప్రారంభించబడింది</translation>
<translation id="5919090499915321845">B10</translation>
<translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 వినియోగంలో ఉంది}other{# వినియోగంలో ఉన్నాయి}}</translation>
@@ -1817,7 +1817,7 @@
<translation id="5955063559762970069">హోటళ్లు &amp; వసతులు</translation>
<translation id="5963413905009737549">విభాగం</translation>
<translation id="5967592137238574583">సంప్రదింపు సమాచారాన్ని ఎడిట్ చేయండి</translation>
-<translation id="5967867314010545767">చరిత్ర నుండి తీసివేయి</translation>
+<translation id="5967867314010545767">చరిత్ర నుండి తీసివేయండి</translation>
<translation id="5968793460449681917">ప్రతి సందర్శనలో</translation>
<translation id="5974052231147553524">సిక్స్త్ రోల్</translation>
<translation id="5975083100439434680">దూరంగా జూమ్ చేయి</translation>
@@ -1834,12 +1834,12 @@
<translation id="6008122969617370890">N-నుండి-1 వరకు ఉన్న క్రమం</translation>
<translation id="6008256403891681546">JCB</translation>
<translation id="6014139350017893009">వాహనాల రిపేర్‌లు &amp; మెయింటెనెన్స్</translation>
-<translation id="6014801569448771146">మీ పాస్‌వర్డ్‌లను తనిఖీ చేయండి</translation>
+<translation id="6014801569448771146">మీ పాస్‌వర్డ్‌లను చెక్ చేయండి</translation>
<translation id="6014851866995737824">"ఎనేబుల్" లేదా "డిజేబుల్" లిస్ట్‌లో లేని కారణంగా ఇది విస్మరించబడింది.</translation>
<translation id="6015796118275082299">సంవత్సరం</translation>
<translation id="6017514345406065928">ఆకుపచ్చ</translation>
<translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />లోని హ్యాకర్‌లు మోసపూరిత యాప్‌లను ఇన్‌స్టాల్ చేయవచ్చు. ఇవి వేరే వాటిలా కనిపించవచ్చు లేదా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించబడే డేటాను సేకరించవచ్చు. <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation>
-<translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (సమకాలీకరించబడ్డాయి)</translation>
+<translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (సింక్ చేయబడ్డాయి)</translation>
<translation id="6027201098523975773">పేరుని నమోదు చేయండి</translation>
<translation id="603068602130820122">కుడివైపు డ్యుయల్ స్టేపుల్</translation>
<translation id="6032524144326295339">మెయిల్‌బాక్స్ 2</translation>
@@ -1879,9 +1879,9 @@
<translation id="6116338172782435947">క్లిప్‌బోర్డ్‌కు కాపీ చేసిన వచనం మరియు చిత్రాలను చూడండి</translation>
<translation id="6120179357481664955">మీ UPI ID గుర్తుందా?</translation>
<translation id="6124432979022149706">Chrome Enterprise కనెక్టర్‌లు</translation>
-<translation id="6127379762771434464">అంశాన్ని తీసివేసారు</translation>
+<translation id="6127379762771434464">అంశాన్ని తీసివేశారు</translation>
<translation id="6132161237766805930"><ph name="BEGIN_LINK" />Chromeలో అజ్ఞాత మోడ్ గురించి మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
-<translation id="6146055958333702838">ఏవైనా కేబుల్‌లను తనిఖీ చేయండి మరియు మీరు ఉపయోగించే ఏవైనా రూటర్‌లు, మోడెమ్‌లు
+<translation id="6146055958333702838">ఏవైనా కేబుళ్లను చెక్ చేయండి మరియు మీరు ఉపయోగించే ఏవైనా రూటర్‌లు, మోడెమ్‌లు
లేదా ఇతర నెట్‌వర్క్ పరికరాలను రీబూట్ చేయండి.</translation>
<translation id="614940544461990577">ఇలా చేసి ప్రయత్నించండి:</translation>
<translation id="6150036310511284407">ఎడమవైపు మూడు రంధ్రాలు</translation>
@@ -1898,7 +1898,7 @@
<translation id="61877208875190028">మహిళల దుస్తులు</translation>
<translation id="6195371403461054755">భూగర్భశాస్త్రం</translation>
<translation id="6196640612572343990">థర్డ్ పార్టీ కుక్కీలను బ్లాక్ చేయండి</translation>
-<translation id="6203231073485539293">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి</translation>
+<translation id="6203231073485539293">మీ ఇంటర్నెట్ కనెక్షన్‌ను చెక్ చేయండి</translation>
<translation id="6218753634732582820">Chromium నుండి అడ్రస్‌ను తీసివేయాలా?</translation>
<translation id="622039917539443112">పారలల్ ఫోల్డ్</translation>
<translation id="6221345481584921695">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />మాల్వేర్‌ను గుర్తించింది<ph name="END_LINK" />. సాధారణంగా సురక్షితమైన వెబ్‌సైట్‌‌లకు కూడా కొన్నిసార్లు మాల్వేర్ సోకుతుంది. ఈ హానికరమైన కంటెంట్, మాల్వేర్ పంపిణీదారుగా ప్రసిద్ధిగాంచిన <ph name="SUBRESOURCE_HOST" /> నుండి సంక్రమిస్తుంది.</translation>
@@ -1913,7 +1913,7 @@
<translation id="624499991300733384">ప్రింట్ కంపోజిటర్ సేవ</translation>
<translation id="6252613631861574218"><ph name="MANAGE_CHROME_DOWNLOADS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chromeలో మీరు డౌన్‌లోడ్ చేసిన ఫైల్‌లను మేనేజ్ చేయడానికి Tabను నొక్కి, ఆపై Enterను నొక్కండి</translation>
<translation id="6254436959401408446">ఈ పేజీని తెరవడానికి తగినంత మెమరీ లేదు</translation>
-<translation id="6259156558325130047">&amp;మళ్లీ క్రమం చేయడాన్ని పునరావృతం చేయి</translation>
+<translation id="6259156558325130047">&amp;మళ్లీ క్రమం చేయడాన్ని రిపీట్‌ చేయి</translation>
<translation id="6263376278284652872"><ph name="DOMAIN" /> బుక్‌మార్క్‌లు</translation>
<translation id="6264485186158353794">భద్రతకు తిరిగి వెళ్ళు</translation>
<translation id="6265794661083428563"><ph name="POLICY_NAME" /> పాలసీ విలువను కాపీ చేయి</translation>
@@ -1923,7 +1923,7 @@
<translation id="6276112860590028508">మీ పఠన లిస్ట్‌లో ఉన్న పేజీలు ఇక్కడ కనిపిస్తాయి</translation>
<translation id="627746635834430766">తర్వాతిసారి మరింత వేగంగా పేమెంట్ చేయడానికి, మీ కార్డ్, బిల్లింగ్ అడ్రస్‌ను మీ Google ఖాతాకు సేవ్ చేయండి.</translation>
<translation id="6279183038361895380">మీ కర్సర్‌ను చూపడానికి |<ph name="ACCELERATOR" />| నొక్కండి</translation>
-<translation id="6280223929691119688">ఈ అడ్రస్‌కు బట్వాడా చేయడం సాధ్యం కాదు. వేరే అడ్రస్‌ను ఎంచుకోండి.</translation>
+<translation id="6280223929691119688">ఈ అడ్రస్‌కు డెలివరీ చేయడం సాధ్యం కాదు. వేరే అడ్రస్‌ను ఎంచుకోండి.</translation>
<translation id="6282194474023008486">పోస్టల్ కోడ్</translation>
<translation id="6285507000506177184">'Chromeలో డౌన్‌లోడ్‌లను మేనేజ్ చేయండి' బటన్, Chromeలో మీరు డౌన్‌లోడ్ చేసిన ఫైల్స్‌ను మేనేజ్ చేయడానికి 'Enter'ను నొక్కండి</translation>
<translation id="6289939620939689042">పేజీ రంగు</translation>
@@ -1931,13 +1931,13 @@
<translation id="6293309776179964942">JIS B5</translation>
<translation id="6295618774959045776">CVC:</translation>
<translation id="6300452962057769623">{0,plural, =0{మీ పరికరం ఇప్పుడు రీస్టార్ట్ అవుతుంది}=1{మీ పరికరం 1 సెకనులో రీస్టార్ట్ అవుతుంది}other{మీ పరికరం # సెకన్లలో రీస్టార్ట్ అవుతుంది}}</translation>
-<translation id="6302269476990306341">Chromeలో Google అసిస్టెంట్ ఆపివేయబడుతోంది</translation>
+<translation id="6302269476990306341">Chromeలో Google Assistant ఆపివేయబడుతోంది</translation>
<translation id="6305205051461490394"><ph name="URL" />ని చేరుకోలేకపోయాము.</translation>
<translation id="6312113039770857350">వెబ్‌పేజీ అందుబాటులో లేదు</translation>
<translation id="6316226860534107313">స్కూటర్‌లు &amp; మోపెడ్‌లు</translation>
<translation id="63172326633386613">యాక్సెసిబిలిటీ సెట్టింగ్‌లను మేనేజ్ చేయండి</translation>
<translation id="6319249456820053699">కెమెరాలు &amp; క్యామ్‌కార్డర్‌లు</translation>
-<translation id="6321917430147971392">మీ DNS సెట్టింగ్‌లను తనిఖీ చేయండి</translation>
+<translation id="6321917430147971392">మీ DNS సెట్టింగ్‌లను చెక్ చేయండి</translation>
<translation id="6322182122604171028">Windows Helloను ఉపయోగించడం సాధ్యం కాలేదు</translation>
<translation id="6326947323444967009">iOS సెట్టింగ్‌లలో Chromeను సిస్టమ్ ఆటోమేటిక్ బ్రౌజర్‌గా సెట్ చేయండి</translation>
<translation id="6328639280570009161">నెట్‌వర్క్ సూచనను నిలిపివేసి ప్రయత్నించండి</translation>
@@ -1951,7 +1951,7 @@
<translation id="6355392890578844978">ఈ బ్రౌజర్ కంపెనీ లేదా ఇతర సంస్థ ద్వారా మేనేజ్ చేయబడదు. ఈ పరికరంలోని యాక్టివిటీని Chromium వెలుపల మేనేజ్ చేస్తుండవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
<translation id="6358450015545214790">దీని అర్ధం ఏమిటి?</translation>
<translation id="6361757823711327522">B7</translation>
-<translation id="6364095313648930329"><ph name="BEGIN_LINK" />ప్రాక్సీ, ఫైర్‌వాల్ మరియు సెక్యూర్ DNS కాన్ఫిగరేషన్‌ను తనిఖీ చేయడం<ph name="END_LINK" /></translation>
+<translation id="6364095313648930329"><ph name="BEGIN_LINK" />ప్రాక్సీ, ఫైర్‌వాల్ మరియు సెక్యూర్ DNS కాన్ఫిగరేషన్‌ను చెక్ చేయడం<ph name="END_LINK" /></translation>
<translation id="6366710531182496394">ఎడమవైపు డ్యుయల్ స్టేపుల్</translation>
<translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' అనే దానికి 1 ఫలితం మాత్రమే లభించింది</translation>
<translation id="6380497234672085559">A0</translation>
@@ -1964,7 +1964,7 @@
<translation id="6391700400718590966">సురక్షితమైన పేమెంట్ ఆధారానికి సంబంధించిన మ్యాచ్ అయ్యే ఆధారాల షీట్ ఏదీ మూసివేయబడలేదు</translation>
<translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> నుండి ఈ లొకేషన్‌లో పేస్ట్ చేయడం అడ్మినిస్ట్రేటర్ పాలసీ ద్వారా బ్లాక్ చేయబడింది</translation>
<translation id="6398277657359595425">బిగ్గరగా ఏడవడం</translation>
-<translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించు</translation>
+<translation id="6398765197997659313">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించండి</translation>
<translation id="6401136357288658127">ఈ విధానం విస్మరించబడింది. దానికి బదులుగా, మీరు <ph name="NEW_POLICY" /> విధానాన్ని ఉపయోగించాలి.</translation>
<translation id="6404511346730675251">బుక్‌మార్క్‌ను ఎడిట్ చేయండి</translation>
<translation id="6406765186087300643">C0 (ఎన్వలప్)</translation>
@@ -2008,7 +2008,7 @@
<translation id="6518133107902771759">ధృవీకరించు</translation>
<translation id="6521745193039995384">యాక్టివ్‌గా లేదు</translation>
<translation id="6529173248185917884">సెవెంత్ రోల్</translation>
-<translation id="6529602333819889595">&amp;తొలగించడాన్ని పునరావృతం చేయి</translation>
+<translation id="6529602333819889595">&amp;తొలగించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="6535751101619004418">కరెన్సీలు &amp; విదేశీ మారకం</translation>
<translation id="6540534463546766581">మ్యూచువల్ ఫండ్‌లు</translation>
<translation id="6545864417968258051">బ్లూటూత్ స్కానింగ్</translation>
@@ -2041,7 +2041,7 @@
<translation id="6630043285902923878">USB పరికరాలను కనుగొంటోంది...</translation>
<translation id="6630809736994426279"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> లో హ్యాకర్‌లు మీ సమాచారాన్ని (ఉదాహరణకు, ఫోటోలు, పాస్‌వర్డ్‌లు, మెసేజ్‌లు మరియు క్రెడిట్ కార్డ్‌లు) దొంగిలించగల లేదా తొలగించగల హానికరమైన ప్రోగ్రామ్‌లను మీ Macలో ఇన్‌స్టాల్ చేయడానికి ప్రయత్నించవచ్చు. <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="663260587451432563">JIS B4</translation>
-<translation id="6643016212128521049">క్లియర్ చేయి</translation>
+<translation id="6643016212128521049">క్లియర్ చేయండి</translation>
<translation id="6645291930348198241">కుక్కీలను, సైట్ డేటాను యాక్సెస్ చేయాలనుకుంటోంది.</translation>
<translation id="6646269444027925224">{COUNT,plural, =0{ఏవీ లేవు}=1{1 సైట్ నుండి (మీరు మీ Google ఖాతా నుండి సైన్ అవుట్ చేయబడరు)}other{# సైట్‌ల నుండి (మీరు మీ Google ఖాతా నుండి సైన్ అవుట్ చేయబడరు)}}</translation>
<translation id="6648459603387803038">మీ అడ్మినిస్ట్రేట‌ర్ మీ బ్రౌజర్ సెటప్‌ను రిమోట్ విధానంలో మార్చవచ్చు. ఈ పరికరంలోని యాక్టివిటీని Chrome వెలుపల కూడా మేనేజ్ చేయవచ్చు.</translation>
@@ -2114,7 +2114,7 @@
<translation id="6865412394715372076">ప్రస్తుతం ఈ కార్డ్‌ని ధృవీకరించడం సాధ్యపడదు</translation>
<translation id="6869334554832814367">వ్యక్తిగత రుణాలు</translation>
<translation id="6873456682041376666">టాప్ ట్రే</translation>
-<translation id="6874604403660855544">&amp;జోడించడాన్ని పునరావృతం చేయి</translation>
+<translation id="6874604403660855544">&amp;జోడించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="6881240511396774766">కొత్త Google డాక్‌ను త్వరగా క్రియేట్ చేయండి</translation>
<translation id="6883221904761970440">సురక్షిత పేమెంట్ ఆధారాల ప్రామాణీకరణ షీట్ మూయబడింది</translation>
<translation id="6884662655240309489">పరిమాణం 1</translation>
@@ -2218,7 +2218,7 @@
<translation id="7129409597930077180">ఈ అడ్రస్‌కు రవాణా చేయడం సాధ్యం కాదు. వేరే అడ్రస్‌ను ఎంచుకోండి.</translation>
<translation id="7132939140423847331">మీ అడ్మిన్ ఈ డేటాను కాపీ చేయకుండా నిషేధించారు.</translation>
<translation id="7135130955892390533">స్థితిని చూపు</translation>
-<translation id="7138472120740807366">బట్వాడా పద్ధతి</translation>
+<translation id="7138472120740807366">డెలివరీ పద్ధతి</translation>
<translation id="7139724024395191329">ఎమిరేట్</translation>
<translation id="7139892792842608322">ప్రైమరీ ట్రే</translation>
<translation id="714064300541049402">2వ వైపు ప్రింట్‌లో చిత్రాన్ని X అక్షంలో జరపు</translation>
@@ -2278,7 +2278,7 @@
<translation id="7320336641823683070">కనెక్షన్ సహాయం</translation>
<translation id="7323804146520582233">"<ph name="SECTION" />" విభాగాన్ని దాచు</translation>
<translation id="733354035281974745">పరికర స్థానిక ఖాతా భర్తీ</translation>
-<translation id="7334320624316649418">&amp;మళ్లీ క్రమం చేయడాన్ని పునరావృతం చేయి</translation>
+<translation id="7334320624316649418">&amp;మళ్లీ క్రమం చేయడాన్ని రిపీట్‌ చేయి</translation>
<translation id="7335157162773372339">మీ కెమెరాను ఉపయోగించడానికి సైట్ అనుమతి అడగవచ్చు</translation>
<translation id="7337248890521463931">మరిన్ని వరుసలను చూపించు</translation>
<translation id="7337418456231055214">వర్చువల్ కార్డ్ నంబర్‌ను పూరించలేదా? కాపీ చేయడం కోసం కార్డ్ వివరాలను క్లిక్ చేయండి. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
@@ -2298,7 +2298,7 @@
<translation id="7365596969960773405"><ph name="MANAGE_ADDRESSES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome సెట్టింగ్‌లలో అడ్రస్‌లను జోడించడానికి, మేనేజ్ చేయడానికి 'Tab'ను నొక్కి, ఆపై 'Enter'ను నొక్కండి</translation>
<translation id="7365849542400970216">మీ పరికరాన్ని ఎలా ఉపయోగించాలో తెలుసుకోవాలనుకుంటున్నారా?</translation>
<translation id="7366362069757178916">పేమెంట్ హ్యాండ్లర్‌లు</translation>
-<translation id="7372973238305370288">శోధన ఫలితం</translation>
+<translation id="7372973238305370288">సెర్చ్ ఫలితం</translation>
<translation id="7374461526650987610">ప్రోటోకాల్ నిర్వాహకులు</translation>
<translation id="7374733840632556089">మీ పరికరంలో మీరు లేదా మరొకరు ఇన్‌స్టాల్ చేసిన సర్టిఫికేట్ కారణంగా ఈ సమస్య తలెత్తుతుంది. నెట్‌వర్క్‌లను పర్యవేక్షించడానికి మరియు అడ్డగించడానికి సర్టిఫికెట్ ఉపయోగించబడుతుంది, ఇది Chrome ద్వారా విశ్వసించబడదు. పర్యవేక్షణ కోసం కొన్ని చట్టబద్ధమైన కేసులు ఉన్నప్పటికీ, పాఠశాల లేదా కంపెనీ నెట్‌వర్క్‌లో మాదిరిగా, మీరు దీన్ని ఆపలేక పోయినప్పటికీ, ఇది జరుగుతున్నట్లు మీకు తెలుసని Chrome నిర్ధారించుకోవాలనుకుంటుంది. వెబ్‌ను యాక్సెస్ చేసే ఏదైనా బ్రౌజర్ లేదా యాప్‌లో పర్యవేక్షణ జరగవచ్చు.</translation>
<translation id="7375818412732305729">ఫైల్‌ను జోడించినప్పుడు</translation>
@@ -2341,7 +2341,7 @@
<translation id="7442725080345379071">లేత నారింజ రంగు</translation>
<translation id="7445762425076701745">మీరు కనెక్ట్ చేసిన సర్వర్ యొక్క గుర్తింపు పూర్తిగా ధృవీకరించబడలేదు. మీరు దీని యొక్క యాజమాన్యాన్ని ధృవీకరించడానికి అంతర్గత స‌ర్టిఫికెట్‌ అధికారికి మరొక దాని లేని మీ నెట్‌వర్క్‌లో మాత్రమే చెల్లుబాటు అయ్యే పేరును ఉపయోగించి సర్వర్‌కు కనెక్ట్ చేశారు. కొన్ని స‌ర్టిఫికెట్‌ అధికారులు సంబంధం లేని ఈ పేర్లకు స‌ర్టిఫికెట్‌ను జారీ చేస్తారు. మీరు సరైన వెబ్‌సైట్‌కు మరియు అటాకర్‌కు కనెక్ట్ చేశారా అని నిర్ధారించడానికి వేరే మార్గం లేదు.</translation>
<translation id="7451311239929941790">ఈ సమస్య గురించి <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" />.</translation>
-<translation id="7455133967321480974">సార్వజనీన డిఫాల్ట్‌ను ఉపయోగించు (బ్లాక్ చేయి)</translation>
+<translation id="7455133967321480974">సార్వజనీన డిఫాల్ట్‌ను ఉపయోగించు (బ్లాక్ చేయండి)</translation>
<translation id="7460618730930299168">మీరు ఎంచుకున్నది మరియు స్క్రీనింగ్ చేస్తున్నది వేరుగా ఉన్నాయి. కొనసాగించాలా?</translation>
<translation id="7463075493919226237">ఆస్ట్రేలియన్ ఫుట్‌బాల్</translation>
<translation id="7469935732330206581">ఫారమ్ సురక్షితమైనది కాదు</translation>
@@ -2379,7 +2379,7 @@
<translation id="7542403920425041731">మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్ చేయబడతాయి.</translation>
<translation id="7542995811387359312">ఈ ఫారమ్ సురక్షిత కనెక్షన్‌ను ఉపయోగించనందున క్రెడిట్ కార్డ్ వివరాలను ఆటోమేటిక్‌గా పూర్తి చేయడం ఆపివేయబడింది.</translation>
<translation id="7548892272833184391">కనెక్షన్ ఎర్రర్‌లను పరిష్కరించండి</translation>
-<translation id="7549584377607005141">ఈ వెబ్‌పేజీ సరిగ్గా ప్రదర్శించబడటానికి మీరు మునుపు నమోదు చేసిన డేటా అవసరం. మీరు ఈ డేటాను మళ్లీ పంపవచ్చు. కానీ అలా చేయడం వ‌ల్ల‌ ఈ పేజీ మునుపు ప్రదర్శించిన ఏదైనా చర్య పునరావృతం కావచ్చు.</translation>
+<translation id="7549584377607005141">ఈ వెబ్‌పేజీ సరిగ్గా ప్రదర్శించబడటానికి మీరు మునుపు నమోదు చేసిన డేటా అవసరం. మీరు ఈ డేటాను మళ్లీ పంపవచ్చు. కానీ అలా చేయడం వ‌ల్ల‌ ఈ పేజీ మునుపు ప్రదర్శించిన ఏదైనా చర్య రిపీట్‌ కావచ్చు.</translation>
<translation id="7550637293666041147">మీ పరికరం వినియోగదారు పేరు మరియు Chrome వినియోగదారు పేరు</translation>
<translation id="7551484245293639699">ట్రావెల్ బీమా</translation>
<translation id="755279583747225797">ట్రయల్ యాక్టివ్‌గా ఉంది</translation>
@@ -2464,7 +2464,7 @@
<translation id="7740996059027112821">ప్రామాణికం</translation>
<translation id="77424286611022110">ఈ సైట్ అనుచితమైన లేదా తప్పుదారి పట్టించే యాడ్‌లను చూపుతుంది. <ph name="LEARN_MORE_LINK_TEXT" /></translation>
<translation id="774634243536837715">హానికరమైన కంటెంట్ బ్లాక్ చేయబడింది.</translation>
-<translation id="7751971323486164747">Chromeలో ఫాంట్ సైజ్‌లను, టైప్‌ఫేస్‌లను అనుకూలీకరించండి</translation>
+<translation id="7751971323486164747">Chromeలో ఫాంట్ సైజ్‌లను, టైప్‌ఫేస్‌లను అనుకూలంగా మార్చండి</translation>
<translation id="7752995774971033316">నిర్వహించడం లేదు</translation>
<translation id="7755624218968747854">ప్రైమరీ రోల్</translation>
<translation id="7757555340166475417">డాయ్-పా-కాయ్</translation>
@@ -2505,7 +2505,7 @@
<translation id="7880146494886811634">అడ్రస్‌ను సేవ్ చేయండి</translation>
<translation id="7882421473871500483">గోధుమ రంగు</translation>
<translation id="7882995332186050355">సరుకు రవాణా చేసే ట్రక్కులు &amp; ట్రయిలర్‌లు</translation>
-<translation id="7887683347370398519">మీ CVCని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి</translation>
+<translation id="7887683347370398519">మీ CVCని చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation>
<translation id="7887885240995164102">చిత్రంలో చిత్రం మోడ్‌లోకి ప్రవేశిస్తుంది</translation>
<translation id="7888575728750733395">ప్రింట్ రెండరింగ్ ఇంటెంట్</translation>
<translation id="7894280532028510793">స్పెల్లింగ్ సరైనది అయితే, <ph name="BEGIN_LINK" />నెట్‌వర్క్ సమస్య విశ్లేషణలను రన్ చేయడానికి ట్రై చేయండి<ph name="END_LINK" />.</translation>
@@ -2522,7 +2522,7 @@
<translation id="7939744324936979484">జానపద &amp; సాంప్రదాయ సంగీతం</translation>
<translation id="7942349550061667556">ఎరుపు</translation>
<translation id="7943893128817522649">అనేక ఫైళ్లను ఆటోమేటిక్‌గా డౌన్‌లోడ్ చేయడానికి సైట్ అనుమతి అడగవచ్చు</translation>
-<translation id="7947285636476623132">మీ గడువు ముగింపు సంవత్సరాన్ని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి</translation>
+<translation id="7947285636476623132">మీ గడువు ముగింపు సంవత్సరాన్ని చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation>
<translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome ఫీచర్‌ల గురించి తెలుసుకోవడానికి Tabను నొక్కి, ఆపై Enterను నొక్కండి</translation>
<translation id="7950027195171824198">Chrome సెట్టింగ్‌లలో మీ కుక్కీ ప్రాధాన్యతలను మేనేజ్ చేయండి</translation>
<translation id="7951415247503192394">(32-బిట్)</translation>
@@ -2595,7 +2595,7 @@
<translation id="8116925261070264013">మ్యూట్ చేసినవి</translation>
<translation id="8118489163946903409">పేమెంట్ ఆప్షన్‌</translation>
<translation id="8123046743443732598">డెస్క్‌టాప్ కంప్యూటర్‌లు</translation>
-<translation id="8124639700796374294">'Chromeను అనుకూలీకరించండి' బటన్, మీ బ్రౌజర్ రూపాన్ని అనుకూలీకరించడానికి 'Enter'ను నొక్కండి</translation>
+<translation id="8124639700796374294">'Chromeను అనుకూలంగా మార్చండి' బటన్, మీ బ్రౌజర్ రూపాన్ని అనుకూలంగా మార్చడానికి 'Enter'ను నొక్కండి</translation>
<translation id="8126056688005753476">అడ్వెంచర్ ట్రావెల్</translation>
<translation id="8127301229239896662">మీ కంప్యూటర్ లేదా నెట్‌వర్క్‌లో "<ph name="SOFTWARE_NAME" />" సరిగ్గా ఇన్‌స్టాల్ కాలేదు. ఈ సమస్యను పరిష్కరించమని మీ IT నిర్వాహకులను కోరండి.</translation>
<translation id="8131740175452115882">నిర్ధారించు</translation>
@@ -2606,7 +2606,7 @@
<translation id="8163866351304776260">ఎడమవైపు నాలుగు రంధ్రాలు</translation>
<translation id="8175796834047840627">మీరు సైన్ ఇన్ చేశారు కనుక మీ కార్డ్‌లను మీ Google ఖాతాలో సేవ్ చేసుకునే చక్కని అవకాశాన్ని Chrome మీకు అందిస్తోంది. అలాగే మీరు ఈ చర్యను సెట్టింగ్‌లలోకి వెళ్లి మార్చుకోవచ్చు.</translation>
<translation id="8176440868214972690">సెట్టింగ్‌లు లేదా పాలసీల వంటి కొంత సమాచారాన్ని, దిగువున పేర్కొన్న వెబ్‌సైట్‌లకు ఈ పరికరపు అడ్మినిస్ట్రేటర్ పంపారు.</translation>
-<translation id="8184538546369750125">సార్వజనీన డిఫాల్ట్‌ను ఉపయోగించు (అనుమతించు)</translation>
+<translation id="8184538546369750125">సార్వజనీన డిఫాల్ట్‌ను ఉపయోగించు (అనుమతించండి)</translation>
<translation id="8186706823560132848">సాఫ్ట్‌వేర్</translation>
<translation id="8190193880870196235">ఎక్స్‌టెన్షన్ ద్వారా మేనేజ్ చేయబడుతుంది</translation>
<translation id="8194797478851900357">&amp;తరలించడాన్ని రద్దు చేయి</translation>
@@ -2629,8 +2629,8 @@
<translation id="8235754723616617175">కంట్రీ మ్యూజిక్</translation>
<translation id="8237519162179154808">అభిరుచులు &amp; కాలక్షేపం</translation>
<translation id="8238581221633243064">కొత్త అజ్ఞాత ట్యాబ్‌లో పేజీని తెరవండి</translation>
-<translation id="8241707690549784388">మీరు వెతికే పేజీ మీరు ఎంటర్ చేసిన సమాచారాన్ని ఉపయోగించుకుంది. ఆ పేజీకి తిరిగి వెళ్ల‌డం ద్వారా మీరు చేసిన ఏ చర్య అయినా పునరావృతం చేయ‌వలసి వస్తుంది. మీరు కొనసాగాలని అనుకుంటున్నారా?</translation>
-<translation id="8241712895048303527">ఈ సైట్‌లో బ్లాక్ చేయి</translation>
+<translation id="8241707690549784388">మీరు వెతికే పేజీ మీరు ఎంటర్ చేసిన సమాచారాన్ని ఉపయోగించుకుంది. ఆ పేజీకి తిరిగి వెళ్ల‌డం ద్వారా మీరు చేసిన ఏ చర్య అయినా రిపీట్‌ చేయ‌వలసి వస్తుంది. మీరు కొనసాగాలని అనుకుంటున్నారా?</translation>
+<translation id="8241712895048303527">ఈ సైట్‌లో బ్లాక్ చేయండి</translation>
<translation id="8242426110754782860">కొనసాగు</translation>
<translation id="8249296373107784235">రద్దుచేయి</translation>
<translation id="8249463483885748674">ప్రామాణిక &amp; ప్రవేశ పరీక్షలు</translation>
@@ -2708,7 +2708,7 @@
<translation id="8446884382197647889">మరింత తెలుసుకోండి</translation>
<translation id="8449836157089738489">అన్నింటినీ కొత్త ట్యాబ్ గ్రూప్‌లో తెరవండి</translation>
<translation id="8457125768502047971">అనిశ్చితం</translation>
-<translation id="8461694314515752532">మీ స్వంత సింక్‌ రహస్య పదబంధంతో సింక్ చేయబడిన డేటాని ఎన్‌క్రిప్ట్ చేయండి</translation>
+<translation id="8461694314515752532">మీ స్వంత సింక్‌ రహస్య పదబంధంతో సింక్ చేయబడిన డేటాను ఎన్‌క్రిప్ట్ చేయండి</translation>
<translation id="8466379296835108687">{COUNT,plural, =1{1 క్రెడిట్ కార్డ్}other{# క్రెడిట్ కార్డ్‌లు}}</translation>
<translation id="8473863474539038330">అడ్రస్‌లు, మరికొన్ని వివరాలు</translation>
<translation id="8474910779563686872">డెవలపర్ వివరాలను చూపు</translation>
@@ -2792,7 +2792,7 @@
<translation id="8738058698779197622">సురక్షిత కనెక్షన్‌ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్‌సైట్‌లు వాటిని గుర్తించడానికి ఉపయోగించే సర్టిఫికెట్‌లు నిర్దిష్ట కాలవ్యవధులలో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం యొక్క గడియారం సమయం తప్పుగా ఉన్నందున, Chromium ఈ సర్టిఫికెట్‌లను ధృవీకరించలేకపోయింది.</translation>
<translation id="8740359287975076522"><ph name="HOST_NAME" /> &lt;abbr id="dnsDefinition"&gt;DNS అడ్రస్‌&lt;/abbr&gt; కనుగొనబడలేదు. సమస్యను నిర్ధారిస్తోంది.</translation>
<translation id="8742371904523228557"><ph name="ORIGIN" /> కోసం మీ కోడ్ <ph name="ONE_TIME_CODE" /></translation>
-<translation id="874918643257405732">ఈ ట్యాబ్‌ను బుక్‌మార్క్ చేయి</translation>
+<translation id="874918643257405732">ఈ ట్యాబ్‌ను బుక్‌మార్క్ చేయండి</translation>
<translation id="8751426954251315517">దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి</translation>
<translation id="8758885506338294482">వీడియో గేమ్ పోటీలు</translation>
<translation id="8759274551635299824">ఈ కార్డ్ గడువు ముగిసింది</translation>
@@ -2803,7 +2803,7 @@
<translation id="8766943070169463815">సురక్షిత పేమెంట్ ఆధారాల ప్రామాణీకరణ షీట్ తెరవబడింది</translation>
<translation id="877985182522063539">A4</translation>
<translation id="8785658048882205566">మోటారుసైకిళ్లు</translation>
-<translation id="8790007591277257123">&amp;తొలగించడాన్ని పునరావృతం చేయి</translation>
+<translation id="8790007591277257123">&amp;తొలగించడాన్ని రిపీట్‌ చేయి</translation>
<translation id="8792621596287649091">మీరు మీ <ph name="ORG_NAME" /> ఖాతాకు యాక్సెస్‌ను కోల్పోవచ్చు. లేదా గుర్తింపు స‌మాచారం చోరీకి గురి కావచ్చు. మీ పాస్‌వర్డ్‌ను ఇప్పుడే రీసెట్ చేయాల్సిందిగా Chromium సిఫార్సు చేస్తోంది.</translation>
<translation id="8792626944327216835">మైక్రోఫోన్</translation>
<translation id="8793655568873652685"><ph name="ENROLLMENT_DOMAIN" />, మీ బ్రౌజర్‌లో Chrome Enterprise కనెక్టర్‌లను ఆన్ చేసింది. ఈ కనెక్టర్‌లకు మీ డేటాలో కొంత డేటాకు యాక్సెస్ ఉంది.</translation>
@@ -2834,7 +2834,7 @@
<translation id="8870413625673593573">ఇటీవల మూసివేసినవి</translation>
<translation id="8870494189203302833">ఒకే క్రమంలో ఉన్న ఫేస్ డౌన్</translation>
<translation id="8870700989640064057">గోప్యమైన ఫైల్‌ను ప్రింట్ చేయాలా?</translation>
-<translation id="8871553383647848643">మీ బ్రౌజర్ రూపాన్ని అనుకూలీకరించండి</translation>
+<translation id="8871553383647848643">మీ బ్రౌజర్ రూపాన్ని అనుకూలంగా మార్చండి</translation>
<translation id="8874824191258364635">చెల్లుబాటు అయ్యే కార్డ్ నంబర్‌ను నమోదు చేయండి</translation>
<translation id="8876033571432926051">సరదా గేమ్‌లు</translation>
<translation id="8877780815363510165">చేపలు పట్టడం</translation>
@@ -2847,7 +2847,7 @@
<translation id="890493561996401738">సూచన బటన్‌ను తీసివేయండి, <ph name="REMOVE_BUTTON_FOCUSED_FRIENDLY_MATCH_TEXT" />ను తీసివేయడానికి ఎంటర్ నొక్కండి</translation>
<translation id="8912362522468806198">Google ఖాతా</translation>
<translation id="8913778647360618320">'పేమెంట్ ఆప్షన్‌లను మేనేజ్ చేయి' బటన్, Chrome సెట్టింగ్‌లలో మీ పేమెంట్‌లు, క్రెడిట్ కార్డ్ సమాచారం మేనేజ్ చేయడానికి 'Enter'ను నొక్కండి</translation>
-<translation id="8922013791253848639">ప్రకటనలను ఈ సైట్‌లో ఎప్పుడూ అనుమతించు</translation>
+<translation id="8922013791253848639">ప్రకటనలను ఈ సైట్‌లో ఎప్పుడూ అనుమతించండి</translation>
<translation id="892588693504540538">కుడివైపు ఎగువ భాగంలో రంధ్రం</translation>
<translation id="8930330541574156305">రియల్ ఎస్టేట్</translation>
<translation id="8931333241327730545">మీరు ఈ కార్డ్‌ను మీ Google ఖాతాకు సేవ్ చేయాలనుకుంటున్నారా?</translation>
@@ -2859,10 +2859,10 @@
<translation id="8957210676456822347">క్యాప్టివ్ పోర్టల్ ప్రామాణీకరణ</translation>
<translation id="8962950042226115166">అనుమానాస్పద సైట్</translation>
<translation id="8963117664422609631">సైట్ సెట్టింగ్‌లకు వెళ్లండి</translation>
-<translation id="8963213021028234748"><ph name="MARKUP_1" />సూచనలు:<ph name="MARKUP_2" />మీకు డేటా కనెక్షన్ ఉందని నిర్ధారించుకోండి<ph name="MARKUP_3" />ఈ వెబ్‌పేజీని తర్వాత మళ్లీ లోడ్ చేయండి<ph name="MARKUP_4" />మీరు నమోదు చేసిన అడ్రస్‌ తనిఖీ చేయండి<ph name="MARKUP_5" /></translation>
+<translation id="8963213021028234748"><ph name="MARKUP_1" />సూచనలు:<ph name="MARKUP_2" />మీకు డేటా కనెక్షన్ ఉందని నిర్ధారించుకోండి<ph name="MARKUP_3" />ఈ వెబ్‌పేజీని తర్వాత మళ్లీ లోడ్ చేయండి<ph name="MARKUP_4" />మీరు నమోదు చేసిన అడ్రస్‌ చెక్ చేయండి<ph name="MARKUP_5" /></translation>
<translation id="8968766641738584599">కార్డ్‌ని సేవ్ చేయండి</translation>
<translation id="8971063699422889582">సర్వర్ ప్రమాణపత్రం గడువు ముగిసింది.</translation>
-<translation id="8975012916872825179">ఫోన్ నంబర్‌లు, ఈమెయిల్‌ అడ్రస్‌లు మరియు బట్వాడా అడ్రస్‌లు లాంటి సమాచారం ఉంటుంది</translation>
+<translation id="8975012916872825179">ఫోన్ నంబర్‌లు, ఈమెయిల్‌ అడ్రస్‌లు మరియు డెలివరీ అడ్రస్‌లు లాంటి సమాచారం ఉంటుంది</translation>
<translation id="8975263830901772334">మీరు ముద్రించే ఫైళ్ల పేర్లు</translation>
<translation id="8978053250194585037">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />ఫిషింగ్‌ని గుర్తించింది<ph name="END_LINK" />. ఫిషింగ్ సైట్‌లు వేరే వెబ్‌సైట్‌ల లాగా ప్రవర్తించడం ద్వారా మిమ్మల్ని మాయ చేయవచ్చు.</translation>
<translation id="8983369100812962543">మీరు ఇప్పుడు యాప్ పరిమాణం మార్చవచ్చు</translation>
@@ -2891,7 +2891,7 @@
<translation id="9035022520814077154">భద్రతా ఎర్రర్</translation>
<translation id="9036306139374661733">మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి అనుమతించాలా?</translation>
<translation id="9038649477754266430">పేజీలను మరింత త్వరగా లోడ్ చేయడానికి సూచన సేవను ఉపయోగించండి</translation>
-<translation id="9039213469156557790">అలాగే, ఈ పేజీలో సురక్షితం కాని ఇతర వనరులు ఉన్నాయి. ఈ వనరులను బదిలీ చేస్తున్నప్పుడు ఇతరులు చూడగలరు మరియు దాడికి పాల్పడేవారు పేజీ ప్రవర్తనను మార్చేలా వీటిని సవరించగలరు.</translation>
+<translation id="9039213469156557790">అలాగే, ఈ పేజీలో సురక్షితం కాని ఇతర వనరులు ఉన్నాయి. ఈ వనరులను బదిలీ చేస్తున్నప్పుడు ఇతరులు చూడగలరు మరియు దాడికి పాల్పడేవారు పేజీ ప్రవర్తనను మార్చేలా వీటిని ఎడిట్ చేయగలరు.</translation>
<translation id="9040464167025094690">Find my device బటన్, Google ఖాతాలో Find my deviceకు వెళ్లడానికి Enterను నొక్కండి</translation>
<translation id="9042617223719777575">లార్జ్ కెపాసిటీ</translation>
<translation id="9044359186343685026">Touch IDని ఉపయోగించు</translation>
@@ -2936,13 +2936,13 @@
<translation id="9148507642005240123">&amp;సవరించడాన్ని రద్దు చేయి</translation>
<translation id="9150045010208374699">మీ కెమెరాను ఉపయోగించండి</translation>
<translation id="9150685862434908345">మీ అడ్మినిస్ట్రేట‌ర్ మీ బ్రౌజర్ సెటప్‌ను రిమోట్ విధానంలో మార్చవచ్చు. ఈ పరికరంలోని యాక్టివిటీని Chrome వెలుపల కూడా మేనేజ్ చేస్తుండవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
-<translation id="9154194610265714752">నవీకరించబడింది</translation>
+<translation id="9154194610265714752">అప్‌డేట్ చేయబడింది</translation>
<translation id="9155211586651734179">ఆడియో పెరిఫెరల్స్ జోడించబడ్డాయి</translation>
<translation id="9157595877708044936">అమర్చుతోంది...</translation>
<translation id="9158625974267017556">C6 (ఎన్వలప్)</translation>
<translation id="9164742147345933553">os://flags</translation>
<translation id="9168814207360376865">ఏవైనా పేమెంట్ ఆప్షన్‌లను మీరు సేవ్ చేశారో లేదో చెక్ చేసేందుకు వెబ్‌సైట్‌లను అనుమతించండి</translation>
-<translation id="9169664750068251925">ఈ సైట్‌లో ఎప్పుడూ బ్లాక్ చేయి</translation>
+<translation id="9169664750068251925">ఈ సైట్‌లో ఎప్పుడూ బ్లాక్ చేయండి</translation>
<translation id="9169931577761441333"><ph name="APP_NAME" />ను హోమ్ స్క్రీన్‌కు జోడించండి</translation>
<translation id="9170848237812810038">&amp;అన్డు</translation>
<translation id="9171296965991013597">యాప్ నుండి నిష్క్రమించాలా?</translation>
@@ -2963,7 +2963,7 @@
<translation id="9213433120051936369">కనిపించే తీరును అనుకూలంగా మార్చండి</translation>
<translation id="9215416866750762878">ఒక అప్లికేషన్ కారణంగా Chrome ఈ సైట్‌కు సురక్షితంగా కనెక్ట్ కాలేకపోతోంది</translation>
<translation id="9219103736887031265">ఇమేజ్‌లు</translation>
-<translation id="922152298093051471">Chromeను అనుకూలంగా మార్చు</translation>
+<translation id="922152298093051471">Chromeను అనుకూలంగా మార్చండి</translation>
<translation id="933712198907837967">డైనర్స్ క్లబ్</translation>
<translation id="935608979562296692">ఫారమ్‌ను తీసివేయండి</translation>
<translation id="936474030629450166">సూపర్-B</translation>
@@ -2976,7 +2976,7 @@
<translation id="947370374845726940"><ph name="CREATE_GOOGLE_SITE_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Sitesలో త్వరగా కొత్త సైట్‌ను క్రియేట్ చేయడానికి Tabను నొక్కి, ఆపై Enterను నొక్కండి</translation>
<translation id="950736567201356821">ఎగువ భాగంలో మూడు రంధ్రాలు</translation>
<translation id="961663415146723894">దిగువ భాగంలో బైండ్</translation>
-<translation id="962484866189421427">ఈ కంటెంట్ వేరేవాటిలా కనిపించే మోసపూరిత యాప్‌లను ఇన్‌స్టాల్ చేయడానికి ప్రయత్నించవచ్చు లేదా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే డేటాని సేకరించవచ్చు. <ph name="BEGIN_LINK" />అయినప్పటికీ, చూపించు<ph name="END_LINK" /></translation>
+<translation id="962484866189421427">ఈ కంటెంట్ వేరేవాటిలా కనిపించే మోసపూరిత యాప్‌లను ఇన్‌స్టాల్ చేయడానికి ప్రయత్నించవచ్చు లేదా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే డేటాను సేకరించవచ్చు. <ph name="BEGIN_LINK" />అయినప్పటికీ, చూపించు<ph name="END_LINK" /></translation>
<translation id="96680173638229310">ఆటోమొబైల్స్ &amp; వాహనాలు</translation>
<translation id="969892804517981540">అధికారిక బిల్డ్</translation>
<translation id="973773823069644502">డెలివరీ అడ్రస్‌ను జోడించండి</translation>
diff --git a/chromium/components/strings/components_strings_tr.xtb b/chromium/components/strings/components_strings_tr.xtb
index e9a9d9cd386..fa50bc0c880 100644
--- a/chromium/components/strings/components_strings_tr.xtb
+++ b/chromium/components/strings/components_strings_tr.xtb
@@ -145,7 +145,7 @@ Aksi halde bu işlem gizlilik ayarlarınız tarafından engellenecek. Buna izin
<ph name="LIST_ITEM" />İşvereniniz veya okulunuz
<ph name="LIST_ITEM" />İnternet servis sağlayıcınız
<ph name="END_LIST" /></translation>
-<translation id="1337692097987160377">Bu sekmeyi paylaşın</translation>
+<translation id="1337692097987160377">Bu sekmeyi paylaş</translation>
<translation id="1339601241726513588">Kayıt alan adı:</translation>
<translation id="1340482604681802745">Alınacağı adres</translation>
<translation id="1346748346194534595">Sağa</translation>
@@ -1983,7 +1983,7 @@ Aksi halde bu işlem gizlilik ayarlarınız tarafından engellenecek. Buna izin
<translation id="646793340882508547">Macera oyunları</translation>
<translation id="6468485451923838994">Yazı tipleri</translation>
<translation id="647261751007945333">Cihaz politikaları</translation>
-<translation id="6476284679642588870">Ödeme yöntemlerini yönetin</translation>
+<translation id="6476284679642588870">Ödeme yöntemlerini yönet</translation>
<translation id="6486200200930923183">Belgesel filmler</translation>
<translation id="6489534406876378309">Kilitlenmeleri yüklemeye başla</translation>
<translation id="6493924760403974580">Bu uygulama yalnızca bu boyutu destekler.</translation>
@@ -2955,7 +2955,7 @@ Ek ayrıntılar:
<translation id="9213433120051936369">Görünümü özelleştir</translation>
<translation id="9215416866750762878">Bir uygulama, Chrome'un bu siteye güvenli bir şekilde bağlanmasını engelliyor</translation>
<translation id="9219103736887031265">Resimler</translation>
-<translation id="922152298093051471">Chrome'u özelleştirin</translation>
+<translation id="922152298093051471">Chrome'u özelleştir</translation>
<translation id="933712198907837967">Diners Club</translation>
<translation id="935608979562296692">FORMU TEMİZLE</translation>
<translation id="936474030629450166">Super-B</translation>
diff --git a/chromium/components/strings/components_strings_uk.xtb b/chromium/components/strings/components_strings_uk.xtb
index a619ef14811..7b7f783cf63 100644
--- a/chromium/components/strings/components_strings_uk.xtb
+++ b/chromium/components/strings/components_strings_uk.xtb
@@ -1155,7 +1155,7 @@
<translation id="4152318981910038897">{COUNT,plural, =1{Сторінка 1}one{Сторінка {COUNT}}few{Сторінка {COUNT}}many{Сторінка {COUNT}}other{Сторінка {COUNT}}}</translation>
<translation id="4154664944169082762">Відбитки</translation>
<translation id="4159784952369912983">Пурпуровий</translation>
-<translation id="4165986682804962316">Налаштування сайту</translation>
+<translation id="4165986682804962316">Налаштування сайтів</translation>
<translation id="4171400957073367226">Недійсний підпис для підтвердження</translation>
<translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" />, <ph name="RESULT_PRODUCT_SOURCE" /></translation>
<translation id="4172051516777682613">Завжди показувати</translation>
diff --git a/chromium/components/strings/components_strings_vi.xtb b/chromium/components/strings/components_strings_vi.xtb
index efc072d84b3..3dfcb6d7633 100644
--- a/chromium/components/strings/components_strings_vi.xtb
+++ b/chromium/components/strings/components_strings_vi.xtb
@@ -1415,7 +1415,7 @@ Nếu bạn từ chối, chế độ cài đặt quyền riêng tư của bạn
<translation id="483241715238664915">Bật cảnh báo</translation>
<translation id="4834250788637067901">Phương thức thanh toán, ưu đãi và địa chỉ sử dụng Google Pay</translation>
<translation id="4838327282952368871">Mơ mộng</translation>
-<translation id="4840250757394056958">Xem nhật ký Chrome của bạn</translation>
+<translation id="4840250757394056958">Xem nhật ký duyệt web trên Chrome</translation>
<translation id="484462545196658690">Tự động</translation>
<translation id="484671803914931257">Nhận chiết khấu tại <ph name="MERCHANT_NAME" /> và nhiều nơi khác</translation>
<translation id="4850886885716139402">Xem</translation>
diff --git a/chromium/components/strings/components_strings_zh-CN.xtb b/chromium/components/strings/components_strings_zh-CN.xtb
index 7c1c6cdd484..59c5615c3ca 100644
--- a/chromium/components/strings/components_strings_zh-CN.xtb
+++ b/chromium/components/strings/components_strings_zh-CN.xtb
@@ -574,7 +574,7 @@
<translation id="2505268675989099013">保护帐号</translation>
<translation id="2509167091171468975">食品杂货零售店</translation>
<translation id="2512101340618156538">不得使用(默认)</translation>
-<translation id="2512413427717747692">将 Chrome 设为 默认浏览器的按钮,按下 Enter 键即可在 iOS 设置中将 Chrome 设置为系统的默认浏览器</translation>
+<translation id="2512413427717747692">“将 Chrome 设为默认浏览器”按钮,按下 Enter 键即可在 iOS 设置中将 Chrome 设置为系统的默认浏览器</translation>
<translation id="2515629240566999685">检查您所在区域的网络信号</translation>
<translation id="2521385132275182522">钉装(右下角)</translation>
<translation id="2521736961081452453">创建表单</translation>
@@ -874,7 +874,7 @@
<translation id="3366477098757335611">查看您的卡</translation>
<translation id="3369192424181595722">时钟错误</translation>
<translation id="3369459162151165748">车辆零部件与配件</translation>
-<translation id="3371064404604898522">将 Chrome 设置为默认浏览器</translation>
+<translation id="3371064404604898522">将 Chrome 设为默认浏览器</translation>
<translation id="3371076217486966826"><ph name="URL" /> 想:
• 为您的周边环境创建 3D 地图并跟踪摄像头位置
• 使用您的摄像头</translation>
@@ -1226,7 +1226,7 @@
<translation id="4331519897422864041">堆叠出纸器 5</translation>
<translation id="4331708818696583467">不安全</translation>
<translation id="4340575312453649552">对于您的设备来说,此广告占用了太多资源,因此 Chrome 已将其移除。</translation>
-<translation id="4340982228985273705">系统检测到,此计算机不是由企业管理,因此政策只能自动安装 Chrome 网上应用店中的扩展程序。对应的 Chrome 网上应用店更新网址为“<ph name="CWS_UPDATE_URL" />”。</translation>
+<translation id="4340982228985273705">系统检测到,此计算机不是由企业管理,因此政策只能自动安装 Chrome 应用商店中的扩展程序。对应的 Chrome 应用商店更新网址为“<ph name="CWS_UPDATE_URL" />”。</translation>
<translation id="4346197816712207223">接受的信用卡</translation>
<translation id="4346833872170306413">Roc-16K</translation>
<translation id="4348834659292907206">与 <ph name="SITE" /> 的连接不安全</translation>
@@ -1690,7 +1690,7 @@
<translation id="5607240918979444548">Architecture-C</translation>
<translation id="5610142619324316209">检查网络连接</translation>
<translation id="5610807607761827392">您可以在<ph name="BEGIN_LINK" />设置<ph name="END_LINK" />中管理信用卡和地址信息。</translation>
-<translation id="561165882404867731">使用“Google 翻译”服务来翻译此页面</translation>
+<translation id="561165882404867731">使用 Google 翻译来翻译此页面</translation>
<translation id="5612720917913232150"><ph name="URL" /> 想使用您计算机的位置信息</translation>
<translation id="561669346091975195">科幻与奇幻电视节目</translation>
<translation id="5617949217645503996"><ph name="HOST_NAME" /> 将您重定向的次数过多。</translation>
@@ -2048,7 +2048,7 @@
<translation id="6689249931105087298">相对(使用黑点压缩)</translation>
<translation id="6689271823431384964">Chrome 正在询问是否要将卡保存到您的 Google 帐号中,因为您已登录。您可在“设置”中更改此行为。持卡人姓名来自您的帐号。</translation>
<translation id="6694681292321232194"><ph name="FIND_MY_PHONE_FOCUSED_FRIENDLY_MATCH_TEXT" />,依次按 Tab 键和 Enter 键即可在 Google 帐号中查找您的设备</translation>
-<translation id="6696588630955820014">“分享此标签页”按钮,按 Enter 键即可通过分享链接、创建二维码、投射等操作分享此标签页</translation>
+<translation id="6696588630955820014">“分享此标签页”按钮,按 Enter 键即可通过分享链接、创建二维码、投放等操作分享此标签页</translation>
<translation id="6698381487523150993">创建时间:</translation>
<translation id="6702919718839027939">演示</translation>
<translation id="6709133671862442373">资讯</translation>
@@ -2298,7 +2298,7 @@
<translation id="7392089738299859607">更新地址</translation>
<translation id="7399802613464275309">安全检查</translation>
<translation id="7400418766976504921">网址</translation>
-<translation id="7403392780200267761">通过分享链接、创建二维码、投射等操作分享此标签页</translation>
+<translation id="7403392780200267761">通过分享链接、创建二维码、投放等操作分享此标签页</translation>
<translation id="7403591733719184120">您的 <ph name="DEVICE_NAME" /> 受管理</translation>
<translation id="7407424307057130981">&lt;p&gt;如果您的 Windows 计算机上装有 SuperFish 软件,您将会看到这条错误消息。&lt;/p&gt;
&lt;p&gt;您可以按照下述步骤暂时停用该软件,以便连接到网络。您需要拥有管理员权限才能执行下列操作。&lt;/p&gt;
@@ -2870,7 +2870,7 @@
<translation id="9020200922353704812">必须输入信用卡帐单邮寄地址</translation>
<translation id="9020542370529661692">已将此网页内容翻译成<ph name="TARGET_LANGUAGE" /></translation>
<translation id="9020742383383852663">A8</translation>
-<translation id="9021429684248523859"><ph name="SHARE_THIS_PAGE_FOCUSED_FRIENDLY_MATCH_TEXT" />,依次按 Tab 键和 Enter 键即可通过分享链接、创建二维码、投射等操作分享此标签页</translation>
+<translation id="9021429684248523859"><ph name="SHARE_THIS_PAGE_FOCUSED_FRIENDLY_MATCH_TEXT" />,依次按 Tab 键和 Enter 键即可通过分享链接、创建二维码、投放等操作分享此标签页</translation>
<translation id="9025348182339809926">(无效)</translation>
<translation id="9030265603405983977">单色</translation>
<translation id="9035022520814077154">安全错误</translation>
@@ -2936,7 +2936,7 @@
<translation id="917450738466192189">服务器证书无效。</translation>
<translation id="9174623988242579721">定制车与高性能车</translation>
<translation id="9174917557437862841">标签页切换按钮,按 Enter 键可切换到此标签页</translation>
-<translation id="9179703756951298733">请在 Chrome 设置中管理您的付款和信用卡信息</translation>
+<translation id="9179703756951298733">在 Chrome 设置中管理您的付款和信用卡信息</translation>
<translation id="9183302530794969518">Google 文档</translation>
<translation id="9183425211371246419"><ph name="HOST_NAME" /> 使用了不受支持的协议。</translation>
<translation id="9187461866967718678">极限运动</translation>
diff --git a/chromium/components/strings/components_strings_zh-TW.xtb b/chromium/components/strings/components_strings_zh-TW.xtb
index 370bfe61ed6..1f5509976d4 100644
--- a/chromium/components/strings/components_strings_zh-TW.xtb
+++ b/chromium/components/strings/components_strings_zh-TW.xtb
@@ -145,7 +145,7 @@
<ph name="LIST_ITEM" />你的雇主或學校
<ph name="LIST_ITEM" />你的網際網路服務供應商
<ph name="END_LIST" /></translation>
-<translation id="1337692097987160377">共用此分頁</translation>
+<translation id="1337692097987160377">分享此分頁</translation>
<translation id="1339601241726513588">註冊網域:</translation>
<translation id="1340482604681802745">取件地址</translation>
<translation id="1346748346194534595">向右</translation>
@@ -1220,7 +1220,7 @@
<translation id="4306812610847412719">剪貼簿</translation>
<translation id="4312613361423056926">B2</translation>
<translation id="4312866146174492540">封鎖 (預設)</translation>
-<translation id="4314815835985389558">管理同步功能資料</translation>
+<translation id="4314815835985389558">管理同步資料</translation>
<translation id="4318312030194671742">繪製預覽合成器服務</translation>
<translation id="4318566738941496689">你的裝置名稱和網路位址</translation>
<translation id="4325600325087822253">紙匣 17</translation>
diff --git a/chromium/components/strings/components_strings_zu.xtb b/chromium/components/strings/components_strings_zu.xtb
index f540914060f..7070d0c76b7 100644
--- a/chromium/components/strings/components_strings_zu.xtb
+++ b/chromium/components/strings/components_strings_zu.xtb
@@ -837,7 +837,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum
<translation id="3249151924975132674">Izimali mboleko zabafundi kanye nezimali zasekolishi</translation>
<translation id="3249845759089040423">I-Groovy</translation>
<translation id="3250640885957938546">Ukukhangisa nokumaketha</translation>
-<translation id="3252266817569339921">Isi-French</translation>
+<translation id="3252266817569339921">French</translation>
<translation id="3256863843508922226">Ukuyeka emsebenzini nepenshini</translation>
<translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, cindezela u-Tab bese u-Enter ukuze udale umcimbi omusha ngokushesha ku-Google Calendar</translation>
<translation id="3261488570342242926">Funda mayelana namakhadi we-virtual</translation>
@@ -1417,7 +1417,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum
<translation id="484671803914931257">Thola isaphulelo ku-<ph name="MERCHANT_NAME" /> nokwengeziwe</translation>
<translation id="4850886885716139402">Buka</translation>
<translation id="4852429274334674023">Amasistimu okusebenza</translation>
-<translation id="485316830061041779">Isi-German</translation>
+<translation id="485316830061041779">German</translation>
<translation id="4853901935952445031">Le syithi ngeke ikwazi ukusebenzisa i-U2F API ngemuva kuka-Febhuwari 2022. Uma ungumnikazi wesayithi, kufanele uyishintshe ukuze usebenzise i-API Yokufakazela Ubuqiniso ye-API.</translation>
<translation id="4854362297993841467">Le ndlela yokulethwa ayitholakali. Zama indlela ehlukile.</translation>
<translation id="4854853140771946034">Dala inothi elisha ngokushesha ku-Google Keep</translation>
@@ -1636,7 +1636,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum
<translation id="541416427766103491">Isitaki esingu-4</translation>
<translation id="5421136146218899937">Sula idatha yokudlulisa amehlo...</translation>
<translation id="5426179911063097041">I-<ph name="SITE" /> ifuna ukukuthumelela izaziso</translation>
-<translation id="5428105026674456456">Isi-Spanish</translation>
+<translation id="5428105026674456456">Spanish</translation>
<translation id="5430298929874300616">Susa ibhukhimakhi</translation>
<translation id="5439770059721715174">Iphutha lokuqinisekisa i-schema ku-"<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation>
<translation id="5443468954631487277">I-oda elingemuva libheke phezulu</translation>
@@ -1646,7 +1646,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum
<translation id="5457113250005438886">Ayivumelekile</translation>
<translation id="5458150163479425638">{CONTACT,plural, =0{<ph name="CONTACT_PREVIEW" />}=1{<ph name="CONTACT_PREVIEW" /> nongu-<ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> ngaphezulu}one{<ph name="CONTACT_PREVIEW" /> nongu-<ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> ngaphezulu}other{<ph name="CONTACT_PREVIEW" /> nongu-<ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> ngaphezulu}}</translation>
<translation id="5463625433003343978">Ithola amadivayisi...</translation>
-<translation id="5469868506864199649">Isi-Italian</translation>
+<translation id="5469868506864199649">Italian</translation>
<translation id="5470230812924696184">Ubunjiniyela bamabhuloho</translation>
<translation id="5470861586879999274">&amp;Yenza futhi ukuhlela</translation>
<translation id="5471337644440862957">Awama-movie wehlaya</translation>
@@ -2655,7 +2655,7 @@ Imininingwane engeziwe:
<translation id="8294431847097064396">Umthombo</translation>
<translation id="8296205692406981542">Izifunda zamaphakhi nezingadi</translation>
<translation id="8298115750975731693">I-Wi-Fi oyisebenzisayo (<ph name="WIFI_NAME" />) ingakudinga ukuthi uvakashele ku-<ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation>
-<translation id="8299269255470343364">Isi-Japanese</translation>
+<translation id="8299269255470343364">Japanese</translation>
<translation id="8303854710873047864">Isigaba se-"<ph name="SECTION" />" esibonisiwe</translation>
<translation id="830498451218851433">Goqa ngohafu</translation>
<translation id="8307358339886459768">Isithombe esincane</translation>
@@ -2752,7 +2752,7 @@ Imininingwane engeziwe:
<translation id="8625384913736129811">Londoloza leli khadi kule divayisi</translation>
<translation id="865032292777205197">izinzwa zokunyakaza</translation>
<translation id="8663226718884576429">Isifinyezo se-oda, <ph name="TOTAL_LABEL" />, Imininingwane eminingi</translation>
-<translation id="8666678546361132282">I-English</translation>
+<translation id="8666678546361132282">English</translation>
<translation id="8669306706049782872">Sebenzisa ulwazi olumayelana nezikrini zakho ukuze uvule futhi ubeke amawindi</translation>
<translation id="867224526087042813">Isiginesha</translation>
<translation id="8672264262457010862">Amabhizinisi nomkhakha</translation>
diff --git a/chromium/content/browser/devtools/protocol/page_handler.cc b/chromium/content/browser/devtools/protocol/page_handler.cc
index f5c69372224..e29a45bba08 100644
--- a/chromium/content/browser/devtools/protocol/page_handler.cc
+++ b/chromium/content/browser/devtools/protocol/page_handler.cc
@@ -194,10 +194,12 @@ PageHandler::PageHandler(
EmulationHandler* emulation_handler,
BrowserHandler* browser_handler,
bool allow_unsafe_operations,
- absl::optional<url::Origin> navigation_initiator_origin)
+ absl::optional<url::Origin> navigation_initiator_origin,
+ bool may_read_local_files)
: DevToolsDomainHandler(Page::Metainfo::domainName),
allow_unsafe_operations_(allow_unsafe_operations),
navigation_initiator_origin_(navigation_initiator_origin),
+ may_read_local_files_(may_read_local_files),
enabled_(false),
screencast_enabled_(false),
screencast_quality_(kDefaultScreenshotQuality),
@@ -466,6 +468,11 @@ void PageHandler::Navigate(const std::string& url,
Response::ServerError("Cannot navigate to invalid URL"));
return;
}
+ if (gurl.SchemeIsFile() && !may_read_local_files_) {
+ callback->sendFailure(
+ Response::ServerError("Navigating to local URL is not allowed"));
+ return;
+ }
if (!host_) {
callback->sendFailure(Response::InternalError());
diff --git a/chromium/content/browser/devtools/protocol/page_handler.h b/chromium/content/browser/devtools/protocol/page_handler.h
index d027329a897..07f109521e3 100644
--- a/chromium/content/browser/devtools/protocol/page_handler.h
+++ b/chromium/content/browser/devtools/protocol/page_handler.h
@@ -65,7 +65,8 @@ class PageHandler : public DevToolsDomainHandler,
PageHandler(EmulationHandler* emulation_handler,
BrowserHandler* browser_handler,
bool allow_unsafe_operations,
- absl::optional<url::Origin> navigation_initiator_origin);
+ absl::optional<url::Origin> navigation_initiator_origin,
+ bool may_read_local_files);
PageHandler(const PageHandler&) = delete;
PageHandler& operator=(const PageHandler&) = delete;
@@ -215,6 +216,7 @@ class PageHandler : public DevToolsDomainHandler,
const bool allow_unsafe_operations_;
const absl::optional<url::Origin> navigation_initiator_origin_;
+ const bool may_read_local_files_;
bool enabled_;
bool bypass_csp_ = false;
diff --git a/chromium/content/browser/devtools/render_frame_devtools_agent_host.cc b/chromium/content/browser/devtools/render_frame_devtools_agent_host.cc
index 3b210604b04..f21c7d0010b 100644
--- a/chromium/content/browser/devtools/render_frame_devtools_agent_host.cc
+++ b/chromium/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -354,7 +354,8 @@ bool RenderFrameDevToolsAgentHost::AttachSession(DevToolsSession* session,
session->AddHandler(std::make_unique<protocol::PageHandler>(
emulation_handler_ptr, browser_handler_ptr,
session->GetClient()->AllowUnsafeOperations(),
- session->GetClient()->GetNavigationInitiatorOrigin()));
+ session->GetClient()->GetNavigationInitiatorOrigin(),
+ session->GetClient()->MayReadLocalFiles()));
session->AddHandler(std::make_unique<protocol::SecurityHandler>());
if (!frame_tree_node_ || !frame_tree_node_->parent()) {
session->AddHandler(
diff --git a/chromium/content/browser/download/download_browsertest.cc b/chromium/content/browser/download/download_browsertest.cc
index 6dcc861171b..500521ce2c3 100644
--- a/chromium/content/browser/download/download_browsertest.cc
+++ b/chromium/content/browser/download/download_browsertest.cc
@@ -3763,6 +3763,58 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, UpdateSiteForCookies) {
site_a.GetURL("a.test", "/")));
}
+// Tests that if `update_first_party_url_on_redirect` is set to false, download
+// will not behave like a top-level frame navigation and SameSite=Strict cookies
+// will not be set on a redirection.
+IN_PROC_BROWSER_TEST_F(
+ DownloadContentTest,
+ SiteForCookies_DownloadUrl_NotUpdateFirstPartyUrlOnRedirect) {
+ net::EmbeddedTestServer site_a;
+ net::EmbeddedTestServer site_b;
+
+ base::StringPairs cookie_headers;
+ cookie_headers.push_back(std::make_pair(
+ std::string("Set-Cookie"), std::string("A=strict; SameSite=Strict")));
+ cookie_headers.push_back(std::make_pair(std::string("Set-Cookie"),
+ std::string("B=lax; SameSite=Lax")));
+
+ // This will request a URL on b.test, which redirects to a url that sets the
+ // cookies on a.test.
+ site_a.RegisterRequestHandler(CreateBasicResponseHandler(
+ "/sets-samesite-cookies", net::HTTP_OK, cookie_headers,
+ "application/octet-stream", "abcd"));
+ ASSERT_TRUE(site_a.Start());
+ site_b.RegisterRequestHandler(
+ CreateRedirectHandler("/redirected-download",
+ site_a.GetURL("a.test", "/sets-samesite-cookies")));
+ ASSERT_TRUE(site_b.Start());
+
+ // Download the file.
+ SetupEnsureNoPendingDownloads();
+ std::unique_ptr<download::DownloadUrlParameters> download_parameters(
+ DownloadRequestUtils::CreateDownloadForWebContentsMainFrame(
+ shell()->web_contents(),
+ site_b.GetURL("b.test", "/redirected-download"),
+ TRAFFIC_ANNOTATION_FOR_TESTS));
+ download_parameters->set_update_first_party_url_on_redirect(false);
+ std::unique_ptr<DownloadTestObserver> observer(CreateWaiter(shell(), 1));
+ DownloadManagerForShell(shell())->DownloadUrl(std::move(download_parameters));
+ observer->WaitForFinished();
+
+ // Get the important info from other threads and check it.
+ EXPECT_TRUE(EnsureNoPendingDownloads());
+
+ std::vector<download::DownloadItem*> downloads;
+ DownloadManagerForShell(shell())->GetAllDownloads(&downloads);
+ ASSERT_EQ(1u, downloads.size());
+ ASSERT_EQ(download::DownloadItem::COMPLETE, downloads[0]->GetState());
+
+ // Check that the cookies were not set on a.test.
+ EXPECT_EQ("",
+ content::GetCookies(shell()->web_contents()->GetBrowserContext(),
+ site_a.GetURL("a.test", "/")));
+}
+
// Verifies that isolation info set in DownloadUrlParameters can be populated.
IN_PROC_BROWSER_TEST_F(DownloadContentTest,
SiteForCookies_DownloadUrl_IsolationInfoPopulated) {
diff --git a/chromium/content/browser/service_worker/service_worker_version.cc b/chromium/content/browser/service_worker/service_worker_version.cc
index 495b079d384..90facd12b59 100644
--- a/chromium/content/browser/service_worker/service_worker_version.cc
+++ b/chromium/content/browser/service_worker/service_worker_version.cc
@@ -2012,18 +2012,17 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
MarkIfStale();
+ // Global `this` protecter.
+ // callbacks initiated by this function sometimes reduce refcnt to 0
+ // to make this instance freed.
+ scoped_refptr<ServiceWorkerVersion> protect_this(this);
+
// Stopping the worker hasn't finished within a certain period.
if (GetTickDuration(stop_time_) > kStopWorkerTimeout) {
DCHECK_EQ(EmbeddedWorkerStatus::STOPPING, running_status());
ReportError(blink::ServiceWorkerStatusCode::kErrorTimeout,
"DETACH_STALLED_IN_STOPPING");
- // Detach the worker. Remove |this| as a listener first; otherwise
- // OnStoppedInternal might try to restart before the new worker
- // is created. Also, protect |this|, since swapping out the
- // EmbeddedWorkerInstance could destroy our ServiceWorkerHost which could in
- // turn destroy |this|.
- scoped_refptr<ServiceWorkerVersion> protect_this(this);
embedded_worker_->RemoveObserver(this);
embedded_worker_->Detach();
embedded_worker_ = std::make_unique<EmbeddedWorkerInstance>(this);
@@ -2050,7 +2049,6 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
DCHECK(running_status() == EmbeddedWorkerStatus::STARTING ||
running_status() == EmbeddedWorkerStatus::STOPPING)
<< static_cast<int>(running_status());
- scoped_refptr<ServiceWorkerVersion> protect(this);
FinishStartWorker(blink::ServiceWorkerStatusCode::kErrorTimeout);
if (running_status() == EmbeddedWorkerStatus::STARTING)
embedded_worker_->Stop();
@@ -2059,17 +2057,22 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
// Requests have not finished before their expiration.
bool stop_for_timeout = false;
- auto timeout_iter = request_timeouts_.begin();
- while (timeout_iter != request_timeouts_.end()) {
+ std::set<InflightRequestTimeoutInfo> request_timeouts;
+ request_timeouts.swap(request_timeouts_);
+ auto timeout_iter = request_timeouts.begin();
+ while (timeout_iter != request_timeouts.end()) {
const InflightRequestTimeoutInfo& info = *timeout_iter;
- if (!RequestExpired(info.expiration))
+ if (!RequestExpired(info.expiration)) {
break;
+ }
if (MaybeTimeoutRequest(info)) {
stop_for_timeout =
stop_for_timeout || info.timeout_behavior == KILL_ON_TIMEOUT;
}
- timeout_iter = request_timeouts_.erase(timeout_iter);
+ timeout_iter = request_timeouts.erase(timeout_iter);
}
+ DCHECK(request_timeouts_.empty());
+ request_timeouts_.swap(request_timeouts);
if (stop_for_timeout && running_status() != EmbeddedWorkerStatus::STOPPING)
embedded_worker_->Stop();
diff --git a/chromium/content/browser/service_worker/service_worker_version.h b/chromium/content/browser/service_worker/service_worker_version.h
index 4d63846d263..c7adbdcec16 100644
--- a/chromium/content/browser/service_worker/service_worker_version.h
+++ b/chromium/content/browser/service_worker/service_worker_version.h
@@ -883,6 +883,8 @@ class CONTENT_EXPORT ServiceWorkerVersion
bool is_browser_startup_complete,
blink::ServiceWorkerStatusCode status);
+ // The caller of MaybeTimeoutRequest must increase reference count of |this|
+ // to avoid it deleted during the execution.
bool MaybeTimeoutRequest(const InflightRequestTimeoutInfo& info);
void SetAllRequestExpirations(const base::TimeTicks& expiration);
diff --git a/chromium/content/browser/web_contents/web_contents_impl.cc b/chromium/content/browser/web_contents/web_contents_impl.cc
index 335e70179a0..27d6e13b9a3 100644
--- a/chromium/content/browser/web_contents/web_contents_impl.cc
+++ b/chromium/content/browser/web_contents/web_contents_impl.cc
@@ -1048,10 +1048,22 @@ WebContentsImpl::~WebContentsImpl() {
outermost->SetAsFocusedWebContentsIfNecessary();
}
- if (mouse_lock_widget_)
+ if (mouse_lock_widget_) {
mouse_lock_widget_->RejectMouseLockOrUnlockIfNecessary(
blink::mojom::PointerLockResult::kElementDestroyed);
+ // Normally, the call above clears mouse_lock_widget_ pointers on the
+ // entire WebContents chain, since it results in calling LostMouseLock()
+ // when the mouse lock is already active. However, this doesn't work for
+ // <webview> guests if the mouse lock request is still pending while the
+ // <webview> is destroyed. Hence, ensure that all mouse lock widget
+ // pointers are cleared. See https://crbug.com/1346245.
+ for (WebContentsImpl* current = this; current;
+ current = current->GetOuterWebContents()) {
+ current->mouse_lock_widget_ = nullptr;
+ }
+ }
+
for (RenderWidgetHostImpl* widget : created_widgets_)
widget->DetachDelegate();
created_widgets_.clear();
diff --git a/chromium/content/browser/web_contents/web_contents_impl.h b/chromium/content/browser/web_contents/web_contents_impl.h
index 7ad26489334..408e891a4b6 100644
--- a/chromium/content/browser/web_contents/web_contents_impl.h
+++ b/chromium/content/browser/web_contents/web_contents_impl.h
@@ -1313,6 +1313,10 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents,
bool CancelPrerendering(FrameTreeNode* frame_tree_node,
PrerenderHost::FinalStatus final_status);
+ RenderWidgetHost* mouse_lock_widget_for_testing() {
+ return mouse_lock_widget_;
+ }
+
private:
using FrameTreeIterationCallback = base::RepeatingCallback<void(FrameTree*)>;
using RenderViewHostIterationCallback =
diff --git a/chromium/content/browser/web_contents/web_contents_observer_browsertest.cc b/chromium/content/browser/web_contents/web_contents_observer_browsertest.cc
index 3922bb02ca1..e38227fafe8 100644
--- a/chromium/content/browser/web_contents/web_contents_observer_browsertest.cc
+++ b/chromium/content/browser/web_contents/web_contents_observer_browsertest.cc
@@ -375,8 +375,14 @@ using CookieAccess = CookieTracker::CookieAccessDescription;
} // namespace
+// TODO(https://crbug.com/1288573): Flaky on Mac.
+#if BUILDFLAG(IS_MAC)
+#define MAYBE_CookieCallbacks_MainFrame DISABLED_CookieCallbacks_MainFrame
+#else
+#define MAYBE_CookieCallbacks_MainFrame CookieCallbacks_MainFrame
+#endif
IN_PROC_BROWSER_TEST_F(WebContentsObserverBrowserTest,
- CookieCallbacks_MainFrame) {
+ MAYBE_CookieCallbacks_MainFrame) {
CookieTracker cookie_tracker(web_contents());
GURL first_party_url("http://a.com/");
@@ -420,8 +426,16 @@ IN_PROC_BROWSER_TEST_F(WebContentsObserverBrowserTest,
cookie_tracker.cookie_accesses().clear();
}
+// TODO(https://crbug.com/1288573): Flaky on Mac.
+#if BUILDFLAG(IS_MAC)
+#define MAYBE_CookieCallbacks_MainFrameRedirect \
+ DISABLED_CookieCallbacks_MainFrameRedirect
+#else
+#define MAYBE_CookieCallbacks_MainFrameRedirect \
+ CookieCallbacks_MainFrameRedirect
+#endif
IN_PROC_BROWSER_TEST_F(WebContentsObserverBrowserTest,
- CookieCallbacks_MainFrameRedirect) {
+ MAYBE_CookieCallbacks_MainFrameRedirect) {
CookieTracker cookie_tracker(web_contents());
GURL first_party_url("http://a.com/");
@@ -541,8 +555,14 @@ IN_PROC_BROWSER_TEST_F(WebContentsObserverBrowserTest,
cookie_tracker.cookie_accesses().clear();
}
+// TODO(https://crbug.com/1288573): Flaky on Mac.
+#if BUILDFLAG(IS_MAC)
+#define MAYBE_CookieCallbacks_Subresource DISABLED_CookieCallbacks_Subresource
+#else
+#define MAYBE_CookieCallbacks_Subresource CookieCallbacks_Subresource
+#endif
IN_PROC_BROWSER_TEST_F(WebContentsObserverBrowserTest,
- CookieCallbacks_Subresource) {
+ MAYBE_CookieCallbacks_Subresource) {
CookieTracker cookie_tracker(web_contents());
GURL first_party_url("http://a.com/");
diff --git a/chromium/docs/testing/web_test_expectations.md b/chromium/docs/testing/web_test_expectations.md
index 480cc44c160..ca145dd297c 100644
--- a/chromium/docs/testing/web_test_expectations.md
+++ b/chromium/docs/testing/web_test_expectations.md
@@ -230,7 +230,7 @@ files. You can follow the steps below for easier review.
3. Request review of the CL and tell the reviewer to compare the patch sets that
were uploaded in step 1 and step 2 to see the differences of the rebaselines.
-
+
## Kinds of expectations files
* [TestExpectations](../../third_party/blink/web_tests/TestExpectations): The
@@ -304,9 +304,9 @@ The syntax of a line is roughly:
* If no modifiers are specified, the test applies to all of the configurations
applicable to that file.
* If specified, modifiers must be one of `Fuchsia`, `Mac`, `Mac10.12`,
- `Mac10.13`, `Mac10.14`, `Mac10.15`, `Mac11`, `Mac11-arm64`, `Linux`, `Trusty`,
- `Win`, `Win7`, `Win10.20h2`, and, optionally, `Release`, or `Debug`. Check the
- top of
+ `Mac10.13`, `Mac10.14`, `Mac10.15`, `Mac11`, `Mac11-arm64`, `Mac12`,
+ `Mac12-arm64`, `Linux`, `Trusty`, `Win`, `Win7`, `Win10.20h2`, `Win11`,
+ and, optionally, `Release`, or `Debug`. Check the top of
[TestExpectations](../../third_party/blink/web_tests/TestExpectations) or the
`ALL_SYSTEMS` macro in
[third_party/blink/tools/blinkpy/web_tests/port/base.py](../../third_party/blink/tools/blinkpy/web_tests/port/base.py)
diff --git a/chromium/docs/website/.eleventy.js b/chromium/docs/website/.eleventy.js
deleted file mode 100644
index c5fcf379992..00000000000
--- a/chromium/docs/website/.eleventy.js
+++ /dev/null
@@ -1,183 +0,0 @@
-module.exports = config => {
- config.addWatchTarget('./site/_stylesheets/');
-
- // `markdown-it` is Eleventy's default Markdown rendering engine.
- // We need a reference to it to customize its behavior, below.
- const md = require('markdown-it');
-
- // `markdown-it-anchor` is an Eleventy plugin that will add <a> tags to header elements.
- // (this improves the accessibility of linking to headers.)
- const anchor = require('markdown-it-anchor');
-
- // `uslug` is a Node package that convert text strings into "slugs" in a
- // Unicode-friendly way. (Slugs are the kebab-cased equivalents of text that
- // we use for page names, id's, etc. "Hello world" turns into 'hello-world".
- const uslug = require('uslug');
-
- // `markdown-it-attrs` is a markdown-it plugin that lets us customize the
- // `id` and `class` attributes of an element in the generated output;
- // we use this mostly for customizing the links in header tags.
- //
- // `markdown-it-toc-done-right` is a markdown-it plugin that adds support
- // for the `[TOC]` mechanism for generating the table of contents in a page.
- let mdlib = md({
- html: true,
- }).use(require('markdown-it-attrs'), {
- leftDelimiter: '{:',
- rightDelimiter: '}',
- allowedAttributes: ['id', 'class'],
- }).use(anchor, {
- slugify: s => uslug(s),
- level: 2,
- permalink: anchor.permalink.headerLink(),
- }).use(require('markdown-it-toc-done-right'), {
- slugify: uslug,
- tocClassName: 'toc',
- tocFirstLevel: 2,
- tocPattern: /\[TOC\]/,
- });
-
- config.setLibrary('md', mdlib);
-
- // TODO(crbug.com/1271672): Figure out how to make this syntax and API
- // less clunky.
- const subpages = require('./scripts/subpages.js')
- function handleSubPages(collectionAll) {
- let pageUrl = this.page.url;
- return subpages.render(pageUrl, collectionAll);
- };
- config.addNunjucksShortcode("subpages", handleSubPages);
-
- // Copy binary assets over to the dist/ directory.
-
- // This list must be kept in sync with the lists in //.eleventy.js and
- // //scripts/upload_lobs.py.
- // TODO(dpranke): Figure out how to share these lists to eliminate the
- // duplication and need to keep them in sync.
- let lob_extensions = [
- '.ai',
- '.bin',
- '.bmp',
- '.brd',
- '.bz2',
- '.crx',
- '.config',
- '.dia',
- '.gif',
- '.graffle',
- '.ico',
- '.jpg',
- 'jpg', // Some files are missing the '.' :(.,
- '.jpeg',
- '.mp4',
- '.msi',
- '.pdf',
- 'pdf', // Some files are missing the '.' :(.
- '.png',
- 'png', // Some files are missing the '.' :(.
- '.PNG',
- '.swf',
- '.svg',
- '.tar.gz',
- '.tiff',
- '_trace',
- '.webp',
- '.xcf',
- '.xlsx',
- '.zip',
- ];
-
- // This should basically pick up everything that isn't a .md file
- // or a .sha1.
- // TODO(dpranke): Figure out how to actually enforce this and get
- // rid of the "basically". There has to be a better approach. :).
- let extensions = lob_extensions.concat([
- '.cpp',
- '.css',
- '.csv',
- '.dot',
- '.ebuild',
- '.el',
- '.html',
- '.js',
- '.json',
- 'patch',
- '.py',
- '.txt',
- '.xml'
- ]);
-
- for (let ext of extensions) {
- config.addPassthroughCopy('site/**/*' + ext);
- }
-
- // Set up the Content-Security-Policy (CSP) hash filter. Every <script>
- // tag must be run through this filter so that the hash of its contents
- // will be in the list of approved scripts in the CSP HTTP header.
- const crypto = require('crypto');
- const fs = require('fs');
-
- let script_hashes = new Set();
- function cspHash(raw) {
- const c = crypto.createHash('sha256');
- c.update(raw);
- let digest = c.digest('base64');
- script_hashes.add(`'sha256-${digest}'`);
- return raw;
- }
-
- config.addFilter('cspHash', cspHash);
-
- // Write out the firebase.json config file once we know which CSP
- // headers to set.
- config.on('afterBuild', () => {
- let script_src = " 'none'";
- if (script_hashes.size > 0) {
- script_src = '';
- for (const script_hash of script_hashes.values()) {
- script_src += ' ' + script_hash;
- }
- script_src += " 'unsafe-inline' 'strict-dynamic'";
- }
-
- fs.writeFileSync('firebase.json',
- JSON.stringify({
- 'hosting': {
- 'public': 'build',
- 'ignore': [
- 'firebase.json',
- '**/.*',
- '**/node_modules/**',
- ],
- 'headers': [{
- 'source': '**/*',
- 'headers': [{
- 'key': 'Content-Security-Policy',
- 'value':
- "script-src" + script_src +
- "; object-src 'none'; base-uri 'none'; " +
- "report-uri https://csp.withgoogle.com/csp/chromium-website/",
- }],
- }],
- },
- }, null, 2) + '\n');
- });
-
- // Copy over Algolia files.
- config.addPassthroughCopy({
- 'node_modules/@docsearch/js/dist/umd':
- '_scripts/@docsearch',
- 'node_modules/@docsearch/css/dist':
- '_stylesheets/@docsearch',
- })
-
- return {
- dir: {
- input: 'site',
- output: 'build'
- },
- markdownTemplateEngine: 'njk',
- templateFormats: ['md', 'njk'],
- htmlTemplateEngine: 'njk',
- };
-};
diff --git a/chromium/docs/website/.firebaserc b/chromium/docs/website/.firebaserc
deleted file mode 100644
index 34a7504eefd..00000000000
--- a/chromium/docs/website/.firebaserc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "projects": {
- "default": "chromium-website-staging-d9f4a",
- "prod": "chromium-website",
- "staging": "chromium-website-staging-d9f4a"
- }
-}
diff --git a/chromium/docs/website/.gclient b/chromium/docs/website/.gclient
deleted file mode 100644
index 152fbdaa64f..00000000000
--- a/chromium/docs/website/.gclient
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the 'License');
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an 'AS IS' BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# This file is all boilerplate needed to make gclient happy. There
-# should be no need to ever modify anything in this.
-
-solutions = [
- {
- 'name': '.',
- 'url': 'https://chromium.googlesource.com/experimental/chromium_website.git',
- 'managed': False,
- 'custom_deps': {},
- 'custom_vars': {},
- },
-]
diff --git a/chromium/docs/website/.vpython3 b/chromium/docs/website/.vpython3
deleted file mode 100644
index 477fa2d6a67..00000000000
--- a/chromium/docs/website/.vpython3
+++ /dev/null
@@ -1,50 +0,0 @@
-# This is a vpython "spec" file.
-#
-# It describes patterns for python wheel dependencies of the python scripts in
-# the chromium repo, particularly for dependencies that have compiled components
-# (since pure-python dependencies can be easily vendored into third_party).
-#
-# When vpython is invoked, it finds this file and builds a python VirtualEnv,
-# containing all of the dependencies described in this file, fetching them from
-# CIPD (the "Chrome Infrastructure Package Deployer" service). Unlike `pip`,
-# this never requires the end-user machine to have a working python extension
-# compilation environment. All of these packages are built using:
-# https://chromium.googlesource.com/infra/infra/+/main/infra/tools/dockerbuild/
-#
-# All python scripts in the repo share this same spec, to avoid dependency
-# fragmentation.
-#
-# If you have depot_tools installed in your $PATH, you can invoke python scripts
-# in this repo by running them as you normally would run them, except
-# substituting `vpython` instead of `python` on the command line, e.g.:
-# vpython path/to/script.py some --arguments
-#
-# Read more about `vpython` and how to modify this file here:
-# https://chromium.googlesource.com/infra/infra/+/main/doc/users/vpython.md
-
-python_version: "3.8"
-
-# The default set of platforms vpython checks does not yet include mac-arm64.
-# Setting `verify_pep425_tag` to the list of platforms we explicitly must support
-# allows us to ensure that vpython specs stay mac-arm64-friendly
-verify_pep425_tag: [
- {python: "cp38", abi: "cp38", platform: "manylinux1_x86_64"},
- {python: "cp38", abi: "cp38", platform: "linux_arm64"},
-
- {python: "cp38", abi: "cp38", platform: "macosx_10_10_intel"},
- {python: "cp38", abi: "cp38", platform: "macosx_11_0_arm64"},
-
- {python: "cp38", abi: "cp38", platform: "win32"},
- {python: "cp38", abi: "cp38", platform: "win_amd64"}
-]
-
-wheel <
- name: "infra/python/wheels/pyyaml/${vpython_platform}"
- version: "version:5.4.1"
->
-
-# Used by //scripts/fetch_lobs to fetch stuff over HTTPS using connection pools.
-wheel <
- name: "infra/python/wheels/urllib3-py2_py3"
- version: "version:1.26.6"
->
diff --git a/chromium/docs/website/AUTHORS b/chromium/docs/website/AUTHORS
deleted file mode 100644
index 3f0981bc353..00000000000
--- a/chromium/docs/website/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-# Individuals section
-Adrià Vilanova Martínez <me@avm99963.com>
-
-# Organizations section
-Google, Inc. <*@google.com>
-The Chromium Authors <*@chromium.org> \ No newline at end of file
diff --git a/chromium/docs/website/CONTENT_OWNERS b/chromium/docs/website/CONTENT_OWNERS
deleted file mode 100644
index bc305b67591..00000000000
--- a/chromium/docs/website/CONTENT_OWNERS
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# This should be a list of people who care about the content on the site
-# and can review changes to //site and //docs, but may not be the right
-# people to review changes to the infrastructure/code.
-
-brucedawson@chromium.org
-dcheng@chromium.org
-ellyjones@chromium.org
-jessemckenna@google.com
diff --git a/chromium/docs/website/DEPS b/chromium/docs/website/DEPS
deleted file mode 100644
index 303c16f418d..00000000000
--- a/chromium/docs/website/DEPS
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# This file is used to manage the dependencies of the chromium website tooling.
-# It is used by gclient to determine what version of each dependency to
-# check out, and where.
-#
-# For more information, please refer to the official documentation:
-# https://sites.google.com/a/chromium.org/dev/developers/how-tos/get-the-code
-#
-# When adding a new dependency, please update the top-level .gitignore file
-# to list the dependency's destination directory.
-
-allowed_hosts = [
- 'chromium.googlesource.com',
-]
-
-use_relative_paths = True
-
-deps = {
-}
-
-hooks = [
- {
- 'name': 'node_linux64',
- 'pattern': '.',
- 'condition': 'host_os == "linux"',
- 'action': [ 'download_from_google_storage',
- '--no_resume',
- '--extract',
- '--no_auth',
- '--bucket', 'chromium-nodejs/14.15.4',
- '-s', 'third_party/node/linux/node-linux-x64.tar.gz.sha1',
- ],
- },
- {
- 'name': 'node_mac',
- 'pattern': '.',
- 'condition': 'host_os == "mac" and host_cpu == "x64"',
- 'action': [ 'download_from_google_storage',
- '--no_resume',
- '--extract',
- '--no_auth',
- '--bucket', 'chromium-nodejs/14.15.4',
- '-s', 'third_party/node/mac/node-darwin-x64.tar.gz.sha1',
- ],
- },
- {
- # TODO: Node 16.0 will likely ship with an official universal node binary
- # on macOS. Once node 16.0 is released, collapse this into the node_mac hook
- # above again and use the universal binary on mac independent of host_cpu.
- 'name': 'node_mac_arm64',
- 'pattern': '.',
- 'condition': 'host_os == "mac" and host_cpu == "arm64"',
- 'action': [ 'download_from_google_storage',
- '--no_resume',
- '--extract',
- '--no_auth',
- '--bucket', 'chromium-nodejs/16.0.0-pre',
- '-s', 'third_party/node/mac/node-darwin-arm64.tar.gz.sha1',
- ],
- },
- {
- 'name': 'node_win',
- 'pattern': '.',
- 'condition': 'host_os == "win"',
- 'action': [ 'download_from_google_storage',
- '--no_resume',
- '--no_auth',
- '--bucket', 'chromium-nodejs/14.15.4',
- '-s', 'third_party/node/win/node.exe.sha1',
- ],
- },
- {
- 'name': 'fetch_node_modules',
- 'pattern': '.',
- 'action': [ 'python3',
- 'scripts/fetch_node_modules.py'
- ],
- },
- {
- 'name': 'fetch_lobs',
- 'pattern': '.',
- 'action': [
- 'vpython3',
- 'scripts/fetch_lobs.py',
- ],
- },
- {
- # TODO(crbug.com/1273181) - Delete this when we no longer support
- # comparing against the old site and we can be sure that no one
- # has anything in //build/originals.
- 'name': 'remove_originals',
- 'pattern': '.',
- 'action': [
- 'python3',
- '-c', 'import shutil; shutil.rmtree("build/originals", ignore_errors=True)',
- ],
- },
-]
diff --git a/chromium/docs/website/DIR_METADATA b/chromium/docs/website/DIR_METADATA
deleted file mode 100644
index f86c0c6a272..00000000000
--- a/chromium/docs/website/DIR_METADATA
+++ /dev/null
@@ -1,3 +0,0 @@
-monorail: {
- component: "Infra>Documentation"
-}
diff --git a/chromium/docs/website/OWNERS b/chromium/docs/website/OWNERS
deleted file mode 100644
index 5d5f6db0329..00000000000
--- a/chromium/docs/website/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-# These are the primary top-level OWNERS for the repo.
-ewag@google.com
-gatong@chromium.org
-sshrimp@google.com
diff --git a/chromium/docs/website/PRESUBMIT.cfg b/chromium/docs/website/PRESUBMIT.cfg
deleted file mode 100644
index 5b6b2bf07d4..00000000000
--- a/chromium/docs/website/PRESUBMIT.cfg
+++ /dev/null
@@ -1,8 +0,0 @@
-# Upload checks for `repo upload` for CrOS devs.
-
-[Hook Scripts]
-git_cl_presubmit = vpython $(which presubmit_support.py) $(if [[ "${PRESUBMIT_COMMIT}" = pre-submit ]]; then echo --commit; fi)
-
-[Hook Overrides]
-bug_field_check = false
-test_field_check = false
diff --git a/chromium/docs/website/PRESUBMIT.py b/chromium/docs/website/PRESUBMIT.py
deleted file mode 100644
index 4026723f594..00000000000
--- a/chromium/docs/website/PRESUBMIT.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright (c) 2021 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Top-level presubmit script for the Git repo backing chromium.org.
-
-See http://www.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details about the presubmit API built into depot_tools.
-"""
-
-import os
-
-
-PRESUBMIT_VERSION = '2.0.0'
-
-# This line is 'magic' in that git-cl looks for it to decide whether to
-# use Python3 instead of Python2 when running the code in this file.
-USE_PYTHON3 = True
-
-
-# This list must be kept in sync with the lists in //.eleventy.js and
-# //scripts/upload_lobs.py.
-# TODO(dpranke): Figure out how to share these lists to eliminate the
-# duplication and need to keep them in sync.
-
-LOB_EXTENSIONS = [
- '.ai',
- '.bin',
- '.bmp',
- '.brd',
- '.bz2',
- '.crx',
- '.config',
- '.dia',
- '.gif',
- '.graffle',
- '.ico',
- '.jpg',
- 'jpg', # Some files are missing the '.' :(.
- '.jpeg',
- '.mp4',
- '.msi',
- '.pdf',
- 'pdf', # Some files are missing the '.' :(.
- '.png',
- 'png', # Some files are missing the '.' :(.
- '.PNG',
- '.swf',
- '.svg',
- '.tar.gz',
- '.tiff',
- '_trace',
- '.webp',
- '.xcf',
- '.xlsx',
- '.zip'
- ]
-
-
-def CheckPatchFormatted(input_api, output_api):
- return input_api.canned_checks.CheckPatchFormatted(input_api, output_api)
-
-
-def CheckChangeHasDescription(input_api, output_api):
- return input_api.canned_checks.CheckChangeHasDescription(
- input_api, output_api)
-
-
-def CheckForLobs(input_api, output_api):
- output_status = []
- for file in input_api.change.AffectedFiles():
- # The tar.gz for example prevents using a hashmap to look up the extension
- for ext in LOB_EXTENSIONS:
- if str(file).endswith(ext) and file.Action() != 'D':
- error_msg = ('The file \'{file_name}\' is a binary that has not been '
- 'uploaded to GCE. Please run:\n\tscripts/upload_lobs.py '
- '"{file_name}"\nand commit {file_name}.sha1 instead\n'
- 'Run:\n\tgit rm --cached "{file_name}"\nto remove the lob from git'
- .format(file_name = file.LocalPath()))
-
- error = output_api.PresubmitError(error_msg)
- output_status.append(error)
- break
-
- return output_status
-
-
-def CheckLobIgnores(input_api, output_api):
- output_status = []
- with open("site/.gitignore", 'r') as ignore_file:
- ignored_lobs = list(line.rstrip() for line in ignore_file.readlines())
- ignored_lobs = set(ignored_lobs[
- ignored_lobs.index('#start_lob_ignore') + 1 :
- ignored_lobs.index('#end_lob_ignore')])
-
- for ignored_lob in ignored_lobs:
- lob_sha_file = os.path.join('site', ignored_lob + '.sha1')
- if not lob_sha_file.startswith('#') and not os.path.exists(lob_sha_file):
- error_msg = ('The sha1 file \'{removed_file}\' no longer exists, '
- 'please remove "{ignored_file}" from site/.gitignore'
- .format(removed_file = lob_sha_file, ignored_file = ignored_lob))
-
- error = output_api.PresubmitError(error_msg)
- output_status.append(error)
- return output_status
diff --git a/chromium/docs/website/README.md b/chromium/docs/website/README.md
deleted file mode 100644
index 6531e45792c..00000000000
--- a/chromium/docs/website/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Source code for www.chromium.org
-
-This Git repo contains the source content for
-[www.chromium.org](https://www.chromium.org).
-
-*NOTE: 2021-11-15.* This is not (yet) actually true. This is a work-in-progress
-repo that we plan to move to.
-
-The website is implemented by serving static content (mostly Markdown files)
-that is translated / built ahead of time into HTML using the
-[Eleventy](https://11ty.dev) static site generator (which is written in
-Node/JS) and deployed onto [Firebase Cloud Hosting](firebase.google.com/products/hosting).
-
-See [//docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) if you wish to contribute
-to the site.
diff --git a/chromium/docs/website/docs/AUTHORING.md b/chromium/docs/website/docs/AUTHORING.md
deleted file mode 100644
index b4bab2cc7b0..00000000000
--- a/chromium/docs/website/docs/AUTHORING.md
+++ /dev/null
@@ -1,158 +0,0 @@
-# Authoring guidelines
-
-*This page talks about how to write individual pages for the site. See
-[CONTRIBUTING.md](CONTRIBUTING.md) for how to actually make the changes.*
-
-www.chromium.org is a relatively simple website.
-
-Pages are written in Markdown and translated using a single extremely simple
-[Nunjucks](https://mozilla.github.io/nunjucks/)
-[template](site/_includes/page.html) into HTML during the build process.
-
-The site uses a single basic [Sass/SCSS](sass-lang.com)
-[stylesheet](site/_stylesheets/default.scss)
-(using the Node/NPM library version of Sass).
-
-Binary objects (PDFs, images, etc.) are stored in a
-[Google Cloud Storage](cloud.google.com/storage) bucket, indexed by
-SHA-1 checksums that are committed into this repo. Run
-[//scripts/upload_lobs.py](../scripts/upload_lobs.py) to upload things
-(you must be a contributor be able to run this script).
-
-## Front matter
-
-The Markdown pages must contain a "front matter" section that can set a few
-variables to control aspects of the page appearance. The front matter
-must be in the form of a YAML document, and the following variables are
-supported:
-
-* `breadcrumbs`: An optional list of (page_title, link) link pairs to
- parent pages for a given page. If set, they will show up as a
- "breadcrumbs" trail at the top of the page, above the title.
-* `page_name`: The name of the page (usually the name of the enclosing
- directory).
-* `title`: The title of this page. By default, the title will
- be included as an `H1` tag on the page, and is the value that should
- be used in other breadcrumbs lists.
-* `redirect`: To automatically redirect this page/URL to somewhere else,
- set this to a URL.
-* `use_title_as_h1`: If this is set to `true` (the default), the title
- will be included as an H1.
-
-## Naming
-
-Each page must live in its own directory in a file named `index.md`, in
-order to match the link structure used by the old Google Sites layout.
-Use `words-with-dashes` to form the name of your page.
-
-*Once enough time has passed after the launch, we'll probably relax this
-requirement.*
-
-## Style
-
-Please follow the
-[Google Markdown style guide](https://github.com/google/styleguide/blob/gh-pages/docguide/style.md).
-
-Pages can embed HTML, but please be careful when doing
-so, because we want the site to maintain a consistent look and feel
-(which the old site didn't do so much).
-
-You must not use any inline CSS or inline JavaScript. We can support
-custom styling and scripts, but doing so requires the approval of the
-[//OWNERS](../OWNERS) at this time.
-
-HTML tags may embed Markdown content, but doing so is somewhat finicky.
-You should have reliable success if you separate all HTML and Markdown
-blocks by blank lines, e.g.:
-
-```md
-# Some markdown
-
-<table>
-<tr>
-<td>
-
-Some *more* markdown
-
-</td>
-</tr>
-</table>
-
-Yet more markdown.
-```
-
-See [/chromium-os/chrome-os-systems-supporting-android-apps](https://new.chromium.org/chromium-os/chrome-os-systems-supporting-android-apps)
-for an example.
-
-## Markdown extensions
-
-### Two-column pages
-
-You can display text in two columns using divs with particular classes:
-
-```md
-<div class="two-column-container">
-<div class="column">
-
-# Some markdown
-
-</div>
-<div class="column">
-
-# Some more markdown
-</div>
-</div>
-```
-
-See [/chromium-projects](https://new.chromium.org/chromium-projects)
-for an example.
-
-### Tables of contents
-
-If you write `[TOC]` on a line by itself a table of contents will be
-generated from the headers in the file and inserted in its place.
-The table of contents will include H2-H6 headers, but not the
-H1 header (if present).
-
-### Subpages
-
-If you write `{% subpages collections.all %} you will get a hierarchical
-tree of links to all of the subpages of your page inserted into the doc.
-
-*Note: the syntax for this is clunky and we hope to replace this with a
-proper shortcode like `[TOC]`. Star [crbug.com/1271672](crbug.com/1271672)
-to get updates on this.
-
-### Custom IDs and classes
-
-You may customize the `ID` and `class` attributes of block-level elements
-as follows:
-
-```
-## Header 2 {:#my-header .my-class}
-```
-
-will generate:
-
-```
-<h2 class="my-class" id="my-header"><a href="#my-header">Header 2</a></h2>
-```
-
-This should mostly be used to override the automatically-generated id
-for headers, and only sparingly to trigger custom CSS rules on other
-elements.
-
-You must use `{:` and `}` as the delimiters around the custom attributes.
-
-## Known issues
-
-* [crbug.com/1269867](crbug.com/1269867): We should have an auto-formatter
- for the Markdown pages.
-* [crbug.com/1269868](crbug.com/1269868): We should consider using a linter.
-* [crbug.com/1260460](crbug.com/1260460): We should be automatically
- generating the `page_name` and `breadcrumbs` fields, rather than relying
- on authors to set them.
-* [crbug.com/1269860](crbug.com/1269860): We need to document the flavor
- of Markdown that is supported along with any extensions that are enabled.
-* [crbug.com/1267094](crbug.com/1267094): We want a better, more WYSIWYG
- authoring environment.
diff --git a/chromium/docs/website/docs/CONTRIBUTING.md b/chromium/docs/website/docs/CONTRIBUTING.md
deleted file mode 100644
index ba480487dc6..00000000000
--- a/chromium/docs/website/docs/CONTRIBUTING.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# Contributing to www.chromium.org
-
-In order to contribute to this repo you must have signed the
-[Google Contributor License Agreement](https://cla.developers.google.com/clas)
-and have an active account on
-[Chromium's Gerrit Host](https://chromium-review.googlesource.com).
-
-## Making edits to pages via the web
-
-The site contains a fairly rudimentary in-page editor. To edit a page,
-click on the "Edit this Page" button in the left nav bar. That will take
-you to [edit.chromium.org](https://edit.chromium.org/edit?repo=chromium/website/main)
-and open the page in the editor automatically.
-
-You can edit the Markdown text directly, and, once you're ready to upload
-the change, if you you click on the "Create Change" box in the bottom right
-corner of the page, that will create a Gerrit CL for review. A builder
-will automatically run to build out a copy of the site containing your
-changes so that you can preview them.
-
-Any current Chromium/ChromiumOS contributor (basically anyone with with
-try-job access or bug-editing privileges) can review CLs, but you also
-need OWNERS approval to land them.
-
-This functionality is limited to just editing the text of existing pages,
-and there's not yet any way to preview the change before you upload it
-for review.
-
-If you need to upload new images or other assets, or add new pages, or
-change multiple pages at once, or do anything else more complicated,
-keep reading ...
-
-## Making bigger changes using a local Git checkout
-
-*NOTE: If you have an existing Chromium or ChromiumOS checkout, you will
-hopefully soon have this repo DEPS'ed in in automatically.*
-
-1. Install depot_tools:
-
- ```bash
- $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- $ export PATH=/path/to/depot_tools:$PATH
- ```
-
-2. Check out the repo and its dependencies:
-
- ```bash
- $ git clone https://chromium.googlesource.com/website
- $ cd website
- $ gclient sync
- ```
-
- or
-
- ```bash
- $ fetch website
- ```
-
-3. Make your changes! Check out [AUTHORING.md](AUTHORING.md) for guidelines.
-
-4. Build all of the static pages up-front to check for errors.
- The content will be built into `//build` by default.
-
- ```bash
- $ ./npmw build
- ```
-
- It should only take a few seconds to build out the website.
-
- (`npmw` is a simple wrapper around the version of `npm` that is bundled
- as part of this checkout.)
-
-5. Start a local web server to view the site. The server will (re-)generate
- the pages on the fly as needed if the input or conversion code changes.
- The content will be built into `//build`.
-
- ```bash
- $ ./npmw start
- ```
-
-6. Check in your changes and upload a CL to the Gerrit code review server.
-
- ```bash
- $ git commit -a -m 'whatever'
- $ git-cl upload
- ```
-
- If you are adding binary assets (images, etc.) to the site, you will
- need to upload them to the GCS bucket using `//scripts/upload-lobs.py`.
-
-7. Get one of the [//OWNERS](../OWNERS) to review your changes, and then
- submit the change via the commit queue.
-
- *NOTE:* If this is your first time contributing something to Chromium
- or ChromiumOS, please make sure you (or your company) has signed
- [Google's Contributor License Agreement](https://cla.developers.google.com/),
- as noted above, and also add yourself to the [//AUTHORS](../AUTHORS) file
- as part of your change.
diff --git a/chromium/docs/website/docs/OWNERS b/chromium/docs/website/docs/OWNERS
deleted file mode 100644
index f469885b9a9..00000000000
--- a/chromium/docs/website/docs/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://CONTENT_OWNERS
diff --git a/chromium/docs/website/infra/config/PRESUBMIT.py b/chromium/docs/website/infra/config/PRESUBMIT.py
deleted file mode 100644
index 120bff7f822..00000000000
--- a/chromium/docs/website/infra/config/PRESUBMIT.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2021 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Enforces generated //infra/config files are up to date.
-
-See http://www.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into depot_tools.
-"""
-
-PRESUBMIT_VERSION = '2.0.0'
-USE_PYTHON3 = True
-
-
-def CheckLucicfgGenOutputMain(input_api, output_api):
- return input_api.RunTests(input_api.canned_checks.CheckLucicfgGenOutput(
- input_api, output_api, 'main.star'))
-
-
-def CheckChangedLUCIConfigs(input_api, output_api):
- return input_api.canned_checks.CheckChangedLUCIConfigs(
- input_api, output_api)
diff --git a/chromium/docs/website/infra/config/generated/commit-queue.cfg b/chromium/docs/website/infra/config/generated/commit-queue.cfg
deleted file mode 100644
index a3971f4f8ed..00000000000
--- a/chromium/docs/website/infra/config/generated/commit-queue.cfg
+++ /dev/null
@@ -1,43 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-#
-# For the schema of this file, see Config message:
-# https://luci-config.appspot.com/schemas/projects:commit-queue.cfg
-
-submit_options {
- max_burst: 4
- burst_delay {
- seconds: 480
- }
-}
-config_groups {
- name: "chromium-website"
- gerrit {
- url: "https://chromium-review.googlesource.com"
- projects {
- name: "website"
- ref_regexp: "refs/heads/main"
- }
- }
- verifiers {
- gerrit_cq_ability {
- committer_list: "project-chromium-website-committers"
- dry_run_access_list: "project-chromium-website-tryjob-access"
- }
- tryjob {
- builders {
- name: "chromium-website/try/chromium-website-try-builder"
- mode_allowlist: "ANALYZER_RUN"
- mode_allowlist: "DRY_RUN"
- mode_allowlist: "FULL_RUN"
- }
- retry_config {
- single_quota: 1
- global_quota: 2
- failure_weight: 1
- transient_failure_weight: 1
- timeout_weight: 2
- }
- }
- }
-}
diff --git a/chromium/docs/website/infra/config/generated/cr-buildbucket.cfg b/chromium/docs/website/infra/config/generated/cr-buildbucket.cfg
deleted file mode 100644
index 80b0626d79c..00000000000
--- a/chromium/docs/website/infra/config/generated/cr-buildbucket.cfg
+++ /dev/null
@@ -1,80 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-#
-# For the schema of this file, see BuildbucketCfg message:
-# https://luci-config.appspot.com/schemas/projects:buildbucket.cfg
-
-buckets {
- name: "ci"
- acls {
- group: "all"
- }
- swarming {
- builders {
- name: "chromium-website-ci-builder"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.flex.ci"
- exe {
- cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
- cipd_version: "refs/heads/main"
- cmd: "luciexe"
- }
- properties:
- '{'
- ' "recipe": "chromium_website"'
- '}'
- execution_timeout_secs: 3600
- build_numbers: YES
- service_account: "chromium-website-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- }
- }
-}
-buckets {
- name: "try"
- acls {
- group: "all"
- }
- acls {
- role: SCHEDULER
- identity: "user:tricium-prod@appspot.gserviceaccount.com"
- }
- acls {
- role: SCHEDULER
- group: "project-chromium-website-tryjob-access"
- }
- acls {
- role: SCHEDULER
- group: "service-account-cq"
- }
- swarming {
- builders {
- name: "chromium-website-try-builder"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.flex.try"
- exe {
- cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
- cipd_version: "refs/heads/main"
- cmd: "luciexe"
- }
- properties:
- '{'
- ' "recipe": "chromium_website"'
- '}'
- execution_timeout_secs: 3600
- build_numbers: YES
- service_account: "chromium-website-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- }
- }
-}
diff --git a/chromium/docs/website/infra/config/generated/luci-logdog.cfg b/chromium/docs/website/infra/config/generated/luci-logdog.cfg
deleted file mode 100644
index 62641534e55..00000000000
--- a/chromium/docs/website/infra/config/generated/luci-logdog.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-#
-# For the schema of this file, see ProjectConfig message:
-# https://luci-config.appspot.com/schemas/projects:luci-logdog.cfg
-
-reader_auth_groups: "all"
-writer_auth_groups: "luci-logdog-chromium-website-writers"
-archive_gs_bucket: "chromium-luci-logdog"
diff --git a/chromium/docs/website/infra/config/generated/luci-milo.cfg b/chromium/docs/website/infra/config/generated/luci-milo.cfg
deleted file mode 100644
index a0d37f64e0a..00000000000
--- a/chromium/docs/website/infra/config/generated/luci-milo.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-#
-# For the schema of this file, see Project message:
-# https://luci-config.appspot.com/schemas/projects:luci-milo.cfg
-
-consoles {
- id: "chromium-website"
- name: "chromium-website"
- repo_url: "https://chromium.googlesource.com/website"
- refs: "regexp:refs/heads/main"
- manifest_name: "REVISION"
- builders {
- name: "buildbucket/luci.chromium-website.ci/chromium-website-ci-builder"
- short_name: "ci"
- }
- favicon_url: "https://storage.googleapis.com/chrome-infra-public/logo/favicon.ico"
-}
-logo_url: "https://storage.googleapis.com/chrome-infra-public/logo/chromium.svg"
diff --git a/chromium/docs/website/infra/config/generated/luci-scheduler.cfg b/chromium/docs/website/infra/config/generated/luci-scheduler.cfg
deleted file mode 100644
index 636fb906d5a..00000000000
--- a/chromium/docs/website/infra/config/generated/luci-scheduler.cfg
+++ /dev/null
@@ -1,36 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-#
-# For the schema of this file, see ProjectConfig message:
-# https://luci-config.appspot.com/schemas/projects:luci-scheduler.cfg
-
-job {
- id: "chromium-website-ci-builder"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "chromium-website-ci-builder"
- }
-}
-trigger {
- id: "chromium-website-trigger"
- realm: "ci"
- acl_sets: "ci"
- triggers: "chromium-website-ci-builder"
- gitiles {
- repo: "https://chromium.googlesource.com/website"
- refs: "regexp:refs/heads/main"
- }
-}
-acl_sets {
- name: "ci"
- acls {
- role: OWNER
- granted_to: "group:project-chromium-website-committers"
- }
- acls {
- granted_to: "group:all"
- }
-}
diff --git a/chromium/docs/website/infra/config/generated/project.cfg b/chromium/docs/website/infra/config/generated/project.cfg
deleted file mode 100644
index be4890ccf6d..00000000000
--- a/chromium/docs/website/infra/config/generated/project.cfg
+++ /dev/null
@@ -1,15 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-#
-# For the schema of this file, see ProjectCfg message:
-# https://luci-config.appspot.com/schemas/projects:project.cfg
-
-name: "chromium-website"
-access: "group:all"
-lucicfg {
- version: "1.30.9"
- package_dir: ".."
- config_dir: "generated"
- entry_point: "main.star"
- experiments: "crbug.com/1182002"
-}
diff --git a/chromium/docs/website/infra/config/generated/realms.cfg b/chromium/docs/website/infra/config/generated/realms.cfg
deleted file mode 100644
index 5720c08cbe5..00000000000
--- a/chromium/docs/website/infra/config/generated/realms.cfg
+++ /dev/null
@@ -1,61 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-#
-# For the schema of this file, see RealmsCfg message:
-# https://luci-config.appspot.com/schemas/projects:realms.cfg
-
-realms {
- name: "@root"
- bindings {
- role: "role/buildbucket.reader"
- principals: "group:all"
- }
- bindings {
- role: "role/configs.reader"
- principals: "group:all"
- }
- bindings {
- role: "role/logdog.reader"
- principals: "group:all"
- }
- bindings {
- role: "role/logdog.writer"
- principals: "group:luci-logdog-chromium-website-writers"
- }
- bindings {
- role: "role/scheduler.owner"
- principals: "group:project-chromium-website-committers"
- }
- bindings {
- role: "role/scheduler.reader"
- principals: "group:all"
- }
-}
-realms {
- name: "ci"
- bindings {
- role: "role/buildbucket.builderServiceAccount"
- principals: "user:chromium-website-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- bindings {
- role: "role/swarming.taskTriggerer"
- principals: "group:flex-ci-led-users"
- }
-}
-realms {
- name: "try"
- bindings {
- role: "role/buildbucket.builderServiceAccount"
- principals: "user:chromium-website-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- bindings {
- role: "role/buildbucket.triggerer"
- principals: "group:project-chromium-website-tryjob-access"
- principals: "group:service-account-cq"
- principals: "user:tricium-prod@appspot.gserviceaccount.com"
- }
- bindings {
- role: "role/swarming.taskTriggerer"
- principals: "group:flex-try-led-users"
- }
-}
diff --git a/chromium/docs/website/infra/config/generated/tricium-prod.cfg b/chromium/docs/website/infra/config/generated/tricium-prod.cfg
deleted file mode 100644
index dcc9ad1fe6c..00000000000
--- a/chromium/docs/website/infra/config/generated/tricium-prod.cfg
+++ /dev/null
@@ -1,30 +0,0 @@
-# Auto-generated by lucicfg.
-# Do not modify manually.
-
-functions {
- type: ANALYZER
- name: "ChromiumWebsiteTryChromiumWebsiteTryBuilder"
- needs: GIT_FILE_DETAILS
- provides: RESULTS
- impls {
- provides_for_platform: LINUX
- runtime_platform: LINUX
- recipe {
- project: "chromium-website"
- bucket: "try"
- builder: "chromium-website-try-builder"
- }
- }
-}
-selections {
- function: "ChromiumWebsiteTryChromiumWebsiteTryBuilder"
- platform: LINUX
-}
-repos {
- gerrit_project {
- host: "chromium-review.googlesource.com"
- project: "website"
- git_url: "https://chromium.googlesource.com/website"
- }
-}
-service_account: "tricium-prod@appspot.gserviceaccount.com"
diff --git a/chromium/docs/website/infra/config/main.star b/chromium/docs/website/infra/config/main.star
deleted file mode 100755
index 1c099842b56..00000000000
--- a/chromium/docs/website/infra/config/main.star
+++ /dev/null
@@ -1,214 +0,0 @@
-#!/usr/bin/env lucicfg
-#
-# This is the LUCI configuration for the 'chromium-website' project,
-# the set of machines that build and test changes for the static website
-# deployed to serve www.chromium.org.
-#
-# The chromium website needs basically the simplest possible LUCI project:
-# one presubmit (aka "try") builder and one postsubmit (aka "CI" or
-# continuous integration) builder, with the following conventions:
-#
-# - The project is called PROJECT_NAME.
-# - The repo containing the LUCI configuration is found in PROJECT_REPO.
-# - The recipes are found in the same repo as the rest of the LUCI config
-# (which is likely also the main repo for the project source code).
-# - The builders will run in LUCI's public flex pools.
-# - The builders will be configured into two different buckets, called "try"
-# - and "ci"
-# - The builders will be named $PROJECT_NAME-$BUCKET-builder
-# - The builders will use the same recipe, found in
-# //infra/config/recipes/$PROJECT_NAME.py
-
-# This should match the LUCI project name.
-#
-# In order to aid with grepping for occurrences of the project name
-# in various other names, we repeat the string, below in some places,
-# rather than using string interpolation. This means that if you change
-# the project name, you should also do a search-and-replace for other
-# occurrences of the string in this file.
-PROJECT_NAME = "chromium-website"
-
-PROJECT_REPO = "https://chromium.googlesource.com/website"
-
-# TODO(dpranke): Update this when/if you get a custom logo.
-PROJECT_LOGO = "https://storage.googleapis.com/chrome-infra-public/logo/chromium.svg"
-
-RECIPE_CIPD_PACKAGE = "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
-RECIPE_NAME = 'chromium_website'
-
-#
-# Everything below this comment should be almost completely generic; however,
-# in some places we explicitly expand $PROJECT_NAME rather than using
-# string interpolation to aid in grepping for strings / code search.
-# See the note above for more.
-#
-
-lucicfg.check_version("1.30.9", "Please update depot_tools")
-
-_LINUX_OS = "Ubuntu-18.04"
-
-# Use LUCI Scheduler BBv2 names and add Scheduler realms configs.
-lucicfg.enable_experiment("crbug.com/1182002")
-
-lucicfg.config(
- config_dir = "generated",
- tracked_files = [
- "commit-queue.cfg",
- "cr-buildbucket.cfg",
- "project.cfg",
- "luci-logdog.cfg",
- "luci-milo.cfg",
- "luci-scheduler.cfg",
- "realms.cfg",
- "tricium-prod.cfg",
- ],
- fail_on_warnings = True,
-)
-
-luci.project(
- name = PROJECT_NAME,
- buildbucket = "cr-buildbucket.appspot.com",
- logdog = "luci-logdog",
- milo = "luci-milo",
- scheduler = "luci-scheduler",
- swarming = "chromium-swarm.appspot.com",
- tricium = "tricium-prod.appspot.com",
- acls = [
- acl.entry(
- [
- acl.BUILDBUCKET_READER,
- acl.LOGDOG_READER,
- acl.PROJECT_CONFIGS_READER,
- acl.SCHEDULER_READER,
- ],
- groups = ["all"],
- ),
- acl.entry([acl.SCHEDULER_OWNER], groups = ["project-chromium-website-committers"]),
- acl.entry([acl.LOGDOG_WRITER], groups = ["luci-logdog-chromium-website-writers"]),
- ],
-)
-
-
-luci.logdog(
- gs_bucket = "chromium-luci-logdog",
-)
-
-luci.milo(
- logo = PROJECT_LOGO,
-)
-
-luci.console_view(
- name = PROJECT_NAME,
- title = PROJECT_NAME,
- repo = PROJECT_REPO,
- refs = ["refs/heads/main"],
- favicon = "https://storage.googleapis.com/chrome-infra-public/logo/favicon.ico",
-)
-
-luci.gitiles_poller(
- name = "chromium-website-trigger",
- bucket = "ci",
- repo = PROJECT_REPO,
- refs = ["refs/heads/main"],
-)
-
-luci.bucket(name = "ci", acls = [
- acl.entry(
- [acl.BUILDBUCKET_TRIGGERER],
- ),
-])
-
-luci.binding(
- realm = "ci",
- roles = "role/swarming.taskTriggerer",
- groups = "flex-ci-led-users",
-)
-
-luci.recipe(
- name = RECIPE_NAME,
- cipd_package = RECIPE_CIPD_PACKAGE,
- cipd_version = "refs/heads/main",
- use_bbagent = True,
- use_python3 = True,
-)
-
-luci.builder(
- name = "chromium-website-ci-builder",
- bucket = "ci",
- executable = RECIPE_NAME,
- service_account = "chromium-website-ci-builder@chops-service-accounts.iam.gserviceaccount.com",
- execution_timeout = 1 * time.hour,
- dimensions = {"cpu": "x86-64", "os": _LINUX_OS, "pool": "luci.flex.ci"},
- triggered_by = ["chromium-website-trigger"],
- build_numbers = True,
-)
-
-luci.console_view_entry(
- console_view = PROJECT_NAME,
- builder = "chromium-website-ci-builder",
- short_name = "ci",
-)
-
-luci.cq(
- submit_max_burst = 4,
- submit_burst_delay = 8 * time.minute,
-)
-
-luci.cq_group(
- name = PROJECT_NAME,
- watch = cq.refset(
- repo = PROJECT_REPO,
- refs = ["refs/heads/main"],
- ),
- acls = [
- acl.entry(
- [acl.CQ_COMMITTER],
- groups = ["project-chromium-website-committers"],
- ),
- acl.entry(
- [acl.CQ_DRY_RUNNER],
- groups = ["project-chromium-website-tryjob-access"],
- ),
- ],
- retry_config = cq.retry_config(
- single_quota = 1,
- global_quota = 2,
- failure_weight = 1,
- transient_failure_weight = 1,
- timeout_weight = 2,
- ),
- verifiers = [
- luci.cq_tryjob_verifier(
- builder = "chromium-website-try-builder",
- mode_allowlist = [
- cq.MODE_ANALYZER_RUN,
- cq.MODE_DRY_RUN,
- cq.MODE_FULL_RUN,
- ],
- ),
- ],
-)
-
-luci.bucket(name = "try", acls = [
- acl.entry(
- [acl.BUILDBUCKET_TRIGGERER],
- groups = ["project-chromium-website-tryjob-access", "service-account-cq"],
- users = ["tricium-prod@appspot.gserviceaccount.com"],
- ),
-])
-
-luci.binding(
- realm = "try",
- roles = "role/swarming.taskTriggerer",
- groups = "flex-try-led-users",
-)
-
-luci.builder(
- name = "chromium-website-try-builder",
- bucket = "try",
- executable = RECIPE_NAME,
- service_account = "chromium-website-try-builder@chops-service-accounts.iam.gserviceaccount.com",
- execution_timeout = 1 * time.hour,
- dimensions = {"cpu": "x86-64", "os": _LINUX_OS, "pool": "luci.flex.try"},
- build_numbers = True,
-)
diff --git a/chromium/docs/website/node_modules.tar.gz.sha1 b/chromium/docs/website/node_modules.tar.gz.sha1
deleted file mode 100644
index a4b294227fe..00000000000
--- a/chromium/docs/website/node_modules.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-784b7182b338f3baba76bfd70c68fabc955bfba9 \ No newline at end of file
diff --git a/chromium/docs/website/npmw b/chromium/docs/website/npmw
deleted file mode 100755
index 507e8a5baf4..00000000000
--- a/chromium/docs/website/npmw
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# This file is a simple wrapper around whatever machine-specific version
-# of `npm` we downloaded (as part of Node).
-
-SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
-
-if [ $(uname -s) = "Darwin" -a $(uname -m) = "x86_64" ]
-then
- node_dir="${SCRIPT_DIR}/third_party/node/mac/node-darwin-x64"
-elif [ $(uname -s) = "Linux" -a $(uname -m) = "x86_64" ]
-then
- node_dir="${SCRIPT_DIR}/third_party/node/linux/node-linux-x64"
-else
- echo "unsupported system"
- exit 1
-fi
-
-# $npm third_party/node/mac/node-darwin-x64/lib/npm/lib/npm.js run "$@"
-script=$1
-shift
-if [ "$1" = "install" ]
-then
- $node_dir/bin/node $node_dir/lib/node_modules/npm \
- --scripts-prepend-node-path=true \
- $script "$@"
-else
- $node_dir/bin/node $node_dir/lib/node_modules/npm \
- --scripts-prepend-node-path=true \
- run-script $script $@
-fi
-
diff --git a/chromium/docs/website/originals.tar.gz.sha1 b/chromium/docs/website/originals.tar.gz.sha1
deleted file mode 100644
index ffa2c90043e..00000000000
--- a/chromium/docs/website/originals.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d15750af029afe549f73ddffa3ac9b677244cf00 \ No newline at end of file
diff --git a/chromium/docs/website/package-lock.json b/chromium/docs/website/package-lock.json
deleted file mode 100644
index 3f46f52abf4..00000000000
--- a/chromium/docs/website/package-lock.json
+++ /dev/null
@@ -1,19081 +0,0 @@
-{
- "name": "website",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "dependencies": {
- "@11ty/eleventy": "^0.12.1",
- "@docsearch/js": "^3.0.0-alpha.41",
- "firebase-tools": "^9.18.0",
- "markdown-it-anchor": "^8.4.1",
- "markdown-it-attrs": "^4.1.0",
- "markdown-it-toc-done-right": "^4.2.0-4",
- "npm-run-all": "^4.1.5",
- "prettier": "^2.4.1",
- "sass": "^1.35.1",
- "uslug": "^1.0.4"
- }
- },
- "node_modules/@11ty/dependency-tree": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-1.0.0.tgz",
- "integrity": "sha512-2FWYlkphQ/83MG7b9qqBJfJJ0K9zupNz/6n4EdDuNLw6hQHGp4Sp4UMDRyBvA/xCTYDBaPSuSjHuu45tSujegg=="
- },
- "node_modules/@11ty/eleventy": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.12.1.tgz",
- "integrity": "sha512-YGG1Vk0IPXsExSAwIyv6zccxxlaxXLb4PvO/G+SW66Dsz2l1ZSObJuukVTLc6iMpqZCS+LZQNXnaqG9PuRmy7w==",
- "dependencies": {
- "@11ty/dependency-tree": "^1.0.0",
- "browser-sync": "^2.26.14",
- "chalk": "^4.1.0",
- "chokidar": "^3.5.1",
- "debug": "^4.3.1",
- "dependency-graph": "^0.11.0",
- "ejs": "^2.7.4",
- "fast-glob": "^3.2.5",
- "fs-extra": "^8.1.0",
- "gray-matter": "^4.0.2",
- "hamljs": "^0.6.2",
- "handlebars": "^4.7.7",
- "javascript-stringify": "^2.0.1",
- "liquidjs": "^6.4.3",
- "lodash": "^4.17.21",
- "luxon": "^1.26.0",
- "markdown-it": "^10.0.0",
- "minimist": "^1.2.5",
- "moo": "^0.5.1",
- "multimatch": "^4.0.0",
- "mustache": "^2.3.2",
- "normalize-path": "^3.0.0",
- "nunjucks": "^3.2.3",
- "parse-filepath": "^1.0.2",
- "please-upgrade-node": "^3.2.0",
- "pretty": "^2.0.0",
- "pug": "^3.0.2",
- "recursive-copy": "^2.0.11",
- "semver": "^7.3.4",
- "slugify": "^1.4.7",
- "time-require": "^0.1.2",
- "valid-url": "^1.0.9"
- },
- "bin": {
- "eleventy": "cmd.js"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/11ty"
- }
- },
- "node_modules/@algolia/autocomplete-core": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.2.tgz",
- "integrity": "sha512-JOQaURze45qVa8OOFDh+ozj2a/ObSRsVyz6Zd0aiBeej+RSTqrr1hDVpGNbbXYLW26G5ujuc9QIdH+rBHn95nw==",
- "dependencies": {
- "@algolia/autocomplete-shared": "1.2.2"
- }
- },
- "node_modules/@algolia/autocomplete-preset-algolia": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.2.tgz",
- "integrity": "sha512-AZkh+bAMaJDzMZTelFOXJTJqkp5VPGH8W3n0B+Ggce7DdozlMRsDLguKTCQAkZ0dJ1EbBPyFL5ztL/JImB137Q==",
- "dependencies": {
- "@algolia/autocomplete-shared": "1.2.2"
- },
- "peerDependencies": {
- "@algolia/client-search": "^4.9.1",
- "algoliasearch": "^4.9.1"
- }
- },
- "node_modules/@algolia/autocomplete-shared": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.2.tgz",
- "integrity": "sha512-mLTl7d2C1xVVazHt/bqh9EE/u2lbp5YOxLDdcjILXmUqOs5HH1D4SuySblXaQG1uf28FhTqMGp35qE5wJQnqAw=="
- },
- "node_modules/@algolia/cache-browser-local-storage": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.11.0.tgz",
- "integrity": "sha512-4sr9vHIG1fVA9dONagdzhsI/6M5mjs/qOe2xUP0yBmwsTsuwiZq3+Xu6D3dsxsuFetcJgC6ydQoCW8b7fDJHYQ==",
- "dependencies": {
- "@algolia/cache-common": "4.11.0"
- }
- },
- "node_modules/@algolia/cache-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.11.0.tgz",
- "integrity": "sha512-lODcJRuPXqf+6mp0h6bOxPMlbNoyn3VfjBVcQh70EDP0/xExZbkpecgHyyZK4kWg+evu+mmgvTK3GVHnet/xKw=="
- },
- "node_modules/@algolia/cache-in-memory": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.11.0.tgz",
- "integrity": "sha512-aBz+stMSTBOBaBEQ43zJXz2DnwS7fL6dR0e2myehAgtfAWlWwLDHruc/98VOy1ZAcBk1blE2LCU02bT5HekGxQ==",
- "dependencies": {
- "@algolia/cache-common": "4.11.0"
- }
- },
- "node_modules/@algolia/client-account": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.11.0.tgz",
- "integrity": "sha512-jwmFBoUSzoMwMqgD3PmzFJV/d19p1RJXB6C1ADz4ju4mU7rkaQLtqyZroQpheLoU5s5Tilmn/T8/0U2XLoJCRQ==",
- "dependencies": {
- "@algolia/client-common": "4.11.0",
- "@algolia/client-search": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "node_modules/@algolia/client-analytics": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.11.0.tgz",
- "integrity": "sha512-v5U9585aeEdYml7JqggHAj3E5CQ+jPwGVztPVhakBk8H/cmLyPS2g8wvmIbaEZCHmWn4TqFj3EBHVYxAl36fSA==",
- "dependencies": {
- "@algolia/client-common": "4.11.0",
- "@algolia/client-search": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "node_modules/@algolia/client-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.11.0.tgz",
- "integrity": "sha512-Qy+F+TZq12kc7tgfC+FM3RvYH/Ati7sUiUv/LkvlxFwNwNPwWGoZO81AzVSareXT/ksDDrabD4mHbdTbBPTRmQ==",
- "dependencies": {
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "node_modules/@algolia/client-personalization": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.11.0.tgz",
- "integrity": "sha512-mI+X5IKiijHAzf9fy8VSl/GTT67dzFDnJ0QAM8D9cMPevnfX4U72HRln3Mjd0xEaYUOGve8TK/fMg7d3Z5yG6g==",
- "dependencies": {
- "@algolia/client-common": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "node_modules/@algolia/client-search": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.11.0.tgz",
- "integrity": "sha512-iovPLc5YgiXBdw2qMhU65sINgo9umWbHFzInxoNErWnYoTQWfXsW6P54/NlKx5uscoLVjSf+5RUWwFu5BX+lpw==",
- "dependencies": {
- "@algolia/client-common": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "node_modules/@algolia/logger-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.11.0.tgz",
- "integrity": "sha512-pRMJFeOY8hoWKIxWuGHIrqnEKN/kqKh7UilDffG/+PeEGxBuku+Wq5CfdTFG0C9ewUvn8mAJn5BhYA5k8y0Jqg=="
- },
- "node_modules/@algolia/logger-console": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.11.0.tgz",
- "integrity": "sha512-wXztMk0a3VbNmYP8Kpc+F7ekuvaqZmozM2eTLok0XIshpAeZ/NJDHDffXK2Pw+NF0wmHqurptLYwKoikjBYvhQ==",
- "dependencies": {
- "@algolia/logger-common": "4.11.0"
- }
- },
- "node_modules/@algolia/requester-browser-xhr": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.11.0.tgz",
- "integrity": "sha512-Fp3SfDihAAFR8bllg8P5ouWi3+qpEVN5e7hrtVIYldKBOuI/qFv80Zv/3/AMKNJQRYglS4zWyPuqrXm58nz6KA==",
- "dependencies": {
- "@algolia/requester-common": "4.11.0"
- }
- },
- "node_modules/@algolia/requester-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.11.0.tgz",
- "integrity": "sha512-+cZGe/9fuYgGuxjaBC+xTGBkK7OIYdfapxhfvEf03dviLMPmhmVYFJtJlzAjQ2YmGDJpHrGgAYj3i/fbs8yhiA=="
- },
- "node_modules/@algolia/requester-node-http": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.11.0.tgz",
- "integrity": "sha512-qJIk9SHRFkKDi6dMT9hba8X1J1z92T5AZIgl+tsApjTGIRQXJLTIm+0q4yOefokfu4CoxYwRZ9QAq+ouGwfeOg==",
- "dependencies": {
- "@algolia/requester-common": "4.11.0"
- }
- },
- "node_modules/@algolia/transporter": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.11.0.tgz",
- "integrity": "sha512-k4dyxiaEfYpw4UqybK9q7lrFzehygo6KV3OCYJMMdX0IMWV0m4DXdU27c1zYRYtthaFYaBzGF4Kjcl8p8vxCKw==",
- "dependencies": {
- "@algolia/cache-common": "4.11.0",
- "@algolia/logger-common": "4.11.0",
- "@algolia/requester-common": "4.11.0"
- }
- },
- "node_modules/@apidevtools/json-schema-ref-parser": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz",
- "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==",
- "dependencies": {
- "@jsdevtools/ono": "^7.1.3",
- "@types/json-schema": "^7.0.6",
- "call-me-maybe": "^1.0.1",
- "js-yaml": "^4.1.0"
- }
- },
- "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
- "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz",
- "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==",
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.14.9",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@dabh/diagnostics": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
- "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
- "dependencies": {
- "colorspace": "1.1.x",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
- }
- },
- "node_modules/@docsearch/css": {
- "version": "3.0.0-alpha.41",
- "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.41.tgz",
- "integrity": "sha512-AP1jqcF/9jCrm4s0lcES3QAtHueyipKjd14L/pguk0CZYK7uI7hC0FWodmRmrgK3/HST9jiHa1waUMR6ZYedlQ=="
- },
- "node_modules/@docsearch/js": {
- "version": "3.0.0-alpha.41",
- "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.41.tgz",
- "integrity": "sha512-dD9r+ygmzJEE50wtnRUs6I7TMD4ui7igEQlt74jZsn0SUPk6AlIP2ldII8brJHr0I4qs4OzlyrvV6ikAqjR6sw==",
- "dependencies": {
- "@docsearch/react": "3.0.0-alpha.41",
- "preact": "^10.0.0"
- }
- },
- "node_modules/@docsearch/react": {
- "version": "3.0.0-alpha.41",
- "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.41.tgz",
- "integrity": "sha512-UL0Gdter/NUea04lGuBGH0GzQ2/2q/hBfn7Rjo71rRKbjtfkQCM92leJ9tZ+9j9sFLoyuHb9XMm/B8vCjWwTEg==",
- "dependencies": {
- "@algolia/autocomplete-core": "1.2.2",
- "@algolia/autocomplete-preset-algolia": "1.2.2",
- "@docsearch/css": "3.0.0-alpha.41",
- "algoliasearch": "^4.0.0"
- },
- "peerDependencies": {
- "@types/react": ">= 16.8.0 < 18.0.0",
- "react": ">= 16.8.0 < 18.0.0",
- "react-dom": ">= 16.8.0 < 18.0.0"
- }
- },
- "node_modules/@gar/promisify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz",
- "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==",
- "optional": true
- },
- "node_modules/@google-cloud/paginator": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.6.tgz",
- "integrity": "sha512-XCTm/GfQIlc1ZxpNtTSs/mnZxC2cePNhxU3X8EzHXKIJ2JFncmJj2Fcd2IP+gbmZaSZnY0juFxbUCkIeuu/2eQ==",
- "dependencies": {
- "arrify": "^2.0.0",
- "extend": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/precise-date": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.4.tgz",
- "integrity": "sha512-nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg==",
- "engines": {
- "node": ">=10.4.0"
- }
- },
- "node_modules/@google-cloud/projectify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz",
- "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/promisify": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz",
- "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/pubsub": {
- "version": "2.17.0",
- "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.17.0.tgz",
- "integrity": "sha512-9Xya69A5VAYVEGf651jy071RuBIjv+jpyozSc3j8V21LIiKRr9x+KyplHcLTYWdj+uXbP9cry8Ck8JEFc7GiqQ==",
- "dependencies": {
- "@google-cloud/paginator": "^3.0.0",
- "@google-cloud/precise-date": "^2.0.0",
- "@google-cloud/projectify": "^2.0.0",
- "@google-cloud/promisify": "^2.0.0",
- "@opentelemetry/api": "^1.0.0",
- "@opentelemetry/semantic-conventions": "^0.24.0",
- "@types/duplexify": "^3.6.0",
- "@types/long": "^4.0.0",
- "arrify": "^2.0.0",
- "extend": "^3.0.2",
- "google-auth-library": "^7.0.0",
- "google-gax": "^2.24.1",
- "is-stream-ended": "^0.1.4",
- "lodash.snakecase": "^4.1.1",
- "p-defer": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/pubsub/node_modules/google-auth-library": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.9.2.tgz",
- "integrity": "sha512-HjxbJt660a+YUTYAgYor87JCuBZvjUSNBExk4bXTEaMuCn8IHSDeHmFxKqThuDPrLCiKJp8blk/Ze8f7SI4N6g==",
- "dependencies": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/pubsub/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/pubsub/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/@grpc/grpc-js": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz",
- "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==",
- "dependencies": {
- "@types/node": ">=12.12.47"
- },
- "engines": {
- "node": "^8.13.0 || >=10.10.0"
- }
- },
- "node_modules/@grpc/proto-loader": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.5.tgz",
- "integrity": "sha512-GZdzyVQI1Bln/kCzIYgTKu+rQJ5dno0gVrfmLe4jqQu7T2e7svSwJzpCBqVU5hhBSJP3peuPjOMWsj5GR61YmQ==",
- "dependencies": {
- "@types/long": "^4.0.1",
- "lodash.camelcase": "^4.3.0",
- "long": "^4.0.0",
- "protobufjs": "^6.10.0",
- "yargs": "^16.1.1"
- },
- "bin": {
- "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@grpc/proto-loader/node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/@grpc/proto-loader/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/@grpc/proto-loader/node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@grpc/proto-loader/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@grpc/proto-loader/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@jsdevtools/ono": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@npmcli/fs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz",
- "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==",
- "optional": true,
- "dependencies": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
- }
- },
- "node_modules/@npmcli/move-file": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
- "optional": true,
- "dependencies": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@npmcli/move-file/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@npmcli/move-file/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "optional": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@opentelemetry/api": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz",
- "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@opentelemetry/semantic-conventions": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-0.24.0.tgz",
- "integrity": "sha512-a/szuMQV0Quy0/M7kKdglcbRSoorleyyOwbTNNJ32O+RBN766wbQlMTvdimImTmwYWGr+NJOni1EcC242WlRcA==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
- },
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
- },
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
- },
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
- },
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
- },
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
- },
- "node_modules/@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "dependencies": {
- "defer-to-connect": "^1.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@types/archiver": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz",
- "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==",
- "dependencies": {
- "@types/glob": "*"
- }
- },
- "node_modules/@types/duplexify": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz",
- "integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==",
- "dependencies": {
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ=="
- },
- "node_modules/@types/linkify-it": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz",
- "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==",
- "peer": true
- },
- "node_modules/@types/long": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
- "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
- },
- "node_modules/@types/markdown-it": {
- "version": "12.2.3",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
- "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
- "peer": true,
- "dependencies": {
- "@types/linkify-it": "*",
- "@types/mdurl": "*"
- }
- },
- "node_modules/@types/mdurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
- "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==",
- "peer": true
- },
- "node_modules/@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
- },
- "node_modules/@types/node": {
- "version": "16.9.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz",
- "integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ=="
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.4",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
- "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
- "peer": true
- },
- "node_modules/@types/react": {
- "version": "17.0.37",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz",
- "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==",
- "peer": true,
- "dependencies": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/scheduler": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
- "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
- "peer": true
- },
- "node_modules/a-sync-waterfall": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
- "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA=="
- },
- "node_modules/abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dependencies": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agentkeepalive": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz",
- "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==",
- "optional": true,
- "dependencies": {
- "debug": "^4.1.0",
- "depd": "^1.1.2",
- "humanize-ms": "^1.2.1"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "optional": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/algoliasearch": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.11.0.tgz",
- "integrity": "sha512-IXRj8kAP2WrMmj+eoPqPc6P7Ncq1yZkFiyDrjTBObV1ADNL8Z/KdZ+dWC5MmYcBLAbcB/mMCpak5N/D1UIZvsA==",
- "dependencies": {
- "@algolia/cache-browser-local-storage": "4.11.0",
- "@algolia/cache-common": "4.11.0",
- "@algolia/cache-in-memory": "4.11.0",
- "@algolia/client-account": "4.11.0",
- "@algolia/client-analytics": "4.11.0",
- "@algolia/client-common": "4.11.0",
- "@algolia/client-personalization": "4.11.0",
- "@algolia/client-search": "4.11.0",
- "@algolia/logger-common": "4.11.0",
- "@algolia/logger-console": "4.11.0",
- "@algolia/requester-browser-xhr": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/requester-node-http": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "node_modules/ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "dependencies": {
- "string-width": "^3.0.0"
- }
- },
- "node_modules/ansi-align/node_modules/ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-align/node_modules/emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "node_modules/ansi-align/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ansi-align/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-align/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/ansicolors": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
- "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk="
- },
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "optional": true
- },
- "node_modules/archiver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz",
- "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==",
- "dependencies": {
- "archiver-utils": "^2.1.0",
- "async": "^3.2.0",
- "buffer-crc32": "^0.2.1",
- "readable-stream": "^3.6.0",
- "readdir-glob": "^1.0.0",
- "tar-stream": "^2.2.0",
- "zip-stream": "^4.1.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/archiver-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
- "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
- "dependencies": {
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.0",
- "lazystream": "^1.0.0",
- "lodash.defaults": "^4.2.0",
- "lodash.difference": "^4.5.0",
- "lodash.flatten": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.union": "^4.6.0",
- "normalize-path": "^3.0.0",
- "readable-stream": "^2.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/archiver-utils/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/archiver-utils/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/archiver-utils/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/archiver/node_modules/async": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz",
- "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg=="
- },
- "node_modules/are-we-there-yet": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
- "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
- "optional": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "node_modules/are-we-there-yet/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "optional": true
- },
- "node_modules/are-we-there-yet/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "optional": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/are-we-there-yet/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "optional": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arraybuffer.slice": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/as-array": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz",
- "integrity": "sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc="
- },
- "node_modules/asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
- },
- "node_modules/asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/assert-never": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
- "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
- },
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/ast-types": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
- "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
- "dependencies": {
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
- },
- "node_modules/async-each-series": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
- "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "node_modules/axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
- "dependencies": {
- "follow-redirects": "^1.14.0"
- }
- },
- "node_modules/babel-walk": {
- "version": "3.0.0-canary-5",
- "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
- "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
- "dependencies": {
- "@babel/types": "^7.9.6"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/base64-arraybuffer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
- "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/base64id": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
- "engines": {
- "node": "^4.5.0 || >= 5.9"
- }
- },
- "node_modules/basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/basic-auth-connect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz",
- "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI="
- },
- "node_modules/batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
- },
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/big-integer": {
- "version": "1.6.49",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz",
- "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/bignumber.js": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
- "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
- "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
- "dependencies": {
- "buffers": "~0.1.1",
- "chainsaw": "~0.1.0"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/blakejs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz",
- "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg=="
- },
- "node_modules/blob": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
- },
- "node_modules/bluebird": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
- "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
- },
- "node_modules/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "dependencies": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/body-parser/node_modules/http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/body-parser/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "node_modules/body-parser/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/body-parser/node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/body-parser/node_modules/raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/boxen": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browser-sync": {
- "version": "2.27.5",
- "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.5.tgz",
- "integrity": "sha512-0GMEPDqccbTxwYOUGCk5AZloDj9I/1eDZCLXUKXu7iBJPznGGOnMHs88mrhaFL0fTA0R23EmsXX9nLZP+k5YzA==",
- "dependencies": {
- "browser-sync-client": "^2.27.5",
- "browser-sync-ui": "^2.27.5",
- "bs-recipes": "1.3.4",
- "bs-snippet-injector": "^2.0.1",
- "chokidar": "^3.5.1",
- "connect": "3.6.6",
- "connect-history-api-fallback": "^1",
- "dev-ip": "^1.0.1",
- "easy-extender": "^2.3.4",
- "eazy-logger": "3.1.0",
- "etag": "^1.8.1",
- "fresh": "^0.5.2",
- "fs-extra": "3.0.1",
- "http-proxy": "^1.18.1",
- "immutable": "^3",
- "localtunnel": "^2.0.1",
- "micromatch": "^4.0.2",
- "opn": "5.3.0",
- "portscanner": "2.1.1",
- "qs": "6.2.3",
- "raw-body": "^2.3.2",
- "resp-modifier": "6.0.2",
- "rx": "4.1.0",
- "send": "0.16.2",
- "serve-index": "1.9.1",
- "serve-static": "1.13.2",
- "server-destroy": "1.0.1",
- "socket.io": "2.4.0",
- "ua-parser-js": "^0.7.28",
- "yargs": "^15.4.1"
- },
- "bin": {
- "browser-sync": "dist/bin.js"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/browser-sync-client": {
- "version": "2.27.5",
- "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.5.tgz",
- "integrity": "sha512-l2jtf60/exv0fQiZkhi3z8RgexYYLGS7DVDnyepkrp+oFAPlKW69daL6NrVSgrwu6lzSTCCTAiPXnUSrQ57e/Q==",
- "dependencies": {
- "etag": "1.8.1",
- "fresh": "0.5.2",
- "mitt": "^1.1.3",
- "rxjs": "^5.5.6"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/browser-sync-ui": {
- "version": "2.27.5",
- "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.5.tgz",
- "integrity": "sha512-KxBJhQ6XNbQ8w8UlkPa9/J5R0nBHgHuJUtDpEXQx1jBapDy32WGzD0NENDozP4zGNvJUgZk3N80hqB7YCieC3g==",
- "dependencies": {
- "async-each-series": "0.1.1",
- "connect-history-api-fallback": "^1",
- "immutable": "^3",
- "server-destroy": "1.0.1",
- "socket.io-client": "^2.4.0",
- "stream-throttle": "^0.1.3"
- }
- },
- "node_modules/browser-sync/node_modules/fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^3.0.0",
- "universalify": "^0.1.0"
- }
- },
- "node_modules/browser-sync/node_modules/jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/bs-recipes": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
- "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU="
- },
- "node_modules/bs-snippet-injector": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz",
- "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU="
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
- },
- "node_modules/buffer-indexof-polyfill": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
- "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/buffers": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
- "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
- "engines": {
- "node": ">=0.2.0"
- }
- },
- "node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cacache": {
- "version": "15.3.0",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
- "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
- "optional": true,
- "dependencies": {
- "@npmcli/fs": "^1.0.0",
- "@npmcli/move-file": "^1.0.1",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "infer-owner": "^1.0.4",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.1",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^1.0.3",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^8.0.1",
- "tar": "^6.0.2",
- "unique-filename": "^1.1.1"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/cacache/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "optional": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cacache/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cacache/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "optional": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/cacache/node_modules/tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "optional": true,
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/cacache/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- },
- "node_modules/cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cacheable-request/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cacheable-request/node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cardinal": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
- "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=",
- "dependencies": {
- "ansicolors": "~0.3.2",
- "redeyed": "~2.1.0"
- },
- "bin": {
- "cdl": "bin/cdl.js"
- }
- },
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "node_modules/chainsaw": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
- "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
- "dependencies": {
- "traverse": ">=0.3.0 <0.4"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/character-parser": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
- "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
- "dependencies": {
- "is-regex": "^1.0.3"
- }
- },
- "node_modules/chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
- },
- "node_modules/chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "optional": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
- },
- "node_modules/cjson": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz",
- "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=",
- "dependencies": {
- "json-parse-helpfulerror": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.3.0"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-color": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz",
- "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==",
- "dependencies": {
- "ansi-regex": "^2.1.1",
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "memoizee": "^0.4.14",
- "timers-ext": "^0.1.5"
- }
- },
- "node_modules/cli-color/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "dependencies": {
- "restore-cursor": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cli-spinners": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz",
- "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-table": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz",
- "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==",
- "dependencies": {
- "colors": "1.0.3"
- },
- "engines": {
- "node": ">= 0.2.0"
- }
- },
- "node_modules/cli-width": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
- "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
- },
- "node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dependencies": {
- "mimic-response": "^1.0.0"
- }
- },
- "node_modules/code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/color": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
- "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
- "dependencies": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.2"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/color-string": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
- "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "node_modules/color/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/colorspace": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
- "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
- "dependencies": {
- "color": "3.0.x",
- "text-hex": "1.0.x"
- }
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/compare-semver": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/compare-semver/-/compare-semver-1.1.0.tgz",
- "integrity": "sha1-fAp5onu4C2xplERfgpWCWdPQIVM=",
- "dependencies": {
- "semver": "^5.0.1"
- }
- },
- "node_modules/compare-semver/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
- },
- "node_modules/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
- },
- "node_modules/component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
- },
- "node_modules/compress-commons": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz",
- "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==",
- "dependencies": {
- "buffer-crc32": "^0.2.13",
- "crc32-stream": "^4.0.2",
- "normalize-path": "^3.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "dependencies": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/compression/node_modules/bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/compression/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/compression/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "node_modules/condense-newlines": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz",
- "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-whitespace": "^0.3.0",
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/condense-newlines/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/config-chain": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
- "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
- "dependencies": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "node_modules/configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dependencies": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
- "dependencies": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.0.1"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/connect-history-api-fallback": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
- "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/connect/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/connect/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "optional": true
- },
- "node_modules/constantinople": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
- "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
- "dependencies": {
- "@babel/parser": "^7.6.0",
- "@babel/types": "^7.6.1"
- }
- },
- "node_modules/content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/crc-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
- "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
- "dependencies": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- },
- "bin": {
- "crc32": "bin/crc32.njs"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/crc32-stream": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz",
- "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==",
- "dependencies": {
- "crc-32": "^1.2.0",
- "readable-stream": "^3.4.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/cross-env": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz",
- "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==",
- "dependencies": {
- "cross-spawn": "^6.0.5"
- },
- "bin": {
- "cross-env": "dist/bin/cross-env.js",
- "cross-env-shell": "dist/bin/cross-env-shell.js"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/cross-spawn/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/csstype": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz",
- "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==",
- "peer": true
- },
- "node_modules/csv-streamify": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/csv-streamify/-/csv-streamify-3.0.4.tgz",
- "integrity": "sha1-TLYUxX4/KZzKF7Y/3LStFnd39Ho=",
- "dependencies": {
- "through2": "2.0.1"
- },
- "bin": {
- "csv-streamify": "cli.js"
- },
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "dependencies": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/data-uri-to-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
- "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/date-time": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/date-time/-/date-time-0.1.1.tgz",
- "integrity": "sha1-7S9tk9l5DOL9ZtW1/z7dW7y/Owc=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dependencies": {
- "mimic-response": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/deep-freeze": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz",
- "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ="
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
- },
- "node_modules/defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "dependencies": {
- "clone": "^1.0.2"
- }
- },
- "node_modules/defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
- },
- "node_modules/define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dependencies": {
- "object-keys": "^1.0.12"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/degenerator": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz",
- "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==",
- "dependencies": {
- "ast-types": "^0.13.2",
- "escodegen": "^1.8.1",
- "esprima": "^4.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dependencies": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "optional": true
- },
- "node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/dependency-graph": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "node_modules/dev-ip": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
- "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=",
- "bin": {
- "dev-ip": "lib/dev-ip.js"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
- },
- "node_modules/doctypes": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
- "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
- },
- "node_modules/dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "dependencies": {
- "is-obj": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dotenv": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
- "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
- "dependencies": {
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/duplexer2/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/duplexer2/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/duplexer2/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
- },
- "node_modules/duplexify": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
- "dependencies": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/easy-extender": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
- "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
- "dependencies": {
- "lodash": "^4.17.10"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/eazy-logger": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz",
- "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==",
- "dependencies": {
- "tfunk": "^4.0.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/editorconfig": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
- "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
- "dependencies": {
- "commander": "^2.19.0",
- "lru-cache": "^4.1.5",
- "semver": "^5.6.0",
- "sigmund": "^1.0.1"
- },
- "bin": {
- "editorconfig": "bin/editorconfig"
- }
- },
- "node_modules/editorconfig/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/editorconfig/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "node_modules/ejs": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
- "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
- "hasInstallScript": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/enabled": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "optional": true,
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
- "node_modules/encoding/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "optional": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/engine.io": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz",
- "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==",
- "dependencies": {
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "debug": "~4.1.0",
- "engine.io-parser": "~2.2.0",
- "ws": "~7.4.2"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/engine.io-client": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz",
- "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==",
- "dependencies": {
- "component-emitter": "~1.3.0",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.2.0",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.6",
- "parseuri": "0.0.6",
- "ws": "~7.4.2",
- "xmlhttprequest-ssl": "~1.6.2",
- "yeast": "0.1.2"
- }
- },
- "node_modules/engine.io-client/node_modules/debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/engine.io-client/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/engine.io-parser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
- "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
- "dependencies": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.4",
- "blob": "0.0.5",
- "has-binary2": "~1.0.2"
- }
- },
- "node_modules/engine.io/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/entities": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
- "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ=="
- },
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "optional": true
- },
- "node_modules/errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.18.6",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz",
- "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.4",
- "is-string": "^1.0.7",
- "object-inspect": "^1.11.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es5-ext": {
- "version": "0.10.53",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
- "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
- "dependencies": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.3",
- "next-tick": "~1.0.0"
- }
- },
- "node_modules/es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "dependencies": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "node_modules/es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "dependencies": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
- }
- },
- "node_modules/es6-weak-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
- "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
- "dependencies": {
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.1"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=4.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "dependencies": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
- "node_modules/events-listener": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz",
- "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g=="
- },
- "node_modules/exegesis": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-2.5.7.tgz",
- "integrity": "sha512-Y0gEY3hgoLa80aMUm8rhhlIW3/KWo4uqN5hKJqok2GLh3maZjRLRC+p0gj33Jw3upAOKOXeRgScT5rtRoMyxwQ==",
- "dependencies": {
- "@apidevtools/json-schema-ref-parser": "^9.0.3",
- "ajv": "^6.12.2",
- "body-parser": "^1.18.3",
- "content-type": "^1.0.4",
- "deep-freeze": "0.0.1",
- "events-listener": "^1.1.0",
- "glob": "^7.1.3",
- "json-ptr": "^2.2.0",
- "json-schema-traverse": "^1.0.0",
- "lodash": "^4.17.11",
- "openapi3-ts": "^2.0.1",
- "promise-breaker": "^5.0.0",
- "pump": "^3.0.0",
- "qs": "^6.6.0",
- "raw-body": "^2.3.3",
- "semver": "^7.0.0"
- },
- "engines": {
- "node": ">=6.0.0",
- "npm": ">5.0.0"
- }
- },
- "node_modules/exegesis-express": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-2.0.1.tgz",
- "integrity": "sha512-8ORl1YRygYGPdR+zcClMqzaU+JQuvdNIw/s0RNwYluxNecEHkDEcXFmO6A5T79p7e48KI8iXJYt6KIn4Z9z4bg==",
- "dependencies": {
- "exegesis": "^2.5.7"
- },
- "engines": {
- "node": ">=6.0.0",
- "npm": ">5.0.0"
- }
- },
- "node_modules/exegesis/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
- "node_modules/exegesis/node_modules/qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/exit-code": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/exit-code/-/exit-code-1.0.2.tgz",
- "integrity": "sha1-zhZYEcnxF69qX4gpQLlq5/muzDQ="
- },
- "node_modules/exit-on-epipe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "dependencies": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/express/node_modules/cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/express/node_modules/finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/express/node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/express/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/express/node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/express/node_modules/send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/express/node_modules/send/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- },
- "node_modules/express/node_modules/serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/express/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ext": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.5.0.tgz",
- "integrity": "sha512-+ONcYoWj/SoQwUofMr94aGu05Ou4FepKi7N7b+O8T4jVfyIsZQV1/xeS8jpaBzF0csAk0KLXoHCxU7cKYZjo1Q==",
- "dependencies": {
- "type": "^2.5.0"
- }
- },
- "node_modules/ext/node_modules/type": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
- "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw=="
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "dependencies": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "engines": [
- "node >=0.6.0"
- ]
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
- },
- "node_modules/fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
- },
- "node_modules/fast-text-encoding": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
- "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
- },
- "node_modules/fast-url-parser": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
- "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=",
- "dependencies": {
- "punycode": "^1.3.2"
- }
- },
- "node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fecha": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
- "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
- },
- "node_modules/figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/file-uri-to-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
- "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/filesize": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz",
- "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/firebase-tools": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-9.18.0.tgz",
- "integrity": "sha512-yth3C6ZdzkXbQVKgmrIYn/NBvkCnstEfsTsqvLUL+Mo0s5Cq+JR8A8DKLJHyWBrWjKkT5R9VfefnkhHCUrjRNw==",
- "dependencies": {
- "@google-cloud/pubsub": "^2.7.0",
- "@types/archiver": "^5.1.0",
- "abort-controller": "^3.0.0",
- "ajv": "^6.12.6",
- "archiver": "^5.0.0",
- "body-parser": "^1.19.0",
- "chokidar": "^3.0.2",
- "cjson": "^0.3.1",
- "cli-color": "^1.2.0",
- "cli-table": "^0.3.1",
- "commander": "^4.0.1",
- "configstore": "^5.0.1",
- "cors": "^2.8.5",
- "cross-env": "^5.1.3",
- "cross-spawn": "^7.0.1",
- "csv-streamify": "^3.0.4",
- "dotenv": "^6.1.0",
- "exegesis": "^2.5.7",
- "exegesis-express": "^2.0.0",
- "exit-code": "^1.0.2",
- "express": "^4.16.4",
- "filesize": "^6.1.0",
- "fs-extra": "^5.0.0",
- "glob": "^7.1.2",
- "google-auth-library": "^6.1.3",
- "inquirer": "~6.3.1",
- "js-yaml": "^3.13.1",
- "JSONStream": "^1.2.1",
- "jsonwebtoken": "^8.5.1",
- "leven": "^3.1.0",
- "lodash": "^4.17.21",
- "marked": "^0.7.0",
- "marked-terminal": "^3.3.0",
- "mime": "^2.5.2",
- "minimatch": "^3.0.4",
- "morgan": "^1.10.0",
- "node-fetch": "^2.6.1",
- "open": "^6.3.0",
- "ora": "^3.4.0",
- "portfinder": "^1.0.23",
- "progress": "^2.0.3",
- "proxy-agent": "^4.0.0",
- "request": "^2.87.0",
- "rimraf": "^3.0.0",
- "semver": "^5.7.1",
- "superstatic": "^7.1.0",
- "tar": "^4.3.0",
- "tcp-port-used": "^1.0.1",
- "tmp": "0.0.33",
- "triple-beam": "^1.3.0",
- "tweetsodium": "0.0.5",
- "universal-analytics": "^0.4.16",
- "unzipper": "^0.10.10",
- "update-notifier": "^5.1.0",
- "uuid": "^3.0.0",
- "winston": "^3.0.0",
- "winston-transport": "^4.4.0",
- "ws": "^7.2.3"
- },
- "bin": {
- "firebase": "lib/bin/firebase.js"
- },
- "engines": {
- "node": ">= 10.13"
- }
- },
- "node_modules/firebase-tools/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/firebase-tools/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/firebase-tools/node_modules/fs-extra": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
- "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "node_modules/firebase-tools/node_modules/mime": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
- "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/firebase-tools/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/firebase-tools/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/firebase-tools/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/firebase-tools/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/firebase-tools/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/firebase-tools/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/flat-arguments": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/flat-arguments/-/flat-arguments-1.0.2.tgz",
- "integrity": "sha1-m6p4Ct8FAfKC1ybJxqA426ROp28=",
- "dependencies": {
- "array-flatten": "^1.0.0",
- "as-array": "^1.0.0",
- "lodash.isarguments": "^3.0.0",
- "lodash.isobject": "^3.0.0"
- }
- },
- "node_modules/flat-arguments/node_modules/as-array": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/as-array/-/as-array-1.0.0.tgz",
- "integrity": "sha1-KKbu6qVynx9OyiBH316d4avaDtE=",
- "dependencies": {
- "lodash.isarguments": "2.4.x",
- "lodash.isobject": "^2.4.1",
- "lodash.values": "^2.4.1"
- }
- },
- "node_modules/flat-arguments/node_modules/as-array/node_modules/lodash.isarguments": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-2.4.1.tgz",
- "integrity": "sha1-STGpwIJTrfCRrnyhkiWKlzh27Mo="
- },
- "node_modules/flat-arguments/node_modules/as-array/node_modules/lodash.isobject": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
- "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
- "dependencies": {
- "lodash._objecttypes": "~2.4.1"
- }
- },
- "node_modules/flat-arguments/node_modules/lodash.isobject": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
- "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0="
- },
- "node_modules/fn.name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
- },
- "node_modules/follow-redirects": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
- "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
- },
- "node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- },
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/ftp": {
- "version": "0.3.10",
- "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz",
- "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=",
- "dependencies": {
- "readable-stream": "1.1.x",
- "xregexp": "2.0.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/ftp/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "node_modules/ftp/node_modules/readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/ftp/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "optional": true,
- "dependencies": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "node_modules/gauge/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/gauge/node_modules/is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "optional": true,
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/gauge/node_modules/string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "optional": true,
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/gauge/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "optional": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/gaxios": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
- "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
- "dependencies": {
- "abort-controller": "^3.0.0",
- "extend": "^3.0.2",
- "https-proxy-agent": "^5.0.0",
- "is-stream": "^2.0.0",
- "node-fetch": "^2.6.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/gcp-metadata": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
- "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
- "dependencies": {
- "gaxios": "^4.0.0",
- "json-bigint": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-uri": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz",
- "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==",
- "dependencies": {
- "@tootallnate/once": "1",
- "data-uri-to-buffer": "3",
- "debug": "4",
- "file-uri-to-path": "2",
- "fs-extra": "^8.1.0",
- "ftp": "^0.3.10"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
- "node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob-slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz",
- "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U="
- },
- "node_modules/glob-slasher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz",
- "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=",
- "dependencies": {
- "glob-slash": "^1.0.0",
- "lodash.isobject": "^2.4.1",
- "toxic": "^1.0.0"
- }
- },
- "node_modules/global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
- "dependencies": {
- "ini": "2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/global-dirs/node_modules/ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dependencies": {
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/globby/node_modules/array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dependencies": {
- "array-uniq": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/globby/node_modules/arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/google-auth-library": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
- "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
- "dependencies": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-auth-library/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-auth-library/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/google-gax": {
- "version": "2.25.4",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.25.4.tgz",
- "integrity": "sha512-+Jd0FFOWyb8ieX53e6Sl5OYvHXoA1sWKfQ24ykR502NKgBTvPAh/RFcITihGePBJZ1E8pfh4MKWU0Sf+f1CK+A==",
- "dependencies": {
- "@grpc/grpc-js": "~1.3.0",
- "@grpc/proto-loader": "^0.6.1",
- "@types/long": "^4.0.0",
- "abort-controller": "^3.0.0",
- "duplexify": "^4.0.0",
- "fast-text-encoding": "^1.0.3",
- "google-auth-library": "^7.6.1",
- "is-stream-ended": "^0.1.4",
- "node-fetch": "^2.6.1",
- "object-hash": "^2.1.1",
- "proto3-json-serializer": "^0.1.1",
- "protobufjs": "6.11.2",
- "retry-request": "^4.0.0"
- },
- "bin": {
- "compileProtos": "build/tools/compileProtos.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-gax/node_modules/google-auth-library": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.9.2.tgz",
- "integrity": "sha512-HjxbJt660a+YUTYAgYor87JCuBZvjUSNBExk4bXTEaMuCn8IHSDeHmFxKqThuDPrLCiKJp8blk/Ze8f7SI4N6g==",
- "dependencies": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-gax/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-gax/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/google-p12-pem": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz",
- "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==",
- "dependencies": {
- "node-forge": "^0.10.0"
- },
- "bin": {
- "gp12-pem": "build/src/bin/gp12-pem.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dependencies": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
- },
- "node_modules/gray-matter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
- "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
- "dependencies": {
- "js-yaml": "^3.13.1",
- "kind-of": "^6.0.2",
- "section-matter": "^1.0.0",
- "strip-bom-string": "^1.0.0"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/gtoken": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz",
- "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==",
- "dependencies": {
- "gaxios": "^4.0.0",
- "google-p12-pem": "^3.0.3",
- "jws": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/hamljs": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz",
- "integrity": "sha1-e3EWz22+cnjkKz9u+HJaM+F3yOM="
- },
- "node_modules/handlebars": {
- "version": "4.7.7",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
- "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
- "dependencies": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.0",
- "source-map": "^0.6.1",
- "wordwrap": "^1.0.0"
- },
- "bin": {
- "handlebars": "bin/handlebars"
- },
- "engines": {
- "node": ">=0.4.7"
- },
- "optionalDependencies": {
- "uglify-js": "^3.1.4"
- }
- },
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-ansi/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-binary2": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "dependencies": {
- "isarray": "2.0.1"
- }
- },
- "node_modules/has-color": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
- "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-cors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "optional": true
- },
- "node_modules/has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/home-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/home-dir/-/home-dir-1.0.0.tgz",
- "integrity": "sha1-KRfrRL3JByztqUJXlUOEfjAX/k4="
- },
- "node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "node_modules/http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
- "node_modules/http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-errors/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-proxy": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
- "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
- "optional": true,
- "dependencies": {
- "ms": "^2.0.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/immutable": {
- "version": "3.8.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
- "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
- },
- "node_modules/infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "optional": true
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
- },
- "node_modules/inquirer": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz",
- "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==",
- "dependencies": {
- "ansi-escapes": "^3.2.0",
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^2.0.0",
- "lodash": "^4.17.11",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.4.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^5.1.0",
- "through": "^2.3.6"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/inquirer/node_modules/ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/inquirer/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/inquirer/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/inquirer/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/rxjs": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
- "dependencies": {
- "tslib": "^1.9.0"
- },
- "engines": {
- "npm": ">=2.0.0"
- }
- },
- "node_modules/inquirer/node_modules/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dependencies": {
- "ansi-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/inquirer/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "node_modules/install-artifact-from-github": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz",
- "integrity": "sha512-3OxCPcY55XlVM3kkfIpeCgmoSKnMsz2A3Dbhsq0RXpIknKQmrX1YiznCeW9cD2ItFmDxziA3w6Eg8d80AoL3oA==",
- "optional": true,
- "bin": {
- "install-from-cache": "bin/install-from-cache.js",
- "save-to-github-cache": "bin/save-to-github-cache.js"
- }
- },
- "node_modules/internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "dependencies": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
- },
- "node_modules/ip-regex": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-absolute": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
- "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
- "dependencies": {
- "is-relative": "^1.0.0",
- "is-windows": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dependencies": {
- "has-bigints": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "node_modules/is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dependencies": {
- "ci-info": "^2.0.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
- "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-expression": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
- "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
- "dependencies": {
- "acorn": "^7.1.1",
- "object-assign": "^4.1.1"
- }
- },
- "node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-installed-globally": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
- "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
- "dependencies": {
- "global-dirs": "^3.0.0",
- "is-path-inside": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-installed-globally/node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-lambda": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
- "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=",
- "optional": true
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-npm": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
- "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-like": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
- "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
- "dependencies": {
- "lodash.isfinite": "^3.3.2"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
- "dependencies": {
- "is-path-inside": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "dependencies": {
- "path-is-inside": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-promise": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
- },
- "node_modules/is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-relative": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
- "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
- "dependencies": {
- "is-unc-path": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-stream-ended": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
- "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw=="
- },
- "node_modules/is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "node_modules/is-unc-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
- "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
- "dependencies": {
- "unc-path-regex": "^0.1.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
- },
- "node_modules/is-whitespace": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz",
- "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/is-yarn-global": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
- "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw=="
- },
- "node_modules/is2": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz",
- "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==",
- "dependencies": {
- "deep-is": "^0.1.3",
- "ip-regex": "^4.1.0",
- "is-url": "^1.2.4"
- },
- "engines": {
- "node": ">=v0.10.0"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "node_modules/javascript-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
- "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="
- },
- "node_modules/jju": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
- "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo="
- },
- "node_modules/join-path": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/join-path/-/join-path-1.1.1.tgz",
- "integrity": "sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU=",
- "dependencies": {
- "as-array": "^2.0.0",
- "url-join": "0.0.1",
- "valid-url": "^1"
- }
- },
- "node_modules/js-beautify": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
- "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==",
- "dependencies": {
- "config-chain": "^1.1.12",
- "editorconfig": "^0.15.3",
- "glob": "^7.1.3",
- "nopt": "^5.0.0"
- },
- "bin": {
- "css-beautify": "js/bin/css-beautify.js",
- "html-beautify": "js/bin/html-beautify.js",
- "js-beautify": "js/bin/js-beautify.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/js-stringify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
- "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "peer": true
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "node_modules/json-bigint": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
- "dependencies": {
- "bignumber.js": "^9.0.0"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
- },
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
- },
- "node_modules/json-parse-helpfulerror": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
- "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=",
- "dependencies": {
- "jju": "^1.1.0"
- }
- },
- "node_modules/json-ptr": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json-ptr/-/json-ptr-2.2.0.tgz",
- "integrity": "sha512-w9f6/zhz4kykltXMG7MLJWMajxiPj0q+uzQPR1cggNAE/sXoq/C5vjUb/7QNcC3rJsVIIKy37ALTXy1O+3c8QQ==",
- "dependencies": {
- "tslib": "^2.2.0"
- }
- },
- "node_modules/json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "engines": [
- "node >= 0.2.0"
- ]
- },
- "node_modules/JSONStream": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
- "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
- "dependencies": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- },
- "bin": {
- "JSONStream": "bin.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/jsonwebtoken": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "dependencies": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=4",
- "npm": ">=1.4.28"
- }
- },
- "node_modules/jsonwebtoken/node_modules/jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jsonwebtoken/node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jsonwebtoken/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "node_modules/jstransformer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
- "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
- "dependencies": {
- "is-promise": "^2.0.0",
- "promise": "^7.0.1"
- }
- },
- "node_modules/junk": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz",
- "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "dependencies": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dependencies": {
- "json-buffer": "3.0.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kuler": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
- },
- "node_modules/latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
- "dependencies": {
- "package-json": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lazystream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
- "dependencies": {
- "readable-stream": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.6.3"
- }
- },
- "node_modules/lazystream/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/lazystream/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/lazystream/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/limiter": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
- "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA=="
- },
- "node_modules/linkify-it": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
- "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
- "dependencies": {
- "uc.micro": "^1.0.1"
- }
- },
- "node_modules/liquidjs": {
- "version": "6.4.3",
- "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-6.4.3.tgz",
- "integrity": "sha512-m1xSB10Ncu22NR3X0xdaqu/GvP1xadDCFYGqGgd6me8DAWjyA68BKE5DHJmSxw1CGsWPsX+Hj2v/87J2w/LvMQ==",
- "engines": {
- "node": ">=4.8.7"
- }
- },
- "node_modules/listenercount": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
- "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
- },
- "node_modules/load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/load-json-file/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/localtunnel": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz",
- "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==",
- "dependencies": {
- "axios": "0.21.4",
- "debug": "4.3.2",
- "openurl": "1.1.1",
- "yargs": "17.1.1"
- },
- "bin": {
- "lt": "bin/lt.js"
- },
- "engines": {
- "node": ">=8.3.0"
- }
- },
- "node_modules/localtunnel/node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/localtunnel/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/localtunnel/node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/localtunnel/node_modules/yargs": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
- "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/localtunnel/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash._isnative": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
- "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw="
- },
- "node_modules/lodash._objecttypes": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
- "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE="
- },
- "node_modules/lodash._shimkeys": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
- "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
- "dependencies": {
- "lodash._objecttypes": "~2.4.1"
- }
- },
- "node_modules/lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
- },
- "node_modules/lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
- },
- "node_modules/lodash.difference": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
- "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
- },
- "node_modules/lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
- },
- "node_modules/lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
- },
- "node_modules/lodash.isfinite": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
- "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M="
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
- },
- "node_modules/lodash.isobject": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
- "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
- "dependencies": {
- "lodash._objecttypes": "~2.4.1"
- }
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
- },
- "node_modules/lodash.keys": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
- "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
- "dependencies": {
- "lodash._isnative": "~2.4.1",
- "lodash._shimkeys": "~2.4.1",
- "lodash.isobject": "~2.4.1"
- }
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
- },
- "node_modules/lodash.snakecase": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
- "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40="
- },
- "node_modules/lodash.union": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
- "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
- },
- "node_modules/lodash.values": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
- "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
- "dependencies": {
- "lodash.keys": "~2.4.1"
- }
- },
- "node_modules/log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dependencies": {
- "chalk": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/log-symbols/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/logform": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
- "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==",
- "dependencies": {
- "colors": "^1.2.1",
- "fast-safe-stringify": "^2.0.4",
- "fecha": "^4.2.0",
- "ms": "^2.1.1",
- "triple-beam": "^1.3.0"
- }
- },
- "node_modules/logform/node_modules/colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "peer": true,
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/lru-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
- "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
- "dependencies": {
- "es5-ext": "~0.10.2"
- }
- },
- "node_modules/luxon": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz",
- "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/make-fetch-happen": {
- "version": "8.0.14",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz",
- "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==",
- "optional": true,
- "dependencies": {
- "agentkeepalive": "^4.1.3",
- "cacache": "^15.0.5",
- "http-cache-semantics": "^4.1.0",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.3",
- "minipass-collect": "^1.0.2",
- "minipass-fetch": "^1.3.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^5.0.0",
- "ssri": "^8.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/make-fetch-happen/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "optional": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/make-fetch-happen/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- },
- "node_modules/map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/markdown-it": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
- "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
- "dependencies": {
- "argparse": "^1.0.7",
- "entities": "~2.0.0",
- "linkify-it": "^2.0.0",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
- },
- "bin": {
- "markdown-it": "bin/markdown-it.js"
- }
- },
- "node_modules/markdown-it-anchor": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz",
- "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==",
- "peerDependencies": {
- "@types/markdown-it": "*",
- "markdown-it": "*"
- }
- },
- "node_modules/markdown-it-attrs": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.0.tgz",
- "integrity": "sha512-xd1SuNQPArGYl3SN1bsOHRnmMenkqeLDbTR0udeyGMSFBnaOtxP4yz1SEKrjsV/XYFygFAeKFHgbbj6AwxbTfA==",
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "markdown-it": ">= 9.0.0 < 13.0.0"
- }
- },
- "node_modules/markdown-it-toc-done-right": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/markdown-it-toc-done-right/-/markdown-it-toc-done-right-4.2.0.tgz",
- "integrity": "sha512-UB/IbzjWazwTlNAX0pvWNlJS8NKsOQ4syrXZQ/C72j+jirrsjVRT627lCaylrKJFBQWfRsPmIVQie8x38DEhAQ=="
- },
- "node_modules/marked": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
- "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==",
- "bin": {
- "marked": "bin/marked"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/marked-terminal": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz",
- "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==",
- "dependencies": {
- "ansi-escapes": "^3.1.0",
- "cardinal": "^2.1.1",
- "chalk": "^2.4.1",
- "cli-table": "^0.3.1",
- "node-emoji": "^1.4.1",
- "supports-hyperlinks": "^1.0.1"
- },
- "peerDependencies": {
- "marked": "^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0"
- }
- },
- "node_modules/marked-terminal/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/marked-terminal/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/marked-terminal/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/marked-terminal/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/marked-terminal/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/marked-terminal/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/maximatch": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz",
- "integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=",
- "dependencies": {
- "array-differ": "^1.0.0",
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "minimatch": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/maximatch/node_modules/array-differ": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
- "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/maximatch/node_modules/array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dependencies": {
- "array-uniq": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/maximatch/node_modules/arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/memoizee": {
- "version": "0.4.15",
- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
- "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
- "dependencies": {
- "d": "^1.0.1",
- "es5-ext": "^0.10.53",
- "es6-weak-map": "^2.0.3",
- "event-emitter": "^0.3.5",
- "is-promise": "^2.2.2",
- "lru-queue": "^0.1.0",
- "next-tick": "^1.1.0",
- "timers-ext": "^0.1.7"
- }
- },
- "node_modules/memoizee/node_modules/next-tick": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
- "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
- },
- "node_modules/memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
- "bin": {
- "mime": "cli.js"
- }
- },
- "node_modules/mime-db": {
- "version": "1.49.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
- "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.32",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
- "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
- "dependencies": {
- "mime-db": "1.49.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "node_modules/minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
- "optional": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-fetch": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
- "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.1.0",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "optionalDependencies": {
- "encoding": "^0.1.12"
- }
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minizlib/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- },
- "node_modules/mitt": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
- "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw=="
- },
- "node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/moo": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz",
- "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w=="
- },
- "node_modules/morgan": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
- "dependencies": {
- "basic-auth": "~2.0.1",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/morgan/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/morgan/node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/morgan/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/multimatch": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
- "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
- "dependencies": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/mustache": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz",
- "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==",
- "bin": {
- "mustache": "bin/mustache"
- },
- "engines": {
- "npm": ">=1.4.0"
- }
- },
- "node_modules/mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
- },
- "node_modules/nan": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
- "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
- "optional": true
- },
- "node_modules/nash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/nash/-/nash-3.0.0.tgz",
- "integrity": "sha512-M5SahEycXUmko3zOvsBkF6p94CWLhnyy9hfpQ9Qzp+rQkQ8D1OaTlfTl1OBWktq9Fak3oDXKU+ev7tiMaMu+1w==",
- "dependencies": {
- "async": "^1.3.0",
- "flat-arguments": "^1.0.0",
- "lodash": "^4.17.5",
- "minimist": "^1.1.0"
- }
- },
- "node_modules/negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
- },
- "node_modules/netmask": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
- "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
- },
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
- "node_modules/node-emoji": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
- "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
- "dependencies": {
- "lodash": "^4.17.21"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.4.tgz",
- "integrity": "sha512-aD1fO+xtLiSCc9vuD+sYMxpIuQyhHscGSkBEo2o5LTV/3bTEAYvdUii29n8LlO5uLCmWdGP7uVUVXFo5SRdkLA==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- }
- },
- "node_modules/node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/node-gyp": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.2.0.tgz",
- "integrity": "sha512-KG8SdcoAnw2d6augGwl1kOayALUrXW/P2uOAm2J2+nmW/HjZo7y+8TDg7LejxbekOOSv3kzhq+NSUYkIDAX8eA==",
- "optional": true,
- "dependencies": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^8.0.14",
- "nopt": "^5.0.0",
- "npmlog": "^4.1.2",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": ">= 10.12.0"
- }
- },
- "node_modules/node-gyp/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-gyp/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "optional": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/node-gyp/node_modules/tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "optional": true,
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/node-gyp/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "optional": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/node-gyp/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- },
- "node_modules/nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
- "dependencies": {
- "abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/normalize-package-data/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-url": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
- "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npm-run-all": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
- "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "memorystream": "^0.3.1",
- "minimatch": "^3.0.4",
- "pidtree": "^0.3.0",
- "read-pkg": "^3.0.0",
- "shell-quote": "^1.6.1",
- "string.prototype.padend": "^3.0.0"
- },
- "bin": {
- "npm-run-all": "bin/npm-run-all/index.js",
- "run-p": "bin/run-p/index.js",
- "run-s": "bin/run-s/index.js"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/npm-run-all/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm-run-all/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm-run-all/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/npm-run-all/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/npm-run-all/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm-run-all/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "optional": true,
- "dependencies": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "node_modules/number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nunjucks": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz",
- "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==",
- "dependencies": {
- "a-sync-waterfall": "^1.0.0",
- "asap": "^2.0.3",
- "commander": "^5.1.0"
- },
- "bin": {
- "nunjucks-precompile": "bin/precompile"
- },
- "engines": {
- "node": ">= 6.9.0"
- },
- "peerDependencies": {
- "chokidar": "^3.3.0"
- },
- "peerDependenciesMeta": {
- "chokidar": {
- "optional": true
- }
- }
- },
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/one-time": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "dependencies": {
- "fn.name": "1.x.x"
- }
- },
- "node_modules/onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dependencies": {
- "mimic-fn": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/open": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
- "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
- "dependencies": {
- "is-wsl": "^1.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/openapi3-ts": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.1.tgz",
- "integrity": "sha512-v6X3iwddhi276siej96jHGIqTx3wzVfMTmpGJEQDt7GPI7pI6sywItURLzpEci21SBRpPN/aOWSF5mVfFVNmcg==",
- "dependencies": {
- "yaml": "^1.10.0"
- }
- },
- "node_modules/openurl": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
- "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c="
- },
- "node_modules/opn": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
- "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
- "dependencies": {
- "is-wsl": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ora": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
- "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
- "dependencies": {
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-spinners": "^2.0.0",
- "log-symbols": "^2.2.0",
- "strip-ansi": "^5.2.0",
- "wcwidth": "^1.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ora/node_modules/ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ora/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ora/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ora/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/ora/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/ora/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ora/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ora/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-defer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz",
- "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "optional": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pac-proxy-agent": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz",
- "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==",
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4",
- "get-uri": "3",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "5",
- "pac-resolver": "^4.1.0",
- "raw-body": "^2.2.0",
- "socks-proxy-agent": "5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pac-resolver": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz",
- "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==",
- "dependencies": {
- "degenerator": "^2.2.0",
- "ip": "^1.1.5",
- "netmask": "^2.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "dependencies": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/package-json/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/parse-filepath": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
- "dependencies": {
- "is-absolute": "^1.0.0",
- "map-cache": "^0.2.0",
- "path-root": "^0.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dependencies": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/parse-ms": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-0.1.2.tgz",
- "integrity": "sha1-3T+iXtbC78e93hKtm0bBY6opIk4=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/parseqs": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
- "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
- },
- "node_modules/parseuri": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
- "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
- },
- "node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-root": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
- "dependencies": {
- "path-root-regex": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-root-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "node_modules/path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-type/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pidtree": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
- "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
- "bin": {
- "pidtree": "bin/pidtree.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dependencies": {
- "pinkie": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/please-upgrade-node": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
- "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
- "dependencies": {
- "semver-compare": "^1.0.0"
- }
- },
- "node_modules/portfinder": {
- "version": "1.0.28",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
- "dependencies": {
- "async": "^2.6.2",
- "debug": "^3.1.1",
- "mkdirp": "^0.5.5"
- },
- "engines": {
- "node": ">= 0.12.0"
- }
- },
- "node_modules/portfinder/node_modules/async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "dependencies": {
- "lodash": "^4.17.14"
- }
- },
- "node_modules/portfinder/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/portscanner": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz",
- "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=",
- "dependencies": {
- "async": "1.5.2",
- "is-number-like": "^1.0.3"
- },
- "engines": {
- "node": ">=0.4",
- "npm": ">=1.0.0"
- }
- },
- "node_modules/preact": {
- "version": "10.6.2",
- "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.2.tgz",
- "integrity": "sha512-ppDjurt75nSxyikpyali+uKwRl8CK9N6ntOPovGIEGQagjMLVzEgVqFEsUUyUrqyE9Ch90KE0jmFc9q2QcPLBA==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/preact"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/prettier": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
- "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/pretty": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz",
- "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=",
- "dependencies": {
- "condense-newlines": "^0.2.1",
- "extend-shallow": "^2.0.1",
- "js-beautify": "^1.6.12"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pretty-ms": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz",
- "integrity": "sha1-2oeaaC/zOjcBEEbxPWJ/Z8c7hPY=",
- "dependencies": {
- "parse-ms": "^0.1.0"
- },
- "bin": {
- "pretty-ms": "cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/printj": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
- "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
- "bin": {
- "printj": "bin/printj.njs"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "dependencies": {
- "asap": "~2.0.3"
- }
- },
- "node_modules/promise-breaker": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz",
- "integrity": "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA=="
- },
- "node_modules/promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "optional": true
- },
- "node_modules/promise-retry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
- "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
- "optional": true,
- "dependencies": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
- },
- "node_modules/proto3-json-serializer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.4.tgz",
- "integrity": "sha512-bFzdsKU/zaTobWrRxRniMZIzzcgKYlmBWL1gAcTXZ2M7TQTGPI0JoYYs6bN7tpWj59ZCfwg7Ii/A2e8BbQGYnQ=="
- },
- "node_modules/protobufjs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz",
- "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==",
- "hasInstallScript": true,
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.1",
- "@types/node": ">=13.7.0",
- "long": "^4.0.0"
- },
- "bin": {
- "pbjs": "bin/pbjs",
- "pbts": "bin/pbts"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz",
- "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==",
- "dependencies": {
- "agent-base": "^6.0.0",
- "debug": "4",
- "http-proxy-agent": "^4.0.0",
- "https-proxy-agent": "^5.0.0",
- "lru-cache": "^5.1.1",
- "pac-proxy-agent": "^4.1.0",
- "proxy-from-env": "^1.0.0",
- "socks-proxy-agent": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/proxy-agent/node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/proxy-agent/node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
- },
- "node_modules/prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
- },
- "node_modules/pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
- },
- "node_modules/pug": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
- "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
- "dependencies": {
- "pug-code-gen": "^3.0.2",
- "pug-filters": "^4.0.0",
- "pug-lexer": "^5.0.1",
- "pug-linker": "^4.0.0",
- "pug-load": "^3.0.0",
- "pug-parser": "^6.0.0",
- "pug-runtime": "^3.0.1",
- "pug-strip-comments": "^2.0.0"
- }
- },
- "node_modules/pug-attrs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
- "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
- "dependencies": {
- "constantinople": "^4.0.1",
- "js-stringify": "^1.0.2",
- "pug-runtime": "^3.0.0"
- }
- },
- "node_modules/pug-code-gen": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
- "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
- "dependencies": {
- "constantinople": "^4.0.1",
- "doctypes": "^1.1.0",
- "js-stringify": "^1.0.2",
- "pug-attrs": "^3.0.0",
- "pug-error": "^2.0.0",
- "pug-runtime": "^3.0.0",
- "void-elements": "^3.1.0",
- "with": "^7.0.0"
- }
- },
- "node_modules/pug-error": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
- "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
- },
- "node_modules/pug-filters": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
- "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
- "dependencies": {
- "constantinople": "^4.0.1",
- "jstransformer": "1.0.0",
- "pug-error": "^2.0.0",
- "pug-walk": "^2.0.0",
- "resolve": "^1.15.1"
- }
- },
- "node_modules/pug-lexer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
- "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
- "dependencies": {
- "character-parser": "^2.2.0",
- "is-expression": "^4.0.0",
- "pug-error": "^2.0.0"
- }
- },
- "node_modules/pug-linker": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
- "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
- "dependencies": {
- "pug-error": "^2.0.0",
- "pug-walk": "^2.0.0"
- }
- },
- "node_modules/pug-load": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
- "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
- "dependencies": {
- "object-assign": "^4.1.1",
- "pug-walk": "^2.0.0"
- }
- },
- "node_modules/pug-parser": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
- "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
- "dependencies": {
- "pug-error": "^2.0.0",
- "token-stream": "1.0.0"
- }
- },
- "node_modules/pug-runtime": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
- "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
- },
- "node_modules/pug-strip-comments": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
- "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
- "dependencies": {
- "pug-error": "^2.0.0"
- }
- },
- "node_modules/pug-walk": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
- "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "node_modules/pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dependencies": {
- "escape-goat": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qs": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
- "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
- "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
- "dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.3",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/re2": {
- "version": "1.16.0",
- "resolved": "https://registry.npmjs.org/re2/-/re2-1.16.0.tgz",
- "integrity": "sha512-eizTZL2ZO0ZseLqfD4t3Qd0M3b3Nr0MBWpX81EbPMIud/1d/CSfUIx2GQK8fWiAeHoSekO5EOeFib2udTZLwYw==",
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "install-artifact-from-github": "^1.2.0",
- "nan": "^2.14.2",
- "node-gyp": "^8.0.0"
- }
- },
- "node_modules/react": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
- "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
- "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
- },
- "peerDependencies": {
- "react": "17.0.2"
- }
- },
- "node_modules/read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dependencies": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdir-glob": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz",
- "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==",
- "dependencies": {
- "minimatch": "^3.0.4"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/recursive-copy": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.13.tgz",
- "integrity": "sha512-BjmE6R/dOImStEku+017L3Z0I6u/lA+SVr1sySWbTLjmQKDTESNmJ9WBZP8wbN5FuvqNvSYvRKA/IKQhAjqnpQ==",
- "dependencies": {
- "del": "^2.2.0",
- "errno": "^0.1.2",
- "graceful-fs": "^4.1.4",
- "junk": "^1.0.1",
- "maximatch": "^0.1.0",
- "mkdirp": "^0.5.1",
- "pify": "^2.3.0",
- "promise": "^7.0.1",
- "slash": "^1.0.0"
- }
- },
- "node_modules/redeyed": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
- "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=",
- "dependencies": {
- "esprima": "~4.0.0"
- }
- },
- "node_modules/registry-auth-token": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
- "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
- "dependencies": {
- "rc": "^1.2.8"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/registry-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "dependencies": {
- "rc": "^1.2.8"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/request/node_modules/qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
- },
- "node_modules/resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "dependencies": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resp-modifier": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
- "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=",
- "dependencies": {
- "debug": "^2.2.0",
- "minimatch": "^3.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/resp-modifier/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/resp-modifier/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dependencies": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "node_modules/restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dependencies": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
- "optional": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/retry-request": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz",
- "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==",
- "dependencies": {
- "debug": "^4.1.1",
- "extend": "^3.0.2"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/router": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/router/-/router-1.3.5.tgz",
- "integrity": "sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g==",
- "dependencies": {
- "array-flatten": "3.0.0",
- "debug": "2.6.9",
- "methods": "~1.1.2",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "setprototypeof": "1.2.0",
- "utils-merge": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/router/node_modules/array-flatten": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz",
- "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA=="
- },
- "node_modules/router/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/router/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/router/node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "node_modules/rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "engines": {
- "node": "6.* || >= 7.*"
- }
- },
- "node_modules/run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
- },
- "node_modules/rxjs": {
- "version": "5.5.12",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
- "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
- "dependencies": {
- "symbol-observable": "1.0.1"
- },
- "engines": {
- "npm": ">=2.0.0"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/sass": {
- "version": "1.35.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz",
- "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==",
- "dependencies": {
- "chokidar": ">=3.0.0 <4.0.0"
- },
- "bin": {
- "sass": "sass.js"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/scheduler": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
- "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "node_modules/section-matter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
- "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
- "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w="
- },
- "node_modules/semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
- "dependencies": {
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/semver-diff/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/send/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/send/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "node_modules/send/node_modules/statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
- "dependencies": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-index/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/serve-index/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-index/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "node_modules/serve-index/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/serve-index/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "node_modules/serve-index/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/server-destroy": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
- "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0="
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
- },
- "node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/sigmund": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
- },
- "node_modules/signal-exit": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
- "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q=="
- },
- "node_modules/simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
- "dependencies": {
- "is-arrayish": "^0.3.1"
- }
- },
- "node_modules/simple-swizzle/node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
- },
- "node_modules/slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/slugify": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz",
- "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/socket.io": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz",
- "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==",
- "dependencies": {
- "debug": "~4.1.0",
- "engine.io": "~3.5.0",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.4.0",
- "socket.io-parser": "~3.4.0"
- }
- },
- "node_modules/socket.io-adapter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
- "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
- },
- "node_modules/socket.io-client": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
- "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
- "dependencies": {
- "backo2": "1.0.2",
- "component-bind": "1.0.0",
- "component-emitter": "~1.3.0",
- "debug": "~3.1.0",
- "engine.io-client": "~3.5.0",
- "has-binary2": "~1.0.2",
- "indexof": "0.0.1",
- "parseqs": "0.0.6",
- "parseuri": "0.0.6",
- "socket.io-parser": "~3.3.0",
- "to-array": "0.1.4"
- }
- },
- "node_modules/socket.io-client/node_modules/debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/socket.io-client/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/socket.io-client/node_modules/socket.io-parser": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
- "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
- "dependencies": {
- "component-emitter": "~1.3.0",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
- }
- },
- "node_modules/socket.io-parser": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
- "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
- "dependencies": {
- "component-emitter": "1.2.1",
- "debug": "~4.1.0",
- "isarray": "2.0.1"
- }
- },
- "node_modules/socket.io-parser/node_modules/component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
- },
- "node_modules/socket.io-parser/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/socket.io/node_modules/debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/socks": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz",
- "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==",
- "dependencies": {
- "ip": "^1.1.5",
- "smart-buffer": "^4.1.0"
- },
- "engines": {
- "node": ">= 10.13.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/socks-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==",
- "dependencies": {
- "agent-base": "^6.0.2",
- "debug": "4",
- "socks": "^2.3.3"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
- "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA=="
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "node_modules/sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ssri": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
- "optional": true,
- "dependencies": {
- "minipass": "^3.1.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
- },
- "node_modules/stream-throttle": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
- "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=",
- "dependencies": {
- "commander": "^2.2.0",
- "limiter": "^1.0.5"
- },
- "bin": {
- "throttleproxy": "bin/throttleproxy.js"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/stream-throttle/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/string-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
- "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
- "dependencies": {
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/string-length/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/string-length/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string.prototype.padend": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz",
- "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-bom-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
- "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/superstatic": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-7.1.0.tgz",
- "integrity": "sha512-yBU8iw07nM3Bu4jFc8lnKwLey0cj61OaGmFJZcYC2X+kEpXVmXzERJ3OTAHZAESe1OTeNIuWadt81U5IULGGAA==",
- "dependencies": {
- "basic-auth-connect": "^1.0.0",
- "chalk": "^1.1.3",
- "compare-semver": "^1.0.0",
- "compression": "^1.7.0",
- "connect": "^3.6.2",
- "destroy": "^1.0.4",
- "fast-url-parser": "^1.1.3",
- "fs-extra": "^8.1.0",
- "glob-slasher": "^1.0.1",
- "home-dir": "^1.0.0",
- "is-url": "^1.2.2",
- "join-path": "^1.1.1",
- "lodash": "^4.17.19",
- "mime-types": "^2.1.16",
- "minimatch": "^3.0.4",
- "morgan": "^1.8.2",
- "nash": "^3.0.0",
- "on-finished": "^2.2.0",
- "on-headers": "^1.0.0",
- "path-to-regexp": "^1.8.0",
- "router": "^1.3.1",
- "rsvp": "^4.8.5",
- "string-length": "^1.0.0",
- "update-notifier": "^4.1.1"
- },
- "bin": {
- "superstatic": "bin/server"
- },
- "engines": {
- "node": ">= 8.6.0"
- },
- "optionalDependencies": {
- "re2": "^1.15.8"
- }
- },
- "node_modules/superstatic/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/superstatic/node_modules/ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/superstatic/node_modules/boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/superstatic/node_modules/boxen/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/superstatic/node_modules/boxen/node_modules/chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/superstatic/node_modules/boxen/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/superstatic/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/superstatic/node_modules/global-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
- "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
- "dependencies": {
- "ini": "1.3.7"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/superstatic/node_modules/ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ=="
- },
- "node_modules/superstatic/node_modules/is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
- "dependencies": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/superstatic/node_modules/is-npm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
- "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/superstatic/node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/superstatic/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "node_modules/superstatic/node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/superstatic/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/superstatic/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/superstatic/node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/superstatic/node_modules/update-notifier": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
- "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
- "dependencies": {
- "boxen": "^4.2.0",
- "chalk": "^3.0.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^4.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/yeoman/update-notifier?sponsor=1"
- }
- },
- "node_modules/superstatic/node_modules/update-notifier/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/superstatic/node_modules/update-notifier/node_modules/chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/superstatic/node_modules/update-notifier/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-hyperlinks": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz",
- "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==",
- "dependencies": {
- "has-flag": "^2.0.0",
- "supports-color": "^5.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-hyperlinks/node_modules/has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/supports-hyperlinks/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-hyperlinks/node_modules/supports-color/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/symbol-observable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
- "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tar": {
- "version": "4.4.19",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz",
- "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==",
- "dependencies": {
- "chownr": "^1.1.4",
- "fs-minipass": "^1.2.7",
- "minipass": "^2.9.0",
- "minizlib": "^1.3.3",
- "mkdirp": "^0.5.5",
- "safe-buffer": "^5.2.1",
- "yallist": "^3.1.1"
- },
- "engines": {
- "node": ">=4.5"
- }
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tar/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
- },
- "node_modules/tar/node_modules/fs-minipass": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
- "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
- "dependencies": {
- "minipass": "^2.6.0"
- }
- },
- "node_modules/tar/node_modules/minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "dependencies": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "node_modules/tar/node_modules/minizlib": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
- "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
- "dependencies": {
- "minipass": "^2.9.0"
- }
- },
- "node_modules/tar/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/tar/node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "node_modules/tcp-port-used": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz",
- "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==",
- "dependencies": {
- "debug": "4.3.1",
- "is2": "^2.0.6"
- }
- },
- "node_modules/tcp-port-used/node_modules/debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/text-hex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
- },
- "node_modules/tfunk": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz",
- "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==",
- "dependencies": {
- "chalk": "^1.1.3",
- "dlv": "^1.1.3"
- }
- },
- "node_modules/tfunk/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tfunk/node_modules/ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tfunk/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tfunk/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tfunk/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "node_modules/through2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz",
- "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=",
- "dependencies": {
- "readable-stream": "~2.0.0",
- "xtend": "~4.0.0"
- }
- },
- "node_modules/through2/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/through2/node_modules/process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
- },
- "node_modules/through2/node_modules/readable-stream": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
- "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "~1.0.0",
- "process-nextick-args": "~1.0.6",
- "string_decoder": "~0.10.x",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/through2/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- },
- "node_modules/time-require": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/time-require/-/time-require-0.1.2.tgz",
- "integrity": "sha1-+eEss3D8JgXhFARYK6VO9corLZg=",
- "dependencies": {
- "chalk": "^0.4.0",
- "date-time": "^0.1.1",
- "pretty-ms": "^0.2.1",
- "text-table": "^0.2.0"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/time-require/node_modules/ansi-styles": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
- "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/time-require/node_modules/chalk": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
- "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
- "dependencies": {
- "ansi-styles": "~1.0.0",
- "has-color": "~0.1.0",
- "strip-ansi": "~0.1.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/time-require/node_modules/strip-ansi": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
- "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=",
- "bin": {
- "strip-ansi": "cli.js"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/timers-ext": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
- "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
- "dependencies": {
- "es5-ext": "~0.10.46",
- "next-tick": "1"
- }
- },
- "node_modules/tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dependencies": {
- "os-tmpdir": "~1.0.2"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/to-array": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/token-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
- "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
- },
- "node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/tough-cookie/node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/toxic": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz",
- "integrity": "sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==",
- "dependencies": {
- "lodash": "^4.17.10"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
- },
- "node_modules/traverse": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
- "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/triple-beam": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
- "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
- },
- "node_modules/tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
- },
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- },
- "node_modules/tweetsodium": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/tweetsodium/-/tweetsodium-0.0.5.tgz",
- "integrity": "sha512-T3aXZtx7KqQbutTtBfn+P5By3HdBuB1eCoGviIrRJV2sXeToxv2X2cv5RvYqgG26PSnN5m3fYixds22Gkfd11w==",
- "dependencies": {
- "blakejs": "^1.1.0",
- "tweetnacl": "^1.0.1"
- }
- },
- "node_modules/tweetsodium/node_modules/tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
- },
- "node_modules/type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
- },
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
- "node_modules/ua-parser-js": {
- "version": "0.7.28",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
- "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/ua-parser-js"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/faisalman"
- }
- ],
- "engines": {
- "node": "*"
- }
- },
- "node_modules/uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
- },
- "node_modules/uglify-js": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz",
- "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==",
- "optional": true,
- "bin": {
- "uglifyjs": "bin/uglifyjs"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/unc-path-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "optional": true,
- "dependencies": {
- "unique-slug": "^2.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "optional": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- }
- },
- "node_modules/unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dependencies": {
- "crypto-random-string": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/universal-analytics": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz",
- "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==",
- "dependencies": {
- "debug": "^4.1.1",
- "request": "^2.88.2",
- "uuid": "^3.0.0"
- }
- },
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/unorm": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
- "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/unzipper": {
- "version": "0.10.11",
- "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
- "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
- "dependencies": {
- "big-integer": "^1.6.17",
- "binary": "~0.3.0",
- "bluebird": "~3.4.1",
- "buffer-indexof-polyfill": "~1.0.0",
- "duplexer2": "~0.1.4",
- "fstream": "^1.0.12",
- "graceful-fs": "^4.2.2",
- "listenercount": "~1.0.1",
- "readable-stream": "~2.3.6",
- "setimmediate": "~1.0.4"
- }
- },
- "node_modules/unzipper/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/unzipper/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/unzipper/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/update-notifier": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
- "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
- "dependencies": {
- "boxen": "^5.0.0",
- "chalk": "^4.1.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.4.0",
- "is-npm": "^5.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.1.0",
- "pupa": "^2.1.1",
- "semver": "^7.3.4",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/yeoman/update-notifier?sponsor=1"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/uri-js/node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/url-join": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz",
- "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g="
- },
- "node_modules/url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "dependencies": {
- "prepend-http": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/uslug": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/uslug/-/uslug-1.0.4.tgz",
- "integrity": "sha1-uaIvCRTgqGFAYz2swwLl9PpFBnc=",
- "dependencies": {
- "unorm": ">= 1.0.0"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/valid-url": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
- "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA="
- },
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/void-elements": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
- "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "node_modules/wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "optional": true,
- "dependencies": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "node_modules/wide-align/node_modules/ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "optional": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/wide-align/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "optional": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/wide-align/node_modules/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "optional": true,
- "dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/wide-align/node_modules/strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "optional": true,
- "dependencies": {
- "ansi-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dependencies": {
- "string-width": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/winston": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
- "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==",
- "dependencies": {
- "@dabh/diagnostics": "^2.0.2",
- "async": "^3.1.0",
- "is-stream": "^2.0.0",
- "logform": "^2.2.0",
- "one-time": "^1.0.0",
- "readable-stream": "^3.4.0",
- "stack-trace": "0.0.x",
- "triple-beam": "^1.3.0",
- "winston-transport": "^4.4.0"
- },
- "engines": {
- "node": ">= 6.4.0"
- }
- },
- "node_modules/winston-transport": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
- "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
- "dependencies": {
- "readable-stream": "^2.3.7",
- "triple-beam": "^1.2.0"
- },
- "engines": {
- "node": ">= 6.4.0"
- }
- },
- "node_modules/winston-transport/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/winston-transport/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/winston-transport/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/winston/node_modules/async": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz",
- "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg=="
- },
- "node_modules/with": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
- "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
- "dependencies": {
- "@babel/parser": "^7.9.6",
- "@babel/types": "^7.9.6",
- "assert-never": "^1.2.1",
- "babel-walk": "3.0.0-canary-5"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
- },
- "node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "node_modules/ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/xmlhttprequest-ssl": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
- "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/xregexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
- "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yeast": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
- },
- "node_modules/zip-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
- "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==",
- "dependencies": {
- "archiver-utils": "^2.1.0",
- "compress-commons": "^4.1.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">= 10"
- }
- }
- },
- "dependencies": {
- "@11ty/dependency-tree": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-1.0.0.tgz",
- "integrity": "sha512-2FWYlkphQ/83MG7b9qqBJfJJ0K9zupNz/6n4EdDuNLw6hQHGp4Sp4UMDRyBvA/xCTYDBaPSuSjHuu45tSujegg=="
- },
- "@11ty/eleventy": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.12.1.tgz",
- "integrity": "sha512-YGG1Vk0IPXsExSAwIyv6zccxxlaxXLb4PvO/G+SW66Dsz2l1ZSObJuukVTLc6iMpqZCS+LZQNXnaqG9PuRmy7w==",
- "requires": {
- "@11ty/dependency-tree": "^1.0.0",
- "browser-sync": "^2.26.14",
- "chalk": "^4.1.0",
- "chokidar": "^3.5.1",
- "debug": "^4.3.1",
- "dependency-graph": "^0.11.0",
- "ejs": "^2.7.4",
- "fast-glob": "^3.2.5",
- "fs-extra": "^8.1.0",
- "gray-matter": "^4.0.2",
- "hamljs": "^0.6.2",
- "handlebars": "^4.7.7",
- "javascript-stringify": "^2.0.1",
- "liquidjs": "^6.4.3",
- "lodash": "^4.17.21",
- "luxon": "^1.26.0",
- "markdown-it": "^10.0.0",
- "minimist": "^1.2.5",
- "moo": "^0.5.1",
- "multimatch": "^4.0.0",
- "mustache": "^2.3.2",
- "normalize-path": "^3.0.0",
- "nunjucks": "^3.2.3",
- "parse-filepath": "^1.0.2",
- "please-upgrade-node": "^3.2.0",
- "pretty": "^2.0.0",
- "pug": "^3.0.2",
- "recursive-copy": "^2.0.11",
- "semver": "^7.3.4",
- "slugify": "^1.4.7",
- "time-require": "^0.1.2",
- "valid-url": "^1.0.9"
- }
- },
- "@algolia/autocomplete-core": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.2.tgz",
- "integrity": "sha512-JOQaURze45qVa8OOFDh+ozj2a/ObSRsVyz6Zd0aiBeej+RSTqrr1hDVpGNbbXYLW26G5ujuc9QIdH+rBHn95nw==",
- "requires": {
- "@algolia/autocomplete-shared": "1.2.2"
- }
- },
- "@algolia/autocomplete-preset-algolia": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.2.tgz",
- "integrity": "sha512-AZkh+bAMaJDzMZTelFOXJTJqkp5VPGH8W3n0B+Ggce7DdozlMRsDLguKTCQAkZ0dJ1EbBPyFL5ztL/JImB137Q==",
- "requires": {
- "@algolia/autocomplete-shared": "1.2.2"
- }
- },
- "@algolia/autocomplete-shared": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.2.tgz",
- "integrity": "sha512-mLTl7d2C1xVVazHt/bqh9EE/u2lbp5YOxLDdcjILXmUqOs5HH1D4SuySblXaQG1uf28FhTqMGp35qE5wJQnqAw=="
- },
- "@algolia/cache-browser-local-storage": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.11.0.tgz",
- "integrity": "sha512-4sr9vHIG1fVA9dONagdzhsI/6M5mjs/qOe2xUP0yBmwsTsuwiZq3+Xu6D3dsxsuFetcJgC6ydQoCW8b7fDJHYQ==",
- "requires": {
- "@algolia/cache-common": "4.11.0"
- }
- },
- "@algolia/cache-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.11.0.tgz",
- "integrity": "sha512-lODcJRuPXqf+6mp0h6bOxPMlbNoyn3VfjBVcQh70EDP0/xExZbkpecgHyyZK4kWg+evu+mmgvTK3GVHnet/xKw=="
- },
- "@algolia/cache-in-memory": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.11.0.tgz",
- "integrity": "sha512-aBz+stMSTBOBaBEQ43zJXz2DnwS7fL6dR0e2myehAgtfAWlWwLDHruc/98VOy1ZAcBk1blE2LCU02bT5HekGxQ==",
- "requires": {
- "@algolia/cache-common": "4.11.0"
- }
- },
- "@algolia/client-account": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.11.0.tgz",
- "integrity": "sha512-jwmFBoUSzoMwMqgD3PmzFJV/d19p1RJXB6C1ADz4ju4mU7rkaQLtqyZroQpheLoU5s5Tilmn/T8/0U2XLoJCRQ==",
- "requires": {
- "@algolia/client-common": "4.11.0",
- "@algolia/client-search": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "@algolia/client-analytics": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.11.0.tgz",
- "integrity": "sha512-v5U9585aeEdYml7JqggHAj3E5CQ+jPwGVztPVhakBk8H/cmLyPS2g8wvmIbaEZCHmWn4TqFj3EBHVYxAl36fSA==",
- "requires": {
- "@algolia/client-common": "4.11.0",
- "@algolia/client-search": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "@algolia/client-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.11.0.tgz",
- "integrity": "sha512-Qy+F+TZq12kc7tgfC+FM3RvYH/Ati7sUiUv/LkvlxFwNwNPwWGoZO81AzVSareXT/ksDDrabD4mHbdTbBPTRmQ==",
- "requires": {
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "@algolia/client-personalization": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.11.0.tgz",
- "integrity": "sha512-mI+X5IKiijHAzf9fy8VSl/GTT67dzFDnJ0QAM8D9cMPevnfX4U72HRln3Mjd0xEaYUOGve8TK/fMg7d3Z5yG6g==",
- "requires": {
- "@algolia/client-common": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "@algolia/client-search": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.11.0.tgz",
- "integrity": "sha512-iovPLc5YgiXBdw2qMhU65sINgo9umWbHFzInxoNErWnYoTQWfXsW6P54/NlKx5uscoLVjSf+5RUWwFu5BX+lpw==",
- "requires": {
- "@algolia/client-common": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "@algolia/logger-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.11.0.tgz",
- "integrity": "sha512-pRMJFeOY8hoWKIxWuGHIrqnEKN/kqKh7UilDffG/+PeEGxBuku+Wq5CfdTFG0C9ewUvn8mAJn5BhYA5k8y0Jqg=="
- },
- "@algolia/logger-console": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.11.0.tgz",
- "integrity": "sha512-wXztMk0a3VbNmYP8Kpc+F7ekuvaqZmozM2eTLok0XIshpAeZ/NJDHDffXK2Pw+NF0wmHqurptLYwKoikjBYvhQ==",
- "requires": {
- "@algolia/logger-common": "4.11.0"
- }
- },
- "@algolia/requester-browser-xhr": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.11.0.tgz",
- "integrity": "sha512-Fp3SfDihAAFR8bllg8P5ouWi3+qpEVN5e7hrtVIYldKBOuI/qFv80Zv/3/AMKNJQRYglS4zWyPuqrXm58nz6KA==",
- "requires": {
- "@algolia/requester-common": "4.11.0"
- }
- },
- "@algolia/requester-common": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.11.0.tgz",
- "integrity": "sha512-+cZGe/9fuYgGuxjaBC+xTGBkK7OIYdfapxhfvEf03dviLMPmhmVYFJtJlzAjQ2YmGDJpHrGgAYj3i/fbs8yhiA=="
- },
- "@algolia/requester-node-http": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.11.0.tgz",
- "integrity": "sha512-qJIk9SHRFkKDi6dMT9hba8X1J1z92T5AZIgl+tsApjTGIRQXJLTIm+0q4yOefokfu4CoxYwRZ9QAq+ouGwfeOg==",
- "requires": {
- "@algolia/requester-common": "4.11.0"
- }
- },
- "@algolia/transporter": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.11.0.tgz",
- "integrity": "sha512-k4dyxiaEfYpw4UqybK9q7lrFzehygo6KV3OCYJMMdX0IMWV0m4DXdU27c1zYRYtthaFYaBzGF4Kjcl8p8vxCKw==",
- "requires": {
- "@algolia/cache-common": "4.11.0",
- "@algolia/logger-common": "4.11.0",
- "@algolia/requester-common": "4.11.0"
- }
- },
- "@apidevtools/json-schema-ref-parser": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz",
- "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==",
- "requires": {
- "@jsdevtools/ono": "^7.1.3",
- "@types/json-schema": "^7.0.6",
- "call-me-maybe": "^1.0.1",
- "js-yaml": "^4.1.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "requires": {
- "argparse": "^2.0.1"
- }
- }
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
- },
- "@babel/parser": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz",
- "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g=="
- },
- "@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.14.9",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@dabh/diagnostics": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
- "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
- "requires": {
- "colorspace": "1.1.x",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
- }
- },
- "@docsearch/css": {
- "version": "3.0.0-alpha.41",
- "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.41.tgz",
- "integrity": "sha512-AP1jqcF/9jCrm4s0lcES3QAtHueyipKjd14L/pguk0CZYK7uI7hC0FWodmRmrgK3/HST9jiHa1waUMR6ZYedlQ=="
- },
- "@docsearch/js": {
- "version": "3.0.0-alpha.41",
- "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.41.tgz",
- "integrity": "sha512-dD9r+ygmzJEE50wtnRUs6I7TMD4ui7igEQlt74jZsn0SUPk6AlIP2ldII8brJHr0I4qs4OzlyrvV6ikAqjR6sw==",
- "requires": {
- "@docsearch/react": "3.0.0-alpha.41",
- "preact": "^10.0.0"
- }
- },
- "@docsearch/react": {
- "version": "3.0.0-alpha.41",
- "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.41.tgz",
- "integrity": "sha512-UL0Gdter/NUea04lGuBGH0GzQ2/2q/hBfn7Rjo71rRKbjtfkQCM92leJ9tZ+9j9sFLoyuHb9XMm/B8vCjWwTEg==",
- "requires": {
- "@algolia/autocomplete-core": "1.2.2",
- "@algolia/autocomplete-preset-algolia": "1.2.2",
- "@docsearch/css": "3.0.0-alpha.41",
- "algoliasearch": "^4.0.0"
- }
- },
- "@gar/promisify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz",
- "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==",
- "optional": true
- },
- "@google-cloud/paginator": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.6.tgz",
- "integrity": "sha512-XCTm/GfQIlc1ZxpNtTSs/mnZxC2cePNhxU3X8EzHXKIJ2JFncmJj2Fcd2IP+gbmZaSZnY0juFxbUCkIeuu/2eQ==",
- "requires": {
- "arrify": "^2.0.0",
- "extend": "^3.0.2"
- }
- },
- "@google-cloud/precise-date": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.4.tgz",
- "integrity": "sha512-nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg=="
- },
- "@google-cloud/projectify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz",
- "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ=="
- },
- "@google-cloud/promisify": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz",
- "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA=="
- },
- "@google-cloud/pubsub": {
- "version": "2.17.0",
- "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.17.0.tgz",
- "integrity": "sha512-9Xya69A5VAYVEGf651jy071RuBIjv+jpyozSc3j8V21LIiKRr9x+KyplHcLTYWdj+uXbP9cry8Ck8JEFc7GiqQ==",
- "requires": {
- "@google-cloud/paginator": "^3.0.0",
- "@google-cloud/precise-date": "^2.0.0",
- "@google-cloud/projectify": "^2.0.0",
- "@google-cloud/promisify": "^2.0.0",
- "@opentelemetry/api": "^1.0.0",
- "@opentelemetry/semantic-conventions": "^0.24.0",
- "@types/duplexify": "^3.6.0",
- "@types/long": "^4.0.0",
- "arrify": "^2.0.0",
- "extend": "^3.0.2",
- "google-auth-library": "^7.0.0",
- "google-gax": "^2.24.1",
- "is-stream-ended": "^0.1.4",
- "lodash.snakecase": "^4.1.1",
- "p-defer": "^3.0.0"
- },
- "dependencies": {
- "google-auth-library": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.9.2.tgz",
- "integrity": "sha512-HjxbJt660a+YUTYAgYor87JCuBZvjUSNBExk4bXTEaMuCn8IHSDeHmFxKqThuDPrLCiKJp8blk/Ze8f7SI4N6g==",
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
- "@grpc/grpc-js": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz",
- "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==",
- "requires": {
- "@types/node": ">=12.12.47"
- }
- },
- "@grpc/proto-loader": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.5.tgz",
- "integrity": "sha512-GZdzyVQI1Bln/kCzIYgTKu+rQJ5dno0gVrfmLe4jqQu7T2e7svSwJzpCBqVU5hhBSJP3peuPjOMWsj5GR61YmQ==",
- "requires": {
- "@types/long": "^4.0.1",
- "lodash.camelcase": "^4.3.0",
- "long": "^4.0.0",
- "protobufjs": "^6.10.0",
- "yargs": "^16.1.1"
- },
- "dependencies": {
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
- }
- }
- },
- "@jsdevtools/ono": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@npmcli/fs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz",
- "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==",
- "optional": true,
- "requires": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
- }
- },
- "@npmcli/move-file": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
- "optional": true,
- "requires": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "@opentelemetry/api": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz",
- "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ=="
- },
- "@opentelemetry/semantic-conventions": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-0.24.0.tgz",
- "integrity": "sha512-a/szuMQV0Quy0/M7kKdglcbRSoorleyyOwbTNNJ32O+RBN766wbQlMTvdimImTmwYWGr+NJOni1EcC242WlRcA=="
- },
- "@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
- },
- "@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
- },
- "@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
- },
- "@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
- },
- "@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
- "requires": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
- },
- "@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
- },
- "@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
- },
- "@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
- },
- "@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
- },
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
- },
- "@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
- },
- "@types/archiver": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz",
- "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==",
- "requires": {
- "@types/glob": "*"
- }
- },
- "@types/duplexify": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz",
- "integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==",
- "requires": {
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
- "@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ=="
- },
- "@types/linkify-it": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz",
- "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==",
- "peer": true
- },
- "@types/long": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
- "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
- },
- "@types/markdown-it": {
- "version": "12.2.3",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
- "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
- "peer": true,
- "requires": {
- "@types/linkify-it": "*",
- "@types/mdurl": "*"
- }
- },
- "@types/mdurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
- "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==",
- "peer": true
- },
- "@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
- },
- "@types/node": {
- "version": "16.9.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz",
- "integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ=="
- },
- "@types/prop-types": {
- "version": "15.7.4",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
- "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
- "peer": true
- },
- "@types/react": {
- "version": "17.0.37",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz",
- "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==",
- "peer": true,
- "requires": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "@types/scheduler": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
- "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
- "peer": true
- },
- "a-sync-waterfall": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
- "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA=="
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
- },
- "after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "requires": {
- "debug": "4"
- }
- },
- "agentkeepalive": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz",
- "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==",
- "optional": true,
- "requires": {
- "debug": "^4.1.0",
- "depd": "^1.1.2",
- "humanize-ms": "^1.2.1"
- }
- },
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "optional": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "algoliasearch": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.11.0.tgz",
- "integrity": "sha512-IXRj8kAP2WrMmj+eoPqPc6P7Ncq1yZkFiyDrjTBObV1ADNL8Z/KdZ+dWC5MmYcBLAbcB/mMCpak5N/D1UIZvsA==",
- "requires": {
- "@algolia/cache-browser-local-storage": "4.11.0",
- "@algolia/cache-common": "4.11.0",
- "@algolia/cache-in-memory": "4.11.0",
- "@algolia/client-account": "4.11.0",
- "@algolia/client-analytics": "4.11.0",
- "@algolia/client-common": "4.11.0",
- "@algolia/client-personalization": "4.11.0",
- "@algolia/client-search": "4.11.0",
- "@algolia/logger-common": "4.11.0",
- "@algolia/logger-console": "4.11.0",
- "@algolia/requester-browser-xhr": "4.11.0",
- "@algolia/requester-common": "4.11.0",
- "@algolia/requester-node-http": "4.11.0",
- "@algolia/transporter": "4.11.0"
- }
- },
- "ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "requires": {
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "ansicolors": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
- "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk="
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "optional": true
- },
- "archiver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz",
- "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==",
- "requires": {
- "archiver-utils": "^2.1.0",
- "async": "^3.2.0",
- "buffer-crc32": "^0.2.1",
- "readable-stream": "^3.6.0",
- "readdir-glob": "^1.0.0",
- "tar-stream": "^2.2.0",
- "zip-stream": "^4.1.0"
- },
- "dependencies": {
- "async": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz",
- "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg=="
- }
- }
- },
- "archiver-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
- "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
- "requires": {
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.0",
- "lazystream": "^1.0.0",
- "lodash.defaults": "^4.2.0",
- "lodash.difference": "^4.5.0",
- "lodash.flatten": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.union": "^4.6.0",
- "normalize-path": "^3.0.0",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "are-we-there-yet": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
- "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "optional": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg=="
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
- },
- "arraybuffer.slice": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
- },
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
- },
- "as-array": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz",
- "integrity": "sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc="
- },
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-never": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
- "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "ast-types": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
- "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
- "requires": {
- "tslib": "^2.0.1"
- }
- },
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
- },
- "async-each-series": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
- "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
- "requires": {
- "follow-redirects": "^1.14.0"
- }
- },
- "babel-walk": {
- "version": "3.0.0-canary-5",
- "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
- "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
- "requires": {
- "@babel/types": "^7.9.6"
- }
- },
- "backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "base64-arraybuffer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
- "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "base64id": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
- },
- "basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "basic-auth-connect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz",
- "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI="
- },
- "batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "big-integer": {
- "version": "1.6.49",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz",
- "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw=="
- },
- "bignumber.js": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
- "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA=="
- },
- "binary": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
- "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
- "requires": {
- "buffers": "~0.1.1",
- "chainsaw": "~0.1.0"
- }
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
- },
- "bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "blakejs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz",
- "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg=="
- },
- "blob": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
- },
- "bluebird": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
- "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
- },
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
- },
- "raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- }
- }
- },
- "boxen": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- }
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-sync": {
- "version": "2.27.5",
- "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.5.tgz",
- "integrity": "sha512-0GMEPDqccbTxwYOUGCk5AZloDj9I/1eDZCLXUKXu7iBJPznGGOnMHs88mrhaFL0fTA0R23EmsXX9nLZP+k5YzA==",
- "requires": {
- "browser-sync-client": "^2.27.5",
- "browser-sync-ui": "^2.27.5",
- "bs-recipes": "1.3.4",
- "bs-snippet-injector": "^2.0.1",
- "chokidar": "^3.5.1",
- "connect": "3.6.6",
- "connect-history-api-fallback": "^1",
- "dev-ip": "^1.0.1",
- "easy-extender": "^2.3.4",
- "eazy-logger": "3.1.0",
- "etag": "^1.8.1",
- "fresh": "^0.5.2",
- "fs-extra": "3.0.1",
- "http-proxy": "^1.18.1",
- "immutable": "^3",
- "localtunnel": "^2.0.1",
- "micromatch": "^4.0.2",
- "opn": "5.3.0",
- "portscanner": "2.1.1",
- "qs": "6.2.3",
- "raw-body": "^2.3.2",
- "resp-modifier": "6.0.2",
- "rx": "4.1.0",
- "send": "0.16.2",
- "serve-index": "1.9.1",
- "serve-static": "1.13.2",
- "server-destroy": "1.0.1",
- "socket.io": "2.4.0",
- "ua-parser-js": "^0.7.28",
- "yargs": "^15.4.1"
- },
- "dependencies": {
- "fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^3.0.0",
- "universalify": "^0.1.0"
- }
- },
- "jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- }
- }
- },
- "browser-sync-client": {
- "version": "2.27.5",
- "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.5.tgz",
- "integrity": "sha512-l2jtf60/exv0fQiZkhi3z8RgexYYLGS7DVDnyepkrp+oFAPlKW69daL6NrVSgrwu6lzSTCCTAiPXnUSrQ57e/Q==",
- "requires": {
- "etag": "1.8.1",
- "fresh": "0.5.2",
- "mitt": "^1.1.3",
- "rxjs": "^5.5.6"
- }
- },
- "browser-sync-ui": {
- "version": "2.27.5",
- "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.5.tgz",
- "integrity": "sha512-KxBJhQ6XNbQ8w8UlkPa9/J5R0nBHgHuJUtDpEXQx1jBapDy32WGzD0NENDozP4zGNvJUgZk3N80hqB7YCieC3g==",
- "requires": {
- "async-each-series": "0.1.1",
- "connect-history-api-fallback": "^1",
- "immutable": "^3",
- "server-destroy": "1.0.1",
- "socket.io-client": "^2.4.0",
- "stream-throttle": "^0.1.3"
- }
- },
- "bs-recipes": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
- "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU="
- },
- "bs-snippet-injector": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz",
- "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU="
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
- },
- "buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
- },
- "buffer-indexof-polyfill": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
- "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="
- },
- "buffers": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
- "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
- },
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
- },
- "cacache": {
- "version": "15.3.0",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
- "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
- "optional": true,
- "requires": {
- "@npmcli/fs": "^1.0.0",
- "@npmcli/move-file": "^1.0.1",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "infer-owner": "^1.0.4",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.1",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^1.0.3",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^8.0.1",
- "tar": "^6.0.2",
- "unique-filename": "^1.1.1"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "optional": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "optional": true,
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- }
- }
- },
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
- }
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "cardinal": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
- "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=",
- "requires": {
- "ansicolors": "~0.3.2",
- "redeyed": "~2.1.0"
- }
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "chainsaw": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
- "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
- "requires": {
- "traverse": ">=0.3.0 <0.4"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "character-parser": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
- "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
- "requires": {
- "is-regex": "^1.0.3"
- }
- },
- "chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
- },
- "chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "optional": true
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
- },
- "cjson": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz",
- "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=",
- "requires": {
- "json-parse-helpfulerror": "^1.0.3"
- }
- },
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "optional": true
- },
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw=="
- },
- "cli-color": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz",
- "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==",
- "requires": {
- "ansi-regex": "^2.1.1",
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "memoizee": "^0.4.14",
- "timers-ext": "^0.1.5"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- }
- }
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-spinners": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz",
- "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q=="
- },
- "cli-table": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz",
- "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==",
- "requires": {
- "colors": "1.0.3"
- }
- },
- "cli-width": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
- "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "optional": true
- },
- "color": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
- "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
- "requires": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.2"
- },
- "dependencies": {
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- }
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "color-string": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
- "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
- "requires": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
- },
- "colorspace": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
- "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
- "requires": {
- "color": "3.0.x",
- "text-hex": "1.0.x"
- }
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="
- },
- "compare-semver": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/compare-semver/-/compare-semver-1.1.0.tgz",
- "integrity": "sha1-fAp5onu4C2xplERfgpWCWdPQIVM=",
- "requires": {
- "semver": "^5.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
- },
- "component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
- },
- "compress-commons": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz",
- "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==",
- "requires": {
- "buffer-crc32": "^0.2.13",
- "crc32-stream": "^4.0.2",
- "normalize-path": "^3.0.0",
- "readable-stream": "^3.6.0"
- }
- },
- "compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "requires": {
- "mime-db": ">= 1.43.0 < 2"
- }
- },
- "compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "requires": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "condense-newlines": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz",
- "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=",
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-whitespace": "^0.3.0",
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "config-chain": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
- "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "requires": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- }
- },
- "connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
- "requires": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "connect-history-api-fallback": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
- "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "optional": true
- },
- "constantinople": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
- "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
- "requires": {
- "@babel/parser": "^7.6.0",
- "@babel/types": "^7.6.1"
- }
- },
- "content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
- "crc-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
- "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
- "requires": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- }
- },
- "crc32-stream": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz",
- "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==",
- "requires": {
- "crc-32": "^1.2.0",
- "readable-stream": "^3.4.0"
- }
- },
- "cross-env": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz",
- "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==",
- "requires": {
- "cross-spawn": "^6.0.5"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="
- },
- "csstype": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz",
- "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==",
- "peer": true
- },
- "csv-streamify": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/csv-streamify/-/csv-streamify-3.0.4.tgz",
- "integrity": "sha1-TLYUxX4/KZzKF7Y/3LStFnd39Ho=",
- "requires": {
- "through2": "2.0.1"
- }
- },
- "d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "requires": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "data-uri-to-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
- "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
- },
- "date-time": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/date-time/-/date-time-0.1.1.tgz",
- "integrity": "sha1-7S9tk9l5DOL9ZtW1/z7dW7y/Owc="
- },
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
- },
- "deep-freeze": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz",
- "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ="
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
- },
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "requires": {
- "clone": "^1.0.2"
- }
- },
- "defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "degenerator": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz",
- "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==",
- "requires": {
- "ast-types": "^0.13.2",
- "escodegen": "^1.8.1",
- "esprima": "^4.0.0"
- }
- },
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "requires": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "optional": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "dependency-graph": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg=="
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "dev-ip": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
- "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA="
- },
- "dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
- },
- "doctypes": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
- "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
- },
- "dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
- "dotenv": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
- "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w=="
- },
- "duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
- "requires": {
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
- },
- "duplexify": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
- "requires": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.0"
- }
- },
- "easy-extender": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
- "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "eazy-logger": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz",
- "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==",
- "requires": {
- "tfunk": "^4.0.0"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "editorconfig": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
- "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
- "requires": {
- "commander": "^2.19.0",
- "lru-cache": "^4.1.5",
- "semver": "^5.6.0",
- "sigmund": "^1.0.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "ejs": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
- "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "enabled": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "optional": true,
- "requires": {
- "iconv-lite": "^0.6.2"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- }
- }
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
- "once": "^1.4.0"
- }
- },
- "engine.io": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz",
- "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==",
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "debug": "~4.1.0",
- "engine.io-parser": "~2.2.0",
- "ws": "~7.4.2"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "engine.io-client": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz",
- "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==",
- "requires": {
- "component-emitter": "~1.3.0",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.2.0",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.6",
- "parseuri": "0.0.6",
- "ws": "~7.4.2",
- "xmlhttprequest-ssl": "~1.6.2",
- "yeast": "0.1.2"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "engine.io-parser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
- "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
- "requires": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.4",
- "blob": "0.0.5",
- "has-binary2": "~1.0.2"
- }
- },
- "entities": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
- "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ=="
- },
- "env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "optional": true
- },
- "err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "optional": true
- },
- "errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.18.6",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz",
- "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==",
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.4",
- "is-string": "^1.0.7",
- "object-inspect": "^1.11.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es5-ext": {
- "version": "0.10.53",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
- "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
- "requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.3",
- "next-tick": "~1.0.0"
- }
- },
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "requires": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
- }
- },
- "es6-weak-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
- "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.1"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
- },
- "escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q=="
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
- "eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
- "events-listener": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz",
- "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g=="
- },
- "exegesis": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-2.5.7.tgz",
- "integrity": "sha512-Y0gEY3hgoLa80aMUm8rhhlIW3/KWo4uqN5hKJqok2GLh3maZjRLRC+p0gj33Jw3upAOKOXeRgScT5rtRoMyxwQ==",
- "requires": {
- "@apidevtools/json-schema-ref-parser": "^9.0.3",
- "ajv": "^6.12.2",
- "body-parser": "^1.18.3",
- "content-type": "^1.0.4",
- "deep-freeze": "0.0.1",
- "events-listener": "^1.1.0",
- "glob": "^7.1.3",
- "json-ptr": "^2.2.0",
- "json-schema-traverse": "^1.0.0",
- "lodash": "^4.17.11",
- "openapi3-ts": "^2.0.1",
- "promise-breaker": "^5.0.0",
- "pump": "^3.0.0",
- "qs": "^6.6.0",
- "raw-body": "^2.3.3",
- "semver": "^7.0.0"
- },
- "dependencies": {
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
- "qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
- "requires": {
- "side-channel": "^1.0.4"
- }
- }
- }
- },
- "exegesis-express": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-2.0.1.tgz",
- "integrity": "sha512-8ORl1YRygYGPdR+zcClMqzaU+JQuvdNIw/s0RNwYluxNecEHkDEcXFmO6A5T79p7e48KI8iXJYt6KIn4Z9z4bg==",
- "requires": {
- "exegesis": "^2.5.7"
- }
- },
- "exit-code": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/exit-code/-/exit-code-1.0.2.tgz",
- "integrity": "sha1-zhZYEcnxF69qX4gpQLlq5/muzDQ="
- },
- "exit-on-epipe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
- },
- "express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- }
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
- },
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- }
- }
- },
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- }
- }
- },
- "ext": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.5.0.tgz",
- "integrity": "sha512-+ONcYoWj/SoQwUofMr94aGu05Ou4FepKi7N7b+O8T4jVfyIsZQV1/xeS8jpaBzF0csAk0KLXoHCxU7cKYZjo1Q==",
- "requires": {
- "type": "^2.5.0"
- },
- "dependencies": {
- "type": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
- "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw=="
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
- },
- "fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
- },
- "fast-text-encoding": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
- "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
- },
- "fast-url-parser": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
- "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=",
- "requires": {
- "punycode": "^1.3.2"
- }
- },
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fecha": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
- "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-uri-to-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
- "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg=="
- },
- "filesize": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz",
- "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ=="
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "firebase-tools": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-9.18.0.tgz",
- "integrity": "sha512-yth3C6ZdzkXbQVKgmrIYn/NBvkCnstEfsTsqvLUL+Mo0s5Cq+JR8A8DKLJHyWBrWjKkT5R9VfefnkhHCUrjRNw==",
- "requires": {
- "@google-cloud/pubsub": "^2.7.0",
- "@types/archiver": "^5.1.0",
- "abort-controller": "^3.0.0",
- "ajv": "^6.12.6",
- "archiver": "^5.0.0",
- "body-parser": "^1.19.0",
- "chokidar": "^3.0.2",
- "cjson": "^0.3.1",
- "cli-color": "^1.2.0",
- "cli-table": "^0.3.1",
- "commander": "^4.0.1",
- "configstore": "^5.0.1",
- "cors": "^2.8.5",
- "cross-env": "^5.1.3",
- "cross-spawn": "^7.0.1",
- "csv-streamify": "^3.0.4",
- "dotenv": "^6.1.0",
- "exegesis": "^2.5.7",
- "exegesis-express": "^2.0.0",
- "exit-code": "^1.0.2",
- "express": "^4.16.4",
- "filesize": "^6.1.0",
- "fs-extra": "^5.0.0",
- "glob": "^7.1.2",
- "google-auth-library": "^6.1.3",
- "inquirer": "~6.3.1",
- "js-yaml": "^3.13.1",
- "JSONStream": "^1.2.1",
- "jsonwebtoken": "^8.5.1",
- "leven": "^3.1.0",
- "lodash": "^4.17.21",
- "marked": "^0.7.0",
- "marked-terminal": "^3.3.0",
- "mime": "^2.5.2",
- "minimatch": "^3.0.4",
- "morgan": "^1.10.0",
- "node-fetch": "^2.6.1",
- "open": "^6.3.0",
- "ora": "^3.4.0",
- "portfinder": "^1.0.23",
- "progress": "^2.0.3",
- "proxy-agent": "^4.0.0",
- "request": "^2.87.0",
- "rimraf": "^3.0.0",
- "semver": "^5.7.1",
- "superstatic": "^7.1.0",
- "tar": "^4.3.0",
- "tcp-port-used": "^1.0.1",
- "tmp": "0.0.33",
- "triple-beam": "^1.3.0",
- "tweetsodium": "0.0.5",
- "universal-analytics": "^0.4.16",
- "unzipper": "^0.10.10",
- "update-notifier": "^5.1.0",
- "uuid": "^3.0.0",
- "winston": "^3.0.0",
- "winston-transport": "^4.4.0",
- "ws": "^7.2.3"
- },
- "dependencies": {
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "fs-extra": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
- "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "mime": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
- "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "flat-arguments": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/flat-arguments/-/flat-arguments-1.0.2.tgz",
- "integrity": "sha1-m6p4Ct8FAfKC1ybJxqA426ROp28=",
- "requires": {
- "array-flatten": "^1.0.0",
- "as-array": "^1.0.0",
- "lodash.isarguments": "^3.0.0",
- "lodash.isobject": "^3.0.0"
- },
- "dependencies": {
- "as-array": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/as-array/-/as-array-1.0.0.tgz",
- "integrity": "sha1-KKbu6qVynx9OyiBH316d4avaDtE=",
- "requires": {
- "lodash.isarguments": "2.4.x",
- "lodash.isobject": "^2.4.1",
- "lodash.values": "^2.4.1"
- },
- "dependencies": {
- "lodash.isarguments": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-2.4.1.tgz",
- "integrity": "sha1-STGpwIJTrfCRrnyhkiWKlzh27Mo="
- },
- "lodash.isobject": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
- "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
- "requires": {
- "lodash._objecttypes": "~2.4.1"
- }
- }
- }
- },
- "lodash.isobject": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
- "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0="
- }
- }
- },
- "fn.name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
- },
- "follow-redirects": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
- "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g=="
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
- },
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "optional": true
- },
- "fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
- "ftp": {
- "version": "0.3.10",
- "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz",
- "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=",
- "requires": {
- "readable-stream": "1.1.x",
- "xregexp": "2.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- }
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "gaxios": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
- "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
- "requires": {
- "abort-controller": "^3.0.0",
- "extend": "^3.0.2",
- "https-proxy-agent": "^5.0.0",
- "is-stream": "^2.0.0",
- "node-fetch": "^2.6.1"
- }
- },
- "gcp-metadata": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
- "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
- "requires": {
- "gaxios": "^4.0.0",
- "json-bigint": "^1.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- }
- },
- "get-uri": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz",
- "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==",
- "requires": {
- "@tootallnate/once": "1",
- "data-uri-to-buffer": "3",
- "debug": "4",
- "file-uri-to-path": "2",
- "fs-extra": "^8.1.0",
- "ftp": "^0.3.10"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "glob-slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz",
- "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U="
- },
- "glob-slasher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz",
- "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=",
- "requires": {
- "glob-slash": "^1.0.0",
- "lodash.isobject": "^2.4.1",
- "toxic": "^1.0.0"
- }
- },
- "global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
- "requires": {
- "ini": "2.0.0"
- },
- "dependencies": {
- "ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
- }
- }
- },
- "globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "requires": {
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
- }
- }
- },
- "google-auth-library": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
- "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
- "google-gax": {
- "version": "2.25.4",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.25.4.tgz",
- "integrity": "sha512-+Jd0FFOWyb8ieX53e6Sl5OYvHXoA1sWKfQ24ykR502NKgBTvPAh/RFcITihGePBJZ1E8pfh4MKWU0Sf+f1CK+A==",
- "requires": {
- "@grpc/grpc-js": "~1.3.0",
- "@grpc/proto-loader": "^0.6.1",
- "@types/long": "^4.0.0",
- "abort-controller": "^3.0.0",
- "duplexify": "^4.0.0",
- "fast-text-encoding": "^1.0.3",
- "google-auth-library": "^7.6.1",
- "is-stream-ended": "^0.1.4",
- "node-fetch": "^2.6.1",
- "object-hash": "^2.1.1",
- "proto3-json-serializer": "^0.1.1",
- "protobufjs": "6.11.2",
- "retry-request": "^4.0.0"
- },
- "dependencies": {
- "google-auth-library": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.9.2.tgz",
- "integrity": "sha512-HjxbJt660a+YUTYAgYor87JCuBZvjUSNBExk4bXTEaMuCn8IHSDeHmFxKqThuDPrLCiKJp8blk/Ze8f7SI4N6g==",
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
- "google-p12-pem": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz",
- "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==",
- "requires": {
- "node-forge": "^0.10.0"
- }
- },
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
- },
- "gray-matter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
- "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
- "requires": {
- "js-yaml": "^3.13.1",
- "kind-of": "^6.0.2",
- "section-matter": "^1.0.0",
- "strip-bom-string": "^1.0.0"
- }
- },
- "gtoken": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz",
- "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==",
- "requires": {
- "gaxios": "^4.0.0",
- "google-p12-pem": "^3.0.3",
- "jws": "^4.0.0"
- }
- },
- "hamljs": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz",
- "integrity": "sha1-e3EWz22+cnjkKz9u+HJaM+F3yOM="
- },
- "handlebars": {
- "version": "4.7.7",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
- "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
- "requires": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.0",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4",
- "wordwrap": "^1.0.0"
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "requires": {
- "ansi-regex": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- }
- }
- },
- "has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
- },
- "has-binary2": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "requires": {
- "isarray": "2.0.1"
- }
- },
- "has-color": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
- "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8="
- },
- "has-cors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
- },
- "has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "optional": true
- },
- "has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw=="
- },
- "home-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/home-dir/-/home-dir-1.0.0.tgz",
- "integrity": "sha1-KRfrRL3JByztqUJXlUOEfjAX/k4="
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
- "http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "dependencies": {
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- }
- }
- },
- "http-proxy": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
- "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "requires": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- }
- },
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
- "optional": true,
- "requires": {
- "ms": "^2.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
- "immutable": {
- "version": "3.8.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
- "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM="
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "optional": true
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
- },
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "optional": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
- },
- "inquirer": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz",
- "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==",
- "requires": {
- "ansi-escapes": "^3.2.0",
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^2.0.0",
- "lodash": "^4.17.11",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.4.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^5.1.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "rxjs": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- }
- }
- },
- "install-artifact-from-github": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz",
- "integrity": "sha512-3OxCPcY55XlVM3kkfIpeCgmoSKnMsz2A3Dbhsq0RXpIknKQmrX1YiznCeW9cD2ItFmDxziA3w6Eg8d80AoL3oA==",
- "optional": true
- },
- "internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "requires": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- }
- },
- "ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
- },
- "ip-regex": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q=="
- },
- "ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
- },
- "is-absolute": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
- "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
- "requires": {
- "is-relative": "^1.0.0",
- "is-windows": "^1.0.1"
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
- },
- "is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "requires": {
- "has-bigints": "^1.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w=="
- },
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-core-module": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
- "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-expression": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
- "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
- "requires": {
- "acorn": "^7.1.1",
- "object-assign": "^4.1.1"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-installed-globally": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
- "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
- "requires": {
- "global-dirs": "^3.0.0",
- "is-path-inside": "^3.0.2"
- },
- "dependencies": {
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
- }
- }
- },
- "is-lambda": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
- "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=",
- "optional": true
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
- },
- "is-npm": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
- "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA=="
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "is-number-like": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
- "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
- "requires": {
- "lodash.isfinite": "^3.3.2"
- }
- },
- "is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
- },
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
- },
- "is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
- "requires": {
- "is-path-inside": "^1.0.0"
- }
- },
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
- "is-promise": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
- },
- "is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-relative": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
- "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
- "requires": {
- "is-unc-path": "^1.0.0"
- }
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
- },
- "is-stream-ended": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
- "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw=="
- },
- "is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "is-unc-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
- "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
- "requires": {
- "unc-path-regex": "^0.1.2"
- }
- },
- "is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
- },
- "is-whitespace": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz",
- "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38="
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
- },
- "is-yarn-global": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
- "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw=="
- },
- "is2": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz",
- "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==",
- "requires": {
- "deep-is": "^0.1.3",
- "ip-regex": "^4.1.0",
- "is-url": "^1.2.4"
- }
- },
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "javascript-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
- "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="
- },
- "jju": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
- "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo="
- },
- "join-path": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/join-path/-/join-path-1.1.1.tgz",
- "integrity": "sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU=",
- "requires": {
- "as-array": "^2.0.0",
- "url-join": "0.0.1",
- "valid-url": "^1"
- }
- },
- "js-beautify": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
- "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==",
- "requires": {
- "config-chain": "^1.1.12",
- "editorconfig": "^0.15.3",
- "glob": "^7.1.3",
- "nopt": "^5.0.0"
- }
- },
- "js-stringify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
- "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "peer": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "json-bigint": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
- "requires": {
- "bignumber.js": "^9.0.0"
- }
- },
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
- },
- "json-parse-helpfulerror": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
- "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=",
- "requires": {
- "jju": "^1.1.0"
- }
- },
- "json-ptr": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json-ptr/-/json-ptr-2.2.0.tgz",
- "integrity": "sha512-w9f6/zhz4kykltXMG7MLJWMajxiPj0q+uzQPR1cggNAE/sXoq/C5vjUb/7QNcC3rJsVIIKy37ALTXy1O+3c8QQ==",
- "requires": {
- "tslib": "^2.2.0"
- }
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
- },
- "JSONStream": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
- "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- }
- },
- "jsonwebtoken": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "requires": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^5.6.0"
- },
- "dependencies": {
- "jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "requires": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "jstransformer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
- "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
- "requires": {
- "is-promise": "^2.0.0",
- "promise": "^7.0.1"
- }
- },
- "junk": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz",
- "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI="
- },
- "jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "requires": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
- },
- "kuler": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
- },
- "latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
- "requires": {
- "package-json": "^6.3.0"
- }
- },
- "lazystream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
- "requires": {
- "readable-stream": "^2.0.5"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "limiter": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
- "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA=="
- },
- "linkify-it": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
- "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
- "requires": {
- "uc.micro": "^1.0.1"
- }
- },
- "liquidjs": {
- "version": "6.4.3",
- "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-6.4.3.tgz",
- "integrity": "sha512-m1xSB10Ncu22NR3X0xdaqu/GvP1xadDCFYGqGgd6me8DAWjyA68BKE5DHJmSxw1CGsWPsX+Hj2v/87J2w/LvMQ=="
- },
- "listenercount": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
- "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- }
- }
- },
- "localtunnel": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz",
- "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==",
- "requires": {
- "axios": "0.21.4",
- "debug": "4.3.2",
- "openurl": "1.1.1",
- "yargs": "17.1.1"
- },
- "dependencies": {
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
- },
- "yargs": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
- "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
- }
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash._isnative": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
- "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw="
- },
- "lodash._objecttypes": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
- "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE="
- },
- "lodash._shimkeys": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
- "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
- "requires": {
- "lodash._objecttypes": "~2.4.1"
- }
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
- },
- "lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
- },
- "lodash.difference": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
- "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
- },
- "lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
- },
- "lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
- },
- "lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
- },
- "lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
- },
- "lodash.isfinite": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
- "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M="
- },
- "lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
- },
- "lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
- },
- "lodash.isobject": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
- "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
- "requires": {
- "lodash._objecttypes": "~2.4.1"
- }
- },
- "lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
- },
- "lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
- },
- "lodash.keys": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
- "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
- "requires": {
- "lodash._isnative": "~2.4.1",
- "lodash._shimkeys": "~2.4.1",
- "lodash.isobject": "~2.4.1"
- }
- },
- "lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
- },
- "lodash.snakecase": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
- "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40="
- },
- "lodash.union": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
- "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
- },
- "lodash.values": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
- "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
- "requires": {
- "lodash.keys": "~2.4.1"
- }
- },
- "log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "requires": {
- "chalk": "^2.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "logform": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
- "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==",
- "requires": {
- "colors": "^1.2.1",
- "fast-safe-stringify": "^2.0.4",
- "fecha": "^4.2.0",
- "ms": "^2.1.1",
- "triple-beam": "^1.3.0"
- },
- "dependencies": {
- "colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
- }
- }
- },
- "long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "peer": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "lru-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
- "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
- "requires": {
- "es5-ext": "~0.10.2"
- }
- },
- "luxon": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz",
- "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ=="
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "make-fetch-happen": {
- "version": "8.0.14",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz",
- "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==",
- "optional": true,
- "requires": {
- "agentkeepalive": "^4.1.3",
- "cacache": "^15.0.5",
- "http-cache-semantics": "^4.1.0",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.3",
- "minipass-collect": "^1.0.2",
- "minipass-fetch": "^1.3.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^5.0.0",
- "ssri": "^8.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "optional": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- }
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
- },
- "markdown-it": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
- "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
- "requires": {
- "argparse": "^1.0.7",
- "entities": "~2.0.0",
- "linkify-it": "^2.0.0",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
- }
- },
- "markdown-it-anchor": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz",
- "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==",
- "requires": {}
- },
- "markdown-it-attrs": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.0.tgz",
- "integrity": "sha512-xd1SuNQPArGYl3SN1bsOHRnmMenkqeLDbTR0udeyGMSFBnaOtxP4yz1SEKrjsV/XYFygFAeKFHgbbj6AwxbTfA==",
- "requires": {}
- },
- "markdown-it-toc-done-right": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/markdown-it-toc-done-right/-/markdown-it-toc-done-right-4.2.0.tgz",
- "integrity": "sha512-UB/IbzjWazwTlNAX0pvWNlJS8NKsOQ4syrXZQ/C72j+jirrsjVRT627lCaylrKJFBQWfRsPmIVQie8x38DEhAQ=="
- },
- "marked": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
- "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg=="
- },
- "marked-terminal": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz",
- "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==",
- "requires": {
- "ansi-escapes": "^3.1.0",
- "cardinal": "^2.1.1",
- "chalk": "^2.4.1",
- "cli-table": "^0.3.1",
- "node-emoji": "^1.4.1",
- "supports-hyperlinks": "^1.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "maximatch": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz",
- "integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=",
- "requires": {
- "array-differ": "^1.0.0",
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "minimatch": "^3.0.0"
- },
- "dependencies": {
- "array-differ": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
- "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE="
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
- }
- }
- },
- "mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "memoizee": {
- "version": "0.4.15",
- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
- "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
- "requires": {
- "d": "^1.0.1",
- "es5-ext": "^0.10.53",
- "es6-weak-map": "^2.0.3",
- "event-emitter": "^0.3.5",
- "is-promise": "^2.2.2",
- "lru-queue": "^0.1.0",
- "next-tick": "^1.1.0",
- "timers-ext": "^0.1.7"
- },
- "dependencies": {
- "next-tick": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
- "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
- }
- }
- },
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI="
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
- },
- "mime-db": {
- "version": "1.49.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
- "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="
- },
- "mime-types": {
- "version": "2.1.32",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
- "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
- "requires": {
- "mime-db": "1.49.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
- "optional": true,
- "requires": {
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- }
- }
- },
- "minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-fetch": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
- "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
- "optional": true,
- "requires": {
- "encoding": "^0.1.12",
- "minipass": "^3.1.0",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.0.0"
- }
- },
- "minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "optional": true,
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- }
- }
- },
- "mitt": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
- "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw=="
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "moo": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz",
- "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w=="
- },
- "morgan": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
- "requires": {
- "basic-auth": "~2.0.1",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "multimatch": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
- "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
- "requires": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- }
- },
- "mustache": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz",
- "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ=="
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
- },
- "nan": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
- "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
- "optional": true
- },
- "nash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/nash/-/nash-3.0.0.tgz",
- "integrity": "sha512-M5SahEycXUmko3zOvsBkF6p94CWLhnyy9hfpQ9Qzp+rQkQ8D1OaTlfTl1OBWktq9Fak3oDXKU+ev7tiMaMu+1w==",
- "requires": {
- "async": "^1.3.0",
- "flat-arguments": "^1.0.0",
- "lodash": "^4.17.5",
- "minimist": "^1.1.0"
- }
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
- },
- "netmask": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
- "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="
- },
- "next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
- "node-emoji": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
- "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
- "requires": {
- "lodash": "^4.17.21"
- }
- },
- "node-fetch": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.4.tgz",
- "integrity": "sha512-aD1fO+xtLiSCc9vuD+sYMxpIuQyhHscGSkBEo2o5LTV/3bTEAYvdUii29n8LlO5uLCmWdGP7uVUVXFo5SRdkLA==",
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
- },
- "node-gyp": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.2.0.tgz",
- "integrity": "sha512-KG8SdcoAnw2d6augGwl1kOayALUrXW/P2uOAm2J2+nmW/HjZo7y+8TDg7LejxbekOOSv3kzhq+NSUYkIDAX8eA==",
- "optional": true,
- "requires": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^8.0.14",
- "nopt": "^5.0.0",
- "npmlog": "^4.1.2",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "optional": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "optional": true,
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "optional": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "optional": true
- }
- }
- },
- "nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
- },
- "normalize-url": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
- "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="
- },
- "npm-run-all": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
- "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "memorystream": "^0.3.1",
- "minimatch": "^3.0.4",
- "pidtree": "^0.3.0",
- "read-pkg": "^3.0.0",
- "shell-quote": "^1.6.1",
- "string.prototype.padend": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "optional": true
- },
- "nunjucks": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz",
- "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==",
- "requires": {
- "a-sync-waterfall": "^1.0.0",
- "asap": "^2.0.3",
- "commander": "^5.1.0"
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-hash": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
- },
- "object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg=="
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "one-time": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "requires": {
- "fn.name": "1.x.x"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "open": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
- "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
- "requires": {
- "is-wsl": "^1.1.0"
- }
- },
- "openapi3-ts": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.1.tgz",
- "integrity": "sha512-v6X3iwddhi276siej96jHGIqTx3wzVfMTmpGJEQDt7GPI7pI6sywItURLzpEci21SBRpPN/aOWSF5mVfFVNmcg==",
- "requires": {
- "yaml": "^1.10.0"
- }
- },
- "openurl": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
- "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c="
- },
- "opn": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
- "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
- "requires": {
- "is-wsl": "^1.1.0"
- }
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "ora": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
- "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
- "requires": {
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-spinners": "^2.0.0",
- "log-symbols": "^2.2.0",
- "strip-ansi": "^5.2.0",
- "wcwidth": "^1.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
- },
- "p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
- },
- "p-defer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz",
- "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw=="
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "optional": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "pac-proxy-agent": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz",
- "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==",
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4",
- "get-uri": "3",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "5",
- "pac-resolver": "^4.1.0",
- "raw-body": "^2.2.0",
- "socks-proxy-agent": "5"
- }
- },
- "pac-resolver": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz",
- "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==",
- "requires": {
- "degenerator": "^2.2.0",
- "ip": "^1.1.5",
- "netmask": "^2.0.1"
- }
- },
- "package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "requires": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "parse-filepath": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
- "requires": {
- "is-absolute": "^1.0.0",
- "map-cache": "^0.2.0",
- "path-root": "^0.1.1"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "parse-ms": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-0.1.2.tgz",
- "integrity": "sha1-3T+iXtbC78e93hKtm0bBY6opIk4="
- },
- "parseqs": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
- "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
- },
- "parseuri": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
- "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "path-root": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
- "requires": {
- "path-root-regex": "^0.1.0"
- }
- },
- "path-root-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- }
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
- },
- "pidtree": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
- "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA=="
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "please-upgrade-node": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
- "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
- "requires": {
- "semver-compare": "^1.0.0"
- }
- },
- "portfinder": {
- "version": "1.0.28",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
- "requires": {
- "async": "^2.6.2",
- "debug": "^3.1.1",
- "mkdirp": "^0.5.5"
- },
- "dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- },
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "portscanner": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz",
- "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=",
- "requires": {
- "async": "1.5.2",
- "is-number-like": "^1.0.3"
- }
- },
- "preact": {
- "version": "10.6.2",
- "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.2.tgz",
- "integrity": "sha512-ppDjurt75nSxyikpyali+uKwRl8CK9N6ntOPovGIEGQagjMLVzEgVqFEsUUyUrqyE9Ch90KE0jmFc9q2QcPLBA=="
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
- },
- "prettier": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
- "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA=="
- },
- "pretty": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz",
- "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=",
- "requires": {
- "condense-newlines": "^0.2.1",
- "extend-shallow": "^2.0.1",
- "js-beautify": "^1.6.12"
- }
- },
- "pretty-ms": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz",
- "integrity": "sha1-2oeaaC/zOjcBEEbxPWJ/Z8c7hPY=",
- "requires": {
- "parse-ms": "^0.1.0"
- }
- },
- "printj": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
- "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
- },
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "requires": {
- "asap": "~2.0.3"
- }
- },
- "promise-breaker": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz",
- "integrity": "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA=="
- },
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "optional": true
- },
- "promise-retry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
- "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
- "optional": true,
- "requires": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
- },
- "proto3-json-serializer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.4.tgz",
- "integrity": "sha512-bFzdsKU/zaTobWrRxRniMZIzzcgKYlmBWL1gAcTXZ2M7TQTGPI0JoYYs6bN7tpWj59ZCfwg7Ii/A2e8BbQGYnQ=="
- },
- "protobufjs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz",
- "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==",
- "requires": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.1",
- "@types/node": ">=13.7.0",
- "long": "^4.0.0"
- }
- },
- "proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "requires": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- }
- },
- "proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz",
- "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==",
- "requires": {
- "agent-base": "^6.0.0",
- "debug": "4",
- "http-proxy-agent": "^4.0.0",
- "https-proxy-agent": "^5.0.0",
- "lru-cache": "^5.1.1",
- "pac-proxy-agent": "^4.1.0",
- "proxy-from-env": "^1.0.0",
- "socks-proxy-agent": "^5.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- }
- }
- },
- "proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
- },
- "pug": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
- "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
- "requires": {
- "pug-code-gen": "^3.0.2",
- "pug-filters": "^4.0.0",
- "pug-lexer": "^5.0.1",
- "pug-linker": "^4.0.0",
- "pug-load": "^3.0.0",
- "pug-parser": "^6.0.0",
- "pug-runtime": "^3.0.1",
- "pug-strip-comments": "^2.0.0"
- }
- },
- "pug-attrs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
- "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
- "requires": {
- "constantinople": "^4.0.1",
- "js-stringify": "^1.0.2",
- "pug-runtime": "^3.0.0"
- }
- },
- "pug-code-gen": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
- "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
- "requires": {
- "constantinople": "^4.0.1",
- "doctypes": "^1.1.0",
- "js-stringify": "^1.0.2",
- "pug-attrs": "^3.0.0",
- "pug-error": "^2.0.0",
- "pug-runtime": "^3.0.0",
- "void-elements": "^3.1.0",
- "with": "^7.0.0"
- }
- },
- "pug-error": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
- "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
- },
- "pug-filters": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
- "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
- "requires": {
- "constantinople": "^4.0.1",
- "jstransformer": "1.0.0",
- "pug-error": "^2.0.0",
- "pug-walk": "^2.0.0",
- "resolve": "^1.15.1"
- }
- },
- "pug-lexer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
- "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
- "requires": {
- "character-parser": "^2.2.0",
- "is-expression": "^4.0.0",
- "pug-error": "^2.0.0"
- }
- },
- "pug-linker": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
- "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
- "requires": {
- "pug-error": "^2.0.0",
- "pug-walk": "^2.0.0"
- }
- },
- "pug-load": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
- "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
- "requires": {
- "object-assign": "^4.1.1",
- "pug-walk": "^2.0.0"
- }
- },
- "pug-parser": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
- "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
- "requires": {
- "pug-error": "^2.0.0",
- "token-stream": "1.0.0"
- }
- },
- "pug-runtime": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
- "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
- },
- "pug-strip-comments": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
- "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
- "requires": {
- "pug-error": "^2.0.0"
- }
- },
- "pug-walk": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
- "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "requires": {
- "escape-goat": "^2.0.0"
- }
- },
- "qs": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
- "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4="
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
- },
- "raw-body": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
- "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.3",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "re2": {
- "version": "1.16.0",
- "resolved": "https://registry.npmjs.org/re2/-/re2-1.16.0.tgz",
- "integrity": "sha512-eizTZL2ZO0ZseLqfD4t3Qd0M3b3Nr0MBWpX81EbPMIud/1d/CSfUIx2GQK8fWiAeHoSekO5EOeFib2udTZLwYw==",
- "optional": true,
- "requires": {
- "install-artifact-from-github": "^1.2.0",
- "nan": "^2.14.2",
- "node-gyp": "^8.0.0"
- }
- },
- "react": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
- "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
- "peer": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "react-dom": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
- "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
- "peer": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
- }
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdir-glob": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz",
- "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==",
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "recursive-copy": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.13.tgz",
- "integrity": "sha512-BjmE6R/dOImStEku+017L3Z0I6u/lA+SVr1sySWbTLjmQKDTESNmJ9WBZP8wbN5FuvqNvSYvRKA/IKQhAjqnpQ==",
- "requires": {
- "del": "^2.2.0",
- "errno": "^0.1.2",
- "graceful-fs": "^4.1.4",
- "junk": "^1.0.1",
- "maximatch": "^0.1.0",
- "mkdirp": "^0.5.1",
- "pify": "^2.3.0",
- "promise": "^7.0.1",
- "slash": "^1.0.0"
- }
- },
- "redeyed": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
- "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=",
- "requires": {
- "esprima": "~4.0.0"
- }
- },
- "registry-auth-token": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
- "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "registry-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
- },
- "resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- }
- },
- "resp-modifier": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
- "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=",
- "requires": {
- "debug": "^2.2.0",
- "minimatch": "^3.0.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
- "optional": true
- },
- "retry-request": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz",
- "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==",
- "requires": {
- "debug": "^4.1.1",
- "extend": "^3.0.2"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "router": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/router/-/router-1.3.5.tgz",
- "integrity": "sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g==",
- "requires": {
- "array-flatten": "3.0.0",
- "debug": "2.6.9",
- "methods": "~1.1.2",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "setprototypeof": "1.2.0",
- "utils-merge": "1.0.1"
- },
- "dependencies": {
- "array-flatten": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz",
- "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA=="
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- }
- }
- },
- "rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA=="
- },
- "run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
- },
- "rxjs": {
- "version": "5.5.12",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
- "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
- "requires": {
- "symbol-observable": "1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "sass": {
- "version": "1.35.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz",
- "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==",
- "requires": {
- "chokidar": ">=3.0.0 <4.0.0"
- }
- },
- "scheduler": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
- "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
- "peer": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "section-matter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
- "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
- "requires": {
- "extend-shallow": "^2.0.1",
- "kind-of": "^6.0.0"
- }
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "requires": {
- "lru-cache": "^6.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
- "semver-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
- "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w="
- },
- "semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
- "requires": {
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
- }
- }
- },
- "serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
- "requires": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- }
- }
- },
- "serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
- }
- },
- "server-destroy": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
- "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0="
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
- },
- "side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "sigmund": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
- },
- "signal-exit": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
- "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q=="
- },
- "simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
- "requires": {
- "is-arrayish": "^0.3.1"
- },
- "dependencies": {
- "is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
- }
- }
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
- },
- "slugify": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz",
- "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang=="
- },
- "smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
- },
- "socket.io": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz",
- "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==",
- "requires": {
- "debug": "~4.1.0",
- "engine.io": "~3.5.0",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.4.0",
- "socket.io-parser": "~3.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "socket.io-adapter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
- "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
- },
- "socket.io-client": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
- "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
- "requires": {
- "backo2": "1.0.2",
- "component-bind": "1.0.0",
- "component-emitter": "~1.3.0",
- "debug": "~3.1.0",
- "engine.io-client": "~3.5.0",
- "has-binary2": "~1.0.2",
- "indexof": "0.0.1",
- "parseqs": "0.0.6",
- "parseuri": "0.0.6",
- "socket.io-parser": "~3.3.0",
- "to-array": "0.1.4"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "socket.io-parser": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
- "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
- "requires": {
- "component-emitter": "~1.3.0",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
- }
- }
- }
- },
- "socket.io-parser": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
- "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
- "requires": {
- "component-emitter": "1.2.1",
- "debug": "~4.1.0",
- "isarray": "2.0.1"
- },
- "dependencies": {
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "socks": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz",
- "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==",
- "requires": {
- "ip": "^1.1.5",
- "smart-buffer": "^4.1.0"
- }
- },
- "socks-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==",
- "requires": {
- "agent-base": "^6.0.2",
- "debug": "4",
- "socks": "^2.3.3"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
- "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA=="
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "ssri": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
- "optional": true,
- "requires": {
- "minipass": "^3.1.1"
- }
- },
- "stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
- },
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
- },
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
- },
- "stream-throttle": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
- "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=",
- "requires": {
- "commander": "^2.2.0",
- "limiter": "^1.0.5"
- },
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- }
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
- "string-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
- "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
- "requires": {
- "strip-ansi": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "string.prototype.padend": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz",
- "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
- },
- "strip-bom-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
- "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
- },
- "superstatic": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-7.1.0.tgz",
- "integrity": "sha512-yBU8iw07nM3Bu4jFc8lnKwLey0cj61OaGmFJZcYC2X+kEpXVmXzERJ3OTAHZAESe1OTeNIuWadt81U5IULGGAA==",
- "requires": {
- "basic-auth-connect": "^1.0.0",
- "chalk": "^1.1.3",
- "compare-semver": "^1.0.0",
- "compression": "^1.7.0",
- "connect": "^3.6.2",
- "destroy": "^1.0.4",
- "fast-url-parser": "^1.1.3",
- "fs-extra": "^8.1.0",
- "glob-slasher": "^1.0.1",
- "home-dir": "^1.0.0",
- "is-url": "^1.2.2",
- "join-path": "^1.1.1",
- "lodash": "^4.17.19",
- "mime-types": "^2.1.16",
- "minimatch": "^3.0.4",
- "morgan": "^1.8.2",
- "nash": "^3.0.0",
- "on-finished": "^2.2.0",
- "on-headers": "^1.0.0",
- "path-to-regexp": "^1.8.0",
- "re2": "^1.15.8",
- "router": "^1.3.1",
- "rsvp": "^4.8.5",
- "string-length": "^1.0.0",
- "update-notifier": "^4.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "global-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
- "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
- "requires": {
- "ini": "1.3.7"
- }
- },
- "ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ=="
- },
- "is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
- "requires": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
- }
- },
- "is-npm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
- "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig=="
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "requires": {
- "isarray": "0.0.1"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
- },
- "update-notifier": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
- "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
- "requires": {
- "boxen": "^4.2.0",
- "chalk": "^3.0.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^4.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- }
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "supports-hyperlinks": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz",
- "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==",
- "requires": {
- "has-flag": "^2.0.0",
- "supports-color": "^5.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- }
- }
- }
- }
- },
- "symbol-observable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
- "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ="
- },
- "tar": {
- "version": "4.4.19",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz",
- "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==",
- "requires": {
- "chownr": "^1.1.4",
- "fs-minipass": "^1.2.7",
- "minipass": "^2.9.0",
- "minizlib": "^1.3.3",
- "mkdirp": "^0.5.5",
- "safe-buffer": "^5.2.1",
- "yallist": "^3.1.1"
- },
- "dependencies": {
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
- },
- "fs-minipass": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
- "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
- "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- }
- }
- },
- "tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "requires": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- }
- },
- "tcp-port-used": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz",
- "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==",
- "requires": {
- "debug": "4.3.1",
- "is2": "^2.0.6"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg=="
- },
- "text-hex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
- },
- "tfunk": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz",
- "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==",
- "requires": {
- "chalk": "^1.1.3",
- "dlv": "^1.1.3"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- }
- }
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "through2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz",
- "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=",
- "requires": {
- "readable-stream": "~2.0.0",
- "xtend": "~4.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
- },
- "readable-stream": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
- "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "~1.0.0",
- "process-nextick-args": "~1.0.6",
- "string_decoder": "~0.10.x",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- }
- }
- },
- "time-require": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/time-require/-/time-require-0.1.2.tgz",
- "integrity": "sha1-+eEss3D8JgXhFARYK6VO9corLZg=",
- "requires": {
- "chalk": "^0.4.0",
- "date-time": "^0.1.1",
- "pretty-ms": "^0.2.1",
- "text-table": "^0.2.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
- "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg="
- },
- "chalk": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
- "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
- "requires": {
- "ansi-styles": "~1.0.0",
- "has-color": "~0.1.0",
- "strip-ansi": "~0.1.0"
- }
- },
- "strip-ansi": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
- "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE="
- }
- }
- },
- "timers-ext": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
- "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
- "requires": {
- "es5-ext": "~0.10.46",
- "next-tick": "1"
- }
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-array": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
- },
- "to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
- },
- "token-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
- "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- }
- }
- },
- "toxic": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz",
- "integrity": "sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==",
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
- },
- "traverse": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
- "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
- },
- "triple-beam": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
- "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
- },
- "tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- },
- "tweetsodium": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/tweetsodium/-/tweetsodium-0.0.5.tgz",
- "integrity": "sha512-T3aXZtx7KqQbutTtBfn+P5By3HdBuB1eCoGviIrRJV2sXeToxv2X2cv5RvYqgG26PSnN5m3fYixds22Gkfd11w==",
- "requires": {
- "blakejs": "^1.1.0",
- "tweetnacl": "^1.0.1"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
- }
- }
- },
- "type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
- },
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "ua-parser-js": {
- "version": "0.7.28",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
- "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g=="
- },
- "uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
- },
- "uglify-js": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz",
- "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==",
- "optional": true
- },
- "unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "unc-path-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
- },
- "unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "optional": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "optional": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "requires": {
- "crypto-random-string": "^2.0.0"
- }
- },
- "universal-analytics": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz",
- "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==",
- "requires": {
- "debug": "^4.1.1",
- "request": "^2.88.2",
- "uuid": "^3.0.0"
- }
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
- },
- "unorm": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
- "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA=="
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "unzipper": {
- "version": "0.10.11",
- "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
- "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
- "requires": {
- "big-integer": "^1.6.17",
- "binary": "~0.3.0",
- "bluebird": "~3.4.1",
- "buffer-indexof-polyfill": "~1.0.0",
- "duplexer2": "~0.1.4",
- "fstream": "^1.0.12",
- "graceful-fs": "^4.2.2",
- "listenercount": "~1.0.1",
- "readable-stream": "~2.3.6",
- "setimmediate": "~1.0.4"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "update-notifier": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
- "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
- "requires": {
- "boxen": "^5.0.0",
- "chalk": "^4.1.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.4.0",
- "is-npm": "^5.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.1.0",
- "pupa": "^2.1.1",
- "semver": "^7.3.4",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- }
- }
- },
- "url-join": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz",
- "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g="
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "uslug": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/uslug/-/uslug-1.0.4.tgz",
- "integrity": "sha1-uaIvCRTgqGFAYz2swwLl9PpFBnc=",
- "requires": {
- "unorm": ">= 1.0.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- },
- "valid-url": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
- "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA="
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "void-elements": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
- "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk="
- },
- "wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
- "requires": {
- "defaults": "^1.0.3"
- }
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "optional": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "optional": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "optional": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "requires": {
- "string-width": "^4.0.0"
- }
- },
- "winston": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
- "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==",
- "requires": {
- "@dabh/diagnostics": "^2.0.2",
- "async": "^3.1.0",
- "is-stream": "^2.0.0",
- "logform": "^2.2.0",
- "one-time": "^1.0.0",
- "readable-stream": "^3.4.0",
- "stack-trace": "0.0.x",
- "triple-beam": "^1.3.0",
- "winston-transport": "^4.4.0"
- },
- "dependencies": {
- "async": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz",
- "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg=="
- }
- }
- },
- "winston-transport": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
- "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
- "requires": {
- "readable-stream": "^2.3.7",
- "triple-beam": "^1.2.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "with": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
- "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
- "requires": {
- "@babel/parser": "^7.9.6",
- "@babel/types": "^7.9.6",
- "assert-never": "^1.2.1",
- "babel-walk": "3.0.0-canary-5"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
- },
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "requires": {}
- },
- "xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q=="
- },
- "xmlhttprequest-ssl": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
- "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q=="
- },
- "xregexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
- "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM="
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "yeast": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
- },
- "zip-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
- "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==",
- "requires": {
- "archiver-utils": "^2.1.0",
- "compress-commons": "^4.1.0",
- "readable-stream": "^3.6.0"
- }
- }
- }
-}
diff --git a/chromium/docs/website/package.json b/chromium/docs/website/package.json
deleted file mode 100644
index 4c79a15a381..00000000000
--- a/chromium/docs/website/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "scripts": {
- "build": "npm-run-all build:sass build:eleventy",
- "build:eleventy": "eleventy --quiet",
- "build:sass": "sass site/_stylesheets:build/_stylesheets",
- "deploy:login": "firebase login",
- "deploy:preview": "firebase hosting:channel:deploy --project prod --expires 7d",
- "deploy:prod": "firebase deploy --only hosting --project prod",
- "deploy:staging": "firebase deploy --only hosting --project staging",
- "start": "npm-run-all build:sass --parallel watch:*",
- "watch:eleventy": "eleventy --serve --port=8080 --quiet",
- "watch:sass": "sass --watch site/_stylesheets:build/_stylesheets"
- },
- "dependencies": {
- "@11ty/eleventy": "^0.12.1",
- "@docsearch/js": "^3.0.0-alpha.41",
- "firebase-tools": "^9.18.0",
- "markdown-it-anchor": "^8.4.1",
- "markdown-it-attrs": "^4.1.0",
- "markdown-it-toc-done-right": "^4.2.0-4",
- "npm-run-all": "^4.1.5",
- "prettier": "^2.4.1",
- "sass": "^1.35.1",
- "uslug": "^1.0.4"
- }
-}
diff --git a/chromium/docs/website/scripts/404s.txt b/chromium/docs/website/scripts/404s.txt
deleted file mode 100644
index 566598f739c..00000000000
--- a/chromium/docs/website/scripts/404s.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-/Home/chromium-security/security-tips-for-ipc
-/blink/goog_1365028860
-/blink/layout-team
-/blink/layout-team/bug-triage
-/blink/layout-team/okrs/2015q2
-/blink/layout-team/potential-projects
-/chromium-os/Acer%20Chromebook%20Spin%20311%20(CP311-3H)
-/chromium-os/Lenovo%20100e%20Chromebook%202nd%20Gen
-/chromium-os/Lenovo%20300e%20Chromebook%202nd%20Gen%20(Intel)
-/chromium-os/Lenovo%20500e%20Chromebook%202nd%20Gen
-/chromium-os/boot-milestones
-/chromium-os/developer-information-for-chrome-os-devices/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/generic
-/contact/-chromium-irc
-/developers/debugging-on-os-x
-/developers/design-documents/extensions/apiwishlist
-/developers/design-documents/extensions/process-model
-/developers/design-documents/extensions/proposed-changes/apis-under-development/experimental.bluetooth.html
-/developers/design-documents/goog_1235887298838
-/developers/design-documents/goog_353685820
-/developers/design-documents/mojo
-/developers/design-documents/network-stack/disk-cache/TOC-Buckets
-/developers/goog_742956014
-/developers/how-tos/debugging
-/developers/how-tos/using-valgrind
-/developers/testing/chromium-build-infrastructure/getting-the-buildbot-source/configuring-your-buildbot
-/developers/tree-sheriffs/sheriff-details-chromium-os/commit-queue-overview
-/developers/tree-sheriffs/sheriff-details-chromium-os/goog_1113656214
-/developers/tree-sheriffs/sheriff-details-chromium-os/goog_708387403
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_1520500215
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_1527236099
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_158369869
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_158369871
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_362824283
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_690049217
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_979881309
-/developers/webkit-version-table
-/for-testers/backend-testing/website-compatibility/reduced-test-cases
-/for-testers/goog_880557684
-/getting-involved/dev-channel/release-notes
-/p/nativeclient/wiki/NaCl
-/spdy/running_flipinmemserver
-/spdy/spdy-protoco
-/teams/animations/goog_624119910
-/teams/goog_1136717605
diff --git a/chromium/docs/website/scripts/common.py b/chromium/docs/website/scripts/common.py
deleted file mode 100644
index a911f15a40f..00000000000
--- a/chromium/docs/website/scripts/common.py
+++ /dev/null
@@ -1,238 +0,0 @@
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import dataclasses
-import multiprocessing
-import os
-import queue
-import sys
-import threading
-import time
-import urllib.parse
-
-
-site = 'https://www.chromium.org'
-
-REPO_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
-SITE_DIR = os.path.join(REPO_DIR, 'site')
-BUILD_DIR = os.path.join(REPO_DIR, 'build')
-DEFAULT_TEMPLATE = '/_includes/page.html'
-
-
-
-alternates = [
- site,
- 'http://dev.chromium.org',
- 'https://dev.chromium.org',
- 'https://sites.google.com/a/chromium.org/dev',
- 'https://ssl.gstatic.com/sites/p/058338',
- 'http://www.gstatic.com/sites/p/058338',
-]
-
-
-def cpu_count():
- return multiprocessing.cpu_count()
-
-
-def read_text_file(path):
- return read_binary_file(path).decode('utf-8')
-
-
-def read_binary_file(path):
- with open(path, 'rb') as fp:
- return fp.read()
-
-
-def write_binary_file(path, content):
- with open(path, 'wb') as fp:
- return fp.write(content)
-
-def write_text_file(path, content):
- with open(path, 'w') as fp:
- return fp.write(content)
-
-def read_paths(path):
- paths = set()
- with open(path) as fp:
- for line in fp.readlines():
- idx = line.find('#')
- if idx != -1:
- line = line[:idx]
- line = line.strip()
- if line:
- paths.add(line)
- return paths
-
-
-def to_path(page, top=SITE_DIR, ext='.md'):
- page = page.strip()
- if page == '/':
- page = ''
- if os.path.isdir(top + page):
- return page + '/index' + ext
- if os.path.exists(top + page):
- return page
- if ext and os.path.exists(top + page + ext):
- return page + ext
- return page
-
-
-def walk(top, skip=None):
- skip = skip or set()
- paths = set()
- for dirpath, dnames, fnames in os.walk(top):
- for dname in dnames:
- rpath = os.path.relpath(os.path.join(dirpath, dname), top)
- if rpath in skip or dname.startswith('.'):
- dnames.remove(dname)
- for fname in fnames:
- rpath = os.path.relpath(os.path.join(dirpath, fname), top)
- if rpath in skip or fname.startswith('.'):
- continue
- paths.add(rpath)
- return sorted(paths)
-
-
-def write_if_changed(path, content, mode='wb', encoding='utf-8'):
- if mode == 'w':
- content = content.encode(encoding)
- os.makedirs(os.path.dirname(path), exist_ok=True)
- if os.path.exists(path):
- with open(path, 'rb') as fp:
- old_content = fp.read()
- if content == old_content:
- return False
- write_binary_file(path, content)
- return True
-
-
-def should_update(dest_page, source_pages):
- if not os.path.exists(dest_page):
- return True
-
- dest_pages = [dest_page]
- max_source_mtime = max(os.stat(p).st_mtime for p in source_pages)
- max_dest_mtime = max(os.stat(p).st_mtime for p in dest_pages)
- return max_source_mtime > max_dest_mtime
-
-
-class JobQueue:
- def __init__(self, handler, jobs, multiprocess=None):
- self.handler = handler
- self.jobs = jobs
- self.pending = set()
- self.started = set()
- self.finished = set()
- if multiprocess is None:
- self.multiprocess = (jobs > 1)
- else:
- self.multiprocess = multiprocess
- if self.multiprocess:
- self._request_q = multiprocessing.Queue()
- self._response_q = multiprocessing.Queue()
- else:
- self._request_q = queue.Queue()
- self._response_q = queue.Queue()
- self._start_time = None
- self._threads = []
- self._last_msg = None
- self._isatty = sys.stdout.isatty()
-
- def all_tasks(self):
- return self.pending | self.started | self.finished
-
- def request(self, task, obj):
- self.pending.add(task)
- self._request_q.put(('handle', task, obj))
-
- def results(self):
- self._start_time = time.time()
- self._spawn()
-
- while self.pending | self.started:
- msg, task, res, obj = self._response_q.get()
-
- if msg == 'started':
- self._mark_started(task)
- elif msg == 'finished':
- self._mark_finished(task, res)
- yield (task, res, obj)
- else:
- raise AssertionError
-
- for _ in self._threads:
- self._request_q.put(('exit', None, None))
- for thread in self._threads:
- thread.join()
- if self._isatty:
- print()
-
- def _spawn(self):
- args = (self._request_q, self._response_q, self.handler)
- for i in range(self.jobs):
- if self.multiprocess:
- thread = multiprocessing.Process(target=_worker,
- name='worker-%d' % i,
- args=args)
- else:
- thread = threading.Thread(target=_worker,
- name='worker-%d' % i,
- args=args)
- self._threads.append(thread)
- thread.start()
-
- def _mark_started(self, task):
- self.pending.remove(task)
- self.started.add(task)
-
- def _mark_finished(self, task, res):
- self.started.remove(task)
- self.finished.add(task)
- if res:
- self._print('%s failed:' % task, truncate=False)
- print()
- print(res)
- else:
- self._print('%s' % task)
- sys.stdout.flush()
-
- def _print(self, msg, truncate=True):
- if not self._isatty:
- print('[%d/%d] %s' % (len(self.finished), len(self.all_tasks()),
- msg))
- return
-
- if len(msg) > 76 and truncate:
- msg = msg[:76] + '...'
- if self._last_msg is not None:
- print('\r', end='')
- msg = '[%d/%d] %s' % (len(self.finished), len(self.all_tasks()), msg)
- print(msg, end='' if self._isatty else '\n')
- if self._last_msg is not None and len(self._last_msg) > len(msg):
- print(' ' * (len(self._last_msg) - len(msg)), end='')
- print('\r', end='')
- self._last_msg = msg
-
-
-def _worker(request_q, response_q, handler):
- while True:
- message, task, obj = request_q.get()
- if message == 'exit':
- break
- elif message == 'handle':
- response_q.put(('started', task, '', None))
- res, resp = handler(task, obj)
- response_q.put(('finished', task, res, resp))
- else:
- raise AssertionError
diff --git a/chromium/docs/website/scripts/crawl.py b/chromium/docs/website/scripts/crawl.py
deleted file mode 100755
index f565fd800b0..00000000000
--- a/chromium/docs/website/scripts/crawl.py
+++ /dev/null
@@ -1,264 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""Script for crawling a website.
-
-This script will crawl a website and download all of the pages and
-related assets, rewriting the links to point to the local copies.
-"""
-
-import argparse
-import html
-import os
-import sys
-import time
-import urllib.parse
-import urllib.request
-
-import common
-
-
-def main(argv):
- parser = argparse.ArgumentParser()
- parser.add_argument('-j', '--jobs', type=int,
- default=common.cpu_count(),
- help='Number of URLs to fetch in parallel '
- '(default %(default)s)')
- parser.add_argument('-l', '--limit', type=int, metavar='N',
- help='Only fetch the first N pages')
- parser.add_argument('-o', '--out-dir', default='pages')
- parser.add_argument('--path-list', default='scripts/paths_to_crawl.txt',
- help='initial list of URLs to seed the crawl')
- parser.add_argument('--paths-to-skip', default='scripts/paths_to_skip.txt',
- help='list of URLs to skip (expected 404s)')
- parser.add_argument('--prefix', default='',
- help='path to prepend to all the URLs')
- parser.add_argument('paths', nargs='*')
- args = parser.parse_args(argv)
-
- if args.paths:
- urls = [common.site + path for path in args.paths]
- elif args.path_list:
- urls = [common.site + path for path in
- common.read_paths(args.path_list)]
- else:
- urls = [common.site + '/']
-
- args.alternates = common.alternates
-
- Crawler(args).crawl(urls)
-
-
-class Crawler:
- def __init__(self, args):
- self.site = None
- self.host = None
- self.args = args
- self.queue = common.JobQueue(self._handle_url, self.args.jobs,
- multiprocess=False)
- self.paths_to_skip = set()
-
- def crawl(self, urls):
- if self.args.paths_to_skip:
- self.paths_to_skip = common.read_paths(self.args.paths_to_skip)
-
- self.site = urllib.parse.urlparse(urls[0])
- self.host = urllib.parse.urlunparse(
- urllib.parse.ParseResult(self.site.scheme,
- self.site.netloc,
- path='', params='', query='', fragment=''))
-
- self._fetch(urls)
- num_errors = 0
- num_urls = 0
- for task, res, links in self.queue.results():
- if res:
- num_errors += 1
- num_urls += 1
- self._fetch(urllib.parse.urljoin(self.host + task, link)
- for link in links)
-
- print('Crawled %d URLs%s.' % (num_urls,
- (' (%d errors)' % num_errors) if num_errors else ''))
-
- return 0
-
- def _fetch(self, urls):
- for url in urls:
- should_fetch, task, new_url = self._filter(url)
- if should_fetch:
- self.queue.request(task, new_url)
-
- def _filter(self, url):
- comps = urllib.parse.urlparse(url)
- if (not any(url.startswith(x) for x in common.alternates) or
- comps.path.startswith('/system/app/pages')):
- return False, comps.path, url
-
- task = _rewrite_link(url, '')
- idx = task.find('#')
- if idx != -1:
- task = task[:idx]
- task = task.rstrip('/') or '/'
- if task in self.paths_to_skip:
- return False, task, url
- if task in self.queue.all_tasks():
- return False, task, url
-
- new_url_comps = urllib.parse.ParseResult(
- comps.scheme,
- comps.netloc,
- comps.path.rstrip('/') or '/',
- params='',
- query='',
- fragment='')
- new_url = urllib.parse.urlunparse(new_url_comps)
-
- all_tasks = self.queue.all_tasks()
- if not self.args.limit or len(all_tasks) < self.args.limit:
- if task not in all_tasks:
- return True, task, new_url
- return False, task, new_url
-
- def _handle_url(self, task, url):
- del task
- prefix = self.args.prefix
- out_dir = self.args.out_dir
- comps = urllib.parse.urlparse(url)
- path = _rewrite_link(url, prefix)
-
- res = ''
- links = []
-
- for i in range(4):
- try:
- with urllib.request.urlopen(url) as resp:
- content_type = resp.getheader('Content-Type')
- content = resp.read()
- except Exception as e:
- if i < 3:
- time.sleep(1.0)
- continue
-
- res = '%s: %s' % (type(e), str(e))
- return res, links
-
- if content_type.startswith('text/html'):
- page, links = _rewrite_html(content.decode('utf-8'), prefix)
- new_content = page.encode('utf-8')
- path = path.rstrip('/') + '/index.html'
- elif content_type == 'text/css':
- page, links = _rewrite_css(content.decode('utf-8'), prefix)
- new_content = page.encode('utf-8')
- else:
- new_content = content
- common.write_if_changed(out_dir + path, new_content)
- return res, links
-
-
-def _rewrite_html(page, prefix):
- links = set()
- page = _rewrite_tag(page, prefix, links, 'a', 'href')
- page = _rewrite_tag(page, prefix, links, 'img', 'src')
- page = _rewrite_tag(page, prefix, links, 'script', 'src')
- for val in ('stylesheet', 'shortcut icon', 'apple-touch-icon'):
- page = _rewrite_tag(page, prefix, links, 'link', 'href', val)
-
- return page, links
-
-
-def _rewrite_tag(page, prefix, links, tag, attr, rel=None, follow=True):
- new_page = ''
- if rel:
- tag_str = '<%s rel="%s"' % (tag, rel)
- else:
- tag_str = '<%s' % (tag,)
- attr_str = '%s="' % (attr,)
-
- pos = 0
- while True:
- idx = page.find(tag_str, pos)
- if idx == -1:
- new_page += page[pos:]
- break
-
- tag_close_idx = page.find('>', idx)
- attr_idx = page.find(attr_str, idx)
- if attr_idx == -1 or attr_idx > tag_close_idx:
- new_page += page[pos:tag_close_idx]
- pos = tag_close_idx
- continue
-
- link_start = attr_idx + len(attr_str)
- link_end = page.find('"', link_start)
-
- link = html.unescape(page[link_start:link_end])
- new_link = _rewrite_link(link, prefix)
-
- if follow or tag != 'a':
- links.add(link)
-
- new_page += page[pos:link_start]
- new_page += new_link
- pos = link_end
-
- return new_page
-
-
-def _rewrite_css(content, prefix):
- content, links = _rewrite_rule(content, prefix, '@import "', '"')
- content, more_links = _rewrite_rule(content, prefix, 'url(', ')')
- links.update(more_links)
-
- return content, links
-
-
-def _rewrite_rule(content, prefix, start, end):
- new_content = ''
- links = set()
-
- pos = 0
- while True:
- start_idx = content.find(start, pos)
- if start_idx == -1:
- new_content += content[pos:]
- break
-
- end_idx = content.find(end, start_idx)
-
- link_start = start_idx + len(start)
-
- if ((content[link_start] == '"' and content[end_idx-1] == '"') or
- (content[link_start] == "'" and content[end_idx-1] == "'")):
- link_start += 1
- end_idx -= 1
- link = content[link_start:end_idx]
- new_link = _rewrite_link(link, prefix)
-
- new_content += content[pos:link_start]
- new_content += new_link
- pos = end_idx
-
- return new_content, links
-
-
-def _rewrite_link(link, prefix):
- new_link = link
- if '?' in new_link:
- new_link = link[0:new_link.index('?')]
- for alt in common.alternates:
- new_link = new_link.replace(alt, '')
- for site_prefix in ('/sites/p/058338/','/sites/p/d955fc'):
- if new_link.startswith(site_prefix):
- new_link = new_link[len(site_prefix):]
- if new_link.startswith('/_/rsrc'):
- new_link = '/' + '/'.join(new_link.split('/')[4:])
- new_link = new_link.rstrip('/') or '/'
- if prefix and new_link.startswith('/'):
- new_link = '/%s%s' % (prefix, new_link)
- return new_link
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
diff --git a/chromium/docs/website/scripts/export.py b/chromium/docs/website/scripts/export.py
deleted file mode 100755
index 4e53aea81bd..00000000000
--- a/chromium/docs/website/scripts/export.py
+++ /dev/null
@@ -1,457 +0,0 @@
-#!/usr/bin/env vpython3
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Export www.chromium.org to local files.
-
-This script uses the Google GData and Google Sites APIs to extract the
-content from http://www.chromium.org/ and write it into local files
-that can be used to serve the same content.
-
-The APIs are documented at
-
-https://developers.google.com/sites/docs/1.0/developers_guide_protocol
-https://developers.google.com/gdata/docs/json
-
-Because www.chromium.org is a public site, this script requires no
-authentication to work.
-
-The exporting process attempts to convert the original content into
-sane modern HTML as much as possible without changing the appearance
-of any page significantly, with some minor exceptions.
-"""
-
-import argparse
-import collections
-import io
-import json
-import os
-import pdb
-import sys
-import time
-import traceback
-import xml.etree.ElementTree as ET
-
-from urllib.parse import urlparse
-from urllib.request import urlopen
-from urllib.error import HTTPError, URLError
-
-import yaml
-
-import common
-import html2markdown
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('--force', action='store_true',
- help='ignore updated timestamps in local cache')
- parser.add_argument('-j', '--jobs', type=int, default=common.cpu_count())
- parser.add_argument('-t', '--test', action='store_true')
- parser.add_argument('-r', '--raw', action='store_true')
- parser.add_argument('-v', '--verbose', action='count')
- parser.add_argument('--max_results', type=int, default=5000)
- parser.add_argument('--start-index', type=int, default=1)
- parser.add_argument('--paths-to-skip')
- parser.add_argument('--path-list')
- parser.add_argument('path', nargs='*')
- args = parser.parse_args()
-
- entries = _entries(args)
-
- if args.path:
- paths_to_export = ['%s%s' % ('/' if not path.startswith('/') else '',
- path)
- for path in args.path]
- elif args.path_list:
- paths_to_export = common.read_paths(args.path_list)
- else:
- paths_to_export = []
-
- if args.paths_to_skip:
- paths_to_skip = set(common.read_paths(args.paths_to_skip))
- else:
- paths_to_skip = set(
- common.read_paths(os.path.join(common.REPO_DIR,
- 'scripts', 'paths_to_skip.txt')))
-
- max_input_mtime = max(os.stat(__file__).st_mtime,
- os.stat(common.__file__).st_mtime,
- os.stat(html2markdown.__file__).st_mtime)
-
- updated = 0
- paths = []
-
- if args.test:
- entry = _find_entry_by_path(paths_to_export[0], entries)
- if entry:
- metadata = _metadata(entry, entries)
- path = _path(entry, entries)
- _ = _handle_entry(path,
- (entry, metadata, max_input_mtime, args.force,
- args.raw))
- content = common.read_text_file('%s%s/index.md' %
- (common.SITE_DIR, path))
- print(content)
- return 0
- else:
- print('%s not found' % paths_to_export[0])
- return 1
-
- q = common.JobQueue(_handle_entry, args.jobs)
-
- paths_to_export = set(paths_to_export)
- exported_pages = set()
- for i, entry in enumerate(list(entries.values())[:args.max_results]):
- if entry['kind'] in ('webpage', 'listpage',
- 'announcementspage', 'filecabinet'):
- metadata = _metadata(entry, entries)
- path = _path(entry, entries)
-
- if path in paths_to_skip:
- continue
- exported_pages.add(path)
- elif entry['kind'] == 'attachment':
- metadata = {}
- path = entry['url'].replace(
- 'https://sites.google.com/a/chromium.org/dev/', '/').rstrip('/')
- if path in paths_to_skip:
- continue
- else:
- continue
- if not paths_to_export or (path in paths_to_export):
- q.request(path, (entry, metadata, max_input_mtime, args.force,
- False))
-
- ret = 0
- for path, res, did_update in q.results():
- if res:
- ret = 1
- if did_update:
- updated += 1
-
- print('updated %d entries' % updated)
- return ret
-
-
-def _find_entry_by_path(path, entries):
- for entry in entries.values():
- if entry['kind'] not in ('webpage', 'listpage',
- 'announcmentspage', 'filecabinet'):
- continue
- entry_path = _path(entry, entries)
- if entry_path == path:
- return entry
- return None
-
-
-def _handle_entry(task, obj):
- entry, metadata, max_input_mtime, force, raw = obj
- err = ''
- did_update = False
-
- if not task.startswith('/'):
- return 'malformed task', False
-
- yaml.SafeDumper.org_represent_str = yaml.SafeDumper.represent_str
-
- if task in (
- '/developers/jinja',
- '/developers/polymer-1-0',
- '/devtools/breakpoints-tutorial/index.html',
- '/devtools/breakpoints-tutorial/script.js',
- ):
- # TODO: Eleventy chokes on these files.
- return '', False
-
- def repr_str(dumper, data):
- if '\n' in data:
- return dumper.represent_scalar(u'tag:yaml.org,2002:str', data,
- style='|')
- return dumper.org_represent_str(data)
-
- yaml.add_representer(str, repr_str, Dumper=yaml.SafeDumper)
-
-
- mtime = _to_ts(entry['updated'])
- target_mtime = max(mtime, max_input_mtime)
- if entry['kind'] in ('webpage',
- 'listpage',
- 'announcementspage',
- 'filecabinet'):
- path = '%s%s/%s' % (common.SITE_DIR, task, 'index.md')
- if _needs_update(path, target_mtime, force):
- if raw:
- content = entry['content']
- else:
- content_sio = io.StringIO(entry['content'])
- md_sio = io.StringIO()
- md_sio.write('---\n')
- md_sio.write(yaml.safe_dump(metadata))
- md_sio.write('---\n\n')
- url_converter = _URLConverter()
- html2markdown.Convert(content_sio, md_sio, url_converter)
- if entry['kind'] == 'listpage':
- md_sio.write('\n\n')
- _write_listitems(md_sio, entry)
- content = md_sio.getvalue()
- content = content.replace(
- 'chromium.googlesource.com/chromium/src/+/master/',
- 'chromium.googlesource.com/chromium/src/+/HEAD/')
- content = content.replace(' \b\b\b\b', '')
-
- did_update = common.write_if_changed(path, content, mode='w')
- else:
- did_update = False
- elif entry['kind'] == 'listitem':
- # Handled as part of the corresponding 'listpage' entry.
- pass
- elif entry['kind'] == 'announcement':
- # TODO: implement me.
- pass
- elif entry['kind'] == 'attachment':
- path = '%s%s' % (common.SITE_DIR, task)
- path = path.replace(':', '_')
- path = path.replace('%20', ' ')
- path = path.replace('%2B', '+')
- if task in (
- '/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.png',
- '/developers/design-documents/cookie-split-loading/objects.png',
- ):
- # These are expected 404's that we ignore.
- did_update = False
- elif _needs_update(path, mtime, force):
- try:
- fp = urlopen(entry['url'])
- content = fp.read()
- did_update = common.write_if_changed(path, content)
- except (HTTPError, URLError, TimeoutError) as e:
- err = 'Error: %s' % e
-
- elif entry['kind'] == 'comment':
- # ignore comments in the migration
- pass
- elif entry['kind'] == 'tag':
- err = 'tag kind not implemented'
- else:
- err = 'unknown kind %s' % entry['kind']
-
- return err, did_update
-
-
-def _write_listitems(content, entry):
- if not entry['listitems']:
- return
-
- headers = entry['listitems'][0].keys()
- rows = sorted(entry['listitems'],
- key=lambda row: row.get('Release') or '')
-
- content.write('<table>\n')
- content.write(' <tr>\n')
- for header in headers:
- content.write(' <th>%s</th>\n' % header)
- content.write(' </tr>\n')
- for row in rows:
- content.write(' <tr>\n')
- for value in row.values():
- if value and value.startswith('<a xmlns='):
- value = value.replace(' xmlns="http://www.w3.org/1999/xhtml"', '')
- content.write(' <td>%s</td>\n' % (value or ''))
- content.write(' </tr>\n')
- content.write('</table>\n')
-
-
-class _URLConverter:
- def Translate(self, href):
- if not href:
- return ''
-
- for path in common.alternates:
- if href.startswith(path):
- href = href.replace(path, '')
-
- if href.startswith('/_/rsrc'):
- href = '/' + '/'.join(href.split('/')[4:])
-
- url = urlparse(href)
- if '?' in href and url.netloc == '':
- href = href[0:href.index('?')]
- if 'Screenshot' in href:
- head, tail = href.split('Screenshot')
- tail = tail.replace(':', '%3A')
- href = head + 'Screenshot' + tail
- return href
-
-
-def _path(entry, entries):
- path = entry['page_name']
- parent_id = entry.get('parent_id')
- while parent_id:
- path = entries[parent_id]['page_name'] + '/' + path
- parent_id = entries[parent_id].get('parent_id')
-
- path = ('/' + path).rstrip('/') or '/'
- return path
-
-
-def _metadata(entry, entries):
- metadata = {}
- metadata['page_name'] = entry['page_name']
- metadata['title'] = entry['title']
-
- crumbs = []
- parent_id = entry.get('parent_id')
- while parent_id:
- parent = entries[parent_id]
- path = _path(parent, entries)
- title = parent['title']
- crumbs = [[path, title]] + crumbs
- parent_id = parent.get('parent_id')
-
- metadata['breadcrumbs'] = crumbs
-
- if metadata['page_name'] in (
- 'chromium-projects',
- 'chromium',
- ):
- metadata['use_title_as_h1'] = False
-
- return metadata
-
-
-def _needs_update(path, mtime, force):
- if force:
- return True
- if os.path.exists(path):
- st = os.stat(path)
- return mtime > st.st_mtime
- return True
-
-
-def _entries(args):
- entries = {}
- parents = {}
-
- # Looks like Sites probably caps results at 500 entries per request,
- # even if we request more than that.
- rownum = 0
- url = ('https://sites.google.com/feeds/content/chromium.org/dev'
- '?start-index=%d&max-results=%d&alt=json' %
- (args.start_index, 500 - rownum))
- doc, next_url = _fetch(url, args.force)
-
- for rownum, entry in enumerate(doc['feed']['entry'], start=1):
- row = _to_row(entry, rownum)
- entries[row['id']] = row
- if row.get('parent_id'):
- parents.setdefault(row['parent_id'], set()).add(row['id'])
- if args.verbose:
- print(' ... [%d]' % rownum)
- while next_url:
- doc, next_url = _fetch(next_url, args.force)
- for rownum, entry in enumerate(doc['feed']['entry'], start=rownum):
- row = _to_row(entry, rownum)
- entries[row['id']] = row
- if row.get('parent_id'):
- parents.setdefault(row['parent_id'], set()).add(row['id'])
- if args.verbose:
- print(' ... [%d]' % rownum)
-
- for entry_id, entry in entries.items():
- if entry['kind'] == 'listpage':
- entry['listitems'] = [entries[child_id]['fields'] for child_id
- in parents[entry_id]
- if entries[child_id]['kind'] == 'listitem']
-
- return entries
-
-
-def _fetch(url, force):
- path = url.replace('https://sites.google.com/feeds/', 'scripts/feeds/')
- if _needs_update(path, 0, force):
- fp = urlopen(url)
- content = fp.read()
- doc = json.loads(content)
- updated = _to_ts(doc['feed']['updated']['$t'])
- common.write_if_changed(path, content)
- else:
- with open(path) as fp:
- doc = json.load(fp)
- next_url = _find_link(doc['feed'], 'next')
- return doc, next_url
-
-
-def _find_link(doc, rel):
- for ent in doc['link']:
- if ent['rel'] == rel:
- return ent['href']
- return None
-
-
-def _to_row(entry, rownum):
- row = {
- 'rownum': rownum,
- 'content': entry.get('content', {}).get('$t'),
- 'id': _to_id(entry['id']['$t']),
- 'kind': entry['category'][0]['label'],
- 'published': entry['published']['$t'],
- 'updated': entry['updated']['$t'],
- }
-
- row['page_name'] = entry.get('sites$pageName', {}).get('$t')
- row['title'] = entry.get('title', {}).get('$t')
- row['alt_url'] = _find_link(entry, 'alternate')
-
- if row['kind'] == 'attachment':
- row['url'] = _find_link(entry, 'alternate')
- else:
- row['url'] = _find_link(entry, 'self')
-
- if row['kind'] == 'listitem':
- path = row['url'].replace('https://sites.google.com',
- os.path.join(common.REPO_DIR, 'scripts'))
- if os.path.exists(path):
- xml_content = common.read_text_file(path)
- else:
- print('fetching %s' % row['url'])
- with urlopen(row['url']) as fp:
- xml_content = fp.read()
- common.write_if_changed(path, xml_content)
-
- root = ET.fromstring(xml_content)
- fields = root.findall('{http://schemas.google.com/spreadsheets/2006}field')
- row['fields'] = collections.OrderedDict((el.attrib['name'], el.text) for el in fields)
-
- parent_url = _find_link(entry,
- 'http://schemas.google.com/sites/2008#parent')
- if parent_url:
- row['parent_id'] = _to_id(parent_url)
- return row
-
-
-def _to_id(url):
- return url[url.rfind('/') + 1:]
-
-
-def _to_ts(iso_time):
- return time.mktime(time.strptime(iso_time, '%Y-%m-%dT%H:%M:%S.%fZ'))
-
-if __name__ == '__main__':
- try:
- main()
- except Exception:
- extype, value, tb = sys.exc_info()
- traceback.print_exc()
- pdb.post_mortem(tb)
diff --git a/chromium/docs/website/scripts/fetch_lobs.py b/chromium/docs/website/scripts/fetch_lobs.py
deleted file mode 100755
index c10052e4c97..00000000000
--- a/chromium/docs/website/scripts/fetch_lobs.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env vpython3
-# Copyright 2022 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Download all the LOBS in //site."""
-
-import argparse
-import hashlib
-import io
-import os
-import sys
-import time
-import urllib3
-from urllib.error import HTTPError, URLError
-
-import common
-
-http = None
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('-f', '--force', action='store_true')
- parser.add_argument('-j', '--jobs', type=int, default=common.cpu_count())
- parser.add_argument('-m', '--multiprocess', action='store_true',
- default=False)
- args = parser.parse_args()
- q = common.JobQueue(_handle, args.jobs, args.multiprocess)
- paths = [path.replace('.sha1', '')
- for path in common.walk(common.SITE_DIR)
- if path.endswith('.sha1')]
-
- stdin = ''
- for path in paths:
- with open(os.path.join(common.SITE_DIR, path + '.sha1'), 'r') as fp:
- expected_sha1 = fp.read().strip()
-
- if not args.force and os.path.exists(os.path.join(common.SITE_DIR, path)):
- with open(os.path.join(common.SITE_DIR, path), 'rb') as fp:
- s = hashlib.sha1()
- s.update(fp.read())
- actual_sha1 = s.hexdigest()
- if args.force or (actual_sha1 != expected_sha1):
- q.request(path, (args, expected_sha1))
- else:
- q.request(path, (args, expected_sha1))
-
- if not len(q.all_tasks()):
- return 0
-
- start = time.time()
- updated = 0
- failed = False
- total_bytes = 0
- for path, res, resp in q.results():
- did_update, num_bytes = resp
- if res:
- print('%s failed: %s' % (path, res))
- failed = True
- if did_update:
- updated += 1
- total_bytes += num_bytes
- end = time.time()
-
- print('Fetched %d LOBs (%.1fMB) in %.3f seconds (%.1fMbps).' %
- (updated,
- (total_bytes / 1_000_000),
- (end - start),
- (total_bytes * 8 / (end - start) / 1_000_000)))
- return 1 if failed else 0
-
-
-def _url(expected_sha1):
- return 'https://storage.googleapis.com/%s/%s' % (
- 'chromium-website-lob-storage', expected_sha1)
-
-
-def _handle(path, obj):
- args, expected_sha1 = obj
- global http
- if http is None:
- http = urllib3.PoolManager()
- url = _url(expected_sha1)
- total_bytes = 0
- for i in range(4):
- try:
- resp = http.request('GET', url)
- s = hashlib.sha1()
- s.update(resp.data)
- actual_sha1 = s.hexdigest()
- if actual_sha1 != expected_sha1:
- return ('sha1 mismatch: expected %s, got %s' % (
- expected_sha1, actual_sha1), (False, len(resp.data)))
- common.write_binary_file(os.path.join(common.SITE_DIR, path),
- resp.data)
- except (HTTPError, URLError, TimeoutError) as e:
- if i < 4:
- time.sleep(1)
- else:
- return str(e), (False, 0)
- except Exception as e:
- return str(e), (False, 0)
- return '', (True, len(resp.data))
-
-if __name__ == '__main__':
- sys.exit(main())
-
diff --git a/chromium/docs/website/scripts/fetch_node_modules.py b/chromium/docs/website/scripts/fetch_node_modules.py
deleted file mode 100755
index c8b4d348637..00000000000
--- a/chromium/docs/website/scripts/fetch_node_modules.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Simple script to download the pinned Node modules from GCS.
-
-This script exists because the node_modules archive currently contains
-a node_modules/.bin directory with a bunch of symlinked files in it,
-and download_from_google_storage.py won't let you have archives with
-symlinks.
-
-In theory we should probably rebuild the node_modules distro without
-the ./bin directory (using `npm install --no-bin-lnks`) but that would
-cause the build scripts to fail and we'd have to replace `npmw` with
-something else.
-"""
-
-import argparse
-import hashlib
-import os
-import sys
-import tarfile
-from urllib.request import urlopen
-
-SRC_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
-
-def main():
- parser = argparse.ArgumentParser(description=__doc__)
- parser.parse_args()
-
- with open(os.path.join(SRC_ROOT, 'node_modules.tar.gz.sha1')) as fp:
- expected_sha1 = fp.read().strip()
-
- actual_sha1 = None
- tgz = os.path.join(SRC_ROOT, 'node_modules.tar.gz')
- if os.path.exists(tgz):
- with open(tgz, 'rb') as fp:
- s = hashlib.sha1()
- s.update(fp.read())
- actual_sha1 = s.hexdigest()
-
- # TODO(dpranke): Consider whether we should validate that node_modules/
- # and all of the expected files exist as well.
- if actual_sha1 == expected_sha1:
- return 0
-
- url = 'https://storage.googleapis.com/%s/%s' % (
- 'chromium-website-lob-storage', expected_sha1)
- with urlopen(url) as url_fp, open(tgz, 'wb') as tgz_fp:
- tgz_fp.write(url_fp.read())
-
- try:
- # TODO(dpranke): download_from_google_storage puts in a fair amount
- # of effort to not clobber an existing directory until it is sure it
- # can extract the archive completely. Consider whether we should do
- # the same.
- with tarfile.open(tgz, 'r:gz') as tar:
- tar.extractall(path=SRC_ROOT)
- return 0
- except Exception as e:
- print(e)
- return 1
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/docs/website/scripts/gen_paths_that_were_edited_by_hand b/chromium/docs/website/scripts/gen_paths_that_were_edited_by_hand
deleted file mode 100755
index dc1edcd3e12..00000000000
--- a/chromium/docs/website/scripts/gen_paths_that_were_edited_by_hand
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# List of bulk edits as of 12/7:
-
-# 4d7339a3 - initial import (11/4)
-# 3d5e48fc - 2nd import (11/5)
-# 7aa01375 - rowspan/colspan fix
-# 4cd78e70 - 3rd import (11/9)
-# 0f82ab83 - outbound URL fix
-# f1f62e9f - master->main fix
-# 6ca49749 - 4th import (11/23)
-# d154bcbe - fix spaces in filenames
-# d1d2e861 - fix '%3A'
-# 8a4fd299 - HEAD
-
-# Command to list all pages that were edited by hand and should not be
-# re-imported automatically:
-
-(git diff --name-only 4d7339a3..3d5e48fc^ site && \
- git diff --name-only 3d5e48fc..7aa01375^ site && \
- git diff --name-only 7aa01375..4cd78e70^ site && \
- git diff --name-only 4cd78e70..0f82ab83^ site && \
- git diff --name-only 0f82ab83..f1f62e9f^ site && \
- git diff --name-only f1f62e9f..6ca49749^ site && \
- git diff --name-only 9308f80e..8a4fd299) | \
- grep index.md | sort | uniq | sed -e 's-^site--' -e 's-/index.md--' | \
- grep -v '^$'
-
diff --git a/chromium/docs/website/scripts/gen_paths_to_skip b/chromium/docs/website/scripts/gen_paths_to_skip
deleted file mode 100755
index 4da08d96187..00000000000
--- a/chromium/docs/website/scripts/gen_paths_to_skip
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-base_dir=$(dirname "$0")
-
-$base_dir/gen_paths_that_were_edited_by_hand > $base_dir/paths_that_were_edited_by_hand.txt
-
-cat $base_dir/404s.txt $base_dir/paths_that_were_edited_by_hand.txt | sort > $base_dir/paths_to_skip.txt
diff --git a/chromium/docs/website/scripts/html2markdown.py b/chromium/docs/website/scripts/html2markdown.py
deleted file mode 100644
index 280223e34b8..00000000000
--- a/chromium/docs/website/scripts/html2markdown.py
+++ /dev/null
@@ -1,1343 +0,0 @@
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""HTML to Markdown renderer."""
-
-import os
-import re
-import io
-import textwrap
-import urllib
-import xml.sax
-
-
-class _Flags:
- # Whether to render h1s and h2s with underlined - and =.
- underline_headers = False
-
- # The set of characters to escape with \'\\\' in the
- # Markdown. This is not the set of all special Markdown
- # characters, but rather those characters that tend to
- # get misinterpreted as Markdown syntax the most. Blindly
- # escaping all special Markdown characters results in ugly
- # Markdown.
- escape_chars = r'\`*[]'
-
- # Format for italic tags.
- italic_format = '*'
-
- # Format for bold tags.
- bold_format = '**'
-
- # Format for strikethrough tags.
- strike_format = '~~'
-
- # Format for underline tags.
- highlight_format = '=='
-
- # Number of spaces to indent an unordered list.
- # This total includes the bullet.
- # For example, a value of 4 yields '* '
- unordered_list_indent = 4
-
- # Number of spaces to indent an ordered list.
- # This total includes the number.
- # For example, a value of 4 yields '1. '
- ordered_list_indent = 4
-
- # The DIV blocks that should be formatted as code.
- code_class_regex = r'^sites-codeblock sites-codesnippet-block$'
-
- # The class of DIV blocks used for table of contents.
- toc_class_regex = r'^sites-embed-content sites-embed-type-toc$'
-
- # The class of DIV blocks that should be ignored.
- ignore_class_regex = r''
-
- # The style of DIV blocks that should be ignored.
- ignore_style_regex = r'^display:none;$'
-
- # Format text blocks to the given line width. Set to zero
- # to disable line wrapping.
- line_width = 80
-
- # Whether to use indented code blocks, if False use fenced.
- indented_code_blocks = False
-
- # Whether to use HTML code blocks instead of fenced code
- # blocks if source code block includes formatted text.
- allow_html_code_blocks = True
-
- # Links that are automatically recognized by the renderer.
- shortlinks_regex = r'^http://(ag|b|cl|g|go|who)/'
-
- # Print the fragment tree for debugging.
- debug_print_tree = False
-
-
-FLAGS = _Flags()
-
-
-def _EscapeText(text, reserved_chars):
- """Escapes any reserved characters with a backslash.
-
- Args:
- text: The string to escape.
- reserved_chars: A string of reserved characters that need to be escaped.
-
- Returns:
- The escaped text.
- """
- markdown = io.StringIO()
- for c in text:
- if c in reserved_chars:
- markdown.write('\\')
- markdown.write(c)
- return markdown.getvalue()
-
-
-def _EscapeContentForHtml(text):
- result = io.StringIO()
- escapes = {'<': '&lt;', '>': '&gt;'}
- for c in text:
- result.write(c if c not in escapes else escapes[c])
- return result
-
-
-ENCODED_NEWLINE = '&#%d;' % ord('\n')
-
-
-def _RestoreEncodedNewlines(text):
- return text.replace(ENCODED_NEWLINE, '\n')
-
-
-def _WrapLine(line, indent):
- """Wraps the line to fit into the column limit.
-
- Args:
- line: The string to wrap.
- indent: An integer with the number of columns of indentation.
-
- Returns:
- The wrapped text.
- """
- if FLAGS.line_width > 0:
- return ('\n' + ' ' * indent).join(textwrap.wrap(
- line,
- width=FLAGS.line_width - indent,
- break_long_words=False,
- break_on_hyphens=False))
- return line
-
-
-class Fragment:
- """Base class for all output fragments.
-
- To generate a line of output, the methods will be called in the following
- order:
-
- WriteIndent()
- WriteContentIntoParentAndClear()
- ConsumeContent() -- for the topmost fragment only
- StripLine()
- WrapLine()
- """
-
- def __init__(self, indent, prefix, suffix):
- self._content = io.StringIO()
- self._indent = indent
- self._prefix = prefix
- self._suffix = suffix
- self._parent = None
- self._children = []
-
- def __repr__(self):
- debug_print = lambda text: text.encode('utf-8') if text else ''
- return ('{' +
- self.__class__.__name__ +
- ': indent=' + debug_print(self._indent) +
- '; prefix=' + debug_print(self._prefix) +
- '; content=' + debug_print(self._content.getvalue()) +
- '; suffix=' + debug_print(self._suffix) +
- '}')
-
- def SetParent(self, parent):
- self._parent = parent
-
- def AddChild(self, node):
- self._children.append(node)
- node.SetParent(self)
- return node
-
- def GetChildren(self):
- return self._children
-
- def _AllChildren(self):
- all_children = []
- def Traverse(fragment):
- for c in fragment.GetChildren():
- all_children.append(c)
- Traverse(c)
- Traverse(self)
- return all_children
-
- def WriteIndent(self, output):
- if self._indent:
- output.write(self._indent)
-
- def WriteContentIntoParentAndClear(self):
- self._WriteContent(self._parent._content) # pylint: disable=protected-access
- self._ClearContent()
- self._children = []
-
- def _WriteContent(self, output):
- """Implementation of content rendering. Can be overridden in subclasses."""
- self._Write(output, self._prefix, self._content.getvalue(), self._suffix)
-
- def _Write(self, output, prefix, content, suffix):
- """Default implementation of content rendering for reuse by subclasses."""
- has_content = bool(content.strip())
- if prefix and has_content:
- output.write(prefix)
- output.write(content)
- if suffix and has_content:
- output.write(suffix)
-
- def UnsetSuffix(self):
- self._suffix = ''
-
- def UnsetPrefix(self):
- self._prefix = ''
-
- def _UpdatePrefixAndSuffix(self, prefix, suffix):
- if self._prefix:
- self._prefix = prefix
- if self._suffix:
- self._suffix = suffix
-
- def _ClearContent(self):
- """Clears the content. This will only be called after it's been written."""
- self._content = io.StringIO()
-
- def ConsumeContent(self):
- content = self._content
- self._ClearContent()
- return content
-
- def Append(self, text):
- """Appends text.
-
- Args:
- text: The string to append, it will be escaped.
- """
- assert isinstance(text, str)
- self._content.write(self.EscapeText(text))
-
- def EscapeText(self, text):
- """Escapes any reserved characters when Append() is called with text.
-
- By default this defers to the parent fragment.
-
- Args:
- text: The string to escape.
-
- Returns:
- The escaped string.
- """
- if self._parent:
- return self._parent.EscapeText(text)
- return text
-
- def StripLine(self, text):
- """Does any needed stripping of whitespace.
-
- Some blocks (code for example) will want to preserve whitespace, while
- others will want to coalesce it together. By default this defers to the
- parent fragment.
-
- Args:
- text: The string to strip
-
- Returns:
- The stripped string.
- """
- if self._parent:
- return self._parent.StripLine(text)
- return text
-
- def WrapLine(self, line, indent):
- """Wraps the line to fit into the column limit, if necessary.
-
- Most blocks (code for example) will want to preserve whitespace and won't
- break their output.
-
- Args:
- text: The string to wrap.
- indent: Indent string.
- Returns:
- The wrapped string.
- """
- del indent
- return line
-
- def NeedsToMergeWith(self, text):
- del text
- return False
-
-
-class HTML(Fragment):
- """Markdown fragment that consists of just an unescaped HTML string."""
-
- def __init__(self, prefix=None, suffix=None):
- super().__init__(indent=None, prefix=prefix, suffix=suffix)
-
- def EscapeText(self, text):
- return text
-
-
-class Href(Fragment):
- """HTML fragment containing an <a href=> tag. Used within table cells.
-
- If the href falls within a table cell, using a Href() element will allow
- us to have proper formatting; the Markdown-style Link() element will not
- be processed properly.
- """
- def __init__(self, href):
- super().__init__(indent=None, prefix='<a href="%s">' % href, suffix='</a>')
-
-
-class Text(Fragment):
- """Markdown fragment that consists of just a string."""
-
- def __init__(self, indent=None, prefix=None, suffix=None):
- super().__init__(indent, prefix, suffix)
-
-
-class IgnoreBlock(Fragment):
- """Markdown fragment that omits all content."""
-
- def __init__(self):
- super().__init__(None, None, None)
-
-
-class TextBlock(Text):
- """A TextBlock coalesces all spaces and escapes all reserved chars."""
-
- def EscapeText(self, text):
- text = _EscapeContentForHtml(text).getvalue()
- return _EscapeText(text, FLAGS.escape_chars)
-
- def StripLine(self, text):
- # Treat newlines as spaces and then coalesce spaces.
- text = text.replace('\n', ' ')
- # Replace all Unicode nonbreaking spaces with simple spaces. This is safer
- # than deletion since spaces are coalesced below anyway.
- text = text.replace(chr(160), ' ')
-
- return re.sub(r' +', ' ', text.strip())
-
-
-class Div(TextBlock):
- """Placeholder that helps with the two-column layout conversion."""
-
- def __init__(self, cls):
- self.cls = cls
- super().__init__()
-
-
-class Table(TextBlock):
- """Placeholder that identifies when we're in a (data) table.
-
- (As opposed to a table being used for layout-purposes, which we don't
- want to export.)
- """
- cls = None
-
-
-class TD(Text):
- def __init__(self, rowspan, colspan):
- prefix = '<td'
- if rowspan and str(rowspan) != '1':
- prefix += ' rowspan=%s' % rowspan
- if colspan and str(colspan) != '1':
- prefix += ' colspan=%s' % colspan
- prefix += '>'
- super().__init__(indent='', prefix=prefix, suffix='</td>')
-
-
-class Content(TextBlock):
- """Placeholder that identifies when we're processing the main content."""
- cls = None
-
-
-class WrappedTextBlock(TextBlock):
- """A WrappedTextBlock wraps the output lines to fit into the column limit."""
-
- def WrapLine(self, line, indent):
- return _WrapLine(line, len(indent))
-
-
-class BlockquoteBlock(WrappedTextBlock):
- """A BlockquoteBlock wraps content and prepends each line with '> '.
-
- The generator must emit BlockquoteBlocks with no indent for paragraphs
- inside a blockquote. This will allow propagating the final call to WrapLine
- up to the outermost BlockquoteBlock which will wrap the lines and prepend
- each of them with the indent.
- """
-
- def __init__(self, indent='> '):
- super().__init__(indent, None, None)
-
- def WrapLine(self, line, indent):
- if not self._indent and self._parent:
- return self._parent.WrapLine(line, indent)
- wrapped = _WrapLine(line, len(indent))
- lines = wrapped.splitlines(True)
- return indent.join([l.lstrip() for l in lines])
-
-
-class CodeBlock(Text):
- """Base class for different code block fragment implementations."""
-
- def EscapeText(self, text):
- return text
-
- def StripLine(self, text):
- # Completely ignore newlines in code blocks. Sites always uses <br/>.
- return text.replace('\n', '')
-
- def ChangeToHtml(self):
- content = self._content.getvalue()
- if content:
- self._content = _EscapeContentForHtml(content)
-
-
-class IndentedCodeBlock(CodeBlock):
- """A IndentedCodeBlock indents by four spaces."""
-
- def __init__(self, indent=' '):
- super().__init__(indent, None, None)
-
-
-class FencedCodeBlock(CodeBlock):
- """A FencedCodeBlock is fenced with triple backticks (```).
-
- To render correctly, content writing must not happen
- unless the end of the source code block has been encountered.
- That is, the entire code block from the source HTML must
- be rendered in a single write pass.
- """
-
- def __init__(self, indent=None,
- prefix='```none' + ENCODED_NEWLINE,
- suffix=ENCODED_NEWLINE + '```'):
- super().__init__(indent, prefix, suffix)
-
- def WriteIndent(self, output):
- # Adjust inner fragments and self before rendering.
- if FLAGS.allow_html_code_blocks:
- has_formatted_text = False
- for c in self._AllChildren():
- if isinstance(c, FormattedText):
- c.ChangeToHtml()
- has_formatted_text = True
- if has_formatted_text:
- for c in self._AllChildren():
- if isinstance(c, CodeBlock):
- c.ChangeToHtml()
- self._UpdatePrefixAndSuffix(
- '<pre><code>', ENCODED_NEWLINE + '</code></pre>')
- super().WriteIndent(output)
-
- def StripLine(self, text):
- text = super().StripLine(text)
- lines = _RestoreEncodedNewlines(text).splitlines()
- return '\n'.join([l for l in lines if l])
-
- def WrapLine(self, line, indent):
- lines = line.splitlines(True)
- return indent.join(lines)
-
-
-class FencedCodeBlockLine(Text):
- """A line of code inside FencedCodeBlock."""
-
- def __init__(self, indent=None,
- prefix=ENCODED_NEWLINE, suffix=ENCODED_NEWLINE):
- super().__init__(indent, prefix, suffix)
-
- def StripLine(self, text):
- text = super().StripLine(text)
- return _RestoreEncodedNewlines(text)
-
-
-class UnderlinedHeader(TextBlock):
- """Markdown fragment for an underlined section header."""
-
- def __init__(self, char):
- super().__init__()
- self._char = char
-
- def _WriteContent(self, output):
- length = len(self.StripLine(self._content.getvalue()))
- if length > 0:
- # '\n' will be stripped, so use an encoded '\n' that we can later replace
- # after the line is stripped.
- self._Write(output,
- None,
- self._content.getvalue(),
- ENCODED_NEWLINE + self._char * length)
-
- def StripLine(self, text):
- text = super().StripLine(text)
- return _RestoreEncodedNewlines(text)
-
-
-class FormattedText(Text):
- """Text wrapped in Markdown formatting."""
-
- def __init__(self, fmt):
- super().__init__(None, fmt, fmt)
-
- def _Pad(self, bigger, smaller):
- return ' ' * (len(bigger) - len(smaller))
-
- def _WriteContent(self, output):
- prefix = self._prefix
- content = self._content.getvalue()
- suffix = self._suffix
- if prefix:
- # If there are whitespaces immediately after the prefix,
- # they must be pushed out before the prefix.
- lstripped = content.lstrip()
- if len(content) > len(lstripped):
- prefix = self._Pad(content, lstripped) + prefix
- content = lstripped
- if suffix:
- # If there are whitespaces immediately before the suffix,
- # they must be pushed out after the suffix.
- rstripped = content.rstrip()
- if len(content) > len(rstripped):
- suffix = suffix + self._Pad(content, rstripped)
- content = rstripped
- self._Write(output, prefix, content, suffix)
-
- def ChangeToHtml(self):
- content = self._content.getvalue()
- if content:
- content = _EscapeContentForHtml(content)
-
-
-class BoldFormattedText(FormattedText):
- """Text formatted as bold."""
-
- def __init__(self):
- super().__init__(FLAGS.bold_format)
-
- def NeedsToMergeWith(self, text):
- return isinstance(text, BoldFormattedText)
-
- def ChangeToHtml(self):
- super().ChangeToHtml()
- self._UpdatePrefixAndSuffix('<b>', '</b>')
-
-
-class ItalicFormattedText(FormattedText):
- """Text formatted as italic."""
-
- def __init__(self):
- super().__init__(FLAGS.italic_format)
-
- def NeedsToMergeWith(self, text):
- return isinstance(text, ItalicFormattedText)
-
- def ChangeToHtml(self):
- super().ChangeToHtml()
- self._UpdatePrefixAndSuffix('<i>', '</i>')
-
-
-class StrikeThroughFormattedText(FormattedText):
- """Text formatted as strike through."""
-
- def __init__(self):
- super().__init__(FLAGS.strike_format)
-
- def NeedsToMergeWith(self, text):
- return isinstance(text, StrikeThroughFormattedText)
-
- def ChangeToHtml(self):
- super().ChangeToHtml()
- self._UpdatePrefixAndSuffix('<s>', '</s>')
-
-
-class HighlightFormattedText(FormattedText):
- """Highlighted text."""
-
- def __init__(self):
- super().__init__(FLAGS.highlight_format)
-
- def NeedsToMergeWith(self, text):
- return isinstance(text, HighlightFormattedText)
-
- def ChangeToHtml(self):
- super().ChangeToHtml()
- self._UpdatePrefixAndSuffix('<u>', '</u>')
-
-
-class ListItem(Text):
- """Item in a list."""
-
- def __init__(self, bullet):
- super().__init__()
- self._bullet = bullet
-
- def WriteIndent(self, output):
- if self._bullet:
- # TODO(dpranke): The original code relied on strings and bytes
- # being interchangeable in Python2, so you could seek backwards
- # from the current location with a relative offset. You can't
- # do that in Python3, apparently.
- #
- # To get around this for the moment, instead of seeking backwards
- # 4 characters, we embed 4 '\b' backspaces, and then have the client
- # do a global search and replace of ' \b\b\b\b' with '' instead.
- #
- # This is awkward, so we should rework this so that this isn't needed.
- #
- # output.seek(-len(self._bullet), os.SEEK_CUR)
- output.write('\b' * len(self._bullet))
- output.write(self._bullet)
- super().WriteIndent(output)
-
- def _ClearContent(self):
- self._bullet = None
- super()._ClearContent()
-
- def WrapLine(self, line, indent):
- return _WrapLine(line, len(indent))
-
-
-class Link(Text):
- """Markdown link."""
-
- def __init__(self, href):
- super().__init__()
- self._href = href
- self._url_opener_prefix = ''
- self._url_opener_suffix = ''
-
- def MakeAnImage(self, width, height):
- self._url_opener_prefix = '!'
- if width and height:
- self._url_opener_suffix = (
- '{{width="{}" height="{}"}}'.format(width, height))
-
- def _IsShortLink(self, text):
- if FLAGS.shortlinks_regex and (
- re.compile(FLAGS.shortlinks_regex).match(self._href)):
- parsed_href = urllib.parse.urlsplit(self._href)
- if parsed_href.netloc + parsed_href.path == text:
- return True
- return None
-
- def _WriteLink(self, output, text):
- write_short_link = (not (self._url_opener_prefix or self._url_opener_suffix)
- and self._IsShortLink(text))
- if write_short_link:
- self._Write(output, None, text, None)
- else:
- self._Write(output,
- self._url_opener_prefix + '[',
- text,
- '](' + self._href + ')' + self._url_opener_suffix)
-
- def _WriteContent(self, output):
- text = self._content.getvalue()
- if text:
- if text.startswith('http://') or text.startswith('https://'):
- self._Write(output, '<', text, '>')
- else:
- self._WriteLink(output, text)
-
-
-class Image(Text):
- """Image."""
-
- def __init__(self, src, alt, width, height):
- super().__init__()
- self._src = src
- self._alt = alt or 'image'
- self._width = width
- self._height = height
-
- def _WriteContent(self, output):
- tag = '<img alt="%s" src="%s"' % (self._alt, self._src)
- if self._height:
- tag += ' height=%s' % self._height
- if self._width:
- tag += ' width=%s' % self._width
- tag += '>'
- self._Write(output, '', tag, '')
-
-
-class Code(Text):
- """Inline code."""
-
- def __init__(self):
- super().__init__(None, '`', '`')
-
- def EscapeText(self, text):
- return text
-
- def _WriteContent(self, output):
- prefix = self._prefix
- content = self._content.getvalue()
- suffix = self._suffix
- if '`' in content:
- # If a backtick (`) is present inside inline code, the fragment
- # must use double backticks.
- prefix = suffix = '``'
- # Since having content starting or ending with a backtick would emit
- # triple backticks which designates a fenced code fragment, pad content
- # to avoid this.
- if content.startswith('`'):
- content = ' ' + content
- if content.endswith('`'):
- content += ' '
- self._Write(output, prefix, content, suffix)
-
- def NeedsToMergeWith(self, text):
- return isinstance(text, Code)
-
-
-class EmbeddedContent(Text):
- """Embedded content: Docs, Drawings, Presentations, etc."""
-
- def __init__(self, href, width, height):
- super().__init__()
- self._href = href
- self._width = width
- self._height = height
-
- def _WriteContent(self, output):
- parsed_href = urllib.parse.urlsplit(self._href)
- if parsed_href.scheme == 'http':
- parsed_href = urllib.parse.SplitResult(
- 'https', parsed_href.netloc, parsed_href.path, parsed_href.query,
- parsed_href.fragment)
- # Note: 'allow="fullscreen"' is requested for all content for simplicity.
- # g3doc server has dedicated logic to deal with these requests.
- element = '<iframe src="{}"{} allow="fullscreen" />'.format(
- urllib.parse.urlunsplit(parsed_href),
- (' width="{}" height="{}"'.format(self._width, self._height) if (
- self._width and self._height) else ''))
- self._Write(output, None, element, None)
-
-
-class ListInfo:
-
- def __init__(self, tag):
- self.tag = tag # The tag used to start the list
- self.item_count = 0 # The number of items in the list
-
-
-class FragmentTree:
- """Class for managing a tree of fragments.
-
- There is a "scope" formed by nested fragments, e.g.
- italic fragment inside bold fragment inside paragraph.
- The scope is stored in the stack. For convenience,
- the stack always have one element.
-
- Fragments popped out from the scope may be re-added
- back into the tree as children of the last fragment.
- This allows "chaining" of structured content for future
- processing. For example, if there were several bold
- fragments inside a paragraph interleaved with fragments
- of regular text, all these fragments will end up as
- children of the paragraph fragment.
-
- """
-
- def __init__(self, top_fragment):
- self._stack = [top_fragment]
-
- def ActiveFragmentScopeDepth(self):
- return len(self._stack) - 1
-
- def StartFragment(self, fragment):
- fragment.SetParent(self._stack[-1])
- self._stack.append(fragment)
- return fragment
-
- def EndFragment(self):
- return self._stack.pop()
-
- def AppendFragment(self, fragment):
- return self._stack[-1].AddChild(fragment)
-
- def _ApplyRecursivelyToNode(self, node, scope_operation, operation, # pylint: disable=missing-docstring
- debug_indent):
- if not debug_indent:
- for child in node.GetChildren():
- self._ApplyRecursivelyToNode(child, scope_operation, operation, None)
- else:
- debug_indent += ' c '
- for child in node.GetChildren():
- print(debug_indent + repr(child))
- self._ApplyRecursivelyToNode(child, scope_operation, operation,
- debug_indent)
- operation(node)
-
- def _ApplyRecursivelyToScope(self, nodes, scope_operation, operation, # pylint: disable=missing-docstring
- debug_indent):
- node = nodes.pop()
- scope_operation(node)
- if debug_indent:
- print(debug_indent + repr(node))
- if nodes:
- self._ApplyRecursivelyToScope(nodes, scope_operation, operation,
- (debug_indent + ' s ' if debug_indent
- else None))
- self._ApplyRecursivelyToNode(node, scope_operation, operation,
- debug_indent)
-
- def ApplyToAllFragments(self, scope_operation, operation):
- """Recursively applies operations to all fragments in the tree.
-
- The omnipresent topmost fragment is excluded. The 'scope_operation'
- is applied to every element in the fragment stack in pre-order.
- The 'operation' is applied to all fragments in the tree in post-order.
-
- Args:
- scope_operation: The operation to apply to fragments in the scope stack.
- operation: The operation to apply to all fragments in the tree.
- """
- self._ApplyRecursivelyToScope(list(reversed(self._stack[1:])),
- scope_operation, operation,
- ' ' if FLAGS.debug_print_tree else None)
-
- def FindFirstFragmentFromEnd(self, predicate, steps_from_last=0):
- sub_stack = self._stack[:-steps_from_last if steps_from_last else None]
- return next((node for node in sub_stack if predicate(node)), None)
-
- def PeekFragmentFromStart(self, steps_from_first=0):
- return self._stack[steps_from_first]
-
- def PeekFragmentFromEnd(self, steps_from_last=0):
- return self._stack[-(steps_from_last + 1)]
-
- def PeekLastAppendedFragment(self):
- return (self._stack[-1].GetChildren()[-1]
- if self._stack[-1].GetChildren() else None)
-
-
-class MarkdownGenerator:
- """Generates Markdown based on the series of HTML tags seen.
-
- Each time an opening HTML tag is seen, the appropriate markdown fragment is
- created and pushed onto a stack. Any text encountered is appended to the
- fragment at the top of the stack. When a closing HTML tag is seen, the stack
- is popped and the fragment removed is appended to the new top of the stack.
-
- Markdown is buffered in the fragment stack until an entire line has been
- formed, at which point _WriteFragmentsAsLine() is called to write it out. The
- content buffered in the stack is cleared, but otherwise the stack remains
- unmodified.
- """
-
- def __init__(self, out, url_translator):
- self._out = out
- self._url_translator = url_translator
- self._fragment_tree = FragmentTree(Text())
- self._list_info_stack = []
- self._pending_newlines = 0
- # Initialize the regexps to match nothing (rather than be None).
- self._code_class_regex = re.compile(FLAGS.code_class_regex or 'a^')
- self._toc_class_regex = re.compile(FLAGS.toc_class_regex or 'a^')
- self._ignore_class_regex = re.compile(FLAGS.ignore_class_regex or 'a^')
- self._ignore_style_regex = re.compile(FLAGS.ignore_style_regex or 'a^')
-
- def _Push(self, fragment):
- """Sets the parent fragment and pushes it onto the fragment stack.
-
- In the case where there is an IgnoreBlock on the stack, a new IgnoreBlock
- is pushed instead.
-
- Args:
- fragment: The Fragment object to push on the stack.
- """
- if isinstance(self._fragment_tree.PeekFragmentFromEnd(), IgnoreBlock):
- # If the top of the stack is IgnoreBlock, push an IgnoreBlock instead.
- fragment = IgnoreBlock()
- else:
- # Check if we need to merge adjacent formatting, e.g.
- # instead of **bold****bold** we need to write **boldbold**,
- # as the former is not correct Markdown syntax.
- last_appended = self._fragment_tree.PeekLastAppendedFragment()
- if last_appended and last_appended.NeedsToMergeWith(fragment):
- last_appended.UnsetSuffix()
- fragment.UnsetPrefix()
-
- self._fragment_tree.StartFragment(fragment)
-
- def _Pop(self):
- """Pops the fragment stack it to the new top of stack.
-
- If the fragment stack would be empty after popping, then the fragment is
- written to the output first.
- """
- if self._fragment_tree.ActiveFragmentScopeDepth() > 1:
- fragment = self._fragment_tree.EndFragment()
- self._fragment_tree.AppendFragment(fragment)
- else:
- self._WriteFragmentsAsLine(newlines=0)
- self._fragment_tree.EndFragment()
-
- def _IsWithinFragmentType(self, fragment_type, steps_from_last=0):
- return self._fragment_tree.FindFirstFragmentFromEnd(
- lambda fragment: isinstance(fragment, fragment_type),
- steps_from_last) is not None
-
- def _LastFragmentIs(self, fragment_type, cls):
- fragment = self._fragment_tree.PeekFragmentFromEnd()
- return (isinstance(fragment, fragment_type) and fragment.cls == cls)
-
- def Break(self):
- if not self._IsWithinFragmentType(FencedCodeBlock):
- self._WriteFragmentsAsLine(newlines=1)
- else:
- fragment = FencedCodeBlockLine(prefix='', suffix='')
- self._Push(fragment)
- fragment.Append(ENCODED_NEWLINE)
- self._Pop()
-
- def HorizontalRule(self):
- # Horizontal rule must be preceded and followed by a blank line
- self._AddVerticallyPaddedParagraph('---')
-
- def StartDocument(self):
- self._Push(WrappedTextBlock())
-
- def EndDocument(self):
- self._Pop()
-
- def StartParagraph(self):
- self._WriteFragmentsAsLine(newlines=2)
-
- def EndParagraph(self):
- self._WriteFragmentsAsLine(newlines=2)
-
- def StartDiv(self, cls, style, ident):
- """Process opening of a div element.
-
- Args:
- cls: The class attribute of the element.
- style: The style attribute of the element.
- ident: The id attribute of the element
- """
- if not self._IsWithinFragmentType(FencedCodeBlock):
- if self._IsWithinFragmentType(CodeBlock):
- self._WriteFragmentsAsLine(newlines=1)
- else:
- self._WriteFragmentsAsLine(newlines=2)
-
- if ((cls and self._ignore_class_regex.match(cls)) or
- style and self._ignore_style_regex.match(style)):
- self._Push(IgnoreBlock())
- elif self._IsWithinFragmentType(FencedCodeBlock):
- self._Push(FencedCodeBlockLine())
- elif self._IsWithinFragmentType(CodeBlock):
- self._Push(CodeBlock())
- elif self._IsWithinFragmentType(BlockquoteBlock):
- self._Push(BlockquoteBlock(indent=None))
- elif cls and self._toc_class_regex.match(cls):
- self._AddTableOfContents()
- self._Push(IgnoreBlock()) # Ignore the items inside the Sites TOC
- elif cls and self._code_class_regex.match(cls):
- if FLAGS.indented_code_blocks:
- self._Push(IndentedCodeBlock())
- else:
- self._Push(FencedCodeBlock())
- else:
- self._Push(WrappedTextBlock())
-
- def EndDiv(self):
- if not self._IsWithinFragmentType(FencedCodeBlock, steps_from_last=1):
- if self._IsWithinFragmentType(CodeBlock, steps_from_last=1):
- self._WriteFragmentsAsLine(newlines=1)
- else:
- self._WriteFragmentsAsLine(newlines=2)
- self._Pop()
-
- def StartHeader(self, level):
- self._WriteFragmentsAsLine(newlines=2)
- if level == 1 and FLAGS.underline_headers:
- self._Push(UnderlinedHeader('='))
- elif level == 2 and FLAGS.underline_headers:
- self._Push(UnderlinedHeader('-'))
- else:
- self._Push(TextBlock(prefix=('#' * level) + ' '))
-
- def EndHeader(self):
- self._WriteFragmentsAsLine(newlines=2)
- self._Pop()
-
- def StartList(self, tag):
- if not self._list_info_stack:
- self._WriteFragmentsAsLine(newlines=2)
- else:
- self._WriteFragmentsAsLine(newlines=1)
- self._list_info_stack.append(ListInfo(tag))
- if tag == 'ol':
- self._Push(Text(' ' * FLAGS.ordered_list_indent))
- else:
- self._Push(Text(' ' * FLAGS.unordered_list_indent))
-
- def EndList(self):
- self._list_info_stack.pop()
- if not self._list_info_stack:
- self._WriteFragmentsAsLine(newlines=2)
- else:
- self._WriteFragmentsAsLine(newlines=1)
- self._Pop()
-
- def StartListItem(self):
- self._WriteFragmentsAsLine(newlines=1)
- # Google Sites sometimes spits out pages with <li> tags not enclosed within
- # an <ol> or <ul> tag.
- tag = ''
- if self._list_info_stack:
- self._list_info_stack[-1].item_count += 1
- tag = self._list_info_stack[-1].tag
- if tag == 'ol':
- item_count = self._list_info_stack[-1].item_count
- # string.ljust makes room for as many digits as you need.
- prefix = ('%d.' % item_count).ljust(FLAGS.ordered_list_indent)
- self._Push(ListItem(prefix))
- else:
- prefix = '*'.ljust(FLAGS.unordered_list_indent)
- self._Push(ListItem(prefix))
-
- def EndListItem(self):
- self._WriteFragmentsAsLine(newlines=1)
- self._Pop()
-
- def StartFormat(self, tag):
- # Allowed formatting depends on the surrounding fragment type.
- if self._IsWithinFragmentType(TD) and tag == 'b':
- # TODO(dpranke): This is a hack because I don't yet really understand
- # how the ChangeToHtml() logic works in CodeBlocks, but it seems like
- # we should be able to do something similar to what they do.
- # Also, this should really be rewriting these to <th>s instead.
- self._Push(HTML('<b>', '</b>'))
- return
-
- if not self._IsWithinFragmentType(IndentedCodeBlock):
- formats_map = {
- 'i': ItalicFormattedText,
- 'em': ItalicFormattedText,
- 'b': BoldFormattedText,
- 'strong': BoldFormattedText,
- 'strike': StrikeThroughFormattedText,
- 's': StrikeThroughFormattedText,
- 'del': StrikeThroughFormattedText,
- 'u': HighlightFormattedText,
- 'code': Code,
- None: Text,
- }
- if self._IsWithinFragmentType(FencedCodeBlock):
- if FLAGS.allow_html_code_blocks:
- # HTML code block can render formats but must not use Code fragments.
- formats_map['code'] = formats_map[None] = CodeBlock
- else:
- formats_map = {None: CodeBlock}
- else:
- # Inside an indented code block no formatting is allowed.
- formats_map = {None: CodeBlock}
- self._Push(formats_map[tag]() if tag in formats_map
- else formats_map[None]())
-
- def EndFormat(self):
- self._Pop()
-
- def StartAnchor(self, href):
- if href is not None:
- href = self._url_translator.Translate(href)
- if self._IsWithinFragmentType(TD):
- self._Push(Href(href))
- else:
- self._Push(Link(href))
- else:
- self._Push(Text())
-
- def EndAnchor(self):
- self._Pop()
-
- def StartBlockquote(self):
- if not self._IsWithinFragmentType(CodeBlock):
- self._WriteFragmentsAsLine(newlines=1)
- self._Push(BlockquoteBlock())
- else:
- self._Push(Text())
-
- def EndBlockquote(self):
- if not self._IsWithinFragmentType(CodeBlock):
- self._WriteFragmentsAsLine(newlines=2)
- self._Pop()
-
- def Image(self, src, alt, width, height):
- src = self._url_translator.Translate(src)
- self._fragment_tree.AppendFragment(Image(src, alt, width, height))
-
- def Iframe(self, src, width, height):
- """Process an <iframe> element.
-
- Sites use <iframe> for embedded content: Docs, Drawings, etc.
- g3doc implements this by supporting <iframe> HTML tag directly.
-
- Args:
- src: Source URL.
- width: Element width.
- height: Element height.
- """
- if False:
- # TODO(dpranke): Figure out if we should support embedded IFRAME tags.
- # For now, we skip over them.
- self._WriteFragmentsAsLine(newlines=2)
- self._Push(EmbeddedContent(src, width, height))
- self._Pop()
-
- def StartTable(self, cls):
- if (cls and 'sites-layout-hbox' in cls and
- 'sites-layout-name-one-column' not in cls):
- self._AddHTMLBlock('<div class="two-column-container">')
- self._Push(Div(cls='two-column-container'))
- elif (cls and 'sites-layout-name-one-column' in cls):
- pass
- else:
- self._AddHTMLBlock('<table>')
- self._Push(Table())
-
- def EndTable(self):
- if self._LastFragmentIs(Div, cls='two-column-container'):
- self._AddHTMLBlock('</div>')
- self._Pop()
- elif self._IsWithinFragmentType(Table):
- self._AddHTMLBlock('</table>')
- self._Pop()
-
- def StartTR(self):
- if self._IsWithinFragmentType(Table):
- self._AddHTMLBlock('<tr>')
-
- def EndTR(self):
- if self._IsWithinFragmentType(Table):
- self._AddHTMLBlock('</tr>')
-
- def StartTD(self, cls, rowspan, colspan):
- if self._LastFragmentIs(Div, cls='two-column-container'):
- if cls and ('sites-tile-name-content-1' in cls or
- 'sites-tile-name-content-2' in cls):
- self._AddHTMLBlock('<div class="column">')
- self._Push(Div(cls='column'))
- else:
- self._Push(Text())
- elif self._IsWithinFragmentType(Table):
- self._Push(TD(rowspan, colspan))
-
- def EndTD(self):
- if self._LastFragmentIs(Div, cls='column'):
- self._AddHTMLBlock('</div>')
- self._Pop()
- elif self._IsWithinFragmentType(Table):
- self._Pop()
- self._WriteFragmentsAsLine(newlines=1)
-
- def Text(self, text):
- if not isinstance(self._fragment_tree.PeekFragmentFromEnd(), IgnoreBlock):
- fragment = (CodeBlock() if self._IsWithinFragmentType(CodeBlock)
- else Text())
- self._fragment_tree.AppendFragment(fragment)
- fragment.Append(text)
-
- def _AddTableOfContents(self):
- # TOC must be preceded and followed by a blank line
- self._AddVerticallyPaddedParagraph('[TOC]')
-
- def _AddVerticallyPaddedParagraph(self, text):
- self._WriteFragmentsAsLine(newlines=2)
- fragment = CodeBlock() # Use CodeBlock to prevent escaping
- self._fragment_tree.AppendFragment(fragment)
- fragment.Append(text)
- self._WriteFragmentsAsLine(newlines=2)
-
- def _AddHTMLBlock(self, html):
- """Writes out a block-level string of html."""
- fragment = HTML()
- fragment.Append(html)
- self._fragment_tree.AppendFragment(fragment)
- self._WriteFragmentsAsLine(newlines=1)
-
- def _WriteFragmentsAsLine(self, newlines):
- """Writes out any content currently buffered in the fragment stack.
-
- Args:
- newlines: The minimum number of newlines required in the output after this
- line. These newlines won't be written out until the next line with
- content is encountered.
- """
-
- # Generate indent and the content, then clear content in fragments.
- indent = io.StringIO()
- self._fragment_tree.ApplyToAllFragments(
- lambda fragment: fragment.WriteIndent(indent),
- lambda fragment: fragment.WriteContentIntoParentAndClear())
- last_fragment = self._fragment_tree.PeekFragmentFromEnd()
- content = self._fragment_tree.PeekFragmentFromStart().ConsumeContent()
- content = last_fragment.StripLine(content.getvalue())
- indent = indent.getvalue()
- content = last_fragment.WrapLine(content, indent)
-
- # Write the content, if any.
- if content:
- self._out.write('\n' * self._pending_newlines)
- self._out.write(indent)
- self._out.write(content)
- self._pending_newlines = newlines
- elif self._pending_newlines > 0 and self._pending_newlines < newlines:
- self._pending_newlines = newlines
-
- if FLAGS.debug_print_tree:
- # Separate trees printed during each writing session
- print('-' * 20)
-
-
-class XhtmlHandler(xml.sax.ContentHandler):
- """Translates SAX events into MarkdownGenerator calls."""
-
- # regex that matches an HTML header tag and extracts the level.
- _HEADER_TAG_RE = re.compile(r'h([1-6])$')
-
- def __init__(self, out, url_translator):
- xml.sax.ContentHandler.__init__(self)
- self._generator = MarkdownGenerator(out, url_translator)
-
- def startDocument(self):
- self._generator.StartDocument()
-
- def endDocument(self):
- self._generator.EndDocument()
-
- def startElementNS(self, name, qname, attrs):
- tag = name[1]
- if tag == 'a':
- href = attrs.get((None, 'href'))
- self._generator.StartAnchor(href)
- elif tag == 'br':
- self._generator.Break()
- elif tag == 'hr':
- self._generator.HorizontalRule()
- elif tag == 'li':
- self._generator.StartListItem()
- elif tag == 'div':
- cls = attrs.get((None, 'class'))
- style = attrs.get((None, 'style'))
- ident = attrs.get((None, 'id'))
- self._generator.StartDiv(cls, style, ident)
- elif tag == 'p':
- self._generator.StartParagraph()
- elif tag in ('b', 'code', 'em', 'i', 'strong', 's', 'strike', 'del', 'u'):
- self._generator.StartFormat(tag)
- elif tag in ('ul', 'ol'):
- self._generator.StartList(tag)
- elif tag == 'img':
- src = attrs.get((None, 'src'))
- alt = attrs.get((None, 'alt'))
- width = attrs.get((None, 'width'))
- height = attrs.get((None, 'height'))
- self._generator.Image(src, alt, width, height)
- elif tag == 'blockquote':
- self._generator.StartBlockquote()
- elif tag == 'iframe':
- src = attrs.get((None, 'src'))
- width = attrs.get((None, 'width'))
- height = attrs.get((None, 'height'))
- self._generator.Iframe(src, width, height)
- elif tag == 'table':
- cls = attrs.get((None, 'class'))
- self._generator.StartTable(cls)
- elif tag == 'tr':
- self._generator.StartTR()
- elif tag == 'td':
- self._generator.StartTD(attrs.get((None, 'class')),
- attrs.get((None, 'rowspan')),
- attrs.get((None, 'colspan')))
- else:
- match = self._HEADER_TAG_RE.match(tag)
- if match:
- level = int(match.group(1))
- self._generator.StartHeader(level)
-
- def endElementNS(self, name, qname):
- tag = name[1]
- if tag == 'a':
- self._generator.EndAnchor()
- elif tag == 'li':
- self._generator.EndListItem()
- elif tag == 'div':
- self._generator.EndDiv()
- elif tag == 'p':
- self._generator.EndParagraph()
- elif tag in ('b', 'code', 'em', 'i', 'strong', 's', 'strike', 'del', 'u'):
- self._generator.EndFormat()
- elif tag in ('ul', 'ol'):
- self._generator.EndList()
- elif tag == 'blockquote':
- self._generator.EndBlockquote()
- elif tag == 'td':
- self._generator.EndTD()
- elif tag == 'tr':
- self._generator.EndTR()
- elif tag == 'table':
- self._generator.EndTable()
- else:
- match = self._HEADER_TAG_RE.match(tag)
- if match:
- self._generator.EndHeader()
-
- def characters(self, content):
- self._generator.Text(content)
-
-
-class DefaultUrlTranslator:
- """No-op UrlTranslator."""
-
- def Translate(self, href):
- return href
-
-
-def Convert(input_stream, output_stream, url_translator=DefaultUrlTranslator()):
- """Converts an input stream of xhtml into an output stream of markdown.
-
- Args:
- input_stream: filehandle for the XHTML input.
- output_stream: filehandle for the Markdown output.
- url_translator: Callback for translating URLs embedded in the page.
- """
- parser = xml.sax.make_parser()
- parser.setContentHandler(XhtmlHandler(output_stream, url_translator))
- parser.setFeature(xml.sax.handler.feature_namespaces, 1)
- parser.parse(input_stream)
diff --git a/chromium/docs/website/scripts/paths_that_were_edited_by_hand.txt b/chromium/docs/website/scripts/paths_that_were_edited_by_hand.txt
deleted file mode 100644
index af2575c60e1..00000000000
--- a/chromium/docs/website/scripts/paths_that_were_edited_by_hand.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes
-/Home/chromium-security/deprecating-powerful-features-on-insecure-origins
-/Home/chromium-security
-/Home/chromium-security/prefer-secure-origins-for-powerful-new-features
-/Home/chromium-security/site-isolation
-/Home
-/administrators/certificate-management-extension-api-on-chrome-os
-/administrators/configuring-policy-for-extensions
-/administrators/policy-list-3/user-data-directory-variables
-/blink/guidelines/api-owners/procedures
-/blink/guidelines
-/blink/guidelines/web-platform-changes-guidelines
-/blink
-/blink/launching-features
-/blink/spec-mentors
-/chromium-os/chrome-os-systems-supporting-android-apps
-/chromium-os/chrome-os-systems-supporting-instant-tethering
-/chromium-os/chrome-os-systems-supporting-linux
-/chromium-os/chromeos-graphics-reading-list
-/chromium-os/chromiumos-design-docs/cros-network
-/chromium-os/developer-information-for-chrome-os-devices
-/chromium-os/getting-dev-hardware/dev-hardware-list
-/chromium-os/how-tos-and-troubleshooting
-/chromium-os/how-tos-and-troubleshooting/network-based-development
-/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs
-/chromium-os
-/chromium-os/packages/libchromeos
-/chromium-os/quick-start-guide
-/chromium-os/testing/chamelium-audio-streaming
-/chromium-os/testing/power-testing
-/chromium-projects
-/developers/about-signin-internals
-/developers/bisect-builds-py
-/developers/contributing-code/-bug-syntax
-/developers/contributing-code
-/developers/creating-and-using-profiles
-/developers/design-documents/aura/ash-color-chooser
-/developers/design-documents/bluetooth-design-docs
-/developers/design-documents/create-amazing-password-forms
-/developers/design-documents/extensions/how-the-extension-system-works
-/developers/design-documents/extensions
-/developers/design-documents/extensions/proposed-changes/apiwishlist
-/developers/design-documents/extensions/proposed-changes/creating-new-apis
-/developers/design-documents/extensions/proposed-changes/extension-system-changes
-/developers/design-documents/extensions/proposed-changes
-/developers/design-documents
-/developers/design-documents/instant
-/developers/design-documents/inter-process-communication
-/developers/design-documents/omnibox-prefetch-for-default-search-engines
-/developers/design-documents/process-models
-/developers/design-documents/ui-localization
-/developers/gn-build-configuration
-/developers/how-tos/api-keys
-/developers/how-tos/debugging-on-windows
-/developers/how-tos/enterprise/adding-new-policies
-/developers/how-tos/get-the-code
-/developers/how-tos/getting-around-the-chrome-source-code
-/developers/how-tos
-/developers/how-tos/inspecting-ash
-/developers/how-tos/run-chromium-with-flags
-/developers/how-tos/submitting-a-performance-bug
-/developers
-/developers/postmortems
-/developers/smart-pointer-guidelines
-/developers/testing/chromium-build-infrastructure
-/developers/testing
-/developers/tree-sheriffs/handling-a-failing-test
-/developers/tree-sheriffs
-/developers/tree-sheriffs/sheriff-o-matic
-/developers/tree-sheriffs/sheriff-philosophy
-/developers/windows-binary-sizes
-/events/blinkon-resources
-/events
-/for-testers
-/getting-involved/dev-channel
-/getting-involved
-/issue-tracking/autotriage
-/issue-tracking/how-to-bulk-edit
-/issue-tracking/issue-tracking-lifecycle
-/issue-tracking/label-and-component-naming-style-guide
-/issue-tracking/migrating-issue-components
-/issue-tracking/release-block-guidelines
-/issue-tracking/tips-and-tricks
-/nativeclient/day-to-day
-/nativeclient/getting-started
-/nativeclient/how-tos
-/nativeclient
-/nativeclient/pnacl
-/nativeclient/pnacl/subzero
-/nativeclient/reference
-/teams
-/updates/first-party-sets
-/updates/same-site
-/updates/trust-token
-/updates/ua-reduction
-/user-experience
diff --git a/chromium/docs/website/scripts/paths_to_crawl.txt b/chromium/docs/website/scripts/paths_to_crawl.txt
deleted file mode 100644
index 9ae4cfb8b1a..00000000000
--- a/chromium/docs/website/scripts/paths_to_crawl.txt
+++ /dev/null
@@ -1,299 +0,0 @@
-/Home
-/Home/chromium-security/adding-permissions
-/Home/chromium-security/articles
-/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows
-/Home/chromium-security/articles/gwp-asan
-/Home/chromium-security/boringssl
-/Home/chromium-security/boringssl/contributing
-/Home/chromium-security/bugs/automated-triage
-/Home/chromium-security/bugs/automatic-filing
-/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz
-/Home/chromium-security/bugs/reproducing-clusterfuzz-bugs
-/Home/chromium-security/certificate-transparency
-/Home/chromium-security/certificate-transparency/log-policy
-/Home/chromium-security/chromium-and-emet
-/Home/chromium-security/clean-software-alliance
-/Home/chromium-security/client-identification-mechanisms
-/Home/chromium-security/crlsets
-/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes
-/Home/chromium-security/enamel/permissions
-/Home/chromium-security/enamel/restricting-iframe-permissions
-/Home/chromium-security/malicious-extensions-protection
-/Home/chromium-security/mds
-/Home/chromium-security/pgp-key
-/Home/chromium-security/pwnium-4
-/Home/chromium-security/root-ca-policy
-/Home/chromium-security/security-labels
-/Home/chromium-security/strict-origin-isolation-trial
-/Home/chromium-security/symantec-legacy-pki
-/Home/debugging-on-webview
-/Home/ice-cream-sandwich-support-deprecation-faq
-/Home/loading
-/Home/loading/clovis
-/Home/loading/oor-cors
-/Home/memory
-/Home/third-party-developers
-/Home/tls13
-/administrators
-/administrators/advanced-integration-for-saml-sso-on-chrome-devices
-/administrators/certificate-management-extension-api-on-chrome-os
-/administrators/common-problems-and-solutions
-/administrators/complex-policies-on-windows
-/administrators/configuring-other-preferences
-/administrators/configuring-policy-for-extensions
-/administrators/diagnostic-mode
-/administrators/err_eset_anti_virus_ssl_interception
-/administrators/err_ssl_weak_server_ephemeral_dh_key
-/administrators/frequently-asked-questions
-/administrators/guide-for-chrome-os-saml-sso-smart-card-integration
-/administrators/installation
-/administrators/ios-mdm-policy-format
-/administrators/linux-quick-start
-/administrators/log-messages
-/administrators/mac-quick-start
-/administrators/policy-list-3
-/administrators/policy-list-3/atomic_groups
-/administrators/url-blacklist-filter-format
-/administrators/url-blocklist-filter-format
-/android
-/android/contributing-to-drm_hwcomposer
-/android/drm_hwcomposer-overview
-/audio-video
-/audio-video/autoplay
-/audio-video/autoplay/autoplay-policy-design-rationale
-/audio-video/autoplay/autoplay-pre-seeding-in-chrome
-/audio-video/media-internals
-/blink/activedomobject
-/blink/blink-gardening
-/blink/blink-gc
-/blink/blink-in-js
-/blink/blink-network-stack
-/blink/blink-post-merge-faq
-/blink/unittesting
-/blink/v8-bindings
-/blink/webcrypto
-/blink/web-workers
-/blink/when-will-a-fix-ship-in-chrome-stable-or-canary
-/blink/blink-testing-and-the-w3c
-/blink/blink-triaging
-/blink/coding-style
-/blink/coding-style/layout-test-style-guidelines
-/blink/deprecating-features
-/blink/developer-faq
-/blink/directory-dependency-in-blink
-/blink/dom-exceptions
-/blink/getting-started-with-blink-debugging
-/blink/guidelines
-/blink/guidelines/web-platform-changes-guidelines
-/blink/guidelines/web-platform-changes-process
-/blink/how-repaint-works
-/blink/importing-the-w3c-tests
-/blink/intent-security-triage
-/blink/launching-features
-/blink/launching-features/how-chrome-status-communicates
-/blink/launching-features/let-developers-know
-/blink/launching-features/old-process
-/blink/layoutng
-/blink/memory-team
-/blink/origin-trials
-/blink/origin-trials/portals
-/blink/origin-trials/running-an-origin-trial
-/blink/platform-predictability
-/blink/platform-predictability/compat-tools
-/careers
-/cecpq2
-/chrome-apps
-/chrome-os-devices-and-kernel-versions
-/chrome-release-channels
-/chromium-os/bias-on-chromium-os
-/chromium-os/bluetooth-pairing-method-confusion-on-chrome-os
-/chromium-os/ccd
-/chromium-os/chrome-os-systems-supporting-adb-debugging-over-usb
-/chromium-os/chrome-os-systems-supporting-android-apps
-/chromium-os/chrome-os-systems-supporting-instant-tethering
-/chromium-os/chrome-os-systems-supporting-linux
-/chromium-os/chromiumos-design-docs/cbi-cros-board-info
-/chromium-os/chromiumos-design-docs/chromium-os-printing-design
-/chromium-os/chromiumos-design-docs/cros-network
-/chromium-os/chromiumos-design-docs/cros-network/cellular-activation
-/chromium-os/chromiumos-design-docs/cros-network/chrome-network-debugging
-/chromium-os/chromiumos-design-docs/cros-network/fake-cromo
-/chromium-os/chromiumos-design-docs/cros-network/fake-gsm-modem
-/chromium-os/chromiumos-design-docs/cros-network/fakemodem
-/chromium-os/chromiumos-design-docs/developer-shell-access
-/chromium-os/chromiumos-design-docs/firmware-updates
-/chromium-os/chromiumos-design-docs/network-portal-detection
-/chromium-os/chromiumos-design-docs/onc
-/chromium-os/chromiumos-design-docs/open-network-configuration
-/chromium-os/chromiumos-design-docs/powerwash
-/chromium-os/chromiumos-design-docs/touch-firmware-updater
-/chromium-os/chromiumos-design-docs/verify-prebuilts-using-content-hashing
-/chromium-os/containers-update
-/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook
-/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook
-/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook
-/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13
-/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox
-/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel
-/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11
-/chromium-os/developer-information-for-chrome-os-devices/generic
-/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11
-/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14
-/chromium-os/developer-information-for-chrome-os-devices/hp-chromebox
-/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook
-/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-11
-/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20
-/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook
-/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w
-/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2
-/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook
-/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook
-/chromium-os/developer-information-for-chrome-os-devices/workaround-for-battery-discharge-in-dev-mode
-/chromium-os/donnettes
-/chromium-os/external-bsp-hosting
-/chromium-os/firmware-summit
-/chromium-os/firmware-porting-guide/1-overview/the-crosfw-script
-/chromium-os/forced-re-enrollment
-/chromium-os/fwmp
-/chromium-os/getting-started-with-glmark2
-/chromium-os/getting-started-with-platform2
-/chromium-os/gfx-test-notes
-/chromium-os/glitch-vulnerability-status
-/chromium-os/lazy-fp-restore-vulnerability-status
-/chromium-os/licensing
-/chromium-os/licensing/building-a-distro
-/chromium-os/mds-on-chromeos
-/chromium-os/meltdown-spectre-vulnerability-status
-/chromium-os/obsolete
-/chromium-os/obsolete/energy-aware-scheduling
-/chromium-os/obsolete/monitoring-tools
-/chromium-os/obsolete/portage-package-status
-/chromium-os/obsolete/quiche-notes
-/chromium-os/obsolete/recall
-/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os
-/chromium-os/obsolete/using-sdk-standalone
-/chromium-os/platform
-/chromium-os/profiling-in-chromeos
-/chromium-os/python-style-guidelines
-/chromium-os/security-advisories
-/chromium-os/shell-style-guidelines
-/chromium-os/stadia-on-chromebooks
-/chromium-os/testing/anatomy-of-test-test
-/chromium-os/testing/arcplusplus-testing
-/chromium-os/testing/autotest-and-ebuilds
-/chromium-os/testing/autotest-graphics-documentation
-/chromium-os/testing/building-and-running-tests
-/chromium-os/testing/cellular-testing
-/chromium-os/testing/cros-autotest
-/chromium-os/testing/dynamic-suites
-/chromium-os/testing/dynamic-suites/dynamic-test-suites
-/chromium-os/testing/dynamic-suites/test-dependencies-in-dynamic-suites
-/chromium-os/testing/hardware_qualification
-/chromium-os/testing/infrastructure-components
-/chromium-os/testing/infrastructure-components/keyvals
-/chromium-os/testing/moblab-faq
-/chromium-os/testing/moblab/cpcon-release-notes
-/chromium-os/testing/moblab/faft-testing-with-moblab
-/chromium-os/testing/moblab/mob-monitor
-/chromium-os/testing/moblab/overview-of-moblab
-/chromium-os/testing/moblab/pre-requirements-of-issue-creation
-/chromium-os/testing/moblab/setup
-/chromium-os/testing/moblab/user-manual
-/chromium-os/testing/moblab/usingmoblab
-/chromium-os/testing/moblab/view-test-result-vis-wmatrix
-/chromium-os/testing/perf-regression-detection
-/chromium-os/testing/qemu-unittests
-/chromium-os/testing/running-unit-tests-on-the-target
-/chromium-os/testing/specific-test-documentation
-/chromium-os/testing/suite_scheduler
-/chromium-os/testing/test-code-labs
-/chromium-os/testing/test-code-labs/server-side-test
-/chromium-os/testing/test-lab-setup
-/chromium-os/testing/writing-and-developing-tests
-/chromium-os/testing/writing-and-developing-tests/test-deps-faq
-/chromium-os/testing/writing-and-developing-tests/testing-your-changes-faq
-/chromium-os/testing/writing-and-developing-tests/writing-tests-faq
-/chromium-os/tpm_firmware_update
-/chromium-os/type-c-on-rk3399-chromebooks
-/chromium-os/u2f-ecdsa-vulnerability
-/chromium-os/unchecked_tpm_reset
-/chromium-os/user-experience
-/chromium-os/user-experience/access-points
-/chromium-os/user-experience/content-browser
-/chromium-os/user-experience/form-factors
-/chromium-os/user-experience/form-factors/tablet
-/chromium-os/user-experience/opensave-dialogs
-/chromium-os/user-experience/settings
-/chromium-os/user-experience/shelf
-/chromium-os/user-experience/system-status-icons
-/chromium-os/user-experience/tab-ui
-/chromium-os/user-experience/window-management
-/chromium-os/user-experience/window-ui
-/chromium-os/usi-enabled-devices
-/chromium-os/works-with-chromebook-certified
-/chromium-projects
-/conduct
-/developers/design-documents/browser-components
-/developers/tree-sheriffs/perf-sheriffs
-/devtools/announcements
-/devtools/breakpoints-tutorial
-/devtools/google-chrome-developer-tools-tutorial
-/events
-/events/blinkon-14
-/flag-ownership
-/flash-roadmap
-/flash-roadmap/deprecating-wildcards
-/flash-roadmap/flash-usage-trends
-/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document
-/for-testers/providing-memory-details
-/for-testers/test-cases
-/for-testers/unhealthy-tests-report
-/geforce-now-on-chromebooks
-/getting-involved/summerofcode2013
-/infra
-/irc
-/irc-support-faq
-/issue-tracking/editing-components
-/layout-test-contest
-/layout-test-contest/layout-test-contest-leaderboard
-/platform-privacy
-/security-keys
-/sts
-/teams
-/teams/devtools
-/teams/ecosystem-infra
-/teams/layout-team/okrs/2015q2
-/teams/speed-metrics-team
-/testing-chrome-ad-filtering
-/throttling
-/throttling/anti-ddos-http-throttling-in-older-versions-of-chrome
-/updates
-/updates/first-party-sets
-/updates/same-site
-/updates/schemeful-same-site
-/updates/trust-token
-/updates/ua-ch
-/updates/ua-reduction
-/user-experience/bookmarklets
-/user-experience/bookmarks
-/user-experience/downloads
-/user-experience/downloads-1
-/user-experience/feed-subscriptions
-/user-experience/find-in-page
-/user-experience/history
-/user-experience/incognito
-/user-experience/infobars
-/user-experience/infobars/geolocation
-/user-experience/multi-profiles
-/user-experience/multitouch
-/user-experience/notifications
-/user-experience/options
-/user-experience/resolution-independence
-/user-experience/screen-reader-support
-/user-experience/status-bubble
-/user-experience/tabs
-/user-experience/tabs/throbber
-/user-experience/visual-design
-/user-experience/window-frame
-/x-subresources
-/x-subresources/x-subresources-1
diff --git a/chromium/docs/website/scripts/paths_to_skip.txt b/chromium/docs/website/scripts/paths_to_skip.txt
deleted file mode 100644
index 2331bd32db5..00000000000
--- a/chromium/docs/website/scripts/paths_to_skip.txt
+++ /dev/null
@@ -1,140 +0,0 @@
-/Home
-/Home/chromium-security
-/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes
-/Home/chromium-security/deprecating-powerful-features-on-insecure-origins
-/Home/chromium-security/prefer-secure-origins-for-powerful-new-features
-/Home/chromium-security/security-tips-for-ipc
-/Home/chromium-security/site-isolation
-/administrators/certificate-management-extension-api-on-chrome-os
-/administrators/configuring-policy-for-extensions
-/administrators/policy-list-3/user-data-directory-variables
-/blink
-/blink/goog_1365028860
-/blink/guidelines
-/blink/guidelines/api-owners/procedures
-/blink/guidelines/web-platform-changes-guidelines
-/blink/launching-features
-/blink/layout-team
-/blink/layout-team/bug-triage
-/blink/layout-team/okrs/2015q2
-/blink/layout-team/potential-projects
-/blink/spec-mentors
-/chromium-os
-/chromium-os/Acer%20Chromebook%20Spin%20311%20(CP311-3H)
-/chromium-os/Lenovo%20100e%20Chromebook%202nd%20Gen
-/chromium-os/Lenovo%20300e%20Chromebook%202nd%20Gen%20(Intel)
-/chromium-os/Lenovo%20500e%20Chromebook%202nd%20Gen
-/chromium-os/boot-milestones
-/chromium-os/chrome-os-systems-supporting-android-apps
-/chromium-os/chrome-os-systems-supporting-instant-tethering
-/chromium-os/chrome-os-systems-supporting-linux
-/chromium-os/chromeos-graphics-reading-list
-/chromium-os/chromiumos-design-docs/cros-network
-/chromium-os/developer-information-for-chrome-os-devices
-/chromium-os/developer-information-for-chrome-os-devices/a/chromium.org/dev/chromium-os/developer-information-for-chrome-os-devices/generic
-/chromium-os/getting-dev-hardware/dev-hardware-list
-/chromium-os/how-tos-and-troubleshooting
-/chromium-os/how-tos-and-troubleshooting/network-based-development
-/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs
-/chromium-os/packages/libchromeos
-/chromium-os/quick-start-guide
-/chromium-os/testing/chamelium-audio-streaming
-/chromium-os/testing/power-testing
-/chromium-projects
-/contact/-chromium-irc
-/developers
-/developers/about-signin-internals
-/developers/bisect-builds-py
-/developers/contributing-code
-/developers/contributing-code/-bug-syntax
-/developers/creating-and-using-profiles
-/developers/debugging-on-os-x
-/developers/design-documents
-/developers/design-documents/aura/ash-color-chooser
-/developers/design-documents/bluetooth-design-docs
-/developers/design-documents/create-amazing-password-forms
-/developers/design-documents/extensions
-/developers/design-documents/extensions/apiwishlist
-/developers/design-documents/extensions/how-the-extension-system-works
-/developers/design-documents/extensions/process-model
-/developers/design-documents/extensions/proposed-changes
-/developers/design-documents/extensions/proposed-changes/apis-under-development/experimental.bluetooth.html
-/developers/design-documents/extensions/proposed-changes/apiwishlist
-/developers/design-documents/extensions/proposed-changes/creating-new-apis
-/developers/design-documents/extensions/proposed-changes/extension-system-changes
-/developers/design-documents/goog_1235887298838
-/developers/design-documents/goog_353685820
-/developers/design-documents/instant
-/developers/design-documents/inter-process-communication
-/developers/design-documents/mojo
-/developers/design-documents/network-stack/disk-cache/TOC-Buckets
-/developers/design-documents/omnibox-prefetch-for-default-search-engines
-/developers/design-documents/process-models
-/developers/design-documents/ui-localization
-/developers/gn-build-configuration
-/developers/goog_742956014
-/developers/how-tos
-/developers/how-tos/api-keys
-/developers/how-tos/debugging
-/developers/how-tos/debugging-on-windows
-/developers/how-tos/enterprise/adding-new-policies
-/developers/how-tos/get-the-code
-/developers/how-tos/getting-around-the-chrome-source-code
-/developers/how-tos/inspecting-ash
-/developers/how-tos/run-chromium-with-flags
-/developers/how-tos/submitting-a-performance-bug
-/developers/how-tos/using-valgrind
-/developers/postmortems
-/developers/smart-pointer-guidelines
-/developers/testing
-/developers/testing/chromium-build-infrastructure
-/developers/testing/chromium-build-infrastructure/getting-the-buildbot-source/configuring-your-buildbot
-/developers/tree-sheriffs
-/developers/tree-sheriffs/handling-a-failing-test
-/developers/tree-sheriffs/sheriff-details-chromium-os/commit-queue-overview
-/developers/tree-sheriffs/sheriff-details-chromium-os/goog_1113656214
-/developers/tree-sheriffs/sheriff-details-chromium-os/goog_708387403
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_1520500215
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_1527236099
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_158369869
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_158369871
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_362824283
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_690049217
-/developers/tree-sheriffs/sheriff-details-chromium-os/sheriff-log-chromium-os/goog_979881309
-/developers/tree-sheriffs/sheriff-o-matic
-/developers/tree-sheriffs/sheriff-philosophy
-/developers/webkit-version-table
-/developers/windows-binary-sizes
-/events
-/events/blinkon-resources
-/for-testers
-/for-testers/backend-testing/website-compatibility/reduced-test-cases
-/for-testers/goog_880557684
-/getting-involved
-/getting-involved/dev-channel
-/getting-involved/dev-channel/release-notes
-/issue-tracking/autotriage
-/issue-tracking/how-to-bulk-edit
-/issue-tracking/issue-tracking-lifecycle
-/issue-tracking/label-and-component-naming-style-guide
-/issue-tracking/migrating-issue-components
-/issue-tracking/release-block-guidelines
-/issue-tracking/tips-and-tricks
-/nativeclient
-/nativeclient/day-to-day
-/nativeclient/getting-started
-/nativeclient/how-tos
-/nativeclient/pnacl
-/nativeclient/pnacl/subzero
-/nativeclient/reference
-/p/nativeclient/wiki/NaCl
-/spdy/running_flipinmemserver
-/spdy/spdy-protoco
-/teams
-/teams/animations/goog_624119910
-/teams/goog_1136717605
-/updates/first-party-sets
-/updates/same-site
-/updates/trust-token
-/updates/ua-reduction
-/user-experience
diff --git a/chromium/docs/website/scripts/subpages.js b/chromium/docs/website/scripts/subpages.js
deleted file mode 100644
index 84f8ccabf67..00000000000
--- a/chromium/docs/website/scripts/subpages.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2021 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// This file implements support for the "subpages" extension. If a page author
-// inserts `{% subpages collections.all %}` into a document, this function will
-// find all of the pages that are sub-pages of the specified page (sub-pages in
-// the sense that /blink/design-documents is a sub-page of /blink) and display
-// them in a hierarchical tree format. `pageUrl` should be the (path part of
-// the) url of the current page (Eleventy's `page.url`) and
-// `collectionOfAllPages` should be Eleventy's `collections.all`.
-//
-// TODO(crbug.com/1271672): Figure out how to make this cleaner so the syntax
-// is less clunky.
-function render(pageUrl, collectionOfAllPages) {
- let topPage = new Page('', pageUrl);
-
- let subPages = [];
- for (const item of collectionOfAllPages) {
- if (isDescendant(item, topPage)) {
- subPages.push(new Page(item.data.title, item.data.page.url));
- }
- }
-
- // Create a map from URLs to Pages for `pageUrl` and its sub-pages.
- const pageMap = new Map();
- pageMap.set(topPage.url, topPage);
-
- // Sorting the pages by url ensures that a parent will be added to the
- // map before any of its descendants when we populate the map.
- subPages.sort(byProperty('url'));
-
- for (const subPage of subPages) {
- pageMap.set(subPage.url, subPage);
- pageMap.get(subPage.parentUrl).subPages.push(subPage);
- }
-
- let html = ('<nav class="subpage-listing">\n' +
- ' <h4>Subpage Listing</h4>\n' +
- ' <ul>\n');
-
- topPage.subPages.sort(byProperty('title'));
- for (const subPage of topPage.subPages) {
- html += ' <li>\n' + subPage.walk(3);
- }
- html += (' </ul>\n' +
- '</nav>\n');
-
- return html;
-}
-
-class Page {
- constructor(title, url) {
- this.title = title;
- this.url = trimSlash(url);
- this.parentUrl = dirname(this.url);
-
- // This holds only the immediate sub-pages of the page, not the
- // transitive closure of all sub-pages.
- this.subPages = [];
- }
-
- // walk over the transitive closure of all of the page's subpages,
- // and return an html fragment describing them as a tree of
- // links and <details> elements (when a page has subpages).
- // `indentDepth` is the number of levels to indent the HTML fragment.
- walk(indentDepth) {
- const indent = ' '.repeat(indentDepth);
-
- this.subPages.sort(byProperty('title'));
-
- if (this.subPages.length) {
- let html = (`${indent}<details open>\n` +
- `${indent} <summary><a href="${this.url}">${
- this.title}</a></summary>\n` +
- `${indent} <ul>\n`);
-
- for (const subPage of this.subPages) {
- html += (`${indent} <li>\n` +
- `${subPage.walk(indentDepth + 3)}`);
- }
- html += (`${indent} </ul>\n` +
- `${indent}</details>\n`);
- return html;
- } else {
- return `${indent}<a href="${this.url}">${this.title}</a>\n`;
- }
- }
-}
-
-// Returns the directory above the `path`, e.g.:
-// `dirname("/foo/bar")` returns "/foo".
-// Note that `dirname("/foo/bar/") also returns "/foo").
-function dirname(path) {
- comps = path.split('/');
- return comps.slice(0, comps.length - 1).join('/');
-}
-
-// Returns a copy of the string `s` with the rightmost `/` removed.
-function trimSlash(s) {
- if (s.endsWith('/')) {
- return s.substr(0, s.length - 1);
- }
- return s;
-}
-
-function isDescendant(item, topPage) {
- let itemUrl = trimSlash(item.data.page.url);
- return itemUrl.startsWith(topPage.url + '/');
-}
-
-// Returns a comparison function that will compare two objects by
-// the lower-cased values of the specified property.
-function byProperty(prop) {
- return (x, y) => {
- a = x[prop].toLowerCase();
- b = y[prop].toLowerCase();
- return (a > b ? 1 : (a === b ? 0 : -1));
- }
-}
-
-exports.render = render;
diff --git a/chromium/docs/website/scripts/upload_lobs.py b/chromium/docs/website/scripts/upload_lobs.py
deleted file mode 100755
index 2a2369c9b43..00000000000
--- a/chromium/docs/website/scripts/upload_lobs.py
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import sys
-import optparse
-import os
-
-for path in os.environ['PATH'].split(os.path.pathsep):
- if path.endswith('depot_tools') and path not in sys.path:
- sys.path.insert(0, path)
-
-import upload_to_google_storage
-
-import common
-
-# This list must be kept in sync with the lists in //.eleventy.js and
-# //PRESUBMIT.py.
-# TODO(dpranke): Figure out how to share these lists to eliminate the
-# duplication and need to keep them in sync.
-
-LOB_EXTENSIONS = [
- '.ai',
- '.bin',
- '.bmp',
- '.brd',
- '.bz2',
- '.config',
- '.crx',
- '.dia',
- '.gif',
- '.graffle',
- '.ico',
- '.jpg',
- 'jpg', # Some files are missing the '.' :(.
- '.jpeg',
- '.mp4',
- '.msi',
- '.pdf',
- 'pdf', # Some files are missing the '.' :(.
- '.png',
- 'png', # Some files are missing the '.' :(.
- '.PNG',
- '.swf',
- '.svg',
- '.tar.gz',
- '.tiff',
- '_trace',
- '.webp',
- '.xcf',
- '.xlsx',
- '.zip'
- ]
-
-def main():
- parser = optparse.OptionParser(upload_to_google_storage.USAGE_STRING)
- parser.add_option('-b', '--bucket',
- default='chromium-website-lob-storage',
- help='Google Storage bucket to upload to.')
- parser.add_option('-e', '--boto', help='Specify a custom boto file.')
- parser.add_option('-f', '--force', action='store_true',
- help='Force upload even if remote file exists.')
- parser.add_option('-g', '--gsutil_path',
- default=upload_to_google_storage.GSUTIL_DEFAULT_PATH,
- help='Path to the gsutil script.')
- parser.add_option('-m', '--use_md5', action='store_true',
- help='Generate MD5 files when scanning, and don\'t check '
- 'the MD5 checksum if a .md5 file is found.')
- parser.add_option('-t', '--num_threads', default=1, type='int',
- help='Number of uploader threads to run.')
- parser.add_option('-s', '--skip_hashing', action='store_true',
- help='Skip hashing if .sha1 file exists.')
- parser.add_option('-0', '--use_null_terminator', action='store_true',
- help='Use \\0 instead of \\n when parsing '
- 'the file list from stdin. This is useful if the input '
- 'is coming from "find ... -print0".')
- parser.add_option('-z', '--gzip', metavar='ext',
- help='Gzip files which end in ext. '
- 'ext is a comma-separated list')
- parser.add_option('-d', '--directory',
- help='The target is a directory. ')
- parser.add_option('-r', '--remove', action='store_true',
- help='Removes the file that was uploaded to storage. ')
- (options, args) = parser.parse_args()
-
- if options.directory:
- input_filenames = get_lobs_from_dir(options.directory)
- if len(input_filenames) == 0:
- print("No LOB files found in directory to upload")
- return 0
- else:
- # Enumerate our inputs.
- input_filenames = upload_to_google_storage.get_targets(args, parser,
- options.use_null_terminator)
-
- # Make sure we can find a working instance of gsutil.
- if os.path.exists(upload_to_google_storage.GSUTIL_DEFAULT_PATH):
- gsutil = upload_to_google_storage.Gsutil(
- upload_to_google_storage.GSUTIL_DEFAULT_PATH, boto_path=options.boto)
- else:
- parser.error('gsutil not found in %s, bad depot_tools checkout?' %
- upload_to_google_storage.GSUTIL_DEFAULT_PATH)
-
- base_url = 'gs://%s' % options.bucket
-
- add_to_ignore(input_filenames)
-
- upload_status = upload_to_google_storage.upload_to_google_storage(
- input_filenames, base_url, gsutil, options.force, options.use_md5,
- options.num_threads, options.skip_hashing, options.gzip)
-
- if upload_status:
- return upload_status
-
- if options.remove:
- remove_lobs(input_filenames)
-
- return 0
-
-def remove_lobs(lob_files):
- for lob_file in lob_files:
- if os.path.exists(lob_file):
- os.remove(lob_file)
-
-def add_to_ignore(lob_files):
- with open(common.SITE_DIR + "/.gitignore", 'r') as ignore_file:
- file_lines = list(line.rstrip() for line in ignore_file.readlines())
-
- end_tag_index = file_lines.index('#end_lob_ignore')
- lob_ignores = set(file_lines[
- file_lines.index('#start_lob_ignore') + 1 :
- end_tag_index])
-
- for lob_file in lob_files:
- rel_path = os.path.relpath(lob_file, common.SITE_DIR)
-
- if os.path.exists(lob_file) and not rel_path in lob_ignores:
- file_lines.insert(end_tag_index, rel_path)
- end_tag_index+=1
-
- with open(common.SITE_DIR + "/.gitignore", 'w') as ignore_file:
- ignore_file.writelines(line + '\n' for line in file_lines)
-
-def get_lobs_from_dir(directory):
- lobs = []
- for (dirpath, _, filenames) in os.walk(directory):
- for filename in filenames:
- absolute_filename = os.path.join(dirpath, filename)
- if os.path.isfile(absolute_filename):
- for ext in LOB_EXTENSIONS:
- if filename.endswith(ext):
- lobs.append(absolute_filename)
- break
- return lobs
-
-if __name__ == '__main__':
- try:
- sys.exit(main())
- except KeyboardInterrupt:
- sys.stderr.write('interrupted\n')
- sys.exit(1)
diff --git a/chromium/docs/website/site/Home/chromecompatfaq/index.md b/chromium/docs/website/site/Home/chromecompatfaq/index.md
deleted file mode 100644
index d6f080681b8..00000000000
--- a/chromium/docs/website/site/Home/chromecompatfaq/index.md
+++ /dev/null
@@ -1,271 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: chromecompatfaq
-title: Fixing Google Chrome compatibility bugs in websites - FAQ
----
-
-## NOTE: The information on this page is out of date.
-
-## This page mostly contains information from 2011. Since then, Chrome has switched its rendering engine to [Blink](/blink) (a fork of WebKit).
-
-## Introduction
-
-# This document provides a concise list of common compatibility issues with Google Chrome along with their solutions. It's aimed at Web developers trying to fix compatibility issues with Google Chrome or interested in a list of things to avoid when authoring Websites to use in Google Chrome.
-
-The list is based on analysis of a large number of real-world sites with
-compatibility issues. It's important to note that in nearly all cases we've
-seen, the fixes required to get a Website working well in Google Chrome have
-been minimal. Developers are often surprised that problems that looked like they
-could take weeks of developer time were often solved in under an hour and
-matched closely with the list below.
-
-Each item is described along with its solution, at the end we have a section
-that lists useful tools and points of reference that you may find useful in
-diagnosing problems.
-
-## Preamble - Google Chrome's rendering Engine:
-
-Google Chrome uses WebKit (<http://webkit.org/>) to draw Web pages. WebKit is a
-mature (~9 years) open source layout engine used by Apple (Safari, iPhone),
-Google (Android, Google Chrome), Nokia and many other companies. Google Chrome
-aims to render sites exactly like Safari. This means that if your site works in
-Safari there is a large chance it will work in Google Chrome and vice versa.
-
-# Common Issues:
-
-* [UserAgent
- Detection](http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ#UserAgent_Detection)
-* [Paragraphs Overflowing/Text
- Cutoff](http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ#Paragraphs_Overflowing/Text_Cutoff)
-* [Correct page
- encoding](http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ#Correct_page_encoding)
-* [Correct Plugin
- Tags](http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ#Correct_Plugin_Tags)
-* [Use of Browser-Specific CSS or JavaScript
- objects](http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ#Use_of_Browser-Specific_CSS_or_JavaScript_objects)
-* [Useful
- Tools](http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ#Useful_Tools)
-* [Additional
- Resources](http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ#Additional_Resources)
-
-# UserAgent Detection
-
-### The Symptom
-
-Page not displayed correctly in Google Chrome, or you get a message noting that
-Google Chrome is not a "supported browser".
-
-### The problem
-
-By far the most common problem we see is JavaScript (or server-side) code that
-tries to detect the browser by looking at the navigator.userAgent string. Often
-the checks used are buggy and do not identify Google Chrome correctly.
-
-### Recommendations:
-
-* Do everything you can to avoid this, parsing navigator.userAgent and
- navigator.vendor is [notoriously
- bug-prone](http://my.opera.com/hallvors/blog/2008/12/19/10-is-the-one)
- and usually the wrong thing to do! [Object
- detection](http://www.quirksmode.org/js/support.html) is a much
- safer method to achieve per-browser behavior...
-
-* On Windows, Google Chrome's useragent string looks something like
- the following:
- Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/2.0.167.0 Safari/525.13
-
-In nearly all cases you don't want to check if you're running under Google
-Chrome, but if the browser is using the WebKit rendering engine (see above). If
-you must look at the navigator.userAgent string look for the substring
-'AppleWebKit', nothing else is guaranteed to continue working in the future!!
-
-var isWebKit =
-navigator.userAgent.indexOf("AppleWebKit") &gt; -1;
-
-isWebKit will be true if you're running in Google Chrome, Safari or any other
-browser using WebKit.
-
-To check the version of WebKit, use:
-
-var WebKitVersion =
-parseFloat(navigator.userAgent.split("AppleWebKit/")\[1\]) ||
-undefined;
-if (WebKitVersion && WebKitVersion &gt; 500 ) {
-// use spiffy WebKit feature here
-}
-
-You can find a list of Google Chrome Releases and their corresponding WebKit
-revisions [here](/developers/webkit-version-table).
-
-* Avoid code like the following:
-
-if (isChrome) {
-doSomethingChromeSpecific();
-} else {
-// Didn't detect browser type, so assume IE.
-doSomethingIESpecific();
-}
-
-The problem is that the above snippet assumes that any browser not explicitly
-identified is IE. The problem is that it's far more likely for other browsers to
-act alike than it is for them to act like IE. And IE9 is very similar to all
-other browsers, so the code fork is bound to fail. Stick to feature detection
-instead.
-
-# Paragraphs Overflowing/Text Cutoff
-
-### The Symptom:
-
-A single line header wraps over multiple lines, messing up a site's layout. Text
-gets cut off or overlaps other elements.
-
-### The problem:
-
-HTML & CSS can't do pixel perfect layout. So font and element sizes can change
-slightly between browser versions and OSs. If a site depends on a font being an
-exact size then text can get cut off or wrap on other browsers or OSs.
-
-### Recommendations:
-
-Whenever possible, make use of dynamically sized elements rather than specifying
-fixed pixel widths. This is often easier said than done, but it ensures that
-content will adapt well to all browsers. Test your site in multiple browsers and
-OSs, enlarge fixed pixel width elements to accommodate the maximum size you see.
-Use the white-space:nowrap css attribute to ensure that single line headings
-don't wrap over multiple lines.
-
-# Correct page encoding
-
-### The Symptom:
-
-Your page looks garbled in Google Chrome. Garbage characters may be displayed,
-and RTL language pages (e.g. Hebrew or Arabic) may appear with their letters
-reversed.
-
-### The problem:
-
-If character encoding is not specified precisely, different browsers can
-interpret the encoding in different ways or not at all. The impact on users is
-dire since it prevents them from viewing the site.
-
-### Recommendations:
-
-* Declare your page's content-type correctly, this can either be in an
- [HTTP
- header](http://www.w3.org/International/tutorials/tutorial-char-enc/#Slide0270)
- or a [Meta tag specified in your
- HTML](http://code.google.com/p/doctype/wiki/MetaCharsetAttribute).
-* The character set your page uses must be a legal value from the
- [Official IANA
- List](http://www.iana.org/assignments/character-sets), please only
- use the encodings that have the text (preferred MIME name) listed
- next to them e.g. ISO-8859-1, Shift_JIS.
-* If you specify two different values for the character encoding in
- the HTTP Header and the Meta tag, Google Chrome will use the value
- in the HTTP Header. Conflicting declarations of character encoding
- in the HTTP Header and Meta tag is asking for trouble. More
- information on this subject can be [found
- here](http://blog.whatwg.org/the-road-to-html-5-character-encoding).
-* We recommend using UTF-8 for all Web content. If you have to use
- legacy encoding for some reason, make sure to identify the encoding
- correctly as outlined above. For legacy situations involving Hebrew
- sites use [Logical Hebrew encoding
- (ISO-8859-8-I)](http://www.w3.org/International/geo/html-tech/tech-bidi.html#ri20030112.21380914).
- We strongly **discourage** the use of Visual Hebrew encoding
- (ISO-8859-8). It has no place on the Web anymore and is a remnant of
- old systems lacking logic for rendering RTL text. It causes many
- bugs and lots of confusion.
-
-# Correct Plugin Tags
-
-### The Symptom:
-
-Plug-ins, such as Flash videos, Windows Media Player movies, or Java applets, do
-not appear in Google Chrome, but do appear in Internet Explorer.
-
-### The problem:
-
-There are 2 types of plugins on Windows: ActiveX & NPAPI. IE uses ActiveX
-plugins, all other browsers (including Google Chrome) use NPAPI plugins. ActiveX
-is Windows-only, plugins on other platforms usually use NPAPI.
-
-### Recommendations:
-
-1. Do not use plug-ins for which only an Active-X version exists, they
- won't work in Google Chrome, Firefox, Safari, Opera or any browser
- not using the IE rendering engine.
-2. Be sure that parameters in your &lt;object&gt; and &lt;embed&gt;
- tags are the same. A common problem is changing the parameter in
- only one of the tags, for example:
-
-&lt;object ...&gt;
-&lt;param name="src" value="flash_ad.swf"&gt;
-&lt;embed src="different_file.swf" ...&gt;
-&lt;/object&gt;
-
-This embeds a flash video. IE will use the parameters in the object tag and thus
-will load the file **flash_ad.swf**. All other browsers will use the embed tag
-and play **different_file.swf**. Another common error is to specify different
-values for the transparency attribute when embedding flash.
-
-# Use of Browser-Specific CSS or JavaScript objects
-
-### The Symptom:
-
-Some CSS styling does not work in Google Chrome, even though they seem fine in
-IE or Firefox.
-
-### The problem:
-
-Each browser has its own private CSS selectors and JavaScript objects. Use of
-these types of markup is, by definition, not compatible with other browsers.
-These should only be used for non-critical tasks (e.g. adding text shadows). It
-is safest not to use them at all.
-
-### Recommendations:
-
-* Do not use
- [document.all](http://simonwillison.net/2003/Aug/11/documentAll/) in
- JavaScript. This is an outdated IE feature, all modern browsers
- support
- [document.getElementById()](https://developer.mozilla.org/En/Document.getElementById)
- and you should [use that
- instead](http://www.w3schools.com/HTMLDOM/dom_nodes_access.asp).
-* When diagnosing JavaScript issues, use Google Chrome's [built-in
- JavaScript
- debugger](http://www.google.com/chrome/intl/en/webmasters-faq.html#jsexec).
-* Do not use browser-specific (e.g. -moz-\*, -webkit-\*, -ie-\*) css
- selectors such as -moz-center or -webkit-highlight for critical
- visual features of your site, instead use standard CSS.
-* Do not use [CSS
- expressions](http://msdn.microsoft.com/en-us/library/ms537634%28VS.85%29.aspx)
- (e.g. width:expression()). These only work in IE, [have serious
- performance issues and have been
- deprecated](http://blogs.msdn.com/ie/archive/2008/10/16/ending-expressions.aspx).
-
-# Useful Tools
-
-We've found the following tools extremely useful when diagnosing compatibility
-problems with Websites. Using them can greatly decrease the amount of effort and
-guesswork that goes into fixing compatibility issues:
-
-1. Google Chrome has a [variety of built-in
- tools](http://www.google.com/support/chrome/bin/answer.py?hl=en&answer=95691)
- to help developers track down compatibility and performance issues.
-2. [Firebug](http://getfirebug.com/) - An excellent Firefox extension
- that can help examining markup, JavaScript and performance issues.
-3. [Fiddler](http://www.fiddler2.com/) - A free Windows-only tool that
- allows you to examine and replay HTTP requests and responses.
-
-# Additional Resources
-
-1. [Google Chrome Webmaster
- FAQ](http://www.google.com/chrome/intl/en/webmasters-faq.html) -
- Contains all the information in this document and loads more.
-2. [quirksmode](http://www.quirksmode.org/) - Useful Information about
- which features are implemented in which browser.
-3. [Reporting a bug in Google
- Chrome](/for-testers/bug-reporting-guidelines) - guidelines and
- pointers on how to write an effective clear bug report. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-clobber-landmines/index.md b/chromium/docs/website/site/Home/chromium-clobber-landmines/index.md
deleted file mode 100644
index 2153b5b78fa..00000000000
--- a/chromium/docs/website/site/Home/chromium-clobber-landmines/index.md
+++ /dev/null
@@ -1,162 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: chromium-clobber-landmines
-title: Chromium Clobber Landmines
----
-
-[TOC]
-
-## What are they?
-
-Clobber landmines are an easy way to send a targeted clobber to a class of
-builder machines (i.e. bot machines on build.chromium.org). This can be useful
-in the following circumstances:
-
-* A build breakage is discovered and requires all the bots for a given
- operating system to clobber
-* You know you're making a change which will introduce binary
- incompatibility
-
-Landmines have the property that if a bot 'rolls over' the revision containing
-them (either forwards or backwards), it will trigger a clobber. This is quite
-useful for trybots which can be assigned random base revisions, or may even just
-switch between HEAD and LKGR multiple times per day. Simply clobbering the bot
-manually once may not be enough to make sure that it's 'fixed' for good.
-
-## How do I use them?
-
-Simply add logic to
-[`build/get_landmines.py`](https://code.google.com/p/chromium/codesearch#chromium/src/build/get_landmines.py)
-in the
-[`print_landmines`](https://code.google.com/p/chromium/codesearch#chromium/src/build/get_landmines.py&q=print_landmines)`()`
-function. There are a variety of parameters which you can use to fine-tune the
-effect of a landmine:
-
-<table>
-<tr>
-<td> <b>Landmine parameter/function</b> </td>
-<td> <b>Example values</b></td>
-<td> <b>Description</b></td>
-</tr>
-<tr>
-<td> platform()</td>
-<td> 'win', 'mac', 'linux', 'ios', or 'android' </td>
-<td> target platform being built.</td>
-</tr>
-<tr>
-<td> gyp_defines()</td>
-<td> {'component': 'static_library'} ...</td>
-<td> dict()-ification of the GYP_DEFINES env var.</td>
-</tr>
-<tr>
-<td> distributor() </td>
-<td> 'goma', 'ib', or None</td>
-<td> the distributed compile technology in use for this build.</td>
-</tr>
-<tr>
-<td> builder()</td>
-<td> 'make', 'ninja', 'xcode', or 'msvs'</td>
-<td> the builder technology for this build. </td>
-</tr>
-<tr>
-<td> target</td>
-<td> 'Release', 'Debug'</td>
-<td> the target that print_landmines() is generating landmines for.</td>
-</tr>
-</table>
-
-To add a landmine for the given configuration, just `add()` a message in
-`print_landmines()`, conditioned on the configuration. Try to make the reason
-for the landmine as descriptive as possible, citing relevant revisions, CLs or
-bugs.
-
-### Example:
-
-```none
-def print_landmines(target):
-  # ... Other landmines here
-  if platform() == 'win' and builder() == 'ninja':
-    add('Compile on cc_unittests fails due to symbols removed in r185063.')
-```
-
-## Frequently Asked Questions:
-
-**Q: What happens if I delete/clean up/replace landmines in get_landmines()?**
-
-A: This is OK (as in, it won't break anything), but note that it will cause bots
-which match the configuration of the removed landmines to clobber again.
-
-Sometimes this is done intentionally: if there's a frequently-clobbered
-configuration it may be expedient to only have one landmine which is replaced
-when a clobber is needed.
-
-**Q: Can I include a landmine in a CL which does other things?**
-
-A: If you know that your change will **definitely** require some bots to
-clobber, then yes, you SHOULD include it with the rest of the changes.
-
-**Q: How do I include a landmine for a change in a different repository (e.g.,
-Blink, Skia)**
-
-A: The change to `build/get_landmines.py` should be included in the
-[roll](/developers/how-tos/get-the-code#Rolling_DEPS) (i.e., the CL that changes
-DEPS to update the revision). You will need to contact the current
-[gardener](/developers/tree-sheriffs#TOC-What-is-a-gardener-) of your component
-(listed at the top left of the [BuildBot
-waterfall](http://build.chromium.org/p/chromium/waterfall?reload=120)) and have
-them apply the change in their roll. See for example
-[19836002](https://codereview.chromium.org/19836002) for an example of adding a
-landmine during a Blink roll. If a roll lands without a landmine (say thanks to
-autoroll bot), it's ok to commit a separate CL with just the landmine, ideally
-as close as possible after the roll, since this leaves little gap between them
-(you do not need to roll back and have a manual roll+landmine CL, as this is
-rarely necessary).
-
-**Q: I have a question that's not here, whom do I bug?**
-
-A: Please bug [iannucci@chromium.org](mailto:iannucci@chromium.org).
-
-## Details, please...
-
-For a given build:
-
-1. Check out some version of the code
-2. landmines.py runs with the current GYP environment
- 1. This calls get_landmines() for each POSSIBLE target (not just
- the one that's going to be built).
- 2. If &lt;build_dir&gt;/&lt;target&gt;/.landmines doesn't exist,
- it's written with the result of get_landmines(&lt;target&gt;)
- 3. Else
- 1. If the result of get_landmines(&lt;target&gt;) differs from
- the content of the .landmines file, the diff is written out
- to &lt;build_dir&gt;/&lt;target&gt;/.landmines_triggered .
- 2. Else &lt;build_dir&gt;/&lt;target&gt;/.landmines_triggered
- is deleted
-3. compile.py runs with a --target passed to it
- 1. if &lt;build_dir&gt;/&lt;target&gt;/.landmines_triggered exists,
- compile.py prints the contents of the file and behaves as if
- --clobber was specified on the command line.
- 1. clobbering includes removing both .landmines and
- .landmines_triggered
-
-## Use cases
-
-### Moving generated files
-
-If you move [generated files](/developers/generated-files), then you need to
-clobber the build, otherwise stale files may be used (if they are found earlier
-during header search). Subtly, this shows up only on *later* CLs that change the
-generated file in the new location, but don't overwrite the stale one. See for
-example Issue
-[381111](https://code.google.com/p/chromium/issues/detail?id=381111)
-([comment](https://code.google.com/p/chromium/issues/detail?id=381111#c4)).
-Further, if this change happens in a separate repository (e.g., Blink), then CLs
-that change the generated files don't work until the repo has rolled and a
-landmine has been added. I.e., the steps are:
-
-1. Submit Blink CL moving generated files.
-2. Roll Blink to Chromium, including landmine (or include in separate
- followup CL).
-3. Submit Blink CL changing generated files. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-privacy/index.md b/chromium/docs/website/site/Home/chromium-privacy/index.md
deleted file mode 100644
index e237837cd4d..00000000000
--- a/chromium/docs/website/site/Home/chromium-privacy/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: chromium-privacy
-title: Chromium Privacy
----
-
-[TOC]
-
-Our promise: *Chromium provides users full transparency and control over the
-information managed by the browser.*
-
-Furthermore, we’re constantly trying to improve privacy aspects of your browsing
-experience by implementing new innovative privacy features.
-
-### How can I get involved?
-
-If you discover a privacy issue, e.g. a behavior where your personal information
-is not adequately protected, or used in an non-transparent or unexpected
-fashion, or bugs related to existing privacy features such as the content
-settings, please [file a
-bug](http://code.google.com/p/chromium/issues/entry?template=Privacy%20issue) in
-our public bug tracker.
-
-If you want to report a privacy issue that contains e.g. personal information,
-or other sensitive data, please file a bug using the [confidential
-template](https://bugs.chromium.org/p/chromium/issues/entry?template=Privacy+issue+%28confidential%29).
-
-For general discussions, please post to the [technical discussion
-forums](/developers/technical-discussion-groups).
-
-### Privacy Reviews
-
-**To ensure users maintain a consistent way to control their experience with the
-web, new privacy relevant features are required to undergo a privacy review.
-Through these reviews, developers receive feedback on how to improve user
-control and over how Chromium handles user data.**
-
-### Additional Information on Chromium, Google Chrome, and Privacy
-
-**Features that communicate with Google made available through the compilation of code in Chromium are subject to the [Google Privacy Policy](http://www.google.com/policies/privacy/).**
-**Additionally, the [Google Chrome Privacy
-Notice](http://www.google.com/chrome/intl/en/privacy.html) describes the privacy
-practices that are specific to the Google Chrome family of products. If you want
-to learn more about Google Chrome's privacy features you can also check out the
-[Google Chrome Privacy landing
-page](https://www.google.com/chrome/browser/features.html#privacy) and the
-[Google Chrome Privacy
-Whitepaper](http://www.google.com/intl/en/landing/chrome/google-chrome-privacy-whitepaper.pdf)
-which describes what information is transmitted to Google and why, as well as
-how to disable certain features in Google Chrome which affect your privacy.** \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/covert-tracking/index.md b/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/covert-tracking/index.md
deleted file mode 100644
index 84a50d4ab42..00000000000
--- a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/covert-tracking/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-privacy
- - Chromium Privacy
-- - /Home/chromium-privacy/privacy-sandbox
- - The Privacy Sandbox
-page_name: covert-tracking
-title: covert-tracking
----
-
-## Covert Tracking
-
-Unlike browser resources such as cookies which offer users the ability to
-control or clear them, other aspects of browsers can be used to track and
-identify users in a way that they cannot control. These convert tracking
-mechanisms such as fingerprinting and cache inspection, leverage details of
-browsers that people are often not aware of and are hard for individuals to
-protect themselves against.
-In order to combat these opaque tracking vectors, Chrome is both proposing
-several new technologies to the web community to limit fingerprinting surfaces
-and taking action to close down these back channels of tracking information.
-
-### Fingerprinting
-
-Fingerprinting is the generation of a unique identifier derived from intrinsic
-differences between one user’s device and another’s that are detectable. Stable
-fingerprints are particularly dangerous in that they can be used to re-identify
-a user across any site indefinitely and users do not have the ability to
-manually clear them like cookies can be cleared. Unstable fingerprints are
-derived from information which may only be stable for a short period of time,
-but can be used to link identities across sites that are visited within that
-period of stability
-
-#### Privacy Budget
-
-Our overarching strategy to combat fingerprinting and not impede the development
-of the web is the [Privacy Budget
-proposal](https://github.com/bslassey/privacy-budget). After conducting a study
-to measure the amount of entropy exposed by each surface, we will start to
-enforce a limit on entropy collected by each site. Once the limit is reached,
-the site will no longer be able to collect any further entropy.
-
-### IP Address
-
-IP Address is a large single source of entropy. We will explore options for
-removing it as a reliable source of entropy. [Willful IP
-Blindness](https://github.com/bslassey/ip-blindness) is one approach that would
-facilitate an application server not receiving an IP address from separate
-connection handling infrastructure. This separation would afford for the use of
-IP addresses in more positive uses such as combating spam, fraud, and denial of
-service while preventing it from being used by the application service to
-covertly track a user.
-
-### Removing Passive Fingerprinting Surfaces
-
-Modern browsers expose several bits of information to web sites by default.
-Several projects are underway to remove this exposure and introduce alternative
-methods by which sites can query only the information they need. Examples
-include [obsoleting the User
-Agent](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/-2JIRNMWJ7s)
-string in transition to [Client Hints](https://github.com/WICG/ua-client-hints).
-
-### Reducing Entropy From Surfaces
-
-Certain APIs expose more information than is strictly needed for their purpose.
-Efforts are underway to systematically identify these APIs and reduce the
-information exposed to the minimum required for their motivating use cases.
-Examples include the [device
-orientation](https://bugs.chromium.org/p/chromium/issues/detail?id=1018180) and
-[battery-level](https://bugs.chromium.org/p/chromium/issues/detail?id=661792)
-APIs.
-
-## Cache Inspection
-
-A site that wants to transmit its identifier to another site without the use of
-cookies can selectively load or not load a series of resources such that they
-will be in the HTTP cache of the browser. As a third party embedded on another
-site, it can attempt to load those resources in such a way that they will appear
-if they are in the cache but will not load from the server if they are not in
-the cache. This can create a stable cross-site identifier. Chrome will
-[partition the HTTP
-cache](https://groups.google.com/a/chromium.org/forum/?utm_medium=email&utm_source=footer#!msg/blink-dev/6KKXv1PqPZ0/3_1nYzrBBAAJ)
-using top frame origin in order to prevent using this technique to create the
-stable cross-site identifier. Chrome will also [need to partition or disable
-other means of storing data in third party
-contexts](https://docs.google.com/document/d/1V8sFDCEYTXZmwKa_qWUfTVNAuBcPsu6FC0PhqMD6KKQ/edit). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/Sensitivity of Cohorts.pdf.sha1 b/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/Sensitivity of Cohorts.pdf.sha1
deleted file mode 100644
index 1a8a1caf9aa..00000000000
--- a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/Sensitivity of Cohorts.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dddd69c29e0d6686cfa7e1e7523522cbc98f82d8 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/index.md b/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/index.md
deleted file mode 100644
index a847360c550..00000000000
--- a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/floc/index.md
+++ /dev/null
@@ -1,181 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-privacy
- - Chromium Privacy
-- - /Home/chromium-privacy/privacy-sandbox
- - The Privacy Sandbox
-page_name: floc
-title: FLoC Origin Trial & Clustering
----
-
-**This page refers to the origin trial for the initial version of FLoC, which
-ran from Chrome 89 to 91.**
-
----
-
-See [web.dev/floc](https://web.dev/floc) for an explanation of the idea behind
-this experimental new advertising-related browser API, a component of Chrome's
-Privacy Sandbox effort to support web advertising without user tracking. To
-participate in the development process, see the [FLoC GitHub
-repository](https://github.com/WICG/floc).
-
-Even for developers experienced with [origin
-trials](https://web.dev/origin-trials/) and [third-party origin
-trials](https://web.dev/third-party-origin-trials/), the FLoC origin trial is a
-bit different. That's because FLoC is two different things: a JavaScript API
-that offers a signal which we hope will prove useful for interest based ads
-targeting, and also an on-device clustering algorithm that generates the signal.
-
-Figuring out the right way to perform that clustering is still very much an open
-question. During the course of the Origin Trial we expect to introduce multiple
-possible clustering algorithms, and we solicit feedback concerning both the
-privacy and the utility of the clusters produced. We hope that during the Origin
-Trial, the ad tech community will collectively figure out which tasks are well
-served by the FLoC approach. As we inevitably find areas where FLoC could do
-better, we look forward to public discussion about what modifications to
-clustering might help serve those uses.
-
-You might wonder: once there are multiple clustering algorithms performing FLoC
-assignment, how do you know which one you're getting? Per the [draft spec for
-the API](https://wicg.github.io/floc/), the object returned by cohort = await
-document.interestCohort(); has two keys: an id indicating which cluster the
-browser is in, and a version, a label that identifies the algorithm used to
-compute that id. (The API is not permitted in an insecure context, or where
-blocked by a Permissions-Policy, or on a site where you've used Chrome settings
-to block cookies.)
-
-We realize this strange situation, of a single API that might be wrapped around
-multiple different possible algorithms, means the Origin Trial of FLoC is not
-for the faint of heart. If you're still interested in joining us during this
-early experimental stage of our development, check out [this
-page](https://developer.chrome.com/blog/floc/) for the details of how to take
-part.
-
-# FLoC Algorithm Versions
-
-## Version "chrome.2.1"
-
-This algorithm was introduced in Chrome 89. It is similar to the approach called
-SortingLSH that was
-[described](https://github.com/google/ads-privacy/blob/master/proposals/FLoC/FLOC-Whitepaper-Google.pdf)
-by our colleagues in Google Research and Ads in October 2020, which their
-experiments indicated performs rather well for [some types of ad
-targeting](https://blog.google/products/ads-commerce/2021-01-privacy-sandbox/#jump-content:~:text=in%2Dmarket%20and%20affinity%20Google%20Audiences):
-"Affinity Audiences" (like "Cooking Enthusiasts") and "In-Market Audiences"
-(like "people actively researching Consumer Electronics").
-
-In this clustering technique, people are more likely to end up in the same
-cohort if they browse the same web sites. Only the domain of the site is used —
-not the URL or the contents of the pages, for example.
-
-The browser instance's cohort calculation is based on the following inputs:
-
- A subset of the registrable domain names (eTLD+1's) in the browser's Chrome
- history for the seven-day period leading up to the cohort calculation.
-
- A domain name is included if some page on that domain either:
-
- uses the document.interestCohort() API, or
-
- is detected as loading ads-related resources (see [Ad Tagging in
- Chromium](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ad_tagging.md)).
-
- The API is disabled, and the domain name is ignored, on any page which is
- served with the HTTP response header Permissions-Policy: interest-cohort=().
-
- Domain names of non-publicly routable IP addresses are never included.
-
-The inputs are turned into a cohort ID using a technique we're calling
-PrefixLSH. It is similar to a SimHash variant called SortingLSH that was
-[described](https://github.com/google/ads-privacy/blob/master/proposals/FLoC/FLOC-Whitepaper-Google.pdf)
-by our colleagues in Google Research and Google Ads last October.
-
- The browser uses each domain name included in the inputs to
- deterministically produce one 50-dimensional floating-point vector whose
- coordinates are pseudorandom draws from a Gaussian distribution, with the
- pseudorandom number generator seeded from a hash of the domain name. (Note:
- ultimately in all the 50-dimensional vectors described here, only the first
- 20 coordinates are ever used; the length of 50 is vestigial.)
-
- The browser then uses the full set of domain name inputs to
- deterministically produce a 50-bit Locality-Sensitive Hash bitvector, where
- the i'th bit indicates the sign (positive or negative) of the sum of the
- i'th coordinates of all the floating-point vectors derived from the domain
- names.
-
- A Chrome-operated server-side pipeline counts how many times each 50-bit
- hash occurs among [qualifying
- users](https://github.com/WICG/floc#qualifying-users-for-whom-a-cohort-will-be-logged-with-their-sync-data)
- — those for whom we log cohort calculations along with their sync data.
-
- The 50-bit hashes start in two big cohorts: all hashes whose first bit is 0,
- versus all hashes whose first bit is 1. Then each cohort is repeatedly
- divided into two smaller cohorts by looking at successive bits of the hash
- value, as long as such a division yields two cohorts each with at least 2000
- qualifying users. (Each cohort will comprise thousands of people total, when
- including those Chrome users for whom we don't sync cohort data.)
-
- The result is a list of cohorts represented as Locality-Sensitive Hash
- bitvector prefixes, which we number in lexicographic order and distribute to
- all Chrome browsers. Any browser can calculate its own 50-bit hash, find the
- unique prefix of that vector which appears in the list of cohorts, and read
- off the corresponding cohort ID.
-
- Note that this is an unsupervised clustering technique; no Federated
- Learning is used (despite the "FL" in the name). The only parameters of the
- clustering model are the details of pseudorandom number generation and the
- minimum cluster size threshold.
-
-After creation of the list of cohorts based on Locality-Sensitive Hash bitvector
-prefixes, we impose additional filtering criteria. Any time a browser instance's
-cohort is filtered, the promise returned by document.interestCohort() rejects,
-without further indication of the reason for rejection.
-
- Some filtering is calculated by the server-side pipeline, and the result is
- included with the list of cohort prefixes distributed to all Chrome
- instances:
-
- A cohort is filtered if it has too few qualifying users. (This is not
- possible at the outset, since the server-side clustering pipeline would
- not produce an under-sized cohort, but it could happen over time as
- people's browsing behavior changes. We do not handle changing cohort
- sizes by re-calculating the list of LSH prefixes, since that would
- change the meaning of existing cohorts ids.)
-
- A cohort is filtered if the browsing behavior of its qualifying users
- has a higher-than-typical rate of visits to web pages on sensitive
- topics. See [this
- paper](https://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRldnxneDo1Mzg4MjYzOWI2MzU2NDgw)
- for an explanation of the t-closeness calculation.
-
- Other filtering happens in an individual browser instance:
-
- An individual browser instance's cohort is filtered if the inputs to the
- cohort id calculation has fewer than seven domain names.
-
- An individual browser instance's cohort is filtered any time its user
- clears any browsing history data or other site data; a new cohort id is
- eventually re-computed without the cleared history.
-
- An individual browser instance's cohort is filtered in incognito
- (private browsing) mode
-
-All details are specific to this particular version of FLoC clustering, and
-subject to change in future clustering algorithms.
-
-Observed statistics of the cohorts created by this clustering algorithm, based
-on data from qualifying Chrome users:
-
- Number of cohorts, before any filtering: 33,872
-
- Number of LSH bits used to define a cohort: between 13 and 20
-
- Minimum number of qualifying Chrome users in a cohort: 2000
-
- Minimum number of different qualifying Chrome user browsing histories (sets
- of visited domains) in a cohort: 735
-
- Number of cohorts filtered due to sensitive browsing t-closeness test
- (t=0.1): 792 (approx. 2.3%) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/index.md b/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/index.md
deleted file mode 100644
index 36d46dd9eb0..00000000000
--- a/chromium/docs/website/site/Home/chromium-privacy/privacy-sandbox/index.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-privacy
- - Chromium Privacy
-page_name: privacy-sandbox
-title: The Privacy Sandbox
----
-
-[TOC]
-
-## Overview
-
-The Privacy Sandbox project’s mission is to “Create a thriving web ecosystem
-that is respectful of users and private by default.”
-The main challenge to overcome in that mission is the pervasive cross-site
-tracking that has become the norm on the web and on top of which much of the
-web’s ability to deliver and monetize content has been built. Our first
-principles for how we’re approaching this are laid out in the [Privacy Model for
-the Web explainer](https://github.com/michaelkleber/privacy-model). We believe
-that part of the magic of the web is that content creators can publish without
-any gatekeepers and that the web’s users can access that information freely
-because the content creators can fund themselves through online advertising.
-That advertising is vastly [more
-valuable](https://services.google.com/fh/files/misc/disabling_third-party_cookies_publisher_revenue.pdf)
-to publishers and advertisers and [more engaging and less annoying to
-users](https://services.google.com/fh/files/misc/disabling_third-party_cookies_publisher_revenue.pdf)
-when it is relevant to the user.
-We plan to introduce new functionality to serve the use cases that are part of a
-healthy web that are currently accomplished through cross-site tracking (or
-methods that are indistinguishable from cross-site tracking). As that
-functionality becomes available we will place more and more restrictions on the
-use of third party cookies, which are the most common mechanism for cross-site
-tracking today and eventually deprecate them entirely. In parallel to that we
-will aggressively combat the current techniques for non-cookie based cross-site
-tracking, such as fingerprinting, cache inspection, link decoration, network
-tracking and Personally Identifying Information (PII) joins.
-More about our intentions in [“Building a more private web: A path towards
-making third party cookies
-obsolete.](https://blog.chromium.org/2020/01/building-more-private-web-path-towards.html)”
-
-## Building Privacy Sandbox
-
-We see three distinct tracks:
-
-### Replacing Functionality Served by Cross-site Tracking
-
-Since third party cookies have been a part of the web since before its
-commercial coming of age in the 90s, critical functionality that the web has
-come to rely on (e.g., single sign-on, and personalized ads) has been developed
-assuming that functionality exists. In order to transition the web to a more
-privacy respecting default, it is incumbent upon us to replace that
-functionality as best we can with privacy-conscious methods.
-In the ideal end state, from a user’s perspective, there won’t be any difference
-between how the web of today and the web in a post-Privacy Sandbox world work,
-except that they will be able to feel confident that the browser is working on
-their behalf to protect their privacy and when they ask questions about how
-things work they will like the answers they find. In addition, if a given user
-is either uncomfortable with or just doesn’t like personalized advertising, they
-will have the ability to turn it off without any degradation of their experience
-on the web.
-Relevant use-cases:
-
-* Combating Spam, Fraud and DoS:[ Trust Tokens
- API](https://github.com/WICG/trust-token-api)
-* Ad conversion measurement:
- * [Click Through Conversion Measurement Event-Level
- API](https://github.com/csharrison/conversion-measurement-api)
- * [Aggregated Reporting
- API](https://github.com/csharrison/aggregate-reporting-api)
-* Ads targeting:
- * Contextual and first-party-data targeting fits into proposal of
- Privacy Model in that it only requires first party information
- about the page that the user is viewing or about that user’s
- activity on their site.
- * Interest-based targeting:
- [FLoC](/Home/chromium-privacy/privacy-sandbox/floc)
- * Remarketing: [Private Interest Groups, Including Noise
- (PIGIN)](https://github.com/michaelkleber/pigin) now replaced by
- [Two Uncorrelated Requests, Then Locally-Executed Decision On
- Victory
- (TURTLE-DOV)](https://github.com/michaelkleber/turtledove)
-* Federated login:
- * [WebID](https://github.com/samuelgoto/WebID)
-* SaaS embeds, third-party CDNs:
- * [Partitioned cookies
- (CHIPS)](https://github.com/DCtheTall/CHIPS)
-
-### Turning Down Third-Party Cookies
-
-As noted above, the third party cookies are the main mechanism by which users
-are tracked across the web. We eventually need to remove that functionality, but
-we need to do it in a responsible manner.
-Relevant projects:
-
-* Separating First and Third Party Cookies: [Requirement to label
- third party cookies as “SameSite=None, as well as require them to be
- marked Secure](https://web.dev/samesite-cookies-explained/)
-* Creating [First-Party Sets
- ](https://github.com/krgovind/first-party-sets/)
-* [Removing third party cookies
- ](https://blog.chromium.org/2020/01/building-more-private-web-path-towards.html)
-
-### Mitigating workarounds
-
-As we’re removing the ability to do cross-site tracking with cookies, we need to
-ensure that developers take the well-lit path of the new functionality rather
-than attempt to track users through some other means.
-Our focus (more details to be added)
-
-* Fingerprinting:
- * [Privacy Budget](https://github.com/bslassey/privacy-budget)
- * Removing Passive Fingerprinting Surfaces
- * [Client-side language
- selection](https://github.com/davidben/client-language-selection)
- * [User-Agent String](https://github.com/WICG/ua-client-hints)
- * Reducing Entropy from Surfaces
- * [Device
- Sensors](https://bugs.chromium.org/p/chromium/issues/detail?id=1018180)
- * [Battery
- Level](https://bugs.chromium.org/p/chromium/issues/detail?id=661792)
- * [IP Address](https://github.com/bslassey/ip-blindness)
-* Cache inspection
- * [Partitioning HTTP
- Cache](https://docs.google.com/document/d/1XJMm89oyd4lJ-LDQuy0CudzBn1TaK0pE-acnfJ-A4vk/edit)
- * [Connection Pools](https://fetch.spec.whatwg.org/#connections)
- * [DNS Cache, Sessions Tickets, HTTP Server
- properties](https://github.com/MattMenke2/Explainer---Partition-Network-State)
- * [Other
- caches](https://docs.google.com/document/d/1V8sFDCEYTXZmwKa_qWUfTVNAuBcPsu6FC0PhqMD6KKQ/edit#heading=h.ve7o178iijzr)
-* Navigation tracking
- * [Referer
- clamping](https://groups.google.com/a/chromium.org/d/msg/blink-dev/aBtuQUga1Tk/n4BLwof4DgAJ)
-* Network Level tracking
- * [DNS](/developers/dns-over-https)
- * [SNI](https://github.com/tlswg/draft-ietf-tls-esni)
- * [Moar
- TLS](https://www.usenix.org/sites/default/files/conference/protected-files/enigma_slides_schechter.pdf)
-
-## How to participate
-
-In general, we welcome the community to give feedback by filing issues on
-explainers hosted on Github, via the blink-dev intent posts or in any relevant
-standards body. For ads focused API proposals in particular. we encourage you to
-give [feedback](https://github.com/w3c/web-advertising/blob/master/README.md) on
-the [web standards community](https://www.w3.org/community/web-adv/) proposals
-via GitHub and make sure they address your needs. And if they don’t, file issues
-through GitHub or [email](https://lists.w3.org/Archives/Public/public-web-adv/)
-the W3C group.
-If you rely on the web for your business, please ensure your technology vendors
-engage in this process and share your feedback with the trade groups that
-represent your interests. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/OWNERS b/chromium/docs/website/site/Home/chromium-security/OWNERS
deleted file mode 100644
index c58a112f042..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/OWNERS
+++ /dev/null
@@ -1,8 +0,0 @@
-adetaylor@google.com
-awhalley@google.com
-eisinger@google.com
-estark@google.com
-jclinton@google.com
-mkwst@google.com
-nasko@google.com
-nparker@google.com \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/adding-permissions/index.md b/chromium/docs/website/site/Home/chromium-security/adding-permissions/index.md
deleted file mode 100644
index c510b87f70a..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/adding-permissions/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: adding-permissions
-title: So you want to add a new permission?
----
-
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/decode-mitigation-flags.html b/chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/decode-mitigation-flags.html
deleted file mode 100644
index cae3befd8fa..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/decode-mitigation-flags.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>View mitigation flags</title>
- </head>
- <body>
- Paste mitigation values from chrome://sandbox output.
- <form>
- Chrome (desiredMitigations): <input type="text" id="chrome"><br>
- Platform (platformMitigations): <input type="text" id="platform"><br>
- <input type="button" value="Expand" OnClick="work()">
- </form>
- <pre id="output"></pre>
- <script type="text/javascript">
- /*
- See //sandbox/win/src/security_level.h. This is a bitfield so is
- easy to process.
- */
- const ChromeMitigationFlags = [
- 'MITIGATION_DEP', // 0x00000001;
- 'MITIGATION_DEP_NO_ATL_THUNK', // 0x00000002;
- 'MITIGATION_SEHOP', // 0x00000004;
- 'MITIGATION_RELOCATE_IMAGE', // 0x00000008;
- 'MITIGATION_RELOCATE_IMAGE_REQUIRED', // 0x00000010;
- 'MITIGATION_HEAP_TERMINATE', // 0x00000020;
- 'MITIGATION_BOTTOM_UP_ASLR', // 0x00000040;
- 'MITIGATION_HIGH_ENTROPY_ASLR', // 0x00000080;
- 'MITIGATION_STRICT_HANDLE_CHECKS', // 0x00000100;
- 'MITIGATION_DLL_SEARCH_ORDER', // 0x00000200;
- 'MITIGATION_HARDEN_TOKEN_IL_POLICY', // 0x00000400;
- 'MITIGATION_WIN32K_DISABLE', // 0x00000800;
- 'MITIGATION_EXTENSION_POINT_DISABLE', // 0x00001000;
- 'MITIGATION_DYNAMIC_CODE_DISABLE', // 0x00002000;
- 'MITIGATION_DYNAMIC_CODE_DISABLE_WITH_OPT_OUT', // 0x00004000;
- 'MITIGATION_DYNAMIC_CODE_OPT_OUT_THIS_THREAD', // 0x00008000;
- 'MITIGATION_NONSYSTEM_FONT_DISABLE', // 0x00010000;
- 'MITIGATION_FORCE_MS_SIGNED_BINS', // 0x00020000;
- 'MITIGATION_IMAGE_LOAD_NO_REMOTE', // 0x00040000;
- 'MITIGATION_IMAGE_LOAD_NO_LOW_LABEL', // 0x00080000;
- 'MITIGATION_IMAGE_LOAD_PREFER_SYS32', // 0x00100000;
- 'MITIGATION_RESTRICT_INDIRECT_BRANCH_PREDICTION', // 0x00200000;
- ];
-
- /* Defined in Windows.h -> Winbase.h These are not just bitflields but
- masked bitfields. |offset| indicates the shift within the 64bit
- field indicated by the |type| entry. |mask| and |value| are then
- used to compare the 64bit field to determine if an option is set.
- |mask| and |value| must be <256 because of how bits are tested
- later.
- */
- const WindowsMitigations = [
- // basic (pc0) mitigations in {win7},{lsb of pc1}.
- {'type': 'pc0', 'mitigation': 'DEP_ENABLE', 'value': 0x1, 'mask': 0x01, 'offset':0},
- {'type': 'pc0', 'mitigation': 'DEP_ATL_THUNK_ENABLE', 'value': 0x2, 'mask': 0x02, 'offset':0},
- {'type': 'pc0', 'mitigation': 'SEHOP_ENABLE', 'value': 0x4, 'mask': 0x04, 'offset':0},
-
- // pc1 mitigations in {lsb of pc1}. PROCESS_CREATION_MITIGATION_POLICY.
- {'type': 'pc1', 'mitigation': 'FORCE_RELOCATE_IMAGES_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset':8},
- {'type': 'pc1', 'mitigation': 'FORCE_RELOCATE_IMAGES_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset':8},
- {'type': 'pc1', 'mitigation': 'FORCE_RELOCATE_IMAGES_ALWAYS_ON_REQ_RELOCS', 'value': 0x3, 'mask': 0x03, 'offset':8},
-
- {'type': 'pc1', 'mitigation': 'HEAP_TERMINATE_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 12},
- {'type': 'pc1', 'mitigation': 'HEAP_TERMINATE_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 12},
- {'type': 'pc1', 'mitigation': 'HEAP_TERMINATE_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 12},
-
- {'type': 'pc1', 'mitigation': 'BOTTOM_UP_ASLR_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 16},
- {'type': 'pc1', 'mitigation': 'BOTTOM_UP_ASLR_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 16},
- {'type': 'pc1', 'mitigation': 'BOTTOM_UP_ASLR_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 16},
-
- {'type': 'pc1', 'mitigation': 'HIGH_ENTROPY_ASLR_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 20},
- {'type': 'pc1', 'mitigation': 'HIGH_ENTROPY_ASLR_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 20},
- {'type': 'pc1', 'mitigation': 'HIGH_ENTROPY_ASLR_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 20},
-
- {'type': 'pc1', 'mitigation': 'STRICT_HANDLE_CHECKS_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 24},
- {'type': 'pc1', 'mitigation': 'STRICT_HANDLE_CHECKS_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 24},
- {'type': 'pc1', 'mitigation': 'STRICT_HANDLE_CHECKS_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 24},
-
- {'type': 'pc1', 'mitigation': 'WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 28},
- {'type': 'pc1', 'mitigation': 'WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 28},
- {'type': 'pc1', 'mitigation': 'WIN32K_SYSTEM_CALL_DISABLE_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 28},
-
- {'type': 'pc1', 'mitigation': 'EXTENSION_POINT_DISABLE_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 32},
- {'type': 'pc1', 'mitigation': 'EXTENSION_POINT_DISABLE_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 32},
- {'type': 'pc1', 'mitigation': 'EXTENSION_POINT_DISABLE_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 32},
-
- {'type': 'pc1', 'mitigation': 'PROHIBIT_DYNAMIC_CODE_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 36},
- {'type': 'pc1', 'mitigation': 'PROHIBIT_DYNAMIC_CODE_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 36},
- {'type': 'pc1', 'mitigation': 'PROHIBIT_DYNAMIC_CODE_ALWAYS_ON_ALLOW_OPT_OUT', 'value': 0x3, 'mask': 0x03, 'offset': 36},
-
- {'type': 'pc1', 'mitigation': 'CONTROL_FLOW_GUARD_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 40},
- {'type': 'pc1', 'mitigation': 'CONTROL_FLOW_GUARD_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 40},
- {'type': 'pc1', 'mitigation': 'CONTROL_FLOW_GUARD_EXPORT_SUPPRESSION', 'value': 0x3, 'mask': 0x03, 'offset': 40},
-
- {'type': 'pc1', 'mitigation': 'BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 44},
- {'type': 'pc1', 'mitigation': 'BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 44},
- {'type': 'pc1', 'mitigation': 'BLOCK_NON_MICROSOFT_BINARIES_ALLOW_STORE', 'value': 0x3, 'mask': 0x03, 'offset': 44},
-
- {'type': 'pc1', 'mitigation': 'FONT_DISABLE_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 48},
- {'type': 'pc1', 'mitigation': 'FONT_DISABLE_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 48},
- {'type': 'pc1', 'mitigation': 'AUDIT_NONSYSTEM_FONTS', 'value': 0x3, 'mask': 0x03, 'offset': 48},
-
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_NO_REMOTE_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 52},
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_NO_REMOTE_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 52},
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_NO_REMOTE_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 52},
-
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 56},
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 56},
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_NO_LOW_LABEL_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 56},
-
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 60},
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 60},
- {'type': 'pc1', 'mitigation': 'IMAGE_LOAD_PREFER_SYSTEM32_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 60},
-
- // pc2: in second 64bit block only. (PROCESS_CREATION_MITIGATION_POLICY2).
- {'type': 'pc2', 'mitigation': 'LOADER_INTEGRITY_CONTINUITY_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 4},
- {'type': 'pc2', 'mitigation': 'LOADER_INTEGRITY_CONTINUITY_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 4},
- {'type': 'pc2', 'mitigation': 'LOADER_INTEGRITY_CONTINUITY_AUDIT', 'value': 0x3, 'mask': 0x03, 'offset': 4},
-
- {'type': 'pc2', 'mitigation': 'STRICT_CONTROL_FLOW_GUARD_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 8},
- {'type': 'pc2', 'mitigation': 'STRICT_CONTROL_FLOW_GUARD_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 8},
- {'type': 'pc2', 'mitigation': 'STRICT_CONTROL_FLOW_GUARD_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 8},
-
- {'type': 'pc2', 'mitigation': 'MODULE_TAMPERING_PROTECTION_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 12},
- {'type': 'pc2', 'mitigation': 'MODULE_TAMPERING_PROTECTION_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 12},
- {'type': 'pc2', 'mitigation': 'MODULE_TAMPERING_PROTECTION_NOINHERIT', 'value': 0x3, 'mask': 0x03, 'offset': 12},
-
- {'type': 'pc2', 'mitigation': 'RESTRICT_INDIRECT_BRANCH_PREDICTION_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 16},
- {'type': 'pc2', 'mitigation': 'RESTRICT_INDIRECT_BRANCH_PREDICTION_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 16},
- {'type': 'pc2', 'mitigation': 'RESTRICT_INDIRECT_BRANCH_PREDICTION_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 16},
-
- {'type': 'pc2', 'mitigation': 'ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 20},
- {'type': 'pc2', 'mitigation': 'ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 20},
- {'type': 'pc2', 'mitigation': 'ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 20},
-
- {'type': 'pc2', 'mitigation': 'SPECULATIVE_STORE_BYPASS_DISABLE_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 24},
- {'type': 'pc2', 'mitigation': 'SPECULATIVE_STORE_BYPASS_DISABLE_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 24},
- {'type': 'pc2', 'mitigation': 'SPECULATIVE_STORE_BYPASS_DISABLE_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 24},
-
- {'type': 'pc2', 'mitigation': 'CET_USER_SHADOW_STACKS_ALWAYS_ON', 'value': 0x1, 'mask': 0x03, 'offset': 28},
- {'type': 'pc2', 'mitigation': 'CET_USER_SHADOW_STACKS_ALWAYS_OFF', 'value': 0x2, 'mask': 0x03, 'offset': 28},
- {'type': 'pc2', 'mitigation': 'CET_USER_SHADOW_STACKS_RESERVED', 'value': 0x3, 'mask': 0x03, 'offset': 28},
- ];
-
- // Returns a byte vector (in ints).
- function parseHexString(str) {
- let buffer = new ArrayBuffer(str.length / 2);
- let bytes = new Uint8Array(buffer);
- let idx = 0;
- while (str.length >= 2) {
- bytes[idx] = parseInt(str.substring(0, 2), 16);
- str = str.substring(2, str.length);
- idx++;
- }
- return bytes;
- }
-
- // Bits are msb..lsb.
- function isBitSet(bytes, bit) {
- if (bit > bytes.length * 8) {
- return false;
- }
- const idx = bytes.length - 1 - Math.floor(bit / 8);
- const ibit = bit % 8;
- return (bytes[idx] & (1 << ibit)) == (1<<ibit);
- }
-
- // |mask| & |value| must be 0<=x<=255. Bits are msb..lsb.
- function areMaskedBitsEqual(bytes, offset, mask, value) {
- if (offset > bytes.length * 8) {
- return false;
- }
- const idx = bytes.length - 1 - Math.floor(offset / 8);
- const ibit = offset % 8;
- return (bytes[idx] & (mask << ibit)) == (value<<ibit);
- }
-
- function selectSetItems(items, bytes) {
- let output = [];
- for (let i = 0; i<items.length; i++) {
- if (isBitSet(bytes, i)) {
- output.push(items[i]);
- }
- }
- return output;
- }
-
- function selectWindowsMitgations(items, bytes) {
- let output = [];
- // Default to DWORD version, if longer assume 1 or 2 64bit fields.
- let offsets = {'pc0': 0};
- if (bytes.length == 8) {
- offsets['pc1'] = 0;
- }
- else if (bytes.length == 16) {
- offsets['pc0'] = 64;
- offsets['pc1'] = 64;
- offsets['pc2'] = 0;
- }
- for (const item of items) {
- if (item.type == 'pc1' && bytes.length < 8)
- continue;
- if (item.type == 'pc2' && bytes.length < 16)
- continue;
- // Must be valid to use offset of type now.
- if (areMaskedBitsEqual(bytes, item['offset'] + offsets[item['type']],
- item['mask'], item['value'])) {
- output.push(item['mitigation']);
- }
- }
- return output;
- }
-
- function work(){
- let chrome = parseHexString(document.getElementById('chrome').value);
- let platform = parseHexString(document.getElementById('platform').value);
- document.getElementById('output').innerText =
- selectSetItems(ChromeMitigationFlags, chrome).join('\n') + '\n\n'
- + selectWindowsMitgations(WindowsMitigations, platform).join('\n');
- }
-
- // Listen for pasted input.
- const $cr = document.querySelector('#chrome');
- const $pl = document.querySelector('#platform');
- function changedHandler() {
- work();
- }
- $cr.addEventListener('input', changedHandler);
- $pl.addEventListener('input', changedHandler);
- </script>
- </body>
-</html>
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/index.md b/chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/index.md
deleted file mode 100644
index 4400b9f33b0..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows/index.md
+++ /dev/null
@@ -1,244 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/articles
- - Articles
-page_name: chrome-sandbox-diagnostics-for-windows
-title: chrome://sandbox Diagnostics for Windows
----
-
-## You are adequately sandboxed
-
-February 2020
-
-The latest Chrome stable release for Windows, [Chrome
-80](https://chromereleases.googleblog.com/2020/02/stable-channel-update-for-desktop.html)
-(early February 2020) provides detailed debugging information on how Chromium’s
-processes are sandboxed. You can access this by typing chrome://sandbox into the
-url-bar (Omnibox). The output is mainly of interest to Chromium developers but,
-along with chrome://conflicts, could be helpful when troubleshooting
-incompatibility between misbehaving software and the sandbox. This post will
-outline how the sandbox works on Windows and the information that is displayed.
-
-Chrome, and all web browsers, have a difficult job. Users visit sites that store
-sensitive information, serve complex data formats and run JavaScript code. Users
-visit more than one site in each browsing session, and each site might include
-components from a range of third parties. Chromium has to protect itself from
-malicious sites, and protect each site’s data from being accessed by other
-sites. Chromium developers mainly achieve this by writing secure code, testing,
-and fuzzing. However, Chrome has a JavaScript engine and parsers for complex
-data formats written in C/C++ for performance, which may have bugs that a
-malicious attacker can exploit to run arbitrary code. This, in turn, could allow
-an attacker to do anything Chrome can, such as accessing a user’s files, or
-calling Windows APIs, which may themselves have exploitable bugs. To provide a
-secondary layer of defense Chrome restricts what it can do by containing sites
-and services in sandboxed processes.
-
-Chrome uses a [multi-process
-architecture](https://www.google.com/googlebooks/chrome/small_04.html) for
-security and stability. This way, a bug or a crash in the process running one
-site will not bring down other sites, and data in one process can be made
-inaccessible to other processes. Chrome calls the processes running sites
-renderers and its main coordinating process the browser. The browser is
-supported by network, audio and gpu processes, and uses short-lived data-decoder
-and utility processes to parse and verify complex data formats. The goal of the
-[sandbox](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md)
-is to allow these processes the level of access to the operating system they
-need to do their jobs, and nothing more. Below, we’ll use the output of
-chrome://sandbox to show some of these restrictions.
-
-## chrome://sandbox
-
-First you’ll see a table of active processes (excluding the browser process, as
-that is not sandboxed) and some summary information:-
-
-<table>
-<tr>
-<td> Process </td>
-<td> Type </td>
-<td> Name</td>
-<td> Sandbox</td>
-<td> Integrity</td>
-<td> Mitigations</td>
-</tr>
-<tr>
-<td> 42152</td>
-<td> GPU </td>
-<td> GPU </td>
-<td> Limited </td>
-<td> S-1-16-4096 Low</td>
-<td> 01111001010110000000000000010000</td>
-</tr>
-<tr>
-<td> 28388</td>
-<td> Utility</td>
-<td> Network Service </td>
-<td> Not Sandboxed </td>
-</tr>
-<tr>
-<td> 43376</td>
-<td> Utility</td>
-<td> V8 Proxy Resolver </td>
-<td> Lockdown </td>
-<td> S-1-16-0 Untrusted</td>
-<td> 01111001010110000000000000010000</td>
-</tr>
-<tr>
-<td> 4880</td>
-<td> Utility</td>
-<td> Audio Service</td>
-<td> Restricted Non Admin</td>
-<td> S-1-16-4096 Low</td>
-<td> 01111011010110000000000000010000</td>
-</tr>
-<tr>
-<td> 13892</td>
-<td> Native Client module</td>
-<td> https://earth.google.com/static/9.3.100.2/earthnacl_pexe.nmf</td>
-<td> Lockdown</td>
-<td> S-1-16-0 Untrusted</td>
-<td> 01111001010110000000000000010000</td>
-</tr>
-<tr>
-<td> 25980</td>
-<td> Renderer </td>
-<td> Lockdown</td>
-<td> S-1-16-0 Untrusted</td>
-<td> 01111001110110000000000000010000</td>
-</tr>
-<tr>
-<td> 35952</td>
-<td> Renderer </td>
-<td> Lockdown</td>
-<td> S-1-16-0 Untrusted</td>
-<td> 01111001110110000000000000010000</td>
-</tr>
-</table>
-
-Followed by a raw dump of every process’s detailed sandbox configuration in
-JSON, which we’ll look at later.
-
-Depending on how many tabs you have open, and which plugins or extensions you’re
-running, you’ll see something similar. First you’ll see the various utility and
-plugin host processes, followed by a long list of renderer processes which host
-sites. Utility processes have different sandbox configurations, while every
-renderer process has the same sandbox configuration. For information on which
-renderer process hosts which site, see the Task Manager (Shift+Esc).
-
-[Sandbox
-Type](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md)
-ranges from ‘No Sandbox’ (the most permissive), via ‘Limited’ and ‘Restricted’
-to ‘Lockdown’ (the least permissive). The main browser process runs without a
-sandbox, and some supporting processes might do so, especially if the services
-they contain have only recently been moved out of the browser process. Our goal
-is to gradually tighten these sandboxes. Renderers are locked down so that they
-have only very limited access to the operating system, file system and other
-objects.
-
-Sandboxing is mainly achieved by dropping privileges and applying operating
-system mitigations. Privileges are controlled by [restricting the
-token](https://docs.microsoft.com/en-us/windows/win32/secauthz/restricted-tokens)
-and [Integrity
-Level](https://docs.microsoft.com/en-us/windows/win32/secauthz/mandatory-integrity-control)
-of a sandboxed process. Most things a process can interact with on Windows, like
-desktops, files, and pipes are [securable
-objects](https://docs.microsoft.com/en-us/windows/win32/secauthz/securable-objects).
-Windows checks a process’s token against access control lists before allowing a
-process to access or modify an object. Chrome’s browser process starts running
-with the same token as the user that launched it, which, for instance, can
-access all the user’s files. Renderers shed every privilege possible and limit
-their token to only the S-1-16-0 Untrusted integrity level significantly
-reducing the number of objects they can interact with. Services such as the GPU
-process, which interacts with the Windows graphics system, may need more access
-so run at higher integrity levels.
-
-The final column of the table shows the operating system mitigations which are
-applied to the process. This will vary based on the version and architecture of
-Windows that you are using. On the latest iteration of Windows 10 renderer
-processes will have:-
-
-01111001110110000000000000010000
-
-This is a hex representation of the [Windows process mitigation
-options](https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocessmitigationpolicy).
-You can decode this [using the attached
-decoder](https://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRldnxneDo3MDg0MDMzODNjODgzMDMy),
-which will show that the following process mitigations are enabled:
-HEAP_TERMINATE, BOTTOM_UP_ASLR, STRICT_HANDLE_CHECKS,
-WIN32K_SYSTEM_CALL_DISABLE, EXTENSION_POINT_DISABLE,
-BLOCK_NON_MICROSOFT_BINARIES, FONT_DISABLE, IMAGE_LOAD_NO_REMOTE,
-IMAGE_LOAD_NO_LOW_LABEL and RESTRICT_INDIRECT_BRANCH_PREDICTION.
-
-Other processes are similar (or not sandboxed). The audio process also has
-PROHIBIT_DYNAMIC_CODE enabled but, along with the data decoder and other utility
-processes, is missing WIN32K_SYSTEM_CALL_DISABLE. Dynamic code is required in
-the renderer as this is used by v8 to compile JavaScript to native code. If you
-have a PDF open you will see that its process does not require dynamic code.
-While PDFs can include JavaScript it is run in interpreted mode.
-
-On Windows 7 in 32-bit mode the story is quite different. The mitigations are
-0000000000000005 which corresponds to only DEP_ENABLE and SEHOP_ENABLE. These
-are not even indicated on 64-bit Windows 10 as they are always enabled there.
-This reduced set of mitigations means that a renderer compromise on Windows 7 is
-much more serious than on Windows 10. More of the operating system can be
-reached from a compromised process, allowing a malicious site more avenues to
-access data outside of their own site’s process. This is why we encourage our
-users to run the latest version of Windows so that they can benefit from the
-latest security technologies.
-
-Below the summary table you’ll see JSON showing more detailed output for the
-same processes:
-
-"NtCreateFile": \[
-
-"!(p\[1\] & 1) && !(prefix(p\[0\], '\\\\??\\\\')) -&gt; askBroker",
-
-"!(p\[1\] & 1) && scan(p\[0\], '~') -&gt; askBroker",
-
-"!(p\[2\] & 5fedff56) && p\[3\] == 1 && exact_i(p\[0\],
-'\\\\??\\\\C:\\\\Windows\\\\Fonts') -&gt; askBroker",
-
-"!(p\[2\] & 5fedff56) && p\[3\] == 1 && prefix_i(p\[0\],
-'\\\\??\\\\C:\\\\Windows\\\\Fonts\\\\') -&gt; askBroker",
-
-"prefix_i(p\[0\], '\\\\??\\\\pipe\\\\chrome.') -&gt; askBroker"
-
-\],
-
-The desiredMitigations field is defined by Chromium and shows which mitigations
-and options we would set if they were supported by the operating system. These
-map closely to the platform mitigations and can be decoded using the same tool.
-There are also a set of policy rules which are used when system calls are
-intercepted in a child process. The WIN32K_SYSTEM_CALL_DISABLE mitigation, and
-the reduced token of the child process, prevents renderers from calling various
-functions or from opening files or pipes they may need to do their job. The
-sandbox intercepts these functions as the child process starts and uses an IPC
-mechanism to forward calls that match a policy rule to the browser. These rules
-are evaluated again in the browser and, if allowed, the call is made and the
-results passed back into the renderer for it to use. The rule above allows
-renderer processes to read system fonts and connect to pipes matching
-\\??\\pipe\\chrome.\*. Any other attempts to open files are blocked. The first
-two rules are special and apply only in the renderer but are skipped in the
-browser process. This is because short names must be normalised before being
-tested, and this must occur in the browser process.
-
-New sandbox rules and policies are introduced to the Canary, Beta and Dev
-channels of Chrome before being enabled on the Stable channel so the output of
-chrome://sandbox might be different depending on which channel you are running.
-Rarely, other software may be incompatible with the sandbox, and you may see
-advice to run with the ‘--no-sandbox’ flag or to use Windows 7 compatibility
-mode. We do not encourage this as it will significantly reduce your security,
-and may prevent Chromium from working properly. Instead we encourage you to
-search the [Chrome community support
-forum](https://support.google.com/chrome/community?hl=en) and to report problems
-to your suppliers. We encourage software vendors and enterprises to test their
-applications and sites with Chrome’s Beta and Dev channels to uncover
-incompatibilities before they might affect their products or business. The
-output of chrome://sandbox, in combination with chrome://conflicts, might help
-when diagnosing incompatibilities or failures and might be useful when added to
-any bug reports. The output of these special pages contains system information
-which may include sensitive data such as usernames so we advise you to be
-careful if sharing it. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/diag4.png.sha1 b/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/diag4.png.sha1
deleted file mode 100644
index bc8d7af551a..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/diag4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4f91b27b6833783d436f298c467d8fd2c6c91aca \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram1.png.sha1 b/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram1.png.sha1
deleted file mode 100644
index fb1487219f2..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-adcc2b846e021cfdae91edd65676b531d12b61bf \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram2.png.sha1 b/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram2.png.sha1
deleted file mode 100644
index 6c9a818f149..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5c7a1d30190ca217feb9984709d518192fa1e9c5 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram3.png.sha1 b/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram3.png.sha1
deleted file mode 100644
index 58829b3ac71..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fb47aa118192c4e85332b6da4047e4630157f438 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/index.md b/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/index.md
deleted file mode 100644
index d82347bf30b..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/gwp-asan/index.md
+++ /dev/null
@@ -1,431 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/articles
- - Articles
-page_name: gwp-asan
-title: 'GWP-ASan: Sampling heap memory error detection in-the-wild'
----
-
-By Vlad Tsyrklevich, Dynamic Tools Teams — November 2019
-
-Memory safety errors, like use-after-frees and out-of-bounds reads/writes, are a
-leading source of vulnerabilities in C/C++ applications. Despite investments in
-preventing and detecting these errors in Chrome, over 60% of high severity
-vulnerabilities in Chrome are memory safety errors. Some memory safety errors
-don’t lead to security vulnerabilities but simply cause crashes and instability.
-
-Chrome uses state-of-the-art techniques to prevent these errors, including:
-
- [Coverage-guided](https://llvm.org/docs/LibFuzzer.html)
- [fuzzing](https://en.wikipedia.org/wiki/American_fuzzy_lop_(fuzzer)) with
- [AddressSanitizer](https://clang.llvm.org/docs/AddressSanitizer.html) (ASan)
-
- Unit and integration testing with ASan
-
- Defensive programming, like custom libraries to perform safe math or provide
- bounds checked containers
-
- Mandatory code review
-
-Chrome also makes use of sandboxing and exploit mitigations to complicate
-exploitation of memory errors that go undetected by the methods above.
-
-AddressSanitizer is a compiler instrumentation that finds memory errors
-occurring on the heap, stack, or in globals. ASan is highly effective and one of
-the lowest overhead instrumentations available that detects the errors that it
-does; however, it still incurs an average 2-3x performance and memory overhead.
-This makes it suitable for use with unit tests or fuzzing, but not deployment to
-end users. Chrome used to deploy [SyzyASAN instrumented
-binaries](https://blog.chromium.org/2013/05/testing-chromium-syzyasan-lightweight.html)
-to detect memory errors. SyzyASAN had a similar overhead so it was only deployed
-to a small subset of users on the canary channel. It was discontinued after the
-Windows toolchain switched to LLVM.
-
-GWP-ASan, also known by its recursive backronym, GWP-ASan Will Provide
-Allocation Sanity, is a sampling allocation tool designed to detect heap memory
-errors occurring in production with negligible overhead. Because of its
-negligible overhead we can deploy GWP-ASan to the entire Chrome user base to
-find memory errors happening in the real world that are not caught by fuzzing or
-testing with ASan. Unlike ASan, GWP-ASan can not find memory errors on the stack
-or in globals.
-
-GWP-ASan is currently enabled for all Windows and macOS users for allocations
-made using malloc() and PartitionAlloc. It is only enabled for a small fraction
-of allocations and processes to reduce performance and memory overhead to a
-negligible amount. At the time of writing it has found [over sixty
-bugs](https://bugs.chromium.org/p/chromium/issues/list?q=Hotlist%3DGWP-ASan&can=1)
-(many are still restricted view). About 90% of the issues GWP-ASan has found are
-use-after-frees. The remaining are out-of-bounds reads and writes.
-
-Design
-
-Overview
-
-GWP-ASan is conceptually similar to
-[ElectricFence](https://en.wikipedia.org/wiki/Electric_Fence) or
-[PageHeap](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/gflags-and-pageheap).
-GWP-ASan installs an allocator instrumentation that samples allocations to a
-debug allocator that places allocations on their own page, buttressed on both
-sides by guard pages. New allocations are randomly either left- or right-aligned
-within the page so that accessing the allocation below or above its bounds
-causes a crash. When the allocation is freed, the page is unmapped so that a
-use-after-free also immediately crashes. The allocator limits itself to a fixed
-amount of memory to control memory overhead and samples allocation to the debug
-allocator to reduce its high performance overhead.
-
-Use-after-frees and out-of-bounds accesses are often hard to debug because they
-corrupt unrelated memory which can lead to crashes in unrelated code. GWP-ASan
-simplifies debugging by causing a crash immediately at the site of the invalid
-memory access. Furthermore, when a crash occurs a special crash handler hook
-reports additional information, like allocation and deallocation stack traces,
-to aid debugging. This metadata is similar to what AddressSanitizer provides and
-has been shown to be very useful in identifying and fixing memory errors.
-
-GWP-ASan is a heap-only instrumentation so it does not find memory errors on the
-stack or in globals that AddressSanitizer would; however, it can find some
-memory errors that ASan would not. ASan works by instrumenting memory accesses
-during compilation and makes use of ‘interceptors’ to detect misuse of common
-library functions. Because GWP-ASan uses native memory management to detect
-memory errors it doesn’t require interceptors to detect invalid memory use in
-system libraries. This means it can identify API misuse for uncommon APIs that
-don’t have interceptors, or even detect memory errors that occur due to bugs in
-system libraries—something ASan can’t do without recompiling those potentially
-proprietary libraries.
-
-GWP-ASan is only as effective as the number of allocation call sites it
-instruments. For an internal Chrome allocator like PartitionAlloc it is possible
-to intercept all uses; however, for malloc/free we may only be able to
-instrument a subset of allocations. For example, on Windows we instrument malloc
-and free by overriding the symbols for modules we build linked against //base,
-so some DLLs shipped with Chrome—let alone Windows system code—may not be
-instrumented. On macOS however the system allocator allows adding global hooks
-meaning we can
-([and](https://bugs.chromium.org/p/chromium/issues/list?q=Hotlist%3DGWP-ASan%20Component%3DInternals%3EPlatformIntegration&can=1)
-[do](https://support.apple.com/en-us/HT210634)) detect memory errors from
-allocations originating in code we don’t control, like Apple system libraries.
-
-Allocator
-
-The GWP-ASan allocator reserves a fixed range of memory at initialization that
-it uses to service allocations to limit memory overhead. The memory range
-consists of pages intended to be used to return allocations, called slots,
-buttressed by guard pages as shown below.
-
-[<img alt="image"
-src="/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram1.png">](/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram1.png)
-
-Allocations are randomly left- or right-aligned to help detect both underflows
-and overflows. Like a traditional allocator, the GWP-ASan allocator always
-suitably aligns allocations for any object of that size. This means that
-right-aligned allocations are not always directly adjacent to the following
-guard page, so small out-of-bounds accesses may go undetected.
-
-[<img alt="image"
-src="/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram2.png">](/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram2.png)
-
-An array of allocation metadata is also maintained on the side to store stack
-traces and other metadata for individual slots.
-
-The allocator has three primary tunable parameters: MaxSimultaneousAllocations,
-MaxMetadata, and ReservedSlots. MaxSimultaneousAllocations controls the maximum
-number of allocations that can be simultaneously allocated.
-
-Once every usable slot has been allocated and deallocated, they are reused to
-service new allocations. When a use-after-free occurs the use may not occur
-immediately after deallocation. If the slot has been reallocated then the
-use-after-free will not behave as expected. If the slot is still allocated then
-the use won’t crash, but if it is deallocated then it will cause a crash but the
-metadata for the slot will have the wrong allocation/deallocation stack traces.
-
-Like ASan, GWP-ASan also makes use of a quarantine to help improve
-use-after-free detection. ReservedSlots is always greater than or equal to
-MaxSimultaneousAllocations and controls the number of slots we allocated virtual
-memory for. If ReservedSlots &gt; MaxSimultaneousAllocations, then not all slots
-can be simultaneously allocated. If slots are allocated in a round-robin fashion
-then a slot will not be re-used until at least (ReservedSlots -
-MaxSimultaneousAllocations) allocations have taken place, forming a rudimentary
-quarantine. This delays the amount of time until a slot is re-used, improving
-use-after-free detection at the expense of using more memory. The allocator
-consumes more virtual memory for the additional quarantine slots and more
-physical memory storing allocation metadata about those quarantine slots. Each
-slot’s metadata consumes about 400 bytes, primarily to store compressed
-allocation/deallocation stack traces, compared to 4 kilobytes for every
-allocation. As a result, setting ReservedSlots to be slightly greater than
-MaxSimultaneousAllocations doesn’t significantly increase the amount of memory
-used.
-
-The rudimentary quarantine described above is sufficient to delay slot re-use to
-accurately detect use-after-frees occurring shortly after deallocation; however,
-use-after-frees that occur long after deallocation are likely to access slots
-that have already been reallocated. This can lead to long-lived use-after-frees
-causing reports with numerous different stack traces for unrelated allocations
-and deallocations, making it difficult to identify the real
-allocation/deallocation call sites. This could be improved by making
-ReservedSlots orders of magnitude larger than MaxSimultaneousAllocations;
-however, the amount of additional allocation metadata that this would require
-allocating would significantly increase GWP-ASan’s memory profile.
-
-To address this, GWP-ASan makes use of a third MaxMetadata parameter to limit
-the number of slots for which we store metadata. We tune the allocator such that
-ReservedSlots &gt;= MaxMetadata &gt;= MaxSimultaneousAllocations. GWP-ASan keeps
-metadata for all currently allocated slots as well as some previously
-deallocated slots. Because we discard metadata for some deallocated slots, we
-can not always report allocation metadata if those slots are accessed because of
-a use-after-free. By setting ReservedSlots to be an order of magnitude or more
-greater than MaxMetadata and MaxSimultaneousAllocations, we make the quarantine
-so large that many allocations have to occur before a slot is reused. This
-ensures that even long-lived use-after-frees are not likely to be reallocated
-before they’re accessed. If no metadata for the slot is available, then a useful
-report can’t be sent; however, we eliminate many false reports. Short-lived
-use-after-frees are still likely to be accessed before the metadata for the slot
-is eliminated. Using random eviction to purge old metadata entries allows
-metadata for old allocations to sometimes survive long enough to be reported for
-long-lived use-after-frees.
-
-[<img alt="image"
-src="/Home/chromium-security/articles/gwp-asan/diag4.png">](/Home/chromium-security/articles/gwp-asan/diag4.png)
-
-The debug allocator currently only services allocations less than or equal to a
-single page in size. This is not a fundamental limitation in the design--it’s
-possible to service larger allocations by increasing the size of a slot to be
-multiple pages. It simply hasn’t been addressed yet because allocations larger
-than a page are relatively rare.
-
-Unactionable crash reports can occur when a pointer is corrupted and the
-overwritten value happens to accidentally point to a guard page or deallocated
-slot in the GWP-ASan region. When such a wild pointer is accessed, it causes a
-GWP-ASan report to be sent but it’s not actionable because the crash is caused
-by an unrelated bug that corrupted the pointer value to point to an unrelated
-allocation. In practice, such unactionable reports tend to occur on 32-bit
-devices because the address space is smaller and the probability of a wild
-pointer access touching the GWP-ASan region is much higher. GWP-ASan was
-disabled for 32-bit desktop builds in order to eliminate these unactionable
-reports. The allocator also explicitly maps the GWP-ASan memory region in high
-memory locations to avoid the operating system choosing to place GWP-ASan region
-in the bottom 32-bits of memory on 64-bit devices.
-
-Allocator Hooks
-
-GWP-ASan instruments an allocator’s allocation and deallocation routines. The
-allocation instrumentation performs sampling to only route a fraction of
-allocation requests to the debug allocator. The deallocation instrumentation
-determines if the given allocation was allocated by the debug allocator and
-routes the request to the debug allocator if so. Determining if an allocation
-was returned by GWP-ASan is as simple as checking that the address is in
-GWP-ASan’s fixed memory region and matching the address to the slot’s allocation
-metadata.
-
-Production allocators are normally highly optimized so adding additional
-instrumentation to the allocation/deallocation hot paths can easily introduce
-significant performance regressions. While the debug allocator’s overhead can be
-reduced to an arbitrary amount by adjusting the sampling probability, the
-overhead of the instrumentation itself introduces a constant overhead. Some
-allocation-heavy microbenchmarks regressed up to 5% when introducing allocator
-instrumentation no matter how low the sampling probability was made.
-
-The instrumentation regression stems from the allocator hot-paths being very
-performance sensitive and that instrumenting those hot-paths in Chrome requires
-introducing a costly indirect call. GWP-ASan uses process sampling, only
-enabling instrumentation for a fraction of processes, to reduce the
-instrumentation overhead. This allows reducing the instrumentation overhead
-arbitrarily and using more memory per-enabled process.
-
-Crash Handler
-
-Chrome is migrating to using crashpad for crash handling. Unlike its predecessor
-breakpad, crashpad works almost entirely out-of-process. GWP-ASan registers a
-hook in the crashpad process to inspect crashing processes in order to determine
-if the crashes are related to GWP-ASan. On initialization, GWP-ASan saves the
-address of the internal allocator object in a crashpad annotation so that the
-crash handler can access it in the event of a crash. If the crashpad hook finds
-this annotation, it reads the GWP-ASan allocator information to determine if the
-crash occurred due to an access to a GWP-ASan allocation. If so, it attaches
-[metadata](https://chromium.googlesource.com/chromium/src/+/refs/tags/79.0.3924.1/components/gwp_asan/crash_handler/crash.proto)
-for the associated allocation to the crash report.
-
-# Tuning
-
-Chrome uses a multi-process model with different types of processes with varying
-lifetimes and allocator demands. For example, there is a single browser process
-for the entire lifetime of a given browser window while many renderer processes
-can be launched and destroyed in a single tab. A browser process could be active
-for weeks and make tens of billions of allocations while other processes may
-live for milliseconds and make thousands of allocations. Accommodating both
-types of processes is tricky because there is a tension between GWP-ASan
-regularly sampling allocations and exhausting its fixed supply of memory.
-
-GWP-ASan exhausts its memory when all MaxSimultaneousAllocations slots are taken
-and new allocations can’t be serviced. This can occur when all of the
-allocations are long-lived, e.g. freed long after allocation or never freed at
-all. If GWP-ASan runs out of allocations early in a process’ lifetime then the
-majority of the process’ allocations go unsampled.
-
-In order to better understand allocation behavior we analyze heap traces for
-different runs of Chromium. The following trace comes from opening a browser,
-playing a YouTube video for ten seconds, and then closing the browser. The
-following visualization shows allocation lifetimes for malloc() allocations in
-the GPU process.
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/zNvAZs5kvLi3pWg95qzTx44-YEnV_cPhxUz5Zis7N3PHz3O8mTUl8AmyHRq4mBTyHlKLoHt8W4Ho-I4Ir8-mgShjxJBbBt4m0GMjUIOBPpf-paaeHpQcrjwLapXkHlvyK23uYzU-">
-
-Every vertical bar represents two thousand allocations subdivided into different
-allocation lifetimes. The horizontal axis is the process lifetime. This process
-makes approximately 250,000 allocations. Most allocations are freed within 25
-milliseconds, and only 4% of allocations are never freed during the process’
-lifetime.
-
-The following graph is for allocations made using PartitionAlloc in the YouTube
-renderer process:
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/DMRz54twMEpT7jM1N5YRptzCIbhaXXU3aAIfZ4cFbxEa47OcXLg6SosZJ4SN-TNEVkK8aVAv_jGzgdOvs18H8Bwatn0GdjLoswBywWCl83ON4fzTG8jpMoAJm0uJ-9firc5-7NtY">
-
-This process makes about 1.1 million allocations and about 7% go unfreed. In
-both examples, unfreed allocations cluster at the beginning of the process’
-lifetime. Because of the difference in number of total and long-lived
-allocations, the renderer process may exhaust GWP-ASan allocations early with
-the same parameters that would sample the GPU process without exhaustion.
-
-Long lifetime allocations can also lead to temporary allocator exhaustion, for
-example if the allocations are not freed until right before process destruction.
-Modeling simulated runs with different GWP-ASan configurations over different
-heap traces best illustrates what allocator behavior can occur in practice. The
-following is a simulated run for the renderer trace above with sampling
-probability 1/1000 and 16 simultaneous allocations:
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/443plq4yGGNrGszyiQZqIye4zoN-pb09q0qAUzz5qOtatSNKuFzI8sz29Ehlsr_EQHRlfgk0hWRY1gpgoeLXB6gSrSgKqJ9crm3XztePIEYnKWY7w1-lYkWh6Z_85W_snmZYLGqF"
-height=365 width=730.311111111111>
-
-The bars represent allocation lifetimes, with the vertical axis being time. In
-the simulation above GWP-ASan runs out of allocations for most of the process
-lifetime with occasional bursts of sampling as long-lived allocations are freed
-and re-used until they are replaced by new long-lived allocations.
-
-To avoid allocator exhaustion, the allocator must use more memory per process or
-reduce the sampling probability. The following is a simulation run with sampling
-probability 1/8000 and 64 simultaneous allocations:
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/64as-cfN6-NoQqkrvxQ3bzziNscyMgOB56gqaqpaayVAcMHRxdTH_aCc5cg42k02T4xW8JXgojEWl9RZZNIGwCNK1X19lvWflOSc_Mgfg-tVEssi_BuJs35Xdl9dBXzvAOmYjVRS"
-height=360 width=719.7338262476894>
-
-In this simulation GWP-ASan is able to evenly sample the entire process’
-lifetime despite the presence of long-lived and unfreed allocations. Some runs
-may still be unlucky and run out of allocations early, but it’s far less common.
-
-In practice, because of process sampling we can allocate more memory per enabled
-process. GWP-ASan’s production settings only sample a small fraction of
-processes, so it’s safe to allocate more memory for every enabled process.
-
-Instead of uniformly reducing the sampling probability for all processes,
-GWP-ASan picks a sampling probability from a range of probabilities at
-initialization. The sampling probability may sometimes be more frequent (and
-lead to early allocator exhaustion), or less frequent (and lead to fewer
-detected errors), than optimal. However, it allows accommodating different
-allocation behavior in different processes.
-
-# Results
-
-The Chrome project makes extensive use of ASan in unit tests and during fuzzing
-with [ClusterFuzz](https://google.github.io/clusterfuzz/) to detect memory
-errors early. As a result, the bugs GWP-ASan finds tend to be where our current
-fuzzing and test infrastructure don't sufficiently test the underlying error
-conditions. Unit and integration tests typically tend to only test expected
-success and failure conditions. Fuzzers test a wider variety of inputs, but
-coverage isn’t universal. Furthermore, fuzzing is well suited for testing
-specific narrowly-scoped components like parsers and other input processors, but
-not all memory safety errors in Chrome fit that description.
-
-Some of the types of bugs that GWP-ASan has been successful in finding include:
-
- Race conditions. These may manifest as races between two threads freeing an
- allocation and using it, or an event firing at an inopportune time such that
- an allocation used by the parent event loop is freed by the event.
- ClusterFuzz may not be able to exercise the correct conditions to trigger
- the race or may not reproduce the racy crash reliably enough to satisfy a
- heuristic to avoid reporting false positives.
-
- Chrome- or OS-specific configuration bugs. Some bugs may only manifest in
- configurations that are not exercised by Chrome’s testing and fuzzing
- infrastructure.
-
- Bugs in UI code. Unit tests and fuzzers tend not to exercise UI code. UI
- code is also susceptible to lifetime and bounds-related errors though they
- are more likely to be stability issues instead of security issues.
-
-One example issue is [this](https://crbug.com/977341) bug in Skia. The
-underlying memory error is a racy use-after-free where two threads
-near-simultaneously free and access an allocation. This bug had been causing
-crashes on macOS for a while, but it was difficult to spot the issue because the
-crashes occurred in different places depending on which underlying allocation
-was corrupted. With GWP-ASan it was immediately clear where the error occurred,
-but both threads freeing and accessing the allocation were doing so after
-locking the same mutex so it should have been impossible. With the use and
-deallocation stack traces proving that this was occurring despite the mutex, it
-was easy to track the bug down to the Skia mutex class. The macOS implementation
-did not account for spurious wake-ups and could violate mutual exclusion.
-Without the information provided by GWP-ASan, it would be difficult to debug
-such an issue.
-
-As GWP-ASan was progressively rolled out to wider audiences, it detected rarer
-and rarer bugs. Frequently occurring bugs may be detected within hours of a new
-canary release while some rarely-occurring bugs have only been detected in the
-stable population once so far. It’s possible to find these rare errors because
-GWP-ASan is deployed widely and designed to minimize unactionable reports, but
-there are likely to be rare errors that we don’t catch because increasing
-sampling to detect them would require unacceptable memory and performance
-overhead. The [ARM Memory Tagging
-Extension](https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/enhancing-memory-safety)
-and similar hardware-assisted memory tagging schemes would allow implementing a
-[similar error
-detector](https://github.com/google/sanitizers/blob/master/hwaddress-sanitizer/login_summer19_03_serebryany.pdf)
-with much lower memory and performance overhead and a much higher probability of
-detecting errors. Such memory tagging schemes also allow detecting stack bounds
-and use-after-return errors and may even be useful as exploit mitigations.
-
-# Future Improvements
-
-GWP-ASan has a high memory overhead per allocation. Every allocation is stored
-on its own page but Chrome’s median allocation size is only 32 bytes. It’s
-possible to place multiple allocations on a single physical page and maintain
-the ability to detect use-after-frees using a special virtual memory
-configuration. The approach reduces GWP-ASan’s memory overhead at the cost of
-reducing out-of-bounds error detection.
-
-Placing multiple allocations on the same virtual memory page would reduce
-use-after-free detection because the page could not be unmapped until all of the
-allocations on the page were deallocated. If a single allocation on that page
-were to never be freed then use-after-free detection would be completely lost.
-
-It is possible to use the operating system’s shared memory facilities to work
-around this constraint. It is possible to map shared memory multiple times in
-the same process. This allows multiple virtual memory pages to point to the same
-backing physical page. Multiple allocations can be placed on the same backing
-physical page but every allocation can be given it’s own unique slot/virtual
-page. This way, once an allocation is freed, the slot can be unmapped to detect
-use-after-frees without interfering with the other allocations. Only a fraction
-of allocations will be able to be left- or right-aligned within the page so
-out-of-bounds errors detection would suffer with this scheme; however, in
-practice use-after-free exceptions are much more common.
-
-[<img alt="image"
-src="/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram3.png">](/Home/chromium-security/articles/gwp-asan/gwp-asan-diagram3.png)
-
-This approach allows significantly increasing memory density and therefore the
-number of simultaneous allocations. It’s conceivable that the memory overhead of
-allocation metadata like stack traces would come to dominate GWP-ASan’s memory
-usage instead of the wasted page overhead.
-
-Increasing the number of simultaneous allocations helps prevent allocator
-exhaustion. Mobile platforms especially tend to be much more memory constrained
-so deploying GWP-ASan in those environments may necessitate use of this
-approach.
-
-Thanks to Matthew Denton, Adrian Taylor, Chris Palmer, Kostya Serebryany, Matt
-Morehouse, and Mitch Phillips for their feedback. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/articles/index.md b/chromium/docs/website/site/Home/chromium-security/articles/index.md
deleted file mode 100644
index b3ac7140303..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/articles/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: articles
-title: Articles
----
-
-Technical articles about Chrome Security.
-
-* [GWP-ASan: Sampling heap memory error detection
- in-the-wild](/Home/chromium-security/articles/gwp-asan) — November
- 2019
-* [chrome://sandbox - Sandbox Diagnostics for
- Windows](/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows)
- — February 2020 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/binding-integrity/index.md b/chromium/docs/website/site/Home/chromium-security/binding-integrity/index.md
deleted file mode 100644
index 2982982a2eb..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/binding-integrity/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: binding-integrity
-title: Binding Integrity
----
-
-Binding Integrity Project
-
-Motivation
-
-One of the reasons that browsers are easier to compromise than other kinds of
-client software is that they provide scripting capabilities to a potential
-attacker. As such, many of the exploits we’ve seen begin with a JavaScript
-program obtaining and manipulating a freed block of C++ memory. Although the
-Chrome sandboxing architecture provides excellent protection in this situation,
-we’d like to prevent JavaScript from getting freed blocks of memory in the first
-place, so as to make the full exploitation of Chrome even harder than it already
-is.
-
-Approach
-
-At the time a C++ object is created, we know the corresponding V8 type with
-which it will be later wrapped for use by V8. We devise an unguessable (by the
-attacker) representation for each type and put it into the C++ object when it is
-constructed. We similarly zero out this information at destruction time.
-
-At the time of a method callback into the C++ object, V8 happens to know the
-type that is expected to be associated with it. It can then determine what type
-representation should have been set into the block of memory at creation time,
-and check that it is still valid. Free blocks will have zeros (or will have been
-clobbered by heap freelists), and will fail the check. Mis-typed blocks will
-have different values, and will fail the check. Blocks crafted by the attacker
-won’t have valid values because the type information representation is
-unguessable, and will fail the check. At this point the renderer can shoot
-itself, rather than proceeding into C++ with corrupted memory.
-
-But these method invocation calls are very hot code paths, and we don’t want to
-introduce the overhead of another test and branch here.
-
-As it turns out, the V8 wrapper objects contain reference pointers back to the
-blocks of C++ memory, and these do a good job of keeping the memory alive. Once
-wrapped, a block is unlikely to be freed. Hence, most of the cases involve
-wrapping a block that is already free, and we get nearly the full benefit by
-doing the check at wrapper creation time only, where performance is not
-important.
-
-Implementation
-
-It is important that we do not bloat the size of the objects in order to hold
-this type representation.
-
-Many (but not all) objects wrapped by V8 inherit somewhere from a class called
-ScriptWrappable, which is a single pointer wide. It holds a pointer to the C++
-object’s wrapper when it is wrapped, or NULL otherwise. We can re-use the slot
-that holds the the wrapper pointer (which would otherwise be NULL for an
-unwrapped object) to hold the type information, because we only need the type
-information for unwrapped objects. Masking in a 1 in the bottom bit (otherwise
-unused due to aligned pointers) allows us to distinguish between the two cases.
-
-Hence, for objects that are to be checked in this manner, they must inherit
-somewhere from the ScriptWrappable class (which need not be a common base
-class).
-
-This implies that all objects that inherit from ScriptWrappable and have their
-own .idl files will have to call
-
-ScriptWrappable::init(this);
-
-as part of their constructors. Passing “this” is necessary to select between N
-overloaded versions of ScriptWrappable::init() based upon the type of the
-object.
-
-The implementations of the N overloaded versions of ScriptWrappable::init() are
-automatically generated by the .idl compiler (CodeGeneratorV8.pm at present)
-from the .idl files. The .idl files need not specify which objects are
-scriptwrappable, as the compiler can deduce this from type inheritance via
-partially specialized template tricks.
-
-The unguessable nature of the type representation is achieved by relying on ASLR
-to randomize the address of a per-type instance of an existing V8 data structure
-called WrapperTypeInfo. The address of the WrapperTypeInfo structure for a given
-type thus already provides what is required here.
-
-Note that ScriptWrappable was originally invented to provide a performance
-improvement. One additional benefit of this change is that making more objects
-ScriptWrappable makes chrome faster. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/boringssl/contributing/index.md b/chromium/docs/website/site/Home/chromium-security/boringssl/contributing/index.md
deleted file mode 100644
index 2749000269f..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/boringssl/contributing/index.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/boringssl
- - BoringSSL
-page_name: contributing
-title: Contributing to BoringSSL
----
-
-## Location of the code
-
-The [BoringSSL](/Home/chromium-security/boringssl) code lives at
-<https://boringssl.googlesource.com/boringssl.git>.
-
-It is mapped into the Chromium tree via
-[src/DEPS](https://chromium.googlesource.com/chromium/src/+/HEAD/DEPS) to
-[src/third_party/boringssl](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/boringssl/&sq=package:chromium)
-
-## Filing bugs
-
-Bugs are filed under the [BoringSSL issue
-tracker](https://bugs.chromium.org/p/boringssl/issues/list).
-
-## Building
-
-Refer to
-[BUILDING.md](https://boringssl.googlesource.com/boringssl/+/HEAD/BUILDING.md)
-for the canonical build instructions. Assuming those haven't changed, set things
-up to build through ninja by executing:
-
-```none
-cd src/third_party/boringssl/src
-cmake -GNinja -B build
-ninja -C build
-```
-
-Once the ninja files are generated you can re-build from other directories
-using:
-
-```none
-ninja -C <path-to-boringssl-src-build>
-```
-
-## Running the tests
-
-See
-[instructions](https://boringssl.googlesource.com/boringssl/+/HEAD/BUILDING.md#Running-tests)
-in BUILDING.md to run the tests. From a Chromium checkout, this incantation may
-be used:
-
-```none
-cd src/third_party/boringssl/src
-ninja -C build run_tests
-```
-
-## Uploading changes for review
-
-See
-[CONTRIBUTING.md](https://boringssl.googlesource.com/boringssl/+/HEAD/CONTRIBUTING.md)
-in the BoringSSL repository.
-
-## Rolling DEPS into Chromium
-
-Because BoringSSL lives in a separate repository, it must be "rolled" into
-Chromium to get the updates.
-
-To roll BoringSSL create a changelist in the Chromium repository that modifies
-[src/DEPS](https://chromium.googlesource.com/chromium/src/+/HEAD/DEPS) and
-re-generates the gn and asm files:
-
-* Simple example: <https://codereview.chromium.org/866213002> (Just
- modifies DEPS):
-* More complicated example:
- <https://codereview.chromium.org/693893006> (ASM changed and test
- added)
-
-There is a script to automate all these steps:
-
-```none
-python3 third_party/boringssl/roll_boringssl.py
-```
diff --git a/chromium/docs/website/site/Home/chromium-security/boringssl/index.md b/chromium/docs/website/site/Home/chromium-security/boringssl/index.md
deleted file mode 100644
index 69dec66f60c..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/boringssl/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: boringssl
-title: BoringSSL
----
-
-We have used a number of patches on top of OpenSSL for many years. Some of them
-have been accepted into the main OpenSSL repository, but many of them don’t mesh
-with OpenSSL’s guarantee of API and ABI stability and many of them are a little
-too experimental.
-
-But as Android, Chrome and other products have started to need some subset of
-these patches, things have grown very complex. The effort involved in keeping
-all these patches (and there are more than 70 at the moment) straight across
-multiple code bases is getting to be too much.
-
-So we’re switching models to one where we import changes from OpenSSL rather
-than rebasing on top of them. The
-[result](https://boringssl.googlesource.com/boringssl/) (at the time of writing)
-is used in Chrome on Android, OS X, and Windows. Over time we hope to use it in
-Android and internally too.
-
-There are no guarantees of API or ABI stability with this code: we are not
-aiming to replace OpenSSL as an open-source project. We will still be sending
-them bug fixes when we find them and we will be importing changes from upstream.
-Also, we will still be funding the Core Infrastructure Initiative and the
-OpenBSD Foundation.
-
-But we’ll also be more able to import changes from LibreSSL and they are welcome
-to take changes from us. We have already relicensed some of our prior
-contributions to OpenSSL under an ISC license at their request and completely
-new code that we write will also be so licensed.
-
-(Note: the name is aspirational and not yet a promise.) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/brag-sheet/index.md b/chromium/docs/website/site/Home/chromium-security/brag-sheet/index.md
deleted file mode 100644
index 3a9fbcfd98c..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/brag-sheet/index.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: brag-sheet
-title: Security Brag Sheet
----
-
-### Our Team and Resources
-
-* Our team includes some of the best security professionals in the
- business.
-* We work closely with top researchers like Michal Zalewski (lcamtuf)
- and Tavis Ormandy (taviso).
-* We contract with experts like iSec Partners and Chris Rohlf for
- targeted assessments.
-* We dedicate thousands of CPU cores to fuzz projects such as
- [WebKit](http://blog.chromium.org/2012/04/fuzzing-for-security.html),
- [Adobe
- Flash](http://googleonlinesecurity.blogspot.com/2011/08/fuzzing-at-scale.html)
- or [Chrome's PDF viewer](http://j00ru.vexillium.org/?p=1175).
-
-**White Papers**
-
-* Chrome leads in [white papers from 2 different security
- firms](https://www.blog.google/products/chrome-enterprise/2-new-white-papers-examine-enterprise-web-browser-security/).
-* Chrome leads in [white paper from respected security firm
- Accuvant](http://www.accuvant.com/sites/default/files/AccuvantBrowserSecCompar_FINAL.pdf).
-* Chrome leads in response time and reward program effectiveness in
- [this independent study from
- Berkeley](https://www.usenix.org/system/files/conference/usenixsecurity13/sec13-paper_finifter.pdf).
-* Chrome leads in [recommendations from respected German government
- organization, the
- BSI](https://www.bsi-fuer-buerger.de/SharedDocs/Downloads/DE/BSIFB/Publikationen/BSI-E-CS_001.pdf).
-
-### Containing Attacks
-
-* We have an [integrated sandbox](/Home/chromium-security/guts) that
- reduces the impact of most common vulnerabilities, and is much
- stronger than approaches used by other browsers.
-* We have [Site Isolation](/Home/chromium-security/site-isolation) to
- protect website data from compromised renderer processes and side
- channel attacks like Spectre.
-* We have [critical](/developers/severity-guidelines) security
- vulnerabilities relatively infrequently compared to other browsers.
-* We have [leading sandbox protection for the Adobe Flash
- plug-in](http://blog.chromium.org/2012/08/the-road-to-safer-more-stable-and.html).
-* We have [unique
- techniques](http://blog.chromium.org/2010/06/improving-plug-in-security.html)
- for significantly mitigating the security risks posed by plug-ins.
-* We have a robust built-in [sandboxed PDF
- viewer](http://chrome.blogspot.com/2010/11/pdf-goodness-in-chrome.html)
- which has leading security.
-* We implement [Strict Transport
- Security](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security)
- and [preloaded public key
- pinning](http://www.imperialviolet.org/2011/05/04/pinning.html),
- which protected our users against the [fraudulent Diginotar
- certificate](https://blog.mozilla.com/security/2011/08/29/fraudulent-google-com-certificate/)
- for \*.google.com.
-* We implement [root CA verification by the underlying operating
- system](/Home/chromium-security/root-ca-policy).
-* We have leading HTTPS security through features such as [mixed
- script
- blocking](http://blog.chromium.org/2012/08/ending-mixed-scripting-vulnerabilities.html).
-
-### Vulnerability Response
-
-* We are committed to releasing a fix for any
- [critical](/developers/severity-guidelines) security vulnerabilities
- in [under 60
- days](http://googleonlinesecurity.blogspot.com/2010/07/rebooting-responsible-disclosure-focus.html).
-* On average, we release fixes for [high and
- critical](/developers/severity-guidelines) severity vulnerabilities
- in about 30 days.
-* We have a demonstrated ability to get fixes to users [in
- under](http://googlechromereleases.blogspot.com/2011/03/stable-and-beta-channel-updates.html)
- [24 hours](http://twitter.com/VUPEN/status/46391969903161345).
-* We ensure updates are deployed in a [timely
- manner](http://www.techzoom.net/publications/silent-updates/), and
- invest in [new
- technologies](/developers/design-documents/software-updates-courgette)
- to do so.
-* We have a [Vulnerability Rewards
- Program](http://www.chromium.org/Home/chromium-security/vulnerability-rewards-program)
- to encourage third-party researchers to report vulnerabilities they
- discover.
-* We work with the security community and have a [Security Hall of
- Fame](http://www.chromium.org/Home/chromium-security/hall-of-fame)
- to acknowledge third-parties that materially contribute to improving
- our security.
-* We have the [successful Pwnium
- competition](http://chrome.blogspot.com/2012/03/pwnium-great-exploits-fast-patches.html),
- with large prizes, to keep us up to date with the latest, most
- advanced attacks.
-
-### Advanced Anti- Phishing and Malware defenses
-
-* We [warn
- you](http://www.google.com/support/chrome/bin/answer.py?answer=99020&hl=en)
- when you're about to visit a website we've previously identify as a
- malware or phishing site.
-* We keep the user better informed against phishing and similar
- attacks by [presenting the most relevant
- information](http://chrome.blogspot.com/2010/10/understanding-omnibox-for-better.html).
-* We implement new, [browser-based security
- enhancements](http://blog.chromium.org/2010/01/security-in-depth-new-security-features.html)
- to protect you against malicious sites.
-
-### High profile researchers and publications say nice things about us
-
-* A [Fortune
- article's](http://tech.fortune.cnn.com/2011/03/21/google-fixes-flashs-security-issues-ahead-of-adobe/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+fortunebrainstormtech+%28Fortune+Brainstorm+Tech%29)
- headline subtext: "Google's record on Chrome browser security is
- impressive, and that is important."
-* An [interview with Dino Dai Zovi and Charlie
- Miller](http://www.h-online.com/security/features/Hackers-versus-Apple-1202598.html):
- "I recommend that users surf the web with Google Chrome, disable
- unnecessary plug-ins, and use site-based plug-in security settings
- for the plug-ins that they do need."
-* An article noting [Chrome's unique 3-years-in-a-row
- survival](http://www.computerworld.com/s/article/9214022/Google_s_Chrome_untouched_at_Pwn2Own_hack_match)
- at the Pwn2Own competition: "the browser will have survived three
- consecutive Pwn2Owns, a record."
-* An article [noting our agility and fast security
- updates](http://www.h-online.com/security/news/item/Google-closes-Flash-hole-faster-than-Adobe-1209932.html):
- "Google has once again reacted faster than Adobe itself"
-* A more mainstream publication [interviews HD
- Moore](http://content.usatoday.com/communities/technologylive/post/2011/03/20-grand-not-enough-to-entice-hackers-to-crack-google-chrome/1),
- who calls Chrome the toughest browser: "Chrome was likely the most
- difficult target due to the extensive sandboxing."
-* An [article in the very mainstream Washington
- Post](http://www.washingtonpost.com/business/apples-taking-30-percent-of-app-store-subscriptions-is-an-unkind-cut/2011/02/14/ABbMfvH_story.html)
- notes that whilst other browsers are starting to chase Chrome's
- speed, Chrome is still the choice of the security conscious: "Both
- IE 9 and Firefox 4 look like major, welcome advances. But each falls
- short of Chrome in one key aspect: security."
-* A [TIME
- article's](http://techland.time.com/2011/03/14/pwn2own-roundup-apple-fails-google-stays-strong/)
- headline includes: "Google Stays Strong"
-* An [interesting interview with John Wilandar and Chaouki
- Bekrar](http://www.securityvibes.com/community/en/blog/2011/03/25/firefox-4-and-the-state-of-browser-security--the-expert-view)
- (VUPEN CEO). The interview is nominally about Firefox 4 but includes
- quotes such as "I'd say Chrome's sandboxing model still beats all
- the other browsers from an end user perspective.", "At VUPEN, we
- measure the security of web browsers not by counting the number of
- their vulnerabilities, but by counting the number of days, weeks, or
- months that the vendor is taking to fix vulnerabilities affecting
- their browsers... Today, Google is fixing Chrome vulnerabilities
- much faster than any other vendor – usually one or two security
- updates each month. Microsoft, Mozilla, and Apple are are usually
- releasing security updates for their browsers every 3 months, which
- is too long.", "Relying on third-party auditor through reward and
- bounty programs is the most effective way to improve the security of
- browsers". \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/bugs/automated-triage/index.md b/chromium/docs/website/site/Home/chromium-security/bugs/automated-triage/index.md
deleted file mode 100644
index 620d1e340dc..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/bugs/automated-triage/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/bugs
- - Security Bugs--
-page_name: automated-triage
-title: automated triage
----
-
diff --git a/chromium/docs/website/site/Home/chromium-security/bugs/automatic-filing/index.md b/chromium/docs/website/site/Home/chromium-security/bugs/automatic-filing/index.md
deleted file mode 100644
index 23fb7aacc36..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/bugs/automatic-filing/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/bugs
- - Security Bugs--
-page_name: automatic-filing
-title: Clusterfuzz automatic bug filing
----
-
-**This page is still under construction.**
-
-ClusterFuzz will file certain issues automatically. Currently, this is only done
-for reproducible security bugs for which it does not seem like a similar issue
-has been filed already.
-
-If you have a concern, please file a bug using [this
-template](https://bugs.chromium.org/p/chromium/issues/entry?components=Tools%3EStability%3EClusterFuzz). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz/index.md b/chromium/docs/website/site/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz/index.md
deleted file mode 100644
index 9fedf893bb3..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/bugs
- - Security Bugs--
-page_name: developing-fuzzers-for-clusterfuzz
-title: Developing Fuzzers for ClusterFuzz
----
-
-**[ClusterFuzz documentation has moved](https://google.github.io/clusterfuzz/)** \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/bugs/index.md b/chromium/docs/website/site/Home/chromium-security/bugs/index.md
deleted file mode 100644
index 4b2b350ea7e..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/bugs/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: bugs
-title: Security Bugs--
----
-
-Bugs happen. We know this to be as true as other fundamental laws of physics so
-long as we have humans writing code to bring new features and improvements to
-Chromium. We also know some of these bugs will have security consequences, so we
-do a number of things to prevent, identify, and fix Chromium security bugs.
-
-[TOC]
-
-## Security fuzzing
-
-We've build fuzzing infrastructure that automatically and continuously security
-["fuzz" test](http://en.wikipedia.org/wiki/Fuzz_testing) Chrome to find new bugs
-and help engineers patch and test fixes.
-[ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz), as the system is
-affectionately named, consists of 12000+ cores and fuzzes hundreds of millions
-of test cases each day to produce de-duplicated security bugs with small
-reproducible test cases. Since it was built (in 2009), ClusterFuzz has helped us
-find and fix [roughly two thousand security bugs in
-Chromium](https://code.google.com/p/chromium/issues/list?can=1&q=label%3AClusterFuzz+-status%3AWontFix%2CDuplicate+Type%3DBug-Security+&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-and other third party software.
-
-## Vulnerability Response and Remediation
-
-The [security sheriff](/Home/chromium-security/security-sheriff) is a rotating
-role that handles all incoming and open security bugs. to all reported security
-bugs. We are committed to releasing a fix for any
-[critical](/developers/severity-guidelines) security vulnerabilities in [under
-60
-days](http://googleonlinesecurity.blogspot.com/2010/07/rebooting-responsible-disclosure-focus.html).
-
-## Rewarding Vulnerability Research
-
-We try to reward awesome security research from external folks in a few ways:
-[Chromium Vulnerability
-Rewards](http://www.chromium.org/Home/chromium-security/vulnerability-rewards-program)is
-our ongoing program to reward security bug reports in Chrome and Chrome OS.
-**Pwnium** is a contest we run semi-regularly for proof-of-concept Chrome
-exploits. Our motivation is simple: we have a big learning opportunity when we
-receive full end-to-end exploits. Not only can we fix the bugs, but by studying
-the vulnerability and exploit techniques we can enhance our mitigations,
-automated testing, and sandboxing. This enables us to better protect our users.
-
-* [Pwnium
- 4](http://blog.chromium.org/2014/01/show-off-your-security-skills.html)
- at CanSecWest in March, 2014.
- [results](https://docs.google.com/presentation/d/1c90yZXNHs7w8oi7uXveEOCx5-8O_NZIxolEKalscuAQ/view).
-* [Pwnium
- 3](http://blog.chromium.org/2013/01/show-off-your-security-skills-pwn2own.html)
- at CanSecWest in 2013:
- [results](http://blog.chromium.org/2013/03/pwnium-3-and-pwn2own-results.html)
-* [Pwnium
- 2](http://blog.chromium.org/2012/08/announcing-pwnium-2.html) at
- Hack in the Box in 2012:
- [results](http://blog.chromium.org/2012/10/pwnium-2-results-and-wrap-up_10.html)
-* [Pwnium
- 1](http://blog.chromium.org/2012/02/pwnium-rewards-for-exploits.html)
- at CanSecWest in 2012: results ([Part
- 1](http://blog.chromium.org/2012/05/tale-of-two-pwnies-part-1.html),
- [Part
- 2](http://blog.chromium.org/2012/06/tale-of-two-pwnies-part-2.html))
-
-**Pwn2Own** is an independent contest that similarly awards proof-of-concept
-exploits. We support these contests with sponsorships.
-
-* Pwn2Own at CanSecWest 2014:
- [results](https://docs.google.com/presentation/d/1c90yZXNHs7w8oi7uXveEOCx5-8O_NZIxolEKalscuAQ/view).
-* Pwn2Own at PacSec 2013: [Chrome on Android exploit
- writeup](https://docs.google.com/document/d/1tHElG04AJR5OR2Ex-m_Jsmc8S5fAbRB3s4RmTG_PFnw/edit?usp=sharing)
-* Pwn2Own at CanSecWest 2013:
- [results](http://blog.chromium.org/2013/03/pwnium-3-and-pwn2own-results.html),
- MWR labs' write up of their Chrome exploit ([Part
- 1](https://labs.mwrinfosecurity.com/blog/2013/04/19/mwr-labs-pwn2own-2013-write-up---webkit-exploit/))
- ([Part
- 2](https://labs.mwrinfosecurity.com/blog/2013/09/06/mwr-labs-pwn2own-2013-write-up---kernel-exploit/))
-
-## Presentations
-
-* [Detect bad-casting at runtime with UndefinedBehavior
- Sanitizer](https://drive.google.com/file/d/0Bxvv8gduedamTEJCUlN6eERtWUE/view?usp=sharing)
-
-## Links
-
-* [Bug Fix Times
- Statistics](https://docs.google.com/spreadsheets/d/1XyFE36AZFpbPkhu-fQO_Yu8R_eU_7IvsRWSHWXnX7hI/edit#gid=2094956046) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/bugs/reproducing-clusterfuzz-bugs/index.md b/chromium/docs/website/site/Home/chromium-security/bugs/reproducing-clusterfuzz-bugs/index.md
deleted file mode 100644
index b9e2ee82a41..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/bugs/reproducing-clusterfuzz-bugs/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/bugs
- - Security Bugs--
-page_name: reproducing-clusterfuzz-bugs
-title: Reproducing ClusterFuzz bugs
----
-
-If you've been assigned a ClusterFuzz bug but aren't sure what to do next,
-you're in the right place. If you want to help catch more bugs, you should also
-read up on [developing new
-fuzzers](/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz) and
-[using ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz).
-
-Noticed a problem? File a bug using [this
-template](https://bugs.chromium.org/p/chromium/issues/entry?components=Tools%3EStability%3EClusterFuzz).
-
-[TOC]
-
-## Getting started
-
-In the best case scenario, downloading the minimized test case and running it in
-chrome (or whatever binary you are testing) will be enough to reproduce the
-issue. Usually, you will also need to include the command line flags specified
-in the report as well.
-
-When this doesn't work, you can also try downloading the exact build that the
-crash was found in via the "build" link in the ClusterFuzz report. If you are
-able to reproduce the issue using that, but not in your build, it may be a sign
-that you need to enable some kind of memory debugging tool, such as
-[AddressSanitizer](/developers/testing/addresssanitizer). The tool that you
-should will depend on the type of bug. See the common problems section for more
-information.
-
-More complicated cases, such as test cases with gestures, may require you to use
-the ClusterFuzz local reproduction script. There are several quirks about that
-bot environment that this script is able to emulate which may also help you
-reproduce the crash consistently. Download the "local reproduction config" file
-from the report, and pass it as the --config argument to the script. If you
-haven't installed the script yet, see the instructions below. Unfortunately, it
-is Googler-only at the moment :(
-
-If you still aren't able to reproduce the issue, you have a few options. For
-certain job types such as
-[SyzyASan](https://code.google.com/p/syzygy/wiki/SyzyASanBug) ones, a minidump
-may also be available. The report itself also includes some information about
-what may have gone wrong. If this is enough to work with, you could attempt a
-speculative fix. If there is nothing actionable in the report, simply mark it as
-WontFix.
-
-## Common problems
-
-* Test cases with gestures tend to be very difficult to reproduce. If
- you notice that a test case has gestures (look for the "interaction
- gestures" section at the top of the report), you should try using
- the local reproduction script.
-* Some test cases do not reproduce correctly unless served over HTTP.
- Look for a "requires" section in the report, or a notification that
- the test case requires HTTP on the bug.
-* You may not be able to reproduce all issues in a normal chromium
- build since ClusterFuzz makes heavy use of various memory debugging
- tools. Try using
- [AddressSanitizer](/developers/testing/addresssanitizer),
- [SyzyASan](https://code.google.com/p/syzygy/wiki/SyzyASanBug),
- [MemorySanitizer](/developers/testing/memorysanitizer),
- [LeakSanitizer](/developers/testing/leaksanitizer),
- [ThreadSanitizer](/developers/testing/threadsanitizer-tsan-v2),
- [UndefinedBehaviorSanitizer](/developers/testing/undefinedbehaviorsanitizer),
- or whichever tool is being used in the report that has been assigned
- to you.
-* Sometimes, a crash just isn't reproducible. If a crash is marked as
- unreproducible in ClusterFuzz and you're seeing similar results,
- don't spend too long re-running it. If the information in the report
- isn't enough to work with, don't be afraid to mark the bug as
- WontFix.
-* Some tools, like the IPC fuzzer, have a more complicated setup
- process. In these cases, we try to provide additional help links in
- the report itself to documentation which may be useful.
-
-## Setting up the local reproduction script (Googler only)
-
-If you weren't able to reproduce the issue using only the minimized test case
-and command line arguments from the report, you may want to try using the local
-reproduction script. It attempts to mimic the environment on the ClusterFuzz
-bots as closely as possible, and will attempt to run the test multiple times in
-case it's flaky.
-
-See
-[goto.google.com/clusterfuzz-repro](http://goto.google.com/clusterfuzz-repro)
-for setup details. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/bugs/using-clusterfuzz/index.md b/chromium/docs/website/site/Home/chromium-security/bugs/using-clusterfuzz/index.md
deleted file mode 100644
index 0174a805c69..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/bugs/using-clusterfuzz/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/bugs
- - Security Bugs--
-page_name: using-clusterfuzz
-title: Using ClusterFuzz
----
-
-**[ClusterFuzz documentation has moved](https://google.github.io/clusterfuzz/)** \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/certificate-transparency/index.md b/chromium/docs/website/site/Home/chromium-security/certificate-transparency/index.md
deleted file mode 100644
index a8abe8bfdd7..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/certificate-transparency/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: certificate-transparency
-title: Certificate Transparency
----
-
-This paged has moved to
-<https://goo.gl/chrome/ct-policy#chromium-certificate-transparency-policy> \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/index.md b/chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/index.md
deleted file mode 100644
index d8e7860906a..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/certificate-transparency
- - Certificate Transparency
-page_name: log-policy
-title: Certificate Transparency Log Policy
----
-
-Please see
-<https://goo.gl/chrome/ct-policy#chromium-certificate-transparency-policy> for
-details on the Certificate Transparency Log Policy. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/mmd_monitor_root.crt b/chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/mmd_monitor_root.crt
deleted file mode 100644
index 66299dd2bdf..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/certificate-transparency/log-policy/mmd_monitor_root.crt
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFzTCCA7WgAwIBAgIJAJ7TzLHRLKJyMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNV
-BAYTAkdCMQ8wDQYDVQQIDAZMb25kb24xFzAVBgNVBAoMDkdvb2dsZSBVSyBMdGQu
-MSEwHwYDVQQLDBhDZXJ0aWZpY2F0ZSBUcmFuc3BhcmVuY3kxITAfBgNVBAMMGE1l
-cmdlIERlbGF5IE1vbml0b3IgUm9vdDAeFw0xNDA3MTcxMjA1NDNaFw00MTEyMDIx
-MjA1NDNaMH0xCzAJBgNVBAYTAkdCMQ8wDQYDVQQIDAZMb25kb24xFzAVBgNVBAoM
-Dkdvb2dsZSBVSyBMdGQuMSEwHwYDVQQLDBhDZXJ0aWZpY2F0ZSBUcmFuc3BhcmVu
-Y3kxITAfBgNVBAMMGE1lcmdlIERlbGF5IE1vbml0b3IgUm9vdDCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAKoWHPIgXtgaxWVIPNpCaj2y5Yj9t1ixe5Pq
-jWhJXVNKAbpPbNHA/AoSivecBm3FTD9DfgW6J17mHb+cvbKSgYNzgTk5e2GJrnOP
-7yubYJpt2OCw0OILJD25NsApzcIiCvLA4aXkqkGgBq9FiVfisReNJxVu8MtxfhbV
-QCXZf0PpkW+yQPuF99V5Ri+grHbHYlaEN1C/HM3+t2yMR4hkd2RNXsMjViit9qCc
-hIi/pQNt5xeQgVGmtYXyc92ftTMrmvduj7+pHq9DEYFt3ifFxE8v0GzCIE1xR/d7
-prFqKl/KRwAjYUcpU4vuazywcmRxODKuwWFVDrUBkGgCIVIjrMJWStH5i7WTSSTr
-VtOD/HWYvkXInZlSgcDvsNIG0pptJaEKSP4jUzI3nFymnoNZn6pnfdIII/XISpYS
-Veyl1IcdVMod8HdKoRew9CzW6f2n6KSKU5I8X5QEM1NUTmRLWmVi5c75/CvS/PzO
-MyMzXPf+fE2Dwbf4OcR5AZLTupqp8yCTqo7ny+cIBZ1TjcZjzKG4JTMaqDZ1Sg0T
-3mO/ZbbiBE3N8EHxoMWpw8OP50z1dtRRwj6qUZ2zLvngOb2EihlMO15BpVZC3Cg9
-29c9Hdl65pUd4YrYnQBQB/rn6IvHo8zot8zElgOg22fHbViijUt3qnRggB40N30M
-XkYGwuJbAgMBAAGjUDBOMB0GA1UdDgQWBBTzX3t1SeN4QTlqILZ8a0xcyT1YQTAf
-BgNVHSMEGDAWgBTzX3t1SeN4QTlqILZ8a0xcyT1YQTAMBgNVHRMEBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4ICAQB3HP6jRXmpdSDYwkI9aOzQeJH4x/HDi/PNMOqdNje/
-xdNzUy7HZWVYvvSVBkZ1DG/ghcUtn/wJ5m6/orBn3ncnyzgdKyXbWLnCGX/V61Pg
-IPQpuGo7HzegenYaZqWz7NeXxGaVo3/y1HxUEmvmvSiioQM1cifGtz9/aJsJtIkn
-5umlImenKKEV1Ly7R3Uz3Cjz/Ffac1o+xU+8NpkLF/67fkazJCCMH6dCWgy6SL3A
-OB6oKFIVJhw8SD8vptHaDbpJSRBxifMtcop/85XUNDCvO4zkvlB1vPZ9ZmYZQdyL
-43NA+PkoKy0qrdaQZZMq1Jdp+Lx/yeX255/zkkILp43jFyd44rZ+TfGEQN1WHlp4
-RMjvoGwOX1uGlfoGkRSgBRj7TBn514VYMbXu687RS4WY2v+kny3PUFv/ZBfYSyjo
-NZnU4Dce9kstgv+gaKMQRPcyL+4vZU7DV8nBIfNFilCXKMN/VnNBKtDV52qmtOsV
-ghgai+QE09w15x7dg+44gIfWFHxNhvHKys+s4BBN8fSxAMLOsb5NGFHE8x58RAkm
-IYWHjyPM6zB5AUPw1b2A0sDtQmCqoxJZfZUKrzyLz8gS2aVujRYN13KklHQ3EKfk
-eKBG2KXVBe5rjMN/7Anf1MtXxsTY6O8qIuHZ5QlXhSYzE41yIlPlG6d7AGnTiBIg
-eg==
------END CERTIFICATE-----
diff --git a/chromium/docs/website/site/Home/chromium-security/chromium-and-emet/index.md b/chromium/docs/website/site/Home/chromium-security/chromium-and-emet/index.md
deleted file mode 100644
index bae2f403c0a..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/chromium-and-emet/index.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: chromium-and-emet
-title: Chromium and EMET
----
-
-[EMET](http://technet.microsoft.com/en-us/security/jj653751) is a security tool
-provided by Microsoft to improve exploit-resistance of software running on
-Windows. Enterprises and users can deploy EMET on systems and configure which
-applications are protected by it. [EMET then injects code into the selected
-processes that adds protection against common exploit
-techniques](http://support.microsoft.com/kb/2909257), typically causing the
-process to terminate if behavior is detected that appears to indicate an attack.
-
-**Google Chrome 35+** is built for Windows using VS 2013 and is not compatible
-with EMET's **ROP chain detection**, and **Google Chrome 53+** built with PGO
-optimizations is not compatible with EMET's **EAF+** mitigation.
-
-# Specific Compatibility issues
-
-Some applications cannot run with EMET protections because they have internal
-behavior that, to EMET, resembles an exploit in progress. This does not mean the
-applications are dangerous or are doing anything harmful to the user. In this
-case EMET causes the application to unexpectedly terminate even though no actual
-attack conditions are present.
-
-Two specific incompatibilities have been found with EMET:
-
-## ROP chain detection and prevention (Chrome 35+)
-
-After [Chromium revision
-254340](http://src.chromium.org/viewvc/chrome?view=revision&revision=254340),
-Visual Studio 2013 is the only supported build chain for Chromium on Windows.
-Unfortunately, we have observed compatibility problems with Microsoft’s Enhanced
-Mitigation Experience Toolkit (EMET) and Chromium compiled on Windows using
-Visual Studio 2013.
-
-One specific issue we have encountered with Chromium compiled using VS 2013
-relates to [tail-call optimizations](http://en.wikipedia.org/wiki/Tail_call) in
-wrapper functions for Windows APIs. By using jmp to enter the Windows API call
-from the wrapper, the Visual Studio compiler avoids an additional call/ret pair,
-and the API would return directly into the wrapper function’s caller rather than
-the wrapper function itself. However, EMET protects various ‘critical’ Windows
-APIs against an exploit technique known as Return-Oriented Programming (ROP),
-and one of these protections is incompatible with tail-call optimization. EMET’s
-code checks that the return address from the API call is immediately preceded by
-a call to that API, since in ROP exploits this will typically not be the case
-but in normal function calls it will. The tail-call optimization violates EMET’s
-assumption and causes a false positive result for exploit detection.
-
-## EAF (Export Address Table Filtering) and EAF+ (Chrome 53+ 64-bit)
-
-The [Chromium
-sandbox](/developers/design-documents/sandbox#TOC-The-broker-process) uses an
-interception layer to allow the sandboxed process to still access a limited set
-of Windows APIs. These interceptions are achieved by the interception manager
-whose job it is to patch the windows API calls that should be forwarded via IPC
-to the browser process. Chrome 53 added Profile Guided Optimization
-([PGO](https://blogs.msdn.microsoft.com/vcblog/2013/04/04/build-faster-and-high-performing-native-applications-using-pgo/))
-to our build process and this seems to have an incompatibility with EMET's EAF+.
-
-EMET subsequently incorrectly falsely detects our optimizations as an exploit
-attempting to patch system DLLs and as a result will not allow any sandboxed
-processes to start. The bug tracking this is [643775](https://crbug.com/643775).
-A current workaround is to remove chrome_child.dll from the EAF+ DLL allowlist.
-
-# Fix and Workarounds
-
-We are in contact with Microsoft to investigate and address these problems.
-Microsoft currently is already recommending that the EMET caller mitigation not
-be enabled for Chrome. Google recommend that EAF+ protection be disabled for
-Chrome, and we are working with Microsoft to update their guidance.
-
-## Users
-
-In the meantime, users experiencing this problem with Chrome or Chromium-based
-browsers can resolve the issue by either:
-
- Removing the browser from the list of applications monitored by EMET, and/or
-
- Disabling the caller mitigation setting and EAF+ specifically for
- chrome_child.dll.
-
-The Chrome security team does not generally recommend the use of EMET with
-Chromium because it has negative performance impact and adds no security benefit
-in most situations. The most effective anti-exploit techniques that EMET
-provides are already built into Chromium or superseded by stronger mitigations.
-
-<table>
-<tr>
-
-<td>EMET Protection</td>
-
-<td>Benefit to Chromium</td>
-
-</tr>
-<tr>
-
-<td>Forcing Data Execution Prevention</td>
-
-<td>None, Chromium builds with this already enabled.</td>
-
-</tr>
-<tr>
-
-<td>Forcing Address Space Layout Randomization</td>
-
-<td>None, Chromium builds with this already enabled.</td>
-
-</tr>
-<tr>
-
-<td>Structured Exception Handling Overwrite Protection</td>
-
-<td>None, Chromium enables OS SEHOP on all versions of Windows where supported. EMET can add SEHOP on Windows Vista, however as of Chrome 50 Windows Vista is no longer supported.</td>
-
-</tr>
-<tr>
-
-<td>Heap Spray Page Reservation</td>
-
-<td>This can protect Chromium from some exploits, but can also be trivially bypassed by exploit writers who are aware of EMET protections.</td>
-
-</tr>
-<tr>
-
-<td>Export Address Table (EAF and EAF+) access filtering</td>
-
-<td>This can protect Chromium from some exploits, but can also be bypassed by exploit writers who are aware of EMET protections.</td>
-
-</tr>
-<tr>
-
-<td>ROP chain detection and prevention</td>
-
-<td>This can protect Chromium from some exploits, but can also be bypassed by exploit writers who are aware of EMET protections.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/clean-software-alliance/index.md b/chromium/docs/website/site/Home/chromium-security/clean-software-alliance/index.md
deleted file mode 100644
index 2501a1c48ce..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/clean-software-alliance/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: clean-software-alliance
-title: Clean Software Alliance (CSA)
----
-
-Chrome is participating in a pilot test of the [Clean Software
-Alliance](http://www.cs-alliance.org/) (CSA), and provides a feature by which
-CSA Installer Members can record information about what has been installed on
-the system. These records consist of the following information:
-
- &lt;vendor_id&gt; - unique identifier of the installation vendor.
-
- &lt;install_id&gt; - unique installation ID (per vendor).
-
- &lt;publisher_id&gt; - unique identifier of the publisher (or main product)
- being installed.
-
- &lt;install_time_client&gt; - installation start time as per the user’s
- machine.
-
- &lt;install_time_server&gt; - installation start time as per the server
- time.
-
- &lt;advertisers_id&gt; - a comma-delimited list of unique advertiser IDs
- accepted by the user and installed in addition to the main product.
-
- &lt;hmac_sha256_validation&gt; - hmacSHA256 hash of a string containing all
- the entry fields using a private salt provided by every vendor. This field
- is used to validate the entry data and to prevent abuse.
-
-If Chrome detects a [security
-incident](https://www.google.ca/chrome/browser/privacy/whitepaper.html#malware),
-some of this data may be reported as part of its environmental data collection. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/client-identification-mechanisms/index.md b/chromium/docs/website/site/Home/chromium-security/client-identification-mechanisms/index.md
deleted file mode 100644
index 4db961813bc..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/client-identification-mechanisms/index.md
+++ /dev/null
@@ -1,764 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: client-identification-mechanisms
-title: Technical analysis of client identification mechanisms
----
-
-*Written by Artur Janc &lt;[aaj@google.com](mailto:aaj@google.com)&gt; and
-Michal Zalewski &lt;[lcamtuf@google.com](mailto:lcamtuf@google.com)&gt;*
-
-In common use, the term “web tracking” refers to the process of calculating or
-assigning unique and reasonably stable identifiers to each browser that visits a
-website. In most cases, this is done for the purpose of correlating future
-visits from the same person or machine with historical data.
-
-Some uses of such tracking techniques are well established and commonplace. For
-example, they are frequently employed to tell real users from malicious bots, to
-make it harder for attackers to gain access to compromised accounts, or to store
-user preferences on a website. In the same vein, the online advertising industry
-has used cookies as the primary client identification technology since the
-mid-1990s. Other practices may be less known, may not necessarily map to
-existing browser controls, and may be impossible or difficult to detect. Many of
-them - in particular, various methods of client fingerprinting - have garnered
-concerns from software vendors, standards bodies, and the media.
-
-To guide us in improving the range of existing browser controls and to highlight
-the potential pitfalls when designing new web APIs, we decided to prepare a
-technical overview of known tracking and fingerprinting vectors available in the
-browser. Note that we describe these vectors, but do not wish this document to
-be interpreted as a broad invitation to their use. Website owners should keep in
-mind that any single tracking technique may be conceivably seen as
-inappropriate, depending on user expectations and other complex factors beyond
-the scope of this doc.
-
-We divided the methods discussed on this page into several categories:
-explicitly assigned client-side identifiers, such as HTTP cookies; inherent
-client device characteristics that identify a particular machine; and measurable
-user behaviors and preferences that may reveal the identity of the person behind
-the keyboard (or touchscreen). After reviewing the known tracking and
-fingerprinting techniques, we also discuss potential directions for future work
-and summarize some of the challenges that browser and other software vendors
-would face trying to detect or prevent such behaviors on the Web.
-
-[TOC]
-
-## Explicitly assigned client-side identifiers
-
-The canonical approach to identifying clients across HTTP requests is to store a
-unique, long-lived token on the client and to programmatically retrieve it on
-subsequent visits. Modern browsers offer a multitude of ways to achieve this
-goal, including but not limited to:
-
- Plain old [HTTP cookies](http://tools.ietf.org/html/rfc6265),
-
- Cookie-equivalent plugin features - most notably, Flash [Local Shared
- Objects](http://en.wikipedia.org/wiki/Local_shared_object).
-
- HTML5 client storage mechanisms, including
- [*localStorage*](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage),
- [*File*](https://developer.mozilla.org/en-US/docs/Web/API/File), and
- [*IndexedDB*](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)
- APIs,
-
- Unique markers stored within locally cached resources or in cache metadata -
- e.g., [Last-Modified and
- ETag](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html),
-
- Bits encoded in [HTTP Strict Transport
- Security](http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) pin
- lists across several attacker-controlled host names,
-
- ...and more.
-
-We believe that the availability of any one of these mechanisms is sufficient to
-reliably tag clients and identify them later on; in addition to this, many such
-identifiers can be deployed in a manner that conceals the uniqueness of the ID
-assigned to a particular client. On the flip side, browsers provide users with
-some degree of control over the behavior of at least some of these APIs, and
-with several exceptions discussed later on, the identifiers assigned in this
-fashion do not propagate to other browser profiles or to private browsing
-sessions.
-
-The remainder of this section provides a more in-depth overview of several
-notable examples of client tagging schemes that are within the reach of web
-apps.
-
-### *HTTP cookies*
-
-[HTTP cookies](http://tools.ietf.org/html/rfc6265) are the most familiar and
-best-understood method for persisting data on the client. In essence, any web
-server may issue unique identifiers to first-time visitors as a part of a HTTP
-response, and have the browser play back the stored values on all future
-requests to a particular site.
-
-All major browsers have for years been equipped with UIs for managing cookies; a
-large number of third-party cookie management and blocking software is
-available, too. In practice, however, external research has implied that only a
-minority of users regularly review or purge browser cookies. The reasons for
-this are probably complex, but one of them may be that the removal of cookies
-tends to be disruptive: contemporary browsers do not provide any heuristics to
-distinguish between the session cookies that are needed to access the sites the
-user is logged in, and the rest.
-
-Some browsers offer user-configurable restrictions on the ability for websites
-to set “third-party” cookies (that is, cookies coming from a domain other than
-the one currently displayed in the address bar - a behavior most commonly
-employed to serve online ads or other embedded content). It should be noted that
-the existing implementations of this setting will assign the “first-party” label
-to any cookies set by documents intentionally navigated to by the user, as well
-as to ones issued by content loaded by the browser as a part of full-page
-interstitials, HTTP redirects, or click-triggered pop-ups.
-
-Compared to most other mechanisms discussed below, overt use of HTTP cookies is
-fairly transparent to the user. That said, the mechanism may be used to tag
-clients without the use of cookie values that obviously resemble unique IDs. For
-example, client identifiers could be encoded as a combination of several
-seemingly innocuous and reasonable cookie names, or could be stored in metadata
-such as paths, domains, or cookie expiration times. Because of this, we are not
-aware of any means for a browser to reliably flag HTTP cookies employed to
-identify a specific client in this manner.
-
-Just as interestingly, the abundance of cookies means that an actor could even
-conceivably rely on the values set by others, rather than on any newly-issued
-identifiers that could be tracked directly to the party in question. We have
-seen this employed for some rich content ads, which are usually hosted in a
-single origin shared by all advertisers - or, less safely, are executed directly
-in the context of the page that embeds the ad.
-
-### *Flash LSOs*
-
-[Local Shared Objects](http://www.adobe.com/security/flashplayer/articles/lso/)
-are the canonical way to store client-side data within Adobe Flash. The
-mechanism is designed to be a direct counterpart to HTTP cookies, offering a
-convenient way to maintain session identifiers and other application state on a
-per-origin basis. In contrast to cookies, LSOs can be also used for structured
-storage of data other than short snippets of text, making such objects more
-difficult to inspect and analyze in a streamlined way.
-
-In the past, the behavior of LSOs within the Flash plugin had to be configured
-separately from any browser privacy settings, by visiting a lesser-known [Flash
-Settings
-Manager](http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html)
-UI hosted on macromedia.com (standalone installs of Flash 10.3 and above
-supplanted this with a Control Panel / System Preferences dialog available
-locally on the machine). Today, most browsers offer a degree of integration: for
-example, clearing cookies and other site data will generally also remove LSOs.
-On the flip side, more nuanced controls may not be synchronized: say, the
-specific setting for third-party cookies in the browser is not always reflected
-by the behavior of LSOs.
-
-From a purely technical standpoint, the use of Local Shared Objects in a manner
-similar to HTTP cookies is within the apparent design parameters for this API -
-but the reliance on LSOs to recreate deleted cookies or bypass browser cookie
-preferences has been subject to public scrutiny.
-
-### *Silverlight Isolated Storage - Update: Silverlight and other plugins were removed years ago.*
-
-Microsoft Silverlight is a widely-deployed applet framework bearing many
-similarities to Adobe Flash. The Silverlight equivalent of Flash LSOs is known
-as [Isolated
-Storage](http://msdn.microsoft.com/en-us/library/bdts8hk0(v=vs.95).aspx).
-
-The privacy settings in Silverlight are typically not coupled to the underlying
-browser. In our testing, values stored in Isolated Storage survive clearing
-cache and site data in Chrome, Internet Explorer and Firefox. Perhaps more
-surprisingly, Isolated Storage also appears to be shared between all
-non-incognito browser windows and browser profiles installed on the same
-machine; this may have consequences for users who rely on separate browser
-instances to maintain distinct online identities.
-
-As with LSOs, reliance on Isolated Storage to store session identifiers and
-similar state information does not present issues from a purely technical
-standpoint. That said, given that the mechanism is not currently managed via
-browser controls, its use of for client identification is not commonplace and
-thus may be viewed as less transparent than standard cookies.
-
-### *HTML5 client-side storage mechanisms*
-
-HTML5 introduces a range of structured data storage mechanisms on the client;
-this includes
-[localStorage](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage),
-the [*File* API](https://developer.mozilla.org/en-US/docs/Web/API/File), and
-[*IndexedDB*](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API).
-Although semantically different from each other, all of them are designed to
-allow persistent storage of arbitrary blobs of binary data tied to a particular
-web origin. In contrast to cookies and LSOs, there are no significant size
-restrictions on the data stored with these APIs.
-
-In modern browsers, HTML5 storage is usually purged alongside other site data,
-but the mapping to browser settings isn’t necessarily obvious. For example,
-Firefox will retain localStorage data unless the user selects “offline website
-data” or “site preferences” in the deletion dialog and specifies the time range
-as “everything” (this is not the default). Another idiosyncrasy is the behavior
-of Internet Explorer, where the data is retained for the lifetime of a tab for
-any sites that are open at the time the operation takes place.
-
-Beyond that, the mechanisms do not always appear to follow the restrictions on
-persistence that apply to HTTP cookies. For example, in our testing, in Firefox,
-localStorage can be written and read in cross-domain frames even if third-party
-cookies are disabled.
-
-Due to the similarity of the design goals of these APIs, the authors expect that
-the perception and the caveats of using HTML5 storage for storing session
-identifiers would be similar to the situation with Flash and Silverlight.
-
-### *Cached objects*
-
-For performance reasons, all mainstream web browsers maintain a global cache of
-previously retrieved HTTP resources. Although this mechanism is not explicitly
-designed as a random-access storage mechanism, it can be easily leveraged as
-such. To accomplish this, a cooperating server may return, say, a JavaScript
-document with a unique identifier embedded in its body, and set Expires /
-max-age= headers to a date set in the distant future.
-
-Once this unique identifier is stored within a script subresource in the browser
-cache, the ID can be read back on any page on the Internet simply by loading the
-script from a known URL and monitoring the agreed-upon local variable or setting
-up a predefined callback function in JavaScript. The browser will periodically
-check for newer copies of the script by issuing a conditional request to the
-originating server with a suitable If-Modified-Since header; but if the server
-consistently responds to such check with HTTP code 304 (“Not modified”), the old
-copy will continue to be reused indefinitely.
-
-There is no concept of blocking “third-party” cache objects in any browser known
-to the authors of this document, and no simple way to prevent cache objects from
-being stored without dramatically degrading performance of everyday browsing.
-Automated detection of such behaviors is extremely difficult owing to the sheer
-volume and complexity of cached JavaScript documents encountered on the modern
-Web.
-
-All browsers expose the option to manually clear the document cache. That said,
-because clearing the cache requires specific action on the part of the user, it
-is unlikely to be done regularly, if at all.
-
-Leveraging the browser cache to store session identifiers is very distinct from
-using HTTP cookies; the authors are unsure if and how the cookie settings - the
-convenient abstraction layer used for most of the other mechanisms discussed to
-date - could map to the semantics of browser caches.
-
-### *Cache metadata: ETag and Last-Modified*
-
-To make implicit browser-level document caching work properly, servers must have
-a way to notify browsers that a newer version of a particular document is
-available for retrieval. The HTTP/1.1 standard specifies two methods of document
-versioning: one based on the date of the most recent modification, and another
-based on an abstract, opaque identifier known as ETag.
-
-In the ETag scheme, the server initially returns an opaque “version tag” string
-in a response header alongside with the actual document. On subsequent
-conditional requests to the same URL, the client echoes back the value
-associated with the copy it already has, through an If-None-Match header; if the
-version specified in this header is still current, the server will respond with
-HTTP code 304 (“Not Modified”) and the client is free to reuse the cached
-document. Otherwise, a new document with a new ETag will follow.
-
-Interestingly, the behavior of the ETag header closely mimics that of HTTP
-cookies: the server can store an arbitrary, persistent value on the client, only
-to read it back later on. This observation, and its potential applications for
-browser tracking [date back at least to
-2000](http://seclists.org/bugtraq/2000/Mar/331).
-
-The other versioning scheme, Last-Modified, suffers from the same issue: servers
-can store at least 32 bits of data within a well-formed date string, which will
-then be echoed back by the client through a request header known as
-If-Modified-Since. (In practice, most browsers don't even require the string to
-be a well-formed date to begin with.)
-
-Similarly to tagging users through cache objects, both of these “metadata”
-mechanisms are unaffected by the deletion of cookies and related site data; the
-tags can be destroyed only by purging the browser cache.
-
-As with Flash LSOs, use of ETag to allegedly skirt browser cookie settings has
-been subject to scrutiny.
-
-### *HTML5 AppCache*
-
-[Application
-Caches](http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#appcache)
-allow website authors to specify that portions of their websites should be
-stored on the disk and made available even if the user is offline. The mechanism
-is controlled by [cache
-manifests](http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#manifests)
-that outline the rules for storing and retrieving cache items within the app.
-
-Similarly to implicit browser caching, AppCaches make it possible to store
-unique, user-dependent data - be it inside the cache manifest itself, or inside
-the resources it requests. The resources are retained indefinitely and not
-subject to the browser’s usual cache eviction policies.
-
-AppCache appears to occupy a netherworld between HTML5 storage mechanisms and
-the implicit browser cache. In some browsers, it is purged along with cookies
-and stored website data; in others, it is discarded only if the user opts to
-delete the browsing history and all cached documents.
-
-Note: AppCache is likely to be succeeded with [Service
-Workers](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html);
-the privacy properties of both mechanisms are likely to be comparable.
-
-### *Flash resource cache*
-
-Flash maintains its own internal store of resource files, which can be probed
-using a variety of techniques. In particular, the internal repository includes
-an asset cache, relied upon to store [Runtime Shared
-Libraries](http://help.adobe.com/en_US/Flex/4.0/UsingSDK/WS2db454920e96a9e51e63e3d11c0bf69084-7add.html)
-signed by Adobe to improve applet load times. There is also [Adobe Flash
-Access](http://www.adobe.com/support/documentation/en/flashaccess/), a mechanism
-to store automatically acquired licenses for DRM-protected content.
-
-As of this writing, these document caches do not appear to be coupled to any
-browser privacy settings and can only be deleted by making several independent
-configuration changes in the [Flash Settings
-Manager](http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html)
-UI on macromedia.com. We believe there is no global option to delete all cached
-resources or prevent them from being stored in the future.
-
-Browsers other than Chrome appear to share Flash asset data across all
-installations and in private browsing modes, which may have consequences for
-users who rely on separate browser instances to maintain distinct online
-identities.
-
-### *SDCH dictionaries - Removed from Chrome 59+*
-
-[SDCH](http://lists.w3.org/Archives/Public/ietf-http-wg/2008JulSep/att-0441/Shared_Dictionary_Compression_over_HTTP.pdf)
-is a Google-developed compression algorithm that relies on the use of
-server-supplied, cacheable dictionaries to achieve compression rates
-considerably higher than what’s possible with methods such as gzip or deflate
-for several common classes of documents.
-
-The site-specific dictionary caching behavior at the core of SDCH inevitably
-offers an opportunity for storing unique identifiers on the client: both the
-dictionary IDs (echoed back by the client using the Avail-Dictionary header),
-and the contents of the dictionaries themselves, can be used for this purpose,
-in a manner very similar to the regular browser cache.
-
-In Chrome, the data does not persist across browser restarts; it was, however,
-shared between profiles and incognito modes and was not deleted with other site
-data when such an operation is requested by the user. Google addressed this in
-bug [327783](https://code.google.com/p/chromium/issues/detail?id=327783).
-
-### *Other script-accessible storage mechanisms*
-
-Several other more limited techniques make it possible for JavaScript or other
-active content running in the browser to maintain and query client state,
-sometimes in a fashion that can survive attempts to delete all browsing and site
-data.
-
-For example, it is possible to use window.name or sessionStorage to store
-persistent identifiers for a given window: if a user deletes all client state
-but does not close a tab that at some point in the past displayed a site
-determined to track the browser, re-navigation to any participating domain will
-allow the window-bound token to be retrieved and the new session to be
-associated with the previously collected data.
-
-More obviously, the same is true for active JavaScript: any currently open
-JavaScript context is allowed to retain state even if the user attempts to
-delete local site data; this can be done not only by the top-level sites open in
-the currently-viewed tabs, but also by “hidden” contexts such as HTML frames,
-web workers, and pop-unders. This can happen by accident: for example, a running
-ad loaded in an &lt;iframe&gt; may remain completely oblivious to the fact that
-the user attempted to clear all browsing history, and keep using a session ID
-stored in a local variable in JavaScript. (In fact, in addition to JavaScript,
-Internet Explorer will also retain session cookies for the currently-displayed
-origins.)
-
-Another interesting and often-overlooked persistence mechanism is the caching of
-[RFC 2617](http://tools.ietf.org/html/rfc2617) HTTP authentication credentials:
-once explicitly passed in an URL, the cached values may be sent on subsequent
-requests even after all the site data is deleted in the browser UI.
-
-In addition to the cross-browser approaches discussed earlier in this document,
-there are also several proprietary APIs that can be leveraged to store unique
-identifiers on the client system. An interesting example of this are the
-proprietary [persistence
-behaviors](http://msdn.microsoft.com/en-us/library/ms533007(v=vs.85).aspx) in
-some versions of Internet Explorer, including the [*userData*
-API](http://msdn.microsoft.com/en-us/library/ms531424(VS.85).aspx).
-
-Last but not least, a variety of other, less common plugins and plugin-mediated
-interfaces likely expose analogous methods for storing data on the client, but
-have not been studied in detail as a part of this write-up; an example of this
-may be the
-*[PersistenceService](http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/javax/jnlp/PersistenceService.html)
-API* in Java, or the DRM license management mechanisms within Silverlight.
-
-### *Lower-level protocol identifiers*
-
-On top of the fingerprinting mechanisms associated with HTTP caching and with
-the purpose-built APIs available to JavaScript programs and plugin-executed
-code, modern browsers provide several network-level features that offer an
-opportunity to store or retrieve unique identifiers:
-
- [Origin Bound
- Certificates](http://www.browserauth.net/origin-bound-certificates) (aka
- *ChannelID*) **were** persistent self-signed certificates identifying the
- client to an HTTPS server, envisioned as the future of session management on
- the web. A separate certificate is generated for every newly encountered
- domain and reused for all connections initiated later on.
- By design, OBCs function as unique and stable client fingerprints,
- essentially replicating the operation of authentication cookies; they are
- treated as “site and plug-in data” in Chrome, and can be removed along with
- cookies.
- Uncharacteristically, sites can leverage OBC for user tracking without
- performing any actions that would be visible to the client: the ID can be
- derived simply by taking note of the cryptographic hash of the certificate
- automatically supplied by the client as a part of a legitimate SSL
- handshake.
- ChannelID is currently suppressed in Chrome in “third-party” scenarios
- (e.g., for different-domain frames). **NOTE**: **this feature and its
- successor, TLS Token Binding, were removed years ago.**
-
- The set of supported ciphersuites can be used to fingerprint [a TLS/SSL
- handshake](http://whatever-will-be-que-sera-sera.tumblr.com). Note that
- clients have been actively deprecating various ciphersuites in recent years,
- making this attack even more powerful.
-
- In a similar fashion, two separate mechanisms within TLS - [session
- identifiers](http://tools.ietf.org/html/rfc5246) and [session
- tickets](http://tools.ietf.org/html/rfc5077) - allow clients to resume
- previously terminated HTTPS connections without completing a full handshake;
- this is accomplished by reusing previously cached data. These session
- resumption protocols provide a way for servers to identify subsequent
- requests originating from the same client for a short period of time.
-
- [HTTP Strict Transport Security](http://tools.ietf.org/html/rfc6797) is a
- security mechanism that allows servers to demand that all future connections
- to a particular host name need to happen exclusively over HTTPS, even if the
- original URL nominally begins with “http://”.
- It follows that a fingerprinting server could set long-lived HSTS headers
- for a distinctive set of attacker-controlled host names for each newly
- encountered browser; this information could be then retrieved by loading
- faux (but possibly legitimately-looking) subresources from all the
- designated host names and seeing which of the connections are automatically
- switched to HTTPS.
- In an attempt to balance security and privacy, any HSTS pins set during
- normal browsing \[were\*\] carried over to the incognito mode in Chrome;
- there is no propagation in the opposite direction, however. \***Update:**
- Behavior was [changed in Chrome 64](https://crbug.com/774643), such that
- Chrome won't use on-disk HSTS information for incognito requests. It is
- worth noting that leveraging HSTS for tracking purposes requires
- establishing log(n) connections to uniquely identify n users, which makes it
- relatively unattractive, except for targeted uses; that said, creating a
- smaller number of buckets may be a valuable tool for refining other
- imprecise fingerprinting signals across a very large user base.
-
- Last but not least, virtually all modern browsers maintain internal DNS
- caches to speed up name resolution (and, in some implementations, to
- mitigate the risk of [DNS rebinding
- attacks](http://crypto.stanford.edu/dns/dns-rebinding.pdf)).
- Such caches can be easily leveraged to store small amounts of information
- for a configurable amount of time; for example, with 16 available IP
- addresses to choose from, around 8-9 cached host names would be sufficient
- to uniquely identify every computer on the Internet. On the flip side, the
- value of this approach is limited by the modest size of browser DNS caches
- and the potential conflicts with resolver caching on ISP level.
-
-## Machine-specific characteristics
-
-With the notable exception of Origin-Bound Certificates, the techniques
-described in section 1 of the document rely on a third-party website explicitly
-placing a new unique identifier on the client system.
-
-Another, less obvious approach to web tracking relies on querying or indirectly
-measuring the inherent characteristics of the client system. Individually, each
-such signal will reveal just several bits of information - but when combined
-together, it seems probable that they may uniquely identify almost any computer
-on the Internet. In addition to being harder to detect or stop, such techniques
-could be used to **cross-correlate user activity across various browser profiles
-or private browsing sessions.** Furthermore, because the techniques are
-conceptually very distant from HTTP cookies, the authors find it difficult to
-decide how, if at all, the existing cookie-centric privacy controls in the
-browser should be used to govern such practices.
-
-EFF [Panopticlick](https://panopticlick.eff.org/browser-uniqueness.pdf) is one
-of the most prominent experiments demonstrating the principle of combining
-low-value signals into a high-accuracy fingerprint; there is also some evidence
-of [sophisticated passive
-fingerpri](http://www.ieee-security.org/TC/SP2013/papers/4977a541.pdf)[nts being
-used](http://www.ieee-security.org/TC/SP2013/papers/4977a541.pdf) by commercial
-tracking services.
-
-### *Browser-level fingerprints*
-
-The most straightforward approach to fingerprinting is to construct identifiers
-by actively and explicitly combining a range of individually non-identifying
-signals available within the browser environment:
-
- User-Agent string, identifying the browser version, OS version, and some of
- the installed browser add-ons.
- (In cases where User-Agent information is not available or imprecise,
- browser versions can be usually inferred very accurately by examining the
- structure of other headers and by testing for the availability and semantics
- of the features introduced or modified between releases of a particular
- browser.)
-
- Clock skew and drift: unless synchronized with an external time source, most
- systems exhibit clock drift that, over time, produces a fairly unique time
- offset for every machine. Such offsets can be measured with microsecond
- precision using JavaScript. In fact, even in the case of NTP-synchronized
- clocks, ppm-level skews may be possible to [measure
- remotely](http://www.caida.org/publications/papers/2005/fingerprinting/KohnoBroidoClaffy05-devicefingerprinting.pdf).
-
- Fairly fine-grained information about the underlying CPU and GPU, either as
- exposed directly (GL_RENDERER) or as measured by executing [Javascript
- benchmarks](http://w2spconf.com/2011/papers/jspriv.pdf) and testing for
- driver- or GPU-specific [differences in WebGL
- rendering](http://cseweb.ucsd.edu/~hovav/dist/canvas.pdf) or the application
- of ICC color profiles to *&lt;canvas&gt;* data.
-
- Screen and browser window resolutions, including parameters of secondary
- displays for multi-monitor users.
-
- The window-manager- and addon-specific “thickness” of the browser UI in
- various settings (e.g., window.outerHeight - window.innerHeight).
-
- The list and ordering of installed system fonts - enumerated directly or
- inferred with the help of an API such as getComputedStyle.
-
- The list of all installed plugins, ActiveX controls, and Browser Helper
- Objects, including their versions - queried or brute-forced through
- navigator.plugins\[\]. (Some add-ons also announce their existence in HTTP
- headers.)
-
- Information about installed browser extensions and other software. While the
- set cannot be directly enumerated, many extensions include [web-accessible
- resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources)
- that aid in fingerprinting. In addition to this, add-ons such as popular ad
- blockers make detectable modifications to viewed pages, revealing
- information about the extension or its configuration. Using browser “sync”
- features may result in these characteristics being identical for a given
- user across multiple devices. A similar but less portable approach specific
- to Internet Explorer allows websites to [enumerate locally
- installed](http://www.alienvault.com/open-threat-exchange/blog/attackers-abusing-internet-explorer-to-enumerate-software-and-detect-securi)
- software by attempting to load DLL resources via the *res://*
- pseudo-protocol.
-
- Random seeds reconstructed from the output of non-cryptosafe PRNGs (e.g.
- Math.random(), multipart form boundaries, etc). In some browsers, the PRNG
- is initialized only at startup, or reinitialized using values that are
- system-specific (e.g., based on system time or PID).
-
-According to the EFF, their Panopticlick experiment - which combines only a
-relatively small subset of the actively-probed signals discussed above - is able
-to uniquely identify [95% of desktop
-users](http://hostmaster.freehaven.net/anonbib/cache/pets2010:eckersley2010unique.pdf)
-based on system-level metrics alone. Current commercial fingerprinters are
-reported to be [considerably more
-sophisticated](http://www.ieee-security.org/TC/SP2013/papers/4977a541.pdf) and
-their developers might be able to claim significantly higher success rates.
-
-Of course, the value of some of the signals discussed here will be diminished on
-mobile devices, where both the hardware and the software configuration tends to
-be more homogenous; for example, measuring window dimensions or the list of
-installed plugins offers very little data on most Android devices. Nevertheless,
-we feel that the remaining signals - such as clock skew and drift and the
-network-level and user-specific signals described later on - are together likely
-more than sufficient to uniquely identify virtually all users.
-
-When discussing potential mitigations, it is worth noting that restrictions such
-as disallowing the enumeration of navigator.plugins\[\] generally do not prevent
-fingerprinting; the set of all notable plugins and fonts ever created and
-distributed to users is relatively small and a malicious script can conceivably
-test for every possible value in very little time.
-
-### *Network configuration fingerprints*
-
-An interesting set of additional device characteristics is associated with the
-architecture of the local network and the configuration of lower-level network
-protocols; such signals are disclosed independently of the design of the web
-browser itself. These traits covered here are generally shared between all
-browsers on a given client and cannot be easily altered by common
-privacy-enhancing tools or practices; they include:
-
- The external client IP address. For IPv6 addresses, this vector is even more
- interesting: in some settings, the last octets may be derived from the
- device's MAC address and preserved across networks.
-
- A broad range of TCP/IP and TLS stack fingerprints, obtained with passive
- tools such as [*p0f*](http://lcamtuf.coredump.cx/p0f3/). The information
- disclosed on this level is often surprisingly specific: for example, TCP/IP
- traffic will often reveal high-resolution system uptime data through TCP
- timestamps.
-
- Ephemeral source port numbers for outgoing TCP/IP connections, generally
- selected sequentially by most operating systems.
-
- The local network IP address for users behind network address translation or
- HTTP proxies ([via
- WebRTC](http://www.thousandparsec.net/~tim/webrtc-myip.html)). Combined with
- the external client IP, internal NAT IP uniquely identifies most users, and
- is generally stable for desktop browsers (due to the tendency for DHCP
- clients and servers to cache leases).
-
- Information about proxies used by the client, as detected from the presence
- of extra HTTP headers (Via, X-Forwarded-For). This can be combined with the
- client’s actual IP address revealed when making proxy-bypassing connections
- using one of several available methods.
-
- With active probing, the [list of open ports on the local
- host](http://www.slideshare.net/amiable_indian/javascript-malware-spi-dynamics)
- indicating other installed software and firewall settings on the system.
- Unruly actors may also be tempted to [probe the systems and services in the
- visitor’s local network](http://www.andlabs.org/tools/jsrecon/jsrecon.html);
- doing so directly within the browser will circumvent any firewalls that
- normally filter out unwanted incoming traffic.
-
-## User-dependent behaviors and preferences
-
-In addition to trying to uniquely identify the device used to browse the web,
-some parties may opt to examine characteristics that aren’t necessarily tied to
-the machine, but that are closely associated with specific users, their local
-preferences, and the online behaviors they exhibit. Similarly to the methods
-described in section 2, such patterns would persist across different browser
-sessions, profiles, and across the boundaries of private browsing modes.
-
-The following data is typically open to examination:
-
- Preferred language, default character encoding, and local time zone (sent in
- HTTP headers and visible to JavaScript).
-
- Data in the client cache and history. It is possible to detect items in the
- client’s cache by performing simple timing attacks; for any long-lived cache
- items associated with popular destinations on the Internet, a fingerprinter
- could detect their presence simply by measuring how quickly they load (and
- by aborting the navigation if the latency is greater than expected for local
- cache).
- (It is also possible to directly extract URLs stored in the browsing
- history, although such an attack requires [some user
- interaction](http://lcamtuf.coredump.cx/yahh/) in modern browsers.)
-
- Mouse gesture, keystroke timing and velocity patterns, and [accelerometer
- readings](http://www.theregister.co.uk/2013/01/31/smartphone_accelerometer_data_leak/)
- (ondeviceorientation) that are unique to a particular user or to particular
- surroundings. There is a
- [considerable](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.310.4320&rep=rep1&type=pdf)
- [body](http://www.csis.pace.edu/~ctappert/it691-13spring/projects/mouse-pusara.pdf)
- [of](http://www.cs.wm.edu/~hnw/paper/ccs11.pdf)
- [scientific](http://www.computer.org/csdl/mags/it/2013/04/mit2013040012-abs.html)
- [research](http://www.octaviogutierrez.net/docs/Gutierrez-ConferencePaper-SAM.pdf)
- suggesting that even relatively trivial interactions are deeply
- user-specific and highly identifying.
-
- Any changes to default website fonts and font sizes, website zoom level, and
- the use of any accessibility features such as text color, size, or CSS
- overrides (all indirectly measurable with JavaScript).
-
- The state of client features that can be customized or disabled by the user,
- with special emphasis on mechanisms such as DNT, third-party cookie
- blocking, changes to DNS prefetching, pop-up blocking, Flash security and
- content storage, and so on. (In fact, users who extensively tweak their
- settings from the defaults may be actually making their browsers
- considerably easier to uniquely fingerprint.)
-
-On top of this, user fingerprinting can be accomplished by interacting with
-third-party services through the user’s browser, using the ambient credentials
-(HTTP cookies) maintained by the browser:
-
- Users logged into websites that offer collaboration features can be
- de-anonymized by covertly instructing their browser to navigate to a set of
- distinctively ACLed resources and then examining which of these navigation
- attempts result in a new collaborator showing up in the UI.
-
- Request timing, onerror and onload handlers, and similar measurement
- techniques can be used to detect which third-party resources return HTTP 403
- error codes in the user’s browser, thus constructing an accurate picture of
- which sites the user is logged in; in some cases, finer-grained insights
- into user settings or preferences on the site can be obtained, too.
- (A similar but possibly more versatile login-state attack can be also
- mounted with the help of Content Security Policy, a new security mechanism
- introduced in modern browsers.)
-
- Any of the explicit web application APIs that allow identity attestation may
- be leveraged to confirm the identity of the current user (typically based on
- a starting set of probable guesses).
-
-## Fingerprinting prevention and detection challenges
-
-In a world with no possibility of fingerprinting, web browsers would be
-indistinguishable from each other, with the exception of a small number of
-robustly compartmentalized and easily managed identifiers used to maintain login
-state and implement other essential features in response to user’s intent.
-
-In practice, the Web is very different: browser tracking and fingerprinting are
-attainable in a large number of ways. A number of the unintentional tracking
-vectors are a product of implementation mistakes or oversights that could be
-conceivably corrected today; many others are virtually impossible to fully
-rectify without completely changing the way that browsers, web applications, and
-computer networks are designed and operated. In fact, some of these design
-decisions might have played an unlikely role in the success of the Web.
-
-In lieu of eliminating the possibility of web tracking, some have raised hope of
-detecting use of fingerprinting in the online ecosystem and bringing it to
-public attention via technical means through browser- or server-side
-instrumentation. Nevertheless, even this simple concept runs into a number of
-obstacles:
-
- Some fingerprinting techniques simply leave no remotely measurable
- footprint, thus precluding any attempts to detect them in an automated
- fashion.
-
- Most other fingerprinting and tagging vectors are used in fairly evident
- ways, but could be easily redesigned so that they are practically
- indistinguishable from unrelated types of behavior. This would frustrate any
- programmatic detection strategies in the long haul, particularly if they are
- attempted on the client (where the party seeking to avoid detection can
- reverse-engineer the checks and iterate until the behavior is no longer
- flagged as suspicious).
-
-* The distinction between behaviors that may be acceptable to the user
- and ones that might not is hidden from view: for example, a cookie
- set for abuse detection looks the same as a cookie set to track
- online browsing habits. Without a way to distinguish between the two
- and properly classify the observed behaviors, tracking detection
- mechanisms may provide little real value to the user.
-
-## Potential directions for future work
-
-There may be no simple, universal, technical solutions to the problem of
-tracking on the Web by parties who are intent on doing so with no regard for
-user controls. That said, the authors of this page see some theoretical room for
-improvement when it comes to building simpler and more intuitive privacy
-controls to provide a better framework for the bulk of interactions with
-responsible sites and parties on the Internet:
-
- The current browser privacy controls evolved almost exclusively around the
- notion of HTTP cookies and several other very specific concepts that do not
- necessarily map cleanly to many of the tracking and fingerprinting methods
- discussed in this document. In light of this, to better meet user
- expectations, it may be beneficial for in-browser privacy settings to focus
- on clearly explaining practical privacy outcomes, rather than continuing to
- build on top of narrowly-defined concepts such as "third-party cookies".
-
- We worry that in some cases, interacting with browser privacy controls can
- degrade one’s browsing experience, discouraging the user from ever touching
- them. A canonical example of this is trying to delete cookies: reviewing
- them manually is generally impractical, while deleting all cookies will kick
- the user out of any sites he or she is logged into and frequents every day.
- Although fraught with some implementation challenges, it may be desirable to
- build better heuristics that distinguish and preserve site data specifically
- for the destinations that users frequently log into or meaningfully interact
- with.
-
- Even for extremely privacy-conscious users who are willing to put up with
- the inconvenience of deleting one’s cookies and purging other session data,
- resetting online fingerprints can be difficult and fail in unexpected ways.
- An example of this is discussed in section 1: if there are ads loaded on any
- of the currently open tabs, clearing all local data may not actually result
- in a clean slate. Investing in developing technologies that provide more
- robust and intuitive ways to maintain, manage, or compartmentalize one's
- online footprints may be a noble goal.
-
- Today, some privacy-conscious users may resort to tweaking multiple settings
- and installing a broad range of extensions that together have the
- paradoxical effect of facilitating fingerprinting - simply by making their
- browsers considerably more distinctive, no matter where they go. There is a
- compelling case for improving the clarity and effect of a handful of
- well-defined privacy settings as to limit the probability of such outcomes.
-
-We present these ideas for discussion within the community; at the same time, we
-recognize that although they may sound simple when expressed in a single
-paragraph, their technical underpinnings are elusive and may prove difficult or
-impossible to fully flesh out and implement in any browser. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/corb-for-developers/index.md b/chromium/docs/website/site/Home/chromium-security/corb-for-developers/index.md
deleted file mode 100644
index 233766fb522..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/corb-for-developers/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: corb-for-developers
-title: Cross-Origin Read Blocking for Web Developers
----
-
-**Cross-Origin Read Blocking (CORB)** is a new web platform security feature
-that helps mitigate the threat of side-channel attacks (including Spectre). It
-is designed to prevent the browser from delivering certain cross-origin network
-responses to a web page, when they might contain sensitive information and are
-not needed for existing web features. For example, it will block a cross-origin
-text/html response requested from a &lt;script&gt; or &lt;img&gt; tag, replacing
-it with an empty response instead. This is an important part of the protections
-included with [Site Isolation](/Home/chromium-security/site-isolation).
-
-This document aims to help web developers know what actions they should take in
-response to CORB. For more information about CORB in general, please see the
-[CORB
-explainer](https://chromium.googlesource.com/chromium/src/+/HEAD/services/network/cross_origin_read_blocking_explainer.md),
-the [specification](https://fetch.spec.whatwg.org/#corb), the ["Site Isolation
-for web developers"
-article](https://developers.google.com/web/updates/2018/07/site-isolation), or
-the following [talk](https://youtu.be/dBuykrdhK-A) from Google I/O 2018. (The
-CORB discussion starts at [around 23:20
-mark](https://youtu.be/dBuykrdhK-A?t=1401).)
-
-#### Lessons from Spectre and Meltdown, and how the whole web is getting safer
-
-## How can I ensure CORB protects resources on my website?
-
-To make sure that sensitive resources on your website (e.g. pages or JSON files
-with user-specific information, or pages with CSRF tokens) will not leak to
-other web origins, please take the following steps to distinguish them from
-resources that are allowed to be embedded by any site (e.g., images, JavaScript
-libraries).
-
-### For HTML, JSON, and XML resources:
-
-Make sure these resources are served with a correct "Content-Type" response
-header from the list below, as well as a "X-Content-Type-Options: nosniff"
-response header. These headers ensure Chrome can identify the resources as
-needing protection, without depending on the contents of the resources.
-
-* [HTML MIME type](https://mimesniff.spec.whatwg.org/#html-mime-type)
- - "text/html"
-* [XML MIME type](https://mimesniff.spec.whatwg.org/#xml-mime-type) -
- "text/xml", "application/xml", or any MIME type whose subtype ends
- in "+xml"
-* [JSON MIME type](https://mimesniff.spec.whatwg.org/#json-mime-type)
- - "text/json", "application/json", or any MIME type whose subtype
- ends in "+json"
-
-Note that we recommend not supporting **multipart** [range
-requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests) for
-sensitive resources, because this changes the MIME type to multipart/byteranges
-and makes it harder for Chrome to protect. Typical range requests are not a
-problem and are treated similarly to the nosniff case.
-
-In addition to the recommended cases above, Chrome will also do its best to
-protect responses labeled with any of the MIME types above and without a
-"nosniff" header, but this has limitations. Many JavaScript files on the web are
-unfortunately labeled using some of these MIME types, and if Chrome blocked
-access to them, existing websites would break. Thus, when the "nosniff" header
-is not present, Chrome first looks at the start of the file to try to confirm
-whether it is HTML, XML, or JSON, before deciding whether to protect it. If it
-cannot confirm this, it allows the response to be received by the cross-site
-page's process. This is a best-effort approach which adds some limited
-protection while preserving compatibility with existing sites. We recommend that
-web developers include the "nosniff" header to protect their resources, to avoid
-relying on this "confirmation sniffing" approach.
-
-### For other resource types (e.g., PDF, ZIP, PNG):
-
-Make sure these resources are served only in response to requests that include
-an unguessable CSRF token (which should be distributed via resources protected
-via the HTML, JSON, or XML steps above).
-
-## What should I do about CORB warnings reported by Chrome?
-
-When CORB blocks a HTTP response, it emits the following warning message to the
-DevTools console in Chrome:
-
-> Cross-Origin Read Blocking (CORB) blocked cross-origin response
-> https://www.example.com/example.html with MIME type text/html. See
-> <https://www.chromestatus.com/feature/5629709824032768> for more details.
-
-> (In Chrome 66 and earlier, this message was slightly different: Blocked
-> current origin from receiving cross-site document at
-> https://www.example.com/example.html with MIME type text/html.)
-
-In most cases, the blocked response should not affect the web page's behavior
-and the CORB error message can be safely ignored. For example, the warning may
-occur in cases when the body of the blocked response was empty already, or when
-the response was going to be delivered to a context that can't handle it (e.g.,
-a HTML document such as a 404 error page being delivered to an &lt;img&gt; tag).
-***Note:** Chrome will stop showing warning messages for empty or error
-responses in Chrome 69, since these are false positives that do not affect site
-behavior. If you see CORB warnings in Chrome 67 or 68, please test the site in
-Chrome 69 to see if any warnings remain.*
-
-In rare cases, the CORB warning message may indicate a problem on a website,
-which may disrupt its behavior when certain responses are blocked. For example,
-a response served with a "X-Content-Type-Options: nosniff" response header and
-an incorrect "Content-Type" response header may be blocked. This could, for
-example, block an actual image which is mislabeled as "Content-Type: text/html"
-and "nosniff." If this occurs and interferes with a page's behavior, we
-recommend informing the website and requesting that they correct the
-"Content-Type" header for the response.
-
-If you suspect Chrome is incorrectly blocking a response and that this is
-disrupting the behavior of a website, [please file a Chromium
-bug](https://goo.gl/XBoKtY) describing the incorrectly blocked response (both
-the headers and body) and/or the URL serving it. You can confirm if a problem is
-due to CORB by temporarily disabling it, by starting Chrome with the following
-command line flag:
-
---disable-features=CrossSiteDocumentBlockingAlways,CrossSiteDocumentBlockingIfIsolating \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/core-principles/index.md b/chromium/docs/website/site/Home/chromium-security/core-principles/index.md
deleted file mode 100644
index 2bc18f25ad2..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/core-principles/index.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: core-principles
-title: Core Principles
----
-
-### Help users safely navigate the web.
-
-Ensuring user safety means carefully balancing usability, capability and
-security. If we’re doing it right, these aspects should all work hand-in-hand.
-In most cases, we want security to be nearly invisible to the user. We update
-transparently and try to provide safe defaults without asking users to make
-security decisions. When [security
-indicators](http://support.google.com/chrome/bin/answer.py?hl=en&answer=95617)
-are surfaced, we aim to clearly explain the situation and highlight the most
-important information, such as the hostname and SSL state in the address bar.
-
-### Design for defense in depth (and more depth).
-
-Our goal in designing Chrome’s security architecture was to layer defenses, and
-avoid single points of failure. Chrome’s sandbox architecture represents one of
-the most effective parts of this strategy, but it’s far from the only piece. We
-also employ the best available anti-exploit technologies—including
-[ASLR](http://en.wikipedia.org/wiki/Address_space_layout_randomization),
-[DEP](http://en.wikipedia.org/wiki/Data_Execution_Prevention), [JIT
-hardening](http://www.matasano.com/research/Attacking_Clientside_JIT_Compilers_Paper.pdf#page=24),
-and [SafeSEH](http://msdn.microsoft.com/en-us/library/9a89h429.aspx)—along with
-custom technologies like [Safe
-Browsing](http://code.google.com/apis/safebrowsing/), [out-of-date plugin
-blocking](http://support.google.com/chrome/bin/answer.py?hl=en&answer=1181003),
-silent auto-update, and [verified
-boot](/chromium-os/chromiumos-design-docs/verified-boot) on Chrome OS. And we
-continue to work towards advancing the state of the art with research into areas
-like per-origin sandboxing and control flow integrity.
-
-### Security is a team responsibility.
-
-There’s a common misconception that security can be handled as a feature or
-add-on component. The fact is that security of any complex piece of software is
-a cross-cutting concern, determined by millions of seemingly innocuous decisions
-being made by developers every day. That’s why it’s essential for every team
-member to be aware of secure development practices, and work with their security
-team throughout the lifecycle of the project. This general awareness helps
-supplement our normal security review process of auditing, regression testing,
-and fuzzing.
-
-### Speed matters.
-
-User safety depends on quickly turning around security issues, regardless of
-whether a vulnerability is discovered internally or reported by a third party.
-We are committed to promptly addressing all security issues, and delivering
-fixes to our users via our fast automatic update process. This approach has
-allowed us to maintain an [industry-leading response
-time](http://www.accuvant.com/sites/default/files/images/webbrowserresearch_v1_0.pdf#page=24)
-to security vulnerabilities—even when dealing with such a complex and
-politically charged issue as an irresponsible root Certificate Authority.
-
-### Be transparent.
-
-We do not downplay security impact or bury vulnerabilities with silent fixes,
-because doing so serves users poorly. Instead, we provide users and
-administrators with the information they need to accurately assess risk. We
-publicly document our [security handling
-proces](/Home/chromium-security/security-bug-lifecycle)[s](/Home/chromium-security/security-bug-lifecycle),
-and we disclose all vulnerabilities fixed in Chrome and its dependencies—whether
-discovered internally or externally. Whenever possible, we list all fixed
-security issues in our [release
-notes](http://googlechromereleases.blogspot.com/), and make the underlying
-details public as soon as other affected projects have an adequate amount of
-time to respond. When we do not control the disclosure timeline for a security
-issue and cannot list it at the time of release, we make the details of the
-issue public as soon as disclosure occurs.
-
-### Engage the community.
-
-No software is perfect, and security bugs slip through even the best development
-and review processes. That’s why we’re grateful for the work of the independent
-security research community in helping us find and fix vulnerabilities. In
-response, we do our best to [acknowledge](/Home/chromium-security/hall-of-fame)
-and [reward](/Home/chromium-security/vulnerability-rewards-program) their
-contributions by ensuring proper attribution, paying out bounties, and
-sponsoring security conferences. We leverage the community to even greater
-extent where we can, by hiring members directly onto our team and contracting
-with industry leading, independent security consultancies.
-
-### Make the web safer for everyone.
-
-Security is not a zero-sum game. One browser does not succeed in security at the
-cost of others, and we’re all better off when the best security technologies and
-techniques are employed by everyone. To that end, we work closely with standards
-bodies and other browser makers to raise the bar by collaborating on various
-standards, including [public key
-pinning](http://tools.ietf.org/html/draft-ietf-websec-key-pinning-01), [Content
-Security Policies](http://www.w3.org/TR/CSP/), and [SPDY](/spdy). We also open
-source or otherwise make our security technologies widely available (e.g.
-[Native Client](/nativeclient) / Pepper, [Open Type
-Sanitizer](https://code.google.com/p/ots/), [application
-sandboxing](/developers/design-documents/sandbox), and [Safe
-Browsing](https://code.google.com/apis/safebrowsing/)). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/crlsets/CRLSetComponents.png.sha1 b/chromium/docs/website/site/Home/chromium-security/crlsets/CRLSetComponents.png.sha1
deleted file mode 100644
index 4fad02b7a84..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/crlsets/CRLSetComponents.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-499428fe4e368c0e859e10c37be5c60d102b4715 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/crlsets/index.md b/chromium/docs/website/site/Home/chromium-security/crlsets/index.md
deleted file mode 100644
index 156a9fbdb64..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/crlsets/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: crlsets
-title: CRLSets
----
-
-(This page is intended for Certificate Authorities who wish to know about
-Chromium's certificate revocation behaviour.)
-
-CRLSets ([background](https://www.imperialviolet.org/2012/02/05/crlsets.html))
-are primarily a means by which Chrome can quickly block certificates in
-emergency situations. As a secondary function they can also contain some number
-of non-emergency revocations. These latter revocations are obtained by crawling
-CRLs published by CAs.
-
-Online (i.e. OCSP and CRL) checks are not, generally, performed by Chrome. They
-can be enabled by policy and, in some cases, the underlying system certificate
-library always performs these checks no matter what Chromium does.
-
-The Chromium source code that implements CRLSets is, of course,
-[public](https://chromium.googlesource.com/chromium/src/+/HEAD/net/cert/crl_set.cc).
-But the process by which they are generated is not.
-
-We maintain an internal list of crawled CRLs which are intended to cover
-intermediate revocations. The CRLs from that set go to make up the published
-CRLSet. CRLs on the list are fetched infrequently (at most once every few hours)
-and verified against the correct signing certificate for that CRL.
-
-The current CRLSet can be fetched and dumped out using the code at
-<https://github.com/agl/crlset-tools>.
-
-The version of CRLSet being used by Chrome can be inspected by navigating to
-chrome://components:
-
-[<img alt="image"
-src="/Home/chromium-security/crlsets/CRLSetComponents.png">](/Home/chromium-security/crlsets/CRLSetComponents.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes/index.md b/chromium/docs/website/site/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes/index.md
deleted file mode 100644
index 52a85f1686b..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes/index.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: deprecating-permissions-in-cross-origin-iframes
-title: Deprecating Permissions in Cross-Origin Iframes
----
-
-**Contents**
-
-[TOC]
-
-## Proposal
-
-It’s proposed that by default the following permissions cannot be requested or
-used by content contained in cross-origin iframes:
-
-* Geolocation (getCurrentPosition and watchPosition)
-* Midi (requestMIDIAccess)
-* Encrypted media extensions (requestMediaKeySystemAccess)
-* Microphone, Camera (getUserMedia)
-
-In order for a cross-origin frame to use these features, the embedding page must
-specify a Permission Policy enables the feature for the frame. For example, to
-enable geolocation in an iframe, the embedder could specify the iframe tag as:
-
-```html
-<iframe src="<https://example.com>" allow="geolocation"></iframe>
-```
-
-You can find the original blink [intent to deprecate thread
-here](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/mG6vL09JMOQ).
-
-**This is a living document** — as we learn more, we'll probably need to change
-this page.
-
-## Motivation
-
-Untrusted third-party content, such as ads, are frequently embedded in iframes
-on websites. Currently, permissions like geolocation, midi, etc. can be directly
-requested and used by this content.
-
-UI for displaying permission prompts that are triggered by iframes can be very
-confusing. Often permission prompts appear to be coming from the top-level
-origin. As a result, users can be misled into granting permission to third-party
-content that they did not intend to. At the very least, third-party content has
-the ability to annoy users by displaying prompts even if they are undesired by
-the embedding page.
-
-Furthermore, even if a user has previously granted persistent permission to an
-origin, they are unlikely to be aware when that origin is loaded in an iframe on
-a website on the drive-by-web. This may result in unexpected and unwanted access
-a user’s camera, location, etc.
-
-The goal of this proposal is to protect users by disabling permissions by
-default in iframes. Embedding websites would have the ability to re-enable
-features for trusted content. This means that in order for a site to request
-permission, the embedding website must express trust in the origin, in addition
-to the user’s trust expressed through a permission grant.
-
-It should also be noted that several new features being implemented (e.g.
-Payment request, WebVR) are adopting the model of disabling sensitive features
-in cross-origin iframes from the beginning. This change will bring older
-features into line with the direction the web is heading.
-
-## To continue to use permissions from iframes on your website...
-
-This deprecation is expected to ship in Chrome M64 (around January 2018). At
-that time, if a cross-origin iframe attempts to use permission without the
-feature being explicitly allowed, a console warning will be logged and the
-feature will fail in a similar way as it would if a user had denied a permission
-prompt.
-
-If you are a developer of a website which uses cross-origin iframes and you want
-those iframes to continue to be able to request/use one of the above features,
-the page that embeds the iframe will need to be changed. The simplest way to do
-that is to modify the &lt;iframe&gt; tag to include an allow attribute which
-specifies the name of the permission. For example, to enable geolocation and
-mic/camera for an iframe, the following would be specified:
-
-```html
-<iframe src="<https://example.com>" allow="geolocation; microphone;
-camera"></iframe>
-```
-
-Note that the above will grant geolocation, microphone and camera access to the
-origin specified in the "src" attribute, i.e. in this case it would be
-https://example.com. In some cases, other origins will be loaded in the iframe
-that you may also wish to grant access to. In those cases you can explicitly
-specify the origins to grant access to:
-
-```html
-<iframe src="<https://example.com>" allow="geolocation https://example.com
-https://foo.com;"></iframe>
-```
-
-The above example would grant geolocation to https://example.com as well as
-https://foo.com when they are loaded in the iframe. To grant access to all
-origins that might be loaded in the iframe, the \* syntax can be used. This
-should be used carefully as it means that any page that gets loaded in the
-iframe can request geolocation, which is often not the intent. The code would
-look as follows:
-
-```html
-<iframe src="<https://example.com>" allow="geolocation *;"></iframe>
-```
-
-Valid values for allow include:
-
-* geolocation
-* microphone
-* camera
-* midi
-* encrypted-media
-
-Note that if the iframe which is using the permission has the same origin as the
-top level page, then no changes have to be made.
-
-## More Information
-
-To find more information about Permissions Policy, take a look at the following
-resources:
-
-* [The permissions policy
- specification](https://w3c.github.io/webappsec-permissions-policy/)
-* [The permissions policy
- explainer](https://github.com/w3c/webappsec-permissions-policy/blob/main/permissions-policy-explainer.md)
-* [chromestatus.com entry for this
- change](https://www.chromestatus.com/feature/5023919287304192) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/deprecating-powerful-features-on-insecure-origins/index.md b/chromium/docs/website/site/Home/chromium-security/deprecating-powerful-features-on-insecure-origins/index.md
deleted file mode 100644
index c6b474d79bc..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/deprecating-powerful-features-on-insecure-origins/index.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: deprecating-powerful-features-on-insecure-origins
-title: Deprecating Powerful Features on Insecure Origins
----
-
-[TOC]
-
-## Proposal
-
-As browser users manage more and more of their day-to-day lives online, we
-(Chrome Security) believe they should reasonably expect that browsing and
-interacting with the web is secure and protects their sensitive information
-across their entire browsing experience. Protecting users’ privacy and security
-requires connecting to secure origins wherever possible. Practically speaking,
-this means restricting features to HTTPS in lieu of HTTP, especially for
-powerful web platform features.
-
-While [strong progress](https://transparencyreport.google.com/https/overview)
-has been made in increasing HTTPS adoption on the web over the past several
-years, there are still millions of sites that do not support secure connections
-over HTTPS, which means that support for HTTP isn’t going away in the
-foreseeable future. As long as a significant portion of browsing the web can
-only happen over HTTP, it’s important that we take steps to protect and inform
-users whenever we cannot guarantee that their connections are secure.
-
-Continuing from our past efforts to [restrict new features to secure
-origins](/Home/chromium-security/prefer-secure-origins-for-powerful-new-features),
-we are taking further steps on our path of deprecating powerful features on
-insecure origins in order to mitigate the most privacy- and security-sensitive
-risks of using HTTP in Chrome. To guide our efforts going forward, we have
-created the following principles, which we will use to prioritize future work in
-this area:
-
-- **Better inform users when making trust decisions about sites over
- insecure connections** Over time, Chrome users are making an
- increasingly large amount of trust decisions when interacting with
- websites, whether by granting permissions for powerful web features,
- submitting personal information to a website, or downloading
- executable code. However, when the connection to a website is
- unauthenticated and unencrypted, these trust decisions aren’t bound
- to the intended site in a meaningful way. When Chrome presents users
- with such a trust decision, we plan on ramping up warnings to users
- when these features are being used over connections to insecure
- origins.
-
-- **Limit the ability for sites to circumvent security policies over
- insecure connections** The [same-origin-policy
- (SOP)](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)
- is an important security policy that limits a website’s ability to
- interact with resources from other origins. Several powerful web
- platform features (such as
- [postMessage](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)
- and [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS))
- allow for websites to exempt domains from this policy to provide a
- more feature-rich experience. Our goal for future versions of Chrome
- to gradually limit the ability for insecure origins to be expressed
- in policy exceptions like these.
-
-- **Change how, and for how long, Chrome stores site content provided
- over insecure connections** When browsing to a site over HTTP today,
- Chrome will both [cache site
- content](/developers/design-documents/network-stack/http-cache) for
- future use as well as providing access to persistent [local
- storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage).
- When this content is provided over insecure and unauthenticated
- connections, the value of this persistent storage is significantly
- reduced and we are exploring ways to limit the duration this content
- will persist on user devices between visits to insecure origins.
-
-## Powerful Features restricted to Secure Origins
-
-A (non-exhaustive) list of powerful features we have already restricted to
-secure origins includes:
-
-- Geolocation
-- Device motion / orientation
-- EME
-- getUserMedia
-- AppCache
-- Notifications
-
-## Testing Powerful Features
-
-If you are a developer that needs to keep testing a site using a powerful
-feature that has been restricted to secure origins, [this
-article](https://web.dev/how-to-use-local-https/) provides helpful instructions
-for a variety of options for local development, including testing on
-<http://localhost> where possible, creating and using self-signed certificates,
-as well as creating, installing, and managing self-signed CAs to issue testing
-and development certificates.
-
-In addition to this guidance, there are some Chrome and Android-specific tips
-that can help when developing and testing features restricted to secure origins:
-
-1. You can use `chrome://flags/#unsafely-treat-insecure-origin-as-secure` to run
- Chrome, or use the
- `--unsafely-treat-insecure-origin-as-secure="http://example.com"` flag
- (replacing "example.com" with the origin you actually want to test), which
- will treat that origin as secure for this session. Note that on Android and
- ChromeOS the command-line flag requires having a device with root access/dev
- mode.
-
-2. On a local network, you can test on your Android device using [port
- forwarding](https://developers.google.com/web/tools/chrome-devtools/remote-debugging/local-server)
- to access a remote host as localhost.
-
-We continue to invest in improved methods for testing powerful features on
-insecure origins, and we'll update this page once we've developed them. Feel
-free to contribute ideas to
-[security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/education/index.md b/chromium/docs/website/site/Home/chromium-security/education/index.md
deleted file mode 100644
index 62b474ff5e0..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/education/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: education
-title: Education
----
-
-Security is a core principle and shared responsibility for everyone contributing
-to Chromium. Here are some docs that can help an engineer get ramped up to
-Chrome-specific security best practices, pitfalls, or relevant background. Send
-your comments, questions, or additional security education needs to
-security-dev@chromium.org
-
-* [IPC Security
- Tips](/Home/chromium-security/education/security-tips-for-ipc), a
- thrilling read about how to avoid introducing an IPC vulnerability
- and feature in the next
- [Pwnium](http://blog.chromium.org/2012/05/tale-of-two-pwnies-part-1.html)
- contest.
-* Security tips for avoiding common vulnerabilities and abuse vectors
- when [developing extensions and
- apps](/Home/chromium-security/education/security-tips-for-crx-and-apps).
-* [Everything you wanted to know about TLS/SSL in
- Chrome](/Home/chromium-security/education/tls)
-* If you are implementing a Chrome Extension/App API, read the
- [security guidelines for Chrome Extension & App API
- developers](https://docs.google.com/document/d/1RamP4-HJ7GAJY3yv2ju2cK50K9GhOsydJN6KIO81das/pub).
-* Do not implement your own allocator. Custom allocators are a major
- source of [security
- vulnerabilities](https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=437).
- Chrome's existing allocators (e.g.
- [Tcmalloc](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/tcmalloc/chromium/src/&q=tcmalloc&sq=package:chromium),
- [PartitionAlloc](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/wtf/PartitionAlloc.h&q=PartitionAlloc&sq=package:chromium&type=cs&l=1))
- and resillient to security issues. If you absolutely need to
- implement some form of custom allocator, make sure to get a thorough
- review from the security team.
-* When manipulating buffers in trusted memory, do not implement your
- own code for handling [integer
- overflows](http://en.wikipedia.org/wiki/Integer_overflow#Security_ramifications),
- truncations, or other integral boundary conditions. Instead use
- [base/numerics](https://code.google.com/p/chromium/codesearch#chromium/src/base/numerics/&ct=rc&cd=1&q=base/numerics&sq=package:chromium)
- templates which are already used in several parts of Chrome. The
- following refernces are also good resources on integer security
- issues:
- * CERT C++ [Secure Coding
- Standard](https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637).
- * Mark Dowd, John McDonald, Justin Schuh, [The Art of Software
- Security Assessment: Identifying and Preventing Software
- Vulnerabilities](http://www.amazon.com/Art-Software-Security-Assessment-Vulnerabilities/dp/0321444426/ref=sr_1_1?s=books&ie=UTF8&qid=1402949525&sr=1-1&keywords=The+Art+of+Software+Security+Assessment).
- * Robert C. Seacord, [Secure Coding in C and
- C++](http://www.amazon.com/Secure-Coding-Robert-C-Seacord/dp/0321335724). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/education/security-tips-for-crx-and-apps/index.md b/chromium/docs/website/site/Home/chromium-security/education/security-tips-for-crx-and-apps/index.md
deleted file mode 100644
index b2398b7be6b..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/education/security-tips-for-crx-and-apps/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/education
- - Education
-page_name: security-tips-for-crx-and-apps
-title: Security Tips for Developing CRX
----
-
-*(Note: Content adapted from an [earlier blog post on this
-topic](http://blog.chromium.org/2011/07/writing-extensions-more-securely.html).)*
-
-Chrome extensions (CRX) are powerful pieces of software in modern browsers, and
-as such, you should help ensure that your extensions are not susceptible to
-security exploits. If an attacker manages to exploit a vulnerability in a CRX,
-they may gain access to the same privileges that the extension has. The Chrome
-extensions system has a number of [built-in
-protections](http://blog.chromium.org/2009/12/security-in-depth-extension-system.html)
-to make it more difficult to introduce exploitable code, but certain coding
-patterns can still introduce common web vulnerabilities like cross-site
-scripting (XSS).
-
-## **Minimize your permissions**
-
-The most important thing to consider is whether you’re declaring the minimal set
-of permissions that you need to function. That way, if you do have a security
-bug in your code, the amount of permissions you’re exposing to the attacker is
-minimal as well. Avoid requesting (\*/\*) permissions for hosts if you only need
-to access a couple, and don’t copy and paste your manifest from example code
-blindly. Review your manifest to make sure you’re only declaring what you need.
-This applies to permissions like tabs, history, cookies, etc. in addition to
-host permissions. For example, if all you’re using is
-[chrome.tabs.create](http://code.google.com/chrome/extensions/tabs.html#method-create),
-you don’t actually need the tabs permission.
-
-Another way of minimizing install time permissions is to use [optional
-permissions](https://developer.chrome.com/extensions/permissions). Using
-chrome.permissions API, you can request permissions only when you need them
-during runtime.
-
-## **Use content_security_policy in your manifest**
-
-[Content Security
-Policy](http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html)
-is supported in extensions via the
-[content_security_policy](http://code.google.com/chrome/extensions/trunk/manifest.html#content_security_policy)
-manifest field. This allows you to control where scripts can be executed, and it
-can be used to help reduce your exposure to XSS. For example, to specify that
-your extension loads resources only from its own package, use the following
-policy:
-"content_security_policy": "default-src 'self'"
-If you need to include scripts from specific hosts, you can add those hosts to
-this property.
-
-## **Don’t use &lt;script src&gt; with an HTTP URL**
-
-When you include javascript into your pages using an HTTP URL, you’re opening
-your extension up to man-in-the-middle (MITM) attacks. When you do so in a
-content script, you have a similar effect on the pages you’re injected into. An
-attacker on the same network as one of your users could replace the contents of
-the script with content that they control. If that happens, they could do
-anything that your page can do.
-If you need to fetch a remote script, always use HTTPS from a trusted source.
-
-## **Don’t use eval()**
-
-The eval() function is very (too!) powerful, and you should avoid using it
-unless absolutely necessary. Where did the code come from that you passed into
-eval()? If it came from an HTTP URL, you’re vulnerable to a MITM attack. If any
-of the content that you passed into eval() is based on content from a random web
-page the user visits, you’re vulnerable to content escaping bugs. For example,
-let’s say that you have some code that looks like this:
-function displayAddress(address) { // address was detected and grabbed from the
-current page
-eval("alert('" + address + "')");
-}
-If it turned out that you had a bug in your parsing code, the address might wind
-up looking something like this:
-'); dosomethingevil();
-There’s almost always a better alternative to using eval(). For example, you can
-use JSON.parse if you want to parse JSON (with the added benefit that it runs
-faster).
-
-## **Don’t use innerHTML or document.write()**
-
-It’s really tempting to use innerHTML because it’s much simpler to generate
-markup dynamically than to create DOM nodes one at a time. However, this sets
-you up for XSS bugs. For example:
-function displayAddress(address) { // address was detected and grabbed from the
-current page
-myDiv.innerHTML = "&lt;b&gt;" + address + "&lt;/b&gt;");
-}
-This would allow an attacker to make an address like the following and once
-again run some script in your page:
-&lt;script&gt;dosomethingevil();&lt;/script&gt;
-Instead of innerHTML, you can manually create DOM nodes and use innerText to
-insert dynamic content.
-
-## **Beware of external content**
-
-In general, if you’re generating dynamic content based on data from outside of
-your extension (such as something you fetched from the network, something you
-parsed from a page, or a message you received from another extension, etc.), you
-should be extremely careful about how you use and display it. If you use this
-data to generate content within your extension, you might be opening your users
-up to increased risk.
-
-## **Additional Resources**
-
-* Additional security tips and examples for Content Scripts in our
- [Extension Developer
- Docs](https://developer.chrome.com/extensions/content_scripts.html#security-considerations)
-* [Advanced Chrome Extension Exploitation Leveraging API powers for
- Better
- Evil](http://kyleosborn.com/bh2012/advanced-chrome-extension-exploitation-WHITEPAPER.pdf)
- (by krzysztof@kotowicz.net and kos@kos.io)
-* [Security guidelines for Chrome Extension & App API
- developers](https://docs.google.com/document/d/1RamP4-HJ7GAJY3yv2ju2cK50K9GhOsydJN6KIO81das/pub) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/education/security-tips-for-ipc/index.md b/chromium/docs/website/site/Home/chromium-security/education/security-tips-for-ipc/index.md
deleted file mode 100644
index c42772419b7..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/education/security-tips-for-ipc/index.md
+++ /dev/null
@@ -1,219 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/education
- - Education
-page_name: security-tips-for-ipc
-title: Security Tips for IPC
----
-
-**Note: This document is for legacy IPC. For Mojo IPC, please refer to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/mojo.md>**
-
-**The [Integer Semantics section has moved to Markdown
-too](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/integer-semantics.md).**
-
-Chrome's[inter-process communication
-(IPC)](http://www.chromium.org/developers/design-documents/inter-process-communication)
-layer is the communication channel supporting our [multi-process
-architecture](http://www.chromium.org/developers/design-documents/multi-process-architecture).
-Security bugs in IPC can have [nasty
-consequences](http://blog.chromium.org/2012/05/tale-of-two-pwnies-part-1.html),
-but sticking to these tips should help you avoid most pitfalls. Questions,
-feedback, or suggestions to security@chromium.org.
-
-**[TOC]**
-
-## Trust only the browser process.
-
-**Generally, privileged processes must set all policy. In Chromium, this means
-the browser process. "Policy" means: sizes, addresses, object names, filesystem
-pathnames, permissions/ACLs, specific implementations of interfaces, etc. In
-practice, this is how it should work:**
-
- ******Unprivileged process asks for capability.******
-
- ******Privileged process applies policy to find an implementation for the
- capability.******
-
- ******Unprivileged process receives it and performs constrained operations
- on it.******
-
- ******Privileged process owns the capability lifecycle.******
-
-## **Do not trust renderer, PPAPI, or GPU processes.**
-
-IPC messages from the renderers must be viewed with the same skepticism as one
-would apply to user input. These messages are untrustworthy input.
-
-## Sanitize and validate untrustworthy input.
-
-If you're handling filenames or paths derived from untrustworthy input, make
-sure to avoid [directory traversal
-attacks](http://en.wikipedia.org/wiki/Directory_traversal_attack) by sanitizing
-(e.g. by using a FilePath rather than a string, because FilePath implicitly
-checks for ".." traversal sequences and other unanticipated platform behavior)
-and ensuring the resulting path is within your base directory.
-
-To construct a valid pathname, apply a function like FilePath::BaseName() to the
-untrustworthy pathnames; now it's a basename for sure, and not a full pathname
-or a sneaky trick. Then prefix the basename with a static directory name. Also
-apply simple, "obviously-correct" lexical checks such as an RE match for
-/^\\w{8,16}$/.
-
-## Allowing is better than blocking.
-
-If you know the full set of valid data, then compare against that rather than
-checking for occurrences of known-bad data.
-
-## **Safely handle known-bad input.**
-
-When validating untrustworthy input, don't simply use CHECK. We do not want the
-input validation mechanism to become an easy way for a malicious renderer to
-kill the browser process. It's usually better to ignore the bad input, or for
-the privileged process to immediately kill the sender of invalid inputs.
-
-To terminate a malfunctioning IPC sender, see
-BrowserChildProcessHostImpl::TerminateOnBadMessageReceived.
-
-## **Use and validate specific, constrained types; let the compiler work for you.**
-
-Use the most specific data type you can to enable the type system to do part of
-your data validation. In other words, do you really need to use a string? Using
-more constrained types (e.g. primitives, enum, GURL instead of std::string that
-is "supposed to be a URL", etc.) lets the compiler do the type checking for you
-and leads to faster, often smaller, and safer code that is easier for
-maintainers and reviewers to understand. The most common pattern we see
-violating this is unnecessary use of strings, which are essentially "blob types"
-that are often slow (copying, lexing/parsing, used as keys in maps), and "vague"
-in API contracts. The caller has to know how the callee is going to parse the
-string, and the callee has to parse and validate it correctly (see the next
-section).
-
-Some other specific tips:
-
-* Use integer types for ids (e.g. audio device IDs:
- <https://codereview.chromium.org/12440027>).
-* Use pre-defined styles instead of allowing arbitrary CSS injection
- with strings, which could lead to XSS (e.g.
- <https://codereview.chromium.org/11413018/diff/8041/chrome/browser/ui/browser_instant_controller.cc#newcode252>).
-* If you must pass filesystem pathnames and path components over IPC,
- use FilePath and check for path traversal using
- FilePath::ReferencesParent.
-* IPC_ENUM_TRAITS() is deprecated (it generates unchecked enums).
- IPC_ENUM_TRAITS_MAX_VALUE and friends in ipc/param_traits_macros.h
- can help you make a constrained enum. Keep in mind that it takes the
- range min..max *inclusive*.
-
-More generally, don't implement your own serialization mechanism
-(std::vector&lt;char&gt;, protobufs) on top of the Chrome IPC system. Break up
-your structs and use the primitives provided by Chrome IPC.
-
-## **Keep it simple.**
-
-**Send limited capabilities (e.g. file descriptors -but not directory
-descriptors-), not open-ended, complex objects (e.g. pathnames). For example, to
-write a temporary file, the renderer should ask the browser for a file
-descriptor/HANDLE; the browser should create one entirely according to its own
-policy; and then the browser should pass the descriptor to the renderer.**
-
-## Be aware of the subtleties of integer types.
-
-First read about the scary security implications of[ integer arithmetic.
-](http://en.wikipedia.org/wiki/Integer_overflow)Adhere to these best practices:
-
-* **Use unsigned types for values that shouldn't be negative or where
- defined overflow behavior is required.**
-* Use explicitly sized integer types, such as int32, int64, or uint32,
- since sender and receiver could potentially use different
- interpretations of implicit types.
-* Use the integer templates and cast templates in
- [base/numerics](https://code.google.com/p/chromium/codesearch#chromium/src/base/numerics/)
- to avoid overflows, *especially when calculating the size or offset
- of memory allocations.*
-
-## **Be aware of the subtleties of integer types across C++ and Java, too.**
-
-When writing code for Chromium on Android, you will often need to marshall
-arrays, and their sizes and indices, across the language barrier (and possibly
-also across the IPC barrier). The trouble here is that the Java integer types
-are well-defined, but the C++ integer types are whimsical. A Java int is a
-signed 32-bit integer with well-defined overflow semantics, and a Java long is a
-signed 64-bit integer with well-defined overflow semantics. in C++, only the
-explicitly-sized types (e.g. int32_t) have guaranteed exact sizes, and only
-unsigned integers (of any size) have defined overflow semantics.
-
-Essentially, Java integers *actually are* what people often (incorrectly)
-*assume* C++ integers are. Furthermore, Java Arrays are indexed with Java ints,
-whereas C++ arrays are indexed with size_t (often implicitly cast, of course).
-Note that this also implies a 2 Gig limit on the number of elements in an array
-that is coming from or going to Java. That Should Be Enough For Anybody, but
-it's good to keep in mind.
-
-You need to make sure that every integer value survives its journey across
-languages intact. That generally means explicit casts with range checks; the
-easiest way to do this is with the base::checked_cast cast or
-base::saturated_cast templates in
-[safe_conversions.h](https://code.google.com/p/chromium/codesearch#chromium/src/base/numerics/safe_conversions.h).
-Depending on how the integer object is going to be used, and in which direction
-the value is flowing, it may make sense to cast the value to jint (an ID or
-regular integer), jlong (a regular long integer), size_t (a size or index), or
-one of the other more exotic C++ integer types like off_t.
-
-## **Don't leak information, don't pass information that would be risky to use.**
-
-**In particular, don't leak addresses/pointers over the IPC channel, either
-explicitly or accidentally. (Don't defeat our
-[ASLR](http://en.wikipedia.org/wiki/Address_space_layout_randomization)!) Worse:
-sending pointers over the IPC is almost certainly a sign of something very wrong
-and could easily lead to memory corruption.**
-
-Do not pass child_id, that is [the ID of child processes as viewed by the
-browser](https://code.google.com/p/chromium/codesearch#chromium/src/content/common/child_process_host_impl.h&l=54)
-(which are not the same as the OS PIDs), from the browser via IPC. This
-construct is risky because it would be tempting to send back this ID to the
-browser and mistakenly use it as an authentication token, which it is not.
-
-## **Avoid Unsafe (Common) Coding Patterns**
-
-* Avoid accessing underlying string or array data via
- std::string::c_str or std::vector::data. If you do, make sure to
- stay in bounds. Note that std::string::operator\[\] and
- std::vector::operator\[\] are not required to do bounds checking.
-* Databases: When storing together both user data and metadata, make
- sure that the renderer can't directly read/write metadata via some
- sort of corrupted access of user data.
-* Databases: Assume that the database might be corrupted. Integers
- might have become large or negative, filesystem paths might have
- changed to "../../../../etc/passwd", etc. Do some validation.
-* Don't validate inputs with DCHECKs (and WebKit ASSERTs) in the
- high-privilege process that fail with invalid input from the
- lower-privilege process. Instead, explicitly validate each input and
- fail fast on any invalid input. Using the macros alone leads to a
- false sense of security since they aren't compiled into release
- builds.
-* Be careful with shared memory mappings (specifically tracking their
- sizes on either side of the IPC channel). Do not store and trust
- sizes on one side of the channel. Avoid specifying the size when
- calling Map.
-* Keep serializers/deserializers within ParamTraits Read and Write
- methods.
-* If your design requires you to serialize a structure into a string
- you are doing it wrong. Look at the IPC_STRUCT_ macros.
-* Use ReadLength wherever possible in deserializers instead of
- ReadInt, et c.
-* Avoid using ReadData within deserializers. If your design requires
- this it is almost certainly wrong.
-* Remember that, when specifying an ID in a message, a compromised
- process on the less privileged end can can specify another valid ID.
- Code should not assume that objects looked up by ID match other
- local state.
-
-## What About Mojo?
-
-The underlying principles are exactly the same whether reviewing a Mojo-based CL
-vs. a Chromium IPC CL. A short presentation can be found at
-<https://docs.google.com/a/google.com/presentation/d/1uo8WAD6Hgq_gjlODb2ioUNGQs9RGlUYSQywxZOwCzcE/edit?usp=sharing> \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/education/tls/index.md b/chromium/docs/website/site/Home/chromium-security/education/tls/index.md
deleted file mode 100644
index 28e09fc0fd8..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/education/tls/index.md
+++ /dev/null
@@ -1,349 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/education
- - Education
-page_name: tls
-title: TLS / SSL
----
-
-Data delivered over an unencrypted channel (e.g. HTTP) is insecure,
-untrustworthy, and trivially intercepted. **TLS can help!**
-
-[TOC]
-
-## What's TLS?
-
-TLS (also known as SSL) is the industry standard for providing communication
-security over the Internet.
-
-### **What security properties does TLS give me?**
-
-TLS guarantees identification, confidentiality, and integrity between a client
-(a computer) and a server.
-
-* Server identification means that the user is talking to the right
- server — i.e., your bank's server, and not someone on the network
- pretending to be your bank's server.
-* Confidentiality (via encryption) ensures that no one with access to
- the data going over the connection can understand the contents of
- the communication.
-* Integrity means that no one can tamper with the data in transit.
-
-In other words, TLS ensures that a [Man-in-the-Middle
-(MitM)](/Home/chromium-security/education/tls) can't snoop or tamper with an
-Internet connection between a user and website. A [man-in-the-middle
-(MiTM)](http://en.wikipedia.org/wiki/Man-in-the-middle_attack) is a term used to
-describe a third party that can passively monitor and/or actively tamper with a
-connection between two unknowing parties. A MiTM attacker relays messages
-between two parties, making them believe that they are talking directly to each
-other, when in fact the entire conversation is controlled by the attacker.
-
-MiTM attacks happen in real life! Here are some recent examples:
-
-* Opportunistic attacks on wifi networks are easy to conduct via
- freely available tools like
- [sslstrip](http://www.thoughtcrime.org/software/sslstrip/) or
- [firesheep](http://codebutler.com/firesheep/)
-* [NSA MiTM monitoring](https://www.eff.org/nsa-spying) of email,
- chat, and other Internet communication
-* [ISPs collecting
- data](http://www.dslreports.com/shownews/Bell-Dramatically-Ramps-Up-Consumer-Data-Collection-Efforts-126375)
- via MiTM sniffing for marketing purposes
-* [ISPs modifying web
- pages](http://arstechnica.com/tech-policy/2013/04/how-a-banner-ad-for-hs-ok/)
- (adding ads) via MiTM tampering
-* Chinese hackers [targeting
- github](https://en.greatfire.org/blog/2013/jan/china-github-and-man-middle)
-
-### **What security properties does TLS *not* give me?**
-
-TLS only protects the connection between your computer and the server. It does
-not protect data on the client or data on the server. This means:
-
-* If malware is installed on your computer, it will be able to see and
- modify your web traffic.
-* If your system administrator has installed local trust anchors or a
- local proxy (for example, on a company computer), then the system
- administrator may be able to see and modify your web traffic.
-* If malware is installed on the server, your data on the server may
- be at risk.
-* TLS does not stop compromised or rogue servers from trying to
- install malware on your computer. Instead, [Google Safe
- Browsing](https://www.google.com/transparencyreport/safebrowsing/)
- scans websites and files for signs of malware. If Google Safe
- Browsing flags a website or file as malicious, you will see a
- separate malware warning for the website or file. This is unrelated
- to TLS.
-
-## **TLS in Chrome**
-
-### **HTTP Strict Transport Security (HSTS)**
-
-HSTS is a mechanism enabling web sites to declare themselves accessible only via
-secure connections and/or for users to be able to direct their user agent to
-interact with given sites only over secure connections. Chrome supports HSTS and
-comes preloaded with a set of domains that use HSTS by default. More details,
-including how to add a site to Chrome's preloaded HSTS list, [here](/hsts).
-
-### **Certificates**
-
-TLS relies on websites serving authenticated (X.509) certificates to prove their
-identities, which prevents an attacker from pretending to be the website.
-Certificates bind a public key and an identity (commonly a DNS name) together
-and are typically issued for a period of several years. Ensure that your CA
-gives you a SHA-256 certificate, as SHA-1 certificates are deprecated (see
-below).
-
-#### **Certificate Pinning**
-
-Chrome has HTTPS "pins" for most Google properties — i.e. certificate chains for
-Google properties must have a explicitly listed public key, or it will result in
-a fatal error. This feature helped Google [detect a widespread MITM attack to
-Gmail users in
-2011](http://googleonlinesecurity.blogspot.com/2011/08/update-on-attempted-man-in-middle.html).
-You can read more about pinning
-[here](https://www.imperialviolet.org/2011/05/04/pinning.html). There's also an
-[Internet-Draft for HTTP-based public key
-pinning](http://tools.ietf.org/html/draft-ietf-websec-key-pinning).
-
-#### **Certificate Revocation**
-
-Sometimes events occur that invalidate the binding of public key and name, and
-the certificate needs to be revoked. For example, a [major flaw in the
-implementation of OpenSSL](http://heartbleed.com/) left site operators' private
-key vulnerable to theft, so operators needed to invalidate their certificates.
-Revocation is the process of invalidating a certificate before its expiry date.
-Chrome uses [CRLSets](https://www.imperialviolet.org/2012/02/05/crlsets.html) to
-implement certificate revocation. You can read about the how and why of Chrome's
-certificate revocation in our [Security
-FAQ](/Home/chromium-security/security-faq).
-
-#### **Certificate Errors**
-
-If there is an error in the certificate, Chrome can’t distinguish between a
-configuration bug in the site and a real MiTM attack, so Chrome takes proactive
-steps to protect users.
-
-If a site has elected to use HSTS, all certificate errors are fatal. Certificate
-pinning errors are also fatal. Otherwise, users are shown a full-screen warning
-interstitial they can elect to bypass.
-
-### Cipher Suites
-
-TLS connections negotiate a *cipher suite* which determines how data is
-encrypted and authenticated. Server products typically leave configuring this to
-the administrator. Many cipher suites available in TLS are obsolete and, while
-currently supported by Chrome, are not recommended. If an obsolete cipher suite
-is used, Chrome may display this message when clicking the lock icon:
-
-> *“Your connection to example.com is encrypted with obsolete cryptography.”*
-
-To avoid this message, use TLS 1.2 and prioritize an ECDHE cipher suite with
-AES_128_GCM or CHACHA20_POLY1305. Most servers will wish to negotiate
-TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.
-
-### **Deprecated and Removed Features**
-
-#### SHA-1 Certificate Signatures
-
-You may see this message when you click on the lock icon in Chrome:
-
-> *"This site uses a weak security configuration (SHA-1 signatures), so your
-> connection may not be private."*
-
-This means that the certificate chain for the current page is contains a
-certificate using a SHA-1-based signature, which is
-[outdated](https://www.schneier.com/blog/archives/2012/10/when_will_we_se.html)
-and [deprecated in
-Chrome](https://blog.chromium.org/2014/09/gradually-sunsetting-sha-1.html).
-There are two criteria that determine which lock icon is shown in Chrome:
-
-* the **expiration date of the leaf certificate** and
-* whether there is a **SHA-1-based signature in the certificate
- chain** (leaf certificate OR intermediate certificate).
-
-Note that the expiration dates of the intermediate certificate do not matter.
-Also, SHA-1-based signatures for root certificates are not a problem because
-Chrome trusts them by their identity, rather than by the signature of their
-hash.
-Starting in Chrome 42, the following logic applies:
-
-* If a leaf certificate **expires in 2016** and the chain **contains a
- SHA-1 signature**, the page will be marked as "secure, but with
- minor errors" (yellow icon).
-* If a leaf certificate **expires in 2017 or later** and the chain
- **contains a SHA-1 signature**, the page will be treated as
- "affirmatively insecure" (red icon).
-
-Note that this use of SHA-1 is not related to TLS message authentication (*“The
-connection is using \[cipher\], with HMAC-SHA1 for message authentication.”*).
-
-Please see [this page](/Home/chromium-security/education/tls/sha-1) for more
-details on deprecation dates and private enterprise PKIs.
-
-#### Weak Ephemeral Diffie-Hellman Key Exchange (ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY)
-
-Chrome requires a minimum DHE group size of 1024-bits. See [this
-announcement](https://groups.google.com/a/chromium.org/forum/#!topic/security-dev/WyGIpevBV1s)
-and [this
-page](https://support.google.com/chrome/answer/6098869?p=dh_error&rd=1#DHkey)
-for more details. Affected sites will fail to load with
-ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY.
-
-#### SSLv3
-
-SSLv3 is no longer supported in Chrome. See [this
-announcement](https://groups.google.com/a/chromium.org/forum/#!topic/security-dev/Vnhy9aKM_l4)
-for more details.
-
-#### RC4
-
-Chrome will remove support for the RC4 cipher in a future release around January
-or February 2016. Server operations should tweak their configuration to support
-other cipher suites. If available, TLS 1.2 with
-TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 is recommended. See [this
-announcement](https://groups.google.com/a/chromium.org/forum/#!topic/security-dev/kVfCywocUO8)
-for more details.
-
-#### Insecure Version Fallback (ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION)
-
-Historically, some buggy servers have required an insecure version fallback to
-function. This has been partially removed in Chrome and will be fully removed at
-a later date. See [this
-announcement](https://groups.google.com/a/chromium.org/forum/#!msg/security-dev/F6ZjP6FnyRE/bK7TKtvnHYsJ)
-for more details. Affected sites will fail to load with
-ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION.
-
-### **TLS Resources for Developers and Site Operators**
-
-#### TLS Myths
-
-#### **The only security guarantee TLS provides is confidentiality.**
-
-When properly deployed, TLS provides three guarantees: **authentication of the
-server**, **data integrity** (tamper-evidence), and **data confidentiality**.
-People often think TLS and HTTPS only apply in threat scenarios where data
-confidentiality is needed, but in fact they apply when any (or, most often, all
-3) guarantees are beneficial.
-
-* Authentication and integrity: The authors and readers of a news site
- want the news to be the true news that the authors intended. (See
- [the *New York Times*’ statement about
- this](http://open.blogs.nytimes.com/2014/11/13/embracing-https/).)
-* Authentication and integrity: The users of a financial information
- site very much need the facts and figures to be true.
-* Confidentiality: You could be just browsing the web, and a pervasive
- passive monitor could use this to build a profile of you, to track
- your related experiences on a variety of sites, to cross-reference
- your interactions, and then declare you a “threat” for otherwise
- benign interactions.
-* Confidentiality: You might be reading an article on reproductive
- health or religious beliefs that are contrary to local norms.
- Revealing this information could get you in “trouble”, for some
- definition of trouble.
-* Integrity: You could be reading a website supported by advertising,
- but that advertising might be rewritten to credit the attacker,
- rather than the site you're reading. Over time, the site you're
- reading may need to shut down, because all of their revenue has been
- stolen by attackers.
-* Integrity: You could be reading a blog, but which an attacker
- changes the content to suggest the blogger is endorsing or holding
- views contrary to what they really hold.
-
-**My site doesn't need TLS. I'm not a bank.**
-
-More people are connected to the web than ever before and from more places and
-more devices (laptops, phones, tablets, and [other
-things](http://en.wikipedia.org/wiki/Internet_of_Things)). Very often, this
-access is over untrusted or hostile networks. Data delivered over a clear text
-protocol, like HTTP, is insecure, untrustworthy, and trivially intercepted.
-Neither the user / user-agent nor the web server / application can trust that
-the data was not tampered with or snooped by some third party - that's a
-terrible situation for both users and web site operators!
-
-With so much of people's lives moving online, it’s imperative developers take
-steps to protect their sites' and users' data, which can even include the *mere
-usage* of a web site. By analyzing and correlating the sites and pages a user
-visits, observers like schools, ISPs, and governments can learn quite a bit
-about a user that the user would wish to keep confidential, such as a users'
-sexual orientation
-(<http://blogs.wsj.com/digits/2010/03/12/ftcs-privacy-worries-prompt-netflix-to-cancel-contest/>)
-or physical location
-(<http://www.theregister.co.uk/2009/05/21/geo_location_data/>).
-
-#### **TLS is too slow.**
-
-Historically, TLS used to have a significant performance on web applications.
-So, [istlsfastyet.com](http://istlsfastyet.com/)? (Spoiler: Yes!) Check out
-<https://istlsfastyet.com/> for more details and a performance checklist.
-
-#### TLS is too expensive.
-
-[The Let’s Encrypt project](https://letsencrypt.org/) offers free certificates.
-
-[SSLs.com offers certificates for a very low price](https://www.ssls.com/), as
-low as $5.
-
-[SSLmate.com is cheap and easy to use](https://sslmate.com/) — you can buy
-certificates from the command line.
-
-#### TLS is a privacy / security silver bullet.
-
-TLS does ==not== guarantee perfect privacy or solve all security problems.
-
-For example, when used to secure HTTP traffic (i.e. HTTPS), we’re piggybacking
-HTTP entirely on top of TLS. This means the entirety of the HTTP protocol can be
-encrypted (request URL, query parameters, headers, and cookies), however,
-because host IP addresses and port numbers are necessarily part of the
-underlying TCP/IP protocols, a third party can still infer these. Also, while
-you can’t infer the contents of the communication, you can infer the amount and
-duration of the communication. For specific applications, it’s been demonstrated
-that this can leak useful information for an attacker, and services have added
-padding to counter the timing or pattern analysis.
-
-The identity of the site you are visiting is still (unfortunately) pretty
-visible to passive eavesdroppers. For example, the IP addresses of client and
-server are shown in the clear on the network, and the hostname(s) of the sites
-you are visiting are transmitted in the clear in DNS requests, in the [Server
-Name Indication portion of a TLS
-handshake](http://en.wikipedia.org/wiki/Server_Name_Indication), and in the
-server's certificate(s).
-Also, since TLS is a transport protocol, attacks at other layers of the network
-stack remain. In particular, IP-level threats (e.g. spoofing, SYD floods, DDoS
-by data flood) are not protected and TLS doesn’t address common web application
-vulnerabilities, like cross-site scripting or cross-site request forgery.
-
-### Common Pitfalls
-
-#### Deploying TLS
-
-SSL Labs puts out a great [Deployment Best Practice
-Guide](https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices)
-that should help site operators avoid the most common deployment mistakes. You
-can also test your setup via <https://www.ssllabs.com/ssltest/>.
-
-#### Mixed Content (HTTP / HTTPS) Vulnerabilities
-
-A mixed content vulnerability refers to a page served over HTTPS that includes
-content served over HTTP, making the page vulnerable to MitM attacks. This is
-especially problematic when the HTTP resources are active content (e.g.
-Javascript, plug-in content, CSS, or iframes). To protect users, Chrome will
-block mixed-content iframes, Javascript, CSS and plug-in loads by default. So
-beyond the security risk, mixed content bugs may degrade your page for users in
-unintended ways.
-To fix mixed content issues, make sure that all the resources loaded by an HTTPS
-page are also sent over HTTPS. If the resources are available on the same
-domain, you can use hostname-relative URLs (e.g. &lt;img
-src="something.png"&gt;). You can also use scheme-relative URLs (e.g. &lt;img
-src="//example.com/something.png"&gt;) — the browser will use the same scheme as
-the enclosing page to load these subresources. If the server does not serve
-these resources over HTTPS, you may have to serve them from elsewhere or enable
-HTTPS on that server.
-
-You may also want to consider the
-[upgrade-insecure-requests](http://www.w3.org/TR/upgrade-insecure-requests/) CSP
-directive. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/education/tls/sha-1/index.md b/chromium/docs/website/site/Home/chromium-security/education/tls/sha-1/index.md
deleted file mode 100644
index 356c2570ec4..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/education/tls/sha-1/index.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/education
- - Education
-- - /Home/chromium-security/education/tls
- - TLS / SSL
-page_name: sha-1
-title: A further update on SHA-1 certificates in Chrome
----
-
-We’ve previously made
-[several](https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html)[
-announcements](https://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html)
-about Google Chrome's deprecation plans for SHA-1 certificates. This post
-provides an update on the final removal of support.
-
-The SHA-1 cryptographic hash algorithm first [showed signs of
-weakness](https://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html)
-over eleven years ago and [recent research](https://eprint.iacr.org/2015/967)
-points to the imminent possibility of attacks that could directly impact the
-integrity of the Web PKI. To protect users from such attacks, Chrome will stop
-trusting certificates that use the SHA-1 algorithm, and visiting a site using
-such a certificate will result in an interstitial warning.
-
-Release schedule
-
-We are planning to remove support for SHA-1 certificates in Chrome 56, which
-will be released to the stable channel [around the end of January
-2017](/developers/calendar). The removal will follow the [Chrome release
-process](/getting-involved/dev-channel), moving from Dev to Beta to Stable;
-there won't be a date-based change in behaviour.
-
-Website operators are urged [to check](https://www.ssllabs.com/ssltest/) for the
-use of SHA-1 certificates and immediately contact their CA for a SHA-256 based
-replacement if any are found.
-
-SHA-1 use in private PKIs
-
-Previous posts made a distinction between certificates which chain to a public
-CA and those which chain to a locally installed trust anchor, such as those of a
-private PKI within an enterprise. We recognise there might be rare cases where
-an enterprise wishes to make their own risk management decision to continue
-using SHA-1 certificates.
-
-Starting with [Chrome
-54](https://googlechromereleases.blogspot.com/2016/10/stable-channel-update-for-desktop.html)
-we provide the
-[EnableSha1ForLocalAnchors](/administrators/policy-list-3#EnableSha1ForLocalAnchors)[
-policy](https://support.google.com/chrome/a/answer/187202) that allows
-certificates which chain to a locally installed trust anchor to be used after
-support has otherwise been removed from Chrome. Features which[ require a secure
-origin](/Home/chromium-security/deprecating-powerful-features-on-insecure-origins),
-such as geolocation, will continue to work, and SHA-1 client certificates will
-still be presented to websites requesting client authentication, however pages
-will be displayed as “neutral, lacking security”. Without this policy set, SHA-1
-certificates that chain to locally installed roots will not be trusted starting
-with Chrome 57, which will be released to the stable channel in March 2017.
-
-Since this policy is intended only to allow additional time to complete the
-migration away from SHA-1, it will eventually be removed in the first Chrome
-release after January 1st 2019.
-
-As Chrome makes use of certificate validation libraries provided by the host OS
-when possible, this option will have no effect if the underlying cryptographic
-library disables support for SHA-1 certificates; at that point, they will be
-unconditionally blocked. We may also remove support before 2019 if there is a
-catastrophic cryptographic break of SHA-1. Enterprises are encouraged to make
-every effort to stop using SHA-1 certificates as soon as possible and to consult
-with their security team before enabling the policy. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/enamel/goals-for-the-origin-info-bubble/index.md b/chromium/docs/website/site/Home/chromium-security/enamel/goals-for-the-origin-info-bubble/index.md
deleted file mode 100644
index c82f324b470..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/enamel/goals-for-the-origin-info-bubble/index.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/enamel
- - Security UX
-page_name: goals-for-the-origin-info-bubble
-title: Goals For The Origin Info Bubble
----
-
-## Introduction
-
-This is the Origin Info Bubble (OIB):
-
-<img alt="pib.png"
-src="https://lh3.googleusercontent.com/Mer74TWIss5I4pOWvFO5ctkZMqgOXElTD5J6opl3IF1cE_oWe2xI2yRIXk4E8_odc6UsJWQ58N0klaWMcEnau1_GnGPSlFP6lFYUUm-5Jnqz-GPWXeJqJWXK4simmsgpN6U"
-height=523px; width=329px;>
-
-As you can see, it has a lot of stuff in it, with 2 tabs to hold 2 (arguably 3:
-site data, permissions, and connection state) broad categories of information
-and controls about what the origin is and what it can do.
-
-We are pretty sure the OIB does not show all and only the information and
-controls that users need to understand and control an origin.
-
-I believe the purpose of the OIB is to allow users to understand and control the
-origin. It was previously called the Page Info Bubble (PIB), but in this
-document I’ll use the more accurate name.
-
-Since the OIB is the primary UI surface for control of an origin’s power, it
-enables the increased appification of the web platform. It is thus very
-important that we make it readily understandable and usable. See also
-<https://code.google.com/p/chromium/issues/detail?id=421248>.
-
-## Possible Goals
-
-One can imagine the OIB serving a variety of purposes, including at least
-display or control of:
-
- Information about the permissions/capability grants/special powers an origin
- has
-
- Information about the transport security state of the origin
-
- Authenticated + confidential; partially authenticated + confidential;
- unauthenticated or broken authentication or not confidential
-
- If authenticated: the certificate chain
-
- Or a control to launch the certificate viewer or other
- developer/operator debugging information
-
- If authenticated: extra authentication information
-
- Certificate Transparency status
-
- Key pinning information
-
- Controls to set user-defined authentication policy:
-
- Accept this certificate
-
- Pin to the key(s) in this certificate chain
-
- …
-
- The origin’s name
-
- Historical context for the user’s past interaction with the origin
-
- # times visited in some period
-
- downloads
-
- bookmarks
-
- when or how often the origin has invoked powerful grants/APIs
-
- …
-
- Data the browser is storing locally for the origin
-
- cookies
-
- LocalStorage
-
- …
-
- Summary (storage quota, et c.)
-
- Processes the browser is running locally for the origin
-
- Service Workers
-
- Geofences
-
- Total/average/peak battery cost of this origin
-
- …
-
- Which extensions (if any) can access the origin
-
- Others? Surely I’m forgetting something.
-
-Obviously there’s no way we can really show/afford control of all that
-information. That is especially true on small screens, but even on a large
-screen it would be a crowded and overwhelming interface. (It already is.)
-Therefore, we have to pick the most important and contextually-relevant
-information and controls.
-
-We could and should choose what to show in the OIB based on context. For
-example, we could only show those grants that differ from the profile-wide
-defaults; we might never show certain marginal grants or content settings in the
-OIB; we might treat local storage quotas as a grant (iff the origin is about to
-exceed some profile-wide default); and so on.
-
-## Non-Goals
-
-It is a non-goal to show all possible information and controls about an origin
-in the OIB. We are assuming, probably correctly, that the OIB cannot be both
-complete and usable. Since the OIB is so important, we should trade off in favor
-of usability over completeness where there is a conflict.
-
-## Current Goals
-
-This section describes the current goals for Chrome on desktop platforms
-(including ChromeOS, but possibly not Athena). For information about the OIB on
-non-desktop platforms, see [Non-Desktop
-Platforms](https://docs.google.com/document/d/12PoBVo0D331RqnzVJwI8zbFU1hMs-ZcXcjqqwkG-6nc/edit#heading=h.fumazaednf88),
-below.
-
-### Show The Origin Name
-
-We should use the OIB to show the origin name in an unambiguous,
-human-meaningful way. (As described in [Presenting Origins To
-Users](http://www.chromium.org/Home/chromium-security/enamel).)
-
-For origins whose hostnames have many labels we should show at least the
-effective TLD + 1 label. (We call this “eTLD + 1”.) For example if the full
-hostname is “a.b.c.pants.shoes.socks.wrists.co.jp” the eTLD (as determined by
-the [Public Suffix List](https://publicsuffix.org/)) is co.jp; that + 1 label
-(“wrists”) yields “wrists.co.jp”. Although not technically exact —
-a.b.c.pants.shoes.socks.wrists.co.jp is distinct from
-a.b.c.skirts.shoes.socks.wrists.co.jp — eTLD + 1 strikes a reasonable balance
-between correctness and understandability.
-
-For origins whose hostnames are very long, due to a proliferation of labels or
-of extremely long labels, we should again the show eTLD + 1. If there is not
-room enough to show eTLD + 1, we should label the origin as possibly phishy
-and/or having broken authentication. (Rationale: Even if the authentication is
-perfectly good from a certificate or cryptographic perspective, it’s not good
-enough if we can’t show it to users on the screen.)
-
-### Show The Summarized Origin Security State
-
-We assume that only developers and operators are likely to be interested in the
-page-load’s complete security state.
-
-The complete security state of a page-load is:
-
- X.509 certificate chain;
-
- Certificate Transparency status;
-
- TLS and X.509 cryptographic parameters; and
-
- key pinning status.
-
-Since the OIB should be a primary UX surface for normal users, it should show
-only:
-
- a tri-state security indicator (“Good”: authenticated + confidential;
- “Dubious”: partially authenticated + confidential; “Bad”: unauthenticated or
- broken authentication or not confidential); and
-
- a control to launch a full view of the security state.
-
-The full view of the security state must show the complete security state as
-defined above. It may also afford users control over key pinning and HSTS policy
-(currently available only in chrome://net-internals/#hsts) and control over
-trust in invalid certificate chains (as becomes necessary when a user opts to
-proceed through a CERT_INVALID warning).
-
-### Afford Control Of The Origin’s Special Grants
-
-By special grants, I mean grants that the user has affirmatively changed from
-the profile-wide defaults.
-
-Note that if the profile-wide defaults change — because the user changed them in
-chrome://settings/content or some future equivalent interface — then previously
-“non-special” grants become effectively special, and we should consider showing
-them in the OIB. For example, in a fresh profile the default grant for
-geolocation is Ask. If a user visits maps.google.com and opts to Always give
-that origin full access to the geolocation API, maps.google.com now has a
-special grant. Assuming the user has not changed it,
-[www.bing.com](http://www.bing.com) has the default grant and we might not show
-it in the OIB. If the user later changes the default to always allow origins
-full access to the geolocation API, the special grant to maps.google.com becomes
-effectively non-special, and we might choose not to show it in the OIB. The
-default grant to [www.bing.com](http://www.bing.com) remains non-special (even
-though the actual grant has changed), and we might choose to continue not to
-show it in the OIB.
-
-Full control over all grants to the origin probably cannot fit in the OIB.
-Therefore it should be relegated to a secondary interface such as
-chrome://settings/content (or some future equivalent interface). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/enamel/index.md b/chromium/docs/website/site/Home/chromium-security/enamel/index.md
deleted file mode 100644
index 42eca1f574a..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/enamel/index.md
+++ /dev/null
@@ -1,181 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: enamel
-title: Security UX
----
-
-Online security is more than just eliminating buffer overflows from software.
-One of our biggest security challenges is helping people make safe decisions
-while they surf the web. Here are some of the things we're doing to make
-security on the web easier for everyone — both people who use browsers and web
-apps, and web app developers. Some of these points are discussed in more detail
-in [Improving Chrome’s Security
-Warnings](https://docs.google.com/presentation/d/16ygiQS0_5b9A4NwHxpcd6sW3b_Up81_qXU-XY86JHc4/edit?usp=sharing)
-by Adrienne Porter Felt.
-
-[TOC]
-
-## Anti-malware
-
-### Malicious Websites
-
-Malicious or compromised websites try to attack visitors. To protect people from
-these threats, Chrome uses [Safe
-Browsing](/developers/design-documents/safebrowsing) to identify attack
-websites. If Safe Browsing tells Chrome that a website is malicious, Chrome
-shows a full-screen warning. Despite the fact that our warnings are rarely
-wrong, people ignore the warnings nearly a fifth of the time. We are actively
-running experiments with the goal of decreasing how many people ignore the
-warnings.
-
-### Malware Downloads
-
-Shady websites also try to trick people into installing malicious programs on
-their computers. By default, Chrome blocks known malware downloads. Chrome also
-warns people about potentially dangerous files that have not been scanned; we
-are trying to improve this generic warning with new security measures. For
-example, we want to make it easier for people to view PDFs more safely without
-needing to show warnings about PDFs.
-
-## Passwords And Phishing
-
-Password management is hard. Sometimes people choose weak passwords, re-use
-passwords inappropriately, or type passwords into phishing websites. The browser
-currently offers people minimal assistance in choosing good passwords or knowing
-when to enter them. We're currently using [Safe Browsing to help warn people
-about phishing pages](https://support.google.com/chrome/answer/99020?hl=en), but
-we're also working on other ways to make authentication on the web easier and
-safer.
-
-## Website Authentication
-
-Website authentication is paramount to online security. We know that current
-HTTPS indicators and warnings are confusing, and they are often false positives.
-The browser’s lack of confidence about the authenticity of a given TLS
-connection forces it to offer people a choice that they are not likely to
-understand, so we're working on ways to improve website authentication and
-protect users from inadvertently visiting or interacting with sites they don't
-intend to. Here are some of the things we're currently working on:
-
-* [HTTP Strict Transport Security (HSTS)](/hsts) adoption and
- pre-loading
-* Developing a standard for [SSL certificate public key
- pinning](https://www.imperialviolet.org/2011/05/04/pinning.html)
-* SSL evangelism, support, and other odds n' ends (e.g. ["got TLS?"
- tech
- talk](https://docs.google.com/presentation/d/1G1286W5_VdsBBJo9PjQ6uN78djFupO-Bn4RUlFu3Tng/edit),
- [blocking HTTP basic
- auth](http://blog.chromium.org/2011/06/new-chromium-security-features-june.html))
-* Making the warning more understandable
-
-Read more about TLS support in Chromium on [our TLS education
-page](/Home/chromium-security/education/tls).
-
-## **Presenting Origins**
-
-The fundamental security boundary on the web is the
-*[origin](https://code.google.com/p/browsersec/wiki/Part2)*, defined as the
-tuple (*scheme*, *hostname*, *port*). For example, (https, www.example.com,
-443). We must surface this boundary to people during browsing, in
-permissions/capabilities dialogs, and so on, so that they can know whom they are
-talking to. In particular, it is important to note that unauthenticated origins
-(e.g. (http, www.example.com, 80)) are entirely observable and malleable by
-attackers who can control the network (often, even just a little bit of control
-is enough).
-
-Because people (including developers!) tend not to understand the concept of the
-origin, but do tend to understand the concept of the hostname, we'd like to
-simplify origin names when we can. Ideally we could reduce the origin name to
-just the much more understandable hostname. For example, we could elide the
-scheme or replace it with a meaningful icon, if doing so did not prevent people
-from understanding whether or not an origin is authenticated. And if the port is
-the default port for the given scheme, we can elide it, too.
-
-If the feature or behavior we are trying to protect is available *only* on
-authenticated origins — which we strongly suggest — you could leave off the
-scheme or the icon. Otherwise, it might be better to highlight the
-non-authenticated nature of the origin when presenting it.
-
-In addition, we strongly recommend that UIs clearly mark unauthenticated origins
-as such.
-
-A good utility function to use for presenting URLs in security decision contexts
-is url_formatter::FormatUrlForSecurityDisplay.
-
-### Eliding Origin Names And Hostnames
-
-[<img alt="image" src="/Home/chromium-security/enamel/origins.png" height=240
-width=320>](/Home/chromium-security/enamel/origins.png)
-
-The effective top-level domain (eTLD) of a hostname is the TLD as found in the
-[Public Suffix List](https://publicsuffix.org/) (PSL), which is not necessarily
-guaranteed to be a single label like "com". Some eTLDs found in the PSL have
-more than one label, e.g. .co.jp, and others are the names of web sites that
-give out subdomains for user content and code from many sources, like
-.appspot.com and .github.io. For many purposes, these multi-label names are
-effectively TLDs, hence the name.
-
-At a minimum, we would like to show users the eTLD + 1 label, e.g.
-pumpkins.co.jp, google.com, noodles.appspot.com, or example.org. Where possible,
-it is best to show the entire hostname, however. If the hostname is too long,
-and/or if it has too many labels underneath the eTLD, that may be a sign that it
-is a phishing host.
-
-Although domain name labels are limited to 63 octets and the entire name is
-limited to 255 octets (see <https://www.ietf.org/rfc/rfc1035.txt>, section
-2.3.4), on small screens or small windows on large screens, even eTLD + 1 might
-be too long. In such a case, we should elide from the left. for example,
-www.reallyannoying.goats.example.com should display as "...oats.example.com"
-instead of "www.reallyanno...".
-
-## Permissions
-
-The browser grants privileges to apps, extensions, and websites after asking the
-person for permission. In some cases, the browser also uses status indicators to
-indicate when an origin is accessing a granted permission. We currently don’t
-have quantitative data on how well these pieces of UI work, but we have
-anecdotal evidence suggesting they fail to capture people's attention and/or
-explain the situation. Thus, they aren't being totally effective at achieving
-their original purpose. This is what we're doing to improve things:
-
-* Creating experiments and collecting data to quantify how effective
- Chrome's permissions systems are
-* Designing new types of analyses to measure the threat of extensions,
- apps, and websites
-* Designing new ways to communicate permission information to end
- users
-
-[Goals For The Origin Info
-Bubble](/Home/chromium-security/enamel/goals-for-the-origin-info-bubble)
-discusses a way to make permissions easier for people to manage.
-
-## **Usability Measurement Tools**
-
-Calculate the effective contrast ratio of text on its background:
-<http://webaim.org/resources/contrastchecker/>
-
-Another contrast checking tool: [Contraster](https://gh.ada.is/contrast-widget/)
-
-Flesch-Kincaid (and other) readability calculator:
-<http://www.readability-score.com/>
-
-Simulate the effects of colorblindness:
-<http://www.etre.com/tools/colourblindsimulator/> and
-<http://www.color-blindness.com/coblis-color-blindness-simulator/>
-
-## **Documents**
-
-* [Chrome Security UX (Enamel) Public
- Folder](https://drive.google.com/open?id=0B6FmQe6bc6yVZ012REktU09NOEE&authuser=0)
- * [Chrome Security
- UI](https://docs.google.com/a/chromium.org/document/d/11-SXwzCGBlk8q1cNtb7peZjb2UjRPrKSFhOfZhTOz24/edit)
-* [Security guidelines for Chrome Extension & App API
- developers](https://docs.google.com/document/d/1RamP4-HJ7GAJY3yv2ju2cK50K9GhOsydJN6KIO81das/pub)
-
-If you are a Googler, you can access the folder of Google-internal Enamel
-documents at [go/enamel-folder](https://goto.google.com/enamel-folder) (using
-your corp account). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/enamel/origins.png.sha1 b/chromium/docs/website/site/Home/chromium-security/enamel/origins.png.sha1
deleted file mode 100644
index d2c870d728e..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/enamel/origins.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7692aba020ce591208f1a2a49ea45055a0af601b \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/enamel/permissions/index.md b/chromium/docs/website/site/Home/chromium-security/enamel/permissions/index.md
deleted file mode 100644
index 5c3735f75d8..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/enamel/permissions/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/enamel
- - Security UX
-page_name: permissions
-title: Permissions
----
-
-## Testing New Permissions
-
-It's important to test new permissions adequately to ensure they behave as
-expected and regressions are caught. Features that have permissions tend to be
-privacy or security sensitive and if there are circumstances where a malicious
-website can access the feature without adequate user approval it can have a
-particularly negative impact. Please see [Testing New
-Permissions](https://docs.google.com/a/chromium.org/document/d/1daQk9A05T0BcSMO9KQQN8x0TdT2a23KqAkS7maIUJT0/edit?usp=drive_web)
-for important test cases to consider when adding new permissions. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/enamel/restricting-iframe-permissions/index.md b/chromium/docs/website/site/Home/chromium-security/enamel/restricting-iframe-permissions/index.md
deleted file mode 100644
index a50a0e6cf92..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/enamel/restricting-iframe-permissions/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/enamel
- - Security UX
-page_name: restricting-iframe-permissions
-title: Restricting IFrame Permissions
----
-
diff --git a/chromium/docs/website/site/Home/chromium-security/extension-content-script-fetches/index.md b/chromium/docs/website/site/Home/chromium-security/extension-content-script-fetches/index.md
deleted file mode 100644
index 20d0bf4327e..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/extension-content-script-fetches/index.md
+++ /dev/null
@@ -1,352 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: extension-content-script-fetches
-title: Changes to Cross-Origin Requests in Chrome Extension Content Scripts
----
-
-*tl;dr: To improve security, cross-origin fetches will soon be disallowed from
-content scripts in Chrome Extensions. Such requests can be made from extension
-background pages instead, and relayed to content scripts when needed. **\[The
-document has been edited on 2020-09-17 to reflect that CORS-for-content-scripts
-has successfully launched in Chrome 85****.\]***
-
-## Overview
-
-When web pages request cross-origin data with
-[fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) or
-[XHR](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) APIs, the
-response is denied unless
-[CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) headers allow it.
-In contrast, extension content scripts have traditionally been able to [fetch
-cross-origin data](https://developer.chrome.com/apps/xhr) from any origins
-listed in their extension's
-[permissions](https://developer.chrome.com/extensions/declare_permissions),
-regardless of the origin that the content script is running within. As part of a
-broader [Extension Manifest
-V3](https://docs.google.com/document/d/1nPu6Wy4LWR66EFLeYInl3NzzhHzc-qnk4w4PX-0XMw8/edit?usp=sharing)
-effort to improve extension security, privacy, and performance, these
-cross-origin requests in content scripts will soon be disallowed. Instead,
-content scripts will be subject to the same request rules as the page they are
-running within. Extension pages, such as background pages, popups, or options
-pages, are unaffected by this change and will continue to be allowed to bypass
-CORS for cross-origin requests as they do today.
-
-Our data shows that most extensions will not be affected by this change.
-However, any content scripts that do need to make cross-origin requests can do
-so via an extension background page, which can relay the data to the content
-script. We have a migration plan below to help affected extension developers
-make the transition to the new model.
-
-## Problems with Cross-Origin Requests
-
-To prevent leaks of sensitive information, web pages are generally not allowed
-to fetch cross-origin data. Unless a valid CORS header is present on the
-response, the page's request will fail with an error like:
-
-> Access to fetch at 'https://another-site.com/' from origin
-> 'https://example.com' has been blocked by CORS policy: No
-> 'Access-Control-Allow-Origin' header is present on the requested resource. If
-> an opaque response serves your needs, set the request's mode to 'no-cors' to
-> fetch the resource with CORS disabled.
-
-Chrome has recently launched a new security feature called [Site
-Isolation](https://developers.google.com/web/updates/2018/07/site-isolation)
-which enforces this type of restriction in a more secure way. Specifically, Site
-Isolation not only blocks the response, but prevents the data from ever being
-delivered to the Chrome renderer process containing the web page, using a
-feature called [Cross-Origin Read
-Blocking](https://developers.google.com/web/updates/2018/07/site-isolation#corb)
-(CORB). This helps prevent the data from leaking even if a malicious web page
-were to attack a security bug in Chrome's renderer process, or if it tried to
-access the data in its process with a [Spectre
-attack](https://security.googleblog.com/2018/07/mitigating-spectre-with-site-isolation.html).
-
-Content scripts pose a challenge for Site Isolation, because they run in the
-same Chrome renderer process as the web page they operate on. This means that
-the renderer process must be allowed to fetch data from any origin for which the
-extension has permissions, which in many cases is *all* origins. In such cases,
-Site Isolation would have less effectiveness when content scripts are present,
-because a compromised renderer process could hijack the content scripts and
-request (and thus leak) any data from the origins listed in the extension.
-(Thankfully, this is not a problem for Spectre attacks, which cannot take
-control of content scripts. It is a problem if an attacker can exploit a
-security bug in Chrome's renderer process, though, allowing the attacker to
-issue arbitrary requests as if they came from the content script.)
-
-To mitigate these concerns, future versions of Chrome will limit content scripts
-to the same fetches that the page itself can perform. Content scripts can
-instead ask their background pages to fetch data from other origins on their
-behalf, where the request can be made from an extension process rather than a
-more easily exploitable renderer process.
-
-## Planned Restrictions
-
-As described above, content scripts will lose the ability to fetch cross-origin
-data from origins in their extension's permissions, and they will only be able
-to fetch data that the underlying page itself has access to. To fetch additional
-data, content scripts can send messages to their extension's background pages,
-which can relay data from sources that the extension author expects.
-
-This transition will occur in stages, to try to minimize disruption to extension
-developers.
-
-Stage #1: Remove ability to bypass CORB from content scripts
-
-**In Q1 2019**, Chrome removed the ability to make cross-origin requests in
-content scripts for new and previously unaffected extensions, while maintaining
-an "allowlist" of affected extensions that may continue to make such requests
-for the time being. This change started in Chrome 73.
-
-We continue to work with developers of extensions on the allowlist to migrate to
-the new method of requesting cross-origin data, to help them prepare for
-Extension Manifest V3. We remove such extensions from the allowlist as they
-migrate, helping to improve the security of Chrome and the effectiveness of Site
-Isolation against advanced attackers.
-
-Stage #2: Remove ability to bypass CORS from content scripts **\[edited on
-2020-09-17\]**
-
-In **Q2 2020**, Chrome removed the ability to bypass CORS in cross-origin
-requests from content scripts, subject to the same “allowlist” as above. This
-change started in Chrome 85.
-
-The changes means that cross-origin fetches initiated from content scripts will
-have an Origin request header with the page's origin, and the server has a
-chance to approve the request with a matching Access-Control-Allow-Origin
-response header.
-
-Extensions that were previously added to the “allowlist” will be unaffected by
-the changes in Chrome 85. However, the new CORS behavior for content scripts may
-actually make it easier for some extensions to move off of the allowlist, if
-their fetches would now be approved by the server with an
-Access-Control-Allow-Origin response header. We know this is the case for
-several extensions that were included on the allowlist.
-
-Stage #3: Deprecating and removing the “allowlist” **\[edited on 2020-09-17\]**
-
-\[edited on 2020-05-28\] **In October 2020**, we will publish the allowlist of
-extensions, to inform users of the security risks of using any extensions still
-on the list. We hope to shrink the list as quickly as possible, because using
-these extensions will weaken Chrome's defenses against cross-site attacks.
-Before publishing or deprecating the allowlist, we'll send an advance notice to
-the
-[chromium-extensions@](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-extensions)
-discussion list.
-
-\[added on 2020-09-17\] In Chrome 87 we have deprecated and removed the
-CORB/CORS allowlist. According to [the Chrome
-dashboard](https://chromiumdash.appspot.com/schedule), this Chrome release is
-tentatively planned to ship to the Beta channel around October 15th 2020 and to
-the Stable channel around November 17th 2020. Extensions that haven’t migrated
-to the new security model may be broken in Chrome 87 and above.
-
-## Recommended Developer Actions
-
-To prepare for Extension Manifest V3 and avoid being on the allowlist of
-extensions that pose a cross-site security risk, we recommend that affected
-extension developers take the following actions:
-
-### 1. Determine if Your Extension is Affected \[edited on 2020-03-09\]
-
-You can test whether your extension is affected by the planned CORB and CORS
-changes by running Chrome 81 or later (starting with version 81.0.4035.0) with
-the following [command line flags](/developers/how-tos/run-chromium-with-flags)
-to enable the planned behavior:
-
-> --force-empty-corb-allowlist
-> --enable-features=OutOfBlinkCors,CorbAllowlistAlsoAppliesToOorCors
-
-Alternatively (starting with version 85.0.4175.0) opt into the changes by
-setting chrome://flags/#cors-for-content-scripts to “Enabled” and
-chrome://flags/#force-empty-CORB-and-CORS-allowlist to “Enabled”:
-
-> [<img alt="image"
-> src="https://drive.google.com/uc?id=1xPpHGMmjgMOYDEZH1U02XvAxDHDPMwoc&export=download">](https://drive.google.com/file/d/1xPpHGMmjgMOYDEZH1U02XvAxDHDPMwoc/view?usp=drive_web)
-
-If your extension makes cross-origin fetches from content scripts, then your
-extension may be broken and you may observe one of the following errors in the
-DevTools console:
-
-> Cross-Origin Read Blocking (CORB) blocked cross-origin response &lt;URL&gt;
-> with MIME type &lt;type&gt;. See
-> https://www.chromestatus.com/feature/5629709824032768 for more details.
-
-**\[added on 2020-03-09\]**:
-
-> Access to fetch at 'https://another-site.com/' from origin
-> 'https://example.com' has been blocked by CORS policy: No
-> 'Access-Control-Allow-Origin' header is present on the requested resource. If
-> an opaque response serves your needs, set the request's mode to 'no-cors' to
-> fetch the resource with CORS disabled.
-
-If you see the errors above, you can verify whether the changes described on
-this page are the cause by temporarily disabling the planned behavior. (It is
-possible that the errors might appear for other reasons.) To test with the
-planned behavior disabled, run Chrome 81 or later (starting with version
-81.0.4035.0) with the following [command line
-flags](/developers/how-tos/run-chromium-with-flags):
-
-> --disable-features=CorbAllowlistAlsoAppliesToOorCors
-> --enable-features=OutOfBlinkCors
-
-### 2. Avoid Cross-Origin Fetches in Content Scripts
-
-When cross-origin fetches are needed and the server does not provide an
-Access-Control-Allow-Origin response header for the page's origin, perform them
-from the [extension background
-page](https://developer.chrome.com/extensions/background_pages) rather than in
-the content script. Relay the response to the content scripts as needed (e.g.,
-using [extension messaging
-APIs](https://developer.chrome.com/extensions/messaging)). For example:
-
-> **Old content script, making a cross-origin fetch:**
-
-> > var itemId = 12345;
-
-> > var url = "https://another-site.com/price-query?itemId=" +
-
-> > encodeURIComponent(request.itemId);
-
-> > fetch(url)
-
-> > .then(response =&gt; response.text())
-
-> > .then(text =&gt; parsePrice(text))
-
-> > .then(price =&gt; ...)
-
-> > .catch(error =&gt; ...)
-
-> **New content script, asking its background page to fetch the data instead:**
-
-> > chrome.runtime.sendMessage(
-
-> > {contentScriptQuery: "queryPrice", itemId: 12345},
-
-> > price =&gt; ...);
-
-> **New extension background page, fetching from a known URL and relaying
-> data:**
-
-> > chrome.runtime.onMessage.addListener(
-
-> > function(request, sender, sendResponse) {
-
-> > if (request.contentScriptQuery == "queryPrice") {
-
-> > var url = "https://another-site.com/price-query?itemId=" +
-
-> > encodeURIComponent(request.itemId);
-
-> > fetch(url)
-
-> > .then(response =&gt; response.text())
-
-> > .then(text =&gt; parsePrice(text))
-
-> > .then(price =&gt; sendResponse(price))
-
-> > .catch(error =&gt; ...)
-
-> > return true; // Will respond asynchronously.
-
-> > }
-
-> > });
-
-### 3. Limit Cross-Origin Requests in Background Pages
-
-If an extension's background page simply fetches and relays *any* URL of a
-content script's choice (effectively acting as an open proxy), then similar
-security problems occur. That is, a compromised renderer process can hijack the
-content script and ask the background page to fetch and relay sensitive URLs of
-the attacker's choosing. Instead, background pages should only fetch data from
-URLs the extension author intends, which is ideally a small set of URLs which
-does not put the user's sensitive data at risk.
-
-> **Good message example:**
-
-> {
-
-> contentScriptQuery: "queryPrice",
-
-> itemId: 12345
-
-> }
-
-> This approach limits which URLs can fetched in response to the message. Here,
-> only the itemId is provided by the content script that is sending the message,
-> and not the full URL.
-
-> **Bad message example:**
-
-> {
-
-> contentScriptQuery: "fetchUrl",
-
-> url: "https://example.com/any/path/or/site/allowed/here"
-
-> }
-
-> In this approach the content script may cause the background page to fetch any
-> URL. A malicious website may be able to forge such messages and trick the
-> extension to get access to any cross-origin resources.
-
-### 4. Keep in Touch if Needed \[edited on 2020-05-28\]
-
-We have reached out to developers whose extensions are on the allowlist.
-
-If your extension is on the allowlist and no longer needs to be, please [**file
-a bug
-here**](https://bugs.chromium.org/p/chromium/issues/entry?template=Defect+report+from+user&components=Internals%3ESandbox%3ESiteIsolation&blocking=846346&cc=lukasza@chromium.org&summary=Remove+extension+%3Cextension+id%3E+from+the+CORB+allowlist)
-to have it removed. You may verify that your extension no longer needs to be on
-the allowlist by testing that it continues to work after launching Chrome
-81.0.4035.0 or higher with the following [command line
-flags](/developers/how-tos/run-chromium-with-flags):
-
-> --force-empty-corb-allowlist
-> --enable-features=OutOfBlinkCors,CorbAllowlistAlsoAppliesToOorCors
-
-Alternatively (starting with version 85.0.4175.0) opt into the changes by
-setting chrome://flags/#cors-for-content-scripts to “Enabled” and
-chrome://flags/#force-empty-CORB-and-CORS-allowlist to “Enabled”:
-
-> [<img alt="image"
-> src="https://drive.google.com/uc?id=1xPpHGMmjgMOYDEZH1U02XvAxDHDPMwoc&export=download">](https://drive.google.com/file/d/1xPpHGMmjgMOYDEZH1U02XvAxDHDPMwoc/view?usp=drive_web)
-
-If your extension is not yet on the allowlist and still depends on cross-origin
-requests, these requests may stop working and you may observe the following
-errors in the DevTools console:
-
-> Cross-Origin Read Blocking (CORB) blocked cross-origin response &lt;URL&gt;
-> with MIME type &lt;type&gt;. See
-> https://www.chromestatus.com/feature/5629709824032768 for more details.
-
-or **\[added on 2020-03-09\]**:
-
-> Access to fetch at 'https://another-site.com/' from origin
-> 'https://example.com' has been blocked by CORS policy: No
-> 'Access-Control-Allow-Origin' header is present on the requested resource. If
-> an opaque response serves your needs, set the request's mode to 'no-cors' to
-> fetch the resource with CORS disabled.
-
-If this happens, please update your extension as described above.
-
-\[edited on 2019-09-21\] Under exceptional circumstances, we may still consider
-adding an extension to the allowlist, but we're now generally avoiding this when
-possible, because users of allowlisted extensions are vulnerable to additional
-security attacks. To report issues encountered during the Chrome 87 deprecation
-of the allowlist, please [open a Chromium
-bug](https://bugs.chromium.org/p/chromium/issues/entry?template=Defect+report+from+user&components=Internals%3ESandbox%3ESiteIsolation&blocking=846346&cc=lukasza@chromium.org&summary=CORB/CORS+allowlist+deprecation+in+Chrome+87).
-
-## Summary
-
-Removing cross-origin fetches from content scripts is an important step in
-improving the security of Chrome, since it helps prevent leaks of sensitive data
-even when Chrome's renderer process might be compromised. We apologize for the
-inconvenience of the migration, but we appreciate your help in keeping Chrome's
-users as secure as possible. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/guts/Chrome Security Architecture.png.sha1 b/chromium/docs/website/site/Home/chromium-security/guts/Chrome Security Architecture.png.sha1
deleted file mode 100644
index e6fdca50629..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/guts/Chrome Security Architecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-91c1746bc3bfb37095dd5910b56e1235ad155051 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/guts/index.md b/chromium/docs/website/site/Home/chromium-security/guts/index.md
deleted file mode 100644
index 0a720c54aeb..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/guts/index.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: guts
-title: Secure Architecture
----
-
-One of our [core security principles](/Home/chromium-security/core-principles)
-is, "Design for defense in depth." Some of the things we've done or are working
-on to live up to this principle include:
-
-## Background
-
-* <http://seclab.stanford.edu/websec/chromium/>
-* [A color-by-risk component diagram of
- Chrome](https://docs.google.com/a/chromium.org/drawings/d/1TuECFL9K7J5q5UePJLC-YH3satvb1RrjLRH-tW_VKeE/edit)
-
-## Sandboxing
-
-### Platform-specific sandboxing
-
-* [Chrome on Windows (sandbox) design and
- implementation](/developers/design-documents/sandbox) and the
- [Sandboxing FAQ (mostly Windows
- specific](/developers/design-documents/sandbox/Sandbox-FAQ))
-* [Chrome on Linux and Chrome OS (sandbox)
- overview](https://code.google.com/p/chromium/wiki/LinuxSandboxing)
- (including the most current [seccomp-bpf
- layer](http://blog.chromium.org/2012/11/a-safer-playground-for-your-linux-and.html))
- * [bpf_dsl
- presentation](https://drive.google.com/file/d/0B9LSc_-kpOQPVHhvcVBza3NWR0k/view?usp=sharing)
- (Sep 2014)
-* [Chrome on OSX (sandbox)
- overview](/developers/design-documents/sandbox/osx-sandboxing-design)
- and the [second-layer bootstrap
- sandbox](https://docs.google.com/a/chromium.org/document/d/108sr6gBxqdrnzVPsb_4_JbDyW1V4-DRQUC4R8YvM40M/edit#)
-
-### Plugin sandboxing
-
-* [Flash sandboxing
- (PPAPI)](http://blog.chromium.org/2012/08/the-road-to-safer-more-stable-and.html)
-
-### Site Isolation
-
-We're currently working on using Chrome's sandbox to isolate websites from each
-other via the [Site Isolation project](/Home/chromium-security/site-isolation),
-which will help to mitigate cross-site information leaks (among other threats)
-in the presence of a vulnerability in the renderer process.
-
-## Anti-Exploitation Technologies and Tactics
-
-* We use industry best practices
- [ASLR](http://en.wikipedia.org/wiki/Address_space_layout_randomization),
- [DEP](http://en.wikipedia.org/wiki/Data_Execution_Prevention), [JIT
- hardening](http://www.matasano.com/research/Attacking_Clientside_JIT_Compilers_Paper.pdf#page=24),
- and
- [SafeSEH](http://msdn.microsoft.com/en-us/library/9a89h429.aspx).
-* We block [out-of-date or unpopular
- plugins](http://support.google.com/chrome/bin/answer.py?hl=en&answer=1181003)
- by default and support work toward [NPAPI
- deprecation](http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html).
-* We implement memory hardening features, like [Binding
- Integrity](/Home/chromium-security/binding-integrity). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/hall-of-fame/index.md b/chromium/docs/website/site/Home/chromium-security/hall-of-fame/index.md
deleted file mode 100644
index 238536e7d1c..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/hall-of-fame/index.md
+++ /dev/null
@@ -1,1157 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: hall-of-fame
-title: Security Hall of Fame
----
-
-## The following bugs qualified for a Chromium Security Reward, or represent a win at our Pwnium competition. On behalf of our millions of users, we thank the named researchers for helping make Chromium safer.
-
-**This information is historical and isn't being updated**.
-
-* $60000 to Sergey Glazunov for [bug
- 117226](http://code.google.com/p/chromium/issues/detail?id=117226)
-* $60000 to PinkiePie for [bug
- 117620](http://code.google.com/p/chromium/issues/detail?id=117620)
-* $40000 to PinkiePie for [bug
- 181083](http://code.google.com/p/chromium/issues/detail?id=181083)
- and others
-* $31336 to Ralf-Philipp Weinmann for [bug 227181](http://code.google.com/p/chromium/issues/detail?id=227181) and others
-* $30000 to someone who wishes to remain anonymous
-* $30000 to someone who wishes to remain anonymous
-* $21500 to Andrey Labunets for [bug 252062](http://code.google.com/p/chromium/issues/detail?id=252062) and others
-* $10000 to miaubiz for [bug
- 116661](http://code.google.com/p/chromium/issues/detail?id=116661)
-* $10000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 116662](http://code.google.com/p/chromium/issues/detail?id=116662)
-* $10000 to Arthur Gerkis for [bug
- 116663](http://code.google.com/p/chromium/issues/detail?id=116663)
-* $10000 to Sergey Glazunov for [bug
- 143439](http://code.google.com/p/chromium/issues/detail?id=143439)
-* $10000 to miaubiz for [bug
- 157047](http://code.google.com/p/chromium/issues/detail?id=157047)
-* $10000 to Atte Kettunen for [bug
- 157048](http://code.google.com/p/chromium/issues/detail?id=157048)
-* $10000 to Christian Holler for [bug
- 157049](http://code.google.com/p/chromium/issues/detail?id=157049)
-* $7331 to PinkiePie for [bug
- 162835](http://code.google.com/p/chromium/issues/detail?id=162835)
-* $5000 to João Lucas Melo Brasio from [White Hat Hackers Consultoria
- de Segurança da Informação LTDA](http://www.whitehathackers.com.br/)
- for [bug
- 321940](http://code.google.com/p/chromium/issues/detail?id=321940)
- and others
-* $4000 + $500 to Sergey Glazunov for [bug
- 143437](http://code.google.com/p/chromium/issues/detail?id=143437)
-* $3133.7 to Atte Kettunen for bug 179522
-* $3133.7 to Atte Kettunen for bug 147499
-* $3133.7 to Collin Payne for [bug
- 242762](https://code.google.com/p/chromium/issues/detail?id=242762)
-* $3133.7 to Collin Payne for [bug
- 244746](https://code.google.com/p/chromium/issues/detail?id=244746)
-* $3133.7 to Sergey Glazunov for [bug
- 68666](http://code.google.com/p/chromium/issues/detail?id=68666)
-* $3133.7 to Sergey Glazunov for [bug
- 83275](http://code.google.com/p/chromium/issues/detail?id=83275)
-* $3133.7 to miaubiz for [bug
- 88944](http://code.google.com/p/chromium/issues/detail?id=88944)
-* $3133.7 to Chamal de Silva for [bug
- 107182](http://code.google.com/p/chromium/issues/detail?id=107182)
-* $3133.7 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 108071](http://code.google.com/p/chromium/issues/detail?id=108071)
-* $3133.7 to Arthur Gerkis for [bug
- 128178](http://code.google.com/p/chromium/issues/detail?id=128178)
-* $3133.7 to Arthur Gerkis for [bug
- 135043](http://code.google.com/p/chromium/issues/detail?id=135043)
-* $3133.7 to miaubiz for [bug
- 141901](http://code.google.com/p/chromium/issues/detail?id=141901)
-* $2000 + $500 to Sergey Glazunov for [bug
- 98053](http://code.google.com/p/chromium/issues/detail?id=98053)
-* $2000 + $500 to Sergey Glazunov for [bug
- 99512](http://code.google.com/p/chromium/issues/detail?id=99512)
-* $2000 + $500 to Sergey Glazunov for [bug
- 99750](http://code.google.com/p/chromium/issues/detail?id=99750)
-* $2337 to Sergey Glazunov for [bug
- 93906](http://code.google.com/p/chromium/issues/detail?id=93906)
-* $2337 to Sergey Glazunov for [bug
- 96047](http://code.google.com/p/chromium/issues/detail?id=96047)
-* $2337 to Sergey Glazunov for [bug
- 96885](http://code.google.com/p/chromium/issues/detail?id=96885)
-* $2000 to Atte Kettunen for bug 279277
-* $2000 to Atte Kettunen for bug 265838
-* $2000 to Sergey Glazunov for [bug
- 93416](http://code.google.com/p/chromium/issues/detail?id=93416)
-* $2000 to Sergey Glazunov for [bug
- 95671](http://code.google.com/p/chromium/issues/detail?id=95671)
-* $2000 to Daniel Divricean for [bug
- 93416](http://code.google.com/p/chromium/issues/detail?id=93416)
-* $2000 to Sergey Glazunov for [bug
- 117550](http://code.google.com/p/chromium/issues/detail?id=117550)
-* $2000 to Chamal de Silva for [bug
- 139814](http://code.google.com/p/chromium/issues/detail?id=139814)
-* $2000 to Christian Schneider for [bug
- 380885](https://bugs.chromium.org/p/chromium/issues/detail?id=380885)
- ([writeup](https://christian-schneider.net/ChromeSopBypassWithSvg.html#main))
-* $1500 to Atte Kettunen for bug 150729
-* $1337 to Sergey Glazunov for [bug
- 35724](http://code.google.com/p/chromium/issues/detail?id=35724)
-* $1337 to Sergey Glazunov for [bug
- 45400](http://code.google.com/p/chromium/issues/detail?id=45400)
-* $1337 to Sergey Glazunov for [bug
- 50553](http://code.google.com/p/chromium/issues/detail?id=50553)
-* $1337 to Keith Campbell for [bug
- 51630](http://code.google.com/p/chromium/issues/detail?id=51630)
-* $1337 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 59036](http://code.google.com/p/chromium/issues/detail?id=59036)
-* $1337 to Sergey Glazunov for [bug
- 65764](http://code.google.com/p/chromium/issues/detail?id=65764)
-* $1337 to Sergey Glazunov for [bug
- 70165](http://code.google.com/p/chromium/issues/detail?id=70165)
-* $1337 to Daniel Divricean for [bug
- 69187](http://code.google.com/p/chromium/issues/detail?id=69187)
-* $1337 to Daniel Divricean for [bug
- 70877](http://code.google.com/p/chromium/issues/detail?id=70877)
-* $1337 to Vincenzo Iozzo, Ralf Philipp Weinmann and Willem Pinckaers,
- through ZDI, for [bug
- 75712](http://code.google.com/p/chromium/issues/detail?id=75712)
-* $1337 to kuzzcc for [bug
- 77026](http://code.google.com/p/chromium/issues/detail?id=77026)
-* $1337 to Michael Braithwaite of Turbulenz Limited for [bug
- 89836](http://code.google.com/p/chromium/issues/detail?id=89836)
-* $1337 to miaubiz for [bug
- 100059](http://code.google.com/p/chromium/issues/detail?id=100059)
-* $1000 + $1000 to Sergey Glazunov for [bug
- 73196](http://code.google.com/p/chromium/issues/detail?id=73196)
-* $1000 + $1000 to Sergey Glazunov for [bug
- 73595](http://code.google.com/p/chromium/issues/detail?id=73595)
-* $1000 + $1000 to Sergey Glazunov for [bug
- 74991](http://code.google.com/p/chromium/issues/detail?id=74991)
-* $1000 + $1000 to Sergey Glazunov for [bug
- 77463](http://code.google.com/p/chromium/issues/detail?id=77463)
-* $1000 + $500 to Sergey Glazunov for [bug
- 73746](http://code.google.com/p/chromium/issues/detail?id=73746)
-* $1000 + $500 to Sergey Glazunov for [bug
- 74562](http://code.google.com/p/chromium/issues/detail?id=74562)
-* $1000 + $500 to Sergey Glazunov for [bug
- 75170](http://code.google.com/p/chromium/issues/detail?id=75170)
-* $1000 + $500 to Sergey Glazunov for [bug
- 79199](http://code.google.com/p/chromium/issues/detail?id=79199)
-* $1000 + $500 to Sergey Glazunov for [bug
- 89520](http://code.google.com/p/chromium/issues/detail?id=89520)
-* $1000 + $500 to Sergey Glazunov for [bug
- 90222](http://code.google.com/p/chromium/issues/detail?id=90222)
-* $1000 + $500 to Sergey Glazunov for [bug
- 91598](http://code.google.com/p/chromium/issues/detail?id=91598)
-* $1000 + $500 to Sergey Glazunov for [bug
- 97451](http://code.google.com/p/chromium/issues/detail?id=97451)
-* $1000 + $500 to Sergey Glazunov for [bug
- 97520](http://code.google.com/p/chromium/issues/detail?id=97520)
-* $1000 + $500 to Sergey Glazunov for [bug
- 97615](http://code.google.com/p/chromium/issues/detail?id=97615)
-* $1000 + $500 to Sergey Glazunov for [bug
- 97784](http://code.google.com/p/chromium/issues/detail?id=97784)
-* $1000 + $500 to Sergey Glazunov for [bug
- 98407](http://code.google.com/p/chromium/issues/detail?id=98407)
-* $1000 + $500 to Chamal de Silva for [bug
- 171951](https://code.google.com/p/chromium/issues/detail?id=171951)
-* $1000 to Atte Kettunen for bug 235733
-* $1000 to Atte Kettunen for bug 292422
-* $1000 to Atte Kettunen for bug 271939
-* $1000 to Atte Kettunen for bug 223238
-* $1000 to Atte Kettunen for bug 172926
-* $1000 to Atte Kettunen for bug 172342
-* $1000 to Atte Kettunen for bug 172331
-* $1000 to Atte Kettunen for bug 172243
-* $1000 to Atte Kettunen for bug 168768
-* $1000 to Atte Kettunen for bug 162551
-* $1000 to Atte Kettunen for bug 162494
-* $1000 to Atte Kettunen for bug 161077
-* $1000 to Atte Kettunen for bug 159338
-* $1000 to Atte Kettunen for bug 156231
-* $1000 to Atte Kettunen for bug 154055
-* $1000 to Atte Kettunen for bug 152707
-* $1000 to Atte Kettunen for bug 151008
-* $1000 to Atte Kettunen for bug 138208
-* $1000 to Atte Kettunen for bug 133571
-* $1000 to Atte Kettunen for bug 133214
-* $1000 to Atte Kettunen for bug 130240
-* $1000 to Tokuji Akamine for [bug
- 30660](http://code.google.com/p/chromium/issues/detail?id=30660)
-* $1000 to kuzzcc for [bug
- 37383](http://code.google.com/p/chromium/issues/detail?id=37383)
-* $1000 to Jordi Chancel for [bug
- 40445](http://code.google.com/p/chromium/issues/detail?id=40445)
-* $1000 to Sergey Glazunov for [bug
- 39985](http://code.google.com/p/chromium/issues/detail?id=39985)
-* $1000 to Sergey Glazunov for [bug
- 39047](http://code.google.com/p/chromium/issues/detail?id=39047)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 45983](http://code.google.com/p/chromium/issues/detail?id=45983)
-* $1000 to Mike Taylor for [bug
- 49964](http://code.google.com/p/chromium/issues/detail?id=49964)
-* $1000 to Sergey Glazunov for [bug
- 50515](http://code.google.com/p/chromium/issues/detail?id=50515)
-* $1000 to Sergey Glazunov for [bug
- 51835](http://code.google.com/p/chromium/issues/detail?id=51835)
-* $1000 to kuzzcc for [bug
- 51654](http://code.google.com/p/chromium/issues/detail?id=51654)
-* $1000 to kuzzcc for [bug
- 51670](http://code.google.com/p/chromium/issues/detail?id=51670)
-* $1000 to Sergey Glazunov for [bug
- 48437](http://code.google.com/p/chromium/issues/detail?id=48437)
-* $1000 to kuzzcc for [bug
- 52204](http://code.google.com/p/chromium/issues/detail?id=52204)
-* $1000 to Sergey Glazunov for [bug
- 50386](http://code.google.com/p/chromium/issues/detail?id=50386)
-* $1000 to Ashutosh Mehra and Vineet Batra of the Adobe Reader Sandbox
- Team for [bug
- 52682](http://code.google.com/p/chromium/issues/detail?id=52682)
-* $1000 to kuzzcc for [bug
- 50712](http://code.google.com/p/chromium/issues/detail?id=50712)
-* $1000 to Stefano Di Paola of MindedSecurity for [bug
- 55350](http://code.google.com/p/chromium/issues/detail?id=55350)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 54691](http://code.google.com/p/chromium/issues/detail?id=54691)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 56760](http://code.google.com/p/chromium/issues/detail?id=56760)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 61338](http://code.google.com/p/chromium/issues/detail?id=61338)
-* $1000 to wushi of team509 for [bug
- 55257](http://code.google.com/p/chromium/issues/detail?id=55257)
-* $1000 to kuzzcc for [bug
- 58657](http://code.google.com/p/chromium/issues/detail?id=58657)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 59320](http://code.google.com/p/chromium/issues/detail?id=59320)
-* $1000 to Christoph Diehl for [bug
- 60055](http://code.google.com/p/chromium/issues/detail?id=60055)
-* $1000 to wushi of team509 for [bug
- 60688](http://code.google.com/p/chromium/issues/detail?id=60688)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 62623](http://code.google.com/p/chromium/issues/detail?id=62623)
-* $1000 to miaubiz for [bug
- 62127](http://code.google.com/p/chromium/issues/detail?id=62127)
-* $1000 to Sławomir Błażek for [bug
- 62401](http://code.google.com/p/chromium/issues/detail?id=62401)
-* $1000 to Chris Rohlf for [bug
- 63866](http://code.google.com/p/chromium/issues/detail?id=63866)
-* $1000 to Sergey Glazunov for [bug
- 64959](http://code.google.com/p/chromium/issues/detail?id=64959)
-* $1000 to Sławomir Błażek for [bug
- 64945](http://code.google.com/p/chromium/issues/detail?id=64945)
-* $1000 to Sergey Glazunov for [bug
- 66560](http://code.google.com/p/chromium/issues/detail?id=66560)
-* $1000 to Jared Allar of [CERT](http://www.cert.org/) for [bug
- 67208](http://code.google.com/p/chromium/issues/detail?id=67208)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 67303](http://code.google.com/p/chromium/issues/detail?id=67303)
-* $1000 to kuzzcc for [bug
- 67393](http://code.google.com/p/chromium/issues/detail?id=67393)
-* $1000 to David Warren of [CERT](http://www.cert.org/) for [bug
- 68115](http://code.google.com/p/chromium/issues/detail?id=68115)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 68170](http://code.google.com/p/chromium/issues/detail?id=68170)
-* $1000 to Sergey Glazunov for [bug
- 68178](http://code.google.com/p/chromium/issues/detail?id=68178)
-* $1000 to Sergey Glazunov for [bug
- 68181](http://code.google.com/p/chromium/issues/detail?id=68181)
-* $1000 to Martin Barbella for [bug
- 68439](http://code.google.com/p/chromium/issues/detail?id=68439)
-* $1000 to Sergey Glazunov for [bug
- 68558](http://code.google.com/p/chromium/issues/detail?id=68558)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 63248](http://code.google.com/p/chromium/issues/detail?id=63248)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 55831](http://code.google.com/p/chromium/issues/detail?id=55831)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 64051](http://code.google.com/p/chromium/issues/detail?id=64051)
-* $1000 to Sergey Glazunov for [bug
- 65577](http://code.google.com/p/chromium/issues/detail?id=65577)
-* $1000 to Sergey Glazunov for [bug
- 68641](http://code.google.com/p/chromium/issues/detail?id=68641)
-* $1000 to miaubiz for [bug
- 68120](http://code.google.com/p/chromium/issues/detail?id=68120)
-* $1000 to Martin Barbella for [bug
- 69556](http://code.google.com/p/chromium/issues/detail?id=69556)
-* $1000 to David Warren of [CERT](http://www.cert.org/) for [bug
- 70456](http://code.google.com/p/chromium/issues/detail?id=70456)
-* $1000 to Jordi Chancel for [bug
- 54262](http://code.google.com/p/chromium/issues/detail?id=54262)
-* $1000 to Sergey Glazunov for [bug
- 68263](http://code.google.com/p/chromium/issues/detail?id=68263)
-* $1000 to Sergey Glazunov for [bug
- 68741](http://code.google.com/p/chromium/issues/detail?id=68741)
-* $1000 to Sławomir Błażek for [bug
- 70244](http://code.google.com/p/chromium/issues/detail?id=70244)
-* $1000 to Martin Barbella for [bug
- 71114](http://code.google.com/p/chromium/issues/detail?id=71114)
-* $1000 to Martin Barbella for [bug
- 71115](http://code.google.com/p/chromium/issues/detail?id=71115)
-* $1000 to miaubiz for [bug
- 71296](http://code.google.com/p/chromium/issues/detail?id=71296)
-* $1000 to wushi of team509 for [bug
- 71386](http://code.google.com/p/chromium/issues/detail?id=71386)
-* $1000 to wushi of team509 for [bug
- 71388](http://code.google.com/p/chromium/issues/detail?id=71388)
-* $1000 to Sergey Glazunov for [bug
- 71595](http://code.google.com/p/chromium/issues/detail?id=71595)
-* $1000 to miaubiz for [bug
- 71855](http://code.google.com/p/chromium/issues/detail?id=71855)
-* $1000 to Chamal de Silva for [bug
- 72437](http://code.google.com/p/chromium/issues/detail?id=72437)
-* $1000 to Martin Barbella for [bug
- 73235](http://code.google.com/p/chromium/issues/detail?id=73235)
-* $1000 to Martin Barbella for [bug
- 70027](http://code.google.com/p/chromium/issues/detail?id=70027)
-* $1000 to Sergey Glazunov for [bug
- 70442](http://code.google.com/p/chromium/issues/detail?id=70442)
-* $1000 to miaubiz for [bug
- 71763](http://code.google.com/p/chromium/issues/detail?id=71763)
-* $1000 to Martin Barbella for [bug
- 72028](http://code.google.com/p/chromium/issues/detail?id=72028)
-* $1000 to Sergey Glazunov for [bug
- 73066](http://code.google.com/p/chromium/issues/detail?id=73066)
-* $1000 to miaubiz for [bug
- 73134](http://code.google.com/p/chromium/issues/detail?id=73134)
-* $1000 to Sergey Glazunov for [bug
- 74030](http://code.google.com/p/chromium/issues/detail?id=74030)
-* $1000 to Christian Holler for [bug
- 74662](http://code.google.com/p/chromium/issues/detail?id=74662)
-* $1000 to Christian Holler for [bug
- 74675](http://code.google.com/p/chromium/issues/detail?id=74675)
-* $1000 to Sławomir Błażek for [bug
- 73216](http://code.google.com/p/chromium/issues/detail?id=73216)
-* $1000 to Christian Holler for [bug
- 74660](http://code.google.com/p/chromium/issues/detail?id=74660)
-* $1000 to Christian Holler for [bug
- 74665](http://code.google.com/p/chromium/issues/detail?id=74665)
-* $1000 to Christian Holler for [bug
- 74666](http://code.google.com/p/chromium/issues/detail?id=74666)
-* $1000 to Christian Holler for [bug
- 74669](http://code.google.com/p/chromium/issues/detail?id=74669)
-* $1000 to Christian Holler for [bug
- 74671](http://code.google.com/p/chromium/issues/detail?id=74671)
-* $1000 to Christian Holler for [bug
- 74672](http://code.google.com/p/chromium/issues/detail?id=74672)
-* $1000 to Christian Holler for [bug
- 74673](http://code.google.com/p/chromium/issues/detail?id=74673)
-* $1000 to Christian Holler for [bug
- 74678](http://code.google.com/p/chromium/issues/detail?id=74678)
-* $1000 to Christoph Diehl for [bug
- 78524](http://code.google.com/p/chromium/issues/detail?id=78524)
-* $1000 to miaubiz for [bug
- 73526](http://code.google.com/p/chromium/issues/detail?id=73526)
-* $1000 to kuzzcc for [bug
- 74653](http://code.google.com/p/chromium/issues/detail?id=74653)
-* $1000 to Jose A. Vazquez for [bug
- 75186](http://code.google.com/p/chromium/issues/detail?id=75186)
-* $1000 to Sergey Glazunov for [bug
- 75801](http://code.google.com/p/chromium/issues/detail?id=75801)
-* $1000 to Martin Barbella for [bug
- 76001](http://code.google.com/p/chromium/issues/detail?id=76001)
-* $1000 to kuzzcc for [bug
- 76666](http://code.google.com/p/chromium/issues/detail?id=76666)
-* $1000 to kuzzcc for [bug
- 77507](http://code.google.com/p/chromium/issues/detail?id=77507)
-* $1000 to kuzzcc for [bug
- 78031](http://code.google.com/p/chromium/issues/detail?id=78031)
-* $1000 to miaubiz for [bug
- 76966](http://code.google.com/p/chromium/issues/detail?id=76966)
-* $1000 to wushi of team509 for [bug
- 77130](http://code.google.com/p/chromium/issues/detail?id=77130)
-* $1000 to Marek Majkowski for [bug
- 77346](http://code.google.com/p/chromium/issues/detail?id=77346)
-* $1000 to miaubiz for [bug
- 72340](http://code.google.com/p/chromium/issues/detail?id=72340)
-* $1000 to miaubiz for [bug
- 78071](http://code.google.com/p/chromium/issues/detail?id=78071)
-* $1000 to Christian Holler for [bug
- 78270](http://code.google.com/p/chromium/issues/detail?id=78270)
-* $1000 to Sławomir Błażek for [bug
- 76059](http://code.google.com/p/chromium/issues/detail?id=76059)
-* $1000 to Martin Barbella for [bug
- 72387](http://code.google.com/p/chromium/issues/detail?id=72387)
-* $1000 to miaubiz for [bug
- 73962](http://code.google.com/p/chromium/issues/detail?id=73962)
-* $1000 to miaubiz for [bug
- 79746](http://code.google.com/p/chromium/issues/detail?id=79746)
-* $1000 to miaubiz for [bug
- 81949](http://code.google.com/p/chromium/issues/detail?id=81949)
-* $1000 to Vladislavas Jarmalis for [bug
- 83010](http://code.google.com/p/chromium/issues/detail?id=83010)
-* $1000 to Sergey Glazunov for [bug
- 83743](http://code.google.com/p/chromium/issues/detail?id=83743)
-* $1000 to Martin Barbella for [bug
- 84452](http://code.google.com/p/chromium/issues/detail?id=84452)
-* $1000 to Martin Barbella for [bug
- 82546](http://code.google.com/p/chromium/issues/detail?id=82546)
-* $1000 to Christian Holler for [bug
- 84234](http://code.google.com/p/chromium/issues/detail?id=84234)
-* $1000 to Philippe Arteau for [bug
- 77493](http://code.google.com/p/chromium/issues/detail?id=77493)
-* $1000 to miaubiz for [bug
- 84355](http://code.google.com/p/chromium/issues/detail?id=84355)
-* $1000 to miaubiz for [bug
- 85003](http://code.google.com/p/chromium/issues/detail?id=85003)
-* $1000 to miaubiz for [bug
- 85211](http://code.google.com/p/chromium/issues/detail?id=85211)
-* $1000 to miaubiz for [bug
- 85418](http://code.google.com/p/chromium/issues/detail?id=85418)
-* $1000 to Chamal de Silva for [bug
- 88850](http://code.google.com/p/chromium/issues/detail?id=88850)
-* $1000 to the Microsoft Java Team and Microsoft Vulnerability
- Research (MSVR) for [bug
- 88093](http://code.google.com/p/chromium/issues/detail?id=88093)
-* $1000 to miaubiz for [bug
- 78841](http://code.google.com/p/chromium/issues/detail?id=78841)
-* $1000 to Martin Barbella for [bug
- 78841](http://code.google.com/p/chromium/issues/detail?id=78841)
-* $1000 to miaubiz for [bug
- 86502](http://code.google.com/p/chromium/issues/detail?id=86502)
-* $1000 to miaubiz for [bug
- 87148](http://code.google.com/p/chromium/issues/detail?id=87148)
-* $1000 to miaubiz for [bug
- 87227](http://code.google.com/p/chromium/issues/detail?id=87227)
-* $1000 to miaubiz for [bug
- 87729](http://code.google.com/p/chromium/issues/detail?id=87729)
-* $1000 to miaubiz for [bug
- 87925](http://code.google.com/p/chromium/issues/detail?id=87925)
-* $1000 to Christian Holler for [bug
- 88591](http://code.google.com/p/chromium/issues/detail?id=88591)
-* $1000 to miaubiz for [bug
- 88846](http://code.google.com/p/chromium/issues/detail?id=88846)
-* $1000 to Martin Barbella for [bug
- 88889](http://code.google.com/p/chromium/issues/detail?id=88889)
-* $1000 to Vladimir Vorontsov, [ONsec company](http://onsec.ru) for
- [bug
- 72492](http://code.google.com/p/chromium/issues/detail?id=72492)
-* $1000 to miaubiz for [bug
- 88216](http://code.google.com/p/chromium/issues/detail?id=88216)
-* $1000 to Sergey Glazunov for [bug
- 87453](http://code.google.com/p/chromium/issues/detail?id=87453)
-* $1000 to miaubiz for [bug
- 90668](http://code.google.com/p/chromium/issues/detail?id=90668)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 91665](http://code.google.com/p/chromium/issues/detail?id=91665)
-* $1000 to Arthur Gerkis for [bug
- 89219](http://code.google.com/p/chromium/issues/detail?id=89219)
-* $1000 to miaubiz for [bug
- 89330](http://code.google.com/p/chromium/issues/detail?id=89330)
-* $1000 to Sławomir Błażek for [bug
- 92651](http://code.google.com/p/chromium/issues/detail?id=92651)
-* $1000 to Arthur Gerkis for [bug
- 92959](http://code.google.com/p/chromium/issues/detail?id=92959)
-* $1000 to miaubiz for [bug
- 93420](http://code.google.com/p/chromium/issues/detail?id=93420)
-* $1000 to miaubiz for [bug
- 93587](http://code.google.com/p/chromium/issues/detail?id=93587)
-* $1000 to Christian Holler for [bug
- 95920](http://code.google.com/p/chromium/issues/detail?id=95920)
-* $1000 to miaubiz for [bug
- 93788](http://code.google.com/p/chromium/issues/detail?id=93788)
-* $1000 to miaubiz for [bug
- 95072](http://code.google.com/p/chromium/issues/detail?id=95072)
-* $1000 to miaubiz for [bug
- 95672](http://code.google.com/p/chromium/issues/detail?id=95672)
-* $1000 to Christian Holler for [bug
- 98773](http://code.google.com/p/chromium/issues/detail?id=98773)
-* $1000 to Christian Holler for [bug
- 99167](http://code.google.com/p/chromium/issues/detail?id=99167)
-* $1000 to miaubiz for [bug
- 97599](http://code.google.com/p/chromium/issues/detail?id=97599)
-* $1000 to miaubiz for [bug
- 98064](http://code.google.com/p/chromium/issues/detail?id=98064)
-* $1000 to miaubiz for [bug
- 98556](http://code.google.com/p/chromium/issues/detail?id=98556)
-* $1000 to miaubiz for [bug
- 99294](http://code.google.com/p/chromium/issues/detail?id=99294)
-* $1000 to miaubiz for [bug
- 99880](http://code.google.com/p/chromium/issues/detail?id=99880)
-* $1000 to miaubiz for [bug
- 96902](http://code.google.com/p/chromium/issues/detail?id=96902)
-* $1000 to miaubiz for [bug
- 99138](http://code.google.com/p/chromium/issues/detail?id=99138)
-* $1000 x2 to miaubiz for [bug
- 99211](http://code.google.com/p/chromium/issues/detail?id=99211)
-* $1000 to miaubiz for [bug
- 100464](http://code.google.com/p/chromium/issues/detail?id=100464)
-* $1000 to Sławomir Błażek for [bug
- 97092](http://code.google.com/p/chromium/issues/detail?id=97092)
-* $1000 to kuzzcc for [bug
- 62925](http://code.google.com/p/chromium/issues/detail?id=62925)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 101458](http://code.google.com/p/chromium/issues/detail?id=101458)
-* $1000 to Christian Holler for [bug
- 103259](http://code.google.com/p/chromium/issues/detail?id=103259)
-* $1000 to miaubiz for [bug
- 103058](http://code.google.com/p/chromium/issues/detail?id=103058)
-* $1000 to miaubiz for [bug
- 102810](http://code.google.com/p/chromium/issues/detail?id=102810)
-* $1000 to miaubiz for [bug
- 102628](http://code.google.com/p/chromium/issues/detail?id=102628)
-* $1000 to Arthur Gerkis for [bug
- 102359](http://code.google.com/p/chromium/issues/detail?id=102359)
-* $1000 to Arthur Gerkis for [bug
- 103921](http://code.google.com/p/chromium/issues/detail?id=103921)
-* $1000 to Sławomir Błażek for [bug
- 104011](http://code.google.com/p/chromium/issues/detail?id=104011)
-* $1000 to Sławomir Błażek for [bug
- 104859](http://code.google.com/p/chromium/issues/detail?id=104859)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 104056](http://code.google.com/p/chromium/issues/detail?id=104056)
-* $1000 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 103239](http://code.google.com/p/chromium/issues/detail?id=103239)
-* $1000 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 104529](http://code.google.com/p/chromium/issues/detail?id=104529)
-* $1000 to Luka Treiber of ACROS Security for [bug
- 99016](http://code.google.com/p/chromium/issues/detail?id=99016)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 106441](http://code.google.com/p/chromium/issues/detail?id=106441)
-* $1000 to Shawn Goertzen for [bug
- 108871](http://code.google.com/p/chromium/issues/detail?id=108871)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 109716](http://code.google.com/p/chromium/issues/detail?id=109716)
-* $1000 to Arthur Gerkis for [bug
- 109743](http://code.google.com/p/chromium/issues/detail?id=109743)
-* $1000 to Arthur Gerkis for [bug
- 110112](http://code.google.com/p/chromium/issues/detail?id=110112)
-* $1000 to Arthur Gerkis for [bug
- 110374](http://code.google.com/p/chromium/issues/detail?id=110374)
-* $1000 x2 to miaubiz for [bug
- 105459](http://code.google.com/p/chromium/issues/detail?id=105459)
-* $1000 to Arthur Gerkis for [bug
- 106484](http://code.google.com/p/chromium/issues/detail?id=106484)
-* $1000 to miaubiz for [bug
- 108605](http://code.google.com/p/chromium/issues/detail?id=108605)
-* $1000 to Arthur Gerkis for [bug
- 109556](http://code.google.com/p/chromium/issues/detail?id=109556)
-* $1000 to Boris Zbarsky of Mozilla for [bug
- 106672](http://code.google.com/p/chromium/issues/detail?id=106672)
-* $1000 to miaubiz for [bug
- 108695](http://code.google.com/p/chromium/issues/detail?id=108695)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 110172](http://code.google.com/p/chromium/issues/detail?id=110172)
-* $1000 to Arthur Gerkis for [bug
- 111779](http://code.google.com/p/chromium/issues/detail?id=111779)
-* $1000 to miaubiz for [bug
- 112847](http://code.google.com/p/chromium/issues/detail?id=112847)
-* $1000 to Chamal de Silva for [bug
- 105867](http://code.google.com/p/chromium/issues/detail?id=105867)
-* $1000 to Arthur Gerkis for [bug
- 111748](http://code.google.com/p/chromium/issues/detail?id=111748)
-* $1000 to Arthur Gerkis for [bug
- 108037](http://code.google.com/p/chromium/issues/detail?id=108037)
-* $2000 to Arthur Gerkis for [bug
- 112212](http://code.google.com/p/chromium/issues/detail?id=112212)
-* $1000 to Arthur Gerkis for [bug
- 116093](http://code.google.com/p/chromium/issues/detail?id=116093)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 108406](http://code.google.com/p/chromium/issues/detail?id=108406)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 115471](http://code.google.com/p/chromium/issues/detail?id=115471)
-* $1000 to miaubiz for [bug
- 113258](http://code.google.com/p/chromium/issues/detail?id=113258)
-* $1000 to miaubiz for [bug
- 113439](http://code.google.com/p/chromium/issues/detail?id=113439)
-* $1000 to miaubiz for [bug
- 114924](http://code.google.com/p/chromium/issues/detail?id=114924)
-* $1000 to miaubiz for [bug
- 115028](http://code.google.com/p/chromium/issues/detail?id=115028)
-* $1000 to miaubiz for [bug
- 113497](http://code.google.com/p/chromium/issues/detail?id=113497)
-* $1000 to miaubiz for [bug
- 113707](http://code.google.com/p/chromium/issues/detail?id=113707)
-* $1000 to miaubiz for [bug
- 114068](http://code.google.com/p/chromium/issues/detail?id=114068)
-* $1000 to miaubiz for [bug
- 114219](http://code.google.com/p/chromium/issues/detail?id=114219)
-* $1000 to miaubiz for [bug
- 115681](http://code.google.com/p/chromium/issues/detail?id=115681)
-* $1000 to miaubiz for [bug
- 113902](http://code.google.com/p/chromium/issues/detail?id=113902)
-* $1000 to miaubiz for [bug
- 116746](http://code.google.com/p/chromium/issues/detail?id=116746)
-* $1000 to Arthur Gerkis for [bug
- 116461](http://code.google.com/p/chromium/issues/detail?id=116461)
-* $1000 to miaubiz for [bug
- 104863](http://code.google.com/p/chromium/issues/detail?id=104863)
-* $1000 to miaubiz for [bug
- 107758](http://code.google.com/p/chromium/issues/detail?id=107758)
-* $1000 to miaubiz for [bug
- 108207](http://code.google.com/p/chromium/issues/detail?id=108207)
-* $1000 to Chamal de Silva for [bug
- 108544](http://code.google.com/p/chromium/issues/detail?id=108544)
-* $1000 to miaubiz for [bug
- 107244](http://code.google.com/p/chromium/issues/detail?id=107244)
-* $1000 to miaubiz for [bug
- 110764](http://code.google.com/p/chromium/issues/detail?id=110764)
-* $1000 to miaubiz for [bug
- 112151](http://code.google.com/p/chromium/issues/detail?id=112151)
-* $1000 to miaubiz for [bug
- 112833](http://code.google.com/p/chromium/issues/detail?id=112833)
-* $1000 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 111467](http://code.google.com/p/chromium/issues/detail?id=111467)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 112411](http://code.google.com/p/chromium/issues/detail?id=112411)
-* $1000 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 114342](http://code.google.com/p/chromium/issues/detail?id=114342)
-* $1000 to Arthur Gerkis for [bug
- 113837](http://code.google.com/p/chromium/issues/detail?id=113837)
-* $1000 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 117471](http://code.google.com/p/chromium/issues/detail?id=117471)
-* $1000 to Omair for [bug
- 117588](http://code.google.com/p/chromium/issues/detail?id=117588)
-* $1000 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 135432](http://code.google.com/p/chromium/issues/detail?id=135432)
-* $1000 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 140803](http://code.google.com/p/chromium/issues/detail?id=140803)
-* $1000 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 143609](http://code.google.com/p/chromium/issues/detail?id=143609)
-* $1000 to miaubiz for [bug
- 143656](http://code.google.com/p/chromium/issues/detail?id=143656)
-* $1000 to Sławomir Błażek for [bug
- 144899](http://code.google.com/p/chromium/issues/detail?id=144899)
-* $1000 to miaubiz for [bug
- 145544](http://code.google.com/p/chromium/issues/detail?id=145544)
-* $1000 to miaubiz for [bug
- 134897](http://code.google.com/p/chromium/issues/detail?id=134897)
-* $1000 to Arthur Gerkis for [bug
- 136235](http://code.google.com/p/chromium/issues/detail?id=136235)
-* $1000 to Jüri Aedla for [bug
- 136894](http://code.google.com/p/chromium/issues/detail?id=136894)
-* $1000 to miaubiz for [bug
- 129898](http://code.google.com/p/chromium/issues/detail?id=129898)
-* $1000 to miaubiz for [bug
- 130595](http://code.google.com/p/chromium/issues/detail?id=130595)
-* $1000 to miaubiz for [bug
- 120222](http://code.google.com/p/chromium/issues/detail?id=120222)
-* $1000 to miaubiz for [bug
- 120944](http://code.google.com/p/chromium/issues/detail?id=120944)
-* $1000 to miaubiz for [bug
- 124356](http://code.google.com/p/chromium/issues/detail?id=124356)
-* $1000 to miaubiz for [bug
- 125374](http://code.google.com/p/chromium/issues/detail?id=125374)
-* $1000 to miaubiz for [bug
- 129947](http://code.google.com/p/chromium/issues/detail?id=129947)
-* $1000 to miaubiz for [bug
- 129951](http://code.google.com/p/chromium/issues/detail?id=129951)
-* $1000 to miaubiz for [bug
- 130356](http://code.google.com/p/chromium/issues/detail?id=130356)
-* $1000 to Jüri Aedla for [bug
- 132779](http://code.google.com/p/chromium/issues/detail?id=132779)
-* $1000 to Collin Payne for [bug
- 150737](https://code.google.com/p/chromium/issues/detail?id=150737)
-* $509 to wushi of team509 for [bug
- 34978](http://code.google.com/p/chromium/issues/detail?id=34978)
-* $500 to Hironori Tokuta for bug 169401
-* $500 to Atte Kettunen for bug 284785
-* $500 to Atte Kettunen for bug 271161
-* $500 to Atte Kettunen for bug 270758
-* $500 to Atte Kettunen for bug 223962
-* $500 to Atte Kettunen for bug 152569
-* $500 to Atte Kettunen for bug 253550
-* $500 to Atte Kettunen for bug 167069
-* $500 to Atte Kettunen for bug 148638
-* $500 to Atte Kettunen for bug 142169
-* $500 to Isaac Dawson for [bug
- 21338](http://code.google.com/p/chromium/issues/detail?id=21338)
-* $500 to Billy Rios for [bug
- 26129](http://code.google.com/p/chromium/issues/detail?id=26129)
-* $500 to Timothy D. Morgan of [VSR](http://www.vsecurity.com/) for
- [bug
- 32718](http://code.google.com/p/chromium/issues/detail?id=32718)
-* $500 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 35732](http://code.google.com/p/chromium/issues/detail?id=35732)
-* $500 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 37061](http://code.google.com/p/chromium/issues/detail?id=37061)
-* $500 to kuzzcc for [bug
- 39443](http://code.google.com/p/chromium/issues/detail?id=39443)
-* $500 to kuzzcc for [bug
- 40635](http://code.google.com/p/chromium/issues/detail?id=40635)
-* $500 to wushi of team509 for [bug
- 42294](http://code.google.com/p/chromium/issues/detail?id=42294)
-* $500 to wushi of team509 for [bug
- 42723](http://code.google.com/p/chromium/issues/detail?id=42723)
-* $500 to Rodrigo Marcos of SECFORCE for [bug
- 46126](http://code.google.com/p/chromium/issues/detail?id=46126)
-* $500 to wushi of team509 for [bug
- 44424](http://code.google.com/p/chromium/issues/detail?id=44424)
-* $500 to wushi of team509 for [bug
- 46360](http://code.google.com/p/chromium/issues/detail?id=46360)
-* $500 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 48115](http://code.google.com/p/chromium/issues/detail?id=48115)
-* $500 to Michail Nikolaev for [bug
- 42736](http://code.google.com/p/chromium/issues/detail?id=42736)
-* $500 to sp3x of [SecurityReason.com](http://securityreason.com/) for
- [bug
- 43813](http://code.google.com/p/chromium/issues/detail?id=43813)
-* $500 to [Jose A. Vazquez](http://spa-s3c.blogspot.com/) for [bug
- 47866](http://code.google.com/p/chromium/issues/detail?id=47866)
-* $500 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 48284](http://code.google.com/p/chromium/issues/detail?id=48284)
-* $500 to wushi of team509 for [bug
- 49596](http://code.google.com/p/chromium/issues/detail?id=49596)
-* $500 to wushi of team509 for [bug
- 49628](http://code.google.com/p/chromium/issues/detail?id=49628)
-* $500 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 45331](http://code.google.com/p/chromium/issues/detail?id=45331)
-* $500 to kuzzcc for [bug
- 51653](http://code.google.com/p/chromium/issues/detail?id=51653)
-* $500 to Isaac Dawson for [bug
- 53001](http://code.google.com/p/chromium/issues/detail?id=53001)
-* $500 to David Weston of Microsoft Vulnerability Research (MSVR) for
- [bug
- 50250](http://code.google.com/p/chromium/issues/detail?id=50250)
-* $500 to kuzzcc for [bug
- 51252](http://code.google.com/p/chromium/issues/detail?id=51252)
-* $500 to kuzzcc for [bug
- 51919](http://code.google.com/p/chromium/issues/detail?id=51252)
-* $500 to Sergey Glazunov for [bug
- 53361](http://code.google.com/p/chromium/issues/detail?id=53361)
-* $500 to remy.saissy for [bug
- 53361](http://code.google.com/p/chromium/issues/detail?id=53361)
-* $500 to kuzzcc for [bug
- 53394](http://code.google.com/p/chromium/issues/detail?id=53394)
-* $500 to wushi of team509 for [bug
- 55114](http://code.google.com/p/chromium/issues/detail?id=55114)
-* $500 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 57501](http://code.google.com/p/chromium/issues/detail?id=57501)
-* $500 to kuzzcc for [bug
- 51680](http://code.google.com/p/chromium/issues/detail?id=51680)
-* $500 to Simon Schaak for [bug
- 54500](http://code.google.com/p/chromium/issues/detail?id=54500)
-* $500 to "vkouchna" for [bug
- 58741](http://code.google.com/p/chromium/issues/detail?id=58741)
-* $500 to "gundlach" / various for [bug
- 60238](http://code.google.com/p/chromium/issues/detail?id=60238)
-* $500 to "fam.lam" for [bug
- 60327](http://code.google.com/p/chromium/issues/detail?id=60327)
-* $500 to Stefan Troger for [bug
- 59554](http://code.google.com/p/chromium/issues/detail?id=59554)
-* $500 to kuzzcc for [bug
- 63051](http://code.google.com/p/chromium/issues/detail?id=63051)
-* $500 to Sławomir Błażek for [bug
- 62956](http://code.google.com/p/chromium/issues/detail?id=62956)
-* $500 to Chamal de Silva for [bug
- 65299](http://code.google.com/p/chromium/issues/detail?id=65299)
-* $500 to Jan Tošovský for [bug
- 66748](http://code.google.com/p/chromium/issues/detail?id=66748)
-* $500 to *anonymous* for [bug
- 67363](http://code.google.com/p/chromium/issues/detail?id=67363)
-* $500 to Sergey Radchenko for [bug
- 63732](http://code.google.com/p/chromium/issues/detail?id=63732)
-* $500 to Stefan van Zanden for [bug
- 70078](http://code.google.com/p/chromium/issues/detail?id=70078)
-* $500 to Martin Barbella for [bug
- 69628](http://code.google.com/p/chromium/issues/detail?id=69628)
-* $500 to Daniel Divricean for [bug
- 70336](http://code.google.com/p/chromium/issues/detail?id=70336)
-* $500 to Alex Turpin for [bug
- 72517](http://code.google.com/p/chromium/issues/detail?id=72517)
-* $500 to Christian Holler for [bug
- 74670](http://code.google.com/p/chromium/issues/detail?id=74670)
-* $500 to Yuri Ko for [bug
- 70070](http://code.google.com/p/chromium/issues/detail?id=70070)
-* $500 to Aki Helin for [bug
- 71586](http://code.google.com/p/chromium/issues/detail?id=71586)
-* $500 to Michael Griffiths for [bug
- 75347](http://code.google.com/p/chromium/issues/detail?id=75347)
-* $500 to Dan Rosenberg for [bug
- 76542](http://code.google.com/p/chromium/issues/detail?id=76542)
-* $500 to Jordi Chancel for [bug
- 77786](http://code.google.com/p/chromium/issues/detail?id=77786)
-* $500 to Collin Payne for [bug
- 81916](http://code.google.com/p/chromium/issues/detail?id=81916)
-* $500 to Aki Helin from
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 85177](http://code.google.com/p/chromium/issues/detail?id=85177)
-* $500 to miaubiz for [bug
- 85102](http://code.google.com/p/chromium/issues/detail?id=85102)
-* $500 to Mario Gomes for [bug
- 85808](http://code.google.com/p/chromium/issues/detail?id=85808)
-* $500 to kuzzcc for [bug
- 85808](http://code.google.com/p/chromium/issues/detail?id=85808)
-* $500 to miaubiz for [bug
- 87298](http://code.google.com/p/chromium/issues/detail?id=87298)
-* $500 to Shih Wei-Long for [bug
- 87339](http://code.google.com/p/chromium/issues/detail?id=87339)
-* $500 to Juho Nurminen for [bug
- 88337](http://code.google.com/p/chromium/issues/detail?id=88337)
-* $500 to Aki Helin of [OUSPG](https://www.ee.oulu.fi/research/ouspg/)
- for [bug
- 89142](http://code.google.com/p/chromium/issues/detail?id=89142)
-* $500 to Mario Gomes for [bug
- 78639](http://code.google.com/p/chromium/issues/detail?id=78639)
-* $500 to Jordi Chancel for [bug
- 89564](http://code.google.com/p/chromium/issues/detail?id=89564)
-* $500 to miaubiz for [bug
- 89991](http://code.google.com/p/chromium/issues/detail?id=89991)
-* $500 to Christian Holler for [bug
- 91120](http://code.google.com/p/chromium/issues/detail?id=91120)
-* $500 to Jordi Chancel for [bug
- 86758](http://code.google.com/p/chromium/issues/detail?id=86758)
-* $500 to Simon Sarris for [bug
- 91016](http://code.google.com/p/chromium/issues/detail?id=91016)
-* $500 to Aki Helin of [OUSPG](https://www.ee.oulu.fi/research/ouspg/)
- for [bug
- 100465](http://code.google.com/p/chromium/issues/detail?id=100465)
-* $500 to Aki Helin of [OUSPG](https://www.ee.oulu.fi/research/ouspg/)
- for [bug
- 98809](http://code.google.com/p/chromium/issues/detail?id=98809)
-* $500 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 104959](http://code.google.com/p/chromium/issues/detail?id=104959)
-* $500 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 105714](http://code.google.com/p/chromium/issues/detail?id=105714)
-* $500 to Aki Helin of [OUSPG](https://www.ee.oulu.fi/research/ouspg/)
- for [bug
- 108416](http://code.google.com/p/chromium/issues/detail?id=108416)
-* $500 to Aki Helin of [OUSPG](https://www.ee.oulu.fi/research/ouspg/)
- for [bug
- 108901](http://code.google.com/p/chromium/issues/detail?id=108901)
-* $500 to Aki Helin of [OUSPG](https://www.ee.oulu.fi/research/ouspg/)
- for [bug
- 110277](http://code.google.com/p/chromium/issues/detail?id=110277)
-* $500 to miaubiz for [bug
- 106336](http://code.google.com/p/chromium/issues/detail?id=106336)
-* $500 to pa_kt for [bug
- 112259](http://code.google.com/p/chromium/issues/detail?id=112259)
-* $500 to Sławomir Błażek for [bug
- 112670](http://code.google.com/p/chromium/issues/detail?id=112670)
-* $500 to Sławomir Błażek for [bug
- 114054](http://code.google.com/p/chromium/issues/detail?id=114054)
-* $500 to miaubiz for [bug
- 108467](http://code.google.com/p/chromium/issues/detail?id=108467)
-* $500 to Masato Kinugawa for [bug
- 109574](http://code.google.com/p/chromium/issues/detail?id=109574)
-* $500 to Arthur Gerkis for [bug
- 112317](http://code.google.com/p/chromium/issues/detail?id=112317)
-* $500 to miaubiz for [bug
- 114056](http://code.google.com/p/chromium/issues/detail?id=114056)
-* $500 to Christian Holler for [bug
- 117794](http://code.google.com/p/chromium/issues/detail?id=117794)
-* $500 to Nir Moshe for [bug
- 137707](http://code.google.com/p/chromium/issues/detail?id=137707)
-* $500 to pawlkt for [bug
- 139168](http://code.google.com/p/chromium/issues/detail?id=139168)
-* $500 to Atte Kettunen of
- [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for [bug
- 141651](http://code.google.com/p/chromium/issues/detail?id=141651)
-* $500 to miaubiz for [bug
- 121347](http://code.google.com/p/chromium/issues/detail?id=121347)
-* $500 to miaubiz for [bug
- 136881](http://code.google.com/p/chromium/issues/detail?id=136881)
-* $500 to Emmanuel Bronshtein for [bug
- 142956](http://code.google.com/p/chromium/issues/detail?id=142956)
-* $500 to Takeshi Terada for [bug
- 144813](http://code.google.com/p/chromium/issues/detail?id=144813)
-* $500 to Takeshi Terada for [bug
- 144820](http://code.google.com/p/chromium/issues/detail?id=144820)
-* $500 to Takeshi Terada for [bug
- 137532](http://code.google.com/p/chromium/issues/detail?id=137532)
-* $500 to Takeshi Terada for [bug
- 144866](http://code.google.com/p/chromium/issues/detail?id=144866)
-* $500 to Takeshi Terada for [bug
- 141889](http://code.google.com/p/chromium/issues/detail?id=141889)
-* $500 to Artem Chaykin for [bug
- 138210](http://code.google.com/p/chromium/issues/detail?id=138210)
-* $500 to Artem Chaykin for [bug
- 138035](http://code.google.com/p/chromium/issues/detail?id=138035)
-* $500 to Ayush Jindal for [bug
- 68342](https://code.google.com/p/chromium/issues/detail?id=68342)
-
-The following special-case rewards were issued for bugs in components external
-to the Chromium project. We sometimes issue rewards for bugs in external
-components where information of the bug enabled us to proactively protect our
-users.
-
-* $5000 to Eetu Luodemaa and Joni Vähämäki, both from Documill, for
- [bug
- 146254](http://code.google.com/p/chromium/issues/detail?id=146254)
-* $4000 to Jüri Aedla for [bug
- 107128](http://code.google.com/p/chromium/issues/detail?id=107128)
-* $3000 to Jüri Aedla for [bug
- 129930](http://code.google.com/p/chromium/issues/detail?id=129930)
-* $1337 to Marc Schoenefeld for [bug
- 48283](http://code.google.com/p/chromium/issues/detail?id=48283)
-* $1337 to Simon Berry-Byrne for [bug
- 48733](http://code.google.com/p/chromium/issues/detail?id=48733)
-* $1337 to Marc Schoenefeld for [bug
- 51070](http://code.google.com/p/chromium/issues/detail?id=51070)
-* $1337 to Jüri Aedla for [bug
- 112822](http://code.google.com/p/chromium/issues/detail?id=112822)
-* $1000 to Bui Quang Minh from Bkis
- ([www.bkis.com](http://www.bkis.com)) for [bug
- 58731](http://code.google.com/p/chromium/issues/detail?id=58731)
-* $1000 to Yang Dingning from NCNIPC, Graduate University of Chinese
- Academy of Sciences for [bug
- 63444](http://code.google.com/p/chromium/issues/detail?id=63444)
-* $1000 to Yang Dingning from NCNIPC, Graduate University of Chinese
- Academy of Sciences for [bug
- 86900](http://code.google.com/p/chromium/issues/detail?id=86900)
-* $1000 to Yang Dingning from NCNIPC, Graduate University of Chinese
- Academy of Sciences for [bug
- 89402](http://code.google.com/p/chromium/issues/detail?id=89402)
-* $1000 to Yang Dingning from NCNIPC, Graduate University of Chinese
- Academy of Sciences for [bug
- 93472](http://code.google.com/p/chromium/issues/detail?id=93472)
-* $1000 to Nicolas Gregoire for [bug
- 138673](http://code.google.com/p/chromium/issues/detail?id=138673)
-* $500 to Nicolas Gregoire for [bug
- 127417](http://code.google.com/p/chromium/issues/detail?id=127417)
-
-(Note that some of the above individuals elected to donate the rewards to
-charity. In these cases, Google often increased the value of the donation beyond
-the stated reward amount.)
-
-### **Honorable mention**
-
-The following lower severity or duplicate bugs were responsibly reported to the
-Chromium project. Thanks to these named individuals for helping Chromium
-security!
-
-* Mike Dougherty of dotSyntax, LLC for [bug
- 33572](http://code.google.com/p/chromium/issues/detail?id=33572)
-* kuzzcc for [bug
- 37007](http://code.google.com/p/chromium/issues/detail?id=37007)
-* RSnake of [ha.ckers.org](http://ha.ckers.org/) for [bug
- 33445](http://code.google.com/p/chromium/issues/detail?id=33445)
-* Tobias Klein ([www.trapkit.de](http://www.trapkit.de/)) for [bug
- 38845](http://code.google.com/p/chromium/issues/detail?id=38845)
-* Carlos Ghan for [bug
- 33952](http://code.google.com/p/chromium/issues/detail?id=33952)
-* WHK &lt;elhacker.net&gt; and The-0utl4w From Aria-Security for [bug
- 34721](http://code.google.com/p/chromium/issues/detail?id=34721)
-* Aki Helin from [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for
- [bug
- 35979](http://code.google.com/p/chromium/issues/detail?id=35979)
-* Aki Helin from [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for
- [bug
- 36976](http://code.google.com/p/chromium/issues/detail?id=36976)
-* Jordi Chancel for [bug
- 37447](http://code.google.com/p/chromium/issues/detail?id=37447)
-* kuzzcc for [bug
- 39277](http://code.google.com/p/chromium/issues/detail?id=39277)
-* Florent, Skyrecon systems for [bug
- 40801](http://code.google.com/p/chromium/issues/detail?id=40801)
-* kuzzcc for [bug
- 41778](http://code.google.com/p/chromium/issues/detail?id=41778)
-* Aki Helin from [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for
- [bug
- 42538](http://code.google.com/p/chromium/issues/detail?id=42538)
-* kuzzcc for [bug
- 40628](http://code.google.com/p/chromium/issues/detail?id=40628)
-* kuzzcc for [bug
- 41447](http://code.google.com/p/chromium/issues/detail?id=41447)
-* Florian Rienhardt, BSI for [bug
- 36553](http://code.google.com/p/chromium/issues/detail?id=36553)
-* Ben Davis and Emanuele Gentili for [bug
- 38105](http://code.google.com/p/chromium/issues/detail?id=38105)
-* Sergey Glazunov for [bug
- 42396](http://code.google.com/p/chromium/issues/detail?id=42396)
-* Jose A. Vazquez for [bug
- 45164](http://code.google.com/p/chromium/issues/detail?id=45164)
-* Mats Ahlgren for [bug
- 46575](http://code.google.com/p/chromium/issues/detail?id=46575)
-* Aki Helin from [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for
- [bug
- 47056](http://code.google.com/p/chromium/issues/detail?id=47056)
-* Lostmon for [bug
- 28001](http://code.google.com/p/chromium/issues/detail?id=28001)
-* "ironfist99" for [bug
- 34414](http://code.google.com/p/chromium/issues/detail?id=34414)
-* Chris Weber from Casaba Security for [bug
- 37201](http://code.google.com/p/chromium/issues/detail?id=37201)
-* Brook Novak for [bug
- 41654](http://code.google.com/p/chromium/issues/detail?id=41654)
-* Lostmon for [bug
- 45876](http://code.google.com/p/chromium/issues/detail?id=45876)
-* Keith Campbell for [bug
- 51846](http://code.google.com/p/chromium/issues/detail?id=51846)
-* [VUPEN Vulnerability Research Team](http://www.vupen.com/)
- (VUPEN-SR-2010-249) for [bug
- 52443](http://code.google.com/p/chromium/issues/detail?id=52443)
-* "magnusmorton" for [bug
- 51709](http://code.google.com/p/chromium/issues/detail?id=51709)
-* kuzzcc for [bug
- 53176](http://code.google.com/p/chromium/issues/detail?id=53176)
-* "adriennefelt" for [bug
- 54006](http://code.google.com/p/chromium/issues/detail?id=54006)
-* Jordi Chancel for [bug
- 51680](http://code.google.com/p/chromium/issues/detail?id=51680)
-* kuzzcc for [bug
- 53002](http://code.google.com/p/chromium/issues/detail?id=53002)
-* Dan Rosenberg, Virtual Security Research for [bug
- 54132](http://code.google.com/p/chromium/issues/detail?id=54132)
-* Nirankush Panchbhai and Microsoft Vulnerability Research (MSVR) for
- [bug
- 55745](http://code.google.com/p/chromium/issues/detail?id=55745)
-* Cezary Tomczak for [bug
- 58319](http://code.google.com/p/chromium/issues/detail?id=58319)
-* Mohammed Bouhlel for [bug
- 61701](http://code.google.com/p/chromium/issues/detail?id=61701)
-* kuzzcc for [bug
- 62168](http://code.google.com/p/chromium/issues/detail?id=62168)
-* David Weston of Microsoft Vulnerability Research (MSVR) for [bug
- 60055](http://code.google.com/p/chromium/issues/detail?id=60055)
-* kuzzcc for [bug
- 60761](http://code.google.com/p/chromium/issues/detail?id=60761)
-* Marius Wachtler for [bug
- 62276](http://code.google.com/p/chromium/issues/detail?id=62276)
-* Chamal de Silva for [bug
- 65299](http://code.google.com/p/chromium/issues/detail?id=65299)
-* Chamal de Silva for [bug
- 66591](http://code.google.com/p/chromium/issues/detail?id=66591)
-* David Warren of [CERT](http://www.cert.org/) for [bug
- 67303](http://code.google.com/p/chromium/issues/detail?id=67303)
-* miaubiz for [bug
- 67363](http://code.google.com/p/chromium/issues/detail?id=67363)
-* Brian Kirchoff for [bug
- 62791](http://code.google.com/p/chromium/issues/detail?id=62791)
-* Dan Morrison for [bug
- 66931](http://code.google.com/p/chromium/issues/detail?id=66931)
-* Matthew Heidermann for [bug
- 68244](http://code.google.com/p/chromium/issues/detail?id=68244)
-* [Reddit](http://www.reddit.com) for [bug
- 69195](http://code.google.com/p/chromium/issues/detail?id=69195)
-* Rik Cabanier for [bug
- 67234](http://code.google.com/p/chromium/issues/detail?id=67234)
-* miaubiz for [bug
- 71717](http://code.google.com/p/chromium/issues/detail?id=71717)
-* Louis Lang for [bug
- 49747](http://code.google.com/p/chromium/issues/detail?id=49747)
-* Aki Helin from [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for
- [bug
- 66962](http://code.google.com/p/chromium/issues/detail?id=66962)
-* David Weston of Microsoft and Microsoft Vulnerability Research
- (MSVR) for [bug
- 71788](http://code.google.com/p/chromium/issues/detail?id=71788)
-* Martin Barbella for [bug
- 61502](http://code.google.com/p/chromium/issues/detail?id=61502)
-* Chamal de Silva for [bug
- 70538](http://code.google.com/p/chromium/issues/detail?id=70538)
-* Cole Snodgrass for [bug
- 72523](http://code.google.com/p/chromium/issues/detail?id=72523)
-* miaubiz for [bug
- 72910](http://code.google.com/p/chromium/issues/detail?id=72910)
-* wushi of team509 for [bug
- 75801](http://code.google.com/p/chromium/issues/detail?id=75801)
-* wushi of team509 for [bug
- 76646](http://code.google.com/p/chromium/issues/detail?id=76646)
-* kuzzcc for [bug
- 77349](http://code.google.com/p/chromium/issues/detail?id=77349)
-* Sergey Glazunov for [bug
- 75821](http://code.google.com/p/chromium/issues/detail?id=75821)
-* kuzzcc for [bug
- 79266](http://code.google.com/p/chromium/issues/detail?id=79266)
-* kuzzcc for [bug
- 79426](http://code.google.com/p/chromium/issues/detail?id=79426)
-* Sergey Glazunov for [bug
- 83273](http://code.google.com/p/chromium/issues/detail?id=83273)
-* kuzzcc for [bug
- 83841](http://code.google.com/p/chromium/issues/detail?id=83841)
-* kuzzcc for [bug
- 84402](http://code.google.com/p/chromium/issues/detail?id=84402)
-* Olli Pettay of Mozilla for [bug
- 84600](http://code.google.com/p/chromium/issues/detail?id=84600)
-* kuzzcc for [bug
- 84805](http://code.google.com/p/chromium/issues/detail?id=84805)
-* Mikołaj Małecki for [bug
- 85559](http://code.google.com/p/chromium/issues/detail?id=85559)
-* Collin Payne for [bug
- 84933](http://code.google.com/p/chromium/issues/detail?id=84933)
-* miaubiz for [bug
- 82552](http://code.google.com/p/chromium/issues/detail?id=82552)
-* wushi of team509 (reported through ZDI) for [bug
- 88670](http://code.google.com/p/chromium/issues/detail?id=88670)
-* miaubiz for [bug
- 88670](http://code.google.com/p/chromium/issues/detail?id=88670)
-* electronixtar for [bug
- 51464](http://code.google.com/p/chromium/issues/detail?id=51464)
-* wbrana for [bug
- 57908](http://code.google.com/p/chromium/issues/detail?id=57908)
-* kuzzcc for [bug
- 78427](http://code.google.com/p/chromium/issues/detail?id=78427)
-* kuzzcc for [bug
- 83031](http://code.google.com/p/chromium/issues/detail?id=83031)
-* Aaron Sigel of [vtty.com](http://vtty.com) for [bug
- 80680](http://code.google.com/p/chromium/issues/detail?id=80680)
-* Mario Gomes for [bug
- 85041](http://code.google.com/p/chromium/issues/detail?id=85041)
-* Arthur Gerkis for [bug
- 89795](http://code.google.com/p/chromium/issues/detail?id=89795)
-* miaubiz for [bug
- 90134](http://code.google.com/p/chromium/issues/detail?id=90134)
-* miaubiz for [bug
- 94800](http://code.google.com/p/chromium/issues/detail?id=94800)
-* Bernhard 'Bruhns' Brehm of Recurity Labs for [bug
- 93497](http://code.google.com/p/chromium/issues/detail?id=93497)
-* Aki Helin from [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for
- [bug
- 93596](http://code.google.com/p/chromium/issues/detail?id=93596)
-* Nishant Yadant of VMware and Craig Chamberlain for [bug
- 95917](http://code.google.com/p/chromium/issues/detail?id=95917)
-* Chu for [bug
- 101010](http://code.google.com/p/chromium/issues/detail?id=101010)
-* Aki Helin from [OUSPG](https://www.ee.oulu.fi/research/ouspg/) for
- [bug
- 100863](http://code.google.com/p/chromium/issues/detail?id=100863)
-* Collin Payne for [bug
- 92550](http://code.google.com/p/chromium/issues/detail?id=92550)
-* Devdatta Akhawe, UC Berkeley for [bug
- 103630](http://code.google.com/p/chromium/issues/detail?id=103630)
-* Atte Kettunen from [OUSPG](https://www.ee.oulu.fi/research/ouspg/)
- for [bug
- 109094](http://code.google.com/p/chromium/issues/detail?id=109094)
-* Code Audit Labs of VulnHunt.com for [bug
- 109245](http://code.google.com/p/chromium/issues/detail?id=109245)
-* Sławomir Błażek for [bug
- 109664](http://code.google.com/p/chromium/issues/detail?id=109664)
-* Ben Carrillo for [bug
- 109717](http://code.google.com/p/chromium/issues/detail?id=109717)
-* chrometot for [bug
- 112451](http://code.google.com/p/chromium/issues/detail?id=112451)
-* Michael Gundlach for [bug
- 108648](http://code.google.com/p/chromium/issues/detail?id=108648)
-* Glenn Randers-Pehrson for [bug
- 116162](http://code.google.com/p/chromium/issues/detail?id=116162) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/index.md b/chromium/docs/website/site/Home/chromium-security/index.md
deleted file mode 100644
index fb39ba290f2..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/index.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: chromium-security
-title: Chromium Security
----
-
-The Chromium security team aims to provide Chrome and Chrome OS users with the
-most secure platform to navigate the web, and just generally make the Internet a
-safer place to hang out. We work on solutions for the [biggest user / ux
-security problems](/Home/chromium-security/enamel), drive [secure architecture
-design and implementation projects for the Chromium
-platform](/Home/chromium-security/guts), [find and help fix security
-bugs](/Home/chromium-security/bugs), [help developers to create more secure
-apps](/Home/chromium-security/owp), and act as a [general security consulting /
-review group](/Home/chromium-security/reviews-and-consulting) for the larger
-Chromium project.
-
-To learn more:
-
-* Read our [core security
- principles](/Home/chromium-security/core-principles), which we try
- to follow in all security work we do.
-* Check out our [security brag
- sheet](/Home/chromium-security/brag-sheet), which lists some of the
- technologies and recognition we're most proud of.
-* Check out some of the work we're doing to [detect and prevent
- security bugs](/Home/chromium-security/bugs), ensure that Chromium
- is [secure by design and resilient to
- exploitation](/Home/chromium-security/guts), and [make security
- easier for users and developers](/Home/chromium-security/enamel).
-* Peruse the [Security
- FAQ](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md)
- for answers to common questions.
-* Learn about how [Security
- Reviews](/Home/chromium-security/security-reviews) work in Chrome.
-* Check out some of our [Chrome-specific security
- education](/Home/chromium-security/education) documentation.
-* Check out the [PDFium
- Security](/Home/chromium-security/pdfium-security) page, too.
-* Here is the canonical "[prefer secure origins for powerful new
- features](/Home/chromium-security/prefer-secure-origins-for-powerful-new-features)"
- proposal text.
-* Here is the canonical "[Marking HTTP As
- Non-Secure](/Home/chromium-security/marking-http-as-non-secure)"
- proposal text.
-* Have a look at our public [Chrome Security Google Drive
- folder](https://drive.google.com/open?id=0B_KwtdC2J1Q6fjFNRElHUHhmLUlNbktKbFVkRXBlVGp0NkZvTDJvZVRZLXozOVFqTWtzM1E&authuser=0),
- which contains a whole bunch of useful documents as well.
-* We provide [quarterly
- updates](/Home/chromium-security/quarterly-updates) to what we're
- working on, if anything piques your interest get in touch!
-* Find out about [our memory
- safety](/Home/chromium-security/memory-safety) work.
-
-### How can I get involved?
-
-**Find bugs**
-
-One of the quickest ways to get involved is finding and [reporting security
-bugs](/Home/chromium-security/reporting-security-bugs). It will get prompt
-attention from a [security
-sheriff](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/sheriff.md),
-be kept private until we coordinate disclosure, and possibly qualify for a cash
-reward through our [Vulnerability Rewards
-Program](/Home/chromium-security/vulnerability-rewards-program). We occasionally
-run security contests outside of our regular reward program (e.g.
-[Pwnium2](/Home/chromium-security/pwnium-2),
-[Pwnium3](/Home/chromium-security/pwnium-3)) too.
-
-For any issues other than a specific bug, email us at
-[security@chromium.org](mailto:security@chromium.org). For non-confidential
-discussions, please post to the [technical discussion
-forums](/developers/technical-discussion-groups), including the public
-[security-dev](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev)
-list for technical discussions.
-
-**Become a committer**
-
-We encourage interested parties to work towards [becoming a
-committer](/getting-involved/become-a-committer). There are many types of
-security related patch that we're excited to collaborate on:
-
-* Fixes for any security bugs you discover.
-* Implementing or improving security features, including
- security-related web platform features (examples: iframe sandbox,
- XSS auditor, CSP).
-* Implementing or improving security hardening measures (examples:
- defensive checks, allocator improvements, ASLR improvements).
-
-**Become an IPC reviewer**
-
-Bugs in IPC can have nasty consequences, so we take special care to make sure
-additions or changes to IPC avoid [common security
-pitfalls](/Home/chromium-security/education/security-tips-for-ipc). If you want
-to get involved, check out how to become an IPC reviewer
-[here](/Home/chromium-security/ipc-security-reviews).
-
-**Join the team**
-
-Access to Chromium security bugs and our team mailing list is restricted, for
-obvious reasons. Before applying to join the team, applicants must be committers
-and are expected to have made and continue to make active and significant
-contributions to Chromium security. You should demonstrate some of the following
-before applying:
-
-* Relevant technical expertise and a history of patches that improve
- Chromium security.
-* A history of identifying and responsibly reporting Chromium security
- vulnerabilities.
-* Other expertise and/or roles that would allow the applicant to
- significantly contribute to Chromium security on a regular basis.
-* \[required\]: Be a committer, and have no personal or professional
- association that is an ethical conflict of interest (e.g. keeping
- vulnerabilities or exploits private, or sharing with parties other
- than the vendor).
-
-To apply for membership, please email
-[security@chromium.org](mailto:security@chromium.org).
-
-### How can I get access to Chromium vulnerabilities?
-
-A history of fixed Chromium security bugs is best found via [security notes in
-Stable Channel updates on the Google Chrome releases
-blog](https://googlechromereleases.blogspot.com/search/label/Stable%20updates).
-You can also find fixed, publicly visible Type=Bug-Security bugs in the [issue
-tracker](https://crbug.com/) (note: security bugs automatically become publicly
-visible 14 weeks after they are fixed). All security bugs are rated according to
-our [severity
-guidelines](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/severity-guidelines.md),
-which we keep in line with industry standards.
-
-Advance notice of (fixed) Chromium security vulnerabilities is restricted to
-those actively building significantly deployed products based upon Chromium, or
-including Chromium as part of bundled software distributions. If you meet the
-criteria, and require advanced notice of vulnerabilities, request access via
-[security@chromium.org](mailto:security@chromium.org). Your email should explain
-your need for access (embedder, Linux distribution, etc.) and your continued
-access will require that you follow the terms of list membership.
-
-### There is one simple rule for any party with advance access to security vulnerabilities in Chromium: any details of a vulnerability should be considered confidential and only shared on a need to know basis until such time that the vulnerability is responsibly disclosed by the Chromium project. Additionally, any vulnerabilities in third-party dependencies (e.g. Blink, open source parser libraries, etc.) must be treated with the same consideration. Access will be terminated for any member who fails to comply with this rule in letter or spirit. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/ipc-security-reviews/index.md b/chromium/docs/website/site/Home/chromium-security/ipc-security-reviews/index.md
deleted file mode 100644
index 904bb9a61ae..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/ipc-security-reviews/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: ipc-security-reviews
-title: IPC Security Reviews
----
-
-**So, you want to help with IPC reviews?** Fantastic! Security bugs in IPC have
-nasty consequences, so we have a little background check and ramp up process:
-
-**First, tell [us](mailto:security@chromium.org) a bit about your security
-interest and experience and confirm you've done your homework.** Entrusting you
-with this responsibility only makes sense if you care about Chromium security,
-so tell us why you want to do this. Do you have a history of helping find / fix
-security bugs? Have you helped with security-relevant software design or
-projects? Tell us a bit about your security interests and experience.
-
-You should also confirm that you've read and understand all of our doc on
-[security tips for
-IPC](/Home/chromium-security/education/security-tips-for-ipc).Is anything
-unclear? Can you suggest or make improvements? Docs have a tendency of going
-stale.
-
-**Next, we'll partner you up on some reviews.** We'll typically have you do ~3
-IPC reviews yourself with an existing reviewer doing a second pass.
-
-If all that looks good, you're on board! \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/malicious-extensions-protection/index.md b/chromium/docs/website/site/Home/chromium-security/malicious-extensions-protection/index.md
deleted file mode 100644
index 4fba2d13c11..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/malicious-extensions-protection/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: malicious-extensions-protection
-title: Malicious Extensions Protection
----
-
-http://blog.chromium.org/2013/11/protecting-windows-users-from-malicious.html \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages with User Input.gif.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages with User Input.gif.sha1
deleted file mode 100644
index 77963b3f231..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages with User Input.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9856c4425ff1c40d33c0e6f85241d9e86f0f3ae0 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages@1x.png.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages@1x.png.sha1
deleted file mode 100644
index d7c9fd05439..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/Treatment of HTTP Pages@1x.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-af0a46ad9f5fc6b5ddc92e401f01fd48fa1aff28 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 1.png.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 1.png.sha1
deleted file mode 100644
index cacb4fc1462..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-965471ca717b325ee4b3298e9569e2b76eb400ee \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 2.png.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 2.png.sha1
deleted file mode 100644
index e8074b21cdd..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/blog image 2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-90d8f3a756084bc6cd204f80dd8385e62e25412d \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/form-and-incognito-http-bad-verbose.png.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/form-and-incognito-http-bad-verbose.png.sha1
deleted file mode 100644
index d6ebd3bb0b9..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/form-and-incognito-http-bad-verbose.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fc08b30a4f39f9859a34a1e66478cb79da793eab \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/http-bad-sep-2018.png.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/http-bad-sep-2018.png.sha1
deleted file mode 100644
index bba461f924c..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/http-bad-sep-2018.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7003b4743000d675e6ae442b4596b3e6263e0937 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/index.md b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/index.md
deleted file mode 100644
index 4bf40abd736..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/index.md
+++ /dev/null
@@ -1,329 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: marking-http-as-non-secure
-title: Marking HTTP As Non-Secure
----
-
-This page contains the original proposal for marking HTTP as non-secure (see
-Original Proposal below).
-
-Since then, the [Chrome usable security team](/Home/chromium-security/enamel)
-has announced the following phases towards this goal.
-
-For more information see, the WebFundamentals article: [Avoiding the Not Secure
-Warning in
-Chrome](https://developers.google.com/web/updates/2016/10/avoid-not-secure-warn)
-
----
-
-Timeline
-
-**January 2017 (Phase 1)**
-
-Takes effect: January 2017 (Chrome 56)
-
-Announcement: [Moving towards a more secure
-web](https://security.googleblog.com/2016/09/moving-towards-more-secure-web.html)
-(September 8, 2016)
-
-In this phase, HTTP pages will be marked with "Not Secure" in the URL bar under
-the following conditions:
-
-* The page **contains a password field**.
-* The user **interacts with a credit card field**.
-
-[<img alt="image"
-src="/Home/chromium-security/marking-http-as-non-secure/blog%20image%201.png"
-height=156
-width=400>](/Home/chromium-security/marking-http-as-non-secure/blog%20image%201.png)
-
-**October 2017 (Phase 2)**
-
-Takes effect: October 2017 (Chrome 62)
-
-Announcement: [Next Steps Toward More Connection
-Security](https://security.googleblog.com/2017/04/next-steps-toward-more-connection.html)
-(April 27, 2017)
-
-In this phase, HTTP pages will be marked with "Not Secure" in the URL bar under
-the following conditions:
-
-* The user is browsing in Chrome [**incognito
- mode**](https://support.google.com/chromebook/answer/95464).
-* The page **contains a password field**.
-* The user **interacts with any input field**.
-
-[<img alt="image"
-src="/Home/chromium-security/marking-http-as-non-secure/form-and-incognito-http-bad-verbose.png"
-height=150
-width=400>](/Home/chromium-security/marking-http-as-non-secure/form-and-incognito-http-bad-verbose.png)
-
-On mobile, there is no room for the string, so only the icon animates out for
-user entered data:
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/o8gRCMfszCh_ut-ED6vM_GwprRwi5bi3uvdOgVbCZr74N6ZahKXN4IgtkGB9lGVa6dJOPC6HRdMwHHv0Dpaq-0QmEcHFeOza4I4Av8fSYA5eYD3qKG960hb5msau5DSG8zhJtKsSexk"
-height=320 width=180>
-
-**July 2018 (Phase 3)**
-
-Takes effect: July 2018 (Chrome 68)
-
-Announcement: [A secure web is here to
-stay](https://security.googleblog.com/2018/02/a-secure-web-is-here-to-stay.html)
-(February 8, 2018)
-
-In this phase, all HTTP pages will be marked with "Not Secure":
-
-[<img alt="image"
-src="/Home/chromium-security/marking-http-as-non-secure/phase-3-wide.png"
-height=141
-width=400>](/Home/chromium-security/marking-http-as-non-secure/phase-3-wide.png)
-
-On mobile, there is no room for the string. The (i) icon will show on all HTTP
-pages:
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/WLxC0fxWjNDw524vjorHcqnSSzR_hkJqZVogkFpka9fut6J_BS9UBip4BGPNWicQTH52A8Diae2j67JcziEJ8XrpHmLXnKagCLOZLvWAEHJ33ftTBVe9ZjurdLMw-kbnAbFcWkBE6bg"
-height=80 width=400>
-
-**September 2018**
-
-Takes effect: September 2018 (Chrome 69)
-
-Announcement: [Evolving Chrome's security
-indicators](https://blog.chromium.org/2018/05/evolving-chromes-security-indicators.html)
-(May 17, 2018)
-
-In this phase, secure pages will be marked more neutral instead of affirmatively
-secure:
-
-[<img alt="image"
-src="/Home/chromium-security/marking-http-as-non-secure/http-bad-sep-2018.png">](/Home/chromium-security/marking-http-as-non-secure/http-bad-sep-2018.png)
-
-**October 2018**
-
-Takes effect: October 2018 (Chrome 70)
-
-Announcement: [Evolving Chrome's security
-indicators](https://blog.chromium.org/2018/05/evolving-chromes-security-indicators.html)
-(May 17, 2018)
-
-In this phase, HTTP pages will be marked as affirmatively "Not Secure" using red
-color and the non-secure icon in the URL bar if the user **interacts with any
-input field**.
-
-[<img alt="image"
-src="https://3.bp.blogspot.com/-MkJEkHnXcXc/Wv181DQednI/AAAAAAAAA6E/95MwjxqK7awaCgr_Z6xRNWVi0Ztf0-ncACLcBGAs/s1600/Treatment%2Bof%2BHTTP%2BPages%2Bwith%2BUser%2BInput.gif">](https://3.bp.blogspot.com/-MkJEkHnXcXc/Wv181DQednI/AAAAAAAAA6E/95MwjxqK7awaCgr_Z6xRNWVi0Ztf0-ncACLcBGAs/s1600/Treatment%2Bof%2BHTTP%2BPages%2Bwith%2BUser%2BInput.gif)
-
-**Eventual**
-
-There is no target date for the final state yet, but we intend to mark all HTTP
-pages as affirmatively non-secure in the long term (the same as other non-secure
-pages, like pages with broken HTTPS):
-
-**[<img alt="image"
-src="/Home/chromium-security/marking-http-as-non-secure/blog%20image%202.png"
-height=194
-width=400>](/Home/chromium-security/marking-http-as-non-secure/blog%20image%202.png)**
-
-On mobile:
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/U3QsL4ZZlAZOBejvGlmo0RMgZpnXEmzj_JZDcZoqUeX7q9UTHCLlRxoweNKY9F8lNj3h9GzrwaSKIaxOI0pRzmZ60X7N6taxTsw_ygpI5HobP0DEOzDnhwGLxn9kmgjUNSI6-CakhFg"
-height=81 width=320>
-
----
-
-Original Proposal
-
-Proposal
-
-We, the Chrome Security Team, propose that user agents (UAs) gradually change
-their UX to display non-secure origins as affirmatively non-secure.
-
-The goal of this proposal is to more clearly display to users that HTTP provides
-no data security.
-
-Request
-
-We’d like to hear everyone’s thoughts on this proposal, and to discuss with the
-web community about how different transition plans might serve users.
-
-Background
-
-We all need data communication on the web to be secure (private, authenticated,
-untampered). When there is no data security, the UA should explicitly display
-that, so users can make informed decisions about how to interact with an origin.
-
-Roughly speaking, there are three basic transport layer security states for web
-origins:
-
- Secure (valid HTTPS, other origins like (\*, localhost, \*));
-
- Dubious (valid HTTPS but with mixed passive resources, valid HTTPS with
- minor TLS errors); and
-
- Non-secure (broken HTTPS, HTTP).
-
-For more precise definitions of secure and non-secure, see [Requirements for
-Powerful Features](http://www.w3.org/TR/powerful-features/) and [Mixed
-Content](http://www.w3.org/TR/mixed-content/).
-
-We know that active tampering and surveillance attacks, as well as passive
-surveillance attacks, are not theoretical but are in fact commonplace on the
-web.
-
-[RFC 7258: Pervasive Monitoring Is an
-Attack](https://tools.ietf.org/html/rfc7258)
-
-[NSA uses Google cookies to pinpoint targets for
-hacking](http://www.washingtonpost.com/blogs/the-switch/wp/2013/12/10/nsa-uses-google-cookies-to-pinpoint-targets-for-hacking/)
-
-[Verizon’s ‘Perma-Cookie’ Is a Privacy-Killing
-Machine](http://www.wired.com/2014/10/verizons-perma-cookie/)
-
-[How bad is it to replace adSense code id to ISP's adSense ID on free
-Internet?](http://stackoverflow.com/questions/25438910/how-bad-is-it-to-replace-adsense-code-id-to-isps-adsense-id-on-free-internet)
-
-[Comcast Wi-Fi serving self-promotional ads via JavaScript
-injection](http://arstechnica.com/tech-policy/2014/09/why-comcasts-javascript-ad-injections-threaten-security-net-neutrality/)
-
-[Erosion of the moral authority of transparent
-middleboxes](https://tools.ietf.org/html/draft-hildebrand-middlebox-erosion-01)
-
-[Transitioning The Web To HTTPS](https://w3ctag.github.io/web-https/)
-
-We know that people do not generally perceive the absence of a warning sign.
-(See e.g. [The Emperor's New Security
-Indicators](http://commerce.net/wp-content/uploads/2012/04/The%20Emperors_New_Security_Indicators.pdf).)
-Yet the only situation in which web browsers are guaranteed not to warn users is
-precisely when there is no chance of security: when the origin is transported
-via HTTP. Here are screenshots of the status quo for non-secure domains in
-Chrome, Safari, Firefox, and Internet Explorer:
-
-<img alt="Screen Shot 2014-12-11 at 5.08.48 PM.png"
-src="https://lh3.googleusercontent.com/iqplifxSx_wSl7SIq6UVlYg6PdxJxgCAoF-6D06PPfC3CN9GZE0NzeWF72jRa4wi2E2ACnt9L24-sv69phA8WCBhVQGlYqlV1YUxlaJU3_8OwQNxzM4AJK6dE4k_-X8n5g"
-height=71px; width=243px;>
-
-<img alt="Screen Shot 2014-12-11 at 5.09.55 PM.png"
-src="https://lh5.googleusercontent.com/YJAUDzAEAiaRpWRKa9qVaPly5eb6uwy909VH3OoINMwub7fz_KHrrPrLjHIi42KUt8l-VSmrFpjeTN5xTaZskhfsIoldczpw5eJNY6yLMYoA4wa2Ij-_rGz6oNM5mSVerA"
-height=77px; width=254px;>
-
-<img alt="Screen Shot 2014-12-11 at 5.11.04 PM.png"
-src="https://lh6.googleusercontent.com/QuA9DeqhXn8Cx9gTRBfYZmseK1Qz53apbMSylUgAcJCCzBsZ55pLllipWZxK9e4yQ_zJbFEuDJPnbJzMZxe59FCfMEqWPC0HDNfq3-65ebsbQ344n6U16PpXYc3cZ_sKkg"
-height=86px; width=328px;>
-
-<img alt="ie-non-secure.png"
-src="https://lh6.googleusercontent.com/0R7HobJqifX3DqOAMzKcfb72lbyJbew5H3VWGLijftRNuEM76cwRzQAX_Zk461w6dVjFNXGf7nQ0J8uOrIsSTmsUaaauNZGtV2CEEXJZkY7ncw75y8N8si1LcK6JOjxofg"
-height=61px; width=624px;>
-
-Particulars
-
-UA vendors who agree with this proposal should decide how best to phase in the
-UX changes given the needs of their users and their product design constraints.
-Generally, we suggest a phased approach to marking non-secure origins as
-non-secure. For example, a UA vendor might decide that in the medium term, they
-will represent non-secure origins in the same way that they represent Dubious
-origins. Then, in the long term, the vendor might decide to represent non-secure
-origins in the same way that they represent Bad origins.
-
-Ultimately, we can even imagine a long term in which secure origins are so
-widely deployed that we can leave them unmarked (as HTTP is today), and mark
-only the rare non-secure origins.
-
-There are several ways vendors might decide to transition from one phase to the
-next. For example, the transition plan could be time-based:
-
- T0 (now): Non-secure origins unmarked
-
- T1: Non-secure origins marked as Dubious
-
- T2: Non-secure origins marked as Non-secure
-
- T3: Secure origins unmarked
-
-Or, vendors might set thresholds based on telemetry that measures the ratios of
-user interaction with secure origins vs. non-secure. Consider this strawman
-proposal:
-
- Secure &gt; 65%: Non-secure origins marked as Dubious
-
- Secure &gt; 75%: Non-secure origins marked as Non-secure
-
- Secure &gt; 85%: Secure origins unmarked
-
-The particular thresholds or transition dates are very much up for discussion.
-Additionally, how to define “ratios of user interaction” is also up for
-discussion; ideas include the ratio of secure to non-secure page loads, the
-ratio of secure to non-secure resource loads, or the ratio of total time spent
-interacting with secure vs. non-secure origins.
-
-We’d love to hear what UA vendors, web developers, and users think. Thanks for
-reading! We are discussing the proposal on web standards mailing lists:
-
-* [public-webappsec@w3.org](http://lists.w3.org/Archives/Public/public-webappsec/)
-* [blink-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev)
-* [security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev)
-* [dev-security@lists.mozilla.org](https://groups.google.com/forum/#!forum/mozilla.dev.security)
-
-**FAQ**
-
-We have fielded various reasonable concerns about this proposal, but most of
-them have a good answer. Here is a brief selection.
-
-(Please consider any external links to be examples, not endorsements.)
-
-* **Will this break plain HTTP sites?**
- * No. HTTP sites will continue to work; we currently have no plans
- to block them in Chrome. All that will change is the *security
- indicator(s)*.
-* **Aren't certificates expensive/difficult to obtain?**
- * A few providers currently provide free/cheap/bundled
- certificates right now. The [Let's
- Encrypt](https://letsencrypt.org/) project makes it easy to
- obtain free certificates (even for many subdomains at once, or
- with wildcards).
-* **Aren't certificates difficult to set up?**
- * Let's Encrypt has developed a [simple, open-source
- protocol](https://letsencrypt.org/howitworks/) for setting up
- server certificates. [SSLMate](https://sslmate.com/) currently
- provides a similar service for a fee. Services like
- [Cloudflare](http://blog.cloudflare.com/introducing-universal-ssl/)
- currently provide free SSL/TLS for sites hosted through them,
- and hosting providers may start automating this for all users
- once free certificates become common.
- * For people who are happy without a custom domain, there are
- various hosting options that support HTTPS with a free tier,
- e.g. [GitHub Pages](https://pages.github.com/), blogging
- services, [Google Sites](https://sites.google.com/), and [Google
- App Engine](https://cloud.google.com/appengine/). As of 2018,
- many hosting providers even support turning on HTTPS using a
- single checkbox.
-* **Isn't SSL/TLS slow?**
- * [Not really](https://istlsfastyet.com/) (for almost all sites,
- if they are following good practices).
-* **Doesn't this break caching? Filtering?**
- * If you're a site operator concerned about site load, there are
- various secure CDN options available, starting as cheap as
- [Cloudflare's free
- tier](http://blog.cloudflare.com/introducing-universal-ssl/).
- * For environments that need tight control of internet access,
- there are several client-side/network solutions. For other
- environments, we consider this kind of tampering a violation of
- SSL/TLS security guarantees.
-* **What about test servers/self-signed certificates?**
- * Hopefully, free/simple certificate setup will be able to help
- people who had previously considered it inconvenient. Also note
- that [localhost is considered
- secure](http://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features),
- even without HTTPS.
- * As mentioned above, plain HTTP will continue to work.
-
-Also see [Mozilla's
-FAQ](https://blog.mozilla.org/security/files/2015/05/HTTPS-FAQ.pdf) on this
-topic for longer answers. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-narrow.png.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-narrow.png.sha1
deleted file mode 100644
index 093b1412032..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-narrow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01a0b44621eda085bc745e38b567a0346b8f4673 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-wide.png.sha1 b/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-wide.png.sha1
deleted file mode 100644
index 5e9a71fe401..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/marking-http-as-non-secure/phase-3-wide.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cfa8f918d6561b8582c41f10c4a0e34494881a0d \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/mds/index.md b/chromium/docs/website/site/Home/chromium-security/mds/index.md
deleted file mode 100644
index 5a7a3e68093..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/mds/index.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: mds
-title: Microarchitectural Data Sampling
----
-
-Microarchitectural Data Sampling
-
-# (CVE-2018-12126, CVE-2018-12127, CVE-2018-12130, and CVE-2019-11091)
-
-# Summary
-
-Microarchitectural Data Sampling (MDS) refers to a set of speculative execution
-side-channel vulnerabilities which potentially allow results from previous
-execution on a core to be observed across security boundaries via
-microarchitectural state, on certain Intel CPUs. They are described in [Intel's
-announcement](https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00233.html),
-and referred to as
-MSBDS/[CVE-2018-12126](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-12126),
-MLPDS/[CVE-2018-12127](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-12127),
-MFBDS/[CVE-2018-12130](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-12130),
-and
-MDSUM/[CVE-2019-11091](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2019-11091).
-
-An attacker successfully exploiting these vulnerabilities could read sensitive
-data from other processes running on the system, breaking the isolation between
-processes provided by modern operating systems. If Chrome processes are
-attacked, these sensitive data could include website contents as well as
-passwords, credit card numbers, or cookies.
-
-Chrome, like all programs, relies on the operating system to provide isolation
-between processes. Operating system vendors may release updates to improve
-isolation, so users should ensure they install any updates and follow any
-additional guidance from their operating system vendor in relation to MDS
-mitigation.
-
-Some operating system mitigations will also require changes in Chrome which we
-shall include in subsequent Chrome releases. Users should ensure their version
-of Chrome is [always up to
-date](https://support.google.com/chrome/answer/95414?co=GENIE.Platform%3DDesktop).
-
-## Response
-
-The Chrome team investigated various mitigation options Chrome could take
-independently of the OS, but none were sufficiently complete or performant.
-Users should rely on operating system level mitigations.
-
-### Android
-
-On the Android platform, the vast majority of devices are not affected, as these
-issues only apply to some Intel-based systems.
-
-As always, Android users should apply updates for their devices as soon as they
-are available from their OEM.
-
-### Chrome OS
-
-Chrome OS has disabled Hyper-Threading on Chrome OS 74 and subsequent versions.
-This provides protection against attacks using MDS. [More details on Chrome OS's
-response](/chromium-os/mds-on-chromeos).
-
-### macOS
-
-macOS Mojave 10.14.5 [includes MDS
-mitigations](https://support.apple.com/en-us/HT210107). These have been adopted
-by Chrome and will be included in Chrome 75 which will be released to the Stable
-channel on or around the 4th of June.
-
-### Windows
-
-Windows users should apply updates with MDS mitigations as soon as they are
-available, and [follow any guidance to adjust system settings if
-appropriate](https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV190013).
-
-### iOS
-
-Apple iOS devices use CPUs not known to be vulnerable to MDS.
-
-### Linux
-
-Linux users should apply kernel and CPU microcode updates as soon as they are
-available from their distribution vendor, and follow any guidance to adjust
-system settings. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/memory-safety/index.md b/chromium/docs/website/site/Home/chromium-security/memory-safety/index.md
deleted file mode 100644
index b04a7787718..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/memory-safety/index.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: memory-safety
-title: Memory safety
----
-
-The Chromium project finds that around 70% of our serious security bugs are
-[memory safety
-problems](https://alexgaynor.net/2019/aug/12/introduction-to-memory-unsafety-for-vps-of-engineering/).
-Our next major project is to prevent such bugs at source.
-
-## The problem
-
-Around 70% of our high severity security bugs are memory unsafety problems (that
-is, mistakes with C/C++ pointers). Half of those are use-after-free bugs.
-
-[<img alt="Pie chart of uses-after-free, other memory safety, other security
-bug, security asserts"
-src="/Home/chromium-security/memory-safety/piechart.png">](/Home/chromium-security/memory-safety/piechart.png)
-
-(Analysis based on 912 high or critical
-[severity](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/severity-guidelines.md)
-security bugs since 2015, affecting the Stable channel.)
-
-These bugs are spread evenly across our codebase, and a high proportion of our
-non-security stability bugs share the same types of root cause. As well as
-risking our users’ security, these bugs have real costs in how we fix and ship
-Chrome.
-
-## The limits of sandboxing
-
-Chromium’s [security architecture](/Home/chromium-security/guts) has always been
-designed to assume that these bugs exist, and code is sandboxed to stop them
-taking over the host machine. Over the past years that architecture has been
-enhanced to [ensure that websites are isolated from one
-another](/Home/chromium-security/site-isolation). That huge effort has allowed
-us — just — to stay ahead of the attackers. But we are reaching the limits of
-sandboxing and site isolation.
-
-A key limitation is that the process is the smallest unit of isolation, but
-processes are not cheap. Especially on Android, using more processes impacts
-device health overall: background activities (other applications and browser
-tabs) get killed with far greater frequency.
-
-We still have processes sharing information about multiple sites. For example,
-the network service is a large component written in C++ whose job is parsing
-very complex inputs from any maniac on the network. This is what we call “the
-doom zone” in our [Rule Of
-2](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/rule-of-2.md)
-policy: the network service is a large, soft target and
-[vulnerabilities](https://googleprojectzero.blogspot.com/2020/02/several-months-in-life-of-part1.html)
-there are of
-[Critical](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/severity-guidelines.md#TOC-Critical-severity)
-severity.
-
-Just as Site Isolation improved safety by tying renderers to specific sites, we
-can imagine doing the same with the network service: we could have many network
-service processes, each tied to a site or (preferably) an origin. That would be
-beautiful, and would hugely reduce the severity of network service compromise.
-However, it would also explode the number of processes Chromium needs, with all
-the efficiency concerns that raises.
-
-Meanwhile, our insistence on the [Rule Of
-2](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/rule-of-2.md)
-is preventing Chrome developers from shipping features, as it’s already
-sometimes just too expensive to start a new process to handle untrustworthy
-data.
-
-## Staying still is not an option
-
-We believe that:
-
- Attackers innovate, so defenders need to innovate just to keep pace.
-
- We can no longer derive sufficient innovation from more processes or
- stronger sandboxes (though such things continue to be necessary).
-
- Therefore the cheapest way to maintain the advantage is to squash bugs at
- source instead of trying to contain them later.
-
-## What we’re trying
-
-We’re tackling the memory unsafety problem — fixing classes of bugs at scale,
-rather than merely containing them — by any and all means necessary, including:
-
-* Custom C++ libraries
- * //base is already getting into shape for spatial memory safety.
- * std and [Abseil](https://abseil.io/) assume correct callers ‘for
- speed’, but can be modified to do basic checking with
- implementation changes (Abseil) and compile-time flags (LLVM
- libcxx).
- * Generalizing [Blink’s C++ garbage
- collector](https://docs.google.com/document/d/1Cv2IcsiokkGc2K_5FBTDKekNzTn3iTEUyi9fDOud9wU/edit#heading=h.i5ibcxqde9h2),
- and using it more widely (starting with PDFium).
-* Hardware mitigations, e.g.
- [MTE](https://llvm.org/devmtg/2018-10/slides/Serebryany-Stepanov-Tsyrklevich-Memory-Tagging-Slides-LLVM-2018.pdf).
- * Custom C++ dialect(s)
- * Defined and enforced by LLVM plugins and presubmit checks. In
- particular, we feel it [may be necessary to ban raw pointers
- from
- C++](https://docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_MZ2GsrJNb_dbQ3ZBg/edit#heading=h.jx7cpliyfer).
-* Using safer languages anywhere applicable
- * Java and Kotlin
- * JavaScript
- * [Rust](https://chromium-review.googlesource.com/c/chromium/src/+/2084087)
- [(see our notes on C++ interoperability
- here)](/Home/chromium-security/memory-safety/rust-and-c-interoperability)
- * [Swift](https://chromium-review.googlesource.com/c/chromium/src/+/1904747)
- * Others…?
-
-These options lie on a spectrum:
-
-[<img alt="Spectrum of options from lower cost &amp; less improvement (e.g. C++
-library improvements) to higher cost and more improvement (e.g. Rust)"
-src="/Home/chromium-security/memory-safety/sat3CHOc8lXZbGicChW6w5Q.png">](/Home/chromium-security/memory-safety/sat3CHOc8lXZbGicChW6w5Q.png)
-
-We expect this strategy will boil down to two major strands:
-
- Significant changes to the C++ developer experience, with some performance
- impact. (For instance, no raw pointers, bounds checks, and garbage
- collection.)
-
- An option of a programming language designed for compile-time safety checks
- with less runtime performance impact — but obviously there is a cost to
- bridge between C++ and that new language. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/memory-safety/piechart.png.sha1 b/chromium/docs/website/site/Home/chromium-security/memory-safety/piechart.png.sha1
deleted file mode 100644
index be8b06c8cd9..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/memory-safety/piechart.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ea1b0e3fc4dd638d946bee931998373b7f17f884 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/memory-safety/rust-and-c-interoperability/index.md b/chromium/docs/website/site/Home/chromium-security/memory-safety/rust-and-c-interoperability/index.md
deleted file mode 100644
index c7494d55782..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/memory-safety/rust-and-c-interoperability/index.md
+++ /dev/null
@@ -1,182 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/memory-safety
- - Memory safety
-page_name: rust-and-c-interoperability
-title: Rust and C++ interoperability
----
-
-(written August 2020)
-
-Chrome engineers are experimenting with Rust. For the foreseeable future, C++ is
-the reigning monarch in our codebase, and any use of Rust will need to fit in
-with C++ — not the other way around. This seems to present some C++/Rust
-interoperability challenges which nobody else has faced.
-
-We'd need to solve these before considering Rust as (nearly) a first-class
-citizen in our codebase. If we can’t solve these, Rust would at best be isolated
-to “leaf nodes” which don’t interact much with the rest of our codebase. And if
-that’s all we can use Rust for, that calls into question whether the costs of an
-extra language are justified in the first place.
-
-As C++ is the ruler, we are primarily concerned with the ability for new Rust
-code to call into existing C++ code, rather than C++ to Rust calls.
-
-We think it’s important for Rust to be able to call C++ functions in a way that
-meets the following **criteria**:
-
-**No need for the “unsafe” keyword unless something is known to be less safe than normal C++**
-
-For a Rustacean, this is controversial - all C++ is unsafe! But “unsafe”
-should be a really bad code smell. If “unsafe” is needed for all C++ calls,
-there will be thousands of them, and the “unsafe” keyword will lose its
-meaning. Where objects are simply passed backwards and forwards between Rust
-and C++, we must avoid the word ‘unsafe’. It should be restricted to patches
-of genuinely unsafe Rust code, and for C++ interoperability code where
-there’s shared ownership or other complexities.
-This particular property is satisfied by dtolnay’s marvellous
-[cxx](https://github.com/dtolnay/cxx) library already.
-
-**No overhead in the general case**
-
-LTO and [cross-language
-inlining](http://blog.llvm.org/2019/09/closing-gap-cross-language-lto-between.html)
-already solve this in principle. There are cases where overhead is necessary
-at the C++ boundary — especially, the UTF check required when strings are
-passed from C++ to Rust. This can be dealt with by handling such strings as
-&\[u8\] in Rust code, until string manipulation is really necessary, so we
-do not need any further innovations here. This box is checked.
-
-**No boilerplate or redeclarations. No C++ annotations. Ideally, no allowlist**
-
-If a C++ API exists, Rust should be able to call it. It’s that simple. The
-declaration in C++ should be sufficient. There should be no need for an
-allowlist, a redeclaration in Rust, or any Rust shim. Rare exceptions will
-exist (e.g. overloaded functions) and in some cases we’ll want to make an
-idiomatic Rust wrapper, but in general, that shouldn’t be necessary.
-This is not just aesthetic preference. Our codebase is complex and polluting
-it with extra annotations would be a small, but noticeable, tax on how
-everyone works.
-
-**Broad type support - with safety**
-
-[cxx](https://github.com/dtolnay/cxx) is the current state-of-the-art for
-safely exchanging data between C++ and Rust. Our
-“[base](https://source.chromium.org/chromium/chromium/src/+/HEAD:base/)”
-library exposes 1768 APIs which are used by other parts of Chrome. 1052 of
-those functions only take parameters which are types that can already be
-supported by cxx. 12 more are planned in the near term for cxx (e.g. more
-flexible slices).
-That’s ~60% of our APIs, which is good but not great.
-Another 12% can be supported if we are able to pass std::string and similar
-string types into existing C++ APIs. These can’t be represented in a Rust
-struct due to an internal pointer, but as cxx generates code on both the C++
-and Rust side, it should be possible to own a UniquePtr&lt;CxxString&gt; on
-the Rust side, yet [pass it into an existing C++
-API](https://github.com/dtolnay/cxx/issues/250) which takes a std::string by
-value.
-(That sounds fairly straightforward, but it becomes much more complex when
-you’re talking about structs containing std::strings, such as
-[url::Origin](https://source.chromium.org/chromium/chromium/src/+/HEAD:url/origin.h;l=141?q=url::Origin&ss=chromium%2Fchromium%2Fsrc).
-Such a struct could only be owned as a UniquePtr&lt;opaque type&gt; from the
-Rust side, which would prevent field access. Solutions can be imagined but
-need more thought.)
-Another ~20% are functions which take pointer parameters - in our case,
-these are very often [out
-parameters](https://source.chromium.org/chromium/chromium/src/+/HEAD:base/rand_util.h;l=40?q=base::RandBytes&sq=).
-We need to see how we can programmatically identify those which are ‘simple’
-out parameters and allow Rust to populate them safely.
-The good news is that this leaves just 8% of our functions which can’t be
-supported by the cxx model of interop. Most of these are passing C++ structs
-(by value) which have [raw pointers within
-them](https://source.chromium.org/chromium/chromium/src/+/HEAD:base/memory/shared_memory_mapping.h;l=169?q=base::WritableSharedMemoryMapping).
-This seems largely insoluble in Rust but they’re so rare that we can create
-case-by-case idiomatic wrappers.
-There are some caveats here: this analysis is based on symbols exported by
-the binary, rather than source code analysis. In some cases these APIs would
-be wrapped by inline functions, templates or macros, which this analysis
-ignores. It also ignores return values and direct field access. And of
-course, “base” isn’t the only set of APIs which our code would need to call
-- it’s probably that higher-level functions would have [more complex
-arguments on
-average](https://source.chromium.org/chromium/chromium/src/+/HEAD:content/public/browser/render_frame_host.h;bpv=1;bpt=1;l=88?q=RenderFrameHost&gsn=RenderFrameHost&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Frender_frame_host.h%23G1w6QPBQL82Xkcn4l7LDpzClmBPa_c18lFVVZbHK5h0&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fcontent_browser_client.h%23q1iJpNllgNKY5mVu_-89ZVL29Rk5wCUukrTj6kdjLOA&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fnavigation_controller.h%23xJPcd1uTfK8sLQidlLN1nkzka5MM8UOqJQ-vd1RMLUI&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fnavigation_handle.h%23Cla5SVTQ5b0yHjvdzazehvdZiPAwZPiL7hw9jGrMBMg&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Frender_frame_host.h%23RenderFrameHost%253Acontent%2523c%2523dhOuyZmgB2x&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fweb_contents.h%23XrbufdRG9Y--Dfi3iq7WkPh30Aby0bBIixBApZ1fXG4&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fweb_contents_delegate.h%23xPu14kaNu58lQUD_9A9MEXyxUFs8Jibf73XNjZze6zM&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fweb_contents_observer.h%23Gc6rUNIeosEK0hOGxwCGtN3e4cQRlW1pbI9SJnAffaY&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Ftest%2Fcontent_browser_test_utils.h%23KxzkBqHDzmvePnTKOrHQpGDfOD2Oy4yWL0xQ17sxS7g&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Ftest%2Ftest_utils.h%23EVUuAhYNNhFIy0tQc4euuLdHh_H2gYKx6Cde5mGUDdw&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fshell%2Fbrowser%2Fshell_platform_delegate.h%23JlDkk2QY2af2K98dJC7keSobXw9Lm7Vvr2DnHqWQpGM&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Frender_frame_host.h%23_RceGKzxaDRVeDDFRGV34cgVys-lQ22yR_wwBOBzXkI&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fchrome%2Fbrowser%2Fchromeos%2Flogin%2Ftest%2Fjs_checker.h%23r_Gj569ozVIUJq-1POIJ4-qqNaRvHC-N7_01P9qsSSc&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fchrome%2Fbrowser%2Ftask_manager%2Fproviders%2Fweb_contents%2Fweb_contents_task_provider.h%23m8QtJrZjgtNRJveh4olsmT3NIvAFrJmS62j1jaLIjVk&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fchrome%2Fbrowser%2Fui%2Fexclusive_access%2Ffullscreen_controller.h%232v5FtWIP5lic0jku3uPv0aA35WhmxS5zkZ32A3UXfsc&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fblocked_content%2Fpopup_blocker_tab_helper.h%23ZAwLD36-n3HV1_IIGmPbytosIMmfek4iFBO1CLfnwAI&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fpage_load_metrics%2Fbrowser%2Fobservers%2Flargest_contentful_paint_handler.h%23MGktmDqVePSQ5i5YsOaSyZQO_PsptqLzf_yMxl4Dyuk&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fpage_load_metrics%2Fbrowser%2Fpage_load_metrics_observer.h%23lb9A7wZugxQD54-kaHBU9xBztc_qtW0v7d_yxHFitMo&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fperformance_manager%2Fpublic%2Fperformance_manager.h%237RnPbKgruVz8UTqkRkQA5AJD6a87ucr-9eRsxXEQR_U&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fsubresource_filter%2Fcontent%2Fbrowser%2Fsubresource_filter_observer.h%23TXHYSiScLwmoB1m4zPDJABkqvxFdAWfy1Ex2IFX_daM&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fbrowser%2Fcontent_index%2Fcontent_index_service_impl.h%23MhjsqAeDxF0FYJo_wllpmTcv6tuLPn_nPnwDJtbrGzs&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Frender_document_host_user_data.h%23QFc-GZRe6mkj2fUPpd_OOzdlMfR9TPXA7kdFH2P0y0c&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Frender_frame_host.h%23RenderFrameHost%253Acontent%2523c%2523bJIWE93K2Uw&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Frender_view_host.h%23j-yNEITJJhL9H_N7SAWIFM00eSi9Do5KqVHnnw6-wYY&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Ftest%2Fnavigation_simulator.h%23LdLUS0zBCndDaYelBCIrAtQAP5CjgrKoBWc4UkaDpPE&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fextensions%2Fbrowser%2Fapp_window%2Fapp_window.h%23cLpWpVzgBXk0gZyi-2THfz57SRACA-LHUveF0YbUgCg&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fextensions%2Fbrowser%2Fextension_function.h%23_Ogl2-DYz2iqCw9dhPLcqQwcXfV194_P3uWT2Fnkj-4&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fextensions%2Fbrowser%2Fprocess_manager.h%23fdDKt3wBoBo8B9ujQiKlNlTWllc9d6Nucx_LH5PyFg4&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fchrome%2Fbrowser%2Fbanners%2Fapp_banner_manager.h%236njZ8hjl2ANDhn7cc2_h2Obhvi0hty24_cozfCfXvP4&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fchrome%2Fbrowser%2Fdevtools%2Fdevtools_window.h%23UvVTsinMZfkvO_28gCFM_S742snUFO4dF9lUEBCOOzA&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fchrome%2Fbrowser%2Fui%2Fsearch%2Flocal_ntp_test_utils.h%23MFOhcxTDmwcb9ct68b2WSzYF6YDjdalt24KDHCBega8&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fautofill%2Fcontent%2Fbrowser%2Fcontent_autofill_driver_factory.h%232_1CXjN2hUKgzzlJeHBUY-03W_tFo-iunU62bByBM6s&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fpage_load_metrics%2Fbrowser%2Fobservers%2Fpage_load_metrics_observer_tester.h%23ek2Ilzd8IEKzZMxB7pfXiVtl3hub7QKlESaQXb9wefE&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fpayments%2Fcontent%2Fpayment_app_factory.h%23UXMzp2clHfiq_I9jqU5EYPV35LFAS4Qeb30UgiYYmPM&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fbrowser%2Fweb_contents%2Fweb_contents_impl.h%23bGo7lh_Cz-AMlV0vnrg7N1hekIc2k69yWIXNjppwLvM&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fdevtools_agent_host.h%23MVlcGNudSwRbhwAb7qjmDJ5EIF5RuWjJo6dcUqHEdwE&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fdevtools_manager_delegate.h%23fUonhxAGMNCMCnWgzJszvsBnMePO8z2cucV5m0H1gig&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fmedia_player_id.h%237GEQk0IkYgezyBz93D_esGwqUhoYfor4M2JjgzOkHKY&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fweb_ui_controller.h%23iktvwQuWbLO8hlEAR-DJYt9o0xju62S_9nfg7R7j2Kc&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Ftest%2Fweb_contents_tester.h%23zPltnaBNY45XLxRyREmM8T-NumTILcwnWNRC8FiI-ug&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fchrome%2Ftest%2Fpayments%2Fpayment_request_platform_browsertest_base.h%23H2AtSVUS0Q9k7jDXyRtrFB1Po_9evqkWUVvvo7NB6oM&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fautofill%2Fcore%2Fbrowser%2Fautofill_client.h%2356w8agBOZjtRclF5Wfl-QJmO500HiS1mPke0i1kt91s&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcomponents%2Fpermissions%2Fpermission_request_id.h%23TutwfaiAmQOM6OkwwuX-_Hdp-H4pq5HSE0N5mqrhrxg&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fbrowser%2Fmedia%2Fforwarding_audio_stream_factory.h%23KgICheBanWRA3eZKFVxi-8bxZCOO4ujLJ-uUMvvordk&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fbrowser%2Frenderer_host%2Fmedia%2Frender_frame_audio_output_stream_factory.h%23kXXZI4k7E_bVhhmyaIbCYnCIOsddZlredLwzqVUEl14&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fbrowser%2Frenderer_host%2Frender_widget_host_owner_delegate.h%23KEHWC06-LjLVJcNPotW9smK0WoGIjQcjFcs3m6c3Jdw&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fcontent%2Fpublic%2Fbrowser%2Fback_forward_cache.h%23KU6Chs-FixtEn-uy4ELETeGq_e5amqVQ51_xw8jmwP4&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fextensions%2Fbrowser%2Fextension_function_dispatcher.h%23NlU0-Xo74M-G5-Eq_D2VfP9PAf4UX6pBv8o202lwdR8&gs=kythe%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%3Flang%3Dc%252B%252B%3Fpath%3Dsrc%2Fextensions%2Fbrowser%2Fprocess_manager_observer.h%23ypSAGYvQtRkkYdE3rjreepcXMaKO7JxH13lwLq6DGKQ)
-so be less likely to fall in the ‘good’ bucket.
-
-**Ergonomics - with safety**
-
-From Rust code, we need to be able to instantiate C++ objects, safely pass
-around ownership (there are no significant problems with cxx’s
-[UniquePtr](https://docs.rs/cxx/0.3.4/cxx/struct.UniquePtr.html) here), call
-methods on them (both plain and virtual). For “plain old data” types in C++,
-containing simple, cxx-compatible fields, we need to be able to manipulate
-those fields. Most of this can be achieved with cxx already (though we need
-a way to call through to
-[std::make_unique](https://github.com/dtolnay/cxx/issues/228) from Rust code
-for a type that’s opaque to Rust).
-We need this to be smooth enough that we do not need to wrap a typical C++
-type in a Rust wrapper.
-So far, so good. But we also need: to act (at Rust build time) upon #defines
-set up by our C++ headers and build-time rules, figure out a plan for
-calling C++ overloaded functions and operators, call macros (e.g. LOG(ERROR)
-&lt;&lt; “eek”), make templated functions and types available (possibly very
-hard, though bindgen does a remarkably good job here), and probably many
-other things we haven’t yet thought of.
-It may be that the best way to handle some of these cases is some inline C++
-code within Rust (like the [cpp crate](https://crates.io/crates/cpp) but
-with the benefit of cxx’s safety).
-One specific challenge is [reference-counted
-objects](https://source.chromium.org/chromium/chromium/src/+/HEAD:base/memory/scoped_refptr.h;l=175?q=scoped_refptr).
-We need the reference count to be shared between referees on the Rust and
-Chrome side. The bigger challenge here is how to deal with the prevalence of
-multiple mutable references on the C++ side, without the ability to do
-something like a
-[RefCell::borrow_mut](https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.borrow_mut)
-to ensure even runtime safety. It may be that we need to mark involvement
-with all such reference-counted objects as truly ‘unsafe’ from the Rust
-side.
-In general we think we can live without Rust types inheriting from C++
-types, but there’s one exception: pure virtual observers. cxx provides the
-ability to [pass function pointers from Rust to
-C++](https://github.com/dtolnay/cxx#builtin-types), so it’s quite possible
-for us to make wrapper types here. Ideally, though, this becomes ergonomic
-and seamless as well. More investigation is needed here.
-
-**What we don’t need**
-
-We believe we can live without: self-referential C++ types being passed by value
-into Rust (except for strings), Rust types inheriting from non-pure-virtual C++
-types; variadic arguments, “safe” reference counting. (There will be cases where
-the absence of these features is annoying, but hopefully rare.) All this may be
-wrong: we still have much learning to do.
-
-**Our plan**
-
-We think the hardest part of this is imagining a safe way to pass types between
-Rust and C++. That requires auto-generated shim code on both the Rust and C++
-side. That’s already achieved by cxx with terrific emergent safety properties.
-And so that’s our basic model.
-
-But, we don’t want to specify a cxx::bridge section for every API. We therefore
-[need the cxx::bridge to be generated using a bindgen-like
-tool](https://github.com/dtolnay/cxx/issues/235).
-
-We don’t believe Rust language changes are needed. Some C++ types can’t be owned
-by value in Rust — for example std::string with its self-referential pointer —
-but we believe that good C++ interoperability can be achieved even if Rust can
-only own such objects by pointer. We may be wrong here as well!
-
-For now, Chrome investment in Rust will remain a background investigation
-(mostly directed towards prototyping these tools and techniques). If we become
-convinced this sort of interoperability is possible, we’ll revisit widespread
-use of Rust in Chrome, and at that point we plan to work hard to achieve this
-with robust production-quality solutions.
-
-(update September 2021) There's progress across the Rust community in solving
-many of these problems - see for example
-[moveit](https://crates.io/crates/moveit),
-[autocxx](https://crates.io/crates/autocxx) and
-[mosaic](https://github.com/google/mosaic/).
diff --git a/chromium/docs/website/site/Home/chromium-security/memory-safety/sat3CHOc8lXZbGicChW6w5Q.png.sha1 b/chromium/docs/website/site/Home/chromium-security/memory-safety/sat3CHOc8lXZbGicChW6w5Q.png.sha1
deleted file mode 100644
index 0323cf48a8c..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/memory-safety/sat3CHOc8lXZbGicChW6w5Q.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2d2f7ec41a96280f6f0a0d5b389ce34c1b2c82b3 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/owp/index.md b/chromium/docs/website/site/Home/chromium-security/owp/index.md
deleted file mode 100644
index 95457fa0a66..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/owp/index.md
+++ /dev/null
@@ -1,116 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: owp
-title: Web Platform Security
----
-
-Developers should have the tools necessary to defend their creations against the
-wide spectrum of maliciousness thrown at them on a daily basis. We design and
-implement platform-level features that enable a robust defense, and work in
-standards bodies to get them in front of as many developers as possible.
-
-[TOC]
-
-## Features we're working on
-
-### Content Security Policy
-
-We've shipped [Content Security Policy Level 2](http://www.w3.org/TR/CSP2/) as
-of Chrome 42, and we're starting to put together the vision for the next
-iteration of the standard. You can follow along at
-<https://github.com/w3c/webappsec-csp>. Firefox has support for most of CSP2 as
-well.
-
-### Subresource Integrity
-
-We've shipped [Subresource Integrity](http://www.w3.org/TR/SRI/) as of Chrome
-46. This feature should also be shipping in Firefox ~43, which is exciting to
-see.
-
-### Upgrade Insecure Requests
-
-We've shipped [Upgrade Insecure
-Requests](http://www.w3.org/TR/upgrade-insecure-requests/) as of Chrome 44. This
-feature should also be shipping in Firefox 42, which will give us a fairly broad
-base of support.
-
-### Mixed Content
-
-We've been steadily tightening our [Mixed
-Content](http://www.w3.org/TR/mixed-content/) blocking over the last ~18 months.
-The specification has broad approval from other vendors, who are generally
-aligning with Chrome's behavior over time.
-
-### Cookies
-
-We have a number of cookie-related proposals floating around that we're building
-support for in the IETF's HTTPbis group:
-
- [Deprecating modification/creation of "Secure" cookies on non-secure
- origins](https://tools.ietf.org/html/draft-west-leave-secure-cookies-along)
- strengthen the security properties of cookies with the Secure attribute.
-
- [SameSite](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00)
- cookies provide a defense against various forms of CSRF
-
- [Cookie Prefixes](https://tools.ietf.org/html/draft-west-cookie-prefixes)
- might provide a mitigation for the integrity and confidentiality limitations
- of cookies' delivery model.
-
- [Origin cookies](https://tools.ietf.org/html/draft-west-origin-cookies) are
- a slightly more robust model than the prefix proposal, but also seem less
- likely to be adopted, so. Belts and suspenders.
-
-### Credential Management
-
-We're working with Chrome's password manager team to define an imperative API
-for interaction with the browser's stored credentials. The spec is progressing
-nicely at <https://w3c.github.io/webappsec-cred» and the feature is mostly
-implemented behind `chrome://flags/#enable-credential-manager-api`. >
-
-### Referrer Policy
-
-[Referrer Policy](https://w3c.github.io/webappsec-referrer-policy/) shipped in
-Chrome a long time ago, and the new bits we've added to the spec are trickling
-out over time.
-
-We need to do some refactoring in order to consistently apply referrer policy
-for redirects (basically hoisting the parsing and processing up out of Blink and
-into the network stack). Hopefully we'll get that done in Q4 (2015).
-
-### Secure Contexts
-
-[Secure Contexts](https://w3c.github.io/webappsec-secure-contexts/) underlies
-our commitment to [prefer secure origins for powerful new
-features](/Home/chromium-security/prefer-secure-origins-for-powerful-new-features).
-We've shipped the concept of a "secure context" in Chrome, and are working over
-time to [deprecate a set of APIs in insecure
-contexts](/Home/chromium-security/deprecating-powerful-features-on-insecure-origins).
-`getUserMedia()` is unavailable over HTTP as of Chrome 47, and we've got our eye
-on geolocation next.
-
-### Clear Site Data
-
-We've specified and implemented a feature to allow developers to clear out the
-data a browser has stored for their origin at
-<https://w3c.github.io/webappsec-clear-site-data/>.
-
-### Entry Point Regulation
-
-We've specified EPR as a defense against CSRF, and hope to get to a prototype
-implementation soonish.(this hasn't made progress in a few years)
-
-## Come work with us!
-
-If any of the above work resonates with you, come help us! We're hiring in
-Munich, Germany, which is [a wonderful place to work
-indeed](https://www.google.com/about/careers/locations/munich/). There's a
-[generic software engineering job
-description](https://www.google.com/about/careers/search#!t=jo&jid=43144&), but
-the best way to get noticed is probably to ping
-[@mikewest](https://twitter.com/mikewest) on Twitter, or drop him an email at
-[mkwst@google.com](mailto:mkwst@google.com). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/owp/web-platform-security-backlog/index.md b/chromium/docs/website/site/Home/chromium-security/owp/web-platform-security-backlog/index.md
deleted file mode 100644
index 4d7368e1953..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/owp/web-platform-security-backlog/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/owp
- - Web Platform Security
-page_name: web-platform-security-backlog
-title: Web Platform Security backlog
----
-
diff --git a/chromium/docs/website/site/Home/chromium-security/pdfium-security/index.md b/chromium/docs/website/site/Home/chromium-security/pdfium-security/index.md
deleted file mode 100644
index a2a0250a6c1..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/pdfium-security/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: pdfium-security
-title: PDFium Security
----
-
-Welcome to PDFium Security!
-
-## Basic Info
-
-* [PDFium project page](https://code.google.com/p/pdfium/)
-* [PDFium Git repository](https://pdfium.googlesource.com/)
-* [Known PDFium security
- issues](https://code.google.com/p/chromium/issues/list?can=2&q=Cr%3DInternals-Plugins-PDF+Type%3DBug-Security+&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&cells=tiles)
- (Please pick 1 and fix it!)
-
-## Integer Overflow
-
-We want to standardize on handling integer overflows by:
-
-1. Preferring new\[\] and new instead of calloc, wherever possible.
-2. In places where the code is not ready to be turned into idiomatic
- C++, preferring calloc to malloc; definitely prefer calloc to malloc
- + memset.
-3. Preferring CheckedNumeric&lt;T&gt; to ad hoc checks.
- * For convenience, use the existing typedefs for clarity, e.g.
- typedef base::CheckedNumeric&lt;FX_DWORD&gt; FX_SAFE_DWORD;. If
- you need more typedefs like this, or if you need them more
- widely visible, don't hesitate to make the change.
-
-Yes, that might look odd. Currently, the codebase mixes C++ and C memory
-allocation, and ultimately, we'd like to get the code to idiomatic C++11, but
-we're going to get there incrementally.
-
-## Uninitialized Memory References
-
-We want to standardize on handling uninitialized memory references with:
-
-1. Default constructors that do the right thing.
-2. Explicit initial values for all POD members in header files.
-
-## Git Workflow
-
-* The top line/subject line of the commit message should always be as
- explicit as possible. Not just "fix bug", but "Fix UAF in
- ModulateFooContainer" or "Fix UMR in thing::DoStuff".
-
-## Future Desiderata
-
-* No more non-const references (especially when used as
- out-parameters).
-* Use std::unique_ptr and pdfium::RetainPtr. No more naked new. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/pgp-key/index.md b/chromium/docs/website/site/Home/chromium-security/pgp-key/index.md
deleted file mode 100644
index ae662d1eee3..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/pgp-key/index.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: pgp-key
-title: PGP Key
----
-
-Sensitive security bug reports should be filed on the [Chromium bug
-tracker](https://bugs.chromium.org/p/chromium/issues/entry?template=Security+Bug).
-Please make sure to select the Security template, as this will ensure the
-correct access controls are in place. However, if you must use email to reach us
-and wish to protect the message in transit, you can use this PGP key and send to
-security@chromium.org
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-mQINBF+mFE8BEACiTDxAa0XtYKJrUc9WAnWKrDOHa8aC/aUNekS7fD64VqW6Y6Pf
-
-R60QRpcmlbeMBzPmSy9zosUjiTz/8qdd9cFscCA47OrU/9MV+tCXg3hWIeFH5d/o
-
-pDZ9pzzbuOGIVn0bgTjPuiA1IcK0o/bSbAv/fxAsnfhAyDnMLRXMtfviatczs4RA
-
-0WZwzkWR0VcNKKq17PW7EscMjQzuabbOnkzLmVgqphXRokwObT0++VwIaJV3lLNF
-
-B2rIyXXRM295Nm9JXgzi9/84jZNOzuKWqMNkMGxwLgLu4quACNHE5gvMn8d32UIn
-
-W34INIYp6OXECk3vfjXiQw6NrAqrmHw1+4AFEEqx29J3D1u0iiVzjvmKkOnaHSJZ
-
-PTyrZhwwesWIga2Q4v7TekLScMYEFhErxF+Hy9gMR+vIQ/kJHM8HT+mI5ws1sS0C
-
-FqlE8NhP4kRV4ktS6VnIynyrTarqp4mlQIsBwe+++fQLGruURjXQ8IlTesyVqV3n
-
-0hcCRWwym5+dmCMAqLCv25/Knqan6ENVbIevNys/4IJ+hBeQ2BZN15ZppN2fPP/3
-
-k08hxXQT00L0KN2AXz1KkEg1t2A4zUyPG3Y+iTAwr/983HYrbvwxjU1ltBmZjFBf
-
-9lgUASGOzzdCjt1Eg2yqh4vCz/MKbK+Qs1E2CHWXsCXKkhHqFe7lX+mfewARAQAB
-
-tIRHb29nbGUgQ2hyb21lIFNlY3VyaXR5IFRlYW0gKFBsZWFzZSBwcmVmZXIgZmls
-
-aW5nIGEgc2VjdXJpdHkgYnVnIGF0IGNyYnVnLmNvbS9uZXcgb3ZlciB1c2luZyBQ
-
-R1AgYW5kIGVtYWlsLikgPHNlY3VyaXR5QGNocm9taXVtLm9yZz6JAlQEEwEKAD4W
-
-IQTXudUVq4807pWu3DxkbOcVMWuGOAUCX6YUTwIbAwUJBrxqAAULCQgHAwUVCgkI
-
-CwUWAgMBAAIeAQIXgAAKCRBkbOcVMWuGOMKyD/9Sd6KneK53YSq8+ThowntP95aF
-
-hC6fekIUit3pz8Z+fXUewaEvH1Q+pNiwIIIEsnsG0yUGl3Xq7WTWM3HrlfEvJL7v
-
-7ynlxwzN/1z9EviIlGIeNm4VkcrVEE5Gh1FR6Gyi+m/YXhMQlU6JLGJjF4VY37Cp
-
-3lEyb4R+7/7YCH307F5uoWRILWfyeJwTAVs8AFJne3J9ghVbWkIMvuTaL0JWzWnS
-
-+YhSE62THyXoi2OBj6ytW1gfiP3akJzYvfAlKjx2rbzGtVXsvrjRHJ87S8x7J0JM
-
-YoityTAcHqHuIYJnBnm0GIl1jFNMnGel+3W/2X6nfiIDCR0zP2YHH2FVRm1TSwh1
-
-PEcPpEM2L/6h9F3niZ2HXLGGo+9R40dPUaapg4atU9qerqMHsXblv8c+lh2sgyNb
-
-MJtn6vRamh7MFRIel66WxTgvkWH3FWmB4XfGI+OCY0T7PU7EHp5CjrCaUosxnVa0
-
-HRMkOGCEasYZTogM1Mzdqti6LcFUCEA7JFw2AZli7LG06vbCF9OOvmEgjWd7t1gC
-
-/GUS8iOrxoEjjyDrbkemz0fhNiiZLgCCveHUVHKsjZXd8qgFasUC3a+ISwd7h7/C
-
-YhEQFUzZvPzxJ5GFbY8n8rDsTMGkpT2UNI2FzZtlmFd1DVZUi8K5ZHHlCNrrZ/Ry
-
-a4cv3Z0lUTpS+in53YkCMwQQAQoAHRYhBIFN5ONXuKtQChzP96c4UdUywga2BQJf
-
-qtl5AAoJEKc4UdUywga2a6sP/2D3UCJvmCX+G+u//3q3D68i101X1EPfNix4Dlez
-
-FdUMD1mO3U3Xl0d42o9bJdJZrxmEuHpw4JAPB5jbGthJpgFdOl+ho50kt8ZI208C
-
-O2W+gJUdTb5NGV6g1rWR0EL+Gxtw+NgXDu8tmgQ7z4fzzuDnb2PFWPzS2o3+SnBI
-
-i1HNq/t+6bfUWtxe3XelPhaMLO12o52EOPTc2RB5JN7MMBR7510JmooUlQc6FJCl
-
-zGyhP6Aml7yNRkeGbVwBfh91jzDHrEUMClQ80pCO7Xa4sgjek3tajKC6EmE3UmPN
-
-u6T1MbEHCB9SCZZRWCg0Vjg5pHYLhAMxWAxiY4+kmDwVsBiWFwqKQ/tQj8tuTdl7
-
-MMt7Ql+GWKs7PUEymhDRLn0V5ZL1goekXQnZ47nZ86v/JhGN87QH2x3R1JSdOufq
-
-i2FJQz8q7uLKAztp4SHTD9K/M2GYBdjlULHxeG7ROlQhDLE6YH+jSCnSBhDJvfHI
-
-LhwExNfUF6SadOD4cKjndiMqeo5UbQlqndy+ozLRVTOxgbT3UI+4hfv+twUDgRsH
-
-50D6ADKQ+n1BK45NzpSV0MV4EPUkQvG1TDE6bvVx9GBDlkE7IROTJT7N3pimtnwR
-
-IZ2q1hk7g+qsDH/29oaZRlWYwdA0Z1096Vt+ShaTO0mEf8CiAiHDSQgx5hWWQ2Cp
-
-70QPuQINBF+mFE8BEADYmBFQPhIgR8b97VXAm/El7/aPQ2p5d+G9qfh4x/VLycLN
-
-hMM5DHK0dR5JkzrT5LUPTYCaoKFH6GiKkTpw7iUc6BQjxdndrBjDuzaN9/Fhxqrf
-
-DllYZFCSNa1ezLeJNmnXZ/lBFtC6H6fyoWEbfwL08cCXc69XTh3+DLLCapfAkw7D
-
-QHrUvYFqIEiMen+Bj1xNPUlVuzOfjhxhjxeaaxmeBrTZF/zwZkB0NHUi43fHbf2A
-
-121rfqg4Banazzf/jgSxdUb8XnHDGqXrBq7sCXBpDHeHCJVqiY7r6DtBgeVbkoX/
-
-uHowGaZ2UFlSlZwCBIdTe6rjcQt+eAOm/aV3W+Vl2sBjSD1XleLSGdzp2LXx7HLd
-
-53Er/vIe3di4Q5m9zQikML4Qvw/z0x/glDZc5aHoWlhOsqHUUOeExRfl+gaE3xOy
-
-xOQQYuy63+C3U++mi6qkYUEtpRoMFcJrkWuPNl4O7ldMLrUcEu7lGWCEptckpmZp
-
-yeX7XLH4VkkBGwXqYHA3pDSqpnoCA/UGhNO4mdQdU+I8cKrYitlAo9rNaLDxFgt7
-
-BvOLwp215D37rOTnOOhovPhSImQsOSS9rZLW3tWAc+zmInBpAJK5V9S5AccuHXNr
-
-INymLBRGSSC/qYrluCSklAoCfmBETdWQwlPIf3FwxWkpcTGmapqd9mbm9AMe/wAR
-
-AQABiQI8BBgBCgAmFiEE17nVFauPNO6Vrtw8ZGznFTFrhjgFAl+mFE8CGwwFCQa8
-
-agAACgkQZGznFTFrhjhE1g//Rbm1dVwTzado9AfGt5vhNGfkcBPW0e3S96JsYNU/
-
-Fl2RE1iGAuFYq7YYmV+/Ha3g75sYzycWWbpV+6fie8ZGaWx5VRcaTrflajpbe7Nf
-
-Gku7XxZg7sDuoYeDtwgkORIxYBhKykbLlQGvSTdj+6PGs1cwmdKa+ENf/nJKWbnY
-
-Ow2Ua6EOL064x0Owkcy6Btig+VFxP92RvYqLGvTVPGUuojy9Oqp6pzpY7HglrBj5
-
-WCVt06T86dL4Ua2Oaqr5gngntK7jbKkWCMzr6/A/t1zKj4c2ihYQspYFRt/llzxQ
-
-kwi9bOKi1RlqQPRp6b/VttNHbZ9F52Q/dKeCU1CN7K5CbcdL1w0ktPMOnIpiIc87
-
-wtd4dNqKBImc3rDf+dMP95HdJGznHg37Tzosukj4ocHEsNoi3JoXbbbHjFMuSqgI
-
-+72IGvc8r1PkpBMfYjQeLWCdntreE/kfmADCW6XmdVdzb7bMmA7ez6hofWbyhjTy
-
-LRugMg669WQi4r4NnTudSgXcMWJbwI69UIrWKVeBFHQlR4TXymSD1hrEWsFz0e6r
-
-Ta+ekKm2nFiUgh2JdzFiQe4Uf9/nGcLgIQAKZQ1q7VV5lN6J6hjCCyr0RxReuYy9
-
-EvceYjRLs1bP3DKliHVyMmcNMU7u8GuSCMU8Tb3T4WlGDhsxyieeabGPkj8XZE3O
-
-ZF0=
-
-=8ojo
-
------END PGP PUBLIC KEY BLOCK----- \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/prefer-secure-origins-for-powerful-new-features/index.md b/chromium/docs/website/site/Home/chromium-security/prefer-secure-origins-for-powerful-new-features/index.md
deleted file mode 100644
index 998207fafd2..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/prefer-secure-origins-for-powerful-new-features/index.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: prefer-secure-origins-for-powerful-new-features
-title: Prefer Secure Origins For Powerful New Features
----
-
-We (Chrome Security) originally sent this out to various browser development
-mailing lists. Here is the canonical location for the original proposal. See
-[this link](https://www.w3.org/TR/powerful-features/) for the current public
-draft spec.
-
-**This is a living document** — as we learn more, we'll probably need to change
-this page.
-
-## Proposal
-
-The Chrome Security team and I propose that, for new and particularly
-powerful web platform features, browser vendors tend to prefer to make
-the the feature available only to secure origins by default.
-
-## Definitions
-
-“Particularly powerful” would mean things like: features that handle
-personally-identifiable information, features that handle high-value information
-like credentials or payment instruments, features that provide the origin with
-control over the UA's trustworthy/native UI, access to sensors on the user's
-device, or generally any feature that we would provide a user-settable
-permission or privilege to. Please discuss!
-
-“Particularly powerful” would **not** mean things like: new rendering and layout
-features, CSS selectors, innocuous JavaScript APIs like *showModalDialog*, or
-the like. I expect that the majority of new work in HTML5 fits in this category.
-Please discuss!
-
-“Secure origins” are origins that match at least one of the following (scheme,
-host, port) patterns:
-
-* `(https, *, *)`
-* `(wss, *, *)`
-* `(*, localhost, *)`
-* `(*, 127/8, *)`
-* `(*, ::1/128, *)`
-* `(file, *, —)`
-* `(chrome-extension, *, —)`
-
-This list may be incomplete, and may need to be changed. Please discuss!
-A bug to define “secure transport” in Blink/Chromium:
-<https://code.google.com/p/chromium/issues/detail?id=362214>
-
-## For Example
-
-For example, Chrome is going to make Service Workers available only to secure
-origins, because it provides the origin with a new, higher degree of control
-over a user's interactions with the origin over an extended period of time, and
-because it gives the origin some control over the user's device as a background
-task.
-
-Consider the damage that could occur if a user downloaded a service worker
-script that had been tampered with because they got it over a MITM’d or spoofed
-cafe wifi connection. What should have been a nice offline document editor could
-be turned into a long-lived spambot, or maybe even a surveillance bot. If the
-script can only run when delivered via authenticated, integrity-protected
-transport like HTTPS, that particular risk is significantly mitigated.
-
-## Background
-
-Legacy platforms/operating systems have a 1-part principal: the user. When a
-user logs in, they run programs that run with the full privilege of the user:
-all of a user’s programs can do anything the user can do on all their data and
-with all their resources. This has become a source of trouble since the rise of
-mobile code from many different origins. It has become less and less acceptable
-for a user’s (e.g.) word processor to (e.g.) read the user’s private SSH keys.
-
-Modern platforms have a 2-part security principal: the user, and the origin of
-the code. Examples of such modern platforms include (to varying degrees) the
-web, Android, and iOS. In these systems, code from one origin has (or, should
-have) access only to the resources it creates and which are explicitly given to
-it.
-
-For example, the Gmail app on Android has access only to the user’s Gmail and
-the system capabilities necessary to read and write that email. Without an
-explicit grant, it does not have access to resources that other apps (e.g.
-Twitter) create. It also does not have access to system capabilities unrelated
-to email. Nor does it have access to the email of another user on the same
-computer.
-
-In systems with 2-part principals, it is crucial to strongly authenticate both
-parts of the principal, not just one part. (Otherwise, the system essentially
-degrades into a 1-part principal system.) This is why, for example, both Android
-and iOS require that every vendor (i.e. origin) cryptographically sign its code.
-That way, when a user chooses to install Twitter and to give Twitter powerful
-permissions (such as access to the device’s camera), they can be sure that they
-are granting such capability only to the Twitter code, and not to just any code.
-
-By contrast, the web has historically made origin authentication optional. On
-the web, origins are defined as having 3 parts: (scheme, host, port), e.g.
-(HTTP, [example.com](http://example.com/), 80) or (HTTPS,
-[mail.google.com](http://mail.google.com/), 443). Many origins use
-unauthenticated schemes like HTTP, WS, or even FTP.
-
-Granting permissions to unauthenticated origins is, in the presence of a network
-attacker, equivalent to granting the permissions to any origin. The state of the
-internet is such that we must indeed assume that a network attacker is present.
-
-## Thank You For Reading This Far!
-
-We welcome discussion, critique, and cool new features! \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/pwnium-2/index.md b/chromium/docs/website/site/Home/chromium-security/pwnium-2/index.md
deleted file mode 100644
index 6b572ba3c7f..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/pwnium-2/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: pwnium-2
-title: Pwnium 2
----
-
-**Chromium Security Reward Program**
-
-**Pwnium2@HITBSecConf2012 Official Rules**
-
-**The Pwnium2@HITBSecConf2012 Chromium Security Reward Program ("Program") is designed to encourage involvement in improving the security of the Chromium project. Participants submit original and unreported exploits relying on security bugs in Chrome alone, or Chrome coupled with Flash / Windows / other software like drivers (an “Exploit”). Rewards will be awarded to participants who submit full and reliable Exploits (or Incomplete Exploits as described below) with critical impact as determined in the sole discretion of the Judges. NO PURCHASE NECESSARY TO ENTER OR WIN. VOID WHERE PROHIBITED.**
-**SPONSOR: The Program is sponsored by Google Inc. (“Google” or "Sponsor"), a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA, 94043, USA.**
-**BINDING AGREEMENT: In order to enter the Program, you must agree to these Official Rules (“Rules”). Therefore, please read these Rules prior to entry and submission to ensure you understand and agree. You agree that submission of an Exploit in the Program constitutes agreement to these Rules. You may not submit an Exploit to the Program and are not eligible to receive the rewards described in these Rules unless you agree to these Rules. These Rules form a binding legal agreement between you and Google with respect to the Program.**
-**ELIGIBILITY: To be eligible to enter the Program, you must be above the age of majority in the country, state, province or jurisdiction of residence (or at least twenty years old in Taiwan) at the time of submission (“You” or “Entrant”). The Program is void in, and not open to residents of, Cuba, Iran, Syria, North Korea or Sudan or to individuals and entities restricted by U.S. export controls and sanctions, and is void in any other nation, state, or province where prohibited or restricted by U.S. or local law.**
-**Employees, interns, contractors, and official office-holders of Google and their subsidiaries, affiliates, and their respective directors, officers, employees, advertising and promotion agencies, representatives, and agents (“Program Entities”), and members of the Program Entities’ and their immediate families (parents, siblings, children, spouses, and life partners of each, regardless of where they live) and members of the households (whether related or not) of such employees, officers and directors are ineligible to participate in the Program. Google reserves the right to verify eligibility and to adjudicate on any dispute at any time. If you are entering as part of a company or on behalf of your employer, these rules are binding on you, individually, and/or your employer. If you are acting within the scope of your employment, as an employee, contractor, or agent of another party, you warrant that such party has full knowledge of your actions and has consented thereto, including your potential receipt of a reward. You further warrant that your actions do not violate your employer’s or company’s policies and procedures.**
-**PROGRAM PERIOD: The Program begins at 10:00 A.M. local time (in Kuala Lumpur, Malaysia) at the HITBSecConf2012 on October 10, 2012 and ends at 2:00 P.M. local time on October 10, 2012 (“Program Period”). Google may extend the Program Period in its sole discretion. ENTRANTS ARE RESPONSIBLE FOR DETERMINING THE CORRESPONDING TIME ZONE IN THEIR RESPECTIVE JURISDICTIONS.**
-**HOW TO ENTER: NO PURCHASE NECESSARY TO ENTER OR WIN. To enter the Program, visit the Google desk at HITBSecConf2012 in Kuala Lumpur, Malaysia during the Program Period. Entrants are entirely responsible for all costs and fees associated with attending the HITBSecConf2012, including (but not limited to) admission fees, transportation, accommodation and living costs. For additional information visit the Program website located at <https://www.chromium.org/Home/chromium-security/pwnium-2> before or during the Program Period and follow the instructions for submitting an Exploit that highlights a critical importance security issue, which has not yet been reported to, or otherwise come to attention of, the Chromium project. The Exploit must meet the “Exploit Requirements,” described below. All entries must be received before the end of the Program Period. Entries are void if they are in whole or part illegible, incomplete, damaged, altered, counterfeit, obtained through fraud, or late. All entries will be deemed made by the authorized account holder of the email address submitted at the time of submission, and potential reward recipients may be required to show proof of being the authorized account holder for that email address. The "authorized account holder" is the natural person assigned to an email address by an Internet service provider, online service provider, or other organization responsible for assigning email address for the domain.**
-**EXPLOIT REQUIREMENTS: The Exploit must meet the following criteria:**
-**• Be an unreported and original exploit, which has not been shared or partially shared with anyone else or submitted in any other contests until it has been submitted to, and judged by, Google.**
-**• Be an exploit relying on an unreported and original bug, bugs or security feature in Chrome or in Chrome when used in connection with Windows, Flash or other software e.g. drivers.**
-**• Be a remote exploit accessible through the Chrome browser, which works and is reliable.**
-**• Be present in the most recent supported channel(s) of Chrome, running on the latest version of Windows7 on the provided test machine.**
-**• Be a critical vulnerability of high impact.**
-**• Be authored or created by You.**
-**• Be submitted with corresponding documentation that details each bug exploited.**
-**During the Program Period, Google and/or its agents will be evaluating each Exploit to ensure that it meets the Exploit Requirements. Google reserves the right, in its sole discretion, to disqualify any entrant who submits an Exploit that does not meet the Exploit Requirements.**
-**JUDGING: Each Exploit submission will be judged by a panel of experts who are employees of Google (“Judges”). Each Exploit will be evaluated by the Judges as to whether the Exploit is a critical importance vulnerability of high impact based on the potential for persistent access to the user’s account on the Windows operating system.**
-**Judges will evaluate each Exploit based upon the above criteria to determine whether it is critical impact and qualifies for a reward. Rewards will be allocated on a first-come-first-served basis, based on time of submission during the Program Period specified above, until such time as the total reward pool of $2,000,000 USD (two million U.S. dollars) is exhausted.**
-**In the event a potential reward recipient is disqualified for any reason, the reward allocated to that recipient will be returned to the total reward pool. The potential reward recipients will be selected and notified by telephone and/or email, at Sponsor’s discretion. If a potential reward recipient does not respond to the notification attempt within five days from the first notification attempt, then such potential recipient may be disqualified and their allocated reward will be returned to the total reward pool. With respect to notification by telephone, such notification will be deemed given when the potential reward recipient engages in a live conversation with Sponsor or when a message is left on the potential reward recipient’s voicemail service or answering machine by the Sponsor, whichever occurs first. Except where prohibited by law, each potential reward recipient may be required to sign and return a Declaration of Eligibility and Liability and Publicity Release and provide any additional information that may be required by Sponsor. If required, potential reward recipients must return all such required documents within seven days following attempted notification or such potential reward recipient may be deemed to have forfeited the reward and the reward may be returned to the total reward pool. In the event the potential reward recipient is a minor, his or her parent or legal guardian must sign the documents and return them as described herein. All notification requirements, as well as other requirements within these Rules, will be strictly enforced. In the event that no Exploits are received, no rewards will be awarded. Determinations of judges are final and binding.**
-**REWARDS:**
-**An Entrant submitting an Exploit demonstrating a critical importance high impact Chrome / Win7 local OS user account persistence using only bugs in Chrome itself (a “Full Chrome Exploit”), as determined in the sole discretion of the Judges, will receive a reward of $60,000 USD (sixty thousand U.S. dollars).**
-**An Entrant submitting an Exploit demonstrating a critical importance high impact Chrome / Win7 local OS user account persistence using at least one bug in Chrome plus bugs in other software (e.g. a WebKit bug combined with a Windows kernel bug) (a “Partial Chrome Exploit”), as determined in the sole discretion of the Judges, will receive a reward of $50,000 USD (fifty thousand U.S. dollars).**
-**An Entrant submitting an Exploit demonstrating a critical importance high impact Chrome / Win7 local OS user account persistence using only bugs not found in Chrome (e.g. bugs in Flash / Windows / drivers) (a “Non Chrome Exploit”), as determined in the sole discretion of the Judges, will receive a reward of $40,000 USD (forty thousand U.S. dollars).**
-**An Entrant submitting an unreliable or incomplete Exploit demonstrating a critical importance high impact Chrome / Win7 local OS user account persistence (e.g. code execution inside a sandbox but not sandbox escape; or sandbox escape in isolation) (a “Incomplete Exploit”), as determined in the sole discretion of the Judges, may receive a reward in an amount to be determined by the judges.**
-**Each reward recipient will also receive a ChromeOS netbook, provided they reside in a country to which ChromeOS netbooks can be legally shipped.**
-**All rewards are contingent on Entrant's compliance with these Rules. The rewards will be awarded within approximately two weeks of receipt by Sponsor of final reward acceptance documents. No transfer, substitution or cash equivalent for rewards is allowed, except at Sponsor’s sole discretion. Sponsor reserves the right to substitute a reward, in whole or in part, of equal or greater monetary value if a reward cannot be awarded, in whole or in part, as described for any reason. Value is subject to market conditions, which can fluctuate and any difference between actual market value and ARV will not be awarded. The reward(s) may be subject to restrictions and/or licenses and may require additional hardware, software, service, or maintenance to use. The reward recipient shall bear all responsibility for use of the rewards(s) in compliance with any conditions imposed by such manufacturer(s), and any additional costs associated with its use, service, or maintenance. Program Entities have not made and Program Entities are not responsible in any manner for any warranties, representations, or guarantees, express or implied, in fact or law, relating to the reward(s), regarding the use, value or enjoyment of the reward(s), including, without limitation, its quality, mechanical condition, merchantability, or fitness for a particular purpose, with the exception of any standard manufacturer's warranty that may apply to the reward or any components thereto.**
-**TAXES: PAYMENTS TO POTENTIAL REWARD RECIPIENTS ARE SUBJECT TO THE EXPRESS REQUIREMENT THAT THEY SUBMIT TO GOOGLE ALL DOCUMENTATION REQUESTED BY GOOGLE TO PERMIT IT TO COMPLY WITH ALL APPLICABLE STATE, FEDERAL, LOCAL, PROVINCIAL AND FOREIGN TAX REPORTING AND WITHHOLDING REQUIREMENTS. ALL REWARDS WILL BE NET OF ANY TAXES GOOGLE IS REQUIRED BY LAW TO WITHHOLD. ALL TAXES IMPOSED ON REWARDS ARE THE SOLE RESPONSIBILITY OF THE REWARD RECIPIENTS.**
-**In order to receive a reward, potential reward recipients must submit the tax documentation requested by Google or otherwise required by applicable law, to Google or the relevant tax authority, all as determined by applicable law, including, where relevant, the law of the potential recipient’s country of residence. The potential reward recipients are responsible for ensuring that (s)he complies with all the applicable tax laws and filing requirements. If a potential reward recipient fails to provide such documentation or comply with such laws, the reward may be forfeited and Google may, in its sole discretion, return the reward to the total reward pool.**
-**GENERAL CONDITIONS: All federal, state, provincial and local laws and regulations apply. Google reserves the right to disqualify any entrant from the Program if, in Google’s sole discretion, it reasonably believes that the entrant has attempted to undermine the legitimate operation of the Program by cheating, deception, or other unfair playing practices or annoys, abuses, threatens or harasses any other entrants, Google, or the Judges.**
-**INTELLECTUAL PROPERTY RIGHTS: As between Google and the entrant, the entrant retains ownership of all intellectual and industrial property rights (including moral rights) in and to the Exploit. As a condition of submission, entrant grants Google, its subsidiaries, agents and partner companies, a perpetual, irrevocable, worldwide, royalty-free, and non-exclusive license to use, reproduce, adapt, modify, publish, distribute, publicly perform, create a derivative work from, and publicly display the Exploit (1) for the purposes of allowing Google and the Judges to evaluate the Exploit for purposes of the Program, (2) for the purposes of evaluating the Exploit and improving Google and third party products, services, systems and networks and (3) in connection with advertising and promotion via communication to the public or other groups, including, but not limited to, the right to make screenshots, animations and Exploit clips available for promotional purposes.**
-**PRIVACY: Participants agree that personal data entered during the registration, including name, mailing address, phone number, and email address may be processed, stored, shared and otherwise used for the purposes and within the context of the Program. This data will also be stored in / transferred into the United States. By entering, entrants agree to the transmission, processing, sharing and storage of this personal data in the United States. Participants also understand this data may be used by Sponsor in order to verify an Entrant’s identity, postal address and telephone number in the event a submission qualifies for a reward. Participants have the right to access, review, rectify or cancel any personal data held by Google in connection with the Program by writing to Google at the address listed above. If a participant does not provide the data require at registration, that participant’s submission will be ineligible. Otherwise, all personal information that is collected from the entrant is subject to Google’s Privacy Policy, located at http://www.google.com/privacy.html. By accepting a reward, participant agrees and consents to Google and its agencies use of entrant’s name and/or likeness to name the entrant for a reasonable time after completion of the Program in promotional and advertising material of Google (or its agents) as a recipient of a reward of the Program without additional compensation, unless prohibited by law. For residents of the EU: pursuant to EU law pertaining to data collection and processing, you are informed that: - the data controller is Google and the data recipients are Google and its agents; - your data is collected for purposes of administration of the Program and for marketing purposes; - you have a right of access to and withdrawal of your personal data. You also have a right of opposition to the data collection, under certain circumstances. To exercise such right, you may write to security@chromium.org.**
-**PUBLICITY: By accepting a reward, Entrant agrees to Sponsor and its agencies use of his or her name and/or likeness and Exploit for advertising and promotional purposes without additional compensation, unless prohibited by law.**
-**WARRANTY AND INDEMNITY: Participants warrant that their Exploits are their own original work and, as such, they are the sole and exclusive owner and rights holder of the submitted Exploit and that they have the right to submit the Exploit in the Program and grant all required licenses. Each entrant agrees not to submit any Exploit that (1) infringes any third party proprietary rights, intellectual property rights, industrial property rights, personal or moral rights or any other rights, including without limitation, copyright, trademark, patent, trade secret, privacy, publicity or confidentiality obligations; or (2) otherwise violates the applicable state, federal, provincial or local law.**
-**To the maximum extent permitted by law, each Entrant indemnifies and agrees to keep indemnified Sponsor at all times from and against any liability, claims, demands, losses, damages, costs and expenses resulting from any act, default or omission of the Entrant and/or a breach of any warranty set forth herein. To the maximum extent permitted by law, each Entrant agrees to defend, indemnify and hold harmless the Sponsor from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from (a) any or other material uploaded or otherwise provided by the entrant that infringes any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy, (b) any misrepresentation made by the entrant in connection with the Program; (c) any non-compliance by the entrant with these Rules; (d) claims brought by persons or entities other than the parties to these Rules arising from or related to the Entrant’s involvement with the Program; (e) acceptance, possession, misuse or use of any reward or participation in any Program-related activity or participation in this Program; (f) any malfunction or other problem with the Program site; (g) any error in the collection, processing, or retention of submission information; or (h) any typographical or other error in the printing, offering or announcement of any reward or reward recipients.**
-**ELIMINATION: Any false information provided within the context of the Program by any Entrant concerning identity, mailing address, telephone number, email address, ownership of right or non-compliance with these Rules or the like may result in the immediate elimination of the entrant from the Program.**
-**NETWORK: Sponsor is not responsible for any malfunction of the entire Program site or any late, lost, damaged, misdirected, incomplete, illegible, undeliverable, or destroyed Exploits due to system errors, failed, incomplete or garbled computer or other telecommunication transmission malfunctions, hardware or software failures of any kind, lost or unavailable network connections, typographical or system/human errors and failures, technical malfunction(s) of any telephone network or lines, cable connections, satellite transmissions, servers or providers, or computer equipment, traffic congestion on the Internet or at the Program site, or any combination thereof, including other telecommunication, cable, digital or satellite malfunctions which may limit an entrant’s ability to participate.**
-**RIGHT TO CANCEL, MODIFY OR DISQUALIFY: If for any reason the Program is not capable of running as planned, including infection by computer virus, bugs, tampering, unauthorized intervention, fraud, technical failures, or any other causes which corrupt or affect the administration, security, fairness, integrity, or proper conduct of the Program, Google reserves the right at its sole discretion to cancel, terminate, modify or suspend the Program. Google further reserves the right to disqualify any entrant who tampers with the submission process or any other part of the Program or Program site. Any attempt by an entrant to deliberately damage any web site, including the Program site, or undermine the legitimate operation of the Program is a violation of criminal and civil laws and should such an attempt be made, Google reserves the right to seek damages from any such entrant to the fullest extent of the applicable law.**
-**NOT AN OFFER OR CONTRACT OF EMPLOYMENT: Under no circumstances shall the submission of a Exploit into the Program, the awarding of a reward, or anything in these Rules be construed as an offer or contract of employment with either Google, or any other Program entities. You acknowledge that you have submitted your Exploit voluntarily and not in confidence or in trust. You acknowledge that no confidential, fiduciary, agency or other relationship or implied-in-fact contract now exists between you and Google or any other Program entities and that no such relationship is established by your submission of an Exploit under these Rules.**
-**FORUM AND RECOURSE TO JUDICIAL PROCEDURES: These Rules shall be governed by, subject to, and construed in accordance with the laws of the State of California, United States of America, excluding all conflict of law rules. If any provision(s) of these Rules are held to be invalid or unenforceable, all remaining provisions hereof will remain in full force and effect. To the extent permitted by law, the rights to litigate, seek injunctive relief or make any other recourse to judicial or any other procedure in case of disputes or claims resulting from or in connection with this Program are hereby excluded, and all Participants expressly waive any and all such rights.**
-**ARBITRATION: By entering the Program, you agree that exclusive jurisdiction for any dispute, claim, or demand related in any way to the Program will be decided by binding arbitration. All disputes between you and Google of whatsoever kind or nature arising out of these Rules, shall be submitted to Judicial Arbitration and Mediation Services, Inc. (“JAMS”) for binding arbitration under its rules then in effect in the San Jose, California, USA area, before one arbitrator to be mutually agreed upon by both parties. The parties agree to share equally in the arbitration costs incurred.**
-**REWARD RECIPIENT’S LIST: Reward recipients will be posted on the Program site
-for three months following the conclusion of the Program.**
diff --git a/chromium/docs/website/site/Home/chromium-security/pwnium-3/index.md b/chromium/docs/website/site/Home/chromium-security/pwnium-3/index.md
deleted file mode 100644
index 72da8df7721..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/pwnium-3/index.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: pwnium-3
-title: Pwnium 3
----
-
-**Chromium Security Reward Program**
-
-**Pwnium3@CanSecWest2013 Official Rules**
-
-**The Pwnium3@CanSecWest2013 Chromium Security Reward Program ("Program") is designed to encourage involvement in improving the security of the Chromium project. Participants submit original and unreported exploits relying on security bugs in Chrome OS including Chrome coupled with Flash / Chrome OS kernel and firmware / default apps on Chrome OS (an “Exploit”). Rewards will be awarded to participants who submit full and reliable Exploits (or Incomplete Exploits as described below) with critical impact as determined in the sole discretion of the Judges. NO PURCHASE NECESSARY TO ENTER OR WIN. VOID WHERE PROHIBITED.**
-**SPONSOR: The Program is sponsored by Google Inc. (“Google” or "Sponsor"), a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA, 94043, USA.**
-**BINDING AGREEMENT: In order to enter the Program, you must agree to these Official Rules (“Rules”). Therefore, please read these Rules prior to entry and submission to ensure you understand and agree. You agree that submission of an Exploit in the Program constitutes agreement to these Rules. You may not submit an Exploit to the Program and are not eligible to receive the rewards described in these Rules unless you agree to these Rules. These Rules form a binding legal agreement between you and Google with respect to the Program.**
-**ELIGIBILITY: To be eligible to enter the Program, you must be above the age of majority in the country, state, province or jurisdiction of residence (or at least twenty years old in Taiwan) at the time of submission (“You” or “Entrant”). The Program is void in, and not open to residents of, Cuba, Iran, Syria, North Korea or Sudan or to individuals and entities restricted by U.S. export controls and sanctions, and is void in any other nation, state, or province where prohibited or restricted by U.S. or local law.**
-**Employees, interns, contractors, and official office-holders of Google and their subsidiaries, affiliates, and their respective directors, officers, employees, advertising and promotion agencies, representatives, and agents (“Program Entities”), and members of the Program Entities’ and their immediate families (parents, siblings, children, spouses, and life partners of each, regardless of where they live) and members of the households (whether related or not) of such employees, officers and directors are ineligible to participate in the Program. Google reserves the right to verify eligibility and to adjudicate on any dispute at any time. If you are entering as part of a company or on behalf of your employer, these rules are binding on you, individually, and/or your employer. If you are acting within the scope of your employment, as an employee, contractor, or agent of another party, you warrant that such party has full knowledge of your actions and has consented thereto, including your potential receipt of a reward. You further warrant that your actions do not violate your employer’s or company’s policies and procedures.**
-**PROGRAM PERIOD: The Program begins at 10:00 A.M. local time (in Vancouver, Canada) at the CanSecWest 2013 on March 7th, 2013 and ends at 2:00 P.M. local time on March 7th, 2013 (“Program Period”). Google may extend the Program Period in its sole discretion. ENTRANTS ARE RESPONSIBLE FOR DETERMINING THE CORRESPONDING TIME ZONE IN THEIR RESPECTIVE JURISDICTIONS.**
-**HOW TO ENTER: NO PURCHASE NECESSARY TO ENTER OR WIN. To enter the Program, visit the Google desk at CanSecWest 2013 in Vancouver, Canada during the Program Period. Entrants are entirely responsible for all costs and fees associated with attending the CanSecWest 2013, including (but not limited to) admission fees, transportation, accommodation and living costs. For additional information visit the Program website located at <https://www.chromium.org/Home/chromium-security/pwnium-3> before or during the Program Period and follow the instructions for submitting an Exploit that highlights a critical importance security issue, which has not yet been reported to, or otherwise come to attention of, the Chromium project. The Exploit must meet the “Exploit Requirements,” described below. All entries must be received before the end of the Program Period. Entries are void if they are in whole or part illegible, incomplete, damaged, altered, counterfeit, obtained through fraud, or late. All entries will be deemed made by the authorized account holder of the email address submitted at the time of submission, and potential reward recipients may be required to show proof of being the authorized account holder for that email address. The "authorized account holder" is the natural person assigned to an email address by an Internet service provider, online service provider, or other organization responsible for assigning email address for the domain.**
-**EXPLOIT REQUIREMENTS: The Exploit must meet the following criteria:**
-**• Be an unreported and original exploit, which has not been shared or partially shared with anyone else or submitted in any other contests until it has been submitted to, and judged by, Google.**
-**• Be an exploit relying on an unreported and original bug, bugs or security feature in Chrome OS, Flash or other software e.g. drivers.**
-**• Be an attack that’s demonstrated against a base (WiFi) model of the Samsung Series 5 550 Chromebook, running the latest stable version of Chrome OS.**
-**• Be a remote exploit accessible through the Chrome browser, which works and is reliable.**
-**• Be present in the most recent supported channel(s) of Chrome OS.**
-**• Be a critical vulnerability of high impact.**
-**• Be authored or created by You.**
-**• Be submitted with corresponding documentation that details each bug exploited.**
-**During the Program Period, Google and/or its agents will be evaluating each Exploit to ensure that it meets the Exploit Requirements. Google reserves the right, in its sole discretion, to disqualify any entrant who submits an Exploit that does not meet the Exploit Requirements.**
-**JUDGING: Each Exploit submission will be judged by a panel of experts who are employees of Google (“Judges”). Each Exploit will be evaluated by the Judges as to whether the Exploit is a critical importance vulnerability of high impact based on the potential for persistent access to the user’s account or Guest mode on the Chrome operating system.**
-**Judges will evaluate each Exploit based upon the above criteria to determine whether it is critical impact and qualifies for a reward. Rewards will be allocated on a first-come-first-served basis, based on time of submission during the Program Period specified above, until such time as the total reward pool of $3,141,592 USD (PI million U.S. dollars) is exhausted.**
-**In the event a potential reward recipient is disqualified for any reason, the reward allocated to that recipient will be returned to the total reward pool. The potential reward recipients will be selected and notified by telephone and/or email, at Sponsor’s discretion. If a potential reward recipient does not respond to the notification attempt within five days from the first notification attempt, then such potential recipient may be disqualified and their allocated reward will be returned to the total reward pool. With respect to notification by telephone, such notification will be deemed given when the potential reward recipient engages in a live conversation with Sponsor or when a message is left on the potential reward recipient’s voicemail service or answering machine by the Sponsor, whichever occurs first. Except where prohibited by law, each potential reward recipient may be required to sign and return a Declaration of Eligibility and Liability and Publicity Release and provide any additional information that may be required by Sponsor. If required, potential reward recipients must return all such required documents within seven days following attempted notification or such potential reward recipient may be deemed to have forfeited the reward and the reward may be returned to the total reward pool. In the event the potential reward recipient is a minor, his or her parent or legal guardian must sign the documents and return them as described herein. All notification requirements, as well as other requirements within these Rules, will be strictly enforced. In the event that no Exploits are received, no rewards will be awarded. Determinations of judges are final and binding.**
-**REWARDS:**
-**An Entrant submitting an Entry demonstrating an exploit against Chrome OS delivered via a web page and triggerable when browsing in Guest mode and affecting all subsequent Guest mode sessions across reboots (“persistent Guest-to-Guest exploit”) using bugs in Chrome OS, as determined in the sole discretion of the Judges, will receive a reward of $150,000 USD (one hundred and fifty thousand U.S. dollars).**
-**An Entrant submitting an Exploit demonstrating a critical importance high impact Chrome browser level compromise delivered via a web page using only bugs in Chrome OS as determined in the sole discretion of the Judges, will receive a reward of $110,000 USD (one hundred and ten thousand U.S. dollars).**
-**Each reward recipient will also receive a Chromebook, provided they reside in a country to which Chromebooks can be legally shipped.**
-**All rewards are contingent on Entrant's compliance with these Rules. The rewards will be awarded within approximately two weeks of receipt by Sponsor of final reward acceptance documents. No transfer, substitution or cash equivalent for rewards is allowed, except at Sponsor’s sole discretion. Sponsor reserves the right to substitute a reward, in whole or in part, of equal or greater monetary value if a reward cannot be awarded, in whole or in part, as described for any reason. Value is subject to market conditions, which can fluctuate and any difference between actual market value and ARV will not be awarded. The reward(s) may be subject to restrictions and/or licenses and may require additional hardware, software, service, or maintenance to use. The reward recipient shall bear all responsibility for use of the rewards(s) in compliance with any conditions imposed by such manufacturer(s), and any additional costs associated with its use, service, or maintenance. Program Entities have not made and Program Entities are not responsible in any manner for any warranties, representations, or guarantees, express or implied, in fact or law, relating to the reward(s), regarding the use, value or enjoyment of the reward(s), including, without limitation, its quality, mechanical condition, merchantability, or fitness for a particular purpose, with the exception of any standard manufacturer's warranty that may apply to the reward or any components thereto.**
-**TAXES: PAYMENTS TO POTENTIAL REWARD RECIPIENTS ARE SUBJECT TO THE EXPRESS REQUIREMENT THAT THEY SUBMIT TO GOOGLE ALL DOCUMENTATION REQUESTED BY GOOGLE TO PERMIT IT TO COMPLY WITH ALL APPLICABLE STATE, FEDERAL, LOCAL, PROVINCIAL AND FOREIGN TAX REPORTING AND WITHHOLDING REQUIREMENTS. ALL REWARDS WILL BE NET OF ANY TAXES GOOGLE IS REQUIRED BY LAW TO WITHHOLD. ALL TAXES IMPOSED ON REWARDS ARE THE SOLE RESPONSIBILITY OF THE REWARD RECIPIENTS.**
-**In order to receive a reward, potential reward recipients must submit the tax documentation requested by Google or otherwise required by applicable law, to Google or the relevant tax authority, all as determined by applicable law, including, where relevant, the law of the potential recipient’s country of residence. The potential reward recipients are responsible for ensuring that (s)he complies with all the applicable tax laws and filing requirements. If a potential reward recipient fails to provide such documentation or comply with such laws, the reward may be forfeited and Google may, in its sole discretion, return the reward to the total reward pool.**
-**GENERAL CONDITIONS: All federal, state, provincial and local laws and regulations apply. Google reserves the right to disqualify any entrant from the Program if, in Google’s sole discretion, it reasonably believes that the entrant has attempted to undermine the legitimate operation of the Program by cheating, deception, or other unfair playing practices or annoys, abuses, threatens or harasses any other entrants, Google, or the Judges.**
-**INTELLECTUAL PROPERTY RIGHTS: As between Google and the entrant, the entrant retains ownership of all intellectual and industrial property rights (including moral rights) in and to the Exploit. As a condition of submission, entrant grants Google, its subsidiaries, agents and partner companies, a perpetual, irrevocable, worldwide, royalty-free, and non-exclusive license to use, reproduce, adapt, modify, publish, distribute, publicly perform, create a derivative work from, and publicly display the Exploit (1) for the purposes of allowing Google and the Judges to evaluate the Exploit for purposes of the Program, (2) for the purposes of evaluating the Exploit and improving Google and third party products, services, systems and networks and (3) in connection with advertising and promotion via communication to the public or other groups, including, but not limited to, the right to make screenshots, animations and Exploit clips available for promotional purposes.**
-**PRIVACY: Participants agree that personal data entered during the registration, including name, mailing address, phone number, and email address may be processed, stored, shared and otherwise used for the purposes and within the context of the Program. This data will also be stored in / transferred into the United States. By entering, entrants agree to the transmission, processing, sharing and storage of this personal data in the United States. Participants also understand this data may be used by Sponsor in order to verify an Entrant’s identity, postal address and telephone number in the event a submission qualifies for a reward. Participants have the right to access, review, rectify or cancel any personal data held by Google in connection with the Program by writing to Google at the address listed above. If a participant does not provide the data require at registration, that participant’s submission will be ineligible. Otherwise, all personal information that is collected from the entrant is subject to Google’s Privacy Policy, located at http://www.google.com/privacy.html. By accepting a reward, participant agrees and consents to Google and its agencies use of entrant’s name and/or likeness to name the entrant for a reasonable time after completion of the Program in promotional and advertising material of Google (or its agents) as a recipient of a reward of the Program without additional compensation, unless prohibited by law. For residents of the EU: pursuant to EU law pertaining to data collection and processing, you are informed that: - the data controller is Google and the data recipients are Google and its agents; - your data is collected for purposes of administration of the Program and for marketing purposes; - you have a right of access to and withdrawal of your personal data. You also have a right of opposition to the data collection, under certain circumstances. To exercise such right, you may write to security@chromium.org.**
-**PUBLICITY: By accepting a reward, Entrant agrees to Sponsor and its agencies use of his or her name and/or likeness and Exploit for advertising and promotional purposes without additional compensation, unless prohibited by law.**
-**WARRANTY AND INDEMNITY: Participants warrant that their Exploits are their own original work and, as such, they are the sole and exclusive owner and rights holder of the submitted Exploit and that they have the right to submit the Exploit in the Program and grant all required licenses. Each entrant agrees not to submit any Exploit that (1) infringes any third party proprietary rights, intellectual property rights, industrial property rights, personal or moral rights or any other rights, including without limitation, copyright, trademark, patent, trade secret, privacy, publicity or confidentiality obligations; or (2) otherwise violates the applicable state, federal, provincial or local law.**
-**To the maximum extent permitted by law, each Entrant indemnifies and agrees to keep indemnified Sponsor at all times from and against any liability, claims, demands, losses, damages, costs and expenses resulting from any act, default or omission of the Entrant and/or a breach of any warranty set forth herein. To the maximum extent permitted by law, each Entrant agrees to defend, indemnify and hold harmless the Sponsor from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from (a) any or other material uploaded or otherwise provided by the entrant that infringes any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy, (b) any misrepresentation made by the entrant in connection with the Program; (c) any non-compliance by the entrant with these Rules; (d) claims brought by persons or entities other than the parties to these Rules arising from or related to the Entrant’s involvement with the Program; (e) acceptance, possession, misuse or use of any reward or participation in any Program-related activity or participation in this Program; (f) any malfunction or other problem with the Program site; (g) any error in the collection, processing, or retention of submission information; or (h) any typographical or other error in the printing, offering or announcement of any reward or reward recipients.**
-**ELIMINATION: Any false information provided within the context of the Program by any Entrant concerning identity, mailing address, telephone number, email address, ownership of right or non-compliance with these Rules or the like may result in the immediate elimination of the entrant from the Program.**
-**NETWORK: Sponsor is not responsible for any malfunction of the entire Program site or any late, lost, damaged, misdirected, incomplete, illegible, undeliverable, or destroyed Exploits due to system errors, failed, incomplete or garbled computer or other telecommunication transmission malfunctions, hardware or software failures of any kind, lost or unavailable network connections, typographical or system/human errors and failures, technical malfunction(s) of any telephone network or lines, cable connections, satellite transmissions, servers or providers, or computer equipment, traffic congestion on the Internet or at the Program site, or any combination thereof, including other telecommunication, cable, digital or satellite malfunctions which may limit an entrant’s ability to participate.**
-**RIGHT TO CANCEL, MODIFY OR DISQUALIFY: If for any reason the Program is not capable of running as planned, including infection by computer virus, bugs, tampering, unauthorized intervention, fraud, technical failures, or any other causes which corrupt or affect the administration, security, fairness, integrity, or proper conduct of the Program, Google reserves the right at its sole discretion to cancel, terminate, modify or suspend the Program. Google further reserves the right to disqualify any entrant who tampers with the submission process or any other part of the Program or Program site. Any attempt by an entrant to deliberately damage any web site, including the Program site, or undermine the legitimate operation of the Program is a violation of criminal and civil laws and should such an attempt be made, Google reserves the right to seek damages from any such entrant to the fullest extent of the applicable law.**
-**NOT AN OFFER OR CONTRACT OF EMPLOYMENT: Under no circumstances shall the submission of a Exploit into the Program, the awarding of a reward, or anything in these Rules be construed as an offer or contract of employment with either Google, or any other Program entities. You acknowledge that you have submitted your Exploit voluntarily and not in confidence or in trust. You acknowledge that no confidential, fiduciary, agency or other relationship or implied-in-fact contract now exists between you and Google or any other Program entities and that no such relationship is established by your submission of an Exploit under these Rules.**
-**FORUM AND RECOURSE TO JUDICIAL PROCEDURES: These Rules shall be governed by, subject to, and construed in accordance with the laws of the State of California, United States of America, excluding all conflict of law rules. If any provision(s) of these Rules are held to be invalid or unenforceable, all remaining provisions hereof will remain in full force and effect. To the extent permitted by law, the rights to litigate, seek injunctive relief or make any other recourse to judicial or any other procedure in case of disputes or claims resulting from or in connection with this Program are hereby excluded, and all Participants expressly waive any and all such rights.**
-**ARBITRATION: By entering the Program, you agree that exclusive jurisdiction for any dispute, claim, or demand related in any way to the Program will be decided by binding arbitration. All disputes between you and Google of whatsoever kind or nature arising out of these Rules, shall be submitted to Judicial Arbitration and Mediation Services, Inc. (“JAMS”) for binding arbitration under its rules then in effect in the San Jose, California, USA area, before one arbitrator to be mutually agreed upon by both parties. The parties agree to share equally in the arbitration costs incurred.**
-**REWARD RECIPIENT’S LIST: Reward recipients will be posted on the Program site
-for three months following the conclusion of the Program.**
diff --git a/chromium/docs/website/site/Home/chromium-security/pwnium-4/index.md b/chromium/docs/website/site/Home/chromium-security/pwnium-4/index.md
deleted file mode 100644
index 09eff14b35b..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/pwnium-4/index.md
+++ /dev/null
@@ -1,364 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: pwnium-4
-title: Pwnium 4
----
-
-Pwnium4@CanSecWest2014
-
-Chromium Security Reward Program
-
-Official Rules
-
-NO PURCHASE NECESSARY TO ENTER OR WIN. VOID WHERE PROHIBITED. CONTEST IS OPEN TO
-RESIDENTS OF THE 50 UNITED STATES, THE DISTRICT OF COLUMBIA AND WORLDWIDE,
-EXCEPT FOR RESIDENTS OF ITALY, BRAZIL, QUEBEC, CUBA, IRAN, SYRIA, NORTH KOREA,
-and SUDAN.
-
-ENTRY IN THIS CONTEST CONSTITUTES YOUR ACCEPTANCE OF THESE OFFICIAL RULES.
-
-The Pwnium4@CanSecWest2014 Chromium Security Reward Program ("Program") is a
-skill contest designed to encourage involvement in improving the security of the
-Chromium project. Entrants submit original and unreported exploits relying on
-security bugs in Chrome OS including Chrome coupled with Flash / Chrome OS
-kernel and firmware / default apps on Chrome OS (an “Exploit”). The Exploits
-entrants develop will be evaluated by judges, who will award rewards to entrants
-who submit full and reliable Exploits (or Incomplete Exploits, as described
-below) with critical impact as determined in the sole discretion of the Judges.
-
-1. BINDING AGREEMENT: In order to enter the Program, you must agree to these
-Official Rules (“Rules”). Therefore, please read these Rules prior to entry to
-ensure you understand and agree. You agree that submission of an Exploit in the
-Program constitutes agreement to these Rules. You may not submit an Exploit to
-the Program and are not eligible to receive the rewards described in these Rules
-unless you agree to these Rules. These Rules form a binding legal agreement
-between you and Google with respect to the Program.
-
-2. ELIGIBILITY: To be eligible to enter the Program, you must be: (1) above the
-age of majority in the country, state, province or jurisdiction of residence (or
-at least twenty years old in Taiwan) at the time of entry; (2) not a resident of
-Italy, Brazil, Quebec, Cuba, Iran, Syria, North Korea, or Sudan; (3) not a
-person or entity under U.S. export controls or sanctions; and (4) have access to
-the Internet as of January 23rd, 2014. Contest is void in Italy, Brazil, Quebec,
-Cuba, Iran, Syria, North Korea, Sudan), and where prohibited by law.
-
-Employees, interns, contractors, and official office-holders of Google, and
-their parent companies, subsidiaries, affiliates, and their respective
-directors, officers, employees, advertising and promotion agencies,
-representatives, and agents (“Program Entities”), and members of the Program
-Entities’ and their immediate families (parents, siblings, children, spouses,
-and life partners of each, regardless of where they live) and members of the
-households (whether related or not) of such employees, officers and directors
-are ineligible to participate in the Program. Google reserves the right to
-verify eligibility and to adjudicate on any dispute at any time.
-
-If you are entering as part of a company or on behalf of your employer, these
-rules are binding on you, individually, and/or your employer. If you are acting
-within the scope of your employment, as an employee, contractor, or agent of
-another party, you warrant that such party has full knowledge of your actions
-and has consented thereto, including your potential receipt of a reward. You
-further warrant that your actions do not violate your employer’s or company’s
-policies and procedures.
-
-3. SPONSOR: The Program is sponsored by Google Inc. (“Google” or "Sponsor"), a
-Delaware corporation with principal place of business at 1600 Amphitheatre
-Parkway, Mountain View, CA, 94043, USA.
-
-4. PROGRAM PERIOD: The Program begins at 10:00:00 A.M. Pacific Time (PT) Zone
-(in Vancouver, Canada) at CanSecWest 2014 on March 12th, 2014 and ends at
-12:00:00 P.M. PT on March 12th, 2014 (“Program Period”). Google may extend the
-Program Period in its sole discretion. ENTRANTS ARE RESPONSIBLE FOR DETERMINING
-THE CORRESPONDING TIME ZONE IN THEIR RESPECTIVE JURISDICTIONS.
-
-5. HOW TO ENTER: NO PURCHASE NECESSARY TO ENTER OR WIN. To enter the Program,
-register before 5:00:00 P.M. PST (Pacific Standard Time) on Monday, March 10th,
-2014 by sending an email with your name to
-[pwnium4@chromium.org](mailto:pwnium4@chromium.org), and then visit the Google
-desk at CanSecWest 2014 in Vancouver, Canada during the Program Period. Entrants
-will be assigned a specific timeslot on March 12th, 2014 during which they may
-demonstrate Exploits to the Judges. Exploits must be demonstrated during
-entrant’s assigned time to be eligible for a reward, and must meet the “Exploit
-Requirements,” described below.
-
-Entrants are entirely responsible for all costs and fees associated with
-entrant’s participation in the Program and attending the CanSecWest 2014,
-including (but not limited to) admission fees, transportation, accommodation and
-living costs. All entries must be received before the end of the Program Period.
-Entries are void if they are in whole or part illegible, incomplete, damaged,
-altered, counterfeit, obtained through fraud, or late. All entries will be
-deemed made by the authorized account holder of the email address submitted at
-the time of submission, and potential reward recipients may be required to show
-proof of being the authorized account holder for that email address. The
-"authorized account holder" is the natural person assigned to an email address
-by an Internet service provider, online service provider, or other organization
-responsible for assigning email address for the domain.
-
-EXPLOIT REQUIREMENTS: The Exploit must meet the following criteria:
-
-• Be an unreported and original exploit, which has not been shared or partially
-shared with anyone else or submitted in any other contests.
-
-• Be an exploit relying on an unreported and original bug, bugs or security
-feature in Chrome OS, Flash or other software e.g. drivers.
-
-• Be an attack that’s demonstrated against a base (WiFi) model of the ARM-based
-HP Chromebook 11, running the latest stable version of Chrome OS; or a 2GB WiFi
-model of the Acer C720 Intel Chromebook, running the latest stable version of
-Chrome OS.
-
-• Be a remote exploit accessible through the Chrome browser, which works and is
-reliable.
-
-• Be served from a password-authenticated and HTTPS-supported Google property,
-such as Google App Engine.
-
-• Be present in the most recent supported channel(s) of Chrome OS.
-
-• Be a critical vulnerability of high impact.
-
-• Be authored or created by You.
-
-• Be submitted with corresponding documentation that details each bug exploited.
-
-During the Program Period, Google, its agents, and/or the Judges (defined below)
-will be evaluating each Exploit to ensure that it meets the Exploit
-Requirements. Google reserves the right, in its sole discretion, to disqualify
-any entrant who submits an Exploit that does not meet the Exploit Requirements.
-
-6. JUDGING: Each Exploit submission will be judged by a panel of experts who are
-employees of Google (“Judges”). Each Exploit will be evaluated by the Judges as
-to whether the Exploit is a critical importance vulnerability of high impact,
-based on the potential for persistent access to the user’s account or guest mode
-on the Chrome operating system.
-
-Judges will evaluate each Exploit based upon the above criteria to determine
-whether it is critical impact and qualifies for a reward.
-
-If a potential reward recipient is disqualified for any reason, the reward
-allocated to that recipient will be returned to the total reward pool. On or
-about March 17th, 2014, the potential reward recipients will be selected and
-notified by telephone and/or email, at Sponsor’s discretion. If a potential
-reward recipient does not respond to the notification attempt within five days
-from the first notification attempt, then such potential reward recipient may be
-disqualified and the allocated reward will be returned to the total reward pool.
-With respect to notification by telephone, such notification will be deemed
-given when the potential reward recipient engages in a live conversation with
-Sponsor or when a message is left on the potential reward recipient’s voicemail
-service or answering machine by the Sponsor, whichever occurs first. Except
-where prohibited by law, each potential reward recipient may be required to sign
-and return a Declaration of Eligibility and Liability and Publicity Release and
-provide any additional information that may be required by Sponsor. If required,
-potential reward recipients must return all such required documents within seven
-days following attempted notification or such potential reward recipient may be
-deemed to have forfeited the reward and the reward may be returned to the total
-reward pool. All notification requirements, as well as other requirements within
-these Rules, will be strictly enforced. In the event no Exploits are received,
-no rewards will be awarded. Determinations of judges are final and binding.
-
-7. REWARDS: Rewards for eligible Exploits will be allocated to eligible entrants
-on a first-come-first-served basis, based on time of submission during the
-Program Period specified above, until such time as the total reward pool of
-$2.71828 million USD is exhausted:
-
-An entrant submitting an Exploit demonstrating a Chrome OS system-level
-compromise delivered via a web page and triggerable when browsing in Guest mode
-and affecting all subsequent Guest mode sessions across reboots (“persistent
-Guest-to-Guest exploit”) using bugs in Chrome OS, as determined in the sole
-discretion of the Judges, will receive a reward of $150,000 USD (one hundred and
-fifty thousand U.S. dollars).
-
-An entrant submitting an Exploit demonstrating a Chrome browser-level compromise
-delivered via a web page using bugs in Chrome OS as determined in the sole
-discretion of the Judges, will receive a reward of $110,000 USD (one hundred and
-ten thousand U.S. dollars).
-
-Google reserves the right to issue partial rewards, in its sole discretion, for
-partial, incomplete or unreliable Exploits. Google may also consider issuing
-significant bonuses for any Entrant who demonstrates a particularly impressive
-or surprising exploit.
-
-Each reward recipient will also receive a Chromebook, provided such reward
-recipient resides in a country where Chromebooks are legally available.
-
-Odds of winning any reward depends on the number of eligible entries received
-during the Program Period and the skill of the entrants. The rewards will be
-awarded within approximately two weeks of receipt by Sponsor of final reward
-acceptance documents. No transfer, substitution or cash equivalent for rewards
-is allowed, except at Sponsor’s sole discretion. Sponsor reserves the right to
-substitute a reward, in whole or in part, of equal or greater monetary value if
-a reward cannot be awarded, in whole or in part, as described for any reason.
-Value is subject to market conditions, which can fluctuate and any difference
-between actual market value and ARV will not be awarded. The reward(s) may be
-subject to restrictions and/or licenses and may require additional hardware,
-software, service, or maintenance to use. The reward recipient shall bear all
-responsibility for use of the rewards(s) in compliance with any conditions
-imposed by such manufacturer(s), and any additional costs associated with its
-use, service, or maintenance. Program Entities have not made and Program
-Entities are not responsible in any manner for any warranties, representations,
-or guarantees, express or implied, in fact or law, relating to the reward(s),
-regarding the use, value or enjoyment of the reward(s), including, without
-limitation, its quality, mechanical condition, merchantability, or fitness for a
-particular purpose, with the exception of any standard manufacturer's warranty
-that may apply to the reward or any components thereto.
-
-9. TAXES: PAYMENTS TO POTENTIAL REWARD RECIPIENTS ARE SUBJECT TO THE EXPRESS
-REQUIREMENT THAT THEY SUBMIT TO GOOGLE ALL DOCUMENTATION REQUESTED BY GOOGLE TO
-PERMIT IT TO COMPLY WITH ALL APPLICABLE STATE, FEDERAL, LOCAL, AND FOREIGN
-(INCLUDING PROVINCIAL) TAX REPORTING AND WITHHOLDING REQUIREMENTS. ALL REWARDS
-WILL BE NET OF ANY TAXES GOOGLE IS REQUIRED BY LAW TO WITHHOLD. ALL TAXES
-IMPOSED ON REWARDS ARE THE SOLE RESPONSIBILITY OF THE REWARD RECIPIENTS. In
-order to receive a reward, potential reward recipients must submit the tax
-documentation requested by Google or otherwise required by applicable law, to
-Google or the relevant tax authority, all as determined by applicable law,
-including, where relevant, the law of the potential recipient’s country of
-residence. The potential reward recipients are responsible for ensuring that
-(s)he complies with all the applicable tax laws and filing requirements. If a
-potential reward recipient fails to provide such documentation or comply with
-such laws, the reward may be forfeited and Google may, in its sole discretion,
-return the reward to the total reward pool.
-
-10. GENERAL CONDITIONS: All federal, state, provincial and local laws and
-regulations apply. Google reserves the right to disqualify any entrant from the
-Program if, in Google’s sole discretion, it reasonably believes that the entrant
-has attempted to undermine the legitimate operation of the Program by cheating,
-deception, or other unfair playing practices or annoys, abuses, threatens or
-harasses any other entrants, Google, or the Judges.
-
-11. INTELLECTUAL PROPERTY RIGHTS: As between Google and the entrant, the entrant
-retains ownership of all intellectual and industrial property rights (including
-moral rights) in and to the Exploit. By submitting an Exploit to the Program,
-the entrant warrants and represents that he or she owns all of the intellectual
-and industrial property rights in and to the Exploit. As a condition of
-submission, entrant grants Google, its subsidiaries, agents and partner
-companies, a perpetual, irrevocable, worldwide, royalty-free, and non-exclusive
-license to use, reproduce, adapt, modify, publish, distribute, publicly perform,
-create a derivative work from, and publicly display the Exploit (1) for the
-purposes of allowing Google and the Judges to evaluate the Exploit for purposes
-of the Program, (2) for the purposes of evaluating the Exploit and improving
-Google and third party products, services, systems and networks and (3) in
-connection with advertising and promotion via communication to the public or
-other groups, including, but not limited to, the right to make screenshots,
-animations and Exploit clips available for promotional purposes.
-
-12. PRIVACY: Entrant acknowledges and agrees that Google may collect, store,
-share and otherwise use personally identifiable information provided during the
-registration process and the Program, including, but not limited to, name,
-mailing address, phone number, and email address. Google will use this
-information in accordance with its Privacy Policy
-(<http://www.google.com/policies/privacy/>), including for administering the
-Program and verifying Participant’s identity, postal address and telephone
-number in the event an entry qualifies for a reward.
-
-Participant’s information may also be transferred to countries outside the
-country of participant's residence, including the United States. Such other
-countries may not have privacy laws and regulations similar to those of the
-country of participant's residence.
-
-If a participant does not provide the mandatory data required at registration,
-Google reserves the right to disqualify the entry.
-
-Participant has the right to request access, review, rectification or deletion
-of any personal data held by Google in connection with the Contest by writing to
-Google at this email address: security@chromium.org.
-
-13. PUBLICITY: By accepting a reward, entrant agrees to Sponsor and its agencies
-use of his or her name and/or likeness and Exploit for advertising and
-promotional purposes without additional compensation, unless prohibited by law.
-
-14. WARRANTY AND INDEMNITY: Entrants warrant that their Exploits are their own
-original work and, as such, they are the sole and exclusive owner and rights
-holder of the submitted Exploit and that they have the right to submit the
-Exploit in the Program and grant all required licenses. Each entrant agrees not
-to submit any Exploit that (1) infringes any third party proprietary rights,
-intellectual property rights, industrial property rights, personal or moral
-rights or any other rights, including without limitation, copyright, trademark,
-patent, trade secret, privacy, publicity or confidentiality obligations; or (2)
-otherwise violates the applicable state, federal, provincial or local law.
-
-To the maximum extent permitted by law, each entrant indemnifies and agrees to
-keep indemnified Sponsor at all times from and against any liability, claims,
-demands, losses, damages, costs and expenses resulting from any act, default or
-omission of the entrant and/or a breach of any warranty set forth herein. To the
-maximum extent permitted by law, each entrant agrees to defend, indemnify and
-hold harmless the Sponsor from and against any and all claims, actions, suits or
-proceedings, as well as any and all losses, liabilities, damages, costs and
-expenses (including reasonable attorneys fees) arising out of or accruing from
-(a) any Esploit or other material uploaded or otherwise provided by the entrant
-that infringes any copyright, trademark, trade secret, trade dress, patent or
-other intellectual property right of any person or defames any person or
-violates their rights of publicity or privacy, (b) any misrepresentation made by
-the entrant in connection with the Program; (c) any non-compliance by the
-entrant with these Rules; (d) claims brought by persons or entities other than
-the parties to these Rules arising from or related to the entrant’s involvement
-with the Program; (e) acceptance, possession, misuse or use of any prize, or
-participation in any Program-related activity or participation in this Program;
-(f) any malfunction or other problem with the Program site; (g) any error in the
-collection, processing, or retention of submission information; or (h) any
-typographical or other error in the printing, offering or announcement of any
-reward or reward recipients.
-
-15. ELIMINATION: Any false information provided within the context of the
-Program by any entrant concerning identity, mailing address, telephone number,
-email address, ownership of right or non-compliance with these Rules or the like
-may result in the immediate elimination of the entrant from the Program.
-
-16. INTERNET: Sponsor is not responsible for any malfunction of the entire
-Program site or any late, lost, damaged, misdirected, incomplete, illegible,
-undeliverable, or destroyed Exploits or entry materials due to system errors,
-failed, incomplete or garbled computer or other telecommunication transmission
-malfunctions, hardware or software failures of any kind, lost or unavailable
-network connections, typographical or system/human errors and failures,
-technical malfunction(s) of any telephone network or lines, cable connections,
-satellite transmissions, servers or providers, or computer equipment, traffic
-congestion on the Internet or at the Program site, or any combination thereof,
-including other telecommunication, cable, digital or satellite malfunctions
-which may limit a participant’s ability to participate.
-
-17. RIGHT TO CANCEL, MODIFY OR DISQUALIFY: If for any reason the Program is not
-capable of running as planned, including infection by computer virus, bugs,
-tampering, unauthorized intervention, fraud, technical failures, or any other
-causes which corrupt or affect the administration, security, fairness,
-integrity, or proper conduct of the Program, Google reserves the right at its
-sole discretion to cancel, terminate, modify or suspend the Program. Google
-further reserves the right to disqualify any entrant who tampers with the
-submission process or any other part of the Program or Program site. Any attempt
-by an entrant to deliberately damage any web site, including the Program site,
-or undermine the legitimate operation of the Program is a violation of criminal
-and civil laws and should such an attempt be made, Google reserves the right to
-seek damages from any such entrant to the fullest extent of the applicable law.
-
-18. NOT AN OFFER OR CONTRACT OF EMPLOYMENT: Under no circumstances shall the
-submission of a Exploit into the Program, the awarding of a reward, or anything
-in these Rules be construed as an offer or contract of employment with either
-Google, or any other Program entities. You acknowledge that you have submitted
-your Exploit voluntarily and not in confidence or in trust. You acknowledge that
-no confidential, fiduciary, agency or other relationship or implied-in-fact
-contract now exists between you and Google or any other Program entities and
-that no such relationship is established by your submission of an Exploit under
-these Rules.
-
-19. FORUM AND RECOURSE TO JUDICIAL PROCEDURES: These Rules shall be governed by,
-subject to, and construed in accordance with the laws of the State of
-California, United States of America, excluding all conflict of law rules. If
-any provision(s) of these Rules are held to be invalid or unenforceable, all
-remaining provisions hereof will remain in full force and effect. To the extent
-permitted by law, the rights to litigate, seek injunctive relief or make any
-other recourse to judicial or any other procedure in case of disputes or claims
-resulting from or in connection with this Program are hereby excluded, and all
-participants expressly waive any and all such rights.
-
-20. ARBITRATION: By entering the Program, you agree that exclusive jurisdiction
-for any dispute, claim, or demand related in any way to the Program will be
-decided by binding arbitration. All disputes between you and Google of
-whatsoever kind or nature arising out of these Rules, shall be submitted to
-Judicial Arbitration and Mediation Services, Inc. (“JAMS”) for binding
-arbitration under its rules then in effect in the San Jose, California, USA
-area, before one arbitrator to be mutually agreed upon by both parties. The
-parties agree to share equally in the arbitration costs incurred.
-
-20. REWARD RECIPIENT’S LIST: Reward recipients will be posted on the Program
-site for six months following the conclusion of the Program. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/quarterly-updates/index.md b/chromium/docs/website/site/Home/chromium-security/quarterly-updates/index.md
deleted file mode 100644
index 938e085e048..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/quarterly-updates/index.md
+++ /dev/null
@@ -1,4092 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: quarterly-updates
-title: Quarterly Updates
----
-
-We post a newsletter-y update quarterly on
-[security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!searchin/security-dev/quarter$20summary%7Csort:date).
-It's an open list, so
-[subscribe](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev)
-if you're interested in updates, discussion, or feisty rants related to Chromium
-security.
-
-## Q4 2021
-
-Greetings,
-
-As we enter the last month of the first quarter of 2022, here's a look back to what Chrome Security was doing in the last quarter of 2021.
-
-**Chrome is hiring for security positions! See [g.co/chrome/hiring](https://g.co/chrome/hiring)** **for more details.**
-
-For extension security, we are working on a telemetry framework that monitors suspicious extension activity and transmits associated signals to Safe Browsing, for users opt-ed into sharing these data. The signals are analyzed server-side (both manual and automated analysis) to detect and mitigate extension abuse patterns.
-
-We proposed a redesigned downloads experience for Chrome on desktop platforms that moves downloads into the toolbar. This would be a better overall user experience and also allow us to build advanced downloads features in the future. We plan to launch the MVP in Q1 2022.
-
-In preparation for an [HTTPS-first world](https://blog.chromium.org/2021/07/increasing-https-adoption.html), we conducted Stable experiments to determine the impact of changing the lock icon (which has been shown to be misleading to users) to a more security-neutral and obviously-clickable icon, with 1% stable results from Chrome 96. Results from this experiment were positive, indicating that the new icon increased engagement with the Page Info surface without regressing user activity or security metrics.
-
-We’re running an experiment to expand Certificate Transparency (CT) enforcement to Chrome for Android, improving our ability to detect malicious certificates and unifying certificate validation across platforms. This experiment is rolling out in Chrome 98.
-
-We launched support for Control Flow Guard on Windows, and continue to make good progress with network process sandboxing on multiple platforms. We’ve also been involved in the “unseasoned PDF” project, which removes NaCl as a dependency from PDFium.
-
-We’re experimenting with Rust in Chrome, to give easier options to write safe code. These experiments aren’t yet switched on in shipping code, but they help us learn what it would take to do so. For example, we’ve landed a memory-safe JSON parser which can save the overhead of creating a utility process.
-
-We continued our progress towards increased isolation between websites and networks on the one hand, and cross-site scripting mitigation on the other. For isolation, we've started a [Private Network Access](https://wicg.github.io/private-network-access/) [experiment](https://groups.google.com/a/chromium.org/g/blink-dev/c/72CK2mxD47c/m/Tl59oNfABwAJ) to ensure that preflights aren't going to cause problems for subresource requests, shipped [COEP: credentialless](https://html.spec.whatwg.org/multipage/origin.html#coep-credentialless), and reworked our [document.domain deprecation plans](https://groups.google.com/a/chromium.org/g/blink-dev/c/_oRc19PjpFo/m/10vHgsmwAQAJ) based on feedback from the ecosystem. For injection, we've solidified the design and implementation of the [Sanitizer API](https://wicg.github.io/sanitizer-api/) (you can poke at it with this handy [Playground](https://sanitizer-api.dev/)!) in coordination with our friends at Mozilla, whose implementation is also proceeding apace.
-
-The Security Architecture team was honored to receive an [IEEE Cybersecurity Award for Practice](https://secdev.ieee.org/2021/ieee-award-ceremony/) for [Site Isolation's impact](https://youtu.be/xopIryMS5Fs) on browser security! We continued work on full Site Isolation on some Android devices, extension and [citadel](https://crbug.com/1286501) enforcements, [ORB](https://github.com/annevk/orb), and [SiteInstanceGroups](https://crbug.com/1195535). We also started designing [Site Isolation for the &lt;webview> tags](https://crbug.com/1267977) used in Chrome Apps and WebUI pages. We updated code to support new plans for [turning on Origin-Agent-Cluster by default](https://groups.google.com/a/chromium.org/g/blink-dev/c/_oRc19PjpFo/m/10vHgsmwAQAJ), which could allow isolating origins instead of sites. For memory safety, we updated several unsafe uses of RenderFrameHost pointers and continued local work with Rust and C++ lifetime annotations.
-
-The Chrome VRP just achieved some new records as we closed out 2021 with close to $3.3 million in total rewards to 115 Chrome VRP researchers for 333 valid unique reports of Chrome browser and Chrome OS security bugs. Of that total, just under just over $3M was rewarded for Chrome browser bugs and $250,500 for Chrome OS bugs, with $45,000 being the highest reward for an individual Chrome OS report and $27,000 for a Chrome browser report. $58,000 was rewarded for security issues discovered by fuzzers contributed by VRP researchers to the [Chrome Fuzzer program](https://bughunters.google.com/about/rules/5745167867576320#fuzzerprogram), the highest reward being $16,000 for [an individual fuzzer-based report](https://crbug.com/1242257). To show our appreciation for helping us keep Chrome safe in 2021, in collaboration with Google VRP, we sent end of year gifts to our Top 20 researchers of 2021 and also [celebrated their achievements publicly on Twitter](https://twitter.com/GoogleVRP/status/1466865149655109641?s=20&t=n_a2eIUW3Y114euQ2PIBUw).
-
-Cheers,
-
-Andrew
-
-## Q3 2021
-
-Greetings,
-
-Here's what the Chrome Security team has been up to in Q3 of this year,
-
-**Chrome is hiring, including for security positions! See [g.co/chrome/hiring](https://g.co/chrome/hiring)**. In particular we're looking for a **[lead security product manager](https://careers.google.com/jobs/results/118648881425588934-lead-product-manager-chrome-security/)** to work with the teams doing all the great things in this update, and more across the Chrome Trust and Safety organisation.
-
-Through a series of in-product integrations and promotions on the new tab page on Desktop and Android, we saw a growth of almost 70% in the number of users who chose to opt-in to [Enhanced Safe Browsing](https://security.googleblog.com/2021/06/new-protections-for-enhanced-safe.html) in Chrome.
-
-We deployed two new machine learning models on Android to detect and block phishing pages: one operates on the contents of the DOM, the other is a TfLite model that operates on the overall appearance of the page. Both models led to a 30+% drop in password reuse on phishing pages and also helped us identify new, previously-unknown phishing pages. Following up from that, in Q4, we’ll try to launch the TfLite model on Desktop platforms also.
-
-We landed protections that disabled installations of Chrome extensions that had been found to be violating Chrome Web Store policies previously but were still enabled on users’ machines.
-
-We ran an experiment to understand whether users respond to a cookie-theft specific warning at the time of download any differently than our regular malware warning, and initial results suggest no change in the warning bypass rate.
-
-To close a loophole currently being abused by a large cookie-theft campaign, we landed changes in [Chrome 96](https://chromiumdash.appspot.com/schedule) to stop circumvention of Chrome’s tracking of referrers.
-
-This quarter we also launched an [experiment](https://blog.chromium.org/2021/07/increasing-https-adoption.html) to remove the padlock icon, a long-misunderstood component of browser security UI. This change will roll out to a small percentage of users gradually in Chrome 94+. We also launched HTTPS-First Mode, a setting that will cause Chrome to load all pages over HTTPS by default.
-
-Chrome is now distributing [Certificate Transparency](https://certificate.transparency.dev/) log lists outside the binary update cycle, allowing faster and more reliable updates. This change will allow us to begin exploring Certificate Transparency on Chrome for Android as well as removing the requirement for all certificates to be logged to Google logs.
-
-Our long-term goal has been to use Chrome’s own certificate verifier and root store on all Chrome platforms. This quarter we began rolling out our certificate verifier and transitional root store on Windows, with a metrics-only trial currently running in Chrome 95. We are also continuing to experiment and investigate compatibility issues on Mac.
-
-To help people understand the domain names to which they’ve connected, we began experimenting with a new heuristic to identify typosquatting domain names such as “googel[.]com”. We also built a new [workflow](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/security/lookalikes/lookalike-domains.md#Automated-warning-removal) for developers of co-owned domains to opt out of warnings for lookalike domain names.
-
-The Platform Security team has started experimenting with Rust in the Chromium tree as part of the memory safety effort. Also in the name of memory safety, we are experimenting with using [WasmBoxC](https://docs.google.com/document/d/1sthYFVXlSQfjLVGNOj0Y1y0H5GedDWS7cPJYodwQd9E/edit?disco=AAAARTZJZlc&usp_dm=true) to create in-process sandboxes. The team is also making progress on sandboxing the network service on Windows, Android, and Linux. And we deprecated and removed an [unsafe IPC pattern](https://bugs.chromium.org/p/chromium/issues/detail?id=1213679). Finally, we are keeping busy by helping review all the new features being launched in Chrome.
-
-The Security Architecture team was excited to launch Site Isolation for additional sites on Android (including those using OAuth or COOP headers) as well as Strict Extension Isolation on desktop; see the [Google Online Security blog](https://security.googleblog.com/2021/07/protecting-more-with-site-isolation.html) and the [Keyword blog](https://blog.google/products/chrome/privacy-and-performance-working-together-chrome/). We are now experimenting with full Site Isolation on Android devices with sufficient RAM. Our work continues on adding more enforcements for extensions, protecting data with [ORB](https://github.com/annevk/orb), isolating sandboxed iframes, and improving [Origin Agent Cluster](https://web.dev/origin-agent-cluster/). On the [memory safety front](https://security.googleblog.com/2021/09/an-update-on-memory-safety-in-chrome.html), we have started local experiments with Rust in the tree, while also investigating approaches for improving C++ memory safety.
-
-To make it easier to deploy [cross-origin isolation](https://web.dev/coop-coep/) deployment easier, we launched [COEP credentialless](https://github.com/WICG/credentiallessness/blob/main/explainer.md) in Chrome 96. We’ve also made good progress on the [COOP same-origin-allow-popups-plus-coep](https://github.com/camillelamy/explainers/blob/main/coi-with-popups.md) spec and started implementation.
-
-We launched the first part of [Private Network Access](https://wicg.github.io/private-network-access/) checks in Chrome 94, which prevents non-secure websites on the public internet from pivoting through users' privileged network positions to make requests to private network resources. We’re planning to extend these protections in the Chrome 98 timeframe to include [a preflight requirement](https://www.chromestatus.com/feature/5737414355058688) ensuring that the private network resource opts-into communication with the public internet. We'll start with devtools warnings and outreach to give websites time to update their devices to respond to the preflights, and hopefully can roll things out more broadly in 2022.
-
-Beyond isolation, we're working with our friends at Mozilla to finalize our implementation of a new [Sanitizer API](https://wicg.github.io/sanitizer-api/), that we hope can be an important tool for developers' mitigation of injection attacks. You can play with both Chrome and Firefox's implementations by flipping the relevant flag, and hopping over to the [https://sanitizer-api.dev/](https://sanitizer-api.dev/) playground.
-
-Cheers,
-
-Andrew
-
-
-## Q1 and Q2 2021
-
-Greetings,
-
-With apologies to those still waiting patiently for our Q1 update, here instead
-is a look back at what the Chrome Security teams have been up to in the first
-half of 2021.
-
-Chrome is hiring, including for security positions! See
-[g.co/chrome/hiring](https://g.co/chrome/hiring). In particular we're looking
-for a [lead security product
-manager](https://careers.google.com/jobs/results/118648881425588934-lead-product-manager-chrome-security/)
-to work with the teams doing all the great things in this update, and more
-across the Chrome Trust and Safety organisation.
-
-The first half of 2021 is trending toward record-setting totals for the Chrome
-[Vulnerability Reward Program](https://g.co/chrome/vrp) (VRP) with the security
-researcher community awarded $1.7M for reporting close to 200 unique, valid
-security bugs. Of these reward-eligible reports, 84 were reports for Critical
-and High severity issues that impacted stable channel users. The Chrome VRP
-continues to be a vital part of our security ecosystem and we greatly appreciate
-the efforts of the Chrome VRP researcher community to help keep Chrome users
-more secure!
-
-In a collaborative effort led by the Google VRP, the new [Google BugHunters
-site](https://bughunters.google.com/) was launched. Chrome bugs can be reported
-via that site, as well as at [crbug.com/new](https://crbug.com/new) using the
-Security Bug template as before.
-
-In collaboration with the other VRP programs across Google, bonuses were paid
-out to VRP researchers impacted by recent payment delays. We are additionally
-working on ways to proactively decrease future delays, and improve the
-efficiency and processes of the program.
-
-In Q1 the Safe Browsing team grew the [Enhanced Safe
-Browsing](https://security.googleblog.com/2020/05/enhanced-safe-browsing-protection-now.html)
-population by more than 400% through in-product integrations with the security
-interstitial pages and Safety Check. We also started using machine learning
-models to protect users who have [real-time Safe Browsing
-lookups](https://security.googleblog.com/2019/12/better-password-protections-in-chrome.html#:~:text=real-time%20phishing%20protection:%20checking%20with%20safe%20browsing%E2%80%99s%20blocklist%20in%20real%20time.)
-against phishing attacks which, along with heuristic-based enforcement, allowed
-us to decrease our phishing false negatives by up to 20%.
-
-We designed improvements to our client-side phishing detection subsystem, which
-will allow us to innovate faster in that area in the coming quarters.
-
-In Q2 we [rolled
-out](https://security.googleblog.com/2021/06/new-protections-for-enhanced-safe.html)
-a new set of protections for Enhanced Safe Browsing users in Chrome 91: Improved
-download protection by offering scanning of suspicious downloads, and better
-protection against untrusted extensions. We continued to see a phenomenal growth
-in the number of users who opt in to Enhanced Safe Browsing to get Chrome’s
-highest level of security.
-
-We helped land improvements to the client-side phishing detection subsystem in
-Chrome 92 which made image-based phishing classification [up to 50 times
-faster](https://blog.chromium.org/2021/07/m92-faster-and-more-efficient-phishing-detection.html).
-And we landed improvements to the Chrome Cleanup Tool to remove new families of
-unwanted software from the users’ machines.
-
-In Chrome 90, we launched a
-[milestone](https://blog.chromium.org/2021/03/a-safer-default-for-navigation-https.html)
-for a secure web: Chrome’s omnibox now defaults to HTTPS when users don’t
-specify a scheme. We later
-[announced](https://blog.chromium.org/2021/07/increasing-https-adoption.html) a
-set of changes to prepare the web for an HTTPS-first future. We’re implementing
-HTTPS-First Mode as an option for Chrome 94, a setting that will cause Chrome to
-automatically upgrade navigations to HTTPS, and show a full-page warning before
-falling back to HTTP. We’ll also be experimenting with a new security indicator
-icon for HTTPS pages in Chrome 93, inspired by our research showing that many
-users don’t understand the security assurances of the padlock icon. Finally, we
-announced a set of guiding principles for protecting and informing users on the
-slice of the web that is still HTTP.
-
-To try out HTTPS-First Mode in Chrome Canary, toggle “Always use secure
-connections” in chrome://settings/security. You can also preview our new HTTPS
-security indicator by enabling “Omnibox Updated connection security indicators”
-in chrome://flags and then re-launching Chrome.
-
-In June, Chrome passed a huge milestone in the history of [Certificate
-Transparency](https://certificate.transparency.dev/). The last certificates
-issued before Chrome required CT logging have now expired. That eliminates a
-hole where a malicious or compromised CA key could backdate a cert to avoid
-logging it. Congratulations to all who've worked on CT over the years, and those
-who continue to keep the ecosystem thriving.
-
-To further strengthen the Certificate Transparency ecosystem, we launched the
-[first
-phase](https://docs.google.com/document/d/1G1Jy8LJgSqJ-B673GnTYIG4b7XRw2ZLtvvSlrqFcl4A/edit#heading=h.7nki9mck5t64)
-of SCT auditing, which helps verify that CT logs are behaving honestly, and
-[designed](https://docs.google.com/document/d/1YTUzoG6BDF1QIxosaQDp2H5IzYY7_fwH8qNJXSVX8OQ/edit)
-and began implementing subsequent phases to improve coverage and reliability. In
-Chrome 94 we’ll launch a change to distribute CT log information to clients
-faster and more reliably, which will help unblock CT enforcement on Chrome for
-Android.
-
-We’ve made progress on under-the-hood improvements to certificates and TLS. We
-[proposed](https://github.com/sleevi/cabforum-docs/tree/profiles) a set of
-changes in the [CA/Browser Forum](https://cabforum.org/) to better specify how
-website (and other) certificates should be structured, and we
-[helped](https://cabforum.org/2021/04/22/ballot-sc42-398-day-re-use-period/)
-[make](https://cabforum.org/2021/06/02/ballot-sc46-sunset-the-caa-exception-for-dns-operator/)
-[improvements](https://cabforum.org/2021/05/01/ballot-sc44-clarify-acceptable-status-codes/)
-such as
-[tightening](https://cabforum.org/2021/06/03/ballot-sc45-wildcard-domain-validation/)
-validation procedures for wildcard certificates and
-[sunsetting](https://cabforum.org/2021/06/30/ballot-sc47v2-sunset-subjectorganizationalunitname/)
-an unvalidated certificate field. We distrusted the Camerfirma CA, initially
-planned for Chrome 90 but later delayed until Chrome 91 due to the exceptional
-circumstances of some Covid-19 related government websites being slow to
-migrate.
-
-On the TLS front, we launched a performance improvement to the latest version of
-TLS — [zero round-trip
-handshakes](https://www.chromestatus.com/feature/5447945241493504) in TLS 1.3 —
-to Canary and Dev. We
-[announced](https://groups.google.com/a/chromium.org/g/blink-dev/c/RShdgyaDoX4/m/JikQYHPuBQAJ)
-and implemented the removal of the obsolete 3DES cipher. Finally, a new privacy
-feature for TLS, [Encrypted Client
-Hello](https://www.chromestatus.com/feature/6196703843581952), is now
-implemented in our TLS library, with integration into Chrome ongoing.
-
-The Open Web Platform Security team implemented and specced a first version of
-the [Sanitizer API](https://wicg.github.io/sanitizer-api/), that will help
-developers avoid pesky XSS bugs. In combination with [Trusted
-Types](https://web.dev/trusted-types/#:~:text=Trusted%20Types%20give%20you%20the,is%20available%20for%20other%20browsers.)
-that we released last year, it will help websites defend against XSS attacks.
-
-CORS-RFC1918 got renamed to Private Network Access. We are ready to ship
-[restrictions on accessing resources from private networks from public HTTP
-pages](https://developer.chrome.com/blog/private-network-access-update/) in
-Chrome 94: public HTTP pages will no longer be able to request resources from
-private networks. We will have a reverse Origin Trial in place until our
-preferred workaround (WebTransport) has shipped. We are also working on the next
-stage of Private Network Access restrictions, where we will send a CORS
-preflight when a public page tries to access a private resource.
-
-CrossOriginIsolated is really difficult to adopt for websites. We’re planning to
-make a few changes to help with deployment. First, we have a new version of
-[COEP](https://html.spec.whatwg.org/multipage/origin.html#coep):
-[credentialless](https://developer.chrome.com/blog/coep-credentialless-origin-trial/)
-currently undergoing an Origin Trial. It will help developers deploy COEP when
-they embed third-party subresources. We’re also working on [anonymous
-iframes](https://github.com/camillelamy/explainers/blob/main/anonymous_iframes.md),
-to deploy COEP on pages that embed legacy 3rd party iframes. And we want to have
-[COOP same-origin-allow-popups + COEP enable
-crossOriginIsolated](https://github.com/camillelamy/explainers/blob/main/coi-with-popups.md)
-to help with OAuth and payment flows support.
-
-In Q1, the Security Architecture team continued work on several Site Isolation
-efforts: isolating sites that use [COOP](https://crbug.com/1018656) or
-[OAuth](https://crbug.com/960888) on Android, metrics for protecting data with
-[ORB](https://github.com/annevk/orb), better handling of about:blank origins and
-tracking of content scripts, and helping with the communications for the
-[Spectre
-proof-of-concept](https://security.googleblog.com/2021/03/a-spectre-proof-of-concept-for-spectre.html)
-and
-[recommendations](https://blog.chromium.org/2021/03/mitigating-side-channel-attacks.html).
-Additionally, [Origin Agent Cluster](https://web.dev/origin-agent-cluster/)
-shipped in Chrome 88, offering process isolation at an origin granularity (for
-performance reasons rather than security). We explored [new
-options](https://chromium-review.googlesource.com/c/chromium/src/+/2782585) for
-memory safety and helped with the
-[MiraclePtr](https://docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_MZ2GsrJNb_dbQ3ZBg/edit?usp=sharing)
-experiments. Finally, we made several stability improvements, continued
-refactoring for [SiteInstanceGroup](https://crbug.com/1195535), and helped
-unblock the
-[MPArch](https://docs.google.com/document/d/1NginQ8k0w3znuwTiJ5qjYmBKgZDekvEPC22q0I4swxQ/edit)
-work.
-
-Q2 saw work improving Site Isolation protections for Origin headers (via request
-initiator enforcements) and extension IPCs. We started several Site Isolation
-related beta trials, including isolating [more](https://crbug.com/1018656)
-[sites](https://crbug.com/960888) on Android and [isolating
-extensions](https://crbug.com/1209417) from each other on desktop. We started an
-early prototype of [isolating same-site sandboxed
-iframes](https://crbug.com/510122) and analyzed metrics for protecting data with
-[ORB](https://github.com/annevk/orb), as well. We also contributed to several
-efforts to improve memory safety in Chrome, solved long-standing speculative
-RenderFrameHost crashes, and improved support for [Origin Agent
-Cluster](https://web.dev/origin-agent-cluster/).
-
-The Platform Security team had a busy first half of the year. We have now
-deployed Hardware-enforced stack protection for Windows (also known as
-Control-flow Enforcement Technology,
-[CET](https://software.intel.com/content/www/us/en/develop/articles/technical-look-control-flow-enforcement-technology.html))
-to most Chrome processes, on supported hardware. CET protects against control
-flow attacks attempting to subvert the return from a function, and we
-[blogged](https://security.googleblog.com/2021/05/enabling-hardware-enforced-stack.html)
-about this earlier in the year.
-
-With the returns from functions now protected by CET, we are making good headway
-in protecting the function calls themselves — indirect calls, or 'icalls' using
-[CFG](https://blog.trailofbits.com/2016/12/27/lets-talk-about-cfi-microsoft-edition/)
-(Control Flow Guard). We have full CFG support for all processes behind a
-compile time flag 'win_enable_cfg_guards = true', so please try it, but in the
-meantime we are working on ironing out performance issues so we can roll it out
-to as many processes as possible.
-
-The stack canary mitigation has been significantly strengthened on Linux and
-Chrome OS. These platforms use the zygote for launching new processes, so the
-secret stack canary value was the same in each process, which means the
-mitigation is useless once an attacker has taken over a single process. The
-stack canaries are now re-randomized in each process.
-
-On macOS, we finished our complete rollout of [our V2 sandbox
-architecture](https://chromium.googlesource.com/chromium/src/sandbox/+/HEAD/mac/seatbelt_sandbox_design.md)
-with the launch of the new GPU process sandbox. That marks the end of a nearly
-four-year project to eliminate the unsandboxed warm-up phase of our processes,
-which reduces the amount of attack surface available to a process. In addition,
-we [enabled macOS
-11’s](https://chromium.googlesource.com/chromium/src/+/46e23c8166086ef63e7d383149d4c91f30b7415e)
-new [RIDL](https://mdsattacks.com/) CPU mitigation for processes that handle
-untrustworthy arbitrary compute jobs (e.g. renderers).
-
-GWP-ASAN is being field trialed on Linux, Chrome OS, and Android. GWP-ASAN is a
-sampling allocation tool designed to detect heap memory errors occurring in
-production with negligible overhead, providing allocation/deallocation/crashing
-stack traces for production crashes. It has already been launched on macOS and
-Windows but hopefully launching on new platforms should help us find and fix
-bugs in platform-specific code.
-
-XFA (the form-filling part of PDF) is now using Blink's garbage collector
-[Oilpan](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/platform/heap/BlinkGCAPIReference.md),
-protecting against use-after-frees in this code. The PDF code is also being
-moved from its own process that uses the legacy Pepper interface (previously
-used for Flash) into the same process as web content.
-
-The work on the network service sandbox continues apace. Previously the sandbox
-technology being used on Windows was the same one used for the renderer (the
-[restricted
-token](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/design/sandbox.md#the-token)
-sandbox). However, this tighter sandbox caused issues with parts of the network
-stack such as Windows Authentication and
-[SSPI](https://docs.microsoft.com/en-us/windows/win32/rpc/security-support-provider-interface-sspi-)
-providers, so we are moving to an LPAC (Less Privilege App Container) sandbox
-which should play much nicer with enterprises.
-
-Speaking of enterprises, we landed a new set of policies to control the use of
-the JIT (Just-In-Time) compiler in [V8](https://v8.dev/) (our JavaScript
-engine). These policies allow enterprises to set a [default
-policy](https://chromeenterprise.google/policies/#DefaultJavaScriptJitSetting)
-and also to
-[enable](https://chromeenterprise.google/policies/#JavaScriptJitAllowedForSites)
-or
-[disable](https://chromeenterprise.google/policies/#JavaScriptJitBlockedForSites)
-JIT for certain sites. The V8 JIT has often been a juicy target for exploit
-writers, and by not having any dynamically generated code we can also enable OS
-mitigations such as CET (see above) and ACG (Arbitrary Code Guard) in renderer
-processes to help prevent bugs from being turned into exploits as easily.
-Disabling the JIT does have some drawbacks on web compatibility and performance
-— but our friends in Edge subsequently wrote a great
-[blog](https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/)
-exploring this debate which we encourage you to read before deploying this
-policy.
-
-In Q1 the extended team working on permissions was excited to start rolling out
-the fruits of several collaborations from last year, including the MVP of the
-Chrome Permission Suggestion Service (CPSS) to suppress
-very-unlikely-to-be-granted prompts, the automatic revocation of notification
-permission on abusive sites, a complete revamp of chrome://settings/content
-pages, and experiments for Permission Chip and one-time permission grants. CPSS
-reduces unwanted interruptions (number of explicit decisions which are
-dismissed, denied or granted) by 20 to 30%. Additionally, the less disruptive
-'chip' permission UI is now live for all users for location permission requests
-and we’re migrating other permissions to the new pattern.
-
-We organized a virtual workshop on next-gen permissions, identifying the core
-themes – modes, automation, and awareness – for future explorations, and we
-conducted our very first qualitative UXR study to better understand users’
-mental models and expectations with permissions
-
-We'll be back to our quarterly update cadence with news from Q3 later in the
-year.
-
-Cheers,
-
-Andrew
-
-## Q4 2020
-
-Greetings,
-
-Even as 2021 is well underway, here's a look back at what Chrome Security was up to in the last quarter of 2020.
-
-Interested in helping to protect users of Chrome, Chromium, and the entire web? We're hiring! Take a look at [g.co/chrome/hiring](https://g.co/chrome/hiring), with several of the roles in Washington, DC: [g.co/chrome/securityprivacydc](https://g.co/chrome/securityprivacydc).
-
-The Usable Security team fully launched a new warning for [lookalike domain names](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/lookalikes/lookalike-domains.md): low-quality or suspicious domains that make it hard for people to understand which website they’re actually visiting. We continued to place some final nails in the coffin of [mixed content](https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html) (insecure subresources on secure pages). Secure pages are no longer allowed to initiate any [insecure downloads](https://blog.chromium.org/2020/02/protecting-users-from-insecure.html) as of Chrome 88. We uncovered some issues with our new [warning on mixed form submissions](https://blog.chromium.org/2020/08/protecting-google-chrome-users-from.html) due to redirects, and this warning will be re-launching in Chrome 88 as well.
-
-With HTTPS adoption continuing to rise, it’s now time to begin treating https:// as the default protocol, so we began implementing a change to the Chrome address bar to default to https:// instead of http:// if the user doesn’t type a scheme. Stay tuned for more information about this change in Q1.
-
-To improve the security of the Certificate Transparency (CT) ecosystem, we began dogfooding an [opt-in approach](https://docs.google.com/document/d/1G1Jy8LJgSqJ-B673GnTYIG4b7XRw2ZLtvvSlrqFcl4A/edit) to audit CT information seen in the wild, and we started [designing](https://docs.google.com/document/d/1YTUzoG6BDF1QIxosaQDp2H5IzYY7_fwH8qNJXSVX8OQ/edit#heading=h.7nki9mck5t64) improvements to make this approach more resilient.
-
-The Chrome Safe Browsing team helped the Chrome for iOS team roll out real-time Safe Browsing protections in Chrome 86 for iOS. Also, in addition to our existing mechanism to disable malicious Chrome Extensions with a large install base, we rolled out a new mechanism that allows us to also disable malware extensions with a small install base.
-
-On the memory safety front, we've been getting ready to ship [Oilpanned](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/heap/BlinkGCAPIReference.md) [XFA](https://en.wikipedia.org/wiki/XFA) and continue to engage with the [MiraclePtr and \*Scan](https://docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_MZ2GsrJNb_dbQ3ZBg/edit#) project. As those initiatives are treating the symptom rather than the cause, we continue to investigate what a safer dialect of C++ would look like, and to improve Rust/C++ interoperability ahead of any possible future rust experiments. Ongoing work on exploit mitigations includes [Control-flow Enforcement Technology](https://newsroom.intel.com/editorials/intel-cet-answers-call-protect-common-malware-threats/), [GWP-ASan](https://chromium.googlesource.com/chromium/src/+/lkgr/docs/gwp_asan.md), and [Control Flow Guard](https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard).
-
-We’re also working on reducing the privilege of the network service sandbox on Windows. We’re planning to do the same on Android later in the year.
-
-[FuzzBench](https://github.com/google/fuzzbench) continues to help the research community benchmark and create more efficient fuzzing engines (e.g. [AFL++ 3.0](https://github.com/AFLplusplus/AFLplusplus/releases/tag/3.0c), [SymQEMU](https://twitter.com/mboehme_/status/1351729922364960770), etc). We added support for [bug-based benchmarking](https://github.com/google/fuzzbench/search?p=1&q=%22type%3A+bug%22) ([sample report](https://www.fuzzbench.com/reports/2020-12-19-bug/index.html)), [fuzzer stats api](https://github.com/google/fuzzbench/pull/648), [saturated corpora testing](https://github.com/google/fuzzbench/pull/760). Our [OSS-Fuzz](https://github.com/google/oss-fuzz) platform now has first-class support for [Python fuzzing](https://google.github.io/oss-fuzz/getting-started/new-project-guide/python-lang/), and continues to grow at a brisk pace ([~400](https://github.com/google/oss-fuzz/tree/master/projects) projects, [25K+](https://bugs.chromium.org/p/oss-fuzz/issues/list?q=-status%3AWontFix%2CDuplicate&can=1) bugs). Based on community feedback, we created a lightweight, standalone [ClusterFuzz python package](https://pypi.org/project/clusterfuzz/) (alpha) for common fuzzing use cases, e.g. stacktrace parsing. We have refactored [AFL fuzzing integration](https://github.com/google/clusterfuzz/pull/2147) to use the [engine interface](https://github.com/google/clusterfuzz/blob/master/src/python/lib/clusterfuzz/fuzz/engine.py). We have been working on a solution to better track vulnerabilities in third-party dependencies. We have also bootstrapped several open source security efforts under the [OpenSSF](https://openssf.org/) foundation, e.g. [security scorecards](https://opensource.googleblog.com/2020/11/security-scorecards-for-open-source.html), [finding critical projects](https://opensource.googleblog.com/2020/12/finding-critical-open-source-projects.html), etc.
-
-We implemented blocking of requests from insecure contexts to private networks (first part of [CORS-RFC1918](https://web.dev/cors-rfc1918-feedback/)), and are analyzing metrics to chart a path to launch.
-
-We introduced the [PolicyContainer](https://github.com/antosart/policy-container-explained) to squash bugs around inheritance of security policies to about:blank, srdoc or javascript documents.
-
-We also implemented a first version of a [Sanitizer API](https://github.com/WICG/sanitizer-api) and started the specification process.
-
-With [CrossOriginOpenerPolicy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) (COOP) and [CrossOriginEmbedderPolicy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy) (COEP) launched, we were able to [re-enable SharedArrayBuffers on Android](https://docs.google.com/document/d/1tXfF0sdMQJPtwc2qEGF_V_z5xiCkP3ayS5ByRz6Rc-A/edit?ts=5f236efa) gated behind crossOriginIsolated (a.k.a COOP+COEP), which Firefox has also done. We have a plan to [deprecate all SAB usage without crossOriginIsolated](https://groups.google.com/a/chromium.org/g/blink-dev/c/1NKvbIj3dq4/m/cdfo-JazBQAJ) in Chrome 91 (with reverse Origin Trial until Chrome 93).
-
-This will require users of SharedArrayBuffers to adopt COOP and COEP. Adopting COEP has proved difficult. We have heard that the deployment of COEP was difficult for a certain number of websites that embed third-party content. We are considering a new form of COEP that might alleviate those issues: [credentialless](https://github.com/mikewest/credentiallessness). To help drive adoption of COOP we moved the [COOP reporting API](https://web.dev/coop-coep/) out of Origin Trial to on by default in Chrome 89.
-
-We have started to collect [metrics](https://deprecate.it/) on dangerous web behaviors, with the hope of driving them down. The first one we’ll likely be looking at is [document.domain](https://github.com/mikewest/deprecating-document-domain).
-
-The Security Architecture team completed the [CORS for content scripts migration](/Home/chromium-security/extension-content-script-fetches) in Chrome 87, removing the allowlist for older extensions and strengthening Site Isolation for all desktop users! Opt-in origin isolation was renamed to [Origin-Keyed Agent Clusters](https://www.chromestatus.com/feature/5683766104162304) and is on track to launch in Chrome 88. We are making progress towards additional Android Site Isolation for OAuth and COOP sites, and we helped secure SkBitmap IPCs against memory bugs. Finally, we have been investing in architecture changes, including [SiteInfo](https://source.chromium.org/chromium/chromium/src/+/HEAD:content/browser/site_instance_impl.h;drc=62f7e7ad10582e60fb724e65dd2b088d4837fe4e;l=28) to better track principals and SiteInstanceGroup to simplify the process model, along with significant reviews for [Multiple Page Architecture](https://docs.google.com/document/d/1NginQ8k0w3znuwTiJ5qjYmBKgZDekvEPC22q0I4swxQ/edit?usp=sharing) and [Multiple Blink Isolates](https://docs.google.com/document/d/1qgDcgQWIXbsJrJUPuqnXv7sy8zf9xrf1ol90D0g7H5o/edit?usp=sharing).
-
-Cheers,
-
-Andrew, on behalf of the Chrome security team
-
-## Q3 2020
-
-Greetings,
-
-Here's an update on what the teams in Chrome Security have been up to in the
-third quarter of 2020.
-
-The Chrome Safe Browsing team continued the [roll-out of Enhanced Safe
-Browsing](https://security.googleblog.com/2020/05/enhanced-safe-browsing-protection-now.html)
-by launching it on Android in Chrome 86, and [releasing a
-video](https://www.youtube.com/watch?v=w8uNzQqsTrU) with background on the
-feature. We also launched [deep scanning of suspicious
-downloads](https://security.googleblog.com/2020/09/improved-malware-protection-for-users.html),
-initially for users of Google’s Advanced Protection program, which received
-[positive
-coverage](https://www.theverge.com/2020/9/16/21439599/google-chrome-scan-malicious-files-safe-browsing-advanced-protection).
-
-This quarter the Usable Security team vanquished a longtime foe: http://
-subresources on https:// pages. [Mixed
-content](https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html)
-is either upgraded to https:// or blocked. We also built new warnings for [mixed
-forms](https://blog.chromium.org/2020/08/protecting-google-chrome-users-from.html)
-and continued rolling out [mixed download
-blocking](https://blog.chromium.org/2020/02/protecting-users-from-insecure.html).
-These launches protect users’ privacy and security by decreasing plaintext
-content that attackers can spy on or manipulate.
-
-In Chrome 86, we are beginning a gradual rollout of a new low-confidence warning
-for lookalike domains. We also expanded our existing [lookalike
-interstitial](https://blog.chromium.org/2019/06/new-chrome-protections-from-deception.html).
-
-Finally, we rolled out a 1% Chrome 86
-[experiment](https://blog.chromium.org/2020/08/helping-people-spot-spoofs-url.html)
-to explore how simplifying the URL in the address bar can improve security
-outcomes.
-
-The Platform Security team continued to move forward on memory safety: With Rust
-currently not approved for use in Chromium, we must try to improve C++. Toward
-that end, the [PDFium
-Oilpan](https://docs.google.com/document/d/1WiZCu0D2RvdpBkYuUdL571oFlj0kSaXU1HhdoL7438Y/edit#heading=h.v9as6odlrky3)
-and
-[MiraclePtr/\*Scan](https://docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_MZ2GsrJNb_dbQ3ZBg/edit)
-projects are moving forward quickly and ready to try in Q4 and Q1 2021.
-
-In Sandboxing news, we made changes to Linux and our calling code to handle
-coming glibc changes, servicifying the Certificate Verifier (unblocking work to
-isolate the network service), and getting a better grip on Mojo.
-
-Bugs-- has started encouraging Chrome developers to submit vulnerability
-analysis after the bug is fixed
-([example](https://bugs.chromium.org/p/chromium/issues/detail?id=1126424#c41)).
-This guides our future work on eliminating common bug patterns. We
-cross-collaborated with fuzzing teams across Google to host 50 summer interns,
-with strong impact across Chrome and other critical open source software (see
-[blog
-post](https://opensource.googleblog.com/2020/10/fuzzing-internships-for-open-source.html)).
-We have added automated regression testing of past fixed crashes for
-engine-based fuzzers (e.g. libFuzzer, AFL). We have made several changes to our
-underlying fuzzing and build infrastructures - UI improvements, Syzkaller
-support, OSS-Fuzz builder rewrite, etc. Lastly, we continue to push fuzzing
-research across the industry using our FuzzBench benchmarking platform and have
-led to improvements in
-[AFL++](https://github.com/google/fuzzbench/commits?author=vanhauser-thc),
-[libFuzzer](https://github.com/google/fuzzbench/commits?author=dokyungs) and
-[Honggfuzz](https://github.com/google/fuzzbench/commits?author=robertswiecki)
-fuzzing engines.
-
-The Open Web Platform security team continues to focus on two problems:
-injection attacks, and isolation primitives.
-
-Regarding injection, we're polishing our [Trusted
-Types](https://web.dev/trusted-types/) implementation, supporting Google's
-security team with bug fixes as they continue to roll it out across Google
-properties. We're following that up with experimental work on a [Sanitizer
-API](https://github.com/WICG/sanitizer-api) that's making good progress, and
-some hardening work around policy inheritance to fix a class of bugs that have
-cropped up recently.
-
-For isolation, we're continuing to focus on
-[COOP](https://web.dev/why-coop-coep/#coop) deployment. We shipped COOP's
-report-only mode as an origin trial, and we're aiming to re-enable
-SharedArrayBuffers behind COOP+COEP in Chrome 88 after shipping some changes to
-the process model in Chrome 87 to enable \`crossOriginIsolated\`.
-
-In Q3, Chrome's Security Architecture team has enabled CORS for extension
-content scripts in Chrome 85, moving to a more secure model against compromised
-renderers. We made further progress on opt-in origin isolation, and we took the
-first steps towards several improved process model abstractions for Chrome.
-MiraclePtr work is progressing towards experiments, and we wrapped up the test
-infrastructure improvements from last quarter.
-
-The CA/Browser Forum guidelines got big updates, with ballots to overhaul the
-guidelines to [better match browser
-requirements](https://github.com/cabforum/documents/pull/195), including
-certificate lifetimes, and long overdue [cleanups and
-clarifications](https://github.com/cabforum/documents/pull/208). One good revamp
-deserves another, and the [Chrome Root Certificate
-Policy](https://g.co/chrome/root-policy) got a big facelift, as part of
-transitioning to a Chrome Root Store.
-
-CT Days 2020 [was held in
-September](https://docs.google.com/document/d/18hRJQW5Qzgcb87P-YIkWIuna9_pRUNGsZPC4V0fiq5w/preview),
-including the big announcement that Chrome was working to remove the One Google
-Log requirement by implementing [SCT
-auditing](https://docs.google.com/document/d/1G1Jy8LJgSqJ-B673GnTYIG4b7XRw2ZLtvvSlrqFcl4A/edit).
-
-[This
-summer](https://security.googleblog.com/2020/10/fuzzing-internships-for-open-source.html),
-we also hosted an intern who worked on [structure-aware ASN.1
-fuzzing](https://github.com/google/libprotobuf-mutator-asn1), and began
-integration with BoringSSL.
-
-Cheers,
-
-Andrew, on behalf of the Chrome security team
-
-## Q2 2020
-
-Greetings,
-
-The 2nd quarter of 2020 saw Chrome Security make good progress on multiple
-fronts, all helping to keep our users, and the web safe.
-
-The Chrome Safe Browsing team launched real-time phishing protection for all
-Android devices, and observed a 164% increase in phishing warnings for
-main-frame URLs. We also completed the rollout of [Enhanced Safe
-Browsing](https://security.googleblog.com/2020/05/enhanced-safe-browsing-protection-now.html)
-to all users of Chrome on desktop platforms.
-
-We helped the Chrome for iOS team implement hash-based Safe Browsing protection
-in Chrome 84 for iOS for the first time ever. Also working with various teams,
-most notably the Mobile UX, we made significant progress in shipping Enhanced
-Safe Browsing in Chrome 86 for Android.
-
-For desktop platforms, we landed changes to the in-browser phishing detection
-mechanism to help reduce phishing false negatives using new machine learning
-models for Chrome 84 and beyond. We also finalized the plan to disable more
-malicious Chrome Extensions, starting with Chrome 85.
-
-The Enamel team put the finishing touches on our work to prevent https:// pages
-from loading insecure content. We built a new warning for https:// pages with
-forms targeting insecure endpoints, and prepared to start rolling out [mixed
-download
-warnings](https://blog.chromium.org/2020/02/protecting-users-from-insecure.html)
-in Chrome 84. This release will also include [mixed image
-autoupgrading](https://security.googleblog.com/2019/10/no-more-mixed-messages-about-https_3.html)
-and the second phase of [TLS 1.0/1.1
-deprecation](https://security.googleblog.com/2019/10/chrome-ui-for-deprecating-legacy-tls.html).
-
-Even on an https:// website, users need to accurately understand which website
-they’re visiting. We expanded our [lookalike domain
-warning](https://blog.chromium.org/2019/06/new-chrome-protections-from-deception.html)
-with new triggering heuristics, and prepared to launch an additional warning
-(pictured) for lower-precision heuristics in M86.
-
-The Platform Security team continued to make good progress on many of our longer
-term projects, including sandboxing the network service (and associated
-certificate verification servicification),
-[adopting](https://docs.google.com/document/d/1WiZCu0D2RvdpBkYuUdL571oFlj0kSaXU1HhdoL7438Y/)
-Oilpan garbage collection in PDFium's XFA implementation, and investigating
-memory safety techniques, and exploitation mitigation technologies.
-
-Along with our colleagues in Chrome Security Architecture, we've sharpened the
-security focus on
-[Mojo](https://chromium.googlesource.com/chromium/src/+/HEAD/mojo/README.md),
-Chrome's IPC system, and started looking at what's needed to improve developer
-ergonomics and make it easier to reason about communicating over security
-boundaries. Also with CSA, we've worked on how
-[MiraclePtr](https://docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_MZ2GsrJNb_dbQ3ZBg/edit?usp=sharing)
-could help prevent use after free bugs in C++ code.
-
-Bugs-- continued to develop and improve the FuzzBench platform which has helped
-the security research community develop more efficient fuzzing engines
-(HonggFuzz, AFL++ got several improvements and leads the [benchmarking
-results](https://www.fuzzbench.com/reports/2020-07-13/index.html)). Based on
-FuzzBench results, we have successfully integrated
-[Entropic](https://mboehme.github.io/paper/FSE20.Entropy.pdf) as a fuzzing
-strategy in ClusterFuzz. We have started rewriting/improving several Chrome
-blackbox fuzzers (e.g. dom, webbot, media, ipc), and also deprecated ~50
-duplicate/unneeded fuzzers. In OSS-Fuzz service, we added first-class fuzzing
-support for
-[Golang](https://google.github.io/oss-fuzz/getting-started/new-project-guide/go-lang/)
-and
-[Rust](https://google.github.io/oss-fuzz/getting-started/new-project-guide/rust-lang/)
-languages (better compiler instrumentation, crash parsing, and easier project
-integration) and improved CI (e.g. Honggfuzz checks). Lastly, we worked closely
-with Android Security and improved ClusterFuzz for on-device and host fuzzing
-use cases (e.g. syzkaller support, pixel hardware fuzzing).
-
-The Open Web Platform Security team remained focused on mitigating injection
-attacks on the one hand, and improving isolation of sensitive content on the
-other. Q2 was exciting on both fronts!
-
-We shipped an initial implementation of [Trusted
-Types](https://web.dev/trusted-types/), which gives developers the ability to
-meaningfully combat DOM XSS, and nicely compliments CSP's existing mitigations
-against other forms of injection. Google has deployed Trusted Types in
-high-value applications like [My Google
-Activity](https://myactivity.google.com/), and we're excited about further
-rollouts.
-We also rolled out our first pass at [two new isolation
-primitives](https://web.dev/coop-coep): Cross-Origin Opener Policy and
-Cross-Origin Embedder Policy. Opting-into these mechanisms improves our ability
-to process-isolate your pages, mitigating some impacts of Spectre and XSLeaks,
-which makes it possible to safely expose powerful APIs like SharedArrayBuffers.
-
-The Chrome Security Architecture team has started Origin Trials for [opt-in
-origin isolation](https://www.chromestatus.com/feature/5683766104162304),
-allowing origins to use separate processes from the rest of their site. We have
-also made progress on [securing extension content script
-requests](/Home/chromium-security/extension-content-script-fetches) and
-enforcements for request initiators, and we improved the update mechanism for
-Android Site Isolation's list of isolated sites. Much of Q2 was spent on cleanup
-and documentation, though, particularly test infrastructure and flaky test
-improvements. Finally, we also contributed to
-[MiraclePtr](https://docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_MZ2GsrJNb_dbQ3ZBg/edit?usp=sharing)
-efforts to reduce memory bugs, and we helped more teams use WebUI by adding
-support for web iframes.
-
-In the world of the Web PKI, TLS certificates issued from default-trusted CAs
-after 2020-09-01 will be rejected if their lifetime is greater than 398 days,
-beginning with Chrome 85. See the [documentation and
-FAQ](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/certificate_lifetimes.md).
-This is part of a number of changes [adopted
-by](https://cabforum.org/2020/07/16/ballot-sc31-browser-alignment/) CA/Browser
-Forum with unanimous support from major Browsers, which aligns the Baseline
-Requirements with many existing Browser root program requirements.
-
-We continued informal cross-browser collaboration and met with the European
-Union on their eIDAS Regulation, exploring how certificates can be used to
-provide identity information for domains in a manner consistent with the Web
-Platform.
-
-Until next time, on behalf of Chrome Security, I wish you all the very best.
-
-Andrew
-
-## Q1 2020
-
-Greetings,
-
-Amongst everything the first quarter of 2020 has thrown at the world, it has
-underlined the crucial role the web plays in our lives. As always, the Chrome
-Security teams have been focusing on the safety of our users, and on keeping
-Chrome secure and stable for all those who depend on it.
-
-The Chrome Safe Browsing team, with the support of many teams, introduced a new
-Safe Browsing mode that users can opt-in to get “faster, proactive protection
-against dangerous websites, downloads, and extensions.”
-
-We launched [previously
-announced](https://www.blog.google/products/chrome/better-password-protections/)
-faster phishing protection to Chrome users on high-memory Android devices. This
-led to a 116% increase in the number of phishing warnings shown to users for
-main frame URLs.
-
-We also launched predictive phishing protections to all users of Chrome Password
-Manager on Android, which warns users when they type their saved password on an
-unsafe website. The initial estimate from the launch on Beta population suggests
-an 11% increase in the number of warnings shown compared to that on Windows.
-
-Chrome's Enamel team finalized plans to bring users a more secure HTTPS
-ecosystem by blocking [mixed
-content](https://security.googleblog.com/2019/10/no-more-mixed-messages-about-https_3.html),
-[mixed
-downloads](https://blog.chromium.org/2020/02/protecting-users-from-insecure.html),
-and [legacy TLS
-versions](https://security.googleblog.com/2019/10/chrome-ui-for-deprecating-legacy-tls.html).
-These changes have now been delayed due to changing global circumstances, but
-are still planned for release at the appropriate time.
-
-To improve how users understand website identity, we experimented with a [new
-security indicator
-icon](https://bugs.chromium.org/p/chromium/issues/detail?id=1008219) for
-insecure pages. We also experimentally launched a [new
-warning](https://bugs.chromium.org/p/chromium/issues/detail?id=982930) for sites
-with spoofy-looking domain names. We’re now analyzing experiment results and
-planning next steps for these changes.
-
-The Platform Security team made significant forward progress on enabling the
-network service to be sandboxed on all platforms (it already is on macOS). This
-required getting significant changes into Android R, migrating to a new way of
-using the Data Protection API on Windows (which had the side-effect of [breaking
-some crime rings’
-operations](https://www.zdnet.com/article/chrome-80-update-cripples-top-cybercrime-marketplace/),
-albeit
-[temporarily](https://www.bleepingcomputer.com/news/security/malware-unfazed-by-google-chromes-new-password-cookie-encryption/)),
-and more. When complete, this will reduce the severity of bugs in that service
-from Critical to High.
-
-We also made progress on Windows sandboxing, working towards adopting
-AppContainer, and are refactoring our Linux/Chrome OS sandbox to handle
-disruptive upstream changes in glibc and the kernel.
-
-Discussions about the various ways we can improve memory safety continue, and we
-laid plans to migrate PDFium’s XFA support to
-[Oilpan](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/heap/BlinkGCAPIReference.md)
-garbage collection, with the help of Oilpan and V8 teams. This will enable us to
-safely ship XFA in production, hopefully in 2020.
-
-The bugs-- team launched [FuzzBench](https://github.com/google/fuzzbench), a
-fuzzer benchmarking platform to bridge the gap between academic fuzzing research
-and industry fuzzing engines (e.g libFuzzer, AFL, Honggfuzz). We have integrated
-new techniques in ClusterFuzz to improve fuzzing efficiency and break coverage
-walls - dataflow trace based fuzzing, in-process grammar mutators (radamsa,
-peach). Also, launched
-[CIFuzz](https://google.github.io/oss-fuzz/getting-started/continuous-integration/)
-for OSS-Fuzz projects to catch obvious security regressions in a project’s
-continuous integration before they are checked in.
-
-The Chrome Security Architecture (née Site Isolation) team has been
-strengthening Site Isolation this quarter. We're [securing extension content
-script requests](/Home/chromium-security/extension-content-script-fetches) to
-unify CORS and CORB behavior, and we're progressing with a
-[prototype](https://crbug.com/1042415) to let websites opt in to [origin-level
-isolation](https://github.com/WICG/origin-isolation). To improve Chrome's
-security architecture, the team is working on a proposal for a new
-SecurityPrincipal abstraction. We have also cleaned up RenderWidget/RenderView
-lifetimes. Finally, we are starting to formalize our thinking about privilege
-levels and their interactions in Chrome. We are enumerating problem spots in IPC
-and other areas as we plan the next large projects for the team.
-
-For the past five years, Chrome, along with counterparts at browser vendors such
-as Mozilla, Microsoft, Apple, Opera, and Vivaldi, have been discussing technical
-challenges involved in [the eIDAS
-Regulation](https://ec.europa.eu/futurium/en/content/eidas-regulation-regulation-eu-ndeg9102014)
-with members of the European Commission, [ETSI](https://www.etsi.org/), and
-[European Union Agency for Cybersecurity (ENISA)](https://www.enisa.europa.eu/).
-These discussions saw more activity this past quarter, with browsers [publicly
-sharing](https://cabforum.org/pipermail/servercert-wg/2020-January/001555.html)
-an [alternative technical
-proposal](https://cabforum.org/pipermail/servercert-wg/attachments/20200114/3a5fa74c/attachment-0001.pdf)
-to the current ETSI-defined approach, in order to help the Commission make the
-technology easier to use and interoperate with the web and browsers.
-
-We announced [Chrome’s 2020 Certificate Transparency
-plans](https://groups.google.com/a/chromium.org/d/msg/ct-policy/dqFtoFBy8YU/Xa67FWVCEgAJ)
-with a focus on removing “One Google Log” policy dependency. Pending updates to
-travel policy, we have tentatively planned CT Days 2020 and sent out an
-[interest
-survey](https://docs.google.com/forms/d/1NzHadfwhqUPEXqcHHtZTwfVDS1yj9vGvhP0y1qluYEU/edit)
-for participants.
-
-Until next time, on behalf of Chrome Security I wish you all the very best.
-
-Andrew
-
-## Q4 2019
-
-As we start 2020 and look forward to a new year and a [new
-decade](https://xkcd.com/2249/), the Chrome Security Team took a moment to look
-back at the final quarter of 2019.
-
-The Safe Browsing team launched two features that significantly improve phishing
-protections available to Chrome users:
-
-We reduced the false negative rate for Safe Browsing lookups in Chrome by
-launching [real-time Safe Browsing
-lookups](https://security.googleblog.com/2019/12/better-password-protections-in-chrome.html)
-for users who have opted in to “Make Searches and Browsing better.” Early
-results are promising, with up to [55% more warnings
-shown](https://screenshot.googleplex.com/EADPM3soc10) to users who had this
-protection turned on, compared to those who did not.
-
-A while ago we launched predictive phishing protections to warn users who are
-syncing history in Chrome when they enter their Google Account password into
-suspected phishing sites that try to steal their credentials. [With the Chrome
-79](https://security.googleblog.com/2019/12/better-password-protections-in-chrome.html),
-we expanded this protection to everyone signed in to Chrome, even if you have
-not enabled Sync. In addition, this feature will now work for all the passwords
-that the user has stored in Chrome’s password manager; this will show an
-estimated 10 times more warnings daily.
-
-We also had two telemetry based launches for sending pings to Safe Browsing when
-users who have opted into Safe Browsing Extended Reporting focus on password
-fields and reuse their passwords on Android.
-
-[HTTPS adoption](https://transparencyreport.google.com/https/overview?hl=en) has
-risen dramatically, but
-[many](https://chromestatus.com/metrics/feature/timeline/popularity/609)
-https:// pages still include http:// subresources — known as mixed content. In
-October, the Usable Security team published a
-[plan](https://security.googleblog.com/2019/10/no-more-mixed-messages-about-https_3.html)
-to eradicate mixed content from the web. The first phases of this plan started
-shipping in Chrome 79. In Chrome 79, we relocated the setting that allows users
-to load mixed content when it’s blocked by default. This setting used to be a
-shield icon in the Omnibox, and is now available in Site Settings instead. In
-Chrome 80, mixed audio and video will be automatically upgraded to https://, and
-they will be blocked if they fail to load. We started work on a [web
-standard](https://w3c.github.io/webappsec-mixed-content/level2.html) to codify
-these changes. See [this
-article](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content)
-for how to fix mixed content if you run an affected website.
-
-Website owners should keep their HTTPS configurations up-to-date with the latest
-security settings. Back in 2018, we (alongside other browsers) announced
-[plans](https://security.googleblog.com/2018/10/modernizing-transport-security.html)
-to remove support for legacy TLS versions 1.0 and 1.1. In October, we updated
-these plans to
-[announce](https://security.googleblog.com/2019/10/chrome-ui-for-deprecating-legacy-tls.html)
-the specific UI treatments that we’ll use for this deprecation. Starting in
-January 2020, Chrome 79 will label affected websites with a “Not Secure” chip in
-the omnibox. Chrome 81 will show a full-page error. Make sure your server
-supports TLS &gt;=1.2 to avoid this warning treatment.
-
-To continue to polish our security UI, we iterated on our
-[warning](https://blog.chromium.org/2019/06/new-chrome-protections-from-deception.html)
-for lookalike domains to make the warning more understandable. We introduced a
-new gray triangle icon for http:// sites to make a clearer distinction between
-http:// and https://. This icon will appear for some users as part of a
-small-scale experiment in Chrome 80. Finally, we cleaned up a large backlog of
-low severity security UI vulnerabilities. We fixed, closed, or removed
-visibility restrictions on 33 out of 42 bugs.
-
-The Platform Security Team sandboxed the network service on macOS in Chrome 79,
-and continued the work on sandboxing it on other Desktop platforms. There is
-also some forward momentum for reducing its privilege in version R of Android.
-
-You can now check the sandboxing state of processes on Windows by navigating to
-chrome://sandbox. Also on Windows, we experimented with enabling the renderer
-App Container but ran into crashes likely related to third party software, and
-are now working to improve error reporting to support future experimentation.
-Chrome 79 also saw Code Integrity Guard enabled on supported Windows versions,
-blocking unsigned code injection into the renderer process.
-
-We have also begun investigating new systemic approaches to memory unsafety.
-Look for news in 2020, as well as continual improvements to the core libraries
-in Chromium and PDFium.
-
-In Q4, the Bugs-- team moved closer to our goal of achieving 50% fuzzing
-coverage in Chrome (it's currently at 48%). We added new features to our
-ClusterFuzz platform, such as [Honggfuzz](https://github.com/google/honggfuzz)
-support, libFuzzer support for Android, improved fuzzer weights and more
-accurate statistics gathering pipeline. We also enabled several new UBSan
-features across both Chrome and OSS-Fuzz. As part of OSS-Fuzz, we added Go
-language support and on-boarded several new Go projects. We also gave a talk
-about ClusterFuzz platform at [Black Hat
-Europe](https://www.blackhat.com/eu-19/briefings/schedule/#clusterfuzz-fuzzing-at-google-scale-17505).
-
-In conversation with our friends and colleagues at Mozilla over the course of
-Q4, the Open Web Platform Security team made substantial progress on
-[Cross-Origin-Opener-Policy](https://github.com/whatwg/html/issues/3740) and
-[Cross-Origin-Embedder-Policy](https://mikewest.github.io/corpp/). These
-isolation primitives will make it possible for us to ensure that process
-isolation is robust, even as we ship new and exciting APIs that give developers
-more capability. Implementations of both are mostly complete behind a flag, and
-we're looking forward to getting them out the door, and beginning the process of
-relying upon them to [when deciding whether to allow cross-thread access to
-shared
-memory](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/Planned_changes).
-
-Similarly, we're polishing our implementation of [Trusted
-Types](https://w3c.github.io/webappsec-trusted-types/dist/spec/) based on
-feedback from origin trials and other vendors' review of the spec. We're still
-excited about its potential for injection mitigation, and we're looking forward
-to closing out the last few issues we know about in our implementation.
-
-The Site Isolation team posted to the [Google Security
-Blog](https://security.googleblog.com/2019/10/improving-site-isolation-for-stronger.html)
-and the [Chromium
-Blog](https://blog.chromium.org/2019/10/recent-site-isolation-improvements.html)
-about our recent milestones for Site Isolation on Android and defending against
-compromised renderer processes. We also gave a talk at [Black Hat
-Europe](https://www.blackhat.com/eu-19/briefings/schedule/#site-isolation-confining-untrustworthy-code-in-the-web-browser-17974)
-about Site Isolation and how to look for new bypasses for the
-[VRP](https://www.google.com/about/appsecurity/chrome-rewards/index.html). At
-the same time, we made progress on additional enforcement, and we ran
-experiments to expand Android coverage to more devices. Finally, we also used Q4
-to clean up a lot of core Site Isolation code, and we started updating Chrome's
-WebUI framework to better support new types of Chrome features without large
-risks of privilege escalation.
-
-In the world of Web PKI Security, as part of our ongoing collaboration with
-Microsoft and Mozilla on the [Common CA Database](https://www.ccadb.org/),
-"Audit Letter Validation" is now enabled for the full set of publicly trusted
-Certificate Authorities. This tool, developed by Microsoft and Mozilla,
-automatically validates the contents of audit letters to ensure they include the
-information required of a publicly trusted CA. Audit letter validation was
-previously done by hand, which was not scalable to CA's 2,500+ intermediate
-certificates.
-
-Audit Letter Validation enabled us and other root stores to detect a wide
-variety of issues in the Web PKI that had previously gone unnoticed. We’ve spent
-the past quarter leading the incident response effort, working with
-non-compliant CAs to remediate issues and mitigate future risk. This helps not
-only Chrome users, but all users who trust these CAs. We can now automatically
-detect issues as they happen, ensuring prompt remediation.
-
-We also collaborate with Mozilla to provide [detailed
-reviews](https://wiki.mozilla.org/CA/Dashboard#Detailed_CP.2FCPS_Review) of
-organizations applying to be CAs, completing several in Q4. These public reviews
-take an extremely detailed look at how the CA is operated, looking at both
-compliance and for risky behaviour not explicitly forbidden, as well as
-opportunities for improvement based on emerging good practices.
-
-[Certificate Transparency](https://www.certificate-transparency.org/) (CT)
-continues to be an integral part of our work. Beyond helping protect users by
-allowing quick detection of potentially malicious certificates, the large-scale
-analysis that CT enables has been essential in helping improve the Web PKI.
-Analysis of CT logs this quarter revealed a number of systemic flaws in how
-Extended Validation certificates are validated, which has spurred industry-wide
-effort to address these issues.
-
-We took steps to protect users from trusting harmful certificates that might be
-installed by software or which they might be directed to install. Working with
-the Enamel team, we built on steps we’d [previously taken to protect
-users](https://security.googleblog.com/2019/08/protecting-chrome-users-in-kazakhstan.html)
-from certificates used to intercept their communications by adding the ability
-to rapidly deploy targeted protections via our
-[CRLSet](/Home/chromium-security/crlsets) mechanism. CRLSets allow us to quickly
-respond, using the [Component
-Updater](https://chromium.googlesource.com/chromium/src/+/HEAD/components/component_updater/README.md),
-without requiring a full Chrome release or respin.
-
-More generally, we continue to work on the “patch gap”, where security bug fixes
-are posted in our open-source code repository but then take some time before
-they are released as a Chrome stable update. We now make regular refresh
-releases every two weeks, containing the latest severe security fixes. This has
-brought down the median “patch gap” from 33 days in Chrome 76 to 15 days in
-Chrome 78, and we continue to work on improving it.
-
-Finally, you can read what the Chrome (and other Google) Vulnerability Rewards
-Programs have been up to in 2019 in our [recent blog
-post](https://security.googleblog.com/2020/01/vulnerability-reward-program-2019-year.html).
-
-Cheers,
-
-Andrew, on behalf of the Chrome security team
-
-## Q3 2019
-
-Greetings!
-
-With the equinox behind us, it's time for an update on what the Chrome security
-team has been up to in the third quarter of 2019.
-
-The Chrome Safe Browsing team
-[launched](https://www.blog.google/technology/safety-security/advanced-protection-program-expands-chrome/)
-Stricter Download Protections for [Advanced
-Protection](https://landing.google.com/advancedprotection/) users in Chrome and
-significantly reduce users’ exposure to potentially risky downloads.
-
-In Q3, Safe Browsing also brought Google password protection to signed in,
-non-sync users. This project is code complete, and the team plans to roll it out
-in Chrome 79.
-
-Enamel, the Security UX team, have been looking at mixed content: http://
-subresources on https:// pages. Mixed content presents a confusing UX and a risk
-to user security and privacy. After a long-running data-gathering
-[experiment](https://groups.google.com/a/chromium.org/d/msg/blink-dev/ZJxkCJq5zo4/4sSMVZzBAwAJ)
-on pre-stable channels, the Enamel team
-[publicized](https://security.googleblog.com/2019/10/no-more-mixed-messages-about-https_3.html)
-plans to start gradually blocking mixed content. In Chrome 79, the team plans to
-relocate the setting to bypass mixed content blocking from a shield icon in the
-omnibox to Site Settings. In Chrome 80, we will start auto-upgrading mixed audio
-and video to https://, blocking resources if they fail to auto-upgrade. Chrome
-80 will also introduce a “Not Secure” omnibox chip for mixed images, which we
-plan to start auto-upgrading in a future version of Chrome.
-
-Furthering our quest to improve the quality of HTTPS deployments, we
-[announced](https://security.googleblog.com/2019/10/chrome-ui-for-deprecating-legacy-tls.html)
-a new UI plan for the upcoming [legacy TLS
-deprecation](https://security.googleblog.com/2018/10/modernizing-transport-security.html)
-in early 2020.
-
-In Q3, Enamel also made improvements to our lookalike domain warning, with
-clearer strings and new heuristics for detecting spoofing attacks. We also added
-additional signals in our [Suspicious Site Reporter
-extension](https://chrome.google.com/webstore/detail/suspicious-site-reporter/jknemblkbdhdcpllfgbfekkdciegfboi?hl=en-US)
-for power users to identify suspicious sites that they can report to Safe
-Browsing for scanning. In Chrome 77, we
-[relocated](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/ev-to-page-info.md)
-the Extended Validation certificate UI to Page Info; we presented the user
-research that inspired this change at [USENIX Security
-2019](https://www.usenix.org/conference/usenixsecurity19/presentation/thompson).
-
-The Platform Security team continues to help improve the memory safety of the
-PDFium code base, and have finished removing all bare new/delete pairs, and
-ad-hoc refcounting. We continued to push for greater [memory
-safety](https://twitter.com/arw/status/1159631867835895808) on a number of
-fronts, and are busy working on plans for the rest of the year and 2020. Q3 saw
-a number of projects enter trials on Beta and Stable, including the V2 sandbox
-for GPU process and network service sandbox on macOS, and Code Integrity Guard
-on Windows. Look out for news of their launch in next quarter's update!
-
-The [XSS Auditor](/developers/design-documents/xss-auditor), which attempted to
-detect and prevent reflected XSS attacks, was [removed in Chrome
-78](https://www.zdnet.com/article/google-to-remove-chromes-built-in-xss-protection-xss-auditor/).
-It had [a number of
-issues](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/TuYw-EZhO9g/blGViehIAwAJ),
-and in the end the cons outweighed the pros.
-
-The Bugs-- team added
-[FuzzedDataProvider](https://github.com/google/fuzzing/blob/master/docs/split-inputs.md#fuzzed-data-provider)
-(FDP) as part of Clang, making it simple to write fuzz targets that require
-multiple inputs with just a single header file include. We refactored
-ClusterFuzz code to make it easier to add new fuzzing engines and migrated
-libFuzzer to use this new
-[interface](https://github.com/google/clusterfuzz/blob/master/src/python/bot/fuzzers/engine.py).
-We rewrote the ClusterFuzz reproduce tool, which is now part of main ClusterFuzz
-GitHub repo. On the OSS front, we launched new features in OSS-Fuzz - Golang
-support, X86 config support, FDP support, and OSS-Fuzz Badges. We also did
-fuzzer strategy weight adjustments based on multi-armed bandit experiments.
-Jonathan Metzman
-[presented](https://www.blackhat.com/us-19/briefings/schedule/index.html#going-beyond-coverage-guided-fuzzing-with-structured-fuzzing-16110)
-at Black Hat (USA) on structure aware fuzzing.
-
-The Open Web Platform Security team have been working on [Trusted
-Types](https://github.com/w3c/webappsec-trusted-types), the Origin Trial for
-which is about to finish. We are making a number of changes to the feature,
-mainly to aid deployment and debugging of TT deployments, as well as some
-overall simplifications. We expect this work to finish in early Q4, and to
-launch in the same quarter.
-
-The [Site Isolation](/Home/chromium-security/site-isolation) team reached two
-more important milestones in Q3. First, we enabled Site Isolation for password
-sites on Chrome for Android (on devices with at least 2GB of memory), bringing
-Spectre mitigations to mobile devices! Second, we added enough compromised
-renderer protections on Chrome for Desktop to include cross-site data disclosure
-to the [Chrome
-VRP](https://www.google.com/about/appsecurity/chrome-rewards/index.html)! We're
-very excited about the new protections, and we continue to improve the defenses
-on both Android and Desktop. Separately, we [presented our USENIX Security
-paper](https://www.usenix.org/conference/usenixsecurity19/presentation/reis) in
-August and launched OOPIF-based PDF support, clearing the way to remove
-BrowserPlugin.
-
-In the Web PKI space, the government of Kazakhstan recently created a Root CA
-and with local ISPs engaged in a campaign to encourage all KZ citizens to
-install and trust the CA. Ripe Atlas detected this CA [conducting a
-man-in-the-middle](https://censoredplanet.org/kazakhstan) on social media.
-Chrome blocked this certificate to prevent it from being used for MITMing Chrome
-users. In conjunction with several other major browsers, we made a [joint PR
-statement](https://blog.mozilla.org/blog/2019/08/21/mozilla-takes-action-to-protect-users-in-kazakhstan/)
-against this type of intentional exploitation of users. Following this incident,
-we began working on a long-term solution to handling MITM CAs in Chrome.
-
-In hacker philanthropy news, in July we increased the amounts awarded to
-security researchers who submit security bugs to us under the [Chrome
-Vulnerability Reward Program](https://g.co/ChromeBugRewards). The update aligned
-both categories and amounts with the areas we'd like researchers to focus on.
-This generated some good [press
-coverage](https://techcrunch.com/2019/07/18/google-will-now-pay-bigger-rewards-for-discovering-chrome-security-bugs/)
-which should help spread the word about the Chrome VRP. Tell your friends, and
-submit your Chrome security bugs
-[here](https://bugs.chromium.org/p/chromium/issues/entry?template=Security%20Bug)
-and they'll be considered for a reward when they're fixed!
-
-In Chrome security generally we've been working to address an issue called the
-“patch gap”, where security bug fixes are posted in our open-source code
-repository but then take some time before they are released as a Chrome stable
-update. During that time, adversaries can use those fixes as evidence of
-vulnerabilities in the current version of Chrome. To reduce this problem, we’ve
-been merging more security fixes directly to stable, and we’re now always making
-a security respin mid-way through the six-week development cycle. This has
-reduced the median patch gap from ~33 days in Chrome 76 to ~19 days in Chrome
-77. This is still too long, and we’re continuing to explore further solutions.
-
-Cheers,
-
-Andrew, on behalf of the Chrome security team
-
-## Q2 2019
-
-Greetings,
-
-With 2019 already more than 58% behind us, here's an update on what Chrome
-Security was up to in the second quarter of this year.
-
-Chrome SafeBrowsing is launching stricter download protections for [Advanced
-Protection](https://landing.google.com/advancedprotection/) users, and a
-teamfood has begun to test the policy in M75. This will launch broadly with M76.
-This significantly reduces an Advanced Protection user’s exposure to potentially
-risky downloads by showing them warnings when they try to download “risky” files
-(executable files that haven’t been vetted by SafeBrowsing) in Chrome.
-
-Users need to understand site identity to make safe decisions on the web. Chrome
-Security UX published a [USENIX Security
-paper](https://ai.google/research/pubs/pub48199) exploring how users understand
-modern browser identity indicators. To help users understand site identity from
-confusing URLs, we launched a [new
-warning](https://security.googleblog.com/2019/06/new-chrome-protections-from-deception.html)
-detecting domains that look similar to domains you’ve visited in the past. We
-published a
-[guide](https://docs.google.com/document/d/1_xJz3J9kkAPwk3pma6K3X12SyPTyyaJDSCxTfF8Y5sU/edit)
-to how we triage spoofing bugs involving such domains. We also built a
-[Suspicious Site Reporter
-extension](https://chrome.google.com/webstore/detail/suspicious-site-reporter/jknemblkbdhdcpllfgbfekkdciegfboi)
-that power users can use to report deceptive sites to Google’s Safe Browsing
-service, to help protect non-technical users who might not be able to discern a
-deceptive site’s identity as well.
-
-Site identity is meaningless without HTTPS, and we continue to promote HTTPS
-adoption across the web. We implemented an experimental flag to
-[block](https://groups.google.com/a/chromium.org/d/msg/blink-dev/mALJa0JM13I/-jxMlOyrBAAJ)
-high-risk nonsecure downloads initiated from secure contexts. And we continued
-to roll out our experiment that auto-upgrades mixed content to HTTPS, pushing to
-10% of beta channel and adding new metrics to quantify breakage.
-
-In addition to helping with the usual unfaltering flow of security launch
-reviews, Platform Security engineers have been continuing to investigate ways to
-help Chrome engineers create fewer memory safety bugs for clusterfuzz to find.
-While performance is a concern when adding checks to libraries, some reports of
-regressions nicely turned out to be [red
-herrings](https://bugs.chromium.org/p/chromium/issues/detail?id=957296#c15). On
-macOS, Chrome executables are [now
-signed](https://chromium-review.googlesource.com/c/chromium/src/+/1666734) with
-the [hardened runtime
-options](https://developer.apple.com/documentation/security/hardened_runtime_entitlements)
-enabled. Also on macOS, the change to have [Mojo use Mach
-IPC](https://docs.google.com/document/d/1nEUEAP3pq6T9WgEucy2j02QwEHi0PaFdpaQcT8ooH9E/edit#),
-rather than POSIX file descriptors/socket pairs, is now fully rolled out. On
-Windows, we started to
-[enable](https://bugs.chromium.org/p/chromium/issues/detail?id=961831)
-[Arbitrary Code
-Guard](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-exploit-guard/exploit-protection-exploit-guard#mitigation-comparison)
-on processes that don't need dynamic code at runtime.
-
-We've done a lot of analysis on the types of security bugs which are still
-common in Chromium. The conclusion is that memory safety is still our biggest
-problem, so we've been working to figure out the best next steps to solve
-that—both in terms of safer C++, and investigating other choices to find if we
-can parse data in a safe language without disrupting the Chromium development
-environment too much.
-
-We've also been looking at how security fixes are released, to ensure fixes get
-to our users in the quickest possible way. We have also improved some of the
-automatic triage that Clusterfuzz does to make sure that bugs get the right
-priority.
-
-To augment our fuzzing efforts and find vulnerabilities for known bad patterns,
-we have decided to invest in static code analysis efforts with
-[Semmle](https://semmle.com/). We have written our custom QL queries and
-reported
-[15](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3AFound-With-Semmle)
-bugs so far (some of these were developed in collaboration with [Project
-Zero](https://googleprojectzero.blogspot.com/)).
-
-We have made several changes to improve fuzzing efficiency which include -
-leveraging [DFSan](https://clang.llvm.org/docs/DataFlowSanitizer.html) for
-[focused mutations](https://github.com/google/clusterfuzz/issues/503), added
-support for [custom mutators](https://github.com/google/clusterfuzz/pull/286),
-build-type optimizations (sanitizers without instrumentation) and libFuzzer fork
-mode on Windows. We have
-[upstreamed](https://cs.chromium.org/chromium/src/third_party/libFuzzer/src/utils/FuzzedDataProvider.h)
-a helper module in libFuzzer to make it easy to split fuzz input and decrease
-fuzz target complexity.
-
-The Open Web Platform Security team was mainly focused on [Trusted
-Types](https://github.com/WICG/trusted-types), and conducted an Origin Trial for
-the feature in Q2. The team is presently scrambling to address the issues raised
-by public feedback, to modify the feature to make it easier to deploy, and to
-generally make Trusted Types fit for a full launch.
-
-The [Site Isolation](/Home/chromium-security/site-isolation) team published
-their Usenix Security 2019 paper about the desktop launch ([Site Isolation:
-Process Separation for Web Sites within the
-Browser](https://ai.google/research/pubs/pub48285)), which will be presented in
-August. We now have a small Stable channel trial of Android Site Isolation,
-which isolates the sites that users log into rather than all sites. That work
-included persisting and clearing the sites to isolate, fixing text autosizing,
-and adding more metrics. Separately, we ran a trial of isolating origins rather
-than sites to gauge overhead, and we helped ship [Sec-Fetch-Site
-headers](https://w3c.github.io/webappsec-fetch-metadata/). We also started
-collecting data on how well CORB is protecting sensitive resources in practice,
-and we've started launch trials of out-of-process iframe based PDFs (which adds
-CORB protection for PDFs).
-
-The Chrome OS Security team has been working on the technology underlying Chrome
-OS verified boot. Going forward, dm_verity will use SHA256 as its hashing
-algorithm, replacing SHA1. So long, weak hashing algorithm!
-
-We also spent some time making life easier for Chrome OS developers. Devs now
-have access to a
-[time-of-check-time-of-use](https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use)
-safe [file
-library](https://chromium.googlesource.com/chromiumos/platform2/libbrillo/+/HEAD/brillo/safe_fd.h),
-and a [simplified
-mechanism](https://groups.google.com/a/chromium.org/d/msg/chromium-os-dev/zYP4tlXQmRg/aMyd2l-SBAAJ)
-for building system call filtering policies.
-
-Cheers,
-
-Andrew, on behalf of the Chrome security team
-
-## Q1 2019
-
-Greetings,
-
-Here's an update on what Chrome Security was up to in the first quarter of 2019!
-
-The [Site Isolation](/Home/chromium-security/site-isolation) team finished the
-groundwork for Android Beta Channel field trials, and the trials are now in
-progress. This Android mode isolates a subset of sites that users log into, to
-protect site data with less overhead than isolating all sites. We also started
-enforcing Cross-Origin Read Blocking for [extension content script
-requests](/Home/chromium-security/extension-content-script-fetches), maintaining
-a temporary allowlist for affected extensions that need to migrate. We tightened
-compromised renderer checks for navigations, postMessage, and BroadcastChannel.
-We also continued cross-browser discussions about [Long-Term Web Browser
-Mitigations for
-Spectre](https://docs.google.com/document/d/1dnUjxfGWnvhQEIyCZb0F2LmCZ9gio6ogu2rhMGqi6gY/edit?usp=sharing),
-as well as headers for [isolating
-pages](https://github.com/whatwg/html/issues/3740) and [enabling precise
-timers](https://github.com/whatwg/html/issues/4175). Finally, we are close to
-migrating PDFs from BrowserPlugin to out-of-process iframes, allowing
-BrowserPlugin to be deleted.
-
-In the last several years, the Usable Security team have put a lot of effort
-into [improving HTTPS
-adoption](https://transparencyreport.google.com/https/overview) across the web,
-focusing on getting top sites to migrate to HTTPS for their top-level resources.
-We’re now starting to turn our attention to insecure subresources, which can
-harm user security and privacy even if the top-level page load is secure. We are
-currently running an
-[experiment](https://chromestatus.com/feature/5557268741357568) on Canary, Dev,
-and Beta that automatically upgrades insecure subresources on secure pages to
-HTTPS. We also collected metrics on insecure downloads in Q1 and have started
-putting together a
-[proposal](https://lists.w3.org/Archives/Public/public-webappsec/2019Apr/0004.html)
-to block high-risk insecure downloads initiated from secure pages.
-
-People need to understand website identity to make good security and trust
-decisions, but
-[lots](http://people.ischool.berkeley.edu/~tygar/papers/Phishing/why_phishing_works.pdf)
-[of](http://www.usablesecurity.org/papers/jackson.pdf)
-[research](http://grouplab.cpsc.ucalgary.ca/grouplab/uploads/Publications/Publications/2011-DomainHighlighting.CHI.pdf)
-suggests that they don’t. We summarized our own research and thinking on this
-topic in an [Enigma 2019 talk](https://www.youtube.com/watch?v=RPoAc0ScdTM). We
-open-sourced a [tool](https://github.com/chromium/trickuri) that we use to help
-browser developers display site identity correctly. We also published a set of
-[URL display
-guidelines](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/url_display_guidelines/url_display_guidelines.md)
-and subsequently incorporated them into the [URL
-standard](https://url.spec.whatwg.org/#url-rendering).
-
-The Safe Browsing team increased the coverage against malware and unwanted
-software downloads by changing the logic of which file types to check against
-Safe Browsing. We flipped the heuristic to an allow-list of known-safe file
-extensions, and made the rest require verification. This adds protection from
-both the [uncommon
-](https://chromium-review.googlesource.com/c/chromium/src/+/1459317)file
-extensions (where attackers convince users to rename them to a common executable
-after scanning), and from [Office document
-types](https://chromium-review.googlesource.com/c/chromium/src/+/1449110) where
-the incidence of malware has increased significantly.
-
-The Chrome Cleanup Tool is now in the Chromium repository! This lets the public
-audit the data collected by the tool, which is a win for user privacy, and gives
-an example of how to sandbox a file scanner. The open source version includes a
-sample scanner that detects only test files, while the version shipped in Chrome
-will continue to depend on internal resources for a licensed engine.
-
-The Bugs-- team has [open sourced](https://github.com/google/clusterfuzz)
-ClusterFuzz, a fuzzing infrastructure that we have been developing over the past
-8 years! This army of robots has found 30,000+ bugs in Chrome and 200+ open
-source projects. To improve the efficiency of our cores, we have developed
-automated fuzzer weights management based on fuzzer quality/freshness/code
-changes. Additionally, we have developed several new WebGL fuzzers (some of them
-leverage [GraphicsFuzz](https://github.com/google/graphicsfuzz)) and found
-[63](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=metzman_graphicsfuzz_crash_fuzzer+-status%3AWontFix%2CDuplicate+OR+metzman_graphicsfuzz_mutator++-status%3AWontFix%2CDuplicate+OR+metzman_webgl_api_fuzzer++-status%3AWontFix%2CDuplicate+OR+metzman_webgl_mutator++-status%3AWontFix%2CDuplicate)
-bugs. We have significantly scaled up fuzzing Chrome on Android (x86) by using
-[Cuttlefish](https://github.com/google/android-cuttlefish) over
-[GCE](https://cloud.google.com/compute/docs/). Lastly, we have transitioned
-Chrome code coverage tools development to Chrome Infra team, see the new dash
-[here](https://analysis.chromium.org/p/chromium/coverage).
-
-The Platform Security team added some checks for basic safety to our base and
-other fundamental libraries, and are investigating how to do more while
-maintaining efficiency (run-time, run space, and object code size). We hope to
-continue to do more, as well as investigate how to use absl without forgoing the
-safety checks. We’ve been having great success with this kind of thing in PDFium
-as well, where we’ve found that the compiler can often optimize away these
-checks, and investigating where it hasn’t been able to has highlighted several
-pre-existing bugs. On macOS, we have re-implemented the Mojo IPC Channel under
-the hood to use Mach IPC, which should help reduce system resource shortage
-crashes. This also led to the development of two libprotobuf-mutator (LPM)
-fuzzers for Mach IPC servers. We’re working on auto-generating an LPM based
-fuzzer from Mojo API descriptions to automatically fuzz Mojo endpoints,
-in-process. We also continue to write LPM fuzzers for tricky-to-reach areas of
-the code like the disk cache. We are also investigating reducing the privilege
-of the network process on Windows and macOS.
-
-Our next update will be the first full quarter after joining Chrome Trust and
-Safety. We're looking forward to collaborating with more teams who are also
-working to keep our users safe!
-
-Cheers,
-
-Andrew on behalf of Chrome Security
-
-## Q4 2018
-
-Greetings,
-
-With the new year well underway, here's a look back at what Chrome Security was
-up to in the last quarter of 2018.
-
-In our quest to make HTTPS the default, we started marking HTTP sites with a red
-Not Secure icon when users enter data into forms. This change launched to stable
-in Chrome 70 in October. A new version of the HTTPS error page also launched to
-the stable channel as an experiment: it looks the same but is much improved
-[under the
-hood](https://docs.google.com/document/d/1rEBpw5V-Nn1UIi8CIFa5ZZvwlR08SkY3CogvWE2UMFs/edit).
-We built a new version of the [HTTPS Transparency
-Report](https://transparencyreport.google.com/https/overview?hl=en) for top
-sites; the report now displays aggregate statistics for the top sites instead of
-individual sites. We also built a [new interstitial
-warning](https://blog.chromium.org/2018/11/notifying-users-of-unclear-subscription.html)
-to notify Chrome users of unclear mobile subscription billing pages. The new
-warning and policy launched in Chrome 71.
-
-The Bugs-- team ported libFuzzer to work on Windows, which was previously
-lacking coverage guided fuzzing support, and this resulted in
-[93](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=windows_libfuzzer_chrome_asan+reporter%3Aclusterfuzz%40chromium.org+-status%3Aduplicate%2Cwontfix&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
-new bugs. We hosted a month-long
-[Fuzzathon](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/MAiBRTllPuI/hPbEMRWQDAAJ)
-in November, focused on improving fuzz coverage for Chrome’s browser process and
-Chrome OS. This effort led to 85 submissions and
-[157](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=-status%3AWontFix%2CDuplicate+id%3A907387%2C908754%2C903899%2C907386%2C904054%2C911112%2C904053%2C906711%2C912230%2C906370%2C907662%2C907663%2C910842%2C910843%2C906416%2C906417%2C906418%2C907302%2C903724%2C906395%2C906393%2C906391%2C911475%2C906399%2C908049%2C901782%2C907912%2C908196%2C906007%2C908829%2C907847%2C905334%2C912202%2C910918%2C912208%2C910917%2C904613%2C906568%2C906374%2C907561%2C907560%2C912455%2C907070%2C903251%2C910852%2C910851%2C903252%2C906396%2C910480%2C903828%2C911030%2C906349%2C908678%2C903052%2C903782%2C912219%2C902693%2C902690%2C904689%2C904682%2C905273%2C905272%2C905275%2C907999%2C911320%2C906352%2C906350%2C906356%2C906354%2C910497%2C910970%2C906359%2C904055%2C905649%2C910930%2C905401%2C906469%2C906705%2C910522%2C907693%2C906462%2C910835%2C902964%2C907051%2C906466%2C906372%2C903772%2C912299%2C911155%2C910926%2C910929%2C910928%2C906659%2C903233%2C907345%2C907344%2C904093%2C904090%2C905413%2C906329%2C909713%2C908781%2C905985%2C909801%2C912506%2C906801%2C901649%2C904382%2C905259%2C902605%2C908039%2C903280%2C904141%2C908004%2C910898%2C902131%2C910069%2C904655%2C910896%2C903088%2C906337%2C906440%2C912476%2C906333%2C908392%2C902227%2C912479%2C906448%2C906339%2C910248%2C904712%2C904792%2C910469%2C903690%2C901239%2C902860%2C911700%2C906381%2C906382%2C911822%2C905621%2C904725%2C910866%2C910862%2C911827%2C910860%2C907524%2C901675%2C901674%2C906438%2C906439%2C910892%2C907278%2C904736%2C904734%2C907718%2C907157%2C910592%2C908237%2C907453%2C908232%2C904105%2C908230%2C912227%2C912224%2C912223%2C904221%2C905463%2C903237%2C903236%2C904227%2C903234%2C906425%2C906421%2C906423%2C906422%2C906429%2C906428%2C908209%2C911409%2C912520&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
-bugs. We have added more automation towards auto-adjusting cpu cycles allocated
-to various fuzzers based on code coverage changes and recency of fuzzer
-submission. Lastly, we added Linux x86 fuzzing configurations
-([1](https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Libfuzzer%20Upload%20Linux32%20ASan),
-[2](https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Libfuzzer%20Upload%20Linux32%20ASan%20Debug))
-for libFuzzer, which resulted in
-[100](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=x86_libfuzzer_chrome_asan+-status%3AWontFix%2CDuplicate+OR+x86_libfuzzer_chrome_asan_debug+-status%3AWontFix%2CDuplicate&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
-new bugs.
-
-In Platform Security, we started sandboxing the network service on macOS. On
-Windows, we’re starting to experiment with an improved GPU sandbox. The network
-service has the beginnings of a sandbox on Windows, and we’ll be working on
-tightening it in future work. We’re also continuing to gradually harden the
-implementations of core Chromium libraries in base/ and elsewhere. We had a
-great adventure finding and fixing bugs in SQLite as well, including an
-innovative and [productive new
-fuzzer](https://github.com/google/fuzzer-test-suite/blob/master/tutorial/structure-aware-fuzzing.md#example-sqlite).
-We’re continuing to hammer away at bugs in PDFium, and refactoring it
-significantly.
-
-To help sites defend against cross-site scripting (XSS), we are working on
-[Trusted Types](https://wicg.github.io/trusted-types/dist/spec/). This aims to
-bring a derivative of Google's "[Safe HTML
-Types](https://github.com/google/safe-html-types/blob/master/doc/safehtml-types.md)"
-— which relies on external tooling that may be incompatible with existing
-workflows or code base — directly into the web platform, thus making it
-available to everyone. Both Google-internal and [external
-teams](https://github.com/cure53/DOMPurify/blob/master/demos/trusted-types-demo.html)
-are presently working on integrating Trusted Types into existing frameworks
-which, if successful, offers the chance to rapidly bring this technique to large
-parts of the web. Chrome 73 will see an [origin
-trial](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/I9To21DXcLo/NrU9P0M4EAAJ).
-
-The work on [Site Isolation](/Home/chromium-security/site-isolation) continues
-as we focus on enabling it on Android — support for adding isolated origins at
-runtime, fixing issues with touch events, and balancing process usage for
-maximizing stability. We added improvements to CORB to prevent bypasses from
-exploited renderers, we announced [extensions changes for content script
-requests](/Home/chromium-security/extension-content-script-fetches), and we
-reached out to affected authors with guidance on how to update. Additionally, we
-continue to add more enforcements to mitigate compromised renderers, which is
-the ultimate end goal of the project. Last but not least, we have worked to
-improve code quality and clean up architectural deficiencies which accumulated
-while developing the project.
-
-Chrome OS 71 saw the initial, limited release of USBGuard, a technology that
-improves the security of the Chrome OS lock screen by (carefully) blocking USB
-devices on the lock screen.
-
-As ever, many thanks to all those in the Chromium community, and our VRP
-reporters, who help make the Web more secure!
-
-Cheers,
-
-Andrew, on behalf of the Chrome security team
-
-## Q3 2018
-
-Greetings!
-
-Chrome turned 10 in September! Congrats to the team on a [decade of making the
-web more
-secure](https://www.wired.com/story/chrome-decade-making-the-web-more-secure/).
-
-In the quest to find security bugs, the Bugs-- team incorporated Machine
-Learning in ClusterFuzz infrastructure using [RNN
-model](https://en.wikipedia.org/wiki/Recurrent_neural_network) to improve upon
-corpus quality and code coverage. We experimented with improving fuzzing
-efficiency by adding instability handling and mutation stats strategies inside
-libFuzzer. We added a new [Mojo service
-fuzzer](https://bugs.chromium.org/p/chromium/issues/detail?id=607649) by
-extending the Mojo javascript bindings and found [security
-bugs](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=mojo_fuzzer+label%3AClusterFuzz+Type%3DBug-Security&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids).
-We also
-[migrated](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/code_coverage.md)
-our fuzzing infrastructure to provide [Clang Source-based Code
-Coverage](https://clang.llvm.org/docs/SourceBasedCodeCoverage.html) reports and
-deprecated [Sancov](https://clang.llvm.org/docs/SanitizerCoverage.html).
-
-The Platform Security team continued to add hardening and checks to fundamental
-classes and libraries in base/, and did some of the same work in PDFium and
-other parsers and interpreters in Chromium. We also provided some sandboxing
-consulting to other teams for their new services including audio and networking.
-
-Chrome on macOS now has a new sandbox architecture, launched in Chrome 69, which
-immediately initializes when a new process executes. This reduces Chrome’s
-attack surface and allows better auditing of system resource access between
-macOS versions.
-
-Chrome OS Security wrapped up the response to the [L1TF
-vulnerability](https://www.intel.com/content/www/us/en/architecture-and-technology/l1tf.html),
-fixes for which enabled shipping Linux apps on Chrome OS without exposing users
-to extra risk. Moreover, we received [an (almost) full-chain exploit for Chrome
-OS](https://bugs.chromium.org/p/chromium/issues/detail?id=884511) that both
-validated earlier sandboxing work (like for Shill, Chrome OS’s connection
-manager) and also shed light on further hardening work that was wrapped up in
-Q3.
-
-Chrome 70 shipped TLS 1.3, although we did have to disable a downgrade check in
-this release due to a last-minute incompatibility with some network devices.
-
-After the excitement [enabling Site Isolation by default on desktop
-platforms](https://security.googleblog.com/2018/07/mitigating-spectre-with-site-isolation.html)
-in Q2, the team has been focused on building a form of Site Isolation suitable
-for devices that run Android, which have more limited memory and processing
-power. We've been fixing Android-specific issues (alongside a lot of maintenance
-for the desktop launch), we have started field trials for isolating a subset of
-sites, and we are working on ways to add more sites to isolate at runtime.
-Separately, we added several more enforcements to mitigate compromised
-renderers, to extend the protection beyond Spectre.
-
-Users should expect that the web is safe by default, and they’ll be warned when
-there’s an issue. In Chrome 68, we hit a milestone for Chrome security UX,
-[marking all HTTP
-sites](https://www.blog.google/products/chrome/milestone-chrome-security-marking-http-not-secure/)
-as “not secure”. We continued down that path in Chrome 70, [showing the “not
-secure” string in
-red](https://www.blog.google/products/chrome/milestone-chrome-security-marking-http-not-secure/)
-when users enter data on an HTTP page. We began stepping towards removing
-Chrome’s positive security indicators so that the default unmarked state is
-secure, starting by [removing the “Secure”
-wording](https://blog.chromium.org/2018/05/evolving-chromes-security-indicators.html)
-in Chrome 69.
-
-We [would like to
-experiment](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/ZJxkCJq5zo4/4sSMVZzBAwAJ)
-with mixed content autoupgrading to simplify (i.e. improve) the user experience,
-and are currently collecting metrics about the impact. We’re also working to
-improve Chrome security UX under the hood -- we launched [committed HTTPS
-interstitials](https://docs.google.com/document/d/1rEBpw5V-Nn1UIi8CIFa5ZZvwlR08SkY3CogvWE2UMFs/edit)
-on Canary and Dev.
-
-As ever, many thanks to all those in the Chromium community, and our[ VRP
-reporters](https://www.google.com/about/appsecurity/chrome-rewards/index.html),
-who help make the Web more secure!
-
-Cheers,
-
-Andrew, on behalf of the Chrome security team
-
-## Q2 2018
-
-Greetings and salutations,
-
-It's time for another (rather belated!) update from your friends in Chrome
-Security, who are hard at work to keep Chrome the most secure platform to browse
-the Internet.
-
-We're very excited that [Site Isolation](/Home/chromium-security/site-isolation)
-is now [enabled by
-default](https://security.googleblog.com/2018/07/mitigating-spectre-with-site-isolation.html)
-as a Spectre mitigation in M67 for Windows, macOS, Linux, and Chrome OS users!
-This involved an incredible number of fixes from the team in Q2 to make
-out-of-process iframes fully functional, especially in areas like painting,
-input events and performance, and it included standardizing [Cross-Origin Read
-Blocking (CORB)](/Home/chromium-security/corb-for-developers). Stay tuned for
-more updates on Site Isolation coming later this year, including additional
-protections from compromised renderers. Chris and Emily talked about Spectre
-response, Site Isolation, and necessary developer steps [at
-I/O](https://youtu.be/dBuykrdhK-A). We also announced that security bugs found
-in Site Isolation could qualify for [higher VRP reward
-payments](https://www.google.com/about/appsecurity/chrome-rewards/index.html#special)
-for a limited time.
-
-In their quest to find security bugs, the Bugs-- team integrated [Clang
-Source-based Code
-Coverage](https://clang.llvm.org/docs/SourceBasedCodeCoverage.html) into
-Chromium project and launched a
-[dashboard](https://chromium-coverage.appspot.com/) to make it easy for
-developers to see which parts of the code are not covered by fuzzers and unit
-tests. We wrote a [Mojo service
-fuzzer](https://cs.chromium.org/chromium/src/mojo/public/tools/fuzzers/) that
-generates fuzzing bindings in JS and found some scary
-[vulnerabilities](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=mojo_fuzzer+Type%3DBug-Security&sort=-type&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified+Type&x=m&y=releaseblock&cells=ids).
-We added [libFuzzer fuzzing support in Chrome
-OS](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/fuzzing.md) and
-got new fuzz target contributions from Chrome OS developers and found several
-[bugs](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=libfuzzer_asan_chromeos+-status%3ADuplicate%2CWontFix+label%3AClusterFuzz&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids).
-We made numerous improvements to our ClusterFuzz fuzzing infrastructure,
-examples include dynamically adjusting CPU allocation for inefficient fuzz
-targets until their performance issues are resolved, cross-pollinating corpuses
-across fuzz targets and projects, and more.
-
-The Platform Security team has been working on adding bounds checks and other
-sanity checks to
-[base/containers](https://bugs.chromium.org/p/chromium/issues/detail?id=817982),
-as part of an overarching effort to harden heavily-used code and catch bugs.
-We’ve had some good initial success and expect to keep working on this for the
-rest of the year. This is a good area for open source contributors and VRP
-hunters to work on, too!
-
-In our quest to move the web to 100% HTTPS, we prepared for showing Not Secure
-warnings on all http:// pages which started in M68. We sent Search Console
-messages to affected sites and expanded our [enterprise
-controls](/administrators/policy-list-3#UnsafelyTreatInsecureOriginAsSecure) for
-this warning. We
-[announced](https://blog.chromium.org/2018/05/evolving-chromes-security-indicators.html)
-some further changes to Chrome’s connection security indicators: in M69, we’ll
-be removing the Secure chip next to https:// sites, and in M70 we’ll be turning
-the Not Secure warning red to more aggressively warn users when they enter data
-on a non-secure page.
-
-We also added some features to help users and developers use HTTPS more often.
-The omnibox now remembers pages that redirect from http:// to https://, so that
-users don’t get sent to the http:// version in the future. We fixed a
-longstanding bug with the
-[upgrade-insecure-requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Upgrade-Insecure-Requests)
-CSP directive that helps developers find and fix mixed content: it now upgrades
-requests when following redirects. Finally, we added a setting to
-chrome://flags#unsafely-treat-insecure-origin-as-secure to let developers more
-easily test HTTPS-only features, especially on Android and ChromeOS.
-
-To better protect users from unwanted extensions, we announced [the deprecation
-of inline installations for
-extensions](https://blog.chromium.org/2018/06/improving-extension-transparency-for.html).
-This change will result in Chrome users being directed to the Chrome Web Store
-when installing extensions, helping to ensure user can make a better informed
-decision.
-
-Chrome OS spent a big chunk of Q2 updating and documenting our processes to
-ensure we can better handle future incidents like Spectre and Meltdown. We
-expanded our [security review
-guidelines](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/security_review_howto.md)
-so that they can be used both by security engineers while reviewing a feature,
-as well as by SWE and PM feature owners as they navigate the Chrome OS launch
-process.
-
-We continued our system hardening efforts by making Shill, the Chrome OS network
-connection manager, run in a restrictive, non-root environment starting with
-M69. [Shill was exploited as part of a Chrome OS full-chain
-exploit](https://googleprojectzero.blogspot.com/2016/12/chrome-os-exploit-one-byte-overflow-and.html),
-so sandboxing it was something that we’ve been wanting to do for a long time.
-With PIN sign-in launching with M68, the remaining work to make the underlying
-user credential brute force protection mechanism more robust is underway, and we
-plan to enable it for password authentication later this year. Hardening work
-also happened on the Android side, as we made progress on functionality that
-will allow us to verify generated code on Android using the TPM.
-
-Q2 continued to require incident response work on the Chrome OS front, as the
-fallout from Spectre and Meltdown included several researchers looking into the
-consequences of speculative execution. The good news is that we started
-receiving updated microcode for Intel devices and these updates will start to go
-out with M69.
-
-As ever, many thanks to all those in the Chromium community, and our [VRP
-reporters](https://www.google.com/about/appsecurity/chrome-rewards/index.html),
-who help make the Web more secure!
-
-Cheers
-
-Andrew
-
-on behalf of the Chrome Security Team
-
-## Q1 2018
-
-Greetings and salutations,
-
-It's time for another update from your friends in Chrome Security, who are hard at work trying to keep Chrome as the most secure platform to browse the Internet. We'd also like to welcome our colleagues in Chrome OS security to this update - you'll be able to hear what they've been up to each quarter going forward.**
-
-In our effort to find and fix bugs, we collaborated with the [Skia](https://skia.org/) team and [integrated](https://github.com/google/oss-fuzz/tree/master/projects/skia) 21 fuzz targets into OSS-Fuzz for continuous 24x7 fuzzing on Skia trunk. So far, we have found [38](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=Proj%3Dskia+Type%3DBug-Security+-status%3ADuplicate&colspec=ID+Type+Component+Status+Proj+Reported+Owner+Summary&cells=ids) security vulns! We also added several new fuzz targets as part of a 2-week bug bash (e.g. [multi-msg mojo fuzzer](https://chromium-review.googlesource.com/c/chromium/src/+/973685), [audio decoder fuzzer](https://chromium-review.googlesource.com/c/chromium/src/+/976184), [appcache manifest parsing fuzzer](https://chromium-review.googlesource.com/c/chromium/src/+/982677), [json fuzzer](https://chromium-review.googlesource.com/c/chromium/src/+/959564) [improvements](https://chromium-review.googlesource.com/c/chromium/src/+/971063), etc) and found an additional [vulnerability](https://crbug.com/826193) through code review. We added libFuzzer support for Chrome OS and integrated it with ClusterFuzz. Sample [puffin fuzzer](https://chromium-review.googlesource.com/c/chromiumos/overlays/chromiumos-overlay/+/944190) found [11](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=libfuzzer_asan_chromeos+-status%3AWontFix%2CDuplicate&colspec=ID+Type+Component+Status+Proj+Reported+Owner+Summary&x=m&y=releaseblock&cells=ids) bugs (includes 2 security). We made several improvements to AFL fuzzing engine integration and fuzzing strategies. This brings it on-par with libFuzzer in terms of the number of bugs found -- it's now ~3X more productive than before! We added support for building MSan instrumented system libraries for newer debian distros ([1](https://github.com/google/oss-fuzz/issues/608), [2](/developers/testing/memorysanitizer)).
-
-To [help users infected with unwanted software](https://support.google.com/chrome/answer/2765944?co=GENIE.Platform%3DDesktop&hl=en), we moved the standalone Chrome Cleanup Tool into Chrome. Scanning and cleaning Windows machines can now be triggered by visiting chrome://settings/cleanup. There was some misunderstanding on Twitter about why Chrome was scanning, which we clarified. We also pointed people to the [unwanted software protection](https://www.google.com/chrome/privacy/whitepaper.html#unwantedsoftware) section of Chrome's privacy whitepaper so they can understand what data is and isn’t sent back to Google.
-
-In our effort to move the web to 100% HTTPS, we [announced](https://security.googleblog.com/2018/02/a-secure-web-is-here-to-stay.html) that Chrome will start marking all HTTP pages with a Not Secure warning in July. This is a big milestone that concludes a multi-year effort to roll out this warning to all non-secure pages. Alongside that announcement, we added a [mixed content audit](https://developers.google.com/web/tools/lighthouse/audits/mixed-content) to [Lighthouse](https://developers.google.com/web/tools/lighthouse/), an automated tool for improving webpage quality. This audit helps developers find and fix mixed content, a major hurdle for migrating to HTTPS. We also [announced](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/ANnafFBhReY/1Xdr53KxBAAJ) the deprecation of AppCache in nonsecure contexts.
-
-In addition to MOAR TLS, we also want more secure and usable HTTPS, or BETTER TLS. With that goal in mind, we made changes to get better metrics about features intended to help users with client or network misconfigurations that break their HTTPS connections (like our [customized certificate warnings](https://research.google.com/pubs/archive/46359.pdf)). We also added more of these “helper” features too: for example, we now bundle help content targeted at users who are stuck with incorrect clocks, captive portals, or other configuration problems that interfere with HTTPS. Finally, we started preparing for Chrome’s upcoming Certificate Transparency [enforcement deadline](https://groups.google.com/a/chromium.org/d/msg/ct-policy/wHILiYf31DE/iMFmpMEkAQAJ) by analyzing and releasing some [metrics](https://www.youtube.com/watch?v=e_rwG7MA5VU) about the state of CT adoption so far.
-
-To help make security more usable in Chrome, we’re exploring how [URLs are problematic](https://www.youtube.com/watch?v=UD-ukjVoeLc). We removed https/http schemes and www/m subdomains from the steady-state omnibox, and we’re studying the impact of removing positive security indicators that might mislead or distract from the important security information in the origin.
-
-Chrome OS Security had a busy Q1. The vulnerabilities known as [Meltdown and
-Spectre](https://meltdownattack.com/) were disclosed in early January, and a
-flurry of activity followed as we rushed to patch older kernels against Meltdown
-in Chrome OS 66, and incorporated Spectre fixes for ARM Chrome OS devices in
-Chrome OS 67. We also started codifying our [security review guidelines in a
-HOWTO
-doc](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/security_review_howto.md),
-to allow the larger Chrome OS team to better prepare for security reviews of
-their features. Moreover, after being bit by symlinks and FIFOs being used as
-part of [several](https://bugs.chromium.org/p/chromium/issues/detail?id=344051)
-[exploit](https://bugs.chromium.org/p/chromium/issues/detail?id=648971)
-[chains](https://bugs.chromium.org/p/chromium/issues/detail?id=766253), we
-finally landed
-[symlink](https://chromium-review.googlesource.com/c/chromiumos/platform2/+/966683)
-and
-[FIFO](https://chromium-review.googlesource.com/c/chromiumos/platform2/+/978780)
-blocking in Chrome OS 67. On the hardware-backed security front, we've split off
-the component that allows irreversible once-per-boot decisions into its own
-service, bootlockboxd. Finally, work is nearing completion for a first shipping
-version of a hardware-backed mechanism to protect user credentials against
-brute force attacks. This will allow PIN codes as a new authentication
-mechanism for Chrome OS meeting our authentication security guidelines, and
-we'll use it to upgrade password-based authentication to a higher security bar
-subsequently.
-
-Spectre kept us busy on the Chrome Browser side as well. The V8 team landed a large number of JIT mitigations to make Spectre exploits harder to produce, and high resolution timers like SharedArrayBuffer were temporarily disabled; more details on our response [here](/Home/chromium-security/ssca). In parallel, the [Site Isolation](/Home/chromium-security/site-isolation) team significantly ramped up efforts to get Site Isolation launched as a Spectre mitigation, since it helps avoid having data worth stealing anywhere in a compromised process. In Q1, we substantially improved support for the Site Isolation enterprise policies that launched prior to the Spectre disclosure, including:
-
-* Reducing total memory overhead from 20% to 10%.
-* Significantly improving input event handling in out-of-process iframes
- (OOPIFs).
-* Significantly improving DevTools support for OOPIFs.
-* Adding ChromeDriver support for OOPIFs.
-* Adding support for printing OOPIFs.
-* Improving rendering performance for OOPIFs.
-* Starting standards discussions for Cross-Origin Read Blocking (CORB).
-
-Thanks to these improvements, we have been running field trials and are preparing to launch the strict Site Isolation policy on desktop. We [talked about](https://www.youtube.com/watch?v=dBuykrdhK-A) much of this work at Google I/O.
-
-Finally, we continue to work on exploit mitigations and other security hardening efforts. For example, [Oilpan](https://chromium.googlesource.com/chromium/src/+/lkcr/third_party/WebKit/Source/platform/heap/BlinkGCDesign.md), blink's garbage collecting memory management system, [removed its inline metadata](https://bugs.chromium.org/p/chromium/issues/detail?id=633030), which make it more difficult to overwrite with memory corruption bugs. This was the culmination of several years of effort, as performance issues were worked through. In Android P, we refactored the WebView [zygote](https://developer.android.com/topic/performance/memory-overview) to become a child of the main app_process zygote, reducing memory usage and helping with the performance of future Site Isolation efforts. Members of Platform Security also helped coordinate the response to Spectre and Meltdown, and still managed to find time to conduct their routine reviews of new [Chrome features](https://www.chromestatus.com/features).
-
-## Q4 2017
-
-Greetings and salutations,
-
-It's time for another update from your friends in Chrome Security, who are hard
-at work trying to make Chrome the[ most secure platform to browse the
-Internet](/Home/chromium-security). As it's the start of 2018, [we
-reflected](https://www.blog.google/products/chrome/reflecting-years-worth-chrome-security-improvements/)
-on a year’s worth of security improvements, and announced new stats around our
-VRP and Safe Browsing warnings.
-
-Here are some highlights from the last quarter of 2017:
-
-In effort to find and fix bugs, we (Bugs--):
-
-Wrote a new and easily extensible javascript fuzzer using
-[Babel](https://babeljs.io/), which found 100+ bugs in both V8
-([list](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=ochang_js_fuzzer+-status%3ADuplicate%2CWontFix&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles))
-and other browser javascript engines
-([list](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=js_fuzzer+-status%3AWontFix%2CDuplicate&colspec=ID+Type+Component+Status+Proj+Reported+Owner+Summary&cells=ids)).
-
-Started integrating [Clang Source-based Code
-Coverage](https://clang.llvm.org/docs/SourceBasedCodeCoverage.html) in the
-Chromium build system and are deprecating [Sanitizer
-Coverage](https://clang.llvm.org/docs/SanitizerCoverage.html). Clang
-coverage is very precise, shows hit frequencies and is much easier to
-visualize. You can follow progress
-[here](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=component%3ATools%3ECodeCoverage).
-
-Hosted a month long fuzzathon in October where Chromium developers
-participated in writing new [fuzz
-targets](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/+/HEAD/README.md)
-and fixing blockers for existing ones. This resulted in 93 bugs, several of
-which were in new uncovered areas of codebase; results
-[here](https://clusterfuzz.com/v2/fuzzathon).
-
-Fixed several
-[bugs](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=component%3ATools%3ETest%3EPredator+status%3AFixed%2CVerified&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
-in our automated owner and component assignment pipeline and
-[expanded](https://bugs.chromium.org/p/chromium/issues/detail?id=760607) our
-builder infrastructure to archive builds more frequently, for more accurate
-blame results. Faster and more accurate bug triaging means faster fixes for
-users!
-
-Other than fixing bugs, we (MOAR TLS, Enamel, Safe Browsing) also:
-
-[Blogged](https://www.blog.google/topics/safety-security/say-yes-https-chrome-secures-web-one-site-time/)
-about the massive uptick in HTTPS we saw in 2017: 71 of the top 100 sites on
-the Web use HTTPS by default, up from 37 a year ago. We also announced our
-continuing platinum sponsorship of Let’s Encrypt.
-
-Delivered a change (in M62, [announced in
-April](https://blog.chromium.org/2017/04/next-steps-toward-more-connection.html)),
-extending the “Not Secure” omnibox warning chip to non-secure pages loaded
-while Incognito and to non-secure pages after the user edits a form field.
-
-Added an [enterprise
-policy](/administrators/policy-list-3#UnsafelyTreatInsecureOriginAsSecure)
-(in M65) for treating insecure origins as secure contexts, to help with
-development, testing, and intranet sites that are not secured with HTTPS.
-
-More tightly integrated Chrome’s captive portal detection with operating
-system APIs. This feature helps users log in to captive portals (like hotel
-or airport wifi networks) rather than seeing unhelpful TLS certificate
-errors.
-
-[Launched](https://www.blog.google/topics/safety-security/new-security-protections-tailored-you/)
-predictive phishing protection to warn users when they’ve typed their Google
-password into a never-seen-before phishing site.
-
-As always, we invest a lot in security architecture and exploit mitigations.
-Last quarter, we (Platform Security / Site Isolation):
-
-Started rolling out the [Mac Sandbox
-v2](https://chromium.googlesource.com/chromium/src/+/HEAD/sandbox/mac/seatbelt_sandbox_design.md),
-bringing both greater security and cleaner code.
-
-[Refactored sandbox code out of
-//content](https://bugs.chromium.org/p/chromium/issues/detail?id=708738) to
-make it easier to use across the system.
-
-Worked on and helped coordinate Chrome's response to the recently announced
-[Spectre and Meltdown CPU
-vulnerabilities](https://blog.google/topics/google-cloud/what-google-cloud-g-suite-and-chrome-customers-need-know-about-industry-wide-cpu-vulnerability/)
-and worked with the [V8 team](https://developers.google.com/v8/) who
-spearheaded Chrome's Javascript and WebAssembly mitigations which are
-rolling out to users now.
-
-Accelerated the rollout of [Site
-Isolation](/Home/chromium-security/site-isolation) as a
-[mitigation](/Home/chromium-security/ssca) for
-[Spectre/Meltdown](https://blog.google/topics/google-cloud/what-google-cloud-g-suite-and-chrome-customers-need-know-about-industry-wide-cpu-vulnerability/).
-Enabling Site Isolation reduces the amount of valuable cross-site data that
-can be stolen by such attacks. We're working to fix the currently known
-issues so that we can start enabling it by default.
-
-Implemented [cross-site document
-blocking](http://www.chromium.org/developers/design-documents/blocking-cross-site-documents)
-in (M63) when Site Isolation is enabled. This ensures that cross-site HTML,
-XML, JSON, and plain text files are not given to a renderer process on
-subresource requests unless allowed by [CORS](https://www.w3.org/TR/cors/).
-Both --site-per-process and --isolate-origins modes are [now available via
-enterprise
-policy](https://www.blog.google/topics/connected-workspaces/security-enhancements-and-more-enterprise-chrome-browser-customers/)
-in Chrome 63.
-
-Ran field trials of --site-per-process and --isolate-origins on 50% of
-Chrome Canary instances to measure performance, fix crashes, and spot
-potential issues. In a separate launch involving out-of-process iframes and
-Site Isolation logic, <https://accounts.google.com> now has a dedicated
-renderer process in Chrome 63 to support upcoming requirements for Chrome
-Signin.
-
-We have landed a large number of functional and performance improvements for
-Site Isolation, including fixes for input events, DevTools, OAuth, hosted
-apps, crashes, and same-site process consolidation which reduces memory
-overhead.
-
-To help users that inadvertently installs unwanted software, we (Chrome
-Protector):
-
-Launched new Chrome Cleanup Tool UI , which we think is more comprehensible
-for users.
-
-Launched a sandboxed ESET-Powered [Chrome Cleanup
-Tool](https://blog.google/products/chrome/cleaner-safer-web-chrome-cleanup/)
-
-Running on 100% of Chrome users by Nov 23
-
-Lastly, we (BoringSSL) deployed TLS 1.3 to Chrome stable for a couple weeks in
-December and gathered [valuable
-data](https://www.ietf.org/mail-archive/web/tls/current/msg25168.html).
-
-As ever, many thanks to all those in the Chromium community who help make the
-Web more secure!
-
-Cheers
-
-Andrew
-
-on behalf of the Chrome Security Team
-
-## Q3 2017
-
-Greetings and salutations,
-
-It's time for another update from your friends in Chrome Security, who are hard
-at work trying to make Chrome the[ most secure platform to browse the
-Internet](/Home/chromium-security). Give you're reading this, you might well be
-interested in [two
-whitepapers](https://www.blog.google/topics/connected-workspaces/2-new-white-papers-examine-enterprise-web-browser-security/)
-evaluating enterprise browser security that were released recently.
-
-Beyond that, here's a recap from last quarter:
-
-Bugs-- team
-
-We've been researching ways to fuzz grammar based formats efficiently. We
-experimented with in-process fuzzing with
-[libprotobuf-mutator](https://github.com/google/libprotobuf-mutator) and
-added a
-[sample](https://chromium.googlesource.com/chromium/src/+/HEAD/testing/libfuzzer/libprotobuf-mutator.md).
-
-Recent ClusterFuzz improvements for developers:
-
- The [reproduce tool](https://github.com/google/clusterfuzz-tools) is now
- out of beta and supports Linux and Android platforms.
-
- Performance improvements to ClusterFuzz UI and migrated to [Polymer
- 2](https://www.polymer-project.org/2.0/docs/about_20).
-
- We finished the remaining pieces of our end-to-end bug triage automation
- and are now auto-assigning
- [owners](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ATest-Predator-AutoOwner&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
- and
- [components](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ATest-Predator-AutoComponents&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
- for all newly filed bugs.
-
-We have also made infrastructure improvements to
-[OSS-Fuzz](https://github.com/google/oss-fuzz) to better isolate workloads
-between different projects. OSS-Fuzz continues to improve the security of
-the overall web
-([74](https://github.com/google/oss-fuzz/tree/master/projects) projects
-running 24x7,
-[636](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=-component%3AInfra+status%3ANew%2CFixed%2CVerified+Type%3DBug-Security+&sort=-id&colspec=ID+Type+Component+Status+Proj+Reported+Owner+Summary&cells=ids)
-security bugs fixed)!
-
-Enamel, Permissions
-
-We began [marking FTP as Not
-Secure](https://groups.google.com/a/chromium.org/d/msg/security-dev/HknIAQwMoWo/xYyezYV5AAAJ)
-with Chrome 63.
-
-We published a [paper](https://research.google.com/pubs/pub46359.html) in
-CCS 2017 describing years of work we’ve done to investigate and mitigate
-false-positive certificate errors. We also launched new improvements to help
-users who see lots of these spurious errors:
-
- We launched an interstitial to help users with buggy MITM Software with
- Chrome 63 (see chrome://interstitials/).
-
- We launched an interstitial to help users affected by Superfish with
- Chrome 61 (see chrome://interstitials/).
-
- Better integration with the OS for captive portal detection on Android
- and Windows in Chrome 63.
-
-Launched new [Site
-Details](https://docs.google.com/document/d/1gQG1-QjOuswdwZC-yMhWai7divOPXiCp0mO82SO5VSs/edit?pli=1)
-page.
-
-Removed non-factory-default settings from PageInfo and added back in the
-Certificate Viewer link.
-
-Launching [modal permission prompts on Android
-](https://blog.chromium.org/2017/10/chrome-63-beta-dynamic-module-imports_27.html)in
-M63.
-
-Removed the ability to request Notification permission from iframes and over
-HTTP.
-
-MOAR TLS
-
-The change to [mark HTTP
-pages](https://blog.chromium.org/2017/04/next-steps-toward-more-connection.html)
-in Incognito or after form field editing as Not Secure is in Chrome 62. We
-sent &gt; 1 million Search Console messages warning webmasters about this
-change.
-
-Google is [preloading HSTS for more
-TLDs](https://security.googleblog.com/2017/09/broadening-hsts-to-secure-more-of-web.html),
-the first new ones since .google was preloaded in 2015.
-
-Chrome Safe Browsing
-
-Launched the [PVer4](https://developers.google.com/safe-browsing/v4/)
-database-update protocol to all users, saving them 80% of the bandwidth used
-by Safe Browsing.
-
-Platform Security
-
-Added support for [new Win10 sandbox
-mitigations](https://bugs.chromium.org/p/chromium/issues/detail?id=733739)
-in M61 as part of our continued Windows Sandbox efforts.
-
-To help block 3rd-party code being injected into Chrome processes on Windows
-we've [Enabled third-party blocking on all child
-processes](https://bugs.chromium.org/p/chromium/issues/detail?id=750886#c1),
-after warmup (delayed mitigation), in M62.
-
-New in Android O, the Chrome-powered WebView component [now renders content
-in a separate, sandboxed
-process](https://android-developers.googleblog.com/2017/06/whats-new-in-webview-security.html)!
-This brings the same security and stability benefits of Chrome to web pages
-rendered within apps.
-
-Site Isolation
-
-We launched [OOPIF](/developers/design-documents/oop-iframes)-based
-&lt;webview&gt; in M61 for ChromeOS/Mac/Linux and in M62 for Windows. This
-eliminates BrowserPlugin for everything except PDFs (which we're working on
-now), helping to clean up old code.
-
-Running an experiment in M63 to give process isolation to
-[accounts.google.com](http://accounts.google.com/), to improve Chrome Signin
-security.
-
-Finished design plans for using isolated processes when users click through
-SafeBrowsing malware warnings.
-
-Improved some of the Site Isolation enforcement mechanisms, including
-passwords and localStorage.
-
-Improved OOPIF support in several areas, including basic frame architecture
-(e.g., how proxy frames are created), touch selection editing, and gesture
-fling. Also making progress on OOPIF printing support.
-
-As ever, many thanks to all those in the Chromium community who help make the
-web more secure!
-
-Cheers
-
-Andrew, on behalf of the Chrome Security Team
-
-## Q2 2017
-
-Greetings and salutations,
-
-It's time for another update from your friends in Chrome Security, who are hard
-at work trying to make Chrome the[ most secure platform to browse the
-Internet](/Home/chromium-security). Here’s a recap from last quarter:
-
-The Bugs-- team have released a [new
-tool](https://github.com/google/clusterfuzz-tools) to make ClusterFuzz testcase
-reproduction easy for developers. Our open source fuzzing efforts (aka
-[OSS-Fuzz](https://github.com/google/oss-fuzz)) continue to improve the security
-of the overall web
-([86](https://github.com/google/oss-fuzz/tree/master/projects) projects,
-[1859](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=-component:Infra%20status:New,Fixed,Verified&sort=-id&colspec=ID%20Type%20Component%20Status%20Proj%20Reported%20Owner%20Summary)
-bugs, see recent blog post
-[here](https://testing.googleblog.com/2017/05/oss-fuzz-five-months-later-and.html)).
-We have written a new Javascript fuzzer that has filed
-[102](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=inferno_js_fuzzer%20-status:Duplicate,WontFix%20OR%20inferno_js_fuzzer_c%20-status:Duplicate,WontFix&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID%20Pri%20Status%20Summary%20Modified%20OS%20M%20Security_severity%20Security_impact%20Owner%20Reporter)
-bugs to date, many with security implications. We also found some interesting
-vulnerabilities
-([1](https://bugs.chromium.org/p/chromium/issues/detail?id=740710),
-[2](https://bugs.chromium.org/p/chromium/issues/detail?id=716044),
-[3](https://bugs.chromium.org/p/chromium/issues/detail?id=724299)) through our
-code auditing efforts.
-
-We integrated the Safe Browsing API with WebView [starting in Android
-O](https://developer.android.com/preview/features/managing-webview.html),
-allowing custom interstitial blocking pages. WebView developers will be able to
-opt-in to check URLs against Google Safe Browsing’s list of unsafe websites.
-
-We understand that sites which repeatedly prompt for powerful permissions often
-annoy users and generate warning fatigue. Starting in Chrome 59, we’ve started
-[temporarily blocking permission
-requests](https://www.chromestatus.com/feature/6443143280984064) if users have
-dismissed a permission prompt from a site multiple times. We’re also moving
-forward with plans to [deprecate permissions in cross-origin
-iframes](/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes)
-by default. Permission requests from iframes have the potential to mislead users
-into granting access to content they didn’t intend.
-
-The Platform Security team has concluded several years of A/B experimentation on
-Android, and with Chrome 58 we have turned on the [Seccomp-BPF
-sandbox](https://bugs.chromium.org/p/chromium/issues/detail?id=166704) for all
-compatible devices. This sandbox filters system calls to reduce the attack
-surface of the Linux kernel in renderer processes. Currently about 50% of
-Android devices support Seccomp, and this number is rising at a steady rate. In
-Chrome 59, you can navigate to about:sandbox to see whether your Android device
-supports Seccomp.
-
-We have migrated PDFium to use PartitionAlloc for most allocations, with
-distinct partitions for strings, array buffers, and general allocations. In
-Chrome 61, all three partitions will be active.
-
-We continue to work on MOAR+BETTER TLS and
-[announced](https://blog.chromium.org/2017/04/next-steps-toward-more-connection.html)
-the next phase of our plan to help people understand the security limitations of
-non-secure HTTP. Starting in Chrome 62 (October), we’ll mark HTTP pages as “Not
-secure” when users enter data in forms, and on all HTTP pages in Incognito mode.
-We [presented](https://youtu.be/GoXgl9r0Kjk) new HTTPS migration case studies at
-Google I/O, focusing on real-world site metrics like SEO, ad revenue, and site
-performance.
-
-We experimented with improvements to Chrome’s captive portal detection on Canary
-and launched them to stable in Chrome 59, to avoid a predicted 1% of all
-certificate errors that users see.
-
-Also, users [may
-restore](https://textslashplain.com/2017/05/02/inspecting-certificates-in-chrome/)
-the Certificate information to the Page Information bubble!
-
-Those working on the Open Web Platform have implemented three new [Referrer
-Policies](https://w3c.github.io/webappsec-referrer-policy/#referrer-policies),
-giving developers more control over their HTTP Referer headers and bringing our
-implementation in line with the spec. We also fixed a longstanding bug so that
-site owners can now use [upgrade-insecure-requests in conjunction with CSP
-reporting](https://w3c.github.io/webappsec-upgrade-insecure-requests/#reporting-upgrades),
-allowing site owners to both upgrade and remediate HTTP references on their
-HTTPS sites.
-
-After our launch of --isolate-extensions in Chrome 56, the Site Isolation team
-has been preparing for additional uses of [out-of-process
-iframes](/developers/design-documents/oop-iframes) (OOPIFs). We implemented a
-new --isolate-origins=https://example.com command line flag that can give
-dedicated processes to a subset of origins, which is an important step towards
-general [Site Isolation](/developers/design-documents/site-isolation). We also
-prepared the OOPIF-based &lt;webview&gt; field trial for Beta and Stable
-channels, and we ran a Canary field trial of Top Document Isolation to learn
-about the performance impact of putting all cross-site iframes into one subframe
-process. We've been improving general support for OOPIFs as well, including
-spellcheck, screen orientation, touch selection, and printing. The DevTools team
-has also helped out: OOPIFs can now be shown in the main frame's inspector
-window, and DevTools extensions are now more fully isolated from DevTools
-processes.
-
-As ever, many thanks to all those in the Chromium community who help make the
-web more secure!
-
-## Q1 2017
-
-Greetings and salutations,
-
-It's time for another update from your friends in Chrome Security, who are hard
-at work trying to make Chrome the[ most secure platform to browse the
-Internet](/Home/chromium-security). Here’s a recap from last quarter:
-
-Our [Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. In order to get bugs fixed faster, we released a [new
-tool](https://github.com/google/clusterfuzz-tools) to improve developer
-experience when trying to reproduce ClusterFuzz bugs. We have overhauled a
-significant part of the [ClusterFuzz
-UI](https://github.com/google/oss-fuzz/blob/master/docs/clusterfuzz.md) which
-now feature a new fuzzer statistics page, crash statistics page and fuzzer
-performance analyzer. We’ve also continued to improve our
-[OSS-Fuzz](https://github.com/google/oss-fuzz)
-[offering](https://opensource.googleblog.com/2016/12/announcing-oss-fuzz-continuous-fuzzing.html),
-adding numerous
-[features](https://github.com/google/oss-fuzz/issues?page=3&q=is%3Aissue+is%3Aclosed)
-requested by developers and reaching [1000
-bugs](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=status%3AFixed%2CVerified+Type%3ABug%2CBug-Security+-component%3AInfra+)
-milestone with 47
-[projects](https://github.com/google/oss-fuzz/tree/master/projects) in just five
-months since launch.
-
-Members of the Chrome Security team attended the 10th annual [Pwn2Own
-competition](http://blog.trendmicro.com/pwn2own-returns-for-2017-to-celebrate-10-years-of-exploits/)
-at CanSecWest. While Chrome was again a target this year, no team was able to
-demonstrate a fully working chain to Windows SYSTEM code execution in the time
-allowed!
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. Chrome 56 takes advantage of [Control Flow Guard
-(CFG)](https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065(v=vs.85).aspx)
-on Windows for Microsoft system DLLs inside the Chrome.exe processes. CFG makes
-exploiting corruption vulnerabilities more challenging by limiting valid call
-targets, and is available from Win 8.1 Update 3.
-
-[Site Isolation](/developers/design-documents/site-isolation) makes the most of
-Chrome's multi-process architecture to help reduce the scope of attacks. The big
-news in Q1 is that we launched --isolate-extensions to Chrome Stable in Chrome
-56! This first use of out-of-process iframes (OOPIFs) ensures that web content
-is never put into an extension process. To maintain the launch and prepare for
-additional uses of OOPIFs, we fixed numerous bugs, cleaned up old code, reduced
-OOPIF memory usage, and added OOPIF support for more features (e.g.,
-IntersectionObserver, and hit testing and IME on Android). Our next step is
-expanding the OOPIF-based &lt;webview&gt; trial from Canary to Dev channel and
-adding more uses of dedicated processes.
-
-Beyond the browser, our [web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features. Over the
-holidays, Google's security team gave us a holiday gift consisting entirely of
-[interesting ways to bypass CSP's
-nonces](http://sebastian-lekies.de/csp/bypasses.php). We've fixed some
-[obvious](https://bugs.chromium.org/p/chromium/issues/detail?id=679291)
-[bugs](https://bugs.chromium.org/p/chromium/issues/detail?id=680072) they
-uncovered, and we'll continue working with other vendors to harden the spec and
-our implementations. In other CSP news, we polished a mechanism to [enforce CSP
-on child frames](https://w3c.github.io/webappsec-csp/embedded/), shipped a
-[\`script-sample\`
-property](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/XlcpobBfJOI/8WYpiyk0CQAJ)
-in CSP reports, and [allowed hashes to match external
-scripts](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/t2ai4lsHhWI/MndrZyEWCwAJ).
-We're also gathering data to support a few [dangling markup
-mitigations](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/rOs6YRyBEpw/D3pzVwGJAgAJ),
-and dropped support for subresource URLs with [embedded
-credentials](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/lx-U_JR2BF0/Hsg1fiZiBAAJ)
-and [legacy
-protocols](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/bIJdwwoQ98U/-F1aL2FgBAAJ).
-
-We also spend time building[ security
-features](/developers/design-documents/safebrowsing) that[ users
-see](/Home/chromium-security/enamel). To protect users from Data URI phishing
-attacks, Chrome shows the “not secure” warning on Data URIs and [intends to
-deprecate and
-remove](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/GbVcuwg_QjM)
-content-initiated top-frame navigations to Data URIs. We also brought [AIA
-fetching](https://docs.google.com/document/d/1ryqFMSHHRDERg1jm3LeVt7VMfxtXXrI8p49gmtniNP0/edit)
-to Chrome for Android, and early metrics show over an 85% reduction in the
-fraction of HTTPS warnings caused by misconfigured certificate chains on
-Android. We made additional progress on improving Chrome’s captive portal
-detection. Chrome now keeps precise attribution of where bad downloads come
-from, so we can catch malware and UwS earlier. Chrome 57 also saw the launch of
-a [secure time service](/developers/design-documents/sane-time), for which early
-data shows detection of bad client clocks when validating certificates improving
-from 78% to 95%.
-
-We see migration to HTTPS as foundational to any web security whatsoever, so
-we're actively working to drive #MOARTLS across Google and the Internet at
-large. To help people understand the security limitations of non-secure HTTP,
-Chrome now marks HTTP pages with passwords or credit card form fields as “not
-secure” in the address bar, and is experimenting with in-form contextual
-warnings. We’ll [remove
-support](https://bugs.chromium.org/p/chromium/issues/detail?id=672605) for EME
-over non-secure origins in Chrome 58, and we’ll [remove
-support](https://groups.google.com/a/chromium.org/forum/m/#!topic/blink-dev/IVgkxkRNtMo)
-for notifications over non-secure origins in Chrome 61. We talked about our
-#MOARTLS methodology and the HTTPS business case at
-[Enigma](https://www.youtube.com/watch?v=jplIY1GXBHM&feature=youtu.be).
-
-In addition to #MOARTLS, we want to ensure more secure TLS through work on
-protocols and the certificate ecosystem. TLS 1.3 is the next, major version of
-the Transport Layer Security protocol. In Q1, Chrome tried the first,
-significant deployment of TLS 1.3 by a browser. Based on what we learned from
-that we hope to fully enable TLS 1.3 in Chrome in Q2.
-
-In February, researchers from Google and CWI Amsterdam successfully mounted a
-[collision](https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html)
-attack against the SHA-1 hash algorithm. It had been known to be weak for a very
-long time, and in Chrome 56 dropped support for website certificates that used
-SHA-1. This was the culmination of a plan first
-[announced](https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html)
-back in 2014, which we've
-[updated](https://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html)
-a [few
-times](https://security.googleblog.com/2016/11/sha-1-certificates-in-chrome.html)
-since.
-
-As ever, many thanks to all those in the Chromium community who help make the
-web more secure!
-
-Cheers
-
-Andrew, on behalf of the Chrome Security Team
-
-For more thrilling security updates and feisty rants,[ subscribe to
-security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev).
-You can find older updates at[
-https://www.chromium.org/Home/chromium-security/quarterly-updates](/Home/chromium-security/quarterly-updates).
-
-## Q4 2016
-
-Greetings and salutations,
-
-It's time for another update from your friends in Chrome Security, who are hard
-at work trying to make Chrome the[ most secure platform to browse the
-Internet](/Home/chromium-security). Here’s a recap from the last quarter of
-2016:
-
-Our [Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs.
-
-We announced [OSS-Fuzz](https://github.com/google/oss-fuzz), a new Beta program
-developed over the past years with the [Core Infrastructure
-Initiative](https://www.coreinfrastructure.org/) community. This program will
-provide continuous fuzzing for select core open source software. See full blog
-post
-[here](https://security.googleblog.com/2016/12/announcing-oss-fuzz-continuous-fuzzing.html).
-So far, more than [50
-projects](https://github.com/google/oss-fuzz/tree/master/projects) have been
-integrated with OSS-Fuzz and we found ~350
-[bugs](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=Type%3ABug%2CBug-Security%20-component%3AInfra%20-status%3ADuplicate%2CWontFix&colspec=ID%20Type%20Component%20Status%20Proj%20Reported%20Owner%20Summary&num=100&start=300).
-
-Security bugs submitted by external researchers can receive cash money from the
-[Chrome VRP](https://g.co/ChromeBugRewards).
-
-Last year the Chrome VRP paid out almost one million dollars! More details in a
-[blog
-post](https://security.googleblog.com/2017/01/vulnerability-rewards-program-2016-year.html)
-we did with our colleagues in the Google and Android VRPs.
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense.
-
-[Win32k
-lockdown](https://docs.google.com/document/d/1gJDlk-9xkh6_8M_awrczWCaUuyr0Zd2TKjNBCiPO_G4/edit#heading=h.ieb3qn2r8rq1)
-for Pepper processes, including Adobe Flash and PDFium was shipped to Windows 10
-clients on all channels in October 2016. Soon after the mitigation was enabled,
-a Flash 0-day that used win32k.sys as a [privilege
-escalation](https://technet.microsoft.com/en-us/library/security/ms16-135.aspx)
-vector was discovered being used in the wild, and this was successfully blocked
-by this mitigation! James Forshaw from Project Zero also wrote a
-[blog](https://googleprojectzero.blogspot.com/2016/11/breaking-chain.html) about
-the process of shipping this new mitigation.
-
-A new security mitigation on &gt;= Win8 hit stable in October 2016 (Chrome 54).
-This mitigation disables extension points (legacy hooking), blocking a number of
-third-party injection vectors. Enabled on all child processes - [CL
-chain](https://chromium.googlesource.com/chromium/src/+/c06d6fb1850d6217d35a5cccb1abccd6db0e7a2a).
-As usual, you can find the Chromium sandbox documentation
-[here](/developers/design-documents/sandbox).
-
-[Site Isolation](/developers/design-documents/site-isolation) makes the most of
-Chrome's multi-process architecture to help reduce the scope of attacks.
-
-Our earlier plan to launch --isolate-extensions in Chrome 54 hit a last minute
-delay, and we're now aiming to turn it on in Chrome 56. In the meantime, we've
-added support for drag and drop into [out-of-process
-iframes](/developers/design-documents/oop-iframes) (OOPIFs) and for printing an
-OOPIF. We've fixed several other security and functional issues for
---isolate-extensions as well. We've also started an A/B trial on Canary to use
-OOPIFs for Chrome App &lt;webview&gt; tags, and we're close to starting an A/B
-trial of --top-document-isolation.
-
-Beyond the browser, our[ web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features.
-
-After a good deal of experimentation, we (finally) [tightened the behavior of
-cookies' \`secure\`
-attribute](https://www.chromestatus.com/feature/4506322921848832). [Referrer
-Policy](https://www.w3.org/TR/referrer-policy/) moved to a candidate
-recommendation, we made solid progress on
-[Clear-Site-Data](https://w3c.github.io/webappsec-clear-site-data/), and we
-expect to start an [origin
-trial](https://github.com/jpchase/OriginTrials/blob/gh-pages/developer-guide.md)
-for [Suborigins](https://w3c.github.io/webappsec-suborigins/) shortly.
-
-Looking to the future, we've started to flesh out our proposal for [stronger
-origin isolation properties](https://wicg.github.io/isolation/), continued
-discussions on a proposal for [setting origin-wide
-policy](https://wicg.github.io/origin-policy/), and began working with the IETF
-to expand [opt-in Certificate Transparency
-enforcement](https://datatracker.ietf.org/doc/draft-stark-expect-ct/) to the
-open web. We hope to further solidify all of these proposals in Q1.
-
-We also spend time building[ security
-features](/developers/design-documents/safebrowsing) that[ users
-see](/Home/chromium-security/enamel).
-
-Our security indicator text labels launched in Chrome 55 for “Secure” HTTPS,
-“Not Secure” broken HTTPS, and “Dangerous” pages flagged by Safe Browsing. As
-part of our long-term effort to mark HTTP pages as non-secure, we built
-[address-bar warnings into Chrome
-56](https://blog.chromium.org/2016/12/chrome-56-beta-not-secure-warning-web.html)
-to mark HTTP pages with a password or credit card form fields as “Not secure”.
-
-We see migration to HTTPS as foundational to any web security whatsoever, so
-we're actively working to drive #MOARTLS across Google and the Internet at
-large.
-
-We added a new [HTTPS Usage
-section](https://www.google.com/transparencyreport/https/metrics/?hl=en) to the
-Transparency Report, which shows how the percentage of Chrome pages loaded over
-HTTPS increases with time. We talked externally at O’Reilly Security NYC +
-Amsterdam and [Chrome Dev Summit](https://www.youtube.com/watch?v=iP75a1Y9saY)
-about upcoming HTTP UI changes and the business case for HTTPS. We published
-[positive
-stories](https://blog.chromium.org/2016/11/heres-to-more-https-on-web.html)
-about HTTPS migrations.
-
-In addition to #MOARTLS, we want to ensure more secure TLS.
-
-We [concluded](https://www.imperialviolet.org/2016/11/28/cecpq1.html) our
-experiment with post-quantum key agreement in TLS. We implemented TLS 1.3 draft
-18, which will be enabled for a fraction of users with Chrome 56.
-
-And here are some other areas we're still investing heavily in:
-
-Keeping users safe from Unwanted Software (UwS, pronounced 'ooze') and improving
-the [Chrome Cleanup Tool](https://www.google.com/chrome/cleanup-tool/), which
-has helped millions remove UwS that was injecting ads, changing settings, and
-otherwise blighting their machines.
-
-Working on usable, understandable permissions prompts. We're experimenting with
-different prompt UIs, tracking prompt interaction rates, and continuing to learn
-how best to ensure users are in control of powerful permissions.
-
-As ever, many thanks to all those in the Chromium community who help make the
-web more secure!
-
-Cheers
-
-Andrew, on behalf of the Chrome Security Team
-
-For more thrilling security updates and feisty rants,[ subscribe to
-security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev).
-You can find older updates at[
-https://www.chromium.org/Home/chromium-security/quarterly-updates](/Home/chromium-security/quarterly-updates).
-
-## Q3 2016
-
-Greetings and salutations!
-
-It's time for another update from your friends in Chrome Security, who are hard
-at work trying to make Chrome the[ most secure platform to browse the
-Internet](/Home/chromium-security). Here’s a recap from last quarter:
-
-Our[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs.
-
-We have continued to improve upon our [libFuzzer](http://go/libfuzzer-chrome)
-and
-[AFL](https://cs.chromium.org/chromium/src/third_party/afl/?q=third_party/afl&sq=package:chromium&dr)
-integration with ClusterFuzz, which includes automated performance analysis and
-quarantining of bad units (like slow units, leaks, etc). We have scaled our code
-coverage to
-~[160](https://cs.chromium.org/search/?q=%22+int+LLVMFuzzerTestOneInput%22+-libFuzzer/src+-llvm/+-buildtools+-file:.md&sq=package:chromium&type=cs)
-targets with help from Chrome developers, who contributed these during the
-month-long
-[Fuzzathon](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/MAiBRTllPuI).
-We have improved our infrastructure reliability and response times by adding a
-24x7 monitoring solution, and fixing more than two dozen fuzzers in the process.
-Finally, we have refined our crash bucketization algorithm and enabled automatic
-bug filing remove human latency in filing regression bugs — long live the
-machines!
-
-For [Site Isolation](/developers/design-documents/site-isolation), the first
-uses of [out-of-process iframes](/developers/design-documents/oop-iframes)
-(OOPIFs) have reached the Stable channel in Chrome 54!
-
-We're using OOPIFs for --isolate-extensions mode, which ensures that web content
-is never put into a privileged extension process. In the past quarter, we made
-significant progress and fixed all our blocking bugs, including enabling the new
-session history logic by default, supporting cross-process POST submissions, and
-IME in OOPIFs. We also fixed bugs in painting, input events, and many other
-areas. As a result, --isolate-extensions mode has been enabled for 50% of M54
-Beta users and is turned on by default in M55. From here, we plan to further
-improve OOPIFs to support --top-document-isolation mode, Chrome App
-&lt;webview&gt; tags, and Site Isolation for real web sites.
-
-We also spend time building[ security
-features](/developers/design-documents/safebrowsing) that[ users
-see](/Home/chromium-security/enamel).
-
-We
-[overhauled](https://docs.google.com/document/u/2/d/1jIfCjcsZUL6ouLgPOsMORGcTTXc7OTwkcBQCkZvDyGE/pub)
-Chrome’s site security indicators in Chrome 52 on Mac and Chrome 53 on all other
-platforms, including adding new icons for Safe Browsing. These icons were the
-result of extensive user research which we shared in a [peer-reviewed
-paper](https://www.usenix.org/system/files/conference/soups2016/soups2016-paper-porter-felt.pdf).
-Lastly, we made recovering blocked-downloads much [less
-confusing](https://docs.google.com/document/d/1M9AvvXafVRSNquKGhzjAqo3Pl7sSATuEECA78pfkpmA/edit#).
-
-We like to avoid showing unnecessarily scary warnings when we can. We analyzed
-data from opted-in Safe Browsing Extended Reporting users to quantify the major
-causes of spurious TLS warnings, like [bad client
-clocks](/developers/design-documents/sane-time) and [misconfigured intermediate
-certificates](https://docs.google.com/document/d/1ryqFMSHHRDERg1jm3LeVt7VMfxtXXrI8p49gmtniNP0/edit?pli=1).
-We also launched two experiments,
-[Expect-CT](https://docs.google.com/document/d/1VDtHiKa5c96ohP_p-V1k6u83fIh952e_szZVypO4AvQ/edit)
-and
-[Expect-Staple](https://docs.google.com/document/d/1aISglJIIwglcOAhqNfK-2vtQl-_dWAapc-VLDh-9-BE/edit),
-to help site owners deploy advanced new TLS features (Certificate Transparency
-and OCSP stapling) without causing warnings for their users.
-
-Beyond the browser, our[ web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features.
-
-We continued to lock down the security of the web platform while also expanding
-capabilities to developers. We helped lock down cookies by starting to ship
-[Strict Secure Cookies](https://www.chromestatus.com/feature/4506322921848832).
-Similarly, we also shipped the [Referrer
-Policy](https://www.w3.org/TR/referrer-policy/) spec and policy header. [Content
-Security Policy](https://www.w3.org/TR/CSP3/) was expanded with the
-[strict-dynamic](https://www.w3.org/TR/CSP3/#strict-dynamic-usage) and
-[unsafe-hashed-attributes](https://www.w3.org/TR/CSP3/#unsafe-hashed-attributes-usage)
-directives. Our work on
-[suborigins](https://w3c.github.io/webappsec-suborigins/) continued, updating
-the serialization and adding new web platform support.
-
-We've also been working on making users feel more in control of powerful
-permissions.
-
-In M55 and M56 we will be running experiments on permissions prompts to evaluate
-how this affects acceptance and decision rates. The experiments are to let users
-make temporary decisions, to auto-deny prompts if users keep ignoring them, and
-making permission prompts modal.
-
-We see migration to HTTPS as foundational to any web security whatsoever, so
-we're actively working to drive #MOARTLS across Google and the Internet at
-large.
-
-We
-[announced](https://security.googleblog.com/2016/09/moving-towards-more-secure-web.html)
-concrete steps towards marking HTTP sites as non-secure in Chrome UI — starting
-with marking HTTP pages with password or credit card form fields as “Not secure”
-starting in Chrome 56 (Jan 2017). We [added YouTube and
-Calendar](https://security.googleblog.com/2016/08/adding-youtube-and-calendar-to-https.html)
-to the HTTPS Transparency Report. We’re also happy to report that
-[www.google.com](http://www.google.com/) [uses
-HSTS](https://security.googleblog.com/2016/07/bringing-hsts-to-wwwgooglecom.html)!
-
-In addition to #MOARTLS, we want to ensure more secure TLS.
-
-We continue to work on TLS 1.3, a major revision of TLS. For current revisions,
-we’re also keeping the TLS ecosystem running smoothly with a little
-[grease](https://tools.ietf.org/html/draft-davidben-tls-grease-01). We have
-removed [DHE based
-ciphers](https://www.chromestatus.com/feature/5128908798164992) and added
-[RSA-PSS](https://www.chromestatus.com/features/5748550642171904). Finally,
-having removed RC4 from Chrome earlier this year, we’ve now removed it from
-BoringSSL’s TLS logic completely.
-
-We launched a very rough prototype of
-[Roughtime](https://roughtime.googlesource.com/roughtime), a combination of NTP
-and Certificate Transparency. In parallel we’re investigating what reduction in
-Chrome certificate errors a secure clock like Roughtime could give us.
-
-We also continued our experiments with [post-quantum
-cryptography](https://security.googleblog.com/2016/07/experimenting-with-post-quantum.html)
-by implementing [CECPQ1](https://www.chromestatus.com/features/5749214348836864)
-to help gather some real world data.
-
-As ever, many thanks to all those in the Chromium community who help make the
-web more secure!
-
-Cheers
-
-Andrew on behalf of the Chrome Security Team
-
-## Q2 2016
-
-Greetings Earthlings,
-
-It's time for another update from your friends in Chrome Security, who are hard
-at work trying to make Chrome the[ most secure platform to browse the
-Internet](/Home/chromium-security). Here’s a recap from last quarter:
-
-**Our[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and
-exterminate) security bugs.** At the start of the quarter, we initiated a
-team-wide Security FixIt to trim the backlog of open issues… a bit of Spring
-cleaning our issue tracker, if you will :) With the help of dozens of engineers
-across Chrome, we fixed over 61 Medium+ severity security bugs in 2 weeks and
-brought the count of open issues down to 22! On the fuzzing front, we’ve added
-support for[ AFL](http://lcamtuf.coredump.cx/afl/) and continued to improve the[
-libFuzzer](http://llvm.org/docs/LibFuzzer.html)-[ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz)
-integration, both of which allow coverage-guided testing on a per-function
-basis. The number of libFuzzer based fuzzers have expanded from 70 to[
-115](https://cs.chromium.org/search/?q=TestOneInput%5C(const+-file:third_party/llvm+-file:third_party/libFuzzer/src&sq=package:chromium&type=cs),
-and we’re processing ~500 Billion testcases every day! We’re also researching
-new ways to improve fuzzer efficiency and maximize code coverage
-([example](https://chromium.googlesource.com/chromium/src/+/1a6bef1675e05626a4692ab6fa43cbbc5515299b)).
-In response to recent trends from[ Vulnerability Reward Program
-(VRP)](https://www.google.com/about/appsecurity/chrome-rewards/index.html) and[
-Pwnium](http://blog.chromium.org/2015/02/pwnium-v-never-ending-pwnium.html)
-submissions, we wrote a new fuzzer for v8 builtins, which has already yielded[
-bugs](https://bugs.chromium.org/p/chromium/issues/detail?id=625752). Not
-everything can be automated, so we started auditing parts of[
-mojo](/developers/design-documents/mojo), Chrome’s new IPC mechanism, and found
-several issues
-([1](https://bugs.chromium.org/p/chromium/issues/detail?id=611887),[
-2](https://bugs.chromium.org/p/chromium/issues/detail?id=612364),[
-3](https://bugs.chromium.org/p/chromium/issues/detail?id=612613),[
-4](https://bugs.chromium.org/p/chromium/issues/detail?id=613698),[
-5](https://bugs.chromium.org/p/chromium/issues/detail?id=622522)).
-
-**Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds
-in multiple layers of defense.** Many Android apps use[
-WebView](https://developer.android.com/reference/android/webkit/WebView.html) to
-display web content inline within their app. A compromised WebView can get
-access to an app’s private user data and a number of Android system services /
-device drivers. To mitigate this risk, in the upcoming release of[ Android
-N](https://developer.android.com/preview/support.html#dp3), we’ve worked to
-move[
-WebView](https://developer.android.com/reference/android/webkit/WebView.html)
-rendering out-of-process into a sandboxed process. This new process model is
-still experimental and can be enabled under Developer Options in Settings. On
-Windows, a series of ongoing stability experiments with[ App
-Container](/developers/design-documents/sandbox#TOC-App-Container-low-box-token-:)
-and[ win32k
-lockdown](/developers/design-documents/sandbox#TOC-Win32k.sys-lockdown:) for[
-PPAPI](/nativeclient/getting-started/getting-started-background-and-basics#TOC-Pepper-Plugin-API-PPAPI-)
-processes (i.e. Flash and pdfium) have given us good data that puts us in a
-position to launch both of these new security mitigations on Windows 10 very
-soon!
-
-**For[ Site Isolation](/developers/design-documents/site-isolation), we're
-getting close to enabling --isolate-extensions for everyone.** We've been hard
-at work fixing launch blocking bugs, and[ out-of-process
-iframes](/developers/design-documents/oop-iframes) (OOPIFs) now have support for
-POST submissions, fullscreen, find-in-page, zoom, scrolling, Flash, modal
-dialogs, and file choosers, among other features. We've also made lots of
-progress on the new navigation codepath, IME, and the task manager, along with
-fixing many layout tests and crashes. Finally, we're experimenting with
---top-document-isolation mode to keep the main page responsive despite slow
-third party iframes, and with using OOPIFs to replace BrowserPlugin for the
-&lt;webview&gt; tag.
-
-**We also spend time building[ security
-features](/developers/design-documents/safebrowsing) that[ users
-see](/Home/chromium-security/enamel).** We’re overhauling the omnibox security
-iconography in Chrome -- new,[
-improved](https://www.usenix.org/conference/soups2016/technical-sessions/presentation/porter-felt)
-connection security indicators are now in Chrome Beta (52) on Mac and Chrome Dev
-(53) for all other platforms. We created a[
-reference](https://github.com/google/safebrowsing) interstitial warning that
-developers can use for their implementations of the[ Safe Browsing
-API](https://developers.google.com/safe-browsing/). Speaking of Safe Browsing,
-we’ve extended protection to cover files downloaded by Flash apps, we’re
-evaluating many more file types than before, and we closed several gaps that
-were reported via our Safe Browsing[ Download Protection
-VRP](https://www.google.com/about/appsecurity/chrome-rewards/) program.
-
-**Beyond the browser, our[ web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features.** We
-shipped an implementation of the[ Credential Management
-API](https://w3c.github.io/webappsec-credential-management/) (and[ presented a
-detailed overview](https://youtu.be/MnvUlGFb3GQ?t=7m23s) at Google I/O),
-iterated on[ Referrer Policy](https://www.w3.org/TR/referrer-policy/) with a[
-\`referrer-policy\`
-header](https://www.w3.org/TR/referrer-policy/#referrer-policy-header)
-implementation behind a flag, and improved our support for[ SameSite
-cookies](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site). We're
-continuing to experiment with[
-Suborigins](https://w3c.github.io/webappsec-suborigins/) with developers both
-inside and outside Google, built a prototype of[
-CORS-RFC1918](https://mikewest.github.io/cors-rfc1918/), and introduce safety
-nets to protect against XSS vulnerabilities due to browser bugs\[1\].
-
-**We've also been working on making users feel more in control of powerful
-permissions.** All permissions will soon be[ scoped to
-origins](https://codereview.chromium.org/2075103002/), and we've started
-implementing[ permission
-delegation](https://noncombatant.github.io/permission-delegation-api/) (which is
-becoming part of[ feature policy](https://github.com/igrigorik/feature-policy)).
-We’re also actively working to show fewer permission prompts to users, and to
-improve the prompts and UI we do show... subtle, critical work that make web
-security more human-friendly (and thus, effective).
-
-**We see migration to HTTPS as foundational to any web security whatsoever, so
-we're actively working to drive #MOARTLS across Google and the Internet at
-large.**[ Emily](https://twitter.com/estark37) and[
-Emily](https://twitter.com/emschec) busted HTTPS myths for large audiences at[
-Google
-I/O](https://www.youtube.com/watch?v=YMfW1bfyGSY&index=19&list=PLOU2XLYxmsILe6_eGvDN3GyiodoV3qNSC)
-and the[ Progressive Web App dev
-summit](https://www.youtube.com/watch?v=e6DUrH56g14). The[ HSTS Preload
-list](https://cs.chromium.org/chromium/src/net/http/transport_security_state_static.json)
-has seen[ 3x growth](https://twitter.com/lgarron/status/747530273047273472)
-since the beginning of the year – a great problem to have! We’ve addressed some[
-growth
-hurdles](https://docs.google.com/document/d/1LqpwT2aAekrWPtLui5GYdHSGlZNMNRYmPR14NXMRsQ4/edit#)
-by a rewrite of the[ submission site](https://hstspreload.appspot.com/), and
-we’re actively working on the preload list infrastructure and how to
-additionally scale in the long term.
-
-**In addition to #MOARTLS, we want to ensure more secure TLS.** Some of us have
-been involved in the[ TLS 1.3 standardization
-work](https://tlswg.github.io/tls13-spec/) and[
-implementation](https://boringssl.googlesource.com/boringssl/). On the PKI
-front, and as part of our[ Expect CT
-project](https://docs.google.com/document/d/1VDtHiKa5c96ohP_p-V1k6u83fIh952e_szZVypO4AvQ/edit),
-we built the infrastructure in Chrome that will help site owners track down
-certificates for their sites that are not publicly logged in[ Certificate
-Transparency](https://www.certificate-transparency.org/) logs. As of Chrome 53,
-we’ll be requiring Certificate Transparency information for certificates issued
-by Symantec-operated CAs, per[ our announcement last
-year](https://security.googleblog.com/2015/10/sustaining-digital-certificate-security.html).
-We also[ launched some post-quantum cipher suite
-experiments](https://security.googleblog.com/2016/07/experimenting-with-post-quantum.html)
-to protect everyone from... crypto hackers of the future and more advanced
-worlds ;)
-
-For more thrilling security updates and feisty rants, [subscribe to
-security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev).
-You can find older updates at
-<https://www.chromium.org/Home/chromium-security/quarterly-updates>.
-
-Happy Hacking,
-
-Parisa, on behalf of Chrome Security
-
-\[1\] Please[ let us know](/Home/chromium-security/reporting-security-bugs) if
-you manage to work around them!
-
-## Q1 2016
-
-Greetings web fans,
-
-The[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. On the fuzzing front, we’ve continued to improve the integration
-between [libFuzzer](http://llvm.org/docs/LibFuzzer.html) and
-[ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz), which allows
-coverage-guided testing on a per-function basis. With the help of many
-developers across several teams, we’ve expanded our collection of fuzzing
-targets in Chromium (that use libFuzzer) to 70! Not all bugs can be found by
-fuzzing, so we invest effort in targeted code audits too. We wrote a [guest post
-on the Project Zero
-blog](https://googleprojectzero.blogspot.com/2016/02/racing-midi-messages-in-chrome.html)
-describing one of the more interesting vulnerabilities we discovered. Since we
-find a lot of bugs, we also want to make them easier to manage. We’ve updated
-our [Sheriffbot](/issue-tracking/autotriage) tool to simplify the addition of
-new rules and expanded it to help manage functional bugs in addition just
-security issues. We’ve also automated assigning [security
-severity](/developers/severity-guidelines) recommendations. Finally, we continue
-to run our [vulnerability reward
-program](https://www.google.com/about/appsecurity/chrome-rewards/) to recognize
-bugs discovered from researchers outside of the team. As of M50, [we’ve paid out
-over $2.5
-million](https://chrome.googleblog.com/2016/04/chrome-50-releases-and-counting.html)
-since the start of the reward program, including over $500,000 in 2015. Our
-median payment amount for 2015 was $3,000 (up from $2,000 for 2014), and we want
-to see that increase again this year!
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. On Android, our
-[seccomp-bpf](https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt)
-experiment has been running on the Dev channel and will advance to the Stable
-and Beta channels with M50.
-
-Chrome on Windows is evolving rapidly in step with the operating system. We
-shipped [four new layers of defense in
-depth](https://bugs.chromium.org/p/chromium/issues/detail?id=504006) to take
-advantage of the latest capabilities in Windows 10, some of which patch
-vulnerabilities found by our own
-[research](https://googleprojectzero.blogspot.co.uk/2015/05/in-console-able.html)
-and
-[feedback](https://bugs.chromium.org/p/project-zero/issues/detail?id=213&redir=1)!
-There was great media attention when these changes landed, from [Ars
-Technica](http://arstechnica.com/information-technology/2016/02/chrome-picks-up-bonus-security-features-on-windows-10/)
-to a [Risky Business podcast](http://risky.biz/RB398), which said: “There have
-been some engineering changes to Chrome on Windows 10 which look pretty good. …
-It’s definitely the go-to browser, when it comes to not getting owned on the
-internet. And it’s a great example of Google pushing the state of the art in
-operating systems.”
-
-For our[ Site Isolation](/developers/design-documents/site-isolation) effort, we
-have expanded our on-going launch trial of --isolate-extensions to include 50%
-of both Dev Channel and Canary Channel users! This mode uses [out-of-process
-iframes](/developers/design-documents/oop-iframes) (OOPIFs) to keep dangerous
-web content out of extension processes. (See
-[here](/developers/design-documents/oop-iframes#TOC-Dogfooding) for how to try
-it.) We've fixed many launch blocking bugs, and improved support for navigation,
-input events, hit testing, and security features like CSP and mixed content. We
-improved our test coverage and made progress on updating features like
-fullscreen, zoom, and find-in-page to work with OOPIFs. We're also excited to
-see progress on other potential uses of OOPIFs, including the &lt;webview&gt;
-tag and an experimental "top document isolation" mode.
-
-We spend time building[ security
-features](/developers/design-documents/safebrowsing) that[ people
-see](/Home/chromium-security/enamel). In response to user feedback, we’ve
-replaced [the old full screen
-prompt](https://bugs.chromium.org/p/chromium/issues/attachment?aid=178299&inline=1)
-with a [new, lighter weight ephemeral
-message](https://bugs.chromium.org/p/chromium/issues/attachment?aid=222712&inline=1)
-in M50 across Windows and Linux. We launched a few bug fixes and updates to the
-[Security
-panel](https://developers.google.com/web/updates/2015/12/security-panel?hl=en),
-which we continue to iterate on and support in an effort to drive forward HTTPS
-adoption. We also continued our work on [removing powerful features on insecure
-origins](/Home/chromium-security/deprecating-powerful-features-on-insecure-origins)
-(e.g. [geolocation](https://crbug.com/561641)).
-
-We’re working on preventing abuse of powerful features on the web. We continue
-to support great “permissions request” UX, and have started reaching out to top
-websites to directly help them improve how they request permissions for
-[powerful
-APIs](/Home/chromium-security/prefer-secure-origins-for-powerful-new-features).
-To give top-level websites more control over how iframes use permissions, we
-started external discussions about a new [Permission Delegation
-API](http://noncombatant.github.io/permission-delegation-api/). We also
-[extended](https://security.googleblog.com/2016/03/get-rich-or-hack-tryin.html)
-our [vulnerability rewards
-program](https://www.google.com/about/appsecurity/chrome-rewards/index.html#rewards)
-to support [Safe
-Browsing](https://www.google.com/transparencyreport/safebrowsing/) reports, in a
-first program of its kind.
-
-Beyond the browser, our[ web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features. We now
-have an implementation of
-[Suborigins](https://w3c.github.io/webappsec-suborigins/) behind a flag, and
-have been experimenting with Google developers on usage. We polished up the
-[Referrer Policy](https://www.w3.org/TR/referrer-policy/) spec, refined its
-integration with [ServiceWorker](https://www.w3.org/TR/service-workers/) and
-Fetch, and shipped the \`referrerpolicy\` attribute from that document. We're
-excited about the potential of new CSP expressions like
-['unsafe-dynamic'](https://w3c.github.io/webappsec-csp/#unsafe-dynamic-usage),
-which will ship in Chrome 52 (and is experimentally deployed on [our shiny new
-bug tracker](https://bugs.chromium.org/p/chromium/issues/list)). In that same
-release, we finally shipped [SameSite
-cookies](https://tools.ietf.org/html/draft-west-first-party-cookies), which we
-hope will help prevent
-[CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery). Lastly, we're
-working to pay down some technical debt by refactoring our Mixed Content
-implementation and X-Frame-Options to work in an OOPIF world.
-
-We see migration to HTTPS as foundational to any security whatsoever
-([and](https://tools.ietf.org/html/rfc7258)[
-we're](https://www.iab.org/2014/11/14/iab-statement-on-internet-confidentiality/)[
-not](https://www.iab.net/iablog/2015/03/adopting-encryption-the-need-for-https.html)[
-the](https://w3ctag.github.io/web-https/)[ only](https://https.cio.gov/)[
-ones](https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/)),
-so we're actively working to drive #MOARTLS across Google and the Internet at
-large. We worked with a number of teams across Google to help [publish an HTTPS
-Report
-Card](https://security.googleblog.com/2016/03/securing-web-together_15.html),
-which aims to hold Google and other top sites accountable, as well as encourage
-others to encrypt the web. In addition to #MOARTLS, we want to ensure more
-secure TLS. [We mentioned we were working on it last
-time](https://groups.google.com/a/chromium.org/forum/#!msg/security-dev/kVfCywocUO8/vgi_rQuhKgAJ),
-but RC4 support is dead! The [insecure TLS version fallback is also
-gone](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/yz1lU9YTeys/yCsK50I3CQAJ).
-With help from the [libFuzzer](http://llvm.org/docs/LibFuzzer.html) folks, we
-got much better fuzzing coverage on
-[BoringSSL](https://boringssl.googlesource.com/boringssl/), which resulted in
-[CVE-2016-0705](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-0705).
-We ended up adding a "fuzzer mode" to the SSL stack to help the fuzzer get past
-cryptographic invariants in the handshake, which smoked out some minor (memory
-leak) bugs.
-
-Last, but not least, we rewrote a large chunk of BoringSSL's ASN.1 parsing with
-a simpler and more standards-compliant stack.
-
-For more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](mailto:security-dev@chromium.org). You can find
-older updates at
-<https://www.chromium.org/Home/chromium-security/quarterly-updates>.
-
-Happy Hacking,
-
-Parisa, on behalf of Chrome Security
-
-## Q4 2015
-
-Happy 2016 from the Chrome Security Team!
-
-For those that don’t know us already, we do stuff to help make Chrome the [most
-secure platform to browse the Internet](/Home/chromium-security). Here’s a recap
-of some work from last quarter:
-
-**The [Bugs--](/Home/chromium-security/bugs) effort aims to find (and
-exterminate) security bugs.** We’ve integrated
-[libFuzzer](http://llvm.org/docs/LibFuzzer.html) into
-[ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz), which means we
-can do coverage-guided fuzz testing on a per-function basis. The result, as you
-may have guessed, is several [new
-bugs](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+label%3AStability-LibFuzzer&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles).
-The Bugs-- team has a larger goal this year to help Chromium developers write a
-ClusterFuzz fuzzer alongside every unittest, and libFuzzer integration is an
-important step toward achieving that goal. Separately, we’ve made security
-improvements and cleanups in the [Pdfium](https://code.google.com/p/pdfium/)
-codebase and [fixed lots of open
-bugs](https://code.google.com/p/chromium/issues/list?can=1&q=status%3AFixed+type%3DBug-Security+owner%3Aochang+Cr%3DInternals-Plugins-PDF).
-We also started some manual code auditing efforts, and discovered several high
-severity bugs ([here](https://crbug.com/555784),
-[here](https://crbug.com/559310), and [here](https://crbug.com/570427)), and
-[1](https://crbug.com/564501) critical severity bug.
-
-**Bugs still happen, so our [Guts](/Home/chromium-security/guts) effort builds
-in multiple layers of defense.** On Android, we’re running an experiment that
-adds an additional
-[seccomp-bpf](https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt)
-sandbox to renderer processes, like we already do on Desktop Linux and Chrome
-OS. On Windows 8 (and above), a Win32k lockdown experiment has been implemented
-for PPAPI plugins including Flash and Pdfium to help reduce the kernel attack
-surface for potential sandbox escapes. Also on Windows 8 (and above), an
-AppContainer sandbox experiment has been introduced, which further reduces
-kernel attack surface and blocks network communication from renderers.
-
-**Our [Site Isolation](/developers/design-documents/site-isolation) effort
-reached a large milestone in December: running trials of the
---isolate-extensions mode on real Chrome Canary users!** This mode uses
-[out-of-process iframes](/developers/design-documents/oop-iframes) to isolate
-extension processes from web content for security. ([Give it a
-try!](/developers/design-documents/oop-iframes#TOC-Dogfooding)) The trials were
-made possible by many updates to session history, session restore, extensions,
-painting, focus, save page, popup menus, and more, as well as numerous crash
-fixes. We are continuing to fix the [remaining blocking
-issues](https://csreis.github.io/oop-iframe-dependencies/), and we aim to launch
-both --isolate-extensions and the broader Site Isolation feature in 2016.
-
-**We also spend time building [security
-features](/developers/design-documents/safebrowsing) that [users
-see](/Home/chromium-security/enamel).** The Safe Browsing team publicly
-announced a [new social engineering
-policy](https://googleonlinesecurity.blogspot.com/2015/11/safe-browsing-protection-from-even-more.html),
-expanding Chrome’s protection against deceptive sites beyond phishing. One major
-milestone is the [launch of Safe Browsing in Chrome for
-Android](https://googleonlinesecurity.blogspot.com/2015/12/protecting-hundreds-of-millions-more.html),
-protecting hundreds of millions of additional users from phishing, malware, and
-other web threats! This is on by default and is already stopping millions of
-attacks on mobile Chrome users. The next time you come across a Safe Browsing
-warning, you can search for the blocked website in the
-[new](https://googleonlinesecurity.blogspot.com/2015/10/behind-red-warning-more-info-about.html)
-[Site Status
-section](https://www.google.com/transparencyreport/safebrowsing/diagnostic/) of
-the Transparency Report to learn why it’s been flagged by our systems. On the
-other hand, we’re also trying to show users fewer security warnings in the first
-place by decreasing our false positive rate for HTTPS warnings. We spent a large
-part of the quarter analyzing client errors that contribute to false alarm HTTPS
-errors; check out our [Real World Crypto
-talk](https://docs.google.com/presentation/d/1Qmpl-5epx0B5C2t4XsUTyjgbwab_rXfK_4iHqX3IC30/edit?pref=2&pli=1#slide=id.gf44795496_0_1)
-for more details.
-
-**Beyond the browser, our [web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features.** We've
-made good progress [with folks in the
-IETF](https://lists.w3.org/Archives/Public/ietf-http-wg/2015OctDec/0165.html) to
-make some meaningful changes to cookies; [cookie
-prefixes](https://www.chromestatus.com/features/4952188392570880) and [locking
-down 'secure' cookies](https://www.chromestatus.com/features/4506322921848832)
-will be shipping shortly. [Subresource
-Integrity](https://lists.w3.org/Archives/Public/public-webappsec/2016Jan/0020.html)
-and [Mixed
-Content](https://lists.w3.org/Archives/Public/public-webappsec/2016Jan/0021.html)
-are trucking along the W3C Recommendation path, we've solidified our [Suborigins
-proposal](https://w3c.github.io/webappsec-suborigins/), and have our eyes on
-some new hotness like [HSTS Priming](https://mikewest.github.io/hsts-priming/),
-[CSP3](https://w3c.github.io/webappsec-csp/)
-[bits](https://w3c.github.io/webappsec-csp/embedded/)
-[and](https://w3c.github.io/reporting/)
-[pieces](https://w3c.github.io/webappsec-csp/cookies/), and [limiting access to
-local network resources](https://mikewest.github.io/cors-rfc1918/).
-
-**We see migration to HTTPS as foundational to any security whatsoever
-([and](https://tools.ietf.org/html/rfc7258)
-[we're](https://www.iab.org/2014/11/14/iab-statement-on-internet-confidentiality/)
-[not](https://www.iab.net/iablog/2015/03/adopting-encryption-the-need-for-https.html)
-[the](https://w3ctag.github.io/web-https/) [only](https://https.cio.gov/)
-[ones](https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/)),
-so we're actively working to drive #MOARTLS across Google and the Internet at
-large.** We've continued our effort to [deprecate powerful features on insecure
-origins](/Home/chromium-security/deprecating-powerful-features-on-insecure-origins)
-by readying to block insecure usage of [geolocation
-APIs](http://dev.w3.org/geo/api/spec-source.html). We also took to the
-[stage](https://www.youtube.com/watch?v=9WuP4KcDBpI) at the [Chrome Dev
-Summit](https://developer.chrome.com/devsummit) to spread the word, telling
-developers about what we’re doing in Chrome to make deploying TLS easier and
-more secure.
-
-In addition to more TLS, we want to ensure more secure TLS, which depends
-heavily on the certificate ecosystem. Via [Certificate
-Transparency](http://www.certificate-transparency.org/), we [detected a
-fraudulent Symantec-issued certificate in
-September](https://googleonlinesecurity.blogspot.com/2015/09/improved-digital-certificate-security.html),
-which [subsequently revealed a pattern of additional misissued
-certificates](https://googleonlinesecurity.blogspot.com/2015/10/sustaining-digital-certificate-security.html).
-Independent of that incident, we took proactive measures to protect users from a
-Symantec Root Certificate that was being decommissioned in a way that puts users
-at risk (i.e. no longer complying with the CA/Browser Forum’s [Baseline
-Requirements](https://cabforum.org/about-the-baseline-requirements/)). Other
-efforts include working with
-[Mozilla](https://groups.google.com/forum/#!topic/mozilla.dev.platform/JIEFcrGhqSM/discussion)
-and
-[Microsoft](https://blogs.windows.com/msedgedev/2015/09/01/ending-support-for-the-rc4-cipher-in-microsoft-edge-and-internet-explorer-11/)
-to [phase out RC4 ciphersuite
-support](https://groups.google.com/a/chromium.org/forum/#!msg/security-dev/kVfCywocUO8/vgi_rQuhKgAJ),
-and [continuing the deprecation of SHA-1
-certificates](https://googleonlinesecurity.blogspot.com/2015/12/an-update-on-sha-1-certificates-in.html),
-which were shown to be [even weaker than previously
-believed](https://sites.google.com/site/itstheshappening/). To make it easier
-for developers and site operators to understand these changes, we debuted a new
-[Security
-Panel](https://developers.google.com/web/updates/2015/12/security-panel?hl=en)
-that provides enhanced diagnostics and will continue to be improved with richer
-diagnostics in the coming months.
-
-For more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](mailto:security-dev@chromium.org). You can find
-older updates at
-<https://www.chromium.org/Home/chromium-security/quarterly-updates>.
-
-Happy Hacking,
-
-Parisa, on behalf of Chrome Security
-
-## Q3 2015
-
-Hello from the Chrome Security Team!
-
-For those that don’t know us already, we do stuff to help make Chrome the[ most
-secure platform to browse the Internet](/Home/chromium-security). Here’s a recap
-of some work from last quarter:
-
-The[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. We’ve continued our collaboration with Android Security team and
-now have a fully functional
-[AddressSanitizer](http://clang.llvm.org/docs/AddressSanitizer.html) (ASAN)
-build configuration of [AOSP](https://source.android.com/index.html) master
-(public instructions
-[here](http://source.android.com/devices/tech/debug/asan.html)).
-[ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz) is helping Android
-Security team triage and verify bugs, including incoming [vulnerability
-reward](https://www.google.com/about/appsecurity/android-rewards/) submissions,
-and now supports custom APK uploads and the ability to launch commands. Back on
-the Chrome front, we’re working on enabling [Control Flow Integrity (CFI)
-checks](https://code.google.com/p/chromium/issues/detail?id=464797) on Linux,
-which converts invalid vptr accesses into non-exploitable crashes; [8
-bugs](https://code.google.com/p/chromium/issues/list?can=1&q=linux_cfi_chrome&colspec=ID+Pri+M+Stars+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-discovered so far! We’ve made [numerous
-improvements](https://code.google.com/p/chromium/issues/detail?id=511270) to how
-we fuzz Chrome on Android with respect to speed and accuracy. We also made some
-progress toward our goal of expanding ClusterFuzz platform support to include
-iOS. In our efforts to improve Chrome Stability, we added
-[LeakSanitizer](http://clang.llvm.org/docs/LeakSanitizer.html) (LSAN) into our
-list of supported memory tools, which has already found [38
-bugs](https://code.google.com/p/chromium/issues/list?can=1&q=label%3AClusterFuzz+-status%3AWontFix%2CDuplicate+%22-leak%22+linux_lsan_chrome_mp&sort=id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles).
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. Plugin security remains a very important area of
-work. With the final [death](https://g.co/npapi) of unsandboxed NPAPI plugins in
-September, we’ve continued to introduce mitigations for the remaining sandboxed
-PPAPI (Pepper) plugins. First, we implemented [support for Flash component
-updates on Linux](https://codereview.chromium.org/1261333004/), a long-standing
-feature request, which allows us to respond to [Flash
-0-day](http://www.zdnet.com/article/adobe-releases-emergency-patch-for-flash-zero-day-flaw/)
-incidents without waiting to qualify a new release of Chrome. We’ve also been
-spending time improving the code quality and test coverage of
-[Pdfium](https://code.google.com/p/pdfium/), the [now open-source version of the
-Foxit PDF
-reader](https://plus.sandbox.google.com/+FrancoisBeaufort/posts/9wwSiWDDKKP). In
-addition, we have been having some success with enabling [Win32k syscall
-filtering](/developers/design-documents/sandbox#TOC-Process-mitigation-policies-Win32k-lockdown-)
-on Windows PPAPI processes (PDFium and Adobe Flash). This makes it even tougher
-for attackers to get out of the Chromium Flash sandbox, and can be enabled on
-Windows 8 and above on Canary channel right now by toggling the settings in
-chrome://flags/#enable-ppapi-win32k-lockdown.
-
-We’ve been making steady progress on [Site
-Isolation](/developers/design-documents/site-isolation), and are preparing to
-enable out-of-process iframes (OOPIFs) for web pages inside extension processes.
-You can test this mode before it launches with --isolate-extensions. We have
-[performance
-bots](https://chromeperf.appspot.com/report?sid=74ebe5d13c09e34915152f51ee178f77421b1703d2bf26a7a586375f2c5e2cc7)
-and UMA stats lined up, and we'll start with some early trials on Canary and Dev
-channel. Meanwhile, we've added support for hit testing in the browser process,
-scrolling, context menus, and script calls between all reachable frames (even
-with changes to window.opener).
-
-Not all security problems can be solved in[ Chrome’s
-guts](/Home/chromium-security/guts), so[ we work on making security more
-user-friendly](/Home/chromium-security/enamel) too. To support developers
-migrating to HTTPS, starting with M46, Chrome is marking the “[HTTPS with Minor
-Errors](https://googleonlinesecurity.blogspot.com/2015/10/simplifying-page-security-icon-in-chrome.html)”
-state using the same neutral page icon as HTTP pages (instead of showing the
-yellow lock icon). We’ve started analyzing invalid (anonymized!) TLS certificate
-reports gathered from the field, to understand the root causes of unnecessary
-TLS/SSL warnings. One of the first causes we identified and fixed was
-certificate hostname mismatches due to a missing ‘www’. We also launched
-[HPKP](https://tools.ietf.org/html/rfc7469) violation reporting in Chrome,
-helping developers detect misconfigurations and attacks by sending a report when
-a pin is violated. Finally, in an effort to support the Chrome experience across
-languages and locales, we made strides in improving how the omnibox is displayed
-in [RTL languages](https://en.wikipedia.org/wiki/Right-to-left).
-
-Beyond the browser, our [web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features. We
-shipped [Subresource
-Integrity](https://w3c.github.io/webappsec-subresource-integrity/) (SRI), which
-defends against resource substitution attacks by allowing developers to specify
-a hash against which a script or stylesheet is matched before it's executed.
-We’re excited to see large sites, like
-[Github](http://githubengineering.com/subresource-integrity/), already deploying
-SRI! We've sketched out a concept for a [Clear Site
-Data](http://w3c.github.io/webappsec-clear-site-data/) feature which we hope
-will make it possible for sites to reset their storage, and we're hard at work
-on the next iteration of [Content Security
-Policy](https://w3c.github.io/webappsec-csp/). Both of these will hopefully
-start seeing some implementation in Q4.
-
-We see migration to HTTPS as foundational to any security whatsoever
-([and](https://tools.ietf.org/html/rfc7258)
-[we're](https://www.iab.org/2014/11/14/iab-statement-on-internet-confidentiality/)
-[not](https://www.iab.net/iablog/2015/03/adopting-encryption-the-need-for-https.html)
-[the](https://w3ctag.github.io/web-https/) [only](https://https.cio.gov/)
-[ones](https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/)),
-so we're actively working to drive #MOARTLS across Google and the Internet at
-large. We shipped [Upgrade Insecure
-Requests](http://www.w3.org/TR/upgrade-insecure-requests/), which eases the
-transition to HTTPS by transparently correcting a page's spelling from
-\`http://\` to \`https://\` for all resources before any requests are triggered.
-We've also continued our effort to [deprecate powerful features on insecure
-origins](/Home/chromium-security/deprecating-powerful-features-on-insecure-origins)
-by solidifying the definition of a "[Secure
-Context](https://w3c.github.io/webappsec-secure-contexts/)", and applying that
-definition to block insecure usage of
-[getUserMedia()](https://groups.google.com/a/chromium.org/d/msg/blink-dev/Dsoq5xPdzyw/21znuLWVCgAJ).
-
-For more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](mailto:security-dev@chromium.org).
-
-Happy Hacking,
-
-Parisa, on behalf of Chrome Security
-
-## Q2 2015
-
-Hello from the Chrome Security Team!
-
-For those that don’t know us already, we do stuff to help make Chrome the[ most
-secure platform to browse the Internet](/Home/chromium-security). Here’s a recap
-of some work from last quarter:
-
-The[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. At the start of the quarter, we initiated a [Security
-FixIt](https://docs.google.com/spreadsheets/d/1za0aWxDx4ga3dKBwrlS8COci6_VXLBaiVg3x5Y6rrFg/edit#gid=0)
-to trim back the fat backlog of open issues. With the help of dozens of
-engineers across Chrome, we fixed over 40 Medium+ severity security bugs in 2
-weeks and brought the count of issues down to 15! We also collaborated with
-Android Security Attacks Team and added native platform fuzzing support to
-[ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz) (and
-[imported](https://cs.corp.google.com/#android/vendor/google_experimental/users/natashenka/&q=natashenka)
-[their](https://cs.corp.google.com/#android/vendor/google/tools/security/ServiceProbe/src/com/google/wireless/android/security/serviceprobe/ServiceFuzzer.java&l=22)
-[fuzzers](https://cs.corp.google.com/#android/vendor/google_experimental/users/jlarimer/lhf/README.TXT&l=1)),
-which resulted in ~30 new bugs discovered. ClusterFuzz now supports fuzzing on
-all devices of the Nexus family (5,6,7,9) and Android One and is running on a
-few dozen devices in the Android Lab. On top of this, we have doubled our
-fuzzing capacity in [Compute Engine](https://cloud.google.com/compute/) to ~8000
-cores by leveraging [Preemptible
-VMs](http://googlecloudplatform.blogspot.com/2015/05/Introducing-Preemptible-VMs-a-new-class-of-compute-available-at-70-off-standard-pricing.html).
-Lastly, we have upgraded all of our sanitizer builds on Linux (ASan, MSan, TSan
-and UBSan) to report [edge-level
-coverage](http://clang.llvm.org/docs/SanitizerCoverage.html) data, which is now
-aggregated in the ClusterFuzz
-[dashboard](https://cluster-fuzz.appspot.com/#coverage). We’re using this
-coverage information to expand data bundles by existing fuzzers and improve our
-corpus distillation.
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. Our [Site
-Isolation](/developers/design-documents/site-isolation) project is getting
-closer to its first stage of launch: using out-of-process iframes (OOPIFs) for
-web pages inside extension processes. We've made substantial progress (with lots
-of help from others on the Chrome team!) on core Chrome features when using
---site-per-process: OOPIFs now work with back/forward, DevTools, and extensions,
-and they use [Surfaces](/developers/design-documents/chromium-graphics/surfaces)
-for efficient painting (and soon input event hit-testing). We've collected some
-preliminary performance data using [Telemetry](/developers/telemetry), we've
-fixed lots of crashes, and we've started enforcing cross-site security
-restrictions on cookies and passwords. Much work remains, but we're looking
-forward to turning on these protections for real users!
-
-On Linux and Chrome OS, we’ve made changes to restrict [one PID namespace per
-renderer process](https://crbug.com/460972), which strengthens and cleans-up our
-sandbox (shipping in Chrome 45). We also finished up a [major cleanup necessary
-toward deprecating the setuid sandbox](https://crbug.com/312380), which should
-be happening soon. Work continued to prepare for the launch of Windows 10, which
-offers some opportunities for new security
-[mitigations](/developers/design-documents/sandbox#TOC-Process-mitigation-policies-Win32k-lockdown-);
-the new version looks like the most secure Windows yet, so be sure to upgrade
-when it comes out!
-
-Not all security problems can be solved in[ Chrome’s
-guts](/Home/chromium-security/guts), so[ we work on making security more
-user-friendly](/Home/chromium-security/enamel) too. We’ve continued our efforts
-to avoid showing unnecessary TLS/SSL warnings: decisions are now remembered for
-a week instead of a session, and a [new checkbox on TLS/SSL warnings allows
-users to send us invalid certificate chains
-](https://www.google.com/chrome/browser/privacy/whitepaper.html#ssl)that help us
-root out false-positive warnings. Since developers and power users have been
-asking for more tools to debug TLS/SSL issues, we’ve started building more
-security information into DevTools and plan to launch a first version in Q3!
-
-Another large focus for the team has been improving how users are asked for
-permissions, like camera and geolocation. We’ve finalized a redesign of the
-fullscreen permission flow that we hope to launch by the end of the year, fixed
-a number of bugs relating to permission prompts, and launched another round of
-updates to PageInfo and Website Settings on Android.
-
-Beyond the browser, our [web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features. The
-W3C's[ WebAppSec](http://www.w3.org/2011/webappsec/) working group continues to
-be a fairly productive venue for a number of important features: we've polished
-the [Subresource
-Integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/) spec and
-shipped an implementation in Chrome 46, published first drafts of [Credential
-Management](https://w3c.github.io/webappsec/specs/credentialmanagement/) and
-[Entry Point Regulation](https://w3c.github.io/webappsec/specs/epr/), continue
-to push [Content Security Policy Level 2](http://www.w3.org/TR/CSP2/) and [Mixed
-Content](http://www.w3.org/TR/mixed-content/) towards "Recommendation" status,
-and fixed some [longstanding](https://crbug.com/483458)
-[bugs](https://crbug.com/508310) with our [Referrer
-Policy](http://www.w3.org/TR/referrer-policy/) implementation.
-
-Elsewhere, we've started prototyping [Per-Page
-Suborigins](https://code.google.com/p/chromium/issues/detail?id=336894) with the
-intent of bringing a concrete proposal to WebAppSec, published a new draft of
-[First-Party-Only
-cookies](https://tools.ietf.org/html/draft-west-first-party-cookies-03) (and are
-working through some [infrastructure
-improvements](https://docs.google.com/document/d/19NACt9PXOUTJi60klT2ZGcFlgHM5wM1Owtcw2GQOKPI/edit)
-so we can ship them), and [poked at sandboxed
-iframes](https://wiki.whatwg.org/index.php?title=Iframe_sandbox_improvments) to
-make it possible to sandbox ads.
-
-We see migration to HTTPS as foundational to any security whatsoever
-([and](https://tools.ietf.org/html/rfc7258)
-[we're](https://www.iab.org/2014/11/14/iab-statement-on-internet-confidentiality/)
-[not](https://www.iab.net/iablog/2015/03/adopting-encryption-the-need-for-https.html)
-[the](https://w3ctag.github.io/web-https/) [only](https://https.cio.gov/)
-[ones](https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/)),
-so we're actively working to drive #MOARTLS across Google and the Internet at
-large. As a small practical step on top of the [HTTPS webmasters fundamentals
-section](https://developers.google.com/web/fundamentals/discovery-and-distribution/security-with-https/?hl=en),
-we’ve added some functionality to [Webmaster
-Tools](https://www.google.com/webmasters/tools/home?hl=en&pli=1) to provide
-better assistance to webmasters when dealing with common errors in managing a
-site over TLS (launching soon!). Also, we're now measuring the usage of
-[pre-existing, powerful features on non-secure
-origins](/Home/chromium-security/deprecating-powerful-features-on-insecure-origins),
-and are now printing deprecation warnings in the JavaScript console. Our
-ultimate goal is to make all powerful features, such as Geolocation and
-getUserMedia, available only to secure origins.
-
-For more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](mailto:security-dev@chromium.org).
-
-Happy Hacking,
-
-Parisa, on behalf of Chrome Security
-
-## Q1 2015
-
-Hello from the Chrome Security Team!
-
-For those that don’t know us already, we do stuff to help make Chrome the[ most
-secure platform to browse the Internet](/Home/chromium-security). Here’s a recap
-of some work from last quarter:
-
-The[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. Last quarter, we rewrote our IPC fuzzer, which resulted in
-[lots](https://code.google.com/p/chromium/issues/list?can=1&q=linux_asan_chrome_ipc+type%3Dbug-security+-status%3AWontFix%2CDuplicate+&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-[more](https://code.google.com/p/chromium/issues/list?can=1&q=linux_asan_chrome_ipc_32bit+type%3Dbug-security+-status%3AWontFix%2CDuplicate&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-[bugs](https://code.google.com/p/chromium/issues/list?can=1&q=linux_msan_chrome_ipc+type%3Dbug-security+-status%3AWontFix%2CDuplicate&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-discovered by [ClusterFuzz](/Home/chromium-security/bugs/using-clusterfuzz)! We
-also expanded fuzzing platform support (Android Lollipop, Linux with Nvidia
-GPU), added [archived
-builds](http://storage.cloud.google.com/chrome-test-builds/media) for
-[proprietary media codecs](http://www.chromium.org/audio-video) testing on all
-platforms, and used more code annotations to find bugs (like
-[this](https://code.google.com/p/chromium/issues/detail?id=468519&can=1&q=%22Container-overflow%20in%20%22%20type%3Dbug-security%20-status%3AWontFix%2CDuplicate&sort=-id%20-security_severity%20-secseverity%20-owner%20-modified&colspec=ID%20Pri%20Status%20Summary%20Modified%20OS%20M%20Security_severity%20Security_impact%20Owner%20Reporter)
-or
-[this](https://code.google.com/p/chromium/issues/detail?id=468406&can=1&q=%22Container-overflow%20in%20%22%20type%3Dbug-security%20-status%3AWontFix%2CDuplicate&sort=-id%20-security_severity%20-secseverity%20-owner%20-modified&colspec=ID%20Pri%20Status%20Summary%20Modified%20OS%20M%20Security_severity%20Security_impact%20Owner%20Reporter)).
-We auto-add previous crash tests to our data corpus, which helps to catch
-regressions even if a developer forgets to add a test
-([example](https://code.google.com/p/chromium/issues/detail?id=478745)). We’ve
-also started experimenting with enabling and leveraging code coverage
-information from fuzzing. Contrary to what [some reports may
-imply](http://secunia.com/resources/vulnerability-review/browser-security/), [we
-don’t think vulnerability counting is a good standalone metric for
-security](http://lcamtuf.blogspot.com/2010/05/vulnerability-databases-and-pie-charts.html),
-and more bugs discovered internally
-([653](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+label%3AClusterFuzz+opened-after%3A2014%2F1%2F1+opened-before%3A2015%2F1%2F1+-status%3AWontFix%2CDuplicate&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-bugs in 2014 vs.
-[380](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+label%3AClusterFuzz+opened-after%3A2013%2F1%2F1+opened-before%3A2014%2F1%2F1+-status%3AWontFix%2CDuplicate&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-bugs in 2013), means more bugs fixed, means safer software! Outside of
-engineering, inferno@ gave a talk at [nullcon](http://nullcon.net/) about Chrome
-fuzzing
-([slides](http://nullcon.net/website/archives/ppt/goa-15/analyzing-chrome-crash-reports-at-scale-by-abhishek-arya.pdf))
-and we launched [never-ending
-Pwnium](http://blog.chromium.org/2015/02/pwnium-v-never-ending-pwnium.html) with
-a rewards pool up to $∞ million!
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. On Linux and Chrome OS, we did some work to improve
-the seccomp-BPF compiler and infrastructure. On modern kernels, we [finally
-completed the switch](https://crbug.com/312380) from the [setuid sandbox to a
-new design using
-](https://code.google.com/p/chromium/wiki/LinuxSandboxing#The_setuid_sandbox)[unprivileged
-namespaces](https://code.google.com/p/chromium/wiki/LinuxSandboxing#User_namespaces_sandbox)[.
-](https://code.google.com/p/chromium/wiki/LinuxSandboxing#The_setuid_sandbox)We’re
-also working on a generic, re-usable sandbox API on Linux, which we hope can be
-useful to other Linux projects that want to employ sandboxing. On Android, we’ve
-been experimenting with single-threaded renderer execution, which can yield
-performance and security benefits for Chrome. We’ve also been involved with the
-ambitious [Mojo](/developers/design-documents/mojo) effort. On OSX, we [shipped
-crashpad](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/6eouc7q2j_g)
-(which was a necessary project to investigate those sometimes-security-relevant
-crashes!). Finally, on Windows, the support to block
-[Win32k](/developers/design-documents/sandbox#TOC-Process-mitigation-policies-Win32k-lockdown-)
-system calls from renderers on Windows 8 and above is now enabled on Stable -
-and renderers on these systems are also running within [App
-Containers](/developers/design-documents/sandbox#TOC-App-Container-low-box-token-)
-on Chrome Beta, which blocks their access to the network. We also ensured all
-Chrome allocations are safe - and use less memory (!) - by moving to the Windows
-heap.
-
-On our [Site Isolation](/developers/design-documents/site-isolation) project,
-we’ve made progress on the underlying architecture so that complex pages are
-correct and stable (e.g. rendering any combination of iframes, evaluating
-renderer-side security checks, sending postMessage between subframes, keeping
-script references alive). Great progress has also been made on session history,
-DevTools, and test/performance infrastructure, and other teams have started
-updating their features for out-of-process iframes after our [Site Isolation
-Summit](https://www.youtube.com/playlist?list=PL9ioqAuyl6UJmC0hyI-k1wYW08O71lBn8).
-
-Not all security problems can be solved in[ Chrome’s
-guts](/Home/chromium-security/guts), so[ we work on making security more
-user-friendly](/Home/chromium-security/enamel) too. In an effort to determine
-the causes of SSL errors, we’ve added a new checkbox on SSL warnings that allows
-users to send us invalid certificate chains for analysis. We’ve started looking
-at the data, and in the coming months we plan to introduce new warnings that
-provide specific troubleshooting steps for common causes of spurious warnings.
-We also recently launched the new permissions bubble UI, which solves some of
-the problems we had with permissions infobars (like better coalescing of
-multiple permission requests). And for our Android users, we recently revamped
-PageInfo and Site Settings, making it easier than ever for people to manage
-their permissions. Desktop updates to PageInfo and Site Settings are in
-progress, too. Finally, we just launched a new extension, [Chrome User
-Experience
-Surveys](https://chrome.google.com/webstore/detail/chrome-user-experience-su/hgimloonaobbeeagepickockgdcghfnn?utm_source=newsletter&utm_medium=security&utm_campaign=CUES%20extension),
-which asks people for in-the-moment feedback after they use certain Chrome
-features. If you’re interested in helping improve Chrome, you should try it out!
-
-Beyond the browser, our [web platform efforts](/Home/chromium-security/owp)
-foster cross-vendor cooperation on developer-facing security features. We're
-working hard with the good folks in the W3C's
-[WebAppSec](http://www.w3.org/2011/webappsec/) working group to make progress on
-a number of specifications: [CSP 2](http://www.w3.org/TR/CSP2/) and [Mixed
-Content](http://www.w3.org/TR/mixed-content/) have been published as Candidate
-Recommendations, [Subresource Integrity](http://www.w3.org/TR/SRI/) is
-implemented behind a flag and the spec is coming together nicely, and we've
-fixed a number of [Referrer Policy](http://www.w3.org/TR/referrer-policy/)
-issues. [First-Party-Only
-Cookies](https://tools.ietf.org/html/draft-west-first-party-cookies) are just
-about ready to go, and [Origin
-Cookies](https://tools.ietf.org/html/draft-west-origin-cookies) are on deck.
-
-We see migration to HTTPS as foundational to any security whatsoever
-([and](https://tools.ietf.org/html/rfc7258)
-[we're](https://www.iab.org/2014/11/14/iab-statement-on-internet-confidentiality/)
-[not](https://www.iab.net/iablog/2015/03/adopting-encryption-the-need-for-https.html)
-[the](https://w3ctag.github.io/web-https/) [only](https://https.cio.gov/)
-[ones](https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/)),
-so we're actively working to [define the properties of secure
-contexts](https://w3c.github.io/webappsec/specs/powerfulfeatures/), [deprecate
-powerful features on insecure
-origins](/Home/chromium-security/deprecating-powerful-features-on-insecure-origins),
-and to make it simpler for developers to [Upgrade Insecure
-Requests](https://w3c.github.io/webappsec/specs/upgrade/) on existing sites.
-
-For more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](mailto:security-dev@chromium.org).
-
-Happy Hacking,
-
-Parisa, on behalf of Chrome Security
-
-P.S. Go here to travel back in time and view previous [Chrome security quarterly
-updates](/Home/chromium-security/quarterly-updates).
-
-## Q4 2014
-
-Hello from the Chrome Security Team!
-
-For those that don’t know us already, we do stuff to help make Chrome the[ most
-secure platform to browse the
-Internet](http://www.chromium.org/Home/chromium-security). Here’s a recap of
-some work from last quarter:
-
-The[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. Last quarter, we incorporated more [coverage
-data](https://code.google.com/p/address-sanitizer/wiki/AsanCoverage) into our
-[ClusterFuzz dashboard](https://cluster-fuzz.appspot.com/#coverage), especially
-for [Android](https://cluster-fuzz.appspot.com/coverage?platform=ANDROID). With
-this, we hope to optimize our test cases and improve fuzzing efficiency. We also
-incorporated 5 new fuzzers from the external research community as part of the
-fuzzer reward program. This has resulted in
-[33](https://code.google.com/p/chromium/issues/list?can=1&q=decoder_langfuzz+Type%3DBug-Security+-status%3ADuplicate&colspec=ID+Pri+M+Week+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-[new](https://code.google.com/p/chromium/issues/list?can=1&q=therealholden_worker+Type%3DBug-Security+-status%3ADuplicate&colspec=ID+Pri+M+Week+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-[security](https://code.google.com/p/chromium/issues/list?can=1&q=cdiehl_peach+Type%3DBug-Security+-status%3ADuplicate&colspec=ID+Pri+M+Week+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-vulnerabilities. Finally, we wrote a multi-threaded test case minimizer from
-scratch based on [delta debugging](https://www.st.cs.uni-saarland.de/dd/) (a
-long-standing request from blink devs!) which produces clean, small,
-reproducible test cases. In reward program news, we've paid over $1.6 million
-for externally reported Chrome bugs since 2010 ([$4 million total across
-Google](http://googleonlinesecurity.blogspot.com/2015/01/security-reward-programs-year-in-review.html)).
-In 2014, over 50% of reward program bugs were found and fixed before they hit
-the stable channel, protecting our main user population. Oh, and in case you
-didn’t notice, the [rewards we’re paying out for vulnerabilities went
-up](http://googleonlinesecurity.blogspot.com/2014/09/fewer-bugs-mo-money.html)
-again.
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. We’re most excited about progress toward a tighter
-sandbox for Chrome on Android (via
-[seccomp-bpf](https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt)),
-which required landing seccomp-bpf support in Android and [enabling TSYNC on all
-Chrome OS](https://codereview.chromium.org/759343002/) and Nexus kernels. We’ve
-continued to improve our Linux / Chrome OS sandboxing by (1) adding full
-cross-process interaction restrictions at the BPF sandbox level, (2) making API
-improvements and some code refactoring of //sandbox/linux, and (3) implementing
-a more powerful policy system for the GPU sandbox.
-
-After ~2 years of work on [Site
-Isolation](/developers/design-documents/site-isolation), we’re happy to announce
-that [out-of-process iframes](/developers/design-documents/oop-iframes) are
-working well enough that some Chrome features have [started updating to support
-them](https://docs.google.com/document/d/1dCR2aEoBJj_Yqcs6GuM7lUPr0gag77L5OSgDa8bebsI/edit?usp=sharing)!
-These include autofill (done), accessibility (nearly done), &lt;webview&gt;
-(prototyping), devtools, and extensions. We know how complex a rollout this will
-be, and we’re ready with testing infrastructure and
-[FYI](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Linux)
-[bots](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Win).
-As we announced at our recent Site Isolation Summit
-([video](https://www.youtube.com/playlist?list=PL9ioqAuyl6UJmC0hyI-k1wYW08O71lBn8),
-[slides](https://docs.google.com/presentation/d/10HTTK4dsxO5p6FcpEOq8EkuV4yiBx2n6dBki8cqDWyo/edit?usp=sharing)),
-our goal for Q1 is to finish up OOPIF support with the help of all of Chrome.
-
-Not all security problems can be solved in [Chrome’s
-Guts](/Home/chromium-security/guts), so[ we work on making security more
-user-friendly](/Home/chromium-security/enamel) too. For the past few months,
-we’ve been looking deeper into the causes of SSL errors by looking at UMA stats
-and monitoring user help forums. One source of SSL errors is system clocks with
-the wrong time, so we landed a more informative error message in Chrome 40 to
-let users know they need to fix their clock. We’ve also started working on a
-warning interstitial for [captive
-portals](http://en.wikipedia.org/wiki/Captive_portal) to distinguish those SSL
-errors from the rest. Finally, we [proposed a plan for browsers to migrate their
-user interface from marking insecure origins (i.e. HTTP) as explicitly
-insecure](/Home/chromium-security/marking-http-as-non-secure); the [initial
-discussion](https://groups.google.com/a/chromium.org/forum/#!topic/security-dev/DHQLv76QaEM%5B1-25-false%5D)
-and [external attention](http://www.bbc.com/news/technology-30505970) has been
-generally positive.
-
-Over the past few years, we’ve worked on a bunch of isolated projects to push
-security on the Open Web Platform forward and make it possible for developers to
-write more secure apps. We recognized we can move faster if we get some of the
-team fully dedicated to this work, so we formed a new group that will focus on
-[web platform efforts](/Home/chromium-security/owp).
-
-As usual, for more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](mailto:security-dev@chromium.org).
-
-To a safer web in 2015!
-
-Parisa, on behalf of Chrome Security
-
-## Q3 2014
-
-Hello from the Chrome Security Team!
-
-For those that don’t know us already, we do stuff to help make Chrome the[ most
-secure platform to browse the
-Internet](http://www.chromium.org/Home/chromium-security). Here’s a recap of
-some work from last quarter:
-
-The[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. We increased Clusterfuzz cores across all desktop platforms (Mac,
-Android, Windows, and Linux), resulting in
-[155](https://code.google.com/p/chromium/issues/list?can=1&q=Type%3DBug-Security+label%3AClusterFuzz+opened-after%3A2014%2F7%2F1+opened-before%3A2014%2F9%2F31+-status%3AWontFix%2CDuplicate&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-security and
-[275](https://code.google.com/p/chromium/issues/list?can=1&q=Type%3DBug+label%3AClusterFuzz+opened-after%3A2014%2F7%2F1+opened-before%3A2014%2F9%2F31+-status%3AWontFix%2CDuplicate&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-functional bugs since last update! We also started fuzzing D-Bus system services
-on Chrome OS, which is our first attempt at leveraging Clusterfuzz for the
-operating system. One of the common security pitfalls in C++ is bad casting
-(often rooted in aggressive polymorphism). To address, [one of our
-interns](http://www.cc.gatech.edu/~blee303/) tweaked [UBSAN (Undefined Behavior
-Sanitizer)
-vptr](https://drive.google.com/file/d/0Bxvv8gduedamTEJCUlN6eERtWUE/view?usp=sharing)
-to detect bad-casting at runtime, which resulted in [11 new security
-bugs](https://code.google.com/p/chromium/issues/list?can=1&q=Type%3DBug-Security+linux_ubsan_vptr_chrome+-status%3ADuplicate%2CWontFix&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles&)!
-We’ve continued to collaborate with external researchers on new fuzzing
-techniques to find bugs in V8, Pdfium, Web Workers, IDB, and more. Shout out to
-attekett, cloudfuzzer, decoder.oh, and therealholden for their attention and
-bugs over the past quarter!
-
-Finding bugs is only half the battle, so we also did a few things to make it
-easier to get security bugs ==fixed==, including (1) a new [security
-sheriff](/Home/chromium-security/security-sheriff)
-[dashboard](https://cluster-fuzz.appspot.com/#sheriff) and (2) contributing to
-the [FindIt
-project](https://chromium.googlesource.com/chromium/src.git/+/lkgr/tools/findit/),
-which helps narrow down suspected CL(s) for a crash (given a regression range
-and stacktrace), thereby saving manual triage cycles.
-
-Bugs still happen, so our[ Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. We did a number of things to push
-[seccomp-bpf](http://blog.chromium.org/2012/11/a-safer-playground-for-your-linux-and.html)
-onto more platforms and architectures, including: (1) adding support for
-[MIPS](https://code.google.com/p/chromium/issues/detail?id=369594) and
-[ARM64](https://code.google.com/p/chromium/issues/detail?id=355125), (2) adding
-a [new capability](https://lkml.org/lkml/2014/7/17/844) to initialize
-seccomp-bpf in the presence of threads (bringing us a big step closer to a
-stronger sandbox on Android), (3) [general tightening of the
-sandboxes](https://crbug.com/413855), and (4) writing a [domain-specific
-language to better express BPF
-policies](https://drive.google.com/file/d/0B9LSc_-kpOQPVHhvcVBza3NWR0k/view). We
-also helped ensure a [safe launch of Android apps on Chrome
-OS](http://chrome.blogspot.com/2014/09/first-set-of-android-apps-coming-to.html),
-and continued sandboxing new system services.
-
-On Windows, we [launched Win64 to
-Stable](http://blog.chromium.org/2014/08/64-bits-of-awesome-64-bit-windows_26.html),
-giving users a safer, speedier, and more stable version of Chrome! On Windows 8,
-we added Win32k system call filtering behind a
-[switch](https://code.google.com/p/chromium/codesearch#chromium/src/content/public/common/content_switches.cc&sq=package:chromium&l=966),
-further reducing the kernel attack surface accessible from the renderer. We also
-locked down the [alternate
-desktop](http://www.chromium.org/developers/design-documents/sandbox#TOC-The-alternate-desktop)
-sandbox tokens and refactored the sandbox startup to cache tokens, which
-improves new tab responsiveness.
-
-Finally, work continues on [site
-isolation](http://www.chromium.org/developers/design-documents/site-isolation).
-Over the past few months, we’ve started creating RemoteFrames in Blink's frame
-tree to support out-of-process iframes (OOPIF) and got
-[Linux](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Linux)
-and
-[Windows](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Win)
-FYI bots running tests with --site-per-process. We’ve also been working with the
-[Accessibility](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-accessibility)
-team as our guinea pig feature to support OOPIF, and since that work is nearly
-done, we’re reaching out to more teams over the next few months to update their
-features (see our [FAQ about updating
-features](https://docs.google.com/a/chromium.org/document/d/1Iqe_CzFVA6hyxe7h2bUKusxsjB6frXfdAYLerM3JjPo/edit)).
-
-Not all security problems can be solved in[ Chrome’s
-guts](/Home/chromium-security/guts), so[ we work on making security more
-user-friendly](/Home/chromium-security/enamel) too. SSL-related warnings are
-still a major source of user pain and confusion. Over the past few months, we’ve
-been focused on determining the causes of false positive SSL errors (via adding
-UMA stats for known client / server errors) and investigating
-[pinning](/Home/chromium-security/education/tls#TOC-Certificate-Pinning)
-violation reports. We’ve also been [experimenting with cert memory
-strategies](https://codereview.chromium.org/369703002/) and integrating relevant
-detail when we detect a (likely) benign SSL error due to captive portal or a bad
-clock.
-
-Developers are users too, so we know it’s important to support new web security
-features and ensure new features are safe to use by default. In that vein, we
-recently landed a first pass at [subresource
-integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/)
-[support](https://codereview.chromium.org/566083003/) behind a flag (with
-[useful console errors](https://codereview.chromium.org/596043003/)), we’re
-[shipping](https://groups.google.com/a/chromium.org/d/msg/blink-dev/wToP6b04zVE/imuPatGy3awJ)
-most of [CSP 2](https://w3c.github.io/webappsec/specs/content-security-policy/)
-in M40, we’ve continued to [tighten
-up](https://groups.google.com/a/chromium.org/d/msg/blink-dev/Uxzvrqb6IeU/9FAie9Py4cIJ)
-handling of [mixed
-content](https://w3c.github.io/webappsec/specs/mixedcontent/), and are working
-to define and implement [referrer
-policies](https://w3c.github.io/webappsec/specs/referrer-policy/). We’ve also
-been helping on some security consulting for [Service
-Worker](/blink/serviceworker); kudos to the team for making changes to [handle
-plugins more
-securely](https://code.google.com/p/chromium/issues/detail?id=413094), [restrict
-usage to secure origins](http://crbug.com/394213), and for addressing some
-memory caching issues. If you want to learn more about what’s going on in the
-Blink Security world, check out the
-[Blink-SecurityFeature](https://code.google.com/p/chromium/issues/list?q=label:Cr-Blink-SecurityFeature)
-label.
-
-And then there’s other random things, like ad-hoc hunting for security bugs
-(e.g. [local privilege escalation bug in
-pppd](https://code.google.com/p/chromium/issues/detail?id=390709)), [giving
-Chromebooks](http://www.washingtonpost.com/blogs/the-switch/wp/2014/08/18/finding-a-safe-space-for-kids-to-hack/)
-to [kids at
-DEFCON](https://www.flickr.com/photos/asirap/sets/72157645916802437), and
-various artistic endeavors, like [color-by-risk
-diagramming](https://docs.google.com/a/chromium.org/drawings/d/1TuECFL9K7J5q5UePJLC-YH3satvb1RrjLRH-tW_VKeE/edit)
-and [security-inspired
-fashion](https://www.flickr.com/photos/asirap/14798014040/).
-
-For more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev).
-
-Happy Hacking (and Halloween),
-
-Parisa, on behalf of Chrome Security
-
-## Q2 2014
-
-Hello from the Chromium Security Team!
-
-For those that don’t know us already, we do stuff to help make Chrome the[ most
-secure platform to browse the
-Internet](http://www.chromium.org/Home/chromium-security). Here’s a recap of
-some work from last quarter:
-
-One of our primary responsibilities is security **adviser**, and the main way we
-do this is via security reviews. A few weeks ago, jschuh@ announced [a new and
-improved security review
-process](http://www.chromium.org/Home/chromium-security/security-reviews) that
-helps teams better assess their current security posture and helps our team
-collect more meaningful data about Chrome engineering. All features for M37 went
-through the new process, and we’ll be shepherding new projects and launches
-through this process going forward.
-
-The[ Bugs--](/Home/chromium-security/bugs) effort aims to find (and exterminate)
-security bugs. One of our best ways of finding bugs and getting them fixed
-quickly is fuzz testing via [ClusterFuzz](https://cluster-fuzz.appspot.com/).
-This quarter, we started fuzzing Chrome on Mac OS (extending the existing
-platform coverage on Windows, Linux, and Android). We also added [code coverage
-stats](https://cluster-fuzz.appspot.com/#coverage) to the ClusterFuzz UI, which
-some teams have been finding helpful as a complement to their QA testing, as
-well as [fuzzer stats](https://cluster-fuzz.appspot.com/#fuzzerstats), which [V8
-team now
-checks](https://cluster-fuzz.appspot.com/fuzzerstats?fuzzer_name=stgao_chromebot2&job_type=linux_asan_chrome_v8&last_n_revisions=30)
-in new rollouts. Finally, we added some new fuzzers (WebGL, GPU commands) and
-integrated a number of memory debugging tools to find new classes of bugs (e.g.
-[AddressSanitizer](https://code.google.com/p/address-sanitizer/) on Windows
-found
-[22](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+%22windows_asan_chrome%22&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-bugs, [Dr. Memory](http://www.drmemory.org/) on Windows found
-[1](https://code.google.com/p/chromium/issues/list?can=2&q=Stability%3DMemory-DrMemory+label%3Aclusterfuzz&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-bug,
-[MemorySanitizer](https://code.google.com/p/memory-sanitizer/wiki/MemorySanitizer)
-on Linux found
-[146](https://code.google.com/p/chromium/issues/list?can=1&q=label%3AClusterFuzz+Stability%3DMemory-MemorySanitizer+&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-bugs, and
-[LeakSanitizer](https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer)
-on Linux found
-[18](https://code.google.com/p/chromium/issues/list?can=1&q=label%3AClusterFuzz+Stability%3DMemory-LeakSanitizer+&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-bugs).
-
-Another source of security bugs is our [vulnerability reward
-program](/Home/chromium-security/vulnerability-rewards-program), which saw a
-quiet quarter: only 32 reports opened in Q2 (lowest participation in 12 months)
-and an average payout of $765 per bug (lowest value in 12 months). This trend is
-likely due to (1) fuzzers, both internal and external, finding over 50% of all
-reported bugs in Q2, (2) a reflection of both the increasing difficulty of
-finding bugs and outdated reward amounts being less competitive, and (3)
-researcher fatigue / lack of interest or stimulus. Plans for Q3 include
-reinvigorating participation in the rewards program through a more generous
-reward structure and coming up with clever ways to keep researchers engaged.
-
-Outside of external bug reports, we spent quite a bit of time [improving the
-security posture of Pdfium](/Home/chromium-security/pdfium-security) (Chrome's
-[recently opensourced](http://blog.foxitsoftware.com/?p=641) PDF renderer) via
-finding / fixing
-~[150](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+Cr%3DInternals-Plugins-PDF+closed-after%3A2014%2F4%2F1+closed-before%3A2014%2F7%2F31&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-bugs, removing risky code (e.g. [custom
-allocator](https://pdfium.googlesource.com/pdfium/+/3522876d5291922ddc62bf1b70d02743b0850673)),
-and using [secure integer
-library](https://code.google.com/p/chromium/codesearch#chromium/src/base/numerics/&ct=rc&cd=1&q=numerics&sq=package:chromium)
-for overflow checks. Thanks to ifratric@, mjurczyk@, and gynvael@ for their PDF
-fuzzing help!
-
-Bugs still happen, so our [Guts](/Home/chromium-security/guts) effort builds in
-multiple layers of defense. We did lots of sandboxing work across platforms last
-quarter. On Mac OS, rsesek@ started working on a brand new [bootstrap sandbox
-for
-OSX](https://docs.google.com/a/chromium.org/document/d/108sr6gBxqdrnzVPsb_4_JbDyW1V4-DRQUC4R8YvM40M/edit)
-(//sandbox/mac) and on Android, he got a proof-of-concept renderer running under
-[seccomp-bpf](http://lwn.net/Articles/475043/). On Linux and Chrome OS, we
-continued to improve the sandboxing testing framework and wrote dozens of new
-tests; all our security tests are now running on the Chrome OS BVT. We also
-refactored all of NaCl-related “outer” sandboxing to support a new and faster
-Non-SFI mode for [NaCl](https://developer.chrome.com/native-client). This is
-being used to run Android apps on Chrome, as you may have seen [demoed at Google
-I/O](https://www.google.com/events/io).
-
-After many months of hard work, we’re ecstatic to announce that we [released
-Win64 on dev and
-canary](http://blog.chromium.org/2014/06/try-out-new-64-bit-windows-canary-and.html)
-to our Windows 7 and Windows 8 users. This release takes advantage of [High
-Entropy
-ASLR](http://blogs.technet.com/b/srd/archive/2013/12/11/software-defense-mitigating-common-exploitation-techniques.aspx)
-on Windows 8, and the extra bits help improve the effectiveness of heap
-partitioning and mitigate common exploitation techniques (e.g. JIT spraying).
-The Win64 release also reduced ~⅓ of the crashes we were seeing on Windows, so
-it’s more stable too!
-
-Finally, work continues on [site
-isolation](http://www.chromium.org/developers/design-documents/site-isolation):
-lots of code written / rewritten / rearchitected and unknown unknowns discovered
-along the way. We're close to having "remote" frames for each out-of-process
-iframe, and you can now see subframe processes in Chrome's Task Manager when
-visiting a test page like
-[this](http://csreis.github.io/tests/cross-site-iframe.html) with the
---site-per-process flag.
-
-Not all security problems can be solved in[ Chrome’s
-guts](/Home/chromium-security/guts), so[ we work on making security more
-user-friendly](/Home/chromium-security/enamel) too. The themes of Q2 were SSL
-and permissions. For SSL, we nailed down a new ["Prefer Safe Origins for
-Powerful Features"
-policy](/Home/chromium-security/prefer-secure-origins-for-powerful-new-features),
-which we’ll transition to going forward; kudos to palmer@ and sleevi@ for
-ironing out all the details and getting us to a safer default state. We’ve also
-been trying to improve the experience of our SSL interstitial, which most people
-ignore :-/ Work includes launching new UX for [SSL
-warnings](https://test-sspev.verisign.com/) and incorporating captive portal
-status (ongoing). Congrats to agl@ for launching
-[boringssl](https://www.imperialviolet.org/2014/06/20/boringssl.html) - if
-boring means avoiding Heartbleed-style hysteria, sounds good to us!
-
-On the permissions front, we’re working on ways to give users more control over
-application privileges, such as (1) reducing the number of install-time CRX
-permissions, (2) running UX experiments on the effectiveness of permissions, and
-(3) working on building a security and permissions model to bring native
-capabilities to the web.
-
-For more thrilling security updates and feisty rants, subscribe to
-[security-dev@chromium.org](mailto:security-dev@chromium.org).
-
-In the meantime, happy hacking!
-
-Parisa, on behalf of Chrome Security
-
-P.S. A big kudos to the V8 team, and jkummerow@ in particular, for their extra
-security efforts this quarter! The team rapidly responded to and fixed a number
-of security bugs on top of doing some security-inspired hardening of V8 runtime
-functions.
-
-## Q1 2014
-
-Hello from the Chrome Security Team!
-
-For those that don’t know us already, we help make Chrome the [most secure
-platform to browse the
-Internet](http://www.chromium.org/Home/chromium-security). In addition to
-security reviews and consulting, running a [vulnerability reward
-program](/Home/chromium-security/vulnerability-rewards-program), and dealing
-with security surprises, we instigate and work on engineering projects that make
-Chrome safer. Here’s a recap of some work from last quarter:
-
-The [Bugs-- ](/Home/chromium-security/bugs)effort aims to find (and exterminate)
-exploitable bugs. A major accomplishment from Q1 was getting
-[ClusterFuzz](https://cluster-fuzz.appspot.com/) coverage for Chrome on Android;
-we’re aiming to scale up resources from [a few devices on inferno@’s
-desk](https://plus.sandbox.google.com/u/0/103970240746069356722/posts/LckbsWq6QFZ)
-to 100 bots over the next few months. On the fuzzer front, mbarbella@ wrote a
-new V8 fuzzer that helped shake out
-[30+](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Dbug-security+-status%3Aduplicate+mbarbella_js_mutation&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles)
-[bugs](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Dbug-security+-status%3Aduplicate+mbarbella_js_mutation_test&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&x=m&y=releaseblock&cells=tiles);
-kudos to the V8 team for being so proactive at fixing these issues and
-prioritizing additional proactive security work this quarter. Spring welcomed a
-hot new line of PoC exploits at [Pwn2Own](http://www.pwn2own.com/) and [Pwnium
-4](http://blog.chromium.org/2014/01/show-off-your-security-skills.html):
-highlights included a classic ensemble of overly broad IPC paired with a Windows
-“feature,” and a bold chain of 5 intricate bugs for persistent system compromise
-on Chrome OS; more details posted soon [here](/Home/chromium-security/bugs).
-Beyond exploit contests, we’ve rewarded $52,000 for reports received this year
-(from 16 researchers for 23 security bugs) via our ongoing [vulnerability reward
-program](/Home/chromium-security/vulnerability-rewards-program). We also started
-rewarding researchers for bugs in [Chrome extensions developed "by
-Google.”](http://googleonlinesecurity.blogspot.com/2014/02/security-reward-programs-update.html)
-Outside of finding and fixing bugs, jschuh@ landed [a safe numeric
-class](https://code.google.com/p/chromium/issues/detail?id=332611) to help
-prevent arithmetic overflow bugs from being introduced in the first place; use
-it and you'll [sleep better](https://xkcd.com/571/) too!
-
-Bugs still happen, so we build in multiple layers of defense. One of our most
-common techniques is [sandboxing](/Home/chromium-security/guts), which helps to
-reduce the impact of any single bug. Simple in theory, but challenging to
-implement, maintain, and improve across all platforms. On Linux and Chrome OS,
-we spent a lot of the quarter paying back technical debt: cleaning up the GPU
-sandbox, writing and fixing tests, and replacing the setuid sandbox. On Android,
-we reached consensus with the Android Frameworks team on a path forward for
-seccomp-bpf sandboxing for Clank. We've started writing the CTS tests to verify
-this in Android, landed the baseline policy in upstream Clankium, and are
-working on the required [upstream Linux Kernel
-changes](https://lkml.org/lkml/2014/1/13/795) to be incorporated into Chrome
-Linux, Chrome OS, and Android L. The [site isolation
-project](http://www.chromium.org/developers/design-documents/site-isolation)
-(i.e. sandboxing at the site level) landed a usable cross-process iframe
-implementation behind --site-per-process, which supports user interaction,
-nested iframes (one per doc), sad frame, and basic DevTools support. Major
-refactoring of Chrome and Blink, performance testing, and working with teams
-that need to update for site isolation continues this quarter. On Windows, we
-shipped Win64 canaries, landed code to sandbox the auto update mechanism, and
-improved the existing sandboxing, reducing the win32k attack surface by ~30%.
-Thanks to the Windows Aura team, we’ve also made tremendous progress on
-disabling win32k entirely in the Chrome sandbox, which will eventually eliminate
-most Windows-specific sandbox escapes.
-
-Not all security can be solved in [Chromium’s
-Guts](/Home/chromium-security/guts), so [we work on making security more
-user-friendly](/Home/chromium-security/enamel) too. We finally landed the
-controversial change to [remember passwords, even when
-autocomplete='off'](https://code.google.com/p/chromium/issues/detail?id=177288)
-in
-[M34](http://blog.chromium.org/2014/02/chrome-34-responsive-images-and_9316.html),
-which is a small, but [significant change to return control back to the
-user](/Home/chromium-security/security-faq). We also made some [tweaks to the
-malware download UX in
-M32](https://docs.google.com/a/google.com/presentation/d/16ygiQS0_5b9A4NwHxpcd6sW3b_Up81_qXU-XY86JHc4/edit#slide=12);
-previously users installed ~29% of downloads that were known malware, and that
-number is now down to &lt;5%! We’ve recently been thinking a lot about how to
-improve the security of Chrome Extensions and Apps, including experimenting with
-several changes to the permission dialog to see if we can reduce the amount of
-malicious crx installed by users without reducing the amount of non-malicious
-items. Separately, we want to make it easier for developers to write secure
-APIs, so meacer@ wrote up some [security
-tips](https://docs.google.com/document/d/1RamP4-HJ7GAJY3yv2ju2cK50K9GhOsydJN6KIO81das/pub)
-to help developers avoid common abuse patterns we’ve identified from bad actors.
-
-Finally, since [Heartbleed](http://heartbleed.com/) is still on the forefront of
-many minds, a reminder that Chrome and Chrome OS [were not directly
-affected](http://googleonlinesecurity.blogspot.com/2014/04/google-services-updated-to-address.html).
-And if you're curious about how and why Chrome does SSL cert revocation the way
-it does, agl@ wrote a great
-[post](https://www.imperialviolet.org/2014/04/19/revchecking.html) explaining
-that too.
-
-For more thrilling security updates and feisty rants, subscribe to[
-security-dev@chromium.org](mailto:security-dev@chromium.org).
-
-Happy Hacking,
-Parisa, on behalf of Chrome Security
-
-## Q4 2013
-
-Hello from the Chrome Security Team!
-For those that don’t know us already, we help make Chromium the [most secure
-browsing platform in the
-market](http://www.chromium.org/Home/chromium-security). In addition to security
-reviews and consulting, running a [vulnerability reward
-program](/Home/chromium-security/vulnerability-rewards-program), and dealing
-with security surprises, we instigate and work on engineering projects that make
-Chrome more secure.
-The end of last year flew by, but here are a couple of things we’re most proud
-of from the last quarter of 2013:
-Make security more usable: We made a number of changes to the malware download
-warning to discourage users from installing malware. We also worked on a
-reporting feature that lets users upload suspicious files to [Safe
-Browsing](http://www.google.com/transparencyreport/safebrowsing/), which will
-help Safe Browsing catch malicious downloads even faster.
-Since PDFs are a common vehicle for exploit delivery, we’ve modified PDF
-handling in Chrome so that they're all opened in Chrome’s PDF viewer by default.
-This is a huge security win because we believe Chrome’s PDF viewer is the
-safest, most hardened, and security-tested viewer available. [Malware via
-Microsoft .docs are also
-common](https://www.eff.org/deeplinks/2014/01/vietnamese-malware-gets-personal),
-so we’re eagerly awaiting the day we can open Office Docs in
-[Quickoffice](https://support.google.com/quickoffice/answer/2986862?hl=en) by
-default.
-Find (and fix) more security bugs: We recently welcomed a new member to the
-team,
-[Sheriffbot](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+commentby%3Aclusterfuzz%40chromium.org+-reporter%3Aclusterfuzz%40chromium.org&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner+Reporter&cells=tiles).
-He’s already started making the [mortal security
-sheriffs’](/Home/chromium-security/security-sheriff) lives easier by finding new
-owners, adding Cr- area labels, helping apply and fix bug labels, and reminding
-people about open security bugs they have assigned to them.
-Our fuzzing mammoth, [ClusterFuzz](https://cluster-fuzz.appspot.com/), is now
-fully supported on Windows and has helped find
-[32](https://code.google.com/p/chromium/issues/list?can=1&q=type:bug-security%20label:Hotlist-SyzyASAN%20label:ClusterFuzz&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID%20Pri%20Status%20Summary%20Modified%20OS%20M%20Security_severity%20Security_impact%20Owner%20Reporter)
-new bugs. We’ve added a bunch of new fuzzers to cover Chromium IPC (5 high
-severity bugs), networking protocols (1 critical severity bug from a certificate
-fuzzer, 1 medium severity bug from an HTTP protocol fuzzer), and WebGL (1 high
-severity bug in Angle). Want to write a
-[fuzzer](http://en.wikipedia.org/wiki/Fuzz_testing) to add security fuzzing
-coverage to your code? Check out the [ClusterFuzz
-documentation](/Home/chromium-security/bugs/using-clusterfuzz), or get in touch.
-In November, we helped sponsor a [Pwn2Own contest at the PacSec conference in
-Tokyo](http://h30499.www3.hp.com/t5/HP-Security-Research-Blog/Mobile-Pwn2Own-2013/ba-p/6202185#.Ut6t45DTm91).
-Our good friend, Pinkie Pie, exploited an integer overflow in V8 to get reliable
-code execution in the renderer, and then exploited a bug in a Clipboard IPC
-message to get code execution in the browser process (by spraying multiple
-gigabytes of shared memory). We’ll be publishing a full write-up of the exploit
-[on our site](/Home/chromium-security/bugs) soon, and are starting to get
-excited about our [upcoming
-Pwnium](http://blog.chromium.org/2014/01/show-off-your-security-skills.html) in
-March.
-Secure by default, defense in depth: In [Chrome
-32](http://googlechromereleases.blogspot.com/2014/01/stable-channel-update.html),
-we started [blocking NPAPI by
-default](http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html)
-and have plans to completely remove support by the end of the year. This change
-significantly reduces Chrome’s exposure to browser plugin vulnerabilities. We
-also implemented additional [heap partitioning for buffers and
-strings](https://code.google.com/p/chromium/issues/detail?id=270531) in Blink,
-which further mitigates memory exploitation techniques. Our Win64 port of
-Chromium is now continuously tested on the main waterfall and is on track to
-ship this quarter. Lastly, we migrated our Linux and Chrome OS sandbox to a new
-policy format and did a lot of overdue sandbox code cleanup.
-On our [site isolation](/developers/design-documents/site-isolation) project,
-we’ve started landing infrastructure code on trunk to support out-of-process
-iframes. We are few CLs away from having functional cross-process iframe behind
-a flag and expect it to be complete by the end of January!
-Mobile, mobile, mobile: We’ve started focusing more attention to hardening
-Chrome on Android. In particular, we’ve been hacking on approaches for strong
-sandboxing (e.g.
-[seccomp-bpf](http://blog.chromium.org/2012/11/a-safer-playground-for-your-linux-and.html)),
-adding [Safe Browsing](http://www.google.com/transparencyreport/safebrowsing/)
-protection, and getting [ClusterFuzz](https://cluster-fuzz.appspot.com/) tuned
-for Android.
-For more thrilling security updates and feisty rants, catch ya on
-[security-dev@chromium.org](mailto:security-dev@chromium.org).
-Happy Hacking,
-Parisa, on behalf of Chrome Security
-
-## Q3 2013
-
-An early
-[boo](http://mountainbikerak.blogspot.com/2010/11/google-chrome-pumpkin.html)
-and (late) quarter update from the Chrome Security Team!
-
-For those that don’t know us already, we help make Chromium the [most secure
-browsing platform in the
-market](http://www.chromium.org/Home/chromium-security). In addition to security
-reviews and consulting, running a [vulnerability reward
-program](/Home/chromium-security/vulnerability-rewards-program), and dealing
-with security surprises, we instigate and work on engineering projects that make
-Chrome more secure.
-
-Last quarter, we reorganized the larger team into 3 subgroups:
-
-**Bugs--**, a group focused on finding security bugs, responding to them, and
-helping get them fixed. The group is currently working on expanding
-[Clusterfuzz](https://cluster-fuzz.appspot.com/) coverage to other platforms
-(Windows and Mac), adding fuzzers to cover IPC, networking, and WebGL, adding
-more [security
-ASSERTS](http://svnsearch.org/svnsearch/repos/BLINK/search?logMessage=ASSERT_WITH_SECURITY_IMPLICATION)
-to catch memory corruption bugs. They're also automating some of the grungy and
-manual parts of being [security
-sheriff](/Home/chromium-security/security-sheriff) to free up human cycles for
-more exciting things.
-
-Enamel, a group focused on usability problems that affect end user security or
-the development of secure web applications. In the near-term, Enamel is working
-on: improving the malware download warnings, SSL warnings, and extension
-permission dialogs; making it safer to open PDFs and .docs in Chrome; and
-investigating ways to combat popular phishing attacks.
-
-Guts, a group focused on ensuring Chrome’s architecture is secure by design and
-resilient to exploitation. Our largest project here is [site
-isolation](/developers/design-documents/site-isolation), and in Q4, we’re aiming
-to have a usable cross-process iframe implementation (behind a flag ;) Other
-Guts top priorities include sandboxing work (stronger sandboxing on Android,
-making Chrome OS’s
-[seccomp-bpf](https://code.google.com/p/chromium/wiki/LinuxSandboxing#The_seccomp-bpf_sandbox)
-easier to maintain and better tested), supporting [NPAPI
-deprecation](http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html),
-launching 64bit Chrome for Windows, and Blink memory hardening (e.g. heap
-partitioning).
-
-Retrospectively, here are some of notable security wins from recent Chrome
-releases:
-
-In [Chrome
-29](http://googlechromereleases.blogspot.com/2013/08/stable-channel-update.html),
-we tightened up the sandboxing policies on Linux and added some defenses to the
-Omaha (Chrome Update) plugin, which is a particularly exposed and attractive
-target in Chrome. The first parts of Blink heap partition were released, and
-we’ve had “backchannel” feedback that we made an impact on the greyhat exploit
-market.
-
-In [Chrome
-30](http://googlechromereleases.blogspot.com/2013/10/stable-channel-update.html)
-we fixed a load of security bugs! The spike in bugs was likely due to a few
-factors: (1) we started accepting fuzzers (7 total) from invited external
-researchers as part of a Beta extension to our vulnerability reward program
-(resulting in
-[26](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+label%3AExternal-Fuzzer-Contribution+-status%3AWontFix%2CDuplicate&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Stars+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner&x=m&y=releaseblock&cells=tiles)
-new bugs), (2) we [increased reward
-payouts](http://googleonlinesecurity.blogspot.com/2013/08/security-rewards-at-google-two.html)
-to spark renewed interest from the public, and (3) we found a bunch of new
-buffer (over|under)flow and casting bugs ourselves by adding
-[ASSERT_WITH_SECURITY_IMPLICATION](http://svnsearch.org/svnsearch/repos/BLINK/search?logMessage=ASSERT_WITH_SECURITY_IMPLICATION)s
-in Blink. In M30, we also added [a new layer of
-sandboxing](https://code.google.com/p/chromium/issues/detail?id=168812) to NaCl
-on Chrome OS, with seccomp-bpf.
-
-Last, but not least, we want to give a shout out to individuals outside the
-security team that made an extraordinary effort to improve Chrome security:
-
-* Jochen Eisinger for redoing the pop-up blocker... so that it
- [actually blocks
- pop-ups](https://code.google.com/p/chromium/issues/detail?id=38458)
- (instead of hiding them). Beyond frustrating users, this bug was a
- security liability, but due to the complexity of the fix, languished
- in the issue tracker for years.
-* Mike West for his work on CSP, as well as tightening downloading of
- bad content types.
-* Avi Drissman for fixing a [longstanding bug where PDF password input
- was not
- masked](http://code.google.com/p/chromium/issues/detail?id=54748#c49).
-* Ben Hawkes and Ivan Fratic for finding
- [four](https://code.google.com/p/chromium/issues/list?can=1&q=label%3AWinFuzz)
- potentially exploitable Chrome bugs using WinFuzz.
-* Mateusz Jurczyk on finding ton of bugs in VP9 video decoder.
-
-Happy Hacking,
-Parisa, on behalf of Chrome Security
-
-## Q2 2013
-
-Hello from the Chrome Security Team!
-
-For those that don’t know us, we’re here to help make Chrome a very (the most!)
-[secure browser](http://www.chromium.org/Home/chromium-security). That boils
-down to a fair amount of work on security reviews (and other consulting), but
-here’s some insight into some of the other things we were up to last quarter:
-
-Bug Fixin’ and Code Reviews
-
-At the start of the quarter, we initiated a Code 28 on security bugs to trim
-back the fat backlog of open issues. With the help of dozens of engineers across
-Chrome, we fixed over 100 security bugs in just over 4 weeks and brought the
-count of Medium+ severity issues to single digits. (We’ve lapsed a bit in the
-past week, but hopefully will recover once everyone returns from July vacation
-:)
-
-As of July 1st, [Clusterfuzz](http://goto/clusterfuzz) has helped us find and
-fix
-[822](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+ClusterFuzz+status%3AFixed+closed-before%3A2013%2F7%2F1&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner&x=m&y=releaseblock&cells=tiles)
-bugs! Last quarter, we added a [new
-check](http://svnsearch.org/svnsearch/repos/BLINK/search?logMessage=ASSERT_WITH_SECURITY_IMPLICATION)
-to identify out of bound memory accesses and bad casts
-(ASSERT_WITH_SECURITY_IMPLICATION), which resulted in
-~[72](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+%22ASSERTION+FAILED%22+status%3AFixed+opened-after%3A2013%2F1%2F1&sort=-security_severity+-secseverity+-owner+-modified&colspec=ID+Stars+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner&x=m&y=releaseblock&cells=tiles)
-new bugs identified and fixed. We’re also beta testing a “Fuzzer Donation”
-extension to our [vulnerability reward
-program](/Home/chromium-security/vulnerability-rewards-program).
-
-Anecdotally, this quarter we noticed an increase in the number of IPC reviews
-and marked decrease in security issues! Not sure if our recent [security tips
-doc](/Home/chromium-security/security-tips-for-ipc) is to credit, but well done
-to all the IPC authors and editors!
-
-Process hardening
-
-We’ve mostly wrapped up the [binding
-integrity](/Home/chromium-security/binding-integrity) exploit mitigation changes
-we started last quarter, and it’s now landed on all desktop platforms and Clank.
-Remaining work entails [making additional V8 wrapped types inherit from
-ScriptWrappable](https://code.google.com/p/chromium/issues/detail?id=236671&can=1&q=tsepez%20scriptwrappable&colspec=ID%20Pri%20M%20Iteration%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified)
-so more Chrome code benefits from this protection. We also started a new memory
-hardening change that aims to [place DOM nodes inside their own heap
-partition](https://code.google.com/p/chromium/issues/detail?id=246860). Why
-would we want to do that? Used-after-free memory bugs are common. By having a
-separate partition, the attacker gets a more limited choice of what to overlap
-on top of the freed memory slot, which makes these types of bugs substantially
-harder to exploit. (It turns out there is some performance improvement in doing
-this too!)
-
-Sandboxing++
-
-We’re constantly trying to improve [Chrome
-sandboxing](/developers/design-documents/sandbox). On [Chrome OS and
-Linux](https://code.google.com/p/chromium/wiki/LinuxSandboxing), The GPU process
-is now sandboxed on ARM
-([M28](https://code.google.com/p/chromium/issues/detail?id=235870)) and we’ve
-been been working on [sandboxing
-NaCl](https://code.google.com/p/chromium/issues/detail?id=168812) under
-[seccomp-bpf](http://blog.chromium.org/2012/11/a-safer-playground-for-your-linux-and.html).
-We’ve also increased seccomp-bpf test coverage and locked down sandbox
-parameters (i.e. less attack surface). Part of the Chrome seccomp-bpf sandbox is
-now used in google3 (//third_party/chrome_seccomp), and Seccomp-legacy and
-SELinux [have been
-deprecated](https://code.google.com/p/chromium/wiki/LinuxSandboxing) as
-sandboxing mechanisms.
-
-Chrome work across platforms
-
-Mobile platforms pose a number of challenges to replicating some of the
-security features we’re most proud of on desktop, but with only expected
-growth of mobile, we know we need to shift some security love here. We’re
-getting more people ramped up to help on consulting (security and code
-reviews) and making headway on short and long-term goals.
-
-On Windows, we’re still chugging along sorting out tests and build
-infrastructure to get a stable Win64 release build for canary tests.
-
-On Chrome OS, work on kernel ASLR is ongoing, and we continued sandboxing
-[system
-daemons](https://code.google.com/p/chromium/issues/detail?id=224082).
-
-Site Isolation Efforts
-
-After some design and planning in Q1, we started building the early support for
-[out-of-process
-iframes](http://www.chromium.org/developers/design-documents/oop-iframes) so
-that [Chrome's sandbox can help us enforce the Same Origin
-Policy](http://www.chromium.org/developers/design-documents/site-isolation). In
-Q2, we added a FrameTreeNode class to track frames in the browser process,
-refactored some navigation logic, made DOMWindow own its Document (rather than
-vice versa) in Blink, and got our prototype to handle simple input events. We'll
-be using these changes to get basic out-of-process iframes working behind a flag
-in Q3!
-
-Extensions & Apps
-
-This quarter, we detected and removed ~N bad extensions from the Web Store that
-were either automatically detected or manually flagged as malicious or violating
-our policies. We’ve started transitioning manual CRX malware reviews to a newly
-formed team, who are staffing and ramping up to handle this significant
-workload. Finally, we’ve been looking at ways to improve the permission dialog
-for extensions so that it’s easier for users to understand the security
-implications of what they’re installing, and working on a set of experiments to
-understand how changes to the permissions dialog affect user installation of
-malware.
-
-Happy Q3!
-
-Parisa, on behalf of Chrome Security
-
-## Q1 2013
-
-Hi from the Chrome Security Team!
-
-For those that don’t know us already, we’re here to help make Chrome the [most
-secure browser in the market](http://www.chromium.org/Home/chromium-security).
-We do a fair bit of work on security reviews of new features (and other
-consulting), but here’s a summary of some of the other things we were up to last
-quarter:
-
-Bug, bugs, bugs
-
-Though some time is still spent [handeling external security
-reports](http://www.chromium.org/Home/chromium-security/security-sheriff)
-(mainly from participants of our [vulnerability reward
-program](http://www.chromium.org/Home/chromium-security/vulnerability-rewards-program)),
-we spent comparatively more time in Q1 hunting for security bugs ourselves. In
-particular, we audited a bunch of IPC implementations after the
-[two](http://blog.chromium.org/2012/10/pwnium-2-results-and-wrap-up_10.html)
-[impressive](http://blog.chromium.org/2012/05/tale-of-two-pwnies-part-1.html)
-IPC-based exploits from last year - aedla found some juicy sandbox bypass
-vulnerabilities ([161564](http://crbug.com/161564),
-[162114](http://crbug.com/162114), [167840](http://crbug.com/167840),
-[169685](http://crbug.com/169685)) and cdn and cevans found / fixed a bunch of
-other interesting memory corruption bugs
-([169973](https://code.google.com/p/chromium/issues/detail?id=169973),
-[166708](https://code.google.com/p/chromium/issues/detail?id=166708),
-[164682](https://code.google.com/p/chromium/issues/detail?id=164682)).
-Underground rumors indicate many of these internally discovered bugs collided
-with discoveries from third party researchers (that were either sitting on or
-using them for their own purposes). At this point, most of the IPCs that handle
-file paths have been audited, and we’ve started putting together a doc with
-[security tips to mind when writing
-IPC](https://sites.google.com/a/google.com/chrome-security/security-tips-for-ipc).
-
-On the fuzzing front, we updated and added a number of [fuzzers to
-Clusterfuzz](https://cluster-fuzz.appspot.com/#fuzzers): HTML (ifratric,
-mjurczyk), Flash (fjserna), CSS (bcrane), V8 (farcasia), Video VTT (yihongg),
-extension APIs (meacer), WebRTC (phoglund), Canvas/Skia (aarya), and
-Flicker/media (aarya); aarya also taught Clusterfuzz to look for dangerous
-ASSERTs with security implications, which resulted in even more bugs. Kudos to
-Clusterfuzz and the ASAN team for kicking out another [132 security
-bugs](https://code.google.com/p/chromium/issues/list?can=1&q=type%3Abug-security+label%3AClusterFuzz+opened-after%3A2012%2F12%2F31+-status%3Awontfix+-status%3Aduplicate+opened-before%3A2013%2F4%2F1&sort=-id+-security_severity+-secseverity+-owner+-modified&colspec=ID+Stars+Pri+Status+Summary+Modified+OS+M+Security_severity+Security_impact+Owner&x=m&y=releaseblock&cells=tiles)
-last quarter! One downside to all these new bugs is that our queue of open
-security bugs across Chrome has really spiked ([85+ as of
-today](https://code.google.com/p/chromium/issues/list?can=2&q=Security_Severity%3DCritical+OR+Security_Severity%3DHigh+OR+Security_Severity%3DMedium&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)).
-PIease help us fix these bugs!
-
-Process hardening
-
-We’re constantly thinking about proactive hardening we can add to Chrome to
-eliminate or mitigate exploitation techniques. We find inspiration not only from
-cutting edge security defense research, but also industry chatter around what
-the grey and black hats are using to exploit Chrome and other browsers. This
-past quarter jln implemented more fine grained support for [sandboxing on
-Linux](https://code.google.com/p/chromium/wiki/LinuxSandboxing), in addition to
-some low level tcmalloc changes that improve ASLR and general allocator security
-on 64-bit platforms. With jorgelo, they also implemented support for a stronger
-GPU sandbox on Chrome OS (which we believe was instrumental in avoiding a Pwnium
-3 exploit). tsepez landed support for [V8 bindings
-integrity](/Home/chromium-security/binding-integrity) on Linux and Mac OS, a
-novel feature that ensures DOM objects are valid when bound to Javascript; this
-avoids exploitation of type confusion bugs in the DOM, which Chrome has suffered
-from in the past. palmer just enabled bindings integrity for Chrome on Android,
-and work is in progress on Windows.
-
-Work across platforms
-
-One of our key goals is to get Chrome running natively on 64-bit Windows, where
-the platform mitigations against certain attacks (such as heap spray) are
-stronger than when running within a WOW64 process. (We’ve also seen some
-performance bump on graphics and media on 64-bit Windows!) We made serious
-progress on this work in Q1, coordinating with engineers on a dozen different
-teams to land fixes in our codebase (and dependencies), working with Adobe on
-early Flapper builds, porting components of the Windows sandbox to Win64, and
-landing 100+ generic Win64 build system and API fixes. Thanks to all that have
-made this possible!
-
-As Chrome usage on mobile platforms increases, so too must our security
-attention. We’ve set out some short and long-term goals for mobile Chrome
-security, and are excited to start working with the Clank team on better
-sandboxing and improved HTTPS authentication.
-
-Site isolation
-
-Work continues on the ambitious project to support [site-per-process
-sandboxing](http://www.chromium.org/developers/design-documents/site-isolation),
-which should help us [prevent additional attacks aimed at stealing or tampering
-with user data from a specific
-site](https://docs.google.com/a/google.com/document/d/1X5xZ2hYZurR_c2zU11AoEn15Ebu1er4cCLEudLJvPHA/edit).
-Last quarter, we published a more complete [design for out-of-process
-iframes](http://www.chromium.org/developers/design-documents/oop-iframes), set
-up performance and testing infrastructure, and hacked together a prototype
-implementation that helped confirm the feasibility of this project and surface
-some challenges and open questions that need more investigation.
-
-Extensions
-
-When not feeding the team fish, meacer added a lot of features to Navitron to
-make flagged extensions easier to review and remove from the WebStore. To put
-this work in perspective, each week ~X new items are submitted to Webstore, ~Y
-of them are automatically flagged as malware (and taken down), ~Z malware
-escalations are manually escalated from extension reviewers (and then reviewed
-again by security;. meacer also added a fuzzer for extensions and apps APIs, and
-has been fixing [the resulting
-bugs](https://code.google.com/p/chromium/issues/list?can=1&q=Fuzzer%3A+Meacer_extension_apis&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles).
-
-Until we meet again (probably in the issue tracker)...
-
-Parisa, on behalf of Chrome Security
diff --git a/chromium/docs/website/site/Home/chromium-security/reporting-security-bugs/index.md b/chromium/docs/website/site/Home/chromium-security/reporting-security-bugs/index.md
deleted file mode 100644
index b3ca063bcb7..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/reporting-security-bugs/index.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: reporting-security-bugs
-title: Reporting Security Bugs
----
-
-The Chromium project takes security very seriously, but any complex software
-project is going to have some vulnerabilities. You can help us make Chromium
-more secure by following the guidelines below when filing security bugs against
-Chromium. And as an added benefit to you, following these guidelines will
-increase both the chance and size of the reward you could receive under the
-[Vulnerability Rewards Program](https://g.co/ChromeBugRewards).
-
-[TOC]
-
-### Scope
-
-Do not report physically-local attacks. For example, please do not report that
-you can compromise Chromium by installing a malicious DLL on a computer in a
-place where Chromium will find it and load it. Similarly, please do not report
-password disclosure using the Inspect Element feature to convert the
-"\*\*\*\*\*\*\*" into the underlying text.
-
-To understand why, see the [Chromium Security
-FAQ.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md)
-
-### General Guidelines
-
-These are the criteria that we expect from a good security bug report:
-
-* Was filed via the [security
- template](https://code.google.com/p/chromium/issues/entry?template=Security%20Bug).
-* Contains a clear and descriptive title.
-* Includes the Chromium/Chrome version number and [release
- channel](/getting-involved/dev-channel).
-* Lists the operating system, version, and service pack level of the
- testing platform.
-* Includes a reproducible example of the bug, such as an attached HTML
- or binary file that triggers the bug when loaded into Chrome.
- * **Please** make the file as small as possible and remove any
- content not necessary to trigger the vulnerability.
- * **Please** avoid dependencies on third-party libraries such as
- jQuery or Prototype (which can dramatically complicate the
- process of diagnosing a potential vulnerability).
- * ***For short** (e.g. 15 lines), text-based reproductions (eg.
- HTML or SVG), please include the reproduction case directly in
- the report text.*
- * **For larger** or more complex cases, please attach files
- directly to the bug, not in an archive.
- * If you host a page that demonstrates the bug, **please also
- attach** the files and config needed reproduce locally.
- * **Note** that a screen capture or video showing the issue is
- largely unnecessary except in the case for security UI issues,
- and is not a substitute for a well-written, reproducible test
- case.
-* Provides a brief description (where appropriate) of the nature of
- the bug along with any additional details required to reproduce it.
-* Avoids unnecessary commentary or hyperbole. (If you choose to
- provide a severity estimate please follow the criteria at [Severity
- Guidelines for Security Issues](/developers/severity-guidelines).)
-
-### Reporting Crash Bugs
-
-In addition to the general guidelines above, we look for the following
-information on bugs that trigger browser crashes or sad tabs:
-
-* Whether the crash is in the browser (application crash) or the
- renderer (sad tab).
-* Paste into the bug description the exception details, register
- state, and relevant portion of the stack trace.
- * General crash reporting information is available at [Reporting a
- Crash
- Bug](/for-testers/bug-reporting-guidelines/reporting-crash-bug).
- * Platform specific debugger configuration (including instructions
- on setting up symbols) is available for
- [Windows](/developers/how-tos/debugging), [Mac OS
- X](/developers/debugging-on-os-x), and
- [Linux](https://code.google.com/p/chromium/wiki/LinuxDebugging).
-* If crash reporting is enabled, please provide your [client
- ID](/for-testers/bug-reporting-guidelines/reporting-crash-bug).
-* Please ensure that **all stack traces include symbols**.
-
-#### Signs A Crash Is Not A Security Bug
-
-Generally, we do not consider a denial of service (DoS) issues to be security
-vulnerabilities. Examples of these bug classes include: consistent fixed-offset
-[NULL pointer
-dereferences](https://en.wikipedia.org/wiki/Pointer_(computing)#Null_pointer),
-[call stack overflows (stack
-exhaustion)](https://blogs.technet.com/b/srd/archive/2009/01/28/stack-overflow-stack-exhaustion-not-the-same-as-stack-buffer-overflow.aspx),
-and [out of memory (OOM) errors](https://en.wikipedia.org/wiki/Out_of_memory).
-Some of these crashes are valid bugs, and should be reported; however, they are
-not security bugs and should be filed through the [normal defect
-template](https://code.google.com/p/chromium/issues/entry).
-
-### Going Above and Beyond
-
-While we don't expect security vulnerability reporters to provide us any of the
-following information, we certainly find it extremely helpful and would take it
-into consideration when determining whether or not a particular report qualified
-for a larger award:
-
-* An extremely clear and well-reduced test case demonstrating the
- vulnerability.
-* An accurate analysis of the exact nature of a crash (e.g.
- identifying the reason for and location of a premature pointer
- deletion in a use-after-free vulnerability).
-* An explanation of a broader vulnerability or recurring vulnerable
- pattern associated with the reported bug (e.g. noting that a
- vulnerability arises in more than one location due to a common
- misuse pattern on a particular class).
-* Helpful guidance for fixing the vulnerability, or providing an
- effective fix as part of the reporting process.
-* Identifying any particularly interesting or impactful issue that
- goes beyond the scope of a single report.
-* Any noteworthy cooperation in the reporting and resolution that goes
- significantly beyond the normal reporting guidelines.
-* We reward more where the reporter [provides a good analysis
- demonstrating probable exploitability](/system/errors/NodeNotFound).
-
-### Bug Visibility
-
-The visibility of security bugs is restricted until a fix has been widely
-deployed. For more information see the [Security
-FAQ](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md#TOC-Can-you-please-un-hide-old-security-bugs-). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/reviews-and-consulting/index.md b/chromium/docs/website/site/Home/chromium-security/reviews-and-consulting/index.md
deleted file mode 100644
index 13178eefb53..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/reviews-and-consulting/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: reviews-and-consulting
-title: Reviews and Consulting
----
-
-So, ya need some security help? Our talents are many, but here are the things we
-normally assist Chromium engineers with:
-
-**Security Reviews**
-
-Features that are new or substantial refactors / expansions should go through
-the [Chrome Security Review](/Home/chromium-security/security-reviews) process
-via the Chrome launch process. The purpose of a security review is ==not== the
-elimination of all possible vulnerabilities, but rather the promotion of [secure
-design and implementation practices in
-Chromium](/Home/chromium-security/education). It also helps the security team
-stay engaged with the rest of Chromium engineering.
-
-**Adding new code to third_party**
-
-Third party code is a hot spot for security vulnerabilities, so make sure to
-[give security a head's up by getting a code
-review](http://www.chromium.org/developers/adding-3rd-party-libraries#TOC-Get-a-Review).
-
-**One-off questions**
-
-If you are not sure what to do, or need other help, you can always just reach us
-at [security@chromium.org](mailto:security@chromium.org). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/root-ca-policy/index.md b/chromium/docs/website/site/Home/chromium-security/root-ca-policy/index.md
deleted file mode 100644
index b6cd2b46a92..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/root-ca-policy/index.md
+++ /dev/null
@@ -1,191 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: root-ca-policy
-title: Chrome Root Program
----
-
-## Last updated: 2020-11-02
-
-Bookmark this page as <https://g.co/chrome/root-policy>
-
-## Introduction
-
-Google Chrome relies on Certification Authorities (CAs) to issue certificates to
-websites. Chrome uses these certificates to ensure the HTTPS connections it
-makes on behalf of its users are secure and private.
-
-As part of establishing a secure connection, Chrome cryptographically verifies
-that the website's certificate was issued by a recognized CA. Certificates that
-are not issued by a CA recognized by Chrome, or by a user's local settings, can
-cause users to see warnings and error pages.
-
-If you’re an enterprise managing trusted CAs for your organization, including
-locally installed enterprise CAs, the policies described in this document do not
-apply to your CA. No changes are currently planned for how enterprise
-administrators manage those CAs within Chrome. CAs that have been installed by
-the device owner or administrator into the operating system trust store are
-expected to continue to work as they do today.
-
-If you’re a Chrome user experiencing a certificate error, please see [this
-support article](https://support.google.com/chrome/answer/6098869?hl=en) for
-more information.
-
-If you're a website operator, you can learn more about [why HTTPS
-matters](https://web.dev/why-https-matters/) and how to [secure your site with
-HTTPS](https://support.google.com/webmasters/answer/6073543). If you've got a
-question about a certificate you've been issued, including questions about
-validity and revocation, please contact the CA that issued the certificate.
-
-Though uncommon, certificates can also be used by websites to identify clients
-connecting to them. Other than ensuring it is well formed, Chrome simply passes
-the certificate to the server, which performs the evaluation and enforces its
-chosen policy. The policies on this page do not apply to client certs.
-
-## Chrome Root Program
-
-When Chrome presents the connection to a website as secure, Chrome is making a
-statement to its users about the security properties of that connection. Because
-of the CA's critical role in upholding those properties, Chrome must ensure the
-CAs who issue certificates are operated in a consistent and trustworthy manner.
-This is achieved by referring to a list of root certificates from CAs that have
-demonstrated why continued trust in them is justified. This list is referred to
-as a Root Store. The policies and requirements for participating and being
-included in a Root Store are known as a Root Program.
-
-## Root Program Transition
-
-The sections below describe the Chrome Root Program, and policies and
-requirements for CAs to have their certificates included in a default
-installation of Chrome, as part of the transition to the Chrome Root Store.
-
-Historically, Chrome has integrated with the Root Store provided by the platform
-on which it is running. Chrome is in the process of transitioning certificate
-verification to use a common implementation on all platforms where it's under
-application control, namely Android, Chrome OS, Linux, Windows, and macOS. Apple
-policies prevent the Chrome Root Store and verifier from being used on Chrome
-for iOS. This will ensure users have a consistent experience across platforms,
-that developers have a consistent understanding of Chrome's behavior, and that
-Chrome will be better able to protect the security and privacy of users'
-connections to websites.
-
-For CAs that already participate in other public Root Programs, such as the
-[Mozilla Root
-Program](https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/),
-many of these requirements and processes should be familiar.
-
-### Transitional Root Store
-
-During this transition, the Chrome Root Store contains a variety of existing
-Certification Authorities' certificates that have historically worked in Chrome
-on the majority of supported platforms. This promotes interoperability on
-different devices and platforms, and minimizes compatibility issues. This should
-ensure as seamless a transition as possible for users.
-
-In addition to compatibility considerations, CAs have been selected on the basis
-of past and current publicly available and verified information, such as that
-within the Common CA Certificate Database ([CCADB](https://ccadb.org)). CCADB is
-a datastore run by Mozilla and used by a variety of operating systems, browser
-vendors, and Certification Authorities to share and disclose information
-regarding the ownership, historical operation, and audit history of CA
-certificates and key material.
-
-### Requesting Inclusion
-
-For Certification Authorities that have not been included as part of this
-initial [Chrome Root Store](https://g.co/chrome/root-store), questions can be
-directed to
-[chrome-root-authority-program@google.com](mailto:chrome-root-authority-program@google.com).
-Priority is given to CAs that are widely trusted on platforms that Chrome
-supports, in order to minimize compatibility issues.
-
-For the inclusion of new CA certificates, priority is given to CAs in the
-following order, in order to minimize disruption or risks to Chrome users:
-
-- CAs that are widely trusted, and which are replacing older certificates with certificates and key material created within the past five years, and have an unbroken sequence of annual audits where these certificates and key material are explicitly listed in scope.
-- CAs whose certificates and certificate hierarchy are only used to issue TLS server certificates, and do not issue other forms of certificates.
-- CAs that have undergone a widely-recognized public discussion process regarding their CP, CPS, audits, and practices. At this time, the only discussion process recognized as acceptable is the discussion process operated by Mozilla on behalf of the open-source community at [mozilla.dev.security.policy](https://www.mozilla.org/en-US/about/forums/#dev-security-policy).
-- CAs that maintain sole control over all CA key material within their CA certificate hierarchy, and include their entire certificate hierarchy within a single audit scope.
-- CAs that have been annually audited according to both of the “WebTrust Principles and Criteria for Certification Authorities” and the “WebTrust Principles and Criteria for Certification Authorities - SSL Baseline With Network Security”. Other audit criteria may be accepted on a discretionary basis, but Chrome will prioritize audits conducted according to both of these criteria.
-
-Certification Authorities that do not meet all of the above criteria will be
-dealt with on a case-by-case basis. Note that the above requirements are
-illustrative only; Google includes CAs in its Root Program, and includes or
-removes CA certificates within its Root Store as it deems appropriate for user
-safety. The selection and ongoing membership of CAs is done to enhance the
-security of Chrome and promote interoperability; CAs that do not provide a broad
-service to all browser users are unlikely to be suitable.
-
-As this transition occurs, CAs should continue to work with the relevant vendors
-of operating systems where Chrome is supported to additionally request inclusion
-within their root certificate programs as appropriate. This will help minimize
-any disruption or incompatibilities for end users, by ensuring that Chrome is
-able to validate certificates from the CA regardless of whether it is using the
-Chrome Root Store or existing platform integrations.
-
-The Chrome Root Store Policy will be updated to more fully detail the set of
-formal ongoing requirements for working with Google in order to be distributed
-and included in a default installation of Chrome, as well as additional steps
-for applying or updating existing included certificates. Any questions regarding
-this policy can be directed to
-[chrome-root-authority-program@google.com](mailto:chrome-root-authority-program@google.com)
-
-## Responding to Incidents
-
-Chrome requires that CAs included in the Chrome Root Program abide by their
-Certificate Policy and/or Certification Practices Statement, where the CA
-describes how they operate, and must incorporate [CA/Browser Forum’s Baseline
-Requirements](https://cabforum.org/baseline-requirements-documents/). Failure of
-a CA to meet their commitments, as outlined in their CP/CPS and the Baseline
-Requirements, is considered an incident, as is any other situation that may
-impact the CA’s integrity, trustworthiness, or compatibility.
-
-Chrome requires that any suspected or actual compliance incident be promptly
-reported and publicly disclosed upon discovery by the CA, along with a timeline
-for [an analysis of root
-causes](https://landing.google.com/sre/sre-book/chapters/postmortem-culture/),
-regardless of whether the non-compliance appears to the CA to have a serious or
-immediate security impact on end users. Chrome will evaluate every compliance
-incident on a case-by-case basis, and will work with the CA to identify
-ecosystem-wide risks or potential improvements to be made in the CA’s operations
-or in root program requirements that can help prevent future compliance
-incidents.
-
-When evaluating a CA’s incident response, Chrome’s primary concern is ensuring
-that browsers, CAs, users, and website developers have the necessary information
-to identify improvements, and that the CA is responsive to addressing identified
-issues.
-
-Factors that are significant to Chrome when evaluating incidents include (but
-are not limited to): a demonstration of understanding of the root causes of an
-incident, a substantive commitment and timeline to changes that clearly and
-persuasively address the root cause, past history by the CA in its incident
-handling and its follow through on commitments, and the severity of the security
-impact of the incident. In general, a single compliance incident considered
-alone is unlikely to result in removal of a CA from the Chrome Root Store.
-
-Chrome expects CAs to be detailed, candid, timely, and transparent in describing
-their architecture, implementation, operations, and external dependencies as
-necessary for Chrome and the public to evaluate the nature of the incident and
-depth of the CA’s response.
-
-When a CA fails to meet their commitments made in their CP/CPS, Chrome expects
-them to file an incident report. Due to the incorporation of the Baseline
-Requirements into the CP and CPS, incidents may include a prescribed follow-up
-action, such as revoking impacted certificates within a certain timeframe. If
-the CA doesn’t perform the required follow-up actions, or doesn’t perform them
-in the expected time, the CA should file a secondary incident report describing
-any certificates involved, the CA’s expected timeline to complete any follow-up
-actions, and what changes the CA is making to ensure they can meet these
-requirements consistently in the future.
-
-When a CA becomes aware of or suspects an incident, they should notify
-[chrome-root-authority-program@google.com](mailto:chrome-root-authority-program@google.com)
-with a description of the incident. If the CA has publicly disclosed this
-incident, this notification should include a link to the disclosure. If the CA
-has not yet disclosed this incident, this notification should include an initial
-timeline for public disclosure. Chrome uses the information on the public
-disclosure as the basis for evaluating incidents. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-bug-lifecycle/index.md b/chromium/docs/website/site/Home/chromium-security/security-bug-lifecycle/index.md
deleted file mode 100644
index ba0c5a39d17..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-bug-lifecycle/index.md
+++ /dev/null
@@ -1,258 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: security-bug-lifecycle
-title: Security Bug Lifecycle
----
-
-The [canonical version of this document is now in the Chromium source
-tree](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/sheriff.md).
-
-The following document describes the process of working from an inbound security
-bug report to releasing a fix on all affected branches. You can also refer to
-the [Security Cheat Sheets](/system/errors/NodeNotFound) to provide a quick walk
-through or as a reference to check your progress.
-
-[TOC]
-
-## Triage
-
-The first step of triage is confirming that a bug does exist and it does
-represent a vulnerability. Most reporters provide a version in the bug report,
-but you’ll generally need to verify against the current stable, beta, and trunk
-builds. The [Reporting Security
-Bugs](/Home/chromium-security/reporting-security-bugs) page provides information
-on what detail is required and how to get it, so you should use that as a guide
-to fill in anything the report is missing. If you don’t have a particular build
-on hand to perform the analysis against, you can leave a comment in the bug
-requesting that another team member assist in verifying it. The list of
-currently open security (modulo **Security-Severity-None**) bugs can be viewed
-with [this
-query](https://code.google.com/p/chromium/issues/list?can=2&q=Type%3DBug-Security+-Security_Severity%3DNone&sort=-secseverity&groupby=&colspec=ID+Pri+Area+Feature+Status+Summary+Modified+Owner+Mstone+OS+Secseverity+Reporter+Secimpacts).
-
-### Security Features & Non-Vulnerabilities
-
-There are a number of bugs we want to keep track of for security reasons, but
-shouldn't track as vulnerabilities. This includes new security features and
-improvements, or changes that simply have a security impact or warrant a closer
-inspection from a security perspective. In this case the bug should *not* be
-filed as *Type-Security*. Instead it should be filed as whatever type is
-relevant (generally **Type-Bug**) and also have the **Feature-Security** label
-set. This ensures the security team will still receive updates, but keeps it out
-of the list of open vulnerabilities.
-
-### Assigning Labels
-
-**==First verify the bug, requirements to trigger, and affected platforms==**;
-if you cannot verify the bug directly (e.g. nonavailability of the affected
-platform) then assign or CC an owner who can. Once you’ve verified the bug, you
-need to determine the appropriate labels. You should follow the severity
-guidelines [Severity Guidelines for Security
-Issues](/developers/severity-guidelines) to determine the rating for the
-**Security-Severity-**\* label. Remember to also consider any mitigating factors
-that might reduce the severity, such as unusual or excessive interaction, or the
-feasibility of reliably triggering the condition in the wild (e.g. race
-conditions are notoriously difficult).
-
-Once you’ve determined the severity you can assign the milestone and priority
-according to the following guidelines:
-
-* **Security-Severity-Critical**
- * **Pri-0**
- * Current stable milestone (or earliest milestone impacted)
-* **Security-Severity-High**
- * **Pri-1**
- * Current stable milestone (or earliest milestone impacted)
-* **Security-Severity-Medium**
- * **Pri-2**
- * Next stable milestone
-* **Security-Severity-Low**
- * **Pri-3**
- * Next stable milestone
-* **Security-Severity-None**
- * No priority required
- * No milestone required
-
-Set the SecImpacts flags to identify the affected branches, so we know what
-needs to be merged and have historical tracking data:
-
-* **SecImpacts-Stable** - Affects shipping branch and should be
- considered for merge.
-* **SecImpacts-Beta** - Affects beta branch and fix and should be
- considered for merge.
-* **SecImpacts-None** - Doesn't affect a shipping branch (no merge
- required).
-
-The milestone targets may shift slightly to adjust for a release schedule. For
-example, when the current stable is at the end of its cycle you will generally
-bump all open bugs to target the next stable milestone.
-
-Also, it's important to ensure that all security bugs are set to
-**Type-Security** and any security bugs with a severity other than
-**Security-Severity-None** include the **Restrict-View-SecurityTeam** flag.
-
-The remaining triage follows the [standard
-guidelines](/getting-involved/bug-triage). Key points to remember are the
-following:
-
-* Update the status to **Untriaged**, **Available**, **Assigned**, or
- **Started** (as appropriate).
-* Apply the following labels as needed: **OS-**\*, **Feature-**\*,
- **Area-**\*, **Internals-**\*, **Crash**.
-* Any changes that will be merged to the beta branch must be labeled
- as **ReleaseBlock-Stable**.
-* Ensure the comment adequately explains any status changes
- *(severity, milestone, and priority assignment generally require
- explanatory text)*.
-
-### Upstreaming WebKit Bugs
-
-Any WebKit bugs should be upstreamed to
-[bugs.webkit.org](http://bugs.webkit.org/) immediately after verification, basic
-analysis to isolate the issue, and reducing any test cases to a manageable size.
-When upstreaming WebKit security bugs, remember the following points:
-
-* File against the security component
-* Include a link back to the Chromium bug in your comment
-* Include a credit to the original reporter if appropriate
-* CC any Chromium Team members working on the bug downstream
-
-#### Getting Access to WebKit Security Bugs
-
-Any members of the Chromium Security Team involved in bug triage will need to
-join the [WebKit Security Group](http://www.webkit.org/security/). If you're not
-already on WebKit Security, please ask another Chromium Security Team member to
-nominate you. After joining you'll need to request security bug access (this can
-be done by replying to your confirmation email). Once bug access is granted,
-you'll need to configure your account to get emailed on all inbound security
-bugs. You do this by adding **webkit-security-unassigned@lists.webkit.org** to
-the **User Watching** section on the [Email
-Preferences](https://bugs.webkit.org/userprefs.cgi?tab=email) tab on WebKit's
-bugzilla. (You'll probably want to create a Gmail filter on these messages as
-well.)
-
-**Landing WebKit Patches**
-
-To contribute a patch to WebKit you can generally just follow the [instructions
-on webkit.org](http://www.webkit.org/coding/contributing.html). However, one
-additional step must be taken to land patches for security bugs, because the
-WebKit Commit Bot and the WebKit Review Bot are not included in the WebKit
-Security Group. This means your patch will not be placed in the commit queue
-after receiving cq+ unless the bots are explicitly given access to the bug. To
-do this, add these addresses to the cc: list of the WebKit bug:
-
-* webkit.review.bot@gmail.com
-* commit-queue@webkit.org
-
-### Timeline
-
-As a rule, you’ll want to ensure that the full initial triage is performed and
-the bug is updated within 48 hours of the initial report. During business hours
-the basic triage and bug update should occur within four hours at most.
-
-### Erroneous Reports
-
-Some reports are obviously not legitimate, or represent behavior that we do not
-intend to change. In those cases you should mark the bug as **WontFix** or
-**Invalid** (as appropriate) and provide a simple explanation to the reporter.
-For non-security bugs erroneously reported via the security template, you should
-remove all security labels, set the “Crash” label if appropriate, add in the
-appropriate area/feature labels, and set the status to “Untriaged.”
-
-## Shepherding
-
-The shepherding process starts with finding an owner for a bug. If you have
-access to security bugs, you can find a list of all open security bugs without
-an owner
-[here](http://code.google.com/p/chromium/issues/list?can=2&q=Type%3DBug-Security+-Security_SecSeverity%3DNone+-has%3Aowner&sort=-security_secseverity&colspec=ID+Pri+Area+Feature+Status+Summary+Modified+Owner+Mstone+OS+Secseverity&x=mstone&y=area&cells=tiles).
-When analysing a bug for triage you’ll often find that you can work out a
-solution yourself. If that’s the case and you have time to develop a patch, then
-this is usually the most expedient solution to getting a fix out.
-
-For bugs that you can’t fix yourself, you’ll need to find an owner. If you don’t
-know who to assign a bug to, it’s often best to start by asking other members of
-the security team if they’re familiar with the code. Then they can either take
-the ownership of the bug, or point you to a developer who would make a good
-owner.
-
-If no one on the security team has a good suggestion, you’ll generally have to
-use svn blame or some other means to track back one of the original developers
-of the code. If you don’t have a checkout handy, you can always use the annotate
-feature on <http://src.chromium.org/>.
-
-### Following Up
-
-Priorities and schedules vary between developers. So, when you assign a security
-bug to an owner you should make sure you convey the timeline you’re expecting
-for a fix. If you don’t see regular progress in the bug report, you may need to
-manually follow up with the owner. Oftentimes, the bug just ended up being
-harder to reproduce or fix than it originally appeared, so it’s a good idea to
-offer help whenever there are unanticipated delays.
-
-Keep in mind that on average we get high severity bugs fixed on the release
-branch within *30 days* of the initial report, and almost always within *60
-days* at the most. For critical severity bugs we have a hard deadline of 60 days
-from initial report to a shipping fix.
-
-### Handling a Fix
-
-Once a fix is applied to trunk either you or the owner will change the bug
-status to **Merge-Approved** and switch the **Restrict-View-SecurityTeam** label
-to **Restrict-View-SecurityNotify**. At that point you’ll need to evaluate
-whether the bug is a good candidate for a merge.
-
-## Merging
-
-Security fixes often need to be merged to the stable branch (this includes
-patches to Chrome, WebKit, or other dependencies). Generally this is done by one
-of the security team members. The first thing you need to do is evaluate whether
-a fix should be considered for merge. Generally any high or critical severity
-fixes should be seriously considered for merge. Medium and low-severity fixes
-can be considered as well if they're particularly worrisome (e.g. bad
-information leak), have significant non-security impact (e.g. top crasher), or
-are just very low risk.
-
-One of the key considerations in determining what to merge is assessing the risk
-of breakage, which the bug’s owner should be able to convey. For risky fixes
-you’ll often want to consider bumping it to a later milestone. When you've
-decided to merge a fix, you should verify with a release manager that the merge
-window is open for any affected branches. Normally a fix will need to be merged
-to both the current stable and beta branches.
-
-You should merge fixes via [drover](/developers/how-tos/drover), which automates
-most of the process. If the [drover merge](/developers/how-tos/drover) does not
-apply cleanly you may want to reconsider whether the fix will introduce an
-unacceptable breakage risk. In the event that you can’t use drover to merge a
-fix, you still have the option of manually merging from a branch checkout. In
-general, most team members should have a checkout for the current stable, beta
-and trunk branches. So, this can generally just follow the [normal patch
-process](/developers/contributing-code), but using a branch repository.
-
-Once the fix is successfully merged you will need to update the the bug with the
-merge revision numbers, and change the status to **FixUnreleased** (or to
-**Fixed** if the stable branch is not affected) and set the merge status to
-**Merge-Completed** (if drover didn't do so). For beta merges, you should also
-verify that the **ReleaseBlock-Stable** flag is present.
-
-### Updating and Release Notes
-
-After a patch has been landed (and potentially merged) you’ll need to update the
-[security release
-document](https://docs.google.com/a/google.com/Doc?docid=0AUtTDLyP_VtYY2dxczZrNHpfODhzajZzbWd6&hl=en),
-which is used for tracking security bugs for release notes.
-
-### Vulnerability Rewards Nomination
-
-Generally, once a fix has been applied to trunk we will consider a bug for a
-vulnerability reward. This will generally be done by the team member shepherding
-the bug, or the owner if it’s a security team member. To remind yourself that
-you may want to consider a specific bug you can add the **reward-topanel** label
-in the tracker.
-
-When nominating a bug for a reward, be sure to consider the overall quality, and
-any additional value the reporter brought to the process. For reference, the
-general guidelines are listed on the [Vulnerability Rewards
-Program](/Home/chromium-security/vulnerability-rewards-program) page. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-faq/index.md b/chromium/docs/website/site/Home/chromium-security/security-faq/index.md
deleted file mode 100644
index a7b987dea7a..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-faq/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: security-faq
-title: Security FAQ
----
-
-**The [canonical version of the FAQ is now in the Chromium source
-tree](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md).** \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-faq/service-worker-security-faq/index.md b/chromium/docs/website/site/Home/chromium-security/security-faq/service-worker-security-faq/index.md
deleted file mode 100644
index 230a45a998c..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-faq/service-worker-security-faq/index.md
+++ /dev/null
@@ -1,340 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-- - /Home/chromium-security/security-faq
- - Security FAQ
-page_name: service-worker-security-faq
-title: Service Worker Security FAQ
----
-
-#### **Do not edit — for historical reference only**
-
-#### The [canonical version of the FAQ is now in the Chromium source
-tree](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/service-worker-security-faq.md).
-
-#### [TOC]
-
-This FAQ is specifically about service workers. Also see the general [security
-FAQ](/Home/chromium-security/security-faq).
-
-Like the general security FAQ, this document is a collaborative effort by many
-Chromium developers. (rsesek, estark, falken, slightlyoff, jakearchibald, evn,
-raymes, ainslie, mek, lgarron, elawrence, kinuko, palmer, your name here...)
-Last updated 12 May 2017. If you see an error or have an additional question,
-and have a Chromium account, go ahead and fix it. If you don't have a Chromium
-account, email palmer@chromium.org for a fix.
-
-#### Service Workers seem extremely risky! Why are they OK?
-
-Service Workers (SW) are indeed powerful. They support compelling web
-applications that can run offline or with intermittent connectivity. You can
-edit documents, browse and buy from catalogs, send social media messages, write
-email, etc. even in the subway! Service Workers can make the web platform more
-viable than ever before, enabling web apps to better compete with native apps
-even while essentially retaining the browse-to-use, sandboxed nature of the
-[Open Web Platform](https://www.w3.org/wiki/Open_Web_Platform) (OWP) that we all
-love. The rest of this FAQ will explain how the SW designers and implementers
-have mitigated the risks that necessarily come with this functionality.
-
-Service Workers are a replacement for and an improvement on the legacy
-[Application Cache
-API](https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache),
-which has been available in the OWP for a very long time.
-
-For more background on Service Workers, see [Service Workers
-Explained](https://github.com/w3c/ServiceWorker/blob/master/explainer.md).
-
-#### Do Service Workers run in a sandbox?
-
-Yes, SWs run in renderer processes. When Chrome starts a SW, it chooses a
-renderer process that is associated with the SW’s origin. If one does not exist,
-the browser creates a new one using a new SiteInstance for the origin.
-
-#### What APIs can Service Workers access?
-
-The HTML [specification partially enumerates the API surface available to
-Workers](https://html.spec.whatwg.org/#apis-available-to-workers). See also
-[Client](https://developer.mozilla.org/en-US/docs/Web/API/Client), and
-[ServiceWorkerGlobalScope](https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope-interface).
-(Note that SWs do not have access to synchronous APIs.)
-
-However, other web platform specifications can add new API surface. For example,
-[the Permissions API exposes a permissions attribute to
-workers](https://w3c.github.io/permissions/#navigator-and-workernavigator-extension).
-Generally, SWs have access to a subset of the web platform APIs, although there
-are some Worker- and Service Worker-specific APIs that do not make sense for
-in-page JavaScript.
-
-(\[Service\]WorkerGlobalScope is of course not necessarily a strict subset of
-Window, and similarly WorkerNavigator is not necessarily a strict subset of
-Navigator. And the various SW events are of course only exposed to SWs.)
-
-#### Do Service Workers obey the same-origin policy?
-
-Service Worker registration specifies that [Service Workers must run in the same
-origin as their
-callers](https://w3c.github.io/ServiceWorker/#register-algorithm).
-
-The origin comparison for finding a Service Worker registration for a request is
-[specified](https://w3c.github.io/ServiceWorker/#scope-match-algorithm) to be to
-be a longest-prefix match of serialized URLs, including their path. (E.g.
-<https://example.com/> != <https://example.com.evil.com/>.) This specification
-gap seems fragile to us, [and should be fixed to be specified and implemented as
-actual origin equality](https://github.com/w3c/ServiceWorker/issues/1118), but
-doesn’t currently seem exploitable.
-
-Only [Secure Contexts can register or use Service
-Workers](https://w3c.github.io/webappsec-secure-contexts/#example-c52936fc).
-
-Because SWs can call importScripts to import scripts (from any other origin), it
-is a good idea for site operators to set a Content-Security-Policy response
-header on the ServiceWorker’s JavaScript response, instructing the browser what
-sources of script the origin considers trustworthy. That would reduce an XSS
-attacker’s ability to pull in their own code.
-
-#### Do Service Workers live forever?
-
-There are two concepts of “live” here. One is about the installed registration
-and one is about the running Service Worker thread.
-
-The installed registration lasts indefinitely, similar to origin-scoped storage
-like
-[IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API).
-Additionally, the browser performs an update check after any navigation using
-the Service Worker, invalidating the HTTP cache every 24 hours. (Additionally,
-[according to a recent spec
-change](https://w3c.github.io/ServiceWorker/#dfn-use-cache), browsers will
-revalidate the HTTP cache for SW scripts unless the site opts into using the
-cache. Chrome does not yet adhere to this new part of the spec, [but will
-soon](https://bugs.chromium.org/p/chromium/issues/detail?id=675540).)
-
-The browser also performs an update check whenever the SW starts and
-periodically while the worker is running, if it has not checked in the last 24
-hours (86,400 seconds, [as specified in the Handle Functional Event
-algorithm](https://w3c.github.io/ServiceWorker/#handle-functional-event-algorithm)).
-
-The browser can terminate a running SW thread at almost any time. Chrome
-terminates a SW if the SW has been idle for 30 seconds. Chrome also detects
-long-running workers and terminates them. It does this if an event takes more
-than 5 minutes to settle, or if the worker is busy running synchronous
-JavaScript and does not respond to a ping within 30 seconds. When a SW is not
-running, Developer Tools and chrome://serviceworker-internals show its status as
-STOPPED.
-
-#### How can I see Service Workers in Chrome?
-
-You can see them in the Service Workers field in the Application tab of
-Developer Tools. You can also look at chrome://serviceworker-internals.
-
-#### Do Service Workers keep running after I close the tab?
-
-If an origin has any Service Workers running, each worker will be shut down soon
-after it processes the last event. Events that can keep a worker alive include
-push notifications. (Note that the [push notifications will trigger a
-user-visible notification if the SW does not create
-one](https://cs.chromium.org/chromium/src/chrome/browser/push_messaging/push_messaging_notification_manager.cc?type=cs&l=270),
-and they also require the person to grant the origin permission in a prompt. you
-can see that in action in this [push notifications demo
-app](https://gauntface.github.io/simple-push-demo/).)
-
-#### Can attackers use Service Workers to trigger attacks developed after SW registration?
-
-For example, could an attacker convince users to visit a malicious website, then
-wait for (e.g.) a V8 bug to show up in Chrome's repository, then write an
-exploit, and then somehow run that exploit on the machines of everyone who
-visited the malicious website in the last month or so?
-
-Without explicit permission from the user, the browser won't let the SW poll
-for/receive any push notification events the attacker's server may (try to)
-send, and hence the SW won't get a chance to handle the events.
-
-Similarly, you might imagine a SW that tries to use importScripts to
-periodically (re-)load maybe-v8-payload.js. But, the SW would only get to do
-that as part of an event handler. And if the SW isn't getting any events
-(because the person is not browsing or navigating to attacker.com, and because
-the person never granted attacker.com push notification permission), then it
-will never get to run its event handlers, and so again the SW won't get a chance
-to attack. If the person *is* currently browsing attacker.com, then the attacker
-doesn't gain any additional attack benefit from a Service Worker. They can just
-&lt;script src="maybe-v8-payload.js"&gt; as usual, from the in-page JavaScript.
-
-**However,** if/when [Foreign
-Fetch](https://github.com/w3c/ServiceWorker/blob/master/foreign_fetch_explainer.md)
-ships, the situation will change if people browse sites that fetch resources
-from the attacker's server.
-
-#### If a site has an XSS vulnerability, can the attacker permanently compromise that origin for me?
-
-An XSS attacker can indeed register an evil SW. As before SWs, XSS is a very
-powerful mode of attack on a web origin. To mitigate the risk that an XSS attack
-will register a malicious SW, the browser requires that the SW registration URL
-come from the origin itself. Thus, to use an XSS attack to register a malicious
-SW, the attacker needs the additional capability to host their own scripts on
-the server.
-
-Here is another exploit scenario: If the page with an XSS vulnerability also has
-a JSONP endpoint, the attacker could use it to (1) bypass CSP; (2) register a
-SW; and (3) call importScripts to import a third-party script to persist until
-
- the site operators detect and remediates the issue, and
-
- users navigate to the site again while online.
-
-In an XSS situation, the 24 hour cache directive limit ensures that a malicious
-or compromised SW will outlive a fix to the XSS vulnerability by a maximum of 24
-hours (assuming the client is online). Site operators can shrink the window of
-vulnerability by setting lower TTLs on SW scripts. We also encourage developers
-to [build a kill-switch
-SW](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776).
-
-In the near future, the right cleanup strategy (for this and other issues) will
-be [Clear-Site-Data](https://www.w3.org/TR/clear-site-data/).
-
-Additionally, site operators should ignore (e.g. respond with 400 Bad Request)
-requests that have the Service-Worker request header for domains or paths that
-the server doesn’t expect to be serving SW scripts for.
-
-#### Can sites opt out of Service Workers?
-
-Sites that do not intend to serve Service Workers on particular domains or paths
-can check for and explicitly reject requests for worker scripts, by checking for
-[the Service-Worker request
-header](https://w3c.github.io/ServiceWorker/#service-worker-script-request).
-
-#### How many SWs can an origin, or Chrome itself, spawn?
-
-The current specification and the current implementation in Chrome do not define
-any limits.
-
-#### Can attackers 'hide' Service Worker scripts in JPEGs or other non-script MIME types?
-
-*Can an attacker upload (for example) JPEG files to a site that supports the
-capability, and then use the uploaded files as SW scripts?* The SW specification
-and implementation require that a SW script have the right JavaScript MIME type.
-(Additionally, as noted elsewhere in this document, server operators should
-reject SW script requests except for the exact endopints they intend to serve SW
-scripts from.)
-
-#### Can iframes register Service Workers?
-
-Yes, if and only if they are themselves secure contexts. [By
-definition](https://w3c.github.io/webappsec-secure-contexts/#examples-framed),
-that means that they must be nested inside secure contexts, all the way up to
-the top-level document.
-
-Additionally, third-party iframes can’t register Service Workers if third party
-cookies are blocked. (See chrome://settings/content.)
-
-#### Why doesn’t Chrome prompt the user before registering a Service Worker?
-
-The Chrome Team generally prefers to ask people about things that are
-privacy-relevant, using nouns and verbs that are simple and precise (camera,
-mic, geo-location, and so on). But we avoid asking questions about resource-use
-(caching, persistence, CPU, and so on). We’re better prepared to make those
-types of resource decisions automatically. (Consider, for example, that the HTTP
-cache, AppCache, and even [Google
-Gears](https://en.wikipedia.org/wiki/Gears_(software)) also do not/did not
-prompt the user.)
-
-[An informal study by Chrome team members Rebecca Rolfe, Ben Wells, and Raymes
-Khoury](https://docs.google.com/presentation/d/1suzMhtvMtA11jxPUdH1jL1oPh-82rTymCnslgR3ehEE/edit#slide=id.p)
-suggests that people do not generally have sufficient context to understand
-permission requests triggered by API calls from origins in iframes. It seems
-reasonable that people would similarly lack the context to understand requests
-from Service Workers.
-
-#### What if I don't want any SWs?
-
-You can disable SWs by disabling storage in chrome://settings. SW are gated on
-cookie/local data storage settings. (That is, the **Block sites from setting any
-data** radio button in **Content Settings**.)
-
-Clearing browser data (CBD; the **Clear browsing data...** button in Settings or
-chrome://settings/clearBrowserData) also deletes SWs. You can verify that by
-following this test procedure:
-
-1. Visit https://gauntface.github.io/simple-push-demo/
-2. In a second tab, visit chrome://serviceworker-internals/ to see the
- ACTIVATED and RUNNING SW
- 1. Note that the origin/the origin's SW cannot actually send any
- push notifications until you grant it that permission
-3. In a third tab, go to chrome://settings/clearBrowserData to clear
- browsing data; clear it by clicking **Clear browsing data**
-4. Reload chrome://serviceworker-internals/ to see that the SW's status
- is now REDUNDANT and STOPPED
-5. Close the Simple Push Demo tab
-6. Reload chrome://serviceworker-internals/ to see that the SW is now
- gone
-
-You can also remove individual SW registrations with
-chrome://serviceworker-internals/.
-
-If you really want to not use the modern web, you can use one of the browsers
-that don't (yet) support SWs. But, eventually, the Open Web Platform will
-continue to evolve into a powerful, useful platform supporting applications that
-are [secure, linkable, indexable, composable, and
-ephemeral](https://paul.kinlan.me/slice-the-web/). Yes, SWs make web apps
-somewhat less ephemeral, but we believe the increased applicability of the OWP
-is worth it.
-
-Browser vendors are committed to ensuring the security of the OWP improves even
-as we give it new capabilities. This process happens in the open, in fora like
-[W3C Technical Architecture Group](https://www.w3.org/2001/tag/), [W3C’s Web
-Platform Incubator Community Group](https://www.w3.org/blog/2015/07/wicg/), and
-[blink-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev).
-Security and privacy reviews are part of the process and we invite knowledgeable
-experts to participate in those open fora.
-
-#### What are some SW best practices for site operators?
-
- [Build a kill-switch
- SW](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776).
-
- Use [Clear-Site-Data](https://www.w3.org/TR/clear-site-data/) when it
- becomes available.
-
- Be aware of the need for longer session lifetimes, since clients may go
- offline and SWs might need to POST cached requests after coming back online.
- [Here is one way to handle
- that](https://developers.google.com/web/updates/2016/06/2-cookie-handoff).
-
-#### What SW bugs would quality for a bounty under [Chrome’s VRP](/Home/chromium-security/vulnerability-rewards-program)?
-
-If you could break one or more of the security assertions we make in this FAQ,
-that would be potentially rewardable under the Vulnerability Rewards Program
-(VRP). Here is a non-exhaustive list of examples:
-
- Over-long registration/lifetime (e.g. a SW able to run or stay alive even
- without incoming events to handle)
-
- Same-origin bypass or off-origin SW registration
-
- Access to APIs that require prompts, choosers, or permissions, without
- permission having been granted to the origin
-
- Geolocation
-
- Hardware sensors
-
- Microphone, camera, media devices
-
- USB, Bluetooth
-
-Here is [a list of historical SW security
-bugs](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=Type%3DBug-Security+serviceworker&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
-in Chromium’s bug tracker.
-
-If you believe you have found a bug in the SW specification, please [file a new
-Chromium bug using the Security
-template](https://bugs.chromium.org/p/chromium/issues/entry?template=Security%20Bug).
-It’s a good idea to file bugs with all browser vendors that implement the buggy
-section of the spec.
-
-If you believe you have found a bug in Chrome’s implementation of SW, please
-[file a new bug using the Security
-template](https://bugs.chromium.org/p/chromium/issues/entry?template=Security%20Bug).
-The Chrome Security Team will triage it within 1 or 2 business days. Good bug
-reports come with minimal test cases that demonstrate the problem! \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-labels/index.md b/chromium/docs/website/site/Home/chromium-security/security-labels/index.md
deleted file mode 100644
index b2ab4a36a6e..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-labels/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: security-labels
-title: Security labels/components
----
-
-Please see
-[security-labels.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/security-labels.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-release-management/index.md b/chromium/docs/website/site/Home/chromium-security/security-release-management/index.md
deleted file mode 100644
index c85bfbd8e7b..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-release-management/index.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: security-release-management
-title: Security Release Management
----
-
-## **[TOC]**
-
-## **Merging Fixes**
-
-Engineers outside the Chrome Security team shouldn’t request merges for security
-fixes. Instead, please [mark the bug as
-Fixed](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/security/security-labels.md#TOC-Merge-labels)
-and we’ll take care of it. The instructions below are for the Chrome Security
-team itself.
-
-### **TODO(chrome-security@): Identifying fixes to merge.**
-
-Security fixes often need to be merged to the Stable or Beta branch. One of the
-key considerations in picking a fix to merge is assessing the risk of breakage,
-which the bug’s owner should be able to convey. For risky fixes you should
-consider bumping it to a later milestone. Generally, you should consider merging
-the following:
-
-* [Critical or High severity bugs](/developers/severity-guidelines)
-* [Medium severity bugs](/developers/severity-guidelines) if they're
- particularly worrisome (e.g. info leak) or have significant
- non-security impact (e.g. top crasher).
-* [Low severity bugs](/developers/severity-guidelines) where the fixes
- are very low risk.
-
-For Critical and High bugs, we aim to fix users fast and work directly with
-Chrome TPMs to make sure any merge or release is done safely. The following are
-general recommendations on when / where to merge:
-
-* ==Released Critical vulnerability==: Emergency, out of band release,
- target a fix as soon as we have a viable release candidate.
-* ==Unreleased Critical vulnerability==: Target a fix for the next
- scheduled Stable point release. (An exception here is if we know it
- will be released prior to the next scheduled release, then we push
- as fast as needed to address it).
-* ==Released High vulnerability==: A fix should be merged to the next
- scheduled Stable point release.
-* ==Unreleased High (and lower severity) vulnerability==: Target the
- merge to the next scheduled Stable milestone release.
-
-Other factors to consider in your merge vs. no-merge calculation are:
-
-* **Bake time**. If a fix has been landed on trunk for weeks and made
- it into various dev channels with no observed screaming, a merge
- candidate is said to be "well baked". A well baked patch might be
- considered for merge even if it is of lower severity, or appears
- scary. Conversely, we should rarely be merging anything that hasn't
- landed for a few days and been released to a dev channel.
-* **Ease of discovery**. If a bug has been found independently by
- multiple efforts (e.g. an external researcher as well as ClusterFuzz
- internally), this suggests that the bug is readily discoverable and
- should be merged sooner rather than later.
-* **Ease of merge**. If the merge is a total nightmare, it may be fair
- to not merge the fix and just wait for the fix on trunk to "roll
- into stable", as all work on trunk eventually does. Of course, if
- the bug is critical or other factors (ease of discovery, highly
- exploitable, etc.) apply, then we should bite the bullet and
- undertake the extra work in order to best protect users.
-* **Change of behavior**. If the fix in fact changes behavior (locks
- something down, turns something off, etc.) then it is best to have
- the fix appear as a major revision bump as opposed to a patch on the
- stable channel. This doesn't mean "don't merge" but it does suggest
- we might merge to beta but not the existing stable.
-
-Your worklist for merges is defined by the following bug database criteria:
-
-* All Issues
-* Type-Bug-Security
-* Merge=Request,Review
-
-(Note: beware of querying on the milestone. At this stage in the bug's life, the
-milestone label represents the earliest affected release at the time the bug was
-filed. So if current stable is M27, there might still be bugs in this list which
-are M25, M26, etc., if we've been a little slow in fixing them. Conversely,
-anything marked M28 denotes a regression since M27 stable, so it only needs to
-be merged to the M28 beta.)
-
-### **TODO(bug owner): Merging a security patch.**
-
-When a security merge has been approved, please go ahead and merge.
-
-To avoid accidentally losing a fix for a Chrome release, branch merges should be
-done in a "newer first" manner. For example, if you're merging a fix to M27
-stable and M28 is branched and affected, then merge to M28 first. Such a
-strategy can also be used to bake a fix on the M28 branch in order to gain
-confidence about an M27 stable channel merge.
-
-#### **How to merge**
-
-You should merge fixes with [gerrit](/developers/how-tos/drover), which
-automates most of the process. If the [gerrit merge](/developers/how-tos/drover)
-does not apply cleanly you may want to reconsider whether the fix will introduce
-an unacceptable breakage risk. In the event that you can’t use gerrit to merge a
-fix, you still have the option of manually merging from a branch checkout. This
-follows the normal developer [normal patch
-process](/developers/contributing-code).
-
-#### **Post-merge bug cleanup.**
-
-Once the fix is successfully merged you will need to:
-
-1. Update the bug with the merge revision numbers (one for each branch
- you've merged to).
-2. Set the merge status to Merge-Approved to Merge-Merged (if drover
- didn't do so).
-
-**Release Notes**
-
-For every new release, we include notes from security bugs that match the
-following search criteria:
-
-* Type=Bug-Security
-* M=? (Milestone)
-* Release-x-Myy
-* -Security_Severity=None
-* Security_Impact=Stable
-
-For example, [this
-link](https://code.google.com/p/chromium/issues/list?can=1&q=Type%3DBug-Security+M%3D26+Release%3D0+-Security_Severity%3DNone+-OS%3DChrome+-OS%3DAndroid&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-shows the security fixes that went into the initial Beta -&gt; Stable promotion
-of Chrome 26, and [this
-link](https://code.google.com/p/chromium/issues/list?can=1&q=Type%3DBug-Security+M%3D24+Release%3D1+-Security_Severity%3DNone+-OS%3DChrome+-OS%3DAndroid&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-shows the security fixes that went into the first post-stable patch of the
-Chrome 24 branch.
-
-Every externally reported issue gets assigned a CVE ID per MITRE's [CVE Counting
-Rules](https://cve.mitre.org/cve/editorial_policies/counting_rules.html).
-Chrome's CVE pool is
-[here](https://docs.google.com/a/google.com/spreadsheet/ccc?key=0AoQyc9BFHd9FdE43bkxKZFRtOEk3eW5zeEhST29zTmc#gid=0)
-(Google internal-only link, sorry). As of Chrome 27, we're focusing the release
-notes on externally reported issues. This mirrors how Mozilla Firefox arranges
-their release notes, saves the precious resource of CVEs, saves a lot of time in
-preparing release notes, and appropriately focuses our security release notes on
-the excellent contributions and rewards of external researchers.
-
-CVEs are allocated when the stable release that contains the fix is released,
-and they are then placed into the bug tracker using the CVE label, and copied
-into the release notes. An example of how it looks is [here for the Chrome 27
-release
-notes](http://googlechromereleases.blogspot.com/2013/05/stable-channel-release.html).
-
-### **security-notify@chromium.org**
-
-There is no longer any need to pre-notify security-notify@chromium.org with a
-copy of release notes. Very few list members were finding it useful or
-actionable. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-reviews/index.md b/chromium/docs/website/site/Home/chromium-security/security-reviews/index.md
deleted file mode 100644
index d3ce166a507..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-reviews/index.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: security-reviews
-title: Chrome Security Reviews
----
-
-All launches and major changes to Chrome undergo a security review.
-
-Please note that filing a launch bug requires an @google.com account. For
-non-Google/open source contributors, find a Google PM who can help you with your
-launch. (If you don't know whom to ask, ask on chromium-dev@chromium.org).
-
-The Chrome Security Team used to ask engineers and PMs to provide the same
-information over and over again for incremental launches. We also had a hard
-time keeping on top of incremental changes and we weren't really using the
-cumulative review data to give us insight into the ongoing engineering practices
-across Chrome.
-
-This process aims to address these issues and make the review process simpler
-and faster for everyone. If you have further questions, ping adetaylor@.
-
-## How does the security review process work?
-
-The full story is here: [New Chrome Security Review
-Plan](https://docs.google.com/document/d/11bnI_H0_Hg_o1mILjjH28PHB98bpSC4STh_OXLwv1gA/edit).
-
-TL;DR: File a launch bug, and the security team will see it on their dashboard.
-Make sure to link to a design document in the launch bug. The security
-reviewer(s) will look to the design doc first, and will probably comment and ask
-questions in the document.
-
-If your project is especially tricky or large, it's best to reach out to
-security@chromium.org (for public stuff; preferable) or
-chrome-security@google.com (for Google confidential stuff) well ahead of time.
-
-## FAQ
-
-#### Q: Why do we do security reviews?
-
-Great question, and thanks for asking it! Security reviews serve three main
-purposes:
-
- Provides an opportunity to educate and advise on potential security issues.
- Chrome is one of the hardest pieces of software in the world to secure:
- millions of lines of security-critical code, rendering untrusted content
- from all corners of the web, sitting on over 1 billion devices... that makes
- it an attractive target for the bad guys! Everyone in Chrome is responsible
- for security, and we're here to help point out and avoid security pitfalls.
-
- It’s a second pair of (expert) eyes looking for security holes. An attacker
- needs to only find one security bug in your project to exploit, while you
- have the job of defending your entire codebase. Not fair, right? We want an
- engineer on Chrome to look over your project with an eye on security, before
- someone with different motives takes a look when the project lands.
-
- Gives the security team an overview of what is happening in Chrome. Good
- security advice is tailored to a team, but great security advice also
- considers the strategic direction of the entire product area. When we can
- keep tabs on developments and product trajectories across teams, it
- (hopefully) allows us to provide meaningful advice and recommendations,
- sometimes even before you approach us and ask for it!
-
-#### Q: Is there anything security reviews are NOT?
-
-Unfortunately, security reviews don’t mean that you can stop caring about
-security. Your team is still accountable and responsible for ensuring that your
-code is free of security bugs. Security reviews won’t catch all bugs, but they
-certainly do help to make sure your security practices are sound.
-
-#### Q: Are Chrome and Chrome OS using the same security review process?
-
-Yes, but with one important difference: for Chrome OS, kerrnel@ is the main
-point of contact. To file a Chrome OS feature survey, please follow the steps at
-go/cros-security-review.
-
-#### Q: I have other questions. How can I get in contact?
-
-The best address for us is security@chromium.org, or if you’re a Googler you can
-reach us at chrome-security@google.com for Chrome stuff,
-chromeos-security@google.com for Chrome OS stuff. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (1).png.sha1 b/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (1).png.sha1
deleted file mode 100644
index c6a66c0cd85..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-32118b68b5ad4afe076287b5df689fbce052a122 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (2).png.sha1 b/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (2).png.sha1
deleted file mode 100644
index f6d7ae4aeb6..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (2).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-60af70776d7c99f008418434ce035c4d686584c6 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (3).png.sha1 b/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (3).png.sha1
deleted file mode 100644
index b83274fa097..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue (3).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c3934652eac2e21e4eb20872cc71838828b01255 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue.png.sha1 b/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue.png.sha1
deleted file mode 100644
index 86f5cb457c0..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Life of a Security Issue.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-20d867a7595911beeb2c456cfd76649b5e4418bd \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Screen Shot 2016-05-20 at 15.41.22.png.sha1 b/chromium/docs/website/site/Home/chromium-security/security-sheriff/Screen Shot 2016-05-20 at 15.41.22.png.sha1
deleted file mode 100644
index fee823d5b8d..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-sheriff/Screen Shot 2016-05-20 at 15.41.22.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b855ec7ad24d2f8ed5c1eba131b58b041403a081 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/security-sheriff/index.md b/chromium/docs/website/site/Home/chromium-security/security-sheriff/index.md
deleted file mode 100644
index 57a66a4da2b..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/security-sheriff/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: security-sheriff
-title: Security Sheriff
----
-
-The [canonical version of this document is now in the Chromium source
-tree](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/sheriff.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/site-isolation/OWNERS b/chromium/docs/website/site/Home/chromium-security/site-isolation/OWNERS
deleted file mode 100644
index bccc55526a4..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/site-isolation/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-alexmos@chromium.org
-creis@chromium.org
-nasko@chromium.org
diff --git a/chromium/docs/website/site/Home/chromium-security/site-isolation/index.md b/chromium/docs/website/site/Home/chromium-security/site-isolation/index.md
deleted file mode 100644
index b6f3b6ae035..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/site-isolation/index.md
+++ /dev/null
@@ -1,377 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: site-isolation
-title: Site Isolation
----
-
-## Overview
-
-Site Isolation is a security feature in Chrome that offers additional protection
-against some types of security bugs. It uses Chrome's sandbox to make it harder
-for untrustworthy websites to access or steal information from your accounts on
-other websites.
-
-Websites are typically not allowed to access each other's data inside the
-browser, thanks to code that enforces the Same Origin Policy. Occasionally,
-security bugs are found in this code and malicious websites may try to bypass
-these rules to attack other websites. The Chrome team aims to fix such bugs as
-quickly as possible.
-
-Site Isolation offers an extra line of defense to make such attacks less likely
-to succeed. It ensures that pages from different websites are always put into
-different processes, each running in a sandbox that limits what the process is
-allowed to do. It also makes it possible to block the process from receiving
-most types of sensitive data from other sites. As a result, a malicious website
-will find it much more difficult to steal data from other sites, even if it can
-break some of the rules in its own process.
-
-This protection is made possible by the following changes in Chrome's behavior:
-
-* Cross-site documents are always put into a different process,
- whether the navigation is in the current tab, a new tab, or an
- iframe (i.e., one web page embedded inside another). Note that only
- a subset of sites are isolated on Android, to reduce overhead.
-* Cross-site data (such as HTML, XML, JSON, and PDF files) is not
- delivered to a web page's process unless the server says it should
- be allowed (using [CORS](https://www.w3.org/TR/cors/)).
-* Security checks in the browser process can detect and terminate a
- misbehaving renderer process (only on desktop platforms for the time
- being).
-
-Here, we use a precise definition for a **site**: the scheme and registered
-domain name, including the public suffix, but ignoring subdomains, port, or
-path. For example, an origin like https://foo.example.com:8080 would have a site
-of https://example.com. We use sites instead of origins to avoid breaking
-compatibility with existing web pages that might modify their document.domain to
-communicate across multiple subdomains of a site.
-
-For more technical information about the protections offered by Site Isolation
-and how they are built, please see the [project's design
-document](/developers/design-documents/site-isolation).
-
-[TOC]
-
-## Motivation
-
-Web browser security is important: browsers must defend against untrustworthy
-web pages that try to attack other sites or access the user's machine. Given the
-complexity of the browser, it is necessary to use a "defense in depth" approach
-to limit the damage that occurs even if an attacker finds a way around the Same
-Origin Policy or other security logic in the browser. As a result, Chrome uses a
-sandbox and Site Isolation to try to defend against even powerful attackers
-(e.g., who might know about bugs in the browser). This is motivated by several
-different types of attacks.
-
-First, compromised renderer processes (also known as "arbitrary code execution"
-attacks in the renderer process) need to be explicitly included in a browser’s
-security threat model. We assume that determined attackers will be able to find
-a way to compromise a renderer process, for several reasons:
-
-* Past experience suggests that potentially exploitable bugs will be
- present in future Chrome releases. There were [10 potentially
- exploitable bugs in renderer components in
- M69](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=Release%3D0-M69%2C1-M69%2C2-M69%2C3-M69+Type%3DBug-Security+Security_Severity%3DHigh%2CCritical+-status%3ADuplicate+label%3Aallpublic+component%3ABlink%2CInternals%3ECompositing%2CInternals%3EImages%3ECodecs%2CInternals%3EMedia%2CInternals%3ESkia%2CInternals%3EWebRTC%2C+-component%3ABlink%3EMedia%3EPictureInPicture%2CBlink%3EPayments%2CBlink%3EStorage%2CInternals%3ECore%2CInternals%3EPrinting%2CInternals%3EStorage%2CMojo%2CServices%3ESync%2CUI%3EBrowser&sort=m&groupby=&colspec=ID+Status+CVE+Security_Severity+Security_Impact+Component+Summary),
- [5 in
- M70](https://bugs.chromium.org/p/chromium/issues/list?sort=m&groupby=&colspec=ID%20Status%20CVE%20Security_Severity%20Security_Impact%20Component%20Summary&q=Release%3D0-M70%2C1-M70%2C2-M70%2C3-M70%20Type%3DBug-Security%20Security_Severity%3DHigh%2CCritical%20-status%3ADuplicate%20label%3Aallpublic%20component%3ABlink%2CInternals%3ECompositing%2CInternals%3EImages%3ECodecs%2CInternals%3EMedia%2CInternals%3ESkia%2CInternals%3EWebRTC%2C%20-component%3ABlink%3EMedia%3EPictureInPicture%2CBlink%3EPayments%2CBlink%3EStorage%2CInternals%3ECore%2CInternals%3EPrinting%2CInternals%3EStorage%2CMojo%2CServices%3ESync%2CUI%3EBrowser&can=1),
- [13 in
- M71](https://bugs.chromium.org/p/chromium/issues/list?sort=m&groupby=&colspec=ID%20Status%20CVE%20Security_Severity%20Security_Impact%20Component%20Summary&q=Release%3D0-M71%2C1-M71%2C2-M71%2C3-M71%20Type%3DBug-Security%20Security_Severity%3DHigh%2CCritical%20-status%3ADuplicate%20label%3Aallpublic%20component%3ABlink%2CInternals%3ECompositing%2CInternals%3EImages%3ECodecs%2CInternals%3EMedia%2CInternals%3ESkia%2CInternals%3EWebRTC%2C%20-component%3ABlink%3EMedia%3EPictureInPicture%2CBlink%3EPayments%2CBlink%3EStorage%2CInternals%3ECore%2CInternals%3EPrinting%2CInternals%3EStorage%2CMojo%2CServices%3ESync%2CUI%3EBrowser&can=1),
- [13 in
- M72](https://bugs.chromium.org/p/chromium/issues/list?sort=m&groupby=&colspec=ID%20Status%20CVE%20Security_Severity%20Security_Impact%20Component%20Summary&q=Release%3D0-M72%2C1-M72%2C2-M72%2C3-M72%20Type%3DBug-Security%20Security_Severity%3DHigh%2CCritical%20-status%3ADuplicate%20label%3Aallpublic%20component%3ABlink%2CInternals%3ECompositing%2CInternals%3EImages%3ECodecs%2CInternals%3EMedia%2CInternals%3ESkia%2CInternals%3EWebRTC%2C%20-component%3ABlink%3EMedia%3EPictureInPicture%2CBlink%3EPayments%2CBlink%3EStorage%2CInternals%3ECore%2CInternals%3EPrinting%2CInternals%3EStorage%2CMojo%2CServices%3ESync%2CUI%3EBrowser&can=1),
- [15 in
- M73](https://bugs.chromium.org/p/chromium/issues/list?sort=m&groupby=&colspec=ID%20Status%20CVE%20Security_Severity%20Security_Impact%20Component%20Summary&q=Release%3D0-M73%2C1-M73%2C2-M73%2C3-M73%20Type%3DBug-Security%20Security_Severity%3DHigh%2CCritical%20-status%3ADuplicate%20label%3Aallpublic%20component%3ABlink%2CInternals%3ECompositing%2CInternals%3EImages%3ECodecs%2CInternals%3EMedia%2CInternals%3ESkia%2CInternals%3EWebRTC%2C%20-component%3ABlink%3EMedia%3EPictureInPicture%2CBlink%3EPayments%2CBlink%3EStorage%2CInternals%3ECore%2CInternals%3EPrinting%2CInternals%3EStorage%2CMojo%2CServices%3ESync%2CUI%3EBrowser&can=1).
- This volume of bugs holds steady despite years of investment into
- developer education, fuzzing, Vulnerability Reward Programs, etc.
- Note that this only includes bugs that are reported to us or are
- found by our team.
-* Security bugs can often be made exploitable: even 1-byte buffer
- overruns [can be turned into an
- exploit](https://googleprojectzero.blogspot.com/2014/08/the-poisoned-nul-byte-2014-edition.html).
-* Deployed mitigations (like
- [ASLR](http://en.wikipedia.org/wiki/Address_space_layout_randomization)
- or [DEP](http://en.wikipedia.org/wiki/Data_Execution_Prevention))
- are [not always
- effective](https://googleprojectzero.blogspot.com/2019/04/virtually-unlimited-memory-escaping.html).
-
-Second, universal cross-site scripting (UXSS) bugs pose a similar threat.
-Security bugs of this form would normally let an attacker bypass the Same Origin
-Policy within the renderer process, though they don't give the attacker complete
-control over the process. Such UXSS bugs tend to be
-[common](https://ai.google/research/pubs/pub48028).
-
-Third, side channel attacks such as [Spectre](https://spectreattack.com/) make
-reading arbitrary renderer process memory possible, even without bugs in Chrome.
-This poses additional risks to sensitive data in the renderer process, and it
-can make exploitation easier.
-
-Chrome's architecture provides additional defenses against these powerful
-attacks. Chrome's
-[sandbox](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md)
-helps prevent a compromised renderer process from being able to access arbitrary
-local resources (e.g. files, devices). Site Isolation helps protect websites
-against attacks from compromised renderer processes, UXSS, and side-channel
-attacks like Spectre.
-
-For more background and motivation, see our [Usenix Security 2019 conference
-paper](https://www.usenix.org/conference/usenixsecurity19/presentation/reis) on
-Site Isolation, and Chrome's [Post-Spectre Threat Model
-Re-Think](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/security/side-channel-threat-model.md).
-
-## Current Status
-
-#### Desktop Platforms
-
-Site Isolation was [enabled by
-default](https://security.googleblog.com/2018/07/mitigating-spectre-with-site-isolation.html)
-for all sites in Chrome 67 on Windows, Mac, Linux, and Chrome OS to help to
-defend against attacks that are able to read otherwise inaccessible data within
-a process, such as [speculative side-channel attack
-techniques](https://security.googleblog.com/2018/01/todays-cpu-vulnerability-what-you-need.html)
-like Spectre/Meltdown. As of Chrome 77, Site Isolation also now defends against
-fully compromised renderer processes and UXSS bugs on desktop platforms. In M92,
-Site Isolation expanded to isolate all extensions from each other as well.
-
-#### Android
-
-On Android devices with at least 2 GB of RAM, Site Isolation has been enabled
-for sites that users log into since Chrome 77. In Chrome 92, this expanded to
-include sites that use third-party login providers (e.g., OAuth) and sites that
-adopt Cross-Origin-Opener-Policy headers.
-
-## Related Blog Posts
-
-* [Improving extension security with out-of-process
- iframes](https://blog.chromium.org/2017/05/improving-extension-security-with-out.html)
- \- May 2017
-* [Mitigating Spectre with Site Isolation in
- Chrome](https://security.googleblog.com/2018/07/mitigating-spectre-with-site-isolation.html)
- \- July 2018
-* [Improving Site Isolation for Stronger Browser
- Security](https://security.googleblog.com/2019/10/improving-site-isolation-for-stronger.html)
- / [Recent Site Isolation
- improvements](https://blog.chromium.org/2019/10/recent-site-isolation-improvements.html)
- \- October 2019
-* [Mitigating Side-Channel
- Attacks](https://blog.chromium.org/2021/03/mitigating-side-channel-attacks.html)
- / [A Spectre proof-of-concept for a Spectre-proof
- web](https://security.googleblog.com/2021/03/a-spectre-proof-of-concept-for-spectre.html)
- \- March 2021
-* [Protecting more with Site
- Isolation](https://security.googleblog.com/2021/07/protecting-more-with-site-isolation.html)
- / [Privacy and performance, working together in
- Chrome](https://blog.google/products/chrome/privacy-and-performance-working-together-chrome/)
- \- July 2021
-
-## Limitations
-
-* **Sites vs Origins**: Compatibility with document.domain changes
- currently requires us to use sites (e.g., https://example.com)
- rather than origins (e.g., https://foo.example.com) for defining
- process boundaries. This allows multiple origins within a site to
- share the same process.
-* **Filtering cross-site data**: Cross-Origin Read Blocking (CORB) is
- a best effort approach that tries to protect as much sensitive
- content as possible, but it is limited by the need to preserve
- compatibility with incorrectly labeled resources (e.g., JavaScript
- files labeled as HTML).
-* **Unavailable in some settings**: Site Isolation is not yet
- supported in Android WebView, or on Chrome for Android devices with
- less than 2GB of RAM, or in the &lt;webview&gt; tags used in Chrome
- Apps.
-
-## Tradeoffs
-
-Site Isolation represents a major architecture change for Chrome, so there are
-some tradeoffs when enabling it, such as increased memory overhead. The team has
-worked hard to minimize this overhead and fix as many functional issues as
-possible. A few known issues remain:
-
-For users:
-
-* Higher overall memory use in Chrome. On desktop in Chrome 67, this
- is about 10-13% when isolating all sites with many tabs open. On
- Android in Chrome 77, this is about 3-5% overhead when isolating
- sites that users log into.
-
-For web developers:
-
-* Full-page layout is no longer synchronous, since the frames of a
- page may be spread across multiple processes. This may affect pages
- that change the size of a frame and then send a postMessage to it,
- since the receiving frame may not yet know its new size when
- receiving the message. One workaround is to send the new size in the
- postMessage itself if the receiving frame needs it. As of Chrome 68,
- pages can also work around this by forcing a layout in the sending
- frame before sending the postMessage. See [Site Isolation for web
- developers](https://developers.google.com/web/updates/2018/07/site-isolation)
- for more details.
-* Unload handlers may not always run when the tab is closed.
- postMessage might not work from an unload handler
- ([964950](https://crbug.com/964950)).
-* When debugging with `--disable-web-security`, it may also be necessary
- to disable Site Isolation (using
- `--disable-features=IsolateOrigins,site-per-process`) to access
- cross-origin frames.
-
-## How to Configure
-
-For most users, no action is required, and Site Isolation is enabled at an
-appropriate level based on available resources.
-
-For more advanced cases, it is possible to isolate additional sites and origins
-in a few ways. Note that changes to chrome://flags and the command line only
-affect the current device, and are not synced to your other instances of Chrome.
-
-### 1) Isolating All Sites (Android)
-
-This mode is already enabled by default for 100% of Chrome users on Windows,
-Mac, Linux, and Chrome OS. The instructions below can still be useful on
-Android, for users desiring the highest security on devices with sufficient RAM.
-
-This mode ensures that all sites are put into dedicated processes that are not
-shared with other sites. It can be enabled in either of the following ways:
-
-* Visit chrome://flags#enable-site-per-process, click Enable, and
- restart. (See also: [help center
- article](https://support.google.com/chrome/answer/7623121). Note
- that this flag is only present on Android. It is missing on other
- platforms, where it is already enabled by default.)
-
- ![](/Home/chromium-security/site-isolation/site-isolation-flag-1.png)
-
-* Or, use an [Enterprise
- Policy](https://support.google.com/chrome/a/answer/7581529) to
- enable
- [SitePerProcess](/administrators/policy-list-3#SitePerProcess) or
- [SitePerProcessAndroid](/administrators/policy-list-3#SitePerProcessAndroid)
- within your organization.
-
-### 2) Isolating Specific Origins
-
-This mode allows you to provide a list of specific origins that will be given
-dedicated processes. On desktop platforms where Site Isolation is already fully
-enabled, these origins will be isolated at a finer granularity than their site
-(e.g., https://foo.example.com can be isolated from the rest of
-https://example.com). On Android, these origins will be isolated in addition to
-any other sites already isolated. This can be used to isolate any origins that
-need extra protection, such as any that you log into. (Note that wildcards are
-supported to isolate all origins underneath a given origin.)
-
-This mode is automatically enabled on Android devices with at least 2 GB of
-memory as of Chrome 77, for sites that users log into. This mode can be further
-manually configured in any of the following ways:
-
-* In Chrome 77 or later versions: Enable
- chrome://flags/#isolate-origins, provide the list of origins to
- isolate (e.g.
- "https://foo.example.com,https://[*.]corp.example.com"), and
- restart Chrome.
-
-* Use [command line flags](/for-testers/command-line-flags) to start
- Chrome with `--isolate-origins` followed by a comma-separated list of
- origins to isolate. For example:
- `--isolate-origins=https://foo.example.com,https://[*.]corp.example.com`
- Be careful not to include effective top-level domains (e.g., https://co.uk
- or https://appspot.com; see the full list at <https://publicsuffix.org>),
- because these will be ignored.
-* Or, use an [Enterprise
- Policy](https://support.google.com/chrome/a/answer/7581529) to
- enable
- [IsolateOrigins](https://chromeenterprise.google/policies/#IsolateOrigins)
- or
- [IsolateOriginsAndroid](https://chromeenterprise.google/policies/#IsolateOriginsAndroid)
- within your organization.
-
-### **3) Isolating All Origins**
-
-This mode is experimental and will break any pages that depend on modifying
-document.domain to access a cross-origin but same-site page. It will also
-increase Chrome's process count and may affect performance. The benefit is that
-every origin will require its own dedicated process, such that two origins from
-the same site won't share a process.
-
-This mode can be configured by enabling chrome://flags#strict-origin-isolation
-
-### Diagnosing Issues
-
-If you encounter problems when Site Isolation is enabled, you can try turning it
-off by undoing the steps above, to see if the problem goes away.
-
-You can also try opting out of field trials of Site Isolation to diagnose bugs,
-by visiting chrome://flags#site-isolation-trial-opt-out, choosing "Disabled (not
-recommended)," and restarting.
-
-![](/Home/chromium-security/site-isolation/site-isolation-flag-2.png)
-
-Starting Chrome with the `--disable-site-isolation-trials` flag is equivalent to
-the opt-out above.
-
-Note that if Site Isolation has been enabled by enterprise policy, then none of
-these options can be used to disable it.
-
-We encourage you to [file bugs](https://goo.gl/XBoKtY) if you encounter problems
-when using Site Isolation that go away when disabling it. In the bug report,
-please describe the problem and mention whether it is specific to having Site
-Isolation enabled.
-
-### Verifying
-
-You can visit chrome://process-internals to see whether a Site Isolation mode is
-enabled.
-
-If you would like to test that Site Isolation has been successfully turned on in
-practice, you can follow the steps below:
-
-1. Navigate to a website that has cross-site subframes. For example:
- * Navigate to
- <http://csreis.github.io/tests/cross-site-iframe.html>.
- * Click the "Go cross-site (complex page)" button.
- * The main page will now be on the http://csreis.github.io site
- and the subframe will be on the https://chromium.org site.
-2. Open Chrome's Task Manager: Chrome Menu -&gt; More tools -&gt; Task
- manager (Shift+Esc).
-3. Verify that the main page and the subframe are listed in separate
- rows associated with different processes. For example:
- * Tab: creis.github.io/tests/cross-site-iframe.html - Process ID = 1234
- * Subframe: https://chromium.org - Process ID = 5678
-
-If you see the subframe process in Chrome's Task Manager, then Site Isolation is
-correctly enabled. These steps work when using the "Isolating all sites"
-approach above (e.g., --site-per-process). They also work when using the
-"Isolating certain sites" approach above (e.g., --isolate-origins), as long as
-the list of origins provided includes either http://csreis.github.io or
-https://chromium.org.
-
-## Recommendations for Web Developers
-
-Site Isolation can help protect sensitive data on your website, but only if
-Chrome can distinguish it from other resources which any site is allowed to
-request (e.g., images, scripts, etc.). Chrome currently tries to identify URLs
-that contain HTML, XML, JSON, and PDF files, based on MIME type and other HTTP
-headers. See [Cross-Origin Read Blocking for Web
-Developers](/Home/chromium-security/corb-for-developers) for information on how
-to ensure that sensitive information on your website will be protected by Site
-Isolation.
-
-**We strongly recommend following the guidelines in [Post-Spectre Web
-Development](https://www.w3.org/TR/post-spectre-webdev/) to protect content**,
-which can help in browsers with and without Site Isolation support. The
-[Mitigating Side-Channel
-Attacks](https://blog.chromium.org/2021/03/mitigating-side-channel-attacks.html)
-blog post provides a good overview of these mechanisms and how they help. For
-example, using HTTP response headers such as
-[Cross-Origin-Resource-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy_(CORP))
-and
-[Cross-Origin-Opener-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy)
-can help control which process a resource can load in. Consider also inspecting
-the [Sec-Fetch-](https://w3c.github.io/webappsec-fetch-metadata/) request
-headers in the HTTP server to identify the source of the request before deciding
-how to handle a request.
-
-See also [Site Isolation for web
-developers](https://developers.google.com/web/updates/2018/07/site-isolation)
-for more discussion of how Site Isolation can protect web page content and in
-which cases it might affect page behavior.
diff --git a/chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-1.png.sha1 b/chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-1.png.sha1
deleted file mode 100644
index ecdfc881ca9..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bef7d27bc0f2815d8e2c617110d025311e54013a \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-2.png.sha1 b/chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-2.png.sha1
deleted file mode 100644
index 9021077c687..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/site-isolation/site-isolation-flag-2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-435a10332929ba379951a727f1a8e27661b6cb6f \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/site-isolation/site-per-process-flag.png.sha1 b/chromium/docs/website/site/Home/chromium-security/site-isolation/site-per-process-flag.png.sha1
deleted file mode 100644
index 94f00435edb..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/site-isolation/site-per-process-flag.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f7db07cfc74ede5b89d96e6350d732c699b51348 \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/ssca/index.md b/chromium/docs/website/site/Home/chromium-security/ssca/index.md
deleted file mode 100644
index 2f6003cc48e..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/ssca/index.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: ssca
-title: Mitigating Side-Channel Attacks
----
-
-At the beginning of 2018, researchers from Google's [Project
-Zero](https://googleprojectzero.blogspot.com/2014/07/announcing-project-zero.html)
-[disclosed](https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html)
-a series of new attack techniques against speculative execution optimizations
-used by modern CPUs. Security researchers will continue to find new variations
-of these and other side-channel attacks. Such techniques have implications for
-products and services that execute third-party code, including Chrome and other
-browsers with support for features like JavaScript and WebAssembly.
-
-The Chrome Security Team has written [a document covering the variety of defense
-techniques
-available](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/side-channel-threat-model.md).
-
-**Protecting users with Site Isolation**
-
-Chrome has been working on a feature called [Site
-Isolation](/Home/chromium-security/site-isolation) which provides extensive
-mitigation against exploitation of these types of vulnerabilities. With Site
-Isolation enabled, the amount of data exposed to side-channel attacks is reduced
-as Chrome renders content for each website in a separate process. This allows
-websites to be protected from each other by the security guarantees provided by
-the operating system on which Chrome is running.
-
-Site Isolation is enabled by default on Windows, Mac, Linux, and Chrome OS since
-Chrome 67, and can also can be controlled [via enterprise
-policies](https://support.google.com/chrome/a/answer/7581529) or [with
-chrome://flags](https://support.google.com/chrome/answer/7623121). More details
-can be found in our blog post [Mitigating Spectre with Site Isolation in
-Chrome](https://security.googleblog.com/2018/07/mitigating-spectre-with-site-isolation.html).
-
-Site Isolation is most effective when website developers follow modern security
-best practices:
-
- Where possible cookies should use
- [SameSite](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-02#section-5.3.7)
- and[ HTTPOnly](https://www.owasp.org/index.php/HttpOnly) attributes and
- pages should avoid reading from document.cookie.
-
- Make sure [MIME types are
- correct](/Home/chromium-security/site-isolation#TOC-Recommendations-for-Web-Developers)
- and specify an X-Content-Type-Options: nosniff response header for any URLs
- with user-specific or sensitive content, to take full advantage of
- [Cross-Origin Read
- Blocking](https://chromium.googlesource.com/chromium/src/+/HEAD/services/network/cross_origin_read_blocking_explainer.md)
- (CORB).
-
-Web developers should also see the [Meltdown/Spectre
-WebFundamentals](https://developers.google.com/web/updates/2018/02/meltdown-spectre)
-post.
-
-Spectre and Meltdown
-
-The attacks known as [Spectre and Meltdown](https://meltdownattack.com/),
-originally
-[disclosed](https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html)
-by Project Zero, have implications for Chrome. For information about other
-Google products and services, including Chrome OS please see the [Google Online
-Security
-Blog](https://security.googleblog.com/2018/01/todays-cpu-vulnerability-what-you-need.html).
-
-These attacks are mitigated by Site Isolation. Additionally, staring in Chrome
-64, Chrome's JavaScript engine [V8](https://www.v8project.org/) has included
-[further mitigations](https://github.com/v8/v8/wiki/Untrusted-code-mitigations)
-which provide protection on platforms where Site Isolation is not enabled.
-
-In line with
-[other](https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/)
-[browsers'](https://blogs.windows.com/msedgedev/2018/01/03/speculative-execution-mitigations-microsoft-edge-internet-explorer/)
-response to Spectre and Meltdown, Chrome disabled[
-SharedArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer)
-in Chrome 63 starting on Jan 5th 2018, and modified the behavior of other APIs
-such as performance.now to help reduce the efficacy of side-channel attacks.
-
-SharedArrayBuffer is now re-enabled in Chrome versions where Site Isolation is
-on by default.
-
-GLitch
-
-Researchers from Vrije Universiteit Amsterdam disclosed
-[details](https://www.vusec.net/wp-content/uploads/2018/05/glitch.pdf) of the
-GLitch attack. Part of the attack uses high-precision GPU timers available in
-WebGL to obtain information that is then used to perform a
-[Rowhammer-style](https://en.wikipedia.org/wiki/Row_hammer) bit-flip attack.
-
-Starting in Chrome 65, the
-[EXT_disjoint_timer_query](https://developer.mozilla.org/en-US/docs/Web/API/EXT_disjoint_timer_query)
-and EXT_disjoint_timer_query_webgl2 WebGL extensions have been disabled, and the
-behaviour of clientWaitSync and other \*Sync functions has been changed to
-reduce their effective precision as clocks.
-
-Although the GLitch attack is unrelated to Spectre and Meltdown,
-EXT_disjoint_timer_query and EXT_disjoint_timer_query_webgl2 could also be used
-to mount Spectre and Meltdown attacks. Accordingly, they will remain disabled in
-Chrome until Site Isolation is on by default, at which point they will be
-re-enabled with sufficiently reduced precision to mitigate GLitch attacks.
-
-Also see [more
-details](http://www.chromium.org/chromium-os/glitch-vulnerability-status) about
-GLitch and Chrome OS. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/strict-origin-isolation-trial/index.md b/chromium/docs/website/site/Home/chromium-security/strict-origin-isolation-trial/index.md
deleted file mode 100644
index 6006b060ffd..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/strict-origin-isolation-trial/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: strict-origin-isolation-trial
-title: Strict Origin Isolation Trial
----
-
-tl;dr This page describes a desktop Canary-only field trial to study the effect
-of isolating pages by origin (as opposed to the current [Site
-Isolation](/Home/chromium-security/site-isolation) approach using sites) on
-Chrome's performance. The trial will be one week in duration, starting around
-May 23rd, 2019. Some pages, such as those that rely on setting document.domain
-to perform cross-origin scripting, may encounter issues during this trial.
-
-Tracking Issue: <https://crbug.com/902399> “Evaluate feasibility of widespread
-origin isolation”
-
-## Overview
-
-The Strict Origin Isolation Trial is a short-duration (one week) field trial
-designed to gather preliminary data about the performance impact of changing the
-granularity of isolation from site (protocol and eTLD+1) to origin (protocol,
-host, and port).
-
-Strict Origin Isolation would improve security by ensuring different origins do
-not share a process with each other, but it poses a risk of increased resource
-usage. This study will allow us to study the expected impact on process count,
-memory usage, and other performance metrics if all origins were isolated,
-including potential performance benefits from increased parallelization.
-
-However, this trial also poses a functional risk to web pages that script
-same-site but cross-origin frames, which is possible if the pages modify their
-document.domain values via JavaScript. Such cross-origin scripting will be
-disrupted if the documents are in different processes, resulting in JavaScript
-errors visible in the DevTools console and potentially broken page features.
-
-<table>
-<tr>
-
-<td>Sample cross-origin scripting error:</td>
-
-<td>On a page a.example.com with a subframe b.example.com, where both execute document.domain = ‘example.com’, and b.example.com attempts something like top.document.body.innertext, the following error occurs:</td>
-
-</tr>
-<tr>
-
-<td>VM118:1 Uncaught DOMException: Blocked a frame with origin "https://b.example.com" from accessing a cross-origin frame.</td>
-
-<td> at &lt;anonymous&gt;:1:5</td>
-
-</tr>
-</table>
-
-Because of this risk, we will limit this trial to a single week on only the
-Canary channel, to avoid disruptions to users of the Dev, Beta, and Stable
-channels. 50% of Canary channel users will be opted in to the Strict Origin
-Isolation mode, while the remaining 50% will act as a control group using Site
-Isolation. The trial will only affect Chrome versions 76.0.3791.0 and higher.
-
-## Trial Contact Information
-
-During the trial, if you need further information, please reach out to:
-
- [wjmaclean@chromium.org](mailto:wjmaclean@chromium.org)
-
- [site-isolation-dev@chromium.org](mailto:site-isolation-dev@chromium.org)
-
-## Disabling the Trial
-
-If you encounter issues during the trial, you can opt-out by running Chrome with
---disable-features=StrictOriginIsolation, or changing the
-chrome://flags/#strict-origin-isolation flag from Default to Disabled.
-
-## Reporting Bugs
-
-If you experience incorrect behaviour during the trial, first check the
-variations list in chrome://version to see if the variation for the trial
-(0x4c825337 or 1283609399), is present. If so, and if the issue goes away when
-disabling the trial (see above), please file a bug by clicking on [this
-link](https://bugs.chromium.org/p/chromium/issues/entry?template=Defect+report+from+user&components=Internals%3ESandbox%3ESiteIsolation&blocking=902399&cc=wjmaclean@chromium.org&summary=Issue+during+Strict+Origin+Isolation+Trial:).
-
-## Recommended Developer Actions
-
-To avoid impact from the trial (and otherwise improve security), web developers
-can avoid modifying document.domain to script cross-origin frames.
-
-## Summary
-
-Determining the feasibility of increasing Chromium’s isolation granularity from
-sites to origins is important for improving security performance for our users.
-This trial is a first step to better understand the implications, before
-considering next steps. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/symantec-legacy-pki/index.md b/chromium/docs/website/site/Home/chromium-security/symantec-legacy-pki/index.md
deleted file mode 100644
index d05a2b5c643..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/symantec-legacy-pki/index.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: symantec-legacy-pki
-title: Symantec Legacy PKI
----
-
-Following our
-[announcement](https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html)
-in September 2017 to distrust the Legacy Symantec PKI, Chrome has executed on
-this plan in incremental phases across several releases. As described in detail
-in previous announcements, this distrust is the result of a consensus of
-cross-browser efforts to maintain a trusted and secure web. The phased distrust
-of this PKI has been implemented as follows:
-
-<table>
-<tr>
-
-<td>Release</td>
-
-<td>Description of Changes</td>
-
-</tr>
-<tr>
-
-<td>Chrome 65</td>
-
-<td>Remove trust in certificates issued after December 1, 2017, effectively stopping trust in new issuance from the Legacy Symantec PKI.</td>
-
-</tr>
-<tr>
-
-<td>Chrome 66</td>
-
-<td>Remove trust in certificates issued from the Legacy Symantec PKI before June 01, 2016, which were the most at-risk certificates based on the <a href="https://wiki.mozilla.org/CA:Symantec_Issues">numerous issues</a> identified by the Browser and Web PKI communities.</td>
-
-</tr>
-<tr>
-
-<td>Chrome 70</td>
-
-<td>Remove trust in all certificates issued from the Legacy Symantec PKI. Trust will be removed via <a href="https://textslashplain.com/2017/10/18/chrome-field-trials/">staged rollout</a>.</td>
-
-</tr>
-</table>
-
-We are approaching the final phase of distrust now that M70 is about to reach
-Stable. The following describes Chrome’s behavior with respect to Legacy
-Symantec TLS certificates across our various release channels.
-
-### Chrome 71 and beyond
-
-### Following the ramp-up to 100% of users in Chrome 70 Stable, Chrome 71 and beyond will be enabling the Legacy Symantec PKI distrust by default. This change is present in all release channels: Canary, Dev, Beta, and Stable. Users observing the distrust in Chrome 70 should experience the exact same behavior in Chrome 71 and up.
-
-### Chrome 70 Stable
-
-The distrust of the Legacy Symantec PKI is rolling out to users of Chrome
-throughout the release of Chrome 70. At the initial release of Chrome 70, this
-change will reach a small percentage of Chrome 70 users, and then slowly scaling
-up to 100% of Chrome 70 users over several weeks. This approach seeks to
-minimize any remaining breakage associated with this change while still
-providing affected sites the ability to diagnose and take corrective action.
-
-Site Operators receiving problem reports from users are strongly encouraged to
-take corrective action by replacing their website certificates as soon as
-possible. Instructions on how to determine whether your site is affected as well
-as what corrective action is needed can be found
-[here](https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html).
-
-### Chrome 70 Early Release Channels
-
-Chrome 70 Canary and Dev
-
-In M70 Canary and Dev, the Symantec PKI has been distrusted by default for all
-users. In these release channels, page loads over TLS connecting to sites using
-Legacy Symantec TLS certificates display a full page interstitial with the error
-code NET::ERR_CERT_SYMANTEC_LEGACY. Additionally, subresources served over such
-connections will fail to load, possibly degrading site functionality.
-
-Chrome 70 Beta
-
-Distrust in the Legacy Symantec PKI was rolled out over time, starting with the
-first Chrome 70 Beta. As a result of this Beta period, many sites still using
-Legacy Symantec TLS certificates replaced their certificates. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/chromium-security/vulnerability-rewards-program/index.md b/chromium/docs/website/site/Home/chromium-security/vulnerability-rewards-program/index.md
deleted file mode 100644
index c4a400045f8..00000000000
--- a/chromium/docs/website/site/Home/chromium-security/vulnerability-rewards-program/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/chromium-security
- - Chromium Security
-page_name: vulnerability-rewards-program
-title: Vulnerability Rewards Program
----
-
-The Chrome Reward Program is hosted at
-<https://www.google.com/about/appsecurity/chrome-rewards/index.html>.
-
-Go forth and report bugs! \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/debugging-on-webview/index.md b/chromium/docs/website/site/Home/debugging-on-webview/index.md
deleted file mode 100644
index 2f937346124..00000000000
--- a/chromium/docs/website/site/Home/debugging-on-webview/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: debugging-on-webview
-title: debugging-on-webview
----
-
diff --git a/chromium/docs/website/site/Home/domui-testing/index.md b/chromium/docs/website/site/Home/domui-testing/index.md
deleted file mode 100644
index 90a0ae931e8..00000000000
--- a/chromium/docs/website/site/Home/domui-testing/index.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: domui-testing
-title: DOMUI Testing
----
-
-This document contains a mini design doc for one way to approach testing of
-DOMUI pages.
-
-PLEASE See [WebUI browser_tests](/Home/domui-testing/webui-browser_tests) for
-details on current implementation.
-
-Objective
-
-Improve quality of DOMUI and find regressions early.
-
-* Allow unit testing of JS used for DOM UI.
-* Allow unit testing of HTML widgets used for DOM UI.
-* Allow testing end to end DOMUI
-
-Problem
-
-More and more of the UI in Chrome and ChromeOS is built using DOMUI. DOMUI is
-the name of Chrome UI built using HTML, JS and CSS with the ability to
-comunicate to with the browser process using chrome.send calls. Example of UIs
-implemented using DOMUI consists of the New Tab Page, History, Downloads,
-Extensions, about:versions and many others. ChromeOS is also in the process of
-using DOMUI for menus.
-
-Testing these UIs is [possible
-today](http://www.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/chrome/browser/dom_ui/new_tab_ui_uitest.cc&q=NewTabUITest%20NTPHasLoginName&exact_package=chromium&sa=N&cd=1&ct=rc&l=55)
-using
-[UITest](http://www.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/chrome/test/ui/ui_test.h&q=%22class%20UITest%22&exact_package=chromium&sa=N&cd=1&ct=rc&l=458)
-with DOM automation enabled. However, writing these test require generating
-strings of JavaScript code that is (using the automation provider)
-asynchronously evaluated in the browser tab and the result of that is
-asynchronously returned.
-
-There are 3 problems with this approach:
-
-1. Setting up the browser tab requires some C++ and a lot of waiting
- for the document to be ready.
-2. A string representing the JavaScript needs to be generated.
-3. The evaluation is async making test harder to write and more flaky.
-
-Requirements
-
-Make it easier to write tests by
-
-1. Allowing writing the test in JavaScript. After all, we need to use
- JavaScript to interact with the UI so it is only natural to do the
- test with it. Also dynamic languages are very good for writing unit
- tests.
-2. Provide a new test class that is specialized for writing tests for
- DOMUI. It would wrap up all of the boiler plate code and it
- should...
-3. Allow any DOM UI to be tested by simply providing the URL of the
- page and...
-4. Provide the URL or path to the test file and...
-5. allow other utility js files to be injected
-
-It might also be interesting to allow a blank page to be used and just inject
-all the js and css we care about. This could be useful for testing widgets in
-isolation.
-
-Solution
-
-Create a new test class similar to ExtensionBrowserTest but optimized for DOMUI.
-This class would have a RunDOMUITest (similar to RunExtensionTest) which would:
-
-1. Open a tab and navigate to a URL.
-2. Inject one or more javascript files.
-3. Run tests provided by the JavaScript files (ExtensionBrowerTest uses
- a global array of functions to run called test)
-
-This is better than what we have now for a few reasons:
-
-* We do not have to open a new browser for every single test. We can
- run multiple tests in the same web page.
-* We can write the test in JS, reducing the work needed to write
- tests.
-* We do not have to generate js code and evaluate it using the
- automation provider for every single test (these are async)
-
-Example Use-cases
-
-The following is based on the same model as the ExtensionApiTest.
-
-.cc file
-
-IN_PROC_BROWSER_TEST_F(DOMUITest, NewTabPage) {
-
-ASSERT_TRUE(RunDOMUITest("chrome://newtabpage", path_to_js_test_file);
-
-}
-
-.js file
-
-var assertEq = chrome.test.assertEq;
-
-var tests = \[
-
-function testLogin() {
-
-var loginSpan = $(‘login-username’);
-
-assertEq(loginSpan.textContent, ‘test@gmail.com’);
-
-}
-
-\];
-
-Tradeoffs
-
-This solution requires 2 (or more files) for every test. One for the C++ test
-function that bootstraps the javascript tests.
-
-Alternatives
-
-We could probably do incremental improvements over UITest...
-
-The most similar thing today is Extension API tests. These are test end to end
-of the extension APIs and these use extension pages and
-
-Another option is to make all DOMUI extensions and just use \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/domui-testing/webui-browser_tests/index.md b/chromium/docs/website/site/Home/domui-testing/webui-browser_tests/index.md
deleted file mode 100644
index d63c1a44dc8..00000000000
--- a/chromium/docs/website/site/Home/domui-testing/webui-browser_tests/index.md
+++ /dev/null
@@ -1,230 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/domui-testing
- - DOMUI Testing
-page_name: webui-browser_tests
-title: WebUI browser_tests
----
-
-***Note: This page is out of date. If you are using modern practices, you are
-using a BrowserProxy for your JS/C++ interactions. The
-[BrowserProxy](https://docs.google.com/document/d/1c20VYdwpUPyBRQeAS0CMr6ahwWnb0s26gByomOwqDjk/edit)
-document covers some testing practices for that case.***
-
-~~[TOC]~~
-
-~~### Problem~~
-
-~~See Also [domui-testing](/Home/domui-testing).~~
-
-~~WebUI contains Javascript, which runs in the renderer and a C++ handler, which
-runs in the UI thread of the browser process. While this is a necessary part of
-the design, testing across these boundaries of both language and process/thread
-is cumbersome at best.~~
-
-~~### Objective~~
-
-~~Make it possible to test the Javascript portion of WebUI in Javascript:~~
-
-* ~~Write WebUI tests in Javascript.~~
-* ~~Run in browser_tests so that the page is loaded in a real chrome
- browser.~~
-* ~~Allow WebUI handlers to be mocked in Javascript.~~
-
-~~### Solution~~
-
-~~The solution comes in the following parts:~~
-
-* ~~Support libraries: `chrome/test/data/webui/test_api.js`,
- `chrome/third_party/mock4js/mock4js.js`.~~
-* ~~gyp rules for js2webui generator feeding results into
- browser_tests.~~
-* ~~WebUIBrowserTest C++ class in
- `chrome/browser/ui/webui/web_ui_browsertest*` .~~
-* ~~Test source files next to the implementation or in
- chrome/test/data/webui/ - see
- chrome/browser/ui/webui/options/options_browsertest.js and
- chrome/test/data/webui/print_preview.js for reference.~~
-
-~~### How to write a test~~
-
-~~The best reference examples are chrome/test/data/webui/print_preview.js and
-chrome/browser/ui/webui/options/options_browsertest.js~~
-
-* ~~#### \[maybe\] create a new test file~~
-
- * ~~Create new file `chrome/test/data/webui/`*`mytest`*`.js`~~
- * ~~Add `chrome/test/data/webui/`*`mytest`*`.js` to the sources
- for browser_tests in `chrome/chrome_tests.gypi`~~
-
-* ~~#### Write a test fixture, defining the page to browse to:~~
-
-~~```none
-/**
- * TestFixture for OptionsPage WebUI testing.
- * @extends {testing.Test}
- * @constructor
- **/
-function OptionsWebUITest() {}
-OptionsWebUITest.prototype = {
-  __proto__: testing.Test.prototype,
-  /**
-   * Browse to the options page & call our preLoad().
-   **/
-  browsePreload: 'chrome://settings-frame',
-  // ...
-};
-```~~
-
-* ~~#### Mock the Javascript handler:~~
-
-~~```none
-OptionsWebUITest.prototype = {
-...
-  /**
-   * Register a mock handler to ensure expectations are met and options pages
-   * behave correctly.
-   **/
-  preLoad: function() {
-      this.makeAndRegisterMockHandler(
-            ['defaultZoomFactorAction',
-             'fetchPrefs',
-             'observePrefs',
-             'setBooleanPref',
-             'setIntegerPref',
-             'setDoublePref',
-             'setStringPref',
-             'setObjectPref',
-             'clearPref',
-             'coreOptionsUserMetricsAction',
-            ]);
-      // Register stubs for methods expected to be called before/during tests.
-      // Specific expectations can be made in the tests themselves.
-      this.mockHandler.stubs().fetchPrefs(ANYTHING);
-      this.mockHandler.stubs().observePrefs(ANYTHING);
-      this.mockHandler.stubs().coreOptionsUserMetricsAction(ANYTHING);
-  },
-...
-};
-```~~
-
-* ~~#### Mock stubs which call a function:~~
-
-~~```none
-    mockHandler.stubs().getDefaultPrinter().
-        will(callFunction(function() {
-          setDefaultPrinter('FooDevice');
-        }));
-```~~
-
-* ~~#### Define a test using mock expectations:~~
-
-~~```none
-TEST_F('OptionsWebUITest', 'testSetBooleanPrefTriggers', function() {
-  var showHomeButton = $('toolbarShowHomeButton');
-  var trueListValue = [
-    'browser.show_home_button',
-    true,
-    'Options_Homepage_HomeButton',
-  ];
-  // Note: this expectation is checked in testing::Test::TearDown.
-  this.mockHandler.expects(once()).setBooleanPref(trueListValue);
-  // Cause the handler to be called.
-  showHomeButton.click();
-  showHomeButton.blur();
-});
-```~~
-
-* ~~#### Conditionally run a test using generated c++ ifdefs:~~
-
-~~#### See [Handling a failing test](/developers/tree-sheriffs/handling-a-failing-test) for more details on style and how/when to disable a test.~~
-
-~~```none
-// Not meant to run on ChromeOS at this time.
-// Not finishing in windows. http://crbug.com/81723
-GEN('#if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) \\');
-GEN('    || defined(TOUCH_UI)');
-GEN('#define MAYBE_testRefreshStaysOnCurrentPage \\');
-GEN('    DISABLED_testRefreshStaysOnCurrentPage');
-GEN('#else');
-GEN('#define MAYBE_testRefreshStaysOnCurrentPage ' +
-    'testRefreshStaysOnCurrentPage');
-GEN('#endif');
-TEST_F('OptionsWebUITest', 'MAYBE_testRefreshStaysOnCurrentPage', function() {
-  var item = $('advancedPageNav');
-  item.onclick();
-  window.location.reload();
-  var pageInstance = AdvancedOptions.getInstance();
-  var topPage = OptionsPage.getTopmostVisiblePage();
-  var expectedTitle = pageInstance.title;
-  var actualTitle = document.title;
-  expectEquals("chrome://settings/advanced", document.location.href);
-  expectEquals(expectedTitle, actualTitle);
-  expectEquals(pageInstance, topPage);
-});
-```~~
-
-~~### Maintaining~~
-
-* ~~Adding more goodies to generator - edit
- `chrome/test/ui/webui/javascript2webui.js` and tests in
- `chrome/test/data/webui/`.~~
-* ~~Disabling a test - find tests in `chrome/test/data/webui/` & mark
- `FLAKY_`, `DISABLED_` or use the `MAYBE_` trick shown above to
- conditionally decide.~~
-
-~~### Considerations/FAQs~~
-
-* ~~*Isn't mocking in javascript not testing the WebUI message
- passing?* True, but that should be tested as a unit test and then
- trusted. Mocking in JS is easier, less flaky (always recursive - no
- synchronization challenges) and much better than not having any
- tests at all.~~
-* ~~*If you already have the page in question why don't you just run
- all tests without starting a new IN_PROCESS_BROWSER_TEST?* You are
- more than welcome to group tons of expect\* calls into a single
- test; all errors will be reported after the entire test runs. Having
- tests be separate IN_PROCESS_BROWSER_TEST calls ensures the state is
- exactly the same at the start of each tests with no pollution from
- previous tests.~~
-
-~~### Caveats~~
-
-* ~~\[[crbug.com/88104](http://crbug.com/88104)\] The generator relies
- on d8 to be built for the host. Currently the v8.gyp rules aren't
- correct for Arm as they have conditionals on the 'target_host' and
- don't heed the 'toolset". A gyp condition only runs the js2webui
- rule on non-arm platforms.~~
-* ~~Use of `MAYBE_` to ifdef will have a different run name from GTEST
- than from `test_api.js` - this is because `MAYBE_xyz` will be
- defined as either `xyz` or `DISABLED_xyz` in C++, but not changed in
- javascript.~~
-
-~~### Best practices~~
-
-* ~~As described in the [gtest
- docs](http://code.google.com/p/googletest/), prefer expect\* over
- assert\*, as it will not halt the test, but will register the
- failure and allow other checks in that particular testcase to run.~~
-* ~~Since the call is included in the failure error message, the
- optional `message` parameter should only include information not
- available:~~
-
-~~```none
-// NO
-TEST_F('FooTest', 'TestFoo', function() {
-  expectEquals(foo, bar, 'foo != bar');
-  expectEquals(foo, bar, foo + '!=' + bar);
-  var i = ...;
-  expectEquals(5, array[i], 'array[i] != 5');
-});
-// YES
-TEST_F('FooTest', 'TestFoo', function() {
-  expectEquals(foo, bar);
-  expectEquals(foo, bar);
-  var i = ...;
-  expectEquals(5, array[i], 'i=' + i);
-});
-```~~ \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/domui-testing/webui-browser_tests/webui-accessibility-audit/index.md b/chromium/docs/website/site/Home/domui-testing/webui-browser_tests/webui-accessibility-audit/index.md
deleted file mode 100644
index 8b3d656578a..00000000000
--- a/chromium/docs/website/site/Home/domui-testing/webui-browser_tests/webui-accessibility-audit/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/domui-testing
- - DOMUI Testing
-- - /Home/domui-testing/webui-browser_tests
- - WebUI browser_tests
-page_name: webui-accessibility-audit
-title: WebUI accessibility audit
----
-
diff --git a/chromium/docs/website/site/Home/flying_browser.png.sha1 b/chromium/docs/website/site/Home/flying_browser.png.sha1
deleted file mode 100644
index e325f1e9394..00000000000
--- a/chromium/docs/website/site/Home/flying_browser.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-000e0bd968a843e5f3c3e46efbf42fdb2fbff46a \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/google-ssl.xml b/chromium/docs/website/site/Home/google-ssl.xml
deleted file mode 100644
index 80e356d8771..00000000000
--- a/chromium/docs/website/site/Home/google-ssl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
-<ShortName>Google SSL</ShortName>
-<Description>Search Google over SSL</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Url type="text/html" method="get" template="https://www.google.com/search?{google:RLZ}{google:acceptedSuggestion}{google:originalQueryForSuggestion}sourceid=chrome&amp;ie={inputEncoding}&amp;q={searchTerms}" />
-<Url type="application/x-suggestions+json" method="get" template="https://clients1.google.com/complete/search?client=chrome&amp;hl={language}&amp;q={searchTerms}" />
-<Image height="16" width="16" type="image/x-icon">https://www.google.com/favicon.ico</Image>
-</OpenSearchDescription>
diff --git a/chromium/docs/website/site/Home/ice-cream-sandwich-support-deprecation-faq/index.md b/chromium/docs/website/site/Home/ice-cream-sandwich-support-deprecation-faq/index.md
deleted file mode 100644
index 5ce1f0bd39b..00000000000
--- a/chromium/docs/website/site/Home/ice-cream-sandwich-support-deprecation-faq/index.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: ice-cream-sandwich-support-deprecation-faq
-title: Ice Cream Sandwich Support Deprecation
----
-
-## What is happening?
-
-Chrome 42 will be the last supported release of Chrome for Android on all Ice
-Cream Sandwich (Android 4.0) devices. Ice Cream Sandwich (ICS) users will
-receive no further updates to Chrome on Android.
-
-## Why the change?
-
-While the number of Ice Cream Sandwich devices is shrinking, supporting them in
-terms of engineering effort and technical complexity is increasingly difficult
-over time. Each new feature or web capability that’s added to Chrome must be
-built and tested for ICS. Often workarounds and special cases have to be added
-specifically for ICS, and that adds code complexity, slows performance, and
-increases development time.
-
-The number of ICS devices is now sufficiently small that we can better serve our
-users by phasing out support for earlier devices and focusing on making Chrome
-better for the vast majority of users on more modern devices.
-
-## What does this mean for users?
-
-Users on Ice Cream Sandwich can continue to use Chrome, but will not receive
-updates beyond Chrome 42.
-
-## How many devices will be affected?
-
-Ice Cream Sandwich makes up a small percentage of devices with a recent version
-of Chrome for Android. Over the past year we’ve seen a thirty percent decrease
-in the overall number of users using Chrome on Ice Cream Sandwich.
-
-## When is the last Chrome release for Ice Cream Sandwich devices scheduled?
-
-Chrome 42 will be the last update on Ice Cream Sandwich, and is expected to be
-released in mid-April 2015. Chrome 43 will no longer support ICS and is expected
-to be released toward the end of May 2015.
-
-## Will there be any further Chrome updates or security patches for ICS devices?
-
-We will continue to issue patches while Chrome 42 is the most recent Chrome
-version. Once Chrome 43 is released, we don’t plan to issue further updates for
-ICS devices.
-
-## What will happen to the code supporting ICS?
-
-We will be removing the code for ICS from trunk after the branch point for
-Chrome 43.
-
-## Are there other Android versions affected?
-
-No. This only affects Ice Cream Sandwich.
-
-## How can I handle developing for two versions of Chrome? What should I tell my users?
-
-We encourage all developers irrespective of browser platform to consider
-progressive enhancement when it comes to building apps and sites. By using
-progressive enhancement you will be able to offer a good experience for as many
-users as possible and in the case of the platform’s capabilities you will be
-able to detect which features you will be able to support and which you might
-need to polyfill.
-
-## Where can I ask more questions or leave feedback?
-
-For end users, Chrome has an extensive feedback reporting tool (accessible from
-the Chrome menu).
-
-For developers, the
-[chromium-discuss](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-discuss)
-mailing list is a good place to start if you have specific issues with Ice Cream
-Sandwich (note it is not a general support channel), or reach out to
-@[ChromiumDev](https://twitter.com/ChromiumDev) on Twitter. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/index.md b/chromium/docs/website/site/Home/index.md
deleted file mode 100644
index 5e70b9a9cec..00000000000
--- a/chromium/docs/website/site/Home/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs: []
-page_name: Home
-title: Chromium
----
-
-<div class="two-column-container">
-<div class="column">
-
-Chromium is an open-source browser project that aims to build a safer, faster,
-and more stable way for all Internet users to experience the web. This site
-contains design documents, architecture overviews, testing information, and more
-to help you learn to build and work with the Chromium source code.
-
-#### Learn how to
-
-* [Browse](https://chromium.googlesource.com/chromium/src.git) or
- [search](https://cs.chromium.org/) the sources online
-* [Get the Code: Checkout, Build, &
- Run](/developers/how-tos/get-the-code)
-* [Contributing code](/developers/contributing-code)
-* Debug on [Windows](/developers/how-tos/debugging-on-windows), [OS
- X](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/mac/debugging.md),
- [Linux](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/debugging.md)
- or
- [Android](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_debugging_instructions.md).
-* [Report a bug](/for-testers/bug-reporting-guidelines)
-
-#### Other important links
-
-* [Documentation in the source
- tree](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/)
-* [Discussion Groups](/developers/discussion-groups) (such as
- [chromium-discuss](http://groups.google.com/a/chromium.org/group/chromium-discuss))
-* [Chromium Blog](http://blog.chromium.org)
-* [Chromium Issue
- Tracker](https://bugs.chromium.org/p/chromium/issues/list)
-* [Chromium Release Calendar](/developers/calendar)
-* [For Third Party Developers](/Home/third-party-developers)
-* [For Webmasters: Common pitfalls making a site work in multiple
- browsers.](/Home/chromecompatfaq)
-* [For Web Developers: Google Chrome Developer Tools](/devtools)
-
-</div>
-<div class="column">
-
-![picture of a web browser window with wings, flying](/Home/flying_browser.png)
-
-#### Sections
-
-* [Getting Involved](/getting-involved): learn how you can help the
- Chromium project
-* [For Developers](/developers): design docs, how-tos, and other
- useful information for developers
-* [For Testers](/for-testers): bug reporting guidelines, test plans,
- and other quality-related documentation
-* [User Experience](/user-experience): the design philosophy behind
- many of Chromium's features
-* [Issue Tracking](/issue-tracking): process documentation related to
- issue tracking and management.
-* [Contact](/contact): report a bug or a security issue, or get in
- touch with individual members of the team
-* [Security](/Home/chromium-security): learn about Chromium security,
- and how to contact us or get involved
-* [Privacy](/Home/chromium-privacy): information about Chromium
- privacy, how to get more information, and how to contact us
-
-#### Life Of A Chromium Developer
-
-Interested but don't know where to start? Need a quick crash course on Chromium
-development? Take a look through the [Life Of A Chromium
-Developer](https://docs.google.com/presentation/d/1abnqM9j6zFodPHA38JG1061rG2iGj_GABxEDgZsdbJg)
-slide deck:
-
-</div>
-</div>
diff --git a/chromium/docs/website/site/Home/loading/clovis/index.md b/chromium/docs/website/site/Home/loading/clovis/index.md
deleted file mode 100644
index eae75d160da..00000000000
--- a/chromium/docs/website/site/Home/loading/clovis/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/loading
- - Loading
-page_name: clovis
-title: clovis
----
-
-[Guiding
-Design](https://docs.google.com/document/d/1rvrbD570aqiFLu3KihUSnyVgRrCD7pGnznC6pj3jjMM/edit#)
-
-Detailed Design Documents
-
-* [Page similarity
- metric](https://docs.google.com/document/d/17XZ7iMT5JGr8LhuUhOUNoqGyTskRu4MALB-62NTpU9M/edit)
-* [Metrics](https://docs.google.com/document/d/1QFltLe07S_mY3rTX8wp1bRxuHc1iZmOeq79g1-6jDR0/edit) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/loading/index.md b/chromium/docs/website/site/Home/loading/index.md
deleted file mode 100644
index 1bdb8ef0fbc..00000000000
--- a/chromium/docs/website/site/Home/loading/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: loading
-title: Loading
----
-
-## Information about Loading efforts in Chromium
-
-Last updated May 2021
-
-## **North Star**
-
-Loading on the web is user centric, sustainable, fast and delightful.
-
-* **user centric:** the experience is described through key user
- moments or needs, and assessed against a perceptual model of
- performance.
-* **sustainable:** a sensible contract between Web developers, UA and
- users about how a web application loads, with usage of memory /
- power / data that is proportional to value.
-* **fast and delightful:**
- * Meet the [Core Web Vitals thresholds](https://web.dev/defining-core-web-vitals-thresholds/)
-
-These are the goals we should strive for.
-
-Some aspects might be extremely challenging but making progress toward these is
-what should drive our work.
-
-## How do I find out what's happening?
-
-* Communications: loading-dev@chromium.org is our public discussion
- group for all things related to Loading in Chrome.
-* crbug: [blink](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink%3ELoader%2CBlink%3ENetwork%2CBlink%3EServiceWorker%2CBlink%3EWorker&sort=pri+-component&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
-
-## I have a reproducible bad Loading user experience, what do I do?
-
-* ## As a user:
- * File a [Speed bug](https://bugs.chromium.org/p/chromium/issues/entry?template=Speed%20Bug)
- * Include the "Loading" keyword in the subject if the issue fits within the scope of the North Star.
- * If you are not sure, don't include the "Loading" keyword, triage will make sure it shows up in the right bucket.
-* ## As a chromium developer
- * Same steps but try to [record a trace](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs)
- (select every trace categories on the left side).
-
-## I'm a dev and interested in helping on Loading. How do I get started?
-
-Reach out via loading-dev@ and tell us more about you:
-
-* share your particular interest and expertise
-* tell us how familiar you are with chromium development
-* point to CLs if not a lot of developers are familiar with your work
-
-## Contacts
-
-Your friendly PM: kenjibaheux
-
-Blink TLs: kouhei, yhirano (blink&gt;network)
-
-"Here here!": reach out to kenjibaheux@ if you want your name to be added here.
-
-## Other resources
-
-* [OOR-CORS: Ouf of Renderer CORS](/Home/loading/oor-cors)
-* <https://chromium.googlesource.com/chromium/src/+/main/net/docs/life-of-a-url-request.md>
-* <https://docs.google.com/presentation/d/1ku7pkh09h6sQ6epudsVvHehRzvanAU7ckzfiVvMoljo/edit?usp=sharing>
-* <https://chromium.googlesource.com/chromium/src/+/main/third_party/blink/renderer/platform/loader/README.md>
-* <https://docs.google.com/presentation/d/1r9KHuYbNlgqQ6UABAMiWz0ONTpSTnMaDJ8UeYZGWjls/edit> \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/loading/oor-cors/index.md b/chromium/docs/website/site/Home/loading/oor-cors/index.md
deleted file mode 100644
index 90dd55b2165..00000000000
--- a/chromium/docs/website/site/Home/loading/oor-cors/index.md
+++ /dev/null
@@ -1,242 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-- - /Home/loading
- - Loading
-page_name: oor-cors
-title: 'OOR-CORS: Out of Renderer CORS'
----
-
-**CORS: Cross-Origin Resource Sharing**
-
-Cross-Origin Resource Sharing is a standardized mechanism to negotiate access
-permissions among the web browser and servers for a visiting site. See, [MDN's
-document](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) for details.
-
-Chrome 79 will replace the CORS implementation to be more secure. As a result,
-there are behavior changes for several reasons, and it will cause compatibility
-issues. New CORS implementation, aka OOR-CORS, will be rolled out incrementally,
-starting on January 6th, 2020, over the following several weeks. For WebView, it
-will be enabled later so that WebView based applications can migrate safely. It
-will probably happen at Chrome 83-84.
-
-For enterprise users, we are providing Enterprise Policies to mitigate the
-compatibility issues, or manage to use the legacy CORS implementation until
-Chrome 82. See [Chrome Enterprise release notes - Chrome
-79](https://support.google.com/chrome/a/answer/7679408) for details. These are
-available on the Chrome Admin Console now.
-
-**Extra Resources for WebView developers**
-
-We have a document for WebView specific details to clarify CORS behaviors on
-Android/WebView specific schemes, APIs and so on. Please check the document,
-[CORS and WebView
-API](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/cors-and-webview-api.md).
-
-**Behavior Changes by OOR-CORS**
-
-**Resource Timing API does not count CORS preflight request as a separate
-entry**
-
-With the legacy CORS, [Resource Timing
-API](https://w3c.github.io/resource-timing/) counts CORS preflight request as a
-separate entry. But this is not aligned with the spec requirement. Once the
-OOR-CORS is rolled out, it does not. See [the relevant crbug
-entry](https://bugs.chromium.org/p/chromium/issues/detail?id=982924) for
-detailed discussion.
-
-**Cross-origin redirects for &lt;img crossorigin=anonymous&gt; do not send
-Cookies any more**
-
-With the legacy CORS, Chrome had a bug to send cookies even after cross-origin
-redirects, though this violated the spec. Once the OOR-CORS is rolled out, it
-does not.
-
-**XHR failures for intent://... will dispatch readystatechange and error events
-(Android only)**
-
-With the legacy CORS, Android Chrome had a bug to fail silently without
-notifying any error on fetching intent:// over XHR. Once the OOR-CORS is rolled
-out, it will dispatch **readystatechange** and **error** events correctly. For
-other APIS, image loading, Fetch API, and so on, it correctly reports errors
-until today, and from now on.
-
-**Extensions' webRequest API (Desktop only)**
-
-There are announced API changes. See [the API document,
-chrome.webRequest](https://developer.chrome.com/extensions/webRequest), for
-details. There are three major changes explained as "Starting from Chrome 79,"
-in the document.
-
-**Internally modified requests will also follow the CORS protocol**
-
-With the legacy CORS, internally modified requests didn't follow the CORS
-protocol correctly. For instance, Chrome sometime injects extra headers in
-enterprise uses for access controls. In such case, Chrome won't send CORS
-preflight even for the case that the modified requests does not meet the "simple
-request" conditions. But once the OOR-CORS is fully enabled, Chrome will follow
-the CORS protocol strictly even if the request is modified by intermediate code
-as it can as possible. This also affects Chrome Extensions, and part of the
-announced API changes are related to this enforcement. This behavior change may
-affect Chrome Extensions that intercepts and modifies requests to Google
-services or responses from Google services.
-
-**Behavior Changes by Other Blink Updates**
-
-**BUG: Redirects from allowlisted content scripts blocked by CORB+CORS in Chrome
-79**
-
-See [crbug.com/](http://crbug.com/)[1034408](http://crbug.com/1034408). There is
-a temporary breakage in the original CORS implementation at Chrome 79. This will
-be fixed by enabling OOR-CORS or updating to Chrome 80.
-
-**CSS -webkit-mask starts using CORS-enabled requests from Chrome 79**
-
-See [crbug.com/](http://crbug.com/)[786507](http://crbug.com/786507) and
-[crbug.com/](http://crbug.com/)[1034942](http://crbug.com/1034942). This will
-result in observing CORS related errors if the same URL is also requested by
-other no-cors requests and the server does not care for HTTP caches. [CORS
-protocol and HTTP
-caches](https://fetch.spec.whatwg.org/#cors-protocol-and-http-caches) section in
-the fetch spec will help you to understand the problem.
-
-**Origin header from Extensions' background page is changed from Chrome 80 (may
-be postponed for breaking many?)**
-
-See [crbug.com/](http://crbug.com/)[1036458](http://crbug.com/1036458). When
-Chrome sends a request from Extensions' background page and Origin header is
-needed, chrome-extensions://&lt;extensions id&gt; has been set. But from Chrome
-80, the origin of the target URL will be used.
-
-**Troubleshooting**
-
-If a site stops loading sub-resources correctly, or stops working correctly,
-please [open the
-DevTools](https://developers.google.com/web/tools/chrome-devtools/open) and [see
-the console](https://developers.google.com/web/tools/chrome-devtools/console) to
-check if there are CORS related errors. You may see the following keywords:
-
-* CORS
-* Cross-origin requests
-* Access-Control-Allow-...
-* preflight
-
-You can check all keywords in [the relevant source
-code](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc)
-if you are interested in.
-
-If there are, something OOR-CORS incompatible issues may happen.
-
-The first check point for desktop users is Chrome Extensions. As explained in
-the behavior changes, there are some API changes, and some Chrome Extensions may
-not follow up the change. You can try a new Chrome profile to see if the same
-problem happens without any Chrome Extensions. If it solves the problem, one of
-your installed Chrome Extensions may cause the issue. You can disable each
-Chrome Extensions at chrome://extensions/ step by step to find the problematic
-one. Once you find the one, please report the issue to the Chrome Extensions
-developers. For enterprise users, there is a workaround,
-[CorsMitigationList](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CorsMitigationList).
-If you set this policy (empty list is also fine), all Chrome Extensions run in a
-compatible mode. This will cause small negative performance impact, but it will
-work.
-
-If you are a bit familiar with CORS, you can do further debugging to have a
-crafted workaround or to find a solution. If you see CORS preflight failures in
-the logs, and you are sure that the target server does not handle CORS preflight
-correctly, you can craft the
-[CorsMitigationList](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CorsMitigationList)
-not to send a preflight request for such condition. You will put your seeing
-non-standard HTTP header name into the
-[CorsMitigationList](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CorsMitigationList).
-For instance, if the CORS preflight has the following line in the request
-header:
-
-> Access-Control-Request-Headers: my-auth,my-account
-
-adding "my-auth" and "my-account" into the
-[CorsMitigationList](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CorsMitigationList)
-will stop sending the CORS preflight for the case. Registered header names will
-be exempted from the CORS preflight condition checks as [CORS-safelisted request
-headers](https://fetch.spec.whatwg.org/#cors-safelisted-request-header). Note
-that this may allow malicious attackers to exploit through potential server side
-vulnerability on handling these headers.
-
-CORS releated detailed network transaction can not be observed via DevTools'
-[Network](https://developers.google.com/web/tools/chrome-devtools/network) tab.
-You need to take a [NetLog dump](/for-testers/providing-network-details) for
-further investigation. You can use
-==[netlogchk.html](/Home/loading/oor-cors/netlogchk.html)== to analyze the
-obtained NetLog dump to see if there is CORS related error. [NetLog
-Viewer](https://netlog-viewer.appspot.com/#import) is general purpose online
-tools to check details on the dump.
-
-The last resort for enterprise users is
-[CorsLegacyModeEnabled](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CorsLegacyModeEnabled).
-It will allow you to use the legacy CORS instead of OOR-CORS. For other users,
-setting chrome://flags/#out-of-blink-cors to Disabled will have the same effect.
-But this option will be removed at Chrome m83. So please be careful about that.
-You should contact us through [this bug report
-link](https://bugs.chromium.org/p/chromium/issues/entry?components=Blink%3ESecurityFeature%3ECORS,Blink%3ELoader&cc=toyoshim@chromium.org).
-Concrete repro steps or [NetLog dump](/for-testers/providing-network-details)
-will help us and make investigation smooth.
-
-**WebView Specific Information**
-
-OOR-CORS will be launched for WebView in M83 incrementally. We will start
-enabling the feature step by step from Jun.1st, 2020.
-
-**Mitiation:** Enterprise policies are not available on WebView, but the
-OOR-CORS can be controlled via [WebView
-DevTools](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/developer-ui.md)
-per device basis. The document says the tool is supported in WebView 84+. But,
-actually, it experimentally supports OOR-CORS feature control in WebView 83. The
-device needs to [enable USB
-debugging](https://developer.android.com/studio/debug/dev-options) to inactivate
-the OOR-CORS. But once the setting is changed, users can disable the debugging
-mode.
-
-**NetLog dump:** WebView does not allow end users to take NetLog dump, and
-“userdebug” or “eng” builds of Android system are needed to take. See [Net
-debugging in
-WebView](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-debugging.md)
-for details.
-
-**DevTools:** End users can not use DevTools for remote debugging as they do for
-Chrome. This is because the debugging functionality is disabled by default on
-recent Android systems. WebView application developers can modify their
-application code to allow remote debugging to debug CORS issues. See the
-article, [Remote Debugging
-Webviews](https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews).
-
-**Bug Reports:** Please file a report from [this
-link](https://bugs.chromium.org/p/chromium/issues/entry?components=Blink%3ESecurityFeature%3ECORS,Blink%3ELoader,Mobile%3EWebView&cc=toyoshim@chromium.org)
-(Components: Blink&gt;SecurityFeatyre&gt;CORS,
-Blink&gt;Loader,Mobile&gt;WebView; CC: toyoshim@chromium.org). Early reports
-without strong confidence are welcomed as the team wants to get early feedback
-so that the team can provide a fixed binary ASAP.
-
-Information for Chrome Developers
-
-**FYI Builders**
-
-Now the OOR-CORS is enabled by default on the main waterfall, and OOR-CORS
-enabled fyi bots were turned down. Insteads Blink-CORS bots are running to
-monitor legacy Blink implementation.
-
--
-[linux-oor-cors-rel](https://ci.chromium.org/p/chromium/builders/ci/linux-oor-cors-rel)
-(turned down)
-
-- [Android WebView P OOR-CORS FYI
-(rel)](https://ci.chromium.org/p/chromium/builders/ci/Android%20WebView%20P%20OOR-CORS%20FYI%20%28rel%29)
-(turned down)
-
--
-[linux-blink-cors-rel](https://ci.chromium.org/p/chromium/builders/ci/linux-blink-cors-rel)
-
-- [Android WebView P Blink-CORS FYI
-(rel)](https://ci.chromium.org/p/chromium/builders/ci/Android%20WebView%20P%20Blink-CORS%20FYI%20%28rel%29)
-- wpt may fail and should be be compared with [Android WebView P FYI
-(rel)](https://ci.chromium.org/p/chromium/builders/ci/Android%20WebView%20P%20FYI%20%28rel%29)
-tracked by [crbug.com/1011098](http://crbug.com/1011098) \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/loading/oor-cors/netlogchk.html b/chromium/docs/website/site/Home/loading/oor-cors/netlogchk.html
deleted file mode 100644
index d2509ab80b5..00000000000
--- a/chromium/docs/website/site/Home/loading/oor-cors/netlogchk.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<html>
-<body>
-<input type="file" id="file">
-<hr>
-<div id="result"></div>
-<hr>
-<div id="log"></div>
-<script>
-let passedRequests = 0;
-let failedRequests = 0;
-let passedUrls = {};
-let failedUrls = {};
-
-function logStart() {
- passedRequests = 0;
- failedRequests = 0;
- passedUrls = {};
- failedUrls = {};
-
- removeChildren = element => {
- while (element.firstChild)
- element.removeChild(element.firstChild);
- };
- removeChildren(document.getElementById('result'));
- removeChildren(document.getElementById('log'));
-}
-
-function logEvent(result) {
- const pre = document.createElement('pre');
- if (result.allowed) {
- ++passedRequests;
- passedUrls[result.url] = "";
- pre.innerText = '[PASS] "' + result.method + '" for ' + result.url;
- pre.setAttribute('style', 'color:blue');
- } else {
- ++failedRequests;
- failedUrls[result.url] = result.reason;
- pre.innerText = '[FAIL] "' + result.method + '" for ' + result.url + '; ' +
- result.reason;
- pre.setAttribute('style', 'color:red');
- }
- document.getElementById('log').appendChild(pre);
-}
-
-function logEnd() {
- const result = document.createElement('div');
- const pass = document.createElement('div');
- pass.innerText = passedRequests + ' CORS requests passed on ' +
- Object.keys(passedUrls).length + ' URLs.';
- result.appendChild(pass);
- const fail = document.createElement('div');
- fail.innerText = failedRequests + ' CORS requests failed on ' +
- Object.keys(failedUrls).length + ' URLs.';
- result.appendChild(fail);
- document.getElementById('result').appendChild(result);
-}
-
-class NetLog {
- constructor() {
- }
-
- import(data) {
- this._phaseNone = data.constants.logEventPhase.PHASE_NONE;
- this._phaseBegin = data.constants.logEventPhase.PHASE_BEGIN;
-
- const eventTypes = data.constants.logEventTypes;
- this._aliveEvent = eventTypes.REQUEST_ALIVE;
- this._h1RequestEvent = eventTypes.HTTP_TRANSACTION_SEND_REQUEST_HEADERS;
- this._h2RequestEvent = eventTypes.HTTP_TRANSACTION_HTTP2_SEND_REQUEST_HEADERS;
- this._quicRequestEvent = eventTypes.HTTP_TRANSACTION_QUIC_SEND_REQUEST_HEADERS;
- this._responseEvent = eventTypes.HTTP_TRANSACTION_READ_RESPONSE_HEADERS;
-
- this.events = {};
- const urlRequestType = data.constants.logSourceType.URL_REQUEST;
- for (let event of data.events) {
- if (event.source.type != urlRequestType)
- continue;
- const id = event.source.id;
- if (this.events[id] === undefined)
- this.events[id] = [];
- if (this.events[id][event.phase] === undefined)
- this.events[id][event.phase] = {};
- this.events[id][event.phase][event.type] = event;
- }
- }
-
- getUrl(event) {
- if (!event || !event[this._phaseBegin])
- return undefined;
- const aliveEvent = event[this._phaseBegin][this._aliveEvent];
- if (!aliveEvent || !aliveEvent.params)
- return undefined;
- return aliveEvent.params.url;
- }
-
- getNormalizedRequest(event) {
- if (!event || !event[this._phaseNone])
- return undefined;
- const request = {};
- const phaseNoneEvents = event[this._phaseNone];
- if (phaseNoneEvents[this._h1RequestEvent]) {
- const line = phaseNoneEvents[this._h1RequestEvent].params.line;
- request['method'] = line.split(' ')[0];
- const headers = phaseNoneEvents[this._h1RequestEvent].params.headers;
- for (let header of headers) {
- const pair = header.split(': ');
- request[pair[0].toLowerCase()] = pair[1];
- }
- } else if (phaseNoneEvents[this._h2RequestEvent] ||
- phaseNoneEvents[this._quicRequestEvent]) {
- const event = phaseNoneEvents[this._h2RequestEvent] ||
- phaseNoneEvents[this._quicRequestEvent];
- const headers = event.params.headers;
- for (let header of headers) {
- if (header[0] == ':')
- header = header.substr(1);
- const pair = header.split(': ');
- request[pair[0].toLowerCase()] = pair[1];
- }
- } else {
- return undefined;
- }
- return request;
- }
-
- getNormalizedResponse(event) {
- if (!event || !event[this._phaseNone])
- return undefined;
- const responseEvent = event[this._phaseNone][this._responseEvent];
- if (!responseEvent || !responseEvent.params)
- return undefined;
- const response = {};
- for (let header of responseEvent.params.headers) {
- const pair = header.split(': ');
- response[pair[0].toLowerCase()] = pair[1];
- }
- return response;
- }
-}
-
-function check(data) {
- logStart();
-
- const netlog = new NetLog();
- netlog.import(data);
- for (let id in netlog.events) {
- const ev = netlog.events[id];
- const request = netlog.getNormalizedRequest(ev);
- if (!request || !request.origin)
- continue;
- const url = netlog.getUrl(ev);
- if (url.startsWith(request.origin))
- continue;
- const response = netlog.getNormalizedResponse(ev);
- if (!response) {
- console.log('no response for ', request);
- continue;
- }
-
- const normalizeHeaderList = item => {
- const upperItem = item.toUpperCase();
- if (upperItem[0] == ' ')
- return upperItem.substr(1);
- return upperItem;
- };
-
- const result = {
- url: url,
- method: request.method,
- request: request,
- response: netlog.getNormalizedResponse(ev),
- allowed: false,
- reason: "",
- debug: ev,
- };
- const allow_origin = result.response['access-control-allow-origin'];
- if (!allow_origin) {
- result.reason = 'No \'Access-Control-Allow-Origin\' header is present.';
- } else if (allow_origin != '*' && allow_origin != request.origin) {
- result.reason =
- 'The \'Access-Control-Allow-Origin\' header has a value \'' +
- allow_origin + '\' that is not equal to the supplied origin.';
- } else if (request.method != 'OPTIONS') {
- result.allowed = true;
- } else {
- const method = response['access-control-allow-methods'];
- const methods = method ? method.split(',').map(normalizeHeaderList) : [];
- if (!methods.includes(request['access-control-request-method'])) {
- result.reason =
- 'Method ' + request['access-control-request-method'] + ' is not ' +
- 'allowed by Access-Control-Allow-Methods in preflight response.';
- } else {
- const requestedHeaders = request['access-control-request-headers'];
- const requestedHeaderList = requestedHeaders ?
- requestedHeaders.split(',').map(normalizeHeaderList) : [];
- const header = response['access-control-allow-headers'];
- const headers = header ? header.split(',').map(normalizeHeaderList) : [];
- for (let requestedHeader of requestedHeaderList) {
- if (headers.includes(requestedHeader))
- continue;
- result.reason =
- 'Request header field ' + requestedHeader + ' is not allowed by ' +
- 'Access-Control-Allow-Headers in preflight response.';
- }
- }
- if (!result.reason)
- result.allowed = true;
- }
- if (!result.allowed)
- console.log(result);
- logEvent(result);
- }
- logEnd();
-}
-
-document.getElementById('file').addEventListener('change', e => {
- const reader = new FileReader();
- reader.onload = e => {
- check(JSON.parse(e.target.result));
- };
- reader.readAsText(e.target.files[0]);
-}, false);
-
-async function main() {
- const response = await fetch('chrome-net-export-log');
- check(await response.json());
-}
-//main();
-</script>
-</body>
-</html>
diff --git a/chromium/docs/website/site/Home/memory/index.md b/chromium/docs/website/site/Home/memory/index.md
deleted file mode 100644
index e4fc7d80c02..00000000000
--- a/chromium/docs/website/site/Home/memory/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: memory
-title: OBSOLETE. Memory! Landing page for information on memory efforts and tools
- in Chromium
----
-
-Content moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory> \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/third-party-developers/index.md b/chromium/docs/website/site/Home/third-party-developers/index.md
deleted file mode 100644
index 4ab93e92105..00000000000
--- a/chromium/docs/website/site/Home/third-party-developers/index.md
+++ /dev/null
@@ -1,191 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: third-party-developers
-title: Third Party Developers
----
-
-[TOC]
-
-## Important Notice
-
-The
-[ForceNetworkInProcess](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ForceNetworkInProcess)
-will be removed soon. The official announcement will start from [Chrome
-Enterprise release notes](https://support.google.com/chrome/a/answer/7679408)
-for Chrome 80. The original plan was to remove it at Chrome 82, but will be
-postponed to do it at Chrome 84.
-
-## Policy
-
-At Google, we believe that if we focus on the user, all else will follow. In our
-[Software Principles](https://www.google.com/about/software-principles.html), we
-provided general recommendations for software that delivers a great user
-experience. This policy expands upon those general recommendations by defining
-third party software, and clarifying how it will be treated by Chrome. Software
-that meets the definition is considered as potentially harmful to the Chrome
-user experience, and we will take steps to prevent such software from injecting
-itself into Chrome’s process space. It steps beyond this simple definition to
-lay guidelines for our interactions with third party software developers, and
-our commitment to helping them as well as the ecosystem in general.
-
-This policy was initially announced in November of 2017 via this [blog
-post](https://blog.chromium.org/2017/11/reducing-chrome-crashes-caused-by-third.html).
-
-### Definition
-
-*Any module that is not signed by Microsoft or Google is considered to be third
-party software.*
-
-Software that is produced by third parties but that is signed by Microsoft via
-their WHQL program is not considered third party software under this definition.
-This is intended, and required for hardware support in some cases.
-
-### Baseline Policy
-
-*Software should stay out of Chrome’s address space. Period.*
-
-The intent of this policy is take a stance against third party code injecting
-into Chrome’s processes, for any reason.
-
-### Exceptions
-
-*Software that is deemed critical to the ecosystem or to certain end users may
-be excluded from being blocked.*
-
-The third party blocking mechanism will have provision to allow (at least
-temporarily) acceptable third party software. This is primarily intended to
-allow accessibility software to continue to work with Chrome. This may be
-extended to other classes of software at Google’s discretion to include other
-modules that would otherwise be considered third party. Exceptions should be
-considered as temporary, and are intended to allow the developer sufficient time
-to develop alternative solutions that do not violate this policy.
-
-### Commitment to Building Alternatives
-
-*Where no viable alternative to code injection exists for a legitimate use case
-that provides concrete value to users, Chrome is committed to developing and/or
-implementing alternative mechanisms that does not require code injection.*
-
-This may include working with specific publishers, developers, industry steering
-groups or standards bodies. We are generally convinced that most legitimate use
-cases can be addressed via existing platform and extension APIs, but are willing
-to consider supporting new APIs where there is a clear and justified use case.
-
-Where long term support of a legacy injection mechanism is required to enable a
-valid exceptional use case we will make efforts to move the logic to an external
-utility process so that the injection does not need to occur in the Chrome
-browser process. For more information refer to the FAQ for questions around
-printing, shell extensions and AMSI implementations.
-
-### Outreach and Grace Period
-
-*Developers should be notified that their software will start to be blocked, and
-provided a reasonable period of time during which they may develop alternative
-solutions.*
-
-The overall third party strategy includes a relatively lengthy notification-only
-period, during which time we will make all efforts to directly engage with
-developers of third party software with non-trivial user bases. This will also
-include direct communication with the community via blog posts and other means.
-
-### Escalation
-
-*Developers should have a mechanism for escalating their particular use case.*
-
-It is very likely that there is a long tail of use cases that we have not
-considered. If a developer feels they have a use case that is not easily
-addressed using alternative APIs or known workarounds they can feel free to
-reach out to the team by [filing a
-bug](https://bugs.chromium.org/p/chromium/issues/entry?description=Please+describe+your+third+party+use+case+here.&labels=Hotlist-ThirdPartySoftware,OS-Windows&oss=linux&owner=chrisha@chromium.org&components=Internals%3EPlatformIntegration).
-You can also reach out to the team on the
-[windows-third-party@chromium.org](mailto:windows-third-party@chromium.org)
-mailing list.
-
-## FAQ
-
-**Q. How can I determine how this feature impacts my software?**
-
-A. We have provided testing documentation that [walks you through the
-process](https://docs.google.com/document/u/1/d/e/2PACX-1vT-nKiuYFLx6faY7sx6NFfYA6V9DgwzIpbOLSnIh44caYxvKjMXZNhU2EOqg795eoBL02Ri1L09VgMY/pub)
-of evaluating the impact of blocking on your software.
-
-**Q. Can my software be added to the allowlist?**
-
-A. The short answer is no. Unless you are a publisher of accessibility software,
-in which case we will happily allow your software until suitable alternative
-APIs are available. Please [file a
-bug](https://bugs.chromium.org/p/chromium/issues/entry?description=Please+describe+your+third+party+use+case+here.&labels=Hotlist-ThirdPartySoftware,OS-Windows&oss=linux&owner=chrisha@chromium.org&components=Internals%3EPlatformIntegration)!
-
-**Q. What about shell extensions?**
-
-A. For the time being we are warning about shell extensions that inject, and
-blocking them when possible. We realize that this is less than ideal given that
-most shell extensions injection innocently. We are actively [moving all file
-dialog code to an external utility
-process](https://bugs.chromium.org/p/chromium/issues/detail?id=884075&q=out%20of%20process%20file%20dialogs&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified)
-where injection will be allowed. As of November 2018 this is being experimented
-with.
-
-**Q. What about printing?**
-
-A. Chrome will allow software to inject as part of the printing stack, and will
-not warn about modules that are injected during printing. We are actively
-[working to move printing to an external utility
-process](https://bugs.chromium.org/p/chromium/issues/detail?id=809738) so that
-this injection will no longer incur in the browser process.
-
-**Q. What about IME?**
-
-A. Currenty Chrome will allow registered IME modules to inject so as to break
-alternative text entry systems. Chrome is moving towards
-[TSF](https://docs.microsoft.com/en-us/windows/desktop/tsf/text-services-framework)
-rather than
-[IMM32](https://docs.microsoft.com/en-us/windows/desktop/api/_intl/). Eventually
-IMM32 will be deprecated, and these modules will no longer be allowed to inject.
-
-**Q. What about Win32 event hooks?**
-
-A. On Windows 8 and above we will be blocking event hooks (and other legacy
-injection mechanisms) from injecting into the browser process using the
-[PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON](https://www.google.com/search?q=PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON&oq=PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON&aqs=chrome..69i57j69i59.542j0j4&sourceid=chrome&ie=UTF-8)
-mitigation policy. Note that there is [ongoing work](/developers/mus-ash) to
-move window management and input to an external UI process. We will be
-evaluating whether or not to bring this technology to the windows platform, and
-if we do, whether or not to allow legacy injection in this process as part of
-that work.
-
-**Q. What about AMSI providers?**
-
-A.
-[AMSI](https://docs.microsoft.com/en-us/windows/desktop/amsi/antimalware-scan-interface-portal)
-providers are currently allowed to inject into Chrome, and no warning or
-blocking will apply. They are invoked when downloaded files are scanned using
-[IAttachmentExecute](https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nn-shobjidl_core-iattachmentexecute)
-(and also in some other situations, for example, by some printer drivers), which
-is used to enable [Mark of the
-Web](https://technet.microsoft.com/en-us/ms537628(v=VS.71)) support on the
-Windows platform. This scanning is being [moved to a utility
-process](https://bugs.chromium.org/p/chromium/issues/detail?id=883477&q=owner%3Apmonette%40chromium.org%20&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified)
-so that the injection will no longer incur in the browser process.
-
-**Q. What about *\[feature or use case X\]*?**
-
-A. Our general advice is to stop injecting into Chrome, and to seek alternative
-mechanisms that use some combination of modern APIs, external processes, Chrome
-extensions and [native
-messaging](https://developer.chrome.com/apps/nativeMessaging).
-
-**Q. What about enterprise use cases?**
-
-A. We maintain an [enterprise
-policy](/administrators/policy-list-3#ThirdPartyBlockingEnabled) for
-specifically *allowing* third party injection, and a [companion
-policy](/administrators/policy-list-3#ForceNetworkInProcess) for controlling
-whether or not Chromium's network stack is in the main browser process. These
-policies will be supported for at minimum the calendar year 2019, and 6 months
-(4 Chromium versions) notice will be provided prior to removing them. Notice
-will be provided on this page, as well as via the [enterprise release
-notes](https://support.google.com/chrome/a/answer/7679408?hl=en) for the
-affected release. \ No newline at end of file
diff --git a/chromium/docs/website/site/Home/tls13/index.md b/chromium/docs/website/site/Home/tls13/index.md
deleted file mode 100644
index 915019f40d0..00000000000
--- a/chromium/docs/website/site/Home/tls13/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-breadcrumbs:
-- - /Home
- - Chromium
-page_name: tls13
-title: TLS 1.3
----
-
-Chrome enabled TLS 1.3 in Chrome 70. However, due to bugs in some
-man-in-the-middle proxies, anti-downgrade enforcement was not enabled. The
-problematic proxies in question are duplicating a value in the TLS handshake
-from the origin server rather than randomly generating it themselves. Firstly,
-this means that they're implementing a slightly different protocol than TLS on
-their LAN side, the security properties of which are not clear. Secondly, it
-means that these proxies appear to TLS 1.3-enabled clients to be signaling that
-a downgrade attack is occurring because they're taking TLS 1.3-based values from
-the origin server and using them in a lower-version TLS handshake on the LAN
-side.
-
-In Chrome 72, downgrade protection will be enabled for TLS connections that use
-certificates that chain to a public CA. This should not affect MITM proxies
-since they cannot use publicly-trusted certificates. However, in order to get to
-the point where this workaround can be removed, all affected MITM proxies will
-need to be updated. The following lists minimum firmware versions for affected
-products that we're aware of:
-
-Palo Alto Networks:
-
-* PAN-OS 8.1 must be ≥ 8.1.4
-* PAN-OS 8.0 must be ≥ 8.0.14
-* PAN-OS 7.1 must be ≥ 7.1.21
-
-Cisco Firepower Threat Defense and ASA with FirePOWER Services when operating in
-“Decrypt - Resign mode/SSL Decryption Enabled”
-([advisory](https://www.cisco.com/c/dam/en/us/td/docs/security/firepower/SA/SW_Advisory_CSCvj93913.pdf))
-:
-
-* Firmware 6.2.3 must be ≥ 6.2.3.4
-* Firmware 6.2.2 must be ≥ 6.2.2.5
-* Firmware 6.1.0 must be ≥ 6.1.0.7
-
-Administrators can test compatibility by flipping
-chrome://flags/#enforce-tls13-downgrade to Enabled
-
-Please report problems on the [administrator's
-forum](https://productforums.google.com/forum/#!forum/chrome-admins). \ No newline at end of file
diff --git a/chromium/docs/website/site/OWNERS b/chromium/docs/website/site/OWNERS
deleted file mode 100644
index e9cd629454a..00000000000
--- a/chromium/docs/website/site/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-file://CONTENT_OWNERS
-
-per-file pages.json=file://site/chromium-os/OWNERS
diff --git a/chromium/docs/website/site/_assets/customLogo.png.sha1 b/chromium/docs/website/site/_assets/customLogo.png.sha1
deleted file mode 100644
index da047e2faef..00000000000
--- a/chromium/docs/website/site/_assets/customLogo.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9635ad74717513b5c7d701844ad9d3459aaf0733 \ No newline at end of file
diff --git a/chromium/docs/website/site/_includes/page.njk b/chromium/docs/website/site/_includes/page.njk
deleted file mode 100644
index df2f63214e0..00000000000
--- a/chromium/docs/website/site/_includes/page.njk
+++ /dev/null
@@ -1,117 +0,0 @@
----
-use_title_as_h1: true
----
-
-{%- macro selected_href(url) -%}
-{%- if (page.url | lower) == (url + '/') -%}
-class="selected" href="{{ url }}"
-{%- else -%}
-href="{{ url }}"
-{%- endif -%}
-{%- endmacro -%}
-
-{%- set script_tag %}
-// Configure Algolia search.
-let s = document.createElement('script');
-s.src = '/_scripts/@docsearch/index.js';
-document.head.append(s);
-
-window.addEventListener('load', () => {
- // Add the Algolia search widget.
- docsearch({
- container: '#search',
- appId: 'RZDQYCCABX',
- apiKey: '98b0eabafeb13fe3e1af693d5713d8b4',
- indexName: 'chromium'
- });
-});
-
-// Configure Google Analytics.
-s = document.createElement('script');
-s.src = 'https://www.googletagmanager.com/gtag/js?id=UA-5484340-1'
-s.async = true;
-document.head.append(s)
-
-window.dataLayer = window.dataLayer || [];
-function gtag(){dataLayer.push(arguments);}
-gtag('js', new Date());
-gtag('config', 'UA-5484340-1');
-
-// Configure consent bar.
-s = document.createElement('script');
-s.src = 'https://www.gstatic.com/brandstudio/kato/cookie_choice_component/cookie_consent_bar.v3.js'
-s.dataset.autoloadCookieConsentBar = true;
-s.dataset.autoloadCookieContentBarIntlCode = '';
-document.head.append(s);
-{%- endset -%}
-
-<!DOCTYPE html>
-{%- if redirect %}
-<head>
- <meta charset="utf-8">
- <meta http-equiv="Refresh" content="0; url='{{redirect}}'">
-</head>
-{%- else %}
-<head>
- <meta charset="utf-8">
- {%- if title %}
- <title>{{ title }}</title>
- {%- endif %}
- <link rel="stylesheet" href="/_stylesheets/@docsearch/style.css">
- <link rel="stylesheet" href="/_stylesheets/default.css">
-</head>
-
-<header>
- <a href="/">
- <img alt="the Chromium logo" src="/_assets/customLogo.png">
- <h2>The Chromium Projects</h2>
- </a>
- <div id="search"></div>
-</header>
-
-<div id="main-wrapper">
- <nav id="sidebar-left">
- <section>
- <a {{ selected_href("/chromium-projects") }}>Home</a>
- <a {{ selected_href("/Home") }}>Chromium</a>
- <a {{ selected_href("/chromium-os") }}>Chromium OS</a>
- </section>
- <section>
- <h4>Quick links</h4>
- <a href="/for-testers/bug-reporting-guidelines">Report bugs</a>
- <a href="/developers/discussion-groups">Discuss</a>
- </section>
- <section>
- <h4>Other sites</h4>
- <a href="https://blog.chromium.org/">Chromium Blog</a>
- <a href="https://developer.chrome.com/extensions">Google Chrome Extensions</a>
- </section>
- <section id="license" role="complementary">
- Except as otherwise
- <a href="https://developers.google.com/site-policies.html#restrictions">noted</a>,
- the content of this page is licensed under a
- <a href="https://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 license</a>,
- and examples are licensed under the
- <a href="https://chromium.googlesource.com/chromium/src/+/HEAD/LICENSE">BSD License</a>.
- </section>
- <section id="privacy" role="complementary">
- <a href="https://policies.google.com/privacy">Privacy</a>
- </section>
- <a id="edit-this-page" href="https://edit.chromium.org/edit?repo=chromium/website/main&amp;file=site{{page.url}}index.md">Edit this page</a>
- </nav>
- <main>
- {%- if breadcrumbs %}
- <div class="breadcrumbs">
- {%- for link in breadcrumbs %}
- <a href="{{ link[0] }}">{{ link[1] }}</a> &gt;
- {%- endfor %}
- </div>
- {%- endif %}
- {%- if use_title_as_h1 and title %}
- <h1>{{ title }}</h1>
- {%- endif %}
- {{content | safe}}
- </main>
-</div>
-<script>{{ script_tag | cspHash | safe }}</script>
-{%- endif %}
diff --git a/chromium/docs/website/site/_scripts/selector.js b/chromium/docs/website/site/_scripts/selector.js
deleted file mode 100644
index 0e3993892e2..00000000000
--- a/chromium/docs/website/site/_scripts/selector.js
+++ /dev/null
@@ -1,138 +0,0 @@
-(function() {
- fetch('/pages.json').
- then(resp => resp.blob()).
- then(blob => blob.text()).
- then(
- function (text) {
- let pages = JSON.parse(text);
- let currentLoc = new URL(document.location);
- let currentPath = trimd(currentLoc.pathname);
- let currentView = currentLoc.searchParams.get('view') || 'new';
- let currentPage = pages.indexOf(currentPath) + 1;
- let currentHeight = 0;
-
- let container = document.getElementById('pages-container');
- let pageNumber = document.getElementById('page-number');
- let path = document.getElementById('path');
-
- function trimd(s) {
- var end = s.length - 1;
- while (s[end] === '/') {
- end -= 1;
- }
- return s.substr(0, end + 1);
- };
-
- function updatePage(newPage) {
- if (newPage > pages.length) {
- newPage = 1;
- } else if (newPage < 1) {
- newPage = pages.length;
- }
- updatePath(pages[newPage - 1]);
- }
-
- function updatePath(newPath) {
- newPath = trimd(newPath);
- let newPage = pages.indexOf(newPath) + 1;
- if (newPage === 0) {
- newPage = 1;
- }
-
- if (newPath != currentPath) {
- if (currentView != 'new') {
- newPath += '?view=' + currentView;
- }
- window.location.href = newPath;
- }
- currentPage = newPage;
- pageNumber.value = newPage;
- path.value = newPath;
- }
-
- function changeView(evt) {
- updateView(evt.target.id);
- evt.preventDefault()
- return false;
- }
-
- function updateView(view) {
- for (let v of ['both', 'old', 'new']) {
- document.getElementById(v).classList.remove('selected');
- }
- document.getElementById(view).classList.add('selected');
- let oldPage = document.getElementById('old-page');
- let newPage = document.getElementById('new-page');
- oldPage.style.display = 'none';
- newPage.style.display = 'none';
- newPage.style.borderLeft = '0px';
- if (view === 'old' || view === 'both') {
- oldPage.style.display = 'block';
- }
- if (view === 'new' || view === 'both') {
- newPage.style.display = 'block';
- if (view === 'both') {
- newPage.style.borderLeft = '1px solid black';
- }
- }
-
- if (view != currentView) {
- currentView = view;
- history.pushState({}, '', currentPath + '?view=' + view);
- }
- }
-
- function adjustHeight() {
- let new_el = document.querySelector('#new-page');
- let new_height = new_el.offsetHeight;
- let old_el = document.querySelector('#old-page iframe');
- if (old_el?.contentWindow?.document?.body) {
- let old_height = old_el.contentWindow.document.body.offsetHeight;
- let max_height =
- (old_height > new_height) ? old_height : new_height;
- old_el.style.height = max_height + 'px';
- new_el.style.height = max_height + 'px';
- }
- setTimeout(adjustHeight, 100);
- }
-
- document.querySelector("#selector > form").onsubmit = function (evt) {
- evt.preventDefault();
- return false;
- }
- document.getElementById('page-number').onchange = function(evt) {
- updatePage(pageNumber.value);
- evt.preventDefault();
- return false;
- }
- document.getElementById('path').onchange = function(el) {
- updatePath(path.value);
- el.preventDefault();
- return false;
- }
- document.getElementById('pages').innerText = pages.length;
- document.getElementById('prev').onclick = function(el) {
- updatePage(currentPage - 1);
- el.preventDefault();
- return false;
- };
- document.getElementById('next').onclick = function(el) {
- updatePage(currentPage + 1);
- el.preventDefault();
- return false;
- };
- document.getElementById('old').onclick = changeView;
- document.getElementById('new').onclick = changeView;
- document.getElementById('both').onclick = changeView;
-
- updatePage(currentPage);
- updateView(currentView);
- adjustHeight();
-
- window.onresize = () => {
- if (currentView === 'both') {
- adjustHeight();
- }
- };
- })
- })();
diff --git a/chromium/docs/website/site/_stylesheets/_reset.scss b/chromium/docs/website/site/_stylesheets/_reset.scss
deleted file mode 100644
index 7f344c377bb..00000000000
--- a/chromium/docs/website/site/_stylesheets/_reset.scss
+++ /dev/null
@@ -1,100 +0,0 @@
-// This is lifted from developer.chrome.com, which is CC-Attribute Licensed,
-// but their file is actually based on the MIT-licensed
-// Andy Bell's "modern reset" https://github.com/hankchizljaw/modern-css-reset
-
-// Box sizing rules
-*,
-*::before,
-*::after {
- box-sizing: border-box;
-}
-
-// Remove default margin
-body,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-p,
-figure,
-blockquote,
-dl,
-dd,
-pre {
- margin: 0;
-}
-
-// Set core body defaults
-body {
- min-height: 100vh;
-}
-
-// Remove list styles on ul, ol elements with a list role, which suggests
-// default styling will be removed.
-// https://github.com/hankchizljaw/modern-css-reset/issues/30
-ul[role='list'],
-ol[role='list'] {
- list-style: none;
-}
-
-// Don't let lists spill outside of their containing box.
-ul,
-ol {
- list-style-position: inside;
-}
-
-// Anchor elements that don't have a class get default styles
-a:not([class]) {
- text-decoration-skip-ink: auto;
-}
-
-// Make images easier to work with
-img {
- display: block;
- height: auto;
- max-width: 100%;
-}
-
-p img {
- display: inline-block;
- vertical-align: sub;
-}
-
-// Inherit fonts for inputs and buttons
-input,
-button,
-textarea,
-select {
- font: inherit;
- letter-spacing: inherit;
- word-spacing: inherit;
-}
-
-// Remove the default border on iframes
-iframe {
- border: 0;
-}
-
-// Blur images when they have no alt attribute
-// Note: an empty alt (alt="") is fine and can be used to hide decorative images
-img:not([alt]) {
- filter: blur(10px);
-}
-
-// Define a basic hairline element.
-hr {
- height: 1px;
- margin: 0;
-}
-
-// Remove all animations and transitions for people that prefer not to see them.
-@media (prefers-reduced-motion: reduce) {
- * {
- animation-duration: 0.01s !important;
- animation-iteration-count: 1 !important;
- scroll-behavior: auto !important;
- transition-duration: 0.01s !important;
- }
-}
diff --git a/chromium/docs/website/site/_stylesheets/default.scss b/chromium/docs/website/site/_stylesheets/default.scss
deleted file mode 100644
index a1e6eda17ab..00000000000
--- a/chromium/docs/website/site/_stylesheets/default.scss
+++ /dev/null
@@ -1,418 +0,0 @@
-@import "reset";
-
-/* fonts */
-
-$body-fonts: Arial, Verdana, sans-serif;
-$monospace-fonts: monospace;
-
-/* colors */
-
-$body-bg-color: rgb(247, 247, 247);
-$body-color: rgb(0, 0, 0);
-
-$box-border-color: rgb(211, 211, 211);
-$box-bg-color: rgb(241, 241, 241);
-
-$button-bg-color: rgb(3, 25, 79);
-$button-color: rgb(255, 255, 255);
-$button-border-color: rgb(192, 192, 192);
-
-$code-color: rgb(0, 96, 0);
-$code-bg-color: rgb(239, 239, 239);
-
-$del-bg-color: rgb(244, 204, 204);
-$ins-bg-color: rgb(217, 234, 211);
-
-$heading-color: rgb(0, 0, 0);
-
-$main-bg-color: rgb(255, 255, 255);
-$main-border-color: $box-border-color;
-
-$license-color: rgb(94, 106, 114);
-$license-bg-color: rgb(255, 255, 255);
-
-$link-color: rgb(0, 102, 204);
-$link-color-heading: $link-color;
-$link-color-heading-em: rgb(0, 102, 204); // TODO: Figure out if this is used?
-$link-disabled-color: rgb(102, 102, 102); // TODO: Figure out if this is used?
-$link-visited-color: rgb(71, 18, 100);
-
-$selector-bg-color: rgb(90, 112, 166);
-
-$sidebar-section-bg-color: rgb(255, 255, 255);
-$sidebar-section-color: rgb(72, 72, 72);
-$sidebar-section-selected-color: black;
-
-$table-border-color: rgb(217, 217, 217);
-
-/* page-wide settings */
-
-a {
- color: $link-color;
- &.disabled {
- color: $link-disabled-color;
- text-decoration: none;
- }
-}
-
-b {
- font-weight: 700;
-}
-
-body {
- background-color: $body-bg-color;
- color: $body-color;
- font-family: $body-fonts;
-}
-
-code {
- background: $code-bg-color;
- color: $code-color;
- font-family: $monospace-fonts;
-}
-
-em,
-i {
- font-style: italic;
-}
-
-pre {
- background: $code-bg-color;
- border: 1px solid $box-border-color;
- margin: 1em;
- padding: 0.5em 1em 0.5em 1em;
-}
-
-header {
- align-items: center;
- display: flex;
- justify-content: space-between;
- margin: 5px 5px 5px 10px;
-
- a {
- align-items: center;
- color: $link-color-heading;
- display: flex;
- text-decoration: none;
-
- h2 {
- width: 100%;
- }
- }
-
- img {
- display: block;
- margin-right: 10px;
- }
-}
-
-/* main panel */
-
-#main-wrapper {
- display: flex;
-}
-
-
-#sidebar-left {
- flex: 0 auto;
- font-size: 12px;
- line-height: 1.33em;
- min-width: 160px;
- width: 160px;
-
- section {
- background-color: $sidebar-section-bg-color;
- margin: 0 5px 6px 5px;
- padding: 0 0 0 5px;
- }
-
- a {
- color: $link-color;
- display: block;
- text-decoration: none;
-
- &.selected {
- color: $sidebar-section-selected-color;
- font-weight: bold;
- }
- }
-
- h4 {
- color: $sidebar-section-color;
- font-weight: 700;
- font-size: 13px;
- margin-bottom: 1px;
- padding: 3px 0 2px 0;
- }
-
- #license {
- background-color: $license-bg-color;
- color: $license-color;
- font-size: 10px;
- line-height: normal;
- margin: 0 5px 6px 5px;
- padding: 11px 5px 5px 5px;
-
- a {
- display: inline;
- text-decoration: underline;
- }
- }
-
- // Explicitly use the `a` tag to override the specificity of `#sidebar a`.
- a#edit-this-page {
- background-color: $button-bg-color;
- border: 1px solid $button-border-color;
- color: $button-color;
- display: block;
- font-size: 14px;
- font-weight: 700;
- margin: 20px auto;
- padding: 6px 12px;
- text-align: center;
- text-decoration: none;
- width: 90%;
- }
-}
-
-main {
- background-color: $main-bg-color;
- border: 1px solid $main-border-color;
- flex: 1 100%;
- font-family: $body-fonts;
- font-size: 13.333px;
- line-height: 1.3;
- margin-right: 5px;
- padding: 20px;
-
- a:visited {
- color: $link-visited-color;
- }
-
- a.header-anchor {
- color: inherit;
- text-decoration: inherit;
- }
-
- blockquote {
- margin-bottom: 13.33px;
- margin-top: -12px;
- }
-
- del {
- background-color: $del-bg-color;
- text-decoration: inherit;
- }
-
- h1 {
- font-size: 22px;
- font-weight: 700;
- margin: 10px 0 1.4em;
-
- a {
- color: $link-color-heading;
- }
- }
-
- h2 {
- font-size: 20px;
- font-weight: 700;
- margin: 1.2em 0 .8em 0;
- }
-
- h3 {
- font-size: 16px;
- font-weight: 700;
- margin: 1.2em 0 .7em 0;
- }
-
- h4 {
- font-weight: 700;
- margin: 1.2em 0 .6em 0;
-
- a {
- color: $link-color-heading;
- }
-
- i a {
- color: $link-color-heading-em;
- font-weight: 400;
- }
- }
-
- ins {
- background-color: $ins-bg-color;
- text-decoration: inherit;
- }
-
- p {
- margin-bottom: 13.33px;
- margin-top: 1.4em;
- }
-
- pre {
- white-space: break-spaces;
- word-break: break-all;
- }
-
- #title-crumbs {
- padding: 6px 0 0 10px;
-
- + h3 {
- margin-top: 6px;
- }
- }
-
- ul {
- display: block;
- list-style-position: outside;
- list-style-type: disc;
- margin-bottom: 1em;
- margin-top: 1em;
- padding-left: 40px;
-
- li {
- margin-bottom: 5px;
- margin-top: 5px;
-
- > p:first-of-type {
- display: inline;
- }
- }
-
- ul {
- list-style-type: circle;
- margin-bottom: 0;
- margin-top: 0;
-
- ul {
- list-style-type: square;
- }
- }
- }
-
- ol {
- list-style-position: outside;
- list-style-type: decimal;
- padding-left: 40px;
- margin: 1em 0;
-
- li {
- margin: 5px 0;
- p {
- margin: .5em 0;
- }
-
- > p:first-of-type {
- display: inline;
- }
- }
-
- ul {
- list-style-type: circle;
- margin-bottom: 0;
- margin-top: 0;
- }
- }
-
- table {
- border-collapse: collapse;
- border-spacing: 0px;
- border-width: 1px solid $table-border-color;
- margin: 1.3em 0 1.3em 0;
-
- td,
- th {
- border: 1px solid $table-border-color;
- padding: 5px 10px 5px 10px;
- vertical-align: top;
- }
- }
-
- /* Rules for particular extensions */
-
- // Used by the `{% subpages collections.all %}` extension.
- nav.subpage-listing {
- background-color: $box-bg-color;
- border: 1px solid $box-border-color;
-
- details {
- margin-left: -1em;
- }
-
- h4 {
- margin: inherit;
- padding: 0.5em 0 0 0.5em;
- }
-
- li {
- font-weight: normal;
- list-style: none;
- list-style-image: none;
- margin-left: 1.2em;
- padding-left: 1.3em;
-
- a {
- text-decoration: none;
- }
- }
-
- ul {
- padding-left: 0px;
- }
-
- > ul {
- margin: 0.5em 0 0.5em 0;
-
- > li {
- border-top: 1px solid white;
- font-weight: bold;
- margin: 3px 0 3px 0;
- padding: 2px 0 2px 1.3em;
- }
- }
- }
-
- // Used by the `[TOC]` extension.
- .table-of-contents {
- border: 1px solid $box-border-color;
- background-color: $box-bg-color;
- display: table;
- font-size: 12px;
- margin-left: 1em;
- padding: 1em 2em 1em 1em;
-
- a {
- text-decoration: none;
- }
-
- > ol::before {
- content: "Contents";
- display: block;
- font-weight: 700;
- margin: 0 0 0.5em -1em;
- }
-
- ol {
- line-height: 1.1em;
- margin: 0;
- padding-left: 1.2em;
-
- li {
- list-style-type: none;
- }
- }
- }
-
- // Used for two-column content "extension".
- .two-column-container {
- align-items: flex-start;
- display: flex;
-
- > div.column {
- flex: 50%;
- margin: 0;
- padding-right: 30px;
- }
- }
-}
diff --git a/chromium/docs/website/site/administrators/advanced-integration-for-saml-sso-on-chrome-devices/index.md b/chromium/docs/website/site/administrators/advanced-integration-for-saml-sso-on-chrome-devices/index.md
deleted file mode 100644
index 432489270ec..00000000000
--- a/chromium/docs/website/site/administrators/advanced-integration-for-saml-sso-on-chrome-devices/index.md
+++ /dev/null
@@ -1,264 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: advanced-integration-for-saml-sso-on-chrome-devices
-title: Advanced Integration for SAML SSO on Chrome Devices
----
-
-This page describes the advanced integration that **may** be done in enabling
-SAML SSO on Chrome Devices. This article is intended for partners, SAML SSO
-vendors and IT administrators. The integration described in this document is not
-mandatory for the feature to work. For basic information on how SAML SSO can be
-enabled for Chrome Devices, please refer to [this
-article](https://support.google.com/chrome/a/answer/6060880).
-
-### Chrome Credentials Passing API
-
-API version 1.0 - 3rd June 2014
-
-#### Motivation
-
-Users can sign in to Chrome with their Google accounts. The password is verified
-by Google’s authentication servers but is also used locally in Chrome to provide
-features such as session lock/unlock, Chrome Device offline sign-in and Chrome
-Device user data encryption. For SAML users, authentication is performed by a
-third-party identity provider (IdP). This document describes an API that SAML
-IdPs can use to securely provide Chrome with the user credentials required to
-implement the session lock/unlock, offline sign-in, and data encryption
-features.
-
-#### Overview
-
-The Chrome sign-in flow is entirely web-based. Google’s authentication service
-redirects to the IdP, the IdP guides the user through the authentication process
-and eventually redirects back to a Google URL, reporting success or failure (see
-the [Google developer
-documentation](https://developers.google.com/google-apps/sso/saml_reference_implementation)).
-The IdP’s authentication flow typically consists of at least three steps:
-
- an HTML login form collects user credentials
-
- the IdP verifies that the credentials submitted are correct
-
- an HTML page performs the redirect to the Google URL, indicating
- success/failure
-
-This document introduces a JavaScript API via which the IdP can pass user
-credentials to Chrome in step 1 and can inform Chrome when the credentials have
-been verified in step 3. The API works locally: API methods are called by a
-script that is executed by Chrome as part of the SAML IdP’s web-based
-authentication flow and are processed by the same instance of Chrome. They do
-not flow through any server. The API methods are provided by a JavaScript file
-that handles the lower-level communication with Chrome. This file is hosted by
-Google at:
-
-<https://ssl.gstatic.com/accounts/chrome/users-1.0.js>
-
-We recommend that SAML IdPs reference this file at the above location in their
-scripts. This way, any improvements and bug fixes to the file will be picked up
-automatically. We will make every effort to keep the API provided by this file
-stable.
-
-#### Key Types
-
-To support session lock/unlock, offline sign-in and user data encryption, Chrome
-must be able to authenticate a returning user without contacting any servers.
-This is done by deriving a key from the user’s password via a one-way hash
-function during initial authentication. When the user returns and enters his/her
-password again, the same one-way hash function is applied to this password. If
-the resulting keys match, the password entered was correct and the user is
-authenticated.
-
-Chrome uses a built-in one-way hash function to derive keys from passwords for
-non-SAML users. The same one-way hash function is used when a SAML IdP passes a
-user’s password to Chrome via the API described in this document. Chrome
-discards the password after hashing and does not store it anywhere. An
-alternative is for the IdP to apply a one-way hash function and pass the derived
-key to Chrome. When the user returns and enters his/her password, Chrome must
-apply the same one-way hash function to determine whether the password entered
-is correct. The IdP must therefore use a one-way hash function supported by
-Chrome and must also pass Chrome any additional metadata required to repeat the
-hashing, such as a salt.
-
-Chrome provides the SAML IdP with a list of supported key derivation mechanisms
-when the IdP initializes the API. KEY_TYPE_PASSWORD_PLAIN is always supported.
-For this key type, the IdP passes the password to Chrome and Chrome applies its
-built-in one-way hash function to it. Additional key types, in which the IdP
-applies a one-way hash function and passes the key and metadata to Chrome, will
-be added in the future.
-
-#### API Methods
-
-The API consists of three JavaScript methods:
-
- initialize(callback)
-
- add(details, callback)
-
- complete(details, callback)
-
-All methods are asynchronous. Each method will invoke the callback passed to it
-when its work is done. The initialize method must be called first to initialize
-the API. The add method is then used to pass credentials to Chrome and the
-complete method is used to inform Chrome that the passed credentials have been
-verified. IdP login flows typically span multiple HTML login pages. The API
-supports this by allowing its methods to be called from different pages.
-
-However, the API must correlate the complete call that indicates authentication
-success with the add call that passed the corresponding credentials. This
-correlation is established using the token argument: The SAML IdP passes a token
-of its choosing in the details provided to the add call and must then pass the
-same token in the details of the corresponding complete call. The API uses the
-token to correlate these method calls only. The token is treated as opaque, is
-not interpreted in any way and is discarded at the end of the sign-in process.
-
-If authentication fails, Chrome may return to the sign-in form, asking the user
-to try signing in again. A sign-in process can thus encompass multiple
-authentication attempts. To ensure that method calls are correlated correctly,
-the SAML IdP should use a different token for each of these authentication
-attempts. The IdP must then choose a token when calling add and must keep this
-token as part of its internal state until complete is called. The need to
-generate and keep track of a suitable token can be avoided by using the
-RelayState (see the [Google SAML developer
-documentation](https://developers.google.com/google-apps/sso/saml_reference_implementation)
-for a definition) as the token. The RelayState meets all requirements that the
-token must fulfill:
-
- The RelayState remains constant throughout an authentication attempt
-
- The RelayState is different for each authentication attempt
-
- The RelayState must be passed through from the start to the end of the
- authentication flow so that it will be available in steps 1 and 3 of the
- flow
-
-While the RelayState is an obvious choice for the token, a SAML IdP is free to
-choose any other token instead, as long as it allows the add and complete calls
-to be correlated.
-
-> ## initialize(callback)
-
-> The initialize method should be invoked once at the start of the
-> authentication flow. While the API is currently implemented by Chrome only, a
-> SAML IdP is not required to (and should not) interpret the user agent string
-> to determine whether the API is available or not. Instead, the initialize
-> method should always be called at the start of the authentication flow,
-> regardless of user agent.
-
-> If the authentication attempt is part of a sign-in process on a version of
-> Chrome that provides the API, Chrome will invoke the callback with a list of
-> supported key types. Once the callback has been invoked by Chrome, the IdP may
-> use the API by calling the add and complete methods.
-
-> In all other cases (e.g., not Chrome, older version of Chrome, not part of the
-> sign-in process), the callback will not be invoked. If the callback is not
-> invoked, the API is not available and the IdP must not call any of its other
-> methods. If the IdP’s authentication flow spans multiple HTML pages, the IdP
-> must keep track of the initialization result across these pages. If the API is
-> available, the IdP should call the add and complete methods at the appropriate
-> points in the authentication flow. Otherwise, the add and complete methods
-> must not be called.
-
-> The callback should be a function that takes a single argument, keyTypes.
-> Chrome passes an array of string constants indicating the supported key
-> derivation mechanisms via this argument (see the key types section for
-> details). The constant ’KEY_TYPE_PASSWORD_PLAIN’ will always be present in
-> this array. Additional constants indicating further key derivation mechanisms
-> will be added in the future.
-
-> ## add(details, callback)
-
-> This method should be invoked when the user has finished entering his/her
-> credentials. The details should be a JavaScript object that contains the
-> following fields:
-
-> token
-> user
-> passwordBytes
-> keyType
-
-> The token is used to correlate the add call with a subsequent complete call.
-> It is not interpreted by the API in any way and may be freely chosen by the
-> IdP (see the API methods section for details). The user field should be set to
-> the user’s e-mail address. If the IdP does not know the user’s e-mail address,
-> an empty string should be passed.
-
-> The next two fields are used to pass a key to Chrome. keyType indicates the
-> key derivation mechanism that the IdP used to derive the key from the user’s
-> password. It must be one of the string constants that the API returned in the
-> keyTypes array during initialization (see the previous section for details).
-> passwordBytes contains the key and any metadata required to repeat the hashing
-> process that was used to derive the key.
-
-> When the keyType is ’KEY_TYPE_PASSWORD_PLAIN’, passwordBytes contains the
-> password itself. For other key types that will be added in the future,
-> passwordBytes will contain the metadata, such as a salt, and the key,
-> separated by a delimiter.
-
-> The callback will be invoked when Chrome has received the credentials. Since
-> the user has not been authenticated yet, Chrome keeps the credentials in
-> memory only and does not store them permanently until the corresponding
-> complete method is called.
-
-> The add method will typically be called when the HTML login form is about to
-> submitted. It is important to not actually submit the form until after the
-> callback has been invoked. If the IdP calls the add method and submits the
-> form without waiting for the callback, the HTML page containing the login form
-> and any scripts it is running it will be torn down immediately, preventing the
-> credentials from reaching Chrome. The recommended way to handle form
-> submission is to set the callback to form.submit.bind(form), where form is the
-> DOM node representing the login form. This way, the form will be submitted
-> automatically when Chrome has received the credentials and invokes the
-> callback.
-
-> If the credentials entered are incorrect, the IdP will typically end the
-> authentication flow with a SAMLResponse indicating failure. However, an IdP
-> may also redirect back to the IdP’s login form, allowing the user to try
-> entering his/her credentials again. If the IdP implements this flow, the add
-> method should be called whenever new credentials are entered. It is
-> permissible to reuse the same token in this case. When the add method is
-> called with new credentials, any credentials previously passed with the same
-> token are superseded and replaced.
-
-> ## complete(details, callback)
-
-> The complete method should be invoked when the user’s credentials have been
-> verified by the SAML IdP and the user is authenticated. The details should be
-> a JavaScript object that contains one field, token. The token must match the
-> one that was passed to the add call for this authentication attempt, allowing
-> the two calls to be correlated. The complete call indicates that the
-> credentials which the IdP had passed to the corresponding add call are valid.
-> Chrome will use these credentials to provide the session lock/unlock, offline
-> sign-in, and data encryption features for this user. The callback will be
-> invoked when Chrome has processed the credentials and has stored them
-> permanently.
-
-> After verifying the user’s credentials, an IdP needs to redirect to a Google
-> URL, passing the RelayState and SAMLResponse. This is typically done by
-> serving an HTML page that contains a hidden form which is submitted to the
-> Google URL automatically upon page load. It is important to not actually
-> submit the form until after the callback has been invoked. The recommended way
-> to handle this is to call the complete method upon page load, setting the
-> callback to form.submit.bind(form), where form is the DOM node representing
-> the hidden form. This way, the form will be submitted automatically when
-> Chrome has processed the credential and invokes the callback.
-
-> If the credentials provided are incorrect, the IdP must not call the complete
-> method. When the SAML authentication flow completes with a SAMLResponse
-> indicating authentication failure, Chrome will inform the user of the
-> authentication failure and will allow him/her to try again, starting a new
-> authentication flow.
-
-#### Limitations
-
-The API can be used to securely pass a key derived from the user’s password to
-Chrome. If the user authenticates using other means (e.g., smart card,
-biometrics, single-use codes) and does not have a password, the API cannot be
-used as no key can be derived. Support for other authentication types is a
-separate problem outside the scope of the API at this time.
-
-The API is available in Chrome 36 and higher. Earlier Chrome versions behave
-like other user agents that do not support the API: It is safe to call the
-initialize method. Since the API is not supported, the callback passed to
-initialize will never be invoked. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/certificate-management-extension-api-on-chrome-os/index.md b/chromium/docs/website/site/administrators/certificate-management-extension-api-on-chrome-os/index.md
deleted file mode 100644
index 5f72ce9b33c..00000000000
--- a/chromium/docs/website/site/administrators/certificate-management-extension-api-on-chrome-os/index.md
+++ /dev/null
@@ -1,281 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: certificate-management-extension-api-on-chrome-os
-title: 'Developer Guide: Certificate Management Extension API on Chrome OS'
----
-
-This document is for extension developers and describes how to use the extension
-API
-[enterprise.platformKeys](https://developer.chrome.com/extensions/enterprise_platformKeys)
-for client certificate enrollment.
-
-## Motivation
-
-Client certificates allow secure authentication to digital resources, like
-networks or web resources. A typical certificate based authentication protocol
-is [Transport Layer
-Security](http://en.wikipedia.org/wiki/Transport_Layer_Security) (TLS, formerly
-known as SSL) and the protocols that are built on top like EAP-TLS for network
-authentication and HTTPS for web resources.
-
-This article describes how to manage and make use of client certificates on
-Chrome OS using the
-[enterprise.platformKeys](https://developer.chrome.com/extensions/enterprise_platformKeys)
-extension API: in particular, how to provision a new client certificate and how
-to use a client certificate for network or web authentication.
-
-## Overview
-
-Many certificate enrollment protocols exist, like
-[SCEP](http://tools.ietf.org/html/draft-nourse-scep-23),
-[EST](https://tools.ietf.org/html/rfc7030) or
-[CMC](https://tools.ietf.org/html/rfc5272), that define the communication
-between the client (in this case, the Chrome OS device) and the Certificate
-Authority (CA), which can be accompanied by a Registration Authority. The
-[enterprise.platformKeys](https://developer.chrome.com/extensions/enterprise_platformKeys)
-API is designed in a way that extensions have the freedom to implement any
-enrollment protocol based on what is supported by the target Certificate
-Authority.
-
-Independent of which specific protocol is used to communicate, the following
-steps describe the typical flow of a certificate enrollment:
-
-1. Trigger the enrollment process, e.g. the user tries to authenticate but no
-client cert is installed, or the user manually starts the enrollment.
-2. Obtain the enrollment configuration, e.g. URL of the CA, or the attributes
-to use for the certification request.
-3. Obtain credentials to authenticate the certification request, either by
-asking the user or by using an API, e.g.
-[chrome.identity](https://developer.chrome.com/apps/identity).
-4. Generate public/private key pair locally on the device.
-5. Create the certification request, which contains data like the public key
-and some attributes, which in turn is signed by the private key. The private
-key is kept secret and is not part of the request.
-6. Send the certification request to the CA.
-7. After the CA authorizes the request, it creates the client certificate and
-sends it to the client.
-8. The client receives the certificate and installs it.
-
-After successful enrollment the certificate can be used to authenticate to
-resources like a network or a web page.
-
-## The enterprise.platformKeys API
-
-This extension API of Chrome OS allows extensions to generate a key pair, sign a
-certification request, and to manage the installed client certificates (import,
-get and remove certificates). Using this API, an extension can drive the process
-of installing a new client certificate to a Chrome OS device.
-
-In order to use the API, an extension must be pre-installed by user policy. Only
-extensions installed by policy can use the API.
-
-### How to implement the enrollment process in an extension
-1. The enrollment can be started by several events.
- * The extension can expose a link or an icon that the user can use to manually
- start the enrollment process, see for example
- [chrome.browserAction](https://developer.chrome.com/extensions/browserAction).
- * The first time the user tries to connect to a network that requires a client
- certificate for authentication, Chrome OS can automatically open the
- extension if the following required step has been taken by the
- administrator:
- The network must be configured by policy to use client certificates for
- authentication (e.g. a 802.1x WiFi with EAP-TLS) and the Client Enrollment
- URL must be set to a page of the extension, see [Manage
- Networks](https://support.google.com/chrome/a/answer/2634553).
- Every time the user attempts to connect to this network and there is no
- matching certificate in the user’s certificate store, Chrome OS will open
- the configured Client Enrollment URL in a new browser tab.
- * The extension can use an [event
- page](https://developer.chrome.com/extensions/event_pages) (succeeding
- [background page](https://developer.chrome.com/extensions/background_pages))
- to check whether a valid client certificate is already installed at certain
- times (e.g. after login and once per day). If not or if the certificate is
- expiring soon, the extension can trigger the enrollment flow.
-
-2. The extension needs some configuration about the enrollment process, at a
-minimum the URL of the CA and maybe attributes to embed in the certification
-request.
-
- The configuration can
-
- * be part of the extension itself, which prevents reuse of the extension with
- other configurations,
- * be part of the Client Enrollment URL that is opened by Chrome OS (see
- previous step),
- * be pushed through [policy for
- extensions](https://developer.chrome.com/extensions/manifest/storage), which
- allows the administrator to configure the extension in the management
- console.
-
-3. To obtain credentials to authenticate the certification request at the CA,
-the extension can present any UI and ask the user to provide the credentials or
-use any other APIs, for example, OAuth.
-
-4. The extension has to obtain the user
-[Token](https://developer.chrome.com/extensions/enterprise_platformKeys#type-Token)
-(with the id `"user"`) using
-[enterprise.platformKeys.getTokens](https://developer.chrome.com/extensions/enterprise_platformKeys#method-getTokens)
-and generate a key pair using the
-[subtleCrypto.generateKey](http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface)
-method of the
-[Token](https://developer.chrome.com/extensions/enterprise_platformKeys#type-Token).
-The private key will be generated by the TPM and is guaranteed to never leave
-the device or even the TPM.
-
- ```none
- function getUserToken(callback) {
- chrome.enterprise.platformKeys.getTokens(function(tokens) {
-   for (var i = 0; i < tokens.length; i++) {
-   if (tokens[i].id == "user") {
-        callback(tokens[i]);
-        return;
-      }
-    }
-    callback(null);
-  });
- }
- ```
-
- ```none
- var algorithm = {
-  name: "RSASSA-PKCS1-v1_5",
-
-   // RsaHashedKeyGenParams:
-   modulusLength: 2048,
-
-  // Equivalent to 65537
-   publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
-  hash: {
-    name: "SHA-1"
-  }
- };
-
- userToken.subtleCrypto.generateKey(algorithm, false /* not extractable */, ["sign"])
- .then(function(keyPair) { ... continue with generated keyPair ... },
-        console.error.bind(console));
- ```
-
-5. Extract the public key from the key handle using the
-[subtleCrypto.exportKey](http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface)
-method of the
-[Token](https://developer.chrome.com/extensions/enterprise_platformKeys#type-Token):
-
- ```none
- userToken.subtleCrypto.exportKey("spki", keyPair.publicKey)
-   .then(function(publicKey) { ... continue with publicKey ... },
-        console.error.bind(console));
- ```
-
-6. Create the content for the certification request in the extension. This
-request must contain at least the public key. The CA may expect additional
-attributes that must be added. If the request is PKCS#10 based, for example, the
-open source library [forge](https://github.com/digitalbazaar/forge) may be used.
-
- ```none
- var request = CreateCertificationRequest();
- request.setPublicKey(publicKey);
- request.setSubject('CommonName', 'some name');
- ```
-
-7. Sign the content of the certification request (using the
-[subtleCrypto.sign](http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface)
-method of the
-[Token](https://developer.chrome.com/extensions/enterprise_platformKeys#type-Token))
-and create the final request from the content and the signature. Any subsequent
-attempt to use the same key for signing will fail for security reasons: This API
-guarantees that only Chrome OS itself can use the private key and the
-certificate for authentication.
-
- ```none
- function signData(data, callback) {
-  userToken.subtleCrypto.sign({name : "RSASSA-PKCS1-v1_5"}, keyPair.privateKey, data)
-    .then(callback, console.error.bind(console));
- }
-
- request.setSignFunction(signData);
- request.sign();
- ```
-
-8. Send the certification request to the CA and receive the client certificate
-(e.g. using XMLHttpRequest)
-
- ```none
- var xhr = new XMLHttpRequest();
- function onReadyStateChange() {
-  if (xhr.readyState !== 4)
-    return;
-  if (xhr.status !== 200) {
- ... handle error ...
-    return;
-  }
-  ... continue with xhr.response which contains the certificate ....
- }
- xhr.onreadystatechange = onReadyStateChange;
- xhr.open('POST', caUrl);
- xhr.setRequestHeader('Content-Type', ...);
- xhr.send(request);
- ```
-
-9. Install the client certificate using
-[enterprise.platformKeys.importCertificate](https://developer.chrome.com/extensions/enterprise_platformKeys#method-importCertificate)
-
- ```none
- chrome.enterprise.platformKeys.importCertificate(userToken.id, certificate);
- ```
-
-10. Different methods to use the client certificate for authentication are
-available
-
- For network authentication:
- * The user can manually select the client certificate in the network
- configuration dialog.
- * The selection can also be automated if the network is configured by policy.
- For network types that support client certificates, like EAP-TLS, the
- administrator can configure a Certificate Pattern that defines which client
- certificates are valid for authenticating to this network. Chrome OS will
- automatically select the most recent matching client certificate and use it
- for authentication on every connection attempt.
-
- For web pages requiring client certificate authentication:
- * When accessing a web page that requires the client to present a certificate,
- Chrome OS will show the user a list of available client certificates. After
- selecting one, Chrome OS will use it to authenticate.
- * The selection can also be automated for specific URLs using the policy
- [Automatically select client certificates for these
- sites](https://support.google.com/chrome/a/answer/2657289?#AutoSelectCertificateForUrls):
- For URLs that are listed in this policy, the most recent matching client
- certificate will automatically be used for authentication without prompting
- the user.
-
-Note that the
-[enterprise.platformKeys](https://developer.chrome.com/extensions/enterprise_platformKeys)
-API guarantees, that client certificates imported using the API can only be used
-by Chrome OS itself for authentication. The extension is not able to drive any
-authentication with such a certificate and in particular the API guarantees that
-the certificate can’t be extracted to authenticate any other user or device.
-
-### Re-enrollment
-
-To determine whether any valid client certificate is already installed and to
-check the expiration of the installed certificates, an extension can use the
-[platformKeys.getCertificates](https://developer.chrome.com/extensions/enterprise_platformKeys#method-getCertificates)
-function and if necessary trigger the process to obtain a new client
-certificate.
-
-```none
-chrome.enterprise.platformKeys.getCertificates(userToken.id, function(certificates) {
- for (var i = 0; i < certificates.length; i++) {
-   var certificate = certificates[i];
-   ... check whether certificate is valid and matches the required attributes ...
- }
-});
-```
-
-An installed certificate can be removed from the user’s certificate store using
-the function
-[enterprise.platformKeys.removeCertificate](https://developer.chrome.com/extensions/enterprise_platformKeys#method-removeCertificate).
-As client certificates can be selected automatically (see last step in the
-enrollment process above), unnecessary certificates should be removed to prevent
-conflicts. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/common-problems-and-solutions/index.md b/chromium/docs/website/site/administrators/common-problems-and-solutions/index.md
deleted file mode 100644
index af24d23409f..00000000000
--- a/chromium/docs/website/site/administrators/common-problems-and-solutions/index.md
+++ /dev/null
@@ -1,241 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: common-problems-and-solutions
-title: Common Problems and Solutions
----
-
-**Installation**
-
-**What method should we use to install and auto-update?**
-
-> There are two ways to handle installation and version management:
-
-> 1. Install the MSI and leave auto-updates on.
-
-> Implications to consider:
-
-> * The installations will auto-update themselves, so the MSI you use
- to deploy will eventually not work for repairs and over-installs.
- You'll need to get the latest MSI.
-> * Updates are performed silently, and occur often.
-> * Your users will always be up-to-date with the latest stable
- version.
-
-> 2. Install the MSI and turn auto-updates off.
-
-> Implications to consider:
-
-> * You must keep the MSI you use to deploy archived for repairs or
- over-installs, as we do not publish old MSIs.
-> * Not auto-updating will mean users are running old, and potentially
- vulnerable, versions of the browser.
-> * You can push a new MSI install over the old MSI install when
- you're ready.
-
-I'm trying to install behind a firewall, and the install is timing out and
-failing.
-
-> The problem is that by default, Google Update is attempting to check for an
-> update on install and fails at the firewall.
-
-> When passed a special parameter, the installation will not do this check, and
-> should install regardless of outside connectivity.
-
-> The special parameter is "NOGOOGLEUPDATEPING=1", and is used like this:
-
-> msiexec /i GoogleChromeStandaloneEnterprise.msi NOGOOGLEUPDATEPING=1 /l\*v
-> log.txt
-
-When I attempt to push a new MSI, the install fails with an error that says: **"Google Chrome or Google Chrome Frame cannot be updated on account of inconsistent Google Update Group Policy settings. Use the Group Policy Editor to set the update policy override for the Google Chrome Binaries application and try again."
-
-> Between Chrome 12 and 13, the group policy settings to control auto-updates
-> changed. Rather than have auto-updates start unexpectedly, this error was
-> added so that you know to set the new auto-update group policies.
-
-> Find out more information here:
-
-> <http://www.google.com/support/a/bin/answer.py?answer=1385049&topic=1064263>
-
-**Can I store my users' Chrome profiles on a Roaming Profile? Or sync it to a
-network drive?**
-
-> Chrome user profiles are not backwards-compatible. If you try to use
-> mismatched profiles and Chrome versions, **you may experience crashes or data
-> loss**. This mismatch can often occur if a Chrome profile is synced to a
-> roaming profile or network drive across multiple machines that have different
-> versions of Chrome. We strongly encourage admins & users to consider using
-> [Google Chrome
-> Sync](http://www.google.com/support/chrome/bin/answer.py?hl=en&answer=165139&from=165140&rd=1),
-> which persists user settings across machines, instead of using roaming
-> profiles for the time being.
-
-> That said, there are policies for controlling the location of the user profile
-> and the cache:
-
-> <http://www.chromium.org/administrators/policy-list-3#UserDataDir>
-
-> <http://www.chromium.org/administrators/policy-list-3#DiskCacheDir>
-
-**I'm trying to install the MSI over an existing MSI install, but I keep getting
-the error "more recent version exists".**
-
-> If you left auto-updates on, it's possible that the version of the MSI you're
-> trying to install is already outdated. If you already have the dev channel or
-> beta channel installed, the MSI cannot overwrite that since they'll be on
-> newer versions too.
-
-> Verify that you are attempting to install a later version of the MSI by
-> downloading the latest version
-> [here](http://www.google.com/chrome/eula.html?msi=true).
-
-> To see what the latest stable version of Chrome is for Windows, click
-> [here](http://omahaproxy.appspot.com/win).
-
-**I'm trying to repair an installation, but the repair is failing.**
-
-> If you left auto-updates on, it is likely that your installs auto-updated to a
-> later version. This is causing the repair to fail because you're already on a
-> later version than the MSI.
-
-> You can download the latest stable MSI
-> [here](http://www.google.com/chrome/eula.html?msi=true), and use this MSI for
-> the repair instead.
-
-**When applying the MSI over a previous install, I get the error "There is a
-problem with this Windows Installer package. A program required for this install
-to complete could not be run. Contact your support personal or package vendor"**
-
-> If you are running with the /f flag to run it as a "minor" update, you will
-> need to use the /i flag to run it as a "major" update instead.
-
-**Do you have old versions of the MSI available?**
-
-> No. The latest stable version is always available at the link above.
-
-> If you are looking to repair an existing MSI install, and you left
-> auto-updates on, you can repair with the latest stable MSI.
-
-**How often do you update the MSI?**
-
-> We update the MSI on every stable release. We'll release a new "major" version
-> to the stable channel about every six weeks, although there are often several
-> updates to the stable channel between major updates that typically contain
-> crash and security fixes.
-
-> If, for some reason, the version of the MSI at the link above is old, please
-> let us know by [filing a
-> bug](http://code.google.com/p/chromium/issues/entry?template=Enterprise%20Issue)
-> so we can fix it!
-
-**What happens if the user already has 'consumer Chrome' installed and I try to
-push out 'Enterprise Chrome'? Will they end up with two Chromes?**
-
-> There is only ever one Chrome on the machine. When the MSI notices that
-> consumer Chrome is already there, it will remove it and update the user's
-> shortcuts.
-
-> The next time the user attempts to launch Chrome, it will launch the
-> 'Enterprise Chrome' instead.
-
-> This should look seamless to the user, but sometimes behaves inconsistently.
-> You may want to consider uninstalling 'consumer Chrome' before pushing out the
-> MSI.
-
-**I want to remove 'consumer Chrome' from target machines entirely before
-pushing out 'Enterprise Chrome'. What command can I use to uninstall?**
-
-> You can append several registry keys together with an additional parameter,
-> and execute them.
-
-> HKEY_CURRENT_USER\\Software\\Google\\Update\\ClientState\\{8A69D345-D564-463c-AFF1-A69D9E530F96}\\UninstallString
-> +
-> HKEY_CURRENT_USER\\Software\\Google\\Update\\ClientState\\{8A69D345-D564-463c-AFF1-A69D9E530F96}\\UninstallArguments
-> + ' --force-uninstall'
-
-> The command will end up looking something like
-
-> '\[Path to user's data directory\]\\setup.exe --uninstall --force-uninstall'
-
-**If I uninstall 'consumer Chrome', will that wipe out the user's data?**
-
-> No. Users' data is kept separate from the Chrome installation.
-
-> However, if the user was using a more recent version of Chrome, their profile
-> data may not work in an older version of Chrome and they'll see a warning when
-> they try to run it. You may want to verify that you're pushing out the latest
-> stable channel version of Chrome.
-
-**Auto-Update**
-
-**I see a new version was just released, by my installs don't seem to be
-auto-updating.**
-
-> We typically throttle updates the first few days after an update to watch
-> stability rates and make sure we're pushing out a good update. Not all users
-> will get the update immediately, so you may see some machines auto-update and
-> others not in this timeframe.
-
-> If you require the most up-to-date version immediately, you may want to
-> download the latest MSI and push it out manually.
-
-**Policy**
-
-**What policy settings do I need to use to integrate with my Windows NTLM
-login?**
-
-> Using the AuthServerWhitelist policy, set the value of the policy to the list
-> of the **Domain Controllers' FQDN and the proxy server**. Also, using the
-> AuthSchemes policy, specify **all four** of basic, digest, ntlm, and
-> negotiate.
-
-**I'm trying to force-install an extension that is internal to our network (not
-on the Chrome Web Store), but it's not being force-installed.**
-
-> First, verify that the policy you are applying is being properly picked up by
-> the browser. Navigate to "about:policy" and look for a policy named
-> "ExtensionInstallForcelist" -- your setting should be there. If it is not, it
-> is possible that your policy is under the wrong registry key.
-
-> Second, verify that the extension you built installs manually -- install the
-> extension CRX and verify it installs correctly (you may see some security
-> warnings when installing manually that you will not see when
-> force-installing).
-
-> Third, verify that other extensions from the Chrome Web Store install
-> properly. There is an example in the documentation.
-
-> Lastly, if all of that does not work, it is likely that the URL you specified
-> as part of the policy setting does not point to a valid auto-update XML file.
-> The URL specified in the policy ==must point to the auto-update XML file, not
-> the CRX==.
-
-**I'm trying to set the default search provider, but it's not working.**
-
-> The policy uses a different format for the search provider URL from the format
-> you see when you open the options dialog. Using the 'options dialog format'
-> will actually cause the policy to not be respected.
-
-> Instead of using "%s" in the search URL to denote the search keywords, you
-> must use "{searchTerms}" instead. Using Google's search URL as an example:
-
-> Wrong: http://www.google.com/?q=%s
-
-> Right: http://www.google.com/?q={searchTerms}
-
-**Chrome does not read policy from the Windows registry.**
-
-> Please use GPO instead. Chrome only loads policies from the registry on
-> machines that are part of an Active Directory domain.
-
-**Chrome does not honor policy provided via GPO.**
-
-> Even when using GPO, very few policies still require the machine to be part of
-> an Active Directory domain. See the [Policy
-> List](/administrators/policy-list-3) for more details.
-
-**Didn't Find the Answer?**
-
-If you didn't find the question and answer you were looking for, please [file a
-bug](http://code.google.com/p/chromium/issues/entry?template=Enterprise%20Issue).
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks4.png.sha1 b/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks4.png.sha1
deleted file mode 100644
index 255c832b9d5..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-da302547a41190df7c263ae1965655851a73d295 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks5.png.sha1 b/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks5.png.sha1
deleted file mode 100644
index aa60718f69c..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks5.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-662968d6a18c1a06f861b61fcb0aff165f045866 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks6.png.sha1 b/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks6.png.sha1
deleted file mode 100644
index 7f63de51aba..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/bookmarks6.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f7595764e34a5d98e1cdb241b69538f144d364aa \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/index.md b/chromium/docs/website/site/administrators/complex-policies-on-windows/index.md
deleted file mode 100644
index 0d510704547..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/index.md
+++ /dev/null
@@ -1,245 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: complex-policies-on-windows
-title: Complex policies on Windows
----
-
-[TOC]
-
-## Background
-
-Chrome represents policies as JSON values internally. Up until version 37 all
-Chrome policies were of simple types:
-
-* **Booleans** (example:
- [SafeBrowsingEnabled](https://chromeenterprise.google/policies/#SafeBrowsingEnabled))
-* **Integers** (example:
- [DefaultCookiesSetting](https://chromeenterprise.google/policies/#DefaultCookiesSetting))
-* **Strings** (example:
- [ProxyPacUrl](https://chromeenterprise.google/policies/#ProxyPacUrl))
-
-Additionally, Chrome has supported some policies as **Lists of Strings**
-(example: [URLBlocklist](https://chromeenterprise.google/policies/#URLBlocklist)).
-
-These policy types match what GPO can represent natively on Windows using
-Administrative Template files (ADM or ADMX).
-
-Some policies need more complex values that don't fit well in any of these
-types. For example,
-[ExtensionInstallForcelist](https://chromeenterprise.google/policies/#ExtensionInstallForcelist)
-defines a list of extensions to install automatically. Each extension is defined
-by its extension ID and a remote update URL (to support extensions from private
-stores). This can be easily represented in JSON as a list of objects, where each
-object has two strings:
-
-```
-[
- {
- "id": "public-ext-id-1",
- "update_url": "https://clients2.google.com/service/update2/crx"
- },
- {
- "id": "private-ext-id-2",
- "update_url": "http://www.local/chrome/updates.xml"
- }
-]
-```
-
-Unfortunately there is no native GPO type to represent this and the policy needs
-to be configured as a List of Strings, where each string contains both the ID
-and the update URL separated by a semicolon:
-
-```
-[
- "public-ext-id-1;https://clients2.google.com/service/update2/crx",
- "private-ext-id-2;http://www.local/chrome/updates.xml"
-]
-```
-
-## New in Chrome 37: complex policies
-
-Chrome 37 introduced new policies with complex values that don't fit in any of
-the native GPO or Registry types:
-[RegisteredProtocolHandlers](https://chromeenterprise.google/policies/#RegisteredProtocolHandlers)
-and [Managed
-Bookmarks](https://chromeenterprise.google/policies/#ManagedBookmarks).
-
-There are 3 ways to configure the values for these policies: as a JSON string in
-the GPO editor, as a JSON string in the registry, or as an expanded JSON object
-in the registry.
-
-## JSON values as strings
-
-All of these policies can be configured as strings that contain a JSON value.
-Any JSON editor should able to edit and validate the JSON string, including some
-[online editors](http://google.com/search?q=json%20editor).
-
-JSON can contain simple values:
-
-* Strings are wrapped in quotes: "example string value"
-* Integers are just spelled out: 123
-* Boolean values can be specified as true or false
-
-JSON supports lists of values. The values should be enclosed between \[ and \]
-and separated by commas: \[ "this", "is", "a", "list", "of", "strings" \].
-
-JSON also supports objects (sometimes called dictionaries), which contain a
-string key mapped to any other valid JSON value (which may be a list or another
-object/dictionary): { "key": "string value", "key that maps to integer": 123,
-"key that maps to list": \[ 1, 2, 3 \] }
-
-The examples below will configure the [Managed
-Bookmarks](https://chromeenterprise.google/policies/#ManagedBookmarks)
-policy to build this bookmark structure:
-
-* Google (google.com)
-* YouTube (youtube.com)
-* Chrome links
- * Chromium (chromium.org)
- * List of Policies
- (https://chromeenterprise.google/policies/)
-
-Each bookmark is a JSON object with a "name" key indicating its name, and a
-"url" key indicating the URL or a "children" key that maps to another list of
-bookmarks, to create folders.
-
-The JSON string for the structure listed above is:
-
-```
-[
- {
- "name":"Google",
- "url":"google.com"
- },
- {
- "name":"YouTube",
- "url":"youtube.com"
- },
- {
- "name":"Chrome links",
- "children":[
- {
- "name":"Chromium",
- "url":"chromium.org"
- },
- {
- "name":"List of Policies",
- "url":"https://chromeenterprise.google/policies/"
- }
- ]
- }
-]
-```
-
-[<img alt="image"
-src="/administrators/complex-policies-on-windows/bookmarks4.png">](/administrators/complex-policies-on-windows/bookmarks4.png)
-
-## Option 1: JSON strings in the GPO editor
-
-If you use the ADM or ADMX templates you can just locate the policy to configure
-(in this case, "Managed Bookmarks"), enable it, and set the JSON string in the
-string field for that policy:
-
-[<img alt="image"
-src="/administrators/complex-policies-on-windows/bookmarks5.png">](/administrators/complex-policies-on-windows/bookmarks5.png)
-
-## Option 2: JSON strings in the registry editor
-
-**Note**: Chrome only loads policies directly from the registry on AD enrolled
-machines.
-
-Chrome policies can be configured under Software\\Policies\\Google\\Chrome (or
-Software\\Policies\\Chromium for Chromium) in HKCU or HKLM. For complex
-policies, just create a new String value with the policy name and set the JSON
-string in the Value field.
-
-[<img alt="image"
-src="/administrators/complex-policies-on-windows/bookmarks6.png">](/administrators/complex-policies-on-windows/bookmarks6.png)
-
-## Option 3: expanded JSON in the registry
-
-**Note**: Chrome only loads policies directly from the registry on AD enrolled
-machines.
-
-Chrome will try to load JSON lists and JSON objects/dictionaries directly from
-the registry too, for the new complex policies. This format makes it easier to
-directly edit the policy values in the registry but requires understanding how a
-JSON list and a JSON dictionary can be represented in the registry.
-
-The basic rules are:
-
-* Strings are stored as String Values (right-click on the right side,
- choose New -&gt; String Value)
-* Integers are stored as Dword Values (New -&gt; DWORD (32-bits))
-* Booleans are also stored as Dword Values. Use 0 for false and 1 for
- true.
-
-Objects/dictionaries can contain any of these simple types. Just add the value
-as described above, and use the "Value Name" field to set the name of the entry
-in the dictionary.
-
-If the entry in the dictionary is a list or another dictionary then you can
-create a new Key on the left side of the registry editor. Its name will be used
-for the dictionary key name, and its contents will be interpreted as another
-dictionary.
-
-Lists are represented just like dictionaries, but they key names must be "1",
-"2", "3" and so on. Note that counting starts at 1 and not at 0 (this is what
-the GPO editor does for lists too). Chrome knows the expected policy format
-internally, and will load each entry as a list or object as appropriate.
-
-Here's an example for the Managed Bookmarks configuration listed above. Start by
-creating a new registry Key (these are shown as folders on the left side) named
-"ManagedBookmarks":
-
-[<img alt="image"
-src="/administrators/complex-policies-on-windows/reg1.png">](/administrators/complex-policies-on-windows/reg1.png)
-
-The value of this policy is a list of objects, so this folder will contain other
-subfolders named "1", "2", etc. Start by creating a subfolder named "1":
-
-[<img alt="image"
-src="/administrators/complex-policies-on-windows/reg2.png">](/administrators/complex-policies-on-windows/reg2.png)
-
-The contents of this folder are the keys for the first object inside the list of
-bookmarks. You can now add the 2 strings that declare a bookmark, the "name" and
-the "url". This configuration should be enough to show one bookmark in Chrome.
-
-To add bookmark folders, start by adding a new entry in the main list (see
-folder "3" below) and give the folder a "name" too. But instead of specifying a
-"url", add a new subfolder named "children" that contains the bookmarks for that
-folder. The "children" folder is a list of bookmarks, so it should contain
-subfolders named "1", "2", etc again.
-
-[<img alt="image"
-src="/administrators/complex-policies-on-windows/reg3.png">](/administrators/complex-policies-on-windows/reg3.png)
-
-Each child bookmark of the folder needs to have its "name" and "url" defined
-again:
-
-[<img alt="image"
-src="/administrators/complex-policies-on-windows/reg4.png">](/administrators/complex-policies-on-windows/reg4.png)
-
-## Troubleshooting
-
-The first step to diagnose problems is the internal chrome://policy page. You
-should see your policies listed in that page and their corresponding values.
-
-* If the policy is present and its value is shown too but it doesn't
- seem to work then this might be a new bug. Please file a new report
- at [crbug.com](http://crbug.com) with the Enterprise template.
-* If the policy is present but the value is invalid then there is a
- problem in the JSON configuration.
-* If the policy is not present then it wasn't found by Chrome.
-
-Policies configured via GPO have some delay until they are applied; run the
-gpupdate command to flush them. If you use the registry then note that Chrome
-only loads those policies on machines that are enrolled to an AD domain.
-
-It's generally a good idea to validate your JSON string to make sure it doesn't
-have any invalid constructs; a common source of errors is trailing commas at the
-end of a list or a dictionary, which is not supported in JSON. Use an [online
-JSON validator](http://google.com/search?q=json%20validator) (like
-[JSONLint](http://jsonlint.com/)) to make sure your JSON string is valid.
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg1.png.sha1 b/chromium/docs/website/site/administrators/complex-policies-on-windows/reg1.png.sha1
deleted file mode 100644
index 812d21dd94a..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0184eeedcb0f20c359efd576a287d8efc4d6573e \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg2.png.sha1 b/chromium/docs/website/site/administrators/complex-policies-on-windows/reg2.png.sha1
deleted file mode 100644
index 1b0d763bbf4..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9a74cd54c80c064ce0af01469f32716fde94b01e \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg3.png.sha1 b/chromium/docs/website/site/administrators/complex-policies-on-windows/reg3.png.sha1
deleted file mode 100644
index 5ede675b878..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7b8316767961124aee6b4b027d5cb375ed598005 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg4.png.sha1 b/chromium/docs/website/site/administrators/complex-policies-on-windows/reg4.png.sha1
deleted file mode 100644
index ca0f1a3e44c..00000000000
--- a/chromium/docs/website/site/administrators/complex-policies-on-windows/reg4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7b89c2fb1310b8d6aa5e7264f1076e6637347aa1 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/configuring-other-preferences/index.md b/chromium/docs/website/site/administrators/configuring-other-preferences/index.md
deleted file mode 100644
index 7e596e3520e..00000000000
--- a/chromium/docs/website/site/administrators/configuring-other-preferences/index.md
+++ /dev/null
@@ -1,272 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: configuring-other-preferences
-title: Configuring Other Preferences
----
-
-Not all user preferences are managed through policy, typically because they do
-not need to be managed centrally.
-
-**Preferences vs. Policies**
-
-Preferences and policies are two different methods for controlling the browser's
-behavior. They have different purposes, however:
-
-Preferences:
-
-* Keep state of a user's personal browsing experience.
-* Are usually unique to each user.
-* Are writable by the user, as they live in the user's directory in a
- text file.
-* Are often under-the-hood, technical settings that don't necessarily
- make sense to pre-set per user or lock in with policy.
-* Use the master_preferences file as a template if no Preferences
- already exist. **Preferences are copied from master_preferences
- ==only once==; changes to the master_preferences file made after
- that are not respected!**
-
-Policies:
-
-* Are rules that the user's browsing experience must abide by.
-* Do not keep state of the user's experience.
-* Are usually applied to groups of users; they are not necessarily
- unique to each user.
-* Are not (typically) writable by the user.
-* Are clearly enumerated and are intended for the admin to use & set.
-* Are set only by the admin in special locations (registry, MCX,
- /etc/...).
-* Policies that should be editable by the user are called "recommended
- policies" and offer a better alternative than the master_preferences
- file. Their contents can be changed and are respected as long as the
- user has not modified the value of that preference themselves.
-
-There are several notable preferences that are also policies, "homepage" being
-the most common.
-
-Policies take precedence to preferences and preferences take precedence to
-recommended policies. If "homepage" is specified in both the policies, and in
-the "master_preferences" file, policies will always override.
-
-**Should I use a Preference, or a Policy?**
-
-Prefer policies to configure Chrome on managed computers. Use recommended
-policies for settings that users should be able to change, and use mandatory
-policies for settings that users should not be able to change. A
-master_preferences file may be used to make default settings for new users,
-though doing so has some drawbacks:
-
-* The contents of a master_preferences file are copied once per
- profile at profile creation. As a result, it is not possible to
- automatically propagate modifications to a master_preferences file
- to users.
-* The preferences that may be set via master_preferences are not
- guaranteed to work in the future. It is possible that preferences
- may change or be removed such that values in master_preferences
- files would be ignored.
-
-### The Gritty Details
-
-Preferences are kept in a file named "Preferences", which every Chromium /
-Google Chrome user will have in their own user directory. This Preferences file
-is a text file that contains JSON markup. Going through and editing every user's
-Preferences file to deploy a behavior change is really cumbersome and some
-preferences are protected by cryptographic hashes and can not be manually
-edited, so there are easier ways to manage this:
-
-* When users start Chromium / Google Chrome for the first time, they
- don't yet have any Preferences file.
-* A file named "master_preferences" located next to chrome.exe or
- chromium executable, is used as a template for what becomes users'
- Preferences file. On a system with Chrome installed from an MSI,
- this will be C:\\Program Files
- (x86)\\Google\\Chrome\\Application\\master_preferences
- * On **Mac OS X**, for **Google Chrome**, this file is either of
- ~/Library/Application Support/Google/Chrome/Google Chrome Master
- Preferences or /Library/Google/Google Chrome Master Preferences
- * On **Mac OS X**, for **Chromium**, this file is either of
- ~/Library/Application Support/Chromium/Chromium Master
- Preferences or /Library/Application Support/Chromium/Chromium
- Master Preferences
-* You only need to create and populate the master_preferences file
- when you deploy Google Chrome, and all users on that machine will
- get those settings when they first start Chromium / Google Chrome.
-
-The master_preferences file, like each user's Preferences file, is simply a text
-file that contains JSON markup, and will look something like this:
-
-```none
-{
-  "homepage" : "http://www.chromium.org/",
-  "homepage_is_newtabpage" : false,
-  "distribution" : {
-      ...more stuff here ...
-  }
-}
-```
-
-Some of the preferences should be obvious, but some are not entirely clear --
-they are described at the end of this document.
-
-Moreover, you'll notice that some of these preferences are managed by policy.
-Note that **no matter what is in the master_preferences or Preferences files,
-policy always takes precedence.** Setting the home page in both the Preferences
-file and policy means that the home page in policy will be the one that Chromium
-/ Google Chrome uses, and the user will not be able to edit it.
-
-**Preferences List**
-
-So, what preferences should you actually use? There are actually lots and lots
-of preferences, most of which you won't really care about.
-
-Here is a sample master_preferences list that may be of interest (this is a
-fully-functional master_preferences file):
-
-{
-
-"homepage": "http://www.google.com",
-
-"homepage_is_newtabpage": false,
-
-"browser": {
-
-"show_home_button": true
-
-},
-
-"session": {
-
-"restore_on_startup": 4,
-
-"startup_urls": \[
-
-"http://www.google.com/ig"
-
-\]
-
-},
-
-"bookmark_bar": {
-
-"show_on_all_tabs": true
-
-},
-
-"sync_promo": {
-
-"show_on_first_run_allowed": false
-
-},
-
-"distribution": {
-
-"import_bookmarks_from_file": "bookmarks.html",
-
-"import_bookmarks": true,
-
-"import_history": true,
-
-"import_home_page": true,
-
-"import_search_engine": true,
-
-"ping_delay": 60,
-
-"do_not_create_desktop_shortcut": true,
-
-"do_not_create_quick_launch_shortcut": true,
-
-"do_not_create_taskbar_shortcut": true,
-
-"do_not_launch_chrome": true,
-
-"do_not_register_for_update_launch": true,
-
-"make_chrome_default": true,
-
-"make_chrome_default_for_user": true,
-
-"system_level": true,
-
-"verbose_logging": true,
-
-"browser": {
-
-"confirm_to_quit": true,
-
-}
-
-},
-
-"first_run_tabs": \[
-
-"http://www.example.com",
-
-"http://welcome_page",
-
-"http://new_tab_page"
-
-\]
-
-}
-
-Most of these settings should be self-explanatory. The most interesting settings
-are:
-
-* import_bookmarks_from_file: silently imports bookmarks from the
- given HTML file.
-* import_\*: each of these import parameters will trigger automatic
- imports of settings on first run.
-* ping_delay: RLZ ping delay in seconds.
-* do_not_create_any_shortcuts: suppress creation of all shortcuts
- (including the Start Menu shortcut)
-* do_not_create_taskbar_shortcut: only supported on Windows 8 and
- below -- TaskBar shortcuts are never created on Windows 10
-* do_not_launch_chrome: doesn't launch chrome after the first install.
-* do_not_register_for_update_launch: does not register with Google
- Update to have Chrome launched after install.
-* make_chrome_default: makes chrome the default browser.
-* make_chrome_default_for_user: makes chrome the default browser for
- the current user.
-* system_level: install chrome to system-wide location.
-* verbose_logging: emit extra details to the installer's log file to
- diagnose install or update failures.
-* first_run_tabs: these are the tabs & URLs shown on the first launch
- (and only on first launch) of the browser.
-* sync_promo.show_on_first_run_allowed: prevents the sign-in page from
- appearing on first run.
-* browser/confirm_to_quit: Supported only on MacOS can be used to
- prevent the confirmation prompt on quitting the browser. Note that
- it needs to be in the "distribution" section of the file.
-
-### Pre-installed Bookmarks
-
-To add pre-installed bookmarks, you have to create a file that contains all of
-your bookmarks, then give the right signals for a Chrome install to import them
-when a user runs Chrome for the first time.
-
-1. First, set up bookmarks in Chrome as you'd like them to appear to
- the end-user
-2. Go to the Wrench Menu -&gt; Bookmark Manager -&gt; Organize
- Bookmarks -&gt; Export Bookmarks
-3. The file that is saved/exported contains all of the bookmark data
- that will be imported.
-
-To instruct an end-user's Chrome to import these bookmarks, include these
-elements in your master_preferences:
-
-{ "distribution": { "import_bookmarks": false, "import_bookmarks_from_file":
-"c:\\\\path\\\\to\\\\your\\\\bookmarks.html" }, "bookmark_bar": {
-"show_on_all_tabs": true } }
-
-The relevant entries are:
-
-* "import_bookmarks_from_file": needs to have the path to bookmark
- file. **The backslashes in the path must be escaped by a backslash;
- use double-backslashes. Also be sure that this file exists at the
- point that the user first runs Chrome.**
-* "import_bookmarks" should probably be false, so your imported
- bookmarks don't get overwritten.
-* "show_on_all_tabs": can either be true or false, whether we've
- promised the partner to show the bookmarks bar on by default or not. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/configuring-policy-for-extensions/index.md b/chromium/docs/website/site/administrators/configuring-policy-for-extensions/index.md
deleted file mode 100644
index 438c8b992cb..00000000000
--- a/chromium/docs/website/site/administrators/configuring-policy-for-extensions/index.md
+++ /dev/null
@@ -1,227 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: configuring-policy-for-extensions
-title: Configuring Apps and Extensions by Policy
----
-
-Policies can also be configured for extensions that support policy management
-via the [managed storage
-API](http://developer.chrome.com/extensions/manifest/storage). The sample
-[Managed
-Bookmarks](http://developer.chrome.com/extensions/examples/extensions/managed_bookmarks.zip)
-extension can be used to configure Chrome bookmarks via a policy, for example.
-Extensions that support policy management are listed in **chrome://policy**,
-together with the policies configured for them.
-
-This page documents how to configure policies for extensions, using the Managed
-Bookmarks extension as an example. Extensions can also be [installed via
-policy](http://www.chromium.org/administrators/policy-list-3#ExtensionInstallForcelist);
-the examples below assume that the Managed Bookmarks extension has been loaded
-as an unpacked extension from **chrome://extensions** and got the extension ID
-"gihmafigllmhbppdfjnfecimiohcljba".
-
-This extension supports two policies: "Bookmarks Bar" and "Other Bookmarks".
-Each is a list of bookmarks, where each bookmark is a dictionary that contains a
-"title" and either a "url" or a list of "children". The examples below configure
-a "Chromium" bookmark to "chromium.org" and a "Videos" folder with a bookmark to
-"youtube.com".
-
-**Chrome OS**
-
-Policies for Chrome OS must be configured via the admin console at
-<https://admin.google.com>.
-
-The policy for the extension can be uploaded in a txt file after the extension
-has been selected to be configured. Note that this option only appears for
-extensions that support policy configuration.
-
-The txt file should contain a valid JSON object, mapping a policy name to an
-object describing the policy. For now only the policy value can be configured;
-other options may be added in the future, such as the policy level.
-
-Example txt file for simple policy values:
-
-```
-{
- "Server": {
- "Value": "http://my.server/api"
- },
- "CloudSync": {
- "Value": true
- },
-
- "Allowlist": {
- "Value": [ "foo", "bar", "baz" ]
- }
-}
-```
-
-The following example txt file is equivalent to the bookmarks configurations
-above:
-
-```
-{
- "Bookmarks Bar": {
- "Value": [
- {
- "title": "Chromium",
- "url": "chromium.org"
- },
- {
- "title": "Videos",
- "children": [
- {
- "title": "YouTube",
- "url": "youtube.com"
- }
- ]
- }
- ]
-}
-```
-
-## Windows
-
-Policies for extensions should be written to the registry under
-`HKLM\Software\Policies\Google\Chrome\3rdparty\extensions\gihmafigllmhbppdfjnfecimiohcljba\policy`
-or under
-`HKLM\Software\Policies\Chromium\3rdparty\extensions\gihmafigllmhbppdfjnfecimiohcljba\policy`
-for Chromium. It's also possible to use HKCU instead of HKLM. The equivalent
-path can be configured via GPO.
-
-Example reg file to configure bookmarks (TODO: this hasn't been verified yet):
-
-```
-Windows Registry Editor Version 5.00
-[HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\3rdparty\extensions\gihmafigllmhbppdfjnfecimiohcljba\policy\Bookmarks Bar\1]
-"title"="Chromium"
-"url"="chromium.org"
-[HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\3rdparty\extensions\gihmafigllmhbppdfjnfecimiohcljba\policy\Bookmarks Bar\2]
-"title"="Videos"
-[HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\3rdparty\extensions\gihmafigllmhbppdfjnfecimiohcljba\policy\Bookmarks Bar\2\children\1]
-"title"="YouTube"
-"url"="youtube.com"
-```
-
-## Linux
-
-Policies for Chrome are configured via JSON files placed in
-`/etc/opt/chrome/policies/managed/` (for Chrome) or
-`/etc/chromium/policies/managed/` (for Chromium). These JSON files should contain
-dictionaries that map a policy name to its value. The special 3rdparty key can
-be used to configure policies for Chrome components. Under that key, the
-extensions key is used to configure extensions, by mapping an extension's ID to
-its policies. For example:
-
-```
-{
- "ShowHomeButton": true,
- "3rdparty": {
- "extensions": {
- "gihmafigllmhbppdfjnfecimiohcljba": {
- "Bookmarks Bar": [
- {
- "title": "Chromium",
- "url": "chromium.org"
- },
- {
- "title": "Videos",
- "children": [
- {
- "title": "YouTube",
- "url": "youtube.com"
- }
- ]
- }
- ]
- }
-}
-```
-
-In this configuration, ShowHomeButton is one of the Chrome policies, and the
-policies for the extension are listed under the gihmafigllmhbppdfjnfecimiohcljba
-key.
-
-## Mac
-
-The policies for the extension can be configured via MCX preferences for the
-`com.google.Chrome.extensions.gihmafigllmhbppdfjnfecimiohcljba` bundle, or for the
-`org.chromium.Chromium.extensions.gihmafigllmhbppdfjnfecimiohcljba` bundle if
-using Chromium. This can be done by creating a plist file with the configuration
-and importing it using dscl:
-
-```
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>com.google.Chrome.extensions.gihmafigllmhbppdfjnfecimiohcljba</key>
- <dict>
- <key>Bookmarks Bar</key>
- <dict>
- <key>state</key>
- <string>always</string>
- <key>value</key>
- <array>
- <dict>
- <key>title</key>
- <string>Chromium</string>
- <key>url</key>
- <string>chromium.org</string>
- </dict>
- <dict>
- <key>title</key>
- <string>Videos</string>
- <key>children</key>
- <array>
- <dict>
- <key>title</key>
- <string>YouTube</string>
- <key>url</key>
- <string>youtube.com</string>
- </dict>
- </array>
- </dict>
- </array>
- </dict>
- </dict>
-</dict>
-</plist>
-```
-
-The first key indicates the bundle ID that is to be configured. Note that each
-policy maps first to its metadata, and its value is listed inside the value key.
-The state key is used by the MCX preferences to determine how often this policy
-should be enforced; setting it to always keeps this policy in place at all
-times. This configuration can be imported with dscl using an administrator
-account:
-
-```
-$ dscl -u admin_username /Local/Default -mcximport /Computers/local_computer configuration.plist
-```
-
-Substitute `admin_username` with a valid administrator username, and
-`configuration.plist` with the path to the plist configuration listed above. If
-dscl complains that the path is invalid then you can create a node for the local
-computer with these commands:
-
-```
-$ GUID=\`uuidgen\`
-$ ETHER=\`ifconfig en0 | awk '/ether/ {print $2}'\`
-$ dscl -u admin_username /Local/Default -create /Computers/local_computer
-$ dscl -u admin_username /Local/Default -create /Computers/local_computer RealName "Local Computer"
-$ dscl -u admin_username /Local/Default -create /Computers/local_computer GeneratedUID $GUID
-$ dscl -u admin_username /Local/Default -create /Computers/local_computer ENetAddress $ETHER
-```
-
-The preferences system can be told to propagate these changes immediately:
-
-```
-$ sudo mcxrefresh -n username</td>
-```
-
-If `username` is running Chrome with the Managed Bookmarks extension then Chrome
-will load this policy in the next 10 seconds. Pressing "Reload policies" in
-**chrome://policy** loads them immediately.
diff --git a/chromium/docs/website/site/administrators/diagnostic-mode/diagmode_wiki.png.sha1 b/chromium/docs/website/site/administrators/diagnostic-mode/diagmode_wiki.png.sha1
deleted file mode 100644
index 573b655fca2..00000000000
--- a/chromium/docs/website/site/administrators/diagnostic-mode/diagmode_wiki.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f82ca621e2e2ecbc2f8dd829939bee51047ba545 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/diagnostic-mode/index.md b/chromium/docs/website/site/administrators/diagnostic-mode/index.md
deleted file mode 100644
index 79524854bbc..00000000000
--- a/chromium/docs/website/site/administrators/diagnostic-mode/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: diagnostic-mode
-title: Diagnostic Mode
----
-
-Chromium (and Google Chrome) comes with a set of built-in diagnostic tests that
-any user can run. These tests can help determine the root cause of the following
-problems.
-
-* Chrome fails to start
-* Chrome crashes quickly after started
-* Chrome starts but any tab created crashes or fails to load
-* Chrome is extremely slow
-
-**Work in Progress** : Diagnostic mode is currently only available in the
-tip-of-tree version of Chromium for Windows and in the developer channel version
-of Google Chrome for Windows. Furthermore, only a small set of diagnostic tests
-currently run (more are planned in the future).
-
-Diagnostic mode is an environment that runs a set of tests before the browser
-starts. These tests vary in sophistication, from trivial checks that critical
-files exist, to more complex (and time consuming) tests that test the integrity
-of the key databases. Each test can pass, fail or simply be skipped if the test
-is not applicable. The output should be used as as a starting point for further,
-more specific, investigation and troubleshooting.
-
-### Privacy
-
-Diagnostic mode does not automatically send any information to Google. It is up
-to the user to copy the text output from running diagnostic mode that they
-consider appropriate and helpful for others to see. Furthermore, care has been
-taken to expose little to no personal information in the diagnostic output so
-that users can feel comfortable sharing it with internet help groups.
-
-### How to run (windows only)
-
-1. Make sure no instances of chrome.exe are running. Check in the
- Windows Task Manager for any zombie chrome.exe processes and end
- them if necessary.
-2. Open a command line session (cmd.exe)
-3. Change directory (cd) to the directory of chrome.exe, for example,in
- Vista, regular chrome install is in C:\\Users\\&lt;user
- name&gt;\\AppData\\Local\\Google\\Chrome\\Application
-4. Type chrome.exe --diagnostics \[enter\]
-
-A second console window will open and the tests will run automatically, and you
-should see something like this:
-
-[<img alt="image"
-src="/administrators/diagnostic-mode/diagmode_wiki.png">](/administrators/diagnostic-mode/diagmode_wiki.png)
-
-This shows a run where all tests passed. If a test fails it will be marked with
-a **\[FAIL\]** entry. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/1.png.sha1 b/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/1.png.sha1
deleted file mode 100644
index 5e12c5c7f52..00000000000
--- a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-128a04f141e28426d62287c4d091b8590bb71617 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/2.png.sha1 b/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/2.png.sha1
deleted file mode 100644
index 4715c09685c..00000000000
--- a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c35c49140b4ca6423a48fba78f8a73a264d778f4 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/3.png.sha1 b/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/3.png.sha1
deleted file mode 100644
index 2e706fb342b..00000000000
--- a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ea8d773c01f8fae0881e6b28ca2530b0ed8d01a8 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/index.md b/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/index.md
deleted file mode 100644
index 1c2129edfe9..00000000000
--- a/chromium/docs/website/site/administrators/err_eset_anti_virus_ssl_interception/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: err_eset_anti_virus_ssl_interception
-title: ESET Anti-Virus
----
-
-Some home security / anti-virus software can interact badly with Chrome. If you
-have been directed here you may need to configure your anti-virus software to
-allow Chrome to access the Internet.
-
-**ESET Smart Security**
-
-Under \`Setup’ click \`Toggle Advanced mode’:
-
-[<img alt="image"
-src="/administrators/err_eset_anti_virus_ssl_interception/1.png">](/administrators/err_eset_anti_virus_ssl_interception/1.png)
-
-Once in advanced mode, click \`Enter entire advanced setup tree’:
-
-[<img alt="image"
-src="/administrators/err_eset_anti_virus_ssl_interception/2.png">](/administrators/err_eset_anti_virus_ssl_interception/2.png)
-
-Find \`SSL’ under \`Protocol filtering’ and select \`Do not scan SSL protocol’:
-
-[<img alt="image"
-src="/administrators/err_eset_anti_virus_ssl_interception/3.png">](/administrators/err_eset_anti_virus_ssl_interception/3.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/index.md b/chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/index.md
deleted file mode 100644
index 78c36371cdd..00000000000
--- a/chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: err_ssl_weak_server_ephemeral_dh_key
-title: ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY
----
-
-See <https://support.google.com/chrome?p=dh_error>
-
-<img alt="image"
-src="http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D499'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Page+Redirect%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D500'%3D197'dim'%5C%3D10'%3D10'%3D500'%3D197'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&sig=RmVa16ZL_UQQmL8IDyOROP2fErI"
-height=200 width=500> \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/redirect-dh.xml b/chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/redirect-dh.xml
deleted file mode 100644
index 67d282f6a30..00000000000
--- a/chromium/docs/website/site/administrators/err_ssl_weak_server_ephemeral_dh_key/redirect-dh.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<Module>
- <ModulePrefs title="Page Redirect"/>
- <Content type="html">
- <![CDATA[
- <div>
- </div>
- <script>top.location = "https://support.google.com/chrome?p=dh_error"</script>
- <script>window.location = "https://support.google.com/chrome?p=dh_error"</script>
- ]]>
- </Content>
-</Module>
diff --git a/chromium/docs/website/site/administrators/frequently-asked-questions/index.md b/chromium/docs/website/site/administrators/frequently-asked-questions/index.md
deleted file mode 100644
index 3e9cf7a060d..00000000000
--- a/chromium/docs/website/site/administrators/frequently-asked-questions/index.md
+++ /dev/null
@@ -1,230 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: frequently-asked-questions
-title: Frequently Asked Questions
----
-
-****What is Google Chrome?****
-
-> **Google Chrome is a new, fast web browser from Google.**
-
-****Why should we use Google Chrome? What would it give my organization?****
-
-> **Google Chrome offers a number of benefits, including security, speed, stability, and simplicity. Find out about all the features of Google Chrome [here](http://google.com/chrome).**
-
-**What is Google Chrome for Enterprise? Is it a different build than the Google
-Chrome I install from google.com?**
-
-> Google Chrome for Enterprise is just Google Chrome. Every Google Chrome has
-> the same features, so it's equivalent to the Google Chrome you can download
-> from google.com.
-
-**What enterprise features does Chrome offer?**
-
-> Support for (group) policy and centralized configuration (list of supported
-> policies [here](/administrators/policy-list-3)), a specialized MSI installer,
-> and control over auto-update frequency.
-
-**Does Google Chrome support enterprise features on all platforms?**
-
-> Yes.
-
-**How do I install Google Chrome?**
-
-> You can download Google Chrome from <http://www.google.com/chrome>.
-
-**Do you have an offline installer or an MSI?**
-
-> Yes. You can download the latest MSI
-> [here](https://enterprise.google.com/chrome/chrome-browser/).
-
-**Can I roll back Google Chrome to a previous version?**
-
-> No - rollback is not supported.
-
-> To get to a previous version (which would not be supported by Google), you
-> would need to uninstall your current version, delete every user's saved
-> profile data, and re-install the older version. Users' personal profile data
-> is kept in:
-
-> On Windows XP: C:\\Documents and Settings\\&lt;user&gt;\\Local
-> Settings\\Application Data\\Google\\Chrome\\User Data
-
-> On Windows Vista / 7:
-> C:\\Users\\&lt;user&gt;\\AppData\\Local\\Google\\Chrome\\User Data
-
-> This means users will lose their bookmarks, history, etc., so use this method
-> with extreme caution.
-
-**Are there older versions of the MSI available?**
-
-> No, we do not currently make older versions of the MSI available, as they are
-> no longer supported.
-
-**How can I install per-system instead of per-user?**
-
-> The MSI will only install at system-level, which means all users on the
-> machine will have access to the same instance / version of Google Chrome.
-
-**Does Google Chrome install over itself? What if users already have it
-installed?**
-
-> Google Chrome does not install over itself. It first checks if it is already
-> installed at the same elevation level.
-
-> However, if Google Chrome is already installed by the user at user-level,
-> installing it system-level will remove the user-level installs and replace
-> them with a system-level install. User/profile data would remain.
-
-**How do I control Google Chrome's settings?**
-
-> You can control and lock down user preferences through [Group Policy
-> settings](/administrators/windows-quick-start) on Windows, [MCX configuration
-> on Mac](/administrators/mac-quick-start), and [JSON files in special
-> directories on Linux](/administrators/linux-quick-start). For Windows, it is
-> recommended to use Group Policy vs. preferences files because only Group
-> Policy can be enforced.
-
-**What settings does Google Chrome allow an administrator to configure?**
-
-> A list of supported policies is [here](/administrators/policy-list-3).
-
-**Does Google Chrome allow me to set mandatory preferences and recommended
-preferences through policy?**
-
-> Yes. On Windows, you can set policies in HKEY_LOCAL_MACHINE and
-> HKEY_CURRENT_USER, respectively. On Linux, set the policy files under
-> /etc/opt/chrome/policies/managed and /etc/opt/chrome/policies/recommended,
-> respectively.
-
-**Do you have group policy templates, or an example of a policy file?**
-
-> Yes. You can find group policy templates
-> [here](/administrators/policy-templates).
-
-**Where can I get a policy template for Google Chrome for Mac?**
-
-> The template is bundled into the application package itself.
-
-**What if I need to pre-configure a setting that is not a supported policy?**
-
-> You can put some preferences into a file called "master_preferences" next to
-> the Google Chrome executable, and those will be interpreted as part of the
-> user's preferences. You can find out more about this technique
-> [here](/administrators/configuring-other-preferences).
-
-**What if users have already installed Chrome themselves? Will those Chromes
-respect policies I set?**
-
-> Yes.
-
-**How do I pre-install extensions?**
-
-> Information on pre-installing extensions is
-> [here](/administrators/pre-installed-extensions).
-
-****How do I turn off auto-updates?****
-
-> **Although it is not recommended, you can find out how to turn off
-> auto-updates [here](/administrators/turning-off-auto-updates).**
-
-**How often does Google Chrome update? How many versions per year should one
-expect?**
-
-> Google Chrome's stable channel updates often. You can see how many major and
-> minor updates there were to the stable channel on
-> <http://googlechromereleases.blogspot.com>
-
-**Where do I go to find out about Google Chrome updates? How do I know a new
-update is coming?**
-
-> Follow the updates on <http://googlechromereleases.blogspot.com>. We suggest
-> adding this as one of your regular RSS feeds. We post here every time there is
-> a new release of any channel.
-
-**Does Google Chrome auto-update, even if the users on a machine do not have
-administrative rights?**
-
-> Yes.
-
-**Where can I find release notes for each version?**
-
-> **<http://googlechromereleases.blogspot.com>** has high-level release notes
-> and lists security fixes for each release. We suggest you follow this blog.
-
-**How can I get early warning and information about security updates?**
-
-> Subscribing to the blog at <http://googlechromereleases.blogspot.com> will
-> give you information about security updates as soon as they are public; this
-> is the right list to watch.
-
-**How many versions back do you support?**
-
-> We **only** support the most current stable channel release. Older releases
-> are not supported.
-
-**How do I know what the most current version of Google Chrome is for Windows?**
-
-> We've created a utility at <https://omahaproxy.appspot.com/win> to list the
-> current stable version on Windows.
-
-**How do I know what the most current version of Google Chrome is for other
-platforms?**
-
-> As above, <https://omahaproxy.appspot.com/viewer> provides a list of current
-> revisions.
-
-**Can I get phone or email support?**
-
-> Yes, if you are a Google Apps for Business customer. Call the same number, use
-> the same email address, or file a ticket via your control panel the same way
-> you do for any Google Apps issues. Click
-> [here](http://support.google.com/enterprisehelp/bin/answer.py?hl=en&answer=138863)
-> for information on how to access the Google Enterprise Support Portal.
-
-**What other support resources are available?**
-
-> Google Chrome has a full [help
-> center](http://www.google.com/support/chrome/?hl=en-US), along with a [help
-> forum](http://www.google.com/support/forum/p/Chrome?hl=en&utm_source=HC&utm_medium=leftnav&utm_campaign=chrome),
-> and [public bug tracker](http://code.google.com/p/chromium/issues/list).
-
-**I found a bug in Chrome that I need fixed. Who should I contact and when can I
-expect it fixed?**
-
-> [Please file a bug](http://code.google.com/p/chromium/issues/entry) in our
-> public issue tracker. You may want to search for any other similar bugs to
-> make sure the issue isn't already being resolved.
-
-> Unfortunately, we cannot give exact timing on when specific issues will be
-> fixed. You can follow the public bug to see when changes are made, when it is
-> marked as fixed and closed.
-
-> If you have support from Google via Google Apps subscription, please contact
-> Google as you would for a Google Apps issue.
-
-**Google Chrome doesn't work with some of our internal applications. Will you
-fix this?**
-
-> Most of these issues are not actually bugs in Google Chrome -- the
-> applications themselves were written for a specific web browser, and do not
-> handle other browsers properly. You may want to contact whoever administrates
-> those applications and ask about browser compatibility, as Google Chrome
-> cannot fix those issues.
-
-> Of course, if you do find issues that are true bugs in Google Chrome (pages
-> crash, it shows web pages differently than Safari, etc.), then [please let us
-> know](http://code.google.com/p/chromium/issues/entry) by filing a bug.
-
-**We want to deploy Google Chrome, but we have legacy applications that don't
-work in it. What can we do?**
-
-> There are a couple of options in this scenario:
-
-> 1. Update the legacy application to work on modern browsers (if possible)
-
-> 2. Use Chrome's [legacy browser
-> support](https://support.google.com/chrome/a/answer/3019558?hl=en) to enable
-> loading legacy applications in a legacy browser. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/guide-for-chrome-os-saml-sso-smart-card-integration/index.md b/chromium/docs/website/site/administrators/guide-for-chrome-os-saml-sso-smart-card-integration/index.md
deleted file mode 100644
index bb8f231ab30..00000000000
--- a/chromium/docs/website/site/administrators/guide-for-chrome-os-saml-sso-smart-card-integration/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: guide-for-chrome-os-saml-sso-smart-card-integration
-title: Guide for Chrome OS SAML SSO smart card integration
----
-
-## Objective
-
-Document the requirements for third-party Identity Providers in order to
-integrate with Chrome OS smart card based user login.
-
-## Background
-
-Starting from version 83, Chrome OS supports authenticating OS users using smart
-cards (instead of passwords). A smart card is a physical device that can
-securely store private keys and certificates, and, when inserted into a smart
-card reader, can be used in order to perform private key operations and
-authenticate the user.
-
-The Chrome OS smart card based user authentication is based on the SAML SSO
-functionality. This means that the smart card based authentication has to be set
-up by the administrator on the side of the third-party identity provider (IdP)
-that is used in the given Chrome OS deployment.
-
-After the user successfully authenticated using a smart card at the IdP website
-on Chrome OS Login Screen, the user profile associated with the certificate will
-be created on the Chromebook. Subsequent logins of this user may then be handled
-by Chrome OS in the “offline” mode, without reaching out to the IdP (note that
-this can be customized using the
-[SAMLOfflineSigninTimeLimit](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=SAMLOfflineSigninTimeLimit)
-policy).
-
-Note that the smart card based authentication is NOT implemented for regular
-Gaia users.
-
-## Overview
-
-Requirements for the Identity Provider in order to be compatible with Chrome OS
-smart card based user authentication:
-
- The authentication should be performed using the standard TLS client
- authentication.
- Exactly one certificate from the smart card has to be used during the
- authentication.
- (Currently, only TLS 1.2 is supported; in the future, the support of TLS 1.3
- will be added into Chrome OS as well.
- Note that using multiple client certificates during a single authentication
- session is NOT supported.)
-
- The key on the smart card should be an RSA key.
- The key size should be 2048 bits (recommended) or 1024 bits (NOT
- recommended).
- (I.e., the elliptic-curve cryptography is currently NOT supported.)
-
- The client certificate must allow signature operations using the
- RSASSA-PKCS1-v1_5 signature scheme.
- At least SHA-1 should be supported if the customer is going to use this on
- Chromebooks equipped with the TPM 1.2 chips; it’s also recommended to
- additionally support SHA-256/SHA-384/SHA-512.
- (I.e., the certificates that only allow decryption are NOT supported, and
- the RSA-PSS signature algorithm is NOT supported too.)
-
- The smart card should be a PIV or a CAC contact card; some other types of
- cards are also supported.
- (There are many various types of cards and card profiles; the best way of
- checking for compatibility with Chrome OS is to try using the card on a
- Chromebook for visiting a website inside a user session, using the CSSI
- smart card middleware according to this Help Article:
- [support.google.com/chrome/a/answer/7014689](https://support.google.com/chrome/a/answer/7014689).)
-
-Other notes:
-
- The user’s Chromebook must be managed (“enrolled”).
- The Chrome OS administrator has to configure several special device-level
- policies in order to enable the smart card support (the details of the admin
- configuration will be described in a separate document).
-
- The certificate expiration or revocation are NOT automatically checked by
- Chrome OS. Instead, the administrator should enforce the user to
- periodically go through the online login process, allowing the IdP to
- perform all necessary checks.
-
- When the certificate on the user’s smart card is changed, the users profile
- on the Chromebook will have to be recreated, wiping out all their locally
- cached data.
- (That’s caused by the fact that the user’s profile is cryptographically
- bound to the key that is stored on the card. However, in the future Chrome
- OS will support re-binding the user’s profile to new keys, allowing to
- update the smart card without losing locally cached data.)
-
- The set of supported smart card readers is documented on the page of the
- CCID free software driver:
- [ccid.apdu.fr/ccid/section.html](https://ccid.apdu.fr/ccid/section.html) \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/index.md b/chromium/docs/website/site/administrators/index.md
deleted file mode 100644
index 0694d0e3670..00000000000
--- a/chromium/docs/website/site/administrators/index.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-breadcrumbs: []
-page_name: administrators
-title: Documentation for Administrators
----
-
-This page describes the features and details of Chromium’s central management of
-policies and preferences.
-
-Chromium supports methods of managing the browser's behavior centrally, through
-group policy, MCX files, and external configuration files. This gives you, as an
-administrator, a way to manage the installations of Chromium-based browsers in
-your organization.
-
-These policies are strictly intended to be used to configure instances of Chrome
-internal to your organization. Use of these policies outside of your
-organization (for example, in a publicly distributed program) is considered
-malware and will likely be labeled as malware by Google and anti-virus vendors.
-
-**Getting Started**
-
-* [Windows Quick Start](/administrators/windows-quick-start)
-* [Mac Quick Start](/administrators/mac-quick-start)
-* [Linux Quick Start](/administrators/linux-quick-start)
-* [Turning off Auto-Updates](/administrators/turning-off-auto-updates)
-* [Full list of supported
- Policies](https://chromeenterprise.google/policies/)
-
-**Full Documentation**
-
-* [Common problems and
- solutions](/administrators/common-problems-and-solutions)
-* [Policy templates](/administrators/policy-templates)
-* [Configuring other preferences that are not
- policies](/administrators/configuring-other-preferences)
-* [Configuring Apps and Extensions by
- Policy](/administrators/configuring-policy-for-extensions)
-* [Pre-installing
- Extensions](/administrators/pre-installed-extensions)
-* [Frequently Asked
- Questions](/administrators/frequently-asked-questions)
-* [Supported directory path
- variables](/administrators/policy-list-3/user-data-directory-variables)
-* [Known
- Issues](http://code.google.com/p/chromium/issues/list?can=2&q=Feature%3DEnterprise)
-* [iOS MDM Policy Format](/administrators/ios-mdm-policy-format)
-* [Advanced Integration for SAML SSO on Chrome
- Devices](/administrators/advanced-integration-for-saml-sso-on-chrome-devices)
-* [Guide for Chrome OS SAML SSO smart card
- integration](/administrators/guide-for-chrome-os-saml-sso-smart-card-integration)
-* [Complex policies on
- Windows](/administrators/complex-policies-on-windows)
-* [Policies on
- Webview](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/webview_policies.md)
-* [Administrative Log Messages](/administrators/log-messages)
-
-You can view all of the Enterprise feature requests and bugs sorted by their
-milestone on the [Chromium bug
-tracker](http://code.google.com/p/chromium/issues/list?can=2&q=Cr%3DEnterprise&mode=grid&y=&x=Mstone&cells=tiles). \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/installation/index.md b/chromium/docs/website/site/administrators/installation/index.md
deleted file mode 100644
index 48d942cac3c..00000000000
--- a/chromium/docs/website/site/administrators/installation/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: installation
-title: Google Chrome Installation
----
-
-### Standard Meta-installer
-
-The standard Google Chrome meta-installer can be downloaded from
-<https://www.google.com/chrome/>.
-
-### MSI
-
-The MSI can be downloaded from <https://www.google.de/work/chrome/browser/>. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/ios-mdm-policy-format/index.md b/chromium/docs/website/site/administrators/ios-mdm-policy-format/index.md
deleted file mode 100644
index 3cf3bcb902c..00000000000
--- a/chromium/docs/website/site/administrators/ios-mdm-policy-format/index.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: ios-mdm-policy-format
-title: iOS MDM Policy Format
----
-
-Policy Support on Chrome on iOS is being removed in Chrome 48 as part of
-Chrome's move to WKWebView where supporting many of the policies was not
-possible.
-
-Policies can be configured for Chrome on iOS via MDM starting with version 35.
-
-The iOS device must be enrolled for Mobile Device Management (MDM) with an MDM
-vendor to enable this feature. This page documents the format of the managed app
-configuration settings that Chrome expects, and is meant to help MDM vendors
-integrate Chrome management into their solutions.
-
-This uses the managed app configuration API introduced in iOS 7, and only work
-with device running iOS 7 or later. For an introduction to the API see session
-301 from WWDC 2013, "Extending Your Apps for Enterprise and Education Use", at
-<https://developer.apple.com/videos/wwdc/2013/?id=301>.
-
-#### Keys loaded by Chrome
-
-The managed app configuration pushed to Chrome should be an NSDictionary,
-encoded as a &lt;dict&gt; element in the Plist format. Chrome then looks for 2
-keys in this dictionary:
-
-* **ChromePolicy** is the main key to configure policies for Chrome.
- This key must map to another NSDictionary, which then maps a Chrome
- policy to its value.
-
-* **EncodedChromePolicy** is a fallback key which is loaded only if
- ChromePolicy is not present. This key supports the same policies but
- its value should be a single NSString (encoded as a &lt;string&gt;
- on the wire), which contains a serialized Plist encoded in Base64.
-
-ChromePolicy is the recommended key to configure Chrome. EncodedChromePolicy may
-be used by legacy products that are limited to String values. As of version 35
-Chrome doesn't load any other keys; new keys may be introduced in future
-versions.
-
-#### Example ChromePolicy
-
-This example contains the full Plist that can be set down as the managed app
-configuration for Chrome:
-
-```
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC '-//Apple//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
-<plist version="1.0">
- <dict>
- <key>ChromePolicy</key>
- <dict>
- <key>AutoFillEnabled</key>
- <false/>
- <key>CookiesAllowedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>CookiesBlockedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>CookiesSessionOnlyForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>DefaultCookiesSetting</key>
- <integer>1</integer>
- <key>DefaultPopupsSetting</key>
- <integer>1</integer>
- <key>DefaultSearchProviderEnabled</key>
- <true/>
- <key>DefaultSearchProviderKeyword</key>
- <string>mis</string>
- <key>DefaultSearchProviderName</key>
- <string>My Intranet Search</string>
- <key>DefaultSearchProviderSearchURL</key>
- <string>http://search.my.company/search?q={searchTerms}</string>
- <key>ManagedBookmarks</key>
- <array>
- <dict>
- <key>name</key>
- <string>Google</string>
- <key>url</key>
- <string>google.com</string>
- </dict>
- <dict>
- <key>name</key>
- <string>Youtube</string>
- <key>url</key>
- <string>youtube.com</string>
- </dict>
- </array>
- <key>PasswordManagerEnabled</key>
- <true/>
- <key>PopupsAllowedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>PopupsBlockedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>ProxyBypassList</key>
- <string>http://www.example1.com,http://www.example2.com,http://internalsite/</string>
- <key>ProxyMode</key>
- <string>direct</string>
- <key>ProxyPacUrl</key>
- <string>http://internal.site/example.pac</string>
- <key>ProxyServer</key>
- <string>123.123.123.123:8080</string>
- <key>SearchSuggestEnabled</key>
- <true/>
- <key>TranslateEnabled</key>
- <true/>
- <key>URLBlocklist</key>
- <array>
- <string>example.com</string>
- <string>https://ssl.server.com</string>
- <string>hosting.com/bad_path</string>
- <string>http://server:8080/path</string>
- <string>.exact.hostname.com</string>
- </array>
- <key>URLAllowlist</key>
- <array>
- <string>example.com</string>
- <string>https://ssl.server.com</string>
- <string>hosting.com/bad_path</string>
- <string>http://server:8080/path</string>
- <string>.exact.hostname.com</string>
- </array>
- </dict>
- </dict>
-</plist>
-```
-
-#### Example EncodedChromePolicy
-
-This example contains an EncodedChromePolicy value that contains the same Plist
-as above, after being encoded in Base64:
-
-```
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC '-//Apple//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
-<plist version="1.0">
- <dict>
- <key>EncodedChromePolicy</key>
- <string>PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBwbGlzdCAgUFVCTElDICctLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4nICAnaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCc+PHBsaXN0IHZlcnNpb249IjEuMCI+PGRpY3Q+PGtleT5BdXRvRmlsbEVuYWJsZWQ8L2tleT48ZmFsc2UvPjxrZXk+Q29va2llc0FsbG93ZWRGb3JVcmxzPC9rZXk+PGFycmF5PjxzdHJpbmc+aHR0cDovL3d3dy5leGFtcGxlLmNvbTwvc3RyaW5nPjxzdHJpbmc+WyouXWV4YW1wbGUuZWR1PC9zdHJpbmc+PC9hcnJheT48a2V5PkNvb2tpZXNCbG9ja2VkRm9yVXJsczwva2V5PjxhcnJheT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPlsqLl1leGFtcGxlLmVkdTwvc3RyaW5nPjwvYXJyYXk+PGtleT5Db29raWVzU2Vzc2lvbk9ubHlGb3JVcmxzPC9rZXk+PGFycmF5PjxzdHJpbmc+aHR0cDovL3d3dy5leGFtcGxlLmNvbTwvc3RyaW5nPjxzdHJpbmc+WyouXWV4YW1wbGUuZWR1PC9zdHJpbmc+PC9hcnJheT48a2V5PkRlZmF1bHRDb29raWVzU2V0dGluZzwva2V5PjxpbnRlZ2VyPjE8L2ludGVnZXI+PGtleT5EZWZhdWx0UG9wdXBzU2V0dGluZzwva2V5PjxpbnRlZ2VyPjE8L2ludGVnZXI+PGtleT5EZWZhdWx0U2VhcmNoUHJvdmlkZXJFbmFibGVkPC9rZXk+PHRydWUvPjxrZXk+RGVmYXVsdFNlYXJjaFByb3ZpZGVyS2V5d29yZDwva2V5PjxzdHJpbmc+bWlzPC9zdHJpbmc+PGtleT5EZWZhdWx0U2VhcmNoUHJvdmlkZXJOYW1lPC9rZXk+PHN0cmluZz5NeSBJbnRyYW5ldCBTZWFyY2g8L3N0cmluZz48a2V5PkRlZmF1bHRTZWFyY2hQcm92aWRlclNlYXJjaFVSTDwva2V5PjxzdHJpbmc+aHR0cDovL3NlYXJjaC5teS5jb21wYW55L3NlYXJjaD9xPXtzZWFyY2hUZXJtc308L3N0cmluZz48a2V5Pk1hbmFnZWRCb29rbWFya3M8L2tleT48YXJyYXk+PGRpY3Q+PGtleT5uYW1lPC9rZXk+PHN0cmluZz5Hb29nbGU8L3N0cmluZz48a2V5PnVybDwva2V5PjxzdHJpbmc+Z29vZ2xlLmNvbTwvc3RyaW5nPjwvZGljdD48ZGljdD48a2V5Pm5hbWU8L2tleT48c3RyaW5nPllvdXR1YmU8L3N0cmluZz48a2V5PnVybDwva2V5PjxzdHJpbmc+eW91dHViZS5jb208L3N0cmluZz48L2RpY3Q+PC9hcnJheT48a2V5PlBhc3N3b3JkTWFuYWdlckVuYWJsZWQ8L2tleT48dHJ1ZS8+PGtleT5Qb3B1cHNBbGxvd2VkRm9yVXJsczwva2V5PjxhcnJheT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPlsqLl1leGFtcGxlLmVkdTwvc3RyaW5nPjwvYXJyYXk+PGtleT5Qb3B1cHNCbG9ja2VkRm9yVXJsczwva2V5PjxhcnJheT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPlsqLl1leGFtcGxlLmVkdTwvc3RyaW5nPjwvYXJyYXk+PGtleT5Qcm94eUJ5cGFzc0xpc3Q8L2tleT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZTEuY29tLGh0dHA6Ly93d3cuZXhhbXBsZTIuY29tLGh0dHA6Ly9pbnRlcm5hbHNpdGUvPC9zdHJpbmc+PGtleT5Qcm94eU1vZGU8L2tleT48c3RyaW5nPmRpcmVjdDwvc3RyaW5nPjxrZXk+UHJveHlQYWNVcmw8L2tleT48c3RyaW5nPmh0dHA6Ly9pbnRlcm5hbC5zaXRlL2V4YW1wbGUucGFjPC9zdHJpbmc+PGtleT5Qcm94eVNlcnZlcjwva2V5PjxzdHJpbmc+MTIzLjEyMy4xMjMuMTIzOjgwODA8L3N0cmluZz48a2V5PlNlYXJjaFN1Z2dlc3RFbmFibGVkPC9rZXk+PHRydWUvPjxrZXk+VHJhbnNsYXRlRW5hYmxlZDwva2V5Pjx0cnVlLz48a2V5PlVSTEJsYWNrbGlzdDwva2V5PjxhcnJheT48c3RyaW5nPmV4YW1wbGUuY29tPC9zdHJpbmc+PHN0cmluZz5odHRwczovL3NzbC5zZXJ2ZXIuY29tPC9zdHJpbmc+PHN0cmluZz5ob3N0aW5nLmNvbS9iYWRfcGF0aDwvc3RyaW5nPjxzdHJpbmc+aHR0cDovL3NlcnZlcjo4MDgwL3BhdGg8L3N0cmluZz48c3RyaW5nPi5leGFjdC5ob3N0bmFtZS5jb208L3N0cmluZz48L2FycmF5PjxrZXk+VVJMV2hpdGVsaXN0PC9rZXk+PGFycmF5PjxzdHJpbmc+ZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPmh0dHBzOi8vc3NsLnNlcnZlci5jb208L3N0cmluZz48c3RyaW5nPmhvc3RpbmcuY29tL2JhZF9wYXRoPC9zdHJpbmc+PHN0cmluZz5odHRwOi8vc2VydmVyOjgwODAvcGF0aDwvc3RyaW5nPjxzdHJpbmc+LmV4YWN0Lmhvc3RuYW1lLmNvbTwvc3RyaW5nPjwvYXJyYXk+PC9kaWN0PjwvcGxpc3Q+</string>
- </dict>
-</plist>
-```
-
-#### Verifying a Plist
-
-A .plist file can be verified with the plutil command on Mac OS X:
-
-```
-plutil -lint file.plist
-```
-
-The EncodedChromePolicy value should decode correctly as Base64:
-
-```
-base64 &lt; encoded.txt &gt; decoded.plist
-plutil -lint decoded.plist
-```
-
-#### Policies supported by Chrome on iOS
-
-The page at <https://chromeenterprise.google/policies/> indicates
-which platforms are supported for each policy.
diff --git a/chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_chrome_policy.plist b/chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_chrome_policy.plist
deleted file mode 100644
index 4829a38b26e..00000000000
--- a/chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_chrome_policy.plist
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC '-//Apple//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
-<plist version="1.0">
- <dict>
- <!-- ChromePolicy is the preferred key to configure Chrome.
- Each of the keys in this <dict> configures a Chrome policy.
- All of the Chrome policies are configured with an example
- value below.
- Note that it's not necessary to configure all of them. -->
- <key>ChromePolicy</key>
- <dict>
- <key>AutoFillEnabled</key>
- <false/>
- <key>CookiesAllowedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>CookiesBlockedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>CookiesSessionOnlyForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>DefaultCookiesSetting</key>
- <integer>1</integer>
- <key>DefaultPopupsSetting</key>
- <integer>1</integer>
- <key>DefaultSearchProviderEnabled</key>
- <true/>
- <key>DefaultSearchProviderKeyword</key>
- <string>mis</string>
- <key>DefaultSearchProviderName</key>
- <string>My Intranet Search</string>
- <key>DefaultSearchProviderSearchURL</key>
- <string>http://search.my.company/search?q={searchTerms}</string>
- <key>ManagedBookmarks</key>
- <array>
- <dict>
- <key>name</key>
- <string>Google</string>
- <key>url</key>
- <string>google.com</string>
- </dict>
- <dict>
- <key>name</key>
- <string>Youtube</string>
- <key>url</key>
- <string>youtube.com</string>
- </dict>
- </array>
- <key>PasswordManagerEnabled</key>
- <true/>
- <key>PopupsAllowedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>PopupsBlockedForUrls</key>
- <array>
- <string>http://www.example.com</string>
- <string>[*.]example.edu</string>
- </array>
- <key>ProxyBypassList</key>
- <string>http://www.example1.com,http://www.example2.com,http://internalsite/</string>
- <key>ProxyMode</key>
- <string>direct</string>
- <key>ProxyPacUrl</key>
- <string>http://internal.site/example.pac</string>
- <key>ProxyServer</key>
- <string>123.123.123.123:8080</string>
- <key>SearchSuggestEnabled</key>
- <true/>
- <key>TranslateEnabled</key>
- <true/>
- <key>URLBlacklist</key>
- <array>
- <string>example.com</string>
- <string>https://ssl.server.com</string>
- <string>hosting.com/bad_path</string>
- <string>http://server:8080/path</string>
- <string>.exact.hostname.com</string>
- </array>
- <key>URLWhitelist</key>
- <array>
- <string>example.com</string>
- <string>https://ssl.server.com</string>
- <string>hosting.com/bad_path</string>
- <string>http://server:8080/path</string>
- <string>.exact.hostname.com</string>
- </array>
- </dict>
- </dict>
-</plist>
diff --git a/chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_encoded_chrome_policy.plist b/chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_encoded_chrome_policy.plist
deleted file mode 100644
index 27342efbac0..00000000000
--- a/chromium/docs/website/site/administrators/ios-mdm-policy-format/ios_encoded_chrome_policy.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC '-//Apple//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
-<plist version="1.0">
- <dict>
- <!-- EncodedChromePolicy contains a Property List file, encoded in Base64,
- which contains the same policies that can go in ChromePolicy.
- This key can be used by vendors that restrict the app configuration
- types to strings.
- The value of this string can be validated by running these
- commands in Mac OS X:
-
- # (first, copy-paste the string into a file named "policy.plist")
- # base64 -D < policy.plist > decoded_policy.plist
- # plutil -lint decoded_policy.plist
-
- plutil should indicate that decoded_policy.plist is valid,
- otherwise Chrome will reject the encoded string too.
-
- This command can be used to pretty-print the plist file:
-
- # plutil -convert xml1 decoded_policy.plist
-
- Note that <ChromePolicy> is the preferred key to configure Chrome.
- If <ChromePolicy> is present then <EncodedChromePolicy> is ignored. -->
- <key>EncodedChromePolicy</key>
- <string>PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBwbGlzdCAgUFVCTElDICctLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4nICAnaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCc+PHBsaXN0IHZlcnNpb249IjEuMCI+PGRpY3Q+PGtleT5BdXRvRmlsbEVuYWJsZWQ8L2tleT48ZmFsc2UvPjxrZXk+Q29va2llc0FsbG93ZWRGb3JVcmxzPC9rZXk+PGFycmF5PjxzdHJpbmc+aHR0cDovL3d3dy5leGFtcGxlLmNvbTwvc3RyaW5nPjxzdHJpbmc+WyouXWV4YW1wbGUuZWR1PC9zdHJpbmc+PC9hcnJheT48a2V5PkNvb2tpZXNCbG9ja2VkRm9yVXJsczwva2V5PjxhcnJheT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPlsqLl1leGFtcGxlLmVkdTwvc3RyaW5nPjwvYXJyYXk+PGtleT5Db29raWVzU2Vzc2lvbk9ubHlGb3JVcmxzPC9rZXk+PGFycmF5PjxzdHJpbmc+aHR0cDovL3d3dy5leGFtcGxlLmNvbTwvc3RyaW5nPjxzdHJpbmc+WyouXWV4YW1wbGUuZWR1PC9zdHJpbmc+PC9hcnJheT48a2V5PkRlZmF1bHRDb29raWVzU2V0dGluZzwva2V5PjxpbnRlZ2VyPjE8L2ludGVnZXI+PGtleT5EZWZhdWx0UG9wdXBzU2V0dGluZzwva2V5PjxpbnRlZ2VyPjE8L2ludGVnZXI+PGtleT5EZWZhdWx0U2VhcmNoUHJvdmlkZXJFbmFibGVkPC9rZXk+PHRydWUvPjxrZXk+RGVmYXVsdFNlYXJjaFByb3ZpZGVyS2V5d29yZDwva2V5PjxzdHJpbmc+bWlzPC9zdHJpbmc+PGtleT5EZWZhdWx0U2VhcmNoUHJvdmlkZXJOYW1lPC9rZXk+PHN0cmluZz5NeSBJbnRyYW5ldCBTZWFyY2g8L3N0cmluZz48a2V5PkRlZmF1bHRTZWFyY2hQcm92aWRlclNlYXJjaFVSTDwva2V5PjxzdHJpbmc+aHR0cDovL3NlYXJjaC5teS5jb21wYW55L3NlYXJjaD9xPXtzZWFyY2hUZXJtc308L3N0cmluZz48a2V5Pk1hbmFnZWRCb29rbWFya3M8L2tleT48YXJyYXk+PGRpY3Q+PGtleT5uYW1lPC9rZXk+PHN0cmluZz5Hb29nbGU8L3N0cmluZz48a2V5PnVybDwva2V5PjxzdHJpbmc+Z29vZ2xlLmNvbTwvc3RyaW5nPjwvZGljdD48ZGljdD48a2V5Pm5hbWU8L2tleT48c3RyaW5nPllvdXR1YmU8L3N0cmluZz48a2V5PnVybDwva2V5PjxzdHJpbmc+eW91dHViZS5jb208L3N0cmluZz48L2RpY3Q+PC9hcnJheT48a2V5PlBhc3N3b3JkTWFuYWdlckVuYWJsZWQ8L2tleT48dHJ1ZS8+PGtleT5Qb3B1cHNBbGxvd2VkRm9yVXJsczwva2V5PjxhcnJheT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPlsqLl1leGFtcGxlLmVkdTwvc3RyaW5nPjwvYXJyYXk+PGtleT5Qb3B1cHNCbG9ja2VkRm9yVXJsczwva2V5PjxhcnJheT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPlsqLl1leGFtcGxlLmVkdTwvc3RyaW5nPjwvYXJyYXk+PGtleT5Qcm94eUJ5cGFzc0xpc3Q8L2tleT48c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZTEuY29tLGh0dHA6Ly93d3cuZXhhbXBsZTIuY29tLGh0dHA6Ly9pbnRlcm5hbHNpdGUvPC9zdHJpbmc+PGtleT5Qcm94eU1vZGU8L2tleT48c3RyaW5nPmRpcmVjdDwvc3RyaW5nPjxrZXk+UHJveHlQYWNVcmw8L2tleT48c3RyaW5nPmh0dHA6Ly9pbnRlcm5hbC5zaXRlL2V4YW1wbGUucGFjPC9zdHJpbmc+PGtleT5Qcm94eVNlcnZlcjwva2V5PjxzdHJpbmc+MTIzLjEyMy4xMjMuMTIzOjgwODA8L3N0cmluZz48a2V5PlNlYXJjaFN1Z2dlc3RFbmFibGVkPC9rZXk+PHRydWUvPjxrZXk+VHJhbnNsYXRlRW5hYmxlZDwva2V5Pjx0cnVlLz48a2V5PlVSTEJsYWNrbGlzdDwva2V5PjxhcnJheT48c3RyaW5nPmV4YW1wbGUuY29tPC9zdHJpbmc+PHN0cmluZz5odHRwczovL3NzbC5zZXJ2ZXIuY29tPC9zdHJpbmc+PHN0cmluZz5ob3N0aW5nLmNvbS9iYWRfcGF0aDwvc3RyaW5nPjxzdHJpbmc+aHR0cDovL3NlcnZlcjo4MDgwL3BhdGg8L3N0cmluZz48c3RyaW5nPi5leGFjdC5ob3N0bmFtZS5jb208L3N0cmluZz48L2FycmF5PjxrZXk+VVJMV2hpdGVsaXN0PC9rZXk+PGFycmF5PjxzdHJpbmc+ZXhhbXBsZS5jb208L3N0cmluZz48c3RyaW5nPmh0dHBzOi8vc3NsLnNlcnZlci5jb208L3N0cmluZz48c3RyaW5nPmhvc3RpbmcuY29tL2JhZF9wYXRoPC9zdHJpbmc+PHN0cmluZz5odHRwOi8vc2VydmVyOjgwODAvcGF0aDwvc3RyaW5nPjxzdHJpbmc+LmV4YWN0Lmhvc3RuYW1lLmNvbTwvc3RyaW5nPjwvYXJyYXk+PC9kaWN0PjwvcGxpc3Q+</string>
- </dict>
-</plist>
diff --git a/chromium/docs/website/site/administrators/linux-quick-start/index.md b/chromium/docs/website/site/administrators/linux-quick-start/index.md
deleted file mode 100644
index 2ffad250991..00000000000
--- a/chromium/docs/website/site/administrators/linux-quick-start/index.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: linux-quick-start
-title: Linux Quick Start
----
-
-This page describes the steps to get a managed instance of Google Chrome or
-Chromium up and running on Linux.
-
-**Download / Build the Browser**
-
-Depending on your network's requirements, you may either want to deploy Chromium
-or Google Chrome. The differences are described
-[here](http://code.google.com/p/chromium/wiki/ChromiumBrowserVsGoogleChrome).
-
-There are several different ways to get the browser:
-
-* If you want to deploy Google Chrome, download Google Chrome
- [here](http://www.google.com/chrome/eula.html?platform=linux&hl=en&hl=en).
-* If you want to deploy Chromium, your distro may have already
- repackaged Chromium for you. See which distros have repackaged
- Chromium
- [here](http://code.google.com/p/chromium/wiki/LinuxChromiumPackages).
-* If you want to deploy Chromium but you want to build it yourself,
- follow the instructions on building Chromium
- [here](http://code.google.com/p/chromium/wiki/LinuxBuildInstructions).
-
-At the end of this process, you should have Google Chrome or Chromium installed.
-Verify that the version you are running is **later than 6.0.444.0**.
-
-**Set Up Policies**
-
-Policy configuration files live under **/etc/chromium** for Chromium, and under
-**/etc/opt/chrome** for Google Chrome (note the lack of **opt** for Chromium).
-There are two sets of policies kept in these directories: one set that is
-required and mandated by an administrator, and one set that is recommended for
-users but not required. These two sets live at:
-
-/etc/opt/chrome/policies/managed/
-
-/etc/opt/chrome/policies/recommended/
-
-Create these directories if they do not already exist:
-
-```none
->mkdir /etc/opt/chrome/policies
->mkdir /etc/opt/chrome/policies/managed
->mkdir /etc/opt/chrome/policies/recommended
-```
-
-Make sure that the files under /managed are not writable by non-admin users;
-otherwise, they could just overwrite your policies to get the configuration they
-want!
-
-```none
->chmod -w /etc/opt/chrome/policies/managed
-```
-
-To set policies that are required, create a file named "test_policy.json" in
-/etc/opt/chrome/policies/managed/
-
-```none
->touch /etc/opt/chrome/policies/managed/test_policy.json
-```
-
-In this file, put the following content:
-
-```none
-{
- "HomepageLocation": "www.chromium.org"
-}
-```
-
-That's it! The next time you start Google Chrome on that machine, the home page
-will be locked to this value.
-
-To see what other policies you can control, review the [exhaustive list of all
-manageable policies](/administrators/policy-list-3).
-
-You can spread your policies over multiple JSON files. Chrome will read and
-apply them all. However, you should not be setting the **same** policy in more
-than one file. If you do, it is **undefined** which of the values you specified
-prevails.
-
-**Make sure that policy JSON files under ../managed/ are not writable by just
-anyone! Google Chrome / Chromium gives these files higher priority, so they
-should only be writable by an administrator or root!**
-
-**Push out the Policies and Browser**
-
-Using whatever mechanism you use to push files to clients, whether it be a
-utility or just a script file, push the "test_policy.json" file out to the
-target machines in your network. Make sure that this file exists at
-/etc/opt/chrome/policies/managed/ on all the target machines. You could do this
-simply by scp'ing the files to the target:
-
-```none
->scp /etc/opt/chrome/policies adminusername@targetmachine:/etc/opt/chrome
-```
-
-Similarly, use whatever file-pushing utility or script to push out Google Chrome
-/ Chromium. Whenever a user on those target machines runs Google Chrome /
-Chromium, it will obey the policy files you copied onto those machines. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/log-messages/index.md b/chromium/docs/website/site/administrators/log-messages/index.md
deleted file mode 100644
index cafb3239d94..00000000000
--- a/chromium/docs/website/site/administrators/log-messages/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: log-messages
-title: Administrative Log Messages
----
-
-When Chrome encounters events that may be important to system administrators, it
-adds entries to a system log file that administrators can access and monitor.
-For example, these may include informational messages about enterprise policies
-or warnings about security events.
-
-These events are logged to the Windows Event Log on Windows, or to the messages
-log file on POSIX systems. In Chrome's code, the SYSLOG macro is used to
-generate the logs, and the code around the uses of the [SYSLOG
-macro](https://cs.chromium.org/chromium/src/base/syslog_logging.h) can often
-give some context to the meaning of the message.
-
-More information about Chrome's debug logs can be found
-[here](https://support.google.com/chrome/a/answer/6271282?hl=en).
-
-## Site Isolation SYSLOGs
-
-One category of administrative log messages has been added in Chrome 68 to track
-violations of [Site Isolation](/Home/chromium-security/site-isolation) security
-restrictions. These messages may indicate that a renderer process has been
-compromised and is trying to access cross-site data that would otherwise be
-off-limits, such as cookies, passwords, or localStorage. The messages occur when
-Chrome has decided to kill a misbehaving renderer process in one of these
-situations. (Keep in mind that there may be some false positives in the log if a
-bug in Chrome causes a renderer process to send the wrong IPCs.)
-
-The current log messages include:
-
-* Cookies:
- * Killing renderer: illegal cookie write. Reason: N
- * Killing renderer: illegal cookie read. Reason: N
-* Passwords:
- * Killing renderer: illegal password access from about: or data:
- URL. Reason: N
- * Killing renderer: illegal password access. Reason: N
-* localStorage:
- * Killing renderer: illegal localStorage request.
-
-Most of these messages include a reason code, which corresponds to an enum value
-in
-[content/browser/bad_message.h](https://cs.chromium.org/chromium/src/content/browser/bad_message.h)
-(or, in the case of passwords, in
-[components/password_manager/content/browser/bad_message.h](https://cs.chromium.org/chromium/src/components/password_manager/content/browser/bad_message.h)).
-These enum values can point administrators to the relevant part of Chrome's code
-to understand more about what happened during the event. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/mac-quick-start/index.md b/chromium/docs/website/site/administrators/mac-quick-start/index.md
deleted file mode 100644
index 800293406d4..00000000000
--- a/chromium/docs/website/site/administrators/mac-quick-start/index.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: mac-quick-start
-title: Mac Quick Start
----
-
-This page describes how to get started with managing Google Chrome on a Mac
-network using Apple’s Profile Manager. These instructions are only an example to
-help you get started. You can use any system management software you choose, but
-specific steps may vary.
-
-Note: These steps focus only on pushing out a plist configuration file for the
-Chrome Browser. Your Mac network must be set up and in a managed state. This
-guide does not cover how to setup macOS Server or Profile Manager to manage your
-Mac devices.
-
-1. Log into Profile Manager on the server machine from a web browser
-2. Navigate to **Devices** &gt; **Settings**, choose the device group
- for which to define Chrome policies.
-3. Click **Edit**.
-4. Go to **Custom Settings** and add a Preference Domain with domain
- '*com.google.Chrome'*
-5. Upload a pre-configured plist file or manually add items by key and
- value. A full list and description of policies can be found at
- <https://www.chromium.org/administrators/policy-list-3>.
-6. Click **Ok** and payload will be created and synced to the selected
- devices.
-
-**Debugging**
-
-If you have trouble, it usually pays off to examine whether the settings are
-correctly stored and read by Chrome. First of all, navigate to about:policy in
-Chrome. It lists any policy settings that Chrome has picked up. If your settings
-show up, good. If not, you can dig deeper and check whether macOS actually put
-them into place correctly. Mandatory policy is stored in /Library/Managed
-Preferences/&lt;username&gt;/com.google.Chrome.plist while recommended policy is
-stored in /Library/Preferences/com.google.Chrome.plist. The plutil command can
-be used from a terminal to convert it to XML format:
-
-* # sudo -s
-* # cd /Library/Managed Preferences/&lt;username&gt;
-* # plutil -convert xml1 com.google.Chrome.plist
-* # cat com.google.Chrome.plist
-
-For debugging, this file is in a place where it can be edited manually. Chrome
-will pick up the updated preferences automatically. Note that this is not
-recommended for making persistent changes to policy, since macOS will rewrite
-the file with settings configured through Workgroup Manager.
-
-Chrome on macOS does not show unknown policies on the chrome://policy page. If
-you don't find a policy you have set there check if the name is spelled
-correctly and if the policy is actually supported on the macOS platform.
-
-**Notes for Chromium**
-
-Chromium can be managed in a similar way, with a few differences:
-
-* The Chromium application must be managed, instead of Google Chrome
-* Chromium is identified as "org.chromium.Chromium"
-* The plist file is in the same place but is named
- "org.chromium.Chromium.plist"
-
-**Unknown issues**
-
-Please file a bug report at <http://new.crbug.com> and select the "Enterprise
-Issue" template. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/policy-list-3/atomic_groups/index.md b/chromium/docs/website/site/administrators/policy-list-3/atomic_groups/index.md
deleted file mode 100644
index 590c409acb5..00000000000
--- a/chromium/docs/website/site/administrators/policy-list-3/atomic_groups/index.md
+++ /dev/null
@@ -1,875 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-- - /administrators/policy-list-3
- - Policy List
-page_name: atomic_groups
-title: Atomic Policy Groups
----
-
-Both Chromium and Google Chrome have some groups of policies that depend on each
-other to provide control over a feature. These sets are represented by the
-following policy groups. Given that policies can have multiple sources, only
-values coming from the highest priority source will be applied. Values coming
-from a lower priority source in the same group will be ignored. The order of
-priority is defined in <https://support.google.com/chrome/a/?p=policy_order>.
-
-<table>
-<tr>
-<td>Policy Name</td>
-<td>Description</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ActiveDirectoryManagement">ActiveDirectoryManagement</a></td>
-<td>Microsoft® Active Directory® management settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceMachinePasswordChangeRate">DeviceMachinePasswordChangeRate</a></td>
-<td>Machine password change rate</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceUserPolicyLoopbackProcessingMode">DeviceUserPolicyLoopbackProcessingMode</a></td>
-<td>User policy loopback processing mode</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceKerberosEncryptionTypes">DeviceKerberosEncryptionTypes</a></td>
-<td>Allowed Kerberos encryption types</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceGpoCacheLifetime">DeviceGpoCacheLifetime</a></td>
-<td>GPO cache lifetime</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceAuthDataCacheLifetime">DeviceAuthDataCacheLifetime</a></td>
-<td>Authentication data cache lifetime</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#Attestation">Attestation</a></td>
-<td>Attestation</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#AttestationEnabledForDevice">AttestationEnabledForDevice</a></td>
-<td>Enable remote attestation for the device</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#AttestationEnabledForUser">AttestationEnabledForUser</a></td>
-<td>Enable remote attestation for the user</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#AttestationExtensionWhitelist">AttestationExtensionWhitelist</a></td>
-<td>Extensions allowed to to use the remote attestation API</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#AttestationForContentProtectionEnabled">AttestationForContentProtectionEnabled</a></td>
-<td>Enable the use of remote attestation for content protection for the device</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcher">BrowserSwitcher</a></td>
-<td>Legacy Browser Support</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#AlternativeBrowserPath">AlternativeBrowserPath</a></td>
-<td>Alternative browser to launch for configured websites.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#AlternativeBrowserParameters">AlternativeBrowserParameters</a></td>
-<td>Command-line parameters for the alternative browser.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherChromePath">BrowserSwitcherChromePath</a></td>
-<td>Path to Chrome for switching from the alternative browser.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherChromeParameters">BrowserSwitcherChromeParameters</a></td>
-<td>Command-line parameters for switching from the alternative browser.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherDelay">BrowserSwitcherDelay</a></td>
-<td>Delay before launching alternative browser (milliseconds)</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherEnabled">BrowserSwitcherEnabled</a></td>
-<td>Enable the Legacy Browser Support feature.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherExternalSitelistUrl">BrowserSwitcherExternalSitelistUrl</a></td>
-<td>URL of an XML file that contains URLs to load in an alternative browser.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherExternalGreylistUrl">BrowserSwitcherExternalGreylistUrl</a></td>
-<td>URL of an XML file that contains URLs that should never trigger a browser switch.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherKeepLastChromeTab">BrowserSwitcherKeepLastChromeTab</a></td>
-<td>Keep last tab open in Chrome.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherUrlList">BrowserSwitcherUrlList</a></td>
-<td>Websites to open in alternative browser</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherUrlGreylist">BrowserSwitcherUrlGreylist</a></td>
-<td>Websites that should never trigger a browser switch.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#BrowserSwitcherUseIeSitelist">BrowserSwitcherUseIeSitelist</a></td>
-<td>Use Internet Explorer's SiteList policy for Legacy Browser Support.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ChromeReportingExtension">ChromeReportingExtension</a></td>
-<td>Chrome Reporting Extension</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportVersionData">ReportVersionData</a></td>
-<td>Report OS and Chromium Version Information</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportPolicyData">ReportPolicyData</a></td>
-<td>Report Chromium Policy Information</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportMachineIDData">ReportMachineIDData</a></td>
-<td>Report Machine Identification information</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportUserIDData">ReportUserIDData</a></td>
-<td>Report User Identification information</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportExtensionsAndPluginsData">ReportExtensionsAndPluginsData</a></td>
-<td>Report Extensions and Plugins information</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportSafeBrowsingData">ReportSafeBrowsingData</a></td>
-<td>Report Safe Browsing information</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#CloudReportingEnabled">CloudReportingEnabled</a></td>
-<td>Enables Chromium cloud reporting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ContentPack">ContentPack</a></td>
-<td>Content pack</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ContentPackDefaultFilteringBehavior">ContentPackDefaultFilteringBehavior</a></td>
-<td>Default behavior for sites not in any content pack</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ContentPackManualBehaviorHosts">ContentPackManualBehaviorHosts</a></td>
-<td>Managed user manual exception hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ContentPackManualBehaviorURLs">ContentPackManualBehaviorURLs</a></td>
-<td>Managed user manual exception URLs</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#CookiesSettings">CookiesSettings</a></td>
-<td>Cookies settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultCookiesSetting">DefaultCookiesSetting</a></td>
-<td>Default cookies setting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#CookiesAllowedForUrls">CookiesAllowedForUrls</a></td>
-<td>Allow cookies on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#CookiesBlockedForUrls">CookiesBlockedForUrls</a></td>
-<td>Block cookies on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#CookiesSessionOnlyForUrls">CookiesSessionOnlyForUrls</a></td>
-<td>Limit cookies from matching URLs to the current session</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DateAndTime">DateAndTime</a></td>
-<td>Date and time</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SystemTimezone">SystemTimezone</a></td>
-<td>Timezone</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SystemTimezoneAutomaticDetection">SystemTimezoneAutomaticDetection</a></td>
-<td>Configure the automatic timezone detection method</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProvider">DefaultSearchProvider</a></td>
-<td>Default search provider</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderEnabled">DefaultSearchProviderEnabled</a></td>
-<td>Enable the default search provider</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderName">DefaultSearchProviderName</a></td>
-<td>Default search provider name</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderKeyword">DefaultSearchProviderKeyword</a></td>
-<td>Default search provider keyword</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderSearchURL">DefaultSearchProviderSearchURL</a></td>
-<td>Default search provider search URL</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderSuggestURL">DefaultSearchProviderSuggestURL</a></td>
-<td>Default search provider suggest URL</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderInstantURL">DefaultSearchProviderInstantURL</a></td>
-<td>Default search provider instant URL</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderIconURL">DefaultSearchProviderIconURL</a></td>
-<td>Default search provider icon</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderEncodings">DefaultSearchProviderEncodings</a></td>
-<td>Default search provider encodings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderAlternateURLs">DefaultSearchProviderAlternateURLs</a></td>
-<td>List of alternate URLs for the default search provider</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderSearchTermsReplacementKey">DefaultSearchProviderSearchTermsReplacementKey</a></td>
-<td>Parameter controlling search term placement for the default search provider</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderImageURL">DefaultSearchProviderImageURL</a></td>
-<td>Parameter providing search-by-image feature for the default search provider</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderNewTabURL">DefaultSearchProviderNewTabURL</a></td>
-<td>Default search provider new tab page URL</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderSearchURLPostParams">DefaultSearchProviderSearchURLPostParams</a></td>
-<td>Parameters for search URL which uses POST</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderSuggestURLPostParams">DefaultSearchProviderSuggestURLPostParams</a></td>
-<td>Parameters for suggest URL which uses POST</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderInstantURLPostParams">DefaultSearchProviderInstantURLPostParams</a></td>
-<td>Parameters for instant URL which uses POST</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultSearchProviderImageURLPostParams">DefaultSearchProviderImageURLPostParams</a></td>
-<td>Parameters for image URL which uses POST</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#Display">Display</a></td>
-<td>Display</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceDisplayResolution">DeviceDisplayResolution</a></td>
-<td>Set display resolution and scale factor</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DisplayRotationDefault">DisplayRotationDefault</a></td>
-<td>Set default display rotation, reapplied on every reboot</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#Drive">Drive</a></td>
-<td>Drive</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DriveDisabled">DriveDisabled</a></td>
-<td>Disable Drive in the Chromium OS Files app</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DriveDisabledOverCellular">DriveDisabledOverCellular</a></td>
-<td>Disable Google Drive over cellular connections in the Chromium OS Files app</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#Extensions">Extensions</a></td>
-<td>Extensions</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ExtensionInstallBlacklist">ExtensionInstallBlacklist</a></td>
-<td>Configure extension installation blacklist</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ExtensionInstallWhitelist">ExtensionInstallWhitelist</a></td>
-<td>Configure extension installation whitelist</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ExtensionInstallForcelist">ExtensionInstallForcelist</a></td>
-<td>Configure the list of force-installed apps and extensions</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ExtensionInstallSources">ExtensionInstallSources</a></td>
-<td>Configure extension, app, and user script install sources</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ExtensionAllowedTypes">ExtensionAllowedTypes</a></td>
-<td>Configure allowed app/extension types</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ExtensionAllowInsecureUpdates">ExtensionAllowInsecureUpdates</a></td>
-<td>Allow insecure algorithms in integrity checks on extension updates and installs</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ExtensionSettings">ExtensionSettings</a></td>
-<td>Extension management settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#GoogleCast">GoogleCast</a></td>
-<td>Google Cast</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#CastReceiverEnabled">CastReceiverEnabled</a></td>
-<td>Enable casting content to the device</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#CastReceiverName">CastReceiverName</a></td>
-<td>Name of the Google Cast destination</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#Homepage">Homepage</a></td>
-<td>Homepage</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#HomepageLocation">HomepageLocation</a></td>
-<td>Configure the home page URL</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#HomepageIsNewTabPage">HomepageIsNewTabPage</a></td>
-<td>Use New Tab Page as homepage</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NewTabPageLocation">NewTabPageLocation</a></td>
-<td>Configure the New Tab page URL</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ShowHomeButton">ShowHomeButton</a></td>
-<td>Show Home button on toolbar</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ImageSettings">ImageSettings</a></td>
-<td>Image settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultImagesSetting">DefaultImagesSetting</a></td>
-<td>Default images setting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ImagesAllowedForUrls">ImagesAllowedForUrls</a></td>
-<td>Allow images on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ImagesBlockedForUrls">ImagesBlockedForUrls</a></td>
-<td>Block images on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#JavascriptSettings">JavascriptSettings</a></td>
-<td>Javascript settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultJavaScriptSetting">DefaultJavaScriptSetting</a></td>
-<td>Default JavaScript setting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#JavaScriptAllowedForUrls">JavaScriptAllowedForUrls</a></td>
-<td>Allow JavaScript on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#JavaScriptBlockedForUrls">JavaScriptBlockedForUrls</a></td>
-<td>Block JavaScript on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#KeygenSettings">KeygenSettings</a></td>
-<td>Keygen settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultKeygenSetting">DefaultKeygenSetting</a></td>
-<td>Default key generation setting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#KeygenAllowedForUrls">KeygenAllowedForUrls</a></td>
-<td>Allow key generation on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#KeygenBlockedForUrls">KeygenBlockedForUrls</a></td>
-<td>Block key generation on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#Kiosk">Kiosk</a></td>
-<td>Kiosk settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceLocalAccounts">DeviceLocalAccounts</a></td>
-<td>Device-local accounts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceLocalAccountAutoLoginId">DeviceLocalAccountAutoLoginId</a></td>
-<td>Device-local account for auto-login</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceLocalAccountAutoLoginDelay">DeviceLocalAccountAutoLoginDelay</a></td>
-<td>Device-local account auto-login timer</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceLocalAccountAutoLoginBailoutEnabled">DeviceLocalAccountAutoLoginBailoutEnabled</a></td>
-<td>Enable bailout keyboard shortcut for auto-login</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceLocalAccountPromptForNetworkWhenOffline">DeviceLocalAccountPromptForNetworkWhenOffline</a></td>
-<td>Enable network configuration prompt when offline</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#LoginScreenOrigins">LoginScreenOrigins</a></td>
-<td>Login and screen origins</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceLoginScreenIsolateOrigins">DeviceLoginScreenIsolateOrigins</a></td>
-<td>Enable Site Isolation for specified origins</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceLoginScreenSitePerProcess">DeviceLoginScreenSitePerProcess</a></td>
-<td>Enable Site Isolation for every site</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NativeMessaging">NativeMessaging</a></td>
-<td>Native messaging</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NativeMessagingBlacklist">NativeMessagingBlacklist</a></td>
-<td>Configure native messaging blacklist</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NativeMessagingWhitelist">NativeMessagingWhitelist</a></td>
-<td>Configure native messaging whitelist</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NativeMessagingUserLevelHosts">NativeMessagingUserLevelHosts</a></td>
-<td>Allow user-level Native Messaging hosts (installed without admin permissions)</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NetworkFileShares">NetworkFileShares</a></td>
-<td>Network File Shares settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NetworkFileSharesAllowed">NetworkFileSharesAllowed</a></td>
-<td>Contorls Network File Shares for ChromeOS availability</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NetBiosShareDiscoveryEnabled">NetBiosShareDiscoveryEnabled</a></td>
-<td>Controls Network File Share discovery via NetBIOS</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NTLMShareAuthenticationEnabled">NTLMShareAuthenticationEnabled</a></td>
-<td>Controls enabling NTLM as an authentication protocol for SMB mounts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NetworkFileSharesPreconfiguredShares">NetworkFileSharesPreconfiguredShares</a></td>
-<td>List of preconfigured network file shares.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NotificationsSettings">NotificationsSettings</a></td>
-<td>Notification settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultNotificationsSetting">DefaultNotificationsSetting</a></td>
-<td>Default notification setting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NotificationsAllowedForUrls">NotificationsAllowedForUrls</a></td>
-<td>Allow notifications on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#NotificationsBlockedForUrls">NotificationsBlockedForUrls</a></td>
-<td>Block notifications on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PasswordManager">PasswordManager</a></td>
-<td>Password manager</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PasswordManagerEnabled">PasswordManagerEnabled</a></td>
-<td>Enable saving passwords to the password manager</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PasswordManagerAllowShowPasswords">PasswordManagerAllowShowPasswords</a></td>
-<td>Allow users to show passwords in Password Manager (deprecated)</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PasswordProtection">PasswordProtection</a></td>
-<td>Password protection</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PasswordProtectionWarningTrigger">PasswordProtectionWarningTrigger</a></td>
-<td>Password protection warning trigger</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PasswordProtectionLoginURLs">PasswordProtectionLoginURLs</a></td>
-<td>Configure the list of enterprise login URLs where password protection service should capture fingerprint of password.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PasswordProtectionChangePasswordURL">PasswordProtectionChangePasswordURL</a></td>
-<td>Configure the change password URL.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PinUnlock">PinUnlock</a></td>
-<td>Pin unlock</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PinUnlockMinimumLength">PinUnlockMinimumLength</a></td>
-<td>Set the minimum length of the lock screen PIN</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PinUnlockMaximumLength">PinUnlockMaximumLength</a></td>
-<td>Set the maximum length of the lock screen PIN</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PinUnlockWeakPinsAllowed">PinUnlockWeakPinsAllowed</a></td>
-<td>Enable users to set weak PINs for the lock screen PIN</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PluginVm">PluginVm</a></td>
-<td>PluginVm</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PluginVmAllowed">PluginVmAllowed</a></td>
-<td>Allow devices to use a PluginVm on Chromium OS</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PluginVmLicenseKey">PluginVmLicenseKey</a></td>
-<td>PluginVm license key</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PluginVmImage">PluginVmImage</a></td>
-<td>PluginVm image</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PluginsSettings">PluginsSettings</a></td>
-<td>Plugins settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultPluginsSetting">DefaultPluginsSetting</a></td>
-<td>Default Flash setting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PluginsAllowedForUrls">PluginsAllowedForUrls</a></td>
-<td>Allow the Flash plugin on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PluginsBlockedForUrls">PluginsBlockedForUrls</a></td>
-<td>Block the Flash plugin on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PopupsSettings">PopupsSettings</a></td>
-<td>Popups settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultPopupsSetting">DefaultPopupsSetting</a></td>
-<td>Default popups setting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PopupsAllowedForUrls">PopupsAllowedForUrls</a></td>
-<td>Allow popups on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#PopupsBlockedForUrls">PopupsBlockedForUrls</a></td>
-<td>Block popups on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#Proxy">Proxy</a></td>
-<td>Proxy</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ProxyMode">ProxyMode</a></td>
-<td>Choose how to specify proxy server settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ProxyServerMode">ProxyServerMode</a></td>
-<td>Choose how to specify proxy server settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ProxyServer">ProxyServer</a></td>
-<td>Address or URL of proxy server</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ProxyPacUrl">ProxyPacUrl</a></td>
-<td>URL to a proxy .pac file</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ProxyBypassList">ProxyBypassList</a></td>
-<td>Proxy bypass rules</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ProxySettings">ProxySettings</a></td>
-<td>Proxy settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#QuickUnlock">QuickUnlock</a></td>
-<td>Quick unlock</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#QuickUnlockModeWhitelist">QuickUnlockModeWhitelist</a></td>
-<td>Configure allowed quick unlock modes</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#QuickUnlockTimeout">QuickUnlockTimeout</a></td>
-<td>Set how often user has to enter password to use quick unlock</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccess">RemoteAccess</a></td>
-<td>Remote access</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessClientFirewallTraversal">RemoteAccessClientFirewallTraversal</a></td>
-<td>Enable firewall traversal from remote access client</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostClientDomain">RemoteAccessHostClientDomain</a></td>
-<td>Configure the required domain name for remote access clients</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostClientDomainList">RemoteAccessHostClientDomainList</a></td>
-<td>Configure the required domain names for remote access clients</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostFirewallTraversal">RemoteAccessHostFirewallTraversal</a></td>
-<td>Enable firewall traversal from remote access host</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostDomain">RemoteAccessHostDomain</a></td>
-<td>Configure the required domain name for remote access hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostDomainList">RemoteAccessHostDomainList</a></td>
-<td>Configure the required domain names for remote access hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostRequireTwoFactor">RemoteAccessHostRequireTwoFactor</a></td>
-<td>Enable two-factor authentication for remote access hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostTalkGadgetPrefix">RemoteAccessHostTalkGadgetPrefix</a></td>
-<td>Configure the TalkGadget prefix for remote access hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostRequireCurtain">RemoteAccessHostRequireCurtain</a></td>
-<td>Enable curtaining of remote access hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostAllowClientPairing">RemoteAccessHostAllowClientPairing</a></td>
-<td>Enable or disable PIN-less authentication for remote access hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostAllowGnubbyAuth">RemoteAccessHostAllowGnubbyAuth</a></td>
-<td>Allow gnubby authentication for remote access hosts</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostAllowRelayedConnection">RemoteAccessHostAllowRelayedConnection</a></td>
-<td>Enable the use of relay servers by the remote access host</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostUdpPortRange">RemoteAccessHostUdpPortRange</a></td>
-<td>Restrict the UDP port range used by the remote access host</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostMatchUsername">RemoteAccessHostMatchUsername</a></td>
-<td>Require that the name of the local user and the remote access host owner match</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostTokenUrl">RemoteAccessHostTokenUrl</a></td>
-<td>URL where remote access clients should obtain their authentication token</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostTokenValidationUrl">RemoteAccessHostTokenValidationUrl</a></td>
-<td>URL for validating remote access client authentication token</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostTokenValidationCertificateIssuer">RemoteAccessHostTokenValidationCertificateIssuer</a></td>
-<td>Client certificate for connecting to RemoteAccessHostTokenValidationUrl</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostDebugOverridePolicies">RemoteAccessHostDebugOverridePolicies</a></td>
-<td>Policy overrides for Debug builds of the remote access host</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostAllowUiAccessForRemoteAssistance">RemoteAccessHostAllowUiAccessForRemoteAssistance</a></td>
-<td>Allow remote users to interact with elevated windows in remote assistance sessions</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RemoteAccessHostAllowFileTransfer">RemoteAccessHostAllowFileTransfer</a></td>
-<td>Allow remote access users to transfer files to/from the host</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RestoreOnStartup">RestoreOnStartup</a></td>
-<td>Action on startup</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RestoreOnStartup">RestoreOnStartup</a></td>
-<td>Action on startup</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#RestoreOnStartupURLs">RestoreOnStartupURLs</a></td>
-<td>URLs to open on startup</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SAML">SAML</a></td>
-<td>SAML</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceSamlLoginAuthenticationType">DeviceSamlLoginAuthenticationType</a></td>
-<td>SAML login authentication type</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceTransferSAMLCookies">DeviceTransferSAMLCookies</a></td>
-<td>Transfer SAML IdP cookies during login</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SafeBrowsing">SafeBrowsing</a></td>
-<td>Safe Browsing settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SafeBrowsingEnabled">SafeBrowsingEnabled</a></td>
-<td>Enable Safe Browsing</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SafeBrowsingExtendedReportingEnabled">SafeBrowsingExtendedReportingEnabled</a></td>
-<td>Enable Safe Browsing Extended Reporting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SafeBrowsingExtendedReportingOptInAllowed">SafeBrowsingExtendedReportingOptInAllowed</a></td>
-<td>Allow users to opt in to Safe Browsing extended reporting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SafeBrowsingWhitelistDomains">SafeBrowsingWhitelistDomains</a></td>
-<td>Configure the list of domains on which Safe Browsing will not trigger warnings.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SupervisedUsers">SupervisedUsers</a></td>
-<td>Supervised users</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SupervisedUsersEnabled">SupervisedUsersEnabled</a></td>
-<td>Enable supervised users</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SupervisedUserCreationEnabled">SupervisedUserCreationEnabled</a></td>
-<td>Enable creation of supervised users</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#SupervisedUserContentProviderEnabled">SupervisedUserContentProviderEnabled</a></td>
-<td>Enable the supervised user content provider</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#UserAndDeviceReporting">UserAndDeviceReporting</a></td>
-<td>User and device reporting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceVersionInfo">ReportDeviceVersionInfo</a></td>
-<td>Report OS and firmware version</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceBootMode">ReportDeviceBootMode</a></td>
-<td>Report device boot mode</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceUsers">ReportDeviceUsers</a></td>
-<td>Report device users</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceActivityTimes">ReportDeviceActivityTimes</a></td>
-<td>Report device activity times</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceLocation">ReportDeviceLocation</a></td>
-<td>Report device location</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceNetworkInterfaces">ReportDeviceNetworkInterfaces</a></td>
-<td>Report device network interfaces</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceHardwareStatus">ReportDeviceHardwareStatus</a></td>
-<td>Report hardware status</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceSessionStatus">ReportDeviceSessionStatus</a></td>
-<td>Report information about active kiosk sessions</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceBoardStatus">ReportDeviceBoardStatus</a></td>
-<td>Report board status</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDevicePowerStatus">ReportDevicePowerStatus</a></td>
-<td>Report power status</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportDeviceStorageStatus">ReportDeviceStorageStatus</a></td>
-<td>Report storage status</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportUploadFrequency">ReportUploadFrequency</a></td>
-<td>Frequency of device status report uploads</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#ReportArcStatusEnabled">ReportArcStatusEnabled</a></td>
-<td>Report information about status of Android</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#HeartbeatEnabled">HeartbeatEnabled</a></td>
-<td>Send network packets to the management server to monitor online status</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#HeartbeatFrequency">HeartbeatFrequency</a></td>
-<td>Frequency of monitoring network packets</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#LogUploadEnabled">LogUploadEnabled</a></td>
-<td>Send system logs to the management server</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceMetricsReportingEnabled">DeviceMetricsReportingEnabled</a></td>
-<td>Enable metrics reporting</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#WebUsbSettings">WebUsbSettings</a></td>
-<td>Web USB settings</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DefaultWebUsbGuardSetting">DefaultWebUsbGuardSetting</a></td>
-<td>Control use of the WebUSB API</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceWebUsbAllowDevicesForUrls">DeviceWebUsbAllowDevicesForUrls</a></td>
-<td>Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#WebUsbAllowDevicesForUrls">WebUsbAllowDevicesForUrls</a></td>
-<td>Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs.</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#WebUsbAskForUrls">WebUsbAskForUrls</a></td>
-<td>Allow WebUSB on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#WebUsbBlockedForUrls">WebUsbBlockedForUrls</a></td>
-<td>Block WebUSB on these sites</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#WiFi">WiFi</a></td>
-<td>WiFi</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceWiFiFastTransitionEnabled">DeviceWiFiFastTransitionEnabled</a></td>
-<td>Enable 802.11r Fast Transition</td>
-</tr>
-<tr>
-<td><a href="/administrators/policy-list-3#DeviceWiFiAllowed">DeviceWiFiAllowed</a></td>
-<td>Enable WiFi</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/policy-list-3/cookie-legacy-samesite-policies/index.md b/chromium/docs/website/site/administrators/policy-list-3/cookie-legacy-samesite-policies/index.md
deleted file mode 100644
index fcbcb16b172..00000000000
--- a/chromium/docs/website/site/administrators/policy-list-3/cookie-legacy-samesite-policies/index.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-- - /administrators/policy-list-3
- - Policy List
-page_name: cookie-legacy-samesite-policies
-title: Cookie Legacy SameSite Policies
----
-
-**NOTE: These policies are available as of Chrome 79.**
-
-**(May 6, 2021) LegacySameSiteCookieBehaviorEnabledForDomainList will be
-available until at least Dec 31, 2022. LegacySameSiteCookieBehaviorEnabled was
-previously available until it was [removed in Chrome 93](https://chromium.googlesource.com/chromium/src/+/a5d81113983931597cc6cfb96558decfa615d464)
-released on Aug 31, 2021. We will be monitoring feedback about these policies
-and will provide updates on their lifetime as appropriate.**
-
-~~**(Nov 6, 2020) LegacySameSiteCookieBehaviorEnabled will be available until at
-least Aug 31, 2021. LegacySameSiteCookieBehaviorEnabledForDomainList will be
-available until at least Mar 8, 2022. We will be monitoring feedback about these
-policies and will provide updates on their lifetime as appropriate.**~~
-
-~~**(May 29, 2020) These policies will be available until at least July 14,
-2021. We will be monitoring feedback about these policies and will provide
-updates on their lifetime as appropriate.**~~
-
-~~**(Feb 10, 2020) These policies will be available for at least 12 months after
-the release of Chrome 80 stable. We will be monitoring feedback about these
-policies and will provide updates on their lifetime as appropriate.**~~
-
-The policies
-[LegacySameSiteCookieBehaviorEnabled](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=LegacySameSiteCookieBehaviorEnabled)
-and
-[LegacySameSiteCookieBehaviorEnabledForDomainList](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=LegacySameSiteCookieBehaviorEnabledForDomainList)
-allow you to revert the SameSite behavior of cookies (possibly on specific
-domains) to legacy behavior.
-
-All cookies that match a domain pattern listed in
-LegacySameSiteCookieBehaviorEnabledForDomainList (see below) will be reverted to
-legacy behavior. For cookies that do not match a domain pattern listed in
-LegacySameSiteCookieBehaviorEnabledForDomainList, or for all cookies if
-LegacySameSiteCookieBehaviorEnabledForDomainList is not set, the global default
-setting will be used. If LegacySameSiteCookieBehaviorEnabled is set, legacy
-behavior will be enabled for all cookies as a global default. If
-LegacySameSiteCookieBehaviorEnabled is not set, the user's personal
-configuration will determine the global default setting.
-
-**The SameSite attribute**
-
-The SameSite attribute of a cookie specifies whether the cookie should be
-restricted to a first-party or same-site context. Several values of SameSite are
-allowed:
-
-* A cookie with "SameSite=Strict" will only be sent with a same-site
- request.
-* A cookie with "SameSite=Lax" will be sent with a same-site request,
- or a cross-site top-level navigation with a "safe" HTTP method.
-* A cookie with "SameSite=None" will be sent with both same-site and
- cross-site requests.
-
-See
-<https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7>
-for the definition of the SameSite attribute. See
-<https://web.dev/samesite-cookies-explained/> for a more detailed explanation of
-the SameSite attribute with examples.
-
-Schemeful Same-Site
-
-Schemeful Same-Site is a modification of the definition of a “site” to include
-both the scheme and the registrable domain. This means that, with Schemeful
-Same-Site, <http://site.example> and <https://site.example> are now considered
-cross-site whereas previously they would be considered same-site.
-
-This feature is still being prototyped and has a tentative M88 launch. See
-[Chrome Platform Status
-page](https://www.chromestatus.com/feature/5096179480133632).
-
-See the [Schemeful Same-Site
-explainer](https://github.com/sbingler/schemeful-same-site) for more details and
-examples.
-
-See
-<https://mikewest.github.io/cookie-incrementalism/draft-west-cookie-incrementalism.html#rfc.section.3.3>
-for the spec.
-
-**Legacy SameSite behavior**
-
-As of Chrome 80 (see [launch timeline](/updates/same-site)), a cookie that does
-not explicitly specify a SameSite attribute will be treated as if it were
-"SameSite=Lax". In addition, any cookie that specifies "SameSite=None" must also
-have the Secure attribute. (See
-<https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.5>
-for the definition of the Secure attribute.)
-
-Reverting to the legacy SameSite behavior causes cookies to be handled like they
-were prior to May 2019 (when the new SameSite behavior described above first
-became available). Under legacy behavior, cookies that don't explicitly specify
-a SameSite attribute are treated as if they were "SameSite=None", i.e., they
-will be sent with both same-site and cross-site requests. In addition, reverting
-to the legacy behavior removes the requirement that "SameSite=None" cookies must
-also specify the Secure attribute. As of Chrome 86 reverting to legacy behavior
-will also disable Schemeful Same-Site.
-
-**Configuring LegacySameSiteCookieBehaviorEnabledForDomainList**
-
-In this policy setting, you can list specific domains for which legacy SameSite
-behavior will be used. For cookies you want to revert to legacy SameSite
-behavior, list the domain/host on which the cookies are set, NOT the
-domains/hosts from which cross-site requests are made.
-
-The domain of a cookie specifies those hosts to which the cookie will be sent.
-If the Domain attribute of the cookie is specified, then the cookie will be sent
-to hosts for which the specified Domain attribute is a suffix of the hostname,
-and reversion to legacy SameSite behavior will be triggered only if the value of
-the specified Domain attribute matches any of the patterns listed in this policy
-setting. If the Domain attribute of the cookie is not specified, then the cookie
-will only be sent to the origin server which set the cookie, and reversion to
-legacy SameSite behavior will be triggered only if the hostname of the origin
-server matches any of the patterns listed in this policy setting. See
-<https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.3>
-for the definition of the Domain attribute.
-
-*Example 1*: If the Domain attribute of the cookie is set to
-"Domain=example.com", the cookie will be sent when making HTTP requests to
-example.com, www.example.com, or www.corp.example.com. To revert to legacy
-behavior for such a cookie, use the pattern '\[\*.\]example.com' or
-'example.com'. The value of the Domain attribute (example.com) will match either
-of these patterns. Even though the cookie would be sent to www.example.com, the
-pattern 'www.example.com' will NOT match such a cookie, because the Domain
-attribute value (example.com) does not match the pattern 'www.example.com'.
-
-*Example 2*: If the Domain attribute of a cookie set by www.example.com is not
-specified, the cookie will be sent only when making HTTP requests to
-www.example.com. The cookie will not be sent when making HTTP requests to
-example.com or sub.www.example.com. To revert to legacy behavior for such a
-cookie, use the pattern 'www.example.com' or '\[\*.\]example.com'. The origin
-server's hostname (www.example.com) will match either of these patterns.
-
-Note that patterns you list here are treated as domains, not URLs, so you should
-not specify a scheme or port. Specifying a scheme or port may result in
-undefined behavior. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/policy-list-3/deprecated-policies/index.md b/chromium/docs/website/site/administrators/policy-list-3/deprecated-policies/index.md
deleted file mode 100644
index 6b7eff8e253..00000000000
--- a/chromium/docs/website/site/administrators/policy-list-3/deprecated-policies/index.md
+++ /dev/null
@@ -1,1046 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-- - /administrators/policy-list-3
- - Policy List
-page_name: deprecated-policies
-title: Deprecated Policies
----
-
-### DefaultMediaStreamSetting (deprecated)
-
-Default mediastream settingData type:Integer \[Windows:REG_DWORD\]Windows
-registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\DefaultMediaStreamSettingWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\DefaultMediaStreamSettingMac/Linux
-preference name:DefaultMediaStreamSettingSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 22
-* Google Chrome OS (Google Chrome OS) since version 22
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-Allows you to set whether websites are allowed to get access to media capture
-devices. Access to media capture devices can be allowed by default, or the user
-can be asked every time a website wants to get access to media capture devices.
-
-If this policy is left not set, 'PromptOnAccess' will be used and the user will
-be able to change it.
-
-* 2 = Do not allow any site to access the camera and microphone
-* 3 = Ask every time a site wants to access the camera and/or
- microphone
-
-Example value:0x00000002 (Windows), 2 (Linux), 2 (Mac)[Back to top](#top)
-
-### ScreenDimDelayAC (deprecated)
-
-Screen dim delay when running on AC powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ScreenDimDelayACSupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the screen is dimmed
-when running on AC power.
-
-When this policy is set to a value greater than zero, it specifies the length of
-time that the user must remain idle before Google Chrome OS dims the screen.
-
-When this policy is set to zero, Google Chrome OS does not dim the screen when
-the user becomes idle.
-
-When this policy is unset, a default length of time is used.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than or equal the screen off delay (if set) and the idle delay.
-
-Example value:0x000668a0 (Windows)[Back to top](#top)
-
-### ScreenOffDelayAC (deprecated)
-
-Screen off delay when running on AC powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ScreenOffDelayACSupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the screen is turned
-off when running on AC power.
-
-When this policy is set to a value greater than zero, it specifies the length of
-time that the user must remain idle before Google Chrome OS turns off the
-screen.
-
-When this policy is set to zero, Google Chrome OS does not turn off the screen
-when the user becomes idle.
-
-When this policy is unset, a default length of time is used.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than or equal the idle delay.
-
-Example value:0x00075300 (Windows)[Back to top](#top)
-
-### ScreenLockDelayAC (deprecated)
-
-Screen lock delay when running on AC powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ScreenLockDelayACSupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the screen is locked
-when running on AC power.
-
-When this policy is set to a value greater than zero, it specifies the length of
-time that the user must remain idle before Google Chrome OS locks the screen.
-
-When this policy is set to zero, Google Chrome OS does not lock the screen when
-the user becomes idle.
-
-When this policy is unset, a default length of time is used.
-
-The recommended way to lock the screen on idle is to enable screen locking on
-suspend and have Google Chrome OS suspend after the idle delay. This policy
-should only be used when screen locking should occur a significant amount of
-time sooner than suspend or when suspend on idle is not desired at all.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than the idle delay.
-
-Example value:0x000927c0 (Windows)[Back to top](#top)
-
-### IdleWarningDelayAC (deprecated)
-
-Idle warning delay when running on AC powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IdleWarningDelayACSupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 27
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which a warning dialog is
-shown when running on AC power.
-
-When this policy is set, it specifies the length of time that the user must
-remain idle before Google Chrome OS shows a warning dialog telling the user that
-the idle action is about to be taken.
-
-When this policy is unset, no warning dialog is shown.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than or equal the idle delay.
-
-The warning message is only shown if the idle action is to logout or shut down.
-
-Example value:0x000850e8 (Windows)[Back to top](#top)
-
-### IdleDelayAC (deprecated)
-
-Idle delay when running on AC powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IdleDelayACSupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the idle action is
-taken when running on AC power.
-
-When this policy is set, it specifies the length of time that the user must
-remain idle before Google Chrome OS takes the idle action, which can be
-configured separately.
-
-When this policy is unset, a default length of time is used.
-
-The policy value should be specified in milliseconds.
-
-Example value:0x001b7740 (Windows)[Back to top](#top)
-
-### ScreenDimDelayBattery (deprecated)
-
-Screen dim delay when running on battery powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ScreenDimDelayBatterySupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the screen is dimmed
-when running on battery power.
-
-When this policy is set to a value greater than zero, it specifies the length of
-time that the user must remain idle before Google Chrome OS dims the screen.
-
-When this policy is set to zero, Google Chrome OS does not dim the screen when
-the user becomes idle.
-
-When this policy is unset, a default length of time is used.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than or equal the screen off delay (if set) and the idle delay.
-
-Example value:0x000493e0 (Windows)[Back to top](#top)
-
-### ScreenOffDelayBattery (deprecated)
-
-Screen off delay when running on battery powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ScreenOffDelayBatterySupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the screen is turned
-off when running on battery power.
-
-When this policy is set to a value greater than zero, it specifies the length of
-time that the user must remain idle before Google Chrome OS turns off the
-screen.
-
-When this policy is set to zero, Google Chrome OS does not turn off the screen
-when the user becomes idle.
-
-When this policy is unset, a default length of time is used.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than or equal the idle delay.
-
-Example value:0x00057e40 (Windows)[Back to top](#top)
-
-### ScreenLockDelayBattery (deprecated)
-
-Screen lock delay when running on battery powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ScreenLockDelayBatterySupported
-on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the screen is locked
-when running on battery power.
-
-When this policy is set to a value greater than zero, it specifies the length of
-time that the user must remain idle before Google Chrome OS locks the screen.
-
-When this policy is set to zero, Google Chrome OS does not lock the screen when
-the user becomes idle.
-
-When this policy is unset, a default length of time is used.
-
-The recommended way to lock the screen on idle is to enable screen locking on
-suspend and have Google Chrome OS suspend after the idle delay. This policy
-should only be used when screen locking should occur a significant amount of
-time sooner than suspend or when suspend on idle is not desired at all.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than the idle delay.
-
-Example value:0x000927c0 (Windows)[Back to top](#top)
-
-### IdleWarningDelayBattery (deprecated)
-
-Idle warning delay when running on battery powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IdleWarningDelayBatterySupported
-on:
-
-* Google Chrome OS (Google Chrome OS) since version 27
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which a warning dialog is
-shown when running on battery power.
-
-When this policy is set, it specifies the length of time that the user must
-remain idle before Google Chrome OS shows a warning dialog telling the user that
-the idle action is about to be taken.
-
-When this policy is unset, no warning dialog is shown.
-
-The policy value should be specified in milliseconds. Values are clamped to be
-less than or equal the idle delay.
-
-The warning message is only shown if the idle action is to logout or shut down.
-
-Example value:0x000850e8 (Windows)[Back to top](#top)
-
-### IdleDelayBattery (deprecated)
-
-Idle delay when running on battery powerData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IdleDelayBatterySupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Specifies the length of time without user input after which the idle action is
-taken when running on battery power.
-
-When this policy is set, it specifies the length of time that the user must
-remain idle before Google Chrome OS takes the idle action, which can be
-configured separately.
-
-When this policy is unset, a default length of time is used.
-
-The policy value should be specified in milliseconds.
-
-Example value:0x000927c0 (Windows)[Back to top](#top)
-
-### IdleAction (deprecated)
-
-Action to take when the idle delay is reachedData type:Integer
-\[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IdleActionSupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 26
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-Note that this policy is deprecated and will be removed in the future.
-
-This policy provides a fallback value for the more-specific IdleActionAC and
-IdleActionBattery policies. If this policy is set, its value gets used if the
-respective more-specific policy is not set.
-
-When this policy is unset, behavior of the more-specific policies remains
-unaffected.
-
-* 0 = Suspend
-* 1 = Log the user out
-* 2 = Shut down
-* 3 = Do nothing
-
-Example value:0x00000000 (Windows)[Back to top](#top)
-
-### IdleActionAC (deprecated)
-
-Action to take when the idle delay is reached while running on AC powerData
-type:Integer \[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IdleActionACSupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 30
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-When this policy is set, it specifies the action that Google Chrome OS takes
-when the user remains idle for the length of time given by the idle delay, which
-can be configured separately.
-
-When this policy is unset, the default action is taken, which is suspend.
-
-If the action is suspend, Google Chrome OS can separately be configured to
-either lock or not lock the screen before suspending.
-
-* 0 = Suspend
-* 1 = Log the user out
-* 2 = Shut down
-* 3 = Do nothing
-
-Example value:0x00000000 (Windows)[Back to top](#top)
-
-### IdleActionBattery (deprecated)
-
-Action to take when the idle delay is reached while running on battery powerData
-type:Integer \[Windows:REG_DWORD\]Windows registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IdleActionBatterySupported on:
-
-* Google Chrome OS (Google Chrome OS) since version 30
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-When this policy is set, it specifies the action that Google Chrome OS takes
-when the user remains idle for the length of time given by the idle delay, which
-can be configured separately.
-
-When this policy is unset, the default action is taken, which is suspend.
-
-If the action is suspend, Google Chrome OS can separately be configured to
-either lock or not lock the screen before suspending.
-
-* 0 = Suspend
-* 1 = Log the user out
-* 2 = Shut down
-* 3 = Do nothing
-
-Example value:0x00000000 (Windows)[Back to top](#top)
-
-### ProxyServerMode (deprecated)
-
-Choose how to specify proxy server settingsData type:Integer \[Android:choice,
-Windows:REG_DWORD\]Windows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\ProxyServerModeWindows registry
-location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ProxyServerModeMac/Linux
-preference name:ProxyServerModeAndroid restriction name:ProxyServerModeSupported
-on:
-
-* Google Chrome (Linux, Mac, Windows) since version 8
-* Google Chrome OS (Google Chrome OS) since version 11
-* Google Chrome (Android) since version 30
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated, use ProxyMode instead.
-
-Allows you to specify the proxy server used by Google Chrome and prevents users
-from changing proxy settings.
-
-This policy only takes effect if the ProxySettings policy has not been
-specified.
-
-If you choose to never use a proxy server and always connect directly, all other
-options are ignored.
-
-If you choose to use system proxy settings or auto detect the proxy server, all
-other options are ignored.
-
-If you choose manual proxy settings, you can specify further options in 'Address
-or URL of proxy server', 'URL to a proxy .pac file' and 'Comma-separated list of
-proxy bypass rules'. Only the HTTP proxy server with the highest priority is
-available for ARC-apps.
-
-For detailed examples, visit:
-<https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett>.
-
-If you enable this setting, Google Chrome ignores all proxy-related options
-specified from the command line.
-
-Leaving this policy not set will allow the users to choose the proxy settings on
-their own.
-
-* 0 = Never use a proxy
-* 1 = Auto detect proxy settings
-* 2 = Manually specify proxy settings
-* 3 = Use system proxy settings
-
-Note for Google Chrome OS devices supporting Android apps:
-
-You cannot force Android apps to use a proxy. A subset of proxy settings is made
-available to Android apps, which they may voluntarily choose to honor. See the
-ProxyMode policy for more details.
-
-Example value:0x00000002 (Windows), 2 (Linux), 2 (Android), 2 (Mac)[Back to
-top](#top)
-
-### RemoteAccessHostClientDomain (deprecated)
-
-Configure the required domain name for remote access clientsData type:String
-\[Windows:REG_SZ\]Windows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\RemoteAccessHostClientDomainWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\RemoteAccessHostClientDomainMac/Linux
-preference name:RemoteAccessHostClientDomainSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 22
-* Google Chrome OS (Google Chrome OS) since version 41
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-This policy is deprecated. Please use RemoteAccessHostClientDomainList instead.
-
-Example value:"my-awesome-domain.com"[Back to top](#top)
-
-### RemoteAccessHostDomain (deprecated)
-
-Configure the required domain name for remote access hostsData type:String
-\[Windows:REG_SZ\]Windows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\RemoteAccessHostDomainWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\RemoteAccessHostDomainMac/Linux
-preference name:RemoteAccessHostDomainSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 22
-* Google Chrome OS (Google Chrome OS) since version 41
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: NoDescription:
-
-This policy is deprecated. Please use RemoteAccessHostDomainList instead.
-
-Example value:"my-awesome-domain.com"[Back to top](#top)
-
-### SafeBrowsingExtendedReportingOptInAllowed (deprecated)
-
-Allow users to opt in to Safe Browsing extended reportingData type:Boolean
-\[Windows:REG_DWORD\]Windows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\SafeBrowsingExtendedReportingOptInAllowedWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\SafeBrowsingExtendedReportingOptInAllowedMac/Linux
-preference name:SafeBrowsingExtendedReportingOptInAllowedSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 44
-* Google Chrome OS (Google Chrome OS) since version 44
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This setting is deprecated, use SafeBrowsingExtendedReportingEnabled instead.
-Enabling or disabling SafeBrowsingExtendedReportingEnabled is equivalent to
-setting SafeBrowsingExtendedReportingOptInAllowed to False.
-
-Setting this policy to false stops users from choosing to send some system
-information and page content to Google servers. If this setting is true or not
-configured, then users will be allowed to send some system information and page
-content to Safe Browsing to help detect dangerous apps and sites.
-
-See <https://developers.google.com/safe-browsing> for more info on Safe
-Browsing.
-
-Example value:0x00000001 (Windows), true (Linux), &lt;true /&gt; (Mac)[Back to
-top](#top)
-
-### AutoFillEnabled (deprecated)
-
-Enable AutoFillData type:Boolean \[Windows:REG_DWORD\]Windows registry location
-for Windows clients:Software\\Policies\\Google\\Chrome\\AutoFillEnabledWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\AutoFillEnabledMac/Linux
-preference name:AutoFillEnabledAndroid restriction name:AutoFillEnabledSupported
-on:
-
-* Google Chrome (Linux, Mac, Windows) since version 8
-* Google Chrome OS (Google Chrome OS) since version 11
-* Google Chrome (Android) since version 30
-
-Supported features:Can Be Recommended: Yes, Dynamic Policy Refresh: Yes, Per
-Profile: YesDescription:
-
-This policy is deprecated in M70, please use AutofillAddressEnabled and
-AutofillCreditCardEnabled instead.
-
-Enables Google Chrome's AutoFill feature and allows users to auto complete web
-forms using previously stored information such as address or credit card
-information.
-
-If you disable this setting, AutoFill will be inaccessible to users.
-
-If you enable this setting or do not set a value, AutoFill will remain under the
-control of the user. This will allow them to configure AutoFill profiles and to
-switch AutoFill on or off at their own discretion.
-
-Example value:0x00000000 (Windows), false (Linux), false (Android), &lt;false
-/&gt; (Mac)[Back to top](#top)
-
-### DeveloperToolsDisabled (deprecated)
-
-Disable Developer ToolsData type:Boolean \[Windows:REG_DWORD\]Windows registry
-location for Windows
-clients:Software\\Policies\\Google\\Chrome\\DeveloperToolsDisabledWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\DeveloperToolsDisabledMac/Linux
-preference name:DeveloperToolsDisabledSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 9
-* Google Chrome OS (Google Chrome OS) since version 11
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated in M68, please use DeveloperToolsAvailability instead.
-
-Disables the Developer Tools and the JavaScript console.
-
-If you enable this setting, the Developer Tools can not be accessed and web-site
-elements can not be inspected anymore. Any keyboard shortcuts and any menu or
-context menu entries to open the Developer Tools or the JavaScript Console will
-be disabled.
-
-Setting this option to disabled or leaving it not set allows the user to use the
-Developer Tools and the JavaScript console.
-
-If the policy DeveloperToolsAvailability is set, the value of the policy
-DeveloperToolsDisabled is ignored.
-
-Note for Google Chrome OS devices supporting Android apps:
-
-This policy also controls access to Android Developer Options. If you set this
-policy to true, users cannot access Developer Options. If you set this policy to
-false or leave it unset, users can access Developer Options by tapping seven
-times on the build number in the Android settings app.
-
-Example value:0x00000000 (Windows), false (Linux), &lt;false /&gt; (Mac)[Back to
-top](#top)
-
-### DisabledPlugins (deprecated)
-
-Specify a list of disabled pluginsData type:List of stringsWindows registry
-location for Windows
-clients:Software\\Policies\\Google\\Chrome\\DisabledPluginsWindows registry
-location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\DisabledPluginsMac/Linux
-preference name:DisabledPluginsSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 8
-* Google Chrome OS (Google Chrome OS) since version 11
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated. Please use the DefaultPluginsSetting to control the
-avalability of the Flash plugin and AlwaysOpenPdfExternally to control whether
-the integrated PDF viewer should be used for opening PDF files.
-
-Specifies a list of plugins that are disabled in Google Chrome and prevents
-users from changing this setting.
-
-The wildcard characters '\*' and '?' can be used to match sequences of arbitrary
-characters. '\*' matches an arbitrary number of characters while '?' specifies
-an optional single character, i.e. matches zero or one characters. The escape
-character is '\\', so to match actual '\*', '?', or '\\' characters, you can put
-a '\\' in front of them.
-
-If you enable this setting, the specified list of plugins is never used in
-Google Chrome. The plugins are marked as disabled in 'about:plugins' and users
-cannot enable them.
-
-Note that this policy can be overridden by EnabledPlugins and
-DisabledPluginsExceptions.
-
-If this policy is left not set the user can use any plugin installed on the
-system except for hard-coded incompatible, outdated or dangerous plugins.
-
-Example value:Windows (Windows
-clients):Software\\Policies\\Google\\Chrome\\DisabledPlugins\\1 = "Java"
-Software\\Policies\\Google\\Chrome\\DisabledPlugins\\2 = "Shockwave Flash"
-Software\\Policies\\Google\\Chrome\\DisabledPlugins\\3 = "Chrome PDF
-Viewer"Windows (Google Chrome OS
-clients):Software\\Policies\\Google\\ChromeOS\\DisabledPlugins\\1 = "Java"
-Software\\Policies\\Google\\ChromeOS\\DisabledPlugins\\2 = "Shockwave Flash"
-Software\\Policies\\Google\\ChromeOS\\DisabledPlugins\\3 = "Chrome PDF
-Viewer"Android/Linux:\[ "Java", "Shockwave Flash", "Chrome PDF Viewer"
-\]Mac:&lt;array&gt; &lt;string&gt;Java&lt;/string&gt; &lt;string&gt;Shockwave
-Flash&lt;/string&gt; &lt;string&gt;Chrome PDF Viewer&lt;/string&gt;
-&lt;/array&gt;[Back to top](#top)
-
-### DisabledPluginsExceptions (deprecated)
-
-Specify a list of plugins that the user can enable or disableData type:List of
-stringsWindows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\DisabledPluginsExceptionsWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\DisabledPluginsExceptionsMac/Linux
-preference name:DisabledPluginsExceptionsSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 11
-* Google Chrome OS (Google Chrome OS) since version 11
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated. Please use the DefaultPluginsSetting to control the
-avalability of the Flash plugin and AlwaysOpenPdfExternally to control whether
-the integrated PDF viewer should be used for opening PDF files.
-
-Specifies a list of plugins that user can enable or disable in Google Chrome.
-
-The wildcard characters '\*' and '?' can be used to match sequences of arbitrary
-characters. '\*' matches an arbitrary number of characters while '?' specifies
-an optional single character, i.e. matches zero or one characters. The escape
-character is '\\', so to match actual '\*', '?', or '\\' characters, you can put
-a '\\' in front of them.
-
-If you enable this setting, the specified list of plugins can be used in Google
-Chrome. Users can enable or disable them in 'about:plugins', even if the plugin
-also matches a pattern in DisabledPlugins. Users can also enable and disable
-plugins that don't match any patterns in DisabledPlugins,
-DisabledPluginsExceptions and EnabledPlugins.
-
-This policy is meant to allow for strict plugin blacklisting where the
-'DisabledPlugins' list contains wildcarded entries like disable all plugins '\*'
-or disable all Java plugins '\*Java\*' but the administrator wishes to enable
-some particular version like 'IcedTea Java 2.3'. This particular versions can be
-specified in this policy.
-
-Note that both the plugin name and the plugin's group name have to be exempted.
-Each plugin group is shown in a separate section in about:plugins; each section
-may have one or more plugins. For example, the "Shockwave Flash" plugin belongs
-to the "Adobe Flash Player" group, and both names have to have a match in the
-exceptions list if that plugin is to be exempted from the blacklist.
-
-If this policy is left not set any plugin that matches the patterns in the
-'DisabledPlugins' will be locked disabled and the user won't be able to enable
-them.
-
-Example value:Windows (Windows
-clients):Software\\Policies\\Google\\Chrome\\DisabledPluginsExceptions\\1 =
-"Java" Software\\Policies\\Google\\Chrome\\DisabledPluginsExceptions\\2 =
-"Shockwave Flash"
-Software\\Policies\\Google\\Chrome\\DisabledPluginsExceptions\\3 = "Chrome PDF
-Viewer"Windows (Google Chrome OS
-clients):Software\\Policies\\Google\\ChromeOS\\DisabledPluginsExceptions\\1 =
-"Java" Software\\Policies\\Google\\ChromeOS\\DisabledPluginsExceptions\\2 =
-"Shockwave Flash"
-Software\\Policies\\Google\\ChromeOS\\DisabledPluginsExceptions\\3 = "Chrome PDF
-Viewer"Android/Linux:\[ "Java", "Shockwave Flash", "Chrome PDF Viewer"
-\]Mac:&lt;array&gt; &lt;string&gt;Java&lt;/string&gt; &lt;string&gt;Shockwave
-Flash&lt;/string&gt; &lt;string&gt;Chrome PDF Viewer&lt;/string&gt;
-&lt;/array&gt;[Back to top](#top)
-
-### DisabledSchemes (deprecated)
-
-Disable URL protocol schemesData type:List of stringsWindows registry location
-for Windows clients:Software\\Policies\\Google\\Chrome\\DisabledSchemesWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\DisabledSchemesMac/Linux
-preference name:DisabledSchemesSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 12
-* Google Chrome OS (Google Chrome OS) since version 12
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated, please use URLBlacklist instead.
-
-Disables the listed protocol schemes in Google Chrome.
-
-URLs using a scheme from this list will not load and can not be navigated to.
-
-If this policy is left not set or the list is empty all schemes will be
-accessible in Google Chrome.
-
-Example value:Windows (Windows
-clients):Software\\Policies\\Google\\Chrome\\DisabledSchemes\\1 = "file"
-Software\\Policies\\Google\\Chrome\\DisabledSchemes\\2 = "https"Windows (Google
-Chrome OS clients):Software\\Policies\\Google\\ChromeOS\\DisabledSchemes\\1 =
-"file" Software\\Policies\\Google\\ChromeOS\\DisabledSchemes\\2 =
-"https"Android/Linux:\[ "file", "https" \]Mac:&lt;array&gt;
-&lt;string&gt;file&lt;/string&gt; &lt;string&gt;https&lt;/string&gt;
-&lt;/array&gt;[Back to top](#top)
-
-### EnabledPlugins (deprecated)
-
-Specify a list of enabled pluginsData type:List of stringsWindows registry
-location for Windows
-clients:Software\\Policies\\Google\\Chrome\\EnabledPluginsWindows registry
-location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\EnabledPluginsMac/Linux preference
-name:EnabledPluginsSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 11
-* Google Chrome OS (Google Chrome OS) since version 11
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated. Please use the DefaultPluginsSetting to control the
-avalability of the Flash plugin and AlwaysOpenPdfExternally to control whether
-the integrated PDF viewer should be used for opening PDF files.
-
-Specifies a list of plugins that are enabled in Google Chrome and prevents users
-from changing this setting.
-
-The wildcard characters '\*' and '?' can be used to match sequences of arbitrary
-characters. '\*' matches an arbitrary number of characters while '?' specifies
-an optional single character, i.e. matches zero or one characters. The escape
-character is '\\', so to match actual '\*', '?', or '\\' characters, you can put
-a '\\' in front of them.
-
-The specified list of plugins is always used in Google Chrome if they are
-installed. The plugins are marked as enabled in 'about:plugins' and users cannot
-disable them.
-
-Note that this policy overrides both DisabledPlugins and
-DisabledPluginsExceptions.
-
-If this policy is left not set the user can disable any plugin installed on the
-system.
-
-Example value:Windows (Windows
-clients):Software\\Policies\\Google\\Chrome\\EnabledPlugins\\1 = "Java"
-Software\\Policies\\Google\\Chrome\\EnabledPlugins\\2 = "Shockwave Flash"
-Software\\Policies\\Google\\Chrome\\EnabledPlugins\\3 = "Chrome PDF
-Viewer"Windows (Google Chrome OS
-clients):Software\\Policies\\Google\\ChromeOS\\EnabledPlugins\\1 = "Java"
-Software\\Policies\\Google\\ChromeOS\\EnabledPlugins\\2 = "Shockwave Flash"
-Software\\Policies\\Google\\ChromeOS\\EnabledPlugins\\3 = "Chrome PDF
-Viewer"Android/Linux:\[ "Java", "Shockwave Flash", "Chrome PDF Viewer"
-\]Mac:&lt;array&gt; &lt;string&gt;Java&lt;/string&gt; &lt;string&gt;Shockwave
-Flash&lt;/string&gt; &lt;string&gt;Chrome PDF Viewer&lt;/string&gt;
-&lt;/array&gt;[Back to top](#top)
-
-### ForceBrowserSignin (deprecated)
-
-Enable force sign in for Google ChromeData type:Boolean
-\[Windows:REG_DWORD\]Windows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\ForceBrowserSigninMac/Linux
-preference name:ForceBrowserSigninAndroid restriction
-name:ForceBrowserSigninSupported on:
-
-* Google Chrome (Windows) since version 64
-* Google Chrome (Mac) since version 66
-* Google Chrome (Android) since version 65
-
-Supported features:Dynamic Policy Refresh: No, Per Profile: NoDescription:
-
-This policy is deprecated, consider using BrowserSignin instead.
-
-If this policy is set to true, user has to sign in to Google Chrome with their
-profile before using the browser. And the default value of
-BrowserGuestModeEnabled will be set to false. Note that existing unsigned
-profiles will be locked and inaccessible after enabling this policy. For more
-information, see help center article.
-
-If this policy is set to false or not configured, user can use the browser
-without sign in to Google Chrome.
-
-Example value:0x00000000 (Windows), false (Android), &lt;false /&gt; (Mac)[Back
-to top](#top)
-
-### ForceSafeSearch (deprecated)
-
-Force SafeSearchData type:Boolean \[Windows:REG_DWORD\]Windows registry location
-for Windows clients:Software\\Policies\\Google\\Chrome\\ForceSafeSearchWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ForceSafeSearchMac/Linux
-preference name:ForceSafeSearchAndroid restriction name:ForceSafeSearchSupported
-on:
-
-* Google Chrome (Linux, Mac, Windows) since version 25
-* Google Chrome OS (Google Chrome OS) since version 25
-* Google Chrome (Android) since version 30
-
-Supported features:Can Be Recommended: No, Dynamic Policy Refresh: Yes, Per
-Profile: YesDescription:
-
-This policy is deprecated, please use ForceGoogleSafeSearch and
-ForceYouTubeRestrict instead. This policy is ignored if either the
-ForceGoogleSafeSearch, the ForceYouTubeRestrict or the (deprecated)
-ForceYouTubeSafetyMode policies are set.
-
-Forces queries in Google Web Search to be done with SafeSearch set to active and
-prevents users from changing this setting. This setting also forces Moderate
-Restricted Mode on YouTube.
-
-If you enable this setting, SafeSearch in Google Search and Moderate Restricted
-Mode YouTube is always active.
-
-If you disable this setting or do not set a value, SafeSearch in Google Search
-and Restricted Mode in YouTube is not enforced.
-
-Example value:0x00000000 (Windows), false (Linux), false (Android), &lt;false
-/&gt; (Mac)[Back to top](#top)
-
-### ForceYouTubeSafetyMode (deprecated)
-
-Force YouTube Safety ModeData type:Boolean \[Windows:REG_DWORD\]Windows registry
-location for Windows
-clients:Software\\Policies\\Google\\Chrome\\ForceYouTubeSafetyModeWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\ForceYouTubeSafetyModeMac/Linux
-preference name:ForceYouTubeSafetyModeAndroid restriction
-name:ForceYouTubeSafetyModeSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 41
-* Google Chrome OS (Google Chrome OS) since version 41
-* Google Chrome (Android) since version 41
-
-Supported features:Can Be Recommended: No, Dynamic Policy Refresh: Yes, Per
-Profile: YesDescription:
-
-This policy is deprecated. Consider using ForceYouTubeRestrict, which overrides
-this policy and allows more fine-grained tuning.
-
-Forces YouTube Moderate Restricted Mode and prevents users from changing this
-setting.
-
-If this setting is enabled, Restricted Mode on YouTube is always enforced to be
-at least Moderate.
-
-If this setting is disabled or no value is set, Restricted Mode on YouTube is
-not enforced by Google Chrome. External policies such as YouTube policies might
-still enforce Restricted Mode, though.
-
-Note for Google Chrome OS devices supporting Android apps:
-
-This policy has no effect on the Android YouTube app. If Safety Mode on YouTube
-should be enforced, installation of the Android YouTube app should be
-disallowed.
-
-Example value:0x00000000 (Windows), false (Linux), false (Android), &lt;false
-/&gt; (Mac)[Back to top](#top)
-
-### Http09OnNonDefaultPortsEnabled (deprecated)
-
-Enable HTTP/0.9 support on non-default portsData type:Boolean
-\[Windows:REG_DWORD\]Windows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\Http09OnNonDefaultPortsEnabledWindows
-registry location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\Http09OnNonDefaultPortsEnabledMac/Linux
-preference name:Http09OnNonDefaultPortsEnabledSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 54 until version
- 77
-* Google Chrome OS (Google Chrome OS) since version 54 until version
- 77
-
-Supported features:Dynamic Policy Refresh: No, Per Profile: NoDescription:
-
-This policy is deprecated, and slated for removal in Chrome 78, with no
-replacement.
-
-This policy enables HTTP/0.9 on ports other than 80 for HTTP and 443 for HTTPS.
-
-This policy is disabled by default, and if enabled, leaves users open to the
-security issue <https://crbug.com/600352>.
-
-This policy is intended to give enterprises a chance to migrate exising servers
-off of HTTP/0.9, and will be removed in the future.
-
-If this policy is not set, HTTP/0.9 will be disabled on non-default ports.
-
-Example value:0x00000000 (Windows), false (Linux), &lt;false /&gt; (Mac)[Back to
-top](#top)
-
-### IncognitoEnabled (deprecated)
-
-Enable Incognito modeData type:Boolean \[Windows:REG_DWORD\]Windows registry
-location for Windows
-clients:Software\\Policies\\Google\\Chrome\\IncognitoEnabledWindows registry
-location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\IncognitoEnabledMac/Linux
-preference name:IncognitoEnabledAndroid restriction
-name:IncognitoEnabledSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 11
-* Google Chrome OS (Google Chrome OS) since version 11
-* Google Chrome (Android) since version 30
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated. Please, use IncognitoModeAvailability instead.
-Enables Incognito mode in Google Chrome.
-
-If this setting is enabled or not configured, users can open web pages in
-incognito mode.
-
-If this setting is disabled, users cannot open web pages in incognito mode.
-
-If this policy is left not set, this will be enabled and the user will be able
-to use incognito mode.
-
-Example value:0x00000000 (Windows), false (Linux), false (Android), &lt;false
-/&gt; (Mac)[Back to top](#top)
-
-### JavascriptEnabled (deprecated)
-
-Enable JavaScriptData type:Boolean \[Windows:REG_DWORD\]Windows registry
-location for Windows
-clients:Software\\Policies\\Google\\Chrome\\JavascriptEnabledWindows registry
-location for Google Chrome OS
-clients:Software\\Policies\\Google\\ChromeOS\\JavascriptEnabledMac/Linux
-preference name:JavascriptEnabledAndroid restriction
-name:JavascriptEnabledSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 8
-* Google Chrome OS (Google Chrome OS) since version 11
-* Google Chrome (Android) since version 30
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated, please use DefaultJavaScriptSetting instead.
-
-Can be used to disabled JavaScript in Google Chrome.
-
-If this setting is disabled, web pages cannot use JavaScript and the user cannot
-change that setting.
-
-If this setting is enabled or not set, web pages can use JavaScript but the user
-can change that setting.
-
-Example value:0x00000001 (Windows), true (Linux), true (Android), &lt;true /&gt;
-(Mac)[Back to top](#top)
-
-### MachineLevelUserCloudPolicyEnrollmentToken (deprecated)
-
-The enrollment token of cloud policy on desktopData type:String
-\[Windows:REG_SZ\]Windows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\MachineLevelUserCloudPolicyEnrollmentTokenMac/Linux
-preference name:MachineLevelUserCloudPolicyEnrollmentTokenSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 66
-
-Supported features:Dynamic Policy Refresh: No, Per Profile: NoDescription:
-
-This policy is deprecated in M72. Please use CloudManagementEnrollmentToken
-instead.
-
-Example value:"37185d02-e055-11e7-80c1-9a214cf093ae"[Back to top](#top)
-
-### SigninAllowed (deprecated)
-
-Allow sign in to Google ChromeData type:Boolean \[Windows:REG_DWORD\]Windows
-registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\SigninAllowedMac/Linux preference
-name:SigninAllowedAndroid restriction name:SigninAllowedSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 27
-* Google Chrome (Android) since version 38
-
-Supported features:Dynamic Policy Refresh: Yes, Per Profile: YesDescription:
-
-This policy is deprecated, consider using BrowserSignin instead.
-
-Allows the user to sign in to Google Chrome.
-
-If you set this policy, you can configure whether a user is allowed to sign in
-to Google Chrome. Setting this policy to 'False' will prevent apps and
-extensions that use the chrome.identity API from functioning, so you may want to
-use SyncDisabled instead.
-
-Example value:0x00000001 (Windows), true (Linux), true (Android), &lt;true /&gt;
-(Mac)[Back to top](#top)
-
-### UnsafelyTreatInsecureOriginAsSecure (deprecated)
-
-Origins or hostname patterns for which restrictions on insecure origins should
-not applyData type:List of stringsWindows registry location for Windows
-clients:Software\\Policies\\Google\\Chrome\\UnsafelyTreatInsecureOriginAsSecureMac/Linux
-preference name:UnsafelyTreatInsecureOriginAsSecureSupported on:
-
-* Google Chrome (Linux, Mac, Windows) since version 65
-
-Supported features:Dynamic Policy Refresh: No, Per Profile: NoDescription:
-
-Deprecated in M69. Use OverrideSecurityRestrictionsOnInsecureOrigin instead.
-
-The policy specifies a list of origins (URLs) or hostname patterns (such as
-"\*.example.com") for which security restrictions on insecure origins will not
-apply.
-
-The intent is to allow organizations to allow origins for legacy applications
-that cannot deploy TLS, or to set up a staging server for internal web
-development so that their developers can test out features requiring secure
-contexts without having to deploy TLS on the staging server. This policy will
-also prevent the origin from being labeled "Not Secure" in the omnibox.
-
-Setting a list of URLs in this policy has the same effect as setting the
-command-line flag '--unsafely-treat-insecure-origin-as-secure' to a
-comma-separated list of the same URLs. If the policy is set, it will override
-the command-line flag.
-
-This policy is deprecated in M69 in favor of
-OverrideSecurityRestrictionsOnInsecureOrigin. If both policies are present,
-OverrideSecurityRestrictionsOnInsecureOrigin will override this policy.
-
-For more information on secure contexts, see
-<https://www.w3.org/TR/secure-contexts/>
-
-Example value:Windows (Windows
-clients):Software\\Policies\\Google\\Chrome\\UnsafelyTreatInsecureOriginAsSecure\\1
-= "http://testserver.example.com/"
-Software\\Policies\\Google\\Chrome\\UnsafelyTreatInsecureOriginAsSecure\\2 =
-"\*.example.org"Android/Linux:\[ "http://testserver.example.com/",
-"\*.example.org" \]Mac:&lt;array&gt;
-&lt;string&gt;http://testserver.example.com/&lt;/string&gt;
-&lt;string&gt;\*.example.org&lt;/string&gt; &lt;/array&gt;[Back to top](#top) \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/policy-list-3/extension-settings-full/index.md b/chromium/docs/website/site/administrators/policy-list-3/extension-settings-full/index.md
deleted file mode 100644
index 3252ee19a25..00000000000
--- a/chromium/docs/website/site/administrators/policy-list-3/extension-settings-full/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-- - /administrators/policy-list-3
- - Policy List
-page_name: extension-settings-full
-title: Extension Settings Full Description
----
-
-**For help setting this policy, see the help center for examples for
-[Windows](https://support.google.com/chrome/a/answer/7532015?hl=en&ref_topic=7517516),
-[macOS](https://support.google.com/chrome/a/answer/7517624?hl=en&ref_topic=7517516),
-and
-[Linux](https://support.google.com/chrome/a/answer/7517525?hl=en&ref_topic=7517516).**
-
-This policy controls multiple settings, including settings controlled by any
-existing extension-related policies. This policy will override any legacy
-policies if both are set.
-
-This policy maps an extension ID to its configuration. With an extension ID,
-configuration will be applied to the specified extension only. A default
-configuration can be set for the special ID "\*", which will apply to all
-extensions that don't have a custom configuration set in this policy.
-
-The configuration for each extension is another dictionary that can contain the
-fields documented below.
-
-* "installation_mode": Maps to a string indicating the installation
- mode for the extension. The valid strings are:
- * "allowed": allows the extension to be installed by the user.
- This is the default behavior.
- * "blocked": blocks installation of the extension.
- * "removed" 3: blocks installation of the extension and removes it
- from the device if already installed.
- * "force_installed" 1: the extension is automatically installed
- and can't be removed by the user.
- * "normal_installed" 1: the extension is automatically installed
- but can be disabled by the user.
-* "update_url": Maps to a string indicating where Chrome can download
- a force_installed or normal_installed extension.
- * The update URL set in this policy is only used for the initial
- installation; subsequent updates of the extension will use the
- update URL indicated in the extension's manifest.
- * The update URL should point to an Update Manifest XML document
- as mentioned above.
- * If installing from the Chrome Web Store, use the following URL
- * http://clients2.google.com/service/update2/crx
-* "blocked_permissions": maps to a list of strings indicating the
- blocked API permissions for the extension.
- * The permissions names are same as the permission strings
- declared in manifest of extension as described at
- <https://developer.chrome.com/extensions/declare_permissions>.
- This setting also can be configured for "\*" extension. If the
- extension requires a permission which is on the blocklist, the
- user will be blocked from installing the extension. If the user
- already has an extension installed which matches the blocklist
- it will not be allowed to load. If it contains a blocked
- permission as optional requirement, it will be handled in the
- normal way, but requesting conflicting permissions will be
- declined automatically at runtime.
-* "minimum_version_required": maps to a version string.
- * The format of the version string is the same as the one used in
- extension manifest, as described at
- <https://developer.chrome.com/apps/manifest/version>. An
- extension with a version older than the specified minimum
- version will be disabled. This applies to force-installed
- extensions as well.
-* "install_sources" 2: Each item in this list is an extension-style
- [match
- pattern](https://developer.chrome.com/extensions/match_patterns).
- * Users will be able to easily install items from any URL that
- matches an item in this list. Both the location of the \*.crx
- file and the page where the download is started from (i.e. the
- referrer) must be allowed by these patterns.
-* "allowed_types" 2: This setting lists the allowed types of
- extension/apps that can be installed in Google Chrome.
- * The value is a list of strings, each of which should be one of
- the following:
- * "extension", "theme", "user_script", "hosted_app",
- "legacy_packaged_app", "platform_app"
- * See extensions documentation for more information on these
- types.
-* "blocked_install_message": This maps to a string specifying the
- error message to display to users if they're blocked from installing
- an extension.
- * This setting allows you to append text to the generic error
- message displayed on the Chrome Web Store. This could be be used
- to direct users to your help desk, explain why a particular
- extension is blocked, or something else.
- * This error message will be truncated if longer than 1000
- characters.
-* "runtime_blocked_hosts": Maps to a list of strings representing
- hosts whose webpages the extension will be blocked from modifying.
- * This includes injecting javascript, altering and viewing
- webRequests / webNavigation, viewing and altering cookies,
- exceptions to the same-origin policy, etc.
- * The format is similar to [match
- patterns](https://developer.chrome.com/extensions/match_patterns)
- except no paths may be defined.
- * e.g. "\*://\*.example.com"
- * This also supports effective TLD wildcarding e.g.
- "\*://example.\*"
- * The list can contain not more than 100 entries. Any further
- entry is discarded.
-* "runtime_allowed_hosts": Maps to a list of strings representing
- hosts that an extension can interact with regardless of whether they
- are listed in "runtime_blocked_hosts"
- * This is the same format as "runtime_blocked_hosts".
- * The list can contain not more than 100 entries. Any further
- entry is discarded.
-
-____________________________________________________________________________
-
-1: This option is **not** valid for the "\*" id as Chrome wouldn't know which
-extension to automatically install. The "update_url" setting MUST be set for
-this extension or the policy will be invalid.
-
-2: This settings can be used **only** for the default configuration "\*".
-
-3: This setting is available since Chrome 75. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/policy-list-3/index.md b/chromium/docs/website/site/administrators/policy-list-3/index.md
deleted file mode 100644
index 46ff5282aa0..00000000000
--- a/chromium/docs/website/site/administrators/policy-list-3/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: policy-list-3
-title: Policy List
----
-
-The Chrome Enterprise policy list is moving! Please update your bookmarks to
-<https://chromeenterprise.google/policies/>. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/policy-list-3/user-data-directory-variables/index.md b/chromium/docs/website/site/administrators/policy-list-3/user-data-directory-variables/index.md
deleted file mode 100644
index c7148dafbe9..00000000000
--- a/chromium/docs/website/site/administrators/policy-list-3/user-data-directory-variables/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-- - /administrators/policy-list-3
- - Policy List
-page_name: user-data-directory-variables
-title: Supported Directory Variables
----
-
-The policy for modifying the user data directory and other paths for Chrome to
-use has support for several variables, so you don't need to set a hard-coded
-path for all users. For example, if you want to store your profile data under
-the user local application data on Windows, set the UserDataDir policy to :
-"${local_app_data}\Chrome\Profile" Which on most Windows 7 / Vista
-installations would resolve to :
-C:\Users\CurrentUser\AppData\Chrome\Profile.
-
-**Chrome profiles are _not_ backwards compatible, so storing the user profile
-on a network drive and using it with different versions of Chrome can cause
-crashes and data loss.** Please see
-<http://www.chromium.org/administrators/common-problems-and-solutions> for more
-details.
-
-### Some hints about setting paths in policies
-
-* All policies that concern paths where Chrome stores different data are
- platform-dependent. Some of these are only available on specific platforms
- but others can be used on all platforms.
-* Paths should be absolute to avoid errors caused by applications starting in
- different location on different occasions.
-* Every variable can occur **only once** in a path. For the majority of them,
- this is the only meaningful way of using them as they resolve to absolute
- paths.
-* Almost all policies will create the path if it doesn't exist and if possible
-* **Using network locations for some policies can lead to unexpected results.**
- For example, the user profile is not backwards-compatible, so running a
- different version/channel of Chrome with the same profile may corrupt your
- profile.
-
-### List of supported path variables
-
-#### All platforms
-
-**${user_name}** - The user that is running Chrome (respects suids). \
-(example resolution: "johndoe")
-
-**${machine_name}** - The machine name possibly with domain \
-(example resolution : "johnny.cg1.cooldomain.org" or simply “johnnyspc”)
-
-#### Windows only
-
-**${documents}** - The "Documents" folder for the current user. \
-(example resolution : "C:\Users\Administrator\Documents")
-
-**${local_app_data}** - The Application Data folder for the current user. \
-(example resolution : "C:\Users\Administrator\AppData\Local")
-
-**${roaming_app_data}** - The Roamed Application Data folder for the current user. \
-(example resolution : "C:\\Users\\Administrator\\AppData\\Roaming")
-
-**${profile}** - The home folder for the current user. \
-(example resolution : "C:\\Users\\Administrator")
-
-**${global_app_data}** - The system-wide Application Data folder. \
-(example resolution : "C:\AppData")
-
-**${program_files}** - The "Program Files" folder for the current process.
-Depends on whether it is 32 or 64 bit process. \
-(example resolution : "C:\Program Files (x86)")
-
-**${windows}** - The Windows folder
-(example resolution : "C:\WINNT" or "C:\Windows")
-
-**${client_name)** - The name of the client pc connected to an RDP or Citrix
-session. Take into account that this variable is empty if used from a local
-session. Therefore if used in paths you might want to prefix it with something
-which is guaranteed to be non-empty. \
-(example : C:\chrome_profiles\session_${client_name} - produces
-c:\chrome_profiles\session_ for local sessions and
-c:\chrome_profiles\session_somepcname for remote sessions.)
-
-**${session_name}** - The name of the active session. Useful for distinguishing
-multiple simultaneously connected remote sessions to a single user profile. \
-(example resolution: WinSta0 for local desktop sessions)
-
-#### MacOS only
-
-**${users}** - The folder where users profiles are stored \
-(example resolution : "/Users")
-
-**${documents}** - The "Documents" folder of the current user. \
-(example resolution : "/Users/johndoe/Documents")
diff --git a/chromium/docs/website/site/administrators/policy-templates/index.md b/chromium/docs/website/site/administrators/policy-templates/index.md
deleted file mode 100644
index 2a99fc03f21..00000000000
--- a/chromium/docs/website/site/administrators/policy-templates/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: policy-templates
-title: Policy Templates
----
-
-To ease your policy setup, several policy templates can guide you easily through
-the configurable options.
-
-Templates can also be generated locally by building the policy_templates
-Chromium project.
-
-**Windows**
-
-There are two types of templates available, an ADM and an ADMX template. You
-will want to verify what template type you can use on your network.
-
-[ZIP file of ADM/ADMX/JSON templates and
-documentation](https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip).
-[Beta](https://dl.google.com/chrome/policy/beta_policy_templates.zip) and
-[Dev](https://dl.google.com/chrome/policy/dev_policy_templates.zip)
-administrative templates are also available for testing them before a stable
-release.
-
-Google Update (auto-update) has its own templates as well, in
-[ADM](https://dl.google.com/update2/enterprise/GoogleUpdate.adm) and
-[ADMX](http://dl.google.com/dl/update2/enterprise/googleupdateadmx.zip) forms.
-
-The recommended way to configure policy on Windows is Group Policy Object (GPO),
-however on machines that are joined to an Active Directory domain, policy
-settings may also be stored in the registry under HKEY_LOCAL_MACHINE or
-HKEY_CURRENT_USER in the following paths:
-
-* Google Chrome: Software\\Policies\\Google\\Chrome\\
-* Chromium: Software\\Policies\\Chromium\\
-
-**Mac**
-
-Policies are defined on a Mac in a plist (property list) file. The latest plist
-template is included in the Google Chrome/Chromium installer package. To find
-the plist:
-
-1. [Download Google Chrome](https://www.google.com/chrome/)
-2. Open the bundle and find the Configuration folder
-3. Open a file called com.google.Chrome.manifest. This is the latest
- plist template.
-4. Review the plist template.
-5. Use the template to create your own plist file.
-6. Create your own plist file with appropriate policies based on the
- plist template. Use the property list editor of your choice.
-7. Use your system management tool to push the configuration file to
- client Macs.
-
-To see an example of how to load this file into Profile Manager, see the [Mac
-Quickstart guide](/administrators/mac-quick-start).
-
-**Note:** Any other system management tool can be used instead of Profile
-Manager such as Jamf or Puppet.
-
-**Linux**
-
-For Linux, consult the HTML documentation contained in the [ZIP file of ADM/ADMX
-templates and
-documentation](https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip)
-for the JSON keys that correspond to each policy.
-
-To see where to put this file, see the [Linux Quickstart
-guide](/administrators/linux-quick-start).
-
-**Google Chrome OS**
-
-Google Chrome OS devices that are [joined to an Active Directory
-domain](https://support.google.com/chrome/a/answer/7497916) can be managed via
-Group Policy.
-
-The ADMX templates containing all applicable Chrome OS user and device policies
-can be found in the
-
-[ZIP file of ADM/ADMX/JSON templates and
-documentation](https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip).
-[Beta](https://dl.google.com/chrome/policy/beta_policy_templates.zip) and
-[Dev](https://dl.google.com/chrome/policy/dev_policy_templates.zip)
-administrative templates are also available for testing them before a stable
-release. \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/pre-installed-extensions/index.md b/chromium/docs/website/site/administrators/pre-installed-extensions/index.md
deleted file mode 100644
index f254a29d0ef..00000000000
--- a/chromium/docs/website/site/administrators/pre-installed-extensions/index.md
+++ /dev/null
@@ -1,178 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: pre-installed-extensions
-title: Pre-installed Extensions
----
-
-Pre-installing an extension can be done in one of three ways: via Group Policy,
-via the Registry, or via master_preferences.
-
-**Pre-installing via Group Policy**
-
-Using policy to deploy an Extension or Chrome Web App is by far the easiest and
-scalable method. This is the recommended method for pushing extensions, as it
-does not require the CRX file to be on the machine, it must simply be available
-at a given URL.
-
-To use this method, just set the policy to 'force install' the extension, as
-documented [here](/administrators/policy-list-3#ExtensionInstallForcelist).
-
-**Pre-installing via the Registry**
-
-Using this method, a special registry key indicates what extensions Google
-Chrome should load. This means that the extension .crx file (the file downloaded
-from the gallery, or the file you package yourself) needs to already be on the
-machine. This method is not to be confused with setting policy -- this method
-sets a completely different registry key and requires the CRX to be on the
-machine in question.
-
-Once you have the extension .crx file you'd like to pre-install, follow these
-steps:
-
-1. Copy the .crx file to a location such as: C:\\path\\to\\your\\extension.crx
-
-2. Create the registry key:
-
-32-bit Windows: HKEY_LOCAL_MACHINE\\SOFTWARE\\Google\\Chrome\\Extensions\\\[id
-of your extension crx\] 64-bit Windows:
-HKEY_LOCAL_MACHINE\\SOFTWARE\\**Wow6432Node**\\Google\\Chrome\\Extensions\\\[id
-of your extension crx\]
-
-3. Create the following registry key values:
-
-32-bit Windows: HKEY_LOCAL_MACHINE\\SOFTWARE\\Google\\Chrome\\Extensions\\\[id
-of your extension crx\]\\path 64-bit Windows:
-HKEY_LOCAL_MACHINE\\SOFTWARE\\**Wow6432Node**\\Google\\Chrome\\Extensions\\\[id
-of your extension crx\]\\path TYPE: REG_SZ VALUE:
-"C:\\path\\to\\your\\extension.crx" 32-bit Windows:
-HKEY_LOCAL_MACHINE\\SOFTWARE\\Google\\Chrome\\Extensions\\\[id of your extension
-crx\]\\version 64-bit Windows:
-HKEY_LOCAL_MACHINE\\SOFTWARE\\**Wow6432Node**\\Google\\Chrome\\Extensions\\\[id
-of your extension crx\]\\version TYPE: REG_SZ VALUE: \[version of your .crx as
-specified in the manifest\]
-
-This method requires the CRX is on the machine; this method may not be flexible
-enough for all deployments. However, it does mean that users can have an
-extension pre-installed behind a corporate firewall that restricts downloading
-of files.
-
-**Pre-installing via master_preferences**
-
-You should already be familiar with configuring preferences. If you are not,
-read the documentation on [master_preferences and other methods of
-pre-configuring preferences](/administrators/configuring-other-preferences).
-
-Pre-installed extensions are added to the master_preferences file that lives
-next to chrome.exe. This means that the extension CRX file can live anywhere,
-and the bits do not need to live on the target user's machine and don't need to
-be packaged into any installation script. If you are not familiar with the
-master_preferences file or how it works, you will need to [read this
-documentation first](/administrators/configuring-other-preferences).
-
-There are some requirements to using this method:
-
-* This method only works if the user has access to the public
- extension gallery or another URL where the CRX file is kept; this
- method may not work if the user is behind a corporate firewall or
- proxy that restrict access to the gallery.
-* This method generally only works on new installs. Making it work
- with an existing install is cumbersome and requires a lot of
- clean-up steps.
-
-To pre-install an extension with just master_preferences changes,
-
-1. Find the CRX file you want to install. Download it from the gallery, etc.
-
-2. Open up the CRX with a zip program and find the manifest.json file (it's just
-a text file). This contains many values you will need.
-
-3. Set up your master_preferences with values from the manifest.json file.
-
-Here is an example master_preferences, which pre-installs the Google Reader
-extension:
-
-{ "homepage" : "http://www.chromium.org", "homepage_is_newtabpage" : true,
-"extensions": { "settings": { "apflmjolhbonpkbkooiamcnenbmbjcbf": { "location":
-1, "manifest": { "key":
-"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5cK3ybDkh173plsjDXoqUzvsjFRMtbc5+a8HR6dxYBETeXQ7GOR5/xYnsY2R4smo5ly4yUK69iF7rnPNH+X97K7e7JFbuH5W/ZRc8YaIG66oJ9JwKZagSOZasSJPWNz4f1GdaHD1Z4KRucvOYxsaPVdwS2W3nbG6i3oQFaio+JQIDAQAB",
-"name": "Google Reader Notifier (Installing...)", "permissions": \[ "tabs",
-"http://www.google.com/" \], "update_url":
-"http://clients2.google.com/service/update2/crx", "version": "0.0",
-"manifest_version": 2 }, "path": "apflmjolhbonpkbkooiamcnenbmbjcbf\\\\0.0",
-"state": 1 } } } }
-
-Breaking down the lines in this master_preferences file,
-
-* Under settings, the first value is the hash of the extension
- ("apflmjolhbonpkbkooiamcnenbmbjcbf"). You get this by packaging up
- the CRX file, and is also the extension's identifier in the gallery.
-* "location" must always be 1.
-* The "manifest" section must contain "key", "name", "permissions",
- "update_url", "version", and "manifest_version". These can come from
- the extension's manifest.
-* The "key" value comes from the packaged extension, just like the
- hash. If you look at an unzipped CRX file, you'll find the "key" in
- manifest.json.
-* "name" can be anything, although having a temporary tag (i.e.
- "(Installing...)") will help users understand why an extension is
- taking an extra bit of time to load.
-* "permissions" **must be the same as the permissions in the extension
- CRX file** at "update_url", or the user will see lots of warnings
- and it won't load. So, you can't specify and empty permissions
- array, and the real extension requires lots of permissions -- that
- would hide escalating privilege.
-* "update_url" is the URL where the CRX lives. Again, this is in the
- manifest.json file.
-* "version" should always be "0.0"
-* "manifest_version" should be the same as in the extension CRX file
- manifest.json (current manifest_version 2)
-* "path" should always be the extension's hash followed by "\\\\0.0".
-* "state" should always be 1.
-
-If any of these rules are broken, the extension may not load or the user may see
-a warning.
-
-**Important:** If the extension contains content scripts that need permissions,
-they must be listed in the master_preferences as well. For example,
-
-{ "extensions": { "settings": { "apflmjolhbonpkbkooiamcnenbmbjcbf": {
-"location": 1, "manifest": { "content_scripts": \[ { "all_frames": true, "js":
-\[ "script.js" \], "matches": \[ "http://\*/\*", "https://\*/\*" \], "run_at":
-"document_start" } \], "key":
-"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5cK3ybDkh173plsjDXoqUzvsjFRMtbc5+a8HR6dxYBETeXQ7GOR5/xYnsY2R4smo5ly4yUK69iF7rnPNH+X97K7e7JFbuH5W/ZRc8YaIG66oJ9JwKZagSOZasSJPWNz4f1GdaHD1Z4KRucvOYxsaPVdwS2W3nbG6i3oQFaio+JQIDAQAB",
-"name": "Google Reader Notifier (Installing...)", ...
-
-If the extension has content scripts that need permissions / access, and you do
-not specify it here, the extension will not load!
-
-You can pre-load multiple extensions. Adding an additional extension is as easy
-as adding another block under "settings":
-
-{ "extensions": { "settings": { "apflmjolhbonpkbkooiamcnenbmbjcbf": { &lt;--
-extension one "location": 1, "manifest": { ... } },
-"oaiwevnmzvoinziufeuibyfnzwevmiiw": { &lt;-- extension two "location": 1,
-"manifest": { ... }, ... } } }
-
-If the extension has any permissions that require user approval, you also need
-to include a granted_permissions section:
-
-{ "extensions": { "settings": { "mihcahmgecmbnbcchbopgniflfhgnkff": {
-"location": 1, "manifest": { ... }, "granted_permissions": { "api": \[ "tabs"
-\], "explicit_host": \[ "http://\*.google.com/\*", "https://\*.google.com/" \],
-"scriptable_host": \[ "http://example.com/" \] }, ... }, ... } } }
-
-If you do not include a granted_permissions section, Chrome immediately disables
-the extension. The granted_permissions field has the following subfields:
-
-* "api" contains API permissions in the "permissions" key of the
- manifest
-* "explicit_host" contains any host permissions in the "permissions"
- key of the manifest
-* "scriptable_host" should be set to any hosts in the extension's
- content scripts
-
-The easiest way to generate the granted_permissions field is to install the
-extension locally and then copy the extension's granted_permissions from the
-Preferences file of your [Chrome profile](/user-experience/user-data-directory).
diff --git a/chromium/docs/website/site/administrators/turning-off-auto-updates/index.md b/chromium/docs/website/site/administrators/turning-off-auto-updates/index.md
deleted file mode 100644
index 6af08afa3ec..00000000000
--- a/chromium/docs/website/site/administrators/turning-off-auto-updates/index.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: turning-off-auto-updates
-title: Turning Off Auto Updates in Google Chrome
----
-
-Google Chrome on Windows and Mac auto-updates itself on a regular basis. The
-auto-updating procedure is performed by Google Update, which is based on the
-open-source [Omaha](https://github.com/google/omaha) project. Auto-updated
-provide fixes to sometimes critical issues, limiting exposure.
-
-<table>
-<tr>
-<td><b>Warning: Turning off auto-updates should be done with caution. You may not receive the latest security updates if you do not auto-update.</b></td>
-</tr>
-</table>
-
-**Turning off Auto-Updates on Windows**
-
-To turn off auto-updates of Google Chrome on Windows, you need to instruct
-Google Update to not update it. To do this, you can either:
-
-1. Use the **Google Update** ADM templates provided [on this
- page](/administrators/policy-templates) or as described in [this
- article](https://support.google.com/chrome/a/answer/6350036).
-2. Set the value of
- HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Google\\Update\\AutoUpdateCheckPeriodMinutes
- to the REG_DWORD value of "0".
-
-Warning: To prevent abuse of this policy, if a device is not joined to an Active
-Directory domain, and if this policy has been set to 0 or to a value greater
-than 77 hours, this setting will not be honored and replaced by 77 hours after
-August 2014. If you are affected by this, and still want to disable Chrome
-updates (NOT RECOMMENDED), you may do so by using 'Update policy override' as
-described [here](https://support.google.com/chrome/a/answer/6350036#Policies).
-
-More information about Google Update's group policy support is
-[here](https://support.google.com/chrome/a/answer/6350036).
-
-**Turning off Auto-Updates on Mac**
-
-More information about turning off auto-updates on a Mac network is
-[here](http://www.google.com/support/installer/bin/answer.py?hl=en&answer=147176&ctx=go).
-
-**Turning off Auto-Updates on Linux**
-
-Google Chrome and Chromium are not auto-updated automatically on Linux; your
-package manager handles this.
-
-**Frequently Asked questions**
-
-**Q: Does Chrome on Linux auto-update too?**
-
-A: Google Chrome on Linux does not auto-update itself; it relies on your package
-manager to update it.
-
-**Q: Does the open-source Chromium browser auto-update like Chrome?**
-No. Chromium does not have its own auto-update process, so if you are deploying
-Chromium, do you not need to worry about turning off auto-updates.
-
-**Q: How do I know if there is an auto-update happening soon?**
-
-A: You can subscribe to the blog at <https://chromereleases.googleblog.com>,
-which lists every dev, beta, and stable release of Google Chrome. Chromium does
-not auto-update.
-
-**Q: How often do auto-updates happen? How many can I expect this year?**
-
-A: Major version updates to the stable channel of Google Chrome tend to happen
-about every six weeks, although security fixes can come at any time. See
-[Release Early, Release
-Often](http://blog.chromium.org/2010/07/release-early-release-often.html) for
-more information.
-
-**Q: Do you have release notes with each version?**
-
-A: Yes, see the Chrome Enterprise Release Notes. Also, for a granular list of
-what's changed and links to all the fixes made, see
-<https://chromereleases.googleblog.com>.
-
-**Q: Why would I not want to turn off auto-updates?**
-
-A: Turning off auto-updates means you may miss an update that includes security
-fixes, leaving your users at risk.
-
-**Q: Can I turn auto-updates back on?**
-
-A: Yes. Just set the value of the registry key you changed back up to a
-reasonable number of minutes between update checks (greater than "0").
-
-**Q: How would I update my users without turning auto-update back on?**
-
-A: You can deploy the latest MSI, which is available
-[here](http://www.google.com/chrome/eula.html?msi=true).
-
-**Q: I need auto-updates off so I can test new versions of Google Chrome /
-Chromium before everyone else gets them. What do you suggest I do?**
-
-A: Turn off auto-updates via the steps above, and push the group policy to your
-network. Then download the latest MSI
-[here](http://www.google.com/chrome/eula.html?msi=true). Deploy it on your test
-machines, and do your verification. Once it is certified, deploy that same MSI
-on the rest of your network. And watch for updates on
-<https://chromereleases.googleblog.com> for new versions of the MSI to test and
-deploy. Enterprise customers can find additional downloads, such as ADMX
-templates to manage Chrome policies
-[here](https://cloud.google.com/chrome-enterprise/browser/download/). \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/url-blacklist-filter-format/index.md b/chromium/docs/website/site/administrators/url-blacklist-filter-format/index.md
deleted file mode 100644
index 68264250ce7..00000000000
--- a/chromium/docs/website/site/administrators/url-blacklist-filter-format/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: url-blacklist-filter-format
-title: URL Blocklist filter format (legacy link)
----
-
-Please update your link to point to
-<https://www.chromium.org/administrators/url-blocklist-filter-format>
-.
diff --git a/chromium/docs/website/site/administrators/url-blocklist-filter-format/index.md b/chromium/docs/website/site/administrators/url-blocklist-filter-format/index.md
deleted file mode 100644
index 2dfef299ae9..00000000000
--- a/chromium/docs/website/site/administrators/url-blocklist-filter-format/index.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: url-blocklist-filter-format
-title: URL Blocklist filter format
----
-
-The format of filters for the URLBlocklist and URLAllowlist policies, as of
-Chrome 52, is:
-
-\[scheme://\]\[.\]host\[:port\]\[/path\]\[@query\]
-
-* Scheme can be http, https, ftp, chrome, etc. This field is optional,
- and must be followed by '://'.
-* An optional '.' (dot) can prefix the host field to disable subdomain
- matching, see below for details.
-* The host field is required, and is a valid hostname or an IP
- address. It can also take the special '\*' value, see below for
- details.
-* An optional port can come after the host. It must be a valid port
- value from 1 to 65535.
-* An optional path can come after port. Any string can be used here.
-* An optional query can come in the end, which is a set of key-value
- and key-only tokens delimited by '&'. The key-value tokens are
- separated by '='. A query token can optionally end with a '\*' to
- indicate prefix match. Token order is ignored during matching.
-
-The format is very similar to the URL format, with some exceptions:
-
-* user:pass fields can be included but will be ignored (e.g.
- http://user:pass@ftp.example.com/pub/bigfile.iso).
-* If a reference separator '#' is present, it is ignored along with
- everything that appears after it.
-* The host can be '\*'. It can also have a '.' as a prefix.
-* The host can have a '/' or '.' as suffix. If it is the case, that
- suffix is ignored.
-
-The filter selected for a URL is the most specific match found:
-
-1. First, the filters with the longest host match will be selected;
-2. Among these, filters with a non-matching scheme or port are
- discarded;
-3. Among these, the filter with the longest matching path is selected;
-4. Among these, the filter with the longest set of query tokens are
- selected;
-5. If no valid filter is left at step 3, the host is reduced by
- removing the left-most subdomain, and trying again from step 1;
-6. If a filter is available at step 3, its decision (block or allow) is
- enforced. If no filter ever matches, the default is to allow the
- request.
-
-The special '\*' host will be the last searched, and matches all hosts. When
-both a blocklist and allowlist filter apply at step 4 (with the same path length
-and number of query tokens), the allowlist filter takes precedence. If a filter
-has a '.' (dot) prefixing the host, only exact host matches will be filtered:
-
-* "example.com" matches "example.com", "www.example.com" and
- "sub.www.example.com";
-* ".www.example.com" only matches exactly "www.example.com".
-
-The scheme can be either a standard or a custom one. Supported standard schemes
-are: about, blob, content, chrome, cid, data, file, filesystem, ftp, gopher,
-http, https, javascript, mailto, ws, wss. All other schemes are treated as
-custom schemes. As of Chrome 52, custom schemes are supported, but only the
-patterns scheme:\* and scheme://\* are allowed. They match all URLs with that
-scheme.
-
-* The patterns "custom://\*" or "custom:\*" are valid and match
- "custom:app".
-* The patterns "custom:app" or "custom://app" are invalid.
-
-The scheme and as of Chrome 52 the host are case insensitive, while path and
-query are case sensitive.
-
-* "http://example.com" matches "HTTP://Example.com",
- "http://example.COM" and "http://example.com";
-* "http://example.com/path?query=1" doesn't match
- "http://example.com/path?Query=1", "http://example.com/Path?query=1"
- but matches "http://Example.com/path?query=1";
-
-Example of searching for a match for "http://mail.example.com/mail/inbox":
-
-1. First find filters for "mail.example.com", and go to step 2. If that
- fails, then try again with "example.com", "com" and finally "".
-2. Among the current filters, remove those that have a scheme which is
- not http.
-3. Among the current filters, remove those that have an exact port
- number and it not 80;
-4. Among the current filters, remove those that don't have
- "/mail/inbox" as a prefix of the path;
-5. Pick the filter with the longest path prefix, and apply it. If no
- such filter exists, go back to step 1 and try the next subdomain.
-
-Some examples:
-
-* "example.com" blocks all requests to that domain and any subdomain;
-* "http://example.com" blocks all HTTP requests to that domain and any
- subdomain; Requests with other schemes (such as https, ftp, etc.)
- are still allowed;
-* "https://\*" blocks all HTTPS requests to any domain;
-* "mail.example.com" blocks this domain but not "www.example.com" nor
- "example.com";
-* ".example.com" blocks exactly "example.com", and won't block
- subdomains;
-* "\*" blocks all requests; only allowlisted URLs will be allowed;
-* "\*:8080" blocks all requests to port 8080;
-* "example.com/stuff" blocks all requests to any subdomain of
- "example.com" that have "/stuff" as a prefix of the path;
-* "192.168.1.2" blocks requests to this exact IP address;
-* Any request with the query "?video=100" is blocked by "\*?v\*",
- "\*?video\*", "\*?video=\*" and "\*?video=100\*";
-* "\*?a=1&b=2" blocks any request with the query "?b=2&a=1",
- "?a=1&b=2", "?a=1&c=3&b=2", ...;
-* For a blocklist any occurrence of the key-value pair is sufficient,
- i.e., blocklisting "youtube.com/watch?v=xyz" would block
- "youtube.com/watch?v=123&v=xyz".
-* For an allowlist every occurrence of the key should have a matching
- value, i.e., allowlisting "youtube.com/watch?v=V2" does not allow
- "youtube.com/watch?v=V1&v=V2", it allows
- "youtube.com/watch?v=V2&v=V2" though.
-
-Example: allowing only a small set of sites:
-
-* Block "\*"
-* Allow selected sites: "mail.example.com", "wikipedia.org",
- "google.com"
-
-Example: block all access to a domain, except to the mail server using HTTPS and
-to the main page:
-
-* Block "example.com"
-* Allow "https://mail.example.com"
-* Allow ".example.com", and maybe ".www.example.com"
-
-Example: block all access to youtube, except for selected videos.
-
-* Block "youtube.com"
-* Allow "youtube.com/watch?v=V1"
-* Allow "youtube.com/watch?v=V2" \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/windows-quick-start/GoogleChromeStandaloneEnterprise.msi.sha1 b/chromium/docs/website/site/administrators/windows-quick-start/GoogleChromeStandaloneEnterprise.msi.sha1
deleted file mode 100644
index 44b2a017a7b..00000000000
--- a/chromium/docs/website/site/administrators/windows-quick-start/GoogleChromeStandaloneEnterprise.msi.sha1
+++ /dev/null
@@ -1 +0,0 @@
-720bd362d0c4bee42c03e36ef8663f544a682754 \ No newline at end of file
diff --git a/chromium/docs/website/site/administrators/windows-quick-start/index.md b/chromium/docs/website/site/administrators/windows-quick-start/index.md
deleted file mode 100644
index fed90d645df..00000000000
--- a/chromium/docs/website/site/administrators/windows-quick-start/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /administrators
- - Documentation for Administrators
-page_name: windows-quick-start
-title: Windows Quick Start
----
-
-This tutorial is meant as an expedited way to get Chromium-based browsers
-deployed and configured on a Windows network, by deploying an MSI and applying
-group policy. For further configuration, please reference the other
-documentation at <http://www.chromium.org/administrators>.
-**1. Download the MSI.**
-
-Download the [Google Chrome
-MSI](http://www.google.com/chrome/eula.html?msi=true).
-**2. Download the ADM / ADMX template.**
-You can download the ADM template or ADMX template
-[here](/administrators/policy-templates).
-**3. Configure the settings for your network.**
-Open up the ADM or the ADMX template you downloaded with these steps:
-
-ADM file import:
-
-* Navigate to Start &gt; Run: gpedit.msc
-* Navigate to Local Computer Policy &gt; Computer Configuration &gt;
- Administrative Templates
-* Right-click Administrative Templates, and select Add/Remove
- Templates
-* Add the **chrome.**adm template via the dialog.
-* Once complete, a Google / Chrome folder will appear under
- 'Administrative Templates' if it's not there already.
-
-ADMX file import:
-
-* Copy the **chrome.admx** file to **%SystemRoot%\\PolicyDefinitions**
-* Copy one or more of the language directories, for example **en-US**,
- to **%SystemRoot%\\PolicyDefinitions** as well. You should copy all
- language folders which already exist under the PolicyDefinitions
- folder.
-* Navigate to Start &gt; Run: gpedit.msc
-* Navigate to Local Computer Policy &gt; Computer Configuration &gt;
- Administrative Templates
-* A Google / Chrome folder will appear under 'Administrative
- Templates' if it's not there already.
-
-Change the configuration settings for the target group of users. The policies
-you will be most interested in are:
-
-* Home page - This is the URL that users see when they first open the
- browser or click the “home” button.
-* Send anonymous usage statistics and crash information. - To turn off
- sending any crash information or anonymous statistics to Google,
- change this setting to be False.
-* **Turning off auto-updates** - steps to turn off auto-update are
- [here](/administrators/turning-off-auto-updates).
-
-A full list of supported policies is [here](/administrators/policy-list-3).
-You should then apply the policies to the target users / machines. Depending on
-your network’s configuration, this may require time for the policy to propogate,
-or you may need to propogate those policies manually via administrator tools.
-**4. Push the MSI out to your network.**
-If you are using SMS or other tools, use these to push out the Google Chrome MSI
-as you would any other installation bundle.
-Otherwise, you can run the MSI on the target machines directly, and silently,
-with this command:
-
-Msiexec /q /I GoogleChrome.msi
-
-**5. Test your installation.**
-On a target machine, launch Google Chrome. The settings you applied in step 3
-should be noticeable on the test machine. Congratulations!
-If the policies have not propagated to the test machine / user, you may be able
-to run “gpupdate” to refresh policy settings.
diff --git a/chromium/docs/website/site/android/contributing-to-drm_hwcomposer/index.md b/chromium/docs/website/site/android/contributing-to-drm_hwcomposer/index.md
deleted file mode 100644
index f0fbfbbfa13..00000000000
--- a/chromium/docs/website/site/android/contributing-to-drm_hwcomposer/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /android
- - Android
-page_name: contributing-to-drm_hwcomposer
-title: Contributing to drm_hwcomposer
----
-
-### This project has moved! Please refer to <https://www.x.org/wiki/Projects/drm_hwcomposer/> \ No newline at end of file
diff --git a/chromium/docs/website/site/android/drm_hwcomposer-overview/index.md b/chromium/docs/website/site/android/drm_hwcomposer-overview/index.md
deleted file mode 100644
index 06c5fe349a5..00000000000
--- a/chromium/docs/website/site/android/drm_hwcomposer-overview/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /android
- - Android
-page_name: drm_hwcomposer-overview
-title: drm_hwcomposer Overview
----
-
-This project has moved! Please refer to
-<https://www.x.org/wiki/Projects/drm_hwcomposer/Overview> \ No newline at end of file
diff --git a/chromium/docs/website/site/android/index.md b/chromium/docs/website/site/android/index.md
deleted file mode 100644
index 0712369582d..00000000000
--- a/chromium/docs/website/site/android/index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-breadcrumbs: []
-page_name: android
-title: Android
----
-
diff --git a/chromium/docs/website/site/apple-touch-icon.png.sha1 b/chromium/docs/website/site/apple-touch-icon.png.sha1
deleted file mode 100644
index f3eaa87945c..00000000000
--- a/chromium/docs/website/site/apple-touch-icon.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-70efdb9a3e1ca43dfac4d488b9578261c0d17fff \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/ChromiumMediaBuffering.png.sha1 b/chromium/docs/website/site/audio-video/ChromiumMediaBuffering.png.sha1
deleted file mode 100644
index 6469a479a59..00000000000
--- a/chromium/docs/website/site/audio-video/ChromiumMediaBuffering.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-544b78f70ce0b76cf433015f424fcfd1194e55df \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/ChromiumMediaBuffering.svg.sha1 b/chromium/docs/website/site/audio-video/ChromiumMediaBuffering.svg.sha1
deleted file mode 100644
index 8be80770c0b..00000000000
--- a/chromium/docs/website/site/audio-video/ChromiumMediaBuffering.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ae1ca452a21a0fd5abbfa0e160023f4ce8f18193 \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack (1).png.sha1 b/chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack (1).png.sha1
deleted file mode 100644
index 1f2f7f52e63..00000000000
--- a/chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7c5d958a0d36eca73a1225e49031ad9ada10f72c \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack.png.sha1 b/chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack.png.sha1
deleted file mode 100644
index 5ddf3d00132..00000000000
--- a/chromium/docs/website/site/audio-video/ChromiumMediaPlayerFSStack.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-091eea813719bddc4005ccdef32353ac3a9cb801 \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/autoplay/autoplay-policy-design-rationale/index.md b/chromium/docs/website/site/audio-video/autoplay/autoplay-policy-design-rationale/index.md
deleted file mode 100644
index fce03205fd7..00000000000
--- a/chromium/docs/website/site/audio-video/autoplay/autoplay-policy-design-rationale/index.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-breadcrumbs:
-- - /audio-video
- - Audio/Video
-- - /audio-video/autoplay
- - Autoplay
-page_name: autoplay-policy-design-rationale
-title: Autoplay Policy Design Rationale
----
-
-This page captures the first principles and design rationale for the autoplay
-policy in Chrome.
-
-#### Problem
-
-Browsers have historically been poor at helping the user manage sound, and
-unwanted noise is the primary reason that users don’t want autoplay. However,
-not all autoplay is unwanted, and a significant portion of blocked autoplays in
-Chrome are subsequently played by the user.
-
-#### Vision
-
-A core mission of Chrome is simplicity and ideally Chrome would accurately allow
-audio playback when a user wants it, and prevent surprises when they don’t. A
-long-term goal is for fewer users to block audio at the OS level, meaning that
-more users will hear sound overall. It’s unlikely that Chrome can be 100%
-accurate at meeting user expectations, but a reasonable vision is:
-
- For 99% of users, Chrome will be 95% accurate at predicting when a user
- wants an audible playback before a user gesture on a page.
-
- In cases where Chrome is inaccurate (for example, while learning the user’s
- preferences), 99% of the time the user will control sound by interacting
- with the page.
-
- When the page does not allow the user to control sound, or when a user more
- generally has different requirements than what Chrome can provide, Chrome
- will provide the user control over their browsing experience. Direct
- interaction with Chrome to manage sound will be infrequent.
-
-Realization of this vision would result in the following user experience:
-
- In 95% of browsing sessions, audio will match user expectations.
-
- In 4.95% of browsing sessions, users will interact with the page to control
- audio.
-
- In 0.05% of browsing sessions, users will either terminate the session or
- will use Chrome to control audio.
-
-#### Core Principles
-
-The following core principles were used to design Chrome’s autoplay policy.
-
-Note that these principles do not apply when the user has made an explicit
-choice in Chrome to control sound for a site. For example, if a user has muted a
-site, these principles do not apply.
-
-1. User Gesture Should Allow Sound
-
-If users ask for sound, they should get it. A core user expectation is that
-hitting ‘play’ (e.g. on a media element or a game) will enable audio. But any
-HTML element could be a ‘play’ button and Chrome can’t tell the difference.
-Thus, Chrome must assume that any user gesture should allow sound playback on
-the page.
-
-2. Sites Can’t Control The Policy
-
-There are incentives for sites to play video and audio regardless of user
-expectations, and sites will leverage any API they can to play audio on page
-load. The site cannot be a steward of the user’s audio experience before a user
-gesture, and cannot override Chrome’s policy choices. For this reason, the site
-cannot override Chrome’s choices or control when autoplay is allowed.
-
-3. The Site Must Know when Audio or Autoplay is Blocked
-
-When the policy blocks autoplay for audible media, site developers may want to
-show a different user experience (e.g. click-to-play), apply different logic
-(e.g. choosing muted ads), and at the very least will want to update any visual
-indication of audio playback state (e.g. a volume status indicator). For this
-reason, if autoplay with audio is blocked the site must know that it is blocked.
-
-4. The Site Must Be Allowed To Request the User Gesture
-
-A user gesture is on the page, and the site is thus best positioned to present a
-UX that explains the impact of a user gesture to enable sound, give a place to
-click or tap, and apply logic to that user gesture. Alternatives where Chrome
-enables sound arbitrarily will be more confusing for the user. For this reason,
-the site (not Chrome) is in the best position to help the user play media with
-sound.
-
-5. The Site Needs Predictable Behavior
-
-When sound is allowed, developers need predictable control over audio playback
-state, to ensure that the right elements are playing, the UX is in sync, and the
-timing of audio playback is aligned with other elements on the page.
-Alternatives where Chrome enables sound or plays media arbitrarily may break
-sites or cause a poor user experience. For this reason, the site must be
-responsible for starting playback or enabling audio when it is allowed.
-
-6. User-Initiated Audio Playback is a Moderately Strong Signal to Chrome
-
-Sustained, audible playback as a result of a user gesture is a moderately strong
-signal that audio was desired. This signal is not perfect (e.g. a site could
-hijack a click and play audio on a system that has no speakers). However, Chrome
-will use regular, sustained playback as a signal of user intent.
-
-7. Chrome Must Learn And Adapt to User Preferences
-
-A key learning from early MEI analysis was that there is a wide range of user
-preferences for audio playback. This is true not only across different sites,
-but even within the same site where one user might find audio annoying, but
-another will expect it to work automatically. Chrome cannot rely upon a static
-list of ‘acceptable’ sites and must learn and adapt to individual user
-preferences. As such, for each individual user Chrome will learn on which sites
-autoplay is expected, and where it is not. All sites will be subjected to the
-same rules; there are no sites where autoplay is always expected by all users.
-
-#### Design Implications
-
-The above principles drive the following design conclusions:
-
-Chrome Can’t Prompt To Enable Audio
-
-Sites will generally present a UX that allows the user to enable audio. If
-Chrome adds its own prompt, this will lead to user confusion about where to
-click, and additional friction in cases where users end up clicking twice.
-(Note: A more subtle UX such as a play/pause button in the Omnibox may still be
-acceptable, especially if the logic which detects when to display it is designed
-to avoid confusion.)
-
-Chrome Can’t Use Tab Muting For Automatic Control
-
-Automatic management of sound through tab muting wouldn’t allow the site to
-detect that they were muted, and wouldn’t allow them to manage user
-expectations. Further, it would prevent the site from prompting for a user
-gesture and managing user expectations.
-
-The Site (not Chrome) Must Enable Audio
-
-If Chrome enables audio, it may appear random to the developer, meaning that the
-site UX gets out of sync, and developers may lose control over which audio
-elements are playing. Further, the developer may (in response to a user gesture)
-wish to perform tasks before enabling sound. The developer, not Chrome, must be
-responsible for enabling sound after a user gesture.
-
-Blocking, Not Muting, for Chrome’s Default Behavior
-
-Blocking audio is a predictable, active signal that audio is not allowed. Mute
-state introduces unpredictability for developers, because it requires a query
-after audio has started. In cases where audio playback triggers a visual
-display, developers may not be able to prevent a brief flash of visuals before
-they can make the query and disable the visuals.
-
-Further, (1) the use of mute state is inconsistent with existing policies for
-audio management (e.g. in other browsers, on mobile, or in IFrames), (2) not all
-audio APIs have provisions for muting, (3) for APIs that do have mute
-attributes, making them dynamically controlled by Chrome overloads their
-behavior, and (4) it consumes more CPU power to have a running (muted) stream
-than a stopped one.
-
-Not like pop-up blocker
-
-Sound management will not eliminate sound, nor will it eliminate autoplay (which
-will be allowed when Chrome believes the user wants it). The frequency of
-scenarios where a user wants autoplay will not decrease over time. This puts
-autoplay in a different category than other types of interventions, where the
-behavior being blocked is expected to fall into disuse, reducing the frequency
-of Chrome-based prompts.
-
-Further, it is expected that over time most sites will monitor their attempts to
-autoplay and manage the user experience when it is not allowed. This will over
-time reduce the need for any type of Chrome-based prompt to enable blocked
-autoplay. \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/autoplay/autoplay-pre-seeding-in-chrome/index.md b/chromium/docs/website/site/audio-video/autoplay/autoplay-pre-seeding-in-chrome/index.md
deleted file mode 100644
index 9e44fd10e9d..00000000000
--- a/chromium/docs/website/site/audio-video/autoplay/autoplay-pre-seeding-in-chrome/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /audio-video
- - Audio/Video
-- - /audio-video/autoplay
- - Autoplay
-page_name: autoplay-pre-seeding-in-chrome
-title: Autoplay Pre-Seeding in Chrome
----
-
-### Chrome's Autoplay policy uses a metric called Media Engagement Index (MEI) to determine whether or not to permit media to autoplay on a given site. MEI learns, locally, from a user's individual browsing behaviors, on a site-by-site basis, whether the user regularly consumes media on each site. This helps Chrome to meet user expectations; if a user frequently consumes media for longer than 7 seconds in a previously activated tab, their media engagement score will increase, and eventually autoplay will be permitted for that site without a user gesture. Today, Chrome typically learns a user’s preferences within six to twenty visits.
-
-Generally users do expect autoplay behavior for some sites, and until Chrome
-learns individual preferences, based on MEI history, simply blocking all
-autoplay isn’t the best match for user expectations. So, for new users, or users
-who clear their browsing history, who won’t have historical media engagement
-data, Chrome has a pre-seeded list of sites that are permitted to autoplay
-media, based on aggregated anonymized data on what percentage of visitors to
-that site regularly permit media playback with sound. This ensures that the
-default behavior for sites with a high frequency of permitted media playbacks is
-most likely to match what a typical visitor to that site expects - as a user
-continues to use Chrome, their individual preferences will supplant the
-pre-seeded MEI scores.
-
-The pre-seeded site list is generated based on the global percentage of site
-visitors who train Chrome to allow autoplay for that site; a site will be
-included on the list if a sizable majority of site visitors permit autoplay on
-it. The list is algorithmically generated, rather than manually curated, and
-with no minimum traffic requirement. With the implementation of the autoplay
-policy for Web Audio in M71, Web Audio playback is also included in calculating
-the MEI score for a given site. \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/autoplay/index.md b/chromium/docs/website/site/audio-video/autoplay/index.md
deleted file mode 100644
index 96f212def62..00000000000
--- a/chromium/docs/website/site/audio-video/autoplay/index.md
+++ /dev/null
@@ -1,251 +0,0 @@
----
-breadcrumbs:
-- - /audio-video
- - Audio/Video
-page_name: autoplay
-title: Autoplay
----
-
-***Update (November 22, 2018)***
-
-*For the Web Audio API, the Autoplay Policy will launch in M71.*
-
-***Update (May 15, 2018)***
-
-*The Autoplay Policy launched in M66 Stable for &lt;video&gt; and &lt;audio&gt;
-and is effectively blocking roughly half of unwanted media autoplays in Chrome.*
-
-*For the Web Audio API, the autoplay policy will launch in M70. This affects web
-games, some WebRTC applications, and other web pages using audio features.
-Developers will need to [update their
-code](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio)
-to take advantage of the policy. More detail can be found in the Web Audio API
-section below.*
-
-**Summary**
-This policy controls when video and audio is allowed to autoplay, and is
-designed to meet three primary goals:
-
-* Provide user control over what content can autoplay
-* Enable legitimate uses of autoplay without complicated workarounds
-* Make progress towards consistent policies across mobile and desktop
- platforms
-
-Under the new policy media content will be allowed to autoplay under the
-following conditions:
-
-* The content is muted, or does not include any audio (video only)
-* The user tapped or clicked somewhere on the site during the browsing
- session
-* On mobile, if the site has been [added to the Home
- Screen](https://developers.google.com/web/updates/2017/02/improved-add-to-home-screen)
- by the user
-* On desktop, if the user has frequently played media on the site,
- according to the [Media Engagement
- Index](https://docs.google.com/document/d/1_278v_plodvgtXSgnEJ0yjZJLg14Ogf-ekAFNymAJoU/edit#heading=h.c1rqulonmckg)
-
-By default embedded IFrames will only be able to play muted or silent videos.
-However, if site owners wish for IFrames on their site to be able to play
-unmuted content, they may pass the autoplay permissions to the IFrame using
-[allow=autoplay](https://github.com/WICG/feature-policy/blob/gh-pages/features.md).
-This attribute allows any video contained in the IFrame to play as if it were
-hosted on the site.
-For a more detailed design and rationale, please click
-[here](https://docs.google.com/document/d/1EH7qZatVnTXsBGvQc_53R97Z0xqm6zRblKg3eVmNp30/edit).
-**Autoplay blocking**
-Around the same time we will be making two additional changes related to
-autoplay that will make muted autoplay more reliable. These two changes will
-make it possible for sites and advertisers to use muted videos instead of
-animated .gifs, which in most cases will reduce overall bandwidth consumption.
-
-* Removing the block autoplay setting that is currently available on
- Chrome for Android
-* Removing autoplay blocking on mobile when data saver mode is enabled
-
-**Developer Recommendations: &lt;video&gt; and &lt;audio&gt;**
-
-* **Use autoplay sparingly.** Autoplay can be a powerful engagement
- tool, but it can also annoy users if undesired sound is played or
- they perceive unnecessary resource usage (e.g. data, battery) as the
- result of unwanted video playback.
-* If you do want to use autoplay, consider **starting with muted
- content and let the user unmute** if they are interested in
- exploring more. This technique is being effectively used by numerous
- sites and social networks.
-* Unless there is a specific reason to do so, we recommend **using the
- browser’s native controls for video and audio playback**. This will
- ensure that autoplay policies are properly handled.
-* If you are using custom media controls, **ensure that your website
- functions properly when autoplay is not allowed.** We recommend that
- you always look at the promise returned by the play function to see
- if it was rejected:
-
-> var promise = document.querySelector('video').play();
-
-> if (promise !== undefined) {
-
-> promise.then(_ =&gt; {
-
-> // Autoplay started!
-
-> }).catch(error =&gt; {
-
-> // Autoplay was prevented.
-
-> // Show a "Play" button so that user can start playback.
-
-> });
-
-> }
-
-* Prompt users to [add your mobile site to the
- homescreen](https://developers.google.com/web/updates/2017/02/improved-add-to-home-screen)
- on Android devices. This will automatically give your application
- unmuted autoplay privileges.
-
-Developer Recommendations: Web Audio API
-
-The Web Audio API will be included in the Autoplay policy with M70 (October
-2018). Generally, in Chrome developers can no longer assume that audio is
-allowed to play when a user first arrives at a site, and should assume that
-playback may be blocked until a user first interacts with the site through a
-user activation (a click or a tap). Any attempt to create an audioContext before
-that time may result in a suspended audioContext that will have to be explicitly
-switched to running after a user activation.
-
-Developers who write games, WebRTC applications, or other websites that use the
-Web Audio API should call context.resume() after the first user gesture (e.g. a
-click, or tap). For example:
-
-// Resume playback when user interacted with the page.
-
-document.querySelector('button').addEventListener('click', function() {
-
-context.resume().then(() =&gt; {
-
-console.log('Playback resumed successfully');
-
-});
-
-});
-
-Web Audio API developers can detect whether or not autoplay is allowed by
-creating a new AudioContext and then checking its state to see whether it is
-running (allowed) or suspended (blocked).
-
-Depending upon the site, it may make sense to add additional user interface
-elements (such as a ‘play’ button in front of a game, or an ‘unmute’ button in
-some other cases), to explicitly capture a user gesture. This can either be done
-prior to creating AudioContext, or afterwards with a call to resume() upon
-click.
-
-**IFrame embedded content**
-
-Embedded content in a cross-origin IFrame needs to have permission to autoplay
-delegated to it, otherwise the audioContext will never be allowed to run.
-
-Developers that host IFrames with content inside them (e.g. game hosting sites)
-can enable audio for that content without requiring the underlying content to
-change any code, by doing the following:
-
- If the content is in a cross-origin IFrame, ensure that the IFrame includes
- the attribute allow="autoplay"
-
- Ensure that before the embedded content loads and runs, the site captures a
- user gesture (e.g. prompt for a click or a tap)
-
-Developers can find more details about specific code changes, and debugging tips
-[here](http://developers.google.com/web/updates/2017/09/autoplay-policy-changes).
-
-*Web Audio API FAQs*
-
- Why is the Web Audio API part of the autoplay policy? Users don’t like to
- click on a link and have sound played automatically that they weren’t
- expecting. The Web Audio API produces sound, so it must be included in the
- autoplay policy to ensure consistency across all web experiences.
-
- Wait, didn’t you launch the autoplay policy for Web Audio API in M66? Yes,
- briefly, but we reverted the change about a week later. We’re always working
- to improve things for users and developers, but in this case we did not do
- an effective job of communicating the change to developers using the Web
- Audio API. We are moving the launch to October 2018 to give those developers
- more time to prepare. If you develop web games, WebRTC applications, or
- other web experiences with sound please see the developer recommendations.
-
-Release Schedule
-
-<table>
-<tr>
-<td>September 2017</td>
-<td>New autoplay policies announced</td>
-<td>Begin collecting Media Engagement Index (MEI) data in M62 Canary and Dev</td>
-</tr>
-<tr>
-<td>December 2017</td>
-<td>Site muting available in M64 Beta Autoplay policies available in M65 Canary and Dev</td>
-</tr>
-<tr>
-<td>January 2018</td>
-<td>Site muting available in M64 Stable</td>
-</tr>
-<tr>
-<td>April 2018</td>
-<td>Autoplay policies are enforced for &lt;video&gt; and &lt;audio&gt; in M66 Stable</td>
-</tr>
-<tr>
-<td>October 2018</td>
-<td>Autoplay policies will be enforced for Web Audio API in M70 Stable</td>
-</tr>
-</table>
-
-**General FAQs**
-
-* **What is the difference between this and Chrome’s enforcement of
- the [better ad standard](https://www.betterads.org/standards/)?**
- The current better ad standard states that sites cannot embed
- [stand-alone ads with unmuted
- audio](https://www.betterads.org/desktop-auto-playing-video-ad-with-sound/).
- This standard does not apply to content integral to the page (e.g.,
- video of a news article that goes along with the text). The autoplay
- policy is applicable to all video content regardless of its content.
-* **What is the MEI threshold and how will it apply to my site?** We
- are still working on the implementation and don’t have any data yet
- on what the threshold will be or how that will impact individual
- sites. Our general guidance is if your site offers video content
- exclusively, assume that autoplay will work. If it has mixed
- content, assume it won’t unless users interact with the site in some
- way.
-* **Can my site be exempted from the policy?** Unfortunately, Chrome
- cannot provide any exceptions to the autoplay policy.
-* **What counts as "user interaction on the domain?"** Any click on
- the document itself (this excludes scrolling) will count as user
- interaction.
-* **Will autoplay work if a user leaves my site after watching video
- and returns later in a browsing session.** Assuming the MEI
- threshold hasn't been met, autoplay will not work in that context.
- The user interaction requirement only applies to contiguous
- navigations.
-* **Will gestures and/or MEI score apply across tabs/windows?** If the
- user opens a link in a new tab via context menu, yes, the user
- gesture will be counted and the MEI will reflect any views on the
- new tab.
-* **How can I view my own MEI scores?** Navigate to
- chrome://media-engagement to see your personal scores. Individual or
- average scores will not be made available at this time.
-
-More information
-
-[Autoplay policy summary
-presentation](https://docs.google.com/presentation/d/1DhW29bTLkDO6JSqp_wLUyByo00nI4krQ9laGQYQEJLU/edit?usp=sharing)
-
-[Autoplay design
-document](https://docs.google.com/document/d/1EH7qZatVnTXsBGvQc_53R97Z0xqm6zRblKg3eVmNp30/edit)
-
-[Media engagement index (MEI) design
-document](https://docs.google.com/document/d/1_278v_plodvgtXSgnEJ0yjZJLg14Ogf-ekAFNymAJoU/edit)
-
-[Autoplay Policy Changes
-(developers.google.com)](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes)
-
-[DOMException: The play() request was interrupted
-(developers.google.com)](https://developers.google.com/web/updates/2017/06/play-request-was-interrupted) \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/index.md b/chromium/docs/website/site/audio-video/index.md
deleted file mode 100644
index 4f2751b7296..00000000000
--- a/chromium/docs/website/site/audio-video/index.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-breadcrumbs: []
-page_name: audio-video
-title: Audio/Video
----
-
-Everything you need to know about audio/video inside Chromium and Chromium OS!
-
-### Whom To Contact
-
-It's best to have discussions on chromium-dev@chromium.org or
-media-dev@chromium.org for media specific matters.
-
-We are component
-[Internals&gt;Media](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3AInternals%3EMedia)
-on the Chromium bug tracker.
-
-### Documentation
-
-See
-[media/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/media/README.md).
-For historical reference, here's the original [design doc for HTML5
-audio/video](/developers/design-documents/video).
-
-### Codec and Container Support
-
-Container formats
-
-* MP4 (QuickTime/ MOV / MPEG4)
-* Ogg
-* WebM
-* WAV
-
-* HLS \[Only on Android and only single-origin manifests\]
-
-Codec formats (Decode Only)
-
-==Audio==
-
-* FLAC
-* MP3
-* Opus
-* PCM 8-bit unsigned integer
-* PCM 16-bit signed integer little endian
-* PCM 32-bit float little endian
-* PCM μ-law
-* Vorbis
-
-* AAC \[Main, LC, HE profiles only, xHE-AAC on Android P+\] \[Google
- Chrome only\]
-
-* AMR-NB \[Google Chrome OS only\]
-* AMR-WB \[Google Chrome OS only\]
-* GSM \[Google Chrome OS Only\]
-
-==Video==
-
-* VP8
-* VP9
-
-* AV1 \[Only Chrome OS, Linux, macOS, and Windows at present\]
-
-* Theora \[Except on Android variants\]
-
-* H.264 \[Google Chrome only\]
-* H.265 \[Google Chrome OS on Intel Gen 11-based Chromebooks for
- protected content playback only\]
-
-* MPEG-4 \[Google Chrome OS only\]
-
-### Code Location
-
-**Chromium**
-
-media/ - Home to all things media!
-media/audio - OS audio input/output abstractions
-media/video/capture - OS camera input abstraction
-media/video - software/hardware video decoder interfaces + implementations
-third_party/ffmpeg - Chromium's copy of FFmpeg
-third_party/libvpx - Chromium's copy of libvpx
-
-**Blink**
-
-third_party/blink/renderer/core/html/media/html_media_element.{cpp,h,idl} -
-media element base class
-
-third_party/blink/renderer/core/html/media/html_audio_element.{cpp,h,idl} -
-audio element implementation
-
-third_party/blink/renderer/core/html/media/html_video_element.{cpp,h,idl} -
-video element implementation
-
-**Particularly Interesting Bits**
-
-media/base/mime_util.cc - defines canPlayType() behaviour and file extension
-mapping
-
-media/blink/buffered_data_source.{cc,h} - Chromium's main implementation of
-DataSource for the media pipeline
-
-media/blink/buffered_resource_loader.{cc,h} - Implements the sliding window
-buffering strategy (see below)
-
-third_party/blink/public/platform/web_media_player.h - Blink's media player
-interface for providing HTML5 audio/video functionality
-
-media/blink/webmediaplayer_impl.{cc,h} - Chromium's main implementation of
-WebMediaPlayer
-
-### How does everything get instantiated?
-
-WebFrameClient::createMediaPlayer() is the Blink embedder API for creating a
-WebMediaPlayer and passing it back to Blink. Every HTML5 audio/video element
-will ask the embedder to create a WebMediaPlayer.
-
-For Chromium this is handled in RenderFrameImpl.
-
-### GN Flags
-
-There are a few GN flags which can alter the behaviour of Chromium's HTML5
-audio/video implementation.
-
-ffmpeg_branding
-
-Overrides which version of FFmpeg to use
-
-Default: $(branding)
-
-Values:
-
-Chrome - includes additional proprietary codecs (MP3, etc..) for use with Google
-Chrome
-
-Chromium - builds default set of codecs
-
-proprietary_codecs
-
-Alters the list of codecs Chromium claims to support, which affects
-&lt;source&gt; and canPlayType() behaviour
-
-Default: 0(gyp)/false(gn)
-
-Values:
-
-0/false - &lt;source&gt; and canPlayType() assume the default set of codecs
-
-1/true - &lt;source&gt; and canPlayType() assume they support additional
-proprietary codecs
-
-### How the %#$& does buffering work?
-
-Chromium uses a combination of range requests and an in-memory sliding window to
-buffer media. We have a low and high watermark that is used to determine when to
-purposely stall the HTTP request and when to resume the HTTP request.
-
-It's complicated, so here's a picture:
-
-[<img alt="image"
-src="/audio-video/ChromiumMediaBuffering.png">](/audio-video/ChromiumMediaBuffering.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/audio-video/media-internals/index.md b/chromium/docs/website/site/audio-video/media-internals/index.md
deleted file mode 100644
index 2c7beac03f0..00000000000
--- a/chromium/docs/website/site/audio-video/media-internals/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /audio-video
- - Audio/Video
-page_name: media-internals
-title: Media Internals
----
-
-# [chrome://media-internals](javascript:void(0);) is a tool to dig into the guts of the Chrome [audio/video stack](/audio-video).
-
-It currently displays 3 things:
-
-1. Everything it can dig up from the media stack about active media
- players. Includes buffered data, video properties, measured times
- between events, and a log of events.
-2. Status and volume of active audio streams. These are not yet
- associated with a particular tab.
-3. Cache activity, including reads from and writes to the media cache.
-
-## Adding Support for your New Feature
-
-If your code lies in media/ or webkit/glue/, information about it can appear on
-chrome://media-internals. Simply get a hold of the MediaLog instance associated
-with WebMediaPlayer or PipelineImpl and start logging!
-
-1. You’ll probably need to add a new event type to
- media/base/media_log_events.h and potentially a helper method or two
- to media/base/media_log.{h,cc}; see those already there for
- reference. Parameter names should be unique!
-2. Add logging calls to your code.
-3. That’s it; you're done. Your events will show up in the Log section,
- and any parameters you passed will show up in Properties.
-
-Well, ok, not quite. You may have noticed the Metrics section. If you’d like a
-new time measurement to appear there, simply open up
-chrome/browser/ui/webui/media/metrics.js and add the two events between which
-you’d like to measure to the list at the top.
-
-## Media Internals Internals
-
-## <img alt="image" src="https://docs.google.com/a/chromium.org/drawings/image?id=sBsZFnDZRDJWcztz8vkkn6Q&w=622&h=495&rev=214&ac=1" height=495px; width=622px;>
-
-MediaLog contains helper methods for creating MediaLogEvents, and
-ContentMediaLog implements its AddEvent() function to send a MediaLogEvent to
-the browser process as an IPC message. A single instance of MediaLog is
-associated with each WebMediaPlayer. This instance currently gets passed down to
-PipelineImpl and BufferedResourceLoader and can easily be handed off to other
-potential data sources (it’s RefCountedThreadSafe).
-
-MediaInternals is a singleton attached to the IO thread. The IPC messages from
-ContentMediaLog get passed to it, and it handles notifications from
-AudioRendererHost. It lives in chrome/, but it implements the MediaObserver
-interface in content/, allowing AudioRendererHost and RenderMessageFilter (the
-IPC message handler) to call it.
-
-MediaInternals talks to [chrome://media-internals](javascript:void(0);) by
-packaging up and sending JavaScript function calls to it via MediaInternalsUI.
-It also currently stores the information it receives from AudioRendererHost to
-hand off to newly created media-internals tabs, but this functionality may be
-removed in the future.
-MediaInternalsUI is a WebUI component that hosts chrome://media-internals.
-There’s not much of interest here, just lots of proxying function calls across
-threads.
-[chrome://media-internals](javascript:void(0);) contains most of the logic. It
-handles MediaLogEvents, NetLog events, and updates from AudioRendererHost. It
-infers the contents of the media cache from NetLog events (cache_entry.js,
-disjoint_range_set.js) and displays a log of events (event_list.js) and
-properties (media_player.js) of each active media player. I also displays time
-measurements between pre-defined events (metrics.js) and some basic information
-about audio streams from AudioRendererHost.
-
-## Potential Future Work
-
-* Associate data from AudioRendererHost with data from the MediaLog
- from the same player.
-* Embed a video player in the page, something like scherkus@’s
- IHeartVideo project. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/activedomobject/index.md b/chromium/docs/website/site/blink/activedomobject/index.md
deleted file mode 100644
index 0a3950ac445..00000000000
--- a/chromium/docs/website/site/blink/activedomobject/index.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: activedomobject
-title: ActiveDOMObject
----
-
-**DRAFT. NEEDS REVIEW**
-
-The ActiveDOMObject is used to implement DOM objects that can involve
-asynchronous operations such as loading data from network (e.g. XMLHttpRequest,
-WebSocket) to
-
-* keep them alive while async op is active
-* hold back actions resulting from async op while the document is
- suspended
-
-The ActiveDOMObject classes can override its hasPendingActivity() method to keep
-the object alive while some async operation is in progress. As long as
-hasPendingActivity() returns true, V8 prolongs its life so that it doesn't get
-garbage collected even when it becomes unreachable. Note that there must be a V8
-wrapper for the object in order to this to work.
-
-While hasPendingActivity() returns true, the life of the parent Document object
-is also prolonged (explanation TBA). You rarely need to override
-contextDestroyed() for ActiveDOMObject subclasses.
-
-ActiveDOMObjects are notified of detach of the parent Document object (or
-shutdown of the parent WorkerThread) as the stop() method called on it.
-Commonly, they start shutdown of the asynchronous operation in stop() if any.
-This detach occurs regardless of hasPendingActivity().
-
-suspend() is called when dialogs such as alert(), prompt(), etc. are going to be
-shown or the WebInspector's pause is going to be active. resume() is called when
-the dialog is closed or the WebInspector resumes script execution. Between
-suspend() and resume(), it's recommended that operations on the ActiveDOMObjects
-are suspended. Since resource loading is automatically suspended by Chrome's
-resource dispatched code, you may not need to manually hold back async method
-calls.
-
-When implementing, it is critical that you also add ActiveDOMObject to the
-interface flags in your IDL file, or GC will pay no attention to
-hasPendingActivity()!
-
-As of Nov 12 2013 by tyoshino@. Updated July 17, 2014 by kouhei@
-
-Thanks haraken@, abarth@ \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/blink-api-owners-requirements/index.md b/chromium/docs/website/site/blink/blink-api-owners-requirements/index.md
deleted file mode 100644
index cd1147cda83..00000000000
--- a/chromium/docs/website/site/blink/blink-api-owners-requirements/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-api-owners-requirements
-title: Blink API OWNERS Requirements
----
-
-## [Moved here](/blink/guidelines/api-owners/requirements) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/blink-gardening/index.md b/chromium/docs/website/site/blink/blink-gardening/index.md
deleted file mode 100644
index b2e1660ff2b..00000000000
--- a/chromium/docs/website/site/blink/blink-gardening/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-gardening
-title: Blink gardening
----
-
-This page has moved (there's no more Blink gardening!). See [Handling Blink
-failures](/blink/sheriffing) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/blink-gc/index.md b/chromium/docs/website/site/blink/blink-gc/index.md
deleted file mode 100644
index 871984b9e60..00000000000
--- a/chromium/docs/website/site/blink/blink-gc/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-gc
-title: Garbage Collection for Blink C++ objects (a.k.a. Oilpan)
----
-
-This documentation was moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/heap/BlinkGCAPIReference.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/blink-in-js/index.md b/chromium/docs/website/site/blink/blink-in-js/index.md
deleted file mode 100644
index 11411b08519..00000000000
--- a/chromium/docs/website/site/blink/blink-in-js/index.md
+++ /dev/null
@@ -1,278 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-in-js
-title: Blink-in-JavaScript
----
-
-## NOTE: THIS DOCUMENT IS NO LONGER VALID
-
-## It is left available out of historical interest.
-
-## Overview
-
-***Blink-in-JavaScript*** is a mechanism to enable Blink developers to implement
-DOM features in JavaScript (instead of C++). The goal of Blink-in-JS is to
-improve web layering by implementing high-level DOM features on top of existing
-web-exposed APIs. You can learn the design in [this design
-document](https://docs.google.com/a/google.com/document/d/13cT9Klgvt_ciAR3ONGvzKvw6fz9-f6E0FrqYFqfoc8Y/edit#)
-and [this
-slide](https://docs.google.com/a/google.com/presentation/d/1XvZdAF29Fgn19GCjDhHhlsECJAfOR49tpUFWrbtQAwU/edit#slide=id.g3840fe06e_00).
-If you are interested in the security model, you can also look at [this
-document](https://docs.google.com/a/google.com/document/d/1AtnKpzQaSY3Mo1qTm68mt_3DkcZzrp_jcGS92a3a1UU/edit).
-
-## Guideline
-
-When you want to implement a feature in Blink-in-JS, you need to follow the
-following guideline.
-
-1. If you plan to implement a feature in Blink-in-JS, you need to send
- an Intent-to-Implement to blink-dev@. The Intent-to-Implement should
- explain the advantages of the Blink-in-JS and have a list of private
- script APIs that will be required for the Blink-in-JS. (\*\*)
-2. You are strongly discouraged to use private script APIs. If you need
- to add a private script API, you need to provide a justification for
- the API and get an LGTM from one API owner (\*\*\*). The API must
- meet either of the following conditions:
-
- * The API is a missing part of the current web and going to be
- exposed to the web in the future.
- * The API is for supporting a will-be-deprecated feature.
-
-(\*) See [this
-slide](https://docs.google.com/a/chromium.org/presentation/d/1-5wpqeIltM40DAZdQBhbqnzOZuFNezS4eUfx1T4YV50/edit#slide=id.g437b0e633_00)
-for a background of this guideline.
-
-(\*\*) The fact that we’re lowering the priority of Blink-in-JS means that we
-are going to be conservative about accepting your Intent-to-Implement. It is
-important to consider if your Blink-in-JS work has higher impact than other
-projects you could work on alternately. The Intent-to-Implement must provide
-clear advantages of why you think it is important for Blink to implement the
-feature in Blink-in-JS. For example, the following Intent-to-Implements look
-appealing:
-
-* I need to implement MediaControls for Android. There are two options
- for us: implement it in C++ or implement it in JS. Given that
- MediaControls is a self-contained and high-level feature that can be
- developed on top of existing web-exposed API, I propose to implement
- MediaControls in Blink-in-JS. It is easier to develop and maintain.
-* XMLViewer is already written in JS and it is invoked using direct V8
- APIs. Given that Blink-in-JS has a safer mechanism to run JS in
- Blink, I propose to move XMLViewer to Blink-in-JS.
-* I plan to make a substantial restructuring of the rendering system
- for performance. I noticed that marquee-specific code in the
- rendering system prevents us from making the restructuring. Given
- that marquee is an out-dated feature, I want to just factor out the
- implementation to Blink-in-JS instead of supporting the
- marquee-specific code in the new rendering system.
-
-On the other hand, the following Intent-to-Implement would not be appealing:
-
-* HTMLFormControls are self-contained and it is not hard to move the
- implementation to Blink-in-JS. The benefit is that we can remove a
- bunch of code from C++. However, I’m not sure if HTMLFormControls is
- an actively developed area and thus it’s not clear at this point how
- helpful it is for on-going Blink projects.
-
-(Note: These are just examples and not intending to imply go or non-go of
-MediaControls-in-JS etc)
-
-(\*\*\*) It is a good idea to ask review for dglazkov@ (API owner), jochen@ (API
-owner), haraken@ and area experts of the API.
-
-## Basics
-
-The most common usage of Blink-in-JS is to implement DOM features defined in an
-IDL file in JavaScript. For example, consider to implement a &lt;marquee&gt; tag
-in Blink-in-JS.
-
-In this case, what you need to do is just to:
-
-* Add \[ImplementedInPrivateScript\] IDL extended attributes to DOM
- attributes/methods in an IDL file.
-* Implement the DOM attributes/methods in JavaScript (This JavaScript
- file is called a ***private script***.)
-
-Specifically, you first need to add \[ImplementedInPrivateScript\] IDL extended
-attributes to DOM attributes/methods in
-[HTMLMarqueeElement.idl](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/html/HTMLMarqueeElement.idl&q=htmlmarqueeelement.idl&sq=package:chromium&type=cs).
-
-```none
-interface HTMLMarqueeElement : HTMLElement {
-  [ImplementedInPrivateScript] void start();
-  [ImplementedInPrivateScript] void stop();
-  [ImplementedInPrivateScript] attribute long loop;
-  [ImplementedInPrivateScript] attribute long scrollAmount;
-  ...;
-};
-```
-
-Second, you need to implement the DOM attributes/methods in
-[HTMLMarqueeElement.js](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/html/HTMLMarqueeElement.js&sq=package:chromium&type=cs).
-
-```none
-installClass("HTMLMarqueeElement", function(HTMLMarqueeElementPrototype)) {
-  HTMLMarqueeElementPrototype.start = function() {
-    // Implement the start() method.
-    // |this| object is equal to the wrapper of the <marquee> element.
-  }
-  Object.defineProperty(HTMLMarqueeElementPrototype, 'loop', {
-      get: function() {
-        // Implement the getter of the loop attribute.
-        // |this| object is equal to the wrapper of the <marquee> element.
-      },
-      set: function(value) {
-        // Implement the setter of the loop attribute.
-        // |this| object is equal to the wrapper of the <marquee> element.
-      },
-  });
-  ...; // Implement other DOM attributes/methods.
-};
-```
-
-That's it. Then the IDL compiler auto-generates the binding code that connects
-user's script with the JavaScript functions defined in the private script.
-
-The important points are as follows:
-
-* A private script runs in a dedicated isolated world. For security
- reasons, no JavaScript objects nor DOM wrappers are shared between
- the private script and user's script. This restriction is needed to
- prevent the private script from leaking confidential information to
- user's script.
-* To force the restriction, the type of arguments you can pass from
- user's script to the private script is limited to JavaScript
- primitive types (e.g., int, double, string, boolean etc) and DOM
- wrappers. Similarly, the type you can return from the private script
- back to user's script is limited to JavaScript primitive types and
- DOM wrappers. You cannot pass JavaScript functions, JavaScript
- objects, Promises etc.
-* |global| is a window object of the private script. You can use the
- |global| object as you like, but note that the |global| object is
- shared among all private scripts. For example, HTMLMarqueeElement.js
- and XSLT.js share the same |global| object. Thus you should not
- cache data specific to your private script onto the |global| object.
-* |HTMLMarqueeElementPrototype| is a prototype object of the private
- script. Your main work is to define DOM attributes/methods on the
- prototype object.
-* |this| object is equal to the wrapper of the &lt;marquee&gt; element
- in the isolated world for private scripts. Due to the security
- isolation, |this| object is a different wrapper from the wrapper of
- the &lt;marquee&gt; element in the main world. You can cache
- whatever you want onto the |this| object. It is guaranteed that the
- |this| object is not accessible from user's script.
-
- By default, the IDL compiler assumes that you have HTMLMarqueeElement.h in
- Blink. If you don't want to have HTMLMarqueeElement.h, you need to add
- \[NoImplHeader\] IDL attribute on the interface.
-
-* |this| object has the following prototype chain: |this| --&gt;
- HTMLMarqueeElementPrototype --&gt; HTMLMarqueeElement.prototype
- --&gt; HTMLElement.prototype --&gt; Element.prototype --&gt;
- Node.prototype --&gt; ....
-
-For more details, you can look at how
-[HTMLMarqueeElement.js](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/html/HTMLMarqueeElement.js&sq=package:chromium&type=cs)
-and
-[PrivateScriptTest.js](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/testing/PrivateScriptTest.js&q=privatescripttest.js&sq=package:chromium&type=cs)
-are implemented.
-
-## Details
-
-By using the \[ImplementedInPrivateScript\] IDL extended attribute, you can
-implement DOM features exposed to the web in a private script. However, this is
-sometimes not sufficient to implement real-world DOM features in a private
-script. Sometimes you will need to invoke a private script from C++. Sometimes
-you will need to implement internal DOM attributes/methods that are only exposed
-to private scripts.
-
-In general, Blink-in-JS supports the following four kinds of APIs.
-
-* \[user's script & private script =&gt; C++\]: This is a normal DOM
- attribute/method (where Blink-in-JS is not involved). The DOM
- attribute/method is implemented in C++, and the DOM attribute/method
- is exposed to both user's script and private scripts.
-* \[user's script & private script =&gt; private script\]: This is the
- most common usage of Blink-in-JS explained above. The DOM
- attribute/method is implemented in a private script, and the DOM
- attribute/method is exposed to both user's script and private
- scripts.
-* \[private script =&gt; C++\]: This is an "internal" DOM
- attribute/method for private scripts. The DOM attribute/method is
- implemented in C++, and the DOM attribute/method is exposed only to
- private scripts (not exposed to user's script).
-* \[C++ =&gt; private script\]: This is a way to invoke a private
- script from C++. The DOM attribute/method is implemented in a
- private script, and a C++ static function is provided to invoke the
- DOM attribute/method so that Blink can use it wherever it wants.
-
-You can control the kind of each API by combining the
-\[ImplementedInPrivateScript\] IDL extended attribute and
-\[OnlyExposedToPrivateScript\] IDL attribute.
-
-* \[user's script & private script =&gt; C++\]: Use no IDL extended
- attributes.
-* \[user's script & private script =&gt; private script\]: Use
- \[ImplementedInPrivateScript\].
-* \[private script =&gt; C++\]: Use \[OnlyExposedToPrivateScript\].
-* \[C++ =&gt; private script\]: Use \[ImplementedInPrivateScript,
- OnlyExposedToPrivateScript\].
-
-Here is an example:
-
-```none
-interface XXX {
-  void f1();  // Normal DOM method implemented in C++; exposed to user's script and private scripts.
-  [ImplementedInPrivateScript] void f2();  // DOM method implemented in a private script; exposed to user's script and private scripts.
-  [OnlyExposedToPrivateScript] void f3();  // DOM method implemented in C++; exposed only to private scripts.
-  [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void f4();  // DOM method implemented in a private script; V8XXX::PrivateScript::f4Method() is provided as a static method so that Blink can invoke the private script.
-};
-```
-
-For more details, see test cases in
-[PrivateScriptTest.idl](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/testing/PrivateScriptTest.idl&sq=package:chromium&type=cs).
-
-DOM attributes/methods that have \[OnlyExposedToPrivateScript\] IDL attribute
-are "backdoors". **Backdoors are strongly discouraged** unless you are certain
-that the backdoors are APIs that are missing in the current web platform and
-should be exposed to the web in the future. Ideally Blink-in-JS should be
-implemented only by using existing web platform APIs. The only case where
-backdoors are allowed is a case where we think that the API is a missing part of
-the current web platform and should be exposed to the web in the future. (One of
-the goals of Blink-in-JS is to understand what APIs are missing in the web
-platform by trying to implement built-in contents of Blink in JavaScript.)
-
-## Where Your Private Script lives?
-
-Your private script lives in `blink_resources.pak` in
-`out/*config*/gen/blink/public/resources/`, which is generated by
-[`blink_resouces.gyp`](https://chromium.googlesource.com/chromium/blink/+/HEAD/public/blink_resources.gyp),
-then it repacked into `content_shell.pak`, `resources.pak` and so.
-
-So, you need to do following steps putting your private script into resource
-file:
-
-1. Change
- [`blink_resources.grd`](https://chromium.googlesource.com/chromium/blink/+/HEAD/public/blink_resources.grd)
- in Blink repository to include your private script, e.g.
- [crrev/570863002](http://crrev.com/570863002)
- * Since we also need to change file in Chromium repository, I
- recommend to create dummy file and check-in this before
- reviewing your private script.
-2. Change
- [`content/child/blink_platform_impl.cc`](https://chromium.googlesource.com/chromium/src/+/HEAD/content/child/blink_platform_impl.cc)
- in Chromium repository, e.g.
- [crrev/556793006](http://crrev.com/556793006)
- * **You should wait step #1 blink change is rolled into Chromium
- rather than landed into blink repository.**
-
-Note: Due to [crbug/415908](http://crbug.com/415908), blink_resources.pak isn't
-rebuild when your private script file changed. You may want to remove it,
-`out/Debug/gen/blink/public/resources/blink_resources.pak`.
-
-## Contacts
-
-If you have any questions or comments, feel to free to ask haraken@. I'm
-planning to factor out more things from C++ to Blink-in-JS to improve the
-hackability of the Blink core. Your contributions are super welcome! \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/blink-network-stack/index.md b/chromium/docs/website/site/blink/blink-network-stack/index.md
deleted file mode 100644
index eaa496cbd9b..00000000000
--- a/chromium/docs/website/site/blink/blink-network-stack/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-network-stack
-title: Blink Networking APIs
----
-
-> [See here for Chromium Network Stack team
-> info](/developers/design-documents/network-stack)
-
-> <https://docs.google.com/document/d/1PN8RN9NESiOtVzMWZf1f94H85Nf6Sfs9Lc9xgAsjVsU/edit>
-
-> #### Blink Networking APIs \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/blink-post-merge-faq/index.md b/chromium/docs/website/site/blink/blink-post-merge-faq/index.md
deleted file mode 100644
index c8ca2aa4e0c..00000000000
--- a/chromium/docs/website/site/blink/blink-post-merge-faq/index.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-post-merge-faq
-title: Blink post-merge FAQ
----
-
-## Merge versions
-
-**Pre-merge:**
-
-> Blink git SHA:
-> [37d233bde3baaea720a9a81296fa77b63c9d8981](https://chromium.googlesource.com/chromium/blink/+/HEAD)
-
-> Blink revision: **[202666](http://blinkrev.hasb.ug/202666)**
-
-> Chromium git SHA:
-> [70aa692d68ee86d365928edd160c3575fda2b453](https://chromium.googlesource.com/chromium/src/+/70aa692d68ee86d365928edd160c3575fda2b453)
-> [350323](http://crrev.com/350323) Chromium revision:
-> Chrome version:
-> [47.0.2518.0](https://chromium.googlesource.com/chromium/src/+/70aa692d68ee86d365928edd160c3575fda2b453/chrome/VERSION)
-
-**Post-merge:**
-
-> Blink git SHA: *n/a*
-
-> Blink revision: *n/a*
-
-> Chromium git SHA:
-> [b59b6df51a249895fbba24f92b661f744e031546](https://chromium.googlesource.com/chromium/src/+/b59b6df51a249895fbba24f92b661f744e031546)
-
-> Chromium revision: **[350324](http://crrev.com/350324)**
-
-> Chrome version:
-> [47.0.2519.0](https://chromium.googlesource.com/chromium/src/+/341be68a2f3f424685a709aacc683d227f0de7eb)
-> -- version bump came 1 day after
-> [branch](https://chromium.googlesource.com/chromium/src/+/b59b6df51a249895fbba24f92b661f744e031546/chrome/VERSION)
-
-## How to migrate local /src (chromium main project) branches
-
-* ## Only once to update the remote
-
- ## ```none
- git remote update (or git fetch)  
- ```
-
- ## `For each branch`
-
- ## ```none
- git rebase $(git merge-base branch_name origin/master) branch_name --onto origin/master
- ```
-
-## How to migrate local /src/third_party/WebKit branches
-
-When running gclient sync after the merge point, the previous .git directory
-(containing all the local branches) for blink will be saved in
-//src/../old_src_third_party_WebKit.git
-
-For each local branch, run the following steps:
-
-* Create a patch file
-
- ```none
- git diff origin/master...branch_name > /tmp/old-blink.patch
- ```
-
-And then in the new checkout, after the branch point
-
-* Recreate the branch
-
- ```none
- git new-branch old-blink
- ```
-
-* Apply the patch
-
- ```none
- git apply -3 --directory third_party/WebKit/ /tmp/old-blink.patch
- ```
-
-## How to migrate blink patches from Rietveld
-
-If you have the patch locally as a git branch, migrating that would be easier.
-Otherwise, follow these steps:
-
-1. Download the raw patch from codereview.chomium.org/123456
-2. Create a new local git branch in a post-merge checkout
-
- ```none
- git new-branch issue123456
- ```
-
-3. Apply the patch
-
- ```none
- git apply -3 --directory third_party/WebKit/ issue123456_1001.diff
- ```
-
-4. Add new files and commit changes
-5. Upload to a new CL
-
-## How can I avoid getting the entire Blink history when going over the merge commit
-
-If you use `git log` or similar over the merge commit, use `--first-parent` to
-walk up only in the chromium history.
-
-## Cherry-picking a Blink CL to a release branch
-
-The active releases branches will be merged (i.e. won't have a
-third_party/WebKit subproject) as well.
-
-For CL that get landed after the merge day, it won't be any different than
-cherry-picking a chromium CL. Just follow the
-[git-drover](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/git-drover.html)
-man page.
-
-To cherry-pick a blink CL that was landed before the merge day:
-
-* Find the corresponding commit that you want to cherry-pick in the
- chromium master and note its SHA1 (note: it will have a different
- SHA1 than what reported in the codereview.chromium.org/NNNN)
- e.g., if you want to cherry-pick
- <https://codereview.chromium.org/1340403003>
-
- ```none
- git log origin/master --grep codereview.chromium.org/1340403003 -- third_party/WebKit
- commit c614d6deae3c6e4cc0bfbb60bb15a17305b418b7
- Author: ....
- ```
-
-* Follow the
- [git-drover](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/git-drover.html)
- documentation using SHA1 above when doing git cherry-pick -x
-
-## Creating a checkout using fetch blink does no longer work
-
-Use `fetch chromium` instead.
-
-## Converting revision range links from SVN to git
-
-See [this document
-](https://docs.google.com/document/d/1v2fTiNF2FNzbSZXuF1JQxT3UHghM9GUI5csWIpSdu68/edit)for
-instructions.
-
-## Bisecting across the merge point
-
-* Bisect scripts (src/tools/bisect-builds.py) and bots should Just
- Work TM. File a bug if that is not the case.
-* Doing a git bisect on a revision range that includes the merge point
- requires a little trick. (See [\[chromium-dev\] Merge of Chromium
- and Blink repositories - git bisect is
- broken?](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/ydCRw4V6u5o)
- for context and details)
-* The trick consists in convincing git that the merge commit
- (b59b6df51) did NOT pull in the blink history (70aa692d6) using
- grafts
-
- ```none
- git replace --graft b59b6df51 70aa692d6
- # Do the git bisect as usual
- git bisect start GOOD_SHA1 BAD_SHA1 
- # Remove the grafts at the end
- $ git replace -d b59b6df51
- ```
diff --git a/chromium/docs/website/site/blink/blink-testing-and-the-w3c/index.md b/chromium/docs/website/site/blink/blink-testing-and-the-w3c/index.md
deleted file mode 100644
index f302488b4b0..00000000000
--- a/chromium/docs/website/site/blink/blink-testing-and-the-w3c/index.md
+++ /dev/null
@@ -1,203 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-testing-and-the-w3c
-title: Blink, Testing, and the W3C
----
-
-*Blink is currently running a subset of the W3C's tests automatically, as
-documented in [Importing the W3C tests to Blink](/blink/importing-the-w3c-tests)
-.*
-
-*This document is left here for historical purposes and to document some of the design and process tradeoffs involved.*
-
-> *Document owner: [dpranke@chromium.org](mailto:dpranke@chromium.org)*
-
-## Overview
-
-The W3C has defined a large number of tests used for conformance testing.
-
-Blink has inherited from WebKit a large number of tests that are used for
-regression testing. Many of these tests (mostly the so-called "pixel tests")
-require manual verification of correctness and take a fair amount of work to
-keep these tests up-to-date. Many are also not written in a way that can be
-easily used by other browser vendors.
-
-Blink does not currently (4/2013) regularly import and run the W3C's tests, but
-we have done some ad-hoc partial imports of test suites in the past into our
-existing regression test suites. Some of these previously imported W3C tests are
-therefore out of date and/or redundant.
-
-The Blink team [has stated](/blink/#testing) that any new features being
-developed should be accompanied by conformance tests and that we should be
-working with the W3C on these tests. We believe that having a comprehensive,
-vendor-neutral set of tests for the web platform is good for the web as a whole.
-
-Thus, there are several interrelated problems:
-
- *The W3C has a lot of tests that aren't being run regularly (by us, at
- least).*
-
- *We have redundant and/or out of date tests.*
-
- *We have a lot of tests that are hard to maintain.*
-
- *We have a lot of tests we could potentially share with the W3C.*
-
- *We do not have a great sense of the coverage of either or both sets of
- tests.*
-
- *Neither we nor the W3C have smoothly running development processes to make
- these two sets of tests converge where possible.*
-
-I will also note that although I used the words "conformance" and "regression"
-above, they don't necessarily mean much difference in practice. You can, and
-probably should, use conformance tests for regression testing.
-
-## Ideal state
-
-We should work together with the W3C to resolve these problems as much as
-possible. The ideal end state might look something like:
-
- *All of the W3C’s tests would be in a single location or repository, clearly
- organized by some scheme that identified which features each test targeted,
- and what the state of the test was (submitted, accepted/approved, etc.)*
-
- *There would be some sort of process for minimizing or eliminating redundant
- tests.*
-
- *The test suite coverage would be comprehensive, and portable (it would be
- well understood how to write tests that ran in the major browsers).*
-
- *The processes for submitting new tests, getting changes made to existing
- tests, and downloading the latest test suites and integrating them into our
- builds would be well defined and practiced.*
-
- *The tests could be run and evaluated automatically (i.e., tests would not
- require manual review to see if you passed or failed).*
-
- *The number of chromium-/blink- specific layout tests would be kept to a
- minimum; if the test suites were comprehensive, arguably we’d have little
- need for custom tests except for features that weren’t standards-track. We
- would have a well-polished process for removing our tests when they were
- made redundant.*
-
-## Current state
-
-Today, as I currently understand it, none of these things are true, although
-some are closer than others. Item-by-item:
-
- *Tests are scattered across multiple locations.*
-
- **Most of them can be found somewhere on the W3C’s mercurial repository
- (dvcs.w3.org/hg), and are mirrored to w3c-test.org .**
-
- **Some tests are also being moved to Github. The W3C has claimed a goal
- of moving everything to Github by the end of 2013.**
-
- **Different WGs follow different naming conventions, although I think
- things are fairly consistent for newer tests.**
-
- *I have no idea how people figure out if there are redundant tests in the
- W3C suites. My guess is that reviewers and spec editors make their best
- efforts here.*
-
- *I have no real idea how comprehensive the existing test suites are, nor how
- many of them run on Blink as-is (let alone pass).*
-
- **At a rough guess, there’s somewhere between 13,000 and 18,000 existing
- tests in various stages of approval.**
-
- **I don’t yet really know how many reftests really are portable and
- aren’t subject to diffs resulting from rounding errors and other things
- that don’t really affect correctness.**
-
- **On a related note, it’s hard to say how many of the tests are “good”,
- in the sense that they are maintainable, clear, focused, fast, etc.**
-
- *I think the processes for submitting new tests are roughly defined for most
- groups at this point, but I don’t know how broadly shared they are between
- WGs. We in Blink are at least not very familiar with the processes.*
-
- *Many of the older tests (e.g., CSS1, CSS2.1) were written assuming someone
- would look at them individually to decide if they were passing.*
-
- **We currently run those as pixel tests, but it would be difficult to
- say with confidence how many of them we were “passing” (due to the way
- Blink manages passing vs. expected results).**
-
- **There may be some tests that require interactive (manual) execution,
- as well as manual review. I don’t know if we are interested in them at
- all (I’m not, personally).**
-
- *I have no idea how many of our existing regression tests are redundant, nor
- how many of them could be reused by other vendors.*
-
-**Work items**
-
-So, this leaves us with the following (unprioritized) set of potential work
-items:
-
- *Pull all of the existing tests down and see:*
-
- **How many of them we already have?**
-
- **How many of them are ref tests or are otherwise self-contained (i.e.,
- we don’t need to generate -expected results separately and review them
- for correctness)?**
-
- **What sort of coverage do we have? How much overlap with existing Blink
- tests do we have?**
-
- **How well do they integrate into the existing harnesses we have?**
-
- *Help organize the W3C repos.*
-
- *Work on tools and processes for submitting new tests, getting tests
- approved, and pulling them down to run, etc.*
-
- *Work to identify areas missing coverage.*
-
- *Work to write tests for those areas.*
-
- *Formalize tracking the test suites for new features we’re working on and
- ensuring the test suites are accepted (I think we do this today in a fairly
- ad-hoc and informal way). We should at least be regularly running our own
- tests!*
-
- *Work on the w3c’s test harness and figure out if it needs more features to
- be able to get better test coverage and/or work more portably.*
-
- *Publish our test results regularly somehow.*
-
- *Perhaps help publish the results of other implementations (Helping to build
- a common dashboard or something; presumably we don’t want to be publishing
- the results from other vendors ourselves).*
-
-This is all a fair amount of work, but there are too many unknowns to be able to
-really give a resource estimate (at least I wouldn’t want to).
-
-## Q2 2013 goals
-
-We on Blink have a Q2 2013 goal of at least the following:
-
- *Develop tools to import some of the larger test suites from the W3C, if not
- all of them. (with some [help from
- Adobe](https://lists.webkit.org/pipermail/webkit-dev/2013-March/024055.html))*
-
- *Import and run the tests in an automated manner as part of our existing
- regression testing processes (the layout tests). This will not include any
- tests requiring manual verification of correctness (i.e., no tests requiring
- new platform-specific baselines).*
-
- *Provide at least an initial set of feedback to the W3C on what did and
- didn't work (including which tests are and aren't passing), including
- enhancement requests for their infrastructure and processes if we find our
- needs aren't currently met.*
-
-This should give us a pretty good sense of where we're at and how much work the
-remaining open problems may be.
-
-Note that if we get this working smoothly, we can hopefully extend these
-processes to other standards bodies as need be (ECMA, Khronos, etc.) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/blink-triaging/index.md b/chromium/docs/website/site/blink/blink-triaging/index.md
deleted file mode 100644
index 07bd8f4ed41..00000000000
--- a/chromium/docs/website/site/blink/blink-triaging/index.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: blink-triaging
-title: Component:Blink bug labeling rotation
----
-
-[Document with tips for bug
-labeling](https://docs.google.com/document/d/1l9XehKEHAJu3-LnWDdXl8-t-8rz9dk8dy1bEI4zzUOU/edit)
-
-## [Mapping of labels to owners and teams](https://docs.google.com/spreadsheets/d/19JEFMvsxD3eThyGiJRqAjcpx362LHUDdVzICAg7TYZA/edit#gid=0)
-
-## Goal
-
-Deliver Blink bugs in crbug.com to engineers who are responsible for the bug
-area by adding Blink&gt;*Foo* components.
-
-## Example Instructions
-
-We don't have a common instruction yet. The below is an example, and you don't
-need to follow it. Important points are:
-
-* Reduce the number of [Component=Blink
- bugs](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Component%3DBlink)
-* Newer bugs are important.
-
-### Task 1: Handling Component=Blink issues (mandatory, daily)
-
-1) Search for ["Component=Blink -Hotlist=CodeHealth -Needs=Feedback
--Needs=Reduction"](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Component%3DBlink+-Hotlist%3DCodeHealth+-Needs%3DFeedback+-Needs%3DReduction)
-
-2) Read the issue description and comments and add Blink&gt;*Foo* component and
-remove Blink component, if the area/ownership is clear. Otherwise:
-
-* If the issue has not enough information, ask for additional
- information, add Needs-Feedback label, and add your email address to
- Cc field.
- Add a Next-Action value set to 14 days from the current date.
- You're responsible for this bug. You should handle the bug until you
- identify Blink areas or feedback timeout.
- [This
- link](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3DBlink+-Hotlist%3DCodeHealth+Needs%3DFeedback+cc%3Ame&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
- shows the list of bugs of this kind you are responsible for.
-* If the issue doesn't seem to be reproducible, but plausible, add
- Needs-TestConfirmation.
-* If the reproduction is too complex to understand the culprit area,
- add Needs-Reduction.
-* If you understand the culprit, but can't find an appropriate
- Blink&gt;*Foo* component (eg. by looking at similar bugs resolved in
- the not-too-distant past), email
- [crblink-rotation@](https://groups.google.com/a/chromium.org/forum/#!forum/crblink-rotation)
- (and/or add Hotlist-BlinkNoLabel, this is TBD). You should find an
- owner if the bug looks serious.
-
-**Task 2: Handling Component=UI issues (mandatory, daily)**
-
-1) Search for untriaged
-[Component=UI](https://bugs.chromium.org/p/chromium/issues/list?q=Component%3DUI%20-Needs%3DFeedback%20-Type%3DFeature%2CTask&can=2)
-bugs
-
-2) Read the issue description and add comments or move to sub-components of UI
-or other components (including Blink sub-components as appropriate). Set
-priorities as needed.
-
-### Task 3: Handling issues without Component: field (optional)
-
-Do the same things as task 1 and task 2 for issues without Component: field. If
-an issue isn't related to Blink, add appropriate non-Blink components such as
-Component:`UI`, Component:`Internals`.
-
-* [Bugs created in the last 30 days without
- owners](https://bugs.chromium.org/p/chromium/issues/list?q=-has%3Acomponent%20-reporter%3Achromium.org%20-label%3Aautofiled%20-label%3Aperformance%20-hotlist%3DHistogramEraser%20%20-hotlist%3DMetrics-Eraser%20opened%3Etoday-30%20-has%3Aowner&can=2)
-* [Bugs that have owners but that haven't been modified in the last
- year](https://bugs.chromium.org/p/chromium/issues/list?q=-has%3Acomponent%20-reporter%3Achromium.org%20-label%3Aautofiled%20-label%3Aperformance%20-hotlist%3DHistogramEraser%20%20-hotlist%3DMetrics-Eraser%20modified%3Ctoday-365%20has%3Aowner%20%20-hotlist%3DExpiredHistograms&can=2)
-* [All bugs without
- owners](https://bugs.chromium.org/p/chromium/issues/list?q=-has%3Acomponent%20-reporter%3Achromium.org%20-label%3Aautofiled%20-label%3Aperformance%20-hotlist%3DHistogramEraser%20%20-hotlist%3DMetrics-Eraser%20-has%3Aowner&can=2)
-* [All
- bugs](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=-has%3Acomponent+-reporter%3Achromium.org+-label%3Aautofiled+-label%3Aperformance+-hotlist%3DHistogramEraser++-hotlist%3DMetrics-Eraser)
-
-**Task 4: monitor stale P0/P1 security bugs (optional)**
-
-* Review all result from [this
- search](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Type%3DBug-Security+component%3Ablink+pri%3D0%2C1+modified%3Ctoday-30&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids).
-* Check that the bug has an owner, the owner is actively working on
- the issue, and is fixing. Re-assign, re-categorize or ping the bug
- as appropriate.
-
-**Deprecated:**
-
-### Reducing/Confirming Component=Blink bugs (mandatory, daily)
-
-1) Search for "[Component=Blink
-Needs=Reduction](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Component%3DBlink+Needs%3DReduction)",
-choose one, and investigate it to identify Blink areas by reading HTML/CSS/JS
-code and/or making a reduction.
-
-2) Add Blink&gt;*Foo* components, remove Blink component and Needs-Reduction
-when confirmed and updated the status accordingly, if needed.
-
-## Contact
-
-Public mailing list:
-[crblink-rotation@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/crblink-rotation)
-(<https://groups.google.com/a/chromium.org/forum/#!forum/crblink-rotation>) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/coding-style/index.md b/chromium/docs/website/site/blink/coding-style/index.md
deleted file mode 100644
index 1b667e4f987..00000000000
--- a/chromium/docs/website/site/blink/coding-style/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: coding-style
-title: Blink Coding Style Guidelines
----
-
-These guidelines are specific to the [Blink](/blink) project, not to be confused
-with the general [Chromium coding
-style](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/styleguide.md).
-
-[TOC]
-
-## C++
-
-This documentation has moved to the [Blink C++ Style
-Guide](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/blink-c++.md).
-
-## Python
-
-This documentation has moved to the [Blink Python Style
-Guide](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/python/blink-python.md).
-
-## Web tests
-
-See [Writing Web
-Tests](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md).
-
-## License
-
-Existing files in Blink use a longer header license block inherited from WebKit,
-however new files should follow the Chromium [File Header
-Style](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++.md#File-headers).
-
-To use this license block you must make sure you have completed the [External
-Contributor
-Checklist](/developers/contributing-code/external-contributor-checklist).
-
-## License for this document
-
-*This page began as the [WebKit Coding Style
-Guidelines](http://www.webkit.org/coding/coding-style.html), Licensed under
-[BSD](http://www.webkit.org/coding/bsd-license.html):*
-
-BSD License
-Copyright (C) 2009 Apple Inc. All rights reserved.
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution.
-THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS “AS IS” AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-## References
-
-\[1\] Comments on comments
-<https://lists.webkit.org/pipermail/webkit-dev/2011-January/015769.html> \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/coding-style/layout-test-style-guidelines/index.md b/chromium/docs/website/site/blink/coding-style/layout-test-style-guidelines/index.md
deleted file mode 100644
index e5fb1897d06..00000000000
--- a/chromium/docs/website/site/blink/coding-style/layout-test-style-guidelines/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/coding-style
- - Blink Coding Style Guidelines
-page_name: layout-test-style-guidelines
-title: Web Test Style Guidelines
----
-
-[docs/testing/writing_web_tests.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/writing_web_tests.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/deprecating-features/index.md b/chromium/docs/website/site/blink/deprecating-features/index.md
deleted file mode 100644
index 8f4438ad286..00000000000
--- a/chromium/docs/website/site/blink/deprecating-features/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: deprecating-features
-title: Deprecating Features
----
-
-[TOC]
-
-## How To Measure Usage and Notify Developers
-
-1. Add your feature to [web_feature.mojom's
- WebFeature](https://cs.chromium.org/chromium/src/third_party/WebKit/public/platform/web_feature.mojom?q=third_party/WebKit/public/platform/web_feature.mojom&sq=package:chromium&dr&l=16).
-2. Add a clever deprecation message to the big switch in
- [UseCounter::deprecationMessage](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/frame/Deprecation.cpp?type=cs&q=Deprecation::DeprecationMessage%5C(&l=295).
-3. Instrument your code by:
- * Adding
- `[DeprecateAs](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/WebKit/Source/bindings/IDLExtendedAttributes.md#DeprecateAs_m_a_c)=[your
- enum value here]` to the feature's IDL definition (see [these
- examples](https://cs.chromium.org/search/?q=DeprecateAs+file:%5Esrc/third_party/WebKit/Source/modules/+package:%5Echromium$&type=cs)).
- * Adding a call to
- `[Deprecation::CountDeprecation](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/frame/Deprecation.h?type=cs&l=43)`
- somewhere relevant (as we're dong for the
- [UserMediaRequest](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/mediastream/UserMediaRequest.cpp?type=cs&q=Deprecation::CountDeprecation%5C(document-%3EGetFrame%5C(%5C),&l=422)).
-
-Note that `DeprecateAs` is intended to replace `MeasureAs` in the IDL file.
-Specifying both is redundant. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/developer-faq/index.md b/chromium/docs/website/site/blink/developer-faq/index.md
deleted file mode 100644
index e452d1d4408..00000000000
--- a/chromium/docs/website/site/blink/developer-faq/index.md
+++ /dev/null
@@ -1,318 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: developer-faq
-title: Developer FAQ - Why Blink?
----
-
-[« Back to the Blink project page](http://www.chromium.org/blink)
-
-[TOC]
-
-### Why is Chrome spawning a new browser engine?
-
-There are two main reasons why we’re making this change.
-
- The main reason is that Chromium uses a different multi-process architecture
- from other WebKit-based browsers. So, over the years, supporting multiple
- architectures has led to increasing complexity for both the WebKit and
- Chromium communities, slowing down the collective pace of innovation.
-
- In addition, this gives us an opportunity to do open-ended investigations
- into other performance improvement strategies. We want web applications to
- be as fast as possible. So for example, we want to make as many of the
- browser’s duties as possible run in parallel, so we can keep the main thread
- free for your application code. We’ve already made significant progress
- here--for example by reducing the impact JavaScript and layout have on page
- scrolling, and making it so an increasing number of CSS animations can run
- at 60fps even while JavaScript is doing some heavy-lifting--but this is just
- the start.
-
-We want to do for networking, rendering and layout what V8 did for JavaScript.
-Remember JS engines before V8? We want the same sort of healthy innovation that
-benefits all users of the web, on all browsers.
-
-### What sorts of things should I expect from Chrome?
-
-In the Blink [Architectural
-Changes](http://www.chromium.org/blink#architectural-changes) section we have
-listed a few changes that will improve the speed and stability of the web
-platform in Chrome. Meanwhile, there are more improvements whose feasibility and
-performance benefits we're excited to investigate:
-
-* Deliver a speedier DOM and JS engine
- * Multi-process, security-focused, and faster low-overhead DOM
- bindings to V8
- * JIT DOM attribute getters in V8. That would allow V8 to access
- div.id, div.firstChild, etc without leaving JIT code. Mozilla is
- also meanwhile trying to[ JIT DOM attribute
- getters](https://bugzilla.mozilla.org/show_bug.cgi?id=747285).
- * Implement the DOM in JS. This has the potential to make
- JavaScript DOM access dramatically faster, but will involve a
- very large re-write of WebKit’s DOM implementation. IE is
- already doing this and overall, this helps yield faster GC, and
- faster DOM bindings
- * Support snapshotting in V8. This could allow us to have no
- parse-time overhead and near-instant startup of previously
- loaded pages.
-* Keep the platform secure
- * Better sandboxing of the compositor thread
- * [Out-of-process
- iframes](http://www.chromium.org/developers/design-documents/oop-iframes).
- Use renderer processes [as a security
- boundary](http://www.chromium.org/developers/design-documents/site-isolation)
- between cross-site iframes.
-* Refactor for performance
- * Reduce binding layer overhead. We can make things even faster by
- simplifying the many abstractions in the binding layers that
- have existed to share code between JavaScriptCore and V8 (e.g.
- ScriptState, DOMRequestState, etc).
- * Improve the performance of style resolution.
- * Improve utilization of multiple cores.
-* Enable more powerful rendering and layout
- * Pursue multi-threaded layout
- * Overhaul style recalculation and selector resolution performance
- * Stop creating renderers for hidden iframes
- * Fix old bugs like plugins unloading when they're set to
- display:none.
- * Allow generated content to be selectable and copy-pasteable.
- * Rewrite event handling to be more consistent and have fewer bugs
- with focus, mouse up, clicks, etc.
- * Fire `<iframe>` unload events async to make removeChild faster.
-
-### Is this new browser engine going to fragment the web platform's compatibility more?
-
-We're keenly aware of the compatibility challenges faced by developers today,
-and will be collaborating closely with other browser vendors to move the web
-forward and preserve the interoperability that has made it a successful
-ecosystem. We’ve also put a lot of work over the past few years into reducing
-that pain. Take one of the huge successes of the web standards community: the
-HTML5 Parser. All major browser engines now share the exact same parsing logic,
-which means things like broken markup, &lt;a&gt; tags wrapping block elements,
-and other edge cases are all handled consistently across browsers. This
-interoperability is important to Chrome and we want to defend it.
-
-Our team regularly contributes to sites that document browser support and
-differences like Mozilla's [MDN](https://developer.mozilla.org/en-US/),
-[WebPlatform.org](http://docs.webplatform.org/), and [Can I
-Use](http://caniuse.com/). The last thing we want is for things to go backwards.
-
-We see testing as the critical piece of web browser interoperability. Chrome
-currently shares and runs tests that were authored by Opera, Mozilla, and W3C
-Working Groups and we'll be doing a better job of this going forward. Developers
-need to be able to rely on Chrome’s implementation of standards, and that’s
-something we take very seriously. See the
-[Testing](http://www.chromium.org/blink#testing) section for our plans.
-
-### Hold up, isn't more browsers sharing WebKit better for compatibility?
-
-It's important to remember that WebKit is already not a homogenous target for
-developers. For example, features like WebGL and IndexedDB are only supported in
-some WebKit-based browsers. [Understanding WebKit for
-Developers](http://paulirish.com/2013/webkit-for-developers/) helps explain the
-details, like why `<video>`, fonts and 3D transforms implementations vary across
-WebKit browsers.
-
-Today Firefox uses the Gecko engine, which isn’t based on WebKit, yet the two
-have a high level of compatibility. We’re adopting a similar approach to Mozilla
-by having a distinct yet compatible open-source engine. We will also continue to
-have open bug tracking and [implementation status](http://chromestatus.com/) so
-you can see and contribute to what we’re working on at any time.
-
-From a short-term perspective, monocultures seem good for developer
-productivity. From the long-term perspective, however, monocultures inevitably
-lead to stagnation. It is our firm belief that more options in rendering engines
-will lead to more innovation and a healthier web ecosystem.
-
-### How does this affect web standards?
-
-Bringing a new browser engine into the world increases diversity. Though that in
-itself isn't our goal, it has the beneficial effect of ensuring that multiple
-interoperable implementations of accepted standards exist. Each engine will
-approach the same problem from a different direction, meaning that web
-developers can be more confident in the performance and security characteristics
-of the end result. It also makes it less likely that one implementation's quirks
-become de facto standards, which is good for the open web at large.
-
-### Will we see a `-chrome-` vendor prefix now?
-
-We’ve seen how the proliferation of vendor prefixes has caused pain for
-developers and we don't want to exacerbate this. As of today, Chrome is adopting
-a policy on vendor prefixes, one that is similar to [Mozilla's recently
-announced
-policy](http://lists.w3.org/Archives/Public/public-webapps/2012OctDec/0731.html).
-
-In short: we won't use vendor prefixes for new features. Instead, we’ll expose a
-single setting (in `about:flags`) to enable experimental DOM/CSS features for
-you to see what's coming, play around, and provide feedback, much as we do today
-with [the “Experimental WebKit
-Features”/"](https://plus.google.com/+GoogleChromeDevelopers/posts/ffDPaPAMkMZ)==Enable
-experimental Web Platform features"==[
-flag](https://plus.google.com/+GoogleChromeDevelopers/posts/ffDPaPAMkMZ). Only
-when we're ready to see these features ship to stable will they be enabled by
-default in the dev/canary channels.
-
-For legacy vendor-prefixed features, we will continue to use the `-webkit-`
-prefix because renaming all these prefixes to something else would cause
-developers unnecessary pain. We've [started looking
-into](https://plus.google.com/+GoogleChromeDevelopers/posts/Rh1aMkzucgV) real
-world usage of HTML5 and CSS3 features and hope to use data like this to better
-inform how we can responsibly deprecate prefixed properties and APIs. As for any
-non-standard features that we inherited (like `-webkit-box-reflect`), over time
-we hope to either help standardize or deprecate them on a case-by-case basis.
-
-### So we have an even more fragmented mobile WebKit story?
-
-We really don’t want that; time spent papering over differences is time not
-spent building your apps’ features. We’re focusing our attention on making
-Chrome for Android the best possible mobile browser. So you should expect the
-same compatibility, rapid release schedule and super high JS and DOM performance
-that you get in desktop Chrome.
-
-Your site or app's success on the mobile web is dependent on the mobile browsers
-it runs on. We want to see that entire mobile web platform keeps pace with, and
-even anticipates, the ambitions of your app. Opera is already shipping a beta of
-their Chromium-based browser which has features and capabilities very similar to
-what's in Chrome on Android.
-
-### What's stopping Chrome from shipping proprietary features?
-
-Our goal is to drive innovation and improve the compatible, open web platform,
-not to add a ton of features and break compatibility with other browsers. We're
-introducing strong developer-facing policies on [adding new
-features](http://www.chromium.org/blink#new-features), the [use of vendor
-prefixes](http://www.chromium.org/blink#vendor-prefixes), and [when a feature
-should be considered stable enough to
-ship](http://www.chromium.org/blink#compatibility). This codifies our policy on
-thoughtfully augmenting the platform, and as transparency is a core principle of
-Blink, we hope this process is equally visible to you. The [Chromium Feature
-Dashboard](http://www.chromestatus.com/features) we recently introduced offers a
-view of the standards and implementation status of many of our implemented and
-planned features.
-
-Please feel free to watch the development of Blink via
-[Gitiles](https://chromium.googlesource.com/chromium/blink), follow along on the
-[blink-dev mailing
-list](https://groups.google.com/a/chromium.org/group/blink-dev), and join
-`#blink` on Freenode.
-
-We know that the introduction of a new rendering engine can have significant
-implications for the web. In the coming months we hope to earn the respect of
-the broader open web community by letting our actions speak louder than words.
-
-### Is this just a ruse to land Google-developed technologies?
-
-Nope, not at all! We're instituting [strong guidelines on new
-features](http://www.chromium.org/blink#new-features) that emphasize standards,
-interoperability, and transparency. We expect to hold all new shipping features
-that affect web developers on the open web up to the same level of scrutiny.
-Technologies and standards developed primarily within Google will be held to the
-same guidelines as others.
-
-### What should we expect to see from Chrome and Blink in the next 12 months? What about the long term?
-
-Our main short-term aim is to improve performance, compatibility and stability
-for all the platforms where we ship Chrome. In the long term we hope to
-significantly improve Chrome and inspire innovation among all the browser
-manufacturers. We will be increasing our investment in conformance tests (shared
-with W3C working groups) as part of our commitment to being good citizens of the
-open web.
-
-### Is this going to be open source?
-
-Yes, of course. [Chromium is already open-source](http://www.chromium.org/Home)
-and Blink is part of that project. Transparency is one of our core principles.
-[Developing Blink](http://www.chromium.org/blink#participating) covers this in
-detail.
-
-### Opera recently announced they adopted Chromium for their browsers. What's their plan?
-
-Opera will be adopting Blink, as mentioned by [Bruce Lawson on his
-blog](http://www.brucelawson.co.uk/2013/hello-blink/).
-
-### Why is this is good for me as a web developer?
-
-One of the keys to improving users’ experience is to give developers the tools,
-features, compatibility and performance they need to get the most out of the
-platform. Although the move is borne out of architectural necessity, it also
-allows us to prioritize the features that you need to build the next generation
-of apps, on both mobile and desktop. Similar to the introduction of V8, we hope
-this will spur innovation and you can and should expect the whole web platform
-to benefit.
-
-Our ambitions are high and we continue to need the feedback and contributions
-that have made Chrome the browser it is today. You should also expect improved
-transparency in Blink's development processes, so getting involved will be
-easier than ever. Please, review the [Chromium Feature
-Dashboard](http://www.chromestatus.com/features), experiment with future
-features in Dev/Canary and [file any bugs](http://crbug.com/) you find.
-
-~ FAQ authored by Paul Irish and Paul Lewis on the Chrome Developer Relations
-team
-
-[<img alt="image"
-src="/blink/developer-faq/paulhead.jpg.1365009992996.png">](/blink/developer-faq/paulhead.jpg.1365009992996.png)[<img
-alt="image"
-src="/blink/developer-faq/lewishead.jpg.1365009990294.png">](/blink/developer-faq/lewishead.jpg.1365009990294.png)
-
-# Q&A Video
-
-After the Blink announcement, the developer community submitted hundreds of
-questions and votes on Google Moderator ([goo.gl/Uu0qV](http://goo.gl/Uu0qV))
-that sought answers to your tough questions about Blink.
-
-Engineering leads Darin Fisher and Eric Seidel are joined by PM Alex Komoroske
-and Developer Advocate Paul Irish
-
-Below are the top-voted questions, along with timecodes you can click (will open
-in a new window):
-[1:12](http://www.youtube.com/watch?v=TlJob8K_OwE#t=1m12s) What will be the
-relationship between the WebKit and Blink codebases going forward?
-[2:42](http://www.youtube.com/watch?v=TlJob8K_OwE#t=2m42s) When will Blink ship
-on the Chrome channels Canary/Beta/Stable?
-[3:25](http://www.youtube.com/watch?v=TlJob8K_OwE#t=3m25s) How does the plan for
-transitioning the WebKit integrated in Android to Blink look like?
-[4:59](http://www.youtube.com/watch?v=TlJob8K_OwE#t=4m59s) Can you elaborate on
-the idea of moving the DOM into JavaScript?
-[6:40](http://www.youtube.com/watch?v=TlJob8K_OwE#t=6m40s) Can you elaborate on
-the idea of "removing obscure parts of the DOM and make backwards incompatible
-changesthat benefit performance or remove complexity"?
-[8:35](http://www.youtube.com/watch?v=TlJob8K_OwE#t=8m35s) How will Blink
-responsibly deprecate prefixed CSS properties?
-[9:30](http://www.youtube.com/watch?v=TlJob8K_OwE#t=9m30s) What will prevent the
-same collaborative development difficulties that have hampered Webkit emerging
-in Blink, as it gains more contributors and is ported to more platforms?
-[12:35](http://www.youtube.com/watch?v=TlJob8K_OwE#t=12m35s) Will changes to
-Blink be contributed back to the WebKit project?
-[13:34](http://www.youtube.com/watch?v=TlJob8K_OwE#t=13m34s) Google said
-problems living with the WebKit2 multi-process model was a prime reason to
-create Blink, but Apple engineers say they asked to integrate Chromium's
-multi-process into WebKit prior to creating WebKit2, and were refused. What
-gives?
-[16:46](http://www.youtube.com/watch?v=TlJob8K_OwE#t=16m46s) Is the plan to
-shift Android's &lt;webview&gt; implementation over to Blink as well?
-[17:26](http://www.youtube.com/watch?v=TlJob8K_OwE#t=17m26s) Will blink be able
-to support multiple scripting languages? E.g. Dart.
-[19:34](http://www.youtube.com/watch?v=TlJob8K_OwE#t=19m34s) How will affect
-other browsers that have adopted WebKit?
-[20:44](http://www.youtube.com/watch?v=TlJob8K_OwE#t=20m44s) Does this means
-Google stops contributions to WebKit?
-[21:31](http://www.youtube.com/watch?v=TlJob8K_OwE#t=21m31s) What Open Source
-license will Blink have? Will it continue to support the H.264 video codec?
-[22:11](http://www.youtube.com/watch?v=TlJob8K_OwE#t=22m11s) Any user-agent
-string changes?
-[23:38](http://www.youtube.com/watch?v=TlJob8K_OwE#t=23m38s) When we'll be able
-to test first versions of Blink in Chromium?
-[24:15](http://www.youtube.com/watch?v=TlJob8K_OwE#t=24m15s) How can developers
-follow Blink's development?
-[25:40](http://www.youtube.com/watch?v=TlJob8K_OwE#t=25m40s) What is
-[chromestatus.com](http://chromestatus.com/) about?
-[26:40](http://www.youtube.com/watch?v=TlJob8K_OwE#t=26m40s) How will this
-impact Dart language's progress?
-[27:13](http://www.youtube.com/watch?v=TlJob8K_OwE#t=27m13s) Will this be a
-direct competitor against Mozilla's new engine?
-[29:03](http://www.youtube.com/watch?v=TlJob8K_OwE#t=29m03s) When will all
-existing vendor prefixes in Blink be phased out?
-[30:20](http://www.youtube.com/watch?v=TlJob8K_OwE#t=30m20s) Will you support
--blink-text-decoration: blink? ;) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/developer-faq/lewishead.jpg.1365009990294.png.sha1 b/chromium/docs/website/site/blink/developer-faq/lewishead.jpg.1365009990294.png.sha1
deleted file mode 100644
index 33db8a86ca3..00000000000
--- a/chromium/docs/website/site/blink/developer-faq/lewishead.jpg.1365009990294.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-666d6ff57f982560e223f88679a92af3a8add1e6 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/developer-faq/paulhead.jpg.1365009992996.png.sha1 b/chromium/docs/website/site/blink/developer-faq/paulhead.jpg.1365009992996.png.sha1
deleted file mode 100644
index 59f13937a19..00000000000
--- a/chromium/docs/website/site/blink/developer-faq/paulhead.jpg.1365009992996.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-63185d7d28f9ea5167ba48ff67cb106ea6d8ae36 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/directory-dependency-in-blink/before.png.sha1 b/chromium/docs/website/site/blink/directory-dependency-in-blink/before.png.sha1
deleted file mode 100644
index e000008f819..00000000000
--- a/chromium/docs/website/site/blink/directory-dependency-in-blink/before.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1b760df62cdf3f99711ecb2edb7218789fe0acd3 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/directory-dependency-in-blink/before_merge_resized.png.sha1 b/chromium/docs/website/site/blink/directory-dependency-in-blink/before_merge_resized.png.sha1
deleted file mode 100644
index c722d1c0f0d..00000000000
--- a/chromium/docs/website/site/blink/directory-dependency-in-blink/before_merge_resized.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7e5ca31542d6d7c86e7188765ef8c9ad72704119 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/directory-dependency-in-blink/index.md b/chromium/docs/website/site/blink/directory-dependency-in-blink/index.md
deleted file mode 100644
index 07a1277d513..00000000000
--- a/chromium/docs/website/site/blink/directory-dependency-in-blink/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: directory-dependency-in-blink
-title: Directory dependency in Blink (Still DRAFT)
----
-
-## NOTE: This plan is not decided yet and is still a work in progress.
-
-## Overview
-
-In 2015 Sep, we merged the Blink repository into the Chromium repository. The
-repository merge enabled us to add dependencies from Blink to Chromium and
-opened a door for significantly simplifying abstraction layers that had been
-needed to connect Blink with Chromium. However, adding random dependencies from
-Blink to Chromium will break layering and just mess up the code base. We need a
-guideline about it.
-
-Before the repository merge, Blink had the following dependency. Public APIs
-were the only way to connect Blink with Chromium's content layer.
-
-[<img alt="image"
-src="/blink/directory-dependency-in-blink/before_merge_resized.png">](/blink/directory-dependency-in-blink/before_merge_resized.png)
-
-After the repository merge, we're planning to introduce direct dependencies from
-Blink to Chromium (e.g., wtf/ =&gt; base/) to simplify the interactions. To
-introduce a new dependency, you need to follow the following guideline.
-
-## Guideline
-
-1. Send an email to blink-dev@ to propose the dependency. The email
- needs to explain the advantages of introducing the dependency.
-2. Get a consensus on blink-dev@. If people can't get agreement in the
- discussion, public/OWNERS should give advice.
-3. Add the dependency to the following "Allowed dependencies from Blink
- =&gt; Chromium" section.
-
-We do want to avoid introducing random dependencies and breaking layering.
-Unless introducing the dependency is going to have a large benefit (e.g., remove
-a lot of abstraction classes, remove a lot of code duplication etc), you should
-instead consider just using public APIs. After the repository merge, it is
-pretty easy to add/remove/modify public APIs because you no longer need
-three-sided patches. In particular, remember that:
-
-* Blink and Chromium have different assumptions and priorities on
- performance, memory and code health. So we may not want to share
- implementations too much. For example, we may want to keep standard
- libraries in wtf/ such as Vectors and Strings until we’re pretty
- sure that it is really a win to replace them with base/
- alternatives.
-* This kind of refactoring requires a substantial amount of
- engineering resources. We should keep in mind the opportunity cost.
-
-## Allowed dependencies from Blink =&gt; Chromium
-
-(Once the intent-to-implement is approved, please add the dependency to the
-following list. You can also add a link to a discussion log in blink-dev@,
-design documents etc.)
-
-* ...
-* ...
-* ...
-
-## Discussions
-
-If you want to know more background about the dependency design, see the
-following discussions.
-
-* [Removing the WTF namespace
- (blink-dev@)](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/B29AVrZy1Z4/discussion)
-* [Proposal for the future dependency model in Blink
- (blink-dev@)](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/e4y_6y0Nlp8/discussion)
-* [Proposal for a future Blink architecture (design document that
- summarized people's thoughts as of 2015
- May)](https://docs.google.com/document/d/1gwQ1qn3Qx1U_xm9BbwIsJz0GP_05KUXVHhk3PxeNuSw/edit#) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/dom-exceptions/index.md b/chromium/docs/website/site/blink/dom-exceptions/index.md
deleted file mode 100644
index 47319d71e22..00000000000
--- a/chromium/docs/website/site/blink/dom-exceptions/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: dom-exceptions
-title: DOM Exceptions
----
-
-**Useful error messages with ExceptionMessages**
-
-When throwing a DOM exception, please ensure that you take the time to write an
-error message that helps developers understand what's gone wrong, and what they
-can do to fix things. Something like
-exceptionState.throwDOMException(InvalidStateError, "This object's 'readyState'
-is not 'open'.") can make the difference between a 5 minute fix, and an all-day
-facepalming session. The
-[ExceptionMessages](http://cs.chromium.org/ExceptionMessages.h) helper class has
-a variety of methods that help you construct a more detailed and specific
-message in a consistent way. Perhaps:
-
-es.throwDOMException(TypeMismatchError,
-ExceptionMessages::argumentNullOrIncorrectType(1, "Node"));
-
-That will give the user an exception object whose message property reads "Failed
-to execute "method" on "Interface": The 1st argument is null, or an invalid Node
-object.", which has been scientifically measured to be 83 times more useful than
-an exception lacking that detail. In general, developers will be much happier if
-we give them enough data to resolve an issue right away, so please don't be
-afraid of adding detail.
-
-Just add #include "bindings/v8/ExceptionMessages.h" and go wild.
-
-**Security considerations**
-
-Exception messages are exposed to the web via JavaScript. Please be very careful
-when throwing exceptions that might expose interesting data cross-origin. In
-particular, SecurityError messages are prone to this sort of accidental leakage.
-
-1. Always throw SecurityError exceptions via
- [ExceptionState::throwSecurityError](http://cs.chromium.org/ExceptionState::throwSecurityError).
-2. Ensure that the sanitizedMessage (first parameter) can safely be
- exposed to JavaScript.
-3. Add additional detail via an unsanitizedMessage (second parameter)
- if relevant.
-
-Practical examples of this include
-DOMWindow::sanitizedCrossDomainAccessErrorMessage and
-DOMWindow::crossDomainAccessErrorMessage. We call both of these methods from
-inside
-[V8Initializer::failedAccessCheckCallbackInMainThread](http://cs.chromium.org/V8Initializer%20failedAccessCheckCallbackInMainThread)
-to ensure that JavaScript can't access details about cross-origin frames, but
-that those details appear in the console if the exceptions aren't caught. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/getting-started-with-blink-debugging/index.md b/chromium/docs/website/site/blink/getting-started-with-blink-debugging/index.md
deleted file mode 100644
index ffb332fd0a1..00000000000
--- a/chromium/docs/website/site/blink/getting-started-with-blink-debugging/index.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: getting-started-with-blink-debugging
-title: Getting Started with Blink Debugging
----
-
-[TOC]
-
-### Introduction
-
-While many of the tools and tips on this page can be used for it, this page
-focuses on debugging Blink outside the context of the web tests. For more web
-test specific instructions, see [this
-page](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_tests.md).
-For more general Chromium debugging info, see the respective pages for debugging
-on [Windows](/developers/how-tos/debugging-on-windows),
-[Mac](/developers/how-tos/debugging-on-os-x), and
-[Linux](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_debugging.md).
-
-### Linux
-
-#### Getting Started
-
-There are two main ways to get into blink: via debugging the chromium binary
-itself or `content_shell`. For most purposes of exclusive Blink debugging, the
-latter is the recommended option because it drastically reduces size and
-complexity. This means building `content_shell`, which should be as simple as
-making it the build target for your build method of choice. This should stick a
-`content_shell` binary in your `out/Default` directory.
-
-`content_shell` itself takes as an argument the HTML file you wish to run Blink
-on. Furthermore, one of the simplest types of debugging you might want to do is
-to see the basic page structure after a page load (this internal structure in
-Blink is called the Layout Tree, not to be confused with the DOM Tree or the
-Line Box Tree). You can do this with a simple command line option of
-`--run-web-tests`. Thus, one of your simplest debugging tools, seeing the page
-structure after a page load, might look something like:
-
-```none
-content_shell --run-web-tests test.html
-```
-
-#### Starting the Debugger
-
-Debugging on Linux is generally done with GDB, so we will assume that's what you
-are using here. Not surprisingly, you will almost always want to compile Blink
-in debug mode to get all the symbols and tools you will need.
-
-You will also want to use the `gdbinit` script to help gdb find source code,
-pretty-print common types, and other such niceties that will avoid you staring
-at assembly code. See
-[`docs/gdbinit.md`](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gdbinit.md)
-for more details.
-
-**Important: Previous revisions of this document suggested running with the
-`--single-process `when debugging. That flag is no longer supported; it may
-work, it may fail outright, and it may appear to work yet manifest subtle
-differences in behavior that will cause you to waste many hours in understanding
-them.**
-
-You may need to modify your system's ptrace security policy before you can debug
-the renderer
-([details](http://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process));
-run this command:
-
-```none
-echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
-```
-
-Both `content_shell` and `chromium` spawn renderer sub-processes; to debug
-blink, you need to attach a debugger to one of those sub-processes. The simplest
-way to do this is with the `--no-sandbox` and `--renderer-startup-dialog`
-parameters:
-
-```none
-out/Default/content_shell --no-sandbox --renderer-startup-dialog test.html
-```
-
-When you do this, `content_shell` will print a message like this:
-
-```none
-[10506:10506:0904/174115:2537132352130:ERROR:child_process.cc(131)] Renderer (10506) paused waiting for debugger to attach. Send SIGUSR1 to unpause.
-```
-
-This tells you that the pid of the renderer process is 10506. You can now attach
-to it:
-
-```none
-gdb -p 10506
-```
-
-When gdb loads up, set whatever breakpoints you want in the blink code and
-'continue'; for example:
-
-```none
-(gdb) b blink::LayoutView::layout
-(gdb) c
-```
-
-Then, send SIGUSR1 to the renderer process to tell it to proceed:
-
-```none
-(gdb) signal SIGUSR1
-```
-
-If you are running web test, `third_party/blink/tools/debug_web_tests` does
-almost everything except for SIGUSR1 automatically.
-
-If you see 'Could not find DWO CU' errors, you may need to have a symlink to the
-build directory from the current working directory.
-
-```none
-% cd third_party/blink
-% ln -s ../../out/Default/obj .
-% ./tools/debug_web_tests --target=Default
-```
-
-### General Useful Debugging Tools
-
-#### Debugging functions
-
-There are some key functions built into objects once you've reach a breakpoint
-inside Blink. For the examples here, we'll assume you're using GDB on Linux.
-These can be incredibly useful for showing the trees midway during execution to
-try and identify points when things change. You can use the GDB command print to
-display them. Here are some of Blink's debugging functions:
-
-<table>
-<tr>
-<td> Function</td>
-<td>Objects it's available on </td>
-<td>Description</td>
-</tr>
-<tr>
-<td> ShowTreeForThis()</td>
-<td>`Node`s and LayoutObjects</td>
-<td>Outputs the DOM tree, marking this with a \*</td>
-</tr>
-<tr>
-<td> ShowLayoutTreeForThis()</td>
-<td>LayoutObjects</td>
-<td>Outputs the Layout tree, marking this with a \*</td>
-</tr>
-<tr>
-<td> ShowLineTreeForThis()</td>
-<td>LayoutObjects and InlineBoxes</td>
-<td>Outputs the Inline Box tree for the associated block flow, marking all matching inline boxes associated with this with a \*</td>
-</tr>
-<tr>
-<td> ShowDebugData()</td>
-<td>DisplayItemLists</td>
-<td>Outputs the list of display items and associated debug data</td>
-</tr>
-</table>
-
-Assuming a local variable `child` in scope that's a `LayoutObject`, the
-following will print the Layout Tree:
-
-```none
-(gdb) print child->showLayerTreeForThis()
-```
-
-`#### Blink GDB python library`
-
-`When using a GDB build that supports python, there's a library of useful Blink
-functions and pretty printers that can make working with some of Blink's types
-easier and more convenient, such as pretty printers for LayoutUnit and
-LayoutSize classes. You can find it at third_party/blink/tools/gdb/blink.py; see
-[LinuxDebugging](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/debugging.md)
-for instructions.`
-
-### Printing back trace
-
-#### Use Chromium's StackTrace
-
-```none
-#include "base/debug/stack_trace.h"
-...
-base::debug::StackTrace().Print();
-// or
-LOG(ERROR) << base::debug::StackTrace();
-```
-
-and run Chrome with `--no-sandbox` command line option.
-
-### Debugging Printing related issues
-
-It is difficult to understand whether an issue lies in the Print Preview logic
-or the Rendering logic. This
-[document](https://docs.google.com/document/d/1aK27hiUPEm75OD4Dw2yQ9CmNDkLjL7_ZzglLdHW6UzQ/edit?usp=sharing)
-uses some of the tools available to us to help solve this issue. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/api-owners/index.md b/chromium/docs/website/site/blink/guidelines/api-owners/index.md
deleted file mode 100644
index 9ca1c2287cb..00000000000
--- a/chromium/docs/website/site/blink/guidelines/api-owners/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-page_name: api-owners
-title: Blink API owners
----
-
-Summary
-
-The Blink API owners oversee, enforce and evolve the [Blink Intent
-process](/blink/launching-features). Their most public role is to approve
-experimentation and shipping of new or changed
-[web-exposed](/blink/guidelines/web-exposed)
-[APIs](https://chromestatus.com/features) to Chromium-based browsers.
-
-You can find a list of the current API owners
-[here](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/API_OWNERS).
-
-## What is the Blink Intent process?
-
-The [Blink Intent process](/blink/launching-features) - proceeding from
-Prototype to Ship - is how web-exposed features ship in Chromium.
-
-## What are the Blink API owners?
-
-The Blink API owners are the stewards of the [core values of
-Blink](/blink/guidelines/values) and those [values in
-practice](/blink/guidelines/web-platform-changes-guidelines). They achieve this
-by enforcing proper use of the Intent process, which is designed to protect and
-enhance those values.
-
-The Blink Intent process itself is also overseen and evolved by the Blink API
-owners.
-
-## What do the Blink API owners actually do?
-
-It can be summarized as:
-
-* LGTMs from at least three Blink API owners are necessary to ship or
- change a web platform feature in Chromium
-* One LGTM is necessary to start an experiment or a deprecation period
-* The primary task of Blink API owners is to decide whether to give
- those LGTMs
-
-They also give reasons, if needed, why the LGTM was provided or not provided.
-The reasons are needed in cases where it may not otherwise be clear why the
-decision was made. LGTMs are provided via email to
-[blink-dev@chromium.org](https://groups.google.com/a/chromium.org/g/blink-dev).
-Public discussion about issues of interest to the API owners occurs on
-[blink-api-owners-discuss@chromium.org](https://groups.google.com/a/chromium.org/g/blink-api-owners-discuss).
-Weekly meetings process the [backlog of intents needing
-decisions](https://docs.google.com/spreadsheets/d/1pvXEMD5pRioognaqEzglS-4ZBSQ_YmzL8Fiz7yt4Bb4/edit#gid=0&fvid=1112765777).
-Any significant changes to the Intent process also need the approval of the API
-owners.
-
-In practice, the Blink API owners may also help developers through tricky parts
-of the Intent process.
-
-## How do the Blink API owners arrive at their decisions?
-
-The Blink API owners review the Intent process was faithfully followed, and most
-importantly that nothing about experimenting with or shipping these features is
-in conflict with any of the core values of Blink.
-
-The API owners will ask any questions about the evidence provided on the
-blink-dev thread for the Intent, so that everyone can see those questions.
-
-More details
-
-[Procedures governing the API owners](/blink/guidelines/api-owners/procedures)
-
-[Requirements for becoming an API
-owner](/blink/guidelines/api-owners/requirements) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/api-owners/procedures/index.md b/chromium/docs/website/site/blink/guidelines/api-owners/procedures/index.md
deleted file mode 100644
index 2b5f20c76f6..00000000000
--- a/chromium/docs/website/site/blink/guidelines/api-owners/procedures/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-- - /blink/guidelines/api-owners
- - Blink API owners
-page_name: procedures
-title: Blink API owner procedures
----
-
-[Last updated via unanimous approval: August 3,
-2021](https://groups.google.com/a/chromium.org/g/blink-api-owners-discuss/c/zeyQuh6Wk5E)
-
-## LGTM Requirements
-
-* Shipping a change to add, change or remove any substantial aspect of a web-exposed API requires 3 LGTMs.
-
-* Starting or extending an Origin Trial requires 1 LGTM.
-
-* Any non-standard Origin Trial require 3 LGTMs.
-
-* Intents to Prototype do not require any LGTMs.
-
-## Adding and removing API owners
-
-An API owner may be added after 3 LGTMs, plus evidence of the new API owner
-meeting the [requirements](/blink/guidelines/api-owners/requirements).
-
-API owners may be removed if they are persistently failing to meet the
-requirements as well as to review a reasonable number of the incoming intents.
-They may be removed after a vote by an absolute majority of other API owners,
-after at least 8 weeks notice (\*) to the API owner to be removed plus
-[blink-api-owners-discuss@chromium.org](mailto:blink-api-owners-discuss@chromium.org),
-and no formal objection from the API owner to be removed. A formal objection
-triggers the majority vote mechanism.
-
-(\*) The 8 week period starts from the point at which the notified API owner can
-be reasonably expected to have received the message, and is not on a leave,
-vacation etc.
-
-API owners may resign at any time, via email to
-[blink-api-owners-discuss@chromium.org](mailto:blink-api-owners-discuss@chromium.org).
-
-## Formal objection
-
-An API owner may formally object to any decision, through written communication
-to
-[blink-api-owners-discuss@chromium.org](mailto:blink-api-owners-discuss@chromium.org).
-This triggers the majority vote mechanism.
-
-## Majority vote
-
-Any API owners decisions that cannot get the required LGTMs will be decided
-through a majority vote.
-
-Note: API owners are expected to work via consensus, and try hard not to cause
-this situation. For reference: it has never, to date, been needed.
-
-A “majority vote” consists of a formal vote among the API owners, at a
-videoconference or in-person meeting attended by a majority of the API owners,
-and announced to all API owners at least a week in advance, with option for
-absentee votes. The result of this vote decides the issue.
-
-If a vote occurs, the documented final vote (including who voted which way), and
-description of the objection raised, must be published publicly on
-blink-dev@chromium.org.
-
-## What “LGTMs” means
-
-An LGTM is recorded via email to
-[blink-dev@chromium.org](https://groups.google.com/a/chromium.org/g/blink-dev).
-
-**1 LGTM means:** An API owner LGTMed the proposal and no API owner formally objected.
-
-**3 LGTMs mean:** 3 API owners LGTMed the proposal and no API owner formally objected. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/api-owners/requirements/index.md b/chromium/docs/website/site/blink/guidelines/api-owners/requirements/index.md
deleted file mode 100644
index 8f2e55ffeac..00000000000
--- a/chromium/docs/website/site/blink/guidelines/api-owners/requirements/index.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-- - /blink/guidelines/api-owners
- - Blink API owners
-page_name: requirements
-title: Blink API owner requirements
----
-
-## Requirements for API owners
-
-* Chromium contributor in good standing, with a commitment to [Blink’s
- mission](/blink), [core values](/blink/guidelines/values), and
- [values in
- practice](/blink/guidelines/web-platform-changes-guidelines)
-* The person's organizational affiliations must be compatible with API
- owners service as regards [CLA
- status](/developers/contributing-code/external-contributor-checklist)
-* Commitment of 1-2 hours per week to review intents, in addition to
- the API owners meetings
-* Demonstrated understanding of the Blink Launch Process \[Evidence:
- Shipped APIs following this process\]
- * Internalized the principles and emulated them. \[Evidence: links
- to their own Intents with discussion threads highlighting how
- things like interop, compat were tackled\]
-* Demonstrated knowledge and ability to review Web Platform features.
- \[Evidence example: Input/guidance on 10+ blink intent threads over
- the past 6 months\]
-
-### Optional, but desirable qualifications
-
-* Mentored other teams through the API process. \[Evidence: Mentorship
- feedback/notes, links to threads they chimed in on, that were not
- their own intents\]
-* Contributed to improving the API process. \[Evidence: Process
- improvement proposals, process documentation\]
-* Experience navigating disagreements/contention. \[Evidence: Examples
- of such discussions on any public forums, not necessarily Blink
- intents\]
-
-Becoming an API Owner
-
-* Candidates that meet the qualifications can be nominated by a
- current API owners to the rest of the API owners group.
-* A candidate may also self-nominate via communication to
- blink-api-owners@chromium.org (a mailing list with only the API
- owners subscribed to it), or to one or more of the API owners.
-* The nomination should include an explanation as to why the candidate
- meets the criteria above, including links to evidence to that
- effect.
-* A nominee will be appointed to be an API owners once the nomination
- gets 3 LGTMs and no objections.
-* Once the nomination is approved, an email will be sent to the
- blink-dev mailing list announcing it. If it is rejected, a private
- email with explanation will be sent to the nominee.
-* Consideration of nominations will happen in a timely manner. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/blink-api-owners-requirements/index.md b/chromium/docs/website/site/blink/guidelines/blink-api-owners-requirements/index.md
deleted file mode 100644
index e2b2c8ba83c..00000000000
--- a/chromium/docs/website/site/blink/guidelines/blink-api-owners-requirements/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-page_name: blink-api-owners-requirements
-title: Blink API OWNERS Requirements
----
-
-## Requirements for API owners
-
-### <table>
-### <tr>
-
- ### <td>Chromium contributor in good standing, with a commitment to <a
- href="/blink">Blink’s mission</a>: To improve the open web through technical
- innovation and good citizenship</td>
-
-* ### <td>The person's organizational affiliations must be compatible
- with API owners service as regards <a
- href="/developers/contributing-code/external-contributor-checklist">CLA
- status</a></td>
-
- ### <td>Commitment of 1-2 hours per week to review intents, in addition to
- the API owners meetings</td>
-
- ### <td>Demonstrated understanding of the Blink Launch Process \[Evidence:
- Shipped APIs following this process\]</td>
-
- ### <td>Internalized the principles and emulated them. \[Evidence: links
- to their own Intents with discussion threads highlighting how things
- like interop, compat were tackled\]</td>
-
- ### <td>Demonstrated knowledge and ability to review Web Platform features.
- \[Evidence example: Input/guidance on 10+ blink intent threads over the past
- 6 months\]</td>
-
-### </tr>
-### </table>
-
-### Optional, but desirable qualifications
-
-### <table>
-### <tr>
-
- ### <td>Mentored other teams through the API process. \[Evidence: Mentorship
- feedback/notes, links to threads they chimed in on, that were not their own
- intents\]</td>
-
- ### <td>Contributed to improving the API process. \[Evidence: Process
- improvement proposals, process documentation\]</td>
-
- ### <td>Experience navigating disagreements/contention. \[Evidence: Examples
- of such discussions on any public forums, not necessarily Blink
- intents\]</td>
-
-### <td>Becoming an API Owner</td>
-
-* ### <td>Candidates that meet the qualifications can be nominated by
- a current API owners to the rest of the API owners group.</td>
-* ### <td>A candidate may also self-nominate via communication to
- blink-api-owners@chromium.org (a mailing list with only the API
- owners subscribed to it), or to one or more of the API owners.</td>
-* ### <td>The nomination should include an explanation as to why the
- candidate meets the criteria above, including links to evidence to
- that effect.</td>
-* ### <td>A nominee will be appointed to be an API owners once the
- nomination gets 3 LGTMs and no objections.</td>
-* ### <td>Once the nomination is approved, an email will be sent to
- the blink-dev mailing list announcing it. If it is rejected, a
- private email with explanation will be sent to the nominee.</td>
-* ### <td>Consideration of nominations will happen in a timely
- manner.</td>
-
-### </tr>
-### </table> \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/index.md b/chromium/docs/website/site/blink/guidelines/index.md
deleted file mode 100644
index c95e99c769f..00000000000
--- a/chromium/docs/website/site/blink/guidelines/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: guidelines
-title: Guidelines and Policies
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/blink/guidelines/values/index.md b/chromium/docs/website/site/blink/guidelines/values/index.md
deleted file mode 100644
index dd8abca6065..00000000000
--- a/chromium/docs/website/site/blink/guidelines/values/index.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-page_name: values
-title: Core Values of Blink
----
-
-*See also: [Blink Values in
-Practice](/blink/guidelines/web-platform-changes-guidelines)*
-
-The core values of Blink, from which all of our actions and prioritize should
-derive, are:
-
-#### Promoting a useful and thriving web
-
-We take action to improve the web over time to be more useful to users. This
-primarily takes the form of shipping new features that web developers leverage.
-
-#### Being a good user agent
-
-The actions we take respect the [priority of
-constituencies](https://w3ctag.github.io/design-principles/#priority-of-constituencies):
-users first, over web developers, over browser developers, over specification
-authors, over theoretical purity.
-
-#### Safeguarding the openness of the web
-
-We take action to maintain and strengthen the openness of the web platform,
-which we define as:
-
-* Non-proprietary
-* Based on an open, consensus-seeking standards process
-* Inclusive and diverse \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/web-exposed/index.md b/chromium/docs/website/site/blink/guidelines/web-exposed/index.md
deleted file mode 100644
index 83d5669ec56..00000000000
--- a/chromium/docs/website/site/blink/guidelines/web-exposed/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-page_name: web-exposed
-title: Definition of a web-exposed change to Chromium
----
-
-Web-exposed is defined as **affecting web API behavior to the point that
-developers using that API need to be aware of it**.
-
-Changes that are web-exposed:
-
-* Any change that adds a new API, or in general modifies any IDL file
- to change what APIs developers see.
-* Removal of some or all of an API.
-
-Cases that are usually not web-exposed:
-
-* Fixing a bug in the implementation to conform better with a defined
- specification.
-
-Cases that might or might not be web-exposed:
-
-* Fixing a broken implementation in a way that may break significant
- numbers of sites. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/web-platform-changes-guidelines/index.md b/chromium/docs/website/site/blink/guidelines/web-platform-changes-guidelines/index.md
deleted file mode 100644
index a595f5fbb9f..00000000000
--- a/chromium/docs/website/site/blink/guidelines/web-platform-changes-guidelines/index.md
+++ /dev/null
@@ -1,321 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-page_name: web-platform-changes-guidelines
-title: Blink Values in Practice
----
-
-## Introduction
-
-The Blink project's [core values](/blink/guidelines/values) are to promote a
-useful and thriving web, while being a good user agent and safeguarding the
-openness of the web. We do this by shipping features that bring user benefit.
-
-Unlike many other platforms, the web has multiple implementations. The Blink
-project's primary lever for improving the experience of web users is by
-improving Chromium, and thus shipping (or unshipping) features to our users
-directly. But we strive to do so in a way that also helps other implementations.
-This increases the interoperable surface area of the web, which improves the
-experience of those users we do not directly serve, and helps safeguard the
-web's open nature.
-
-The Chromium project has been blessed with a large ecosystem of active
-contributors. As such, we can take on the responsibility of proving out features
-in our engine first, trialing them with users of Blink-based browsers ahead of
-general deployment across all engines and to more web users. While we do so, it
-is imperative that we deliver the feature in a way that invites broad feedback,
-and makes it easy for other engines to implement if they decide the proposal is
-valuable for their users.
-
-This document outlines how the Blink project thinks about moving the web
-forward, and the reasoning behind the various processes and requirements we
-place on members of the Chromium community as part of the [launch
-process](/blink/launching-features) that puts our values into practice.
-
-## Finding balance
-
-For all browser developers, there is an inherent tension between moving the web
-forward and preserving interoperability and compatibility. On the one hand, the
-web platform API surface must evolve to stay relevant. On the other hand, the
-web's primary strength is its reach, which is largely a function of
-interoperability. And by definition, when any browser ships a new feature, the
-API change is not yet interoperable. So we need to balance some key risks while
-we improve the web platform.
-
-Interoperability risk is the risk that browsers will not eventually converge on
-an interoperable implementation of the proposed feature. Interoperability cannot
-be determined only at a given point in time; since browsers ship features at
-different times, there is always a degree of non-interoperability on the web.
-Instead, we are concerned with long-term interoperability risk, which we
-forecast by observing the public behaviors of others in the web ecosystem, and
-we work to minimize via the launch artifacts discussed below. See the [Blink
-principles of
-interoperability](https://docs.google.com/document/d/1romO1kHzpcwTwPsCzrkNWlh0bBXBwHfUsCt98-CNzkY/edit)
-for a more in-depth discussion.
-
-Compatibility risk is the likelihood that a change will break existing web
-content loaded in Chromium. Compatibility risk is especially common with API
-removal, but it is also a factor when adding new features: before shipping, we
-need to be as sure as we reasonably can that the feature will not change or
-evolve in backward-incompatible ways in the future, as such incompatible changes
-cause direct harm to our users. Additionally, there can be cases where even new
-features interact with old ones to cause [strange compatibility
-issues](https://groups.google.com/a/chromium.org/g/blink-dev/c/BytHPljnifk/m/PiKCn3Ix6IIJ).
-See the [Blink principles of web
-compatibility](https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit)
-and [Web compat analysis tools](/blink/platform-predictability/compat-tools) for
-more on this subject.
-
-In an ideal world, all changes would both dramatically move the web forward, and
-involve zero interoperability and compatibility risk. In practice, this is
-rarely the case, and a tradeoff needs to be made:
-
-* If a change has low interop/compat risk and significantly moves the web
- forward, Chromium welcomes it. (Example: [shipping CSS
- Grid](https://groups.google.com/a/chromium.org/g/blink-dev/c/hBx1ffTS9CQ/m/TMTigaDIAgAJ).)
-
-* If a change has low interop/compat risk but isn't expected to significantly
- move the web forward, Chromium usually still welcomes it. (Example: [moving
- prefixed event handler properties
- around](https://groups.google.com/a/chromium.org/g/blink-dev/c/4Fidt4JqkTk).)
- Occasionally, Chromium will reject changes in this bucket to avoid technical
- complexity (e.g., removing our implementation of [KV
- Storage](https://www.chromestatus.com/features/6428344899862528)).
-
-* If a change has high interop/compat risk and isn't expected to significantly
- move the web forward, Chromium will usually not welcome it. (Example: [not
- shipping canvas
- supportsContext](https://groups.google.com/a/chromium.org/g/blink-dev/c/n1LP6cE2or4).)
-
-* If a change has high interop/compat risk but is expected to significantly
- move the web forward, Chromium will sometimes welcome it after a careful,
- publicly-considered explanation, accompanied by the artifacts discussed
- below. (Example: [shipping
- WebUSB](https://groups.google.com/a/chromium.org/g/blink-dev/c/KuXx_k2KIis).)
-
-## The role of the API OWNERS
-
-To find this balance and resolve the above tradeoffs on a per-change basis,
-Chromium delegates to a trusted group, the [Blink API
-OWNERS](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/API_OWNERS),
-to decide what web platform features are delivered to our users. Concretely,
-they are the final approvers in the [Blink process](/blink/launching-features),
-where Chromium contributors present a series of artifacts as part of their
-Intent to Prototype/Experiment/Ship.
-
-These artifacts are a key part of the process, and much of the rest of this
-document is spent detailing them and why we think they are important enough to
-make them requirements before shipping a feature. Because of the amount of
-resources committed to driving the web forward through Chromium, we accept that
-the bar should be higher for us—we can't expect, time and again, that the burden
-of designing new features will be split equally with others. So, we need to do
-as much as we can to set up and encourage others to participate.
-
-We have not always done this perfectly in the past, and to be honest, it’s
-unlikely we’ll always do it perfectly in the future. But we commit to trying to
-work well with others—even when we are implementing features ahead of others.
-
-## Launch artifacts that Chromium values
-
-### Explainers
-
-[Explainers](https://tag.w3.org/explainers) are a proposal's first contact
-with the world. Well-written and comprehensive explainers help other interested
-parties judge the value of a feature, by presenting the use cases, the research,
-and the tradeoffs involved in the design space. Notably, an explainer needs to
-assume minimal previous domain knowledge in order to serve these goals well.
-
-In particular, an explainer should present a living record of:
-
-* What problem we are solving.
-
-* Why we think that problem is important to solve.
-
-* What the impact of solving the problem would be.
-
-* Over time, the explainer will develop a specific solution proposal, with
- supporting arguments for why that proposal is the best among alternatives.
-
-* Detailed discussion of any concerns raised by other implementers or by
- wide-review groups, summing up any open questions or conclusions reached.
- (This often ends up in the "FAQ" or "Alternatives considered" sections, or
- in other natural locations like the "Security and privacy considerations".)
-
-Explainers should be documents that other implementers can easily read or skim
-to figure out whether they think a feature is worth investing in. If these other
-implementers have the time to do so, an explainer repository also serves as an
-entry point for them to engage in the early design process. Such early
-engagement is excellent news: it increases the chance of the feature launching
-to other engines' users, sooner.
-
-### Specifications
-
-A good specification is critical to other implementations being able to
-interoperably implement a feature, and to that feature eventually reaching users
-of those other implementations. Although our code is open source, and in theory
-anyone could implement based on it, good specifications have the following
-benefits:
-
-* Specifications operate at a higher level than source code, using
- implementation-agnostic abstractions. Thus, an implementer working on any
- implementation can read a specification and understand how it would map to
- their implementation, separate from the Chromium one.
-
-* Similarly, specifications are reviewable by non-implementers, including web
- developers and groups providing wide review. Writing a specification makes
- it easier to capture the input of such groups.
-
-* Writing a specification crystalizes what the intended behavior is, separate
- from the implemented behavior.
-
-* Specifications provide a mechanism for IPR coverage. The amount of coverage
- varies depending on specification venue, but most venues at the very least
- guarantee that the specification writers' organization grants a patent
- license to implement the specification.
-
-***Note:** the venue for a specification, and whether it is a "specification"
-(individual unofficial draft, W3C CG draft, TC39 stage 2...) or a "standard"
-(W3C Recommendation, WHATWG Living Standard, Ecma Standard, ...), only impacts
-the last of these bullet points. As such, it's most important that we write a
-good specification. The venue and formal status are helpful for gathering IPR
-coverage, but otherwise should not be a focus.*
-
-As such, Chromium developers must ensure that any feature they intend to ship is
-backed by a complete and thorough specification. This specification must be at
-the level of detail that the feature can be interoperably implemented in a
-second engine, should that engine want to bring the feature in question to their
-users.
-
-Getting this right can be difficult. Generally, a prototype implementation comes
-before a specification, since it is easier to iterate on the prototype and
-gather real-world feedback that way. If such prototyping drastically changes the
-shape of the feature, or results in scrapping the feature altogether, this can
-save a lot of specification-writing time!
-
-But this ordering does have one disadvantage. Since there was never a point at
-which the Chromium engineer implemented the feature from scratch, following the
-specification, we never get a formal check that the specification is complete
-and detailed enough. This can lead to problems where, when a second
-implementation *does* try to implement from scratch, they find the specification
-incomplete, or find that the specification relies on Chromium-specific
-assumptions.
-
-To help address this, we have the [Chromium Specification
-Mentors](/blink/spec-mentors) program, which pairs Chromium developers with a
-trusted mentor to get a second set of eyes.
-
-Finally, the most important part of specification writing is to keep up active
-maintenance of the specification even after Chromium ships the feature. This is
-especially true if a second implementer starts implementing and filing bugs
-based on their experience.
-
-### Tests
-
-By contributing [web platform tests](https://github.com/web-platform-tests/wpt)
-for our proposals, we create a machine-checkable subset of the specification. In
-practice, this is essential to achieving interoperable implementations, as well
-as ensuring compatibility through preventing regressions. Of note is the
-[wpt.fyi](https://wpt.fyi/) dashboard, which enables in-depth comparison of
-cross-browser results and a resulting drive toward interoperability.
-
-Additionally, by devoting the Chromium project's resources to writing web
-platform tests, we ensure that other implementations have a ready-made test
-suite when they go to implement the feature. This is excellent leverage: we can
-invest our resources in writing the tests, but they can be used by all future
-implementations as well, almost for free.
-
-Chromium developers should strive for high levels of coverage for their
-feature's web platform tests suite. Ideally, something like 100% coverage of
-both "spec lines" and Chromium code would ensure that Chromium implements the
-spec faithfully, and that others will be able to leverage the tests to implement
-the spec in the same way. Some sample test suites which approach this goal
-include
-[url/](https://wpt.fyi/results/url?label=master&label=experimental&aligned),
-[streams/](https://wpt.fyi/results/streams?label=master&label=experimental&aligned),
-and
-[pointerevents/](https://wpt.fyi/results/pointerevents?label=master&label=experimental&aligned).
-
-In practice, this is a hard goal to reach. We can try to approach it by
-[annotating specifications](https://tabatkins.github.io/bikeshed/#wpt-element)
-with their associated tests, and running the appropriate Chromium [code coverage
-tools](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/code_coverage.md).
-Another hurdle is that some things are [not
-testable](https://github.com/web-platform-tests/wpt/issues?q=is%3Aopen+is%3Aissue+label%3Atype%3Auntestable)
-with current infrastructure. We have a dedicated team,
-[ecosystem-infra@chromium.org](https://groups.google.com/a/chromium.org/g/ecosystem-infra),
-which works to improve our testing infrastructure and mitigate such gaps.
-
-### Web developer and end user feedback
-
-The best evidence for the value of a feature is testimonials or data from users
-and web developers. Before launch, these can be gathered in a variety of ways,
-including [Dev
-Trials](https://docs.google.com/document/d/1_FDhuZA_C6iY5bop-bjlPl3pFiqu8oFvuK1jzAcyWKU/edit),
-[Origin Trials](https://github.com/GoogleChrome/OriginTrials), or direct user
-and developer engagement in venues like the Chromium or specification issue
-tracker. After launch, metrics such as [use
-counters](https://www.chromestatus.com/metrics/feature/popularity) can show how
-much uptake a feature is getting in the wild.
-
-Collating this information together for easy consumption is an important final
-step in the process before shipping. The goal is to present a body of evidence
-that makes it easy for other engines to evaluate whether they would like to
-bring the proposal to their implementation, or not.
-
-### Wide review
-
-There are specific groups, usually in the specification ecosystem, which are
-dedicated to reviewing feature proposals. The [W3C
-TAG](https://github.com/w3ctag/design-reviews/) is one such group, whose reviews
-have a formal place in the Blink launch process. But the more such reviews we
-can gather, the better.
-
-Other groups to consider are:
-
-* Relevant working groups or specification editors, e.g. the CSSWG for CSS
- feature proposals; the HTML Standard editors for HTML feature proposals;
- etc.
-
-* Cross-functional W3C groups such as the [Internationalization
- WG](https://www.w3.org/International/core/Overview), [Privacy
- IG](https://www.w3.org/Privacy/IG/), or [APA
- WG](https://www.w3.org/2018/08/apa-charter).
-
-* Chromium cross-functional review groups, such as the
- [security](/Home/chromium-security), privacy, permissions, and anti-tracking
- teams.
-
-* Directly reaching out to other browser engine implementers or standards
- engineers for their [signals](https://docs.google.com/document/d/1xkHRXnFS8GDqZi7E0SSbR3a7CZsGScdxPUWBsNgo-oo/edit).
-
-None of these groups are obligated to respond; many are busy with other reviews
-or with their own work. But we always attempt to reach out, and respond to any
-concerns or questions raised. And then we work to capture any answers, or
-resultant changes, in a permanent location like the specification or explainer.
-
-## Conclusion
-
-Notably, these guidelines do not have an explicit requirement that a feature be
-standardized (as opposed to specified), or that a feature have multi-implementer
-consensus. Instead, factors like those are inputs into the overall evaluation.
-Indeed, all engines implement features ahead of others, or ahead of formal
-standardization. (See the "Browser-Specific" section of the [Web API Confluence
-Dashboard](https://web-confluence.appspot.com/#!/confluence)). But our process
-requires significant up-front investment from Chromium contributors before a
-feature is considered ready to ship, to help promote our
-[values](/blink/guidelines/values).
-
-Even if other browsers have not yet implemented a feature, these artifacts are
-important to the Chromium project. Creating solid explainers, specs, and tests,
-and gathering feedback and wide review, can move us toward future
-interoperability, and decrease the risk in the eyes of the API OWNERS. Indeed,
-even if other browsers are *opposed* to a feature, by taking the steps above, we
-can confidently state that we minimized risk, and layed out a well-lit path in
-case the other browsers change their evaluation or their priorities in the
-future. This shows that in addition to a feature promoting a useful and thriving
-web, and being designed well with respect to the priority of constituencies, we
-have made a strong effort to ensure the feature upholds the web's open nature as
-well. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/guidelines/web-platform-changes-process/index.md b/chromium/docs/website/site/blink/guidelines/web-platform-changes-process/index.md
deleted file mode 100644
index a694dde54c0..00000000000
--- a/chromium/docs/website/site/blink/guidelines/web-platform-changes-process/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/guidelines
- - Guidelines and Policies
-page_name: web-platform-changes-process
-title: 'Web Platform Changes: Process'
----
-
-### [See here](/blink/launching-features) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/how-repaint-works/index.md b/chromium/docs/website/site/blink/how-repaint-works/index.md
deleted file mode 100644
index a4bf6adbd16..00000000000
--- a/chromium/docs/website/site/blink/how-repaint-works/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: how-repaint-works
-title: How repaint works
----
-
-Moved to
-<https://docs.google.com/a/chromium.org/document/d/1jxbw-g65ox8BVtPUZajcTvzqNcm5fFnxdi4wbKq-QlY/edit#>
-
-#### How repaint works \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/importing-the-w3c-tests/index.md b/chromium/docs/website/site/blink/importing-the-w3c-tests/index.md
deleted file mode 100644
index d00a689df0f..00000000000
--- a/chromium/docs/website/site/blink/importing-the-w3c-tests/index.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: importing-the-w3c-tests
-title: Working with web-platform-tests in blink
----
-
-## OBSOLETE
-
-**See
-[here](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_platform_tests.md)
-instead**
-
-[TOC]
-
-Interoperability between browsers is [critical](/blink/platform-predictability)
-to chromium's mission of improving the web. We believe that leveraging and
-contributing to a shared test suite is one of the most important tools in
-achieving interoperability between browsers. The [web-platform-tests
-repository](https://github.com/w3c/web-platform-tests) is the primary shared
-test suite where all browser engines are collaborating.
-
-Chromium has mirrors
-([web-platform-tests](https://chromium.googlesource.com/external/w3c/web-platform-tests/),
-[csswg-test](https://chromium.googlesource.com/external/w3c/csswg-test/)) of the
-GitHub repos, and regularly (at least daily) imports a subset of the tests so
-that they are run as part of the regular Blink layout test testing process.
-
-Note that currently the main reason we do not run more of the W3C tests is
-because they are (probably) mostly redundant with Blink's existing tests, and so
-we would double the running time of the layout tests for little benefit. Ideally
-we would identify the tests that are redundant and remove Blink's copies, so
-that we run just the W3C tests where possible.
-
-The end goals for this whole process are to:
-
-1. Be able to run the W3C tests unmodified locally just as easily as we
- can run the Blink tests
-2. Ensure that we are tracking tip-of-tree in the W3C repositories as
- closely as possible
-3. Run as many of the W3C tests as possible
-
-## Automatic Import Process
-
-There is an automatic [w3c-test-autoroller
-bot](https://build.chromium.org/p/chromium.infra.cron/builders/w3c-test-autoroller)
-for regularly updating our local copies of web-platform-tests.
-[w3c_test_autroller
-recipe](https://cs.chromium.org/chromium/infra/recipes/recipes/w3c_test_autoroller.py).
-
-```none
-Tools/Scripts/wpt-import --auto-import wpt
-Tools/Scripts/wpt-import --auto-import css
-```
-
-## Manually Importing New W3C Tests
-
-Updating the set of tests run by Blink requires commit access to Chromium like
-anything else, so make sure you have that first.
-
-We control which tests are imported via
-[LayoutTests/W3CImportExpectations](https://code.google.com/p/chromium/codesearch?q=W3CImportExpectations#chromium/src/third_party/WebKit/LayoutTests/W3CImportExpectations),
-which has a list of directories to skip during import. This means that any new
-tests and directories that show up in the W3C repos are automatically imported.
-
-To pull the latest versions of the tests that are currently being imported
-(i.e., you don't need to change the blocklist), all you have to do is run:
-
-```none
-Tools/Scripts/wpt-import wpt
-Tools/Scripts/wpt-import css
-```
-
-That script will pull the latest version of the tests from our mirrors of the
-W3C repos. If any new versions of tests are found, they will be committed
-locally to your local repository. You may then upload the changes.
-
-If you wish to add more tests (by un-skipping some of the directories currently
-skipped in
-[W3CImportExpectations](https://code.google.com/p/chromium/codesearch?q=W3CImportExpectations#chromium/src/third_party/WebKit/LayoutTests/W3CImportExpectations)),
-you can modify that file locally and commit it, and on the next auto-import, the
-new tests should be imported. If you want to import immediately, you can also
-run wpt-import --allow-local-commits.
-
-## Contributing Blink tests back to the W3C
-
-### If you need to make changes to [Web Platform Tests](https://github.com/w3c/web-platform-tests), just commit your changes directly to our version in [LayoutTests/external/wpt](https://cs.chromium.org/chromium/src/third_party/WebKit/LayoutTests/external/wpt/) and the changes will be automatically upstreamed within 24 hours.
-
-Note: if you’re adding a new test in external/wpt, you’ll need to re-generate
-MANIFEST.json manually until <https://crrev.com/2644783003> is landed. The
-command to do so is:
-
-```none
-third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/manifest \
-```
-
-```none
---work \
-```
-
-```none
---tests-root=third_party/WebKit/LayoutTests/external/wpt
-```
-
-### Where can I find the code for the WPT import and export tools?
-
- Exporter:
- [//third_party/WebKit/Tools/Scripts/wpt-export](https://cs.chromium.org/chromium/src/third_party/WebKit/Tools/Scripts/wpt-export)
-
- Importer:
- [//third_party/WebKit/Tools/Scripts/wpt-import](https://cs.chromium.org/chromium/src/third_party/WebKit/Tools/Scripts/wpt-import)
-
- Libraries:
- [//third_party/WebKit/Tools/Scripts/webkitpy/w3c/](https://cs.chromium.org/chromium/src/third_party/WebKit/Tools/Scripts/webkitpy/w3c/?q=local_wpt&sq=package:chromium)
-
-### Will the exported commits be linked to my GitHub profile?
-
-The email you commit with (e.g. user@chromium.org) will be the author of the
-commit on GitHub. You can [add it as a secondary address on your GitHub
-account](https://help.github.com/articles/adding-an-email-address-to-your-github-account/)
-to link your exported commits to your GitHub profile.
-
-### What if there are conflicts?
-
-This cannot be avoided entirely as the two repositories are independent, but
-should be rare with frequent imports and exports. When it does happen, manual
-intervention will be needed and in non-trivial cases you may be asked to help
-resolve the conflict.
-
-### Direct pull requests
-
-It's still possible to make direct pull requests to web-platform-tests. The
-processes for getting new tests committed the W3C repos are at
-<http://testthewebforward.org/docs/>. Some specifics are at
-<http://testthewebforward.org/docs/github-101.html>. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/index.md b/chromium/docs/website/site/blink/index.md
deleted file mode 100644
index 5bb3c45ac85..00000000000
--- a/chromium/docs/website/site/blink/index.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-breadcrumbs: []
-page_name: blink
-title: Blink (Rendering Engine)
----
-
-[TOC]
-
-## Mission
-
-Make the Web the premier platform for experiencing the world’s information and
-deliver the world’s best implementation of the Web platform.
-
-## What is Blink?
-
-Blink is the name of the [rendering
-engine](https://en.wikipedia.org/wiki/Web_browser_engine) used by Chromium and
-particularly refers to the code living under
-***[src/third_party/blink](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/).***
-
-## Participating
-
-[Chromium](http://chromium.org) is an
-[inclusive](https://chromium.googlesource.com/chromium/src/+/HEAD/CODE_OF_CONDUCT.md)
-open-source community that values fostering a supportive culture.
-
-### Discussions
-
-We value transparency and open collaboration. Our goal is for everyone to be
-able to participate, regardless of organizational affiliation. There are several
-areas where developer discussions take place:
-
-* [blink-dev@chromium.org](https://groups.google.com/a/chromium.org/group/blink-dev/topics)
- is the general list for discussions relevant to the design and
- implementation of web platform features.
-* Technical Discussion Groups -
- [Groups](/developers/technical-discussion-groups) dedicated to the
- discussion of specific areas of the codebase.
-* Slack (#blink): We hang out on the #blink channel on
- [chromium.slack.com](https://chromium.slack.com) to have quick,
- informal discussions and answer questions.
-
-### Reporting Issues
-
-We use Chromium's [issue
-tracker](https://bugs.chromium.org/p/chromium/issues/list) (aka
-[crbug.com](http://crbug.com)). Web Platform issues live under components in
-[Blink](https://bugs.chromium.org/p/chromium/issues/list?q=component%3Ablink&can=2)
-and
-[Internals](https://bugs.chromium.org/p/chromium/issues/list?q=component%3Ainternals&can=2).
-
-### Tracking features
-
-For developers interested in tracking new features, there are several dedicated
-channels for staying up-to-date:
-
-* [Beta Blog Posts](https://blog.chromium.org/search/label/beta): For
- each new Chrome Beta release (~every six weeks), the Chrome team
- publishes [blog posts](https://blog.chromium.org/search/label/beta)
- outlining the changes to the web platform and the Chrome Apps &
- Extensions APIs.
-* Chrome Developer Relations: Chrome DevRel posts about new features
- on [web.dev](https://web.dev/), Twitter
- ([@ChromiumDev](https://twitter.com/ChromiumDev)), and
- [YouTube](https://www.youtube.com/user/ChromeDevelopers/) (Google
- Chrome Developers channel).
-* [chromestatus.com](https://www.chromestatus.com/): A dashboard where
- we track new feature development.
-* [bit.ly/blinkintents](https://bit.ly/blinkintents): A Google
- Spreadsheet that lists all ["Intent"
- threads](/blink#TOC-Web-Platform-Changes:-Process) and their
- approval status.
-
-## Developing
-
-### Learning about Blink Development
-
-Blink is implemented on top of an abstract platform and thus cannot be run by
-itself. The [Chromium Content module](/developers/content-module) provides the
-implementation of this abstract platform required for running Blink.
-
-* [How Blink
- works](https://docs.google.com/document/d/1aitSOucL0VHZa9Z2vbRJSyAIsAz24kX8LFByQ5xQnUg)
- is a high-level overview of Blink architecture.
-* [Chromium Content module](/developers/content-module) - Details on
- the abstract platform required to run Blink.
-* [Getting Started with Blink
- Debugging](/blink/getting-started-with-blink-debugging) - Best
- practices on how to debug Blink (using Content Shell).
-* [Chromium Development](/developers) - Guides and best practices for
- Chromium development
-* YouTube ([Chrome
- University](https://www.youtube.com/playlist?list=PLNYkxOF6rcICgS7eFJrGDhMBwWtdTgzpx)
- Playlist) - Introductory lessons that cover the fundamental concepts
- for Chromium development.
-
-### Committing and reviewing code
-
-Blink follows all standard [Chromium](/developers) practices, including those on
-[contributing
-code](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/contributing.md)
-and [becoming a committer](/getting-involved/become-a-committer). Code living in
-*[src/third_party/blink](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/)*
-follows the [Blink Coding Style Guidelines](/blink/coding-style).
-
-### Launching and Removing Features
-
-* [How we think about making changes to the
- platform](/blink/guidelines/web-platform-changes-guidelines)
-* [Launching a Web Platform Feature](/blink/launching-features)
-* [Removing a Web Platform Feature](/blink/deprecating-features)
-* (Video) [Intent to Explain: Demystifying the Blink shipping
- process](https://www.youtube.com/watch?v=y3EZx_b-7tk)
-
-### Page Directory
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/blink/intent-security-triage/index.md b/chromium/docs/website/site/blink/intent-security-triage/index.md
deleted file mode 100644
index e5efee9249d..00000000000
--- a/chromium/docs/website/site/blink/intent-security-triage/index.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: intent-security-triage
-title: '"Intent to {Implement,Ship}" Security Triage'
----
-
-Blink's [launch process](/blink#TOC-Web-Platform-Changes:-Process) ensures that
-interesting features show up as "Intent" threads on the
-[blink-dev@chromium.org](https://groups.google.com/a/chromium.org/group/blink-dev/topics)
-mailing list. These threads provide a forum for discussion of new features, and
-go/no-go decisions from API OWNERS, and are a pretty comprehensive view of the
-feature set that we're planning on providing to developers.
-
-Feature owners generally want the security team to sign off on features before
-shipping them to the web, and benefit from a contact they can poke with security
-questions. To that end, it behooves us to proactively skim through these threads
-to give feedback early, when it's easily actionable. That's where you come in,
-you wonderful security-minded person, you:
-
-## Triage Workflow
-
- Visit <https://bit.ly/blinkintents> and find the as-yet untriaged "Intent"
- threads.
-
- Read through each feature proposed in an "Intent to Implement" or "Intent to
- Implement and Ship" thread, with an eye for security concerns or interesting
- side effects that the feature's author might not have considered.
-
- *Note: we're assuming here that anything at the "Intent to Ship" stage has
- gone through wide review, and that deprecation is generally
- security-positive. If those turn out not to be reasonable assumptions, we
- can reevaluate what threads we care about.*
-
- If you end up with questions, post them to the thread. In particular, it's a
- good idea to encourage developers to include an explicit "Security
- Considerations" section in their specification and to read through things
- like the TAG's [self-review
- questionnaire](https://w3ctag.github.io/security-questionnaire/) (bonus
- points for filing spec bugs if there's a clear way to do so).
-
- If substantial questions are raised, flagging the feature for wider review
- before launch is reasonable. This could range from a simple comment on the
- launch bug up through preemptively flipping the Launch-Security flag to
- "No", depending on how the conversation goes.
-
- If you determine that a particular feature has no security implications at
- all, head over to the launch bug and flip the Launch-Security flag to NA,
- along with a comment to that effect.
-
- At the end of your triage shift, send a report to
- [security-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev)
- with a short description of what you looked at, and how it went (the
- [net-dev@ triage
- thread](https://groups.google.com/a/chromium.org/d/msg/net-dev/zhd-eJLjGi0/9Z-83U6vCAAJ)
- is a great model for this).
-
-## Hello, feature owner!
-
-This triage rotation is not meant as an approval step. Lack of comments from the
-security team on an "Intent" thread should not be interpreted as blanket
-approval. It's meant simply as a mechanism to get more eyes on features earlier
-in the process, and will hopefully speed up the process of getting those flags
-flipped on your important launches. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/launching-features/OWNERS b/chromium/docs/website/site/blink/launching-features/OWNERS
deleted file mode 100644
index 78c78a3feb6..00000000000
--- a/chromium/docs/website/site/blink/launching-features/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-miketaylr@chromium.org
-chrishtr@chromium.org
diff --git a/chromium/docs/website/site/blink/launching-features/how-chrome-status-communicates/index.md b/chromium/docs/website/site/blink/launching-features/how-chrome-status-communicates/index.md
deleted file mode 100644
index 5cbad453452..00000000000
--- a/chromium/docs/website/site/blink/launching-features/how-chrome-status-communicates/index.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/launching-features
- - Launching Features
-page_name: how-chrome-status-communicates
-title: How Chrome Status Communicates with Web Developers
----
-
-Chrome Status is the first level of communication with the web development
-community about new web platform and related features. Its audience is not, as
-many believe, exclusively Chromium engineers.
-
-# Summary
-
-Provide one or two complete sentences explaining the feature to web developers
-followed by one or two sentences explaining either how it helps web developers
-or how it improves the web platform. Do this even if it seems obvious to you.
-
-* Use complete sentences.
-* Exclude returns in the text. They will not be shown in some views.
-
-Tips:
-
-* Omit needless words. This is from "[The Elements of
- Style](https://www.amazon.com/Elements-Style-Fourth-William-Strunk/dp/020530902X/ref=pd_bxgy_14_img_3?_encoding=UTF8&pd_rd_i=020530902X&pd_rd_r=de87e78e-8526-11e8-914f-9f4b0c666b45&pd_rd_w=mZsdS&pd_rd_wg=bq1yC&pf_rd_i=desktop-dp-sims&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=3914568618330124508&pf_rd_r=KQZKKVTXAZHWAEFD7SR9&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=KQZKKVTXAZHWAEFD7SR9)".
- Most people have words in their writing that can be removed without
- affecting comprehension or meaning.
-* Do not take shortcuts at the cost of clarity. If you cut so many
- words the meaning is obscured, then you have gone too far in
- omitting needless words. This is also from "The Elements of Style."
-* If you absolutely, positively cannot describe your feature in the
- space required, continue the description in the comments box.
-
-# Chromium Status
-
-**Behind a flag**—Applies to one of two conditions.
-
-* The flag is listed in chrome://flags AND it is disabled by default.
-* The flag is listed in chrome://flags with a value of 'default' and
- is disabled by default somewhere in the compiled code.
-
-Additionally:
-
-* Origin trials have their own labels.
-* This does NOT apply to Finch or test flags.
-
-**Enabled by default**—Applies to one of three conditions.
-
-* There is no flag in chrome://flags because the feature is available
- to all users.
-* The flag is listed in chrome://flags AND it is enabled by default.
-* The flag is listed in chrome://flags with a value of 'default' and
- is enabled by default somewhere in the compiled code. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/launching-features/index.md b/chromium/docs/website/site/blink/launching-features/index.md
deleted file mode 100644
index 47393a09cc4..00000000000
--- a/chromium/docs/website/site/blink/launching-features/index.md
+++ /dev/null
@@ -1,629 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: launching-features
-title: Launching Features
----
-
-If you have concerns about your feature not fitting into this process, or any
-other questions, general concerns or discussion of this process, please e-mail
-[blink-api-owners-discuss@chromium.org](mailto:blink-api-owners-discuss@chromium.org).
-If you'd like to provide feedback on this page or the process it describes,
-leave feedback on the [Google Doc
-draft](https://docs.google.com/document/d/1R_2V5_rukVM8S5Hg2XKxiEOVRxvB7NqZOI2lfni2YwE/edit?usp=sharing)
-of this page.
-
-## Exempt features
-
-You do not need to use this process if your change does not [affect web API
-behavior to the point that developers need to be aware of
-it](/blink/guidelines/web-exposed). (e.g. no significant behavioral changes, and
-no web-facing API changes.) The rest of this document doesn’t apply to this type
-of change, although such features might still have to go through a different
-launch process. Large projects should have public design docs that are also
-shared on blink-dev@chromium.org (or chromium-dev@, for projects that have
-significant parts outside of Blink) for feedback (this is also a good way to get
-the attention of other relevant leads).
-
-## Frequently asked questions
-
-**Q**: *Do I need any of this if my project is just refactoring or
-re-architecting the code? Do the [API owners](/blink/guidelines/api-owners) need
-to be involved?*
-
-**A**: No. The API owners oversee the **process** of shipping [web-exposed](/blink/guidelines/web-exposed) API changes. They are not necessarily leads or
-overseers of any of the code. Instead, you should get the buy-in of the leads of
-the code areas touched by your project. If there may be side effects of your
-change, you should follow the "Architectural change" process below. In addition,
-such large projects should have public design docs that are also shared on
-[blink-dev@chromium.org](mailto:blink-dev@chromium.org) (or
-[chromium-dev@chromium.org](mailto:chromium-dev@chromium.org), for projects that
-have significant parts outside of third_party/blink) for feedback (this is also
-a good way to get the attention of relevant leads you might not have thought
-of).
-
-For code-related questions, you can email
-[platform-architecture-dev@chromium.org](mailto:platform-architecture-dev@chromium.org)
-in addition to blink-dev@ as a catch-all option when the code ownership is not
-clear or the feature needs large-scale refactoring changes.
-
-**Q**: *What if I want to add some code to third_party/blink that is for a
-non-web-exposed feature? Is that allowed?*
-
-**A**: In general, no. On a case-by-case basis an exception could be given if
-there is no other reasonable way to implement the feature. Ask for permission
-from leads of the code area as well as the API owners. (The API owners need to
-be involved only to help understand if the feature really is not web-exposed;
-this can be a very subtle question.)
-
-**Q**: *I am not sure of the right approach for my feature. What should I do?*
-
-**A**: Please reach out to the API owners for help! While they are not
-gatekeepers for everything, they are very happy to give advice and unblock your
-feature. An email to
-[blink-api-owners-discuss@chromium.org](mailto:blink-api-owners-discuss@chromium.org)
-is the best way; if a public-facing email is not possible, please email the [API
-owners](/blink/guidelines/api-owners) directly.
-
-## The Feature Types
-
-The first thing you will need to do is identify what type of feature you are
-building:
-
-### New feature incubation
-
-This is the normal path when we are incubating and
-defining new features from scratch - e.g., most
-[Fugu](/teams/web-capabilities-fugu) features follow this pattern, and any
-feature where we start without an already-defined standard for the feature.
-This also covers changes that are extending existing features (e.g.,
-defining a new value and behavior for an existing standard feature). This
-type of feature has the most associated process steps, as it is charting new
-territory.
-
-### Implementation of existing standard
-
-This type of feature has a
-lighter-weight “fast track” process, but this process can only be used when
-the feature has already been defined in a consensus standards document -
-e.g. a W3C Working Group has already agreed on the design, it has already
-been merged into a WHATWG standard, or the feature has already been
-implemented in another engine.
-
-### Deprecation
-
-Removal of already-shipped features.
-
-### Web developer facing change to existing code
-
-This is generally a public
-service announcement- “This is a web-developer-facing change to existing
-code without API changes, but you may see side effects.” This may be due to
-large-scale code refactoring or rewriting, where the goal is to cause no
-behavioral changes (but due to scope of change, side effects are likely), or
-this may encompass changes to current code that fix a bug or implement new
-changes to the spec without changes to the API shape itself.
-
-### Changing stages
-
-It is possible to change types later in the process - for example, if you start
-out implementing an already existing standard, but discover you need to incubate
-a new API during the process, you can change the feature type and move back
-stages. Note that there are few [strictly required gates to the Chromium
-process](/blink/guidelines/api-owners/procedures) (e.g., 3 LGTMs from API owners
-on an intent-to-ship) - particularly in the earlier stages we want to encourage
-experimentation. However, there are required fields for most stages in the
-[ChromeStatus tool](https://www.chromestatus.com/), and it’s important to
-consider all the steps listed below; this will maximize your chance of success
-on an intent-to-ship and reduce the risk of having to redo parts of your design
-or implementation.
-
-## The Chromium process to launch a new feature
-
-### Step 0: Create a ChromeStatus entry, and choose your feature type.
-
-For all types of features, the first step is to create a ChromeStatus entry. Go
-to <https://www.chromestatus.com/features>, ensure you are logged in (see the
-upper right corner), and click “Add new feature”. If you do no have access to
-create a new feature, please send an email to
-[webstatus-request@google.com](mailto:webstatus-request@google.com) to request
-access. Follow the directions to name your feature and give a short summary, and
-select the appropriate feature type.
-
-For Chrome, some launches will require a formal[ Chrome launch
-review](https://bugs.chromium.org/p/chromium/issues/entry?template=Chrome+Launch+Feature)
-(especially if your feature has security, privacy, legal, or UI implications).
-This is the point where you should file a launch bug if this applies to you. We
-are working on making this process more open and transparent outside Google.
-
-From this point on, the process changes a little depending on the type of
-feature you’re adding.
-
-### For New Feature Incubations
-
-#### Step 1: Incubating: Write up use cases and scenarios in an explainer
-
-Press the "Start" button next to "Start Incubating", fill out the “Motivation”
-section with a brief summary, and then write up the use cases and scenarios in
-an explainer for the feature (typically hosted in a public personal Github repo
-in Markdown form) and hit "Submit".
-
-We have a [program for to provide mentorship for specification
-writing](/blink/spec-mentors); If you are a Googler you must file a
-[request](https://docs.google.com/forms/d/e/1FAIpQLSfCYE4U13GkZ11rAWBUjOb3Lza-u4m2k3TklQHXe7Zfn3Qo1g/viewform)
-for a spec mentor, and ask them to review this early explainer before
-proceeding. If you are not a Googler, you are welcome to make use of this but
-not required to.
-
-You can then put a link to your public explainer in the feature entry. You will
-then need to publish this explainer, and kick off "standards incubation" by
-proposing this to a relevant standards venue (frequently, this means you should
-[make a WICG proposal](https://github.com/WICG/admin#contributing-new-proposals)
-and start socializing the problem with other vendors and developers. Enter a
-reference to the public proposal in “Initial Public Proposal” field; if there is
-interest in the WICG proposal and it can be moved into the WICG at this point,
-do so. The WICG co-chairs can help you.) It’s also a good idea to discuss your
-idea with the team/team lead (TL) or area expert in the feature area, prior to
-checking in code in the area.
-
-Start sketching out a proposed solution in your (public) explainer, detailing
-API design (IDL) in your incubation. If you are a Googler, you may wish to
-review this with your specification mentor before proceeding.
-
-#### Step 2: Prototyping
-
-Proceed to the “Start Prototyping” stage in ChromeStatus - this will generate an
-“Intent to Prototype” mail for you. Send that email to
-[blink-dev](mailto:blink-dev@chromium.org) and start checking in prototype code
-to Chromium under a runtime flag. You should do your detailed API design in the
-open, in your public repository, and response to feedback filed there. You
-should continue pushing for public engagement (from other vendors and web
-developers), and to move into WICG, or other incubation venues, if you haven’t
-already. During this stage, you should expand on the explainer with a full
-design doc (this may also have implementation-specific details), and consider
-creating a specification (or writing up a pull request with changes to an
-existing spec).
-
-Note that any CLs landing at this stage should be [behind a feature
-flag](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/RuntimeEnabledFeatures.md).
-Consider adding a[ UseCounter](/blink/platform-predictability/compat-tools) to
-track usage of your new feature in the wild, and be sure to write integration
-tests for your feature as[
-web-platform-tests](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_platform_tests.md)
-as you go. Continue to work with your API mentor if there are any design
-changes.
-
-Ensure you have an API overview and descriptions for all IDL methods and
-properties (these are probably in your specification or explainer, but
-developers will need them to try your feature out), and at least a basic sample.
-
-As soon as you have a functional and reasonably complete implementation of your
-initial design ready for developers to try out behind a flag, proceed to the
-next step.
-
-#### Step 3: Feature Complete behind a feature flag: iteration on design
-
-Once you have a functional and reasonably complete feature implementation
-available as a runtime enabled feature, request a
-[TAG](https://github.com/w3ctag/design-reviews/issues) review of your design and
-proceed to the “Dev Trials” stage in ChromeStatus. This will generate a “Ready
-for Trial” email that you should send to
-[blink-dev](mailto:blink-dev@chromium.org) to notify the community they can try
-out the feature. At this point, you should consider ask other browser vendors
-and the web developer community for [signals on their opinion of the
-API](https://docs.google.com/document/d/1xkHRXnFS8GDqZi7E0SSbR3a7CZsGScdxPUWBsNgo-oo/edit#heading=h.tgzhprxcmw4u).
-
-This is the main iterating stage of feature development and helps you assess
-product-market-fit early on before you corner yourself (does your API address a
-problem with meaningful demand? did we get the ergonomics right?). You may wish
-to send more than one Ready for Trial emails, if you make substantial changes to
-the API shape while iterating. You should work with the TAG to complete their
-review and address any issues raised during this stage, and should address any
-issues raised by other horizontal reviews (accessibility, privacy,
-internationalization, etc.).
-
-#### Step 4: Evaluate readiness to ship
-
-Once you believe you have addressed all major open issues, you should proceed to
-the “Evaluating readiness to ship” stage in ChromeStatus. If you haven't already
-received [signals on their opinion of the
-API](https://docs.google.com/document/d/1xkHRXnFS8GDqZi7E0SSbR3a7CZsGScdxPUWBsNgo-oo/edit#heading=h.tgzhprxcmw4u)
-from other browser vendors and the web developer community, now is the time to
-pursue getting those signals.
-
-You should also work with the documentation team to ensure your features will be
-documented when shipped, and estimate when (in what milestone) you would like to
-target shipping.
-
-You should also decide if an Origin Trial would help gather significant data for
-your feature.
-
-By this stage, you need to have a complete specification available that matches
-what you have implemented. The only exception is if you plan to do an Origin
-Trial, and expect that trial feedback could change the shape of the API
-significantly or result in it being scrapped altogether. In that case it might
-be OK to delay writing a specification until the Origin Trial is underway or
-completes. But be careful: writing a good spec can be a lot of work, and
-producing a good enough spec to meet the shipping bar can take longer than the
-~12-16 weeks of an Origin Trial, so starting the spec-writing process too late
-might delay your feature launch.
-
-#### Step 5 (Optional): Origin Trial
-
-If you want to gather data on the usability of your feature that an [Origin
-Trial](/blink/origin-trials/running-an-origin-trial) can help collect, proceed
-to the “Origin Trial” stage in ChromeStatus and fill out the required fields
-detailing what you hope to learn from the origin trial. This will generate an
-[Intent to
-Experiment](https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit)
-mail that you should send to [blink-dev](mailto:blink-dev@chromium.org). After
-receiving at least [one LGTM](/blink/guidelines/api-owners/procedures) from the
-API owners, you can proceed with your origin trial release. Collect data and
-respond to any issues. From here, you may wish to return to Dev Trials, proceed
-to Prepare to Ship, or park the feature.
-
-As noted above, a specification is recommended but not required for an Origin
-Trial.
-
-Please note that Origin Trials are not exempt from requiring cross-functional
-approvals from the Chrome launch review process.
-
-Depending on your feature and your experimentation goals, running an experiment
-via Finch on a percentage of the stable or beta populations may be useful
-([example](https://groups.google.com/a/chromium.org/g/blink-api-owners-discuss/c/WoQvWPCxKdU/m/e93bxrzwAQAJ)).
-In these cases, an Intent to Experiment explaining why this non-typical path is
-requested and the corresponding LGTM(s) are still required before proceeding.
-
-#### Step 6: Prepare to Ship
-
-At this point, if you are a Googler you should get a final spec review from your
-standards mentor, and discuss options for moving your spec to a final
-standardization venue. You should have TAG sign-off on your API design by now,
-or have ongoing discussions on the TAG review without any outstanding major
-concerns. You should update ChromeStatus with a target milestone for shipping
-(and remember to keep this updated, if things change). You should get final
-signoff from Documentation, and update for any changes in vendor signals.
-
-Proceed to the “Prepare to Ship” stage in ChromeStatus; this will generate an
-[Intent to
-Ship](https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit#bookmark=id.w8j30a6lypz0)
-mail that you should send to [blink-dev](mailto:blink-dev@chromium.org). This
-will spark a conversation with the API owners; address any feedback from them,
-and once you get [3 LGTMs from the API
-owners](/blink/guidelines/api-owners/procedures), you may enable the feature by
-default. You can learn more about the policies and guidelines the API owners
-evaluate [here](/blink/guidelines). Requirements for new API owners are
-[here](/blink/blink-api-owners-requirements). Email
-blink-api-owners-discuss@chromium.org or reach out to one of the[ API
-owners](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/API_OWNERS)
-if there is no open/unaddressed feedback and you are still blocked on LGTMs
-after 5 days.
-
-Once you have shipped your feature, proceed to the "Ship" stage in ChromeStatus.
-
-The approval status of various stages of the intent process is tracked by the
-API owners in [this spreadsheet](https://bit.ly/blinkintents).
-
-### Implementations of already-defined consensus-based standards
-
-#### Step 1: Write up use cases and scenarios, start coding
-
-Fill out the “Motivation” section with a brief summary, and then write up the
-use cases and scenarios. If this is a large feature, or a combination of
-multiple attributes/properties/methods/events, you may wish to do this in a
-separate explainer file.
-
-Proceed to the “Start Prototyping” stage in ChromeStatus - this will generate an
-“Intent to Prototype” mail for you. Send that email to
-[blink-dev](mailto:blink-dev@chromium.org) and start checking in prototype code
-to Chromium as [runtime enabled features](/blink/runtime-enabled-features).
-Ensure there are adequate
-[web-platform-tests](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_platform_tests.md)
-for this feature. Also ensure you have an API overview and descriptions for all
-IDL methods and properties (this is probably already in the consensus standard
-specification, or even on MDN), and at least a basic sample.
-
-As soon as you have a functional and reasonably complete implementation of the
-feature ready for developers to try out under a flag, proceed to the next step.
-
-#### Step 2: Feature Complete behind a flag and implementation refinement
-
-If the TAG has not already reviewed the consensus specification, request a
-[TAG](https://github.com/w3ctag/design-reviews/issues) review and proceed to the
-“Dev Trials” stage in ChromeStatus. This will generate a “Ready for Trial” email
-that you should send to [blink-dev](mailto:blink-dev@chromium.org) to notify the
-community they can try out the feature.
-
-After you have addressed any issues that the community finds, you should proceed
-to the “Evaluating readiness to ship” stage in ChromeStatus. You should also
-work with the documentation team to ensure your feature will be documented when
-shipped, and estimate when (in what milestone) you would like to target
-shipping. You should also decide if an Origin Trial would help gather
-significant data for your feature.
-
-#### Step 3 (Optional): Origin Trial
-
-If you want to gather data on the usability of your feature that an [Origin
-Trial](/blink/origin-trials/running-an-origin-trial) can help collect, proceed
-to the “Origin Trial” stage in ChromeStatus and fill out the required fields
-detailing what you hope to learn from the origin trial. This will generate an
-[Intent to
-Experiment](https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit)
-mail that you should send to [blink-dev](mailto:blink-dev@chromium.org). After
-receiving at least [one LGTM](/blink/guidelines/api-owners/procedures) from the
-API owners, you can proceed with your origin trial release. Collect data and
-respond to any issues. From here, you may wish to return to Dev Trials, proceed
-to Prepare to Ship, or park the feature.
-
-Please note that origin trials are not exempt from requiring cross-functional
-approvals from the Chrome launch review process. Details[
-here](/blink/origin-trials/running-an-origin-trial).
-
-An initial origin trial for a feature may only run for *6 milestones of Chromium*.
-Each request to extend beyond that limit may only be for *3 milestones* at a time,
-and will not be approved unless substantial progress is demonstrated in all of
-these areas:
-* Draft spec (early draft is ok, but must be spec-like and associated with the
- appropriate standardization venue, or WICG)
-* TAG review
-* bit.ly/blink-signals requests
-* Outreach for feedback from the spec community
-* WPT tests
-
-Each subsequent request to extend an origin trial must provide substantial
-*additional* progress on top of the previous extension request.
-
-[Note: the required breaking period was removed in April 2022. This removal will run
-for 12 months, after which the API owners will consider making the change permanent.]
-~~If an Origin Trial happens, then there is a [required breaking
-period](https://docs.google.com/document/d/1oSlxRwsc8vTUGDGAPU6CaJ8dXRdvCdxvZJGxDp9IC3M/edit#heading=h.r5cdr0aazfpm)
-before shipping in step 4. If you wish to skip the breaking period, meaning that
-sites participating in the Origin Trial will not see an interruption in support
-for the feature between Origin Trial and launch (\*), you may request an
-exception. The process to do so is to include this request in your Intent to
-Ship email. In the request, you must show clear evidence that developers engaged
-with the Origin Trial and that their concerns were taken into account in the
-final API design and implementation. LGTMs for the Intent to Ship imply approval
-of the request.~~
-
-(\*) "Not see an interruption" means that if the origin trial ends at milestone
-N, and the feature is shipped in milestone N+1, sites opting into the origin
-trial will continue to be able to use the feature on Chromium milestone N up to
-(and even after, for those users who have not upgraded) N+1 ships.
-
-#### Step 4: Prepare to Ship
-
-You should update ChromeStatus with a target milestone for shipping (and
-remember to keep this updated, if things change). You should get final signoff
-from Documentation, and update for any changes in vendor signals.
-
-Proceed to the “Prepare to Ship” stage in ChromeStatus; this will generate an
-[Intent to
-Ship](https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit#bookmark=id.w8j30a6lypz0)
-mail that you should send to [blink-dev](mailto:blink-dev@chromium.org). This
-will spark a conversation with the API owners; address any feedback from them,
-and once you [get 3 LGTMs](/blink/guidelines/api-owners/procedures) from the API
-owners, you may enable the feature by default. See[
-here](/blink/guidelines/web-platform-changes-guidelines) for the principles the
-API owners will apply in evaluating whether the feature is mature enough to
-ship. (API owners requirements are listed[
-here](/blink/blink-api-owners-requirements) - email
-blink-api-owners-discuss@chromium.org or reach out to one of the[ API
-owners](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/API_OWNERS)
-if no open/unaddressed feedback and you are still blocked on LGTMs after 5
-days.)
-
-Once you have shipped your feature, proceed to the "Ship" stage in ChromeStatus.
-
-### Feature deprecations
-
-#### Lessons from the first years of deprecations and removals ([thread](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/1wWhVoKWztY))
-
-We should weigh the benefits of removing an API more against the cost it
-has. Percent of page views by itself is not the only metric we care about.
-
-The cost of removing an API is not accurately reflected by the UseCounter
-for older, widely implemented APIs. It's more likely that there's a
-longer-tail of legacy content that we're breaking.
-
-We shouldn't remove APIs that have small value on the path towards a removal
-that has significant value. Getting rid of attribute nodes \*is\* valuable
-and would benefit the platform. Getting rid of half the attribute node
-methods is not. So we should evaluate the usage of all the APIs we need to
-remove together in order to get there. Also, if we remove them, we should
-remove them all in the same release. Breaking people once is better than
-breaking them repeatedly in small ways.
-
-We should be more hesitant to remove older, widely implemented APIs.
-
-For cases where we're particularly concerned about the compatibility hit, we
-should do the removal behind a flag so that we can easily re-enable the API
-on stable as we don't know the compat hit until the release has been on
-stable for a couple weeks.
-
-Enterprise users have additional difficulties reacting to breaking changes,
-but we also have additional tools to help them. See[ shipping changes that
-are enterprise-friendly](/developers/enterprise-changes) for best practices.
-
-High-usage APIs may require much more work to land successfully. See
-[here](https://docs.google.com/document/d/1-_5MagztiYclsMccY4Z66XI465WaasT5I5y2dnhRvoE/edit#heading=h.n49iymp16hl6)
-for a good example of how this worked in practice with the deprecation and
-removal of the Web Components v0 APIs.
-
-#### Step 1: Write up motivation
-
-Deprecations and removals must have strong reasons, explicitly balanced against
-the cost of removal. Deprecations should be clear and actionable for developers.
-First, read the [guidelines for deprecating a
-feature](https://docs.google.com/a/chromium.org/document/d/1LdqUfUILyzM5WEcOgeAWGupQILKrZHidEXrUxevyi_Y/edit?usp=sharing).
-Measure feature usage in the wild. [ Various
-tools](/blink/platform-predictability/compat-tools) are available, but typically
-this is accomplished by simply adding your feature to the[ UseCounter::Feature
-enum](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/frame/UseCounter.h&sq=package:chromium&type=cs&q=file:UseCounter.h%20Feature)
-and adding MeasureAs=&lt;your enum value&gt; to the feature's IDL definition.
-
-Fill out the “Motivation” section with a brief summary, and then write up the
-use cases and scenarios. Proceed to the “Write Up Motivation” stage in
-ChromeStatus - this will generate an “Intent to Deprecate and Remove” mail for
-you. Send that email to [blink-dev](mailto:blink-dev@chromium.org) and start
-checking in your code removing the feature to Chromium as a [runtime enabled
-feature](/blink/runtime-enabled-features). Make sure to provide suggested
-alternatives to the feature being deprecated. As soon as you have a functional
-removal of the feature ready for developers to try out under a flag, proceed to
-the next step.
-
-#### Step 2: Dev trial of deprecation
-
-Proceed to the “Dev Trials” stage in ChromeStatus. This will generate a “Ready
-for Trial” email that you should send to
-[blink-dev](mailto:blink-dev@chromium.org) to notify the community they can try
-out the feature deprecation.
-
-At this point, you should also notify developers by adding a deprecation console
-message, pointing to the updated status entry in the console message. You should
-also continue to measure usage by adding the API to the big switch in[
-UseCounter::deprecationMessage](http://src.chromium.org/viewvc/blink/trunk/Source/core/frame/UseCounter.cpp#l120).
-Give developers as many milestones as possible to respond to the deprecation.
-
-Instrument your code by either adding DeprecateAs=\[your enum value here\] to
-the feature's IDL definition.\* -- See window.performance.webkitGetEntries., or
-adding a call to UseCounter::countDeprecation somewhere relevant.
-
-You should work with the documentation team to ensure the community is prepared
-for this feature deprecation, and estimate when (in what milestone) you would
-like to target shipping. You should also decide (possibly based on data from the
-dev trial) if a deprecation trial is going to be necessary to help smooth the
-removal of this feature from the web platform.
-
-#### Step 3 (Optional): Deprecation Trial
-
-If you are concerned that there are going to be web developers who need
-additional time to fix up their implementations, and will want to delay your
-feature deprecation, you can file for a [Deprecation
-Trial](https://groups.google.com/a/chromium.org/forum/#!msg/blink-api-owners-discuss/uNWSTCUzIcU/0jyBWgLlDgAJ).
-This will let you disable the feature by default, but let developers request an
-origin trial token to re-enable the feature, for a limited period of time after
-the feature deprecation. You will need to decide how long to keep the
-deprecation trial open and enter that milestone in the tool for planning
-purposes, and then select “Draft Request for Deprecation Trial email” in
-ChromeStatus, and send the resulting “Request for Deprecation Trial” email to
-[blink-dev](mailto:blink-dev@chromium.org). After receiving at least [one
-LGTM](/blink/guidelines/api-owners/procedures) from the API owners, email
-[experimentation-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/experimentation-dev)
-letting them know you plan to run a deprecation trial, ensure your removal is
-integrated with the origin trials framework ([see
-details](/blink/origin-trials/running-an-origin-trial#integrate-feature)), and
-Googlers can request a trial for their feature at
-[go/new-origin-trial](http://goto.google.com/new-origin-trial). Once your
-Deprecation Trial is in place, proceed to the next step.
-
-#### Step 4: Prepare to Ship
-
-You should update ChromeStatus with a target milestone for deprecating the
-feature (and remember to keep this updated, if things change). You should get
-final signoff from the Documentation team.
-
-Proceed to the “Prepare to Ship” stage in ChromeStatus; this will generate an
-[Intent to
-Ship](https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit#bookmark=id.w8j30a6lypz0)
-mail that you should send to [blink-dev](mailto:blink-dev@chromium.org). This
-will spark a conversation with the API owners; address any feedback from them,
-and once you get [3 LGT](/blink/guidelines/api-owners/procedures)Ms from the API
-owners, you may proceed.
-
-#### Step 5: Disable the feature
-
-Disable the feature by default. Update ChromeStatus to either “Disabled” or
-“Disabled with Deprecation Trial”.
-
-#### Step 6: Remove Code
-
-If you are running a Deprecation Trial, wait until the Deprecation Trial period
-has ended. (If you need to extend the Deprecation Trial, notify
-[experimentation-dev@chromium.org](mailto:experimentation-dev@chromium.org) and
-click “Generate an Intent to Extend Deprecation Trial” in ChromeStatus and send
-the resulting notification to blink-dev.)
-
-Once the feature is no longer available, remove the code (typically waiting a
-couple of milestone cycles to insure the code is no longer needed), and set the
-ChromeStatus to “Removed.”
-
-If you are unsure of when a feature could be removed, or would like to
-discourage usage, you may deprecate a feature without a removal deadline. This
-is strongly discouraged and will require significant justification:
-
-* Email blink-dev using the ["Intent to Deprecate" template](https://docs.google.com/a/chromium.org/document/d/1Z7bbuD5ZMzvvLcUs9kAgYzd65ld80d5-p4Cl2a04bV0/edit).
-
-* [1 LGTM](/blink/guidelines/api-owners/procedures) necessary from the API owners
-
-* Must justify why there is no removal date
-
-\* It takes 12-18 weeks to hit Stable once you enable instrumentation. If there
-is time pressure you may be able to get permission to merge UseCounter changes
-into an existing dev/beta branch, and make provisional decisions based on data
-from beta channel.
-
-### Web-developer-facing change to existing code (PSA)
-
-#### Step 1: Write up motivation and implement code
-
-Fill out the “Motivation” section with a brief summary, and proceed to the
-“Implementing” stage in ChromeStatus.
-
-#### Step 2: (Optional) Dev trial
-
-If you want to try out this change before shipping it, put your code in Chromium
-as [runtime enabled features](/blink/runtime-enabled-features), and set the
-status to “Dev Trial” in ChromeStatus. This will generate a “Ready for Trial”
-email that you should send to [blink-dev](mailto:blink-dev@chromium.org) to
-notify the community they can try out code change.
-
-#### Step 3: Prepare to Ship
-
-You should update ChromeStatus with a target milestone for shipping (and
-remember to keep this updated, if things change). Proceed to the “Prepare to
-Ship” stage in ChromeStatus; this will generate a “Web-Facing Change PSA” mail
-for you. Send that email to [blink-dev](mailto:blink-dev@chromium.org) with the
-summary of the code change and the expected milestone.
-
-#### Step 4: (Optional) Finch trial
-
-You may wish to use [Finch](http://go/finch) to increase confidence in the new
-code as you deploy it.
-
-#### Step 5: Ship
-
-Ship it, and set the status to “Shipped”.
-
-## Post Launch
-
-After launching a new feature, watch for crashes, regressions caused by your
-feature and any substantive spec feedback. Review [UseCounter](/blink/platform-predictability/compat-tools) and other metrics.
-Update the intent-to-ship thread and ChromeStatus if non-trivial issues
-(like web compatibility or serious design questions) arise. When in doubt,
-email blink-dev@ (or blink-api-owners-discuss@ if you prefer a smaller
-audience) for advice.
-
-Once a new API is on by default, continue to support other implementations
-(for instance, clarifying the spec, improving the tests, fixing bugs, and
-updating support status in ChromeStatus) until the feature is broadly
-supported and works the same across engines. Remember, your job is to move
-the web forward, not simply add features to Chrome.
-
-Review MDN docs for technical accuracy and clarity. Feel free to make edits
-directly or reach out to jmedley@.
-
-When you are convinced enabling the feature by default has “stuck”
-(typically 2 milestones), remove any unused code including
-RuntimeEnabledFeatures entries.
-
-## Related
-
-For an overview, and explanation of motivations, please see:
-
-* Video presentation: [Intent to explain: Demystifying the Blink
- shipping process (Chrome Dev Summit
- 2019)](https://www.youtube.com/watch?v=y3EZx_b-7tk&list=PLNYkxOF6rcIDA1uGhqy45bqlul0VcvKMr&index=17)
-* Blog post: [Intent to Explain: Demystifying the Blink Shipping
- Process](https://blog.chromium.org/2019/11/intent-to-explain-demystifying-blink.html)
diff --git a/chromium/docs/website/site/blink/launching-features/let-developers-know/index.md b/chromium/docs/website/site/blink/launching-features/let-developers-know/index.md
deleted file mode 100644
index 67ec6b43bd5..00000000000
--- a/chromium/docs/website/site/blink/launching-features/let-developers-know/index.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/launching-features
- - Launching Features
-page_name: let-developers-know
-title: Let Web Developers Know about New Features
----
-
-So, You're Building a Feature. Now what?
-
-Web developers need to know about it so they can use it.
-
-Chrome Developer Relations has a process for that, but we need a little help
-from you. The big picture is that we use a release blog to post information
-about every new developer-facing or developer-affecting feature in every Chrome
-beta version. Developer Relations writes articles about some of these features.
-(We're not big enough to write about all of them.) This blog attracts the
-attention of the tech press. They write news stories about those features and
-usually link to our articles.
-
-If you miss getting your feature mentioned in the beta release post, you miss
-the best opportunity to tell the world about what you built.
-
-# The Process
-
-1. Write a good Chrome Status description.
- This is your first opportunity to communicate to the world what you're
- doing. Chrome Status autogenerates an Intent email for you, but the summary
- is public. If you write this well, it will appear as-is in the beta release
- post later. You can find a few [guidelines
- here](/blink/launching-features/how-chrome-status-communicates).
-2. Feature freeze (four weeks before beta): Let Developer Relations
- know that you plan to ship your feature in the upcoming beta. (See
- [Contacts](#Contacts), below.)
- **Inform us no matter how small the chance of shipping.** Waiting until you
- know for sure does us no favor. Preparing for a released feature at the last
- minute is difficult. Holding back text for a feature that wasn't released is
- trivial.
- If you're not sure that something is shipping you probably shouldn't update
- your Chrome Status entry. But you must tell us. Shipping in this case means
- available by default or available in an origin trial. It does not mean other
- types of flags.
-3. You may be asked at some point to review a longer article for
- technical accuracy. Developer Relations is a small group. We don't
- have the resources to write about everything.
-
-That's it. **Your communication responsibilities are complete.** If you want to
-confirm that something is on our radar follow
-[go/what's-shipping](https://docs.google.com/spreadsheets/d/155euqrhdqVhtbAID7ydaUPjBstLIYZ4PJkpFmqJ6j-o/edit#gid=1093066458)
-(externally accessible with permission) to see what DevRel already knows about.
-(Note: we keep a separate planning doc because so we can track things that may
-not be ready for Chrome Status.)
-
-# What Happens Next?
-
-Obviously, that's not the end of the story. I threw a bunch of information at
-you at the top, which I'll now explain.
-
-1. Between feature freeze and beta, Chrome Developer Relations creates
- [articles](https://web.dev/blog/) and
- [videos](https://www.youtube.com/channel/UCnUYZLuoy1rq1aVMwx4aTzw)
- about the new features. We also draft a [beta release
- post](https://blog.chromium.org/search/label/beta) for the [Chromium
- blog](https://blog.chromium.org/).
-2. As soon as Chrome beta is released, the beta release post is
- published on the Chromium blog. A member of our team tweets a blog
- post link to [@ChromiumDev](https://twitter.com/ChromiumDev).
-
-# What about Non-Google Engineers
-
-I haven't forgotten that engineers from outside Google work on Chromium. We want
-to give proper credit where it is due, but are still working on the most
-appropriate way to do this. We still want to let developers know about features
-you've built. Please, let us know what you've added to Chromium and we'll make
-sure it gets in the beta release post.
-
-**Frequently Asked Questions**
-
-**My feature, which adds a missing method or property, is only a bug. Do I need
-to tell you?**
-
-Yes. We need to know everything.
-
-**My feature is an update to the spec. Do I need to tell you?**
-
-Yes. We need to know everything.
-
-**I’m hoping to get 3 LGTMs before beta, but I haven’t written an intent yet. Do
-I need to tell you?**
-
-Yes. We need to know everything.
-
-(Are detecting a theme yet.)
-
-**I don’t think I’ll be done until after the branch point, but I’m hoping to
-merge to the current beta. Do I need to tell you?**
-
-Yes. We need to know everything.
-
-**My feature fixes a regression in a recent version of Chrome. Do I need to tell
-you?**
-
-We don’t need it for the beta release, but we may need to update MDN. Please let
-us know anyway. In other words, yes. We need to know everything.
-
-# Contacts
-
-Joe Medley - Help with getting the word out on your new feature.
-([jmedley@google.com](mailto:jmedley@google.com))
-Paul Kinlan - Head of Developer Relations for Chrome and the web platform.
-([paulkinlan@google.com](mailto:paulkinlan@google.com))
-Kayce Basques - Lead technical writer for Chrome and the web platform.
-([kayce@google.com](mailto:kayce@google.com)) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/launching-features/old-process/index.md b/chromium/docs/website/site/blink/launching-features/old-process/index.md
deleted file mode 100644
index 91efeb416b9..00000000000
--- a/chromium/docs/website/site/blink/launching-features/old-process/index.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/launching-features
- - Launching Features
-page_name: old-process
-title: old-process
----
-
-<table>
-<tr>
-
-<td>## \[This documentation is now obsolete! Please refer <a href="/blink/launching-features">here</a> for the current process\]</td>
-
-<td>## The process to launch a new feature</td>
-
-<td><b>Note:</b> You can combine the intent-to-implement email with an
-intent-to-experiment or with an intent-to-ship. You must still complete steps 2
-- 4.</td>
-
-1. <td>Email blink-dev using the <a
- href="https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit#bookmark=kix.p5nalpch13qw">“Intent
- to Implement” template</a>. </td>
- * <td>Formal approval isn't necessary to proceed with
- implementation</td>
- * <td>Code cannot be checked into trunk without an LGTM in code
- review</td>
- * <td>Opposition on the "Implement" thread will likely resurface
- when you try to ship, so try to resolve issues early</td>
-2. <td>Create an entry on <a
- href="http://chromestatus.com/">chromestatus</a>.</td>
- * <td>You'll need to use an @chromium.org account for
- chromestatus.com. If you don't have one, please fill out this
- form.</td>
- * <td>If you have trouble with chromestatus, please open an issue
- on GitHub.</td>
-3. <td>File an OWP launch tracking bug</td>
- * <td>Some launches may require a formal Chrome review. If your
- feature has privacy, legal, or UI impact, please email
- web-platform-pms@google.com to set a review in motion.</td>
-4. <td>Most changes should start a <a
- href="https://w3ctag.github.io/workmode/#specification-reviews">TAG
- review</a>. If you're not sure, file one. And link to the bug
- tracker for that to make it easy.</td>
-5. <td>Implement your change as a Runtime-Enabled Feature.</td>
-6. <td>Your feature should have interop tests, preferably
- web-platform-tests. If Chrome is the first one implementing a spec,
- the requirements for web-platform-tests coverage + quality will be
- fairly high for shipping.</td>
-7. <td>Optionally, run an <a href="/blink/origin-trials">origin
- trial</a> for your feature to collect developer feedback/data, as
- input to the standardization process.</td>
- * <td>If you answer “no” to all of the following questions, an
- origin trial is unnecessary (see caveat in \[1\]).</td>
- * <td>Is there disagreement about how well this API satisfies
- its intended use case?</td>
- * <td>Are you unsure about what API shape will be the most
- ergonomic in real world scenarios?</td>
- * <td>Is it hard to quantify performance gains without testing
- on real world sites?</td>
- * <td>Is there a reason that this API needs to be deployed to
- real users, rather than behind a flag, for data to be
- meaningful?</td>
- * <td>If you decide to run a trial, or are unsure, please first
- consult with the Origin Trials core team. </td>
- * <td>Email <a
- href="mailto:experimentation-dev@chromium.org">experimentation-dev@chromium.org</a>.
- Google employees can alternatively schedule a meeting
- directly with <a
- href="mailto:origin-trials-core@google.com">origin-trials-core@google.com</a>.</td>
- * <td>If you've decided to run an origin trial, do the following
- steps. If not then skip to step 8 of the launch process.</td>
- * <td>Follow the instructions on <a
- href="/blink/origin-trials/running-an-origin-trial">how to
- run an origin trial</a>. Google employees should see <a
- href="http://goto.google.com/running-an-origin-trial">go/running-an-origin-trial</a>.</td>
- * <td>Email blink-dev using the <a
- href="https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit#bookmark=id.pygli2e122ic">“Intent
- to Experiment” template</a>. Wait for LGTM from at least 1
- API Owner (again see caveat in \[1\]).</td>
- * <td>At the start of every subsequent release, post an update
- on usage of the feature on the intent to experiment thread
- in blink-dev.</td>
- * <td>There is an automatic and mandatory 1 week period when
- your feature is disabled at the end of the origin trial,
- before it potentially graduates to Stable. Tokens will
- expire 1 week before the earliest stable channel launch
- date, but note that a stable launch takes many days to
- deploy to users. This exists to encourage feature authors to
- make breaking changes, if appropriate, before the feature
- lands in stable, and to make clear to clients of the origin
- trial feature that in all circumstances the feature will be
- disabled (hopefully only briefly) at some point.</td>
-8. <td>When your feature is ready to ship, email blink-dev using the <a
- href="https://docs.google.com/document/d/1vlTlsQKThwaX0-lj_iZbVTzyqY7LioqERU8DK3u3XjI/edit#bookmark=id.w8j30a6lypz0">“Intent
- to Ship” template</a>. </td>
- * <td>Respond to any feedback or questions raised in the
- thread</td>
- * <td>You need at least 3 LGTMs from API owners to launch.</td>
- * <td>If you have resolved all feedback and are blocked on API
- owner LGTMs, add blink-api-owners-discuss@chromium.org
- requesting final approval.</td>
-9. <td>Enable by default.</td>
-
-<td>\[1\] Origin trials should be run for a specific reason. These questions are
-guidance to identifying that reason. However, there is still debate about the
-right reasons, so the guidance may change. You can join the conversation in <a
-href="https://docs.google.com/document/d/1oSlxRwsc8vTUGDGAPU6CaJ8dXRdvCdxvZJGxDp9IC3M/edit#heading=h.eeiog2sf7oht">this
-doc</a>.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/index.md b/chromium/docs/website/site/blink/layoutng/index.md
deleted file mode 100644
index 2594ace79cf..00000000000
--- a/chromium/docs/website/site/blink/layoutng/index.md
+++ /dev/null
@@ -1,237 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: layoutng
-title: LayoutNG
----
-
-LayoutNG is a new layout engine for Chromium that has been designed for the
-needs of modern scalable web applications. It was released in Chrome 77.
-
-It provides improved performance isolation, better support for scripts other
-than Latin, and fixes many issues around floats and margins. It also fixes a
-large number of web compatibility issues.
-
-Please note that LayoutNG will be launched in stages. In Chrome 77 LayoutNG is
-used for inline and block layout. Other layout primitives (such as table,
-flexbox, grid, and block fragmentation) will be replaced in subsequent releases.
-
-Last updated: Wed Oct 23, 2019 by [Emil](mailto:eae@chromium.org)
-
-# Developer Visible Changes
-
-Although the user visible impact should be minimal, LayoutNG changes some
-behavior in very subtle ways, fixes hundreds of tests, and improves
-compatibility with other browsers. Despite our best efforts, it is likely that
-this will cause some sites and applications to render or behave slightly
-differently. \[[CRBug
-query](https://bugs.chromium.org/p/chromium/issues/list?colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified&q=Type%3DBug-Regression%20Label%3ALayoutNG&can=1)\]
-
-The performance characteristics are also quite different; although performance
-on a whole is similar or slightly better than before, certain use cases are
-likely to see performance improvements, while others are expected to regress
-somewhat, at least short-term.
-
-## Floats
-
-LayoutNG reimplements support for floating elements (float: left and float:
-right) fixing a number of correctness issues around placement of floats in
-relation to other content.
-
-### Superimposed Content
-
-The legacy float implementation didn’t correctly account for margins when
-placing content around a floating element, resulting in the content partially or
-fully overlapping the float itself. The most common manifestation of this bug is
-when positioning images besides paragraphs of text where the avoidance logic
-fails to account for the height of a line ([issue
-861540](https://crbug.com/861540)).
-
-<img alt="image" src="/blink/layoutng/legacy_float_margin.png">
-
-*Fig 1a, Legacy layout.*
-*Text overlaps the floating image to the right.*
-
-<img alt="image" src="/blink/layoutng/ng_float_margin.png">
-
-*Fig 1b, LayoutNG.*
-floating image* *Text is positioned beside the
-to the right.*
-
-The same problem may occur within a single line. The example below shows a block
-element with a negative margin following a floating element ([issue
-895962](https://crbug.com/895962)). The text should not overlap with the float.
-
-<img alt="image" src="/blink/layoutng/legacy_float_overlap.png">
-
-*Fig 2a, Legacy layout.*
-*Text overlaps the floating orange element.*
-
-<img alt="image" src="/blink/layoutng/ng_float_overlap.png">
-
-*Fig 2b, LayoutNG.*
-*Text is positioned beside the floating orange element.*
-
-### Formatting Context Positioning
-
-When an element forming a block formatting context is sized next to floats
-Chromium would try size the block a fixed number of times before giving up. This
-resulted in unpredictable and unstable behavior and didn't match other
-implementations. In LayoutNG all floats are taken into account when sizing the
-block ([issue 548033](https://crbug.com/548033)).
-
-Absolute/fixed positioning has been reimplemented and is more spec compliant
-than the old implementation. It also better matches the behavior in other
-browsers. The differences between the two are most visible in the areas where
-the old implementation did not follow the spec:
-
-* **Multi-line Inline Containing Blocks:** If an abspos containing
- block spanned multiple lines, the legacy engine might incorrectly
- use only a subset of the lines to compute the containing block
- bounds.
-* **Writing Modes:** The legacy engine had many problems placing out
- of flow elements to default position in vertical writing modes. See
- the next section for more details around improved writing mode
- support.
-
-## RTL & Writing Modes
-
-LayoutNG was designed from the ground up to support vertical writing modes and
-bi-directional content. This fixes numerous issues around both writing modes,
-right-to-left inlines, and orthogonal flows.
-
-### Bidirectional Text
-
-LayoutNG supports the most up-to-date Unicode bidirectional algorithm defined by
-The Unicode Standard. Not only does it fix various cases where rendering was not
-correct, it also includes missing features in the old engine such as paired
-bracket support ([issue 302469](https://crbug.com/302469)).
-
-### Orthogonal Flows
-
-LayoutNG improves vertical flow layout correctness, for more correct positioning
-of absolute positioned objects, sizing of orthogonal flow boxes especially when
-percent is used, and so forth. Among the 1,258 tests in W3C test suites, 103
-tests that failed in the old engine pass in LayoutNG.
-
-### Intrinsic Sizing
-
-Intrinsic sizes are now calculated correctly when a LayoutNG block contains
-children in an orthogonal writing mode.
-
-## Text Layout & Line Breaking
-
-The old layout engine in Chromium does text layout element-by-element and
-line-by-line. This has historically worked well but requires a lot of extra
-complexity to support complex scripts and to get good performance. It's also
-prone to inconsistencies in measurements which tend to manifest themselves as
-subtle differences in sizing of size-to-content containers and their content or
-unnecessary line breaks.
-
-In LayoutNG text layout is done on a paragraph level and is then split into
-lines. This allows for better performance, higher quality text rendering, and
-more consistent line breaking.The most notable differences here from a developer
-and user standpoint are detailed below.
-
-### Joining across Element Boundaries
-
-In some scripts graphemes join with adjacent ones and changes presentation. In
-LayoutNG this works even if the graphemes are in different elements, allowing
-the joins to be preserved even if different styling is applied ([issue
-6122](https://crbug.com/6122)).
-
-The example below shows the rendering of the following HTML in legacy layout and
-LayoutNG respectively:
-
-&lt;div&gt;&#1606;&#1587;&#1602;&lt;/div&gt;
-&lt;div&gt;&#1606;&#1587;&lt;span&gt;&#1602;&lt;/span&gt;&lt;/div&gt;
-
-<img alt="image" src="/blink/layoutng/legacy_shape.png">
-
-*Fig 3a, Legacy layout.*
-*Note how the form of the second letter changes.*
-
-<img alt="image" src="/blink/layoutng/ng_shape.png">
-
-*Fig 3b, LayoutNG.*
-*Note how the form of the second letter is identical between the two.*
-
-### CJK Ligatures
-
-Although Chromium already supports ligatures and enable them by default, there
-are some limitations. Ligatures involving multiple CJK codepoints are not
-supported in the legacy engine due to a rendering optimization. LayoutNG removes
-these restrictions and supports ligatures regardless of script.
-
-The example below shows the rendering of three discretionary ligatures using the
-Adobe SourceHanSansJP font.
-
-<img alt="image" src="/blink/layoutng/legacy_dlig_jp.png">
-
-*Fig 4a, Legacy layout.*
-*MHz correctly forms a ligature but マンション and*
-*10点 does not.*
-
-<img alt="image" src="/blink/layoutng/ng_dlig_jp.png">
-
-*Fig 4b, LayoutNG.*
-*All three groups form ligatures as expected.*
-
-### Size to Content
-
-For elements that size to content (such as inline blocks) the current layout
-engine computes the size of the block first and then performs layout on the
-content. In some cases, such as when a font kerns aggressively, this may result
-in a mismatch between the size of the content and the block. In LayoutNG this
-failure mode has been eliminated as the block is sized based on the actual
-content.
-
-The example below shows a yellow block sized to content. It uses the Lato font
-which uses kerning to adjust the spacing between T and -. The bounds of the
-yellow box should match the bounds of the text.
-
-<img alt="image" src="/blink/layoutng/kern_legacy.png">
-
-*Fig 5a, Legacy layout.*
-*Note the trailing whitespace after the last T.*
-
-<img alt="image" src="/blink/layoutng/kern-ng.png">
-
-*Fig 5b, LayoutNG.*
-*Note how the left and right edges of the box match the bounds of the text.*
-
-### Line Wrapping
-
-Similar to the problem described above, if the content of a size-to-content
-block is larger (wider) than the block, this can cause the content to wrap
-unnecessarily. This is quite rare but sometimes happens for mixed-directionality
-content.
-
-<img alt="image" src="/blink/layoutng/legacy_ar_wrap.png">
-
-*Fig 6a, Legacy layout.*
-*Note the unnecessary line break and extra space on the right.*
-
-<img alt="image" src="/blink/layoutng/ng_ar_wrap.png">
-
-*Fig 6b, LayoutNG.*
-*Note how the left and right edges of the box match the bounds of the text.*
-
-# Further Information
-
-For more information about LayoutNG, please see the
-[documentation](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/layout/ng/README.md),
-[design
-document](https://docs.google.com/document/d/1uxbDh4uONFQOiGuiumlJBLGgO4KDWB8ZEkp7Rd47fw4/)
-and overall [tracking bug](https://crbug.com/591099).
-
-For more detailed information about the specific compatibility issues and bugs
-fixed by LayoutNG, please see the issues linked above or search the Chromium bug
-database for bugs marked
-[Fixed-In-LayoutNG](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3AFixed-In-LayoutNG).
-
-If you suspect that LayoutNG may have caused a web site to break, please [file a
-bug
-report](https://bugs.chromium.org/p/chromium/issues/entry?summary=%5BLayoutNG%5D+Enter+one-line+summary&labels=LayoutNG&components=Blink%3ELayout)
-and we'll investigate. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/kern-ng.png.sha1 b/chromium/docs/website/site/blink/layoutng/kern-ng.png.sha1
deleted file mode 100644
index 32acc238fbb..00000000000
--- a/chromium/docs/website/site/blink/layoutng/kern-ng.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-16f6a8cb2e8db8141fcbc7e8fc3a3a1d6d1ec058 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/kern_legacy.png.sha1 b/chromium/docs/website/site/blink/layoutng/kern_legacy.png.sha1
deleted file mode 100644
index 301b0a4218c..00000000000
--- a/chromium/docs/website/site/blink/layoutng/kern_legacy.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-08d36d90e6e0afb8f4f21b03927ff2f692c4dc3e \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/legacy_ar_wrap.png.sha1 b/chromium/docs/website/site/blink/layoutng/legacy_ar_wrap.png.sha1
deleted file mode 100644
index c2a62dd501a..00000000000
--- a/chromium/docs/website/site/blink/layoutng/legacy_ar_wrap.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8a0fa1708fff0169b715f50d441a08341c10e93c \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/legacy_dlig_jp.png.sha1 b/chromium/docs/website/site/blink/layoutng/legacy_dlig_jp.png.sha1
deleted file mode 100644
index 7802bcf4426..00000000000
--- a/chromium/docs/website/site/blink/layoutng/legacy_dlig_jp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9c5a49a0bf8df18e4e449e360f7efe5d3a328bbe \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/legacy_float_margin.png.sha1 b/chromium/docs/website/site/blink/layoutng/legacy_float_margin.png.sha1
deleted file mode 100644
index f63c74c31ef..00000000000
--- a/chromium/docs/website/site/blink/layoutng/legacy_float_margin.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f8121274b9d56f615a923494c27aa132671d0173 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/legacy_float_overlap.png.sha1 b/chromium/docs/website/site/blink/layoutng/legacy_float_overlap.png.sha1
deleted file mode 100644
index be3da51a0f0..00000000000
--- a/chromium/docs/website/site/blink/layoutng/legacy_float_overlap.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-02be5b4abf948edc75b9cd8fac17744a4e9a628c \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/legacy_shape.png.sha1 b/chromium/docs/website/site/blink/layoutng/legacy_shape.png.sha1
deleted file mode 100644
index e472226d4db..00000000000
--- a/chromium/docs/website/site/blink/layoutng/legacy_shape.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-db3e05b9b8fd46a71634ec65ca073e0a9eba6d38 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/ng_ar_wrap.png.sha1 b/chromium/docs/website/site/blink/layoutng/ng_ar_wrap.png.sha1
deleted file mode 100644
index bc262ec2a59..00000000000
--- a/chromium/docs/website/site/blink/layoutng/ng_ar_wrap.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c339b8ef2467d9dd3a2d46a83685f739d4029a0e \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/ng_dlig_jp.png.sha1 b/chromium/docs/website/site/blink/layoutng/ng_dlig_jp.png.sha1
deleted file mode 100644
index c6472674fa3..00000000000
--- a/chromium/docs/website/site/blink/layoutng/ng_dlig_jp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-483fb7cd1b597324a9659af3ebf751c7eaf14ff8 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/ng_float_margin.png.sha1 b/chromium/docs/website/site/blink/layoutng/ng_float_margin.png.sha1
deleted file mode 100644
index 93ae27670e9..00000000000
--- a/chromium/docs/website/site/blink/layoutng/ng_float_margin.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-be07dc29ac991ced4a945a78e4c7d5edf3060f0f \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/ng_float_overlap.png.sha1 b/chromium/docs/website/site/blink/layoutng/ng_float_overlap.png.sha1
deleted file mode 100644
index fda24e9ed89..00000000000
--- a/chromium/docs/website/site/blink/layoutng/ng_float_overlap.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cb98cf5749d6afa42dc821acd075db6eaa634913 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/layoutng/ng_shape.png.sha1 b/chromium/docs/website/site/blink/layoutng/ng_shape.png.sha1
deleted file mode 100644
index f440bf9938b..00000000000
--- a/chromium/docs/website/site/blink/layoutng/ng_shape.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f797e81520a319f4e00ef89d37f076269e928353 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/memory-team/index.md b/chromium/docs/website/site/blink/memory-team/index.md
deleted file mode 100644
index 412a634e598..00000000000
--- a/chromium/docs/website/site/blink/memory-team/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: memory-team
-title: Memory Team
----
-
-## Goals
-
-* [Memory team OKRs](https://easyokrs.googleplex.com/edit/memory-dev/)
- (Google-internal only)
-
-## Projects
-
-* Shipping Oilpan
- ([Overview](https://docs.google.com/document/d/1_zHanQ8o1lZt1NA_X_2Uo4Tk_wXEkik5JXs8nSSu2Rs/edit#heading=h.ljp56sfuikn2),
- [Weekly
- status](https://docs.google.com/document/d/1E9NxBmI6FRZ9AgGKhcTcyYV4_19WutY-KgbqBcIoHgI/edit?pli=1))
-* Memory reduction in Blink
- ([Overview](https://docs.google.com/presentation/d/1soWvmqxWuZQ_ZchvPZFgf5frAQBBlq5f2tJTuDDPZI8/edit#slide=id.g437b0e633_00),
- [Weekly
- status](https://docs.google.com/document/d/1Ss64pHLncbpmkmQcWqdL7fiPAH0oy_5XSvjBO3aXf60/edit#heading=h.edmjmaqgarcl))
-* Instant tab restore
- ([Overview](https://docs.google.com/document/d/1tOgHctJ1Pwdf0U2n7_y9ZDrpLehy4MKpIxjJPj9J33c/edit?pli=1),
- [Weekly
- status](https://docs.google.com/document/d/1Vni5m6ohMBkgZFgwI6jjEx-qWUN-4_o7rybyZ330jPY/edit#))
-
-We're sending weekly snippets to
-[blink-dev@](https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev)
-(Search "memory team snippet").
-
-## Members
-
-haraken@chromium.org (TL)
-bashi@chromium.org
-hajimehoshi@chromium.org
-keishi@chromium.org
-kouhei@chromium.org
-peria@chromium.org
-sigbjornf@opera.com
-tasak@chromium.org
-tzik@chromium.org
-yukishiino@chromium.org
-yutak@chromium.org
-Contact project-trim@chromium.org if you have any feedback or questions. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/origin-trials/index.md b/chromium/docs/website/site/blink/origin-trials/index.md
deleted file mode 100644
index 219f5bcb8aa..00000000000
--- a/chromium/docs/website/site/blink/origin-trials/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: origin-trials
-title: Origin Trials
----
-
-Origin trials are an approach to enable safe experimentation with web platform
-features. For more, see <https://github.com/GoogleChrome/OriginTrials>.
-
-Googlers should also refer to the internal documentation at
-[go/origin-trials](http://goto.google.com/origin-trials).
-
-<div class="two-column-container">
-<div class="column">
-
-**For Blink Contributors / Feature Authors**
-
-So, you're a Blink contributor, and maybe want to run an origin trial for your
-feature? Please see our [Feature Author
-Guide](/blink/origin-trials/running-an-origin-trial).
-
-</div>
-<div class="column">
-
-**For Web Developers**
-
-Please see our [Web Developer
-Guide](https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/developer-guide.md).
-
-**Links**
-
-* Do you have a trial token, but not sure if it's working? We have a
- [page to check
- tokens](https://googlechrome.github.io/OriginTrials/check-token.html).
-* [Current
- Trials](https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/available-trials.md)
-* [Completed
- Trials](https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/completed-trials.md)
-
-</div>
-</div>
-
-Questions or comments? Contact us at
-[experimentation-dev@chromium.org](mailto:experimentation-dev@chromium.org). \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/origin-trials/portals/DevTools_Breakpoint_Workaround.png.sha1 b/chromium/docs/website/site/blink/origin-trials/portals/DevTools_Breakpoint_Workaround.png.sha1
deleted file mode 100644
index 730133d330b..00000000000
--- a/chromium/docs/website/site/blink/origin-trials/portals/DevTools_Breakpoint_Workaround.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-508a4fe2de80b2266e2a33cf381ffc00a8f419c1 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/origin-trials/portals/consolewarning.png.sha1 b/chromium/docs/website/site/blink/origin-trials/portals/consolewarning.png.sha1
deleted file mode 100644
index 94ebe2abf8a..00000000000
--- a/chromium/docs/website/site/blink/origin-trials/portals/consolewarning.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fcfeb2ef0af1c445f0d4fd4a9ade0d68a46c2e04 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/origin-trials/portals/index.md b/chromium/docs/website/site/blink/origin-trials/portals/index.md
deleted file mode 100644
index 2cf0a4c7bb7..00000000000
--- a/chromium/docs/website/site/blink/origin-trials/portals/index.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/origin-trials
- - Origin Trials
-page_name: portals
-title: Portals
----
-
-**This origin trial is [now
-available](https://developers.chrome.com/origintrials/#/view_trial/-7680889164480380927).**
-
----
-
-Google Chrome is running an [origin
-trial](https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/developer-guide.md)
-to give developers an opportunity to experiment with the
-[Portals](https://web.dev/hands-on-portals/) feature that we are working on, and
-gather feedback about how we can make it better.
-
-## This experiment will begin in Chrome 85 and end after Chrome 86. During this experiment, you can use an origin trial token to experiment with using portals to load same-origin content (i.e. content served from the same origin as the main page).
-
-## Frequently Asked Questions
-
-### How do I sign up?
-
-### Go to the [Origin Trials developer console](https://developers.chrome.com/origintrials/#/view_trial/-7680889164480380927).
-
-Your tokens will periodically expire and need to be renewed using this console.
-
-### How can I provide feedback?
-
-Thanks for asking! When you renew your origin trial token, we’ll ask for your
-feedback. This is the best place to explain how you’re using portals, what’s
-working well, and what isn’t.
-If you find bugs in Chrome’s implementation (for example, Chrome crashes when
-you use portals), please [file a Chromium bug](https://crbug.com/new). Make sure
-to mention Portals in your report so that the bug is triaged appropriately.
-
-If you identify specific issues with the [CG draft
-specification](https://wicg.github.io/portals/) or the design of the feature
-(for example, if it’s difficult to achieve the effect you’re looking for using
-the available API), please [file a spec
-issue](https://github.com/WICG/portals/issues/new).
-
-I've noticed some differences between what Chrome does and what the explainer
-and/or spec say. What gives?
-
-We apologize for the inconvenience: both are a work in progress.
-
-In some places, the Chrome implementation contains features which haven't been
-incorporated into the spec. For example:
-
- the &lt;portal&gt; element fires a [load
- event](https://github.com/WICG/portals/issues/26) similar to &lt;iframe&gt;
-
- portal activation [can fail in some cases that aren't yet
- explained](https://github.com/WICG/portals/issues/185), for example because
- the page has not yet loaded or failed to load
-
- a portal is a single object as seen by screen readers and other
- accessibility tools, and in this regard is more similar to a link or button
- than a frame
-
- The Chrome implementation integrates with session history and the back
- button, but this is not yet explained or specified.
-
-In other places, the explainer discusses changes we have not yet implemented in
-Chrome. For example:
-
- the explainer discusses cross-origin portals, which are not permitted during
- this origin trial
-
- integration with document.requestStorageAccess is alluded to, but not
- currently implemented in Chrome
-
- some changes to how portals are sized and how they interact with rendering
- and visibility APIs are explained in the API, but currently in Chrome
- &lt;portal&gt; elements behave in the same way as &lt;iframe&gt;
-
- The explainer alludes to integration with feature policy via the allow=""
- attribute, but this is not yet implemented in Chrome
-
-### Why was the page blocked from loading in a portal?
-
-For the duration of this experiment, pages are only permitted to load URLs that
-match their origin. This means that the scheme (http or https), full hostname
-(including subdomains) and port (if specified) must match. This restriction
-applies to any URLs encountered by following redirects, and any navigations that
-occur after loading within the portal.
-
-If your content attempts to load a cross-origin URL in a portal, it will be
-blocked and the previously loaded page, if any, will be displayed instead.
-
-When this happens, a warning will be logged to the developer console, including
-the origin of the URL that was blocked.
-
-[<img alt="Navigating a portal to cross-origin content (from
-https://www.example.com) is not currently permitted and was blocked."
-src="/blink/origin-trials/portals/consolewarning.png">](/blink/origin-trials/portals/consolewarning.png)
-
-Your load may also be blocked for other reasons. If either document has a
-[Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)
-that does not permit embedding, Chrome will respect it. For example, if the URL
-to be loaded in the portal has a
-[frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
-directive that does not include self (or your origin), the load will be blocked.
-
-### I was already using Portals, and I started seeing that warning message. What gives?
-
-First, thanks for trying out Portals! If Portals were previously working for
-you, you are a developer who has previously turned on the Portals feature flag.
-(Note that this is not recommended in your main browser, just in your
-development environment where you're experimenting with Portals.)
-
-This origin trial allows developers like you to enable Portals for Chrome users.
-Since this experiment does not yet cover loading cross-origin content, we've
-changed the default behavior to be limited to same-origin content. To return to
-allowing cross-origin content, enable the cross-origin portals flag via
-chrome://flags/#enable-portals-cross-origin or run Chrome with the command-line
-switch --enable-features=PortalsCrossOrigin.
-
-### I'm seeing a warning that a &lt;portal&gt; was moved to a document where it was not enabled. What does that mean?
-
-The origin trial enables the portals feature only for documents that supply an
-origin trial token. If you attempt to make a portal element and then insert it
-into another document, it will not be able to function correctly in that
-document.
-
-### Why can’t I use this from a local file:// URL?
-
-Portals is a powerful feature, and we need to be able to establish the origin of
-the content, and of the content it is loading in a portal, in order to ensure
-that it is used safely. Unfortunately this means that you will need to run an
-HTTP server in order to experiment with portals.
-
-## Known Issues
-
-### Breakpoints set in portalactivate event handlers don't pause execution
-
-When inspecting a page using Chrome DevTools (*Ctrl + Shift + I* or *Right Click
-+ Inspect*), execution doesn't pause for breakpoints set inside a portalactivate
-event handler after a portal activates. As a workaround, you can either use
-console debugging, or inspect the portal page through chrome://inspect/#pages
-before activation and set a breakpoint there. Breakpoints set when inspecting
-pages through chrome://inspect work correctly, so they should also work when
-using remote debugging (chrome://inspect/#devices) to debug a page running on a
-remote device. This issue is tracked [here](https://crbug.com/1025761).
-
-[<img alt="Image showing chrome://inspect#pages"
-src="/blink/origin-trials/portals/DevTools_Breakpoint_Workaround.png" height=203
-width=400>](/blink/origin-trials/portals/DevTools_Breakpoint_Workaround.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/origin-trials/running-an-origin-trial/index.md b/chromium/docs/website/site/blink/origin-trials/running-an-origin-trial/index.md
deleted file mode 100644
index 4ca9328fe20..00000000000
--- a/chromium/docs/website/site/blink/origin-trials/running-an-origin-trial/index.md
+++ /dev/null
@@ -1,344 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/origin-trials
- - Origin Trials
-page_name: running-an-origin-trial
-title: Running an Origin Trial
----
-
-*For the full context on origin trials, please see the
-[explainer](https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/explainer.md).
-This is the feature author guide for Blink contributors.*
-
-Here, we describe what is involved in running an origin trials experiment for a
-new browser feature. Most importantly, origin trials are integrated into the
-[launch process for new web platform features](/blink/launching-features). You
-should be following that overall process (maybe you ended up here from that
-page).
-
-[TOC]
-
-## Should you run an origin trial?
-
-Origin trials are intended to be used to ensure we design the best possible
-features by getting feedback from developers before the standard is finalized.
-They may also be used to prove developer interest in a feature proposal that is
-otherwise undesired due to an expected lack of interest. Typically, you should
-have a specific hypothesis that you wish to test by collecting data.
-
-If you answer “yes” to any of the following questions, you should consider
-running an origin trial (see caveat in \[1\]).
-
-* Is there disagreement about how well this API satisfies its intended
- use case?
-* Are you unsure about what API shape will be the most ergonomic in
- real world scenarios?
-* Is it hard to quantify performance gains without testing on real
- world sites?
-* Is there a reason that this API needs to be deployed to real users,
- rather than behind a flag, for data to be meaningful?
-
-\[1\] Origin trials should be run for a specific reason. These questions are
-guidance to identifying that reason. However, there is still debate about the
-right reasons, so the guidance may change. You can join the conversation in
-[this
-doc](https://docs.google.com/document/d/1oSlxRwsc8vTUGDGAPU6CaJ8dXRdvCdxvZJGxDp9IC3M/edit#heading=h.eeiog2sf7oht).
-
-*If you're planning to run an origin trial please contact the origin trials team
-(OT team) to quickly talk over your feature and the reason for running the
-trial.* You can email
-[experimentation-dev@chromium.org](mailto:experimentation-dev@chromium.org) or
-[chasej@chromium.org](mailto:chasej@chromium.org). Google employees can
-alternatively contact
-[origin-trials-core@google.com](mailto:origin-trials-core@google.com).
-
-## How do origin trials work in Chrome?
-
-The framework will enable features at runtime, on a per-execution-context basis
-(practically, this will be per-document or per-worker). Features are disabled by
-default, and only be enabled if a properly signed token, scoped to the origin
-that it is being presented on, and scoped to the specific feature name, is
-present in either:
-
-* an HTTP Origin-Trial header in the server response,
-* an HTML &lt;META&gt; tag in the document's head, or
-* (for Dedicated Workers only) the HTTP response or document head of
- the parent document.
-
-The logic for enabling includes a check of your [runtime feature
-flag](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/RuntimeEnabledFeatures.md)
-(even if the origin trials framework isn't being used). This means you can
-easily test your feature locally, even without any trial tokens.
-Origin trials are being enabled in documents (for both inline and external
-scripts), and in service, shared, and dedicated workers. (Note that for service
-workers and shared workers, HTTP headers are the only way to enable trials.
-Dedicated workers will also inherit any trials enabled by their parent
-document).
-If an experiment gets out of hand (*way* too popular to be an experiment
-anymore, for instance), we’ll be able to turn it off remotely, for all origins.
-Similarly, if there turns out to be major problems with the implementation of
-the framework itself, we’ll be able to turn it off completely, and disable all
-trials. (Hopefully we don’t have to do that, but we're still in the early stages
-of origin trials, and we’re being careful.)
-
-## Is your feature ready to be an origin trial?
-
-Before running an origin trial experiment, your feature needs to be ready for
-both web developers and users. Your feature must satisfy the following:
-
-* Have an explainer for your feature
- * There needs to be a description of the problems and use cases
- the feature is intended to address.
-* Have a draft spec for your feature
- * Ideally this would be in the form of an actual spec -- or PR
- against an existing spec -- in the format expected by the
- eventual standards body (although the draft might be hosted
- elsewhere while discussions are ongoing), but a detailed
- explainer laying out all the details may suffice. The level of
- detail needs to be enough so that (a) developers participating
- in the origin trial know how it works, and (b) spec editors for
- the relevant eventual specifications can see exactly how it
- would affect that spec when added.
-* Be approved by the internal Chrome launch review process
- * Users may be exposed to your feature without opting in, so the
- appropriate measures must be taken for privacy, security, etc.
-* Have a way to remotely disable the feature
- * Origin trials provides infrastructure to disable a feature (or a
- specific origin), but this only applies to the exposure as an
- origin trial. That means, any interface(s) controlled by the
- trial will be disabled, but it will still be possible to enable
- the feature via its runtime flag. As well, all of the token
- validation/revocation happens in the renderer.
- * If the previous point is not sufficient for disabling the
- feature, you should implement a kill switch that allows your
- feature to be disabled remotely via Finch.
- * This can use the existing functionality in
- PermissionContextBase or base::FeatureList, or be a
- feature-specific implementation.
- * Consult the Chrome feature launch process for [guidance for a
- feature
- flag](https://docs.google.com/document/d/1hJ1U8-7DNa7lGfTJWRgSgqQyNnOFO4Ks5Czr1-3--8I/edit#bookmark=id.xgrabupypw8w)
- (Googlers only). If you would launch your feature by default
- with a flag, then you should implement one for the origin trial.
-* Have UMA metrics to track feature usage
- * You should record usage with
- [UseCounter](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/frame/use_counter.h),
- as that can be automatically monitored by the origin trials
- infrastructure.
- * The feature must have a corresponding entry in the enum
- [WebFeature](https://cs.chromium.org/chromium/src/third_party/blink/public/mojom/web_feature/web_feature.mojom).
- * For any JavaScript-exposed API, usage can be recorded easily via
- one of the
- [\[Measure\]](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md#Measure_i_m_a_c)
- or
- [\[MeasureAs\]](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md#measureas_i_m_a_c)
- IDL attributes.
- * If not exposed via IDL, the appropriate UseCounter::count\*()
- method can be used directly from your feature implementation.
- * If it's not feasible to integrate with UseCounter (e.g. usage is
- best tracked outside a renderer, .etc), please contact the OT
- team.
-* Have an established community for discussion of the feature
- * At a minimum, this should be a WICG group, Github repo, etc.
- Anywhere developers can find discussion or log issues about your
- feature.
- * The origin trials system will facilitate collecting feedback
- from web developers. However, the goal is to have web developers
- participate in the existing community around the feature.
-* Prepared a blog post/article/landing page introducing the feature
- * There needs to be single link that will provide details about
- the feature.
- * Should make it clear how developers provide feedback/log issues
- for your feature.
- * This could be the README.md in your Github repo, or any other
- page of your choice.
- * Should include details about availability via origin trials.
-
-## What is the timeline for running a trial and collecting feedback?
-
-Please see our [overview of the timeline for running a trial and collecting
-feedback](https://docs.google.com/document/d/1ttgWkpQUtlJy0Q5HhXdaPKs2DHfITbNwLqtNRxqdKMI/edit).
-Contact
-[experimentation-dev@chromium.org](mailto:experimentation-dev@chromium.org) with
-any questions.
-
-## What is the actual process to run an origin trial?
-
-First review the [Blink launch process](/blink/launching-features). Please
-contact
-[experimentation-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/experimentation-dev)
-with any questions about these steps. If you don't have access to any of the
-links below, the mailing list can help find someone to guide you.
-Running an origin trial requires the following:
-
-* Make sure your feature is ready to run an origin trial experiment
- ([see
- above](/blink/origin-trials/running-an-origin-trial#is-feature-ready)).
-* Email
- [experimentation-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/experimentation-dev)
- letting them know you plan to run an origin trial.
-* Review
- [go/ChromeLaunchProcess](https://goto.google.com/ChromeLaunchProcess)
- and determine what launch approvals you require.
-* Integrate with the origin trials framework ([see
- below](/blink/origin-trials/running-an-origin-trial#integrate-feature)).
-* Send an [Intent to Experiment](/blink/launching-features), via the
- [ChromeStatus entry for your feature](https://chromestatus.com/).
-* Request a trial for your feature at
- [go/new-origin-trial](http://goto.google.com/new-origin-trial).
- * This will ensure your trial is tracked correctly in
- [go/origin-trials-feature-pipeline](http://goto.google.com/origin-trials-feature-pipeline/).
-* Land the feature in Chrome prior to beta.
-* Engage with external partners or large-scale developers for early
- testing.
- * Some issues may only found during large-scale use, so should be
- tested even before beta (if possible).
- * If feasible, this could include doing your own testing within
- the developer's environment (any of test/staging/production).
- * For an example, see [crbug.com/709211](http://crbug.com/709211).
-* Publish a blog post on
- [developers.google.com/web/updates](http://developers.google.com/web/updates)
- about the feature when it lands beta.
- * The OT team will add your feature to the [public developer
- console](https://developers.chrome.com/origintrials).
- * [See
- below](/blink/origin-trials/running-an-origin-trial#add-to-signup-form)
- for more details.
-* Update the feature's entry on
- [chromestatus.com](https://www.chromestatus.com/) to set the status
- to "Origin trial".
-* You can review the developer registrations for your feature (and
- renewals) by following the instructions in the [feature author
- guide](https://goto.google.com/running-an-origin-trial).
- * In particular, be aware of any registrations that expect
- &gt;10,000 page views per day to be using the feature
-
-Note that these steps are not meant to be sequential. For example, you can
-certainly start integrating your feature with origin trials prior to getting
-various launch approvals.
-
-### Adding your feature to the public developer console
-
-The configuration of a trial in the [developer
-console](https://developers.chrome.com/origintrials) requires basic information,
-including some public landing page/documentation link ([see
-above](/blink/origin-trials/running-an-origin-trial#is-feature-ready)). In some
-cases, this may seem like a chicken-and-egg problem. For example, you may not
-want to publish a blog post until the feature is ready for developers. If the
-blog post has detailed information on joining the origin trial, it doesn't make
-sense to publish and have web developers unable to register. Fortunately, a
-trial can be configured in the developer console in advance, separately from
-making it available to the public.
-
-Recommended process:
-
-* Request setup of the trial with an interim documentation link (e.g.
- the README from the GitHub repo).
- * The OT team can configure the trial in the developer console
- (without making in public), and provide a permanent link to the
- trial detail page.
-* Publish the blog post for the feature when the beta release is
- available.
- * Include instructions about the origin trial, and a link to
- either (1) the list of available trials or (2) the detail page
- for your trial.
-* Notify the OT team with the final link to the blog post.
- * The link will be updated in the developer console and recorded
- in
- [go/origin-trials-feature-pipeline](http://goto.google.com/origin-trials-feature-pipeline/).
-* Notify the OT team when the trial is ready for registration.
- * OT team will activate the trial to make it available to the
- public.
-
-## How long do Origin Trials typically last?
-
-Historically, origin trials have typically lasted 3 milestones (~18 weeks).
-We've typically capped extensions to origin trials at 6 milestones total (~36
-weeks), unless presented with evidence that the risk of burn in is low; changes
-to the API surface, etc).
-
-With the [shift to 4 week release
-cycles](https://blog.chromium.org/2021/03/speeding-up-release-cycle.html), we
-plan for origin trials to typically last 4 milestones (~16 weeks), with a cap of
-9 milestones (~36 weeks) absent compelling evidence.
-
-## What is the process to extend an origin trial?
-
-Origin trials are not intended as a mechanism for shipping a feature early
-without following the full launch process. This is one of the reasons that each
-trial has a predefined end date (rather than running indefinitely until the
-feature ships). That said, there are situations where it is beneficial to allow
-experimentation to continue beyond the planned end date of the trial.
-
-There two general cases where experimentation may continue beyond the planned
-end date:
-
-1. Unexpected delays in releasing
- * With the 6 week Chrome release cycle, code may not land in the
- intended release, meaning it is not shipped until the subsequent
- release. Alternatively, the code may land in the release, but
- the Chrome stable rollout is delayed, meaning it not
- available/installed until much later than expected. When a trial
- typically runs for 18 weeks (3 Chrome releases), such delays can
- significantly impact the availability of the experimental
- feature and the ability to collect sufficient data. For features
- that transition from origin trial to shipping in consecutive
- releases, the unavailability of the feature might extend well
- beyond the intended 1 week gap.
-2. Feature changes or new areas experimentation
- * As the origin trial progress, you may determine that a feature
- is not ready to be shipped, but do want to continuing
- experimenting. For example, feedback indicates that changes are
- needed to the feature (especially in API surface), but the
- changes would benefit from further feedback. In other cases, the
- hypothesis for the experiment may be proved or disproved, but
- you uncover new hypotheses for experimentation.
-
-Consult with the OT team to figure out if you're in a situation where it makes
-sense to continue experimenting. For unexpected delays (1), this generally means
-requesting an extension to the trial end date, which generally should not be
-more than 3-4 weeks. For feature changes and such (2), this generally means
-starting a new origin trial, to follow the previous trial.
-
-### How to setup an extension or continued experiment?
-
-The process is as follows:
-
-* If desired, email
- [experimentation-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/experimentation-dev)
- to consult on the appropriate approach. If there are sensitive
- details, Googlers can contact
- [origin-trials-core@google.com](mailto:origin-trials-core@google.com).
-* Send an Intent to Extend Origin Trial, via the [ChromeStatus entry
- for your feature](https://chromestatus.com).
-* Wait for 1 LGTM from at least one API owner (similar to the original
- Intent to Experiment)
-* If continuing to experiment via a new trial:
- * This will officially be a new and separate trial, meaning a
- separate entry in the list of trials, etc.
- * Request another trial at
- [go/new-origin-trial](http://goto.google.com/new-origin-trial),
- with the appropriate naming to distinguish the old and new
- trial.
- * Update the integration with the framework - the code must use a
- different trial name in Chromium ([see integration
- below](/blink/origin-trials/running-an-origin-trial#integrate-feature)).
-* If extending the end date of the existing trial:
- * Notify the OT team of the change at
- [go/extend-origin-trial](http://goto.google.com/extend-origin-trial).
-* Upon approval, the OT team will setup the extension or new trial as
- appropriate.
-
-## How to integrate your feature with the framework?
-
-The integration instructions now live in the Chromium source repo:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/origin_trials_integration.md>
-
-## Roadmap
-
-All of this may change, as we respond to your feedback about the framework
-itself. Please let us know how it works, and what's missing!
-To follow the most up-to-date progress and plans, filter in crbug.com for
-“[component:Internals&gt;OriginTrials](https://bugs.chromium.org/p/chromium/issues/list?q=component:Internals%3EOriginTrials)”. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/platform-predictability/compat-tools/index.md b/chromium/docs/website/site/blink/platform-predictability/compat-tools/index.md
deleted file mode 100644
index 6c0dd743a9c..00000000000
--- a/chromium/docs/website/site/blink/platform-predictability/compat-tools/index.md
+++ /dev/null
@@ -1,163 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/platform-predictability
- - Web Platform Predictability
-page_name: compat-tools
-title: Web compat analysis tools
----
-
-When deprecating or changing web-exposed behavior, it's often important to get a
-clear understanding of the compatibility impact. We have a variety of tools
-available to you depending on the scenario. This page is designed to help you
-choose the appropriate tool (in decreasing order of usage). For questions and
-discussion, e-mail
-[feature-control@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/feature-control).
-
-## UseCounter
-
-[UseCounter](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/use_counter_wiki.md)
-is a framework in Blink which is used to record per-page anonymous aggregated
-metrics on feature usage, often via the [\[Measure\] idl
-attribute](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md#Measure_i_m_a_c).
-Results are shown publicly on
-[chromestatus.com](https://www.chromestatus.com/metrics/feature/popularity) (for
-the [dominant milestone per
-day](https://github.com/GoogleChrome/chromium-dashboard/issues/279)) . More
-detailed break-downs are available to Google employees via the
-[Blink.UseCounter.Features histogram using a formula with the PageVisits bucket
-in the denominator](https://goto.google.com/uma-usecounter). Internally it's
-also possible to look at UseCounter by the [fraction of users that hit it at
-least once in a day](https://goto.google.com/uma-usecounter-peruser), and
-UseCounters [hit within Android
-WebView](https://goto.google.com/uma-usecounter-webview). In the vast majority
-of cases, compat tradeoffs are made entirely based on public UseCounter data.
-
-**Pros:**
-
-* Reflects real Chrome usage - should be the primary source of all
- compat discussions in blink
-* Has huge coverage - reflects a wide fraction of all usage of Chrome
-
-**Cons:**
-
-* Requires at least a couple weeks to get any useful data (several
- months to roll out to stable)
-* Biased against scenarios where UMA tends to be disabled more often
- (eg. enterprises)
-* Can't be publicly used to get specific URLs. However, Googler's are
- starting to be able to do this internally with
- [CrUX](https://developers.google.com/web/tools/chrome-user-experience-report/)
- data ("UKM"). While limited for privacy reasons, it's already
- proving quite useful.
-
-## Simple web search
-
-Often it's useful to find examples of specific coding patterns in order to
-understand the likely failure modes and formulate migration guidance. Use
-technical web search engines like [nerdydata.com](https://nerdydata.com), or for
-problems in specific libraries, ranking sites like
-[libscore.com](https://libscore.com).
-
-**Pros:**
-
-* Simple, easy to use
-* Results in specific URLs for further analysis
-
-**Cons:**
-
-* Strictly a dumb static search, can't reliably find all uses of an
- API (especially due to Javascript minifiers which generate code like
- "a\[b\]()").
-
-## The HTTP Archive
-
-A slightly more advanced form of static web search is to use the [HTTP
-Archive](http://httparchive.org/), a database of the top 500k websites, updated
-by a crawl twice a month. See [HTTP Archive for web compat decision
-making](https://docs.google.com/document/d/1cpjWFoXBiuFYI4zb9I7wHs7uYZ0ntbOgLwH-mgqXdEM/edit#heading=h.1m1gg72jnnrt)
-for details on using it for compat analysis.
-
-**Pros:**
-
-* Can provide an absolute measure of risk ("only 10 sites in the top
- 500k appear to use this API").
-* Now [includes UseCounter
- data](https://groups.google.com/a/chromium.org/forum/#!topic/blink-api-owners-discuss/uxwEuxCRfGA),
- so can go beyond simple static search to some dynamic behavior
-
-**Cons:**
-
-* Only captures behavior triggered during page load
-* Only reflects the home page of the top 500k sites
-* Analysis is more involved
-
-## Microsoft's CSS Usage Data
-
-[CSS usage on the web
-platform](https://developer.microsoft.com/en-us/microsoft-edge/platform/data/)
-is "from a Bing-powered scan" of lots of pages, and measures both CSS properties
-and values. (Chrome use counters generally don't exist for values.)
-
-## GitHub and stackoverflow deprecation warning search
-
-Once a deprecation warning has been landed (or made it to stable), it can be
-[extremely
-informative](https://groups.google.com/a/chromium.org/forum/#!topic/intervention-dev/_0eSO-NjULo)
-to search [GitHub](https://github.com/) issues (or other developer help sites
-like [stackoverflow.com](https://stackoverflow.com/)) for discussion of the
-warning generated on the console (eg. by searching for the chromestatus ID
-present in the warning).
-
-**Pros:**
-
-* Helps identify the real-world pain experienced by developers
-* Provides an avenue for outreach, and can [build
- goodwill](https://twitter.com/jgwhite/status/832517528899448832)
-
-**Cons:**
-
-* Long turn-around time
-* Lossy - absence of signal doesn't really indicate an absence of risk
-
-## GitHub code search
-
-Most of the popular libraries and frameworks are present on GitHub.
-[Searching](https://github.com/search) for potentially impacted code can be
-useful in better understanding the risk.
-
-**Pros:**
-
-* Provides unobfuscated access to code
-* Provides an avenue to engage with developers to better understand
- their use cases and their ability to apply mitigations.
-
-**Cons:**
-
-* Doesn't provide much signal on magnitude of impact
-* Supports only either simple static searches.
-
-## On-demand crawl
-
-Occasionally it's useful to search top sites for a specific behavior (without
-landing a UseCounter and waiting for the data to show up in HTTP Archive). For
-advanced cases like this we can run a custom chromium build on the [telemetry
-cluster](/developers/cluster-telemetry) to crawl the top 10k (or more) sites and
-record whatever we like (with a temporary UseCounter). See [Using Cluster
-Telemetry for UseCounter
-analysis](https://docs.google.com/document/d/1FSzJm2L2ow6pZTM_CuyHNJecXuX7Mx3XmBzL4SFHyLA/edit#)
-for details.
-
-**Pros:**
-
-* Can have fast turn-around time (hours)
-* Usually used just for page load, but can be extended to trigger
- other interactions (scroll, clicking on links, etc.).
-
-**Cons:**
-
-* Limited scope
-* Complicated and brittle. Relies on some changes to telemetry that
- cannot currently be landed. Generally found not to be worth the
- effort compared to the alternatives above. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/platform-predictability/index.md b/chromium/docs/website/site/blink/platform-predictability/index.md
deleted file mode 100644
index c6ac9cb7643..00000000000
--- a/chromium/docs/website/site/blink/platform-predictability/index.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: platform-predictability
-title: Web Platform Predictability
----
-
-Web developers say a big problem building for the web is all the surprises they
-hit where something doesn't work the way they expected. The Chromium project
-(along with other browsers and standards organizations) has long invested
-heavily in reducing these problems. But we've lacked a coordinated effort to
-track and improve the whole area.
-
-The Web Platform Predictability project is an effort to make developing for the
-web more predictable, and as a result more enjoyable, cost-effective and
-competitive with native mobile platforms. In particular, we intend to focus
-primarily on problems caused by:
-
-* Different browsers / platforms behaving differently
- (interoperability)
-* Behavior changing from one version of a browser to another
- (compatibility)
-* APIs with surprising side effects or subtle behavior details
- (footguns)
-
-For details see:
-
-* [BlinkOn 7: Platform
- Predictability](https://docs.google.com/presentation/d/1pfu-wAxbkVN41Zgg9P3ln9tJB9AwKh9T3btyWvd17Rk/edit),
- and
- [web-platform-tests](https://docs.google.com/presentation/d/1s2Dick89wvJsuNJb4ia3pPt84NtMv8rZr0E_GFXJLrk/edit#slide=id.p)
-* Chrome Dev Summit: [Predictability for the
- Web](http://www.slideshare.net/robnyman/predictability-for-the-web/)
- talk ([video](https://youtu.be/meAl-s77DuA))
-* [Platform Predictability vision
- document](https://drive.google.com/open?id=1jx--r4elUfTP2EGo27UPGncLTAIW3ExF7N2JL7sjki4)
-* [BlinkOn 6: Web Platform
- Predictability](https://docs.google.com/presentation/d/1umK4QkfCvzicHVJKLNo2yDRyWSqQEamavW9QVFmugNY/edit)
- talk
- ([video](https://www.youtube.com/watch?v=ipfPyM-Kwyk&feature=youtu.be))
-* [Predictability mailing
- list](https://groups.google.com/a/chromium.org/forum/#!forum/platform-predictability)
-* [Ecosystem Infrastructure team
- charter](https://docs.google.com/document/d/1MgcisuMnvh3z6QNIjDSvRbt4uoNtmI_cljcQkGXzNQ8/edit)
- and [mailing
- list](https://groups.google.com/a/chromium.org/forum/#!forum/ecosystem-infra):
- the chromium team driving most of the interop-related work
-
-## The difficulties of web development
-
-* [The Double-Edged Sword of the
- Web](https://ponyfoo.com/articles/double-edged-sword-web)
-* [The Fucking Open
- Web](https://hueniverse.com/2016/06/08/the-fucking-open-web/)
-* [10 things I learned from reading (and writing) the PouchDB
- source](https://pouchdb.com/2014/10/26/10-things-i-learned-from-reading-and-writing-the-pouchdb-source.html)
-* [(Web) Development Sucks, and It's Not Getting Any
- Better](http://blog.dantup.com/2014/05/web-development-sucks-and-its-not-getting-any-better/)
-* [Make the Web Work For
- Everyone](https://hacks.mozilla.org/2016/07/make-the-web-work-for-everyone/)
-
-## Advice for Blink developers
-
-* Blink's mission is to make the web better, fight the temptation to
- focus narrowly on just making Chrome great!
-* Prefer [web-platform-test changes in your
- CLs](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_platform_tests.md)
- over web_tests changes where practical
-* What matters to web developers is eliminating surprises, so focus on
- [pragmatic paths to
- interop](https://docs.google.com/document/d/1LSuLWJDP02rlC9bOlidL6DzBV5kSkV5bW5Pled8HGC8/edit)
- that maximize web compat. If 3+ engines violate a spec in the same
- way, the bug is probably in the spec (especially when changing the
- engines would break websites). Specs are much easier to change than
- multiple implementations!
-* For breaking changes, reach out to
- platform-predictability@chromium.org for advice or read the [Blink
- principles of web compatibility](https://bit.ly/blink-compat)
-* Prioritize bugs in your areas that reflect real developer pain - eg.
- [those most
- starred](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component:Blink&sort=-stars&colspec=ID%20Stars%20Pri%20Status%20Component%20Opened%20Summary),
- [recent
- regressions](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=type%3Dbug-regression+pri%3D0%2C1+component%3Ablink+opened-after%3Atoday-60&colspec=ID+Pri+Mstone+ReleaseBlock+OS+Area+Feature+Status+Owner+Summary&x=m&y=releaseblock&cells=tiles).
-* Understand how your feature behaves on [all major
- browsers](https://browserstack.com/), file bugs for differences (on
- specs, other engines and/or blink).
-* Make sure new APIs have feedback from several real world web
- developers.
-* Get to know your peers on other engines, you'll be surprised how
- well your goals and interests are aligned!
-
-## Relevant issue trackers
-
-* Chromium Hotlist-Interop: key bugs that impact interoperability
- * Useful queries:
- [untriaged](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Hotlist%3DInterop+status%3Duntriaged%2Cunconfirmed&sort=&groupby=&colspec=ID+Pri+Component+Status+Owner+Summary+Modified&nobtn=Update),
- [high
- priority](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Hotlist%3DInterop+pri%3D0%2C1&colspec=ID+Pri+Component+Status+Owner+Summary+Modified&x=m&y=releaseblock&cells=ids),
- [most
- starred](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Hotlist=Interop&sort=-stars&colspec=ID%20Stars%20Pri%20Component%20Status%20Owner%20Summary%20Modified)
- * [New Hotlist-Interop
- bug](https://bugs.chromium.org/p/chromium/issues/entry?template=Defect%20report%20from%20user&labels=Type-Bug,Pri-2,Cr-Blink,Hotlist-Interop)
-* [Chromium
- Blink&gt;Infra&gt;Ecosystem](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink%3EInfra%3EEcosystem+&colspec=ID+Pri+Component+Status+Owner+Summary+Modified&x=m&y=releaseblock&cells=ids):
- bugs for chromium infrastructure and tooling to promote
- interoperability
-* [Chromium
- Internals&gt;FeatureControl](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3AInternals%3EFeatureControl+&colspec=ID+Pri+Component+Status+Owner+Summary+Modified&x=m&y=releaseblock&cells=ids):
- bugs related to how web platform features are enabled and measured
- (e.g. webexposed tests, UseCounters)
-* [Chromium bugs filed by other browser
- vendors](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=reporter:microsoft.com,mozilla,webkit.org,apple.com&sort=-opened+-modified&colspec=ID%20Reporter%20Pri%20Component%20Status%20Owner%20Summary%20Opened%20Modified)
-* [GitHub issues for
- Chromestatus.com](https://github.com/GoogleChrome/chromium-dashboard/issues)
-
-## Useful tools
-
-* [Compat analysis tools](/blink/platform-predictability/compat-tools)
-* Cross browser testing: [BrowserStack](https://www.browserstack.com),
- [Sauce Labs](https://saucelabs.com/)
-
-## Other Resources
-
-* [web-platform-tests](https://github.com/w3c/web-platform-tests/)
-* [Webcompat.com](http://webcompat.com/)
-* [BlinkOn5: Interoperability Case
- Studies](https://docs.google.com/presentation/d/1pOZ8ppcxEsJ6N8KfnfrI0EXwPEvHwg3BHyxzXXw8lRE)
- ([video](https://www.youtube.com/watch?v=a3-zFbwsoEs))
-* [W3C Web Platform Incubation Community
- Group](https://www.w3.org/community/wicg/)
-* [The elastic band of
- compatibility](https://plus.google.com/+AlexKomoroske/posts/WNvcmeTFhzx) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/platform-predictability/objectives/index.md b/chromium/docs/website/site/blink/platform-predictability/objectives/index.md
deleted file mode 100644
index 38b747ef775..00000000000
--- a/chromium/docs/website/site/blink/platform-predictability/objectives/index.md
+++ /dev/null
@@ -1,177 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/platform-predictability
- - Web Platform Predictability
-page_name: objectives
-title: Objectives
----
-
-At Google we define and track progress against our goals using
-["OKRs"](https://www.gv.com/lib/how-google-sets-goals-objectives-and-key-results-okrs)
-(Objectives and Key Results). Here are the OKRs for the web platform
-predictability infrastructure project. Note that these are **intentionally
-aggressive** and so we will be happy if we deliver 60%-70% of them. Platform
-predictability also includes broader efforts by other web platform teams (eg.
-improving interop of the features they own), but those are owned by the
-individual teams (eg. [input-dev](/teams/input-dev/input-objectives)) and so not
-included here.
-
-## 2016 Q3
-
- ### Improve interop testing
-
- Invest in a high quality test suite for the web platform as a whole.
-
- #### Imports happening daily via simplified import process.
-
- * Add a builder which tries to update, and aborts if an
- automatic update couldn't be completed.
- * Add a script to trigger try jobs to discover which new tests
- are failing across different platforms.
- * Add a mapping of directories to auto-update preferences, and
- when updating, edit W3CImportExpectations/TestExpectations
- and file bugs according to this mapping.
-
- #### Easier contribution to web-platform-tests
-
- Implement a way to contribute to WPT repository with Chromium tools. Our
- tools assume that some configuration files are checked in to the target
- repository, and we need to put such files to a separated repository for
- WPT.
- * Agreement on changes in our tools with chrome-infra
- * Implement
- * Land the first CL using the process to both of Chromium repo
- and WPT repo
- * Multiple Blink engineers landed CLs with the process
-
- #### Bugs filed for all automated web-platform-tests that fail on Chrome but pass on two other engines
-
- Use this to increase our understanding of the value of WPT
-
- #### Eliminate csswg-test build step
-
- Test harness runs unbuilt tests
-
- #### Eliminate csswg-test pull-request backlog
-
- 32 as of 6/20
-
- #### W3C PointerEvent Tests: Complete automation through script injection
-
- shared with input-dev.
-
- ### Improve understanding of web compat
-
- Tools for better data for decision making that impacts compat, and process
- improvements that reduces the risk/cost of regressions.
-
- #### Googlers can use bisect-builds.py to bisect regressions on Linux Chrome down to an individual commit position
-
- Internal only for now due to only official Chrome builds being archived.
- Obviously doesn't include positions which fail to build, etc.
-
- #### Land scripts and publish instructions for using cluster telemetry for UseCounter analysis
-
- #### Fix fast shutdown and PageVisits issues in UseCounters in Chrome 54
-
- <https://crbug.com/597963>, <https://crbug.com/236262>
-
- #### Web platform TLs regularly use a view of regression rates per component
-
- #### Extend Cluster telemetry to add new anlyasis page and support runs on 100k web pages
-
- Goal is developers can intuitively and easily schedule analysis runs
- using Cluster Telemetry's new analysis page. Specific AIs: Make CT using
- swarming. No waiting in queue. Add 200+ VMs to CT pool. Add support for
- 100k pages. <http://skbug.com/5465>, <http://skbug.com/5316>,
- <http://skbug.com/5245>
-
- #### Remove (or downgrade) deprecation warnings not on imminent path for removal
-
- Goal is developers can easily tell what things are highly likely to
- impact them and when <https://crbug.com/568218>
-
- #### Concrete plan for deprecation API
-
- <https://crbug.com/564071>
-
- #### Establish regular triage of Hotlist-PredictabilityInfra bugs
-
- Combined with hotlist-interop triage?
-
- ### Improve web platform feature interoperability
-
- Partner with feature teams to invest in improving interop in specific
- high-return areas (as an exception to the general rule that teams own their
- own interop).
-
- #### Ship the unprefixed Fullscreen API
-
- #### Ship the fullscreen top-layer rewrite
-
- Shared with layout-dev
-
- #### Concrete standards proposal and tests for event loop behavior
-
- <https://github.com/atotic/event-loop>
- * Land interop tests for promise resolution behavior, file
- bugs for failures in all browsers
- * Specify that some events fire just before rAF
- * Engage other vendors in discussion about which events should
- be defined to be coupled to rAF, and to what extent their
- order should be defined
- * Write interop tests for rAF-coupled events
-
- #### At least bi-weekly triage of Hotlist-Interop issues
-
- Triage process here:
- <https://docs.google.com/document/d/1fDE3cFjQta0i7zx7JY1Icx0NNRS20HACz4uKb3Wo3hI/edit?pref=2&pli=1>
-
- #### STRETCH: Concrete shipping plan for unprefixed fullscreen in WebKit, EdgeHTML and Gecko
-
- ### Improve communication with web developers
-
- #### Own chromestatus.com and drive its improvement
-
- * Take ownership of codebase, understand its structure
- * Chromestatus is instrumented and we understand where people
- are going on the site
- * Meet with teams to discuss pain points and areas for
- improvement for Chromestatus
- * Best practices and guidance for using Chromestatus are
- documented and visible \*on Chromestatus\*
- * Meet with Mozilla, Microsoft, Opera to discuss merging all
- status trackers
-
- #### Create and distribute a GCS / Endor survey to inform developer survey
-
- #### Reach consensus within Google on our developer feedback strategy
-
- go/webdevfeedback
-
- #### Create and distribute a comprehensive developer survey
-
- * Buy in from all major parties on survey including primary
- learnings we want
- * First draft of survey completed
- * Final draft of survey agreed upon by all major parties
- * Survey distributed and gathering feedback
-
- ### Reduce footguns in the web platform
-
- Make it easier for web developers to reason about behavior of their
- applications, especially when they're composed of multiple 3rd-party
- components.
- * **Initial implementation of Feature Policy (behind a flag)**
- * Parse response header to construct policy
- * Remove features based on policy
- (document.{write,cookie,domain}, SyncXHR, WebRTC)
- * Propagate removal to embedded frames
- * **V1 Feature policy spec feature-complete**
- * converge on v1 set of must-have features
- * figure out all the spec plumbing and interop bits
- * draft explainer, engage other browser vendors + developers
- * **Integrate permission delegation with feature policy**
- * Enforce API permissions based on parsed feature policy \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/public-c-api/index.md b/chromium/docs/website/site/blink/public-c-api/index.md
deleted file mode 100644
index a8d604f56d6..00000000000
--- a/chromium/docs/website/site/blink/public-c-api/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: public-c-api
-title: Public C++ API
----
-
-## [TOC]
-
-## Overview
-
-The Blink public API (formerly known as the WebKit API) is the C++ embedding
-layer by which Blink and its embedder (Chromium) communicate with each other.
-The API is divided into two parts - the web API, located in
-[public/web](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/blink/public/web/)/,
-and the platform API located in
-[public/platform/](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/blink/public/platform/).
-The embedder uses the web API to talk to Blink and Blink uses the platform API
-to ask the embedder to perform lower-level tasks. The platform API also provides
-common types and functionality used in both the web and platform APIs.
-
-This shows the overall dependency layers. Things higher up in the diagram depend
-only on things below them.
-
-+-------------------------------------------+
-
-| Embedder (Chromium) |
-
-+-------------------------------------------+
-
-| Blink public web API |
-
-+---------------------+ |
-
-| Blink internals | |
-
-+-------------------------------------------+
-
-| Blink public platform API |
-
-+-------------------------------------------+
-
-| Embedder-provided platform implementation |
-
-+-------------------------------------------+
-
-The web API covers concepts like the DOM, frames, widgets and input handling.
-The embedder typically owns a
-[WebView](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/blink/public/web/web_view.h)
-which represents a page and navigates
-[WebFrame](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/blink/public/web/web_frame.h)s
-within the page. Many objects in the web API are actually thin wrappers around
-internal Blink objects.
-
-The platform API covers concepts like graphics, networking, database access and
-other low-level primitives. The platform API is accessible to nearly all of
-Blink's internals. The platform API is provided through an implementation of the
-pure virtual blink::Platform interface provided when Blink is initialized. Most
-of the platform API is expressed by pure virtual interfaces implemented by the
-embedder.
-
-### Conventions and common idioms
-
-#### Naming
-
-The Blink API follows the [Blink coding
-conventions](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/blink-c++.md).
-
-All public Blink API types and classes are in the namespace `blink` and have the
-prefix `Web`, both mostly for historical reasons. Types that are thin wrappers
-around Blink internal classes have the same name as the internal class except
-for the prefix. For instance, `blink::WebFrame` is a wrapper around
-`blink::Frame`.
-
-Enums in the public Blink API prefix their values with the name of the enum. For
-example:
-
-```none
-enum WebMyEnum {
-  kWebMyEnumValueOne,
-  kWebMyEnumValueTwo,
-    ...
-};
-```
-
-No prefixes are needed for "`enum class`".
-
-```none
-enum class WebMyEnum {
-  kValueOne,
-  kValueTwo,
-  ...
-};
-```
-
-#### WebFoo / WebFooClient
-
-Many classes in the Blink API are associated with a client. This is typically
-done when the API type is a wrapper around a Blink internals class and the
-client is provided by the embedder. In this pattern, the `WebFooClient` and the
-`WebFoo` are created by the embedder and the embedder is responsible for
-ensuring that the lifetime of the `WebFooClient` is longer than that of the
-`WebFoo`. For example, the embedder creates a `WebView` with a `WebViewClient*`
-that it owns (see
-[`WebView::create`](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/blink/public/web/web_view.h&q=WebView::create&sq=package:chromium&type=cs)).
-
-#### Wrapping a RefCounted Blink class
-
-Many public API types are value types that contain references to Blink objects
-that are reference counted. For example,
-[WebNode](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/public/web/WebNode.h)
-contains a reference to a
-[Node](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/dom/Node.h).
-To do this, `web_node.h` has a forward declaration of `Node` and `WebNode` has a
-single member of type
-[`WebPrivatePtr`](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/public/platform/WebPrivatePtr.h)`<Node>`.
-`WebNode` also exports a `WebNode::reset()` that can dereference this member
-(and thus potentially invoke the `Node` destructor). There's also a
-[`WebPrivateOwnPtr`](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/public/platform/WebPrivateOwnPtr.h)`<T>`
-for wrapping types that are single ownership. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/removing-features/index.md b/chromium/docs/website/site/blink/removing-features/index.md
deleted file mode 100644
index 09794f69c0a..00000000000
--- a/chromium/docs/website/site/blink/removing-features/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: removing-features
-title: Breaking changes
----
-
-## This page has been deprecated, refer to
-
-* ## Deprecating Features in [Launching
- Features](/blink/launching-features#TOC-Feature-deprecations) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/runtime-enabled-features/index.md b/chromium/docs/website/site/blink/runtime-enabled-features/index.md
deleted file mode 100644
index bf700b18dac..00000000000
--- a/chromium/docs/website/site/blink/runtime-enabled-features/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: runtime-enabled-features
-title: Runtime Enabled Features
----
-
-## This content has moved to the Chromium source tree.
-
-## See the [Runtime Enabled Features guide](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/RuntimeEnabledFeatures.md) there. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/serviceworker/getting-started/index.md b/chromium/docs/website/site/blink/serviceworker/getting-started/index.md
deleted file mode 100644
index 26d12293e62..00000000000
--- a/chromium/docs/website/site/blink/serviceworker/getting-started/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/serviceworker
- - Service workers
-page_name: getting-started
-title: Getting Started
----
-
-### For web developer documentation, see:
-
-* [Jake Archibald's
- "simple-serviceworker-tutorial"](https://github.com/jakearchibald/simple-serviceworker-tutorial)
-* ["Introduction to Service
- Worker"](http://www.html5rocks.com/en/tutorials/service-worker/introduction/)
- at html5rocks.com
-* ["The Offline
- Cookbook"](http://jakearchibald.com/2014/offline-cookbook/)
-* ["Is Service Worker Ready
- Yet?"](https://jakearchibald.github.io/isserviceworkerready/)
-
-If you are a Chromium developer, read on!
-
-Here's how to get a demo Service Worker up and running:
-
-**Steps:**
-
-1. Open the demo at
- <https://googlechrome.github.io/samples/service-worker/basic/index.html>
- ([source](https://github.com/GoogleChrome/samples))
-2. Open the Inspector. Things are logged there later on.
-3. Try visiting Cleveland and get a 404. Go back.
-4. Click the 'Register' button, watch the Inspector console, then try
- visiting Cleveland again... ***oooh***.
-5. Go to chrome://inspect#service-workers and click on Inspect to open
- the Inspector and debug your Service Worker.
-
-### Running it locally
-
-* Clone the [git repo](https://github.com/GoogleChrome/samples)
-* Navigate to the samples/service-worker/basic folder
-* Start a local webserver (see below)
-* Open http://localhost:8080/index.html (or whatever path and port you
- set up.)
-* Feel free to edit the JS and try some new things!
-
-### How to run a local server
-
-On a system with python:
-
-$ python -m SimpleHTTPServer 8080
-
-On Android use Chrome Developer Tools' [port
-forwarding](https://developer.chrome.com/devtools/docs/remote-debugging#enable-reverse-port-forwarding).
-
-### Development flow
-
-In order to guarantee that the latest version of your Service Worker script is
-being used, follow these instructions:
-
-1. Configure your local server to serve your Service Worker script as
- non-cacheable (cache-control: no-cache)
-2. After you made changes to your service worker script:
- 1. **close all but one** of the tabs pointing to your web
- application
- 2. hit **shift-reload** to bypass the service worker as to ensure
- that the remaining tab isn't under the control of a service
- worker
- 3. hit **reload** to let the newer version of the Service Worker
- control the page.
-
-### Documentation
-
-* For an overview of the possibilities: Jake's [ServiceWorker is
- coming, look busy](https://www.youtube.com/watch?v=SmZ9XcTpMS4) talk
- (30min) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/serviceworker/index.md b/chromium/docs/website/site/blink/serviceworker/index.md
deleted file mode 100644
index 695f40a84dd..00000000000
--- a/chromium/docs/website/site/blink/serviceworker/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: serviceworker
-title: Service workers
----
-
-<div class="two-column-container">
-<div class="column">
-
-## For Web Developers
-
-## What is service worker?
-
-See the [service
-worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API)
-documentation at Mozilla Developer Network.
-
-### Debugging
-
-Working with a service worker is a little different than normal debugging. Check
-out [Service Worker Debugging](/blink/serviceworker/service-worker-faq) for
-details.
-
-## Track Status
-
-Service workers shipped in Chrome 40 (which was promoted to stable channel in
-January 2015).
-
-[Is Service Worker
-Ready?](https://jakearchibald.github.io/isserviceworkerready/) tracks the
-implementation status of service worker at a fine-grained, feature-by-feature
-level in many popular browsers.
-
-### File Bugs
-
-Go to <http://crbug.com/new> and include "service worker" in the summary. You
-should get a response from an engineer in about one week.
-
-If the browser **crashed** while you were doing Service Worker development, go
-to chrome://crashes and cut and paste the Crash ID into the bug report. This
-kind of bug report is very valuable to us. (If you do not see crashes in
-chrome://crashes it may be because you chose not to send usage statistics and
-crash reports to Google. You can change this option in chrome://settings .)
-
-To give feedback about service worker that is not specific to Chromium, use
-W3C's [public-webapps mailing
-list](http://lists.w3.org/Archives/Public/public-webapps/). Use [the spec issue
-tracker](https://github.com/slightlyoff/ServiceWorker) to file bugs against the
-service worker spec.
-
-### Discuss
-
-For detailed questions about usage: ask us on
-[StackOverflow](http://stackoverflow.com) with the
-"[service-worker](http://stackoverflow.com/questions/tagged/service-worker)"
-tag.
-
-For important announcements and technical discussion about Service Worker, [join
-us at
-service-worker-discuss@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/service-worker-discuss).
-
-</div>
-<div class="column">
-
-## For Chromium & Blink Contributors
-
-...interested web developers are welcome to poke around too!
-
-### Links
-
-* Spec [issues](https://github.com/slightlyoff/ServiceWorker),
- [FPWD](http://www.w3.org/TR/2014/WD-service-workers-20140508/),
- [ED](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/)
-* [Testing](/blink/serviceworker/testing)
-* Implementation bugs use the
- [Blink&gt;ServiceWorker](https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EServiceWorker)
- component. If you sign-in, you can subscribe to get e-mail updates
- at Profile &gt; Saved Queries.
-* Mailing lists: we use
- [blink-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev)
- for public discussion.
-* Code reviews: subscribe to the
- [serviceworker-reviews@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/serviceworker-reviews)
- group to get a copy of all code review requests.
-* Docs:
- * [Hitchhiker's guide to Service Worker
- classes](https://docs.google.com/a/chromium.org/document/d/1DoueYsm-UOvqDyqIPd9aGAWWQ1XZKX89CsJXDF7j_2Q/edit)
- * [How to Implement a Web Platform Feature on Service
- Workers](https://docs.google.com/document/d/1cBZay5IbPHFLtDpFPu7q9XevtydiuTKbqXKIFaBZDJQ/edit?usp=sharing)
-
-</div>
-</div> \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/serviceworker/service-worker-faq/index.md b/chromium/docs/website/site/blink/serviceworker/service-worker-faq/index.md
deleted file mode 100644
index a944787941d..00000000000
--- a/chromium/docs/website/site/blink/serviceworker/service-worker-faq/index.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/serviceworker
- - Service workers
-page_name: service-worker-faq
-title: Service Worker Debugging
----
-
-**Q: How do I debug?**
-
-A: From a page on the same origin, go to Developer Tools &gt; Application &gt;
-Service Workers.
-
-You can also use chrome://inspect/#service-workers to find all running service
-workers.
-
-To poke around at the internals (usually only Chromium developers should need
-this), visit chrome://serviceworker-internals .
-
-**Q: When I have Developer Tools open, requests go straight to the network; the
-Service Worker does not get a fetch event.**
-
-A: On the Developer Tools' Network tab, if Disable cache is checked, requests
-will go to the network instead of the Service Worker. Uncheck that.
-
-**Q: I get an error message about "Only secure origins are allowed". Why?**
-
-A: Service workers are only available to "secure origins" (HTTPS sites,
-basically) in line with a policy to [prefer secure origins for powerful new
-features](/Home/chromium-security/prefer-secure-origins-for-powerful-new-features).
-However http://localhost is also considered a secure origin, so if you can,
-developing on localhost is an easy way to avoid this error.
-
-You can also use the --unsafely-treat-insecure-origin-as-secure command-line
-flag to explicitly list a HTTP Origin. For example:
-
-**$ ./chrome
---unsafely-treat-insecure-origin-as-secure=http://your.insecure.site:8080**
-
-([Prior to Chrome
-62](https://chromium.googlesource.com/chromium/src/+/55dab613843031ab360193116f5d80d0d23308fb),
-you must also include the --user-data-dir=/test/only/profile/dir to create a
-fresh testing profile for the unsafely-treat-insecure-origin-as-secure flag to
-work.)
-
-If you want to test on https://localhost with a self-signed certificate, do:
-
-**$ ./chrome --allow-insecure-localhost https://localhost**
-
-You might also find the --ignore-certificate-errors flag useful.
-
-**Q: I made a change to my service worker. How do I reload?**
-
-A: From Developer Tools &gt; Application &gt; Service Workers, check "Update on
-reload" and reload the page.
-
-**Q: I have a different question.**
-
-A: Reach us out via
-[service-worker-discuss](https://groups.google.com/a/chromium.org/forum/#!forum/service-worker-discuss)
-or Stack Overflow with
-"[service-worker](http://stackoverflow.com/questions/tagged/service-worker)"
-hash tag.
-
-## Experimental Service Worker Debugging functionality
-
-### Step-wise SW debugging
-
-Chrome 44 required, but no experiments needed. Debugging message flow using
-conventional breakpoint debugging on both ends (page and the sw). You can kill
-the worker to debug its installation, you can debug the way it serves resources,
-etc.
-
-### Active SW in Sources
-
-* Navigate to a page w/ service worker, opens DevTools
-* Worker is displayed in the Threads list
-* Service Workers tab lists Active Running service workers this page
- (its iframes) belong to
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/e4cfdjN0GVnRqgeVr85oZ4FajaI5Lc8U-pkfTWoJ8HxyQ1Tigg40nzfpDDdRlEUIPu7M68wGM0qmsvJz-wu6lDvwInvNmfW-d8wP3gKpXCOomU-VTNVtH_VTWgmuZFTXJ8vU24A">
-
-### Console execution
-
-* Console displays contexts for frames as well as workers
-* One can execute expressions in the SW context and filter by context
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/HIP54ymxanAUqevqNfK4FzzgK3BsQSxoUJEM70K7i3oiJYImMvW9igdCXMwsMSLv1Uys6w6TObJdjCMklr0Eq_qW3BEpkHCyiDT7scgVz0ytNX7ma7bY9HUrAPdD6s-rPMEfpqc">
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/UtOGH7s6zefhEmr9-uYHqKwhOPT6Iup5qM8Gy2FcA59FLiL2l-lw2zhEAiTK_vuiHpJjHSaptlvyXEINS6s2NyGBC_eVBECStddOdLQqJtxjOpCkJ_gkA_om7JtaC0JrruOzl9s">
-
-### Console errors
-
-* Should there be any installation errors (syntax errors in main
- script), they are available in the page console
-* Clicking on the error message reveals the erroneous script
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/lYsWZUJ21KTbr23up6cV6gKkYQOrQ0VwORZ6Z_zPzrXhAaKzqFTVeEbRK3w6srjfS_gcb_aLvHrSEdEIe5KvC1Hm7oVHqac4RwUeVlhe2cpYJF_8fCZSzz9CcBLPVVymV_kXlvo">
-
-### Breakpoints
-
-* User can set breakpoints in the service worker scripts
-* Should user set the breakpoint, Stop the service worker and reload
- the page, service worker will stop on that breakpoint
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/F9kDEzN4Bsec-TL5HOcUdRh_JvYrw7C0IjWQ0Kz8Usq-v6ZwlLlO8Ve-DBeTYrP0ETY5jjrOE2Ms2Df-LgYRktMBfJuSaCz-t4lpENLYivqgUqY9wH7qFoYGudOt0Xg0jQ2FxC8">
-
-## SW debugging panel in Resources
-
-1. Turn on DevTools experiments (in `about:flags`)
-2. In DevTools, Go to Settings -&gt; Experiments, hit Shift 6 times
-3. Check "Service worker inspection", close and reopen DevTools
-4. Now you have this experiment enabled.
-
-This experiment unlocks a view in Resources just like you asked.
-[<img alt="image"
-src="/blink/serviceworker/service-worker-faq/resources-sw.png">](/blink/serviceworker/service-worker-faq/resources-sw.png)
-Currently, to view network activity of the worker, click the "inspect" from
-Resources to launch a dedicated devtools window for the worker itself. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/serviceworker/service-worker-faq/resources-sw.png.sha1 b/chromium/docs/website/site/blink/serviceworker/service-worker-faq/resources-sw.png.sha1
deleted file mode 100644
index c380da221d9..00000000000
--- a/chromium/docs/website/site/blink/serviceworker/service-worker-faq/resources-sw.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-acc9347f58424ba9013861bfadeebf190a76ef60 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/serviceworker/testing/index.md b/chromium/docs/website/site/blink/serviceworker/testing/index.md
deleted file mode 100644
index 82ec1213e61..00000000000
--- a/chromium/docs/website/site/blink/serviceworker/testing/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/serviceworker
- - Service workers
-page_name: testing
-title: Service Worker Testing
----
-
-[TOC]
-
-Service Worker has multiple kinds of tests: Content Browser Tests, WebKit Unit
-Tests, Telemetry Performance Tests, and Blink Layout Tests.
-
-## Performance Tests
-
-### [Issue 372759](https://code.google.com/p/chromium/issues/detail?id=372759) is tracking the development of Service Worker performance tests.
-
-How to run the performance tests:
-
-1. Build and install the content_shell_apk target per the [Android
- build
- instructions](https://code.google.com/p/chromium/wiki/AndroidBuildInstructions#Build_Content_shell).
-2. Build the forwarder2 target.
-3. tools/perf/run_benchmark --browser=android-content-shell
- \[--device=xxxx\] service_worker.service_worker
-
-How to update the performance tests:
-
-1. Check out the [performance test
- sources](https://github.com/coonsta/Service-Worker-Performance). Do
- development, pull request, etc.
-2. Run a local server in that directory, for example: twistd -n web
- --path . --port 8091 (you must use that port number, it appears in
- the test Python scripts.)
-3. Build Linux Release Chromium
-
-[The update_wpr tool](https://source.chromium.org/chromium/chromium/src/+/main:tools/perf/recording_benchmarks.md)
-automates the following steps for you:
-
-4. tools/perf/record_wpr --browser=release
- --extra-browser-args='--enable-experimental-web-platform-features'
- service_worker_page_set
- Note: If you change the output directory of build (like 'out_desktop'), you
- can use '--browser=exact --browser-executable=path/to/your/chrome' instead
- of '--browser=release'.
-5. Briefly sanity check the
- tools/perf/page_sets/data/service_worker_nnn.wpr file to see that it
- doesn't contain requests that should have been handled by a Service
- Worker (look for GET and browse through the URLs.)
-6. Add the new SHA1 hash file (use git status to find it) and upload
- for review, commit as usual. Mention the path and commit hash from
- step 1.
-
-## Web Tests Style
-
-If your test needs to interact with the Service Worker as a client (many do),
-open an iframe with a URL controlled by the Service Worker.
-
-Prefix Service Worker scopes with "scope/" when appropriate. This helps prevent
-unintentionally registering a Service Worker that controls resources in the test
-directory.
-
-Prefix each test by unregistering the Service Worker. If a previous test run
-failed or was interrupted, it may have left a Service Worker registration in
-place. Unregistering the existing Service Worker first, if any, improves the
-reliability of the test.
-
-Clean up resources when the test is done: Unregister the test's Service Worker
-at the end of the test. Remove any iframes. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/sheriffing/index.md b/chromium/docs/website/site/blink/sheriffing/index.md
deleted file mode 100644
index bc72f04211e..00000000000
--- a/chromium/docs/website/site/blink/sheriffing/index.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: sheriffing
-title: Handling Blink failures
----
-
-AKA gardening or sheriffing. See also [the documentation of the Test
-Expectations
-files](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_test_expectations.md),
-the [generic sheriffing docs](/developers/tree-sheriffs), and the
-[Chromium-specific sheriffing
-docs](/developers/tree-sheriffs/sheriff-details-chromium).
-
-## Bots
-
-Chromium has many kinds of bots which run different kinds of builds and tests.
-The [chromium.webkit](https://build.chromium.org/p/chromium.webkit/waterfall)
-builders run the Blink-specific tests.
-
-You can monitor them using
-[Sheriff-o-matic](https://sheriff-o-matic.appspot.com/) , just like the
-non-Blink bots.
-
-Even among the WebKit bots, there are several different kinds of bots:
-
-* ["Layout"
- bots](https://build.chromium.org/p/chromium.webkit/waterfall?category=layout&failures_only=true)
- and [non-Oilpan
- bots](https://build.chromium.org/p/chromium.webkit/waterfall?builder=WebKit+Win+non-Oilpan&builder=WebKit+Win+non-Oilpan+(dbg)&builder=WebKit+Mac+non-Oilpan&builder=WebKit+Mac+non-Oilpan+(dbg)&builder=WebKit+Linux+non-Oilpan&builder=WebKit+Linux+non-Oilpan+(dbg))
- * This is where most of the action is, because these bots run
- Blink's many test suites. The bots are called "layout" bots
- because one of the biggest test suites "Web Tests" was called
- LayoutTests, which is found in third_party/blink/web_tests and
- run as part of the webkit_tests step on these bots. Web tests
- can have different expected results on different platforms. To
- avoiding having to store a complete set of results for each
- platform, most platforms "fall back" to the results used by
- other platforms if they don't have specific results. Here's a
- [diagram of the expected results fallback
- graph](https://docs.google.com/a/chromium.org/drawings/d/1KBTihR80H42GB0be0qK2CyM-pPUoMdnHqYaOsNK85vI/edit).
-* Leak bots
- * These are just like the layout bots, except that if you need to
- suppress a failure, use the
- [web_tests/LeakExpectations](https://cs.chromium.org/chromium/src/third_party/blink/web_tests/LeakExpectations)
- file instead. You can find some additional information in
- [Gardening Leak
- Bots](https://docs.google.com/a/google.com/document/d/11C7zFNKydrorESnE6Nbq98QNmKRMrhSwVMGxkx4fiZM/edit#heading=h.26irfde6145p)
-* [ASAN
- bot](http://build.chromium.org/p/chromium.webkit/waterfall?show=WebKit%20Linux%20ASAN)
- * This also runs tests, but generally speaking we only care about
- memory failures on that bot. You can suppress ASAN-specific
- failures using the
- [web_tests/ASANExpectations](https://cs.chromium.org/chromium/src/third_party/blink/web_tests/ASANExpectations)
- file.
-* [MSAN
- bot](https://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20MSAN)
- * Same deal as the ASAN bot, but catches a different class of
- failures. You can suppress MSAN-specific failures using the
- [web_tests/MSANExpectations](https://cs.chromium.org/chromium/src/third_party/blink/web_tests/MSANExpectations)
- file.
-
-## Tools
-
-Generally speaking, developers are not supposed to land changes that knowingly
-break the bots (and the try jobs and the commit queue are supposed to catch
-failures ahead of time). However, sometimes things slip through ...
-
-### Sheriff-O-Matic
-
-[Sheriff-O-Matic](http://sheriff-o-matic.appspot.com/) is a tool that watches
-the builders and clusters test failures with the changes that might have caused
-the failures. The tool also lets you examine the failures. [There is more
-documentation here](/developers/tree-sheriffs/sheriff-o-matic).
-
-### Rolling back patches
-
-To roll back patches, you can use either git revert or
-[drover](/developers/how-tos/drover). You can also use "Revert" button on
-Gerrit.
-
-### Flakiness dashboard
-
-The [flakiness
-dashboard](http://test-results.appspot.com/dashboards/flakiness_dashboard.html#useWebKitCanary=true)
-is a tool for understanding a test’s behavior over time. Originally designed for
-managing flaky tests, the dashboard shows a timeline view of the test’s behavior
-over time. The tool may be overwhelming at first, but [the
-documentation](/developers/testing/flakiness-dashboard) should help.
-
-### Contacting patch authors
-
-Comment on the CL or send an email to contact the author. It is patch author's
-responsibility to reply promptly to your query.
-
-**Test Directories**
-
-The web platform team has a large number of tests that are flaky, ignored, or
-unmaintained. We are in the process of finding [teams to monitor test
-directories](https://docs.google.com/spreadsheets/d/1c7O3fJ7aTY92vB5Dfyi_x2VYu4eFdeEeNTys6ECOviQ/edit?ts=57112a09#gid=0),
-so that we can track these test issues better. Please note that this should not
-be an individual, but a team. If you have ideas/guesses about some of these
-directories, please reach out to the team and update the sheet. This is the
-first step, and the long term plan is to have this information on a
-dashboard/tool somewhere. Watch this space for updates! \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/sheriffing/triaging-gasper-alerts/index.md b/chromium/docs/website/site/blink/sheriffing/triaging-gasper-alerts/index.md
deleted file mode 100644
index de20d0c316e..00000000000
--- a/chromium/docs/website/site/blink/sheriffing/triaging-gasper-alerts/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/sheriffing
- - Handling Blink failures
-page_name: triaging-gasper-alerts
-title: Triaging Gasper Alerts
----
-
-## Obsolete.
-
-## More relevant updated information at: <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed/perf_regression_sheriffing.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/slimming-paint/historical-documents/index.md b/chromium/docs/website/site/blink/slimming-paint/historical-documents/index.md
deleted file mode 100644
index 2ec6e9fefbe..00000000000
--- a/chromium/docs/website/site/blink/slimming-paint/historical-documents/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/slimming-paint
- - Slimming Paint (a.k.a. Redesigning Painting and Compositing)
-page_name: historical-documents
-title: Historical documents
----
-
-## Early design docs and explorations
-
-[Skia Recording
-Changes](https://docs.google.com/document/d/1qNPBk60388ah5FoHwVunwbNZJtv5-n0N97cGDj0LdHY/edit?usp=sharing)
-
-[Refactoring Blink Paint
-Code](https://docs.google.com/document/d/1inRhmB8rtxvInvmPEo7Zd5mhOfb48VxwF-9Y1QoQNBE/edit?usp=sharing)
-
-[Where to store Display
-Items](https://docs.google.com/document/d/1iGJdE1hD15ISQKDh-I7m1R3MYiamvTlmsyplxts5n0g/edit?usp=sharing)
-
-[Layerization based on display
-lists](https://docs.google.com/document/d/1L6vb9JEPFoyt6eNjVla2AbzSUTGyQT93tQKgE3f1EMc/edit?usp=sharing)
-
-[Pitfalls in DisplayList Creation for Slimming
-Paint](https://docs.google.com/document/d/15c8gxDdJvBTBptHpXuQH4N_7XV7r1_BTbl3_CMBrdkU/edit?usp=sharing)
-
-[Tracking slimming paint
-performance](https://docs.google.com/document/d/1moskT1Tkg8GcHZylRNQakyrCjk3LR_O5Yys9fDriVcY/edit#) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/slimming-paint/index.md b/chromium/docs/website/site/blink/slimming-paint/index.md
deleted file mode 100644
index 12ef91d7e56..00000000000
--- a/chromium/docs/website/site/blink/slimming-paint/index.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: slimming-paint
-title: Slimming Paint (a.k.a. Redesigning Painting and Compositing)
----
-
-## Slimming Paint is a [Paint team](/teams/paint-team) project to re-implement the Blink&lt;-&gt;cc picture recording API to work in terms of a global display list rather than a tree of cc::Layers (~aka GraphicsLayer in Blink terminology). It will result in a drastic simplification of the way that composited layers are represented in Blink and cc, which in turn will yield improved performance, correctness and flexibility.
-
-To get a sense of the extent of this rewrite, one side-effect will be the
-deletion of the code in core/rendering/compositing/.
-
-## Phases
-
-SlimmingPaintV1 - paint using display items ([Status: launched in
-M45](https://groups.google.com/a/chromium.org/forum/#!searchin/blink-dev/slimming$20paint/blink-dev/qq4NEaqSrKM/OKiNzm3PkSkJ))
-
-SlimmingPaintInvalidation - rewrite of paint invalidation using display items,
-property trees introduced in blink ([Status: launched in
-M58](https://groups.google.com/a/chromium.org/forum/#!searchin/blink-dev/slimming$20paint/blink-dev/YXcuTl6PbDk/7jAte1CDBAAJ))
-
-SlimmingPaintV175 - uses property trees for painting in blink, introduces paint
-chunks, uses paint chunks for raster invalidation ([Status: launched in
-M67](https://bugs.chromium.org/p/chromium/issues/detail?id=771643))
-
-[BlinkGenPropertyTrees](https://docs.google.com/document/d/17GKr2uIH2O5GthdTyvJpv1qZjoHYoLgrzvCkbCHoID4/view#)
-- sends a layer list instead of a tree, and generates final property trees in
-blink instead of re-generating them in cc ([Status: launched in
-M75](https://crbug.com/836884))
-
-[CompositeAfterPaint](https://docs.google.com/document/d/114ie7KJY3e850ZmGh4YfNq8Vq10jGrunZJpaG6trWsQ/edit)
-- compositing decisions made after paint.
-
-## Presentations
-
-[BlinkOn 3.0
-Presentation](https://docs.google.com/presentation/d/1zpGlx75eTNILTGf3s_F6cQP03OGaN2-HACsZwEobMqY/edit?usp=sharing),
-[video](https://www.youtube.com/watch?v=5Xv2A7aqJ9Y) (start here to find out
-more about the project)
-
-[BlinkOn 4
-presentation](https://docs.google.com/presentation/d/17k62tf1zc5opvIfhCXMiL4UdI9UGvtCJbUEKMPlWZDY/edit)
-
-[Blink Property
-Trees](https://docs.google.com/presentation/d/1ak7YVrJITGXxqQ7tyRbwOuXB1dsLJlfpgC4wP7lykeo)
-(also reviews the Composite-After-Paint (formerly "SPV2") design)
-
-[BlinkOn 9
-presentation](https://docs.google.com/presentation/d/1Iko1oIYb-VHwOOFU3rBPUcOO_9lAd3NutYluATgzV_0/view#slide=id.g36f1b50c08_0_1902)
-covering current compositing architecture
-
-### Core team members
-
-Chris Harrelson (chrishtr@), overall TL
-
-Mason Freed (masonfreed@) Blink
-
-Philip Rogers (pdr@) Blink
-
-Stephen Chenney (schenney@) Blink
-
-Xianzhu Wang (wangxianzhu@) Blink
-
-Adrienne Walker (enne@) cc
-
-Robert Flack (flackr@) animations
-
-David Bokan (bokan@) viewports
-
-#### Close relatives
-
-Fredrik Söderquist (fs@opera.com) Blink
-
-Erik Dahlstrom (ed@opera.com) Blink
-
-Florin Malita (fmalita@) Blink / Skia
-
-Mike Klein (mtklein@) Skia
-
-Mike Reed (reed@) Skia
-
-A number of other people are involved at least tangentially for design
-discussions and related projects.
-
-## Resources and Design Docs
-
-[core/paint/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/paint/README.md)
-
-[Slimming paint
-invalidation](https://docs.google.com/document/d/1M669yu7nsF9Wrkm7nQFi3Pp2r-QmCMqm4K7fPPo-doA)
-
-[Representation and implementation of display lists in
-Blink](https://docs.google.com/document/d/1fWvFIY41BJHtB4qBHw3_IZYqScurID4KmE2_a6Be0J4/edit?usp=sharing)
-
-[Layerization based on display
-lists](https://docs.google.com/a/google.com/document/d/1L6vb9JEPFoyt6eNjVla2AbzSUTGyQT93tQKgE3f1EMc/edit)
-
-[Blink paintlist update algorithm
-details](https://docs.google.com/document/d/1bvEdFo9avr11S-2k1-gT1opdYWnPWga68CK3MdoYV7k/edit?usp=sharing)
-
-==[Bounding Rectangle Strategy for Slimming
-Paint](https://docs.google.com/a/chromium.org/document/d/12G3rfM3EkLYDCRcO1EpEObfeoU24Sqof9S0sPHgELU4/edit?usp=sharing)==
-
-[Slimming Paint for UI
-Compositor](https://docs.google.com/a/chromium.org/document/d/1Oxa3E-ymCqY2-7AlMrL1GEqAtyFE__0PRzhg9EEZt7Y/edit)
-
-[Display Item
-Debugging](https://docs.google.com/a/chromium.org/document/d/1XDz2paww41UjviZam1iTThS9XKx0KRcmzI83QuNLeR8/edit#)
-
-Some out of date/historical docs are
-[here](/blink/slimming-paint/historical-documents). \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/spec-mentors/index.md b/chromium/docs/website/site/blink/spec-mentors/index.md
deleted file mode 100644
index 4ba5584847e..00000000000
--- a/chromium/docs/website/site/blink/spec-mentors/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: spec-mentors
-title: Chromium Specification Mentors
----
-
-*Quick link:* [mentor request
-form](https://docs.google.com/forms/d/e/1FAIpQLSfCYE4U13GkZ11rAWBUjOb3Lza-u4m2k3TklQHXe7Zfn3Qo1g/viewform)
-
-## Introduction
-
-Introducing a new feature to the web platform requires writing a specification,
-which is a separate skill set from writing code. It involves API design,
-cross-company collaboration, and balancing the needs of the web's various
-stakeholders.
-
-Specification mentors apply their experience in this area to ensure that
-explainers and specifications put out by the Chromium project are of high
-quality and ready to present to the world. For folks new to the standardization
-process, mentors can provide guidance and review. And for those who are already
-experienced, mentors provide the equivalent of code review: a second perspective
-to help raise questions early or spot things you might have missed.
-
-This process aims to improve the quality of explainers and specifications, and
-thus uphold the Chromium project's commitment to an open, interoperable, and
-well-designed web platform. It should also make the process of launching a new
-feature more predictable and less painful for Chromium engineers.
-
-## How we work
-
-### Pairing up with your mentor
-
-Before sending an Intent to Prototype, you are encouraged to find a spec mentor
-to work with. They can review your explainer, as well as the Intent to Prototype
-itself, to make sure your feature is presenting a good face to the world.
-
-For Googlers, a specification mentor is required at this stage. For other
-Chromium contributors, you're welcome to reach out if you find one helpful.
-
-To find a specification mentor, you can draw upon your existing contacts (e.g.,
-your team lead or coworkers), or you can [fill out our
-form](https://docs.google.com/forms/d/e/1FAIpQLSfCYE4U13GkZ11rAWBUjOb3Lza-u4m2k3TklQHXe7Zfn3Qo1g/viewform)
-with the relevant information. In the latter case, we will get back to you with
-a proposed mentor within 2 business days; we want to make sure your Intent to
-Prototype proceeds as quickly as possible.
-
-### What to expect
-
-Your mentor will be available for you to ask questions or ask for reviews
-throughout the lifetime of your feature. In particular, if you would like
-someone to review your explainer or specification work, you can collaborate with
-them directly, e.g. using video calls, GitHub pull request reviews, or Google
-Docs.
-
-There are three specific points at which you'll want to request detailed
-specification review from your mentor, so that they can help ensure that your
-public artifacts are high-quality:
-
-- (Optional) For your explainer and TAG review request, before sending them
- out in the Intent to Prototype process.
-
-- For your explainer and specification, before beginning a [Dev Trial](https://docs.google.com/document/d/1_FDhuZA_C6iY5bop-bjlPl3pFiqu8oFvuK1jzAcyWKU/edit)
- or [Origin Trial](https://github.com/GoogleChrome/OriginTrials), at which
- point these artifacts will be seen by wide review groups and other browser
- vendors.
-
-- For your specification, before sending an Intent to Ship.
-
-You can also call on your mentor to review the Intents themselves, before you
-send them off to blink-dev and the scrutiny of the API owners and the wider
-world.
-
-Your mentor can optionally reply to the Intent to Prototype/Experiment/Ship
-threads with a summary of how the review went. This can help bolster the API
-owners' confidence in the explainer or specification. For example:
-
-> "The use cases for this feature make a lot of sense. I raised an issue to
-> consider some alternate approaches, and noted a potential privacy risk that
-> should be at least discussed, and ideally mitigated. We agreed to keep these
-> in mind as the prototyping progresses."
-
-or
-
-> "This feature and the proposed API both look good to ship from my perspective.
-> I filed a series of small issues on potential API improvements, which have
-> been incorporated. And we tightened up the specification language around the X
-> algorithm, which now has extensive web platform tests for the
-> previously-ambiguous edge cases."
-
-If all goes well, then by the time you reach the Intent to Ship stage, your
-explainer and spec will have been refined through mentorship and review to be
-the best they can be. This will put you in a strong position with regard to some
-of the most-often-problematic parts of the Intent to Ship, such as the the
-Interoperability & Compatibility risks section, and thus smooth the path toward
-API OWNER approval.
-
-## Can I join?
-
-Yes, please do! Becoming proficient in design reviews is a core engineering
-skill, and one of the best ways to do that is to help other Chromium project
-members with their explainers and specifications. And it's important for the
-health of the Chromium community to have as many engineers as possible who
-understand and can work successfully within the standards process.
-
-If you've ever written an explainer or specification before, you've probably
-gotten a good amount of feedback from various audiences, both internal and
-external. That means you're qualified to help others through the same process,
-to pass on what you have learned. You won't be alone: the other mentors are
-around to help with anything you're not sure of.
-
-The time commitment for being a specification mentor should be similar to a
-commensurate amount of Chromium code reviews, i.e., not that bad.
-
-To join the program and start getting assigned features to help mentor,
-subscribe to our mailing list, at
-[spec-mentors@chromium.org](https://groups.google.com/a/chromium.org/g/spec-mentors).
-When new features come in, feel free to reply that you'd be willing to help;
-otherwise, [domenic@chromium.org](mailto:domenic@chromium.org) will assign
-features to mentors according to his best judgment. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/unittesting/index.md b/chromium/docs/website/site/blink/unittesting/index.md
deleted file mode 100644
index dfd2b64faa1..00000000000
--- a/chromium/docs/website/site/blink/unittesting/index.md
+++ /dev/null
@@ -1,473 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: unittesting
-title: Unit Testing in Blink
----
-
-**WARNING: This document is a work in progress!**
-
-[TOC]
-
-## Unit Testing Tools
-
-GTest and GMock are both imported into Blink and can be used in unit tests. Most
-existing tests are purely GTest based, but GMock is slowly being used more.
-
-### GTest - Google Unit Testing Framework
-
-> *"Google's framework for writing C++ tests on a variety of platforms (Linux,
-> Mac OS X, Windows, Cygwin, Windows CE, and Symbian). Based on the xUnit
-> architecture. Supports automatic test discovery, a rich set of assertions,
-> user-defined assertions, death tests, fatal and non-fatal failures, value- and
-> type-parameterized tests, various options for running the tests, and XML test
-> report generation."*
-
-#### Further Documentation
-
-* GTest Project Website - <https://code.google.com/p/googletest/>
-* Primer - <https://code.google.com/p/googletest/wiki/Primer>
-* FAQ - <https://code.google.com/p/googletest/wiki/FAQ>
-* Advanced Guide -
- <https://code.google.com/p/googletest/wiki/AdvancedGuide>
-
-#### Tip: GTest and regular expressions (regexp)
-
-If you are using gtest "[Death
-Tests](https://code.google.com/p/googletest/wiki/AdvancedGuide#How_to_Write_a_Death_Test)"
-or GMock's EXPECT_THAT with MatchesRegex or ContainsRegex, you have to **be very
-careful with your regex**.
-
-There is no common syntax between all operating system for character class
-matches;
-
-* Character class short cuts are NOT part of the POSIX regex standard
- and **DO NOT** work on Mac OS X. It also **wont** give you a warning
- saying the regex is invalid.
-
-```none
-EXPECT_THAT("abc", MatchesRegex("\w*")) # Does NOT work on Mac OS X.
-```
-
-* Character classes (IE the square bracketed kind) **DO NOT** work
- with the gtest internal regex engine, and thus on Windows. At least
- it will warn you that the regex is invalid.
-
-```none
- EXPECT_THAT("abc", MatchesRegex("[a-c]*")) # Does NOT work on Windows.
-```
-
-*(CL <https://codereview.chromium.org/55983002/> proposes making chromium only
-use the gtest internal regex engine which would fix this problem.)*
-
-#### Tip: Using GMock matchers with GTest
-
-You can use GMock EXPECT_THAT and the GMock matchers inside a GTest test for
-more powerful matching.
-
-Quick example;
-
-```none
-EXPECT_THAT(Foo(), testing::StartsWith("Hello"));EXPECT_THAT(Bar(), testing::MatchesRegex("Line \\d+"));ASSERT_THAT(Baz(), testing::AllOf(testing::Ge(5), testing::Le(10)));Value of: Foo()  Actual: "Hi, world!"Expected: starts with "Hello"
-```
-
-More information at;
-
-* [TotT: Making a Perfect
- Matcher](http://googletesting.blogspot.com.au/2009/10/tott-making-perfect-matcher.html)
-* [GMock Cookbook - Using Matchers in Google Test
- Assertions](https://code.google.com/p/googlemock/wiki/CookBook#Using_Matchers_in_Google_Test_Assertions)
-
-#### Error: Has the "template&lt;typename T&gt; operator T\*()" private.
-
-More information at <https://code.google.com/p/googletest/issues/detail?id=442>
-
-Workaround:
-
-<pre><code><b>namespace</b> testing {
-<b>namespace</b> internal {
-// gtest tests won't compile with clang when trying to EXPECT_EQ a class that
-// has the "template&lt;typename T&gt; operator T*()" private.
-// (See <https://code.google.com/p/googletest/issues/detail?id=442)>
-//
-// Work around is to define this custom IsNullLiteralHelper.
-<b>char</b>(&IsNullLiteralHelper(<b>const</b> WebCore::CSSValue&))[2];
-}
-}
-</code></pre>
-
-### GMock - Google C++ Mocking Framework
-
-<https://code.google.com/p/googlemock/>
-
-> *Inspired by jMock, EasyMock, and Hamcrest, and designed with C++'s specifics
-> in mind, Google C++ Mocking Framework (or GMock for short) is a library for
-> writing and using C++ mock classes.*
-
-#### Further Documentation
-
-* \[TODO\]
-
-#### Tip: GMock and regular expressions (regexp)
-
-GMock uses the gtest for doing the regexs, [see the section under gtest
-above](/blink/unittesting#TOC-Tip:-GTest-and-regular-expressions-regexp-).
-
-#### Tip: Mocking non-virtual functions
-
-For speed reasons, a majority of Blink's functions are non-virtual. This can
-make them quite hard to mock. Here are some tips for working around these
-problems;
-
-#### Tip: Mock Injection (Dependency Injection)
-
-Useful documentation:
-
-* TotT: Testing Against Interfaces -
- <http://googletesting.blogspot.com.au/2008/07/tott-testing-against-interfaces.html>
-* TotT: Defeat "Static Cling" -
- <http://googletesting.blogspot.com.au/2008/06/defeat-static-cling.html>
-
-Using a proxy interface internally in your class;
-
-<pre><code>// MyClass.h
-// ------------------------------------------------------------
-<b>class</b> MyClass {
-<b>private</b>:
-    <b>class</b> iExternal {
-    <b>public</b>:
-        <b>virtual</b> <b>void</b> function1(<b>int</b> a, <b>int</b> b);
-        <b>virtual</b> <b>bool</b> function2();
-        <b>static</b> iExternal* instance() { <b>return</b> pInstance(); }
-        <b>static</b> <b>void</b> setInstanceForTesting(iExternal* newInstance) { pInstance(true, newInstance); }
-        <b>static</b> <b>void</b> clearInstanceForTesting() { pInstance(true, 0); }
-    <b>protected</b>:
-        iExternal() { }
-    <b>private</b>:
-        <b>inline</b> <b>static</b> iExternal* pInstance(<b>bool</b> set = false, iExternal* newInstance = 0)
-        {
-            <b>static</b> iExternal* defaultInstance = <b>new</b> iExternal();
-            <b>static</b> iExternal* instance = defaultInstance;
-            <b>if</b> (set) {
-                <b>if</b> (!newInstance) {
-                    newInstance = defaultInstance;
-                }
-                instance = newInstance;
-            }
-            <b>return</b> instance;
-        }
-    };
-<b>public</b>:
-    <b>void</b> aFunction() {
-        <b>if</b> (iExternal::instance()-&gt;function2()) {
-            iExternal::instance()-&gt;function1(1, 2);
-        }
-    }
-}
-</code></pre>
-
-<pre><code>// MyClassTest.cpp
-// ------------------------------------------------------------
-<b>class</b> MyClassTest : <b>public</b> ::testing::Test {
-    <b>class</b> iExternalMock : <b>public</b> MyClass::iExternal {
-    <b>public</b>:
-        MOCK_METHOD0(function1, <b>void</b>(<b>int</b>, <b>int</b>));
-        MOCK_METHOD0(function2, <b>bool</b>());
-    };
-    <b>void</b> setInstanceForTesting(MyClass::iExternal& mock) {
-        MyClass::iExternal::setInstanceForTesting(&mock);
-    }
-};
-TEST_F(MyClassTest, aFunctionTest)
-{
-    iExternalMock externalMock;
-    EXPECT_CALL(externalMock, function2())
-        .WillOnce(Return(true))
-        .WillOnce(Return(false));
-    EXPECT_CALL(externalMock, function1(1, 2));
-    setInstanceForTesting(externalMock);
-    MyClass c;
-    c.aFunction();
-}
-</code></pre>
-
-#### Tip: Mocks and OwnPtr (PassOwnPtr)
-
-OwnPtr and mocking objects can be tricky to get right, here is some important
-information.
-
-***The Problem***
-
-As normal, once you return an object via a PassOwnPtr you no longer control the
-life cycle of the object. This means that you **must not** use the object as an
-expectation (EXPECT_CALL) for another function call because;
-
-* On each call, GMock checks if any of the expectations match.
-* On termination, if something went wrong GMock might try to print the
- expectation (for both matched and unmatched expectations).
-
-Here is some example code which is **WRONG**:
-
-* At **(1)** myA1 has been deleted, but GMock will check **both** the
- mockb EXPECT_CALLs.
-* At **(2)** both myA1 and myA2 have been deleted, but if EXPECT_CALL
- is not matched GMock may try to print myA1 and myA2.
-
-<pre><code>// Actual implementation
-<b>class</b> A {};
-<b>class</b> B {
-   <b>virtual</b> use(A& a) {} {}
-};
-<b>class</b> C {
-   B* m_b;
-   C(B* b): m_b(b) {}
-   <b>void</b> doIt(PassOwnPtr&lt;A&gt; myA) {
-     m_b-&gt;use(*myA);
-     // As we own myA it gets deleted here.
-   }
-};
-// Mocks
-<b>class</b> MockB : <b>public</b> B {
-    MOCK_METHOD0(use, <b>void</b>(A&));
-};
-// Test
-TEST(MyTest, CDoItTest)
-{
-  OwnPtr&lt;A&gt; myA1 = adoptPtr(<b>new</b> A());
-  OwnPtr&lt;A&gt; myA2 = adoptPtr(<b>new</b> A());
-  MockB mockb;
-  EXPECT_CALL(mockb, use(Ref(*myA1.get()))); // Ref() means "is a reference to"
-  EXPECT_CALL(mockb, use(Ref(*myA2.get())));
-  C c(&mockb);
-  c.doIt(myA1.release());
-  c.doIt(myA2.release()); // <b>(1)</b>
-  // <b>(2)</b>
-}
-</code></pre>
-
-***Solutions that don't work***
-
-Creating a specialization of OwnedPtrDeleter
-
-> `template <> struct OwnedPtrDeleter<MyClass> {}`
-
-> **Why?**
-
-> > The OwnedPtrDeleter specialization must be visible at the location that the
-> > OwnPtr/PassOwnPtr is created.
-
-## Test Helpers
-
-Test helpers are an important part of making Blink easier to test for everyone.
-The more test helpers that exist, the easier it is to write new unit tests as
-you have to write less boilerplate code and find it easier to debug failing
-tests.
-
-Test helpers include;
-
-* Pretty printing functions for types.
-* Shared fake implementations of complex types.
-* Quick creation functions for types.
-* `operator==` definitions to allow `EXPECT_EQ` and comparisons in
- `EXPECT_CALL` mocks to work.
-
-Test helpers **should;**
-
-* be define in a "XXXTestHelper.h" file, where XXX is the type (or
- type group) that it helps (there might also be a XXXTestHelper.cpp
- in rare cases).
-* have some basic tests to make sure they work. **Nobody wants to
- debug test helpers while writing their own tests!**
- * This is specially important for PrintTo functions to make sure
- they actually print what you expect. You can use the
- `EXPECT_THAT` with Regex from GMock to make these tests easier
- to write.
- * These should be in a XXXTestHelperTest.cpp file (shouldn't need
- a header file).
-
-### Operator==
-
-Both the `EXPECT_EQ` and the `EXPECT_CALL` methods use `a == b` to compare if
-two objects are equal. However for many reasons you don't want this operator to
-be generally available in Blink. You can define the operator in the test helper
-instead and then it will only be available during tests.
-
-Unlike PrintTo, operator== is not a template so the normal type hierarchy
-applies.
-
-<pre><code><b>bool</b> <b>operator</b>==(<b>const</b> TYPE& a, <b>const</b> TYPE& b)
-{
-    <b>return</b> SOMETHING
-}
-</code></pre>
-
-#### **Operator== Gotchas - Namespacing**
-
-The **operator==** MUST be define in the same namespace as the type for
-`EXPECT_EQ` to work. For example, if type is `::WebCore::AnimatableValue` the
-operator must be in the `::WebCore` namespace.
-
-### Pretty Printers
-
-Pretty printers make it much easier to see what is going on in your test and why
-a match isn't working. They should be created for any simple type which has a
-useful string representation.
-
-```none
-void PrintTo(const A& a, ::std::ostream* os)
-{
-    *os << "A@" << &a;
-}
-```
-
-More Information on creating pretty printers can be found at [GTest Advanced
-Guide: Teaching Google Test How to Print Your
-Values](https://code.google.com/p/googletest/wiki/AdvancedGuide#Teaching_Google_Test_How_to_Print_Your_Values).
-
-#### **Pretty Printers Gotchas - Namespace**
-
-Pretty Printers **must** be define in the same namespace as the class which it
-is printing.
-
-<pre><code>
-<b>namespace</b> A {
-  <b>class</b> A{};
-}
-<b>namespace</b> {
-  <b>void</b> PrintTo(<b>const</b> A& a, ::std::ostream* os) {} // Never called
-}
-</code></pre>
-
-#### **Pretty Printers Gotchas - Type matching**
-
-Pretty Printers only work on **exact** and **known** type match. This means
-that;
-
-* A PrintTo for a base class will not apply to children classes.
-* A PrintTo for a specific class will not apply when that class is
- referenced/pointed to as a base class.
-
-Further information at the gtest bug tracker -
-<https://code.google.com/p/googletest/issues/detail?id=443>
-
-This is hard to understand, but shown by the following example (also attached as
-printto-confusing.cpp).
-
-<pre><code>
-#include &lt;iostream&gt;
-#include &lt;gtest/gtest.h&gt;
-<b>using</b> std::cout;
-<b>using</b> testing::PrintToString;
-<b>class</b> A {};
-<b>class</b> B : <b>public</b> A {};
-<b>class</b> C : <b>public</b> B {};
-<b>void</b> PrintTo(<b>const</b> A& a, ::std::ostream* os)
-{
-    *os &lt;&lt; "A@" &lt;&lt; &a;
-}
-<b>void</b> PrintTo(<b>const</b> B& b, ::std::ostream* os)
-{
-    *os &lt;&lt; "B@" &lt;&lt; &b;
-}
-<b>int</b> main() {
-    A a;
-    B b;
-    C c;
-    A* a_ptr1 = &a;
-    B* b_ptr = &b;
-    A* a_ptr2 = &b;
-    C* c_ptr = &c;
-    A* a_ptr3 = &c;
-    cout &lt;&lt; PrintToString(a) &lt;&lt; "\n";       // A@0xXXXXXXXX
-    cout &lt;&lt; PrintToString(b) &lt;&lt; "\n";       // B@0xYYYYYYYY
-    cout &lt;&lt; PrintToString(c) &lt;&lt; "\n";       // 1-byte object &lt;60&gt;
-    cout &lt;&lt; PrintToString(*a_ptr1) &lt;&lt; "\n"; // A@0xXXXXXXXX
-    cout &lt;&lt; PrintToString(*b_ptr) &lt;&lt; "\n";  // B@0xYYYYYYYY
-    cout &lt;&lt; PrintToString(*a_ptr2) &lt;&lt; "\n"; // A@0xYYYYYYYY
-}
-</code></pre>
-
-You can work around this problem by also defining a couple of extra PrintTo
-methods (also attached as printto-workaround.cpp).
-
-<pre><code>#include &lt;iostream&gt;
-#include &lt;gtest/gtest.h&gt;
-<b>using</b> std::cout;
-<b>using</b> testing::PrintToString;
-#define OVERRIDE override
-// MyClass.h
-// ---------------------------------------------------------------
-<b>class</b> MyClassA {
-// As WebKit is compiled without RTTI, the following idiom is used to
-// emulate RTTI type information.
-<b>protected</b>:
-   <b>enum</b> MyClassType {
-     BType,
-     CType
-   };
-   <b>virtual</b> MyClassType type() <b>const</b> = 0;
-<b>public</b>:
-    <b>bool</b> isB() <b>const</b> { <b>return</b> type() == BType; }
-    <b>bool</b> isC() <b>const</b> { <b>return</b> type() == CType; }
-};
-<b>class</b> MyClassB : <b>public</b> MyClassA {
-    <b>virtual</b> MyClassType type() <b>const</b> OVERRIDE { <b>return</b> BType; }
-};
-<b>class</b> MyClassC : <b>public</b> MyClassB {
-    <b>virtual</b> MyClassType type() <b>const</b> OVERRIDE { <b>return</b> CType; }
-};
-// MyClassTestHelper.h
-// ---------------------------------------------------------------
-<b>void</b> PrintTo(<b>const</b> MyClassB& b, ::std::ostream* os)
-{
-    *os &lt;&lt; "B@" &lt;&lt; &b;
-}
-// Make C use B's PrintTo
-<b>void</b> PrintTo(<b>const</b> MyClassC& c, ::std::ostream* os)
-{
-    PrintTo(*<b>static_cast</b>&lt;<b>const</b> MyClassB*&gt;(&c), os);
-}
-// Call the more specific subclass PrintTo method
-// *WARNING*: The base class PrintTo must be defined *after* the other PrintTo
-// methods otherwise it'll just call itself.
-<b>void</b> PrintTo(<b>const</b> MyClassA& a, ::std::ostream* os)
-{
-    <b>if</b> (a.isB()) {
-        PrintTo(*<b>static_cast</b>&lt;<b>const</b> MyClassB*&gt;(&a), os);
-    } <b>else</b> <b>if</b> (a.isC()) {
-        PrintTo(*<b>static_cast</b>&lt;<b>const</b> MyClassC*&gt;(&a), os);
-    } <b>else</b> {
-        //ASSERT_NOT_REACHED();
-    }
-}
-<b>int</b> main() {
-    MyClassB b;
-    MyClassC c;
-    MyClassB* b_ptr = &b;
-    MyClassA* a_ptr1 = &b;
-    MyClassC* c_ptr = &c;
-    MyClassA* a_ptr2 = &c;
-    cout &lt;&lt; PrintToString(b) &lt;&lt; "\n";       // B@0xYYYYYYYY
-    cout &lt;&lt; PrintToString(*b_ptr) &lt;&lt; "\n";  // B@0xYYYYYYYY
-    cout &lt;&lt; PrintToString(*a_ptr1) &lt;&lt; "\n"; // B@0xYYYYYYYY
-    cout &lt;&lt; PrintToString(c) &lt;&lt; "\n";       // B@0xAAAAAAAA
-    cout &lt;&lt; PrintToString(*c_ptr) &lt;&lt; "\n";  // B@0xAAAAAAAA
-    cout &lt;&lt; PrintToString(*a_ptr2) &lt;&lt; "\n"; // B@0xAAAAAAAA
-}
-</code></pre>
-
-## Future Proposals
-
-All these issues are up for discussion and have yet to be decided on;
-
-* Creation of high quality fake objects for core blink components.
- Each fake should be created and maintained by the OWNERS that owns
- the real implementation. See [Testing on the Toilet: Know Your Test
- Doubles](http://googletesting.blogspot.com.au/2013/06/testing-on-toilet-fake-your-way-to.html),
- TotT: Fake Your Way to Better Tests -
- <http://googletesting.blogspot.com.au/2013/06/testing-on-toilet-fake-your-way-to.html>
-* Creation of test helpers for all objects in Blink.
-* Split unit tests into their own build unit rather then one big
- "webkit_unittest" (faster test building and linking, ability to use
- mocks via inclusion) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/unittesting/printto-confusing.cpp b/chromium/docs/website/site/blink/unittesting/printto-confusing.cpp
deleted file mode 100644
index a82a35cc2de..00000000000
--- a/chromium/docs/website/site/blink/unittesting/printto-confusing.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <iostream>
-#include <gtest/gtest.h>
-
-using std::cout;
-using testing::PrintToString;
-
-class A {};
-class B : public A {};
-class C : public B {};
-
-
-void PrintTo(const A& a, ::std::ostream* os)
-{
- *os << "A@" << &a;
-}
-
-void PrintTo(const B& b, ::std::ostream* os)
-{
- *os << "B@" << &b;
-}
-
-int main() {
- A a;
- B b;
- C c;
-
- A* a_ptr1 = &a;
- B* b_ptr = &b;
- A* a_ptr2 = &b;
- C* c_ptr = &c;
- A* a_ptr3 = &c;
-
- cout << PrintToString(a) << "\n"; // A@0xXXXXXXXX
- cout << PrintToString(b) << "\n"; // B@0xYYYYYYYY
- cout << PrintToString(c) << "\n"; // 1-byte object <60>
- cout << PrintToString(*a_ptr1) << "\n"; // A@0xXXXXXXXX
- cout << PrintToString(*b_ptr) << "\n"; // B@0xYYYYYYYY
- cout << PrintToString(*a_ptr2) << "\n"; // A@0xYYYYYYYY
-}
diff --git a/chromium/docs/website/site/blink/unittesting/printto-workaround.cpp b/chromium/docs/website/site/blink/unittesting/printto-workaround.cpp
deleted file mode 100644
index e70e7622fc3..00000000000
--- a/chromium/docs/website/site/blink/unittesting/printto-workaround.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <iostream>
-#include <gtest/gtest.h>
-
-using std::cout;
-using testing::PrintToString;
-
-#define OVERRIDE override
-
-// MyClass.h
-// ---------------------------------------------------------------
-
-class MyClassA {
-
-// As WebKit is compiled without RTTI, the following idiom is used to
-// emulate RTTI type information.
-protected:
- enum MyClassType {
- BType,
- CType
- };
-
- virtual MyClassType type() const = 0;
-
-public:
- bool isB() const { return type() == BType; }
- bool isC() const { return type() == CType; }
-};
-
-class MyClassB : public MyClassA {
- virtual MyClassType type() const OVERRIDE { return BType; }
-};
-class MyClassC : public MyClassB {
- virtual MyClassType type() const OVERRIDE { return CType; }
-};
-
-// MyClassTestHelper.h
-// ---------------------------------------------------------------
-
-void PrintTo(const MyClassB& b, ::std::ostream* os)
-{
- *os << "B@" << &b;
-}
-
-// Make C use B's PrintTo
-void PrintTo(const MyClassC& c, ::std::ostream* os)
-{
- PrintTo(*static_cast<const MyClassB*>(&c), os);
-}
-
-// Call the more specific subclass PrintTo method
-// *WARNING*: The base class PrintTo must be defined *after* the other PrintTo
-// methods otherwise it'll just call itself.
-void PrintTo(const MyClassA& a, ::std::ostream* os)
-{
- if (a.isB()) {
- PrintTo(*static_cast<const MyClassB*>(&a), os);
- } else if (a.isC()) {
- PrintTo(*static_cast<const MyClassC*>(&a), os);
- } else {
- //ASSERT_NOT_REACHED();
- }
-}
-
-int main() {
- MyClassB b;
- MyClassC c;
-
- MyClassB* b_ptr = &b;
- MyClassA* a_ptr1 = &b;
- MyClassC* c_ptr = &c;
- MyClassA* a_ptr2 = &c;
-
- cout << PrintToString(b) << "\n"; // B@0xYYYYYYYY
- cout << PrintToString(*b_ptr) << "\n"; // B@0xYYYYYYYY
- cout << PrintToString(*a_ptr1) << "\n"; // B@0xYYYYYYYY
-
- cout << PrintToString(c) << "\n"; // B@0xAAAAAAAA
- cout << PrintToString(*c_ptr) << "\n"; // B@0xAAAAAAAA
- cout << PrintToString(*a_ptr2) << "\n"; // B@0xAAAAAAAA
-}
diff --git a/chromium/docs/website/site/blink/v8-bindings/index.md b/chromium/docs/website/site/blink/v8-bindings/index.md
deleted file mode 100644
index de201e8fe02..00000000000
--- a/chromium/docs/website/site/blink/v8-bindings/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: v8-bindings
-title: V8 Bindings, Promises
----
-
-* [Promise helpers design
- doc](https://docs.google.com/a/chromium.org/document/d/1WphFrSM18-m6b4RFaBxwLL_zNlpOdCtEbuRclQ-S_ts/edit#) \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/web-workers/index.md b/chromium/docs/website/site/blink/web-workers/index.md
deleted file mode 100644
index cbed93a0058..00000000000
--- a/chromium/docs/website/site/blink/web-workers/index.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: web-workers
-title: Web Workers
----
-
-Web Workers spec:
-<http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html>
-
-As of Nov 2015, the most up-to-date documentation is:
-<https://docs.google.com/document/d/1i3IA3TG00rpQ7MKlpNFYUF6EfLcV01_Cv3IYG_DjF7M/edit>
-
-Contents below are obsolete!
-
-As of Nov 2014, the most up-to-date documentation was:
-<https://docs.google.com/a/chromium.org/document/d/1NYMYf-_P_K2iPKlSGyv5ou_x0yL_4IRwt-DPOYqRb0s/edit#>
-
-As of Oct 2013, Blink/Chromium's multi-process architecture Web Workers
-(Dedicated and Shared Worker) was implemented as follows:
-
-* **Dedicated Worker**
- * Runs in the same **renderer process** as its parent document,
- but on a different thread (see
- [Source/core/workers/WorkerThread.\*](https://code.google.com/p/chromium/codesearch#search/&q=file:WorkerThread.h&sq=package:chromium&type=cs)
- in blink for details). Note that it’s NOT the chromium’s worker
- process thread implemented in content/worker/worker_thread.\*.
- * In Chromium the renderer process’s main thread is implemented by
- content/renderer/render_thread_impl.\*, while the Blink’s worker
- thread does NOT have corresponding message_loop/thread in
- chromium (yet). You can use
- [webkit_glue::WorkerTaskRunner](https://code.google.com/p/chromium/codesearch#chromium/src/webkit/child/worker_task_runner.h&l=19)
- (webkit/child/worker_task_runner.\*) to post tasks to the
- Blink’s worker threads in chromium.
- * The embedder’s platform code in Chromium for Dedicated Worker is
- [/content/renderer/\*](http://src.chromium.org/viewvc/chrome/trunk/src/content/renderer/)
- (in addition to content/child/\*), but NOT content/worker/\*.
- * Platform APIs are accessible in Worker contexts via
- WebKit::Platform::current(), and it’s implemented in
- [RendererWebKitPlatformSupport](https://code.google.com/p/chromium/codesearch#chromium/src/content/renderer/renderer_webkitplatformsupport_impl.h&l=47&q=RendererWebKitPlatformSupport&type=cs&sq=package:chromium)
- (content/renderer/renderer_webkitplatformsupport_impl.cc) in
- Chromium (as in the case for regular document contexts).
- * Note that to call Platform APIs from Worker contexts it needs to
- be implemented in a thread-safe way in the embedder code (e.g.
- do not lazily create a shared object without lock), or the
- worker code should explicitly relay the call onto the renderer’s
- main thread in Blink (e.g. by
- [WTF::callOnMainThread](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/wtf/MainThread.h&l=48&q=callOnMainThread&type=cs&sq=package:chromium)).
-* **Shared Worker (the following was valid until April 2014)**
- * Runs in its own separate process called **worker process** and
- is connected to multiple renderer processes via the browser
- process. Shared Worker also runs in its own worker thread.
- * In Chromium the worker process’s main thread is implemented by
- content/worker/worker_thread.\* (note that this is NOT the
- worker thread you refer in Blink!!). As well as in Dedicated
- Workers the Blink’s worker thread does not have corresponding
- message_loop/thread in chromium.
- * The embedder’s platform code in Chromium for Shared Worker is
- [/content/worker/\*](http://src.chromium.org/viewvc/chrome/trunk/src/content/worker/)
- (in addition to content/child/\*).
- * Platform APIs are accessible in Worker contexts via
- WebKit::Platform::current(), and it’s implemented in
- [WorkerWebKitPlatformSupportImpl](https://code.google.com/p/chromium/codesearch#chromium/src/content/worker/worker_webkitplatformsupport_impl.h&q=WorkerWebKitPlatformSupport&sq=package:chromium&type=cs&l=30)
- (content/worker/worker_webkitplatformsupport_impl.cc) in
- Chromium. As well as for Dedicated Worker, to use a platform API
- in Worker contexts the API needs to be implemented in a
- thread-safe way in the embedder code, or Blink-side code should
- explicitly relay the platform API access onto the main thread by
- [WTF::callOnMainThread](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/wtf/MainThread.h&l=48&q=callOnMainThread&type=cs&sq=package:chromium). \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/webcrypto/index.md b/chromium/docs/website/site/blink/webcrypto/index.md
deleted file mode 100644
index 35f926cb535..00000000000
--- a/chromium/docs/website/site/blink/webcrypto/index.md
+++ /dev/null
@@ -1,445 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: webcrypto
-title: WebCrypto
----
-
-[TOC]
-
-## Accessing it
-
-* The WebCrypto API was enabled by default starting in **Chrome 37**
- (August 26, 2014)
-* Access to the WebCrypto API is restricted to [secure
- origins](http://www.chromium.org/Home/chromium-security/security-faq#TOC-Which-origins-are-secure-)
- (which is to say https:// pages).
- * Note: [In the spec](https://github.com/w3c/webcrypto/issues/28),
- crypto.subtle is supposed to be undefined in insecure contexts,
- whereas in Chrome it is defined however any operation on it
- fails with NotSupportedError. (This will be updated in the
- future).
-
-## Standards compliance
-
-Chromium's implementation follows the [Web Cryptography API Editor's
-Draft](https://w3c.github.io/webcrypto/Overview.html).
-
-Be sure to refer to the copy of the spec on github **NOT the one hosted on
-w3c.org**.
-
-The version on w3c.org is horribly out of date (as of October 3 2016).
-
-## Reporting bugs
-
-* Issues with the implementation should be filed on [Chromium's bug
- tracker](https://code.google.com/p/chromium/issues/list), and given
- the component
- [Blink&gt;WebCrypto](https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EWebCrypto).
-* Issues with the [Web Cryptography
- specification](https://w3c.github.io/webcrypto/Overview.html) should
- be filed on the [github](https://github.com/w3c/webcrypto/issues).
-
-## Supported algorithms (as of Chrome 53)
-
-The WebCrypto specification does not mandate any particular algorithms.
-
-At this time Chromium implements all of the algorithms described by the main
-specification:
-
-> <table>
-> <tr>
-> <td><b> Algorithm</b></td>
-> <td><b> Supported</b></td>
-> <td><b> Notes</b></td>
-> </tr>
-> <tr>
-> <td> RSASSA-PKCS1-v1_5</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> RSA-PSS </td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> RSA-OAEP</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> ECDSA</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> ECDH</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> AES-CTR</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> AES-CBC</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> AES-GCM</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> AES-KW</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> HMAC</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> SHA-1</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> SHA-256</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> SHA-384</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> SHA-512</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> HKDF</td>
-> <td> YES</td>
-> </tr>
-> <tr>
-> <td> PBKDF2</td>
-> <td> YES</td>
-> </tr>
-> </table>
-
-**Abandoned algorithms**
-
-Earlier drafts of the specification contained additional algorithms, which have
-since been pulled from both the spec and from Chromium's implementation:
-
-> <table>
-> <tr>
-> <td><b> Algorithm</b></td>
-> <td><b> Supported</b></td>
-> <td><b> Notes</b></td>
-> </tr>
-> <tr>
-> <td> AES-CMAC</td>
-> <td> NO</td>
-
-> * <td>No longer part of the spec</td>
-> * <td>Was never implemented by Chrome</td>
-
-> </tr>
-> <tr>
-> <td> AES-CFB</td>
-> <td> NO</td>
-
-> * <td>No longer part of the spec</td>
-> * <td>Was never implemented by Chrome</td>
-
-> </tr>
-> <tr>
-> <td> Diffie-Hellman</td>
-> <td> NO</td>
-
-> * <td>No longer part of the spec</td>
-> * <td>Was never implemented by Chrome</td>
-
-> </tr>
-> <tr>
-> <td> Concat KDF</td>
-> <td> NO</td>
-
-> * <td>No longer part of the spec</td>
-> * <td>Was never implemented by Chrome</td>
-
-> </tr>
-> <tr>
-> <td> HKDF-CTR</td>
-> <td> NO</td>
-
-> * <td>No longer part of the spec</td>
-> * <td>Was never implemented by Chrome</td>
-> * <td>The spec has redefined this as <a
- href="https://github.com/w3c/webcrypto/issues/27">redefined this
- as HKDF</a></td>
-
-> </tr>
-> <tr>
-> <td> RSAES-PKCS1-v1_5</td>
-> <td> NO</td>
-
-> * <td>No longer part of the spec.</td>
-> * <td>Chrome supported this in early days before Web Crypto was
- enabled by default, but has since dropped support.</td>
-
-> </tr>
-> </table>
-
-> ### RSA support
-
- * The modulus length must be a multiple of 8 bits
- * The modulus length must be &gt;= 256 and &lt;= 16384 bits
- * When *generating* RSA keys the public exponent must be 3 or
- 65537. This limitation does not apply when importing keys.
-
-> ### AES support
-
- * The supported key sizes are:
- * 128 bits
- * 256 bits
- * 192 bit AES keys are not supported
-
-> ### EC support
-
- * The supported
- [namedCurves](https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#dfn-NamedCurve)
- are:
- * P-256
- * P-384
- * P-521
-
-## Supported key formats
-
-Chromium's WebCrypto implementation supports all of the key formats - "raw",
-"spki", "pkcs8", "jwk", with the following caveats:
-
-* There are differences in DER key format handling between Web Crypto
- implementations. Where possible for compatibility prefer using "raw"
- keys or "jwk" which have better interoperability.
-* When importing/exporting "spki" and "pkcs8" formats, the only OIDs
- supported by Chromiumare those recognized by OpenSSL/BoringSSL.
-
- * Importing ECDH keys [does not accept
- id-ecDH](https://bugs.chromium.org/p/chromium/issues/detail?id=532728).
- The OID must instead be id-ecPublicKey (This can cause problems
- importing keys generated by Firefox; use "raw" EC keys as a
- workaround; Chromium in this case is not spec compliant)
- * Importing RSA-PSS keys does not accept id-RSASSA-PSS. The OID
- must instead be rsaEncryption
- * Importing RSA-OAEP keys does not accept id-RSAES-OAEP. The OID
- must instead be rsaEncryption.
- * Exporting ECDH keys uses OID id-ecPublicKey, whereas the
- WebCrypto spec says to use id-ecDH.
- * Exporting RSA-PSS keys uses OID rsaEncryption, whereas the
- WebCrypto spec says to use RSA-PSS.
- * Exporting RSA-OAEP keys uses OID rsaEncryption, whereas the
- WebCrypto spec says to use id-RSAES-OAEP.
-
-## Examples of how to use WebCrypto
-
-Some examples of using WebCrypto can be found in the [Blink
-LayoutTests](https://chromium.googlesource.com/chromium/blink/+/HEAD/LayoutTests/crypto/).
-
-(These can't be run directly in the browser because they access functionality
-from the test harness, however it gives an idea of how to call the various
-operations)
-
-## Usage data for WebCrypto
-
-Google Chrome measures how commonly WebCrypto algorithms and methods are across
-web pages.
-To explore the data use the [Chromium feature stack rank
-dashboard](https://www.chromestatus.com/metrics/feature/popularity). This counts
-the number of pageloads that made use of the given feature (internal users can
-navigate an equivalent histogram using "WebCore.FeatureObserver").
-For details on how the metrics are measured read the comment block in
-[CryptoHistograms.h](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/modules/crypto/CryptoHistograms.h).
-Here is the correspondence between the feature names found on the [Chromium
-feature stack rank
-dashboard](https://www.chromestatus.com/metrics/feature/popularity) and
-WebCrypto's operations/algorithms:
-
-<table>
-<tr>
-<td> <b>Feature</b></td>
-<td> <b>WebCrypto method</b></td>
-</tr>
-<tr>
-<td> `CryptoGetRandomValues` </td>
-<td> crypto.getRandomValues()</td>
-</tr>
-<tr>
-<td> `SubtleCryptoEncrypt`</td>
-<td> crypto.subtle.encrypt()</td>
-</tr>
-<tr>
-<td> `SubtleCryptoDecrypt`</td>
-<td> crypto.subtle.decrypt() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoSign`</td>
-<td> crypto.subtle.sign() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoVerify`</td>
-<td> crypto.subtle.verify() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoDigest`</td>
-<td> crypto.subtle.digest()</td>
-</tr>
-<tr>
-<td> `SubtleCryptoGenerateKey`</td>
-<td> crypto.subtle.generateKey() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoImportKey`</td>
-<td> crypto.subtle.importKey() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoExportKey`</td>
-<td> crypto.subtle.exportKey() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoDeriveBits`</td>
-<td> crypto.subtle.deriveBits()</td>
-</tr>
-<tr>
-<td> `SubtleCryptoDeriveKey`</td>
-<td> crypto.subtle.deriveKey() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoWrapKey`</td>
-<td> crypto.subtle.wrapKey() </td>
-</tr>
-<tr>
-<td> `SubtleCryptoUnwrapKey`</td>
-<td> crypto.subtle.unwrapKey() </td>
-</tr>
-</table>
-
-<table>
-<tr>
-<td> <b>Feature</b></td>
-<td><b>WebCrypto algorithm</b></td>
-</tr>
-<tr>
-<td> CryptoAlgorithmAesCbc `</td>
-<td> AES-CBC</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmHmac`</td>
-<td> HMAC</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmRsaSsaPkcs1v1_5`</td>
-<td> RSASSA-PKCS1-v1_5</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmSha1`</td>
-<td> SHA-1</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmSha256`</td>
-<td> SHA-256</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmSha384`</td>
-<td> SHA-384 </td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmSha512`</td>
-<td> SHA-512</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmAesGcm`</td>
-<td> AES-GCM</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmRsaOaep`</td>
-<td> RSA-OAEP</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmAesCtr`</td>
-<td> AES-CTR</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmAesKw`</td>
-<td> AES-KW</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmRsaPss`</td>
-<td> RSA-PSS</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmEcdsa`</td>
-<td> ECDSA</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmEcdh`</td>
-<td> ECDH</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmHkdf`</td>
-<td> HKDF</td>
-</tr>
-<tr>
-<td> `CryptoAlgorithmPbkdf2`</td>
-<td> PBKDF2</td>
-</tr>
-</table>
-
-## Chromium developer's guide
-
-This section is intended for Chromium developers writing patches to address
-WebCrypto bugs/features.
-
-### Code location reference
-
-* [src/components/webcrypto](https://chromium.googlesource.com/chromium/src/+/HEAD/components/webcrypto)
- Contains the actual crypto algorithm implementations (HMAC, ECDH, RSA-PSS,
- etc.).
-* [src/components/test/data/webcrypto](https://chromium.googlesource.com/chromium/src/+/HEAD/components/test/data/webcrypto)
- Test data used by
- [src/components/webcrypto](https://chromium.googlesource.com/chromium/src/+/HEAD/components/webcrypto).
- Note that more extensive tests live in LayoutTests, and these will
- eventually be transitioned there too.
-* [src/third_party/WebKit/LayoutTests/crypto](https://chromium.googlesource.com/chromium/blink/+/HEAD/LayoutTests/crypto)
- The end-to-end Javascript tests that exercise WebCrypto's crypto.subtle.\*
- methods.
-
-* [src/third_party/WebKit/public/platform/WebCrypto.h](https://chromium.googlesource.com/chromium/blink/+/HEAD/public/platform/WebCrypto.h)
- Public interface that defines the Blink &lt;--&gt; Chromium layer
-* [src/third_party/WebKit/Source/modules/crypto](https://chromium.googlesource.com/chromium/blink/+/HEAD/Source/modules/crypto)
- The Blink layer (responsible for interacting with the Javascript), and then
- calling into Chromium side using the WebCrypto interface.
-* [src/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp](https://chromium.googlesource.com/chromium/blink/+/HEAD/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp)
- Implements the structured clone for CryptoKey
-
-### Running the Chromium unit-tests
-
-> `cd src`
-
-> `ninja -C out/Debug components_unittests`
-
-> `./out/Debug/components_unittests --gtest_filter="WebCrypto*"`
-
-### Running the Blink LayoutTests
-
-> ### `cd src/third_party/WebKit`
-
-> ### `ninja -C out/Debug blink_tests`
-
-> ### `./Tools/Scripts/run-webkit-tests --debug crypto`
-
-### Getting "XOpenDisplay failed" when running unittests
-
-Unfortunately `components_unittests` requires a display to run, even though
-WebCrypto itself has no such dependency. If you are running from a terminal and
-get this error the easiest fix is to use Xvfb to create a mock display server
-(on port 4 in my example)
-
-> `#Run this in the background....`
-> Xvfb :4 -screen 0 1024x768x24
-> # And once it is up, re-run the unit-tests with its display port
-> DISPLAY:4 ./out/Debug/components_unittests --gtest_filter="WebCrypto\*" \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/webidl/blink-idl-extended-attributes/index.md b/chromium/docs/website/site/blink/webidl/blink-idl-extended-attributes/index.md
deleted file mode 100644
index 34ccaac76b3..00000000000
--- a/chromium/docs/website/site/blink/webidl/blink-idl-extended-attributes/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-- - /blink/webidl
- - Web IDL in Blink
-page_name: blink-idl-extended-attributes
-title: Blink IDL Extended Attributes
----
-
-Documentation moved into the source tree:
-
-<https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/webidl/index.md b/chromium/docs/website/site/blink/webidl/index.md
deleted file mode 100644
index 3165d6f2d15..00000000000
--- a/chromium/docs/website/site/blink/webidl/index.md
+++ /dev/null
@@ -1,682 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: webidl
-title: Web IDL in Blink
----
-
-*Blink developers (non-bindings development): for general IDL use, see [Web IDL
-interfaces](/developers/web-idl-interfaces); for configuring bindings, see
-[Blink IDL Extended Attributes](/blink/webidl/blink-idl-extended-attributes);
-for IDL dictionaries use, see [IDL dictionaries in
-Blink](https://docs.google.com/document/d/1mRB5zbfHd0lX2Y_Hr7g6grzP_L4Xc6_gBRjL-AE7sY8/edit?usp=sharing).*
-
-[TOC]
-
-## Overview
-
-[​Web IDL](https://heycam.github.io/webidl/) is a language that defines how
-Blink interfaces are bound to V8. You need to write IDL files (e.g.
-xml_http_request.idl, element.idl, etc) to expose Blink interfaces to those
-external languages. When Blink is built, the IDL files are parsed, and the code
-to bind Blink implementations to V8 interfaces automatically generated.
-
-This document describes practical information about how the IDL bindings work
-and how you can write IDL files in Blink. The syntax of IDL files is fairly well
-documented in the [​Web IDL spec](https://heycam.github.io/webidl/), but it is
-too formal to read :-) and there are several differences between the Web IDL
-spec and the Blink IDL due to implementation issues. For design docs on bindings
-generation, see [IDL build](/developers/design-documents/idl-build) and [IDL
-compiler](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLCompiler.md).
-
-For Blink developers, the main details of IDLs are the extended attributes,
-which control implementation-specific behavior: see [Blink IDL Extended
-Attributes](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md)
-for extensive details.
-
-Our goal is to converge Blink's IDL and Web IDL. The grammar is almost
-identical; see below.
-
-## Basics of IDL
-
-Here is an example of IDL files:
-
-```none
-[CustomToV8]
-interface Node {
-    const unsigned short ELEMENT_NODE = 1;
-    attribute Node parentNode;
-    [TreatReturnedNullStringAs=Null] attribute DOMString nodeName;
-    [Custom] Node appendChild(Node newChild);
-    void addEventListener(DOMString type, EventListener listener, optional boolean useCapture);
-};
-```
-
-Let us introduce some terms:
-
-* The above IDL file describes the `Node` **interface**.
-* `ELEMENT_NODE` is a **constant** of the `Node` interface.
-* `parentNode` and `nodeName` are **attributes** of the `Node`
- interface.
-* `appendChild(...)` and `addEventListener(...)` are **operations** of
- the `Node` interface.
-* `type`, `listener` and `useCapture` are **arguments** of the
- `addEventListener` operation.
-* `[CustomToV8]`, `[TreatReturnedNullStringAs=Null]` and `[Custom]`
- are **extended attributes**.
-
-The key points are as follows:
-
-* An IDL file controls how the bindings code between JavaScript engine
- and the Blink implementation is generated.
-* Extended attributes enable you to control the bindings code more in
- detail.
-* There are ~60 extended attributes, explained in [a separate
- page](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md).
-* Extended attributes can be specified on interfaces, methods,
- attributes, arguments, and types (but not constants, enums, etc.).
-
-The valid extended attributes depend on where they attach: interfaces and
-methods have different extended attributes.
-
-A simple IDL file template looks like:
-
-```none
-interface INTERFACE_NAME {
-    const unsigned long value = 12345;
-    attribute Node node;
-    void func(long argument, ...);
-};
-```
-
-With extended attributes, this looks like:
-
-```none
-[
-    EXTATTR,
-    EXTATTR,
-    ...,
-] interface INTERFACE_NAME {
-    const unsigned long value = 12345;
-    [EXTATTR, EXTATTR, ...] attribute Node node;
-    [EXTATTR, EXTATTR, ...] void func([EXTATTR, EXTATTR, ...] optional [EXTATTR] long argument, ...);
-};
-```
-
-## Syntax
-
-Blink IDL is a dialect of Web IDL. The lexical syntax is identical, but the
-phrase syntax is slightly different.
-
-Implementation-wise, the lexer and parser are written in
-[PLY](http://www.dabeaz.com/ply/) (Python lex-yacc), an implementation of lex
-and yacc for Python. A standard-compliant lexer is used (Chromium
-[tools/idl_parser/idl_lexer.py](https://code.google.com/p/chromium/codesearch#chromium/src/tools/idl_parser/idl_lexer.py)).
-The parser (Blink
-[bindings/scripts/blink_idl_parser.py](https://cs.chromium.org/chromium/src/third_party/blink/renderer/bindings/scripts/blink_idl_parser.py))
-derives from a standard-compliant parser (Chromium
-[tools/idl_parser/idl_parser.py](https://code.google.com/p/chromium/codesearch#chromium/src/tools/idl_parser/idl_parser.py)).
-
-Blink deviations from the Web IDL standard can be seen as the BNF production
-rules in the derived parser.
-
-**Style**
-
-Style guidelines are to generally follow [Blink style](/blink/coding-style) for
-C++, with a few points highlighted, addenda, and exceptions. These are not
-enforced by a pre-submit test, but do assist legibility:
-
-* Include the [current Blink license
- header](http://www.chromium.org/blink/coding-style#TOC-License) in
- new files
-* For IDL based on standards/specifications:
- * Include a comment with the URL of the spec (and specific
- section, if possible) where the IDL is defined.
- * Follow any IDL samples given in specs.
- * Keep the order of interface and dictionary members the same as
- in the spec.
- * Document any deviations from the spec with `// TODO(name or bug
- link):` comments
-* 4-space indent.
-* Avoid line breaks, notably:
- * Keeping extended attributes of members (attributes, constants,
- and operations) on the same line as the member.
- * Generally keep argument lists of methods on the same line as the
- definition. Ok to break if it's v. long or for overloaded
- methods.
- * For overloaded methods, it is ok to use line breaks to group
- arguments. E.g., if one method has arguments (a, b, c) and the
- other has arguments (a, b, c, d, e, f), it is ok to include a
- line break between c and d, to clarify the grouping.
-* Alphabetize lists of extended attributes.
-* For extended attributes on interface, put each on a separate line
- with a trailing comma, except for the last one. Note that this is
- *not* style used in the standard, which uses a horizontal list on
- the line before the interface. Please omit the `[]` list if it's
- empty. Examples of Blink style:
-
-```none
-[
-    A,
-    B  /* No trailing commas on the last extended attribute */
-] interface Foo {
-    ...
-};
-interface Bar {
-    ...
-};
-```
-
-* No spacing for horizontal alignment, except for lists of constants.
-* For anonymous special operations, leave a space between the type and
- the parenthesize argument list; if you don't, the type looks like a
- function name!
-
-```none
-getter DOMString (unsigned long index); // Not: DOMString(unsigned long index)
-```
-
-* For special operations, the (first) argument to indexed property
- operations should be called `index`, and the (first) argument to
- named property operations should be called `name`; the second
- argument in property setters should be called `value`. For example:
-
-```none
-// Indexed property operations
-getter DOMString (unsigned long index);
-setter DOMString (unsigned long index, DOMString value);
-deleter boolean (unsigned long index);
-
-// Named property operations
-getter DOMString (DOMString name);
-setter DOMString (DOMString name, DOMString value);
-deleter boolean (DOMString name);
-```
-
-## Semantics
-
-Web IDL exposes an interface to JavaScript, which is implemented in C++. Thus
-its semantics bridge these two languages, though it is not identical to either.
-Web IDL's semantics are much closer to C++ than to JavaScript – in practice, it
-is a relatively thin abstraction layer over C++. Thus C++ implementations are
-quite close to the IDL spec, though the resulting interface is somewhat
-unnatural from a JavaScript perspective: it behaves differently from normal
-JavaScript libraries.
-
-### Types
-
-*See: [Web IDL types](http://heycam.github.io/webidl/#idl-types).*
-
-[Primitive types](http://heycam.github.io/webidl/#dfn-primitive-type) in Web IDL
-are very close to fundamental types in C++ (booleans, characters, integers, and
-floats), though note that there is no `int` type in Web IDL (specs usually use
-`long` instead).
-
-### undefined and null
-
-JavaScript has two special values, `undefined` and `null`, which are often
-confusing and do not fit easily into C++. Indeed, precise behavior of
-`undefined` in Web IDL has varied over time and is under discussion (see W3C Bug
-[23532](https://www.w3.org/Bugs/Public/show_bug.cgi?id=23532) - Dealing with
-undefined).
-
-Behavior on `undefined` and `null` **MUST** be tested in web tests, as these can
-be passed and are easy to get wrong. If these tests are omitted, there may be
-crashes (which will be caught by ClusterFuzz) or behavioral bugs (which will
-show up as web pages or JavaScript libraries breaking).
-
-For the purposes of Blink, behavior can be summarized as follows:
-
-* `undefined` and `null` are valid values for **basic types**, and are
- automatically converted.
- * Conversion follows [ECMAScript type
- mapping](http://heycam.github.io/webidl/#dfn-convert-ecmascript-to-idl-value),
- which generally implements JavaScript [Type
- Conversion](https://tc39.github.io/ecma262/#sec-type-conversion),
- e.g. [ToBoolean](https://tc39.github.io/ecma262/#sec-toboolean),
- [ToNumber](https://tc39.github.io/ecma262/#sec-tonumber),
- [ToString](https://tc39.github.io/ecma262/#sec-tostring).
- * They may be converted to different values, notably `"undefined"`
- and `"null"` for `DOMString`.
- * For numeric types, this can be affected by the extended
- attributes `[Clamp]` and `[EnforceRange]`.
- * `[Clamp]` changes the value so that it is valid.
- * `[EnforceRange]` throws a `TypeError` on these invalid
- values.
-* for **interface types**, `undefined` and `null` are both treated as
- `null`, which maps to `nullptr`.
- * for nullable interface types, like `Node?`, `null` is a valid
- value, and thus `nullptr` is passed to the C++ implementation
- * for non-nullable interface types, like `Node` (no `?`), `null`
- is *not* a valid value, and a `TypeError` is thrown, as in
- JavaScript
- [ToObject](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-toobject).
- * *However,* this nullability check is *not* done by default:
- it is only done if `[LegacyInterfaceTypeChecking]` is
- specified on the interface or member (see Bug
- [249598](https://code.google.com/p/chromium/issues/detail?id=249598):
- Throw TypeError when null is specified to non-nullable
- interface parameter)
- * Thus if `[LegacyInterfaceTypeChecking]` is specified in the
- IDL, you do *not* need to have a null check in the Blink
- implementation, as the bindings code already does this, but
- if `[LegacyInterfaceTypeChecking]` is not specified, you
- *do* need to have a null check in the Blink implementation.
-* for **dictionary types**, `undefined` and `null` both correspond to
- an empty dictionary
-* for **union types**, `undefined` and `null` are assigned to a type
- that can accept them, if possible: null, empty dictionary, or
- conversion to basic type
-* **function resolution**
- * `undefined` affects function resolution, both as an optional
- argument and for overloaded operations, basically being omitted
- if trailing (but some exceptions apply). This is complicated
- (see W3C Bug
- [23532](https://www.w3.org/Bugs/Public/show_bug.cgi?id=23532) -
- Dealing with undefined) and not currently implemented.
- Further, note that in some cases one wants different behavior for `f()`
- and `f(undefined)`, which requires an explicit overload, not an optional
- argument; a good example is `Window.alert()`, namely `alert()` vs.
- `alert(undefined)` (see W3C Bug
- [25686](https://www.w3.org/Bugs/Public/show_bug.cgi?id=25686)).
- * `null` affects function resolution for overloaded operations,
- due to preferring nullable types, but this is the only effect.
-
-### Function resolution
-
-Web IDL has *required* arguments and *optional* arguments. JavaScript does not:
-omitted arguments have `undefined` value. In Web IDL, omitting optional
-arguments is *not* the same as explicitly passing `undefined`: they call have
-different behavior (defined in the spec prose), and internally call different
-C++ functions implementing the operation.
-
-Thus if you have the following Web IDL function declaration:
-
-```none
-interface A {
-    void foo(long x);
- };
-```
-
-...the JavaScript `a = new A(); a.foo()` will throw a `TypeError`. This is
-specified in Web IDL, and thus done by the binding code.
-
-However, in JavaScript the corresponding function can be called without
-arguments:
-
-```none
-function foo(x) { return x }
- foo() // undefined
-```
-
-Note that `foo()` and `foo(undefined)` are almost identical calls (and for this
-function have identical behavior): it only changes the value of
-`arguments.length`.
-
-To get *similar* behavior in Web IDL, the argument can be explicitly specified
-as `optional` (or more precisely, `optional` with `undefined` as a default
-value). However, these do *not* need to have the same behavior, and do *not*
-generate the same code: the spec may define different behavior for these calls,
-and the bindings call the implementing C++ functions with a different number of
-arguments, which is resolved by C++ overloading, and these may be implemented by
-different functions.
-
-For example, given an optional argument such as:
-
-```none
-interface A {
-    void foo(optional long x);
- };
-```
-
-This results in a = new A(); a.foo() being legal, and calling the underlying
-Blink C++ function implementing `foo` with no arguments, while
-`a.foo(undefined)` calls the underlying Blink function with one argument.
-
-For *overloaded* operations, the situation is more complicated, and not
-currently implemented in Blink (Bug
-[293561](https://code.google.com/p/chromium/issues/detail?id=293561)). See the
-[overload resolution
-algorithm](http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm) in
-the spec for details.
-
-Pragmatically, passing `undefined` for an optional argument is necessary if you
-wish to specify a value for a later argument, but not earlier ones, but does not
-necessarily mean that you mean to pass in `undefined` explicitly; these instead
-get the special value "missing".
-
-Passing `undefined` to the last optional argument has unclear behavior for the
-value of the argument, but does mean that it resolves it to the operation with
-the optional argument, rather than others. (It then prioritizes nullable types
-and dictionary types, or unions thereof.) For example:
-
-```none
-interface A {
-    void foo(optional long x);
-    void foo(Node x);
- };
-```
-
-This results in a = new A(); a.foo(undefined) resolving to the first `foo`, it
-is not clear if the resulting call is `a.foo()`, to `a.foo` with "missing", or
-(most likely) `a.foo(undefined)` (here using the first overloaded function): it
-affect overload resolution, but perhaps not argument values. Note that
-`undefined` is also a legitimate value for the argument of `Node` type, so it
-would not be illegal, but the overload resolution algorithm first picks optional
-arguments in this case.
-
-Note that Blink code implementing a function can also check arguments, and
-similarly, JavaScript functions can check arguments, and access the number of
-arguments via `arguments.length`, but these are not specified by the *language*
-or checked by bindings.
-
-***Warning:*** `undefined` is a *valid value* for required arguments, and many
-interfaces *depend* on this behavior particularly booleans, numbers, and
-dictionaries. Explicitly passing `undefined`, as in `a.foo(undefined)`, does
-*not* cause a type error (assuming `foo` is unary). It is clearer if the
-parameter is marked as `optional` (this changes semantics: the argument can now
-also be omitted, not just passed explicitly as `undefined`), but this is not
-always done in the spec or in Blink's IDL files.
-
-## File organization
-
-The Web IDL spec treats the Web API as a single API, spread across various IDL
-fragments. In practice these fragments are `.idl` files, stored in the codebase
-alongside their implementation, with basename equal to the interface name. Thus
-for example the fragment defining the `Node` interface is written in n`ode.idl`,
-which is stored in the `third_party/blink/renderer/core/dom` directory, and is
-accompanied by `node.h` and `node.cc` in the same directory. In some cases the
-implementation has a different name, in which case there must be an
-`[ImplementedAs=...]` extended attribute in the IDL file, and the `.h/.cc` files
-have basename equal to the value of the `[ImplementedAs=...]`.
-
-For simplicity, each IDL file contains a *single* interface or dictionary, and
-contains all information needed for that definition, except for dependencies
-(below), notably any enumerations, implements statements, typedefs, and callback
-functions.
-
-### Dependencies
-
-In principle (as a matter of the Web IDL spec) any IDL file can depend on any
-other IDL file, and thus changing one file can require rebuilding all the
-dependents. In practice there are 4 kinds of dependencies (since other required
-definitions, like enumerations and typedefs, are contained in the IDL file for
-the interface):
-
-* `partial interface` – a single interface can be spread across a
- single main `interface` statement (in one file) and multiple other
- `partial interface` statements, each in a separate file (each
- `partial interface` statement is associated with a single main
- `interface` statement). In this case the IDL file containing the
- partial interface has some other name, often the actual interface
- name plus some suffix, and is generally named after the implementing
- class for the members it contains. From the point of view of spec
- authors and compilation, the members are just treated as if they
- appeared in the main definition. From the point of view of the
- build, these are awkward to implement, since these are incoming
- dependencies, and cannot be determined from looking at the main
- interface IDL file itself, thus requiring a global dependency
- resolution step.
-* `implements` – this is essentially multiple inheritance: an
- interface can implement multiple other interfaces, and a given
- interface can be implemented by multiple other interfaces. This is
- specified by implements statements in the implementing file (these
- are outgoing dependencies), though from the perspective of the build
- the interface → .idl filename of that interface data is required,
- and is global information (because the .idl files are spread across
- the source tree).
-* **Ancestors** – an interface may have a parent, which in turn may
- have a parent. The immediate parent can be determined from looking
- at a single IDL file, but the more distant ancestors require
- dependency resolution (computing an ancestor chain).
-* **Used interfaces (cross dependencies)** – a given interface may
- *use* other interfaces as *types* in its definitions; the contents
- of the used interfaces *may* affect the bindings generated for the
- using interface, though this is often a *shallow dependency* (see
- below).
-
-In practice, what happens is that, when compiling a given interfaces, its
-partial interfaces and the other interfaces it implements are merged into a
-single data structure, and that is compiled. There is a small amount of data
-recording where exactly a member came from (so the correct C++ class can be
-called), and a few other extended attributes for switching the
-partial/implemented interface on or off, but otherwise it is as if all members
-were specified in a single `interface` statement. This is a **deep dependency**
-relationship: *any* change in the partial/implemented interface changes the
-bindings for the overall (merged) interface, since *all* the data is in fact
-used.
-
-Bindings for interfaces in general do *not* depend on their ancestors, beyond
-the name of their immediate parent. This is because the bindings just generate a
-class, which refers to the parent class, but otherwise is subject to information
-hiding. However, in a few cases bindings depend on whether the interface
-inherits from some other interface (notably EventHandler or Node), and in a few
-cases bindings depend on the extended attributes of ancestors (these extended
-attributes are "inherited"; the list is
-[compute_dependencies.INHERITED_EXTENDED_ATTRIBUTES](https://cs.chromium.org/chromium/src/third_party/blink/renderer/bindings/scripts/compute_interfaces_info_overall.py?q=INHERITED_EXTENDED_ATTRIBUTES&l=59),
-and consists of extended attributes that affect memory management). There is
-thus a **shallow dependency** on ancestors, specifically only on the ancestor
-chain and on inherited extended attributes, not on the other contents of
-ancestors.
-
-On the other hand, the dependencies on used interfaces – so-called **cross
-dependencies** – are generally **shallow dependency** relationships: the using
-interface does not need to know much about the used interface (currently just
-the name of the implementing class, and whether the interface is a callback
-interface or not). Thus *almost all changes* in the used interface do not change
-the bindings for the using interface: the public information used by other
-bindings is minimal. There is one exception, namely the `[PutForwards]` extended
-attribute (in standard Web IDL), where the using interface needs to know the
-type of an attribute in the used interface. This "generally shallow"
-relationship may change in future, however, as being able to inspect the used
-interface can simplify the code generator. This would require the using
-interface to depend on used interfaces, either rebuilding all using interfaces
-whenever a used interface is changed, or clearly specifying or computing the
-public information (used by code generator of other interfaces) and depending
-only on that.
-
-## IDL extended attribute validator
-
-To avoid bugs caused by typos in extended attributes in IDL files, the extended
-attribute validator was introduced to the Blink build flow to check if all the
-extended attributes used in IDL files are implemented in the code generator. If
-you use an extended attribute not implemented in code generators, the extended
-attribute validator fails, and the Blink build fails.
-
-A list of IDL attributes implemented in code generators is described in
-[IDLExtendedAttributes.txt](https://cs.chromium.org/chromium/src/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt).
-If you want to add a new IDL attribute, you need to
-
-1. add the extended attribute to
- Source/bindings/IDLExtendedAttributes.txt.
-2. add the explanation to the extended attributes document.
-3. add test cases to run-bindings-tests (explained below).
-
-Note that the validator checks for known extended attributes and their arguments
-(if any), but does not enforce correct use of the the attributes. A warning will
-not be issued if, for example, `[Clamp]` is specified on an interface.
-
-## Tests
-
-### Reference tests (run-bindings-tests)
-
-[third_party/blink/tools/run_bindings_tests.py](https://cs.chromium.org/chromium/src/third_party/blink/tools/run_bindings_tests.py)
-tests the code generator, including its treatment of extended attributes.
-Specifically, run_bindings_tests.py compiles the IDL files in
-[bindings/tests/idls](https://cs.chromium.org/chromium/src/third_party/blink/renderer/bindings/tests/idls/),
-and then compares the results against reference files in
-[bindings/tests/results](https://cs.chromium.org/chromium/src/third_party/blink/renderer/bindings/tests/results/).
-For example, run_bindings_tests.py reads test_object.idl, and then compares the
-generated results against v8_test_object.h and v8_test_object.cc, reporting any
-differences.
-
-If you change the behavior of the code generator or add a new extended
-attribute, please add suitable test cases, preferably *reusing* existing IDL
-files (this is to minimize size of diffs when making changes to overall
-generated bindings). You can reset the run-bindings-tests results using the
---reset-results option:
-
-```none
-third_party/blink/tools/run_bindings_tests.py --reset-results
-```
-
-run_bindings_tests.py is run in a presubmit script for any changes to
-Source/bindings: this requires you to update test results when you change the
-behavior of the code generator, and thus if test results get out of date, the
-presubmit test will fail: you won't be able to upload your patch via git-cl, and
-the CQ will refuse to process the patch.
-
-The objective of run-bindings-tests is to show you and reviewers how the code
-generation is changed by your patch. **If you change the behavior of code
-generators, you need to update the results of run-bindings-tests.**
-
-Despite these checks, sometimes the test results can get out of date; this is
-primarily due to dcommitting or changes in real IDL files (not in
-Source/bindings) that are used in test cases. If the results are out of date
-*prior* to your CL, please rebaseline them separately, before committing your
-CL, as otherwise it will be difficult to distinguish which changes are due to
-your CL and which are due to rebaselining due to older CLs.
-
-Note that using real interfaces in test IDL files means changes to real IDL
-files can break run-bindings-tests (e.g., Blink
-[r174804](https://src.chromium.org/viewvc/blink?revision=174804&view=revision)/CL
-[292503006](https://codereview.chromium.org/292503006/): Oilpan: add
-\[WillBeGarbageCollected\] for Node., since Node is inherited by test files).
-This is ok (we're not going to run run_bindings_tests.py on every IDL edit, and
-it's easy to fix), but something to be aware of.
-
-It is also possible for run_bindings_tests.py to break for other reasons, since
-it use the developer's local tree: it thus may pass locally but fail remotely,
-or conversely. For example, renaming Python files can result in outdated
-bytecode (.pyc files) being used locally and succeeding, even if
-run_bindings_tests.py is incompatible with current Python source (.py), as
-discussed and fixed in CL
-[301743008](https://codereview.chromium.org/301743008/).
-
-### Behavior tests
-
-To test behavior, use [web
-tests](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_tests.md),
-most simply actual interfaces that use the behavior you're implementing. If
-adding new behavior, it's preferable to make code generator changes and the
-first actual use case in the same CL, so that it is properly tested, and the
-changes appear in the context of an actual change. If this makes the CL too
-large, these can be split into a CG-only CL and an actual use CL, committed in
-sequence, but unused features should not be added to the CG.
-
-For general behavior, like type conversions, there are some internal tests, like
-[bindings/webidl-type-mapping.html](https://cs.chromium.org/chromium/src/third_party/WebKit/LayoutTests/bindings/webidl-type-mapping.html),
-which uses
-[testing/type_conversions.idl](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/testing/type_conversions.idl).
-There are also some other IDL files in
-[testing](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/testing/),
-like
-[testing/internals.idl](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/testing/internals.idl).
-
-## Where is the bindings code generated?
-
-By reading this document you can learn how extended attributes work. However,
-the best practice to understand extended attributes is to try to use some and
-watch what kind of bindings code is generated.
-
-If you change an IDL file and rebuild (e.g., with ninja or Make), the bindings
-for that IDL file (and possibly others, if there are dependents) will be
-rebuilt. If the bindings have changed (in ninja), or even if they haven't (in
-other build systems), it will also recompile the bindings code. Regenerating
-bindings for a single IDL file is very fast, but regenerating all of them takes
-several minutes of CPU time.
-
-In case of xxx.idl in the Release build, the bindings code is generated in the
-following files ("Release" becomes "Debug" in the Debug build).
-
-```none
-out/Release/gen/third_party/blink/renderer/bindings/{core,modules}/v8_xxx.{h,cc}
-```
-
-## Limitations and improvements
-
-A few parts of the Web IDL spec are not implemented; features are implemented on
-an as-needed basis. See
-[component:Blink&gt;Bindings](https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EBindings)
-for open bugs; please feel free to file bugs or contact bindings developers
-([members of
-blink-reviews-bindings](https://groups.google.com/a/chromium.org/forum/#!members/blink-reviews-bindings),
-or
-[bindings/OWNERS](https://cs.chromium.org/chromium/src/third_party/blink/renderer/bindings/OWNERS))
-if you have any questions, problems, or requests.
-
-Bindings generation can be controlled in many ways, generally by adding an
-extended attribute to specify the behavior, sometimes by special-casing a
-specific type, interface, or member. If the existing [extended
-attributes](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md)
-are not sufficient (or buggy), please file a bug and contact bindings
-developers!
-
-Some commonly encountered limitations and suitable workarounds are listed below.
-Generally limitations can be worked around by using custom bindings, but these
-should be avoided if possible. If you need to work around a limitation, please
-put a `TODO` with the bug number (as demonstrated below) in the IDL so that we
-can remove the hack when the feature is implemented.
-
-### Syntax error causes infinite loop
-
-Some syntax errors cause the IDL parser to enter an infinite loop (Bug
-[363830](https://code.google.com/p/chromium/issues/detail?id=363830)). Until
-this is fixed, if the compiler hangs, please terminate the compiler and check
-your syntax.
-
-### Type checking
-
-The bindings do not do full type checking (Bug
-[321518](https://code.google.com/p/chromium/issues/detail?id=321518)). They do
-some type checking, but not all. Notably nullability is not strictly enforced.
-See `[TypeChecking]` under **undefined and null** above to see how to turn on
-more standard type checking behavior for interfaces and members.
-
-## Bindings development
-
-### Mailing List
-
-## If working on bindings, you likely wish to join the [blink-reviews-bindings](https://groups.google.com/a/chromium.org/forum/#!forum/blink-reviews-bindings) mailing list.
-
-### See also
-
-* [Web IDL interfaces](/developers/web-idl-interfaces) – overview
- how-to for Blink developers
-* [Blink IDL Extended
- Attributes](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md)
- – reference for Blink developers and bindings developers
-* [IDL build](/developers/design-documents/idl-build) – design doc
-* [IDL compiler](/developers/design-documents/idl-compiler) – design
- doc
-
----
-
-Derived from: <http://trac.webkit.org/wiki/WebKitIDL> *Licensed under
-[BSD](http://www.webkit.org/coding/bsd-license.html):*
-
-BSD License
-
-Copyright (C) 2009 Apple Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS “AS IS” AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 3.19.28 PM.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 3.19.28 PM.png.sha1
deleted file mode 100644
index 634f26202b1..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 3.19.28 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-24fa8fe76a3101f520cc1abdba58a56b80d02080 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 4.18.39 PM.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 4.18.39 PM.png.sha1
deleted file mode 100644
index 41b2e237cfe..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 4.18.39 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d97b12c7e4b46b4bfe3f557d5451f17d82e03889 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.36.49 PM.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.36.49 PM.png.sha1
deleted file mode 100644
index 16953f91f5e..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.36.49 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-30bd04ee1100c35b45e6d53edc7c387fae4d3015 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.38.39 PM.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.38.39 PM.png.sha1
deleted file mode 100644
index 7e709772188..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Screen Shot 2015-04-04 at 5.38.39 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cbee8ae3b979389bb2a1efeaaebdf9e1788b1bab \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Untitled-5.fw.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Untitled-5.fw.png.sha1
deleted file mode 100644
index 61bb6c26d0c..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Untitled-5.fw.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-648431cdf8a5c8cec01bf1a0fe008ee67b915057 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromestatus42.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromestatus42.png.sha1
deleted file mode 100644
index 2f5bf4fae49..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromestatus42.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-77684e337dca9390b7e9e0dff297076b47f3e979 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromeversion.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromeversion.png.sha1
deleted file mode 100644
index 94498e343b1..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromeversion.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-799e36afd69e22f29a7c2b3f4d7258a958a27ab1 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/cr-commit-pos.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/cr-commit-pos.png.sha1
deleted file mode 100644
index a15970d32e4..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/cr-commit-pos.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c50be4b92d119f7c225d816e9c8434cea100b861 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/f3a.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/f3a.png.sha1
deleted file mode 100644
index 19cb4347150..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/f3a.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1ac11509cbb9e605d756b7d0c7cd1ff4b7bf4dd7 \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/index.md b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/index.md
deleted file mode 100644
index 83386c4ea3f..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /blink
- - Blink (Rendering Engine)
-page_name: when-will-a-fix-ship-in-chrome-stable-or-canary
-title: When will a fix ship in Chrome (stable or canary)?
----
-
-Here's a quick guide on how to track changes as they make their way to releases
-of Chrome.
-
-This includes all changes to Chrome, including stuff for HTML, CSS, DOM, &
-DevTools.
-
-## On chromestatus.com?
-
-First things first, [chromestatus.com](http://chromestatus.com) was built for
-this. If the feature is big, it will probably be there.
-
-On the left you can see all features currently in beta. Those should be in
-stable soon.
-
-You can search for other features and view what release they are *Enabled by
-default.*
-
-[<img alt="https://www.chromestatus.com/"
-src="/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromestatus42.png"
-width=500>](https://www.chromestatus.com/)
-
-## Not on Chromestatus?
-
-Alright, buckle up. This is fun stuff.
-
-It all comes down to tracking the **Chromium revision number.**
-
-* First, we're assuming you're looking at the bug somewhere in
- [code.google.com/p/chromium/issues/](https://code.google.com/p/chromium/issues/list)
-* Now, when a commit lands, an automated comment is added to the
- Chromium bug.
-* All commits have a git hash and an incremental revision number.
-* You can see the commit below has **373417**.
-* Take note of this number and follow on…
-
-[<img alt="image"
-src="/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/cr-commit-pos.png">](/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/Untitled-5.fw.png)
-
-### Waiting for it to hit Chrome Stable?
-
-Generally it takes ~10 weeks from a commit landing to hit stable.
-
-Take the Chromium revision number (or the git SHA) and drop it into
-[storage.googleapis.com/chromium-find-releases-static/](https://storage.googleapis.com/chromium-find-releases-static/index.html)
-[<img alt="image"
-src="/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/f3a.png">](/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/f3a.png)
-Visit ==https://omahaproxy.appspot.com== for the version numbers of the current
-releases of Chrome.
-
-**When does version X ship in stable channel?**
-
-* Chrome ships a new major version to stable generally every 6 weeks,
- but in some cases we may choose to skip a release.
-* [Chromium Development Calendar and Release
- Info](/developers/calendar) contains "Estimated Stable Dates", which
- are roughly 6 weeks apart.
-
-### Waiting for it to land in Canary or an Dev build?
-
-You could use the above technique... but here's the guide for hackers or folks
-who don't want to wait for Canary or Dev Channel:
-
-#### Get a fresh Chromium build
-
-* Get the latest chromium in either of these two ways: [Download
- Chromium](/getting-involved/download-chromium)
- * These builds are generated every hour, so you should be fine.
-* [Canary](http://www.paulirish.com/2012/chrome-canary-for-developers/)
- is updated every day (at ~4am PST).
-* Either way, open up either and go to about:version
-
-[<img alt="image"
-src="/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromeversion.png">](/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/chromeversion.png)
-
-* At the end of the Revision line is the Chromium Rev.
-* As long as that rev number is higher than the one you're interested
- in... you're good!
- * (Of course this assumes no reverts of either the commit or the
- DEPS roll, but you'll probably have spotted those already)
-
-**Enjoy the fix or feature you've been waiting for!**
-
-Updated Oct 2016
-
-Paul Irish \ No newline at end of file
diff --git a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/omahaprox.png.sha1 b/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/omahaprox.png.sha1
deleted file mode 100644
index 603c61aaad1..00000000000
--- a/chromium/docs/website/site/blink/when-will-a-fix-ship-in-chrome-stable-or-canary/omahaprox.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-21b3a4bc7bf4a977a92485ddf1ba707522d4dbb5 \ No newline at end of file
diff --git a/chromium/docs/website/site/careers/index.md b/chromium/docs/website/site/careers/index.md
deleted file mode 100644
index c32ee2e8f96..00000000000
--- a/chromium/docs/website/site/careers/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs: []
-page_name: careers
-title: Chrome Web Platform External Current Positions
----
-
-> [<img alt="image" src="/careers/logo_chrome_color_144dp.png" height=200
-> width=200>](/careers/logo_chrome_color_144dp.png)
-
-> **Chrome Web Platform mission...**
-
-> is to make the Web the premier platform for experiencing the world’s
-> information, and deliver the world’s best implementation of the Web platform.
-
-> Google's mission relies on a rich, diverse & rapidly evolving ecosystem to
-> organize for people. The web is the world's most successful open ecosystem for
-> content & software experiences. The web platform is the stage upon which
-> developers bring their content and experiences to the world.
-
-> See [g.co/chrome/hiring](http://g.co/chrome/hiring) for a list of job openings
-> across Chrome:
-
-> #### Chrome Jobs \ No newline at end of file
diff --git a/chromium/docs/website/site/careers/logo_chrome_color_144dp.png.sha1 b/chromium/docs/website/site/careers/logo_chrome_color_144dp.png.sha1
deleted file mode 100644
index 7b138af7a9f..00000000000
--- a/chromium/docs/website/site/careers/logo_chrome_color_144dp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ffed0a42ea82345a73b86b5406c154e36a9bb607 \ No newline at end of file
diff --git a/chromium/docs/website/site/cecpq2/index.md b/chromium/docs/website/site/cecpq2/index.md
deleted file mode 100644
index 3572b02d838..00000000000
--- a/chromium/docs/website/site/cecpq2/index.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-breadcrumbs: []
-page_name: cecpq2
-title: CECPQ2
----
-
-CECPQ2 is the name given to the combination of
-[X25519](https://tools.ietf.org/html/rfc7748) and a post-quantum key-agreement
-based on [NTRU-HRSS-KEM](https://ntru-hrss.org/). This combination provides at
-least the security of X25519, combined with the likelihood of resistance to
-future, large quantum computers that can otherwise decrypt all existing TLS
-connections.
-
-Chrome optionally supports CECPQ2 in TLS 1.3 connections. The results of
-previous experiments with CECPQ2, and an isogeny-based key agreement, are
-detailed [here](https://blog.cloudflare.com/the-tls-post-quantum-experiment/).
-
-CECPQ2 makes some TLS messages larger. Some non-compliant network middleware
-doesn't correctly handle these larger messages and can cause unexpected
-connection failures or timeouts. While quantum computers are still in the
-future, it's important to start the process of making the internet workable for
-quantum-resistant algorithms today so that it'll be ready.
-
-Starting with Chrome 91 we plan on restarting a previous rollout of CECPQ2
-support that was paused due to the pandemic. Initially CECPQ2 will be enabled
-for a deterministic subset of domains: those whose eTLD+1 begins with "aa".
-Since the errors caused by bad network middleware are ambiguous and varied, we
-are hoping that this distinctive pattern will help us categorize bug reports and
-identify those that might be related.
-
-(The eTLD+1 of a domain is the effective TLD plus one label. For example, the
-eTLD of "www.example.co.uk" is "co.uk", so the eTLD+1 is "example.co.uk".)
-
-Starting with Chrome 92, this rollout was expanded to all domains where the
-eTLD+1 beings with just a single 'a'. This uncovered bugs in Fortigate and
-(possibly) Palo Alto Networks devices which we are currently investigating.
-
-With Chrome 93 and 94, this will be disabled by default.
-
-CECPQ2 can be enabled for all domains by enabling
-chrome://flags/#post-quantum-cecpq2.
-
-There are two ways in which bad middleware can cause problems with CECPQ2:
-Firstly, buggy middleware close to a specific site will cause that site to fail
-to work globally when CECPQ2 is enabled for it. Secondly, buggy middleware in a
-local network can cause all sites to fail when CECPQ2 is enabled for them, but
-only when the client is on that network. It's important to categorize the type
-of failure because it determines who can fix it: the first case is the sites'
-failure, the second must be fixed by local network administrators.
-
-If CECPQ2 is suspected of causing problems then administrators can disable it by
-setting the CECPQ2Enabled policy to false. It is automatically disabled if
-ChromeVariations has a non-default value. If the failure is of the second kind,
-i.e. in the local network, then this should be considered a temporary workaround
-as, eventually, everything will very likely deploy some form of post-quantum
-security and thus use larger TLS messages. We are interested in collecting
-information about known-bad middleware \ No newline at end of file
diff --git a/chromium/docs/website/site/chrome-apps/index.md b/chromium/docs/website/site/chrome-apps/index.md
deleted file mode 100644
index cc1681ea9de..00000000000
--- a/chromium/docs/website/site/chrome-apps/index.md
+++ /dev/null
@@ -1,716 +0,0 @@
----
-breadcrumbs: []
-page_name: chrome-apps
-title: Chrome Apps Migration
----
-
-# Overview
-
-# This page will serve as your guide for how to move Chrome.\* App API to the Web Platform and its APIs.
-
-# Upcoming Changes
-
-# **Our team has identified [these](https://docs.google.com/spreadsheets/d/13Zi0UvTkRAu3HmcDNMm_tRoKnLqrHKM6CuEEtFK3ANM/edit#gid=0) highly used Chrome.\* APIs and we outline below the targeted milestone where those APIs will be coming to the Web Platform. If you use these APIs in your existing Chrome App, you can find out more about these APIs on the [Web Updates page](https://developers.google.com/web/updates/capabilities). If there is an API you use and it isn’t on our [Web Platform Fugu API Roadmap](https://docs.google.com/spreadsheets/d/1de0ZYDOcafNXXwMcg4EZhT0346QM-QFvZfoD8ZffHeA/edit#gid=557099940) , please [file a new feature request](https://developers.google.com/web/updates/capabilities#the_new_capabilities) where you can provide information about your desired use case. As we work towards full deprecation, this feedback will help us determine prioritization of APIs.**
-
-# **Web Supported - Green**
-
-# **Web Partial Support - Yellow**
-
-# **Web Planned - Orange**
-
-# **Web Not Supported - Red**
-
-# **<table>**
-# **<tr>**
-
-# **<td>Chrome App feature/functionality</td>**
-
-# **<td>Web Support</td>**
-
-# **<td>Web platform functionality</td>**
-
-# **<td>Origin Trial</td>**
-
-# **<td>Release</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/accessibilityFeatures">chrome.accessibilityFeatures</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developer.chrome.com/extensions/accessibilityFeatures">Requires Chrome Extension</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/alarms">chrome.alarms</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="http://crbug.com/891339">Notification Triggers</a></td>**
-
-# **<td>78</td>**
-
-# **<td>81</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/app_runtime">chrome.app.runtime</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="https://bugs.chromium.org/p/chromium/issues/detail?id=844279">Launch Event</a></td>**
-
-# **<td>79</td>**
-
-# **<td>82</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/app_runtime#event-onRestarted">chrome.app.runtime.onRestarted</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developers.google.com/web/updates/2018/07/page-lifecycle-api">Page Life Cycle</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/app_window">chrome.app.window</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="https://crbug.com/897300">Window Placement / Screen Enumeration</a></td>**
-
-# **<td>83</td>**
-
-# **<td>86</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/audio">chrome.audio</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="http://crbug.com/897326">Audio Device Client</a></td>**
-
-# **<td>84</td>**
-
-# **<td>87</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/app_bluetooth">chrome.bluetooth</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5264933985976320">Web Bluetooth API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/bluetoothLowEnergy">chrome.bluetoothLowEnergy</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5264933985976320">Web Bluetooth API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/bluetoothLowEnergy">chrome.bluetoothLowEnergy Peripheral</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Support via ARC++<a href="https://developer.android.com/guide/topics/connectivity/bluetooth-le"> BTLE</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/bluetoothSocket">chrome.bluetoothSocket</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Support via ARC++<a href="https://developer.android.com/guide/topics/connectivity/bluetooth-le"> BTLE</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/browser">chrome.browser</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td>window.open</td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/commands">chrome.commands</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td><a href="https://w3c.github.io/uievents/">UI Events</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/contextMenus">chrome.contextMenus</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td>(HTML/script)</td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/documentScan">chrome.documentScan</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Via extensions<a href="https://developer.chrome.com/extensions/documentScan"> chrome.documentScan</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/events">chrome.events</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://bugs.chromium.org/p/chromium/issues/detail?id=891339">Alarms</a></td>**
-
-# **<td>78</td>**
-
-# **<td>81</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/extensionTypes">chrome.extensionTypes</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developer.chrome.com/extensions/extensionTypes">Extension with extensionTypes</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/fileSystem">chrome.fileSystem</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="http://crbug.com/853326">Native FileSystem API</a></td>**
-
-# **<td>78</td>**
-
-# **<td>84</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/fileSystemProvider">chrome.fileSystemProvider</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developer.chrome.com/extensions/fileSystemProvider">Extension w/ fileSystemProvider</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/gcm">chrome.gcm</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td><a href="https://developers.google.com/web/fundamentals/push-notifications/">Web Push Notifications</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/hid">chrome.hid</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5172464636133376">Web HID API</a></td>**
-
-# **<td>84</td>**
-
-# **<td>87</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/i18n">chrome.i18n</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td>(HTML/script)</td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/identity">chrome.identity</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5669923372138496">Workaround using OAuth API or Credential Management API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/idle">chrome.idle</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="http://crbug.com/878979">User Idle Detection API</a></td>**
-
-# **<td>82</td>**
-
-# **<td>85</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/instanceID">chrome.instanceID</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developers.google.com/web/fundamentals/push-notifications/">Web push</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/mdns">chrome.mdns</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Via partial support from ARC++<a href="https://developer.android.com/training/connect-devices-wirelessly/nsd"> NDS Discovery</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/mediaGalleries">chrome.mediaGalleries</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="http://crbug.com/853326">Native FileSystem API</a></td>**
-
-# **<td>77</td>**
-
-# **<td>84</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/networking_onc">chrome.networking.onc</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/notifications">chrome.notifications</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5064350557536256">Notifications API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/permissions">chrome.permissions</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td><a href="https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API">Web Permissions API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/power">chrome.power</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/4636879949398016">WakeLock API</a> - Screen wake lock, but not System wake lock</td>**
-
-# **<td>78</td>**
-
-# **<td>82</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/printerProvider">chrome.printerProvider</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developer.chrome.com/extensions/printerProvider">Transition to Extension</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/runtime">chrome.runtime</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developers.google.com/web/updates/2018/07/page-lifecycle-api">Service Workers + Page Lifecycle API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/messaging#connect">chrome.runtime.connect</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/6710044586409984">Channel Messaging API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/messaging#simple">chrome.runtime.sendMessage</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Only between Android apps / Only within ARC++</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/app_serial">chrome.serial</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/6577673212002304">Web Serial API</a></td>**
-
-# **<td>80</td>**
-
-# **<td>83</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/app_network">chrome.sockets.tcp</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td><a href="https://developer.android.com/reference/java/net/Socket">Partial ARC++ support through android.net.ConnectivityManager and Java standard socket API</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/sockets_tcpServer">chrome.sockets.tcpServer</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td><a href="https://developer.android.com/reference/java/net/Socket">Partial ARC++ support via android.net.ConnectivityManager and Java standard socket API</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/sockets_udp">chrome.sockets.udp</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td><a href="https://developer.android.com/reference/java/net/DatagramSocket">Partial support via ARC++ DatagramSocket API for UDP</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/storage">chrome.storage</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td>Cache API:<a href="https://www.chromestatus.com/feature/5072127703121920"> https://www.chromestatus.com/feature/5072127703121920</a></td>**
-
-# **<td>IndexedDB:<a href="https://www.chromestatus.com/feature/6507459568992256"> https://www.chromestatus.com/feature/6507459568992256</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/extensions/manifest/storage">chrome.storage.managed</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td>Support via ARC++ or Extension with<a href="https://developer.chrome.com/extensions/storage#property-managed"> storage.managed</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/syncFileSystem">chrome.syncFileSystem</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td>Not supported - Integration with Drive restful API but no OS intergation</td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developers.chrome.com/apps/system.cpu">chrome.system.cpu</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/6248386202173440">navigator.hardwareConcurrency</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developers.chrome.com/apps/system.display">chrome.system.display</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://drafts.csswg.org/cssom-view/#the-screen-interface">window.screen</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developers.chrome.com/apps/system.memory">chrome.system.memory</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5119701235531776">navigator.deviceMemory</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developers.chrome.com/apps/system.network">chrome.system.network</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/6338383617982464">Network Information API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developers.chrome.com/apps/system.storage">chrome.system.storage</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5630353511284736">navigator.storage</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developers.chrome.com/apps/tts">chrome.tts</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/4782875580825600">Web Speech API (Synthesis)</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/types">chrome.types</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Extension with<a href="https://developer.chrome.com/extensions/types"> chrome.types</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/app_usb">chrome.usb</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td><a href="https://www.chromestatus.com/feature/5651917954875392">Web USB API</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/virtualKeyboard">chrome.virtualKeyboard</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Partial support via ARC++<a href="https://developer.android.com/training/keyboard-input"> Soft Input Method</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/vpnProvider">chrome.vpnProvider</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Partial support via ARC++<a href="https://developer.android.com/reference/android/net/VpnService"> VpnService</a> or Extensions<a href="https://developer.chrome.com/extensions/vpnProvider"> chrome.vpnProvider</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/wallpaper">chrome.wallpaper</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Support via ARC++<a href="https://developer.android.com/reference/android/app/WallpaperManager"> WallpaperManager</a> or Extensions<a href="https://developer.chrome.com/extensions/wallpaper"> https://developer.chrome.com/extensions/wallpaper</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/manifest/externally_connectable">externally_connectable</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td><a href="https://developer.chrome.com/extensions/content_scripts#host-page-communication">Use Window.postMessage</a> to communicate with Extensions</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/manifest/kiosk_enabled">kiosk_enabled</a></td>**
-
-# **<td>Planned</td>**
-
-# **<td>PWAs will be supported in Kiosk mode.</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/manifest/minimum_chrome_version">minimum_chrome_version</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **<td>Use feature detection or via Extenisions<a href="https://developer.chrome.com/apps/manifest/minimum_chrome_version"> minimum_chrome_version</a></td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/offline_apps">offline_enabled</a></td>**
-
-# **<td>Supported</td>**
-
-# **<td><a href="https://developers.google.com/web/fundamentals/codelabs/offline/">Offline via Service Workers</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/native-client">NaCl</a></td>**
-
-# **<td>Partial Support</td>**
-
-# **<td><a href="https://developer.chrome.com/native-client/migration">Migration Guide</a></td>**
-
-# **<td>Shipped</td>**
-
-# **</tr>**
-# **<tr>**
-
-# **<td><a href="https://developer.chrome.com/apps/tags/webview">&lt;webview&gt; tag</a></td>**
-
-# **<td>Not Supported</td>**
-
-# **</tr>**
-# **</table>**
-
-## Relevant Links
-
- # **[Web Platform Fugu API
- Roadmap](https://docs.google.com/spreadsheets/d/1de0ZYDOcafNXXwMcg4EZhT0346QM-QFvZfoD8ZffHeA/edit#gid=557099940)**
-
- # **F[ile a new feature
- request](https://developers.google.com/web/updates/capabilities#the_new_capabilities)**
-
- # **[Android development for Chrome
- OS](https://developer.android.com/chrome-os)**
-
- # **Past announcement from blog:
- [Link](https://blog.chromium.org/2016/08/from-chrome-apps-to-web.html) to
- 2016 announcement.**
-
-## FAQ
-
-### Developers
-
-What are my next steps for converting my existing Chrome app?
-
-Migrating to web api: <https://developers.chrome.com/apps/migration>
-
-Migrating to Android for Chrome OS: https://developer.android.com/chrome-os
-
-Where can I find a list of new Web Platform Fugu APIs that corresponds to
-existing Chrome app APIs?
-
-See this[
-tracker](https://docs.google.com/spreadsheets/d/1de0ZYDOcafNXXwMcg4EZhT0346QM-QFvZfoD8ZffHeA/edit#gid=272423396).
-
-I’m migrating a Chrome App to PWA and missing an API, will an equivalent API be
-available? If not, how can I request a new Web Capability?
-
-See <https://developers.google.com/web/updates/capabilities>; request APIs using
-this [link](https://goo.gl/qWhHXU).
-
-I’ve created a PWA or Android app to replace my Chrome App, what do I need to do
-to help transition my users?
-
-If you are migrating users to PWAs, you need to add the replace_web_app field
-and the url for hosting the new PWA. (note, this field exists since M75+)
-
-If you are migrating users to ARC++, you need to add the replacement_android_app
-field and the package name for the replacement Android App. (note, this field
-will be added for Chrome M81+).
-
-Once you have defined one of the two fields, you also need to invoke
-chrome.management.installReplacementWebApp() in your app to prompt Chrome for
-the migrating dialogue.
-
-See the example definition in <https://developer.chrome.com/apps/manifest>. \ No newline at end of file
diff --git a/chromium/docs/website/site/chrome-os-devices-and-kernel-versions/index.md b/chromium/docs/website/site/chrome-os-devices-and-kernel-versions/index.md
deleted file mode 100644
index 1d2d33de529..00000000000
--- a/chromium/docs/website/site/chrome-os-devices-and-kernel-versions/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs: []
-page_name: chrome-os-devices-and-kernel-versions
-title: Meltdown/Spectre vulnerability status for Chrome OS devices
----
-
-Update 04/13/2018: this page has been moved to
-<https://www.chromium.org/chromium-os/meltdown-spectre-vulnerability-status>. \ No newline at end of file
diff --git a/chromium/docs/website/site/chrome-release-channels/index.md b/chromium/docs/website/site/chrome-release-channels/index.md
deleted file mode 100644
index f122db7ee3d..00000000000
--- a/chromium/docs/website/site/chrome-release-channels/index.md
+++ /dev/null
@@ -1,198 +0,0 @@
----
-breadcrumbs: []
-page_name: chrome-release-channels
-title: Chrome Release Channels
----
-
-[TOC]
-
-Chrome supports a number of different release channels. We use these channels to
-slowly roll out updates to users, starting with our close to daily Canary
-channel builds, all the way up to our Stable channel releases that happen every
-6 weeks roughly.
-
-### Channels
-
-#### Windows
-
-All channels may be run in parallel -- they install into distinct directories
-and use dedicated User Data directories.
-
-* [Stable channel for
- Windows](http://www.google.com/chrome?platform=win)
-* [Beta channel for
- Windows](http://www.google.com/chrome?platform=win)
-* [Dev channel for
- Windows](http://www.google.com/chrome/eula.html?extra=devchannel&platform=win)
-* [Canary build for
- Windows](http://tools.google.com/dlpage/chromesxs?platform=win)
-
-#### Mac
-
-* [Stable channel for Mac](http://google.com/chrome?platform=mac)
-* [Beta channel for Mac](http://google.com/chrome?platform=mac)
-* [Dev channel for
- Mac](http://www.google.com/chrome/intl/en/eula_dev.html?dl=mac)
-* [Canary build for
- Mac](http://tools.google.com/dlpage/chromesxs?platform=mac) (Note,
- this will run in parallel to any other Chrome channel you have
- installed, it will not use the same profile)
-
-#### Linux
-
-[Stable channel](http://www.google.com/chrome?platform=linux)
-**32-bit Ubuntu/Debian**
-
-* [Beta channel for 32-bit
- Debian/Ubuntu](http://www.google.com/chrome/intl/en/eula_beta.html?dl=beta_i386_deb)
-* [Dev channel for 32-bit
- Debian/Ubuntu](http://www.google.com/chrome/intl/en/eula_dev.html?dl=unstable_i386_deb)
-
-**32-bit Fedora/OpenSUSE**
-
-* [Beta channel for 32-bit
- Fedora/OpenSUSE](http://www.google.com/chrome/intl/en/eula_beta.html?dl=beta_i386_rpm)
-* [Dev channel for 32-bit
- Fedora/OpenSUSE](http://www.google.com/chrome/intl/en/eula_dev.html?dl=unstable_i386_rpm)
-
-**64-bit Ubuntu/Debian**
-
-* [Beta channel for 64-bit
- Debian/Ubuntu](http://www.google.com/chrome/intl/en/eula_beta.html?dl=beta_amd64_deb)
-* [Dev channel for 64-bit
- Debian/Ubuntu](http://www.google.com/chrome/intl/en/eula_dev.html?dl=unstable_amd64_deb)
-
-**64-bit Fedora/Red Hat/OpenSUSE**
-
-* [Beta channel for 64-bit
- Fedora/OpenSUSE](http://www.google.com/chrome/intl/en/eula_beta.html?dl=beta_amd64_rpm)
-* [Dev channel for 64-bit
- Fedora/OpenSUSE](http://www.google.com/chrome/intl/en/eula_dev.html?dl=unstable_amd64_dev)
-
-### How do I choose which channel to use?
-
-The release channels for chrome range from the most stable and tested (Stable
-channel) to completely untested and likely least stable (Canary channel). Note,
-you can run the Canary channel builds alongside any other channel, as they do
-not share profiles with other channels. This allows you to play with our latest
-code, while still keeping a tested version of Chrome around.
-
-* **Stable channel:** This channel has gotten the full testing and
- blessing of the Chrome test team, and is the best bet to avoid
- crashes and other issues. It's updated roughly every two-three weeks
- for minor releases, and every 6 weeks for major releases.
-* **Beta channel:** If you are interested in seeing what's next, with
- minimal risk, Beta channel is the place to be. It's updated every
- week roughly, with major updates coming ever six weeks, more than a
- month before the Stable channel will get them.
-* **Dev channel:** Want to see what's happening quickly, then you want
- the Dev channel. The Dev channel gets updated once or twice weekly,
- and it shows what we're working on right now. There's no lag between
- major versions, whatever code we've got, you will get. While this
- build does get tested, it is still subject to bugs, as we want
- people to see what's new as soon as possible.
-* **Canary build:** Canary builds are the bleeding edge. Released
- daily, this build has not been tested or used, it's released as soon
- as it's built. Because there's no guarantee that it will even run in
- some cases, it uses it's own profile and settings, and can be run
- side by side another Chrome channel. By default, it also reports
- crashes and usage statistics to Google (you can disable this on the
- download page).
-
-**Note**: Early access releases (Canary builds and Dev and Beta channels) will
-be only partly translated into languages other than English. Text related to new
-features may not get translated into all languages until the feature is released
-in the Stable channel.
-
-### What should I do before I change my channel?
-
-#### Back up your data!
-
-Before you switch, you should make a backup of your profile (bookmarks, most
-visited pages, history, cookies, etc). If you ever want to switch back to a more
-stable channel, your updated profile data might not be compatible with the older
-version.
-Make a copy of the User Data\\Default directory (for example, copy it to
-'Default Backup' in the same location). The location depends on your operating
-system:
-> Windows XP:
-
-> * Stable, beta, and dev channels: \\Documents and
- Settings\\%USERNAME%\\Local Settings\\Application
- Data\\Google\\Chrome\\User Data\\Default
-> * Canary builds: \\Documents and Settings\\%USERNAME%\\Local
- Settings\\Application Data\\Google\\Chrome SxS\\User Data\\Default
-
-> Windows Vista, 7, 8 or 10:
-
-> * Stable channel:
- \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome\\User
- Data\\Default
-> * Beta channel: \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome
- Beta\\User Data\\Default
-> * Dev channel: \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome
- Dev\\User Data\\Default
-> * Canary builds: \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome
- SxS\\User Data\\Default
-
-> Mac OS X:
-
-> * Stable, beta, and dev channels: ~/Library/Application
- Support/Google/Chrome/Default
-> * Canary builds: ~/Library/Application Support/Google/Chrome
- Canary/Default
-
-> Linux:
-
-> * ~/.config/google-chrome/Default
-
-Note:If you're using Explorer to find the folder, you might need to set **Show
-hidden files and folders** in **Tools &gt; Folder Options... &gt; View**.
-
-#### Enable anonymous usage statistics
-
-Please configure Google Chrome to send anonymous usage stats to Google. The
-statistics we gather have no personally identifiable information. The aggregate
-of all the stats for all users in a release channel really help us understand
-how stable the release is and how people are using any new features.
-
-Choose **\[Wrench menu\] &gt; Options** (Windows and Linux) or **Chrome &gt;
-Preferences…** (Mac), go to the **Under the Hood** tab, and check **Help make
-Google Chrome better by automatically sending usage statistics and crash reports
-to Google**.
-
-### Reporting Dev channel and Canary build problems
-
-Remember, Dev channel browsers and Canary builds may still crash frequently.
-Before reporting bugs, consult the following pages:
-
-* [Bug Life Cycle and Reporting
- Guidelines](/for-testers/bug-reporting-guidelines)
-* See [
- bug-reporting-guidlines-for-the-mac-linux-builds](/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds)
- before reporting problems in Mac or Linux Dev channel builds
-
-If after reading the above, you think you have a real bug, file it at
-<http://crbug.com/new>
-
-### Going back to a more stable channel
-
-* If you decide to switch from Dev to Beta or from Beta to Stable, the
- new channel will be on an earlier version of Google Chrome. You
- won't get automatic updates on that channel until it reaches a
- version later than what you're already running.
-* You can uninstall Google Chrome and re-install from
- <http://www.google.com/chrome> to go back to an earlier version.
-* If you re-install an older version, you might find that your profile
- is not compatible (because the data formats changed in the newer
- version you had been running). You'll have to delete your profile
- data. Delete the User Data\\Default folder (see the Before You
- Change Channels section above for the location). If you made a back
- up of your Default directory, you can then rename it to Default so
- that you at least restore some of your previous bookmarks, most
- visited pages, etc.
-* If the installer fails when you attempt to install an older version
- with a message indicating that your computer already has a more
- recent version of Chrome or Chrome Frame, you must also uninstall
- Chrome Frame. After doing so, the newer version of Chrome should
- install without difficulty. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Chrome EC.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Chrome EC.pdf.sha1
deleted file mode 100644
index b2bbb164f58..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Chrome EC.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-62215e356343af927d92809e0c39df220ed04975 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Overview.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Overview.pdf.sha1
deleted file mode 100644
index b67c6663c6b..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/2014 Chrome OS Firmware Summit- Overview.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2273f42537cdb06487d4c98b8438dd30b56772f3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/ARM coreboot porting.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/ARM coreboot porting.pdf.sha1
deleted file mode 100644
index 20d7cee9efd..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/ARM coreboot porting.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b3f1817d94670f24083b057733e4f7eee8839918 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware - 2017.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware - 2017.pdf.sha1
deleted file mode 100644
index add415fa07c..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware - 2017.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-de6c4282238f6fdb0c4fafc6777c5d092cf63326 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware Summit- Sundries.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware Summit- Sundries.pdf.sha1
deleted file mode 100644
index db494ca6de3..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/Chrome OS Firmware Summit- Sundries.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d41dc3cac7af9cf069925117c310cccaf9caf37b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/ChromeOS firmware summit - Depthcharge.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/ChromeOS firmware summit - Depthcharge.pdf.sha1
deleted file mode 100644
index 3724c5af715..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/ChromeOS firmware summit - Depthcharge.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b4ec5808e96dc96f4de7ffece689e860eb791e0d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/Coreboot Mainboard Porting.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/Coreboot Mainboard Porting.pdf.sha1
deleted file mode 100644
index 0bd951a6d0b..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/Coreboot Mainboard Porting.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f8fd9e8f8bf115ff67ed057a3c4f20dced23d96a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/index.md b/chromium/docs/website/site/chromium-os/2014-firmware-summit/index.md
deleted file mode 100644
index 5abbae4736c..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: 2014-firmware-summit
-title: 2014 Firmware Summit
----
-
-February 20, 2014
-
-firmware@chromium.org
-
-<table>
-<tr>
-
-<td>## Chrome OS Firmware Overview </td>
-
-<td>#### Duncan Laurie</td>
-
-<td>## <a href="https://docs.google.com/presentation/d/1h-nsDGlQmYI21dr95nYgLmyCYDgBIpJWSt9b7AqTZaw/pub?start=false&loop=false&delayms=3000">Presentation</a></td>
-
-<td>## <a href="http://youtu.be/HwsTRThChn0">Video</a></td>
-
-<td>This talk presents an overview of the Chrome OS firmware stack including components and organization and the Verified Boot feature.</td>
-
-<td>The second half provides an introduction to coreboot and a summary of some
-important features.</td>
-
-</tr>
-<tr>
-
-<td>## Porting coreboot to x86 platforms</td>
-
-<td>#### Aaron Durbin </td>
-
-<td>## <a href="https://docs.google.com/presentation/d/1hwkzVrbAWUFqdEeWPaNSTp0MKpEGxY1gt90UmG7bBFg/pub?start=false&loop=false&delayms=3000">Presentation</a></td>
-
-<td>## <a href="http://youtu.be/HKJNJh6JW_Y">Video</a></td>
-
-<td>This talk goes into detail about porting coreboot to new x86 platforms.</td>
-
-</tr>
-<tr>
-
-<td>## Porting coreboot to ARM platforms</td>
-
-<td>#### Stefan Reinauer</td>
-
-<td>## <a href="https://docs.google.com/presentation/d/1jWOVuJ59LqvoweS9xbKY4RJw9pVDQNVk8aMQKtwHAqk/pub?start=false&loop=false&delayms=3000">Presentation</a> </td>
-
-<td>## <a href="http://youtu.be/d0d9gxmg0xQ">Video</a> </td>
-
-<td>This talk goes into detail about porting coreboot to new ARM platforms.</td>
-
-</tr>
-<tr>
-
-<td>## Porting coreboot to a new Mainboard</td>
-
-<td>## Shawn Nematbakhsh </td>
-
-<td>## <a href="https://docs.google.com/presentation/d/1ogewSJS8kOhqVEZgH1AlY3e5XD66jXdeoWoPjjLIKb0/pub?start=false&loop=false&delayms=3000">Presentation</a></td>
-
-<td>## <a href="http://youtu.be/8wPskpLHFIo">Video</a> </td>
-
-<td>This talk goes into detail about porting coreboot to a new Mainboard for an existing architecture. </td>
-
-</tr>
-<tr>
-
-<td>## Depthcharge: The Chrome OS Bootloader</td>
-
-<td>## Gabe Black</td>
-
-<td>## <a href="https://docs.google.com/presentation/d/1pH8ltQ3cGKy9dRaTxHtZbA50QLZCw6HE8LDoi1y_gcs/pub?start=false&loop=false&delayms=3000">Presentation</a> </td>
-
-<td>## <a href="http://youtu.be/6ZKeDGI75vw">Video</a> </td>
-
-<td>This talk describes the Depthcharge project which is a custom coreboot payload integrated with Verified Boot that is intended to boot Chrome OS.</td>
-
-</tr>
-<tr>
-
-<td>## Chrome OS Embedded Controller</td>
-
-<td>## Bill Richardson</td>
-
-<td>## <a href="https://docs.google.com/presentation/d/1Xa_Z5SjW-soPvkugAR8__TEJFrJpzoZUa9HNR14Sjs8/pub?start=false&loop=false&delayms=3000">Presentation</a></td>
-
-<td>## <a href="http://youtu.be/Ie7LRGgCXC8">Video</a> </td>
-
-<td>This talk provides information on the Chrome OS Embedded Controller, including source organization and porting.</td>
-
-</tr>
-<tr>
-
-<td>## Chrome OS Process Part 1</td>
-
-<td>## Bernie Thompson</td>
-
-<td>## <a href="https://docs.google.com/presentation/d/1hqo_LT4jAjlckZPxADFYI_rpCr9IRlydnbRVjyTTCiM/pub?start=false&loop=false&delayms=3000">Presentation</a></td>
-
-<td>## <a href="http://youtu.be/RWxyMdVrGiI">Video</a> </td>
-
-<td>This talk introduces several Chrome OS Firmware process details, including the use of repo and Git, basics of Portage and ebuilds, firmware branches, keys and signing, and the Gerrit code review process.</td>
-
-</tr>
-<tr>
-
-<td>## Chrome OS Process Part 2</td>
-
-<td>## Dave Parker</td>
-
-<td>## <a href="https://docs.google.com/a/chromium.org/presentation/d/1hqo_LT4jAjlckZPxADFYI_rpCr9IRlydnbRVjyTTCiM/pub?start=false&loop=false&delayms=3000#slide=id.g2bc8270bb_55">Presentation</a></td>
-
-<td>## <a href="http://youtu.be/jqtoZc3X3lE">Video</a> </td>
-
-<td>This talk goes into detail about Chrome OS Firmware process, including the Chrome Partner Front End, working with git, a detailed example of the firmware build process, and FAFT.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/2014-firmware-summit/x86 coreboot porting.pdf.sha1 b/chromium/docs/website/site/chromium-os/2014-firmware-summit/x86 coreboot porting.pdf.sha1
deleted file mode 100644
index ee39bc3d9d4..00000000000
--- a/chromium/docs/website/site/chromium-os/2014-firmware-summit/x86 coreboot porting.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f440d44c6729ee13363582eb0473b47de3ded454 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/OWNERS b/chromium/docs/website/site/chromium-os/OWNERS
deleted file mode 100644
index d164e06046e..00000000000
--- a/chromium/docs/website/site/chromium-os/OWNERS
+++ /dev/null
@@ -1,213 +0,0 @@
-# If you work on CrOS, feel free to add yourself to the sorted list.
-
-aashay@google.com
-abhishekbh@chromium.org
-acostinas@google.com
-adlr@chromium.org
-alainm@chromium.org
-alanlxl@chromium.org
-alemate@chromium.org
-allenwebb@chromium.org
-allenwebb@google.com
-amoylan@chromium.org
-anchals@chromium.org
-andrescj@chromium.org
-andrewlamb@chromium.org
-andrewlassalle@chromium.org
-andrewlassalle@google.com
-apronin@chromium.org
-asavery@chromium.org
-austinct@chromium.org
-avg@google.com
-ayaelattar@chromium.org
-batrapranav@chromium.org
-betuls@google.com
-bgoodwin@chromium.org
-bleung@chromium.org
-bleung@google.com
-bmgordon@chromium.org
-briannorris@chromium.org
-campello@chromium.org
-caveh@chromium.org
-chenghan@chromium.org
-chenghaoyang@chromium.org
-chinglinyu@chromium.org
-chungsheng@chromium.org
-cjmcdonald@chromium.org
-ckclark@chromium.org
-coconutruben@chromium.org
-cylai@chromium.org
-damiendejean@google.com
-danielwinkler@google.com
-davidmunro@google.com
-dcastagna@chromium.org
-dcjansen@google.com
-dgreid@chromium.org
-dianders@chromium.org
-dlunev@chromium.org
-dtor@chromium.org
-ejcaruso@chromium.org
-emaxx@chromium.org
-evgreen@chromium.org
-fdegros@chromium.org
-fqj@google.com
-fsandrade@chromium.org
-fshao@chromium.org
-garrick@chromium.org
-garrick@google.com
-gchenchen@google.com
-genechang@chromium.org
-groeck@chromium.org
-grundler@chromium.org
-gwendal@chromium.org
-gwink@chromium.org
-hanlinchen@google.com
-hansberry@chromium.org
-hashimoto@chromium.org
-henryhsu@chromium.org
-hesling@chromium.org
-hidehiko@chromium.org
-hiroh@chromium.org
-honglinyu@chromium.org
-hsinyi@chromium.org
-hugobenichi@google.com
-hungte@chromium.org
-hywu@chromium.org
-iby@chromium.org
-inker@chromium.org
-itspeter@chromium.org
-ivanbrovkovich@chromium.org
-jamesqaq@chromium.org
-jasongustaman@chromium.org
-jasongustaman@google.com
-jboulic@chromium.org
-jcliang@chromium.org
-jefferymiller@google.com
-jessemcguire@chromium.org
-jiejiang@chromium.org
-jiejiang@google.com
-jkardatzke@chromium.org
-jmpollock@google.com
-joelaf@google.com
-joelhockey@chromium.org
-joonbug@chromium.org
-jora@google.com
-jorgelo@chromium.org
-josienordrum@google.com
-jpdelima@chromium.org
-jrio@chromium.org
-jrio@google.com
-jrosenth@chromium.org
-jrt@chromium.org
-judyhsiao@chromium.org
-justinoue@google.com
-kamesan@chromium.org
-kamesan@google.com
-kdgwill@chromium.org
-kdlee@chromium.org
-kerker@chromium.org
-kerrnel@chromium.org
-kevinptt@chromium.org
-khmel@chromium.org
-kitching@chromium.org
-kkunduru@chromium.org
-lamzin@google.com
-lbaraz@chromium.org
-lepton@chromium.org
-luum@chromium.org
-madhavadas@google.com
-manojgupta@chromium.org
-marcochen@chromium.org
-martis@chromium.org
-matthewb@chromium.org
-matthewmwang@chromium.org
-maybelle@chromium.org
-mblsha@google.com
-menghuan@chromium.org
-mgawad@google.com
-michaelirani@google.com
-mmatyjek@google.com
-mnissler@chromium.org
-mnissler@google.com
-mojahsu@google.com
-mortonm@google.com
-mpolzer@google.com
-mqg@chromium.org
-msalomao@google.com
-mutexlox@chromium.org
-mutexlox@google.com
-napper@chromium.org
-nednguyen@chromium.org
-nicholasbishop@google.com
-nigeltao@chromium.org
-noel@chromium.org
-norvez@chromium.org
-nsanders@chromium.org
-nverne@chromium.org
-nya@chromium.org
-omrilio@chromium.org
-pawliczek@chromium.org
-pbond@chromium.org
-pceballos@chromium.org
-petermarshall@chromium.org
-phoenixshen@chromium.org
-pholla@chromium.org
-pmalani@chromium.org
-pmarko@chromium.org
-pmarko@google.com
-pmoy@chromium.org
-poromov@chromium.org
-psoberoi@google.com
-puthik@chromium.org
-rajatja@google.com
-rchandrasekar@google.com
-rcy@google.com
-rrangel@chromium.org
-saklein@chromium.org
-sarthakkukreti@chromium.org
-seobrien@chromium.org
-sfrolov@google.com
-shahadath@google.com
-shaochuan@chromium.org
-shik@chromium.org
-sidereal@google.com
-simmonsjosh@google.com
-sjg@chromium.org
-skau@chromium.org
-slangley@google.com
-sloanjohnson@google.com
-srikanthkumar@google.com
-stevenjb@chromium.org
-stimim@chromium.org
-sukhomlinov@chromium.org
-swboyd@chromium.org
-taoyl@chromium.org
-taoyl@google.com
-tbarzic@chromium.org
-tbrandston@google.com
-tbroch@google.com
-teravest@chromium.org
-tnagel@chromium.org
-tomdobro@chromium.org
-tomhughes@chromium.org
-uekawa@chromium.org
-vapier@chromium.org
-varunth@google.com
-vovoy@chromium.org
-vsavu@chromium.org
-wtlee@chromium.org
-xcl@google.com
-xiyuan@chromium.org
-yamaguchi@chromium.org
-yanivt@google.com
-yhong@chromium.org
-yich@google.com
-yoshiki@chromium.org
-yshavit@chromium.org
-yusukes@chromium.org
-zatrudo@google.com
-zentaro@chromium.org
-ziegs@chromium.org
-zland@google.com
-zuan@chromium.org
-zwisler@chromium.org
diff --git a/chromium/docs/website/site/chromium-os/android-apps/index.md b/chromium/docs/website/site/chromium-os/android-apps/index.md
deleted file mode 100644
index 99af782bdbd..00000000000
--- a/chromium/docs/website/site/chromium-os/android-apps/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: android-apps
-title: Optimize Android Apps for Chromebooks
----
-
-This article has been relocated to
-
-<https://developer.android.com/topic/arc/index.html> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/bias-on-chromium-os/index.md b/chromium/docs/website/site/chromium-os/bias-on-chromium-os/index.md
deleted file mode 100644
index b233cd7cd05..00000000000
--- a/chromium/docs/website/site/chromium-os/bias-on-chromium-os/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: bias-on-chromium-os
-title: Bluetooth BIAS on Chrome OS
----
-
-Bluetooth BIAS on Chrome OS
-
-## (CVE-2020-10135)
-
-# Vulnerability Impact
-
-BIAS is a group of vulnerabilities in the Bluetooth (BT) specification which
-allow an attacker to impersonate a BT accessory after pairing. This is
-considered low severity on Chrome OS as no known features rely solely on the BT
-accessory claiming successful authentication.
-
-# Vulnerability Description
-
-The BT standard does not mandate mutual authentication. An attacker’s BT device
-can authenticate with the OS and advertise to the host OS that it is
-authenticated as an already paired keyboard. If the host OS does not perform a
-mutual authentication, but assumes that the BT device’s authentication message
-is legitimate, the BT device in question could be a different device than which
-was originally paired.
-
-# Chrome OS Response
-
-Chrome OS has audited our BT implementation for any code that makes trust
-decisions based on the HCI_Authentication_Complete event. Bluetooth chipsets are
-encouraged to enforce mutual authentication. Chrome OS is also working on future
-specification changes with the Bluetooth community. Chrome OS includes the patch
-for [CVE-2019-9506](https://knobattack.com/), which mitigates the risks posed by
-the BIAS attacks.
-
-Affected Devices
-
-All Chrome OS devices and versions are impacted. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/bluetooth-pairing-method-confusion-on-chrome-os/index.md b/chromium/docs/website/site/chromium-os/bluetooth-pairing-method-confusion-on-chrome-os/index.md
deleted file mode 100644
index 79675a9b311..00000000000
--- a/chromium/docs/website/site/chromium-os/bluetooth-pairing-method-confusion-on-chrome-os/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: bluetooth-pairing-method-confusion-on-chrome-os
-title: Bluetooth Pairing Method Confusion on Chrome OS
----
-
-Bluetooth Pairing Method Confusion on Chrome OS
-
-## (CVE-2020-10134)
-
-# Vulnerability Impact
-
-Method Confusion is a vulnerability in the Bluetooth (BT) specification, which
-allows an attacker to sit in the middle of a pairing operation between BT
-accessory and host. Once pairing is complete, all data could be intercepted
-and/or modified in transit by the attacker. For example, if Method Confusion is
-used while pairing a BT keyboard, an attacker can read all of a user’s
-keystrokes (including passwords and other sensitive information that is entered
-via the keyboard) or inject keystrokes on the user’s behalf.
-
-# Vulnerability Description
-
-BT hosts and accessories use a variety of authentication mechanisms during
-pairing. The host and accessory do not mutually authenticate that they used the
-same method. In particular, the specifics of the Numeric Comparison (NC), and
-the Passkey Entry (PE) authentication mechanisms, mean that an attacker with
-physical proximity can use their device to insert themselves into the
-connection. By exploiting NC with the first target device, the attacker could
-leverage PE authentication with the other target device to use the confirmation
-number as the passkey.
-
-# Chrome OS Response
-
-Chrome OS is exploring user interface changes to help a user discern if the
-pairing process is secure as a short term mitigation strategy. Longer term,
-Chrome OS is discussing specification changes and technical fixes with the BT
-community. Users who are especially concerned about this should not pair new
-devices in public settings, where an adversary could be seated within close
-proximity.
-
-Affected Devices
-
-All Chrome OS devices and versions are impacted. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/build/OWNERS b/chromium/docs/website/site/chromium-os/build/OWNERS
deleted file mode 100644
index 995488cce5e..00000000000
--- a/chromium/docs/website/site/chromium-os/build/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-include chromiumos/chromite:/OWNERS.build
diff --git a/chromium/docs/website/site/chromium-os/build/add-sdk-package/index.md b/chromium/docs/website/site/chromium-os/build/add-sdk-package/index.md
deleted file mode 100644
index 39781ae2e09..00000000000
--- a/chromium/docs/website/site/chromium-os/build/add-sdk-package/index.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: add-sdk-package
-title: Adding a Package to the SDK
----
-
-[TOC]
-
-## Add the Package
-
-When adding a package to the SDK, for third-party packages not yet in the source
-tree, start by following the
-[New & Upgrade Package Process](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/portage/package_upgrade_process.md)
-guide (short version: use `cros_portage_upgrade` to pull the package from
-upstream). For new cros-workon packages, see
-[Adding a New Package](/chromium-os/how-tos-and-troubleshooting/add-a-new-package).
-Once the package is in place, add it as a dependency to the
-[virtual/target-chromium-os-sdk](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/virtual/target-chromium-os-sdk/target-chromium-os-sdk-9999.ebuild)
-ebuild to be automatically installed as part of the SDK.
-
-Do note that because virtual/target-chromium-os-sdk is a cros-workon package,
-before adding the dependency, run:
-
-```
-cros-workon --host start virtual/target-chromium-os-sdk
-```
-
-## Test the Package
-
-To install the new package to test against (e.g. to run commands/tools, check
-behavior, etc.):
-
-```
-sudo emerge <package name>
-```
-
-To test the new package is installed correctly as part of the SDK, update the
-chroot:
-
-```
-update_chroot
-```
-
-### Unit testing
-
-To run the unit tests for the new package, run:
-
-```
-cros_run_unit_tests --host --packages <package name>
-```
-
-For cros-workon packages, as long as the package is in the
-virtual/target-chromium-os-sdk dependency tree, the unit tests will
-automatically be run on the SDK as part of the host-packages-cq builder in CQ
-and are required to pass. For third-party packages, unit tests can be run with
-the `cros_run_unit_tests` command above to get feedback locally, but they are
-not run as part of CQ and are not required to pass as it is expected that
-upstream releases have already been tested.
-
-### Test with the SDK Builder
-
-For more information on the SDK Builder, see
-[Chromium OS SDK Creation](/chromium-os/build/sdk-creation).
-
-To test building the SDK itself with the new package, by running the entire SDK
-builder process, launch an SDK builder tryjob:
-
-```
-cros tryjob -g <cl 1> [-g ...] chromiumos-sdk-tryjob
-```
-
-Or, to just build the SDK board locally:
-
-```
-~/chromiumos/src/scripts/build_sdk_board
-```
diff --git a/chromium/docs/website/site/chromium-os/build/bypassing-tests-on-a-per-project-basis/index.md b/chromium/docs/website/site/chromium-os/build/bypassing-tests-on-a-per-project-basis/index.md
deleted file mode 100644
index 6cebd4125f3..00000000000
--- a/chromium/docs/website/site/chromium-os/build/bypassing-tests-on-a-per-project-basis/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: bypassing-tests-on-a-per-project-basis
-title: Per-repo and per-directory configuration of CQ and pre-CQ
----
-
-Different chromeos repositories have different testing needs. Using per-repo or
-per-directory configuration, it is possible to tailor the behavior of the
-[Chromeos Commit
-Queue](http://www.chromium.org/developers/tree-sheriffs/sheriff-details-chromium-os/commit-queue-overview)
-to suit the particular change being tested.
-
-This documentation needs updating for the new Parallel CQ infrastructure. The
-older COMMIT-QUEUE.ini files are no longer read by anything. Contact
-chromeos-continuous-integration-team (crbug components ChromeOS&gt;Infra&gt;CI)
-with any questions. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/build/c-exception-support/index.md b/chromium/docs/website/site/chromium-os/build/c-exception-support/index.md
deleted file mode 100644
index 2ddbb3aad67..00000000000
--- a/chromium/docs/website/site/chromium-os/build/c-exception-support/index.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: c-exception-support
-title: C++ exception support
----
-
-C++ exceptions are disabled by default for all C and C++ code. If you need them,
-you can allow-list your ebuild.
-
-**Background**
-
-C++ exceptions are not allowed by the [Google C++ Style
-Guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) and only
-a few projects use them. This supports adds a some overhead to the binary file
-on the .eh_frame and .eh_frame_hdr sections, even if you don't use
-try/catch/throw, even if your program is in C. Nevertheless, they are enabled by
-default by the compiler, since some exception support is required even if you
-don't use them. For example, if function f() calls g() calls h(), and h() throws
-an exception that f() is supposed to catch, then g() also needs to be compiled
-with exception support, even if g() is a C function.
-
-The overhead is in the range of 5% to 10% of the binary size, depending of the
-average size of your functions, so we disable it by default.
-
-**What to allow-list**
-
-If your application uses try, catch or throw, it needs to be allow-listed
-because otherwise it won't compile.
-
-If your application calls a library that might throw an exception, but you don't
-catch it, the application doesn't need to be compiled with exceptions support.
-If the library throws an exception, the application will be terminated in either
-case.
-
-If your application catches an exception that is thrown by a function called by
-an intermediate library, the library also needs to be compiled with exceptions
-support. For example, if you pass a callback to a library that might throw an
-exception, then the library should be also compiled with exception support.
-That's why glib and glibc are allow-listed.
-
-**Implementation**
-
-To disable the exception support, we pass "-fno-exceptions -fno-unwind-tables
--fno-asynchronous-unwind-tables" in CFLAGS and CXXFLAGS by default. To
-allow-list them, we filter these flags from CFLAGS and CXXFLAGS. We also define
-the environment variable CXXEXCEPTIONS to 0 or 1 to determine whether the
-exceptions are enabled.
-
-The flags are added on the chromiumos-overlay/chromeos/make.conf.\*-target
-files. To re-enable this support, you can call the bash function
-cros_enable_cxx_exceptions defined in
-chromiumos-overlay/profiles/base/profile.bashrc. That function will filter out
-the flags from CXXFLAGS and CFLAGS.
-
-This can be done on a per ebuild basis. For example, the dev-libs/dbus-c++
-ebuild has the following snippet on
-chromiumos-overlay/chromeos/config/env/dev-libs/dbus-c++.
-
-> cros_pre_src_prepare_enable_cxx_exceptions() {
-
-> cros_enable_cxx_exceptions
-
-> } \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/build/chromite-parallel/index.md b/chromium/docs/website/site/chromium-os/build/chromite-parallel/index.md
deleted file mode 100644
index 34206d174f6..00000000000
--- a/chromium/docs/website/site/chromium-os/build/chromite-parallel/index.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: chromite-parallel
-title: Writing multiprocess programs in Python
----
-
-The
-[chromite.lib.parallel](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/lib/parallel.py)
-module is the preferred way to write multiprocess python programs in Chrome OS.
-
-It offers the following advantages over the multiprocessing module:
-
-* The multiprocessing module can be buggy, so it is difficult to avoid
- hangs without substantial trial and error figuring out what features
- of multiprocessing actually work. We have already done this for you
- in the parallel library.
-* The interface for the parallel library is simpler than the
- multiprocessing interface and performs tasks that you would need to
- perform manually if you were using multiprocessing.
-* The parallel library automatically queues up output in temporary
- files and prints them out serially. This means that you never need
- to worry about interleaved output.
-* The parallel library handles cases where the subprocess hangs and
- prints out suitable errors.
-
-Here's the
-[chromite.lib.parallel](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/lib/parallel.py)
-function for running multiple steps in parallel in a very simple way. The
-docstring should help explain how it works.
-
-def RunParallelSteps(steps, max_parallel=None, halt_on_error=False,
-
-return_values=False):
-
-"""Run a list of functions in parallel.
-
-This function blocks until all steps are completed.
-
-The output from the functions is saved to a temporary file and printed as if
-
-they were run in sequence.
-
-If exceptions occur in the steps, we join together the tracebacks and print
-
-them after all parallel tasks have finished running. Further, a
-
-BackgroundFailure is raised with full stack traces of all exceptions.
-
-Args:
-
-steps: A list of functions to run.
-
-max_parallel: The maximum number of simultaneous tasks to run in parallel.
-
-By default, run all tasks in parallel.
-
-halt_on_error: After the first exception occurs, halt any running steps,
-
-and squelch any further output, including any exceptions that might occur.
-
-return_values: If set to True, RunParallelSteps returns a list containing
-
-the return values of the steps. Defaults to False.
-
-Returns:
-
-If |return_values| is True, the function will return a list containing the
-
-return values of the steps.
-
-Example:
-
-# This snippet will execute in parallel:
-
-# somefunc()
-
-# anotherfunc()
-
-# funcfunc()
-
-steps = \[somefunc, anotherfunc, funcfunc\]
-
-RunParallelSteps(steps)
-
-# Blocks until all calls have completed.
-
-"""
-
-If you want to be able to use a worker-based model and push items to the
-subprocess one by one, the BackgroundTaskRunner will do the job:
-
-@contextlib.contextmanager
-
-def BackgroundTaskRunner(task, \*args, \*\*kwargs):
-
-"""Run the specified task on each queued input in a pool of processes.
-
-This context manager starts a set of workers in the background, who each
-
-wait for input on the specified queue. For each input on the queue, these
-
-workers run task(\*args + \*input, \*\*kwargs). Note that certain kwargs will
-
-not pass through to the task (see Args below for the list).
-
-The output from these tasks is saved to a temporary file. When control
-
-returns to the context manager, the background output is printed in order,
-
-as if the tasks were run in sequence.
-
-If exceptions occur in the steps, we join together the tracebacks and print
-
-them after all parallel tasks have finished running. Further, a
-
-BackgroundFailure is raised with full stack traces of all exceptions.
-
-Example:
-
-# This will run somefunc(1, 'small', 'cow', foo='bar') in the background
-
-# as soon as data is added to the queue (i.e. queue.put() is called).
-
-def somefunc(arg1, arg2, arg3, foo=None):
-
-...
-
-with BackgroundTaskRunner(somefunc, 1, foo='bar') as queue:
-
-... do random stuff ...
-
-queue.put(\['small', 'cow'\])
-
-... do more random stuff while somefunc() runs ...
-
-# Exiting the with statement will block until all calls have completed.
-
-Args:
-
-task: Function to run on each queued input.
-
-queue: A queue of tasks to run. Add tasks to this queue, and they will
-
-be run in the background. If None, one will be created on the fly.
-
-processes: Number of processes to launch.
-
-onexit: Function to run in each background process after all inputs are
-
-processed.
-
-""" \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/build/chroot_version_hooks/index.md b/chromium/docs/website/site/chromium-os/build/chroot_version_hooks/index.md
deleted file mode 100644
index 416cf6eff9f..00000000000
--- a/chromium/docs/website/site/chromium-os/build/chroot_version_hooks/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: chroot_version_hooks
-title: chroot_version_hooks
----
-
-### Summary
-
-On occasion changes are made to some component of the Chromium OS source that
-are not backwards-compatible with existing chroots. When this happens a "chroot
-version hook" should be used to make whatever changes are necessary to an
-existing chroot to make it compatible. Often this involves deleting some
-previously compiled/generated component in order to force it to be
-compiled/generated again. Another possible scenario is when there is a Chromium
-OS source change that is dependent on a change coming in a future version of the
-SDK, a version hook is needed to bridge that gap between SDK releases and make
-that change directly in existing chroots (e.g. a config file change).
-
-### Details
-
-The version hooks all exist under
-[src/scripts/chroot_version_hooks.d](https://chromium.googlesource.com/chromiumos/platform/crosutils/+/HEAD/chroot_version_hooks.d/).
-Each hook script has a name that begins with "&lt;num&gt;_", where &lt;num&gt;
-is an integer that represents the version number of a chroot. Whenever a new
-chroot is entered (via "cros_sdk") or "build_packages" is run all upgrade hooks
-with versions newer than the chroot version are run (in sequential order) to
-upgrade the chroot to the latest version.
-
-Upgrade scripts can be arbitrary bash scripts. The best way to write a new
-script is to look for existing examples in chroot_version_hooks.d. With that
-said, the following example hook script will delete the build roots for all
-boards and all Chrome artifacts. This is needed, for example, when a toolchain
-uprev needs to be reverted. Everything built with the newer (bad) toolchain must
-be deleted.
-
-```none
-# This is to clear the build roots for all boards to cope with a
-# toolchain revert.
-for board_root in /build/* ; do
-  board=${board_root##*/}
-  emerge_board=$(type -P emerge-${board} 2>/dev/null || true)
-  if [[ -x "${emerge_board}" ]]; then
-    # It is a valid baord.
-    build="/build/${board}"
-    if [[ -d ${build} ]] ; then
-      # The board has a build root to clear.
-      info "Deleting ${board} build root at ${build}"
-      sudo rm -rf ${build}
-      info "Running setup_board --board=${board}"
-      ~/trunk/src/scripts/setup_board --board=${board} --skip_chroot_upgrade
-    fi
-  fi
-done
-# Delete Chrome artifacts
-sudo rm -rf /var/cache/chromeos-chrome/* || true
-```
diff --git a/chromium/docs/website/site/chromium-os/build/cros-deploy/index.md b/chromium/docs/website/site/chromium-os/build/cros-deploy/index.md
deleted file mode 100644
index 6bd0a2b7195..00000000000
--- a/chromium/docs/website/site/chromium-os/build/cros-deploy/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: cros-deploy
-title: Cros Deploy
----
-
-## Note: this page is deprecated. It has been ported to <https://chromium.googlesource.com/chromiumos/docs/+/main/cros_deploy.md>. Please fix any links pointing to this page to point to the new URL. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/build/cros-flash/index.md b/chromium/docs/website/site/chromium-os/build/cros-flash/index.md
deleted file mode 100644
index b4bc038e35e..00000000000
--- a/chromium/docs/website/site/chromium-os/build/cros-flash/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: cros-flash
-title: Cros Flash
----
-
-## Note: this page is deprecated. It has been ported to <https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_flash.md>. Please fix any links pointing to this page to point to the new URL.
diff --git a/chromium/docs/website/site/chromium-os/build/faq/index.md b/chromium/docs/website/site/chromium-os/build/faq/index.md
deleted file mode 100644
index 92a3b405c95..00000000000
--- a/chromium/docs/website/site/chromium-os/build/faq/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: faq
-title: Build FAQ
----
-
-[TOC]
-
-# Google Storage
-
-## What bucket can I use for testing?
-
-If you are a Googler, you can use gs://chromeos-throw-away-bucket for testing.
-Keep in mind that the contents can be read or deleted by anyone at Google.
-
-We also have another similar bucket named gs://chromeos-shared-team-bucket .
-Probably using gs://chromeos-throw-away-bucket makes more sense since it is
-clear that the contents there can be deleted by anyone at Google.
-
-If you are not a Googler, you should create your own bucket in Google Storage.
-
-# Portage/Emerge
-
-## How do I force emerge to use prebuilt binaries?
-
-```none
-emerge -g --usepkgonly
-(Note: The --getbinpkg only flag for emerge does not actually work)
-```
-
-## How do I check the USE flags for a package I am emerging?
-
-Emerge will tell you what USE flags are used when the **-pv** flags are provided
-e.g.
-
-```none
-emerge-$BOARD chromeos-chrome -pv
-```
-
-# Development
-
-FAQ items covering general development questions
-
-## What should I read first/Where do I start?
-
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md>
-
-## How can I make changes depend on each other with Cq-Depend?
-
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/contributing.md#cq-depend>
-
-## How do I create a new bucket in gsutil?
-
-[gsutil
-FAQ](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/gsutil.md#FAQ)
-
-## How do I port a new board to Chromium OS?
-
-<https://sites.google.com/a/chromium.org/dev/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide>
-
-## Making changes to the Chromium browser on ChromiumOS (AKA Simple Chrome)
-
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md>
-
-## How to install an image on a DUT via cros flash?
-
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_flash.md>
diff --git a/chromium/docs/website/site/chromium-os/build/index.md b/chromium/docs/website/site/chromium-os/build/index.md
deleted file mode 100644
index e858aed2c05..00000000000
--- a/chromium/docs/website/site/chromium-os/build/index.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: build
-title: Chromium OS Build
----
-
-<div class="two-column-container">
-<div class="column">
-
-Developer/User documentation pertaining to the Chrome OS build system.
-
-Google-internal documentation can be found linked from the [internal build team
-page](http://goto.google.com/cros-build).
-
-#### For Developers
-
-* [Developer
- guide](http://www.chromium.org/chromium-os/developer-guide)
-* Imaging your device with [Cros
- Flash](https://chromium.googlesource.com/chromiumos/docs/+/master/cros_flash.md)
-* Install packages to your device with [Cros
- Deploy](https://chromium.googlesource.com/chromiumos/docs/+/master/cros_deploy.md)
-* [Bypassing tests on a per-project
- basis](/chromium-os/build/bypassing-tests-on-a-per-project-basis)
-* [Adding a Package to the SDK](/chromium-os/build/add-sdk-package)
-
-#### For Sheriffs
-
-* <http://www.chromium.org/developers/tree-sheriffs/sheriff-details-chromium-os>
-
-#### For Build Contributors and other resources
-
-* Help writing unittests using [python-mock](/chromium-os/python-mock)
-* [Python style
- guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/python.md)
-* [Chromium OS Developer
- Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md)
-* [Developing Chromium on Chromium
- OS](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md)
- ("Simple Chrome")
-* Misc. [developer helper
- scripts](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/helper-scripts)
-
-* [Licensing for Chromium OS Package
- Owners](/chromium-os/licensing/licensing-for-chromiumos-package-owners)
-* [Licensing for Chromium OS
- Developers](/chromium-os/licensing/licensing-for-chromiumos-developers)
-
-</div>
-<div class="column">
-
-#### Build System Documentation
-
-* [Portage Build and
- FAQ](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/portage/ebuild_faq.md)
-* [Portage Package Upgrade
- Initiative](http://www.chromium.org/chromium-os/obsolete/portage-package-status)
- * [Portage Package Status
- Spreadsheet](https://docs.google.com/a/chromium.org/spreadsheet/ccc?key=0AsXDKtaHikmcdEp1dVN1SG1yRU1xZEw1Yjhka2dCSUE#gid=0)
-* Build hacking
- * [Chroot versioning](/chromium-os/build/chroot_version_hooks)
- (chroot version hooks)
- * [Clearing all
- binaries](https://sites.google.com/a/google.com/chromeos/for-team-members/build/clear_binaries)
- (e.g. for a toolchain revert)
-
-* [cbuildbot
- Overview](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/remote_trybots.md)
-* Buildbot [Configure/Set
- up](/developers/testing/chromium-build-infrastructure/getting-the-buildbot-source/configuring-your-buildbot)
- (Chrome Infra guide)
-* [Commit Queue overview](/system/errors/NodeNotFound)
-* [Local Trybot](http://www.chromium.org/chromium-os/build/local-trybot-documentation)
-* [Remote trybot](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/remote_trybots.md)
-
-#### Build labels
-
-* [Build-Tools](https://code.google.com/p/chromium/issues/list?can=2&q=Build%3DTools+OS%3DChrome&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-* [Build-Tools-Cbuildbot](https://code.google.com/p/chromium/issues/list?can=2&q=Build%3DTools-Cbuildbot&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
- (file [new issue](http://goto.google.com/cros-cbuildbot-ticket))
-* [Build-Tools-Paygen](https://code.google.com/p/chromium/issues/list?can=2&q=Build%3DTools-Paygen&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
- (file [new issue](http://goto.google.com/cros-paygen-ticket))
-* [Build-Tools-Portage](https://code.google.com/p/chromium/issues/list?can=2&q=Build%3DTools-Portage&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-* [Build-Tools-Pushlive](https://code.google.com/p/chromium/issues/list?can=2&q=Build%3DTools-Pushlive&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
- (file [new issue](http://goto.google.com/cros-pushlive-ticket))
-* [Build-Tools-SimpleChrome](https://code.google.com/p/chromium/issues/list?can=2&q=Build%3DTools-SimpleChrome&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-* [Build-Tools-Trybot](https://code.google.com/p/chromium/issues/list?can=2&q=Build%3DTools-Trybot&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-* [Build-Tools
- label=stats](http://goto.google.com/cros-build-stats-tickets) (file
- [new issue](http://goto.google.com/cros-build-stats-ticket))
-* [Cr-OS-Packages](https://code.google.com/p/chromium/issues/list?can=2&q=Cr%3DOS-Packages&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-
-Or file a generic Build issue to be triaged by the build team at
-[goto.google.com/cros-build-ticket](https://code.google.com/p/chromium/issues/entry?template=Build%20Infrastructure&labels=Build,OS-Chrome,Pri-2&summary=your%20words%20here).
-
-#### Other Resources
-
-* Build [FAQ](/chromium-os/build/faq)
-
-</div>
-</div>
diff --git a/chromium/docs/website/site/chromium-os/build/local-trybot-documentation/index.md b/chromium/docs/website/site/chromium-os/build/local-trybot-documentation/index.md
deleted file mode 100644
index 8d9b93b11c8..00000000000
--- a/chromium/docs/website/site/chromium-os/build/local-trybot-documentation/index.md
+++ /dev/null
@@ -1,152 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: local-trybot-documentation
-title: Chromium OS Local Trybots
----
-
-[TOC]
-
-## Introduction
-
-The local trybot allows you to emulate a buildbot run on your local machine with
-a set of your changes. The changes are patched to tip of tree (TOT). They should
-be very similar to remote tryjobs in most regards.
-
-For Google developers, please also take a look at the [Remote Trybot
-documentation](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/remote_trybots.md).
-
-NOTE: The first time you run the trybot it will sync down a fresh checkout of
-the source, build a new chroot and board, which will make the initial run take
-longer than subsequent runs. An incremental run with an existing board takes
-30min-40min.
-
-**Pre-instructions (These are important!)**
-
-1. Make sure you’ve read through the [ChromiumOS Developer
- Guide](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_guide.md)
- and can kick off a build properly.
-2. [Modify your sudo
- config](https://chromium.googlesource.com/chromiumos/docs/+/main/tips-and-tricks.md#How-to-make-sudo-a-little-more-permissive)
- If you are at Google, you need to follow [these
- instructions](http://go/cros-glinux-sudo#configuring-etcsudoers)
- first (Under 'Tweaking with /etc/sudoers' section).
-3. Run `sudo apt install qemu-kvm pbzip2 zip`.
-4. Run `sudo apt upgrade`.
-5. Run `gclient` from outside the chroot to update depot_tools.
-6. If you haven’t rebooted your computer in a while, reboot it now
- after updating.
-
-## **Verifying the Trybot**
-
-It’s good to first verify things are working properly with your system setup.
-
-To do so, run the following from within your repo source checkout:
-
-1. Run `repo sync` to get latest version of trybot.
-2. Run `cros tryjob --local amd64-generic-full-tryjob` to do a test run with
- the current TOT. Everything should pass.
-
-## **Instructions For Using the Trybot**
-
-Run the following from within your repo source checkout:
-
-1. Run `repo sync` to get latest version of cros trybot.
-2. Run `cros tryjob --list` to see a list of configs to run with. Add
- additional arguments to filter, such as `cros tryjob --list release`
-
-### To patch in a gerrit CL
-
-**3a.** Run
-
-```none
-cros tryjob --local -g '[*]<cl_1> [*]<cl_2> .. [*]<cl_N>' config
-```
-
-Substitute &lt;config&gt; with your desired config. Prepend a '\*' to the CL ID
-to indicate it's an internal CL. The CL ID can be a Gerrit Change-ID or a change
-number.
-
-An example:
-
-```none
-cros tryjob --local -g I5bed88effd9c4c26885f8c75da1ec2499c4b74c8 -g 12345 -g *4168 amd64-generic-full-tryjob
-```
-
-This example patches in three CLs:
-
-1. an external CL using Gerrit change-ID (unabbreviated commit hash)
-2. an external CL using Gerrit CL number
-3. internal CL using Gerrit CL number. In case a CL has several patchsets
-associated with it, the latest patchset is used.
-
-To patch in multiple CLs, you can pass all CL numbers in a quoted,
-space-delimited string, or specify the `-g` argument multiple times.
-
-### To patch in a local change
-
-**3c.** Run
-
-```none
-cros tryjob -p '<project1>[:<branch1>]...<projectN>[:<branchN>]' config
-```
-
-Specify the name of the project (not the path) and optionally the project
-branch. If no branch is specified the current branch of the project will be
-used.
-
-NOTE: To get the project name of the project you're working on run repo list.
-
-NOTE: Do not do development within the trybot buildroot! Your changes will get
-wiped out on the next trybot run. Develop within your source root, and patch in
-changes.
-
-NOTE: Use the --nosync option to prevent the trybot from updating its source
-checkout. See the Tips section below for more info.
-
-NOTE: Per the output of `cros tryjob --help`, the `-p` option is known to be
-buggy and `-g` is preferred for specifying patches. Note that `-g` requires the
-specified change to be uploaded to Gerrit.
-
-## **Sample Trybot Run**
-
-```shell
-$ cros tryjob --local -g 'I5bed88effd9c4c26885f8c75da1ec2499c4b74c8 4168' -p 'chromiumos/chromite chromiumos/platform/crosutils' amd64-generic-asan-tryjob
-
-WARNING: Using default directory /usr/local/google/home/ldap/trybot as buildroot
-
-Do you want to continue (yes/NO)? yes
-
-INFO: Saving output to cbuildbot.log file
-
-[sudo] password:
-```
-
-NOTE: The output of the trybot is automatically saved to a cbuildbot.log file in
-&lt;trybot_root&gt;/cbuildbot_logs. The log directory is printed out at the end
-of a run.
-
-## **Overview of Trybot Operation**
-
-The first time you run the trybot, it will sync down its own checkout of the
-source, and build its own chroot. The CL's you specify to patch are patched to
-the trybot's own source tree.
-
-When you specify local changes to patch (by specifying a project and branch the
-changes are on) the trybot will generate git patch files based on those changes
-and apply the patch files to its private source checkout.
-
-When you specify a Gerrit changelist, the trybot will look up the changelist
-info from Gerrit, fetch the ref of the change, and rebase it to TOT in its
-private source checkout.
-
-## **Feedback**
-
-Thanks for using the trybot! Please contact
-[chromium-os-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-os-dev)
-for any issues you run into. Please report any bugs you find, and file feature
-requests. There will be active development on the trybot, so please sync to the
-latest version before you run it.
diff --git a/chromium/docs/website/site/chromium-os/build/sdk-config-management/index.md b/chromium/docs/website/site/chromium-os/build/sdk-config-management/index.md
deleted file mode 100644
index ee02457f675..00000000000
--- a/chromium/docs/website/site/chromium-os/build/sdk-config-management/index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: sdk-config-management
-title: SDK Config Management
----
-
-## SDK Config Files Overview
-
-Portage and Chromite libraries use various make.conf files to store and retrieve
-SDK configurations.
-
-* `/etc/make.conf`
- * symlinked to
- [src/third_party/chromiumos-overlay/chromeos/config/make.conf.amd64-host](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/main/chromeos/config/make.conf.amd64-host)
- * Overall make.conf for the SDK “board.”
- * Sources the other `make.conf.*` files to pull in additional config.
- * Treated by
- [sysroot_lib](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/lib/sysroot_lib.py)
- in Chromite as the source to read configuration from as it contains the
- full picture.
-* `/etc/make.conf.board_setup`
- * Generated by `cros_sysroot_utils` with references to amd64-host sysroot
- removed.
- * Declares `BOARD_OVERLAY` and `CHOST`.
- * Treated by
- [sysroot_lib](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/lib/sysroot_lib.py)
- as where to write additional configuration.
-* `/etc/make.conf.host_setup`
- * Created by
- [update_chroot](https://chromium.googlesource.com/chromiumos/platform/crosutils/+/HEAD/update_chroot)
- each time the SDK is updated.
diff --git a/chromium/docs/website/site/chromium-os/build/sdk-creation/index.md b/chromium/docs/website/site/chromium-os/build/sdk-creation/index.md
deleted file mode 100644
index d98b5d844fc..00000000000
--- a/chromium/docs/website/site/chromium-os/build/sdk-creation/index.md
+++ /dev/null
@@ -1,202 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: sdk-creation
-title: Chromium OS SDK Creation
----
-
-[TOC]
-
-## Introduction
-
-The Chromium OS project has an SDK that provides a standalone environment for
-building the target system. When you boil it down, it's simply a Gentoo/Linux
-chroot with a lot of build scripts to simplify and automate the overall build
-process. We use a chroot as it ends up being much more portable -- we don't have
-to worry what distro you've decided to run and whether you've got all the right
-packages (and are generally up-to-date). Most things run inside of the chroot,
-and we fully control that environment, so Chromium OS developers have a lot less
-to worry about. It does mean that you need root on the system, but
-unfortunately, that cannot be avoided.
-
-This document will cover how the SDK is actually created. It assumes you have a
-full Chromium OS checkout already.
-
-## Prebuilt Flow
-
-When you run `cros_sdk` (found in
-[chromite/bin/](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/scripts/cros_sdk.py))
-for the first time, it automatically downloads the last known good sdk version
-and unpacks it into the chroot/ directory (in the root of the Chromium OS source
-checkout).
-
-That version information is stored in
-[src/third_party/chromiumos-overlay/chromeos/binhost/host/sdk_version.conf](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos/binhost/host/sdk_version.conf):
-
-```
-SDK_LATEST_VERSION="2022.03.17.105954"
-```
-
-This is used to look up the tarball in the
-[chromiumos-sdk](https://storage.googleapis.com/chromiumos-sdk/) Google Storage
-bucket. So with the information above, we know to fetch the file:
-
-<https://storage.googleapis.com/chromiumos-sdk/cros-sdk-2022.03.17.105954.tar.xz>
-
-## Bootstrap Flow
-
-The question might arise: How is the prebuilt SDK tarball created in the first
-place? The chromiumos-sdk builder (a.k.a. the “SDK builder”) builds each
-new version of the SDK tarball for developers and other builders to use. The SDK
-builder runs in a continuous loop to include any recent commits and takes ~24
-hours for a successful run.
-
-For a bootstrap starting point, to avoid the case where the SDK itself may have
-been broken by a commit, the builder uses a pinned known "good" version from
-which to build the next SDK version. This version is manually moved forward as
-needed.
-
-If the overall SDK generation fails, then the SDK is not refreshed and the
-released files stay stable for developers.
-
-### Overview
-
-The overall process looks like:
-
-* Download bootstrap version of the SDK and setup chroot environment
-* Build the SDK (amd64-host) board
-* Build and install the cross-compiler toolchains
-* Generate standalone copies of the cross-compilers
-* Package the freshly built SDK creating and uploading a tarball of it
-* Verify the SDK by building/testing other boards with it
-* Upload binpkgs
-* Uprev the SDK to point to this latest version
-
-### SDK bootstrap version
-
-We download a copy of the SDK tarball to bootstrap with and setup the chroot
-environment. This is just using the standard `cros_sdk` command with its
-`--bootstrap` option.
-
-As with the latest SDK version, the bootstrap version of the SDK to use is
-stored in
-[sdk_version.conf](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos/binhost/host/sdk_version.conf):
-
-```
-BOOTSTRAP_FROZEN_VERSION="2020.11.09.170314"
-```
-
-This is used to look up the tarball in the chromiumos-sdk Google Storage bucket.
-So with the information above, `cros_sdk` knows to fetch the file:
-
-<https://storage.googleapis.com/chromiumos-sdk/cros-sdk-2020.11.09.170314.tar.xz>
-
-`cros_sdk` continues its normal process of running
-[`update_chroot`](https://chromium.googlesource.com/chromiumos/platform/crosutils/+/HEAD/update_chroot)
-and setting up the chroot SDK environment.
-
-### Build the SDK (amd64-host) board
-
-The first step of the creation of the new SDK is for the SDK builder to
-[build the special amd64-host board](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/cbuildbot/stages/build_stages.py#554).
-To leverage existing build scripts and infrastructure we treat building the SDK
-as similar to a traditional board called "amd64-host."
-
-This step is performed by the
-[src/scripts/build_sdk_board](https://chromium.googlesource.com/chromiumos/platform/crosutils/+/HEAD/build_sdk_board)
-script and is accomplished by just running:
-
-```
-./build_sdk_board --board amd64-host
-```
-
-If you're used to the normal Chromium OS flow, be aware that this step is like
-running setup_board and build_packages in one go.
-
-This means it'll take quite a long time for this to finish (as it has to build a
-few hundred packages from source). Everything will be written to
-`/board/amd64-host`.
-
-### Build and install the cross-compiler toolchains
-
-To
-[build and install the toolchains](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/cbuildbot/stages/sdk_stages.py#75),
-the cbuildbot process will then run
-[`cros_setup_toolchains`](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/scripts/cros_setup_toolchains.py)
-which generates all toolchains marked for inclusion in the SDK (see the
-toolchain.conf file for more details).
-
-### Generate and upload standalone cross-compilers
-
-Since our cross-compilers are pretty cool & useful, we want to be able to use
-them all by themselves. In other words, without the overhead of the full
-Chromium OS source checkout and the SDK. With a few tricks, we can accomplish
-exactly that. It copies all the host libraries the toolchain itself uses,
-generates wrapper scripts so that the local copies of libraries can be found,
-and then takes care of munging all the paths to make them standalone.
-
-The
-[cros_setup_toolchains](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/scripts/cros_setup_toolchains.py)
-script has all the logic to create the packages which are then uploaded to a
-Google Storage bucket.
-
-### Package The SDK
-
-Now that the SDK is compiled and has everything we want, we
-[create then upload the SDK tarball](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/cbuildbot/stages/sdk_stages.py#127)
-to a Google Storage bucket.
-
-### Test The SDK
-
-We want to be sure that the SDK we just built is actually sane. This helps us
-from releasing a toolchain update (like gcc) that is horribly broken (e.g. can't
-properly compile or link things).
-[To test this](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/cbuildbot/stages/sdk_stages.py#309),
-we simply use the SDK tarball built earlier to create a new chroot. This also
-verifies the normal developer workflow of creating a new chroot from this SDK.
-
-Inside of the new chroot, we do a normal build flow for a couple of boards. At
-the moment, that means one for each major architecture (i.e. amd64-generic,
-arm-generic). We only run setup_board+build_packages though; no unittests or
-anything else (as current history as shown it to not be necessary).
-
-### Upload the binary packages
-
-Once all the tests pass, we go ahead and
-[upload the binary packages](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/cbuildbot/stages/artifact_stages.py#645)
-for the SDK itself.
-
-### Uprev the SDK
-
-Now that the new SDK version has been tested and the tarball and binary packages
-uploaded, the SDK is ready to be
-[upreved](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/cbuildbot/stages/sdk_stages.py#379)
-to point to this latest version. This simply updates the `SDK_LATEST_VERSION` in
-the
-[sdk_version.conf](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos/binhost/host/sdk_version.conf)
-file mentioned earlier.
-
-The new SDK is now available for developers and builders to use.
-
-## Running the SDK builder as a developer
-
-Suppose as a developer you have changes (e.g. in
-[chromite/lib](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/lib/))
-that you wish to test with the SDK builder. To run the entire chromiumos-sdk
-builder process described above, run as a tryjob:
-
-```
-cros tryjob -g <cl 1> [-g …] chromiumos-sdk-tryjob
-```
-
-where `<cl 1> .. <cl n>` are CLs to be run against.
-
-It's likely that just building the SDK board locally would be sufficent for most
-cases. To do that, from `~/chromiumos/src/scripts` run:
-
-```
-./build_sdk_board
-```
diff --git a/chromium/docs/website/site/chromium-os/build/tour-of-the-chromiumos-buildbot/index.md b/chromium/docs/website/site/chromium-os/build/tour-of-the-chromiumos-buildbot/index.md
deleted file mode 100644
index fc3516c72c7..00000000000
--- a/chromium/docs/website/site/chromium-os/build/tour-of-the-chromiumos-buildbot/index.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: tour-of-the-chromiumos-buildbot
-title: Waterfall Tour
----
-
-A ChromiumOS Waterfall hosts and lists groups of ChromiumOS builds.
-
-ChromiumOS uses [LUCI](https://chromium.googlesource.com/infra/luci/luci-go/) to
-run continuous builds, integration (commit queue) and tests. It uses chromite to
-centralize/abstract the process of building for various configurations.
-
-There are a number of builder groups that each present a waterfall view of their
-status, but with chromiumos' use of ebuilds and manifests, many of the LUCI's
-paradigms are not appropriate.
-There is a column of changes, but these represent changes present in the
-repositories, but does not represent which ones are included in the product by
-the manifest references and the ebuilds used.
-
-[TOC]
-
-## Basics
-
-The LUCI scheduler watches the clock, git repositories and previous builds,
-telling builders to start building and testing new revisions. LUCI's Milo
-service serves the "waterfall" page that shows all the results. For the full and
-incremental builders every time a new revision is discovered, the client
-triggers builds. Each of these builders generally has a single bot, so it is
-usually busy when this happens. When the bot becomes idle the most recent
-trigger is chosen to represent all automatic builds to date and it is started.
-The rest of the pending builds are presumed to be covered enough, and are
-removed. The build itself for chromeos is a sequence of three steps:
-
-1. Update the builder recipes (Basically, the piece the Chromium
- infrastructure people maintain to run the builders)
-2. Update the chromite tools (Basically, the piece the ChromeOS build
- people maintain to drive a ChromiumOS build)
-3. Run the cbuildbot command with a configuration name to do the real
- work.
-
-The third step involves many stages, and it is parsed and presented as
-individual steps by the recipe engine, but it is all coming from the one
-command. This command can be run on local checkouts, by developers, in the same
-ways as the bots do in order to predict and reproduce failures, tests, etc. This
-page is about the mechanics that get it run, not what it does once it is run.
-
-While each of these steps is executing Milo is collecting the output, and
-presents the state on the web interface. There are other people and processes
-that also monitor the state the client exports, or the side effects of the build
-on git or google storage, to start further builds, send emails, etc.
-
-## Builders
-
-Let's take a look at the [waterfall
-page](http://build.chromium.org/p/chromiumos/waterfall). For now, skip over the
-header (green, red, yellow, etc.) and the box at the top with lots of links and
-horizontal stripes (we'll come back to them later), and look down at the row of
-grey boxes with "changes" at the left. Those boxes show one column per builder.
-In ChromeOS we tend to name these by board/config name, and role. Each of these
-builders is associated with one or more bots, which are machines willing to run
-such builds. Each builder belongs to exactly one client (waterfall) but in some
-waterfalls they can be willing to serve more than one builder. The title in this
-row will link to a page that lists the recent builds completed for this
-configuration, and the builders associated with it. This is a useful view to see
-what recent runs have looked like, especially for comparing or contrasting.
-
-## Builds
-
-Once a build request gets assigned to a builder it begins a "Build".
-Chromite/cbuildbot generally starts with clean up and an open sync to the state
-of the tree (tip of branch in the branch case). Chromite/cbuildbot will tell you
-what it is building in the sync stage, or provide references as links in the
-build steps. Each build will have a number, a bot, and will run until completion
-or fatal error. The waterfall view will present the exposed steps in reverse
-chronological order in the column it belongs in. There is a list of times
-(generally in Google Coordinated Time) in the leftmost column to record when
-observation are made, and the boxes change colors to represent the current state
-as they progress. When a bot is finished it may disconnect and locally clean
-itself up (e.g. by rebooting) before asking for its next slug of work.
-
-## Current Activity
-
-In the row just above the titles for the grid there is a summary for each
-builder of what is currently going on, and what is upcoming (active builds,
-pending builds, delay to next time based decision). Beware that the ETA in this
-box is computed using a very simple predictive model that assume each build is
-roughly the same as the ones before. This goes very wrong when changing between
-builds that work, and builds which break a little ways in. Beware of these
-predictions in anything other than routine situations.
-
-## Last Build
-
-The top row of the grid part is a summary of how the previous build finished. We
-often view this as the state of the builder. In a rapidly cycling build system
-it is a close representative of what the state of the tree is for the type of
-build represented. For a slow-cycling system, or build requests that don't
-follow a smooth tree ordering this is less true and relevant. For ChromeOS
-consider the type of builder before thinking about what the state (or color) of
-the builder means.
-
-## The Announcement
-
-When present, we tend to use variations on a theme for the announcement box on
-top of the waterfall (and some other) pages. We use the announcement to
-abbreviate and present other interesting state information. The top bar and it's
-color represents the
-[state](http://www.chromium.org/developers/tree-sheriffs/sheriff-details-chromium-os#TOC-How-do-I-read-the-waterfall-)
-of the tree, including the current
-[message](http://chromiumos-status.appspot.com/). Under that there are 2 panes.
-
-* On the right there are usefully grouped lines of boxes that repeat
- the last build (see above) status. The label on the left of each row
- indicates what it is, and should link to a view of the waterfall
- with just those builders for more detail.
-* On the left there are useful links, lists of current rotations
- (roles taken by different people each day or two), and links to
- different views of the build data.
-
-## Different types of ChromeOS builders
-
-Almost all of these come from the workings of chromite, but are very useful to
-have an idea about to understand the big picture:
-
-* Full - a build that cleans out the chroot, and builds from stable
- ebuilds at the tip of tree
-* Canary - an official build with a new saved version
-* Incremental - a build that updates the repos, and builds from stable
- ebuilds at the tip of tree
-* Try - a build that updates the repos, applies a patch, updates
- ebuilds and tries to build
-* [ChromeOS ASAN information](/system/errors/NodeNotFound)ASAN - see
-* SDK - try new toolsets and update the prepackaged information for
- the chromeos SDK
-* Toolchain - try newer compilers
-* (chrome) - try building and testing chromeos with tip of tree chrome
- version
-* branch - pull a branch of the source code and try building there
- (factory, firmware, releases)
-* LKGM - distribute a successful and stable manifest to other
- interested parties
-
-## When the columns aren't right
-
-Currently the set of columns and the allocations of bots to back them is managed
-by the Chrome Infrastructure team, please file an
-[Infrastructure](https://goto.google.com/cros-infra-bug)
-bug OS-Chrome to start the process of correcting it. Please
-describe the type of build, and the cbuildbot configuration it should be
-running.
diff --git a/chromium/docs/website/site/chromium-os/build/using-remote-trybots/index.md b/chromium/docs/website/site/chromium-os/build/using-remote-trybots/index.md
deleted file mode 100644
index e5063985629..00000000000
--- a/chromium/docs/website/site/chromium-os/build/using-remote-trybots/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/build
- - Chromium OS Build
-page_name: using-remote-trybots
-title: Chromium OS Remote Trybots
----
-
-This page has moved to
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/remote_trybots.md>.
-Please update the link that brought you here.
diff --git a/chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/SourcePowerRule.png.sha1 b/chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/SourcePowerRule.png.sha1
deleted file mode 100644
index 58e91d3a071..00000000000
--- a/chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/SourcePowerRule.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-defe30e0929a7cc3c95e5b7eecaf3cc760a9d102 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/index.md b/chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/index.md
deleted file mode 100644
index 574b18da7de..00000000000
--- a/chromium/docs/website/site/chromium-os/cable-and-adapter-tips-and-tricks/index.md
+++ /dev/null
@@ -1,177 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: cable-and-adapter-tips-and-tricks
-title: USB Type-C Cable and Adapter Tips and Tricks
----
-
-This page provides reference information for manufacturers of USB-C parts. It
-addresses common misunderstandings and errors in building legacy cables (Type-A
-or microB to USB-C) and power adapters. For complete specifications, tolerances
-and application rules, see the latest version of the [USB Type-C
-specification](http://www.usb.org/developers/docs/).
-
-## Legacy Cables
-
-The following table describes the type of resistor and configuration (pull-up or
-pull-down) that is required for each type of legacy cable. All cables must be
-capable of supporting 3A, regardless of Rp/Rd.
-
-<table>
-<tr>
-<td>**Resistor Rp (pull-up between VBUS and CC)**</td>
-<td>**Resistor Rd (pull-down between CC and GND)**</td>
-<td>**ID Pin**</td>
-<td>**USB-C Spec Section**</td>
-</tr>
-<tr>
-<td>USB Type-C plug to USB 3.1 Type-A plug</td>
-<td>56 kΩ Rp</td>
-<td>Open</td>
-<td>Section 3.5.1</td>
-</tr>
-<tr>
-<td>USB-C plug to USB 2.0 Type-A plug</td>
-<td>56 kΩ Rp</td>
-<td>Open</td>
-<td>Section 3.5.2</td>
-</tr>
-<tr>
-<td>USB-C plug to Type-A receptacle</td>
-<td>Open</td>
-<td>5.1 kΩ Rd</td>
-<td>Section 3.6.1</td>
-</tr>
-<tr>
-<td>USB-C receptacle to microB plug</td>
-<td>Not allowed per the spec</td>
-<td>Section 2.2</td>
-</tr>
-<tr>
-<td>USB-C plug to microB plug</td>
-<td>Open</td>
-<td>5.1 kΩ Rd</td>
-<td>unconnected</td>
-<td>Section 3.5.7</td>
-</tr>
-<tr>
-<td>USB-C plug to microB receptacle</td>
-<td>56 kΩ Rp</td>
-<td>Open</td>
-<td>unconnected</td>
-<td>Section 3.6.2</td>
-</tr>
-</table>
-
-### Cable FAQ
-
-* **My legacy cable conforms to the specification and is rated for 3A.
- Can I use the Rp 3A resistor?**
- * No. You must use the 56 kΩ Rp. The resistor indicates the
- capability of the power adapter, not the capability of the
- cable. It is not safe to use the 3A Rp: if the power adapter is
- not capable of providing 3A it could overheat.
-* **Why does my cable need to be rated for 3A if only the standard Rp
- is used?**
- * The standard Rp indicates that the power sink needs to use some
- other method of finding what current the power source can
- provide. This method could be BC1.2 or a proprietary discovery
- scheme (such as the voltage set on D+/D-). Using these methods,
- a sink could discover the source is capable of up to 3A. *All
- cables must be capable of supporting 3A.*
-
-## Power Adapters
-
-For USB-C power adapters, the following table specifies the resistor type and
-configuration.
-
-<table>
-<tr>
-<td>**Pull-up on CC1**</td>
-<td>**Pull-up on CC2**</td>
-<td>**VBUS**</td>
-</tr>
-<tr>
-<td>5V 3A power adapter with USB-C receptacle</td>
-<td>10 kΩ</td>
-<td>10 kΩ</td>
-<td>Cold</td>
-</tr>
-<tr>
-<td>5V 1.5A power adapter with USB-C receptacle</td>
-<td>22 kΩ</td>
-<td>22 kΩ</td>
-<td>Cold</td>
-</tr>
-<tr>
-<td>5V 3A power adapter with captive USB-C cable</td>
-<td>10 kΩ</td>
-<td>open</td>
-<td>Cold or Hot</td>
-</tr>
-<tr>
-<td>5V 1.5A power adapter with captive USB-C cable</td>
-<td>22 kΩ</td>
-<td>open</td>
-<td>Cold or Hot</td>
-</tr>
-</table>
-
-VBUS Cold : When nothing is attached to the USB-C receptacle or plug, VBUS must
-be 0V or vSafe0V. 5V shall be applied to VBUS only when a UFP is detected by
-monitoring voltage on the CC pin. 5V should only be applied when voltage vRd on
-CC is 0.85V &lt; vRd &lt; 2.45V for a 3A power source. Please see Tables 4-23,
-4-24, and 4-25 of the Type-C specification for the appropriate values of vRd
-minimum and maximum voltages for Default USB Power, 1.5A, and 3.0A levels.
-
-VBUS Hot : When nothing is attached to the USB-C plug, 5V may be applied to
-VBUS.
-
-Important Note : If your charger implements USB Power Delivery, regardless of
-connector type (Receptacle or captive cable), VBUS Cold is required.
-
-### USB Battery Charging v1.2
-
-For chargers with a USB-C receptacle, it is highly recommended the port also
-support USB Battery Charging v1.2 in order to allow legacy devices using Type-A
-plugs or Micro-B receptacles to charge.
-
-To implement a BC1.2 Dedicated Charging Port (DCP), D+ and D- lines in the
-receptacle must be shorted together. Please see the [USB Battery Charging v1.2
-Spec](http://www.usb.org/developers/docs/devclass_docs/BCv1.2_070312.zip) for
-more details on how to implement DCP or CDP.
-
-### USB PD Power Rules
-
-Power adapters with maximum power &lt;= 15W may support USB Power Delivery.
-Power adapters with maximum power &gt; 15W must support USB Power Delivery. When
-initially specifying the voltage and current capability of an adapter which
-supplies &gt; 15W, pay close attention to Power Rules, in USB PD R2.0 V1.2
-Section 10.
-
-[<img alt="image"
-src="/chromium-os/cable-and-adapter-tips-and-tricks/SourcePowerRule.png">](/chromium-os/cable-and-adapter-tips-and-tricks/SourcePowerRule.png)
-
-USB PD Revision 2.0 specifies normative voltage rails of 5V, 9V, 15V, and 20V.
-In order to support a particular voltage rail, all voltage rails lower must be
-supported up to 3A.
-
-### Power Adapter FAQ
-
-* **In a 5V 3A or 5V 1.5A supply can I connect CC1 and CC2 and use a
- single shared resistor?**
- * No. This design fails with active cables, emarked cables or any
- device that requests Vconn. These cables have an Ra pulldown on
- one of the pins, preventing accurate detection of CC voltage if
- the pins are shorted at the adapter.
-* **May a Type-C charger support a proprietary method of changing
- VBUS** in addition to or instead of USB Power Delivery? (For
- example, Qualcomm QuickCharge, MediaTek PumpExpress, others)
- * No. Section 4.8.2 of the USB Type-C Specification explicitly
- forbids proprietary methods that change VBUS from the default
- voltage defined by USB 2.0 and USB 3.1 specifications (maximum
- 5.5V). This applies to both power sources and power sinks. If
- the power adapter incorporates a Type-C plug or a Type-C
- receptacle, that connector must not support any dynamic voltage
- method other than USB Power Delivery. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ccd/951-00273-01_20180607_suzyqable_SCH_1.pdf.sha1 b/chromium/docs/website/site/chromium-os/ccd/951-00273-01_20180607_suzyqable_SCH_1.pdf.sha1
deleted file mode 100644
index cac4a6de941..00000000000
--- a/chromium/docs/website/site/chromium-os/ccd/951-00273-01_20180607_suzyqable_SCH_1.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b57e0325dcf579711a484dc30c96d3a840898ef4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ccd/index.md b/chromium/docs/website/site/chromium-os/ccd/index.md
deleted file mode 100644
index 9d794a40bef..00000000000
--- a/chromium/docs/website/site/chromium-os/ccd/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: ccd
-title: Closed Case Debugging (CCD)
----
-
-## This page has moved to <https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/docs/ccd.md>. Please update the link that brought you here. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ccd/suzy-qs-1.png.sha1 b/chromium/docs/website/site/chromium-os/ccd/suzy-qs-1.png.sha1
deleted file mode 100644
index 38708e11a9a..00000000000
--- a/chromium/docs/website/site/chromium-os/ccd/suzy-qs-1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5d5e3eec78c29e688038ca5ddd1700e08cf28155 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-adb-debugging-over-usb/index.md b/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-adb-debugging-over-usb/index.md
deleted file mode 100644
index b01e732ff2f..00000000000
--- a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-adb-debugging-over-usb/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: chrome-os-systems-supporting-adb-debugging-over-usb
-title: Chrome OS Systems Supporting ADB Debugging over USB
----
-
-The Chromebooks that are able to run ADB over USB to test Android Apps on
-Chromebooks are listed below. Support for ADB over USB is done on a
-device-per-device basis and is dependent on a number of factors including
-hardware capability.
-
-To learn how to use ADB over USB on supported Chromebooks, [click
-here](https://developer.android.com/topic/arc/development-environment#debug_with_adb).
-
-<table>
-<tr>
-
-<td>Manufacturer</td>
-
-<td>Device</td>
-
-<td>Status</td>
-
-<td>Port support</td>
-
-</tr>
-<tr>
-
-<td>Google</td>
-
-<td>Pixelbook</td>
-
-<td>Stable</td>
-
-<td>Port 0: USB-C on left side of device</td>
-
-</tr>
-<tr>
-
-<td>Google</td>
-
-<td>Pixel Slate</td>
-
-<td>Stable</td>
-
-<td>Port 0: USB-C on left side of device</td>
-
-</tr>
-<tr>
-
-<td>HP</td>
-
-<td>Chromebook X2</td>
-
-<td>Stable</td>
-
-<td>Port 0: USB-C on left side of device</td>
-
-</tr>
-<tr>
-
-<td>Google</td>
-
-<td>Pixelbook Go</td>
-
-<td>Stable</td>
-
-<td>Port 0: USB-C on left side of device</td>
-
-</tr>
-</table>
-
-1. If a device status is marked as available on the Beta channel this does not
-mean that it will be available in the Stable channel on the next release of
-Chrome OS. For more information on how to move your device between Chromebook
-release channels[ click
-here](https://support.google.com/chromebook/answer/1086915?hl=en-GB). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-android-apps/index.md b/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-android-apps/index.md
deleted file mode 100644
index feeb46e8b7e..00000000000
--- a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-android-apps/index.md
+++ /dev/null
@@ -1,619 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: chrome-os-systems-supporting-android-apps
-title: Chrome OS Systems Supporting Android Apps
----
-
-Google Play Store and Android apps are available on many Chrome OS devices since
-launching in 2016. To learn more about what we launched in 2016, check out
-[this blog post](https://blog.google/products/chromebooks/the-google-play-store-coming-to/).
-
-The Chromebooks, Chromeboxes, and Chromebases that were launched before 2019
-that are able to install Android apps are listed below. Unless specified
-elsewhere, all devices that have launched in or after 2019 will support Android
-Apps. Roll-out of Android Apps is done on a device-per-device basis as it is
-dependent on a number of factors including the hardware platform that the
-device is based on and each device must be [compatible with
-Android](https://source.android.com/compatibility/). While we won't be able to
-bring Android apps to every Chromebook ever made, we're continuing to evaluate
-more devices and we'll update this list as new devices are added. Even if your
-Chromebook isn't on the list below, it will continue to get other new features
-and improvements.
-
-To learn how to install Android apps on supported Chromebooks, [click
-here](https://support.google.com/chromebook/answer/7021273).
-
-<table>
-<tr>
-<th>Manufacturer</th>
-<th>Device</th>
-<th>Status1</th>
-<tr>
-<td rowspan=36>Acer
-<td>Chromebook R11 (CB5-132T, C738T)
-<td>Stable Channel
-<tr>
-<td>Chromebook Spin 11 (R751T)
-<td>Stable Channel
-<tr>
-<td>Chromebook R13 (CB5-312T)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 N7 (C731, C731T)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 (C771, C771T)
-<td>Stable Channel
-<tr>
-<td>Chromebook 14 (CB3-431)
-<td>Stable Channel
-<tr>
-<td>Chromebook 14 for Work (CP5-471)
-<td>Stable Channel
-<tr>
-<td>Chromebook 15 (CB3-532)
-<td>Stable Channel
-<tr>
-<td>Chromebook 15 (CB515-1HT/1H)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 (C740)
-<td>Stable Channel
-<tr>
-<td>Chromebook 15 (CB5-571 / C910)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 (C732, C732T, C732L, C732LT)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 (CB311-8H, CB311-8HT)
-<td>Stable Channel
-<tr>
-<td>Chromebook 13 (CB713-1W)
-<td>Stable Channel
-<tr>
-<td>Chromebook 15 (CB315-1H, CB315-1HT)
-<td>Stable Channel
-<tr>
-<td>Chromebook 311 (C721)
-<td>Stable Channel
-<tr>
-<td>Chromebook 311 (C733, C733U, C733T)
-<td>Stable Channel
-<tr>
-<td>Chromebook 315 (CB315-2H)
-<td>Stable Channel
-<tr>
-<td>Chromebook 512 (C851, C851T)
-<td>Stable Channel
-<tr>
-<td>Chromebook 514 (CB514)
-<td>Stable Channel
-<tr>
-<td>Chromebook Spin 11 (CP311-H1, CP311-1HN)
-<td>Stable Channel
-<tr>
-<td>Chromebook Spin 13 (CP713-1WN)
-<td>Stable Channel
-<tr>
-<td>Chromebook Spin 311 (R721T)
-<td>Stable Channel
-<tr>
-<td>Chromebook Spin 511 (R752T, R752TN)
-<td>Stable Channel
-<tr>
-<td>Chromebook Spin 512 (R851TN)
-<td>Stable Channel
-<tr>
-<td>Chromebook Tab 10
-<td>Stable Channel
-<tr>
-<td>Chromebox CXI3
-<td>Stable Channel
-<tr>
-<td>Chromebook 715 (CB715-1W, CB715-1WT)
-<td>Stable Channel
-<tr>
-<td>Chromebook 714 (CB714-1W, CB714-1WT)
-<td>Stable Channel
-<tr>
-<td>Chromebook Spin 15 (CP315-1H/1HT)
-<td>Stable Channel
-<tr>
-<td>Chromebook 15 (CB315-1H/1HT)
-<td>Stable Channel
-<tr>
-<td>Chromebase (CA24I2, CA24V2)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 (C730 / CB3-111 / C730E / CB3-131)
-<td>Planned
-<tr>
-<td>Chromebook 15 (CB3-531)
-<td>Planned
-<tr>
-<td>Chromebox CXI2
-<td>Planned
-<tr>
-<td>Chromebase 24
-<td>Planned
-<tr>
-<td rowspan=5>AOpen
-<td>Chromebox Mini
-<td>Stable Channel
-<tr>
-<td>Chromebase Mini
-<td>Stable Channel
-<tr>
-<td>Chromebox Commercial 2
-<td>Stable Channel
-<tr>
-<td>Chromebox Commercial
-<td>Planned
-<tr>
-<td>Chromebase Commercial
-<td>Planned
-<tr>
-<td rowspan=20>Asus
-<td>Chromebook Flip C100PA
-<td>Stable Channel
-<tr>
-<td>Chromebook Flip C101PA
-<td>Stable Channel
-<tr>
-<td>Chromebook Flip C213
-<td>Stable Channel
-<tr>
-<td>Chromebook C202SA
-<td>Stable Channel
-<tr>
-<td>Chromebook C300SA / C301SA
-<td>Stable Channel
-<tr>
-<td>Chromebook Flip C302
-<td>Stable Channel
-<tr>
-<td>Chromebook C204
-<td>Stable Channel
-<tr>
-<td>Chromebook C223
-<td>Stable Channel
-<tr>
-<td>Chromebook C403
-<td>Stable Channel
-<tr>
-<td>Chromebook C423
-<td>Stable Channel
-<tr>
-<td>Chromebook C523
-<td>Stable Channel
-<tr>
-<td>Chromebook Flip C214
-<td>Stable Channel
-<tr>
-<td>Chromebook Flip C434
-<td>Stable Channel
-<tr>
-<td>Chromebox 3 (CN65)
-<td>Stable Channel
-<tr>
-<td>Chromebook Tablet CT100
-<td>Stable Channel
-<tr>
-<td>Chromebit CS10
-<td>Planned
-<tr>
-<td>Chromebook C200MA
-<td>Planned
-<tr>
-<td>Chromebook C201PA
-<td>Planned
-<tr>
-<td>Chromebook C300MA
-<td>Planned
-<tr>
-<td>Chromebox CN62
-<td>Planned
-<tr>
-<td>Bobicus
-<td>Chromebook 11
-<td>Planned
-<tr>
-<td rowspan=10>CTL
-<td>NL61 Chromebook
-<td>Stable Channel
-<tr>
-<td>J2 / J4 Chromebook
-<td>Stable Channel
-<tr>
-<td>J5 Convertible Chromebook
-<td>Stable Channel
-<tr>
-<td>Chromebook J41 / J41T
-<td>Stable Channel
-<tr>
-<td>Chromebook NL7
-<td>Stable Channel
-<tr>
-<td>Chromebook NL7 / NL7T-360 / NL7TW-360
-<td>Stable Channel
-<tr>
-<td>Chromebook NL7 LTE
-<td>Stable Channel
-<tr>
-<td>Chromebox CBx1
-<td>Stable Channel
-<tr>
-<td>Chromebook Tablet Tx1 for Education
-<td>Stable Channel
-<tr>
-<td>N6 Education Chromebook
-<td>Planned
-<tr>
-<td rowspan=11>Dell
-<td>Chromebook 11 (3180)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 (5190)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 2-in-1 (3189)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 2-in-1 (5190)
-<td>Stable Channel
-<tr>
-<td>Chromebook 13 (3380)
-<td>Stable Channel
-<tr>
-<td>Chromebook 13 (7310)
-<td>Stable Channel
-<tr>
-<td>Chromebook 3100
-<td>Stable Channel
-<tr>
-<td>Chromebook 3100 2-in-1
-<td>Stable Channel
-<tr>
-<td>Chromebook 3400
-<td>Stable Channel
-<tr>
-<td>Inspiron Chromebook 14 2-in-1 (7486)
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 (3120)
-<td>Planned
-<tr>
-<td rowspan=4>eduGear
-<td>Chromebook K Series
-<td>Stable Channel
-<tr>
-<td>Chromebook M Series
-<td>Stable Channel
-<tr>
-<td>CMT Chromebook
-<td>Stable Channel
-<tr>
-<td>Chromebook R Series
-<td>Planned
-<tr>
-<td rowspan=2>Edxis
-<td>Education Chromebook
-<td>Stable Channel
-<tr>
-<td>Chromebook
-<td>Planned
-<tr>
-<td rowspan=3>Google
-<td>Chromebook Pixel (2015)
-<td>Stable Channel
-<tr>
-<td>Pixelbook
-<td>Stable Channel
-<tr>
-<td>Pixel Slate
-<td>Stable Channel
-<tr>
-<td rowspan=4>Haier
-<td>Chromebook 11e
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 C
-<td>Stable Channel
-<tr>
-<td>Chromebook 11
-<td>Planned
-<tr>
-<td>Chromebook 11 G2
-<td>Planned
-<tr>
-<td>Hexa
-<td>Chromebook Pi
-<td>Planned
-<tr>
-<td>HiSense
-<td>Chromebook 11
-<td>Stable Channel
-<tr>
-<td rowspan=17>HP
-<td>Chromebook 11 G5 EE
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 G5
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 G6 EE
-<td>Stable Channel
-<tr>
-<td>Chromebook x360 11 G1 EE
-<td>Stable Channel
-<tr>
-<td>Chromebook 13 G1
-<td>Stable Channel
-<tr>
-<td>Chromebook 14 G5
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 G7 EE
-<td>Stable Channel
-<tr>
-<td>Chromebook 11A G6 EE
-<td>Stable Channel
-<tr>
-<td>Chromebook 14A G5
-<td>Stable Channel
-<tr>
-<td>Chromebook 15 G1
-<td>Stable Channel
-<tr>
-<td>Chromebook x2
-<td>Stable Channel
-<tr>
-<td>Chromebook x360 11 G2 EE
-<td>Stable Channel
-<tr>
-<td>Chromebook x360 14
-<td>Stable Channel
-<tr>
-<td>Chromebox G2
-<td>Stable Channel
-<tr>
-<td>Chromebook 11 G3
-<td>Planned
-<tr>
-<td>Chromebook 11 G4 / G4 EE
-<td>Planned
-<tr>
-<td>Chromebook 14 G4
-<td>Planned
-<tr>
-<td>Lava
-<td>Xolo Chromebook
-<td>Planned
-<tr>
-<td rowspan=30>Lenovo
-<td>Thinkpad 11e Chromebook (Gen 3)
-<td>Stable Channel
-<tr>
-<td>ThinkPad 11e Yoga Chromebook (Gen 3)
-<td>Stable Channel
-<tr>
-<td>ThinkPad 11e Chromebook (Gen 4)
-<td>Stable Channel
-<tr>
-<td>Thinkpad 11e Yoga Chromebook (Gen 4)
-<td>Stable Channel
-<tr>
-<td>N22 Chromebook
-<td>Stable Channel
-<tr>
-<td>N23 Chromebook
-<td>Stable Channel
-<tr>
-<td>100e Chromebook
-<td>Stable Channel
-<tr>
-<td>Flex 11 Chromebook
-<td>Stable Channel
-<tr>
-<td>N23 Yoga Chromebook
-<td>Stable Channel
-<tr>
-<td>300e Chromebook
-<td>Stable Channel
-<tr>
-<td>500e Chromebook
-<td>Stable Channel
-<tr>
-<td>N42 Chromebook
-<td>Stable Channel
-<tr>
-<td>Thinkpad 13 Chromebook
-<td>Stable Channel
-<tr>
-<td>100e Chromebook 2nd Gen
-<td>Stable Channel
-<tr>
-<td>14e Chromebook
-<td>Stable Channel
-<tr>
-<td>300e Chromebook 2nd Gen
-<td>Stable Channel
-<tr>
-<td>500e Chromebook 2nd Gen
-<td>Stable Channel
-<tr>
-<td>100e Chromebook 2nd Gen MTK
-<td>Stable Channel
-<tr>
-<td>300e Chromebook 2nd Gen MTK
-<td>Stable Channel
-<tr>
-<td>Chromebook C330
-<td>Stable Channel
-<tr>
-<td>Chromebook S330
-<td>Stable Channel
-<tr>
-<td>Yoga C630 Chromebook
-<td>Stable Channel
-<tr>
-<td>Chromebook C340-11
-<td>Stable Channel
-<tr>
-<td>Chromebook S340-14
-<td>Stable Channel
-<tr>
-<td>100S Chromebook
-<td>Planned
-<tr>
-<td>N20 / N20P Chromebook
-<td>Planned
-<tr>
-<td>N21 Chromebook
-<td>Planned
-<tr>
-<td>ThinkPad 11e Chromebook
-<td>Planned
-<tr>
-<td>ThinkPad 11e Yoga Chromebook
-<td>Planned
-<tr>
-<td>ThinkCentre Chromebox
-<td>Planned
-<tr>
-<td rowspan=2>Medion
-<td>Chromebook S2015
-<td>Stable Channel
-<tr>
-<td>Chromebook Akoya S2013
-<td>Planned
-<tr>
-<td>M&A
-<td>Chromebook
-<td>Planned
-<tr>
-<td>Mercer
-<td>Chromebook NL6D
-<td>Stable Channel
-<tr>
-<td>Multilaser
-<td>Chromebook M11C
-<td>Stable Channel
-<tr>
-<td>NComputing
-<td>Chromebook CX100
-<td>Stable Channel
-<tr>
-<td>Nexian
-<td>Chromebook 11.6”
-<td>Stable Channel
-<tr>
-<td> Newline
-<td> Chromebox A10
-<td> Stable Channel
-<tr>
-<td rowspan=3>PCMerge
-<td>Chromebook PCM-116E
-<td>Stable Channel
-<tr>
-<td>Chromebook PCM-116T-432B
-<td>Stable Channel
-<tr>
-<td>Chromebook AL116
-<td>Stable Channel
-<tr>
-<td rowspan=3>Poin2
-<td>Chromebook 11
-<td>Stable Channel
-<tr>
-<td>Chromebook 14
-<td>Stable Channel
-<tr>
-<td>Chromebook 11C
-<td>Stable Channel
-<tr>
-<td rowspan=2>Positivo
-<td>Chromebook CH1190
-<td>Stable Channel
-<tr>
-<td>Chromebook C216B
-<td>Stable Channel
-<tr>
-<td>Promethean
-<td>Chromebox
-<td>Stable Channel
-<tr>
-<td rowspan=3>Prowise
-<td>Chromebook Eduline
-<td>Stable Channel
-<tr>
-<td>Chromebook Entryline
-<td>Stable Channel
-<tr>
-<td>Chromebook Proline
-<td>Stable Channel
-<tr>
-<td rowspan=6>Samsung
-<td>Chromebook Plus
-<td>Stable Channel
-<tr>
-<td>Chromebook Pro
-<td>Stable Channel
-<tr>
-<td>Chromebook 3
-<td>Stable Channel
-<tr>
-<td>Chromebook Plus (LTE)
-<td>Stable Channel
-<tr>
-<td>Chromebook Plus (V2)
-<td>Stable Channel
-<tr>
-<td>Chromebook 2 11" - XE500C12
-<td>Planned
-<tr>
-<td rowspan=2>Sector 5
-<td>E1 Rugged Chromebook
-<td>Stable Channel
-<tr>
-<td>E3 Chromebook
-<td>Stable Channel
-<tr>
-<td>Senkatel
-<td>C1101 Chromebook
-<td>Planned
-<tr>
-<td rowspan=2>Toshiba
-<td>Chromebook 2 (2015)
-<td>Stable Channel
-<tr>
-<td>Chromebook 2
-<td>Planned
-<tr>
-<td>True IDC
-<td>Chromebook 11
-<td>Planned
-<tr>
-<td>ViewSonic
-<td>NMP660 Chromebox
-<td>Stable Channel
-<tr>
-<td rowspan=3>Viglen
-<td>Chromebook 11
-<td>Stable Channel
-<tr>
-<td>Chromebook 360
-<td>Stable Channel
-<tr>
-<td>Chromebook 11C
-<td>Stable Channel
-</table>
-
-1. If a device status is marked as available on the Beta channel this does not
-mean that it will be available in the Stable channel on the next release of
-Chrome OS. For more information on how to move your device between Chromebook
-release channels [click
-here](https://support.google.com/chromebook/answer/1086915?hl=en-GB).
diff --git a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-instant-tethering/index.md b/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-instant-tethering/index.md
deleted file mode 100644
index 4763e086ecd..00000000000
--- a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-instant-tethering/index.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: chrome-os-systems-supporting-instant-tethering
-title: Chrome OS Devices Which Do Not Support Instant Tethering
----
-
-When you don’t have access to Wi-Fi, Instant Tethering uses your Android phone’s
-mobile data to automatically connect your Chromebook to the internet through a
-simple notification shown on your Chrome OS desktop. To learn more about Instant
-Tethering, [click here](https://support.google.com/chromebook/answer/7457148).
-
-All Chrome OS devices, except for the devices listed below, support Instant
-Tethering. This list captures older devices without the required hardware
-support; new devices as of 2020 should always be able to support Instant
-Tethering. We're continuing to evaluate these devices to understand if they can
-support the feature, and we'll update this list as new devices are added. Even
-if your Chromebook is on the list below, it will continue to get other new
-features and improvements.
-
- Acer Chromebase
-
- Acer Chromebook 11 (CB3-131 C735)
-
- Acer Chromebook 14 (CB3-431)
-
- Acer Chromebook 15 (CB3-531)
-
- Acer Chromebook 15 (CB315-1H CB315-1HT)
-
- Acer Chromebook 15 (CB5-571 C910)
-
- Acer Chromebase 24
-
- Acer Chromebook R11 (CB5-132T C738T)
-
- Acer Chromebook R13 (CB5-312T)
-
- Acer Chromebook Spin 15 (CP315)
-
- Acer Chromebox CXI2 / CXV2
-
- AOpen Chromebase Commercial
-
- AOpen Chromebase Mini
-
- AOpen Chromebox Commercial
-
- AOpen Chromebox Mini
-
- ASI Chromebook
-
- ASUS Chromebit CS10
-
- ASUS Chromebook Flip C100PA
-
- ASUS Chromebook C300
-
- ASUS Chromebook C201PA
-
- ASUS Chromebook C200
-
- ASUS Chromebox 2 (CN62)
-
- Bobicus Chromebook 11
-
- Consumer Chromebook
-
- Crambo Chromebook
-
- CTL J2 / J4 Chromebook
-
- CTL N6 Education Chromebook
-
- Dell Chromebook 13 (7310)
-
- Dell Chromebox
-
- Dell Chromebook 11 (3120)
-
- Epik 11.6" Chromebook ELB1101
-
- Education Chromebook
-
- EduGear Chromebook K
-
- EduGear Chromebook M
-
- EduGear Chromebook R
-
- Edxis Chromebook
-
- Edxis Education Chromebook (NL6)
-
- Google Chromebook Pixel (2015)
-
- Haier Chromebook 11
-
- Haier Chromebook 11e
-
- Haier Chromebook 11 G2
-
- HEXA Chromebook Pi
-
- HiSense Chromebook 11
-
- HP Chromebook 11 2100-2199 / HP Chromebook 11 G3
-
- HP Chromebook 11 G3/G4/G4 EE
-
- HP Chromebook 14 G4
-
- JP Sa Couto Chromebook
-
- Lava Xolo Chromebook
-
- Lenovo Flex 11 Chromebook
-
- Lenovo ThinkCentre Chromebox
-
- Lenovo 100S Chromebook
-
- Lenovo 300e/N23 Yoga/Flex 11 Chromebook
-
- LG Chromebase (22CB25S)
-
- LG Chromebase (22CV241)
-
- Lumos Education Chromebook
-
- Mecer Chromebook
-
- Medion Chromebook Akoya S2013
-
- Medion Chromebook S2015
-
- Multilaser Chromebook 11
-
- M&A Chromebook
-
- NComputing Chromebook CX100
-
- Nexian Chromebook 11.6"
-
- PCMerge Chromebook PCM-116E/PCM-116EB
-
- Poin2 Chromebook 11C
-
- Positivo Chromebook CH1190
-
- Poin2 Chromebook 11
-
- Prowise Chromebook Eduline / Prowise Chromebook Eduline 360
-
- Prowise Chromebook Entryline
-
- RGS Education Chromebook
-
- Senkatel C1101 Chromebook
-
- Sector 5 E1 Rugged Chromebook
-
- Samsung Chromebook Plus
-
- Samsung Chromebook 2 11" (XE500C12)
-
- Toshiba Chromebook 2
-
- Toshiba Chromebook 2 (2015 Edition)
-
- True IDC Chromebook
-
- True IDC Chromebook 11
-
- Videonet Chromebook
-
- VideoNet Chromebook BL10
-
- Viglen Chromebook 11 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-linux/index.md b/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-linux/index.md
deleted file mode 100644
index 7ec0e8cf225..00000000000
--- a/chromium/docs/website/site/chromium-os/chrome-os-systems-supporting-linux/index.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: chrome-os-systems-supporting-linux
-title: Chrome OS Systems Supporting Linux (Beta)
----
-
-Linux (Beta), also known as Crostini, is a feature that lets you develop
-software using your Chromebook. You can install Linux command line tools, code
-editors, and IDEs on your Chromebook. These can be used to write code, create
-apps, and more. Learn more on [The
-Keyword](https://blog.google/products/chromebooks/linux-on-chromebooks/).
-The Chromebooks, Chromeboxes, and Chromebases launched before 2019 that support
-Linux (Beta) are listed below. Unless otherwise specified, all devices launched
-in 2019 will support Linux (Beta).
-
-To learn how to set up Linux (Beta) on supported Chromebooks, [click
-here](https://support.google.com/chromebook/answer/9145439?hl=en).
-
-For in-depth technical documentation, [click
-here](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/containers_and_vms.md).
-
-<table>
-<tr>
-<th>Manufacturer
-<th>Device
-<tr>
-<td>Acer
-<td>
-Chromebook 11 (C732, C732T, C732L, C732LT)<br/>
-Chromebook 11 (CB311-8H, CB311-8HT)<br/>
-Chromebook 11 N7 (C731, C731T)<br/>
-Chromebook 13 (CB713-1W)<br/>
-Chromebook 14 (CB3-431)<br/>
-Chromebook 15 (CB3-532)<br/>
-Chromebook 15 (CB315-1H, CB315-1HT)<br/>
-Chromebook 15 (CB515-1H, CB515-1HT)<br/>
-Chromebook 514<br/>
-Chromebook R11 (CB5-132T, C738T)<br/>
-Chromebook R13 (CB5-312T)<br/>
-Chromebook Spin 11 (CP311-H1, CP311-1HN)<br/>
-Chromebook Spin 11 (R751T)<br/>
-Chromebook Spin 13 (CP713-1WN)<br/>
-Chromebook Spin 15 (CP315)<br/>
-Chromebook Tab 10<br/>
-Chromebox CXI3
-<tr>
-<td>ASUS</td>
-<td>
-Chromebook C202SA<br/>
-Chromebook C223<br/>
-Chromebook C300SA / C301SA<br/>
-Chromebook C423<br/>
-Chromebook C523<br/>
-Chromebook Flip C101PA<br/>
-Chromebook Flip C213<br/>
-Chromebox 3 (CN65)
-<tr>
-<td>CTL
-<td>
-Chromebook J41 / J41T<br/>
-Chromebook NL7<br/>
-Chromebook NL7 / NL7T-360 / NL7TW-360<br/>
-Chromebook NL7 LTE<br/>
-Chromebox CBx1<br/>
-J5 Chromebook<br/>
-NL61 Chromebook
-<tr>
-<td>Dell
-<td>
-Chromebook 11 (3180)<br/>
-Chromebook 11 (5190)<br/>
-Chromebook 11 2-in-1 (3189)<br/>
-Chromebook 11 2-in-1 (5190)<br/>
-Inspiron Chromebook 14 2-in-1 (7486)
-<tr>
-<td>Edugear
-<td>CMT Chromebook
-<tr>
-<td>Edxis
-<td>Education Chromebook (NL6D)
-</tr>
-<tr>
-<td>Google
-<td>
-Pixelbook<br/>
-Pixel Slate<br/>
-Pixelbook Go
-<tr>
-<td>Haier
-<td>Chromebook 11 C
-<tr>
-<td>HP
-<td>
-Chromebook 11 G5<br/>
-Chromebook 11 G5 EE<br/>
-Chromebook 11 G6 EE<br/>
-Chromebook 14 G5<br/>
-Chromebook 14A G5<br/>
-Chromebook x2<br/>
-Chromebook x360 11 G1 EE<br/>
-Chromebook x360 14<br/>
-Chromebox G2
-<tr>
-<td>Lenovo
-<td>
-100e Chromebook<br/>
-300e/N23 Yoga/Flex 11 Chromebook<br/>
-500e Chromebook<br/>
-Flex 11 Chromebook<br/>
-Ideapad C330 Chromebook<br/>
-Ideapad S330 Chromebook<br/>
-N22 Chromebook<br/>
-N23 Chromebook<br/>
-N23 Chromebook (Touch)<br/>
-N42 Chromebook<br/>
-ThinkPad 11e 3rd Gen Chromebook<br/>
-ThinkPad 11e 4th Gen Chromebook<br/>
-Yoga C630 Chromebook
-<tr>
-<td>Mecer
-<td>V2 Chromebook
-<tr>
-<td>
-Multilaser<br/>
-Chromebook M11C<br/>
-<tr>
-<td>PCMerge
-<td>Chromebook PCM-116T-432B
-<tr>
-<td>Poin2
-<td>
-Chromebook 11C<br/>
-Chromebook 14<br/>
-<tr>
-<td>Positivo
-<td>Chromebook C216B
-<tr>
-<td>Prowise
-<td>Chromebook Proline
-<tr>
-<td>Samsung
-<td>
-Chromebook 3<br/>
-Chromebook Plus<br/>
-Chromebook Plus (LTE)<br/>
-Chromebook Plus (V2)
-<tr>
-<td>ViewSonic
-<td>NMP660 Chromebox
-<tr>
-<td>Viglen
-<td>Chromebook 360
-</tr>
-</table>
diff --git a/chromium/docs/website/site/chromium-os/chromeos-graphics-reading-list/index.md b/chromium/docs/website/site/chromium-os/chromeos-graphics-reading-list/index.md
deleted file mode 100644
index f72e2d00e61..00000000000
--- a/chromium/docs/website/site/chromium-os/chromeos-graphics-reading-list/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: chromeos-graphics-reading-list
-title: Chrome OS Graphics Reading List
----
-
-
-
-<table>
- <tr>
- <th>Area</th>
- <th>Title</th>
- <th>URL</th>
- </tr>
- <tr>
- <td>Intel</td>
- <td>Intel Driver Summary circa 2009</td>
- <td><a href="http://keithp.com/blogs/Sharpening_the_Intel_Driver_Focus/">http://keithp.com/blogs/Sharpening_the_Intel_Driver_Focus/</a></td>
- </tr>
- <tr>
- <td>KMS / DRM</td>
- <td>Atomic Modeset support for KMS drivers</td>
- <td><a href="http://blog.ffwll.ch/2014/11/atomic-modeset-support-for-kms-drivers.html">http://blog.ffwll.ch/2014/11/atomic-modeset-support-for-kms-drivers.html</a></td>
- </tr>
- <tr>
- <td>DRM/X11/GL</td>
- <td>How DRI And DRM Work</td>
- <td><a href="http://www.bitwiz.org.uk/s/how-dri-and-drm-work.html">http://www.bitwiz.org.uk/s/how-dri-and-drm-work.html</a></td>
- </tr>
- <tr>
- <td>Aura</td>
- <td>Aura Design Docs</td>
- <td><a href="http://www.chromium.org/developers/design-documents/aura">http://www.chromium.org/developers/design-documents/aura</a></td>
- </tr>
- <tr>
- <td>GEM</td>
- <td>Memory Management for GPUs</td>
- <td><a href="http://lwn.net/Articles/257417/">http://lwn.net/Articles/257417/</a></td>
- </tr>
- <tr>
- <td>Overview</td>
- <td>The Linux Graphics Stack</td>
- <td><a href="http://blog.mecheye.net/2012/06/the-linux-graphics-stack/">http://blog.mecheye.net/2012/06/the-linux-graphics-stack/</a></td>
- </tr>
- <tr>
- <td>DRM</td>
- <td>DRM Developer's Guided (unofficial, revised)</td>
- <td><a href="http://www.ideasonboard.org/media/drm/">http://www.ideasonboard.org/media/drm/</a></td>
- </tr>
- <tr>
- <td>GEM</td>
- <td>i915/GEM Crashcourse</td>
- <td><a href="http://blog.ffwll.ch/2012/10/i915gem-crashcourse.html">http://blog.ffwll.ch/2012/10/i915gem-crashcourse.html</a></td>
- </tr>
- <tr>
- <td>KMS / DRM</td>
- <td>Kernel docs</td>
- <td><a href="https://www.kernel.org/doc/html/v4.13/gpu/drm-kms.html">https://www.kernel.org/doc/html/v4.13/gpu/drm-kms.html</a></td>
- </tr>
- <tr>
- <td>DRM</td>
- <td>DRM Developer's Guide</td>
- <td><a href="http://www.kernel.org/doc/htmldocs/drm.html">http://www.kernel.org/doc/htmldocs/drm.html</a></td>
- </tr>
- <tr>
- <td>GEM</td>
- <td>GEM v. TTM</td>
- <td><a href="http://lwn.net/Articles/283793/">http://lwn.net/Articles/283793/</a></td>
- </tr>
-</table>
diff --git a/chromium/docs/website/site/chromium-os/chromium-os-faq/index.md b/chromium/docs/website/site/chromium-os/chromium-os-faq/index.md
deleted file mode 100644
index 77c40033fd4..00000000000
--- a/chromium/docs/website/site/chromium-os/chromium-os-faq/index.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: chromium-os-faq
-title: Chromium OS FAQ
----
-
-[TOC]
-
-## What's the difference between Chromium OS and Google Chrome OS?
-
-Google Chrome OS is to Chromium OS what Google Chrome browser is to Chromium.
-
-* **Chromium OS** is the open source project, used primarily by
- developers, with code that is available for anyone to checkout,
- modify, and build.
-* **Google Chrome OS** is the Google product that OEMs ship on
- Chromebooks for general consumer use.
-
-Some specific differences:
-
-* The two projects fundamentally share the same code base, but Google
- Chrome OS has some additional firmware features, including verified
- boot and easy recovery, which require corresponding hardware changes
- and thus also don't work out of the box in Chromium OS builds.
-* Google Chrome OS runs on specially optimized hardware in order to
- get enhanced performance and security.
-* Chromium OS does not auto-update by default (so that changes you may
- have made to the code are not blown away), whereas Google Chrome OS
- seamlessly auto-updates so that users have the latest and greatest
- features and fixes.
-* Google Chrome OS is supported by Google and its partners; Chromium
- OS is supported by the open source community.
-* Google Chrome OS includes some binary packages which are not allowed
- to be included in the Chromium OS project. A non-exhaustive list:
- * Adobe Flash
- * Widevine CDM plugin (to support [HTML5
- EME](https://w3c.github.io/encrypted-media/))
- * 3G Cellular support (but work is on going to address this)
- * DisplayLink Manager for video over USB (some systems)
- * Android (ARC++) container for running Android apps
-* Some components are available in both, but as closed source
- binary-only blobs. A non-exhaustive list:
- * Graphics Libraries (e.g. OpenGL) on ARM platforms
-* Google Chrome ships with its own set of [API
- keys](http://www.chromium.org/developers/how-tos/api-keys) while
- Chromium does not include any
- * Users are expected to set up their own
-* Google Chrome OS has a [green/yellow/red
- logo](https://www.google.com/intl/en/images/logos/chrome_logo.gif)
- while Chromium OS has a [blue/bluer/bluest](/config/customLogo.gif)
- logo.
-
-## Where can I download Google Chrome OS?
-
-Google Chrome OS is not a conventional operating system that you can download or
-buy on a disc and install. As a consumer, the way you will get Google Chrome OS
-is by buying a Chromebook that has Google Chrome OS installed by the OEM. Google
-Chrome OS is being developed to run on new machines that are specially optimized
-for increased security and performance. We are working with manufacturers to
-develop reference hardware for Google Chrome OS.
-
-Chromebooks are available for sale now! Check out the [Google Chromebook
-site](http://www.google.com/chromebook/) for more information.
-
-## Where can I download Chromium OS?
-
-If you are the kind of developer who likes to build an open source operating
-system from scratch, you can follow the developer instructions to check out
-Chromium OS, build it and experiment with it. A number of sites have also posted
-pre-built binaries of Chromium OS. However, these downloads are not verified by
-Google, therefore please ensure you trust the site you are downloading these
-from.
-
-Keep in mind that Chromium OS is not for general consumer use.
-
-## I am a hardware manufacturer, who can I talk to about making a Chrome OS product?
-
-The Chrome OS business development team can be reached at
-[chromeos-interested@google.com](mailto:chromeos-interested@google.com). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png.sha1
deleted file mode 100644
index 442f1daf557..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-48ce62b95ca1a8d64ac7cb306f49a8591b1478ee \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/example.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/example.png.sha1
deleted file mode 100644
index 4d48833b437..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/example.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-891c4899987a83870f1ac70cd237ea6bbbd92885 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/index.md
deleted file mode 100644
index cc578b9da0c..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/autoupdate-details/index.md
+++ /dev/null
@@ -1,229 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: autoupdate-details
-title: Autoupdate Details
----
-
-## Abstract
-
-This document describes details about how the autoupdate system works. For a
-high-level view of autoupdate, and information about the filesystem, see [File
-System/Autoupdate](/chromium-os/chromiumos-design-docs/filesystem-autoupdate).
-
-The autoupdate system provides bit-for-bit-exact in-place filesystem updates
-with file-level binary diffs.
-
-## **Goals**
-
-* Updates should be as small as we can reasonably make them.
-* An update must result in a root-filesystem partition in which each
- disk block is exactly (bit-for-bit) as specified by the OS vendor,
- so that the update can be signed on the server (for verified boot).
-* Updates must be applied in place, so that many delta updates can be
- installed without rebooting. For example: if a user is booted into
- version N, and N+1 is released, the user downloads the (N→N+1)
- update and installs. If the user is still booted into N when N+2
- comes out, then the user downloads the (N+1→N+2) update and in-place
- installs it over N+1.
-
-## **Overview of the install procedure**
-
-The client will have a partition (which we'll call the "install partition") on
-which to install a delta update. This partition will already contain some
-version of the operating system.
-
-The client will contact the autoupdate server to request an update, specifying
-the version number of the system installed on the install partition. The server
-may provide the client with a delta update which the client will download.
-
-The delta update file contains an ordered list of operations to perform on the
-install partition that will take it from the existing version to the new
-version.
-
-## **Overview of the delta update file format**
-
-Note: The destination partition is composed of 4K blocks.\[1\]
-
-The update file is an ordered list of operations to perform. Each operation
-operates on specific blocks on the partition. For each operation, there may be
-an optional data blob, also included in the update file.
-
-The types of install operations are:
-
-* Copy: copy some blocks in the install partition to other blocks in
- the install partition. This can be used to move a block to a new
- location, or to copy a block to temporary storage; for more
- information, see the example below.
-* Bsdiff: read some blocks into memory from the existing install
- partition, perform a patch (binary diff) using the attached data
- blob, and write the resulting updated blocks to specified blocks in
- the install partition. (See below for more details.)
-* Replace: write the attached data blob to specified blocks in the
- install partition.
-* Replace_bz: B-unzip the attached data blob and write the result to
- specified blocks in the install partition.
-
-A traditional diff update to a file (using bsdiff) works like this: the old file
-and the patch file are read into memory. Next, a patch operation is performed in
-memory, resulting in the new file being in memory. Finally, the new file is
-written to disk.
-We modify that operation slightly. We tell the patch program that the old file
-is the install partition. However, rather than have the program read the entire
-partition into memory, we tell it which blocks to read. Then the patch operation
-is performed in memory. Finally, the result is written directly to the install
-partition, but not at the beginning of the device: we will tell the program
-which blocks to write the result to.
-
-## **Generating delta update files**
-
-This section describes how the OS vender creates an update file.
-
-The update file format will be:
-
-1. Magic number ('CrAU')
-2. Version number
-3. Eight bytes for protobuf length
-4. The protobuf
-5. Collection of data blobs
-6. EOF
-
-The protobuf is a series of instructions that the client must perform in order.
-
-Note: To specify a set of blocks, we use an extent, which is simply a contiguous
-range of disk blocks. For example, rather than specify blocks {10, 11, 12, 13,
-14, 15, 17, 18}, it can be simpler to specify { (10, 6), (17, 2) } (a list of
-extents).
-message Manifest {
-message InstallOperation {
-enum CompressionType { COPY = 0, // file is unchanged; just move data blocks
-BSDIFF = 1, // Read source data blocks as old file, included binary blob is
-diff, output to new blocks REPLACE = 2, // Output included binary blob to new
-blocks REPLACE_BZ = 3 // Bunzip binary blob into new blocks } uint64
-blob_offset; // if present, the offset in the update image of the binary blob
-for this file uint64 blob_length; // if present, the length of the binary blob
-message extent { uint64 offset; // in blocksize uint64 length; // in blocksize }
-repeated extent input_extents; repeated extent output_extents; }
-repeated InstallOperation install_operations;
-}
-
-To generate a delta update, we iterate over each regular file on the new
-filesystem. We get an ordered list of all datablocks in the file, then store
-those in a File struct:
-struct Extent {
-uint64 start;
-uint64 length;
-}
-struct File {
-string path; // path within the filesystem
-vector&lt;Extent&gt; dst_extents; // ordered list of all extents on the new
-filesystem
-vector&lt;Extent&gt; src_extents; // Applies only for COPY and BSDIFF
-enum CompressionType; // one of: COPY, BSDIFF, REPLACE, REPLACE_BZ
-}
-
-Note: eventually, each File object will be converted into an InstallOperation
-message in the protobuf.
-For each file, we look for the optimal way to compress it. If the file has
-changed, then we compare the sizes of the binary-diff, uncompressed, and bzip
-options, and we pick whichever yields the smallest file size.
-
-We then create a vertex in a graph for each File object. Alongside the graph, we
-also create a vector to represent each block in the install partition:
-struct Block {
-File\* reader;
-File\* writer;
-}
-vector&lt;Block&gt; blocks; // length is the size of the install partition
-
-We then go through each block in each File object. For each block, we set the
-reader and writer parameters of the blocks vector.
-
-Next, we iterate through the blocks array, and for each block with a different
-reader and writer (which are both non-null), we create an edge in the graph from
-the writer to the reader. An edge in the (directed) graph points to a file
-operation that must complete before the edge's source file operation starts.
-Thus, we are trying to ensure that if a block is both read and written by
-different file operations, the block is read before it's written. The edge
-represents blocks in the graph, so the edge's weight is the number of blocks.
-
-At this point, we are likely to have a graph with cycles. We must break the
-cycles. We find the cycles with Johnson's circuit finding agorithm
-([PDF](http://dutta.csc.ncsu.edu/csc791_spring07/wrap/circuits_johnson.pdf)) and
-Tarjan's strongly connected components agorithm. For each cycle, we find the
-lowest-weight edge and cut it\[2\]. We cut an edge as follows: create a new node
-that represents an operation of copying some extents to scratch space. We then
-make the edge's source node point to the new node. We also modify the cut edge's
-destination node to read from the scratch space rather than from the blocks
-represented by the edge we're cutting.
-
-Here's an example of cutting an edge to break a cycle. Operation A reads block 3
-to write block 4. Operation B reads block 4 to write block 10.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png">](/chromium-os/chromiumos-design-docs/autoupdate-details/cycle_break.png)
-
-Once the cycles are broken, we can use a topological sort to order all the
-nodes. Then we convert each node to an InstallOperation and add it to the
-Manifest structure. If the client were to download and install the Manifest at
-this point, all the blocks that contain filedata would be set correctly.
-However, we also need non-filedata blocks to be set correctly. To handle
-non-filedata blocks, we create a single final InstallOperation of type
-REPLACE_BZ which writes to all extents that don't contain filedata. The attached
-data blob contains the bzip2-compressed data to go into those blocks. In
-practice, this takes up about 2 megabytes compressed.
-
-## **Example**
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/autoupdate-details/example.png">](/chromium-os/chromiumos-design-docs/autoupdate-details/example.png)
-
-## **Streaming**
-
-Because the protobuf (which lists all operations) occurs at the beginning of the
-file, the update doesn't need to be saved to disk. It can be applied while
-streaming from the server.
-
-We do need to make sure that the update is signed by the OS vendor. We can begin
-to apply the update and not mark it bootable until after the delta update
-signature is verified.
-
-## **Alternatives considered**
-
-The solution presented here is not the only one we considered, but it is the
-only one we've found that gives the best compression ratio in practice. Other
-solutions considered were:
-
-* Delta-compress the entire partition
- Bsdiff can't delta-compress the entire partition because its memory
- requirements are too high. During patching, it needs enough memory to store
- the original and new files, which in our case could have been over 1
- gigabyte.
- However, another delta compression program, Xdelta, uses a sliding window.
- In practice, this resulted in poor compression. On a test corpus, the diff
- was hundreds of megabytes.
-
-* rdiff
- Rdiff works by storing only changed blocks in the delta file. It uses a
- sliding window so that blocks don't need to be aligned. When pointed at the
- testing corpus, an rdiff delta of the entire partition was 104M, well above
- the roughly 10M the proposed algorithm takes for the same corpus.
- In the future, we might consider using rdiff-style (that is, rsync-style)
- delta compression at the file level. We could drop that in alongside bsdiff
- in the future.
-
-## **Footnotes**
-
-\[1\] Some of these blocks contain file-data and some contain other data
-(metadata, for example). Since we are using ext4, which (at the time of writing)
-doesn't support fragments, we know that a block cannot contain file data for
-more than one file: a block either contains file data for one file or no files.
-\[2\] In our tests, with the greedy agorithm (cut an edge in each cycle as it's
-found), we cut about 28 MB worth of edges, which seems reasonable. Enumerating
-all cycles and cutting no edges, we found over 5,000,000,000,000,000 cycles, so
-it's absolutely infeasible to consider all cycles before making cuts. To cut
-cycles more efficiently, though, we might consider more than 1 cycle before
-making cuts (perhaps 1000 cycles or so). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/boot_design_diagram.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/boot_design_diagram.png.sha1
deleted file mode 100644
index d302a0ffa87..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/boot_design_diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e95c849dc9380e4584b82b6569fef249b2c43d8c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/index.md
deleted file mode 100644
index c925930a1a9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/boot-design/index.md
+++ /dev/null
@@ -1,1014 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: boot-design
-title: Chrome OS User-Land Boot Design
----
-
-[TOC]
-
-## Introduction
-
-This document gives an overview of the design of user-land boot processes for
-Chrome OS based systems. It covers what happens after /sbin/init first starts
-execution, until all services in the system are ready.
-
-Chrome OS Core uses
-[Upstart](http://www.google.com/url?q=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FUpstart&sa=D&sntz=1&usg=AFQjCNEuUVRg10UCp5SZDMxMYm7uXUDFrQ)
-for its /sbin/init package. Readers of this document should have some basic
-familiarity with Upstart concepts, such as the syntax of [job configuration
-files](http://manpages.ubuntu.com/manpages/trusty/man5/init.5.html),
-and Upstart events, such as
-[starting](http://manpages.ubuntu.com/manpages/trusty/man7/starting.7.html)
-and
-[started](http://manpages.ubuntu.com/manpages/trusty/man7/started.7.html).
-Readers should also have some understanding of Linux file system management
-concepts, like
-[mounting](http://www.google.com/url?q=http%3A%2F%2Flinux.die.net%2Fman%2F8%2Fmount&sa=D&sntz=1&usg=AFQjCNHWgzSgniJkKUaQX0F6aoV6tub_Zw)
-and
-[creating](http://www.google.com/url?q=http%3A%2F%2Flinux.die.net%2Fman%2F8%2Fmkfs&sa=D&sntz=1&usg=AFQjCNHT-LvbDmluahoYo1skfkb28btuiA)
-file systems.
-
-If you want to go deeper and read the source code, you’ll need some
-understanding of shell programming. If you want to understand the initialization
-of an individual package, you’ll need to be familiar with that package’s basic
-operations. Neither of these topics is covered in this document.
-
-## Summary of Boot Flow
-
-### Phases of Boot
-
-*Boot est omnis divisa in partes tres.*
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/boot-design/boot_design_diagram.png">](/chromium-os/chromiumos-design-docs/boot-design/boot_design_diagram.png)
-
-The diagram above shows an outline of the Chrome OS Core boot flow. Boot divides
-into three sequential phases with four publicly defined Upstart events:
-
-<table>
-<tr>
-Upstart Event(s) Phase Description </tr>
-<tr>
-
-<td>startup</td>
-
-<td><a href="#h.zhrd95efyszv">Basic Services</a></td>
-
-<td>Initialization of basic services needed by the rest of the system.</td>
-
-</tr>
-<tr>
-
-<td>started boot-services</td>
-
-<td><a href="#h.lpny9tz0qmud">System Application</a></td>
-
-<td>Initialization of the system application and other services critical to the product’s UX</td>
-
-</tr>
-<tr>
-
-<td>started system-services</td>
-
-<td>started failsafe</td>
-
-<td><a href="#h.nm45bjel265c">System Services</a></td>
-
-<td>Initialization of all other services. The failsafe job is guaranteed to start even if the system application fails.</td>
-
-</tr>
-</table>
-
-### Basic Services Startup
-
-“Basic services” are the indispensable services required by the system
-application and the rest of the system. Most services cannot operate until these
-basic services are running normally.
-
-At the end of basic services startup (that is, when Upstart emits started
-boot-services), the following services are guaranteed available:
-
-* A file system generally conforming to the [Linux
- FHS](http://www.google.com/url?q=http%3A%2F%2Fwww.pathname.com%2Ffhs%2F&sa=D&sntz=1&usg=AFQjCNHWdZjRwe5FA0JKIi0EVckcCzGvaQ).
-* A logging service compatible with rsyslogd.
-* Device hotplug detection. User input devices or other devices
- necessary to the system application will be detected, with modules
- loaded. Detection of devices deemed non-critical may be delayed
- until after the system application starts.
-* dbus-daemon.
-
-Note that jobs that run during this phase must by their nature work in an
-environment where the services above may not be available. At the beginning of
-this phase, there is no guarantee of writable storage; jobs cannot log messages,
-write any files, or read files outside of the root filesystem. Additionally,
-device availability is not guaranteed in all cases; devices may not be
-initialized, and their drivers may not even be loaded.
-
-### System Application Startup
-
-Chrome OS Core is predicated on the existence of a single, dedicated application
-that is central to system startup. For Chrome OS, that application is the Chrome
-browser. The Chrome OS sources are structured to allow a platform to choose to
-use a different system application.
-
-The system application starts in parallel with various critical services.
-Typically, “critical” means that the system application expects the service to
-be present, or that the user would perceive the system as not functional without
-it. For example, in Chrome OS these services include:
-
-* A network.
-* The cryptohome daemon.
-* System power management.
-
-The system application receives special treatment in the boot flow. The
-application is responsible for emitting the event which starts the boot-complete
-job, which allows system services startup to begin. The system application is
-responsible for this for two reasons:
-
-* Delaying non-critical services allows the system application to
- start faster.
-* If the application fails during startup, the absence of running
- system services can be used to detect the failure.
-
-For Chrome OS, boot-complete starts when the Chrome browser has displayed the
-initial login screen.
-
-### System Services Startup
-
-This phase of boot includes anything not required in the earlier phases of boot.
-Generally, all jobs in this phase run in parallel. Because the system is
-considered already booted, this phase is not performance critical.
-
-After the started system-services event, services can rely on the following:
-
-* All services required after started boot-services are available.
-* The udev events for all devices that were present at boot have been
- processed.
-* The system application is available.
-
-By design, system services only start if the system application announces its
-successful initialization. For most services, this is sufficient: without a
-system application, the system is in a failed state and many services have no
-useful purpose. However some services may require that they start eventually,
-even if the system as a whole has failed. To support this requirement, a service
-can depend on the started failsafe event. After started boot-services, the
-failsafe-delay job starts a 30 second timer. The started failsafe event occurs
-at the earlier of started system-services or the expiration of the timer.
-
-Failsafe jobs are commonly used in test and development images for services
-necessary to debug or recover from failures. Some examples:
-
-* The openssh-server job, which allows logging in via ssh.
-* The udev-trigger job, which can sometimes be needed to detect and
- configure a network device.
-
-## Filesystem Initialization and Layout
-
-### Creating the Stateful File System (the chromeos_startup script)
-
-At startup, there is no writable file system storage available. During basic
-services startup, the script chromeos_startup is responsible for mounting file
-systems, and creating the basic directory hierarchy. The script is invoked from
-the startup job, which starts with the startup event emitted by /sbin/init at
-the start of the userland boot process.
-
-The script creates missing directories and mount points as necessary. This is
-done to support re-creating the filesystem after [stateful
-wipe](#h.no2bd2qbh52h), and also to protect the filesystem from inadvertent
-damage. Below is a list of the principle directories, listed in the order
-they’re processed.
-
-* /tmp - mounted as a tmpfs filesystem
-* /sys/kernel/debug - mounted as a debugfs filesystem.
-* /mnt/stateful_partition - mounted as an ext4 file system from GPT
- partition #1 (but for factory images, a tmpfs file system is used
- instead).
-* /home and its subdirectories - created as necessary; /home itself is
- a bind mount on /mnt/stateful_partition/home
-* /var and /home/chronos - mounted as described below under [Encrypted
- Stateful](#h.zdlxdrpbjmx9).
-* Subdirectories of /var - created as called for by the Linux FHS.
-* /usr/local - This directory is only mounted for developer and test
- systems. The directory is a bind mount over
- /mnt/stateful_partition/dev_image.
-
-### Encrypted Stateful
-
-As a security measure to protect private data, the portions of the stateful
-partition under /var and /home/chronos are mounted from an encrypted blob stored
-in the stateful partition. The encrypted storage is kept in
-/mnt/stateful_partition/encrypted. Mounting and unmounting the encrypted data is
-handled by the mount-encrypted command.
-
-Not all Chrome OS Core platforms use this feature: The feature requires a TPM to
-be effective. Moreover, the feature presupposes some specific privacy
-requirements. For Chrome OS, these requirements apply; they may not be
-applicable on all platforms. When the feature is not used, /var and
-/home/chronos are simple bind mounts.
-
-## Special Boot Flows
-
-Chrome OS Core supports a number of special boot flows, many of which are
-designed to handle system behaviors across multiple boots. This includes special
-cases for installation, recovery, and update.
-
-### Boot Alert Messages
-
-Some special flows involve presenting simple messages to the user prior during
-basic services startup. All such flows are detected and handled from
-chromeos_startup. The flows involve one of two use cases:
-
-* During [stateful wipe](#h.no2bd2qbh52h), a message specific to the
- specific wipe use case will be presented.
-* From time to time, an update may contain new firmware for the
- device. These updates must be performed at the start of the first
- boot with the new update.
-
-Because these messages are presented during basi services startup, a special
-script called chromeos-boot-alert is used to accommodate the restricted
-operating environment:
-
-* The X server is not running. The script uses ply-image to write
- directly to the frame buffer.
-* The chromeos-boot-alert script must wait for the boot splash screen
- animation to complete in order to guarantee exclusive access to the
- frame buffer.
-* The script must select a localized message text based on the user’s
- default locale.
-
-### Stateful Wipe (a.k.a. “Powerwash”)
-
-In certain boot cases, chromeos_startup must erase and re-create the stateful
-partition. The script triggers stateful wipe for one of three conditions:
-
-* The stateful partition failed to mount, or a bind mount on the
- stateful partition failed.
-* Wipe requested at the previous shutdown. The script will wipe the
- stateful partition if a file named factory_install_reset is present
- in the root of the stateful filesystem at boot time. This method is
- used for two use cases:
- * Factory wipe. At the end of the manufacturing process, the
- device wipes the stateful partition in preparation for boxing
- and shipment.
- * Power wash. The user can request a wipe for purposes of
- restoring it to a clean state.
-* Wipe after changing from dev mode to verified mode, or vice versa. A
- file named .developer_mode in the root of the stateful partition
- flags whether the system was previously in dev mode:
- * If the file is absent and we’re currently in dev mode, we
- trigger a wipe for the verified-to-dev mode switch.
- * If the file is present and we’re currently in verified mode, we
- trigger a wipe for the dev-to-verified mode switch.
-
-Principally, wiping the stateful partition means re-creating an empty filesystem
-using mkfs. Prior to creating the file system, the wipe procedure will also
-erase data in the partition in order to prevent leaking any private data that
-was present prior to the wipe.
-
-If the wipe procedure is performed while in dev mode, the .developer_mode file
-will be created after the wipe. This marks that the system has successfully
-wiped stateful after the conversion to dev mode.
-
-After the wipe procedure is complete, the system reboots; on reboot the system
-will [rebuild directories and mount points](#h.z4jhloholo6z) in the stateful
-file system.
-
-## Interactions with Install, Recovery, and Update
-
-After new software is installed by chromeos-install (including device recovery),
-or automatic update, a reboot is necessary for the new software to take effect.
-The first reboot after installing new software triggers special handling,
-depending on the specific installation use case.
-
-### Rollback Protection After Update
-
-If a catastrophic system failure manifests immediately after an automatic
-update, Chrome OS Core can detect the failure and roll back to the previously
-installed software. The mechanism relies on a three-way interaction with the
-update_engine service, the firmware, and the system application.
-
-Each kernel GPT partition on the boot disk contains three special attributes
-flags, which the firmware uses to select which kernel to boot. The flags are
-designated “priority”, “successful”, and “tries”. The firmware selects the
-kernel based on these flags; the full rules are described in the [design
-document for the disk
-format](http://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format).
-The update_engine service updates these flags with specific values after
-applying an update, and again with different values after the system boots
-without failure.
-
-After update_engine has finished downloading and installed a new image, the
-update’s post-install phase marks the GPT flags for the new kernel to have the
-highest priority for boot, with “tries” set to 5, and “successful” set to 0. In
-this state, the partition will be selected by the firmware as the first kernel
-to boot.
-
-On each boot, the firmware decrements the “tries” setting for the new kernel in
-the GPT. If “tries” is decremented to 0 and “successful” is never set to 1, the
-firmware will roll back to the previous working software. To prevent the
-rollback, the system must mark the kernel as good by setting the “tries” count
-to 0 and the “successful” flag to 1 sometime after booting.
-
-Chrome OS Core does not automatically mark the kernel good immediately after
-boot. Instead, when the update_engine service starts, it sets a 45 second timer.
-When the timer expires, update_engine invokes a script called
-chromeos-setgoodkernel. That script marks the kernel as good, after which
-rollback is no longer possible.
-
-The update_engine service depends on started system-services. Consequently,
-rollback will be triggered if a newly updated image consistently fails in any of
-the following ways:
-
-* The kernel panics before chromeos-setgoodkernel can run.
-* The system hangs before chromeos-setgoodkernel can run.
-* The system application crashes before triggering boot-complete.
-
-Note that the user will typically have to forcibly power cycle a unit multiple
-times in any failure case other than a kernel panic.
-
-A consequence of this design is that if the system application is crashing at
-startup, the system cannot receive new updates. This is a deliberate design
-choice: It is not a bug. The rationale is that if a system is failing in this
-way, rollback is by far the most preferable way to recover. Waiting for an
-update is unlikely to be useful in most cases:
-
-* If users wait for an update and the next update contains the same
- bug, that new update will have overwritten the working previous
- version. In this case, rollback (by far the most preferable option)
- will be foreclosed.
-* It could be days before a problem of this sort can be recognized,
- diagnosed, fixed, and released. Many users will be unwilling to wait
- so long.
-* Even if users are willing to wait, most of them will not be easily
- able to determine when a fixed update is available.
-* Recovery is likely to be faster than waiting for an update.
-
-### Installation and Recovery
-
-The chromeos-install script can be used to install an image from scratch on a
-device. The end-user [recovery
-procedure](https://www.google.com/chromeos/recovery) is a wrapper around this
-script. Additionally, developers can run the script manually when they boot a
-custom image from USB in dev mode. Although the UX in the two cases is quite
-different, the system state after installation in either case is
-indistinguishable.
-
-The installation process includes creating a stateful partition file system,
-similar to the process for stateful wipe. As with stateful wipe, installation is
-responsible for creating the .developer_mode file when installing in dev mode.
-Also as with stateful wipe, after rebooting the system will [rebuild directories
-and mount points](#h.z4jhloholo6z) in the stateful file system.
-
-### Stateful Update and Install
-
-For developer and test builds of Chrome OS, substantial portions of the software
-are installed in /usr/local, a [bind mount](#h.gfhw9kpet5ar) over
-/mnt/stateful_partition/dev_image. This content is not delivered via the
-autoupdate mechanism. Instead, a script called stateful_update is used to update
-it separately.
-
-The stateful update procedure operates in two stages:
-
-* The script downloads a tar file, and extracts new content for
- /usr/local and /var into temporary locations in the stateful
- partition.
-* After reboot, chromeos_startup replaces the old directories with the
- new ones prior to mounting /usr/local.
-
-## Chrome OS - Starting Chrome (the “ui” Job)
-
-The Chrome browser is the system application for Chrome OS. The ui job is
-responsible for starting, managing, and restarting the Chrome OS session_manager
-process. The session_manager process in turn is responsible for managing the
-Chrome browser process.
-
-### Job Startup Flow
-
-The ui job is responsible for starting session_manager. That program is
-responsible for the following:
-
-* Starting the X server process in the background.
-* Determining Chrome command-line options.
-* Initializing environment variables for the Chrome browser process.
-* Initializing the system resources (e.g. directories, files, cgroups)
- needed by the Chrome browser.
-* Starting the Chrome browser.
-
-Once Chrome has successfully displayed the initial startup screen, it kicks off
-the following sequence of events:
-
-* Chrome calls session_manager’s EmitLoginPromptVisible interface over
- D-bus.
-* session_manager emits the login-prompt-visible Upstart event.
-
-* The login-prompt-visible event triggers the boot-complete job.
-
-### Handling Chrome Shutdown, Crashes, and Restarts
-
-When a user logs out of Chrome, the browser process terminates normally. In
-turn, session_manager terminates, which ends the ui job. In normal operation,
-the ui job must respawn when this happens. However, in the event of a Chrome
-crash, the automatic respawn logic is more complex than Upstart’s standard
-respawn behavior. Instead, whenever the ui job stops, a separate ui-respawn job
-determines what to do according to these rules:
-
-* If the termination was for system shutdown or reboot, don’t respawn
- and allow the shutdown to proceed.
-* If the termination was for a simple log out, respawn the browser
- unconditionally.
-* For most abnormal termination cases, try respawning the browser.
-* If an abnormal termination was because session_manager tried to
- restart Chrome too many times, try rebooting the system.
-
-Special handling for abnormal termination is subject to rate limitations:
-
-* Respawn is limited to no more than 6 times in one minute.
-* Rebooting is only attempted if the particular error termination
- happens more than once in 3 minutes; otherwise it just respawns.
-* Reboot is limited to no more than once every 9 minutes.
-
-If a failure isn’t handled by respawning or rebooting, the ui job stops, but the
-system stays up. The user can manually force power-off, if desired.
-
-### Upstart Events During Chrome Startup
-
-Below is a list of various Upstart events triggered by Chrome browser startup,
-and when they happen:
-
-<table>
-<tr>
-Event When it happens </tr>
-<tr>
-
-<td>starting ui</td>
-
-<td>This first occurs at boot after started boot-services. After boot, the event will re-occur every time after a user logs out, or any time Chrome restarts after a crash.</td>
-
-</tr>
-<tr>
-
-<td>x-started</td>
-
-<td>session_manager emits this event after the X server finishes initializing. This happens after every Chrome restart.</td>
-
-</tr>
-<tr>
-
-<td>login-prompt-visible</td>
-
-<td>session_manager emits this event after Chrome announces that has finished displaying its login screen. This happens after every Chrome restart.</td>
-
-</tr>
-<tr>
-
-<td>started boot-complete</td>
-
-<td>This occurs the first time that login-prompt-visible is emitted after boot.</td>
-
-</tr>
-<tr>
-
-<td>start-user-session</td>
-
-<td>session_manager emits this event after Chrome announces the start of a user session.</td>
-
-</tr>
-<tr>
-
-<td>stopping ui</td>
-
-<td>This occurs whenever a user logs out, if the Chrome browser crashes, or when the system is shutting down.</td>
-
-</tr>
-</table>
-
-## Performance Considerations
-
-### The Boot Critical Path
-
-Each phase of boot is dominated by one long running step. These steps must run
-sequentially, so together they make up a critical path. For Chrome OS, these are
-the longest running steps in the critical path:
-
-chromeos_startup
-
-X server startup until session_manager emits the x-started event.
-
-Chrome browser startup, until login-prompt-visible
-
-Adding time directly to the critical path will result in delaying boot by an
-equivalent time. Whenever possible, initialization should run in parallel with
-the critical path.
-
-### ureadahead
-
-System startup time is heavily influenced by the wait time required to read data
-that isn’t yet in the file buffer cache. The
-[ureadahead](http://www.google.com/url?q=http%3A%2F%2Fmanpages.ubuntu.com%2Fmanpages%2Fprecise%2Fman8%2Fureadahead.8.html&sa=D&sntz=1&usg=AFQjCNGq-lkbAxTEkiTp_Yc2moX8IPPY5g)
-program can improve boot time by requesting data in advance of when it’s needed,
-so that boot spends less time waiting for data from the boot device. Some key
-facts about ureadahead:
-
-* Platforms that want to use this feature must depend on the
- sys-apps/ureadahead package.
-* Platforms that want to use ureadahead must configure some specific
- kernel tracing features.
-* The ureadahead program starts execution when chromeos_startup
- finishes, and terminates when boot-complete starts. So, ureadahead
- doesn’t provide any improvement after the system application has
- finished starting.
-* Auto-update removes the ureadahead pack file during its post-install
- phase. This means that the first boot after an update will be slower
- because ureadahead must regenerate the pack file.
-
-### Impact of Cached Data
-
-During boot, various processes may cache data under /var, in order to make the
-next time’s startup faster. However, from time to time these cached data may
-need to be invalidated (i.e. removed), resulting in a one-time slower boot.
-Below is a list of known caches affecting boot time, and a summary of what
-causes them to be invalidated.
-
-* The [ureadahead](#h.4nqngmn6a9r9) pack files - these live under
- /var/lib/ureadahead. The auto-update post-install phase invalidates
- the data whenever a new update is ready.
-* The xkb cache files - these live under /var/lib/xkb. They’re created
- as needed during X server startup. They’re removed on the first boot
- after any update; this happens in src/install-completed.conf in
- src/platform/installer.
-* The VPD cache - this collection of files is created by dump_vpd_logs
- during basic services startup; see the sources under
- src/platform/vpd for more details. The cached data comes from
- read-only firmware and never needs to be invalidated. However, after
- powerwash, the read-only firmware must be re-read, and this can be
- expensive on some platforms.
-
-### Measuring Performance
-
-There’s a [web
-site](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/measuring-boot-time-performance)
-for this.
-
-Boot performance is measured by capturing timestamps at specific moments during
-the boot flow. These are some of the key events reported by the tools:
-
-<table>
-<tr>
-bootstat name keyval name Meaning </tr>
-<tr>
-
-<td>pre-startup</td>
-
-<td>seconds_kernel_to_startup</td>
-
-<td>Start of chromeos_startup</td>
-
-</tr>
-<tr>
-
-<td>post-startup</td>
-
-<td>seconds_kernel_to_startup_done</td>
-
-<td>End of chromeos_startup</td>
-
-</tr>
-<tr>
-
-<td>x-started</td>
-
-<td>seconds_kernel_to_x_started</td>
-
-<td>X server startup complete</td>
-
-</tr>
-<tr>
-
-<td>chrome-exec</td>
-
-<td>seconds_kernel_to_chrome_exec</td>
-
-<td>Session manager fork/exec of the Chrome browser process</td>
-
-</tr>
-<tr>
-
-<td>boot-complete</td>
-
-<td>seconds_kernel_to_login</td>
-
-<td>Start of the boot-complete Upstart job</td>
-
-</tr>
-</table>
-
-All of these events are part of the critical path.
-
-#### Kernel Performance Accounting Anomalies
-
-For kernel startup, capturing a time stamp at the exact moment of some key
-transitions is inconvenient. The result is that certain events that ought to be
-ascribed to one phase (e.g. kernel startup) are ascribed to the adjacent phase:
-
-* Kernel startup begins with decompression of the kernel, and starting
- kernel time accounting. This work takes a few hundred milliseconds,
- the bulk which is spent on decompression. This time isn’t recorded
- as part of the seconds_kernel_to_login metric; to observe this time,
- you have to look at firmware performance numbers.
-* Kernel initialization is complete when it hands control to
- /sbin/init. However, the userland boot flow can’t mark the start
- time until chromeos_startup has mounted /tmp and /sys/kernel/debug.
- That work requires a few dozen milliseconds, and is attributed to
- kernel startup time.
-
-### What Matters, What Doesn’t Matter
-
-Not every change to the boot flow matters to boot performance. Changes may
-happen to flows that run in parallel with the critical path without slowing it
-down. Even if a change measurably affects boot time, software engineering
-considerations such as maintainability or readability may matter more than
-performance. Below are guidelines for evaluating whether a change might impact
-boot time, and whether the impact is truly significant.
-
-#### The Critical Path Matters
-
-[As noted](#h.kb7w2ickc8bc), time added in sequence with the critical path is
-time added directly to boot time. When work executes in parallel with the
-critical path, the boot time impact will be much smaller. In the best case, work
-in parallel will consume resources that would otherwise be idle, meaning boot
-time is unaffected. Even if jobs in parallel compete for resources with the
-critical path, the impact is typically smaller than the total resource
-requirement of the extra work.
-
-#### Evaluating Significance
-
-Performance tuning frequently requires trade-offs between a simpler, more
-maintainable design, and the best possible performance. Moreover, even when
-tuning doesn’t have a maintenance impact, the cost to make and test a code
-change may exceed the benefit of the performance improvement. Finally, the boot
-time numbers tend to very noisy; small changes are likely not to be
-statistically significant.
-
-Use these rules when evaluating what trade-offs may be necessary for
-performance:
-
-* Unless you’re making firmware changes (or certain kernel changes),
- only changes to the seconds_kernel_to_login (a.k.a. boot-complete)
- event time matter. The intermediate events are there to diagnose
- problems, not as performance metrics.
-* Changes less than 100ms (.1s) are too small to matter to a typical
- human and too small to be measured reliably. Below this threshold,
- the only considerations are the basic software engineering
- considerations of maintainable, easy-to-understood source code.
-* Changes more than 250ms (.25s) are significant. Above this
- threshold, going out of your way to improve performance is
- justified.
-* In between these two thresholds, exercise careful judgment.
-
-Note that these guidelines apply equally to improvements and regressions: Just
-as 50 ms slower isn’t a regression, 50 ms faster isn’t an improvement.
-
-## Design Principles
-
-The principles in this section are meant to improve the maintainability of
-packages that deliver Upstart jobs.
-
-### Put Jobs in the Right Package
-
-An Upstart job should ideally be associated with a specific service, live in the
-source code repository for that service, and be delivered in the same package as
-the service. This has multiple advantages:
-
-* Not all services are required on all platforms/products. Keeping the
- job with the service means the job won’t be present in systems where
- it doesn’t belong.
-* If the service becomes obsolete, the job will go away when the
- service’s package is deleted.
-* The service and the job frequently change together. Keeping them
- together reduces the number of repositories you have to change.
-* Having the job live close to the program it starts makes it easier
- to read and understand the service as a whole; you don’t have to
- consult two source repositories at once.
-
-### Depend on the Public Events
-
-For Chrome OS Core, there are four public Upstart events with well-defined,
-stable semantics. In order of preference, from most to least preferred, they are
-started system-services, started failsafe, started boot-services, and startup. A
-package that delivers an Upstart job should depend on the most preferred public
-job that will meet its requirements.
-
-Note that a job should depend on only one of the four events; depending on more
-than one event is redundant:
-
-* started system-services implies started failsafe.
-* started failsafe implies started boot-services.
-
-Other than the four public events, Upstart jobs and events generated by the
-chromeos-base/chromeos-init package should be considered private to the package,
-and subject to change at any time. If your job depends on a private event,
-changes to chromeos-init could cause your job to start at the wrong time, or not
-start at all.
-
-If your package depends on chromeos-base/chromeos-login, it can also depend on
-the standard [Chrome startup events](#h.bm3ca2v09tf2).
-
-If your package delivers more than one job, it is safe and reasonable for some
-jobs to depend on others in the same package instead of depending on the public
-events.
-
-Where possible, jobs should not depend jobs delivered by other packages, because
-the inter-package coupling can create maintenance hazards. However, if two
-packages are already coupled for sound technical reasons, it’s reasonable for
-one of the package to depend on the other’s Upstart jobs. For examples, look at
-the tree of jobs for starting the network (see init/shill.conf in
-src/platform/shill) or cryptohome services (see init/cryptohomed.conf in
-src/platform/cryptohome).
-
-### Depend on Jobs, not Events
-
-Generally, start and stop conditions for jobs should be based on job events like
-started and stopped, rather than starting or stopping jobs with initctl emit,
-start, or stop. Depending on a job makes it easier to find the sources of
-events, and trace their flow through the source code.
-
-If you must use initctl emit, start, or stop, follow these guidelines to help
-readability:
-
-* Comments in the source where initctl emit is called should name what
- jobs are affected, and how.
-* In jobs affected by initctl emit, start, or stop, there should be
- comments detailing the callers that do the work.
-* There should be comments at the call source and/or job destination
- that explain why the problem has to be solved this way.
-* Both the caller and the affected job should be in the same source
- package.
-
-### Create Your Own Storage
-
-If your service requires writable storage (e.g. a directory in /var/lib), your
-service is responsible for creating the files and directories. Typically, this
-can happen in a pre-start script in the Upstart job for the service. Work to
-create this storage should belong to the package that owns the service. The work
-should not be handled in chromeos_startup, or an Upstart job not related to your
-package. The work must happen at boot: In general, there is no way to initialize
-writable storage at build time.
-
-The objective is that if your package isn’t part of a distribution, it shouldn’t
-create vestiges in the file systems of distributions that don’t need it.
-
-Note that packages can and should rely on directories specified in the Linux
-FHS. If a location specified in the standard in the standard is missing, code to
-create it should be added to chromeos_startup.
-
-### Runtime Resource Limits
-
-Every service should limit their runtime resource usage whenever possible.
-Limits are important to help prevent memory or resource leaks in services from
-freezing the system. Upstart has directives to control these.
-
-Here are the important ones:
-
-* `oom score`: All init scripts need to define an [OOM
- score](http://upstart.ubuntu.com/cookbook/#oom-score). See the [CrOS
- OOM
- document](/chromium-os/chromiumos-design-docs/out-of-memory-handling)
- to pick the score.
-* `limit as`: Set absolute memory limits. Don't try to pick a tight
- limit -- this is meant to catch processes that have run out of
- control, so setting a limit that is 5x-10x what is normal is OK.
-
-## Navigating the Implementation
-
-### Source Code and ebuilds
-
-The table below shows the package names and source code repository paths for key
-behaviors described in this document.
-
-<table>
-<tr>
-Package Source Repo Description </tr>
-<tr>
-<td> chromeos-base/chromeos-init </td>
-<td> src/platform2/init </td>
-<td> <a href="#h.n56t7kdl7ejr">Basic boot flow</a> </td>
-</tr>
-<tr>
-<td> chromeos-base/chromeos-login </td>
-<td> src/platform2/login_manager </td>
-<td> <a href="#h.vmi3dv1ygkj">Chrome startup</a> </td>
-</tr>
-<tr>
-<td> chromeos-base/update_engine </td>
-<td> src/platform/update_engine </td>
-<td> <a href="#h.pgddr78r6iyt">Rollback support</a> </td>
-</tr>
-<tr>
-<td> chromeos-base/chromeos-installer </td>
-<td> src/platform2/installer </td>
-<td> <a href="#h.xu4oy15jvst">Install/Recovery</a> </td>
-</tr>
-<tr>
-<td> chromeos-base/chromeos-assets </td>
-<td> src/platform/assets </td>
-<td> <a href="#h.r32c28uwsj84">Boot message texts</a> </td>
-</tr>
-</table>
-
-### Simple Upstart Job Recipes
-
-#### Simple one-time script
-
-You need to run a short script once after boot. You don’t care about running the
-command if the system application fails at startup.
-
-Pattern your job after this:
-
-> `start on started system-services`
-
-> ` script`
-
-> ` # … initialization commands ...`
-
-> ` end script`
-
-#### Simple daemon
-
-You need a daemon to start after boot. If the daemon dies it should restart. The
-daemon stores working data in a directory under /var/lib.
-
-Pattern your job after this:
-
-> `start on started system-services`
-
-> ` stop on stopping system-services`
-
-> ` respawn`
-
-> ` pre-start script`
-
-> ` mkdir -p /var/lib/my-daemon`
-
-> ` end script`
-
-> ` exec my-daemon`
-
-Many daemons require expect fork or expect daemon in addition to respawn.
-Consult your friendly neighborhood Upstart guru for advice.
-
-#### Failsafe service
-
-You have a service that’s needed for administrative or debug access to your
-device. Your service can start after the system application, so that it won’t
-slow down boot. However, if the system applications fails, your service is vital
-to connecting to the failed unit in order to repair or debug it.
-
-Pattern your job after this:
-
-> `start on started failsafe`
-
-> `stop on stopping failsafe`
-
-> `respawn`
-
-> `exec my-important-administrative-daemon`
-
-#### Service Required by the System Application
-
-When your system application starts, it connects to a service provided by a
-separate daemon that must be started in its own job. The system application
-can’t finish initialization without this second service, and will wait until
-it’s ready.
-
-Pattern your job after this:
-
-> `start on started boot-services`
-> `stop on stopping boot-services`
-> `respawn`
-> `exec my-important-daemon`
-
-#### Initialization That Blocks Chrome Startup
-
-You have system-wide initialization that must finish before Chrome can start. No
-other services have a dependency.
-
-Pattern your job after this:
-
-> `start on starting ui`
-
-> `task`
-
-> `script`
-
-> ` # perform your important initialization here`
-
-> `end script`
-
-#### File System Initialization Required by Multiple Services
-
-You have a service that provides a shared resource in the file system (e.g. a
-directory, a named FIFO, etc.). You need to make sure that the file system
-resource is created before any service depending on started boot-services.
-
-Pattern your job after this:
-
-> start on starting boot-services
-
-> `task`
-
-> `script`
-
-> ` create-my-important-resource`
-
-> `end script`
-
-## FAQ
-
-### Creating a New Chrome OS Core Platform
-
-Q: What Upstart jobs must my platform supply?
-
-A: The platform must supply a boot-complete job conforming to certain basic
-requirements.
-
-Q: What are the requirements for the boot-complete job?
-
-A: The job must have a start stanza that will start once the system application
-is up and providing service. Your platform can define “providing service” any
-way it wants, but generally the job shouldn’t start until these criteria are
-met:
-
-* Performance critical startup is complete.
-* An ordinary user will perceive the device as fully functional.
-
-For reference, on Chrome OS, after stripping out comments and boilerplate, the
-boot-complete job consists of just this one line:
-
-start on login-prompt-visible
-
-Q: How do I provide a boot-complete.conf for my board?
-
-A: boot-complete.conf is provided by virtual/chromeos-bootcomplete. You can
-override this virtual in your board overlay.
-
-Q: How do I disable/enable the [encrypted stateful](#h.y4vr1c4hxx6o) feature?
-
-A: The feature is enabled by default. To disable the feature, set
-USE=”-encrypted_stateful”.
-
-### Adding a New Service
-
-Q: What repository should hold my Upstart job?
-
-A: Ideally, the job should live in the source repository for the service it
-starts. If there’s no such repository (e.g. your service is an upstream
-package), create a new package to install the job. For an example, see the
-chromeos-base/openssh-server-init package.
-
-Q: When should I use start on started system-services?
-
-A: This is the preferred way to start any job that should run once at boot time.
-However, if your job is important to starting the system application, you may
-need to depend on boot-services instead.
-
-Q: When should I use start on started failsafe?
-
-A: Use this for a job that can start after the system application, but that must
-run eventually even if the system application never starts. This start condition
-is most useful for services that are needed to debug or recover a failed unit.
-
-Q: When should I use start on started boot-services?
-
-A: Use this when the job must start in parallel with the system application.
-This is typically required for one of these reasons:
-
-* The job is required before the system application can provide
- service, or
-* Until the job runs, the user may perceive the system as not
- functional.
-
-Note that by running in parallel with the system application, the job may slow
-down system boot.
-
-Q: Can my service just use start on startup?
-
-A: Most services should avoid doing this, because of the restrictions it
-imposes:
-
-* There is no writable storage: directories like /tmp, /home and /var
- will not be mounted.
-* System logging is not available; the only way to debug is to write
- messages to a TTY device.
-* Not all devices will be available under /dev; no udev rules for any
- devices will have run.
-
-## References
-
-Upstart reference: <http://upstart.ubuntu.com/cookbook/>
-
-The ureadahead man page:
-<http://manpages.ubuntu.com/manpages/precise/man8/ureadahead.8.html> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cbi-cros-board-info/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cbi-cros-board-info/index.md
deleted file mode 100644
index 59e46419809..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cbi-cros-board-info/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: cbi-cros-board-info
-title: 'CBI: CrOS Board Info'
----
-
-# This page has been moved to [here](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/design_docs/cros_board_info.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-battery-life-overview/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-battery-life-overview/index.md
deleted file mode 100644
index 20cd8870e2c..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-battery-life-overview/index.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: chrome-os-battery-life-overview
-title: Chrome OS Battery Life Overview
----
-
-We design Chromium OS with the philosophy that devices provide users “all-day
-battery life.” Because the notion of all-day battery life can be subject to
-interpretation, we use the philosophy to define a usage model for
-battery-powered devices. This model helps us define user expectations, and
-provide battery recommendations for Chromium OS devices.
-
-The Battery Usage Model
-
-We don’t have a say in how users use their device. Users can and will use their
-devices in diverse situations, with variable access to charging power. Moreover,
-as devices and their uses change, the power requirements for systems evolve. As
-such, Chromium OS provides tests and diagnostics which allow both users and
-device manufacturers to ensure that they can achieve our notion of all-day
-battery life.
-
-Active use and standby-time are different. While some devices, notably mobile
-phones, blend battery life usage between active and standby states, we believe
-these states are separate, important elements of all-day battery life. We define
-active use as situations in which a user is “working away from the plug.” We
-define standby time as situations in which the user is “idle away from the
-plug.” We expect a user’s typical day to include periods of both, but that the
-blend of states may vary day to day.
-
-Typical active-use should leave reasonable standby available. Importantly,
-adhering to our notion of all-day battery life means that a user should be able
-to actively work for many hours and still have sufficient standby time to reach
-a power source and recharge the device. Our belief is that standby power
-consumption should be at least an order of magnitude less that active-use power
-consumption. Thus, if a device has been used for 80% of active-use time, the
-remaining 20% should translate into a substantial amount of standby time in
-which the device can be recharged without forced shutdown.
-
-Shutdown provides longevity beyond typical use. While a device is shutdown, it
-can conserve most of its battery life. While our notion of all-day battery life
-does not assume shutdowns, we believe that the fast-booting nature of Chromium
-OS should make it easy for users to strongly preserve battery life when they
-desire.
-
-A Typical Use Case
-
-Our philosophy, and its derived battery usage model, is well illustrated by an
-example. Consider a typical Chromium OS user, whose device achieves the average
-10 hours of active-use battery life. Our usage model expects that this user:
-
- Can use their device in active mode for an 8-hour workday, and have 20% of
- battery remaining.
-
- The remaining 20% of battery life should translate into more than a day of
- standby time; roughly 30 hours.
-
-Battery Recommendations
-
-Given the philosophy and usage model, Chromium OS recommends that device
-batteries be sized such that an average of 10 active hours can be achieved on
-the device before recharging. Thus, if a device consumes 4 Watts for each hour
-of active time, a 40 Watt-Hour battery is recommended. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-performance-overview/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-performance-overview/index.md
deleted file mode 100644
index 7207b1c32dd..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-performance-overview/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: chrome-os-performance-overview
-title: Chrome OS Performance Philosophy
----
-
-## Speed is core to Chrome OS, as it is to [Chrome](/developers/core-principles). Speed is one of the most compelling features of Chrome OS - we get out of the way as quickly as possible so users can be productive and enjoy their content. Beyond Chrome’s commitment to make the fastest browser, Chrome OS pays attention to the speed of all user interactions, ranging from I/O devices like the keyboard and screen, to connectivity components such as WiFi.
-
-We measure the speed of user interactions along various dimensions, with the
-goal that Chromebooks should always feel responsive. We ask ourselves questions
-like:
-
-How long does it take to boot the device?
-How quickly do websites load?
-
-Are the graphics smooth when browsing the web or playing games?
-
-Does the screen behave correctly when the device changes modes?
-
-Do performance improvements in Chrome manifest in Chrome OS?
-
-We collect these metrics for all Chromebooks over their entire supported
-lifecycle to ensure the user experience does not deteriorate. Every year, we
-review our performance targets and we often raise our bar. Many of our devices
-actually get faster over time, even as we add new features like Android apps. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-volume-keys/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-volume-keys/index.md
deleted file mode 100644
index 8caa1a361a3..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chrome-os-volume-keys/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: chrome-os-volume-keys
-title: Chrome OS Volume Keys
----
-
-**# **## Current, intended behavior (since mid-2011)****
-
-**When the user presses one of the three volume-related keys (Mute, Volume Down,
-or Volume Up), a bubble appears in the lower-right corner of the screen
-displaying the current volume level.**
-
-**<img alt="image" src="https://lh5.googleusercontent.com/Nm9_2BQJ5T3Sqt3rD6ZYejyox3OcpxsoA61mc8NM9Aug_19_i4bnXDmZtO3BA0uFIXMXfBkCoMVvpdheGIIxHjwZpUWz1wAp811TBxJ_Ry79bd1X6hQ" height=116px; width=330px;>**
-
-**Non-muted and ~60% of maximum level**
-
-**At the left, an icon shows whether the system is muted or not, and if not
-muted, a coarse approximation of the current volume level (via zero, one, or two
-sound waves emanating from a speaker). To the right of the icon, a toggle button
-displays the current muting status.**
-
-**<img alt="image" src="https://lh3.googleusercontent.com/aFZMhLBlyas-l9XSOCg8W-KMonwPhnf4J9pt0iK9MbVaBnlRANM0_gck1ZsDH9vLHZkoZ5xu842ZviGA84WVzhj5BuGU__9LWai_R9g5KekYmB6sNDs" height=116px; width=330px;>**
-
-**Muted with ~60% level saved**
-
-**Either the icon or the toggle button can be clicked to toggle the muting status. At the right side of the bubble, a horizontal slider displays the current volume level. If the system is muted, the slider is displayed in an inactive state; note that the previously-set volume level is still visible, though.**
-**The same controls are present in the larger bubble that is displayed when the
-user clicks the system / status tray in the lower-right corner of the screen:**
-
-**<img alt="image" src="https://lh4.googleusercontent.com/ibZ7w_Ljo-MURsOQhV0Dx-XZPpdDU5fLEKNKSOSLkh6BlyyiTvsk94XiNWQfLpVSpYLemRluuqywKIFvTKJDB_uUbLyl381r2Zby4kUUkkkpzSrdRJ8" height=362px; width=324px;>**
-**The volume keys’ current behavior was initially proposed in [chromium-os bug 13618](https://code.google.com/p/chromium-os/issues/detail?id=13618). Briefly,**
-
-**### When not muted:**
-
-**Mute: mutes instantly**
-**Volume Down: decreases the volume**
-**Volume Up: increases the volume**
-
-**### When muted:**
-
-**Mute: does nothing**
-**Volume Down: sets the saved volume to zero, keeping the system muted**
-**Volume Up: unmutes and restores saved volume (increasing it slightly if zero)**
-
-**## Objections**
-
-**### Many other operating systems, A/V equipment, etc. provide a “toggle mute” button instead.**
-
-**When in an environment where sound is undesirable (e.g. library, shared office, etc.), the user is guaranteed that pressing the Mute key will instantly mute the system; there is no risk of toggling sound back on if the system was already muted. If the user wants to set the volume to the lowest audible level, only three key-presses are needed (Mute, Volume Down, and then Volume Up).**
-
-**### But the user can just hold the Volume Down key if they want to make sure the volume is at 0%.**
-
-**This is a poor substitute; decreasing the volume from 100% to 0% takes more than a second and the user is unable to easily restore the original volume level later.**
-
-**### The toggle button between the icon and the slider is confusing (see e.g. [this bug](https://code.google.com/p/chromium/issues/detail?id=170935)).**
-
-**The button was originally labeled, but the label’s visual appearance was sub-optimal ([chromium bug 143426](https://code.google.com/p/chromium/issues/detail?id=143426)). Per [chromium bug 152070](https://code.google.com/p/chromium/issues/detail?id=152070), the unlabeled button will be merged into a more-meaningful icon (as tracked in [chromium bug 137947](https://code.google.com/p/chromium/issues/detail?id=137947)).** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-cgroups/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-cgroups/index.md
deleted file mode 100644
index 959a14eef38..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-cgroups/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: chromium-os-cgroups
-title: Chromium OS Cgroups
----
-
-All cgroups are optional, but highly-recommended and if present will be used by
-Chrome and Chrome OS
-
-top-level cgroups created by /etc/init/cgroups.conf
-
-* cpu - Uses CPU time accounting to set limits on certain tasks
- * chrome_renderers - Set by Chrome code in &lt;fixme&gt;
- * session_manager_container - set by session manager in
- &lt;fixme&gt;
- * update-engine - set by update-engine in &lt;fixme&gt;
-* freezer
- * group of threads which stop running when we suspend or resume
- * this limits the amount of work that happens at resume
- * done by &lt;fixme&gt;
-* devices
- * limits the devices available to a process
- * done by &lt;fixme&gt;
-* cpuacct
- * keeps track of resources consumed by a given group
-
-There are also cgroups which are board-specific.
-
-* cpuset
-
-For big.LITTLE systems with different types of CPU cores, we set up cpusets for
-background tasks called cpuset/chrome/non-urgent/ which will be pinned to little
-CPUs and another for performance-sensitive tasks called cpuset/chrome/urgent/
-
-It's up to Chrome to put the correct tasks (threads) into the {non-,}urgent
-group as appropriate. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/dco/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/dco/index.md
deleted file mode 100644
index 35406d7403a..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/dco/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/chromium-os-kernel
- - Kernel Design
-page_name: dco
-title: Documented Certificate of Ownership
----
-
-The DCO is the standard release for Linux kernel code, and is required to submit
-all Linux kernel code upstream, and hence to Google.
-
-> `By making a contribution to this project, I certify that: `
-> ` (a) The contribution was created in whole or in part by me and I have the
-> right to submit it under the open source license indicated in the file; or`
-> ` (b) The contribution is based upon previous work that, to the best of my
-> knowledge, is covered under an appropriate open source license and I have the
-> right under that license to submit that work with modifications, whether
-> created in whole or in part by me, under the same open source license (unless
-> I am permitted to submit under a different license), as indicated in the file;
-> or`
-> ` (c) The contribution was provided directly to me by some other person who
-> certified (a), (b) or (c) and I have not modified it; and`
-> ` (d) In the case of each of (a), (b), or (c), I understand and agree that
-> this project and the contribution are public and that a record of the
-> contribution (including all personal information I submit with it, including
-> my sign-off) is maintained indefinitely and may be redistributed consistent
-> with this project or the open source license indicated in the file.` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/index.md
deleted file mode 100644
index b231c75b413..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/index.md
+++ /dev/null
@@ -1,191 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: chromium-os-kernel
-title: Kernel Design
----
-
-[TOC]
-
-## Abstract
-
-This document outlines the overall design of the kernel, as it relates to
-Chromium OS.
-
-See also the [Frequently Asked Questions
-page](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/kernel_faq.md)
-for more day-to-day details.
-
-## Background
-
-Chromium OS uses the Linux Kernel. Historically we stayed on a 2.6.32
-Ubuntu-based for the first several releases, but have since then moved on to
-track the upstream mainline kernel directly, applying our changes for the
-features and stability we need on top of it.
-
-## Source code
-
-### Git repository
-
-The Chromium OS Linux kernel will be stored in a gerrit/git repository, hosted
-on an externally accessible website. All platforms will build from **one**
-single kernel source tree (though there will be multiple binary images).
-
-If necessary, we will create short-term private branches for specific vendor
-projects that involve pre-production hardware. These branches will be merged
-back into the main kernel as soon as possible, using one code review per CL so
-that all code in our master branch is either from upstream or code reviewed. The
-intent of these private branches is to enable code review and project status
-monitoring of code that cannot be publicly released yet, due to NDA. The intent
-is specifically **not** to use these branches to keep changes that are shipping
-to customers.
-
-Any code submitted should be done as one Git commit per logical change, with a
-good description. (See
-[Documentation/SubmittingPatches](/chromium-os/chromiumos-design-docs/chromium-os-kernel/submitting-patches)
-in the kernel tree.) We may create temporary public branches for the purpose of
-working together on code review and integration.
-
-### Licensing
-
-All Linux kernel code, from Google and from partners, must be released under
-GPLv2 and must be released under the [DCO (documented certificate of
-ownership)](/chromium-os/chromiumos-design-docs/chromium-os-kernel/dco) as a
-signoff of ownership. Each commit will contain the signoff of the code
-author/committer and the ACK of the patch approver. Code should be submitted
-under the Chromium contributor license agreement.
-
-### Changelog entries
-
-Here's an example of a changelog entry:
-
-```none
-CHROMIUM: bibble: a patch to fix everything
-Bug: 12345
-This patch fixes bug 12345 by checking for a NULL pointer before dereferencing ops->thingy
-Signed-off-by: Author <author@example.net>
-Signed-off-by: Committer <committer@example.net>
-Acked-by: Approver <approver@example.net>
-```
-
-All kernel code (including backports from upstream) contributed by Google or
-partners will include a classification tag in the first line of the commit log.
-The classification will be useful when the maintainer needs to rebase to a newer
-kernel; the tag is also needed for proper attribution. The tag is in
-ALL_CAPS_UNDERSCORE, is followed by a colon, and is at the beginning of the
-first line. The first line from each commit should be a summary.
-
-Whenever possible use the -x flag with git cherry-pick. This appends a line to
-the commit message that says which commit this cherry-pick came from. Only do
-this in the case that the commit was cherry-picked from a repository that is
-easily accessible by the public.
-
-Code contributed by the Chromium community will use the tag CHROMIUM. For
-example:
-
-```none
-CHROMIUM: bibble: a patch to fix everything
-```
-
-Code backported from upstream (Linus's tree) will use the tag UPSTREAM. For
-example:
-
-```none
-UPSTREAM: bibble: a patch to fix everything
-```
-
-Code backported from an upstream maintainer tree will use two tags. For example:
-
-```none
-UPSTREAM: WIRELESS: bibble: a patch to fix everything
-```
-
-Code ported from a Linux distribution tree or other non-upstream tree will also
-use an appropriate tag. For example:
-
-```none
-UBUNTU: bibble: a patch to fix everything
-```
-
-*or*
-
-```none
-YOCTO: bibble: a patch to fix everything
-```
-
-Code ported from a patch will use the tag FROMLIST and should include a link to
-the list the patch was obtained from. For example:
-
-```none
-FROMLIST: bibble: a patch to fix everything
-```
-
-```none
-```
-
-```none
-(am from https://patchwork.kernel.org/patch/0987654/)
-```
-
-Code backported that you had to change to make it run with an older kernel
-version, including conflict resolutions, will use the tag BACKPORT. For example:
-
-```none
-BACKPORT: bibble: a patch to fix everything
-```
-
-### Upgrades
-
-The kernel will be upgraded to a new version as soon as practical after a new
-version of the upstream kernel is released. We will do this via a Git rebase,
-this means we'll keep clean versions of our patches floated on top of the latest
-tree. In practice, this will happen approximately every 3-6 months, and
-approximately every other kernel versions from upstream. Other, smaller updates
-will be done on a continuous basis, such as merging in the -stable kernel
-updates.
-
-All third-party vendors are expected to supply updated versions of their code
-against every new mainline kernel version (for example, at 3.2, 3.3, and so on)
-within 14 days of its release, if the code is not already upstream.
-
-## Supported and unsupported features
-
-### Kernel modules and initial RAM disks
-
-We will support kernel modules, though this feature may be removed at some point
-in the future. We will **not** support modules built outside of the main kernel
-tree.
-
-We will not support initial RAM disks (initrd) for the general kernel, but will
-need them on recovery image kernels as well as for the factory install flow.
-
-### Architectures
-
-Support for i386, ARMv7 and x86_64 is planned.
-
-The tradeoff for using 64 bits is additional power consumption and memory usage,
-in return for greater performance.
-
-### Swap
-
-We do not plan to support swap in our initial release, but will conduct a
-further feasibility investigation to review this. We are concerned about the
-effect of swap on:
-
-* SSD write cycle lifetime
-* maximum latency
-
-We realize that not having swap will limit how many tabs a user can keep open
-and the amount of anonymous memory a process can allocate. Aggregate size of
-anonymous memory in the system will be limited to the size of RAM. We may
-revisit this decision in future releases.
-
-## Configuration files
-
-We use a custom split config to help keep settings unified across different
-architectures. See the [Kernel Configuration
-document](/chromium-os/how-tos-and-troubleshooting/kernel-configuration) for
-more details. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/submitting-patches/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/submitting-patches/index.md
deleted file mode 100644
index 6ed08844cfa..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-kernel/submitting-patches/index.md
+++ /dev/null
@@ -1,462 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/chromium-os-kernel
- - Kernel Design
-page_name: submitting-patches
-title: Submitting Patches
----
-
-[TOC]
-
-## How to Get Your Change Into the Linux Kernel
-
-or
-
-## Care And Operation Of Your Linus Torvalds
-
-For a person or company who wishes to submit a change to the Linux kernel, the
-process can sometimes be daunting if you're not familiar with "the system." This
-text is a collection of suggestions which can greatly increase the chances of
-your change being accepted. Read Documentation/SubmitChecklist for a list of
-items to check before submitting code. If you are submitting a driver, also read
-Documentation/SubmittingDrivers. --------------------------------------------
-
-### SECTION 1 - CREATING AND SENDING YOUR CHANGE
-
---------------------------------------------
-
-#### 1) "diff -up"
-
------------- Use "diff -up" or "diff -uprN" to create patches. All changes to
-the Linux kernel occur in the form of patches, as generated by diff(1). When
-creating your patch, make sure to create it in "unified diff" format, as
-supplied by the '-u' argument to diff(1). Also, please use the '-p' argument
-which shows which C function each change is in - that makes the resultant diff a
-lot easier to read. Patches should be based in the root kernel source directory,
-not in any lower subdirectory. To create a patch for a single file, it is often
-sufficient to do: SRCTREE= linux-2.6 MYFILE= drivers/net/mydriver.c cd
-$SRCTREE cp $MYFILE $MYFILE.orig vi $MYFILE # make your change
-cd .. diff -up $SRCTREE/$MYFILE{.orig,} &gt; /tmp/patch To create a patch for
-multiple files, you should unpack a "vanilla", or unmodified kernel source tree,
-and generate a diff against your own source tree. For example: MYSRC=
-/devel/linux-2.6 tar xvfz linux-2.6.12.tar.gz mv linux-2.6.12
-linux-2.6.12-vanilla diff -uprN -X
-linux-2.6.12-vanilla/Documentation/dontdiff \\ linux-2.6.12-vanilla
-$MYSRC &gt; /tmp/patch "dontdiff" is a list of files which are generated by the
-kernel during the build process, and should be ignored in any diff(1)-generated
-patch. The "dontdiff" file is included in the kernel tree in 2.6.12 and later.
-Make sure your patch does not include any extra files which do not belong in a
-patch submission. Make sure to review your patch -after- generated it with
-diff(1), to ensure accuracy. If your changes produce a lot of deltas, you may
-want to look into splitting them into individual patches which modify things in
-logical stages. This will facilitate easier reviewing by other kernel
-developers, very important if you want your patch accepted. There are a number
-of scripts which can aid in this: Quilt:
-http://savannah.nongnu.org/projects/quilt Andrew Morton's patch scripts:
-http://userweb.kernel.org/~akpm/stuff/patch-scripts.tar.gz Instead of these
-scripts, quilt is the recommended patch management tool (see above).
-
-#### 2) Describe your changes.
-
-Describe the technical detail of the change(s) your patch includes. Be as
-specific as possible. The WORST descriptions possible include things like
-"update driver X", "bug fix for driver X", or "this patch includes updates for
-subsystem X. Please apply." The maintainer will thank you if you write your
-patch description in a form which can be easily pulled into Linux's source code
-management system, git, as a "commit log". See #15, below. If your description
-starts to get long, that's a sign that you probably need to split up your patch.
-See #3, next. When you submit or resubmit a patch or patch series, include the
-complete patch description and justification for it. Don't just say that this is
-version N of the patch (series). Don't expect the patch merger to refer back to
-earlier patch versions or referenced URLs to find the patch description and put
-that into the patch. I.e., the patch (series) and its description should be
-self-contained. This benefits both the patch merger(s) and reviewers. Some
-reviewers probably didn't even receive earlier versions of the patch. If the
-patch fixes a logged bug entry, refer to that bug entry by number and URL. If
-you want to refer to a specific commit, don't just refer to the SHA-1 ID of the
-commit. Please also include the oneline summary of the commit, to make it easier
-for reviewers to know what it is about. Example: Commit
-e21d2170f36602ae2708 ("video: remove unnecessary
-platform_set_drvdata()") removed the unnecessary platform_set_drvdata(),
-but left the variable "dev" unused, delete it.
-
-#### 3) Separate your changes.
-
-Separate _logical changes_ into a single patch file. For example, if your
-changes include both bug fixes and performance enhancements for a single driver,
-separate those changes into two or more patches. If your changes include an API
-update, and a new driver which uses that new API, separate those into two
-patches. On the other hand, if you make a single change to numerous files, group
-those changes into a single patch. Thus a single logical change is contained
-within a single patch. If one patch depends on another patch in order for a
-change to be complete, that is OK. Simply note "this patch depends on patch X"
-in your patch description. If you cannot condense your patch set into a smaller
-set of patches, then only post say 15 or so at a time and wait for review and
-integration.
-
-#### 4) Style check your changes.
-
-Check your patch for basic style violations, details of which can be found in
-Documentation/CodingStyle. Failure to do so simply wastes the reviewers time and
-will get your patch rejected, probably without even being read. At a minimum you
-should check your patches with the patch style checker prior to submission
-(scripts/checkpatch.pl). You should be able to justify all violations that
-remain in your patch.
-
-#### 5) Select e-mail destination.
-
-Look through the MAINTAINERS file and the source code, and determine if your
-change applies to a specific subsystem of the kernel, with an assigned
-maintainer. If so, e-mail that person. The script scripts/get_maintainer.pl can
-be very useful at this step. If no maintainer is listed, or the maintainer does
-not respond, send your patch to the primary Linux kernel developer's mailing
-list, linux-kernel@vger.kernel.org. Most kernel developers monitor this e-mail
-list, and can comment on your changes. Do not send more than 15 patches at once
-to the vger mailing lists!!! Linus Torvalds is the final arbiter of all changes
-accepted into the Linux kernel. His e-mail address is . He gets a lot of e-mail,
-so typically you should do your best to -avoid- sending him e-mail. Patches
-which are bug fixes, are "obvious" changes, or similarly require little
-discussion should be sent or CC'd to Linus. Patches which require discussion or
-do not have a clear advantage should usually be sent first to linux-kernel. Only
-after the patch is discussed should the patch then be submitted to Linus.
-
-#### 6) Select your CC (e-mail carbon copy) list.
-
-Unless you have a reason NOT to do so, CC linux-kernel@vger.kernel.org. Other
-kernel developers besides Linus need to be aware of your change, so that they
-may comment on it and offer code review and suggestions. linux-kernel is the
-primary Linux kernel developer mailing list. Other mailing lists are available
-for specific subsystems, such as USB, framebuffer devices, the VFS, the SCSI
-subsystem, etc. See the MAINTAINERS file for a mailing list that relates
-specifically to your change. Majordomo lists of VGER.KERNEL.ORG at: If
-changes affect userland-kernel interfaces, please send the MAN-PAGES maintainer
-(as listed in the MAINTAINERS file) a man-pages patch, or at least a
-notification of the change, so that some information makes its way into the
-manual pages. Even if the maintainer did not respond in step #5, make sure to
-ALWAYS copy the maintainer when you change their code. For small patches you may
-want to CC the Trivial Patch Monkey trivial@kernel.org which collects "trivial"
-patches. Have a look into the MAINTAINERS file for its current manager. Trivial
-patches must qualify for one of the following rules: Spelling fixes in
-documentation Spelling fixes which could break grep(1) Warning fixes (cluttering
-with useless warnings is bad) Compilation fixes (only if they are actually
-correct) Runtime fixes (only if they actually fix things) Removing use of
-deprecated functions/macros (eg. check_region) Contact detail and documentation
-fixes Non-portable code replaced by portable code (even in arch-specific, since
-people copy, as long as it's trivial) Any fix by the author/maintainer of the
-file (ie. patch monkey in re-transmission mode)
-
-#### 7) No MIME, no links, no compression, no attachments. Just plain text.
-
-Linus and other kernel developers need to be able to read and comment on the
-changes you are submitting. It is important for a kernel developer to be able to
-"quote" your changes, using standard e-mail tools, so that they may comment on
-specific portions of your code. For this reason, all patches should be
-submitting e-mail "inline". WARNING: Be wary of your editor's word-wrap
-corrupting your patch, if you choose to cut-n-paste your patch. Do not attach
-the patch as a MIME attachment, compressed or not. Many popular e-mail
-applications will not always transmit a MIME attachment as plain text, making it
-impossible to comment on your code. A MIME attachment also takes Linus a bit
-more time to process, decreasing the likelihood of your MIME-attached change
-being accepted. Exception: If your mailer is mangling patches then someone may
-ask you to re-send them using MIME. See Documentation/email-clients.txt for
-hints about configuring your e-mail client so that it sends your patches
-untouched.
-
-#### 8) E-mail size.
-
-When sending patches to Linus, always follow step #7. Large changes are not
-appropriate for mailing lists, and some maintainers. If your patch,
-uncompressed, exceeds 300 kB in size, it is preferred that you store your patch
-on an Internet-accessible server, and provide instead a URL (link) pointing to
-your patch.
-
-#### 9) Name your kernel version.
-
-It is important to note, either in the subject line or in the patch description,
-the kernel version to which this patch applies. If the patch does not apply
-cleanly to the latest kernel version, Linus will not apply it.
-
-#### 10) Don't get discouraged. Re-submit.
-
-After you have submitted your change, be patient and wait. If Linus likes your
-change and applies it, it will appear in the next version of the kernel that he
-releases. However, if your change doesn't appear in the next version of the
-kernel, there could be any number of reasons. It's YOUR job to narrow down those
-reasons, correct what was wrong, and submit your updated change. It is quite
-common for Linus to "drop" your patch without comment. That's the nature of the
-system. If he drops your patch, it could be due to \* Your patch did not apply
-cleanly to the latest kernel version. \* Your patch was not sufficiently
-discussed on linux-kernel. \* A style issue (see section 2). \* An e-mail
-formatting issue (re-read this section). \* A technical problem with your
-change. \* He gets tons of e-mail, and yours got lost in the shuffle. \* You are
-being annoying. When in doubt, solicit comments on linux-kernel mailing list.
-
-#### 11) Include PATCH in the subject
-
-Due to high e-mail traffic to Linus, and to linux-kernel, it is common
-convention to prefix your subject line with \[PATCH\]. This lets Linus and other
-kernel developers more easily distinguish patches from other e-mail discussions.
-
-#### 12) Sign your work
-
-To improve tracking of who did what, especially with patches that can percolate
-to their final resting place in the kernel through several layers of
-maintainers, we've introduced a "sign-off" procedure on patches that are being
-emailed around. The sign-off is a simple line at the end of the explanation for
-the patch, which certifies that you wrote it or otherwise have the right to pass
-it on as an open-source patch. The rules are pretty simple: if you can certify
-the below: Developer's Certificate of Origin 1.1 By making a contribution to
-this project, I certify that: (a) The contribution was created in whole or in
-part by me and I have the right to submit it under the open source license
-indicated in the file; or (b) The contribution is based upon previous work that,
-to the best of my knowledge, is covered under an appropriate open source license
-and I have the right under that license to submit that work with modifications,
-whether created in whole or in part by me, under the same open source license
-(unless I am permitted to submit under a different license), as indicated in the
-file; or (c) The contribution was provided directly to me by some other person
-who certified (a), (b) or (c) and I have not modified it. (d) I understand
-and agree that this project and the contribution are public and that a
-record of the contribution (including all personal information I submit
-with it, including my sign-off) is maintained indefinitely and may be
-redistributed consistent with this project or the open source license(s)
-involved. then you just add a line saying Signed-off-by: Random J Developer
-using your real name (sorry, no pseudonyms or anonymous contributions.) Some
-people also put extra tags at the end. They'll just be ignored for now, but you
-can do this to mark internal company procedures or just point out some special
-detail about the sign-off. If you are a subsystem or branch maintainer,
-sometimes you need to slightly modify patches you receive in order to merge
-them, because the code is not exactly the same in your tree and the submitters'.
-If you stick strictly to rule (c), you should ask the submitter to rediff, but
-this is a totally counter-productive waste of time and energy. Rule (b) allows
-you to adjust the code, but then it is very impolite to change one submitter's
-code and make him endorse your bugs. To solve this problem, it is recommended
-that you add a line between the last Signed-off-by header and yours, indicating
-the nature of your changes. While there is nothing mandatory about this, it
-seems like prepending the description with your mail and/or name, all enclosed
-in square brackets, is noticeable enough to make it obvious that you are
-responsible for last-minute changes. Example : Signed-off-by: Random J
-Developer \[lucky@maintainer.example.org: struct foo moved from foo.c to
-foo.h\] Signed-off-by: Lucky K Maintainer This practise is particularly helpful
-if you maintain a stable branch and want at the same time to credit the author,
-track changes, merge the fix, and protect the submitter from complaints. Note
-that under no circumstances can you change the author's identity (the From
-header), as it is the one which appears in the changelog. Special note to
-back-porters: It seems to be a common and useful practise to insert an
-indication of the origin of a patch at the top of the commit message (just after
-the subject line) to facilitate tracking. For instance, here's what we see in
-2.6-stable : Date: Tue May 13 19:10:30 2008 +0000 SCSI: libiscsi regression in
-2.6.25: fix nop timer handling commit 4cf1043593db6a337f10e006c23c69e5fc93e722
-upstream And here's what appears in 2.4 : Date: Tue May 13 22:12:27 2008 +0200
-wireless, airo: waitbusy() won't delay \[backport of 2.6 commit
-b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a\] Whatever the format, this information
-provides a valuable help to people tracking your trees, and to people trying to
-trouble-shoot bugs in your tree.
-
-#### 13) When to use Acked-by: and Cc:
-
-The Signed-off-by: tag indicates that the signer was involved in the development
-of the patch, or that he/she was in the patch's delivery path. If a person was
-not directly involved in the preparation or handling of a patch but wishes to
-signify and record their approval of it then they can arrange to have an
-Acked-by: line added to the patch's changelog. Acked-by: is often used by the
-maintainer of the affected code when that maintainer neither contributed to nor
-forwarded the patch. Acked-by: is not as formal as Signed-off-by:. It is a
-record that the acker has at least reviewed the patch and has indicated
-acceptance. Hence patch mergers will sometimes manually convert an acker's "yep,
-looks good to me" into an Acked-by:. Acked-by: does not necessarily indicate
-acknowledgement of the entire patch. For example, if a patch affects multiple
-subsystems and has an Acked-by: from one subsystem maintainer then this usually
-indicates acknowledgement of just the part which affects that maintainer's code.
-Judgement should be used here. When in doubt people should refer to the original
-discussion in the mailing list archives. If a person has had the opportunity to
-comment on a patch, but has not provided such comments, you may optionally add a
-"Cc:" tag to the patch. This is the only tag which might be added without an
-explicit action by the person it names. This tag documents that potentially
-interested parties have been included in the discussion
-
-#### 14) Using Reported-by:, Tested-by:, Reviewed-by: and Suggested-by:
-
-If this patch fixes a problem reported by somebody else, consider adding a
-Reported-by: tag to credit the reporter for their contribution. Please note that
-this tag should not be added without the reporter's permission, especially if
-the problem was not reported in a public forum. That said, if we diligently
-credit our bug reporters, they will, hopefully, be inspired to help us again in
-the future. A Tested-by: tag indicates that the patch has been successfully
-tested (in some environment) by the person named. This tag informs maintainers
-that some testing has been performed, provides a means to locate testers for
-future patches, and ensures credit for the testers. Reviewed-by:, instead,
-indicates that the patch has been reviewed and found acceptable according to the
-Reviewer's Statement: Reviewer's statement of oversight By
-offering my Reviewed-by: tag, I state that: (a) I have carried out a technical
-review of this patch to evaluate its appropriateness and readiness for
-inclusion into the mainline kernel. (b) Any problems, concerns, or
-questions relating to the patch have been communicated back to the
-submitter. I am satisfied with the submitter's response to my comments. (c)
-While there may be things that could be improved with this submission,
-I believe that it is, at this time, (1) a worthwhile modification to the
-kernel, and (2) free of known issues which would argue against its inclusion.
-(d) While I have reviewed the patch and believe it to be sound, I do not
-(unless explicitly stated elsewhere) make any warranties or guarantees that
-it will achieve its stated purpose or function properly in any given
-situation. A Reviewed-by tag is a statement of opinion that the patch is an
-appropriate modification of the kernel without any remaining serious technical
-issues. Any interested reviewer (who has done the work) can offer a Reviewed-by
-tag for a patch. This tag serves to give credit to reviewers and to inform
-maintainers of the degree of review which has been done on the patch.
-Reviewed-by: tags, when supplied by reviewers known to understand the subject
-area and to perform thorough reviews, will normally increase the likelihood of
-your patch getting into the kernel. A Suggested-by: tag indicates that the patch
-idea is suggested by the person named and ensures credit to the person for the
-idea. Please note that this tag should not be added without the reporter's
-permission, especially if the idea was not posted in a public forum. That said,
-if we diligently credit our idea reporters, they will, hopefully, be inspired to
-help us again in the future.
-
-#### 15) The canonical patch format
-
-The canonical patch subject line is: Subject: \[PATCH 001/123\] subsystem:
-summary phrase The canonical patch message body contains the following: - A
-"from" line specifying the patch author. - An empty line. - The body of the
-explanation, which will be copied to the permanent changelog to describe this
-patch. - The "Signed-off-by:" lines, described above, which will also go in the
-changelog. - A marker line containing simply "---". - Any additional comments
-not suitable for the changelog. - The actual patch (diff output). The Subject
-line format makes it very easy to sort the emails alphabetically by subject line
-- pretty much any email reader will support that - since because the sequence
-number is zero-padded, the numerical and alphabetic sort is the same. The
-"subsystem" in the email's Subject should identify which area or subsystem of
-the kernel is being patched. The "summary phrase" in the email's Subject should
-concisely describe the patch which that email contains. The "summary phrase"
-should not be a filename. Do not use the same "summary phrase" for every patch
-in a whole patch series (where a "patch series" is an ordered sequence of
-multiple, related patches). Bear in mind that the "summary phrase" of your email
-becomes a globally-unique identifier for that patch. It propagates all the way
-into the git changelog. The "summary phrase" may later be used in developer
-discussions which refer to the patch. People will want to google for the
-"summary phrase" to read discussion regarding that patch. It will also be the
-only thing that people may quickly see when, two or three months later, they are
-going through perhaps thousands of patches using tools such as "gitk" or "git
-log --oneline". For these reasons, the "summary" must be no more than 70-75
-characters, and it must describe both what the patch changes, as well as why the
-patch might be necessary. It is challenging to be both succinct and descriptive,
-but that is what a well-written summary should do. The "summary phrase" may be
-prefixed by tags enclosed in square brackets: "Subject: \[PATCH tag\] ". The
-tags are not considered part of the summary phrase, but describe how the patch
-should be treated. Common tags might include a version descriptor if the
-multiple versions of the patch have been sent out in response to comments (i.e.,
-"v1, v2, v3"), or "RFC" to indicate a request for comments. If there are four
-patches in a patch series the individual patches may be numbered like this: 1/4,
-2/4, 3/4, 4/4. This assures that developers understand the order in which the
-patches should be applied and that they have reviewed or applied all of the
-patches in the patch series. A couple of example Subjects: Subject: \[patch
-2/5\] ext2: improve scalability of bitmap searching Subject: \[PATCHv2 001/207\]
-x86: fix eflags tracking The "from" line must be the very first line in the
-message body, and has the form: From: Original Author The "from" line specifies
-who will be credited as the author of the patch in the permanent changelog. If
-the "from" line is missing, then the "From:" line from the email header will be
-used to determine the patch author in the changelog. The explanation body will
-be committed to the permanent source changelog, so should make sense to a
-competent reader who has long since forgotten the immediate details of the
-discussion that might have led to this patch. Including symptoms of the failure
-which the patch addresses (kernel log messages, oops messages, etc.) is
-especially useful for people who might be searching the commit logs looking for
-the applicable patch. If a patch fixes a compile failure, it may not be
-necessary to include _all_ of the compile failures; just enough that it is
-likely that someone searching for the patch can find it. As in the "summary
-phrase", it is important to be both succinct as well as descriptive. The "---"
-marker line serves the essential purpose of marking for patch handling tools
-where the changelog message ends. One good use for the additional comments after
-the "---" marker is for a diffstat, to show what files have changed, and the
-number of inserted and deleted lines per file. A diffstat is especially useful
-on bigger patches. Other comments relevant only to the moment or the maintainer,
-not suitable for the permanent changelog, should also go here. A good example of
-such comments might be "patch changelogs" which describe what has changed
-between the v1 and v2 version of the patch. If you are going to include a
-diffstat after the "---" marker, please use diffstat options "-p 1 -w 70" so
-that filenames are listed from the top of the kernel source tree and don't use
-too much horizontal space (easily fit in 80 columns, maybe with some
-indentation). See more details on the proper patch format in the following
-references.
-
-#### 16) Sending "git pull" requests (from Linus emails)
-
-Please write the git repo address and branch name alone on the same line so that
-I can't even by mistake pull from the wrong branch, and so that a triple-click
-just selects the whole thing. So the proper format is something along the lines
-of: "Please pull from
-git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus to get these
-changes:" so that I don't have to hunt-and-peck for the address and inevitably
-get it wrong (actually, I've only gotten it wrong a few times, and checking
-against the diffstat tells me when I get it wrong, but I'm just a lot more
-comfortable when I don't have to "look for" the right thing to pull, and
-double-check that I have the right branch-name). Please use "git diff -M --stat
---summary" to generate the diffstat: the -M enables rename detection, and the
-summary enables a summary of new/deleted or renamed files. With rename
-detection, the statistics are rather different \[...\] because git will notice
-that a fair number of the changes are renames.
------------------------------------
-
-### SECTION 2 - HINTS, TIPS, AND TRICKS
-
------------------------------------ This section lists many of the common
-"rules" associated with code submitted to the kernel. There are always
-exceptions... but you must have a really good reason for doing so. You could
-probably call this section Linus Computer Science 101.
-
-#### 1) Read Documentation/CodingStyle
-
-Nuff said. If your code deviates too much from this, it is likely to be rejected
-without further review, and without comment. One significant exception is when
-moving code from one file to another -- in this case you should not modify the
-moved code at all in the same patch which moves it. This clearly delineates the
-act of moving the code and your changes. This greatly aids review of the actual
-differences and allows tools to better track the history of the code itself.
-Check your patches with the patch style checker prior to submission
-(scripts/checkpatch.pl). The style checker should be viewed as a guide not as
-the final word. If your code looks better with a violation then its probably
-best left alone. The checker reports at three levels: - ERROR: things that are
-very likely to be wrong - WARNING: things requiring careful review - CHECK:
-things requiring thought You should be able to justify all violations that
-remain in your patch.
-
-#### 2) #ifdefs are ugly
-
-Code cluttered with ifdefs is difficult to read and maintain. Don't do it.
-Instead, put your ifdefs in a header, and conditionally define 'static inline'
-functions, or macros, which are used in the code. Let the compiler optimize away
-the "no-op" case. Simple example, of poor code: dev = alloc_etherdev
-(sizeof(struct funky_private)); if (!dev) return -ENODEV;
-#ifdef CONFIG_NET_FUNKINESS init_funky_net(dev); #endif Cleaned-up
-example: (in header) #ifndef CONFIG_NET_FUNKINESS static inline void
-init_funky_net (struct net_device \*d) {} #endif (in the code itself) dev
-= alloc_etherdev (sizeof(struct funky_private)); if (!dev)
-return -ENODEV; init_funky_net(dev);
-
-#### 3) 'static inline' is better than a macro
-
-Static inline functions are greatly preferred over macros. They provide type
-safety, have no length limitations, no formatting limitations, and under gcc
-they are as cheap as macros. Macros should only be used for cases where a static
-inline is clearly suboptimal \[there are a few, isolated cases of this in fast
-paths\], or where it is impossible to use a static inline function \[such as
-string-izing\]. 'static inline' is preferred over 'static __inline__', 'extern
-inline', and 'extern __inline__'.
-
-#### 4) Don't over-design.
-
-Don't try to anticipate nebulous future cases which may or may not be useful:
-"Make it as simple as you can, and no simpler." ----------------------
-
-### SECTION 3 - REFERENCES
-
----------------------- Andrew Morton, "The perfect patch" (tpp). Jeff Garzik,
-"Linux kernel patch submission format". Greg Kroah-Hartman, "How to piss off a
-kernel subsystem maintainer". NO!!!! No more huge patch bombs to
-linux-kernel@vger.kernel.org people! Kernel Documentation/CodingStyle: Linus
-Torvalds's mail on the canonical patch format: Andi Kleen, "On submitting kernel
-patches" Some strategies to get difficult or controversial changes in.
-http://halobates.de/on-submitting-patches.pdf -- \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-libcros/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-libcros/index.md
deleted file mode 100644
index 16a43c6ff5c..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-libcros/index.md
+++ /dev/null
@@ -1,322 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: chromium-os-libcros
-title: Cros - How Chromium talks to Chromium OS
----
-
-[TOC]
-
-**DEPRECATED**
-
-As of October 2011, the Cros library (libcros.so) is now in the process of
-phasing out. The chromium browser talks to the background servers of Chromium OS
-via IPC mechanism called D-Bus. The browser has ability to issue D-Bus method
-calls and handle D-Bus signals hence no longer needs the Cros library layer.
-
-## Abstract
-
-Cros came about because we needed a way for Chromium UI code to talk to Chromium
-OS code. For example, the Chromium networking UI needs to talk to Chromium OS
-flimflam to get network status and to make connections to wifi/cellular
-networks. Cros is set of APIs that is implemented on the Chromium OS side and
-exposed to Chromium via a dynamically linked *libcros.so* file. We designed a
-versioning system to make sure that Chromium OS will only boot up if we have the
-correct version of *libcros.so*. If either the *libcros.so* version or the
-Chromium version is too old, we catch that and disable login.
-
-## Objective
-
-The design behind Cros is based on these requirements:
-
-* Chromium OS code and Chromium code are in 2 different source trees.
- When we do release builds, we may use different snapshots of these 2
- trees depending on how stable they are. From past experience, we
- would release Chromium OS with a slightly older but stable version
- of Chromium. So Chromium should be able to talk to Chromium OS even
- if the *libcros.so* file in Chromium OS is slightly newer.
-* We should be able to modify Cros implementation without having to
- recompile Chromium.
-* We should be able to add new Cros API methods without having to
- recompile Chromium.
-* When new Cros API methods are needed by Chromium, we should be able
- to tell Chromium to bind to these new methods and use them in
- Chromium.
-* The LKGR build of Chromium OS should always work with the LKGR build
- of Chromium.
-* When Cros in Chromium OS is incompatible with that of Chromium, we
- need fail fast and let the user know why.
-
-## Detailed Description
-
-### Cros Files
-
-<table>
-<tr>
-<td> <b>File</b></td>
-<td><b>Description</b></td>
-<td> <b>Used by Chromium OS</b></td>
-<td> <b>Used by Chromium</b></td>
-</tr>
-<tr>
-<td> *platform/cros/chromeos_cros_api.h*</td>
-<td> Defines version number of Cros: `kCrosAPIMinVersion` and `kCrosAPIVersion`</td>
-<td> Yes</td>
-<td> Yes (only kCrosAPIVersion)</td>
-</tr>
-<tr>
-<td> *platform/cros/load.cc*</td>
-<td> This is the code that Chromium uses to bind methods to *libcros.so*</td>
-<td> Yes</td>
-</tr>
-<tr>
-<td> *platform/cros/version_check.cc*</td>
-<td> Version checking code to make sure that version of *libcros.so* is compatible with Chromium</td>
-<td> Yes</td>
-</tr>
-<tr>
-<td> *platform/cros/chromeos_\*.h*</td>
-<td> Defines the Cros API</td>
-<td> Yes</td>
-<td> Yes</td>
-</tr>
-<tr>
-<td> *platform/cros/chromeos_\*.cc*</td>
-<td> Cros Implementation</td>
-<td> Yes</td>
-</tr>
-</table>
-
-### Workflow
-
-This is the workflow of how Cros is used in Chromium OS:
-
-1. Chromium OS is built and the Cros files listed above are built into
- the *libcros.so* file.
-2. Chromium build uses a DEPS file to fetch a specific version of Cros
- to build against.
-3. Chromium is built against this specific version of Cros API.
-4. When Chromium OS starts up Chromium, we make sure that the version
- of Cros that Chromium is built against is compatible with the
- version of *libcros.so*.
-5. If it's compatible, we binds the method calls from Chromium to the
- implementation in *libcros.so*.
-6. All Cros method calls from Chromium will now execute the
- corresponding method in Chromium OS's *libcros.so*.
-
-### Cros DEPS
-
-In order to have Chromium build against a specific version of Cros, we use this
-DEPS file:
-<http://src.chromium.org/viewvc/chrome/trunk/src/tools/cros.DEPS/DEPS?view=markup>
-
-```none
-vars = {
-  "chromium_git": "http://src.chromium.org/git",
-}
-deps = {
-  "src/third_party/cros":
-    Var("chromium_git") + "/cros.git@e9730f8a
-",
-}
-```
-
-The 7 characters after the @ is the first 7 characters of the git commit hash
-for the last Cros change that we want to build Chromium against.
-
-For this example in this specific case, this is the change:
-<http://git.chromium.org/gitweb/?p=cros.git;a=commit;h=e9730f8a8a689ae3e506d1e400c4799190d302d0>
-
-This DEPS file will need to be updated when there are new Cros APIs that are
-needed by Chromium.
-
-### Version Checking
-
-The version checking code is in *version_check.cc*, and it gets run by Chromium
-when it is started by Chromium OS.
-
-In chromeos-api.h, we define 2 version numbers: `kCrosAPIMinVersion` and
-`kCrosAPIVersion`. We use these version numbers to decide if the version of Cros
-in Chromium is compatible with the version of Cros in Chromium OS. Since both
-Chromium and Chromium OS have their own copy of chromeos-api.h, we have 2 sets
-of these 2 version numbers. Chromium OS's `kCrosAPIMinVersion` and
-`kCrosAPIVersion` specify the min and max version of the Cros API that the
-*libcros.so* supports. In other words, it is only compatible if kCrosAPIVersion
-in Chromium is within the range \[`kCrosAPIMinVersion,` `kCrosAPIVersion`\] of
-Chromium OS.
-
-This means that the version of Cros in Chromium OS can be newer than the version
-of Cros in Chromium. In other words, *libcros.so* can have new methods that are
-not used by an older version of Cros in Chromium, but not the other way around.
-If Chromium's kCrosAPIVersion is greater than Chromium OS's kCrosAPIVersion,
-then Chromium is likely depending on a new Cros API that's not implemented in
-*libcros.so*. In this case, the version check fails, and we prevent user from
-logging in and display an error like: Incompatible libcros version. Client: 51
-Min: 29 Max: 50
-
-The kCrosAPIMinVersion version in *libcros.so* is used to specify the minimum
-version of the Cros API that's supported. This number gets increased when we
-remove methods from the Cros API. So if Chromium's kCrosAPIVersion is less than
-Chromium OS's kCrosAPIMinVersion, then that means Chromium is likely using a
-Cros API method that's no longer there. In this case, the version check fails,
-and we prevent user from logging in and display an error like: `Incompatible
-libcros version. Client: 28 Min: 29 Max: 50`
-
-### Binding *libcros.so*
-
-After version check passes, the code in *load.cc* runs to bind the Chromium
-method calls to the implementation in *libcros.so*. If binding fails for any
-reason, we prevent the user from logging and display an error like: `Couldn't
-load: MethodName`
-
-Common Developer Workflows
-
-### Modifying method implementation
-
-To change a Cros method implementation, you just need to change the code on the
-Chromium OS side and you don't need to do anything on the Chromium side.
-Chromium will bind with the unchanged Cros API on the new libcros.so and
-exercise your new code without any problems.
-
-### Adding methods to Cros API
-
-This is best described by a table showing what you need to do on the Chromium OS
-side and on Chromium side:
-
-<table>
-<tr>
-<td> <b>Chromium OS</b></td>
-<td> <b>Chromium</b></td>
-</tr>
-<tr>
-<td> Check in new code:</td>
-<td>*chromeos_\*.h* - Add new API to </td>
-<td>**chromeos_\*.cc* - Add implementation to* </td>
-<td> *- Add code to *load.cc* to declare and initialize new API*</td>
-<td> *- Increment kCrosAPIVersion in *chromeos_cros_api.h**</td>
-</tr>
-<tr>
-<td> Get your change's commit hash from:</td>
-<td> <a href="http://git.chromium.org/gitweb/?p=chromiumos/platform/cros.git;a=commit;h=HEAD">http://git.chromium.org/gitweb/?p=chromiumos/platform/cros.git;a=commit;h=HEAD</a></td>
-</tr>
-<tr>
-<td> Update DEPS:</td>
-<td> - Put your commit hash in cros_deps/DEPS</td>
-<td> - Run "gclient sync"</td>
-<td> - Confirm third-party/cros includes your change</td>
-<td> - Make sure build compiles</td>
-<td> - Copy cros_DEPS/DEPS to tools/cros.DEPS/DEPS </td>
-<td> - Check in tools/cros.DEPS/DEPS</td>
-</tr>
-<tr>
-<td> Check in new code that utilizes the new API</td>
-</tr>
-</table>
-
-### Deleting methods from Cros API
-
-Deleting a method from the API is a complicated process that's prone to error.
-So make sure you know what you are doing.
-
-It is recommended that you wait at least a week after removing the usage and
-binding of the method before you actually remove the implementation. This is
-because deleting a method will make things backwards incompatible. So we need to
-make sure that all possible versions of Chromium that was use with Chromium OS
-will have this new Cros that does not bind with the deprecated method.
-
-<table>
-<tr>
-<td> <b>Chromium OS</b></td>
-<td> <b>Chromium</b></td>
-</tr>
-<tr>
-<td> Remove calls to deprecated API</td>
-</tr>
-<tr>
-<td> Deprecate method:</td>
-<td> - Keep the method implementation</td>
-<td> - Remove binding of method in *load.cc*</td>
-<td> - Increment *kCrosAPIVersion* in *chromeos-api.h*</td>
-</tr>
-<tr>
-<td> Get your change's commit hash from:</td>
-<td> <a href="http://git.chromium.org/gitweb/?p=chromiumos/platform/cros.git;a=commit;h=HEAD">http://git.chromium.org/gitweb/?p=chromiumos/platform/cros.git;a=commit;h=HEAD</a> </td>
-</tr>
-<tr>
-<td> Update DEPS:</td>
-<td> - Put your commit hash in cros_deps/DEPS</td>
-<td> - Run "gclient sync"</td>
-<td> - Confirm third-party/cros includes your change</td>
-<td> - Make sure build compiles</td>
-<td> - Copy cros_DEPS/DEPS to tools/cros.DEPS/DEPS</td>
-<td> - Check in tools/cros.DEPS/DEPS</td>
-</tr>
-<tr>
-<td> Delete method:</td>
-<td> - Delete implementation</td>
-<td> - Set kCrosAPIMinVersion to *kCrosAPIVersion*</td>
-<td> - Increment *kCrosAPIVersion* in *chromeos-api.h*</td>
-</tr>
-<tr>
-<td> Get your change's commit hash from:</td>
-<td> <a href="http://git.chromium.org/gitweb/?p=chromiumos/platform/cros.git;a=commit;h=HEAD">http://git.chromium.org/gitweb/?p=chromiumos/platform/cros.git;a=commit;h=HEAD</a></td>
-</tr>
-<tr>
-<td> Update DEPS:</td>
-<td> - Put your commit hash in cros_deps/DEPS</td>
-<td> - Run "gclient sync"</td>
-<td> - Confirm third-party/cros includes your change</td>
-<td> - Make sure build compiles</td>
-<td> - Copy cros_DEPS/DEPS to tools/cros.DEPS/DEPS</td>
-<td> - Check in tools/cros.DEPS/DEPS</td>
-</tr>
-</table>
-
-### Modifying method signatures
-
-It is highly recommend against modifying method signatures. This is because if
-you modify a method signature, you would need to check in a backwards
-incompatible change. In other words, in order for Chromium to talk to Chromium
-OS, it would need this exact version of Cros. So you would have to check in code
-to both Chromium OS and Chromium at the same time. And if anyone tries to use
-Chromium OS with a slightly older version of Chromium, they will be blocked from
-logging in.
-
-Instead of modifying a method signature, it is better to just add a new method
-in Cros, change it so that Chromium calls this new method. And after a while,
-delete the old deprecated method.
-
-## FAQ
-
-### How do I locally test a Cros and corresponding Chromium change before I check anything in?
-
-After you have "git commit" the Cros code, you can use "git pull" to pull that
-code to Chromium:
-
-```none
-cd ~/chrome/src/third_party/cros
-git pull ~/chromeos/src/platform/cros
-```
-
-And if you want to test Chromium with the new *libcros.so*, you need to copy it
-to the chromeos directory:
-
-<pre><code>
-emerge-x86-generic libcros <i>(in Chromium OS chroot)</i>
-mkdir ~/chrome/src/out/Debug/chromeos
-cp ~/chromeos/chroot/build/x86-generic/opt/google/chrome/chromeos/* ~/chrome/src/out/Debug/chromeos
-</code></pre>
-
-### Why does Cros fail to load with message "Incompatible libcros version. Client:x Min:y Max: z" where x &gt; z?
-
-This happens when the version of Cros in Chromium is newer than the version of
-Cros in Chromium OS. To fix this, make sure you fetch the latest code from
-*platform/cros* and then emerge libcros.
-
-### Why does Cros fail to load with message "Incompatible libcros version. Client:x Min:y Max: z" where x &lt; y?
-
-This happens when the version of Cros in Chromium is too old for the version of
-Cros in Chromium OS. To fix this, make sure you build the latest Chromium. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-printing-design/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-printing-design/index.md
deleted file mode 100644
index 8e1adb262e9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/chromium-os-printing-design/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: chromium-os-printing-design
-title: Chromium OS Printing
----
-
-[TOC]
-
-### Abstract
-
-This document describes the cloud printing workflow and how it interacts with
-Google Cloud Print. Support for and interactions with Google Cloud Print dialogs
-will also be documented here as they are determined.
-
-### **Chromium OS**
-
-When asked to print, Chromium OS checks to see if the user is logged in. (This
-case should be rare and occur only if the user entered via the guest account.)
-If the user is not logged in, a login dialog is presented.
-
-Once logged in, if the user has not yet set up cloud printing or has no
-registered or shared printers, a server-hosted introductory wizard is presented.
-In this case, printers that are universally shared (for example, "printing" a
-PDF to Google Docs) do not count as shared with the user, as it's expected that
-most users will be interested in printing to local printers. This wizard
-outlines the steps necessary to set up cloud printing, including instructions
-for setting up a proxy and registering printers. This should happen even if
-there are printers shared globally with the user.
-
-Once the user is logged in and has registered printers or has dismissed the
-wizard as completed, the cloud printing workflow begins.
-
-### Chromium-based browser
-
-How cloud printing integrates into a Chromium-based browser is still to be
-determined.
-
-### Cloud printing workflow
-
-On entering the cloud printing workflow, the browser checks to see if the
-current page/application provides its own printing workflow (how to do this
-TBD). Currently, some web applications, such as the document editor in Google
-Docs, trap the keyboard shortcut for printing (Ctrl-P for English) and have
-their own print menu items. The goal here is to unify the browser's print menu
-item into that workflow for consistency. Once in the application's own print
-flow, it is up to that application to work with Google Cloud Print or provide an
-alternate means of printing. The application can choose to present its own print
-settings user interface and re-join the common printing workflow by using the
-window.print() JavaScript request, or it can provide its own entirely separate
-printing solution.
-
-If the application does not provide its own print workflow, a modal cloud print
-common dialog is presented in a new popup window. This single dialog allows the
-user to quickly print with some default settings but also allows for changing of
-some page setup and advanced print settings without bringing up additional
-dialogs. The contents of the dialog are hosted by Google Cloud Print, and the
-browser provides calls to the scripts on the page in the dialog to change page
-setup information (information needed for PDF generation) and for returning the
-contents of the generated PDF file from the browser to the scripts for uploading
-to the service. (This may be changed so that the browser could also provide the
-upload service as a call, so that it can happen on the IO thread.) Any setting
-of the page setup information will require re-generation of the PDF file, which
-should happen in the renderer process that owns the tab being printed.
-
-Optionally, in the future, the browser can get a thumbnail rendering of a
-particular page and call into the dialog scripts to show it. Additionally,
-application-specific simple and advanced settings may be incorporated into the
-dialog.
-
-After the user sets other post-PDF generation information (job settings, for
-example, *N*-up printing), the scripts in the dialog upload the PDF the browser
-provided and the job ticket containing the job settings. It then makes a call to
-the browser to close the dialog.
-
-#### Notes
-
-This is a change in printing workflow from what is currently in Chromium OS. In
-order to mix the page settings into a single simple print dialog, the print
-settings can't be treated as final before the dialog comes up (which is how
-printing in Chromium OS is currently working). But this also gives us an
-opportunity to get a PDF generation progress meter somewhere in this process.
-(There's a Chromium OS bug currently open on this issue.)
-
-Care needs to be taken to generate the PDF in the background asynchronously. The
-dialog script code needs to disable or otherwise indicate that it hasn't yet
-gotten back the PDF information from the browser any time it makes a change to
-the page setup information.
-
-Uploading of the PDF and job settings happens in the background. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cras-chromeos-audio-server/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cras-chromeos-audio-server/index.md
deleted file mode 100644
index 56b48044bbe..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cras-chromeos-audio-server/index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: cras-chromeos-audio-server
-title: 'CRAS: Chromium OS Audio Server'
----
-
-## Why
-
-Chromium OS needs a way to route audio to different devices. Currently Chromium
-OS only plays audio to the first ALSA device in the system. Devices attached
-after boot are ignored, and no priority is given to the built in sound device.
-The goal of the new server is to allow for sound to be routed dynamically to
-newly attached audio-capable monitors (DisplayPort and HDMI), USB webcam, USB
-speakers, bluetooth headsets, etc. And to do this in a way that requires as
-little CPU as possible and that adds little or no latency.
-
-## How
-
-Put an audio server in between Chromium and ALSA that can change how audio flows
-on the fly. Chromium will connect to this audio server, send audio data to it,
-and the audio server will render this to the selected ALSA device through
-alsa-lib. For input the process will be reversed, the server will get audio
-samples from alsa and forward them to Chromium.
-
-## Details
-
-The design decisions were driven by three main requirements: Low Latency, Low
-CPU usage, and dynamic audio routing. This will handle the streaming of PCM
-only; audio decode will all be done in Chromium.
-
-The basic design combines the timer-driven wakeup scheme of pulseaudio with the
-synchronous audio callbacks of JACK. This synchronous callback eliminates local
-buffering of data in the server, allowing the server to wake up less for a given
-latency. The server wakes up when a timer fires, sometime before there is an
-ALSA over/underrun and calls back to Chromium to get/put audio data. This
-minimizes latency as the only additional latency needed is that to exchange IPC
-messages between the server and client. Because ALSA wakeups aren’t used, on
-some devices the minimal latency will be lower than without the server; there is
-no need to wake up at an ALSA period boundary. The timer can be armed to wake up
-when there are an arbitrary number of samples left in the hardware buffer. ALSA
-will always be configured with the largest possible buffer size, yet only some
-fraction of that will be used at any given time.
-
-Audio data will be exchanged through shared memory so that no copying is needed
-(except into the ALSA buffer). Communication will happen through UNIX domain
-sockets. There will be separate communication connections for control (high
-latency, lower priority) and audio data (low latency and higher priority).
-
-At each wakeup a timestamp will be updated that, for playback streams, will
-indicate the exact time at which the next written sample will be rendered to the
-DAC. For capture, the timestamp will reflect the actual time the sample was
-captured at the ADC.
-
-The key to keeping system resource usage low is to do as little as possible in
-the server when it wakes up and similar for the callback in the client. Less
-than two percent of the CPU of a CR48 is used while playing back audio with 20ms
-latency and waking up every 10ms. The minimum the server can do is read in the
-streams, mix them, and write the result to ALSA. Other processing can take place
-in the server; DSP blocks can be configured to process the buffers as they pass
-through, this will add to the processing time and increase the minimum latency.
-
-The lowest latency stream will be used to drive the timer wakeup interval (and
-will have the most accurate latency). Only clients that need to send more data
-will be woken.
-
-### Device Enumeration
-
-The server keeps a separate list of inputs and outputs. The server will listen
-to udev events that notify it of newly added or removed devices. Whenever a
-device appears or disappears, the priority list of devices will be re-evaluated
-and the highest priority device will be used.
-
-Devices will be given a priority based on the device type and the time they are
-inserted. The priority is as follows (for both input and output):
-
-1. Headset jack and USB audio devices.
-2. DisplayPort and HDMI outputs (when EDID indicates the sink is audio
- capable).
-3. Built-in speakers.
-
-If two devices of the same priority are attached, the device that was plugged
-most recently wins.
-
-On device removal, all streams are removed from the device and the device is
-closed. The streams will be moved to the next device in the list when this
-happens.
-
-### Mixing
-
-The server is required to mix for the case where multiple streams are being
-played at once. The mixing will be done immediately before the samples are sent
-to the playback hardware. If a DSP block is enabled, it will be applied
-post-mix.
-
-### Per-Board Configuration
-
-Without a config, the server will automatically discover devices and mute/volume
-controls. This provides all that is needed for x86 most of the time. On x86 the
-main use of config files is to set volume level mappings between the UI and
-hardware, and to configure codec-specific features.
-
-The volume curve file is per-codec, per-device and the format is described in
-the main README file.
-
-ALSA UCM is used to do low level codec config. On ARM systems, this setup is
-necessary to get audio paths routed correctly when a headset is attached and to
-initialize codec setup after start up. In addition to this, the UCM file is used
-to map jacks to audio devices.
-
-### More documents
-
-* [Chrome OS Audio Software
- Overview](https://docs.google.com/document/d/1pDdzlJlNacvOB8CS4Qxg-0aQvEuCK8lFKaWaqckSl3w/edit?usp=sharing)
-* [CRAS ELC
- 2014.pdf](https://drive.google.com/file/d/1WBYe-M_xFaHIajn-hfQRBrKhPkbgHNF9/view?usp=sharing)
-* [Gain in
- CRAS](https://docs.google.com/document/d/1FfTGylzC-uGPhzxnotfxXjDeBPRPIMxkzqdQbQWJ7aE/edit?usp=sharing)
-* [UCM Usage
- Guide](https://docs.google.com/document/d/1AcXZI9dvJBW0Vy6h9vraD7VP9X_MpwHx0eJ6hNc4G_s/edit?usp=sharing) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/cellular-activation/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/cellular-activation/index.md
deleted file mode 100644
index 29ae51fe310..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/cellular-activation/index.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/cros-network
- - 'CrOS network: notes on ChromiumOS networking'
-page_name: cellular-activation
-title: Cellular Activation (and Chrome/CrOS network management API)
----
-
-ActivateCellular (network_menu.cc)
-
--&gt;
-ash::Shell::GetInstance()-&gt;delegate()-&gt;OpenMobileSetup(cellular-&gt;service_path())
-
--&gt; MobileSetupDialog::Show(service_path) \[if kEnableMobileSetupDialog\]
-
--&gt; MobileSetupDialogDelegate::GetInstance()-&gt;ShowDialog(service_path)
-
--&gt; MobileSetupDialogDelegate::GetDialogContentURL \[presumably\]
-
-// returns chrome::kChromeUIMobileSetupURL + service_path_
-
--&gt; browser-&gt;OpenURL(chrome::kChromeUIMobileSetupURL) \[otherwise; resolves
-to chrome://mobilesetup\]
-
-MobileActivator::SetTransactionStatus (mobile_activator.cc)
-
--&gt; StartOTASP
-
--&gt; EvaluateCellularNetwork
-
-MobileActivator::OnNetworkManagerChanged (mobile_activator.cc)
-
--&gt; EvaluateCellularNetwork
-
-MobileActivator::OnNetworkChanged (mobile_activator.cc)
-
--&gt; EvaluateCellularNetwork
-
-MobileActivator::StartActivation
-
--&gt; EvaluateCelluarNetwork
-
-Who calls OnNetworkManagerChanged?
-
-- NetworkLibraryImplBase::NotifyNetworkManagerChanged
-
--&gt; NetworkLibraryImplBase::SignalNetworkManagerObservers
-
-- NetworkMessageObserver::NetworkMessageObserver
-
-- AshSystemTrayDelegate
-
-- NetworkMenuButton
-
-- NetworkScreen
-
-MobileActivator::ChangeState (mobile_activator.cc)
-
--&gt; FOR_EACH_OBSERVER(Observer, observers_, OnActivationStateChanged(network,
-state_, error_description));
-
--&gt; MobileSetupHandler::OnActivationStateChanged (mobile_seutp_ui.cc)
-\[presumably\]
-
--&gt; web_ui()-&gt;CallJavascriptFunction(kJsDeviceStatusChangedCallback,
-device_dict)
-
--&gt; mobile.MobileSetup.deviceStateChanged (mobile_setup.js)
-
--&gt; updateDeviceStatus_
-
--&gt; changeState_
-
--&gt; stopSpinner_ \[if PLAN_ACTIVATION_DONE\]
-
----
-
-MobileSetupDialogDelegate::OnActivationStateChanged (mobile_setup_dialog.cc)
-
-// does nothing
-
-chromeos.connectionManager.setTransactionStatus (connection_manager.js)
-
--&gt; reportTransactionStatus_
-
--&gt; postMessage(msg, 'chrome://mobilesetup')
-
-// seems to be billing related. see onMessageReceived_ in mobile_setup.js
-
-NetworkLoginObserver
-
-// The network login observer reshows a login dialog if there was an error.
-
-NetworkMessageObserver
-
-// The network message observer displays a system notification for network
-
-// messages.
-
-NetworkLibrary interface declarations
-
-- NetworkManagerObserver::OnNetworkManagerChanged
-
-- NetworkObserver::OnNetworkChanged
-
-- NetworkDeviceObserver::OnNetworkDeviceChanged
-
-- NetworkDeviceObserver::OnNetworkDeviceFoundNetworks
-
-- NetworkDeviceObserver::OnNetworkDeviceSimLockChanged
-
-- CellularDataPlanObserver::OnCellularDataPlanChanged
-
-- PinOperationObserver::OnPinOperationCompleted
-
-- UserActionObserver::OnConnectionInitiated
-
-NetworkLibraryImplCros::NetworkManagerStatusChangedHandler
-
-NetworkLibraryImplCros::NetworkManagerUpdate
-
--&gt; NetworkManagerStatusChanged
-
--&gt; NotifyNetworkManagerChanged \[ONLY for PROPERTY_INDEX_OFFLINE_MODE\]
-
-CrosMonitorNetworkManagerProperties
-
--&gt; new NetworkManagerPropertiesWatcher
-
--&gt;
-DBusThreadManager::Get()-&gt;GetFlimflamManagerClient()-&gt;SetPropertyChangedHandler
-
-NetworkLibraryImplCros::UpdateNetworkStatus
-
--&gt; NotifyNetworkManagerChanged
-
-NetworkLibraryImplCros::UpdateTechnologies
-
--&gt; NotifyNetworkManagerChanged
-
-NetworkLibraryImplCros::ParseNetwork
-
--&gt; NotifyNetworkManagerChanged
-
-NetworkLibraryImplCros::ParseNetworkDevice
-
--&gt; NotifyNetworkManagerChanged
-
-AshSystemTrayDelegate: updates status icons
-
----
-
-Network::SetState (network_library.cc)
-
-// processes state change events from connection manager \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/chrome-network-debugging/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/chrome-network-debugging/index.md
deleted file mode 100644
index 8a2447222b7..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/chrome-network-debugging/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/cros-network
- - 'CrOS network: notes on ChromiumOS networking'
-page_name: chrome-network-debugging
-title: chrome network debugging
----
-
-chrome has several debugging tools:
-
-* netlog (chrome://net-internals -&gt; events). see [NetLog: Chrome’s
- network logging
- system](/developers/design-documents/network-stack/netlog), or [the
- list of netlog events and their
- meanings](http://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_log_event_type_list.h)
-* chrome://net-internals/#chromeos -&gt; controls to enable chromeos
- network debugging and to package up log files
-* chrome://net-internals/#tests -&gt; test loading a particular URL
-* network debugger app (in development; contact ebeach@) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-cromo/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-cromo/index.md
deleted file mode 100644
index c572a4854ab..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-cromo/index.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/cros-network
- - 'CrOS network: notes on ChromiumOS networking'
-page_name: fake-cromo
-title: fake-cromo
----
-
-* Implemented in
- [fake-cromo](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/flimflam/test/fake-cromo).
-* Seems to provide a mock implementation of modem-manager (classic)
- APIs, focusing on CDMA.
-* Works with
- [activation-server](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/flimflam/test/activation-server),
- which provides emulation of carrier activation sequence.
-
-Usage:
-
-Start the web server that emulates the carrier activation portal.
-
-# /usr/local/lib/flimflam/test/activation-server &
-
-Rename eth0 to the name of the cellular device, as reported to shill
-
-by the fake modemmanager. (The fake modemmanager is implemented in
-
-[the Modem class in
-flimflam_test](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/flimflam/test/flimflam_test.py&l=106).)
-
-This means that we'll route "cellular" data traffic out our Ethernet
-
-connection. Note, however, that fake-cromo let's us implement a
-
-"captive portal" like mode. (That's implemented using iptables.)
-
-Note further that the name of the cellular device must be pseudo-modem0,
-
-as that's [hard-coded in
-fake-cromo](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/flimflam/test/fake-cromo&l=61)
-(and also used in a [default
-argument](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/flimflam/test/flimflam_test.py&l=128)
-
-in the Modem class.)
-
-# /usr/local/lib/flimflam/test/backchannel setup eth0 pseudo-modem0
-
-Start fake-cromo
-
-# /usr/local/lib/flimflam/test/fake-cromo & \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-gsm-modem/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-gsm-modem/index.md
deleted file mode 100644
index 414a7cd601e..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fake-gsm-modem/index.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/cros-network
- - 'CrOS network: notes on ChromiumOS networking'
-page_name: fake-gsm-modem
-title: fake-gsm-modem
----
-
-* Implemented in
- [fake-gsm-modem](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/flimflam/test/fake-gsm-modem).
-* Seems to serve as a replacement for modemmanager (classic). I.e., I
- think it provides a mock implementation of the MM D-Bus APIs. In
- contrast,
- [fakemodem](/chromium-os/chromiumos-design-docs/cros-network/fakemodem)
- provides a mock implementation of the AT command interface.
-* For data forwarding, you have to use an existing ethernet interface.
- (See comments at top of
- [fake-gsm-modem](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/flimflam/test/fake-gsm-modem).)
-* To test shill (as opposed to flimflam) against fake-gsm-modem,
- follow these steps:
-
-```none
-$ stop flimflam
-$ stop cromo
-$ /usr/local/lib/flimflam/test/veth setup pseudomodem0 172.16.1
-$ /usr/local/lib/flimflam/test/fake-gsm-modem -c tmobile --shill
-$ start flimflam
-```
-
-T-Mobile should now appear as a connectable network in the 'Internet Connection'
-Settings UI. Furthermore, running 'modem status' in crosh should display
-information on TestModem.
-
-Once done with the tests, run the following for cleanup:
-
-```none
-$ stop flimflam
-$ # kill the fake-gsm-modem process
-$ /usr/local/lib/flimflam/test/veth teardown pseudomodem0
-$ start cromo
-$ start flimflam
-```
-
-shill will now interact with cromo. Bear in mind that, as of the writing of this
-entry, the shill daemon is still referred to as flimflam, which is why we call
-`start flimflam` and not `start shill`. This will be changed in the future.
-
-The above steps apply to Chromebooks using a Gobi modem. For any other modem,
-replace `cromo` with the correct modem manager. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fakemodem/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fakemodem/index.md
deleted file mode 100644
index 482760ac520..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/fakemodem/index.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/cros-network
- - 'CrOS network: notes on ChromiumOS networking'
-page_name: fakemodem
-title: fakemodem (for testing celluar modems with AT command interfaces)
----
-
-* Gives pre-programmed answers to AT commands. (Regexp patterns match
- the command, and probably can be used in generating the response.)
-* Implemented in
- [fakemodem.c](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/autotest/files/client/deps/fakemodem/src/fakemodem.c).
-* Used by [modemmanager SMS
- autotest](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/autotest/files/client/site_tests/network_ModemManagerSMS/network_ModemManagerSMS.py).
-* Example regexp tables: [Icera SMS signal test
- patterns](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/autotest/files/client/site_tests/network_ModemManagerSMSSignal/src/fake-icera),
- [generic GSM SMS Signal test
- patterns](http://code.google.com/searchframe#wZuuyuB8jKQ/src/third_party/autotest/files/client/site_tests/network_ModemManagerSMSSignal/src/fake-gsm). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/index.md
deleted file mode 100644
index 99e67e0a9fe..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/cros-network/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: cros-network
-title: 'CrOS network: notes on ChromiumOS networking'
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-mode/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-mode/index.md
deleted file mode 100644
index 1a8572009bf..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-mode/index.md
+++ /dev/null
@@ -1,570 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: developer-mode
-title: Developer Mode
----
-
-[TOC]
-
-# Introduction
-
-Google Chrome OS devices must be:
-
-* Secure - users must be protected from attackers. This protection
- should reasonably extend to inexperienced or naive users.
-* Open - developers must be able to install their own builds of a
- Chromium-based OS, or another operating system (e.g., Ubuntu).
- Developers should not be significantly impaired from using the full
- capabilities of the device.
-
-These two requirements are somewhat at odds. Locking down a device to protect
-users makes it less useful for developers. Openings for developers to run
-modified software easily can also be exploited by attackers.
-
-This document describes:
-
-* Vulnerabilities to which Google Chrome OS devices may be exposed.
-* Use cases we must allow for normal users and developers.
-* A proposed implementation of developer mode that provides both
- openness for developers and security for users.
-* How the implementation protects from vulnerabilities while allowing
- required use cases.
-
-Note that this document is specifically about the developer mode in Google
-Chrome OS devices, not about other Chromium OS-based devices. It's focused on
-developers who want to install a different operating system on a device that
-initially shipped with Google Chrome OS.
-
-# Vulnerabilities
-
-The following vulnerabilities have been considered in this design.
-
-## Attacker with complete physical access
-
-An attacker with physical possession of the device over an extended period. The
-attacker has access to tools including a soldering iron.
-
-The attacker can remove the EEPROM containing our read-only firmware and replace
-it with compromised firmware which does not perform signature checks.
-Alternately, the attacker could simply replace the embedded controller's EEPROM
-with code implementing a keylogger.
-
-Based on YouTube videos of speed disassembly and assembly of computers and
-consumer electronics devices, we believe that a practical attack could be
-mounted in as little as 5 minutes.
-
-This attack is unlikely to be made against a large number of devices.
-
-Subcases:
-
-* Evil maid: The attacker modifies a targeted user's netbook so that
- it captures passwords, etc. The attack can be reversed by the
- attacker given a second possession of the device, leaving no
- evidence of the attack.
-* Malicious return: The attacker modifies a device then returns it to
- a store. It could act as a keylogger, phoning home at a later date
- with credentials of the next purchaser.
-* Device swap: The attacker purchases the same model of netbook as the
- targeted user. When the targeted user is distracted, a replacement
- netbook is swapped for the user's netbook.
-
-We cannot prevent this attack.
-
-## Attacker with casual physical access
-
-An attacker with short-term access to a device—for example, a netbook briefly
-left unattended at a conference or coffee shop.
-
-The attacker may be able to insert a USB key and reboot the device, but cannot
-make extensive physical modifications. The attacker may be able to unscrew a
-panel and flip a switch.
-
-Subcases:
-
-* The attacker attempts to quickly install malicious software on a
- temporarily-unattended machine.
-* The attacker walks down a row of machines at a trade show or store,
- installing malicious software on them (password sniffer, keylogger,
- etc).
-* A store employee attempts to install malicious software on a large
- number of computers for sale.
-
-We should protect against this attack by making it as costly as the physical
-attack, in terms of time required and noticeability to passers-by.
-
-## Attacker with no physical access
-
-An attacker with no physical access attempts to alter the device to persistently
-run modified software. This is the most dangerous attack, due to its ability to
-affect a large number of devices.
-
-We must prevent this attack. That is, it should not be possible to persistently
-control a device without first having physical access to it.
-
-## Developer borrows a device
-
-A developer buys or borrows a device, installs their own software, then returns
-the device without reinstalling Google Chrome OS.
-
-The custom software installed is unlikely to be intentionally malicious. The
-primary risk is that developer images may not autoupdate, so the software on the
-device will not be patched to close vulnerabilities. This risk has manifested
-recently in smartphones with user-modified ('jailbroken') operating systems.
-
-Subcases:
-
-* Return to store: The store may boot the device to make sure it's not
- broken, but will not generally open the case to check for hardware
- modification or switch state. The next user buys the device and
- starts using it. The first time the user boots the device, they're
- likely to be right in front of it, so will notice (but may not
- understand) a warning screen.
-* Return to user: It may take several boots for the user to actually
- be present at the device during boot, but it's very likely the user
- eventually sees a warning screen.
-
-We should protect against these cases.
-
-## Other vulnerabilities
-
-There are other potential data and device vulnerabilities, including:
-
-* Data corruption caused by cosmic rays, aborted auto-updates,
- defective drives, etc.
-* Theft of a device.
-
-These are outside the scope of this document since they do not relate to
-developer mode.
-
-# Use cases to allow
-
-The following use cases have been considered in this design.
-
-## Normal user
-
-A normal user generally runs only Google Chrome OS on their device. They are not
-generally interested in running any other operating system on the device.
-
-When faced with recovery mode, many users are likely to return the device to the
-store or call tech support.
-
-The most naive users may not understand the significance of warning screens. We
-should not be asking the user to make uninformed or cryptic decisions.
-
-We must allow this use case.
-
-## Developer
-
-A developer builds Chromium OS or their own OS and wants to install it on a
-device.
-
-The developer has access to developer tools, the target device, and any
-documentation which came with the device. They are experienced enough to use a
-screwdriver to open a panel, but most will not be willing to use a soldering
-iron to modify the device or void their warranty.
-
-The developer expects similar performance while using their own OS as they have
-while using Google Chrome OS. That is, boot time and the boot process should not
-be significantly impaired from a normal device.
-
-It is acceptable for the initial install of a developer OS to be slow, as long
-as it is not painfully slow. Subsequent installs should be fast, so that a
-developer can do rapid development.
-
-The developer should be able to go back easily to running Google Chrome OS, at
-which point they should have access to automatic updates. This case also covers
-responsible developers who buy or borrow a device, try it out with their own OS,
-then run recovery mode to restore the device before returning it.
-
-Subcases:
-
-* Chromium OS developer: They will use the device in a manner similar
- to Google Chrome OS, perhaps with some added capability (shell
- access, etc). This is a common and valuable developer use case;
- these developers contribute back to the Chromium OS project.
-* Interactive developer: The developer uses the device like a normal
- laptop.
-* Remote developer: The developer uses the device as a media server,
- set-top box, or some other use case where they do not have direct
- access to the keyboard and primary display.
-
-We must allow these use cases. If we don't, it is likely developers will hack
-holes in verified boot to enable them.
-
-## User installs prebuilt OS distribution (other than Google Chrome OS)
-
-This is much the same as the developer use case. The difference is that the user
-did not build the install. This is probably more common than developer installs,
-particularly for use cases such as media servers or set-top boxes.
-
-We should allow this use case.
-
-## Manufacturer
-
-Normally, read-only firmware is fixed, and rewritable firmware is signed by
-Google. This introduces additional signing steps and delay into board bringup
-and development.
-
-A vendor involved in manufacturing a device (OEM, ODM, BIOS vendor, component
-vendor) must be able to develop and debug firmware, including the
-normally-read-only parts. For example, the vendor must be able to fix bugs in
-recovery mode.
-
-The vendor is capable of disassembling a device and making hardware
-modifications involving soldering
-
-It is acceptable for modifying a device to disable [write
-protection](/chromium-os/firmware-porting-guide/firmware-ec-write-protection) to
-be slow, as long as it is not painfully slow. Subsequent installs should be
-fast, so that the vendor can do rapid development.
-
-It is not necessary for the modifications to be reversible easily. For example,
-removing the modifications can require re-disassembling the device and
-re-soldering components.
-
-We must allow this use case, to reduce the time and cost of producing devices
-for Google Chrome OS.
-
-# Implementation
-
-The following sections describe the implementation we will use. This design
-supports developers while protecting normal users, and requires no changes to
-the typical device manufacturing process.
-
-## Developer switch
-
-The device will have an on/off developer switch which is not easily accessible
-by a normal user.
-
-The switch is reversible (that is, it can be turned back off once turned on). It
-is turned off by default. It must be turned on physically; there must be no way
-to turn this switch on without physically manipulating the device.
-
-Approved implementations for this switch:
-
-* A switch underneath a screw cover.
-* A switch underneath/behind the battery, such that the battery must
- be removed to access the switch.
-* Pressing Control+D at the recovery screen, where the device uses the
- approved keyboard recovery mechanism \[1\].
-* Pressing Control+D at the recovery screen followed by pressing the
- recovery button, where devices have a physical recovery button.
-
-Other implementations must be approved by Google in advance.
-
-When the developer switch is off, only code signed by Google will run on the
-device. Any other code will cause the device to reboot into recovery mode. This
-protects against remote attack.
-
-Note 1: The approved keyboard recovery mechanism contains a Google-designed
-circuit that provides assurance that the executing firmware is the read-only
-version, and that the user is physically present.
-
-## Mode transition wipe
-
-On the transition between dev and normal modes, there will be a 5 minute delay
-during which the OS will wipe the stateful partition of the device. The delay
-and wipe occur on the first boot after the dev switch is enabled.
-
-The goal of this delay is to increase the difficulty of drive-by attacks to the
-same level as physically compromising the device. (We could optionally play an
-audio track—perhaps something along the lines of "Help, help, I'm being
-repressed!"—or require user interaction during this delay, to make it more
-noticeable if an attacker is attempting to compromise a device in a public
-place.)
-
-Note that the delay protects both normal users and developers; an attacker
-trying to change the image on a developer's machine (for example, at a Linux
-conference, where Chromium OS machines are likely to be common) will still incur
-the delay.
-
-## Recovery button always triggers recovery mode
-
-The device will have a mechanism through which it always boots in [recovery
-mode](http://www.chromium.org/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery),
-regardless of the position of the developer mode switch. This provides a path
-for users and developers to get back to Google Chrome OS, with all its safety
-and autoupdates.
-
-Approved implementations for the recovery button are:
-
-* Physical recovery button that must be held down on boot.
-* Google approved keyboard controlled recovery circuitry, whereby a
- user can hold three keys to get to recovery.
-
-## Boot errors always trigger recovery mode
-
-The firmware always checks the kernel signature at boot time. If the signature
-is invalid, then the firmware checks the backup kernel. If both kernels are
-invalid, the firmware runs recovery mode.
-
-Google will provide a utility for developers to sign their kernels based on a
-self-generated certificate.
-
-Developer kernel signatures are not tied to a single target device; that would
-prevent users from installing prebuilt OS distributions. In developer mode, the
-cryptographic signature is cannot verified since the user’s public key is not
-contained in the firmware; only the signing structure and checksums are used to
-“validate” a self-signed kernel.
-
-## Recovery boot image
-
-The recovery boot image is Google-signed software on a removable drive. The
-recovery boot image is what copies new firmware and software from the removable
-drive to the fixed drive when booted in [recovery
-mode](http://www.chromium.org/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery).
-Recovery mode firmware will load only Google-signed software from the removable
-drive. Those kernels contain their own initramfs, which copies the recovery
-image onto the fixed drive.
-
-If the developer switch is off, the recovery boot image will refuse to copy
-anything but Google-signed software to the device. This protects against
-drive-by attacks; the attacker must have time to get to the developer switch.
-This also protects normal users from a remote attacker who stores a malicious
-payload on the user's SD card and then attempts to reboot into recovery mode to
-install that payload.
-
-If the developer switch is on, the behavior of the recovery image depends on the
-keys used to sign the current firmware/kernel/image and the new
-firmware/kernel/image to be installed.
-
-* If the new key is Google-generated, there is no delay. This is a
- user trying to get back to Google Chrome OS.
-* If the new key matches the current key, there is no delay. This is a
- developer updating their own system.
-* If the new key is not Google-signed, and is different than the
- current key, there is a 5-minute delay before copying the payload to
- the fixed disk.
-
-During the delay, the recovery image will display the developer agreement and
-instructions on how to reinstall Google Chrome OS if you decide you don't like
-the image you're installing. The goal of this delay is to increase the
-difficulty of drive-by attacks to the same level as physically compromising the
-device. (We could optionally play an audio track—perhaps something along the
-lines of "Help, help, I'm being repressed!"—or require user interaction during
-this delay, to make it more noticeable if an attacker is attempting to
-compromise a device in a public place.)
-
-Note that the delay protects both normal users and developers; an attacker
-trying to change the image on a developer's machine (for example, at a Linux
-conference, where Chromium OS machines are likely to be common) will still incur
-the delay.
-
-## Boot time warning screen
-
-When the device boots normally in developer mode (that is, not in recovery
-mode), it displays a warning so that ordinary users won't accidentally end up in
-the wrong operating system.
-
-At boot time, if the developer switch is on and the kernel is signed, but not by
-Google, then a warning screen will be displayed by the firmware. The UI varies
-slightly with the device, but may show a message something like this:
-
-**WARNING!**
-**YOUR COMPUTER IS NOT RUNNING GOOGLE CHROME OS!**
-**PRESS THE SPACE BAR TO FIX THIS.**
-
-This screen is intended to be a little scary; for example, it should use colors
-and symbols designed to indicate danger / badness. It must support i18n.
-
-If the user follows the on-screen instructions, the device will either revert to
-normal mode or reboot into recovery mode. The on-screen instructions typically
-involve pressing SPACE or RETURN, since these are the most common keys users
-press when trying to get past a screen without reading it.
-
-Upon seeing this screen, non-developer users will either return to normal mode,
-run recovery mode, call tech support, or give up and return the device. Any of
-these outcomes protects the user's data.
-
-If the user presses Control+D, the device will bypass the warning screen waiting
-period and continue booting the developer-signed code. Note that there is no
-indication on the warning screen that Control+D is a valid option, so naive
-users won't be tempted to press it. The Control+D sequence will be documented on
-the Chromium OS developer website (you're reading it now), where it is easy for
-developers to discover. We use the Control modifier so that accidentally bumping
-the keyboard will not trigger it. For interactive developers, this reduces the
-pain threshold of the warning screen to a single keypress.
-
-If the user presses a key other than Control+D, space bar, Enter, or Esc, no
-action is taken. This reduces the annoyance level for developers; accidentally
-pressing D+Control or Control+S does not reboot into recovery mode.
-
-After 20 seconds of displaying the warning screen, the device should beep. This
-will alert a nearby user to look at the screen and see the warning. Interactive
-developers are likely to press Control+D before this time, so will not be forced
-to endure the beep.
-
-If the user waits 30 seconds, the device will continue booting the
-developer-signed code. This is necessary to support the remote developer subcase
-above. It does mean that a naïve user could keep ignoring this screen. This is a
-reasonable tradeoff, given that requiring a keypress invites developers to hack
-verified boot.
-
-In addition, there are bios flags that can be set to enable a user to trigger
-other interactions, including but not limited to:
-
-* dev_boot_usb - this enables a device to boot from USB when a user
- presses the Control+U keys at the boot time warning screen.
-* dev_boot_legacy - this enables a device to boot from SeaBIOS when a
- user presses the Control+L keys at the boot time warning screen.
-
-## Manufacturer hardware modifications
-
-The device can be modified to disable the write protection on the firmware. This
-modification should involve partial device disassembly and soldering, and will
-void the device warranty. Disassembling the device far enough to make this
-modification should require destroying a tamper-resistant seal, so that it's
-obvious the device has been disassembled.
-
-Once this modification is performed, the manufacturer can reprogram all the
-firmware.
-
-On a device where write protection is enabled in hardware (for example, an
-EEPROM with a write protect enable line), this modification may take the form of
-removing a resistor which pulls the write protect enable line active, and/or
-adding a resistor to another set of pads to pull the write protect enable line
-to the disabled state.
-
-On a device where write protection is enabled in software (for example, a NAND
-flash with a write-once-per-boot instruction which prevents further write
-instructions that boot), this modification may take the form of an additional
-input GPIO whose state is controlled by a resistor. The boot stub firmware will
-read the GPIO state before writing the boot instruction; if the GPIO is
-asserted, the boot stub firmware will not issue the write instruction to the
-NAND flash.
-
-Alternately, the EEPROM, which is normally soldered directly to the motherboard,
-may be replaced with a socketed EEPROM to facilitate reprogramming via an
-external programmer.
-
-To prevent devices with disabled write protection from being shipped
-accidentally to consumers, final manufacturing tests should verify that the
-modifications have not been made. That is, the tests should attempt to write to
-the read-only portion of the firmware and/or verify that a write protection
-GPIO, if any, is asserted.
-
-Note that a sufficiently advanced developer willing to void the warranty on
-their device may be able to make the hardware modifications to disable write
-protection and replace the normal Google Chrome OS firmware with their own
-firmware. Such a developer would also be able to desolder, remove, and rewrite
-the EEPROM chip with their own firmware, so including manufacturer support does
-not represent a significant reduction in security.
-
-# How this design addresses vulnerabilities and use cases
-
-## Attacker with complete physical access
-
-We cannot prevent this attack.
-
-## Attacker with casual physical access
-
-The attacker must have sufficient control of the machine to turn on the
-not-easily-accessible developer switch.
-
-Since the attacker's code is signed with a different key than the existing
-software on the device, the recovery image will delay installing the new image.
-The attacker must wait around near the device to interact with the machine
-during this time. This raises the risk of discovery for the attacker.
-
-If the attacker has sufficient control of the device that they're not worried
-about unscrewing a panel, removing the battery, and interacting with the device
-for 5 minutes, that's tantamount to complete physical access. As with the
-previous case, an attacker with that level of access cannot be prevented.
-
-## Attacker with no physical access
-
-If there is a vulnerability in Google Chrome, the attacker may be able to obtain
-temporary control over the device. Users could potentially enter their
-credentials into this compromised device and run modified/unsafe code.
-
-The attacker will not be able to maintain long-term persistent control over the
-device. When the device next reboots, the verified boot process will detect the
-modified software and trigger recovery mode (if the developer mode switch is
-off) or a warning screen (if the dev mode switch is on).
-
-## Developer borrows a device
-
-If the developer is a nice developer (and they remember to restore the device),
-they run recovery mode on the device before returning it.
-
-If the developer returns the device without running recovery mode or turning the
-developer switch back off, the device will show a warning screen at boot time.
-
-Stores should be advised to boot returned Google Chrome OS machines. If they do,
-they'll notice the warning screen and can refuse the return (at which point the
-developer will turn off the developer switch and run recovery mode and then
-successfully return the device).
-
-If the store does not check a returned device, it could be sold to a user while
-still containing developer software. The first time a new user boots their
-device they're likely right in front of it (after all, they'll want to see our
-5-second boot time) and will see the warning screen. At that point they'll
-likely either return/exchange the device, call tech support, or fix it
-themselves.
-
-A user who lent their device to a developer will likely notice the warning
-screen, or that the login screen looks different. At this point they'll complain
-to the developer ("Hey sonny, what did you do to Grandma's computer?"), who can
-fix it.
-
-Note that in all of these cases, the developer software is unlikely to be
-harmful in itself; the risk is that since developer mode removes some of the
-normal-mode protections, the user is more vulnerable to attacks.
-
-## Normal user
-
-With the developer mode switch off, a normal user can only run Google Chrome OS.
-Anything else will behave like the accidental corruption case—the device will
-either repair itself or trigger recovery mode.
-
-## Developer
-
-A developer can modify the software on the device, installing their own Chromium
-OS or other OS. Opening a screw panel and flipping a switch is easy and does not
-void the device warranty.
-
-To run an OS which requires legacy BIOS, they can replace the kernel with
-software which sets up legacy interrupts and then runs something int19h-like to
-load that OS. This is even easier since we're using GUID partition tables; the
-legacy OS will only see the partitions described in the legacy MBR which
-precedes the GUID partition table, so won't see the dedicated kernel partitions.
-
-A developer using the device interactively needs to press a single key at boot
-time to dismiss the warning screen. This is minimally invasive; it delays boot
-time by only a second.
-
-A developer using the device remotely will need to wait 30 seconds after reboot
-for the warning screen to time out. This is not likely to be a significant
-impediment for remote uses; systems like media servers or set top boxes are
-rebooted infrequently.
-
-## User installs prebuilt OS distribution (other than Google Chrome OS)
-
-Same as Developer case. The modification to enable developer mode is easy, and
-the device is comparably usable.
-
-## Manufacturer
-
-A manufacturer can modify the device hardware to allow reprogramming the entire
-firmware. Once the modification has been made, firmware development can proceed
-at a rate similar to other unprotected devices.
-
-# Revision History
-
-1.04 (1 May 2014) - Clean up several minor inaccuracies.
-
-1.03 (20 Mar 2014) - Generalized from invalid kernel to "boot errors" trigger
-recovery mode.
-
-1.02 (3 Mar 2014) - Changed "unsigned" to "unverified" in kernel discussion.
-
-1.01 (16 Mar 2010) - Clarified language for disabling write protect (previously
-known as 'manufacturer mode').
-
-1.0 (15 Mar 2010) - Published to chromium.org.
-
-0.1 (12 Dec 2009) - Initial version. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-shell-access/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-shell-access/index.md
deleted file mode 100644
index 2b1f6075b29..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/developer-shell-access/index.md
+++ /dev/null
@@ -1,167 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: developer-shell-access
-title: Developer Shell Access
----
-
-[TOC]
-
-## Introduction
-
-Developers often need shell access to their Chromium OS device in order to
-sanely debug things in the system. Think opening crosh and typing "shell", and
-then logging in as root with "sudo". Or logging into a VT console when the UI is
-broken. Or logging in remotely via ssh.
-
-However, this system is at odds with providing a simple system that is as secure
-as possible, so we need to analyze the trade offs.
-
-## Goals
-
-* Security should not be impacted when developer mode is turned off,
- * both directly -- e.g. user sitting in front of the machine,
- * or indirectly -- e.g. an exploit that manages to execute
- programs outside of the browser as the same user.
- * This means no shell, ssh, VT, etc... access.
-* The system should be dynamic.
- * Take a normal verified/secure image, put it into developer mode,
- and shell access will start working.
-* Passwords/ssh keys cannot be static at build time in release images.
- * Users may opt to set their own passwords in their own personal
- builds.
- * Test images may include preset authentication (discussion of
- this is ongoing, but out of scope of this doc).
-* Users can enable password protection on the fly.
- * Keeps people from sitting down, getting a shell, and then
- running sudo on your system.
- * Passwords protect all avenues of access equally.
-
-## Summary
-
-TODO(vapier)
-
-## Buildtime
-
-TODO(vapier)
-
-## Runtime
-
-### Developer Mode Disabled
-
-#### VT Switching
-
-When X is launched by the session manager, it is passed the -maxvt flag set to
-0. This way X itself ignores the key combos.
-
-#### Sysrq Magic Key
-
-The hotkey-access.conf script will turn off all sysrq requests except for the
-"x" key by updating `/proc/sys/kernel/sysrq`.
-
-#### Crosh Shell
-
-The crosh script is still available, but it does not allow access to the "shell"
-command (among others).
-
-#### SSH
-
-The ssh sever is not included in the base image, so it will never autostart. If
-it was started somehow, then the sections below apply (which is to say, it still
-wouldn't allow logins).
-
-#### sudo/su
-
-These cannot be run directly (as no shell is available), but even then, access
-is denied via pam.
-
-#### pam
-
-A custom pam stack ("chromeos-auth") is installed that handles authentication
-for the "login" and "sudo" services. When developer mode is disabled, this stack
-will skip itself and continue to the normal system stacks.
-
-For more details on pam, see [The Linux-PAM System Administrators'
-Guide](http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html).
-
-#### groups
-
-The chronos account is not part of the admin groups that would implicitly grant
-access (e.g. `wheel`).
-
-#### passwords
-
-The system password database (/etc/shaddow) is in the read-only rootfs and
-cannot be modified. The default images will list accounts with passwords set to
-"\*" (so that password authentication will fail).
-
-The user custom dev mode password is not checked at all (see the pam section
-above).
-
-### Developer Mode Enabled
-
-#### VT Switching
-
-When X is launched by the session manager, it is passed the -maxvt flag set to
-2. This allows access to the VT2 console. Access is controlled by pam.
-
-#### Sysrq Magic Key
-
-The hotkey-access.conf script will enable all sysrq requests.
-
-#### Crosh Shell
-
-The crosh script allows access to the "shell" command (among others).
-
-#### SSH
-
-If it is launched by hand, or using a test image that autolaunches it, access is
-controlled by the sections below.
-
-#### sudo/su
-
-Access is controlled by pam.
-
-#### pam
-
-A custom pam stack ("chromeos-auth") is installed that handles authentication
-for the "login" and "sudo" services. When developer mode is enabled, this stack
-will:
-
-* If a custom devmode password is set
- * That password is allowed for authentication
-* If a custom devmode password is not set
- * If the account is in /etc/shadow
- * Access is not allowed
- * If the account is in /etc/shadow but no password set yet
- * Passwordless access is granted
- * If the account is in /etc/shadow with a password set
- * Access is not allowed
-
-Note that this only applies to this particular stack. Other pam stacks may
-allow/deny independently.
-
-For more details on pam, see [The Linux-PAM System Administrators'
-Guide](http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html).
-
-#### groups
-
-The chronos account is not part of the admin groups that would implicitly grant
-access (e.g. `wheel`).
-
-#### passwords
-
-The system password database (/etc/shaddow) is in the read-only rootfs and
-cannot be modified. The default images will list accounts with passwords set to
-"\*" (so that password authentication will fail).
-
-The user may set a custom password at runtime with the `chromeos-setdevpasswd`
-script which is checked by pam.
-
-## References
-
-* http://crbug.com/182572
-* http://crbug.com/217710 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/disk-format/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/disk-format/index.md
deleted file mode 100644
index 379c29dc3ed..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/disk-format/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: disk-format
-title: Disk Format
----
-
-## This page has moved to <https://chromium.googlesource.com/chromiumos/docs/+/HEAD/disk_format.md>. Please update the link that brought you here.
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter (1).png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter (1).png.sha1
deleted file mode 100644
index 0ac01ce3963..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1ce2ef6046b34ac98e235d918c766bbe54334b96 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter.png.sha1
deleted file mode 100644
index 138bcfac772..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/EC-3PO- The EC console interpreter.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8c87302945ad93926c3af0d0c98db38e1282efc4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/index.md
deleted file mode 100644
index 3a827cf606a..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/ec-3po/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: ec-3po
-title: 'EC-3PO: The EC console interpreter'
----
-
-This page has been [moved to the new CrOS EC markdown
-docs](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/docs/ec-3po-design.md);
-please visit it there. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flowpng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flowpng.sha1
deleted file mode 100644
index 4e1910f7909..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flowpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-78d314543ff53965f1408aace1d438f2155ca021 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updaterpng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updaterpng.sha1
deleted file mode 100644
index 32d76aceff9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updaterpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3c0e4c2bcebbf6260a9f7b1d1db66fc3441e4813 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/index.md
deleted file mode 100644
index e0c2ce52ff0..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/index.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: filesystem-autoupdate-supplements
-title: File System/Autoupdate Supplements
----
-
-[TOC]
-
-This document provides a set of brief Chromium OS design supplements, covering
-areas related to the file system and autoupdates.
-
-## Reinstallation
-
-Reinstallation requires a recovery image (on a USB drive or SD card) to be
-attached to the system. When the system boots, the user may force reinstallation
-by forcing the firmware into recovery mode by pressing a recovery button. The
-exact details of how the firmware accomplishes this are outside the scope of
-this document.
-The recovery image performs the actions described in the following diagram:
-
-![](/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_image.png)
-
-## Firmware updating
-
-The firmware discussed in this document references a firmware designed by Google
-for Chromium OS-based devices. We recommend that devices that support the Google
-firmware use that firmware; that lets them take advantage of the boot time,
-security, and recovery features discussed in the [Firmware Boot and
-Recovery](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery) and
-[Verified Boot](/chromium-os/chromiumos-design-docs/verified-boot) documents.
-The firmware is covered in more detail in the [Firmware Boot and
-Recovery](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery)
-document, but here is how it will work from the autoupdate perspective.
-We plan to generally update the firmware after successful boot of a new image
-that contains new firmware to install, but we will be able to force installation
-of new firmware before an update is applied if necessary.
-The firmware contains a stub that can boot into either of two on-chip boot
-loaders (A or B). The stub first tries to boot from A. If A's checksum fails, it
-boots B. If B's checksum also fails, it goes into recovery mode.
-The firmware updater is a userspace program that runs on system boot. It
-performs the following actions:
-
-![](/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/firmware_updater.png)
-
-## Bit rot evasion (corruption on the hard drive)
-
-Note: it's unclear how much we expect to be impacted by drive corruption.
-In this scheme, we take advantage of the fact that we could have two identical
-system partitions.
-Note that this is an early design that may change over time based on feedback.
-
-We use the extra bits in the partition table as follows. Note that we have 8
-bits in each byte reserved for the bootable flag. This gives us 7 unused bits
-per partition for the boot loader.
-
-![](/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bits.png)
-
-0x80 Bootable flag: this partition can be booted. This bit being set implies
-that it's a good partition to boot from; it's been vetted. 0x40 Tryboot flag:
-this partition, which must be bootable, should be booted *this* time, in the
-event of multiple bootable partitions being found. 0x20-0x04 Unused. 0x02-0x01
-Attempt boot counter, also known as the "remaining_attempts" flag. This takes
-precedence over bootable/tryboot. For more information, see the [File
-System/Autoupdate](/chromium-os/chromiumos-design-docs/filesystem-autoupdate)
-document.
-
-The boot loader flow is then:
-
-![](/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/bootloader_flow.png)
-
-Open issue: We could use a third system partition. This comes at a cost of
-space, but lets us *always* have a backup partition ready, even midway through
-an autoupdate. If a system partition is 200MB, we might do this. If it's 1 GB,
-we might not want to.
-
-## Stacking updates
-
-Updates will be stackable. In other words:
-
-Updates can be applied, one after another as they come out, without a reboot.
-So, for example, if you boot into version n, then update the other partition to
-n+1 but don't reboot, you're still running n. Then, if n+2 comes out, we will
-update from n+1 to n+2 in the other partition, while remaining booted into n.
-
-## Forced reboot
-
-We will be able to force a reboot should we need to apply an emergency security
-update.
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bitspng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bitspng.sha1
deleted file mode 100644
index 50a3fefab2a..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/partition_extra_bitspng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7c003fd220f32205a68c7be80583e170f582c8ef \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_imagepng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_imagepng.sha1
deleted file mode 100644
index 16b2d05588c..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements/recovery_imagepng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-db186b1b40fa1bab9c3f4d5671102fce435ce082 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/ChromeOSFilesystemAutoupdate.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/ChromeOSFilesystemAutoupdate.png.sha1
deleted file mode 100644
index af4ea6b5d64..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/ChromeOSFilesystemAutoupdate.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eec9fe00e6f6cff1a5fbf01e7c1a0d5b5573f349 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/index.md
deleted file mode 100644
index 0102a9aae50..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/filesystem-autoupdate/index.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: filesystem-autoupdate
-title: File System/Autoupdate
----
-
-[TOC]
-
-## Abstract
-
-This document describes the Chromium OS file system and the autoupdate system.
-
-* We expect regular updates to Chromium OS to add new functionality,
- improve system performance, and enhance the user experience.
-* The autoupdate mechanism aims to provide seamless and secure updates
- to the latest version of Chromium OS. No user interaction is
- required.
-* Updates usually come in the form of deltas (i.e. only the parts of
- the system that changed are downloaded) which are downloaded to a
- backup boot partition. Upon reboot, the backup partition becomes the
- primary.
-* In case there is a problem with the update, the system can revert to
- using the previous partition.
-* One way in which we secure Chromium OS is by keeping the partition
- containing the OS and other system files read-only. All temporary
- user state (such as browser caches, cookies, etc) is stored on a
- separate partition.
-
-## Goals
-
-The autoupdate system has the following goals:
-
-* Updates are delta-compressed over the wire.
-* Delta updates are quick to apply.
-* Root file system is mounted read-only (another mount point is
- read/write for storing state).
-* Device can automatically revert to previous installed version of the
- OS if the newly installed OS fails to boot properly.
-* Updates are automatic and silent.
-* Updates should be small.
-* System protects users from security exploits.
-* System never requires more than one reboot for an update.
-* There's a clear division between the storage locations on the drive
- for system software and for user data.
-* The new update must be set bit-for-bit from the server, since we
- will be signing each physical block on the system partition. (For
- more information, see the [Verified
- Boot](/chromium-os/chromiumos-design-docs/verified-boot) design
- document.)
-
-## Partitions
-
-A drive currently contains at least these partitions:
-
-* One partition for state resident on the drive (user's home
- directory/Chromium profile, logs, etc.)—called the "stateful
- partition."
-* Two partitions for the root file system.
-
-### Root file system
-
-Only one of the two partitions designated for the root file system will be in
-use at a given time. The other will be used for autoupdating and for a fallback
-if the current partition fails to boot.
-While a partition is in use as the boot partition, it's read-only until the next
-boot. Not even the autoupdater will edit the currently-booted root file system.
-We will mount the stateful partition read-write and use that for all state that
-needs to be stored locally.
-
-During autoupdate, we will write to the other system partition. Only the updater
-(and apps running as root) will have access to that partition.
-
-## **The update process**
-
-### Successful boot
-
-The update process relies partly on the concept of a "successful boot." At any
-given point, we will be able to say one of the following things:
-
-* This system booted up correctly.
-* This system booted up incorrectly.
-* The system is currently attempting to boot, so we don't know yet.
-
-We consider a boot successful if the updater process can successfully launch.
-Once a system has booted successfully, we consider the other root partition to
-be available for overwriting with an autoupdate.
-
-### Limiting the number of boot attempts
-
-An updated partition can attempt to boot only a limited number of times; if it
-doesn't boot successfully after a couple of attempts, then the system goes back
-to booting from the other partition. The number of attempts is limited as
-follows:
-When a partition has successfully been updated, it's assigned a
-remaining_attempts value, currently 6. This value will be stored in the
-partition table next to the bootable flag (there are unused bits in the GPT that
-the boot loader can use for its own purposes). The boot loader will examine all
-partitions in the system; if it finds any partition that has a
-remaining_attempts value &gt; 0, it will decrement remaining_attempts and then
-attempt to boot from that partition. If the boot fails, then this process
-repeats.
-If no partitions have a remaining_attempts value &gt; 0, the boot loader will
-boot from a partition marked bootable, as a traditional boot loader would.
-
-### Diagram
-
-Here's a diagram of the boot process:
-
-<img alt="image"
-src="/chromium-os/chromiumos-design-docs/filesystem-autoupdate/ChromeOSFilesystemAutoupdate.png">
-
-## Supplements
-
-For a detailed design into how delta updates are generated and applied, see:
-[Autoupdate Details](/chromium-os/chromiumos-design-docs/autoupdate-details).
-For supplementary information about related material, see the
-[Filesystem/Autoupdate
-supplements](/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements)
-document.
-
-## **Other notes**
-
-* All updates directly overwrite the new partition and require no
- temporary space.
-* We download the update over HTTPS, requiring a server certificate
- signed by the one Certification Authority that issues OS provider's
- SSL certificates.
-* Updates are hashed and checksummed. The update servers may sign
- updates as well. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/ChromeOSFirmwareBootandRecoveryPUBLISHED.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/ChromeOSFirmwareBootandRecoveryPUBLISHED.png.sha1
deleted file mode 100644
index 7756bbfff8f..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/ChromeOSFirmwareBootandRecoveryPUBLISHED.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce8a9f66d8478465edd3f8fbdd5093ca4042ea38 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/eeprom-mappng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/eeprom-mappng.sha1
deleted file mode 100644
index b7f1b07125a..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/eeprom-mappng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c9cc47e20ceabee1edf8c845d25706f0188d1e29 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/flowchart1png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/flowchart1png.sha1
deleted file mode 100644
index a53bcccae45..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/flowchart1png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b732e2208e02649607ff8c8acff9ce1beb10d2a6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/index.md
deleted file mode 100644
index a11718e3382..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/index.md
+++ /dev/null
@@ -1,695 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: firmware-boot-and-recovery
-title: Firmware Boot and Recovery
----
-
-[TOC]
-
-## Abstract
-
-* The layout and structure of firmware for Chromium OS is designed for
- security (see [Verified
- Boot](/chromium-os/chromiumos-design-docs/verified-boot)
- documentation), recovery and development.
-* All firmware will contain a recovery code path, which will restore
- the machine to its original Chromium OS state. This recovery code
- path will be initiated either when any chain in the boot path is not
- verified or when a user manually triggers recovery mode, likely via
- an explicit recovery button on the device.
-* Chromium OS wants to support developers as well. Developers are
- provided with a means of running alternate software. In the
- alternate boot paths, the user is notified that they are not running
- a boot path provided as part of Chromium OS.
-* The boot and recovery procedures outlined will be implemented and
- required for all Chromium OS platforms regardless of architecture
- (ARM/Intel/etc...).
-
-This document describes the firmware boot process, including detection and
-recovery of corrupted or hacked firmware/software.
-
-## Potential problems
-
-The firmware boot process must be able to detect the following problems and, if
-possible, repair them.
-
-### Firmware
-
-1. Incomplete update: An update of the firmware is interrupted. This
- leaves the portion of the firmware which was being updated in an
- unknown or corrupt state. For example, if the update is interrupted
- after a firmware block is erased but before it is reprogrammed, that
- block is empty.
-2. Attack: An attacker compromises the software and is able to
- reprogram the firmware. For example, an exploit of an unpatched
- kernel vulnerability. In this case, both the main and backup
- firmware may be compromised.
-3. Corruption: The EEPROM holding the firmware becomes corrupted in the
- sectors containing writable/updatable firmware.
-
-**Software**
-
-1. Incomplete update: An update of the software on the drive is
- interrupted. This leaves the rootfs partition in an unknown state.
-2. Attack: An attacker compromises the software and is able to rewrite
- the data on the drive (rootfs or partition table).
-3. Malicious user: A malicious user installs developer mode onto the
- device, leaving behind a trojan, then returns the device.
-4. Corruption: The drive becomes corrupted in the partition table or
- rootfs partition.
-5. Crash: Device crashes on boot due to bad software. For example, the
- device is updated with the wrong image. This prevents the normal
- autoupdate process from running.
-
-**Out of scope**
-
-The following problems are outside the scope of this document in its current
-form:
-
-1. An attacker with physical access to the device opens the device and
- alters its innards. This includes:
- * Jumpering the EEPROM to gain write access to the read-only
- portion.
- * Replacing the EEPROM.
- * Otherwise altering the circuit board (adding piggyback chips,
- etc).
-2. Exploits involving the normally-writable data partition.
- * Changing bookmarks to point to sites which download HTML5
- malware, etc.
- * Malformed bookmarks file or image which causes a buffer overrun
- when parsed
- * Changing the preferred wireless network to a malicious one which
- logs/alters packets
-3. Exploits involving other processors (embedded controller, modem
- processor, etc.)
-
-## Design decisions
-
-### Boot needs to start securely
-
-In order to attempt a secure boot, the initial boot stub needs to perform a
-minimum level of initialization to verify the next piece of boot code before
-handing off to that code.
-
-To prevent accidental or intentional corruption of the known-good boot stub,
-this code must be in a portion of memory which is not field-writable. Many
-EEPROM devices have an external pin (==WP==) which can be pulled low to write
-protect the upper portion of the EEPROM. This has a number of benefits:
-
-* Devices are writable at time of manufacture (as opposed to true
- ROMs, which are fixed at time of ROM manufacture).
-* Devices can be made writable for firmware development by simple
- hardware modification.
-* Both readable and read-only ROM are provided by a single device.
- Simpler board design, fewer parts, lower cost.
-* Any attacker who can open the case and modify the hardware to write
- to the protected upper portion of ROM could also simply replace a
- true ROM with a reprogrammed part, so this isn't significantly less
- secure than a true ROM.
-
-On ARM platforms, the initial boot ROM may be in the same package as the
-processor. This is even more secure compared to a separate EEPROM.
-
-### Writable firmware should have a backup
-
-To protect against a failed firmware update, the writable portion of the
-firmware (responsible for doing the remainder of chipset and storage setup and
-then bootstrapping the kernel off the storage device) should exist in two
-copies. In the event the first copy is corrupt, the device can boot normally off
-the second copy. This is similar to the design for the [file
-system](/chromium-os/chromiumos-design-docs/filesystem-autoupdate), which has
-two copies of the root partition.
-
-### Recovery firmware must be read-only
-
-Recovery firmware must be able to take over the boot process if the boot stub
-determines that the normal writable firmware is corrupt, or if the user manually
-boots the device into recovery mode.
-
-To prevent the recovery firmware from being corrupted by a firmware update or a
-software-based attack, it must be in the same read-only portion of the EEPROM as
-the boot stub.
-
-### Recovery firmware does not need to access the network
-
-The recovery process should not require firmware-level network access by the
-device being recovered. The recovery procedure can involve a second computer,
-which is used to create recovery media (for example, a USB drive or SD card). It
-is assumed that second computer has network access.
-
-This simplifies the recovery process, since the recovery firmware only needs to
-bring up enough of the system to bootstrap a Linux image from local storage.
-That image can then take care of reflashing the EEPROM and reimaging.
-
-It is not necessary to implement a full network stack with WiFi configuration in
-the recovery firmware to support PXE boot. PXE boot introduces a number of
-complications:
-
-* Need to initialize more hardware to bring up wireless, keyboard,
- etc.
-* Need to implement a full network stack.
-* Makes recovery an interactive process, including the user entering
- their SSID and WPA key, which the user may not know.
-* Unlikely to work for public WiFi access points; these often redirect
- http access to a login screen, navigation of which which would
- necessitate a full browser in the recovery firmware.
-* Unlikely to work for cellular networks (3G/4G/etc...), if that
- requires more complicated drivers or configuration.
-
-All of these issues would need to be resolved, and the resulting firmware must
-be correct at the time the device ships, because recovery mode firmware can't be
-updated in the field. It is unacceptable to ship a mostly-working PXE solution,
-assuming that the user can fall back on a second computer in the event PXE
-recovery fails. The only time the user would discover PXE recovery didn't work
-is when the user is relying on it to repair their computer.
-
-More information on wireless network boot is here:
-<http://etherboot.org/wiki/wirelessboot>.
-
-### Recovery firmware should tell the user how to recover
-
-If the recovery firmware finds a USB drive/SD card with a good recovery image on
-it, it should boot it and use that to recover. The software in that recovery
-image will have its own user interface to guide the user through recovery.
-
-If the recovery firmware does not find a good recovery image, it needs to tell
-the user how to use a second computer to build that recovery image.
-
-The preferred way to do this is to initialize the screen and show recovery
-instructions to the user, including a URL to go to in that second computer's web
-browser. Note that recovery instructions need to be displayed in the correct
-language for the user.
-
-It is desirable for the recovery instructions and/or recovery URL to include a
-code for the device model. This allows the destination website to:
-
-* Provide the proper recovery image for that device model.
-* Describe the recovery procedure specific to that device model. For
- example, if the device has a SD card but no USB port, the recovery
- procedure would indicate that a SD card is necessary, and would not
- discuss the possibility of recovering using USB.
-* Display graphics appropriate for the device model. For example,
- showing the location of the USB or SD card port.
-
-### Users must be able to manually trigger recovery mode
-
-If the writable firmware and/or rootfs have valid signatures but don't work (for
-example, the user somehow managed to get an ARM kernel on an x86 device), the
-user needs to be able to force recovery mode to run.
-
-This can be done by having a physical reset button somewhere on the device. When
-this button is pressed during power-on, the device goes straight to the recovery
-firmware without even looking at the writable firmware or file system.
-
-Some options for the recovery button:
-
-* It could be a button attached to a GPIO on the main processor. In
- this case, the boot stub would initialize the GPIO and read its
- state at boot time.
-* It could be a button attached to a subprocessor such as the Embedded
- Controller (EC). In this case, the boot stub would need to request
- the button state from the EC at boot time.
-* It could be one of the keys on the keyboard, though this creates the
- undesirable possibility of accidentally entering recovery mode.
- * This is undesirable if the only interface to the keyboard is
- USB, because USB firmware is more complex and the USB hardware
- interface can take a significant amount of time to initialize.
- * Some devices use a subprocessor to read the keyboard. In this
- case, initiating recovery mode is much like the previous option.
- * The keyboard could bring out the press-state of one of its keys
- to a separate I/O line, which could be attached to a GPIO on the
- processor or to a subprocessor.
-
-Since the recoverability of Chromium OS is one of its key features, we seek to
-have a dedicated "recovery mode" button.
-
-### Support developers / l33t users installing their own software
-
-To provide a relatively trustable boot for the majority of users, we need to
-control all the read-only firmware at the beginning of the boot process.
-
-To support developers, at some point during the boot process, we need to hand
-off to code self-signed by someone else.
-
-The initial devices will allow hand off at the point the kernel is loaded and
-its embedded signature is checked. This can produce one of three results:
-
-* Trusted kernel: The kernel has a valid signature, and the signing
- key is known to the firmware. This is the normal case for production
- devices.
-* Developer kernel: The kernel has a valid signature, but the key used
- to sign the kernel is not known to the firmware. This is the case
- when a developer builds and self-signs their own kernel.
-* Corrupt kernel: The kernel fails its signature check.
-
-Once the chain of trust departs from the standard Chromium OS boot chain, we
-need to indicate this clearly to the user of the device. This prevents malicious
-attackers from giving users a modified version of Chromium OS without the user
-knowing. We likely will need to show a warning screen which includes the
-following elements:
-
-* A warning that the standard image of Chromium OS is not running
-* A means of reverting back to the standard Chromium OS image
-* A means of allowing the user/developer to proceed down the
- "untrusted" path
-
-It is desirable for the warning screen to have a timeout, so that Chromium OS
-devices with developer images can be used in unattended applications (for
-example, as a media server). The timeout should be sufficiently long that a user
-can read and respond to it - for example, at least 30 seconds.
-
-Since language settings will not be available at this stage of the boot process,
-any messaging will likely need to be internationalized and displayed in all
-possible languages.
-
-## EEPROM map
-
-Here is an early guess at sizes and layout of the EEPROM. These sizes may change
-as we progress with implementation.
-
-![](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/eeprom-map.png)
-
-## Firmware block descriptions
-
-### Boot stub
-
-Must be at the top of EEPROM, since most processors jump to the top of memory
-(0xFFFFFFF0) after internal initialization.
-
-Contains the "root key" - the official public key used to verify the signature
-of the next stage of firmware. The private key is not contained on the device,
-and must be protected from all unauthorized access. To reduce exposure of the
-private root key, the private root key will be used to sign a second
-date-limited or numbered key stored in the rewritable firmware, which is then
-used to sign that firmware. Validation of the date or key number could be done
-via a TPM module.
-
-**Pseudocode**
-
-1. Initialize processor and RAM (and implicitly, those parts of the
- north bridge necessary to initialize RAM), using conservative
- timings.
-2. If user-forced recovery mode, skip to attempt loading recovery
- firmware. (The recovery button asserts an I/O line that can be
- measured by the firmware.)
-3. Check the non-volatile register or memory region for a recovery mode
- cookie value. If this is set, some later stage of the boot process
- must have failed and requested recovery mode, so skip to attempt
- loading recovery firmware.
-4. Attempt loading Firmware A.
- 1. Copy Firmware A to RAM.
- 2. Verify signature of Firmware A using public key stored in boot
- stub.
- 3. If signature is valid, jump to Firmware A Setup.
-5. Firmware A is bad. Repeat for Firmware B.
-6. Both A and B are bad. Attempt loading recovery firmware to RAM and
- verify signature. If valid, jump to recovery firmware.
-7. All recovery options have been exhausted. Catch fire / emit POST
- code / etc.
-
-### Firmware (A/B) setup
-
-This firmware sets up a minimal set of hardware components so that the boot
-loader can load the kernel from the normal boot drive. For example, the SATA or
-eMMC controller.
-
-**Pseudocode**
-
-1. Initialize chipset / file system sufficiently to jump to Boot Loader
- code.
-2. Jump to Boot Loader code.
-
-### Firmware (A/B) boot loader
-
-The boot loader is only designed to load Chromium OS. We can go directly from
-firmware bootstrap to the kernel in the disk.
-
-**Pseudocode**
-
-1. **Verify the partition table on the disk looks sane.**
-2. **Load kernel A from the disk.**
-3. **Verify signature of kernel.**
-4. **If signature is invalid:**
- 1. **If this is kernel A, retry with kernel B.**
- 2. **Else this is kernel B. Both kernels are bad, so set the
- recovery-mode cookie non-volatile register and reboot into
- recovery firmware.**
-5. **If kernel was signed with a public key not known to the boot
- loader, this is a developer kernel:**
- 1. **Initialize the display.**
- 2. **Display scary developer mode warning to user. For example:
- "Google Chrome OS is not installed. Press space bar to
- repair."**
- 3. **Wait for keypress or 30-second delay before continuing.**
- 4. **If key pressed was Space bar, Enter, or Esc, jump to Recovery
- Firmware.**
- 5. **If key pressed was Control+D, dismiss screen.**
- 6. **Ignore other key presses.**
-6. **Continue booting the kernel.**
-
-### Boot log
-
-A boot log will be stored at the bottom of the writable section of firmware.
-This will store the following types of events:
-
-* Each time recovery firmware is run, with information on what
- triggered it (manual, bad firmware, bad root filesystem, etc.).
-* When a recovery completes, including which actions were taken.
-
-It does not store information on successful boots. This removes the need to
-support EEPROM writing in the normal boot process, and conserves space for log
-entries dealing with real errors.
-
-The boot log can be uploaded as part of the autoupdate process. It can then be
-cleared and reused for new log entries.
-
-### Recovery firmware
-
-This firmware attempts to recover from bad firmware or rootfs by loading a
-recovery image off an external storage device.
-
-**Pseudocode**
-
-1. Write a log entry to the boot log indicating why recovery mode was
- activated (manual, bad writable firmware, user triggers recovery
- mode, etc.)
-2. Initialize enough of the chipset to be able to access a storage
- device (USB drive, SD card, etc.)
-3. Check for an inserted storage device. If no storage device is
- present, skip to displaying recovery instructions.
-4. Verify the signature of the recovery image, using a public key
- stored in the recovery firmware. If the signature is invalid, skip
- to displaying recovery instructions.
-5. Load and run the recovery image.
-6. If we're still here, either no storage device was inserted, or the
- storage device did not contain a valid image. Display recovery
- instructions:
- 1. Initialize the display.
- 2. Display instructions. These instructions must be
- internationalized and rendered in multiple languages. The
- instructions must include:
- * A warning that the computer is in recovery mode
- * How to obtain a trusted recovery image (for example,
- instructions to go to a second computer and browse to a
- specified URL for further instructions)
- * An indication if an already-inserted storage device does not
- contain a valid recovery image (sorry, try again).
-7. Wait for a storage device to be inserted, then go back to step 3.
-
-Most of the recovery work is left to the recovery image loaded from the storage
-device. This allows for publishing updated recovery images and instructions.
-Because the recovery firmware is etched in stone (well, as electrons in floating
-gates) at the time the device is launched, it needs to be as simple and robust
-as possible.
-
-## Recovery image
-
-This is the software loaded onto a storage device (USB drive, SD card, etc.)
-which does the bulk of the recovery work.
-
-The recovery image will be available for download.
-
-We will need to provide a downloadable installer for users to use to install the
-recovery image on the storage device. This installer should be supplied for all
-popular operating systems (Chromium OS, Windows, Mac OS X, Ubuntu Linux). The
-installer will:
-
-* Prompt the user to select a destination for the recovery image
- * Ideally, the user will only be able to select destination
- devices appropriate for recovery of the laptop model they are
- attempting to recover.
- * Also, the user should only be able to select removable devices.
- We don't want them trashing their hard disk.
-* Warn the user that this will erase whatever is on that destination,
- and prompt for confirmation
-* Reformat the destination storage device
-* Install the recovery image on the storage device
-* Prompt the user to insert the storage device into the Chromium OS
- device
-
-Ideally, the installer would be able to back up the current data on the
-destination device, before reformatting and writing the recovery image. When
-recovery is complete, the user could re-insert the destination device and have
-the original contents restored.
-
-The recovery image should contain an entire clean copy of the firmware and
-rootfs. This way, a user can make a recovery device ahead of time. For example,
-if a user is going to be somewhere with poor connectivity, they could make a
-recovery USB drive at home and keep it in their bag. Alternately, the system
-could come with a recovery device (though users might end up reformatting it and
-filling it with images of kittens).
-
-The recovery image on the storage device would do something like the following:
-
-1. Initialize the display and tell the user what's going on. Reassure
- them that their Chromium OS system is trying to recover.
-2. If developer firmware is detected, give the user a choice of "JUST
- FIX IT" or "Scary Settings for L33t H4x0rs". If the user picks the
- latter:
- 1. Give the developer more control over each stage in the rest of
- the recovery.
- 2. For example, a developer might not want to wipe and replace
- rootfs or stateful data, or might want to make a backup of that
- data.
-3. Run system tests. It's possible that the boot problems are due to
- bad hardware. Now's the time to detect that.
- 1. If hardware is sufficiently bad that the rest of recovery can't
- be run, show the user information on how to return it.
-4. Verify both firmware A and firmware B are up-to-date and valid. Load
- known good firmware as needed.
-5. Verify rootfs-A and rootfs-B are up-to-date and valid. Load known
- good rootfs images as needed.
-6. Wipe the stateful data. Anything the user cares about should be in
- the cloud anyway. If the user's been hacked, wiping the data will
- put the device back in a known good state.
- 1. Optionally, it can inform the user that data on the system will
- be erased.
- 2. This message should emphasize that most data is saved to the
- cloud, so that the user is more likely to proceed with recovery.
- 3. It is less desirable to give the user a choice whether or not to
- delete the stateful data. Most users would pick the less scary
- but also less secure option of NOT deleting data - but this
- leaves them vulnerable to persistent hacks on the data
- partition, such as manipulating their /etc/hosts file or
- bookmarks.
-7. If recovery mode was manually triggered, ask the user why they're
- running it.
- 1. Couldn't even log in; crash during boot
- 2. Kept crashing after boot
- 3. Worried my system was hacked
- 4. Hey, what's this button do?
-8. Write an entry to the boot log describing repairs performed.
-
-### Recovery via Chromium OS
-
-The recovery installer should run on a healthy Chromium OS system. That is, it
-should be able to download the recovery image, reformat the storage device, and
-copy the recovery image to it.
-
-* This enables a healthy Chromium OS system to create its own recovery
- device in advance.
- * Perhaps we should periodically advise users to update their
- recovery device?
-* It also enables one Chromium OS system to download a recovery image
- for a different model. (A user has a corrupt system, so they go to
- their friend's house and use the friend's Chromium OS system to make
- a recovery image).
-
-### Making recovery images read-only
-
-If the recovery image is inserted into a powered-on and hacked system, the
-hacked software could delete or corrupt it. This won't cause the recovery
-firmware to load that corrupt image, because the corrupt image will fail the
-signature check. It will be annoying to the user, who will need to reflash the
-storage device.
-
-This is more of an issue if we want to include an internal recovery image (for
-example, on an internal storage device).
-
-The SD standard specifies a physical write-protect notch for SD cards, similar
-to those on a 3.5" floppy disk. Unfortunately, the implementation of the
-write-protection is purely software, so pwned drivers can choose to ignore the
-write-protect detect signal.
-
-Some USB drives have a write-protect switch on them. In this case, the
-protection is handled by the USB drive itself.
-
-Some eMMC chips have a number of protection mechanisms including:
-
-* an external LOCK# pin which can be used to make the device read-only
-* a write-once bit which makes the device read-only until reboot
-
-Since these chips come in sizes up to 2GB (~$10 at stores), they provide a
-possible place to store a recovery image. Some system architectures may be able
-to use the eMMC drive to hold the main firmware image also.
-
-If we have an internal storage device, it's possible we could wire it so it's
-only enabled if the recovery button is pressed at boot time. For example, we
-could use that button to latch up a circuit which powers that device, so that it
-will remain powered during that boot only.
-
-### Using recovery mode to load developer mode firmware/software
-
-If the rootfs image on the SD card is signed by someone else, the recovery image
-will display a screen similar to the Developer Mode screen. Instructions on this
-screen should include:
-
-* Notice that the recovery image is signed by someone else
-* How to obtain a trusted recovery mode image
-* Instructions on installing a trusted recovery image
-* A means of allowing the user/developer to proceed down the
- "untrusted" path
-
-Note that this screen must also be internationalized / rendered in multiple
-languages. This is potentially much easier, since by the time we're doing this
-the recovery image has booted a full OS with GUI.
-
-## Boot flowchart
-
-The three main downward flows in this chart show:
-
-* Start of boot in read-only firmware
-* Normal continuation of boot, loading kernel from internal drive
-* Recovery mode
-
-![](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/ChromeOSFirmwareBootandRecoveryPUBLISHED.png)
-
-## Other notes
-
-### Verification of the rest of the rootfs
-
-The firmware boot process above describes a way to verify all code from the
-start of boot through hand off to the kernel.
-
-The kernel is responsible for verifying the rest of the data in the rootfs - for
-example, user-mode drivers. If the kernel determines that the rootfs has been
-compromised, it can force recovery mode to run by setting the recovery mode
-cookie in a non-volatile register and rebooting into recovery mode.
-
-Alternately, a kernel which determines its rootfs is corrupt can commit suicide
-by marking its partition as inactive and then rebooting. The next boot will do
-one of the following:
-
-* If the other root partition is good, the boot loader will run the
- other root partition.
-* If neither root partition is good, the boot loader will trigger the
- recovery mode firmware, which can put the rootfs back in a known
- state.
-
-### When to verify the boot process
-
-We should develop under the initial assumption that we can verify every boot,
-since this provides the most security.
-
-Signature-checking code does impact startup time. However, this is likely not an
-issue for the firmware (&lt; 1 MB) and kernel (&lt; 10 MB) than it is for the
-remainder of the rootfs. We assume that we will verify the entire firmware and
-kernel every boot.
-
-### Handling returned systems
-
-When a Chromium OS system is returned to the store, the store should check to
-make sure it still boots.
-
-* If it boots normally, the store can follow their standard process
- for dealing with returns.
-* If it displays the Scary Dev Mode screen, the store can either run
- recovery mode or refuse the return (in which case the original owner
- can go home and run recovery mode, then come back and returns the
- system again).
-* If it fails to boot, it gets shipped back to the manufacturer.
-
-Note that it's advisable for stores to run recovery mode on returned computers
-anyway, to put them back into a clean state and destroy any user data still on
-the device.
-
-### Testing
-
-The comprehensive test suite for Chromium OS should include tests of each stage
-of the verification process and the recovery procedure, including all decision
-points in the pseudocode/flowchart. This will require actual hardware for each
-firmware image being tested.
-
-Testing should also attempt to write to the read-only portion of the EEPROM, to
-ensure that it is in fact not writable.
-
-## Open issues
-
-### What else do we need to verify?
-
-This document describes verifying the following:
-
-* Firmware in the main EEPROM
-* Partition table
-* The kernel partition
-
-It explicitly does not discuss verifying:
-
-* The rootfs (anything after the hand off to the kernel)
-* The stateful data partition
-
-Are there other locations for persistent storage we should be verifying? For
-example:
-
-* Firmware in other components?
- * File system
- * NIC
- * 3G modem
- * Embedded controller
- * Modem processor (on ARM systems)
- * Keyboard ([this apparently is an attack surface on some
- systems](http://www.engadget.com/2009/08/04/apple-keyboard-gets-hacked-like-a-ripe-papaya-perp-caught-on-vi))
- * (we disallow option ROMs in the hardware spec, so we don't need
- to worry about those)
-* Removable user media
-
-### Can we log firmware crashes?
-
-* Crashes in boot stub (i.e., north bridge / RAM init) likely aren't
- loggable at all. Not enough of the system is running.
-* Other crashes in the firmware could write a cookie into a particular
- address in SDRAM.
- * When the system boots next, it could check that address for a
- valid crash cookie.
- * If so, assume the current firmware is bad; try the backup
- firmware, or go to recovery mode.
- * Downside: Intermittent crashes which would be mildly annoying
- now prevent the system from attempting to boot at all, since it
- would tend to go into recovery mode.
-* Crashes in the kernel can be logged to the stateful partition.
-
-### Chain of verification on ARM?
-
-Some ARM SOCs contain a modem processor and an application processor. On boot,
-only the modem processor is running; its firmware then sets up and starts the
-application processor. If the modem firmware is writable, we could be hacked
-before the first instruction of our firmware executes. We need a way to secure
-the modem firmware. (This is true regardless of the boot order, if the modem
-firmware has access to the registers or RAM used by the application processor).
-
-Such systems could use a Memory Protection Unit or similar such hardware
-solution, to prevent the modem and application processors from reading/writing
-each other's firmware or memory space, except for specific portions of the
-memory space used for inter-processor communication. We are still investigating
-what solutions can be used for verified boot.
-
-### Support for Trusted Platform Module (TPM)?
-
-A TPM is not required for key verification for the firmware boot and recovery
-process described in this document. There's no point in the verification key
-being more secure than the code in ROM used to do the verification. If an
-attacker can crack the ROM code, they can just make it bypass the TPM check.
-
-If the boot stub contains a secondary key which is date-limited, it is desirable
-to use the TPM to verify the date-limited key is valid. Many TPM modules contain
-their own clock/counter, so can be used to defend against turn-back-the-clock
-attacks. Similarly, if we use numbered or sequential secondary keys, storing the
-highest-seen key number in the TPM can protect against rollback attacks.
-
-There may be some firmware requirements to set up the TPM so that subsequent
-activities (3G authentication, etc.) can get access to the keys stored in the
-TPM.
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/s0hDprW1DevZ8KuyE5lsKIg_903.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/s0hDprW1DevZ8KuyE5lsKIg_903.png.sha1
deleted file mode 100644
index 545ec9c3a70..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery/s0hDprW1DevZ8KuyE5lsKIg_903.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f498f539f31983d6987209a189b22013d83a7937 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-updates/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-updates/index.md
deleted file mode 100644
index 254973b6649..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/firmware-updates/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: firmware-updates
-title: Firmware Updates
----
-
-Firmware Update Processes and Utilities
-
-**Flashrom**
-
-Chromium OS currently uses Flashrom as the firmware update tool of choice for
-x86, and has cross-platform ports for ARM, MIPS, and others. Flashrom is an
-open-source, cross-platform EEPROM programming utility with an active community
-and a large combination of supported host chipsets, flash memory devices, and
-external programmers. The code is generally adaptable to a wide variety of
-chipsets and interfaces and is thus a good candidate for servicing the needs of
-Chromium OS platforms.
-Flashrom main URL: http://www.flashrom.org
-
-Flashrom @ Chromium.org documentation:
-http://[goo.gl/rEAwz](http://goo.gl/rEAwz) \[ [Long
-URL](https://docs.google.com/document/pub?id=1H8zZ3aEMZmfO4ZEsWbHooUdGOgxy5LTPJ19YbaDsxdQ)
-\] \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data/index.md
deleted file mode 100644
index be02b1ed3c1..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data/index.md
+++ /dev/null
@@ -1,256 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: hardening-against-malicious-stateful-data
-title: Hardening against malicious stateful data
----
-
-## Motivation
-
-Chrome OS has Verified Boot, which is designed to make sure that the system will
-only run binaries that are trusted, starting at firmware and continuing all the
-way through the boot process to Chrome. It turns out this is not sufficient, as
-the data dependencies of code running during boot pull unverified data from the
-stateful partition. This may be configuration data, device state indicators,
-data caches etc. It turns out that data dependencies in the boot process pose a
-security risk: Attackers that have a root exploit control the stateful
-partition, allowing them to stage malicious file system state (file contents,
-symlinks, directory layout, etc.) that will affect a subsequent boot in a way
-that re-exploits the device, thus providing a vehicle for the attacker to get a
-persistent exploit.
-
-[Both](https://bugs.chromium.org/p/chromium/issues/detail?id=351788)
-[examples](https://bugs.chromium.org/p/chromium/issues/detail?id=648971) of
-persistent Chrome OS exploits that have been reported to us up to now exploit
-this (symlink attacks) as their persistence mechanism. Thus, we need to:
-
- Eliminate data dependencies on stateful data as much as possible from the
- boot process.
-
- Mitigate any legit and required dependencies to move the bar to a point
- where exploiting them becomes really hard, if not impossible.
-
-This document describes approaches to achieving these goals..
-
-## Anatomy of a persistent attack
-
-Here's a quick summary of the usual steps involving a persistent exploit. This
-is useful for reference when assessing mitigations:
-
- Attacker exploits the running system. This might be in the form of Chrome
- exploit, a system daemon exploit, a full root exploit, or even a kernel
- exploit.
-
- Attacker manipulates state carried over across reboots. Depending on what
- privileges the attacker managed to acquire, they have different options
- here. A full root or kernel exploit will allow to make arbitrary changes to
- the stateful file system for example, as well as other stateful storage such
- as TPM and VPD. If the attacker has "only" a Chrome exploit, they may still
- manipulate the stateful file system subtrees that are writeable by user
- chronos. Similarly, if the attacker controls a system daemon, they can
- manipulate that process' state (assuming the system daemon is running within
- a sandbox). Some approaches to manipulation:
-
- Store malicious data in a file that is read and parsed, interpreted etc.
- after reboot.
-
- Manipulate the file system layout: Insert symlinks or hard links that
- will redirect write actions during boot (such as mkdir, writing cache
- files etc.).
-
- Manipulate file system state to trigger unintended execution paths
- (example: make files unreadable / wrong type to trigger
- untested/inappropriate error handling or fallback behavior).
-
- System reboots.
-
- Re-gaining code execution: Verified boot ensures that kernel and root file
- system remain intact, i.e. the attacker can't change code there to
- re-acquire control of the system. Instead, the attacker will have to arrange
- for the regular boot flow to "take a wrong turn", i.e. trick legit code
- running during boot to perform inadvertent actions that will give the
- attacker code execution again. This is where the manipulated stateful data
- comes in: It will be consumed by init scripts and system services and may
- affect their behavior in a variety of ways. Some of the more obvious are:
-
- Trigger execution of shell scripts stored on stateful.
-
- Exploiting weaknesses in config parsing to gain code execution within a
- system service.
-
- Manipulating user-installed code that the system will run automatically,
- such as extensions installed in a user profile.
-
-## Mitigations
-
-The remainder of the document discusses hardening measures that will prevent
-certain classes of malicious stateful data to have an adverse effect. Note that
-there is no comprehensive solution - any useful device will have to store some
-data somewhere (in the cloud if not locally) and users expect to be able to see
-their previous state after a reboot. This inherently implies that we need to
-carry over state, so some risk will always remain. It makes sense to prioritize
-mitigation work to reduce impact of successful exploits. To that effect, we
-should start with addressing stateful data dependencies within highly-privileged
-code (such as init scripts, system daemons), then work our way towards less
-privileged code.
-
-### Restricting symlink traversal
-
-[Both](https://bugs.chromium.org/p/chromium/issues/detail?id=351788)
-[cases](https://bugs.chromium.org/p/chromium/issues/detail?id=648971) of
-persistent Chrome OS exploits that have been reported via the Chrome
-vulnerability reward program relied heavily on placing symlinks on the stateful
-file system to re-exploit the system after a reboot. The idea is to place a
-symlink somewhere on a path written to by a privileged process during boot to
-redirect the write to a different location. In some cases, the data that gets
-written can also be controlled by the attacker, e.g. when the code in question
-is copying files from one location in the stateful file system to another. It
-turns out that intentional usage of symlinks is actually very rare on the
-stateful file system. Given that and the relative success of symlink attacks, it
-makes sense to generally disallow symlink traversal.
-
-To prevent symlinks to be traversed on the stateful file system, there are a
-variety of possible approaches:
-
-1. Change all code that accesses files to double-check it didn't follow
- a symlink inadvertently. Note that the O_NOFOLLOW open flag and
- symlink-aware version of system calls (such as lstat() in favor of
- stat()) are not sufficient, since they only cover the last path
- component. Symlinks in parent components are still followed. A
- working way of implementing a symlink traversal check is via
- readlink() on /proc/self/fd/N. Unfortunately, it's just not
- practical to do this for all file access in shell scripts, 3rd-party
- software etc., so while this approach is technically feasible, it
- doesn't fly in practice.
-2. Add a mount option in a kernel patch, so symlink traversal can be
- disabled on a per-mount basis. The BSDs have nosymfollow which
- implements this. We have [proposed the same solution for
- Linux](https://patchwork.kernel.org/patch/9434587/) upstream, but it
- was met with skepticism. Reality is that few Linux distributions be
- able to use this meaningfully (it only makes sense when you have a
- verified or at least read-only rootfs anyways). We could carry the
- patch in the Chrome OS kernel tree indefinitely, but that'll cause
- maintenance overhead as file system internals change over time.
-3. Scrub symlinks after mount. This would require making a full pass
- over the mounted file system and remove any unintended symlinks.
- This will adversely affect boot times since we'd have to do this
- before starting any init jobs that read stateful data.
-4. Use SELinux to apply policy to prevent symlink traversal. This would
- require the entire stateful file system to be re-labelled after
- mount to make sure there aren't any labels present that would allow
- symlink traversal in locations that shouldn't do so. This approach
- suffers from the same boot time issue as the previous one.
-5. Reject symlinks via the LSM inode_follow_link hook in the Chromium
- OS LSM. Implement the logic in a non-invasive way in the kernel to
- keep maintenance overhead low.
-
-After considering the pros and cons of the approaches listed above, we've chosen
-to go with the LSM inode_follow_link approach. Design highlights:
-
-* The inode_follow_link hook can look at the dentry and inode of the
- traversed symlink location. We thus need to hook up any information
- require to make a decision in such a way that it is accessible from
- the inode/dentry. Note that we can't simply fail all symlink
- traversal, since there are important cases of legit symlink usage on
- the root file system, e.g. the shared library symlinks in /usr/lib.
- We also want to be able to selectively allow symlinks for specific
- locations even though symlink traversal should generally be blocked
- on the stateful file system.
-* To achieve per-inode decisions, the code uses fsnotify
- infrastructure, which allows to attach "inode marks" to an inode.
- This is also used by other kernel subsystems (e.g. the audit code)
- and allows callbacks to be invoked when something happens. We only
- rely on the notification send on inode destruction so we can clean
- up tracked state, but we can use the inode mark to hold symlink
- traversal policy for the inode.
-* Symlink traversal policy is evaluated for a path in question by
- searching up the parent directory chain until an inode is found that
- carries a specific traversal policy. This allows setting the policy
- to block symlinks on the root inode, which will thus be inherited by
- the entire file system. This also allows exceptions to be granted by
- setting the policy to allow traversal for a specific directory,
- which will grant an exception for the subtree rooted at the
- directory.
-* Symlink traversal policy can be configured via userspace via
- securityfs.
-* Whenever an attempt at traversing a symlink runs into a policy that
- blocks the access, the system call wiil fail with EPERM and a kernel
- warning will get logged.
-* The kernel warning collector uploads symlink traversal blocking
- warnings via the crash reporter, so we have some insight whether
- devices hit restrictions inadvertently.
-* The code uses only "public" kernel APIs, i.e. it is entirely
- contained within the LSM module. No kernel changes elsewhere are
- needed. This keeps maintenance overhead at the absolute minimum.
-
-To make use of the symlink traversal policy mechanism provided by the LSM, we'll
-require a few userspace changes. chromeos_startup will be responsible to
-configure symlink traversal to be blocked on the stateful and encrypted stateful
-file systems. We'll need to allow a few exceptions:
-
-* /var/cache/vpd, /var/cache/echo: These directories contain backwards
- compatibility symlinks set up by dump_vpd_log. We should ideally
- clean up consumers of these symlinks and remove the exception.
-* /var/lib/timezone: This directory contains a symlink to the actual
- time zone file and is maintained by Chrome. This is a low-risk
- exception as this path is generally only sees read-only access by
- privileged code.
-* ~~/var/log: The log directory contains a number of convenience
- symlinks that point at the "latest" log file for ui, chrome,
- power_manager etc. logs. This is somewhat higher risk since
- privileged system daemons write to files in /var/log. We should
- consider restricting this further, but will grant an exception for
- now.~~ The risk of symlinks in /var/log being abused has been
- [mitigated](https://bugs.chromium.org/p/chromium/issues/detail?id=916152).
-* /home: When using ext4 encryption, encrypted user data actually
- resides within the stateful file system and encryption is handled on
- a per-file basis. To avoid blowing up scope considerably for initial
- roll-out, we'll explicitly allow /home so user data maintained by
- Chrome can still use symlinks. Note that this is low risk for the
- most part since the majority of the access are happening within
- chronos user context. There is some data that is access by
- privileged daemons in the /home/chronos/root/ bind-mounts though. We
- should eventually lock down symlink traversal either for the entire
- user data subtree, or at least for the locations access by system
- daemons.
-* /mnt/stateful_partition/dev_image: This directory contains utilties
- that are convenient for developers running in dev mode. We'll grant
- an exception for this when setting up this location for developer
- mode.
-* /mnt/stateful_partition/unencrypted/art-data: ARC++ uses symlinks in
- /mnt/stateful_partition/unencrypted/art-data to make host compiled
- code available in ARC++ container without copying.
-
-Further exceptions for symlink traversal restriction can be added in justified
-cases.
-
-### Enabling generic per-inode access control policies and blocking FIFO access
-
-Building upon the existing framework for adding an "inode mark" to enable
-per-inode decisions about symlink traversal, we have extended the code to allow
-for generic per-inode access control policies regarding other types of accesses
-to the file system. In this way, we can support the use of additional hooks in
-the Chromium OS LSM which consult the "inode mark" when making decisions about
-other file system security policies. For example, one recent
-[exploit](https://bugs.chromium.org/p/chromium/issues/detail?id=766253) modified
-a file on the stateful file system to convert it from a normal file into a FIFO
-in order to disable the execution progress of a program that opened the file for
-reading. In light of this, we have added an additional policy to the "inode
-mark" metadata that allows us to deny opening of FIFOs on the stateful file
-system in addition to restricting symlink traversal. We use the file_open hook
-in the LSM to check the inode metadata when a FIFO is being opened on the
-system. All other details are the same as described above for restricting
-symlink traversal. As FIFO usage is even more rare than usage of symlinks on the
-stateful file system, the only exceptions to this policy are:
-
-* /mnt/stateful_partition/dev_image: Used for developers running in
- dev mode.
-* /mnt/stateful_partition/home: ARC++ /data directory is mounted under
- this path, and uses FIFOs (e.g. java.io.tmpdir is expected to
- support FIFOs, and is set by the Android framework to use
- /data/user/0/&lt;package_name&gt;/cache/).
-
-As above, further exceptions for FIFO access can be added in justified cases. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/index.md
deleted file mode 100644
index 60f13cf6cf4..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/index.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: chromiumos-design-docs
-title: Design Documents
----
-
-This page has links to a preliminary set of Chromium OS design docs. (Also see
-the [User Experience](/user-experience) pages.)
-
-**Note: These designs will evolve significantly, based on implementation
-challenges, community feedback, and other factors. In many cases, these design
-docs represent early planning and may change direction. We'll publish more
-design docs in the coming months.**
-
-<div class="two-column-container">
-<div class="column">
-
-### General
-
-* [Software
- Architecture](/chromium-os/chromiumos-design-docs/software-architecture)
-* [Source Code
- Management](/chromium-os/chromiumos-design-docs/source-code-management)
-* [Upstream First](/chromium-os/chromiumos-design-docs/upstream-first)
-
-### Security
-
-* [Security
- Overview](/chromium-os/chromiumos-design-docs/security-overview)
-* [Protecting Cached User
- Data](/chromium-os/chromiumos-design-docs/protecting-cached-user-data)
-* [System
- Hardening](/chromium-os/chromiumos-design-docs/system-hardening)
-* [Chaps Technical
- Design](/developers/design-documents/chaps-technical-design)
-* [TPM Usage](/developers/design-documents/tpm-usage)
-* [Verified Boot
- Presentation](https://docs.google.com/a/chromium.org/presentation/d/1HHf_0nKrceQr_NQYGMpVlYTIYF8ky-eNxP7W5Lxw94Y/present#slide=id.g341ad2000_020)
- (2014)
-* [Verified Boot
- Presentation](https://docs.google.com/presentation/d/14haBMrbpc2zlgdWmiaTlp_iDG_A8t5PTTXFMz5kqHSM/present?slide=id.g11a5e5b4cf_0_140)
- (2016)
-* [Keyboard-Controlled Reset
- Circuit](/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit)
-
-### Firmware
-
-* [CBI: CrOS Board
- Info](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/design_docs/cros_board_info.md)
-* [Firmware Boot and
- Recovery](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery)
-* [Disk Format](/chromium-os/chromiumos-design-docs/disk-format)
- (including boot process)
-* [Developer Mode](/chromium-os/chromiumos-design-docs/developer-mode)
-* [EC-3PO](/chromium-os/chromiumos-design-docs/ec-3po) (EC console
- interpreter)
-* [Recovery Mode](/chromium-os/chromiumos-design-docs/recovery-mode)
-* [SAFT](/for-testers/saft) (semi-automated firmware test)
-* [Verified Boot](/chromium-os/chromiumos-design-docs/verified-boot)
-* [Verified Boot Crypto
- Specification](/chromium-os/chromiumos-design-docs/verified-boot-crypto)
-* [Verified Boot Data
- Structures](/chromium-os/chromiumos-design-docs/verified-boot-data-structures)
-
-</div>
-<div class="column">
-
-### Platform
-
-* [Cros](/chromium-os/chromiumos-design-docs/chromium-os-libcros) (how
- Chromium talks to Chromium OS)
-* [File
- System/Autoupdate](/chromium-os/chromiumos-design-docs/filesystem-autoupdate)
-* [Kernel](/chromium-os/chromiumos-design-docs/chromium-os-kernel)
-* [User-Land Boot
- Design](/chromium-os/chromiumos-design-docs/boot-design)
-* [Library
- optimization](/chromium-os/chromiumos-design-docs/library-optimization)
-* [Login](/chromium-os/chromiumos-design-docs/login)
-* [Lucid Sleep](/chromium-os/chromiumos-design-docs/lucid-sleep)
-* [Out of memory
- handling](/chromium-os/chromiumos-design-docs/out-of-memory-handling)
-* [Partition
- Resizing](/chromium-os/chromiumos-design-docs/partition-resizing)
-* [Power
- Manager](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/README.md)
-* [Battery Life
- Overview](/chromium-os/chromiumos-design-docs/chrome-os-battery-life-overview)
-* [Performance
- Overview](/chromium-os/chromiumos-design-docs/chrome-os-performance-overview)
-* [Printing](http://www.chromium.org/chromium-os/chromiumos-design-docs/chromium-os-printing-design)
-* [Text Input](/chromium-os/chromiumos-design-docs/text-input)
-* [User Accounts and
- Management](/chromium-os/chromiumos-design-docs/user-accounts-and-management)
-* [CRAS: ChromeOS Audio
- Server](/chromium-os/chromiumos-design-docs/cras-chromeos-audio-server)
-* [Chromium OS
- Cgroups](/chromium-os/chromiumos-design-docs/chromium-os-cgroups)
-* [Unified
- Builds](https://docs.google.com/document/d/1zonifFp8UpE6ISxsnzUrUb9ikx1pXeqs0UzW08ce6aY/edit#heading=h.guvbepjyp0oj)
- (Chrome OS config)
-
-### Stateless
-
-* *Coming soon*
-
-**UI**
-
-* [Immersive
- fullscreen](/developers/design-documents/immersive-fullscreen)
-* [Volume
- keys](/chromium-os/chromiumos-design-docs/chrome-os-volume-keys)
-* [system
- notifications](/chromium-os/chromiumos-design-docs/system-notifications)
-
-</div>
-</div> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/KbdReset.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/KbdReset.png.sha1
deleted file mode 100644
index a3ab8179503..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/KbdReset.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d0b392dbbd2fabd1edde756b91ae66c048043a86 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/index.md
deleted file mode 100644
index c1bac48c696..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/index.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: keyboard-controlled-reset-circuit
-title: Keyboard-Controlled Reset Circuit
----
-
-To enable users to securely reset a Chrome device, or enter recovery and
-developer modes, a hardware circuit is required. This function can be
-implemented with a Silego chip, or an equivalent combination of parts and logic.
-
-### When a user presses a combination of the power key and certain other keys, the hardware circuit monitoring the keyboard generates a reset signal to the embedded controller. The embedded controller controls power to the rest of the system, which is reset as well. The circuit contains a flip-flop that is can only be cleared by the reset signal. This flip-flop is set by a GPIO signal from the embedded controller that is sent before the embedded controller transitions from its read-only firmware to its rewriteable firmware. The output of the flip-flop goes to a GPIO on the main processor, which can use this signal to verify that the EC has been reset and is still running read-only (and hence trusted) code.
-
-### Reset
-
-### To reset the system, the user presses Power+F3 (Power+VolumeUp on convertible devices without a secure keyboard connection). When the embedded controller resets, it progresses from read-only firmware to rewritable firmware for operation in Normal Mode.
-
-### Recovery mode
-
-To enter Recovery Mode, the user holds Power+F3+ESC (Power+VolumeUp+VolumeDown
-on convertible devices without a secure keyboard connection).
-When the embedded controller resets in Recovery Mode, it remains in its
-read-only firmware and tells the main processor to boot in Recovery Mode.
-
-### Developer mode
-
-Users can enter Developer Mode from Recovery Mode, usually by pressing Ctrl+D at
-the recovery screen. Developer Mode can be accessed if and only if the flip-flop
-indicates that the embedded controller is still in read-only mode. This
-requirement ensures that the Recovery Mode firmware on the main processor can
-trust the keyboard messages from the embedded controller (and thus ensures that
-the keyboard messages are in fact sent by a physical user who is present at the
-keyboard—not, for example, from a keyboard that has been hijacked by a remote
-process).
-
-### Optional battery cutoff
-
-Systems with non-removable batteries may implement a battery cut-off. The
-battery can be cut off by removing the power adapter while holding Power+F3
-(Power+VolumeUp on convertible devices without a secure keyboard connection) for
-10 seconds or more. The preferred implementation is with a control wire into the
-controller/gas-gauge inside the battery pack, but an alternative is to force off
-FETs in the charger circuit. This requirement allows users under direction from
-support staff to completely cut off power to the device. It also enables users
-to recover from situations where the power supply has locked up. For example, an
-out of specification USB device causing the main power regulator to latch a
-fault and shutdown until power is cycled.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/KbdReset.png">](/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit/KbdReset.png)
-
-<img alt="KeyboardControlledReset.png.1353360421277.png"
-src="https://lh5.googleusercontent.com/fmWa009HCo9PNdjbjeK5rpUVqax0sbm4RMc0bZpvQOM1NmhXZN867EuEZOCAWm8FMHGsIEm7ryT9kB1TITIfIvMyV32fxxw4nX9teXVWJUQ08EL5-vpybhQ9_ZMr74c55g"
-height=437px; width=661px;>
-
-This hardware circuit does the following:
-
-* When the Power button is pressed, it checks the keyboard matrix to
- determine whether F3 or VolumeUp (on convertible devices without a
- secure keyboard connection) is also pressed. If so, it causes a
- hard-reset of the embedded controller. This action has the side
- effect of resetting the entire system.
-* It provides an EC_IN_RW indicator for whether the embedded
- controller code has transitioned from read-only code to rewritable
- code as part of verified boot. This indicator is set by the embedded
- controller via the EC_ENTERING_RW GPIO and is reset whenever a hard
- reset is triggered. EC_IN_RW should go to a PCH/SOC GPIO line that
- can be read by the main processor. EC_IN_RW is an open drain signal
- and needs to connect to a pin with an internal pullup or have a
- pullup on the board.
-* EC_RST_L resets the embedded controller (and the rest of the
- system). This is an open drain signal and should be pulled up to the
- appropriate power rail.
-
-The embedded controller boots into read-only (RO) code. It then normally
-verifies and jumps to rewritable (RW) code. Before jumping to RW code, the RO
-code must assert the EC_ENTERING_RW GPIO. This will set the flip-flop, so that
-it asserts the EC_IN_RW signal to the main processor.
-Once the flip-flop has been set, it can only be cleared by pressing the Reset
-key combination. No action by the embedded controller can clear the flip-flop. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/library-optimization/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/library-optimization/index.md
deleted file mode 100644
index 7675ba95c5a..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/library-optimization/index.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: library-optimization
-title: Library Optimization
----
-
-## Problem
-
-One of the optimizations proposed for Chrome OS was the shrinking of C libraries
-by removing the unused symbols from them.
-This document describes the work done in this direction.
-
-## Existing solution
-
-Prior work has been done in this field by Montavista, which released an open
-source set of scripts called the [Library Optimizer
-Tool](http://libraryopt.sourceforge.net/) (libopt). According to their site:
-
-The Library Optimizer examines the complete target file system, resolves all
-shared library symbol references, and rebuilds the shared libraries with only
-the object files required to satisfy the symbol references
-
-Sadly the script is not very well documented (both in the way someone could use
-it without modifying it and the way it works internally). After examining the
-contents of the script and the example build script for libc it seems that the
-script does indeed return a list of .o files which should be included in the
-library after analyzing symbol dependencies. It can also receive a strip
-parameter which uses the strip command to strip the .notes and the .comments
-sections from the library.
-I have modified the script to print out a lot of debug information and I have
-created my own simple library to test the script on. Sadly the script did not
-work as expected, as it didn’t output the expected .o file names.
-
-## New solution
-
-Some of the members of the compiler team came up with a new solution, which
-would still involve passing a list of symbols to the linker, but which is less
-error-prone as the linker can automatically detect the dependencies which these
-symbols introduce.
-The binaries can apparently be stripped of unused symbols using the garbage
-collector, however this is not done by default yet on all Chromium OS packages.
-Stripping the libraries is the interesting part, but this cannot be done
-automatically without a view of the whole system. The solution presented by the
-compiler team involves manipulating the visibility of functions and using
-function sections and garbage collection to eliminate the unused symbols from
-the library.
-The current problems with this approach are:
-
-1. Using -ffunction-sections is supposed to increase the library size
- but is needed for the shrink, must investigate if how much space is
- saved
-2. dlopen()/dlsym() breaks this method so they will have to be allowed
- somehow
-
-## Current work
-
-A script has been created which currently:
-
-1. Builds a list of all the undefined symbols used by executables.
-2. See what symbols are not used anywhere and marks them as unused
-
-The next steps are:
-
-1. Relink the libraries so that the unused symbols get removed (start
- off with a small number of libraries)
-2. Make it work with dlopen/dlsym. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/login/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/login/index.md
deleted file mode 100644
index 00efd9cab11..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/login/index.md
+++ /dev/null
@@ -1,145 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: login
-title: Login
----
-
-[TOC]
-
-## Abstract
-
-* The Chromium OS-based device login mechanism will provide a single
- sign on (SSO) capability that users can use to streamline access to
- cloud-based services
-* This mechanism will be designed for security, privacy and
- ease-of-use
-* We want to ensure that people can fully use Chromium OS without
- needing a Google login
-* While the initial work on the login mechanism has been focused on
- providing instant access to Google services for users with Google
- accounts, we are investigating support for OpenID to allow people to
- fully use the system without needing a Google login.
-
-## Objective
-
-Chromium OS devices are cloud devices. They sync users' data and preferences
-with cloud-based services. To do so, they need some way to bundle all the user's
-data together and to know which machines to sync it down to. To enable this
-functionality, users currently need to log in to Chromium OS devices with a
-Google account. Other authentication service providers may also support this
-functionality in the future.
-
-Chromium OS devices will be able to:
-
-1. Authenticate the user against Google if possible, so that it always
- uses the user's latest password
-2. Enable the user to log in when offline (assuming the user has logged
- in online at least once)
-3. Enable an SSO experience for Google properties
-4. Allow the user to opt-in to auto-login that still does SSO, but does
- not cache the user's password
-
-We also plan to support alternative authentication systems:
-
-1. Give users an SSO experience at OpenID relying parties
-2. Give users an SSO experience at sites for which they've already
- typed in credentials on a Chromium OS device
-
-We are also currently investigating the technical issues involved with allowing
-users to log in to a Chromium OS device using a non-Google OpenID provider. We
-are investigating how to enable 3rd parties to provide interoperable sync
-services.
-
-## Design highlights
-
-### Phase 1 (complete)
-
-#### Current implementation
-
-The initial design achieves the minimum requirements by using Chromium's HTTPS
-stack to talk to existing Google Accounts [HTTP(s)
-APIs](http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html) to
-authenticate the user and get the appropriate cookies to log the user in to all
-Google services the instant the browser UI shows up. Since the login screen is
-actually presented by the browser process itself, it is a simple matter to
-ensure that all cookies acquired as a result of authentication wind up in the
-user's cookie jar. Once the user has successfully authenticated online once, we
-use a hash of her password and the Trusted Platform Module (TPM) to wrap a magic
-string. Offline login is implemented by asking for the user's password again and
-attempting to successfully unwrap this magic value, an operation that cannot be
-performed without access to both the specific TPM chip in the user's device and
-the user's password. In the offline case, obviously, no cookies can be acquired.
-Many users, though, will have unexpired cookies from a previous authentication
-already cached in their Chromium browser session, and these can be used once
-they get back online. The UI for logging in is provided by a the Chromium
-browser itself in a special mode. We allow the user to select a keyboard layout
-on this login screen, and locale will either be set by the device's owner, or be
-selectable on the fly.
-
-For our needs, the normal Google Accounts ClientLogin API is not enough, as it
-is designed to provide cookies that allow a client application to authenticate
-to a single Google service. We want the cookies your browser gets when you run
-through a normal web-based login, so that we can get them into Chromium after
-the user's session has begun. Therefore, we currently go through a three-step
-process:
-
-1. https://www.google.com/accounts/ClientLogin, to get a Google cookie
-2. https://www.google.com/accounts/IssueAuthToken, to get a one-time
- use token (good for a couple of minutes) that will authenticate the
- user to any service
-3. https://www.google.com/accounts/TokenAuth, to exchange the token for
- the full set of browser cookies we need to do SSO
-
-In the future, we're looking to deploy another API that would minimize the
-number of round trips.
-
-#### Making sure we're talking to Google
-
-In order to remain somewhat resistant to network-level attacks, the only root
-certificate that the login process is willing to trust to identify web servers
-is the one that issues Google's SSL certs. Thus, if an attacker is going to
-trick a registrar into giving him an SSL cert for www.google.com, at least he
-has to trick Google's registrar.
-
-#### Auto-login
-
-We don't want to implement auto-login by caching the user's password and running
-it through the normal login process on his behalf; doing so would expose the
-user's password to unnecessary risk. As auto-login is opt-in, the user action
-that sets it up will take place after login, during an active user session --
-which means we have the Chromium browser up and running. Thus, turning on
-auto-login will be a web-based flow that results in the user getting an OAuth
-übertoken that we cache. These tokens are revokable, which allows the user to
-limit his risk if one gets compromised.
-
-We would store this token in the same encrypted-while-shutdown storage as we're
-using for system settings. The login process would check for it, and then, upon
-successfully exchanging it for Google cookies, log the user in. If the login
-would need to proceed offline, then the presence of the token is deemed to be
-enough to allow login to succeed. The user opted in to auto-login; there is only
-so much we can do to protect him and his data.
-
-### Phase 2
-
-#### More efficient, more flexible
-
-Support for web-based authentication flows, like OpenID or those used internally
-by many enterprises, is the next area we hope to explore. This will allow our
-users to authenticate against providers other than Google, though there are
-challenges around supporting arbitrary web-bases flows and still being able to
-manage per-user data encryption without asking users to set up a separate, local
-credential specifically for this purpose -- a user experience that we find less
-compelling than what we provide today.
-
-#### SSO beyond Google
-
-Efforts in this space have not proceeded much at this time. It's probable that,
-if users have chosen to "Log in via Google" at OpenID relying parties, the
-presence of Google authentication cookies in their browser will Just Work. This
-remains to be verified. As for logging in to third-party sites for which the
-user has entered their password already, such behavior will likely be tied to a
-password sync system. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/lucid-sleep/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/lucid-sleep/index.md
deleted file mode 100644
index c47a3ec1826..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/lucid-sleep/index.md
+++ /dev/null
@@ -1,257 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: lucid-sleep
-title: Lucid Sleep
----
-
-[TOC]
-
-# Overview
-
-Some recent Chrome devices have the ability to wake up from a suspended state to
-perform work. Potential tasks include:
-
-* Associating with a known WiFi access point that has just come into
- range
-* Updating user data in response to a received push message
-* Synchronizing with app servers at the request of an app
-* Performing system maintenance like trimming SSDs or checking the
- battery level
-
-To minimize power consumption while performing tasks and external indications
-the device is performing work, the device uses a hybrid power state called Lucid
-Sleep. Effectively using this state requires coordination between all parts of
-the system, from the kernel to the system daemons to the Chrome browser.
-
-This page describes the interactions between the system components to coordinate
-Lucid Sleep. It is intended to help with firmware and kernel implementations and
-troubleshooting of this feature on Chrome devices that support it.
-
-# Kernel
-
-When a Chrome device is suspending, the kernel performs the following steps:
-
-1. Userspace processes are frozen. Every userspace process is removed
- from the scheduler’s run queue and no more CPU cycles are allocated.
-2. Select kernel threads are frozen, depending on the device. Exactly
- which threads are frozen depends on the hardware configuration; in
- some cases, no kernel threads are frozen.
-3. Hardware components are suspended, for example the display panel is
- turned off, the hard drive is stopped, and USB ports are powered
- down.
-4. All non-boot CPUs are disabled.
-5. The kernel programs the underlying hardware with a list of interrupt
- sources that are allowed to wake up the system, for example the
- keyboard or power button.
-6. The kernel puts the boot CPU into a low-power state so that no code
- is running on that CPU.
-
-Resuming a Chrome device is essentially the reverse of the suspend sequence:
-
-1. The hardware determines that a wakeup event has occurred and
- delivers an interrupt to the boot CPU.
-2. The boot CPU starts running the kernel code.
-3. Non-boot CPUs are re-enabled.
-4. Hardware components are resumed.
-5. Any frozen kernel threads are thawed.
-6. Userspace processes are thawed and the system resumes normal
- activity.
-
-To support Lucid Sleep, the kernel allows userspace to expand the list of
-interrupt sources that can trigger wakeup events. It is also possible to specify
-sources that trigger Lucid Sleep versus a full system resume. Hardware
-components that can trigger wakeup events must run independently in a low-power
-state without kernel support. Conversely, kernel drivers for components that do
-not trigger wakeup events must not re-initialize the hardware during Lucid
-Sleep.
-
-For example, a device receives a push message over the network. The power
-manager adds the Network Interface Card (NIC) to the list of hardware components
-that can trigger a wakeup interrupt. It also adds the display panel and USB
-ports to the list of components that must not re-initialize during Lucid Sleep.
-At suspend time the NIC driver puts the NIC into a low-power state rather than
-turning it off. Other suspend operations proceed as normal.
-
-After a wakeup event is triggered and before hardware components are resumed,
-the kernel determines if the wakeup event should trigger Lucid Sleep or a full
-resume and saves this value. When the hardware components are resumed, the
-device drivers query the kernel to determine whether the wakeup is for Lucid
-Sleep. If so, and userspace has requested that that hardware remain off, the
-driver skips the remainder of re-initialization steps. After userspace processes
-thaw, a process can also query the kernel via the sysfs interface to determine
-if the wakeup event triggered Lucid Sleep.
-
-# Power Manager
-
-The power manager provides a mechanism for notifying the system daemons and
-Chrome when the device is in Lucid Sleep. This mirrors the mechanism used for
-notifying the system daemons when the Chrome device is about to suspend. A
-process can register with the power manager on start up. When the system enters
-Lucid Sleep, the power manager notifies registered processes by sending out a
-DarkSuspendImminent D-Bus signal. This signal is the only external indication
-that the system is in Lucid Sleep.
-
-When a device enters Lucid Sleep, the power manager also detects that the wakeup
-event was not user-triggered and it should suspend the device again as soon as
-possible. The DarkSuspendImminent signal both announces Lucid Sleep and signals
-that suspension is imminent.
-
-When a suspend operation successfully completes (and userspace processes have
-been thawed by the kernel), the power manager queries the kernel to see if the
-current resume operation is from Lucid Sleep. If so, it sends out a
-DarkSuspendImminent signal and waits for all applications that have registered
-to receive the signal to report on readiness to suspend. After all registered
-applications have reported readiness or the maximum delay has passed, the power
-manager again instructs the kernel to suspend the system.
-
-## Handling user activity
-
-Occasionally, a user may start to interact with the Chrome device while it is in
-the middle of Lucid Sleep. To ensure that all hardware components are properly
-resumed, in this case the power manager instructs the kernel to perform a test
-suspend. The normal suspend sequence is interrupted after suspending hardware
-components, and the kernel immediately jumps to the step of resuming hardware
-components in the resume sequence. This ensures that all hardware components are
-ready before the user starts interacting with the system.
-
-# Shill
-
-Shill, the connection manager, decides what WiFi-related actions—such as
-programming the wireless NIC and setting RTC timers—to take before the system
-goes into suspend, when the system wakes up in Lucid Sleep, and when the system
-fully resumes. The primary goals of these actions are to maintain WiFi
-connectivity while the system is suspended or in Lucid Sleep and to allow the
-system to respond to important events (e.g. GCM push notifications).
-
-Before the system suspends from a fully awake or Lucid Sleep state, shill
-verifies whether the system’s WiFi interface is connected to a network. If the
-system is connected, shill programs the wireless NIC to wake the system if the
-NIC disconnects from that network, and starts an RTC timer to wake the system in
-Lucid Sleep to renew its IPv4 DHCP lease (or obtain a new IPv6 configuration)
-when it is about to expire. If the system is not connected, shill programs the
-wireless NIC to independently perform periodic scans while the system is
-suspended, and wake the system if any of its preferred networks are found. If
-the number of preferred networks is greater than the NIC whitelist capacity, a
-separate RTC wake timer is started to wake the system in Lucid Sleep to perform
-shill-initiated scans. Shill also programs the wireless NIC to wake the system
-upon receiving packets from whitelisted IP addresses registered by Chrome (more
-details in next section).
-
-When the system wakes up in Lucid Sleep, shill receives a wakeup reason from the
-kernel. If the reason is a disconnect or detection of a preferred network, shill
-triggers a passive scan and attempts to establish a connection to any networks
-found. If the reason is the receipt of a packet from a whitelisted IP address
-(i.e. a GCM push notification), shill does nothing and allows Chrome to handle
-the packet. For any other reason, including the aforementioned RTC timers, shill
-either renews DHCP leases if the system is already connected, or performs a scan
-and if the system is not connected, attempts to establish a connection.
-
-When the system fully resumes, shill deprograms all wake on WiFi triggers on the
-wireless NIC, and stops any RTC timers that shill might have started before
-suspend or during Lucid Sleep. Shill will then scan for networks if the system
-wakes up not connected, and will resume its normal functionality thereafter.
-
-# Chrome
-
-The Chrome browser software handles push messages that arrive over the network.
-It registers with the power manager so that the power manager will wait for it
-to report readiness before suspending from Lucid Sleep. The progress of all push
-messages is tracked from arrival to completion. If Chrome receives a
-DarkSuspendImminent signal while one or more push messages are active, it waits
-until no more active push messages remain before informing the power manager
-that it is ready to suspend. Additionally, any network requests started by a
-message consumer during processing can further delay Chrome before it reports
-readiness to the power manager.
-
-Chrome also tells the NIC which connections to watch for incoming messages.
-Currently, connections to Google Cloud Messaging (GCM) servers are supported.
-After Chrome establishes a connection to the GCM server, it informs the NIC of
-its IP address. While the system is suspended the NIC continues listening for
-network activity and when a packet arrives from the IP address of the GCM
-server, the NIC sends an interrupt to the boot CPU to wake the system into Lucid
-Sleep.
-
-To maintain a connection with the GCM servers, Chrome sends a heartbeat message
-to the server at regular intervals. A specialized timer (the
-[AlarmTimer](https://code.google.com/p/chromium/codesearch#chromium/src/components/timers/alarm_timer_chromeos.h))
-is used to set a Real Time Clock (RTC) alarm. The RTC is a hardware timer that
-runs even while the system is suspended and sends an interrupt to the boot CPU
-to wake the system into Lucid Sleep.
-
-## Freezing Renderers
-
-If improperly handled, frequently waking up the system can consume a significant
-amount of battery resources. In addition to conserving power by not resuming
-power-hungry components like the display panel, while in Lucid Sleep Chrome
-minimizes its usage of the CPU.
-
-Chrome has a multi-process architecture (for more details see
-[here](http://www.chromium.org/developers/design-documents/multi-process-architecture).)
-All apps, extensions, and web pages run inside renderer processes, which
-represent the biggest consumers of the CPU in the system. To minimize the power
-they consume (for example by running the CPU at a high load), Chrome freezes
-renderer processes at the initial suspend time and thaws them only after a full
-resume.
-
-The Linux kernel mechanism of control groups
-([cgroups](https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt)) is
-used. Freezing processes in a cgroup works the same way as freezing userspace
-processes at suspend time: the kernel simply removes the processes from the
-scheduler’s run queue. Since Chrome freezes its renderer processes before the
-system suspends, those processes remain frozen even after the system resumes and
-are thawed only when Chrome explicitly thaws them. Processes stay frozen for the
-duration of Lucid Sleep and CPU load is minimized.
-
-### Properly handling the lock screen
-
-Either users or an enterprise policy can set a Chrome preference that locks the
-screen when the system suspends. Like most parts of the system user interface,
-the lock screen runs inside a renderer process. Common side effects of freezing
-the lock screen operation include a noticeable lag when the system fully resumes
-and dropped keystrokes. In some cases, users may need to re-type their
-passwords.
-
-To address this, the lock screen renderer is given special treatment. If a user
-requests locking the screen when the system suspends, Chrome puts the lock
-screen renderer process in a separate cgroup from the other renderers. The lock
-screen renderer remains unfrozen and responsive when the system fully resumes.
-
-### Dealing with renderers that may receive push messages
-
-Since all web applications as well as Chrome apps and extensions run inside a
-renderer, a push message cannot be fully handled if the destination renderer has
-no CPU cycles. So some renderers do need to remain active during Lucid Sleep.
-
-Chrome decides whether or not to freeze a renderer process when the renderer is
-first spawned. For example, for Chrome apps and extensions, Chrome looks at the
-permissions that the app/extension has requested in its manifest. If it has
-requested the “gcm” permission, Chrome keeps the renderer out of the group of
-renderers to freeze at suspend time. This ensures that when a push message
-arrives it can be handled as quickly as possible.
-
-## Interacting with the GPU process
-
-Chrome uses a dedicated process to interact with the GPU on the system. This
-process is not frozen during Lucid Sleep and can continue to respond to requests
-to render objects to the screen. Though the renderers themselves may be frozen
-and unable to make requests to the GPU process, the main browser process remains
-active and can issue updates.
-
-This has implications for the display panel component, which is off during Lucid
-Sleep. Any attempts by the GPU process to update the contents of the screen
-result in errors, causing loss of context and forced reallocation of resources.
-In addition to affecting GPU performance, repeatedly losing and allocating a
-context (often multiple times per second) add a significant load to the CPU,
-increasing the amount of power consumed during Lucid Sleep and reducing the
-system’s overall battery life.
-
-To avoid consuming unnecessary resources, Chrome stops its compositor from
-updating the screen and prevents rendering requests from reaching the GPU
-process. If the user has configured the screen to lock when the system suspends,
-Chrome waits until the contents of the lock screen are visible before directing
-the compositor to stop rendering. The delay allows the contents of the user’s
-screen to remain invisible and secure when the system resumes. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine (1).png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine (1).png.sha1
deleted file mode 100644
index a850f9c2d95..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-42261ac08d8c57b1157b0c218dd313948b1fe41a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.png.sha1
deleted file mode 100644
index 6a50ad344c0..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e13400fec6a3186eb07eca09cf2b0377a673f097 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.svg.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.svg.sha1
deleted file mode 100644
index 1e1438468c7..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b6c323103897d21a3c135929e109c5dd0700dc50 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/index.md
deleted file mode 100644
index 44fd7db72f5..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/network-portal-detection/index.md
+++ /dev/null
@@ -1,130 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: network-portal-detection
-title: Network Portal Detection
----
-
-[TOC]
-
-Shill, the connection manager for Chromium OS, attempts to detect services that
-are within a captive portal whenever a service transitions to the ready state.
-This determination of being in a *captive portal* or being *online* is done by
-attempting to retrieve the webpage http://clients3.google.com/generate_204. This
-well known URL is known to return an empty page with an HTTP status 204. If for
-any reason the web page is not returned, or an HTTP response other than 204 is
-received, then shill marks the service as being in the *portal* state.
-
-Many, or perhaps most, captive portals found in Hotels, Coffee Shops, Airports,
-etc, either run their own DNS server which returns IP address for all queries
-which point to their webserver, or they intercept all HTTP web traffic and
-return a 302 (redirect) response. The captive portal detection works very
-reliably with these types of portal to indicate that the service is not fully
-online.
-
-Other captive portals, sometimes run by cellular carriers, provide absolutely no
-IP connectivity other than to their own servers, but they use a standard DNS
-server and do not intercept HTTP requests. When a ChromeBook connects to this
-type of network, the HTTP requests fail because the TCP connection to
-clients3.google.com can never be established. The portal code tries multiple
-times for up to 10 seconds to connect to clients3.google.com. If it cannot
-connect it marks the service as being in a captive portal. This determination is
-somewhat unreliable because very high latency connections, lossy connections and
-other network issues can also result in failure to connect to
-clients3.google.com. All of these are indicative of a network that is not fully
-functional, but they do not necessarily indicate that the machine is stuck in a
-*captive portal.*
-
-### Shill Service State Machine
-
-[<img alt="Flimflam service state machine"
-src="/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.png">](/chromium-os/chromiumos-design-docs/network-portal-detection/FlimflamServiceStateMachine.png)
-
-### Reverse Path Filtering
-
-By default ChromeOS enables [reverse path
-filtering](http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.rpf.html) in the
-kernel which drops packets received over a network interface inconsistent with
-the outbound routing tables. This can present a problem when trying to determine
-portal state when connected to multiple networks (WiFi, Wired Ethernet and/or a
-Mobile Broadband connection). To avoid dropped packets, shill disables reverse
-path filtering globally and on a per device basis while it is running the portal
-detection code.
-
-### Shill Implementation
-
-shill attempts to determine the portal state whenever a service transitions to
-the *ready* state. It does the determination using libcurl. Several options are
-set:
-
-* libcurl is instructed not to cache DNS entries, and not to allow
- re-use of HTTP connections
-* libcurl is given a 10 second timeout for connection and for the
- entire transaction.
-* libcurl is told to bind to a specific interface so all traffic is
- done over that interface
-* libcurl is explicitly told which name servers to use for name
- resolution
-* reverse path filtering is disabled (see above).
-
-Portal detection can be enabled or disabled on a per service basis, or if that
-is not set (set to AUTO), the determination is done based on the default for the
-technology.
-
-### Interpretation of Portal State
-
-Chrome and shill use portal state for a variety of reasons.
-
-For prioritizing connections shill always prioritizes an *online* connection
-over one in a *portal* state. To the extent that connections using a web proxy
-are never marked as *portal* but instead immediately marked as *online* this
-inhibits shill's ability to choose the best connection/service.
-
-For cellular connections, and especially for Verizon, Chrome uses portal state
-to determine when to put up *toast* which will prompt the user to buy more data.
-It also controls the presence of a 'buy data' button on the network
-settings/information tabs for the Verizon Wireless service.
-
-When at the OOBE pages and the login screen, Chrome uses the portal state to
-prompt the user to check the network connection (more details needed from the
-Chrome team).
-
-### Web Proxies
-
-Web proxies present multiple problems for portal state determination. libcurl
-supports forwarding requests via a proxy, but this can only be done if the IP
-address of the proxy is known. Shill does not currently know the IP address of
-the web proxy, nor does it have the ability to evaluate the URL against the
-JavaScript code that determines if the proxy should be used.
-
-Several services (e.g. auto update, etc) use Chrome as the engine to fetch URLs,
-or use Chrome to evaluate the URL and find out which, if any, proxy to use. This
-seems like an appealing solution, but, knowing the proxy is insufficient,
-because one might also need to authenticate to the proxy. It is unclear if
-Chrome exposes the proxy authentication information. I also do not believe that
-Chrome can proper evaluate a URL relative to the proxy settings on a per
-interface basis. Chrome almost certainly uses the default connection and the
-proxy settings for the default connection when doing HTTP requests and when
-evaluating a URL against the JavaScript configuration.
-
-### Future Ideas
-
-* Improve Chrome to be able to do what libcurl does --- route http
- requests via a specific interface and use the DNS servers associated
- with that interface.
-* Improve Chrome so that it can authenticate to two different proxies
- on two different interfaces simultaneously.
-* Improve Chrome so that it can figure out automatic proxy
- configuration based on DNS lookup of wpad over different names on
- different interfaces. (etc....)
-* Have the ChromeOS connection manager ask Chrome to fetch the URL
- instead of libcurl.
-
-Or
-
-* Do much of the above, but have Chrome return proxy authentication as
- well as IP address for a given URL, so that shill can pass the proxy
- information to libcurl (or implement it all ourselves in shill). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/onc/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/onc/index.md
deleted file mode 100644
index 181bc5eafd4..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/onc/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: onc
-title: onc
----
-
-See [Open Network
-Configuration](/chromium-os/chromiumos-design-docs/open-network-configuration) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/open-network-configuration/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/open-network-configuration/index.md
deleted file mode 100644
index 4bdf8ea61d4..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/open-network-configuration/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: open-network-configuration
-title: Open Network Configuration
----
-
-The Open Network Configuration specification describes a network and certificate
-configuration format that could be used across operating systems. Chromium OS
-will support it natively.
-
-The specification can be found here:
-
-<https://chromium.googlesource.com/chromium/src/+/HEAD/components/onc/docs/onc_spec.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/index.md
deleted file mode 100644
index e44bfcb9ca0..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/index.md
+++ /dev/null
@@ -1,339 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: out-of-memory-handling
-title: Chrome OS Out of Memory Design
----
-
-August 2011 \
-jamescook@, gspencer@, ups@
-
-Chromebooks have a limited amount of physical RAM (1 - 2 GB) and do not use
-swap. Currently, when the machine runs out of memory the kernel’s OOM killer
-runs and kills a process. Usually this is a renderer process, which results in
-one or more tabs being killed. If that renderer is running the frontmost tab,
-the user sees a “He’s dead, Jim” page informing the user that the tab was
-killed. If it is running background tabs, those tabs are reloaded when the user
-switches to them.
-
-## Background
-
-See the “Where does our memory go?” appendix below for some discussion of our
-current memory usage.
-
-## Proposal
-
-Ideally, the user should never have to worry about running out of memory. We
-should be able to determine when we’re getting low on RAM and take actions in
-userspace to reduce our footprint. We propose to continue closing tabs to free
-up RAM, but to start with closing individual tabs rather than the whole set
-owned by one renderer. We like this direction because:
-
-* The user experience is better than killing a process - one thing dies at a
- time, rather than a seemingly random group.
-* This strategy is commonly used on phones and tablets.
-* We can close tabs quickly, so the user experience should be Chrome running
- fast, dropping data, and continuing to run fast, rather than a gradual
- slowdown we would anticipate from trying to compress/hibernate the state of
- a tab.
-* We can try to be intelligent about which tabs we close, preferring those
- which are rarely or never used, or which are unlikely to have user-created
- state.
-* We know that closing a tab will rapidly return a large block of memory to
- the OS, as opposed to flushing caches, running garbage collection, etc.
- which return variable amount of RAM and may quickly result in the tab
- reclaiming it.
-* The strategy is relatively simple - we already know how to close tabs and
- automatically reload them.
-
-We should kill renderer processes only as a last resort, and even then avoid
-killing the process associated with the page the user is viewing. The user
-should never see “He’s dead Jim” unless the page he is looking at is consuming
-all available memory on the device.
-
-We hypothesize that if we can avoid showing “He’s dead Jim” the majority of
-users will not notice the page kills. If users find this objectionable, we can
-try other strategies, like swap-to-memory (zram) or blocking the creation of new
-tabs when we’re out of RAM.
-
-## Technical Design
-
-We’re going to build a “double-wall” for low-memory states: A “soft wall” where
-the machine is very low on memory, which triggers a user space attempt to free
-memory, and a “hard wall” where the machine is out of memory, which triggers the
-normal kernel OOM killer. In both cases we’ll attempt to minimize impact on the
-user.
-
-### For the “soft wall”
-
-It takes memory to free memory. In particular, while chrome is trying to free up
-memory processes will continue to consume it. So we need to trigger the “soft
-wall” while there is still some free memory available.
-
-The kernel will reserve 10 MB of memory for the wall. It will provide a special
-file descriptor to allow user space processes to monitor for a low-memory event.
-The chrome browser process will monitor that file descriptor for the event.
-(We’ll keep the size in a constant, and maintain UMA statistics on whether it
-was a large enough buffer space.)
-
-When an allocation occurs that eats into this reserve, the kernel will
-temporarily “move the wall back”, allowing a memory page to be used and the
-allocation to succeed. It will send an event on the file descriptor and start a
-timer for 200 ms. It will listen on the file descriptor for a “done” event from
-chrome.
-
-When the soft wall is reached, Chrome will evaluate tabs to decide which one(s)
-to close, and in what order, in order to free up memory. Note that closing a tab
-in this mode is different from the user closing a tab because we can’t run the
-“onclose” javascript handlers that we would normally run (they might do
-anything: open a modal dialog, for instance). We are investigating how to
-implement this - we may choose to navigate forward to about:blank, which frees
-most of the memory used by the page and allows us to navigate back when the user
-selects the tab. This saves their scroll position, form data, etc.
-
-The chrome browser process will iterate through its list of tabs to choose one
-to close or blank out. The browser prefers closing tabs in this order:
-
-* A background tab which the user has opened, but never seen (e.g., a
- control-click on a link)
-* A background tab into which the user has never typed/clicked/scrolled
-* Any background tab (ordered by most recently clicked in buckets of 10 min,
- then by memory consumption)
-* The foreground tab
-
-Within each group, tabs are ordered by the last time that the user clicked on
-them, preferring to close tabs that haven't been clicked on in the longest
-amount of time. If two tabs were clicked on within 10 minutes of each other,
-then the one with the largest memory use is more likely to be closed.
-After closing the tab, if the renderer is still running (it has other tabs open)
-it tells tcmalloc to release freed memory back to the OS immediately. The
-browser process then tells the kernel it is done. The kernel then resets its
-memory reserve back to 10 MB.
-
-### The “hard wall”
-
-Our hard wall is the OOM process killer. We hit the hard wall in two situations:
-
-1. During chrome’s memory cleanup, we still run out of physical memory
- (a fast leak)
-2. Chrome doesn’t send the done event promptly
-
-If Chrome sends the done event, but didn’t free enough memory, we send the soft
-notification again, and rely on the timeout to do the hard kill. Per ups@ this
-is easier to implement in the kernel and more robust.
-
-We cannot do any userspace work when we hit the hard wall. However, we can use
-the kernel’s oom_score_adj property on processes to give it guidance as to which
-process to kill. We set this score at startup for OS-related processes to -1000.
-For Chrome related processes, we set an initial score as outlined below. For
-renderers, we start them with an initial score of 300 and adjust the score once
-every 10 seconds (from within the browser process).
-
-A higher oom_score_adj makes a process more likely to be killed in OOM
-situations: you can think of it as a percentage of memory. Setting a
-oom_score_adj value of 500, for example, is roughly equivalent to allowing the
-remainder of tasks sharing the same system, cpuset, mempolicy, or memory
-controller resources to use at least 50% more memory. A value of -500, on the
-other hand, would be roughly equivalent to discounting 50% of the task's allowed
-memory from being considered as scoring against the task. A score of -1000 makes
-a process unkillable by the OOM killer.
-
-The current Linux OOM killer algorithm only considers allowed memory usage, and
-not run time or process start time in its “badness” score. Note that this
-algorithm does not guarantee that the processes will be killed in the order
-specified, it is only a hint. Please check out [this
-description](https://www.kernel.org/doc/html/latest/filesystems/proc.html#chapter-3-per-process-parameters)
-for more detailed information.
-
-By default all processes started by init on ChromeOS are set to an initial value
-of -1000, which is inherited by sub-processes, so that only processes which we
-explicitly set to higher values will be killed by the OOM killer. We score
-processes as follows:
-
-| Score | Description |
-| ----- | ----------- |
-| -1000 | Processes are never killed (Upstart uses `oom score never`) |
-| -1000 | Linux daemons and other processes |
-| -1000 | CrOS daemons that are critical to the system (dbus) |
-| -900 | CrOS daemons that are needed to auto-update, but can restart |
-| -100 | CrOS daemons that can recover (shill, system metrics) |
-| -100 | Android system processes |
-| 0 | Chrome browser and zygote |
-| 100 | Plugins, NaCl loader |
-| 200 | Chrome GPU process, workers, plugin broker process |
-| 300 | Chrome extensions |
-| 300-1000 | Chrome renderers |
-| 1000 | Processes that are killed first |
-
-The renderer scoring will follow the algorithm for tab closing above. However,
-since each renderer process might be servicing multiple tabs, we select the
-lowest score (least likely to be killed) of all the tabs for each renderer. This
-ensures that the renderer showing the tab the user is viewing has a low score,
-even if other tabs in the same renderer have a higher score.
-
-### “Why not just garbage collect?”
-
-Well, we tried that. In purging memory, we used the MemoryPurger, and even added
-Webkit cache and font cache, and notification of V8 that we’re low on memory to
-the list of things that the memory purger pushes out, and found that for a
-browser with 5-10 “real world” tabs open, we save single-digit megabytes, and
-they rapidly fill up again (for instance, after 10s, 30% of the memory recovered
-appears to be used again). With the exception of V8, it takes only 20ms or so to
-do the purge, but it’s not very effective. V8 adds another 700ms or so to the
-time it takes to purge.
-
-## Appendix: “Where does our memory go?”
-
-Memory consumption is notoriously tricky to measure and reason about, as Evan
-recently noted in his blog post “[Some things I’ve learned about
-memory](http://neugierig.org/software/blog/2011/05/memory.html)”. For a release
-image of Chrome OS with the stock extensions installed, after logging in and
-loading `about:blank`, `/proc/meminfo` looks like:
-
-```
-MemTotal: 1940064 kB &lt;---- ~2 GB minus kernel
-MemFree: 1586544 kB
-Buffers: 3640 kB
-Cached: 248344 kB
-Active: 110848 kB
-Inactive: 210648 kB
-Active(anon): 77216 kB \\____ ~120 MB dynamically allocated “anonymous memory”
-Inactive(anon): 48744 kB /
-Active(file): 33632 kB \\____ ~200 MB file-backed executables, mmap’d files,
-etc.
-Inactive(file): 161904 kB / some of which can be released
-...
-AnonPages: 69512 kB
-Mapped: 85740 kB
-Shmem: 56448 kB &lt;---- ~50 MB shared memory, mostly from video driver
-Slab: 15096 kB
-SReclaimable: 6476 kB
-SUnreclaim: 8620 kB
-KernelStack: 1288 kB
-PageTables: 3380 kB
-After opening gmail.com, calendar.google.com, and
-[espn.go.com](http://espn.go.com/) (image and Flash heavy), /proc/meminfo
-changes as follows:
-Active(anon): 277856 kB \\___ ~390 MB dynamically allocated, up from ~120
-Inactive(anon): 111440 kB /
-Active(file): 50912 kB \\___ ~220 MB file-backed, up from ~200
-Inactive(file): 174260 kB /
-...
-Shmem: 140012 kB &lt;--- ~140 MB, up from ~50
-```
-
-File-backed memory doesn’t change much, because most of it is executables and
-mmap’d resource files that don’t change. Renderers account for most of the
-change in dynamically allocated memory, though the browser process grows a
-little for each new renderer. Both Flash and WebGL content will cause the video
-driver to consume additional memory. (Of note, R12 had a bug where video streams
-would cause the video driver’s memory consumption to grow rapidly, which was the
-primary cause of “He’s dead Jim” in the cases I investigated.)
-
-From a userspace perspective, most of the renderer’s memory consumption is
-images and strings, depending on the source site. For example, tcmalloc heap
-profiling of a renderer on gmail.com shows the top 5 consumers:
-
-```
-Total: 27.5 MB
-15.7 57.0% 57.0% 15.7 57.0% WTF::fastMalloc
-4.3 15.5% 72.5% 4.3 15.5% pixman_image_create_bits (inline)
-4.1 15.0% 87.5% 4.1 15.0% std::string::_Rep::_S_create (inline)
-0.8 2.9% 90.4% 0.8 2.9% v8::internal::Malloced::New
-0.6 2.2% 92.6% 0.6 2.2% sk_malloc_flags
-```
-
-The graphical profile (see attachment "pprof.renderer.gmail.svg") shows
-`WTF::fastMalloc` is allocating strings, mostly for `HTMLTreeBuilder`.
-For `espn.go.com`, an image heavy site, the heap profile looks like:
-
-```
-Total: 26.8 MB
-11.4 42.6% 42.6% 11.4 42.6% WTF::fastMalloc
-10.7 40.0% 82.5% 10.7 40.0% sk_malloc_flags
-2.8 10.3% 92.8% 2.8 10.3% v8::internal::Malloced::New
-0.2 0.7% 93.5% 0.2 0.7% WebCore::Text::create
-0.2 0.6% 94.1% 0.2 0.8% SkGlyphCache::VisitCache
-```
-
-The graphical profile (see attachment "pprof.renderer.espn.svg") shows
-`WTF::fastMalloc` is still strings, but now `sk_malloc_flags` is allocating large
-image buffers, from WebCore::PNGImageDecoder and JPEGImageDecoder.
-Work is underway to reduce WebKit memory consumption for 8-bit strings, see
-<https://bugs.webkit.org/show_bug.cgi?id=66161>
-
-Some WebKit fixes recently landed to make decoded image pruning more efficient:
-<https://bugs.webkit.org/show_bug.cgi?id=65859>
-
-All that said, users will always be able to fill available memory by opening a
-large number of tabs, or using web sites that bloat with DOM nodes or JS
-objects. We will always need some mechanism to handle the out-of-memory case.
-
-## Items for engineering review (added September 6):
-
-A. We can take three general approaches in OOM situations:
-
-1. Stop the user from consuming more RAM. (Warn them with a butter-bar,
- then eventually block them from opening more tabs, etc.)
-2. Spend CPU to simulate having more RAM (zram memory compression,
- process hibernation?)
-3. Throw away data we can quickly/safely regenerate
-
-We’re afraid 1 is annoying and 2 may be slow. We’re proposing trying 3, and we
-can easily fall back to 1 if it doesn’t work out.
-
-B. On more reflection, the soft wall should probably be more than “one tab’s
-worth” of memory away, perhaps 25 or 50 MB. That will give us much more time to
-do work. How do we figure out the right value?
-
-C. This design intentionally does not address Chrome’s baseline memory usage or
-cases where Chrome might leak or bloat. We’ve got extra instrumentation in R14
-to help find end-user cases where Chrome on Chrome OS uses a lot of RAM. We’d
-like to do something simple with the OOM case, and spend more time
-finding/fixing specific cases of bloat.
-
-D. We could add some sort of subtle notification when Chrome hits the soft wall.
-Glen proposed badging the wrench icon and providing a menu item like “Chrome
-needs attention” that would take you to the task manager and show you processes
-that are eating a lot of RAM or CPU. This might help power users find and report
-cases of bloat. Don’t - log it and learn.
-
-E. We can probably do testing of the signals sent from the kernel with autotest.
-The correctness of the kill-priority algorithm can be tested with unit and
-browser tests. The discard/kill process itself can be tested with browser tests.
-
-## Notes from design review (added September 6):
-
-Overall, we want to build something simple, get it in the field, collect
-log/histogram data and iterate to ensure we’re killing the right tabs. We don’t
-want to add any UI - managing memory is our problem, not the user’s problem.
-
-Action: Implement an experiment for Chrome users where we test our killing
-algorithm by testing which tab the user is most likely to close or never visit
-again.
-
-Action: Log how much memory you get back from each close/kill so that you can
-start to develop an algorithm for which tab might get you the most memory back.
-GPU process can run out of aperture space and the GL calls can fail. Must
-reclaim memory by closing GPU intensive tabs. Probably needs a GPU-specific
-implementation, not part of this feature.
-
-Action: Add a global notification that we are low on memory, and different
-components can respond appropriately.
-
-Perhaps it would be good to implement logging per user to determine what their
-patterns are to feed into the algorithm.
-
-What to do about parent/child tabs (gmail tearoffs, etc.) Can we restore this
-connection?
-
-Decision: delay implementing zram until we know more about whether we want it
-for extending memory.
-
-Action: Implement an about: page that describes tab close/kill order at the
-moment. Could also show historical kill/close information.
-
-Action: Design an experiment for the size of the “soft wall” memory padding.
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.espn.svg.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.espn.svg.sha1
deleted file mode 100644
index 09b4f70e7b7..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.espn.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-30e9b835e0fc99f2ffef6a995e419167b757244f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.gmail.svg.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.gmail.svg.sha1
deleted file mode 100644
index 84eb422c9f8..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/out-of-memory-handling/pprof.renderer.gmail.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eb214e2c72edda852f03ce6299f50e9c26acb418 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/index.md
deleted file mode 100644
index 3a394795570..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/index.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: partition-resizing
-title: Partition Resizing
----
-
-[TOC]
-
-**Note: This is a proposal that has never shipped.**
-
-## Abstract
-
-Chromium OS will be able to resize partitions without erasing them, easing
-delivery of system updates.
-
-## Use case
-
-A big new operating system release is on the way, and it needs more system space
-than the current system partitions have. We can push an update that makes the
-system partitions bigger (by shrinking the stateful partition); then when the
-big new release arrives, enough space is available on the disk.
-
-## Partition layout
-
-A drive currently contains up to four partitions, in the following order:
-
-1. One partition for state resident on the drive, called the "stateful
- partition." Any space required in the stateful partition is
- pre-allocated by the system. For example, a large file will be
- allocated for the autoupdater to use to store downloaded updates.
-2. An optional swap partition.
-3. Two partitions for the root file system. For more information, see
- the [File
- System/Autoupdate](/chromium-os/chromiumos-design-docs/filesystem-autoupdate)
- document.
-
-In the future, drives may be able to have more partitions, as needed.
-
-## Procedure for resizing partitions
-
-The following diagram shows all the steps that must occur to resize partitions
-and leave them in the desired state.
-Keep in mind that at any point the system may be unexpectedly rebooted, and the
-OS must recover gracefully (in particular, it must not brick). Also, keep in
-mind that the OS doesn't allow changing the contents or location of the
-partition we booted into.
-The following procedure assumes that at the start of the process, the system has
-booted into the last partition on the disk. If, instead, the system is currently
-booted into the second-to-last partition, then the partition-resizing process
-usually waits to begin until the next update or reboot occurs naturally.
-However, if the resizing is urgent, the system can copy the A partition into B
-and then reboot before starting the illustrated procedure.
-If there's a swap partition, it isn't resized.
-Note that, at the end of the following process, the A and B partitions are
-always the same size as each other.
-
-![](/chromium-os/chromiumos-design-docs/partition-resizing/resize_partition.png)
-
-## When does resizing occur?
-
-Partition resizing is initiated by the system, not by the user.
-Some notes:
-
-* The approach described in this document depends on ext4 being able
- to make the stateful partition smaller.
-* If the stateful partition contains a lot of data, it may not always
- be possible to resize it down to the desired size; in that case the
- system will have to delete state information before resizing.
-* The resizing process currently assumes that the machine can't be
- used while partitions are being resized. Therefore, during the time
- while the system is shrinking the stateful partition, the user will
- have to leave the machine turned on but won't be able to use it. The
- system will display a "working...please wait" message on the screen.
-* Open issue: Will ext4 support resizing partitions while the file
- system is mounted? If it does, then we may be able to allow the user
- to use the machine while resizing partitions.
-
-Note that, to support encrypted home directories, we will already have to have a
-"working...please wait" message on the screen at logout when we re-sparsify the
-home directory. This would be an appropriate time to resize the stateful
-partition file system if needed.
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/resize_partitionpng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/resize_partitionpng.sha1
deleted file mode 100644
index 0f17f6bb37b..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/partition-resizing/resize_partitionpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-22041343faca02165ec17b4b8189da114b28d66e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/powerwash/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/powerwash/index.md
deleted file mode 100644
index b580874edcb..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/powerwash/index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: powerwash
-title: Powerwash
----
-
-**Status**: v1 implemented in M23
-
-**Goal**
-
-Provide users with a means to clear mutable system data as part of the base OS.
-
-**Background**
-
-There are a number of cases where it can be useful for users to have a safety
-hatch that doesn't require knowledge of the developer switch or have a valid
-recovery device (USB Stick, or SD card) handy:
-
-* Disk corruption: in the wrong place, it could impair the ability to
- sign in to any account
-* Bad update interaction: may impair sign-in or other behavior
-* Too many accounts to delete one at a time: happens in lab
- environments or other high traffic locations
-* ...
-
-**Requirements**
-
-> v1:
-
- * Must be accessible from the normal UI
- * Must be accessible before sign-in
- * Must not be usable by a remote attacker with a single account
- compromise
- * Must not destroy unrecoverable data: Limited TPM state on disk,
- Install-time Attributes file
-
-> v2:
-
- * Must clear the TPM, or
- * Must preserve enterprise enrollment status
- * May preserve enterprise enrollment token
-
-**Overview**
-
-Powerwash will provide a key combination that is accessible at the sign-in
-screen (Ctrl+Alt+Shift+R) and a menu item in Settings, after sign-in, to trigger
-a system wipe. The wipe itself will using an existing implementation and will be
-performed at boot-time.
-
-**Detailed Design**
-
-Powerwash is simple in practice. It performs the following steps at boot-time:
-
-* Preserve any files desired by moving them to /tmp (a ramdisk)
-* Perform a fast wipe of the stateful partition (using the same script
- as the developer mode transition back to verified)
-* Restore the files preserved in /tmp
-
-In order to trigger those steps, a request from Chrome must be made to the
-session manager requesting a wipe. If no user has signed in to the system yet,
-then the request will be granted, and a wipe will occur on the next boot. If a
-user has signed in, then a request to wipe the system will result in a reboot
-followed by a confirmation request at the sign-in screen. This is meant to limit
-the risk of a single compromised account from being used to wipe a machine.
-
-**Interface to Chrome**
-
-Chrome will communicate with session_manager over DBus. A call to
-StartDeviceWipe() will trigger the request. If no user has signed in, then
-session_manager writes "fast safe" to a reset file:
-/mnt/stateful_partition/factory_install_reset. This is already used for factory
-wipes, so the changes are minimal.
-
-**Wipe mechanism**
-
-During boot, chromeos_startup checks the ownership (root) and existence of the
-reset file. This will follow the normal factory reset wipe path except that it
-will not use the factory wipe screen. clobber-state is then called with the
-arguments in the reset file, as mentioned above.
-
-**Preserved Files**
-
-In order to preserve files, the "safe" argument is added to clobber-state. A
-"safe" wipe will use the tar utility to preserve the path, ownership, and
-permissions of any files that should survive the wipe. At present, the install
-attributes file (lockbox.pb) and the TPM key blobs are preserved. The TPM is not
-cleared by a power wash which means that the lockbox cannot be reinitialized nor
-can some pre-TPM-ownership actions be taken.
-
-**Internationalization**
-
-The UI in Chrome will use the normal localized asset infrastructure.
-
-The wipe message will use chromeos-boot-alert's localized asset implementation.
-
-**Security considerations**
-
-The primary security considerations here are around whether a remote attacker
-can wipe a system. While this is not necessarily the most malicious of attacks,
-it would not be a pleasant user experience in the least. To limit this attack,
-we've required that powerwash be triggered or confirmed prior to any active
-accounts signing in. This means that an unprivileged attacker could request a
-powerwash, but not persist across the reboot to confirm it (minus a small
-chronos-owner attack surface at sign-in time). If an attacker had gained higher
-privileges, then they could wipe the device without help.
-
-**Privacy considerations**
-
-This feature allows users to wipe all user data and no user data is generated in
-the process.
-
-**Testing Plans**
-
-(detailed elsewhere)
-
-**Caveats**
-
-**Differences from a developer mode wipe:**
-
-* The TPM is not cleared which means:
- * enterprise enrollment after a powerwash will fail
- * shared-data disk encryption key will not have changed
- * lockbox & tpm data must be manually preserved using "safe"
-
-**Constraints on v1/Additional work needed:**
-
-* Enterprise enrolled devices cannot be reset using this mechanism.
- * The UI does not support it.
- * The implementation may not allow re-enrollment after a wipe (if
- the UI supported it).
-* crossystem clear_tpm_owner_request is not in use. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromeOSCryptohomeTPMusage.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromeOSCryptohomeTPMusage.png.sha1
deleted file mode 100644
index df11a5652f3..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromeOSCryptohomeTPMusage.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-15e4075066cebced07ca3d28e315a51757e473b2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromiumOS_TPM_Cryptohome.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromiumOS_TPM_Cryptohome.png.sha1
deleted file mode 100644
index 989f6f53226..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromiumOS_TPM_Cryptohome.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7e33a2996c2cd9a470bef383ac9a2d76093ef03b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--ecryptfs2bext3-1008hapdf.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--ecryptfs2bext3-1008hapdf.sha1
deleted file mode 100644
index 280c723de0a..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--ecryptfs2bext3-1008hapdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5b9b983601a06533c25c5fa694c232d92f44f34d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--no-encryptionpdf.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--no-encryptionpdf.sha1
deleted file mode 100644
index 84dd0287602..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-benchmarks--no-encryptionpdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-731233dadd3ea78e0a2eae90414ec66a40e5e2ac \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-on-chrome-os--dmcrypt2bext42b1008hapdf.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-on-chrome-os--dmcrypt2bext42b1008hapdf.sha1
deleted file mode 100644
index 15daf3b0eb3..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/disk-encryption-on-chrome-os--dmcrypt2bext42b1008hapdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-79cc4244358bb340d31cd748d4da1b280d104cd2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/index.md
deleted file mode 100644
index 10ea553f3e9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/protecting-cached-user-data/index.md
+++ /dev/null
@@ -1,496 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: protecting-cached-user-data
-title: Protecting Cached User Data
----
-
-[TOC]
-
-## Abstract
-
-* Chromium OS devices are intended to be both portable and safely
- shared. As a result, privacy protection for user data stored on the
- local disk is a requirement for a Chromium-based OS.
-* Privacy protection for user data stored on a local disk is
- accomplished via system-level encryption of users' home directories.
-* Chromium OS uses the [eCryptfs](https://launchpad.net/ecryptfs)
- stacked filesystem with per-user vault directories and keysets to
- separate and protect each user’s cached data.
-* Chromium OS devices may use the Trusted Platform Module (TPM) to
- protect against brute-force attempts to recover a user’s keyset (and
- therefore the data it protects).
-
-## Problem: Multiple users, portable devices, locally stored data
-
-Chromium OS should provide privacy protection for user data stored on the local
-disk. In particular, some subset of a user's email, pictures, and even HTTP
-cookies will be stored on the local drive to enhance the online experience and
-ensure Chrome notebooks are useful even when an Internet connection isn't
-available. Without this protection, anyone who has physical access to the
-Chromium OS device would be able to access any data cached on it.
-
-Normally, data stored in the cloud is protected by privacy-guarding mechanisms
-provided by the servers that host it. When data is pulled out of the cloud, it
-moves outside of the reach of those server-provided protections. Even though
-this is the case today with most computers, there are two areas that make this
-even more important to Chromium OS:
-
-* With a Chromium OS device, users shouldn't have to worry about
- whether other users of the same device can see their cached data.
- For example, if my friend wants to log in to my device to check her
- mail, it's not a big deal. She won't be able to access my data, and
- even though she used my device, I won't be able to access her data.
-* Chromium OS devices are portable. The risk with very portable
- devices is that they are easy to misplace or leave behind. We don't
- want the person who finds a device to instantly have access to every
- users’ websites, emails, pictures, and so on.
-
-## Solution: Encryption
-
-Since Chromium OS is built on Linux, we can leverage existing solutions for
-[encrypting](http://en.wikipedia.org/wiki/Disk_encryption_theory) the user's
-data at the underlying operating system level and make sure it is automatic and
-mandatory. Given the available implementation choices, many possible approaches
-were considered (see [Appendix
-B](/chromium-os/chromiumos-design-docs/protecting-cached-user-data#Appendix_D_Designs_considered)
-for details). Of those approaches, we chose a solution that provides file
-system-level encryption of [home
-directories](http://en.wikipedia.org/wiki/Home_directory) for each user on a
-device.
-
-Encrypting each user's home directory means that all of the data stored and
-cached while browsing will be encrypted by default. In addition, data created
-and maintained by plugins, like [Adobe
-Flash](http://www.adobe.com/products/flash/), will be transparently encrypted
-without developers or users needing to take any special action. The same goes
-for any data stored by HTML5-enabled web applications.
-
-Existing Operating Systems rely on file ownership and access permissions to
-prevent two users of a system from accessing each other’s files. However, the
-root or administrative user typically can still access any of these files, and
-the files are really only protected as long as that Operating System instance is
-booted. Mounting the drive as a secondary disk would allow full access.
-Encryption is a better solution to this problem--even when the device is in the
-hands of a malicious individual, that person would still have to recover the
-encryption keys to be able to access the cached data.
-
-## How encryption works
-
-In a nutshell, each user gets a unique “vault” directory and keyset that is
-created at her first login. The vault is used as the underlying encrypted
-storage for her data. The keyset is tied to her login credentials and is
-required to allow the system to both retrieve and store information in the
-vault. The vault is opened transparently to the user at login. On logout or
-reboot, the user's data is locked away again.
-
-### Details
-
-Each user is allocated a vault directory that contains the encrypted backing
-storage for their home directory. The vault is located in a directory specific
-to the user using a hash of the user name with a salt value, and is mounted
-using eCryptfs at login to the user directory. A user-specific file encryption
-key (FEK) and file name encryption key (FNEK) allow eCryptfs to transparently
-encrypt and decrypt while the vault is mounted. A successful mount of the vault
-is a required step in the login process of Chromium OS. On first login,
-/etc/skel/ is copied to the new home directory, and then it's ready for use.
-
-The FEK and FNEK (together, with some additional data, called the keyset) for a
-user are created using the randomness generator provided by the kernel, which,
-on Chromium OS devices, is given additional entropy from the TPM at boot. These
-128-bit AES keys are used to encrypt the file contents and file names,
-respectively. As a stacked filesystem, eCryptfs has a lower file (the encrypted,
-persistent file located in the vault and stored on disk) for each upper file
-(the plaintext file presented at the mount point, which is never stored directly
-to disk). The keys exist in kernel memory for the lifetime of the mount.
-
-A user’s keyset never changes unless their account is removed from the Chromium
-OS device, or if the system is erased, such as when a recovery device is used.
-It must be protected from disclosure and only available with valid login
-credentials. To achieve this, Chromium OS uses one of two methods to store the
-keyset, depending on whether a TPM is available and initialized. The preferred
-method involves using the TPM, with the fallback method using the
-[Scrypt](http://www.tarsnap.com/scrypt.html) encryption library. Both methods
-tie the user’s vault keyset to their Google Accounts password, and are described
-further below.
-
-All of this is managed by one daemon, cryptohomed, which listens for incoming
-requests from the login manager. If the request is to mount an encrypted vault,
-the user name and weak password hash must be included. If the request is to
-unmount the image, cryptohomed clears the keys stored by the kernel and unmounts
-the vault.
-
-### Performance concerns
-
-Adding cryptography to a filesystem comes at a cost--encryption consumes both
-CPU cycles and additional memory pages. The latter is primarily managed the the
-Linux page cache, but the former can result in reads and writes being CPU-bound
-rather than I/O-bound. Based on testing compared to I/O direct to the solid
-state disk, we’ve found the current overhead to be acceptable, though there is
-always room to be better. Chromium OS uses encryption to protect cached user
-data, which does include some frequently used items such as the browser cache
-and databases, but does not include shared Operating System files and programs.
-So while there is a performance cost, it does not apply to all disk I/O.
-
-## Reclaiming lost space
-
-Being a stacked filesystem, eCryptfs has a side effect of having a single lower
-file for every upper file. This allows for “passthrough”--where a file or
-directory is created as plaintext in the underlying vault folder, and shows up
-in the upper mount point. Generally, this is not a good idea for files (we
-wouldn’t want to store plaintext data on disk), but for directories, it has a
-nice benefit of allowing offline file cleanup.
-
-Specifically, passthrough directories allow a plaintext directory name to show
-up in the vault, but the directory contents (files, subdirectories, etc.) are
-still encrypted. Chromium OS can create passthrough directories for discardable
-information, such as the browser cache. Since the name is a standard location,
-reclaiming disk space when it is low is simply a matter of removing the known
-cache directory names from each vault that exists on the system. Without
-passthrough directories, each vault would have to be mounted (requiring each
-user’s credentials) to be able to identify the cache directory and delete it.
-
-## Managing encryption keys
-
-As mentioned earlier, the user’s vault keyset is ultimately protected by a
-partial cryptographic hash of the user's passphrase. A partial cryptographic
-hash is used because the user's Google Accounts password must not be exposed to
-offline attack. Instead, we're willing to lose some of the entropy supplied by
-the passphrase by performing a SHA-256 digest of a user-specific salt
-concatenated with the user's passphrase. The first 128 bits of the digest are
-used as the user's "weak password hash."
-
-Often, user passwords will only contain anywhere from [18 bits to 30 bits of
-entropy](http://en.wikipedia.org/wiki/Password_strength#Human-generated_passwords)
-starting at 8 characters in length. Spreading that entropy over a hash and
-halving it is not really that great. At the very least, adding a salt means that
-it will be quite costly to precompute a dictionary of hashes, but that still
-isn't perfect if an attacker has the time and access to the local salt in order
-to attempt to brute force the local password. There are two other useful options
-that can be pursued to help dissuade offline attacks. The first is that [key
-strengthening](http://en.wikipedia.org/wiki/Key_strengthening) can be used to
-increase the amount of time it takes to calculate a hash from a dictionary-based
-brute force attack that uses repeated passes through a cryptographic hash. The
-other option is to make use of a TPM device when it is present, such as in
-Chromium OS devices. This allows the TPM to effectively rate limit brute force
-attacks without the overhead of key strengthening.
-
-As mentioned above, both Scrypt-based and TPM-based protection may be employed.
-We’ll describe the Scrypt method first, being the simpler of the two. The
-benefit of using Scrypt is that it uses a unique method of password
-strengthening to derive a key for the encryption that is both CPU- and
-memory-bound, making a parallelized brute-force attack more costly than a scheme
-such as repeated hash rounds. Scrypt is used to directly protect the vault
-keyset using a key based on the strengthened user’s password (actually the
-user’s weak password hash). The encrypted keyset is stored on disk, and is
-unlocked for use at login when valid credentials allow for it to be decrypted.
-
-The preferred method of protecting the vault keyset involves the TPM to protect
-against brute force attacks. The method takes advantage of the secure key
-storage functionality of the TPM (and the relatively slow clock speed of the
-chip) to protect the keyset.
-
-When using the TPM, Chromium OS creates a system-wide RSA key using OpenSSL and
-then wraps it with the TPM’s Storage Root Key on first boot. The original key is
-destroyed, and we are left with an RSA key whose private key is known only
-on-chip on the TPM. This means that, short of a vulnerability in the TPM, in
-order to use this RSA key, the private key operation must happen on this
-specific TPM, so mechanisms that use it are better protected against brute-force
-attacks. Furthermore, as current TPMs can take around half a second for a
-private key operation, even attacks which use the TPM are effectively rate
-limited.
-
-We use a system-wide key rather than per-user key for two important reasons:
-first, key load into the TPM is costly (it must decrypt the private key
-component). While 0.5s is a tolerable penalty to pay for the private key
-operation, longer (which would be the case if we had to load a user-specific key
-on each login attempt) is a noticable impact on user login. Using a system-wide
-key allows one key to be loaded and generally left in the TPM while the system
-is booted. Since it is protected by the chip, this is okay. Second, the typical
-method of incorporating user passwords with keys on the TPM is to require
-authentication for their use. This would be a good solution for Chromium OS, but
-there is a downside. TPMs feature a vendor-specific dictionary attack defense
-mode, which is easily entered into with too many failed TPM authentications. On
-many chips, this mode is aggressive, and once entered, renders the chip useless
-for some amount of time. Since failed passwords happen (both legitimately, and
-by an attacker), too many failed passwords would leave the TPM disabled for a
-time, and the vaults it protected unusable. Instead, we use a passwordless
-system-wide key, but mix the user’s password in a unique way that achieves the
-same benefits without the possibility of entering this mode.
-
-Specifically, when a vault keyset is encrypted, the following process takes
-place:
-
-1. A 256-bit AES vault keyset key (VKK below) is created randomly and
- used to encrypt the vault keyset. The encrypted vault keyset is
- stored to disk. This intermediate key is used to allow the vault
- keyset to be larger than a single RSA operation would allow for.
-2. The VKK is encrypted with the system-wide RSA key previously
- mentioned (TPM_CHK below), resulting in an intermediate encrypted
- vault keyset key (IEVKK).
-3. The final 128 bits of the encrypted blob from step 2 are encrypted
- in place using the user’s weak password hash which has first been
- hashed a keyset-specific salt. This is done using a single AES
- operation with no padding, allowing for no verification on decrypt.
- The result is the encrypted vault keyset key (EVKK), which is stored
- to disk.
-
-Step 3 is critical to combining the user’s weak password hash (and therefore
-preventing anyone with access to the TPM and system-wide RSA key from decrypting
-the vault keyset). Unless the attacker acquires the user’s password (or guesses
-it), the blob passed to the TPM to decrypt using the system-wide key is
-effectively garbage--the TPM will fail to decrypt because is is effectively
-corrupt until those final 128 bits are corrected. The TPM treats this as a
-failed decrypt (rather than a failed authentication), and the vault keyset key
-(and vault keyset it protects) cannot be recovered. This operation is
-illustrated below:
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromiumOS_TPM_Cryptohome.png">](/chromium-os/chromiumos-design-docs/protecting-cached-user-data/ChromiumOS_TPM_Cryptohome.png)
-
-While these protection methods result in protecting the cached user data, what
-they effectively address is preventing an attacker from offline brute-force
-guessing a user’s Google Accounts password.
-
-## Hashing the user name
-
-The primary reason for hashing the user name is to make it safe for use on the
-filesystem without writing a custom mapping of unsafe characters. A web-based
-user name may contain characters that are not safe for use on the file system.
-Using a strong hash will give a reasonably unique value that is safe for use on
-the file system. In addition, if all references to user names outside of the
-encrypted images are done using a HASH(salt||user@domain.com), then it becomes
-quite difficult for any user, or attacker, to determine what user names are in
-use on a given device without attempting a brute force attack. This is a nice
-side effect, but not an explicit goal.
-
-## **Password change and offline login**
-
-Password change and offline login are both handled through cryptohomed.
-
-### **Password change**
-
-If the user changes her password from another browser, the vault keyset is still
-tied to the previous password. Chromium OS allows password change only on a
-successful online login. In that case, Google’s web service will authenticate
-the user with her new credentials, returning a successful condition. Chromium OS
-will attempt to mount her vault, but that will fail with a bad decrypt
-condition. Since Chromium OS knows the password was in fact correct, it will
-present the user with the option of entering her old password once (with which
-it can recover the vault keyset and then re-protect with the new password), or
-simply re-create the vault from scratch.
-
-### **Offline login**
-
-When a Chromium notebook is offline, it cannot authenticate a user with Google’s
-web service. However, the encrypted vault keyset can be used for offline
-credential verification. Put simply, if a given password results in a successful
-recovery of the vault keyset, the password was correct. So, when Chromium OS
-doesn’t detect a network connection, it will attempt to authenticate by mounting
-the user’s vault directly (this only works if the user has previously logged in
-while online, and so she has a vault present on the notebook).
-
-## Encrypting swap and temporary data
-
-At present, Chromium OS devices don't use a swap partition, and temporary data
-is written to a tmpfs file system that is not backed by any permanent storage
-(such as disk). If a swap device is needed in the future, we'll explore the
-challenges associated with protecting that data satisfactorily.
-
-### zram swap
-
-While newer releases of Chrome OS have started including zram for swap purposes,
-it is still not stored on disk. zram takes a chunk of memory and uses that for
-swap. When pages are moved between that swap device, they are
-compressed/uncompressed on the fly. So there still is no permanent storage in
-play.
-
-## Error conditions
-
-You may be wondering what happens if an error occurs. Is the user locked out? If
-a user authenticates successfully, but all attempts to create or access an
-encrypted vault fail, then login may or may not fail. The answer is dependent on
-the scenario. Chromium OS automatically detects unrecoverable failures, and
-re-creates a user’s vault in the conditions. These conditions are typically
-related to the TPM, such as happens if it is cleared (effectively making data
-protected by it unrecoverable). Transient failures do not result in a fresh
-vault, but both types of failures are rare and usually predictable (see our
-document on TPM use for more information).
-
-Regardless, the user can always log in to the device as a guest. While it does
-not provide access to the encrypted user data, and the session history is not
-stored, it does always allow use of the system.
-
-## Disk speed and battery life
-
-Simple benchmarks indicate that eCryptfs under common browsing patterns does not
-significantly alter battery life. It's when sustained reads and writes occur
-that more and more CPU is used, and hence more battery draw. A test with a
-heavy, sustained write resulted in similar battery discharge rate as the heavy
-writing used without encryption, but the encrypted large write took about twice
-as long to complete.
-
-In most use cases, disk encryption isn't noticeable. If AES acceleration reaches
-additional processors, then the impact will be even lower.
-
-## Directory structure
-
-All metadata for this feature will live under the /home/.shadow directory. Each
-user will have a subdirectory with a name based on the user name hash. That
-directory will contain all data related to that user's image on the machine. For
-example:
-
-/home/.shadow/da39a3ee5e6b4b0d3255bfef95601890afd80709/vault
-
-/home/.shadow/da39a3ee5e6b4b0d3255bfef95601890afd80709/master.0
-
-The system-wide TPM RSA key is stored in:
-
-/home/.shadow/cryptohome.key
-
-## Appendix A: Formal requirements
-
-The primary objective is to protect sensitive end user data from exposure if the
-device or drive is lost.
-
-* User data **MUST NOT** be accessible when the device is powered
- down.
-* User data **MUST** be protected when the disk has been removed from
- a device.
-* User data **MAY** be protected when the device is suspended.
-* Google Accounts passphrases **MUST NOT** be exposed for direct
- offline attack.
-* User data **MUST** be available during offline login.
-* User data **MUST** be recoverable after an out-of-band password
- change.
-* User data **MUST** **NOT** be exposed across users on a multiuser
- device.
-* User data swapped out of memory **MAY BE** protected (depending on
- the requirement below).
-* Power and performance overhead **SHOULD BE** minimized. (Some
- concrete maximum acceptable overhead should be determined. It may
- end up being device specific, however. In particular, boot time,
- login time, and Chromium browser responsiveness issues are
- important.)
-* Users **MUST NOT** be able to opt out of encryption.
-
-Non-goals:
-
-* Offline credential storage behavior may be a side effect of the
- chosen implementation.
-* A TPM device may be used, but it is a non-goal to create a
- TPM-dependent solution.
-* Root partition encryption/protection is not a goal.
-* It is a non-goal to provide a remote wipe mechanism via this
- feature, but it may make such a design easier.
-
-## Appendix B: Designs considered
-
-* **Per-user block-based encryption**: This approach would use a
- random key to encrypt a partition per-user that is protected by the
- user's passphrase (and a Google-held backup key). This approach
- would ensure that a user's data will be accessible only when the
- user has logged in, and it allows for easy remote wipe (removing the
- key for the partition). This does add more pain when it comes to
- device management. Each data partition would need to be separated
- into preallocated regions for each simultaneously cached user stored
- on the system (that is, data_space / n = users_space).
- *Note:* This should not be visible to the user unless he tries to log in
- with the new passphrase while he is offline.
-* **Per-user file system-based encryption**: This approach would make
- use of encfs, cryptofs, or eCryptfs to add a layered encrypted file
- system on top of a preconfigured block device. Barring eCryptfs, the
- performance is quite painful with userland solutions like encfs and
- cryptofs. eCryptfs provides good performance, and allows for an
- approach similar to above (guaranteeing per-user privacy and offline
- defenses) without requiring preallocated block devices per user.
-* **Whole disk encryption with TPM**: This would use a TPM-protected
- key to unlock a drive. This would mean that with the whole device,
- the data would be exposed to OS-level attacks once booted, unless
- some form of pre-boot authentication was used. This is not the user
- experience we are looking for, and this would expose data trivially
- to a physical attacker. The disk would only be protected if removed
- from the device.
-* **Whole data partition encryption**: This would simplify the space
- utilization problem by putting all users on one encrypted partition.
- Normal access controls could keep users out of each other's data,
- but adding a new user to the encrypted drive without requiring
- another user to "authorize" the new user at login time is a
- challenge under this scheme. The reason this is an issue is because
- each user's passphrase-derived key is used to armor the disk
- encryption key. Even if a user authorizes another user to access the
- drive, the new user would be required to type the original
- passphrase immediately (or at next login), or a secondary key would
- need to be in play to allow for the encryption key to be decrypted
- and re-encrypted without the first user present. There are no clean
- ways around this.
- Another downside to this approach is that if any user is compromised and a
- privilege escalation vulnerability exists in the system, all user data would
- be compromised.
- Additionally, this approach would complicate any remote-wipe scheme we might
- implement. Whole-partition encryption would necessitate actual file removal
- to implement a per-user wipe, instead of just reinitializing the
- cryptographic file system or full data wipe. If we support only full data
- wipe, then that would probably be restricted to device owners only, but a
- per-user wipe would allow a user to clean his own data off a friend's
- machine he used once.
-* **No encryption**: Not only would this mean most enterprises can't
- use the device for work, it also would mean that many users would be
- unhappy. As is, most people don't want to lose their data if someone
- steals their device. And regardless of policies, people will use
- their personal devices at work. We'd like to think that providing
- simple, effective encryption to the platform is a long-term benefit
- to everyone.
-* **Chromium browser-only encryption**: Pushing encryption into the
- Chromium browser was considered. This approach would ensure that all
- cached data and all downloaded/accessed data is encrypted. This
- solution may be pursued in the long term. At present, providing the
- encryption at the OS level means that it will catch any data
- external to the Chromium browser (Adobe Flash local storage) and
- developer data.
-* **Other interesting side effects**: Both the whole data partition
- encryption and the per-user encryption come with the benefit of a
- free offline credential store. A weak hash of the password can be
- used to protect the stores which would then be checked on mount. In
- addition, the user can be mapped to a system account using this
- information. If a user is password slot 1, then he will be mapped to
- user_1, and so on.
-
-## Appendix C: Threats
-
-The following list includes the primary threats that are addressed by this
-design:
-
-* An attacker acquires a powered down device with the drive in it and
- attempts to access all local user home directories.
-* An attacker acquires a device in suspend state with the drive in it
- and attempts to extract the encryption key with a cold boot attack.
-
-* An attacker with login privileges attempts to access another user's
- data using a known bug, vulnerability, or workaround.
-
-Many threats are not dealt with through this design:
-
-* An attacker with a remote compromise will be able to access the
- currently logged in user's data.
-* An attacker will be able to access all user data if autologin is
- enabled and the device is in any state.
-* An attacker will be able to access all user data if the machine is
- suspended or logged in and screen locking is disabled.
-* An attacker will be able to dump all RAM from a suspended machine
- using a [cold boot
- attack](http://en.wikipedia.org/wiki/Cold_boot_attack) exposing any
- credentials in memory and the disk encryption key schedule until
- that can be fixed.
-* An attacker who steals a running machine with screen locking will be
- able to perform screen lock, usb, network, and any other runtime
- attacks to gain access unless the user is able to initiate a remote
- wipe while the machine is still Internet-connected.
-* An attacker who is able to modify the root partition will be able to
- compromise the runtime environment leading to data exposure when a
- user subsequently logs in. Our [verified boot
- process](/chromium-os/chromiumos-design-docs/verified-boot) should
- help combat this, however. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/index.md
deleted file mode 100644
index 682f4e2737e..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/index.md
+++ /dev/null
@@ -1,383 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: recovery-mode
-title: Recovery Mode
----
-
-[TOC]
-
-## Overview
-
-This document describes how recovery mode works in a Chromium-based OS. It
-assumes the firmware has already booted in recovery mode, and is now searching
-removable media (a USB key or an SD card) for a valid recovery image.
-
-In this document, the term "recovery storage device" (or "RSD") refers to a
-removable drive containing Chromium OS recovery software. In contexts other than
-that phrase, the term "device" refers to a Chromium OS-based device such as a
-netbook.
-
-For background and other relevant information, see the following documents:
-
-* [Firmware Boot and
- Recovery](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery):
- how the firmware gets into recovery mode.
-* [Developer
- Mode](/chromium-os/chromiumos-design-docs/developer-mode): how
- developer mode works, including the developer switch.
-* [File
- System/Autoupdate](http://www.chromium.org/chromium-os/chromiumos-design-docs/filesystem-autoupdate):
- how normal updates work.
-* [Firmware Verified
- Boot](/chromium-os/chromiumos-design-docs/verified-boot): how kernel
- images are signed.
-* [Disk Format](/chromium-os/chromiumos-design-docs/disk-format): disk
- drive format, used for both the Chromium OS device and the recovery
- storage device.
-* Boot Process (forthcoming): how kernel images are loaded into RAM
- and executed.
-
-## Design goals
-
-The recovery software can vary by use case to satisfy a variety of different
-goals.
-
-For the average user:
-
-* Only need to support one device model.
-* Download the minimum amount of data.
-* Should be a way to build a recovery device ahead of time; using this
- recovery device for a restore should not require the network.
-* Minimal interaction required.
-
-For the developer:
-
-* Support loading other operating systems.
-
-For manufacturing or corporate settings:
-
-* Support a range of device models.
-* Centralized management of images to be pushed; updating the image
- should not require re-flashing many RSDs.
-
-Security:
-
-* Content stored locally on the storage device should be used in
- preference to that on the network.
-* Use secure transport to network image server.
-* Images are signed (see the [Firmware Verified
- Boot](/chromium-os/chromiumos-design-docs/verified-boot) document)
-
-Simplicity & Robustness:
-
-* Push complexity from the firmware to the recovery kernel+rootfs,
- where a full Linux-like environment is available.
-
-## Entering recovery mode
-
-For detailed information about entering recovery mode, see the [Firmware Boot
-and Recovery](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery)
-document. This section is only a brief summary.
-
-Recovery mode can be triggered:
-
-* Automatically by the Chromium OS firmware or software, if it
- determines that the system is corrupt and that the backup
- firmware/software is also corrupt.
-* Manually, by the user pressing a Recovery Mode button during boot.
-
-In either case, if a storage device is present and it contains a signed recovery
-image, then the firmware doesn't display anything; it assumes the recovery image
-will display relevant information and tell the user what is going on.
-
-If a storage device is not present, or does not contain a valid recovery image,
-then the firmware needs to get the user started on the recovery process. To do
-this, it will display a screen which conveys the following information to the
-user:
-
-* Your netbook has booted into recovery mode.
-* Don't panic!
-* Go to a URL specific to the device model for more instructions:
- (insert model-specific URL here; the exact URL is still under
- development - for example,
- http://chromeos.google.com/recovery/*hardware_model_ID* or
- http://goo.gl/recovery/*hardware_model_ID*)
-
-That information needs to be accessible in many languages, since we won't know
-ahead of time what language the user is speaking, and the firmware which
-displays the screen is non-interactive (does not have access to the keyboard).
-One way to do this is to use just a pictograph and a URL. It is crucial to
-instill the need for the user to go to another computer to visit the URL
-specified on the screen.
-
-## Recovery website
-
-For devices shipping with Google Chrome OS, the recovery website will be a
-Google-hosted website which provides instructions and installers for creating
-RSDs.
-
-Instructions will be customized for each device model. For example, if a
-particular netbook model does not have wired networking, the instructions for
-that model won't suggest plugging in a network cable. The types of valid
-external storage devices and their physical locations on the netbook can also be
-customized per model.
-
-The recovery website will ask the user to get an appropriate storage device,
-then download a recovery installer (see below) to finish the recovery. It should
-also download a small config file with the model number of the netbook to be
-recovered, so that the recovery installer can use that to fetch the right
-recovery data.
-
-## Recovery installer
-
-This is a small program which helps a user create a RSD.
-
-Since the installer needs to run on any computer, we need multiple versions of
-it (Windows, Mac, Linux, Chromium OS). The Chromium OS installer will be part of
-the default Chromium OS install image, so that any Chromium OS device can be
-used to create a RSD for any other Chromium OS device.
-
-The installer will do the following:
-
-1. Prompt the user to choose a target storage device to use as the RSD.
-2. Verify the storage device is large enough.
-3. Download the appropriate recovery software (recovery kernel +
- recovery root filesystem) and save it to the RSD.
-4. Download the appropriate recovery data (Chromium OS firmware +
- kernel + rootfs + recovery configuration data) and save it to the
- RSD.
-5. Prompt the user to remove the storage device and plug it into the
- netbook.
-
-For more information about the recovery software and data, see the "Types of
-Data" section elsewhere in this document.
-
-The following features for the recovery installer are optional for version 1.0,
-and may be included in future versions:
-
-* If the target storage device is big enough for the recovery
- software, but too small to fit both the recovery software and
- recovery data, the installer could help the user set up network
- recovery mode (see below).
-* It could offer to back up the existing contents of the storage
- device before creating the RSD, then restore those contents to the
- storage device after the recovery is done.
-* It could detect the language setting on the source computer, then
- automatically use that language for all displays and prompts during
- recovery.
-
-One potential starting point for a recovery installer is
-[UNetbootin](http://unetbootin.sourceforge.net/). It already makes recovery /
-installer images for several OSes, and runs on Windows and Linux.
-
-## Types of data on a recovery storage device
-
-The following types of data may be present on a RSD. For information on which
-kinds of data appear on each type of RSD, see the "Types of recovery storage
-device" section, below.
-
-For more information on GUID partition tables and Chromium OS partition types,
-see [Disk Format](/chromium-os/chromiumos-design-docs/disk-format).
-
-### Recovery kernel
-
-This is a Chromium OS kernel partition, signed by the same authority as the
-firmware on the device. It boots the netbook into a more usable / interactive
-state for the rest of recovery mode.
-
-For Google Chrome OS devices, the kernel is signed by Google. The user will
-download the recovery kernel from the Google recovery website.
-
-A different recovery kernel is needed for each processor architecture (x86,
-ARM).
-
-Since boot speed is not important, we don't need to optimize the kernel for
-variants of each processor architecture; we can compile for the lowest common
-feature set.
-
-### Recovery root filesystem
-
-This is a Chromium OS rootfs partition, signed by the same authority as the
-recovery kernel.
-
-A recovery root filesystem can support a range of models with compatible
-processor architecture; drivers for multiple types of display and storage can be
-included. Alternately, if over time the diversity of Chromium OS devices makes
-the size of the filesystem prohibitively large, we can produce multiple images,
-each applicable to a subset of devices. In the latter case, the model-specific
-URL provided by the recovery mode firmware will point the user to the correct
-image for that device.
-
-To determine and/or verify which set of recovery data (Chromium OS kernel,
-rootfs and firmware) is appropriate for the netbook to be recovered, the
-read-only firmware on the netbook will supply an API for the recovery image to
-discover the netbook's model number. (See the (forthcoming) System SKU Reporting
-Specification.)
-
-### Recovery data
-
-This data partition contains data for the recovery. It may contain rootfs
-image(s), firmware image(s), and/or network configuration.
-
-#### Chromium OS kernel+rootfs
-
-This is a full Chromium OS kernel+rootfs image.
-
-All images are signed to protect against accidental or intentional corruption.
-
-* It may be a Google-signed image provided by the Google Chrome OS
- update server.
-* Alternately, it may be a developer-signed image. See Developer Mode
- below.
-
-Images will have a header that provides the following information:
-
-* Chromium OS version
-* Signing authority (Google or developer)
-
-If multiple versions of an image are available from the same location (for
-example, the data partition on the RSD), the newer version should take
-precedence.
-
-Images signed by the same authority as the firmware take precedence over images
-signed with other authorities. On a Google Chrome OS device, if both a
-Google-signed image and a developer-signed image are available from the same
-location (for example, the data partition on the RSD), the Google-signed image
-should take precedence. This protects normal users. The developer documentation
-on the Chromium OS website will provide instructions for developers to construct
-an RSD without a Google-signed image, so that they can load their own OS.
-
-#### Chromium OS firmware
-
-This is firmware for a Chromium OS device.
-
-It has the same information about versions and signing authority in the filename
-and/or header as the rootfs, and the same rules of precedence apply if multiple
-firmware files are present.
-
-The firmware is likely to be included inside the Chromium OS rootfs.
-
-#### Network configuration
-
-This is configuration data for downloading recovery data over the network. This
-includes:
-
-* order in which to attempt network interfaces (default: wired, then
- wireless)
-* WiFi SSID and WPA key, to support loading recovery data over WiFi
- (no default; if not present and attempting wireless, prompt user)
-* network configuration (gateway, DNS, etc.) (default: use DHCP)
-* hostname or IP address of recovery server (default: Google's update
- server)
-* ssh keys for recovery server, to prevent attackers from presenting a
- simulated server (default: whatever keys we use to sign
- communication with our update server)
-* should the image downloaded from the server be stored to the RSD's
- data partition for future re-use, or not? (default: yes)
-
-## Types of recovery storage device
-
-A recovery storage device is a USB key or SD card containing one or more
-recovery kernels and recovery root filesystems, and data to support the
-recovery.
-
-(Other kinds of external storage devices may be usable in the future.)
-
-Depending on the contents of the RSD:
-
-* It may support only one model of netbook, or multiple models.
-* It may load recovery data (rootfs + firmware) from the RSD itself,
- or over the network.
-
-The following subsections describe some typical types of RSDs.
-
-### Single recovery storage device
-
-This is the most common type of RSD. It contains a single bootable recovery
-image, and a single set of recovery data. It is self-contained; using it to
-recover a device does not require access to the network. This is the type of RSD
-created by a recovery installer. It is the least flexible RSD, since it supports
-only a single device model.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/recovery-mode/srjy2ox0dbMkVTv25qW2QdA.png">](/chromium-os/chromiumos-design-docs/recovery-mode/srjy2ox0dbMkVTv25qW2QdA.png)
-
-### Network recovery storage device
-
-This type of RSD loads the Chromium OS software and firmware from a server,
-rather than storing it directly on the card.
-
-The recovery software identifies the target device, then downloads matching
-recovery data from the server. This allows a single RSD to support multiple
-target device models.
-
-The server may be the main Google Chrome OS server provided by Google, or a
-local server. This is suitable for a larger corporate, commercial, or
-manufacturing environment. Upgrading the recovery data for a netbook model only
-requires updating the server, not multiple RSDs. A new model can also be
-supported without upgrading the RSDs, as long as the network recovery software
-supports the new model's hardware.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/recovery-mode/sk78RvI_UcGGddwNUBzsAcA.png">](/chromium-os/chromiumos-design-docs/recovery-mode/sk78RvI_UcGGddwNUBzsAcA.png)
-
-Future versions of this specification may allow a PXE boot style implementation,
-where the PXE code lives in the recovery kernel instead of the firmware.
-
-## Developer mode
-
-A developer can use recovery mode to load their own OS image onto a Google
-Chrome OS device. To do this, all they need to do is make a RSD which contains
-developer-signed recovery data in place of the Google-signed recovery data.
-
-See the Developer Mode design document (forthcoming) for more details. Key
-points:
-
-* The device's developer mode switch must be turned on before
- developer-signed images can be loaded.
-* If the kernel on the RSD is signed with a different key than the
- kernel on the destination device, there is a 5-minute delay, during
- which time the user must interact with the screen and keyboard, and
- sound is played. This makes it more difficult to discreetly
- reprogram a device, protecting both users and developers.
-
-For i18n, the developer mode screens must be displayed in the proper language.
-If the language is not detected/set by the recovery installer, then recovery
-needs to have a language selection screen during startup.
-
-## Network recovery
-
-If appropriate recovery data for the target netbook is not present on the RSD,
-the recovery software on the RSD can attempt to download the recovery data from
-a server on the network.
-
-To deter spoofing attacks, communication with the server should be done over a
-secure channel (such as sftp).
-
-The default behavior is to contact the Google Chrome OS update server, using
-wired networking in preference to wireless. This can be overridden via a network
-configuration file on the RSD.
-
-Network recovery is useful during manufacturing, to load the initial rootfs onto
-the drive. This procedure would look something like this:
-
-1. As each assembled netbook is ready for programming, a tech
- 1. takes an RSD from a bucket and plugs it into the netbook;
- 2. plugs the netbook into external power (and possibly wired
- network);
- 3. powers on the netbook.
-2. Recovery mode launches, because the netbook's drive has no bootable
- image.
-3. The network configuration file on the RSD points to a manufacturing
- server. The correct image for the netbook is loaded from the server.
-4. When the netbook is done recovering, the tech unplugs the RSD and
- tosses it back in the bucket.
-
-Network recovery is also useful in corporate environments. Tech support can
-maintain a single server with all appropriate images; each tech stop location
-only needs a few generic RSDs to support all the models of netbooks. To deploy a
-new image, only the server needs to be changed. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/sk78RvI_UcGGddwNUBzsAcA.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/sk78RvI_UcGGddwNUBzsAcA.png.sha1
deleted file mode 100644
index 1dc42728213..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/sk78RvI_UcGGddwNUBzsAcA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0e96d377bf54d6e4ffe32c8f9e909a9668e5566c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/srjy2ox0dbMkVTv25qW2QdA.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/srjy2ox0dbMkVTv25qW2QdA.png.sha1
deleted file mode 100644
index 282ad665953..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/recovery-mode/srjy2ox0dbMkVTv25qW2QdA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f25955c6130b191d655329f3e22fb0f46dca26fc \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/security-overview/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/security-overview/index.md
deleted file mode 100644
index 7606fa2276b..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/security-overview/index.md
+++ /dev/null
@@ -1,492 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: security-overview
-title: Security Overview
----
-
-[TOC]
-
-## Abstract
-
-* Chromium OS has been designed from the ground up with security in
- mind.
-* Security is not a one-time effort, but rather an iterative process
- that must be focused on for the life of the operating system.
-* The goal is that, should either the operating system or the user
- detect that the system has been compromised, an update can be
- initiated, and—after a reboot—the system will have been returned to
- a known good state.
-* Chromium OS security strives to protect against an opportunistic
- adversary through a combination of system hardening, process
- isolation, continued web security improvements in Chromium, secure
- autoupdate, verified boot, encryption, and intuitive account
- management.
-
-We have made a concerted effort to provide users of Chromium OS-based devices
-with a system that is both practically secure and easy to use. To do so, we've
-followed a set of four guiding principles:
-
-* The perfect is the enemy of the good.
-* Deploy defenses in depth.
-* Make devices secure by default.
-* Don't scapegoat our users.
-
-In the rest of this document, we first explain these principles and discuss some
-expected use cases for Chromium OS devices. We then give a high-level overview
-of the threat model against which we will endeavor to protect our users, while
-still enabling them to make full use of their cloud device.
-
-## Guiding principles
-
-**The perfect is the enemy of the good.** No security solution is ever perfect.
-Mistakes will be made, there will be unforeseen interactions between multiple
-complex systems that create security holes, and there will be vulnerabilities
-that aren't caught by pre-release testing. Thus, we must not allow our search
-for some mythical perfect system to stop us from shipping something that is
-still very good.
-**Deploy defenses in depth.** In light of our first principle, we will deploy a
-variety of defenses to act as a series of stumbling blocks for the attacker. We
-will make it hard to get into the system, but assume that the attacker will.
-We'll put another layer of defenses in place to make it difficult to turn a user
-account compromise into root or a kernel exploit. Then, we'll also make it
-difficult for an attacker to persist their presence on the system by preventing
-them from adding an account, installing services, or re-compromising the system
-after reboot.
-**Make it secure by default.** Being safe is not an advanced or optional
-feature. Until now, the security community has had to deploy solutions that cope
-with arbitrary software running on users' machines; as a result, these solutions
-have often cost the user in terms of system performance or ease-of-use. Since we
-have the advantage of knowing which software should be running on the device at
-all times, we should be better able to deploy solutions that leave the user's
-machine humming along nicely.
-**Don't scapegoat our users.** In real life, people assess their risk all the
-time. The Web is really a huge set of intertwined, semi-compatible
-implementations of overlapping standards. Unsurprisingly, it is difficult to
-make accurate judgments about one's level of risk in the face of such
-complexity, and that is *not* our users' fault. We're working to figure out the
-right signals to send our users, so that we can keep them informed, ask fewer
-questions, require them to make decisions only about things they comprehend, and
-be sure that we fail-safe if they don't understand a choice and just want to
-click and make it go away.
-
-### Use cases and requirements
-
-We are initially targeting the following use cases with Chromium OS devices:
-
-* Computing on the couch
-* Use as a lightweight, secondary work computer
-* Borrowing a device for use in coffee shops and libraries
-* Sharing a second computer among family members
-
-Targeting these goals dictates several security-facing requirements:
-
-* The owner should be able to delegate login rights to users of their
- choice.
-* The user can manage their risk with respect to data loss, even in
- the face of device loss or theft.
-* A user's data can't be exposed due to the mistakes of other users on
- the system.
-* The system provides a multi-tiered defense against malicious
- websites and other network-based attackers.
-* Recovering from an attack that replaces or modifies system binaries
- should be as simple as rebooting.
-* In the event of a security bug, once an update is pushed, the user
- can reboot and be safe.
-
-### Our threat model
-
-When designing security technology for Chromium OS systems, we consider two
-different kinds of adversaries:
-
-* An **opportunistic adversary**
-* A **dedicated adversary**
-
-The **opportunistic adversary** is just trying to compromise an individual
-user's machine and/or data. They are not targeting a specific user or
-enterprise, and they are not going to steal the user's machine to obtain the
-user's data. The opportunistic adversary will, however, deploy attacks designed
-to lure users on the web to sites that will compromise their machines or to web
-apps that will try to gain unwarranted privileges (webcam access, mic access,
-etc). If the opportunistic adversary *does* steal a device and the user's data
-is in the clear, the opportunistic adversary may take it.
-
-The **dedicated adversary** *may* target a user or an enterprise specifically
-for attack. They are willing to steal devices to recover data or account
-credentials (not just to re-sell the device to make money). They are willing to
-deploy DNS or other network-level attacks to attempt to subvert the Chromium OS
-device login or update processes. They may also do anything that the
-opportunistic adversary can do.
-
-For version 1.0, we are focusing on dangers posed by opportunistic adversaries.
-We further subdivide the possible threats into two different classes of attacks:
-**remote system compromise** and **device theft.**
-
-## Mitigating remote system compromise
-
-There are several vectors through which an adversary might try to compromise a
-Chromium OS device remotely: an exploit that gives them control of one of the
-Chromium-based browser processes, an exploit in a plugin, tricking the user into
-giving a malicious web app unwarranted access to HTML5/Extension APIs, or trying
-to subvert our autoupdate process in order to get some malicious code onto the
-device.
-
-As in any good security strategy, we wish to provide defense in depth:
-mechanisms that try to prevent these attacks and then several more layers of
-protection that try to limit how much damage the adversary can do provided that
-he's managed to execute one of these attacks. The architecture of Chromium
-browsers provides us with some very nice process isolation already, but there is
-likely more that we can do.
-
-### OS hardening
-
-The lowest level of our security strategy involves a combination of OS-level
-protection mechanisms and exploit mitigation techniques. This combination limits
-our attack surface, reduces the the likelihood of successful attack, and reduces
-the usefulness of successful user-level exploits. These protections aid in
-defending against both opportunistic and dedicated adversaries. The approach
-designed relies on a number of independent techniques:
-
-* Process sandboxing
- * Mandatory access control implementation that limits resource,
- process, and kernel interactions
- * Control group device filtering and resource abuse constraint
- * Chrooting and process namespacing for reducing resource and
- cross-process attack surfaces
- * Media device interposition to reduce direct kernel interface
- access from Chromium browser and plugin processes
-* Toolchain hardening to limit exploit reliability and success
- * NX, ASLR, stack cookies, etc
-* Kernel hardening and configuration paring
-* Additional file system restrictions
- * Read-only root partition
- * tmpfs-based /tmp
- * User home directories that can't have executables, privileged
- executables, or device nodes
-* Longer term, additional system enhancements will be pursued, like
- driver sandboxing
-
-Detailed discussion can be found in the [System
-Hardening](/chromium-os/chromiumos-design-docs/system-hardening) design
-document.
-
-### Making the browser more modular
-
-The more modular the browser is, the easier it is for the Chromium OS to
-separate functionality and to sandbox different processes. Such increased
-modularity would also drive more efficient IPC within Chromium. We welcome input
-from the community here, both in terms of ideas and in code. Potential areas for
-future work include:
-
-* Plugins
- * All plugins should run as independent processes. We can then
- apply OS-level sandboxing techniques to limit their abilities.
- Approved plugins could even have Mandatory Access Control (MAC)
- policies generated and ready for use.
-* Standalone network stack
- * Chromium browsers already sandbox media and HTML parsers.
- * If the HTTP and SSL stacks were isolated in independent
- processes, robustness issues with HTTP parsing or other behavior
- could be isolated. In particular, if all SSL traffic used one
- process while all plaintext traffic used another, we would have
- some protection from unauthenticated attacks leading to full
- information compromise. This can even be beneficial for cookie
- isolation, as the HTTP-only stack should never get access to
- cookies marked "secure." It would even be possible to run two
- SSL/HTTP network stacks—one for known domains based on a large
- whitelist and one for unknown domains. Alternately, it could be
- separated based on whether a certificate exception is required
- to finalize the connection.
-* Per-domain local storage
- * If it were possible to isolate renderer access per domain, then
- access to local storage services could similarly by isolated—at
- a process level. This would mean that a compromise of a renderer
- that escapes the sandbox would still not be guaranteed access to
- the other stored data unless the escape vector were a
- kernel-level exploit.
-
-### Web app security
-
-As we enable web applications to provide richer functionality for users, we are
-increasing the value of web-based exploits, whether the attacker tricks the
-browser into giving up extra access or the user into giving up extra access. We
-are working on multiple fronts to design a system that allows Chromium OS
-devices to manage access to new APIs in a unified manner, providing the user
-visibility into the behavior of web applications where appropriate and an
-intuitive way to manage permissions granted to different applications where
-necessary.
-
-* User experience
- * The user experience should be orthogonal to the policy
- enforcement mechanism inside the Chromium browser and, ideally,
- work the same for HTML5 APIs and Google Chrome Extensions.
-* HTML5/Open Web Platform APIs and Google Chrome Extensions
- * We're hopeful that we can unify the policy enforcement
- mechanisms/user preference storage mechanisms across all of the
- above.
-* Plugins
- * We are developing a multi-tiered sandboxing strategy, leveraging
- existing Chromium browser sandboxing technology and some of the
- work we discuss in our [System
- Hardening](/chromium-os/chromiumos-design-docs/system-hardening)
- design document.
- * Long term, we will work with other browser vendors to make
- plugins more easily sandboxed.
- * Full-screen mode in some plugins could allow an attacker to mock
- out the entire user experience of a Chromium OS device. We are
- investigating a variety of mitigation strategies in this space.
-
-As HTML5 features like persistent workers move through the standards process, we
-must ensure that we watch for functionality creeping in that can poke holes in
-our security model and take care to handle it appropriately.
-
-### Phishing, XSS, and other web vulnerabilities
-
-Phishing, XSS, and other web-based exploits are no more of an issue for Chromium
-OS systems than they are for Chromium browsers on other platforms. The only
-JavaScript APIs used in web applications on Chromium OS devices will be the same
-HTML5 and Open Web Platform APIs that are being deployed in Chromium browsers
-everywhere. As the browser goes, so will we.
-
-### Secure autoupdate
-
-Attacks against the autoupdate process are likely to be executed by a dedicated
-adversary who would subvert networking infrastructure to inject a fake
-autoupdate with malicious code inside it. That said, a well supported
-opportunistic adversary could attempt to subvert the update process for many
-users simultaneously, so we should address this possibility here. (For more on
-this subject, also see the [File
-System/Autoupdate](/chromium-os/chromiumos-design-docs/filesystem-autoupdate)
-design document.)
-
-* Signed updates are downloaded over SSL.
-* Version numbers of updates can't go backwards.
-* The integrity of each update is verified on subsequent boot, using
- our Verified Boot process, described below.
-
-### Verified boot
-
-Verified boot provides a means of getting cryptographic assurances that the
-Linux kernel, non-volatile system memory, and the partition table are untampered
-with when the system starts up. This approach is not "trusted boot" as it does
-not depend on a TPM device or other specialized processor features. Instead, a
-chain of trust is created using custom read-only firmware that performs
-integrity checking on a writable firmware. The verified code in the writable
-firmware then verifies the next component in the boot path, and so on. This
-approach allows for more flexibility than traditional trusted boot systems and
-avoids taking ownership away from the user. The design is broken down into two
-stages:
-
-* Firmware-based verification
- (for details, see the [Firmware Boot and
- Recovery](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery)
- design document)
- * Read-only firmware checks writable firmware with a permanently
- stored key.
- * Writable firmware then checks any other non-volatile memory as
- well as the bootloader and kernel.
- * If verification fails, the user can either bypass checking or
- boot to a safe recovery mode.
-* Kernel-based verification
- (for details, see the [Verified
- Boot](/chromium-os/chromiumos-design-docs/verified-boot) design document)
- * This approach extends authenticity and integrity guarantees to
- files and metadata on the root file system.
- * All access to the root file system device traverses a
- transparent layer which ensure data block integrity.
- * Block integrity is determined using cryptographic hashes stored
- after the root file system on the system partition.
- * All verification is done on-the-fly to avoid delaying system
- startup.
- * The implementation is not tied to the firmware-based
- verification and may be compatible with any trusted kernel.
-
-When combined, the two verification systems will perform as follows:
-
-* Detects changes at boot-time
- * Files, or read-write firmware, changed by an opportunistic
- attacker with a bootable USB drive will be caught on reboot.
- * Changes performed by a successful runtime attack will also be
- detected on next reboot.
-* Provides a secure recovery path so that new installs are safe from
- past attacks.
-* Doesn't protect against
- * Dedicated attackers replacing the firmware.
- * Run-time attacks: Only code loaded from the file system is
- verified. Running code is not.
- * Persistent attacks run by a compromised Chromium browser: It's not possible to verify the browser's configuration as safe using this technique.
-
-It's important to note that at no point is the system restricted to code from
-the Chromium project; however, if Google Chrome OS is used, additional
-hardware-supported integrity guarantees can be made.
-
-### Rendering pwned devices useless
-
-We do not intend to brick devices that we believe to be hacked. If we can
-reliably detect this state on the client, we should just initiate an update and
-reboot. We could try to leverage the abuse detection and mitigation mechanisms
-in the Google services that people are using from their Chromium OS devices, but
-it seems more scalable to allow each service to continue handling these problems
-on its own.
-
-## Mitigating device theft
-
-A stolen device is likely to have a higher value to a dedicated adversary than
-to an opportunistic adversary. An opportunistic adversary is more likely to
-reset the device for resale, or try to log in to use the device for himself.
-
-The challenges here are myriad:
-
-* We want to protect user data while also enabling users to opt-in to
- auto-login.
-* We want to protect user data while also allowing users to share the
- device.
-* We especially want to protect user credentials without giving up
- offline login, auto-login, and device sharing.
-* Disk encryption can have real impact on battery life and performance
- speed.
-* The attacker can remove the hard drive to circumvent OS-level
- protections.
-* The attacker can boot the device from a USB device.
-
-### Data protection
-
-Users shouldn't need to worry about the privacy of their data if they forget
-their device in a coffee shop or share it with their family members. The easiest
-way to protect the data from opportunistic attackers is to ensure that it is
-unreadable except when it is in use by its owner.
-
-The [Protecting Cached User
-Data](/chromium-os/chromiumos-design-docs/protecting-cached-user-data) design
-document provides details on data protection. Key requirements for protecting
-cached user data (at rest) are as follows:
-
-* Each user has their own encrypted store.
-* All user data stored by the operating system, browser, and any
- plugins are encrypted.
-* Users cannot access each other's data on a shared device.
-* The system does not protect against attacks while a user is logged
- in.
-* The system will attempt to protect against memory extraction (cold
- boot) attacks when additional hardware support arrives.
-* The system does not protect against root file system tampering by a
- dedicated attacker (verified boot helps there).
-
-### Account management
-
-Preventing the adversary from logging in to the system closes one easy pathway
-to getting the machine to execute code on their behalf. That said, many want
-this device to be just as sharable as a Google Doc. How can we balance these
-questions, as well as take into account certain practical concerns? These issues
-are discussed at length in the [User Accounts and
-Management](/chromium-os/chromiumos-design-docs/user-accounts-and-management)
-design document, with some highlights below.
-
-* What *are* the practical concerns?
- * Whose wifi settings do you use? Jane's settings on Bob's device
- in Bob's house don't work.
- * But using Bob's settings no matter where the device is doesn't
- work either.
- * And if Bob's device is set up to use his enterprise's wifi, then
- it's dangerous if someone steals it!
-* "The owner"
- * Each device has one and only one owner.
- * *User preferences* are distinct from *system settings.*
- * *System settings*, like wifi, follow the owner of a device.
-* Whitelisting
- * The owner can whitelist other users, who can then log in.
- * The user experience for this feature should require only a few
- clicks or keystrokes.
-* Promiscuous mode
- * The owner can opt in to a mode where anyone with a Google
- account can log in.
-* Guest mode
- * Users can initiate a completely stateless session, which does
- not sync or cache data.
- * All system settings would be kept out of this session, including
- networking config.
-
-### Login
-
-For design details, see the [Login](/chromium-os/chromiumos-design-docs/login)
-design document.
-
-At a high level, here is how Chromium OS devices authenticate users:
-
-1. Try to reach Google Accounts online.
-2. If the service can't be reached, attempt to unwrap the
- locally-stored, TPM-wrapped keys we use for per-user data
- encryption. Successful unwrap means successful login.
-3. For every successful online login, use a salted hash of the password
- to wrap a fresh encryption key using the TPM.
-
-There are a number of important convenience features around authentication that
-we must provide for users, and some consequences of integrating with Google
-Accounts we must deal with. These all have security consequences, and we discuss
-these (and potential mitigation) here. Additionally, we are currently working
-through the various tradeoffs of supporting non-Google OpenID providers as an
-authentication backend.
-**CAPTCHAs**
-
-Rather than strictly rate limiting failed authentication attempts, Google
-Accounts APIs respond with CAPTCHAs if our servers believe an attack is
-underway. We do not want users to face CAPTCHAs to log in to their device; if
-the user has correctly provided their credentials, they should be successfully
-logged in.
-Furthermore, including HTML rendering code in our screen locker would introduce
-more potential for crashing bugs, which would give an attacker an opportunity to
-access the machine. That said, we cannot introduce a vector by which attackers
-can brute force Google Accounts.
-To work around this right now, we do offline credential checking when unlocking
-the screen and ignore problems at login time, though we realize this is not
-acceptable long-term and are considering a variety of ways to address this issue
-in time for V1.
-
-**Single signon**
-
-As we discuss in the [Login](/chromium-os/chromiumos-design-docs/login) design
-document, we want to provide an SSO experience on the web for our users. Upon
-login, we decrypt the user's profile and perform a request for her Google
-Accounts cookies in the background. As a result, her profile gets fresh cookies
-and she is logged in to all her Google services.
-
-### Future work
-
-**Auto-login**
-
-When a user turns on auto-login, they are asserting that they wish this device
-to be trusted as though it had the user's credentials at all times; however, we
-don't want to store actual Google Account credentials on the device—doing so
-would expose them to offline attack unnecessarily. We also don't want to rely on
-an expiring cookie; auto-login would "only work sometimes," which is a poor user
-experience. We would like to store a revokable credential on the device, one
-that can be exchanged on-demand for cookies that will log the user in to all of
-their Google services. We're considering using an OAuth token for this purpose.
-
-**Biometrics, smartcards and Bluetooth**
-
-We expect to keep an eye on biometric authentication technologies as they
-continue to become cheaper and more reliable, but at this time we believe that
-the cost/reliability tradeoff is not where it needs to be for our target users.
-We expect these devices to be covered in our users' fingerprints, so a low-cost
-fingerprint scanner could actually increase the likelihood of compromise. We
-were able to break into one device that used facial recognition authentication
-software just by holding it up to the user's photo. Bluetooth adds a whole new
-software stack to our login/screenlocker code that could potentially be buggy,
-and the security of the pairing protocol has been [criticized in the
-past](http://www.schneier.com/blog/archives/2005/06/attack_on_the_b_1.html).
-Smart cards and USB crypto tokens are an interesting technology, but we don't
-want our users to have to keep track of a physically distinct item just to use
-their device.
-
-**Single signon**
-
-For third-party sites, we would like to provide credential generation and
-synced, cloud-based storage.
-
-## Wrapup
-
-In this document, we have aimed only to summarize the wide-ranging efforts we are undertaking to secure Chromium OS at all levels. For more detail, please read the rest of the [design documents.](/chromium-os/chromiumos-design-docs) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/chromepng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/chromepng.sha1
deleted file mode 100644
index f6d11aba0c9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/chromepng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e04ebc2ef990fa84389c667654f37cfb853935da \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/firmwarepng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/firmwarepng.sha1
deleted file mode 100644
index 6b4167d171d..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/firmwarepng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5f9656ed3823b61a75d5768e65d4f7af6657d197 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/index.md
deleted file mode 100644
index 9e687ac6fc5..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: software-architecture
-title: Software Architecture
----
-
-[TOC]
-
-## Abstract
-
-Chromium OS consists of three major components:
-
-* The Chromium-based browser and the window manager
-* System-level software and user-land services: the kernel, drivers,
- connection manager, and so on
-* Firmware
-
-![](/chromium-os/chromiumos-design-docs/software-architecture/overview.png)
-
-## High-level design
-
-We'll look at each component, starting with the firmware.
-
-### Firmware
-
-The firmware plays a key part to make booting the OS faster and more secure. To
-achieve this goal we are removing unnecessary components and adding support for
-verifying each step in the boot process. We are also adding support for system
-recovery into the firmware itself. We can avoid the complexity that's in most PC
-firmware because we don't have to be backwards compatible with a large amount of
-legacy hardware. For example, we don't have to probe for floppy drives.
-
-Our firmware will implement the following functionality:
-
-* [**System
- recovery**](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery)**:**
- The recovery firmware can re-install Chromium OS in the event that
- the system has become corrupt or compromised.
-* **[Verified
- boot](/chromium-os/chromiumos-design-docs/verified-boot):** Each
- time the system boots, Chromium OS verifies that the firmware,
- kernel, and system image have not been tampered with or become
- corrupt. This process starts in the firmware.
-* [**Fast
- boot**](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery)**:**
- We have improved boot performance by removing a lot of complexity
- that is normally found in PC firmware.
-
-![](/chromium-os/chromiumos-design-docs/software-architecture/firmware.png)
-
-### System-level and user-land software
-
-From here we bring in the Linux kernel, drivers, and user-land daemons. Our
-kernel is mostly stock except for a handful of patches that we pull in to
-improve boot performance. On the user-land side of things we have streamlined
-the init process so that we're only running services that are critical. All of
-the user-land services are managed by Upstart. By using Upstart we are able to
-start services in parallel, re-spawn jobs that crash, and defer services to make
-boot faster.
-
-Here's a quick list of things that we depend on:
-
-* **D-Bus:** The browser uses D-Bus to interact with the rest of the
- system. Examples of this include the battery meter and network
- picker.
-* **Connection Manager:** Provides a common API for interacting with
- the network devices, provides a DNS proxy, and manages network
- services for 3G, wireless, and ethernet.
-* **WPA Supplicant:** Used to connect to wireless networks.
-* **Autoupdate:** Our autoupdate daemon silently installs new system
- images.
-* **Power Management:** (ACPI on Intel) Handles power management
- events like closing the lid or pushing the power button.
-* **Standard Linux services:** NTP, syslog, and cron.
-
-### Chromium and the window manager
-
-The window manager is responsible for handling the user's interaction with
-multiple client windows. It does this in a manner similar to that of other X
-window managers, by controlling window placement, assigning the input focus, and
-exposing hotkeys that exist outside the scope of a single browser window. Parts
-of the ICCCM (Inter-Client Communication Conventions Manual) and EWHM (Extended
-Window Manager Hints) specifications are used for communication between clients
-and the window manager where possible.
-The window manager also uses the XComposite extension to redirect client windows
-to offscreen pixmaps so that it can draw a final, composited image incorporating
-their contents itself. This lets windows be transformed and blended together.
-The window manager contains a compositor that animates these windows and renders
-them via OpenGL or OpenGL|ES.
-
-![](/chromium-os/chromiumos-design-docs/software-architecture/chrome.png)
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/overviewpng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/overviewpng.sha1
deleted file mode 100644
index fc0fe8d130b..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/overviewpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9016299e3dfb1581eb85d3bc628fce62ddcb5a98 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/systempng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/systempng.sha1
deleted file mode 100644
index 497b9c4a361..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/software-architecture/systempng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d5e2c9a6872ec53072f8069f6acb45e378dd6cd9 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/index.md
deleted file mode 100644
index 25aecf56441..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/index.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: source-code-management
-title: Source Code Management
----
-
-[TOC]
-
-## Abstract
-
-* Chromium OS is an open source project with the goal of keeping good
- relationships and communication with upstream sources. Chromium OS
- is thus structured to upstream code early and often.
-* Chromium OS will use Git as its version control system, Rietveld for
- code reviews and gclient for package checkout management.
-
-This document outlines the Chromium OS process for managing the upstream bits
-that make up the Chromium OS Linux distribution.
-
-## Background
-
-Chromium OS is an open-source project, built for people who spend most of their
-time on the web. Chromium OS is currently made up of 190 or so open-source
-packages.
-
-## Requirements
-
-**Sources hosted by us.** Upstream mirrors can be rearranged: sources can be
-moved, removed, or modified. We also need the sources locally since we need them
-in order to build.
-**One format.** The upstream sources may be stored in any number of version
-control systems (VCS). Or they may not even be stored in a VCS and instead be
-available as a tarball, .deb, or .rpm. For our hosted sources, we'd like to have
-them stored in one VCS format. This may require import from a VCS into our VCS.
-Alternatively, we could store sources in their native VCS but this would require
-our developers to work with multiple VCSs.
-**Avoid patch files.** Patch files are difficult to maintain and difficult to
-keep in sync with upstream. We plan to keep a copy of the entire upstream source
-tree in a VCS.
-
-**Simple upstreaming.** We want to upstream early and often to minimize the set
-of changes we have to maintain. We also want a good partnership with upstream.
-**Simple tracking.** It needs to be easy to track what bits we've added to
-open-source components. It should also be easy to track the upstream status of
-our changes: Has the patch been sent upstream? Has it been accepted, rejected,
-or accepted in modified form?
-
-## Design objectives
-
-**Upstream package database.** We need a database that stores metadata about
-each package we are using: homepage, upstream repository information, upstream
-bugs database location, mailing list, license, upstream submission process, and
-so on. Examples:
-[fedora](https://admin.fedoraproject.org/pkgdb/acls/name/acpid),
-[debian](http://packages.debian.org/source/lenny/acpid),
-[ubuntu](https://launchpad.net/ubuntu/+source/acpid),
-[gentoo](http://packages.gentoo.org/package/sys-power/acpid).
-
-**Distributed Version Control System (DVCS).** Without a
-[DVCS](http://en.wikipedia.org/wiki/Distributed_revision_control), distributed
-development (working with upstream) is difficult. With a DVCS, cloning, merging,
-and pulling in upstream changes are common operations. For a traditional VCS,
-cloning an upstream repository involves initially using rsync to copy the
-upstream repository (assuming such access is given) and then special scripts to
-handle future pulls.
-
-**Each package in its own repository.** Pulling multiple upstream trees into one
-monolithic tree is difficult. It would also make it nearly impossible to use a
-DVCS. We want to make it easy to work with upstream, easy to track ancestry of
-our code, and easy to track what patches we've applied. This is hard to do with
-a monolithic repository. With a repository per package, a simple invocation of
-the VCS tool's diff will do.
-
-**One DVCS tool.** We could mirror each upstream repository locally in its
-native VCS but then we wouldn't be able to use a DVCS where upstream is not.
-Also, it would force our developers to have to deal with many different VCS
-tools. We could write our own wrapper library but that's extra development
-effort we should be able to avoid. Instead, we should just mirror in our one
-DVCS format, sources which are managed upstream with a different DVCS.
-
-**A DVCS with good import/export capability.** Many of the most popular DVCS
-tools support import and export to other backends. The DVCS will support checkin
-and checkout of code to and from a different backend. Often the import/export is
-seamless enough that the workflow for dealing with a different backend is not
-much different from the normal workflow.
-
-**Commit log metadata.** For some modules, we will be merging in patches from
-different sources. For such patches, we will annotate the commit log with
-metadata which documents the original source.
-
-## Detailed design
-
-### Version control system
-
-Out of all the available DVCS tools, Git implements our design objectives best.
-Also, of the projects we use which use a DVCS, most use Git.
-
-Our process for managing source repositories will be as follows:
-
-1. We will host a Git repository for all source components which we are
- modifying.Whenever a new package or dependency is added, a new Git
- repository will be created.
-2. For upstream Git sources, our repository will be a clone of
- upstream.
-3. For upstream sources not stored in Git, we'll create an additional
- Git repository.
- * The import repository will be named *&lt;project&gt;*-import.
- * For example, project foo would be: foo-import
- * Our Git repository will be "based" on the import.
- * We will automatically re-sync the import repository with
- upstream on a regular basis (for example, daily).
-4. For sources which are not hosted in a VCS upstream, we'll create an
- additional Git repository. Typically this will come from a tarball,
- deb package, or rpm package.
- * The repository will contain the unpackaged source tree.
- * Any patches held in the package will be applied as subsequent
- changes in Git.
- * Future upstream releases will be committed to this repository in
- the same way.
- * The repository will be named: *&lt;project&gt;*-import
- * For example, project bar would be: bar-import
- * Our repository will be "based" on the import.
-5. We will create a branch off of a recent stable upstream release and
- make our changes there.
-6. To make future syncing easier, and to make it easier to separate out
- our bits from upstream, we will
- [rebase](http://www.gitready.com/intermediate/2009/01/31/intro-to-rebase.html).
- Rebasing is a best-practice for managing upstream sources. For
- example, the Ubuntu kernel is regularly rebased against upstream.
- The alternative, merging commits from upstream, results in local
- changes being interleaved with upstream. Rebasing creates a clean
- history with local changes appearing after upstream commits.
-
-The diagram below shows the flow of code between repositories. Repositories
-above the top dashed-line are upstream-hosted, the repositories between the
-dashed-lines are Google-hosted, and the repositories below the lower dashed-line
-are the user's local checkout.
-Where upstream is non-Git, we'll create a local Git import tree: "bar svn
-import" and "bash .deb import" above. The Google repository will be a Git
-repository based on a particular upstream tag of the upstream Git repository (or
-our Git import if upstream is not using Git).
-
-![](/chromium-os/chromiumos-design-docs/source-code-management/repo-arch.png)
-
-### Package database
-
-Initially, we will store a README.chromium file in the root directory of the
-package which will contain the following fields in shell parseable format:
-
-1. DESCRIPTION: one-line description of the package
-2. HOMEPAGE: URL to upstream page (possibly a freshmeat.net page)
-3. UPSTREAM_REPO: URL for upstream repository
-4. LOCAL_GIT_REPO: git url for our Git repository
-5. UPSTREAM_BUGSDB: URL for upstream bug database
-6. LOCAL_BUGSDB: URL for our bug database for this package
-7. LICENSE: name of license (we'll need a license database somewhere)
-
-Eventually, we may move to a more sophisticated web-hosted package database like
-[Launchpad](https://launchpad.net/). In a web-hosted package database, we could
-also display derived information like: current Chromium OS version, upstream
-latest version, and so on.
-
-### Sample README.chromium for busybox
-
-DESCRIPTION="Utilities for embeddded systems"
-HOMEPAGE="http://www.busybox.net"
-UPSTREAM_REPO="git://git.busybox.net/busybox"
-LOCAL_GIT_REPO="https://chromium.googlesource.com/external/busybox"
-UPSTREAM_BUGSDB="https://bugs.busybox.net/"
-LOCAL_BUGSDB="http://tracker.chromium.org/busybox"
-LICENSE="GPL-2"
-
-LICENSE_FILE="LICENSE"
-
-### Commit log metadata
-
-We want to track where our sources are coming from. The mechanism for doing this
-will be to recommend that the following metadata be included as part of the
-commit log:
-
-* Source: Where did this change come from? Google? Ubuntu? kernel.org?
-* Commit ID: Git commit id / SVN log number / patch number in package
-* Tested status: Leaning on people to describe how they tested a
- checkin has proved to be extremely effective "social engineering" in
- other projects
-* Upstream status: Tracking upstream status is more difficult as the
- status will evolve over time. This data may need to be in a separate
- database, but tying the database into the DVCS will not be simple to
- keep consistent over Git rebases (which change Git commit IDs).
-
-### Code review
-
-Our current code review tool,
-[Rietveld](http://code.google.com/appengine/articles/rietveld.html), already
-supports Git change uploads via
-[update.py](http://code.google.com/p/rietveld/source/browse/trunk/static/upload.py).
-For making it easier to do Git code reviews with Rietveld, we will be using
-[git-cl](http://groups.google.com/group/codereview-discuss/browse_thread/thread/d9f65d04165e274f/b8740b9beab78e4c),
-. There is also an open-source tool designed specifically for Git code reviews:
-[gerrit](http://source.android.com/submit-patches/workflow). It is a [fork of
-reitveld](http://code.google.com/p/gerrit/wiki/Background).
-
-### Checkout management
-
-We are using [gclient](http://code.google.com/p/gclient/) for package checkout
-management.
-
-## References and links
-
-### Git tutorial
-
-<http://www-cs-students.stanford.edu/~blynn/gitmagic/>
-
-### Git documentation
-
-<http://git-scm.com/documentation>
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/repo-archpng.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/repo-archpng.sha1
deleted file mode 100644
index 3958e0716b9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/source-code-management/repo-archpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-443d64eddafce617287f2f2588f46c5c63c52275 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-hardening/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-hardening/index.md
deleted file mode 100644
index e8362f4cdb4..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-hardening/index.md
+++ /dev/null
@@ -1,692 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: system-hardening
-title: System Hardening
----
-
-[TOC]
-
-Note: A practical guide for hardening individual services can be found
-[here](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md).
-
-## Abstract
-
-* Chromium OS strives to make remote attacks more difficult by using
- multiple techniques ranging from privilege minimization to
- compile-time hardening.
-* A phased approach to system hardening is proposed to iteratively
- reduce the exposed attack surfaces and increase the number of
- defensive layers.
-
-This document lays out a technical vision for making Chromium OS-based systems
-difficult for remote attackers to compromise using various system-level
-mechanisms. Three objectives guide this vision:
-
-* Reducing surface area exposed to attack
-* Reducing ability to successfully and reliably exploit any exposed,
- vulnerable software
-* Reducing benefit of a successful exploitation
-
-Efforts to secure Linux environments tend to revolve around the [principle of
-least privilege](http://web.mit.edu/Saltzer/www/publications/protection/) and
-applying exploit mitigation tactics wherever possible. While the exploit
-mitigation techniques are effective, they are never a perfect defense and often
-the specific techniques deployed vary from distribution to distribution. In
-addition, the principle of least privilege is excellent in a server environment
-and for locking down system services on desktops. However, desktop systems are
-meant to be general purpose. This makes it incredibly difficult to determine the
-least privilege needed if a program has not ever been seen on the system before
-(or was written since the system was installed!). The end result is that the
-risks from interactively executed applications are addressed only using exploit
-mitigations and not as comprehensively as desired.
-
-Chromium OS has an advantage. All native programs run by the end user are known
-in advance since all general purpose applications are web applications. We use
-this knowledge to apply comprehensive access control enforcement in addition to
-the well-known exploit mitigation techniques. This combination allows Chromium
-OS to benefit from the great work securing Linux in both end-user and server
-enviroments!
-
-## Technology
-
-[Control Groups
-(cgroups)](http://lxr.linux.no/linux+v2.6.30/Documentation/cgroups/) are a
-somewhat recent addition to the Linux kernel. They are a hierarchical collection
-of tasks that can be arbitrarily created. Once a task has been associated with a
-hierarchy, it falls under runtime constraints ranging from limited device node
-access to limited CPU and memory usage. cgroups restrictions can be specified in
-terms of percentages or as constants which provide an intuitive means of
-*"guaranteeing"* that processes operate within their given bounds. This feature
-is great for constraining denial of service attacks and general robustness
-issues (and combines well with rlimit). The device filtering is useful for
-limiting /dev access in constrained namespaces.
-
-[Namespacing](http://lxr.linux.no/linux+v2.6.30/Documentation/namespaces/)
-provide a means of isolating processes, and process trees, from other running
-processes on a system. Their use has been driven largely by the [Linux
-VServer](http://wiki.linux-vserver.org/). Namespaces can be created only when a
-new process is started using clone(). The following namespaces are currently
-available in the upstream kernel:
-
-* PID: The process called with a new PID namespace becomes pid=1 and
- is treated as a local *init* for the purposes of reparenting
- orphaned processes. When this process terminates, the namespace is
- shut down. Processes in this namespace can only "see" other
- processes in the namespace and a custom /proc can be mounted to
- provide visibility. A custom mount should be paired with a VFS
- namespace.
-* UTS: UTS namespacing allows for a custom host and domain names to be
- set for a given namespace.
-* User: User namespacing remaps users to new, localized UIDs. At
- present, this functionality is immature in the kernel as many
- guarantees are not met, such as similar UIDs in different namespaces
- sharing a global UID.
-* IPC: This isolates SystemV IPC ids to the processes in this
- namespace. This means that globally shared memory, semaphores, and
- message queues are accessible only to other processes in the same
- namespace.
-* [VFS](http://www.ibm.com/developerworks/linux/library/l-mount-namespaces.html):
- VFS namespacing allows for a custom view of the locally mounted file
- systems. In addition, any file systems mounted in a VFS namespace
- will automatically be unmounted when all the processes in the
- namespace have terminated. In addition, mount namespacing also comes
- with interesting new sharing attributes (make-private,
- make-unbindable, make-slave, make-shared).
-* [NET](http://lxc.sourceforge.net/network.php): This namespace
- isolates the processes from the network interfaces, defaulting to
- having access only to the loopback interface.
-
-In addition to namespacing and cgroups, Linux supports [parceling superuser
-privileges using
-capabilities](http://www.ibm.com/developerworks/aix/library/l-posixcap.html).
-Privileges that were once limited to uid=0 are now available in a coarse-grained
-fashion using runtime and file system (extended attribute)-based labeling. In
-addition, process tree capabilities inheritance is possible with a [lightweight
-kernel patch](http://marc.info/?l=linux-kernel&m=125026482525494&w=2). With file
-system capabilities enabled, specific process trees can also disable uid=0 from
-having any default privilege (other than that granted by file system
-permissions) using the securebits SECURE_NOROOT and SECURE_NO_SETUID_FIXUP. All
-processes in the subtree could then be locked into this pure capability-based
-superuser privilege mode barring a kernel privilege escalation vulnerability.
-All capabilities are broken into effective, permitted, and inherited sets, which
-can be applied to a file or process. In addition, processes all have a starting
-bounding set that places an upper limit on which capabilities can be used, even
-if in one of the other sets. At present, we're not aware of any Linux
-distributions that make heavy use of capabilities.
-
-[Linux Security Modules](http://lwn.net/Articles/154277/) (LSM) is a subsystem
-of the Linux Kernel Modules that implements a number of kernel task-based hooks.
-It allows for a security module to be implemented that enforces mandatory access
-controls and can be stacked (if supported by the module) with other security
-modules. [Tomoyo](http://tomoyo.sourceforge.jp/) 2.x,
-[SELinux](http://www.nsa.gov/research/selinux/index.shtml), and
-[SMACK](http://schaufler-ca.com/) are examples of these systems.
-
-[grsecurity](http://grsecurity.net/) is a standalone kernel patch that provides
-role-based access controls, kernel hardening, and bug fixes, as well as
-extensive detection functionality.
-
-The kernel supports a notification system to inform userland of process events:
-fork, id changes, so on. The [process events](http://lwn.net/Articles/157150/)
-subsystem allows for low-cost monitoring of task creation and removal as well as
-other pertinent runtime information. Communication is handled over a netlink
-connection provided by the CONFIG_CONNECTOR option.
-
-## Detailed design
-
-This project will be undertaken iteratively to increase both the amount of
-process isolation and overall system security as the implementation proceeds.
-To reduce the surface area exposed to attack, we aggressively isolate processes
-to access only what they require to function. Applying the [principle of least
-privilege](http://web.mit.edu/Saltzer/www/publications/protection/) reduces the
-total amount of code exposed at any one point and, ideally, minimizes the risk
-that the exposed code contains a vulnerability.
-Since it's not practically possible to isolate any software so completely as to
-guarantee that vulnerable code isn't exposed, we use runtime and compile-time
-exploit mitigations to increase the difficulty of a successful attack. In
-addition, the mitigations used should make viable exploits behave unreliably
-across Chromium OS systems.
-Again, we assume that a *perfect* defense is unattainable, but providing a very
-good defense will be on-going, iterative work which we all must contribute to.
-To that end, we want to make successful exploitation less beneficial for the
-attacker. For successful user-level exploits, this is done using the same
-isolation techniques used to minimize exposed kernel attack surfaces. Successful
-kernel-level exploits may be partially contained through some kernel hardening
-patches, but more extensive fault isolation approaches have not yet been
-explored.
-
-### Containment options
-
-Two main approaches will be supported for containment:
-
-* minijail: a tiny, custom launcher that handles namespacing, control
- groups, chroot'ing, and more.
-* A mandatory access control mechanism with automated learning mode,
- like Tomoyo or grsecurity.
-
-#### minijail
-
-*minijail* is a small executable that can be used by root and non-root users to
-perform a range of behaviors when launching a new executable:
-
-* Dropping capabilities from the bounding set
-* Enable/disable capabilities
-* chroot
-* Dropping root (uid+gid)
-* Setting securebits (SECURE_NOROOT, SET_DUMPABLE)
-* Setting rlimits
-* Process namespacing:
- * Will act as init for any pid namespaces
- * Will mount /proc in any child vfs namespaces
- * Will support uts namespacing (not required)
- * Will support user namespacing (in the future)
- * Will support IPC namespacing (binary decision)
- * Will support net namespacing (for locking down network
- interfaces w/veth)
-* A generic [suid
- sandbox](http://src.chromium.org/viewvc/chrome/trunk/src/sandbox/linux/suid/sandbox.c?revision=25019&view=markup)
- (using the features above)
-
-The final implementation should include a standalone library, libminijail, and a
-command-line tool that supports individual feature specification or the loading
-of specific, preconfigured profiles.
-
-Regardless of the implementation, the binary will need the cap_setpcaps extended
-attribute set (+ep) to be able to operate without root privileges. (If we move
-to a root file system that doesn't support extended attributes, any specialized
-binaries can be mounted off of an ext3 loopback, or the kernel-based inheritance
-patch can be used.)
-
-#### Mandatory access controls (MAC)
-
-If we are able to use kernel hardening patches (discussed later), we should
-seriously consider using grsecurity. If not, we will use the in-kernel solution
-Tomoyo. grsecurity supplies an effective automatic rule generator and includes a
-large number of kernel hardening features and bug fixes that will otherwise be
-missed.
-Tomoyo will provide mandatory access controls to ensure that processes don't
-exceed their expected boundaries. Initially, the coverage will be largely
-limited to additional file system enforcements. Protection around ptrace, ioctl,
-and other areas are needed before this will be considered a good solution.
-Whichever MAC solution we choose will be configured to run in enforcement mode
-for all processes, except when running in development mode. In that case, the
-development mode parent process runs in permissive mode to allow the developer
-to take whatever actions he wishes.
-
-### Deployment
-
-System hardening will proceed in roughly three phases. The first phase applies
-comprehensive userland isolation using the two main containment options.
-
-### Phase 1: Surface changes
-
-Phase 1 focuses largely on putting existing services (and user logins) in to
-SECURE_NOROOT+namespaced jails with as little system impact as possible. This
-can be done by tweaking initialization scripts and modifying file extended
-attributes. In particular, this will be done in our custom upstart configuration
-files and other boot scripts.
-
-#### Nobody puts user in a corner: Or, taking root from the user.
-
-It turns out that this is pretty easy as long as we don't focus on making all of
-Xorg non-root-based. For example, there is a command run by the login manager
-upon successful user authentication:
-
-/bin/bash --login /etc/X11/Xsessionrc %session
-
-which we could change to
-
-/sbin/capsh --secbits=0x2f --drop=\[all\] -- --login /etc/X11/Xsessionrc
-%session
-
-in order to run the user's session in SECURE_NOROOT, if we were using the capsh
-tool (capabilities-aware shell).
-
-However, since we have minijail, we can use it to do more than just run in
-SECURE_NOROOT:
-
-/sbin/minijail --init --namespace=pid,vfs --cgroup=chromeuser --secbits=0x2f
---drop=\[all\] --exec=/bin/bash -- --login /etc/Xsessionrc %s
-
-This will dump the new process in its own namespace where minijail acts as pid
-1. The entire X session will only be able to see a /proc that is related to its
-pid namespace, and it will have access only to devices enabled for the cgroup:
-chromeuser. No SUID binaries or binaries with any additional extended capability
-attributes set will be executable in this session.
-
-The biggest impact is that when it comes time to perform screen unlocking, the
-xscreensaver process will not be able to do anything privileged.
-
-**Note:** We have not chroot'd or net-namespaced the binaries. At present, /dev/
-is limited by cgroup filtering (discussed below) and by mounting a fresh /proc
-with the namespace view. While we will have stripped power from any simple root
-privilege escalation attack, a user running as uid=0 will still have normal
-discretionary access controls to a crazy number of files and devices as the root
-user. In Phase 2, we will look at further segmenting access.
-
-Big Note: Any privileged actions must be brokered by preconfigured, preexecuted
-binaries.
-
-With this Big Note in mind, we can look back at our slim.conf. If we find that
-we need to launch some processes with some privileges, we can tone down how
-aggressive the first call to minijail is. It can set up the namespace and lock
-down root, but it can leave the bounding set a bit wider; that way, we can
-launch utilities that may need capabilities like pulseaudio. This can be done
-inside the Xsessionrc by calling minijail on all subsequent binaries with
-specific bounding set changes, etc. They can all, thankfully, live in their new
-pid namespace unless we lock them down further (chroot, etc). Initially, we'll
-start with the above configuration and tweak as problems are introduced.
-
-Guiding resource utilization with control groups
-
-Control groups (cgroups) will be used to segment the population with respect to
-device access and resource utilization. To that end, we can preconfigure a few
-control groups at start via a simple /etc/init.d/cgroups script:
-mkdir /cgroup
-chown root:root /cgroup
-chmod 700 /cgroup
-mount none /cgroups -t cgroup -o cpu,memory,dev
-mkdir /cgroups/services/network
-mkdir /cgroups/services/autoupdate
-mkdir /cgroups/user/chrome
-mkdir /cgroups/user/chrome/sandbox
-mkdir /cgroups/user/chrome/plugins/flash
-mkdir /cgroups/user/xorg
-With that done, we can leave it to minijail invocations to add the pid to the
-/cgroups/&lt;cgroup&gt;/task file. The biggest challenge will be nested cgroups
-like chrome/sandbox, since we will not mount /cgroups in the chrome user
-namespace and users will be unable to see the /cgroups file system. In Phase 1,
-we'll just have to let renderers live in the chrome cgroup and hope for the
-best. Segmenting chrome user processes from the system services should be enough
-to guarantee that a Chromium browser CPU DoS won't peg the system too badly, but
-we'll see. If it can tie up xorg, the user experience will be the same. However,
-in Phase 2, we will introduce a cgroupsd daemon. This daemon will monitor new
-process creation (via a TBD mechanism with _low_ power/cpu needs) and
-automatically add them to the appropriate cgroup.
-
-Devices will be added quite simply with:
-
-echo 'c 1:3 mr' &gt; /cgroups/1/devices.allow
-
-Memory per group can be determined based on system memory. Below, limit chrome
-to using 80 percent of available memory:
-total_mem=$(free -b | grep Mem | tr -s ' ' | cut -f2 -d' ')
-echo $((total_mem / 5 \* 4)) &gt; /cgroups/user/chrome/memory.limit_in_bytes
-CPU usage can also be determined using the system total, which is available in
-cpu.shares. Below, we give all chrome processes 80 percent of the CPU shares:
-total_cpu=$(cat /cgroups/cpu.shares)
-echo $((total_cpu / 5 \* 4)) &gt; /cgroups/user/chrome/cpu.shares
-Of course, we can tweak the total number of shares to make specific allocations.
-The allocations should then be used for fair scheduling.
-Longer term, we may be able to use 'freezer' support to freeze all processes
-prior to suspend or use cpusets to ensure that the Chromium browser, or perhaps
-even an [extension](http://code.google.com/chrome/extensions/), is privately
-allocated an entire CPU core (using *cpusets*). In addition, if any of these
-items imply too much overhead, it is possible to achieve similar (and even more
-focused) results using RLIMITS.
-
-#### Locking down existing daemons with extended attributes and a bit of luck
-
-#### At present, there are a number of processes running as root:
-
-* SLiM and X: both run with privilege. SLiM starts Xorg, and Xorg
- needs ioctl and ioperm access, which equates to root access in most
- cases. We will explore a non-root Xorg in Phase 2.
-* connman will need CAP_NET_ADMIN, CAP_NET_RAWIO at most in its
- bounding set so that they may be used by properly annotated files:
- ping, dhclient, wpa_supplicant.
-* dhclient is used for acquiring a network address and configuring an
- existing network device. It needs to broadcast UDP and change
- network device parameters.
-* wpa_supplicant is used for configuring the wireless device to
- properly associate with wireless access points.
-* acpid handles power management and other events: lid close, low
- battery, etc.
-* getty handles the standalone console, which will most likely be
- disabled in nondeveloper installs.
-* udev handles firmware loading and hot-pluggable device.
-
-The final goal is to move to a pure capability-based system which means that no
-service should *need* root access. To this end, we'll need to modify the startup
-process for these daemons. The easiest approach is to just wrap their
-start-stop-daemon calls with calls to minijail, either in the control panel or
-in /etc/init.d. Each one should get its own namespacing with chroot'ing if
-possible. (If it seems difficult to chroot a specific binary, then we should
-consider doing so with the Chromium OS project's
-[LinuxSUIDSandbox](http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox).)
-Capabilities required will be determined using *strace | grep 'EPERM|EACCESS'*
-while locking down the binaries. Each binary will have the capabilities it needs
-added to its extended attributes. For example, dhclient needs
-CAP_NET_BIND_SERVICE|CAP_NET_BROADCAST|CAP_NET_ADMIN:
-
-capset cap_net_bind_service,cap_net_broadcast,cap_net_admin=ep /sbin/dhclient3
-
-Then, dhclient will be called with minijail dropping all capabilities except
-those three (and cap_setcaps if needed). If dhclient is called from connman,
-then that process can already be running with a restricted capability bounding
-set.
-
-At present, our root file system supports extended attributes. If we move to
-squashfs or another file system without xattr**, we will have to work around the
-restriction. This can be done using the patch referenced in the Technology
-section or by mounting a loopback file system with the desired binaries with the
-appropriate xattrs.**
-
-#### Supporting development mode before we finish designing it
-
-Once we dump the user in SECURE_NOROOT land, sudo and su become useless. To
-allow continued tinkering, we can use the secondary console if enabled or a
-loopback ssh daemon. As long as we don't lock these alternative entry points the
-same way as the primary user session, they will be perfectly sane ways to
-implement a secure but useful development mode.
-
-#### Adding fine-grained controls over coarse-grained capabilities with mandatory access controls
-
-For our Mandatory Access Control (MAC) needs, we are considering the external
-grsecurity kernel patch as well as the currently in-kernel Tomoyo module and
-accompanying tomoyo-ccstools package. In either case, a similar approach
-applies. Once installed, an initial policy can be configured using learning
-mode. We can then enable enforcement on process trees which shouldn't change:
-dhclient, wpa_supplicant, etc. The Chromium browser itself will likely run in a
-permissive mode as we explore extensions and other changes. However, as we
-approach releases, we can configure a final policy using learning mode both with
-active users and through automated testing that exercises all the expected use
-cases for the system.
-
-The Tomoyo tool for editing the policy is ccs-editpolicy. Initially, there
-should be no need to perform any special customization other than converting
-process trees from disabled to learning or permissive. In addition, we will need
-to make sure that the development mode runs in permissive or disabled mode.
-
-#### Locking down the file system (discretionary access controls)
-
-Discretionary access controls have been satisfactory at implementing basic
-security in Linux for years. An audit of the root file system will ensure that
-no end user can read files or directories he has no need to read, execute files
-he has no need to access, or chdir to directories he has no need to enter. This
-effort will be further expanded by the Phase 2 efforts around changing file
-ownership to limit root's discretionary access—even when its capabilities have
-been revoked.
-In addition to the normal file system, /dev and /proc can be dangerous for an
-unprivileged root user. While we are filtering devices per-cgroup, we should
-ensure that CONFIG_STRICT_DEVMEM is set to limit /dev/mem usefulness. If we
-patch Xorg, we may be able to get rid of /dev/mem entirely. In addition, a
-review of what is available in /proc and /dev for each group will be crucial.
-Whenever we place a process tree in a new VFS, we can mount --bind in only the
-files we want. This is harder with /proc, but doable if needed. /proc may be
-remounted read-only at the very least. We may be able to make use of the Linux
-VServer's 'setattr' tool to hide /proc entries on namespace mount. If so, this
-would be done in the minijail code but would require that we support the vserver
-kernel patches. However, namespacing and chroot'ing will hopefully cover a lot
-of ground.
-User home directories and the /home partition should be mounted nosuid, nodev,
-and ideally, noexec. We should attempt to limit user access to included
-scripting engines if possible to to aid in enforcing noexec (dash, bash, or any
-others).
-
-#### Deploying the firewall
-
-The netfilter/iptables infrastructure provides a number of interesting
-approaches for limiting network access, both inbound and outbound. While a basic
-inbound-only policy will work for general TCP and UDP level attack protection,
-it would be nice to limit the OUTPUT chain as well. We can also consider using
-network namespaces and VETH devices, but for Phase 1, the added complexity and
-potential robustness issues make it questionable (see Phase 2 for more detail).
-
-#### Xorg without the root user
-
-On a testing system, we have restricted Xorg to CAP_SYS_RAWIO and seen
-everything work except ioctl() access to the graphics device. We believe there
-to be patches that deal with this, but getting them working within our codebase
-may require some work. In addition, we can't just drop privilege because that
-will make returning from suspend quite painful.
-
-#### SLiM and pam_google with limited capabilities
-
-Any privileged behavior needed by pam_google will need to be moved into a
-standalone daemon. For instance, any encrypted volume management will need to be
-shifted into a daemon that handles it for the user. A simple daemon that checks
-SO_PEERCRED and the current mount state would do the trick.
-
-### Phase 2: Diving deeper
-
-Phase 2 is where we start making changes that are farther reaching.
-
-#### cgroupsd
-
-cgroupsd is a simple daemon that will automagically add new processes to a
-control group specified in a libcg-style configuration file. The only useful
-design point is that it will do so by using CONFIG_CONNECTOR and
-CONFIG_PROC_EVENTS to be notified by the kernel of new processes via netlink. It
-will need access to the /cgroups mountpoint, but otherwise, will not need any
-additional privileges. In particular, if cgroupsd is used *only* for Chromium
-browser sandbox processes, it can run with privileges to modify only
-/cgroups/user/chrome/sandbox/tasks.
-cgroupsd will also be used to enforce device filtering and resource management
-on plugins like Flash.
-
-#### Other local system management daemons (network, sound, removable storage, ?)
-
-The further we lock down the user's session, the more work we'll have to put in
-to brokering access to system resources. The control panel approach is great for
-system management brokering (via a network loopback), but we will need to make
-sure that udev and hal access can be handled safely.
-We're probably also going to see some pain with Adobe Flash and other binary
-plugins unless we give them access. Reviewing and integrating plugins with this
-design will be critical to avoiding introducing a trivial backdoor through the
-protections.
-
-#### Put browser instances in their own namespaces
-
-Chromium browsers can make use of the measures deployed in Phase 1. If the
-existing sandbox isn't isolating rendered processes in their own pid namespace,
-then it should be done here. In addition, every browser process itself can be
-dropped into its own namespace when launched.
-
-#### Applying net namespaces
-
-One possible approach to isolating processes further is putting them all in
-their own [net namespace](http://lxc.sourceforge.net/network/configuration.php).
-We can then expose to the system a virtual interface with a virtual, internal,
-IP address. We could even optionally enforce userland proxy use (for truly dodgy
-inmates). However, this may introduce robustness issues if a user is assigned a
-physical address that is the same or in the same netmask as the virtual ones.
-Given that we can't control the eth0 address, we have delayed pursuing this
-until Phase 2. When we get there, it will be worth investigating and deploying
-if possible to keep any process from being able to bind to an external port.
-
-#### Re-chowning the file system, or why root shouldn't own *everything*.
-
-Even in a SECURE_NOROOT environment, root still has discretionary access control
-to a large number of files and devices, and that access may be used to escalate
-privileges or make system changes. One possible approach is to create multiple
-system accounts that are responsible for files along some logical domain. One
-option would be to use a var user and a home user and a bin user for each of the
-areas they may own. A privileged user can always override such discretionary
-access control mechanisms, but it will stop any accidental root access from
-being completely detrimental.
-That change may be overkill or add more complexity than the gain. Another option
-would be to add a new secure bit along the lines of SECURE_UNSAFE. If that
-secure bit is set on a tree, then no process in the tree can change to UID/GID
-0.
-
-#### Device interposition
-
-Given that Chromium browsers and plugins need access to the webcam and audio (in
-and out), it's important to isolate the kernel device drivers from software that
-may be attacker controlled. To this end, access to /dev/video0 will be brokered
-via a userland daemon. The work may be based on
-[GSTFakeVideo](http://code.google.com/p/gstfakevideo/). Not only will this avoid
-direct attacks on random webcam drivers, it will also mean we can later offer an
-interface for doing real-time video stream filtering: custom effects, etc.
-In addition to /dev/video, we'll want to position userland code for audio
-interception (e.g, /dev/dsp, etc). This can be done using something like esound
-or pulseaudio. If we go with one of those daemons anyway, we can get this for
-free.
-After the audio/video experience, we're left with one major exposed surface for
-plugins which require video card device access. Since we will want to support
-accelerated 3D and other fast rendering, we'll be exposing (possibly
-binary-only) video card drivers via X/DRI. This is a larger problem that will be
-addressed in a more detailed design document on the issue.
-
-#### Monitoring
-
-If we can monitor our system for any clear signs of compromise without seriously
-affecting battery life or performance, then we should! This area should be
-branched out into a full standalone design document. But within the scope of
-this document, it is worth considering a very simple system.
-A single daemon can monitor process creation and uid changes via the proc events
-kernel interface. If it sees any process become uid/euid==0, then we have
-someone running a privilege escalation exploit. If we determine an
-exceptional-event user interface or a reboot path that will notify the user to
-put-a-paperclip-in to reset the device, then we can trigger it immediately.
-While an exploit can target this behavior, it is just one more layer of defense.
-The Linux Auditing Framework may be very useful for doing detection, but its
-cost may outweigh the benefit. Since we are not expecting a huge number of
-process creation events, we can monitor system calls ranging from ptrace to
-clone(2) to fork. If we avoid high traffic system calls, we should be able to
-enforce some basic system call detection without sandboxing explicitly. In
-addition, if we don't use auditd, but instead a [custom
-listener](http://people.redhat.com/sgrubb/audit/audit-rt-events.txt), we can
-immediately react to an event—such as terminating the calling process or
-triggering a reboot into the recovery system.
-
-### Phase 3: Don't forget your snorkel!
-
-Phase 3 is where we get to explore additional innovations in the security space
-that will require the most long-term investment. We're excited about the
-possibilities around integrating new kernel and user space hardening techniques
-and figuring out how to properly isolate drivers in kernel-space.
-Here are some of the ideas we have, but there is a lot of area to research:
-
-* Retrofit /sbin/init and remove root everywhere.
-* Isolate all running Xorg windows in Xephyr transparently to mitigate
- keystroke theft, etc. (is the benefit worth the extra code?)
-* Custom Linux Security Module for doing nested runtime sandboxes.
-* Device driver security: We need to analyze device drivers and
- determine a plan for isolation and or robustness.
- * Using [KLEE](http://hci.stanford.edu/cstr/reports/2008-03.pdf)
- or other automated dynamic analysis suite
- * Consider vt-d/trustzone approaches for driver isolation
- (l4linux, 64-bit friendly KERNSEAL/KERNEXEC?, Nooks)
-* Harden the kernel heap management.
-* Chromium-browser-based isolation of user data and processes by site
- domain.
-* Chromium browser http and https network stack isolation (as
- processes) to protect secure cookies from evil sites accessed over
- HTTP.
-* Further harden userland/kernel interfaces.
-
-### Designing and developing for security
-
-Future software written for and included in Chromium OS-based devices must not
-work around or otherwise undermine any of the features implemented to ensure
-system security. In addition, it is important that software used in Chromium OS
-receive sufficient peer code reviews, manual and automated security testing, as
-well as security code audits. Security testing and code review processes should
-be discussed in more detail in another document. Obviously, we feel that all
-Chromium OS devices should only run software that follows these guidelines, but
-we can only ensure that this is so for our official builds.
-
-### Exploit mitigation
-
-In addition to the containment plan, there are steps we can take to hardening
-our user and kernel toolchains and harden the kernel itself. Toolchain hardening
-and kernel patching should be performed opportunistically and are not tied to
-the phased implementation laid out above.
-
-#### Kernel toolchain and patches
-
-There are a huge number of potential changes to the kernel we can pursue. We'll
-start with known approaches and then expand as permitted into newer areas as
-possible:
-
-* [PaX](http://pax.grsecurity.net/docs/) provides a number of useful
- exploit mitigation techniques as a standalone patch to the Linux
- kernel. grsecurity and PaX are available in one bundled patch. If at
- all possible, PaX and grsecurity should be applied to the kernel.
-* Ensure that we don't optimize out NULL pointer checks as mmap(0)
- tricks are the current trend in kernel exploitation.
- -fno-delete-null-pointer-checks
-* The kernel should be compiled so that it is relocatable:
- CONFIG_RELOCATABLE=y
-* Compile out the vdso mapping unless we are really using something
- that needs it:
- COMPAT_VDSO=n
-* A minimum mmap address must be enforced (&gt; NULL):
- CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR
-* The kernel should be compiled with stack smashing detection support:
- CONFIG_CC_STACKPROTECTOR=y CONFIG_CC_STACKPROTECTOR_ALL=y
-* System call patching: we should patch out, or severely restrict,
- system calls that are new or potentially risky (e.g., ptrace,
- vmsplice).
-* Rebooting on soft panic: Currently, the kernel will try to continue
- after a soft panic. To avoid a soft panic being caused by a
- less-than-robust compromise, it'd be better to just reboot—which
- leads into the next point.
-* [kexec-on-panic](http://lwn.net/Articles/108596/): While
- [kdump](http://lxr.linux.no/#linux+v2.6.30/Documentation/kdump/kdump.txt)
- is meant to aid in enterprise-grade kernel debugging, we can
- automatically boot over to a standby kernel if something goes wrong
- with our primary kernel. This means that we will gain the long term
- option of uploading kernel crash dumps, but at the very least, we
- could boot a kernel that displays "Awww, snap!" and safely
- reboots—or calls the autoupdater. While an attacker could target
- modifying the kexec backup kernel, it seems an unlikely target if
- the attacker can modify the running kernel (but we expect someone
- will do it for fun). Note, this is not an option for ARM.
-* Additional kernel configuration audit: remove all unneeded features.
-* Disable automodule loading after the system is brought up. One
- approach that was suggested is running sysctl -q
- kernel.modprobe="/usr/bin/logger" and then rmmod -a after the system
- is up if we can't move to a module-less kernel build.
-* Enforce that system calls can't be called directly from writable
- memory segments, like the heap.
-
-#### Userland toolchain
-
-The userland toolchain should enforce a number of requirements (which will need
-benchmarking):
-
-* -fno-delete-null-pointer-checks
-* -fstack-protector: stack canary
-* -pie: relocatable executables (and marked ET_DYN)
-* -Wl,-z,relro: read-only relocations
-* FORTIFY_SOURCE
-
-Longer term, we'll also look at:
-
-* Additional glibc heap hardening
-* Extending stack protector to obscure return addresses on the stack
-
-### Quantifying effectiveness
-
-In order to quantify effectiveness, we should take the time to truly enumerate
-the attack surfaces yielded by these hardening steps:
-
-* Available files
-* Files with privileges (capabilities, suid, /proc, /dev, /sys)
-* System calls
-* User id separation
-
-In addition to enumeration of attack surfaces, we should also implement
-proof-of-concept attacks for each layer of our defenses by placing vulnerable
-code at various points and directly testing the security properties at that
-point. To supplement explicit tests, we will also pull in new exploits for newly
-vulnerable code and evaluated if it is successful, how reliable it is, and what
-we can do to protect against something like it in the future.
-
-## Plan
-
-The phases as laid out will be followed with the end goal of having Phases 1 and
-2 completed fully in a few months -- including toolchain hardening.
-Attack-oriented testing may be performed as part of the functional testing
-during deployment, but if not, it should be completed immediately after phase 2
-along with a full system review. In addition to retrospective analysis of the
-security, as new attacks emerge for Linux and Chromium OS, we will need to
-evaluate their behavior and determine how to continue to futureproof the system
-from a security perspective! \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-notifications/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-notifications/index.md
deleted file mode 100644
index 93aeae11896..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/system-notifications/index.md
+++ /dev/null
@@ -1,344 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: system-notifications
-title: system notifications
----
-
-## Summary
-
-ChromeOS has several types of system status and some of them should be notified
-to the user. This document summarizes which types of notifications are currently
-used and what kind of UI flow is necessary here.
-
-The notifications are usually generated through the internal C++ API for the
-[desktop
-notifications](/developers/design-documents/extensions/proposed-changes/apis-under-development/desktop-notification-api),
-which will appear as the [rich
-notification](http://blog.chromium.org/2013/05/rich-notifications-in-chrome.html)
-as well.
-
-## Blocking and system notifications
-
-Sometimes normal notifications should be blocked due to the current system
-status. For example, all notifications should be queued during the lock screen,
-and they should appear when unlocked. It also should be blocked when fullscreen
-state; notifications should be annoying when the user watches YouTube videos, or
-has a presentation (note: the notifications **should** appear in [immersive
-fullscreen](/developers/design-documents/immersive-fullscreen) mode instead,
-because the shelf / message center UI is visible in such case).
-
-However, the system status could be so important that they should appear in such
-cases. This does not mean all system notifications should appear; some could be
-misleading. For example, the notification for taking screenshot would behave as
-same as the normal notifications, so it should not appear in the lock screen. In
-addition, screenshot notification has the message to 'click to view' but click
-should not work in lock screen. On the other hand, connecting display would be
-okay to be notified even in the lock screen, it just notifies the new system
-status.
-
-See also the [notification blocking code
-update](https://docs.google.com/document/d/1Ox0Gb659lE2eusk-Gwm-a_JkARva7LydQc3hZNJvDn0/edit?usp=sharing)
-design doc.
-
-## List of the system notifications
-
-<table>
-<tr>
-<td>message center?</td>
-<td>Component</td>
-<td>Source</td>
-<td>Message</td>
-<td>Show Always? ("System")</td>
-<td>Timeout</td>
-<td>Secure? (Show on Lock Screen)</td>
-<td>Customize?</td>
-<td>(can be disabled)</td>
-<td>Click Action</td>
-<td>Button</td>
-<td>Triggers</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>DisplayErrorObserver</td>
-<td>Could not mirror displays...</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>None</td>
-<td>display connection</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>DisplayErrorObserver</td>
-<td>That monitor is not supported</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>None</td>
-<td>display connection</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>ResolutionNotificationController</td>
-<td>..resolution was changed to...</td>
-<td>Yes</td>
-<td>Both</td>
-<td>No</td>
-<td>No</td>
-<td>Accept / Revert change</td>
-<td>Accept / Revert change</td>
-<td>settings change from chrome://settings/display</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>ScreenCaptureTrayItem</td>
-<td>... is sharing your screen</td>
-<td>Yes</td>
-<td>No</td>
-<td>No</td>
-<td>None</td>
-<td>Stop Capture</td>
-<td>apps</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>ScreenShareTrayItem</td>
-<td>Sharing control of your screen...</td>
-<td>Yes</td>
-<td>No</td>
-<td>No</td>
-<td>None</td>
-<td>Stop Share</td>
-<td>apps</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>ScreenshotTaker</td>
-<td>Screenshot taken</td>
-<td>No</td>
-<td>Yes</td>
-<td>No</td>
-<td>Yes</td>
-<td>Show FIles App</td>
-<td>keyboard shortcut</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>TrayDisplay</td>
-<td>Mirroring to...</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>Show Display Settings</td>
-<td>settings change from chrome://settings/display, and keyboard shortcut</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>TrayDisplay</td>
-<td>Extending screen to...</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>Show Display Settings</td>
-<td>settings change from chrome://settings/display, and keyboard shortcut</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>display</td>
-<td>TrayDisplay</td>
-<td>Docked mode</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>Show Display Settings</td>
-<td>close lid</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>language</td>
-<td>LocaleNotificationController</td>
-<td>The language has changed from...</td>
-<td>No</td>
-<td>No</td>
-<td>No</td>
-<td>No</td>
-<td>Accept change</td>
-<td>Revert change</td>
-<td>login</td>
-</tr>
-<tr>
-<td>No</td>
-<td>language</td>
-<td>TrayAccessability</td>
-<td>Spoken feedback is enabled.</td>
-<td>\*</td>
-<td>Yes</td>
-<td>No</td>
-<td>None</td>
-<td>keyboard shortcut</td>
-</tr>
-<tr>
-<td>No</td>
-<td>language</td>
-<td>TrayCapsLock</td>
-<td>CAPS LOCK is on</td>
-<td>\*</td>
-<td>Yes</td>
-<td>No</td>
-<td>None</td>
-<td>keyboard shortcut</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>language</td>
-<td>TrayIME</td>
-<td>Your input method has changed...</td>
-<td>No</td>
-<td>Yes</td>
-<td>No</td>
-<td>No</td>
-<td>Show IME detailed view</td>
-<td>keyboard shortcut</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>network</td>
-<td>DataPromoNotification</td>
-<td>Google Chrome will use mobile data...</td>
-<td>Yes</td>
-<td>No</td>
-<td>?</td>
-<td>No</td>
-<td>Promo URL or settings</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>network</td>
-<td>network_connect</td>
-<td>Activation of... requires a network connection</td>
-<td>Yes</td>
-<td>No</td>
-<td>?</td>
-<td>No</td>
-<td>Show Settings</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>network</td>
-<td>NetworkStateNotifier</td>
-<td>...Your .. service has been activated</td>
-<td>Yes</td>
-<td>No</td>
-<td>?</td>
-<td>No</td>
-<td>Show Settings</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>network</td>
-<td>NetworkStateNotifier</td>
-<td>You may have used up your mobile data...</td>
-<td>Yes</td>
-<td>No</td>
-<td>?</td>
-<td>No</td>
-<td>Configure Network</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>network</td>
-<td>NetworkStateNotifier</td>
-<td>Failed to connect to network...</td>
-<td>Yes</td>
-<td>No</td>
-<td>?</td>
-<td>No</td>
-<td>Show Settings</td>
-</tr>
-<tr>
-<td>No</td>
-<td>network</td>
-<td>TraySms</td>
-<td>SMS from ...</td>
-<td>\*</td>
-<td>No</td>
-<td>No</td>
-<td>Show SMS detailed view</td>
-</tr>
-<tr>
-<td>No</td>
-<td>power</td>
-<td>TrayPower</td>
-<td>Battery full OR %&lt;X&gt; remaining</td>
-<td>\*</td>
-<td>No / Never</td>
-<td>Yes</td>
-<td>No</td>
-<td>None</td>
-<td>low battery</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>power</td>
-<td>TrayPower</td>
-<td>Your Chromebook may not charge...</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>None</td>
-<td>usb charger connected</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>user</td>
-<td>TrayLocallyManagedUser</td>
-<td>This user is supervised by...</td>
-<td>Yes</td>
-<td>No</td>
-<td>No</td>
-<td>No</td>
-<td>None</td>
-<td>login</td>
-</tr>
-<tr>
-<td>Yes</td>
-<td>user</td>
-<td>TraySessionLengthLimit</td>
-<td>This session will end in...</td>
-<td>Yes</td>
-<td>No</td>
-<td>No</td>
-<td>No</td>
-<td>None</td>
-<td>timeout set by policy / sync / remaining time change</td>
-</tr>
-<tr>
-<td>No</td>
-<td>user</td>
-<td>TrayUser</td>
-<td>You can only have up to three accounts in multiple sign-in</td>
-<td>\*</td>
-<td>\*</td>
-<td>Yes</td>
-<td>No</td>
-<td>None</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/tab-discarding-and-reloading/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/tab-discarding-and-reloading/index.md
deleted file mode 100644
index 39492bed9d0..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/tab-discarding-and-reloading/index.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: tab-discarding-and-reloading
-title: Tab Discarding and Reloading
----
-
-**Why are my tabs reloading?**
-
-Your device is out of memory. Like your Android phone or tablet, Chrome is
-silently closing background tabs in order to make memory available. When you
-click on one of those tabs it reloads.
-
-**What's taking up all my memory?**
-
-Open the Task manager (under Tools &gt; Tools &gt; Task manager, or hit
-Shift-Esc) to see the usage of tabs and extensions. about:memory has more
-detailed information.
-
-**How can I make it stop?**
-
-Close some tabs or uninstall extensions that take a lot of memory. If there's a
-specific tab you don't want discarded, right-click on the tab and pin it.
-
-**How does Chrome choose which tab to discard?**
-
-You can go to about:discards to see the current ranking of your tabs. It
-discards in this order:
-
-1. Internal pages like new tab page, bookmarks, etc.
-2. Tabs selected a long time ago
-3. Tabs selected recently
-4. Tabs playing audio
-5. Apps running in a window
-6. Pinned tabs
-7. The selected tab
-
-**How often are users affected by this?**
-
-The majority of Chrome OS users have only one or two tabs open. Even users with
-more tabs open rarely run out of memory. Some users who run out of memory never
-see a reload (they log out without ever looking at a discarded tab). We have
-internal UMA metrics on all these conditions. Googlers tend to have large
-numbers of tabs open to complex web sites and tend to hit reloads more often.
-
-**Why doesn't Chrome do this on Mac / Windows / Goobuntu?**
-
-Those machines swap memory out to disk when they get low on resources. Changing
-tabs then slows down as the data is loaded from disk.
-
-**Why doesn't Chrome OS use swap?**
-
-This was a very early design decision. My understanding of the rationale is:
-
-\* Chrome OS doesn't want to wear out the SSD / flash chips by constantly
-writing to them.
-
-\* To preserve device security it would have to encrypt the swap, which
-increases the CPU and battery usage.
-
-\* Rather than slowing down by swapping, Chrome OS should run fast until it hits
-a wall, then discard data and keep running fast.
-
-**Why doesn't Chrome OS tell me that I'm out of memory?**
-
-This is an intentional UI design decision. My understanding of the rationale is:
-
-\* Phones and tablets silently discard pages
-
-\* Users shouldn't have to worry about managing memory
-
-**Why do we discard tabs instead of doing something else?**
-
-Well, we used to do something worse. When the machine ran out of memory the
-kernel out-of-memory killer would kill a renderer, which would kill a
-semi-random set of tabs. Sometimes this included the selected tab, so the user
-would see a sad tab page (specifically, He's dead, Jim.). The tab discarder only
-drops one tab at a time and tries to be smart about what it discards. We tried
-other approaches without much success. For example, forcing JavaScript garbage
-collection is too slow. Dropping various graphics caches only frees memory for a
-short amount of time. Part of the difficulty is that the response to low memory
-conditions needs to be fast, reliable and lead to a persistent decrease in
-memory consumption.
-
-**Is there a long-term plan for this issue?**
-
-Sometimes these issues are caused by memory leaks or bloat, which we fix.
-davemoore@ has been particularly good at finding Chrome OS memory problems. We
-also need to systematically reduce the amount of memory Chrome uses. People
-across the browser, renderer and graphics teams are working on this. We're also
-investigating zram (a kind of in-memory swap). At some point we may want to
-revisit the design decisions above.
-
-**Where can I find more detailed information about what we do in low memory
-situations?**
-
-See the [out of memory design
-document](/chromium-os/chromiumos-design-docs/out-of-memory-handling). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture.png.sha1
deleted file mode 100644
index 242b50a3ee2..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d7a7897f467fa7ff807807dc7d92635af71e02c5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture2.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture2.png.sha1
deleted file mode 100644
index f9be281c46c..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/basic-architecture2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4b4a723573c8a7ffa926ef5738efd5a95e6f1bd1 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window.png.sha1
deleted file mode 100644
index 41e171c6067..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6756ba713d0295c060ef2856eff6086fd4164628 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window_demo.swf.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window_demo.swf.sha1
deleted file mode 100644
index 548699663b2..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/candidate_window_demo.swf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7deaaf4d3583be6dbc4f8aaaba6bb6b4e97c537d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/index.md
deleted file mode 100644
index ea53b0d8af5..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/index.md
+++ /dev/null
@@ -1,275 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: text-input
-title: Text Input
----
-
-[TOC]
-
-## OBSOLETE: The contents need to be updated
-
-## Abstract
-
-* Chromium OS will be internationalized and will support many
- languages other than English
-* Chromium OS will support a variety of text input methods to make
- text entry as easy as possible for non-English languages
-* End user language and input-method settings are synchronized with
- the user's profile in the cloud to enable a consistent user
- experience from any device
-
-## Objective
-
-Build text input support for Chromium OS to make it well internationalized.
-
-## Background
-
-Chromium OS will be supporting multiple languages other than English. Regardless
-of the UI language (the language shown in menu items and any other strings in
-Chromium OS), Chromium OS should allow you to type in many languages. We will
-build text input support for Chromium OS on top of the existing text input
-technologies available for Linux.
-
-## Requirements
-
-Chromium OS will provide users several ways to type in text:
-
-* **Simple Keyboard:** Users type in characters directly from the
- keyboard. Examples: English, German
-* **Switchable Keyboard:** Users can switch keyboard mappings (for
- example, Latin/Cyrillic) and directly type in different character
- sets based on the current mapping. For example, Russian users can
- switch the keyboard mapping between Cyrillic and Latin to compose
- bilingual text.
-* **Simple IME:** Users type in most characters directly using a
- simple Input Method Editor (IME) that does some minor tasks such as
- validation, auto-correction, and composition. Examples: Korean, Thai
-* **Transliteration IME:** Users type in English characters that the
- Transliteration IME directly converts to native characters. Example:
- Indic
-* **Candidate IME:** Users type in all characters indirectly using an
- IME. For example, Japanese has too many characters to directly map
- on a keyboard. Using a Japanese IME, users type in the "sound" (for
- example, "nihon") to the IME, which provides a set of candidates
- (for example, "日本") that the user selects from.
-
-There are also Chromium OS-specific requirements, such as supporting both x86
-and ARM processors and following Chromium OS UI design guidelines. Meeting all
-of these requirements is not trivial. We'll reuse existing input technologies as
-much as possible.
-
-We will support the following languages by any of the ways listed above.
-
-<table>
-<tr>
-<td>Arabic</td>
-<td> Bulgarian</td>
-<td> Catalan</td>
-<td> Croatian</td>
-<td> Czech</td>
-<td> Danish</td>
-<td> Dutch</td>
-<td> English (GB)</td>
-<td> English (US)</td>
-<td>Estonian</td>
-<td>Filipino</td>
-<td>Finnish</td>
-<td>French</td>
-<td> German</td>
-<td> Greek</td>
-<td> Hebrew</td>
-<td> Hindi</td>
-<td> Hungarian</td>
-<td> Indonesian</td>
-<td> Italian</td>
-<td> Japanese</td>
-<td> Korean</td>
-<td>Latvian</td>
-<td> Lithuanian </td>
-<td> Norwegian</td>
-<td> Polish</td>
-<td> Portuguese (Brazil)</td>
-<td> Portuguese (Portugal)</td>
-<td> Romanian</td>
-<td> Russian</td>
-<td> Serbian</td>
-<td>Simplified Chinese</td>
-<td>Slovak</td>
-<td>Slovenian</td>
-<td> Spanish</td>
-<td>Spanish in Latin America</td>
-<td> Swedish</td>
-<td> Thai</td>
-<td> Traditional Chinese</td>
-<td> Turkish</td>
-<td> Ukrainian</td>
-<td> Vietnamese</td>
-</tr>
-</table>
-
-## Design
-
-### Basic architecture
-
-For languages that can be supported by Simple Keyboard or Switchable Keyboard,
-we'll use [XKB](http://en.wikipedia.org/wiki/X_keyboard_extension) (X Keyboard
-Extension). For languages in other categories, we'll use
-[IBus](http://en.wikipedia.org/wiki/Intelligent_Input_Bus) (Intelligent Input
-Bus). The following diagram illustrates the basic architecture of text input
-support for Chromium OS.
-
-> [<img alt="image"
-> src="/chromium-os/chromiumos-design-docs/text-input/basic-architecture2.png">](/chromium-os/chromiumos-design-docs/text-input/basic-architecture2.png)
-
-### Keyboard layout: XKB
-
-We will create the XKB definition file for each keyboard layout.
-
-### Input method framework: IBus
-
-We will use IBus as the input method framework (IM framework). IBus is an
-open-source input method framework that works as a middle layer between
-applications and language-specific backend conversion engines.
-
-We decided to use IBus for the following reasons.
-
-* It's the default IM framework for Fedora 11 and Ubuntu 9.10.
-* No rebooting is necessary (unlike older IM frameworks) when major
- configurations are changed, such as when adding a new language.
-* Apps should be more stable. Unlike older IM frameworks, crashes in
- conversion engines won't affect applications.
-* IBus is implemented on top of D-Bus, which is also used in other
- components of Chromium OS.
-
-### Conversion engines
-
-Many conversion engines are available for IBus, such as ibus-pinyin for Chinese.
-We'll use the following open source conversion engines.
-
-<table>
-<tr>
-<td><b>IBus engine</b> </td>
-<td> ibus-pinyin</td>
-<td><b> ibus-chewing</b> </td>
-<td><b> ibus-table</b></td>
-<td><b> ibus-hangul</b></td>
-<td><b>Language</b> </td>
-<td> Chinese (Simplified)</td>
-<td> Chinese (Traditional - Chewing)</td>
-<td> Chinese (Traditional - Bopomofo and Cangjie)</td>
-<td> Korean</td>
-</tr>
-</table>
-New: For Japanese, we plan to port [Google Japanese
-Input](http://www.google.com/intl/ja/ime/) to Chromium OS.
-
-### User experience
-
-We'll make the text input experience be uniform with the user experience in
-Chromium OS. To achieve this goal, we'll rewrite all user interfaces using
-Chromium's UI toolkit library called Views.
-
-**Candidate window**
-
-Will be implemented as separate process. Communicates to IBus-daemon via D-Bus.
-
-New: Here's a screenshot of a work-in-progress version of the candidate window.
-[A demo](/system/errors/NodeNotFound) is also available.
-
-> [<img alt="image"
-> src="/chromium-os/chromiumos-design-docs/text-input/candidate_window.png">](/chromium-os/chromiumos-design-docs/text-input/candidate_window.png)
-
-**XKB configuration dialog**
-
-Will be part of Chromium's options dialog. Communicates to X server via libcros.
-
-**IBus configuration dialog**
-
-Will be part of Chromium's options dialog. Communicates to IBus-daemon via
-libcros.
-
-**Conversion engine specific configuration dialogs**
-
-Will be part of Chromium's options dialog. Communicates to conversion engines
-via libcros.
-
-**Input language selector**
-
-Will be part of Chromium's status area (near the time and the power indicator).
-Communicates to IBus-daemon and X Server via libcros. We'll integrate the input
-language selector with the keyboard layout selector, unlike traditional Linux
-desktops. Here's a mockup of what it will look like:
-
-> [<img alt="image"
-> src="/chromium-os/chromiumos-design-docs/text-input/input.png">](/chromium-os/chromiumos-design-docs/text-input/input.png)
-
-**Input language selector (on login manager)**
-
-Probably not required, because Google accounts (that is, email addresses) used
-for login are all in ASCII characters, as are the passwords. We will implement
-it once it becomes necessary. Internationalized keyboards can be supported by
-XKB configurations.
-
-**Sync with the cloud**
-
-Text input-related data is synced with the cloud. We sync the user's choices of
-languages, keyboard layouts, and input method extensions as described in
-[Syncing Languages and Input
-Methods](/chromium-os/chromiumos-design-docs/text-input/syncing-input-methods).
-
-In the future, we may sync:
-
-* User settings for XKB, IBus, each IME, and so on.
-* User input history used for better conversions (optional)
-* User-defined dictionaries (optional)
-
-Syncing configuration data is a must, but users can opt out of syncing other
-user data.
-
-**Security considerations**
-
-An indirect input layer like IBus can be a security weak point, as it can be
-exploited as a key logger. We plan to use
-[GRSecurity](http://en.wikipedia.org/wiki/Grsecurity) to restrict resource
-access from IBus and conversion engines. We also plan to review the security of
-IBus.
-
-**Long-term goals**
-
-Although the following goals aren't targeted for the initial version, these are
-some of our long-term goals:
-
-* Better integration with browsers, such as changing behavior
- depending on the input form.
-* Multi-modal input, such as hand writing and voice recognition.
-* Virtual keyboard (aka software keyboard). Web-based virtual keyboard
- can be used in the initial version, though.
-* Multi-keypress input
-
-## Code location
-
-### IBus
-
-* chromium-os/src/third_party/ibus/ (Tip of tree of IBus. We'll use
- the ibus-daemon, ibus-pinyin, ibus-chewing, ibus-table, and
- ibus-hangul modules as-is. However, we won't use the ibus-setup or
- ibus-panel modules.)
-
-### Configuration dialog and language selector
-
-* [chromium/src/chrome/browser/chromeos/options](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/chromeos/options/)
- (configuration page)
-* [chromium-os/src/platform/cros](http://src.chromium.org/cgi-bin/gitweb.cgi?p=cros.git;a=summary)
- (libcros part, replacement for ibus-setup and ibus-panel)
- * [chromeos_ime.cc](http://src.chromium.org/cgi-bin/gitweb.cgi?p=cros.git;a=blob;f=chromeos_ime.cc;hb=HEAD)
- - APIs used for implementing the candidate window
- * [chromeos_language.cc](http://src.chromium.org/cgi-bin/gitweb.cgi?p=cros.git;a=blob;f=chromeos_ime.cc;hb=HEAD)
- - APIs used for manipulating input language status.
-
-### Candidate window
-
-* [chromium/src/chrome/browser/chromeos/text_input](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/chromeos/text_input/) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/input.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/input.png.sha1
deleted file mode 100644
index 4431ceec8ff..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/input.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a79a2fd183fd588c3b91f27d10ae995c85fd5d75 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/syncing-input-methods/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/syncing-input-methods/index.md
deleted file mode 100644
index aca8b455a78..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/text-input/syncing-input-methods/index.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-- - /chromium-os/chromiumos-design-docs/text-input
- - Text Input
-page_name: syncing-input-methods
-title: Syncing Languages and Input Methods
----
-
-## Background
-
-In M41, Chromium OS [started syncing
-preferences](https://codereview.chromium.org/312023002) for languages, keyboard
-layouts, and extension IMEs. Because devices may have different physical
-keyboard layouts, as well as different available locales and input methods,
-changes on one device should not automatically propagate to another device.
-However, we still wanted to provide a convenient out-of-box experience for users
-who go beyond their device's default input method when they Powerwash their
-system or sign in to a new device.
-
-## Overview
-
-Instead of syncing input methods both ways, we send changes to input methods
-from the device to the sync server. This lets us "remember" the most recent
-settings without overwriting existing preferences on other machines. When a user
-signs in to a device for the first time, we combine the input method used to
-sign in with the information from the sync server, adding the user's saved input
-method preferences to the local preferences without overwriting any input
-methods already set up.
-
-For instance, a user should only have to manually add the Dvorak layout to a
-device once. Then, we automatically add this layout to new devices for this
-user, without affecting devices that have already been set up. If the layout
-isn't available on a device, it's simply not added. In the worst case, we may
-add an input method that is incompatible with the hardware keyboard, but the
-user would still retain any input methods that they enabled before the first
-sync.
-
-## Design
-
-### Preferences
-
-We kept the original unsyncable preferences, which describe the local settings:
-
-* **settings.language.preferred_languages:** enabled language IDs
- (e.g., "en-US,fr,ko")
-* **settings.language.preload_engines:** preloaded (active) component
- input method IDs (e.g., "pinyin,mozc")
-* **settings.language.enabled_extension_imes:** enabled extension IME
- IDs
-
-We added three syncable preferences:
-
-* **settings.language.preferred_languages_syncable**
-* **settings.language.preload_engines_syncable**
-* **settings.language.enabled_extension_imes_syncable**
-
-During the first sync, the values of these preferences are merged with the local
-preferences above. After that, these preferences are only used to keep track of
-the user's latest settings. They never affect the settings on a device that has
-already synced. In other words, they can be thought of as one-way, syncing from
-the device to the sync server -- except during the first sync.
-
-A fourth preference was added to indicate whether the initial merging should
-happen: **settings.language.merge_input_methods**. This is set to true during
-OOBE. After the first sync, this is always false. This ensures that devices set
-up before M41 won't have their input settings changed.
-
-### First Sync
-
-[chromeos::input_method::InputMethodSyncer](https://cs.chromium.org/chromium/src/chrome/browser/chromeos/input_method/input_method_syncer.h)
-was created to handle sync logic for input methods. After the first ever sync,
-MergeSyncedPrefs adds the IME settings from the syncable prefs to the local
-prefs using the following algorithm for each pref:
-
-1. Append unique tokens from the syncable pref to the local pref.
-2. Set the syncable pref equal to the merged list.\*
-3. Remove tokens corresponding to values not available on this system.
-4. Set the local pref equal to this validated list.
-
-MergeSyncedPrefs also sets merge_input_methods to false, ensuring that it won't
-be called again.
-
-Notice that this solution doesn't assume the first sync happens right after
-OOBE. For cases where users have set encryption passphrases, they could easily
-add languages and input methods before enabling sync, so we support arbitrary
-lists instead of single values during the merge.
-
-### Updates
-
-When a local input method pref changes, InputMethodSyncer updates the syncable
-prefs to correspond to the local pref values.\* We update all three prefs at the
-same time to ensure the settings are consistent -- since these will be the
-values used the next time the user completes OOBE, the languages should
-correspond to the input methods.
-
-\* For preload_engines_syncable (input method IDs), we transform the list to use
-legacy component IDs so the preference can sync between Chrome OS and Chromium
-OS. During first sync, we convert this back to locally valid component IDs. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md
deleted file mode 100644
index 54a957a94ce..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: touch-firmware-updater
-title: Touch Firmware Updater
----
-
-[TOC]
-
-## Introduction
-
-Touchpads and touchscreens are among the most sensitive input devices integrated
-into computing systems today. The complexity of touch controllers has increased
-so that touch devices can be thought of as small embedded devices, with many
-features and performance determined by upgradeable firmware. Throughout
-development and the lifespan of a Chromebook, firmware updates of the touch
-device may occur. This page provides an overview of how Chrome OS handles touch
-device firmware updates.
-
-## Bus overview
-
-Current generation Chromebooks use I2C (and the SMBus variant) as the underlying
-communication bus between the host system (where Chrome OS and the kernel driver
-run) and the touch device controller (where the firmware runs). I2C was chosen
-because it provides a good balance between power draw, complexity, and
-bandwidth. The bus is also well-supported on ARM based platforms. In addition to
-I2C for data, an interrupt line is routed from the trackpad to the host to
-signal the kernel driver when it is time to query for new data from the device
-during operation (and optionally signal state transitions during a firmware
-update).
-
-## Kernel driver
-
-Most of the actual work of moving of firmware bits across the bus is done by the
-vendor-specific kernel driver or user-space utility. The driver or utility sends
-commands to the device to ready it to accept a new firmware payload. Some
-trackpad vendors refer to this mode as a “bootloader” mode. The bootloader is a
-last resort in case the more complex operational mode firmware is corrupted. A
-trackpad without a valid firmware needs to at least be able to accept a working
-payload via an update.
-
-The driver or utility sends the firmware binary over the i2c bus to the device’s
-bootloader, using the vendor-specific protocol.
-
-While the protocol from the kernel driver to the touch device for the firmware
-update is vendor-specific, [Chrome OS requires that the kernel driver use the
-request_firmware hotplug
-interface](https://www.kernel.org/doc/Documentation/firmware_class/README) to
-expose the same interface to userspace:
-
-At a high level, request_firmware allows the kernel driver to access a file for
-read operations at /lib/firmware in the root file system.
-
-The device driver must support the following sysfs attributes for version
-management:
-
-* **firmware_version** or **fw_version** - identifies the current
- version number of the firmware loaded on the device, in the form
- &lt;*major_version*&gt;.&lt;*minor_version*&gt;
-* **product_id** or **hw_version** - a unique string that can identify
- the hardware version in the case that the same driver may be used by
- multiple device variants.
-
-For example, a Chromebook Pixel has two Atmel mXT devices. The hw_version of the
-mXT224SL trackpad is 130.1. The hw_version of the mXT1664S touchscreen is 162.0.
-
-Finally, one sysfs attribute must be provided to trigger a firmware update
-programmatically from user space:
-
-* **update_fw** - should be writable by the root user. It should also
- be able to accept a different filename in case more than one device
- uses the driver on the system, and therefore, two different
- firmwares are meant for different targets.
-
-The following example shows how the two Pixel touch devices share the same
-driver, but appear as separate instances in sysfs :
-
-echo “maxtouch-tp.fw” &gt; /sys/bus/i2c/devices/1-004b/update_fw echo
-“maxtouch-ts.fw” &gt; /sys/bus/i2c/devices/2-004a/update_fw
-
-For examples, see the
-[cypress](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/refs/heads/chromeos-3.4/drivers/input/mouse/cyapa.c)
-and
-[atmel](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/refs/heads/chromeos-3.4/drivers/input/touchscreen/atmel_mxt_ts.c)
-drivers in the chromeos-kernel tree.
-
-**Userspace updater**
-
-If the vendor uses I2C-HID kernel driver, they may use a user-space utility to
-update the device.
-
-## Userspace organization and scripts
-
-The touch firmware updater consists of a set of scripts and firmware files. The
-firmware update script is available in a [Chromium OS source
-tree](http://git.chromium.org/gitweb/?p=chromiumos/platform/touch_updater.git;a=tree;f=scripts).
-
-The files used by the touch firmware updater (as seen on the filesystem of a
-target system) are organized as follows:
-
-/opt/google/touch/scripts/chromeos-touch-firmware-update.sh
-/opt/google/touch/firmware/CYTRA-116002-00_2.9.bin
-/lib/firmware/cyapa.bin-&gt;/opt/google/touchpad/firmware/CYTRA-116002-00_2.9.bin
-
-Note that `/lib/firmware/cyapa.bin` is a symlink that links to the current
-latest version of firmware elsewhere in the rootfs.
-
-On a production Chrome OS system, the rootfs is protected as a part of Chrome OS
-verified boot, so neither the scripts nor the firmware binary can be changed by
-the user. Each version of Chrome OS ships with a firmware binary for every touch
-device in the system installed in the rootfs. Following an auto-update, on boot
-the touch firmware update script probes the device's current firmware version
-and may trigger a firmware update if the current version is not compatible.
-
-The name of the firmware binary is used to identify the version of the firmware
-binary by the chromeos-touch-firmwareupdate.sh. It should be in the format :
-&lt;*product_id*&gt;_&lt;*firmware_version*&gt;.bin
-
-In the above example, the product_id is CYTRA-116002-00, and the version is 2.9.
-
-## Firmware update sequence
-
-The touch firmware update runs after the kernel device driver has successfully
-probed the touch device.
-
-The chromeos-touch-update upstart job runs before the Chrome OS UI has started.
-It blocks the UI job from starting until a firmware version check and potential
-update are completed. The UI job is blocked because the touchpad or touchscreen
-are nonresponsive for the duration of the update, and during this process a user
-should not be able to interact with the device.
-
-For details, see the
-[chromeos-touch-update.conf](http://git.chromium.org/gitweb/?p=chromiumos/platform/touch_updater.git;a=blob;f=scripts/chromeos-touch-update.conf;hb=HEAD)
-job.
-
-The updater also runs as a part of the recovery process from a recovery image
-booted via USB.
-
-## Error recovery
-
-A typical update requires between 8 and 18 seconds. The firmware update runs
-before the Chrome OS UI starts (the user sees the splash screen) to prevent the
-user from inadvertently causing the update to fail.
-
-However, it is still possible that a firmware update might not complete properly
-if the system shuts down due to low battery. In this case, the operational mode
-firmware will be corrupted. The next time the device boots, it will not be
-possible to probe the device and have a functional touch device.
-
-For error recovery, it is a requirement for the kernel device driver to
-recognize this condition and probe successfully into a bootloader-only mode.
-From this state, the driver must be able to perform a forced update to a known
-good firmware. This means the update_fw sysfs property must exist and perform
-the same task in this error condition as during a normal firmware update. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/upstream-first/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/upstream-first/index.md
deleted file mode 100644
index 2f0a71f542b..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/upstream-first/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: upstream-first
-title: Upstream First
----
-
-## Abstract
-
-This document outlines a process for managing the flow of kernel source patches
-between Chromium OS and hardware partners.
-
-## Goals
-
-Our goal with the "Upstream First" policy is to eliminate kernel version
-fragmentation.
-
-We know that hardware partners support other devices as well as Chromium
-OS-based devices. So rather than having partners target multiple kernels for
-multiple devices, we'd like to encourage them to target one kernel: the upstream
-kernel.
-
-By having everyone target a single kernel, we hope to avoid duplication of
-effort and get everyone (our hardware partners, their partners, and the upstream
-community) working together on improving a single set of patches. By working
-together, we can build a better kernel and avoid later having to rework changes
-that are incompatible with the upstream kernel.
-
-## Accepting patches
-
-A device driver patch must be accepted upstream before it can be accepted into
-the Chromium OS kernel. Ideally, the patch will be in Linus Torvalds's kernel
-tree before it is accepted into the Chromium OS kernel. However, other options
-are also available.
-
-The following list shows options for getting a patch accepted into the Chromium
-OS kernel. We encourage all partners to strive to attain option 1.
-
-**Patch options, ordered from high to low preference**
-
-1. The patch is accepted into Linus Torvalds's upstream tree.
-2. The patch is accepted into the subsystem maintainer tree (such as
- Dave Miller's netdev tree).
-3. The patch is accepted into the the device maintainer tree (such as
- samsung or msm) and a pull request has been sent to Linus Torvalds.
-
-After the patch is accepted into an upstream tree, Google will cherry-pick it
-into the Chromium OS kernel. If the patch requires backport work, Google will
-work with the vendor to do the backport.
-
-Exemptions are granted on a case-by-case basis. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/user-accounts-and-management/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/user-accounts-and-management/index.md
deleted file mode 100644
index 2b2e0429723..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/user-accounts-and-management/index.md
+++ /dev/null
@@ -1,219 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: user-accounts-and-management
-title: User Accounts and Management
----
-
-[TOC]
-
-## Abstract
-
-* End users must already have, or be willing to create, an account
- that is used to store preferences and settings. Along with Google
- Accounts, we want to support other authentication systems,
- particularly OpenID.
-* Storing preferences and settings with the account in the cloud
- allows end users to maintain a consistent user experience while
- switching among Chromium OS devices.
-* Chromium OS devices are designed to be easily shared among users,
- while still providing a high level of security for the owner of the
- device and other authorized users.
-* Owners of Chromium OS devices can choose to manage a list of users
- who are allowed to log in to a device, providing a higher level of
- security for the device.
-* Chromium OS also provides a Guest mode, allowing anyone to browse
- with the device without preserving any data, preferences, or other
- information after the session ends. The owner of the device can
- choose to disable this mode.
-
-## Objective
-
-For V1, at least, we are asserting the following about logging in to Chromium OS
-devices:
-
-1. We want the device to be as shareable as a Google Doc.
-2. The first time a given user logs into the device, we require
- connectivity for the initial authentication.
-3. We believe users want to control who can log in to their machine.
-4. We consider traditional user account management to be onerous.
-
-Our goal is to enable use cases like the following:
-> I have a Chromium OS device that I use and have configured to work on my home
-> WiFi network, which has some Network Attached Storage (a NAS). A friend asks
-> if she can borrow my device to do some work. I log out and hand her the
-> device. She logs in. The device should remain associated with my WiFi network,
-> though her preferences (address bar state, installed apps, privacy settings,
-> etc) should sync down and be applied for her account. As a byproduct, my
-> friend has access to my NAS. That's okay.
-
-without also enabling attacks like this:
-> I have a Chromium OS device that I use and have configured to work on my home
-> WiFi network, which has a NAS. Someone steals my device. The thief has a
-> Google Account. He logs in, and not only does he have a local account on my
-> machine, which removes a significant obstacle to compromise, but he also has
-> access to my NAS and everything else on my home network.
-
-At a high level, what we're saying is that, for certain settings, the right
-thing to do is have a per-device **system setting** override a **user
-preference**—but that some per-device settings could be sensitive. This insight
-dictates several requirements:
-
-* For users who log in to the system, we must come up with a sane way
- to overlay user preferences on system settings.
-* There must be some mechanism to allow users to manage who can log in
- to the device, including allowing anyone (who has a Google Account)
- to log in to the device.
-* We must not drive users toward having a single, shared account;
- common multi-user use cases should fit well within our design.
-
-It's worth noting that we also have some thoughts about supporting users without
-a Google Account; see the [Login
-document](/chromium-os/chromiumos-design-docs/login), and the discussion of
-"Guest" mode later in this document.
-
-## Design highlights
-
-We've shown above that we must, at least, deal with the wrinkle where we need to
-access some available, but secured, wireless network to log a new user in. After
-that, ideally, we would like to apply all of a user's cloud-cached preferences
-locally so that their computing environment can follow them seamlessly from
-device to device. In addition to the issue of wireless networks, consider also
-the case of keyboard layouts:
-> Antoine is French and has set up his Chromium OS device with a US keyboard to
-> have some key mappings that will handle accents nicely for him. When he goes
-> to France and logs into his sister's Chromium OS device with a French
-> keyboard, it doesn't make sense for his mapping from home to apply. In fact,
-> it should fail, as the machine has a different keyboard. When I log in to
-> Antoine's machine, though, my default US keyboard mapping can be applied, and
-> should be.
-
-The specifics of trying to apply a given user preference and having it fail vary
-depending on the preference in question. We define **system settings** as any
-setting we need to be able to apply before a user has logged in.
-Currently, we break down **system settings** and **user preferences** as
-follows:
-
-<table>
-<tr>
-System Settings User Preferences </tr>
-<tr>
-<td>Locale</td>
-<td> Wifi networks</td>
-<td> Described in this doc:</td>
-
-<td>Owner</td>
-<td> Whitelist</td>
-<td> Guest mode</td>
-
-<td>Proxies</td>
-
-<td>Bookmarks</td>
-<td> New Tab page</td>
-<td> Preferences (browser settings)</td>
-<td> Apps</td>
-
-<td>Extensions</td>
-<td> Themes</td>
-<td> Pinned tabs</td>
-<td> Notifications</td>
-<td> Printers list</td>
-<td>Thumbnails</td>
-<td> Autofill data</td>
-
-</tr>
-</table>
-
-For at least the "current WiFi" setting, we need a user to have done the
-configuration first. In other cases, we will have sensible defaults that we will
-use to initially configure the owner's account.
-These features dictate several requirements:
-
-1. Settings deemed system settings need to be accessible to all
- authenticated users, but not to just anyone who pulls the hard
- drive.
-2. User preferences should be stored so that only the user in question
- can access them.
-3. The client side of the sync engine needs to be able to distinguish
- system settings from user preferences, so that it can store them
- separately.
-
-### Syncing mechanism
-
-Out of scope for this document. All that matters from our point of view is that
-the client side can distinguish between system settings and user preferences.
-
-### Caching and applying config info
-
-The Linux system services that rely on these settings and preferences access
-them in a variety of ways, though mostly through configuration files. We must
-design a system that can use the preferences and settings we sync down from the
-cloud and apply them at the appropriate time. This is to-be-designed, but must
-have the following characteristics:
-
-1. User preferences will be synced down by a Chromium-based browser and
- cached in the user's data partition, which is encrypted by default.
- The system should be capable of applying these as the user's session
- is being brought up.
-2. System settings must be usable during the boot process; otherwise,
- we won't be able to connect to a network for online login. We would
- like, however, to at least protect these settings while the device
- is off.
-3. The system settings should be writable only by the Owner; we can't
- cryptographically enforce this, but we can at least use some system
- daemon to enforce it.
-4. We need to enable configuration to be federated; multiple sources of
- config data (settings and prefs) need to be sensibly overlaid on one
- another. The precise semantics depend on the setting in question.
-
-### Keeping track of the Owner and the whitelist
-
-The point of keeping track of who the Owner is and who's on the whitelist is to
-keep the attacker from getting an account on the device. If they've already
-managed to root the box, or to exercise a kernel vuln, they can work around
-Ownership and whitelisting anyway (replace the session manager or the chrome
-binary, or something else). So, designing a mechanism that is robust against
-root seems ... futile (we're working hard to take root away from all userland
-processes regardless, in our [system hardening
-efforts](/chromium-os/chromiumos-design-docs/system-hardening)).
-
-If the owner has opted out of whitelisting, we allow every user with a valid
-Google Account to log in.
-
-### Guest mode
-
-We are considering logically extending the notion of "Incognito" mode found in
-Chromium-based browsers to Chromium OS-based devices: a stateless session that
-requires no login and that caches data only until the session is over. *No*
-state would sync down from the cloud, and *no* state from this session would
-persist past termination. The option to start such a session will be on by
-default, though the Owner can disable it when she is logged in. We create a
-tmpfs on which to store the Chromium browser's session data, and open up an
-instance of the browser in incognito mode for the user. Once that instance is
-exited, the session is over and we return to the login screen.
-By default, a Chromium OS device will be **opted out of whitelisting** and
-**opted-in to Guest mode**. We will provide UI that allows a logged-in Owner to
-explicitly add users, and provide the Owner an option at that time to opt-in to
-whitelisting and Guest mode.
-
-### Managing write access to system settings
-
-Only the Owner should be able to change system settings. We don't want random
-users able to add to the whitelist or enable guest mode inadvertently. As a
-root/kernel exploit means the game is over anyway, it's not worth trying to
-design anything that is robust against that kind of compromise; the attacker
-could just work around our security measures. So, we will have a settings
-daemon, settingsd, that manages write access to the system settings.
-When the first user logs in, we generate an RSA keypair and store the private
-half in his encrypted home directory, exporting the public half via settingsd.
-All requests to update the signed settings store (which includes the whitelist)
-must contain a valid signature generated with the owner's private key. When
-settingsd receives a request for the value of a system setting, it returns the
-signature over that value along with the requested data. The requesting process
-then verifies this signature, ensuring that only values which are correctly
-signed by the Owner are respected. Of course, a root-level exploit could replace
-the exported Owner public key. As stated above, though, the game is already over
-in this case. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/userland-boot/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/userland-boot/index.md
deleted file mode 100644
index 973a91eb74a..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/userland-boot/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: userland-boot
-title: Userland Boot in Chrome OS
----
-
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/cryptospecs.webp.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/cryptospecs.webp.sha1
deleted file mode 100644
index 0ab09f97e0c..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/cryptospecs.webp.sha1
+++ /dev/null
@@ -1 +0,0 @@
-64392c17e208c4082a8188684652a04a9a44d66d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/index.md
deleted file mode 100644
index 6b1c8e72a37..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-crypto/index.md
+++ /dev/null
@@ -1,440 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: verified-boot-crypto
-title: Firmware Verified Boot Crypto Specification
----
-
-[TOC]
-
-### Abstract
-
-This document describes the cryptographic primitives and building blocks used
-for implementing verified boot in the firmware. The document is primarily
-targeted at Google Chrome OS-based devices running Google-signed firmware and
-software. Chromium OS devices may use similar verified boot schemes with their
-own (non-Google-signed) chain of trust. We want to emphasize this does not
-prevent devices based on the open source Chromium OS project from having their
-own firmware. The goal here is to assure customers of Google Chrome OS devices
-that they are actually running Google Chrome OS.
-
-### Design principles and pitfalls
-
-* Since we are in firmware land, the cost of changing the architecture
- after an implementation is high! Cost varies from "unfixable" for
- the boot stub to "need a firmware update" for the writable firmware
- and the algorithm for verifying the kernel.
- * Choose a conservative and simple design.
- * Have the design reviewed by experts. (Review first, implement
- later.)
-* Security doesn't come for free. We want to minimize the performance
- overhead as much as possible.
- * In the context of this document, the main performance concern is
- minimizing time to boot, or more specifically, the time taken to
- pass control to a trusted Chrome OS kernel.
-* Use well understood cryptographic building blocks instead of
- designing new ones.
- * Cryptography is hard to understand, even harder to get right.
- * Use well known and studied crypto primitives (RSA, SHA, AES,
- etc.) and protocols (public-key signatures).
-
-### Background
-
-The firmware is the lowest level of software that runs on a system. In Chrome OS
-devices, the firmware is responsible for initializing the main application
-processor along with RAM, embedded controllers, chipsets, etc. In certain
-architectures, e.g. ARM, a separate modem processor is responsible for
-initializing the main processor. Parts of the firmware are *read-only* (at the
-lower layers). This code is baked into the firmware during production and can't
-be changed. The rest of the firmware is field upgradable. The proposed
-mechanisms for such updates are described in a separate document. At the
-boundary of *read-only* to *read-write* firmware, the verified boot mechanism
-(firmware-land) kicks in. It is responsible for verifying that the next piece of
-code is signed by Google for Google Chrome OS devices. The goal here is to
-provide a boot path to end users which provides assurancesthat they are running
-known good code.
-
-**Important note:** To reemphasize the point made in the [Verified
-Boot](http://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot)
-design document, we are **not** *preventing* users from running *any* operating
-system they please, only to provide a mechanism that guarantees that a Chrome OS
-device is running the authentic Google Chrome OS.
-
-## **How cryptographic signature verification works**
-
-This section presents a small primer on how signature verification is designed
-to work in our context. We use public-key cryptography: each key is actually a
-keypair with public and private key components. Data encrypted by the private
-key can be decrypted by the public key and vice versa. In all cases, the private
-key component is known only to Google. The public key is used by the firmware
-for performing the verification. A simple implementation would be for Google to
-encrypt an entire r/w firmware component with the private key, and for the
-firmware to use the corresponding pre-baked public key to decrypt the firmware
-and continue execution (if decryption is successful). However, public-key
-cryptography is sloooow, and moreover, we are not interested in the
-confidentiality of the firmware component, only that any code we execute in the
-verified boot path is authenticated. Therefore, we use the concept of
-cryptographic signatures. Public-key signatures combine message digests (such as
-SHA-1) with public-key cryptography.
-
-A message digest of a message *m* maps the message to a fixed size hash value
-*H(m)*. A cryptographic message digest has two essential properties:
-
-* Collision resistance: Two different messages are highly unlikely to
- map to the same hash value.
-* Irreversibility: Given a hash value, it's computationally infeasible
- to generate a message *m* which hashes to that value.
-
-Here are the steps for firmware verification:
-
-1. For a firmware component blob *F*, Google generates a signature
- *S(F)* = *RSA_privatekey(H(F))*, where *H* is the message digest
- function.
-2. The firmware verification routine takes *F* and *S(F)* as input,
- computes *H(F)* and verifies that *H(F)* == *RSA_publickey(S(F)).*
-
-The security of the above scheme depends on two key factors:
-
-* The firmware verification routine uses the *correct* public key on
- the attached signature to get the expected hash value.
-* Only Google can generate a signature that successfully verifies
- using the "correct" public key.
-
-We ensure that the correct public key is used by putting the public key in the
-read only part of the firmware. It doesn't matter if it can be read by an
-attacker, since it only allows for verifying an existing signature. We ensure
-that the signature is generated by Google by keeping the private key known only
-to Google, so only Google can generate a valid signature on a blob of data.
-
-Here's a table listing various hashing and signature verification algorithms,
-including their speed as measured by invoking "openssl speed" on a typical
-netbook.
-<table>
-<tr>
-<td><b>Algorithm</b></td>
-<td><b>Speed</b></td>
-<td><b>Note</b></td>
-</tr>
-<tr>
-<td>RSA-1024</td>
-<td>0.4ms/verification</td>
-<td>NIST recommends not to be used after 2010</td>
-</tr>
-<tr>
-<td>RSA-2048</td>
-<td>1.28ms/verification</td>
-<td>NIST recommended for use after 2010</td>
-</tr>
-<tr>
-<td>RSA-4096</td>
-<td>4.5ms/verification</td>
-<td>NIST recommended for use after 2010</td>
-</tr>
-<tr>
-<td>MD5</td>
-<td>256MB/s\*</td>
-<td>Considered Unsafe</td>
-</tr>
-<tr>
-<td>SHA-1</td>
-<td>111MB/s\*</td>
-<td>Recent attacks suggest its collision resistance is lesser than previously thought (80-bits)</td>
-</tr>
-<tr>
-<td>SHA-256</td>
-<td>26MB/s\*</td>
-<td>NIST recommended for use after 2010</td>
-</tr>
-<tr>
-<td>SHA-512</td>
-<td>27MB/s\*</td>
-</tr>
-</table>
-\* - 8192 byte blocks.
-
-### Root keys and signing keys
-
-Since signature verification comes with an additional overhead, we can't simply
-choose to use the strongest available verification algorithm for the whole
-verified boot process. However, we need to start with a strong enough algorithm
-to protect Chrome OS devices for their expected lifetime. For long-term use,
-NIST recommends using *at least* [RSA-2048 and
-SHA-256](http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57_part1_rev3_general.pdf).
-Therefore, we plan on using a combination of a stronger root key and weaker
-signing keys. We will use a strongest available algorithm (within practical
-speed constraints) to sign an initial key. Subsequent stages of the verified
-boot will use the weaker (but faster) algorithms for verification.
-
-If one of the weaker algorithms or signing keys used for verification of these
-subsequent stages is cracked/broken, a new firmware or software update can be
-issued that uses a different signing key and/or a stronger algorithm.
-
-#### **Preventing rollback attacks**
-
-To prevent rollback attacks, where an attacker may try to to update a Google
-Chrome OS device with an older signed firmware that has a known vulnerability,
-each signing key has a strictly increasing associated **Key Version#**. The
-read-only firmware writes the highest **Key Version#** so far into an NVRAM
-location, in the TPM chip. This NVRAM location is lockable, such that only the
-read-only firmware can write to it, and can't be overwritten by any other
-firmware component or the operating system. During the verified boot process,
-the read-only firmware refuses to pass control to a signed firmware block that
-uses a signing key with an index smaller than the highest seen so far. In
-addition, since we have two firmware copies, this index can be updated whenever
-min(Key#A, Key#B) changes. This allows the device to survive a failed firmware
-update. On successful boot with the new firmware, the previous copy of the
-firmware is overwritten by the new one, the highest signing key index is
-updated, and any further rollbacks are prevented.
-
-In addition to the **Key Version#** associated with each key, each firmware
-update has an associated **Firmware Version#**. The R/O firmware also keeps
-track of this in a non-volatile location similar to the Key Version# to prevent
-rollbacks to an older R/W firmware. Note that these two numbers serve different
-purposes:
-
-* Key Version# prevents key rollbacks (use of an older invalidated
- signing key that might have been compromised to sign a firmware)
-* Firmware Version# prevents firmware rollbacks (use of an older
- signed firmware update that might have known vulnerabilities)
-
-#### **Speed and bottleneck considerations**
-
-Although public key signature verification is an expensive operation, we expect
-the main bottleneck to be hash computation of blocks of data that need to be
-verified. In addition, verification will likely happen just a few times for each
-final hash value that is computed. Given these tradeoffs, it's likely that we'll
-still be able to use the stronger verification algorithm (for example, RSA-2048
-below) once we switch to using the signing key for verification, but we'll need
-to switch to a weaker hashing algorithm (SHA-1), that is, start with
-RSA-4096+SHA-512, then switch to RSA-2048+SHA-1. This tradeoff can be revisited
-and analyzed in more detail once we have some hard numbers from an actual
-verified boot implementation.
-
-### Putting it all together: Crypto Architecture
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-crypto/cryptospecs.webp">](/chromium-os/chromiumos-design-docs/verified-boot-crypto/cryptospecs.webp)
-
-For **Header H:**
-
-* **Length**, is a fixed-width field and equals the length of H
-* **Algorithm** is a fixed-width field integer that specifies the key
- size and hashing algorithm to use for verifying signatures using the
- signing key.
-* **Signing Key** is the signing key used for the rest of the
- firmware.
-* **Key Version#** is the rollback index associated with the **Signing
- Key**
-* **Crypto Hash** is a fixed-width field that contains the
- cryptographic hash of the rest of the header **H(Len || Algorithm ||
- Signing Key || Key Version#).**
-
-Signature **S_root = RSA_Sign(Root Key, H)**
-
-The signature for the R/W firmware is split into two:
-
-* Signature **S_signing#1** = **RSA_Sign**(**Signing Key**, **Firmware
- Version# | Len | Preamble**)
-* Signature **S_signing#2** = **RSA_Sign**(**Signing Key**, **R/W
- Firmware Data**).
-
-This signature helps in verifying the length field and the Firmware rollback
-early in the verification process.
-For rollback protection, we have a pair of indices: the **Key Version# (K#)**
-and the **Firmware Version# (F#)**. K# is updated whenever the signing key is
-changed—either if it's past its lifetime (*Y* months) or if it has been
-compromised. F# is incremented with each update. Logically, the combination of
-K# and F# uniquely identifies the version of an update. The update process will
-**refuse to update if either of the following conditions is TRUE**:
-
-1. K# == stored K#, but F# &lt; stored F#
-2. K# &lt; stored K#
-
-Having separate key version and firmware version rollback prevention indices
-allows for generating new firmware updates without the need to generate a new
-signing key each time (which in turn requires getting the root key out of secure
-storage). This way, firmware updates are protected against rollbacks even if the
-signing key stays the same.
-
-The steps performed by the read-only firmware are as follows:
-
-1. Verify the signing key signature is valid
- - If RSA_Verify(**Root Key**, **H**) fails, Go to **Step 7** (Failure).
-2. Verify that this is not a **key rollback**
- - If K# &lt; Stored K#, go to **Step 7** (Failure).
- - else, Stored K# = K#, lock Stored Key# to prevent write access
-3. Verify that this is not a **firmware rollback**
- **-** If F# &lt; Stored F#, go to **Step 7** (Failure).
- - else, Stored F# = F#, lock Stored F# to prevent write access
-4. Determine signing key algorithm to use from "Algorithm." For now,
- let's assume we decide to go with RSA-1024 and SHA-1.
-5. From here on, the rest of the verification is performed using the
- signing key and algorithm
- - For example, To verify a firmware blob F, do RSA_Verify(**Signing Key**,
- **F**). If NOT, Go to **Step 7.**
-6. Success - Continue with **kernel level verification**
-7. Failure -If this is firmware-A, repeat above steps with firmware-B.
- If firmware-B is bad, go to recovery!!
-
-Note that, for both the root key and signing key, only the public part of the
-key is exposed. This ensures that only Google can generate S_root and S_signing.
-
-### **Kernel-level verification**
-
-Once the R/W firmware has been verified, the next step is for the R/W firmware
-to verify the kernel before passing control to it. There are a few possible
-options here:
-
-1. Use a different signing key just for kernel signing. This key must
- be verified by the R/W firmware signing key.
-2. Use the R/W firmware signing key for verifying the kernel.
-
-The main disadvantage of option 1 is the extra verification step required for
-verifying the kernel signing key. In addition, a separate rollback key index
-must stored for the kernel signing key.
-
-The main disadvantage of option 2is that now any kernel update must be
-accompanied by a firmware update with a new signing key (for preventing
-rollback).
-
-As a firmware update is much more time consuming and disruptive than a kernel
-update, we chose option 1 (use a different signing key just for kernel signing).
-
-In addition, the kernel is stored on the disk and it needs to be retrieved by
-parsing the partition table. Currently, there is no cryptographic verification
-of the partition table. However, the firmware code does a strict checking of the
-partition table (e.g. ensuring there are no overlapping partitions) and outright
-rejects partition tables that do not look right.
-
-Note also that since this happens in the R/W firmware, the verification
-mechanism can change over time and with autoupdates.
-
-### Lifetime of the root key
-
-Since the root key is baked into the read-only firmware at manufacture, it can't
-be changed once a Chrome OS device leaves the factory. Since any update to this
-key requires changes during manufacture, these will be changed once every four
-years. Since the root keys have a much larger lifetime than the signing keys,
-they will be of higher strength (4096 bit RSA keys or higher). The signing key
-to use for pushing an update to a device can be determined via the SKU. Newer
-SKUs will use the newer root key chain of trust.
-
-### What crypto implementations need to be a part of the R/O firmware
-
-Ideally, due to firmware size limitations, goals for minimal complexity, and the
-inability to update in the field, we'd like to limit the functionality
-implemented in the the read-only firmware to the bare essentials.
-
-At the very least, the read-only firmware needs to implement the following:
-
-1. RSA Signature Verification (for combinations of various 1024-8192
- bit key sizes and SHA-1/256/512 message digest algorithms)
-2. SHA-1/256/512 Hashing
-3. A way to write and lock a portion of the NVRAM such that it can't be
- written to by any other component
-
-Items 1 and 2 are required to verify the signing key. Item 3 is required to
-[prevent rollback
-attacks](https://docs.google.com/a/google.com/Doc?docid=0AWwzXTHj7UwzZGhtOHZwNHJfMTNnaHc1cHNmNA&hl=en#Preventing_Rollback_Attacks_32).
-
-The weaker (relatively) crypto algorithms used by the signing keys **may** be
-implemented in the R/W firmware. However, there are risks to consider here:
-
-1. The algorithm implementations on the R/W firmware also needs to be
- verified by the R/O firmware, a task that results in additional
- overhead.
-2. Additional complexity is required in the R/O firmware for memory
- mapping these algorithms for use by the rest of the firmware.
-
-To avoid the additional complexity involved in having the algorithm
-implementations in the R/W firmware, we currently plan on having the R/O
-firmware implement all of SHA-1/256/512 and RSA-1024/2048/4096/8192. Although
-R/O firmware size may be a constraint, the variants within each class of
-algorithms (SHA-256 and SHA-512, for example) are similar, and there should be
-some opportunity for code reuse between them.
-
-### Other considerations
-
-#### What key size is enough for the root key and signing key?
-
-NIST
-[recommends](http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57_part1_rev3_general.pdf)
-the use of RSA 2048/SHA-256 or higher as the signature algorithm for use after
-12/31/2010. Our plan is to use a 8192-bit RSA key with SHA-512 for the root key
-signatures.
-
-The security of RSA derives from the computational difficulty of factoring very
-large numbers into its prime factors. The best known current algorithm for
-factoring large numbers is the Number Field Sieve (NFS). The runtime of NFS
-scales as e*c* *n*^1/3 (log2 *n*)^2/3, where *n* is the size of the number in
-bits and *c* is typically 1.5-2.
-
-For the root key, we plan to use a 8192-bit RSA key. Note that, based on the
-runtime scaling of the Number Field Sieve, it takes at least 1.429206 x 1024
-more computational effort to factor a 4096-bit number than a 1024-bit number. As
-a reference, the general-purpose factoring record is for the 664-bit RSA200
-number which took the equivalent of 55 2.2GHz Opteron CPU years for the sieving
-step of NFS and an additional 3 months on an 80 2.2GHz Opteron CPU cluster for
-the matrix steps.
-
-For signing keys, we have considerable more flexibility, since the key size or
-the keys themselves can be changed with future system update. Since these keys
-will change/rotate often, we plan to use 1024-bit RSA keys which provides a good
-speed/performance trade-off.
-
-#### RSA padding
-
-RSA operations during signature operations are not directly performed on the raw
-cryptographic hashes but rather on a padded/extended version of the
-cryptographic hash. We intend to use the standard padding/extension function for
-this. There are two padding schemes specified by PKCS#1 v2.1 standard - PKCS1.5
-and PSS. Although PKCS#1 recommends phasing out PKCS1.5 (certain attacks were
-discovered against faulty implementations) in favor of PSS, PSS is more complex
-to implement. PSS requires the use of a PRNG. So if PSS padding is used, a
-crypto-grade PRNG will also need to be implemented as part of the read-only
-firmware. Currently, we plan on using PKCS1.5 padding since its implementation
-is much simpler.
-
-#### ****What is the TPM used for?****
-
-For verified boot, we do not use the TPM for performing cryptographic
-operations, since TPM chips are not necessarily crypto-accelerator devices, and
-there is no speed advantage. We use the TPM as secure non-volatile storage for
-preventing key rollback attacks. The TCG TPM standard (v1.2 rev103) includes two
-mechanisms that we may use for storing monotonically increasing integers in a
-runtime, tamper-resistant fashion:
-
-* NVRAM regions that may be locked and written to prior to TPM
- ownership assertion
-* Monotonically increasing counters
-
-We use NVRAM regions in the TPM and write the counters to that space. This area
-is only writable at firmware read-only boot time and during recovery mode.
-
-### **Functional tests and hardware qualifications**
-
-For firmware vendors, we have a suite of functional tests to test their
-implementations. This includes testing crypto blocks like RSA, SHA, as well as
-crypto primitives like signature checking.
-
-For hardware qualification tests, here are examples of tests we use:
-
-1. **Root Key Verification Test:** Provide firmware where the signing
- key cannot be verified by using the root key (S_root is invalid).
- **Expected Output:** Device should refuse to use the firmware, jump to
- Recovery.
-2. **Rollback Prevention Test:** Provide firmware where the signing
- key# is less or equal to S_high.
- **Expected Output:** Device should refuse to use old firmware, jump to
- Recovery.
-3. **Signing Key Verification Test:** Provide firmware where the
- verification of F using the signing key fails (S_signing is
- invalid).
- **Expected Output:** Device should refuse to use the firmware, jump to
- Recovery.
-
-More details can be found in the documentation for the Semi-automated Firmware
-Testing Framework ([SAFT](/for-testers/saft)). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures (1).png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures (1).png.sha1
deleted file mode 100644
index 50e68b1b9ef..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0e1731f1c5c183407748c36944402dfbf20b102d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures.png.sha1
deleted file mode 100644
index 616c6c61bf9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cd988dbb44f756d214a6f48d246241850144ab80 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/firmware.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/firmware.png.sha1
deleted file mode 100644
index 3bcc718cc30..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/firmware.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5728f478912e2c02af89d3c2a366a97c2aba8e0f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/index.md
deleted file mode 100644
index dde2a9f6ec4..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/index.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: verified-boot-data-structures
-title: Verified Boot Data Structures
----
-
-[TOC]
-
-## Introduction
-
-As the [verified boot
-library](https://chromium.googlesource.com/chromiumos/platform/vboot_reference/)
-has evolved to meet the needs of firmware, kernel boot, and security, we’ve
-discovered some parts of it can be made easier to work with. This document
-describes the refactoring of the verified boot library to address these issues.
-
-## Basic Guidelines
-
-### Structures are versioned
-
-Versioning allows readers to check for older/newer structures.
-This feature lets us add fields to the structures without necessarily breaking
-old readers and provides an upgrade path for newer readers to handle old
-structures. Versioning structures will resolve the issue where kernel and
-firmware must be updated in unison.
-Structures have a major and minor version number.
-
-* ReaderMajor != StructureMajor - fundamental change in struct; do not
- attempt to parse
-* ReaderMinor == StructureMinor - all is well
-* ReaderMinor &lt; StructureMinor - reading a newer file; fields have
- been added to the struct, but the existing reader will be able to
- ignore them and still function
-* ReaderMinor &gt; StructureMinor - reading an older file; reader
- won’t find the fields added since version StructureMinor, and should
- use default values for those fields
-
-### Key structures keep track of their own key version and algorithm
-
-While public keys generally have some internal structure, it’s not always
-apparent. We can use various sizes and algorithms for different keys, so we’ve
-defined a `**VbPublicKey**` structure that simply encapsulates the public key
-data along with its size and algorithm:
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbpublickey.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbpublickey.png)
-
-`**VbSignature**` structures are very similar, but instead of the algorithm and
-version they only remember the length of data they signed. A signature data blob
-is usually a hash that has been encrypted with a private key. The corresponding
-public key must be used to extract the original hash. In some cases we may also
-use a VbSignature structure for a nonencrypted hash.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbsignature.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbsignature.png)
-
-### The public key and signature headers know how to find their data
-
-Given a pointer to the `VbPublicKey` or `VbSignature` header, you can find the
-corresponding data, which may not be immediately following the header itself.
-This lets us put the header structs as sub-structs in the major structures
-(preambles, etc.), followed by the data, without needing to pass in data
-pointers separately.
-Functions should take header pointers rather than raw data wherever possible.
-
-### Common structures are reused
-
-Keys, signatures, and key blocks are used by firmware and kernel algorithms.
-Common code for generating and parsing is reused.
-
-## Major structures
-
-### Key block
-
-At the beginning of a firmware or kernel image is a **key block** that contains
-the subkey used to sign the rest of the data in the image. The subkey itself is
-signed by some higher key, which is presumably more secure or robust.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/keyblock.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/keyblock.png)
-
-The key block itself is either signed (by Google) or simply checksummed (for
-self-signed developer images), so only one of the two VbSignatures is used to
-validate it. The reason we have two VbSignatures in the key block header is so
-that we can build one image that can be validated in either way, which makes
-testing and development much simpler.
-This key block structure is identical for firmware and kernel images, so the
-code to create and verify it can be shared.
-
-### Firmware image
-
-A firmware image consists of a key block, a firmware **preamble**, and the
-firmware body. The key block, preamble, and body do not directly point to each
-other, so they can be read into separate blocks of memory. The firmware preamble
-is signed by the key block, and contains the signature of the firmware body plus
-another subkey which will be used to validate the kernel image.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/firmware.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/firmware.png)
-
-### Kernel image
-
-A kernel image consists of a key block, a kernel preamble, and the kernel body.
-The key block, preamble, and body do not directly point to each other, so they
-can be read into separate blocks of memory.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/kernel.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/kernel.png)
-
-## Root of trust
-
-When the device is first powered on, it begins execution from a read-only
-section of flash memory. In addition to (hopefully) secure code, that read-only
-region contains the primary root keys needed to validate all the rest of the
-signed images. The structure that locates the root keys and various other
-read-only components is the GoogleBinaryBlockHeader, or “**GBB**”.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/readonly.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/readonly.png)
-
-There are two primary keys in the GBB. The **root key** is used in the normal
-boot sequence to sign the read/write firmware, which contains subkeys to sign
-the kernel, and so forth. In recovery mode, only the read-only firmware is
-executed (because the read/write firmware may have been erased), so the kernel
-image on the removable drive is signed by the **recovery key**.
-There are a total of six separate keypairs involved in the complete boot process
-(see diagrams below):
-
-### Normal boot
-
-1. Read-only firmware looks in the GBB, finds the root key in read-only
- memory.
-2. The root key validates the read/write firmware’s keyblock, which
- contains the **firmware data key**.
-3. The firmware data key validates the firmware preamble (which
- contains the **kernel subkey**) and the read/write firmware body.
-4. The read/write firmware begins execution.
-5. The read/write firmware uses the kernel subkey to validate the
- kernel’s keyblock, which contains the **kernel data key**.
-6. The kernel data key validates the kernel preamble and the kernel
- blob.
-7. The kernel begins execution.
-8. The kernel image contains the hash of hashes, which is used to
- validate the bundle of hashes used by the block-based rootfs
- validation scheme.
-9. The filesystem driver uses the bundle of hashes to validate each
- block of the rootfs as is read off the disk.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/VerifiedBootDataStructures.png)
-
-### Recovery boot
-
-1. Read-only firmware looks in the GBB, finds the recovery key in
- read-only memory.
-2. The recovery key validates the kernel’s keyblock, which contains the
- **recovery kernel data key**. Although it serves the same purpose as
- the kernel subkey in normal boot, it uses a larger key because the
- read/write firmware is not used as an intermediate step.
-3. The recovery kernel data key validates the kernel preamble and the
- kernel blob.
-4. The kernel begins execution.
-5. The kernel image contains the hash of hashes, which is used to
- validate the bundle of hashes used by the block-based rootfs
- validation scheme.
-6. The filesystem driver uses the bundle of hashes to validate each
- block of the rootfs as it is read from the removable media.
-
-[<img alt="image"
-src="/chromium-os/chromiumos-design-docs/verified-boot-data-structures/recovery.png">](/chromium-os/chromiumos-design-docs/verified-boot-data-structures/recovery.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/kernel.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/kernel.png.sha1
deleted file mode 100644
index d24c1bf840b..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/kernel.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a385193878c4608aba1d2a1a237ce6e384553022 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/keyblock.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/keyblock.png.sha1
deleted file mode 100644
index ce17911eab0..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/keyblock.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-69b1e17fc6bb547c81d69143e3526ed098e3981c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/normal.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/normal.png.sha1
deleted file mode 100644
index 316cb5b33ba..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/normal.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4c446d7c1478eb54167852db6477f2244d78f10d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/readonly.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/readonly.png.sha1
deleted file mode 100644
index 432fc85b54e..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/readonly.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d1fc51a18cc906e7befab970eb6466ad67173421 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/recovery.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/recovery.png.sha1
deleted file mode 100644
index d3bb5fa4d7f..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/recovery.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-855665e23c4a09f8a33afdc6994d05c16051bb18 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbpublickey.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbpublickey.png.sha1
deleted file mode 100644
index 6169d347d37..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbpublickey.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5df42dbdedfcd67dbdaf7190777af007645357f3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbsignature.png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbsignature.png.sha1
deleted file mode 100644
index eefea7574f6..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot-data-structures/vbsignature.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8f34c65d7bd02f3c88f3e671f034fa7b9f0a32fe \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/diag2png.sha1 b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/diag2png.sha1
deleted file mode 100644
index ab8c7ba5fc9..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/diag2png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-42977d11082047463a5c6910208d0bee9e239066 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/index.md
deleted file mode 100644
index f527fc5a155..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verified-boot/index.md
+++ /dev/null
@@ -1,382 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: verified-boot
-title: Verified Boot
----
-
-[TOC]
-
-## Abstract
-
-* The Chromium OS team is implementing a verified boot solution that
- strives to ensure that users feel secure when logging into a
- Chromium OS device. Verified boot starts with a read-only portion of
- firmware, which only executes the next chunk of boot code after
- verification.
-* Verified boot strives to ensure that all executed code comes from
- the Chromium OS source tree, rather than from an attacker or
- corruption.
-* Verified boot is focused on stopping the opportunistic attacker.
- While verified boot is not expected to detect every attack, the goal
- is to be a significant deterrent which will be improved upon
- iteratively.
-* Verification during boot is performed on-the-fly to avoid delaying
- system start up. It uses stored cryptographic hashes and may be
- compatible with any trusted kernel.
-
-This document extends and expands on the [Firmware Boot and
-Recovery](/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery),
-[Verified Boot
-Crypto](/chromium-os/chromiumos-design-docs/verified-boot-crypto), and [Verified
-Boot Data
-Structures](/chromium-os/chromiumos-design-docs/verified-boot-data-structures)
-documents.
-
-Verified Boot should provide a mechanism that aids the user in detecting when
-their system is in need of recovery due to boot path changes. In particular, it
-should meet these requirements:
-
-* Detect non-volatile memory changes from expected state (rw firmware)
-* Detect file system changes relevant to system boot (kernel, init,
- modules, fs metadata, policies)
-* Support functionality upgrades in the field
-
-It is important to note that restraining the boot path to only
-Chromium-project-supplied code is not a goal. The focus is to ensure that when
-code is run that is not provided for or maintained by upstream, that the user
-will have the option to immediately reset the device to a known-good state.
-Along these lines, there is no dependence on remote attestation or other
-external authorization. Users will always own their computers.
-
-## Goals of verified boot
-
-The primary attacker in this model is an opportunistic attacker. This means that
-the attacker has accessed the system using:
-
-* a remote vector, such as the Chromium-based browser or a browser
- plugin
-* a local vector, such as booting to a USB drive and changing files
- (but **not** by replacing the write-protected firmware)
-
-If we assume attackers access the system via a remote vector and bypass all
-run-time defenses, then they will have access to modify the root partition
-(kernel, modules, browser, ...), update read-write firmware, inject code into
-SMRAM, and so on. In addition, the attacker can now access any data in the
-currently-logged-in user's account such as locally stored media and website
-cookies. The attacker may collect passwords when typed by the user into the
-Chromium-based browser or the screenlocker.
-
-An opportunistic *local* attacker will have a completely different level of
-access. Access will be achieved using a USB boot drive, or other out-of-band
-bootable material supported by the firmware. Once the system is running the
-attacker's operating system, she will be able to modify the root file system and
-encrypted user-data blobs. She won't have any visibility into the encrypted
-information but may copy it or modify it.
-
-While Chromium OS does as much as possible to guard against such remote and
-local breaches, no software system is impervious to successful attacks.
-Therefore, it is important that the attacker cannot continue to "own" a machine
-through permanent, local changes. To that end, on boot, the firmware and other
-accessible regions of the system internals are verified to be in a known good
-state. If they aren't, then the firmware recovery process will be initiated (or
-the user can request permission to proceed, which would make sense in the case
-of a development install, for example).
-
-The important factor to consider with the attackers considered above is that if
-an attacker gains access via the Chromium browser, they can presumably modify
-the Chromium browser's startup (or bookmarks or server-side settings) to
-re-attack the machine at next reboot. This is why it is important to be able to
-ensure that a safe recovery/reinstall is possible outside of what can be done by
-an attacker on the machine. (Obviously, this is no deterrent for a
-**determined** attacker willing to modify the system physically.)
-
-## Getting to the kernel safely
-
-As outlined in the Firmware Boot and Recovery document, verification will occur
-in several places. Initially, the small read-only stub code will compute a SHA-2
-hash (either with internal code or using a provided SHA-2 accelerator) of the
-read-write portion of the firmware. An RSA signature of this hash will then be
-verified using a permanently stored public key (of,
-[ideally](http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf),
-2048 bits or more).
-
-The read-write firmware is then responsible for computing hashes of any other
-non-volatile memory and the kernel that will be executed. It will contain its
-own *subkey* and a list of cryptographic hashes for the data to be verified:
-kernel, initrd, master boot record, and so on. These additional hashes will be
-signed by the subkey so that they may be updated without requiring the
-write-protected key to be used for every update. (Note, the kernel+initrd signed
-hashes may be stored with the kernel+initrd on disk to avoid needing a firmware
-update when they change.)
-
-Once we're in the kernel, we've successfully performed a verified boot.
-
-## Extending verification from the kernel on upward
-
-In general, once we're running, integrity measurements become less useful. We
-can ensure that the Chromium browser that we execute has not been tampered with,
-but we can't guarantee that the same attack that compromised it the first time
-won't compromise it a second time without updating.
-
-To ensure that an update is possible, the executables, modules, and
-configuration files that allow the system to receive updates must be authentic
-and untampered with. Getting to that point requires network access and a running
-autoupdater. Given that Chromium OS keeps a very minimal root file system, it's
-easier to just verify everything on it.
-
-While that sounds great in theory, in practice it is hard to guarantee an intact
-file system without paying the cost for upfront checks. If the read-write
-firmware were to verify the entire root partition before proceeding to boot, it
-would add at least 5 seconds to the boot-time on current netbooks. This delay is
-untenable.
-
-Instead of performing full file system verification in advance, it can be done
-on demand from a verified kernel. A transparent block device will be layered
-between the run-time system and all running processes. It will be configured
-during kernel startup using either in-kernel code changes or from a
-firmware-verified initial ramdisk image. Each block that is accessed via the
-transparent block device layer will be checked against a cryptographic hash
-which is stored in a central collection of hashes for the verifiable block
-device. This may be in a standalone partition or trailing the filesystem on the
-verifiable block device.
-
-Initially, blocks will be 4KB in size. For a root file system of roughly ~75MB,
-there will be roughly 19,200 SHA-1 hashes. On current x86 and ARM based systems,
-computing the SHA-1 hash of 4KB takes between 0.2ms and 0.5ms. There will be
-additional overhead (TBD) incurred by accessing the correct block hash and
-comparing the cryptographic digests. Once verified, blocks should live in the
-page cache above the block layer. This will mean that verification does not
-occur on every read event. To further amortize time-costs, the block hashes will
-be segmented into logical bundles of block hashes. Each bundle will be hashed.
-The subsequent list of bundle hashes will then be hashed. This layering can be
-repeated as needed to build a tree. The final, single hash will be hard coded
-into the kernel or supplied through a device interface from a trusted initial
-RAM disk.
-
-![](/chromium-os/chromiumos-design-docs/verified-boot/diag2.png)
-
-Note that SHA-1 is considered to be [unsafe after 2010 by
-NIST](http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html) for general
-use. The biggest risk here is that specific block collisions can be found and
-made such that they provide an alternate execution path. We could use any
-hashing algorithm supported by the Linux kernel in our implementation. SHA-1 is
-just a specific example.
-
-## Known weaknesses of verified boot
-
-While verified boot can ensure that the system image (i.e. firmware, kernel,
-root file system) are protected against tampering by attackers, it can't protect
-data that must inherently be modifiable by a running system. This includes user
-data, but also system-wide state such as system configuration (network, time
-zone, keyboard layout, etc.), cached data maintained by the system (VPD
-contents, metrics and crash reporting data, etc.). This state is generally kept
-on the writable stateful file system. In some cases, it is consumed by the boot
-process and may affect the behavior of the (verified) software. If an attacker
-manages to place malicious data on the stateful file system that will cause the
-verified code to "take a wrong turn", they may cause inadvertent side effects
-that may ultimately lead to the system getting exploited and thus defeating
-verified boot. The [Hardening against malicious stateful
-data](/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data)
-document discusses details and mitigations.
-
-## Mitigating potential bottlenecks
-
-Loading hashes off the same disk as the data for each block would affect
-performance during a read. Right now, the plan is to read in signed bundles of
-hashes as blocks in that bundle range are accessed. Once a bundle is loaded into
-memory, it is kept there. If we assume that we're looking at something like
-20k-hashes, then that will require around 400KB of memory. Even if the needed
-hashes grow to twice that, allocating 1MB of kernel memory doesn't seem too
-onerous. In addition, keeping the block hashes in memory will provide for easy
-linear addressing of the hashes since they will be in block-order.
-
-## Handling updates
-
-For Chromium OS, the autoupdater will update the collection of hashes specific
-to the partition it is updating. In general, the complete collection of hashes
-for a specific partition will be generated by running a lightweight utility
-directly on the filesystem image. It will walk the origin block device and emit
-an image file that contains the properly formatted hash collection. In addition,
-it will emit the SHA-1 hash of the bundle hashes. This will be the authoritative
-hash that will need to be either signed or stored in a signed/verified location,
-such as in the kernel. The resulting file can either be appended to the
-filesystem image or stored in a standalone partition (hash partition). On
-update, a direct difference of the new hash collection can be taken using bsdiff
-against the last versions. However, it may be that more efficient difference
-generation approaches may be used as long as the end result is the same.
-
-## The implementation
-
-Post-firmware verified boot will most likely be implemented as a device mapper
-target. It will provide the transparent, verifying block layer. Initially, it
-will be assumed that there will be a verified initrd that can be used to set up
-the root partition using the dm device. A simple utility tool will be written
-that will directly hash a given block device and emit a compatible binary blob
-that contains the collection of hashes. It will take the format:
-
-```
-hashblock_1 . . . hashblock_n
-hashbundle_1. . . hashbundle_m
-```
-
-This data will live either in its own partition or be appended to the verified
-partition (aligned on a block boundary). Its location, the hash algorithm used,
-and the hash of bundle hashes should be passed in as arguments to the device
-mapper setup process (either using dmsetup from an initrd or directly in the
-kernel).
-
-Living implementation documentation can be found
-[here](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/HEAD/Documentation/device-mapper/dm-verity.txt)
-and
-[here](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/HEAD/Documentation/device-mapper/dm-bht.txt).
-
-## Other issues, ideas, and notes
-
-* All verification performed after the kernel is running should be
- independent of the firmware verification. This allows for developers
- to run their own builds as well as for the boot-time verification to
- be compatible with a TCG-style boot.
-* The partition table should be validated to some extent by the
- read-write firmware, but if there are any kernel/firmware partition
- parsing bugs, we may be able to catch them with audits as well.
-* Verified Boot can play nicely with the TPM. Once a signed kernel is
- up, it can initialize the TPM's PCR registers and use those for
- measurement tracking. In particular, we have the option of using it
- (Linux-IMA style) to perform disk encryption key protection and
- possibly even other pre-login state protection where the key becomes
- available only if we've booted without modification.
-* The hash partition will be subject to replay attack unless the
- kernel version that pairs with it is included in the file and the
- kernel is upgraded when the hashes are. However, the kernel+initrd
- will suffer the same attack for the next level up. Avoiding
- replay/rollback attacks is non-trivial since the firmware can't
- guarantee the local clock is not changed. A local TPM tickstamp blob
- would need to be included in the signed hash payloads to solve the
- problem to some degree. If autoupdates were customized per-download,
- this may be possible, but at present, this is not planned.
-* Key management is of utmost importance for the key used to sign the
- read-only firmware. That key should only be used on the R/W firmware
- which should be updated much less frequently than the rest of the
- system. If possible, this key should never be exposed on a
- network-enabled machine, but that is out of scope for this design.
-* Having a fully tamper-evident root file system means that if
- desired, a manifest of service-specific public keys/certificates
- could be stored on the root partition. These keys could then be used
- to verify the authenticity and integrity any data stored on the
- stateful partition that was signed by a remote server (Google or
- another provider).
-* There is no plan to support any remote inspection of whether a
- Chromium OS installation is using a 'verified boot' or a development
- version.
-* The autoupdate process currently has a file-centric view. This means
- that it could be possible for file system layout to diverge across
- machines. If this is the case, block hashes may still be used, but a
- more file-centric view may be needed. If the updater moves towards
- file system image differencing, this design will work as is.
-
-## Attack cases
-
-This section only discusses the current threat model, but many of the attacks
-can be generalized to other attack vectors. In addition, these scenarios ignore
-all other attack mitigation techniques not included in the document above. In
-reality, various system-level and Chromium-level defenses should aid in making
-run-time attacks difficult and unreliable.
-
-*Vector*: Opportunistic local attacker with a USB stick or bootable SD card.
-*Scenario*: Attacker boots the system off of an external boot device. The
-attacker then changes files and copies the entire system.
-*Coverage*: Verified Boot will detect this tampering. Encrypted user data will
-still be protected.
-*Exposure:* None. User will need to recover their system.
-
-*Scenario*: Attacker boots the system off of an external boot device and leaves
-the system running a "fake" Chromium OS to phish user data.
-*Coverage*: Verified Boot will not impact this *unless*the user reboots the
-system before logging in.
-*Exposure:* None to complete depending on if the user reboots prior to logging
-in. If the user left the machine at the screenlocker, a fake screenlocker could
-be used in the phishing OS since it is unlikely a user will reboot before
-unlocking. This may be addressed in the future with clever authentication use
-(PCR+TPM, ?). However, a paranoid user that left their machine in an unsafe
-place may just want to reboot to be safe.
-
-*Vector*: Determined local attacker with a USB drive and a toolkit
-*Scenario*: Attacker opens the system up and enables the write-pin on the
-write-protected firmware. The attacker then boots the system off of an external
-boot device. The root file system is changed along with the formerly
-write-protected and read-write firmware.
-*Coverage*: Verified Boot will operate normally and will not detect any
-variance.
-*Exposure:* Complete; a determined attacker that will physically modify the
-machine cannot be easily stopped. They may also install hardware keyboard
-sniffers, microphones, cameras, etc.
-
-*Vector*: Chromium or a Chromium plugin
-*Scenario*: No superuser privileges are gained, but the attacker can modify
-Chromium data. The attacker changes bookmarks, starting pages, marks their pages
-as ok for popups, and disables safe browsing. In addition, cookies and stored
-passwords are harvested and posted to a remote server.
-*Coverage*: Verified Boot has no impact.
-*Exposure:* Only the initially compromised user is exposed.
-
-*Scenario*: Attacker gains superuser privileges. The attacker remounts root
-partition read-write directly. The attacker then replaces
-/usr/bin/chromeos-chrome with their own build of Chromium that includes
-malware/illegal ad revenue and password/credit card sniffing.
-*Coverage*: Verified Boot will detect after the next reboot (not after a suspend
-to RAM).
-*Exposure:* Until reboot, any user that logs in is exposed (password, cookies,
-encrypted data).
-
-*Scenario*: Attacker gains superuser privileges. The attacker remounts root
-partition read-write directly. The attacker then adds a kernel module in the
-form of a rootkit for the system to load on next reboot.
-*Coverage*: Verified Boot will detect after the next reboot.
-*Exposure:* Until reboot, any user that logs in is exposed (password, cookies,
-encrypted data).
-
-*Scenario*: Attacker gains superuser privileges. The attacker then modifies the
-encrypted file system metadata which exploits a file system bug in the kernel on
-next login.
-*Coverage*: Verified Boot has no direct impact. However, if the autoupdater runs
-before next login, the vulnerability may be patched.
-*Exposure*: On next login, the tampered with encrypted file system metadata
-attack will trigger.
-
-*Scenario*: Attacker gains superuser privileges. The attacker then replaces the
-hash-partition with an older version and replaces system image with one that has
-known vulnerabilities (which may be easier to exploit reliably than the vector
-used for attack). The attacker will then change the current user's configuration
-to auto-open an attack URL to re-exploit the system immediately after reboot. If
-the attacker can gain superuser privileges repeatedly, then it will be difficult
-for autoupdate to repair.
-*Coverage*: Verified Boot will not be able to detect hash-partition replay
-attacks easily. It may be possible to retroactively detect then by the
-autoupdater after the network is up, but an attacker will always be able to the
-system appear to just be out-of-date.
-*Exposure*: Any user that logs in is exposed across reboots.
-*Notes*: Downgrade/replay attacks of this nature will be less dangerous if
-autoupdater is able to run prior to Chromium starting, but there will most
-likely be a race between the two. It may make sense to include a version check
-early in the Chromium startup process to detect seriously out-of-date
-browsers/systems prior to their opening dangerous pages.
-
-*Exposure summary:*
-
-* Run-time attacks against unsignable data: Chromium configuration
-* Persisted attacks by defaulting Chromium to launch the attack site
- on next start
-* Logged-in user data is exposed immediately after compromise.
- * With partial signing, a Chromium replacement would result in
- cross-user exposure after reboot.
- * With full signing, other system users would be notified prior to
- exposure
-* Metadata attacks against the kernel will not be caught by signing
- per-file.
-* Downgraded manifest file attacks are difficult to detect since there
- is no current way to encoded tamperproof system time into manifest
- files.
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verify-prebuilts-using-content-hashing/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verify-prebuilts-using-content-hashing/index.md
deleted file mode 100644
index b1df6dedd38..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/verify-prebuilts-using-content-hashing/index.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: verify-prebuilts-using-content-hashing
-title: 'Design proposal: Verify prebuilts using content hashing'
----
-
-# Verify prebuilts using content hashing
-
-Proposal status: Implemented and in production
-
-Author: David James &lt;davidjames@&gt;
-
-## Summary
-
-I'd like to propose a small change to the way we verify prebuilts. This change
-is intended to ensure that developers do not need to build packages from source
-if they have not modified them locally. This should shave significant time off
-developer builds (e.g., up to 20 minutes, if the developer syncs at a busy
-time).
-
-## What needs to be changed?
-
-Right now, we only use prebuilts for builds if the SHA1 of the commit that we
-tested exactly matches the SHA1 in the remote repository. This is needed for
-correctness, as explained below in the “Why is prebuilt verification needed at
-all?” section.
-
-Unfortunately, in practice, the SHA1 of the commit we tested often differs from
-the SHA1 in the remote repository. This happens because when the commit queue
-submits a change, Gerrit adds in new metadata to the commit message, causing the
-prebuilts to become invalid.
-
-Currently, the commit queue accounts for this problem by just rebuilding any
-packages with incorrect SHA1s on the next run. This doesn’t help, though, if
-developers sync during the day, when many changes are being pushed by the commit
-queue. In that case, this problem causes developer builds to slow down
-significantly, as they need to rebuild many packages from source.
-
-## Proposed solution
-
-We should use the SHA1 of the contents of the source tree to validate the
-prebuilts. Unlike the commit hash, this SHA1 is unaffected by the history of the
-repository, or by commit messages. This ensures that users always have correct
-prebuilts, without causing unnecessary rebuilds.
-
-### Implementation
-
-1. First, add the SHA1 of the contents of the source tree into the
- ebuild as `CROS_WORKON_TREE`. This can be calculated instantly using
- the following command:
- `git log -1 --format=%T`
-2. Next, add `CROS_WORKON_TREE_$CROS_WORKON_TREE` to `IUSE` in
- `cros-workon.eclass`.
-3. Finally, remove `CROS_WORKON_COMMIT_$CROS_WORKON_COMMIT` from `IUSE`
- from `cros-workon.eclass`.
-
-## Why is prebuilt verification needed at all?
-
-Besides the above proposal, another option for speeding up builds would be to
-eliminate verification of SHA1s in ebuilds entirely. This would speed up builds,
-but would open up developers to race conditions where they might have incorrect
-builds.
-
-Example: If one developer sends a change through the commit queue, and another
-developer bypasses the commit queue at the same time, the ebuild will be marked
-with the latest SHA1 (including both change), but the prebuilt may only include
-the first change. This results in developers (and bots that use binaries) never
-picking up the ‘chump’ change.
-
-There are also other race conditions. Example:
-
-1. A chump change is pushed to power_manager.
-2. The incremental builder kicks off.
-3. Another chump change is pushed to power_manager.
-4. The commit queue kicks off and marks both changes as stable.
-5. The incremental builder kicks off again, and doesn’t notice any
- changes, because its local prebuilt has the same version number as
- the one that was pushed by the commit queue.
-
-Based on the above problems, I think that we should not eliminate prebuilt
-verification of SHA1s, and instead use the proposed solution above. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/comp2_200x146.jpg.sha1 b/chromium/docs/website/site/chromium-os/comp2_200x146.jpg.sha1
deleted file mode 100644
index 8dc62565689..00000000000
--- a/chromium/docs/website/site/chromium-os/comp2_200x146.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-806e15641629ff8f1fae6bbeee664adbc4a390f0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/comp2jpg.sha1 b/chromium/docs/website/site/chromium-os/comp2jpg.sha1
deleted file mode 100644
index b0f96a7eb4e..00000000000
--- a/chromium/docs/website/site/chromium-os/comp2jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0e33638fac2932d0a2011d3eac362228379cf96e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/containers-update/index.md b/chromium/docs/website/site/chromium-os/containers-update/index.md
deleted file mode 100644
index 2d25521653d..00000000000
--- a/chromium/docs/website/site/chromium-os/containers-update/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: containers-update
-title: L1TF on Chrome OS (a.k.a. Foreshadow & CVE-2018-3646)
----
-
-# Vulnerability Description
-
-Software running in a virtualized operating system may exploit a bug in the
-Extended Page Tables implementation to read arbitrary physical memory. This
-allows guest operating systems to access memory contents belonging to the host
-OS that are meant to be protected from access. This may allow malicious guests
-to steal sensitive data from other applications running on the machine.
-
-# Chrome OS response
-
-The vast majority of Chrome OS users are unaffected given that Chrome OS
-currently only uses virtualization for running Linux App Containers (aka
-Termina), which is under development and only available in Beta, Dev, and Canary
-update channels of Chrome OS. Users who don't use the Linux App Containers
-feature don't need to take action at this point.
-
-Chrome OS will not release the Linux apps for Chrome OS feature to the stable
-channel before September, at which point users will have received the necessary
-mitigations in Chrome OS 69 via auto-updates. No further action by stable
-channel users are expected to be necessary. Beta, Dev, and Canary channel users
-will receive fixes as soon as possible now that public patches are available.
-Beta, Dev, and Canary users concerned about the attack in the meantime may
-temporarily stop using Linux App Containers.
-
-# Affected devices and Patch Status
-
-Chrome OS devices with Core Intel CPUs running virtual machines are affected.
-All listed devices have fixes in Dev, Canary, Beta and Stable builds.
-
-* Google Pixelbook
-* HP Chromebox G2
-* Samsung Chromebook Plus (V2)
-* Acer Chromebox CXI3
-* HP Chromebook x2
-* ASUS Chromebox 3
-* ViewSonic NMP660 Chromebox
-* CTL Chromebox CBx1
-* Toshiba Chromebook 2 (2015 Edition)
-* Acer Chromebook 11 (C740)
-* Acer Chromebox CXI2
-* Acer Chromebook 15 (C910 / CB5-571)
-* Acer Chromebox CXI3
-* Dell Chromebook 11
-
-For code names, see our [main device
-page](/chromium-os/developer-information-for-chrome-os-devices). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/BugTrackerName.png.sha1 b/chromium/docs/website/site/chromium-os/developer-guide/BugTrackerName.png.sha1
deleted file mode 100644
index 4921fdce3c5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/BugTrackerName.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-52db3287e5c772969034d5457bb013e09661a69f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/TrackerName.png.sha1 b/chromium/docs/website/site/chromium-os/developer-guide/TrackerName.png.sha1
deleted file mode 100644
index 4921fdce3c5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/TrackerName.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-52db3287e5c772969034d5457bb013e09661a69f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/beaglebone/index.md b/chromium/docs/website/site/chromium-os/developer-guide/beaglebone/index.md
deleted file mode 100644
index 2f27d7a9795..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/beaglebone/index.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: beaglebone
-title: Building for Beaglebone
----
-
-Building for beaglebone uses the standard build tools, with only minor
-adjustments to the options.
-
-#### Build options
-
-Run setup_board with the standard options:
-
-```none
-  ./setup_board --board=beaglebone
-```
-
-Run build_packages with these options:
-
-```none
-  ./build_packages --board=beaglebone --nowithtest --nowithautotest --nowithfactory
-```
-
-Assign a password to the 'chronos' account with the standard commands:
-
-```none
-  ./enable_localaccount.sh chronos
-  ./set_shared_user_password.sh
-```
-
-Run build_image with these options:
-
-```none
-  ./build_image --board=beaglebone base
-```
-
-Put the image onto a micro-SD card with a command similar to this:
-
-```none
-  cros flash usb:// ../build/images/beaglebone/latest/chromiumos_base_image.bin
-```
-
-#### Connecting to the serial console
-
-1. Plug the USB cable into an Ubuntu system.
-2. Run these commands on the Ubuntu system.
-
-```none
-sudo modprobe ftdi_sio vendor=0x0403 product=0xa6d0
-sudo screen /dev/ttyUSB1 115200
-```
-
-**Note:** In some cases, the tty device may be `/dev/ttyUSB0` instead.
-
-#### Booting Chrome OS on the Beaglebone
-
-Plug the micro-SD card into the beaglebone, and apply power. With the beaglebone
-**black**, hold down **S2** button on board before applying power. Attach to the
-beaglebone console, hit return, and type 'boot' at the U-Boot prompt.
-
-**Note:** Power the beaglebone using the 5V barrel connector. USB power will
-usually work but will fail when doing an operation with a high power draw (e.g.
-update_engine). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/index.md b/chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/index.md
deleted file mode 100644
index d5d8eec3d64..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/index.md
+++ /dev/null
@@ -1,367 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: chromium-os-sandboxing
-title: Chromium OS Sandboxing
----
-
-**This document can now be found here:**
-**<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md>**
-
-**The content below is a (possibly out-of-date) copy for easier searching.**
-
-# Sandboxing Chrome OS system services
-
-## Contents
-
-* [Best practices for writing secure system
- services](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Best-practices-for-writing-secure-system-services)
-* [Just tell me what I need to
- do](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Just-tell-me-what-I-need-to-do)
-* [User
- ids](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#User-ids)
-* [Capabilities](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Capabilities)
-* [Namespaces](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Namespaces)
-* [Seccomp
- filters](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Seccomp-filters)
- * [Detailed instructions for generating a seccomp
- policy](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Detailed-instructions-for-generating-a-seccomp-policy)
-* [Securely mounting cryptohome daemon store
- folders](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Securely-mounting-cryptohome-daemon-store-folders)
-* [Minijail
- wrappers](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Minijail-wrappers)
-
-In Chrome OS, OS-level functionality (such as configuring network interfaces) is
-implemented by a collection of system services, and provided to Chrome over
-D-Bus. These system services have greater system and hardware access than the
-Chrome browser.
-
-Separating functionality like this prevents an attacker exploiting the Chrome
-browser through a malicious website to be able to access OS-level functionality
-directly. If Chrome were able to directly control network interfaces, a
-compromise in Chrome would give the attacker almost full control over the
-system. For example, by having a separate network manager, we can reduce the
-functionality exposed to an attacker to just querying interfaces and performing
-pre-determined actions on them.
-
-Chrome OS uses a few different mechanisms to isolate system services from Chrome
-and from each other. We use a helper program called Minijail (executable
-`minijail0`). In most cases, Minijail is used in the service's init script. In
-other cases, [Minijail
-wrappers](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Minijail-wrappers)
-are used if a service wants to apply restrictions to the programs that it
-launches, or to itself.
-
-## Best practices for writing secure system services
-
-Just remember that code has bugs, and these bugs can be used to take control of
-the code. An attacker can then do anything the original code was allowed to do.
-Therefore, code should only be given the absolute minimum level of privilege
-needed to perform its function.
-
-Aim to keep your code lean, and your privileges low. Don‘t run your service as
-`root`. If you need to use third-party code that you didn’t write, you should
-definitely not run it as `root`.
-
-Use the libraries provided by the system/SDK. In Chrome OS,
-[libchrome](http://www.chromium.org/chromium-os/packages/libchrome) and
-[libbrillo](http://www.chromium.org/chromium-os/packages/libchromeos) (née
-libchromeos) offer a lot of functionality to avoid reinventing the wheel,
-poorly. Don‘t reinvent IPC, use D-Bus or Mojo. Don’t open listening sockets,
-connect to the required service.
-
-Don't (ab)use shell scripts, shell script logic is harder to reason about and
-[shell command-injection
-bugs](http://en.wikipedia.org/wiki/Code_injection#Shell_injection) are easy to
-miss. If you need functionality separated from your main service, use normal C++
-binaries, not shell scripts. Moreover, when you execute them, consider further
-restricting their privileges (see section [Minijail
-wrappers](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Minijail-wrappers)).
-
-## Just tell me what I need to do
-
-* Create a new user for your service: <https://crrev.com/c/225257>
-* Optionally, create a new group to control access to a resource and
- add the new user to that group: <https://crrev.com/c/242551>
-* Use Minijail to run your service as the user (and group) created in
- the previous step. In your init script:
- * `exec minijail0 -u <user> /full/path/to/binary`
- * See section [User
- ids](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#User-ids).
-* If your service fails, you might need to grant it capabilities. See
- section
- [Capabilities](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Capabilities).
-* Use as many namespaces as possible. See section
- [Namespaces](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Namespaces).
-* Consider reducing the kernel attack surface exposed to your service
- by using seccomp filters, see section [Seccomp
- filters](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/sandboxing.md#Seccomp-filters).
-
-## User ids
-
-The first sandboxing mechanism is user ids. We try to run each service as its
-own user id, different from the `root` user, which allows us to restrict what
-files and directories the service can access, and also removes a big chunk of
-system functionality that‘s only available to the root user. Using the
-`permission_broker` service as an example, here’s its Upstart config file (lives
-in `/etc/init`):
-
-[`permission_broker.conf`](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/permission_broker/permission_broker.conf)
-
-env PERMISSION_BROKER_GRANT_GROUP=devbroker-access start on starting
-system-services stop on stopping system-services respawn # Run as 'devbroker'
-user. exec minijail0 -u devbroker -c 'cap_chown,cap_fowner+eip' -- \\
-/usr/bin/permission_broker --access_group=${PERMISSION_BROKER_GRANT_GROUP}
-
-Minijail's `-u` argument forces the target program (in this case
-`permission_broker`) to be executed as the devbroker user, instead of the root
-user. This is equivalent of doing `sudo -u devbroker`.
-
-The user (`devbroker` in this example) needs to first be added to the build
-system database. An example of this (for a different user) can be found in the
-following CL: <https://crrev.com/c/361830>
-
-Next, the user needs to be *installed* on the system. An example of this (again
-for a different user) can be found in the following CL:
-<https://crrev.com/c/383076>
-
-See the [Chrome OS user accounts
-README](https://chromium.googlesource.com/chromiumos/overlays/eclass-overlay/+/HEAD/profiles/base/accounts/README.md)
-for more details.
-
-There‘s a test in the CQ that keeps track of the users present on the system
-that request additional access (e.g. listing more than one user in a group). If
-your user does that, the test baseline has to be updated at the same time the
-accounts are added with another CL (e.g. <https://crrev.com/c/894192>). If
-you’re unsure whether you need this, the PreCQ/CQ will reject your CL when the
-test fails, so if the tests pass, you should be good to go!
-
-You can use CQ-DEPEND to land the CLs together (see [How do I specify the
-dependencies of a
-change?](http://www.chromium.org/developers/tree-sheriffs/sheriff-details-chromium-os/commit-queue-overview)).
-
-## Capabilities
-
-Some programs, however, require some of the system access usually granted only
-to the root user. We use [Linux
-capabilities](http://man7.org/linux/man-pages/man7/capabilities.7.html) for
-this. Capabilities allow us to grant a specific subset of root's privileges to
-an otherwise unprivileged process. The link above has the full list of
-capabilities that can be granted to a process. Some of them are equivalent to
-root, so we avoid granting those. In general, most processes need capabilities
-to configure network interfaces, access raw sockets, or performing specific file
-operations. Capabilities are passed to Minijail using the `-c` switch.
-`permission_broker`, for example, needs capabilities to be able to `chown(2)`
-device nodes.
-
-[`permission_broker.conf`](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/permission_broker/permission_broker.conf)
-
-env PERMISSION_BROKER_GRANT_GROUP=devbroker-access start on starting
-system-services stop on stopping system-services respawn # Run as
-&lt;devbroker&gt; user. # Grant CAP_CHOWN and CAP_FOWNER. exec minijail0 -u
-devbroker -c 'cap_chown,cap_fowner+eip' -- \\ /usr/bin/permission_broker
---access_group=${PERMISSION_BROKER_GRANT_GROUP}
-
-Capabilities are expressed using the format that
-[cap_from_text(3)](http://man7.org/linux/man-pages/man3/cap_from_text.3.html)
-accepts.
-
-## Namespaces
-
-Many resources in the Linux world can be isolated now such that a process has
-its own view of things. For example, it has its own list of mount points, and
-any changes it makes (unmounting, mounting more devices, etc...) are only
-visible to it. This helps keep a broken process from messing up the settings of
-other processes.
-
-For more in-depth details, see the [namespaces
-overview](http://man7.org/linux/man-pages/man7/namespaces.7.html).
-
-In Chromium OS, we like to see every process/daemon run under as many unique
-namespaces as possible. Many are easy to enable/rationalize about: if you don't
-use a particular resource, then isolating it is straightforward. If you do rely
-on it though, it can take more effort.
-
-Here‘s a quick overview. Use the command line option if the description below
-matches your service (or if you don’t know what functionality it‘s talking about
--- most likely you aren’t using it!).
-
-* `--profile=minimalistic-mountns`: This is a good first default that
- enables mount and process namespaces. This only mounts `/proc` and
- creates a few basic device nodes in `/dev`. If you need more things
- mounted, you can use the `-b` (bind-mount) and `-k` (regular mount)
- flags.
-* `--uts`: Just always turn this on. It makes changes to the host /
- domain name not affect the rest of the system.
-* `-e`: If your process doesn't need network access (including UNIX or
- netlink sockets).
-* `-l`: If your process doesn't use SysV shared memory or IPC.
-
-The `-N` option does not work on Linux 3.8 systems. So only enable it if you
-know your service will run on a newer kernel version otherwise minijail will
-abort for the older kernels ([Chromium bug 729690](https://crbug.com/729690)).
-
-* `-N`: If your process doesn't need to modify common [control groups
- settings](http://man7.org/linux/man-pages/man7/cgroups.7.html).
-
-## Seccomp filters
-
-Removing access to the filesystem and to root-only functionality is not enough
-to completely isolate a system service. A service running as its own user id and
-with no capabilities has access to a big chunk of the kernel API. The kernel
-therefore exposes a huge attack surface to non-root processes, and we would like
-to restrict what kernel functionality is available for sandboxed processes.
-
-The mechanism we use is called
-[Seccomp-BPF](https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt).
-Minijail can take a policy file that describes what syscalls will be allowed,
-what syscalls will be denied, and what syscalls will only be allowed with
-specific arguments. The full description of the policy file language can be
-found in the [`syscall_filter.c`
-source](https://chromium.googlesource.com/aosp/platform/external/minijail/+/HEAD/syscall_filter.c#239).
-
-Abridged policy for [`mtpd` on amd64
-platforms](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/mtpd/mtpd-seccomp-amd64.policy):
-
-# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. # Use of this
-source code is governed by a BSD-style license that can be # found in the
-LICENSE file. read: 1 ioctl: 1 write: 1 timerfd_settime: 1 open: 1 poll: 1
-close: 1 mmap: 1 mremap: 1 munmap: 1 mprotect: 1 lseek: 1 # Allow
-socket(domain==PF_LOCAL) or socket(domain==PF_NETLINK) socket: arg0 == 0x1 ||
-arg0 == 0x10 # Allow PR_SET_NAME from libchrome's
-base::PlatformThread::SetName() prctl: arg0 == 0xf
-
-Any syscall not explicitly mentioned, when called, results in the process being
-killed. The policy file can also tell the kernel to fail the system call
-(returning -1 and setting `errno`) without killing the process:
-
-# execve: return EPERM execve: return 1
-
-To write a policy file, run the target program under `strace` and use that to
-come up with the list of syscalls that need to be allowed during normal
-execution. The [generate_syscall_policy.py
-script](https://chromium.googlesource.com/aosp/platform/external/minijail/+/HEAD/tools/generate_seccomp_policy.py)
-will take `strace` output files and generate a policy file suitable for use with
-Minijail. On top of that, the `-L` option will print the name of the first
-syscall to be blocked to syslog. The best way to proceed is to combine both
-approaches: use `strace`and the script to generate a rough policy, and then use
-`-L` if you notice your program is still crashing. Note that the `-L` option
-should NOT be used in production.
-
-The policy file needs to be installed in the system, so we need to add it to the
-ebuild file:
-
-[`mtpd-9999.ebuild`](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos-base/mtpd/mtpd-9999.ebuild)
-
-# Install seccomp policy file. insinto /usr/share/policy use seccomp && newins
-"mtpd-seccomp-${ARCH}.policy" mtpd-seccomp.policy
-
-And finally, the policy file has to be passed to Minijail, using the `-S`
-option:
-
-[`mtpd.conf`](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/mtpd/mtpd.conf)
-
-# use minijail (drop root, set no_new_privs, set seccomp filter). # Mount /proc,
-/sys, /dev, /run/udev so that USB devices can be # discovered. Also mount
-/run/dbus to communicate with D-Bus. exec minijail0 -i -I -p -l -r -v -t -u mtp
--g mtp -G \\ -P /var/empty -b / -b /proc -b /sys -b /dev \\ -k
-tmpfs,/run,tmpfs,0xe -b /run/dbus -b /run/udev \\ -n -S
-/usr/share/policy/mtpd-seccomp.policy -- \\ /usr/sbin/mtpd
--minloglevel="${MTPD_MINLOGLEVEL}"
-
-### Detailed instructions for generating a seccomp policy
-
-* Generate the syscall log: `strace -f -o strace.log <cmd>`
-* Cut off everything before the following for a smaller filter that
- can be used with `LD_PRELOAD`:
-
-rt_sigaction(SIGRTMIN, {&lt;sa_handler&gt;, \[\], SA_RESTORER|SA_SIGINFO,
-&lt;sa_restorer&gt;}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {&lt;sa_handler&gt;,
-\[\], SA_RESTORER|SA_RESTART|SA_SIGINFO, &lt;sa_restorer&gt;}, NULL, 8) = 0
-rt_sigprocmask(SIG_UNBLOCK, \[RTMIN RT_1\], NULL, 8) = 0 getrlimit(RLIMIT_STACK,
-{rlim_cur=8192\*1024, rlim_max=RLIM64_INFINITY}) = 0 brk(NULL) = 0x7f8a0656e000
-brk(&lt;addr&gt;) = &lt;addr&gt;
-
-* Run the policy generation script:
- * `~/chromiumos/src/aosp/external/minijail/tools/generate_seccomp_policy.py
- strace.log > seccomp.policy`
-* Test the policy (look at /var/log/messages for the blocked syscall
- when this crashes):
- * `minijail0 -S seccomp.policy -L <cmd>`
-* To find a failing syscall without having seccomp logs available
- (i.e., when minijail0 was run without the `-L` option):
- * `dmesg | grep "syscall="` to find something similar to:
-
-NOTICE kernel: \[ 586.706239\] audit: type=1326 audit(1484586246.124:6): ...
-comm="&lt;executable&gt;" exe="/path/to/executable" sig=31 syscall=130 compat=0
-ip=0x7f4f214881d6 code=0x0
-
-* Then do:
- * `minijail0 -H | grep <nr>`, where `<nr>` is the `syscall=`
- number above, to find the name of the failing syscall.
-
-## Securely mounting cryptohome daemon store folders
-
-Some daemons store user data on the user‘s cryptohome under
-`/home/.shadow/<user_hash>/mount/root/<daemon_name>` or equivalently
-`/home/root/<user_hash>/<daemon_name>`. For instance, Session Manager stores
-user policy under `/home/root/<user_hash>/session_manager/policy`. This is
-useful if the data should be protected from other users since the user’s
-cryptohome is only mounted (and therefore decrypted) when the user logs in. If
-the user is not logged in, it is encrypted with the user's password.
-
-However, if a daemon is already running inside a mount namespace (`minijail0 -v
-...`) when the user's cryptohome is mounted, it does not see the mount since
-mount events do not propagate into mount namespaces by default. This propagation
-can be achieved, though, by making the parent mount a shared mount and the
-corresponding mount inside the namespace a shared or slave mount, see the
-[shared
-subtrees](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)
-doc.
-
-To set up a cryptohome daemon store folder that propagates into your daemon‘s
-mount namespace, add this code to the src_install section of your daemon’s
-ebuild:
-
-local daemon_store="/etc/daemon-store/&lt;daemon_name&gt;" dodir
-"${daemon_store}" fperms 0700 "${daemon_store}" fowners
-&lt;daemon_user&gt;:&lt;daemon_group&gt; "${daemon_store}"
-
-This directory is never used directly. It merely serves as a secure template for
-the chromeos_startup script, which picks it up and creates
-`/run/daemon-store/<daemon_name>` as a shared mount.
-
-In your daemon's init script, mount that folder as slave in your mount
-namespace. Be sure not to mount all of `/run` if possible.
-
-minijail0 -Kslave \\ -k 'tmpfs,/run,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \\ -b
-/run/daemon-store/&lt;daemon_name&gt; \\ ...
-
-During sign-in, when the user's cryptohome is mounted, Cryptohome creates
-`/home/.shadow/<user_hash>/mount/root/<daemon_name>`, bind-mounts it to
-`/run/daemon-store/<daemon_name>/<user_hash>` and copies ownership and mode from
-`/etc/daemon-store/<daemon_name>`to the bind target. Since
-`/run/daemon-store/<daemon_name>` is a shared mount outside of the mount
-namespace and a slave mount inside, the mount event propagates into the daemon.
-
-Your daemon can now use `/run/daemon-store/<daemon_name>/<user_hash>` to store
-user data once the user's cryptohome is mounted. Note that even though
-`/run/daemon-store` is on a tmpfs, your data is actually stored on disk and not
-lost on reboot.
-
-**Be sure not to write to the folder before cryptohome is mounted**. Consider
-listening to Session Manager's `SessionStateChanged` signal or similar to detect
-mount events. Note that `/run/daemon-store/<daemon_name>/<user_hash>` might
-exist even though cryptohome is not mounted, so testing existence is not enough
-(it only works the first time).
-
-The `<user_hash>` can be retrieved with Cryptohome's `GetSanitizedUsername`
-D-Bus method.
-
-The following diagram illustrates the mount event propagation:
-
-[<img alt="image"
-src="/chromium-os/developer-guide/chromium-os-sandboxing/mount_event_propagation.png">](/chromium-os/developer-guide/chromium-os-sandboxing/mount_event_propagation.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/mount_event_propagation.png.sha1 b/chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/mount_event_propagation.png.sha1
deleted file mode 100644
index bfa508cf832..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/chromium-os-sandboxing/mount_event_propagation.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f22502ecfeb78e05d0cf1df5a340a692b9d9c0f7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/developer-workflow/index.md b/chromium/docs/website/site/chromium-os/developer-guide/developer-workflow/index.md
deleted file mode 100644
index d17fb681ef9..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/developer-workflow/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: developer-workflow
-title: Simple developer workflow
----
-
-## This document has been moved to markdown/git. The up-to-date version can be
-found at
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md#Making-changes-to-packages-whose-source-code-is-checked-into-Chromium-OS-git-repositories> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/directory-structure/index.md b/chromium/docs/website/site/chromium-os/developer-guide/directory-structure/index.md
deleted file mode 100644
index 33929d5aa55..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/directory-structure/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: directory-structure
-title: Directory Structure (Chromium OS)
----
-
-This page has been superseded by
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/source_layout.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/disk-layout-format/index.md b/chromium/docs/website/site/chromium-os/developer-guide/disk-layout-format/index.md
deleted file mode 100644
index 1a9c835cd82..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/disk-layout-format/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: disk-layout-format
-title: Disk Layout Format
----
-
-Boards can define their own disk layout, with different partitioning ordering
-and sizes.
-
-A board may specify its own layout by placing a layout file in
-overlay-&lt;board&gt;/scripts/disk_layout.json; if no layout file is found, the
-default one in scripts/build_library/legacy_disk_layout.json will be used.
-
-A layout file consists of a "base" layout, plus zero or more other types of
-layout. Common types would be "usb" and "vm". Each of these layouts is made up
-of one or more partitions.
-
-The base layout is special, since it's the layout on which all other layouts get
-overlaid upon. The base layout represents the "installed" layout, the way things
-should be once the image has been installed onto a device. The "usb" layout
-represents how things should look on a USB image (typically, this means that
-ROOT-B is 1 block long).
-
-See
-<https://chromium.googlesource.com/chromiumos/platform/crosutils/+/HEAD/build_library/README.disk_layout>
-for the exact format details as they may change over time.
-
-Here's an example of a partition entry in a layout:
-
-{
-
-"num": 5,
-
-"label":"ROOT-B",
-
-"type":"rootfs",
-
-"blocks":"4194304",
-
-"fs_blocks":"217600"
-
-}
-
-The "num" field defines the numerical ID of the partition in the GPT. The
-"label" field defines the name of the partition in the GPT table and also the
-label of the filesystem if the given partition has a filesystem. The "blocks"
-field defines the number of blocks in size the partition is. Optionally, you can
-also specify the "fs_blocks" field. This defines how large the filesystem on the
-given partition should be. If you don't specify "fs_blocks", the entire
-partition is used.
-
-The block size for a partition and a filesystem is defined at the top of the
-layout file, in the metadata section:
-
-"metadata":{
-
-"block_size": 512,
-
-"fs_block_size": 4096
-
-},
-
-Both of these values should be specified in bytes.
-
-**FAQ**
-
-* I want to use gmerge and I used to use the --rootfs_size and
- --rootfs_partition_size options to make my root filesystem larger to
- aid this, how do I do this now?
- * Open up legacy_disk_layout.json and edit the ROOT-A/ROOT-B
- blocks and fs_blocks to your desired sizes, using the block
- sizes specified at the top of the file. Then copy the values for
- ROOT-A into the the blocks/fs_blocks for the usb layout. If you
- want to do this for a VM, copy the values into the vm layout
- too. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/gerrit-guide/index.md b/chromium/docs/website/site/chromium-os/developer-guide/gerrit-guide/index.md
deleted file mode 100644
index 6ff0acb9911..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/gerrit-guide/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: gerrit-guide
-title: Gerrit credentials setup (for Chromium OS and Chrome OS)
----
-
-[TOC]
-
-## Introduction
-
-We have two gerrit instances: Chromium OS and the (internal) Chrome OS gerrit
-instance.
-
-For the Chromium OS instance: This is where most of the development happens. You
-do not have to be an "official" Chromium contributor or Googler or anything else
-to interact with the Chromium OS gerrit instance and/or upload changes to it. We
-restrict access by only allowing certain people to *approve* changes before
-they're allowed to go into the main tree.
-
-For the internal Chrome OS instance: Access is restricted to Googlers and
-partners with a '&lt;partner&gt;.corp-partner.google.com' email address.
-
-The gerrit instance for Chromium OS and Chrome OS uses Google Accounts to
-provide authentication. This means any account you can use to log into
-google.com can also be used to authenticate with Gerrit.
-
-### (EVERYONE) To get access to the Chromium Gerrit instance
-
-Follow the steps in [Chromium's Gerrit Guide](/developers/gerrit-guide).
-
-### (Googlers & Partners) To get access to the internal Chrome Gerrit instance
-
-1. (Googlers only) You must also do the steps above for your @chromium
- account first
-2. Go to <http://google.com/> and verify you are logged into your
- @google.com account
-3. In the same window and session, load
- <https://chrome-internal-review.googlesource.com/new-password>
- 1. **Make sure you are logged into your @google.com account.**
- 2. **You can verify this by ensuring that the Username field looks
- like git-&lt;user&gt;.google.com**
-4. Follow the directions on the new-password page to append to your
- .gitcookies file. You should click the radio button labeled "only
- chrome-internal.googlesource.com" if it exists.
-5. **Verification:**
- * **Googlers -** Run `git ls-remote
- https://chrome-internal.googlesource.com/chromeos/manifest-internal.git`
- * **Partners -** Find a repo in your local manifest and run `git
- ls-remote
- https://chrome-internal.googlesource.com/<REPO_PATH>.git -
- Example: git ls-remote
- https://chrome-internal.googlesource.com/chromeos/overlays/chromeos-partner-overlay.git`
- * Note that This should **not** prompt for any credentials, and
- should just print out a list of git references.
-
-### (Googler) Link @chromium.org & @google.com accounts
-
-Follow the steps in [Chromium's Gerrit Guide](/developers/gerrit-guide). You
-must link your accounts to have proper access in Gerrit.
-
-## **Using Gerrit**
-
-Check out the [Contributing
-Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/contributing.md)
-for using Gerrit and getting through the Chromium OS review process.
-
-## More Gerrit Tips
-
-Check out the random tips in [Chromium's Gerrit
-Guide](/developers/gerrit-guide). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/go-in-chromium-os/index.md b/chromium/docs/website/site/chromium-os/developer-guide/go-in-chromium-os/index.md
deleted file mode 100644
index 48380538b1d..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/go-in-chromium-os/index.md
+++ /dev/null
@@ -1,344 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: go-in-chromium-os
-title: Go in Chromium OS
----
-
-[TOC]
-
-This page provides information on using [Go](https://golang.org) in Chromium OS,
-including recommendations for project organization, importing and managing third
-party packages, and writing ebuilds.
-
-## **Recommended organization of code for Go projects in Chromium OS**
-
-Projects should generally follow the official recommendation to organize their
-Go workspaces: [golang.org/doc/code.html](https://golang.org/doc/code.html)
-These are some additional recommendations and naming conventions for organizing
-Go project workspaces in Chromium OS:
-
-* If the Go project is in its own git repository, it should be set up
- such that the root of the repository is a workspace.
- * It should have a single directory path `"src/<project name>/"`
- at the top level of the repository.
- * This way, import paths for packages in the project always begin
- with `"<project name>/"`.
-* If the project provides useful Go library packages for other
- projects to import, put all such packages under `"src/chromiumos/"`.
- * This way, import paths for Chromium OS specific common Go
- packages always begin with `"chromiumos/"` prefix.
-* When adding Go code to an existing project already containing code
- in other languages, create a top level directory called `"go"` in
- the repository and use that as the Go workspace.
- * Follow the rest of the recommendation for new projects above
- (e.g. all code should be under `"go/src/<project>/"` or
- `"go/src/chromiumos/"`).
-* **IMPORTANT:** Do not use `"go get"` or vendor third party packages
- to individual project repositories.
- * Instead, write an ebuild (in `chromiumos-overlay/dev-go`) that
- installs the third party packages to **`"/usr/lib/gopath"`**.
-
-## **Recommendations for local development and builds**
-
-Set the [GOPATH environment
-variable](https://golang.org/cmd/go/#hdr-GOPATH_environment_variable) to contain
-two elements:
-
-1. Path to the local Go workspace (directory containing
- `"src/<project>/"`).
-2. Path to all locally installed (emerged) Go packages:
- **`"/usr/lib/gopath"`**.
-
-When compiling for host, invoke the Go command as `"x86_64-pc-linux-gnu-go"`, or
-simply, `"go"`.
-
-* The host compiler is included in the chromiumos-sdk (`cros_sdk`) and
- is installed automatically when a chroot is created.
-* A few useful utilities like `"gofmt"`, `"godoc"`, `"golint"`, and
- `"goguru"` are also in the SDK and installed in the chroot.
- * `"repo upload"` is configured to warn when trying to upload a
- change containing any Go files not formatted with `gofmt`.
-
-Go cross compiler for a board is installed automatically when `"setup_board"` is
-run in the chroot.
-
-* The cross-compiling Go command is determined by the toolchain target
- tuple for the board:
- * Use `"x86_64-cros-linux-gnu-go"` for `amd64` targets.
- * Use `"armv7a-cros-linux-gnueabi-go"` for `arm` targets.
- * Use `"aarch64-cros-linux-gnu-go"` for `arm64` targets.
-* The cross compilers are configured to enable full Cgo support (i.e.
- they automatically use the correct cross-clang for compiling the C
- parts).
-
-## **Setting up ebuilds for third party Go packages**
-
-Write an ebuild to fetch and install third party packages to
-**`"/usr/lib/gopath"`**.
-
-* If the upstream repository has tagged releases, use the ebuild
- version to fetch and install the corresponding release. Example:
- [dev-go/errors](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/dev-go/errors)
-
- ```none
- # Copyright 2018 The Chromium OS Authors. All rights reserved.# Distributed under the terms of the GNU General Public License v2.EAPI="6"CROS_GO_SOURCE="github.com/pkg/errors v${PV}"CROS_GO_PACKAGES=( "github.com/pkg/errors")inherit cros-goDESCRIPTION="Error handling primitives for Go."HOMEPAGE="https://github.com/pkg/errors"SRC_URI="$(cros-go_src_uri)"LICENSE="BSD"SLOT="0"KEYWORDS="*"IUSE=""RESTRICT="binchecks strip"DEPEND=""RDEPEND=""
- ```
-
-* If the upstream repository does not have release tags, keep the
- ebuild version at `0.0.1` and manage the commit hash manually.
- Example:
- [dev-go/glog](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/dev-go/glog/glog-0.0.1.ebuild)
-
- ```none
- # Copyright 2018 The Chromium OS Authors. All rights reserved.# Distributed under the terms of the GNU General Public License v2.EAPI="6"CROS_GO_SOURCE="github.com/golang/glog 44145f04b68cf362d9c4df2182967c2275eaefed"CROS_GO_PACKAGES=( "github.com/golang/glog")inherit cros-goDESCRIPTION="Leveled execution logs for Go"HOMEPAGE="https://github.com/golang/glog"SRC_URI="$(cros-go_src_uri)"LICENSE="BSD-Google"SLOT="0"KEYWORDS="*"IUSE=""RESTRICT="binchecks strip"DEPEND=""RDEPEND=""
- ```
-
-* If the canonical import path is different from the repository path,
- specify it along with the repository path. Example:
- [dev-go/go-sys](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/dev-go/go-sys/go-sys-0.0.1.ebuild)
-
- ```none
- # Copyright 2018 The Chromium OS Authors. All rights reserved.# Distributed under the terms of the GNU General Public License v2.EAPI="6"CROS_GO_SOURCE="go.googlesource.com/sys:golang.org/x/sys a646d33e2ee3172a661fc09bca23bb4889a41bc8"CROS_GO_PACKAGES=( "golang.org/x/sys/unix")inherit cros-goDESCRIPTION="Go packages for low-level interaction with the operating system"HOMEPAGE="https://golang.org/x/sys"SRC_URI="$(cros-go_src_uri)"LICENSE="BSD-Google"SLOT="0"KEYWORDS="*"IUSE=""RESTRICT="binchecks strip"DEPEND=""RDEPEND=""
- ```
-
-* Inherit eclass `"cros-go"`.
-* Use `CROS_GO_SOURCE` to specify the source repo, commit-id, and
- optionally, an alternate import path.
-* Use `CROS_GO_PACKAGES` to list the packages to install.
-* The installed packages can now be imported using their usual import
- paths, i.e.
-
- ```none
- import "golang.org/x/sys/unix"
- ```
-
-* Use `cros-go_src_uri()` to construct a valid `SRC_URI`.
-* The first time this ebuild is emerged, Portage will complain that
- the distfile could not be downloaded from gentoo-mirror or
- chromeos-localmirror. This is expected, since we configure
- Portage to only look in the mirror locations and never download
- directly from `SRC_URI`. The `cros-go.eclass` will automatically
- print a helpful list of commands for downloading the distfile and
- adding it to chromeos-localmirror:
-
- ```none
- >>> Emerging (1 of 1) dev-go/errors-0.8.0::chromiumos!!! Fetched file: github.com-pkg-errors-v0.8.0.tar.gz VERIFY FAILED!!!! Reason: Insufficient data for checksum verification!!! Got:!!! Expected: MD5 RMD160 SHA1 SHA256 SHA512 WHIRLPOOL * Fetch failed for 'dev-go/errors-0.8.0', Log file: * '/var/log/portage/dev-go:errors-0.8.0:20180518-202435.log' * Run these commands to add github.com-pkg-errors-v0.8.0.tar.gz to chromeos-localmirror: * wget -O github.com-pkg-errors-v0.8.0.tar.gz https://github.com/pkg/errors/archive/v0.8.0.tar.gz * gsutil cp -a public-read github.com-pkg-errors-v0.8.0.tar.gz gs://chromeos-localmirror/distfiles/ * and update the 'Manifest' file with: * ebuild /mnt/host/source/src/third_party/chromiumos-overlay/dev-go/errors/errors-0.8.0.ebuild manifest
- ```
-
- Run the suggested `wget`, `gsutil`, and `ebuild` commands, and then try the
- emerge again. For more information on `chromeos-localmirror` and
- setting up `gsutil`, [read
- this](https://sites.google.com/a/google.com/chromeos/resources/engineering/releng/localmirror).
-
-## **Setting up ebuilds for Chromium OS Go projects**
-
-**IMPORTANT:** Never use `"go get"` from an ebuild. Instead, write ebuilds for
-external dependencies and let Portage make them available under
-**`"/usr/lib/gopath"`**.
-If a project is only providing common `"chromiumos/"` Go packages for use by
-other projects, its ebuild only needs to fetch and install the package files to
-**`"/usr/lib/gopath"`**.
-
-* Example:
- [dev-go/seccomp](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/dev-go/seccomp/seccomp-9999.ebuild)
-
- ```none
- # Copyright 2018 The Chromium OS Authors. All rights reserved.# Distributed under the terms of the GNU General Public License v2.EAPI="6"CROS_WORKON_PROJECT="chromiumos/platform/go-seccomp"CROS_WORKON_LOCALNAME="../platform/go-seccomp"CROS_GO_PACKAGES=( "chromiumos/seccomp")inherit cros-workon cros-goDESCRIPTION="Go support for Chromium OS Seccomp-BPF policy files"HOMEPAGE="https://chromium.org/chromium-os/developer-guide/chromium-os-sandboxing"LICENSE="BSD-Google"SLOT="0"KEYWORDS="~*"IUSE=""RESTRICT="binchecks strip"DEPEND=""RDEPEND=""
- ```
-
- * The seccomp package is located in
- `"chromiumos/platform/go-seccomp"` repo at
- `"src/chromiumos/seccomp/"`.
- * This package can now be imported by other projects using
-
- ```none
- import "chromiumos/seccomp"
- ```
-
-* Note that a single ebuild can install multiple related packages
- inside `"/usr/lib/gopath/src/chromiumos/..."`.
-* Also, multiple ebuilds can install packages inside
- `"/usr/lib/gopath/src/chromiumos/..."` as long as there's no
- conflict for package paths.
-
-For a typical Go project that needs to build and install executables:
-
-* Example:
- [dev-go/golint](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/dev-go/golint/golint-0.0.1.ebuild)
-
- ```none
- # Copyright 2018 The Chromium OS Authors. All rights reserved.# Distributed under the terms of the GNU General Public License v2.EAPI="6"CROS_GO_SOURCE="github.com/golang/lint c5fb716d6688a859aae56d26d3e6070808df29f7"CROS_GO_BINARIES=( "github.com/golang/lint/golint")inherit cros-goDESCRIPTION="A linter for Go source code"HOMEPAGE="https://github.com/golang/lint"SRC_URI="$(cros-go_src_uri)"LICENSE="BSD-Google"SLOT="0"KEYWORDS="*"IUSE=""RESTRICT="binchecks strip"DEPEND="dev-go/go-tools"RDEPEND=""
- ```
-
-* If the project needs to import packages from outside its own
- repository, list those dependencies in the `DEPEND` variable.
-* Always specify the binaries using `"CROS_GO_BINARIES"` variable.
- This will pick the correct compiler for cross-compiling, and invoke
- it with appropriate `GOPATH` and flags. (e.g. `"emerge-daisy"`
- will automatically use the arm cross-compiler, import packages from
- `"/build/daisy/usr/lib/gopath"`, and build PIE binaries).
-
-A single ebuild can install executable binaries, as well as provide Go packages
-for other projects to import.
-
-* Example:
- [dev-go/go-tools](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/dev-go/go-tools/go-tools-0.0.1.ebuild)
-
- ```none
- # Copyright 2018 The Chromium OS Authors. All rights reserved.# Distributed under the terms of the GNU General Public License v2.EAPI="6"CROS_GO_SOURCE="go.googlesource.com/tools:golang.org/x/tools 2d19ab38faf14664c76088411c21bf4fafea960b"CROS_GO_PACKAGES=( "golang.org/x/tools/go/gcimporter15" "golang.org/x/tools/go/gcexportdata")CROS_GO_TEST=( "${CROS_GO_PACKAGES[@]}")CROS_GO_BINARIES=( "golang.org/x/tools/cmd/godoc" "golang.org/x/tools/cmd/guru:goguru")inherit cros-goDESCRIPTION="Packages and tools that support the Go programming language"HOMEPAGE="https://golang.org/x/tools"SRC_URI="$(cros-go_src_uri)"LICENSE="BSD-Google"SLOT="0"KEYWORDS="*"IUSE=""RESTRICT="binchecks strip"DEPEND=""RDEPEND=""
- ```
-
- * This builds and installs the `"godoc"` and `"goguru"` tools.
- It also provides packages `"golang.org/x/tools/go/gcimporter15"`
- and `"golang.org/x/tools/go/gcexportdata"` required to build
- `"dev-go/golint"` above.
-
-## **Location of ebuilds and repositories**
-
-* Ebuilds for third party Go packages and tools should go in
- `chromiumos-overlay/dev-go`.
-* Ebuilds for Chromium OS specific common Go packages (import paths
- beginning with `"chromiumos/"`) should also go to
- `chromiumos-overlay/dev-go`. Their repositories should go to an
- appropriate place in the tree (e.g.
- "[chromium.googlesource.com/chromiumos/platform/go-seccomp](https://chromium.googlesource.com/chromiumos/platform/go-seccomp)").
-* For other Chromium OS Go projects, use `chromiumos-overlay/dev-go`
- only if it's a generic helper tool or utility for development.
- Otherwise, pick a more appropriate category and overlay for the
- project.
-
-## **Useful functions and variables**
-
-The cros-go eclass is defined here:
-[chromiumos-overlay/eclass/cros-go.eclass](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/eclass/cros-go.eclass)
-`CROS_GO_SOURCE` Path to the upstream repository and commit id.
-Go repositories on `"github.com"` and `"*.googlesource.com"` are supported.
-The source string contains the path of the git repository containing Go
-packages, and a commit-id (or version tag).
-For example:
-
-```none
-CROS_GO_SOURCE="github.com/golang/glog 44145f04b68cf362d9c4df2182967c2275eaefed"
-```
-
-will fetch the sources from
-[github.com/golang/glog](https://github.com/golang/glog) at the specified
-commit-id, and
-
-```none
-CROS_GO_SOURCE="github.com/pkg/errors v0.8.0"
-```
-
-will fetch the sources from
-[github.com/pkg/errors](https://github.com/pkg/errors) at version `v0.8.0`.
-By default, the import path for Go packages in the repository is the same as
-repository path. This can be overridden by appending a colon to the repository
-path, followed by an alternate import path.
-For example:
-
-```none
-CROS_GO_SOURCE="github.com/go-yaml/yaml:gopkg.in/yaml.v2 v2.2.1"
-```
-
-will fetch the sources from
-[github.com/go-yaml/yaml](https://github.com/go-yaml/yaml) at the version
-`v2.2.1`, and install the package under `"gopkg.in/yaml.v2"`.
-`CROS_GO_SOURCE` can contain multiple items when defined as an array:
-
-```none
-CROS_GO_SOURCE=( "github.com/golang/glog 44145f04b68cf362d9c4df2182967c2275eaefed" "github.com/pkg/errors v0.8.0" "github.com/go-yaml/yaml:gopkg.in/yaml.v2 v2.2.1")
-```
-
-`CROS_GO_WORKSPACE` Path to the Go workspace, default is `"${S}"`.
-The Go workspace is searched for packages to build and install. If all Go
-packages in the repository are under `"go/src/"`:
-
-```none
-CROS_GO_WORKSPACE="${S}/go"
-```
-
-`CROS_GO_WORKSPACE` can contain multiple items when defined as an array:
-
-```none
-CROS_GO_WORKSPACE=( "${S}" "${S}/tast-base")
-```
-
-`CROS_GO_BINARIES` Go executable binaries to build and install.
-Each path must contain a `package "main"`. The last component of the package
-path will become the name of the executable. The executable name can be
-overridden by appending a colon to the package path, followed by an alternate
-name. The install path for an executable can be overridden by appending a colon
-to the package path, followed by the desired install path/name for it.
-For example:
-
-```none
-CROS_GO_BINARIES=( "golang.org/x/tools/cmd/godoc" "golang.org/x/tools/cmd/guru:goguru" "golang.org/x/tools/cmd/stringer:/usr/local/bin/gostringer")
-```
-
-will build and install `"godoc"`, `"goguru"`, and `"gostringer"` binaries.
-`CROS_GO_VERSION` Version string to embed in the executable
-binary. The variable `main.Version` is set to this value at build time.
-For example:
-
-```none
-CROS_GO_VERSION="${PVR}"
-```
-
-will set `main.Version` string variable to package version and revision (if any)
-of the ebuild.
-`CROS_GO_PACKAGES` Go packages to install in
-**`"/usr/lib/gopath"`**. Packages are installed in **`"/usr/lib/gopath"`**
-such that they can be imported later from Go code using the exact paths listed
-here.
-For example:
-
-```none
-CROS_GO_PACKAGES=( "github.com/golang/glog")
-```
-
-will install package files to `"/usr/lib/gopath/src/github.com/golang/glog"` and
-other Go projects can use the package with
-
-```none
-import "github.com/golang/glog"
-```
-
-If the last component of a package path is `"..."`, it is expanded to include
-all Go packages under the directory.
-`CROS_GO_TEST` Go packages to test. Package tests are run with
-`-short` flag by default. Package tests are always built and run locally on
-host. Default is to test all packages in `CROS_GO_WORKSPACE`(s).
-`cros-go_src_uri` Construct a valid `SRC_URI` from
-`CROS_GO_SOURCE`. Set the `SRC_URI` in an ebuild with:
-
-```none
-SRC_URI="$(cros-go_src_uri)"
-```
-
-`cros-go_gopath` A valid `GOPATH` for `CROS_GO_WORKSPACE`. Set
-the `GOPATH` in an ebuild with:
-
-```none
-GOPATH="$(cros-go_gopath)"
-```
-
-`cros_go` Wrapper function for invoking the Go tool from an
-ebuild. It provides the following functionality:
-
-* The correct cross-compiler is automatically detected and used. For
- example, when running `"emerge-daisy"`,
- `"armv7a-cros-linux-gnueabi-go"` will be used to build Go packages
- and binaries.
-* The `GOPATH` variable is setup automatically. For example, when
- running `"emerge-daisy"`, Go packages will be looked up in the local
- workspace, as well as in `"/build/daisy/usr/lib/gopath"`.
-* When cross-compiling Go packages that use Cgo, the correct C/C++
- cross-compilers for the target are automatically detected and used.
-
-For most ebuilds, setting the `CROS_GO_BINARIES` variable should be enough to
-build and install Go binaries. Implementation of `CROS_GO_BINARIES` uses the
-`cros_go` wrapper internally. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/index.md b/chromium/docs/website/site/chromium-os/developer-guide/index.md
deleted file mode 100644
index eee7e1191cc..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: developer-guide
-title: Chromium OS Developer Guide
----
-
-This document has been moved to markdown/git. The up-to-date version can be
-found at:
-
-<https://chromium.googlesource.com/chromiumos/docs/+/main/developer_guide.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/upstreaming-drm-patches/index.md b/chromium/docs/website/site/chromium-os/developer-guide/upstreaming-drm-patches/index.md
deleted file mode 100644
index 2626c020be7..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/upstreaming-drm-patches/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: upstreaming-drm-patches
-title: Upstreaming drm patches
----
-
-## Pre-requisites
-
-* [Subscribe to dri-devel mailing
- list](https://lists.freedesktop.org/mailman/listinfo/dri-devel)
-* Setup git send-email to work with your email (@chromium, @android,
- @google) ([Check out the Examples
- section](https://www.kernel.org/pub/software/scm/git/docs/git-send-email.html))
- * This requires the git-email package (sudo apt-get install
- git-email)
-
-## Sending the patch
-
-* Add the upstream repo as a remote in your git tree
- * For kernel patches, consult the MAINTAINERS file or
- scripts/get_maintainer.pl to find the remote git tree location
- * For libdrm patches, the tree is located at
- git://anongit.freedesktop.org/mesa/drm
-
-> > `; git remote add -f upstream <remote_addr>`
-> > `; git fetch upstream`
-
-* Create a new branch which tracks upstream
- * For kernel, the branch will depend on how the maintainer has
- setup their tree. Ask on IRC if you're unsure.
- * For libdrm, use the master branch
-
-> > `; git branch -t for_upstream upstream/<upstream_branch>`
-
-* Apply the patch to your for_upstream branch (resolving any
- conflicts) and test the patch still works
-* Generate a patch file for upstream, it will be saved as
- 0001-&lt;my-commit-subject&gt;.patch
- * For libdrm, add --subject-prefix 'PATCH libdrm' to the command
- * If you have not added a Signed-off-by: line to your commit
- message, add --signoff to the command
-
-> > `; git format-patch <optional parameters> HEAD^..`
-
-* Open the patch file and strip out all of the Google-specific kruft
- (Bug, Test, Change-Id, etc). Once again, ensure you have a
- Signed-off-by: line in the commit message
- * If this is a v2/v3/vN patch, add vX to the subject after PATCH
- (ie: \[PATCH vX\] my commit subject)
-
-* Send the patch to the list
- * For kernel patches:
- * Run the patch through scripts/checkpatch.pl to ensure it
- conforms with kernel style guide
- * Run the patch through scripts/get_maintainer.pl to generate
- a list of people/lists who should be cc'd
- * Make sure you cc anyone who provided you with a downstream
- review, as well as people who can help with upstream review
- (seanpaul@, marcheu@, etc)
- * Use the --cc argument to git send-email
- * To reply to an email with a patch (ex: after code review), add
- the --in-reply-to=&lt;Message-Id&gt; argument. You can get
- &lt;Message-Id&gt; from mail headers
- * If you want ONE MORE chance to ensure that everything is right
- for the patch, add the --annotate flag to send-email, it'll let
- you review the message before sending
- * If this is a series of patches, add a cover letter to explain
- the series with the --cover-letter
-
-> > `; git send-email --to=dri-devel@lists.freedesktop.org` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-guide/using-serial-tty/index.md b/chromium/docs/website/site/chromium-os/developer-guide/using-serial-tty/index.md
deleted file mode 100644
index 3f588404089..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-guide/using-serial-tty/index.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-guide
- - Chromium OS Developer Guide
-page_name: using-serial-tty
-title: Controlling Enabled Consoles
----
-
-[TOC]
-
-## Introduction
-
-The set of enabled consoles (serial tty or virtual terminal (VT)) used to
-require a combination of USE flags and custom package installs. With the new
-chromeos-base/tty package, all you have to do is set a single variable in your
-`make.conf`.
-
-By default, only tty2 is enabled.
-
-## Enabling Specific tty Devices
-
-Each tty device will have an init script in `/etc/init` with a name like
-`console-tty1.conf`.
-
-### Temporary Testing
-
-You can declare which console to activate through the `TTY_CONSOLE` expanded
-flag.
-
-If you do not want to rebuild the whole system, you can just rebuild
-chromeos-base/tty with the right flag:
-
-```none
-USE="tty_console_tty1 tty_console_tty2" emerge-${BOARD} chromeos-base/tty
-```
-
-### Changing Board Defaults
-
-If you want your overlay to install an extra script by default, add the
-following line to your `make.conf`:
-
-```none
-TTY_CONSOLE="${TTY_CONSOLE} tty1 ttyS0"
-```
-
-## Which tty are available?
-
-The tty available are listed in [chromeos-base/tty
-ebuild](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos-base/tty/tty-0.0.1.ebuild).
-
-The current list of tty's:
-
-```none
-ttyAMA{0..5}ttyO{0..5}ttyS{0..5}ttySAC{0..5}tty{0..5}
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottm-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottm-guts.jpg.sha1
deleted file mode 100644
index eb08fb82de6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottm-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a4ff026abb23d17ee5c4bab41d7034e3e1e0629f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottom.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottom.jpg.sha1
deleted file mode 100644
index 3ddea35069e..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottom.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-68b91896a83801f54f3b95c15a994be733abe6ec \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-top-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-top-guts.jpg.sha1
deleted file mode 100644
index 51475d4f95a..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-top-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8cc812401ef0e896949b49099e350be8c4f9041e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/back.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/back.jpg.sha1
deleted file mode 100644
index d9d61fca5a7..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/back.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a7a669bab3f8d1902151632674930578e83497e7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/index.md
deleted file mode 100644
index 451721ec122..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/index.md
+++ /dev/null
@@ -1,297 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: acer-ac700-chromebook
-title: Acer AC700 Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Acer AC700
-Chromebook](http://us.acer.com/ac/en/US/content/ac700-home) that is interesting
-and/or useful to software developers. For general information about getting
-started with developing on Chromium OS (the open-source version of the software
-on Chrome OS devices), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-## Entering Developer Mode
-
-You might want to enter developer mode if you're following the instructions in
-the [Chromium OS Developer Guide](/chromium-os/developer-guide), or if you just
-want to get access to a shell on your device to [poke
-around](/chromium-os/poking-around-your-chrome-os-device).
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Developer mode on the Acer AC700 has two levels of access, "dev-switch on" and
-"dev-mode BIOS". With the first level you enable a command line shell, which
-lets you look around inside the GNU/Linux operating system, but does not let you
-run your own versions. The second level of access installs a special BIOS
-component that provides the ability to boot your own operating systems from
-either removable (USB/SD) or fixed (SSD) drives. Both levels of access are
-completely reversible, so don't be afraid to experiment.
-
-### Developer switch
-
-The developer switch enables the command line shell. The switch is underneath
-the chromebook battery. To enable the developer switch you remove the battery,
-use something pointy to move the switch towards the side with the red dot above
-it, and reboot. Note: **be gentle**! Some people have reported that the
-developer switch breaks easily.
-The first time you reboot after turning the developer switch on, your chromebook
-will:
-
-* ***************Show a scary warning that its software cannot be
- trusted, since a command line shell is enabled (press Ctrl-D or wait
- 30 seconds to dismiss).***************
-* ***Erase all personal data on the "stateful partition" (i.e., user
- accounts and settings - no worries, though, since all data is in the
- cloud!).***
-* ******Make you wait between 5 and 10 minutes while it erases the data.******
-
-The erase and wait steps only happen when you first enable the developer switch,
-to help prevent someone from quickly reimaging your device while you're away
-from the keyboard. Successive boots will:
-
-* ***************Show the same scary warning (press Ctrl-D or wait 30
- seconds to dismiss).***************
-* *********Continue to boot only Google-signed images, and only from
- the SSD.*********
-
-At this point, verified boot is still active but because a command line shell is
-enabled, your system is **NOT** secure. Refer to [Poking around your Chrome OS
-Notebook](/chromium-os/poking-around-your-chrome-os-device) to see how to access
-the command line shell. The message displayed at the shell itself should tell
-you how to set your own password to protect shell access and make your system
-secure again.
-Here's a photo showing the location of the developer switch:
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/newback.jpg"
-height=300
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/newback.jpg)
-
-### Developer-mode BIOS
-
-If you want to make modifications to the Chrome OS filesystem or boot your own
-version of Chromium OS, you'll need to activate the second level of developer
-access. You do this by running a special command from the command line shell.
-You first log in with the username 'chronos' (if you've set a shell password,
-you'll be prompted for it). Then you switch to the 'root' account, and run the
-command to install the developer-mode BIOS. For example:
-
-localhost login: **chronos**
-chronos@localhost $ **sudo bash**
-localhost chronos # **chromeos-firmwareupdate --mode=todev**
-
-### What's going on here?
-
-[Verified boot](/chromium-os/chromiumos-design-docs/verified-boot) is the
-process by which Chrome OS ensures that you are running only the software that
-shipped with your chromebook. The process starts with the read-only BIOS, which
-is built into the device at the factory and can't be modified without
-disassembly (please don't try that; you'll void your warranty). The read-only
-BIOS verifies one of two read-write BIOSes (there are two so we can provide
-updates if we have to with less risk of failure) and continues execution there.
-The read-write BIOS then verifies one of two (same reason) kernels and executes
-that, and the kernel verifies its root filesystem as each block is read off the
-SSD.
-The normal read-write BIOSes will only boot Google-signed kernels, and only from
-the SSD. When you run the chromeos-firmwareupdate command above, you are
-replacing the primary read-write BIOS with a different one that will allow any
-self-signed kernel (refer to the [Chromium OS Developer
-Guide](/chromium-os/developer-guide)) to boot from either a removable device (by
-pressing Ctrl-U at the scary boot screen) or from the SSD (press Ctrl-D or wait
-30 seconds).
-
-## How to boot your own image from USB
-
-* Follow the steps above to turn on the developer switch and to
- install the developer-mode BIOS.
-* Build a Chrome OS image using the steps in the [Chromium OS
- Developer Guide](/chromium-os/developer-guide). It does not need to
- be a recovery image.
-* Insert the removable drive containing your image into the left side
- USB slot.
-* If you use the one on the right, the USB stick's light will flash,
- but the screen will stay black and the machine won't boot.
-* Reboot, and when you see the blue scary boot screen, press Ctrl-U.
-* It should boot your image. If for some reason it doesn't think your
- image is valid it will just beep once instead.
-
-## How to install your own Chromium OS image on your SSD
-
-If you follow the full instructions from the [Chromium OS Developer
-Guide](/chromium-os/developer-guide), you will eventually end up with a bootable
-USB drive containing your image. You can boot that image directly from the USB
-drive as described above. Since it's your personal image, it should have shell
-access enabled. Log in as user "chronos" and run
-
-```none
-/usr/sbin/chromeos-install
-```
-
-That will wipe the SSD and install your image on it instead. When you reboot, it
-should attempt to boot your version. You'll still continue to see the scary boot
-screen at every boot, of course, as long as you are in developer mode and have
-the developer-mode BIOS installed, so you'll need to press Ctrl-D or wait 30
-seconds to boot.
-
-## Leaving Developer Mode
-
-To leave developer mode, simply flip the developer-mode switch back to the OFF
-position and reboot. One of two things will happen. If your chromebook still has
-a valid read-write normal-mode BIOS, Google-signed kernel, and an unmodified
-Chrome OS root filesystem, then that's what will boot and you'll be back running
-the official Chrome OS image. Or, if you've modified any part of the verified
-boot chain so that a full verified boot process isn't possible, you'll be
-dropped into [recovery mode](http://www.google.com/chromeos/recovery). That will
-require you to create a bootable USB key to restore your chromebook to its
-fresh-from-the-factory state. That's annoying, but not dangerous. As long as you
-haven't taken the device apart, you shouldn't be able to permanently break
-anything.
-In either case, all personal information will be wiped from the device during
-the transition.
-
-### One other thing to try first
-
-When the developer switch is on, the BIOS is not updated by any automatic Chrome
-OS updates. If you don't think you changed anything but you still end up in
-recovery mode, it may be that you've haven't applied a pending firmware update.
-Turn the developer switch back on, reboot, and from a root shell run
-
-```none
-chromeos-firmwareupdate --mode tonormal
-```
-
-That will restore the primary read-write BIOS to normal mode, which may restore
-the verified boot process. Turn the developer switch off again and reboot. If
-you still end up in recovery mode, you'll just have to use the recovery process
-to fix it.
-
-## How to use the Recovery Mode button
-
-Recovery mode is a special boot operation in which the BIOS will:
-
-* Refuse to boot from the SSD
-* Prompt you to insert a recovery USB drive
-* Only boot a Google-signed image from the USB drive
-
-You will encounter recovery mode when the BIOS is unable to find a valid kernel
-to boot, either because the SSD has become corrupted or (more likely) because
-you modified all the kernel partitions while in developer mode and have switched
-back to normal mode. While in developer mode, you will be presented with the
-scary boot screen at every boot. Pressing SPACE or RETURN will take you to
-recovery mode.
-
-You can also force your chromebook into recovery mode (even in normal mode) by
-using the recovery mode button. On the bottom of the Acer AC700 on the side
-nearest the Enter key, there is a tiny pinhole:
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/back.jpg"
-height=300
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/back.jpg)
-
-If you stick a paperclip into this hole, you'll feel it press a button. To force
-recovery mode, turn the device off, press this button, and while keeping it
-pressed, turn the device on again. This sometimes requires three hands or a bit
-of contortion, but you'll know it worked when you see the recovery screen
-instead of booting normally.
-
-## Firmware
-
-See the [H2C firmware
-page](/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware) for
-more details.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for high res versions):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottom.jpg"
-height=224
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottom.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottm-guts.jpg"
-height=182
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-bottm-guts.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-top-guts.jpg"
-height=230
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/acer-zgb-top-guts.jpg)
-
-However, we acknowledge that some people like to tinker. So here's a quick guide
-to taking it apart.
-
-#### Access to upgradable/cleanable components
-
-This is very easy to do and gets you access to all the pieces you most likely
-care about:
-
-* The hard drive is easy to remove & replace/upgrade
- * It is a standard SATA port, the form factor only allows
- [Sandisk's
- pSSD](http://www.ssd.gb.com/Products/SanDisk_Industrial_and_Enterprise/End_Of_Life/pSSD_Solid_State_Drive_(SATA)_P4Model/index.php)
- * Once you remove the two screws, use the black cover tab to pull
- down & remove the module
-* The memory slots is easy to access
- * The system uses 204-Pin DDR3 SO-DIMM laptop memory
-* The wifi module is easily removable (two screws)
-* The RTC battery can be replaced
-
-And here's the details:
-
-* Get a smallish phillips head screw driver -- all screws can be
- removed with just this
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up and the speakers are
- closest to you
-* Remove the three screws in the middle (on the visible plastic piece)
-* Use the tab on the right side of the plastic piece to pop it off
-
-Check out the high res picture above for overview.
-
-#### Access to the rest of the machine
-
-While it is possible to remove the motherboard entirely, there isn't much of a
-point. You can see a high res image of what it looks like above if you just want
-that.
-
-If you really want to remove it, then here's how:
-
-* Remove the 9 screws from the outer edges of the bottom of the case
-* Flip it over and open the display
-* The top & bottom of the case should be slightly separated so you can
- now remove the keyboard
- * There are no screws holding it in, just tabs along the
- top/bottom
- * Slowly work it until you can pull it straight up through the top
- half of the case
-* Remove all the visible screws that were under the keyboard (there
- are a bunch)
-* Pull the top half of the case off from the bottom
-* Remove all the visible screws from the motherboard (there are only a
- few)
-* Pop the wires off of the wifi & cellular modem
-* Remove the screws from both screen hinges
- * Be careful as the LCD wire shouldn't really be removed
-* Disconnect the speakers and led module (bottom left)
-* Pull the motherboard out of the case \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/newback.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/newback.jpg.sha1
deleted file mode 100644
index 8c0b7425a2c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook/newback.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0daf2611e8af5bf682d7d7800a9fdbf6a0905b1d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-card-front.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-card-front.jpg.sha1
deleted file mode 100644
index a3de0917e7c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-card-front.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-82bfc226397cb3b4209b8e55069174085b46fe44 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-front.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-front.jpg.sha1
deleted file mode 100644
index 0dd116130d4..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-front.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-17dcf16b9c2e38be55eb2152ecdcb982a7424892 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-10-side-right-grey.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-10-side-right-grey.jpg.sha1
deleted file mode 100644
index c6d1d625714..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-10-side-right-grey.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a200b4a1028ca7d06c16283f94a6f2ade065f9de \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-2-front-grey.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-2-front-grey.jpg.sha1
deleted file mode 100644
index ca3fd908a98..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-2-front-grey.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cbdce9fb51157c7bc48ba70ad49112df43ec8458 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-4-left-grey.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-4-left-grey.jpg.sha1
deleted file mode 100644
index ed3473f22d9..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-4-left-grey.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1c6846adb6974544260b65eb752e22baadfda014 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-5-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-5-right.jpg.sha1
deleted file mode 100644
index 6324a96ff76..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-5-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e57a7a5b861911760be07f89c494acaf8fb42402 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-6-right-grey.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-6-right-grey.jpg.sha1
deleted file mode 100644
index 27d3841db28..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-6-right-grey.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c5445a8d8e7511fe64d33886b2495bd9b23db517 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-7-side-left.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-7-side-left.jpg.sha1
deleted file mode 100644
index 60515bf0bdf..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-7-side-left.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-33373095144002e17c0505c9a98d38a427aafd64 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-8-side-left-grey.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-8-side-left-grey.jpg.sha1
deleted file mode 100644
index 271f60b4c06..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-8-side-left-grey.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-61133e378ca7d5e89090ff8accdcc812850fd1b5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-9-side-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-9-side-right.jpg.sha1
deleted file mode 100644
index f1a4042d56d..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-9-side-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-33e763919d336eacb8a8d4ac3cf2016d9022333d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/index.md
deleted file mode 100644
index a5cd4238efe..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/index.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: acer-c670-chromebook
-title: Acer C670 Chromebook 11
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Acer Chromebook 11
-(C670)](https://store.google.com/product/acer_chromebook_11) that is interesting
-and/or useful to software developers. For general information about getting
-started with developing on Chromium OS (the open-source version of the software
-on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-1-front.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-2-front-grey.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-4-left-grey.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-5-right.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-6-right-grey.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-7-side-left.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-8-side-left-grey.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-9-side-right.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook/gallery-AcerChromebook11-10-side-right-grey.jpg"
-height=150 width=200>
-
-### Specifications
-
-* Dimensions: 299 x 202 x 18.65 mm
-* Weight: 1.1 kg (2.43 lbs)
-* CPU: Broadwell Intel Celeron Dual-Core
- [N2830](http://ark.intel.com/products/81071/Intel-Celeron-Processor-N2830-1M-Cache-up-to-2_41-GHz)
-* RAM: 2GiB DDR3 (Not upgradeable)
-* Display: 11.6" 1366x768 16:9
-* Disk: 16GB SSD
-* I/O:
- * HDMI port
- * 1 x USB 2.0
- * 1 x USB 3.0
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11 a/b/g/n/ac
- * Bluetooth 4.0
- * USB ports can handle some Ethernet dongles
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* Linux 3.14
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-paine-6301.58.B)
-in the `firmware-paine-6301.58.B` branch.
-
-#### Firmware Write Protect
-
-The screw is next to the socket of the wifi card. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-guts.jpg.sha1
deleted file mode 100644
index 202188bef3c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5aa0421c168305ac55f979bd633865a97df15bde \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-screws.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-screws.jpg.sha1
deleted file mode 100644
index 8197a427dc7..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-screws.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1e0f110a572743b7808cb7f8d0e0d98618075cdf \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-case-bottom.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-case-bottom.jpg.sha1
deleted file mode 100644
index 7f437488681..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-case-bottom.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5993863e6572a0727688d5aa300a399a04ed77fe \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-top-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-top-guts.jpg.sha1
deleted file mode 100644
index cb5efcdfc37..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-top-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-468a82f25f8894bb982bbff7d49b72757485bcf1 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/index.md
deleted file mode 100644
index 6645cb6bc6d..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/index.md
+++ /dev/null
@@ -1,225 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: acer-c7-chromebook
-title: Acer C7 Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Acer C7
-Chromebook](http://www.google.com/intl/en/chrome/devices/acer-c7-chromebook.html)
-that is interesting and/or useful to software developers. For general
-information about getting started with developing on Chromium OS (the
-open-source version of the software on the Chrome Notebook), see the [Chromium
-OS Developer Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Intel [Sandy Bridge](http://en.wikipedia.org/wiki/Sandy_Bridge)
- Celeron (might vary on specific model)
- * Some later models shipped [Ivy
- Bridge](http://en.wikipedia.org/wiki/Ivy_Bridge_(microarchitecture));
- those will use the parrot_ivb board
-* GPU: Intel [Sandy Bridge](http://en.wikipedia.org/wiki/Sandy_Bridge)
- Mobile
- * 11.6" 1366x768 16:9
- * HDMI port
- * VGA port
-* RAM: 2 GiB or 4GiB DDR3 (might vary on specific model)
-* Disk: 320 GiB HD or 16 GiB SSD (might vary on specific model)
- * USB expansion ports
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
-* Networking
- * WiFi 802.11 a/b/g/n
- * Dedicated Ethernet port
- * USB ports can handle Ethernet dongles
-* Power supply: 19V <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg"
- height=5> ([DC](http://en.wikipedia.org/wiki/Direct_current)) 2.15A
- <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg"
- height=12> ([positive polarity
- tip](http://en.wikipedia.org/wiki/Polarity_symbols))
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* [Servo header](/chromium-os/servo): 1x50 header (now obsolete)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized. Our partners don't really like physical switches - they cost money,
-take up space on the motherboard, and require holes in the case.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and poke
-the Power button.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Legacy Boot
-
-Sorry, but this device does not support a legacy BIOS mode. It predates the
-launch of that feature and it is not feasible to produce updates of devices in
-the field.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) and [Das
-U-Boot](http://www.denx.de/wiki/U-Boot) to boot the system. You can find the
-source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-parrot-2685.B)
-and the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-parrot-2685.B)
-in the `firmware-parrot-2685.B` branches.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for high res versions):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-guts.jpg"
-height=221
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-guts.jpg)
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-top-guts.jpg"
-height=226
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-top-guts.jpg)
-
-However, we acknowledge that some people like to tinker. So here's a quick guide
-to taking it apart.
-
-#### Access to upgradable/cleanable components
-
-This is very easy to do and gets you access to all the pieces you most likely
-care about:
-
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-case-bottom.jpg"
-height=277 width=400>
-
-* The hard drive is easy to remove & replace/upgrade
- * 2.5" SATA 2 or SATA 3 drives should work
- * try to get a 7mm tall one (9.5mm will fit, just sans padding)
-* The two memory slots are easy to access
- * The system uses 204-Pin DDR3 SO-DIMM laptop memory
-* The wifi module is easily removable (one screw)
-* The exhaust fan is easily removed (two screws) for cleaning
-
-And here's the details (see image on right for more details):
-
-* Get a smallish phillips head screw driver -- all screws can be
- removed with just this
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up and the warranty
- seal is closest to you
-* (Step 1) Break the seal that says "warranty is void if seal is
- broken" -- be aware, you might void your warranty by breaking the
- seal :)
-* (Step 1) Remove the single screw under the seal
-* (Step 2) Remove the battery
- * (Step 2a) There is a slide near the edge of the battery in the
- upper right section -- put the tip of the screw driver into the
- divot and slide it to the right to unlock the battery
- * (Step 2b) While the battery is unlocked, pull it out
-* (Step 3) Place your thumbs on the bottom two feet and pull towards
- you
- * Alternatively, you can pull on the edge where the battery was
-
-Check out the high res picture above for overview.
-
-#### Access to the rest of the machine
-
-While it is possible to remove the motherboard entirely, there isn't much of a
-point. You can see a high res image of what it looks like above if you just want
-that.<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook/acer-c7-bottom-screws.jpg"
-height=222 width=320>
-
-If you really want to remove it, then here's how:
-
-* Remove the 18 screws holding it down (does not include the warranty
- screw)
- * 4 screws: one next to each of the rubber feet
- * 11 screws labeled M2x6 (including one on the cooling fan)
- * 1 screw labeled M2x3 (near the memory module)
- * 1 screw on the the cooling fan (kitty corner to the M2x6 one)
- * 1 screw on the wireless module
- * You do not have to remove other screws (like the ones around the
- cpu)
-* The top part of the case is now held to the bottom by plastic tabs
- around the edge
-* Turn the computer onto its side and slowly pry it apart
- * Switch between the sides to slowly work it apart
- * You can press on the center of the motherboard where the empty
- memory slot is to help
-
-#### Firmware Write Protect
-
-It's a jumper next to the CPU under the black plastic. See the pictures above
-for more details. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png.sha1
deleted file mode 100644
index e619caeefba..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bc910e59dc1ccf0e0e28c06b8d0a6041dc638ac9 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards-small.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards-small.png.sha1
deleted file mode 100644
index fc8038639f3..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards-small.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b2843313fca7a4040f0c5d60c6acbf4f0128cac5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards.png.sha1
deleted file mode 100644
index e8124dbba5c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0dd38b61722413ea3583684581198ff9511e7af5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/index.md
deleted file mode 100644
index 0f977b229e6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/index.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: acer-c720-chromebook
-title: Acer C720 & C720P & C740 Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Acer C720
-Chromebook](https://www.google.com/intl/en/chrome/devices/acer-c720-chromebook/)
-and [Acer C720P
-Chromebook](https://www.google.com/intl/en/chrome/devices/acer-c720p-chromebook/)
-and [Acer C740
-Chromebook](http://us.acer.com/ac/en/US/content/series/chromebook11c740) that is
-interesting and/or useful to software developers. For general information about
-getting started with developing on Chromium OS (the open-source version of the
-software on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Haswell Celeron 2995U. 1.4GHz, dual-core, 2MB Cache
-* RAM: 2GiB or 4GiB DDR3 (Not upgradeable)
-* Display: 11.6" TN 1366x768. 220 nits.
-* Disk: 16GB SSD
- ([NGFF](http://en.wikipedia.org/wiki/Next_Generation_Form_Factor)
- M.2 connector)
-* I/O:
- * HDMI port
- * 1 x USB 2, 1 x USB 3
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
- * Touchscreen (C720P model)
-* Connectivity:
- * WiFi: 802.11 a/b/g/n
- * USB ports can handle some Ethernet dongles
- * [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized. Our partners don't really like physical switches - they cost money,
-take up space on the motherboard, and require holes in the case.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and poke
-the Power button.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Legacy Boot
-
-This device includes the SeaBIOS firmware which supports booting images directly
-like a legacy BIOS would. Note: the BIOS does not provide a fancy GUI for you,
-nor is it easy to use for beginners. You will need to manually boot/install your
-alternative system.
-
-Like USB boot, support for this is disabled by default. You need to get into
-Dev-mode first and then run:
-
-```none
-sudo crossystem dev_boot_legacy=1
-```
-
-and reboot once to boot legacy images with Ctrl-L.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Troubleshooting
-
-### Legacy Boot Doesn't Work
-
-Sometimes it's possible to break the SeaBIOS install in the flash (sometimes
-doing innocuous things like tweaking the GBB flags). If you do get into such a
-situation:
-
-* Check that dev_boot_legacy is set to 1 when you run crossystem
- * If it isn't, then see the normal Legacy Boot section above
- * if it is, then see below
-
-You can safely reset the copy of SeaBIOS in your flash by running (as root):
-
-```none
-# chromeos-firmwareupdate --sb_extract /tmp
-# flashrom -w /tmp/bios.bin -i RW_LEGACY
-```
-
-## Running Chromium OS
-
-Before you start fiddling with your own builds it is strongly recommend to
-create a recovery USB stick or SD card. As long as you don't disable hardware
-write protect on the system & EC firmware, you can get your machine back into
-working order by entering Recovery Mode and plugging in your recovery image. You
-can create a recovery image from Chrome OS by browsing to
-[chrome://imageburner](javascript:void(0);) or follow instructions for other OS
-on the [Chrome OS help
-center](https://support.google.com/chromebook/answer/1080595?hl=en) site.
-
-You can build and run Chromium OS on your Acer C720 (versions R32 and later).
-Follow the [quick start guide](/chromium-os/quick-start-guide) to setup a build
-environment. The board name for the Acer C720 is "peppy". Build an image and
-write it to a USB stick or SD card.
-
-To boot your image you will first need to enable booting developer signed images
-from USB (or SD card). Switch your machine to Developer mode and get to a shell
-by either via VT2 (Ctrl+Alt+F2) and logging in as root or by logging in as a
-user (or guest mode), starting a "crosh" shell with Ctrl+Alt+t, and typing
-"shell". Now run "sudo crossystem dev_boot_usb=1" and reboot "sudo reboot".
-
-Plug your USB stick or SD card in and on the scary "OS Verification is OFF"
-screen hit Ctrl+u to boot from external media. If all goes well you should see a
-"Chromium OS" logo screen. If you want to install your build to the SSD, open a
-shell and type "sudo /usr/sbin/chromeos-install". Note: This will replace
-EVERYTHING on your SSD. Use a recovery image if you want to get back to a stock
-Chrome OS build.
-
-Have fun!
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-falco_peppy-4389.B)
-in the `firmware-falco_peppy-4389.B` branches.
-
-## Disclaimer
-
-**Caution: Modifications you make to your Chromebook's hardware or software are
-not supported by Google, may compromise your online security, and may void your
-warranty....now on to the fun stuff.**
-
-## What's Inside?
-
-Taking apart your Chromebook is **not** encouraged. If you have hardware
-troubles, please seek assistance first from an authorized center. Be advised
-that disassembly might void warranties or other obligations, so please consult
-any and all paperwork your received first. If you just want to see what the
-inside looks like, gaze upon this ([high-res
-version](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-innards.png)):
-
-<img alt="c720 innards"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png">
-
-1. CPU
-2. RAM
-3. System firmware. 8MB SPI Flash.
-4. NGFF (M.2) SSD
-5. Battery enable switch
-6. Battery enable screw
-7. Write-protect screw
-8. [Servo debug header](/chromium-os/servo) (probably missing on your
- machine)
-9. NGFF (M.2) WWAN connector (probably missing on your machine)
-
-Notes:
-
-* While it is possible to replace the NGFF (M.2) SSD, compatibility is
- not guaranteed. Reliability and power use may vary. If you install
- Chrome OS using a recovery image, the recovery process will
- partition the drive to use the full capacity.
-* The battery enable switch and battery enable screw are a safety
- mechanism to prevent the Acer C720 from being powered by the battery
- while the cover is removed. Either the swich must be pressed OR a
- screw inserted into #6 to power the device from the battery.
-* The debug header (probably missing) has access to all sorts of
- useful things like a serial UART from the EC and PCH, JTAG for the
- EC, and SPI for the system firmware.
-* The NGFF (M.2) WWAN connector (probably missing on WiFi models) has
- enabled USB + PCIe lines and connections to the SIM card reader.
-* The NGFF (M.2) WWAN connector cannot be connected to a SATA device
- as its SATA pins are not connected to the PCH. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0000_Acer-Chromebook-15-01-front.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0000_Acer-Chromebook-15-01-front.jpg.sha1
deleted file mode 100644
index 73a4af254e0..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0000_Acer-Chromebook-15-01-front.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-47173fb811bd735df36d8b0e1ef1f8de3d1bcd64 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0001_Acer-Chromebook-15-02-left.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0001_Acer-Chromebook-15-02-left.jpg.sha1
deleted file mode 100644
index b108177f0ec..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0001_Acer-Chromebook-15-02-left.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5084aa153ffd6138bb3b128a044db337ffa57153 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0002_Acer-Chromebook-15-03-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0002_Acer-Chromebook-15-03-right.jpg.sha1
deleted file mode 100644
index 35ec3fdaffd..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0002_Acer-Chromebook-15-03-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fa034f4c6c0f49cc8bbb1931722d9f00a7cb838c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0003_Acer-Chromebook-15-04-side-left.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0003_Acer-Chromebook-15-04-side-left.jpg.sha1
deleted file mode 100644
index 24dea41c38e..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0003_Acer-Chromebook-15-04-side-left.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8d9566d3a7a3da540e02f4da65991cd59aa8d648 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0004_Acer-Chromebook-15-05-side-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0004_Acer-Chromebook-15-05-side-right.jpg.sha1
deleted file mode 100644
index 06a43feeda3..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0004_Acer-Chromebook-15-05-side-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-731435ff0bcb87064948b588177fc551330ced13 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0005_Acer-Chromebook-15-06-group-black.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0005_Acer-Chromebook-15-06-group-black.jpg.sha1
deleted file mode 100644
index b865bb0e3db..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0005_Acer-Chromebook-15-06-group-black.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8c890fe1a9c3e38a3539f413cf5bdff9180a6ef0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0006_Acer-Chromebook-15-07-group-white.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0006_Acer-Chromebook-15-07-group-white.jpg.sha1
deleted file mode 100644
index 5c666a734bf..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0006_Acer-Chromebook-15-07-group-white.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cfc176517711d8a999f04cbe8d4d7dbc4cbbe85c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/index.md
deleted file mode 100644
index fb188d71bb7..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: acer-c910-chromebook
-title: Acer C910 Chromebook 15
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Acer Chromebook 15
-(C910)](https://store.google.com/product/acer_chromebook_15) that is interesting
-and/or useful to software developers. For general information about getting
-started with developing on Chromium OS (the open-source version of the software
-on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0000_Acer-Chromebook-15-01-front.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0001_Acer-Chromebook-15-02-left.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0002_Acer-Chromebook-15-03-right.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0003_Acer-Chromebook-15-04-side-left.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0004_Acer-Chromebook-15-05-side-right.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0005_Acer-Chromebook-15-06-group-black.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook/chromebook_0001s_0006_Acer-Chromebook-15-07-group-white.jpg"
-height=150 width=200>
-
-### Specifications
-
-* Dimensions: 383 x 256 x 24.2 mm
-* Weight: 2.2 kg (4.85 lbs)
-* CPU: Broadwell Intel Celeron Dual-Core
- [3250U](http://ark.intel.com/products/74744/Intel-Core-i3-3250-Processor-3M-Cache-3_50-GHz)
-* RAM: 2GiB or 4GiB DDR3 (Not upgradeable)
-* Display: 15.6" 1920x1080
-* Disk: 16GB or 32GB SSD
-* I/O:
- * HDMI port
- * 1 x USB 2.0
- * 1 x USB 3.0
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11 a/b/g/n/ac
- * Bluetooth 4.0
- * USB ports can handle some Ethernet dongles
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* Linux 3.14
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-yuna-6301.59.B)
-in the `firmware-yuna-6301.59.B` branch. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-card-front.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-card-front.jpg.sha1
deleted file mode 100644
index f8fc21c37cf..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-card-front.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-38105cfcf9ea3217e7abfa68b228bb656812556b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-front.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-front.jpg.sha1
deleted file mode 100644
index edf2bcb69d6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-front.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-339d1916240ae41a869339925dadf3994afd4a23 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-2-left.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-2-left.jpg.sha1
deleted file mode 100644
index 44bbf3a4c6f..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-2-left.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cf75624159dfb513b2e0db4701807f19a54b8ceb \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-3-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-3-right.jpg.sha1
deleted file mode 100644
index b1c72738885..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-3-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4c48cb6b260f1eb153e11b6595f32da0b8c15edb \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-4-side-left.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-4-side-left.jpg.sha1
deleted file mode 100644
index b3bb938d260..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-4-side-left.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3b5c0d55d2ba337b8ee348e7f9b8a31408ed804c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-5-side-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-5-side-right.jpg.sha1
deleted file mode 100644
index 83d3c10ccbf..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-5-side-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1db202217ae6723108d2c3b338384b3214bbfb1c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/index.md
deleted file mode 100644
index 11f74fd09eb..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/index.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: acer-cb5-311-chromebook-13
-title: Acer CB5-311 Chromebook 13
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Acer Chromebook 13
-(CB5-311)](https://store.google.com/product/acer_chromebook_13) that is
-interesting and/or useful to software developers. For general information about
-getting started with developing on Chromium OS (the open-source version of the
-software on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-1-front.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-2-left.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-3-right.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-4-side-left.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13/gallery-Acer-Chromebook13-5-side-right.jpg"
-height=150 width=200>
-
-### Specifications
-
-* Dimensions: 328 x 229 x 18.0 mm
-* Weight: 1.5kg (3.31 lbs)
-* CPU: NVIDIA [Tegra Logan
- K1](http://www.nvidia.com/object/tegra-k1-processor.html) quad-core
- Cortex-A15
-* RAM: 2GiB DDR3 (Not upgradeable)
-* Display: 13.3" 1920x1080 16:9 TN 200 nits
-* Disk: 16GB SSD
-* I/O:
- * HDMI port
- * 2 x USB 3.0
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11 a/b/g/n/ac
- * Bluetooth 4.0
- * USB ports can handle some Ethernet dongles
-* no [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* Linux 3.10
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized. Our partners don't really like physical switches - they cost money,
-take up space on the motherboard, and require holes in the case.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and poke
-the Power button.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-Note: Only CrOS formatted images will boot via USB. Other Linux distros will not
-work.
-
-### Legacy Boot
-
-Sorry, but this device does not support a legacy BIOS mode. It has an ARM cpu,
-so there is no such mode anyways.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-nyan-5771.B)
-in the `firmware-nyan-5771.B` branch. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox/index.md
deleted file mode 100644
index 06654c95af1..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox/index.md
+++ /dev/null
@@ -1,166 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: asus-chromebox
-title: Asus Chromebox
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the Asus Chromebox that is interesting
-and/or useful to software developers. For general information about getting
-started with developing on Chromium OS (the open-source version of the software
-on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Haswell Celeron 2995U. 1.4GHz, dual-core, 2MB Cache OR 1.7 GHz
- Core i3-4010U, quad-core
-* RAM: 2GB (celeron) or 4GB (i3)
-* Display: None
-* Disk: 16GB SSD
- ([NGFF](http://en.wikipedia.org/wiki/Next_Generation_Form_Factor)
- M.2 connector)
-* I/O:
- * HDMI port
- * DisplayPort++
- * 4 x USB 3.0
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
-* Connectivity:
- * WiFi: 802.11 a/b/g/n
- * USB ports can handle some Ethernet dongles
- * Ethernet
- * [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-**Introduction**
-
-Enabling Developer mode is the first step to tinkering with your Chromebox. With
-Developer mode enabled you can do things like poke around on a command shell (as
-root if you want), install Chromium OS, or try other OS's. Note that Developer
-mode turns off some security features like verified boot and disabling the shell
-access. If you want to browse in a safer, more secure way, leave Developer mode
-turned OFF. Note: Switching between Developer and Normal (non-developer) modes
-will remove user accounts and their associated information from your Chromebox.
-
-### Entering
-
-To invoke Recovery mode, you insert a paper clip and press the RECOVERY BUTTON
-(just above the kensington lock) and press the Power button. Release the
-RECOVERY BUTTON after a second.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm by pressing the RECOVERY BUTTON again.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell (Ctrl-Alt-F2), you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Legacy Boot
-
-This device includes the SeaBIOS firmware which supports booting images directly
-like a legacy BIOS would. Note: the BIOS does not provide a fancy GUI for you,
-nor is it easy to use for beginners. You will need to manually boot/install your
-alternative system.
-
-Like USB boot, support for this is disabled by default. You need to get into
-Dev-mode first and then run:
-
-```none
-sudo crossystem dev_boot_legacy=1
-```
-
-and reboot once to boot legacy images with Ctrl-L.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Troubleshooting
-
-### Legacy Boot Doesn't Work
-
-Sometimes it's possible to break the SeaBIOS install in the flash (sometimes
-doing innocuous things like tweaking the GBB flags). If you do get into such a
-situation:
-
-* Check that dev_boot_legacy is set to 1 when you run crossystem
- * If it isn't, then see the normal Legacy Boot section above
- * if it is, then see below
-
-You can safely reset the copy of SeaBIOS in your flash by running (as root):
-
-```none
-# chromeos-firmwareupdate --sb_extract /tmp
-# flashrom -w /tmp/bios.bin -i RW_LEGACY
-```
-
-## Running Chromium OS
-
-Before you start fiddling with your own builds it is strongly recommend to
-create a recovery USB stick or SD card. As long as you don't disable hardware
-write protect on the system & EC firmware, you can get your machine back into
-working order by entering Recovery Mode and plugging in your recovery image. You
-can create a recovery image from Chrome OS by browsing to chrome://imageburner
-or follow instructions for other OS on the [Chrome OS help
-center](https://support.google.com/chromebook/answer/1080595?hl=en) site.
-
-You can build and run Chromium OS on your Asus Chromebox (versions R32 and
-later). Follow the [quick start guide](/chromium-os/quick-start-guide) to setup
-a build environment. The board name for the Asus Chromebox is "panther". Build
-an image and write it to a USB stick or SD card.
-
-To boot your image you will first need to enable booting developer signed images
-from USB (or SD card). Switch your machine to Developer mode and get to a shell
-by either via VT2 (Ctrl+Alt+F2) and logging in as root or by logging in as a
-user (or guest mode), starting a "crosh" shell with Ctrl+Alt+t, and typing
-"shell". Now run "sudo crossystem dev_boot_usb=1" and reboot "sudo reboot".
-
-Plug your USB stick or SD card in and on the scary "OS Verification is OFF"
-screen hit Ctrl+u to boot from external media. If all goes well you should see a
-"Chromium OS" logo screen. If you want to install your build to the SSD, open a
-shell and type "sudo /usr/sbin/chromeos-install". Note: This will replace
-EVERYTHING on your SSD. Use a recovery image if you want to get back to a stock
-Chrome OS build.
-
-Have fun!
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-panther-4920.24.B)
-in the `firmware-panther-4920.24.B` branches. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-negative-polarity.svg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-negative-polarity.svg.sha1
deleted file mode 100644
index 95662e77686..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-negative-polarity.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-162e6969b33f92ba32feed6562ac09474eba4270 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg.sha1
deleted file mode 100644
index 767cb394e10..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-db7ba2749f707cadf2b37cfb1ce1e2b7cc736c51 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel-2015/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel-2015/index.md
deleted file mode 100644
index eaedc7b0810..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel-2015/index.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: chromebook-pixel-2015
-title: Chromebook Pixel (2015)
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Chromebook Pixel
-(2015)](http://www.google.com/chromebook/pixel) that is interesting and/or
-useful to software developers. For general information about getting started
-with developing on Chromium OS (the open-source version of the software on the
-Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Intel Core-i5 (dual-core 2.2 GHz) or Core-i7 (dual-core 2.4
- GHz)
-* GPU: Intel HD Graphics 5500
- * 2560x1700 screen
-* RAM: 8 or 16 GiB DDR3 (Not upgradeable)
-* Disk: 32 or 64 GiB SSD
- * SD & USB expansion slots
-* USB 3.0
- * 2 USB Type-C (for charging, display, etc...) ports
- * 2 USB Standard A ports
-* WiFi: 802.11 a/b/g/n/ac
- * USB slot can handle Ethernet dongle
-* Bluetooth 4.0
-* No [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and press
-the Power button.
-
-To enter Dev-mode, you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-## Troubleshooting
-
-### Won't boot? Power button does nothing?
-
-Make sure you don't have your Pixel stacked on top of another Pixel (or possibly
-other laptop), as the sensor for detecting the screen closed will activate from
-the magnet in the device below, preventing booting.
-
-### Firmware Event Log
-
-The Pixel firmware saves an event log to read-write flash that can be useful for
-troubleshooting your device.
-
-The event log is based on SMBIOS Type 15 Event Log format, but uses a number of
-OEM events to provide additional information. The mosys application that is part
-of Chromium OS can be used to read and decode the log by running **mosys
-eventlog list** as the root user in Chrome OS if the device is in developer mode
-or opening **chrome://system** and looking for the **eventlog** entry in
-normal/verified mode.
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) and
-[Depthcharge](https://chromium.googlesource.com/chromiumos/platform/depthcharge/)
-as a payload to boot the system. See here for a [detailed description of the
-Samus FMAP / firmware flash layout](/chromium-os/firmware-porting-guide/fmap).
-You can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-samus-6300.B)
-and the [Chromium OS depthcharge git
-tree](https://chromium.googlesource.com/chromiumos/platform/depthcharge/+/firmware-samus-6300.B)
-in the `firmware-samus-6300.B` branches.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process. Really, just don't.**
-
-#### Firmware Write Protect
-
-It's the screw (plus a golden washer) between the USB-A connector and the left
-speaker. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/index.md
deleted file mode 100644
index 6c84af50dfa..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/index.md
+++ /dev/null
@@ -1,270 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: chromebook-pixel
-title: Chromebook Pixel (2013)
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Chromebook Pixel
-(2013)](http://www.google.com/chromebook/pixel) that is interesting and/or
-useful to software developers. For general information about getting started
-with developing on Chromium OS (the open-source version of the software on the
-Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Intel Core-i5 3427U (dual-core 1.8 GHz)
-* GPU: Intel HD Graphics 4000
- * 2560x1700 screen
- * Mini DisplayPort
-* RAM: 4 GiB DDR3 (Not upgradeable)
-* Disk: 32 or 64 GiB SSD
- * SD & USB expansion slots
-* WiFi: 802.11 a/b/g/n
- * USB slot can handle Ethernet dongle
- * LTE on some models
-* Bluetooth 3.0
-* No [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and press
-the Power button for at least 200ms (until the keyboard backlight comes on). If
-you don't hold it for long enough, then it won't work.
-
-To enter Dev-mode, you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Legacy Boot
-
-This device includes the SeaBIOS firmware which supports booting images directly
-like a legacy BIOS would. Note: the BIOS does not provide a fancy GUI for you,
-nor is it easy to use for beginners. You will need to manually boot/install your
-alternative system.
-
-Like USB boot, support for this is disabled by default. You need to get into
-Dev-mode first and then run:
-
-```none
-sudo crossystem dev_boot_legacy=1
-```
-
-and reboot once to boot legacy images with Ctrl-L.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-### Installing Linux to the SSD
-
-See the excellent write up by David Miller here:
-<http://vger.kernel.org/~davem/chromebook_pixel_linux.txt>
-
-## Troubleshooting
-
-### Won't boot? Power button does nothing?
-
-Make sure you don't have your Pixel stacked on top of another Pixel (or possibly
-other laptop), as the sensor for detecting the screen closed will activate from
-the magnet in the device below, preventing booting.
-
-### Legacy Boot Doesn't Work
-
-Sometimes it's possible to break the SeaBIOS install in the flash (sometimes
-doing innocuous things like tweaking the GBB flags). If you do get into such a
-situation:
-
-* Check that dev_boot_legacy is set to 1 when you run crossystem
- * If it isn't, then see the normal Legacy Boot section above
- * if it is, then see below
-
-You can safely reset the copy of SeaBIOS in your flash by running (as root):
-
-```none
-# chromeos-firmwareupdate --sb_extract /tmp
-# flashrom -w /tmp/bios.bin -i RW_LEGACY
-```
-
-### Firmware Event Log
-
-The Pixel firmware saves an event log to read-write flash that can be useful for
-troubleshooting your device.
-
-The event log is based on SMBIOS Type 15 Event Log format, but uses a number of
-OEM events to provide additional information. The mosys application that is part
-of Chromium OS can be used to read and decode the log by running **mosys
-eventlog list** as the root user in Chrome OS if the device is in developer mode
-or opening **chrome://system** and looking for the **eventlog** entry in
-normal/verified mode.
-
-Mosys can also be compiled on other Linux distributions, here are instructions
-for Ubuntu that assume basic build and source control tools are installed.
-Unfortunately these same instructions do not work on Fedora because it does not
-provide static libraries for things like UUID.
-
-```none
-# install libuuid headers and static libs
-sudo apt-get install uuid-dev
-# build flashmap library dependency
-git clone https://chromium.googlesource.com/chromiumos/third_party/flashmap/
-cd flashmap
-make
-cd ..
-# build mosys and link statically against flashmap
-git clone https://chromium.googlesource.com/chromiumos/platform/mosys.git
-cd mosys
-make defconfig
-make EXTRA_CFLAGS="-I ../flashmap/lib -static" FMAP_LINKOPT="-I ../flashmap/lib -L ../flashmap/lib -lfmap"
-# run mosys to print event log
-sudo ./mosys eventlog list
-# example output...
-221 | 2013-03-05 08:31:45 | ACPI Wake | S5
-222 | 2013-03-05 08:31:47 | Chrome OS Developer Mode
-223 | 2013-03-05 09:01:03 | Kernel Event | Clean Shutdown
-224 | 2013-03-05 09:01:03 | ACPI Enter | S5
-225 | 2013-03-05 09:01:09 | System boot | 362
-226 | 2013-03-05 09:01:09 | EC Event | Power Button
-227 | 2013-03-05 09:01:09 | ACPI Wake | S5
-228 | 2013-03-05 09:01:09 | Wake Source | PCI PME | 0
-229 | 2013-03-05 09:01:09 | Wake Source | Internal PME | 0
-230 | 2013-03-05 09:01:10 | Chrome OS Developer Mode
-```
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) and [Das
-U-Boot](http://www.denx.de/wiki/U-Boot) to boot the system. You can find the
-source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-link-2695.B)
-and the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-link-2695.B)
-in the `firmware-link-2695.B` branches.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process. Really, just don't.**
-
-### Disassembly
-
-Taking apart your Chromebook is **not** encouraged. If you have hardware
-troubles, please seek assistance first from an authorized center. There's
-nothing inside that you can fix yourself. Be advised that disassembly might
-**void warranties** or other obligations, so please consult any and all
-paperwork you received first. If you just want to see what the inside looks
-like, gaze upon this (click for a high res version):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg"
-height=239
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg)
-
-Fine. If you **must** risk breaking it for good, at least do it the right way.
-
-* First, acquire the necessary tools:
- * 1 small flat head screw driver
- * 1 small Phillips head screw driver
- * 1 [suction
- cup](http://www.amazon.com/TEKTON-5652-4-Inch-Suction-Puller/dp/B000NPR3FW/)
- * No, not one like you use in the shower
- * You can probably make do with a 2", but a 3" or 4" one would
- be much better
- * Multiple suction cups won't really help either (so 2" + 2"
- != 4")
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up and the hinge is
- facing away from you
-* Using a flat head screwdriver, pop the four rubber feet off,
- starting from the edge of the case
-* Using a Phillips head screw driver (PH0), remove the 4 screws under
- the rubber feet
-* Stick the suction cup onto the bottom of the case
- * Center it with respect to the sides (left/right)
- * Place it roughly 1 centimeter from the front (not the hinge)
- side
- * The handle should be parallel with the left/right sides
-* Put one hand on the hinge to hold it down (so that you are not
- touching the case itself)
-* Rotate the suction cup as follows:
- * The handle edge closest to the hinge pulls up
- * The handle edge closest to the front pushes down
- * The side snaps should disengage
-* After the side snaps disengage, you should be able to **gently**
- pull the bottom off
- * Continue applying the rotation force as you do, increasing
- slightly if it does not disconnect
-* If the front edge feels like it isn't coming off, it's probably due
- to the glue
- * Once the back and side snaps have been disconnected, you can
- gently pivot the panel up to force the glue to disconnect
- * The glue is the semi-reusable type you might find with credit
- cards in the mail, so it might sort-of restick itself when you
- close it up, but it's never going to be as good as new. That's
- one of the reasons we suggested you not do this.
-* When you put the bottom back, the hinge-side clips should go in
- first. Don't just jam it on and press down. Sheesh.
-
-#### Firmware Write Protect
-
-It's the screw between the USB connector and the battery.
-
-#### Servo Header
-
-Pixel uses a 1x42 [servo header](/chromium-os/servo) (now obsolete). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts-labeled.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts-labeled.jpg.sha1
deleted file mode 100644
index 1829dc7f7c6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts-labeled.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9144ebd36f891f80c6473462a897c090b9531dd8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg.sha1
deleted file mode 100644
index ca58942f854..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel/link-bottom-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c00fb1941ef2ded93b699c7607dd1d9d9f996b95 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOff.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOff.jpg.sha1
deleted file mode 100644
index 91d8699e956..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOff.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-32ddabb73c762ae16e908d703bfdc673ffd0d039 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.jpg.sha1
deleted file mode 100644
index d00cbd7c9e2..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4eede34a2940c540af319f6ef13c1e3d5265d725 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.png.sha1
deleted file mode 100644
index 70ecdcf95b6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-86232fa30a3c7427fe25f013a2b280bafa40a125 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.jpg.sha1
deleted file mode 100644
index 5fd33382acd..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-96a30d0e788128cd67a4ae9e0525dded0771aa6d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.png.sha1
deleted file mode 100644
index f77aa9fafc5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b524200965c342f3ce592b2ac4119a2061bd85b6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/cr48_recovery_button.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/cr48_recovery_button.jpg.sha1
deleted file mode 100644
index 2e7f26ce748..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/cr48_recovery_button.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8554025121a2183f2c0bf2c760f5ee0a508a6e78 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48/index.md
deleted file mode 100644
index ee2293198b6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48/index.md
+++ /dev/null
@@ -1,615 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-- - /chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information
- - Cr-48 Chrome Notebook Developer Information
-page_name: how-to-boot-ubuntu-on-a-cr-48
-title: How to boot Ubuntu on a Cr-48
----
-
-[TOC]
-
-Introduction
-
-While [Chrome OS verified
-boot](http://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot)
-protects against unintended system modification by malicious or buggy software,
-**the ability to hack your own device is an
-[intentional](/chromium-os/chromiumos-design-docs/developer-mode) design feature
-of Google Chrome notebooks**. The instructions for [building your own version of
-Chromium OS](http://www.chromium.org/chromium-os/developer-guide), and
-installing it on a Cr-48 are given elsewhere. Some enthusiasts, however, may
-want to install something completely different. This page provides an example,
-showing how the official Chrome OS software can coexist with
-[Ubuntu](http://www.ubuntu.com/), a popular linux distribution. I'm assuming
-that you're already somewhat familiar with the Chromium OS development
-environment.
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.** Be very
-careful.
-
-These instructions work on the Cr-48 as originally shipped. There are several
-magic numbers that may change following software updates or on other Chromium
-OS-based machines. Even if the numbers don't exactly match, the basic idea is
-the same.
-
-In the examples below:
-
-```none
-The Cr-48 shell is formatted like this.
-```
-
-```none
-The Chromium OS build chroot is formatted like this.
-```
-
-```none
-The standard linux workstation shell is formatted like this.
-```
-
-Fair warning
-
-This is kind of a cheat. The Cr-48's boot process does not support
-`[initrd](http://www.ibm.com/developerworks/linux/library/l-initrd.html)`, which
-is required by Ubuntu. That leaves us three possibilities:
-
-1. Use the existing Chrome OS kernel with the Ubuntu rootfs.
-2. Recompile the Ubuntu kernel to do without `initrd`
- ([ugh](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48#TOC-Ugh)).
-3. Modify the Chrome OS bootstub to handle `initrd`
- ([double-ugh](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48#TOC-Double-ugh)).
-
-Let's take door #1.
-
-## Free up some SSD space for Ubuntu
-
-To begin our journey, first switch the Cr-48 into [developer
-mode](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information)
-and reboot. When you see the blue frowny face with the "Chrome OS verification
-is turned off" message, either wait 30 seconds or hit Ctrl-D to boot
-immediately. This screen is always shown when booting in developer mode, to
-ensure that someone doesn't change your OS without your knowledge.
-
-Switch to
-[VT2](http://www.chromium.org/poking-around-your-chrome-os-device#TOC-Get-the-command-prompt-through-VT-2)
-(press \[ Ctrl \] \[ Alt \] \[ =&gt; \]), and log in as user 'chronos' (no
-password required), then run `sudo bash`.
-
-To prevent the lock screen from logging you out of VT2, leave Chrome OS parked
-on the login screen. To prevent the backlight from dimming while in VT2, run
-sudo initctl stop powerd.
-
-Take a look at the SSD layout. It should be something like this (the UUID values
-will all be different, of course):
-
-<pre><code>
-localhost ~ # <b>cgpt show /dev/sda</b>
-     start      size    part  contents
-         0         1          PMBR (Boot GUID: 045E5C92-6F57-9B46-BDCC-99BFF876E469)
-         1         1          Pri GPT header
-         2        32          Pri GPT table
-    266240  22622208       1  Label: "STATE"
-                              Type: Linux data
-                              UUID: 1844A16D-AEC9-7C4B-9553-C3EB4814F6BB
-      4096     32768       2  Label: "KERN-A"
-                              Type: ChromeOS kernel
-                              UUID: D176DC60-81F1-654E-8953-E3D28019738C
-                              Attr: priority=3 tries=0 successful=1
-  27082752   4194304       3  Label: "ROOT-A"
-                              Type: ChromeOS rootfs
-                              UUID: 0193CA51-DA12-9847-A715-C90433E55F60
-     36864     32768       4  Label: "KERN-B"
-                              Type: ChromeOS kernel
-                              UUID: F1A2C65C-CC22-FF4A-A8BC-67BA233F3D40
-                              Attr: priority=0 tries=15 successful=0
-  22888448   4194304       5  Label: "ROOT-B"
-                              Type: ChromeOS rootfs
-                              UUID: B3361FB5-4DAC-9344-B7E5-870B7AC5FEA1
-        34         1       6  Label: "KERN-C"
-                              Type: ChromeOS kernel
-                              UUID: B6954485-4295-9749-956A-C315B01FB684
-                              Attr: priority=0 tries=15 successful=0
-        35         1       7  Label: "ROOT-C"
-                              Type: ChromeOS rootfs
-                              UUID: 5B5202B5-F74B-714E-9538-ADE56B2E5662
-     69632     32768       8  Label: "OEM"
-                              Type: Linux data
-                              UUID: 84971802-0D1C-504B-9CB5-DEA896F0AD3F
-        36         1       9  Label: "reserved"
-                              Type: ChromeOS reserved
-                              UUID: 77375DA6-8F07-704A-BBF4-2BCA662BFDFF
-        37         1      10  Label: "reserved"
-                              Type: ChromeOS reserved
-                              UUID: 6880F478-EB05-8B4B-B951-94A96076263E
-        38         1      11  Label: "reserved"
-                              Type: ChromeOS reserved
-                              UUID: 12DDC236-8FDF-4049-9A2D-10FAB17D3AA9
-    233472     32768      12  Label: "EFI-SYSTEM"
-                              Type: EFI System Partition
-                              UUID: 045E5C92-6F57-9B46-BDCC-99BFF876E469
-  31277199        32          Sec GPT table
-  31277231         1          Sec GPT header
-</code></pre>
-
-The units are 512-byte disk sectors.
-
-On Chrome OS there are several bootable images, each composed of a kernel and a
-root filesystem (rootfs). For a given image, the kernel and rootfs are stored on
-a pair of consecutive partitions. Two of these images, Image-A and Image-B, are
-for official Chrome OS:
-
-* KERN-A and ROOT-A on partitions `/dev/sda2` and `/dev/sda3`
-* KERN-B and ROOT-B on partitions `/dev/sda4` and `/dev/sda5`
-
-When the Chrome OS autoupdater downloads a new image (every six weeks or so, as
-new versions are pushed out), it alternately stores it in Image-A and Image-B -
-whichever image isn't currently running. The autoupdater even runs in developer
-mode, as long as we are running an official Chrome OS image.
-
-For Ubuntu, we'll use the currently unassigned Image-C, composed of KERN-C and
-ROOT-C on partitions `/dev/sda6` and `/dev/sda7`, respectively.
-
-However, initially they are too small so, first we need to grow them by stealing
-from the upper half of the stateful partition, STATE (`/dev/sda1`). Initially,
-STATE is 22622208 512-byte sectors, or just under 11 GB. From this we'll set
-aside 16 MB for KERN-C, and 5 GB for ROOT-C.
-
-```none
-umount /mnt/stateful_partition
-cgpt add -i 1 -b 266240    -s 12103680 -l STATE   /dev/sda
-cgpt add -i 6 -b 12369920  -s 32768    -l KERN-C  /dev/sda
-cgpt add -i 7 -b 12402688  -s 10485760 -l ROOT-C  /dev/sda
-```
-
-Using these values ensures that only the original STATE partition is affected.
-
-Now the partition table should look something like this (changes in **bold**):
-
-<pre><code>
-localhost ~ # <b>cgpt show /dev/sda</b>
-     start      size    part  contents
-         0         1          PMBR (Boot GUID: 045E5C92-6F57-9B46-BDCC-99BFF876E469)
-         1         1          Pri GPT header
-         2        32          Pri GPT table
-    <b>266240</b>  <b>12103680</b>       1  Label: "STATE"
-                              Type: Linux data
-                              UUID: 1844A16D-AEC9-7C4B-9553-C3EB4814F6BB
-      4096     32768       2  Label: "KERN-A"
-                              Type: ChromeOS kernel
-                              UUID: D176DC60-81F1-654E-8953-E3D28019738C
-                              Attr: priority=3 tries=0 successful=1
-  27082752   4194304       3  Label: "ROOT-A"
-                              Type: ChromeOS rootfs
-                              UUID: 0193CA51-DA12-9847-A715-C90433E55F60
-     36864     32768       4  Label: "KERN-B"
-                              Type: ChromeOS kernel
-                              UUID: F1A2C65C-CC22-FF4A-A8BC-67BA233F3D40
-                              Attr: priority=0 tries=15 successful=0
-  22888448   4194304       5  Label: "ROOT-B"
-                              Type: ChromeOS rootfs
-                              UUID: B3361FB5-4DAC-9344-B7E5-870B7AC5FEA1
-  <b>12369920</b>     <b>32768</b>       6  Label: "KERN-C"
-                              Type: ChromeOS kernel
-                              UUID: B6954485-4295-9749-956A-C315B01FB684
-                              Attr: priority=0 tries=15 successful=0
-  <b>12402688</b>  <b>10485760</b>       7  Label: "ROOT-C"
-                              Type: ChromeOS rootfs
-                              UUID: 5B5202B5-F74B-714E-9538-ADE56B2E5662
-     69632     32768       8  Label: "OEM"
-                              Type: Linux data
-                              UUID: 84971802-0D1C-504B-9CB5-DEA896F0AD3F
-        36         1       9  Label: "reserved"
-                              Type: ChromeOS reserved
-                              UUID: 77375DA6-8F07-704A-BBF4-2BCA662BFDFF
-        37         1      10  Label: "reserved"
-                              Type: ChromeOS reserved
-                              UUID: 6880F478-EB05-8B4B-B951-94A96076263E
-        38         1      11  Label: "reserved"
-                              Type: ChromeOS reserved
-                              UUID: 12DDC236-8FDF-4049-9A2D-10FAB17D3AA9
-    233472     32768      12  Label: "EFI-SYSTEM"
-                              Type: EFI System Partition
-                              UUID: 045E5C92-6F57-9B46-BDCC-99BFF876E469
-  31277199        32          Sec GPT table
-  31277231         1          Sec GPT header
-</code></pre>
-
-At this point we should destroy the STATE partition contents, because otherwise
-at the next boot the startup scripts may notice that it's corrupted and will
-erase it using the old size (obtained from dumpe2fs) and not the new one. Best
-to be safe and just zap it now. This will take a couple of minutes to run:
-
-```none
-dd if=/dev/zero of=/dev/sda bs=131072 seek=1040 count=47280
-```
-
-To speed up SSD access, we use a block size of 131,072 bytes (128 KB), which
-aligns with the SSD erase size.
-
-And now reboot so that the startup script recreates the required files in the
-stateful partition. This will do a safe wipe first, so you'll have to wait a bit
-(again).
-
-At this point we're through fiddling with the partition table, so you may want
-to go back to VT2 and set a password according to these
-[instructions](http://www.chromium.org/poking-around-your-chrome-os-device#TOC-Get-the-command-prompt-through-VT-2).
-
-## Acquire an Ubuntu filesystem
-
-First, although the Cr-48 CPU and BIOS is 64-bit, the kernel and rootfs are
-presently 32-bit. Since we're reusing the Chrome OS kernel, we'll download and
-use the 32-bit ubuntu-10.10-desktop-i386.iso from an [Ubuntu CD
-mirror](https://launchpad.net/ubuntu/+cdmirrors). For example:
-
-```none
-wget http://mirror.anl.gov/pub/ubuntu-iso/CDs/10.10/ubuntu-10.10-desktop-i386.iso
-```
-
-Second, even in developer mode, the Cr-48 will only boot external drives that
-are signed by Google. That means we can't (easily) use the normal Ubuntu live
-installer. Instead, I'll create an empty disk image file with a 5G partition on
-it, and use [VirtualBox](http://www.virtualbox.org/) to install into that. Then
-I'll transfer that raw partition onto the Cr-48.
-
-To install VirtualBox (and its command line management tool, `VBoxManage`) on
-Ubuntu:
-
-```none
-sudo aptitude install virtualbox-ose
-```
-
-I'll do this on my normal linux workstation, of course. I'll create the file
-inside the chroot so I can use the cgpt tool, but I'll run VirtualBox from
-outside. We could create the file using fdisk, but using cgpt ensures all the
-numbers match. You could also build the cgpt tool for use external to the
-chroot, but whatever.
-
-We'll need our disk image to be a little larger than 5G so it has room for the
-GPT headers.
-
-So, do the following in the [Chromium OS
-chroot](http://www.chromium.org/chromium-os/developer-guide#TOC-Create-a-chroot):
-
-```none
-cd /tmp
-rm -rf test.bin
-dd if=/dev/zero bs=512 seek=10486015 count=1 of=test.bin
-cgpt create test.bin
-cgpt boot -p test.bin
-cgpt add -b 128 -s 10485760 -t data -l ubuntu test.bin
-```
-
-From outside the chroot, translate the binary into a virtualbox disk:
-
-```none
-cd /path/to/chromiumos/chroot/tmp 
-VBoxManage convertdd test.bin test.vdi --format VDI
-```
-
-Launch the VirtualBox GUI (`virtualbox`) and create a new virtual machine with
-2G of RAM. Configure `test.vdi` as the existing hard disk (SATA port 0), and
-attach the Ubuntu .iso as the IDE secondary master. Everything else can be left
-as default.
-
-Boot the virtual machine and install Ubuntu onto `/dev/sda1`. The Chrome OS
-kernel does not use swap memory, so be sure to specify partitions manually.
-Select the middle `/dev/sda1`, and format it for `ext2`, and mount on `/`. The
-ubuntu installer should warn you that you have no swap partition, and it will
-therefore disable swap. This is what we want.
-
-Once Ubuntu is installed, working and updated, shut the virtual machine down and
-convert the `.vdi` image back into a binary:
-
-```none
-VBoxManage internalcommands converttoraw test.vdi test_new.bin
-```
-
-Now, we'll extract just the Ubuntu rootfs partition from the binary file:
-
-```none
-dd if=test_new.bin bs=512 skip=128 count=10485760 of=rootfs.bin
-```
-
-Next, we copy the ubuntu rootfs directly to the Cr-48 ROOT-C partition
-(`/dev/sda7`). To copy the file, run the following command on the Cr-48, where
-USER@HOST refers to the account and host from which you are copying.
-
-**Note:** the root filesystem is a huge file that will take quite a while to
-upload. This is much less painful with a fast network connection, so, if
-possible, use a USB-to-ethernet adapter to avoid going through Wi-Fi.
-
-```none
-ssh USER@HOST cat /path/to/rootfs.bin | dd of=/dev/sda7
-```
-
-If you have to use Wi-Fi, you can reduce the wait with a bit of compression
-(thanks to Jay Lee for pointing this out):
-
-```none
-ssh USER@HOST bzip2 -c /path/to/rootfs.bin | bunzip2 -c | dd of=/dev/sda7
-```
-
-If your network is flaky you might find it easier to use `scp` to copy the
-compressed image to the Cr-48 first, then uncompress and write to `/dev/sda7`.
-Or you could just copy the `rootfs.bin` file to a USB stick instead of using the
-network, but it's likely to take about as long. You always want to use `dd` to
-copy the rootfs image into `/dev/sda7`, of course.
-You can see that it worked by mounting the new rootfs and looking around:
-
-```none
-mkdir /tmp/urfs
-mount /dev/sda7 /tmp/urfs
-ls /tmp/urfs
-```
-
-While we're looking, let's copy the `cgpt` tool into Ubuntu's rootfs. Make sure
-it's executable. We'll need this later.
-
-```none
-cp /usr/bin/cgpt /tmp/urfs/usr/bin/
-chmod a+rx /tmp/urfs/usr/bin/cgpt
-```
-
-We'll need to copy all the kernel modules too.
-
-```none
-cd /lib/modules
-cp -ar * /tmp/urfs/lib/modules/
-```
-
-That should do it.
-
-```none
-umount /tmp/urfs
-```
-
-## Configure the kernel
-
-The next step is to copy the currently running Chrome OS kernel to KERN-C
-(`/dev/sda6`). Remember, an image consists of a kernel and a rootfs on
-consecutive partitions. So, to figure out which kernel is running, we can check
-which partition is currently mounted as the rootfs:
-
-```none
-rootdev -s
-```
-
-If this prints `/dev/sda3` (ROOT-A), then our kernel is on `/dev/sda2` (KERN-A).
-
-If this prints /dev/sda5 (ROOT-B), then our kernel is on /dev/sda4 (KERN-B).
-
-Assuming our kernel is on /dev/sda2 (KERN-A), copy it to /dev/sda6 (KERN-C):
-
-```none
-dd if=/dev/sda2 of=/dev/sda6
-```
-
-Now we need to change the kernel command line to use our Ubuntu rootfs instead
-of a Chrome OS rootfs. For this, we'll use `make_dev_ssd.sh`, located in the
-Chromium OS source tree under
-`src/platform/vboot_reference/scripts/image_signing/.` The [latest
-version](http://git.chromium.org/cgi-bin/gitweb.cgi?p=vboot_reference.git;a=tree)
-has options to change individual kernel command lines.
-
-Use `scp` to copy it from your host to the stateful partition of the Cr-48. Note
-we'll also need `common_minimal.sh from the same directory.`
-
-```none
-cd /mnt/stateful_partition
-scp USER@HOST:/some/path/to/latest/make_dev_ssd.sh .
-scp USER@HOST:/some/path/to/latest/common.sh .
-```
-
-Extract the existing kernel command line from KERN-C, and save it to a file
-named `foo.6` (the .6 extension is added by the script):
-
-```none
-sh ./make_dev_ssd.sh --partitions '6' --save_config foo
-```
-
-The default Chrome OS kernel command line looks something like this:
-
-```none
-quiet console=tty2 init=/sbin/init add_efi_memmap boot=local rootwait ro noresume noswap i915.modeset=1 loglevel=1 cros_secure kern_guid=%U tpm_tis.force=1 tpm_tis.interrupts=0 root=/dev/dm-0 dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=1 dm="vroot none ro,0 1740800 verity /dev/sd%D%P /dev/sd%D%P 1740800 1 sha1 50adbfb72bb1efda0c1a86dcd1c1d6a0b46726d1" noinitrd
-```
-
-The only editor on the Cr-48 is qemacs, so open foo.6 with qemacs:
-
-```none
-qemacs foo.6
-```
-
-Edit the file to look like this:
-
-```none
-console=tty1 init=/sbin/init add_efi_memmap boot=local rootwait ro noresume noswap i915.modeset=1 loglevel=7 kern_guid=%U tpm_tis.force=1 tpm_tis.interrupts=0 root=/dev/sda7 noinitrd
-```
-
-Then save (Ctrl-x Ctrl-s) and exit (Ctrl-x Ctrl-c). qemacs occasionally gets
-confused, so double-check to be sure you have the right content:
-
-```none
-cat foo.6
-```
-
-Finally, use `make_dev_ssd.sh` to replace the kernel command line in KERN-C:
-
-```none
-sh ./make_dev_ssd.sh --partitions '6' --set_config foo
-```
-
-The kernel command line is part of the kernel partition, and the entire
-partition must be cryptographically signed in order to work. We can't replace
-the command line part without affecting the entire kernel partition. The script
-will save a backup copy before replacing the partition content, but we shouldn't
-need it.
-
-## Set boot priority
-
-At this point we should have the following situation:
-
-Image-A is an official Google Chrome OS which can boot either in normal mode or
-dev-mode.
-
-Image-B is (or will be after the first autoupdate) another official Google
-Chrome OS which can boot either in normal mode or dev-mode.
-
-Image-C is Chrome OS kernel with a modified command line and an Ubuntu rootfs,
-which can only boot in dev-mode.
-
-Next, we adjust the priority among the images so we can try out our Ubuntu
-image. The image priority is an attribute of its kernel partition. Run `cgpt
-show /dev/sda` again, to see the kernel priorities:
-
-<pre><code>
-localhost ~ # <b>cgpt show /dev/sda</b>
-<b>...</b>
-      4096     32768       2  Label: "KERN-A"
-                              Type: ChromeOS kernel
-                              UUID: D176DC60-81F1-654E-8953-E3D28019738C
-                              Attr: <b>priority=3 tries=0 successful=1</b>
-...
-     36864     32768       4  Label: "KERN-B"
-                              Type: ChromeOS kernel
-                              UUID: F1A2C65C-CC22-FF4A-A8BC-67BA233F3D40
-                              Attr: <b>priority=0 tries=15 successful=0</b>
-...
-  12369920     32768       6  Label: "KERN-C"
-                              Type: ChromeOS kernel
-                              UUID: B6954485-4295-9749-956A-C315B01FB684
-                              Attr: <b>priority=0 tries=15 successful=0</b>
-</code></pre>
-
-The priority determines the order in which the BIOS tries to find a valid kernel
-(bigger is higher, zero means don't even try). The tries field is decremented
-each time the BIOS tries to boot it, and if it's zero, the kernel is considered
-invalid (this lets us boot new images without looping forever if they don't
-work). The successful field overrides the tries field, but is only set by the OS
-once it's up and running.
-
-Let's change the priority of KERN-C to 5:
-
-```none
-cgpt add -i 6 -P 5 -T 1 -S 0 /dev/sda
-```
-
-This makes KERN-C the highest priority, but only gives us one chance to boot it.
-That way if it doesn't work, we're not completely stuck.
-
-If you reboot now, you should come up in Ubuntu! Note that Computer Science
-Standard Answer #1 applies: It Works For Me™
-
-If something went wrong and Ubuntu crashes or you powered off, the tries field
-for KERN-C will have been decremented to 0 and you'll fall back to booting
-Chrome OS.
-
-Assuming that Ubuntu booted and you could log in, go to
-Applications-&gt;Accessories-&gt;Terminal to get a shell, and run
-
-```none
-sudo cgpt add -i 6 -P 5 -S 1 /dev/sda
-```
-
-This will mark the Ubuntu kernel as valid, so it will continue to boot next
-time.
-
-Now you can switch back and forth between the official Chrome OS release and
-Ubuntu just by flipping the dev-mode switch. Going from dev-mode to normal mode
-erases STATE (`/dev/sda1`), but much more quickly. Going from normal to dev-mode
-again would normally do a slow erase of `/dev/sda1`, but since we're booting
-Ubuntu that doesn't happen.
-
-This works because although KERN-C has the highest priority, it isn't signed by
-Google. In dev-mode that's okay, but in normal mode it will be rejected by the
-BIOS. Since we've set the successful flag to 1, the BIOS won't mark it invalid
-but will just skip it each time. This makes the normal-mode boot time slightly
-longer, but only by a second or two.
-
-Of course you could also switch between images from within dev-mode just by
-manually setting the priorities with `cgpt` before rebooting.
-
-Note that if the normal image autoupdates, it will probably change the kernel
-priorities so that Image-C is no longer the highest and the next time you switch
-to dev mode, you will
-
-a) have a long wait,
-
-b) still be running Chrome OS, and
-
-c) have to use cgpt to raise the KERN-C priority again.
-
-But, because autoupdate only switches between Image-A and Image-B, the Ubuntu
-kernel and rootfs shouldn't be affected.
-
-## Footnotes
-
-### Ugh
-
-Recompiling the Ubuntu kernel should be possible, with a few caveats:
-
-First, you'll have to modify or reconfigure the kernel to not use initrd.
-initramfs should work though.
-
-Second, official Chrome OS still has a few closed-source hardware drivers. The
-pure open-source Chromium OS experience is therefore a bit sub-optimal, although
-still quite useable.
-
-Third, if you use the 32-bit image, you'll also have to modify the kernel source
-to boot correctly from the 64-bit Chrome OS BIOS.
-
-See
-<http://git.chromium.org/cgi-bin/gitweb.cgi?p=kernel.git;a=commit;h=a7cfa1075c04df162d58dc2ed93df6045e9c3271>
-for details.
-
-If you use a 64-bit image it shouldn't need the boot hacks, but driver support
-is much less robust.
-
-Finally, you'll have to sign the kernel yourself and put it into the KERN-C
-partition. That is actually the easiest step, but it's not really well
-documented. Look in the developer pages.
-
-### Double-ugh
-
-`initrd` is typically handled by the bootloader, which reads the specified image
-from the disk into RAM and passes the address to the kernel as it's invoked.
-
-The Chrome OS BIOS is a modified EFI BIOS. The bootstub is a standard EFI
-Application, but it's embedded in the kernel image in a dedicated partition
-type, rather than accessible through a FAT filesystem. To decrease boot time,
-the BIOS does not discover or pass the standard disk drive handles to the
-bootstub, so the bootstub doesn't know anything about disks or filesystems.
-There is also no Compatibility Support Module in the BIOS. In theory `elilo` or
-`grub2` could replace the bootstub, but they would have to reimplement some of
-the device discovery functions normally done by an EFI BIOS.
-
-If you want to take this on, go for it. That would let us create a kernel
-partition that just contained an EFI bootloader, which could then chain-boot to
-external USB drives, etc. That might be kind of cool.
-
----
-
-Some [clarification](http://xkcd.com/386/) in response to the wharrgarbl
-resulting from this howto...
-
-* The dev-mode switch is purely for hackers who want to jailbreak
- their notebook. The people who build the notebook don't need it
- (duh).
-* Things are locked down by default to try to prevent Bad People from
- rooting your device without your knowledge. It's always been
- intended that you should be able to root it yourself. Go read the
- [design
- document](/chromium-os/chromiumos-design-docs/developer-mode) for
- details and background.
-* It's not a trick. We really don't care what you do with your own
- property. As long as you don't crack open the case, you should
- always be able to [restore it to the original
- state](http://www.google.com/chromeos/recovery).
-* I put this hack together in about a day (with another day or so for
- my coworkers to proofread it) which is why it's so complicated. I
- figured you'd want to see an example sooner rather than later.
-* wfrichar@chromium.org wrote this. I work for Google, on the Chrome
- OS verified boot stuff. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/index.md
deleted file mode 100644
index ce5f6cddc82..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/index.md
+++ /dev/null
@@ -1,459 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: cr-48-chrome-notebook-developer-information
-title: Cr-48 Chrome Notebook Developer Information
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Cr-48 Chrome
-Notebook](http://www.google.com/chromeos/pilot-program-cr48.html) that is
-interesting and/or useful to software developers. For general information about
-getting started with developing on Chromium OS (the open-source version of the
-software on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-## Entering Developer Mode
-
-You might want to enter developer mode if you're following the instructions in
-the [Chromium OS Developer Guide](/chromium-os/developer-guide), or if you just
-want to get access to a shell on your device to [poke
-around](/chromium-os/poking-around-your-chrome-os-device). To get your device
-into Developer Mode, you'll need to flip the developer switch to the "Developer
-Mode" position.
-
-Caution: Modifications you make to the system are not supported by Google, may
-cause hardware issues and may void warranty.
-
-The first time a Chrome Notebook boots in Developer Mode after leaving Normal
-Mode it will:
-
-* ***************Show a scary warning that its software cannot be
- trusted, since verified boot is disabled (press Ctrl-D or wait 30
- seconds to dismiss).***************
-* ***Erase all personal data on the "stateful partition" (i.e., user
- accounts and settings - no worries, though, since all data is in the
- cloud!).***
-* ******Make you wait between 5 and 10 minutes to while it erases the data.******
-* *********Boot from any self-signed image on its SSD, negating the
- security of verified boot.*********
-
-The erase and wait steps only happen when you first switch to Developer Mode, to
-help prevent someone from quickly reimaging your device while you're away from
-the keyboard. Successive boots in Developer Mode will only:
-
-* ***************Show a scary warning that its software cannot be
- trusted, since verified boot is disabled (press Ctrl-D or wait 30
- seconds to dismiss).***************
-* *********Boot from any self-signed image on its SSD, negating the
- security of verified boot.*********
-
-Entering Developer mode is easy:
-
-1. Remove the battery.
-2. Peel off the sticker that hides the developer switch (see image 1).
-3. Flip the developer switch towards the battery connector (see image
- 2).
-4. Put the battery back in.
-5. Turn the device back on.
-6. Press Ctrl-D at the scary warning screen.
-7. Wait 5-10 minutes and any saved information on your device will be
- erased.
-8. Congratulations, enjoy hacking in Developer Mode!
-
-Here are some pictures that might help:
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.png"
-height=225
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchTape.png)
-
-**Image 1: Location of Developer Switch**
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.png"
-height=225
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/Mario_DevSwitchOn.png)
-
-**Image 2: Developer Switch in "Developer Mode" position.**
-
----
-
-## Getting the recovery kernel
-
-If you are trying to install your own disk image onto your Cr-48 Chrome Notebook
-(maybe you're following the [Chromium OS Developer
-Instructions](/chromium-os/developer-guide)), you need the recovery kernel. You
-can find it at:
-<https://dl.google.com/dl/edgedl/chromeos/recovery/mario_recovery_kernel.zip>
-(this did not work for me, and I had to follow [these
-instructions](/chromium-os/extracting-a-recovery-kernel-from-a-recovery-image)
-instead).
-
----
-
-## Leaving Developer Mode
-
-Returning to normal mode is as simple as entering developer mode: shut down,
-remove the battery, flip the switch, reboot. There are a couple of things to
-note, however.
-First, assuming you haven't modified anything, the first time you boot in normal
-mode after leaving developer mode, the stateful partition will be erased. This
-is a much faster erase process than when entering developer mode, usually only
-30 or 40 seconds, and only happens with the first boot.
-Second, verified boot will be enabled, meaning that only Google-signed images
-will be bootable. If you haven't modified the original kernel or rootfs
-partitions in any way, you should have no problems. If you've made changes to
-the kernel partitions, the Cr-48 will refuse to boot that kernel and will
-display a recovery screen. You'll have to [create a recovery USB
-drive](http://www.google.com/chromeos/recovery) to restore your Cr-48 to the
-factory condition. If you've made changes to the rootfs partition but not the
-kernel, the Cr-48 **may** appear to boot normally, but may later suddenly reboot
-and/or display the recovery screen. This happens because the kernel verifies the
-rootfs as each block is read from the SSD, so it may not encounter a modified
-block until sometime later. When it does, it will reboot immediately.
-
-## How to use the Recovery Mode button
-
-Recovery mode is a special boot operation in which the BIOS will:
-
-* Refuse to boot from the SSD
-* Prompt you to insert a recovery USB drive
-* Only boot a Google-signed image from the USB drive
-
-You will encounter recovery mode when the BIOS is unable to find a valid kernel
-to boot, either because the SSD has become corrupted or (more likely) because
-you modified all the kernel partitions while in developer mode and have switched
-back to normal mode. While in developer mode, you will be presented with the
-scary boot screen at every boot. Pressing SPACE or RETURN will take you to
-recovery mode.
-You can also force your Cr-48 into recovery mode (even in normal mode) by using
-the recovery mode button.
-On the bottom of the Cr-48, directly below the ESC key, there is a tiny pinhole:
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/cr48_recovery_button.jpg">](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/cr48_recovery_button.jpg)
-
-If you stick a paperclip into this hole, you'll feel it press a button. To force
-recovery mode, turn the Cr-48 off, press this button, and while keeping it
-pressed, turn the Cr-48 on again. This sometimes requires three hands or a bit
-of contortion, but you'll know it worked when you see the recovery screen
-instead of booting normally.
-There is little use for this button other than booting a [recovery USB
-drive](http://www.google.com/chromeos/recovery). In developer mode you can run
-your own scripts from the recovery USB drive, but in developer mode you can
-trigger recovery mode by just pressing SPACE at boot. Still, there it is.
-
-## How to boot your own (non-Chromium OS) image from USB
-
-(Note: This part is outdated: make_developer_script_runner.sh does not exist
-anymore)
-
-Sometimes, you just want to have a shell or maybe you want to install another
-operating system. If you're in Developer Mode, then you can totally do that.
-
-This tip could actually be useful to someone who wasn't a Chromium OS developer.
-However, at the moment the only easy way to get the tools is to follow many of
-the steps in the [Chromium OS Developer Guide](/chromium-os/developer-guide). If
-you don't care about developing for Chromium OS and just want to get to booting
-your own stuff, you should read the developer guide with these thoughts in mind:
-
-1. The instructions in the [Chromium OS Developer
- Guide](/chromium-os/developer-guide) assume that you're running the
- [Ubuntu Lucid](http://www.ubuntu.com/) distribution of Linux. If
- you're not, you may not be able to follow them.
-2. You should only need to follow the instructions up to the point of
- "Enter the chroot". You don't actually need to build a Chromium OS
- image. You probably also want to choose the "minilayout" when
- downloading the source code, since that will be faster.
-
-The rest of the instructions will assume that you've followed the instructions
-enough to make a chroot and that you're currently in the chroot.
-
-### Getting the recovery kernel for your Chrome OS Notebook
-
-You'll need to get a "recovery kernel" for your Chrome OS Notebook in order to
-follow these instructions. You can download the an officially-signed Recovery
-Kernel for the [Cr-48
-Chromebook](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information)
-(AKA Mario) by running the steps below from inside the chroot:
-
-```none
-curl https://dl.google.com/dl/edgedl/chromeos/recovery/mario_recovery_kernel.zip > ~/trunk/mario_recovery_kernel.zip
-unzip -d ~/trunk ~/trunk/mario_recovery_kernel.zip
-RECOVERY_KERNEL=~/trunk/mario_recovery_kernel.bin
-```
-
-The instructions below assume that you've set the `RECOVERY_KERNEL` variable as
-above.
-
-If you have trouble downloading the recovery kernel, you might be able to
-[extract an officially-signed Recovery Kernel from an officially-signed Recovery
-Image](/chromium-os/extracting-a-recovery-kernel-from-a-recovery-image) instead.
-
-### Creating a USB disk that will boot a simple script
-
-Using the `make_developer_script_runner.sh` tool, you can create a USB disk that
-will run shell script. In this example, we'll show how to create a USB disk with
-a script that will leave you running the shell.
-
-#### Create the script
-
-```none
-echo -e  '#!/bin/sh\nexec /bin/sh\n' > run_a_shell.sh
-```
-
-#### Build a disk image
-
-Now, use make_developer_script_runner.sh. The script will create a file called
-`dev_runner_image.bin` that can be placed on a USB disk. Note that these
-instructions assume that you've set the RECOVERY_KERNEL variable properly, as
-explained above.
-
-```none
-./make_developer_script_runner.sh --kernel_image=${RECOVERY_KERNEL} --developer_script=run_a_shell.sh
-```
-
-#### Find your USB disk
-
-You should plug a USB disk in to your computer now and wait a few seconds for it
-to be detected. You can then run this quick command to use some Chromium OS
-tools to detect the disk and find out where it is:
-
-```none
-bash -c 'source chromeos-common.sh; 
-  echo
-  for disk in $(list_usb_disks); 
-    do echo /dev/$disk - $(get_disk_info $disk manufacturer) - $(get_disk_info $disk product); 
-  done'
-```
-
-...assuming your disk was detected, it should print out as a result of that
-command. For instance, on my computer, I see this, which tells me that my USB
-disk is in `/dev/sdc`:
-
-```none
-/dev/sdc - Kingston - DataTraveler G3
-```
-
-#### Format your USB disk with the disk image
-
-**==WARNING==: This step will erase all data on your USB disk. Make sure there's
-nothing important on it.**
-==ALSO==: If you mistype this step (don't put the right /dev/sdX in the
-command), it can blow away some other disk on your computer.**
-
-**BE CAREFUL!**
-
-Really, I'm serious. *Be very careful*. If you shoot yourself in the foot with
-these instructions, you only get to blame yourself.
-
-OK, now that you've read all of the disclaimers, the command you'll need to
-enter is this, replacing `${MY_USB_KEY_LOCATION}` with the /dev/sdX value that
-is for your USB disk (see the "Find your USB disk" instruction above).
-
-TODO: You may need to unmount your USB disk before running this instruction if
-Ubuntu mounted it for you. Put a set of instructions that tell how to do that.
-
-```none
-sudo dd if=dev_runner_image.bin of=${MY_USB_KEY_LOCATION} bs=16M conv=fsync
-```
-
-#### Boot your Chrome OS Notebook with your USB image
-
-Now, shut off your Chrome OS Notebook and turn it back on. Since you're in
-Developer Mode (right?), you should see the warning. Hit the space bar to enter
-recovery mode. Once prompted, insert your USB disk.
-
-Assuming that you haven't reimaged the built-in SSD with a developer-signed
-image, you'll need to wait 5 minutes each time you boot up with this disk image.
-This is a security precaution, to prevent someone from quickly rebooting your
-device from their USB key while you're getting more coffee (see the [Developer
-Mode](/chromium-os/chromiumos-design-docs/developer-mode) design document).
-
----
-
-### Create a USB disk that will boot another operating system
-
-TODO: This should be possible for someone skilled in the art of Linux. The above
-instructions tell you how to run any arbitrary Linux program, and (with root
-access) you should be able to do pretty much anything you want.
-
-It would be nice to get some good instructions here, though.
-
----
-
-### Install your own build of Chromium OS
-
-First, download the recovery kernel, as explained above. Then build a Chromium
-OS image, as mentioned in the [Chromium OS Developer
-Guide](/chromium-os/developer-guide). Once you have the recovery kernel and the
-OS image, you'll stitch them together, copy them to a USB drive, and then boot
-your system from the USB drive.
-
-Combine the recovery kernel and your OS image, to create a recovery image
-
-You can build your own recovery image using `mod_image_for_recovery.sh`. This
-image will have the officially-signed Recovery Kernel (so you can boot from USB)
-and will install a self-signed SSD image (so you can boot only with developer
-mode). Here's the magic set of steps (assuming that you've got a path to the
-recovery kernel in `${RECOVERY_KERNEL}` and that the recovery kernel is a match
-for the `${BOARD}` you built):
-
-```none
-./mod_image_for_recovery.sh \
-    --board=${BOARD} \
-    --nominimize_image \
-    --kernel_image ${RECOVERY_KERNEL} \
-    --image ~/trunk/src/build/images/${BOARD}/latest/chromiumos_image.bin
-```
-
-**SIDE NOTE**: If you're interested in creating a test image (used for allowing
-Chromium OS to talk to autotest), you can run build_image test to create a test
-image that can be combined with the recovery image:
-
-```none
-./build_image --board=${BOARD} test
-./mod_image_for_recovery.sh \
-    --board=${BOARD} \
-    --nominimize_image \
-    --kernel_image ${RECOVERY_KERNEL} \
-    --image ~/trunk/src/build/images/${BOARD}/latest/chromiumos_test_image.bin
-```
-
-Copy the recovery image to a USB key
-
-The first step is to insert a USB flash disk (4 GB or bigger) into your build
-computer. **This disk will be completely erased, so make sure it doesn't have
-anything important on it**. Wait ~10 seconds for the USB disk to register, then
-type the following command:
-
-```none
-cros flash --board=${BOARD} usb://
-```
-
-For more details on using this tool, see the [Cros Flash
-page](/chromium-os/build/cros-flash).
-
-When the cros flash command finishes, you can simply unplug your USB key and
-it's ready to boot from.
-
-**IMPORTANT NOTE**: To emphasize again, cros flash completely replaces the
-contents of your USB disk. Make sure there is nothing important on your USB disk
-before you run this command.
-
-#### Install your image to the Cr-48's SSD
-
-In developer mode, your Chrome OS Notebook gives you an option to use a recovery
-image every time the machine boots. To install your recovery image, do the
-following:
-
-1. Turn your Chrome OS Notebook off.
-2. Turn it back on.
-3. During the boot warning, press space to enter recovery mode.
-4. Wait until prompted to put your USB disk in.
-5. Put the USB disk in.
-6. Wait while the image is copied to the SSD.
-
-If you reboot now, you'll be booting from your image (you may need to wait past
-the recovery screen). Congratulations!
-
-**IMPORTANT NOTE**: You **must** stay in Developer Mode to continue booting your
-image. Since your image was not signed by the release keys (it's self-signed
-image), it will only boot in Developer Mode. If you want to go back to Release
-Mode, just copy (/bin/dd) [a recovery
-image](http://support.google.com/chromeos/bin/answer.py?hl=en&answer=1080595)
-directly to a USB drive, without making any modifications to it.
-
----
-
-## How to install a different OS on your SSD
-
-There's an example of configuring a Cr-48 to dual-boot Chrome OS and Ubuntu
-[here](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48).
-
-## Troubleshooting
-
-### Battery Doesn't Charge
-
-If your battery is completely drained, sometimes the CR-48 has trouble charging
-it again. You might be able to workaround it by doing:
-
-* Plug the AC adapter in
-* Wait 20 seconds
-* Unplug the AC adapter
-* Wait 20 seconds
-* Plug the AC adapter in
-* Wait 20 seconds
-* ... repeat this cycle 10 times or so ...
-* The battery should hopefully start charging again
-
-## Firmware
-
-See the [H2C firmware
-page](/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware) for
-more details.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-### Components
-
-Here is a rundown of the parts that are not soldered down:
-
-* Power supply: 19.5V <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg"
- height=5> ([DC](http://en.wikipedia.org/wiki/Direct_current)) 2.05A
- <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg"
- height=12> ([positive polarity
- tip](http://en.wikipedia.org/wiki/Polarity_symbols))
-* SSD: 16GiB mSATA
-* RAM: one slot for 204-Pin DDR3 SO-DIMM laptop memory
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance from a friend knowledgeable in the area. If you just want
-to see what the inside looks like, gaze upon this (click for a high res
-version):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-bottom-guts.jpg"
-height=231
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-bottom-guts.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-top-guts.jpg"
-height=102
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-top-guts.jpg)
-
-However, we acknowledge that some people like to tinker. So here's a quick guide
-to taking it apart:
-
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up
-* Pop out the battery using the release switch in the middle of the
- case
-* Remove the visible screws
- * There should be 10 in total (a line of 3 black, a line of 3
- silver, and a line of 4 silver)
- * The black screws are M2x2x0.4 while the silver screws are
- M2x3x0.4
-* Remove the two screws under the rubber feet (M2.5x6x0.45)
- * If you pry them up starting at the edge closest to the hinge,
- you're less likely to strip the glue
-* Using a flat instrument (your nails, a wide screw driver, etc...),
- pry the case apart starting at the side w/the VGA port
- * Work your way around the front and to the other side
- * By now, it should be pretty easy to wiggle the whole thing apart
-
-You now have access to the upgradable components. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-bottom-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-bottom-guts.jpg.sha1
deleted file mode 100644
index 7b6fd1b12d1..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-bottom-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ab5183254b26aca838300117a2e558d1e91f7c2d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-top-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-top-guts.jpg.sha1
deleted file mode 100644
index fa2bee80eef..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/mario-top-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4d90c237a16d90a13d4caba2b007c519a778d7a2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/custom-firmware/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/custom-firmware/index.md
deleted file mode 100644
index fbc3c648d9a..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/custom-firmware/index.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: custom-firmware
-title: Custom Firmware
----
-
-[TOC]
-
-The Chrome OS firmware is **always** verified as signed by Google. Developer
-mode allows you to safely fiddle with the disk and operating system, but the
-boot process depends on unmodified firmware. There is no provision for modifying
-the firmware without physically taking the device apart. Modifying your firmware
-can result in permanent damage.
-
-This page talks about how to use your own custom firmware without damaging the
-official firmware on your device, by pretending that your custom firmware is a
-custom kernel.
-
-## Firmware as kernel
-
-The normal-mode [boot process](/chromium-os/chromiumos-design-docs/disk-format)
-is roughly this: RO firmware verifies and launches the RW firmware, RW firmware
-verifies and launches the kernel, the kernel verifies the rootfs as it's read
-from the disk.
-
-In developer mode, the RW firmware doesn't verify that the kernel is signed by
-Google, just that it looks like a correctly signed kernel image. It doesn't
-matter **who** signed it, so you can [build and boot your
-own](/chromium-os/developer-guide) kernel and rootfs. On later models, you can
-also enable booting a custom Chromium OS kernel from USB.
-
-The ChromeOS firmware doesn't actually look at the kernel, it just looks for a
-[ChromeOS-specific
-header](/chromium-os/chromiumos-design-docs/verified-boot-data-structures) that
-describes it. So if your custom kernel isn't actually a Linux kernel, but is a
-custom build of U-Boot that was packaged as though it was a Chromium OS kernel,
-the firmware will happily load it into RAM and jump to it. What happens next is
-up to you.
-
-### Warning
-
-This has been known to work (more or less), but it's pretty annoying and
-difficult to debug. Most of the time when something goes wrong, you just see the
-scary boot screen, you press Ctrl-D or Ctrl-U to boot your magic image, and ...
-the machine silently hangs or reboots. Sometimes it reboots into recovery mode
-but power cycling restores it. Sometimes you have to run the recovery process to
-restore it. You shouldn't be able to damage anything, but you can spend a lot of
-time trying to get it right.
-
-That said, the general process is fairly straightforward. Of course, it helps
-**a lot** if you've [built and booted your own](/chromium-os/developer-guide)
-Chromium OS image at least once so that you're familiar with the development
-environment.
-
-Google pushes frequent updates to the running Chrome OS system so that over time
-it just gets better. However, since the initial portion of the BIOS is
-read-only, only the read-write part of the BIOS can be updated and the
-requirement that it interoperate with the RW portion limits the amount of change
-that can be applied. In addition, updating BIOS can be a scary proposition
-because uncaught bugs could require users to run the recovery process. That
-means that significant changes to the BIOS are only made by introducing new
-ChromeOS devices. As of this writing, there are three major BIOS designs in
-existence, and each type loads and runs the kernel in different ways.
-
-#### **H2C**
-
-The first generation of Chromebooks (Cr-48, Alex, ZGB) uses a BIOS called "H2C".
-
-* **H2C is UEFI-based, but with a lot of stuff cut out to speed up the
- boot process.**
-* **The BIOS is a 64-bit executable, but the ChromeOS kernel is
- launched in 32-bit mode. Our kernel has to be specially modified to
- handle this difference.**
-* **The "bootloader stub" is a standard UEFI executable, with source
- in
- [src/third_party/bootstub/](http://git.chromium.org/gitweb/?p=chromiumos/third_party/bootstub.git).
- The purpose of this tiny executable is to**
- * **Update the kernel cmdline to let the kernel find the correct
- rootfs partition.**
- * **Obtain the memory map from the BIOS that the kernel will
- need.**
- * **Switch CPU modes from 64-bit to 32-bit.**
- * **Jump to the kernel entry point at 0x100000.**
-* **You can replace the bootloader stub with any other UEFI
- application (such as grub2), but it will be broken in two ways:**
- * **The BIOS' console output functions are disabled, so you can't
- see any output.**
- * **None of the UEFI-provided disk handles are valid, so you can't
- do any disk IO.**
-
-#### **Coreboot**
-
-The second generation x86 Chromebooks (Stumpy, Lumpy, Parrot) firmware is a
-combination of Coreboot and U-Boot.
-
-* **Coreboot initializes the bare hardware, then invokes a
- "payload".**
-* **The payload is U-Boot, configured and customized to boot using our
- verified boot process without delay.**
-* **Coreboot and U-Boot are both 32-bit executables, as is the kernel
- entry code (even for 64-bit kernels).**
-* **U-Boot updates the kernel cmdline and zeropage table, before
- jumping directly to 0x100000. Any "bootstub" code is ignored.**
-
-**The two nice things about the coreboot BIOS are:**
-
-* **U-Boot can decide at boot time to enable the console output if it
- needs to.**
-* **The handoff from BIOS to kernel is a simple 32-bit jump. No
- trampoline, no reliance on run-time-resident BIOS functions.**
-
-#### **U-Boot**
-
-The ARM-based Samsung Chromebook (Snow) uses U-Boot alone.
-
-* The read-only firmware consists of three parts:
- 1. BL1/PRE_BOOT is the chip-specific bootloader provided by
- Samsung.
- 2. BL2/SPL is a very tiny board-specific bootloader derived from
- U-Boot.
- 3. The RO U-Boot then handles the verification and loading of the
- RW firmware.
-* The read-write firmware is also U-Boot.
-* U-Boot passes all the kernel parameters through FDT.
-* The kernel is loaded in RAM at a different location from x86.
-* The kernel is wrapped as a FIT image, not a raw binary.
-
-#### **Depthcharge**
-
-The newest Chromebooks (Haswell and beyond) now use Depthcharge, which is
-deployed as a payload from Coreboot effectively replacing U-Boot entirely.
-Depthcharge removes reliance on U-Boot and allows for a lighter boot process
-with on demand initialization of devices. There is a presentation on Depthcharge
-available
-[here](/chromium-os/2014-firmware-summit/ChromeOS%20firmware%20summit%20-%20Depthcharge.pdf).
-
-### Producing a "kernel" to boot
-
-**Step one** is to build your custom bootloader.
-
-On x86 coreboot if you're modifying the Chrome OS U-Boot, that may be as simple
-as changing `CONFIG_SYS_TEXT_BASE` to the expected kernel load address and
-running `emerge chromeos-u-boot` (`cros_workon` first, of course). You'll
-probably need to tweak a few other things to enable the vga output or provide an
-interactive prompt.
-
-For an ARM Chromebook, you can find detailed instructions on the [Using
-nv-U-Boot on the Samsung ARM Chromebook](/system/errors/NodeNotFound) page.
-
-**Step two** is to sign your binary like a Chromium OS kernel:
-
-```none
-echo blah > dummy.txt
-vbutil_kernel --pack kernelpart.bin \
- --keyblock /usr/share/vboot/devkeys/kernel.keyblock \
- --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
- --version 1 \
- --vmlinuz ${MY_BINARY} \
- --bootloader dummy.txt \
- --config dummy.txt \
- --arch arm
-KPART=$(pwd)/kernelpart.bin
-```
-
-Notes:
-
-1. **Your binary is specified with the **`--vmlinuz`** argument.**
-2. **We use a `dummy.txt` file for the bootloader and config file args,
- just so `vbutil_kernel` doesn't complain. (TODO: Seems to work
- without this. Is it still needed?)**
-3. **We specify `--arch arm` even if we're building for x86, because
- x86 kernels have a preamble that `vbutil_kernel` will try to remove
- and U-Boot doesn't have that.**
-4. **At some point we should modify `vbutil_kernel` to be more
- accommodating so we don't have to use these tricks. There's a
- [bug](http://code.google.com/p/chromium-os/issues/detail?id=23548)
- open for that, and I'll get to it Real Soon Now.**
-
-**Step three** is to copy that image to the chromebook and try it out.
-
-**chronos# cd /mnt/stateful_partition/**
-**chronos# scp YOU@SOMEWHERE:/PATH/TO/kernelpart.bin .**
-
-Install it into partition 4 (assuming we've booted from partition 2):
-
-**chronos# dd if=kernelpart.bin of=/dev/sda4
-chronos# cgpt add -i 4 -P 9 -T 1 -S 0 /dev/sda**
-
-**Note that I'm making partition 4 a high priority, but marking it as
-unsuccessful and with a tries count of 1. That way, when you reboot, you'll go
-back to your previous (working) ChromeOS kernel in partition 2.**
-
-Reboot and if all goes well, your code should run.
-
-An alternate here is to enable USB boot (`crossystem dev_boot_usb=1`) and then
-boot from an SD card / USB key that you built/burned with `build_image` /
-image_to_usb. In that case you can just put your `${KPART}` straight into
-partition 2 and boot it with Ctrl-U.
-
-### **Known issues**
-
-There probably are some. Even within a single type of firmware, each Chromebook
-has a slightly different version. Testing is done and bugs are fixed right up
-until final manufacturing, and development continues on the top of tree
-constantly. The standard Linux kernel doesn't generally trust the BIOS very
-much, so it often does a lot of its own hardware initialization even on Chrome
-OS. That means that some firmware bugs may exist that are masked or cleaned up
-by the kernel, where they won't be exposed by testing. Plus, there can be
-dependencies between the RO firmware (Coreboot, especially) and the RW firmware
-that a custom bootloader may not be aware of.
-
-## I'm not afraid of damaging things
-
-Well, okay then. Here's [a presentation from OSCON 2013](http://goo.gl/jsE8EE)
-on how to build and install your own firmware, including the read-only parts.
-Good luck. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/Selection_459.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/Selection_459.png.sha1
deleted file mode 100644
index 421aa920d7f..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/Selection_459.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d6096d4ab18792e0d1d145de3a3fddd0c8fa94ed \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/index.md
deleted file mode 100644
index 8dd97fb4b6a..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/index.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: dell-chromebook-11
-title: Dell Chromebook 11
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Dell Chromebook
-11](http://www.google.com/intl/en/chrome/education/devices/chromebooks.html#d11)
-that is interesting and/or useful to software developers. For general
-information about getting started with developing on Chromium OS (the
-open-source version of the software on the Chrome Notebook), see the [Chromium
-OS Developer Guide](http://www.chromium.org/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Haswell Celeron 2995U. 1.4GHz, dual-core, 2MB Cache
-* RAM: 2GB or 4GB DDR3 (Not upgradeable)
-* Display: 11.6" 1366x768
-* Disk: 16GB SSD (Not upgradeable)
-* I/O:
- * HDMI port
- * 2 x USB 3
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11 a/b/g/n
- * USB ports can handle some Ethernet dongles
- * [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
-
-## Running Chromium OS
-
-Before you start fiddling with your own builds it is strongly recommend to
-create a recovery USB stick or SD card. As long as you don't disable hardware
-write protect on the system & EC firmware, you can get your machine back into
-working order by entering Recovery Mode and plugging in your recovery image. You
-can create a recovery image from Chrome OS by browsing to chrome://imageburner
-or follow instructions for other OS on the [Chrome OS help
-center](https://support.google.com/chromebook/answer/1080595?hl=en) site.
-
-You can build and run Chromium OS on your Dell Chromebook 11 (versions R31 and
-later). Follow the [quick start
-guide](http://www.chromium.org/chromium-os/quick-start-guide) to setup a build
-environment. The board name for Dell Chromebook 11 is "wolf". Build an image and
-write it to a USB stick or SD card.
-
-To boot your image you will first need to enable booting developer signed images
-from USB (or SD card). Switch your machine to Developer mode and get to a shell
-by either via VT2 (Ctrl+Alt+F2) and logging in as root or by logging in as a
-user (or guest mode), starting a "crosh" shell with Ctrl+Alt+t, and typing
-"shell". Now run "sudo crossystem dev_boot_usb=1" and reboot "sudo reboot".
-
-Plug your USB stick or SD card in and on the scary "OS Verification is OFF"
-screen hit Ctrl+u to boot from external media. If all goes well you should see a
-"Chromium OS" logo screen. If you want to install your build to the SSD, open a
-shell and type "sudo /usr/sbin/chromeos-install". Note: This will replace
-EVERYTHING on your SSD. Use a recovery image if you want to get back to a stock
-Chrome OS build.
-
-Have fun!
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-wolf-4389.24.B)
-in the `firmware-wolf-4389.24.B` branches.
-
-## Disclaimer
-
-**Caution: Modifications you make to your Chromebook's hardware or software are
-not supported by Google, may compromise your online security, and may void your
-warranty....now on to the fun stuff.**
-
-## What's Inside?
-
-Taking apart your Chromebook is **not** encouraged. If you have hardware
-troubles, please seek assistance first from an authorized center. Be advised
-that disassembly might void warranties or other obligations, so please consult
-any and all paperwork your received first.
-
-The location of the firmware write protection disable screw is indicated by the
-red arrow below. Remove the screw, boot the system and run "flashrom
---wp-disable" to enable writing to the write protected regions of flash.
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/Selection_459.png"
-height=231
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/Selection_459.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/wolf_wp.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/wolf_wp.png.sha1
deleted file mode 100644
index d620f1202ee..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11/wolf_wp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ac03d6303e8a6ac2497d363258a2c8004f7d2449 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg.sha1
deleted file mode 100644
index 9a00b85b738..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4ef26e433d988a271919cd12773c1fe066d0b3d6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/generic/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/generic/index.md
deleted file mode 100644
index 849d742c6cb..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/generic/index.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: generic
-title: Generic Chrome OS Device Instructions
----
-
-[TOC]
-
-## Introduction
-
-Unfortunately, a page specific to your device does not yet exist. This page
-contains generic information for working with your Chrome OS device that is
-interesting and/or useful to software developers. It should hopefully work for
-your device, but there are no guarantees.
-
-For general information about getting started with developing on Chromium OS
-(the open-source version of the software on the Chrome Notebook), see the
-[Chromium OS Developer Guide](/chromium-os/developer-guide).
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode (dev mode) is the first step to tinkering with your
-Chromebook. With Developer mode enabled you can do things like poke around on a
-command shell (as root if you want), install Chromium OS, or try other OS's.
-Note that Developer mode turns off some security features like verified boot and
-disabling the shell access. If you want to browse in a safer, more secure way,
-leave Developer mode turned OFF.
-
-Note: Switching between Developer and Normal (non-developer) modes will remove
-user accounts and their associated information from your Chromebook.
-
-Note: "dev mode" and "dev channel" are completely independent features (even if
-they have very similar names). If you simply want to switch to the dev channel,
-see the [channel switching
-documentation](https://support.google.com/chromebook/answer/1086915).
-
-### Entering
-
-Please see our new [Debug Button Shortcuts
-document](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/debug_buttons.md)
-for more details. It explains different form factors too.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware/index.md
deleted file mode 100644
index c1a7ff612d9..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware/index.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: h2c-firmware
-title: Insyde H2O Firmware
----
-
-## Introduction
-
-The first few Google Chrome OS devices used a custom firmware based on a
-proprietary base often referred to as "H2C". It's a 64 bit UEFI BIOS from
-[Insyde](http://www.insyde.com/) named H2O ("Hardware-2-Operating System"), but
-a lot of code/features have been stripped out to significantly speed things up.
-Basically, everything not needed to boot Chrome OS was removed.
-
-Unfortunately, this also means the firmware source cannot be released.
-
-## Version Info
-
-The version numbers can be broken down like so:
-
-* &lt;board&gt;.&lt;Insyde H2O core version&gt;.&lt;Google H2C
- version&gt;.&lt;release number&gt;
- * the board will be Mario for the CR-48
- * the H2O version will be three dotted values and really only have
- meaning to Insyde
- * the H2C (Hardware to Chrome) version is:
- * Insyde release of 4 digits
- * the letter 'G'
- * a number incremented by Google for each release
- * the release number for the project itself:
- * Insyde release of 4 digits
- * letters incremented by Google for each release
-
-Here is an example from the CR-48:
-
-* Mario.03.60.1120.0038G5.0018d
- * board: Mario
- * H2O core version: 03.60.1120
- * H2C version: 0038G5
- * Insyde release: 0038
- * Google release: 5
- * Project version: 0018d
- * Insyde release: 0018
- * Google release: d (4th -&gt; d) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11/index.md
deleted file mode 100644
index 607aed43dc9..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: hp-chromebook-11
-title: HP Chromebook 11
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [HP Chromebook
-11](http://www.google.com/intl/en/chrome/devices/hp-chromebook-11/) that is
-interesting and/or useful to software developers. For general information about
-getting started with developing on Chromium OS (the open-source version of the
-software on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-Note: there have been multiple devices released under the moniker "HP Chromebook
-11". This page covers the first ARM boards.
-
-### Specifications
-
-* CPU: [Samsung Exynos 5 Dual
- Core](http://www.samsung.com/global/business/semiconductor/product/application/detail?productId=7668)
- (Cortex A15; 1.7GHz cpu)
-* GPU: [ARM
- Mali-T604](http://www.arm.com/products/multimedia/mali-graphics-hardware/mali-t604.php)
- (Quad Core)
- * 1366x768 [IPS screen](http://en.wikipedia.org/wiki/IPS_panel)
- with 300 nits (spring board)
- * 1366x768 TN panel (skate board)
-* RAM: 2 GiB DDR3
- * The memory is not upgradable as it is soldered directly to the
- board
-* Disk: 16 GiB SSD (connected to eMMC)
- * USB expansion ports
- * No SD slot
-* WiFi: 802.11 a/b/g/n
- * USB ports can handle Ethernet dongle
-* Power supply: 5.25V <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg"
- height=5> ([DC](http://en.wikipedia.org/wiki/Direct_current)) 3.A
- [micro
- USB](https://play.google.com/store/devices/details/Charger_for_HP_Chromebook_11)
-* No [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-
-The first release was the "spring" board. A later revision was named "skate"
-with a slightly different BOM.
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook).
-
-## Firmware
-
-This device uses [Das U-Boot](http://www.denx.de/wiki/U-Boot) to boot the
-system. You can find the source in the [ChromiumOS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-spring-3824.B)
-in the `firmware-spring-3824.B` branch.
-
-There is also firmware in a custom embedded controller (which handles things
-like the keyboard), but we won't cover that here as you generally should not
-need to modify that. You can find the source in the [ChromiumOS ec git
-tree](https://chromium.googlesource.com/chromiumos/platform/ec/+/firmware-spring-3824.B)
-(in the spring firmware branch).
-
-## Disassembly
-
-**Skate**
-
-Opening the case might void your warranty. It is also not recommended, since
-opening the case lifts the heat sink off the CPU and upon closing the case the
-thermal resistance might not fully recover. Especially, it is not recommended to
-run the device with the case opened.
-
-But if you must open the case: Remove 11 screws (two of them hidden under the
-round rubber feet close to the hinge) and then crack open the case at the seam,
-starting on the edge close to the touchpad. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/hero.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/hero.png.sha1
deleted file mode 100644
index b47554e2353..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/hero.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-734ff5f1a197634599af9b3735d9aace8e598ca3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/index.md
deleted file mode 100644
index d856d3fcdff..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: hp-chromebook-14
-title: HP Chromebook 14
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [HP Chromebook
-14](http://www.google.com/intl/en/chrome/devices/hp-14-chromebook.html) that is
-interesting and/or useful to software developers. For general information about
-getting started with developing on Chromium OS (the open-source version of the
-software on the Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-1.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-2.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-3.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-4.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-5.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-6.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-7.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-8.jpg"
-height=150 width=200>
-
-### Specifications
-
-* CPU: Haswell Celeron 2995U. 1.4GHz, dual-core, 2MB Cache
-* RAM: 2GiB or 4GiB DDR3 (Soldered down...sorry kids)
-* Display: 14" 1366x768. 200 nits.
-* Disk: 16GB SSD
- ([NGFF](http://en.wikipedia.org/wiki/Next_Generation_Form_Factor)
- M.2 connector)
-* I/O:
- * HDMI port
- * 1 x USB 2.0, 2 x USB 3.0
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11 a/b/g/n
- * USB ports can handle some Ethernet dongles
- * Bluetooth 4.0
- * [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-falco_peppy-4389.B)
-in the `firmware-falco_peppy-4389.B` branches.
-
-## Disassembly
-
-Opening the case might void your warranty.
-
-If you must open the case: Remove 13 screws, 4 of them hidden under small rubber
-plugs (not under the large round rubber feet) and then crack open the case at
-the seam, starting on the edge close to the touchpad. See also:
-<https://youtu.be/IrIRLbZ4npY> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-1.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-1.jpg.sha1
deleted file mode 100644
index 7850abc0ce0..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-1.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0f91856c53e802337e342fce4f48f798b669f4f0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-2.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-2.jpg.sha1
deleted file mode 100644
index 63a7c9fc0c5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-2.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9922c3f9dbe89191646d0bab74f79278360af382 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-3.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-3.jpg.sha1
deleted file mode 100644
index 696fef4be2a..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-3.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0e4f192ce228949d112e09d57401c0137c725e8d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-4.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-4.jpg.sha1
deleted file mode 100644
index 3a3e6a30212..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-4.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cf77315c7133ff5d462fb45b07a1aa8b2874417b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-5.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-5.jpg.sha1
deleted file mode 100644
index 0964878ac33..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-5.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1eaf3212ba2aeea1f266e2b73cbb52b9986355f0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-6.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-6.jpg.sha1
deleted file mode 100644
index 34d0e767043..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-6.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b647c7790bf5100533363a3cae6938e6819dbdd0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-7.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-7.jpg.sha1
deleted file mode 100644
index f5dad04ab88..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-7.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e64743ee0d87d954352e4a8ed7e9d0cef7b71ecf \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-8.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-8.jpg.sha1
deleted file mode 100644
index 9d4eb2e24af..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14/large-8.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8b22f263d2754dc23b4e010898c87a79f46dca45 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebox/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebox/index.md
deleted file mode 100644
index 8e9ba2681fc..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-chromebox/index.md
+++ /dev/null
@@ -1,169 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: hp-chromebox
-title: HP Chromebox
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the HP Chromebox that is interesting and/or
-useful to software developers. For general information about getting started
-with developing on Chromium OS (the open-source version of the software on the
-Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Haswell Celeron 2995U. 1.4GHz, dual-core, 2MB Cache OR 1.7 GHz
- Core i3-4010U, quad-core
-* RAM: 2GB (celeron) or 4GB (i7)
-* Display: None
-* Disk: 16GB SSD
- ([NGFF](http://en.wikipedia.org/wiki/Next_Generation_Form_Factor)
- M.2 connector)
-* I/O:
- * HDMI port
- * DisplayPort++
- * 4 x USB 3.0
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
-* Connectivity:
- * WiFi: 802.11 a/b/g/n
- * USB ports can handle some Ethernet dongles
- * Ethernet
- * [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-**Introduction**
-
-Enabling Developer mode is the first step to tinkering with your Chromebox. With
-Developer mode enabled you can do things like poke around on a command shell (as
-root if you want), install Chromium OS, or try other OS's. Note that Developer
-mode turns off some security features like verified boot and disabling the shell
-access. If you want to browse in a safer, more secure way, leave Developer mode
-turned OFF. Note: Switching between Developer and Normal (non-developer) modes
-will remove user accounts and their associated information from your Chromebox.
-
-### Entering
-
-To invoke Recovery mode, you insert a paper clip and press the RECOVERY BUTTON
-(just above the kensington lock) and press the Power button. Release the
-RECOVERY BUTTON after a second.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm by pressing the RECOVERY BUTTON again.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Legacy Boot
-
-This device includes the SeaBIOS firmware which supports booting images directly
-like a legacy BIOS would. Note: the BIOS does not provide a fancy GUI for you,
-nor is it easy to use for beginners. You will need to manually boot/install your
-alternative system.
-
-Like USB boot, support for this is disabled by default. You need to get into
-Dev-mode first and then run:
-
-```none
-sudo crossystem dev_boot_legacy=1
-```
-
-and reboot once to boot legacy images with Ctrl-L.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Troubleshooting
-
-### Legacy Boot Doesn't Work
-
-Sometimes it's possible to break the SeaBIOS install in the flash (sometimes
-doing innocuous things like tweaking the GBB flags). If you do get into such a
-situation:
-
-* Check that dev_boot_legacy is set to 1 when you run crossystem
- * If it isn't, then see the normal Legacy Boot section above
- * if it is, then see below
-
-You can safely reset the copy of SeaBIOS in your flash by running (as root):
-
-```none
-# chromeos-firmwareupdate --sb_extract /tmp
-# flashrom -w /tmp/bios.bin -i RW_LEGACY
-```
-
-## Running Chromium OS
-
-Before you start fiddling with your own builds it is strongly recommend to
-create a recovery USB stick or SD card. As long as you don't disable hardware
-write protect on the system & EC firmware, you can get your machine back into
-working order by entering Recovery Mode and plugging in your recovery image. You
-can create a recovery image from Chrome OS by browsing to chrome://imageburner
-or follow instructions for other OS on the [Chrome OS help
-center](https://support.google.com/chromebook/answer/1080595?hl=en) site.
-
-You can build and run Chromium OS on your HP Chromebox (versions R32 and later).
-Follow the [quick start guide](/chromium-os/quick-start-guide) to setup a build
-environment. The board name for the HP Chromebox is "zako". Build an image and
-write it to a USB stick or SD card.
-
-To boot your image you will first need to enable booting developer signed images
-from USB (or SD card). Switch your machine to Developer mode and get to a shell
-by either via VT2 (Ctrl+Alt+F2) and logging in as root or by logging in as a
-user (or guest mode), starting a "crosh" shell with Ctrl+Alt+t, and typing
-"shell". Now run "sudo crossystem dev_boot_usb=1" and reboot "sudo reboot".
-
-Plug your USB stick or SD card in and on the scary "OS Verification is OFF"
-screen hit Ctrl+u to boot from external media. If all goes well you should see a
-"Chromium OS" logo screen. If you want to install your build to the SSD, open a
-shell and type "sudo /usr/sbin/chromeos-install". Note: This will replace
-EVERYTHING on your SSD. Use a recovery image if you want to get back to a stock
-Chrome OS build.
-
-Have fun!
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) and [Das
-U-Boot](http://www.denx.de/wiki/U-Boot) to boot the system. You can find the
-source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-panther-4920.24.B)
-and the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-panther-4920.24.B)
-in the`firmware-zako-5219.B` branches. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-bottom-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-bottom-guts.jpg.sha1
deleted file mode 100644
index 104e81e6da6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-bottom-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-72032a23667ad4068511e4269e084e1fd11b3283 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-cpanel.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-cpanel.jpg.sha1
deleted file mode 100644
index 47bb2352a06..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-cpanel.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-afec5cbad39325c3808e232acfe2ef32f77bec9a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-dpanel.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-dpanel.jpg.sha1
deleted file mode 100644
index 7320252ae1e..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-dpanel.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6dcfe2bcb6b7e39cf7aefa111d148bba9ce3db04 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-keyboard.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-keyboard.jpg.sha1
deleted file mode 100644
index e1b00fce10d..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-keyboard.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-81e0def924230ad4990ebc414135b1ced6629b81 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-guts.jpg.sha1
deleted file mode 100644
index 8c43609034b..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8319f797b48fa3bf30c1ea4f8e1898325e0e424d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-wp.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-wp.jpg.sha1
deleted file mode 100644
index b0e2c328e9f..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-wp.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fd3b15853cddbcb377f5dd7b9220f261bf8e4f3a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/index.md
deleted file mode 100644
index 0d2629e302c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/index.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: hp-pavilion-14-chromebook
-title: HP Pavilion Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [HP Pavilion
-Chromebook](http://www.google.com/intl/en/chrome/devices/hp-pavilion-chromebook.html)
-that is interesting and/or useful to software developers. For general
-information about getting started with developing on Chromium OS (the
-open-source version of the software on the Chrome Notebook), see the [Chromium
-OS Developer Guide](/chromium-os/developer-guide).
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook).
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) and [Das
-U-Boot](http://www.denx.de/wiki/U-Boot) to boot the system. You can find the
-source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-butterfly-2788.B)
-and the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-butterfly-2788.B)
-in the `firmware-butterfly-2788.B` branches.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for a high res version):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-guts.jpg"
-height=216
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-guts.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-bottom-guts.jpg"
-height=198
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-bottom-guts.jpg)
-
-However, we acknowledge that some people like to tinker. So here's a quick guide
-to taking it apart:
-
-* First, acquire the necessary tools:
- * 1 phillips head screw driver (a PH0 should be able to handle
- everything)
- * 1 wide flat head screw driver, or a butter knife
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up and the hinge is
- facing away from you
-* Remove the battery
-* Remove all screws on D-panel (see pic) w/phillips head (there are
- 10)[<img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-dpanel.jpg"
- height=137
- width=200>](/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-dpanel.jpg)
-* Pry off keyboard using a flat instrument
- * The keyboard can bend inward and upward to dislodge the tabs
- which are all along the top and bottom of the keyboard
- * Start at the bottom left corner and work your way up the left
- side
- * With the left side popped, slide the screw driver along the
- middle underneath and wiggle/pop the tabs out as you go
- * There is a ribbon cable underneath the right shift key that
- needs to be disconnected from the motherboard
-
- [<img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-keyboard.jpg"
- height=150
- width=200>](/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-keyboard.jpg)
-
-* Remove all screws on C-panel. Note location of
- [servo](/chromium-os/servo) connector (non-standard 2x25 connector),
- circled in blue.
-
- [<img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-cpanel.jpg"
- height=150
- width=200>](/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-cpanel.jpg)
-
-* Disconnect the two ribbon cables and pry off C-panel
- * You can use the open holes in the metal plate to pull up until
- the edge along the hinge separates
- * Using the edge along the hinge, pull the top panel away from the
- bottom panel
-* Unit is now disassembled. Note the location of the WP switch.
-
- [<img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-wp.jpg"
- height=200
- width=150>](/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook/butterfly-top-wp.jpg) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/index.md
deleted file mode 100644
index e7258976084..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/index.md
+++ /dev/null
@@ -1,3858 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: developer-information-for-chrome-os-devices
-title: Developer Information for Chrome OS Devices
----
-
-## Introduction
-
-This page provides developer-related information for Chrome devices. These are
-systems that *shipped from the factory* with Google Chrome OS on them. For
-details about Google Chrome OS and how it differs from Chromium OS, see the
-[note in the FAQ about Google Chrome
-OS](http://www.chromium.org/chromium-os/chromium-os-faq#TOC-What-s-the-difference-between-Chrom).
-Chrome OS devices typically require special setup in order to be used for
-Chromium OS development.
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-> Remember: Chrome OS devices are **not** general-purpose PCs. We believe you
-> should be able to hack on your own property, but if you do it's not our fault
-> if something breaks.
-
-Googlers not finding what they're looking for may want to look at
-[go/cros-names](http://goto.google.com/cros-names).
-
-### End of Life (EOL) / Auto Update Expiration (AUE)
-
-The [official Google policy](https://support.google.com/chrome/a/answer/6220366)
-includes projected dates. Here we focus on the corresponding release versions as
-that is often more useful to developers.
-
-## Routers
-
-These WiFi routers are marketed as [OnHub](https://on.google.com/hub/), [Google
-Wifi](https://store.google.com/us/product/google_wifi), and [Nest
-Wifi](https://store.google.com/us/product/nest_wifi).
-
-<table>
-<tr>
-<td> <b>Release date</b></td>
-<td><b> Manufacturer</b></td>
-<td><b> Model</b></td>
-<td><b> Project code name</b></td>
-<td><b> Board name(s)</b></td>
-<td> <b>Base board</b></td>
-</tr>
-<tr>
-<td> August 2015</td>
-<td> TP-LINK</td>
-<td> <a href="/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900">OnHub Router TGR1900</a></td>
-<td> Whirlwind</td>
-<td> whirlwind</td>
-<td> storm</td>
-</tr>
-<tr>
-<td> November 2015</td>
-<td> ASUS</td>
-<td> OnHub SRT-AC1900</td>
-<td> Arkham</td>
-<td> arkham</td>
-<td> storm</td>
-</tr>
-<tr>
-<td> November 2016</td>
-<td> Google</td>
-<td> <a href="https://madeby.google.com/wifi/">Google WiFi</a></td>
-<td> Gale</td>
-<td> gale</td>
-<td> gale</td>
-</tr>
-<tr>
-<td> November 2019</td>
-<td> Google</td>
-<td> <a href="https://store.google.com/us/product/nest_wifi">Nest Wifi router</a> (not "point")</td>
-<td> Mistral</td>
-<td> mistral</td>
-<td> mistral</td>
-</tr>
-</table>
-
-## USB Type-C
-
-<table>
-<tr>
-<td><b>Release date</b></td>
-<td><b> Model</b></td>
-<td><b> Board name(s)</b></td>
-</tr>
-<tr>
-<td> January 2015</td>
-<td> <a href="/chromium-os/dingdong">USB Type-C to DP Adapter</a></td>
-<td> dingdong</td>
-</tr>
-<tr>
-<td> January 2015</td>
-<td> <a href="/chromium-os/hoho">USB Type-C to HDMI Adapter</a></td>
-<td> hoho</td>
-</tr>
-<tr>
-<td> January 2015</td>
-<td> USB Type-C to VGA Adapter</td>
-<td> hoho, but substitute a DP to VGA chip</td>
-</tr>
-<tr>
-<td> January 2015</td>
-<td> <a href="/chromium-os/twinkie">USB-PD Sniffer</a></td>
-<td> twinkie</td>
-</tr>
-</table>
-
-## Notebooks and Desktops
-
-These are your standard Chromebook/Chromebox/etc devices.
-
-<table>
- <tr>
- <th>Release</th>
- <th>OEM</th>
- <th>Model</th>
- <th>Code name</th>
- <th>Board name(s)</th>
- <th>Base board</th>
- <th>User ABI</th>
- <th>Kernel</th>
- <th>Kernel ABI</th>
- <th>Platform</th>
- <th>Form Factor</th>
- <th>First Release</th>
- <th>EOL/AUE</th>
- <th>USB Gadget</th>
- <th>Closed Case Debugging</th>
- </tr>
- <tr>
- <td></td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/coming-soon/IdeaPad-F5-CB-13CML-05/p/88IPFC51448">IdeaPad Flex 5i Chromebook (13", 5) </a></td>
- <td>Akemi</td>
- <td>Hatch</td>
- <td>Hatch </td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Convertible</td>
- <td>R81</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td></td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/gb/en/laptops/lenovo/student-chromebooks/100e-AMD-G3/p/22ED01E1EA3">Lenovo 100e Chromebook Gen 3 AMD</a></td>
- <td>vilboz</td>
- <td>zork</td>
- <td>dalboz</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Pollock</td>
- <td>Chromebook</td>
- <td>M91</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td>Google</td>
- <td><a href="https://store.google.com/us/product/pixelbook_go">Pixelbook Go</a></td>
- <td>atlas</td>
- <td>atlas</td>
- <td>poppy</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Amberlake-Y</td>
- <td>Chromebook</td>
- <td>M75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td>Yes</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td></td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-Flip-CM3-CM3200/">ASUS Chromebook Flip CM3 (CM3200)</a></td>
- <td>Damu</td>
- <td>jacuzzi</td>
- <td>jacuzzi</td>
- <td>arm</td>
- <td>4.19</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Convertible</td>
- <td>R87</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td></td>
- <td>Lenovo</td>
- <td><a href="https://www.aboutchromebooks.com/news/mwc-2021-lenovo-chromebook-5i-and-flex-5i-debut-look-great-on-paper/">IdeaPad Flex 5i Chromebook</a></td>
- <td>lillipup</td>
- <td>volteer</td>
- <td>volteer</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP3</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td></td>
- <td>HP</td>
- <td><a href="">HP Chromebook x360 14b / HP Chromebook x360 14a</a></td>
- <td>Blooguard</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Convertible</td>
- <td></td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-Detachable-CM3-CM3000/"> ASUS Chromebook Detachable CM3 (CM3000)</a></td>
- <td>Kakadu</td>
- <td>kukui</td>
- <td>kukui</td>
- <td>arm</td>
- <td>4.19</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Chromeblet</td>
- <td>R88</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td></td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebook712">Acer Chromebook 712</a></td>
- <td>Kindred</td>
- <td>Hatch </td>
- <td>Hatch</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Chromebook</td>
- <td>R79</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td></td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/coming-soon/300e-AMD-G3/p/22ED03E3EA3">Lenovo 300e Chromebook Gen 3 AMD</a></td>
- <td>vilboz360</td>
- <td>zork</td>
- <td>dalboz</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Pollock</td>
- <td>Chromebook</td>
- <td>R91</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-Flip-CM3-CM3200/">ASUS Chromebook Flip CM3 (CM3200)</a></td>
- <td>Hayato</td>
- <td>asurada</td>
- <td>asurada</td>
- <td>arm</td>
- <td>5.4</td>
- <td>aarch64</td>
- <td>MT8192</td>
- <td>Chromebook</td>
- <td>M91</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2010-12-05</td>
- <td>Google</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information">Cr-48</a></td>
- <td>Mario</td>
- <td>x86-mario</td>
- <td></td>
- <td>x86</td>
- <td>3.8</td>
- <td>x86</td>
- <td>PineTrail</td>
- <td>Chromebook</td>
- <td>~R8</td>
- <td>R56</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2011-05-30</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook">Samsung Series 5 Chromebook</a></td>
- <td>Alex</td>
- <td>x86-alex & x86-alex_he</td>
- <td></td>
- <td>x86</td>
- <td>3.8</td>
- <td>x86</td>
- <td>PineTrail</td>
- <td>Chromebook</td>
- <td>R11</td>
- <td>R58</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2011-06-30</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook">Acer AC700 Chromebook</a></td>
- <td>ZGB</td>
- <td>x86-zgb & x86-zgb_he</td>
- <td></td>
- <td>x86</td>
- <td>3.8</td>
- <td>x86</td>
- <td>PineTrail</td>
- <td>Chromebook</td>
- <td>R12</td>
- <td>R58</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2012-04-29</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge">Samsung Chromebook Series 5 550</a></td>
- <td>Lumpy</td>
- <td>lumpy</td>
- <td></td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>SandyBridge</td>
- <td>Chromebook</td>
- <td>R17</td>
- <td>R65</td>
- <td></td>
- <td>No </td>
- </tr>
- <tr>
- <td>2012-07-01</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge">Samsung Chromebox Series 3</a></td>
- <td>Stumpy</td>
- <td>stumpy</td>
- <td></td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>SandyBridge</td>
- <td>Chromebox</td>
- <td>R17</td>
- <td>R65</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2012-10-14</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook">Samsung Chromebook</a></td>
- <td>Snow</td>
- <td>daisy</td>
- <td>daisy</td>
- <td>arm</td>
- <td>3.8</td>
- <td>arm</td>
- <td>Exynos 5250</td>
- <td>Chromebook</td>
- <td>R22</td>
- <td>R75</td>
- <td></td>
- <td>No </td>
- </tr>
- <tr>
- <td>2012-10-30</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook">Acer C7 Chromebook</a></td>
- <td>Parrot</td>
- <td>parrot_ivb</td>
- <td>parrot</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>IvyBridge</td>
- <td>Chromebook</td>
- <td>R27</td>
- <td>R69</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2012-10-30</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook">Acer C7 Chromebook</a></td>
- <td>Parrot</td>
- <td>parrot</td>
- <td></td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>SandyBridge</td>
- <td>Chromebook</td>
- <td>R21</td>
- <td>R65</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2012-12-30</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook">Lenovo Thinkpad X131e Chromebook</a></td>
- <td>Stout</td>
- <td>stout</td>
- <td></td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>IvyBridge</td>
- <td>Chromebook</td>
- <td>R22</td>
- <td>R69</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2013-01-30</td>
- <td>Google</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel">Google Chromebook Pixel</a></td>
- <td>Link</td>
- <td>link</td>
- <td></td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>IvyBridge</td>
- <td>Chromebook</td>
- <td>R22</td>
- <td>R69</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2013-01-30</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook">HP Pavilion Chromebook 14</a></td>
- <td>Butterfly</td>
- <td>butterfly</td>
- <td></td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>SandyBridge</td>
- <td>Chromebook</td>
- <td>R22</td>
- <td>R65</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2013-09-12</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook">Acer C720/C70P/C740 Chromebook</a></td>
- <td>Peppy & Pepto</td>
- <td>peppy</td>
- <td>slippy</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebook</td>
- <td>R30</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2013-09-29</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11">HP Chromebook 11 G1</a></td>
- <td>Spring</td>
- <td>daisy_spring</td>
- <td>snow</td>
- <td>arm</td>
- <td>3.8</td>
- <td>arm</td>
- <td>Exynos 5250</td>
- <td>Chromebook</td>
- <td>R27</td>
- <td>R72</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2013-09-29</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14">HP Chromebook 14</a></td>
- <td>Falco</td>
- <td>falco & falco_li</td>
- <td>slippy</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebook</td>
- <td>R30</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-01-15</td>
- <td>Dell</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11">Dell Chromebook 11</a></td>
- <td>Wolf</td>
- <td>wolf</td>
- <td>slippy</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebook</td>
- <td>R31</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-01-30</td>
- <td>Toshiba</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook">Toshiba Chromebook</a></td>
- <td>Leon</td>
- <td>leon</td>
- <td>slippy</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebook</td>
- <td>R31</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-03-13</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox">ASUS Chromebox CN60</a></td>
- <td>Panther</td>
- <td>panther</td>
- <td>beltino</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebox</td>
- <td>R32</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-05-04</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2">Samsung Chromebook 2 11"</a></td>
- <td>Pit</td>
- <td>peach_pit</td>
- <td>peach</td>
- <td>arm</td>
- <td>3.8</td>
- <td>arm</td>
- <td>Exynos 5450</td>
- <td>Chromebook</td>
- <td>R30</td>
- <td>R75</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-05-18</td>
- <td>LG</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w">LG Chromebase 22CV241 &amp; 22CB25S</a></td>
- <td>Monroe</td>
- <td>monroe</td>
- <td>beltino</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebase</td>
- <td>R33</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-05-18</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2">Samsung Chromebook 2 13"</a></td>
- <td>Pi</td>
- <td>peach_pi</td>
- <td>peach</td>
- <td>arm</td>
- <td>3.8</td>
- <td>arm</td>
- <td>Exynos 5450</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td>R75</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-05-25</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11">HP Chromebook 11 G2</a></td>
- <td>Skate</td>
- <td>daisy_skate</td>
- <td>snow</td>
- <td>arm</td>
- <td>3.8</td>
- <td>arm</td>
- <td>Exynos 5250</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td>R75</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-05-29</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20">Lenovo N20 Chromebook</a></td>
- <td>Clapper</td>
- <td>clapper</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Convertible</td>
- <td>R34</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-05-31</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebook C200</a></td>
- <td>Squawks</td>
- <td>squawks</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-06-05</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Lenovo ThinkPad 11e Chromebook</a></td>
- <td>Glimmer</td>
- <td>glimmer</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Convertible</td>
- <td>R34</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-06-14</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Enguarde</td>
- <td>enguarde</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-06-14</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Expresso</td>
- <td>expresso</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-06-21</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/hp-chromebox">HP Chromebox G1</a></td>
- <td>Zako</td>
- <td>zako</td>
- <td>beltino</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebox</td>
- <td>R34</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-08-20</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebox</a></td>
- <td>McCloud</td>
- <td>mccloud</td>
- <td>beltino</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebox</td>
- <td>R36</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-08-30</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebook C300</a></td>
- <td>Quawks</td>
- <td>quawks</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-08-31</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebook 11 (C730 / C730E / C735)</a></td>
- <td>Gnawty</td>
- <td>gnawty</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-09-01</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebook 11 G3 / G4 / G4 EE</a></td>
- <td>Kip</td>
- <td>kip</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R34</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-09-02</td>
- <td>Toshiba</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Toshiba Chromebook 2</a></td>
- <td>Swanky</td>
- <td>swanky</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R36</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-09-07</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13">Acer Chromebook 13 (CB5-311)</a></td>
- <td>Big</td>
- <td>nyan_big</td>
- <td>nyan</td>
- <td>arm</td>
- <td>3.10</td>
- <td>arm</td>
- <td>Tegra K1 T124</td>
- <td>Chromebook</td>
- <td>R35</td>
- <td>R77</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-09-13</td>
- <td>Dell</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Dell Chromebox</a></td>
- <td>Tricky</td>
- <td>tricky</td>
- <td>beltino</td>
- <td>x86_64</td>
- <td>3.8</td>
- <td>x86_64</td>
- <td>Haswell</td>
- <td>Chromebox</td>
- <td>R36</td>
- <td>R76</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-10-13</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Samsung Chromebook 2 11 - XE500C12</a></td>
- <td>Winky</td>
- <td>winky</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R36</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2014-10-18</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebook 14 G3</a></td>
- <td>Blaze</td>
- <td>nyan_blaze</td>
- <td>nyan</td>
- <td>arm</td>
- <td>3.10</td>
- <td>arm</td>
- <td>Tegra K1 T124</td>
- <td>Chromebook</td>
- <td>R36</td>
- <td>R77</td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-02-28</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook">Acer C670 Chromebook 11</a></td>
- <td>Paine</td>
- <td>auron_paine</td>
- <td>auron</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebook</td>
- <td>R40</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-02-28</td>
- <td>Dell</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Dell Chromebook 11 (3120)</a></td>
- <td>Candy</td>
- <td>candy</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R39</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-03-11</td>
- <td>Google</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel-2015">Google Chromebook Pixel (2015)</a></td>
- <td>Samus</td>
- <td>samus</td>
- <td></td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebook</td>
- <td>R39</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-04-23</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebook 15.6" (CB3-531)</a></td>
- <td>Banjo</td>
- <td>banjo</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R42</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-04-30</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Jerry</td>
- <td>veyron_jerry</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Chromebook</td>
- <td>R41</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-04-30</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Mighty</td>
- <td>veyron_mighty</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Chromebook</td>
- <td>R41</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-04-30</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook">Acer Chromebook 15</a></td>
- <td>Yuna</td>
- <td>auron_yuna</td>
- <td>auron</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebook</td>
- <td>R40</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-04-30</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Jaq</td>
- <td>veyron_jaq</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Chromebook</td>
- <td>R41</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-05-01</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebox CXI2</a></td>
- <td>Rikku</td>
- <td>rikku</td>
- <td>jecht</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebox</td>
- <td>R42</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-05-01</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebook C201</a></td>
- <td>Speedy</td>
- <td>veyron_speedy</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Chromebook</td>
- <td>R41</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-06-02</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Lenovo ThinkCentre Chromebox</a></td>
- <td>Tidus</td>
- <td>tidus</td>
- <td>jecht</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebox</td>
- <td>R42</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-07-01</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebook Flip C100PA</a></td>
- <td>Minnie</td>
- <td>veyron_minnie</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Convertible</td>
- <td>R42</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-08-01</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebase</a></td>
- <td>Kitty</td>
- <td>nyan_kitty</td>
- <td>nyan</td>
- <td>arm</td>
- <td>3.10</td>
- <td>arm</td>
- <td>Tegra K1 T124</td>
- <td>Chromebase</td>
- <td>R40</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-08-03</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebox CN62</a></td>
- <td>Guado</td>
- <td>guado</td>
- <td>jecht</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebox</td>
- <td>R41</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-08-13</td>
- <td>Dell</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Dell Chromebook 13 7310</a></td>
- <td>Lulu</td>
- <td>lulu</td>
- <td>auron</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebook</td>
- <td>R43</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-09-01</td>
- <td>AOpen</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">AOpen Chromebox Commercial</a></td>
- <td>Ninja</td>
- <td>ninja</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebox</td>
- <td>R43</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-09-02</td>
- <td>AOpen</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">AOpen Chromebase Commercial</a></td>
- <td>Sumo</td>
- <td>sumo</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebase</td>
- <td>R43</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-09-04</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Lenovo 100S Chromebook</a></td>
- <td>Orco</td>
- <td>orco</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R44</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-09-22</td>
- <td>Toshiba</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Toshiba Chromebook 2 (2015 Edition)</a></td>
- <td>Gandof</td>
- <td>gandof</td>
- <td>auron</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebook</td>
- <td>R44</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-11-02</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Asus Chromebit CS10</a></td>
- <td>Mickey</td>
- <td>veyron_mickey</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Chromebit</td>
- <td>R45</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-11-26</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Heli</td>
- <td>heli</td>
- <td>rambi</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>BayTrail</td>
- <td>Chromebook</td>
- <td>R45</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2015-12-01</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebook R11</a></td>
- <td>Cyan</td>
- <td>cyan</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R44</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2015-12-22</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Samsung Chromebook 3</a></td>
- <td>Celes</td>
- <td>celes</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R46</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-02-29</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebook C202SA/C300SA</a></td>
- <td>Terra</td>
- <td>terra</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R48</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-03-07</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ThinkPad 11e Chromebook 3rd</a></td>
- <td>Ultima</td>
- <td>ultima</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R48</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-03-29</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Chromebook 14 (CB3-431)</a></td>
- <td>Edgar</td>
- <td>edgar</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R49</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-04-01</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebase 24</a></td>
- <td>Buddy</td>
- <td>buddy</td>
- <td>auron</td>
- <td>x86_64</td>
- <td>3.14</td>
- <td>x86_64</td>
- <td>Broadwell</td>
- <td>Chromebase</td>
- <td>R48</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-05-05</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebook 13 G1</a></td>
- <td>Chell</td>
- <td>chell</td>
- <td>glados</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Skylake</td>
- <td>Chromebook</td>
- <td>R49</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-05-27</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Thinkpad 13 Chromebook</a></td>
- <td>Sentry</td>
- <td>sentry</td>
- <td>kunimitsu</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Skylake</td>
- <td>Chromebook</td>
- <td>R50</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-05-31</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Chromebook 14 for work (CP5-471)</a></td>
- <td>Lars</td>
- <td>lars</td>
- <td>kunimitsu</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Skylake</td>
- <td>Chromebook</td>
- <td>R49</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-07-08</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebook 11 G5</a></td>
- <td>Setzer</td>
- <td>setzer</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R51</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-08-01</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-11">Lenovo Chromebook 11</a></td>
- <td>Reks</td>
- <td>reks</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R48</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-08-05</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Relm</td>
- <td>relm</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R52</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-08-08</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>Wizpig</td>
- <td>wizpig</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Convertible</td>
- <td>R50</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-08-12</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer 15.6" Chromebook</a></td>
- <td>Banon</td>
- <td>banon</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R51</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2016-09-06</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebook R13</a></td>
- <td>Elm</td>
- <td>elm</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Convertible</td>
- <td>R52</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-01-05</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebook Flip C302</a></td>
- <td>Cave</td>
- <td>cave</td>
- <td>glados</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Skylake</td>
- <td>Convertible</td>
- <td>R53</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-02-07</td>
- <td>Dell</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Dell Chromebook 13 3380</a></td>
- <td>Asuka</td>
- <td>asuka</td>
- <td>kunimitsu</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Skylake</td>
- <td>Chromebook</td>
- <td>R55</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-02-07</td>
- <td>Dell</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Chromebook 11 Model 3180</a></td>
- <td>Kefka</td>
- <td>kefka</td>
- <td>strago</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Braswell</td>
- <td>Chromebook</td>
- <td>R54</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-02-12</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Samsung Chromebook Plus</a></td>
- <td>Kevin</td>
- <td>kevin</td>
- <td>gru</td>
- <td>arm</td>
- <td>4.4</td>
- <td>aarch64</td>
- <td>RK3399</td>
- <td>Convertible</td>
- <td>R53</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-02-28</td>
- <td>AOpen</td>
- <td><a href="http://www.aopen.com/us/chrome-mini-products">AOpen Chromebox Mini</a></td>
- <td>fievel</td>
- <td>veyron_fievel</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Chromebox</td>
- <td>R54</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-02-28</td>
- <td>AOpen</td>
- <td><a href="http://www.aopen.com/us/chrome-mini-products">AOpen Chromebase Mini</a></td>
- <td>tiger</td>
- <td>veyron_tiger</td>
- <td>veyron_pinky</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>RK3288</td>
- <td>Chromebase</td>
- <td>R54</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-03-17</td>
- <td>Lenovo</td>
- <td><a href="http://shop.lenovo.com/us/en/laptops/lenovo/n-series/n23-yoga-chromebook/">Lenovo N23 Yoga Chromebook</a></td>
- <td>hana</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Convertible</td>
- <td>R56</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-04-24</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Lenovo Thinkpad 11e Chromebook / Lenovo Thinkpad Yoga 11e Chromebook</a></td>
- <td>Pyro</td>
- <td>pyro</td>
- <td>reef</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R56</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2017-04-24</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebook x360 11 G1 EE</a></td>
- <td>Snappy</td>
- <td>snappy</td>
- <td>reef</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Convertible</td>
- <td>R56</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2017-05-25</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Samsung Chromebook Pro</a></td>
- <td>Caroline</td>
- <td>caroline</td>
- <td>glados</td>
- <td>x86_64</td>
- <td>3.18</td>
- <td>x86_64</td>
- <td>Skylake</td>
- <td>Convertible</td>
- <td>R56</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-06-30</td>
- <td>Acer</td>
- <td><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebook Spin 11 R751T</a></td>
- <td>Electro</td>
- <td>reef</td>
- <td>reef</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R53</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2017-08-10</td>
- <td>Poin2</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Poin2 Chromebook 14</a></td>
- <td>Birch</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Chromebook</td>
- <td>R56</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2017-09-01</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/Laptops/ASUS-Chromebook-Flip-C101PA/">Asus Chromebook Flip C101PA</a></td>
- <td>Bob</td>
- <td>Bob</td>
- <td>gru</td>
- <td>arm</td>
- <td>4.4</td>
- <td>aarch64</td>
- <td>RK3399</td>
- <td>Convertible</td>
- <td>R58</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Hinge Port</td>
- </tr>
- <tr>
- <td>2017-09-08</td>
- <td>Acer</td>
- <td><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/generic">Chromebook 15 CB515-1HT/1H</a></td>
- <td>Sand</td>
- <td>sand</td>
- <td>reef</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R59</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2017-10-31</td>
- <td>Google</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Pixelbook</a></td>
- <td>Eve</td>
- <td>eve</td>
- <td>eve</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-Y</td>
- <td>Convertible</td>
- <td>R61</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td>Left Port</td>
- <td>Left Port</td>
- </tr>
- <tr>
- <td>2017-11-15</td>
- <td>Poin2</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Poin2 Chromebook 11C</a></td>
- <td>Hanawl</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Chromebook</td>
- <td>R56</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-02-14</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/press/2018/333129">Acer Chromebook 11 (C732, C732T, C732L &amp; C732LT )</a></td>
- <td>Astronaut</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R64</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-03-01</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/lenovo-n-series/300e-Chromebook/p/88ELC1S9997">Lenovo 300e Chromebook</a></td>
- <td>hana</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Convertible</td>
- <td>R64</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-03-01</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/lenovo-n-series/500e-Chromebook/p/88ELC1S9998">Lenovo 500e Chromebook</a></td>
- <td>robo360</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Convertible</td>
- <td>R64</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-03-01</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/lenovo-n-series/100e-Chromebook/p/88ELC1S9999">Lenovo 100e Chromebook</a></td>
- <td>robo</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R64</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-03-05</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/press/2018/324876">AcerChromebook 11 (CB311-8H &amp; CB311-8HT)</a></td>
- <td>Santa</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R64</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-03-16</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/AU/press/2018/333192">Acer Chromebook Spin 11 (CP311-1H &amp; CP311-1HN)</a></td>
- <td>Lava</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Convertible</td>
- <td>R64</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-05-18</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebox G2</a></td>
- <td>Kench</td>
- <td>fizz</td>
- <td>fizz</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Chromebox</td>
- <td></td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-06-01</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebox CXI3</a></td>
- <td>Sion</td>
- <td>fizz</td>
- <td>fizz</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Chromebox</td>
- <td></td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-06-01</td>
- <td>HP</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebook x2</a></td>
- <td>Soraka</td>
- <td>soraka</td>
- <td>poppy</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-Y</td>
- <td>Chromeblet</td>
- <td></td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td>Left Port</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-06-01</td>
- <td>ASUS</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebox 3</a></td>
- <td>Teemo</td>
- <td>fizz</td>
- <td>fizz</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Chromebox</td>
- <td></td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-06-01</td>
- <td>CTL</td>
- <td><a href="https://ctl.net/collections/chromebox-1/products/ctl-chromebox">CTL Chromebox CBx1</a></td>
- <td>Wukong</td>
- <td>fizz</td>
- <td>fizz</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Chromebox</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-06-01</td>
- <td>Viewsonic</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">ViewSonic NMP660 Chromebox</a></td>
- <td>Wukong</td>
- <td>fizz</td>
- <td>fizz</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Chromebox</td>
- <td></td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-06-14</td>
- <td>Samsung</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Samsung Chromebook Plus (V2)</a></td>
- <td>Nautilus</td>
- <td>nautilus</td>
- <td>poppy</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-Y</td>
- <td>Convertible</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-06-15</td>
- <td>CTL</td>
- <td><a href="https://ctl.net/products/ctl-chromebook-j41">CTL Chromebook J41</a></td>
- <td>Whitetip</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-06-30</td>
- <td><white label></td>
- <td><a href=""></a></td>
- <td>blacktip</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-06-30</td>
- <td>CTL</td>
- <td><a href="https://ctl.net/products/ctl-nl7t-chromebook-for-education-1">CTL Chromebook NL7T-360</a></td>
- <td>Blacktip360</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Convertible</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-06-30</td>
- <td>CTL</td>
- <td><a href="https://ctl.net/products/ctl-chromebook-nl7-for-education">CTL Chromebook NL7</a></td>
- <td>Blacktip</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-08-08</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/Laptops/ASUS-Chromebook-C223NA/">ASUS Chromebook C223</a></td>
- <td>babymega</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2018-08-31</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Lenovo Chromebook C330</a></td>
- <td>maple</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Convertible</td>
- <td>R67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-09-14</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/us/Laptops/ASUS-Chromebook-C423NA/">ASUS Chromebook C423</a></td>
- <td>rabbid</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R68</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2018-09-17</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Lenovo Chromebook S330</a></td>
- <td>maple14</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Chromebook</td>
- <td>M67</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-10-08</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/us/Laptops/ASUS-Chromebook-C523NA/">ASUS Chromebook C523</a></td>
- <td>babytiger</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R69</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2018-10-15</td>
- <td>Acer</td>
- <td><a href="">Acer Chromebook 514</a></td>
- <td>Epaulette</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R69</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-10-26</td>
- <td>Acer</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebook 13 / Spin 13</a></td>
- <td>Akali / Akali360</td>
- <td>nami</td>
- <td>nami</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Convertible</td>
- <td>R69</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2018-10-26</td>
- <td>Dell</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Dell Inspiron 14 2-in-1 Model 7486</a></td>
- <td>vayne</td>
- <td>vayne</td>
- <td>nami</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Chromebook</td>
- <td>R69</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-10-26</td>
- <td>Lenovo</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Yoga Chromebook C630</a></td>
- <td>pantheon</td>
- <td>pantheon</td>
- <td>nami</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Convertible</td>
- <td>R69</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2018-11-02</td>
- <td>Samsung</td>
- <td><a href="https://www.samsung.com/us/computing/chromebooks/12-14/samsung-chromebook-plus-lte-xe525qbb-k01us/">Samsung Chromebook Plus LTE</a></td>
- <td>Nautilus LTE</td>
- <td>nautilus</td>
- <td>poppy</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-Y</td>
- <td>Convertible</td>
- <td>R69</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2018-11-26</td>
- <td>Google</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">Google Pixel Slate</a></td>
- <td>Nocturne</td>
- <td>nocturne</td>
- <td>poppy</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-Y</td>
- <td>Chromeblet</td>
- <td>R71</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td>Left Port</td>
- <td>Left Port</td>
- </tr>
- <tr>
- <td>2019-01-06</td>
- <td>HP</td>
- <td><a href="https://store.hp.com/us/en/pdp/hp-chromebook-14-db0020nr">HP Chromebook 14 (db0000-db0999)</a></td>
- <td>careena</td>
- <td>grunt</td>
- <td>grunt</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Chromebook</td>
- <td>R70</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Right Port</td>
- </tr>
- <tr>
- <td>2019-01-07</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/press/2019/479116">Acer Chromebook 315</a></td>
- <td>Aleena</td>
- <td>grunt</td>
- <td>grunt</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Chromebook</td>
- <td>R71</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Left Port</td>
- </tr>
- <tr>
- <td>2019-01-16</td>
- <td>PCmerge</td>
- <td><a href="/chromium-os/developer-information-for-chrome-os-devices/generic">PCmerge Chromebook AL116</a></td>
- <td>Whitetip</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R71</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-01-18</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/us/Laptops/ASUS-Chromebook-C403NA/">ASUS Chromebook C403</a></td>
- <td>babymako</td>
- <td>coral</td>
- <td>coral</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>ApolloLake</td>
- <td>Chromebook</td>
- <td>R71</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-01-21</td>
- <td>HP</td>
- <td><a href="https://store.hp.com/us/en/pdp/hp-chromebook-11-g6-ee">HP Chromebook 11A G6 EE</a></td>
- <td>Barla</td>
- <td>grunt</td>
- <td>grunt</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Chromebook</td>
- <td>R71</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Right Port</td>
- </tr>
- <tr>
- <td>2019-02-27</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/student-chromebooks/Lenovo-100e-Chromebook-2nd-Gen-MTK/p/88ELC1S9989">Lenovo 100e Chromebook 2nd Gen (MTK)</a></td>
- <td>Sycamore</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2019-02-27</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/student-chromebooks/Lenovo-300e-Chromebook-2nd-Gen-MTK/p/88ELC1S9988">Lenovo 300e Chromebook 2nd Gen (MTK)</a></td>
- <td>Sycamore360</td>
- <td>hana</td>
- <td>oak</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2019-02-27</td>
- <td>Acer</td>
- <td><a href="http://eu-acerforeducation.acer.com/resources/bett-show-2019-acer-unveils-new-suite-of-11-6-inch-chromebooks/">Acer Chromebook 311</a></td>
- <td>bobba</td>
- <td>bobba</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-02-27</td>
- <td>Acer</td>
- <td><a href="https://eu-acerforeducation.acer.com/resources/bett-show-2019-acer-unveils-new-suite-of-11-6-inch-chromebooks/">Acer Chromebook Spin 511</a></td>
- <td>bobba360</td>
- <td>bobba360</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-03-01</td>
- <td>Lenovo</td>
- <td><a href="Lenovo%20500e%20Chromebook%202nd%20Gen">Lenovo 500e Chromebook 2nd Gen</a></td>
- <td>Phaser360S</td>
- <td>Octopus</td>
- <td></td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Convertible</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-03-01</td>
- <td>Lenovo</td>
- <td><a href="Lenovo%20100e%20Chromebook%202nd%20Gen">Lenovo 100e Chromebook 2nd Gen (Intel)</a></td>
- <td>Phaser</td>
- <td>Octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-03-01</td>
- <td>Lenovo</td>
- <td><a href="Lenovo%20300e%20Chromebook%202nd%20Gen%20(Intel)">Lenovo 300e Chromebook 2nd Gen (Intel)</a></td>
- <td>Phaser360</td>
- <td>Octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Convertible</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-03-06</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/press/2019/484286">Acer Chromebook Spin 512(R851TN)</a></td>
- <td>sparky360</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Convertible</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-03-06</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/student-chromebooks/Lenovo-14e-Chromebook/p/88ELC1S9991">Lenovo 14e Chromebook</a></td>
- <td>liara</td>
- <td>liara</td>
- <td>grunt</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Chromebook</td>
- <td>R71</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Left Port</td>
- </tr>
- <tr>
- <td>2019-03-08</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/press/2019/484286">Acer Chromebook 512(C851/C851T)</a></td>
- <td>sparky</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-03-15</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/us/Commercial-Laptops/ASUS-Chromebook-Flip-C434TA/">ASUS Chromebook Flip C434</a></td>
- <td>Shyvana</td>
- <td>rammus</td>
- <td>rammus</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Amberlake-Y</td>
- <td>Convertible</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-03-22</td>
- <td>Acer</td>
- <td><a href="https://9to5google.com/2019/01/23/acer-amd-chromebooks-education/">The Acer Chromebook 311 (C721) </a></td>
- <td>Kasumi</td>
- <td>grunt</td>
- <td>grunt</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Left Port</td>
- </tr>
- <tr>
- <td>2019-03-22</td>
- <td>Acer</td>
- <td><a href="https://9to5google.com/2019/01/23/acer-amd-chromebooks-education/">Acer Chromebook Spin 311 (R721T)</a></td>
- <td>Kasumi360</td>
- <td>grunt</td>
- <td>grunt</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Chromebook</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Left Port</td>
- </tr>
- <tr>
- <td>2019-03-30</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/Tablets/ASUS-Chromebook-Tablet-CT100PA/">ASUS Chromebook Tablet CT100</a></td>
- <td>Dumo</td>
- <td>scarlet</td>
- <td>scarlet</td>
- <td>arm</td>
- <td>4.4</td>
- <td>aarch64</td>
- <td>RK3399</td>
- <td>Chromeblet</td>
- <td>R73</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2019-04-01</td>
- <td>CTL</td>
- <td><a href="https://ctl.net/collections/tablets/products/ctl-chrome-tablet-tx1">CTL Chromebook Tab Tx1</a></td>
- <td>Druwl</td>
- <td>scarlet</td>
- <td>scarlet</td>
- <td>arm</td>
- <td>4.4</td>
- <td>aarch64</td>
- <td>RK3399</td>
- <td>Chromeblet</td>
- <td>R72</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2019-04-05</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/us/2-in-1-PCs/ASUS-Chromebook-Flip-C214MA/">ASUS-Chromebook-Flip-C214</a></td>
- <td>Ampton</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Convertible</td>
- <td>R73</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-04-05</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/us/Laptops/ASUS-Chromebook-C204MA/">ASUS Chromebook Flip C204</a></td>
- <td>Apel</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R73</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-04-22</td>
- <td>HP</td>
- <td><a href="https://www8.hp.com/us/en/laptops/product-details/27924352">HP Chromebook 11 G7 EE</a></td>
- <td>Mimrock</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R73</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-04-22</td>
- <td>HP</td>
- <td><a href="http://www8.hp.com/us/en/laptops/product-details/27924571">HP Chromebook x360 11 G2 EE</a></td>
- <td>Meep</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R73</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-06-17</td>
- <td>Lenovo </td>
- <td><a href="https://www.lenovo.com/gb/en/laptops/lenovo/student-chromebooks/Lenovo-Chromebook-C340-11/p/88LGCC31288">Lenovo Chromebook C340-11</a></td>
- <td>Laser</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Convertible</td>
- <td>R74</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-06-17</td>
- <td>Lenovo</td>
- <td><a href="https://psref.lenovo.com/Product/Lenovo_Laptops/Lenovo_Chromebook_S340">Lenovo Chromebook S340-14</a></td>
- <td>Laser14</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R74</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-07-31</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/student-chromebooks/Lenovo-Chromebook-C340-15/p/88LGCC31290">Lenovo Chromebook C340-15</a></td>
- <td>pyke</td>
- <td>nami</td>
- <td>nami</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Kabylake-U/R</td>
- <td>Convertible</td>
- <td>M75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-08-20</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/Laptops/ASUS-Chromebook-14-C425TA/">ASUS Chromebook C425</a></td>
- <td>leona</td>
- <td>leona</td>
- <td>rammus</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Amberlake-Y</td>
- <td>Chromebook</td>
- <td>M75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-08-26</td>
- <td>Dell</td>
- <td><a href="https://www.dell.com/en-us/work/shop/cty/pdp/spd/latitude-13-5300-2-in-1-chrome-laptop">Latitude 5300 2-in-1 Chromebook Enterprise</a></td>
- <td>arcada</td>
- <td>sarien</td>
- <td>sarien</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Whiskey Lake</td>
- <td>Chromebook</td>
- <td>R75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2019-08-26</td>
- <td>Dell</td>
- <td><a href="https://www.dell.com/en-us/work/shop/dell-laptops-and-notebooks/dell-latitude-5400-chromebook-enterprise/spd/latitude-14-5400-chrome-laptop/xctolc540014us1">Dell Latitude 5400 Chromebook Enterprise</a></td>
- <td>sarien</td>
- <td>sarien</td>
- <td>sarien</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Whiskey Lake</td>
- <td>Chromebook</td>
- <td>R75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>No</td>
- </tr>
- <tr>
- <td>2019-09-02</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/2-in-1-PCs/ASUS-Chromebook-Flip-C433TA/">ASUS Chromebook Flip C433TA</a></td>
- <td>shyvana-m</td>
- <td>shyvana</td>
- <td>rammus</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Amberlake-Y</td>
- <td>Convertible</td>
- <td>M75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-09-04</td>
- <td>Acer</td>
- <td><a href="https://news.acer.com/acer-delivers-full-lineup-of-chromebooks-for-family-fun-entertainment-productivity">Acer Chromebook Spin 311 (CP311-2H)</a></td>
- <td>gik360</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Convertible</td>
- <td>R76</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-09-04</td>
- <td>Acer</td>
- <td><a href="https://news.acer.com/acer-delivers-full-lineup-of-chromebooks-for-family-fun-entertainment-productivity">Acer Chromebook 314 (CB314-1H/1HT)</a></td>
- <td>Droid</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R76</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-09-04</td>
- <td>Acer</td>
- <td><a href="https://news.acer.com/acer-delivers-full-lineup-of-chromebooks-for-family-fun-entertainment-productivity">Acer Chromebook 315 (CB315-3H/3HT)</a></td>
- <td>Blorb</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R76</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-09-04</td>
- <td>Acer</td>
- <td><a href="https://news.acer.com/acer-delivers-full-lineup-of-chromebooks-for-family-fun-entertainment-productivity">Acer Chromebook 311 (CB311-9HT/9H) )</a></td>
- <td>gik</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R76</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-10-07</td>
- <td>Samsung</td>
- <td><a href="https://www.samsung.com/us/computing/chromebooks/under-12/chromebook-4-11-6-32gb-storage-4gb-ram-xe310xba-k01us/">Samsung Chromebook 4</a></td>
- <td>Bluebird</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebox</td>
- <td>R76</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-10-07</td>
- <td>Samsung</td>
- <td><a href="https://www.samsung.com/us/computing/chromebooks/15-18/chromebook-4-15-6-32gb-storage-4gb-ram-xe350xba-k01us/">Samsung Chromebook+</a></td>
- <td>Casta</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>M75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>yes</td>
- </tr>
- <tr>
- <td>2019-10-15</td>
- <td>Google</td>
- <td><a href="https://store.google.com/us/product/pixelbook_go">Pixelbook Go</a></td>
- <td>atlas</td>
- <td>atlas</td>
- <td>poppy</td>
- <td>x86_64</td>
- <td>4.4</td>
- <td>x86_64</td>
- <td>Amberlake-Y</td>
- <td>Chromebook</td>
- <td>October 2019</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td>Yes</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2019-12-27</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/Laptops/ASUS-Chromebook-C202XA/">ASUS Chromebook C202XA</a></td>
- <td>telesu</td>
- <td>hana</td>
- <td>hana</td>
- <td>arm</td>
- <td>3.18</td>
- <td>aarch64</td>
- <td>MT8173</td>
- <td>Chromebook</td>
- <td>M78</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-01-06</td>
- <td>Samsung</td>
- <td><a href="https://www.samsung.com/us/computing/chromebooks/">Samsung Galaxy Chromebook</a></td>
- <td>kohaku</td>
- <td>hatch</td>
- <td>hatch</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Convertible</td>
- <td>M79</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-01-07</td>
- <td>Lenovo</td>
- <td><a href="https://www.google.com/chromebook/device/lenovo-ideapad-duet-chromebook/">Lenovo Chromebook Duet/Lenovo IdeaPad Duet Chromebook</a></td>
- <td>krane</td>
- <td>kukui</td>
- <td>kukui</td>
- <td>arm</td>
- <td>4.19</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Chromeblet</td>
- <td>R79</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-01-13</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/2-in-1-PCs/ASUS-Chromebook-Flip-C436FA/">ASUS Chromebook Flip C436FA</a></td>
- <td>helios</td>
- <td>hatch</td>
- <td>hatch</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Convertible</td>
- <td>M79</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-01-14</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/coming-soon/Lenovo-10e-Chromebook-Tablet/p/22ED10E10E1">Lenovo 10e Chromebook Tablet</a></td>
- <td>kodama</td>
- <td>kukui</td>
- <td>kukui</td>
- <td>arm</td>
- <td>4.19</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Chromeblet</td>
- <td>M80</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-01-20</td>
- <td>HP</td>
- <td><a href="https://store.hp.com/us/en/pdp/hp-chromebook-11-g8-ee-notebook-pc-customizable-8mq33av-mb">HP Chromebook 11 G8 EE</a></td>
- <td>Vorticon</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R78</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-01-20</td>
- <td>HP</td>
- <td><a href="https://store.hp.com/us/en/pdp/hp-chromebook-x360-11-g3-ee-notebook-pc-customizable-8mm99av-mb">HP Chromebook x360 11 G3 EE</a></td>
- <td>Vortininja</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R78</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-01-20</td>
- <td>HP</td>
- <td><a href="https://store.hp.com/us/en/pdp/hp-chromebook-14-g5-notebook-pc-customizable-8mq26av-mb">HP Chromebook 14 G6</a></td>
- <td>Dorp</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R78</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-02-28</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/student-chromebooks/Lenovo-300e-Chromebook-2nd-Gen-AST/p/88ELC1S8036">Lenovo 300e 2nd Gen AMD</a></td>
- <td>Treeya360</td>
- <td>Grunt</td>
- <td></td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Convertible</td>
- <td>R80</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-02-28</td>
- <td>HP</td>
- <td><a href="https://www.google.com/chromebook/device/hp-chromebook-14a/">HP Chromebook 14a</a></td>
- <td>blooglet</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R79</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-02-28</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/lenovo/student-chromebooks/Lenovo-100e-Chromebook-2nd-Gen-AST/p/88ELC1S8035">Lenovo 100e 2nd Gen AMD</a></td>
- <td>Treeya</td>
- <td>Grunt</td>
- <td></td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Stoney Ridge</td>
- <td>Chromebook</td>
- <td>R80</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-05-01</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/professional-models/laptops/acerchromebook314">Acer Chromebook 314 (C933L/LT)</a></td>
- <td>droid</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R80</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-06-23</td>
- <td>Acer</td>
- <td><a href="Acer%20Chromebook%20Spin%20311%20(CP311-3H)">Acer Chromebook Spin 311 (CP311-3H)</a></td>
- <td>juniper</td>
- <td>jacuzzi</td>
- <td>jacuzzi</td>
- <td>arm</td>
- <td>4.19</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Chromebook</td>
- <td>M81</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-07-31</td>
- <td>Lenovo</td>
- <td><a href="https://www.google.com/chromebook/device/lenovo-ideapad-3-chromebook-11-05/">Ideapad 3 Chromebook</a></td>
- <td>Lick</td>
- <td>Octopus</td>
- <td></td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R80</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2020-08-11</td>
- <td>Dell</td>
- <td><a href="https://www.dell.com/en-us/work/shop/laptops/new-14-7410/spd/latitude-14-7410-2-in-1-chrome-laptop">Dell Latitude 7410 Chromebook Enterprise</a></td>
- <td>Drallion</td>
- <td>Drallion</td>
- <td>Drallion</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Chromebook</td>
- <td>R83</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-10-12</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-c-series/ThinkPad-C13-Yoga-Chromebook-Enterprise/p/22TPC13C3Y1">Lenovo ThinkPad C13 Yoga Chromebook</a></td>
- <td>morphius</td>
- <td>zork</td>
- <td>zork</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Picasso/Dali</td>
- <td>Convertible</td>
- <td>M86</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-10-23</td>
- <td>HP</td>
- <td><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/generic">HP Chromebox G3</a></td>
- <td>Noibat</td>
- <td>Puff</td>
- <td>Puff</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Chromebox</td>
- <td>R85</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-10-29</td>
- <td>ASUS</td>
- <td><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebox 4</a></td>
- <td>Duffy</td>
- <td>Puff</td>
- <td>Puff</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Chromebox</td>
- <td>R85</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-10-29</td>
- <td>Acer</td>
- <td><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/generic">Acer Chromebox CXI4</a></td>
- <td>Kaisa</td>
- <td>Puff</td>
- <td>Puff</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Chromebox</td>
- <td>R85</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-11-13</td>
- <td>ASUS</td>
- <td><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Fanless Chromebox</a></td>
- <td>Faffy</td>
- <td>Puff</td>
- <td>Puff</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Chromebox</td>
- <td>R85</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2020-12-29</td>
- <td>HP</td>
- <td><a href="https://www8.hp.com/h20195/v2/GetDocument.aspx?docname=4AA7-9044ENUC">HP Pro c645 Chromebook Enterprise</a></td>
- <td>berknip</td>
- <td>zork</td>
- <td>zork</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Picasso/Dali</td>
- <td>Chromebook</td>
- <td>M86</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-01-07</td>
- <td>Samsung</td>
- <td><a href="https://www.samsung.com/us/computing/chromebooks/galaxy-chromebook2/">Samsung Galaxy Chromebook 2</a></td>
- <td>nightfury</td>
- <td>hatch</td>
- <td>hatch</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Cometlake-U</td>
- <td>Convertible</td>
- <td></td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-01-13</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebookspin514">Acer Chromebook Spin 514</a></td>
- <td>Ezkinil</td>
- <td>Zork</td>
- <td>Zork</td>
- <td>x86_64</td>
- <td>4.19</td>
- <td>x86_64</td>
- <td>Picasso/Dali</td>
- <td>Convertible</td>
- <td>R86</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-01-22</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebookspin513">Acer Chromebook Spin 513</a></td>
- <td>Lazor</td>
- <td>Trogdor</td>
- <td>Trogdor</td>
- <td>arm</td>
- <td>5.4</td>
- <td>aarch64</td>
- <td>QC-7C</td>
- <td>Convertible</td>
- <td>R87</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-01-29</td>
- <td>HP</td>
- <td><a href="https://support.hp.com/us-en/document/c06995206#AbT0">HP Chromebook 11MK G9 EE</a></td>
- <td>esche</td>
- <td>jacuzzi</td>
- <td>jacuzzi</td>
- <td>arm</td>
- <td>4.19</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Chromebook</td>
- <td>R87</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-01-29</td>
- <td>HP</td>
- <td><a href="https://store.hp.com/us/en/pdp/hp-chromebook-x360-11mk-g3-ee-customizable-2p2j9av-mb">HP Chromebook x360 11MK G3 EE</a></td>
- <td>burnet</td>
- <td>jacuzzi</td>
- <td>jacuzzi</td>
- <td>arm</td>
- <td>4.19</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Convertible</td>
- <td>R87</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-03-05</td>
- <td>HP</td>
- <td><a href="https://support.hp.com/us-en/document/c07056426">HP Chromebook 14 G7</a></td>
- <td>Drawman</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R87</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-03-12</td>
- <td>HP</td>
- <td><a href="https://support.hp.com/us-en/document/c07030816">HP Chromebook 11 G9 EE</a></td>
- <td>Drawlat</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R87</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-03-19</td>
- <td>HP</td>
- <td><a href="https://support.hp.com/us-en/product/hp-chromebook-x360-11-g4-education-edition/38457215/product-info">HP Chromebook x360 11 G4 EE</a></td>
- <td>Drawcia</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R88</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-03-26</td>
- <td>HP</td>
- <td><a href="https://www.hp.com/us-en/shop/pdp/hp-chromebook-14a-nd0097nr">HP Chromebook 14a-nd0097nr</a></td>
- <td>dirinboz</td>
- <td>zork</td>
- <td>dalboz</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Pollock</td>
- <td>Chromebook</td>
- <td>R88</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-04-16</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-Flip-CM5-CM5500/">ASUS Chromebook Flip CM5</a></td>
- <td>woomax</td>
- <td>zork</td>
- <td>zork</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Picasso/Dali</td>
- <td>Chromebook</td>
- <td>R88</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-05-25</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/us/en/coming-soon/500e-G3/p/22ED05E5EN3">Lenovo 500e Chromebook Gen 3</a></td>
- <td>Boten</td>
- <td>boten</td>
- <td>dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Convertible</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-05-27</td>
- <td>Acer</td>
- <td><a href="https://news.acer.com/acer-launches-four-new-chromebooks-including-industrys-first-17-inch-model">The Acer Chromebook 514 (CB514-1H)</a></td>
- <td>Volta</td>
- <td>Volteer</td>
- <td>Volteer</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP3</td>
- <td>Chromebook</td>
- <td>R91</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-05-27</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebookspin713cp7133w">Acer Chromebook Spin 713 (CP713-3W)</a></td>
- <td>Voxel</td>
- <td>Volteer</td>
- <td>Volteer</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP3</td>
- <td>Convertible</td>
- <td>R89</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-05-30</td>
- <td>Lenovo</td>
- <td><a href="">Lenovo Flex 3i-11 Chromebook</a></td>
- <td>botenflex</td>
- <td>boten</td>
- <td>dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-05-31</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-Flip-CX5-CX5500/">ASUS Chromebook Flip CX5 (CX5500)</a></td>
- <td>delbin</td>
- <td>Volteer</td>
- <td>Volteer</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP3</td>
- <td>Convertible</td>
- <td>R89</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-06-04</td>
- <td>HP</td>
- <td><a href="https://www8.hp.com/us/en/cloud-computing/chrome-enterprise/hp-pro-c640-chromebook.html"> HP Pro c640 G2 Chromebook</a></td>
- <td>Elemi</td>
- <td>Volteer</td>
- <td>Volteer</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP3</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-06-16</td>
- <td>HP</td>
- <td><a href="https://support.hp.com/ca-en/document/c07657289">HP Chromebook 14a</a></td>
- <td>Lantis</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-06-26</td>
- <td>Asus</td>
- <td><a href="">ASUS Chromebook Flip CX5 (CX5400)</a></td>
- <td>copano</td>
- <td>copano</td>
- <td>terrador</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP4</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-06-30</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebook511c741l">Acer Chromebook 511</a></td>
- <td>Limozeen</td>
- <td>Trogdor</td>
- <td>Trogdor</td>
- <td>arm</td>
- <td>5.4</td>
- <td>aarch64</td>
- <td>QC-7C</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-07-07</td>
- <td>HP</td>
- <td><a href="https://support.hp.com/th-en/document/c07653399">HP Chromebook x360 14a</a></td>
- <td>Gumboz</td>
- <td>zork</td>
- <td>dalboz</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Pollock</td>
- <td>Chromebook</td>
- <td>R89</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-07-20</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Work/Chromebook/ASUS-Chromebook-CX9-CX9400-11th-Gen-Intel/">ASUS Chromebook CX9 (CX9400)</a></td>
- <td>drobit</td>
- <td>drobit</td>
- <td>Volteer</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP3</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-08-02</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-CX1-CX1500/">Asus Chromebook CX1500</a></td>
- <td>Galith</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-08-05</td>
- <td>Samsung</td>
- <td><a href="https://www.samsungmobilepress.com/mediaresources/galaxy_chromebook_go">Galaxy Chromebook Go</a></td>
- <td>sasuke</td>
- <td>sasuke</td>
- <td>dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R90</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-08-20</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-CX1-CX1101/">ASUS Chromebook CX1101</a></td>
- <td>Apele</td>
- <td>octopus</td>
- <td>octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>R91</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-08-21</td>
- <td>ASUS</td>
- <td><a href="https://www.asus.com/laptops/for-home/all-series/filter?Series=Chromebook&amp;SubSeries=Chromebook,Chromebook-Flip,Chromebook-Detachable">ASUS Chromebook C424</a></td>
- <td>Nospike</td>
- <td>Octopus</td>
- <td>Octopus</td>
- <td>x86_64</td>
- <td>4.14</td>
- <td>x86_64</td>
- <td>Gemini Lake</td>
- <td>Chromebook</td>
- <td>M75</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2021-08-23</td>
- <td>ASUS</td>
- <td><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/generic">ASUS Chromebook Flip CM1</a></td>
- <td>Jelboz360</td>
- <td>zork</td>
- <td>dalboz</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Pollock</td>
- <td>Chromebook</td>
- <td>R92</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-08-24</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-CX1-CX1700/">ASUS Chromebook CX1700</a></td>
- <td>Gallop</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R91</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-09-23</td>
- <td>Lenovo</td>
- <td><a href="https://www.lenovo.com/ca/en/coming-soon/IdeaPad-Duet-5-Chromebook/p/LEN101I0023">Lenovo Chromebook Duet 5 /IdeaPad Duet 5 Chromebook</a></td>
- <td>Homestar</td>
- <td>Strongbad</td>
- <td>Strongbad</td>
- <td>arm</td>
- <td>5.4</td>
- <td>aarch64</td>
- <td>QC-7C</td>
- <td>Chromeblet</td>
- <td>R92</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-09-27</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Students/Chromebook/ASUS-Chromebook-CR1-CR1100/">ASUS Chromebook CR1100</a></td>
- <td>Storo</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Chromebook</td>
- <td>R92</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-09-27</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Students/Chromebook/ASUS-Chromebook-Flip-CR1-CR1100/">ASUS Chromebook Flip CR1100</a></td>
- <td>Storo360</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Convertible</td>
- <td>R92</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-10-14</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebook514cb5142h">Acer Chromebook 514</a></td>
- <td>Spherion</td>
- <td>asurada</td>
- <td>asurada</td>
- <td>arm</td>
- <td>5.4</td>
- <td>aarch64</td>
- <td>MT8183</td>
- <td>Chromebook</td>
- <td>M93</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2021-10-29</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebook515cb5151w">Acer Chromebook 515</a></td>
- <td>Volet</td>
- <td>volteer</td>
- <td>volteer</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>TigerLake-UP3</td>
- <td>Chromebook</td>
- <td>M93</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>2021-12-31</td>
- <td>Acer</td>
- <td><a href="https://www.acer.com/ac/en/US/content/series/acerchromebook311">Acer Chromebook Spin 311</a></td>
- <td>Pico</td>
- <td>Jacuzzi</td>
- <td>Jacuzzi</td>
- <td>arm</td>
- <td>4.19</td>
- <td>arm</td>
- <td>MT8183</td>
- <td>Chromebook</td>
- <td>M96</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>2022-04-08</td>
- <td>Asus</td>
- <td><a href="https://www.asus.com/Laptops/For-Home/Chromebook/ASUS-Chromebook-Flip-CX1-CX1400/">ASUS Chromebook Flip CX1400</a></td>
- <td>Galtic360</td>
- <td>Dedede</td>
- <td>Dedede</td>
- <td>x86_64</td>
- <td>5.4</td>
- <td>x86_64</td>
- <td>Jasper Lake</td>
- <td>Convertible</td>
- <td>R97</td>
- <td><a href="https://support.google.com/chrome/a/answer/6220366">AUE Schedule</a></td>
- <td></td>
- <td>Yes</td>
- </tr>
-</table>
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-11/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-11/index.md
deleted file mode 100644
index e912388a6ec..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-11/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: lenovo-chromebook-11
-title: Lenovo Chromebook 11
----
-
-## Disassembly
-
-**Reks**
-
-Opening the case might void your warranty. It is also not recommended, since
-opening the case lifts the heat sink off the CPU and upon closing the case the
-thermal resistance might not fully recover. Especially, it is not recommended to
-run the device with the case opened.
-
-But if you must open the case: Remove 10 screws (four of them hidden under the
-rubber feet) and then pry open the case at the seam. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-card-hinge.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-card-hinge.jpg.sha1
deleted file mode 100644
index 0924da2705f..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-card-hinge.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2fc15b29058d907e43ba50623ccc639af0332231 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-hinge.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-hinge.jpg.sha1
deleted file mode 100644
index ed495964d81..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-hinge.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5f4a74ec398b29a2dbd8b040fae36b59d9ca00ef \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-2-front.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-2-front.jpg.sha1
deleted file mode 100644
index 4193d06d882..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-2-front.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9d754cef895b162a5065e4e3a5cc448feebbc8a0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-3-left.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-3-left.jpg.sha1
deleted file mode 100644
index 58ca4b9eaa8..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-3-left.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e23a6e59842f2ae82572a7abd2d82820c93bd734 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-4-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-4-right.jpg.sha1
deleted file mode 100644
index 9524f37ec0e..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-4-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dd59dfb1d7efbf22b28c0391e0d5c18a0d221581 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-5-hinge.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-5-hinge.jpg.sha1
deleted file mode 100644
index 1b360245f9a..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-5-hinge.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3c5de32c7648cbc0ea7b81b9755691af5ca9d112 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-6-side-left.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-6-side-left.jpg.sha1
deleted file mode 100644
index 132efdad6d8..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-6-side-left.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-167041b92a74289eb50e5642378e10dd647de2b7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-7-side-right.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-7-side-right.jpg.sha1
deleted file mode 100644
index 4b55a746083..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-7-side-right.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d9171409a37943454241b786e272eb6cccf2295b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/index.md
deleted file mode 100644
index bb0b692f671..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/index.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: lenovo-chromebook-n20
-title: Lenovo Chromebook N20 & N20P
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Lenovo Chromebook N20 &
-N20P](https://www.google.com/chromebook/) that is interesting and/or useful to
-software developers. For general information about getting started with
-developing on Chromium OS (the open-source version of the software on the Chrome
-Notebook), see the [Chromium OS Developer Guide](/chromium-os/developer-guide).
-
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-1-hinge.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-2-front.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-3-left.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-4-right.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-5-hinge.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-6-side-left.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20/gallery-LenovoChromebookN20p-7-side-right.jpg"
-height=150 width=200>
-
-### Specifications
-
-* Weight: 2.87 lbs
-* CPU: Baytrail Intel Celeron Dual-Core
- [N2830](http://ark.intel.com/products/81071/Intel-Celeron-Processor-N2830-1M-Cache-up-to-2_41-GHz)
-* RAM: 2GiB DDR3 (Not upgradeable)
-* Display: 11.6" 1366x768
-* Disk: 16GB SSD
-* I/O:
- * HDMI miniport
- * 1 x USB 2.0
- * 1 x USB 3.0
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11 a/b/g/n/ac
- * Bluetooth 4.0
- * USB ports can handle some Ethernet dongles
-* no [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* Linux 3.10
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-clapper-5216.199.B)
-in the `firmware-clapper-5216.199.B ` branch.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process. Really, just don't.**
-
-### Disassembly
-
-Taking apart your Chromebook is **not** encouraged. If you have hardware
-troubles, please seek assistance first from an authorized center. There's
-nothing inside that you can fix yourself. Be advised that disassembly might
-**void warranties** or other obligations, so please consult any and all
-paperwork you received first.
-
-Fine. If you **must** risk breaking it for good, at least do it the right way.
-
-* Note: Lenovo provides
- [documentation](http://download.lenovo.com/consumer/mobiles_pub/lenovo_n20p_chromebook_hmm.pdf)
- for disassembling the device. Please follow that first. These
- directions are a simple fallback.
-* First, acquire the necessary tools:
- * A small Phillips head screw driver
- * A [spudger](http://en.wikipedia.org/wiki/Spudger)
-* Close the laptop and flip it over so the bottom is facing up
- * Remove the 8 screws (two are under the rubber feet near the
- hinge)
-* Flip the laptop over and open it so the keyboard is facing up
- * Power it off if it powers on
- * Using the spudger, pry the laptop off starting from the top edge
- * It uses sticky glue in the middle area, so it might be a little
- difficult
- * Try to pull it down uniformly to minimize chances of breaking
- * Detach the keyboard & touchpad cables
-* Remove the 9 screws that were under the keyboard
- * Use the spudger to remove the upper half of the case and expose
- the motherboard \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/index.md
deleted file mode 100644
index ca00a39b881..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/index.md
+++ /dev/null
@@ -1,144 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: lenovo-thinkpad-x131e-chromebook
-title: Lenovo Thinkpad X131e Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Lenovo Thinkpad X131e
-Chromebook](http://www.google.com/intl/en/chrome/education/devices/lenovo-x131e-chromebook.html)
-that is interesting and/or useful to software developers. For general
-information about getting started with developing on Chromium OS (the
-open-source version of the software on the Chrome Notebook), see the [Chromium
-OS Developer Guide](/chromium-os/developer-guide).
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized. Our partners don't really like physical switches - they cost money,
-take up space on the motherboard, and require holes in the case.
-
-**This device has unique requirements for entering recovery mode!**
-
-You must first remove all power from the system, both the battery and the AC
-plug. Then when power is re-applied you have 20 seconds to enter recovery mode
-with the ESC+Refresh+Power button sequence.
-
-In this system the removal of power sources will force the Embedded Controller
-to restart and stay in read-only code to ensure the recovery mode is secure.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and poke
-the Power button.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Legacy Boot
-
-Sorry, but this device does not support a legacy BIOS mode.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) and [Das
-U-Boot](http://www.denx.de/wiki/U-Boot) to boot the system. You can find the
-source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-stout-2817.B)
-and the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-stout-2817.B)
-in the `firmware-stout-2817.B` branches.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-**[Stop.](http://www.youtube.com/watch?feature=fvwp&NR=1&v=Fj3WBfRZ5Nc&t=0m31s)
-[Don't.](http://www.youtube.com/watch?feature=fvwp&NR=1&v=Fj3WBfRZ5Nc&t=0m31s)
-[Come
-back.](http://www.youtube.com/watch?feature=fvwp&NR=1&v=Fj3WBfRZ5Nc&t=0m31s)**
-
-Really. Opening the case will allow you to modify the read-only firmware that
-makes recovery possible. If someone from "teh internets" says "You need to
-reflash your BIOS", they're almost certainly wrong.
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for a high res version):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-top.jpg"
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-top.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-bottom.jpg"
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-bottom.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-top.jpg"
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-top.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-bottom.jpg"
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-bottom.jpg)
-
-### Servo Header
-
-The X131e was not designed to use [servo](/chromium-os/servo). A small number of
-debug units have a hand-wired header. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-bottom.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-bottom.jpg.sha1
deleted file mode 100644
index 838e59cc0e5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-bottom.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0711992748e92b4ab48fa778aed20103ca05cf63 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-top.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-top.jpg.sha1
deleted file mode 100644
index d11d31588a0..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-bare-top.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-85e8f4d59d4d4ca258345e0d9afad47db4c12b25 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-bottom.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-bottom.jpg.sha1
deleted file mode 100644
index 2356ea961ff..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-bottom.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-aa4954b5d4d675457001431a9674abb46a86b15e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-top.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-top.jpg.sha1
deleted file mode 100644
index f07ec26ff3e..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook/stout-inside-top.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-20f30bdcb2fc2e5e4be953d1448938a9b0ff86d2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-F-101_White_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-F-101_White_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index 0f7fa0527e8..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-F-101_White_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0132e98fc768cd4f5d717de12c08825457c9d869 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-card-F-101_White_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-card-F-101_White_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index ce34fbf2db0..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-card-F-101_White_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6497d7045d7a2deb2c99eb86467c509e4e489cb4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-10-S-102_Black_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-10-S-102_Black_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index da801621fbb..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-10-S-102_Black_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-902a78597f61e9c51e10803424febbcc0b88de74 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-11-S-101_White_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-11-S-101_White_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index 61eb03547fe..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-11-S-101_White_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2f9cf169c81b633d2e365bc168b81b0a60331c9a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-12-S-101_Black_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-12-S-101_Black_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index 9f94108589e..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-12-S-101_Black_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-668b544fb13a274a37a59a16ad3e2cc92428f371 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-2-F-101_Black_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-2-F-101_Black_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index a2af76ff19a..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-2-F-101_Black_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-be1e932b98d566bb97a3257dc1db22520a419249 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-3-B-113_White_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-3-B-113_White_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index 312374583f1..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-3-B-113_White_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-11c549ed9a72c67c44da5216eecf05ac7af8074a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-4-B-113_Black_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-4-B-113_Black_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index 9aed026b417..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-4-B-113_Black_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8c73efb109d2799a5c9f29b37138e799f98d51cc \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-5-B-102F_White_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-5-B-102F_White_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index 2211dfb5d18..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-5-B-102F_White_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4a9a825b200633a488b5b672138a00e370093b98 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-6-B-102F_Black_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-6-B-102F_Black_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index dbad9df1145..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-6-B-102F_Black_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bcd0a1030ff269ce3a3391034ecc19710f711535 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-7-S-103_White_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-7-S-103_White_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index ce28ae751c1..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-7-S-103_White_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-efb55f50dd6f27bb09fcda58f5455faa9a72b21a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-8-S-103_Black_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-8-S-103_Black_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index 12497c9e638..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-8-S-103_Black_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-222ab160b863fe796c8f8bf0d74cd24619d39f1e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-9-S-102_White_Monitor_from-Sandbox.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-9-S-102_White_Monitor_from-Sandbox.jpg.sha1
deleted file mode 100644
index e3990f0d7cb..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-9-S-102_White_Monitor_from-Sandbox.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bd61da983b5a7b53d18250f0c17bf7c36f2ee973 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/index.md
deleted file mode 100644
index 9e4bfde1cac..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/index.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: lg-chromebase-22cv241-w
-title: LG Chromebase 22CV241-W
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Lenovo Chromebook N20 &
-N20P](https://www.google.com/chromebook/) that is interesting and/or useful to
-software developers. For general information about getting started with
-developing on Chromium OS (the open-source version of the software on the Chrome
-Notebook), see the [Chromium OS Developer Guide](/chromium-os/developer-guide).
-
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-1-F-101_White_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-2-F-101_Black_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-3-B-113_White_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-4-B-113_Black_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-5-B-102F_White_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-6-B-102F_Black_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-7-S-103_White_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-8-S-103_Black_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-9-S-102_White_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-10-S-102_Black_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-11-S-101_White_Monitor_from-Sandbox.jpg"
-height=150 width=200> <img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w/gallery-LG-12-S-101_Black_Monitor_from-Sandbox.jpg"
-height=150 width=200>
-
-### Specifications
-
-* Weight: 2.87 lbs
-* CPU: Haswell Intel Celeron Dual-Core
- [2955U](http://ark.intel.com/products/75608/Intel-Celeron-Processor-2955U-2M-Cache-1_40-GHz)
-* RAM: 2GiB DDR3 (1 upgradable slot)
-* Display: 21.5" 1920x1080 16:9
-* Disk: 16GB SSD
-* I/O:
- * HDMI
- * 3 x USB 2.0
- * 1 x USB 3.0
- * Headphone/mic combo jack
- * Camera & mic
-* Connectivity:
- * WiFi: 802.11 a/b/g/n/ac
- * Bluetooth 4.0
- * 100/1000 Ethernet
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* Linux 3.8
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-monroe-4921.B)
-in the `firmware-monroe-4921.B` branch.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process. Really, just don't.**
-
-### Disassembly
-
-Taking apart your Chromebook is **not** encouraged. If you have hardware
-troubles, please seek assistance first from an authorized center. There's
-nothing inside that you can fix yourself. Be advised that disassembly might
-**void warranties** or other obligations, so please consult any and all
-paperwork you received first.
-
-Fine. If you **must** risk breaking it for good, at least do it the right way.
-
-* First, acquire the necessary tools:
- * A small Phillips head screw driver
- * A large Philips head screw driver
- * A [spudger](http://en.wikipedia.org/wiki/Spudger)
-* Place the computer screen down on a flat surface
-* Pop the plastic cap with the cable holder off the back by pulling
- from the top
- * Remove the three exposed screws in the middle
- * Pull the stand off
-* Remove the one visible screw near the USB ports on the back
- * Pry the central plastic piece of carefully
- * Try flexing it and pulling from the bottom part
- * The spudger might help
-* Remove the three visible screws and detach the cables
-* Starting at the bottom, of the screen, there should be a plastic
- hole
- * Start prying apart the case from there using the spudger
- * Work all the way around the top
- * Pull the back off
-* Remove the visible screws from the metal bracket to expose the
- motherboard \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook/index.md
deleted file mode 100644
index 5f7a9bad846..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook/index.md
+++ /dev/null
@@ -1,191 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: running-virtual-machines-on-your-chromebook
-title: Running virtual machines on your Chromebook
----
-
-[TOC]
-
-## Introduction
-
-The Chromebooks with Intel processors are fast. I've replaced my Macbook Air
-with a Chromebook, and run the standard Chrome OS software on VT01, and virtual
-machines on VT02. I have booted both Windows and different versions of Linux and
-the 9front version of Plan 9.
-
-I currently use a custom build of Qemu. It's a bit hard to get Qemu built in the
-Chrome OS build system at present, so I've got a directory containing Qemu, its
-libraries and BIOS files, and scripts to chroot to that directory and run Qemu.
-Access to devices, where needed, is provided via bind-mounts. The setup sounds a
-bit kludgy but works well for me; nevertheless, we welcome improvements. What
-we'd most prefer is to get this patch series into Chrome OS, so we have qemu as
-part of a "real" build.
-
-<https://gerrit.chromium.org/gerrit/#/c/15445/>
-
-FWIW, this particular instance of qemu was built on arch Linux, lost, sadly,
-when my Air was stolen.
-
-### Background
-
-The firmware on Chrome OS devices will clear the VMX bits during boot. This
-means that support is disabled, but it is not locked such that runtime cannot
-change things. This keeps things secure during initial boot, but doesn't lock
-out people from enabling things themselves in the kernel. Otherwise, they'd have
-to resort to modifying the firmware and that's always a tricky proposition (make
-a mistake and you have a brick).
-
-When the Chrome OS kernel boots up, it will look for the `disablevmx=[on|off]`
-option on the kernel command line. If it is set to `off`, then VMX support will
-be enabled. For all other situations, we disable VMX and lock the bits so they
-cannot be turned back on. This keeps the system secure.
-
-Current Chrome OS systems all ship with KVM disabled. That means you need to
-currently build a custom kernel yourself in order to get KVM support.
-
-### Board Specific Notes
-
-Be aware that on earlier Chrome OS devices, the firmware contained bugs such
-that they locked VMX support during power on. It's known to affect:
-
-* [Series 5
- Chromebook](/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook)
-* \*[Samsung Series 5
- 550](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge)
-* \*[Samsung Series 3
- Chromebox](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge)
-
-For devices marked with a \*, you might be able to restore support by hacking
-the firmware. Please see the respective device pages for more details.
-
-## Building Chromium OS w/KVM
-
-To start, you're going to need an image that has the KVM modules. You should
-update your sources, then build an image with (at minimum) the USE=kvm option,
-viz:
-
-```none
-USE=kvm ./build_image --board=lumpy --noenable_rootfs_verification --boot_args 'disablevmx=off lsm.module_locking=0'
-```
-
-Googlers: I have USB sticks that you can use for this install. Come see me if
-you want one. Sorry, can't hand these out yet :-(
-
-Install this image in your favorite manner, either via update engine or usb
-stick. Boot the stick as usual.
-
-## Enabling VMX Support
-
-The magic kernel command line option is `disablevmx`. So you want to add
-`disablevmx=off` to the kernel command line.
-
-Log in as root.
-mount -o remount /
-/usr/share/kernel/use_kvm.sh
-
-to test:
-modprobe kvm_intel
-
-This will almost certainly get an error. There are a few more steps to make sure
-virtual machines can be used.
-/usr/share/vboot/bin/make_dev_ssd.sh --save_config /tmp/x
-
-Edit this config and add the line
-disablevmx=off lsm.module_locking=0
-
-to the command line. Then
-/usr/share/vboot/bin/make_dev_ssd.sh --set_config /tmp/x
-
-Then comes the interesting part. On the laptops, you have to hard-disconnect the
-battery. On samsung, you do this by putting a paperclip into the hole on the
-underside of the trackpad.
-
-Once that's done, you're going to need to pull down two files:
-
-<https://docs.google.com/open?id=0By47TDljmWaSWEttVGNBbVUwMEU>, which is the
-qemu and other bits.
-
-cd to /usr/local; mkdir kvm; cd there and untar this file into it. This creates
-a directory called qroot.
-
-Next, you need a virtual machine image; I've set an example up at
-<https://docs.google.com/open?id=0By47TDljmWaSX2N6VlpkS21Pd3c>. Uncompress this
-in /usr/local/kvm (NOT the qroot directory; the one above it).
-
-Now cd /usr/local/kvm/qroot, and
-
-sh Linux
-
-and it might just work. Please let rminnich@chromium.org know about bugs.
-
-## Checking VMX Support on Unofficial Hardware
-
-If you are trying to run Chromium OS on your own hardware (i.e. not a
-Chromebook/Chromebox), you should make sure your system is properly configured
-first.
-
-### CPU Support
-
-Make sure your CPU has support for the Intel VMX extensions. Simply look at
-/proc/cpuinfo to see if it has the vmx flag:
-
-<pre><code>$ grep '^flags\s*:.* vmx ' /proc/cpuinfo
-flags           : ... <b>vmx</b> <b>smx</b> ...
-</code></pre>
-
-If you don't, then sorry, but your CPU doesn't support VMX extensions.
-
-### BIOS Settings
-
-Most BIOSs today have an option to enable/disable VMX support at boot, and then
-lock any further modifications. They often times default to disabling the VMX
-extensions.
-
-You can check at runtime by using the `rdmsr` command from the iotools package:
-
-```none
-$ sudo modprobe msr
-$ sudo iotools rdmsr 0 0x3a
-0x0000000000000001
-```
-
-You only care about the lower 3 bits. An explanation of the first few bits:
-
-<table>
-<tr>
-<td> Bit</td>
-<td> Meaning</td>
-</tr>
-<tr>
-<td> 0</td>
-<td> Settings are locked</td>
-</tr>
-<tr>
-<td> 1</td>
-<td> VMX Extensions</td>
-</tr>
-<tr>
-<td> 2</td>
-<td> SMX Extensions </td>
-</tr>
-</table>
-
-Thus, if the last digit in the output is "1" (or much less unlikely, "8"), your
-BIOS has disabled VMX support and locked further modification. You will need to
-reboot into your BIOS, find the option, and enable it. Look for the word
-"virtualization".
-
-#### Using kvm-ok Helper
-
-The latest versions of QEMU/KVM include a tool called `kvm-ok` which is designed
-to perform various sanity checks on the system and see if things will work.
-Simply install it (note: it's often included in the "kvm" package in your
-distro) and run it:
-
-```none
-$ kvm-ok
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-bottom-screw.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-bottom-screw.jpg.sha1
deleted file mode 100644
index 160c2c90ac8..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-bottom-screw.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6aa1f9962190b72b80343a4c04e1610a839b384e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside-annotated.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside-annotated.jpg.sha1
deleted file mode 100644
index 1be4336bf39..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside-annotated.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-62eb410d9e2b18ded7bd0084b63d526caf428d11 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside.jpg.sha1
deleted file mode 100644
index 953ede1c6af..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-349048fd943c89e5fef9d2cffc4d93a96cccd792 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/index.md
deleted file mode 100644
index 0b0a3f48147..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/index.md
+++ /dev/null
@@ -1,316 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: samsung-arm-chromebook
-title: Samsung ARM Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [ARM Samsung Series 3
-Chromebook](http://www.google.com/intl/en/chrome/devices/samsung-chromebook.html)
-that is interesting and/or useful to software developers. For general
-information about getting started with developing on Chromium OS (the
-open-source version of the software on the Chrome Notebook), see the [Chromium
-OS Developer Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: [Samsung Exynos 5 Dual
- (5250)](http://www.samsung.com/global/business/semiconductor/product/application/detail?productId=7668)
- (Cortex A15; 1.7GHz dual core cpu)
-* GPU: [ARM
- Mali-T604](http://www.arm.com/products/multimedia/mali-graphics-hardware/mali-t604.php)
- (Quad Core)
- * 1366x768 screen & HDMI external connector
-* RAM: 2 GiB DDR3
- * The memory is not upgradable as it is soldered directly to the
- board
-* Disk: 16 GiB SSD (connected to eMMC)
- * SD & USB expansion slots
-* WiFi: 802.11 a/b/g/n
- * USB slot can handle Ethernet dongle
-* Power supply: 12V <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg"
- height=5> ([DC](http://en.wikipedia.org/wiki/Direct_current)) 3.33A
- <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg"
- height=12> ([positive polarity
- tip](http://en.wikipedia.org/wiki/Polarity_symbols))
-* No [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-* [Servo header](/chromium-os/servo): 1x42 header (now obsolete)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized. Our partners don't really like physical switches - they cost money,
-take up space on the motherboard, and require holes in the case.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and poke
-the Power button.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U. Use the USB port next to
-the HDMI connector.
-
-Note: Only CrOS formatted images will boot via USB. Other Linux distros will not
-work.
-
-### Legacy Boot
-
-Sorry, but this device does not support a legacy BIOS mode. It has an ARM cpu,
-so there is no such mode anyways.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Firmware
-
-This device uses [Das U-Boot](http://www.denx.de/wiki/U-Boot) to boot the
-system. You can find the source in the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-snow-2695.B)
-in the `firmware-snow-2695.B` branch.
-
-There is also firmware in a custom embedded controller (which handles things
-like the keyboard), but we won't cover that here as you generally should not
-need to modify that. You can find the source in the [Chromium OS ec git
-tree](https://chromium.googlesource.com/chromiumos/platform/ec/+/firmware-snow-2695.B)
-(in the snow firmware branch).
-
-### Boot Sequence
-
-* power on
-* the CPU will execute u-boot from the read-only on-board SPI flash
-* u-boot will look at the GPT layout on the 16 GiB SSD (connected via
- eMMC)
- * search for the firmware partition marked active and try to boot
- the u-boot that lives there
-* u-boot will look at the GPT layout
- * search for the Linux kernel partition marked active and try to
- boot the kernel that lives there
-* Linux kernel boots from its corresponding rootfs partition
-* profit!
-
-### Flash Layout
-
-You can show the SPI flash layout on your device by using [flashmap
-utilities](http://flashmap.googlecode.com/). It'll be the same on all devices
-though so the example below should be applicable as well
-
-```none
-$ flashrom -r bios.bin
-$ fmap_decode bios.bin
-fmap_signature="0x5f5f464d41505f5f" fmap_ver_major="1" fmap_ver_minor="0" fmap_base="0x0000000000000000" fmap_size="0x400000" fmap_name="FMAP" fmap_nareas="23"
-area_offset="0x001af000" area_size="0x00051000" area_name="RO_UNUSED"      area_flags_raw="0x01" area_flags="static"
-area_offset="0x00000000" area_size="0x00200000" area_name="WP_RO"          area_flags_raw="0x01" area_flags="static"
-area_offset="0x00000000" area_size="0x0019f000" area_name="RO_SECTION"     area_flags_raw="0x01" area_flags="static"
-area_offset="0x00000000" area_size="0x00002000" area_name="BL1 PRE_BOOT"   area_flags_raw="0x01" area_flags="static"
-area_offset="0x00002000" area_size="0x00004000" area_name="BL2 SPL"        area_flags_raw="0x01" area_flags="static"
-area_offset="0x00006000" area_size="0x0009a000" area_name="U_BOOT"         area_flags_raw="0x01" area_flags="static"
-area_offset="0x000a0000" area_size="0x00001000" area_name="FMAP"           area_flags_raw="0x01" area_flags="static"
-area_offset="0x000aff00" area_size="0x00000100" area_name="RO_FRID"        area_flags_raw="0x01" area_flags="static"
-area_offset="0x000b0000" area_size="0x000ef000" area_name="GBB"            area_flags_raw="0x01" area_flags="static"
-area_offset="0x001a0000" area_size="0x00010000" area_name="RO_VPD"         area_flags_raw="0x01" area_flags="static"
-area_offset="0x00200000" area_size="0x000f0000" area_name="RW_SECTION_A"   area_flags_raw="0x01" area_flags="static"
-area_offset="0x00200000" area_size="0x00002000" area_name="VBLOCK_A"       area_flags_raw="0x01" area_flags="static"
-area_offset="0x00202000" area_size="0x000edf00" area_name="FW_MAIN_A"      area_flags_raw="0x01" area_flags="static"
-area_offset="0x002eff00" area_size="0x00000100" area_name="RW_FWID_A"      area_flags_raw="0x01" area_flags="static"
-area_offset="0x00300000" area_size="0x000f0000" area_name="RW_SECTION_B"   area_flags_raw="0x01" area_flags="static"
-area_offset="0x00300000" area_size="0x00002000" area_name="VBLOCK_B"       area_flags_raw="0x01" area_flags="static"
-area_offset="0x00302000" area_size="0x000edf00" area_name="FW_MAIN_B"      area_flags_raw="0x01" area_flags="static"
-area_offset="0x003eff00" area_size="0x00000100" area_name="RW_FWID_B"      area_flags_raw="0x01" area_flags="static"
-area_offset="0x003f0000" area_size="0x00008000" area_name="RW_VPD"         area_flags_raw="0x01" area_flags="static"
-area_offset="0x003f8000" area_size="0x00004000" area_name="RW_SHARED"      area_flags_raw="0x01" area_flags="static"
-area_offset="0x003f8000" area_size="0x00004000" area_name="SHARED_DATA"    area_flags_raw="0x01" area_flags="static"
-area_offset="0x003fc000" area_size="0x00004000" area_name="RW_PRIVATE"     area_flags_raw="0x01" area_flags="static"
-area_offset="0x003fc000" area_size="0x00004000" area_name="RW_ENVIRONMENT" area_flags_raw="0x01" area_flags="static"
-```
-
-You're a good robot and can parse that right? :) Here's a highlight of the parts
-you'll care about.
-
-#### Read-Only section (first 2 MiB)
-
-<table>
-<tr>
-<td> <b>offset</b></td>
-<td> <b>size</b></td>
-<td> <b>content</b></td>
-<td> <b>details</b></td>
-</tr>
-<tr>
-<td> 0 KiB</td>
-<td> 8 KiB</td>
-<td> BL1</td>
-<td> Samsung first stage bootloader</td>
-</tr>
-<tr>
-<td> 8 KiB</td>
-<td> 16 KiB</td>
-<td> BL2</td>
-<td> Samsung second stage bootloader</td>
-</tr>
-<tr>
-<td> 24 KiB</td>
-<td> 616 KiB</td>
-<td> U-Boot</td>
-<td> Main (open source) bootloader</td>
-</tr>
-<tr>
-<td> 536 KiB</td>
-<td> 16 KiB</td>
-<td> U-Boot env</td>
-<td> Embedded runtime environment used by U-Boot</td>
-</tr>
-<tr>
-<td> 640 KiB</td>
-<td> 4 KiB</td>
-<td> Flashmap</td>
-<td> Specification for flash layout and such</td>
-</tr>
-<tr>
-<td> 704 KiB</td>
-<td> 956 KiB</td>
-<td> GBB</td>
-<td> Google Binary Block to hold various flags</td>
-</tr>
-<tr>
-<td> 1664 KiB</td>
-<td> 64 KiB</td>
-<td> VPD</td>
-<td> Vital/Vendor Product Data (part numbers/serial number/etc...)</td>
-</tr>
-</table>
-
-The U-Boot environment can be found embedded inside the U-Boot image itself.
-Normally the flash is read-only which means you can't change it. But if you were
-to disable the write protect, you could update the environment to do whatever
-you like.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-**Stop. Don't. Come back.**
-
-Really. Opening the case will allow you to modify the read-only firmware that
-makes recovery possible. If someone from "teh internets" says "You need to
-reflash your BIOS", they're almost certainly wrong.
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for a high res version):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside.jpg"
-height=224
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/arm-chromebook-inside.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-bottom-guts.jpg"
-height=140
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-bottom-guts.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.jpg"
-height=140
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.jpg)
-
-However, we acknowledge that some people like to tinker. So here's a quick guide
-to taking it apart:
-
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up
-* Remove the five visible screws from the bottom of the case
-* Remove the rubber feet from the bottom of the case
- * Works better if you have fingernails as you can slide them under
- the edge and then peel up
- * Consider sticking them to the case near their original holes so
- they still function as grips on tables
-* Remove the four screws that were under the rubber feet
-* Starting at the side opposite of the hinge (where the trackpad is),
- use your fingernails to pry apart the case slightly
- * This is the best starting place as it does not have clips
- holding the top & bottom together -- all other locations do
-* As you pry it apart, wiggle it a bit so the plastic clips separate
- cleanly rather than break apart
-* Work your way evenly out until the whole edge has separated
-* Work your way along the sides towards the hinge (again, evenly
- rather than one side and then the other)
-* Once only the hinge side is still together, you can pull up
- carefully and then pull the bottom away from the hinge
- * This side has two sets of clips which makes separation from this
- side initially almost impossible to do w/out breaking
-
-Then to reassemble:
-
-* Start at the hinge side and try to get all the loops merged first
- with the clips
- * You can pull on the back slighty so that the bottom falls into
- place
-* Once the back is snug, work your way along the edges and click the
- clips back into place
-* The edges should be nice and snug if everything is in the right
- place
-* Put all 9 screws back where you found them
-
-#### Firmware Write Protect
-
-It's the screw next to the USB 3.0 connector (see the pictures above for more
-details). There should also be a conductive piece of plastic attached to the
-screw hole. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-bottom-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-bottom-guts.jpg.sha1
deleted file mode 100644
index 533da6d21d8..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-bottom-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8a827e49422e8a3984209dbfe1b1e9f13ad94267 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.jpg.sha1
deleted file mode 100644
index 3d6b8513755..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4c4a12894c66dca0adb7b060acc89e0a097dd325 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.xcf.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.xcf.sha1
deleted file mode 100644
index 870a24b12f5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook/snow-top-guts.xcf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-08edc1557ec40ac0fbb0285a1a3023d41d4fb8d4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2/index.md
deleted file mode 100644
index 5ffeae164ae..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2/index.md
+++ /dev/null
@@ -1,169 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: samsung-chromebook-2
-title: Samsung Chromebook 2
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Samsung Chromebook
-2](https://www.google.com/intl/en/chrome/devices/chromebooks.html#ss2) that is
-interesting and/or useful to software developers. For general information about
-getting started with developing on Chromium OS (the open-source version of the
-software on the Chrome Notebook), see the [Chromium OS Developer
-Guide](http://www.chromium.org/chromium-os/developer-guide).
-
-## Specifications
-
-### Peach Pit (XE503C12)
-
-* CPU: [Samsung Exynos 5 Octa
- 5420](http://www.samsung.com/global/business/semiconductor/product/application/detail?productId=7977&iaId=2341)
- (1.9GHz Quad A15 / 1.3GHz Quad A7)
-* Display: 11.6" 1366x768
-
-### Peach Pi (XE503C32)
-
-* CPU: [Samsung Exynos 5 Octa
- 5800](http://www.samsung.com/global/business/semiconductor/product/application/detail?productId=7977&iaId=2341)
- (2.0GHz Quad A15 / 1.3GHz Quad A7)
-* Display: 13.3" 1920x1080
-
-### Common
-
-* RAM: 4GB DDR3 (Not upgradeable)
-* Disk: 16 GiB SSD
-* I/O:
- * HDMI Port
- * 1 x USB 2.0 (still uses XHCI)
- * 1 x USB 3.0
- * [Micro SD slot](http://en.wikipedia.org/wiki/Secure_Digital)
- (SDXC compatible, has hardware but not software for UHS support)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11ac (802.11a/b/g/n compatible)
- * Bluetooth 4.0
- * USB ports can handle some Ethernet dongles
- * [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-An unrelated note: Holding just Refresh and poking the Power button hard-resets
-the machine without entering Recovery. That's occasionally useful, but use it
-with care - it doesn't sync the disk or shut down politely, so there's a nonzero
-chance of trashing the contents of your stateful partition.
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-On this device, both the recovery button and the dev-switch have been
-virtualized. Our partners don't really like physical switches - they cost money,
-take up space on the motherboard, and require holes in the case.
-
-To invoke Recovery mode, you hold down the ESC and Refresh (F3) keys and poke
-the Power button.
-
-To enter Dev-mode you first invoke Recovery, and at the Recovery screen press
-Ctrl-D (there's no prompt - you have to know to do it). It will ask you to
-confirm, then reboot into dev-mode.
-
-Dev-mode works the same as always: It will show the scary boot screen and you
-need to press Ctrl-D or wait 30 seconds to continue booting.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-Note: Only CrOS formatted images will boot via USB. Other Linux distros will not
-work.
-
-### Legacy Boot
-
-Sorry, but this device does not support a legacy BIOS mode. It has an ARM cpu,
-so there is no such mode anyways.
-
-### Leaving
-
-To leave Dev-mode and go back to normal mode, just follow the instructions at
-the scary boot screen. It will prompt you to confirm.
-
-If you want to leave Dev-mode programmatically, you can run `crossystem
-disable_dev_request=1; reboot` from a root shell. There's no way to enter
-Dev-mode programmatically, and just seeing the Recovery screen isn't enough -
-you have to use the three-finger salute which hard-resets the machine first.
-That's to prevent a remote attacker from tricking your machine into dev-mode
-without your knowledge.
-
-## Firmware
-
-This device uses [Das U-Boot](http://www.denx.de/wiki/U-Boot) to boot the
-system. You can find the source in the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-pit-4482.B)
-in the `firmware-pit-4482.B` branch.
-
-There is also firmware in a custom embedded controller (which handles things
-like the keyboard), but we won't cover that here as you generally should not
-need to modify that. You can find the source in the [Chromium OS ec git
-tree](https://chromium.googlesource.com/chromiumos/platform/ec/+/firmware-pit-4482.B)
-(in the pit firmware branch).
-
-### Precompiled Releases
-
-If you want some precompiled versions to chain load of nv U-Boot, these should
-work:
-
-* [peach pit
- (4482.95.0)](https://storage.cloud.google.com/chromeos-image-archive/peach_pit-firmware/R30-4482.95.0/firmware_from_source.tar.bz2)
-* [peach pi
- (4482.95.0)](https://storage.cloud.google.com/chromeos-image-archive/peach_pi-firmware/R30-4482.95.0/firmware_from_source.tar.bz2)
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-**[Stop.](http://www.youtube.com/watch?feature=fvwp&NR=1&v=Fj3WBfRZ5Nc&t=0m31s)
-[Don't.](http://www.youtube.com/watch?feature=fvwp&NR=1&v=Fj3WBfRZ5Nc&t=0m31s)
-[Come
-back.](http://www.youtube.com/watch?feature=fvwp&NR=1&v=Fj3WBfRZ5Nc&t=0m31s)**
-
-Really. Opening the case will allow you to modify the read-only firmware that
-makes recovery possible. If someone from "teh internets" says "You need to
-reflash your BIOS", they're almost certainly wrong.
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for a high res version): \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/coreboot-vmx-hack/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/coreboot-vmx-hack/index.md
deleted file mode 100644
index cf47282c618..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/coreboot-vmx-hack/index.md
+++ /dev/null
@@ -1,301 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-- - /chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge
- - Samsung Series 5 550 Chromebook and Series 3 Chromebox
-page_name: coreboot-vmx-hack
-title: Hacking VMX Support Into Coreboot (lumpy & stumpy)
----
-
-[TOC]
-
-**If you are not using Samsung 5 550 (lumpy) or a Samsung 3 Chromebox (stumpy), back away slowly now. These instructions WILL NOT WORK for any other device.**
-**This document is intended for people who don't mind getting their hands dirty,
-voiding warranties, or possibly bricking their devices. If any of those thing
-scare you, just walk away.**
-
-## Background
-
-The BIOS that shipped on earlier devices (such as stumpy and lumpy) had minor
-misfeatures in them where they would disable VMX support in the read-only
-firmware stage. That means there is no way to use those virtualization
-extensions once you booted. Putting into dev mode won't help, nor will
-installing an alternative OS.
-
-This document attempts to guide you through the process of binary patching your
-BIOS. This way VMX support won't be disabled while it is loaded. Instead, the
-kernel itself will take care of enabling/disabling it. This way you can leverage
-that hardware functionality to use KVM or other such technologies. The [Virtual
-Machine](/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook)
-explains more.
-
-If you're still here, and you have a lumpy or stumpy device, and you want to
-hack your BIOS (coreboot) to keep VMX (hardware virtualization insns) support
-from being disabled at boot, then let's get into it.
-
-## Prepare The Device
-
-Make sure your device is in dev mode already and you can get a root shell. See
-the [Samsung Series 5 550 Chromebook and Series 3
-Chromebox](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge)
-page for details on how to do this.
-
-You should also see what version of firmware you're running. All the example
-output below is taken from a Chromebox. This will be invaluable if you ask for
-assistance.
-
-```none
-$ crossystem | grep fwidfwid = Google_Stumpy.2.102.0 # Active firmware IDro_fwid = Google_Stumpy.2.102.0 # Read-only firmware ID
-```
-
-Note that while most of these commands can be run on the device, some will
-require tools that are available in the Chromium OS SDK (like cbfstool and a
-compiler/assembler). So you should extract the bios on the device, and then do
-all the other commands on your development system. You can transfer the file via
-scp.
-
-## Extracting The BIOS
-
-Now that you're in dev mode, extract the BIOS from the read-only SPI flash using
-flashrom.
-
-```none
-# Run this on the device.$ cd /tmp$ PATH+=:/sbin:/usr/sbin:/usr/local/sbin$ sudo flashrom -r bios.bin# Now scp the bios.bin off the device and do follow up commands# in your ChromiumOS sdk chroot.
-```
-
-The BIOS can be read with fmap_decode.
-
-```none
-$ fmap_decode bios.binfmap_signature="0x5f5f464d41505f5f" fmap_ver_major="1" fmap_ver_minor="0" fmap_base="0x0000000000000000" fmap_size="0x800000" fmap_name="FMAP" fmap_nareas="27"area_offset="0x00000000" area_size="0x00180000" area_name="SI_ALL" area_flags_raw="0x01" area_flags="static"area_offset="0x00000000" area_size="0x00001000" area_name="SI_DESC" area_flags_raw="0x01" area_flags="static"area_offset="0x00001000" area_size="0x0017f000" area_name="SI_ME" area_flags_raw="0x01" area_flags="static"area_offset="0x00180000" area_size="0x00680000" area_name="SI_BIOS" area_flags_raw="0x01" area_flags="static"area_offset="0x00180000" area_size="0x00001000" area_name="RW_VPD" area_flags_raw="0x01" area_flags="static"area_offset="0x00181000" area_size="0x00067000" area_name="RW_UNUSED" area_flags_raw="0x01" area_flags="static"area_offset="0x001e8000" area_size="0x00018000" area_name="RW_SHARED" area_flags_raw="0x01" area_flags="static"area_offset="0x001e8000" area_size="0x00004000" area_name="RW_ENVIRONMENT" area_flags_raw="0x01" area_flags="static"area_offset="0x001ec000" area_size="0x00010000" area_name="RW_MRC_CACHE" area_flags_raw="0x01" area_flags="static"area_offset="0x001fc000" area_size="0x00004000" area_name="DEV_CFG" area_flags_raw="0x01" area_flags="static"area_offset="0x00200000" area_size="0x00100000" area_name="RW_SECTION_A" area_flags_raw="0x01" area_flags="static"area_offset="0x00200000" area_size="0x00010000" area_name="VBLOCK_A" area_flags_raw="0x01" area_flags="static"area_offset="0x00210000" area_size="0x000effc0" area_name="FW_MAIN_A" area_flags_raw="0x01" area_flags="static"area_offset="0x002fffc0" area_size="0x00000040" area_name="RW_FWID_A" area_flags_raw="0x01" area_flags="static"area_offset="0x00300000" area_size="0x00100000" area_name="RW_SECTION_B" area_flags_raw="0x01" area_flags="static"area_offset="0x00300000" area_size="0x00010000" area_name="VBLOCK_B" area_flags_raw="0x01" area_flags="static"area_offset="0x00310000" area_size="0x000effc0" area_name="FW_MAIN_B" area_flags_raw="0x01" area_flags="static"area_offset="0x003fffc0" area_size="0x00000040" area_name="RW_FWID_B" area_flags_raw="0x01" area_flags="static"area_offset="0x00400000" area_size="0x00170000" area_name="RO_UNUSED_1" area_flags_raw="0x01" area_flags="static"area_offset="0x00570000" area_size="0x00020000" area_name="RO_VPD" area_flags_raw="0x01" area_flags="static"area_offset="0x00590000" area_size="0x000e0000" area_name="RO_UNUSED_2" area_flags_raw="0x01" area_flags="static"area_offset="0x00670000" area_size="0x00190000" area_name="RO_SECTION" area_flags_raw="0x01" area_flags="static"area_offset="0x00670000" area_size="0x00000800" area_name="FMAP" area_flags_raw="0x01" area_flags="static"area_offset="0x00670800" area_size="0x00000040" area_name="RO_FRID" area_flags_raw="0x01" area_flags="static"area_offset="0x00670840" area_size="0x0000f7c0" area_name="RO_PADDING" area_flags_raw="0x01" area_flags="static"area_offset="0x00680000" area_size="0x00080000" area_name="GBB" area_flags_raw="0x01" area_flags="static"area_offset="0x00700000" area_size="0x00100000" area_name="BOOT_STUB" area_flags_raw="0x01" area_flags="static"
-```
-
-Here we see all the wonderful sub-sections of the BIOS. The one we really care
-about is the last part -- the BOOT_STUB.
-
-### Extracting Coreboot
-
-Using the details from the last line from the fmap_decode output, we can use dd
-to extract coreboot.
-
-```none
-$ eval `fmap_decode bios.bin | grep BOOT_STUB`$ dd if=bios.bin ibs=$((area_offset)) skip=1 | dd bs=$((area_size)) iflag=fullblock of=coreboot.bin
-```
-
-You can verify this actually worked by running the cbfstool (part of coreboot,
-and in the Chromium OS sdk chroot).
-
-```none
-$ cbfstool coreboot.bin printUpdating CBFS master header to version 2coreboot.bin: 1024 kB, bootblocksize 10498, romsize 1048576, offset 0x0Alignment: 64 bytes, architecture: x86Name Offset Type Sizecmos_layout.bin 0x0 cmos layout 1223pci8086,0106.rom 0x500 optionrom 65536fallback/romstage 0x10540 stage 34084fallback/coreboot_ram 0x18ac0 stage 79377fallback/payload 0x2c140 payload 106157u-boot.dtb 0x46040 unknown 8144(empty) 0x48040 null 622424mrc.bin 0xdffc0 unknown 102924(empty) 0xf9240 null 17526
-```
-
-#### Extracting Coreboot RAM Stage
-
-We want the coreboot_ram stage there. Let's extract it using cbfstool.
-
-```none
-$ cbfstool coreboot.bin extract -n fallback/coreboot_ram -f coreboot_ram.lz Updating CBFS master header to version 2coreboot.bin: 1024 kB, bootblocksize 10498, romsize 1048576, offset 0x0Alignment: 64 bytesFound file fallback/coreboot_ram at 0x18ac0, type stage, size 79377Warning: only 'raw' files are safe to extract.Successfully dumped the file.
-```
-
-#### Decompressing Coreboot RAM Stage
-
-You might have noticed we called the output file here coreboot_ram.lz instead of
-just coreboot_ram. That's because the stage is compressed by LZMA. That means we
-need to decompress it first.
-
-```none
-$ dd if=coreboot_ram.lz ibs=$((0x1c)) skip=1 | lzma -dc > coreboot_ram.bin
-```
-
-We skip 0x1c bytes there because that's the CBFS stage header information. This
-should be constant across all images.
-
-Now, finally, we have the raw x86 code that gets executed during initial boot.
-
-## Hacking Coreboot
-
-You can do a sanity check to make sure we've got the right file by using objdump
-and disassembling the code.
-
-```none
-$ objdump -D -b binary -m i386 coreboot_ram.bincoreboot_ram.bin: file format binaryDisassembly of section .data:00000000 <.data>: 0: fa cli 1: 2e 0f 01 15 37 01 10 lgdtl %cs:0x100137 8: 00 9: ea 10 00 10 00 10 00 ljmp $0x10,$0x100010 10: b8 18 00 00 00 mov $0x18,%eax 15: 8e d8 mov %eax,%ds 17: 8e c0 mov %eax,%es 19: 8e d0 mov %eax,%ss 1b: 8e e0 mov %eax,%fs 1d: 8e e8 mov %eax,%gs 1f: b0 13 mov $0x13,%al 21: e6 80 out %al,$0x80 23: fc cld ...
-```
-
-Your output might not look \*exactly\* like that (some of the number constants
-might be different). The first few instruction names should be the same though
-(a cli, then a lgdtl, then a ljmp, then a bunch of mov's). If your output
-doesn't resemble this, then you should abort and seek help.
-
-### Locate wrmsr
-
-Buried in that output somewhere is the magic insn sequence that turns off VMX on
-us. This is done by writing to the 0x3a machine specific register using the
-wrmsr instruction. Let's scan the output for it.
-
-The key sequence to look for is a mov insn that stores 0x3a in the eax register,
-followed by a call insn to a small func that does a rdmsr+wrmsr, followed by
-some more movs/calls and then a cpuid insn.
-
-```none
-$ objdump -D -b binary -m i386 coreboot_ram.bin | less... 26d4d: 57 push %edi 26d4e: 31 d2 xor %edx,%edx 26d50: b8 3a 00 00 00 mov $0x3a,%eax <-- store of 0x3a into eax 26d55: e8 ba ff ff ff call 0x26d14 <-- call to local func (see below) 26d5a: ba 0f 00 00 00 mov $0xf,%edx <-- two move insns 26d5f: b8 e2 00 00 00 mov $0xe2,%eax 26d64: e8 ab ff ff ff call 0x26d14 <-- call to same local func 26d69: b8 01 00 00 00 mov $0x1,%eax 26d6e: 89 df mov %ebx,%edi 26d70: 0f a2 cpuid <-- cpuid call 26d72: 89 fb mov %edi,%ebx 26d74: 81 e1 00 00 00 02 and $0x2000000,%ecx 26d7a: 74 0c je 0x26d88 26d7c: 31 d2 xor %edx,%edx 26d7e: b8 3c 01 00 00 mov $0x13c,%eax 26d83: e8 8c ff ff ff call 0x26d14 <-- more calls to same local func 26d88: ba 1f 00 00 00 mov $0x1f,%edx 26d8d: b8 01 06 00 00 mov $0x601,%eax 26d92: e8 7d ff ff ff call 0x26d14 <-- more calls to same local func...# here is the func that is being called (address matches)... 26d14: 55 push %ebp <-- function prologue 26d15: 89 c1 mov %eax,%ecx 26d17: 89 c5 mov %eax,%ebp 26d19: 57 push %edi 26d1a: 56 push %esi 26d1b: 89 d6 mov %edx,%esi 26d1d: 0f 32 rdmsr <-- the rdmsr call 26d1f: 83 fe 1f cmp $0x1f,%esi 26d22: 77 11 ja 0x26d35 26d24: 89 f1 mov %esi,%ecx 26d26: bf 01 00 00 00 mov $0x1,%edi 26d2b: d3 e7 shl %cl,%edi 26d2d: 85 f8 test %edi,%eax 26d2f: 75 18 jne 0x26d49 26d31: 09 f8 or %edi,%eax 26d33: eb 10 jmp 0x26d45 26d35: 8d 4e e0 lea -0x20(%esi),%ecx 26d38: bf 01 00 00 00 mov $0x1,%edi 26d3d: d3 e7 shl %cl,%edi 26d3f: 85 fa test %edi,%edx 26d41: 75 06 jne 0x26d49 26d43: 09 fa or %edi,%edx 26d45: 89 e9 mov %ebp,%ecx 26d47: 0f 30 wrmsr <-- the wrmsr call 26d49: 5e pop %esi <-- function epilog 26d4a: 5f pop %edi 26d4b: 5d pop %ebp 26d4c: c3 ret...
-```
-
-Above you can see the "bad" call to the wrmsr function happens at offset
-0x26d55.
-
-### Nopping The wrmsr
-
-We now have the right offset, so let's patch that particular insn to be a nop
-instead! :)
-
-```none
-$ dd if=/dev/zero bs=5 count=1 | tr '\0' $'\x90' | dd conv=notrunc of=coreboot_ram.bin obs=$((0x26d55)) seek=1
-```
-
-This will write five 0x90 bytes (the hex for the nop insn) to the offset of the
-call insn. Let's see our handy work by consulting objdump.
-
-```none
-$ objdump -D -b binary -m i386 coreboot_ram.bin | less... 26d4d: 57 push %edi 26d4e: 31 d2 xor %edx,%edx 26d50: b8 3a 00 00 00 mov $0x3a,%eax <-- same 0x3a store into eax 26d55: 90 nop 26d56: 90 nop 26d57: 90 nop <-- 5 nops where there was a call 26d58: 90 nop 26d59: 90 nop 26d5a: ba 0f 00 00 00 mov $0xf,%edx <-- same mov insns as before 26d5f: b8 e2 00 00 00 mov $0xe2,%eax 26d64: e8 ab ff ff ff call 0x26d14...
-```
-
-You can see that we have successfully executed our gambit!
-
-## Repacking The BIOS Image
-
-We've broken everything down and made our small change. Let's rebundle
-everything so we can deploy the fix on our device.
-
-### Repacking Coreboot
-
-We have to get creative now. It's easier if we just let the cbfstool repack the
-code since it includes compressed data and checksums in the headers and other
-fun stuff rather than trying to do it manually using dd.
-
-#### Rebuilding Coreboot RAM Stage
-
-First rebuild the input ELF using the modified binary code.
-
-```none
-$ data_size=`hexdump -v -e '"%#_ax %_u\n"' coreboot_ram.bin | awk '$NF != "nul" { a = $1 } END { print a }'`$ data_size=$(( (data_size + 0x1000) & ~(0x1000 - 1) ))$ mem_size=$(( `wc -c < coreboot_ram.bin` - data_size ))$ dd if=coreboot_ram.bin of=coreboot_ram.s.bin bs=$((data_size)) count=1$ printf '.incbin "coreboot_ram.s.bin"\n.comm b,%s+%s,1\n' ${mem_size} 0x44000 > coreboot_ram.s$ as --32 coreboot_ram.s -o coreboot_ram.o$ ld -m elf_i386 coreboot_ram.o -o coreboot_ram.elf -e 0x100000 -Ttext 0x100000
-```
-
-#### Updating Coreboot
-
-Now delete the existing stage from coreboot, and then add the new one.
-
-```none
-$ cp coreboot.bin coreboot.bin.new$ cbfstool coreboot.bin.new remove -n fallback/coreboot_ram$ cbfstool coreboot.bin.new add-stage -f coreboot_ram.elf -n fallback/coreboot_ram -c lzma
-```
-
-If you look at the cbfstool print output, you might notice that the order of the
-components has changed (the ram stage now comes later and there is an empty hole
-where the ram stage used to be). That's not a problem -- coreboot is smart
-enough to dynamically scan the CBFS structure for the ram stage.
-
-### Updating The BIOS Image
-
-This part is easiest to do with dd again.
-
-```none
-$ eval `fmap_decode bios.bin | grep BOOT_STUB`$ cp bios.bin bios.bin.new$ dd if=coreboot.bin.new of=bios.bin.new obs=$((area_offset)) seek=1 ibs=$((area_size)) count=1
-```
-
-## Flashing The New BIOS
-
-This is the only part where things can go wrong and possibly brick your device.
-Make sure your device is fully plugged in before attempting this process (like
-the lumpy -- don't run it on battery).
-
-The details of each step below can be found in the [Samsung Series 5 550
-Chromebook and Series 3
-Chromebox](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge)
-page. Consult that as you go.
-
-### Hardware Preparation
-
-1. Open the case
- 1. You'll now have to disassemble your device (which most likely
- voids your warranty).
-2. Disable write protect
- 1. You'll have to locate the Write Protect jumper and enable it.
- 2. This will make the BIOS read-write so you can update it.
- 3. Once things have been updated, you can undo this so your BIOS is
- read-only again.
-3. Reassemble the device
- 1. Now that you've done toggled the jumper, you need to reassemble
- the device and power it up.
-4. Check the write protect
- 1. Run crossystem and look at the wpsw_cur field; it should be 0.
-5. Plug your system in to be safe!
- 1. For the Chromebook laptop, make sure the battery is charged, and
- the power supply is connected.
- 2. For the Chromebox, try and plug it into a battery backup (UPS),
- and don't try this during a storm :).
-
-### Write The BIOS
-
-With the new bios.bin.new file in hand, let's use flashrom to update things.
-Obviously you'll need to scp this file back to the device and run flashrom
-there.
-
-```none
-$ sudo flashrom -w bios.bin.new
-```
-
-Then read it back out to verify things worked
-
-```none
-$ sudo flashrom -r bios.bin.check$ md5sum bios.bin.new bios.new.check
-```
-
-If the md5 hashes match, then you're ready to cross your fingers and reboot!
-
-If you saw any weird errors, then do not power off the device. Try and reprogram
-the original BIOS instead.
-
-```none
-$ sudo flashrom -w bios.bin
-```
-
-### Check VMX Support
-
-Now follow the normal [Virtual
-Machine](/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook)
-document. You should be able to use kvm and other fun things on your device now.
-
-Note that if the initial reboot worked, you actually have to power off the
-device (not just reboot) in order for the relevant software registers to fully
-reset themselves.
-
-### Enable Write Protect
-
-Now that you've made sure everything works, you should re-enable the write
-protection on your BIOS. Follow the Hardware Preparation steps above to remove
-the physical jumper.
-
-You'll also have to run some software steps once you reboot. This tells the
-flash to re-enable write protection on itself. We only want to do this for the
-2nd half of the flash though and not the entire thing.
-
-First get the current status. It should look something like:
-
-<pre><code>$ sudo flashrom --wp-statusflashrom v0.9.4 : .............WP: status: 0x0000WP: status.srp0: 0WP: status.srp1: 0WP: write protect is <b>disabled</b>.WP: write protect range: <b>start=0x00000000, len=0x00000000</b>
-</code></pre>
-
-Now get the flash size:
-
-<pre><code>$ sudo flashrom --get-sizeflashrom v0.9.4 : .............<b>8388608</b>
-</code></pre>
-
-Take that value and divide it by two and use that to re-enable write protection:
-
-<pre><code>$ sudo flashrom --wp-range $((8388608/2)) $((8388608/2))flashrom v0.9.4 : .............<b>SUCCESS</b>$ sudo flashrom --wp-enableflashrom v0.9.4 : .............<b>SUCCESS</b>
-</code></pre>
-
-Finally double check the result:
-
-<pre><code>$ sudo flashrom --wp-statusflashrom v0.9.4 : .............WP: status: 0x0098WP: status.srp0: 1WP: status.srp1: 0WP: write protect is <b>enabled</b>.WP: write protect range: <b>start=0x00400000, len=0x00400000</b>
-</code></pre> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/index.md
deleted file mode 100644
index f6dfd602bcd..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/index.md
+++ /dev/null
@@ -1,319 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: samsung-sandy-bridge
-title: Samsung Series 5 550 Chromebook and Series 3 Chromebox
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Series 5 550 Chromebook and the Series
-3 Chromebox](http://www.samsung.com/us/computer/chrome-os-devices/all-products)
-that is interesting and/or useful to software developers. For general
-information about getting started with developing on Chromium OS (the
-open-source version of the software on Chrome OS devices), see the [Chromium OS
-Developer Guide](/chromium-os/developer-guide).
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-### Introduction
-
-Enabling Developer mode is the first step to tinkering with your Chromebook.
-With Developer mode enabled you can do things like poke around on a command
-shell (as root if you want), install Chromium OS, or try other OS's. Note that
-Developer mode turns off some security features like verified boot and disabling
-the shell access. If you want to browse in a safer, more secure way, leave
-Developer mode turned OFF. Note: Switching between Developer and Normal
-(non-developer) modes will remove user accounts and their associated information
-from your Chromebook.
-
-### Entering
-
-The developer switch enables the command line shell and deactivates part of the
-verified boot process. The switch on both devices is located **inside** the
-Kensington lock hole, and can be operated with a small paperclip (be gentle). To
-enable developer mode, simply move the switch and reboot.
-
-[<img alt="lumpy dev switch"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-dev-switch.jpg"
-height=132
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-dev-switch.jpg)
-<img alt="stumpy dev switch"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-dev-switch.jpg"
-height=133 width=320>
-
-The first time you reboot after turning the developer switch on, your chromebook
-will:
-
-* ***Show a scary warning that its software cannot be trusted (press
- Ctrl-D or wait 30 seconds to dismiss).***
-* ***Erase all personal data on the "stateful partition" (i.e., user
- accounts and settings - no worries, though, since all data is in the
- cloud!).***
-* ***Make you wait between 5 and 10 minutes while it erases the data.***
-
-The erase and wait steps only happen when you first enable the developer switch,
-to help prevent someone from quickly reimaging your device while you're away
-from the keyboard. Successive boots will:
-
-* ***Show the same scary warning (press Ctrl-D or wait 30 seconds to
- dismiss).***
-* ************Boot from any self-signed image on its SSD, negating the
- security of verified boot.************
-
-### What's going on here?
-
-[Verified boot](/chromium-os/chromiumos-design-docs/verified-boot) is the
-process by which Chrome OS ensures that you are running only the software that
-shipped with your device. The process starts with the read-only BIOS, which is
-built into the device at the factory and can't be modified without disassembly
-(please don't try that; you'll void your warranty). The read-only BIOS verifies
-one of two read-write BIOSes (there are two so we can provide updates if we have
-to with less risk of failure) and continues execution there. The read-write BIOS
-then verifies one of two (same reason) kernels and executes that, and the kernel
-verifies its root filesystem as each block is read off the SSD.
-
-In Normal mode, the read-write BIOSes will only boot Google-signed kernels, and
-only from the SSD. In Developer mode, the BIOS allows any self-consistent kernel
-to boot. The BIOS displays the scary boot screen at each boot so that you will
-be aware that this is happening.
-
-### USB Boot
-
-By default, USB booting is disabled. Once you are in Dev-mode and have a root
-shell, you can run:
-
-```none
-# You only need to run this command once per system.
-chromeos-firmwareupdate --mode=todev
-sudo crossystem dev_boot_usb=1
-```
-
-and reboot once to boot from USB drives with Ctrl-U.
-
-### Legacy Boot
-
-Sorry, but this device does not support a legacy BIOS mode. It predates the
-launch of that feature and it is not feasible to produce updates of devices in
-the field.
-
-### Leaving
-
-To leave developer mode, simply flip the developer-mode switch back to the OFF
-position and reboot. One of two things will happen. If your Chromebook or
-Chromebox still has a valid read-write BIOS, Google-signed kernel, and an
-unmodified Chrome OS root filesystem, then that's what will boot and you'll be
-back running the official Chrome OS image. Or, if you've modified any part of
-the verified boot chain so that a full verified boot process isn't possible,
-you'll be dropped into [recovery mode](http://www.google.com/chromeos/recovery).
-That will require you to create a bootable USB key to restore your chromebook to
-its fresh-from-the-factory state. That's annoying, but not dangerous. As long as
-you haven't taken the device apart, you shouldn't be able to permanently break
-anything.
-
-In either case, all personal information will be wiped from the device during
-the transition.
-
-## How to boot your own image from USB
-
-* Build a Chrome OS image using the steps in the [Chromium OS
- Developer Guide](/chromium-os/developer-guide). It does not need to
- be a recovery image.
-* Turn on the developer switch and reboot to enter developer mode.
-* If this is your first time to run developer mode, remember to type
- `chromeos-firmwareupdate --mode=todev`
-* At a root shell, run `crossystem dev_boot_usb=1`, and power off.
-* Insert the removable drive containing your image into a USB slot.
-* Power on, and when you see the blue scary boot screen, press Ctrl-U.
-* It should boot your image. If for some reason it doesn't think your
- image is valid it will just beep once instead.
-
-## How to install your own Chromium OS image on your SSD
-
-If you follow the full instructions from the [Chromium OS Developer
-Guide](/chromium-os/developer-guide), you will eventually end up with a bootable
-USB drive containing your image. You can boot that image directly from the USB
-drive as described above. Since it's your personal image, it should have shell
-access enabled. Log in as user "chronos" and run
-
-```none
-/usr/sbin/chromeos-install
-```
-
-That will wipe the SSD and install your image on it instead. When you reboot, it
-should attempt to boot your version. You'll still continue to see the scary boot
-screen at every boot as long as you are in developer mode, so you'll need to
-press Ctrl-D or wait 30 seconds to boot each time.
-
-## How to use the Recovery Mode button
-
-Recovery mode is a special boot operation in which the BIOS will:
-
-* **Refuse to boot from the SSD**
-* **Prompt you to insert a recovery USB drive**
-* **Only boot a Google-signed image from the USB drive**
-
-You will encounter recovery mode when the BIOS is unable to find a valid kernel
-to boot, either because the SSD has become corrupted or (more likely) because
-you modified all the kernel partitions while in developer mode and have switched
-back to normal mode. While in developer mode, you will be presented with the
-scary boot screen at every boot. Pressing SPACE or RETURN will take you to
-recovery mode.
-
-You can also force your chromebook into recovery mode (even in normal mode) by
-using the recovery mode button. The recovery button on the Chromebook is a tiny
-pinhole on the bottom, directly underneath the power button. On the Chromebox,
-the pinhole is on the back corner, next to the outer Display Port connector.
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-case.jpg"
-height=145
-width=200>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-case.jpg)
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy.jpg"
-height=86
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy.jpg)
-
-If you stick a paperclip into this hole, you'll feel it press a button. To force
-recovery mode, turn the device off, press this button, and while keeping it
-pressed, turn the device on again. This sometimes requires three hands or a bit
-of contortion, but you'll know it worked when you see the recovery screen
-instead of booting normally.
-
-Follow the [recovery mode instructions](http://www.google.com/chromeos/recovery)
-to restore your device to its factory-fresh state.
-
----
-
-Note: The other pinhole on the bottom of the Series 5 550 Chromebook is the
-battery disconnect switch. When you poke it, it disconnects the battery so that
-the Chromebook can be shipped from the factory and left on shelves for months
-without the EC running and slowly draining power. But since the battery is off,
-opening the lid or poking the power button won't do anything. The only way to
-turn the device on again is to connect the AC power, wait a second or two for
-the EC to boot, and then press the power button. So don't poke anything into
-that hole unless you have your power cord handy.
-
-## Enabling VMX Support
-
-These two devices shipped with a BIOS that hard disables VMX during the boot
-time. It is possible to fix this though. Please see the [Hacking VMX Support
-Into
-Coreboot](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/coreboot-vmx-hack)
-guide for more information.
-
-## Firmware
-
-These devices use [coreboot](http://www.coreboot.org/) and [Das
-U-Boot](http://www.denx.de/wiki/U-Boot) to boot the system. You can find the
-source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-uboot_v2-1299.B)
-and the [Chromium OS u-boot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/firmware-uboot_v2-1299.B)
-in the `firmware-uboot_v2-1299.B` branches.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for high res versions):
-
-### Samsung Series 5 550 Chromebook (lumpy)
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals.jpg"
-height=233
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-bare.jpg"
-height=233
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-bare.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-top.jpg"
-height=121
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-top.jpg)
-
-However, we acknowledge that some people like to tinker. So here's a quick guide
-to taking it apart.
-
-* Get a phillips head screw driver and a butter knife (any similar
- wide/flat material will do as long as one edge is not sharp)
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up
-* Locate the battery disconnect and stick a paper clip in there
- * NOTE: The machine will not be able to power up again until you
- plug it in -- so you will need a power supply!
-* Remove the 4 visible screws
-* Remove the 4 rubber feet and the screws under them
- * You should start removing them starting from the edge closest to
- the edge of the computer as that is where the screw hole is
-* Now you will have to pull the top and bottom parts of the case apart
- (see below for tips)
- * Be aware that the case is held together by **many** plastic tabs
- * Every time you get stuck and think it might be glued/screwed
- together, remember it is not -- it's just **more** plastic tabs
-* Using your nails and butter knife, pull apart the case slight apart
- at one of the bottom corners (near the speakers)
-* Slip the butter knife into the small gap
-* Using the edge of the knife that is **not**, slide it along the
- front edge of the case
- * Wiggle it back and forth as you go
- * Gently pull on the case to pop each tab as you go
-* Once the front edge is open, move towards the back on each side
- until you get to the side ports (USB/SD)
-* Now you should be able to gently pull & wiggle using the case itself
-* Repeat until the whole thing comes off
-
-You'll see that some of the components are replaceable:
-
-* The hard drive is a 16GiB mSATA
-* There is one slot for 204-Pin DDR3 SO-DIMM laptop memory
-* Power supply: 19V <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/direct-current.svg"
- height=5> ([DC](http://en.wikipedia.org/wiki/Direct_current)) 2.1A
- <img alt="image"
- src="/chromium-os/developer-information-for-chrome-os-devices/center-positive-polarity.svg"
- height=12> ([positive polarity
- tip](http://en.wikipedia.org/wiki/Polarity_symbols))
-* The [servo connector](/chromium-os/servo) (may not be present on
- most units) is a now-obsolete 1x40 connector.
-
-### Samsung Series 3 Chromebox (stumpy)
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-full.jpg"
-height=200
-width=198>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-full.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-mid.jpg"
-height=200
-width=198>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-mid.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-bare.jpg"
-height=200
-width=198>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-bare.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-cards.jpg"
-height=200
-width=177>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-cards.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-bare.jpg"
-height=200
-width=200>](/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-bare.jpg) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-case.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-case.jpg.sha1
deleted file mode 100644
index 135804db9a4..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-case.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ff01b992f49648b6ef16195b8dc12c477fc5dd66 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-dev-switch.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-dev-switch.jpg.sha1
deleted file mode 100644
index 107691b4024..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-dev-switch.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b39ede1fe6d36fb4faab6ce1cdf57db8e913424c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-bare.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-bare.jpg.sha1
deleted file mode 100644
index 904b557a3aa..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-bare.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5696bea5b05ef85fcea42221228d7c6f5f210344 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-top.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-top.jpg.sha1
deleted file mode 100644
index 067422359a5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals-top.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1e7401418300ab82aa29aae00f3273e492b6c154 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals.jpg.sha1
deleted file mode 100644
index fec9a9b921c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy-internals.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2e4f765060176142c363ddcb97f54dcb4b7edf65 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy.jpg.sha1
deleted file mode 100644
index 649b843c2cc..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/lumpy.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-83aef9807c38c610c9a57603eea12487badf6dec \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-bare.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-bare.jpg.sha1
deleted file mode 100644
index be74921f7c6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-bare.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7fd557faf1482b85099bceead59ac265a45e5dd6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-cards.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-cards.jpg.sha1
deleted file mode 100644
index e6836c4260a..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-bottom-cards.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9c95caef4ecbc51b50acb40c6c92a38c063d701d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-dev-switch.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-dev-switch.jpg.sha1
deleted file mode 100644
index 6464e0d3a76..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-dev-switch.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c71698a3528c3259c8f1a5918fc39166d3bf7615 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-bare.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-bare.jpg.sha1
deleted file mode 100644
index 4f54708f1b6..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-bare.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0fae3b5f4ca20c822c74b21cba5d6c40d571b878 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-full.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-full.jpg.sha1
deleted file mode 100644
index bc17c1f7ce4..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-full.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-74db48c9f5f1521314bd954678bf2b1634f5cf93 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-mid.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-mid.jpg.sha1
deleted file mode 100644
index 74bac355800..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy-top-mid.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-efb33bffb48f6db46d65201379e56c400f62cba7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy.jpg.sha1
deleted file mode 100644
index f5623aa5555..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/stumpy.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3147b46adba383a122f303e9c1ef0c54f5933299 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/a.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/a.jpg.sha1
deleted file mode 100644
index a0ca260b24d..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/a.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-edf10bdc6057ebcb44409bb6be6057c3f65d47b5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts-no-battery.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts-no-battery.jpg.sha1
deleted file mode 100644
index 5c119742d37..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts-no-battery.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a943db3ddf6840c016ad803beb00e1c5a704f56a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts.jpg.sha1
deleted file mode 100644
index e611199d10f..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-770f3aa5f6d21346750475119312d790a0cdc085 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-top-guts.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-top-guts.jpg.sha1
deleted file mode 100644
index fac5b5fff6d..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-top-guts.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-97ac69e13bdbb352487f2405381ae5f0f2e92350 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex_reset.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex_reset.jpg.sha1
deleted file mode 100644
index 61b5ba13128..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex_reset.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7646ce4aaf5f4ae96b6b56afc70106b72b13e1b8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg.sha1
deleted file mode 100644
index 19beeeff099..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6561dbf5181e1fac852fc299b5a63619f62095ed \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/cc.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/cc.jpg.sha1
deleted file mode 100644
index 9af8d1c767e..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/cc.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-009750cdbd894d4b09d8bb84bbfe872bc8c5fe8b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/index.md
deleted file mode 100644
index 853c9d9b7f9..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/index.md
+++ /dev/null
@@ -1,299 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: samsung-series-5-chromebook
-title: Samsung Series 5 Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Samsung Series 5
-Chromebook](http://www.samsung.com/us/computer/chromebook) that is interesting
-and/or useful to software developers. For general information about getting
-started with developing on Chromium OS (the open-source version of the software
-on Chrome OS devices), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-## Entering Developer Mode
-
-You might want to enter developer mode if you're following the instructions in
-the [Chromium OS Developer Guide](/chromium-os/developer-guide), or if you just
-want to get access to a shell on your device to [poke
-around](/chromium-os/poking-around-your-chrome-os-device).
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Developer mode on the Samsung Series 5 has two levels of access, "dev-switch on"
-and "dev-mode BIOS". With the first level you enable a command line shell, which
-lets you look around inside the GNU/Linux operating system, but does not let you
-run your own versions. The second level of access installs a special BIOS
-component that provides the ability to boot your own operating systems from
-either removable (USB/SD) or fixed (SSD) drives. Both levels of access are
-completely reversible, so don't be afraid to experiment.
-
-### Developer switch
-
-The developer switch enables the command line shell. The switch is behind a
-little door on the right-hand side of the chromebook. To enable the developer
-switch you open the door, use something pointy to move the switch towards the
-back of the device, and reboot. Note: **be gentle**! Some people have reported
-that the developer switch breaks easily.
-The first time you reboot after turning the developer switch on, your chromebook
-will:
-
-* ***************Show a scary warning that its software cannot be
- trusted, since a command line shell is enabled (press Ctrl-D or wait
- 30 seconds to dismiss).***************
-* ***Erase all personal data on the "stateful partition" (i.e., user
- accounts and settings - no worries, though, since all data is in the
- cloud!).***
-* ******Make you wait between 5 and 10 minutes while it erases the data.******
-
-The erase and wait steps only happen when you first enable the developer switch,
-to help prevent someone from quickly reimaging your device while you're away
-from the keyboard. Successive boots will:
-
-* ***************Show the same scary warning (press Ctrl-D or wait 30
- seconds to dismiss).***************
-* *********Continue to boot only Google-signed images, and only from
- the SSD.*********
-
-At this point, verified boot is still active but because a command line shell is
-enabled, your system is **NOT** secure. Refer to [Poking around your Chrome OS
-Notebook](/chromium-os/poking-around-your-chrome-os-device) to see how to access
-the command line shell. The message displayed at the shell itself should tell
-you how to set your own password to protect shell access and make your system
-secure again.
-Here's a photo showing the location of the developer switch:
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg"
-height=171
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg)
-
-### Developer-mode BIOS
-
-If you want to make modifications to the Chrome OS filesystem or boot your own
-version of Chromium OS, you'll need to activate the second level of developer
-access. You do this by running a special command from the command line shell,
-available after the device boots to the 'select language' screen by pressing
-Ctrl-Alt-"→" (Ctrl-Alt-F2). You first log in with the username 'chronos' (if
-you've set a shell password, you'll be prompted for it). Then you switch to the
-'root' account, and run the command to install the developer-mode BIOS. For
-example:
-
-localhost login: **chronos**
-chronos@localhost $ **sudo bash**
-localhost chronos # **chromeos-firmwareupdate --mode=todev**
-
-### What's going on here?
-
-[Verified boot](/chromium-os/chromiumos-design-docs/verified-boot) is the
-process by which Chrome OS ensures that you are running only the software that
-shipped with your chromebook. The process starts with the read-only BIOS, which
-is built into the device at the factory and can't be modified without
-disassembly (please don't try that; you'll void your warranty). The read-only
-BIOS verifies one of two read-write BIOSes (there are two so we can provide
-updates if we have to with less risk of failure) and continues execution there.
-The read-write BIOS then verifies one of two (same reason) kernels and executes
-that, and the kernel verifies its root filesystem as each block is read off the
-SSD.
-The normal read-write BIOSes will only boot Google-signed kernels, and only from
-the SSD. When you run the chromeos-firmwareupdate command above, you are
-replacing the primary read-write BIOS with a different one that will allow any
-self-signed kernel (refer to the [Chromium OS Developer
-Guide](/chromium-os/developer-guide)) to boot from either a removable device (by
-pressing Ctrl-U at the scary boot screen) or from the SSD (press Ctrl-D or wait
-30 seconds).
-
-## How to boot your own image from USB
-
-* Follow the steps above to turn on the developer switch and to
- install the developer-mode BIOS.
-* Build a Chrome OS image using the steps in the [Chromium OS
- Developer Guide](/chromium-os/developer-guide). It does not need to
- be a recovery image.
-* Insert the removable drive containing your image into either USB
- slot.
-* Reboot, and when you see the blue scary boot screen, press Ctrl-U.
-* It should boot your image. If for some reason it doesn't think your
- image is valid it will just beep once instead.
-
-## How to install your own Chromium OS image on your SSD
-
-If you follow the full instructions from the [Chromium OS Developer
-Guide](/chromium-os/developer-guide), you will eventually end up with a bootable
-USB drive containing your image. You can boot that image directly from the USB
-drive as described above. Since it's your personal image, it should have shell
-access enabled. Log in as user "chronos" and run
-
-```none
-/usr/sbin/chromeos-install
-```
-
-That will wipe the SSD and install your image on it instead. When you reboot, it
-should attempt to boot your version. You'll still continue to see the scary boot
-screen at every boot, of course, as long as you are in developer mode and have
-the developer-mode BIOS installed, so you'll need to press Ctrl-D or wait 30
-seconds to boot.
-
-## Leaving Developer Mode
-
-To leave developer mode, simply flip the developer-mode switch back to the OFF
-position and reboot. One of two things will happen. If your chromebook still has
-a valid read-write normal-mode BIOS, Google-signed kernel, and an unmodified
-Chrome OS root filesystem, then that's what will boot and you'll be back running
-the official Chrome OS image. Or, if you've modified any part of the verified
-boot chain so that a full verified boot process isn't possible, you'll be
-dropped into [recovery mode](http://www.google.com/chromeos/recovery). That will
-require you to create a bootable USB key to restore your chromebook to its
-fresh-from-the-factory state. That's annoying, but not dangerous. As long as you
-haven't taken the device apart, you shouldn't be able to permanently break
-anything.
-In either case, all personal information will be wiped from the device during
-the transition.
-
-### One other thing to try first
-
-When the developer switch is on, the BIOS is not updated by any automatic Chrome
-OS updates. If you don't think you changed anything but you still end up in
-recovery mode, it may be that you've haven't applied a pending firmware update.
-Turn the developer switch back on, reboot, and from a root shell run
-
-```none
-chromeos-firmwareupdate --mode tonormal
-```
-
-That will restore the primary read-write BIOS to normal mode, which may restore
-the verified boot process. Turn the developer switch off again and reboot. If
-you still end up in recovery mode, you'll just have to use the recovery process
-to fix it.
-
-## How to use the Recovery Mode button
-
-Recovery mode is a special boot operation in which the BIOS will:
-
-* Refuse to boot from the SSD
-* Prompt you to insert a recovery USB drive
-* Only boot a Google-signed image from the USB drive
-
-You will encounter recovery mode when the BIOS is unable to find a valid kernel
-to boot, either because the SSD has become corrupted or (more likely) because
-you modified all the kernel partitions while in developer mode and have switched
-back to normal mode. While in developer mode, you will be presented with the
-scary boot screen at every boot. Pressing SPACE or RETURN will take you to
-recovery mode.
-
-You can also force your chromebook into recovery mode (even in normal mode) by
-using the recovery mode button. On the bottom of the Samsung Series 5, on the
-corner nearest the developer switch, there is a tiny pinhole:
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/cc.jpg"
-height=300
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/cc.jpg)
-
-If you stick a paperclip into this hole, you'll feel it press a button. To force
-recovery mode, turn the device off, press this button, and while keeping it
-pressed, turn the device on again. This sometimes requires three hands or a bit
-of contortion, but you'll know it worked when you see the recovery screen
-instead of booting normally.
-
-## How to hard-reset the EC
-
-You should never have to do this. If you think you need to and haven't been
-specifically instructed to do so by Google or Samsung, please contact one of
-those companies to tell them why.
-
-The Samsung Series 5, like most portable computers, has a small embedded
-controller ("EC") inside it that controls things like battery charging, LEDs,
-fans, and so forth even when the device is turned off. The EC runs anytime that
-power is available, even battery power. In the extremely rare and unusual case
-that the EC needs to be reset, the only certain way is to remove power. But
-since the Samsung Series 5 battery is not removable, there is a battery
-disconnect button for this purpose. Unplug the AC, flip the device over, and use
-a paperclip to gently press the battery reset button through the hole on the
-back of the chromebook. Hold it down for a few seconds, then release it.
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex_reset.jpg"
-height=300
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex_reset.jpg)
-
-This process turns the battery off. It won't turn on again until you've
-connected the AC power cord and the EC has booted. After that, things should
-work normally again. You may have to press the power button once or twice, since
-the EC may take a moment or two to fully reboot.
-
-## Firmware
-
-See the [H2C firmware
-page](/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware) for
-more details.
-
-## What's inside?
-
-**WARNING: Opening the case and fiddling with the stuff inside could easily
-brick your system and make it unrecoverable. DO NOT ATTEMPT if you are not
-familiar with this process.**
-
-### Disassembly
-
-Taking apart your laptop is **not** encouraged. If you have hardware troubles,
-please seek assistance first from an authorized center. Be advised that
-disassembly might void warranties or other obligations, so please consult any
-and all paperwork your received first. If you just want to see what the inside
-looks like, gaze upon this (click for a high res version):
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts.jpg"
-height=236
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts-no-battery.jpg"
-height=236
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-bottom-guts-no-battery.jpg)
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-top-guts.jpg"
-height=190
-width=320>](/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/alex-top-guts.jpg)
-
-However, we acknowledge that some people like to tinker. So here's a quick guide
-to taking it apart:
-
-* First, acquire the necessary tools:
- * 1 phillips head screw driver
- * A PH0 should handle most screws
- * A J0 might be better for the screws holding the battery (if
- you want to remove it)
- * 1 wide flat head screw driver, or a butter knife
-* Shut the system down and close the lid
-* Flip the laptop over so the bottom is facing up
-* Remove the three visible screws from the bottom of the case
-* Remove the rubber feet from the bottom of the case
- * Works better if you have fingernails as you can slide them under
- the edge and then peel up
- * Consider sticking them to the case near their original holes so
- they still function as grips on tables
-* Remove the four screws that were under the rubber feet
-* Starting at one of the front corners, use your fingernails to pry
- apart the case slightly
-* As you pry it apart, wiggle it a bit so the plastic clips separate
- cleanly rather than break apart
-* Work your way from one front corner to the other front corner
-* Work your way along the sides towards the hinge
-* Once only the hinge side is still together, you can pull up
- carefully and then pull the bottom away from the hinge
-
-You'll see that only one of the components are replaceable:
-
-* The hard drive is a 16GiB mSATA
-
-A now-obsolete 40-pin [servo connector](/chromium-os/servo) may be present on
-some boards. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/c720-chromebook-innards.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/c720-chromebook-innards.png.sha1
deleted file mode 100644
index e8124dbba5c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/c720-chromebook-innards.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0dd38b61722413ea3583684581198ff9511e7af5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/chromebook_leon_write_protect.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/chromebook_leon_write_protect.jpg.sha1
deleted file mode 100644
index 955806c59f3..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/chromebook_leon_write_protect.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7385f27a8cc01b3d6dcba975bb2977405d261be8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/index.md
deleted file mode 100644
index 337bf417cc7..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/index.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: toshiba-cb30-chromebook
-title: Toshiba CB30 Chromebook
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [Toshiba CB30
-Chromebook](http://www.google.com/intl/en/chrome/devices/chromebooks.html#toshiba)
-that is interesting and/or useful to software developers. For general
-information about getting started with developing on Chromium OS (the
-open-source version of the software on the Chrome Notebook), see the [Chromium
-OS Developer Guide](/chromium-os/developer-guide).
-
-### Specifications
-
-* CPU: Haswell Celeron 2995U. 1.4GHz, dual-core, 2MB Cache
-* RAM: 2GB or 4GB DDR3 (Not upgradeable)
-* Display: 13.3" 1366x768
-* Disk: 16GB SSD (Not upgradeable)
-* I/O:
- * HDMI port
- * 2 x USB 3
- * [SD slot](http://en.wikipedia.org/wiki/Secure_Digital) (SDXC
- compatible)
- * Headphone/mic combo jack
- * Camera & mic
- * Keyboard & touchpad
-* Connectivity:
- * WiFi: 802.11 a/b/g/n
- * USB ports can handle some Ethernet dongles
- * [Servo header](/chromium-os/servo): Standard 2x25 / AXK750347G
-* [Kensington Security
- Slot](http://en.wikipedia.org/wiki/Kensington_Security_Slot)
-
-## Developer Mode
-
-**Caution: Modifications you make to the system are not supported by Google, may
-cause hardware, software or security issues and may void warranty.**
-
-Details for working with developer mode can be found [on this
-page](/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
-
-## Running Chromium OS
-
-Before you start fiddling with your own builds it is strongly recommend to
-create a recovery USB stick or SD card. As long as you don't disable hardware
-write protect on the system & EC firmware, you can get your machine back into
-working order by entering Recovery Mode and plugging in your recovery image. You
-can create a recovery image from Chrome OS by browsing to
-[chrome://imageburner](javascript:void(0);) or follow instructions for other OS
-on the [Chrome OS help
-center](https://support.google.com/chromebook/answer/1080595?hl=en) site.
-
-You can build and run Chromium OS on your Toshiba CB30 (versions R32 and later).
-Follow the [quick start guide](/chromium-os/quick-start-guide) to setup a build
-environment. The board name for the Toshiba CB30 is "leon". Build an image and
-write it to a USB stick or SD card.
-
-To boot your image you will first need to enable booting developer signed images
-from USB (or SD card). Switch your machine to Developer mode and get to a shell
-by either via VT2 (Ctrl+Alt+F2) and logging in as root or by logging in as a
-user (or guest mode), starting a "crosh" shell with Ctrl+Alt+t, and typing
-"shell". Now run "sudo crossystem dev_boot_usb=1" and reboot "sudo reboot".
-
-Plug your USB stick or SD card in and on the scary "OS Verification is OFF"
-screen hit Ctrl+u to boot from external media. If all goes well you should see a
-"Chromium OS" logo screen. If you want to install your build to the SSD, open a
-shell and type "sudo /usr/sbin/chromeos-install". Note: This will replace
-EVERYTHING on your SSD. Use a recovery image if you want to get back to a stock
-Chrome OS build.
-
-Have fun!
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) to boot the system. You
-can find the source in the [Chromium OS coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-leon-4389.61.B)
-in the `firmware-leon-4389.61.B` branches.
-
-## Disclaimer
-
-**Caution: Modifications you make to your Chromebook's hardware or software are
-not supported by Google, may compromise your online security, and may void your
-warranty....now on to the fun stuff.**
-
-## What's Inside?
-
-Taking apart your Chromebook is **not** encouraged. If you have hardware
-troubles, please seek assistance first from an authorized center. Be advised
-that disassembly might void warranties or other obligations, so please consult
-any and all paperwork your received first.
-
-The location of the firmware write protection disable screw is indicated by the
-red arrow below. Remove the screw, and underneath may be a metallic sticker.
-Remove the sticker (if present) so that the two pads are separated, as in the
-picture below. Then, boot the system and run "flashrom --wp-disable" to enable
-writing to the write protected regions of flash.
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/chromebook_leon_write_protect.jpg"
-height=295
-width=400>](/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook/chromebook_leon_write_protect.jpg) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/index.md
deleted file mode 100644
index b39579d4f1c..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/index.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: tp-link-onhub-tgr1900
-title: TP-LINK OnHub TGR1900
----
-
-[TOC]
-
-## Introduction
-
-This page contains information about the [TP-LINK OnHub Router
-TGR1900](http://www.tp-link.us/products/details/cat-9_TGR1900.html), an
-[OnHub](https://on.google.com/hub/) WiFi router. that is interesting and/or
-useful to software developers. For general information about getting started
-with developing on Chromium OS (the open-source version of the software on the
-Chrome Notebook), see the [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-[<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_black.png"
-height=200
-width=116>](/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_black.png)
-<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_blue.png"
-height=200 width=116> [<img alt="image"
-src="/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_top.jpg"
-height=200
-width=199>](/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_top.jpg)
-
-### Specifications
-
-* CPU: Qualcomm Krait IPQ8064 (ARM A9) dual core 1.4 GHz
-* RAM: 1 GiB DDR3 (Not upgradeable)
-* Disk: 4 GiB eMMC (Not upgradeable)
-* USB 3.0
- * 1 USB Standard A port
-* Connectivity
- * WiFi aux 802.11 a/b/g/n/ac 1x1
- * WiFi 2.4 & 5 GHz 802.11 b/g/n 3x3 with smart antenna
- * Ethernet WAN 1 port 10/100/1000 Mbps
- * Ethernet LAN 1 port 10/100/1000 Mbps
-* Size: 7.5in x 4.1in x 4.6in
-* Weight: 1.9lb
-
-## Firmware
-
-This device uses [coreboot](http://www.coreboot.org/) and
-[Depthcharge](https://chromium.googlesource.com/chromiumos/platform/depthcharge/)
-as a payload to boot the system. You can find the source in the [Chromium OS
-coreboot git
-tree](https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-storm-6315.B)
-and the [Chromium OS depthcharge git
-tree](https://chromium.googlesource.com/chromiumos/platform/depthcharge/+/firmware-storm-6315.B)
-in the `firmware-storm-6315.B` branches. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_black.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_black.png.sha1
deleted file mode 100644
index 6055aa8f215..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_black.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8d79fb5130a138dc45b21a75e663ca1365d97704 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_blue.png.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_blue.png.sha1
deleted file mode 100644
index 0dd70975343..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_blue.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3e3a1753e5b8e1d5a57a1cf802485f655b2debed \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_top.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_top.jpg.sha1
deleted file mode 100644
index 8472534fbe2..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/tplink_top.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-baa046accaf2d1adc1f669b7b2c8491a5b3d91e3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/whirlwind-dev-screw.jpg.sha1 b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/whirlwind-dev-screw.jpg.sha1
deleted file mode 100644
index 3ccaff1ee8f..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900/whirlwind-dev-screw.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a9faa68f0f0d24e4d98ddea98780fad5c4182e5b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook/index.md
deleted file mode 100644
index dd13735aae5..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook/index.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: upstream-coreboot-on-intel-haswell-chromebook
-title: Upstream coreboot on Intel Haswell Chromebook
----
-
-### Disable write protection by following the [Chromium OS wiki](/chromium-os/developer-information-for-chrome-os-devices)
-
-1. Open device
-2. Remove write protect screw
-3. Boot device in developer mode
-4. Disable flash write protection
-
-```none
-flashrom --wp-disable
-```
-
-### Check out coreboot
-
-```none
-git clone http://review.coreboot.org/p/coreboot
-cd coreboot
-```
-
-### Extract BIOS from running system
-
-The BIOS from the running system will contain some specific data in GBB and VPD
-regions that are unique. It is recommended to extract and save this BIOS in case
-you want to restore to previous unique device information. Without a valid HWID
-the system will be unable to recover or receive updates.
-
-```none
-flashrom -r device_bios.bin
-```
-
-### Extract BIOS from Firmware Update utility on the device
-
-The BIOS extracted from a running system does not contain the Management Engine
-firmware as that region is not readable from the host. The firmware update
-utility contains a raw BIOS update image which will contain the Management
-Engine binary.
-
-Copy /usr/sbin/chromeos-firwmwareupdate from device, execute, and copy bios.bin
-to coreboot root.
-
-```none
-chromeos-firwmareupdate --sb_extract /tmp
-cp /tmp/bios.bin .
-```
-
-### Extract SPI Descriptor and Management Engine binary
-
-```none
-ifdtool -x bios.bin
-```
-
-### Extract MRC binary
-
-```none
-cbfstool bios.bin extract -n mrc.bin -f mrc.bin
-```
-
-### Extract VBIOS binary
-
-### Save as PCI Device ID 0x0a06 to make SeaBIOS happy
-
-```none
-cbfstool bios.bin extract -n pci8086,0406.rom -f pci8086,0a06.rom
-```
-
-### Configure Coreboot
-
-```none
-make menuconfig
-```
-
-### Suggested Settings
-
-```none
-> Mainboard -> Mainboard Vendor -> Google
-> Mainboard -> Mainboard Model -> Falco
-> Chipset -> Add a System Agent binary -> mrc.bin
-> VGA BIOS -> Add a VGA BIOS image -> pci8086,0a06.rom
-> VGA BIOS -> VGA device PCI IDs -> 8086,0a06
-> Console -> Serial port console output -> DISABLE
-> Payload -> Add a payload -> SeaBIOS
-> Payload -> SeaBIOS version -> master
-> ChromeOS -> Build for ChromeOS -> DISABLE
-```
-
-### Build Coreboot and SeaBIOS
-
-```none
-make
-```
-
-### Configure SeaBIOS to use ESC key instead of F12
-
-```none
-echo -ne "\x01" > boot-menu-key
-echo -e "\nPress ESC for boot menu.\n" > boot-menu-message
-cbfstool build/coreboot.rom add -f boot-menu-key -n etc/boot-menu-key -t raw
-cbfstool build/coreboot.rom add -f boot-menu-message -n etc/boot-menu-message -t raw
-```
-
-If setting a boot splash screen:
-
-```none
-cbfstool build/coreboot.rom add -f bootsplash.jpg -n bootsplash.jpg -t raw
-```
-
-### Add SPI Descriptor
-
-```none
-dd if=flashregion_0_flashdescriptor.bin of=build/coreboot.rom conv=notrunc
-```
-
-### Add Management Engine
-
-```none
-ifdtool -i me:flashregion_2_intel_me.bin build/coreboot.rom
-mv build/coreboot.rom.new build/coreboot.rom
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/workaround-for-battery-discharge-in-dev-mode/index.md b/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/workaround-for-battery-discharge-in-dev-mode/index.md
deleted file mode 100644
index de17a58fd5d..00000000000
--- a/chromium/docs/website/site/chromium-os/developer-information-for-chrome-os-devices/workaround-for-battery-discharge-in-dev-mode/index.md
+++ /dev/null
@@ -1,249 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/developer-information-for-chrome-os-devices
- - Developer Information for Chrome OS Devices
-page_name: workaround-for-battery-discharge-in-dev-mode
-title: Workaround for battery discharge in dev-mode
----
-
-[TOC]
-
-## Introduction
-
-[Issue 362105](https://crbug.com/362105) describes a painfully annoying problem
-for people who put their Chromebooks in dev-mode so they can use them more like
-a standard laptop. The tl;dr version is that if you've completely replaced or
-disabled Chrome OS and the battery runs all the way down, it forgets that it was
-configured to allow non-Chrome OS images to boot, locking you out of your own
-device. If this happens to you, here's how to get back in.
-
-Note: If your machine boots up in Chrome OS, you probably haven't lost anything:
-
-> If you're no longer in dev-mode, enter it again and reboot
-
-> Go into crosh (CTRL-ALT-T)
-
-> Type "shell" to get a shell.
-
-> run sudo crossystem dev_boot_legacy=1
-
-> reboot
-
-> press CTRL-L when you see the scary boot screen
-
-If your machine **doesn't** boot Chrome OS and only gives you the "Chrome OS is
-missing or damaged" screen with every boot, then the following may help.
-
-This process is long and annoying, but it's better than losing all your data.
-
-## Impacted Devices
-
-The issue has been resolved in newer devices, but most likely will not be
-backported to older ones. Here are all the devices impacted (the project names
-are listed; see the [Developer Information for Chrome OS
-Devices](/chromium-os/developer-information-for-chrome-os-devices) page for
-product names):
-
-* mario & alex & zgb
-* stumpy & lumpy
-* snow
-* parrot
-* stout
-* butterfly
-* link
-* spring & skate
-* peppy & pepto
-* falco & wolf & leon
-* panther & monroe
-* squawks & quawks & clapper & swanky & kip
-* zako
-* big & blaze
-* veyron
-
-## How to recover
-
-These instructions assume you have another Linux machine to do this on, because
-1) I know that works, and 2) I don't have any Mac or Windows machines.
-
-Here's what we're going to do:
-
-### Stay in developer mode
-
-If your Linux data is in a separate disk partition that you've created or taken
-over, you still may be okay. But best not to risk it. Certainly **don't** go
-through the recovery process, because that will wipe the disk.
-
-### Download a recovery image
-
-If you go to
-[www.google.com/chromeos/recovery](http://www.google.com/chromeos/recovery),
-you'll find instructions for running a Linux script that will download and
-format a USB stick for you. Follow them, but **don't** remove the USB stick
-afterwards, and **really** don't insert it in your Chromebook. \[Update: okay,
-you used to find instructions there, but they're gone. Look
-[here](https://support.google.com/chromebook/answer/6002417) instead. I've filed
-a bug.\]
-
-Note: My USB stick shows up as `/dev/sdc`. If yours is something else, use that
-instead in the examples below.
-
-### Modify the recovery image so we can mount it
-
-The root filesystem on the recovery image is marked with some unsupported ext2
-flags, so that if you try to mount it you'll see a message like this:
-
-<pre><code>$ <b>sudo mount /dev/sdc3 /mnt</b>
-mount: wrong fs type, bad option, bad superblock on /dev/loop0,
-missing codepage or helper program, or other error
-In some cases useful info is found in syslog - try
-dmesg | tail or so
-Exit code 32
-$
-</code></pre>
-
-We need to clear those flag bits so we can make changes to the filesystem. To do
-this, we need to know the offset (in bytes) of the beginning of the rootfs
-partition. You can use the GNU parted tool to find this out:
-
-<pre><code>
-$ <b>sudo parted /dev/sdc</b>
-GNU Parted 2.3
-Using /dev/sdc
-Welcome to GNU Parted! Type 'help' to view a list of commands.
-(parted) <b>unit B</b>                                                           
-(parted) <b>print</b>                                                            
-Error: The backup GPT table is not at the end of the disk, as it should be.
-This might mean that another operating system believes the disk is smaller.
-Fix, by moving the backup to the end (and removing the old backup)?
-Fix/Ignore/Cancel? <b>I</b>                                                      
-Warning: Not all of the space available to /dev/sdc appears to be used, you can
-fix the GPT to use all of the space (an extra 3115136 blocks) or continue with
-the current setting? 
-Fix/Ignore? <b>I</b>                                                             
-Model: Kingston DT 100 G2 (scsi)
-Disk /dev/sdc: 3926949888B
-Sector size (logical/physical): 512B/512B
-Partition Table: gpt
-Number  Start        End          Size         File system  Name        Flags
-11      32768B       8421375B     8388608B                  RWFW
- 6      8421376B     8421887B     512B                      KERN-C
- 7      8421888B     8422399B     512B                      ROOT-C
- 9      8422400B     8422911B     512B                      reserved
-10      8422912B     8423423B     512B                      reserved
- 2      10485760B    27262975B    16777216B                 KERN-A
- 4      27262976B    44040191B    16777216B                 KERN-B
- 8      44040192B    882900991B   838860800B   ext4         OEM
-12      950009856B   966787071B   16777216B    fat16        EFI-SYSTEM  boot
- 5      966787072B   968884223B   2097152B                  ROOT-B
- 3      968884224B   2269118463B  1300234240B  ext2         ROOT-A
- 1      2269118464B  2315255807B  46137344B    ext2         STATE
-(parted) <b>quit</b>                                                             
-$
-</code></pre>
-
-Note that we do **not** want to repair any of the GPT headers. Just answer "I"
-(ignore) when asked about them.
-
-The rootfs partition is partition 3, which begins 968884224 bytes into the disk.
-That's the magic number we need to remember. (We could just refer to /dev/sdc3
-with an offset of 0, but this process works on binary images too.)
-
-This script will modify the ext2 flags bits in the rootfs filesystem header so
-we can mount it. Copy it into a file and mark it as executable.
-
-```none
-#!/bin/bash
-is_ext2() {
-  local rootfs="$1"
-  local offset="${2-0}"
-  # Make sure we're checking an ext2 image
-  local sb_magic_offset=$((0x438))
-  local sb_value=$(sudo dd if="$rootfs" skip=$((offset + sb_magic_offset)) \
-                   count=2 bs=1 2>/dev/null)
-  local expected_sb_value=$(printf '\123\357')
-  if [ "$sb_value" = "$expected_sb_value" ]; then
-    return 0
-  fi
-  return 1
-}
-enable_rw_mount() {
-  local rootfs="$1"
-  local offset="${2-0}"
-  # Make sure we're checking an ext2 image
-  if ! is_ext2 "$rootfs" $offset; then
-    echo "enable_rw_mount called on non-ext2 filesystem: $rootfs $offset" 1>&2
-    return 1
-  fi
-  local ro_compat_offset=$((0x464 + 3))  # Set 'highest' byte
-  # Dash can't do echo -ne, but it can do printf "\NNN"
-  # We could use /dev/zero here, but this matches what would be
-  # needed for disable_rw_mount (printf '\377').
-  printf '\000' |
-    sudo dd of="$rootfs" seek=$((offset + ro_compat_offset)) \
-            conv=notrunc count=1 bs=1 2>/dev/null
-}
-[ -n "$2" ] || exit 1
-enable_rw_mount $1 $2
-```
-
-Provide the USB device and the byte offset as arguments to the script, and now
-we can mount the rootfs from the recovery image:
-
-<pre><code>
-$ <b>sudo ./enable_rw_mount.sh /dev/sdc 968884224</b>
-$ <b>sudo mount /dev/sdc3 /mnt</b>
-$ <b>ls /mnt</b>
-bin/     dev/  home/  lib64/       media/  opt/       proc/  sbin/  tmp/  var/
-debugd/  etc/  lib/   lost+found/  mnt/    postinst@  root/  sys/   usr/ 
-</code></pre>
-
-### Change the chromeos-install script to just fix the flags
-
-The recovery image would normally run the `/usr/sbin/chromeos-install` script,
-which would wipe the SSD and restore everything. We don't want that, so we'll
-just modify that script to restore the dev-mode flags to allow our custom image
-to boot again.
-
-Create the script we want:
-
-<pre><code>
-$ <b>cat &gt; /tmp/foo.txt</b>
-#!/bin/bash
-crossystem dev_boot_legacy=1 dev_boot_usb=1 
-sleep 5
-exit
-<b>^D</b>
-$
-</code></pre>
-
-Replace the original script:
-
-<pre><code>
-$ <b>sudo cp /tmp/foo.txt /mnt/usr/sbin/chromeos-install</b> 
-$ <b>ls -l</b> <b>/mnt/usr/sbin/chromeos-install</b>
--rwxr-xr-x 1 root root 76 Jun 16 16:44 /mnt/usr/sbin/chromeos-install*
-$ <b>cat</b> <b>/mnt/usr/sbin/chromeos-install</b>
-#!/bin/bash
-crossystem dev_boot_legacy=1 dev_boot_usb=1
-sleep 5
-exit
-$
-</code></pre>
-
-Note that it's executable, and has the content we want. Unmount the USB stick.
-
-<pre><code>
-$ <b>sudo umount /mnt</b>
-</code></pre>
-
-### Recover the dev-mode flags
-
-Now you can insert this recovery image into your Chromebook. When it goes
-through the normal "Verifying the integrity of your recovery media" process, it
-may complain that the rootfs is not verified, but it will continue on anyway
-because we're in developer mode. It will then proceed to the "System recovery"
-step, but don't panic - it's going to run your modified script instead. That
-should only take a few seconds. Once it completes, remove the USB stick and when
-it reboots, your Ctrl-L and Ctrl-U shortcuts should work again. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/developing-apps-on-your-chromium-os-device/index.md b/chromium/docs/website/site/chromium-os/developing-apps-on-your-chromium-os-device/index.md
deleted file mode 100644
index 31edbb91cb4..00000000000
--- a/chromium/docs/website/site/chromium-os/developing-apps-on-your-chromium-os-device/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: developing-apps-on-your-chromium-os-device
-title: Developing apps on your Chromebook
----
-
-Here’s a running list of apps from the Chrome Web Store that can help you
-develop on your Chromebook or Chromium OS device:
-
-Chrome Dev Editor (Developer Preview) - Editor for building Web Apps and Chrome
-Apps, in JavaScript or Dart. CDE also supports Git and Polymer development.
-
-<https://chrome.google.com/webstore/detail/chrome-dev-editor-develop/pnoffddplpippgcfjdhbmhkofpnaalpg>
-
-Secure Shell - Terminal emulator and SSH client
-
-<https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo>
-
-Chrome Remote Desktop - Access other computers or allow another user to access
-your computer securely over the Internet
-
-<https://chrome.google.com/webstore/detail/chrome-remote-desktop/gbchcmhmhahfdphkhkmpfmihenigjmpp>
-
-Text - A basic text editor for Chrome OS and Chrome
-
-<https://chrome.google.com/webstore/detail/text/mmfbcljfglbokpmkimbfghdkjmjhdgbg>
-
-Beagle Term - Terminal emulator with serial port through USB dongles
-
-<https://chrome.google.com/webstore/detail/beagle-term/gkdofhllgfohlddimiiildbgoggdpoea>
-
-Cloud9 - an online platform for development that makes developing applications
-more convenient than ever
-
-<https://chrome.google.com/webstore/detail/cloud9/nbdmccoknlfggadpfkmcpnamfnbkmkcp>
-
-Runnable - Cloud-based IDE
-
-<http://runnable.com/>
-
-To test your Android apps on Chrome OS, learn how to [sideload Android apps on
-your Chromebook](/chromium-os/sideload-android-apps-on-chromebook) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/dingdong/810-10117-03_20151211_dingdong_SCH_0.pdf.sha1 b/chromium/docs/website/site/chromium-os/dingdong/810-10117-03_20151211_dingdong_SCH_0.pdf.sha1
deleted file mode 100644
index 9c8a6119864..00000000000
--- a/chromium/docs/website/site/chromium-os/dingdong/810-10117-03_20151211_dingdong_SCH_0.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2360668523024d80d84abab63a405a15beadba86 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/dingdong/DingDong Block Diagram.png.sha1 b/chromium/docs/website/site/chromium-os/dingdong/DingDong Block Diagram.png.sha1
deleted file mode 100644
index 811acd4a4bc..00000000000
--- a/chromium/docs/website/site/chromium-os/dingdong/DingDong Block Diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-481c71266b35185056b2f06f9293469720d8a5cd \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/dingdong/chromium-os-dingdong.tar.bz2.sha1 b/chromium/docs/website/site/chromium-os/dingdong/chromium-os-dingdong.tar.bz2.sha1
deleted file mode 100644
index d5a5da49374..00000000000
--- a/chromium/docs/website/site/chromium-os/dingdong/chromium-os-dingdong.tar.bz2.sha1
+++ /dev/null
@@ -1 +0,0 @@
-39b6be0620b81188d134db1d926269180f6545ff \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/dingdong/index.md b/chromium/docs/website/site/chromium-os/dingdong/index.md
deleted file mode 100644
index 5202dcaaef1..00000000000
--- a/chromium/docs/website/site/chromium-os/dingdong/index.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: dingdong
-title: USB Type-C to DP Adapter
----
-
-[TOC]
-
-## Overview
-
-The USB Type-C to DP Adapter connects a USB Type-C plug to a DP receptacle. It
-enables users of any Chrome device that implements USB-Type C to connect to a
-DisplayPort display.
-
-## Hardware Capabilities
-
-This adapter is an implementation of a USB Type-C to DisplayPort Cable. It
-follows the requirements described in Section 3.2 "Scenarios 2a and 2b USB
-Type-C to DisplayPort Cables" of the VESA DisplayPort Alt Mode for USB Type-C
-Standard. The design is similar to the description in Appendix A.2 of the
-Standard and shown in Figure A-2: DisplayPort Video Adaptor Cable Block Diagram.
-
-It provides the following features:
-
-* DisplayPort protocol support
-* automatic enabling of video out
-* video output with resolutions of up to 4K @ 60 Hz (depending on
- system and monitor capabilities)
-
-![image](/chromium-os/dingdong/DingDong%20Block%20Diagram.png)
-
-For schematics, [click
-here](https://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRldnxneDo3MWY0NGE4NGM4MjBiYTIy)
-or see the attached file.
-
-## Firmware Source Code
-
-The firmware is located In the Chromium Embedded Controller repository under
-*[board/dingdong/](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/hoho/)*
-:
-
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/dingdong/>
-
-### Building Firmware
-
-Within your Chromium OS chroot, the syntax is:
-
-```none
-cd ~/trunk/src/platform/ec
-make BOARD=dingdong
-```
-
-### Flashing Firmware
-
-The firmware is normally flashed via the kernel, as part of the Chrome OS
-Auto-Update process. Payloads are located in `/lib/firmware/cros-pd`.
-
-When the adapter is connected to a Chrome device, you can manually flash the
-read-write firmware as follows:
-
-```none
-ectool --cros_pd flashpd 3 <port> /tmp/dingdong.ec.RW.bin
-```
-
-The device must be in developer mode to run the `ectool` command. After running
-this command, the firmware is located in
-`~/trunk/src/platform/ec/build/dingdong/ec.bin .`
-
-## Connecting to the Adapter
-
-Developers of devices based on this design may need to install an initial image
-by putting the STM32F072 into DFU mode. This can be done by asserting PD_BOOOT0
-(TP8 in the schematic) and resetting the MCU. It can be helpful to attach a
-switch for this purpose on prototype devices.
-
-Installing an image requires the dfu-util tools package on the Chrome device
-where the adapter is connected. To deploy dfu-util and copy the chromeos-ec
-image from within your Chromium OS chroot, the syntax is:
-
-<pre><code>BOARD=<i>board-name</i>
-</code></pre>
-
-<pre><code>IP=<i>host-IP-address</i>
-</code></pre>
-
-<pre><code>emerge-${BOARD} dfu-util chromeos-ec
-</code></pre>
-
-<pre><code>cros deploy $IP dfu-util chromeos-ec
-</code></pre>
-
-<pre><code>scp ~/trunk/src/platform/ec/build/dingdong/ec.bin root@${IP}:/tmp/.
-</code></pre>
-
-where *board-name* is the name of the Chrome device, for example peppy, and
-*host-IP-address* is its IP address on the network.
-
-The next step is to connect the adapter to the Chrome device in DFU mode and
-write a full image (RO + RW). On the Chrome device, the syntax is:
-
-```none
-flash_ec --board=dingdong --image=/tmp/ec.bin
-```
-
-## Revision History
-
-810-10117-02: Initial release.
-810-10117-03: Power sequencing and timing improvements.
diff --git a/chromium/docs/website/site/chromium-os/donnettes/index.md b/chromium/docs/website/site/chromium-os/donnettes/index.md
deleted file mode 100644
index 8279da217d4..00000000000
--- a/chromium/docs/website/site/chromium-os/donnettes/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: donnettes
-title: 22.5W Dual Port Smart Receptacle USB-C Charger
----
-
-## Overview
-
-The Universal 22.5 W Dual Port USB Type-C charging adapter is a "shared
-capacity" USB-C power source. A shared pool of 22.5W (4.5A at 5V) is divided
-between two USB-C receptacles. USB Type-C Current transitions are used to
-dynamically adjust the Source's power advertisement to both ports based on the
-sinks' load. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/donnettes/smart receptacle-05042017.pdf.sha1 b/chromium/docs/website/site/chromium-os/donnettes/smart receptacle-05042017.pdf.sha1
deleted file mode 100644
index c18ed5b3986..00000000000
--- a/chromium/docs/website/site/chromium-os/donnettes/smart receptacle-05042017.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-97a1cef1efac744302b084ace018db40bc2ac69d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/ap-ec-communication/index.md b/chromium/docs/website/site/chromium-os/ec-development/ap-ec-communication/index.md
deleted file mode 100644
index be88da4370e..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/ap-ec-communication/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/ec-development
- - Chromium Embedded Controller (EC) Development
-page_name: ap-ec-communication
-title: AP / EC communication
----
-
-## Replaced by <https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/docs/ap-ec-comm.md>; go there for improved, up-to-date information. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/charge-manager/index.md b/chromium/docs/website/site/chromium-os/ec-development/charge-manager/index.md
deleted file mode 100644
index d5462401e09..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/charge-manager/index.md
+++ /dev/null
@@ -1,169 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/ec-development
- - Chromium Embedded Controller (EC) Development
-page_name: charge-manager
-title: Chrome OS EC Charge Manager
----
-
-cros-ec boards with USB-C / USB-PD support have several independent
-charge-related tasks, controlling several charge ports. These tasks use
-different protocols (PD, BC1.2, type-C) to determine the voltage and input
-current limit of an attached charger. Charge manager is kept up to date with
-these current limits, and using its selection logic, chooses the active charge
-port (there can be only one) and its current limit.
-
-charge_manager_update() is the basic function tasks call to inform charge
-manager of a power supply change.
-
-Port / limit selection is handled by a deferred task charge_manager_refresh().
-This task is queued every time a change occurs that may change port or current
-limit selection.
-
-Port Selection Logic
-
-1. Prefer override port over all others.
-2. Prefer higher priority supplier (ex. PD over USB-C over BC1.2) over
- lower-priority.
-3. Prefer a charger capable of supplying more power if supplier
- priority is tied between ports.
-4. Prefer the current charge port (don’t switch) in case the above are
- all tied.
-
-Extra Selection Notes
-
-* Don’t charge from a dual-role partner, unless it’s the override
- port.
-* Don’t select a charge port / charge limit until all suppliers
- (tasks) / ports have reported some charge value (ex. zero, if
- nothing is plugged).
-
-Charge Override
-
-Override is set at the port level -- charge manager will ignore its normal port
-selection logic and choose the override port as its active charge port. Also,
-override supports a “don’t charge” parameter, where no port will be selected.
-
-Override is automatically removed when a dedicated charger is plugged, or when
-the charger is removed from the override port.
-
-Delayed Override
-
-If a dual-role device is chosen as the charge supplier via override, it may be
-required to perform a power swap so that the port can switch from a source to a
-sink role. The power swap takes time, and is not guaranteed to complete -- this
-is known as a delayed override. Once the swap takes effect and the dual-role
-device begins supplying power, the requested port will become the override port.
-If the device never begins supplying power, the requested port will not become
-the override port.
-
-If the device doesn’t supply power within a timeout period (based upon
-worst-case PD protocol timings), we abandon our delayed override.
-
-Charge Ceiling
-
-Charge manager selects the active port based upon the reported charge limit of
-the attached supply. Sometimes, we may want to limit the amount of current that
-we draw from a supply (ex. if we’re in the processes of negotiating to a higher
-current limit) without influencing charge manager’s port selection.
-charge_manager_set_ceil is used to set an artificial limit in this case. The
-“charge ceiling” will be applied when assigning a current limit, but the charge
-supplier limit will be used for port selection.
-
-New Power Request
-
-pd_set_new_power_request() is called with a port parameter when a port was
-previously active and becomes non-active, or when a port was previously
-non-active and becomes active. The PD task may take actions based upon port
-selection, for example, switching to a higher-power PDO.
-
-Rejected Port
-
-The callback function board_set_active_charge_port() returns a value that
-indicates whether the port change was accepted or not. A port may be rejected in
-certain cases, in which case the “next best” port will be selected as active by
-charge manager.
-
-Safe Mode
-
-To accommodate boot with low, missing or software-disconnected batteries, it's
-often necessary to relax port selection and ILIM restrictions to prevent device
-brown-out. On power-up, charge manager starts in safe mode, with the following
-behavior changes:
-
-1. All chargers are considered dedicated (and thus are valid charge
- source candidates) for the purpose of port selection.
-2. Charge ceilings are ignored. Most significantly, ILIM won't drop on
- PD voltage transition.
-3. CHARGE_PORT_NONE will not be selected. Power-on default charge port
- will remain selected rather than CHARGE_PORT_NONE.
-
-After leaving safe mode, charge_manager reverts to its normal behavior and
-immediately selects charge port and current using standard rules.
-
-Interfaces
-
-Source:
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/common/charge_manager.c>
-
-Unit tests:
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/test/charge_manager.c>
-
-Basic functionality:
-
-charge_manager_update_charge() - Tell charge manager about a new charge source.
-
-charge_manager_update_dualrole() - Tell charge manager about a change to the
-dualrole capability of the port partner.
-
-charge_manager_set_ceil() - Tell charge manager to set an artificial charge
-limit on a port, despite its capabilities.
-
-charge_manager_force_ceil() - A specialized version of charge_manager_set_ceil()
-that causes the charge limit to go into effect immediately. It’s used only in
-rare cases when we don’t have time to wait for the normal
-charge_manager_refresh() to pick up the update.
-
-charge_manager_set_override() - Tell charge manager to override its normal port
-selection logic and charge from a given port, or don’t charge from any ports.
-
-charge_manager_leave_safe_mode() - Leave safe mode (typically called when
-battery is confirmed to supply sufficient power) and use standard port / ILIM
-selection rules.
-
-State checking:
-
-charge_manager_get_override() - Returns current override status, see
-charge_manager_set_override().
-
-charge_manager_get_active_charge_port() - Returns current active charge port.
-
-charge_manager_get_power_limit_uw() - Returns the power limit selected by charge
-manager
-
-charge_manager_get_charger_current() - Returns the ILIM selected by charge
-manager
-
-Logging:
-
-charge_manager_save_log() - Writes a lot entry containing charge_manager state
-data.
-
-Source port control:
-
-charge_manager_source_port() - Inform charge_manager that a port has become a PD
-source, or is no longer a PD source, for controlling source current limit.
-
-charge_manager_get_source_pdo() - Returns PDO index of the source cap to send,
-given saved information about how many ports are currently sources.
-
-Callbacks:
-
-board_set_active_charge_port() - Called when active charge port changes.
-
-board_set_charge_limit() - Called when active charge limit changes.
-
-pd_set_new_power_request() - Called when a port becomes active or becomes
-non-active. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/ec-3po/index.md b/chromium/docs/website/site/chromium-os/ec-development/ec-3po/index.md
deleted file mode 100644
index 9ad8d47ec1b..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/ec-3po/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/ec-development
- - Chromium Embedded Controller (EC) Development
-page_name: ec-3po
-title: EC-3PO
----
-
-This page has been [moved to the new CrOS EC markdown
-docs](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/docs/ec-3po.md);
-please visit it there. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/cr50.png.sha1 b/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/cr50.png.sha1
deleted file mode 100644
index 8aad37ca1be..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/cr50.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-34373afd687b224c1169ce692dac062940dc39f6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/index.md b/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/index.md
deleted file mode 100644
index a7b9236ab1f..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/index.md
+++ /dev/null
@@ -1,395 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/ec-development
- - Chromium Embedded Controller (EC) Development
-page_name: ec-image-geometry-spec
-title: EC Image Geometry Spec
----
-
-**Introduction**
-
-The EC codebase currently supports the following chips:
-
-lm4, stm32: Internal memory-mapped flash storage
-
-cr50: Internal memory-mapped flash storage, with image signature preceding RO
-image
-
-npcx: External memory-mapped flash storage dedicated for EC, code copied to SRAM
-before execution
-
-mec1322: External unmapped flash storage dedicated for EC, code is copied to
-SRAM before execution
-
-For memory-mapped flash storage, contents are read from a chip-defined region in
-memory. Contents are written through SPI commands. For unmapped flash storage,
-contents are read and written through SPI commands.
-
-There is currently no support in the codebase for shared external storage, but
-we’d like to support it in the near future.
-
-With three different storage categories supported, there is a lack of uniformity
-within our code base. Certain geometry CONFIGs (ex. CONFIG_FLASH_BASE, which
-originated when we had only internal memory-mapped flash) no longer have
-meanings consistent with names. In other cases (ex. CONFIG_CDRAM_BASE) the
-meaning of CONFIGs are too narrow and can be more broadly defined among all
-three categories. In addition, a few CONFIGs (ex. CONFIG_RO_MEM_OFF) no longer
-have any consistent meaning at all. This discontinuity makes it extremely
-difficult to change higher-level code without breaking one or more chip
-categories, or writing separate code to accommodate corner-cases for each
-category.
-
-The goal of the spec described here is to make our CONFIGs uniform and
-understandable among all chip categories.
-
-* CONFIGs will be defined and clearly described here for programmer
- reference.
-* Modifying higher-level code that touches image geometry will become
- much less painful since all CONFIGs will have clear and consistent
- meaning.
-* Bringing up new chips will be simplified since our clear and
- consistent CONFIGs can be followed.
-
-# Supported Configurations
-
-With the changes proposed here, we aim to support ECs with the following
-configurations:
-
-* Internal mapped storage
-* External mapped storage (shared or dedicated)
-* External unmapped storage (shared or dedicated)
-* Code executed directly from mapped storage
-* Code copied to SRAM before use
-
-* One RO image
-* One contiguous region of storage belonging to the EC, containing the
- RO image, that can be write protected
-* Up to one RW image
-* Up to one contiguous region of storage belonging to the EC,
- containing the RW image, that will not be write protected
-* Support for any number of chip-specific non-image data pieces
- (*NIDs*) as part of the storage regions (loaders, headers, etc - any
- piece of data on EC storage that isn’t part of the RO or RW image)
-* Write protected and writable EC storage regions need not be mutually
- contiguous
-
-# Chip Definition CONFIGs
-
-[<img alt="image"
-src="/chromium-os/ec-development/ec-image-geometry-spec/storage2.png">](/chromium-os/ec-development/ec-image-geometry-spec/storage2.png)
-
-The following CONFIGs are defined entirely based upon chip architecture with no
-flexibility to change them based upon image / loader arrangement.
-
-CONFIG_INTERNAL_STORAGE - Indicates that chip uses internal storage
-
-CONFIG_EXTERNAL_STORAGE - Indicates that chip uses external storage
-
-CONFIG_MAPPED_STORAGE - Indicates that storage is mapped into the EC's address
-space
-
-CONFIG_CDRAM_ARCH and CONFIG_FLASH_MAPPED previously encompassed these defines.
-
-CONFIG_PROGRAM_MEMORY_BASE - Base address of program memory
-
-CONFIG_MAPPED_STORAGE_BASE - Base address of memory-mapped flash storage (if
-present)
-
-CONFIG_FLASH_BASE and CONFIG_CDRAM_BASE previously encompassed these defines.
-
-Examples:
-
-lm4 will define CONFIG_INTERNAL_STORAGE and CONFIG_MAPPED_STORAGE, and set
-CONFIG_PROGRAM_MEMORY_BASE = CONFIG_MAPPED_STORAGE_BASE = 0.
-
-```none
-/* Internal, mapped storage */#define CONFIG_INTERNAL_STORAGE#define CONFIG_MAPPED_STORAGE/* Program is directly run from storage */#define CONFIG_PROGRAM_MEMORY_BASE 0#define CONFIG_MAPPED_STORAGE_BASE 0
-```
-
-cr50 will define CONFIG_INTERNAL_STORAGE and CONFIG_MAPPED_STORAGE, and set
-CONFIG_PROGRAM_MEMORY_BASE = CONFIG_MAPPED_STORAGE_BASE = 0x40000.
-
-```none
-/* Internal, mapped storage */#define CONFIG_INTERNAL_STORAGE#define CONFIG_MAPPED_STORAGE/* Program is directly run from storage */#define CONFIG_PROGRAM_MEMORY_BASE 0x40000#define CONFIG_MAPPED_STORAGE_BASE 0x40000
-```
-
-npcx will define CONFIG_EXTERNAL_STORAGE and CONFIG_MAPPED_STORAGE, and set
-CONFIG_PROGRAM_MEMORY_BASE = 0x10088000, CONFIG_MAPPED_STORAGE_BASE =
-0x64000000.
-
-```none
-/* External, mapped storage */#define CONFIG_EXTERNAL_STORAGE#define CONFIG_MAPPED_STORAGE/* Storage is memory-mapped, but program runs from SRAM */#define CONFIG_PROGRAM_MEMORY_BASE 0x10088000#define CONFIG_MAPPED_STORAGE_BASE 0x64000000
-```
-
-mec1322 will define CONFIG_EXTERNAL_STORAGE, and set CONFIG_PROGRAM_MEMORY_BASE
-= 0x100000. CONFIG_MAPPED_STORAGE_BASE will not be defined, since storage is not
-memory mapped.
-
-```none
-/* External storage */#define CONFIG_EXTERNAL_STORAGE/* Program memory in SRAM */#define CONFIG_PROGRAM_MEMORY_BASE 0x100000/* Storage is not memory mapped */#undef CONFIG_MAPPED_STORAGE#undef CONFIG_MAPPED_STORAGE_BASE
-```
-
-Layout / Geometry Configs
-
-The following configs represent the Chrome EC implementation for a given chip
-and will normally be defined at the chip-level. There is flexibility to change
-these configs based upon needs. For example, the RO image on storage could
-reside at the beginning or the end of storage, based upon protection
-capabilities. Image sizes could grow or shrink if program memory space is
-dedicated to a loader.
-
-Since external storage may be shared between the EC and the AP, only a certain
-region of storage may “belong” to the EC.
-
--------------------------------------
-
-Color coding key:
-
-Relative to address zero / beginning of external storage.
-
-Relative to CONFIG_PROGRAM_MEMORY_BASE.
-
-Relative to CONFIG_PROTECTED_STORAGE_OFF.
-
-Relative to CONFIG_WRITABLE_STORAGE_OFF.
-
--------------------------------------
-
-CONFIG_EC_PROTECTED_STORAGE_OFF - Offset of protected region of storage
-belonging to the EC.
-
-CONFIG_EC_PROTECTED_STORAGE_SIZE - Size of protected region of storage belonging
-to the EC.
-
-CONFIG_EC_WRITABLE_STORAGE_OFF - Offset of the writable region of storage (the
-region that will be field auto-updated, when write protection is enabled)
-belonging to the EC.
-
-CONFIG_EC_WRITABLE_STORAGE_SIZE - Size of the writable region of storage
-belonging to the EC.
-
-CONFIG_FLASH_BASE_SPI was previously used to indicate the offset to storage
-region belonging to EC. We now need multiple defines, because we can no longer
-assume that there is one contiguous region of storage that belongs to the EC.
-
-CONFIG_RO_MEM_OFF - RO image offset in program memory, when loaded.
-
-CONFIG_RO_STORAGE_OFF - RO image offset on storage, relative to the start of the
-EC protected storage region.
-
-CONFIG_RO_SIZE - Size of RO image (in both program memory and storage).
-
-CONFIG_RW_MEM_OFF - RW image offset in program memory, when loaded.
-
-CONFIG_RW_B_MEM_OFF - RW B image (optional second identical RW image) offset in
-program memory, when loaded. Only valid when CONFIG_RW_B is defined.
-
-CONFIG_RW_STORAGE_OFF - RW image offset on storage, relative to the start of the
-EC writable storage region.
-
-CONFIG_RW_SIZE - Size of RW image (in both program memory and storage).
-
-CONFIG_WP_STORAGE_OFF - Start of write protect region (the region that will be
-write protected, when write protection is enabled) on EC storage. This may
-exceed CONFIG_EC_PROTECTED_STORAGE_OFF if more than just the region belonging to
-the EC must be protected.
-
-CONFIG_WP_STORAGE_SIZE - Size of write protect region on EC storage. This may be
-greater than CONFIG_EC_PROTECTED_STORAGE_SIZE for the same reason.
-
-CONFIG_FW_R\*_OFF, CONFIG_FW_R\*_SPI_OFF and CONFIG_FW_R\*_SIZE previously
-encompassed these defines.
-
-Example:
-
-<img alt="lm4.png"
-src="https://lh3.googleusercontent.com/GtIICh7nWQFutGqAKRwZPOHKW15XMxUcj0OxydmlFDgwHPG-sp1tORd5aa2jDqccqTVoYMmB4pvPeHILgNdETa-Ayle6aBcCJk5TRmTair12eYUIKokrlKwCI_H8g4xf3HhuzYI"
-height=317px; width=507px;>
-
-lm4:
-
-```none
-/* Protected region is first half, followed by writable */#define CONFIG_EC_PROTECTED_STORAGE_OFF 0#define CONFIG_EC_PROTECTED_STORAGE_SIZE 0x20000#define CONFIG_EC_WRITABLE_STORAGE_OFF 0x20000#define CONFIG_EC_WRITABLE_STORAGE_SIZE 0x20000/* RO image fills protected region, less pstate at end */#define CONFIG_RO_MEM_OFF 0#define CONFIG_RO_STORAGE_OFF 0#define CONFIG_RO_SIZE (0x20000 - PSTATE_SIZE)/* RW image fills writable region */#define CONFIG_RW_MEM_OFF 0x20000#define CONFIG_RW_STORAGE_OFF 0#define CONFIG_RW_SIZE 0x20000/* Protect first half of storage: RO image + pstate */#define CONFIG_WP_STORAGE_OFF 0#define CONFIG_WP_STORAGE_SIZE 0x20000
-```
-
-[<img alt="image"
-src="/chromium-os/ec-development/ec-image-geometry-spec/cr50.png">](/chromium-os/ec-development/ec-image-geometry-spec/cr50.png)
-
-cr50:
-
-```none
-/* Protected region is first half, followed by writable */#define CONFIG_EC_PROTECTED_STORAGE_OFF 0#define CONFIG_EC_PROTECTED_STORAGE_SIZE 0x20000#define CONFIG_EC_WRITABLE_STORAGE_OFF 0x20000#define CONFIG_EC_WRITABLE_STORAGE_SIZE 0x20000/* Signature is first 1024 bytes of protected region */#define SIG_STORAGE_OFF 0 /* Not a globally defined config */#define SIG_SIZE 1024 /* Not a globally defined config *//* RO image fills remainder protected region, less pstate at end */#define CONFIG_RO_MEM_OFF SIG_SIZE#define CONFIG_RO_STORAGE_OFF SIG_SIZE#define CONFIG_RO_SIZE (0x20000 - SIG_SIZE - PSTATE_SIZE)/* RW image fills writable region */#define CONFIG_RW_MEM_OFF 0x20000#define CONFIG_RW_STORAGE_OFF 0#define CONFIG_RW_SIZE 0x20000/* Protect first half of storage: sig + RO image + pstate */#define CONFIG_WP_STORAGE_OFF CONFIG_EC_PROTECTED_STORAGE_OFF#define CONFIG_WP_STORAGE_SIZE CONFIG_EC_PROTECTED_STORAGE_SIZE
-```
-
---------------------------------------------
-
-<img alt="mec1322_storage.png"
-src="https://lh4.googleusercontent.com/nXQXaXn8UaC_gUB-JGk_vuje4hwOevjlnu1M5jhzltfsYyE0hvN_3xKRSBT-SNL_smeF-IB6LgEpbjU2bXvHgSusY666rHp5IS70KYWRLblQ2F0RFzJFEsxyq2G1tTI2rB3Sr2U"
-height=273px; width=579px;>
-
-<img alt="mec1322_program_memory.png"
-src="https://lh6.googleusercontent.com/dOVZvS9j3m23lCmKvRPMoAUpDx9X0WWj5i4X4sx9tVFUHLbsxJypKpwms-4kehSnnJxI63s2aKMYxoekijpP1eL3w9Ux6ZwhFoksdvj0qbOHh3JUlZO2t9FMdeMg7pKKKZklRLc"
-height=236px; width=513px;>
-
-mec1322 (cyan):
-
-```none
-/* External unmapped storage, only second half belongs to EC *//* RW EC region followed by RO EC region */#define EC_STORAGE_START 0x40000 /* Not a globally defined config */#define CONFIG_EC_PROTECTED_STORAGE_OFF EC_STORAGE_START + 0x20000#define CONFIG_EC_PROTECTED_STORAGE_SIZE 0x20000#define CONFIG_EC_WRITABLE_STORAGE_OFF EC_STORAGE_START#define CONFIG_EC_WRITABLE_STORAGE_SIZE 0x20000/* Loader lives at beginning of program memory */#define CONFIG_RO_MEM_OFF (0 + LOADER_SIZE)/* RO image resides after loader in protected EC storage region */#define CONFIG_RO_STORAGE_OFF (0 + LOADER_SIZE)/* Image size is 96k minus loader, bounded by program memory */#define CONFIG_RO_SIZE (1024 * 96 - LOADER_SIZE)/* RW image lives at same program memory location as RO */#define CONFIG_RW_MEM_OFF (0 + LOADER_SIZE)/* RW image resides at beginning of writable EC storage region */#define CONFIG_RW_STORAGE_OFF 0#define CONFIG_RW_SIZE (1024 * 96 - LOADER_SIZE)/* WP region corresponds to EC protected storage region */#define CONFIG_WP_STORAGE_OFF CONFIG_EC_PROTECTED_STORAGE_OFF#define CONFIG_WP_STORAGE_SIZE CONFIG_EC_PROTECTED_STORAGE_SIZE
-```
-
---------------------------------------------
-
-<img alt="image"
-src="https://lh4.googleusercontent.com/NuXt7Tq-8pzO_pLLyZ-_Drf1VbRnimdPBKuFJGvoBwUorNeqgZ7NPUIl-SbqXqeQaYqsyChFn3xw6_YmO5fpdiXXus_4b1ibKn6JuhGnfRH3GSb33IBhgqs-YJdWWxh7LB3QeYE"
-height=167px; width=553px;>
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/EuHdkHp1XBXK1yCWL9ogJrZJkXjzLrK3tLORPPXP3CWFezWL3t8B4l1SnA24Hvtx4a-MFHsJPnL_yQJd5OiKzqMTSppt8wpRpMRpGRsdKmwSdEbnO_-YJv7MfP6FT9T0qvZtk0Y"
-height=139px; width=342px;>
-
-npcx (npcx_evb):
-
-```none
-/* External mapped storage, only first half belongs to EC *//* RO EC region followed by RW EC region */#define EC_STORAGE_START 0 #define CONFIG_EC_PROTECTED_STORAGE_OFF EC_STORAGE_START#define CONFIG_EC_PROTECTED_STORAGE_SIZE 0x20000#define CONFIG_EC_WRITABLE_STORAGE_OFF EC_STORAGE_START + 0x20000#define CONFIG_EC_WRITABLE_STORAGE_SIZE 0x20000/* RO image will reside at beginning of program memory */#define CONFIG_RO_MEM_OFF 0/* RO image resides after loader in protected EC storage region */#define CONFIG_RO_STORAGE_OFF (0 + CONFIG_BOOTHEADER_SIZE)/* Image size is 96k minus header, bounded by program memory */#define CONFIG_RO_SIZE (1024 * 96 - CONFIG_BOOTHEADER_SIZE)/* RW image lives at same program memory location as RO */#define CONFIG_RW_MEM_OFF 0/* RW image resides at beginning of writable EC storage region */#define CONFIG_RW_STORAGE_OFF 0#define CONFIG_RW_SIZE (1024 * 96)/* WP region corresponds to EC protected storage region */#define CONFIG_WP_STORAGE_OFF CONFIG_EC_PROTECTED_STORAGE_OFF#define CONFIG_WP_STORAGE_SIZE CONFIG_EC_PROTECTED_STORAGE_SIZE
-```
-
---------------------------------------------<img alt="SharedSpi.png"
-src="https://lh4.googleusercontent.com/qtVOKTuf4Irw2bpitHmMFzINVKkA54Xfsmb6terAPANSs0MmUUeVQraK3zWbhG_HG6ZgyvVBaEs9I-o3GItjGAceqpz_LOv0ksMxIlME9_F___QJZr5kWxhQPYEQm8ohBNH-2O4"
-height=360px; width=624px;>Hypothetical shared SPI platform (see Appendix):
-
-```none
-/* Non-contiguous RO + RW images on storage */#define CONFIG_EC_PROTECTED_STORAGE_OFF 0x7e0000#define CONFIG_EC_PROTECTED_STORAGE_SIZE 0x20000#define CONFIG_EC_WRITABLE_STORAGE_OFF 0x1e0000#define CONFIG_EC_WRITABLE_STORAGE_SIZE 0x20000...#define CONFIG_RO_STORAGE_OFF (0 + LOADER_SIZE)#define CONFIG_RW_STORAGE_OFF 0.../* Protected region includes non-EC data */#define CONFIG_WP_STORAGE_OFF 0x600000#define CONFIG_PROTECTED_SIZE 0x200000
-```
-
-# Handling Non-Image Data Pieces (NIDs)
-
-Different chips may have different NIDs, such as boot headers and bootloaders.
-Since these NIDs may have chip-specific requirements, we will not attempt to
-standardize their layouts. It is suggested to keep uniform naming for NID
-geometry configs, such as:
-
-```none
-#define CONFIG_BOOTLOADER_OFF#define CONFIG_BOOTLOADER_SIZE#define CONFIG_BOOTHEADER_OFF#define CONFIG_BOOTHEADER_SIZE
-```
-
-These chip-specific NID-related CONFIGs may be used in chip folders as required.
-They should **NEVER** be used outside of chip folders (except to describe them
-in config.h) since their precise meanings are not standardized.
-
-# Linking
-
-Our linker scripts were originally written to support internal memory-mapped
-storage with only RO and RW images (no NIDs). The scripts will be extended to
-support the new configs defined above. For example, the linker will produce a
-unified image with the RW image at the appropriate offset, as defined by
-CONFIG_RW_STORAGE_OFF / CONFIG_RW_STORAGE_SIZE.
-
-If NIDs are required, they will need to be copied to the appropriate location by
-a chip-specific packing script. Such a script has already been implemented for
-mec1322 in chip/mec1322/util/pack_ec.py. We may consider implementing a generic
-version of pack_ec.py in the future, with only custom parameters for each chip.
-
-NIDs should not be copied by modifying the global, non-chip linker scripts. For
-example, the NPCX-custom changes related to NPCX_RO_HEADER in
-core/cortex-m/ec.lds.S are not acceptable and will need to be removed.
-
-# FMAP
-
-FMAP is a data structure (authoritative copy today lives inside the RO image,
-but copies exist in both images) that describes the layout of EC storage.
-
-Its header defines the following values of significance:
-
-fmap_base
-
-fmap_size
-
-In addition, boundaries for seven regions are defined.
-
-Currently, CONFIG_PROGRAM_MEMORY_BASE is written to fmap_base, and
-CONFIG_EC_STORAGE_SIZE is written to fmap_size. This design makes no sense for
-an FMAP intended to be read outside of the EC, since CONFIG_PROGRAM_MEMORY_BASE
-is only meaningful to the EC. Instead, the following changes are proposed:
-
-fmap_base: Offset to storage region described by FMAP
-
-fmap_size: Size of storage region described by FMAP
-
-When protected and writable storage regions are contiguous, the FMAP in RO and
-RW (if present) images will be identical and describe both regions, with the RO
-copy being authoritative. This is entirely consistent with the way FMAP works
-today (all current platforms have contiguous readable + writable storage
-regions).
-
-## Shared SPI
-
-When protected and writable storage regions are non-contiguous (in certain
-future shared SPI designs), the FMAP in RO and RW images will be different and
-will each describe the EC protected and writable storage regions, respectfully.
-
-For shared SPI, there will also be *master FMAP* (today known as the FW SPI
-FMAP), outside the EC storage regions,that describes all regions of SPI storage,
-including FW romstage images, ramstage images, vendor blobs, and EC storage
-regions.
-
-The workings of the *master FMAP* are outside the scope of the document, but
-it’s anticipated that EC FW updates could work as follows:
-
-The *master FMAP* has separate entries for the EC RO update region, the EC RW
-update region, and the SPI write protect region. Therefore, the EC regions can
-be flashed without parsing the EC FMAP. If desired, the EC FMAP can be parsed to
-ensure consistency before flashing.
-
-## FMAP Regions
-
-The seven regions are unchanged and will keep their overall meaning (though some
-corrections still must be made in code). Note that all region start addresses
-are relative to fmap_base.
-
-EC_RO - Region that will be updated on an RO update (equivalent to the
-CONFIG_EC_PROTECTED_STORAGE region). This region includes the RO image and any
-other meaningful NIDs in the RO region. Note that RO FW update is a feature not
-supported on production devices, yet it is important for pre-MP updates and
-factory flow.
-
-FR_MAIN - Region consisting only of RO image (CONFIG_RO_STORAGE region)
-
-RO_FRID - Region consisting of version struct inside RO image (generally start
-of FR_MAIN + constant offset)
-
-FMAP - Region consisting of the FMAP inside RO image, or the FMAP inside the RW
-image, if the RO image doesn’t exist.
-
-WP_RO - EC region that will be write protected at the factory before shipping
-PVT / production devices. Equivalent to EC_RO. Note that if the protect region
-exceeds the fmap_base / fmap_size region (when the CONFIG_WP_STORAGE exceeds the
-CONFIG_EC_PROTECTED_STORAGE region, such as with shared SPI) then WP_RO doesn’t
-describe the entire SPI region that must be protected. The *master FMAP* must
-describe that region separately.
-
-EC_RW - Region that will be updated on an RW update (CONFIG_EC_WRITABLE_STORAGE
-region).
-
-RW_FWID - Region consisting of version struct inside RW image.
-
-FR_MAIN (EC RO image) &lt;= EC_RO (RO update region /
-CONFIG_EC_PROTECTED_STORAGE region) = WP_RO (EC write protect region)
-
-EC RW IMAGE (not defined by FMAP) &lt;= EC_RW (RW update region /
-CONFIG_WRITABLE_STORAGE region)
-
-EC_RO + EC_RW == fmap_base + fmap_size, for contiguous EC_RO + EC_RW
-
-# Appendix
-
-## Hypothetical Shared SPI Platform
-
-* Uses hypothetical MEC1322 (actual shared SPI implementation details
- not consulted)
-* 8 MB (0x800000) SPI ROM
-* EC writable region 128K resides at \[0x1e0000, 0x200000)
-* EC protected region 128K resides at \[0x7e0000, 0x800000)
-* Remaining non-EC regions belong to system FW / BIOS
-* SPI protected region 2MB resides at \[0x600000, 0x800000) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/storage2.png.sha1 b/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/storage2.png.sha1
deleted file mode 100644
index f542bcb231a..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/ec-image-geometry-spec/storage2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a585ce8b2cff3486ca5c8173bfba46572096804a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/getting-started-building-ec-images-quickly/index.md b/chromium/docs/website/site/chromium-os/ec-development/getting-started-building-ec-images-quickly/index.md
deleted file mode 100644
index 074051c8913..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/getting-started-building-ec-images-quickly/index.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/ec-development
- - Chromium Embedded Controller (EC) Development
-page_name: getting-started-building-ec-images-quickly
-title: Get Started Building EC Images (Quickly)
----
-
-The [Chromium OS Developer Guide](/chromium-os/developer-guide) and [EC
-Development
-Guide](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/README.md)
-walk through the steps needed to fetch and build Chromium OS source. These steps
-can be followed to retrieve and build EC source as well. On the other hand, if
-your sole interest is building an EC image, the general developer guide contains
-some extra unneeded steps.
-
-The fastest possible way to build an EC image is to skip the Chromium OS chroot
-install entirely. The following steps have been tested on an Ubuntu 15.10 (Wily
-Werewolf) 64-bit host machine. Other distros / versions may be used, but
-toolchain incompatibilities may require extra debug.
-
-1. Install build / dev tools: *sudo apt-get install git libftdi-dev
- libusb-dev libncurses5-dev gcc-arm-none-eabi*
-2. Sync the cros-ec git repo: *git clone
- https://chromium.googlesource.com/chromiumos/platform/ec*
-3. Build your EC image: **HOSTCC=x86_64-linux-gnu-gcc* make
- BOARD=$board*
-
-Most boards are buildable, but some will fail due to dependencies on external
-binaries (such as futility **\[1\]**). Also, some related tools (such as
-flash_ec and servod) must be run from the Chromium OS chroot. Here is a set of
-steps to setup a minimal development environment to build EC images from the
-Chromium OS chroot:
-
-1. Create a folder for your chroot (ex. *mkdir cros-src; cd cros-src*)
-2. Run *repo init -u
- https://chromium.googlesource.com/chromiumos/manifest.git --repo-url
- https://chromium.googlesource.com/external/repo.git -g minilayout*
-3. Edit .repo/manifest.xml, and add *groups="minilayout"* to the
- platform/ec project, so the line becomes *&lt;project
- path="src/platform/ec" name="chromiumos/platform/ec"
- groups="minilayout" /&gt;*
-4. *repo sync -j &lt;number of cores on your workstatsion&gt;*
-5. *./chromite/bin/cros_sdk* and enter your password for sudo if
- prompted
-6. *./setup_board --board=$BOARD* (ex. *./setup_board --board=glados*)
-7. *./build_packages --board=$BOARD chromeos-ec*
-8. Now, EC images for any board can be built with *cd
- ~/trunk/src/platform/ec; make BOARD=$board -j*
-
----
-
-**\[1\]** if you want to build the 'futility' host tool outside the normal
-Chrome OS chroot self-contained environment, you can try the following:
-
-1. install futility build dependencies: *`sudo apt-get install uuid-dev
- liblzma-dev libyaml-dev libssl-dev`*
-2. get the vboot reference sources: *`git clone
- https://chromium.googlesource.com/chromiumos/platform/vboot_reference`*
-3. build it: *`cd vboot_reference ; make`*
-4. install it in /usr/local/bin: *`sudo make install`*
-5. add /usr/local/bin to your default PATH: *`export
- PATH="${PATH}:/usr/local/bin"`* \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/index.md b/chromium/docs/website/site/chromium-os/ec-development/index.md
deleted file mode 100644
index e8f5243bd19..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: ec-development
-title: Chromium Embedded Controller (EC) Development
----
-
-Moved to
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/stack-size-analyzer/index.md b/chromium/docs/website/site/chromium-os/ec-development/stack-size-analyzer/index.md
deleted file mode 100644
index a11e2bd3823..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/stack-size-analyzer/index.md
+++ /dev/null
@@ -1,682 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/ec-development
- - Chromium Embedded Controller (EC) Development
-page_name: stack-size-analyzer
-title: Stack size Analyzer
----
-
-## [TOC]
-
-## Objective
-
-The EC (Embedded Controller) is a chip within Chromebooks that takes care of
-tasks such as keyboard scanning, USB-C negotiation, and battery charging among
-other things. They are low power chips that are almost always on (even when
-system is off), and are quite limited in terms of RAM (few KB), and flash
-(100-500 KB)
-
-Each EC task has a specific, separate stack, with a fixed size. We would like to
-be able do static analysis of the EC code to be able to tell, in advance, what
-is a reasonable stack size value.
-
-# Background
-
-At runtime, the maximum task stack depth can be probed with taskinfo console
-command. However, this only gives us the maximum stack depth for the current EC
-runtime lifetime, and not the absolute maximum. If the stack ever exceeds the
-maximum, the EC will panic and reboot (taking down the whole system with it).
-
-The task size is currently set empirically, by copying from previous
-boards,examining taskinfo, and adjusting where the margin is uncomfortably low.
-However, this does not cover all cases, especially rare error cases that may
-overflow the stack size.
-
-# Overview
-
-### EC Stack Analyzer
-
-Run static analysis on EC firmware binary and report maximum possible stack
-usage of each task. The annotation feature allows users to provide extra
-information and improve the result of analysis.
-
-# Usage
-
-### Basic Usage
-
-Assume you want to get the report of ${BOARD}.Under src/platform/ec:
-
- Make sure the EC firmware of ${BOARD} is built.
-
- make BOARD=${BOARD} -j
-
- make BOARD=${BOARD} analyzestack
-
- Each EC firmware has two sections, RO and RW. You can analyze different
- sections by running make BOARD=${BOARD} SECTION=RO or RW analyzestack,
- default is RW.
-
-### Report Explanation
-
-#### Task Stack Usage
-
-For each task, it will output the result like below,
-
-Task: PD_C1, Max size: 1156 (932 + 224), Allocated size: 640
-
-Call Trace:
-
-pd_task (160) \[common/usb_pd_protocol.c:1644\] 1008a6e8
-
--&gt; pd_task\[common/usb_pd_protocol.c:1808\] 1008ac8a
-
-- handle_request\[common/usb_pd_protocol.c:1191\]
-
-- handle_data_request\[common/usb_pd_protocol.c:798\]
-
--&gt; pd_task\[common/usb_pd_protocol.c:2672\] 1008c222
-
--&gt; \[annotation\]
-
-pd_send_request_msg.lto_priv.263 (56) \[common/usb_pd_protocol.c:653\] 1009a0b4
-
--&gt; pd_send_request_msg.lto_priv.263\[common/usb_pd_protocol.c:712\] 1009a22e0
-
-The first line,
-
-Task: PD_C1, Max size: 1156 (932 + 224), Allocated size: 640
-
-means the maximum possible stack usage of PD_C1 is 932 bytes, plus 224 bytes
-used by exception context switching. The total maximum stack usage is 1156
-bytes. And the allocated stack size of PD_C1 is 640 bytes.
-
-The pd_task function uses 160 bytes stack by itself and calls
-pd_send_request_msg.lto_priv.263 (which uses 56 bytes).
-
-The callsites to the next function will be shown like below,
-
--&gt; pd_task\[common/usb_pd_protocol.c:1808\] 1008ac8a
-
-- handle_request\[common/usb_pd_protocol.c:1191\]
-
-- handle_data_request\[common/usb_pd_protocol.c:798\]
-
--&gt; pd_task\[common/usb_pd_protocol.c:2672\] 1008c222
-
--&gt; \[annotation\]
-
-This means one callsite to the next function(pd_send_request_msg.lto_priv.263)
-is at usb_pd_protocol.c:798, but it is inlined to the current function and you
-can follow the trace:
-
-usb_pd_protocol.c:1808 -&gt; usb_pd_protocol.c:1191 -&gt; usb_pd_protocol.c:798
-to
-
-find the callsite.
-
-The second callsite is at usb_pd_protocol.c:2672.
-
-And the third one is added by annotation (see below)
-
-#### Unresolved Indirect Callsites
-
-The indirect callsites are the function calls to function pointers. The tool
-will report all indirect callsites that it can not resolve.
-
-Unresolved indirect callsites:
-
-In function dfp_consume_attention:
-
--&gt; dfp_consume_attention\[common/usb_pd_policy.c:499\] 802bf4c
-
-In function motion_sense_task:
-
--&gt; motion_sense_task\[common/motion_sense.c:889\] 8029afe
-
-- motion_sense_process\[common/motion_sense.c:718\]
-
-- motion_sensor_time_to_read\[common/motion_sense.c:194\]
-
--&gt; motion_sense_task\[common/motion_sense.c:889\] 8029b28
-
-- motion_sense_process\[common/motion_sense.c:720\]
-
-- motion_sense_read\[common/motion_sense.c:657\]
-
-The first item means in dfp_consume_attention, there is one callsite can’t be
-resolved, which is at common/usb_pd_policy.c:499.
-
-The second item means in motion_sense_task, there are two unresolved callsites.
-Both of them come from inlining, so the real indirect calls are at
-common/motion_sense.c:194 and common/motion_sense.c:657.
-
-#### Detected Cycles
-
-The tool will report all recursive call cycles (there should never be recursive
-calls in EC code). The cycles will cause the stack usage analysis become
-inaccurate. If a cycle won’t happen (e.g. bounded recursion), you can remove it
-by annotating an invalid path, otherwise, the code needs to be fixed.
-
-There are cycles in the following function sets:
-
-\[panic_txchar\]
-
-\[typec_set_input_current_limit, pd_set_input_current_limit,
-charge_manager_update_charge, pd_request_power_swap,
-charge_manager_set_override, set_state\]
-
-The first list means there is a self recursion in panic_txchar
-
-The second list indicates those functions are formed a strongly connected
-components, which means for any two functions A, B in the list, there is a path
-from A to B and a path from B to A. Therefore there are many cycles between
-those functions.
-
-#### Unresolved Annotation Signatures
-
-This section shows the unresolved annotation signatures and their reasons
-
-Unresolved annotation signatures:
-
-panic_assert_faila: function is not found
-
-### Annotation
-
-You can add missing call edges and remove invalid paths by writing an annotation
-file.
-
-The tool will try to load the annotation from board/${BOARD}/analyzestack.yaml
-by default. So if the annotation file is placed at that path, no extra argument
-is required.
-
-Otherwise, the annotation file can be specified by running:
-
-make BOARD=${BOARD} ANNOTATION=${ANNOTATION_FILE} analyzestack
-
-#### Sample Annotation File
-
-The annotation file is in yaml format, the following is an example annotation
-file.
-
-# Size of extra stack frame needed by exception context switch.
-
-exception_frame_size: 64
-
-# Add some missing calls.
-
-add:
-
-# console_task also calls command_display_accel_info and command_accel_init.
-
-console_task:
-
-- command_display_accel_info
-
-- command_accel_init
-
-# Function name can be followed by \[source code path\] to indicate where it is
-declared (there may be several functions with same names).
-
-motion_lid_calc\[common/motion_lid.c\]:
-
-- get_range\[driver/accel_kionix.c\]
-
-# The full signature (function name\[path:line number\]) can be used to
-eliminate the indirect call (see README.md).
-
-tcpm_transmit\[driver/tcpm/tcpm.h:142\]:
-
-- anx74xx_tcpm_transmit
-
-# Remove some call paths.
-
-remove:
-
-# Remove all callsites pointing to panic_assert_fail.
-
-- panic_assert_fail
-
-- panic
-
-- \[software_panic\]
-
-# Remove some invalid paths.
-
-- \[pd_send_request_msg, set_state, pd_power_supply_reset\]
-
-# The set_state can do recursive calls twice (set_state -&gt; set_state), but
-not thrice.
-
-- \[set_state, set_state, set_state\]
-
-# Remove two invalid paths with the common prefix.
-
-- \[pd_execute_hard_reset, set_state, \[charge_manager_update_dualrole,
-pd_dfp_exit_mode\]\]
-
-# It is equivalent to the following two lines,
-
-# - \[pd_execute_hard_reset, set_state, charge_manager_update_dualrole\]
-
-# - \[pd_execute_hard_reset, set_state, pd_dfp_exit_mode\]
-
-# Remove four invalid paths with the common segment.
-
-- \[\[pd_send_request_msg, pd_request_vconn_swap\], set_state, \[usb_mux_set,
-pd_power_supply_reset\]\]
-
-# It is equivalent to the following four lines,
-
-# - \[pd_send_request_msg, set_state, usb_mux_set\]
-
-# - \[pd_send_request_msg, set_state, pd_power_supply_reset\]
-
-# - \[pd_request_vconn_swap, set_state, usb_mux_set\]
-
-# - \[pd_request_vconn_swap, set_state, pd_power_supply_reset\]
-
-# Detailed Design
-
-To calculate the max stack usage of each function, we need the following
-information:
-
- The stack frame sizes of functions
-
- The caller-callee relations of functions (callgraph).
-
-With these informations, we can get the Maximum Stack Usage (MSU) of a function
-by finding the maximum calling path and calculating the total stack usage on the
-path.
-
-### Finding Calling Path with Maximum Stack Usage
-
-To find the maximum path on the callgraph, if there is no cycle in the
-callgraph, we can use the dynamic programming method. Every function can get its
-max stack usage by reusing the calculated max stack usage of its callees. Here
-is the transition function (without considering the different calling
-relations):
-
-maximum_stack_usage = max(self_stack_frame_size, self_stack_frame_size +
-maximum_stack_usage_of_callee_i for all callees)
-
-If there are cycles in the callgraph, since the length of maximum path will
-become infinite, we can’t get accurate stack usage result in this situation.
-Therefore, we just remove those back edges which cause cycles and get a directed
-acyclic callgraph, then report those cycles to users for warning.
-
-### Calling Relation
-
-There are two kinds of calling relations:
-
- Normal call
-
- The callee pushes new stack frame and pops after returning.
-
- Tail call
-
- The callee reuses the caller’s stack frame and pops both stack frames
- after returning.
-
- It is basically a jump, generated by compiler when it is sure that there
- is no more things to do after this call, so the caller’s stack frame can
- be destroyed and reused.
-
-We need to handle different kinds of calling relations when calculating the
-stack usage of the calling path.
-
-For a normal call: the_max_stack_usage_of_the_call = caller_stack_frame_size +
-callee_max_stack_usage
-
-For a tail call: the_max_stack_usage_of_the_call = max(caller_stack_frame_size,
-callee_max_stack_usage)
-
-When the calling target is a function pointer, it will be hard to determine the
-its callees. So we support the annotation to let users add these missing calling
-relations by manually analyzing the code.
-
-### Reporting
-
-A fixed-size stack is assigned to each task, so the tool needs to report the
-possible max stack usage of each task. Each task starts from a task routine
-function, so the max stack usage of the task routine functions will be the max
-stack usage of their tasks. As a result, the tool reports the stack usage
-information of each task routine function.
-
-To make it easy for users to trace the calling paths, the tool outputs the
-calling paths of each routine functions with the callsites between the callers
-and callees on the paths. We only get the addresses of callsites during
-analysis, so the tool uses debug informations (which are added if the binary is
-compiled with “-g”) to resolve the file and line number of each address.
-
-Function inlining will make the callsites harder to be traced because they are
-inlined into other functions, so you can’t find the real function calls in the
-caller’s source code directly. The debug information provides inlining stack of
-each address, so the tool will output the complete inlining stack of the
-callsite in this case.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/smNpbdQn4fwNyua1T6c4YNg/image?w=560&h=420&rev=1&ac=1"
-height=420 width=560>
-
-# Implementation
-
-## Retrieving Stack Frame and Callgraph
-
-We disassemble the ELF binary of EC firmware and analyze the disassembly to get
-these information.
-
-### Why We Use Disassembly
-
-To get the stack frame sizes, GCC’s -fstack-usage can report the stack frame
-size of each function, but it will be broken if we use the
-Linking-Time-Optimization(LTO) to optimize the binary.
-
-To get the most accurate stack frame sizes of functions, we parse the
-disassembly of linked EC ELF to get rid of those optimization effects. The
-trade-off is that we need to manually match all stack-related instructions, and
-any unhandled ones can make the stack frame size calculation incorrect.
-
-The callgraph exported from GCC still be affected by LTO (Parsing the LTO
-information or writing LTO plugin may be possible to get accurate callgraph
-after LTO). To keep it simple, we choose to disassemble the functions and detect
-their call instructions.
-
-The disadvantage of disassembling method is it will be architecture-dependent.
-But most of our current firmware are using ARMv6-M (Cortex-M0, M1) or
-ARMv7-M(Cortex-M3, M4), their disassembly (from objdump) is parsed by a single
-parser with properly crafted regular expressions in this tool. To preserve the
-extensibility, the architecture-dependent analyzer is written in an independent
-class (e.g. ArmAnalyzer for ARM) and they have a common interface.
-
-### Analyzing Processing
-
-Doing disassembly will encounter several problems like
-
- Code discovery (which parts are code, which parts are data)
-
- Correctly switch between ARM thumb-mode and ARM mode (if the processor
- supports).
-
-We use objdump directly to solve these problems (objdump already solves these
-problem). The following is our disassembly processing
-
- Dump the text of symbol table and disassembly from objdump
-
- Parse the symbol table to get the symbols.
-
- Locate the functions in the text of disassembly, get the instruction texts
- of the function bodies.
-
- Pass each function body into architecture-dependent analyzer, the analyzer
- will parse the instruction texts and return the stack frame size and
- callsites.
-
- Build function objects from the returned data.
-
-The interface of architecture-dependent analyzer is simple, just need to accept
-a list of the function instructions and return the analyzed result of that
-function.
-
-## Annotation
-
-To fix the missing information of callsites in the disassembly, an annotation
-file can specified for adding missing function calls and removing invalid
-function call paths.
-
-### Resolving the Annotation
-
-How to map the function signature (function name + the location in source code)
-in the annotation file to the functions in disassembly is a problem. There are
-four cases
-
- The function signature points to a single function.
-
- Multiple function signatures point to a single function.
-
- The function has different aliases.
-
- The function signature points to multiple functions.
-
- Multiple functions have same function name and location in debug
- information.
-
- The function signature points to nothing.
-
-For case 3, the tool assumes those functions are actually the copies of a single
-function (e.g. the function is defined in a header file and included by multiple
-compilation units). Any operation on this function signature will be repeated on
-all pointed functions.
-
-For case 4, the tool reports an error to the user.
-
-### Operation
-
-After the function signatures are mapped to the functions in disassembly, we
-only need to do operations on the functions. There are two kinds of operations:
-
- Add a caller-callee relation between two functions.
-
- Remove an invalid path on the callgraph.
-
- This path is invalid and shouldn’t appear in any calling path.
-
- The tool has to exclude this path when calculating the maximum calling
- path.
-
-The tool adds the new caller-callee relations on the callgraph directly (creates
-a new callsite). For invalid paths, the tool excludes those paths when
-traversing the callgraph to calculate the max stack usage.
-
-## Analyzing Stack Usage on Callgraph
-
-For each function, to get the maximum calling path starting from it, the tool
-tries to calculate the maximum calling paths of its callees and prepends it to
-the head of the largest maximum calling paths of callees (makes the biggest
-stack usage).
-
-This is a recursive traversing processing which will be stopped when
-encountering a function with no callee. But there are two more stopping cases:
-
- Found a cycle.
-
- Traversing on the cycle will cause infinite loop.
-
- There is an invalid path (from annotation) appearing in current traversing
- path.
-
-For case 2, the tool tries to keep matching the suffix of the current traversing
-path with all prefixes of invalid paths. If any matching prefix of invalid paths
-is equal to the invalid path itself, it means the invalid path appears in the
-suffix of the current traversing path, and the tool should stop from traversing
-deeper.
-
-The invalid path also changes the meaning of cycles on the callgraph, because it
-can stop an infinite loop after repeating the cycle a limited number of times.
-So here we define the “state” and “state transition graph”.
-
-### State Transition Graph
-
-A state transition graph(G) consists of the vertex(V): state and the edge(E):
-state transition.
-
-Define a state as a nested tuple:
-
-State(V): (current function on the callgraph, (L1, L2, L3, … Ln))
-
-Where current function is the tail of the current traversing path, n is the
-number of invalid paths, the Lx is the length of longest matching suffix of the
-current traversing path (excluding the current function at the tail) and prefix
-of the invalid path x.
-
-There can be multiple traversing paths stopping on the same function that have
-the same state under this definition. Because the definition only considers the
-longest matching suffix of traversing path.
-
-There is a transition(E) from state A to state B if the function of A calls the
-function of B and the tuple of matching lengths of A will be updated to the one
-of B after appending the function of B to the current traversing path (so the
-function of A isn’t the tail of the path and will be included in the suffix
-matching)
-
-To prove the transition is well-defined, we need to show that all traversing
-paths having state A, after we append the function of B to these paths, will
-transit to the same state B. For each invalid path, those traversing paths have
-the same longest matching suffix with the prefix of the invalid path. For each
-path, after we append the function B to it, the new longest matching suffix is
-at most “the old one + the function of A”; otherwise the old one won’t be the
-longest. Since the longest matching suffixes of all paths are the same, they
-will have the same new longest matching suffixes after appended the function of
-B. As a result, they will transit to the same state B.
-
-### Traversal
-
-The original idea of finding maximum calling path on callgraph with invalid
-paths is traversing all paths (we can traverse a function multiple times).
-During traversing, we keep matching the suffix of current traversing path with
-invalid paths, and stop if we match any of them. And if we know there is no
-invalid path we can stop the current traversing path from going into an infinite
-loop in a cycle, stop too.
-
-Since a function can be traversed multiple times, if a path walks into a cycle
-on callgraph, it can only be stopped by matching an invalid path.
-
-Assume we only have one invalid path. When traversing on callgraph, every time
-the current path reaches a function, we will also have the length of longest
-matching prefix of the invalid path with the current suffix. If this function is
-already in the current path, there are two cases,
-
- The matching length at this function has been seen before (says position X
- in the path).
-
- This means we can follow the same sub path from X to here again, because
- on this sub path, there is no moment that the matching length is equal
- to the length of the invalid path (the suffix matches the invalid path)
- and we already proved that [the changes of matching length is only
- related to the previous matching
- length](https://docs.google.com/document/d/1Yt9mWfFM4BuRU9qYipIs8eo4MjLgXCKyHk_3gGWK_d0/edit?ts=59a7d62f#bookmark=id.m0yxxq2cmd0c).
- So there is a cycle.
-
- The matching length at this function is new.
-
- We may also find new matching lengths at other functions and some of
- them may match the invalid path.
-
-Here is the example why it is possible to traverse a function twice and stop by
-an invalid path.
-
-If there is a cycle like the below on callgraph.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/stolPC15LUeA3tjJDWQcnXA/image?w=427&h=203&rev=36&ac=1"
-height=203 width=427>
-
-And we set an invalid path A-&gt;B-&gt;C-&gt;A-&gt;B-&gt;C-&gt;A-&gt;B-&gt;C
-
-The first time we reach the C function, the longest matching prefix is “A, B,
-C”.
-
-At second time, the matching prefix is “A, B, C, A, B, C”, which is new.
-
-At the third time, the matching prefix is “A, B, C, A, B, C, A, B, C”, and
-matches the invalid path.
-
-So the invalid path preserves the cycle with two iterations, and removes the
-longer cycles.
-
-But if we set an invalid path A-&gt;B-&gt;C-&gt;C
-
-The first time we reach the A function, the matching prefix is “A”.
-
-At the second time, since our current path is A-&gt;B-&gt;C-&gt;A, the longest
-matching prefix of the invalid path is only “A”, which has been seen at the
-first time. So we can follow the same pattern to create an infinite loop, and
-this invalid path doesn’t stop the loop.
-
-Therefore, the idea of state transition graph is that we build different
-vertices for each function with different matching lengths. When we traverse on
-the state transition graph, if seeing a vertex twice in the current path, we
-know there is an infinite loop.
-
-The tool traverses the state transition graph instead of the original callgraph.
-Since the state transition can be determined by the longest matching suffixes of
-the traversing paths, which is equal to the longest matching prefixes of the
-invalid paths, we don’t need the real traversing path on callgraph. The current
-longest matching prefixes of invalid paths and the next callee function on
-callgraph are enough for state transition and traversing.
-
-### Invalid Path Matching and Cycle Detection
-
-When reaching a state with a longest matching prefix is equal to the invalid
-path, the current state is invalid (and the all traversing paths with this state
-are invalid). The tool will stop from traversing deeper.
-
-During traversing, the tool keeps all the parent states in a stack. If the next
-state has been seen in the parent states, this means we can follow the same
-transition path to reach here again. A cycle on the state transition graph is
-detected.
-
-The tool actually runs the strongly connected component algorithm on the state
-transition graph during traversing and catch all state cycles.
-
-### Calculating The Maximum Calling Path
-
-The traversal on state transition graph can give us the state transition path
-with maximum stack usage (by sum the stack frame size of the functions of those
-states). And we can use the same idea of how we calculate the maximum calling
-path on callgraph to find these maximum transition paths efficiently.
-
-Then the tool convert the maximum transition paths to the maximum calling paths
-for each function.
-
-The main problem is instead of remember the max stack usage of each analyzed
-function, this method has to remember the max stack usage of each state. The
-number of states can be really large. So we assume the number of invalid paths
-is small and they are short.
-
-## Task-Aware Stack Usage
-
-The task routines and configurations are different between boards and affected
-by build options. To retrieve the full task configurations of each board, there
-is a small C file will be compiled with the board and become a shared library.
-It has a interface to return the compiled task configurations. The tool will
-load this shared library and get the board-specific task configurations.
-
-# Future Works
-
-## Automatic Indirect Callsite Resolver
-
-Resolve the indirect callsites automatically by some analysis.
-
-Here is a very early buggy prototype, it compiles the EC firmware into LLVM
-bitcode and do some constant propagation to resolve some indirect callsites.
-
-<https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/652094>
-
-It does backward tracing of indirect calls and tries to evaluate the constant
-function targets by enumerating the unknown variables. Most indirect function
-pointers point are derived from const global variables with some indexing
-variables. By enumerating those integer variables in reasonable ranges, we can
-evaluate the target of function pointers. LLVM already has lots of analysis
-passes which help me do constant evaluation.
-
-## Better Disassembly Parser
-
-Currently we use objdump to solve code discovery and disassembly. Then use the
-regular expression to parse the instruction texts from objdump. If the parser
-misses some formats of instruction texts, we will miss some instructions which
-could change the stack frame or do function call.
-
-There is a idea that combine the objdump and the
-[Capstone](https://github.com/aquynh/capstone) library. We use objdump to do
-code discovery and get the instruction texts of each function body, then use
-Capstone to disassemble the address of each instruction texts. So we can get the
-structural disassembled instruction from the Capstone, and get rid of parsing
-each instruction text by ourself.
-
-## Stack Usage of Interrupt Handler
-
-When interrupt happens, the interrupt handler will also use a fixed allocated
-stack. So the maximum possible stack usages of interrupt handlers should be
-checked too. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/PD Low Battery Boot.png.sha1 b/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/PD Low Battery Boot.png.sha1
deleted file mode 100644
index 96caf76423c..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/PD Low Battery Boot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6db20c8c1844ed5a84130565985f732e21ebc657 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/index.md b/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/index.md
deleted file mode 100644
index 750fb8ecf13..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/index.md
+++ /dev/null
@@ -1,132 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/ec-development
- - Chromium Embedded Controller (EC) Development
-page_name: usb-low-power-boot
-title: USB-C / PD Low Power Boot
----
-
-(Additional discussion on [crbug.com/537269](http://crbug.com/537269))
-
-**==Problem==**:
-
-Chrome OS devices may require more than 15W of power, even in firmware. For
-security reasons, our EC does not attempt to negotiate a PD power contract until
-it has jumped to RW, so we are limited to pulling 15W (3A @ 5V) from a USB-C /
-PD charger in RO. In addition, we have no knowledge of how much power a PD
-charger may be able to deliver while in EC RO. Therefore, in order to guarantee
-that a device is able to boot successfully into Chrome OS, the system must have
-a minimum battery level before booting, even when a PD charger is attached.
-
-**==Samus==**:
-
-The solution implemented on Samus is to wait for 1% battery charge level before
-allowing power-on. If a high-power PD charger is attached, we’ll negotiate a
-sufficient power contract once jumping to EC RW, and the system will be usable
-indefinitely. If a low-power charger is attached, the 1% battery level should be
-enough to allow us to boot Chrome OS, see a low-power shutdown message, and
-automatically power down cleanly.
-
-[<img alt="image"
-src="/chromium-os/ec-development/usb-low-power-boot/samus_low_bat.png">](/chromium-os/ec-development/usb-low-power-boot/samus_low_bat.png)
-
-Samus uses a flashing red lightbar to notify the user that the device is waiting
-for sufficient battery charge to allow boot. Future PD-powered devices may not
-have such a lightbar.
-
-**==Future Improvement==**:
-
-Ideally we’d like to handle the most common user case (high-powered charger
-attached) without needless delay. Here is a proposed method to do so:
-
-* If the system has enough battery charge (defined as &gt;= 1% on
- Samus, but can be defined arbitrarily on other devices) then it will
- boot as normal, since any charger (or even no charger) will be
- sufficient to cleanly boot into Chrome OS and then cleanly shutdown.
-* If the system does not have enough battery charge and no charger is
- attached, the EC will disallow power on through inhibiting the power
- button. From the user POV, this is a “dead battery” case.
-* If a charger is attached, and the charger advertises &lt; 15W
- through its CC pullup, the EC will disallow power on through
- inhibiting the power button. The charger isn’t likely to speak PD,
- and isn’t likely to be able to provide &gt; 15W in any case.
-* If a charger is attached, and the charger advertises 15W through its
- CC pullup, the EC will set a limit power flag (“LP”) indicating that
- the system is in a low-battery + low-power charger state, and boot
- the AP.
-
-* If LP is set and the system is booting into recovery mode, the AP
- will power itself down. Recovery mode is never allowed to jump to EC
- RW.
-* If LP is set and the system is not booting into recovery mode, after
- SW sync and jump to EC RW, the AP will wait for some timeout period
- (3 sec) while polling LP. If the EC negotiates a sufficient PD power
- contract (perhaps &gt;= 30W, but should be adjusted by platform)
- while in EC RW, it will clear the LP flag.
-* If LP is cleared within the timeout period, the AP will boot as
- normal.
-* If LP is not cleared within the timeout period, the AP will shut
- itself down.
-
-This proposal can only be implemented if the device is able to power-on the AP
-through software sync completion while consuming &lt; 15W. In order to meet this
-requirement, devices may have to limit power through various means, such as
-disabling USB ports, asserting PROCHOT, etc.
-
-[<img alt="image"
-src="/chromium-os/ec-development/usb-low-power-boot/new_low_bat.png">](/chromium-os/ec-development/usb-low-power-boot/new_low_bat.png)
-
-**==Future Chromeboxes:==**
-
-Chromeboxes are a special case because they lack a battery. Such devices may
-never be able to boot a low-power charger. If we were to follow the method
-above, Chromeboxes would ==never== be able to boot into recovery mode. Thus, the
-following additional changes need to be made for batteryless devices:
-
-* If a charger is attached and the system is booting into
- user-triggered (not “broken” recovery mode) recovery mode, the EC
- will attempt to negotiate a PD contract from RO EC FW. If a
- sufficient contract is negotiated, the system will boot to recovery
- as normal. If not, the LP flag will be set.
-* If LP is set and the system is booting into recovery mode, the AP
- will notify the user of the broken condition by some method, such as
- blinking LEDs, or displaying the “broken” screen (power-allowing).
-
-We will assume that the charger attached for user-triggered recovery is
-trustable, and will provide instructions to users that they should use the OEM
-charger (power-cycled beforehand for extra paranoia) while booting in recovery
-mode for maximum security.
-
-**==Other Idea Considered (but rejected):==**
-
-* EC-RO does RSA-3072 verification of EC-RW and jumps to it without
- involvement of the AP, in case the charger is not sufficient to boot
- the AP at all (&lt; 15W). This idea was rejected, because a charger
- that advertises 2.5W - 7.5W isn’t likely to speak PD or be able to
- negotiate to provide &gt; 15W.
-* Display “low battery” firmware screen to notify the user that the
- battery isn’t sufficiently charged. This requires initializing the
- display, which may push system power usage above 15W. We can revisit
- this idea if we have power data that shows it is feasible.
-* Allow Chromeboxes (and other battery-less devices) to jump to do SW
- sync and then jump to EC RW while in recovery mode. If we’re
- flashing an EC RW image via SW sync in recovery mode, it must come
- from RO FW, so it’s presumably no different than the EC RO image.
- Therefore, this idea is no different than allowing PD communication
- from EC RO in recovery mode.
-* Have the AP determine LP status by checking the battery / charger
- state through various host commands, rather than relying upon a
- single memmap flag set by the EC. Though this would simplify
- implementation, it means that board-specific charge / power related
- constants (such as minimum power level sufficient to not set LP)
- would have to live somewhere in system FW.
-
-**==CLs:==**
-
-**<https://chromium-review.googlesource.com/#/c/306774/>**
-
-**<https://chromium-review.googlesource.com/#/c/307885/>**
-
-**<https://chromium-review.googlesource.com/#/c/307952/>** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/new_low_bat.png.sha1 b/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/new_low_bat.png.sha1
deleted file mode 100644
index b7c785b66b4..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/new_low_bat.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-261729938b0ccdfe888ccd85ca803f30db62add8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/samus_low_bat.png.sha1 b/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/samus_low_bat.png.sha1
deleted file mode 100644
index c046abb2871..00000000000
--- a/chromium/docs/website/site/chromium-os/ec-development/usb-low-power-boot/samus_low_bat.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5aef7162df1a1fdc096035ab4678f8288963ec33 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/external-bsp-hosting/index.md b/chromium/docs/website/site/chromium-os/external-bsp-hosting/index.md
deleted file mode 100644
index 59a7b1b7266..00000000000
--- a/chromium/docs/website/site/chromium-os/external-bsp-hosting/index.md
+++ /dev/null
@@ -1,365 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: external-bsp-hosting
-title: External BSP Hosting
----
-
-[TOC]
-
-## Introduction
-
-When any BSP developer wants to build their code with Chromium OS and have it
-easily shared with other developers, they currently typically have to commit
-their BSPs to either the public or private Chromium OS repositories and update
-the respective repo manifest files if necessary. In hosting their ebuilds in the
-Chromium OS repositories, however, they get tied into the [Chromium OS Commit
-Queue](/developers/tree-sheriffs/sheriff-details-chromium-os/commit-queue-overview)
-and code review process, which is not always ideal for them.
-
-### Local Manifests
-
-In order to pull in code hosted on an external git repository, developers can
-make use of local manifest files. Local manifest files allow more remotes and
-repositories to be specified for download in additional xml files without direct
-dependencies being specified in the main Chromium OS manifest files. Any number
-of local manifest files may be supplied, allowing developers to name and
-distribute their local manifest files for each project.
-
-After following the instructions for [getting the
-source](/chromium-os/developer-guide#TOC-Get-the-Source), create a
-“local_manifests” folder inside the .repo folder. Assuming like in the setup
-instructions that your source code is in ${HOME}/chromiumos, run the following
-commands:
-
-> `cd ${HOME}/chromiumos/.repo`
-
-> `mkdir local_manifests`
-
-Then, create or download any additional XML manifest files into the created
-folder and run \`repo sync\` to pull down the new code.
-
-### Manifest Format
-
-Local manifest files can have any name as long as they are of the .xml
-extension. Their format is the same as normal manifest files, and can be viewed
-[here](https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.txt).
-A simple example manifest file for pulling
-<http://github.com/chromiumos/foo.git> on branch “branchname” into
-src/private-overlays/overlay-foo-private:
-
-File: ${HOME}/chromiumos/.repo/local_manifests/foo.xml
-
-> `<?xml version="1.0" encoding="UTF-8"?>`
-
-> `<manifest>`
-
-> <remote name="github" fetch="https://github.com/" />`
-
-> <project path="src/private-overlays/overlay-foo-private" name="chromiumos/foo"
-> remote="github" revision="branchname"/>`
-
-> `</manifest>`
-
-## BSP Overlays
-
-This section is meant as a quick-start guide for the basics of setting up a BSP
-within an overlay, but doesn't fully cover creating the overlay itself. The
-basics of setting up an overlay can be found in the [Board Porting
-guide](/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide).
-Even with board and BSP code hosted in an external repository, the board name
-still has to be added to the cros-board.eclass file. Also, for brevity,
-copyright headers have been left out of these sample templates, but should be
-added in all ebuild files in whatever format is correct for your organization.
-
-make.conf
-
-> This file contains several [key
-> settings](/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide#TOC-make.conf:-Global-Build-Settings)
-> for kernel configurations, such as the architecture, config, and tune. The key
-> fields are:
-
-> * CHROMEOS_KERNEL_CONFIG - the kernel configuration file to use. The
- path is relative to the kernel source checkout. Setting this
- overrides any use of CHROMEOS_KERNEL_SPLITCONFIG.
-> * CHROMEOS_KERNEL_SPLITCONFIG - the kernel splitconfig to use.
- Splitconfigs can be used instead of a full config. For details on
- splitconfigs, see
- [here](/chromium-os/how-tos-and-troubleshooting/kernel-configuration).
-> * MARCH_TUNE - The common set of compiler flags used to optimize for
- your processor.
-> * CFLAGS, CXXFLAGS - The compiler flags to use when building the
- code.
-> * USE - use flags to set. When using splitconfigs, for example,
- providing the ‘nowerror’ flag disables treating warnings as
- errors.
-
-> For an example MIPS board, the make.conf would look something like:
-
-> > `CHROMEOS_KERNEL_CONFIG="arch/mips/configs/ci20_defconfig"`
-
-> > `CHROMEOS_KERNEL_ARCH="mips"`
-
-> > `# We assume that we are running a little endian 32bit MIPS CPU. If you
-> > have`
-
-> > `# a MIPS64 CPU, then you really should be using the n32 overlay instead.`
-
-> > `MARCH_TUNE="-march=mips32"`
-
-> > `CFLAGS="${CFLAGS} ${MARCH_TUNE}"`
-
-> > `CXXFLAGS="${CXXFLAGS} ${MARCH_TUNE}"`
-
-> > `# Kernel doesn't yet build cleanly.`
-
-> > `USE="${USE} nowerror"`
-
-### Kernel
-
-The following files are required for customizing the kernel source, build, or
-install.
-
-virtual/linux-sources/linux-sources-2.ebuild
-
-> `EAPI="6"`
-> `DESCRIPTION="Chrome OS Kernel virtual package"`
-> `HOMEPAGE="http://src.chromium.org"`
-> `LICENSE="GPL-2"`
-> `SLOT="0"`
-> `KEYWORDS="mips"`
-> `IUSE="-kernel_sources"`
-> `RDEPEND="`
-> sys-kernel/<kernel_name>[kernel_sources=]`
-> `"`
-
- Replace the KEYWORDS value with the correct platform
-
- Replace the LICENSE value with your license
-
- Replace “&lt;kernel_name&gt;” in the RDEPEND field with the name of your
- kernel package, such as “ci20-kernel”
-
-sys-kernel/&lt;kernel_name&gt;/&lt;kernel_name&gt;-&lt;version&gt;.ebuild
-
-sys-kernel/&lt;kernel_name&gt;/&lt;kernel_name&gt;-&lt;version&gt;-r1.ebuild
-
-> `EAPI="6"`
-> `CROS_WORKON_REPO="<git_repo_path>"`
-> `CROS_WORKON_PROJECT="<git_repo_name>"`
-> `CROS_WORKON_BLACKLIST="1"`
-> `CROS_WORKON_COMMIT="<git_commit_hash>"`
-> `# This must be inherited *after* EGIT/CROS_WORKON variables defined`
-> `inherit git-2 cros-kernel2 cros-workon`
-> `DESCRIPTION="Chrome OS Kernel-<kernel_name>"`
-> `KEYWORDS="mips"`
-> `DEPEND="!sys-kernel/chromeos-kernel-next`
-> !sys-kernel/chromeos-kernel`
-> `"`
-> `RDEPEND="${DEPEND}"`
-
- Replace “&lt;kernel_name&gt;” with the name of your kernel package, as
- specified in the RDEPEND field of the linux-sources-2.ebuild file
-
- Replace the KEYWORDS value with the correct platform
-
- The ‘&lt;kernel_name&gt;-&lt;version&gt;-r1.ebuild’ file is just a symbolic
- link to the ‘&lt;kernel_name&gt;-&lt;version&gt;.ebuild’ file. Whenever
- changes are made to the ebuild file, the symlink should be
- revbumped/renamed, for instance incrementing ‘-r1’ to ‘-r2’.
-
- &lt;version&gt; should be the version number, for instance “3.0.8”
-
- &lt;git_repo_path&gt; is the git repository path, such as
- “git://github.com/MIPS”
-
- &lt;git_repo_name&gt; is the git repository name, such as “CI20_linux”. This
- field is prepended with &lt;git_repo_path&gt; when referring to a repository
- location.
-
- &lt;git_commit_hash&gt; is the hash of the git commit to use. For instance,
- on the CI20_linux repo, “2e5af7d6650ce6435f2894bdd7ee7f0333950942” would
- refer to the head of the 3.0.8 branch
- (<https://github.com/MIPS/CI20_linux/tree/ci20-v3.0.8>)
-
- By default, this builds the Makefile’s “vmlinuz.bin” target for mips, uImage
- for arm, and uses the default target for everything else
-
- For customizing the build process, the following functions can be added to
- the ebuild:
-
- src_prepare() { }
-
- [Preparation](https://devmanual.gentoo.org/ebuild-writing/functions/src_prepare/index.html)
- of the source, such as applying patches
-
- src_configure() { }
-
- [Configuring](https://devmanual.gentoo.org/ebuild-writing/functions/src_configure/index.html)
- the source
-
- src_compile() { }
-
- [Compiling](https://devmanual.gentoo.org/ebuild-writing/functions/src_compile/index.html)
- the source, i.e. calling make or emake.
-
- src_test() { }
-
- [Run](https://devmanual.gentoo.org/ebuild-writing/functions/src_test/index.html)
- pre-install test scripts
-
- src_install() { }
-
- [Install](https://devmanual.gentoo.org/ebuild-writing/functions/src_install/index.html)
- the package
-
-### Firmware
-
-The following files are required for customizing the firmware to install.
-
-virtual/chromeos-firmware/chromeos-firmware-2.ebuild
-
-> `EAPI="6"`
-> `DESCRIPTION="Chrome OS Firmware virtual package"`
-> `HOMEPAGE="`[`http://src.chromium.org`](http://src.chromium.org/)`"`
-> `LICENSE="BSD"`
-> `SLOT="0"`
-> `KEYWORDS="arm"`
-> `IUSE=""`
-> `RDEPEND="chromeos-base/chromeos-firmware-<name>"`
-
- Replace the LICENSE value with your correct license
-
- Replace the KEYWORDS field with your board’s architecture (arm, mips, ppc,
- x86, etc)
-
- Replace &lt;name&gt; with the name of your board
-
-chromeos-base/chromeos-firmware-&lt;name&gt;/chromeos-firmware-&lt;name&gt;-&lt;version&gt;.ebuild
-
-chromeos-base/chromeos-firmware-&lt;name&gt;/chromeos-firmware-&lt;name&gt;-&lt;version&gt;-r1.ebuild
-
-> `EAPI="6"`
-> `CROS_WORKON_REPO="<git_repo_path>"`
-> `CROS_WORKON_PROJECT="<git_repo_name>"`
-> `CROS_WORKON_BLACKLIST="1"`
-> `CROS_WORKON_COMMIT="<git_commit_hash>"`
-> `inherit git-2 cros-workon`
-> `DESCRIPTION="Chrome OS Firmware"`
-> `KEYWORDS="mips"`
-
- Replace the KEYWORDS value with the correct platform
-
- The ‘chromeos-firmware-&lt;name&gt;-&lt;version&gt;-r1.ebuild’ file is just
- a symbolic link to the
- ‘chromeos-firmware-&lt;name&gt;-&lt;version&gt;.ebuild’ file. Whenever
- changes are made to the ebuild file, the symlink should be
- revbumped/renamed, for instance incrementing ‘-r1’ to ‘-r2’.
-
- &lt;version&gt; should be the version number, for instance “2015.03.05” for
- the revision date for repos that do not have branched versions
-
- &lt;git_repo_path&gt; is the git repository path, such as
- “git://github.com/raspberrypi”
-
- &lt;git_repo_name&gt; is the git repository name, such as “firmware”. This
- field is prepended with &lt;git_repo_path&gt; when referring to a repository
- location.
-
- &lt;git_commit_hash&gt; is the hash of the git commit to use. For instance,
- on the raspberrypi/firmware repo, “cdcb50646bc035e9f3e74b99d764023c4b98d7d5”
- would refer to the current head of the master branch
- (https://github.com/raspberrypi/firmware/tree/master)
-
- By default, this builds and installs the Makefile’s default target
-
- For customizing the build process, the following functions can be added to
- the ebuild:
-
- src_prepare() { }
-
- [Preparation](https://devmanual.gentoo.org/ebuild-writing/functions/src_prepare/index.html)
- of the source, such as applying patches
-
- src_configure() { }
-
- [Configuring](https://devmanual.gentoo.org/ebuild-writing/functions/src_configure/index.html)
- the source
-
- src_compile() { }
-
- [Compiling](https://devmanual.gentoo.org/ebuild-writing/functions/src_compile/index.html)
- the source, i.e. calling make or emake.
-
- src_test() { }
-
- [Run](https://devmanual.gentoo.org/ebuild-writing/functions/src_test/index.html)
- pre-install test scripts
-
- src_install() { }
-
- [Install](https://devmanual.gentoo.org/ebuild-writing/functions/src_install/index.html)
- the package
-
-### Board Specific Packages
-
-The following files are required for adding any specific drivers and tools to a
-board.
-
-virtual/chromeos-bsp/chromeos-bsp-2.ebuild
-
-> `EAPI="6"`
-> `DESCRIPTION="Chrome OS BSP virtual package"`
-> `HOMEPAGE="`[`http://src.chromium.org`](http://src.chromium.org/)`"`
-> `LICENSE="BSD"`
-> `SLOT="0"`
-> `KEYWORDS="arm"`
-> `RDEPEND="chromeos-base/chromeos-bsp-<name>"`
-
- Replace the LICENSE value with your correct license
-
- Replace the KEYWORDS field with your board’s architecture (arm, mips, ppc,
- x86, etc)
-
- Replace &lt;name&gt; with the name of your board
-
-*chromeos-base/chromeos-bsp-&lt;name&gt;/chromeos-bsp-&lt;name&gt;-0.0.1.ebuild*
-
-*chromeos-base/chromeos-bsp-&lt;name&gt;/chromeos-bsp-&lt;name&gt;-0.0.1-r1.ebuild*
-
-> `EAPI="6"`
-> `DESCRIPTION="<name> bsp (meta package to pull in driver/tool dependencies)"`
-> `LICENSE="BSD-Google"`
-> `SLOT="0"`
-> `KEYWORDS="arm"`
-> `IUSE=""`
-> `DEPEND=""`
-> `RDEPEND=""`
-
- Replace the LICENSE value with your correct license
-
- Replace the KEYWORDS field with your board’s architecture (arm, mips, ppc,
- x86, etc)
-
- Replace &lt;name&gt; with the name of your board
-
- The ‘chromeos-bsp-&lt;name&gt;-0.0.1-r1.ebuild’ file is just a symbolic link
- to the ‘chromeos-bsp-&lt;name&gt;-0.0.1.ebuild’ file. Whenever changes are
- made to the ebuild file, the symlink should be revbumped/renamed, for
- instance incrementing ‘-r1’ to ‘-r2’.
-
- Adding any packages that currently have ebuilds in the source tree should be
- added to the DEPEND and RDEPEND fields. The DEPEND field specifies
- build-time dependencies that will not be installed into the build image. The
- RDEPEND field specifies run-time dependencies that will be installed into
- the build image.
-
- Other source can be built and installed by adding
- [src_prepare](https://devmanual.gentoo.org/ebuild-writing/functions/src_prepare/index.html)(),
- [src_configure](https://devmanual.gentoo.org/ebuild-writing/functions/src_configure/index.html)(),
- [src_compile](https://devmanual.gentoo.org/ebuild-writing/functions/src_compile/index.html)(),
- [src_test](https://devmanual.gentoo.org/ebuild-writing/functions/src_test/index.html)(),
- and
- [src_install](https://devmanual.gentoo.org/ebuild-writing/functions/src_install/index.html)()
- functions to do the respective work.
diff --git a/chromium/docs/website/site/chromium-os/extracting-a-recovery-kernel-from-a-recovery-image/index.md b/chromium/docs/website/site/chromium-os/extracting-a-recovery-kernel-from-a-recovery-image/index.md
deleted file mode 100644
index 5b61390d4ab..00000000000
--- a/chromium/docs/website/site/chromium-os/extracting-a-recovery-kernel-from-a-recovery-image/index.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: extracting-a-recovery-kernel-from-a-recovery-image
-title: Extracting a Recovery Kernel from a Recovery Image
----
-
-## If you need to generate a recovery image, use "mod_image_for_recovery.sh --image &lt;image_file&gt;".
-
-## &lt;Outdated instructions needed for a few special case CR-48 Users&gt;
-
-## Intro
-
-If you find yourself in the need of an officially signed Recovery Kernel, but
-you only have an officially signed Recovery Image: you're in luck! You've come
-to the right place.
-
-What are Recovery Images and Recovery Kernels?
-
-* A **Recovery Image** is an image that can be placed onto a USB disk
- that can boot a particular Chrome OS Notebook and reinstall the
- default software onto the computer, putting it into a known good
- state. Instructions for getting a Recovery Image are usually
- provided by the manufacturer of a Chrome OS Notebook.
-* A **Recovery Kernel** is a small part of the the Recovery Image that
- can be extracted, then used for installing a custom build of the OS.
- Sometimes a manufacturer will provide a separate download of the
- Recovery Kernel as a convenience.
-
-What does it mean for a Recovery Kernel to be officially signed? It means that
-it was built by someone (like your device manufacturer) with access to your
-device's secret recovery key. That means that your device will allow booting
-from this Recovery Kernel. **NOTE**: every hardware product has a different
-secret recovery key, so you need to obtain an official Recovery Kernel that is
-specific to your product.
-
-...you might have read about the Recovery Kernel in such places as the [Poking
-around your Chrome OS
-Notebook](/chromium-os/poking-around-your-chrome-os-device) page or the
-[Chromium OS Developer Guide](/chromium-os/developer-guide).
-
-## Get an officially-signed Recovery Image
-
-These steps are going to be different for every piece of hardware. However, just
-to be illustrative, here are the steps for the Cr-48 Chrome Notebook:
-
-```none
-mkdir -p ~/trunk/recovery
-curl -L 'https://dl.google.com/dl/chromeos/recovery/latest_mario_beta_channel' > ~/trunk/recovery/recovery_image.zip
-TMPDIR=`mktemp -d`
-unzip ~/trunk/recovery/recovery_image.zip -d ${TMPDIR}
-RECOVERY_IMAGE=`ls ${TMPDIR}/*.bin`
-```
-
-Future steps will assume that you've put the recovery image into the
-`RECOVERY_IMAGE` variable (as the above instructions do).
-
-## Extract the Recovery Kernel
-
-The easiest way to do this is if you've already followed the instructions in the
-[Chromium OS Developer Guide](/chromium-os/developer-guide) and are running from
-within the chroot. In that case, you'll have already the `cgpt` tool. That means
-you can follow the generic instructions. In that case, the instructions are:
-
-```none
-KERNA_START=`cgpt show -b ${RECOVERY_IMAGE} | grep KERN-A | awk '{print $1}'`
-KERNA_SIZE=`cgpt show -b ${RECOVERY_IMAGE} | grep KERN-A | awk '{print $2}'`
-mkdir -p ~/trunk/recovery/
-RECOVERY_KERNEL=~/trunk/recovery/recovery_kernel.bin
-dd of=${RECOVERY_KERNEL} if=${RECOVERY_IMAGE} \
-   bs=512 count=${KERNA_SIZE} skip=${KERNA_START}
-```
-
-If you aren't running from the chroot, most of the commands above are still
-valid. You'll just have to figure out your own `KERNA_START` and `KERNA_SIZE`.
-At the moment, this document doesn't have the instructions for that (sorry!).
-However with current images, you could actually just do:
-
-```none
-KERNA_START=4096
-KERNA_SIZE=32768
-```
-
-...and be done with it. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/index.md b/chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/index.md
deleted file mode 100644
index c3c51d258f3..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/index.md
+++ /dev/null
@@ -1,337 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/firmware-porting-guide
- - Firmware Overview and Porting Guide
-page_name: 1-overview
-title: 1. Overview of the Porting Process
----
-
-[TOC]
-
-## Basic Tasks
-
-U-Boot is a highly portable boot loader, supporting many high-end ARM SoCs. It
-contains a vast array of features and drivers to help speed up the porting
-process. When porting U-Boot to a new board, follow these basic steps:
-
-1. Add support for your SoC. U-Boot supports many common SoCs, and in
- many cases, a new SoC is a variant of an existing one that can serve
- as a starting point for the port.
-2. Add a board configuration file and a board implementation file
- containing code specific to your board.
-3. Add or modify any drivers you need for your platform.
-4. Bring in the kernel device tree file if available (or write a new
- device tree).
-
-This guide describes these steps in some detail, with a focus on Chrome
-OS-specific implementations.
-
-Note: The following information was written for Tegra in 2011 and is somewhat
-out of date.
-
-## Development Flow
-
-Chromium OS uses U-Boot as its boot loader on ARM and x86. This page describes
-the development flow, requirements for commits submitted to the project,
-upstreaming responsibilities and Chromium OS-specific features.
-
-Before reading this document, please see <http://www.denx.de/wiki/U-Boot> and at
-the very least, read:
-
-* <http://www.denx.de/wiki/U-Boot/DesignPrinciples>
-* <http://www.denx.de/wiki/U-Boot/CodingStyle>
-* <http://www.denx.de/wiki/U-Boot/Patches>
-* and check out the U-Boot mailing list
-
-Except during a rebase period, Chromium OS has a single U-Boot repository,
-called ‘u-boot.git’, containing all U-Boot source code. There is no
-split between different SOCs, no split for Chromium OS-specific code, no split
-at all. We deal with the different types of commits using commit tags.
-
-### Commits
-
-* Formalized commit structure rules (see ‘Commit Rules’ below)
-* All Chromium OS source is in its own subdirectory (see ‘Chromium
- Source Subdirectory’ below)
-* Encourage compliance with pre-submit checks and reverts
-* Tag every commit to indicate its intended destination
-* Each commit must be producing a source tree which builds and runs
- (bisectability)
-
-### Upstreaming
-
-We plan to upstream most or all of our code. Any code that you write will likely
-either be dropped or sent upstream. Please consider when writing code that it
-should fit with U-Boot conventions
-Let’s call the person who is upstreaming a particular feature the ‘canoe
-captain’.
-
-* The canoe captain (with upstreaming responsibility) lies with:
- * Committer for patches against upstream code
- * SOC Vendor for patches against vendor code
-* Clearly mark commits that are destined for upstream according to
- destination
-* Open an ‘upstream needed’ tracking bug when you begin upstreaming
- work. There should be one bug per group of related commits. For
- example ‘upstream I2C driver for Tegra’.
-* **Patches should be sent upstream within one month**
-* Canoe captain is responsible for rebasing those commits which are
- not upstream
-* Code should be accepted upstream in the next merge cycle (i.e.
- within 3 months)
-* Should upstream activity produce the need to adjust or rewrite the
- commit, then this responsibility lies with the canoe captain.
-
-### Code Review
-
-* Add 2-3 reviewers, including 1-2 original code authors
- * For vendor code, at least one reviewer or the author should be
- with the vendor company
- * At least one reviewer should be a Chromium OS U-Boot committer
- * Vendor code requires an LGTM from the both types of reviewers;
- other code just needs an LGTM from the latter
-* Please first carefully check you have followed the rules on commit
- tags, BUG and TEST
-* Initial reviews should be completed within one day during the
- working week
- * If not possible, then please add a comment to the commit letting
- the author know there will be a delay, and offer an alternative
-* Rebases and minor don’t need a fresh LGTM. So if you get an LGTM on
- patch 3, and just fix requested nits or do a rebase to get patch 4,
- you can push it.
-
-### Code Refactors
-
-* We encourage discussion of planned refactors using the issue tracker
- (crbug.com). Those which are in upstream code should be discussed on
- the U-Boot mailing list
-
-### Testing
-
-Most testing is currently manual. It is important that people can repeat your
-test steps later without a deep knowledge of your environment, board, commit and
-mind.
-
-You may find the
-[crosfw](/chromium-os/firmware-porting-guide/1-overview/the-crosfw-script)
-script useful for building and testing U-Boot.
-
-**Mandatory testing:**
-
-* **Build and boot** through to kernel (verified or non-verified) on
- your chosen hardware
- * Check that you change has not affected operation of peripherals
- related to your change
- * Add a note that you did this (and the result) in your TEST=
- description (see below)
-* If you change modifies code accessible from another architecture,
- **build** for that architecture too
- * So if your chosen hardware is ARM, but you are not changing
- ARM-specific code, you should build for x86
- * Add a note about this to TEST=
-
-Suggested testing:
-
-* If changing generic code, you should ensure that U-Boot continues to
- build for all targets (run MAKEALL)
- * Add a note about this to TEST=
-
-### Commit Tags
-
-All commits should have exactly one tag from the following table at the start of
-the subject line. The tag indicates the intended destination for the commit.
-Note that standard upstream commit tags are encouraged also (i2c, usb, net, lcd,
-spi) and these follow the primary tag. Tags are always lower case.
-
-Commits cannot normally span more than one of the paths below, so commits in
-multiple areas must be split into different commits. The idea to keep in mind is
-that this is like having separate repositories, but with less admin/productivity
-overhead.
-
-Where a change requires that (say) Chromium, Tegra and Samsung code must change
-at the same time to avoid a build breakage, the ‘split’ tag should be used
-first, and the rest in alphabetical order as in ‘split: chromium: exynos: tegra:
-fiddle with something’.
-
-<table>
-<tr>
-<td><b>Tag:</b></td>
-<td><b>Meaning</b></td>
-<td><b>Canoe Captain</b></td>
-<td><b>Path</b></td>
-</tr>
-<tr>
-<td>cros:</td>
-<td>Local patches, will not conceivably go upstream. Use for verified boot mainly</td>
-<td>-</td>
-<td>cros/</td>
-</tr>
-<tr>
-<td>tegra:</td>
-<td>Tegra SOC, board and driver code</td>
-<td>Nvidia</td>
-<td>arch/arm/cpu/armv7/tegra\*/</td>
-<td> board/nvidia/</td>
-<td> drivers/</td>
-</tr>
-<tr>
-<td>exynos:</td>
-<td>Samsung SOC, board and driver code</td>
-<td>Samsung</td>
-<td>arch/arm/cpu/armv7/exynos\*/</td>
-<td> board/samsung/</td>
-<td> drivers/</td>
-</tr>
-<tr>
-<td>arm:</td>
-<td>ARM-generic patches, committer mans the canoe</td>
-<td>Committer</td>
-<td>arch/arm</td>
-<td> (but not in an soc subdir)</td>
-</tr>
-<tr>
-<td>x86:</td>
-<td>x86-generic patches, committer mans the canoe</td>
-<td>Committer</td>
-</tr>
-<tr>
-<td>upstream:</td>
-<td>Pulled in from upstream</td>
-<td>-</td>
-<td>any</td>
-</tr>
-<tr>
-<td>drop:</td>
-<td>Urgent / unclean / factory patches which we will drop on next rebase</td>
-<td>-</td>
-<td>any</td>
-</tr>
-<tr>
-<td>split:</td>
-<td>Indicates a commit which must be split to send upstream</td>
-</tr>
-<tr>
-<td>gen:</td>
-<td>Generic (not architecture-specific) commit which should go upstream</td>
-<td>Committer</td>
-<td>any. Note that when sending upstream this tag is dropped</td>
-</tr>
-<tr>
-<td> config:</td>
-<td> Change to a board configuration file</td>
-<td> -</td>
-<td> include/configs/</td>
-</tr>
-</table>
-
-#### Pre-upload Checks
-
-Before uploading a commit for review, please do the following checks:
-
-* The commit is ‘checkpatch’ clean (repo upload checks this)
-* The commit has tags indicated its upstream destination
-* The commit has a valid bug referenced, by a tag on a line by itself
-* The commit has a valid test case.
-
-### BUG=
-
-* For public bugs: BUG=chromium-os:12435
-* For private bugs: BUG=chrome-os-partner:1234
-* It is possible to use BUG=none in some cases. We should use this
- rarely. Examples where is it useful are when:
- * The commit is a small clean-up not related to a particular
- subsystem. Examples are fixing a comment or code style
- * The commit fixes compilation warnings
-* In most other cases, if you cannot find a bug to reference, you
- should file a new public bug and reference that.
-
-### TEST=
-
-This should be detailed enough that another person without particular knowledge
-of your code can run the procedure you detail, and verify your commit. The
-information should specific. Examples are:
-
-* TEST=build and run on daisy; run ‘bootp’ command, see that it finds
- an IP address
-* TEST=manual
- . after enabling configuration necessary for this code to compile
- in, added a printout statement in main.c to report the clock
- frequency and to print a few strings at get_tbclk() tick
- intervals. The clock frequency was correctly reported at 1800 MHz
- and the printouts came out one second apart.
-* TEST=boot from SD card; run sd_to_spi; see that it completes; then
- boot from
- SPI and see that the U-Boot timestamp is correct.
-* TEST=build okay and boot on Daisy
-
-Some bad examples of test information are:
-
-* TEST=tested on daisy (how? need detail on what was done and what
- result as obtained)
-* TEST=none (surely you are least built it, did you run it on any
- board?)
-* TEST=verified that it worked well (how?)
-
-### Chromium Source Subdirectory
-
-Our local code commits can be broken into several areas, but almost all code is
-in a ‘cros/’ subdirectory. Here is the current split:
-
-<table>
-<tr>
-<td><b>Directory</b></td>
-<td><b>Used for</b></td>
-<td><b>Previously</b></td>
-</tr>
-<tr>
-<td>cros/</td>
-<td>All Chromium OS commits</td>
-<td>Various</td>
-</tr>
-<tr>
-<td>cros/tegra</td>
-<td>Implementation of Chrome OS low-level API on Tegra SOCs</td>
-<td>board/nvidia/chromeos</td>
-</tr>
-<tr>
-<td>cros/exynos</td>
-<td>Implementation of Chrome OS low-level API on Exynos SOCs</td>
-<td>-</td>
-</tr>
-<tr>
-<td>cros/coreboot</td>
-<td>Implementation of Chrome OS low-level API on Coreboot</td>
-<td>board/chromebook-x86/chromeos</td>
-</tr>
-<tr>
-<td>cros/lib</td>
-<td>Chrome OS library functions</td>
-<td>lib/chromeos</td>
-</tr>
-<tr>
-<td>cros/vboot</td>
-<td>Verified boot exported functions</td>
-<td>lib/vbexport</td>
-</tr>
-<tr>
-<td>cros/cmd</td>
-<td>Chrome OS commands</td>
-<td>common/cmd_....c</td>
-</tr>
-<tr>
-<td>cros/include</td>
-<td>Chrome OS headers</td>
-<td>include/chromeos</td>
-</tr>
-</table>
-
-### Other sections in the U-Boot Porting Guide
-
-1. [Overview of the Porting
-Process](/chromium-os/firmware-porting-guide/1-overview) (this page)
-
-2. [Concepts](/chromium-os/firmware-porting-guide/2-concepts)
-
-3. [U-Boot Drivers](/chromium-os/firmware-porting-guide/u-boot-drivers) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/the-crosfw-script/index.md b/chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/the-crosfw-script/index.md
deleted file mode 100644
index 23629388f9c..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/1-overview/the-crosfw-script/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/firmware-porting-guide
- - Firmware Overview and Porting Guide
-- - /chromium-os/firmware-porting-guide/1-overview
- - 1. Overview of the Porting Process
-page_name: the-crosfw-script
-title: The crosfw script
----
-
-## Firmware build/test script
-
-crosfw is a python script which automates many of the tasks involved in building
-and testing firmware. It includes the following features:
-
-* Build U-Boot for any board (Chrome OS or upstream)
-* Create a boot image with or without verified boot feature built in
-* Configure boot image to enable console output, secure more,
- read-write (two-stop) mode, etc.
-* Write firmware image to board using USB A-A, SD card or Dediprog
- EM100.
-* Optionally write a magic flasher to flash the image to SPI or MMC
-* Various other options like disassembly, image size, U-Boot execution
- trace support, and so on
-* For ARM and x86 it can be used outside the chroot if you have a
- suitable Linaro toolchain
-* Supports multiple connected [servo boards](/chromium-os/servo) (with
- USB A-A / EM100) and writing firmware automatically to the correct
- one
-
-Best of all, crosfw does not spam you with 800KB of build output, thus making it
-possible for you to see the warnings/errors.
-
-crosfw is roughly parallel to using chromeos-u-boot and chromeos-bootimage and
-these must have been preivously emerged in order to use crosfw.
-
-## Why use the script?
-
-* Fast and reliable building, testing and flashing of firmware on any
- Chrome OS-supported device (snow, link, pit, spring, puppy)
-* Supports building without verified boot, and a 'small' image, which
- is must faster to load/flash than the full image - this means faster
- development when initially bringing up a platform
-
-## How to use the script?
-
-To build U-Boot with verified boot for pit, create and image and download over
-USB A-A:
-
-```none
-$ crosfw -b peach_pit -V
-```
-
-Same, but download a magic flasher and flash the SPI
-
-```none
-$ crosfw -b peach_pit -VF
-```
-
-Mimic chromeos-bootimage and create and flash a secure image with silent
-console:
-
-```none
-$ crosfw -b peach_pit -VFSC
-```
-
-You can build sandbox with:
-
-```none
-$ crosfw -b sandbox -w
-```
-
-You can also build any upstream config. The output files are in directory
-/tmp/crosfw for easy access and you can set a variable in your ~/.crosfw file to
-change this. You can also use -a to pass options to cros_bundle_firmware, and -h
-to get help.
-
-## Can I rely on this script for testing?
-
-You can develop with this script, but before submitting CLs you must test with
-the ebuild system. This script does not necessary track changes there
-
-and so inconsistencies may develop over time.
-
-WARNING: Always emerge and test chromeos-u-boot and chromeos-bootimage before
-submitting U-Boot CLs to gerrit! \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/Verified Boot Flow.png.sha1 b/chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/Verified Boot Flow.png.sha1
deleted file mode 100644
index f00a5e5d8d4..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/Verified Boot Flow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2a05f2916ebb99b6292ba627a03c584d1b587b06 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/index.md b/chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/index.md
deleted file mode 100644
index 96bb837be15..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/2-concepts/index.md
+++ /dev/null
@@ -1,347 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/firmware-porting-guide
- - Firmware Overview and Porting Guide
-page_name: 2-concepts
-title: 2. Concepts
----
-
-[TOC]
-
-## Firmware Image
-
-The Chrome OS firmware image has two main sections: Read-Only (RO) and
-Read-Write (RW). The RO firmware is set at the factory and cannot be updated
-after manufacturing. The RW firmware can be updated during Chrome OS auto-update
-(AU).
-
-If a problem is found in RO firmware, Google creates an update and places it in
-the RW firmware. During the boot process, the RO firmware checks whether there
-is an update in the RW section and, if so, jumps to the RW update to execute the
-new boot code.
-
-The RO firmware contains the following code:
-
-* U-Boot, including the device tree for this system
-* On x86 systems: coreboot
-* Google Binary Block (GBB), which contains the following:
- * Recovery screen images
- * Public keys needed to verify the RW firmware
-* Firmware ID (a string with the version number and device type)
-
-The RW firmware contains two sections: A and B. Each section contains the
-following:
-
-* U-Boot, including the device tree for this system (identical to the
- U-Boot images in RO firmware)
-* VBlock, which contains the signatures used to verify the kernel
- before loading and running it
-* Firmware ID
-* Embedded Controller image
-* [Fmap](/chromium-os/firmware-porting-guide/fmap), a data structure
- that describes the layout and contents of the SPI Flash. This
- structure is required by the Flashrom tool.
-
-On an ARM Samsung Chromebook (Snow), the firmware is 4MB: 2 MB for RO firmware
-and 2MB for RW firmware. On a Chromebook Pixel (Link), the firmware is 8 MB: 2
-MB for coreboot and RO firmware (protected by the
-
-write-protect line), 2 MB for Intel ME firmware (protected by Intel-specific
-mechanisms), and 4 MB for RW firmware.
-
-## Bundled Firmware
-
-The cros_bundle_firmware tool is a Python script that uses a set of supplied
-binary files and a description of the flashmap layout and creates a firmware
-image. When you run the emerge Chrome OS bootimage command, the
-cros_bundle_firmware tool runs twice: once to create a verified boot image and a
-second time to create a nonverified boot image for development.
-
-## Firmware Development
-
-This section provides practical tips on firmware development.
-
-### USB firmware download
-
-Commonly, APs support booting from many devices--for example, eMMC, an SD card,
-serial device. The AP can also act as a USB device to which a connected PC can
-send the boot software. This technique is widely used in Chrome OS for firmware
-development and test, since it allows the system to boot with the new software
-in a few seconds.
-
-Following a special procedure, you can reset the AP in a special mode where it
-waits for the boot software to be sent over USB. x86 platforms typically do not
-implement this feature, but it is commonly found on ARM processors. If
-available, this is the primary method of loading firmware in the development
-phase. Typical steps for loading firmware using a USB connection are as follows:
-
-1. Connect your workstation via USB to the Chrome OS AP.
-2. Press the magic button or special key combination on the PC to start
- the process. (This step can be automated on some platforms.)
-3. The AP waits for the boot loader to be sent over the USB connection.
-4. Type the command cros_write_firmware -w usb to send the firmware
- over the wire.
-5. The AP boots using the new software.
-
-### Device Firmware Update (DFU)
-
-Device Firmware Update (DFU) is a new feature in U-Boot that allows you to send
-new firmware to a running U-Boot device over a USB cable. To enable this
-feature, specify the following config options for the U-Boot driver:
-
-* CONFIG_CMD_DFU - turns on the command so that you can type it
-* CONFIG_DFU_FUNCTION - turns on the ability to accept the new
- firmware
-
-This feature allows Chromebooks to update themselves while the Chromebook is
-paused at a U-Boot prompt. It is also useful when the AP does not support USB
-firmware download.
-
-## Verified Boot
-
-The first few steps are slightly different, depending on whether the system has
-an ARM processor or an x86 processor.
-
-### Startup Initialization
-
-On ARM systems:
-
-1. An ARM system may have a chip-specific initialization routine. For
- example, The Samsung Exynos processor has a BL1 signed image.
-2. The Secondary Program Loaderder (SPL) sets up memory, loads U-Boot
- into memory, and runs it.
-
-On x86 systems:
-
-1. The system runs Coreboot. This program functions similarly to the
- SPL on ARM systems.
-2. Coreboot sets up memory, then loads and runs U-Boot.
-
-### U-Boot and Embedded Controller
-
-U-Boot performs the device initialization for the system, as follows:
-
-1. U-Boot calls the VbInit() function to start verified boot.
-2. In the simplest case, the boot consists of one step: running the
- code located in the Read-Only (RO) section of the firmware. During
- this process, U-Boot checks whether there are any updates in the
- Read/Write (RW) section of the firmware. If updates are present,
- U-Boot loads and runs RW firmware.
-3. The main firmware performs a software sync that checks whether the
- EC code needs to be updated. If so, the update is sent over I2C,
- SPI, or LPC to the EC.
-4. Once the EC code has been sync’ed, execution jumps to the EC code in
- the RW firmware.
-5. The kernel is loaded and verified.
-6. The correct device tree file is selected for the system (ARM only).
-7. In addition, the kernel contains command line information that
- U-Boot picks up and passes to the kernel for use during boot. The
- command line tells the kernel which device to boot from (eMMC, SD,
- USB) and also contains the Verity parameters that are passed in to
- the kernel at boot time.
-8. The system boots the kernel, which uses the root hash (contained in
- the Verity parameters) to open the root filesystem.
-9. The system initializes user space and runs X and Chrome.
-
-![Verified boot flow](/chromium-os/firmware-porting-guide/2-concepts/Verified%20Boot%20Flow.png)
-
-### Recovery Mode
-
-If the system encounters an error during verified boot--for example, the RW
-image doesn’t verify, the kernel is corrupt, or the signatures don’t match, the
-system enters recovery mode. The SPI Flash has a minimum version of the firmware
-and kernel that be used to boot the system when normal boot mode fails. In
-recovery mode, the system remains in the RO portion of the firmware and displays
-a screen that asks the user to insert recovery media to recover the system. The
-kernel and the root disk used for recovery are signed by Google.
-
-### Developer Mode
-
-A user can also select developer mode, which allows an unsigned kernel to be
-loaded. In this mode, verified boot is turned off so that the user can load
-experimental kernels for testing purposes.
-
-## Keys and Signing
-
-Cryptographic keys are inserted into the boot software by the signer program.
-The signer inserts three types of keys:
-
-* Developer keys - public keys that anyone can use
-* Mass production (MP) keys - secret keys
-* Recovery keys - also secret and used by Google in recovery software
- images
-
-**Code for the signer is found in the src/platform/vboot_reference directory.**
-
-During verified boot, the following regions hold signing or hash data:
-
-* GBB (Google Binary Block) - contains a public key
-* VBlock - contains a public key for the kernel and a key for the
- firmware
-* Kernel command line - contains the verity hash
-
-## Secondary Program Loader (SPL)
-
-The secondary program loader (SPL) is used on ARM systems only. On x86 systems,
-this bootstrapping function is performed by coreboot. Not all ARM platforms use
-SPL, but its usage is becoming increasingly common.
-
-SPL is a small program (about 10 to 30 Kbytes) that loads into the internal SRAM
-of the AP. This program is loaded when the system starts to perform the
-following initialization functions:
-
-* Set up basic clocks and power
-* Start memory running
-* Load U-Boot into SDRAM
-* Switch control to U-Boot code
-
-The config variable `CONFIG_SPL_BUILD` is used in Makefiles and source files to
-indicate whether a particular element should be included in the initial SPL
-build. This approach enables the same set of source files to be used for both
-the SPL build and the U-Boot build. The initial SPL setup should perform the
-bare minimum needed before U-Boot takes control. For example, you would not need
-to turn on the clock for the LCD or enable USB because those peripherals are not
-used before U-Boot executes.
-
-For more information on SPL and other config options for SPL, see the [SPL
-README
-file](http://git.denx.de/?p=u-boot.git;a=blob;f=doc/README.SPL;h=4e1cb28800411e0c7f626970bec2326baf45d49c;hb=HEAD).
-
-## Flat Device Tree
-
-**The flat device tree (FDT), or simply device tree, is a simple text file that
-contains a data structure describing the hardware components of the system and
-how they are connected. This file is compiled into binary format and passed to
-the operating system at boot time. The device tree consists of a list of nodes,
-each of which represents a device or a bus in the system. These nodes are
-grouped hierarchically. (The tree is "flattened" when it is compiled.) The
-top-level nodes contain subnodes that are attached to them in some way. For
-example, a top-level node could be a peripheral device attached to a bus, and
-the subnodes would be the devices connected to that bus.**
-
-**The device tree file is located in the board/*vendor_name*/dts directory.**
-
-### How Is the Device Tree Used?
-
-**Both the kernel and U-Boot use the device tree as the basic *description* of the hardware components and layout. In addition, for Chrome OS, the device tree provides configuration information. The following three nodes provide configuration information to Chrome OS:**
-**config - general configuration information**
-**chromeos-config - includes information about verified boot**
-**flash - specifies the flashmap**
-
-### Sample Device Tree Nodes
-
-Here is an example of nodes for the SPI flash and EC, taken from the device tree
-for the Exynos5250 board:
-
-`spi@131b0000 {`
-
-` spi-max-frequency = <1000000>;`
-
-` spi-deactivate-delay = <100>;`
-
-` cros-ec@0 {`
-
-` reg = <0>;`
-
-` compatible = "google,cros-ec";`
-
-` spi-max-frequency = <5000000>;`
-
-` ec-interrupt = <&gpio 174 1>;`
-
-` optimise-flash-write;`
-
-` status = "disabled";`
-
-` };`
-
-`};`
-
-The main node in the block delimited by this excerpt is the SPI peripheral
-(labeled spi@131b0000). The braces following this node contain a list of
-property/value pairs for the node, and the subnode, which is an additional
-device attached to the first device. The spi@131b0000 contains one subnode, the
-cros-ec, which has its own set of property/value pairs that describe its
-parameters.
-
-### Include Files for Flashmap and Other Config Information
-
-The following include files are found in board/samsung/dts/exynos5250-snow.dts:
-
-/dts-v1/;
-
-/include/ "exynos5250.dtsi" - SoC file; includes nodes for all of the
-peripherals in the SoC
-
-/include/ "flashmap-exynos-ro.dtsi" - layout of the read-only portion of the
-flashmap\*
-
-/include/ "flashmap-4mb-rw.dtsi" - layout of the 4 MB read/write portion of the
-flashmap\*
-
-/include/ "chromeos-exynos.dtsi" - exynos-specific configuration for Chrome OS
-
-/include/ "cros5250-common.dtsi" - common board information for Chrome OS-based
-exynos5250 boards
-
-\*For information on the format of the flashmap device tree, see
-[cros/dts/bindings/flashmap.txt](https://chromium.googlesource.com/chromiumos/third_party/u-boot/+/d25429efd1b286223caa994796f3e8b7f041659b/cros/dts/bindings/flashmap.txt).
-
-### Additional Resources
-
-This section provides a simple overview of how Chrome OS uses the device tree.
-For additional, detailed information on device trees, consult the following
-resources:
-
-* Device tree spec
- * <https://www.power.org/resources/downloads/Power_ePAPR_APPROVED_v1.0.pdf>
-* Grant Likely paper
-
- * <http://lwn.net/Articles/414016/>
-* Useful video
-
- * <http://www.youtube.com/watch?v=LSHo3weGFCU>
-* device-tree discuss mailing list
- * <https://lists.ozlabs.org/listinfo/devicetree-discuss>
-* Motivation paper
- * <http://ozlabs.org/~dgibson/papers/dtc-paper.pdf>
-* U-Boot fdt config README
- * <http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=doc/README.fdt-control;h=85bda035043497d8d23aed8a436e24d630c60937;hb=HEAD>
-* Other web sites, including
- * <http://elinux.org/Device_Trees>
- * <http://devicetree.org/Main_Page>
-
-## Environment
-
-The default environment is defined in the board configuration file (for
-example,` /include/configs/smdk5250.h`, which in turn includes `chromeos.h`).
-This default environment is compiled into U-Boot and is used whenever Chrome OS
-boots in verified mode. The environment consists of a list of name/value pairs
-used to hold autoboot settings, selected input and output devices, boot scripts,
-the kernel load address, and other basic settings.
-
-The device tree contains a load-environment node that specifies whether the
-system is running in verified (secure) or nonverified mode. For verified mode,
-the load-environment variable has a value of 0, since the default environment is
-used. For nonverified mode, the load-environment variable has a value of 1,
-which allows a custom environment to be loaded if available (see next
-paragraph).
-
-A custom environment can be stored in the SPI flash, NAND flash, and MMC so that
-it persists between boots. In nonverified mode, the most recently used
-environment is stored and loaded from SPI flash. Nonverified mode, which enables
-you to easily load a custom environment, is a useful feature during development,
-since it allows you to boot from the network or from a USB SD card. U-Boot also
-provides commands for setting and getting environment variables, which can be
-accessed through scripts.
-
-Other sections in *U-Boot Porting Guide:*
-
-1. [Overview of the Porting
-Process](/chromium-os/firmware-porting-guide/1-overview)
-
-2. Concepts (this page)
-
-3. [U-Boot Drivers](/chromium-os/firmware-porting-guide/u-boot-drivers) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/firmware-ec-write-protection/index.md b/chromium/docs/website/site/chromium-os/firmware-porting-guide/firmware-ec-write-protection/index.md
deleted file mode 100644
index b176f64a3ee..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/firmware-ec-write-protection/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/firmware-porting-guide
- - Firmware Overview and Porting Guide
-page_name: firmware-ec-write-protection
-title: Firmware / EC Write Protection
----
-
-On customer-ship devices, read-only [AP
-firmware](/chromium-os/developer-information-for-chrome-os-devices/custom-firmware)
-and [embedded controller firmware](/chromium-os/ec-development) is
-write-protected. By design, this write protection cannot be removed without
-physical access to the device.
-
-**Application Processor (AP) Firmware**
-
-AP firmware (also known as "SOC firmware", "host firmware", "main firmware" or
-even "BIOS") typically resides on a SPI ROM. Protection registers on the SPI ROM
-are programmed to protect the read-only region, and these registers normally
-cannot be modified while the SPI ROM WP (write protect) pin is asserted. This
-pin is asserted through various physical means (see below), but with effort,
-users can unprotect devices they own.
-
-**Embedded Controller (EC) Firmware**
-
-The Chrome OS Embedded Controller (EC) typically has a WP input pin driven by
-the same hardware that generates SOC firmware write protect. While this pin is
-asserted, certain debug features (eg. arbitrary I2C access through host
-commands) are locked out. Some ECs [load code from external
-storage](/chromium-os/ec-development/ec-image-geometry-spec), and for these ECs,
-RO protection works similar to SOC firmware RO protection (WP pin is asserted to
-EC SPI ROM). Other ECs use internal flash, and these ECs emulate SPI ROM
-protection registers, disabling write access to certain regions while the WP pin
-is asserted.
-
-**Methods of Asserting Write Protect**
-
-Throughout the history of Chrome OS devices, three main methods have been
-implemented for asserting (and removing) write protect:
-
-* Switch - a toggle switch asserts WP to the SOC firmware SPI ROM and
- EC. WP can be deasserted by disassembling the device and flipping
- the switch.
-* Screw - a screw shorts a pad on the PCB. While this screw is
- inserted, WP is asserted. WP can be deasserted by disassembling the
- device and removing this special screw.
-* [cr50](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/cr50/)
- - a special security chip asserts the WP signal. While a battery is
- present on the device, the WP signal will be asserted. Disassembling
- the device and physically disconnecting the battery causes WP to be
- deasserted.
-
-More information about which protection method is used for a particular device,
-and where to locate the switch / screw, is available on the [developer info
-page](/chromium-os/developer-information-for-chrome-os-devices).
-
-**Disabling Write Protect for Screw / Switch Protection**
-
-1. Disassemble the device, locate the WP screw / switch, and remove it.
-2. Reassemble the device, then boot to [developer
- mode](/chromium-os/chromiumos-design-docs/developer-mode).
-3. To disable SOC firmware protection, run
- "[flashrom](/chromium-os/packages/cros-flashrom) -p host
- --wp-disable". To disable EC firmware protection (external storage),
- run "flashrom -p ec --wp-disable". It's not possible to disable EC
- firmware WP once enabled for ECs with internal storage. Instead, RO
- firmware must be reflashed while WP is deasserted. RO firmware will
- then be writable, regardless of the state of WP.
-4. Now that SPI / EC protection registers are cleared, the screw /
- switch can be re-inserted and the read-only region of SOC / EC
- firmware will remain writable.
-
-**Disabling Write Protect for cr50**
-
-If you have a
-[suzyQ](https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/docs/ccd.md#suzyq-suzyqable),
-you can disable write protect without opening the case. You can [enable
-Case-Closed Debugging
-(CCD)](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/docs/case_closed_debugging_cr50.md#ccd-setup)
-and then [use a cr50 console command to disable write
-protect](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/docs/case_closed_debugging_cr50.md#wp-control).
-The write protect command is only accessible through suzyQ.
-
-If you don't want to go through the ccd open process or don't have a suzyQ, you
-can open the case and remove the battery to disable write protect.
-
-1. Disassemble the device, locate the battery connector, remove the
- battery connector from the PCB to disconnect the battery.
-2. Reassemble the device, insert the original OEM charger (necessary
- since the battery is no longer providing power to the system), then
- boot to developer mode.
-3. See (3) above, commands to disable protection are identical.
-4. Disassemble, re-attach the battery, then reassemble. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/fmap/index.md b/chromium/docs/website/site/chromium-os/firmware-porting-guide/fmap/index.md
deleted file mode 100644
index 6771fff507e..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/fmap/index.md
+++ /dev/null
@@ -1,360 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/firmware-porting-guide
- - Firmware Overview and Porting Guide
-page_name: fmap
-title: FMAP
----
-
-Flash Map (FMAP) is a simple specification for layout of flash devices. A
-reference implementation is available at [flashmap git
-repo](https://chromium.googlesource.com/chromiumos/third_party/flashmap).
-
-Below is the FMAP defined for [Pixel 2 /
-Samus](/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel-2015),
-retrieved by running *dump_fmap image.bin*:
-
-fmap_signature __FMAP__
-
-fmap_version: 1.0
-
-fmap_base: 0x0
-
-fmap_size: 0x00800000 (8388608)
-
-fmap_name: FMAP
-
-fmap_nareas: 33
-
-&gt;&gt;&gt; This section describes the attributes of this FMAP. Note that the
-Samus FW image size is 8MB.
-
-area: 1
-
-area_offset: 0x00000000
-
-area_size: 0x00200000 (2097152)
-
-area_name: SI_ALL
-
-&gt;&gt;&gt; This region contains the SPI descriptor in a format defined by the
-on-chip SPI controller and Intel Management Engine.
-
-area: 2
-
-area_offset: 0x00000000
-
-area_size: 0x00001000 (4096)
-
-area_name: SI_DESC
-
-&gt;&gt;&gt; SPI descriptor.
-
-area: 3
-
-area_offset: 0x00001000
-
-area_size: 0x001ff000 (2093056)
-
-area_name: SI_ME
-
-&gt;&gt;&gt; Management Engine.
-
-area: 4
-
-area_offset: 0x00200000
-
-area_size: 0x00600000 (6291456)
-
-area_name: SI_BIOS
-
-&gt;&gt;&gt; Non descriptor / ME region.
-
-area: 5
-
-area_offset: 0x00200000
-
-area_size: 0x000f0000 (983040)
-
-area_name: RW_SECTION_A
-
-&gt;&gt;&gt; Region A of re-writable FW, which may be reflashed during
-[auto-update](/chromium-os/chromiumos-design-docs/autoupdate-details).
-
-area: 6
-
-area_offset: 0x00200000
-
-area_size: 0x00010000 (65536)
-
-area_name: VBLOCK_A
-
-&gt;&gt;&gt; Keyblock for RW Region A.
-
-area: 7
-
-area_offset: 0x00210000
-
-area_size: 0x000b0000 (720896)
-
-area_name: FW_MAIN_A
-
-&gt;&gt;&gt; Rewritable ramstage BIOS image A.
-
-area: 8
-
-area_offset: 0x002c0000
-
-area_size: 0x00010000 (65536)
-
-area_name: PD_MAIN_A
-
-&gt;&gt;&gt; PD MCU (USB-PD / USB-C power controller) EC image A.
-
-area: 9
-
-area_offset: 0x002d0000
-
-area_size: 0x0001ffc0 (131008)
-
-area_name: EC_MAIN_A
-
-&gt;&gt;&gt; Main EC ([Embedded Controller](/chromium-os/ec-development)) image
-A.
-
-area: 10
-
-area_offset: 0x002effc0
-
-area_size: 0x00000040 (64)
-
-area_name: RW_FWID_A
-
-&gt;&gt;&gt; ID string of rewritable ramstage BIOS image A. Eg.
-"Google_Samus.6300.174.0".
-
-area: 11
-
-area_offset: 0x002f0000
-
-area_size: 0x000f0000 (983040)
-
-area_name: RW_SECTION_B
-
-&gt;&gt;&gt; Region B of re-writable FW. For redundancy / recovery on failed
-update.
-
-area: 12
-
-area_offset: 0x002f0000
-
-area_size: 0x00010000 (65536)
-
-area_name: VBLOCK_B
-
-area: 13
-
-area_offset: 0x00300000
-
-area_size: 0x000b0000 (720896)
-
-area_name: FW_MAIN_B
-
-area: 14
-
-area_offset: 0x003b0000
-
-area_size: 0x00010000 (65536)
-
-area_name: PD_MAIN_B
-
-area: 15
-
-area_offset: 0x003c0000
-
-area_size: 0x0001ffc0 (131008)
-
-area_name: EC_MAIN_B
-
-area: 16
-
-area_offset: 0x003dffc0
-
-area_size: 0x00000040 (64)
-
-area_name: RW_FWID_B
-
-&gt;&gt;&gt; RW Region B.
-
-area: 17
-
-area_offset: 0x003e0000
-
-area_size: 0x00010000 (65536)
-
-area_name: RW_MRC_CACHE
-
-&gt;&gt;&gt; Region that stores board DRAM timing information, written during
-initial memory training.
-
-area: 18
-
-area_offset: 0x003f0000
-
-area_size: 0x00004000 (16384)
-
-area_name: RW_ELOG
-
-&gt;&gt;&gt; Event log. Normally exported and decoded on a Chromebook to
-/var/log/eventlog.
-
-area: 19
-
-area_offset: 0x003f4000
-
-area_size: 0x00004000 (16384)
-
-area_name: RW_SHARED
-
-area: 20
-
-area_offset: 0x003f4000
-
-area_size: 0x00002000 (8192)
-
-area_name: SHARED_DATA
-
-area: 21
-
-area_offset: 0x003f6000
-
-area_size: 0x00002000 (8192)
-
-area_name: VBLOCK_DEV
-
-&gt;&gt;&gt; Shared FW data related to dev-mode FW verification.
-
-area: 22
-
-area_offset: 0x003f8000
-
-area_size: 0x00002000 (8192)
-
-area_name: RW_VPD
-
-&gt;&gt;&gt; Writable vital product data, eg. first use date.
-
-area: 23
-
-area_offset: 0x003fa000
-
-area_size: 0x00006000 (24576)
-
-area_name: RW_UNUSED
-
-&gt;&gt;&gt; Extra / unused space in RW region.
-
-area: 24
-
-area_offset: 0x00400000
-
-area_size: 0x00200000 (2097152)
-
-area_name: RW_LEGACY
-
-&gt;&gt;&gt; Alternate OtherOS payload, normally for booting SeaBIOS.
-
-area: 25
-
-area_offset: 0x00600000
-
-area_size: 0x00200000 (2097152)
-
-area_name: WP_RO
-
-&gt;&gt;&gt; RO region of FW - written once at the factory and (normally) never
-again.
-
-area: 26
-
-area_offset: 0x00600000
-
-area_size: 0x00004000 (16384)
-
-area_name: RO_VPD
-
-&gt;&gt;&gt; RO vital product data, eg. sensor calibration data, keyboard /
-region information.
-
-area: 27
-
-area_offset: 0x00604000
-
-area_size: 0x0000c000 (49152)
-
-area_name: RO_UNUSED
-
-&gt;&gt; Extra . unused space.
-
-area: 28
-
-area_offset: 0x00610000
-
-area_size: 0x001f0000 (2031616)
-
-area_name: RO_SECTION
-
-&gt;&gt;&gt; RO FW region.
-
-area: 29
-
-area_offset: 0x00610000
-
-area_size: 0x00000800 (2048)
-
-area_name: FMAP
-
-&gt;&gt; Data structure that describes what you're looking at right now :)
-
-area: 30
-
-area_offset: 0x00610800
-
-area_size: 0x00000040 (64)
-
-area_name: RO_FRID
-
-&gt;&gt;&gt; ID string of RO BIOS image. Eg. "Google_Samus.6300.174.0".
-
-area: 31
-
-area_offset: 0x00610840
-
-area_size: 0x000007c0 (1984)
-
-area_name: RO_FRID_PAD
-
-&gt;&gt;&gt; For alignment of RO_FRID / GBB???
-
-area: 32
-
-area_offset: 0x00611000
-
-area_size: 0x000ef000 (978944)
-
-area_name: GBB
-
-&gt;&gt;&gt; Google Binary Block. Stores key information, FW screen bitmaps, and
-special developer flags that can be set to modify boot behavior.
-
-area: 33
-
-area_offset: 0x00700000
-
-area_size: 0x00100000 (1048576)
-
-area_name: BOOT_STUB
-
-&gt;&gt;&gt; RO Coreboot - Ramstage, romstage, CBFS, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/index.md b/chromium/docs/website/site/chromium-os/firmware-porting-guide/index.md
deleted file mode 100644
index 83b5b85cd53..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: firmware-porting-guide
-title: Firmware Overview and Porting Guide
----
-
-*4/11/2013*
-
-## Firmware Overview
-
-When you turn on an embedded device such as a Chromebook, the firmware is the
-first software that runs. It sets up the machine so that it can load the
-operating system and then transfers control to the OS. This general pattern
-applies to any architecture, but there are differences depending on the exact
-system architecture. For example, on ARM SoCs, it is common to have a boot ROM
-within the SoC that is capable of booting from various media and may set up
-basic clocks and peripherals.
-
-On x86 systems, only the boot system is in SPI flash, and the firmware must deal
-with every aspect of setting up the machine. Typically, a first stage firmware
-such as Coreboot (not covered in this guide) is used on x86 to deal with these
-complexities. On x86, part of the firmware stays resident even after the OS
-runs, whereas on ARM and most other architectures, the firmware is no longer in
-memory once control transfers to the OS.
-
-### Firmware Tasks on Chrome OS
-
-The firmware sets up the basic peripherals such as the keyboard, display, mass
-storage, security chip (TPM), and SPI flash for its own use while it runs the
-steps to set up the machine. In Chrome OS, the firmware can be updated, so the
-system first checks whether an update exists and, if so, it loads the update and
-jumps to execute it. In normal cases, the OS is available and is loaded and
-started. If a problem exists (for example, the OS is corrupt), the firmware
-enters recovery mode, which allows the user to insert media with a new OS. In
-developer mode, users can bypass Chrome OS security, or even the entire OS.
-
-### U-Boot
-
-U-Boot (Universal Boot) is a useful basis for firmware because it has wide
-architecture support and contains many drivers and subsystems. Chrome OS uses an
-upstream version of U-Boot and adds its own verified boot infrastructure, which
-is linked to U-Boot. Many of the drivers and features in U-Boot are used by
-verified boot. Some of the advantages of U-Boot are
-
-* It is a relatively simple boot loader that is easy to modify and
- adjust to various needs.
-* It is popular on Power PC and widely available on ARM.
-* It includes a comprehensive command-line interface and environment
- system that allows for persistent state across reboots.
-* Supports a device tree structure that accommodates hardware
- differences
-* It supports most common files systems, USB, SPI, I2C, displays,
- SD/MMC, SCSI, and NAND flash.
-* It has a large upstream community and active mailing list.
-
-U-Boot was started in 2002 by Wolfgang Denk, who based his work on previous
-Power PC development (PPCBoot) by Magnus Damm. Wolfgang Denk is the primary
-maintainer of U-Boot source code (see
-[www.denx.de](http://www.denx.de/wiki/U-Boot)). U-Boot is available in the Git
-tree. Patchwork is used to manage patches to the tree. All development is done
-in patches sent to the [u-boot mailing
-list](http://lists.denx.de/mailman/listinfo/u-boot).
-
-## U-Boot Porting Guide
-
-This guide describes how to port U-Boot to a new Chrome OS platform. Although it
-specifically describes using U-Boot with Chrome OS, the general process,
-information, and examples apply to using U-Boot with any Chromium OS. The guide
-provides a conceptual framework for U-Boot porting tasks as well as
-task-oriented guidance for the porting process.
-
-1. **[Overview of the Porting
-Process](/chromium-os/firmware-porting-guide/1-overview)**
-
-* High-level view of the porting process
-* Development flow
-
-2. **[Concepts](/chromium-os/firmware-porting-guide/2-concepts)**
-
-* Boot process
-* Verified boot
-* Development flow
-* Firmware image
-* Firmware development
- * USB firmware download
- * Device Firmware Update (DFU) - over the air
-* Bundled firmware
-* Secondary program loader (SPL)
-* Flat device tree
-* Keys and signing
-* Environment
-
-3. **[Drivers for Chrome
-OS](/chromium-os/firmware-porting-guide/u-boot-drivers)**
-
-* Audio codec
-* Clock
-* Ethernet
-* GPIO (General Purpose Input/Output)
-* I2C (Inter-IC Communications)
-* I2S (Inter-IC Sound)
-* Keyboard
-* LCD (Liquid Crystal Display)
-* NAND (alternative to SDMMC if supported)
-* Pinmux (Pin Multiplexing)
-* Power
-* PWM (Pulse Width Modulation)
-* SDMMC (Secure Digital Multimedia Memory Card) and eMMC
-* SPI
-* SPI Flash (Serial Peripheral Interface Flash)
-* Timer
-* TMU (Thermal Management Unit)
-* TPM (Trusted Platform Module)
-* UART (Universal Asynchronous Receiver Transmitter)
-* USB host
-* DSTREAM/ DS-5 - debug tools
-* ICE/Trace - debug tools
-
-**Appendix A.** [Using nv-U-Boot on the Samsung
-Chromebook](/system/errors/NodeNotFound) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-porting-guide/u-boot-drivers/index.md b/chromium/docs/website/site/chromium-os/firmware-porting-guide/u-boot-drivers/index.md
deleted file mode 100644
index 1fd343869a6..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-porting-guide/u-boot-drivers/index.md
+++ /dev/null
@@ -1,1447 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/firmware-porting-guide
- - Firmware Overview and Porting Guide
-page_name: u-boot-drivers
-title: 3. U-Boot Drivers
----
-
-[TOC]
-
-4/11/2013
-
-This section lists the functional requirements for Chrome OS drivers and
-describes how to implement the drivers using U-Boot APIs and configuration
-files. It provides links to useful code samples from the [U-Boot source
-tree](http://git.denx.de/?p=u-boot.git;a=tree).
-
-## Board Configuration
-
-Each board has a file that contains config options for each board component. For
-example, the Samsung SMDK5250 (Exynos5250) board is specified in the file
-[include/configs/smdk5250.h](http://git.denx.de/?p=u-boot.git;a=blob;f=include/configs/smdk5250.h;h=c0f86228b08a0fb4df48d70180144af2990b76c2;hb=HEAD).
-This file controls which components are enabled and specifies certain parameters
-for each board component.
-
-## Driver Configuration
-
-To add a driver for a particular class of peripheral, you need to do the
-following:
-
-* Implement the APIs specified in the driver class header file.
-* Add config option(s) for the peripheral to the board configuration
- file in include/configs.
-* Add a node for the driver to the [device tree
- file](/chromium-os/firmware-porting-guide/2-concepts) (*.dts*),
- specifying its properties and values as well as any additional
- devices that are connected to it.
-
-The following sections provide details for each class of driver, including
-performance requirements and implementation tips. For Chrome OS implementations,
-also see the [Main Processor Firmware
-Specification](https://sites.google.com/a/google.com/chromeos-partners/pages/tech-docs/firmware/main-processor-firmware-specification-v10).
-
-## Audio Codec and Inter-Integrated Circuit Sound (I2S)
-
-The audio codec is commonly connected to I2S to provide the audio data and to
-I2C to set up the codec (for example, to control volume, output speed, headphone
-and speaker output).
-
-#### Implementation Notes
-
-The sound.c file defines the sound_init() function, which sets up the audio
-codec and I2S support. Currently, this file supports the Samsung WM8994 audio
-codec and the Samsung I2S driver. This system would need to be expanded for
-other architectures to add support for new codec and I2S drivers. The
-sound_play() file, also defined in sound.c, plays a sound at a particular
-frequency for a specified period.
-
-The samsung-i2s.c file defines the i2s_tx_init() function, which sets up the I2S
-driver for sending audio data to the codec. It also defines
-i2s_transfer_tx_data(), which transfers the data to the codec.
-
-The wm8994.c file defines the wm8994_init() function, which initializes the
-codec hardware.
-
-#### Command Line Interface
-
-The console commands sound_init and sound_play can be used to control the audio
-codec.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td>include/sound.h</td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td>drivers/sound/sound.c, drivers/sound/wm8994.c,</td>
-<td>drivers/sound/samsung-i2s.c</td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td>drivers/sound/Makefile</td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td>drivers/sound/wm8994.c</td>
-</tr>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Clock
-
-The AP has a number clocks that drive devices such as the eMMC, SPI flash, and
-display. Although the clock structure can be very complex, with a tree of 50 or
-more interdependent clocks, U-Boot has a simple clock implementation. With
-U-Boot, you need to turn on a clock, set its frequency, and then just let it
-run.
-
-#### Implementation Notes
-
-The preferred technique is to create clock.c, which implements the clock
-functionality. Important clock functions to implement include the following:
-
-* clock_set_rate() - sets the rate for a particular clock
-* clock_start_periph_pll() - starts a peripheral clock at a particular
- rate
-* clock_set_enable() - enable and disable a clock
-* reset_periph() - reset a peripheral
-* clock_get_rate() - queries the clock rate
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td>arch/arm/include/asm/arch-xxxx/clock.h</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td> typically in AP directory, e.g., arch/arm/cpu/armv7/arch-xxxx/clock.c</td>*
-*</tr>*
-*<tr>*
-*<td><b> Makefile</b></td>*
-*<td> typically, also in AP directory</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/tegra20-common/clock.c;h=12987a6893691f8646016ac1e242b71519a811da;hb=HEAD">arch/arm/cpu/tegra20-common/clock.c</a></td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Ethernet
-
-An Ethernet connection is often used during development to download a kernel
-from the network. This connection is also used in the factory to download the
-kernel and ramdisk.
-
-U-Boot supports the following network protocols:
-
-* **TFTP** - for downloading a kernel and also for uploading trace
- data
-* **NFS** - also used for downloading a kernel
-* **BOOTP/DHCP** - for obtaining an IP address
-* **ping** - for checking network connectivity
-
-Many x86 devices have a built-in Ethernet port. Another way to provide Ethernet
-to a system is to connect a USB-to-Ethernet adapter to the USB port. If the
-device has a built-in port, Ethernet is detected when the board starts up and is
-available for use. To enable the USB-to-Ethernet connection, use the U-Boot
-command `usb start`.
-
-Another useful feature for development is that when you want to use an NFS root
-from the network, U-Boot can provide suitable boot arguments to the kernel on
-the Linux command line.
-
-#### Implementation Notes
-
-The structure` eth_device` in the file `net.h` describes the Ethernet driver.
-The board file calls the `probe()` function, which probes for Ethernet hardware,
-sets up the `eth_device` structure, and then calls `eth_register()`.
-
-You need to implement the following functions for the Ethernet driver:
-
-* init() - brings up the Ethernet device
-* halt() - shuts down the Ethernet device
-* send() - sends packets over the network
-* recv() - receives packets over the network
-* write_hwaddr() - writes the MAC address to the hardware from the
- ethaddr environment variable.
-
-For USB Ethernet, the structure `ueth_data` in the file `usb_ether.h` describes
-the USB Ethernet driver. The `usb_ether.h` file also defines a set of three
-functions that must be implemented for each supported adapter. For example, here
-are the functions for the Asix adapter:
-
-```none
-#ifdef CONFIG_USB_ETHER_ASIX
- void asix_eth_before_probe(void);
- int asix_eth_probe(struct usb_device *dev, unsigned int ifnum,
-                       struct ueth_data *ss);
- int asix_eth_get_info(struct usb_device *dev, struct ueth_data *ss,
-                       struct eth_device *eth);
- #endif
-```
-
-The` *xxx*_eth_probe()` function probes for the device and must return nonzero
-if it finds a device. The `*xxx*_eth_get_info()` function obtains information
-about the device and fills in the `ueth_data` structure.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/net.h;h=970d4d1fab13df2c093062e1cf015625bb5db558;hb=HEAD">include/net.h</a></td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/usb_ether.h;h=7c7aecb30574d4536915f20f262a858470160421;hb=HEAD">include/usb_ether.h</a></td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/net/lan91c96.c;h=11d350eb8daeeefdf87724b62c4f0e4039a9e713;hb=HEAD">drivers/net/lan91c96.c</a> *(private to driver)*</td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/net/Makefile;h=786a6567a5fc9ba5dbfc2c68262a789c5338a2ea;hb=HEAD">drivers/net/Makefile</a> </td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td><a href="http://drivers/usb/eth/asix.c">drivers/usb/eth/asix.c</a> *(specific adapter)*</td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/usb/eth/usb_ether.c;h=f361e8b16857eeb7815f7ae594e83567246bce09;hb=HEAD">drivers/usb/eth/usb_ether.c</a> *(generic interface)*</td>
-</tr>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## GPIO
-
-Modern APs can contain hundreds of GPIOs (General Purpose Input/Output pins).
-GPIOs can be used to *control* a given line or to *sense* its current state. A
-given GPIO can serve multiple purposes. Also, peripheral pins can often also be
-used as GPIOs. For example, an AP MMC interface requires 11 pins that can be
-used as GPIOs if the MMC function is not needed.
-
-A GPIO can be either an *input* or an *output*. If an input, its value can be
-read as 0 or 1. If an output, then its value can be set to 0 or 1.
-
-#### Generic GPIO Interface
-
-U-Boot provides a generic GPIO interface in
-`[include/asm-generic/gpio.h](http://git.denx.de/?p=u-boot.git;a=blob;f=include/asm-generic/gpio.h;h=bfedbe44596aa31fb2266f7e052a63401f06d181;hb=HEAD)`.
-This interface provides the following functions:
-
-<table>
-<tr>
-<td><b> Function</b></td>
-<td><b> Description</b></td>
-</tr>
-<tr>
-<td> int gpio_<b>request</b>(unsigned gpio, const char \*label);</td>
-<td> Request use of a specific GPIO</td>
-</tr>
-<tr>
-<td> int gpio_<b>free</b>(unsigned gpio);</td>
-<td> Frees the GPIO that was in use</td>
-</tr>
-<tr>
-<td> int gpio_<b>direction_input</b>(unsigned gpio);</td>
-<td> Makes the GPIO an input</td>
-</tr>
-<tr>
-<td> int gpio_<b>direction_output</b>(unsigned gpio, int value);</td>
-<td> Makes the specified GPIO an output and sets its value</td>
-</tr>
-<tr>
-<td> int gpio_<b>get_value</b>(unsigned gpio);</td>
-<td> Gets the value of the GPIO (either input or output)</td>
-</tr>
-<tr>
-<td> int gpio_<b>set_value</b>(unsigned gpio, int value);</td>
-<td> Sets the value of an output GPIO (0 or 1)</td>
-</tr>
-</table>
-
-In U-Boot, GPIOs are numbered from 0, with enums specified in the AP header file
-`gpio.h`. For example:
-
-> enum gpio_pin {
-
-> GPIO_PA0 = 0, /\* pin 0 \*/
-
-> GPIO_PA1,
-
-> GPIO_PA2,
-
-> GPIO_PA3,
-
-> GPIO_PA4,
-
-> GPIO_PA5,
-
-> GPIO_PA6,
-
-> GPIO_PA7,
-
-> GPIO_PB0, /\* pin 8 \*/
-
-> GPIO_PB1,
-
-> GPIO_PB2,
-
-> .
-
-> .
-
-> .
-
-> };
-
-The generic GPIO functions specify the GPIO pin by its number, as described in
-gpio.h.
-
-#### Additional Functions
-
-The generic GPIO interface does not cover all features of a typical AP. For
-example, custom AP functions are required to specify the following:
-
-* **Drive strength** is defined in a chip-specific function.
-* **Pinmux** selects which function a pin has (for example, MMC, LCD,
- GPIO) and what is controlling the pin. The [pinmux
- module](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Pinmux)
- typically handles this function.
-* **Pullup and pulldown** functionality is defined in a chip-specific
- function so that there are no floating lines.
-
-#### Command Line Interface
-
-The GPIO driver has a corresponding `gpio` command line interface that can be
-used to set and get GPIO values. See common/cmd_gpio.c for a list of commands
-(input, set, clear, toggle). The gpio status command, which you must implement,
-displays the status of all GPIOs in the system. This useful command should be
-able to accept both numbers and names for GPIO pins, as defined in gpio.h.
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/include/asm/arch-tegra20/gpio.h;h=e2848fec67ba58d038b20f8666ccf693f4beafd1;hb=HEAD">arch/arm/include/asm/arch-tegra20/gpio.h</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td> typically in AP directory, e.g., drivers/gpio/gpio-xxx.c</td>*
-*</tr>*
-*<tr>*
-*<td><b> Makefile</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/gpio/Makefile;h=9df1e2632f774805b635edd317292cb3196fa6cf;hb=HEAD">drivers/gpio/Makefile</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/gpio/tegra_gpio.c;h=2417968214d7f075db3cec79af623c21cc16f012;hb=HEAD">drivers/gpio/tegra_gpio.c</a> (?)</td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Inter-Integrated Circuit Communication (I2C)
-
-The inter-integrated circuit communication (I2C) driver is the most-used driver
-in U-Boot for Chrome OS. For example, the I2C driver is used to send and receive
-data from the following devices:
-
-* PMIC (Power Module)
-* Trusted Platform Module (TPM)
-* Embedded Controller
-* Battery gas gauge
-* Battery charger
-* LCD/EDID
-* Audio codec
-
-Because I2C drivers form a critical part of U-Boot, they should be tested to
-ensure that a given I2C bus works correctly with multiple slaves and at all
-supported speeds. Be sure the driver correctly handles NAK messages from slaves
-and provides robust error handling.
-
-#### Setup
-
-Ordering of multiple I2C buses (there are usually half a dozen or more) is
-specified in the device tree file aliases section (for example, see
-board/samsung/dts/exynos5250-smdk5250.dts). Bus numbering is zero-based.
-
-The following function is called by the board file to set up I2C ports:
-
-> void board_i2c_init(const void \*blob);
-
-In this function, `blob` is the device tree.
-
-Given a node in the device tree, the following function returns the bus number
-of that node:
-
-> `int i2c_get_bus_num_fdt(int node);`
-
-An I2C bus typically runs at either 100 kHz or 400 kHz. Ideally the driver
-should support exactly these speeds. In no case should the driver exceed the
-specified speed. The bus speed is specified in the device tree for a given bus.
-Although the U-Boot driver header files include functions for setting I2C bus
-speeds, these functions should not be used directly. Instead, set one speed for
-each I2C bus in the device tree, choosing the speed that matches the slowest
-device on a given bus.
-
-#### Communication
-
-Several of the I2C functions use the concept of a "current bus":
-
-* i2c_set_bus_num() sets the current bus number
-* i2c_get_bus_num() returns the current bus number
-
-Typically, you follow this pattern:
-
-1. Call i2c_get_bus_num() to obtain the current bus.
-2. Store this bus number so that you can restore this state when you
- are finished with your transaction.
-3. Call i2c_set_bus_num() to set the bus for your current transaction.
-4. Perform processing on this bus (sending and receiving data).
-5. Finally, call i2c_set_bus_num() to reset the bus to its original
- number.
-
-The functions` i2c_read()` and `i2c_write()` are used to receive and send data
-from the I2C bus. Because multiple devices share the same bus, the functions
-require information about both the chip address and the memory address within
-the chip. For example, the syntax for i2c_read is as follows:
-
-`int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len);`
-
-where
-
-`chip` is the I2C chip address, in the range 0 to 127 `addr` is the memory
-address within the chip (the register) `alen` is the length of the address (1
-for 7-bit addressing, 2 for 10-bit addressing) `buffer` is where to read the
-data `len` is how many bytes to read
-
-#### Command Line Interface
-
-The I2C bus has a corresponding `i2c` command line interface that can be used to
-read and write data.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/i2c.h;h=c60d07583bf68cbcc3b1dc6bf67f41a44585c920;hb=HEAD">include/i2c.h</a></td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=tree;f=drivers/i2c;hb=HEAD">drivers/i2c/*driverName.c*</a></td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/i2c/Makefile;h=5dbdbe3672259c0d9a72bd79502fe99990f1cbde;hb=HEAD">drivers/i2c/Makefile</a></td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/i2c/tegra_i2c.c;h=efc77fa910fcc7dcb969afc99d5c5822b99096f1;hb=HEAD">drivers/tegra_i2c.c</a></td>
-</tr>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Keyboard
-
-In Chrome OS, the keyboard is managed by the embedded controller (EC), which
-reports key presses to the AP using messages. Implementing support in U-Boot for
-the keyboard driver is different for x86 and ARM systems. On x86 systems, 8042
-keyboard emulation is used over ACPI to report key presses. On ARM systems, the
-Chrome OS EC protocol is used to report key scans.
-
-#### Implementation Notes
-
-***On x86 Systems***
-
-On x86 systems, the 8042 protocol is handled by a keyboard driver that
-communicates with the AP using an x86 I/O port. On these systems, you are
-responsible for implementing the keyboard driver that reports key presses to the
-AP.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td>include/</td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/input/keyboard.c;h=614592ef3c18febcf27f23a7ac600208d9db03aa;hb=HEAD">drivers/input/keyboard.c</a></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/input/i8042.c;h=26958aaa3eaca4e9a3dced2bd3d6fc81735a08bb;hb=HEAD">drivers/input/i8042.c</a></td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td>drivers/</td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td>drivers/</td>
-</tr>
-</table>
-
-***On ARM Systems***
-
-On ARM systems, the `cros_ec` driver communicates with the EC and requests key
-scans. Each message contains the state of every key on the keyboard. This design
-is chosen to keep the EC as simple as possible. On ARM systems, the U-Boot and
-Linux code provides built-in support for converting key scans into key presses
-through the input layer (input.c and key_matrix.c).
-
-The device tree contains a keyboard node that has a linux, keymap property that
-defines the keycode at each position in the keyboard matrix. You may need to
-edit this file to reflect your keyboard.
-
-**Setting up the keyboard driver.** Three functions are used to initialize and
-register a new keyboard driver (see the function tegra_kbc_check() in
-tegra-kbc.c for an example of waiting for input and then checking for key
-presses):
-
-* input_init() - initializes a new keyboard driver.
-* read_keys() - called when the input layer is ready for more keyboard
- input.
-* input_stdio_register() - registers a new input device (see
- "Functions Used by Input Devices," below).
-
-**Functions provided by the input layer.** The following functions are defined
-by the input layer (input.c) and must be implemented for your driver: *(TRUE? or
-do they just use these functions?)*
-
-* key_matrix_decode() - converts a list of key scans into a list of
- key codes.
-* input_send_keycodes() - sends key codes to the input system for
- processing by U-Boot.
-
-Keyboard auto-repeat is handled by the input layer automatically.
-
-**Functions used by input devices*.*** U-Boot supports multiple console devices
-for input and output. Input devices are controlled by the environment variable
-stdin which contains a list of devices that can supply input. It is common for
-this variable to contain both serial input and keyboard input, so you can use
-either type of input during development.
-
-An input device has three main functions to implement for use by
-input_stdio_register(). Each of these functions communications with the input
-layer.
-
-* getc() - obtains a character and then passes it to input_getc() in
- the input layer.
-* tstc() - checks whether a character is present (but does not read
- it) and then passes the result to input_tst().
-* start() - starts the input device; is called by the input system
- when the device is selected for input.
-
-**Configuration options.** The following configuration options describe how the
-keyboard is connected to the EC. Include the appropriate option in the board
-configuration file.
-
-<table>
-<tr>
-<td> CONFIG_CROS_EC </td>
-<td> Enable EC protocol</td>
-</tr>
-<tr>
-<td> CONFIG_CROS_EC_I2C</td>
-<td> Select the I2C bus for communication with the EC</td>
-</tr>
-<tr>
-<td> CONFIG_CROS_EC_SPI</td>
-<td> Select the SPI bus for communication with the EC</td>
-</tr>
-<tr>
-<td> CONFIG_CROS_EC_LPC</td>
-<td> Select the LPC bus for communication with the EC</td>
-</tr>
-<tr>
-<td> CONFIG_CROS_EC_KEYB</td>
-<td> Enable the keyboard driver</td>
-</tr>
-</table>
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td>include/configs/*boardname*</td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td>drivers/input/cros_ec_keyb.c</td>
-<td>*(uses standard input layer of U-Boot:*</td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/input/input.c;h=04fa5f0bd200d2ce45f2a488561290bb21772862;hb=HEAD">drivers/input/input.c</a> *and*</td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/input/key_matrix.c;h=946a186a1ffaf2ad511cba5e0749efc53ddf8e16;hb=HEAD">drivers/input/key_matrix.c</a>)</td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td>drivers/</td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/input/tegra-kbc.c;h=88471d3edf253e432458a44fb0c8d5ed29317d47;hb=HEAD">drivers/input/tegra-kbc.c</a></td>
-</tr>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## LCD/Video
-
-The display is used to present several screens to the user. If the firmware is
-unable to boot, the screen displays recovery boot instructions for the user.
-Similarly, when the system enters developer mode, a special screen warns the
-user before entering this unprotected mode.
-
-*(sample screen here)*
-
-#### Requirements
-
-Total wait time to enable the LCD should be as close to zero as possible.
-Initialization of the LCD can be interspersed with other startup operations, but
-blocking time during the initialization process should be less than 10 ms.
-
-#### Implementation Notes
-
-**Board File.** Add a function to the board file, board_early_init_f(), to set
-up three LCD parameters in the panel_info struct.
-
-* vl_col
-* vl_row
-* vl_bpix
-
-U-Boot allocates memory for your display based on these parameters.
-(Alternatively, set up the LCD driver in the driver .c file and then add a
-function to the board file that calls the setup function in your driver .c file.
-For an example of this technique, see drivers/video/tegra.c.)
-
-**`lcd_ctrl_init(`**`)` **function.** Sets up the display hardware. You may want
-to set up cache flushing in this function to speed up your display. See
-lcd_set_flush_dcache(), which is provided for you in common/lcd.c.
-
-**Efficient Initialization.** Because LCD initialization takes a long time
-(sometimes as much as .5 to 1 second), you may want to use a function that
-manages the initialization efficiently and keeps things moving. For example, see
-tegra_lcd_check_next_stage() in tegra.c.
-
-**`lcd_enable()` function.** As its name suggests, this function is used to
-enable the LCD. However, it is normally a null operation in Chrome OS because
-the lcd_check_next_stage() function will enable the LCD.
-
-U-Boot controls drawing characters and images and scrolling. The driver
-specifies a basic data structure that describes the screen parameters. The
-generic driver is defined in the lcd.h file:
-
-```none
- typedef struct vidinfo {
-         ushort  vl_col;         /* Number of columns (i.e. 640) */
-         ushort  vl_row;         /* Number of rows (i.e. 480) */
-         ushort  vl_width;       /* Width of display area in millimeters */
-         ushort  vl_height;      /* Height of display area in millimeters */
-
-         /* LCD configuration register */
-         u_char  vl_clkp;        /* Clock polarity */
-         u_char  vl_oep;         /* Output Enable polarity */
-         u_char  vl_hsp;         /* Horizontal Sync polarity */
-         u_char  vl_vsp;         /* Vertical Sync polarity */
-         u_char  vl_dp;          /* Data polarity */
-         u_char  vl_bpix;        /* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8 */
-         u_char  vl_lbw;         /* LCD Bus width, 0 = 4, 1 = 8 */
-         u_char  vl_splt;        /* Split display, 0 = single-scan, 1 = dual-scan */
-         u_char  vl_clor;        /* Color, 0 = mono, 1 = color */
-         u_char  vl_tft;         /* 0 = passive, 1 = TFT */
-
-         /* Horizontal control register. Timing from data sheet */
-         ushort  vl_wbl;         /* Wait between lines */
-
-         /* Vertical control register */
-         u_char  vl_vpw;         /* Vertical sync pulse width */
-         u_char  vl_lcdac;       /* LCD AC timing */
-         u_char  vl_wbf;         /* Wait between frames */
- } vidinfo_t;
-```
-
-The LCD driver specifies where screen starts in memory; pixel depth, width, and
-height of screen. It also declares functions to enable the screen and turn it
-on, including the backlight.
-
-The ARM and x86 platforms use slightly different APIs. ARM uses lcd.h and x86
-uses video.h. The implementation files for both ARM and X86 are located in the
-drivers/video directory.
-
-#### ARM Files
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/lcd.h;h=42070d76366e8465a84baf3e90a7e95bff429a62;hb=HEAD">include/lcd.h</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=tree;f=drivers/video;h=e7574c212fc1aef7e44d7a541a77c648f5519781;hb=HEAD">drivers/video</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Makefile</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/video/Makefile;h=ebb6da823cee9e945da43e4f76b4549c59cbe7df;hb=HEAD">drivers/video/Makefile</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example </b></td>*
-*<td> CONFIG_LCD___</td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/video/tegra.c;h=750a2834383f035109ed2f6bd012f63bbfc64243;hb=HEAD">drivers/video/tegra.c</a></td>*
-*</tr>*
-*</table>*
-
-#### x86 Files
-
-On the x86 platform, video has its own U-Boot interface, but the existing
-coreboot driver will initialize the video without any further modification to
-U-Boot.
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/lcd.h;h=42070d76366e8465a84baf3e90a7e95bff429a62;hb=HEAD">include/video.h</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td> drivers/video</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Makefile</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/video/Makefile;h=ebb6da823cee9e945da43e4f76b4549c59cbe7df;hb=HEAD">drivers/video/Makefile</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td> CONFIG_VIDEO___</td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/video/coreboot_fb.c;h=d93bd894a225763791d35f9d00ea562cc32a0c2e;hb=HEAD">drivers/video/coreboot_fb.c </a></td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## NAND
-
-U-Boot provides support for the following types of raw NAND drivers:
-
-* MTD - drivers for communicating with a NAND device as a block
- device. A wide variety of NAND chips are supported.
-* ECC - support for error correction and detection
-* YAFFS2 - a type of file system used by NAND flash
-* UBIFS - another type of file system used by NAND flash
-
-Chrome OS currently does not use raw NAND flash. Instead, it uses EMMC or SATA
-drivers, which provide a high-level interface to the underlying NAND flash.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td>include/nand.h</td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td>drivers/mtd/nand</td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td>drivers/mtd/Makefile</td>
-</tr>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Pin Multiplexing
-
-Each AP vendor is responsible for writing the code in `pinmux.c`, which uses the
-device tree to set up the pinmux for a particular driver. U-Boot uses the same
-pinmux bindings as the kernel. These settings are normally static (that is, the
-settings are selected once and remain unchanged).
-
-#### Implementation Notes
-
-For maximum speed, U-Boot should initialize only the pins it uses during its
-boot. All other pins are left in their default configuration and can be
-initialized later by the kernel. For example, the WiFi pinmux is not required at
-boot time and can be initialized later by the kernel.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/include/asm/arch-tegra20/pinmux.h;h=797e158e68ae49b14cf646a76add1d5098eff8da;hb=HEAD">arch/arm/include/asm/arch-tegra20/pinmux.h</a></td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td> *<table>*</td>
-<td> *<tr>*</td>
-<td> *<td>typically in AP directory, e.g., arch/arm/cpu/armv7/arch-xxxxx/pinmux.c</td>*</td>
-<td> *</tr>*</td>
-<td> *</table>*</td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td> *<table>*</td>
-<td> *<tr>*</td>
-<td> *<td> typically, also in AP directory</td>*</td>
-<td> *</tr>*</td>
-<td> *</table>*</td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td> *<table>*</td>
-<td> *<tr>*</td>
-<td> *<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/tegra20-common/pinmux.c;h=a2a09169e54bc46acbdc0b2bc5f89478a775b2be;hb=HEAD">arch/arm/cpu/tegra20-common/pinmux.c</a></td>*</td>
-<td> *</tr>*</td>
-<td> *</table>*</td>
-</tr>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Power
-
-U-Boot code initializes both the AP power as well as the power to the system
-peripherals. Power to the AP is initialized using the PMIC (Power Management IC)
-driver. In addition to PMIC, the drivers/power directory includes subdirectories
-for power-related drivers for controlling the battery and for the fuel gauge
-that measures the current amount of power in the battery. (Chrome OS may or may
-not use these additional drivers.)
-
-#### Implementation Notes
-
-The board-specific code is located in
-board/*manufacturer*/*boardname*/*boardname.c* (for example,
-board/samsung/trats/trats.c). In this file, you implement the following
-initialization function, which is called by the file arch/arm/lib/board.c:
-
-> `int power_init_board(void);`
-
-This function initializes the AP power through the PMIC and turns on peripherals
-such as the display and eMMC. It also checks the battery if needed.
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td>include/power/pmic.h</td>*
-*<td> include/power/battery.h</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td>drivers/power/pmic/</td>*
-*<td> drivers/power/battery/</td>*
-*<td> drivers/power/fuel_gauge</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Makefile</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/power/Makefile;h=8c7190156c302b60b9f5b8601bc7e4e7a0594b73;hb=HEAD">drivers/power/Makefile</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td>CONFIG_POWER_MAX8998 (for PMIC) CONFIG_POWER_BATTERY_ <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=board/samsung/trats/trats.c;h=e540190984740da822678724a71ffed0764b1cb2;hb=HEAD">board/samsung/trats/trats.c</a></td>*
-*</tr>*
-*</table>*
-
-<table>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Pulse Width Modulation (PWM)
-
-The pulse width modulation (PWM) driver is often used to control display
-contrast and LCD backlight brightness.
-
-#### Implementation Notes
-
-This driver requires you to implement generic functions defined in include/pwm.h
-as well as chip-specific functions defined in the AP directory. Basic functions
-to implement include the following:
-
-* pwm_init() - sets up the clock speed and whether or not it is
- inverted
-* pwm_config() - sets up the duty and period, in nanoseconds
-* pwm_enable() - enables the PWM driver
-* pwm_disable() - disables the PWM driver
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/pwm.h;h=13acf85933b3afab39f20e04a5520077864f598b;hb=HEAD">include/pwm.h</a> (basic interface)</td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/include/asm/arch-tegra20/pwm.h;h=9e03837ccbbc0418c6b7c4d58c187fb4cabc4bce;hb=HEAD">arch/arm/include/asm/arch-tegra20/pwm.h </a>(AP functions)</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/armv7/tegra20/pwm.c;h=b655c5cd06f28d748a56b9c91367529d0a61cca5;hb=HEAD">arch/arm/cpu/armv7/tegra20/pwm.c</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Makefile</b></td>*
-*<td>typically, also in AP directory</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td> *<table>*</td>*
-*<td> *<tr>*</td>*
-*<td> *<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/armv7/tegra20/pwm.c;h=b655c5cd06f28d748a56b9c91367529d0a61cca5;hb=HEAD">arch/arm/cpu/armv7/tegra20/pwm.c</a></td>*</td>*
-*<td> *</tr>*</td>*
-*<td> *</table>*</td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## SDMMC and eMMC
-
-The same driver is typically used by both the SDMMC and the eMMC. Secure Digital
-Multimedia Memory Card (SDMMC) refers to an external SD card. eMMC is an
-internal mass storage device.
-We do not currently use eMMC boot blocks. Chrome OS can boot from an external SD
-card or from internal eMMC. It is convenient to be able to boot from eMMC for
-development purposes.
-
-Chrome OS divides the disk using the EFI partitions table. The kernel is read
-directly from the partition without using the file system. Be sure to enable the
-EFI partition table in the board file using the following option:
-
-* #define CONFIG_EFI_PARTITION
-
-#### Requirements
-
-*SDMMC*
-
-* 4-bit.
-* Speed not critical as this device is used only in developer/recovery
- modes.
-
-*eMMC*
-
-* *8-bit data width, ideally DDR.*
-* *Speed: For reading, 40Mbytes/sec or better is required. Writing
- speed is less critical because the eMMC rarely performs write
- operations in U-Boot.
-
-#### Implementation Notes
-
-Set up the struct mmc and call mmc_register(mmc) for each MMC device (for
-example, once for the SDMMC and once for the eMMC). Important functions to
-implement include the following:
-
-* send_cmd() - send a command to the MMC device
-* set_ios() - to set the I/O speed
-* init() - to initialize the driver
-
-Some of the functions perform differently depending on which type of device is
-being initialized. For example, mmc_getcd() indicates whether an SC card is
-currently in the slot. This function always returns TRUE for an eMMC card.
-
-Key values to set in struct mmc include the following:
-
-* voltages - supported voltages
-* host_caps - capabilities of your chip
-* f_min - minimum frequency
-* f_max - maximum frequency
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/mmc.h;h=a13e2bdcf16886a755a8cf8b74974b3425ca373b;hb=HEAD">include/mmc.h</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=tree;f=drivers/mmc;hb=HEAD">drivers/mmc</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Makefile</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/mmc/Makefile;h=a1dd7302bfc732122fe6620ded02b46dd8c817fd;hb=HEAD">drivers/mmc/Makefile</a> </td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td>CONFIG_TEGRA_MMC drivers/mmc/tegra_mmc.c</td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## SPI
-
-The SPI driver specifies the list of known SPI buses in a structure stored in
-the drivers/spi/ directory (for an example, see the exynos_spi_slave structure
-in drivers/spi/exynos_spi.c). The first field in this structure is another
-spi_slave structure, slave, which describes the bus (slave.bus) and chip select
-(slave.cs) for each SPI slave device.
-
-Ordering of multiple SPI buses is specified in the device tree file (for
-example, board/samsung/dts/exynos5250-smdk5250.dts).
-
-Each device connected to the SPI bus (for example, the EC, touchpad, and SPI
-flash could all be connected to this bus) contains a reference to the `spi_slave
-structure` in its implementation file(for example, see
-`[drivers/mtd/spi/winbond.c](http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/mtd/spi/winbond.c;h=f6aab3d32f459d82d0a9e606f4382fe67981160f;hb=HEAD)`
-for the SPI flash chip and `drivers/misc/cros-ec.c for the EC`.
-
-#### Implementation Notes
-
-Use this function to set up a device on the SPI bus:
-
-```none
-    struct spi_slave *spi_setup_slave(unsigned int busnum, // bus number 
- unsigned int cs, // chip select
-                          unsigned int max_hz,  // maximum SCK rate, in Hz
- unsigned int mode) // mode
-```
-
-To drop the device from the bus, use this function:
-
-```none
-    void spi_free_slave(struct spi_slave *slave)
-```
-
-Other key functions are used to claim control over the bus (so communication can
-start) and to release it:
-
-```none
-    int spi_claim_bus(struct spi_slave *slave);
-```
-
-```none
-    void spi_release_bus(struct spi_slave *slave);
-```
-
-When a slave claims the bus, it maintains control over the bus until you call
-the `spi_release_bus()` function.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/spi.h;h=60e85db9a46e052c97b638c58bb93114a378e3b7;hb=HEAD">include/spi.h</a></td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/spi/exynos_spi.c;h=be60ada2ba43a17ecda4a8b968b08b791f0af73f;hb=HEAD">drivers/spi/exynos_spi.c</a></td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/spi/Makefile;h=824d357d94818ea9c05fa5b0d437aff181b50195;hb=HEAD">drivers/spi/Makefile</a></td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/spi/exynos_spi.c;h=be60ada2ba43a17ecda4a8b968b08b791f0af73f;hb=HEAD">drivers/spi/exynos_spi.c</a></td>
-</tr>
-</table>
-
-*[ back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## SPI Flash
-
-The SPI flash stores the firmware and consists of a Read Only section that
-cannot be changed after manufacturing and a Read/Write section that can be
-updated in the field.
-
-#### Requirements
-
-#### *Size:* The SPI flash is typically 4 or 8 Mbytes, with half allocated to the Read Only portion and half to the Read/Write portion.
-
-#### *Speed:* Because this component directly affects boot time, it must be fast: 5 Mbytes/second performance is required.
-
-#### Implementation Notes
-
-There are several steps to implementing the SPI flash. First, define a prototype
-for your SPI flash, with a name in the form spi_flash_probe_*yourDeviceName*().
-Add this function to spi_flash_internal.h.
-
-Also, modify spi_flash.c, adding the config option that links your prototype to
-the #define. For example, for the Winbond SPI flash, these lines link the
-spi_flash_probe_winbond() prototype to its #define:
-
-> `#ifdef CONFIG_SPI_FLASH_WINBOND`
-
-> ` { 0, 0xef, spi_flash_probe_winbond, },`
-
-> `#endif`
-
-This code passes in the first byte of the chip's ID (here, 0xef). If the ID code
-matches that of the attached SPI flash, the struct spi_flash is created.
-
-You also need to define the spi_flash structure that describes the SPI flash:
-
-```none
-struct spi_flash { struct spi_slave *spi; const char *name; /* Total flash size */ u32 size; /* Write (page) size */ u32 page_size; /* Erase (sector) size */ u32 sector_size; int (*read)(struct spi_flash *flash, u32 offset, size_t len, void *buf); int (*write)(struct spi_flash *flash, u32 offset, size_t len, const void *buf); int (*erase)(struct spi_flash *flash, u32 offset, size_t len);};
-```
-
-In this structure, you set the appropriate fields and either implement the
-functions for reading, writing, and erasing the SPI flash or use existing
-functions defined in spi_flash_internal.h.
-
-<table>
-<tr>
-<td> <b>Header File</b> </td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/spi_flash.h;h=9da90624f23d665fc58c95e37da02096b1adde07;hb=HEAD">include/spi_flash.h</a></td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/mtd/spi/spi_flash_internal.h;h=141cfa8b26d75e6e816c7315530854a93035b803;hb=HEAD">drivers/mtd/spi/spi_flash_</a><a href="http://internal.h">internal.h</a></td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=tree;f=drivers/mtd/spi;hb=HEAD">drivers/mtd/spi</a>/*yourDriver.c*</td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/mtd/spi/Makefile;h=90f83924e2bf23b9ab4c621495ca236c14a19acd;hb=HEAD">drivers/mtd/spi/Makefile</a>/</td>
-</tr>
-<tr>
-<td> <b>Example</b> </td>
-<td>CONFIG_SPI_FLASH and</td>
-<td> CONFIG_SPI_FLASH_winbond</td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/mtd/spi/winbond.c;h=f6aab3d32f459d82d0a9e606f4382fe67981160f;hb=HEAD">drivers/mtd/spi/winbond.c</a></td>
-</tr>
-</table>
-
-[*back to
-top*](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)
-
-## Thermal Management Unit (TMU)
-
-The thermal management unit (TMU) monitors the temperature of the AP. If the
-temperature reaches the upper limit, the TMU can do one of the following:
-
-* Slow the system down until it cools to a certain point
-* Power off the system before it melts
-
-The `dtt` command can be used on the console to perform these functions.
-
-#### Implementation Notes
-
-To implement this driver, you have two tasks:
-
-* Create a TMU driver and connect it to the `dtt` command by modifying
- the file `common/cmd_dtt.c`.
-* Set up a thermal trip in your board file. The temperature limits
- should be defined in the device tree.
-
-<table>
-<tr>
-<td><b> Header File</b></td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=common/cmd_dtt.c;h=cd94423d21910d61055bade1bc285dbed099b9f9;hb=HEAD">common/cmd_dtt.c</a></td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td>board/samsung/smdk5250/smdk5250.c</td>
-</tr>
-</table>
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Timer
-
-The U-Boot timer is measured in milliseconds and increases monotonically from
-the time it is started. There is no concept of time of day in U-Boot.
-
-#### Implementation
-
-The timer requires two basic functions:
-
-* `timer_init() - `called early in U-Boot, before relocation
-* `get_timer() - can be called any time after initialization
-
-#### Typical Use
-
-The timer is commonly used in U-Boot while the system is waiting for a specific
-event or response. The following example shows a typical use of the timer that
-can be used to ensure that there are no infinite loops or hangs during boot:
-
-```none
-start = get_timer(0)
-while ( ...) {
-   if (get_timer (start) > 100){
-```
-
-```none
-      debug "%s:Timeout while waiting for response\^");
-      return -1;
-   }
-   .
-   .
-   .
-}
-```
-
-A base_value is passed into the get_timer() function, and the function returns
-the elapsed time since that base_value (that is, it subtracts the base_value
-from the current value and returns the difference).
-
-#### Other Uses
-
-The `timer_get_us()` function returns the current monotonic time in
-microseconds. This function is used in Chrome OS verified boot to obtain the
-current time. It is also used by bootstage to track boot time (see
-common/bootstage.c). It should be as fast and as accurate as possible.
-
-### Delays
-
-The __udelay() function, also implemented in `timer.c`, is called by U-Boot
-internally from its `udelay (delay for a period in microseconds)` and `mdelay
-(delay for a period in milliseconds)` functions (declared in `common.h`):
-
-> void __udelay (unsigned long);
-
-This function introduces a delay for a given number of microseconds. The delay
-should be as accurate as possible. In no case should the delay occur for less
-than the specified time.
-
-#### Command Line Interface
-
-The time command can be used to time other commands. This feature is useful for
-benchmarking.
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/common.h;h=4ad17eafb9b89a15975b0b8945a1b70c198d8d88;hb=HEAD">include/common.h</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td>timer.c, in the AP directory</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Makefile</b></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td> *<table>*</td>*
-*<td> *<tr>*</td>*
-*<td> *<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/armv7/s5p-common/timer.c;h=bb0e795e66823d4963acd309ebbdd3e67bf7d4a4;hb=HEAD">arch/arm/cpu/armv7/s5p_common/timer.c</a></td>*</td>*
-*<td> *</tr>*</td>*
-*<td> *</table>*</td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Trusted Platform Module (TPM)
-
-The Trusted Platform Module (TPM) is the security chip that maintains rollback
-counters for firmware and kernel versions and stores keys for the system. The
-TPM is normally connected on an LPC, SPI, or I2C bus.
-
-#### Requirements
-
-The TPM is a critical contributor to Chromium OS boot time, so it must be as
-fast as possible.
-
-#### Implementation
-
-All message formatting is handled in vboot_reference, so the functions you must
-implement for the TPM in U-Boot are for low-level initialization, open/close,
-and send/receive functionality:
-
-```none
-int tis_init();int tis_open();
-int tis_close();
-int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf, size_t *recv_len);
-```
-
-<table>
-<tr>
-<td> <b>Header File</b> </td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/tpm.h;h=6b21e9c7349c298c6fc9253324112db58935f805;hb=HEAD">include/tpm.h</a></td>
-</tr>
-<tr>
-<td> <b>Implementation File</b></td>
-<td> drivers/tpm/*yourDriver.c*</td>
-</tr>
-<tr>
-<td> <b>Makefile</b></td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/tpm/Makefile;h=be11c8b595f1367daffc623aff8aa7c694a36749;hb=HEAD">drivers/tpm/Makefile</a></td>
-</tr>
-<tr>
-<td> <b>Example</b></td>
-<td> CONFIG_GENERIC_LPC_TPM</td>
-<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/tpm/generic_lpc_tpm.c;h=6c494eb98a339c5b77859bdbc1ccbd8e6a6a6ff5;hb=HEAD">drivers/tpm/generic_lpc_tpm.c</a></td>
-</tr>
-</table>
-
-[*back to
-top*](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)
-
-## UART
-
-The UART is used for serial communication to drive the serial console, which
-provides output during the boot process. This console allows the user to enter
-commands for testing and debugging.
-
-#### Requirements
-
-* 115K2 baud
-* 3-wire port (no handshaking)
-
-#### Implementation Notes
-
-You register this driver by setting up a structure (serial_device{}) and then
-call serial_register(). The AP typically has built-in serial functions that this
-driver can use.
-
-```none
-struct serial_device { /* enough bytes to match alignment of following func pointer */ char name[16]; int (*start)(void); int (*stop)(void); void (*setbrg)(void); int (*getc)(void); int (*tstc)(void); void (*putc)(const char c); void (*puts)(const char *s);#if CONFIG_POST & CONFIG_SYS_POST_UART void (*loop)(int);#endif struct serial_device *next;};
-```
-
-In the final shipping product, the console needs to run in silent mode. For
-example, this code in the driver tells the console to run in silent mode:
-
-if (fdtdec_get_config_int(gd-&gt;fdt_blob, "silent_console", 0))
-
-gd-&gt;flags |= GD_FLG_SILENT;
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=include/serial.h;h=14f863ed20ec73f67ed2df791ad2ad4b904b689c;hb=HEAD">include/serial.h</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=tree;f=drivers/serial;h=82deabb40ad2e94538a483ad8abfe9600b48d330;hb=HEAD">drivers/serial/</a></td>*
-*</tr>*
-*<tr>*
-*<td><b> Makefile</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/serial/Makefile;h=5e8b64873d9bb3beff8d9b7c41437908645601d8;hb=HEAD">drivers/serial/Makefile</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td>CONFIG_SYS_NS16550 <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/serial/serial_ns16550.c;h=c1c0134bcb3fdd8ec7e6c8a93e9f463291b5b9ca;hb=HEAD">drivers/serial/serial_ns16550.c</a></td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## USB Host
-
-USB host is used by Chrome OS in two ways:
-
-* *In recovery mode:* U-Boot software must be able to detect the
- presence of a USB storage device and load a recovery image from the
- device.
-* *For Ethernet connectivity:* On Chrome OS platforms without a
- built-in Ethernet connector, a USB-to-Ethernet adapter can be used
- to provide an Ethernet connection.
-
-On x86 systems, USB is often used to connect other peripherals, such as cameras
-and SD card readers, but Chrome OS does not require U-Boot drivers for these USB
-peripherals.
-
-U-Boot supports both the EHCI and OHCI standards for USB. Be sure to test a
-variety of common USB storage devices to ensure that they work with your U-Boot
-driver.
-
-#### USB Hub
-
-In some cases, the USB or AP is connected to a USB hub to expand the number of
-USB ports. The board file may need to power up this hub and configure it. Be
-careful to power up the hub only if USB is used by the system.
-
-#### EFI Partition Table
-
-Chrome OS uses an EFI partition table. To enable this table, add the following
-entry to the board file:
-
-* `#define CONFIG_EFI_PARTITION`
-
-#### Implementation Notes
-
-USB should not be initialized in the normal boot path. Loading a kernel from USB
-is a slow process (it could take a second or more) as well as a potential
-security risk.
-
-The two main functions to implement are the following:
-
-```none
-int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
-int ehci_hcd_stop(int index)
-```
-
-These functions create (and destroy) the appropriate control structures to
-manage a new EHCI host controller. Much of this interface is standardized and
-implemented by U-Boot. You just point U-Boot to the address of the peripheral.
-
-#### Configuration Options
-
-The configuration options for USB are specified in the board configuration file
-(for example, include/configs/seaboard.h). There are a number of #defines for
-different aspects of USB, including the following:
-
-<table>
-<tr>
-<td> CONFIG_USB_HOST_ETHER</td>
-<td> Enables U-Boot support for USB Ethernet</td>
-</tr>
-<tr>
-<td> CONFIG_USB_ETHER_ASIX</td>
-<td> Enables the driver for the ASIX USB-to-Ethernet adapter </td>
-</tr>
-<tr>
-<td> CONFIG_USB_ETHER_SMSC95XX</td>
-<td> Enables the driver for the SMSC95XX USB-to-Ethernet adapter</td>
-</tr>
-<tr>
-<td> CONFIG_USB_EHCI</td>
-<td> Enables EHCI support in U-Boot</td>
-</tr>
-<tr>
-<td> CONFIG_USB_EHCI_TEGRA</td>
-<td> Enables EHCI for a specific chip</td>
-</tr>
-<tr>
-<td> CONFIG_USB_STORAGE</td>
-<td> Enables a USB storage device</td>
-</tr>
-<tr>
-<td> CONFIG_CMD_USB </td>
-<td> Enables the USB command</td>
-</tr>
-</table>
-
-*<table>*
-*<tr>*
-*<td><b> Header File</b></td>*
-*<td><a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/usb/host/ehci.h;h=1e3cd793b6091650ed1e7ed61b6bfca3f7046a69;hb=HEAD">drivers/usb/host/ehci.h</a></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/usb/host/ohci.h;h=d977e8ff3ce31ee93990a68990590bafdc3800ea;hb=HEAD">drivers/usb/host/ohci.h</a></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Implementation File</b></td>*
-*<td>drivers/usb/host/ehci-controllerName.c</td>*
-*<td> *<table>* </td>*
-*<td> *<tr>*</td>*
-*<td> *<td>drivers/usb/host/ohci-controllerName.c</td>*</td>*
-*<td> *</tr>*</td>*
-*<td> *</table>*</td>*
-*</tr>*
-*<tr>*
-*<td> <b>Makefile</b></td>*
-*</tr>*
-*<tr>*
-*<td> <b>Example</b></td>*
-*<td> <a href="http://git.denx.de/?p=u-boot.git;a=blob;f=drivers/usb/host/ehci-tegra.c;h=a1c43f8331787c7cf84e0eabcf0d373ae1ebabe4;hb=HEAD">drivers/usb/host/ehci-tegra.c</a></td>*
-*</tr>*
-*</table>*
-
-*[back to
-top](/chromium-os/firmware-porting-guide/u-boot-drivers#TOC-Board-Configuration)*
-
-## Other sections in *U-Boot Porting Guide*
-
-1. [Overview of the Porting
-Process](/chromium-os/firmware-porting-guide/1-overview)
-
-2. [Concepts](/chromium-os/firmware-porting-guide/2-concepts)
-
-3. U-Boot Drivers (this page) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-summit/index.md b/chromium/docs/website/site/chromium-os/firmware-summit/index.md
deleted file mode 100644
index e928224f189..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-summit/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: firmware-summit
-title: Firmware Summit 2014
----
-
-Agenda and Slides
-
-* Chromium OS Firmware Overview
-* coreboot Overview and Features
-* coreboot Porting to x86
-* coreboot Porting to ARM
-* coreboot Porting to Mainboard
-* Depthcharge
-* Embedded Controller
-* Chromium Process \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/firmware-update/index.md b/chromium/docs/website/site/chromium-os/firmware-update/index.md
deleted file mode 100644
index 683a3c065c8..00000000000
--- a/chromium/docs/website/site/chromium-os/firmware-update/index.md
+++ /dev/null
@@ -1,328 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: firmware-update
-title: Firmware Update
----
-
-[TOC]
-
-## WARNING: Remember to backup your original firmware! The flash memory contains
-some device information that cannot be recovered if overwritten.
-
-## Glossary
-
-* **BCT (Binary Chip Timings)**
- * **BCT** contains timing parameters for theSOC and it used to set
- up its memory and basic peripherals, to allow it to read the
- boot loader. The BCT is packaged together with U-Boot for
- reading by the SOC on boot.
-* **Boot ROM**
- * An SOC's **Boot ROM** is responsible for setting up the SOC to a
- very basic level (using theBCT), setting up SDRAM and figuring
- out where the boot loader is. This is typically capable of
- loading the boot loader from USB, SPI flash, UART, eMMC / SD
- card and NAND flash. The Boot ROM is part of the SOC and cannot
- be changed other than by making a new chip. Some Boot ROMs
- include security features which require that boot code be signed
- by a special tool. Typically, Boot ROM consists of 16-32 KB of
- code.
-* **Device tree**
- * see **FDT**.
-* **DTB file (Device Tree Binary)**
- * A file containing a binary representation of a device tree
- created by the *device tree compiler* from the source *DTS
- file*.
-* **DTS file (Device Tree Source)**
- * A file containing a source representation of the device tee.
- This file is compiled into binary form for use by U-Boot and
- kernel.
-* **FDT (Flattened Device Tree)**
- * A *flattened device tree* describes the hardware that is seen by
- U-Boot and the kernel. The device tree consists of a number of
- nodes containing properties like memory addresses, interrupts,
- size, width / height (for LCD), etc. Each node also contains a
- `compatible` property which indicates which device driver should
- be used to implement the features provided by that node. We also
- use the FDT to pass provide configuration and verified boot
- information from U-Boot to the kernel. There is a different FDT
- for each board type, and even for each SKU (since a particular
- manufacturing run may change the chips that are used in some
- cases).
-* **GBB (Google Binary Block)**
- * This read-only area contains screen images for recovery mode and
- keys for both normal and recovery mode.
-* **SOC (System on Chip)**
- * A name for the integrated chips common in the ARM world. They
- include most peripherals on chip including SDRAM,control, SPI
- buses, NAND, USB and LCD. Roughly speaking a basic system can be
- created with an SOC, some SDRAM, some Flash and a power
- controller
-* **U-Boot**
- * The boot loader is responsible for setting up all required
- peripherals (such as LCD, SPI flash, UARTs, eMMC) and then
- loading and starting the kernel. On Chrome OS this includes
- security requirements, so we split U-Boot into two parts: a read
- only image that we ship with, and a read write image which can
- override this when we need to update the boot loader in the
- field. U-Boot is linked with the VBoot library which provides
- its security features. U-Boot is also responsible for taking the
- kernel's FDT, updating it with security and boot parameters, and
- presenting it to the kernel. There is a single U-Boot image for
- all boards for a single SOC type. For example, for Tegra2 we
- have one U-Boot image. All run-time configuration of U-Boot is
- done through the FDT.
-* **VBoot**
- * The verified boot library includes routines for accessing and
- checking keys and signatures. A detailed description of how this
- works [is provided
- here](/chromium-os/chromiumos-design-docs/verified-boot-data-structures).
-
-## `cros_bundle_firmware`
-
-### Summary
-
-This is a tool for creating a firmware image and writing it to your board. It
-can handle the following tasks:
-
-* Package together U-Boot (the boot loader) and a FDT to produce a
- boot image
-* Package together the boot image, a BCT and appropriate signature to
- product a signed image
-* Create a GBB with appropriate keys and images
-* Create a full firmware image containing all the sections required
- for boot
-* Write this image to a board through the USB A-A cable
-
-### Usage
-
-To create an image for a particular board, use:
-
-```none
-cros_bundle_firmware -b <board> -o <filename>
-```
-
-This will generate an image `<filename>` for the board. The tool finds files it
-needs in `/build/<board>/firmware`, things like `u-boot.bin`, the device tree
-source files (in dts subdir) and so on. There are options to specify each of
-these manually if you want to, and this is what the ebuild does. However, it
-does make for a very long command line. If you are unsure what files it is
-picking up, use -v3.
-
-By default `cros_bundle_firmware` is quiet. Unless there are warnings/errors,
-all you will see is progress, and a command prompt when done. Use -v2, -v3 or
-even -v4 to change that.
-
-Things you can do with this tool, which involve adding options:
-
-* Specify your own U-Boot image:
- * `-u u-boot.bin`
-* Specify the U-Boot used for flashing (if your U-Boot doesn't support
- it)
- * `-U /build/<board>/firmware/u-boot.bin`
-* Specify your own FDT source file:
- * `-d my-board.dts`
- * Note you will need to add a -I &lt;dir&gt; option for each
- include directory needed by your fdt. For example, `-I
- arch/arm/dts -I board/samsung/dts`
- * The FDT file is automatically compiled
-* Write the firmware to an SD card:
- * `-w sd:.`
- * The `.` means to write to the only SD card connected to your
- machine. You can explicitly name the card if you like. Try `-w
- sd` to get a list of options.
-* Write the firmware over USB to the board
- * `-w usb`
- * Note this works for Tegra, but currently (Apr-12) gives checksum
- errors for Exynos
-* Generate a minimal image just for testing with none of the GBB and
- other Chrome OS stuff
- * `-s`
-* Save all the temporary files so you can see what happened:
- * `-O <dir>`
-
-A full list of options is below, or use the --help flag.
-
-### Options
-
-```none
-Usage: cros_bundle_firmware [options]
-Options:
-  -h, --help            show this help message and exit
-  --add-config-str=ADD_CONFIG_STR
-                        Add a /config string to the U-Boot fdt
-  --add-config-int=ADD_CONFIG_INT
-                        Add a /config integer to the U-Boot fdt
-  -b BOARD, --board=BOARD
-                        Board name to use (e.g. tegra2_kaen)
-  --bootcmd=BOOTCMD     Set U-Boot boot command
-  --bootsecure          Boot command is simple (no arguments) and not
-                        interruptible
-  -c BCT, --bct=BCT     Path to BCT source file: only one can be given
-  -d FDT, --dt=FDT      Path to fdt binary blob .dtb file to use
-  --bl1=EXYNOS_BL1      Exynos preboot (BL1) file
-  --bl2=EXYNOS_BL2      Exynos Secondary Program Loader (SPL / BL2) file
-  --hwid=HARDWARE_ID    Hardware ID string to use
-  -B BMPBLK, --bmpblk=BMPBLK
-                        Bitmap block to use
-  -F FLASH_DEST, --flash=FLASH_DEST
-                        Create a flasher to flash the device (spi, mmc)
-  -k KEY, --key=KEY     Path to signing key directory (default to dev key)
-  -I INCLUDEDIRS, --includedir=INCLUDEDIRS
-                        Include directory to search for files
-  -m, --map             Output a flash map summary
-  -o OUTPUT, --output=OUTPUT
-                        Filename of final output image
-  -O OUTDIR, --outdir=OUTDIR
-                        Path to directory to use for intermediate and output
-                        files
-  -p, --preserve        Preserve temporary output directory
-  -P POSTLOAD, --postload=POSTLOAD
-                        Path to post-load portion of U-Boot (u-boot-post.bin)
-  -s, --small           Create/write only the signed U-Boot binary (not the
-                        full image)
-  -S SEABIOS, --seabios=SEABIOS
-                        Legacy BIOS (SeaBIOS)
-  -u UBOOT, --uboot=UBOOT
-                        Executable bootloader file (U-Boot)
-  -U UBOOT_FLASHER, --uboot-flasher=UBOOT_FLASHER
-                        Executable bootloader file (U-Boot) to use for
-                        flashing (defaults to the same as --uboot)
-  -C COREBOOT, --coreboot=COREBOOT
-                        Executable lowlevel init file (coreboot)
-  -v VERBOSITY, --verbosity=VERBOSITY
-                        Control verbosity: 0=silent, 1=progress, 3=full,
-                        4=debug
-  -w WRITE, --write=WRITE
-                        Write firmware to device (usb, sd)
-```
-
-## `cros_write_firmware`
-
-If you already have an image, you can use this tool to write it to an SD card or
-over USB. However, you might find '`cros_bundle_firmware -w`' more flexible.
-
-```none
-cros_write_firmware -b daisy -i <image> -w sd:.
-```
-
-## Updating your U-Boot to 2011.12 on Daisy
-
-You can do this without USB download using an SD card if you like. Please follow
-these steps:
-
-1. Get an SD card and put it into your card reader. The contents of
- this will be overwritten.
-2. Get the latest source:
-
- ```none
- $ repo sync
- ```
-
-3. Build everything
-
- ```none
- $ build_packages --board daisy
- ```
-
- ```none
- $ emerge-daisy chromeos-u-boot
- ```
-
- ```none
- $ emerge-daisy sys-boot/chromeos-bootimage
- ```
-
-4. Write the firmware to your SD card (-F means to create an automatic
- flasher)
-
- ```none
- $ cros_bundle_firmware --add-config-int load_env 1 -b daisy -w sd:. -F spi
- # Add '-d exynos5250-snow' for snow
- ```
-
-5. Insert the SD card into your daisy board
-6. Hold down the button which is labelled T20_REC / FW_DEBUG / DFU_REC
- depending on whether you are using [Servo 2](/chromium-os/servo),
- Daisy or Min-Servo.
-7. Press COLD_RST_L / KBC_RST / C_RST, then PWR_BUTTON to switch on, to
- boot from the SD card.
-8. When it starts up, you should see a console on your servo UART, and
- it will start flashing your board.
-9. When finished, type 'reset' into the terminal, or press COLD_RST_L /
- KBC_RST / C_RST again, then PWR_BUTTON to switch on.
-
-Steps 8 can also be done via servod:
-
-```none
-dut-control fw_up:on fw_up cold_reset:on cold_reset cold_reset:off cold_reset \
-            pwr_button:press pwr_button sleep:2 pwr_button:release pwr_button \
-            cold_reset:off cold_reset fw_up:off fw_up cpu_uart_en:on 
-```
-
-## x86 Development Flow
-
-**Building from the firmware branch**
-
-The ToT is not guaranteed to build usable firmware for older boards, so it is
-often necessary to retrieve an old branch to do so. These steps were used to
-build the Link firmware from source:
-
-<pre><code>
-repo init -u <i>&lt;internal-manifest-url&gt;</i> \
-    --repo-url='https://chromium.googlesource.com/external/repo.git'
-    -b firmware-link-2695.B
-repo sync
-cros_workon-link start chromeos-base/chromeos-ec \
-    sys-boot/chromeos-u-boot \
-    chromeos-base/vboot_reference \
-    chromeos-base/vboot_reference-firmware \
-    sys-boot/chromeos-coreboot-link \
-    sys-boot/chromeos-seabios \
-    chromeos-base/chromeos-firmware-link
-emerge-link chromeos-ec \
-    vboot_reference-firmware \
-    chromeos-u-boot \
-    chromeos-coreboot-link \
-    chromeos-bootimage
-</code></pre>
-
-This should create `image-link.bin` in `/build/link/firmware` under the chroot.
-
-**Using flashrom**
-
-The `flashrom` command can be run from a root shell on the device, or it can be
-used from a development PC connected via servo. See
-[here](/chromium-os/packages/cros-flashrom) for more detailed instructions on
-usage.
-
-**Using the SPI flash emulator**
-
-The instructions in this section assume that you have a [Dediprog
-EM100](http://www.dediprog.com/pd/spi-flash-solution/em100pro) hooked up to the
-system. This hardware allows for downloading a new firmware image to the board
-in mere seconds, rather than waiting a few minutes to reflash a physical SPI
-memory device.
-
-To build a new firmware image, write it to your em100 and reset your link (using
-servo2):
-
-```none
-$ USE=dev emerge-link chromeos-u-boot
-$ cros_bundle_firmware -b link --bootcmd vboot_twostop -w em100
-```
-
-(the 'dev' flag reduces the 870KB of spew from the U-Boot ebuild, printing only
-warnings and errors)
-
-If you want a U-Boot serial console, but don't want to coreboot to print out all
-its serial info, you can build a coreboot WITHOUT the `USE=pcserial` flag, and
-then:
-
-```none
-$ cros_bundle_firmware -b link --add-node-enable console 1 --bootcmd vboot_twostop -w em100
-```
-
-This enables the console node in the device tree, thus turning on the serial
-console in U-Boot. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/forced-re-enrollment/index.md b/chromium/docs/website/site/chromium-os/forced-re-enrollment/index.md
deleted file mode 100644
index 80e7deb9a7a..00000000000
--- a/chromium/docs/website/site/chromium-os/forced-re-enrollment/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: forced-re-enrollment
-title: Forced re-enrollment
----
-
-The enrolled Chrome OS devices can be reset. The reset process cleans all the
-state-full partitions and the TPM. On the first boot after reset, the device is
-clean. Normally it would lose the enrollment and all the policy that comes with
-it. But in most of the cases, the admins want the device to remain enrolled
-after reset. For this purpose a process that forces the device to be re-enrolled
-after reset was designed and implemented. The process is called forced
-re-enrollment (FrE).
-
-When is it applied?
-
-The device is forced to re-enroll only after device reset if the admin chose to
-enable FrE in the admin console.
-
-How does it look from user perspective?
-
-On first boot after reset the previously enrolled device has to connect to
-internet to proceed. After user chooses the connection and the device is
-connected, it will check with DM server if the device has FrE enabled. If that's
-the case, the user is presented with enrollment screen with the enrollment
-domain given (as received from DM server). User has to enter credentials for the
-domain and the device will do the normal enrollment process in the background
-that includes downloading and saving the device and user policy.
-
-What happens from the code perspective?
-
-There are two separate processes that can happen on the device:
-
-1. The check to know if the device is forced into re-enrollment.
-
-2. The enrollment process itself.
-
-The check for FrE initially was happening at every device reset for every Chrome
-OS device. It meant that every device after reset would communicate with DM
-server to check if it's forced to re-enroll. That generated a privacy concern
-that it would allow Google servers to get information about the devices every
-time they reset. To alleviate this concern a separate process called hash dance
-has been designed and implemented.
-
-Hash dance
-
-The purpose of hash dance is to communicate with DM server in a way that would
-provide as little information as possible to the server about the device, and
-yet identify if the device is forced to re-enroll. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/fwmp/index.md b/chromium/docs/website/site/chromium-os/fwmp/index.md
deleted file mode 100644
index d9b491497d8..00000000000
--- a/chromium/docs/website/site/chromium-os/fwmp/index.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: fwmp
-title: Firmware Management Parameters
----
-
-[TOC]
-
-Firmware Management Parameters (aka FWMP) are optional settings that can be
-stored in the TPM to control some aspects of developer mode for developers and
-system administrators.
-
-## What's in the FWMP?
-
-The FWMP contains a set of flags and an optional developer key hash.
-
-The flags are as follows:
-
-<table>
-<tr>
-<td> Flag</td>
-<td>Name </td>
-<td>Meaning </td>
-</tr>
-<tr>
-<td> 0x01</td>
-<td> FWMP_DEV_DISABLE_BOOT</td>
-<td>Disable developer mode. If this flag is set, booting the device in developer mode will take you straight to the TONORM screen, which asks you to confirm turning developer mode off.</td>
-</tr>
-<tr>
-<td> 0x02</td>
-<td> FWMP_DEV_DISABLE_RECOVERY</td>
-<td>Disable developer features of recovery images.</td>
-</tr>
-<tr>
-<td> 0x04</td>
-<td> FWMP_DEV_ENABLE_USB</td>
-<td>Enable Ctrl+U to boot from USB.</td>
-<td>Same effect as 'crossystem dev_boot_usb=1'</td>
-</tr>
-<tr>
-<td> 0x08</td>
-<td> FWMP_DEV_ENABLE_LEGACY</td>
-<td>Enable Ctrl+L to boot from legacy OS</td>
-<td>Same effect as 'crossystem dev_boot_legacy=1'</td>
-</tr>
-<tr>
-<td> 0x10</td>
-<td> FWMP_DEV_ENABLE_OFFICIAL_ONLY</td>
-<td>Only accept developer images signed with the official Chrome OS key.</td>
-<td>Same effect as 'crossystem dev_boot_signed_only=1'</td>
-</tr>
-<tr>
-<td> 0x20</td>
-<td> FWMP_DEV_USE_KEY_HASH</td>
-<td>Only accept developer images signed a specific key. If this is set, the SHA-256 digest of the kernel key data is compared with the digest stored in the FWMP. This enables you to decide what developer images will boot on your device, instead of blindly trusting them all. Particularly handy when combined with FWMP_DEV_ENABLE_USB.</td>
-</tr>
-</table>
-
-The key hash is the SHA-256 of the key data for the kernel key. There isn't a
-tidy way to extract this from a keyblock yet; coming soon.
-
-## Setting the FWMP
-
-Use cryptohome to set the FWMP. To do this, the TPM must just have been owned,
-or you must know the owner password:
-
-> cryptohome --action=set_firmware_management_parameters
-> --flags={flags_as_decimal_or_0xhex}
-> \[--developer_key_hash={hash_as_hex_string}\]
-
-To remove the FWMP:
-
-> cryptohome --action=remove_firmware_management_parameters
-
-And, of course, you can see what it contains; this works even if you don't know
-the owner password:
-
-> cryptohome --action=get_firmware_management_parameters
-
-System administrators can automatically set the FWMP on enterprise-enrolled
-devices during the initial device enrollment.
-
-## Removing the FWMP
-
-If you have somehow locked yourself out of your system - say, by setting
-FWMP_DEV_DISABLE_BOOT, or by setting FWMP_DEV_USE_KEY_HASH but specifying the
-wrong hash, all is not lost.
-
-If your Chrome OS device is NOT enterprise-enrolled, disable developer mode,
-recovery your system to a fresh state, then log in. That will automatically
-remove the FWMP. And whatever else was on your system.
-
-If your Chrome OS device is enterprise-enrolled, see your system administrator.
-
-## I Can't Get Into Developer Mode
-
-If you've enabled developer mode, and you're getting this warning at boot time:
-
-> Developer mode is disabled on this device by system policy.
-
-> For more information, see http://www.chromium.org/chromium-os/fwmp
-
-that's because FWMP_DEV_DISABLE_BOOT is set. See the previous section on
-removing the FWMP.
diff --git a/chromium/docs/website/site/chromium-os/gentoo-package-upgrade-process/index.md b/chromium/docs/website/site/chromium-os/gentoo-package-upgrade-process/index.md
deleted file mode 100644
index 689b9e86099..00000000000
--- a/chromium/docs/website/site/chromium-os/gentoo-package-upgrade-process/index.md
+++ /dev/null
@@ -1,436 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: gentoo-package-upgrade-process
-title: Portage New & Upgrade Package Process
----
-
-[TOC]
-
-#### Deprecation warning
-
-**This page has been migrated!**
-
-[Please refer to the updated, in-repo copy
-instead](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/portage/package_upgrade_process.md).
-Feel free to contribute or file bugs if it is in any way lacking.
-
-### Purpose
-
-This page documents the process of upgrading a Portage package in our source to
-the latest upstream version, or for pulling in a new package that doesn't yet
-exist (since that's the same thing as upgrading from version &lt;none&gt;).
-These instructions are intended for Chromium OS developers.
-
-The upgrade process documented here uses a script, called cros_portage_upgrade,
-developed to help automate/simplify this process. It is not required that you
-use this script, and if you are confident that you can update packages in
-another way you are free to do so. Some of the FAQ on this page may still be of
-use to you, in any case.
-
-### Quickstart
-
-A quick reminder of the steps to perform in your chroot set up per [Chromium OS
-Developer Guide](http://www.chromium.org/chromium-os/developer-guide):
-
-1. Enter chroot: **$REPO/chromite/bin/cros_sdk**
-2. Set up boards to test on: **~/trunk/src/scripts/setup_board
- --board=daisy**
-3. Start a new git branch in portage-stable repo:
- cd ~/trunk/src/third_party/portage-stable**
- git checkout -b NEWBRANCH --track remotes/cros/master**
-4. Upgrade package locally:
- **cros_portage_upgrade --upgrade --board=&lt;board&gt;:&lt;board&gt;...
- some_package1 some_package2 ...**
-5. Repeat previous step as needed, fixing any upgrade errors that
- appear.
-6. Test. Yes. Really. You.
-7. Add BUG/TEST fields to commit message: **git commit --amend**
-8. upload change for review: **repo upload .**
-9. And later, abandon branch: **git branch -D NEWBRANCH**
-
-### Assumptions
-
-The following assumptions are made with these instructions:
-
-* You know which package or packages you want to upgrade.
-* You know how you intend to specifically test the package(s) after
- the upgrade (beyond the basic smoke tests).
-* You are familiar with the build environment from a developer
- perspective. You know how to start branches, amend commits, upload
- commits, end branches, etc. See the [Chromium OS Developer
- Guide](http://www.chromium.org/chromium-os/developer-guide).
-
-### Brief Background
-
-Any Portage packages, upstream included, can be marked as stable or unstable for
-any architecture. You don't have to know anything more about this detail unless
-you need to upgrade a package to an unstable version. However, this happens
-somewhat frequently. Perhaps a feature you need is only available in the
-absolute latest version of a package, but that version has not been marked
-stable for x86, yet. If you do need to upgrade to an unstable version check the
-appendix entry below.
-
-The chromiumos source has projects that are portage "overlays", all under
-src/third_party. Three of them are of interest here.
-
-1. The src/third_party/portage overlay represents a snapshot of the
- upstream Portage source. Currently the snapshot is really old but
- there is a project underway to update it more regularly. This
- overlay used to serve as the default source for all Portage packages
- that we use. Now it serves as an upstream reference snapshot and
- nothing more.
-2. The src/third_party/portage-stable overlay has copies of all
- upstream Portage packages that we use unaltered. When we "upgrade" a
- package, what we are really doing is putting a copy of the current
- upstream package into this overlay.
-3. The src/third_party/chromiumos-overlay is probably familiar to you.
- For package upgrade purposes, it will only be used in the following
- scenario:
- 1. If a package is locally patched before the upgrade, then you
- will probably have to port the local patch to the newer version
- as well. That should be done in this overlay.
-
-### The Steps
-
-#### Plan your upgrade
-
-Figure out which package or packages you want to upgrade, using their full
-"category/package" name (e.g. sys-apps/dbus). Decide whether you want to upgrade
-them to the latest stable or unstable versions. Generally, your first choice
-should be to upgrade packages to the latest **stable** upstream version.
-
-Note whether any of the packages you need to upgrade are locally patched. This
-means that somebody, possibly you, has made a patch to the package that we are
-using right now. It is important to determine what should happen to that patch
-after the upgrade. Inspect the git history for the patch, talk to the committer,
-inspect the patch, etc.
-
-If the package lives in the portage-stable overlay, you do not need to worry
-about this as we do not permit patches to be made in there. For all other
-overlays, it's pretty much guaranteed there are custom changes in play.
-
-* If the patch was done to backport a change from upstream, then
- simply updating the package to the upstream version should be
- sufficient and the patch can be ignored. Be sure to confirm which
- version the patch was backported from.
-* If the patch is still required, then you will have to re-apply the
- patch after the upgrade. Go through the upgrade process, except for
- the final testing and uploading. Then follow the [guidelines for
- re-applying a patch](#AppendixReapplyPatch) below.
-
-Decide which boards you want to try the upgrade for. You should include **one
-board from each supported arch type** (e.g. amd64, arm, arm64), unless the
-package is only used on one arch for some reason. Typically, there is no reason
-to specify more than one board per architecture type, unless you know of
-board-specific testing that must be done. If your package or packages are used
-on the host, then you want to upgrade for the host (which can be done at the
-same time as the boards). Many packages are used on a chromeos board as well as
-the host (the "host" is the chroot environment). Choose boards that you can test
-the upgrades on, or boards that you know the packages need to be tested on.
-
-#### Prepare Environment
-
-You probably want to 'repo sync' your entire source tree.
-
-```none
-cd ~/chromiumos && repo sync -j 4
-```
-
-Prepare a new branch in the src/third_party/portage-stable project. This is
-where the upgrades will be staged/committed.
-
-```none
-cd ~/chromiumos/src/third_party/portage-stable && repo start pkg_upgrade .
-```
-
-Now you need to setup all boards that you will need. Note: this is not required
-if you're upgrading a host-only package.
-
-```none
-cros_sdk --enter
-./setup_board --board=amd64-generic
-./setup_board --board=link
-./setup_board --board=daisy
-```
-
-#### Upgrade Locally
-
-For these instructions, let's say you want to upgrade "media-libs/alsa-lib",
-"media-sound/alsa-headers", and "media-sound/alsa-utils" on boards
-"amd64-generic" and "daisy". You plan to try the stable upstream versions first.
-These commands must be run from **within your chroot**. If you also need to
-upgrade on the host (chroot/amd64) use the --host option, which can be used in
-combination with the --board option or without it.
-
-```none
-cros_portage_upgrade --upgrade --board=amd64-generic:daisy media-libs/alsa-lib media-sound/alsa-headers media-sound/alsa-utils
-```
-
-If the script runs all the way through without any problems the first time then
-you have no missing dependencies or other build-related obstacles to the
-upgrade. But you still need to test the upgrade results! The upgrade should be
-prepared as a commit in src/third_party/portage-stable. You should inspect/edit
-the commit message before uploading it, though.
-
-If the script does not run all the way through the first time, it should give
-you the means to determine why. Typically, this means that one or more of the
-upgraded packages could not be built (using emerge) after the upgrade. This may
-be due to a package dependency that must also be upgraded, or a package mask
-that must be edited. In any case, you are given the output of the failing emerge
-command so that you can determine for yourself what is needed. Make the
-necessary change (perhaps adding another package to upgrade at the command
-line), then run again.
-
-To upgrade to unstable versions, simply add the --unstable-ok option and follow
-the instructions. Or see the [guidelines for upgrading to unstable
-versions](/chromium-os/gentoo-package-upgrade-process#AppendixUnstableVersion)
-below.
-
-Run cros_portage_upgrade with --help to see addition options and usage. If you
-are having difficultly with this step please do not hesitate to contact
-chromium-os-dev@chromium.org for assistance.
-
-#### Clean up Commit
-
-You may also need to clean up the files in your commit. Our convention is to
-only check in files that are used, and some upgrades come with extra files (such
-as unused patch files, for example). You can usually tell by inspecting the list
-of files and the ebuild whether any files are unused. You can remove these files
-from your commit with a command like the following within portage-stable:
-
-```none
-git reset HEAD~ <filepath> ; rm <filepath> ; git commit --amend
-```
-
-If you already built your upgraded package, make sure to do it again after
-cleaning up extraneous files to verify that you haven't removed something
-important!
-
-#### Testing
-
-Use common sense, and your specific expertise, to test the upgraded packages.
-The changes are active in your source right now, so you can build your target
-boards to test. If your package is added to the host (chroot) you'll need to
-emerge it onto your chroot and test it there as well.
-
-You probably want to run at least the suite:smoke tests for each board, which
-you can do by following the tips at
-<https://www.chromium.org/chromium-os/testing> (Googlers may
-also use the tips at [goto/cros-test](http://goto/cros_test)). In particular,
-you can use [trybot](/chromium-os/build/local-trybot-documentation) to determine
-what effect your upgrade will have on the greenness of the waterfall.
-
-One common cause of failure is that upstream has introduced new default
-[USE](/chromium-os/how-tos-and-troubleshooting/portage-build-faq) flags. For
-example, if the upstream ebuild was set to "-foo" before (which defaults "foo"
-to off) and now is set to "+foo", a new dependency or a new runtime behavior
-might have been introduced by the change. You would need to evaluate the change
-and determine whether the new USE flag default is one that we should adapt to.
-If, on the other hand, the flag adds a dependency on something that we don't use
-in Chrome OS, you might overlay the USE flag default in the `chromiumos-overlay`
-repo's `profiles/targets/chromeos/package.use` in a separate commit, first,
-before submitting the `portage-stable` upgrade. See below for an explanation of
-how chromiumos-overlay functions but note that you do **not** need to copy the
-upstream package into chromiumos-overlay to override the default USE flags.
-
-Beyond the suite:smoke tests, test whatever you think makes sense given the
-packages you just upgraded.
-
-#### Uploading
-
-When you are satisfied that the upgrade is safe to push, **you still need to
-edit the commit message that was created for you** by cros_portage_upgrade. Add
-a bug number, test details, and any other details you want.
-
-```none
-cd ~/chromiumos/src/third_party/portage-stable
-git commit --amend
-```
-
-Upload the usual way.
-
-```none
-cd ~/chromiumos/src/third_party/portage-stable
-repo upload .
-```
-
-Then go through the usual code review process on gerrit.
-
-#### Clean up Environment
-
-After your changelist is through review and submitted to the tree, you will want
-to get off the branch you created in src/third_party/portage-stable. You know
-the drill.
-
-```none
-cd ~/chromiumos/src/third_party/portage-stable
-repo abandon pkg_upgrade .
-```
-
-### Appendices
-
-#### **Re-applying a patch after upgrade**
-
-It is not uncommon for a package to be locally patched in the source now
-(typically any upstream package in the src/third_party/chromiumos-overlay
-overlay). To upgrade that package the patch will (probably) need to be applied
-again to the upgraded version. Let's say you upgraded the "foo/bar" package to
-upstream version "1.2.3", but you need to re-apply a patch to it that was
-previously applied to version "1.1.1" (perhaps "1.1.1-r1" is the active version
-now with the patch).
-
-Allow the cros_portage_upgrade script to complete the pristine upgrade in
-src/third_party/portage-stable for the package first. Then copy the entire
-directory over to the analogous location under
-src/third_party/chromiumos-overlay, creating the directory if necessary You will
-commit the unaltered package as it is in the first changelist, but first you
-must mark it as unstable so that it will not be used. To do so, add a new file
-like the following to the
-src/third_party/chromiumos-overlay/profiles/default/linux/package.mask/
-directory:
-
-```none
-# Copyright 2015 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file
-# TODO(username): Masked for testing!
-=foo/bar-1.2.3
-```
-
-The above masks the specific package version "foo/bar-1.2.3" for all targets.
-(If your intent is to patch the ebuild only for certain platforms please speak
-to the build team as this is generally unnecessary and strongly discouraged.)
-Now you are ready to submit the pristine copy of the upstream package to
-chromiumos-overlay.
-
-Next make a copy of the ebuild file with a revision suffix. For example:
-
-```none
-cp bar-1.2.3.ebuild bar-1.2.3-r1.ebuild
-```
-
-Then re-apply the patch to the new revision ebuild, by copying the epatch line
-or lines in the previously patched ebuild (bar-1.1.1-r1.ebuild). Be sure to keep
-whatever patch files under the "files" directory are required for the patch,
-too. You might have to rename them (e.g. cp files/bar-1.1.1-something.patch
-files/bar-1.2.3-something.patch). **Be careful to apply the patch responsibly**,
-because the source file(s) the patch alters may have changed since the patch was
-created. If so, you can create a new patch or consult the original patch author
-(if not you).
-
-To inspect the source files involved, both before and after patching, use the
-"ebuild" utility. For example, to see the source files for "foo/bar-1.2.3"
-before any patching run this **inside chroot**, use a command like the following
-examples:
-
-```none
-sudo ebuild `equery which foo/bar-1.2.3` unpack
-sudo ebuild-amd64-generic `equery-amd64-generic which foo/bar-1.2.3` unpack
-sudo ebuild-daisy `equery-daisy which foo/bar-1.2.3` unpack
-```
-
-The above will unpack source files and tell you where they are. You can inspect
-them to verify whether the source file(s) the patch touches have changed between
-versions. To see what the source files look like after patching, use the same
-commands as above but replace "unpack" with "prepare". Also, make sure your
-newly patched version is the version being picked up by the build system by
-running "equery which" **inside chroot**:
-
-```none
-equery which foo/bar
-equery-amd64-generic which foo/bar
-equery-daisy which foo/bar
-```
-
-Make sure your new ebuild is the one being picked up. Your upgrade with patch is
-ready for testing now. Return to the testing step of the process above.
-
-Remember to delete the new entry you made to the package.mask file.
-
-Don't forget to discard the upgrade in portage-stable that cros_portage_upgrade
-created for you.
-
-#### **Handling eclasses**
-
-Some packages make use of
-[eclasses](http://www.gentoo.org/proj/en/devrel/handbook/handbook.xml?part=2&chap=2),
-which are essentially ebuild code factored out into library files shared across
-multiple packages. If an ebuild file includes an inherit statement, then it uses
-an eclass. You don't have to check for this before you upgrade. The upgrade
-script will attempt to detect when an eclass must be upgraded along with a
-package upgrade, but if it is unable to you must upgrade the eclass yourself. If
-you are not sure how to do that please consult with a member of the build team.
-
-#### **Upgrading to unstable version**
-
-If you need to upgrade a package to an unstable version for a compelling reason,
-then use the --unstable-ok option to the cros_portage_upgrade script and it will
-try to do the right thing. What it does is edit the KEYWORDS line (or lines) in
-the ebuild to mark all architectures as stable. *This is the only exception to
-the rule that packages in portage-stable should be unedited.* You should inspect
-the resulting ebuild file or files to confirm that the edit worked correctly,
-and file a bug on cros_portage_upgrade if it did not.
-
-### FAQ
-
-**Q**: *I ran the upgrade script multiple times, and the runtime dropped
-drastically after the first time. What gives?*
-**A**: The cros_portage_upgrade script needs to have a local checkout of the
-upstream origin/gentoo source to use as a reference when it runs. By default, it
-creates a clone in a temporary directory and then re-uses it in later runs
-(updating it each time). This explains the runtime symptoms. Messages from the
-script should say something to this effect, as well.
-
-Alternatively, you can clone your own copy of upstream origin/gentoo to point
-cros_portage_upgrade to, using the --upstream option. This will have the same
-runtime benefits if you run more than once. Do this inside your chroot:
-
-```none
-cd
-git clone https://chromium.googlesource.com/chromiumos/overlays/portage gentoo-portage
-cd gentoo-portage/
-git checkout origin/gentoo
-```
-
-Then add the following option when you run cros_portage_upgrade:
---upstream=$HOME/gentoo-portage .
-
-**Q:** *Why doesn't the upgrade script just run on all boards/architectures that
-matter at once? Why do I have to specify them?*
-**A:** The boards that "matter" vary. The same is true, to a lesser extent, with
-architectures. You know how you intend to test the package, and you may have
-plans to test it on specific boards for specific reasons. Plus,
-cros_portage_upgrade requires that setup_board be completed for all specified
-boards because it evaluates packages within the context of that board, making
-use of emerge-&lt;board&gt; and equery-&lt;board&gt; utilities heavily. If you
-already have a reasonable subset of boards setup, or available to test on, then
-running on those boards makes sense.
-
-**Q:** *Why doesn't the upgrade script run setup_board for me as needed?*
-**A:** This script is intended to live within the build environment we have
-today. It lives between the setup_board and build_packages stages, which all
-developers are familiar with. The script is not intended to be a master script
-with knowledge of build process order.
-
-**Q:** *Why doesn't the upgrade script create the branch in
-src/third_party/portage-stable for me?*
-**A:** This was considered, but discarded in favor of transparency. You need to
-know that a branch was created because you must amend the commit message, upload
-it, and especially abandon the branch in the end. If you created the branch in
-the first place you are more likely to be aware that you need to abandon the
-branch to return to your previous state.
-
-**Q:** *Why can't the upgrade script create a complete commit message so no
-amend is needed, then do the upload and abandon steps as well?*
-**A:** Firstly, only you know what tests you will run to verify the upgrade and
-those should be mentioned in the commit message. Secondly, there are many
-scenarios where the upgrade result is not final and requires
-intervention/repetition by you.
-
-**Q:** *How do you install a **new** package that is not currently installed? I
-get the "The following packages were not found in current overlays (but they do
-exist upstream): ..." error.*
-**A:** Make sure you pass --upgrade to the script since installing a new package
-is the same thing as upgrading it from &lt;none&gt;.
diff --git a/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/ChromeOSCompatibilitylist-20091121-A.xlsx.sha1 b/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/ChromeOSCompatibilitylist-20091121-A.xlsx.sha1
deleted file mode 100644
index b2a4fb4b453..00000000000
--- a/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/ChromeOSCompatibilitylist-20091121-A.xlsx.sha1
+++ /dev/null
@@ -1 +0,0 @@
-38642b35f655cd5208333a857d730d01eb3ac184 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif.sha1 b/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif.sha1
deleted file mode 100644
index e0376d9e02f..00000000000
--- a/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2324fb343a0d41175711fd22bb28cf93e9e01e0a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/index.md b/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/index.md
deleted file mode 100644
index c809f46fba3..00000000000
--- a/chromium/docs/website/site/chromium-os/getting-dev-hardware/dev-hardware-list/index.md
+++ /dev/null
@@ -1,470 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/getting-dev-hardware
- - Getting Developer Hardware
-page_name: dev-hardware-list
-title: Developer Hardware
----
-
-[TOC]
-
-***Warning: This page is for developers who both know how to build Chromium OS
-and aren't afraid to take a screwdriver to their computer.***
-
-## Introduction
-
-The list at the bottom of this page is a place for developers to contribute
-information about which developer systems are known to run Chromium OS,
-including what functionality works and what is broken. Please include details
-only on systems based on Chromium OS that **do not require changes to build**
-(no additional drivers, new modules, changes to config files, and so on).
-Systems listed here need to **run the first time** with the latest, unmodified
-Chromium OS source code.
-
-Please note that this list is not an endorsement of any particular system or
-hardware. This list is for developers to have systems to test and help other
-developers find hardware on which they can develop Chromium OS. We encourage all
-hardware vendors to to get their components working with Chromium OS. One of the
-best ways to achieve this goal is open-source, high-quality drivers for your
-components.
-
-Also note that this list is updated by request; it can get stale, and the
-presence of a device here is not a guarantee that Chromium OS will run on it.
-(The fact that someone got it to run at one point makes it more likely that one
-could get it to run again with a bit of work, though.) If you'd just like to
-give Chromium OS a try, your best bet is to run it on a virtual machine, as
-described on the [Running a Chromium OS image under
-KVM](/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines)
-page.
-
-If you have questions about getting Chromium OS to run or would like to help get
-functionality working for a particular system, please join the [chromium-os-dev
-discussion group](http://groups.google.com/group/chromium-os-dev).
-
-### Conventions
-
-The list has the following columns:
-
-<table>
-<tr>
-Brand & Model Number
-<td>A brand and model number that are specific enough to indicate major components, such as which CPU is used</td>
-</tr>
-<tr>
-<td>If "OK", basic wifi functionality works: link comes up and connects to a network (open/WPA). "No" indicates it's known to be broken. "N/A" means not applicable: there is no wifi card. If buying a new machine, try to choose one with working wifi. If you have a machine with non-working wifi, we recommend replacing the mini-PCIe card with an Atheros 9285 or Intel part (most Intel cards work).</td> Wifi
-</tr>
-<tr>
-Trackpad <td>If <a href="/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif"><img alt="image" src="/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif"></a>, the onscreen cursor can be controlled by the system's trackpad</td>
-</tr>
-<tr>
-<td><b>Suspend/Resume</b></td>
-<td>If <a href="/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif"><img alt="image" src="/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif"></a>, the system will suspend/resume when the lid is closed/opened or power button is pressed</td>
-</tr>
-<tr>
-Comments & Caveats <td>Other notes about the system that are important for other developers to know</td>
-</tr>
-<tr>
-Contact <td>Manufacturer contact email for hardware related questions about the system and Chromium OS</td>
-</tr>
-<tr>
-<td>Help other developers find this system!</td> Buy Link
-</tr>
-</table>
-
-If a feature doesn't work (no [<img alt="image"
-src="/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif">](/chromium-os/getting-dev-hardware/dev-hardware-list/icon-checkmark.gif)),
-add a comment with details on how the feature doesn't work or how to fix it.
-
-### How to edit the list
-
-Anyone signed into an **@chromium.org** address can modify this list. (If you
-don't see an **Add item** button below, [sign
-in](https://www.google.com/a/UniversalLogin?md=chromium.org&continue=https%3A%2F%2Fsites.google.com%2Fa%2Fchromium.org%2Fdev%2Fchromium-os%2Fgetting-dev-hardware%2Fdev-hardware-list&service=jotspot).
-One way to get an @chromium.org address is to be a
-[committer](/getting-involved/become-a-committer).) In the spirit of wiki, the
-community is encouraged to remove inaccurate or unreproducible results. Repeat
-offenders will suffer the wrath of the wiki gods.
-
-If you do not have an @chromium.org address, feel free to e-mail
-[vapier@chromium.org](mailto:vapier@chromium.org) with the details you'd like to
-have added below.
-
-Note that all Chrome OS branded devices should also run Chromium OS. We won't
-bother enumerating those.
-
-## Developer hardware list
-
-<table>
- <tr>
- <th>Brand & Model Number</th>
- <th>Wifi</th>
- <th>Ethernet</th>
- <th>Trackpad</th>
- <th>Suspend/Resume</th>
- <th>Comments & Caveats</th>
- <th>Contact</th>
- <th>Buy Link</th>
- </tr>
- <tr>
- <td>Fujitsu Lifebook T5010</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Compaq 6720</td>
- <td>No</td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- <td>juanmabaiu@gmail.com</td>
- <td></td>
- </tr>
- <tr>
- <td>Samsung NC10</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>Wifi: Atheros AR50007EG, Ethernet: Marvell Yukon 88E8040</td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Toshiba Satellite A205-S5000</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>memory card reader doesn't work; acted laggy until sleep/resume was done</td>
- <td></td>
- <td>http://www.amazon.com/Toshiba-Satellite-A205-S5000-Celeron-1-86GHz/dp/B001NJOIC8/</td>
- </tr>
- <tr>
- <td>Asus Eee PC 1008HA Seashell 10.1-Inch Pearl Black Netbook</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>http://www.amazon.com/1008HA-Seashell-10-1-Inch-Pearl-Netbook/dp/B0029QMDZI</td>
- </tr>
- <tr>
- <td>Toshiba mini NB200/5 10.1 inch Netbook w/ fullsize keyboard</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>Intel GMA 950 graphics and 802.11b/g (Atheros LAN)</td>
- <td>http://laptops.toshiba.com/mini</td>
- <td>http://www.toshibadirect.com/td/b2c/laptops.to?catagory=Netbook</td>
- </tr>
- <tr>
- <td>Acer AOP531h</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>This unit may ship with Atheros (works) or Broadcom (does not work) wifi module, you can check Network Adapters under Device Manager in Windows, or FCC stickers.</td>
- <td></td>
- <td>http://www.acer.com/worldwide/ select location and go to "Where to Buy" page for a list of vendors </td>
- </tr>
- <tr>
- <td>Asus Eee PC 901</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>http://computers.shop.ebay.com/PC-Laptops-Netbooks-/177/i.html?_nkw=EEEPC+901&_catref=1&_fln=1&_trksid=p3286.c0.m282 </td>
- </tr>
- <tr>
- <td>Samsung N150+ (Samsung NP-N150-KP01CZ)</td>
- <td>OK</td>
- <td></td>
- <td></td>
- <td>on</td>
- <td>Brightness is not configurable: high when powered by external source, low when running on battery. Suspend takes a while to finish.</td>
- <td>noxx2cz@gmail.com</td>
- <td></td>
- </tr>
- <tr>
- <td>Dell Mini 10V</td>
- <td>No</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>Need to replace wifi card - both Atheros and Intel verified to work</td>
- <td></td>
- <td>https://ecomm2.dell.com/dellstore/basket.aspx?c=us&cs=19&l=en&s=dhs&itemtype=CFG</td>
- </tr>
- <tr>
- <td>Acer AOD250</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>This unit may ship with Atheros (works) or Broadcom (does not work) wifi module, you can check Network Adapters under Device Manager in Windows, or FCC stickers.</td>
- <td></td>
- <td>http://www.acer.com/worldwide/ select location and go to "Where to Buy" page for a list of vendors</td>
- </tr>
- <tr>
- <td>Asus Eee PC 900HA</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>fans may not work?</td>
- <td></td>
- <td>http://www.amazon.com/Eee-PC-900-8-9-Inch-Processor/dp/B00191PKJK</td>
- </tr>
- <tr>
- <td>Asus Eee PC 1000/w SSD</td>
- <td></td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>http://www.amazon.com/10-Inch-Netbook-Processor-Storage-Battery/dp/B001BY97IU</td>
- </tr>
- <tr>
- <td>Packard Bell DOTSR</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>This unit may ship with Atheros (works) or Broadcom (does not work) wifi module, you can check Network Adapters under Device Manager in Windows, or FCC stickers.</td>
- <td></td>
- <td>Check attached file :ChromeOS Compatibility list-20091221-A.xlsx" tab Packard Bell Store by region: France: http://packardbell.fr/shopping/store_locator.html </td>
- </tr>
- <tr>
- <td>Asus Eee PC 700</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Diskless Workstations LTSP Term 1520</td>
- <td>N/A</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td>info@DisklessWorkstations.com </td>
- <td>http://www.DisklessWorkstations.com/cgi-bin/prod/200118.html</td>
- </tr>
- <tr>
- <td>Acer AO531h</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>This unit may ship with Atheros (works) or Broadcom (does not work) wifi module, you can check Network Adapters under Device Manager in Windows, or FCC stickers.</td>
- <td></td>
- <td>http://www.acer.com/worldwide/ select location and go to "Where to Buy" page for a list of vendors</td>
- </tr>
- <tr>
- <td>Lenovo Ideapad S10</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>Need to replace wifi card</td>
- <td></td>
- <td>http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/catalog.workflow:category.details?current-catalog-id=12F0696583E04D86B9B79B0FEC01C087&current-category-id=02695ADDF94544E5A11D24AEBC064493&menu-id=products</td>
- </tr>
- <tr>
- <td>Toshiba Satellite M200</td>
- <td>OK</td>
- <td></td>
- <td>on</td>
- <td></td>
- <td>Intel Core 2 Duo + inbuilt Intel Graphics Media Accelerator. Sound & WebCam works too.</td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Asus Eee PC 1005HA</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>http://www.amazon.com/s/ref=nb_ss?url=search-alias%3Delectronics&field-keywords=1005HA&x=0&y=0</td>
- </tr>
- <tr>
- <td>Lenovo IBM ThinkPad R60e</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td>petrmenzel@gmail.com</td>
- <td>http://www.notebookreview.com/notebookreview/lenovo-thinkpad-r60-review-pics-specs/</td>
- </tr>
- <tr>
- <td>Asus Eee PC 1005HG</td>
- <td>OK</td>
- <td></td>
- <td></td>
- <td>on</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Sony VAIO W Series VPCW121AX/W</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&storeId=10151&langId=-1&productId=8198552921665974276</td>
- </tr>
- <tr>
- <td>HP S372OY</td>
- <td>Built-in doesn't work</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>Bought and used netgear usb network adapter wg111us which worked great</td>
- <td></td>
- <td>http://www.amazon.com/Netgear-WG111US-Wireless-Usb-Adapter/dp/B0009N544A</td>
- </tr>
- <tr>
- <td>Bangho B-x0x1</td>
- <td>No</td>
- <td></td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>juanmabaiu@gmail.com</td>
- <td></td>
- </tr>
- <tr>
- <td>Packard Bell DOTS</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>This unit may ship with Atheros (works) or Broadcom (does not work) wifi module, you can check Network Adapters under Device Manager in Windows, or FCC stickers.</td>
- <td></td>
- <td>Check attached file :ChromeOS Compatibility list-20091221-A.xlsx" tab Packard Bell Store by region: France: http://packardbell.fr/shopping/store_locator.html </td>
- </tr>
- <tr>
- <td>MSI Megabook VR201 ("Model Nr. MS-1217")</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td>Suspends but does not wake up anymore. It shuts down after trying to wake it up by pressing the power button. Sound is fine.</td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>HP Mini 5101</td>
- <td>No</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>Make sure to specify Intel wireless module when customizing.</td>
- <td></td>
- <td>http://h71016.www7.hp.com/MiddleFrame.asp?page=config&ProductLineId=539&FamilyId=3066&BaseId=31126&oi=E9CED&BEID=19701&SBLID=</td>
- </tr>
- <tr>
- <td>Fujitsu Lifebook A6030</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Gatteway LT20</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>This unit may ship with Atheros (works) or Broadcom (does not work) wifi module, you can check Network Adapters under Device Manager in Windows, or FCC stickers.</td>
- <td></td>
- <td>Check attached file :ChromeOS Compatibility list-20091221-A.xlsx" tab Gateway Store by region: USA/Canada: http://www.gateway.com/retail/consumer.php?cmpid=topnav_shop Mexico: http://mx.gateway.com/products/stores.html </td>
- </tr>
- <tr>
- <td>Asus K42JK</td>
- <td>OK</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>pratomoasta@gmail.com</td>
- <td>-</td>
- </tr>
- <tr>
- <td>HP Compaq 6820s</td>
- <td>No</td>
- <td>on</td>
- <td>on</td>
- <td></td>
- <td></td>
- <td>Petr Menzel</td>
- <td></td>
- </tr>
- <tr>
- <td>Acer Aspire One AOD250-1165 10.1-Inch Blue Netbook</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>This unit may ship with Atheros (works) or Broadcom (does not work) wifi module, you can check Network Adapters under Device Manager in Windows, or FCC stickers.</td>
- <td></td>
- <td>http://www.amazon.com/Acer-Aspire-AOD250-1165-10-1-Inch-Netbook/dp/B0023B138W</td>
- </tr>
- <tr>
- <td>Lenovo IdeaPad S12</td>
- <td>?</td>
- <td>on</td>
- <td>on</td>
- <td>on</td>
- <td>Need to replace WiFi card, need to select Intel Integrated graphics models only (NVidia and VIA graphics not supported)</td>
- <td></td>
- <td>http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/catalog.workflow:category.details?current-catalog-id=12F0696583E04D86B9B79B0FEC01C087&current-category-id=8EE56652C33D4452A778393130C14F42</td>
- </tr>
- <tr>
- <td>HP Compaq 6720s</td>
- <td>?</td>
- <td></td>
- <td></td>
- <td></td>
- <td>touchpad does not work</td>
- <td>joeboy95619@gmail.com</td>
- <td></td>
- </tr>
- <tr>
- <td>Packard Bell EasyNote TS11-HR-868</td>
- <td>OK</td>
- <td>on</td>
- <td></td>
- <td>on</td>
- <td>function keys are working</td>
- <td></td>
- <td>laptop is not being sold anymore (bought it Jul 2011)</td>
- </tr>
-</table>
diff --git a/chromium/docs/website/site/chromium-os/getting-dev-hardware/index.md b/chromium/docs/website/site/chromium-os/getting-dev-hardware/index.md
deleted file mode 100644
index 90c169aea29..00000000000
--- a/chromium/docs/website/site/chromium-os/getting-dev-hardware/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: getting-dev-hardware
-title: Getting Developer Hardware
----
-
-Device manufacturers and silicon vendors who have systems or developer boards
-that can be used for Chromium OS development will be posting information about
-their development systems/boards, pre-release builds that work with the
-hardware, and directions for obtaining hardware in the discussion group
-[chromium-os-dev](http://groups.google.com/a/chromium.org/group/chromium-os-dev).
-
-Developers, manufacturers, and vendors have summarized their experiences with
-developer boards and systems in the [Developer
-Hardware](/chromium-os/getting-dev-hardware/dev-hardware-list) page, which
-contains a list of systems that run pre-release builds of Chromium OS.
-
-There is also information on [official Chrome OS
-devices](/chromium-os/developer-information-for-chrome-os-devices). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/getting-started-with-glmark2/glmark2-9999.ebuild b/chromium/docs/website/site/chromium-os/getting-started-with-glmark2/glmark2-9999.ebuild
deleted file mode 100644
index d3012c45eea..00000000000
--- a/chromium/docs/website/site/chromium-os/getting-started-with-glmark2/glmark2-9999.ebuild
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 1999-2011 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: $
-
-EAPI=2
-CROS_WORKON_PROJECT="chromiumos/third_party/glmark2"
-inherit toolchain-funcs cros-workon
-
-DESCRIPTION="Opengl test suite"
-
-LICENSE="GPL-3"
-SLOT="0"
-KEYWORDS="amd64 arm x86"
-IUSE="glesv2 drm"
-
-RDEPEND="media-libs/libpng
- media-libs/mesa
- x11-libs/libX11"
-DEPEND="${RDEPEND}
- dev-util/pkgconfig"
-
-src_configure() {
- : ${WAF_BINARY:="${S}/waf"}
-
- local myconf
-
- if use glesv2; then
- myconf+="--enable-glesv2"
- fi
-
- if use drm; then
- myconf+=" --enable-gl-drm"
- if use glesv2; then
- myconf+=" --enable-glesv2-drm"
- fi
- fi
-
- tc-export CC CXX AR RANLIB LD NM PKG_CONFIG
-
- # it does not know --libdir specification, dandy huh
- CCFLAGS="${CFLAGS}" LINKFLAGS="${LDFLAGS}" "${WAF_BINARY}" \
- --prefix=/usr \
- --enable-gl \
- ${myconf} \
- configure || die "configure failed"
-}
-
-src_compile() {
- ${WAF_BINARY} ${CCFLAGS} || die
-}
-
-src_install() {
- ${WAF_BINARY} install --destdir="${D}" || die
-}
diff --git a/chromium/docs/website/site/chromium-os/getting-started-with-glmark2/index.md b/chromium/docs/website/site/chromium-os/getting-started-with-glmark2/index.md
deleted file mode 100644
index 330883ee3af..00000000000
--- a/chromium/docs/website/site/chromium-os/getting-started-with-glmark2/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: getting-started-with-glmark2
-title: Getting started with glmark2
----
-
-[TOC]
-
-## Introduction
-
-This guide describes how to download, modify, and build the glmark2 suite.
-glmark2 is an OpenGL (ES) 2.0 benchmark maintained by the Linaro Graphics
-Working group. Their site is: <https://launchpad.net/glmark2>
-This guide is intended for anyone who wishes to use glmark2 in Chromium OS, as
-well as developers who wish to improve it.
-
-## What is OpenGL ES?
-
-OpenGL ES is a subset of the OpenGL API that is designed for embedded systems.
-It lacks many of the functions of OpenGL. glmark2 supports both regular OpenGL
-and OpenGL ES.
-Read more about it:
-<http://www.khronos.org/opengles>
-<http://en.wikipedia.org/wiki/OpenGL_ES>
-
-## How to build and run glmark2 on your Linux machine
-
-Before running it on Chromium OS, you might find it useful to run glmark2 on
-your Linux development workstation. You can build glmark2 on a Linux workstation
-using the following steps:
-In the terminal, go to a local folder and clone the upstream repo:
-
-```none
-git clone git://git.linaro.org/people/afrantzis/glmark2.git
-cd glmark2
-```
-
-The instructions to build and install are in the INSTALL file. You can reference
-that or follow these instructions:
-
-```none
-sudo -i                        # install as root
-./waf configure --enable-gl    # setup for installing glmark2 with regular OpenGL
-./waf                          # build it!
-./waf install                  # installs files into /usr/local/bin and /usr/local/share/glmark2
-```
-
-Once installed, run glmark2 using the command:
-
-```none
-glmark2
-```
-
-## How to build and run glmark2 in Chromium OS
-
-glmark2 has been incorporated into Chromium OS as a third party git repository,
-so it can be built using emerge.
-glmark2 depends on mesa. First, you need to build mesa with the following
-command:
-
-```none
-USE="egl gbm gles1 gles2 shared-glapi" emerge-<board> mesa
-```
-
-\*\*Temporary workaround step: Save the glmark2 ebuild file that's attached to
-this page (see below) into third_party/chromiumos-overlay/media-libs/glmark2.
-Then build glmark2 using:
-
-```none
-USE="glesv2 drm" emerge-<board> glmark2
-```
-
-When this done, install it on your Chromium OS target machine. From the target
-machine, run:
-
-```none
-gmerge -n mesa
-gmerge -n glmark2
-```
-
-Once it has been installed, run glmark2 with one of the following commands:
-
-```none
-glmark2                    # with OpenGL
-glmark2-es2                # with OpenGL ES v2
-glmark2-es2-drm            # with OpenGL ES v2 and without X
-```
-
-## Developing for glmark2
-
-In your Chromium OS development chroot, go to `~/trunk/src/third_party/glmark2`.
-You can modify the source code here. To change build options, update
-third_party/chromiumos-overlay/media-libs/glmark2/glmark2-9999.ebuild.
-Once your changes are up and running, you can send them upstream. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/getting-started-with-platform2/index.md b/chromium/docs/website/site/chromium-os/getting-started-with-platform2/index.md
deleted file mode 100644
index 588d3a87c65..00000000000
--- a/chromium/docs/website/site/chromium-os/getting-started-with-platform2/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: getting-started-with-platform2
-title: Getting started with Platform2
----
-
-#### Deprecation warning
-
-[This page has been
-migrated](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/platform2_primer.md)!
-
-Please update the link that brought you here. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/gfx-test-notes/index.md b/chromium/docs/website/site/chromium-os/gfx-test-notes/index.md
deleted file mode 100644
index bf285630c34..00000000000
--- a/chromium/docs/website/site/chromium-os/gfx-test-notes/index.md
+++ /dev/null
@@ -1,217 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: gfx-test-notes
-title: GFX test notes
----
-
-## [GPU Rendering Benchmarks](/developers/design-documents/rendering-benchmarks)
-
-Chromium has some [GPU Rendering
-Benchmarks](/developers/design-documents/rendering-benchmarks) which use the
-[Telemetry](/developers/telemetry) framework.
-
-The `smoothness` test loads a set of 25 very common web pages, uses Telemetry to
-scroll them, and then measures some performance metrics.
-
-To run the test, you first need to [check out the full Chromium
-source](https://code.google.com/p/chromium/wiki/UsingGit), and a **Chrome OS
-Test Image.**
-
-```none
-cd chromium/src
-tools/perf/run_measurement --browser=cros-chrome-guest --remote=${remote_ip} smoothness tools/perf/page_sets/top_25.json --allow-live-sites
-```
-
-For the Google and Facebook site tests, you can to provide credentials in a
-~/.telemetry-credentials file:
-
-```none
-cp tools/telemetry/examples/credentials_example.json ~/.telemetry-credentials
-vi ~/.telemetry-credentials
-```
-
-Add Google and Facebook credentials, but the example file format has a bug:
-there should be a ',' between the "google" and "facebook" blocks.
-
-The previous example tested using live sites. There are times where it is
-preferable to test using pre-cached site data. Telemetry lets you do that using
-a "web page replay" tool which captures a snapshot of a set of webpages (.wpr).
-
-Several such snapshots have already been captured, such as the "top_25" test set
-which we are running here. Since the page contents are copyright of the
-respective web page owners, however, they are not available as part of the
-publicly available chromium source tree.
-
-However, if you have access to the Chrome (src-internal) tree, you can check out
-the repository containing test data and run the test withough
-"--allow-live-sites":
-
-```none
-# Prerequisite: To access the pre-recorded page sets, first set up a chrome src-internal password if not already set.
-# See: <https://www.googlesource.com/new-password>
-cd chromium/src/tools/perf
-git clone https://chrome-internal.googlesource.com/chrome/tools/perf/data
-cd chromium/src
-tools/perf/run_measurement --browser=cros-chrome-guest --remote=${remote_ip} smoothness tools/perf/page_sets/top_25.json
-```
-
-The `run_measurement`, is useful for running arbitrary measurements on different
-page sets. However, the performance bots run their benchmarks, using the
-`run_benchmark` script. The equivalent benchmark to the above rrun_measurement
-example is:
-
-```none
-cd src/tools/perf
-./run_benchmark run --browser=cros-chrome-guest --remote=${remote_ip} smoothness_top25
-```
-
-The scripts `run_benchmark`/`run_measurement both launch the python script
-test_runner.py`, which in turn starts up a local `webpagereplay.py` server.
-
-Beware that the webpagereplay.py will fail to start if `/etc/resolv.conf`
-contains the line "nameserver 127.0.0.1":
-
-```none
-webpagereplay.ReplayNotStartedError: Web Page Replay failed to start. Log output:
-dnsproxy.DnsProxyException: Invalid nameserver: 127.0.0.1 (causes an infinte loop)
-```
-
-This can happen when running on a laptop running Ubuntu 12.04+, since by default
-Ubuntu 12.04 uses the `resolvconf` which uses a local `dnsmasq` server to do
-actual dns resolution. Thus, the `nameserver` in `/etc/resov.conf` will be
-127.0.0.1. To temporarily work around this, first fetch the real dns nameserver
-using `nm-tool`, and use this value to manually update the `nameserver` entry in
-`/etc/resolv.conf`. Note that any manual changes to `/etc/resolv.conf` will get
-overwritten by the system at boot - or whenever `resolvconf` gets run.
-
-## Testing without Vsync
-
-In `/sbin/session_manager_setup.sh`, add the following to the chrome parameter
-list: `--disable-gpu-vsync`
-
-## Experimental WebGL autotests
-
-### WebGLManyPlanetsDeep
-
-```none
-./run_remote_tests.sh --board=${board} --remote=${remote_ip} graphics_WebGLManyPlanetsDeep
-```
-
-Example results on mali 2013-wk20 w/ kernel/chromeos-3.4:
-
-```none
-graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep   avg_fps                       42.5563759729
-graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep   avg_render_time               0.00651348182884
-```
-
-Example results on mali 2012-wk45 w/ kernel/chromeos-3.4:
-
-```none
-graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep   avg_fps                       59.1172358698
-graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep   avg_render_time               0.00622212837838
-```
-
-### WebGLAquarium
-
-```none
-./run_remote_tests.sh --board=${board} --remote=${remote_ip} graphics_WebGLAquarium
-```
-
-**mali-2012_wk45 on 3.4 on daisy @ CPU=1.4 MHz GPU=533MHz**
-
-```none
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0001_fishes                         34.7671616056
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0010_fishes                         38.0083871349
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0050_fishes                         36.1185803129
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0100_fishes                         33.5180697395
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0250_fishes                         29.4186162358
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0500_fishes                         21.4609046677
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_1000_fishes                         14.0662410091
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0001_fishes                 0.0115492735466
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0010_fishes                 0.0120682393055
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0050_fishes                 0.0137373693937
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0100_fishes                 0.0159920819915
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0250_fishes                 0.0222824848304
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0500_fishes                 0.0312746594998
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_1000_fishes                 0.0478747122113
-```
-
-**mali-2013_wk20 on 3.4 on daisy @ CPU=1.4 MHz GPU=533MHz**
-
-```none
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0001_fishes                         26.237068422
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0010_fishes                         28.0702920668
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0050_fishes                         27.0979309871
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0100_fishes                         26.2101456206
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0250_fishes                         23.3153728582
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_0500_fishes                         21.0018305341
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_fps_1000_fishes                         15.375419297
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0001_fishes                 0.0117292154996
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0010_fishes                 0.0115656813221
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0050_fishes                 0.0134754876296
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0100_fishes                 0.0157825582097
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0250_fishes                 0.0217831682377
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_0500_fishes                 0.0322741695138
-graphics_WebGLAquarium/graphics_WebGLAquarium   avg_render_time_1000_fishes                 0.0508704025854
-```
-
-### Restoring OOBE to make Telemetry happy
-
-Telemetry gets confused if it cannot figure how to log in to the machine. This
-can happen, for instance, if you've logged in as another user and telemetry
-can't find the OOBE (Out Of Box Experience). To fix this, try restoring the
-oobe:
-
-```none
-sudo pkill -9 chrome && rm -rf /home/chronos/Local\ State /home/chronos/.oobe_completed && restart ui
-```
-
-## Enable tracing in mali-ddk
-
-1. Add --no-sandbox to chrome start in
- /sbin/sesssion_manager_startup.sh
-2. Change –enable-gpu-sandbox to –disable-gpu-sandbox
-3. Disable self.lCCFlags.append('-pedantic') in
- bldsys/toolchain_abstr.py for trace defines to build.
-4. Change the #if 0 to #if 1 in cros/cros_tracing.h
-5. Change the cros_trace_enabled to 1 in cros/cros_tracing.c
-6. Each time you boot the board, run this to enable the Mali tracing:
-
-chmod a+wx /sys
-
-chmod a+wx /sys/kernel
-
-chmod a+wx /sys/kernel/debug
-
-chmod a+wx /sys/kernel/debug/tracing/
-
-chmod a+wx /sys/kernel/debug/tracing/trace_marker
-
-Then include cros/cros_tracing.h in any files with functions you want to trace
-and add:
-
-CROS_TRACE_ENABLE();
-
-CROS_TRACE_BLOCK("trace block title");
-
-## Using valgrind on the gpu-process
-
-Chromium OS includes an ebuild for valgrind.
-So you can just gmerge it to your target:
-
-```none
-gmerge valgrind
-```
-
-Then you just do `valgrind myprog`.
-
-For the gpu process, you need to pass a flag to chrome to give it the gpu
-launcher.
-
-Add the following in in `session_manager_setup.sh`
-
-```none
---gpu-launcher="usr/bin/valgrind --trace-children=yes --error-limit=no"
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/glitch-vulnerability-status/index.md b/chromium/docs/website/site/chromium-os/glitch-vulnerability-status/index.md
deleted file mode 100644
index a60997fadbc..00000000000
--- a/chromium/docs/website/site/chromium-os/glitch-vulnerability-status/index.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: glitch-vulnerability-status
-title: GLitch vulnerability status
----
-
-## Vulnerability description
-
-The [GLitch
-vulnerability](https://www.vusec.net/wp-content/uploads/2018/05/glitch.pdf) uses
-timing information gathered from the GPU to execute a
-[Rowhammer-style](https://en.wikipedia.org/wiki/Row_hammer) bit-flip attack.
-High-precision GPU timers can be used from an untrusted web page via WebGL to
-determine the physical layout of memory pages. GL shaders running on the GPU are
-then used to cause bit flips in CPU-accessible DRAM on unified memory
-architecture GPUs.
-
-Successful exploitation would enable an attacker to escalate privileges from
-Javascript. This has been demonstrated to allow arbitrary code execution within
-the Chrome sandbox.
-
-## Chrome OS response
-
-Chrome OS 65, released to the stable channel on [April 5,
-2018](https://chromereleases.googleblog.com/2018/04/stable-channel-update-for-chrome-os.html),
-mitigates the remote vector of the GLitch vulnerability on all Chrome OS devices
-by removing access to high-precision WebGL timers. Users can [enable Site
-Isolation](http://www.chromium.org/Home/chromium-security/site-isolation) for
-further protection.
-
-## Affected devices
-
-Chrome OS Intel devices are protected against GLitch and other Rowhammer-style
-bit flips by either using double refresh; or TRR on DDR4 RAM, if supported.
-Chrome OS ARM devices use DDR3 RAM, which is theoretically vulnerable to
-Rowhammer-style attacks; however, bit flips have not been reproduced on these
-devices. No further action is necessary for Chrome OS ARM devices at the moment. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/hoho/810-10116-02_20150109_hdmi_SCH_0.pdf.sha1 b/chromium/docs/website/site/chromium-os/hoho/810-10116-02_20150109_hdmi_SCH_0.pdf.sha1
deleted file mode 100644
index cd4f003110d..00000000000
--- a/chromium/docs/website/site/chromium-os/hoho/810-10116-02_20150109_hdmi_SCH_0.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-69416d2712f984cf614542074a065bcad991ae99 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram (1).png.sha1 b/chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram (1).png.sha1
deleted file mode 100644
index 557dca71e06..00000000000
--- a/chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cbb9329674451f24e8ebe6306d56cbb467fe6ba6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram.png.sha1 b/chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram.png.sha1
deleted file mode 100644
index 459cb1f7fb6..00000000000
--- a/chromium/docs/website/site/chromium-os/hoho/HoHo Block Diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6fcc3c78fdf9379d64bf0a30e65212e2eed37777 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/hoho/chromium-os-hoho.tar.bz2.sha1 b/chromium/docs/website/site/chromium-os/hoho/chromium-os-hoho.tar.bz2.sha1
deleted file mode 100644
index 1f3de1764c1..00000000000
--- a/chromium/docs/website/site/chromium-os/hoho/chromium-os-hoho.tar.bz2.sha1
+++ /dev/null
@@ -1 +0,0 @@
-09bfbfb8c2a1ffbc3ff0d23d0d0410d991eabe99 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/hoho/index.md b/chromium/docs/website/site/chromium-os/hoho/index.md
deleted file mode 100644
index 731603413aa..00000000000
--- a/chromium/docs/website/site/chromium-os/hoho/index.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: hoho
-title: USB Type-C to HDMI Adapter
----
-
-[TOC]
-
-## Overview
-
-The USB Type-C to HDMI Adapter connects a USB Type-C plug to an HDMI receptacle.
-It enables users of any Chrome device that implements USB-Type C to connect to
-an HDMI display.
-
-## Hardware Capabilities
-
-This adapter is an implementation of a USB Type-C DFP_D to HDMI Protocol
-Converter. It follows the requirements of section 4.3.1 of the VESA DisplayPort
-Alt Mode for USB Type-C Standard. In the VESA standard, refer to Figure 4-13:
-Scenario 3a.
-
-It provides the following features:
-
-* DisplayPort protocol conversion to support HDMI
-* automatic enabling of video out
-* video output with resolutions of up to 4K @ 60 Hz (depending on
- system and monitor capabilities)
-
-### [<img alt="image"
-src="/chromium-os/hoho/HoHo%20Block%20Diagram%20%281%29.png" height=316
-width=400>](/chromium-os/hoho/HoHo%20Block%20Diagram%20%281%29.png)
-
-For schematics, [click
-here](https://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRldnxneDoyZWUwYmU2NWNiMWMwZTY2)
-or see the attached file.
-
-## Firmware Source Code
-
-The firmware is located In the Chromium Embedded Controller repository under
-*[board/hoho/](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/hoho/)*
-:
-
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/hoho/>
-
-### Building Firmware
-
-Within your Chromium OS chroot, the syntax is:
-
-```none
-cd ~/trunk/src/platform/ec
-make BOARD=hoho
-```
-
-### Flashing Firmware
-
-The firmware is normally flashed via the kernel, as part of the Chrome OS
-Auto-Update process. Payloads are located in `/lib/firmware/cros-pd`.
-
-When the adapter is connected to a Chrome device, you can manually flash the
-read-write firmware as follows:
-
-```none
-ectool --cros_pd flashpd 4 <port> /tmp/hoho.ec.RW.bin
-```
-
-The device must be in developer mode to run the `ectool` command. After running
-this command, the firmware is located in
-`~/trunk/src/platform/ec/build/hoho/ec.bin .`
-
-## Connecting to the Adapter
-
-Developers of devices based on this design may need to install an initial image
-by putting the STM32F072 into DFU mode. This can be done by asserting PD_BOOOT0
-(TP11 in the schematic) and resetting the MCU. It can be helpful to attach a
-switch for this purpose on prototype devices.
-
-Installing an image requires the dfu-util tools package on the Chrome device
-where the adapter is connected. To deploy dfu-util and copy the chromeos-ec
-image from within your Chromium OS chroot, the syntax is:
-
-<pre><code>BOARD=<i>board-name</i>
-</code></pre>
-
-<pre><code>IP=<i>host-IP-address</i>
-</code></pre>
-
-<pre><code>emerge-${BOARD} dfu-util chromeos-ec
-</code></pre>
-
-<pre><code>cros deploy $IP dfu-util chromeos-ec
-</code></pre>
-
-<pre><code>scp ~/trunk/src/platform/ec/build/hoho/ec.bin root@${IP}:/tmp/.
-</code></pre>
-
-where *board-name* is the name of the Chrome device, for example peppy, and
-*host-IP-address* is its IP address on the network.
-
-The next step is to connect the adapter to the Chrome device in DFU mode and
-write a full image (RO + RW). On the Chrome device, the syntax is:
-
-```none
-flash_ec --board=hoho --image=/tmp/ec.bin
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/index.md
deleted file mode 100644
index e89fb9c339f..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: a-brief-perf-how-to
-title: Timechart how-to
----
-
-Developer builds contain a performance analysis command called `perf` that can
-be used to create an SVG output file similar to `bootchart`; the chart shows how
-CPU cycles and I/O wait times are distributed across processes in the system
-over time.
-
-Below is a short primer in four lessons describing how to generate and view
-output from `perf timechart`.
-
-## Lesson 1 - a simple example
-
-1. Boot Chromium OS, and open a terminal.
-2. Run this command:
-
- ```none
- sudo perf timechart record
- ```
-
-3. Run your workload. A workload isn't necessary if all you want to see
- is a chart of an idle system. :-)
-4. When your workload is done, interrupt the process started in step 2
- using ^C, or kill -2.
-
-**Explanation**: Without arguments, `perf timechart record` runs forever
-gathering data, until stopped by SIGINT. Note that only SIGINT works; SIGTERM
-will kill the process without producing the necessary output. When the command
-completes, you'll see two new files: `perf.data` and `trace.out.`
-
-## Lesson 2 - how to generate and view the chart
-
-1. In the directory where you ran Lesson 1, run this command:
-
- ```none
- sudo perf timechart
- ```
-
-2. The output image will be stored in a file named `output.svg`. Use
- `scp` or some equivalent to copy the file to another system for
- viewing.
-
-**Tips for viewing**: Some browsers may have trouble displaying the image. The
-author of timechart recommends the Inkscape image editor:
-
-<http://www.inkscape.org/>
-
-Inkscape does a good job of displaying the fine details, but it may be a bit
-slow for the large timechart images. You should exercise patience when opening,
-magnifying, or scroling images.
-
-## Lesson 3 - how to avoid using SIGINT
-
-1. Run this command:
-
- ```none
- sudo perf timechart record sleep 5
- ```
-
-2. Run a workload that will finish within 5 seconds; for longer
- workloads, use a more appropriate sleep time in step 1.
-3. Generate and view the output as described in Lesson 2.
-
-**Explanation**: If there are arguments to `perf timechart record`, the
-arguments are treated as a command to run as a subprocess of `perf. perf`
-gathers data until the process terminates.
-
-If your workload is triggered by a single command, that command can be used in
-place of 'sleep 5'. Note that if the workload acts as a daemon (that is, forks a
-child and exits), `perf` will terminate with the parent terminates; this likely
-isn't what you'd want.
-
-## Lesson 4 - how to get a timechart of system boot
-
-1. Install bootchart on your workstation. For ubuntu:
-
- ```none
- sudo apt-get install bootchart
- ```
-
-2. emerge and install bootchart onto your DUT:
-
- ```none
- emerge-$BOARD bootchart &&  cros deploy $DUT bootchart
- ```
-
-3. reboot DUT
-
- ```none
- ssh $DUT reboot
- ```
-
-4. bootchart will log events in
- `/var/log/bootchart/boot-<timestamp>.tgz`. It will collect data
- until the DUT upstart sequence has fully completed. Retrieve the
- archive(s) with
-
- ```none
- scp $DUT:/var/log/bootchart/boot-<timestamp>.tgz  /tmp
- ```
-
-5. generate SVG graphics
-
- ```none
- F=boot-<timestamp> ; bootchart --format=svg -o $F.svg  $F.tgz
- ```
-
- or in a loop with
-
- ```none
- scp $DUT:/var/log/bootchart/boot-*.tgz  . && for i in *; do F=${i%.tgz}; bootchart --format=svg -o "${F}.svg"  "${F}.tgz"; done
- ```
-
- The svg file(s) are ready for viewing. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/perf.patch.txt b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/perf.patch.txt
deleted file mode 100644
index 6812edf3775..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to/perf.patch.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git a/boot-complete.conf b/boot-complete.conf
-index 77712e4..a368469 100644
---- a/boot-complete.conf
-+++ b/boot-complete.conf
-@@ -84,4 +84,5 @@ script
- # Checks if the device shut down while in suspend and sends metrics
- # as if coming out of suspend.
- send_metrics_on_resume -b &
-+ pkill -2 '^perf$' || true
- end script
-diff --git a/chromeos_startup b/chromeos_startup
-index da54833..9d52108 100755
---- a/chromeos_startup
-+++ b/chromeos_startup
-@@ -157,6 +157,9 @@ if [ "$ROOTDEV_RET_CODE" = "0" ] ; then
- fi
- fi
-
-+( cd /tmp ; exec perf timechart record sleep 20 >perf.out 2>&1 ) &
-+sleep .2
-+
- #
- # Note that ureadahead depends on some of the operations above.
- # Notably, the command requires /var to be mounted, because the pack
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/add-a-new-package/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/add-a-new-package/index.md
deleted file mode 100644
index 947c67ea412..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/add-a-new-package/index.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: add-a-new-package
-title: Adding a New Package
----
-
-Here's how you add a new package to Chromium OS:
-
-1. Create an ebuild file for your package
- `src/third_party/chromiumos-overlay/`. See the ebuild(5) man page
- (from within your development chroot) and the other ebuilds in
- `src/third_party/portage` and `src/third_party/chromiumos-overlay`
- * for example, the ebuild file of systemtap is placed in
- `src/third_party/chromiumos-overlay/dev-util/systemtap`.
-2. Upload the package to Localmirror of Google (require Google
- account).
-3. Create a **README.chromiumos file** that describes the purpose of
- the package. If your package is a third-party package, document any
- custom patches that have been applied
-4. Add a dependency to your new package in one of:
- * `src/third_party/chromiumos-overlay/virtual/target-chromium-os`
- * Includes the package in all images (base/release, developer,
- test)
- * `src/third_party/chromiumos-overlay/virtual/target-chromium-os-dev`
- * Includes the package in developer and test images
- * `src/third_party/chromiumos-overlay/virtual/target-chromium-os-test`
- * Includes the package in test images
- * `src/third_party/chromiumos-overlay/virtual/target-chromium-os-sdk`
- * Includes the package in the SDK itself
-5. Increment the revision number of the ebuild that you modified so
- that incremental builds recognize the changes.
-
-The source code of the package shouldn't be placed in the `src/`. emerge will
-download the package and store it in `/var/lib/portage/distfiles-target/`, and
-the code is compiled in `/build/tegra2_seaboard/tmp/portage/`. When porting a
-new package, we can put the package in `/var/lib/portage/distfiles-target/`.
-
-Once you're done, make sure your changes to do not break the build system. Then
-create a changelist and get it reviewed (see [Contributing
-Code](/developers/contributing-code) for details).
-
-### Adding a package to a running Chromium OS system
-
-The easiest way to add a new package, or update a package is to start
-`devserver` on the build host, and use `gmerge` to build the package and install
-the results on the target device.
-
-See [Using the dev
-server](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/using-the-dev-server#TOC-How-to-build-a-single-package-and-i).
-
-### Adding a package to the manifest
-
-See the [Git server-side
-information](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/git-server-side-information#TOC-How-do-I-add-my-project-to-the-mani)
-site for information about how to add your package to a manifest. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/.config.sha1 b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/.config.sha1
deleted file mode 100644
index d7dc9e867ff..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/.config.sha1
+++ /dev/null
@@ -1 +0,0 @@
-afdc2374dc315873a448f6ced033ecf97f8da445 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/cmdline b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/cmdline
deleted file mode 100644
index fbc19f99e7d..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/cmdline
+++ /dev/null
@@ -1,18 +0,0 @@
-earlyprintk=ttyS2,115200n8
-console=tty1
-console=ttyS2,115200n8
-loglevel=7
-init=/sbin/init
-cros_secure
-oops=panic
-panic=-1
-root=/dev/mmcblk0p3
-rootwait
-ro
-dm_verity.error_behavior=3
-dm_verity.max_bios=-1
-dm_verity.dev_wait=0
-dm="1 vroot none ro 1,0 3334144 verity payload=ROOT_DEV hashtree=HASH_DEV hashstart=3334144 alg=sha1 root_hexdigest=cac50a01eb2b17d6863fb7ca0c932e8f2224dc26 salt=2e5e07e55e251dc2619ba54b2bea16f7e38fa67ea6d8bdc59f7bd47fc19bc177"
-noinitrd cros_debug
-vt.global_cursor_default=0
-kern_guid=%U
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/index.md
deleted file mode 100644
index efffd3478e4..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/index.md
+++ /dev/null
@@ -1,144 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: boot-mainline-kernel-on-veyron-jaq
-title: Boot mainline kernel on veyron-jaq
----
-
-## Note: work in progress.
-
-## ChromiumOS
-
-#### Setup
-
-Follow the instructions in the [Chromium OS Developer
-Guide](/chromium-os/developer-guide), the tl;dr version being:
-
-```none
-mkdir ~/s/chromium
-```
-
-```none
-cd ~/s/chromium
-```
-
-```none
-repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git
-```
-
-```none
-repo sync -j50
-```
-
-#### Build
-
-```none
-cros_sdk # to enter chroot
-BOARD=veyron_jaq
-./setup_board --board=$BOARD
-./build_packages --board=$BOARD
-./build_image --board=$BOARD --noenable_rootfs_verification --enable_serial=ttyS2 test
-```
-
-## Firmware
-
-Build netboot firmware for veyron to pull kernel image and command line from a
-tftp share on the network. Do the following inside the chroot:
-
-**Note:** The following uses a servo to update firmware. I think you can do the
-flashrom command on the device itself, but that introduces a brick risk.
-
-```none
-cros_sdk # to enter chroot
-```
-
-```none
-BOARD=veyron_jaq
-```
-
-```none
-TFTP=<tftpserver>
-```
-
-```none
-FTP_FOLDER=${BOARD}
-```
-
-```none
-BOOTFILE=${FTP_FOLDER}/vmlinuz
-```
-
-```none
-ARGSFILE=${FTP_FOLDER}/cmdline
-```
-
-```none
-BIOS=/build/${BOARD}/firmware/image.net.bin
-```
-
-```none
-emerge-${BOARD} chromeos-ec libpayload depthcharge coreboot chromeos-bootimage
-```
-
-```none
-sudo gbb_utility -s --flags=0x239 ${BIOS}
-```
-
-```none
-sudo ~/trunk/src/platform/factory/setup/update_firmware_settings.py \
-  -i ${BIOS} \
-  --tftpserverip=${TFTP} \
-  --bootfile=${BOOTFILE} \
-  --argsfile=${ARGSFILE}
-dut-control warm_reset:on spi2_buf_en:on spi2_buf_on_flex_en:on spi2_vref:pp1800
-sudo flashrom -p ft2232_spi:type=servo-v2${SERIAL_SERVO} --verbose -w ${BIOS}
-dut-control spi2_buf_en:off spi2_buf_on_flex_en:off spi2_vref:off warm_reset:off
-```
-
-## Kernel
-
-#### Setup
-
-Pull down a copy of mainline and use multiv7 defconfig (a .config is also
-attached to this page, but will likely be stale by the time of reading)
-
-```none
-mkdir ~/s/kernel
-```
-
-```none
-cd ~/s/kernel
-```
-
-```none
-git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git .
-```
-
-```none
-ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make O=.build_multiv7 multiv7_defconfig
-```
-
-#### Download the its file attachment to this page and store it in ~/s/kernel/.build_mutliv7
-
-#### Build & Deploy
-
-Compile your kernel
-
-```none
-ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make O=.build_multiv7 -j40
-```
-
-Create a fit image for veyron-jaq that contains the kernel and the device tree
-
-```none
-mkimage -D "-I dts -O dtb -p 2048" -f rk3228-veyron-jaq.its arch/arm/boot/vmlinuz
-```
-
-Copy the fit image to your tftp share
-
-```none
-scp arch/arm/boot/vmlinuz <tftpserver>:/tftpboot/veyron_jaq
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/rk3228-veyron-jaq.its b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/rk3228-veyron-jaq.its
deleted file mode 100644
index c4349f2fd99..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq/rk3228-veyron-jaq.its
+++ /dev/null
@@ -1,36 +0,0 @@
-/dts-v1/;
-
-/ {
- description = "Chrome OS kernel image with one or more FDT blobs";
- #address-cells = <1>;
-
- images {
- kernel@1 {
- data = /incbin/("./arch/arm/boot/zImage");
- type = "kernel_noload";
- arch = "arm";
- os = "linux";
- compression = "none";
- load = <0>;
- entry = <0>;
- };
- fdt@1 {
-
- description = "rk3288-veyron-jaq";
- data = /incbin/("./arch/arm/boot/dts/rk3288-veyron-jaq.dtb");
- type = "flat_dt";
- arch = "arm";
- compression = "none";
- hash@1 {
- algo = "sha1";
- };
- };
- };
- configurations {
- default = "conf@1";
- conf@1 {
- kernel = "kernel@1";
- fdt = "fdt@1";
- };
- };
-};
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/chrome-api-keys-in-the-chroot/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/chrome-api-keys-in-the-chroot/index.md
deleted file mode 100644
index a01d42d2622..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/chrome-api-keys-in-the-chroot/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/building-chromium-browser
- - Building Chromium for Chromium OS (simple chrome)
-page_name: chrome-api-keys-in-the-chroot
-title: Chrome API keys in the Chromium OS SDK chroot
----
-
-When building Chromium on Chromium OS, there are (at least) 3 environments for
-building that are relevant.
-
-1. The host home directory.
-2. The home directory in the chroot.
-3. The home directory while building the chromeos-base/chromeos-chrome
- package.
-
-The mechanism for compiling API keys into the Chromium binary itself under
-Chromium OS uses copy-propagation between the layers.
-
-### Between layers 1 & 2 (host & chroot)
-
-The enter chroot functionality takes care of propagating the keys. If the file
-`.googleapikeys` is not present in the chroot, or is empty, the keys are
-searched for in your home directory, extracted and written there. It is a
-line-oriented file that should look like the sample in the chrome page.
-
-<pre><code>'google_api_key': '<b>ABC123</b>',
-'google_default_client_id':     '<b>123/abc</b>',
-'google_default_client_secret': '<b>floor-sweeper</b>',
-</code></pre>
-
-To reset these the easiest way to update the chroot is simply:
-
-```none
-cros_sdk -- rm ../../../.googleapikeys
-```
-
-and then the next time something enters the chroot, your native credentials will
-be copied in. If the keys are not working, try taking a look at the file to see
-if the format of your keys outside the chroot confused the propagation.
-
-If you want your chroot to build something non-default or non-shared, you can
-enter the chroot and change the `.googleapikeys` directly.
-
-### Between layers 2 & 3 (chroot and package)
-
-The chromeos-base/chromeos-chrome ebuild takes care of respecting the keys in
-the chroots `.googleapikeys` in the final source build environment. It does this
-by expanding and converting the file into an include.gypi in the inside
-environment that does chromium's make. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/index.md
deleted file mode 100644
index 2247bbe2b97..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: building-chromium-browser
-title: Building Chromium for Chromium OS (simple chrome)
----
-
-This document has been moved to markdown/git. The up-to-date version can be
-found at:
-
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-factory-test-images/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-factory-test-images/index.md
deleted file mode 100644
index a1446e88feb..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/building-factory-test-images/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: building-factory-test-images
-title: Factory Software
----
-
-The Chromium OS software contains everything you need for a standard device
-manufacturing flow - from pre-flash, system imaging, calibration and
-qualification, functional tests, finalization to RMA.
-
-The related documents are now moved to [factory
-repo](https://chromium.googlesource.com/chromiumos/platform/factory/+/HEAD/README.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chrome-with-libcras-on-gprecise/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chrome-with-libcras-on-gprecise/index.md
deleted file mode 100644
index 92eaf7c0d44..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chrome-with-libcras-on-gprecise/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: chrome-with-libcras-on-gprecise
-title: Chrome with libcras on gPrecise
----
-
-How to build and install cras and tell Chrome to use it on gooBuntu gPrecise.
-
-**Install prerequisites.**
-
-sudo apt-get install git libasound-dev libspeexdsp-dev libgtest-dev libtool
-automake libdbus-1-dev libudev-dev g++ ladspa-sdk libsndfile-devOn
-Trusty:apt-get install libsbc-devPre-Trusty:install libsbc 1.1 manually by
-downloading and compiling the tarball from <http://www.bluez.org/sbc-11> (I
-couldn't find a package for Precise).
-**ini parser.**git clone https://github.com/ndevilla/iniparser.git cd iniparser
-make sudo cp libiniparser.\* /usr/local/lib sudo cp src/dictionary.h
-src/iniparser.h /usr/local/include sudo chmod 644
-/usr/local/include/dictionary.h /usr/local/include/iniparser.h sudo chmod 644
-/usr/local/lib/libiniparser.a sudo chmod 755
-/usr/local/lib/libiniparser.so.0**gtest.**cd /usr/src/gtest sudo apt-get install
-cmake sudo cmake . sudo make sudo chmod 644 \*.a sudo cp \*.a
-/usr/local/lib**webrtc-audio-processing**wget
-http://freedesktop.org/software/pulseaudio/webrtc-audio-processing/webrtc-audio-processing-0.3.tar.xz
-tar xvf webrtc-audio-processing-0.3.tar.xz Apply
-[change-header-location.patch](https://chromium-review.googlesource.com/c/499813/)
-webrtc-audio-processing-0.3 ./configure make sudo make install**Build/install
-cras.**git clone https://chromium.googlesource.com/chromiumos/third_party/adhd
-cd adhd/cras ./git_prepare.sh ./configure --prefix=/usr make -j33 check sudo
-make installmkdir /var/run/cras
-chown $USER /var/run/crasIf you see some build errors on
-'snd_pcm_chmap_query_t', it means that you need newer version of alsa-lib.
-1.0.27 or higher is required to build cras.
-**Confiugre/build Chrome.**Follow instruction on wiki for getting and building
-chrome.cd chromium/srcGYP_GENERATORS="ninja" ./build/gyp_chromium
--Duse_cras=1ninja -C out/Release chrome
-**Start cras and chrome.**cd adhd/crassrc/crascd
-chromium/src./out/Release/chrome --use-cras \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-architecture-porting-guide/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-architecture-porting-guide/index.md
deleted file mode 100644
index 50b9953a9c9..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-architecture-porting-guide/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: chromiumos-architecture-porting-guide
-title: Chromium OS Architecture Porting Guide
----
-
-[TOC]
-
-## Introduction
-
-So you decided that the existing cpu architectures (Intel's x86_64/i686 and
-ARM's 32-bit arm) platforms weren't up to the task for your next system?
-Instead, you opted for some magical and new architecture? What you desire is
-possible, but you should buckle up and prepare for a bumpy ride!
-
-## Various Upstream Projects
-
-Keep in mind that Chromium OS is based on a lot of upstream projects that we
-have not authored. That means you can't really get by with just porting Chromium
-OS and forgetting about the rest.
-
-For example, your architecture must already be supported by (at least):
-
-* [Binutils](http://sourceware.org/binutils/)
-* [GCC](http://gcc.gnu.org/)
-* [GDB](http://sourceware.org/gdb/)
-* [Glibc](http://sourceware.org/glibc/) (sorry, but alternative C
- libraries are not currently supported e.g.
- [uClibc](http://www.uclibc.org/))
-* [Linux kernel](http://kernel.org/)
- * Must have
- [CONFIG_MMU=y](http://en.wikipedia.org/wiki/Memory_management_unit)
- (if you don't know what this means, then you most likely have
- one, and can thus disregard)
-
-This is just the tip of the iceberg. If you're missing any of these pieces, then
-you've got a lot of work ahead of you. Come visit us once you've gotten those
-sorted out.
-
-### Existing Gentoo Support
-
-Chromium OS is based on [Gentoo](http://www.gentoo.org/). Hopefully you've
-selected a processor that they already support (they support many already). You
-can find the current list here:
-<http://sources.gentoo.org/profiles/arch.list>
-
-Find what you're looking for? Great! Life will be much easier and you should
-move on to the next section.
-
-Your architecture not listed there? Sorry! You're first going to have to
-coordinate with the [Gentoo
-maintainers](http://www.gentoo.org/main/en/lists.xml) in porting to your crazy
-architecture. Come visit us once you've gotten those sorted out.
-
-## Chromium OS Pieces
-
-More To Come! \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/index.md
deleted file mode 100644
index 33a20ddb8f3..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/index.md
+++ /dev/null
@@ -1,588 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: chromiumos-board-porting-guide
-title: Chromium OS Board Porting Guide
----
-
-[TOC]
-
-## Introduction
-
-You've got a wonderful new platform that you'd like to run Chromium OS on, but
-have no idea how to get there from here? Fret not my fellow traveler, for this
-document shall be your guide. We promise it'll be a wondrous and enlightening
-journey.
-
-An overlay is the set of configuration files that define how the build system
-will build a Chromium OS disk image. Configurations will be different depending
-on the board and architecture type, and what files a developer wants installed
-on a given disk image. Every command in the build process takes a required
-\`--board\` parameter, which developers should pass the overlay name to.
-
-On your first run through this document for creating your first platform, you
-can skip the sections labeled *(advanced)*. This will let you focus on the
-minimum bits to get running, and then you can revisit once you're more
-comfortable with things.
-
-### Private Boards *(advanced)*
-
-This guide covers doing a public build (one that will be released to the world).
-There is a [separate
-guide](/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/private-boards)
-(meant as an add-on to this one) for creating a private board. Setting up a
-private board is useful for when you want to keep your project details a secret
-before launch, or if your board contains proprietary drivers or firmware that
-can't be released publicly.
-
-## Naming
-
-Possible board names follow a simple specification defined below. Note that this
-should generally be followed for any new project, as such this encompasses
-device and model names also, in general any new names that go into the Chromium
-OS code base.
-
-* must have no upper case letters
- * normalization to lower case keeps things simple
-* must start with a letter \[a-z\]
-* may contain as many letters \[a-z\] or numbers \[0-9\] as you like,
- but shorter is preferable, people have to type it often
-* should contain no more than one dash
- * technically there is no limit, but the more dashes you add, the
- uglier it gets
-* must not contain any other character
- * e.g. characters such as, but not limited to, + or % or @ or _ or
- / or . or : or ... are invalid
-* must avoid words that are used with generic (board independent)
- configurations
- * e.g. "release" or "canary" or "firmware" or "factory" or "pfq"
- or "paladin" or "incremental" or "asan" or ...
- * see
- [cbuildbot_config.py](http://git.chromium.org/gitweb/?p=chromiumos/chromite.git;a=blob;f=buildbot/cbuildbot_config.py)
- in the chromite repo for more examples (look at the CONFIG
- constants at the top)
- * you can also run `` `cbuildbot -l -a` `` to get a feel for
- the "group" names
-* should not be generic terms
- * e.g. "board" or "boat" or "car" or "airplane" or "computer" or
- ...
-* should not be a common name
- * e.g. "alex" or "bob" or "caroline" are examples, as there are
- real people involved with the projects with these names it makes
- for awkward conversations about the board
-* should be a noun, not an adjective or adverb
-* should be a playful name
- * avoid terms with negative connotations
-* should not be very common in the code base to make for easy grepping
-* should be clever
-* must not be phonetically similar to an existing board
- * it is not worth the hassle when talking or writing to try and
- figure out what people mean
- * it might make it harder for non-native speakers to differentiate
- * e.g. with "red" and "read", or "pour" and "pored", or "accept"
- and "except", or "flaunt" and "flout"
-* should be pronounceable in conversation
- * no one likes to talk about the XK123A-Z03 board -- that's just
- boring
-* must not pick a name that Google intends to use with a Chrome OS
- board
- * don't worry, it's unlikely
-* should not pick a name which would be easily confused with another
- project
- * e.g. using a name from an Android project (e.g. mako), or a sub
- component of the OS (e.g. ash) is not advisable
-
-Settled on a name? Hopefully it's nifty.
-
-## Bare Framework
-
-Let's start by laying the ground work for the board. We won't worry about the
-fine details (like custom set of packages or flags or ...) at this point. We
-just want a board that the build system will recognize and be able to produce a
-generic set of artifacts. Once we have that, we'll start customizing things.
-
-### Architecture
-
-Be aware that we assume your board falls under one of the main (currently
-supported) architectures:
-
-* amd64 (x86_64) -- 64-bit Intel/AMD processors
-* arm -- 32-bit ARM processors
-* arm64 -- 64-bit ARM processors
-* x86 (i386/i486/i586/i686) -- 32-bit Intel/AMD/etc... processors
-
-If you're using a different architecture, please see the [Chromium OS
-Architecture Porting
-Guide](/chromium-os/how-tos-and-troubleshooting/chromiumos-architecture-porting-guide)
-first.
-
-### src/overlays/overlay-$BOARD/
-
-This is the main location for per-board customization. Let's start off with a
-simple overlay:
-
-```none
-overlay-$BOARD/
-|-- metadata/
-|   `-- layout.conf          # Gentoo repo syntatic sugar
-|-- profiles/
-|   `-- base/
-|       |-- make.defaults    # Board customizations (USE/LINUX_FIRMWARE/etc...)
-|       `-- parent           # Parent profile for this board (common arch/OS settings)
-`-- toolchain.conf           # Toolchains needed to compile this board
-```
-
-Most of these files are one or two lines. Let's go through them one at a time.
-
-#### toolchain.conf
-
-For standard architectures, you only need one line here. Pick the one that
-matches the architecture for your board.
-
-<table>
-<tr>
-<td> <b>architecture</b></td>
-<td> <b>tuple</b></td>
-</tr>
-<tr>
-<td> amd64 (64-bit)</td>
-<td> x86_64-cros-linux-gnu</td>
-</tr>
-<tr>
-<td> arm (armv7)</td>
-<td> armv7a-cros-linux-gnueabihf</td>
-</tr>
-<tr>
-<td> arm64 (armv8/aarch64)</td>
-<td> aarch64-cros-linux-gnu</td>
-</tr>
-<tr>
-<td> x86 (32-bit)</td>
-<td> i686-pc-linux-gnu</td>
-</tr>
-</table>
-
-Example file for an x86_64 board:
-
-```none
-$ cat toolchain.conf
-x86_64-cros-linux-gnu
-```
-
-Note that if you do need more than one toolchain, you can list as many as you
-like (one per line). But the first entry must be the default one for your board.
-
-#### metadata/layout.conf
-
-Don't worry about the content of this file. Simply copy & paste what you see
-below, and then update the `repo-name` field to match your $BOARD.
-
-<pre><code>$ cat metadata/layout.conf
-masters = portage-stable chromiumos eclass-overlay
-profile-formats = portage-2
-repo-name = <b>lumpy</b>
-thin-manifests = true
-use-manifests = strict
-</code></pre>
-
-#### profiles/base/
-
-This is the "base" profile (aka the default) for your board. It allows you to
-customize a wide array of settings.
-
-This is where the majority of board customization happens -- USE customizations
-across all packages in `make.defaults`, or USE and KEYWORDS on a per-package
-basis (via the `package.use` and `package.keywords` files respectively). See the
-portage(5) man page for all the gory details.
-
-By using the profile, stacking behavior across other profiles is much easier to
-reason about (when talking about chipsets, baseboards, projects, etc...).
-
-#### profiles/base/make.defaults
-
-This file can be used to customize global settings for your board. In this first
-go, we'll use a standard form. New content later on should be appended to this.
-
-```none
-$ cat profiles/base/make.defaults
-# Initial value just for style purposes.
-USE=""
-LINUX_FIRMWARE=""
-# Custom optimization settings for C/C++ code.
-BOARD_COMPILER_FLAGS=""
-```
-
-#### profiles/base/parent
-
-This will vary based on your architecture.
-
-<table>
-<tr>
-<td><b>architecture</b></td>
-<td><b>parent profile</b></td>
-</tr>
-<tr>
-<td> amd64</td>
-<td>chromiumos:default/linux/*amd64*/10.0/chromeos</td>
-</tr>
-<tr>
-<td> arm</td>
-<td>chromiumos:default/linux/*arm*/10.0/chromeos</td>
-</tr>
-<tr>
-<td> arm64</td>
-<td>chromiumos:default/linux/*arm64*/10.0/chromeos</td>
-</tr>
-<tr>
-<td> x86</td>
-<td>chromiumos:default/linux/*x86*/10.0/chromeos</td>
-</tr>
-</table>
-
-Example file for an x86_64 board:
-
-```none
-$ cat profiles/base/parent
-chromiumos:default/linux/amd64/10.0/chromeos
-```
-
-#### profiles/&lt;sub-profile&gt;/ (*advanced)*
-
-Sometimes you will want to take an existing board and try out some tweaks on it.
-Perhaps you want to use a different kernel, or change one or two USE flags, or
-use a different compiler settings (like more debugging or technology like ASAN).
-
-To create a sub-profile, simply make a new directory under the profiles/ and
-name it whatever you like. Many Google based systems have one called
-`kernel-next` and we use this to easily test the new development kernel tree.
-
-You should then create a `parent` file in there like so:
-
-```none
-$ cat profiles/kernel-next/parent
-../base
-```
-
-This says the sub-profile will start off using the existing base profile (so you
-don't have to duplicate all the settings you've already put into that
-directory). From here, you can add any files like you would any other profile
-directory.
-
-Now to select this new profile, you use the `--profile` option when running
-`setup_board`. You can either blow away the existing build dir (if one exists),
-or tell the system to simply rewrite the configs to point to the new profile.
-You'll have to make the decision using your knowledge of the profile (whether it
-means a lot of changes or just swapping of one or two packages).
-
-```none
-# Recreate from scratch.
-$ ./setup_board --profile=kernel-next --board=lumpy --force
-# Or just rewrite the configs to use the new profile.
-$ ./setup_board --profile=kernel-next --board=lumpy --regen_configs
-```
-
-### scripts/ (advanced)
-
-This folder contains scripts used during build_image, to tweak the packages that
-are allowed on the final image. The scripts of interest here are
-
-* build_kernel_image.sh -- Sourced by the main build_kernel_image.sh
- script for board specific modifications.
-* board_specific_setup.sh -- Sourced by the main build_image.sh script
- for board specific modifications.
-* disk_layout.json -- Used by boards that need a different disk
- partition than the default one.
-
-## Testing Initial Build
-
-Since your board should be all set up and ready to go, let's test it. All
-operations will be done inside the chroot (so run \`cros_sdk\` to get in first).
-
-```none
-$ ./setup_board --board=$BOARD
-<random build output>
-$ ./build_packages --board=$BOARD
-<lots of build output>
-```
-
-Those should both have worked and produced a generic build for that architecture
-(using your $BOARD name). Let's set about customizing the build now.
-
-Note: as you make changes below to your overlay, re-running `build_packages`
-again will rebuild packages that have changed based on your USE flags. But other
-changes (like compiler settings or kernel configs) will not trigger automatic
-rebuilds. Only new package builds will use the new settings. Once you're happy
-with all your settings though, you can re-run `setup_board` with the `--force`
-flag. Then running `build_packages` will build everything from scratch with the
-latest settings.
-
-## make.defaults: Global Build Settings
-
-This file contains a few key variables you'll be interested in. Since each of
-these can be a large topic all by themselves, this is just an overview.
-
-You can set variables like you would in a shell script (`VAR="value"`), as well
-as expand them (`FOO="${VAR} foo"`). But do not try to use shell commands like
-`if [...]; then` or sub-shells like `$(...)` or `` `...` `` as things will fail.
-
-<table>
-<tr>
-<td><b>Setting</b></td>
-<td><b>Meaning</b></td>
-</tr>
-<tr>
-<td> CHROMEOS_KERNEL_SPLITCONFIG</td>
-<td> The kernel defconfig to start with</td>
-</tr>
-<tr>
-<td> CHROMEOS_KERNEL_ARCH</td>
-<td> The kernel $ARCH to use (normally you do not need to set this)</td>
-</tr>
-<tr>
-<td> USE</td>
-<td> Global control of features (e.g. alsa or ldap or opengl or sse or ...)</td>
-</tr>
-<tr>
-<td> INPUT_DEVICES</td>
-<td> List of drivers used for input (e.g. keyboard or mouse or evdev or ...)</td>
-</tr>
-<tr>
-<td> VIDEO_CARDS</td>
-<td> List of drivers used for video output (e.g. intel or armsoc or nouveau or ...)</td>
-</tr>
-<tr>
-<td> BOARD_COMPILER_FLAGS</td>
-<td> The common set of compiler flags used to optimize for your processor (e.g. -mtune/-march)</td>
-</tr>
-<tr>
-<td> CFLAGS</td>
-<td> Compiler flags used to optimize when building C code</td>
-</tr>
-<tr>
-<td> CXXFLAGS</td>
-<td> Compiler flags used to optimize when building C++ code</td>
-</tr>
-<tr>
-<td> LDFLAGS</td>
-<td> Linker flags used to optimize when linking objects (normally you do not need to set this)</td>
-</tr>
-</table>
-
-### Linux Kernel Settings
-
-#### CHROMEOS_KERNEL_SPLITCONFIG
-
-The kernel is automatically compiled & installed by the build system. In order
-to configure it, you have to start with a defconfig file as the base (it can
-later be refined by various USE flags). This value allows you to control exactly
-that.
-
-You can specify the relative path (to the root of the kernel tree) to your
-defconfig. This is useful if you are using a custom kernel tree rather than the
-official Chromium OS Linux kernel tree.
-
-```none
-$ grep CHROMEOS_KERNEL_CONFIG profiles/base/make.defaults
-CHROMEOS_KERNEL_CONFIG="arch/arm/configs/bcmrpi_defconfig"
-```
-
-Or you can specify a Chromium OS config base. We have one for each major
-platform/SoC that ships in an official Chrome OS device, and we have
-architecture generic configs. You can find the full list by browsing the
-[chromeos/config/ directory in the kernel
-tree](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/HEAD/chromeos/config/).
-Unlike a defconfig, splitconfigs are much smaller fragments which start with a
-common base and then enable/disable a few options relative to that.
-
-```none
-$ grep CHROMEOS_KERNEL_SPLITCONFIG profiles/base/make.defaults
-CHROMEOS_KERNEL_SPLITCONFIG="chromeos-pinetrail-i386"
-```
-
-#### CHROMEOS_KERNEL_ARCH
-
-The kernel build system normally detects what architecture you're using based on
-your overall profile. For example, if you have an amd64 board overlay setup, the
-build knows it should use ARCH=x86_64.
-
-However, there arises edge cases where you want to run a kernel architecture
-that is different from the userland. For example, say you wanted to run a 64-bit
-x86_64 kernel, but you wanted to use a 32-bit i386 userland. If your profile is
-normally setup for an x86 system, you can set this variable to x86_64 to get a
-64-bit kernel.
-
-```none
-$ grep CHROMEOS_KERNEL_ARCH profiles/base/make.defaults
-CHROMEOS_KERNEL_ARCH="x86_64"
-```
-
-### Global USE Feature Selection
-
-One of the strengths of the Gentoo distribution is that you can easily control
-general feature availability in your builds by changing your USE settings. For
-example, if you don't want audio, you can disable alsa & oss. Or if you don't
-want [LDAP](http://en.wikipedia.org/wiki/LDAP), you can disable that. All of the
-ebuild files (the package scripts used to build/install code) have logic to
-check each setting that is optional so you don't have to.
-
-The downside, as you can imagine, is that with thousands and thousands of
-packages, the number of possible USE flags is vast. There are also some optional
-settings which only make sense with one or two packages (global vs local USE
-flags). So weeding through which USE flags exactly matter can be a bit of a
-monstrous task.
-
-### Userland Device Driver Selection
-
-An extension to the USE flag system are so called USE-expanded variables. This
-helps reduce the global USE flag noise a bit by having specially named variables
-with specific meaning. In this case, we'll discuss device inputs
-(keyboards/mouse/etc...) and video outputs.
-
-The exact driver availability (and naming convention) depends on what graphic
-system you intend to use. The X project tends to have the widest selection but
-is a larger overall install size, while DirectFB tends to have smaller selection
-of drivers but be much smaller. We'll focus on X here as that is the main system
-that Chromium supports.
-
-#### INPUT_DEVICES
-
-TBD
-
-#### VIDEO_DEVICES
-
-TBD
-
-## Global Compiler Settings
-
-### Compiler Settings
-
-Everyone likes optimizations. Faster is better, right? Here's the nuts and bolts
-of it.
-
-While picking out flags to use, keep in mind that Chromium OS uses
-[LLVM/Clang](https://clang.llvm.org/) for its compiler suite. It also uses the
-[gold linker](http://en.wikipedia.org/wiki/Gold_(linker)). So see the respective
-documentation.
-
-#### BOARD_COMPILER_FLAGS
-
-You should put compiler optimizations that target your specific cpu into this
-variable. Commonly, this means:
-
-* -march=&lt;arch&gt; -- see the [GCC
- manual](http://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html) for
- complete lists of possible values here
- * This selects the minimum **required** processor/architecture
- that the code will run on
- * *armv7-a* is common for ARMv7 parts
- * *core2* is common for Intel Core2 parts
- * *corei7* is common for Intel Core i7 parts
-* -mtune=&lt;arch&gt; -- see the [GCC
- manual](http://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html) for
- complete lists of possible values here
- * This selects the processor that the code will be optimized best
- for without requiring it
- * If you don't specify this, then the -march setting will be used
- * *cortex-a8* or *cortex-a9* or *cortex-a15* are common for ARM
- parts
-* -mfpu=&lt;fpu&gt; (ARM only)
- * Typical values are neon and vfpv3-d16
- * If you have an ARMv7, pick between these two values
- * If you don't have an ARMv7, then you should already know the
- answer to this question :)
-* -mfloat-abi=hard (ARM only)
- * Keep in mind that Chromium OS assumes you are using the hard
- float ABI. While it is certainly possible to get things working
- with a soft float ABI, you shouldn't waste your time. Join us in
- the future and migrate away from the old & slow soft float ABI
- (this also includes the softfp ABI -- it's just as bad).
-* -mmmx / -msse / -msse2 / etc...
- * There are a variety of machine-specific optimization flags that
- start with -m that you might want to try out
-
-#### CFLAGS
-
-If you have flags that you want to use only when compiling C code, use this
-variable. Otherwise, things will default to `-O2 -g -pipe`.
-
-```none
-$ grep CFLAGS profiles/base/make.defaults
-CFLAGS="-march=foo"
-```
-
-#### CXXFLAGS
-
-If you have flags that you want to use only when compiling C++ code, use this
-variable. Otherwise, things will default to `-O2 -g -pipe`.
-
-```none
-$ grep CXXFLAGS profiles/base/make.defaults
-CXXFLAGS="-march=foo"
-```
-
-#### LDFLAGS
-
-If you have flags that you want to send directly to the linker for all links,
-use this variable.
-
-These should take the form as given to the compiler driver. i.e. use
-`-Wl,-z,relro` rather than `-z relro`.
-
-You can find common settings in the [GNU Linker
-manual](http://sourceware.org/binutils/docs/ld/Options.html).
-
-## Buildbot Configs
-
-Presumably you'd like to be able to easily (and cleanly) produce artifacts for
-your board. In our [chromite
-repo](https://chromium.googlesource.com/chromiumos/chromite), we have a tool
-called
-[cbuildbot](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/scripts/cbuildbot.py)
-that takes care of all that for us. Normally it's run by
-[buildbot](http://buildbot.net/) on a
-[waterfall](http://build.chromium.org/p/chromiumos/waterfall) to produce all the
-goodness, but there's no requirement that buildbot be the tool you use. You can
-even [run it locally](/chromium-os/build/local-trybot-documentation).
-
-### chromite/buildbot/cbuildbot_config.py
-
-At any rate, you'll need to update this [master
-file](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/cbuildbot/cbuildbot_config.py)
-to add your new board configs. There are a few classes of configs to be familiar
-with:
-
-* $BOARD-paladin: used by the [Chromium OS
- CQ](/system/errors/NodeNotFound) -- not needed if you aren't an
- official Chrome OS device
-* $BOARD-full: a public build of the build
-* $BOARD-release: a private build of the board
-* $BOARD-firmware: build just the firmware (bootloader/etc...) for the
- board
-* $BOARD-factory: build the factory install shim -- used to create an
- image for programming devices in the factory/RMA/etc...
-
-The file should be largely self-documenting.
-
-## Google Storage Integration
-
-Sometimes you'll want to host large files or prebuilt binary packages for your
-repo, but you don't want to give out access to everyone in the world. You can
-great some boto config files, and the build scripts will automatically use them
-when they're found.
-
-### googlestorage_account.boto
-
-Create this file in the root of the overlay. This file stores the access
-credential (in cleartext) for the role account.
-
-### googlestorage_acl.\*
-
-These are the ACL files used by gsutil to apply access for people. Used whenever
-you want to upload files and grant access to people who have the boto file.
-
-The TXT format is documented in the [gsutil
-FAQ](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/gsutil.md#installing-gsutil).
-The JSON format is not yet used. Support for the XML format has been dropped.
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/private-boards/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/private-boards/index.md
deleted file mode 100644
index 483062d848e..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/private-boards/index.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide
- - Chromium OS Board Porting Guide
-page_name: private-boards
-title: Creating Private Board Overlays
----
-
-[TOC]
-
-## Introduction
-
-In the main [Chromium OS Board Porting
-Guide](/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide),
-we covered how to create a new board overlay for a project. The goal there was
-to create a board that'd be published for anyone to build themselves. However,
-it is not uncommon for people to want to develop their boards in secret before
-launch, or to have a few pieces that never get publicly released. Chromium OS
-provides a framework for that too, and this guide covers that.
-
-Note that this guide is not standalone. You should be familiar with the
-aforementioned board porting guide as we will not duplicate topics that are in
-common.
-
-### Private (forever) Features
-
-Some examples of things that won't be released (whether it be practical or
-political or legal):
-
-* OEM Customizations like default login wallpapers or Chrome
- extensions
-* Scripts used in factory settings to reset low level hardware when
- handling RMAs/etc...
-* Source code to proprietary drivers/firmware/etc...
- * the public overlay should have a package that installs a
- prebuilt binary though
-* ACLs to private Google Storage buckets
-
-### Private & Public Boards
-
-Private and public overlays do not work in isolation. This means that if you
-have both private and public board overlays, they will both be used. This allows
-you to have a public overlay that includes as many releasable pieces as possible
-(and produce a usable image) while having a private overlay with just the few
-additional private-only pieces.
-
-Often times people will start by creating only a private board overlay (which is
-a perfectly valid setup), and then once things have been released, create a
-public board overlay. This is the recommended workflow and you should keep this
-in mind when writing the private overlay -- don't make things harder for the
-public release. The goal of this guide is to show how to create a private
-overlay that is geared towards being released later on.
-
-## Bare Framework
-
-While public overlays live in src/overlays/overlay-$BOARD/, private overlays
-live in src/private-overlays/overlay-$BOARD-private/. The file structure is the
-same though.
-
-### src/private-overlays/overlay-$BOARD-private/
-
-Even if you have a public overlay, you will need at least these files (even if
-there is no content in them like make.defaults):
-
-```none
-overlay-$BOARD/
-|-- metadata/
-|   `-- layout.conf          # Copy of the public overlay version with updated repo-name
-|-- profiles/
-|   `-- base/
-|       |-- make.defaults    # Private board customizations (USE/LINUX_FIRMWARE/etc...)
-|       `-- parent           # Either same as the public overlay, or a link to it
-`-- toolchain.conf           # Same as the public overlay
-```
-
-Most of these files are one or two lines. Let's go through them one at a time.
-
-#### metadata/layout.conf
-
-This will be the same as the public overlay, except you'll want to add a
-"-private" suffix to the "repo-name" field. Here's what the private overlay for
-the lumpy board uses:
-
-<pre><code>$ cat metadata/layout.conf
-masters = portage-stable chromiumos eclass-overlay
-profile-formats = portage-2
-repo-name = <b>lumpy-private</b>
-thin-manifests = true
-use-manifests = strict
-</code></pre>
-
-#### profiles/base/make.defaults
-
-Since this will be a super set of the public overlay's make.defaults, use this
-form:
-
-```none
-# NOTE: Only put private-specific stuff in this file.  If your settings
-# can be used publicly, then use overlays/overlay-$BOARD/profiles/base/make.defaults
-# instead.  There is no need to duplicate information -- these files stack.
-# Initial value just for style purposes.
-USE=""
-USE="${USE} private-specific-flags"
-# These are settings that today live in the private overlay, but may be moved to the public.
-USE="${USE} public-flags"
-```
-
-#### profiles/base/parent
-
-If you have a public overlay already, then the preference would be to redirect
-to that. Here is how the private lumpy overlay does it:
-
-```none
-$ cat profiles/base/parent
-lumpy:base
-```
-
-You can still add private specific settings to the profile by adding files under
-profiles/base/.
-
-If you don't have a public overlay, then this will have the same content as if
-you had a public overlay (see the public porting guide for more info).
-
-#### toolchain.conf
-
-For now, this should be the same as the public overlay. We plan on making this
-incremental too, but haven't yet done so.
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/create-a-cl/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/create-a-cl/index.md
deleted file mode 100644
index ff7afe1feb3..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/create-a-cl/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: create-a-cl
-title: Create a CL
----
-
-For a more thorough introduction, see the [appropriate section of the Developer
-Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md#making-changes-to-packages-whose-source-code-is-checked-into-chromium-os-git-repositories).
-
-Here's the basic flow when creating/uploading a CL for review:
-
-1. Navigate to the project you want to create a CL for, I'll use
- src/scripts as an example: cd ~/trunk/src/scripts
-2. Start a new branch that tracks the remote master branch: repo start
- &lt;name of branch to create&gt; .
-3. Make the changes you want to upload, and then commit them, following
- the [commit message
- format](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/contributing.md#Commit-messages).
-4. Upload your CL by typing repo upload . --cbr
-5. You'll get given a URL to your CL on Gerrit where it'll be reviewed.
- Add some reviewers and wait for them to check your change.
-6. Once you've been given +2 for your change, mark it verified assuming
- you've verified it works and commit ready.
-7. Wait for the commit queue to pick your change up. If it passes the
- commit queue, it'll be merged. If it fails, a comment will be posted
- on the review and you'll get an email telling you as such.
-8. Congrats! You've contributed your change! \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/creating-local-mirrors/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/creating-local-mirrors/index.md
deleted file mode 100644
index f1df78df17c..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/creating-local-mirrors/index.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: creating-local-mirrors
-title: Creating Local Mirrors
----
-
-[TOC]
-
-## Background
-
-While git works great for keeping things up-to-date and for speeding up network
-transfers (when you need to pull in new commits), the sheer size of the
-ChromiumOS repository is still a hurdle for many groups. Your company might not
-have the greatest connection to the machine where the repositories are hosted,
-or perhaps even your region or country have bottlenecks our of your control. In
-these cases, you probably don't want all of the engineers in your company doing
-the same multi-gigabyte repository mirroring on their various machines as this
-can prohibitively slow to development. Especially if something goes wrong and
-they want to create a fresh checkout!
-
-Have no fear though, it is easy to create your own local mirror of the Chromium
-OS repository, keep it up-to-date, and have all local people pull from that. And
-for those people who want to contribute back, it's easy to do that too!
-
-## Overview
-
-You will need one machine that has a public network connection (for fetching
-updates from the Chromium OS repository), as well as running a git service (so
-your local people can then mirror from your system). While a dedicated machine
-is obviously recommended (as the machine will be seeing a lot of network and
-disk traffic), an existing system will suffice.
-
-You will not need root as all of the operations can be run as a normal user.
-
-## Helper Script
-
-Rather than having to maintain the mirror manually, we've written a script that
-should automate things for you. To fetch it:
-
-```none
-wget 'https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/scripts/cros_mirror?format=text' -O - | base64 -d > cros_mirror
-chmod a+rx cros_mirror
-```
-
-## Server Setup
-
-You will need two bits of information:
-
-* Where to store all the code (many gigabytes)
-* How to serve the data to local users
-
-Let's assume you're going to store the code in /home/cros/mirror/ and run a
-local git repo from a machine known as "local-cros-mirror". Pick any other
-settings you like.
-
-## Initial Sync
-
-The first transfer of source code will take a while (depending on the speed of
-your connection to our servers) as it will be fetching many gigabytes of data.
-
-```none
-./cros_mirror -r /home/cros/mirror -u git://local-cros-mirror
-```
-
-Once that finishes, you're ready to start serving up data!
-
-## Keeping up-to-date
-
-You can put this command into a cronjob to keep the tree up-to-date:
-
-```none
-./cros_mirror -r /home/cros/mirror
-```
-
-It should automatically load the previous settings, and be race free from other
-users pulling from it simultaneously.
-
-## Example Server Usage
-
-With these example settings, you could launch a git instance (as any user who
-has read access to the mirror dir, so doesn't require root) like so:
-
-```none
-git daemon --base-path=/home/cros/mirror/ --export-all
-```
-
-And then your users could pull from it like so:
-
-```none
-repo init -u git://local-cros-mirror/chromiumos/manifest.git --repo-url=git://local-cros-mirror/external/repo.git
-```
-
-## Alternative Client Usage (git insteadOf)
-
-The helper script works by rewriting the manifest on the fly to point to the
-local system. Clients can support this locally without needing to use the
-rewritten manifest by using the insteadOf config.
-
-```none
-git config "url.git://local-cros-mirror.insteadOf" "https://git.chromium.org/git"
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/index.md
deleted file mode 100644
index 9412258857b..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/index.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: debugging-3g
-title: Debugging a cellular modem
----
-
-[TOC]
-
-## Communicating directly with a modem with the AT command set
-
-Most modems support AT commands which control the modem and query for
-information. On a Chromium OS device with the developer mode enabled, you can
-use the socat command to communicate with the modem. You need a Chromium OS
-device with a test image installed (or you can use `gmerge socat` if you are
-familiar with the dev server) . For example:
-
-* Type `CTRL+ALT+T` to enter the crosh shell.
-* Type `shell` to enter the bash shell.
-* Figure you which USB device to use with: `ls /dev/ttyACM*
- /dev/ttyUSB*`
-* Stop modem manager if it is running: `sudo stop modemmanager`
-* Type `sudo socat - /dev/ttyACM1,crnl` or `sudo socat - /dev/ttyUSB0
- `to communicate with the modem.
-* Ensure that the modem is enabled with the command: "`AT+CFUN=1`"
-
-For example:
-
-```none
-crosh> shell
-chronos@localhost ~ $ sudo stop modemmanager
-chronos@localhost ~ $ ls /dev/ttyACM* /dev/ttyUSB*
-/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
-chronos@localhost ~ $ socat - /dev/ttyUSB1
-ATZ
-OK
-AT+CFUN=1
-OK
-ATI
-Manufacturer: Qualcomm Incorporated
-Model: ......
-Revision:....
-ESN: 0x80d...
-+GCAP: +CIS707A, ....
-chronos@localhost ~ $
-```
-
-Depending on the modem, you can try different AT commands, e.g. "AT+CGMI",
-"AT+CGSN", etc.
-
-## A notable exception: Gobi Modems
-
-While modems based on the Qualcomm Gobi chipset support AT commands, Chromium OS
-uses the Qualcomm connection management API to control these modems.
-
-## Using minicom
-
-One can also use minicom to communicate with the modem. This program is
-available in test images (or you can use `gmerge socat` if you are familiar with
-the dev server) .
-
-* Type `CTRL-ALT-T` to enter the crosh shell.
-* Type `shell` to enter the bash shell
-* Figure you which usb device to use with: `ls /dev/ttyACM*
- /dev/ttyUSB*`
-* Stop modem manager if it is running: `sudo stop modem-manager`
-* Type `sudo minicom -s`
-* Ignore, "WARNING: configuration file not found"
-* Use the down arrow key and enter to choose the menu **Serial port
- setup**
-* Type `A` to edit the **Serial Device**, changing it to
- `/dev/ttyACM1` or `/dev/ttyUSB1`
-* Press enter to return to the top level configuration menu
-* Use the arrow keys and enter to select **Exit** which will exit
- configuration and let you communicate with the modem.
-* Use `CTRL-A x` to exit and` CTRL-A z` for help
-
-## Collecting Additional Logging
-
-Run the following crosh command to enable debug logging in modem manager at
-runtime (without restarting modem manager).
-
-```none
-crosh> modem set-logging debug
-```
-
-On a Chromium OS device with the developer modem enabled, you can restart modem
-manager with debug logging enabled.
-
-```none
-crosh> shell
-chronos@localhost ~ $ sudo restart modemmanager MM_LOGLEVEL=DEBUG
-```
-
-## Testing Download Speeds
-
-Chromium images include the sftp client, and also wget and curl for downloading.
-If you have a test build, it contains iperf too. You will need to enable
-developer mode on the platform before you are able to access the shell.
-
-* Flip the dev switch to enable developer mode.
-* Reboot the system
-* Wait for system to wipe stateful partition.
-* When booted, press CTRL+ALT+F2 (right arrow) to enter VT2 shell.
-* Use username chronos or root. No password necessary.
-* You can now use
- [sftp](http://www.openbsd.org/cgi-bin/man.cgi?query=sftp&sektion=1),
- [curl](http://curl.haxx.se/docs/manpage.html),
- [wget](http://www.gnu.org/software/wget/manual/wget.html) or
- [iperf](http://iperf.sourceforge.net/) for testing performance. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/manual-e362-setup/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/manual-e362-setup/index.md
deleted file mode 100644
index ccfa96e4f42..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/manual-e362-setup/index.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/debugging-3g
- - Debugging a cellular modem
-page_name: manual-e362-setup
-title: 'LTE: Manual E362 setup'
----
-
-## LTE Support on Link
-
-**E362 modems are supported on the Link platform because the make.conf file
-specifies USE=modemmanager-next. There should be nothing special you need to do,
-other than to make sure that you are running shill and not flimflam.**
-
----
-
-## LTE Support on Alex
-
-**For developers using older hardware, e.g. Alex, the following instructions are
-still relevant.**
-
-**How to set up to manually test and use a Novatel E362 LTE modem (updated 2012-2-14)**
-**(This should all be handled by Shill in the near future)**
-**You will need:**
-**- ChromeOS dev system**
-**- ChromeOS device with an E362 + appropriate SIM**
-**On your dev server, in the chroot, run:**
-**emerge-${BOARD} --unmerge net-misc/modemmanager modemmanager-next-interfaces
-virtual/modemmanager**
-
-start-devserver
-On the device, as root, run:
-stop modemmanager
-mount -o remount,rw /
-emerge --unmerge net-misc/modemmanager modemmanager-next-interfaces
-virtual/modemmanager
-Set up the network to dev server, USB ethernet or whatever, in your usual
-manner, and run:
-USE=modemmanager_next gmerge --accept_stable virtual/modemmanager
-start modemmanager
-
-mmcli -L
-mmcli -m 0
-Confirm that the modem is detected - this command should produce about 20 lines
-of status about the device.
-To connect:
-ifconfig eth0 down
-mmcli -m 0 --simple-connect=""
-ifconfig eth0 up
-This last command triggers flimflam to run DHCP and configure the interface.
--&gt; Make sure you unplug USB Ethernet devices and disable wifi before running
-speedtest or similar!
-To disconnect:
-mmcli -m 0 --simple-disconnect \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/modem-debugging-with-mmcli/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/modem-debugging-with-mmcli/index.md
deleted file mode 100644
index c84944c2c1e..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-3g/modem-debugging-with-mmcli/index.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/debugging-3g
- - Debugging a cellular modem
-page_name: modem-debugging-with-mmcli
-title: Modem debugging with mmcli (from the modemmanager-next package)
----
-
-Listing modems/finding the index number of a modem (The modem index frequently
-changes during a suspend-resume cycle):
-
-mmcli -L
-
-(Further examples will assume modem index 0. Substitute your own modem index
-where necessary.)
-
-See the status of a modem:
-
-mmcli -m 0
-
-Enable a modem (useful side effects usually include registering on a network and
-getting an operator ID and name)
-
-mmcli -m 0 -e
-
-Minimal connection and disconnection:
-
-mmcli -m 0 --simple-connect="apn=foo.carrier.com"
-
-mmcli -m 0 --simple-disconnect
-
-Set logging level to maximium (equivalent to the old mm_debug debug):
-
-mmcli -G DEBUG
-
-Set logging level to minimum (equivalent to the old mm_debug err):
-
-mmcli -G ERR
-
-Arbitrary AT commands - available if ModemManager is started with the --debug
-flag:
-
-This is a good test command to see if ModemManager is speaking to the modem. The
-modem should already be in state E0 (no command echo); you should immediately
-get an empty reply. You can check /var/log/messages for the message exchange if
-you've previously turned up the logging level to maximum.
-
-mmcli -m 0 --command="E0"
-
-Do a network scan and list the carriers found - this requires a
-longer-than-default timeout.
-
-mmcli -m 0 --command-timeout=120 --command="+COPS?" \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-features/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-features/index.md
deleted file mode 100644
index 5c64d4fb932..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-features/index.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: debugging-features
-title: Debugging Features
----
-
-[TOC]
-
-This page describes Chromium OS features that are supported beginning in release
-M41.
-
-## Introduction
-
-You can enable debugging features on your Chrome OS device to support installing
-and testing custom code on your device. These features allow you to:
-
-* Remove rootfs verification so you can modify OS files
-* Enable SSH access to the device using the standard test keys so you
- can use tools such as `cros flash` to access the device
-* Enable booting from USB so you can install an OS image from a USB
- drive
-* Set both the dev and the system root login password to a custom
- value so you can manually SSH into the device
-
-Debugging features lower system security, primarily by allowing remote access
-via SSH using publicly known keys. For this reason, you can enable them only
-during the Out of the Box Experience (OOBE) when the device is booted in
-Developer Mode. Once you've finished OOBE (e.g. you've logged in to an account),
-you can't access this section again. You'd have to powerwash it to reset back.
-
-## Enabling debugging features
-
-To enable debugging features, do the following:
-
-1. Use the [powerwash
- process](https://support.google.com/chromebook/answer/183084) or the
- [recovery
- process](https://support.google.com/chromebook/answer/1080595) to
- wipe your hard drive. After the device reboots and you sign in
- again, you’ll see the first screen.
- **Note:** For managed Chrome OS devices, do NOT follow the powerwash or
- recovery instructions because you won’t be able re-enroll the device
- afterwards. Instead, [wipe the data on your Chrome OS
- device](https://support.google.com/chrome/a/answer/1360642) to reset the
- device.
-2. Set the device to Developer Mode (see [Developer Information for
- Chrome OS
- Devices](http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices)).
- The system reboots, then displays the “OS Verification is OFF"
- screen.
-3. Press Ctrl+D to dismiss this screen. The device reboots and shows
- the first screen.
-4. Click the **Enable debugging features** link. A confirmation dialog
- displays.
-5. Click **Proceed**. The system reboots and displays a dialog with
- password prompts.
-6. \[OPTIONAL\] Set the new root password.
- **Note:** If you leave the root password blank, the password defaults to .
-7. Click **Enable**. The screen displays messages indicating success or
- failure.
-8. Click **OK**. You'll see the first screen again.
-9. Follow the remaining prompts to configure your Chrome device.
-
-## Disabling debugging features
-
-On a managed Chrome OS device, most debugging features remain enabled, even
-after powerwashing or wiping the data. Use one of the following processes to
-disable features, depending on your requirements:
-
-* [Chrome OS recovery
- process](https://support.google.com/chromebook/answer/1080595)
-* The [cros
- flash](http://www.chromium.org/chromium-os/build/cros-flash) script
- for updating the Chrome OS image directly
-* The [cros
- flash](http://www.chromium.org/chromium-os/build/cros-flash) script
- for updating the Chrome OS image via USB (or directly using the
- `--clobber-stateful` flag)
-* [Powerwash](https://support.google.com/chromebook/answer/183084)
- process
-
-This table summarizes the features reset by each procedure (✓ means the feature
-is reset):
-
-<table>
-<tr>
-<td>Chrome OS Recovery</td>
-<td>`cros flash`</td>
-<td>`cros flash usb://`</td>
-<td> or</td>
-<td> `cros flash --clobber-stateful`</td>
-<td>Powerwash</td>
-</tr>
-<tr>
-<td> Rootfs verification</td>
-<td>✓</td>
-<td>✓</td>
-<td>✓</td>
-</tr>
-<tr>
-<td> SSH w/ test keys</td>
-<td>✓</td>
-<td>✓</td>
-<td>✓</td>
-</tr>
-<tr>
-<td> USB boot</td>
-<td>✓</td>
-</tr>
-<tr>
-<td> System password</td>
-<td> (for SSH login)</td>
-<td>✓</td>
-<td>✓</td>
-<td>✓</td>
-</tr>
-<tr>
-<td> Dev password</td>
-<td> (if present, overrides</td>
-<td> system password for VT2 login)</td>
-<td>✓</td>
-<td>✓</td>
-<td>✓</td>
-</tr>
-</table>
-
-To manually disable booting from USB:
-
-1. Make sure the device is in developer mode.
-2. Open the terminal window by pressing Ctrl + Alt + F2.
-3. Log in as `root`.
-4. Type the default password `test0000,` or the custom password you set
- previously.
-5. At the command prompt, type `crossystem dev_boot_usb=0` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-hangs/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-hangs/index.md
deleted file mode 100644
index 2e7334ce229..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-hangs/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: debugging-hangs
-title: Debugging system hangs (go/cros-debug-hang)
----
-
-If your Chromebook appears hung (i.e. the screen is frozen and the keyboard
-and/or trackpad are unresponsive), try the following steps:
-
-* Pre-Recovery Steps
- * Note any visible system indicators like LEDs. Are they blinking
- or solid. What color?
- * Note charging/discharging behavior if possible. Does plugging a
- charger in change LED.
- * Note USB response. Does touching an gnubby blink. Does charging
- a phone via a USB port work?
-* Recovery Steps
- * Press **Alt+VolumeUp+X**. If you're using a Chromebox, use F10
- instead of VolumeUp. These three keys need to be pressed in that
- order.
- * This should cause the Chrome browser to restart, and it may
- take a few seconds. If the system becomes responsive, go to
- last step.
- * Press **Alt+VolumeUp+X** a second time.
- * This should cause the kernel to panic-reboot. If the system
- becomes responsive, go to last step.
- * Press **Alt+VolumeUp+R** which should cause a warm reset &
- reboot. If so, go to last step. (This may not work on older
- hardware.)
- * Press and hold the **power button** for 8+ seconds and the
- system will power off (if shutdown is clean) or it will reboot
- via EC reset
- * Press **Refresh+Power button(F3).** This causes an EC reset on
- most systems and should be used only as a last resort as it
- minimizes the amount of available debug info.
-* Last Step
- * Power on (if necessary) Log in, and immediately file feedback
- using Alt+Shift+i.
- * Make sure that "Send system and app information" is checked.
- * Make sure to identify what recovery steps you used including
- the ones you believed failed.
-
-You may also be able to see crash report IDs at chrome://crashes.
-
-For a complete and up-to-date list of debug key sequences including those for
-ChromiumOS devices without a keyboard check
-[here](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/debug_buttons.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/host-file-access/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/host-file-access/index.md
deleted file mode 100644
index 3a3cff64056..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/host-file-access/index.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/debugging-tips
- - Chromium on Chromium OS Debugging Tips
-page_name: host-file-access
-title: Host File Access
----
-
-[TOC]
-
-Getting access to files on your host from the target over a network is very
-useful. This page lists the ways that this is possible.
-
-## USB stick (sneakernet)
-
-You can put files (typically a full Chromium OS image build with `build_image`)
-onto a USB stick, insert it into the target, mount the device and access the
-files from there.
-
-## Using sshfs
-
-Since you can use ssh in user space, and we have a 'fuse' module to permit user
-space filesystems, we can use sshfs to mount directories:
-
-<pre><code>
-# Make sure fuse is loaded
-sudo modprobe fuse
-# Create location to mount build directory
-mkdir /tmp/chrome
-# Mount your dev directory
-sshfs <i>username</i>@<i>machine</i>:<i>/path/to/chrome</i> /tmp/chrome
-# Take a look
-ls /tmp/chrome
-</code></pre>
-
-You can hope for about 5MB/s over sshfs on a Cortex-A9 with USB Ethernet.
-
-## Using NFS
-
-[Please see
-here](/chromium-os/how-tos-and-troubleshooting/network-based-development) for
-full details.
-NFS requires a lot more setup but has additional features. There are two ways to
-use NFS from your target:
-
-* NFS root - use an NFS mount as your root file system
-* NFS mount - boot as normal from a USB stick / SSD / eMMC, but then
- later mount a directory on your host machine
-
-Each option has advantages and disadvantages which will be noted below. Both
-require a certain amount of setup on both the host and target. In NFS terms the
-host will be the **server** (containing the files which we want to export) and
-the target will be the **client**.
-
-Transfer speed with NFS is faster than sshfs since CPU overhead is less, but is
-limited by the USB interface if you are using a 10/100 USB Ethernet dongle. With
-a Gigabit USB3 dongle it should operate much faster than ssh.
-
-## NFS Mount
-
-It is also possible to boot from USB or eMMC, but then later mount a filesystem
-on your host. This requires some user space utilities to enable portmap, etc.
-Please add documentation here if you do this. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/index.md
deleted file mode 100644
index ad2703ab8a2..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/index.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: debugging-tips
-title: Chromium on Chromium OS Debugging Tips
----
-
-## [TOC]
-
-These instructions will help you debug programs, including the chromium browser
-on your chromium os netbook.
-
-### Compiling the browser
-
-See the "[simple
-chrome](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md)"
-workflow.
-
-## Setting up the device
-
-We recommend that developers use gdb to debug their Chromium-based OS. The gdb
-is already included in the chromium os image. You can chroot into your mounted
-image or open a new terminal in an existing system with an installed copy of
-Chromium OS.
-You can talk to your unit over a serial connection, and you can use this to get
-network access / ssh working.
-
-To get this code on the netbook you can put it someplace accessible via http and
-use wget on the netbook.
-
-# Remount the root drive read / write
-sudo mount -o remount,rw /
-
-Each time you reboot you'll need to get access to your built program. You could
-copy it from your build directory, but it's easier to use sshfs to mount that
-directory directly on the netbook. Also, chrome will be too large to debug
-natively on the netbook. Instead you'll need to use gdbserver. So do this:
-[Set up sshfs
-here](/chromium-os/how-tos-and-troubleshooting/debugging-tips/host-file-access).
-
-# Open port so that gdbserver can be reached
-
-sudo /sbin/iptables -A INPUT -p tcp --dport 1234 -j ACCEPT
-
-The built chrome will be at /tmp/chrome/src/out/Debug/chrome. You can run it
-from there to test, or within gdbserver. Make sure you run chrome/gdbserver at
-the netbook's command prompt, not from your remote ssh session.
-
-# Run gdb server, listening on port 1234 (opened in iptables command above)
-
-sudo gdbserver :1234 /tmp/chrome/src/*BOARD-NAME*_out/Debug/chrome
-
-## Talking to the device from your development machine
-
-**For more up-to-date instructions, see [the Remote GDB section of the Simple
-Chrome
-workflow](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md#Remote-GDB).**
-
-First build a cross-gdb on your host machine (inside the chroot).
-`sudo USE=expat emerge `cross-i686-pc-linux-gnu/gdb (x86)
-`sudo USE=expat emerge `cross-armv7a-cros-linux-gnueabi/gdb (arm)
-On your host machine run gdb and make sure you set the sysroot to point to the
-top of your chroot so that gdb can find the proper shared objects.
-
-i686-pc-linux-gnu-gdb` *BOARD-NAME*_out/Debug/chrome`
-
-`(gdb) set sysroot /build/*BOARD-NAME*/`
-
-On your host machine you can connect to this gdb server:
-
-(gdb) target remote *IP.ADDR.OF.NETBOOK*:1234
-
-The program is now paused and you have control over it from your host machine.
-To start execution:
-
-(gdb) continue
-
-If you want to pass command-line arguments, do so on the target machine at the
-end of the gdbserver command line.
-
-You should follow the [Linux debugging
-tips](http://code.google.com/p/chromium/wiki/LinuxDebugging) for help debugging
-Chromium.
-
-You can debug smaller programs directly. By default, we strip out many of the
-debugging symbols when creating our debian packages. To ensure that you have the
-debugging symbols for a particular package, check the rules file under
-package_source_dir/debian/rules ... and ensure dh_strip is not located anywhere
-in this file (generally in binary-arch or build-arch rules).
-
-To get started, run `gdb` from a terminal. Type `help` to get an idea of the
-commands.
-
-To debug an already running program use:
-
-`(gdb) attach *pid*`
-
-To debug a new program use:
-(gdb) file *file-path*
-
-*(gdb) start *filename**
-
-For commands while you have a running program:
-
-(gdb) help running
-
-If you step through a program and start getting jibberish (read: addresses as
-opposed to source code and line numbers) then you need to include the symbols
-when building the package. Go back to the debian rules file and make sure -g is
-in the compiler flags and dh_strip is not anywhere in there.
-
-## **Getting the Chrome logs**
-
-On test images, Chrome always logs to `/var/log/chrome` (see [this
-thread](https://groups.google.com/a/chromium.org/d/topic/chromium-os-dev/ms0xBblGP1c/discussion)).
-On other images, only logs from the login screen can be found there; after
-login, they are written to `/home/chronos/user/log` (this location is on the
-cryptohome, so it's only available while the user is logged in). `stderr` from
-Chrome, and messages that it logs before it initializes its log file, appear in
-`/var/log/ui`.
-
-## **Enabling core dumps**
-
-Core dumps are disabled by default. To turn it on:
-
-sudo touch /root/.leave_core
-
-sudo touch /mnt/stateful_partition/etc/collect_chrome_crashes
-
-sudo restart ui
-
-Core files will be generated in the directory
-
-/var/spool/crash
-
-or
-
-/home/chronos/user/crash
-
-Once you have a core file, you can load it to gdb.
-
-gdb /opt/google/chrome/chrome core.chrome.1234
-
-Note: Core files can easily fill up your stateful partition, which can cause
-various issues. Please clean them up regularly.
-
-## **Getting stack trace with symbols**
-
-emerge/cros deploy strips debug symbols by default, and loading a core file into
-gdb may not give you much info without these symbols.
-
-To preserve debug symbols, compile chrome for chromeos with the following
-environment variables (in chroot).
-
-export KEEP_CHROME_DEBUG_SYMBOLS=1
-
-export REMOVE_WEBCORE_DEBUG_SYMBOLS=1
-
-The 2nd one will exclude webkit debug symbols which is quite large and probably
-not
-
-useful for debugging chrome on chromeos. If you want to have webkit debug
-symbols, you may skip it.
-
-If you are planning to use gmerge to build and copy a debug chrome image with
-symbols, you will need to create an image with a larger rootfs size, e.g.:
-
-(chroot) ./build_image --adjust_part='ROOT-A:+1G' --noenable_rootfs_verification
-test
-
-(Run ./build_image --help for default values)
-
-If you are using a pre-built test image (ex, from builder artifacts), download
-the "debug" archive file (which should contain files like debug/\*.debug),
-
-extract to /usr/local/lib (ex, Chrome's debug file should be
-/usr/local/lib/opt/google/chrome/chrome.debug), and start GDB.
-
-## **Set session manager not to restart chrome when chrome is killed (or crashed)**
-
-You may want to kill currently running chrome and run your own copy (via sshfs
-for example), or want to leave
-
-the state when chrome crashes. To do that, you need to tell session manager not
-to restart chrome by creating a file:
-
-touch /var/run/disable_chrome_restart
-
-Note that this is temp file, so you need to re-create the file when you restart
-chromium os. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/setting-up-tcpdump/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/setting-up-tcpdump/index.md
deleted file mode 100644
index cb5a39e1fbe..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/setting-up-tcpdump/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/debugging-tips
- - Chromium on Chromium OS Debugging Tips
-page_name: setting-up-tcpdump
-title: Setting up tcpdump
----
-
-## Setting up tcpdump
-
-tcpdump is installed by default on test builds. You should be able to run
-tcpdump to collect traces, then copy the files back to your development machine
-and analyze the traces with your favorite tool (tcpdump, WireShark, etc). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/target-serial-access/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/target-serial-access/index.md
deleted file mode 100644
index 8c5247c769c..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/debugging-tips/target-serial-access/index.md
+++ /dev/null
@@ -1,178 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/debugging-tips
- - Chromium on Chromium OS Debugging Tips
-page_name: target-serial-access
-title: Target Serial Access
----
-
-[TOC]
-
-It is useful to be able to get a terminal on your target device. This page lists
-some options for this. Instructions assume Ubuntu Lucid and a 115200 serial
-link. Also you should be using a serial null modem cable.
-
-## USB Serial Dongle
-
-This is a common way of getting a serial port on a computer. See [TRENDnet USB
-to Serial
-converter](http://www.google.com/url?q=http%3A%2F%2Ftrendnet.com%2Fproducts%2Fproddetail.asp%3Fprod%3D150_TU-S9%26cat%3D49&sa=D&sntz=1&usg=AFrqEzej3O8N15gqmTe0cLvyXkQt6wK5uQ)
-for example.
-
-## ser2net
-
-This is a convenient tool which allows you to 'telnet' into your board over a
-serial link. These instructions assume you are using a single USB serial dongle
-(/dev/ttyUSB0) but you can also use a real serial port (/dev/ttyS0) if you like.
-If you have an FTDI serial device providing serial access then it will use
-/dev/ttyACM0.
-
-```none
-sudo apt-get install ser2net
-```
-
-Edit /etc/ser2net.conf and add this line:
-
-```none
-4000:telnet:600:/dev/ttyUSB0:115200 8DATABITS NONE 1STOPBIT banner
-```
-
-Then restart so that ser2net sees your changes:
-
-```none
-sudo /etc/init.d/ser2net restart
-```
-
-You can now connect to the board with:
-
-```none
-telnet localhost 4000
-```
-
-To disconnect, press Ctrl-\\ then Ctrl-D.
-
-## screen
-
-Screen is a useful tool for maintaining connections which you can switch between
-easily. It is often used to run a long-running job such that you can logout,
-then later login, reconnect and check progress. You can also use screen to get a
-serial link:
-
-```none
-screen -t 'ttyUSB0 115200 8n1' /dev/ttyUSB0 115200,-ixoff,-ixon
-```
-
-Reset the machine and U-Boot should start printing to your terminal.
-For help, use Ctrl-A Ctrl-?. To disconnect, press Ctrl-A Ctrl-D and to quit the
-session Ctrl-A Ctrl-\\
-
-## minicom
-
-Minicom is a terminal program, intended for use with a modem, that
-works well as an intermediary to any remote system connect through a
-serial port.
-One big advantage of minicom is that it allows one to easily capture
-text into a file.
-
-### Minicom Installation
-
-To install minicom, execute the following
-
-```none
-  sudo apt-get install minicom
-```
-
-### Minicom Configuration
-
-```none
-  sudo minicom -s
-```
-
-The configuration is done through a simple menu system. Use the options below
-for a basic working configuration.
-
-```none
-  Select 'Serial Port Setup' using the arrow keys; press <Enter>
-  Select 'A': enter the name of your serial port.  (ex: /dev/ttyUSB0)
-  Select 'E': select 'E' (115200), then 'Q' (8N1)
-  Set 'Hardware Flow Control' to 'No.
-  Set 'Software Flow Control' to 'No'.
-  Press <Enter>; this brings you back to the main menu (titled '[configuration]')
-  Select 'Save setup as dfl'; press <Enter>.
-  Select 'Exit from Minicom'; press <Enter>.
-```
-
-### Execution
-
-Minicom needs access to the configured serial port. This means you
-either need to change the permissions on that port to allow your
-normal user to access the port in read/write mode, or run using
-'sudo'.
-
-```none
- sudo minicom
-```
-
-#### Minicom commands
-
-All commands are prefixed with &lt;Ctrl-A&gt;, which will be abbreviated
-C-a.
-
-```none
-<table>
-```
-```none&#10;<tr>&#10;```
-```none&#10;<td> Key</td>&#10;```
-```none&#10;<td> Result</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a Z&#10;</td>&#10;```
-```none&#10;<td>Opens interactive menu</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a C&#10;</td>&#10;```
-```none&#10;<td>Clear Screen</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a L</td>&#10;```
-```none&#10;<td>Prompt for capture log file name.</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a L</td>&#10;```
-```none&#10;<td>(after opening log file) Pause or close log file</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a Q&#10;</td>&#10;```
-```none&#10;<td> Quit (w/o modem reset)</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a X &#10;</td>&#10;```
-```none&#10;<td> Quit immediately</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a E</td>&#10;```
-```none&#10;<td>Toggle echo of locally typed characters</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a W&#10;</td>&#10;```
-```none&#10;<td>Toggle Line Wrap&#10;</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>C-a T&#10;</td>&#10;```
-```none&#10;<td>Select terminal settings</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;</table>&#10;```
-
-## ssh
-
-Once you have network access, and assuming you are using a test build, you can
-use ssh to connect to your target.
-
-```none
-ssh chronos@192.168.2.3
-(password test0000)
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/developer-faq/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/developer-faq/index.md
deleted file mode 100644
index 23ff06f1925..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/developer-faq/index.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: developer-faq
-title: High-Level Developer FAQ
----
-
-[TOC]
-
-This FAQ is for developers; check out the [General Chromium OS
-FAQ](/chromium-os/chromium-os-faq) for non-development related questions. If
-that doesn't work out, try the [discussion groups](/system/errors/NodeNotFound).
-
----
-
-## Should I call my build Chromium OS or Google Chrome OS?
-
-You should call it Chromium OS.
-
-### Will the autoupdate feature work on both Google Chrome OS and Chromium OS?
-
-We don't plan to support autoupdate on Chromium OS, as we did not build the
-binaries, and we don't know what modifications you've made to the system, so we
-don't want to blow away any changes you may have made to the code. Therefore
-Google will not autoupdate Chromium OS systems, but you're welcome to set up
-your own autoupdate server.
-
-Google Chrome OS will autoupdate to keep consumer machines running the latest
-and greatest at all times.
-
-### Will the verified boot feature work on both Google Chrome OS and Chromium OS?
-
-The verified boot procedure relies on custom firmware and hardware modifications
-and hence will work only for Google Chrome OS.
-
-### ---
-
-### ## What are the minimum hardware requirements?
-
-The open-source nature of Chromium OS allows it to be ported to an expanding
-range of hardware; however, some base requirements are likely to remain fixed.
-
-Hardware-accelerated OpenGL or OpenGL ES support is mandatory, and the Chromium
-browser's memory footprint is an obvious lower bound for RAM.
-
-See the [Developer Hardware
-list](/chromium-os/getting-dev-hardware/dev-hardware-list) for examples of
-netbooks on which developers are successfully running Chromium OS.
-
-### What about other hardware: Does Chromium OS support my wifi card?
-
-In order to ensure the best user experience with Google Chrome OS, we're going
-through a careful hardware selection and testing process for hardware
-components.
-
-For Chromium OS, the open source community and Google are working to add support
-for a very broad range of hardware. If the device you're interested in has an
-open source driver already in the upstream Linux kernel, please send a request
-to
-[chromium-os-dev](https://groups.google.com/a/chromium.org/group/chromium-os-dev/topics)
--- if you can include a proposed patch, even better.
-
-Please see our [supported developer hardware
-wiki](/chromium-os/getting-dev-hardware/dev-hardware-list) for more details.
-
-### Is it true that you don't support hard disk drives (HDDs)?
-
-Firstly, we should point out that the information in the open source release has
-been misinterpreted as saying that we don't support local storage. Most Google
-Chrome OS devices use SSDs although we have a few that also use HDDs. The
-reasons to prefer SSD is performance and reliability.
-
-Chromium OS will indeed work with conventional HDDs, though the disk accesses
-are optimized for flash-based storage, like reduced read-ahead.
-
----
-
-## Chromium OS issues
-
-### I can't log in
-
-Login may fail under various circumstances. For example, if you do not have
-network connectivity and you have never logged in before, then you will not be
-able to log in.
-
-The login screen should display a message beneath the username/password input
-field. For example, if you have network connectivity and provide the wrong
-credentials, you will be told that either your username or password is
-incorrect.
-
-To troubleshoot networking at this point, you have to jump to a virtual terminal
-(only enabled on dev machines) by using Ctrl+Alt+F2 (you might need to use the
-[shared user password](/system/errors/NodeNotFound) that to login if you set
-it).
-
-If you are able to log in to the virtual terminal, reconfigure the networking
-service (`sudo restart shill`). **Note:** If you are having trouble with
-wireless, just plug in an Ethernet cable. It is much easier to troubleshoot a
-networking issue once you have logged in.
-
-### How is timezone managed?
-
-On Chromium OS, local timezone is managed by the Chromium browser. The default
-timezone is Pacific Time (PST). To change it, please refer to
-<https://support.google.com/chromebook/answer/177871?hl=en>.
-
-In the case of a Chrome-less build, the timezone is left unset and defaulted to
-UTC. To set to a different timezone, the symlink /var/lib/timezone/localtime
-should be linked to a specific zone file, such as /usr/share/zoneinfo/UTC.
-
----
-
-## Miscellaneous
-
-### What are the shortcut keys?
-
-To get a visual overlay, hit Ctrl-Alt-/ and then hold modifier keys like Ctrl,
-Alt, and Shift to see the associated hotkeys.
-
-Most browser shortcuts also apply:
-<http://www.google.com/support/chrome/bin/answer.py?hl=en&answer=95743>
-
-### Are native applications supported?
-
-Google Chrome OS is a web-centric system, so all applications are web
-applications; this provides powerful and simple manageability and security. To
-write applications that will benefit from native code execution we recommend
-using NativeClient, an open source project that allows web apps to run native
-code securely within a browser. See
-<http://code.google.com/chrome/nativeclient/> for more details.
-
-Of course Chromium OS is open source, and it's Linux. This means that as a
-developer you can do pretty much anything you want, including installing any
-Linux application. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/extension-support-for-app-webviews/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/extension-support-for-app-webviews/index.md
deleted file mode 100644
index 010ff84ad54..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/extension-support-for-app-webviews/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: extension-support-for-app-webviews
-title: Extension Support for App WebViews
----
-
-## It's sometimes useful to allow an extension to interact with WebView content. For example, applications running in Chrome OS Kiosk mode may want to allow users to use accessibility extensions. This doc offers a brief walkthrough for how extensions can use existing WebView and App framework support to interact with WebView content. It describes the basic mechanisms that are available and proposes a simple architecture an app could employ to connect one or more extensions to its WebViews’ guests.
-
-<https://docs.google.com/document/d/1fVLHKh8lmN3rQDyueabReNB11DU0kGmx8UVyeZvmmHc/edit#> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/force-out-of-box-experience-oobe/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/force-out-of-box-experience-oobe/index.md
deleted file mode 100644
index 9ab193f0d4d..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/force-out-of-box-experience-oobe/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: force-out-of-box-experience-oobe
-title: How to force the out-of-box experience (OOBE)
----
-
-You can force your device to redo the out-of-box experience (OOBE) as follows:
-
-* Boot to login screen
-* Switch to VT2 (press ctrl-alt-F2 -- only possible in Dev mode)
-* Login as root (or chronos and use sudo)
-* stop ui
-* rm -rf /home/chronos/Local\\ State
-* rm -rf /home/chronos/.oobe_completed
-* reboot \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/GSM PIN code types.png.sha1 b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/GSM PIN code types.png.sha1
deleted file mode 100644
index 0f8c2eac85e..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/GSM PIN code types.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-770241408235563a2c9e74294d60906d995699f7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/index.md
deleted file mode 100644
index adc91cdf9d9..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/index.md
+++ /dev/null
@@ -1,242 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: get-a-3g-modem-running
-title: Cellular modem FAQ
----
-
-[TOC]
-
-Chrome OS supports Gobi modems via Cromo, and various other modems via Modem
-Manager. Chrome OS only supports cellular modems that have a cdc_ether (or
-similar) network interface. This page documents what is useful to know if you
-wish to bring up new modems and/or GSM carriers.
-
-## How do I verify that a modem is seen by Modem Manager?
-
-There are several modem tools that are part of the flimflam-testscripts package.
-This package is install on test builds. The tools can be found in
-/usr/local/lib/flimflam/test. The first step is to verify that Chrome OS can see
-the modem.
-
-> `PATH=${PATH}:/usr/local/lib/flimflam/test`
-
-> `mm-list-modems`
-
-You should see something like:
-
-> `/org/freedesktop/ModemManager/Modems/0`
-> ` or`
-> ` /org/chromium/Cromo/Gobi/0`
-
-## What if the modem is not seen by Modem Manager?
-
-* make sure kernel has proper drivers
-* do you need to run modem-modeswitch?
-* do you need to eject the modem?
-* Can you write some udev rules to automatically eject/modeswtich the
- modem?
-
-## How do I get more information about a modem?
-
-Enable the modem and use the mm-status command to get more information about the
-modem.
-
-> `mm-enable`
-
-> `modem status`
-
-The output will look like:
-
-> `Path: /org/freedesktop/ModemManager/Modems/0`
-
-> `Iface org.freedesktop.ModemManager.Modem`
-
-> `MasterDevice = /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1`
-
-> `UnlockRequired = `
-
-> `Enabled = 1`
-
-> `IpMethod = 0`
-
-> `Driver = option1`
-
-> `Device = ttyUSB0`
-
-> `Type = 2`
-
-> `GetInfo()`
-
-> `---------`
-
-> `Manufacturer: NOVATEL WIRELESS INCORPORATED`
-
-> `Modem: MC760 SPRINT`
-
-> `Version: Q6085BDRAGONFLY_S122 [Dec 09 2008 18:00:00]`
-
-> `GetEsn()`
-
-> `--------`
-
-> `esn = 0x5B96D0FB`
-
-> `GetRegistrationState()`
-
-> `----------------------`
-
-> `CDMA-1x state: 1`
-
-> `EVDO state: 1`
-
-> `GetServingSystem()`
-
-> `------------------`
-
-> `Serving System band class: 2`
-
-> `Serving System band: B`
-
-> `Serving System id: 4106`
-
-> `GetSignalQuality()`
-
-> `------------------`
-
-> `Signal Quality: 100`
-
-## How do I manually connect a modem?
-
-You can use the mm-connect script to manually connect a modem to a 3G network.
-If you are using a GSM network you may need to edit mm-connect to add your
-carrier (APN, number, pin) to the dictionary of connect arguments. Connecting a
-modem though in most cases only establishes a PDP context between the modem and
-the carrier. You'll then need to run dhclient on the associated interface.
-
-## How do I fix flimflam to recognize my GSM carrier?
-
-Flimflam uses the mobile-broadband-provider-info to find APNs. You can enter
-your own APN on the UI, or if you find that your APN is missing from the monbile
-broadband provider info database, file a but at https://bugzilla.gnome.org/
-
-## How do I manually connect via flimflam?
-
-The advantage of using flimflam to connect is that you flimflam will take care
-of running dhcpcd for you. Using the flimflam scripts one can list the devices,
-and services. You should be able to verify that a cellular device is listed, and
-that there is a cellular service. To ask flimflam to connect via the cellular
-service issues the connect-service command (from /usr/local/lib/flimflam/test):
-
-```none
-list-devices
-connect-service cell
-```
-
-There are still some issues in the support of the cdc_ether driver. If the
-connect-service call fails, try to disconnect, and reissue the connect call. In
-most cases this will succeed in connecting your 3G modem.
-
-```none
-disconnect-service cell
-connect-service cell
-```
-
-## How do I debug the Gobi kernel module?
-
-To debug the Gobi kernel module, you need to set the gobi_debug module parameter
-on the gobi module. There are two ways to do this:
-
-To set the parameter temporarily (until the module is unloaded, such as when you
-reboot), you can use sysfs:
-
-```none
-localhost ~ # echo 1 > /sys/module/gobi/parameters/gobi_debug
-```
-
-To set the parameter permanently, you can configure modprobe to set it
-automatically:
-
-```none
-localhost ~ # echo 'options gobi gobi_debug=1' > /etc/modprobe.d/gobi_debug.conf
-```
-
-You can use either 1 or 2 for the debug level. 1 will show most
-userspace-relevant error conditions, but won't trace most normal behavior; 2
-will dump every control packet to and from the card, and will give more detail
-about normal behavior.
-
-## How do I see the GPS stream on a Gobi modem?
-
-To see the GPS stream on a Gobi modem you first have to enable automatic
-tracking.
-
-```none
- localhost ~ # echo -e -n '$GPS_START' > /dev/ttyUSB2
-    localhost ~ # dbus-send --system --print-reply \
-     --dest=org.chromium.ModemManager \
-     /org/chromium/ModemManager/Gobi/0 \
-     org.chromium.ModemManager.Modem.Gobi.SetAutomaticTracking \
-     boolean:true boolean:true
-localhost ~ # cat /dev/ttyUSB2
-```
-
-and observe the NMEA stream printed on the console.
-
-Then interrupt the stream (^c), and enter
-
-```none
-localhost ~ # dbus-send --system --print-reply \
-     --dest=org.chromium.ModemManager \
-     /org/chromium/ModemManager/Gobi/0 \
-     org.chromium.ModemManager.Modem.Gobi.SetAutomaticTracking \
-     boolean:false boolean:false
-localhost ~ # cat /dev/ttyUSB2
-```
-
-and observe that the stream has been stopped.
-
-Note that we have an autotest which does all that, it should be invoked as
-follows:
-
-```none
-./run_remote_tests.sh --board=<board> --remote=<taregt ip> hardware_GPS/control
-```
-
-## What do all those PIN codes do?
-
-There are 8 different kinds of standard PIN codes defined for GSM devices. Two
-of these apply to the SIM card, and the others apply to the device itself. The
-following table describes each kind of PIN. Most PINs allow some number of
-incorrect entries, after which the PIN becomes "blocked". At that point the PIN
-must be "unblocked" by entering a PUK code. Each PIN type has its own
-corresponding type of PUK.
-
-SIM locks can be disabled, which is different than unlocking. Unlocking only
-lasts until the next power cycle. Disabling prevents the SIM from being locked,
-even following a power cycle. To disable a SIM lock, the SIM PIN must be
-supplied.
-
-Device locks, also known as personalization locks, restrict usage of the device,
-as described below. For personalization, there is no distinction between
-unlocking and disabling. For each type of personalization, there is a code that
-must be entered. If the correct code is entered, the corresponding device
-restriction is lifted.
-
-Refer to 3GPP spec [TS
-22.022](http://www.etsi.org/deliver/etsi_ts/122000_122099/122022/10.00.00_60/ts_122022v100000p.pdf)
-for full details.
-
-[<img alt="image"
-src="/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/GSM%20PIN%20code%20types.png">](/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running/GSM%20PIN%20code%20types.png)
-
-## How do I run tests on cell modems?
-
-You can run autotests against a live carrier network, or you can use an
-emulated-network testbed. See [Running and Writing Autotests for Cell
-Emulators](https://docs.google.com/a/google.com/document/pub?id=1FTSAO-5hVTAV9t7RNZWJRN_QOOqpl5qZJua4k3POwKc)
-and [Chrome OS Cellular Testbed
-Setup](https://docs.google.com/a/google.com/document/pub?id=1yG7j8Iw9PnQTH-93zP5BqB0qQRU08az11A_eN0acd70). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-helpers/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-helpers/index.md
deleted file mode 100644
index 7e6a245dad6..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-helpers/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: git-helpers
-title: Git documentation elsewhere
----
-
-## Tech Talks
-
-* Randall Schwartz's [Tech Talk on
- git](http://www.youtube.com/watch?v=8dhZ9BXQgc4)
-* [gitcasts](http://www.google.com/url?q=http%3A%2F%2Fgitcasts.com%2F&sa=D&sntz=1&usg=AFrqEzdXGanWebnB47ED_tYigjprxxyXlA)
-
-## Online References
-
-* [Git
- Magic](http://www.google.com/url?q=http%3A%2F%2Fwww-cs-students.stanford.edu%2F%257Eblynn%2Fgitmagic%2F&sa=D&sntz=1&usg=AFrqEzd0LcYKlFSHeWlQzalvRlf4sTBLiA)
-* [Git for computer
- scientists](http://www.google.com/url?q=http%3A%2F%2Feagain.net%2Farticles%2Fgit-for-computer-scientists%2F&sa=D&sntz=1&usg=AFrqEzcOLmdu1_j4wvdnWaUkgTNwig-zxg)
-* [Git
- Manual](http://www.google.com/url?q=http%3A%2F%2Fwww.kernel.org%2Fpub%2Fsoftware%2Fscm%2Fgit%2Fdocs%2Fuser-manual.html&sa=D&sntz=1&usg=AFrqEzfv8SPESPQ4stacQ08cvUzlMXbbKA)
-* [git-scm.](http://www.google.com/url?q=http%3A%2F%2Fwww.git-scm.com%2F&sa=D&sntz=1&usg=AFrqEzfgZQlz4_hsTqn7WUSTXOLr3NjfHQ)[com](http://www.google.com/url?q=http%3A%2F%2Fwww.git-scm.com%2F&sa=D&sntz=1&usg=AFrqEzfgZQlz4_hsTqn7WUSTXOLr3NjfHQ)
-* [Git Visual Guide](http://marklodato.github.com/visual-git-guide/)
-
-## Online Books
-
-* [Pro
- Git](http://www.google.com/url?q=http%3A%2F%2Fprogit.org%2Fbook%2F&sa=D&sntz=1&usg=AFrqEzd8OyxDVoHmTqpvytsEpbMxueIC2A)
-* [Git Community
- Book](http://www.google.com/url?q=http%3A%2F%2Fbook.git-scm.com%2F&sa=D&sntz=1&usg=AFrqEzeeHhoe_KJJGnPfXy5HvHYTkvCz0Q) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-server-side-information/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-server-side-information/index.md
deleted file mode 100644
index 56659bf5a6e..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-server-side-information/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: git-server-side-information
-title: Git server-side information
----
-
-[TOC]
-
-This guide has been migrated to markdown:
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/source_layout.md#FAQ>
-
-Please update any stale links you might have come across.
-
----
-
-## How do I add my project to the CQ?
-
-1. Add new git repository to
- chromiumos/infra/config/chromeos_repos.star (in the checkout). For
- example, this would be a CL like
- [this](https://chrome-internal-review.googlesource.com/c/chromeos/infra/config/+/1367369/).
-2. After modifying chromeos_repos.star, run ./regenerate_config.sh in
- the base of infra/config.
-3. Email the CL to the CI oncaller. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-troubleshooting/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-troubleshooting/index.md
deleted file mode 100644
index 08638fbebbd..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/git-troubleshooting/index.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: git-troubleshooting
-title: Git Troubleshooting
----
-
-[TOC]
-
-### My pull is failing
-
-If you get an error like this:
-
-ssh: connect to host gitrw.chromium.org port 9223: Connection refused
-
-ssh is failing to connect for some reason. (In the above example, I had the port
-wrong.) Verify your ssh configuration is correct -- that you have the keys set
-up, that you have right hostname and port, etc. depending on the error message.
-
-If you get an error like this when pulling:
-
-ERROR:gitosis.serve.main:Repository read access denied
-
-The "gitosis" in the error message indicates you've successfully sshed to the
-server, but that something has gone wrong after that. Verify the path to the git
-repository you're trying to pull is correct with something like
-
-git config remote.origin.url
-
-### My push was rejected
-
-If the output of git-cl looks like this:
-
-```none
-$ git cl push
-Description: 'Clean up to move NewStringCopy from util to chromeos/string.\n\nReview URL: <http://codereview.chromium.org/460001>'
- .gitignore                    |    8 +++++++-
-1 file changed, 7 insertions(+), 1 deletion(-)
-About to commit; enter to confirm.
-To ssh://gitrw.chromium.org/chromiumos
- ! [rejected]        HEAD -> master (non-fast forward)
-error: failed to push some refs to 'ssh://gitrw.chromium.org/chromiumos'
-```
-
-Your branch is out of date. You need to run:
-
-```none
-$ gclient sync
-$ git cl push
-```
-
-### I can't gclient sync
-
-If gclient sync is outputting something like this:
-
-```none
-$ gclient sync
-        Already in a conflict, i.e. (no branch).
-        Fix the conflict and run gclient again.
-        Or to abort run:
-                git-rebase --abort
-        See man git-rebase for details.
-```
-
-You are inside a rebase conflict. You can either fix the conflict:
-<http://www.neeraj.name/blog/articles/811-how-to-resolve-git-merge-conflict-caused-while-doing-git-rebase>
-Or undo the rebase:
-
-```none
-$ git rebase --abort
-```
-
-### Missing dependency
-
-If **setup_board** is failing with output something like this:
-
-```none
->>> Failed to emerge chromeos-base/kernel-headers-0.0.1 for /build/XXX/, Log file:
->>>  '/build/XXX/tmp/portage/chromeos-base/kernel-headers-0.0.1/temp/build.log'
- * Using kernel files: trunk/src/third_party/kernel-XXX
-cp: cannot stat `trunk/src/third_party/kernel-XXX/*': No such file or directory
-```
-
-You might be missing extra components, and need to add them to your **.gclient**
-file so that it contains a custom_deps clause something like:
-
-```none
-    "custom_deps" : {
-      # To use the trunk of a component instead of what's in DEPS:
-      #"component": "https://svnserver/component/trunk/",
-      # To exclude a component from your working copy:
-      #"data/really_large_component": None,
-      "chromeos/src/third_party/kernel-XXX": "ssh://chromiumos-git/kernel-XXX.git"
-    },
-```
-
-where the LHS is the location in your source tree relative to the config file,
-and the RHS is a valid git URL. After fixing up the config file, a **gclient
-sync** should fetch the missing bits. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/helper-scripts/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/helper-scripts/index.md
deleted file mode 100644
index 4c75d79da0a..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/helper-scripts/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: helper-scripts
-title: Helper Scripts
----
-
-[TOC]
-
-This page offers some documentation to extra scripts provided in the src/scripts
-directory
-
-## cleanup_loopback_devices
-
-We create a lot of loopback devices in various scripts and there are conditions
-where we may leave around some loopback devices. This script provides a
-convenient way of unmounting any image directories in your chroot (for your
-board) and cleaning up errant loopback devices. Note, this script will not
-affect loopback devices / mounts in other chroots or outside the chroot.
-
-## gmergefs
-
-gmergefs is an emerge wrapper that combines sshfs with emerge. It allows a
-developer to add a package to a live Chromium OS system using the developer's
-development system. The easiest way to use it is to pass a --remote flag that
-specifies the IP address of the remote device and pass the name of a package to
-install. You will also have to specify the board if you don't have a default one
-set up.
-
-gmergefs requires that the host machine have ssh access to the root account of
-the remote machine and will prompt for this password when run (will need to edit
-sshd_config in /etc/ssh and sudo passwd to change root password). Test images by
-default have this enabled (see test section for password). Users of non-test
-builds will need to enable ssh access for the root account and set a root
-password.
-
-gmergefs also requires you have fuse installed on your host machine (if you have
-fuse warnings when entering chroot, it will not work).
-
-*Note: By default gmergefs tries to install packages onto /usr/local of the
-remote system. If you are updating packages on the root fs you will need to pass
---noonstatefuldev.*
-
-The following are some sample use cases:
-
-* **Update base packages**
-
- ./gmergefs --noonstatefuldev --remote 192.0.0.100 chromeos-base/chromeos
-
-* **Update developer packages**
-
- ./gmergefs --remote 192.0.0.100 chromeos-base/chromeos-dev
-
-* **Add a developer package**
-
- gmergefs --remote 192.0.0.100 pacakge_name
-
-### Troubleshooting
-
-*gmergefs hangs*: This is caused by sshfs hanging when mounting. Check that you
-can ssh as root from within your chroot i.e. ssh -o StrictHostKeyChecking=no
-root@your_ip. Also double check that you typed in the ip address correctly in
-the remote flag.
-
-*gmergefs has trouble writing to either ld.so.cache or other file using
---noonstatefuldev*: gmergefs doesn't automatically remount your root dir to rw.
-Go onto your machine and run sudo mount -o remount,rw /
-
-## mount_gpt_image.sh
-
-The output of the Chromium OS build process is a bootable binary gpt bin file
-that you can dd straight onto a usb key and install onto a device. However,
-often developers will want to make some modifications after the build process or
-make changes once an image is already on a usb key from the developer's
-development machine. This script makes it easy to do just that. This script will
-mount a bin or device specified in the --from parameter (e.g. /dev/sdc or
-../build/images/.../.../chromiumos_image.bin) and mount the whole image under
-/tmp/m. Passing the same arguments in addition to -u (--unmount) will reverse
-the process. This can be used to emerge new packages onto an already created
-image as well as make small mod's or to just see what is in the image. See
-mount_gpt_image.sh --help for more information.
-
-## wtf
-
-Displays summary status for every git repository that is in a modified state.
-Helpful to easily see what changes you have across the entire source tree. This
-tool is found in depot_tools. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/index.md
deleted file mode 100644
index 2eae4a06a22..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: how-tos-and-troubleshooting
-title: How Tos and Troubleshooting
----
-
-The pages in this section have practical instructions to help you use and modify
-a Chromium-based OS. Also see [Chromium OS Developer
-Guide](/chromium-os/developer-guide).
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images/index.md
deleted file mode 100644
index 078648b5677..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images/index.md
+++ /dev/null
@@ -1,134 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: install-software-on-base-images
-title: 'Dev-Install: Installing Developer and Test packages onto a Chrome OS device'
----
-
-[TOC]
-
-## Overview
-
-For developers of Chromium OS there are many helpful packages included as part
-of developer and test images that are not included as part of Chrome OS.
-Bootstrapping and getting these back into the system can be very difficult
-without re-imaging the entire device. Ideally, you'd be able to get these
-packages back but still auto-update the rest of the system. Dev-install solves
-this use case. In essence it restores /usr/local back to that of a developer
-image.
-
-The requirements are:
-
-* In developer mode.
-
-The installation of software is done through Gentoo's emerge. In order to get
-emerge configured, follow the following steps:
-
-1. Boot the machine and go to a shell (login and go to crosh
- (ctrl+alt+t) or change to virtual terminal 2 (CTRL+ALT+F2))
-2. Change to root and initialize the login environment variables:
-
- ```none
- $ sudo su -
- ```
-
-3. Execute the dev_install script. This script does everything
- automatically and asks you if you want to install chromeos-dev (it
- will take a while if you choose to):
-
- ```none
- # dev_install [--reinstall if done before]
- ```
-
-4. Use emerge as usual. For example, to get qemacs install:
-
- ```none
- # emerge qemacs
- ```
-
-5. Done! Now you can emerge any package in chromeos-dev or
- chromeos-test.
-
-If you ever want to revert to having a pristine base image you can just run
-(which is the same as deleting everything under /usr/local):
-
-```none
-# dev_install --uninstall
-```
-
-## What can you do
-
-In general, anything that works in /usr/local from chromeos-dev / chromeos-test
-should work. Consider the following examples:
-
-* sshfs-fuse -- allows you to mount a remote folder using ssh onto
- your chromebook.
-* gmerge -- allows you to contact a developer machine to build and
- re-install a developer package. gmerge allows overrides to set your
- developer machine / board to whatever you have configured on your
- developer machine. Want some portage package? Install it via the
- devserver!
-
-To see what is installable, check /etc/portage/make.profile/package.installable.
-
-## General Troubleshooting
-
-dev_install will assume that /usr/local is empty if the directory for portage
-(/usr/local/etc/portage) is not there. If that's not the case and that leads to
-problems during the bootstrapping process you can ask dev_install to wipe
-/usr/local first by using:
-
-```none
-# dev_install --reinstall
-```
-
-Another source of problems is dev_install trying to connect to an incorrect
-BINHOST. The symptom for this is dev_install exiting after trying to extract the
-first download package (the package file downloaded with curl in
-/usr/local/portage/packages/... will contain a html error message). The binhost
-is generated by the release builders, so it is possible that a developer builds
-a new image with a release number that it's the same as a failed builbot. For
-example, in /etc/lsb-release the version number reads 0.15.912 but the builder
-with that version number failed. The are two possible fixes:
-
-1. repo sync to another build number.
-2. Use another binhost with the --binhost_version option or --binhost:
-
- ```none
- # dev_install --binhost_version 1120.0
- # dev_install --binhost https://commondatastorage.googleapis.com/chromeos-dev-installer/board/x86-mario/full-1120.0.0/packages
- ```
-
-## Behind the scenes
-
-If you want to know what's going on in dev_install, this is the overall view of
-the process:
-
-1. Based on the board and the release number in /etc/lsb-release find
- the appropriate BINHOST, unless --binhost or --binhost_version
- command line arguments are used.
-2. Bootstrap emerge by downloading the packages listed in
- /etc/portage/bootstrap.packages from the BINHOST.
-3. Configure emerge (write make.conf to /usr/local/etc/portage and
- symlink /etc/portage/make.profile) to install new software to
- /usr/local.
-
-bootstrap.packages is generated during the build image process. It is a text
-file that contains a list of packages with version numbers that portage needs
-(portage included) and that are not already in the base image. All the packages
-in the base image (except the virtual ones) are listed
-/etc/portage/make.profile/package.provided so emerge will no try to install them
-and assume they are installed while resolving dependencies
-
-## Known bugs
-
-[label:dev_install](http://code.google.com/p/chromium/issues/list?q=label%3Adev_install)
-on [crbug.com](https://crbug.com/)
-
-## Who to contact for more info (@chromium)
-
-Please use the main list:
-[chromium-os-dev@chromium.org](mailto:chromium-os-dev@chromium.org) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/index.md
deleted file mode 100644
index 9e521dcf166..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/index.md
+++ /dev/null
@@ -1,279 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: kernel-configuration
-title: Kernel Configuration
----
-
-[TOC]
-
-## Overview
-
-Kernel configuration is a little complicated in Chromium OS. There are a number
-of different kernels based on architecture (x86_64, arm64) variants (generic,
-rockchip) and platforms (Seaboard, Mario). We want to split the config into a
-sort of hierarchy so that the common options are shared between the variants
-(click to enlarge):
-
-[<img alt="image"
-src="/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.png"
-height=274
-width=400>](/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.png)
-
-Shown here are 6 flavours, three for ARM and three for Intel (it is not clear
-why flavours is spelt the British way).
-
-## Conversions
-
-We need to be able to do the following:
-
-* create a .config file for a particular flavour - this is done simply
- by concatenating the three levels for a particular flavour. For
- example we create the tegra2 flavour by concatenating base.config,
- armel/common.config and armel/chromeos-tegra2.flavour.config. This
- .config file is suitable for configuring the kernel.
-* split a .config into its constituent parts. This is a little more
- complicated and has to be done for all flavours at once. Given a
- .config file for each flavour we can look for items which are common
- to all flavours - these can be put into the family config. We also
- look for everything common within each architecture - these are put
- into the architecture files like config.common.arm. The splitconfig
- script does this.
-
-## Scripts
-
-Scripts to deal with the kernel configuration are in the chromeos/scripts
-directory. A partial listing is shown below:
-
-```none
-$ ls chromeos/scripts/
-kernelconfig  prepareconfig
-```
-
-### kernelconfig
-
-This script deals with each separate flavour in turn, performing the selected
-operations. It starts by building the config for each flavour, does the
-operations, and afterwards it splits the flavour configs back into the proper
-hierarchy. It supports four operations
-
-* oldconfig - does a 'make oldconfig' on each config
-* olddefconfig - like 'oldconfig', but it accepts the default
- selections automatically
-* editconfig - does a 'make menuconfig' on each config
-* genconfig - like oldconfig, but it leaves the generated full config
- files lying around afterwards in the CONFIGS directory
-
-There is a bit of a problem with kernelconfig. If you want to change a kernel
-option which is common to all flavours, for example, then you must change it
-once for each flavour using 'kernelconfig editconfig'. At the moment this is ~10
-times! If you miss one, then the result may be no change which can be very
-confusing. See below for another approach.
-
-### prepareconfig
-
-This is used to prepare the config for a particular flavour. It assembles the
-default config for the flavour. This is useful when starting development on a
-board and you want to build in-tree:
-
-```none
-CHROMEOS_KERNEL_FAMILY=chromeos ./chromeos/scripts/prepareconfig chromeos-tegra2
-export ARCH=arm
-export CROSS_COMPILE=armv7a-cros-linux-gnueabi-
-make olddefconfig    #(to pick up new options, if any)
-make
-...
-```
-
-prepareconfig requires an environment variable `CHROMEOS_KERNEL_FAMILY` to
-correctly determine the split config. Above example uses `chromeos` as the
-kernel family. Each supported kernel family's split config is maintained in
-`chromeos/config/<family>/` directory.
-
-This script is used in the emerge. An example resulting string is 'Ubuntu
-2.6.32-0.1-chromeos-tegra2'.
-
-## Using the kernelconfig script
-
-The kernel config is split into several config files - generic, chrome-specific,
-architecture-specific and board specific. Automatic tools split and combine
-these configs.
-
-If you want to edit the configuration for a particular board etc. then you need
-to do something like:
-
-```none
-$ cd .../src/third_party/kernel/v$VER/
-$ ./chromeos/scripts/kernelconfig editconfig
-```
-
-The exact value for $VER depends on your board as each one is different. You can
-find that out by seeing what version by running `` `emerge-$BOARD -pv
-virtual/linux-sources` ``.
-
-This will run 'make menuconfig' for each part of the config.
-
-You need to figure out which part your config options appear in, and then make
-the changes when that config comes up. When it says 'press a key', you have to
-press &lt;enter&gt;.
-
-## Make a change to the config
-
-Run editconfig to modify each config appropriately using menuconfig and then
-regenerate the splitconfigs. The editconfig script will run "make menuconfig" on
-each flavor config. Please make appropriate changes for each menuconfig run and
-the script will generate the correct splitconfig.
-
-```none
-cd /path/to/kernel
-chromeos/scripts/kernelconfig editconfig # regenerate splitconfig
-```
-
-## Alternative Method to Edit Config
-
-This is a little faster if you know what you're doing:
-
-* Look for the kernel config option you want to edit.
-
-```none
-$ grep -rs CONFIG_IO_URING chromeos/config/
-chromeos/config/manatee/base.config:# CONFIG_IO_URING is not set
-chromeos/config/chromeos/base.config:# CONFIG_IO_URING is not set
-```
-
-* Now assuming that we are working with chromeos kernel family, edit the file
- `chromeos/config/chromeos/base.config` to change the config like this:
-
-<pre><code>
-# CONFIG_NETPOLL_TRAP is not set
-<s># CONFIG_NETWORK_FILESYSTEMS is not set</s>
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NETWORK_SECMARK=y
-# CONFIG_NET_9P is not set
-</code></pre>
-
-* Now run this to recreate all the configs based on your changes
-
-```none
-$ chromeos/scripts/kernelconfig olddefconfig
-```
-
-* This will accept the default choices for any new or otherwise
- unspecified options. If needed you can change them by editing the
- file on your next run around this method.
-* Rinse and repeat
-
-If you find that during that last step, your configs are disappearing, then
-you've likely enabled a config without enabling all of its dependencies. You'll
-need to either 1) track down those dependencies and enable them as well, or 2)
-Use the editconfig method mentioned above.
-
-## Comparing in-tree config to split config
-
-This might not be useful, but:
-
-```none
-# get full flavour config sorted, without leading #
-FLAVOUR=chromeos-tegra2 cat chromeos/config/*/base.config \
-   chromeos/config/*/armel/common.config \
-   chromeos/config/*/armel/$FLAVOUR.flavour.config | \
-   grep CONFIG_ | sed "s/.*CONFIG/CONFIG/" | sort -u >1.emerge
-# purify .config in the same way
-```
-
-```none
-make ARCH=${kernarch} savedefconfig
-```
-
-```none
-# compare
-diff 1.emerge defconfig
-```
-
-## Manual Building
-
-Here is how to build the kernel yourself manually, from within the chroot.
-
-Make sure you have done something like:
-
-```none
-export B="tegra2_seaboard"
-export ARCH=arm
-export CROSS_COMPILE=armv7a-cros-linux-gnueabi-
-# indicate that you are making kernel changes
-```
-
-```none
-cros_workon --board=$B start sys-kernel/chromeos-kernel-$VER
-```
-
-The exact value for $VER depends on your board as each one is different. You can
-find that out by seeing what version by running `` `emerge-$BOARD -pv
-virtual/linux-sources` ``.
-
-As you probably know, the `cros_workon start` tells the build system to use your
-local source install of the official source. Then set up the config:
-
-```none
-# set up the .config file
-CHROMEOS_KERNEL_FAMILY=<kernel-family> ./chromeos/scripts/prepareconfig chromeos-tegra2
-make olddefconfig
-# edit config
-make menuconfig
-# (make your changes)
-```
-
-Now, after you make a kernel change, you can simply type `make` as normal:
-
-```none
-# build the kernel and modules
-make
-# or maybe: build the uImage on an 8 core machine
-make -j10 uImage
-# or both!
-make && make uImage
-```
-
-### Generate a new splitconfig after adding new Kconfig options
-
-Run olddefconfig to regenerate the splitconfigs. The olddefconfig script will
-run "make olddefconfig" on each flavor config.
-
-```none
-cd ~/trunk/src/third_party/kernel/v$VER
-chromeos/scripts/kernelconfig olddefconfig # regenerate splitconfig
-```
-
-### Adding a new config
-
-Copy the new config to the appropriate place in the chromeos/config and then run
-oldconfig
-
-```none
-cd ~/trunk/src/third_party/kernel/v$VER
-cp config.flavour.chromeos-new .config
-make ARCH=${ARCH} olddefconfig
-cp .config chromeos/config/<kernel-family>/<arch>/<flavour>.flavour.config
-chromeos/scripts/kernelconfig olddefconfig # regenerate splitconfig
-```
-
-### How can I find the list of flavour configs
-
-```none
-cd ~/trunk/src/third_party/kernel/v$VER
-find chromeos/config -name \*.flavour.config
-```
-
-### How to regenerate and validate splitconfigs from single config
-
-```none
-cd ~/trunk/src/third_party/kernel/v$VER
-cp <single config> chromeos/config/<kernel-family>/<arch>/<flavour>.flavour.config
-chromeos/scripts/kernelconfig olddefconfig
-CHROMEOS_KERNEL_FAMILY=<kernel-family> chromeos/scripts/prepareconfig <flavour>
-make ARCH=${ARCH} oldconfig
-diff .config <single config>
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.png.sha1 b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.png.sha1
deleted file mode 100644
index 543e4150dee..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8d7c98d90336f940ae8e9c1d93d84d367f328cb2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.svg.sha1 b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.svg.sha1
deleted file mode 100644
index 02ed696be92..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-configuration/kernel_config_diag.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6b5a1d14a6c8fe4a4d2358c4abbfff9ed371ef34 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-faq/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-faq/index.md
deleted file mode 100644
index a15a397ec61..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-faq/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: kernel-faq
-title: Kernel FAQ
----
-
-This document has been moved to markdown/git. The up-to-date version can be
-found at:
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/kernel_development.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-rebase-notes/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-rebase-notes/index.md
deleted file mode 100644
index 73a405bfa93..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/kernel-rebase-notes/index.md
+++ /dev/null
@@ -1,768 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: kernel-rebase-notes
-title: Kernel rebase notes
----
-
-## Overview
-
-### Flow
-
-A kernel rebase consists of moving sets (ie, topics) of patches from one version
-to a later version.
-
-The flow is:
-
-* Separate current patches into topic branches
- * git cherry-pick individual patches to common branches
-* Rebase patches from old kernel version to new kernel version
- * git rebase $new_version
-* Merge new topics together on the new kernel version
- * git merge $topics
-
-This flow is iterative. It can take a long time to cherry-pick all the changes
-into topics, then rebase, then merge. In that time, more changes land which
-require a second or even third iteration of this sequence.
-
-### Estimate how long the rebase effort will take
-
-It took me 3 months to sort through about 5644 3.14 changes and rebase
-appropriately to 3.18. And that was with help. So I would estimate roughly 434
-per week.
-
-Really, ramping up on my git knowledge and settling on a set of useful tools
-took a significant amount of time, too.
-
-### Tools
-
-Various git commands will be particularly important during the rebase. gitk is a
-graphic tool that some folks use, but I used just the git command itself.
-
-```none
-git log --oneline --first-parent --reverse v3.14..m/master
-```
-
-This shows all the commits in our tree on top of v3.14.
-
---oneline shows just one line per commit: commit hash plus the one line summary.
-
---first-parent shows merge changes, but it excludes merge lineage (ie, all the
-changes that were actually being merged in). Merges are rare after the rebase
-and are typically handled on a case by case basis.
-
---reverse shows the changes in the order they occur (oldest to newest) rather
-than the default order (newest to oldest).
-
-These parameters are the most important ones in my rebase (to 3.18).
-
-Pipe to 'wc -l' shows how many commits you are dealing with.
-
-Redirect to a file, say "gitlog.v3.14..", lets me examine the list in 'vi'.
-
-```none
-git show $COMMIT --oneline --name-only
-```
-
---name-only shows the touched files. This is important in determining which
-topic a change should be cherry-picked into.
-
-```none
-set keywordprg=git\ show
-```
-
-in my ~/.vimrc file allows me to 'vi gitlog.v3.14..', position the cursor on the
-change_id, then "K" (the keyword program command in 'vi') runs 'git show' on
-that change_id.
-
-This is useful for examining change details within the list of changes in which
-it appears.
-
-```none
-git rebase --onto master next topic
-```
-
-Rebase all changes between next and topic onto master, and move the current
-branch label (usually topic) to the resulting HEAD.
-
-There were a number of times I decided to replay some subset of changes to a new
-head, and this is the way to do it. I highly recommending closely examining 'git
-rebase --help', first.
-
-It will basically say it changes this:
-
-```none
-               o---o---o---o---o  master
-                    \
-                     o---o---o---o---o  next
-                                      \
-                                       o---o---o  topic
-```
-
-into this:
-
-```none
-               o---o---o---o---o  master
-                   |            \
-                   |             o'--o'--o'  topic
-                    \
-                     o---o---o---o---o  next
-```
-
-Note that the master and next labels remain unchanged, but topic moves to the
-rebased HEAD.
-
-Did you screw up an important branch label with a bad rebase?
-
-```none
-git reflog
-git reset --hard $change_ID
-```
-
-The reflog shows recent HEAD changes and the commands that changed them. The
-first column is the resulting change_ID.
-
-The reset changes the label to the specified change_ID. --hard restores the
-files to that version.
-
-[TOC]
-
-Source organization
-
-### **Topic Branches**
-
-The key to sanity when doing this is to do good topic branch split-ups. This
-reduces the scope of each branch to only cover a specific part of the kernel, or
-a specific set of functionality. ***Multiple,smaller topic branches allow faster
-iterations.*** The following branches are in use for v3.0 and v3.2 rebase:
-
-> <table>
-> <tr>
-> <td> chromeos-base-&lt;version&gt;</td>
-> <td>This branch contains more or less all base changes we need to run ChromeOS on an x86 system: EFI, ACPI changes, build infrastructure, configs, and some of the chromeos-specific drivers we have picked up (should be very few left)</td>
-> </tr>
-> <tr>
-> <td>chromeos-misc-&lt;version&gt;</td>
-> <td>Kitchen sink for backported patches and misc other changes. It can sometimes be hard to decide what goes here vs in -base.</td>
-> </tr>
-> <tr>
-> <td> chromeos-gobi-&lt;version&gt;</td>
-> <td>Our driver changes for qcserial and gobi. Given that gobi drivers have been rejected upstream we might have to carry this for the long run.</td>
-> </tr>
-> <tr>
-> <td> chromeos-verity-&lt;version&gt;</td>
-> <td> Verity device mapper module. This branch should hopefully go away once the patches have been accepted upstream.</td>
-> </tr>
-> <tr>
-> <td> chromeos-tegra-&lt;version&gt;</td>
-> <td>All the Nvidia ARM Tegra changes. Quite a stack of patches that are slowly going upstream.</td>
-> </tr>
-> <tr>
-> <td> chromeos-input-&lt;version&gt;</td>
-> <td> Mouse/Touch/trackpad and related subsystem drivers (e.g. multi-touch support).</td>
-> </tr>
-> </table>
-
-Update from my 3.14-3.18 experience:
-
-> <table>
-> <tr>
-> <td> chromeos-base-&lt;version&gt;</td>
-> <td> chromeos/config and chromeos/scripts changes</td>
-> </tr>
-> <tr>
-> <td> chromeos-misc-&lt;version&gt;</td>
-> <td> Miscellaneous software related patches: futex, ftrace, time, genalloc, FS, etc.</td>
-> </tr>
-> <tr>
-> <td> chromeos-platform-&lt;version&gt;</td>
-> <td> Similar to misc, but more hardware specific. power, suspend, irq, NAND, MMC, MTD, ACPI, IIO, etc.</td>
-> </tr>
-> <tr>
-> <td> chromeos-drm-&lt;version&gt;</td>
-> <td> drivers/gpu/drm and related changes. For 3.18, we dropped all 3.14 patches, and</td>
-> <td>Stephane provided a new set for 3.18.</td>
-> </tr>
-> </table>
-
-Add new topic branches where there is active development. e.g. we might add
-chromeos-wifi-&lt;version&gt; for wifi drivers since they have plenty of
-backports.
-
-### kernel and kernel-next Repos
-
-Today we have two kernel repos: kernel and kernel-next. The historical reason is
-repo tools don't allow to track two branches of one git repo in two locations in
-the directory structure. We needed two different base versions for quite a while
--- one for x86 and one for ARM. We have since merged the bases, but
-"kernel-next" tree is still around.
-
-The overview of the steps I work with the repos is:
-
-1. Do the original topic-branch split-up in the kernel.git repo since
- the patches reside on the main branch.
-2. Move the topic branches to the kernel-next repo and do all the
- rebase work in kernel-next repo.
-3. Merge the topic branches together to a combined branch and ask
- others to test the combined branch in kernel-next repo.
-4. Warn "Testers" the topic-branches will get rebased and to NOT keep
- significant work on top of kernel-next combined branch.
-
-## Rebase process
-
-### **Step 1: Add upstream mainline/stable trees**
-
-```none
-git remote add mainline git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
-git remote add linux-stable git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
-git remote update mainline
-git remote update linux-stable
-```
-
-This makes "interesting" tags available from upstream sources. This step can be
-done at any time before we need to use tags in upstream repos.
-
-### **Step 2: Set up Topic branches**
-
-Splitting the tree up into topic branches is something that you rarely have to
-do from scratch. This document will assume those exist.
-
-Maintain the topic branches over time, syncing up from the main tracking branch
-every now and then and pushing them to the server. *Others should NOT base their
-work off of the topic branches.*
-'git-new-workdir' checks out a specific branch into a new directory but uses the
-same backing .git object storage. This allows us to check out each topic branch
-into one directory per topic and we won't have to sync up the .git contents when
-done.
-**WARNING: NEVER use git-new-workdir for a branch that you have checked out
-somewhere else, it is a recipe for disaster.** In other words, delete the
-"split" directory (and it's children) created below before checking out any of
-the topic branches in some other location.
-
-Under src/third_party/kernel/ , build the "topic branches":
-
-```none
-cd src/third_party/kernel
-mkdir split
-cd split
-for d in base gobi misc verity tegra ; do
-/usr/share/git/contrib/workdir/git-new-workdir  ../../../../.repo/projects/src/third_party/kernel/files.git ${d} cros/chromeos-${d}-3.0
-cd ${d}
-git checkout -b chromeos-$d-3.0 cros/chromeos-$d-3.0
-cd ..
-done
-```
-
-In case not all the topic branches are based on the same tree, run:
-
-`git rebase --onto v3.0 v3.0.3 HEAD`
-
-in order to rebase all changes in "HEAD" from v3.0.3 back to v3.0.
-Then open one terminal window for each topic branch and two extra windows:
-
-* add `alias gp="git cherry-pick"` to ~/.bash_profile in the chroot
- (used below to shorten the command lines)
-* In the first 5 windows, cd into one of the 5 topic branch
- directories.
-* In the 6th window, to run/view git log command (listed below)
-* Use the 7th for misc git commands to determine where conflicts are
- coming from, etc.
-
-In the 6th window find the "sync point" (last commit that was cherry picked)
-with:
-
-```none
-git log --oneline cros/chromeos-3.0
-```
-
-and search for "Merge". The "sync point" commit should look something like:
-
-e8f848b Merge branches 'chromeos-base-3.0', 'chromeos-misc-3.0',
-'chromeos-verity-3.0', 'chromeos-gobi-3.0' and 'chromeos-tegra-3.0' into
-chromeos-3.0
-
-One can also look at "git log" for each of the topic branches to find out the
-last cherry-picks into each of those and confirm the SHA1 matches.
-
-### Step 3: resync Topic Branches
-
-Next, produce a list of commits that need to be cherry picked from
-cros/chromeos-3.0 into the topic branches:
-
-<pre><code>git log --date=short --pretty=format:"gp %h # %cd %s" <i>lastsyncpoint</i>..cros/chromeos-3.0 | tac
-</code></pre>
-
-Redirect output to a file or pipe into less if it's long. In the order listed,
-copy and paste each line of the output into one "corresponding" topic branch
-window. The "gp" alias will cherry-pick that commit, and everything after the
-'#' will be ignored. Merge conflicts may occur if "gp" was accidentally pasted
-in the wrong window OR the change doesn't belong in that topic branch. Either
-way, use git reset --hard to "undo" the failed cherry-pick in order to retry on
-a different topic branch.
-
-\[*Some merge conflicts are likely to occur and require fix up if the original
-commit is based on a different release (e.g. v3.0.13) than the topic branch is
-based on (e.g. v.3.0). If topic branches were based on the same stable release
-(e.g. v3.0.13) at this point, such conflicts wouldn't occur.*\]
-
-### Step 4: sanity-check Topic Branches
-
-Here's how to make sure the local topic branches contain all commits (assumes
-chromeos-3.0 is based on v3.0.13):
-
-```none
-git checkout -b mergetest v3.0.13
-git merge chromeos-base-3.0
-git merge chromeos-misc-3.0
-git merge chromeos-verity-3.0
-git merge chromeos-gobi-3.0
-git merge chromeos-tegra-3.0
-```
-
-Fix up (using $EDITOR), then `git add` and `git commit` (to mergetest branch)
-conflicts between each merge.
-\[Digression: Unfortunately, combining the topic branches into one merge command
-failed:
-
-git merge chromeos-{base,misc,verity,gobi,tegra}-3.0
-
-We think this is either a git merge bug or the merge conflicts in our case
-prevented the octopus merge from running.\]
-
-Finally, we get to verify with:
-
-```none
-git diff cros/chromeos-3.0
-```
-
-The diff should be empty. If it isn't, check first if one of the conflicts was
-resolved "unfavorably" and run git commit --amend to preserve the update. If
-not, something is missing from a topic branch. Hunt it down and add to the topic
-branch.
-
-### Step 5: Mark sync in master branch
-
-To indicate in the master branch the points in time where a topic branch sync
-occurred, re-merge all the topic branches into the main branch:
-**TBD \[ git commands to "re-merge into main branch" \]**
-Since the diff in Step 4 was empty, this results in an empty merge changeset
-that will be used as a marker for the next time one has to "resync". This is the
-same "mark" (searching for "Merge") was used in Step 2.
-
-### **Step 6: Create new Topic-Branches**
-
-This is straight forward:
-
-```none
-for b in base misc gobi verity tegra ; do
-git checkout -b chromeos-${b}-3.2 chromeos-${b}-3.0
-done
-```
-
-No need to use the git-new-workdir.
-
-### **Step 7: Rebase -base Topic branch first**
-
-Rebase sounds simple. But it can get really really messy in some cases. Take it
-easy, be ready to throw away your work a couple of times and take plenty of
-notes. Do one branch at a time.
-
-We start with the -base branch since it contains the build infrastructure that's
-needed to build the kernel as an ebuild. This allows x86 builds/testing
-immediately. After chromeos-base-3.2 is done, boot that on an x86 system to
-confirm. Then rebase each branch, one-by-one and rebuild the kernel after each
-branch is done.
-
-So, then in your main work dir:
-
-```none
-git checkout chromeos-base-3.2
-git rebase v3.2
-```
-
-git will stop on conflicts, you resolve them, git add (don't commit), and git
-rebase --continue. If conflicts get ugly, see "Handling Rebase Conflicts" advice
-below. When the rebase is done, do NOT commit until the result compiles. It's
-likely some kernel internal API changed and a merge was still referring to the
-old API. (e.g. v3.0 -&gt; v3.2 had INIT_GROUP_RWSEM() change to
-INIT_THREADGROUP_FORK_LOCK()). One can compile with:
-
-```none
-FEATURES="noclean" emerge-$B chromeos-kernel
-```
-
-And once that compiles, try it. If the system boots, then run git commit for
-each file that was modified. Later, when we run "rebase -i" below, we will
-re-order and "squash" or "fixup" each of those changes. Prefix each commit with
-something like "REBASE_FIXUP" so it's obvious which commits are fixups that need
-to be squashed.
-
-Make sure to document changes made to resolve conflicts AND to fix compile
-failures in the commit message. This can be simple as appending a one-liner like
-this to the commit message:
-
-`[$WHOAMI: resolved trivial conflicts for 3.2] `
-`Signed-off-by: Chromium KernDev <kerndev@chromium.org>`
-
-Once kernel is booting with the given topic branch, run:
-
-```none
-git rebase -i v3.2
-```
-
-The list of commits on the topic branch will be available to edit. See the
-comment at the bottom of that file to understand the options besides the default
-"pick".
-
-Additional Cleanups to do while running git rebase command above:
-
-1. **squash chromeos/config commits**: first just reorder commits
- together in git rebase -i commit list, then mark those commits as
- fixup instead of pick.
-2. **Drop reverted commits**: If a change is later on reverted, delete
- both the pick line for the original and revert commits.
-3. **Clean up Commit log entries**: Someone missed the CHROMIUM:
- prefix? add it. Misformatted changelogs? Fix them up a bit. Etc.
-
-Re-run the git rebase command as often as necessary to reduce the number of
-patches to a minimum. Add more topic branches if necessary.
-
-#### Handling Rebase Conflicts
-
-As shown above, on the first try, run git rebase &lt;newversion&gt; and see how
-ugly the conflicts get. Really lucky folks will get a few conflicts that can be
-resolved easily. The rest of us will find conflicting upstream changes.
-
-It's possible conflicts are due to a change appearing in multiple branches.
-Check and compare the contents of each topic branch with
-
-```none
-git log --oneline v3.2.. 
-```
-
-Don't understand a conflict? Backported commits get weird. First find the
-related commits using one or more of the following:
-
-`git log -S Sym v3.2 -- drivers/net/ # list commits touching "Sym" in v3.2
-branch under drivers/net`
-
-git diff HEAD -- drivers/net/r8169.c # compare diff with current branch contents
-- NOT a 2-way diff
-`git log --stat chromeos-base-3.0 -- drivers/gpu/drm/ # find "big" diffs in
-chromeos-base-3.0`
-
-and then look at them with "git show":
-
-For the very bad cases, do the same as during the split-up into topic branches,
-run `git log --oneline | tac | ...` on the original branch and copy and paste
-each and every change over to have full control over what happens.
-In some cases it's easier to apply the contents with:
-
-`git show <changeset> | patch -p1`
-`# fix up failed hunks`
-`git commit -a -c <original changeset>`
-
-There are probably more clever ways of fixing up conflicts with git. But this
-method mostly works.
-
-#### **Debugging Boot**
-
-Since dm-verity isn't entirely upstream, first is to build and install an image
-with --noenable_rootfs_verification. This will allow us to update the kernel for
-testing chromeos-base-3.2:
-
-`./build_image --board=$B --test --noenable_rootfs_verification`
-
-Once we merge in chromes-verity-v3.2 topic branch, then we can rebuild normally.
-
-Then get the kernel to spew it's verbage to the console. Here's the list the
-parameters to modify:
-
-* quiet : delete this one
-* loglevel=1 : replace with loglevel=7 or debug
-* console=tty2 : replace with console=tty1.
-* Also add console=ttyS0 if serial console is available
- ([servo](/chromium-os/servo) or mini-PCIe serial card)
-
-One can modify the parameters in two places depending on which tools are used to
-push kernels:
-
-1. update_kernel.sh : vi ~/trunk/src/build/images/$B/latest/config.txt
-2. build_image.sh : vi ~/trunk/src/scripts/build_kernel_image.sh and
- modify where this script writes out parameters to config.txt. Then
- (re)run build_image as shown above.
-
-### Step 8: Push -base Topic Branch
-
-***Before pushing your branch, contact*** ***[Chromium OS
-dev](https://groups.google.com/a/chromium.org/group/chromium-os-dev)***
-***mailing list to request a push of a kernel.org/linus tag (e.g. v3.2) to
-kernel-next and kernel repos AND permissions to push a new branch to kernel-next
-and kernel repos. Please include a reference to this page so people understand
-what you are asking for.***
-
-Setup and push to chromium.org repo commands:
-
-```none
-git remote add kernel-ssh https://chromium.googlesource.com/chromiumos/third_party/kernel.git
-git remote add kernel-next-ssh https://chromium.googlesource.com/chromiumos/third_party/kernel-next.git
-git push kernel-next-ssh chromeos-base-3.2
-```
-
-If the chromeos-base-X.Y branch needs another rebase or drop some
-commits/whatever, push the branch again. If you haven't yet, also push the
-previous release branches (can be one command if preferred) that have been
-sync'd:
-
-```none
-git push kernel-next-ssh chromeos-gobi-3.0 
-git push kernel-next-ssh chromeos-misc-3.0 
-git push kernel-next-ssh chromeos-verity-3.0 
-git push kernel-next-ssh chromeos-tegra-3.0
-```
-
-### Step 9: Rebase other Topic branches
-
-Topic branches other than -base, depend on -base. So we need to do the rebase
-slightly differently. -misc topic branch is used in the examples below but the
-process should be the same for any topic branch. Instructions here are
-essentially the same as "***Rebase -base Topic branch first***" step.
-
-```none
-git checkout chromeos-misc-3.2
-git rebase v3.2
-```
-
-Fix up merge conflicts. Commit each file touched separately. Don't build (yet).
-Then squash fixups/cleanup into original commits with:
-
-```none
-git rebase -i v3.2
-```
-
-Now build/test/ using a "junk branch" to park commits on:
-
-```none
-git checkout -b mergetest chromeos-base-3.2
-git merge chromeos-misc-3.2
-```
-
-Do the previously described build/boot/fixup/commit cycle until things look good
-(enough). Then we need to bring those changes back into the original topic
-branch we are working.
-
-```none
-git checkout chromeos-misc-3.2
-git log mergetest    # in one window
-git cherry-pick <mergetest commits> # in another window
-```
-
-At this point. it's possible conflicts are due to a change appearing in multiple
-branchs. When working on a topic branch (checked out), check/record the contents
-of that topic branch with:
-
-```none
-git log --oneline v3.2.. 
-```
-
-And as usual, squash, drop, or fix up and commit cleanups with "-i" parameter:
-
-```none
-git rebase -i v3.2
-```
-
-When done, tree builds and boots on a machine, then push the tree to kernel-next
-(or kernel) with:
-
-```none
-git push kernel-next-ssh chromeos-misc-3.2
-```
-
-### **Step 10: Merge Topic Branches**
-
-Merge all the branches together (like you did at the end of the topic branch
-splitup), then try compiling and see how much is broken. e.g.:
-
-```none
-git checkout -b chromeos-3.2 chromeos-base-3.2
-git merge chromeos-misc-3.2
-git merge chromeos-gobi-3.2
-git merge chromeos-verity-3.2
-git merge chromeos-input-3.2
-```
-
-Expect to fix ups conflicts/mistakes in earlier steps:
-
-1. commit each fixed file into the merged-together branch with "FIXUP"
- prefix (so they are easy to find later).
-2. find the topic branch which has the conflicting change:
- `git log -S <symbol> -- <filename> # find candidate commits which touch
- <symbol>`
- `git show <SHA1> # confirm this is the conflict`
-3. Checkout the topic branch with the offending &lt;SHA1&gt;.
-4. cherry pick the FIXUP &lt;SHA1&gt; into that topic branch.
-5. git rebase -i v3.2 and squash the FIXUP into the commit that
- introduced the problem.
-
-The result is less noise in the change log, a cleaner history, and the branch
-will be more bisectable.
-
-Then delete (or reset to pre-merge state) the "merge branch" (chromeos-3.2 in
-above example) and redo the merge from scratch. If you move the old branch
-aside, you can diff the two end results and make sure they are the same.
-
-### Step 11: Test Merged Branch
-
-The very first testing is to see if the system even comes up. It is easier to
-work with just one system on your desk. Once that comes up, suspend-resumes and
-reboots cleanly, I kick off a handful of labtest runs of bvt and regression.
-
-### Step 12: Change the manifests for kernel-next.git and ask for help
-
-Send out a PSA saying "switching kernel-next over to track chromeos-X.Y" on
-chromium-os-dev, and change the internal and external manifests to track the new
-branch by default. I normally do this before I ask others to start pitching in
-on testing since it makes it easier to make sure you're tracking the right
-sources.
-
-Also, this is the time when I start asking various subteams and other team
-members to start pitching in and testing the new kernel on whatever hardware
-they have. For 3.0, I created a large number of bugs in the bugtracker for
-sign-off, which worked quite well. I made those bugs blockers of the root
-"rebase to 3.0" bug.
-
-```none
-cd ~/trunk/.repo
-git branch   # see which branches are available
-git checkout default
-git pull
-git branch update-kernelnext
-$EDITOR oldlayout.xml  # update kernel-next version
-git diff # review change
-git commit  # "kernel-next: move to chromeos-3.2 branch"
-git push origin HEAD:refs/for/master
-```
-
-### Step 13: Move over to kernel.git and change those manifests
-
-Once testing in kernel-next.git look reasonably stable, the branches are clean
-(don't contain too much cruft), the time has come to move the branches back to
-the kernel.git repo. Use "git push" to the kernel.git repo (appropriate
-permissions needed in gerrit):
-
-```none
-git push kernel-ssh chromeos-3.2
-```
-
-When the pushed branch looks good, update the manifest to point to the new
-branch just like for kernel-next. Send PSAs to chromium-os-dev when before,
-during, and after changing the manifest:
-
-```none
-cd ~/trunk/.repo/manifests/
-# updating public manifest requires SSH access
-git remote add manifest-ssh https://chromium.googlesource.com/chromiumos/manifest.git
-git remote update
-git branch -a  # see which branches are available
-git checkout remotes/manifest-ssh/master
-git branch update-kernel
-git checkout update-kernel
-$EDITOR oldlayout.xml  # update kernel version
-git diff # review change
-git commit  # "kernel: move to chromeos-3.2 branch"
-git push manifest-ssh HEAD:refs/for/master
-# internal manifest update: git push origin HEAD:refs/for/master
-```
-
-The above will create a gerrit change that needs to be reviewed/approved.
-
-(*Reminder: ChromeOS folks will also need to update manifest-internal*)
-
-### Step 14: Wait and debug
-
-Once the new kernel tree is in production, you will surely start hearing about
-problems. Have fun! :) Usually it's a smaller number of problems. If things look
-really bad, the manifest can always be switched back to the old branch.
-
-## **Important notes**
-
-* **DOCUMENT YOUR WORK!** This is extremely important. If you have to
- touch up a commit, document it! The way to do it is in the commit
- message, adding your own Signed-off-by with a quick one-line comment
- above. For example:
- commit 462fd39525eb3221d320ff3f0eaaddec1ed28a80
-
- `Author: Yen Lin <yelin@nvidia.com>`
-
- `Date: Thu Aug 18 10:14:03 2011 -0700`
-
- ` CHROMIUM: arm: tegra: reserve lp0_vec, fb and carveout`
-
- ` The fb, fb2 and carveout memory reserved are from high address memory.`
-
- ` That means with the current u-boot "mem=384M@0M nvmem=128M@384M
- mem=512M@512M"`
-
- ` cmdline parameter, there will be a 128MB hole wasted.`
-
- ` BUG=chrome-os-partner:5501`
-
- ` TEST=hot-plug HDMI then perform suspend/resume LP0`
-
- ` Change-Id: I1e8877623e62afa7f1a3ad0dd6938e83db5bd188`
-
- ` Signed-off-by: Yen Lin <yelin@nvidia.com>`
-
- ` Reviewed-on: http://gerrit.chromium.org/gerrit/6290`
-
- ` Reviewed-by: Bryan Freed <bfreed@chromium.org>`
-
- ` Tested-by: Bryan Freed <bfreed@chromium.org>`
-
- ` [olofj: split up in common.c change and board change, and cleanup]`
-
- ` Signed-off-by: Olof Johansson <olofj@chromium.org>`
-
-* Likewise, just keep a short log of the patches that you drop due to
- conflicts at rebase, so you can come back and revisit them when the
- branch is done.
-* Keep track of which patches didn't apply, so you can tell people
- what work needs to be done. For example, I have traditionally not
- made much of an effort to bring wifi patches forward, since I know
- most of them are backports and Sam and Paul have been doing a good
- job of re-syncing it (they are the ones who know how to run the
- tests, and more importantly, parse the test results, in the first
- place). But keep a log of it, so you know who to ask for help later
- on.
-* During split-up, you might realize that someone has done a change
- that touches several topic branches. In most cases, this is a time
- when it makes sense to split up the commit into several ones.
- Typical case is when someone did a config change as part of a code
- change, or someone changed both ARM board code and a driver as one
- change. Split the commit and fixup the commit message as appropriate
- here. Use your judgement and taste for what is reasonable to do.
-* Compile often during rebase to catch build errors as soon as they
- are introduced as possible. If you miss them, then fix them up,
- commit into a separate change, and then go back and squash that
- change in with the offending commit (documenting the fixup in the
- Signed-off-by trail just like with other edits).
-* Once you move the code over to kernel.git, make sure noone is
- commiting to kernel-next.git. This causes pain if you want to keep
- the two trees in sync since things will merge in different order
- instead of just fast-forward when you merge over, and overall it can
- cause confusion.
-* I normally tell people that I will try to keep the new kernel.git
- checkins in sync with kernel-next.git (i.e. bring them over) once
- the rebase starts. In some cases people have still been submitting
- their code to both trees, which is OK but be careful that you do
- bring everything over since it can be easy to miss things when some
- is in already and some is not.
-* Do the rebase of the topic branches on top of the master mainline
- release (i.e. 3.0), but merge them together on top of the latest
- -stable at the time (3.0.8). This way next rebase will be easier.
- Make sure to split up into topic branches before you merge in a new
- stable release into kernel.git ToT as well (i.e. if you want to
- update that tree to 3.0.10). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/llvm-clang-build/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/llvm-clang-build/index.md
deleted file mode 100644
index 9d83bf04e4c..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/llvm-clang-build/index.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: llvm-clang-build
-title: Chrome OS build with LLVM Clang and ASAN
----
-
-This page describes steps to build ChromeOS with Clang or
-[ASAN](/developers/testing/addresssanitizer) (which is Clang-based). Address
-Sanitizer ([ASAN](/developers/testing/addresssanitizer)) is a fast memory error
-detector based on compiler instrumentation.
-
-Note that currently we can reliably build ChromeOS Chrome with Clang. Other
-Chrome OS modules are TBD.
-
-If you are interested in use of Clang or ASAN, please subscribe to the "page
-changes" to be notified when the process below is improved. Please send feedback
-about this process to Denis Glotov and/or chromium-os-dev mailing list.
-
-1. Have your chroot set up and all packages built. Just as in [Chromium OS
-Developer Guide](/chromium-os/developer-guide).
-
-2. Specify what you want to build with: either clang only or clang + ASAN.
-
-```none
-export USE="$USE clang asan"
-```
-
-3. Build ChromeOS Chrome as usual.
-
-```none
-emerge-$BOARD chromeos-chrome
-```
-
-Note that we have builders that use Clang/ASAN and runs auto tests. See more
-here: [Sheriff FAQ: Chromium OS ASAN bots](/system/errors/NodeNotFound). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0001-FROMLIST-drm-panel-add-Kingdisplay-kd097d04-panel-dr.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0001-FROMLIST-drm-panel-add-Kingdisplay-kd097d04-panel-dr.patch
deleted file mode 100644
index f4e1e00b5e1..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0001-FROMLIST-drm-panel-add-Kingdisplay-kd097d04-panel-dr.patch
+++ /dev/null
@@ -1,560 +0,0 @@
-From d67e8cc5e83cdc82da74d342d5522c17a3c2d7f0 Mon Sep 17 00:00:00 2001
-From: Nickey Yang <nickey.yang@rock-chips.com>
-Date: Fri, 17 Aug 2018 11:37:31 +0200
-Subject: [PATCH 1/8] FROMLIST: drm/panel: add Kingdisplay kd097d04 panel
- driver
-
-Support Kingdisplay kd097d04 9.7" 1536x2048 TFT LCD panel,
-it is a MIPI dual-DSI panel.
-
-v4:
-- address Philipp's comments
- - real range for usleep_range and
- - poweroff ordering in kingdisplay_panel_prepare
- - return value beautification in panel_probe
-- update author naming for full name
-v3:
-- address Thierry's comments
- - error handling for init dsi writes in init
- - unconditionally remove the panel
- - don't use drm_panel_detach
- - a bit of variable signednes wiggling
-- I did talk to ChromeOS people and the delays really should be as short
- as possible, so dropped the 100ms from the delay comments
-v2:
-- update timing + cmds from chromeos kernel
-- new backlight API including switch to devm_of_find_backlight
-- fix most of Sean Paul's comments
- enable/prepare tracking seems something all panels do
-- document origins of the init sequence
-- lanes per dsi interface to 4 (two interfaces). Matches how tegra
- and pending rockchip dual-dsi handle (dual-)dsi lanes
-- spdx header instead of license boilerplate
-
-Change-Id: I7774afd51f2b1e83af452e5007a4d621cb9f2dd8
-Signed-off-by: Nickey Yang <nickey.yang@rock-chips.com>
-Signed-off-by: Heiko Stuebner <heiko@sntech.de>
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/panel/Kconfig | 11 +
- drivers/gpu/drm/panel/Makefile | 1 +
- .../drm/panel/panel-kingdisplay-kd097d04.c | 473 ++++++++++++++++++
- 3 files changed, 485 insertions(+)
- create mode 100644 drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c
-
-diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
-index 3f3537719beb2e..f892e881af8252 100644
---- a/drivers/gpu/drm/panel/Kconfig
-+++ b/drivers/gpu/drm/panel/Kconfig
-@@ -77,6 +77,17 @@ config DRM_PANEL_JDI_LT070ME05000
- The panel has a 1200(RGB)×1920 (WUXGA) resolution and uses
- 24 bit per pixel.
-
-+config DRM_PANEL_KINGDISPLAY_KD097D04
-+ tristate "Kingdisplay kd097d04 panel"
-+ depends on OF
-+ depends on DRM_MIPI_DSI
-+ depends on BACKLIGHT_CLASS_DEVICE
-+ help
-+ Say Y here if you want to enable support for Kingdisplay kd097d04
-+ TFT-LCD modules. The panel has a 1536x2048 resolution and uses
-+ 24 bit RGB per pixel. It provides a MIPI DSI interface to
-+ the host and has a built-in LED backlight.
-+
- config DRM_PANEL_SAMSUNG_LD9040
- tristate "Samsung LD9040 RGB/SPI panel"
- depends on OF && SPI
-diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
-index 4396658a799646..80e28c7ff62efb 100644
---- a/drivers/gpu/drm/panel/Makefile
-+++ b/drivers/gpu/drm/panel/Makefile
-@@ -6,6 +6,7 @@ obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o
- obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9881C) += panel-ilitek-ili9881c.o
- obj-$(CONFIG_DRM_PANEL_INNOLUX_P079ZCA) += panel-innolux-p079zca.o
- obj-$(CONFIG_DRM_PANEL_JDI_LT070ME05000) += panel-jdi-lt070me05000.o
-+obj-$(CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04) += panel-kingdisplay-kd097d04.o
- obj-$(CONFIG_DRM_PANEL_LG_LG4573) += panel-lg-lg4573.o
- obj-$(CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO) += panel-olimex-lcd-olinuxino.o
- obj-$(CONFIG_DRM_PANEL_ORISETECH_OTM8009A) += panel-orisetech-otm8009a.o
-diff --git a/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c b/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c
-new file mode 100644
-index 00000000000000..2a25a914d09e23
---- /dev/null
-+++ b/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c
-@@ -0,0 +1,473 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd
-+ */
-+
-+#include <linux/backlight.h>
-+#include <linux/gpio/consumer.h>
-+#include <linux/module.h>
-+#include <linux/of.h>
-+#include <linux/regulator/consumer.h>
-+
-+#include <drm/drmP.h>
-+#include <drm/drm_crtc.h>
-+#include <drm/drm_mipi_dsi.h>
-+#include <drm/drm_panel.h>
-+
-+#include <video/mipi_display.h>
-+
-+struct kingdisplay_panel {
-+ struct drm_panel base;
-+ struct mipi_dsi_device *link;
-+
-+ struct backlight_device *backlight;
-+ struct regulator *supply;
-+ struct gpio_desc *enable_gpio;
-+
-+ bool prepared;
-+ bool enabled;
-+};
-+
-+struct kingdisplay_panel_cmd {
-+ char cmd;
-+ char data;
-+};
-+
-+/*
-+ * According to the discussion on
-+ * https://review.coreboot.org/#/c/coreboot/+/22472/
-+ * the panel init array is not part of the panels datasheet but instead
-+ * just came in this form from the panel vendor.
-+ */
-+static const struct kingdisplay_panel_cmd init_code[] = {
-+ /* voltage setting */
-+ { 0xB0, 0x00 },
-+ { 0xB2, 0x02 },
-+ { 0xB3, 0x11 },
-+ { 0xB4, 0x00 },
-+ { 0xB6, 0x80 },
-+ /* VCOM disable */
-+ { 0xB7, 0x02 },
-+ { 0xB8, 0x80 },
-+ { 0xBA, 0x43 },
-+ /* VCOM setting */
-+ { 0xBB, 0x53 },
-+ /* VSP setting */
-+ { 0xBC, 0x0A },
-+ /* VSN setting */
-+ { 0xBD, 0x4A },
-+ /* VGH setting */
-+ { 0xBE, 0x2F },
-+ /* VGL setting */
-+ { 0xBF, 0x1A },
-+ { 0xF0, 0x39 },
-+ { 0xF1, 0x22 },
-+ /* Gamma setting */
-+ { 0xB0, 0x02 },
-+ { 0xC0, 0x00 },
-+ { 0xC1, 0x01 },
-+ { 0xC2, 0x0B },
-+ { 0xC3, 0x15 },
-+ { 0xC4, 0x22 },
-+ { 0xC5, 0x11 },
-+ { 0xC6, 0x15 },
-+ { 0xC7, 0x19 },
-+ { 0xC8, 0x1A },
-+ { 0xC9, 0x16 },
-+ { 0xCA, 0x18 },
-+ { 0xCB, 0x13 },
-+ { 0xCC, 0x18 },
-+ { 0xCD, 0x13 },
-+ { 0xCE, 0x1C },
-+ { 0xCF, 0x19 },
-+ { 0xD0, 0x21 },
-+ { 0xD1, 0x2C },
-+ { 0xD2, 0x2F },
-+ { 0xD3, 0x30 },
-+ { 0xD4, 0x19 },
-+ { 0xD5, 0x1F },
-+ { 0xD6, 0x00 },
-+ { 0xD7, 0x01 },
-+ { 0xD8, 0x0B },
-+ { 0xD9, 0x15 },
-+ { 0xDA, 0x22 },
-+ { 0xDB, 0x11 },
-+ { 0xDC, 0x15 },
-+ { 0xDD, 0x19 },
-+ { 0xDE, 0x1A },
-+ { 0xDF, 0x16 },
-+ { 0xE0, 0x18 },
-+ { 0xE1, 0x13 },
-+ { 0xE2, 0x18 },
-+ { 0xE3, 0x13 },
-+ { 0xE4, 0x1C },
-+ { 0xE5, 0x19 },
-+ { 0xE6, 0x21 },
-+ { 0xE7, 0x2C },
-+ { 0xE8, 0x2F },
-+ { 0xE9, 0x30 },
-+ { 0xEA, 0x19 },
-+ { 0xEB, 0x1F },
-+ /* GOA MUX setting */
-+ { 0xB0, 0x01 },
-+ { 0xC0, 0x10 },
-+ { 0xC1, 0x0F },
-+ { 0xC2, 0x0E },
-+ { 0xC3, 0x0D },
-+ { 0xC4, 0x0C },
-+ { 0xC5, 0x0B },
-+ { 0xC6, 0x0A },
-+ { 0xC7, 0x09 },
-+ { 0xC8, 0x08 },
-+ { 0xC9, 0x07 },
-+ { 0xCA, 0x06 },
-+ { 0xCB, 0x05 },
-+ { 0xCC, 0x00 },
-+ { 0xCD, 0x01 },
-+ { 0xCE, 0x02 },
-+ { 0xCF, 0x03 },
-+ { 0xD0, 0x04 },
-+ { 0xD6, 0x10 },
-+ { 0xD7, 0x0F },
-+ { 0xD8, 0x0E },
-+ { 0xD9, 0x0D },
-+ { 0xDA, 0x0C },
-+ { 0xDB, 0x0B },
-+ { 0xDC, 0x0A },
-+ { 0xDD, 0x09 },
-+ { 0xDE, 0x08 },
-+ { 0xDF, 0x07 },
-+ { 0xE0, 0x06 },
-+ { 0xE1, 0x05 },
-+ { 0xE2, 0x00 },
-+ { 0xE3, 0x01 },
-+ { 0xE4, 0x02 },
-+ { 0xE5, 0x03 },
-+ { 0xE6, 0x04 },
-+ { 0xE7, 0x00 },
-+ { 0xEC, 0xC0 },
-+ /* GOA timing setting */
-+ { 0xB0, 0x03 },
-+ { 0xC0, 0x01 },
-+ { 0xC2, 0x6F },
-+ { 0xC3, 0x6F },
-+ { 0xC5, 0x36 },
-+ { 0xC8, 0x08 },
-+ { 0xC9, 0x04 },
-+ { 0xCA, 0x41 },
-+ { 0xCC, 0x43 },
-+ { 0xCF, 0x60 },
-+ { 0xD2, 0x04 },
-+ { 0xD3, 0x04 },
-+ { 0xD4, 0x03 },
-+ { 0xD5, 0x02 },
-+ { 0xD6, 0x01 },
-+ { 0xD7, 0x00 },
-+ { 0xDB, 0x01 },
-+ { 0xDE, 0x36 },
-+ { 0xE6, 0x6F },
-+ { 0xE7, 0x6F },
-+ /* GOE setting */
-+ { 0xB0, 0x06 },
-+ { 0xB8, 0xA5 },
-+ { 0xC0, 0xA5 },
-+ { 0xD5, 0x3F },
-+};
-+
-+static inline
-+struct kingdisplay_panel *to_kingdisplay_panel(struct drm_panel *panel)
-+{
-+ return container_of(panel, struct kingdisplay_panel, base);
-+}
-+
-+static int kingdisplay_panel_disable(struct drm_panel *panel)
-+{
-+ struct kingdisplay_panel *kingdisplay = to_kingdisplay_panel(panel);
-+ int err;
-+
-+ if (!kingdisplay->enabled)
-+ return 0;
-+
-+ backlight_disable(kingdisplay->backlight);
-+
-+ err = mipi_dsi_dcs_set_display_off(kingdisplay->link);
-+ if (err < 0)
-+ DRM_DEV_ERROR(panel->dev, "failed to set display off: %d\n",
-+ err);
-+
-+ kingdisplay->enabled = false;
-+
-+ return 0;
-+}
-+
-+static int kingdisplay_panel_unprepare(struct drm_panel *panel)
-+{
-+ struct kingdisplay_panel *kingdisplay = to_kingdisplay_panel(panel);
-+ int err;
-+
-+ if (!kingdisplay->prepared)
-+ return 0;
-+
-+ err = mipi_dsi_dcs_enter_sleep_mode(kingdisplay->link);
-+ if (err < 0) {
-+ DRM_DEV_ERROR(panel->dev, "failed to enter sleep mode: %d\n",
-+ err);
-+ return err;
-+ }
-+
-+ /* T15: 120ms */
-+ msleep(120);
-+
-+ gpiod_set_value_cansleep(kingdisplay->enable_gpio, 0);
-+
-+ err = regulator_disable(kingdisplay->supply);
-+ if (err < 0)
-+ return err;
-+
-+ kingdisplay->prepared = false;
-+
-+ return 0;
-+}
-+
-+static int kingdisplay_panel_prepare(struct drm_panel *panel)
-+{
-+ struct kingdisplay_panel *kingdisplay = to_kingdisplay_panel(panel);
-+ int err, regulator_err;
-+ unsigned int i;
-+
-+ if (kingdisplay->prepared)
-+ return 0;
-+
-+ gpiod_set_value_cansleep(kingdisplay->enable_gpio, 0);
-+
-+ err = regulator_enable(kingdisplay->supply);
-+ if (err < 0)
-+ return err;
-+
-+ /* T2: 15ms */
-+ usleep_range(15000, 16000);
-+
-+ gpiod_set_value_cansleep(kingdisplay->enable_gpio, 1);
-+
-+ /* T4: 15ms */
-+ usleep_range(15000, 16000);
-+
-+ for (i = 0; i < ARRAY_SIZE(init_code); i++) {
-+ err = mipi_dsi_generic_write(kingdisplay->link, &init_code[i],
-+ sizeof(struct kingdisplay_panel_cmd));
-+ if (err < 0) {
-+ DRM_DEV_ERROR(panel->dev, "failed write init cmds: %d\n",
-+ err);
-+ goto poweroff;
-+ }
-+ }
-+
-+ err = mipi_dsi_dcs_exit_sleep_mode(kingdisplay->link);
-+ if (err < 0) {
-+ DRM_DEV_ERROR(panel->dev, "failed to exit sleep mode: %d\n",
-+ err);
-+ goto poweroff;
-+ }
-+
-+ /* T6: 120ms */
-+ msleep(120);
-+
-+ err = mipi_dsi_dcs_set_display_on(kingdisplay->link);
-+ if (err < 0) {
-+ DRM_DEV_ERROR(panel->dev, "failed to set display on: %d\n",
-+ err);
-+ goto poweroff;
-+ }
-+
-+ /* T7: 10ms */
-+ usleep_range(10000, 11000);
-+
-+ kingdisplay->prepared = true;
-+
-+ return 0;
-+
-+poweroff:
-+ gpiod_set_value_cansleep(kingdisplay->enable_gpio, 0);
-+
-+ regulator_err = regulator_disable(kingdisplay->supply);
-+ if (regulator_err)
-+ DRM_DEV_ERROR(panel->dev, "failed to disable regulator: %d\n",
-+ regulator_err);
-+
-+ return err;
-+}
-+
-+static int kingdisplay_panel_enable(struct drm_panel *panel)
-+{
-+ struct kingdisplay_panel *kingdisplay = to_kingdisplay_panel(panel);
-+ int ret;
-+
-+ if (kingdisplay->enabled)
-+ return 0;
-+
-+ ret = backlight_enable(kingdisplay->backlight);
-+ if (ret) {
-+ DRM_DEV_ERROR(panel->drm->dev,
-+ "Failed to enable backlight %d\n", ret);
-+ return ret;
-+ }
-+
-+ kingdisplay->enabled = true;
-+
-+ return 0;
-+}
-+
-+static const struct drm_display_mode default_mode = {
-+ .clock = 229000,
-+ .hdisplay = 1536,
-+ .hsync_start = 1536 + 100,
-+ .hsync_end = 1536 + 100 + 24,
-+ .htotal = 1536 + 100 + 24 + 100,
-+ .vdisplay = 2048,
-+ .vsync_start = 2048 + 95,
-+ .vsync_end = 2048 + 95 + 2,
-+ .vtotal = 2048 + 95 + 2 + 23,
-+ .vrefresh = 60,
-+};
-+
-+static int kingdisplay_panel_get_modes(struct drm_panel *panel)
-+{
-+ struct drm_display_mode *mode;
-+
-+ mode = drm_mode_duplicate(panel->drm, &default_mode);
-+ if (!mode) {
-+ DRM_DEV_ERROR(panel->drm->dev, "failed to add mode %ux%ux@%u\n",
-+ default_mode.hdisplay, default_mode.vdisplay,
-+ default_mode.vrefresh);
-+ return -ENOMEM;
-+ }
-+
-+ drm_mode_set_name(mode);
-+
-+ drm_mode_probed_add(panel->connector, mode);
-+
-+ panel->connector->display_info.width_mm = 147;
-+ panel->connector->display_info.height_mm = 196;
-+ panel->connector->display_info.bpc = 8;
-+
-+ return 1;
-+}
-+
-+static const struct drm_panel_funcs kingdisplay_panel_funcs = {
-+ .disable = kingdisplay_panel_disable,
-+ .unprepare = kingdisplay_panel_unprepare,
-+ .prepare = kingdisplay_panel_prepare,
-+ .enable = kingdisplay_panel_enable,
-+ .get_modes = kingdisplay_panel_get_modes,
-+};
-+
-+static const struct of_device_id kingdisplay_of_match[] = {
-+ { .compatible = "kingdisplay,kd097d04", },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(of, kingdisplay_of_match);
-+
-+static int kingdisplay_panel_add(struct kingdisplay_panel *kingdisplay)
-+{
-+ struct device *dev = &kingdisplay->link->dev;
-+ int err;
-+
-+ kingdisplay->supply = devm_regulator_get(dev, "power");
-+ if (IS_ERR(kingdisplay->supply))
-+ return PTR_ERR(kingdisplay->supply);
-+
-+ kingdisplay->enable_gpio = devm_gpiod_get_optional(dev, "enable",
-+ GPIOD_OUT_HIGH);
-+ if (IS_ERR(kingdisplay->enable_gpio)) {
-+ err = PTR_ERR(kingdisplay->enable_gpio);
-+ dev_dbg(dev, "failed to get enable gpio: %d\n", err);
-+ kingdisplay->enable_gpio = NULL;
-+ }
-+
-+ kingdisplay->backlight = devm_of_find_backlight(dev);
-+ if (IS_ERR(kingdisplay->backlight))
-+ return PTR_ERR(kingdisplay->backlight);
-+
-+ drm_panel_init(&kingdisplay->base);
-+ kingdisplay->base.funcs = &kingdisplay_panel_funcs;
-+ kingdisplay->base.dev = &kingdisplay->link->dev;
-+
-+ return drm_panel_add(&kingdisplay->base);
-+}
-+
-+static void kingdisplay_panel_del(struct kingdisplay_panel *kingdisplay)
-+{
-+ drm_panel_remove(&kingdisplay->base);
-+}
-+
-+static int kingdisplay_panel_probe(struct mipi_dsi_device *dsi)
-+{
-+ struct kingdisplay_panel *kingdisplay;
-+ int err;
-+
-+ dsi->lanes = 4;
-+ dsi->format = MIPI_DSI_FMT_RGB888;
-+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
-+ MIPI_DSI_MODE_LPM;
-+
-+ kingdisplay = devm_kzalloc(&dsi->dev, sizeof(*kingdisplay), GFP_KERNEL);
-+ if (!kingdisplay)
-+ return -ENOMEM;
-+
-+ mipi_dsi_set_drvdata(dsi, kingdisplay);
-+ kingdisplay->link = dsi;
-+
-+ err = kingdisplay_panel_add(kingdisplay);
-+ if (err < 0)
-+ return err;
-+
-+ return mipi_dsi_attach(dsi);
-+}
-+
-+static int kingdisplay_panel_remove(struct mipi_dsi_device *dsi)
-+{
-+ struct kingdisplay_panel *kingdisplay = mipi_dsi_get_drvdata(dsi);
-+ int err;
-+
-+ err = kingdisplay_panel_unprepare(&kingdisplay->base);
-+ if (err < 0)
-+ DRM_DEV_ERROR(&dsi->dev, "failed to unprepare panel: %d\n",
-+ err);
-+
-+ err = kingdisplay_panel_disable(&kingdisplay->base);
-+ if (err < 0)
-+ DRM_DEV_ERROR(&dsi->dev, "failed to disable panel: %d\n", err);
-+
-+ err = mipi_dsi_detach(dsi);
-+ if (err < 0)
-+ DRM_DEV_ERROR(&dsi->dev, "failed to detach from DSI host: %d\n",
-+ err);
-+
-+ kingdisplay_panel_del(kingdisplay);
-+
-+ return 0;
-+}
-+
-+static void kingdisplay_panel_shutdown(struct mipi_dsi_device *dsi)
-+{
-+ struct kingdisplay_panel *kingdisplay = mipi_dsi_get_drvdata(dsi);
-+
-+ kingdisplay_panel_unprepare(&kingdisplay->base);
-+ kingdisplay_panel_disable(&kingdisplay->base);
-+}
-+
-+static struct mipi_dsi_driver kingdisplay_panel_driver = {
-+ .driver = {
-+ .name = "panel-kingdisplay-kd097d04",
-+ .of_match_table = kingdisplay_of_match,
-+ },
-+ .probe = kingdisplay_panel_probe,
-+ .remove = kingdisplay_panel_remove,
-+ .shutdown = kingdisplay_panel_shutdown,
-+};
-+module_mipi_dsi_driver(kingdisplay_panel_driver);
-+
-+MODULE_AUTHOR("Chris Zhong <zyw@rock-chips.com>");
-+MODULE_AUTHOR("Nickey Yang <nickey.yang@rock-chips.com>");
-+MODULE_DESCRIPTION("kingdisplay KD097D04 panel driver");
-+MODULE_LICENSE("GPL v2");
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0002-CHROMIUM-drm-Add-drm_master_relax-debugfs-file-non-r.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0002-CHROMIUM-drm-Add-drm_master_relax-debugfs-file-non-r.patch
deleted file mode 100644
index c4efc10606f..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0002-CHROMIUM-drm-Add-drm_master_relax-debugfs-file-non-r.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-From 2291f9f43f528d8f18893ab4669bae482239f719 Mon Sep 17 00:00:00 2001
-From: Nicolas Boichat <nicolas@boichat.ch>
-Date: Fri, 17 Jan 2014 11:29:25 +0800
-Subject: [PATCH 2/8] CHROMIUM: drm: Add drm_master_relax debugfs file
- (non-root set/drop master ioctls)
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Writing 'Y' to /sys/kernel/debug/dri/drm_master_relax allows
-non-CAP_SYS_ADMIN user to call the 2 ioctls DRM_IOCTL_SET_MASTER and
-DRM_IOCTL_DROP_MASTER.
-
-This makes it possible to run 2 X11 servers at the same time, where at
-least one of them runs under a non-root user (e.g. Chromium OS X server
-as xorg user, and a crouton X server as root).
-
-The behavior is not modified if /sys/kernel/debug/dri/drm_master_relax
-is kept to its default value ('N').
-
-Modifying drm_master_relax is only possible by root user, so it cannot
-possibly lead to exploits. Also, even when the flag is set to 'Y',
-DROP_MASTER permissions are changed to DRM_MASTER which means that only
-a process that has DRM master can drop it (which is actually quite
-logical), and the SET_MASTER IOCTL is changed to DRM_AUTH which allows
-all authenticated DRM users to get master.
-
-R=seanpaul@chromium.org, dbehr@chromium.org
-BUG=chromium:328115
-TEST=With or without the debugfs flag, WebGL examples work, and we can
- switch between VT1 and VT2.
-TEST=On a peppy in developer mode: With the debugfs flag to 'Y', Ubuntu
- saucy chroot generated by crouton (xfce target) is able to start a
- second X11 display. Switching back and forth between the two
- displays works, and 3D acceleration is working in the chroot.
-
-Signed-off-by: Nicolas Boichat <nicolas@boichat.ch>
-Reviewed-on: https://chromium-review.googlesource.com/183190
-Reviewed-by: Kees Cook <keescook@chromium.org>
-Reviewed-by: Dominik Behr <dbehr@chromium.org>
-Commit-Queue: David Schneider <dnschneid@chromium.org>
-Tested-by: David Schneider <dnschneid@chromium.org>
-(cherry picked from commit d53b6142c2b5c742d2c547568c9814597c41ede6)
-Signed-off-by: Dominik Behr <dbehr@chromium.org>
-Reviewed-on: https://chromium-review.googlesource.com/189390
-Reviewed-by: Haixia Shi <hshi@chromium.org>
-
-[benzh: 3.14 rebase. Resolved trivial conflicts]
-Signed-off-by: Ben Zhang <benzh@chromium.org>
-[bfreed: 3.18 rebase. Resolved conflicts]
-Signed-off-by: Bryan Freed <bfreed@chromium.org>
-[briannorris: 4.4 rebase. Resolved conflicts; change drm_master_relax to
-'bool' to match usage and debugfs_create_bool() API change]
-Signed-off-by: Brian Norris <briannorris@chromium.org>
-
-Change-Id: I7b8a00ca8e21321019875012a24cb88fea3c1317
-Reviewed-on: https://chromium-review.googlesource.com/267810
-Trybot-Ready: Bryan Freed <bfreed@chromium.org>
-Tested-by: Bryan Freed <bfreed@chromium.org>
-Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
-Commit-Queue: Bryan Freed <bfreed@chromium.org>
-Reviewed-on: https://chromium-review.googlesource.com/339283
-Commit-Queue: Brian Norris <briannorris@chromium.org>
-Tested-by: Brian Norris <briannorris@chromium.org>
-
-Conflicts:
- drivers/gpu/drm/drm_ioctl.c
- include/drm/drmP.h (variable moved to include/drm/drm_drv.h)
-
-[rebase412(groeck): Context conflicts]
-Signed-off-by: Guenter Roeck <groeck@chromium.org>
-
-Conflicts:
- drivers/gpu/drm/drm_ioctl.c
-[rebase414(groeck): drm_ioctl() reorganized]
-Signed-off-by: Guenter Roeck <groeck@chromium.org>
-[tfiga: Rebase onto Linux 4.20]
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/drm_drv.c | 11 ++++++++++-
- drivers/gpu/drm/drm_ioctl.c | 13 ++++++++++++-
- include/drm/drm_drv.h | 1 +
- 3 files changed, 23 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
-index 7e7d7e0efff083..9cf4ae4d678a9a 100644
---- a/drivers/gpu/drm/drm_drv.c
-+++ b/drivers/gpu/drm/drm_drv.c
-@@ -948,6 +948,9 @@ static int drm_stub_open(struct inode *inode, struct file *filp)
- return err;
- }
-
-+/* When set to true, allow set/drop master ioctls as normal user */
-+bool drm_master_relax;
-+
- static const struct file_operations drm_stub_fops = {
- .owner = THIS_MODULE,
- .open = drm_stub_open,
-@@ -957,7 +960,7 @@ static const struct file_operations drm_stub_fops = {
- static void drm_core_exit(void)
- {
- unregister_chrdev(DRM_MAJOR, "drm");
-- debugfs_remove(drm_debugfs_root);
-+ debugfs_remove_recursive(drm_debugfs_root);
- drm_sysfs_destroy();
- idr_destroy(&drm_minors_idr);
- drm_connector_ida_destroy();
-@@ -983,6 +986,12 @@ static int __init drm_core_init(void)
- goto error;
- }
-
-+ if (!debugfs_create_bool("drm_master_relax", S_IRUSR | S_IWUSR,
-+ drm_debugfs_root, &drm_master_relax)) {
-+ DRM_ERROR(
-+ "Cannot create /sys/kernel/debug/dri/drm_master_relax\n");
-+ }
-+
- ret = register_chrdev(DRM_MAJOR, "drm", &drm_stub_fops);
- if (ret < 0)
- goto error;
-diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index 94bd872d56c48b..22a6c32e4039a8 100644
---- a/drivers/gpu/drm/drm_ioctl.c
-+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -790,6 +790,7 @@ long drm_ioctl(struct file *filp,
- char *kdata = NULL;
- unsigned int in_size, out_size, drv_size, ksize;
- bool is_driver_ioctl;
-+ int flags;
-
- dev = file_priv->minor->dev;
-
-@@ -823,6 +824,15 @@ long drm_ioctl(struct file *filp,
- (long)old_encode_dev(file_priv->minor->kdev->devt),
- file_priv->authenticated, ioctl->name);
-
-+ flags = ioctl->flags;
-+ if (drm_master_relax) {
-+ if (nr == DRM_IOCTL_NR(DRM_IOCTL_SET_MASTER))
-+ flags = DRM_AUTH;
-+ else if (nr == DRM_IOCTL_NR(DRM_IOCTL_DROP_MASTER))
-+ flags = DRM_MASTER;
-+ }
-+
-+
- /* Do not trust userspace, use our own definition */
- func = ioctl->func;
-
-@@ -850,7 +860,8 @@ long drm_ioctl(struct file *filp,
- if (ksize > in_size)
- memset(kdata + in_size, 0, ksize - in_size);
-
-- retcode = drm_ioctl_kernel(filp, func, kdata, ioctl->flags);
-+ retcode = drm_ioctl_kernel(filp, func, kdata, flags);
-+
- if (copy_to_user((void __user *)arg, kdata, out_size) != 0)
- retcode = -EFAULT;
-
-diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
-index 252dd216cc607e..ebde29c1fc2c83 100644
---- a/include/drm/drm_drv.h
-+++ b/include/drm/drm_drv.h
-@@ -612,6 +612,7 @@ struct drm_driver {
- };
-
- extern unsigned int drm_debug;
-+extern bool drm_master_relax;
-
- int drm_dev_init(struct drm_device *dev,
- struct drm_driver *driver,
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0003-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_MAP_DUMB-for-rende.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0003-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_MAP_DUMB-for-rende.patch
deleted file mode 100644
index a87d610a886..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0003-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_MAP_DUMB-for-rende.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 141a15fc03d2beb803d581d55dad38570d38512a Mon Sep 17 00:00:00 2001
-From: Tomasz Figa <tfiga@chromium.org>
-Date: Tue, 28 Jun 2016 19:54:24 +0900
-Subject: [PATCH 3/8] CHROMIUM: drm: Allow DRM_IOCTL_MODE_MAP_DUMB for render
- nodes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There is no particular reason to prevent userspace for using this IOCTL,
-considering that it already has access to other, platform-specific
-IOCTLs. This patch makes is possible to have the same userspace code
-work regardless on the underlying platform, which significantly
-simplifies the stack.
-
-BUG=chromium:795946
-TEST=Get a little farther
-
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
-Reviewed-on: https://chromium-review.googlesource.com/356621
-Reviewed-by: Zach Reizner <zachr@chromium.org>
-(cherry picked from commit fbc6b01ff8377e566db1ed8f61487d7ec48f5ce3)
-
-Change-Id: If0c6ef066d3828830c4db4fd42e2a6beb8948a6c
-Signed-off-by: Nicolas Norvez <norvez@chromium.org>
-Reviewed-on: https://chromium-review.googlesource.com/378956
-Reviewed-by: Tomasz Figa <tfiga@chromium.org>
-Signed-off-by: Douglas Anderson <dianders@chromium.org>
-(cherry picked from commit 44237f0ce2a56e955e342a725793105027dbee49)
-Reviewed-on: https://chromium-review.googlesource.com/896229
-Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
-
-[rebase419(groeck): Context conflicts]
-Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-[tfiga: Rebase onto Linux 4.20]
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/drm_ioctl.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index 22a6c32e4039a8..f239fe5679bc31 100644
---- a/drivers/gpu/drm/drm_ioctl.c
-+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -655,8 +655,8 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_UNLOCKED),
-- DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_UNLOCKED),
-- DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_UNLOCKED),
-+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
-+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER|DRM_UNLOCKED),
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0004-CHROMIUM-drm-Allow-render-node-access-to-KMS-getters.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0004-CHROMIUM-drm-Allow-render-node-access-to-KMS-getters.patch
deleted file mode 100644
index 912182f5305..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0004-CHROMIUM-drm-Allow-render-node-access-to-KMS-getters.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From 41c14057a8aa4918a5b5b1f5954544c9c9ac7c9d Mon Sep 17 00:00:00 2001
-From: Gurchetan Singh <gurchetansingh@chromium.org>
-Date: Tue, 1 Nov 2016 09:53:06 -0700
-Subject: [PATCH 4/8] CHROMIUM: drm: Allow render node access to KMS getters
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We need to query the KMS API to present an accurate view of overlay
-formats in Android (see CL:405019). With the exception of
-SET_CLIENT_CAP, these ioctls are getters.
-
-SET_CLIENT_CAP is allowable with render nodes since it only presents
-a different version of the drm core to userspace when modified.
-
-BUG=chromium:795946
-TEST=Get a little farther
-
-Conflicts:
- drivers/gpu/drm/drm_ioctl.c
-...due to DRM_IOCTL_SET_CLIENT_CAP having DRM_UNLOCKED in 4.14.
-
-Change-Id: Id26e1b2b37dfa72f6ce55b524e849141750787c6
-Reviewed-on: https://chromium-review.googlesource.com/405758
-Commit-Ready: Gurchetan Singh <gurchetansingh@chromium.org>
-Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
-Reviewed-by: Stphane Marchesin <marcheu@chromium.org>
-Signed-off-by: Douglas Anderson <dianders@chromium.org>
-(cherry picked from commit a7c78515060be1214f098e39ad5e815a35d121e6)
-Reviewed-on: https://chromium-review.googlesource.com/896230
-Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
-
-[rebase419(groeck): Context conflicts]
-Signed-off-by: Guenter Roeck <groeck@chromium.org>
-[tfiga: Rebase onto Linux 4.20]
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/drm_ioctl.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index f239fe5679bc31..4dcb63ad10ec7d 100644
---- a/drivers/gpu/drm/drm_ioctl.c
-+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -563,7 +563,7 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
- DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, DRM_UNLOCKED|DRM_RENDER_ALLOW),
-- DRM_IOCTL_DEF(DRM_IOCTL_SET_CLIENT_CAP, drm_setclientcap, DRM_UNLOCKED),
-+ DRM_IOCTL_DEF(DRM_IOCTL_SET_CLIENT_CAP, drm_setclientcap, DRM_UNLOCKED | DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_UNLOCKED | DRM_MASTER),
-
- DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-@@ -634,10 +634,10 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
- DRM_IOCTL_DEF(DRM_IOCTL_PRIME_HANDLE_TO_FD, drm_prime_handle_to_fd_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_PRIME_FD_TO_HANDLE, drm_prime_fd_to_handle_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW),
-
-- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANERESOURCES, drm_mode_getplane_res, DRM_UNLOCKED),
-+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANERESOURCES, drm_mode_getplane_res, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER|DRM_UNLOCKED),
-- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANE, drm_mode_getplane, DRM_UNLOCKED),
-+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANE, drm_mode_getplane, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPLANE, drm_mode_setplane, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR, drm_mode_cursor_ioctl, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, DRM_UNLOCKED),
-@@ -646,7 +646,7 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_noop, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_noop, DRM_MASTER|DRM_UNLOCKED),
-- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl, DRM_UNLOCKED),
-+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY, drm_connector_property_set_ioctl, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_UNLOCKED),
-@@ -658,7 +658,7 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_UNLOCKED),
-- DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, DRM_UNLOCKED),
-+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATOMIC, drm_mode_atomic_ioctl, DRM_MASTER|DRM_UNLOCKED),
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0005-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_DESTROY_DUMB-for-r.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0005-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_DESTROY_DUMB-for-r.patch
deleted file mode 100644
index 77fc19e0e53..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0005-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_DESTROY_DUMB-for-r.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 95bbdf1ee3a06eae8ffa677ab5ce381d77613645 Mon Sep 17 00:00:00 2001
-From: Lepton Wu <lepton@chromium.org>
-Date: Mon, 5 Feb 2018 09:31:20 -0800
-Subject: [PATCH 5/8] CHROMIUM: drm: Allow DRM_IOCTL_MODE_DESTROY_DUMB for
- render nodes
-
-We've already allow DRM_IOCTL_MODE_CREATE_DUMB for render nodes in
-previous CL https://chromium-review.googlesource.com/378956. We have
-to allow DRM_IOCTL_MODE_DESTROY_DUMB for render nodes also otherwise
-memory could get leaked.
-
-BUG=b:69142323
-TEST=manual - run Chrome OS image inside emulator and check vram usage.
-
-Signed-off-by: Lepton Wu <lepton@chromium.org>
-Previously-reviewed-on: https://chromium-review.googlesource.com/902008
-Previously-reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
-(cherry picked from commit 87c53790d6301eec6088dfc5f8b3070ee964fc78)
-
-Change-Id: I8c66172194c74cf5101fdaa89a3804108b5e6f75
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
-Reviewed-on: https://chromium-review.googlesource.com/1168664
-Reviewed-by: Lepton Wu <lepton@chromium.org>
-
-[rebase419(groeck): Context conflicts]
-Signed-off-by: Guenter Roeck <groeck@chromium.org>
-[tfiga: Rebase onto Linux 4.20]
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/drm_ioctl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index 4dcb63ad10ec7d..5ec32f02d94300 100644
---- a/drivers/gpu/drm/drm_ioctl.c
-+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -657,7 +657,7 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
-- DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_UNLOCKED),
-+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER|DRM_UNLOCKED),
- DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER|DRM_UNLOCKED),
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0006-CHROMIUM-drm-rockchip-Enable-rendernode.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0006-CHROMIUM-drm-rockchip-Enable-rendernode.patch
deleted file mode 100644
index 6e771c82c0e..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0006-CHROMIUM-drm-rockchip-Enable-rendernode.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 5eef7704468d7ba13e03d72b7dc81a7516139f33 Mon Sep 17 00:00:00 2001
-From: Tomasz Figa <tfiga@chromium.org>
-Date: Tue, 20 Nov 2018 12:44:03 +0900
-Subject: [PATCH 6/8] CHROMIUM: drm/rockchip: Enable rendernode
-
-The Mesa EGL surfaceless platform needs a render node to se kms_swrast,
-so make the Rockchip DRM driver provide one. (Strictly speaking, vgem
-should work fine, but somehow the allocations fail from it and the
-problem needs further investigation.)
-
-Change-Id: I11f6f7c92b311422384d16f4272a2430a2e8344d
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
-index 37f9a3b651ab08..3eb70c0f8b6eb4 100644
---- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
-+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
-@@ -221,7 +221,7 @@ static const struct file_operations rockchip_drm_driver_fops = {
-
- static struct drm_driver rockchip_drm_driver = {
- .driver_features = DRIVER_MODESET | DRIVER_GEM |
-- DRIVER_PRIME | DRIVER_ATOMIC,
-+ DRIVER_PRIME | DRIVER_ATOMIC | DRIVER_RENDER,
- .lastclose = drm_fb_helper_lastclose,
- .gem_vm_ops = &drm_gem_cma_vm_ops,
- .gem_free_object_unlocked = rockchip_gem_free_object,
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0007-CHROMIUM-drm-rockchip-Add-GEM-ioctls.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0007-CHROMIUM-drm-rockchip-Add-GEM-ioctls.patch
deleted file mode 100644
index 63ab5e0d2ab..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0007-CHROMIUM-drm-rockchip-Add-GEM-ioctls.patch
+++ /dev/null
@@ -1,227 +0,0 @@
-From 89cafbd70dd91e25a6a1852ab4aa1ff524702371 Mon Sep 17 00:00:00 2001
-From: Tomasz Figa <tfiga@chromium.org>
-Date: Mon, 19 Nov 2018 22:02:41 +0900
-Subject: [PATCH 7/8] CHROMIUM: drm/rockchip: Add GEM ioctls
-
-Chrome OS uses the Rockchip DRM to allocate GEM buffers for various
-hardware accelerated usage scenarios. Add GEM ioctls to the driver.
-
-Change-Id: Ieb360729dfd3e3e8af31d8920e0fd3e3e5cabd5d
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 13 +++++
- drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 47 +++++++++++++++++
- drivers/gpu/drm/rockchip/rockchip_drm_gem.h | 17 ++++++
- include/uapi/drm/rockchip_drm.h | 57 +++++++++++++++++++++
- 4 files changed, 134 insertions(+)
- create mode 100644 include/uapi/drm/rockchip_drm.h
-
-diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
-index 3eb70c0f8b6eb4..dd37cbb875cf73 100644
---- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
-+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
-@@ -29,6 +29,8 @@
- #include <linux/console.h>
- #include <linux/iommu.h>
-
-+#include <drm/rockchip_drm.h>
-+
- #include "rockchip_drm_drv.h"
- #include "rockchip_drm_fb.h"
- #include "rockchip_drm_fbdev.h"
-@@ -208,6 +210,14 @@ static void rockchip_drm_unbind(struct device *dev)
- drm_dev_put(drm_dev);
- }
-
-+static const struct drm_ioctl_desc rockchip_ioctls[] = {
-+ DRM_IOCTL_DEF_DRV(ROCKCHIP_GEM_CREATE, rockchip_gem_create_ioctl,
-+ DRM_UNLOCKED | DRM_AUTH | DRM_RENDER_ALLOW),
-+ DRM_IOCTL_DEF_DRV(ROCKCHIP_GEM_MAP_OFFSET,
-+ rockchip_gem_map_offset_ioctl,
-+ DRM_UNLOCKED | DRM_AUTH | DRM_RENDER_ALLOW),
-+};
-+
- static const struct file_operations rockchip_drm_driver_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
-@@ -226,6 +236,7 @@ static struct drm_driver rockchip_drm_driver = {
- .gem_vm_ops = &drm_gem_cma_vm_ops,
- .gem_free_object_unlocked = rockchip_gem_free_object,
- .dumb_create = rockchip_gem_dumb_create,
-+ .dumb_map_offset = rockchip_gem_dumb_map_offset,
- .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
- .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
- .gem_prime_import = drm_gem_prime_import,
-@@ -235,6 +246,8 @@ static struct drm_driver rockchip_drm_driver = {
- .gem_prime_vmap = rockchip_gem_prime_vmap,
- .gem_prime_vunmap = rockchip_gem_prime_vunmap,
- .gem_prime_mmap = rockchip_gem_mmap_buf,
-+ .ioctls = rockchip_ioctls,
-+ .num_ioctls = ARRAY_SIZE(rockchip_ioctls),
- .fops = &rockchip_drm_driver_fops,
- .name = DRIVER_NAME,
- .desc = DRIVER_DESC,
-diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
-index a8db758d523e94..1880e090762992 100644
---- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
-+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
-@@ -16,6 +16,7 @@
- #include <drm/drmP.h>
- #include <drm/drm_gem.h>
- #include <drm/drm_vma_manager.h>
-+#include <drm/rockchip_drm.h>
-
- #include <linux/dma-buf.h>
- #include <linux/iommu.h>
-@@ -422,6 +423,32 @@ rockchip_gem_create_with_handle(struct drm_file *file_priv,
- return ERR_PTR(ret);
- }
-
-+int rockchip_gem_dumb_map_offset(struct drm_file *file_priv,
-+ struct drm_device *dev, uint32_t handle,
-+ uint64_t *offset)
-+{
-+ struct drm_gem_object *obj;
-+ int ret;
-+
-+ obj = drm_gem_object_lookup(file_priv, handle);
-+ if (!obj) {
-+ DRM_ERROR("failed to lookup gem object.\n");
-+ return -EINVAL;
-+ }
-+
-+ ret = drm_gem_create_mmap_offset(obj);
-+ if (ret)
-+ goto out;
-+
-+ *offset = drm_vma_node_offset_addr(&obj->vma_node);
-+ DRM_DEBUG_KMS("offset = 0x%llx\n", *offset);
-+
-+out:
-+ drm_gem_object_put_unlocked(obj);
-+
-+ return 0;
-+}
-+
- /*
- * rockchip_gem_dumb_create - (struct drm_driver)->dumb_create callback
- * function
-@@ -448,6 +475,26 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv,
- return PTR_ERR_OR_ZERO(rk_obj);
- }
-
-+int rockchip_gem_map_offset_ioctl(struct drm_device *drm, void *data,
-+ struct drm_file *file_priv)
-+{
-+ struct drm_rockchip_gem_map_off *args = data;
-+
-+ return rockchip_gem_dumb_map_offset(file_priv, drm, args->handle,
-+ &args->offset);
-+}
-+
-+int rockchip_gem_create_ioctl(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv)
-+{
-+ struct drm_rockchip_gem_create *args = data;
-+ struct rockchip_gem_object *rk_obj;
-+
-+ rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size,
-+ &args->handle);
-+ return PTR_ERR_OR_ZERO(rk_obj);
-+}
-+
- /*
- * Allocate a sg_table for this GEM object.
- * Note: Both the table's contents, and the sg_table itself must be freed by
-diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
-index d41fa65219d232..9cda28b7f2bb40 100644
---- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
-+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h
-@@ -58,4 +58,21 @@ void rockchip_gem_free_object(struct drm_gem_object *obj);
- int rockchip_gem_dumb_create(struct drm_file *file_priv,
- struct drm_device *dev,
- struct drm_mode_create_dumb *args);
-+int rockchip_gem_dumb_map_offset(struct drm_file *file_priv,
-+ struct drm_device *dev, uint32_t handle,
-+ uint64_t *offset);
-+int rockchip_gem_map_offset_ioctl(struct drm_device *drm, void *data,
-+ struct drm_file *file_priv);
-+/*
-+ * request gem object creation and buffer allocation as the size
-+ * that it is calculated with framebuffer information such as width,
-+ * height and bpp.
-+ */
-+int rockchip_gem_create_ioctl(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
-+/* get buffer offset to map to user space. */
-+int rockchip_gem_map_offset_ioctl(struct drm_device *dev, void *data,
-+ struct drm_file *file_priv);
-+
- #endif /* _ROCKCHIP_DRM_GEM_H */
-diff --git a/include/uapi/drm/rockchip_drm.h b/include/uapi/drm/rockchip_drm.h
-new file mode 100644
-index 00000000000000..c521e5a3e0cb45
---- /dev/null
-+++ b/include/uapi/drm/rockchip_drm.h
-@@ -0,0 +1,57 @@
-+/*
-+ *
-+ * Copyright (c) Fuzhou Rockchip Electronics Co.Ltd
-+ * Authors:
-+ * Mark Yao <yzq@rock-chips.com>
-+ *
-+ * base on exynos_drm.h
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ */
-+
-+#ifndef _UAPI_ROCKCHIP_DRM_H
-+#define _UAPI_ROCKCHIP_DRM_H
-+
-+#include <drm/drm.h>
-+
-+/**
-+ * User-desired buffer creation information structure.
-+ *
-+ * @size: user-desired memory allocation size.
-+ * @flags: user request for setting memory type or cache attributes.
-+ * @handle: returned a handle to created gem object.
-+ * - this handle will be set by gem module of kernel side.
-+ */
-+struct drm_rockchip_gem_create {
-+ uint64_t size;
-+ uint32_t flags;
-+ uint32_t handle;
-+};
-+
-+/**
-+ * A structure for getting buffer offset.
-+ *
-+ * @handle: a pointer to gem object created.
-+ * @pad: just padding to be 64-bit aligned.
-+ * @offset: relatived offset value of the memory region allocated.
-+ * - this value should be set by user.
-+ */
-+struct drm_rockchip_gem_map_off {
-+ uint32_t handle;
-+ uint32_t pad;
-+ uint64_t offset;
-+};
-+
-+#define DRM_ROCKCHIP_GEM_CREATE 0x00
-+#define DRM_ROCKCHIP_GEM_MAP_OFFSET 0x01
-+
-+#define DRM_IOCTL_ROCKCHIP_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \
-+ DRM_ROCKCHIP_GEM_CREATE, struct drm_rockchip_gem_create)
-+
-+#define DRM_IOCTL_ROCKCHIP_GEM_MAP_OFFSET DRM_IOWR(DRM_COMMAND_BASE + \
-+ DRM_ROCKCHIP_GEM_MAP_OFFSET, struct drm_rockchip_gem_map_off)
-+
-+#endif /* _UAPI_ROCKCHIP_DRM_H */
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0008-CHROMIUM-Revert-drm-vgem-create-a-render-node-for-vg.patch b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0008-CHROMIUM-Revert-drm-vgem-create-a-render-node-for-vg.patch
deleted file mode 100644
index 2a309c44b17..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0008-CHROMIUM-Revert-drm-vgem-create-a-render-node-for-vg.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 6a5708be93b048479414abdfd8b0d05cd3cb8300 Mon Sep 17 00:00:00 2001
-From: Tomasz Figa <tfiga@chromium.org>
-Date: Wed, 21 Nov 2018 20:16:05 +0900
-Subject: [PATCH 8/8] CHROMIUM: Revert "drm/vgem: create a render node for
- vgem"
-
-This reverts commit 3a6eb795641c0e140424a3e4f301188eb2fd6d63.
-
-Somehow kms_swrast fails to allocate (or import) buffers using the
-render node exposed by vgem after this patch, so revert it until the
-root cause is found.
-
-Change-Id: Ie6d42f042b71f2775426a5e56edd524f9c7793d4
-Signed-off-by: Tomasz Figa <tfiga@chromium.org>
----
- drivers/gpu/drm/vgem/vgem_drv.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
-index 5930facd6d2d85..f1f7ab9dcdbfc0 100644
---- a/drivers/gpu/drm/vgem/vgem_drv.c
-+++ b/drivers/gpu/drm/vgem/vgem_drv.c
-@@ -431,8 +431,7 @@ static void vgem_release(struct drm_device *dev)
- }
-
- static struct drm_driver vgem_driver = {
-- .driver_features = DRIVER_GEM | DRIVER_PRIME |
-- DRIVER_RENDER,
-+ .driver_features = DRIVER_GEM | DRIVER_PRIME,
- .release = vgem_release,
- .open = vgem_open,
- .postclose = vgem_postclose,
---
-2.20.0.rc2.403.gdbc3b29805-goog
-
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/index.md
deleted file mode 100644
index eb643ac8887..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/index.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus
- - Arch Linux + Mainline kernel on kevin (Chromebook Plus)
-page_name: chrome-os-mainline-kernel-on-kevin-chromebook-plus
-title: Chrome OS + Mainline kernel on kevin (Chromebook Plus)
----
-
-Adapted from Tomasz's instructions
-[here](https://bugs.chromium.org/p/chromium/issues/detail?id=907715#c7)
-
-## Applying the downstream patches
-
-There are a few patches you must apply to Chrome OS and the kernel to get things
-working. The following commands will bootstrap your repo.
-
-**1-** Cherry pick the CLs from [this
-ta](https://chromium-review.googlesource.com/q/hashtag:%2522scarlet-upstream%2522+status:open)g.
-For convenience, just run the following commands from your src dir in your
-chromiumos checkout:
-
-```none
-pushd third_party/chromiumos-overlay/ && \
-    repo start rockchip_upstream . && \
-    git fetch https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay refs/changes/89/1348489/4 && git cherry-pick FETCH_HEAD && \
-    git fetch https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay refs/changes/36/1458536/1 && git cherry-pick FETCH_HEAD && \
-    popd
-pushd overlays/ && \
-    repo start rockchip_upstream . && \
-    git fetch https://chromium.googlesource.com/chromiumos/overlays/board-overlays refs/changes/11/1351911/1 && git cherry-pick FETCH_HEAD && \
-    popd
-pushd platform/minigbm && \
-    repo start rockchip_upstream . && \
-    git fetch https://chromium.googlesource.com/chromiumos/platform/minigbm refs/changes/52/1347652/4 && git cherry-pick FETCH_HEAD && \
-    popd
-```
-
-**1a-** If you have an internal checkout, also cherry pick the patch from [this
-tag](https://chrome-internal-review.googlesource.com/q/hashtag:%2522scarlet-upstream%2522+status:open).
-Again, for convenience, here is the command:
-
-```none
-pushd private-overlays/baseboard-gru-private/ && \
-    repo start rockchip_upstream . && \
-    git fetch https://chrome-internal.googlesource.com/chromeos/overlays/baseboard-gru-private refs/changes/14/722014/1 && git cherry-pick FETCH_HEAD && \
-    popd
-```
-
-**2-** Check out an upstream kernel into the v4.4 kernel directory, and apply
-the attached patches:
-
-```none
-pushd third_party/kernel/v4.4/ && \
-    git remote add torvalds git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git && \
-    git fetch torvalds && \
-    git branch -t rockchip_upstream torvalds/master && \
-    git checkout rockchip_upstream && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0001-FROMLIST-drm-panel-add-Kingdisplay-kd097d04-panel-dr.patch' | git am) && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0002-CHROMIUM-drm-Add-drm_master_relax-debugfs-file-non-r.patch' | git am) && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0003-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_MAP_DUMB-for-rende.patch' | git am) && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0004-CHROMIUM-drm-Allow-render-node-access-to-KMS-getters.patch' | git am) && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0005-CHROMIUM-drm-Allow-DRM_IOCTL_MODE_DESTROY_DUMB-for-r.patch' | git am) && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0006-CHROMIUM-drm-rockchip-Enable-rendernode.patch' | git am) && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0007-CHROMIUM-drm-rockchip-Add-GEM-ioctls.patch' | git am) && \
-    (curl -L 'https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus/0008-CHROMIUM-Revert-drm-vgem-create-a-render-node-for-vg.patch' | git am) && \
-    popd
-```
-
-Alternatively, you can use [the following
-branch](https://gitlab.freedesktop.org/seanpaul/kernel/tree/rockchip_upstream)
-with the patches already applied:
-
-```none
-pushd third_party/kernel/v4.4/ && \
-     git remote add seanpaul_gitlab https://gitlab.freedesktop.org/seanpaul/kernel.git && \
-    git fetch seanpaul_gitlab && \
-     git branch -t rockchip_upstream seanpaul_gitlab/rockchip_upstream && \
-    popd
-```
-
-If you use the provided branch, you might want to rebase it on a fresher kernel
-if it becomes stale \[exercise left to the reader\].
-
-## Building the image
-
-All of the pieces are in place to build your image with the upstream kernel! Run
-the following commands in your chroot to build your image:
-
-```none
-export BOARD="kevin|scarlet"# Only run once./setup_board --board=$BOARDcros_workon-$BOARD start minigbm chromeos-kernel-4_4
-```
-
-For scarlet:
-
-```none
-VIDEO_CARDS="llvmpipe rockchip" USE="llvm llvm_targets_ARM gpu_sandbox_failures_not_fatal -gpu_sandbox_start_early -tpm2 mocktpm $USE" ./build_packages --board=$BOARD
-```
-
-For kevin:
-
-```none
-VIDEO_CARDS="llvmpipe rockchip" USE="llvm llvm_targets_ARM gpu_sandbox_failures_not_fatal -gpu_sandbox_start_early $USE" ./build_packages --board=$BOARD
-```
-
-Build a test image:
-
-```none
-./build_image --boot_args="noinitrd kgdboc=ttyS2 slub_debug=FZPUA" --enable_serial=ttyS2 --board=${BOARD} --noenable_rootfs_verification test
-```
-
-Now follow the instructions from the [Chromium OS Developer
-Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md#Installing-Chromium-OS-on-your-Device)
-to flash your image to a USB stick and boot it on your device.
-
-Deploying changes to the kernel is as easy as:
-
-```none
-emerge-${BOARD} chromeos-kernel-4_4
-./update_kernel.sh --remote <device_ip>
-```
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/index.md
deleted file mode 100644
index 76beaeade8c..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/index.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: mainline-kernel-on-kevin-chromebook-plus
-title: Arch Linux + Mainline kernel on kevin (Chromebook Plus)
----
-
-**Note:** Adapted/inspired by [this
-page](https://archlinuxarm.org/platforms/armv7/rockchip/asus-chromebook-flip-c100p)
-
-### Introduction
-
-This guide will walk you through installed Arch Linux with a mainline kernel on
-a USB key suitable for booting on the Chromebook Plus (kevin).
-
-### Preparing the USB key
-
-Plug the USB key into your **chromebook** and run the following commands in the
-shell to create a new partition table and 2 partitions - one for the kernel and
-another for rootfs.
-
-<pre><code>
-; umount /dev/sda*
-; fdisk /dev/sda
-Command (m for help): g
-Command (m for help): w
-Command (m for help): q
-; cgpt create /dev/sda
-; cgpt add -i 1 -t kernel -b 8192 -s 65536 -l Kernel -S 1 -T 5 -P 10 /dev/sda
-; cgpt show /dev/sda
-       <b>start</b>        size    part  contents
-           0           1          PMBR
-           1           1          Pri GPT header
-        8192       65536       1  Label: "Kernel"
-                                  Type: ChromeOS kernel
-                                  UUID: A1E0BF2A-3687-A949-86F8-40507B1D0756
-                                  Attr: priority=10 tries=5 successful=1
-       73728   122470755       2  Label: "Root"
-                                  Type: Linux data
-                                  UUID: A3590EA0-A89B-434F-B6C3-902C0A87CDFB
-   <b><i>122544483</i></b>          32          <b>Sec GPT table</b>
-   122544515           1          Sec GPT header
-</code></pre>
-
-The numbers above will differ depending on the size of your USB key. Grab the
-value under the "start" column for the "Sec GPT table" row and insert it in the
-command below (&lt;start_value&gt;)
-
-<pre><code>; cgpt add -i 2 -t data -b 73728 -s `expr <b>&lt;start_value&gt;</b> - 73728` -l Root /dev/sda
-; sudo partx -a /dev/sda
-; sudo mkfs.ext4 /dev/sda2
-</code></pre>
-
-Your USB key is now formatted in such a way that the chromebook can book from
-it. Next step is to put something bootable on it.
-
-### Download Arch rootfs
-
-The following will download the latest Arch Linux image for gru-kevin and flash
-the rootfs partition.
-
-```none
-; cd /tmp
-; wget http://os.archlinuxarm.org/os/ArchLinuxARM-gru-latest.tar.gz
-; mkdir root
-; sudo mount /dev/sda2 root
-; sudo tar -xf ArchLinuxARM-gru-latest.tar.gz -C root
-```
-
-In order to test the image and your partition table, flash the kernel partition
-from the Arch tarball to your USB key
-
-```none
-; sudo dd if=root/boot/vmlinux.kpart of=/dev/sda1
-; sync
-```
-
-Finally, unmount the root partition:
-
-```none
-; umount root
-```
-
-Unplug the USB key from your workstation and test boot it on your kevin by
-pressing Ctrl+U at the developer screen. The device should boot to a login
-prompt (user: root, passwd: root).
-
-```none
-; reboot
-```
-
-### Preparing the kernel
-
-Back on your workstation, sync a linux-next kernel for maximum freshness.
-
-~~Apply the following patches to enable display:~~
-
-[~~https://github.com/mmind/linux-rockchip/commit/9a35625d79210a8a919fdf6c8f878520134c3a6c~~](https://github.com/mmind/linux-rockchip/commit/9a35625d79210a8a919fdf6c8f878520134c3a6c)
-
-~~<https://github.com/mmind/linux-rockchip/commit/0b50af4d2440404d5e10303cc84e43e84f84f374>~~
-
-**seanpaul:** ^^ These links are broken now (thanks to Brian Carnes for the
-report). I don't remember what they did, but I also don't think they're needed
-any longer since rockchip display support is all in mainline.
-
-### Building the kernel
-
-You'll need to grab the kernel.keyblock and kernel_data_key.vbprivk files in
-order to package the kernel. They're stored in Arch Linux's PKGBUILDs repo on
-github
-[here](https://github.com/archlinuxarm/PKGBUILDs/tree/master/core/linux-gru). I
-put them in &lt;kernel_root&gt;/resources/gru-kevin/.
-
-Also stored in &lt;kernel_root&gt;/resources/gru-kevin is the
-rk3399-gru-kevin.its file. Create and copy/paste the following into it:
-
-```none
-/dts-v1/;
-/ {
- description = "Chrome OS kernel image with one or more FDT blobs";
- #address-cells = <1>;
- images {
- kernel@1 {
- data = /incbin/("../../.build_arm64/arch/arm64/boot/Image");
- type = "kernel_noload";
- arch = "arm64";
- os = "linux";
- compression = "none";
- load = <0>;
- entry = <0>;
- };
- fdt@1 {
-
- description = "rk3399-gru-kevin";
- data = /incbin/("../../.build_arm64/arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb");
- type = "flat_dt";
- arch = "arm64";
- compression = "none";
- hash@1 {
- algo = "sha1";
- };
- };
- };
- configurations {
- default = "conf@1";
- conf@1 {
- kernel = "kernel@1";
- fdt = "fdt@1";
- };
- };
-};
-```
-
-Grab my build script from [github](https://github.com/atseanpaul/build_kernel),
-and add a build.ini file in the kernel root with the following (changing the
-bold parts to suit your environment):
-
-<pre><code>
-[target]
-; From /dev/by-partuuid
-kernel_part_uuid=<b>27c7f096-0f26-d544-a142-7273e6dcf01e</b>
-; From /dev/by-uuid
-root_uuid=<b>89d88389-c5c3-4f88-9ea6-2efd6124bc49</b>
-[build]
-; Choose one of these, not both. defconfig builds from an existing defconfig,
-; whereas config_file points to a config file that will used verbatim
-defconfig=defconfig
-;config_file=&lt;path to config file&gt;
-; For the kernel build command; required
-kernel_arch=arm64
-cross_compile=aarch64-linux-gnu-
-jobs=40
-; vbutil_kernel arguments, optional
-vbutil_kernel=<b>/home/seanpaul/s/cros/chroot/usr/bin/vbutil_kernel</b>
-keyblock=<b>resources/gru-kevin/kernel.keyblock</b>
-data_key=<b>resources/gru-kevin/kernel_data_key.vbprivk</b>
-cmdline=console=tty1 console=ttyS2,115200n8 earlyprintk=ttyS2,115200n8 init=/sbin/init root=PARTUUID=%U/PARTNROFF=1 rootwait rw noinitrd
-vbutil_arch=aarch64
-; mkimage arguments, optional
-mkimage=<b>/home/seanpaul/s/cros/chroot/usr/bin/mkimage</b>
-its_file=<b>resources/gru-kevin/rk3399-gru-kevin.its</b>
-; post-build options
-install_modules=yes
-install_dtbs=yes
-generate_htmldocs=no
-</code></pre>
-
-Simply run the build_kernel.py script from the kernel root directory to build
-and flash your kernel. If all goes well, you should now have a USB key that will
-boot a mainline kernel with Arch Linux rootfs. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/measuring-boot-time-performance/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/measuring-boot-time-performance/index.md
deleted file mode 100644
index 0e519227e96..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/measuring-boot-time-performance/index.md
+++ /dev/null
@@ -1,311 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: measuring-boot-time-performance
-title: Tools for Measuring Boot Time Performance
----
-
-This is a short summary of selected tools for measuring boot time performance.
-The `bootperf` command is used to run boot time performance tests on a target
-device. The `showbootdata` command can display average results from previous
-runs of `bootperf`. The `bootstat_summary` command computes and displays timings
-from a single boot.
-
-Requirements for bootperf
-
-### As of January, 2021, the `bootperf` wrapper uses tast instead of `test_that` (autotest). In any case, one is required to build a test image, put the target test device into developer mode, and install the test image on the targeted Chrome OS device. Once the test image is installed, attach the device to a wired ethernet network and obtain the IP address by clicking on the network selection icon in the status box with the battery status indicator.
-
-### Verified boot and performance
-
-A word of warning about verified boot: If `build_image` is invoked with the
-`--noenable_rootfs_verification` option, this will substantially impact measured
-boot time: The option measurably speeds up boot. To do a fair, apples-to-apples
-comparison of two images, *one must build both images with the same setting of
-the option*.
-
-Also, the performance results observed with verification off are not comparable
-to when verification is on, and vice-versa. The Chromium/Chrome OS boot time
-requirements generally only apply to systems with root verification enabled.
-**Claims a change makes things faster, or slower, or has no impact are NOT
-proven until those changes are tested with root verification enabled and
-compared to the same build version without those changes.**
-
-Last tip: developer mode has a boot delay and beeps on each boot. To quietly
-boot with a much shorter "developer screen" pause, set GBB flags to 0x39. On
-most platforms (e.g. not on sarien) this can be done with:
-
-```none
-localhost ~ # /usr/share/vboot/bin/set_gbb_flags.sh 0x39
-```
-
-### What Constitutes a "Significant" Change
-
-Statistically, the boot time performance numbers tend to have a high variance
-across runs. Moreover, small changes can't be perceived by ordinary human users.
-To claim that a particular change in performance is good (or bad), one generally
-needs the following:
-
-* The "before" and "after" test samples should both include at least
- 50 cycles.
-* The "before" and "after" results should show a change of at least
- 0.1 seconds (100 ms) to the kernel to login screen time. Changes
- just to intermediate phases don't count.
-
-Changes that don't reach this threshold can be considered performance neutral.
-For changes clearly below the threshold, focus instead on software engineering
-questions such as "will it fix a bug?", or "will it make the code easier to
-maintain?".
-
-An example with bootperf
-
-### Running the test
-
-The `bootperf` command is run from inside the Chromium OS chroot environment;
-run `cros_sdk `before using the script. The command should be on the default
-PATH inside the chroot.
-
-```none
-(cros-chroot) ~/trunk/src/scripts $ bootperf -o ~/bootdata/bootperf.sample 172.22.75.70 2
-16:34:58 - /home/jrbarnette/bootdata/bootperf.sample/run.000/log.txt
-16:40:18 - /home/jrbarnette/bootdata/bootperf.sample/run.001/log.txt
-16:45:23
-(cros-chroot) ~/trunk/src/scripts $ 
-```
-
-In the example above, the `-o` option specifies a directory where the test
-results will be stored. If the directory doesn't exist, it will be created. The
-first argument is the IP address of the target device; the second argument is
-the number of test runs to execute.
-
-Each test iteration will reboot the target device 10 times. One can expect
-autotest to spend about 30 to 60 seconds per boot cycle, or 5-10 minutes per
-iteration.
-
-### Looking at results
-
-After running `bootperf`, use the `showbootdata` command to display the results
-in a usable form. The `showbootdata` command can be run from in- or outside of
-the chroot; this example shows it from inside.
-
-```none
-(cros-chroot) ~/trunk/src/scripts $ showbootdata ~/bootdata/bootperf.sample
-(on 20 cycles):
- time  s%     dt  s%  event
- 2311  0%  +2311  0%  startup
- 2587  1%   +276  5%  startup_done
- 4420  1%  +1833  2%  x_started
- 4464  1%    +44 11%  chrome_exec
- 4482  1%    +18 41%  chrome_main
- 5284  1%   +802  2%  login
- 6207  9%   +923 60%  network
-(cros-chroot) ~/trunk/src/scripts $ 
-```
-
-The output shows these columns:
-
-* Average total time in milliseconds
-* Sample standard deviation of the total time as a percentage of the
- average
-* The average time difference between the current line and the
- previous line's total
-* Sample standard deviation of the differences (over all boot
- iterations) between the current and previous lines, as a percent of
- the average
-* The name of the event (point in boot) at which the statistic was
- measured
-
-The events listed in the output correspond to particular points in source code
-where sample data is taken. The samples record accumulated time since kernel
-startup; they don't include time spent in the firmware. The events correspond to
-the following points in boot:
-
-* **startup**: This event marks the beginning of the
- `chromeos_startup` script. This script is triggered by the `startup`
- event, which is the first event emitted by `/sbin/init at boot. This
- timestamp represents (roughly) the moment when the system first
- starts running user processes.`
-* **startup_done**: This marks the point when `chromeos_startup`
- finishes running. This is roughly the moment of the `started
- boot-services` event.
-* **x_started**: This marks the point in `session_manager_setup.sh`
- when the X server has completed initialization, and is ready to
- accept requests. This is also the point at which `session_manager`
- starts running.
-* **chrome_exec**: This marks the point when `session_manager` starts
- the chrome browser.
-* **chrome_main**: This marks a point early in Chrome initialization,
- after starting `main()`.
-* **login**: This marks completion of the `boot-complete` upstart job,
- which is triggered when the chrome browser displays the login
- screen.
-* **network**: This marks the point when `shill` records that a
- default network route has been added.
-
-### Other summaries
-
-The boot performance tests gather more than just boot time data from kernel
-startup. The `-k` option to `showbootdata` can be used to display various sets
-of Autotest keyvals for the test:
-
-* `-k boot` (the default) shows boot time statistics measured from
- kernel startup.
-* `-k disk` shows disk read statistics (in millions of bytes) measured
- from kernel startup.
-* `-k firmware` shows firmware timings measured from power on.
-* `-k reboot` shows boot time statistics measured from the start of
- the shutdown prior to boot.
-
-Below is an example with `-k reboot`:
-
-```none
-(cros-chroot) ~/trunk/src/scripts $ showbootdata -k reboot ~/bootdata/bootperf.sample
-(on 20 cycles):
- diskrd  s%    delta  s%  event
-   3569 19%    +3569 19%  shutdown
-   4481 15%     +912  1%  firmware
-   6791 10%    +2310  0%  startup
-   8945  8%    +2154  1%  chrome_exec
-   9765  7%     +820  2%  login
-```
-
-As with `-k boot`, the times are measured in milliseconds. The events correspond
-to the following points in the reboot sequence:
-
-* **shutdown**: This marks the end of shutdown, when the system hands
- control back to the firmware to request reboot.
-* **firmware**: This marks the end of firmware startup and kernel
- decompression, when the kernel begins initialization.
-* **startup**, **chrome_exec**, **login**: These are the same as the
- boot time events described above.
-
-### Raw results
-
-To process the data with custom scripts, raw results can be extracted using the
-`-r` option to `showbootdata.`
-
-```none
-(cros-chroot) ~/trunk/src/scripts $ showbootdata -r ~/bootdata/bootperf.sample
-  0  2310  2560  4420  4470  4490  5290  6070
-  1  2310  2580  4370  4420  4440  5250  6070
-  2  2330  2600  4480  4520  4550  5360  6060
-  3  2320  2610  4430  4480  4490  5270  6350
-  4  2310  2600  4390  4440  4450  5230  6050
-  5  2310  2580  4430  4470  4490  5280  6070
-  6  2290  2550  4350  4400  4410  5220  6040
-  7  2320  2590  4430  4470  4490  5300  6060
-  8  2320  2620  4420  4460  4480  5270  6090
-  9  2320  2590  4450  4500  4510  5330  6050
- 10  2310  2600  4440  4480  4490  5330  6050
- 11  2300  2590  4400  4450  4460  5260  6100
- 12  2310  2580  4430  4470  4480  5290  6130
- 13  2300  2570  4380  4420  4440  5230  6120
- 14  2310  2580  4440  4480  4500  5290  6050
- 15  2320  2600  4400  4450  4460  5260  8510
- 16  2310  2570  4430  4480  4500  5300  6090
- 17  2290  2570  4410  4450  4470  5260  6060
- 18  2310  2590  4450  4490  4520  5350  6040
- 19  2310  2600  4440  4480  4510  5310  6070
-(cros-chroot) ~/trunk/src/scripts $ 
-```
-
-The first column is the iteration number; the remaining columns correspond to
-the time sampled at the corresponding event. In this example there were twenty
-boot time data points, so there are twenty lines of output. Note that the event
-names (and order) are implicit.
-
-Data displayed can be restricted to selected events using the `-e` option.
-
-```none
-(cros-chroot) ~/trunk/src/scripts $ showbootdata -e startup,chrome_exec,login ~/bootdata/bootperf.sample
-(on 20 cycles):
- time  s%     dt  s%  event
- 2311  0%  +2311  0%  startup
- 4464  1%  +2153  1%  chrome_exec
- 5284  1%   +820  2%  login
-```
-
-## Using bootstat_summary
-
-The `bootstat_summary` command is a device-resident command used to show the
-timings of events since the last boot. The command is different from `bootperf`
-and `showbootdata` in that it is run on the target device, and it can't show an
-average across multiple boots. The command is present in all images; a test
-image is not required to use the command.
-
-Here's a sample:
-
-```none
-chronos@localhost ~ $ bootstat_summary
- time %cpu    dt  %dt  event
- 1060  22%  1060  22%  pre-startup
- 1390  37%   330  86%  post-startup
- 3260  72%  1870  97%  x-started
- 3370  72%   110  89%  chrome-exec
- 4090  76%   720  92%  chrome-main
- 5620  65%  1530  37%  login-prompt-ready
- 6460  64%   840  57%  network-ethernet-configuration
- 6490  64%    30  50%  network-ethernet-ready
- 6500  64%    10  50%  network-ethernet-online
- 6540  64%    40  56%  network-ethernet-ready
- 6550  64%    10  75%  network-ethernet-online
- 8310  60%  1760  43%  login-prompt-visible
- 8340  60%    30  83%  boot-complete
-chronos@localhost ~ $                                                                                                                                                                          
-```
-
-The listed events include the events reported in `showbootdata` (using slightly
-different names), plus some additional events. The meaning of the columns is
-covered below:
-
-* `time`: Timestamp for the event, measured in milliseconds since
- boot.
-* `%cpu`: Total CPU utilization since boot.
-* `dt`: Time in milliseconds since the previous event
-* `%dt`: CPU utilization in the interval since the previous event.
-* `event`: The name of the event.
-
-The events reported in `showbootdata` are a subset of the events reported by
-`bootstat_summary`. Here's the correspondence between the two:
-
-<table>
-<tr>
-<td> `bootstat_summary`</td>
-<td> `showbootdata`</td>
-</tr>
-<tr>
-<td> pre-startup</td>
-<td>startup</td>
-</tr>
-<tr>
-<td>post-startup</td>
-<td>startup_done</td>
-</tr>
-<tr>
-<td>x-started</td>
-<td>x_started</td>
-</tr>
-<tr>
-<td>chrome-exec</td>
-<td>chrome_exec </td>
-</tr>
-<tr>
-<td>chrome-main</td>
-<td>chrome_main </td>
-</tr>
-<tr>
-<td>boot-complete</td>
-<td>login</td>
-</tr>
-<tr>
-<td>network-ethernet-ready</td>
-<td>network </td>
-</tr>
-</table>
-
-N.B. The CPU utilization values can be inaccurate for short intervals (less than
-a few hundred milliseconds). In some cases, one may even see negative
-utilization. This is a limitation in the underlying kernel code that produces
-the statistics. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/modemmanager/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/modemmanager/index.md
deleted file mode 100644
index 8efe1eaa941..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/modemmanager/index.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: modemmanager
-title: ModemManager care and feeding
----
-
-Updating modemmanager-next from upstream. ModemManager is an actively-developed
-project, and we're currently tracking their git master and working with the
-upstream team on new features. As such, we need to integrate code from upstream
-with some regularity.
-
-Setup: Have a repo set up as follows:
-
-Check out upstream:
-
-$ git clone git://anongit.freedesktop.org/ModemManager/ModemManager
-
-Add the ChromiumOS repo as a remote:
-
-$ git remote add chromiumos
-https://chromium.googlesource.com/chromiumos/third_party/modemmanager-next.git
-
-This repo can be reused for multiple updates.
-
-Each time you want to update from upstream:
-
-$ git fetch
-
-$ git co origin/master
-
-$ git co -b merge-${DATE} # the branch name is arbitrary, I found this pattern
-handy
-
-$ git fetch chromiumos
-
-$ git merge chromiumos/master
-
-Resolve any conflicts.
-
-Test that the new source compiles and works. (I generally did this by
-
-moving aside the src/third-party/modemmanager-next directory and
-
-moving this working repository into its place).
-
-Test that dependencies (currently, Shill) compile and work, since
-
-they're sensitive to the MM DBus API.
-
-Push to the chromiumos repo (upstream branch and master)
-
-$ git push chromiumos origin/master:refs/heads/upstream
-
-$ git push chromiumos merge-${DATE}:refs/heads/master \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/network-based-development/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/network-based-development/index.md
deleted file mode 100644
index bc553d776b3..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/network-based-development/index.md
+++ /dev/null
@@ -1,723 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: network-based-development
-title: Network-based Development
----
-
-## FIXME: Most of the instructions below seem to apply only to ancient boards running U-Boot.
-
-## Motivation
-
-\[If you are familiar with/sold on network-based development you can skip this
-introduction.\]
-Development with a target device, where software is built on a separate host, is
-quite different from host-based development. Perhaps the biggest problem is that
-the host and target have different filesystems. The host filesystem is close to
-you, easy to interact with, large, fast and always available. The target
-filesystem is typically inaccessible from your host, has poor tools, is small,
-pretty slow and only exists when the target is running.
-Common problems are:
-
-* getting a new kernel onto your target;
-* changing kernel parameters (kernel command line);
-* updating the root filesystem on your target;
-* installing into your target a new version of a software package you
- are working on;
-* using a GUI debugger on the host to debug software on the target;
-* accessing host data files on your target;
-* writing to log files on your host from your target.
-
-Many ad-hoc solutions are available for the above. You can use a USB stick or SD
-card to transport the kernel or a new root filesystem. You can change kernel
-parameters by rebuilding the kernel. If you have a network available you can use
-the scp command to copy over a program to run, copy log and data files around,
-etc. You can even use sshfs to run a filesystem over the network.
-These problems are worse when you want to have a lab full of targets all doing
-similar things. In this case each board must be reconfigured using an SD card
-and manual intervention when a kernel update is required, or a log file must be
-pulled off. In fact, anything which exists on the target device is something
-that might be out of date, something to check, or something that will make that
-target different in undesirable ways.
-In short it is desirable to keep as little as possible on the target device. If
-a network is available at all stages of the boot process, you can use that
-instead of the filesystem. At the minimum you need to identify the target, so it
-needs a name and perhaps a serial number. Everything else can be loaded from an
-attached network.
-Common objections to using a network, compared to an SD card say, are:
-
-* "But it is slower than having local storage in the target." Network
- speed is typically 10MB/s and can be faster. You should take account
- of the time spent copying onto the SD card as well as the time the
- target takes copying it off.
-* "But it makes my target boot process different from the way it will
- actually boot in the field." True, although you can easily test it,
- and for most testing purposes (with the notable exception of
- benchmarking) the boot device seldom affects operation.
-* "But I never change my kernel / root disk and never need to change
- files anyway." You are probably not doing development. Why are you
- reading this page?
-* "But I can never be sure what the target has actually picked up."
- You can check the kernel header, and touch a file visible to the
- target which you can check.
-* "But my target doesn't have a real time clock." Most ARM SOCs have a
- serviceable one built in, but in any case you don't really need one.
- If you need to, just set the time in a startup script using an ntp
- utility or similar.
-* "But I don't have a network." You should have thought of that before
- you developed your device. Ethernet chips and connectors are cheap
- enough that they should be on your board for debug reasons alone.
- There is a valuable difference between development and production
- hardware. Failing that, perhaps a USB Ethernet adapter will help?
-* "But it is too difficult to set up; I don't understand NFS; the
- network around here is unreliable; I am allergic to NFS servers;
- tftp is insecure; I don't have a spare network port; it feels
- unnatural; I have an SD card for this purpose; my parents didn't use
- a network for embedded development when I was growing up; etc." You
- will need to work through these issues yourself.
-
-## Chromium OS Approach
-
-(ARM only, for now).
-Our approach to network-based development is:
-
-* U-Boot is flashed into the board as a starting point
-* U-Boot environment variables specify boot method, including network
- servers
-* DHCP is used to obtain an IP address
-* TFTP is used to read the kernel
-* NFS Root is used to provide the root disk
-
-The remainder of this page shows how to set this up.
-
-## U-Boot on the board
-
-Chromium OS has several variants of U-Boot for each board, one of which is **the
-developer variant**. The developer variant has a number of additional features
-useful to devs: network support, an expanded command set and a saved
-environment.
-First, make sure that you have flashed the developer U-Boot onto your board. For
-more information see the [U-Boot page](/developers/u-boot).
-
-### Supported USB Ethernet Adapters / USB Ethernet Dongles
-
-Only the ASIX AX88772 chip is supported at present. The following supported
-adapters are shown as {vendor, device}. Type `lsusb`, on a machine running
-Linux, with the adapter attached to see the vendor and device numbers for your
-adapter.
-` { 0x05ac, 0x1402 }, /* Apple USB Ethernet Adapter */`
-` { 0x07d1, 0x3c05 }, /* D-Link DUB-E100 H/W Ver B1 */`
-` { 0x0b95, 0x772a }, /* Cables-to-Go USB Ethernet Adapter */ `TODO(dianders):
-This didn't work for me.
-` { 0x0b95, 0x7720 }, /* Trendnet TU2-ET100 V3.0R */`
-` { 0x0b95, 0x1720 }, /* SMC */`
-` { 0x0db0, 0xa877 }, /* MSI - ASIX 88772a */`
-` { 0x13b1, 0x0018 }, /* Linksys 200M v2.1 */`
-` { 0x1557, 0x7720 }, /* 0Q0 cable ethernet */`
-` { 0x2001, 0x3c05 }, /* DLink DUB-E100 H/W Ver B1 Alternate */`
-
-## U-Boot Environment Variables
-
-When you start the developer U-Boot for the first time it will likely complain
-that the environment is not present, and give you a default environment. Type
-`printenv` to see what it defines.
-To set your board up for full network booting you need to set the following.
-Replace the IP addresses in the following with the address of your server. In
-fact, typical U-Boot flow is to use `serverip` for all the server addresses, and
-have this obtained automatically from the DHCP server. However in many corporate
-network environments this is difficult.
-Note: It is a great idea if your DHCP server can give you the same IP address
-each time. It does this by looking at the MAC address on your board / Ethernet
-adapter. Note that you should replace `**yourUsernameHere**` with the username
-you'll be using on your host machine and **yourSerialNumberHere** with anything
-you want. You should also change the IP address to be the IP addresses of your
-servers.
-
-<pre><code>setenv serverip 172.22.73.60
-setenv tftpserverip 172.22.73.60
-setenv nfsserverip 172.22.73.60
-setenv board tegra2_seaboard
-setenv serial# <b>yourSerialNumberHere</b>
-setenv user <b>yourUsernameHere</b>
-setenv tftppath /uImage-${user}-${board}-${serial{{ '#}' }}
-saveenv
-</code></pre>
-
-Other variables are set automatically by the boot scripts:
-
-```none
-rootpath=/export/nfsroot-${user}-${board}-${serial{{ '#}' }}
-```
-
-There are two paths that your server must provide. The first is the path to your
-kernel on your tftp server, and the second is the path to your root disk on your
-NFS server. By adding the username, board and serial number it makes it possible
-for a team to share a single TFTP/NFS server.
-By default the IP address is obtained using DHCP. If you don't have a DHCP
-server you can set the environment variables directly. You will need to create
-your own boot flow which skips bootp.
-
-```none
-gatewayip=172.22.73.1
-netmask=255.255.255.0
-ipaddr=172.22.73.81
-```
-
-### U-Boot Boot Flow
-
-U-Boot starts by running an environment variable called `bootcmd`. This starts
-up USB then tries various ways of obtaining a kernel:
-
-* `dhcp_boot` - uses DHCP to get an IP address, TFTPs the kernel from
- a fixed server, then boots with NFS root from a fixed server
-* `keynfs_boot` - reads the kernel from file '/uImage' on an attached
- USB stick (first partition in ext2 format), then boots with NFS root
-* `usb_boot` - reads a developer image in standard Chromium OS format
- from a USB stick (not network boot)
-* `mmc_boot` - reads a developer image in standard Chromium OS format
- from eMMC (not network boot)
-
-The first method to succeed is used for the boot. This means that if you don't
-have a network attached, and your USB stick does not have uImage on it, then it
-will try to read a Chromium OS format image from the stick. If no stick is
-inserted, it will try to boot from internal eMMC.
-To adjust the boot flow you should create your own boot command. For example you
-might create a method that loads a kernel from partition 2 of the USB stick, so
-replacing `nfskey_boot`,. Then change the `bootcmd` so it only runs your flow
-(NOTE: you may need to paste it a little bit at a time):
-
-```none
-setenv mynfs_setup 'setenv rootpath /export/nfsroot-${user}-${board}-${serial{{ '#}' }}; run regen_net_bootargs'
-setenv mynfs_boot 'run keynfs_setup; ext2load usb 0:2 ${loadaddr} uImage; bootm ${loadaddr}'
-setenv bootcmd run mynfs_boot
-saveenv
-```
-
-## Setting up a DHCP server
-
-The DHCP server provides IP addresses to targets on your network. If you have a
-DHCP server already, skip to the end of this section to test it. Otherwise you
-will need to set one up. This is a very brief guide.
-
-```none
-sudo aptitude install dhcp3-server
-```
-
-Edit /etc/dhcp3/dhcpd.conf and add details about your subnet, including the
-range of IP addresses you want to give out and any fixed IP addresses you want
-to allocate for your targets:
-
-```none
-subnet 192.168.4.0 netmask 255.255.255.0 {
-  range 192.168.4.20 192.168.4.50;
-  option routers 192.168.4.1;
-}
-host seaboard {
-  hardware ethernet 00:23:7d:09:80:0e;
-  fixed-address seboard0;
-}
-```
-
-(you may want to put seaboard0 in your `/etc/hosts` file in this example, or you
-can use a numeric address)
-Then start up the server:
-
-```none
-/etc/init.d/dhcp3-server restart
-```
-
-If there are no errors (`tail /var/log/syslog`) you should be in business.
-
-#### Testing your DHCP server
-
-At this stage you should be able to boot your target and see it get a valid IP
-address:
-
-```none
-CrOS> usb start
-(Re)start USB...
-USB:   Tegra ehci init hccr c5008100 and hcor c5008140 hc_length 64
-Register 10011 NbrPorts 1
-USB EHCI 1.00
-scanning bus for devices... 5 USB Device(s) found
-       scanning bus for storage devices... 1 Storage Device(s) found
-       scanning bus for ethernet devices... 1 Ethernet Device(s) found
-CrOS> bootp
-Waiting for Ethernet connection... done.
-BOOTP broadcast 1
-DHCP client bound to address 172.22.73.81
-CrOS>
-```
-
-### Setting up a TFTP server
-
-The TFTP server will send a kernel to U-Boot when it asks. If you have one
-already skip to the end of this section to test it.
-
-```none
-sudo aptitude install tftpd-hpa
-```
-
-Then edit `/etc/default/tftpd-hpa` like this replacing **yourUsernameHere** with
-your own username (`echo $USER`):
-
-<pre><code>TFTP_USERNAME="<b>yourUsernameHere</b>"
-TFTP_DIRECTORY="/tftpboot"
-TFTP_ADDRESS="0.0.0.0:69"
-TFTP_OPTIONS="-v"
-</code></pre>
-
-Notes:
-
-* We remove --secure from default config, since we want to access a
- symlink that doesn't exist in the `tftpboot` directory.
-* We move from `/var/lib/tftpboot` to `/tftpboot`, since we need to
- specify full path when `--secure` isn't needed and `/tftpboot` is
- shorter.
-* We don't use the `tftp` username, since it can't access the kernel
- we build.
-
-Suggestions for good workflows that fix some of the above would be appreciated.
-
-Now prepare it. We want a symlink from the /tftpboot directory to you kernel, so
-the target can easily read it. Replace the filename with your user, board and
-serial. NOTE: this assumes that you've got your chromiumos source code in
-`/home/$USER/chromiumos`:
-
-<pre><code>cd /tftpboot
-sudo ln -s /home/$USER/chromiumos/chroot/build/tegra2_seaboard/boot/vmlinux.uimg uImage-$USER-tegra2_seaboard-<b>yourSerialNumberHere</b>
-sudo restart tftpd-hpa
-</code></pre>
-
-#### Testing your TFTP server
-
-Ensure that you have an IP address (as shown in the DHCP section above). Then
-this should read in the kernel (assuming you've built it):
-
-```none
-tftpboot ${loadaddr} ${tftpserverip}:/tftpboot/uImage-${user}-${board}-${serial{{ '#}' }}
-```
-
-You'll see this output if things are working well:
-
-```none
-Waiting for Ethernet connection... done.
-Using asx0 device
-TFTP from server 172.22.73.60; our IP address is 172.22.73.81
-Filename '/tftpboot/uImage-yourUsernameHere-seaboard-yourSerialNumberHere'.
-Load address: 0x40c000
-Loading: #################################################################
-     #################################################################
-     #################################################################
-     ###############################################
-done
-Bytes transferred = 3545596 (3619fc hex)
-```
-
-If you have got this far, congratulations! You are about half way there: the
-target is reading a kernel directly from your machine and is ready to boot it.
-Now we need to get the root disk organized.
-
-## NFS Root
-
-NFS root is a simple way to keep your target's root disk be kept on the network.
-
-Advantages:
-
-* You can make a change anywhere in the filesystem from your host, and
- the target see it almost immediately and without any special manual
- transfer
-* You can make use of the effectively infinite disc space of most
- hosts (great for debug builds)
-* Build / debug turnaround time is quick since there is no need to
- transfer the image via USB. (But see also the dev_server)
-* You can set things up with symlinks so that the host and target can
- use the same filepaths
-
-Disadvantages:
-
-* It takes a bit of setup
-* Slower than a local disc unless you have a fast Gigabit Ethernet
- (non-USB)
-
-Linux requires a root filesystem which it mounts immediately after booting. If
-you have a suitable network device attached to the client you can use an NFS
-server to provide this root filesystem. This means that your client can have
-full access to your server filesystem, thus removing the need to manually move
-files from the host to the client for execution, and back again for editing /
-viewing.
-You can find information about setting up NFS root
-[here](https://wiki.archlinux.org/index.php/NFSv4). These instructions replicate
-much of that, and generally follow the same pattern but are more specific to
-Chromium OS. Note that you can use NFSv3 instead but here we will use NFSv4 as
-it has additional features.
-The steps you need to take are:
-
-* Set up an NFS server on your host, or use one that you already have
-* Build a kernel with suitable filesystem and driver options
-* Set up your boot loader to tell the kernel to use an NFS root
-
-### Setting up an NFS server
-
-First, install the NFS server package (these instructions for Ubuntu 10.04
-Lucid). This enables the NFS server built into your kernel. When it starts you
-may notice that a number of new modules have been loaded into your kernel (nfsd,
-exportfs, lockd, etc.)
-
-```none
-sudo aptitude install nfs-kernel-server
-```
-
-The server needs to know which directories you want to 'export' for clients.
-This is specified in the `/etc/exports` file. Edit this (`sudo nano
-/etc/exports` or similar) to look something like this (changing IP subnets as
-appropriate):
-
-<pre><code>/export            172.16.0.0/16(rw,fsid=0,no_subtree_check,async)
-/export/nfsroot-<b>yourUsernameHere</b>-tegra2_seaboard-<b>yourSerialNumberHere</b>    172.16.0.0/16(rw,nohide,no_subtree_check,async,no_root_squash)
-</code></pre>
-
-The first entry sets the base of the NFS exports. Every directory which is
-exported must be accessible from within `/export`. The second entry is the
-nfsroot directory which will contain your root filesystem. This is the directory
-that the client will see when it mounts the NFS root. The IP address should be
-changed to match your local setup - it sets the range of IP addresses which are
-allowed to access this mount on the server. For example it might be
-`192.168.1.0/24`.
-A number of options are provided, briefly:
-
-* **rw** - the target will have both read and write access. You can
- also use ro for readonly but the system will not boot with a
- read-only root filesystem (without a bit of work!)
-* **fsid=0** - tells NFS that this is the root of all exported
- filesystems
-* **no_subtree_check** disables checking for accesses outside the
- exported portion of a filesystem. This speeds up and simplifies
- things for the client and server.
-* **async** - requests are acknowledged before data is actually
- written. For example if the client writes to a file, the server will
- respond that the write has completed, and then continue in the
- background to actually do the write, perhaps to a disc drive. This
- improves performance.
-* **no_root_squash** - the target can access files as root, with full
- unrestricted permissions. This is important for the root filesystem
- because the kernel would otherwise not have access to devices in
- /dev, log files in /var/log, etc.
-* **nohide** - tells the NFS server to show the contents of a
- directory even if it is mounted from elsewhere
-
-We now need to make the root filesystem appear in `/export/nfsroot`. Rather than
-just copy it there, we will use a 'bind mount' to paste the true location onto
-`/export/nfsroot`. First we need to unpack a suitable image (see the build
-instructions for how to build an image).
-Let's assume that you have your Chromium trunk directory as `~/cosarm` and you
-are using a `tegra2_seaboard` build:
-
-```none
-# go to the directory with the latest build
-cd ~/cosarm/src/build/images/tegra2_seaboard/latest
-# mount it into /tmp/m
-~/cosarm/src/scripts/mount_gpt_image.sh -f . -i chromiumos_test_image.bin
-# copy out the contents of the image
-sudo cp -a /tmp/m nfsroot
-# unmount the image from /tmp/m
-~/cosarm/src/scripts/mount_gpt_image.sh -u
-```
-
-This will put a full copy of the build image root disc into
-`~/cosarm/src/build/images/tegra2_seaboard/latest/nfsroot`. Now we need to make
-it appear in `/export/nfsroot`. Edit your `/etc/fstab` file with the full path:
-
-<pre><code>/full/path/to/cosarm/src/build/images/tegra2_seaboard/latest/nfsroot /export/nfsroot-<b>yourUsernameHere</b>-tegra2_seaboard-<b>yourSerialNumberHere</b>    none    bind    0 0
-</code></pre>
-
-Note this must appear all on one line and you can use tabs or spaces between
-fields. See `man fstab` for more information.
-
-You will need to create an /export/nfsroot directory:
-
-<pre><code>$ sudo mkdir -p /export/nfsroot-<b>yourUsernameHere</b>-tegra2_seaboard-<b>yourSerialNumberHere</b>
-</code></pre>
-
-This will be activated automatically when your server reboots, but since it is
-already running, ask it to mount this now. After the mount you will see that the
-root filesystem has appeared at `/export/nfsroot` as desired.
-
-<pre><code>$ sudo mount /export/nfsroot-<b>yourUsernameHere</b>-tegra2_seaboard-<b>yourSerialNumberHere</b>
-$ ls /export/nfsroot-<b>yourUsernameHere</b>-tegra2_seaboard-<b>yourSerialNumberHere</b>/
-bin   dev  home  lost+found  mnt  postinst  root  share  tmp     usr
-boot  etc  lib   media       opt  proc      sbin  sys    u-boot  var
-$
-</code></pre>
-
-Check that your `/etc/idmapd.conf` is correct. You can leave the domain as is if
-you like. If you change it, be careful that the same domain is used on the
-client side (not relevant for NFS root though). This file sets up mapping of
-user and group names between the client and server and is a key benefit of NFSv4
-over NFSv3.
-
-```none
-[General]
-Verbosity = 0
-Pipefs-Directory = /var/lib/nfs/rpc_pipefs
-Domain = local.domain.edu
-[Mapping]
-Nobody-User = nobody
-Nobody-Group = nogroup
-```
-
-Also check your portmap settings. If this is wrong then the boot will fail with
-a message like 'VFS: Unable to mount root fs via NFS, trying floppy.'. The
-settings are in `/etc/defaults/portmap`. Make sure it is set to provide the
-service to other machines. If your options are set to "-i 127.0.0.1" then it
-will only work locally (not a useful server!). Change it to `OPTIONS=""` and
-then 'restart portmap'. You can test this:
-
-```none
-$ rpcinfo -p 172.22.73.60    # use hostname or IP address of your NFS server
-rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
-```
-
-If it is working you will see something like:
-
-```none
-$ rpcinfo -p 172.22.73.60 |grep nfs
-    100003    2   udp   2049  nfs
-    100003    3   udp   2049  nfs
-    100003    4   udp   2049  nfs
-    100003    2   tcp   2049  nfs
-    100003    3   tcp   2049  nfs
-    100003    4   tcp   2049  nfs
-```
-
-Restart the NFS kernel server if you are superstitious:
-
-```none
-$ sudo /etc/init.d/nfs-kernel-server restart
- * Stopping NFS kernel daemon                                            [ OK ]
- * Unexporting directories for NFS kernel daemon...                      [ OK ]
- * Exporting directories for NFS kernel daemon...                        [ OK ]
- * Starting NFS kernel daemon                                            [ OK ]
-```
-
-Test your nfs server setup. This example just mounts the nfsroot on the same
-machine, but it is useful to do this from another machine is possible (if you
-can, use your server host name instead of localhost).
-
-```none
-$ sudo mkdir -p /tmp/nfs4
-$ sudo mount -t nfs4 localhost:/nfsroot /tmp/nfs4
-$ ls /tmp/nfs4
-bin  boot  build  dev  etc  home  lib  lost+found  media  mnt  opt  postinst  proc  root  sbin  share  sys  tmp  usr  var
-$ sudo umount /tmp/nfs4
-```
-
-Finally, the standard firewall setup in Chromium OS does not permit NFS. You may
-wish to simply disable the firewall - the
-`/export/nfsroot-**yourUsernameHere**-tegra2_seaboard-**yourSerialNumberHere**/etc/init/iptables.conf`
-file should be changed to do this. At the top, change the `start on` line to
-`start on never`. If you don't do this you will likely boot to a login prompt,
-but then you will see 'NFS server not responding' messages once the firewall
-kicks in.
-
-### Build a suitable kernel
-
-You can build an NFS-enabled kernel for Chromium OS with something like:
-
-```none
-USE=nfs emerge-tegra2_seaboard chromeos-kernel
-```
-
-This puts a kernel in /build/&lt;board&gt;/boot/vmlinux.uimg.
-
-TODO(dianders): Maybe this is what we want?
-
-```none
-USE=nfs FEATURES="noclean" cros_workon_make --board=${BOARD} --install kernel
-```
-
-#### Longer Explanation
-
-There are quite a few options that you need to enable in the kernel to support
-NFS root. First you need to make sure that a suitable network driver is compiled
-in, and secondly you need to enable all the network filesystem options. The
-following list for a USB network adapter setup gives you an idea of what is
-required. Some of the important options are:
-
-* CONFIG_USB_USBNET - enables the USB network subsystem
-* CONFIG_NET_AX8817X - enables the particular USB driver. This is a
- Cisco / Linksys 1000Mbit USB 2.0 Ethernet dongle
-* CONFIG_NETWORK_FILESYSTEMS - enables network filesystem support
-* CONFIG_NFS_COMMON, CONFIG_NFS_FS - enable NFS client in kernel
-* CONFIG_ROOT_NFS - enable NFS root function
-* CONFIG_IP_PNP, CONFIG_IP_PNP_DHCP - required if parameter ip=dhcp is
- passed to kernel
-
-[See here](/chromium-os/how-tos-and-troubleshooting/kernel-configuration) for
-more information about kernel configuration.
-
-Note: some of the options below are required for NFS root, some for NFS mounting
-and some for NFS serving.
-
-```none
-chromeos/config/armel/config.flavour.chromeos-tegra2:
-CONFIG_USB_NET_AX8817X=y
-chromeos/config/config.common.chromeos:
-+CONFIG_DNOTIFY=y
-+CONFIG_DNS_RESOLVER=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFSD=m
-+CONFIG_NFSD_V3=y
-+CONFIG_NFSD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_USE_KERNEL_DNS=y
-+CONFIG_NFS_V3=y
-+CONFIG_NFS_V4=y
-+CONFIG_ROOT_NFS=y
-+CONFIG_RPCSEC_GSS_KRB5=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+CONFIG_USB_USBNET=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-```
-
-## Putting it all together
-
-You are now ready to try out your new kernel. Just start up your target and type
-'boot'.
-A partial boot trace is shown below to show the sequence of events:
-
-```none
-U-Boot 2010.09-00199-g4c814f0-dirty (Feb 14 2011 - 16:33:28)
-TEGRA2
-Board:   Tegra2 Seaboard.developer
-DRAM:  1 GiB
-NAND:  0 MiB
-SF: Detected W25Q16B with page size 256, total 2 MiB
-In:    tegra-kbc
-Out:   lcd
-Err:   lcd
-Net:   No ethernet found.
-Hit any key to stop autoboot:  2
-CrOS> boot
-(Re)start USB...
-USB:   Tegra ehci init hccr c5008100 and hcor c5008140 hc_length 64
-Register 10011 NbrPorts 1
-USB EHCI 1.00
-scanning bus for devices... 5 USB Device(s) found
-       scanning bus for storage devices... 1 Storage Device(s) found
-       scanning bus for ethernet devices... 1 Ethernet Device(s) found
-Waiting for Ethernet connection... done.
-BOOTP broadcast 1
-BOOTP broadcast 2
-*** Unhandled DHCP Option in OFFER/ACK: 208
-*** Unhandled DHCP Option in OFFER/ACK: 208
-DHCP client bound to address 172.22.73.81
-Waiting for Ethernet connection... done.
-Using asx0 device
-TFTP from server 172.22.73.60; our IP address is 172.22.73.81
-Filename '/tftpboot/uImage-sjg-seaboard-261347'.
-Load address: 0x40c000
-Loading: #################################################################
-     #################################################################
-     #################################################################
-     ###############################################
-done
-Bytes transferred = 3545596 (3619fc hex)
-## Booting kernel from Legacy Image at 0040c000 ...
-   Image Name:   Linux-2.6.37-00890-g3506cb6c-dir
-   Image Type:   ARM Linux Kernel Image (uncompressed)
-   Data Size:    3545532 Bytes = 3.4 MiB
-   Load Address: 00008000
-   Entry Point:  00008000
-   Verifying Checksum ... OK
-   Loading Kernel Image ... OK
-OK
-Starting kernel ...
-Uncompressing Linux... done, booting the kernel.
-[    0.000000] Initializing cgroup subsys cpuset
-[    0.000000] Initializing cgroup subsys cpu
-[    0.000000] Linux version 2.6.37-00890-g3506cb6c-dirty (sjg@kiwi.mtv.corp.google.com) (gcc version 4.4.3 (Gentoo Hardened 4.4.3-r4 p1.2, pie-0.4.1) ) #25 SMP PREEMPT Mon Feb 14 14:16:06 PST 2011
-[    0.000000] CPU: ARMv7 Processor [411fc090] revision 0 (ARMv7), cr=10c53c7f
-[    0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
-[    0.000000] Machine: seaboard
-[    0.000000] Ignoring unrecognised tag 0x54410008
-[    0.000000] Memory policy: ECC disabled, Data cache writealloc
-[    0.000000] PERCPU: Embedded 7 pages/cpu @c0f8a000 s7264 r8192 d13216 u32768
-[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 227328
-[    0.000000] Kernel command line: console=ttyS0,115200n8 lp0_vec=0x2000@0x1C406000 mem=384M@0M nvmem=128M@384M mem=512M@512M noinitrd dev=/dev/nfs4 rw nfsroot=172.22.73.60:/export/nfsroot-sjg-seaboard-261347 ip=dhcp
-[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
-...
-[   24.249981] usb 3-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-[   24.249991] usb 3-1.1: Product: AX88x72A
-[   24.249998] usb 3-1.1: Manufacturer: ASIX Elec. Corp.
-[   24.250005] usb 3-1.1: SerialNumber: 000001
-[   25.196440] asix 3-1.1:1.0: eth0: register 'asix' at usb-tegra-ehci.2-1.1, ASIX AX88772 USB 2.0 Ethernet, 68:7f:74:9f:f6:f2
-[   25.303359] usb 3-1.2: new high speed USB device using tegra-ehci and address 4
-...
-[   25.845564] eth0: link down
-[   25.854603] ADDRCONF(NETDEV_UP): eth0: link is not ready
-...
-[   26.863238] Sending DHCP requests .
-[   27.198754] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
-[   27.206441] eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
-[   29.223214] ., OK
-[   29.283223] IP-Config: Got DHCP answer from 172.24.11.52, my address is 172.22.73.81
-[   29.292032] IP-Config: Complete:
-[   29.295104]      device=eth0, addr=172.22.73.81, mask=255.255.252.0, gw=172.22.75.254,
-[   29.302952]      host=seaboard0.mtv.corp.google.com, domain=mtv.corp.google.com, nis-domain=(none),
-[   29.312000]      bootserver=172.24.11.52, rootserver=172.22.73.60, rootpath=
-[   29.319579] mount nfs, dev=172.22.73.60:/export/nfsroot-sjg-seaboard-261347, flags=32768, root_data=nolock,addr=172.22.73.60VFS: Mounted root (nfs filesystem) on device 0:16.
-[   29.345192] mount nfs done
-[   29.348171] devtmpfs: mounted
-[   29.351372] Freeing init memory: 268K
-[   29.357144] Not activating Mandatory Access Control now since /sbin/tomoyo-init doesn't exist.
-[   29.956410] mount used greatest stack depth: 4884 bytes left
-[   30.736770] ply-image used greatest stack depth: 4668 bytes left
-[   31.070665] rm used greatest stack depth: 4620 bytes left
-[   31.227262] mknod used greatest stack depth: 4388 bytes left
-[   31.428835] chown used greatest stack depth: 4372 bytes left
-[   31.673332] chown used greatest stack depth: 4292 bytes left
-[   31.755995] unknown ioctl code
-[   31.759218] NvRmIoctls_NvRmFbControl: deprecated
-NVRM_DAEMON(1261): skipping Audi[   31.779495] nvrm_notifier_store: nvrm_daemon=801
-oFx initialization
-[   31.792064] nvrm_notifier_show: blocking
-[   31.852343] mkdir used greatest stack depth: 3956 bytes left
-udevd[837]: unknown key 'HOTPLUG' in /etc/udev/rules.d/99-monitor-hotplug.rules:2
-[   32.327921] udevd (853): /proc/853/oom_adj is deprecated, please use /proc/853/oom_score_adj instead.
-Developer Console
-To return to the browser, press:
-  [ Ctrl ] and [ Alt ] and [ F1 ]
-To use this console, the developer mode switch must be engaged.
-Doing so will destroy any saved data on the system.
-In developer mode, it is possible to
-- login and sudo as user 'chronos'
-- require a password for sudo and login(*)
-- disable power management behavior (screen dimming):
-  sudo initctl stop powerd
-- install your own operating system image!
-* To set a password for 'chronos', run the following as root:
-echo "chronos:$(openssl passwd -1)" > /mnt/stateful_partition/etc/devmode.passwd
-Have fun and send patches!
-localhost login:
-```
-
-TODO: Troubleshooting?
-
-### NFS Caveats
-
-Some things to be aware of:
-
-* If your network goes down, so does your mount. If you are using NFS
- root on eth0, then typing `ifconfig eth0 down` will lock your target
- since the root filesystem goes away. Recovery is via a reboot
-* If the kernel cannot find the NFS server, or has a permissions
- problem, your kernel will not boot
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/nfs-quickstart/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/nfs-quickstart/index.md
deleted file mode 100644
index a4f9f976bc4..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/nfs-quickstart/index.md
+++ /dev/null
@@ -1,152 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: nfs-quickstart
-title: NFS-quickstart
----
-
-**Work In Progress.. (None of this is officially supported so CLs appreciated)**
-
-## Build a suitable kernel and rootfs
-
-**Option 1:** **With ./build_packages**
-
-```none
-./set_shared_user_password.sh                              #Needed only the first time in your chroot so you can login to the rootfs
-USE=nfs ./build_packages --board=${BOARD} --nowithfactory  #nowithfactory is important. If you miss it you will boot into factory installer mode
-```
-
-With this option you can do your regular cros_workon + emerge commands (and any
-optimizations like cros_workon_make etc). But you have to run the
-mod_image_for_test scripts on the /build/&lt;board&gt; dir or hand edit they
-etc/shadow files etc to login
-
-**Option 2:** **With ./quickly**
-
-(DONT USE YET - if you want incremental compiles etc. This is useful to create a
-rootfs different from /build/&lt;board&gt; if you want to mod for test etc)
-
-Quickly is a simple script (integrated ./build_packages/image) to enable
-creating a rootfs ready for NFS boot. You can cherry-pick
-<https://gerrit.chromium.org/gerrit/21579> into src/scripts . This is not a
-supported script. It contains pieces of other scripts to speed up building a
-test image for developers. If you are not comfortable with editing the script,
-use option 1 above.
-
-The advantage of using this script is
-
-1) It creates a new rootfs dir that you can hackon/delete unlike option 1 which
-reuses /build/&lt;board&gt; which is polluted with factory install hacks etc
-
-2) It runs mod_image_for_test for you so you should be running closer to a test
-image
-
-3) If you have to do any hacks to the rootfs generated feel free to update the
-./quickly script and update the CL
-
-```none
-./quickly --board=daisy --help        
-./quickly --board=daisy        #this runs build_packages and parts of mod_image_for_test
-```
-
-The output is a ChromiumOS test image in
-**../build/images/&lt;board&gt;/quickly/**. Use this as your rootfs in the NFS
-server setup if you go down this path. You will have to run your regular emerge
-commands and then run ./quickly to regenerate your rootfs again.
-
-TODO(yournamehere):./quickly will need to incrementally update the rootfs and
-emerge only packages that have been updated.
-
-## Setting up an NFS server
-
-**Step 1**: install the NFS server package (these instructions for Ubuntu 10.04
-Lucid). This enables the NFS server built into your kernel. When it starts you
-may notice that a number of new modules have been loaded into your kernel (nfsd,
-exportfs, lockd, etc.)
-
-```none
-sudo apt-get install nfs-kernel-server
-```
-
-**Step 2**:The server needs to know which directories you want to 'export' for
-clients. This is specified in the `/etc/exports` file. Edit this (`sudo vi
-/etc/exports`) to look something like this (changing IP subnets as appropriate):
-
-```none
-/home/$USER/cros_i1/chroot 172.22.0.0/16(rw,fsid=0,nohide,no_subtree_check,async)
-/home/$USER/cros_i1/chroot/build/daisy 172.22.0.0/16(rw,nohide,no_subtree_check,async,no_root_squash)
-```
-
-**Step 3**:Restart the NFS kernel server:
-
-```none
-$ sudo /etc/init.d/nfs-kernel-server restart
- * Stopping NFS kernel daemon                                            [ OK ] 
- * Unexporting directories for NFS kernel daemon...                      [ OK ] 
- * Exporting directories for NFS kernel daemon...                        [ OK ] 
- * Starting NFS kernel daemon                                            [ OK ]
-```
-
-**Step 4**:If it is working you will see something like:
-
-```none
-$ rpcinfo -p localhost |grep nfs
-    100003    2   udp   2049  nfs
-    100003    3   udp   2049  nfs
-    100003    4   udp   2049  nfs
-```
-
-**Step 5**:Test your nfs server setup. This example just mounts the nfsroot on
-the same machine, but it is useful to do this from another machine is possible
-(if you can, use your server host name instead of localhost).
-
-```none
-$ sudo mkdir -p /tmp/nfs
-$ sudo mount -t nfs localhost:/nfsroot /tmp/nfs4
-$ ls /tmp/nfs
-bin  boot  build  dev  etc  home  lib  lost+found  media  mnt  opt  postinst  proc  root  sbin  share  sys  tmp  usr  var
-$ sudo umount /tmp/nfs
-```
-
-## U-Boot
-
-Step 0: Make sure you have <https://gerrit.chromium.org/gerrit/#change,21213> in
-your uboot. It enables netboot/nfs.
-
-First, make sure that you have flashed the developer U-Boot onto your board/SD
-card (aka legacy_image.bin). For more information see the [U-Boot
-page](/developers/u-boot) (outdated and refers only to seaboard). Email
-chromium-os-dev@ if you dont have uboot on your device. When you start the
-developer U-Boot for the first time it will likely complain that the environment
-is not present, and give you a default environment. Type `printenv` to see what
-it defines.
-TODO(anush): Save it in a nice to run command. Keep in mind running dhcp will
-overwrite any serverip configuration with what is provided so we need to set
-serverip after getting a dhcp IP address.
-
-Make sure you connect to the onboard ethernet jack on Daisy NOT with a USB
-Dongle
-
-```none
-setenv ethaddr 00:1A:11:XX:XX:XX                         # recommend using the hex version of your employee id to avoid collisions TODO(XXX):resolve with real MACs
-dhcp                                                     # Get yourself a DHCP address. 
-set nfsserverip 172.22.XX.XX                             # dhcp from the step above will overwrite your serverip
-set serverip 172.22.XX.XX
-set rootpath /home/$USER/cros_i1/chroot/build/daisy      # point to quickly rootfs if you use that
-setenv bootdev_bootargs root=/dev/nfs rw nfsroot=${nfsserverip}:${rootpath} ip=dhcp noinitrd daisy nfsrootdebug; run regen_all
-nfs /home/$USER/cros_i1/chroot/build/daisy/boot/vmlinux.uimg
-bootm
-```
-
-## NFS Troubleshooting/Debugging
-
-\* If you delete and recreate your NFS root directory make sure you restart the
-NFS server
-
-\* If you dont have network connectivity, try restarting shill from the console
-(I will send out a CL to fix this)
-
-TODO(yournamehere): Add notes on using debugging chrome with an NFS root \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/openvpn-manual-setup/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/openvpn-manual-setup/index.md
deleted file mode 100644
index 0b434574585..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/openvpn-manual-setup/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: openvpn-manual-setup
-title: OpenVPN Manual Setup
----
-
-TODO: Merge this content into the Chrome OS format.
-
-This document, [OpenVPN on
-ChromeOS](https://docs.google.com/document/d/18TU22gueH5OKYHZVJ5nXuqHnk2GN6nDvfu2Hbrb4YLE/pub)
-(published Google Doc format) contains step by step instructions on getting
-customized OpenVPN client settings on ChromeOS.
-
-The first part discusses setting up an OpenVPN server (which you can skip if you
-already have one) and the second shows how to import the necessary certificates
-into your ChromeOS machine, and finally the last part sets up the network config
-settings as an ONC file which is then imported into ChromeOS.
-
-Note:
-
-* This does not require a machine to be in developer mode, and can run
- on a standard ChromeOS image.
-* Google enterprise customers may have access to easier methods of
- doing this via the ChromeOS device administration features of your
- account, where an ONC policy can be installed at sign on. These
- instructions here should work as well, but were intended for use on
- consumer (e.g. @gmail.com) google profiles. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/portage-build-faq/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/portage-build-faq/index.md
deleted file mode 100644
index 909a7d5c6d0..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/portage-build-faq/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: portage-build-faq
-title: EBuild FAQ
----
-
-**This page has moved to
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/portage/ebuild_faq.md>.
-Please update the link that brought you here.** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/remote-debugging/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/remote-debugging/index.md
deleted file mode 100644
index 437e3c18094..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/remote-debugging/index.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: remote-debugging
-title: Remote Debugging in ChromiumOS
----
-
-### See the [CrOS developer guide](http://www.chromium.org/chromium-os/developer-guide#TOC-Remote-Debugging) for instructions on using a script that automates most of the below steps.
-
-### Device Setup
-
-For details on copying a binary over to your developer device in order to debug
-it, see [Host File
-Access](/chromium-os/how-tos-and-troubleshooting/debugging-tips/host-file-access).
-
-You will need to open a port on your device so that gdbserver can be reached by
-gdb:
-
-```none
-sudo /sbin/iptables -A INPUT -p tcp --dport 1234 -j ACCEPT
-```
-
-On the target device, run gdbserver. You can run it with a new process or attach
-to an existing process:
-
-```none
-gdbserver :1234 /bin/ls        # Debug a new instance of /bin/ls
-gdbserver --attach :1234 6301  # Attach to existing process with pid: 6301
-gdbserver --attach :1234 $(pgrep chrome -P $(pgrep session_manager))  # Attach to primary chrome browser process
-```
-
-### Host Setup
-
-Build a cross-gdb on your host machine (inside the chroot).
-
-```none
-sudo USE=expat emerge cross-i686-pc-linux-gnu/gdb         # (x86)
-sudo USE=expat emerge cross-x86_64-cros-linux-gnu/gdb     # (amd64)
-sudo USE=expat emerge cross-armv7a-cros-linux-gnueabi/gdb # (arm)
-```
-
-Run gdb and set the appropriate paths to sysroot and debug symbols:
-
-```none
-i686-pc-linux-gnu-gdb
-(gdb) set sysroot /build/x86-alex
-(gdb) set solib-absolute-prefix /build/x86-alex
-```
-
-```none
-(gdb) set solib-search-path /build/x86-alex
-(gdb) set debug-file-directory /build/x86-alex/usr/lib/debug
-(gdb) file /build/x86-alex/bin/ls
-(gdb) target remote 12.34.56.78:1234
-```
-
-If you want to debug a chrome build with cros_chrome_make, first install to a
-temporary directory:
-
-```none
-cros_chrome_make --install
-```
-
-`And use the following instead (the binary specified in the file command is the
-one you want to copy over):`
-
-`` ```none
-(gdb) set debug-file-directory /build/x86-alex/tmp/portage/chromeos-base/chromeos-chrome-9999/image/usr/lib/debug
-(gdb) file /build/x86-alex/tmp/portage/chromeos-base/chromeos-chrome-9999/image/opt/google/chrome/chrome
-(gdb) target remote 12.34.56.78:1234
-``` ``
-
-The program is now paused and you have control over it from your host machine.
-To start execution:
-
-```none
-(gdb) continue
-```
-
-Helpful hint: you can place the above commands into a file and use the GDB
-"source" command to read it:
-
-```none
-set sysroot /build/x86-alex
-set solib-absolute-prefix /build/x86-alex
-```
-
-```none
-set solib-search-path /build/x86-alex
-```
-
-```none
-set debug-file-directory /build/x86-alex/usr/lib/debug
-file /build/x86-alex/opt/google/chrome/chrome
-# You can include setting breakpoints you know you're going to need.
-b ChromeMain
-target remote 12.34.56.78:1234
-```
-
-Then save that as a file (e.g. "remote.gdb") and do this:
-
-```none
-i686-pc-linux-gnu-gdb
-(gdb) source remote.gdb
-```
-
-### Additional notes for remote debugging Chrome on ChromeOS
-
-To get line number info in chrome builds (**Note**: don't use FEATURES="nostrip"
-- the resulting binary will not fit on the device!)
-
-```none
-export KEEP_CHROME_DEBUG_SYMBOLS=1 REMOVE_WEBCORE_DEBUG_SYMBOLS=1
-```
-
-To debug the installed chrome from outside the chroot (e.g. from emacs) using
-/usr/bin/gdb + gdbserver on the device as described above, in .gdbinit (or
-sourced file):
-
-```none
-set sysroot ~/chromeos/chroot/build/x86-alex
-set solib-absolute-prefix ~/chromeos/chroot/build/x86-alex
-set debug-file-directory ~/chromeos/chroot/build/x86-alex/usr/lib/debug
-file ~/chromeos/chroot/build/x86-alex/opt/google/chrome/chrome
-target remote 172.31.55.210:1234
-```
-
-To debug chrome built with emerge or cros_chrome_make without installing, as
-above except:
-
-```none
-file ~/chromeos/chroot/var/cache/chromeos-chrome/chrome-src/src/out_x86-alex/Release/chrome
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/Screenshot-QEMU-KVM.png.sha1 b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/Screenshot-QEMU-KVM.png.sha1
deleted file mode 100644
index ebb94a99de1..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/Screenshot-QEMU-KVM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9293e2b61673576bfb89437967749d0f595c231f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/index.md
deleted file mode 100644
index 5f39309c31a..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: running-chromeos-image-under-virtual-machines
-title: Running a Chromium OS image under KVM
----
-
-[TOC]
-
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_vm.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/serial-debugging-howto/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/serial-debugging-howto/index.md
deleted file mode 100644
index d7c808c98dc..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/serial-debugging-howto/index.md
+++ /dev/null
@@ -1,185 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: serial-debugging-howto
-title: Chromium OS [serial] Console Debugging HOWTO
----
-
-[TOC]
-
-## Introduction
-
-The kernel team has been working to remove cruft from the Chromium OS kernel
-configs. Since there are no Chromebooks with a serial port, serial port drivers
-were removed from the stock configuration, which is a minor inconvenience for
-those who still do a lot of debugging using the serial port.
-
-A quick howto was e-mailed some time ago
-[here](http://groups.google.com/a/chromium.org/group/chromium-os-dev/browse_thread/thread/5c8a44b76cecb2ce)
-for using mini-PCIe serial cards, but the information is somewhat limited in
-scope and is worth correcting and modernizing. There are several ways to
-accomplish what is described here, please feel free to chip in.
-
-This HOWTO assumes you have built a bootable Chromium OS image and are not
-afraid to edit some config files. We'll assume the target platform is 32-bit
-"x86-generic".
-
-## Enable Kernel Serial Drivers
-
-When the team goes to release a board to the public, right before release, the
-default serial console enable flags (USE and TTY_CONSOLE \[see **Enabling Serial
-Console Login** below\] in `make.conf` are reverted.
-
-For x86 based systems, use the pcserial USE flag when building your kernel:
-
-```none
-chromium-os$ USE=pcserial cros_workon_make --board="${BOARD}" chromeos-kernel
-```
-
-For Exynos-based systems, add the samsung_serial USE flag:
-
-```none
-chromium-os$ USE=samsung_serial cros_workon_make --board="${BOARD}" chromeos-kernel
-```
-
-## Note that on some systems these serial drivers are always loaded due to them being needed by some hardware, ex: Bluetooth modules sometimes communicate with the AP via serial.
-
-Note that you will likely need to replace "chromeos-kernel" in your
-cros_workon_make call with an ebuild relevant to your board, like
-chromeos-kernel-3_18 for asuka.
-
-## Enable Console Logging
-
-By default, the kernel command line is set up to enable no consoles and thus log
-no output. This leads to a cleaner/speedier boot, but is not helpful when you
-need to see failure messages. Thus you'll need change some kernel command-line
-parameters to get meaningful output.
-
-When you create the image with build_image, simply use the --enable_serial flag
-to select the console for logging output. The value it takes is exactly the same
-as what the kernel expects for **console=** (see the next section for more
-details).
-
-```none
-$ ./build_image --enable_serial ttyS0
-```
-
-Note that every board will have a a different bus layout resulting in
-potentially different ttyS# port for serial console. See **Platform Specific
-Settings**, below.
-
-### The console= option
-
-The console= option is described in detail in
-[kernel-parameters.txt](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/HEAD/Documentation/kernel-parameters.txt)
-in the Linux kernel source tree.
-
-### Platform Specific Settings
-
-#### Virtual Machines (QEMU/KVM)
-
-If you boot the image in a VM, and you use the
-[cros_start_vm](/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines)
-script to launch it, then serial output will be logged to a
-`/tmp/kvm.xxx.serial` file (exact name will be shown when starting the VM).
-
-If you want to interact with the serial console directly, you'll need to launch
-qemu yourself and pass the -nographics flag directly. The serial device should
-be connected to stdin/stdout by default.
-
-#### X86
-
-On most x86 platforms, ttyS0 will refer to the southbridge's UART accessed via
-ports specified in Super IO configuration space. However, for add-in PCIe cards
-you may need to specify a MMIO address to access the UART. For example,
-"console=uart8250,mmio,0x50401000,115200n8". An alternative is to specify the
-ttyS# port configured by the kernel for the specific hardware and connection
-that you're testing on. (E.g. "ttyS2".)
-
-See Appendix A below for more details.
-
-#### ARM Exynos
-
-You probably want to use ttySAC3 for your console.
-
-## Enabling Serial Console Login
-
-See the [Controlling Enabled Consoles
-document](/chromium-os/developer-guide/using-serial-tty) for all the details.
-
-## Build Chromium OS image using your custom kernel config
-
-Set the pcserial USE flag when calling build_packages:
-
-```none
-USE=pcserial ./build_packages
-```
-
-## Appendix
-
-### A: How to find alternate IO and MMIO addresses for your UART
-
-If you already have UART support but simply do not know what options to pass to
-the kernel, you may examine a few sources to figure it out.
-
-Method 1: Look at /proc/iomem
-
-localhost ~ # cat /proc/iomem | grep serial
-
-**50401000-50401007 : serial**
-
-**note: for two port pci-serial cards you will see two entries like this:**
-
-**e0801000-e0801008 : serial**
-
-**e0801200-e0801207 : serial**
-
-and the each range will correspond to the two different serial ports
-
-Method 2: Look at PCI device config
-
-localhost chronos # lspci | grep -i serial
-
-02:00.0 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller
-
-localhost chronos # lspci -v -s 02:00.0
-
-02:00.0 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller
-(prog-if 02 \[16550\])
-
-Subsystem: Device a000:1000
-
-Flags: bus master, fast devsel, latency 0, IRQ 16
-
-**I/O ports at 2000 \[size=8\]**
-
-**Memory at c0401000 (32-bit, non-prefetchable) \[size=4K\]**
-
-**Memory at c0400000 (32-bit, non-prefetchable) \[size=4K\]**
-
-Capabilities: \[80\] Power Management version 3
-
-Capabilities: \[88\] MSI: Enable- Count=1/32 Maskable- 64bit+
-
-Capabilities: \[c0\] Express Legacy Endpoint, MSI 00
-
-Kernel driver in use: serial
-
-Method 3: Look at dmesg for lines such as this:
-
-\[ 0.676698\] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
-
-\[ 0.678173\] serial 0000:04:00.3: PCI INT D -&gt; GSI 18 (level, low) -&gt; IRQ
-18
-
-\[ 0.678716\] 1 ports detected on Oxford PCI Express device
-
-\[ 0.678910\] ttyS0: detected caps 00000700 should be 00000100
-
-\[ 0.679365\] 0000:04:00.3: ttyS0 at **MMIO** **0x50401000** (irq = 18) is a
-16C950/954
-
-\[ 0.679899\] console \[ttyS0\] enabled, bootconsole disabled \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/tsc-resynchronization/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/tsc-resynchronization/index.md
deleted file mode 100644
index 60065976b2a..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/tsc-resynchronization/index.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: tsc-resynchronization
-title: TSC resynchronization
----
-
-# Sergiu Iordache - sergiu@chromium.org / sergiu.iordache@gmail.com
-
-with the help of Terry Lambert - tlambert@chromium.org
-
-## 1. Introduction & goal
-
-This document describes the work done in order to enable TSC as a clocksource on
-Intel Chromebooks (affects Mario, Alex and ZGB as they have constant TSC).
-
-## 2. Background
-
-The Linux kernel uses different time sources. The most interesting are the HPET
-(High Precision Event Timer) and the TSC (Time Stamp Counter).
-The TSC is the preferred clocksource between the two counters, as it is the
-fastest one, however it can only be used if it is stable. Currently there are 4
-types of TSC present:
-
-1. Constant. Constant TSC means that the TSC does not change with CPU
- frequency changes, however it does change on C state transitions.
-2. Invariant. As described in the Intel manual: “The invariant TSC will
- run at a constant rate in all ACPI P-, C- and T-states”
-3. Non-stop. The Non-stop TSC has the properties of both Constant and
- Invariant TSC.
-4. None of the above. The TSC changes with the C, P and S state
- transitions.
-
-By looking into the flags entry in /proc/cpuinfo we can determine what type of
-TSC the current processor has (possible values we check for are constant_tsc,
-nonstop_tsc)
-The constant TSC is the type of TSC currently present on our Chromebooks (future
-Chromebooks may have non-stop TSC). Therefore the TSC stops during C-state
-transitions and must be resynchronized in order to track time again.
-[A patch](https://lkml.org/lkml/2008/9/25/451) written by Michael Davidson
-(md@google.com) currently exists which enables TSC resynchronization for
-userspace uses on AMD architectures. In that patch the TSC gets synchronized
-only for userspace calls.
-
-## 3. My work
-
-Although the patch by md@ does a lot of the heavy work, it can’t be applied
-cleanly on our configuration for 2 reasons:
-
-1. it was built for 64 bit architectures;
-2. it was built solely for user-space users of the TSC (the clock
- source would still be set to something else).
-
-My work to date updates the patch so that it can be used on our architecture, by
-modifying the code to work on 32 bit and making the necessary changes so that
-the TSC is used as a kernel clock source.
-I’ve also managed to improve synchronize the TSCs between the CPUs within 300
-cycles of each other.
-The current results and limitations are:
-
-* The TSC on CPU 0 initially gets synchronized to the HPET.
-* The TSC is synchronized across CPUs as they are brought up (relative
- to CPU 0), resulting in a difference of less than 300 cycles between
- the TSC value on each of the CPUs;
-* The TSC is set as the main clock source; The drift requirements had
- to be relaxed in order for this to work from not permitting any
- drift to permitting a drift of a few hundred cycles.
-* The TSC syncs using the HPET on transitions from C0 to C3+ (The
- Linux kernel groups all C-state larger than C3 into C3) ;
-* The TSC can be set to periodically resync (by default every 100ms)
- to the HPET.
-
-The current problem is that we’re the synchronization induces a warp of a few
-thousand cycles, which is unacceptable. I’ve been working very hard with Terry
-during the last week of my internship to make this go away and apparently the
-scaling factor is one of the causes, along with the way the TSC gets updated
-from the HPET. However, I am still working to find a complete solution to this
-problem.
-
-## 4. Benchmarks
-
-Although using the TSC as a clocksource all the time is not completely
-implemented, I was able to benchmark its use by ignoring C-state transitions(by
-keeping the power adapter plugged while testing). While benchmarking the TSC as
-a clock source, 2 main aspects were examined:
-
-1. boot time;
-2. improvements to gettimeofday and clock_gettime.
-
-### 4.1. Boot time
-
-<img alt="image"
-src="https://lh4.googleusercontent.com/goxMnnDRXuu_j_4aHBRP_B4aOPiwFUWKYF_EbCUJq4xldKLH0_ro8VRt0SeMlbYz6MOogYrk-e424V9Cvx3Md1oHS-b9y3qUYd3Wms1Xi0i5ZH27tz8"
-height=371px; width=600px;>
-
-Boot time was measured using the bootperf autotests. The setup was the
-following:
-
-* x86-alex overlay
-* Top of the tree on Monday, 08/26/2011 for HPET
-* The same + TSC patch for TSC
-* 3 sets of 10 runs for each
-
-The results are presented on the right;
-The boot time with the TSC counter is just a little bit slower on these 30 runs,
-with an average of 5.77 for the TSC version versus 5.73 for the HPET one. This
-is explicable as the extra initialization (there is also an extra calibration
-loop for a few ms) adds time which might cancel any improvements.
-
-### 4.2. gettimeofday benchmark
-
-The efficiency of gettimeofday was measured by doing a simple benchmark, calling
-gettimeofday for 100.000.000 times. The benchmark was run on the same Alex using
-a HPET and a TSC clocksource and the results were:
-
-* HPET: 140 s
-* TSC: 46 s
-
-### 4.3. Number of calls to gettimeofday
-
-Philip Guo, another intern, created a strace++ tool which counts system calls.
-He used it to run Chrome on ChromeOS and get the number of times gettimeofday
-gets called. On his run of Chrome with a 90 second YouTube video playing it got
-called 18195 times. These calls, according to my benchmark would take 0.0254
-seconds using the HPET and 0.008 seconds using the TSC (which means that 0.017
-seconds were saved during a 90 second period, or just 0.01 % improvement). It
-would be interesting to see what happens for non-optimized flash websites.
-However real benchmarks would need to be run after the synchronization works
-completely.
-
-## 5. Future work
-
-Here are the things that still need to be done after my internship is over:
-
-* Fixing the TSC resync such that it works. Terry suggested the
- following steps:
- * Making the HPET to TSC routine that works when SMIs happen.
- * Finding out the cost of the HPET read (keeps working when SMIs
- happen)
- * Wait for the HPET clock to tick before syncing
- * Set the TSC to the corresponding value + cost of HPET
-* Formally verify that the precision of the clock source is preserved;
-* Terry suggested syncing the value of the TSC with the real time from
- the epoch so that you would only need to apply a scale to it and not
- an offset -&gt; you could move it to user space \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/upgrade-ebuild-eapis/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/upgrade-ebuild-eapis/index.md
deleted file mode 100644
index 57a9e9bc55d..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/upgrade-ebuild-eapis/index.md
+++ /dev/null
@@ -1,227 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: upgrade-ebuild-eapis
-title: Upgrade Ebuild EAPIs HOWTO
----
-
-[TOC]
-
-## Introduction
-
-Gentoo ebuilds have upgraded the API that they have available over time to
-include new features and fix bugs in existing behavior. In order to guarantee
-that ebuilds written yesterday continue to work with package managers of
-tomorrow, the API available to ebuilds has been formalized in the [Package
-Manager Spec](http://wiki.gentoo.org/wiki/Project:PMS) (PMS). The short summary
-is that ebuilds declare the version of the API that they've been written for by
-setting the EAPI variable at the top of the ebuild, and the spec guarantees that
-behavioral changes will only occur in newer versions.
-
-You might encounter ebuilds using older EAPIs. We'll provide a quick guide to
-cover the common issues you see when upgrading to the latest version. At this
-time, that is EAPI 6, but our focus has been on EAPI 5 or newer. This is because
-the functionality new to EAPI 6 is not significant enough to warrant forcing an
-upgrade and few ebuilds would even utilize it.
-
-Note that while the convention thus far has been to use numbers in the official
-spec (like 0, 1, 2, etc...), the EAPI setting is a string, not an integer.
-
-## Common Changes
-
-### EAPI Setting
-
-First, if your ebuild doesn't even have an EAPI setting at the top, then it
-defaults to the oldest version of 0. If it does contain a setting, then you
-should make sure it is 5.
-
-```none
-# Copyright 2014 The Chromium OS Authors. All rights reserved.
-# Distributed under the terms of the GNU General Public License v2
-EAPI="4"
-```
-
-This is what the header of your ebuild should look like. The only thing that
-comes before the EAPI line is the file's comment block which declares copyright
-& licensing (the year & license may vary), then a blank line, then the EAPI
-setting.
-
-### Default Source Directory Setting
-
-In EAPI versions before 5, the variable `S` would default to `${WORKDIR}/${P}`.
-But if `${P}` did not exist, the ebuild would silently fall back to the work
-directory (`${WORKDIR}`). For some ebuilds, this wasn't a problem because they
-only installed files out of `${FILESDIR}` or `${SYSROOT}`.
-
-Starting with EAPI 5, the PM longer does this automatic fallback to
-`${WORKDIR}`. If you get errors like "`The source directory '...' doesn't
-exist`", then you're hitting this problem (i.e. relying on the older silent
-fallback behavior).
-
-The easy answer is usually to set `S` to `${WORKDIR}`.This might not be the
-right answer (maybe your source lives somewhere else), but frequently this is
-OK. So after the `DEPEND`/`RDEPEND` variables and before any of the src_\* or
-pkg_\* functions, add:
-
-```none
-S=${WORKDIR}
-```
-
-### New Function Phases
-
-In EAPI versions starting with 2, some source functions were split up to better
-reflect the overall build process. So if you're upgrading from those, here's
-what you need to know:
-
-* If you declare a src_unpack function, move all source
- patching/hacking (like running \`sed\`) to a new src_prepare. This
- often means that src_unpack is deleted entirely as the default of
- unpacking all archives in SRC_URI is sufficient.
-* If you declare a src_compile function, move all configure steps
- (like \`econf\` or \`./configure\`) to a new src_configure. This
- often means that src_compile is deleted entirely as the default of
- just running \`emake\` is sufficient.
-
-Here is an example of splitting src_unpack into src_unpack and src_prepare:
-
-```none
-# This is the old (pre-EAPI 4) version.
-src_unpack() {
-    unpack ${A}
-    cd "${S}"
-    epatch "${FILESDIR}"/${P}-a-fix.patch
-    sed -i 's:old:new:' configure.ac || die
-    eautoreconf
-}
-```
-
-```none
-# This is the new (EAPI 4 & 5) version.
-# Note that there is no src_unpack at all because the default is `unpack ${A}`.
-# If you needed to unpack things in a specific way, you can add your own
-# src_unpack function and do just that.
-src_prepare() {
-    epatch "${FILESDIR}"/${P}-a-fix.patch
-    sed -i 's:old:new:' configure.ac || die
-    eautoreconf
-}
-```
-
-```none
-# This is the new (EAPI 6+) version.
-# Note that there is no src_unpack at all because the default is `unpack ${A}`.
-# If you needed to unpack things in a specific way, you can add your own
-# src_unpack function and do just that.
-src_prepare() {
-    default
-    eapply "${FILESDIR}"/${P}-a-fix.patch
-    sed -i 's:old:new:' configure.ac || die
-    eautoreconf
-}
-```
-
-Here is an example of splitting src_compile into src_configure and src_compile:
-
-```none
-# This is the old (pre-EAPI 4) version.
-src_compile() {
-    econf \
-        --enable-foo \
-        $(use_enable bluetooth) \
-        || die
-    emake || die
-}
-```
-
-```none
-# This is the new (EAPI 4+) version.
-# Note that there is no src_compile at all because the default is `emake`.
-# If you passed additional flags to `emake`, then you can add your own
-# src_compile function and do just that.
-src_configure() {
-    econf \
-        --enable-foo \
-        $(use_enable bluetooth)
-}
-```
-
-### Implicit Die Commands
-
-Starting with EAPI 4, all of the helper commands (like emake and doins and dobin
-and ...) were updated to automatically call \`die\` when they failed. This means
-you no longer have to (and in fact you should avoid doing so). This does not
-apply to other commands like \`mv\` or \`sed\` or \`cp\` -- if you run those,
-you should still call \`die\`.
-
-Here's an example of converting to these newer EAPIs:
-
-```none
-# This is the old (pre-EAPI 4) version.
-src_compile() {
-    emake USE_EXTRA=1 || die "emake failed"
-}
-src_install() {
-    emake install install-man USE_EXTRA=1 DESTDIR="${D}" || die "emake install failed"
-    dodoc *.txt || die "dodoc failed"
-    insinto /etc/init
-    newins "${FILESDIR}"/package.init package || die "doins failed"
-}
-```
-
-```none
-# This is the new (EAPI 4+) version.
-src_compile() {
-    emake USE_EXTRA=1
-}
-src_install() {
-    emake install install-man USE_EXTRA=1 DESTDIR="${D}"
-    dodoc *.txt
-    insinto /etc/init
-    newins "${FILESDIR}"/package.init package
-}
-```
-
-On the rare occasion you expect a command to fail and want to handle it
-yourself, you can use the new \`nonfatal\` helper like so:
-
-```none
-src_install() {
-    if ! nonfatal doins some.bin; then
-        # Handle the failed install yourself.
-    fi
-}
-```
-
-### The \`default\` Function
-
-There is now a nifty helper function called `default` that let's you execute the
-default commands that a function would do. This saves a bit of code while
-letting you still do a bit of additional things. It most commonly comes up in
-the `src_install` function when packages use \``emake install DESTDIR="${D}"`\`.
-If you need to pass additional flags to `emake` though, then this won't help.
-
-Starting with EAPI 6, the `src_prepare` function must always call `default`. If
-you forget, the build will usually fail for you automatically :).
-
-```none
-# This is the old (pre-EAPI 4) version.
-src_install() {
-    emake install DESTDIR="${D}" || die
-    doman man/*.1 || die
-    insinto /etc
-    doins "${FILESDIR}"/some.conf || die
-}
-```
-
-```none
-# This is the new (EAPI 4+) version.
-src_install() {
-    default
-    doman man/*.1
-    insinto /etc
-    doins "${FILESDIR}"/some.conf
-}
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-an-upstream-kernel-on-snow/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-an-upstream-kernel-on-snow/index.md
deleted file mode 100644
index 76d9a226787..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-an-upstream-kernel-on-snow/index.md
+++ /dev/null
@@ -1,267 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: using-an-upstream-kernel-on-snow
-title: Using an Upstream Kernel on Chrome OS
----
-
-## **[TOC]**
-
-## **Introduction**
-
-This page aims to document how to use an Upstream Kernel on Chrome OS. It's
-aimed at helping people with upstreaming for the [Samsung ARM Series 3
-Chromebook](http://www.samsung.com/us/computer/chrome-os-devices/XE303C12-A01US)
-(AKA snow) and uses that in many examples. However, it's useful in other cases,
-too.
-
-In general this documentation assumes that you've got the Chrome OS source tree
-synced down and have a build environment (and chroot) setup. It assumes you've
-built packages and an image for your board (like `BOARD=daisy` for the snow
-board). See the [Developer Guide](/chromium-os/developer-guide) if you haven't
-done that.
-
-## Obtain source code and recent patches
-
-The whole point here is to use the upstream kernel, so these instructions will
-direct you to linux-next. ...but linux-next is pretty darn bleeding edge. If you
-get stuck and things won't boot, you could always try a known-good state. In
-fact, many of the needed patches have now landed on even landed on the main
-linux tree now. See the section below "Patches relevant to the Samsung ARM
-Chromebook" for the last known good state.
-
-The easiest way to get source code is to just add a remote git server to your
-normal kernel tree, fetch things, and then use patchwork to apply some patches.
-
-Here's some steps to do that and start a new work branch on linux-next. WARNING:
-The fetch might be slow.
-
-```none
-cd ~/trunk/src/third_party/kernel/files
-git remote add linuxnext git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
-git fetch linuxnext
-git checkout -b my_branch linuxnext/master
-```
-
-## Installing pwclient
-
-Now that you've got the source code you should apply a few patches. In this case
-we'll use `pwclient` to get things out of
-[patchwork.kernel.org](http://patchwork.kernel.org).
-
-First we need to install `pwclient`.
-
-One way to install the patchwork client in the cros chroot is via its ebuild:
-
-```none
-sudo emerge pwclient
-```
-
-Alternatively, you can install the latest pwclient directly from kernel.org:
-
-```none
-sudo bash -c "curl 'https://patchwork.kernel.org/pwclient/' > /usr/local/bin/pwclient"
-sudo chmod +x /usr/local/bin/pwclient
-```
-
-Next, setup the `.pwmclientrc` for the LKML project on patchwork.kernel.org:
-
-<pre><code>
-<b># The following will clobber any existing ~/.pwclientrc you have (!)</b>
-curl 'https://patchwork.kernel.org/project/LKML/pwclientrc/' &gt; ~/.pwclientrc
-</code></pre>
-
-## Patches relevant to the Samsung ARM Chromebook
-
-This section should go away eventually once patches are upstream...
-
-Relevant patch series that I've tested (as of 12/19/12)
-
-* [SD card write protect
- patches](http://patchwork.kernel.org/bundle/dianders/mmc_wp/)
- **(required)**
-* [i2c bus numbering
- patches](http://patchwork.kernel.org/bundle/dianders/i2c_bus_numbering/)
-* [max77686 basic support in device
- tree](http://patchwork.kernel.org/bundle/dianders/snow_max77686/)
- (misses RTC + 32KHz clocks)
-
-Quick way to apply:
-
-```none
-for id in 1966801 1966931 1966871 1966781 1966811; do
-  pwclient git-am $id
-done
-pwclient git-am 1966911
-pwclient git-am 1840211
-```
-
-Status on linux/master:
-
-* Tested on 12/18 `ae664dba2724e59ddd66291b895f7370e28b9a7a: Merge
- branch 'slab/for-linus' of
- git://git.kernel.org/pub/scm/linux/kernel/git/penberg/linux`
- * Needed revert of `1974a042dd15f1f007a3a1a2dd7a23ca0e42c01d`. Fix
- is in discussion upstream.
- * Applied patches (1823551 1823621 1823561 1823591 1781931 1840211
- 1894081)
- * Boots to command line
-* Tested on 12/19 `74779e22261172ea728b989310f6ecc991b57d62: Merge tag
- 'for-3.8-rc1' of git://gitorious.org/linux-pwm/linux-pwm`
- * Needed revert of `1974a042dd15f1f007a3a1a2dd7a23ca0e42c01d`. Fix
- is in discussion upstream.
- * Applied patches (1823551 1823621 1823561 1823591 1781931
- 1840211)
- * To fix DEPMOD step when doing emerge-daisy chromeos-kernel-3_8:
- Apply patch 2794701
- * Boots to command line
-
-Status on linux-next/master:
-
-* Tested on 12/6: cfc4410f5d3de0f68139ddffe065b9889a41d3c0`: Add
- linux-next specific files for 20121206`
- * Applied above patches (1823551 1823621 1823561 1823591 1781931
- 1840211)
- * Boots to command line
-* Tested on 12/18: `ff430f8aa011716b8274381e31b0bc8d49d4f4be: Add
- linux-next specific files for 20121218`
- * Applied patches (1823551 1823621 1823561 1823591 1781931 1840211
- 1894081)
- * Boots to command line
-
-## Building and installing the kernel
-
-Certainly there are lots of ways to build and install the kernel. I'm not going
-to copy them all here but I'll just point you at the [Kernel
-FAQ](/chromium-os/how-tos-and-troubleshooting/kernel-faq). Specifically read the
-[How to quickly test kernel modifications (the fast
-way)](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/kernel-faq#TOC-How-to-quickly-test-kernel-modifications-the-fast-way-)
-section carefully.
-
-I would strongly suggest that you boot from a fast SD card rather than directly
-messing with what you have on eMMC. That way you can always get back to a
-running system. The quick set of steps for that is:
-
-* Switch to [developer
- mode](/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook).
-* At the command prompt (VT2), enable USB (and SD card) booting with `crossystem dev_boot_usb=1`.
- Note: the exact method might differ between boards; see the [Developer
- Information for Chrome OS Devices
- page](/chromium-os/developer-information-for-chrome-os-devices) for specific
- details.
-* Insert an SD card with an image that you installed with `[cros
- flash](/chromium-os/build/cros-flash)`.
-* Reboot your Chromebook and press `Ctrl-U` at the BIOS prompt to boot
- from your SD card.
-
-You might also want to look at [Using nv-U-Boot on the Samsung ARM
-Chromebook](/system/errors/NodeNotFound).
-
-## The kernel config
-
-One especially weird thing when working with the upstream kernel is that
-standard ChromeOS kernel `splitconfig` system isn't in place. The kernel ebuild
-used by ChromeOS will realize that and will pick up a backup config from
-[chromiumos-overlay](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/eclass/cros-kernel).
-On snow it will pick up the `exynos5_defconfig` in particular.
-
-If you need to make changes to the kernel config locally the easiest thing to do
-is to just override that config. Here's a set of commands that might suit you:
-
-```none
-DEFCONFIG=~/trunk/src/third_party/chromiumos-overlay/eclass/cros-kernel/exynos5_defconfig
-cd ~/trunk/src/third_party/kernel/v3.8
-cp ${DEFCONFIG} .config
-ARCH=arm make menuconfig
-# Make your changes
-ARCH=arm make savedefconfig
-cp defconfig ${DEFCONFIG}
-make mrproper
-```
-
-If you have changes to the config that you think is relevant to others working
-on the upstream kernel then feel free to submit a patch!
-
-## Making sure other configs compile
-
-It's hard to make 100% sure that your change won't break anyone else. ...but
-it's usually considered courtesy to make sure that some other boards compile. If
-you want to see if the `exynos4_defconfig` compiles you could use a recipe like
-this:
-
-```none
-cd ~/trunk/src/third_party/kernel/v3.8
-ARCH=arm CROSS_COMPILE=armv7a-cros-linux-gnueabi- make exynos4_defconfig
-ARCH=arm CROSS_COMPILE=armv7a-cros-linux-gnueabi- make -j16
-make mrproper
-```
-
-The `exynos4_defconfig` is particularly interesting when you're modifying exynos
-code because it is a non-device tree enabled board that shares a lot of code
-with the exynos config that we're using (so it's easy to break). It's actually
-broken at the git hash I listed above because I didn't run it before submitting
-my last patch. :(
-
-## Sending your change upstream
-
-This is documented over at the [Kernel
-FAQ](/chromium-os/how-tos-and-troubleshooting/kernel-faq), which will soon
-(hopefully) include the use of patman.
-
-## What is known to work (and known to not work)
-
-As of 11/30/12:
-
-Works:
-
-* Serial over UART3 (if you've got a [servo2 debug
- board](/chromium-os/servo) hooked up). ...though remember that the
- default BIOS will try to disable serial console by mucking with the
- kernel command line.
-* i2c (all busses except the very important i2c bus 4)
-* power button and lid switch
-* EMMC and SD
-
-Known not to work yet:
-
-* X (so ui will crash a whole lot at bootup)
-* USB 2.0 - Can almost do this with patches posted, expect it real
- soon now.
-* USB 3.0
-* i2c4 (which means no keyboard and no tps65090 PMIC)
-* Display
-* HDMI
-* WiFi
-* max77686 RTC + 32KHz
-* Trackpad
-* Audio
-
-## Musings
-
-A few random thoughts:
-
-* If you end up flashing a bad kernel a lot, it's a lot easier to use
- the "nv-U-Boot" (formerly known as legacy U-Boot). There's now
- documentation for how to do this at [Using nv-U-Boot on the Samsung
- ARM Chromebook](/system/errors/NodeNotFound). Pay special attention
- to the [Booting from a backup kernel](/system/errors/NodeNotFound)
- section, which is really helpful when dealing with lots of
- nonbooting kernels.
-* If you have access to a servo board (probably only people at Google
- will have these) you also have the option of using
- `cros_bundle_firmware` to load up a kernel. The magic command line
- I've used for this is as follows. Note that this won't get you
- kernel modules, just the main kernel.
- * `cros_bundle_firmware -b daisy -d exynos5250-snow -w usb
- --kernel /build/daisy/boot/vmlinux.uimg`
-
-## Contributing
-
-Patches are certainly appreciated as are reviews of patches posted upstream. In
-general most people on the Chrome OS team wouldn't object to people taking
-patches from the Chrome OS kernel tree, adjusting them, and posting them
-upstream (check with the author, though, since people may be midway through
-doing that themselves). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/index.md
deleted file mode 100644
index d24ae7357d3..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: using-the-dev-server
-title: Dev server
----
-
-Moved to
-<https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/docs/devserver.md>.
-Please update the link that brought you here. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/xbuddy-for-devserver/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/xbuddy-for-devserver/index.md
deleted file mode 100644
index 7bacfa87a23..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/xbuddy-for-devserver/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-- - /chromium-os/how-tos-and-troubleshooting/using-the-dev-server
- - Dev server
-page_name: xbuddy-for-devserver
-title: XBuddy for Devserver
----
-
-## <table>
-## <tr>
-
-## <td>This documentation now lives <a href="https://chromium.googlesource.com/chromiumos/docs/+/HEAD/xbuddy.md">here</a>.</td>
-
-## </tr>
-## </table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/Screenshot from 2013-04-08 13_46_48.png.sha1 b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/Screenshot from 2013-04-08 13_46_48.png.sha1
deleted file mode 100644
index 8b87c425b63..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/Screenshot from 2013-04-08 13_46_48.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-96c1bec58115889441d7703d156279b3d8801a1e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/index.md
deleted file mode 100644
index 6d57eb6f204..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: visualizing-the-rootfs
-title: Visualizing the Rootfs
----
-
-An important aspect in working on an embedded OS is keeping the size of our
-updates down which usually entails keeping the size of the OS image down. If
-left unchecked, the OS image will increase steadily. In order to help developers
-track down where space is going we created a tool cros_tree_map that helps
-developers figure out where our precious space is going.
-
-In order to use, you need to have:
-
-1. an OS image (the .bin file).
-2. at least a mini-layout checkout of the code.
-
-To use:
-
-1. mount the image onto a directory -- you can do this easily with
- [mount_gpt_image.sh](/chromium-os/how-tos-and-troubleshooting/helper-scripts#TOC-mount_gpt_image.sh)
- (in `~/src/scripts`). You should use the `--safe` option to ensure
- you do not make accidental changes to the Root FS. By default it
- will mount the rootfs onto `/tmp/m`. You can use the `--from=<path
- to .bin file>`
-2. Run du: `sudo du -xB 1 /tmp/m > du.out` (`du.out` is your output
- file).
-3. Use cros_tree_map to create a json report:
- `~/chromite/contrib/cros_tree_map du --du-output du.out
- --strip-prefix /tmp/m > image_size.json`
-
-At this point you will have a json file with all the directory information. To
-visualize this info, you can use webtree map here:
-<https://github.com/martine/webtreemap>. You can then view the html file from
-your trusty web browser.
-
-Here's an example snapshot of a Chrome OS image (note: yours will be interactive
-so you can dig in to different areas).
-
-![](/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs/Screenshot%20from%202013-04-08%2013_46_48.png)
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-on-a-branch/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-on-a-branch/index.md
deleted file mode 100644
index 2ca5873c11c..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-on-a-branch/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: working-on-a-branch
-title: Working on a Chromium OS Branch
----
-
-**This document can now be found here:**
-**<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/work_on_branch.md>.**
-
-**Please update the link that brought you here.** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-with-your-overlay-faq/index.md b/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-with-your-overlay-faq/index.md
deleted file mode 100644
index 74a96dd3d6e..00000000000
--- a/chromium/docs/website/site/chromium-os/how-tos-and-troubleshooting/working-with-your-overlay-faq/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/how-tos-and-troubleshooting
- - How Tos and Troubleshooting
-page_name: working-with-your-overlay-faq
-title: Working with your Overlay FAQ
----
-
-## Basics / Workflow
-
-### What is a board? What is an overlay? What is an ebuild? What is a bsp?
-
-Basic [terms and
-concepts](https://docs.google.com/document/d/16PWfmUkv5ZRoeaJeggHqF8cNwgSPLeL2I_D7UKubV4w/pub)
-
-### I made changes to my board's bsp but build_packages/build_image didn't pick them up.
-
-After you make a change to the bsp, you need to either
-[uprev](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/portage-build-faq#TOC-How-do-I-uprev-an-ebuild-)
-or re-emerge it for build_packages/build_image to pick up the changes. (We
-realize this isn't ideal: See <http://crbug.com/391962>)
-
-### How do I push changes that I made to my app to my developer device?
-
-Use [cros deploy](/chromium-os/build/cros-deploy)
-
-## Packages
-
-### My app depends and uses a third party library. How do I tell the build system to do that?
-
-First, check if the third party library is already available as a Gentoo package
-under
-[src/third_party/portage-stable](https://chromium.googlesource.com/chromiumos/overlays/portage-stable/+/HEAD/)
-or
-[src/third_party/chromiumos-overlay](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/).
-
-If yes, then just add the package name to the DEPEND (if build-time dependency)
-and/or RDEPEND (if run-time dependency) of your app's ebuild.
-
-### How do I add additional packages to my target &lt;board&gt;?
-
-Add it as an RDEPEND to
-chromeos-base/chromeos-bsp/chromeos-bsp-&lt;board&gt;.ebuild in your overlay.
-
-Example
-[BSP](https://chromium.googlesource.com/chromiumos/overlays/board-overlays/+/3c9d9f7a1e35861586cf39218d796e1f29869ad8/overlay-gizmo/chromeos-base/chromeos-bsp-gizmo/chromeos-bsp-gizmo-0.0.1.ebuild)
-that pulls in peerd and bash on the target.
-
-## Startup / Boot
-
-### How do I make my program/service automatically start on boot?
-
-CrOS uses the [upstart](http://upstart.ubuntu.com/cookbook/) system to manage
-boot and service startup. Simply add an upstart job for your service and install
-it into /etc/init
-
-Example upstart script:
-[link](https://chromium.googlesource.com/chromiumos/overlays/board-overlays/+/3c9d9f7a1e35861586cf39218d796e1f29869ad8/overlay-variant-panther-embedded/chromeos-base/chromeos-bsp-panther-embedded/files/load-network-drivers.conf)
-
-### Should my upstart job depend upon boot-services or system-services?
-
-system-services, unless your job in the critical boot path (e.g. network driver
-setup), in which case boot-services is appropriate.
-
-The following additional resources go into more detail:
-
-[More information](/chromium-os/boot-milestones)
-
-[Boot system design](/chromium-os/chromiumos-design-docs/userland-boot) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/index.md b/chromium/docs/website/site/chromium-os/index.md
deleted file mode 100644
index 17541daa68c..00000000000
--- a/chromium/docs/website/site/chromium-os/index.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-breadcrumbs: []
-page_name: chromium-os
-title: Chromium OS
----
-
-<div class="two-column-container">
-<div class="column">
-
-Chromium OS is an open-source project that aims to build an operating system
-that provides a fast, simple, and more secure computing experience for people
-who spend most of their time on the web. Here you can review the project's
-[design docs](http://www.chromium.org/chromium-os/chromiumos-design-docs),
-obtain the source code, and contribute. To learn more about the project goals,
-read the [announcement blog
-post](http://googleblog.blogspot.com/2009/11/releasing-chromium-os-open-source.html).
-
-### Videos
-
-* [What is Google Chrome
- OS?](http://www.youtube.com/watch?v=0QRO3gKj3qw)
-* [Chromium OS Security](http://www.youtube.com/watch?v=A9WVmNfgjtQ)
-* [Chromium OS & Open
- Source](http://www.youtube.com/watch?v=KA5RQv9mBoY)
-* [Chromium OS Fast Boot](http://www.youtube.com/watch?v=mTFfl7AjNfI)
-
-### For contributors
-
-* [Getting developer hardware](/chromium-os/getting-dev-hardware)
-* [Official Chrome OS
- Devices](/chromium-os/developer-information-for-chrome-os-devices)
-* [Process for Getting
- Involved/Contributing](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/contributing.md)
-* [Tree
- sheriffs](http://www.chromium.org/developers/tree-sheriffs/sheriff-details-chromium-os)
-* [Useful developer related Chrome
- extensions](/developers/useful-extensions)
-* [2014 Chrome OS Firmware Summit](/chromium-os/2014-firmware-summit)
-* [2017 Chrome OS Intel Firmware Architecture
- Presentation](https://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRldnxneDo1NGY1YWViZDBkN2JjOTky)
-
-### For UI designers
-
-* [User experience: Chromium/OS](/user-experience)
-
-### For developers
-
-* [Optimize Android Apps for Chrome OS
- device](/chromium-os/android-apps)
-* [Sideload Android apps on your
- Chromebook](/chromium-os/sideload-android-apps-on-chromebook)
-* [Developing apps on your Chromium OS
- device](/chromium-os/developing-apps-on-your-chromium-os-device)
-* [Chromium OS Build](/chromium-os/build)
-
-### For everyone
-
-* [Chromium OS FAQ](/chromium-os/chromium-os-faq)
-* [Project contact
- details](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/contact.md)
- (groups/etc...)
-* [Report
- bugs](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/reporting_bugs.md)
-* [Steam on Chrome OS](/chromium-os/steam-on-chromeos)
-
-</div>
-<div class="column">
-
-### ![](/chromium-os/comp2_200x146.jpg)
-
-### Source code
-
-* First time? Use the [Chromium OS Quick Start
- Guide](/chromium-os/quick-start-guide)
-* Read the [Chromium OS Developer
- Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md)
- to learn how to build the source
-* [Overview](/chromium-os/developer-guide/directory-structure) of the
- source
-* [Browse](https://chromium.googlesource.com/) the source
-* [Coding Style
- Guidelines](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/)
- * [Chromium OS Python Style
- Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/python.md)
- * [Chromium OS Shell Style
- Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/shell.md)
- * For other languages, follow the [Google Style
- Guide](https://github.com/google/styleguide/#google-style-guides)
- * For third-party code, follow the external project style guides
-* [Testing](/chromium-os/testing)
-
-### Developer docs
-
-* [Chromium OS Developer
- Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md)
-* [High-Level Developer
- FAQ](/chromium-os/how-tos-and-troubleshooting/developer-faq)
-* [Firmware (Coreboot / U-Boot) Overview and Porting
- Guide](/chromium-os/firmware-porting-guide)
-* [Embedded Firmware Solutions
- book](https://link.springer.com/book/10.1007/978-1-4842-0070-4)
- * [Chromebook Firmware Internals
- chapter](https://link.springer.com/chapter/10.1007/978-1-4842-0070-4_5)
-* [Embedded Controller (EC)
- Development](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/README.md)
-* [All How Tos and
- Troubleshooting](/chromium-os/how-tos-and-troubleshooting)
-* [Poking around Your Chrome OS
- Device](/chromium-os/poking-around-your-chrome-os-device)
-* [Design
- docs](http://www.chromium.org/chromium-os/chromiumos-design-docs)
-
-### Hardware Reference docs and schematics
-
-Software for the microcontroller on these USB Type-C example designs is in the
-[EC source code](/chromium-os/ec-development)
-
-* [USB Type-C debug dongle and sniffer for USB-PD
- communications](/chromium-os/twinkie)
-* [USB Type-C to DisplayPort Adapter](/chromium-os/dingdong)
-* [USB Type-C to HDMI Adapter](/chromium-os/hoho)
-* [45W USB Type-C Charging Adapter Control
- Board](/chromium-os/minimuffin)
-* [Cable and Adapter Tips and
- Tricks](/chromium-os/cable-and-adapter-tips-and-tricks)
-* [USB Type-C functional testing board](/chromium-os/plankton)
-
-</div>
-</div>
diff --git a/chromium/docs/website/site/chromium-os/lazy-fp-restore-vulnerability-status/index.md b/chromium/docs/website/site/chromium-os/lazy-fp-restore-vulnerability-status/index.md
deleted file mode 100644
index bc81a829136..00000000000
--- a/chromium/docs/website/site/chromium-os/lazy-fp-restore-vulnerability-status/index.md
+++ /dev/null
@@ -1,185 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: lazy-fp-restore-vulnerability-status
-title: Lazy FP Restore Vulnerability Status for Chrome OS
----
-
-### Vulnerability description
-
-System software utilizing lazy floating point state restore in systems using
-Intel Core-based microprocessors may potentially allow a local process to infer
-data from another process through a speculative execution side channel.
-Exploitation of the vulnerability requires the ability to run native code on the
-device.
-[CVE-2018-3665](https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00145.html)
-
-### Chrome OS response
-
-Chrome OS 68, which will be released to the stable channel in late July 2018,
-will provide patches to the OS kernel to mitigate this vulnerability. Chrome OS
-devices will receive these updates automatically.
-
-### Affected devices
-
-Chrome OS Intel devices with Core-based processors may be affected. The cpu line
-in the chrome:system page will show what CPU the device has.
-
-The following list covers affected devices that will be mitigated in Chrome OS
-68:
-
-<table>
-<tr>
-<td>Marketing name</td>
-<td>Public codename</td>
-<td>Platform</td>
-</tr>
-<tr>
-<td>Dell Chromebook 13 3380</td>
-<td>asuka</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>Acer Chromebase 24</td>
-<td>buddy</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Samsung Chromebook Pro</td>
-<td>caroline</td>
-<td>Skylake-Y</td>
-</tr>
-<tr>
-<td>ASUS Chromebook Flip C302</td>
-<td>cave</td>
-<td>Skylake-Y</td>
-</tr>
-<tr>
-<td>HP Chromebook 13 G1</td>
-<td>chell</td>
-<td>Skylake-Y</td>
-</tr>
-<tr>
-<td>Google Pixelbook</td>
-<td>eve</td>
-<td>Kabylake-Y</td>
-</tr>
-<tr>
-<td>HP Chromebook 14</td>
-<td>falco</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Toshiba Chromebook 2 (2015 Edition)</td>
-<td>gandof</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>ASUS Chromebox CN62</td>
-<td>guado</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Chromebook 14 for work (CP5-471)</td>
-<td>lars</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>Toshiba Chromebook</td>
-<td>leon</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer Chromebook 11 (C771, C771T)</td>
-<td>lili</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>Google Chromebook Pixel</td>
-<td>link</td>
-<td>Ivy Bridge</td>
-</tr>
-<tr>
-<td>Dell Chromebook 13 7310</td>
-<td>lulu</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Acer Chromebox</td>
-<td>mccloud</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>LG Chromebase 22CV241</td>
-<td>monroe</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>LG Chromebase 22CB25S</td>
-<td>monroe</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer Chromebook 11 (C740)</td>
-<td>paine</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>ASUS Chromebox CN60</td>
-<td>panther</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer C720 Chromebook</td>
-<td>peppy</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer Chromebox CXI2</td>
-<td>rikku</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Google Chromebook Pixel (2015)</td>
-<td>samus</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Thinkpad 13 Chromebook</td>
-<td>sentry</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>Lenovo Thinkpad X131e Chromebook</td>
-<td>stout</td>
-<td>Ivy Bridge</td>
-</tr>
-<tr>
-<td>Lenovo ThinkCentre Chromebox</td>
-<td>tidus</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Dell Chromebox</td>
-<td>tricky</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Dell Chromebook 11</td>
-<td>wolf</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer Chromebook 15 (CB5-571)</td>
-<td>yuna</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>HP Chromebox CB1-(000-099)</td>
-<td>HP Chromebox G1</td>
-<td>HP Chromebox for Meetings</td>
-<td>zako</td>
-<td>Haswell</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/licensing/building-a-distro/index.md b/chromium/docs/website/site/chromium-os/licensing/building-a-distro/index.md
deleted file mode 100644
index 5520959b419..00000000000
--- a/chromium/docs/website/site/chromium-os/licensing/building-a-distro/index.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/licensing
- - Licensing in Chromium OS
-page_name: building-a-distro
-title: Licensing Handling For OS Builders
----
-
-[TOC]
-
-Note: This is not legal advice; if you want that, consult a lawyer. This section
-discusses purely technical measures that are available to builders. Also be
-aware that this system is not perfect, and may make mistakes. You should not
-rely on it to fulfill legal obligations.
-
-## Introduction
-
-The Chromium OS build system provides a method for automatically tracking
-licenses used by packages that are built & installed. This allows you to easily
-generate an image that only contains code that is under an FOSS license (e.g. a
-BSD or GPL variant). It also allows you to set even more restrictive guidelines
-such as only building packages that fall under BSD style licenses (thus
-filtering out all other licenses such as GPL), or filtering out specific
-licenses such as the GPL-3.
-
-This is all done via the ACCEPT_LICENSE make.conf variable.
-
-Note: The implication of ACCEPT_LICENSE is that you are accepting the terms of
-every license that ends up in the image. Be sure to review each one that is
-listed to verify this is OK for your needs.
-
-## Syntax
-
-The ACCEPT_LICENSE variable is a whitespace delimited list of elements. Each
-element takes the form of:
-
-* an explicit license name (e.g. "GPL-2" or "BSD")
-* a license group name (starts with an "@")
-* a glob that means "all licenses"
-
-Each of these elements can be prefixed with a "-" to mean you want to remove
-that specific element from the accepted list.
-
-The list is incremental. That means later values add on to previous ones, so "a
-b -a" is equivalent to "b".
-
-### Examples
-
-Accept all licenses except for the EULA group:
-
-```none
- ACCEPT_LICENSE="* -@EULA"
-```
-
-Accept only the BSD and GPL-2 license:
-
-```none
- ACCEPT_LICENSE="BSD GPL-2"
-```
-
-Accept all Free Software licenses, except for the GPL-3:
-
-```none
- ACCEPT_LICENSE="@FREE -GPL-3"
-```
-
-## Default Accepted Licenses
-
-The default set of licenses that Chromium OS accepts are:
-
-```none
-$ portageq envvar ACCEPT_LICENSE
-* -@EULA -@CHROMEOS
-```
-
-This means all licenses that the system knows about, except for ones that
-require explicit EULA agreements, and ones in the CHROMEOS group. In practice,
-this means all licenses considered Free Software (either officially by the OSI
-or FSF, or follow the FSF guidelines), and licenses that allow for binary
-redistribution (e.g. firmware for hardware devices).
-
-## Accepting Additional Licenses
-
-Sometimes when you try building for a board, you might run into errors like:
-
-```none
-  The following license changes are necessary to proceed:
-  #required by virtual/opengles-2-r2, required by chromeos-base/chromeos-0.0.1-r181[opengles], required by chromeos-base/chromeos (argument)
-  >=media-libs/mali-drivers-bin-0.45-r96 Google-TOS 
-```
-
-This is telling you that the package you're attempting to pull in (either
-directly, or by other packages) is using a license that has not been accepted
-(by virtue of being listed in the ACCEPT_LICENSE variable). You need to review
-this specific license, make sure you're OK with the terms of it, and then either
-agree to it, or find another way of building things that do not use this
-package.
-
-If you do agree to the license, you can declare that intention in a couple of
-ways:
-
-* update the make.conf file in your board's overlay and set
- ACCEPT_LICENSE in there
-* update the /etc/make.conf.user file in your chroot and set
- ACCEPT_LICENSE in there
-* \`export ACCEPT_LICENSE="...some values..."\` in your shell -- note
- that you'll have to re-export this every time you enter the chroot
- via \`cros_sdk\`
-* if you're running build_packages, use the --accept_licenses flag to
- pass an explicit list -- note that this flag must be included every
- time you run build_packages \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/licensing/index.md b/chromium/docs/website/site/chromium-os/licensing/index.md
deleted file mode 100644
index 95f6bc62041..00000000000
--- a/chromium/docs/website/site/chromium-os/licensing/index.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: licensing
-title: Licensing in Chromium OS
----
-
-**Note: This is not legal advice; if you want that, consult a lawyer. This
-section discusses purely technical measures that are available in the Chromium
-OS distribution.**
-
-Select the area that you're interested in:
-
-* [Licensing Handling For Package
- Owners](/chromium-os/licensing/licensing-for-chromiumos-package-owners)
- * e.g. people writing ebuilds
-* [Licensing Handling For OS
- Builders](/chromium-os/licensing/building-a-distro)
- * e.g. people generating images
-* [Internal Licensing Handling For Chromium OS
- Developers](/chromium-os/licensing/licensing-for-chromiumos-developers)
- * e.g. people dealing with the license generation logic
-
-## Chrome OS Devices
-
-Chrome OS credits all the open source projects used in each version of Chrome OS
-on each device.
-
-There is no single license file that is correct for all devices and all
-versions, so please go to settings/help (or type chrome://help) and click on
-"open source software" (or type chrome://credits and chrome://os-credits).
-
-If you would like an online version, a necessarily not up to date version of the
-OS credits can be found here:
-<https://chromium.googlesource.com/chromium/src/+/91e5715acfa6cac439f98438f1bedade3d863b9a/chrome/browser/resources/chromeos/about_os_credits.html> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-developers/index.md b/chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-developers/index.md
deleted file mode 100644
index 6daf4a4a9d3..00000000000
--- a/chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-developers/index.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/licensing
- - Licensing in Chromium OS
-page_name: licensing-for-chromiumos-developers
-title: Licensing for Chromium OS Developers
----
-
-User oriented documentation is here: [Licensing for Chromium OS Package
-Owners](/chromium-os/licensing/licensing-for-chromiumos-package-owners)
-
-## Goal
-
-Chrome OS ships with an html file that should contain a list of all the licenses
-used by packages shipped with Chrome OS. We also chose to include some build
-packages in the license output and while most are not required to be listed, we
-included them to include some required build packages that provide static
-libraries (.a) linked in other projects and therefore part of Chrome OS, but not
-part of the package list.
-
-[licences.py](https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/licensing/licenses.py)
-is currently meant to run inside a cros_sdk chroot after you have built an
-x86-alex board, it will ask portage for the list of packages installed by the
-build, and then retrieve the list of packages and their licenses. This is done
-by parsing the ebuild and if the license is set to something like MIT or BSD,
-we’re forced to unpack the source and look for a license file for copyright
-attribution, which is required by the BSD and MIT style licenses.
-
-Note that we just happened to pick x86-alex and use its license on all boards as
-a stopgap. This is not ideal, just what we’re doing for now.
-
-Once all the licenses have been gathered, the script factors out the licenses
-used by multiple packages by listing them at the end and creating pointers to
-them, and then generates an HTML file that will be located under
-/opt/google/chrome/resources/about_os_credits.html on the generated image.
-
-## Howto
-
-* get an internal manifest/build of Chrome OS (not external)
-* TODO: add instructions of how to get a release branch if it’s been
- cut, or how to do licensing the day of or the day before the branch
- will be cut (will become obsolete once licensing is part of the
- image build)
-* build it:
-
- ```none
- $ board=x86-alex
- $ ./build_packages --board=$board --nowithautotest --nowithtest --nowithdev --nowithfactory
- ```
-
-* read the comments at the top of licenses.py for more instructions
-
-## Pointers
-
-* `chromite/licensing/` is the code that currently does all the work.
-* Custom licenses (licenses referred by non Gentoo ebuilds) are placed
- in ~/trunk/src/third_party/chromiumos-overlay/licenses
-* The code will look in
- `~/trunk/src/third_party/chromiumos-overlay/licenses/copyright-attribution/<category>/<pkgname>[-ver][-rel]`
- for MIT and BSD packages for a license you may have placed there
- instead of trying to unpack the source and scanning for a license
- file. This is required for packages that have a BSD like license but
- then fail to include a license in their source code, making it
- impossible for the code to fulfill the copyright attribution
- requirement.
-
-## HOWTO
-
-This is how you re-generate licensing for a few packages after fixing their
-license:
-
-```none
-(cr) ~/trunk/chromite/licensing $ for i in dev-util/libc-bench-0.0.1-r6 x11-libs/libdrm-2.4.52 x11-libs/libdrm-tests-2.4.52-r1 x11-libs/xcb-util-wm-0.3.8 x11-libs/xcb-util-renderutil-0.3.8 x11-libs/xcb-util-image-0.3.8 x11-libs/xcb-util-0.3.8 x11-libs/xcb-util-keysyms-0.3.8; do
-  ./licenses --debug --board  $board -p $i --generate -o  out-single.html 2>&1 | tee out-single
-done
-```
-
-This will regenerate the licensing bits just for those packages, and then you
-can generate the license file with:
-
-```none
-(cr) ~/trunk/chromite/licensing $ ./licenses --debug --board  $board  --all-packages -o  outall.html 2>&1 | tee outall
-```
-
-But we only really want a subset of this (without --all-packages):
-
-```none
-(cr) ~/trunk/chromite/licensing $ ./licenses --debug --board  $board -o  out.html 2>&1 | tee out
-```
-
-After that, we compare with the last generated file in chrome:
-
-```none
-~/chromiumos/chromite/licensing$ cp /usr/local/google2/chromeos/about_os_credits.html .
-(cr) ~/trunk/chromite/licensing $ ../bin/diff_license_html about_os_credits.html out.html | tee diff
-<lots of output, review that>
-```
-
-## How the license generation can fail and exit
-
-The code has multiple asserts. They should be self documenting for us, but they
-are not meant to be understandable for the end user, so I’m not going to list
-them here. Also, I can’t say how they would happen since the whole point is that
-they catch cases that aren’t supposed to happen :)
-
-I’ll list a few special ones.
-
-### raise AssertionError("%s: Can't parse || in the middle of a license: %s"
-
-This shows that the code isn’t smart enough to handle || in the middle of an
-ebuild. Doing so would involve more code and a recursive parser or something
-more complicated, and currently we haven’t needed it.
-
-If you find this, see if the LICENSE field in the ebuild can be simplified to
-remove the complicated syntax (basically analyse what it says, and simplify it
-to pick one license that applies to us most instead of the list of licenses in
-the || ( lic1 lic2 lic3 ) OR block.
-
-TODO: the code should handle this syntax by importing the gentoo ebuild parser.
-
-### raise AssertionError("license %s could not be found in %s"
-
-This will happen if a license specified in LICENSE= doesn’t exist anywhere in
-STOCK_LICENSE_DIRS and CUSTOM_LICENSE_DIRS.
-
-Arguably this should likely be a better error message instead of an assert and
-once the presubmit that stops a non existing license to be referred to exists,
-this code should never have to trigger.
-
-See <http://crbug.com/318364>
-
-### Assert DO NOT USE OUTPUT!!!
-
-This one runs at the end, but tells the user to scroll back up and find the
-relevant message in the logs for that package.
-
-It’s not super user friendly, maybe it should capture all those logs so that it
-can print them again at the end?
-
-Note that the script is recommended to be run as
-
-%(prog)s \[--debug\] $board out.html 2&gt;&1 | tee output.sav
-
-so that you can look in output.sav and scroll back up for the errors relevant to
-each package.
-
-### raise PackageLicenseError()
-
-This one comes with a suitable logging.error:
-
-logging.error("""
-%s: unable to find usable license.
-Typically this will happen because the ebuild says it's MIT or BSD, but there
-was no license file that this script could find to include along with a
-copyright attribution (required for BSD/MIT).
-If this is Google source, please change
-LICENSE="BSD"
-to
-LICENSE="BSD-Google"
-If not, go investigate the unpacked source in %s,
-and find which license to assign. Once you found it, you should copy that
-license to a file under %s
-(unless you can modify LICENSE_FILENAMES to pick up a license file that isn't
-being scraped currently).""",
-
-## TODO for the code
-
-* See the rollup tracking bug and dependents:
- <http://crbug.com/197970>
-* licenses.py has plenty of TODOs and FIXME in the comments, please
- look at them :)
-* The goal is to run licensing on every new package built and
- submitted. There are a few ways to do this:
- 1. Know which packages will be shipped, generate license bits for
- each package as they are being built (and ignore this for non
- shipping packages). Once the image is built, the license bits
- are concatenated. See <http://crbug.com/207004>
- * knowing which packages will be shipped is non trivial.
- Generating licensing for all packages is better, but many
- dev and test packages will fail licensing and fixing them
- all will/would take work.
- 2. Run licensing as is, and integrate that at the end of an image
- build. This would still block packages that break licensing as
- part of the pre-CQ
- 3. Require valid licenses for all compiled packages =&gt; this is
- what we picked. Progress report of making all packages licensing
- compliant is here:
- <https://docs.google.com/a/google.com/document/d/1GK9rwdZtc--o5P63TwneOikO7A5Lf2hrQfGSJwXrgrc/edit#heading=h.46xqvmtxyqd5>
-* We will need to have very good instructions of what to do when
- licensing breaks before anything can be part of a package build, or
- added the end of an image build and to pre-CQ. DONE: Document for
- end users is here:
- <https://docs.google.com/a/google.com/document/d/1-p5Sg1m66pLPFYye4d7jiPkcJQVbfcwlBiExqc6tTpc/edit#>
-* The end goal is to have the chrome browser read the license file
- from a location in the Chrome OS tree. <http://crbug.com/271832>
- says it’ll be /opt/google/chrome/resources/about_os_credits.html
-* Obviously running licensing x86-alex and shipping that output for
- all boards is incorrect, but that’s the best we can do before the
- above points are fixed. Once chrome knows to read the license file
- from the OS, it’ll allow us to generate one license file per board.
-
-## TODO for packages
-
-* All Google authored packages should have their license in ebuild
- changed from BSD to BSD-Google. This will save the code the time to
- unpack them and scan for a license file, as well as stop excluding
- all packages in chromeos-base (see SKIPPED_CATEGORIES in the code)
-* All packages with a license of “Proprietary” or "Proprietary-Binary"
- or "Google-TOS" must be migrated to a proper license.
- * For Google-authored code, BSD-Google is usually a good fit (and
- make sure the source tree has a LICENSE file).
- * For partner/closed source code, BSD or MIT are popular choices,
- but has to be made in coordination with the partner
-* It's also about time that we define owners for each packages
- (preferably a group), and allow those owners to do the reviews and
- vet changes to the package they happen to know well. This is what we
- do for prodimage and it works well. Obviously most Linux
- distributions do the same too. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-package-owners/index.md b/chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-package-owners/index.md
deleted file mode 100644
index 15e5c2a2b06..00000000000
--- a/chromium/docs/website/site/chromium-os/licensing/licensing-for-chromiumos-package-owners/index.md
+++ /dev/null
@@ -1,184 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/licensing
- - Licensing in Chromium OS
-page_name: licensing-for-chromiumos-package-owners
-title: Licensing for Chromium OS Package Owners
----
-
-[TOC]
-
-Chrome OS Build team oriented info with more details can be found here:
-[Licensing for Chromium OS
-Developers](/chromium-os/licensing/licensing-for-chromiumos-developers)
-
-## I am creating a new package, what license do I set in the Ebuild?
-
-Google-authored open source packages typically use BSD-Google as the default
-license. It is "BSD-Google" and not "BSD" because BSD licenses require the
-licensing code to find a license file in the code with copyright attribution.
-For Google packages, we simply use BSD-Google to skip the step that looks for
-the copyright to assign (the BSD-Google contains both the BSD text and the
-copyright assignment to Google). You can find this information in the LICENSE
-file in the respective source repository.
-
-Obviously you need to clear new proprietary packages with the vendor they came
-from and legal before you can include them in Chrome OS. At that time, the
-proper license to use should be sorted out. The main requirement is to allow for
-free redistribution by anyone (Google, various partners, end users, etc...).
-
-While the license of package is being reviewed by the lawyers, you may set
-license in ebuild to "TAINTED". This special placeholder value will allow you to
-keep working on the package, and will prevent the image from being signed with
-MP keys.
-
-For firmware packages (where the file is installed into /lib/firmware/ and
-loaded into devices at runtime), you should push for a simple license that would
-allow for inclusion into
-[linux-firmware](https://chromium.googlesource.com/chromiumos/third_party/linux-firmware/+/HEAD/).
-If you view the various license files in there, you should be able to get a gist
-of what will work. Main goal is to allow for free redistribution.
-
-If you are creating a package that does not exist in Gentoo, you are responsible
-for scanning the source code of that package and setting the LICENSE field in
-the ebuild to the correct value. Note that some open source software may require
-that you list more than one license, or may be dual or tripled licensed. Feel
-free to ask [chromeos-build@google.com](mailto:chromeos-build@google.com) for
-guidance if you have questions.
-
-## You need to check in a new license
-
-### shared licenses
-
-Shared licenses are in one of these trees:
-
-* `src/third_party/chromiumos-overlay/licenses/` (custom licenses from
- us)
-* `src/third_party/portage-stable/licenses/` (stock licenses synced
- from Gentoo upstream)
-
-### single use licenses
-
-As explained in more details in "I got an error about BSD/MIT copyright
-attribution" below, single use licenses should either be in a license file
-checked in the source code tree for source we maintain ourselves, or can be
-applied in src/third_party/chromiumos-overlay/licenses/copyright-attribution/
-
-Please make sure you use the correct one.
-
-## I got an error about BSD/MIT copyright attribution
-
-### Fixing copyright attribution for pristine upstream source
-
-Code under portage-stable is synced unmodified and therefore it's not desirable
-to add a license file there because the next sync could remove it.
-
-In this case you don't want to modify the source tree, you can put a license
-mapping in src/third_party/chromiumos-overlay/licenses/copyright-attribution
-(look for README and other examples there).
-
-### Fixing copyright attribution for source we forked and modified
-
-Is the source under a directory that has overlay in its name?
-
-If this case, simply add a file called LICENSE with copyright attribution in the
-package's source tree.
-
-### Discussion on why and how
-
-The licensing script will look for a license in many different places.
-
-Usually, the license specified in the ebuild is good enough. There are however,
-exceptions. Currently, they are:
-
-```none
-# Any license listed list here found in the ebuild will make the code look for
-# license files inside the package source code in order to get copyright
-# attribution from them.
-COPYRIGHT_ATTRIBUTION_LICENSES = [
-    'BSD',    # requires distribution of copyright notice
-    'BSD-2',  # so does BSD-2 http://opensource.org/licenses/BSD-2-Clause
-    'BSD-3',  # and BSD-3? http://opensource.org/licenses/BSD-3-Clause
-    'BSD-4',  # and 4?
-    'BSD-with-attribution',
-    'MIT',
-    'MIT-with-advertising',
-    'Old-MIT',
-]
-```
-
-If the code sees any of these licenses, and the LICENSE field in the ebuild
-doesn't say something like LICENSE="|| ( BSD GPL-2 )" (if it does say that, it
-will ignore the BSD license and use the GPL-2 one that does not require
-copyright attribution), the licensing code must now look for a license that
-contains a copyright for that package.
-
-Running the licensing code with --debug shows how this is done. The logs below
-show the details but basically it will first look in
-`src/third_party/chromiumos-overlay/licenses/copyright-attribution`to see if it
-can find a license file based on the package name. Use this for packages that we
-mirror directly from gentoo and for which we don't want to modify the source
-tree.
-
-For packages that we've forked, you can instead simply add a file called LICENSE
-in the package's source tree and the licensing script will pick it up.
-
-```none
-12:11:43: INFO: RunCommand: equery-x86-alex which dev-lang/python-exec-0.3.1
-12:11:43: DEBUG: equery-x86-alex which dev-lang/python-exec-0.3.1 -> /mnt/host/source/src/third_party/portage-stable/dev-lang/python-exec/python-exec-0.3.1.ebuild
-12:11:43: INFO: RunCommand: portageq-x86-alex metadata /build/x86-alex ebuild dev-lang/python-exec-0.3.1 HOMEPAGE LICENSE DESCRIPTION
-12:11:44: INFO: Read licenses from ebuild for dev-lang/python-exec-0.3.1: BSD
-12:11:44: INFO: dev-lang/python-exec-0.3.1: can't use BSD, will scan source code for copyright
-12:11:44: DEBUG: Looking for override copyright attribution license in /mnt/host/source/src/third_party/chromiumos-overlay/licenses/copyright-attribution/dev-lang/python-exec-0.3.1
-12:11:44: DEBUG: Looking for override copyright attribution license in /mnt/host/source/src/third_party/chromiumos-overlay/licenses/copyright-attribution/dev-lang/python-exec-0.3.1
-12:11:44: DEBUG: Looking for override copyright attribution license in /mnt/host/source/src/third_party/chromiumos-overlay/licenses/copyright-attribution/dev-lang/python-exec
-12:11:44: INFO: RunCommand: ebuild-x86-alex /mnt/host/source/src/third_party/portage-stable/dev-lang/python-exec/python-exec-0.3.1.ebuild clean fetch
-12:11:44: INFO: RunCommand: ebuild-x86-alex /mnt/host/source/src/third_party/portage-stable/dev-lang/python-exec/python-exec-0.3.1.ebuild unpack
-12:11:46: INFO: >>> Unpacking python-exec-0.3.1.tar.bz2 to /build/x86-alex/tmp/portage/dev-lang/python-exec-0.3.1/work
-12:11:46: INFO: >>> Source unpacked in /build/x86-alex/tmp/portage/dev-lang/python-exec-0.3.1/work
-12:11:46: INFO: RunCommand: portageq-x86-alex envvar PORTAGE_TMPDIR
-12:11:46: INFO: RunCommand: find /build/x86-alex/tmp/portage/dev-lang/python-exec-0.3.1/work -type f
-12:11:47: ERROR:
-dev-lang/python-exec-0.3.1: unable to find usable license.
-Typically this will happen because the ebuild says it's MIT or BSD, but there
-was no license file that this script could find to include along with a
-copyright attribution (required for BSD/MIT).
-If this is Google source, please change
-LICENSE="BSD"
-to
-LICENSE="BSD-Google"
-If not, go investigate the unpacked source in /build/x86-alex/tmp/portage/dev-lang/python-exec-0.3.1/work,
-and find which license to assign.  Once you found it, you should copy that
-license to a file under /mnt/host/source/src/third_party/chromiumos-overlay/licenses/copyright-attribution
-(or you can modify LICENSE_FILENAMES to pickup a license file that isn't
-being scraped currently).
-```
-
-To fix this error, I looked at the ebuild, found that the source is in
-<https://bitbucket.org/mgorny/python-exec/src/> and found a copyright notice in
-python-exec.c.
-
-I then created a BSD file from another one:
-
-```none
-third_party/chromiumos-overlay/licenses/copyright-attribution$ cp ./dev-util/bsdiff dev-lang/python-exec
-```
-
-I then edited that new file and put the proper name for the copyright.
-
-## How will licensing work?
-
-The license file is currently generated after the fact with
-<https://chromium.googlesource.com/chromiumos/chromite/+/HEAD/licensing/licenses.py>
-
-Once all packages are fixed to pass licensing (we have some left to fix, and
-it's time consuming when we don't have easy to Email owners for each package,
-hence request #4 above), licensing will be run for each package after it is
-built and error out if the license isn't valid or can't be retrieved.
-
-The end state is explained here:
-<https://code.google.com/p/chromium/issues/detail?id=207004>
-<https://code.google.com/p/chromium/issues/detail?id=271832>
-<https://code.google.com/p/chromium/issues/detail?id=271851> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/mds-on-chromeos/index.md b/chromium/docs/website/site/chromium-os/mds-on-chromeos/index.md
deleted file mode 100644
index 3e6e78d0fdc..00000000000
--- a/chromium/docs/website/site/chromium-os/mds-on-chromeos/index.md
+++ /dev/null
@@ -1,253 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: mds-on-chromeos
-title: Microarchitectural Data Sampling on Chrome OS
----
-
-Microarchitectural Data Sampling on Chrome OS
-
-(CVE-2018-12126, CVE-2018-12127, CVE-2018-12130, and CVE-2019-11091)
-
-# Vulnerability Impact
-
-Microarchitectural Data Sampling (MDS) is a group of vulnerabilities that allow
-an attacker to potentially read sensitive data. If Chrome processes are
-attacked, these sensitive data could include website contents as well as
-passwords, credit card numbers, or cookies. The vulnerabilities can also be
-exploited to read host memory from inside a virtual machine, or for an Android
-App to read privileged process memory (e.g. keymaster). See below for affected
-devices.
-
-# Chrome OS Response
-
-To protect users, Chrome OS 74 disables Hyper-Threading by default. For the
-majority of our users, whose workflows are primarily interactive, this mitigates
-the security risk of MDS without a noticeable loss of responsiveness. Chrome OS
-75 will contain additional mitigations.
-
-Users concerned about the performance loss, such as those running CPU intensive
-workloads, may enable Hyper-Threading on a per machine basis. The setting is
-located at chrome://flags#scheduler-configuration. The "performance" setting
-chooses the configuration that enables Hyper-Threading. The "conservative"
-setting chooses the configuration that disables Hyper-Threading.
-
-Enterprises who wish to set Hyper-Threading policy organizationally may use the
-enterprise policy named “SchedulerConfiguration.”
-
-## Hyper-Threading Policy Guidance
-
-The decision to disable or enable Hyper-Threading is a security versus
-performance tradeoff. With Hyper-Threading disabled, Intel CPUs may experience
-reduced performance, which varies depending on the workload. But, with
-Hyper-Threading enabled, users could execute code, such as by visiting a website
-or running an Android app, that exploits MDS to read sensitive memory contents.
-
-As of May 14th, 2019, Google is not aware of any active exploitation of the MDS
-vulnerabilities. Users and customers who process particularly sensitive data on
-their Chrome OS devices are nonetheless advised to disable Hyper-Threading as a
-measure of caution.
-
-# Vulnerability Description
-
-Microarchitectural Data Sampling (MDS) refers to a set of speculative execution
-side-channel vulnerabilities which potentially allow results from previous
-execution on a core to be observed across security boundaries via
-microarchitectural state, on certain Intel CPUs. They are described in [Intel's
-announcement](https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00233.html),
-and referred to as
-MSBDS/[CVE-2018-12126](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-12126),
-MLPDS/[CVE-2018-12127](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-12127),
-MFBDS/[CVE-2018-12130](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-12130),
-and
-MDSUM/[CVE-2019-11091](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2019-11091).
-See below for more details.
-
-## Microarchitectural Store Buffer Data Sampling (MSBDS) and Microarchitectural Fill Buffer Data Sampling (MFBDS)
-
-(CVE-2018-1212 and CVE-2018-12130 respectively)
-
-Intel CPUs use microarchitectural data structures known as the fill buffer and
-store buffer. The fill buffer contains loaded data pending insertion into the L1
-cache. The store buffer contains stored data pending write to the memory
-subsystem. Concurrently executing threads, on the same physical CPU core, may
-potentially read the contents of prior entries for these buffers by observing
-timing side channels when speculatively executed.
-
-## Microarchitectural Load Port Data Sampling (MLPDS)
-
-(CVE-2018-12127)
-
-Load ports are used by the CPUs to perform load operations from memory or I/O.
-The bus in the load ports may retain data from old operations, allowing one
-process to leak data from another process through speculative execution side
-channels.
-
-## Microarchitectural Data Sampling Uncacheable Memory (MDSUM)
-
-(CVE-2019-11091)
-
-Uncacheable memory (UC) is read from RAM without filling the CPU’s cache with a
-new line. However, uncacheable memory does still move through the store buffers,
-fill buffers, and load ports;allowing data stored in UC regions to still be
-leaked via the mechanisms described above.
-
-# Affected Devices
-
-Chrome OS devices with affected Intel CPUs, supported as of May 14th, 2019, are
-as follows:
-
- AOpen Chromebase Commercial
-
- AOpen Chromebox Commercial
-
- ASI Chromebook
-
- ASUS Chromebook C200MA
-
- ASUS Chromebook C300MA
-
- ASUS Chromebook Flip C302
-
- ASUS Chromebox 3
-
- ASUS Chromebox CN60
-
- ASUS Chromebox CN62
-
- Acer C720 Chromebook
-
- Acer Chromebase 24
-
- Acer Chromebook 11 (C740)
-
- Acer Chromebook 11 (C771 / C771T)
-
- Acer Chromebook 13 (CB713-1W )
-
- Acer Chromebook 15 (C910 / CB5-571)
-
- Acer Chromebook 15 (CB3-531)
-
- Acer Chromebook Spin 13 (CP713-1WN)
-
- Acer Chromebox
-
- Acer Chromebox CXI2
-
- Acer Chromebox CXI3
-
- Bobicus Chromebook 11
-
- CTL Chromebox CBx1
-
- CTL N6 Education Chromebook
-
- Chromebook 11 (C730 / CB3-111)
-
- Chromebook 11 (C735)
-
- Chromebook 14 for work (CP5-471)
-
- Chromebox Reference
-
- Consumer Chromebook
-
- Crambo Chromebook
-
- Dell Chromebook 11
-
- Dell Chromebook 11 (3120)
-
- Dell Chromebook 13 3380
-
- Dell Chromebook 13 7310
-
- Dell Chromebox
-
- Dell Inspiron Chromebook 14 2-in-1 7486
-
- Education Chromebook
-
- eduGear Chromebook R
-
- Edxis Chromebook
-
- Edxis Education Chromebook
-
- Google Chromebook Pixel (2015)
-
- Google Pixelbook
-
- HEXA Chromebook Pi
-
- HP Chromebook 11 2100-2199 / HP Chromebook 11 G3
-
- HP Chromebook 11 2200-2299 / HP Chromebook 11 G4/G4 EE
-
- HP Chromebook 13 G1
-
- HP Chromebook 14
-
- HP Chromebook 14 ak000-099 / HP Chromebook 14 G4
-
- HP Chromebook x2
-
- HP Chromebook x360 14
-
- HP Chromebox CB1-(000-099) / HP Chromebox G1/ HP Chromebox for Meetings
-
- HP Chromebox G2
-
- Haier Chromebook 11 G2
-
- JP Sa Couto Chromebook
-
- LG Chromebase 22CB25S
-
- LG Chromebase 22CV241
-
- Lenovo 100S Chromebook
-
- Lenovo N20 Chromebook
-
- Lenovo N21 Chromebook
-
- Lenovo ThinkCentre Chromebox
-
- Lenovo ThinkPad 11e Chromebook
-
- Lenovo Thinkpad X131e Chromebook
-
- M&A Chromebook
-
- Pixel Slate
-
- RGS Education Chromebook
-
- Samsung Chromebook 2 11 - XE500C12
-
- Samsung Chromebook Plus (LTE)
-
- Samsung Chromebook Plus (V2)
-
- Samsung Chromebook Pro
-
- Senkatel C1101 Chromebook
-
- Thinkpad 13 Chromebook
-
- Toshiba Chromebook
-
- Toshiba Chromebook 2
-
- Toshiba Chromebook 2 (2015 Edition)
-
- True IDC Chromebook
-
- Videonet Chromebook
-
- ViewSonic NMP660 Chromebox
-
- Yoga C630 Chromebook \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/meltdown-spectre-vulnerability-status/index.md b/chromium/docs/website/site/chromium-os/meltdown-spectre-vulnerability-status/index.md
deleted file mode 100644
index ff0953344bb..00000000000
--- a/chromium/docs/website/site/chromium-os/meltdown-spectre-vulnerability-status/index.md
+++ /dev/null
@@ -1,1454 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: meltdown-spectre-vulnerability-status
-title: Meltdown/Spectre vulnerability status for Chrome OS devices
----
-
-This page details status for Chrome OS devices regarding the [Meltdown and
-Spectre vulnerabilities](https://meltdownattack.com/), also known as
-["speculative execution vulnerabilities" described by Google Project
-Zero](https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html).
-
-(Previously located at
-<https://www.chromium.org/chrome-os-devices-and-kernel-versions>.)
-
-[TOC]
-
-## Meltdown
-
-Google has been working on updates that contain the Kernel Page Table Isolation
-(KPTI) mitigation for Meltdown. ARM Chrome OS devices are not affected by
-Meltdown. Most Intel devices received KPTI with M63. All Intel devices have
-received KPTI with M66, and therefore all Intel Chrome OS devices are now
-protected against Meltdown.
-
-(2018-May-22: Updated to note that all Intel devices are now protected against
-Meltdown.)
-
-### Variant 3 ([CVE-2017-5754](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5754))
-
-The following subsections indicate the vulnerability status of Chrome OS
-hardware for Variant 3
-([CVE-2017-5754](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5754)),
-which is also referred to as Meltdown.
-
-#### Protection against Variant 3
-
-These devices have received the KPTI / KAISER patch in Chrome OS 63 and are
-protected against Meltdown:
-
-<table>
-<tr>
-
-<td><b>Marketing name</b></td>
-
-<td><b>Public codename</b></td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 13 3380</td>
-
-<td>asuka</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB3-532)</td>
-
-<td>banon</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Pro</td>
-
-<td>caroline</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip C302</td>
-
-<td>cave</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 3</td>
-
-<td>celes</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 13 G1</td>
-
-<td>chell</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook R11 (CB5-132T / C738T)</td>
-
-<td>cyan</td>
-
-</tr>
-<tr>
-
-<td>Chromebook 14 (CB3-431)</td>
-
-<td>edgar</td>
-
-</tr>
-<tr>
-
-<td>Chromebook 11 Model 3180</td>
-
-<td>kefka</td>
-
-</tr>
-<tr>
-
-<td>Chromebook 14 for work (CP5-471)</td>
-
-<td>lars</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C771, C771T)</td>
-
-<td>lili</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G5 EE</td>
-
-<td>locke</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N23 Chromebook</td>
-
-<td>reks</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N23 Chromebook (Touch)</td>
-
-<td>reks</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N42 (Touch) Chromebook</td>
-
-<td>reks</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N22 (Touch) Chromebook</td>
-
-<td>reks</td>
-
-</tr>
-<tr>
-
-<td>Mecer V2 Chromebook</td>
-
-<td>relm</td>
-
-</tr>
-<tr>
-
-<td>Edxis Education Chromebook</td>
-
-<td>relm</td>
-
-</tr>
-<tr>
-
-<td>CTL NL61 Chromebook</td>
-
-<td>relm</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11 3189</td>
-
-<td>sabin</td>
-
-</tr>
-<tr>
-
-<td>Thinkpad 13 Chromebook</td>
-
-<td>sentry</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G5 / HP Chromebook 11-vxxx</td>
-
-<td>setzer</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C202SA</td>
-
-<td>terra</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C300SA/C301SA</td>
-
-<td>terra13</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 N7 (C731)</td>
-
-<td>tifa</td>
-
-</tr>
-<tr>
-
-<td>ThinkPad 11e Chromebook 3rd Gen (Yoga/Clamshell)</td>
-
-<td>ultima</td>
-
-</tr>
-<tr>
-
-<td>Multilaser M11C Chromebook</td>
-
-<td>wizpig</td>
-
-</tr>
-<tr>
-
-<td>Viglen Chromebook 360</td>
-
-<td>wizpig</td>
-
-</tr>
-<tr>
-
-<td>PCMerge Chromebook PCM-116T-432B</td>
-
-<td>wizpig</td>
-
-</tr>
-<tr>
-
-<td>Edugear CMT Chromebook</td>
-
-<td>wizpig</td>
-
-</tr>
-<tr>
-
-<td>CTL J5 Chromebook</td>
-
-<td>wizpig</td>
-
-</tr>
-<tr>
-
-<td>Prowise ProLine Chromebook</td>
-
-<td>wizpig</td>
-
-</tr>
-<tr>
-
-<td>Haier Convertible Chromebook 11 C</td>
-
-<td>wizpig</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB3-531)</td>
-
-<td>banjo</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C213NA</td>
-
-<td>basking</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11 (3120)</td>
-
-<td>candy</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N20 Chromebook</td>
-
-<td>clapper</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook Spin 11 (R751T)</td>
-
-<td>electro</td>
-
-</tr>
-<tr>
-
-<td>JP Sa Couto Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>ASI Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>eduGear Chromebook R</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>Videonet Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>True IDC Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>Crambo Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>RGS Education Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>Edxis Education Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>Senkatel C1101 Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>M&A Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>CTL N6 Education Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>Education Chromebook</td>
-
-<td>enguarde</td>
-
-</tr>
-<tr>
-
-<td>Google Pixelbook</td>
-
-<td>eve</td>
-
-</tr>
-<tr>
-
-<td>Edxis Chromebook</td>
-
-<td>expresso</td>
-
-</tr>
-<tr>
-
-<td>Bobicus Chromebook 11</td>
-
-<td>expresso</td>
-
-</tr>
-<tr>
-
-<td>HEXA Chromebook Pi</td>
-
-<td>expresso</td>
-
-</tr>
-<tr>
-
-<td>Consumer Chromebook</td>
-
-<td>expresso</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 11e Chromebook</td>
-
-<td>glimmer</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C730 / C730E)</td>
-
-<td>gnawty</td>
-
-</tr>
-<tr>
-
-<td>Chromebook 11 (C735)</td>
-
-<td>gnawty+</td>
-
-</tr>
-<tr>
-
-<td>Haier Chromebook 11 G2</td>
-
-<td>heli</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N21 Chromebook</td>
-
-<td>hoofer</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 2100-2199 / HP Chromebook 11 G3</td>
-
-<td>kip</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 2200-2299 / HP Chromebook 11 G4 / G4 EE</td>
-
-<td>kip</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 14 ak000-099 / HP Chromebook 14 G4</td>
-
-<td>kip14</td>
-
-</tr>
-<tr>
-
-<td>AOpen Chromebox Commercial</td>
-
-<td>ninja</td>
-
-</tr>
-<tr>
-
-<td>Lenovo 100S Chromebook</td>
-
-<td>orco</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Thinkpad 11e Chromebook (4th Gen) / Lenovo Thinkpad Yoga 11e Chromebook (4th Gen)</td>
-
-<td>pyro</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C300MA</td>
-
-<td>quawks</td>
-
-</tr>
-<tr>
-
-<td>Chromebook 15 CB515-1HT/1H</td>
-
-<td>sand</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x360 11 G1 EE</td>
-
-<td>snappy</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C200MA</td>
-
-<td>squawks</td>
-
-</tr>
-<tr>
-
-<td>AOpen Chromebase Commercial</td>
-
-<td>sumo</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook 2</td>
-
-<td>swanky</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 11 - XE500C12</td>
-
-<td>winky</td>
-
-</tr>
-</table>
-
-#### Older Intel devices
-
-These devices with kernel 3.14 have received the KPTI / KAISER patch in Chrome
-OS 65 and are protected against Meltdown:
-
-<table>
-<tr>
-
-<td><b>Marketing name</b></td>
-
-<td><b>Public codename</b></td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebase 24</td>
-
-<td>buddy</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook 2 (2015 Edition)</td>
-
-<td>gandof</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebox CN62</td>
-
-<td>guado</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 13 7310</td>
-
-<td>lulu</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C740)</td>
-
-<td>paine</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebox CXI2</td>
-
-<td>rikku</td>
-
-</tr>
-<tr>
-
-<td>Google Chromebook Pixel (2015)</td>
-
-<td>samus</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkCentre Chromebox</td>
-
-<td>tidus</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB5-571)</td>
-
-<td>yuna</td>
-
-</tr>
-</table>
-
-These devices with kernel 3.8 have received the KPTI / KAISER patch in Chrome OS
-66 and are protected against Meltdown:
-
-<table>
-<tr>
-
-<td><b>Marketing name</b></td>
-
-<td><b>Public codename</b></td>
-
-</tr>
-<tr>
-
-<td>HP Pavilion Chromebook 14</td>
-
-<td>butterfly</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 14</td>
-
-<td>falco</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook</td>
-
-<td>leon</td>
-
-</tr>
-<tr>
-
-<td>Google Chromebook Pixel</td>
-
-<td>link</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebox</td>
-
-<td>mccloud</td>
-
-</tr>
-<tr>
-
-<td>LG Chromebase 22CB25S</td>
-
-<td>monroe</td>
-
-</tr>
-<tr>
-
-<td>LG Chromebase 22CV241</td>
-
-<td>monroe</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebox CN60</td>
-
-<td>panther</td>
-
-</tr>
-<tr>
-
-<td>Acer C720 Chromebook</td>
-
-<td>peppy</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Thinkpad X131e Chromebook</td>
-
-<td>stout</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebox Series 3</td>
-
-<td>stumpy</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebox</td>
-
-<td>tricky</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11</td>
-
-<td>wolf</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebox CB1-(000-099) / HP Chromebox G1 / HP Chomebox for Meetings</td>
-
-<td>zako</td>
-
-</tr>
-</table>
-
-#### ARM devices
-
-ARM Chrome OS devices are **not affected** by Meltdown. This applies to the
-following devices:
-
-<table>
-<tr>
-
-<td><b>Marketing name</b></td>
-
-<td><b>Public codename</b></td>
-
-</tr>
-<tr>
-
-<td>Poin2 Chromebook 14</td>
-
-<td>birch</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook R13 (CB5-312T)</td>
-
-<td>elm</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N23 Yoga/Flex 11 Chromebook</td>
-
-<td>hana</td>
-
-</tr>
-<tr>
-
-<td>Poin2 Chromebook 11C</td>
-
-<td>hanawl</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip C101PA</td>
-
-<td>bob</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Plus</td>
-
-<td>kevin</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 13"</td>
-
-<td>pi</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 11"</td>
-
-<td>pit</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 2000-2099 / HP Chromebook 11 G2</td>
-
-<td>skate</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook</td>
-
-<td>snow</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 1100-1199 / HP Chromebook 11 G1</td>
-
-<td>spring</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 13 (CB5-311)</td>
-
-<td>big</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 14 x000-x999 / HP Chromebook 14 G3</td>
-
-<td>blaze</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebase</td>
-
-<td>kitty</td>
-
-</tr>
-<tr>
-
-<td>AOpen Chromebox Mini</td>
-
-<td>fievel</td>
-
-</tr>
-<tr>
-
-<td>Medion Akoya S2013</td>
-
-<td>jaq</td>
-
-</tr>
-<tr>
-
-<td>True IDC Chromebook 11</td>
-
-<td>jaq</td>
-
-</tr>
-<tr>
-
-<td>Xolo Chromebook</td>
-
-<td>jaq</td>
-
-</tr>
-<tr>
-
-<td>Haier Chromebook 11</td>
-
-<td>jaq</td>
-
-</tr>
-<tr>
-
-<td>VideoNet Chromebook BL10</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>Mecer Chromebook</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>Positivo Chromebook CH1190</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>Epik 11.6" Chromebook ELB1101</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>NComputing Chromebook CX100/110</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>eduGear Chromebook K Series</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>CTL J2 / J4 Chromebook for Education</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>HiSense Chromebook 11</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>Poin2 Chromebook 11</td>
-
-<td>jerry</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebit CS10</td>
-
-<td>mickey</td>
-
-</tr>
-<tr>
-
-<td>Prowise 11.6" Entry Line Chromebook</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>MEDION Chromebook S2015</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>Chromebook PCM-116E</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>Lumos Education Chromebook</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>Viglen Chromebook 11</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>Sector 5 E1 Rugged Chromebook</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>eduGear Chromebook M Series</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>Nexian Chromebook 11.6-inch</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>Haier Chromebook 11e</td>
-
-<td>mighty</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip C100PA</td>
-
-<td>minnie</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C201PA</td>
-
-<td>speedy</td>
-
-</tr>
-<tr>
-
-<td>AOpen Chromebase Mini</td>
-
-<td>tiger</td>
-
-</tr>
-</table>
-
-## Spectre
-
-The following subsections indicate Chrome OS status with respect to the Spectre
-vulnerability (also referred to as "Variant 1" and "Variant 2" in the Project
-Zero blog post). Spectre potentially allows access to data held in other
-processor execution contexts. The victim execution context (kernel or process)
-must have certain code patterns in their address space.
-
-### Variant 1 ([CVE-2017-5753](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5753))
-
-The Linux kernel has a feature called eBPF that is used to run untrusted code.
-The Project Zero blog post describes how this can be abused by attackers to
-generate vulnerable code patterns in the kernel. However, Chrome OS disables
-eBPF in its kernels and therefore is not exposed to Spectre Variant 1 via eBPF.
-Additional Spectre variant 1 mitigations available in the Chrome browser are
-described [here](/Home/chromium-security/ssca).
-
-### Variant 2 ([CVE-2017-5715](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5715))
-
-The Project Zero blog post describes how virtualization can be used to exploit
-Spectre Variant 2. Chrome OS devices that ship [Linux
-VMs](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/containers_and_vms.md)
-contain mitigations for Spectre variant 2.
-
-(2018-Oct-05: Updated to reflect usage of virtualization features on Chrome OS;
-fixes for ARM devices on kernel 3.18.)
-
-#### **Intel devices**
-
-On Intel devices we’ve deployed the
-[Retpoline](https://support.google.com/faqs/answer/7625886) compiler-based
-mitigation for all Chrome OS kernels, starting with Chrome OS 65. This
-mitigation prevents kernel-to-user, guest-to-guest, and host-to-guest
-information leaks using Spectre variant 2.
-
-#### **ARM devices**
-
-On ARM devices we’ve started integrating firmware and kernel patches [supplied
-by ARM](https://developer.arm.com/support/security-update). ARM devices will
-receive updated firmware and kernels before they enable virtualization features.
-
-Some ARM devices on 4.4 kernels received Spectre variant 2 fixes with Chrome OS
-67. These fixes were later discovered to be incomplete and updated with Chrome
-OS 70:
-
-<table>
-<tr>
-<td>Marketing name</td>
-<td>Public codename</td>
-</tr>
-<tr>
-<td> ASUS Chromebook Flip C101PA</td>
-<td> bob</td>
-</tr>
-<tr>
-<td>Samsung Chromebook Plus</td>
-<td>kevin</td>
-</tr>
-</table>
-
-Some ARM devices on 3.18 kernels will receive Spectre variant 2 fixes with
-Chrome OS 71:
-
-<table>
-<tr>
-<td><b>Marketing name</b></td>
-<td><b>Public codename</b></td>
-</tr>
-<tr>
-<td>Acer Chromebook R13 (CB5-312T)</td>
-<td>elm</td>
-</tr>
-<tr>
-<td>Poin2 Chromebook 14</td>
-<td>birch</td>
-</tr>
-<tr>
-<td>Poin2 Chromebook 11C</td>
-<td>hana</td>
-</tr>
-<tr>
-<td>Lenovo 300e/N23 Yoga/Flex 11 Chromebook</td>
-<td>hana</td>
-</tr>
-</table>
-
-## Speculative store buffer bypass (variant 4)
-
-### Vulnerability description
-
-Following on their Meltdown and Spectre research, Google's Project Zero
-disclosed a fourth variant of their speculative execution attacks, Speculative
-store buffer bypass
-([CVE-2018-3639](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3639)).
-On Chrome OS this variant affects the Chrome browser and is also mitigated by
-[Site Isolation](http://www.chromium.org/Home/chromium-security/site-isolation).
-
-### Chrome OS response
-
-Chrome OS 67 enables Site Isolation by default across the Chrome OS fleet.
-Chrome OS 67 will be released on the stable channel around June 5, 2018. Site
-isolation may increase memory use by approximately 10%. For more information on
-Site isolation, including how to enable it manually, see the [Chrome Help
-article](https://support.google.com/chrome/answer/7623121).
-
-### Affected devices
-
-Intel devices with Core processors, or Apollo Lake Atom processors, are affected
-by this variant. ARM devices with MTK8173 processors, or RK3399 processors, are
-affected by this variant. The cpu line in the chrome:system page will show what
-CPU the device has.
-
-The following list covers affected devices that will be mitigated in Chrome OS
-67:
-
-<table>
-<tr>
-<td>Marketing name</td>
-<td>Public codename</td>
-<td>Platform</td>
-</tr>
-<tr>
-<td>HP Chromebook 11 G6 EE</td>
-<td>alan</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Acer Chromebook 11 (C732, C732T, C732L & C732LT)</td>
-<td>astronaut</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Dell Chromebook 13 3380</td>
-<td>asuka</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>ASUS Chromebook C213NA</td>
-<td>basking</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>HP Chromebook 14 G5</td>
-<td>bigdaddy</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Poin2 Chromebook 14</td>
-<td>birch</td>
-<td>MTK8173</td>
-</tr>
-<tr>
-<td>ASUS Chromebook Flip C101PA</td>
-<td>bob</td>
-<td>RK3399</td>
-</tr>
-<tr>
-<td>Acer Chromebase 24</td>
-<td>buddy</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Samsung Chromebook Pro</td>
-<td>caroline</td>
-<td>Skylake-Y</td>
-</tr>
-<tr>
-<td>ASUS Chromebook Flip C302</td>
-<td>cave</td>
-<td>Skylake-Y</td>
-</tr>
-<tr>
-<td>HP Chromebook 13 G1</td>
-<td>chell</td>
-<td>Skylake-Y</td>
-</tr>
-<tr>
-<td>Acer Chromebook Spin 11 (R751T)</td>
-<td>electro</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Acer Chromebook R13 (CB5-312T)</td>
-<td>elm</td>
-<td>MTK8173</td>
-</tr>
-<tr>
-<td>Google Pixelbook</td>
-<td>eve</td>
-<td>Kabylake-Y</td>
-</tr>
-<tr>
-<td>HP Chromebook 14</td>
-<td>falco</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Toshiba Chromebook 2 (2015 Edition)</td>
-<td>gandof</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>ASUS Chromebox CN62</td>
-<td>guado</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Lenovo 300e/N23 Yoga/Flex 11 Chromebook</td>
-<td>hana</td>
-<td>MTK8173</td>
-</tr>
-<tr>
-<td>Poin2 Chromebook 11C</td>
-<td>hana</td>
-<td>MTK8173</td>
-</tr>
-<tr>
-<td>Samsung Chromebook Plus</td>
-<td>kevin</td>
-<td>RK3399</td>
-</tr>
-<tr>
-<td>Chromebook 14 for work (CP5-471)</td>
-<td>lars</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>Acer Chromebook Spin 11 (CP311-1H & CP311-1HN)</td>
-<td>lava</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Toshiba Chromebook</td>
-<td>leon</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer Chromebook 11 (C771, C771T)</td>
-<td>lili</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>Google Chromebook Pixel</td>
-<td>link</td>
-<td>Ivy Bridge</td>
-</tr>
-<tr>
-<td>Dell Chromebook 13 7310</td>
-<td>lulu</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Acer Chromebox</td>
-<td>mccloud</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>LG Chromebase 22CV241</td>
-<td>monroe</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>LG Chromebase 22CB25S</td>
-<td>monroe</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Dell Chromebook 11 5190</td>
-<td>nasher</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Dell Chromebook 11 2-in-1 5190</td>
-<td>nasher360</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Acer Chromebook 11 (C740)</td>
-<td>paine</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>ASUS Chromebox CN60</td>
-<td>panther</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer C720 Chromebook</td>
-<td>peppy</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Lenovo Thinkpad 11e Chromebook (4th Gen)</td>
-<td> Lenovo Thinkpad Yoga 11e Chromebook (4th Gen)</td>
-<td>pyro</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Acer Chromebox CXI2</td>
-<td>rikku</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Lenovo 100e Chromebook</td>
-<td>robo</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Lenovo 500e Chromebook</td>
-<td>robo360</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Google Chromebook Pixel (2015)</td>
-<td>samus</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Chromebook 15 CB515-1HT/1H</td>
-<td>sand</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Acer Chromebook 11 (CB311-8H & CB311-8HT)</td>
-<td>santa</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Thinkpad 13 Chromebook</td>
-<td>sentry</td>
-<td>Skylake-U</td>
-</tr>
-<tr>
-<td>HP Chromebook x360 11 G1 EE</td>
-<td>snappy</td>
-<td>Apollo Lake</td>
-</tr>
-<tr>
-<td>Lenovo Thinkpad X131e Chromebook</td>
-<td>stout</td>
-<td>Ivy Bridge</td>
-</tr>
-<tr>
-<td>Lenovo ThinkCentre Chromebox</td>
-<td>tidus</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>Dell Chromebox</td>
-<td>tricky</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Dell Chromebook 11</td>
-<td>wolf</td>
-<td>Haswell</td>
-</tr>
-<tr>
-<td>Acer Chromebook 15 (CB5-571)</td>
-<td>yuna</td>
-<td>Broadwell</td>
-</tr>
-<tr>
-<td>HP Chromebox CB1-(000-099)</td>
-<td> HP Chromebox G1</td>
-<td> HP Chromebox for Meetings</td>
-<td>zako</td>
-<td>Haswell</td>
-</tr>
-</table>
-
-The following list covers affected devices that are End-of-Life as of Chrome OS
-65:
-
-<table>
-<tr>
-<td>Marketing name</td>
-<td>Public codename</td>
-<td>Platform</td>
-</tr>
-<tr>
-<td>HP Pavilion Chromebook 14</td>
-<td>butterfly</td>
-<td>Sandy Bridge</td>
-</tr>
-<tr>
-<td>Samsung Chromebook Series 5 550</td>
-<td>lumpy</td>
-<td>Sandy Bridge</td>
-</tr>
-<tr>
-<td>Acer C7 Chromebook</td>
-<td>parrot</td>
-<td>Sandy Bridge / Ivy Bridge</td>
-</tr>
-<tr>
-<td>Samsung Chromebox Series 3</td>
-<td>stumpy</td>
-<td>Sandy Bridge</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.gif.sha1 b/chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.gif.sha1
deleted file mode 100644
index abc8e1e0573..00000000000
--- a/chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c7d5e5cb312359260422b0ae478276df4d07f4ae \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.pdf.sha1 b/chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.pdf.sha1
deleted file mode 100644
index 4fc899930d6..00000000000
--- a/chromium/docs/website/site/chromium-os/minimuffin/45W Type-C Adapter Control Board 150710.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-22ed701709cb18eaef0c998acca898b5d2cc734e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/minimuffin/index.md b/chromium/docs/website/site/chromium-os/minimuffin/index.md
deleted file mode 100644
index 5fa3e93f7ba..00000000000
--- a/chromium/docs/website/site/chromium-os/minimuffin/index.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: minimuffin
-title: 45W USB Type-C charging adapter control board
----
-
-[TOC]
-
-## Overview
-
-The 45W USB Type-C charging adapter control board implements the controls for a
-charging adapter for a USB Type-C enabled device.
-
-## Hardware Capabilities
-
-This board provides the following features, to enable USB Type-C based power
-charger design:
-
-* BMC (Biphase Mark Coding) used for USB PD (Power Delivery)
- communication over the CC wire
-* Support 20V/12V/5V@ 2.25A and up to 45W
-* Support OCP (Over Current Protection) / OVP (Over Voltage
- Protection) at adapter's secondary side
-
-### <img alt="image"
-src="/chromium-os/minimuffin/45W%20Type-C%20Adapter%20Control%20Board%20150710.gif"
-height=259 width=400>
-
-For schematic, see the attached file at the bottom of this page.
-
-## Firmware Source Code
-
-The firmware is located In the Chromium Embedded Controller repository under
-*[board/zinger/](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/zinger/)*
-:
-
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/zinger/>
-
-### Building Firmware
-
-Within your Chromium OS chroot, the syntax is:
-
-```none
-cd ~/trunk/src/platform/ec
-make BOARD=zinger
-```
-
-### Flashing Firmware
-
-The firmware is normally flashed via the kernel, as part of the Chrome OS
-Auto-Update process. Payloads are located in `/lib/firmware/cros-pd`.
-
-When the adapter is connected to a Chrome device, you can manually flash the
-read-write firmware as follows:
-
-```none
-ectool --cros_pd flashpd 4 <port> /tmp/zinger.ec.RW.bin
-```
-
-The device must be in developer mode to run the `ectool` command. After running
-this command, the firmware is located in
-`~/trunk/src/platform/ec/build/zinger/ec.bin` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/energy-aware-scheduling/index.md b/chromium/docs/website/site/chromium-os/obsolete/energy-aware-scheduling/index.md
deleted file mode 100644
index a6982f1fda9..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/energy-aware-scheduling/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/obsolete
- - Obsolete Documentation
-page_name: energy-aware-scheduling
-title: Energy Aware Scheduling
----
-
-Energy Aware Scheduling reading list
-
-<table>
-<tr>
-<td>In Kernel Switcher (IKS)</td>
-<td><a href="https://lwn.net/Articles/481055/">https://lwn.net/Articles/481055/</a></td>
-<td><a href="https://lwn.net/Articles/501501/">https://lwn.net/Articles/501501/</a></td>
-<td><a href="https://lwn.net/Articles/539840/">https://lwn.net/Articles/539840/</a></td>
-<td><a href="https://wiki.linaro.org/projects/big.LITTLE.MP/Big.Little.Switcher/Docs/in-kernel-code">https://wiki.linaro.org/projects/big.LITTLE.MP/Big.Little.Switcher/Docs/in-kernel-code</a></td>
-<td><a href="https://events.linuxfoundation.org/images/stories/slides/elc2013_poirier.pdf">https://events.linuxfoundation.org/images/stories/slides/elc2013_poirier.pdf</a></td>
-</tr>
-<tr>
-<td>Energy-Aware Scheduling (EAS)</td>
-<td><a href="http://lwn.net/Articles/602479/">http://lwn.net/Articles/602479/</a></td>
-<td><a href="http://www.linaro.org/blog/core-dump/energy-aware-scheduling-eas-project/">http://www.linaro.org/blog/core-dump/energy-aware-scheduling-eas-project/</a></td>
-<td><a href="https://lwn.net/Articles/609969/">https://lwn.net/Articles/609969/</a></td>
-<td><a href="https://docs.google.com/document/d/1YV44gufokmuKbeNG8vjOJirEY_GdsJymxP2ayHG4FAM/edit">https://docs.google.com/document/d/1YV44gufokmuKbeNG8vjOJirEY_GdsJymxP2ayHG4FAM/edit</a></td>
-</tr>
-<tr>
-<td>Power State Coordination Interface (PSCI)</td>
-<td><a href="http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf">http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf</a></td>
-</tr>
-<tr>
-<td>ARM Trusted Firmware (ARM TF)</td>
-<td><a href="https://github.com/ARM-software/arm-trusted-firmware">https://github.com/ARM-software/arm-trusted-firmware</a></td>
-<td><a href="http://www.slideshare.net/linaroorg/arm-trusted-firmareforarmv8alcu13">http://www.slideshare.net/linaroorg/arm-trusted-firmareforarmv8alcu13</a></td>
-<td><a href="http://www.slideshare.net/linaroorg/hkg15502-arm-trusted-firmware-evolution">http://www.slideshare.net/linaroorg/hkg15502-arm-trusted-firmware-evolution</a></td>
-<td><a href="http://www.slideshare.net/linaroorg/hkg15-505-power-management-interactions-with-optee-repaired">http://www.slideshare.net/linaroorg/hkg15-505-power-management-interactions-with-optee-repaired</a></td>
-</tr>
-<tr>
-<td>ARMv8-A Architecture</td>
-<td><a href="http://www.arm.com/products/processors/armv8-architecture.php">http://www.arm.com/products/processors/armv8-architecture.php</a></td>
-</tr>
-<tr>
-<td>big.LITTLE</td>
-<td><a href="http://www.arm.com/files/pdf/big_LITTLE_Technology_the_Futue_of_Mobile.pdf">http://www.arm.com/files/pdf/big_LITTLE_Technology_the_Futue_of_Mobile.pdf</a></td>
-<td><a href="http://www.arm.com/products/processors/technologies/biglittleprocessing.php">http://www.arm.com/products/processors/technologies/biglittleprocessing.php</a></td>
-<td><a href="https://wiki.linaro.org/projects/big.LITTLE.MP">https://wiki.linaro.org/projects/big.LITTLE.MP</a></td>
-<td><a href="http://events.linuxfoundation.org/sites/events/files/slides/clement-smp-bring-up-on-arm-soc.pdf">http://events.linuxfoundation.org/sites/events/files/slides/clement-smp-bring-up-on-arm-soc.pdf</a></td>
-</tr>
-<tr>
-<td>cpufreq</td>
-<td><a href="http://www.ibm.com/developerworks/linux/library/l-cpufreq-1/index.html">http://www.ibm.com/developerworks/linux/library/l-cpufreq-1/index.html</a></td>
-<td><a href="https://www.kernel.org/doc/Documentation/cpu-freq/">https://www.kernel.org/doc/Documentation/cpu-freq/</a></td>
-</tr>
-<tr>
-<td>cpuidle</td>
-<td><a href="https://lwn.net/Articles/384146/">https://lwn.net/Articles/384146/</a></td>
-<td><a href="https://www.kernel.org/doc/Documentation/cpuidle/">https://www.kernel.org/doc/Documentation/cpuidle/</a></td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/index.md b/chromium/docs/website/site/chromium-os/obsolete/index.md
deleted file mode 100644
index 115ee9fe063..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: obsolete
-title: Obsolete Documentation
----
-
-Documents under this section are considered obsolete and are archived here when
-there isn't a clear replacement. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/index.md b/chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/index.md
deleted file mode 100644
index e458d203bdb..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/index.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/obsolete
- - Obsolete Documentation
-page_name: monitoring-tools
-title: monitoring tools
----
-
-We can use two tools to monitor the system:
-
-1. [streamline](http://www.arm.com/products/tools/software-tools/ds-5/streamline.php)
-2. systemtap
-
-**Streamline**
-For the ARM platform, we can use streamline to monitor the activities in the
-system. It can give us a timeline of utilization of the system sources such as
-CPU load, cache, interrupts, disk IO, memory, network, etc. It can also display
-the CPU utilization of each process.
-It requires two components:
-
-1. one works on the target device to monitor the system
-2. one works on our desktop computer to display the captured
- activities, which is a plugin in eclipse.
-
-In order to capture the activities in the target device, we need to run a deamon
-called ***gatord*** on the target device, which requires a kernel module.
-In order to build the modules, we need to build the kernel first. The easiest
-way is:
-FEATURES=noclean emerge-tegra2_seaboard chromeos-kernel
-The kernel will be built in
-/build/tegra2_seaboard/tmp/portage/sys-kernel/chromeos-kernel-9999/work/chromeos-kernel-9999/build/tegra2_seaboard.
-Then we run
-make -C
-/build/tegra2_seaboard/tmp/portage/sys-kernel/chromeos-kernel-9999/work/chromeos-kernel-9999/build/tegra2_seaboard/
-M=\`pwd\` ARCH=arm CROSS_COMPILE=armv7a-cros-linux-gnueabi- modules
-After building the kernel module, we need to copy gatord and the kernel module
-to the target device, and they must be placed in the same directory.
-[ARM DS-5 Using ARM
-Streamline](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0482b/index.html)
-has more detailed information about building and using streamline.
-In order to profile ChromeOS during its bootup, we don't have enough time to set
-the Eclipse for DS-5 to connect to ChromeOS, and capture the profiling result.
-Instead, we can run the daemon in a "local capture" mode, i.e., we can run the
-daemon on the target device and it stores the captured result in the local disk,
-and we can fetch the result after ChromeOS boots up. We need to provide gatord a
-xml file to specify options for the "local capture" mode. A xml file can be as
-below:
-&lt;?xml version="1.0" encoding="US-ASCII" ?&gt;
-&lt;session version="1" title="local-test" call_stack_unwinding="yes"
-buffer_mode="streaming" sample_rate="normal" target_path="/tmp/@F_@N"
-duration="10"/&gt;
-More information about "local capture" can be find at
-[here](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka14991.html).
-Here is the result of a local capture after post-startup, where ureadahead
-starts running. Streamline captures the system information for 10 seconds and
-the boot takes about 5 seconds to complete after post-startup. From streamline,
-we can see that disk IO is constantly busy during boot, but the throughput isn't
-high, about 5-10MB/s. Meanwhile, the CPU load isn't high either after 2 seconds.
-ChromeOS uses squashfs as the root filesystem during this boot, and the best
-read performance seen on this device is about 20Mb/s, which means we potentially
-have resources to increase the IO performance to improve the boot performance.
-From this snapshot, we can also observe that the CPU frequency goes up and down
-a little bit because cpuidle is enabled, which might also hurt the boot
-performance.
-At the bottom, streamline shows the status of all processes and threads, which
-tells us the valuable information such as which process is using the most of CPU
-at some particular time.
-
-[<img alt="image"
-src="/chromium-os/obsolete/monitoring-tools/timeline.jpg">](/chromium-os/obsolete/monitoring-tools/timeline.jpg)
-
-**Systemtap**
-systemtap is another great tool to monitor the kernel and user space programs.
-systemtap isn't well supported in the ARM platform, and a few patches are
-required in order to install systemtap ChromeOS. A few changes to help build
-systemtap for ChromeOS have been submitted for review, and hopefully to be
-merged to the upstream very soon.
-systemtap requires a compiler to build scripts to kernel modules. Since ChromeOS
-doesn't have gcc built in by default, it's easier to build the systemtap scripts
-on the desktop.
-Before we can build the scripts, we need to cross compile the kernel, and we can
-build the kernel as mentioned in the above.
-FEATURES=noclean USE="systemtap" emerge-tegra2_seaboard chromeos-kernel
-
-The command above builds a kernel for seaboard, and we need to enable the kernel
-to support systemtap.
-All compiled result will be in
-/build/tegra2_seaboard/tmp/portage/sys-kernel/chromeos-kernel-9999/work/chromeos-kernel-9999/build/tegra2_seaboard.
-KERNEL_BUILD_DIR=/build/tegra2_seaboard/tmp/portage/sys-kernel/chromeos-kernel-9999/work/chromeos-kernel-9999/build/tegra2_seaboard
-
-use stap to generate the module code. The following command translates a
-systemtap script and cross compiles it into a kernel module called example.ko
-for the ARM platform.
-
-stap -v -a arm -r ${KERNEL_BUILD_DIR} -p 4 -B
-CROSS_COMPILE=armv7a-cros-linux-gnueabi- -k example.stp -m example
-
-copy the kernel module to the target device.
-
-In the target device, assume the module is placed in /mnt/stateful_partition,
-the following command runs the kernel module with staprun.
-
-SYSTEMTAP_STAPIO=/usr/local/libexec/systemtap/stapio staprun
-/mnt/stateful_partition/example.ko
-
-The systemtap website lists a list of examples:
-<http://sourceware.org/systemtap/examples/>
-Some systemtap doc
-[SystemTap Beginners
-Guide](http://sourceware.org/systemtap/SystemTap_Beginners_Guide/)
-[Systemtap tutorial](http://sourceware.org/systemtap/tutorial/)
-At some point of boot, streamline shows that both CPU and disk were idle.
-Therefore, a script as below was written to monitor all system calls, and print
-out the time a system call takes to complete. This information might tell us
-which processes were blocking the system at some particular moment as some
-system calls took several hundred milliseconds or even one second to complete.
-However, the problem was gone after I sync'd all software in the system, and the
-further investigation becomes unnecessary.
-global start_time
-global syscall_starttimes
-probe begin {
-start_time = gettimeofday_us()
-printf ("monitor starts at %d\\n", start_time)
-}
-probe syscall.\* {
-if (pid() != stp_pid()) {
-syscall_starttimes\[name, tid()\] = gettimeofday_us()
-}
-}
-probe syscall.\*.return {
-if (pid() != stp_pid()) {
-curr_time = gettimeofday_us()
-delta = curr_time - syscall_starttimes\[name, tid()\]
-if (curr_time &gt; start_time + 1000000 \* 3)
-printf ("%d: %s (%d:%d) returns from %s, takes %d\\n", curr_time - start_time,
-execname(), pid(), tid(), name, delta)
-delete syscall_starttimes\[name,tid()\]
-}
-}
-probe timer.s(10) {
-print ("have monitored for 10 seconds\\n")
-exit()
-}
-**NOTE: systemtap isn't built in the dev image or the test image by default.**
-Right now, we need to apply the following patch manually in order to build
-systemtap into the dev image.
-git fetch
-http://gerrit.chromium.org/gerrit/p/chromiumos/overlays/chromiumos-overlay
-refs/changes/74/5274/4 && git checkout FETCH_HEAD
-Furthermore, in the chroot, systemtap requires a high version of elfutils, but
-its dependency check is broken, so when running systemtap, please make sure
-elfutils-0.152 is installed, which has been tested to work OK with systemtap
-1.5. Without a higher version of elfutils, systemtap might have an error such as
-semantic error: failed to retrieve return value location for vfs_write \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/timeline.jpg.sha1 b/chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/timeline.jpg.sha1
deleted file mode 100644
index 40889fc02ee..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/monitoring-tools/timeline.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1ff255abb5d8d37a9c562bf1ab721eadda417081 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/portage-package-status/index.md b/chromium/docs/website/site/chromium-os/obsolete/portage-package-status/index.md
deleted file mode 100644
index 81f0438d4d8..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/portage-package-status/index.md
+++ /dev/null
@@ -1,176 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/obsolete
- - Obsolete Documentation
-page_name: portage-package-status
-title: Portage Package Upgrade Initiative
----
-
-### How to add/update a package
-
-Read the ["Portage New & Upgrade Package
-Process"](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/portage/package_upgrade_process.md).
-
-**Note: The following material is old - we do not maintain this process
-anymore.**
-
-### **Purpose**
-
-Many of the Portage packages that we use today as part of the Chromium OS image
-are outdated with respect to the latest version available from upstream Gentoo
-(Portage). Some are very outdated. This site serves as the coordination point
-for an effort to upgrade our packages to recent versions.
-
-To spread out the effort of upgrading hundreds of packages each package should
-be associated with one owner from among Chromium OS contributors. Volunteer
-owners are always welcome, but where they are not received packages are assigned
-to owners through technical teams.
-
-Package status and ownership is maintained on the [Portage Package Status
-spreadsheet](https://spreadsheets1.google.com/a/chromium.org/spreadsheet/ccc?key=tJuuSuHmrEMqdL5b8dkgBIA).
-Package owners can check that spreadsheet at any time to see if any of their
-packages are out of date. The [second
-sheet](https://spreadsheets.google.com/a/chromium.org/spreadsheet/ccc?pli=1&key=0AsXDKtaHikmcdEp1dVN1SG1yRU1xZEw1Yjhka2dCSUE#gid=1)
-of the spreadsheet presents the data statistically and with pretty charts.
-
-### **What you should do**
-
-Check the [package status
-spreadsheet](https://spreadsheets1.google.com/a/chromium.org/spreadsheet/ccc?key=tJuuSuHmrEMqdL5b8dkgBIA),
-and claim ownership of packages that you think you should own (**all
-chromium.org accounts can edit the document**). This is a team effort, and we
-need everyone to do their part. If you think you are best positioned to
-evaluate/test an upgrade, then you are the logical owner. Perhaps you work on
-projects that use that package extensively. *Please only edit the "Owner" and
-"Owner Notes" columns.* Edits in other columns will be overwritten by the update
-process.
-
-To complete ownership coverage beyond volunteers, packages are assigned to
-technical leads who are then responsible for assigning individual ownership.
-*The "Team/Lead" column is for this purpose.*
-
-As a package owner, whenever you are ready you should upgrade the outdated
-packages that you own. See the "How to update a package" section for details.
-
-### Managing upgrade process
-
-There is a "Tracker" column in the spreadsheet for linking to a Tracker issue
-for a package that needs an upgrade. This column is managed by the
-sync_package_status script. The script runs daily as part of the
-[refresh-packages
-builder](http://build.chromium.org/p/chromiumos/builders/refresh%20packages),
-but only for teams that have opted in to this process. It can also be run by
-team leads or package owners whenever they like. It is provided as a
-convenience. Run the following from within your chroot to get started:
-
-```none
-sync_package_status --help
-```
-
-Most likely, you will want to run sync_package_status for either a team or for
-an individual. Those examples are given below (again, run inside your chroot).
-Remove the "--pretend" option if you are satisfied with the results:
-
-<pre><code>
-sync_package_status --pretend --team=build
-sync_package_status --pretend --owner=<i>chromiumuser</i>
-</code></pre>
-
-To see statistics and charts about the upgrade progress of the entire team or
-your group, see the
-[Stats](https://docs.google.com/a/chromium.org/spreadsheet/ccc?key=0AsXDKtaHikmcdEp1dVN1SG1yRU1xZEw1Yjhka2dCSUE#gid=1)
-worksheet of the same spreadsheet.
-
-To disable the filing of Tracker issues for a single package, change the
-"Tracker" column value for that package's row to "disable".
-
-### **Spreadsheet Legend**
-
-In the "State On &lt;arch&gt;" column:
-
-* "current" means the current version is the same as the **stable**
- upstream version, and is coming from the portage (or portage-stable)
- overlay.
-* "local only" means the package (presumably) is not from upstream in
- the first place.
-* "patched locally" means the package is not coming from the portage
- (or portage-stable) overlay, with a version different from anything
- upstream.
-* "unknown" means no upstream version was found but the package looks
- like it originally came from upstream.
-* "duplicated locally" means the package is not coming from the
- portage (or portage-stable) overlay, but the version is identical to
- one upstream. (Note that this status can appear even if the version
- is not the latest one upstream.)
-* "needs upgrade" means a more recent **stable** version is available
- upstream.
-* "needs upgrade and patched locally" is a combination of the two
- states.
-* "needs upgrade and duplicated locally" is another combination of two
- states.
-
-In the "Package" column:
-
-* If the package name has a ":&lt;slotname&gt;" suffix, then we are
- using that package in more than one Portage "slot". We should try to
- avoid this as much as possible by consolidating our usage to one of
- them.
-
-### **FAQ**
-
-**Q:** *Where does the spreadsheet information come from?*
-
-**A:** It comes from gathering package information for boards 'x86-generic' and
-'arm-generic' over each of the following targets: 'virtual/target-os',
-'virtual/target-os-dev', and 'virtual/target-os-test', as well as the chroot
-host (amd64) over each of the following targets: 'world', and
-'virtual/target-sdk'.
-
-**Q:** *Who is maintaining the package status spreadsheet?*
-
-**A:** The update process for the spreadsheet is maintained by the build team;
-send questions to chromium-os-dev@chromium.org.
-
-**Q:** *Who can access the spreadsheet?*
-
-**A:** Use your chromium.org account to access the spreadsheet for automatic
-"view and edit" privileges. If you don't have a chromium.org account, simply
-request access to the document (you have the option to do so after trying to
-access the document) and you will be given "view" privileges.
-
-**Q**: *I got a Tracker issue asking me to upgrade package FOO, but we don't
-want to upgrade package FOO. How do I exclude FOO from the automatic issue
-filer?*
-
-**A**: In the [packages
-spreadsheet](https://spreadsheets1.google.com/a/chromium.org/spreadsheet/ccc?key=tJuuSuHmrEMqdL5b8dkgBIA),
-find the row for package FOO and change the Tracker value for that row to be
-"disable".
-
-**Q:** *How often is the package status data in the spreadsheet updated?*
-
-**A:** The update process is executed daily as part of the [refresh-packages
-buildbot](http://build.chromium.org/p/chromiumos/builders/refresh%20packages).
-
-**Q:** *How do I tell when the package status data in the spreadsheet was last
-updated?*
-
-**A:** Go to File -&gt; See revision history, the look for the last time the
-"bugdroid" user edited the spreadsheet. Or look at the [refresh packages
-builder](http://build.chromium.org/p/chromiumos/builders/refresh%20packages) to
-see when it last ran to completion.
-
-**Q:** *Why can't I access the spreadsheet, even when I use my chromium.org
-account?*
-
-**A:** This happened to at least a couple people, and the solution was to
-convert their account to GA+. Contact Mark Larson.
-
-**Q:** *Are there any free, open-source utilities that could help with this
-effort?*
-
-**A:** We are aware of [euscan](http://euscan.iksaif.net/). It was evaluated for
-use with Chromium OS, and the results can be found in this
-[doc](https://docs.google.com/a/chromium.org/document/d/1QejmQQokk1lKS9PGuS_Zs279Z1cATNwYc9IVPyL__ZQ/edit). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/quiche-notes/index.md b/chromium/docs/website/site/chromium-os/obsolete/quiche-notes/index.md
deleted file mode 100644
index 89692b228d9..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/quiche-notes/index.md
+++ /dev/null
@@ -1,284 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/obsolete
- - Obsolete Documentation
-page_name: quiche-notes
-title: random notes by quiche@
----
-
-Tracing wireless API events:
-
-# cd /sys/kernel/debug/tracing
-
-# echo 1 &gt; events/cfg80211/enable # requires wireless-3.8 or newer
-
-# echo 1 &gt; events/mac80211/enable # available with wireless-3.4
-
-&lt;do some stuff here&gt;
-
-# cat trace
-
-Example output
-
-# tracer: nop
-
-#
-
-# entries-in-buffer/entries-written: 12/12 #P:4
-
-#
-
-# _-----=&gt; irqs-off
-
-# / _----=&gt; need-resched
-
-# | / _---=&gt; hardirq/softirq
-
-# || / _--=&gt; preempt-depth
-
-# ||| / delay
-
-# TASK-PID CPU# |||| TIMESTAMP FUNCTION
-
-# | | | |||| | |
-
-wpa_supplicant-427 \[000\] ..s. 6636.389338: rdev_mgmt_frame_register: phy605,
-wdev(1), frame_type: 0xd0, reg: true
-
-wpa_supplicant-427 \[000\] ..s. 6636.389373: rdev_return_void: phy605
-
-wpa_supplicant-427 \[000\] .... 6636.389900: rdev_set_power_mgmt: phy605,
-netdev:mlan0(1818), enabled, timeout: -1
-
-wpa_supplicant-427 \[000\] .... 6636.394420: rdev_return_int: phy605, returned:
-0
-
-wpa_supplicant-427 \[000\] .... 6636.453881: rdev_scan: phy605
-
-wpa_supplicant-427 \[000\] .... 6636.453925: rdev_return_int: phy605, returned:
-0
-
-ksdioirqd/mmc1-5353 \[003\] .... 6636.609710: cfg80211_return_bss:
-04:f0:21:05:4e:95, band: 0, freq: 2412
-
-ksdioirqd/mmc1-5353 \[000\] .... 6640.651105: cfg80211_scan_done: aborted: false
-
-Tracing cfg80211/mac80211 function calls:
-
-# cd /sys/kernel/debug/tracing/
-
-# echo 0 &gt; tracing_on
-
-# echo &gt; trace # clear any existing data
-
-# echo function_graph &gt; current_tracer
-
-# echo funcgraph-abstime &gt; trace_options
-
-# echo ':mod:cfg80211' &gt; set_ftrace_filter
-
-# echo ':mod:mac80211' &gt;&gt; set_ftrace_filter # NOTE: two '&gt;'s here
-
-# echo 1 &gt; tracing_on
-
-# cat trace
-
-Tracing general network events:
-
-# cd /sys/kernel/debug/tracing/
-
-# echo 1 &gt; events/net/enable
-
-&lt;do some stuff here&gt;
-
-# cat trace
-
-\[...\]
-
-sshd-5179 \[000\] ..s. 6940.442983: net_dev_queue: dev=eth0 skbaddr=ed0feb38
-len=114
-
-sshd-5179 \[000\] ..s. 6940.443025: net_dev_xmit: dev=eth0 skbaddr=ed0feb38
-len=114 rc=0
-
-Recording a trace:
-
-Dumping the trace by hand (cat trace) works fine for manual work. But if you
-want a long-running trace, do this instead:
-
-1. cd /sys/kernel/debug/tracing/
-2. echo 0 &gt; tracing_on
-3. Configure tracing by using the commands above (e.g. echo 1 &gt;
- events/net/enable)
-4. cat trace_pipe | gzip -c &gt; /var/log/trace.log.gz &
-5. echo 1 &gt; tracing_on
-
----
-
-build
-
-to see the compiler command-line for emerge/ebuild, add
-CXXFLAGS="-print-cmdline" to the
-
-environment of emerge/ebuild.
-
----
-
-ccache
-
-the chromiumos build tools use ccache, with the cache located in
-/var/cache/distfiles/ccache.
-
-you can inspect the cache as follows.
-
-$ CCACHE_DIR=/var/cache/distfiles/ccache ccache -s
-
-cache directory /var/cache/distfiles/ccache
-
-cache hit (direct) 1
-
-cache hit (preprocessed) 0
-
-cache miss 2
-
-called for link 2
-
-compile failed 1
-
-files in cache 6
-
-cache size 16.8 Mbytes
-
-max cache size 1.0 Gbytes
-
-you can clear it with
-
-$ CCACHE_DIR=/var/cache/distfiles/ccache ccache --clear
-
-if you run ccache manually (without using the build tools), CCACHE_DIR will
-probably not be set.
-
-in this case, ccache will default to ~/.ccache as the cache directory.
-
-$ ccache --show-stats
-
-cache directory /home/quiche/.ccache
-
-cache hit (direct) 1
-
-cache hit (preprocessed) 0
-
-cache miss 1
-
-files in cache 3
-
-cache size 8.5 Mbytes
-
-max cache size 1.0 Gbytes
-
----
-
-Working with mhtml files:
-
-Before Ubuntu Precise:
-
-> $ for x in \*.mhtml; do kmhtconvert -n -f $x; done
-
-> $ for x in \*/index.html; do w3m -dump $x &gt; $(dirname $x).txt; done
-
-With Ubuntu Precise:
-
-> $ for x in \*.mhtml; do mu extract --save-all $x; done
-
-Listing branch names:
-
-> # in an existing checkout
-
-> $ git branch -a
-
-Checking out a branch: see [Working on a
-Branch](/chromium-os/how-tos-and-troubleshooting/working-on-a-branch)
-
-Enabling verbose logging for Chrome:
-
-> # mount / -oremount,rw
-> # echo "vmodule=network_event_log=1" &gt;&gt; /etc/chrome_dev.conf
-> # restart ui
-
-Monitoring cellular activation:
-
-> enable verbose logging for Chrome (see above)
-
-> # ff_debug +cellular+dbus+modem+portal+service
-
-> # ff_debug --level -5
-
-> # tail -F /var/log/chrome/chrome | logger -t chrome-main &
-
-> # tail -F /var/log/ui/ui.LATEST | logger -t chrome-ui &
-
-> # tail -F /home/chronos/user/log/chrome | logger -t chrome-user &
-
-> # dbus-monitor --system | logger -t dbus-monitor &
-
-Resetting modem:
-
-> (see also
-> <http://support.verizonwireless.com/clc/devices/knowledge_base.html?id=38519>)
-
-> 1. Network Options -&gt; Verizon Wireless -&gt; View Account -&gt;
- Account Overview -&gt; log in -&gt; cancel account
-> 2. crosh&gt; modem factory-reset 000000 y
-
-> make sure to do these steps in order.
-
-Monitor mode packet capture (requires another chromebook, with a dev image):
-
-* on connected chromebook:
- Ctrl-Alt-t to open crosh
- crosh&gt; network_diag --wifi
- ctrl-m to open file manager
- open most recent “network_diagnostics” file
- search for “BSS … associated”
- remember “freq” for next step
- look for “secondary channel offset” and “STA channel width” under “HT
- operation”
- if “STA channel width” is 20, use HT20 in next step
- if “STA channel width” is 40, and “secondary channel offset” is “above”, use
- "above" in next step
- if “STA channel width” is 40, and “secondary channel offset” is “below”, use
- "below" in next step
- otherwise, omit HT parameter in next step
-
-* on capture chromebook:
- disable wifi using UI
- crosh&gt; packet_capture --frequency &lt;freq&gt; --ht-location
- &lt;above|below&gt;
-
----
-
-Monitoring D-Bus signals:
-
-> $ sudo gdbus monitor --system --dest fi.w1.wpa_supplicant1 | logger -t
-> supplicant-dbus &
-
----
-
-Monitoring D-Bus calls:
-
-By default, you can only monitor D-Bus signals (broadcast messages from one
-process to the who system)
-
-* To enable monitoring of method calls, run
- ./mod_test_image_for_dbusspy.sh -i
- ../build/images/${BOARD}/latest/chromiumos_test_image.bin
-* dbus calls will be logged in /var/log/dbusspy.log
-
----
-
-OOBE:
-
-How to [force
-OOBE](http://www.chromium.org/chromium-os/force-out-of-box-experience-oobe). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/recall/index.md b/chromium/docs/website/site/chromium-os/obsolete/recall/index.md
deleted file mode 100644
index a004cde5fab..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/recall/index.md
+++ /dev/null
@@ -1,175 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/obsolete
- - Obsolete Documentation
-page_name: recall
-title: Recall
----
-
-**Note: the recall code has been deleted from autotest and is no longer
-available.**
-
-Recall is a server-side system that intercepts DNS, HTTP and HTTPS traffic from
-clients for either recording or playback. This allows tests to be run in labs
-without Internet access by playing back pre-recorded copies of websites, allows
-tests to be run that use recorded copies of sites known to exhibit errors or
-many iterations of the same test to be run with the same data.
-
-Recall is intended to be completely transparent to client tests.
-
-It runs as an autotest server test which makes some configuration changes to the
-server machine, and then runs the desired client test on the client wrapped with
-a Recall context manager that takes care of adjusting the client's configuration
-to redirect the traffic to the recall server (in the case it's not the network's
-default gateway already) and install a root certificate for HTTPS
-man-in-the-middling.
-
-**Prerequisites:**
-
-At the time of this writing you **must** install the following packages, which
-are not installed by default.
-
-1. the **dnspython** package in the chroot: sudo emerge dnspython
-2. the **iproute2** package on the chroot: sudo emerge iproute2
-3. there may be other needed packages which I am now forgetting
- (iptables?)
-
-In addition, the server-side iptable command to set up the routing tables fails
-for me with this error:
-
-FATAL: Could not load /lib/modules/2.6.38.8-gg836/modules.dep: No such file or
-directory
-
-I worked around this by copying that file from my root file system into the
-chroot. (For testing, I also ran the same iptables command manually outside the
-chroot, so I am not sure if you need to do that so that some module is loaded
-correctly.)
-
-**From the command line:**
-
-The highest level way in which to run Recall is simply to use the
-test_RecallServer test, which handles all of the heavy-lifting for you, and can
-be run using run_remote_tests.
-
-Run desktopui_UrlFetch on the client, record results which can be found as
-&lt;RESULTS DIR&gt;/pickle:
-
-> ./run_remote_tests.sh --remote=&lt;DEVICE IP&gt; test_RecallServer -a
-> 'desktopui_UrlFetch'
-
-Run desktopui_UrlFetch on the client, only returning results found in the given
-pickle file created from a previous recording:
-
-> ./run_remote_tests.sh --remote=&lt;DEVICE IP&gt; test_RecallServer -a
-> 'desktopui_UrlFetch /path/to/pickle'
-
-Run desktopui_UrlFetch on the client 100 times, the first time will be recorded,
-the subsequent 99 will use the playback only
-
-> ./run_remote_tests.sh --remote=&lt;DEVICE IP&gt; test_RecallServer -a
-> 'desktopui_UrlFetch num_iterations=100'
-
-Run desktopui_UrlFetch on the client using a simple proxy server that doesn't
-record (mostly for infrastructure testing)
-
-> ./run_remote_tests.sh --remote=&lt;DEVICE IP&gt; test_RecallServer -a
-> 'desktopui_UrlFetch proxy_only=1'
-
-Infrastructure restrictions mean that these test must always be run as root (or
-with sudo), and may not be run against the 127.0.0.1 address. This includes
-running them against VMs on your workstation, unless you set up a bridge network
-for KVM instead of using its userspace networking.
-
-**From a control file:**
-
-You can also write a server suite that performs the same actions, perhaps on
-multiple tests, for example:
-
-> def run(machine):
-
-> host = hosts.create_host(machine)
-
-> job.run_test('test_RecallServer', host=host, test='desktopui_UrlFetch',
-> pickle_file='/path/to/pickle')
-
-> parallel_simple(run, machines)
-
-**Customizing server behaviour:**
-
-The test_RecallServer test takes care of many of the common cases, but in some
-situations it may not be appropriate to modify it to cover yours and instead
-create a new server test that uses the Recall infrastructure. This can be
-accomplished by deriving your test from recall_test.RecallServerTest; the
-documentation for that class goes into greater detail, here's a very brief
-example:
-
-> from autotest_lib.server.cros import recall_test, recall
-
-> class test_MyTest(recall_test.RecallServerTest):
-
-> def initialize(self, host):
-
-> # minimum set up required
-
-> self.certificate_authority = recall.CertificateAuthority("/O=Test")
-
-> self.dns_client = recall.DNSClient()
-
-> self.http_client = recall.HTTPClient()
-
-> # takes care of the rest of the heavy lifting
-
-> # can be overidden a lot, see documentation
-
-> recall_test.RecallServerTest.initialize(self, host)
-
-> def run_once(self, host):
-
-> self.RunTestOnHost('test_MyClientTest', host)
-
-**Static server, custom client:**
-
-For even deeper diving, the Recall infrastructure can be run in a standalone
-manner. For example a server can be installed on the network which already has
-clients use it as a DNS server and Default Gateway via DHCP and redirects all
-traffic to itself with static iptables rules. The recall server itself can be
-run by creating instances of recall.DNSServer, recall.HTTPServer,
-recall.HTTPSServer, etc. by hand with fixed ports. See the documentation for the
-recall package for more details, here's a very quick example:
-
-> from autotest_lib.server.cros import recall
-
-> ca = recall.CertificateAuthority("/O=Test")
-
-> dns = recall.DNSServer(('', 5000), dns_client=DNSClient())
-
-> client = recall.DeterministicScriptInjector(recall.HTTPClient())
-
-> http = recall.HTTPServer(('', 8000), http_client=client)
-
-> https = recall.HTTPSServer(('', 4430), http_client=client,
-> dns_client=dns.dns_client, certificate_authority=ca)
-
-> # remain running as long as needed
-
-> dns.shutdown()
-
-> http.shutdown()
-
-> https.shutdown()
-
-A client test can now be written that uses this fixed infrastructure, though
-note that this test will not function without it. Client tests simply wrap the
-call in the control file with the context manager:
-
-> from autotest_lib.client.cros import recall
-
-> with recall.RecallServer(IP_OF_SERVER):
-
-> job.run_test(...)
-
-The context manager takes care of setting up the root certificate used for HTTPS
-recording, it also takes care of the DNS Server and Default Route if those
-aren't already correct. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Properties for src.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Properties for src.png.sha1
deleted file mode 100644
index 3dc493b88a6..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Properties for src.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0faf16ddedbba7a9d3219cb6a94e81b3e50db199 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Resource Filters.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Resource Filters.png.sha1
deleted file mode 100644
index 6689993beea..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/Resource Filters.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-15c4067e1d30b008a25ec66ab2bda8ee06916cd6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build env.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build env.png.sha1
deleted file mode 100644
index d803dfe76cf..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build env.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7fa93b0feffbb8a4aada3b61b61b7fa37d598398 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build.png.sha1
deleted file mode 100644
index a101ce6188c..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/c++ build.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-430a6f30d1da885d53cec18a2f730ad516233dcd \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/chrome remote main.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/chrome remote main.png.sha1
deleted file mode 100644
index 4bba5e71f3b..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/chrome remote main.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1dd2352754b2e00535a4138e56e48d5f7aadcc24 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debug connection.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debug connection.png.sha1
deleted file mode 100644
index b4600664c9b..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debug connection.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f7038f650c8019c6cd32a5ef2e96fa244593f303 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger main.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger main.png.sha1
deleted file mode 100644
index 8e7cdf44d12..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger main.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b3836d20f915f996321612ee6b8fd18ebf3ebf72 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger shared libraries.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger shared libraries.png.sha1
deleted file mode 100644
index 3d937dc1cd7..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/debugger shared libraries.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-da685c3acf04f4a51dc93a8b730acfb935252178 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/index.md b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/index.md
deleted file mode 100644
index a49b3b85af2..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/obsolete
- - Obsolete Documentation
-page_name: using-eclipse-to-debug-chrome-on-chrome-os
-title: Using Eclipse to debug Chrome on Chrome OS
----
-
-**DEPRECATED**
-
-*jamescook says: I learned on 2012-03-08 that our Eclipse workflow is no longer
-expected to work.*
-
-*rkc says: The remote debugging workflow for Chrome on ChromeOS changed a while
-ago - the linux_disable_pie flag was nuked; instead cmtice@ wrote a script that
-makes remote debugging chrome very simple. Details on how to use the script are
-at
-<https://www.chromium.org/chromium-os/developer-guide#TOC-Remote-Debugging>*
-
-*The Catch: The script will only work on a test image for now - this is because
-only the test image has the ssh server running by default and copies over the
-test keys which allow authentication-less connections to the device; something
-the script depends on.*
-
-*Our debugging from eclipse solution is in an unknown state - if anyone can
-test/fix it, a lot of developers on the team would be quite delighted :)*
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/resource-filters.png.sha1 b/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/resource-filters.png.sha1
deleted file mode 100644
index 4a4a77bd41a..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os/resource-filters.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b53b3d3f7aac5d42b3caaf4d1e27f45fbed7cfc4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/obsolete/using-sdk-standalone/index.md b/chromium/docs/website/site/chromium-os/obsolete/using-sdk-standalone/index.md
deleted file mode 100644
index d1e0a4f87fe..00000000000
--- a/chromium/docs/website/site/chromium-os/obsolete/using-sdk-standalone/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/obsolete
- - Obsolete Documentation
-page_name: using-sdk-standalone
-title: Using Chromium OS SDK as standalone, DIY
----
-
-[TOC]
-
-This page describes how to use the Chromium OS SDK as standalone package,
-without anything on top.
-
-## Target audience
-
-* Developers who want to experiment with the Chromium OS binary
- enviroment, but not build any of Chromium OS
-* Developers who want just the toolchain
-* People who need the chroot, but do not want to download any sources
-
-For the most part, you should know what you're doing to go this way.
-
-## Provided by the SDK
-
-* Complete system tools, just like in the normal SDK chroot
-* Complete toolchain packages for:
- * host (no prefix or x86_64-cros-linux-gnu-)
- * all currently supported targets
- * armv7a-cros-linux-gnueabi-
- * x86_64-cros-linux-gnu-
- * i686-pc-linux-gnu-
- * gold and bfd ld
-
-NOTE: It is not possible to switch toolchains or install new ones, as well as
-generally update the system in any way. If you want a newer version, delete all
-and start over.
-
-## Installation instructions
-
-### Getting the SDK
-
-The latest version of SDK can be located in chromiumos-overlay.git repository,
-in
-[sdk_version.conf](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos/binhost/host/sdk_version.conf)
-
-The individual SDK tarballs can be found in the Google Storage mirror:
-<http://commondatastorage.googleapis.com/chromiumos-sdk/>
-
-In order to download the latest SDK automatically, you can execute:
-
-```none
-eval $(curl -s https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos/binhost/host/sdk_version.conf?format=TEXT | base64 -d | grep '^SDK_LATEST_VERSION=')
-wget "https://commondatastorage.googleapis.com/chromiumos-sdk/cros-sdk-${SDK_LATEST_VERSION}.tar.xz"
-```
-
-### Unzipping & entering SDK
-
-Unzip the SDK to a folder of your choice, for example "./sdk":
-
-```none
-mkdir sdk
-cd sdk
-tar xvf ../cros-sdk-${SDK_LATEST_VERSION}.tar.xz
-```
-
-Set up some mounts:
-
-```none
-mount -t proc proc ./proc
-mount -t sysfs sysfs ./sys
-```
-
-Enter by using chroot:
-
-```none
-sudo chroot . /bin/bash
-```
-
-### Optional: setting up various environment bits prior to chroot
-
-These are mostly optional and depend on what do you want to do inside the
-chroot. For merely running gcc, you should need neither.
-
-1. Mimic host network configuration:
- `sudo cp /etc/resolv.conf /etc/hosts sdk/etc/`
- This usually needs to be done only once unless your host's network is
- dynamic.
-2. Bind /dev, if you're going to be working with any devices:
- `sudo mount -o bind /dev sdk/dev`
-3. Make a copy or bind-mount of any configuration/data you will need
- inside the chroot.
-
-Remember to clean up the chroot (especially) from mounts after you stop using
-it. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/biod/biod_diagram.png.sha1 b/chromium/docs/website/site/chromium-os/packages/biod/biod_diagram.png.sha1
deleted file mode 100644
index 457aa9d2d47..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/biod/biod_diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6767753d96b589afe2e6860eaf9bfc3a9e23e0b6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/biod/index.md b/chromium/docs/website/site/chromium-os/packages/biod/index.md
deleted file mode 100644
index 94317bfc490..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/biod/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: biod
-title: 'biod: Biometrics Daemon'
----
-
-Moved to
-<https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/biod/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/crash-reporting/debugging-a-minidump/index.md b/chromium/docs/website/site/chromium-os/packages/crash-reporting/debugging-a-minidump/index.md
deleted file mode 100644
index 02b0cf88101..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/crash-reporting/debugging-a-minidump/index.md
+++ /dev/null
@@ -1,200 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/crash-reporting
- - Crash Reporting (Chrome OS System)
-page_name: debugging-a-minidump
-title: Debugging a Minidump
----
-
-[TOC]
-
-Reference:
-<https://sites.google.com/a/google.com/chrome-msk/dev#TOC-Crash-dump-analysis>
-
-This page discusses how to debug a **ChromiumOS minidump**.
-
-* If you instead have a **Linux Chrome minidump**, see [Linux Minidump
- To
- Core](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/minidump_to_core.md).
-* If you instead have a **Windows Chrome minidump**, just load the
- minidump into Visual Studio or windbg, set up the Chrome symbol
- server and Microsoft symbol server, and enable source indexing.
- Instructions can be found on the [Debugging Chromium on
- Windows](http://www.chromium.org/developers/how-tos/debugging-on-windows)
- page.
-* For other thoughts on crash analysis see [Crash
- Reports](http://www.chromium.org/developers/crash-reports).
-
-## ==Use minidump_stackwalk to show a stack trace==
-
-TODO(mkrebs): ...
-
-## ==Use gdb to show a backtrace==
-
-### Generate core file
-
-Convert a minidump to a core file.
-
-```none
-sh -c '~/chromiumos/chroot/usr/bin/minidump-2-core -v upload_file_minidump-7adc2ee0079cb374.dmp > minidump.core 2>minidump.core.out'
-```
-
-For a minidump from a 32-bit executable, use `minidump-2-core.32` instead.
-
-For an ARM minidump, you have to work a little bit harder to get a core file.
-The easiest way is probably to do the conversion using qemu within your chroot.
-
-```none
-# Convert minidump to a core file in /tmp/
-SYSROOT=/build/daisy
-qemu-arm \
-  ${SYSROOT}/lib/ld-linux-armhf.so.3 \
-  --library-path ${SYSROOT}/lib:${SYSROOT}/usr/lib \
-  ${SYSROOT}/usr/bin/minidump-2-core \
-    -v ~/test/upload_file_minidump-de1f11232d825812.dmp >/tmp/minidump.core 2>/tmp/minidump.core.out
-```
-
-Reference: <https://crbug.com/217064>
-
-### Calculate address for symbols
-
-First, setup the necessary files for the debugger. You need both the original
-executables and/or libraries whose symbols you wish to calculate, and you will
-need their corresponding debug information. Googlers: See [Setup files for
-debugger](https://sites.google.com/a/google.com/mkrebs/references/chrome-os#TOC-Setup-files-for-debugger)
-for how to get these for official images.
-
-Calculate the base address of the crashing executable's .text section.
-
-```none
-# Determine base address where the crashing executable was mapped
-set t1=`grep -w GUID minidump.core.out | grep '"/opt/google/chrome/chrome"' | sed -e 's/-.*//'`
-# Determine offset of .text within the executable (run objdump with sudo if setuid program like Xorg)
-set t2=`objdump -h /usr/local/google/home/mkrebs/tmp/test/sigabrt/2913.45.0/image/rootfs/opt/google/chrome/chrome | \grep '\.text'|awk '{print $4}'`
-# Print out address of .text in memory
-perl -e 'die unless $ARGV[0] && $ARGV[1]; printf("%#x\n", hex($ARGV[0]) + hex($ARGV[1]))' $t1 $t2
-```
-
-You may also want to do this for shared libraries that the executable loaded.
-
-```none
-# Determine base address where the library was mapped
-set t1=`grep -w GUID minidump.core.out | grep '"/lib/libc-2.15.so"' | sed -e 's/-.*//'`
-# Determine offset of .text within the executable (run objdump with sudo if setuid program like Xorg)
-set t2=`objdump -h /usr/local/google/home/mkrebs/tmp/test/issue35349/2913.84.5/image/rootfs/lib/libc-2.15.so | \grep '\.text'|awk '{print $4}'`
-# Print out address of .text in memory
-perl -e 'die unless $ARGV[0] && $ARGV[1]; printf("%#x\n", hex($ARGV[0]) + hex($ARGV[1]))' $t1 $t2
-```
-
-Googlers: Alternatively, you can try my generate_gdb_command_file script to
-automatically generate a gdb command file for adding all the symbol files. For
-the "--top" command-line option, specify the path to where your image is
-mounted. Then, pass the path to the file to which you redirected
-minidump-2-core's stderr.
-
-```none
-/home/mkrebs/bin/scripts/generate_gdb_command_file --top 2913.84.5/image/rootfs/ ~/checkouts/cros/cros6/chroot/tmp/minidump.core.out > minidump.gdb
-```
-
-### Start debugger
-
-Run gdb on the core file.
-
-```none
-gdb --core minidump.core
-armv7a-cros-linux-gnueabi-gdb --core minidump.core
-```
-
-Map executable's symbol file to base address of .text section.
-
-```none
-(gdb) add-symbol-file <path to top-level "debug" directory>/<path to .debug file> <address from calculation>
-```
-
-Googlers: Alternatively, if you tried my generate_gdb_command_file script, use
-the generated gdb command file to add all the symbol files.
-
-```none
-gdb --core minidump.core --command minidump.gdb
-```
-
-### Example
-
-```none
-grep -w GUID minidump.core.txt | grep '"/opt/google/chrome/chrome"' | sed -e 's/-.*//'
-0x72CC9000
-objdump -h /usr/local/google/home/mkrebs/tmp/test/sigabrt/2913.45.0/image/rootfs/opt/google/chrome/chrome | \grep '\.text'|awk '{print $4}'
-002a73e0
-perl -e 'printf("%#x\n", hex($ARGV[0]) + hex($ARGV[1]))' 0x72CC9000 002a73e0
-0x72f703e0
-```
-
-```none
-gdb --core=minidump.core
-(gdb) add-symbol-file /usr/local/google/home/mkrebs/tmp/test/sigabrt/2913.45.0/debug/opt/google/chrome/chrome.debug 0x72f703e0
-```
-
-## ==If backtrace in gdb did not help==
-
-Sometimes, the gdb backtrace command ([Use gdb to show a
-backtrace](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/crash-reporting/debugging-a-minidump#TOC-Use-gdb-to-show-a-backtrace))
-doesn't show a stack trace any better than that of minidump_stackwalk ([Use
-minidump_stackwalk to show a stack
-trace](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/crash-reporting/debugging-a-minidump#TOC-Use-minidump_stackwalk-to-show-a-stack-trace)).
-If you think there's more to it than what those two are showing you, try this
-method to naively dump all the known symbol addresses seen on the stack. You'll
-see some false positives, but you may just find the name of a function that
-seems like a plausible place to look.
-
-First, start from the above step of [using gdb to show a
-backtrace](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/crash-reporting/debugging-a-minidump#TOC-Use-gdb-to-show-a-backtrace).
-We can reuse the gdb command file that was generated for it. Googlers: If you
-didn't use my generate_gdb_command_file script, you can manually create the gdb
-command file containing any "add-symbol-file" commands you ran.
-
-Second, determine the base address of the stack. The easiest way is to just look
-at the stack address in the minidump. This command will set the $sp_addr
-variable to the stack address of the first thread in the minidump:
-
-```none
-set sp_addr=`~/checkouts/cros/cros6/chroot/usr/bin/minidump_dump upload_file_minidump-62893577d8a73070.dmp | perl -ne 's/^  stack.start_of_memory_range = // && print && exit'`
-```
-
-If you want to be smarter, you can run minidump_stackwalk on the minidump (using
-the appropriate Breakpad symbols) and skip past any stack frames you can assume
-are accurate. You would do this by looking for the stack pointer of the last
-consecutive call frame found by "call frame info". For example, for issue
-<https://crbug.com/217636> the stack pointer value would be **0x7e8b3440** given
-the following top-most (i.e. higher address) frames:
-
-```none
-  7  Xorg!OsSigHandler [osinit.c : 146 + 0x11]
-      r4 = 0x76fc9f7c    r5 = 0x7e8b3440    r6 = 0x76bfb094    r7 = 0x00000000
-      r8 = 0x00000000    r9 = 0x00000020   r10 = 0x00000004    fp = 0x00000008
-      sp = 0x7e8b3430    pc = 0x76f90949
-     Found by: call frame info
-  8  libc-2.15.so + 0x25e6e
-      r4 = 0x774ec898    r5 = 0x76e9aeb8    r6 = 0x76bfb094    r7 = 0x00000000
-      r8 = 0x00000000    r9 = 0x00000020   r10 = 0x00000004    fp = 0x00000008
-      sp = 0x7e8b3440    pc = 0x76b40e70
-     Found by: call frame info
-  9  libc-2.15.so!new_do_write [fileops.c : 537 + 0x11]
-      sp = 0x7e8b345c    pc = 0x76b6abe5
-     Found by: stack scanning
-```
-
-Finally, run the following gdb command to dump 1024 words of the stack (i.e.
-potential addresses). In the output, for any value that corresponds to a known
-symbol, gdb will annotate it with the symbol's name in angle brackets. Knowing
-that, we can simply pipe the output to something (in this case, perl) to pull
-out any annotation it finds in the stack dump.
-
-```none
-gdb --core minidump.core --batch --command minidump.gdb --eval-command "x/1024aw $sp_addr" |& perl -ne '$re=qr{(<((?:[^<>]++|(?-2))*+)>)}; print "$2\n" while (s/0x[0-9a-f]+ $re//)'
-```
-
-Reference: <https://crbug.com/217640#c2> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/crash-reporting/faq/index.md b/chromium/docs/website/site/chromium-os/packages/crash-reporting/faq/index.md
deleted file mode 100644
index 59d6e54bc06..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/crash-reporting/faq/index.md
+++ /dev/null
@@ -1,519 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/crash-reporting
- - Crash Reporting (Chrome OS System)
-page_name: faq
-title: Crash Reporting FAQ
----
-
-[TOC]
-
----
-
-## General Questions
-
-### How can I get the stack trace from a crash on my development Chromebook?
-
-Crash reporter will still collect crashes, they just won't be sent to the Crash
-Server. Beyond that, the crash reporter is no longer involved, but you can get
-more info from [Getting a stack dump from a minidump
-file](https://sites.google.com/a/google.com/chromeos/resources/engineering/getting-a-stack-dump-from-a-minidump-file).
-
-### How can I get a core dump from a minidump for use by gdb?
-
-There's a `minidump-2-core` executable provided by Breakpad to convert a
-minidump to a core file. You can build it in a Chrome checkout with
-`ninja -C out/Default minidump-2-core`, or you can build it in a Chrome OS
-checkout with `sudo emerge google-breakpad`.
-
-Once you have `minidump-2-core`, you can look at section [Use gdb to show a
-backtrace](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/crash-reporting/debugging-a-minidump#TOC-Use-gdb-to-show-a-backtrace)
-of the [Debugging a Minidump
-File](/chromium-os/packages/crash-reporting/debugging-a-minidump) guide. This is
-my collection of instructions for how I've made use of `gdb` given a minidump
-file. It shows, for example, how to adjust the symbol addresses in `gdb` so they
-match up appropriately, and it includes instructions for how to do this for ARM
-minidumps as well.
-
-Googlers: You can also look through the section [Crash dump
-analysis](https://sites.google.com/a/google.com/chrome-msk/dev#TOC-Crash-dump-analysis),
-which is where I found the address-adjusting logic.
-
-### Is there a design document for Chrome OS Crash Reporting?
-
-Yes, in the [project
-sources](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crash-reporter/docs/design.md).
-For a general overview, though:
-
-For **non-Chrome** processes we use an external program, `crash_reporter`, that
-gets called by the kernel when a crash occurs. It gets passed the crashing
-process's core file, and takes care of generating the report. `crash_reporter`
-also generates a report for kernel crashes, unclean shutdowns, and several other
-things.
-
-For **Chrome** processes, it uses Breakpad. When a Chrome crash occurs, the
-Breakpad library code linked into it takes care of generating a report. Then it
-calls crash_reporter to queue the full report.
-
-The crash reports generated by `crash_reporter` are uploaded by `crash_sender`,
-which is run via a cron job every hour.
-
-We also report crash metrics (UMA) for Chrome OS. The crash metrics for
-**Chrome** are reported and uploaded by Chrome itself. The crash metrics for
-**non-Chrome** processes are reported by `crash_reporter` *via* Chrome, which
-then uploads them. `crash_reporter` sends a metric for each crash, saying
-whether it's a user crash, kernel crash, or unclean shutdown.
-
-There are currently two different, but redundant, types of metrics being
-reported by `crash_reporter`:
-
-* The old type uses the "Logging.CrashCounter" histogram with buckets
- for "user", "kernel", and "unclean shutdown" counts.
-* The new type has Chrome report them in its own stability metrics
- (see <https://crbug.com/193643> for more info).
-
-### What's the difference between "Aw, Snap!" and "He's Dead, Jim!"?
-
-These are error pages shown by Chrome when a tab's process in some way dies.
-According to the Chrome Help pages, "You may see the "Aw, Snap!" message if a
-webpage's process crashes unexpectedly." On the other hand, "You may see the
-“He’s Dead, Jim!” message if the operating system has terminated the tab’s
-process due to a lack of memory. Alternatively, if you terminated the process
-using Google Chrome's Task Manager, the system's task manager, or with a command
-line tool, this message will appear as well."
-
-That is, an "Aw, Snap" is most likely caused by a genuine crash of the
-non-browser process (e.g. renderer, plugin), and should result in a crash report
-if consent is enabled (see FAQ entry [How can I know if my Chromebook will
-report
-crashes](https://sites.google.com/a/google.com/chromeos/resources/engineering/crash-reporting-faq#TOC-How-can-I-know-if-my-Chromebook-will-report-crashes-)).
-The "He's Dead, Jim" is shown if a webpage's process is terminated by somebody
-or something else.
-
-Reference ("Aw, Snap!"): <https://support.google.com/chrome/answer/95669>
-Reference ("He's Dead, Jim!"):
-<http://support.google.com/chrome/bin/answer.py?hl=en&answer=1270364>
-Reference: <https://crbug.com/219693>
-
----
-
-## Crash Reporter
-
-### Will a developer's build image upload crash reports?
-
-No. A crash will still be processed by `crash_reporter`, but the report will not
-be uploaded to the Crash Server. More specifically, `crash_sender` will only
-send crash reports if the word "Official" appears in the
-"CHROMEOS_RELEASE_DESCRIPTION" line of `/etc/lsb-release`.
-
-Googlers: You can override this behavior by running `crash_sender` manually with
-the `--dev` option. This may be helpful for certain testing scenarios. By
-default, `crash_sender` will delay up to ten minutes before sending each crash
-report, so you will probably also want to set the command line option
-`--max_spread_time` to 0 to make them upload right away. Recipe for testing
-crashes (as root, on a test image):
-
-```none
-sleep 100 &
-kill -SEGV $!   # generate a core
-metrics_client -C   # force metrics consent
-/sbin/crash_sender --dev --max_spread_time=0   # force the upload
-grep crash_sender /var/log/messages
-```
-
-### How can I know if my Chromebook will report crashes?
-
-You can check the consent settings. Go to **Settings -&gt; Advanced Settings**
-and then see if "Automatically send usage statistics and crash reports to
-Google" is enabled under the **Privacy** section. If there is no such setting
-shown, then you are running a developer's build image (see FAQ entry [Will a
-developer's build image upload crash
-reports](#TOC-Will-a-developer-s-build-image-upload-crash-reports-)).
-
-### Why aren't crashes being reported for Chrome?
-
-First, check to make sure that consent has been enabled (see FAQ entry [How can
-I know if my Chromebook will report
-crashes](#TOC-How-can-I-know-if-my-Chromebook-will-report-crashes-)). If no such
-setting is shown, read on.
-
-If you don't see any reference at all to crash reporting in
-`/var/log/ui/ui.LATEST` after a crash, chances are you're running a developer
-image. Developer images are built with Chromium. Chrome handles its own crashes
-by linking in Breakpad, whereas Chromium does not link in Breakpad. Therefore,
-when a Chromium crash occurs, it is simply ignored.
-
-If you want to see these crash reports, you can either have crash_reporter
-report Chromium crashes, or build Chrome instead of Chromium. For the former,
-see instructions related to `collect_chrome_crashes`, below. For the latter, use
-the "--internal" flag to cros chrome-sdk, as explained in the instructions for
-[building Chrome on Chrome
-OS](/chromium-os/how-tos-and-troubleshooting/building-chromium-browser).
-
-Bear in mind that crash_reporter won't upload crash reports by default for
-developer images. See FAQ entry [Will a developer's build image upload crash
-reports](#TOC-Will-a-developer-s-build-image-upload-crash-reports-) for more
-information.
-
-### Are there limits on how many crashes will be reported?
-
-Yes.
-
-`crash_reporter` will stop creating crash reports if there are 32 of them
-already on disk. There's a separate limit per collection directory, so
-`/var/spool/crash` and `/home/chronos/user/crash` can each contain up to 32
-crash reports. That limit is defined in **crash-reporter/crash_collector.cc**'s
-variable **CrashCollector::kMaxCrashDirectorySize**. With respect to uploading
-crash reports, `crash_sender` has a per day limit. More specifically, if at
-least 32 crash reports have been sent within the past 24 hours, and the combined
-compressed size of those reports is above 24 MB, it will delay and try sending
-the crash report later. These limits are defined by **kMaxCrashRate**
-andkMaxCrashBytes** in **crash-reporter/crash_sender_util.h**.
-
-### Where can I find the crash minidump/core file for a crashed process on my Chromebook?
-
-#### Official builds:
-
-For processes run as user "chronos", `crash_reporter` puts its files (\*.dmp and
-\*.meta) in `/home/chronos/user/crash/` if the user is logged in,
-`/home/chronos/crash` if not. For other processes, `crash_reporter` puts them in
-`/var/spool/crash/`.
-
-#### Developer builds:
-
-For processes run as user "chronos", `crash_reporter` puts its files (\*.dmp,
-\*.meta, and \*.core) in `/home/chronos/crash/`. For other processes,
-`crash_reporter` puts them in `/var/spool/crash/`. If you are running a
-developer image, the `/root/.leave_core` file should exist, so `crash_reporter`
-will not delete the core file.
-
-### Where can I find the crash minidump/core file when chrome crashes immediately after login and logs me out?
-
-For official builds, minidumps are written to \`/home/user/\*/crash\`
-directories, which are only mounted when the corresponding user(s) are logged
-in. cryptohome unmounts the home directory if chrome crashes immediately after
-login and leaves crash dump. <http://crbug.com/857317>. You can use the
-cryptohome command to mount and decrypt home directories:
-
-```none
-DUT$ cryptohome --action=mount_ex --user=user@gmail.com
-DUT$ ls -l /home/user/*/crash/
-```
-
-### Why are my crash dumps disappearing sometimes?
-
-The `crash_sender` process runs every hour. In most cases when it runs, it will
-delete your existing crash dumps -- after uploading the report if that is
-enabled. The exception to them being deleted is if `crash_sender` is uploading
-crash reports and it reaches a limit, in which case it will hold off for another
-hour. You can prevent the `crash_sender` from running by touch'ing the
-`/var/lib/crash_sender_paused` file.
-
-### At what point can the crash reporter catch crashes?
-
-TBD
-
-### Something crashed during startup, but I don't see it in /var/spool/crash/ or ~/crash/?
-
-In order for the crash reporter to be called to process a crash, the line in
-`/proc/sys/kernel/core_pattern` must start with "|/sbin/crash_reporter". Unless
-otherwise set, it defaults to just "core". The `crash_reporter` program sets the
-kernel's core pattern when it is first run by Upstart. This is currently done at
-the same time as "system-services" services (see
-`src/platform/init/crash-reporter.conf`).
-
-Reference: <https://crbug.com/199893>
-
-### Do we report out-of-memory (OOM) crashes?
-
-No. When a system is running out of memory, the kernel will invoke its OOM
-killer to kill some process with the hopes that it will free up enough memory.
-On Chrome OS the killed process should always be one of Chrome's, because we
-make all others unkillable. Search for "init on ChromeOS" in [Out of memory
-handling](http://www.chromium.org/chromium-os/chromiumos-design-docs/out-of-memory-handling)
-to see which processes should be killed first.
-
-When the OOM killer runs, you should see a message like the following in the
-system's log:
-
-```none
-<4>[ 2461.625535] chrome invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
-```
-
-..followed by a bunch of current memory information and then:
-
-```none
-<3>[ 2461.638097] Out of memory: Kill process 9250 (chrome) score 648 or sacrifice child
-<3>[ 2461.638107] Killed process 9250 (chrome) total-vm:197184kB, anon-rss:14464kB, file-rss:13184kB
-```
-
-Unfortunately, we don't have a good way to report these OOM killings. When the
-kernel kills a process with the oom-killer, it effectively does so with the
-SIGKILL signal. Because of this, the Breakpad signal handler does not get
-invoked (which is how Chrome reports its crashes), nor does `crash_reporter` get
-called by the kernel.
-
-There's been talk about handling this within Chrome by having a soft memory
-limit. See [Out of memory
-handling](http://www.chromium.org/chromium-os/chromiumos-design-docs/out-of-memory-handling)
-for the design doc. Otherwise, I imagine we could modify the kernel to do
-something smarter than a SIGKILL. A simpler solution would be to have something
-monitor the system logs, and simply report the OOM killing (at least with an UMA
-metric).
-
----
-
-## Core File Questions
-
-### Does crash_reporter save the core file for a crash?
-
-Yes, but only for developer images. When a crash occurs, the kernel sends the
-core file to `crash_reporter`. The core file is saved to disk by
-`crash_reporter` and then converted to a minidump. If the `/root/.leave_core`
-file exists (i.e. it's a developer image), the core file will be left on disk.
-See FAQ entry [Where can I find the crash dump/core file for a crashed process
-on my
-Chromebook](#TOC-Where-can-I-find-the-crash-minidump-core-file-for-a-crashed-process-on-my-Chromebook-)
-for where to find the core file. Note that by default Chrome crashes are not
-handled by `crash_reporter` (see FAQ entry [Why would chrome crashes not
-generate a core file on dev
-builds](#TOC-Why-would-Chrome-crashes-not-generate-a-core-file-on-dev-builds-)).
-
-### How can I get the core file for a crash?
-
-For non-Chrome crashes when running a developer image, see FAQ entry [Does
-crash_reporter save the core file for a
-crash](#TOC-Does-crash_reporter-save-the-core-file-for-a-crash-). For Chrome
-crashes on a developer image, see FAQ entry [Why would chrome crashes not
-generate a core file on dev
-builds](#TOC-Why-would-Chrome-crashes-not-generate-a-core-file-on-dev-builds-).
-
-If you're not running a developer image, the easiest way to get core files is
-probably to touch the `/root/.leave_core` and
-/mnt/stateful_partition/etc/collect_chrome_crashes files.
-
-If you don't want to involve crash_reporter at all, for whatever reason, you can
-manually change the setting such that the kernel creates a core file instead of
-piping it to `crash_reporter`. First, set the core file pattern (make sure the
-core's path is writable by the would-be crashing process):
-
-> `sudo sh -c 'echo "/home/chronos/core.%e.%p" > /proc/sys/kernel/core_pattern'`
-
-Then, modify the maximum size of core files created for the process(es) you care
-about:
-
-> `prlimit --core=unlimited --pid <pid>`
-
-### Why would Chrome crashes not generate a core file on dev builds?
-
-By default, all but Chrome crashes are handled by `crash_reporter`. Chrome
-handles its own crashes by linking in Breakpad, which does not generate core
-files. In order to have `crash_reporter` not ignore Chrome crashes, though, you
-can touch the `/mnt/stateful_partition/etc/collect_chrome_crashes` file. This
-file is normally used by the autotests in order for Chrome crashes to still be
-handled. See also FAQ entry [Does crash_reporter save the core file for a
-crash](#TOC-Does-crash_reporter-save-the-core-file-for-a-crash-).
-
-Reference: <https://crbug.com/201089>
-
----
-
-## Build Questions
-
-### Should we be building with "-g", "-ggdb", or "-ggdb2"?
-
-Use "-g". We used to build with "-ggdb" just to be more explicit about what
-`cros_generate_breakpad_symbols` expects; however, WebKit currently relies on it
-being "-g" if we want to remove its debug symbols. davidjames@ did the work to
-figure out that "-g" and "-ggdb" are the same for the GNU compiler we're
-currently using, so he could switch Chrome to building with "-g". To be
-consistent, we might as well build everything with "-g". As of 11/10/2011 no
-other packages had been modified to use the new option yet, but this is the
-direction we'd like to go in.
-
-Reference: <https://gerrit.chromium.org/gerrit/11462>
-
----
-
-## Technical Details
-
-### Can my program catch SIGSEGV without screwing up crash_reporter?
-
-*Note: This discussion focuses on SIGSEGV, but it applies to all signals that
-the kernel creates coredumps for (e.g. SIGQUIT, SIGILL, SIGABRT, etc...).*
-
-Yes. Normally, if you don't catch SIGSEGV, the kernel will default to spawning
-`crash_reporter` for the crash. If you catch SIGSEGV, then what happens depends
-on how the segfault was sent and how you handle it. If the signal was sent to
-your process by someone (e.g. using the `kill` command) then, after your signal
-handler runs, your program will continue where it left off. If the segfault was
-caused by something like an actual bad memory access (e.g. "\*(char \*)0x0 = 1")
-then, after your signal handler runs, the signal could simply be sent again
-(assuming your signal handler didn't change the runtime environment so as to
-"fix" the source of the segfault). Chances are you don't want to just return
-normally from your signal handler, though; in the second scenario you could
-easily end up with an infinite loop.
-
-If you want to **bypass** `crash_reporter`, you should be able to just call
-`_exit()` from your handler (normally you want `_exit()` rather than `exit()` as
-the latter will run `atexit()` hooks which could themselves could cause problems
-in a signal handler context). In both scenarios that will bypass the kernel's
-handling of the SIGSEGV. However, if you **want** `crash_reporter` to still run
-after your handler finishes, you have to do two different things in order to
-handle both scenarios. For the case where your program caused a segfault, you'll
-want to set the SIGSEGV handler back to what it was before -- so that when the
-signal is sent again it's handled as if you had no handler. In C this is done
-with `signal(SIGSEGV, SIG_DFL)`. For the case where your program was explicitly
-sent a signal by someone else, you'll have to re-send the signal to yourself.
-You should be able to do this by just calling `kill()` directly within your
-handler. Note that this should work without changing the SIGSEGV handler back
-because the signal will still have been masked until your handler returns (i.e.
-that's done in case your handler were to segfault). You can determine which
-scenario you're in by checking the `si_pid` field of the `siginfo_t` struct your
-handler is sent.
-
-An example of how to catch SIGSEGV without screwing up `crash_reporter` can be
-found in Google Breakpad's
-[src/breakpad/src/client/linux/handler/exception_handler.cc](http://code.google.com/p/google-breakpad/source/browse/trunk/src/client/linux/handler/exception_handler.cc?spec=svn1020&r=1018#223):
-
-```none
-void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) {
-  /* PUT YOUR HANDLER CODE HERE */
-  if (info->si_pid) {
-    // This signal was triggered by somebody sending us the signal with kill().
-    // In order to retrigger it, we have to queue a new signal by calling
-    // kill() ourselves.
-    if (tgkill(getpid(), syscall(__NR_gettid), sig) < 0) {
-      // If we failed to kill ourselves (e.g. because a sandbox disallows us
-      // to do so), we instead resort to terminating our process. This will
-      // result in an incorrect exit code.
-      _exit(1);
-    }
-  } else {
-    // This was a synchronous signal triggered by a hard fault (e.g. SIGSEGV).
-    // No need to reissue the signal. It will automatically trigger again,
-    // when we return from the signal handler.
-  }
-  // As soon as we return from the signal handler, our signal will become
-  // unmasked. At that time, we will  get terminated with the same signal that
-  // was triggered originally. This allows our parent to know that we crashed.
-  // The default action for all the signals which we catch is Core, so
-  // this is the end of us.
-  signal(sig, SIG_DFL);
-}
-```
-
-In fact, if you link in Breakpad you can just use its handler -- which will call
-any callbacks you specify. This is how Chrome handles its crashes (see
-[EnableCrashDumping() in
-src/chrome/app/breakpad_linux.cc](http://code.google.com/searchframe#OAMlx_jo-ck/src/chrome/app/breakpad_linux.cc&type=cs&l=407)
-for an example).
-
-Reference:
-<http://www.linuxquestions.org/questions/programming-9/sigsegv-handler-segmentation-fauld-handler-277790/>
-Reference: <http://www.openqnx.com/phpbbforum/viewtopic.php?t=6835>
-Reference:
-<http://www.alexonlinux.com/how-to-handle-sigsegv-but-also-generate-core-dump>
-Reference:
-<http://www.justskins.com/forums/how-to-ignore-sigsegv-104217.html#post337119>
-
-### For Chrome what general functions are used for reporting crashes?
-
-Here is an ordered list of notable files & functions in the Chromium source tree
-that are used by Chrome to report crashes on Chrome OS. Although most of this
-probably applies to the Linux platform as well, I wrote these notes with Chrome
-OS in mind.
-
-**chrome/browser/chrome_browser_main_linux.cc: IsCrashReportingEnabled()**
-Determines whether or not crash reporting should be done in Chrome.
-
-#### *Chrome Browser Crashes*
-
-**chrome/app/breakpad_linux.cc: EnableCrashDumping()**
-Enables crash reporting for the browser. Determines the path for a browser
-crash's minidump.
-
-**breakpad/src/client/linux/handler/exception_handler.cc:
-ExceptionHandler::HandleSignal()**
-Handles the crash signals in the browser. Calls GenerateDump() to dump the
-crash.
-
-**breakpad/src/client/linux/handler/exception_handler.cc:
-ExceptionHandler::GenerateDump()**
-Creates a new process with clone() -- which calls Breakpad's WriteMinidump() to
-do the dumping of the browser process.
-
-**breakpad/src/client/linux/minidump_writer/minidump_writer.cc:
-WriteMinidump()**
-Attaches to and dumps the browser process to a minidump file.
-
-**chrome/app/breakpad_linux.cc: HandleCrashDump()**
-Reads the minidump file, adds additional MIME information, and either uploads it
-or writes it out to file.
-
-#### *Chrome Renderer Crashes*
-
-**content/browser/child_process_launcher.cc: LaunchInternal()**
-Seems to do the launching for renderers (e.g. sets kCrashDumpSignal).
-
-**chrome/app/breakpad_linux.cc: EnableNonBrowserCrashDumping()**
-Enables crash reporting for a renderer.
-
-**breakpad/src/client/linux/handler/exception_handler.cc:
-ExceptionHandler::HandleSignal()**
-Handles the crash signals in a renderer. Calls the renderer crash handler; it
-does not call GenerateDump() to do its own crash dumping.
-
-**chrome/app/breakpad_linux.cc: NonBrowserCrashHandler()**
-Called by a renderer process to handle its own crash. Writes to the browser’s
-pipe with basic context info about the crash.
-
-**chrome/browser/crash_handler_host_linux.cc:
-CrashHandlerHostLinux::OnFileCanReadWithoutBlocking()**
-Called by the browser process when a renderer crashes. Reads the basic crash
-info from the renderer's pipe.
-
-**chrome/browser/crash_handler_host_linux.cc:
-CrashHandlerHostLinux::WriteDumpFile()**
-Called by the browser process. Determines the path for a renderer crash's
-minidump. Calls Breakpad's WriteMinidump() to do the dumping.
-
-**breakpad/src/client/linux/minidump_writer/minidump_writer.cc:
-WriteMinidump()**
-Attaches to and dumps a renderer process to a minidump file.
-
-**chrome/app/breakpad_linux.cc: HandleCrashDump()**
-Reads the minidump file, adds additional MIME information, and either uploads it
-or writes it out to file.
-
----
-
-## About the Team
-
-### Where should I file Crash Reporting bug reports/feature requests?
-
-Use the chromium-os issue tracker: <https://crbug.com/new>. File it under
-component "OS&gt;Systems&gt;CrashReporting".
-
-### Who is responsible for this FAQ?
-
-The Crash Reporting team. If you find any issues with the questions/answers, or
-there's a question you feel would be beneficial to have answered here, feel free
-to [create an issue](https://crbug.com/new) under area "Area-Logging" with type
-"Type-Documentation".
-
-### Who are the authors of this FAQ?
-
-This FAQ is maintained by the Crash Reporting team. The original author was
-Michael Krebs (mkrebs@). It started as part of a general Chrome OS reference
-guide, but was later split into this FAQ, a [Crash Reporting Reference
-Guide](https://sites.google.com/a/google.com/mkrebs/references/crash-reporting),
-a [Google Breakpad Reference
-Guide](https://sites.google.com/a/google.com/mkrebs/references/google-breakpad),
-and another [Chrome OS Reference
-Guide](https://sites.google.com/a/google.com/mkrebs/references/chrome-os). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/crash-reporting/index.md b/chromium/docs/website/site/chromium-os/packages/crash-reporting/index.md
deleted file mode 100644
index 5fdf73e21da..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/crash-reporting/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: crash-reporting
-title: Crash Reporting (Chrome OS System)
----
-
-* The main docs now exist in markdown:
- * <https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crash-reporter/>
-* There's a Chrome OS [Crash Reporting
- FAQ](/chromium-os/packages/crash-reporting/faq).
-* Getting [Stack
- Traces](/chromium-os/packages/crash-reporting/stack-traces-from-chrome-os-crash-dumps)
- from crash reports.
-* There's also documentation on how to [Debug a
- Minidump](/chromium-os/packages/crash-reporting/debugging-a-minidump). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/crash-reporting/stack-traces-from-chrome-os-crash-dumps/index.md b/chromium/docs/website/site/chromium-os/packages/crash-reporting/stack-traces-from-chrome-os-crash-dumps/index.md
deleted file mode 100644
index 33c4050b8b2..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/crash-reporting/stack-traces-from-chrome-os-crash-dumps/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/crash-reporting
- - Crash Reporting (Chrome OS System)
-page_name: stack-traces-from-chrome-os-crash-dumps
-title: Stack Traces From Chrome OS Crash Dumps
----
-
-If you need to get a stack from a BVT failure that has already been uploaded to
-Google Cloud Storage, there's a much easier way to do this. See the [Chrome OS
-sheriff](/developers/tree-sheriffs/sheriff-details-chromium-os) documentation
-under "How to find test results/crash reports". Look in a directory like
-desktopui_MediaAudioFeedback/sysinfo/iteration.1/var/spool/crash for the
-chrome.dmp.txt file. It should have a stack.
-
-If you run a test on a device using run_remote_tests and the test crashes (for
-example, with a Chrome sig 11) the test script will copy a minidump file back to
-your workstation. However, it will not automatically generate a stack trace for
-you. Here's how to get one. (Directions are based on the [Linux and Windows
-instructions](/developers/decoding-crash-dumps).)
-
-Run your test:
-
-**./run_remote_tests.sh --remote=172.22.70.164 desktopui_MediaAudioFeedback
---args 'v=1'**
-
-Output for a crash looks like this:
-
-Crashes detected during testing:
-
----------------------------------------------------------------------
-
-chrome sig 11
-
-desktopui_MediaAudioFeedback/desktopui_MediaAudioFeedback
-
----------------------------------------------------------------------
-
-Look for a line with a path to the .dmp file (it didn't really generate a stack
-trace for you):
-
-10:49:03 INFO | Generated stack trace for dump
-/tmp/run_remote_tests.wNYt/desktopui_MediaAudioFeedback/desktopui_MediaAudioFeedback/sysinfo/iteration.1/var/spool/crash/chrome.20120813.104825.5708.dmp
-
-There's a core file in that directory, but you can't use it directly as the
-chrome binary is stripped. We can, however, generate symbols from the
-chrome.debug file and use those with minidump_stackwalk to get a stack trace.
-
-First, copy the dmp file so you don't need to type the long path over and over:
-
-**cp
-/tmp/run_remote_tests.wNYt/desktopui_MediaAudioFeedback/desktopui_MediaAudioFeedback/sysinfo/iteration.1/var/spool/crash/chrome.20120813.104825.5708.dmp
-~/foo.dmp**
-
-Make a temporary directory like /tmp/my_symbols. Force minidump_stackwalk to
-generate errors about paths not found by pointing it at that directory:
-
-**mkdir /tmp/my_symbols**
-
-**minidump_stackwalk ~/foo.dmp /tmp/my_symbols 2&gt;&1 | grep "No symbol file" |
-grep "chrome"**
-
-This will tell you where you need to put the debugging symbols. It will be a
-path with a hash in it, like /tmp/my_symbols/chrome/&lt;hash&gt;:
-
-2012-08-13 11:31:05: simple_symbol_supplier.cc:193: INFO: No symbol file at
-/tmp/my_symbols/chrome/6CC67691D7F2ECBF5E95D2BEF7F11C5A0/chrome.sym
-
-Now we need to generate the symbols and put them at that location. Create the
-directory using the path above:
-
-**mkdir -p /tmp/my_symbols/chrome/6CC67691D7F2ECBF5E95D2BEF7F11C5A0**
-
-Run dump_syms with the chrome binary and directory of the chrome.debug symbol
-file. Substitute your own board for "lumpy". This step can take 1-2 minutes.
-
-**dump_syms /build/lumpy/opt/google/chrome/chrome
-/build/lumpy/usr/lib/debug/opt/google/chrome &gt; /tmp/chrome.sym**
-
-Move the symbol file into the path above:
-
-**mv /tmp/chrome.sym /tmp/my_symbols/chrome/6CC67691D7F2ECBF5E95D2BEF7F11C5A0/**
-
-Finally, you can run minidump_stackwalk to get a stack trace. It will look
-automatically for chrome/&lt;hash&gt; under the /tmp/my_symbols directory:
-
-**minidump_stackwalk ~/foo.dmp /tmp/my_symbols**
-
-If you need symbols for things like shared libraries you can repeat the above
-process grepping the path-not-found errors for things like "libglsl.so" instead
-of "chrome". See the [Linux instructions](/developers/decoding-crash-dumps) for
-details. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/cros-flashrom/index.md b/chromium/docs/website/site/chromium-os/packages/cros-flashrom/index.md
deleted file mode 100644
index a0a25f68977..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/cros-flashrom/index.md
+++ /dev/null
@@ -1,336 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: cros-flashrom
-title: flashrom
----
-
-[TOC]
-
-## Overview
-
-Flashrom is a userspace utility we use primarily to update host (AP/PCH)
-firmware, but can also be used to update firmware on other components such as
-ECs. it can be run both on the target machine (field updates) or on a user's
-workstation to flash via an external programmer such as Servo, Dediprog SF100,
-Bus Pirate and more.
-
-Flashrom is an open-source project hosted at <http://flashrom.org>. The version
-which is used in Chrome OS devices and in the CrOS SDK is a forked version with
-some CrOS-specific modifications. It can be found at the following URL:
-<https://chromium.googlesource.com/chromiumos/third_party/flashrom/>
-
-## Basic Usage
-
-This section will cover basic command-line usage. The most commonly used
-command-line switches are:
-
--r | --read read flash and save to file
-
--w | --write write to flash
-
--p | --programmer &lt;name&gt;\[:&lt;param\] specify the programmer device and
-parameters
-
-The "-p" argument tells us which programmer interface we are targeting. Examples
-include "host", "ec", or "ft2232_spi:type=servo-v2" (see section on Servo
-below). For a full listing of command-line switches, use -h or --help.
-
-The following commands have to do with
-[write-protection](/chromium-os/firmware-porting-guide/firmware-ec-write-protection):
-
---wp-status show write protect status
-
---wp-range set write protect range
---wp-enable enable write protection
---wp-disable disable write protection
-
-Some examples of basic usage, these are all run on the device itself:
-
-If you want to read the firmware from the SPI:
-
-$ flashrom -p host -r image.bin
-
-If you want to write a firmware image to the SPI:
-
-$ flashrom -p host -w image.bin
-
-If you want to read the ec image from the EC:
-
-$ flashrom -p ec -r ec.bin
-
-If you want to write an ec image to the EC:
-
-$ flashrom -p ec -w ec.bin
-
-If you just want to update your firmware and EC to the latest version in your
-Chrome OS system, ignoring any safety checks, run the below which invokes
-flashrom for you:
-
-$ chromeos-firmwareupdate --mode=incompatible_update
-
-**Warning:** when running flashrom on an x86 host, the Intel Management Engine
-(ME) firmware region will be read back as 0xff bytes, and writes to the ME
-region will be silently discarded. This means that if you make a backup of your
-flash contents with flashrom -p host -r backup.bin and then try to restore
-backup.bin via servo, the ME region will be overwritten with 0xff bytes and your
-system will no longer boot. The ME region can be identified by running dump_fmap
-on the firmware image; here is an example from Link:
-
-area: 3
-
-area_offset: 0x00001000
-
-area_size: 0x001ff000 (2093056)
-
-area_name: SI_ME
-
-The /usr/sbin/chromeos-firmwareupdate script contains a copy of the factory BIOS
-image (including the ME firmware), if you've already run into this problem.
-
-## **Servo**
-
-Servo has an FT2232 USB &lt;--&gt; SPI interface which Flashrom can use to pass
-commands thru to the SPI chip. All you need to do is set the programmer target
-(-p ft2232_spi:type=servo-v2) and enable/disable the buffers on the flex cable
-using dut-control (from the **hdctools** package).
-
-One thing to watch for is the voltage argument to dut-control. Most SPI chips
-operate at either 1.8V or 3.3V. This is set by spi2_vref:ppXXXX where XXXX is
-1800 or 3300.
-
-Example for programming a 1.8V SPI chip:
-
-$ dut-control spi2_vref:pp1800 spi2_buf_en:on spi2_buf_on_flex_en:on
-spi_hold:off cold_reset:on
-
-$ sudo /usr/sbin/flashrom -p ft2232_spi:type=servo-v2 -w &lt;image to
-program&gt;
-
-$ dut-control spi2_vref:off spi2_buf_en:off spi2_buf_on_flex_en:off spi_hold:off
-cold_reset:off
-
-To control hardware write-protect on DUT using Servo:
-
-$ dut-control fw_wp_en:on fw_wp_vref:pp1800 # Enable WP override on Servo, this
-example assumes 1.8V chip
-
-$ dut-control fw_wp:off # Force WP off
-
-$ sudo /usr/sbin/flashrom -p ft2232_spi:type=servo-v2 --wp-disable # Disable
-software WP (--wp-enable and --wp-range could also be done here)
-
-$ dut-control fw_wp_en:off fw_wp_vref:off # Disable WP override on Servo.
-
-In this example we enable WP override, force the signal "off" (drive it high,
-even if /WP is asserted by screw/H1/etc), disable software WP, and then disable
-WP override. With software WP disabled we can write to the entire chip
-regardless of the hardware WP status.
-
-More details about how to run it with Servo are available
-[here](/chromium-os/servo) and [here (for Googlers only)](http://go/cros-servo).
-
-## **Partial Reads and Writes**
-
-Flashrom can be instructed to target only a specific region on the flash chip.
-This allows scripts (especially factory installer and autoupdate) to selectively
-update regions without spending a lot of time reading or updating the entire
-flash memory.
-
-### **Selectively include regions**
-
-To include a region in a read/write operation, use the -i option:
-
--i | --image &lt;name&gt;\[:&lt;file&gt;\] only access image &lt;name&gt; from
-flash layout
-
-The \[:&lt;file&gt;\] argument is optional and has an interesting effect on -r
-and -w. If a file is not supplied, flashrom will operate on a file that is the
-same size as the targeted flash chip. For example, if you wish to write sections
-FOO and BAR from a 4MB file to a 4MB flash chip, you could do: flashrom -p
-&lt;programmer&gt; -i FOO -i BAR -w filename.bin
-
-If files are specified as arguments to -i options, flashrom will not require an
-argument to -w or -r and instead will work with the files supplied via -i
-arguments. So if you have separate files for FOO and BAR which are not part of a
-larger image, let's call them foo.bin and bar.bin, you can write them to the
-firmware ROM like so: flashrom -p &lt;programmer&gt; -i FOO:foo.bin BAR:bar.bin
--w
-
-One can also use a combination:
-
-* In the read case, supplying a filename as an argument to "-r" will
- produce a ROM-sized file in addition to files produced for "-i"
- arguments which specify a filename.
-* In the write case, filenames supplied as arguments to "-i" options
- take precedence. This allows the user to supply a ROM-sized file to
- "-w" but also patch its content using files supplied to "-i". for
- example, if you have a standard ROM image but you want to apply
- custom data to a specific region when flashing.
-
-### **Layout**
-
-When -i is used, Flashrom will search for the flashmap (fmap) and compare region
-names with the name supplied by the user. If the user wishes to supply a custom
-mapping instead of using the flashmap, a layout file can be used:
-
--l | --layout read ROM layout from &lt;file&gt;
-
-For example, this will write the custom-defined ranges from the supplied
-filename to the ROM:
-
-echo "000000:0fffff FOO" &gt; layout.txt
-
-echo "200000:2fffff BAR" &gt;&gt; layout.txt
-
-flashrom -p &lt;programmer&gt; -l layout.txt -i FOO -i BAR -w filename.bin
-
-### **Selective verification of partial writes**
-
-By default, flashrom verifies the result of any destructive operation by reading
-and comparing the entire ROM. To only verify portions which have supposedly been
-written, --fast-verify can be used:
-
---fast-verify only verify -i part
-
-This is generally considered safe since a discrepancy in the partially written
-portions will indicate that something is likely wrong elsewhere.
-
-TODO(dhendrix): That should probably be renamed "--partial-verify" or something.
-
-### **Speeding Up Writes**
-
-This section describes some shortcuts that can be useful for developers. **Do
-not rely on the behavior described below for production code**. It's really only
-intended to help developers iterate faster.
-
-Erase and write operations are orders of magnitude slower than reads on typical
-flash memory devices. Thus, flashrom figures out which blocks need to be updated
-so that it can try and skip as many as possible. The basic steps are:
-
-1. Read entire ROM to obtain a reference image before any destructive
- operation takes place.
-2. Go thru write algorithm and only erase/write blocks as needed.
-3. Read the ROM again to verify that it matches the supplied file.
-
-The main way to speed things up is to skip the first and last verification
-steps.
-
-**Skipping verification**
-
-If you're confident that the bits will land where they need to, you can save
-time by skipping the verification step.
-
--n | --noverify don't auto-verify
-
-**Supplying original ROM content with a file**
-
-This will allow you to skip the initial step of obtaining a reference image:
-
---diff &lt;file&gt; diff from file instead of ROM
-
-This tells flashrom that the file supplied as an argument to --diff will be used
-as a reference image, so it will skip reading the ROM content. This is useful if
-you can track exactly what is on the ROM, but can be lead to frustrating bugs if
-the contents get out of sync. **Use with caution!**
-
-Example (note: this assumes that you have previously flashed "old.bin"):
-
-flashrom -p ft2232_spi:type=servo-v2 -w new.bin --diff old.bin **&& cp new.bin
-old.bin**
-
-## **Power management pitfalls to watch out for**
-
-In short:
-
-* System must remain running (given).
-* powerd must not tickle the embedded controller (See "Embedded
- Controller Interactions" below).
-* Performance should not be significantly degraded.
-
-Chrome OS devices usually read firmware at least once per boot-up often to
-obtain things contained in VPD (e.g. antennae calibration data), populate
-entries for chrome://system, and small system maintenance tasks.
-
-## **Embedded Controller interactions**
-
-Embedded Controllers are independent microcontrollers which coexist in a
-platform to service some power management routines via ACPI or a other
-interface. This often includes handling lid switch events, sensors (such as
-ambient light sensor), thermal management, etc.
-
-The way they are designed can make firmware updates difficult. To cut down on
-cost, often times they lack internal flash memory and have limited amount of
-SRAM so they need to access the firmware ROM to load new routines. To make
-matters more complicated some systems use the same firmware ROM for both the
-host (PCH, SoC, etc) and the EC.
-
-In rare circumstances where we're updating the EC firmware itself, Flashrom will
-pause the EC. However, doing so has highly visible side-effects such as
-disabling keyboard, causing the fan to spin up all the way, or dimming the
-screen. For more frequent host firmware updates, which can take a long time, we
-have historically relied on stopping powerd and then restarting it after we're
-done. This avoids the problem of interrupting the EC such that it needs to load
-more code, and avoids UI jank that can last up to a minute and cause a user to
-try to reboot the system. For historical context, see
-[chromium-os:18895](https://code.google.com/p/chromium/issues/detail?id=201998).
-
-#### Shared SPI block diagram
-
-#### Non-shared SPI block diagram
-
-## Performance
-
-We like firmware updates to be done as quickly as possible. This is important
-not only to minimize any side-effects the user might see as well as overall
-risk, but also to optimize time spent on the assembly line when a device is
-being manufactured
-([chromium-os:14139](https://code.google.com/p/chromium/issues/detail?id=197236)).
-
-Some older systems had performance issues when flashrom ran if powerd was
-enabled. This was due to poor DVFS implementations that could dramatically
-affect the behavior of the kernel's scheduler and cause huge delays when running
-flashrom.
-
-One side-effect was that flashrom would take an excessively long time to
-complete due to bad usleep() behavior
-([chromium-os:15025](https://code.google.com/p/chromium/issues/detail?id=198133)).
-However, when we disabled powerd we found that the UI would become janky
-([chromium-os:19321](https://code.google.com/p/chromium/issues/detail?id=202422)).
-Eventually settled on disabling powerd only for operations expected to take a
-long time and are destructive (erase/writes).
-
-Now that powerd is smarter, we stopped disabling powerd
-([chromium:400641](https://code.google.com/p/chromium/issues/detail?id=400641))
-and expect it to avoid doing anything which may degrade performance while
-flashrom is running.
-
-## Testing
-
-Recent (ca. 2016) improvements have been made to testing capabilities. A new set
-of test scripts has been merged and flashrom is gaining some built-in testing
-capabilities.
-
-**Built-in Test**
-
-Built-in tests are currently limited to write-protect testing using the
-"--wp-test" option. Flashrom will read the write-protect status and attempt to
-overwrite the protected region using all the available sector, block, and chip
-erase commands.
-
-**Test Script v2**
-
-The test script is used primarily for regression testing. It accepts two
-flashrom binaries as inputs, one which is presumed to be stable ("old") and one
-which is to be tested ("new").
-
-The test can be performed on a local host or a remote host with SSH access.
-Additionally, an external programmer (such as Servo, Dediprog, etc) can be used
-as part of the test setup.
-
-Documentation for test script v2: <https://goo.gl/3jNoL7>
-
-#### Flashrom Test Script v2 ‎‎(master doc)‎‎ \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/implicit-system/index.md b/chromium/docs/website/site/chromium-os/packages/implicit-system/index.md
deleted file mode 100644
index aee7903c367..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/implicit-system/index.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: implicit-system
-title: Implicit System Dependencies
----
-
-[TOC]
-
-## Introduction
-
-Gentoo has the concept of an [implicit system
-dependency](http://devmanual.gentoo.org/general-concepts/dependencies/). The
-idea is simply put: there are a number of packages that every system will need
-to function at any level (to boot, build, etc...), and rather than have every
-other package in the tree depend on them, we stick it in the @system set
-instead. Then things in that set can be ignored when declaring a package's
-dependency (build and run time).
-
-It's a convenient way of:
-
-* avoiding lots of circular dependencies
-* duplicating the same basic set of dependencies over and over in
- packages
-* swapping out one set of packages for another (like using "busybox"
- instead of "coreutils" in an embedded system)
-
-Consider this: how useful is a system if you don't have programs like sh, cat,
-grep, ls, mv, sed, test? Or a C library? Or to try to compile code, but have no
-compiler/assembler/linker? Is it really useful for developers to analyze every
-single shell script/line of source that goes into a distribution to see which
-tools are run (including every time a package releases a new version)? Or do we
-simply state up front: at run time, you may assume that a certain baseline of
-libraries/programs exist, and at build time, certain libraries/compilers exist?
-
-The question is obviously rhetorical -- developer time is better spent doing
-real work than keeping track of these things.
-
-## Rationale
-
-Gentoo doesn't explicitly define what packages qualify as part of the implicit
-system dependency. It alludes to them by talking about the @system set, but then
-tempers that requirement by stating not all things in it may be ignored.
-Chromium OS refines the concept by splitting them: there are "the implicit
-system dependencies" and there is the "@system set". The former concept is what
-we want to define, and the latter is merely a (partial) consequence of the
-first.
-
-More specifically, we don't want to say "the sys-apps/coreutils package is part
-of the implicit system dependencies". Instead, we say "\`mv\` and \`ls\` are
-part of the implicit system dependencies". Then, with that declaration in hand,
-it is obvious to say the default @system set includes the sys-apps/coreutils
-package.
-
-The reason for this is that the coreutils package includes a ton of utilities,
-many of which we would not consider part of the implicit system set. While it's
-unreasonable to say "if you use \`mv\` or \`touch\` or \`ls\` or \`echo\` or
-\`cat\`, you have to depend on coreutils" due to their high prevalence, you can
-make a reasonable case that if your program runs \`pinky\`, then you probably
-should depend on sys-apps/coreutils. The number of packages that use that tool
-is low (if there are any at all).
-
-## Guidelines
-
-### Libraries
-
-The only library packages you may assume exist in the implicit system set are
-the C library and runtime libraries provided by the compiler. This isn't just
-the main C library, but encompasses all the libraries that
-[POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/) documents like:
-
-* -lc
-* -lcrypt
-* -ldl
-* -lm
-* -lpthread
-* -lresolv
-* -lrt
-* -lutil
-
-For internal runtime libraries that the compiler provides (like -lstdc++ and
--lgcc and -lgcc_s and -lasan and the rest), you should not depend on these
-yourself.
-
-For all other third party libraries like -lz or -luuid or -lblkid or -lcrack,
-you must depend on the relevant package that provides that library.
-
-### Programs
-
-Typically, if the program you wish to use is defined by
-[POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html) or
-the [FHS](http://www.pathname.com/fhs/), you do not have to depend on it. For
-the exact list though, please consult the implementation below.
-
-### Compilation
-
-In order to build from source, you do not have to have build time dependencies
-on:
-
-* compiler (e.g. sys-devel/gcc and the utils/frontends it provides)
-* assembler/linker/archiver/strip/etc... (e.g. sys-devel/binutils)
-* OS headers (e.g. sys-kernel/linux-headers)
-* make (e.g. sys-devel/make)
-* tar (e.g. app-arch/tar)
-* gzip/bzip2 (e.g. app-arch/gzip & app-arch/bzip2)
-* any other runtime package listed in the Programs list above
-
-### Exceptions
-
-Because it wouldn't be a good set of guidelines without exceptions, here they
-are.
-
-* If your package is binary only (no source is available to the
- ebuild), then you should depend on the exact libraries that it is
- linked against (e.g. that will frequently be sys-libs/glibc and
- sys-libs/gcc-libs)
-
-## Implementation
-
-You can find the default implicit system package in the
-[chromiumos-overlay](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/virtual/implicit-system).
-It documents the various packages it pulls in and gives reasoning as to why each
-one exists. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/index.md b/chromium/docs/website/site/chromium-os/packages/index.md
deleted file mode 100644
index 4a64abaf1b1..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/index.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: packages
-title: packages
----
-
-We have many packages in the Chromium OS tree. While many come from upstream
-Gentoo (which can be browsed <http://packages.gentoo.org/>), there are a good
-number which are specific to our project. Here you can dive down into them.
-
-## Core system
-
-* chromeos: meta package to pull in all dependencies for a Chromium OS
- install
-* chromeos-base: Chromium OS specific config files (usually /etc) and
- user/group id management
-* [libchrome](/chromium-os/packages/libchrome): the base / utility
- library from the Chromium browser (used by many Chromium OS
- projects)
-* [libchromeos](/chromium-os/packages/libchromeos): custom Chromium OS
- utility library
-* metrics: simplify metrics gathering by other packages
-* chromeos-chrome: the Chromium browser
-
-## Debug/Development
-
-* [debugd](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/debugd/):
- daemon for debugging issues
-* chromeos-dev: set of packages used in developer images and available
- by running
- [dev_install](/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images)
- in release images
-* [crash-reporter](/chromium-os/packages/crash-reporting): crash
- processing program/uploader
-* [crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh/):
- interactive shell for running low level commands, running ssh,
- etc...
-* [dev_install](/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images):
- install dev packages into a base (release) image
-* [gmerge](/chromium-os/how-tos-and-troubleshooting/using-the-dev-server):
- installing packages live onto your device
-* [google-breakpad](http://code.google.com/p/google-breakpad): crash
- reporting and symbol/stack analysis library
-* ssh-known-hosts: known ssh keys of Chromium OS servers
-
-## Factory/Updates
-
-* chromeos-factoryinstall
-* memento_softwareupdate
-* update_engine
-
-## Firmware
-
-* chromeos-coreboot: 1st stage boot loader on x86 platforms
-* chromeos-ec: embedded controller firmware for many ChromeOS devices
-* chromeos-u-boot: 2nd stage boot loader
-* coreboot-utils: utilities for working with coreboot firmeware images
-* [dtc](http://www.t2-project.org/packages/dtc.html): device tree
- (text files which describe hardware layouts) compiler
-* [flashmap](http://flashmap.googlecode.com): utility for manipulating
- firmware images
-* [flashrom](/chromium-os/packages/cros-flashrom): utility for
- reading/writing flash chips on devices (which store firmware/etc...)
-* vboot_reference: tools for working with verified boot
-* vboot_reference-firmware: firmware for supporting verified boot
-
-## Graphics/Input
-
-* xf86-input-cmt: **C**hromium OS **m**ulti**t**ouch driver (similar
- to xf86-input-synaptics, but better!)
-
-## Misc
-
-* entd: enterprise daemon -- deprecated in favor of libpolicy (in
- libchromeos package)
-* [power_manager](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/README.md):
- userspace daemon for performing power-management-related tasks
-
-## Media (Audio/Video)
-
-* adhd: Chromium OS audio server
-
-## Networking
-
-* cashew: network statistics package -- integrated into shill now
-* cromo: modemmanager compatible dbus interface to support closed
- source modem drivers (which are discouraged)
-* flimflam: network manager -- deprecated in favor of shill
-* gobi3k-sdk: SDK for working with Qaulcomm's gobi3k devices
-* gobi-cromo-plugin: plugin for supporting gobi3k modems with cromo
- (to be replaced & merged with modemmanager)
-* minifakedns:
-* mobile-providers:
-* modem-diagnostics:
-* modem-utilities:
-* [modemmanager](http://cgit.freedesktop.org/ModemManager/ModemManager/):
- daemon and libraries for managing modem/mobile devices (such as 3G
- cellular)
-* shill: network manager (similar to the NetworkManager project, but
- better)
-* vpn-manager:
-* [wpa_supplicant](http://hostap.epitest.fi/wpa_supplicant/):
- utilities for managing WiFi 802.11 connections
-
-## Security (Crypto/etc...)
-
-* chaps:
-* chromeos-ca-certificates: certificates from [certificate
- authorities](http://en.wikipedia.org/wiki/Certificate_authority)
- that the browser in ChromeOS will trust (i.e. https://)
-* chromeos-cryptohome: manager for per-user encrypted home storage
-* chromeos-minijail:
-* libchrome_crypto: the crypto/ utility library from the Chromium
- browser (used by a few crypto-related Chromium OS projects)
-* root-certificates:
-* tpm:
-* trousers:
-* verity: full disk encryption and verification (see dm_verity kernel
- driver)
-* [biod](/chromium-os/packages/biod): biometrics daemon that is
- responsible for interfacing with kernel interfaces of biometric
- devices, securely storing biometric data, and
- capturing/authenticating biometric input.
-
-## Testing
-
-* autotest: Chromium OS tests \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/libchrome/index.md b/chromium/docs/website/site/chromium-os/packages/libchrome/index.md
deleted file mode 100644
index 6f2ea88baab..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/libchrome/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: libchrome
-title: libchrome
----
-
-#### Deprecation warning
-
-[This page has been
-migrated](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/packages/libchrome.md)!
-
-Please update bookmarks and referring links to point to the in-repo markdown.
diff --git a/chromium/docs/website/site/chromium-os/packages/libchromeos/index.md b/chromium/docs/website/site/chromium-os/packages/libchromeos/index.md
deleted file mode 100644
index e5df736e539..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/libchromeos/index.md
+++ /dev/null
@@ -1,185 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: libchromeos
-title: libchromeos
----
-
-## Background
-
-## libchromeos is the utility library used by most daemons in Chromium OS to share common functionality specific to Chromium OS. For more generic utility functions, see [libchrome](/chromium-os/packages/libchrome), utility library from the Chromium browser, also used by most daemons in Chromium OS.
-
-platform2 projects use C++11 and libchromeos uses some of the new features to
-simplify and optimize code. For this reason, some generic modules more suitable
-for libchrome are included in libcrhomeos due to the lack of C++11 support in
-the former.
-
-## Content overview
-
-The following is an overview of the current modules of libchromeos. Refer to the
-latest version of the header files for up to date documentation.
-
-**any.h**
-
-Implementation of chromeos::Any, a native C++ variant type. Any could contain
-any copy-constructible type.
-
-Example:
-
-chromeos::Any any1 = 5;
-
-chromeos::Any any2 = true;
-
-int v1 = any1.Get&lt;int&gt;();
-
-bool v2 = any2.Get&lt;bool&gt;();
-
-**bind_lambda.h**
-
-Bind adapter for C++ functor objects, including lambdas:
-
-base::Callback&lt;int(int, int)&gt; callback_add = base::Bind(\[\](int a, int b)
-{ return a + b;});
-
-LOG(INFO) &lt;&lt; "2+2=" &lt;&lt; callback_add.Run(2, 2);
-
-**data_encoding.h**
-
-Utility functions to encode/decode URLs and web-form-like parameters.
-
-std::string encoded = WebParamsEncode({{ '{{' }}"q", "test"}, {"path", "/usr/bin"},
-{"#", "%"{{ '}}' }});
-
-EXPECT_EQ("q=test&path=%2Fusr%2Fbin&%23=%25", encoded);
-
-**dbus/\***
-
-A whole lot of useful utility functions and classes to help build native D-Bus
-clients and servers. Helper functions to dispatch D-Bus method calls to remote
-object as if they were native C++ functions:
-
-auto response = chromeos::dbus_utils::CallMethodAndBlock(object_proxy,
-"org.chromium.MyService.MyInterface", "MyMethod", 2, 8.7);
-
-chromeos::ErrorPtr error;
-
-std::string return_value;
-
-if (ExtractMethodCallResults(response, &error, &return_value)) {
-
-// Use the |return_value|.
-
-} else {
-
-// An error occurred. Use |error| to get details.
-
-}
-
-**errors/error.h**
-
-Error class that provides rich error reporting facilities. Each error object
-contains an error domain, error code and error message. Errors can be nested to
-provide additional error context.
-
-void foo(ErrorPtr\* error) {
-
-Error::AddTo(error, "my_domain", "not_supported", "function not supported");
-
-}
-
-**flag_helper.h**
-
-Command line flag handling class that exposes an API similar to that of gflags,
-using base/command_line.h as the actual parser. Flags are defined from within
-main(..) using macros, then once initialized can be referenced by FLAGS_name
-variables. Unlike with gflags, however, these variables are scoped to within
-main(...). All the DEFINE_type macros take three arguments: the flag name, the
-default value, and the help text. The types of flags supported are: bool, int32,
-int64, uint64, double, and string. The FlagHelper class automatically handles
-generation of '--help' output, as well as exiting the program in the case of
-incorrect flag parsing, such as passing a string to an int flag.
-
-#include &lt;chromeos/flag_helper.h&gt;
-
-#include &lt;stdio.h&gt;
-
-int main(int argc, char\*\* argv) {
-
-DEFINE_int32(example, 0, "Example int flag");
-
-chromeos::FlagHelper::Init(argc, argv, "Test application.");
-
-printf("You passed in %d to --example command line flag\\n",
-
-FLAGS_example);
-
-return 0;
-
-}
-
-**http/http_utils.h** (and **http/\***)
-
-A bunch of functionality to make http requests (currently built on top of
-libcurl).
-
-chromeos::http::HeaderList headers = {{ '{{' }}"X-Chrome-UMA-Log-SHA1", hash{{ '}}' }};
-
-chromeos::ErrorPtr error;
-
-auto response = chromeos::http::PostText(
-
-"<http://server.com/url>",
-
-"text data to post",
-
-chromeos::mime::text::kPlain, headers,
-chromeos::http::Transport::CreateDefault(), &error);
-
-if (!response || response-&gt;GetDataAsString() != "OK") {
-
-LOG(ERROR) &lt;&lt; "Failed to send data: " &lt;&lt; error-&gt;GetMessage();
-
-}
-
-**map_utils.h**
-
-Template helper functions for std::map. You can get a list of keys or values out
-of a map:
-
-std::map&lt;string, string&gt; map = ....
-
-std::vector&lt;string&gt; keys = chromeos::GetMapKeys(map);
-
-std::vector&lt;string&gt; values = chromeos::GetMapValues(map);
-
-**mime_utils.h**
-
-Utility functions to compose, parse, and manipulate MIME strings. Also contains
-lots of predefined constants for common mime types. So you should never have to
-hardcode "text/html" in your code.
-
-EXPECT_EQ(mime::text::kPlain,
-mime::RemoveParameters("text/plain;charset=utf8"));
-
-**strings/string_utils.h**
-
-Helper string functions in addition to those provided by base/strings. Mostly
-for splitting/joining.
-
-std::string input = "abc;def;ghi";
-
-for (const std::string& token : chromeos::string_utils::Split(input, ';')) {
-
-// process each token
-
-}
-
-**url_utils.h**
-
-Functions to split, combine and manipulate URLs
-
-EXPECT_EQ("<http://sample.org/obj/part1/part2>",
-url::CombineMultiple("<http://sample.org>", {"obj", "part1", "part2"}));
diff --git a/chromium/docs/website/site/chromium-os/packages/portage/index.md b/chromium/docs/website/site/chromium-os/packages/portage/index.md
deleted file mode 100644
index 1e2e36a5d14..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/portage/index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: portage
-title: 'portage: the Gentoo package manager (aka emerge)'
----
-
-[TOC]
-
-## Introduction
-
-We use Gentoo's portage (aka emerge) as the package manager in Chromium OS. This
-page is more geared towards developers of the portage tool itself rather than
-developers just using it (i.e. for ebuilds, or configuration, etc...).
-
-You can find Chromium OS's mini-fork here:
-<https://chromium.googlesource.com/chromiumos/third_party/portage_tool>
-
-Changes constantly flow back into upstream Gentoo's tree, but we backport fixes
-sometimes.
-
-## Upstream Repo
-
-The upstream repo can be found here:
-<https://gitweb.gentoo.org/proj/portage.git>
-
-You can add it to your local tree:
-
-```none
-git remote add --tags upstream git://anongit.gentoo.org/proj/portage.git
-```
-
-Then you can view/cherry pick easily from there.
-
-## Hacking on Portage
-
-Portage is a standard cros-workon package. That means you can use the normal
-`cros_workon` tool to start hacking on portage, and using the source repo under
-`src/third_party/portage_tool/` as your base.
-
-Keep in mind that normally when you run `emerge` or `emerge-$BOARD` inside the
-sdk, you're running the host copy of portage. If you want to test changes there,
-you'll want to do:
-
-```none
-$ cros_workon --host start portage
-$ sudo emerge portage
-```
-
-Then run your tests on `emerge-$BOARD` or whatever.
-
-## Upgrading Chromium OS
-
-We create a `chromeos-<ver>` branch for each version of portage that we track.
-So in the case of our 2.2.12 version, we have a [chromeos-2.2.12
-branch](https://chromium.googlesource.com/chromiumos/third_party/portage_tool/+/chromeos-2.2.12).
-
-When doing an upgrade to a new version, you'll want to follow these steps:
-
-1. Create a new branch for the new version you want to upgrade to. If
- you want to upgrade to 2.3.4, then create a chromeos-2.3.4 branch.
- The initial branch point should match the respective portage tag.
- 1. You can do this via the [gerrit admin
- page](https://chromium-review.googlesource.com/admin/projects/chromiumos/third_party/portage_tool),
- 2. Or via git (if you have permission),
-
- ```none
- git push https://chromium.googlesource.com/chromiumos/third_party/portage_tool portage-2.3.34:refs/heads/chromeos-2.3.34
- ```
-
- 3. Or talk to a [build team
- member](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/contact.md#Public-discussion-groups)
- for help.
-2. Once that branch has been created, you should rebase any existing
- CrOS changes we have onto it. This means the normal review & merge
- process with gerrit.
- 1. Note: These changes won't be vetted by the CQ as the new version
- won't be used yet!
- 2. Now would be a good time to squash/update/discard any CLs that
- are no longer needed.
-3. You'll want to do validation work yourself locally.
- It's a cros-workon package now, so you can run:
-
- ```none
- $ cros_workon --host start portage
- ```
-
- Then make sure to start with a new chroot:
-
- ```none
- $ ./chromite/bin/cros_sdk -r
- ```
-
- Make sure `build_packages` can finish without using binary packages:
-
- ```none
- $ ~/trunk/src/scripts/build_packages --board=amd64-generic --nousepkg
- ```
-
- This implicitly tests `update_chroot` and `setup_board`. Also, it makes sure
- the common packages can be built by the new version of portage. Binary
- packages can hide incompatibilities that show up whenever the packages are
- rebuilt later. After that looks good test a representative set of boards
- covering the various hardware architectures and board types to catch
- incompatibilities in less common packages.
-4. Once all the changes have been merged into the new branch, we need
- to test in the CQ/trybots. Manifest changes are not well tested
- currently, but we can approximate this with a merge commit.
- 1. Manually merge the new branch into the new one.
-
- ```none
- # Assuming the current branch is the old one.
- $ git merge portage-2.3.34
- ```
-
- 2. Resolve any conflicts so it looks like the new chromeos-2.3.34
- branch.
- 3. Upload that merge commit to Gerrit.
- 4. Let it run through CQ dry-run to get initial coverage. You can
- also launch manual tryjobs with this CL.
- 5. Once you're confident it's working, abandon this merge commit.
-5. Finally, switch the manifest to point to the new branch. This should
- go through the CQ and should validate that the new version works.
-
- ```none
- <project path="src/third_party/portage_tool"
-          name="chromiumos/third_party/portage_tool"
-          revision="refs/heads/chromeos-2.3.4" />
- ```
-
-Note: In the past, we used the `master` & `next` branches to do development.
-Since we switched over to the cros-workon flow, those are no longer used. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/battery-notifications/index.md b/chromium/docs/website/site/chromium-os/packages/power_manager/battery-notifications/index.md
deleted file mode 100644
index 0c5d476e356..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/battery-notifications/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/power_manager
- - Power Manager
-page_name: battery-notifications
-title: Battery Notifications
----
-
-Moved
-[here](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/battery_notifications.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/inactivity-delays/index.md b/chromium/docs/website/site/chromium-os/packages/power_manager/inactivity-delays/index.md
deleted file mode 100644
index f0fc90b8d91..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/inactivity-delays/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/power_manager
- - Power Manager
-page_name: inactivity-delays
-title: Inactivity Delays
----
-
-Moved
-[here](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/inactivity_delays.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/index.md b/chromium/docs/website/site/chromium-os/packages/power_manager/index.md
deleted file mode 100644
index 7a6e4fcc574..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: power_manager
-title: Power Manager
----
-
-### This documentation has been moved to live alongside the [power management source code](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/README.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/input/index.md b/chromium/docs/website/site/chromium-os/packages/power_manager/input/index.md
deleted file mode 100644
index 81e4a41be89..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/input/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/power_manager
- - Power Manager
-page_name: input
-title: Input
----
-
-Moved
-[here](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/input.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/keyboard-backlight/index.md b/chromium/docs/website/site/chromium-os/packages/power_manager/keyboard-backlight/index.md
deleted file mode 100644
index 17ad6fa4ece..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/keyboard-backlight/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/power_manager
- - Power Manager
-page_name: keyboard-backlight
-title: Keyboard Backlight
----
-
-Moved
-[here](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/keyboard_backlight.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/screen-brightness/index.md b/chromium/docs/website/site/chromium-os/packages/power_manager/screen-brightness/index.md
deleted file mode 100644
index 8edc18b039e..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/screen-brightness/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/power_manager
- - Power Manager
-page_name: screen-brightness
-title: Screen Brightness
----
-
-Moved
-[here](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/screen_brightness.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/index.md b/chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/index.md
deleted file mode 100644
index 4781eb18cee..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-- - /chromium-os/packages/power_manager
- - Power Manager
-page_name: suspend-and-resume
-title: Suspend and Resume
----
-
-Moved
-[here](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/suspend_resume.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/suspend_flowchart.png.sha1 b/chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/suspend_flowchart.png.sha1
deleted file mode 100644
index 6dfd727b3a8..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/power_manager/suspend-and-resume/suspend_flowchart.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5c4b77386daf1824df8d59bd4883e619a99d4df4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/packages/pydevi2c/index.md b/chromium/docs/website/site/chromium-os/packages/pydevi2c/index.md
deleted file mode 100644
index c2c1fd8caee..00000000000
--- a/chromium/docs/website/site/chromium-os/packages/pydevi2c/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/packages
- - packages
-page_name: pydevi2c
-title: pydevi2c
----
-
-Placeholder page for pydevi2c (python bindings for talking to /dev/i2c devices).
-
-See: http://git.chromium.org/gitweb/?p=chromiumos/platform/pydevi2c.git \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/IMG_5169.jpg.sha1 b/chromium/docs/website/site/chromium-os/plankton/IMG_5169.jpg.sha1
deleted file mode 100644
index cc3353307bc..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/IMG_5169.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-79f8c9475a56e45318830d7028e6e24a36755f22 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/Plankton Raiden MCU command table.pdf.sha1 b/chromium/docs/website/site/chromium-os/plankton/Plankton Raiden MCU command table.pdf.sha1
deleted file mode 100644
index 1ac163f3318..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/Plankton Raiden MCU command table.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-94acb7e09f4937d75db8309c02768dc3238a7eef \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/Plankton Raiden Software Care & Feed.jpg.sha1 b/chromium/docs/website/site/chromium-os/plankton/Plankton Raiden Software Care & Feed.jpg.sha1
deleted file mode 100644
index 22d77f7125d..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/Plankton Raiden Software Care & Feed.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4cf66e0f0ef705537440dd2cfd1bb2b728e777c0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/Plankton_raiden block diagram.png.sha1 b/chromium/docs/website/site/chromium-os/plankton/Plankton_raiden block diagram.png.sha1
deleted file mode 100644
index 970fca73379..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/Plankton_raiden block diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6e9e6b676c0f75acf1e7cfa3817523ebe09010bc \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/buttons.jpeg.sha1 b/chromium/docs/website/site/chromium-os/plankton/buttons.jpeg.sha1
deleted file mode 100644
index 5ef0c49f98c..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/buttons.jpeg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a11e0998a3a1681493acb35d502fc41824e8ce23 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/index.md b/chromium/docs/website/site/chromium-os/plankton/index.md
deleted file mode 100644
index e81f5a2a498..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/index.md
+++ /dev/null
@@ -1,312 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: plankton
-title: USB Type-C functional testing board
----
-
-[TOC]
-
-## Overview
-
-The USB Type-C functional testing board, Plankton Raiden board, enables USB
-Type-C automated functional testing.
-
-Plankton Raiden board is a multi-layer designed testing board to switch out USB
-Type-C input data lane. There are several USB muxes and a DisplayPort (DP)
-re-driver with multiple IO ports so that we can switch USB Type-C functions with
-huge flexibility. On the board there is also an STM MCU chip for muxes and
-switches controller, and FTDI listener to get commands from the outside host.
-
-## Hardware Capabilities
-
-### <img alt="image" src="/chromium-os/plankton/IMG_5169.jpg" height=320 width=271>
-
-> ### Data
-
-> * DUT as host: USB 3.1 Gen 1
-> * DUT as device: USB 2.0
-
-> ### Video
-
-> * USB-C to DisplayPort converter
-> * Includes DP redriver to allow 4K @ 60Hz
-
-> ### Power
-
-> * Source 5V/12V/20V@3A for DUT as sink
-> * Monitor voltage/current on VBUS for DUT as source
-
-> ### CC monitoring
-
-> * Dual CC connection allows “flip connector” tests
-> * USB PD traffic monitor on both CC lines
-
-## Block diagram
-
-[<img alt="image"
-src="/chromium-os/plankton/Plankton_raiden%20block%20diagram.png">](/chromium-os/plankton/Plankton_raiden%20block%20diagram.png)
-
-For schematic and board files, please see the attached zip file at the bottom of
-this page.
-
-## Hardware Switches
-
-Set the switches to default setting before flashing EEPROM or firmware.
-
- SW9 - Enable Debug buttons (switch to DISABLE to enable function, there is a
- layout mistake)
-
- SW1 - Set Boot0 signal to low (No MCU_BOOT0)
-
- SW3 - Set to L:CN3 or CN5
-
- SW14 - Set to L: CN5 to HUB
-
-* SW17 (in the back) - Set 5V OVP for CN1
-
-In the following session, please power up the board and connect to the host
-through USB3.0 Micro B port (CN5).
-
-## EEPROM Programming
-
-For a brand-new board, please program its EEPROM first for setting serial number
-and product and vendor ID.
-
-Install ftx-prog, you can download the program from the Github
-[here](https://github.com/richardeoin/ftx-prog/archive/master.zip) and unzip to
-your home directory.
-
-```none
-sudo apt-get install build-essential gcc make libftdi-dev
-cd ~/ftx-prog-master
-make
-```
-
-and then use this command to flash EEPROM. The format of serial number is
-"901008-XXXXX", get the last 5 digits from the back of the Plankton Raiden
-board.
-
-[<img alt="image"
-src="/chromium-os/plankton/Plankton%20Raiden%20Software%20Care%20%26%20Feed.jpg"
-height=55
-width=400>](/chromium-os/plankton/Plankton%20Raiden%20Software%20Care%20%26%20Feed.jpg)
-
-```none
-sudo ftx_prog --old-vid 0x0403 --new-vid 0x18d1 --old-pid 0x6015 --new-pid 0x500c --new-serial-number <serial number> --cbus 0 GPIO --cbus 1 Tristate --cbus 2 GPIO --cbus 3 GPIO --manufacturer "Google Inc" --product "Plankton" --ftprog-strings
-```
-
-## Firmware Source Code
-
-The firmware is located In the Chromium Embedded Controller repository under
-*[board/plankton/](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/plankton/)*
-:
-
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/board/plankton/>
-
-### Building Firmware
-
-Within your Chromium OS chroot, the syntax is:
-
-```none
-cd ~/trunk/src/platform/ec
-make BOARD=plankton
-```
-
-### Firmware image will be located under build/plankton/ec.bin
-
-### If your chroot tree is newly-built, you may encounter an error while "make BOARD=plankton"
-### Try to type this command first:
-
-### ```none
-~/trunk/src/scripts/setup_board --board=peach_pit --nousepkg
-```
-
-### and then try "make BOARD=plankton" again.
-
-### Running Servod
-
-1. Build up local package of servod
-
-```none
-cd ~/trunk/src/third_party/hdctools
-cros_workon --host start dev-util/hdctools
-sudo emerge hdctools
-```
-
-2. Run servod for Plankton Raiden board
-
-```none
-sudo servod -p 0x500c
-```
-
-### Flashing Firmware
-
-1. Open another terminal (you need to leave servod on):
-Note: use "cros_sdk --no-ns-pid" to enter chroot, otherwise you will get error
-while flashing firmware.
-
-```none
-cd ~/trunk/src/platform/ec
-```
-
-2. Flash firmware which you built earlier into Plankton Raiden (get port number
-in servod message, 9999 in normal):
-
-```none
-./util/flash_ec --board=plankton --port=<port number>
-```
-
-You may also assign the image file to flash into Plankton Raiden by the --image
-argument:
-
-```none
-./util/flash_ec --board=plankton --port=<port number> --image=<your/image/file/path>
-```
-
-### Debug Buttons and LEDs
-
-If debug buttons are enabled (SW9), you can use buttons to switch board
-functions. LEDs are helpful for monitoring current state of Plankton Raiden.
-
-<img alt="image" src="/chromium-os/plankton/buttons.jpeg" height=138 width=400>
-
-<img alt="image" src="/chromium-os/plankton/leds.jpeg" height=217 width=400>
-
-<table>
-<tr>
-
-<td>SW6</td>
-
-<td>Source 20 V/3A to Type-C port (while DUT plugs on)</td>
-
-<td>DS8, DS4, and DS9 will be on</td>
-
-</tr>
-<tr>
-
-<td>SW12</td>
-
-<td>Source 12 V/3A to Type-C port (while DUT plugs on)</td>
-
-<td>DS8 and DS9 will be on </td>
-
-</tr>
-<tr>
-
-<td>SW11</td>
-
-<td>Source 5V/3A to Type-C port (while DUT plugs on)</td>
-
-<td>DS9 will be on </td>
-
-</tr>
-<tr>
-
-<td>SW8</td>
-
-<td>Provide power from VBUS to CN1</td>
-
-<td>DS5 will be on </td>
-
-</tr>
-<tr>
-
-<td>SW2</td>
-
-<td>Reset MCU</td>
-
-</tr>
-<tr>
-
-<td>SW5</td>
-
-<td>Toggle USB3.0 & DP for USB type C port</td>
-
-<td>DS1 is on </td>
-
-<td>- USB3.0</td>
-
-<td>- Debug USB from CN14 to DUT</td>
-
-<td>DS1 is off - DP</td>
-
-</tr>
-<tr>
-
-<td>SW7</td>
-
-<td>Enable case close debugging </td>
-
-</tr>
-<tr>
-
-<td>SW10</td>
-
-<td>Flip CC</td>
-
-<td>Connect DUT via CC1 -DS3 off</td>
-
-<td>Connect DUT via CC2 -DS3 on</td>
-
-</tr>
-<tr>
-
-<td>Plug in type C cable</td>
-
-<td>Communication on CC1</td>
-
-<td>DS2 will blink</td>
-
-</tr>
-<tr>
-
-<td>Plug in type C cable</td>
-
-<td>Communication on CC2</td>
-
-<td>DS6 will blink</td>
-
-</tr>
-</table>
-
-### Software Control
-
-**Using CLI**
-
-1. Use modprobe to load on ftdi_sio on your Unix host.
-
-```none
-sudo modprobe ftdi_sio
-echo 18d1 500c | sudo tee /sys/bus/usb-serial/drivers/ftdi_sio/new_id
-```
-
-2. Check whether TTY is established. An additional ttyUSBx will appear for
-ftdi_sio (if not, you may need to remove and attach PR board again).
-
-```none
-ls /dev/ttyUSB*
-```
-
-3. Open the command-line interface by Unix console tools (ex. socat, cu).
-
-```none
-cu -l /dev/ttyUSBx -s 115200
-```
-
-Please refer to the document "Plankton Raiden MCU command table" below for CLI.
-
-**Using dut-control**
-
-1. Inside chroot, open up servod with ftdi_sio on PR board.
-
-```none
-sudo servod -p 0x500c
-```
-
-2. Use “dut-control” to get all available components of PR board.
-
-```none
-dut-control
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/leds.jpeg.sha1 b/chromium/docs/website/site/chromium-os/plankton/leds.jpeg.sha1
deleted file mode 100644
index 938c7decd00..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/leds.jpeg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-72286e333c2511ff7a09b4fc3c27306c8936fa91 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/plankton/plankton-master.tar.gz.sha1 b/chromium/docs/website/site/chromium-os/plankton/plankton-master.tar.gz.sha1
deleted file mode 100644
index 4234086b34b..00000000000
--- a/chromium/docs/website/site/chromium-os/plankton/plankton-master.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ea25e6485ca2e34e45148c02296454fd5e894ca8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/platform/index.md b/chromium/docs/website/site/chromium-os/platform/index.md
deleted file mode 100644
index aedada1e55c..00000000000
--- a/chromium/docs/website/site/chromium-os/platform/index.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: platform
-title: The Chromium OS Platform
----
-
-[TOC]
-
-## Introduction
-
-Chromium OS has many userland programs and sub-projects that make up the
-"platform" of the system. You can find them listed (as well as more details on
-each one) in the main [Packages page](/chromium-os/packages). This guide is
-about the platform those projects build off. It is meant as the authoritative
-guide when writing a new project (or updating an existing one). You should not
-deviate from the choices outlined here without a very very good reason (and
-chances are that what you think is a very good reason is really not).
-
-## Goals
-
-Here are some explicit goals for the Chromium OS platform:
-
-* We should align & share code with Chromium whenever possible.
-* C++ is the language you should be using.
- * Only use C when C++ is not a viable option (e.g.
- kernel/bootloader/etc...).
- * Shell code is rarely acceptable beyond short snippets.
-* Each platform project should align & share code whenever possible.
- * Use the same build system.
- * Use the same set of utility libraries.
-
-## Decisions
-
-### Build System
-
-Rather than have every package implement its own build system (scons, cmake,
-autotools, hand written makefiles, common.mk, etc...), The One True Build System
-we use is [GYP](https://code.google.com/p/gyp/). More details on how it
-integrates can be found in the [Platform2
-page](/chromium-os/getting-started-with-platform2).
-
-### Style
-
-We follow the various Google style guides for Chromium OS projects. For third
-party projects, you should follow the style that project has decided on.
-
-* [C++](http://www.chromium.org/developers/coding-style) - Chromium
- C++ Style Guide
-* [Python](/chromium-os/python-style-guidelines) - Chromium OS Python
- Style Guide (a superset of the Google Python Style Guide)
-* [Shell](/chromium-os/shell-style-guidelines) - Chromium OS
- shell-script Style Guide
-
-### Inter-Process Communication (IPC)
-
-Most communication between processes is done via D-Bus. See the ["D-Bus best
-practices"
-doc](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/dbus_best_practices.md)
-for more information.
-
-#### Data Serialization
-
-If you need to serialize data, either for reading back later (from
-disk/cache/etc...) or for passing to another process (via ipc/network/etc...),
-then you should use:
-
-* IPC (local machine or network)
- * [dbus](http://dbus.freedesktop.org/) - for simple stuff, dbus
- itself includes marshaling of basic types
- * [protocol buffers](https://code.google.com/p/protobuf/)
- (protobufs) - for larger/binary content, or when communicating
- via the network
-* Reading/Writing to disk
- * base::JSON\* - for general saved runtime state and/or config
- files (reading & writing)
- * base::IniParser - for simple config files (read only); but json
- is still preferred
-
-### Utility Libraries
-
-First off, whenever you want to do some new that you suspect someone else has
-done already, you should look through Chromium's base library and Chromium OS
-library (libchromeos). We build & ship these in Chromium OS; see the [libchrome
-page](/chromium-os/packages/libchrome) and [libchromeos
-page](/chromium-os/packages/libchromeos) for building against them.
-
-Here is a common run down of functionality provided by libchrome that platform
-projects use:
-
-<table>
-<tr>
-<td> logging</td>
-<td> base/logging.h</td>
-</tr>
-<tr>
-<td> command line flags</td>
-<td> base/command_line.h</td>
-</tr>
-<tr>
-<td> string parsing</td>
-<td> base/strings/\*</td>
-</tr>
-<tr>
-<td> file path manipulation</td>
-<td> base/file_path.h</td>
-</tr>
-<tr>
-<td> file read/write utilities</td>
-<td> base/file_util.h</td>
-</tr>
-<tr>
-<td> JSON manipulation</td>
-<td> base/json/\*</td>
-</tr>
-<tr>
-<td> INI file reading</td>
-<td> base/ini_parser.h</td>
-</tr>
-<tr>
-<td> DBus bindings</td>
-<td> dbus/\*</td>
-</tr>
-<tr>
-<td> Message Loop</td>
-<td> base/message_loop.h</td>
-</tr>
-</table>
-
-For libchromeos, see the [libchromeos page](/chromium-os/packages/libchromeos)
-for and overview of the functionality implemented there.
-
-In particular, you should avoid using:
-
-* [gflags](https://code.google.com/p/gflags/) - command line parsing
-* [glog](https://code.google.com/p/google-glog/) - logging
-
-### Metrics
-
-If you want your program to gather & report statistics at runtime (like UMA
-stats), then you should use:
-
-* metrics - the Chromium OS metrics library
-
-### Sandboxing (User/Process/etc... Isolation)
-
-All daemons should always be run with as restricted permissions as possible.
-This often means using a dedicated UID/GID, chroots, and seccomp filters. This
-is all handled by:
-
-* [minijail](/chromium-os/developer-guide/chromium-os-sandboxing) -
- the Chromium OS jail manager
-
-### Install Locations
-
-<table>
-<tr>
-<td>Type</td>
-<td>Where</td>
-</tr>
-<tr>
-<td> public executables</td>
-<td> `/usr/bin/`</td>
-</tr>
-<tr>
-<td> public libraries</td>
-<td> `/usr/$(get_libdir)/`</td>
-</tr>
-<tr>
-<td> internal executables/libraries/plugins</td>
-<td> `/usr/$(get_libdir)/${PN}/`</td>
-</tr>
-<tr>
-<td> data files</td>
-<td>`/usr/share/${PN}/` </td>
-</tr>
-<tr>
-<td> include files</td>
-<td> `/usr/include/`</td>
-</tr>
-</table>
-
-You should avoid /sbin/ and /bin/ and /usr/sbin/ paths. They are unnecessary and
-you should just stick to /usr/bin/.
-
-Similarly, you should avoid /$(get_libdir)/ (e.g. /lib/).
-
-You should avoid /opt/. It is for exceptional cases only (mostly
-non-public/binary-only projects).
-
-### Crypto
-
-You should use [OpenSSL](http://www.openssl.org/) for crypto services. A few
-projects still use
-[NSS](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS), but the
-plan is to migrate away from that, so no new code should be using it.
-
-### Testing
-
-Since you will of course be writing unittests for all of your projects, you
-should use (which is to say unittests are a hard requirement):
-
-* [gtest](https://code.google.com/p/googletest/) - unittest framework
-* [gmock](https://code.google.com/p/googlemock/) - mocking framework \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/dev.bmp.sha1 b/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/dev.bmp.sha1
deleted file mode 100644
index 896373088db..00000000000
--- a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/dev.bmp.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9265aa2bb2f26eaf53d25832674443df9cd2a6a4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/index.md b/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/index.md
deleted file mode 100644
index a7b2134c185..00000000000
--- a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: poking-around-your-chrome-os-device
-title: Poking around your Chrome OS Device
----
-
-## This page has moved to <https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_mode.md>. Please update the link that brought you here. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/meh2.jpg.sha1 b/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/meh2.jpg.sha1
deleted file mode 100644
index 9db0fcf80b9..00000000000
--- a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/meh2.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5efb0b05bc8295697343cf35594ed570ce0f5fe8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/tdev.bmp.sha1 b/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/tdev.bmp.sha1
deleted file mode 100644
index b15f7437a19..00000000000
--- a/chromium/docs/website/site/chromium-os/poking-around-your-chrome-os-device/tdev.bmp.sha1
+++ /dev/null
@@ -1 +0,0 @@
-aee6ecf1bafb8bc93fdb35be960dd027273eaf58 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/profiling-in-chromeos/index.md b/chromium/docs/website/site/chromium-os/profiling-in-chromeos/index.md
deleted file mode 100644
index 49bbf895763..00000000000
--- a/chromium/docs/website/site/chromium-os/profiling-in-chromeos/index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: profiling-in-chromeos
-title: Profiling in Chromium OS
----
-
-[TOC]
-
-**Warning: The profiling infrastructure in Chromium OS is new and experimental. You may hit bugs.**
-
-The [perf_events](https://perf.wiki.kernel.org/index.php/Main_Page) (aka perf)
-profiling tools can be used to collect profiles in Chromium OS. This page
-describes how to run perf on standalone programs, or on autotests.
-
-## Setup
-
-`dev-utils/perf` should be installed by default in the chroot host (NOTE: it may
-be in /usr/local/sbin instead of /usr/sbin):
-
-```none
-$ /usr/sbin/perf --version
-perf version 2.6.38.1720.g564bb7e
-```
-
-It should also be installed by default on the target board when building a
-developer image for Chromium OS. If it isn't, you can emerge it manually:
-
-```none
-$ sudo emerge-${BOARD} perf
-```
-
-Some things to note:
-
-1. You should also make sure you have debug symbols in the chroot,
- ideally for all packages. Otherwise perf report will not show
- function names. Debug symbols are installed by default when you
- emerge a package. Look in `/build/${BOARD}/usr/lib/debug`.
-2. The build-id of the debug symbols must match the binaries installed
- on the Chromium OS device, otherwise the reports will be inaccurate.
- This could happen if you re-emerge a package without copying it onto
- the device which you are profiling on.
-3. The version of perf you are using is tied to the kernel version. If
- you use kernel-9999, use perf-9999. If you use kernel-next, use
- perf-next. Otherwise your results wont be reliable.
-
-## Profiling Autotests
-
-Profiling autotests can be done using run_remote_tests.sh. There are two options
-you should be interested in:
-
-```none
-  --profiler: What profiler to use? Example: cros_perf.
-  --profiler_args: Arguments to pass to the profiler. Example: options=\"-e instructions -g\"
-```
-
-For example, to get a profile of AesThroughput using the default perf options,
-simply do:
-
-```none
-$ ./run_remote_tests.sh --remote=172.18.221.163 AesThroughput --profiler=cros_perf
-```
-
-The perf data file will be placed in the autotest results directory when the
-test completes:
-
-```none
->>> Details stored under /tmp/run_remote_tests.WBFE
-$ ls /tmp/run_remote_tests.WBFE/platform_AesThroughput/platform_AesThroughput/profiling/iteration.1/    
-perf.data
-```
-
-You can also pass custom arguments to perf. E.g. to collect instruction events
-and call graph information:
-
-```none
-$ ./run_remote_tests.sh --remote=172.18.221.163 AesThroughput --profile --profiler_args="options=\"-e instructions -g\""
-```
-
-Some things to note:
-
-1. By default this collects system-wide profiles, which is usually what
- you want. You can filter by thread id or binary when you produce the
- report.
-2. perf is invoked immediately prior to the autotest run_once() method
- and is killed immediately after the method completes. Everything
- executed in this method will be included in the profile.
-
-## Profiling Standalone Binaries
-
-SSH to your Chromium OS device and run` perf record`:
-
-```none
-$ sudo perf record -g -a -e cycles -- sleep 5
-[ perf record: Woken up 1 times to write data ]
-[ perf record: Captured and wrote 0.186 MB perf.data (~8115 samples) ]
-```
-
-You can replace sleep with any binary you want to profile. Use` perf help
-record` to see the various options for recording data.
-
-Now copy the data file back to your chroot:
-
-```none
-$ scp chronos@chromeos-box:/tmp/perf.data .
-```
-
-## Generating Profile Reports
-
-Use `perf report` to display the profile:
-
-```none
-$ /usr/sbin/perf report -i perf.data --symfs /build/${BOARD}/ --kallsyms /build/${BOARD}/boot/System.map-3.3.0
-```
-
-You can pass --tui for a more interactive interface (buggy), or --stdio for text
-output. Use `perf help report` to see the various options for reporting data.
-
-## Bugs?
-
-File it: <http://crbug.com/new>, cc: sonnyrao. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/python-mock/index.md b/chromium/docs/website/site/chromium-os/python-mock/index.md
deleted file mode 100644
index 371cbe53eb9..00000000000
--- a/chromium/docs/website/site/chromium-os/python-mock/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: python-mock
-title: python-mock
----
-
-The python "mock" library is the preferred mocking library for python unittests
-in the Chromium OS source. There still exist many tests that use "mox", but
-"mock" is preferred for all new tests. python-mock is the standard mocking
-framework starting in Python 3.3 (imported as unittest.mock).
-
-### Setup
-
-python-mock is already added to the chroot, but people who run unit tests
-outside the chroot need to manually install it. Here are the commands to run:
-
-```none
-sudo apt-get purge python-mock
-sudo apt-get install python-pip
-sudo pip install mock
-```
-
-### Summary
-
-Unlike pymox, python-mock is really easy to extend - no messing with
-ReplyAll()'s, VerifyAlls(), etc. It's also more pythonic. Here's a quick snippet
-of running a test with somemodule.func() mocked out:
-
-```none
-import somemodule
-with patch.object(somemodule, 'func') as mocked_f:
-  mocked_f.returnvalue = 5
-  ret = somemodule.func('arg1', 'arg2')
-  assertEquals(ret, 5)
-  mocked_f.assert_called_once_with('arg1', 'arg2')
-```
-
-### Documentation
-
-* Take a look at python-mock
- [docs](http://www.voidspace.org.uk/python/mock/).
-* There's also a
- [talk](http://pyvideo.org/video/392/pycon-2011--testing-with-mock)
- given by the author on how to test with python-mock.
-
-### partial_mock.py
-
-In the chromite source there is a partial mocking library, located at
-lib/partial_mock.py. This extends python-mock to allow for writing re-usable
-mocks. An example is the cros_build_lib_unittest.RunCommandMock class, which can
-be used to easily simulate command line behavior. Here's a code snippet of a
-function we want to test:
-
-```none
-def func():
-  try:
-    result = cros_build_lib.RunCommand(
-        ['./some_command'], redirect_stdout=True, redirect_stderr=True)
-    return 'passcode' in result.output
-  except RunCommandError as e:
-    if (e.result.returncode == 2 and 
-        'monkey' in e.result.error):
-      return False
-    raise
-```
-
-Here's how we'd test it with the RunCommandMock partial mock:
-
-```none
-from cros_build_lib_unittest import RunCommandMock, RunCommandError
-with RunCommandMock() as pmock:
-  pmock.AddCmdResult(['./some_command'], returncode=2, error='12 monkeys')
-  assertEquals(func(), False)
-  pmock.AddCmdResult(['./some_command'], returncode=1)
-  assertRaises(RunCommandError, func)
-  pmock.AddCmdResult(['./some_command'], output='passcode')
-  assertEquals(func(), True)
-```
-
-No mucking with setting up mock CommandResults, or mock RunCommandErrors, or
-testing for the right redirect_\* or error_code_ok=True arguments. The partial
-mock handles all of that for you by using RunCommand logic directly.
-
-It's also easy to write your own partial mocks that can then be used by other
-unit tests. Having a corpus of re-usable mocks will make the barrier to testing
-lower, and will help us get into a more test-driven development workflow.
-
-Thanks for reading, and happy mocking! :) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/python-style-guidelines/index.md b/chromium/docs/website/site/chromium-os/python-style-guidelines/index.md
deleted file mode 100644
index 28fa0257e8f..00000000000
--- a/chromium/docs/website/site/chromium-os/python-style-guidelines/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: python-style-guidelines
-title: Python Style Guidelines
----
-
-## Moved to <https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/python.md>. Please update the link that brought you here with the new location. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/quick-start-guide/index.md b/chromium/docs/website/site/chromium-os/quick-start-guide/index.md
deleted file mode 100644
index efc15d6cae5..00000000000
--- a/chromium/docs/website/site/chromium-os/quick-start-guide/index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: quick-start-guide
-title: Quick Start Guide
----
-
-## Introduction
-
-Welcome to Chromium OS. This document serves as a quick start guide to
-installing your own Chromium OS image on a device. For more detailed
-information, or if steps in this quick start guide don't work for you, please
-refer to the [Chromium OS Developer's
-Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md).
-
-### Prerequisites
-
-You should have
-
-* [Ubuntu](http://www.ubuntu.com/) Linux (version == 16.04 - Xenial)
- * This is the only officially support distro, but building
- Chromium OS should work fine on any x86_64 Linux distro running
- a 2.6.16+ kernel
-
-* a 64-bit system for performing the build
-
-* an account with sudo access
-
-1. Install the git and subversion revision control systems, the curl
- download helper, and lvm tools. On Ubuntu, the magic incantation to
- do this is:
-
- ```none
- sudo apt-get install git-core gitk git-gui subversion curl lvm2 thin-provisioning-tools python-pkg-resources python-virtualenv python-oauth2client
- ```
-
-2. You must also [install
- depot_tools](/developers/how-tos/install-depot-tools). This step is
- required so that you can use the repo command to get/sync the source
- code.
-3. You must also [tweak your sudoers configuration](http://www.chromium.org/chromium-os/tips-and-tricks-for-chromium-os-developers#TOC-Making-sudo-a-little-more-permissive). This is required for using cros_sdk.
-4. **NOTE**: Do not run any of the commands listed in this document as
- root – the commands themselves will run sudo to get root access when
- needed.
-
-Get the Source ([full version](/chromium-os/developer-guide#TOC-Get-the-Source))
-
-Create a directory to hold the source, "`${SOURCE_REPO}`". This **should not**
-be installed on a remote NFS directory.
-
-```none
-cd ${SOURCE_REPO}
-repo init -u https://chromium.googlesource.com/chromiumos/manifest.git
-# Optional: Make any changes to .repo/local_manifests/local_manifest.xml before syncing
-repo sync
-```
-
-Build Chromium OS ([full
-version](http://www.chromium.org/chromium-os/developer-guide#TOC-Building-Chromium-OS))
-
-At this point, you’ll have to know the `${BOARD}` you would like to build on. If
-you don't have a specific target in mind, amd64-generic is a good starter board
-as it’s compatible with most 64-bit x86_64 systems. cros_sdk works from any path
-with `${SOURCE_REPO}` so make sure you are within the source tree before running
-these commands.
-
-```none
-export BOARD=amd64-generic
-cros_sdk -- ./build_packages --board=${BOARD}
-```
-
-This will take a long time the first time as it sets up your build environment.
-Subsequent invocations will take much less time.
-
-Finally, with all the packages built, we are ready to build an image that can be
-installed on your device. To do so run:
-
-```none
-cros_sdk -- ./build_image --board=${BOARD}
-```
-
-Now copy this image onto a usb drive. Insert the usb stick you’d like to use and
-run:
-
-```none
-cros flash --board=${BOARD} usb://
-```
-
-This will prompt you for which usb device you’d like to use. (Note that
-auto-mounting of USB devices should be turned off as it may corrupt the disk
-image while it's being written.)
-
-## Install Chromium OS on your Device ([full version](http://www.chromium.org/chromium-os/developer-guide#TOC-Installing-Chromium-OS-on-your-Device))
-
-Now you’re ready to install this image on your device. You’ll need to setup your
-device to boot from USB.
-
-* On a non-chromebook, set your system to boot from a usb drive using
- instructions specific to your device.
-* On a chromebook, [enter developer-mode for your specific type of
- hardware](/chromium-os/developer-information-for-chrome-os-devices).
- For Samsung / Acer devices, you can now boot from your usb image
- using Ctrl+U on the developer mode screen. For the CR-48, you’ll
- have to follow the instructions to [build a recovery
- image](/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information)
- and install from it using those same instructions.
-
-With that done, hit Ctrl+Alt+Back (F2). At the prompt type chronos and install
-using the following command:
-
-```none
-/usr/sbin/chromeos-install
-```
-
-#### Next steps
-
-* Read the full [Chromium OS Developer's
- Guide](/chromium-os/developer-guide).
-* Errors during quick start? Send an email to
- [chromium-os-dev@chromium.org](mailto:chromium-os-dev@chromium.org)
- or start a dialogue on our IRC channel
- [irc.freenode.net/#chromium-os-users](http://irc.freenode.net/#chromium-os-users) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/security-advisories/index.md b/chromium/docs/website/site/chromium-os/security-advisories/index.md
deleted file mode 100644
index e69d1fcd524..00000000000
--- a/chromium/docs/website/site/chromium-os/security-advisories/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: security-advisories
-title: Chrome OS Security Advisories
----
-
-The following is a list of security advisory pages published on
-<https://www.chromium.org>.
-
-Note that we do not routinely publish information for all fixed vulnerabilities
-on a dedicated page, just for vulnerabilities where users/customers will benefit
-from a more in-depth description of the issue and/or where mitigative action by
-the user is necessary. Thus, the majority of security bug fixes will not be
-listed here but handled as [security bugs in the bugs.chromium.org
-tracker](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=Type%3DBug-Security+OS%3DChrome)
-and the fixes will be rolled out transparently to devices with the Chrome OS
-auto-update mechanism.
-
-List of advisories in reverse chronological order:
-
- [U2F ECDSA vulnerability](/chromium-os/u2f-ecdsa-vulnerability)
-
- [Microarchitectural Data Sampling on Chrome
- OS](/chromium-os/mds-on-chromeos)
-
- [Privilege escalation via unchecked TPM
- reset](/chromium-os/unchecked_tpm_reset)
-
- [Lazy FP Restore Vulnerability Status for Chrome
- OS](/chromium-os/lazy-fp-restore-vulnerability-status)
-
- [Meltdown/Spectre vulnerability status for Chrome OS
- devices](/chromium-os/meltdown-spectre-vulnerability-status)
-
- [Trusted Platform Module firmware
- vulnerability](/chromium-os/meltdown-spectre-vulnerability-status) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/810-10010-03_20120227_servo_SCH_0.pdf.sha1 b/chromium/docs/website/site/chromium-os/servo/810-10010-03_20120227_servo_SCH_0.pdf.sha1
deleted file mode 100644
index a5e722aceb2..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/810-10010-03_20120227_servo_SCH_0.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-86fb9b93ca9ea5de756c0c7f29b64a237d974769 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/IMG_20151019_085815 (1) (1).jpg.sha1 b/chromium/docs/website/site/chromium-os/servo/IMG_20151019_085815 (1) (1).jpg.sha1
deleted file mode 100644
index 9767937ec30..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/IMG_20151019_085815 (1) (1).jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8052178a68f24b874d5e2534027d1c0d34786718 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/LICENSE b/chromium/docs/website/site/chromium-os/servo/LICENSE
deleted file mode 100644
index e26e4c3b236..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/LICENSE
+++ /dev/null
@@ -1,69 +0,0 @@
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
-
-1. Definitions
-
-a. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.
-
-b. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License.
-
-c. "Licensor" means the individual or entity that offers the Work under the terms of this License.
-
-d. "Original Author" means the individual or entity who created the Work.
-
-e. "Work" means the copyrightable work of authorship offered under the terms of this License.
-
-f. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
-
-2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
-
-3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
-
-a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works;
-
-b. to create and reproduce Derivative Works;
-
-c. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works;
-
-d. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works.
-
-e. For the avoidance of doubt, where the work is a musical composition:
-
-i. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work.
-
-ii. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions).
-
-f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions).
-
-The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.
-
-4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
-
-a. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(b), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(b), as requested.
-
-b. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.
-
-5. Representations, Warranties and Disclaimer
-
-UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
-
-6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. Termination
-
-a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
-
-b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
-
-8. Miscellaneous
-
-a. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
-
-b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
-
-c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-
-d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
-
-e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
diff --git a/chromium/docs/website/site/chromium-os/servo/chromium_os_servo_v2.tar.gz.sha1 b/chromium/docs/website/site/chromium-os/servo/chromium_os_servo_v2.tar.gz.sha1
deleted file mode 100644
index 85a95b64b53..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/chromium_os_servo_v2.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3fd9976d03578f8cfe8c1e652c60e5f4c337fe60 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/chromium_os_yoshi_flex.tar.gz.sha1 b/chromium/docs/website/site/chromium-os/servo/chromium_os_yoshi_flex.tar.gz.sha1
deleted file mode 100644
index f806a3386b3..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/chromium_os_yoshi_flex.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f6526b6c39742f28dd62e8212498143eea988709 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/image00.jpg.sha1 b/chromium/docs/website/site/chromium-os/servo/image00.jpg.sha1
deleted file mode 100644
index e3633e4a105..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/image00.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7d247a8294bc5e33358442e5d6f63343e1fb34e7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/index.md b/chromium/docs/website/site/chromium-os/servo/index.md
deleted file mode 100644
index a0e4d980d06..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: servo
-title: Servo
----
-
-This page has moved to
-<https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/README.md>.
-Please update the link that brought you here. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servo-v2/index.md b/chromium/docs/website/site/chromium-os/servo/servo-v2/index.md
deleted file mode 100644
index bae76df72dd..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servo-v2/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/servo
- - Servo
-page_name: servo-v2
-title: Servo V2
----
-
-<table>
-<tr>
-
-<td>This page has moved to <a
-href="https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/README.md">https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/README.md</a>.
-Please update the link that brought you here.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servo_v2_bot.jpg.sha1 b/chromium/docs/website/site/chromium-os/servo/servo_v2_bot.jpg.sha1
deleted file mode 100644
index 7545654196a..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servo_v2_bot.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-82955b74b8f835c22dc724115628e8e1662df1e8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servo_v2_top.jpg.sha1 b/chromium/docs/website/site/chromium-os/servo/servo_v2_top.jpg.sha1
deleted file mode 100644
index 3bbc29b74c5..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servo_v2_top.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1673ebfe56ba26addfa3936d32b005e32d3c0e01 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servomicro/652-00166-05_20190308_servo_micro_SCH_0.pdf.sha1 b/chromium/docs/website/site/chromium-os/servo/servomicro/652-00166-05_20190308_servo_micro_SCH_0.pdf.sha1
deleted file mode 100644
index 28908ca2413..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servomicro/652-00166-05_20190308_servo_micro_SCH_0.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9fe106fda6ff8424390ae3f23f9cea61e66dc15b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servomicro/Case-Closed Debug in Chromebooks and Servo Micro.pdf.sha1 b/chromium/docs/website/site/chromium-os/servo/servomicro/Case-Closed Debug in Chromebooks and Servo Micro.pdf.sha1
deleted file mode 100644
index 1d3532ec8c1..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servomicro/Case-Closed Debug in Chromebooks and Servo Micro.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2cd9f54f7216ea4e061763c7fb0f8d6e59557f67 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servomicro/index.md b/chromium/docs/website/site/chromium-os/servo/servomicro/index.md
deleted file mode 100644
index 2dcca5e32f1..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servomicro/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/servo
- - Servo
-page_name: servomicro
-title: Servo Micro
----
-
-<table>
-<tr>
-
-<td>This page has moved to <a
-href="https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/README.md">https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/README.md</a>.
-Please update the link that brought you here.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servov4/650-00588-01_20170601_servo_v4_pvt1_SCH_0.pdf.sha1 b/chromium/docs/website/site/chromium-os/servo/servov4/650-00588-01_20170601_servo_v4_pvt1_SCH_0.pdf.sha1
deleted file mode 100644
index d26d9906e31..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servov4/650-00588-01_20170601_servo_v4_pvt1_SCH_0.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b8b0f12ef4536aa8fa02332593ac409d6ff7a427 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/servo/servov4/index.md b/chromium/docs/website/site/chromium-os/servo/servov4/index.md
deleted file mode 100644
index 6c7a979dd17..00000000000
--- a/chromium/docs/website/site/chromium-os/servo/servov4/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/servo
- - Servo
-page_name: servov4
-title: Servo V4
----
-
-<table>
-<tr>
-
-<td>TThis page has moved to <a
-href="https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/README.md">https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/README.md</a>.
-Please update the link that brought you here.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/shell-style-guidelines/index.md b/chromium/docs/website/site/chromium-os/shell-style-guidelines/index.md
deleted file mode 100644
index 5ad5d409310..00000000000
--- a/chromium/docs/website/site/chromium-os/shell-style-guidelines/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: shell-style-guidelines
-title: Shell Style Guidelines
----
-
-<table>
-<tr>
-
-<td>## Moved to <a href="https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/shell.md">https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/shell.md</a>. Please update the link that brought you here with the new location.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/sideload-android-apps-on-chromebook/index.md b/chromium/docs/website/site/chromium-os/sideload-android-apps-on-chromebook/index.md
deleted file mode 100644
index 43cdddeb035..00000000000
--- a/chromium/docs/website/site/chromium-os/sideload-android-apps-on-chromebook/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: sideload-android-apps-on-chromebook
-title: Sideload Android apps on your Chromebook
----
-
-This article has been relocated to
-<https://developer.android.com/topic/arc/sideload.html> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/stadia-on-chromebooks/index.md b/chromium/docs/website/site/chromium-os/stadia-on-chromebooks/index.md
deleted file mode 100644
index 992b3045cee..00000000000
--- a/chromium/docs/website/site/chromium-os/stadia-on-chromebooks/index.md
+++ /dev/null
@@ -1,300 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: stadia-on-chromebooks
-title: Stadia on Chromebooks
----
-
-Stadia enables users to instantly play their favorite high quality video games
-by streaming through the Chrome browser. While Stadia should work on any
-Chromebook, gameplay may not be optimal on Chromebooks launched before June
-2017.
-
-<table>
-<tr>
-
-<td>Devices released before June 2017</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB3-531)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB3-532)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 13 (CB5-311, C810)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook R11 (CB5-132T, C738T)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 14 (CB3-431)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C730E)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 14 for Work (CP5-471)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C740)</td>
-
-</tr>
-<tr>
-
-<td>Acer C7 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C720, C720P)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB5-571, C910)</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip C302</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C300</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C200</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C202SA</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 13 (3380)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11 (3120)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11 (3180)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 13 (7310)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11</td>
-
-</tr>
-<tr>
-
-<td>Google Chromebook Pixel</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 14 G3</td>
-
-</tr>
-<tr>
-
-<td>HP Pavilion Chromebook 14</td>
-
-</tr>
-<tr>
-
-<td>Google Chromebook Pixel (2015)</td>
-
-</tr>
-<tr>
-
-<td>Haier Chromebook 11 G2</td>
-
-</tr>
-<tr>
-
-<td>CTL J5 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 14</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 2100-2199 / HP Chromebook 11 G3</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 13 G1</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G2</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G1</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G5</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x360 11 G1 EE</td>
-
-</tr>
-<tr>
-
-<td>ASI Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Bobicus Chromebook 11</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Chromebook N23 Yoga</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 11e 4th Gen Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N20 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 11e Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo 100S Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Chromebook N23</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 13 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Thinkpad X131e Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Plus</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 11e 3rd Gen Chromebook</td>
-
-</tr>
-<tr>
-
-<td>CTL NL61 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Pro</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 3</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Series 5 550</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 13"</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 11"</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook - XE303</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 11" - XE500C12</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook 2 (2015 Edition)</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook 2</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/steam-on-chromeos/index.md b/chromium/docs/website/site/chromium-os/steam-on-chromeos/index.md
deleted file mode 100644
index 540138948ff..00000000000
--- a/chromium/docs/website/site/chromium-os/steam-on-chromeos/index.md
+++ /dev/null
@@ -1,280 +0,0 @@
-# Steam on Chrome OS Alpha
-
-Beginning with **Chrome OS 14583.0.0**, the Dev channel will include an early,
-alpha-quality version of Steam on Chrome OS for a small set of recent
-Chromebooks. If you have one of these Chromebooks (listed below) and decide to
-give it a try, please send your feedback - we are in active development and want
-to incorporate as much user input as possible.
-
-## What do we mean by alpha?
-
-Alpha means **anything can break**. Due to the inherent instability of the Dev
-channel and the in-progress nature of this feature, we don’t recommend trying
-this on a Chromebook that you rely on for work, school, or other daily
-activities. You will encounter crashes, performance regressions, and
-never-before-seen bugs - that’s part of the fun!
-
-## Supported Devices
-
-Because many games have high performance demands, we’ve focused our efforts thus
-far on a set of devices where more games can run well. Currently, Steam can be
-enabled in the Dev channel on configurations of these Chromebooks with Intel
-Iris Xe Graphics, 11th Gen Core i5 or i7 processors, and at least 8GB of RAM:
-
-* [Acer Chromebook 514 (CB514-1W)](https://www.acer.com/ac/en/US/content/series/acerchromebook514cb5141w)
-* [Acer Chromebook 515 (CB515-1W)](https://www.acer.com/ac/en/US/content/series/acerchromebook515cb5151w)
-* [Acer Chromebook Spin 713 (CP713-3W)](https://www.acer.com/ac/en/US/content/series/acerchromebookspin713cp7133w)
-* [ASUS Chromebook Flip CX5 (CX5500)](https://www.asus.com/us/Laptops/For-Home/Chromebook/ASUS-Chromebook-Flip-CX5-CX5500/)
-* [ASUS Chromebook CX9 (CX9400)](https://www.asus.com/us/Laptops/For-Work/Chromebook/ASUS-Chromebook-CX9-CX9400-11th-Gen-Intel/)
-* [HP Pro c640 G2 Chromebook](https://www.hp.com/us-en/cloud-computing/chrome-enterprise/hp-pro-c640-chromebook.html)
-* [Lenovo 5i-14 Chromebook](https://www.lenovo.com/us/en/p/laptops/lenovo/lenovo-edu-chromebooks/5i-chromebook-gen-6-\(14-intel\)/wmd00000481)
-
-Note: Configurations of these devices with an i3 CPU or 4GB of RAM are **not**
-supported.
-
-Additionally, there are two known issues that affect particular device
-configurations:
-* Devices with 8GB of RAM may encounter issues in games that require 6GB of
-RAM or more.
-* Devices with display resolutions greater than 1080p may encounter
-performance and scaling issues.
-
-We are actively investigating ways to improve these issues.
-
-This list will be updated as new models and configurations are enabled.
-
-## Instructions
-
-Note: Dev channel is inherently less stable. We don’t recommend trying this on a
-Chromebook that you rely on for work, school, or other daily activities. Before
-you switch channels, backup your data.
-
-1. On your supported Chromebook,
- [switch to Dev channel.](https://www.google.com/support/chromeos/bin/answer.py?answer=1086915)
-2. After updating, navigate to chrome://flags. Set both #borealis-enabled and
- #exo-pointer-lock to Enabled.
-3. After restarting, open a crosh terminal with ctrl+alt+t.
-4. Type “insert_coin volteer-JOlkth573FBLGa” and hit enter.
-5. Follow the setup flow to install Steam.
-6. Log in with your Steam account and start playing!
-
-We recommend trying games from the list below, as not all games currently work
-well. Rest assured we are actively working to support as many titles as
-possible.
-
-If you encounter issues, first check the known issues list below, then
-[file feedback](https://support.google.com/chromebook/answer/2982029) with a
-description of your issue and “#steam” so we can triage it quickly.
-
-## Known Issues
-
-These are some issues you may encounter when using Steam on Chrome OS:
-
-|Category | Known Issue|
-|------------- | -----------|
-|Compatibility | |
-| | [Easy Anti-Cheat and BattlEye do not yet work with Proton on Chrome OS](https://issuetracker.google.com/issues/225082536)|
-| | [Proton titles using DX12 fail to start](https://issuetracker.google.com/issues/224849878)|
-| | [Some Proton games have incorrect window placement, including offscreen](https://issuetracker.google.com/issues/224834525)|
-| | [Some titles have occasional rendering artifacts and glitches](https://issuetracker.google.com/issues/224850235)|
-|Performance | |
-| | [First few minutes of gameplay have poor performance for some titles](https://issuetracker.google.com/issues/224858407)|
-| | ["Processing Vulkan shaders" occurs frequently and can take a long time](https://issuetracker.google.com/issues/224848059)|
-| | [Some games work with 16GB RAM but not 8GB RAM](https://issuetracker.google.com/issues/225082848)|
-| Display | |
-| | [External monitors are not supported and have unexpected behavior](https://issuetracker.google.com/issues/224859456)|
-| | [4K and 2K displays have issues with performance and scaling](https://issuetracker.google.com/issues/224848902)|
-| UI | |
-| | [Some languages (Chinese, Japanese, Korean, and Thai) are missing fonts](https://issuetracker.google.com/issues/224859554)|
-| | [Timezone for Steam and games is different from device](https://issuetracker.google.com/issues/224859460)|
-| Input | |
-| | [Launcher key & keyboard shortcuts don't work when Steam/a game is focused](https://issuetracker.google.com/issues/224859546)|
-| | [Plugging in a controller during gameplay may not be recognized](https://issuetracker.google.com/issues/224851350)|
-| | [Gamepads that are not designated WWCB may not work correctly](https://issuetracker.google.com/issues/225083178)|
-| Audio | |
-| | [Audio quality in Steam voice chat is poor](https://issuetracker.google.com/issues/224851318)|
-| Storage | |
-| | [Games may fail to install citing a disk error](https://issuetracker.google.com/issues/225083197)|
-| | [External storage is not yet supported](https://issuetracker.google.com/issues/225083207)|
-| Power | |
-| | [Device will not sleep when Steam or a game is focused](https://issuetracker.google.com/issues/225083268)|
-| | [Steam and games sometimes freeze when device is asleep](https://issuetracker.google.com/issues/224848735)|
-
-Please report any other issues you see via the Send Feedback dialog with tag
-**“#steam”**.
-
-## Game List
-
-These are some games that we’ve tried ourselves and think you might enjoy. Some
-will require enabling Steam Play in order to install (see below), others may
-work better on models with higher specs (like 16GB RAM).
-
-| Game | Tips and Known Issues |
-| ------------------------------ | ------------------------------------------- |
-| [Portal 2] | |
-| [Hades] | Select Vulkan version at launch |
-| [Age of Empires II: Definitive Edition]| |
-| [World of Tanks Blitz] | |
-| [The Elder Scrolls V: SSE] | Set quality to medium or low. i7 recommended|
-| [Vampire Survivors] | |
-| [Team Fortress 2] | Disable multicore rendering (Options>Graphics>Advanced)|
-| [Euro Truck Simulator 2] | |
-| [Dead Cells] | |
-|[The Witcher 3: Wild Hunt]|Graphics & postprocessing to med/low. i7 required|
-| [Celeste] | |
-| [Unturned] | |
-| [Half-Life 2] | |
-| [Stardew Valley] | |
-| [PAYDAY 2] | |
-| [Terraria] | |
-| [Sid Meier's Civilization V] | |
-| [Project Zomboid] | |
-| [RimWorld] | |
-| [Left 4 Dead 2] | |
-| [Stellaris] | |
-| [Bloons TD 6] | |
-| [Factorio] | |
-| [Divinity: Original Sin 2] | Set Graphics Quality Preset to Medium or lower|
-| [Geometry Dash] | |
-| [Human: Fall Flat] | Set Advanced Video to Medium or lower |
-| [Overcooked! 2] | |
-| [Hollow Knight] | |
-| [Tabletop Simulator] | |
-| [Killer Queen Black] | |
-| [Slay the Spire] | |
-| [Cuphead] | |
-| [TEKKEN 7] | |
-| [Loop Hero] | |
-| [Kerbal Space Program] | |
-| [Grim Dawn] | |
-| [RISK: Global Domination] | |
-| [Northgard] | |
-| [Fishing Planet] | |
-| [Don't Starve Together] | |
-| [Farm Together] | |
-| [Darkest Dungeon®] | |
-| [The Jackbox Party Pack 8] | Other party packs work well too! |
-| [Baba Is You] | |
-| [A Short Hike] | |
-| [Fallout 4] | Set graphics quality to medium or lower. i7 recommended|
-| [Return of the Obra Dinn] | |
-| [Disco Elysium] | Long load time on initial launch |
-| [Escape Simulator] | |
-| [Untitled Goose Game] | |
-
-Regardless of what games you play, please send feedback about how well it worked
-and any issues you encountered during gameplay using the post-game survey.
-
-## Steam Play
-
-Chrome OS will typically run the Linux version of a game if it exists. Steam
-Play allows you to run additional titles by leveraging a compatibility tool
-called Proton.
-
-To enable Steam Play for a particular title:
-
-* On the game’s library listing, click the settings cog
-* Select “Properties”
-* Select “Compatibility”
-* Check “Force the use of a specific Steam Play compatibility tool”
-* Select a version. We recommend Proton Experimental
-
-To enable Steam Play for all relevant titles:
-
-* In the top left corner of the Steam client, select “Steam”
-* Select “Settings”
-* Select “Steam Play”
-* Check “Enable Steam Play for all other titles”
-* Select a version. We recommend Proton Experimental
-
-## FAQ
-
-Q: When will Steam come to Beta or Stable channel?
-
-A: We don’t have a specific date to commit to. We’ll expand availability
-when we feel the product is ready.
-
--------------------------------------------------------------------------------
-Q: When will Steam be available on my Chromebook?
-
-A: Some Chromebooks lack the necessary hardware to provide a quality
-experience for Steam games, and thus are unlikely to be supported. As new,
-compatible devices come out, we will update the supported device list.
-
--------------------------------------------------------------------------------
-Q: Can I play my favorite game on a Chromebook now?
-
-A: If your game is on the list above, it’s likely to run based on our
-testing. Otherwise, the only way to find out is to give it a try! Please
-send feedback about what you find.
-
--------------------------------------------------------------------------------
-Q: Can I play games from other game stores?
-
-A: Chrome OS also supports Android Games from the Play Store. Outside Steam,
-other PC game stores are not supported.
-
--------------------------------------------------------------------------------
-
-
-## Game Developers
-
-We’d love to work with you to ensure your games run great on Chrome OS. If your
-game is already on Steam and runs on Linux (with or without Proton), you can try
-it using the instructions above. If you encounter Chrome OS specific bugs with
-your game, have particular workflows you’d like supported, or are otherwise
-interested in working with us, please reach out to borealis-game-dev@google.com.
-
-[Portal 2]:https://store.steampowered.com/app/620
-[Hades]:https://store.steampowered.com/app/1145360
-[Age of Empires II: Definitive Edition]:
-https://store.steampowered.com/app/813780
-[World of Tanks Blitz]:https://store.steampowered.com/app/444200
-[The Elder Scrolls V: SSE]:https://store.steampowered.com/app/489830
-[Vampire Survivors]:https://store.steampowered.com/app/1794680
-[Team Fortress 2]:https://store.steampowered.com/app/440
-[Euro Truck Simulator 2]:https://store.steampowered.com/app/227300
-[Dead Cells]:https://store.steampowered.com/app/588650
-[The Witcher 3: Wild Hunt]:
-https://store.steampowered.com/app/292030/The_Witcher_3_Wild_Hunt/
-[Celeste]:https://store.steampowered.com/app/504230
-[Unturned]:https://store.steampowered.com/app/304930
-[Half-Life 2]:https://store.steampowered.com/app/220
-[Stardew Valley]:https://store.steampowered.com/app/413150
-[PAYDAY 2]:https://store.steampowered.com/app/218620
-[Terraria]:https://store.steampowered.com/app/105600
-[Sid Meier's Civilization V]:https://store.steampowered.com/app/8930
-[Project Zomboid]:https://store.steampowered.com/app/108600
-[RimWorld]:https://store.steampowered.com/app/294100
-[Left 4 Dead 2]:https://store.steampowered.com/app/550
-[Stellaris]:https://store.steampowered.com/app/281990
-[Bloons TD 6]:https://store.steampowered.com/app/960090
-[Factorio]:https://store.steampowered.com/app/427520
-[Divinity: Original Sin 2]:https://store.steampowered.com/app/435150
-[Geometry Dash]:https://store.steampowered.com/app/322170
-[Human: Fall Flat]:https://store.steampowered.com/app/477160
-[Overcooked! 2]:https://store.steampowered.com/app/728880
-[Hollow Knight]:https://store.steampowered.com/app/367520
-[Tabletop Simulator]:https://store.steampowered.com/app/286160
-[Killer Queen Black]:
-https://store.steampowered.com/app/663670/Killer_Queen_Black/
-[Slay the Spire]:https://store.steampowered.com/app/646570
-[Cuphead]:https://store.steampowered.com/app/268910
-[TEKKEN 7]:https://store.steampowered.com/app/389730
-[Loop Hero]:https://store.steampowered.com/app/1282730
-[Kerbal Space Program]:https://store.steampowered.com/app/220200
-[Grim Dawn]:https://store.steampowered.com/app/219990
-[RISK: Global Domination]:https://store.steampowered.com/app/1128810
-[Northgard]:https://store.steampowered.com/app/466560
-[Fishing Planet]:https://store.steampowered.com/app/380600
-[Don't Starve Together]:https://store.steampowered.com/app/322330
-[Farm Together]:https://store.steampowered.com/app/673950
-[Darkest Dungeon®]:https://store.steampowered.com/app/262060
-[The Jackbox Party Pack 8]:https://store.steampowered.com/app/1552350
-[Baba Is You]:https://store.steampowered.com/app/736260
-[A Short Hike]:https://store.steampowered.com/app/1055540
-[Fallout 4]:https://store.steampowered.com/app/377160/Fallout_4/
-[Return of the Obra Dinn]:https://store.steampowered.com/app/653530
-[Disco Elysium]:https://store.steampowered.com/app/632470
-[Escape Simulator]:https://store.steampowered.com/app/1435790/Escape_Simulator/
-[Untitled Goose Game]:https://store.steampowered.com/app/837470
diff --git a/chromium/docs/website/site/chromium-os/testing/adding-unit-tests-to-the-build/index.md b/chromium/docs/website/site/chromium-os/testing/adding-unit-tests-to-the-build/index.md
deleted file mode 100644
index dcdc18b6d58..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/adding-unit-tests-to-the-build/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: adding-unit-tests-to-the-build
-title: Chromium OS Unit Testing
----
-
-## MOVED TO <https://chromium.googlesource.com/chromiumos/docs/+/HEAD/testing/running_unit_tests.md>.
-
-Please update the link that brought you here. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/afe-rpc-infrastructure/index.md b/chromium/docs/website/site/chromium-os/testing/afe-rpc-infrastructure/index.md
deleted file mode 100644
index 0d64266abbd..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/afe-rpc-infrastructure/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: afe-rpc-infrastructure
-title: AFE RPC Infrastructure
----
-
-# Infrastructure
-
-Our RPCs are served by apache running on cautotest using django's ability to map
-python's functions to URLs. In frontend/afe/urls.py we end up mapping /rpc/ to
-frontend/afe/views.py:handle_rpc() via the generate_patterns() call in
-frontend/urls_common.py. The handle_rpc view very quickly bails out to the code
-in frontend/afe/rpc_handler.py, which pulls all functions defined in
-frontend/afe/rpc_interface.py or frontend/afe/site_rpc_interface.py, and then
-exposes them as RPCs.
-
-Any changes done to the RPC infrastructure will require a restart of apache,
-since all of the python code is loaded only once when apache first starts. This
-means that any updates to the code done after apache is started won’t be used or
-seen. To solve this, one can gracefully restart apache by running sudo
-/etc/init.d/apache2 reload. Any CLs that you write that touch RPC-related code
-should include the line DEPLOY=apache to indicate to whoever is pushing that
-this step needs to be done.
-
-Data being sent and received by an RPC is serialized in json format, as can be
-seen in frontend/afe/json_rpc/serviceHandler.py. The RPCs expect a JSON object
-of the form {'id':int, 'method':string, 'params':\[JSON\]}. A response is sent
-back in the form {'id':int, 'result':JSON, 'error':{'name':string,
-'message':string, 'traceback':string}}.
-
-As a client, to call an RPC it is preferable to use the wrapper declared in
-autotest_lib.server.frontend.AFE. It automatically deduces the correct server
-from your global/shadow config, and wraps around the more bare client-side RPC
-interface in frontend/afe/json_rpc/proxy.py.
-
-### RPCs
-
-We use RPCs to provide a layer between database access and data querying. This
-allows use to enforce ACLs, centralize logic to ensure that the operation that
-is about to be done is sane, and to allow the underlying data representation to
-change without having to change code everywhere.
-
-The RPCs that we have allow for create/get/update/delete operations to be done
-on most data that one would find important (hosts, labels, jobs, host queue
-entries, etc.). Very straightforward examples of these can be found by looking
-at the ./cli/atest source code.
-
-If you take a look at the functions defined in rpc_interface.py, you'll see that
-most of the get methods take an argument of filter_data. This argument is then
-passed directly to the django models call, so everything that is allowed as a
-parameter on a django filter() call (ie.__startswith, __in, etc.) is valid to
-pass here. Slightly sadly though, this does mean that the RPCs do not completely
-abstract one from the underlying schema of the database tables.
-
-Two very notable RPCs are the create_job call in rpc_interface and
-create_suite_job insite_rpc_interface. This is the only place in autotest where
-jobs are created. Any special handling of job creation, such as parsing out
-METAVARs, or ensuring control file sanity, can be done at this point to enforce
-that only correctly formed control files will make it into the system.
-
-The set of RPCs exposed doesn't have much functionality beyond just asking for a
-piece of data to be immediately returned or modified. This means that we have
-large parts of the system that sit and poll to see if an event has happened,
-instead of being able to wait for the completion of an event. Attempting to
-create a synchronous RPC, for example, one that creates a job, and returns once
-the job is done would be much more difficult, as everything goes down to MySQL
-in the end, and MySQL has no way to support notifying a piece of python code
-that a value has changed. (Or, at least, I don't know how to use triggers to do
-this.)
-
-It should be noted that TKO has its own set of RPCs, generally used to access
-data in tko_\* tables, uses of these don't come up quite as frequently in the
-code, but a notable case is run_suite.py, which gets is information about the
-suite that ran by querying the get_detailed_test_view TKO RPC.
-
-To add a new RPC, one would simply just add a new normal python function to
-site_rpc_interface.py. The only restriction is that the return value of the
-function must be JSON serializable. It'd be a good idea to look at
-frontend/afe/rpc_utils.py to see if there's any relevant functionality that'd be
-useful. Specifically, if you're just wrapping around a django model query, you
-can use the prepare_for_serialization function to massage the returned django
-model objects into JSON. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/anatomy-of-test-test/index.md b/chromium/docs/website/site/chromium-os/testing/anatomy-of-test-test/index.md
deleted file mode 100644
index a79038cbd38..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/anatomy-of-test-test/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: anatomy-of-test-test
-title: Anatomy of test.test
----
-
-This document will go through the pieces of test.test that are available to use,
-describing what each does and when it could be used.
-
-# Attributes
-
-job backreference to the job this test instance is part of
-
-outputdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;
-
-resultsdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;/results
-
-profdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;/profiling
-
-debugdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;/debug
-
-bindir eg. tests/&lt;test&gt;
-
-src eg. tests/&lt;test&gt;/src
-
-tmpdir eg. tmp/&lt;tempname&gt;_&lt;testname.tag&gt;
-
-# initialize()
-
-Everytime a test runs this function runs. For example, if you have
-iterations=100 set this will run 100 times. Use this when you need to do
-something like ensure a package is there.
-
-# setup()
-
-setup() runs the first time the test is set up. This is often used for compiling
-source code one should not need to recompile the source for the test for every
-iteration or install the same
-
-# run_once()
-
-This is called by job.run_test N times, where N is controlled by the interations
-parameter to run_test (Defaulting to one). it also gets called an additional
-time with profilers turn on, if any profilers are enabled.
-
-# postprocess_iteration()
-
-This processes any results generated by the test iteration and writes them out
-into a keyval. It's generally not called for the profiling iteration, as that
-may have difference performance implications.
-
-warmup() \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/arcp b/chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/arcp
deleted file mode 100644
index 281fa42f2e8..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/arcp
+++ /dev/null
@@ -1 +0,0 @@
-qGWvNExf7mQz4rvP
diff --git a/chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/index.md b/chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/index.md
deleted file mode 100644
index bf62f2a2073..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/arcplusplus-testing/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: arcplusplus-testing
-title: arcplusplus-testing
----
-
diff --git a/chromium/docs/website/site/chromium-os/testing/autoserv-packaging/index.md b/chromium/docs/website/site/chromium-os/testing/autoserv-packaging/index.md
deleted file mode 100644
index c5c99d661ba..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autoserv-packaging/index.md
+++ /dev/null
@@ -1,232 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: autoserv-packaging
-title: Autoserv Packaging
----
-
-Autoserv at a glance
-
-[Autoserv](https://github.com/autotest/autotest/wiki/Autoserv) -- as described
-on its documentation page -- is a framework for automating machine control. It
-can do things like power cycle, install kernels, run arbitrary commands,
-transfer files, and run autotest tests. While a “machine” can be virtual, local,
-or remote, autoserv is largely used on chromeOS for remotely controlling
-chromebooks for automated testing purposes.
-
-Autoserv includes specific support for Autotest. It’s able to install Autotest
-on host devices, run control files on them, and then fetch results back to the
-server. To install the appropriate files onto a host device, autoserv’s
-packaging system is used. Since autotest is it's own package it can change at a
-rate independent of the image, and changes to one do not require changes to the
-other. Using packages also allows us continue with our suite scheduling logic
-while non-essential packages are staged asynchronously.
-
-## Autoserv packaging high-level overview
-
-Autoserv’s packaging system is essentially a set of functions to fetch, upload,
-install, and remove packages that are necessary to control a device under test
-(DUT). Each package is a collection of files that is tarred and bzipped (into a
-\*.tar.bz2 file) to facilitate the transferring of files onto the DUT. When
-transferring packages to a DUT, the system computes an MD5 checksum for each
-package to determine whether or not any previously-installed package has changed
-and needs to be re-installed. A package is only installed if it has changed
-according to the checksum (or, of course, if the package is not already on the
-DUT).
-
-There are 3 types of packages: those associated with test code (“test”); with
-profiler code (“profiler”); and with dependencies (“dep”). These packages are
-all generally handled the same by the packaging system, but they’re installed
-into different subfolders on the DUT. There is also a special package that is
-used to bundle the autotest client code (“client”).
-
-## Implementation details
-
-Much of the packaging system is implemented in
-client/common_lib/base_packages.py. It contains the logic for fetching packages
-from either HTTP or from a local filesystem (class HttpFetcher and class
-LocalFilesystemFetcher, respectively). Class BasePackageManager in that file
-also contains the logic for creating package files (tar_package), fetching and
-installing (i.e., untarring) package files (fetch_pkg and install_pkg), and
-working with checksums.
-
-The autotest client code is installed via the packaging system from the
-server/autotest.py file. Autotest deps are installed via setup_dep in
-client/bin/job.py. The utils/packager.py file also calls into the packaging
-system to create packages.
-
-For test code, packages are generally created at emerge time (this is specific
-to chromeOS). They are simply bzipped versions of corresponding test code
-located in the source directory at client/site_tests. If a previously-built
-package is missing from both a DUT and the server, autoserv will bundle a
-temporary package using local source and send it to the DUT. Otherwise, if the
-server finds a previously-built package, it will send it to the DUT only if it’s
-changed from what’s already there. In this case, local changes to source code
-are ignored because the previously-built package is used instead.
-autotest_quickmerge works around this by deleting the package files for altered
-tests to force autoserv to build and use temporary packages created from local
-source.
-
-The interesting package fetching work for test code occurs as part of the
-autotest harness, which can be found in client/bin/harness_autoserv.py. This
-contains the AutoservFetcher (if you see log messages about fetching from an
-autoserv:// repo, this is what's being used). The fetching logic then ends up in
-server/autotest.py in _process_line and more interestingly _send_tarball, which
-sends the .tar.bz2 package file, or generates one using PackageManager's
-tar_package function if it doesn't exist.
-
-Currently, fetching packages via autoserv is only used in non-prod situations,
-such as with run_remote_tests.sh. In prod, all of the packages are instead
-pulled from devservers via the HttpFetcher using the job_repo_url. This is a
-result of [crbug.com/212641](http://crbug.com/212641) and
-[crbug.com/216918](http://crbug.com/216918); we were hitting a case where
-fetching would hang (it creates a fifo that gets written to, once the package
-has been pushed down to the DUT). A few CLs were subsequently pushed so that
-fetching from autoserv could be disabled in prod
-(<https://gerrit.chromium.org/gerrit/#/c/33804/2> and
-<https://gerrit.chromium.org/gerrit/#/c/34665/3>).
-
-At a high level, this is what happens:
-
-1. In the simplest case, a reimage job runs, after which a server jobs runs. The
-reimage job stages autotest packages and sets the job_repo_url as part of
-
-the autoupdate 'test'. These packages contain the tests (one bz file for each
-test), the dependencies (like chrome_test) and client-autotest.
-
-2. job_repo_url is set in add_cros_version_labels_and_job_repo_url, and points
-to the devserver where the required packages are staged.
-
-3. Server job kicks off autotest.py/site_autotest.py, which are the classes
-responsible for installing autotest on the client.
-
-4. autotest.py gets the job_repo_url through site_autotest's get_fetch_location,
-and creates a PackageManager in _install_using_packaging
-
-5. This package manager is the aforementioned HttpFetcher, which does a wget
-from the given url to fetch packages; This happens through
-
-client/common_lib/base_packages install_pkg.
-
-**Deps:**
-
-An example of a dep is pyauto. The actual installation of this dep happens
-through bin/job.install_packages on the DUT, though the steps are pretty general
-for package installation and are as follows:
-
-1. Installs packages using packages.PackageManager
-
-- Remove the install dir and reinstalls by default.
-
-2. The installation happens through PackageManager.fetch_pkg
-
-The name of the tarball to get from the repo_url is constructed as
-pkg_type-name.tar.bz2. In the case of pyauto this is dep-pyauto.tar.bz2
-
-3. Check if the package has already been fetched
-
-If not, check if we need to fetch:
-
-a. Check if a checksum exists on the DUT
-
-b. Fetch checksum from package url if it doesn't, through fetch_pkg_file
-
-c. Parse the contents of the checksum file into a per package dictionary
-
-d. Create an md5 checksum of the package present at
-/usr/local/autotest/packages/client-autotest.tar.bz2 on the DUT
-
-e. Update the checksum file on the DUT so we don't pull the same package again
-through _save_checksum_dict
-
-f. If the checksums don't match untar contents of the package via untar_pkg
-
-g. This will essentially run a tar command on the DUT, recompute the checksums,
-and rewrite them to the DUT.
-
-4. If fetching is needed, invoke base_packages.fetch_pkg_file which will lead to
-a wget in the case of pyauto:
-
-wget --connect-timeout=15 --retry-connrefused --wait=5 -nv
-http://devserver:port/static/archive/build/autotest/packages/dep-pyauto_dep.tar.bz2
--O /usr/local/autotest/packages/dep-pyauto_dep.tar.bz2
-
-5. Place the package in /usr/local/autotest/packages
-
-6. Update the checksum
-
-7. Install the package through base_packages.install_pkg
-
-8. Check to see if the install dir exists: ls
-/usr/local/autotest/packages/install_dir
-
-8. The actual untarring happens in base_packages.untar_pkg, before this we mkdir
-install_dir untar_pkg runs tar xjf from_path -C dest_dir
-
-In an end to end run of a pyauto test, the following packages will get installed
-through the process described above:
-
-On the server, install client-autotest on the DUT:
-
-1. mkdir /usr/local/autotest/packages
-
-2. Copy autotest client packages to
-/usr/local/autotest/packages/client-autotest.tar.bz2
-
-3. Untar the package if the checksum doesn't match, as described above.
-
-On the DUT, install the tests and pyauto dep:
-
-1. Execute a command like: ./bin/autotest -H autoserv --verbose --user=beeps
-/usr/local/autotest/control.autoserv
-
-Actually that's a lie, it executes autotestd_monitor which executes autotestd
-which leads to that command, but that is irrelevant for this discussion.
-
-2. Installing the test:
-
-a. The control file Invokes job.run_test with the test name, which leads to
-common_lib/test.runtest
-
-b. bin/job.install_pkg installs the test using
-common_lib.packages.PackageManager leading to a line in the logs like (instead
-of the wget):
-
-22:26:48 DEBUG| Successfully fetched test-login_LoginSuccess.tar.bz2 from
-http://devserver/static/archive/lumpy-release/R29-
-
-4279.0.0/autotest/packages/test-login_LoginSuccess.tar.bz2
-
-Again this installation happens through a process as described above.
-
-3. Installing deps, cros_ui_test:
-
-a. We then go on to executing the initialize function of the test via
-common_lib/test._cherry_pick_call
-
-- Until this point the infrastructure was totally oblivious that the test in
-question requires pyauto
-
-b. Since pyauto tests inherit from cros_ui_test, we execute the initialize of
-cros_ui_test, which does things like
-
-start an authserver, remove cryptohome valuts, restart cros_ui etc.
-PyAutoTest.initialize finally install deps through
-
-cros/pyauto_test._install_deps and then proceeds to import pyauto.
-
-c. PyAutoTest passes in the install_dir (/usr/local/autotest/deps/pyauto_dep)
-and the package_dir (/usr/local/packages) which calls into bin/job
-
-## Relevant links
-
- General autoserv documentation:
- <https://github.com/autotest/autotest/wiki/Autoserv>
-
-* User-facing documentation about test dependencies:
- <https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/best-practices.md#Adding-test-deps>
-
-*Published May 13, 2013* \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-and-ebuilds/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-and-ebuilds/index.md
deleted file mode 100644
index 29ed159b647..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-and-ebuilds/index.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: autotest-and-ebuilds
-title: Autotest and Ebuilds
----
-
-## [TOC]
-
-## Useful documents
-
-Autotest documentation on GitHub -
-**<https://github.com/autotest/autotest/wiki/AutotestApi>**
-
-This would be a good read if you want to familiarize yourself with the basic
-Autotest concepts
-
-Gentoo Portage ebuild/eclass Information -
-<http://www.gentoo.org/proj/en/devrel/handbook/handbook.xml?part=2>
-
-Getting to know the package build system we use.
-
-ChromiumOS specific Portage FAQ -
-<http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/portage-build-faq>
-
-Learning something about the way we use portage.
-
-**## Autotest and ebuild workflow**
-
-**To familiarize with autotest concepts, you should start with the upstream Autotest documentation at: <https://github.com/autotest/autotest/wiki/AutotestApi>**
-**The rest of this document is going to use some terms and only explain them vaguely.**
-
-**### Overview**
-
-**At a high level, tests are organized in test cases, each test case being either server or client, with one main .py file named the same as the test case, and one or more control files. In order to be able to perform all tasks on a given test, autotest expects tests to be placed in a monolithic file structure of:**
-**/client/tests/**
-**/client/site_tests/**
-**/server/tests/**
-**/server/site_tests/**
-**Each test directory has to have at least a control file, but typically also has a main job module (named the same as the test case). Furthermore, if it needs any additional files checked in, they are typically placed in a files/ directory, and separate projects that can be built with a Makefile inside the src/ directory.**
-**Due to structural limitations in Chromium OS, it is not possible to store all test cases in this structure in a single large source repository as upstream autotest source would (placed at third_party/autotest/files/ in Chromium OS). In particular, the following has been required in the past:**
-**- Having confidential (publicly inaccessible) tests or generally per-test ACLs for sharing only with a particular partner only.**
-**- Storing test cases along with the project they wrap around, because the test requires binaries built as a by-product of the project’s own build system. (fe. chrome or tpm tests)**
-**Furthermore, it has been desired to generally build everything that is not strongly ordered in parallel, significantly decreasing build times. That, however, requires proper dependency tree declaration and being able to specify which test cases require what dependencies, in addition to being able to process different “independent” parts of a single source repository in parallel.**
-**This leads to the ebuild workflow, which generally allows compositing any
-number of sources in any format into a single monolithic tree, whose contents
-depend on build parameters.**
-
-[<img alt="image"
-src="/chromium-os/testing/autotest-user-doc/atest-diagram.png">](/chromium-os/testing/autotest-user-doc/atest-diagram.png)
-
-This allows using standard autotest workflow without any change, however, unlike
-what upstream does, the tests aren’t run directly from the source repository,
-rather from a staging read-only install location. This leads to certain
-differences in workflow:
-
- Source may live in an arbitrary location or can be generated on the fly.
- Anything that can be created as an ebuild (shell script) can be a test
- source. (cros-workon may be utilised, introducing a fairly standard Chromium
- OS project workflow)
-
-* The staging location (/build/${board}/usr/local/autotest/) may not
- be modified; if one wants to modify it, they have to find the source
- to it (using other tools, see FAQ).
-
- Propagating source changes requires an emerge step.
-
-### Ebuild setup, autotest eclass
-
-NOTE: This assumes some basic knowledge of how ebuilds in Chromium OS work.
-Refer to for example
-<http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/portage-build-faq>
-for some documentation.
-An autotest ebuild is an ebuild that produces test cases and installs them into
-the staging area. It has three general tasks:
-
-* Obtain the source - This is generally (but not necessarily) provided
- by ‘cros-workon’ eclass. It could also work with the more standard
- tarball SRC_URI pathway or generally any shell code executed in
- src_unpack().
-* Prepare test cases - This includes, but is not limited to
- preprocessing any source, copying source files or intermediate
- binaries into the expected locations, where they will be taken over
- by autotest code, specifically the setup() function of the
- appropriate test. Typically, this is not needed.
-* Call autotest to ‘build’ all sources and subsequently install them -
- This should be done exclusively by inheriting the autotest eclass,
- which bundles up all the necessary code to install into the
- intermediate location.
-
-Autotest eclass is inherited by all autotest ebuilds, only requires a number of
-variables specified and works by itself otherwise. Most variables describe the
-locations and listings of work that needs to be done:
-
-* Location variables define the paths to directories containing the
- test files:
-
-AUTOTEST_{CLIENT,SERVER}_{TESTS,SITE_TESTS}
-AUTOTEST_{DEPS,PROFILERS,CONFIG}
-
-These typically only need to be specified if they differ from the defaults
-(which follow the upstream directory structure)
-
-* List variables (AUTOTEST_\*_LIST) define the list of deps,
- profilers, configs that should be handled by this ebuild.
-* IUSE test list specification TESTS=, is a USE_EXPANDed specification
- of tests managed by the given ebuild. By virtue of being an IUSE
- variable, all of the options are visible as USE flag toggles while
- building the ebuild, unlike with list variables which are a given
- and the ebuild has to be modified for those to change.
-
-Each ebuild usually operates on a single source repository. That does not always
-have to hold true, however, and in case of autotest, many ebuilds check out the
-sources of the same source repository (*autotest.git*). Invariably, this means
-that they have to be careful to not install the same files and split the sources
-between themselves to avoid file install collisions.
-If more than one autotest ebuild operates on the same source repository, they
-have to use the above variables to define mutually exclusive slices in order to
-not collide during installation. Generally, if we have a source repository with
-client site_tests A and B, you can have either:
-
-* one ebuild with IUSE_TESTS=”+tests_A +tests_B”
-* two different ebuilds, one with IUSE_TESTS=”+tests_A”, the other
- with IUSE_TESTS=”+tests_B”
-
-As soon as an overlap between ebuilds happens, either an outside mechanism has
-to ensure the overlapping tests are never enabled at the same time, or file
-collisions happen. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-design-patterns/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-design-patterns/index.md
deleted file mode 100644
index f55e7561c93..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-design-patterns/index.md
+++ /dev/null
@@ -1,403 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: autotest-design-patterns
-title: Autotest Design Patterns
----
-
-[TOC]
-
-This is a collection of patterns to help aid test developers in finding useful
-parts of Autotest and common pathways when writing tests.
-
-## Adding retries to Flaky tests
-
-We have a mechanism to retry tests that have flaky failures. A retries count can
-be specified, and a failing test will be re-attempted until it either passes or
-the number of failed retries reaches the retry count, in which case the test
-will be considered failed.
-
-To add retries to your test, you simply need to add a JOB_RETRIES = N attribute
-to the control file for the test you would like to retry, where N is an integer
-giving the maximum number of times the test should be retried.
-
-> Note that a previous method of retrying flaky tests was to use the RETRIES
-> attribute. While this attribute is no longer in use, one might find this in
-> commits merged in or before Aug 2018. [This
-> bug](https://bugs.chromium.org/p/chromium/issues/detail?id=873716) tracks the
-> migration from RETRIES to JOB_RETRIES.
-
-## Wrapping a GTest test in Autotest
-
-## Wrapping a Browerstest in Autotest
-
-## Wrapping a Telemetry test in Autotest
-
-Telemetry is replacing Pyauto as the new performance testing framework for
-Chrome as well as the new key way to write tests that interact with the UI.
-Writing a test that uses telemetry is a 2 step process:
-
-* Write a telemetry test or benchmark in the chromium source.
- * Telemetry's source code, tests, and performance benchmarks are
- all platform independent. Thus they all exist within the
- chromium not the chromium-os source.
- * If one wants to write a new test, they first should add it as a
- new telemetry test.
- * They can run these tests locally against their Chrome-OS
- machines but provided the arguments --browser=cros-chrome and
- --remote=&lt;IP&gt; to the telemetry run_tests script that kicks
- off your new tests.
- * Once the test works and is checked in, it can be ran as a new
- autotest test.
- * It will take a day or two for the chrome tip-of-tree to be
- rev-ed into the next build
- * Please see <http://www.chromium.org/developers/telemetry> for
- more information.
-* Write an autotest test to kick off the new telemetry test.
- * Once your new telemetry test/benchmark is checked into chrome
- and working you need to write an autotest server-side test to
- kick it off.
- * In your new test script you need the following code:
-
-```none
-from autotest_lib.server.cros import telemetry_runner
-def run_once(self, host=None):
-        """Run the telemetry scrolling benchmark.
-        @param host: host we are running telemetry on.
-        """
-        telemetry = telemetry_runner.TelemetryRunner(host)
-        result = telemetry.run_telemetry_test('my_new_telemetry_test')
-        
-        # OR
-        result = telemetry.run_telemetry_benchmark('my_new_telemetry_benchmark', 'my_page_set')
-        # If collecting performance keyvals to be sent to the perf database:
-        result = telemetry.run_telemetry_benchmark('my_new_telemetry_benchmark', 'my_page_set', keyval_writer=self)
-```
-
- * Alternatively there currently exists a telemetry_benchmarks test
- and to add a new benchmark you simple need to add a new control
- file to this test. I.E. for octane, you add a control file named
- control.octane and kick off the telemetry_benchmarks test with
- the current parameters:
-
-```none
-def run_benchmark(machine):
-    host = hosts.create_host(machine)
-    job.run_test("telemetry_benchmarks", host=host, benchmark="octane", page_sets=["octane.json"])
-parrallel_simple(run_benchmark, machine)
-```
-
-## Locally Testing a Wrapped Telemetry Test:
-
-Because the telemetry runner code requires the full lab infrastructure, you need
-to set up a local autotest frontend and devserver in order to locally test your
-telemetry changes.
-
-1. First set up a local AFE and database by following the instructions
- here:
- <http://www.chromium.org/chromium-os/testing/autotest-developer-faq/setup-autotest-server>
-2. Kick off a local devserver.
-
- ```none
- cd src/platform/dev # From you local chromium-os checkout
- # Kick off the devserver
- ./devserver.py --static_dir=static
- ```
-
-3. Edit your local AFE to use your local devserver.
- 1. Add the following to
- src/third_party/autotest/files/shadow_config.ini:
-
- ```none
- [CROS]
- dev_server: http://[YOUR IP ADDRESS]:8080
- ```
-
-4. Restart apache and kick off the scheduler:
-
- ```none
- sudo /etc/init.d/apache2 restart
- /usr/local/autotest/scheduler/monitor_db.py /usr/local/autotest/results
- ```
-
-5. Add your device to your setup (this requires you to be able to log
- into your machine as root).
-
- ```none
- src/third_party/autotest/files/cli/atest host create [ip of your host]
- ```
-
-6. Setup a device with the image you want (important as the database
- will label your machine with its current image). Do this by kicking
- off the dummy suite.
-
- ```none
- src/third_party/autotest/files/site_utils/run_suite.py --board=[board] --build=[image you want to use] --suite=dummy
- ```
-
-7. Now you should be able to kick off your server side telemetry tests
- through the AFE (go to localhost in your browser)! But in case your
- new test doesn't show up, run test importer. Then refresh the create
- job's page with cntl+shift+r
-
- ```none
- src/third_party/autotest/files/utils/test_importer.py
- ```
-
-Note that the test will try to ssh to the dev_server, so make sure that 'ssh
-YOUR_IP_ADDRESS' works without prompting a password. If it doesn't, you'll need
-to setup public keys for your local machine. Following these steps:
-
-1. First generate RSA ssh keys, see [this
- link](https://help.github.com/articles/generating-ssh-keys) if you
- don't know how to. Assume you've created ~/.ssh/id_rsa,pub and
- ~/.ssh/id_rsa
-2. Add the following to ~/.ssh/config
-
- ```none
- Host YOUR_IP_ADDRESS
- User YOUR_USER_NAME   
- IdentityFile /path/to/home/.ssh/id_rsa
- ```
-
-3. Add the content of ~/.ssh/id_rsa to ~/.ssh/authorized_keys
-
- ```none
- cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys
- ```
-
-4. Restart ssh-agent
-
- ```none
- username@localhost~$ killall ssh-agent; eval `ssh-agent`
- ```
-
-5. Allow ssh to your local machine using RSA keys
-
- ```none
- username@localhost~$ sudo vim /etc/ssh/sshd_config
- # Turn on RSAAuthentication
- RSAAuthentication yes
- ```
-
-6. Restart ssh server
-
- ```none
- username@localhost~$ sudo service ssh restart
- ```
-
-7. Test you can ssh to your local machine without password
-
- ```none
- username@localhost~$ ssh YOUR_IP_ADDRESS
- ```
-
-## Logging into Chrome from an Autotest (using Telemetry)
-
-From an Autotest, you can use Telemetry to log into and out of Chrome using
-context management in Python (the "with/as" construct). To do so, your autotest
-must include the following import:
-
-```none
-from autotest_lib.client.common_lib.cros import chrome
-```
-
-and then use the "with/as" construct like so:
-
-```none
-with chrome.Chrome() as cr:
-    do_stuff()  # Will be logged into Chrome here.
-# Will be logged out at this point.
-```
-
-In this example, cr is a Telemetry Browser object. Wrapping your code inside of
-a "with/as" ensures that Chrome will be logged in at the start of the construct,
-and logged out at the end of the construct.
-
-## Rebooting a machine in a server-side test
-
-This handles the simple reboot case:
-
-```none
-def run_once(self, host=None):
-    host.reboot()
-    # If the reboot fails, it will raise error.AutoservRebootError
-    # If you need to recover from a reboot failure, note that calls
-    # to host.run() will almost certainly fail with a timeout.
-```
-
-If you have custom code that brings the DUT down, and then brings it back up
-again, you will need to use a slightly different flow:
-
-```none
-def run_once(self, host=None):
-    boot_id = host.get_boot_id()
-    self._trigger_complicated_dut_restart()
-    host.wait_for_restart(old_boot_id=boot_id)
-```
-
-## Running a client side test as part of a server side test
-
-Inside a server job you can utilize the host object to create a client object to
-run tests.
-
-```none
-def run_once(self, host, job_repo_url=None):
-    client_at = autotest.Autotest(host)
-    client_at.run_test('sleeptest')
-```
-
-\*The status of this test is communicated through the status.log, if this test
-fails, the overall run of the job will be considered a failure.
-
-## Writing code to automatically generate a label for a DUT
-
-Many tests have requirements for specific hardware characteristics, specified by
-setting DEPENDENCIES. So, imagine there's a new *fubar* class of device present
-on some new hardware. You have tests that exercise the driver for the new
-devices. Obviously, your test shouldn't run unless a *fubar* device is present.
-So, your control file will say this:
-
-```none
-DEPENDENCIES = "fubar"
-```
-
-Alternatively, imagine that there are three kinds of *fubar*, types A, B, with
-the possibility of other types that might be added in future. There are boards
-with types A and B to be tested. You then have two control files, one for each
-type.
-
-For Type A:
-
-```none
-DEPENDENCIES = "fubar_type:type_a"
-```
-
-For Type B:
-
-```none
-DEPENDENCIES = "fubar_type:type_b"
-```
-
-These hardware characteristics are meant be detected automatically when the DUT
-is added into the lab database. To make the detection happen, you have to write
-detection code. Here's how to do it.
-
-The detection function must be added as a method in class `CrosHost`, found in
-file server/hosts/cros_host.py. The method must be decorated with
-`@label_decorator`. The return value is a string with the label name as it will
-appear in the `DEPENDENCIES` setting.
-
-A sample of a simple binary label:
-
-```none
-@label_decorator('fubar')
-def has_fubar(self):
-    result = self.run('test -d /sys/class/fubar', ignore_status=True)
-    if result.exit_code != 0:
-        return None
-    return 'fubar'
-```
-
-A sample of a label with multiple values:
-
-```none
-@label_decorator('fubar_type')
-def get_fubar_type(self):
-    result = self.run('get_fubar_type', ignore_status=True)
-    typestring = result.stdout.strip()
-    if typestring == 'Type A':
-        return 'fubar_type:type_a'
-    if typestring == 'Type B':
-        return 'fubar_type:type_b'
-    # typestring 'Type C' is a proposed industry standard, but
-    # it hasn't been finalized.  There may be other as yet
-    # unknown types in the future.
-    return None
-```
-
-One point about labels with multiple values bears emphasis: It may be that you
-will find that some valid values of a label aren't yet needed for any test. In
-that case, return `None` for the unused case. **Do not return a label value that
-is not needed by any existing test.** Generally, adding labels is easy, but
-removing labels is hard. So, don't create a label name until you know
-**exactly** where and how it will be used.
-
-## Use Chrome Driver in ChromeOS Autotest Test
-
-### About Chrome Driver
-
-Chrome Driver is a standalone server which implements WebDriver's wire protocol
-for Chromium. Through Chrome Driver, you can easily interact with Chromium
-browser with the power of browser automation provided by WebDriver. A list of
-WebDriver calls you can make can be found in [Selenium 2.0
-Documentation](http://selenium.googlecode.com/svn/trunk/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html).
-Some useful calls include:
-
- [get](http://selenium.googlecode.com/svn/trunk/docs/api/py/_modules/selenium/webdriver/remote/webdriver.html#WebDriver.get)(url):
- Loads a web page in the current browser session.
-
- [execute_script](http://selenium.googlecode.com/svn/trunk/docs/api/py/_modules/selenium/webdriver/remote/webdriver.html#WebDriver.execute_script)(script,
- \*args): Synchronously Executes JavaScript in the current window/frame.
-
- [find_element_by_name](http://selenium.googlecode.com/svn/trunk/docs/api/py/_modules/selenium/webdriver/remote/webdriver.html#WebDriver.find_element_by_name)(name):
- Finds an element by name.
-
-### Chrome Driver Binary
-
-All ChromeOS test images shall have Chrome Driver binary installed in
-/usr/local/chromedriver/. The binary is updated to the same version of Chrome in
-that test image. That is, you will always be using the latest build of Chrome
-Driver.
-
-If your test expects to run against a “stable” build of Chrome Driver binary,
-you will need to write your own code in your test to download the desired binary
-and replace the binary in /usr/local/chromedriver/.
-
-### How to use Chrome Driver in an Autotest test
-
-Writing a test that uses Chrome Driver to interact with Chrome is easy. There is
-[a wrapper
-class](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/client/common_lib/cros/chromedriver.py)
-for using Chrome Driver available in ChromeOS/Autotest. The wrapper class, as a
-context manager type, and handles the following tasks for you:
-
- Logs in ChromeOS using Telemetry.
-
- Starts Chrome Driver with Remote mode on the Device under Test (DUT) and
- connects to the remote debug port of the Chrome instance after log in.
-
- Exposes a driver instance for you to make any Chrome Driver calls.
-
- Shutdowns Chrome Driver process, and logs out of ChromeOS.
-
-To write a test, you can follow the example of test
-[desktopui_UrlFetchWithChromeDriver](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/client/site_tests/desktopui_UrlFetchWithChromeDriver/desktopui_UrlFetchWithChromeDriver.py).
-All you need to do to get started are basically:
-
- import the wrapper class
-
-```none
-from autotest_lib.client.common_lib.cros import chromedriver
-```
-
- Create an instance of the Chrome Driver, and make calls.
-
-```none
-with chromedriver.chromedriver() as chromedriver_instance:
-```
-
-```none
-    driver = chromedriver_instance.driver
-```
-
-```none
-    # Here you can make standard Chrome Driver calls through the driver instance.
-```
-
-```none
-     # For example, browse a given url with |driver.get(url)|
-```
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/autotest-server-usage/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/autotest-server-usage/index.md
deleted file mode 100644
index b296e067250..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/autotest-server-usage/index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/autotest-developer-faq
- - Autotest Developer FAQ
-page_name: autotest-server-usage
-title: Autotest Server Usage Guide
----
-
-Note these steps are to be ran after you have setup Autotest:
-<https://www.chromium.org/chromium-os/testing/autotest-developer-faq/setup-autotest-server>
-and have the local Autotest Web Frontend running. To verify simply navigate to
-<http://localhost>
-
-## Add Hosts
-
-Add hosts. *Note you need to ensure that you have SSH Access Setup Properly:
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md#Set-up-SSH-connection-between-chroot-and-DUT>*
-
-```none
-/usr/local/autotest/cli/atest host create hostname
-```
-
-## Start the Autotest Test Scheduler
-
-Start the scheduler.
-
-\*You may want to run the scheduler in ***screen***
-
-```none
-/usr/local/autotest/scheduler/monitor_db.py /usr/local/autotest/results
-```
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/index.md
deleted file mode 100644
index aa593c22109..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/index.md
+++ /dev/null
@@ -1,720 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: autotest-developer-faq
-title: Autotest Developer FAQ
----
-
-[TOC]
-
-The intent of this document is to provide a quick look up for common features
-that are used in test development in Autotest. Including typical functions that
-are used, where to search for other potential useful functions, and how to run
-pylint/unittest_suite in Autotest.
-
-Before you proceed, you should have read through the [Autotest User
-Documentation](/chromium-os/testing/autotest-user-doc).
-
-## Coding Style
-
-As Autotest is a mature upstream project we follow their style code when it
-comes to committing changes here as opposed to the Chromium OS style guide.
-Please refer to the coding style document that is in
-`autotest/docs/coding-style.md` or view it
-[here](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/coding-style.md).
-
-## Upstream Documentation
-
-Upstream is hosted on github at <http://autotest.github.com>
-
-Upstream Wiki <https://github.com/autotest/autotest/wiki>
-
-The github website doesn't really let you search through the docs but, you can
-clone the wiki repo and grep through it:
-
-```none
-git clone https://github.com/autotest/autotest.wiki.git
-```
-
-## Where are useful libraries?
-
-Autotest has an import structure that exposes a lot of functionality from a
-number of different places. Good places to grep for code that may already do
-what you need is:
-
-In general we should try to use the same functions in tests that are written
-rather than creating similar functions. This helps keep the whole frame work in
-a maintainable state and utilizes code that has been used for a while and is
-known to work.
-
-* client/common_lib
-* client/bin
-
-## How do I test changes to the Autotest codebase itself?
-
-Often times when making changes to the Autotest codebase itself, it is difficult
-to test your change unless you can actually run an instance of the Autotest
-server locally.
-
-To quickly get functional Autotest server setup please refer to: [Setup Autotest
-Server](/chromium-os/testing/autotest-developer-faq/setup-autotest-server)
-
-Reasons to run a local Autotest server might include:
-
-* Autotest Scheduler work
-* Adding or changing RPCs
-* Tests that involve common library changes
-* GUI/GWT Frontend work.
-
-## I am writing RPCs, what a is good reference to look at?
-
-Looking at the RPC doc from the server itself can be useful.
-
-<http://cautotest/afe/server/rpc_doc>
-
-## How do I test changes to the dynamic_suite infrastructure?
-
-You'll definitely want a locally-running Autotest server. For most changes, you
-will want to start by running the unit tests in server/cros/dynamic_suite as you
-work. You may also need to actually run a suite of tests against your Autotest
-instance. The 'dummy' suite is ideal, and there are several ways to run it:
-
-* site_utils/run_suite.py
-* cli/atest create_suite_job
-* server/autoserv test_suites/dev_harness.py
-
-In the first two cases, there are a variety of command line options and
-arguments that allow you to set the build and platform to test, etc. These
-pathways will always stage a build (if necessary), pull control files from that
-build, reimage devices and run the desired test suite.
-
-dev_harness.py does not pull control files from a particular build, but rather
-uses your local source tree. If you're trying to test changes to suite control
-files, for example, this is probably the best way to go. It can also be
-configured to skip reimaging, so you can iterate faster. dev_harness.py is
-pulled in and executed directly by autoserv, so it can't take command line args.
-Instead, it's configured using a file called dev_harness_conf that lives
-adjacent to dev_harness.py.
-
-## Where do I store large files that need to be publicly accessible for tests?
-
-Google Storage is used as the general storage facility for large files. Please
-avoid putting large files in git as it increases everyone's check out size. A
-good general rule of thumb is:
-
-If it is a file larger than 5 megs that will be changing over time, put it in
-Google Storage.
-
-A similar approach is taken as
-[localmirror](https://sites.google.com/a/google.com/chromeos/resources/engineering/releng/localmirror)
-except we use the Google Storage bucket ***gs://chromeos-test-public***
-
-To upload your files please follow ["How to get your files my files to local
-mirror"](https://sites.google.com/a/google.com/chromeos/resources/engineering/releng/localmirror#TOC-How-do-I-get-my-files-in-localmirro)
-but using the bucket ***gs://chromeos-test-public***
-
-<http://sandbox.google.com/storage/?arg=chromeos-test-public>
-
-## What's the fast way to make a change to a test and iterate to see if it now works?
-
-The fastest way to develop a test is to *not use compiled components* in your
-test. If you can write a test without cross-compiling code you can modify the
-test in python/shell on the target and rerun it on the target directly. This of
-course also applies to the situation where you want to modify the python/shell
-parts of a test that has cross-compiled code. The point is, try to use the least
-amount of cross-compiled code to write your test as possible.
-
-Assuming you have done this, on the target device's console, su to root. Then
-enter the /home/autotest directory on the target (provided you've run
-run_remote_tests once with it) and modify the test which will be in the tests
-subdirectory. You can run /home/autotest:
-
-**```none
-on_device# cd /home/autotest; ./bin/autotest tests/system_KernelVersion/control
-```**
-
-If you have modified cross-compiled test code, you can use the above
-instructions but you'll be rebuilding a lot of stuff you don't need. Instead of
-running build_platform --withautotest, you can instead just run
-build_autotest.sh directly (which it calls). This emerges the autotest
-cross-compiled binaries. You can also specify precisely which test you want to
-rebuild to avoid having to build everything (and wait for it all to finish):
-
-**```none
-inside# ./build_autotest.sh --board=${BOARD} --build=storage_Fio,system_SAT
-```**
-
-**The resulting binaries will be placed in your chroot under
-`${CHROOT}/build/${BOARD}/usr/local/autotest`. They are not installed into an
-image at this time. Instead, autotest will copy them over when you run
-run_remote_tests.sh.**
-
-## **What's the fast way to see if a test now works with tip of tree?**
-
-The best way is to prepare a CL and test it using
-[trybots](/chromium-os/build/local-trybot-documentation).
-
-## Writing Autotests
-
-### Where do autotests live?
-
-Most tests are checked in under third_party/autotest/files/ (autotest.git
-chromium-os project). Some may be scattered around other locations. See [the
-autotest
-docs](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/user-doc.md#Q1_What-autotest-ebuilds-are-out-there)
-to find out the complete list.
-
-**`Test cases are not upstreamed to the general autotest repository as most are
-Chromium OS specific. They are checked out as part of the regular sync command
-you used from the Chromium OS repository.`**
-
-### A word about imports
-
-Autotest has an interesting way of imports due to it not being installed
-properly in PYTHONPATH. This is not an issue on Autotest trunk but Chromium OS
-has not yet remerged all the work there.
-
-When dealing with Autotest internal modules you will need to import/create a
-*common.py* file that can relatively reference the root directory of Autotest.
-You will find these spread throughout the code base and below is a concrete
-example.
-
-If you are working on code under **autotest/files/client/common_lib** and you
-wanted to imported something from server you would need to *import a common.py*
-that looks similar to the following:
-
-```none
-import os, sysdirname = os.path.dirname(sys.modules[__name__].__file__)client_dir = os.path.abspath(os.path.join(dirname, ".."))sys.path.insert(0, client_dir)import setup_modulessys.path.pop(0)setup_modules.setup(base_path=client_dir, root_module_name="autotest_lib.client")
-```
-
-\*Notice the relative path that is fed in to the client_dir variable.
-
-Once this is in the directory where you want to use the Autotest
-
-```none
-#!/usr/bin/pythonimport os, sys
-import commonfrom autotest_lib.server import frontend
-frontend.. etc etc
-```
-
-**\*\*Note when you are writing a test the framework automatically makes
-autotest_lib available for you. There is no need to place a copy of common.py in
-your test directory.
-
-### Writing a simple test
-
-**`Autotest tests are checked into several locations under third_party/autotest.
-`**
-
-**`There are two flavors of tests: client and server. All tests are managed by
-an autotest server machine that is typically the machine where run_remote_tests
-is invoked. Client tests execute entirely on the Chromium OS device. Server
-tests execute on both server and client or only the server. Client tests are
-usually the simplest to write and run. Server tests are needed, for example, if
-a test needs to reboot the device or interact with external devices (e.g. to cut
-off power to the Chromium OS device).`**
-
-**`Tests are located in 4 locations in the `**
-
-**``**``**`third_party/autotest/files/ `**``**``**
-
-**`` `tree:`**``**
-
- **``**`client/site_tests - These are where most tests live. These are client
- tests that are Chromium OS specific.`**``**
-
- **``**`client/tests - These are client tests that are general Linux tests
- (not Chromium OS specific).`**``**
-
- **``**`server/site_tests - These are server tests that are Chromium OS
- specific.`**``**
-
- **``**`server/tests - These are server tests that are general Linux tests
- (not Chromium OS specific).`**``**
-
-****Decide if your test is a client or server test and choose the appropriate
-directory from the above. In the sections below we refer to this directory as
-${TEST_ROOT} below.****
-
-Next decide which area your test falls within based on the tracker
-(<http://code.google.com/p/chromium-os/issues/list>). It should be something
-like "desktopui", "platform", or "network" for instance. This name is used to
-create the test name; e.g. "network_UnplugCable". Create a directory for your
-test at $(TEST_ROOT)/$(LOWERCASE_AREA)_$(TEST_NAME).
-
-Try to find an example test that does something similar and copy it. You will
-create at least 2 files:
-
-${TEST_ROOT}/${LOWERCASE_AREA}_${TEST_NAME}/control
-
-${TEST_ROOT}/${LOWERCASE_AREA}_${TEST_NAME}/${LOWERCASE_AREA}_${TEST_NAME}.py
-
-**``********``********`******Your control file runs the test and sets up default parameters. The .py file is the actual implementation of the test.****** `********``********``**
-
-**``********``********``********``****`Inside the control the TEST_CLASS
-variable should be set to ${LOWERCASE_AREA}. The naming convention simply exists
-to make it easier to find other similar tests and measure the coverage in
-different areas of Chromium OS. `****``********``********``********``**
-
-**``********``********``********``****`You may also want to add this test to one
-or more existing test suites to have it run
-automatically.`****``********``********``********``**
-
-After this, you should modify the autotest-tests-9999.ebuild under
-src/third_party/chromiumos-overlay/chromeos-base/autotest-tests and add your
-test to IUSE_TESTS or it won't be picked up by autotest when you ask it to build
-specific tests.
-
-For more information on writing your test, see the [user
-docs](http://www.chromium.org/chromium-os/testing/autotest-user-doc).
-
-### Adding binaries for your tests to call as part of the test
-
-In order to cross-compile, your test's compilation step should be implemented
-inside the `setup() method of your python code.` A couple of simple examples:
-
-* Sources inside the autotest repo as part of the test: gl_Bench
-* Sources checked in as a tarball from upstream: hardware_SAT
-* Sources checked in other Chromium OS source repo:
- firmware_VbootCrypto, desktopui_DoLogin
-
-*It is your responsibility to make sure the test will build for all supported
-platforms as it will cause a build break if it does not.*
-
-The setup method of all python scripts are built as part of build_autotest.sh
-(which is called when you build_packages --withautotest). This script calls all
-the setup functions of every python test and runs them. These setup steps are
-compiled on the host for execution on the target. The cross-compiler flags are
-already set so make sure if you have your own Makefile to take in the CC,
-CFLAGS, etc from the environment rather than hardcode them.
-
-*Note that if you have a* `*setup()* `*method, it should create a* `*src*`
-*directory, even if empty, to avoid running the setup method on the target
-device.*
-
-### Writing tests that require that a user is logged in
-
-If you write a test that requires a user is logged in, have your test subclass
-site_ui_test.UITest. Any test that is a subclass of this class will login with
-the default test account as part
-
-of test initialization and logout as part of test cleanup.
-
-### How do I do printf-style debugging in tests?
-
-****Use logging.info() to generate log messages. If you are writing a
-client-side test, the output unfortunately will not be shown while you are
-running autoserv (either directly or indirectly by using run_remote_test.sh). If
-you want to print out numeric data that would be generally useful for developers
-to track over time, consider instead making this a performance test.****
-
-### **How do I write a performance test?**
-
-A performance test is like any other test except it also logs one or more
-*performance keyvals*. A performance keyval is just an identifier and a floating
-point number that is written to a keyvals file on the machine where
-run_remote_tests is invoked. The identifier should be of the form
-${UNITS}_${DESCRIPTION}. For a simple example, refer to hardware_DiskSize and
-how it uses self.write_perf_keyval().
-
-### How do I write a hardware qualification test?
-
-Hardware qualification tests are like all other tests. The only difference is
-that they are referenced in one of the HWQual/config.\* files. If they require
-no manual setup or steps, they should be added to HWQual/config.auto. Otherwise,
-a new config file should be created and instructions on the manual steps should
-be added to suite_HWQual/README.txt.
-
-Hardware qualification tests also usually involve a benchmark and a minimum
-requirement for that benchmark. The nicest way to do this is to make your test
-record performance metrics with write_perf_keyval() and then add a constraints
-list in the HWQual control file that sets the minimum values. See
-suite_HWQual/control.auto constraints parameters for examples.
-
-### How do I write a manufacturing test?
-
-See how to write a hardware qualification test. A manufacturing test should be
-written similarly, however there is not currently (3/3/2010) a suite for
-manufacturing tests.
-
-### How do I write a test that interacts with the UI?
-
-This varies widely depending on which UI you would like to interact with.
-
-If you would like to temporarily shut down X:
-
-```none
-from autotest_lib.client.cros import cros_ui
-cros_ui.stop()
-```
-
-You can then start it back up by doing:
-
-```none
-from autotest_lib.client.cros import cros_ui
-cros_ui.start()
-```
-
-If you want to control chrome, use PyAuto. See [PyAuto on
-ChromiumOS](/system/errors/NodeNotFound) page for more details.
-desktopui_UrlFetch is a sample autotest test that uses pyauto to control chrome.
-
-**Note:** Pyauto is getting deprecated and being replace with Telemetry. Please
-see below for how to run a Telemetry Test/Benchmark in autotest.
-
-### How do I write a test that uses Telemetry?
-
-[Please refer to Wrapping a Telemetry test in
-Autotest](/chromium-os/testing/autotest-design-patterns#TOC-Wrapping-a-Telemetry-test-in-Autotest)
-
-### How do I bundle a bunch of tests into a suite that can be scheduled and run as a group?
-
-See [Test Suites](/chromium-os/testing/test-suites)
-
-### How do I write a test that requires some human interaction?
-
-We call these semi-automated tests. If you want to write a test that pops up a
-Chrome window, ask the test engineer some questions or to interact with some web
-browser functionality, and verify the result, refer to the
-desktopui_ChromeSemiAuto test.
-
-### How do I create a test that requires running existing Linux utilities that are not currently installed?
-
-If your test is a server-side test, then you need to add the package to
-utils/external_packages.py in autotest to get the package installed on the
-autotest servers. If you have unittests that import the package also, then you
-need to additionally add it to virtual/target-chromium-os-sdk so that it's in
-the chroot so that it will be available for your unittests on builders.
-
-If your test is a client-side test, your path changes based on if the
-library/utility would be useful outside the context of your test. If yes, then
-add it to virtual/target-chromium-os-test to get it included on the test image.
-If no it's better to create a deps directory for the tool which builds it and
-installs it. A simple example is hardware_SsdDetection which installs the hdparm
-utility. ***It is your responsibility to make sure the test will build for all
-supported platforms as it will cause a build break if it does not.***
-
-### How do I create a test that requires compiling code?
-
-In order to cross-compile, your test's compilation step should be implemented
-inside the `setup() method of your python code.` A couple of simple examples:
-
-* Sources inside the autotest repo as part of the test: gl_Bench
-* Sources checked in as a tarball from upstream: system_SAT
-* Sources checked in other Chromium OS source repo:
- firmware_VbootCrypto, system_AutoLogin
-
-*It is your responsibility to make sure the test will build for all supported
-platforms as it will cause a build break if it does not.*
-
-Note that if you have a `setup() `method, it should create a `src` directory,
-even if empty, to avoid running the setup method on the target device.
-
-Here's an example. This is the content of platform_NullTest.py:
-
-```none
-#!/usr/bin/python
-# Copyright 2018 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-from autotest_lib.client.bin import test, utils
-class platform_NullTest(test.test):
-    """
-    Test autotest.
-    """
-    version = 1
-    executable = 'nulltest'
-    def setup(self):
-        os.chdir(self.srcdir)
-        utils.make(self.executable)
-    def run_once(self):
-        utils.system(self.srcdir + "/" + self.executable + " autotesting",
-                     timeout=60)
-```
-
-After creating this file (and control, src/Makefile, and src/nulltest.c), add a
-line to the autotest-tests ebuild
-(chromiumos-overlay/chromeos-base/autotest-tests/autotest-tests-9999.ebuild).
-Make sure that autotest-tests is in your cros_workon list, then run
-TESTS=platform_NullTest emerge-&lt;board&gt; autotest-tests. This should compile
-your C program. After this, you may run run_remote_tests --use_emerged. Don't
-use gmerge for autotest or autotest-tests.
-
-### Why do I get the error "make: command not found" or "patch: command not found"?
-
-These messages come up when autotest tries to run 'make' or 'patch' on the
-client. They are not supposed to run there. Test code is only patched and
-compiled on the host as describe
-[above](http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-How-do-I-create-a-test-that-requires-compiling-code-).
-
-Common mistakes are:
-
-* failed to first build with 'TESTS=newtest emerge-&lt;board&gt;
- autotest-tests'.
-* failed to run the run_remote_tests.sh script with --use_emerged.
-
-### Why do I get the message "Not building any tests, because the requested list is empty" when I use "TESTS=$my_test"?
-
-Recently (relative to the creation of most of these notes) autotests-tests was
-split into several other packages in
-chromiumos-overlay/chromeos-base/autotest-\*. If $my_test was moved out of
-autotest-tests into autotest-chrome, for example, you have to cros_workon and
-emerge autotest-chrome:
-
-```none
-cros_workon start --board <board> autotest-chrome
-TESTS=$my_test emerge-<board> autotest-chrome
-```
-
-In general, you can grep for "tests_${my_tests}" in
-chromiumos-overlay/chromeos-base/autotest-\*/\*9999.ebuild to find the package
-with your test.
-
-### How do I use deps
-
-The deps feature is used to install packages that are required by tests.
-Sometimes these packages must be compiled from source and installed on the test
-machine. Rather than include this installation procedure in the test itself, we
-can create a 'dep' which does this for us. Then the test can specify that it
-needs this dep to work. Autotest will make sure that the dependency is built and
-copied to the target.
-First take a look at an example: hardware_SsdDetection. You will notice that it
-does this in the setup method:
-
-```none
-self.job.setup_dep(['hdparm'])
-```
-
-This ends up running the python file `client/deps/hdparm.py`. This will look
-after building the hdparm utility and making sure it is available for copying to
-the target. The mechanics of this are explained in the next topic, but imagine
-using `./configure` and installing with the `client/deps/hdparm` directory as
-the install root.
-Within the run_once() method in the test you will see this:
-
-```none
-        dep = 'hdparm'
-        dep_dir = os.path.join(self.autodir, 'deps', dep)
-        self.job.install_pkg(dep, 'dep', dep_dir)
-```
-
-This is the code which actually installs the hdparm utility on the target. It
-will be made available in the `/usr/local/autotest/deps/hdparm` directory in
-this case. When it comes time to run it, you will see this code:
-
-```none
-        path = self.autodir + '/deps/hdparm/sbin/'
-        hdparm = utils.run(path + 'hdparm -I %s' % device)
-```
-
-This is pretty simple - since the hdparm binary was installed to
-`client/deps/hdparm/sbin/hdparm` we can run it there on the target.
-
-### How can I create my own dep?
-
-If you have your own tool and want to create a dep for it so that various tests
-can use it, this section is for you.
-First create a subdirectory within deps. Let's call your dep 'harry'. So you
-will create `client/deps/harry` and put `harry.py` inside there.
-In harry.py you will want something like the following:
-
-```none
-#!/usr/bin/python
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-from autotest_lib.client.bin import utils
-version = 1
-def setup(tarball, topdir):
-    srcdir = os.path.join(topdir, 'src')
-    utils.extract_tarball_to_dir(tarball, srcdir)
-    os.chdir(srcdir)
-    utils.system('patch -p1 < ../fix-wibble.patch')
-    utils.configure()
-    utils.make()
-    utils.make('install')
-# We got the src from http://harry.net/harry-0.24.tar.bz2
-pwd = os.getcwd()
-tarball = os.path.join(pwd, 'harry-0.24.tar.bz2')
-utils.update_version(pwd + '/src', False, version, setup, tarball, pwd)
-```
-
-The URL mentioned in the file should be the location where you found your
-tarball. Download this and put it in the deps directory as well. You will be
-checking this into the repository as a binary file.
-The `utils.update_version()` call ensures that the correct version of harry is
-installed. It will call your setup() method to build and install it. If you
-specify False for the preserve_srcdir parameter then it will always erase the
-src directory, and call your setup() method. But if you specify True for
-preserve_srcdir, then update_version() will check the installed version of the
-src directory, and if it hasn't changed it will not bother installing it again.
-You will also see that pwd is set to the current directory. This is
-`client/deps/harry` in this case because autotest changes this directory before
-importing your python module. We unpack into a src subdirectory within that to
-keep things clean.
-When your setup() method is called it should unpack the tarball, configure and
-build the source, then install the resulting binaries under the same
-`client/deps/harry` directory. You can see the steps in the example above - it
-mirrors a standard GNU UNIX build process. If you need to pass parameters to
-configure or make you can do that also. Any parameters after 'setup' in the
-update_version() call are passed to your setup method.
-After calling utils.update_version() from within harry.py we will have binaries
-installed (say in `client/deps/harry/sbin/harry`) as well as the src directory
-still there (`client/deps/harry/src`).
-Finally for reasons that we won't go into you should create the file common.py
-in your directory, like this:
-
-```none
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os, sys
-dirname = os.path.dirname(sys.modules[__name__].__file__)
-client_dir = os.path.abspath(os.path.join(dirname, "../../"))
-sys.path.insert(0, client_dir)
-import setup_modules
-sys.path.pop(0)
-setup_modules.setup(base_path=client_dir,
-                    root_module_name="autotest_lib.client")
-```
-
-and you need a file called 'control' too:
-
-```none
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-job.setup_dep(['fio'])
-```
-
-### Troubleshooting your dep
-
-If you have created a new dep but run_remote_tests.sh doesn't work and you get
-an error like:
-
-```none
-PackageInstallError: Installation of harry(type:dep) failed : dep-harry.tar.bz2 could not be fetched from any of the repos ['autoserv://']
-```
-
-then this section is for you. It explains a little more of the detail of how the
-dependencies are transfered from server (your workstation) to the client
-(target).
-When you call self.job.install_pkg(dep, 'dep', self.dep_dir), it causes the
-autotest client to install the dependency. In this case the client will end up
-using the autoserv fetcher. Within client/bin/harness_autoserve.py you will see
-the class AutoservFetcher. It has a method fetch_pkg_file() which calls
-harness_autoserv.fetch_package() to fetch the package. This issues a
-AUTOTEST_FETCH_PACKAGE command over the logging connection to autoserv,
-requesting the package. Yes the logging connection is re-used to support a kind
-of ftp server for the client!
-The server end of autoserv sits in server/autotest.py. Each line of log output
-coming from the client is examined in client_logger._process_line(). When it
-sees a line starting with AUTOTEST_FETCH_PACKAGE it calls _send_tarball() which
-tries to find a matching directory to package up and send. The pkg_name is in a
-standard format: `pkgtype-name.tar.bz2` and in this case pkgtype is 'dep'. It
-will package up the client/deps/&lt;name&gt; directory into a tarball and send
-it to the client. When this is working you will see something like this message
-when you run the test:
-
-```none
-12:08:06 INFO | Bundling /home/sjg/trunk/src/third_party/autotest/files/client/deps/harry into dep-harry.tar.bz2
-```
-
-When it is not working, make sure the directory exists on the server side in the
-right place.
-
-### What if my dep is built by another ebuild?
-
-The above method is fine for external packages, but it is not uncommon to want
-to use a byproduct of another ebuild within a test. A good example of this is
-the Chromium functional tests, which require PyAuto, a test automation framework
-built by Chromium. In the
-`src/third_party/chromiumos-overlay/chromeos-base/chromeos-chrome` ebuild you
-will see:
-
-```none
-    if use build_tests; then
-        install_chrome_test_resources "${WORKDIR}/test_src"
-        # NOTE: Since chrome is built inside distfiles, we have to get
-        # rid of the previous instance first.
-        rm -rf "${WORKDIR}/${P}/${AUTOTEST_DEPS}/chrome_test/test_src"
-        mv "${WORKDIR}/test_src" "${WORKDIR}/${P}/${AUTOTEST_DEPS}/chrome_test/"
-        # HACK: It would make more sense to call autotest_src_prepare in
-        # src_prepare, but we need to call install_chrome_test_resources first.
-        autotest_src_prepare
-```
-
-You can see that this is creating a deps directory within the build root of
-chrome, called chrome_test. From the previous section we know that a
-chrome_test.py file must be installed in this deps directory for this to work.
-This actually comes from the chromium tree
-(`chrome/src/chrome/test/chromeos/autotest/files/client/deps/chrome_test/chrome_test.py`
-since you asked). This file is very simple:
-
-```none
-#!/usr/bin/python
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import common, commands, logging, os
-from autotest_lib.client.bin import utils
-version = 1
-def setup(top_dir):
-    return
-pwd = os.getcwd()
-utils.update_version(pwd + '/src', False, version, setup, None)
-```
-
-In this case the directory already contains pre-built binaries, since they were
-built and copied in by the ebuild above. The setup() method will always be
-called, but has nothing to do.
-
-### What if I want to make use of a binary tool?
-
-See the instructions for including and building the source above, or use the
-ebuild method if needed. You cannot simply include a pre-built binary (e.g. by
-checking it into the repository) since this will not work on any platform. All
-software must be built by the official toolchain for that platform and the only
-reasonable way to be sure of that is to include the source and build it.
-
-### How do I write a test that needs access to large data files, like media files?
-
-If the data files are posted somewhere else, they may fetched by the test when
-it starts. If you add the fetching to the setup() method, this will cause the
-fetch to occur during build_autotest and cause the fetched results to be put in
-every packaged build of autotest. This can cause a large package and might also
-imply that the media/data may be repackaged. The same issues apply if you commit
-the large data files. Instead it's preferable to fetch the data from the client
-machine.
-
-Beware of licensing restrictions on sample data used by a test.
-
-### How do I write a test that reboots the device?
-
-See server/site_tests/platform_BootPerfServer, which reboots the device and runs
-the client test platform_BootPerf which logs performance data about boot time.
-Note that your test must be a server test.
-
-### How do I write a test that measures power consumption?
-
-See power_IdleServer. This test cuts power and logs performance data in the form
-of battery life remaining information.
-
-### What language can I write my test in?
-
-The most straightforward language to use is Python. Every autotest needs at
-least some Python code in the control file, and recording performance results,
-printf-style debugging, and passing up informative error messages all require
-Python code. You can also write C/C++ cross-compiled code. You can even write
-shell scripts, but do note that you will cause yourself extra pain either when
-developing your test and/or when diagnosing problems if you choose a language
-other than Python.
-
-**What if my test requires a build artifact?**
-
-**[Internal-only documentation for build artifact downloading](https://docs.google.com/a/google.com/document/d/1rcfuMIPaaCOUp_41ahNdVM9K88iMYtCSdbiKCHn346U/edit?usp=sharing)** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/setup-autotest-server/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/setup-autotest-server/index.md
deleted file mode 100644
index 6e575b4e65e..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-developer-faq/setup-autotest-server/index.md
+++ /dev/null
@@ -1,235 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/autotest-developer-faq
- - Autotest Developer FAQ
-page_name: setup-autotest-server
-title: Setup Autotest Server
----
-
-This document will go over how to set up a local Autotest server for developing
-purposes.
-
-**Note that there is a script which will automate this process:
-src/third_party/autotest/files/site_utils/setup_dev_autotest.sh**
-
-You need to manually edit the generated shadow_config.ini and fill in your dev
-server hostname.
-
-You need to set up SSH for the apache user (www-data) in its home directory.
-Follow the directions for ssh key setup, using the directory /var/www/.ssh and
-make sure everything is owned by www-data with user only permissions:
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md#Set-up-SSH-connection-between-chroot-and-DUT>
-
-If you ran the setup script please proceed to the Autotest Server Usage Guide:
-<https://www.chromium.org/chromium-os/testing/autotest-developer-faq/autotest-server-usage>
-
-You will want to re-run this script or the below steps for changes that are not
-easily testable in the production server. Generally this will not be needed for
-test development. This is if you are changing RPCs, The Scheduler, Any of the
-frontend GUI or common library changes.
-
-Reference: <https://github.com/autotest/autotest/wiki/AutotestServerInstall>
-
-**Note that the following may be out of date.**
-
-# Debian/Ubuntu
-
-These instructions will only work with a Debian based installation. Most likely
-you can use the package names to set up Autotest for Fedora/Redhat.
-
-## Base deb packages to install
-
-After installing all of the packages below you will end up with a server running
-MySQL, Apache, and have the supporting libraries need to bootstrap the Autotest
-installation.
-
-\*\*Be sure to remember the password you set up for the root user in Mysql (If
-any)
-
-```none
- sudo apt-get install mysql-server mysql-common libapache2-mod-wsgi python-mysqldb gnuplot apache2-mpm-prefork unzip python-imaging libpng12-dev libfreetype6-dev sqlite3 python-pysqlite2 git-core pbzip2 openjdk-6-jre openjdk-6-jdk python-crypto  python-dev subversion build-essential python-setuptools
-```
-
-***\*Note you will be prompted to enter a 'root' user password for MySQL this is
-reserved for administering the MySQL instance itself. You should not use this
-for the next section but do not forget it either.***
-
-## Setup MySQL DBs
-
-Autotest use MySQL for all of its result storing and queuing jobs for the
-scheduler to interface with.
-
-Setup the Autotest MYSQL user:
-
-<pre><code>
-mysql -u root -p
-create database chromeos_autotest_db;
-grant all privileges on chromeos_autotest_db.* TO 'chromeosqa-admin'@'localhost' identified by '<b>some_password</b>'; 
-FLUSH PRIVILEGES;
-</code></pre>
-
-***\*some_password can be whatever you want. Make note of it as you will need it
-later on.***
-
-## Setup Autotest Directory on the server
-
-NOTE: Do not try to make the autotest server run directly from your home
-directory and DO follow the "/usr/local/autotest" bind mount or checkout.
-Changing all the paths in the source and making it work at the same time seems
-downright impossible.
-
-\*Preferred way, if you have a Chromium OS checkout you should already have the
-Autotest soure.
-
-```none
-CHECKOUT=/your/chromiumos/checkout
-sudo mkdir /usr/local/autotest
-sudo mount --bind $CHECKOUT/src/third_party/autotest/files /usr/local/autotest
-```
-
-If you don't have a Chromium OS checkout and just want the Autotest bits:
-
-```none
-mkdir /usr/local/autotest
-git clone https://chromium.googlesource.com/chromiumos/third_party/autotest.git /usr/local/autotest
-```
-
-Edit the *global_config.ini,* or better yet, create a shadow configuration
-(place it in *shadow_config.ini)* to update the following areas:
-
-**\[AUTOTEST_WEB\]**
-
-* host, set it to **localhost**
-* user, **chromeosqa-admin**, as set above
-* password, set it to the password you set, in this doc that would be
- ***some_password***
-* readonly_host, set it to **localhost**
-* readonly_user, set it to **chromeosqa-admin**
-* readonly_password, set this to the password you set, in this doc
- that would be **some_password**
-
-**\[SERVER\]**
-
-* hostname, set it to localhost
-
-**\[SCHEDULER\]**
-
-* drones, set it to localhost
-
-#### Build external packages for use in Autotest
-
-# Run this as the user you want to run the Autotest server as.
-
-```none
-/usr/local/autotest/utils/build_externals.py
-/usr/local/autotest/utils/compile_gwt_clients.py -a
-```
-
-#### Setup Initial db
-
-```none
-/usr/local/autotest/database/migrate.py sync
-/usr/local/autotest/frontend/manage.py syncdb
-# You may have to run this twice. 
-/usr/local/autotest/frontend/manage.py syncdb
-```
-
-## Setup Apache
-
-If you ran the above package install command you should already have a running
-apache server. All we need to do is point that configuration at the Autotest
-configuration.
-
-```none
-sudo ln -s /usr/local/autotest/apache/apache-conf /etc/apache2/sites-available/autotest-server.conf
-# disable currently active default
-sudo a2dissite 000-default
-# enable autotest server
-sudo a2ensite autotest-server
-# Enable rewrite module
-sudo a2enmod rewrite
-# Enable version for IfVersion code (may not be needed anymore)
-sudo a2enmod version
-# Disable mod-python
-sudo a2dismod python
-# Enable mod-wsgi
-sudo a2enmod wsgi
-# Enable mod_headers
-sudo a2enmod headers
-# Setup permissions so that Apache web user can read the proper files. 
-chmod -R o+r /usr/local/autotest
-find /usr/local/autotest/ -type d | xargs chmod o+x
-chmod o+x /usr/local/autotest/tko/*.cgi
-# restart server
-sudo /etc/init.d/apache2 restart
-```
-
-If you try http://localhost, and Autotest afe page fails to load, you might want
-to check the apache's port configuration file (/etc/apache2/ports.conf) to make
-sure the file has port 80 listed:
-
-```none
-NameVirtualHost *:80
-Listen 80
-```
-
-Otherwise, apache will not be listening on port 80.
-
-If you get 503 errors and see the following message in
-/var/log/apache2/error.log:
-
-(2)No such file or directory: mod_wsgi: Couldn't bind unix domain socket
-'/etc/apache2/run/wsgi.30365.0.1.sock'.
-
-Just create the /etc/apache2/run directory.
-
-## Viewing test logs from jobs ran via the scheduler
-
-To view logs of a currently running job from the AFE click on the "Debug logs"
-link. From there you have a few different choices, you will most likely want to
-look at all the logs which are all in autoserv.DEBUG. Although this file does
-not automatically update when viewed in your browser if you refresh your view
-you will see the progress of the job.
-
-All logs from jobs run via the scheduler are stored under:
-/usr/local/autotest/results.
-
-If you get 403 Forbidden when viewing the results, or if the AFE starts giving
-Error 500 and strugging to import code, then you either need to re-run
-
-```none
-# Setup permissions so that Apache web user can read the proper files. 
-chmod -R o+r /usr/local/autotest
-find /usr/local/autotest/ -type d | xargs chmod o+x
-chmod o+x /usr/local/autotest/tko/*.cgi
-```
-
-Or (recommended) edit /etc/apache2/envvars so that it reads
-
-```none
-export APACHE_RUN_USER=<user>
-export APACHE_RUN_GROUP=<group>
-```
-
-where &lt;user&gt; is what is returned by running |id -un| and &lt;group&gt; is
-the result of running |id -gn|
-
-## Import Tests
-
-Import tests
-
-```none
-/usr/local/autotest/utils/test_importer.py
-```
-
-**\*\*\*This is the end of what is done for you by
-setup_dev_autotest.sh.\*\*\***
-
-## Using the Autotest Server
-
-Now that everything is setup, please proceed to the Autotest Server Usage Guide
-<https://www.chromium.org/chromium-os/testing/autotest-developer-faq/autotest-server-usage>
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-graphics-documentation/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-graphics-documentation/index.md
deleted file mode 100644
index 5cdce2c7746..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-graphics-documentation/index.md
+++ /dev/null
@@ -1,701 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: autotest-graphics-documentation
-title: Autotest Graphics Documentation
----
-
-[TOC]
-
-Keywords: This testing document describes how to run GLBench, TearTest, Piglit,
-WebGLConformance and other tests and benchmarks on ChromeOS and ChromiumOS
-devices.
-
-## Source code location
-
-Python sources are under src/third_party/autotest/files/client/site_tests
-
-<table>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_GLAPICheck;h=a6adea1387bf225ae8fff9c75c6111c78ebc9152;hb=HEAD">graphics_GLAPICheck</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_GLAPICheck;h=a6adea1387bf225ae8fff9c75c6111c78ebc9152;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/site_tests/graphics_GLAPICheck;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_GLBench;h=87b8a78d5908803418369ef74774b8e609247f44;hb=HEAD">graphics_GLBench</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_GLBench;h=87b8a78d5908803418369ef74774b8e609247f44;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/site_tests/graphics_GLBench;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_O3DSelenium;h=110a6d915564be1c9c85d73f32ab5294b5e361f5;hb=HEAD">graphics_O3DSelenium</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_O3DSelenium;h=110a6d915564be1c9c85d73f32ab5294b5e361f5;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/site_tests/graphics_O3DSelenium;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_SanAngeles;h=3164f5fa2b5688cdafe534493ca6e0f86807d3fe;hb=HEAD">graphics_SanAngeles</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_SanAngeles;h=3164f5fa2b5688cdafe534493ca6e0f86807d3fe;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/site_tests/graphics_SanAngeles;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_TearTest;h=2d7e89034a73df1d66134a7ab9dc1ca0761f4f0b;hb=HEAD">graphics_TearTest</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_TearTest;h=2d7e89034a73df1d66134a7ab9dc1ca0761f4f0b;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/site_tests/graphics_TearTest;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_WebGLConformance;h=ad84141374e0338c069895e2c195eaaf7e9f662d;hb=HEAD">graphics_WebGLConformance</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_WebGLConformance;h=ad84141374e0338c069895e2c195eaaf7e9f662d;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/site_tests/graphics_WebGLConformance;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_WindowManagerGraphicsCapture;h=78e46205be3d01e44b4c8c8ab9adce5118632b9b;hb=HEAD">graphics_WindowManagerGraphicsCapture</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/site_tests/graphics_WindowManagerGraphicsCapture;h=78e46205be3d01e44b4c8c8ab9adce5118632b9b;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/site_tests/graphics_WindowManagerGraphicsCapture;hb=HEAD">history</a></td>
-</tr>
-</table>
-
-Binary dependencies are under src/third_party/autotest/files/client/deps
-
-<table>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/deps/glbench-images;h=635233de155100312539602b4accd574c4efdfb4;hb=HEAD">glbench-images</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/deps/glbench-images;h=635233de155100312539602b4accd574c4efdfb4;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/deps/glbench-images;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/deps/glbench;h=47be7d689cf1aaa866cc02bf2fd392046d8ff8c5;hb=HEAD">glbench</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/deps/glbench;h=47be7d689cf1aaa866cc02bf2fd392046d8ff8c5;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/deps/glbench;hb=HEAD">history</a></td>
-</tr>
-<tr>
-<td>drwxr-xr-x</td>
-<td>-</td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/deps/piglit;h=4e06825e78483a5e7c525bf384680c3d087e888a;hb=HEAD">piglit</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=autotest.git;a=tree;f=client/deps/piglit;h=4e06825e78483a5e7c525bf384680c3d087e888a;hb=HEAD">tree</a> | <a href="http://git.chromium.org/gitweb/?p=autotest.git;a=history;f=client/deps/piglit;hb=HEAD">history</a></td>
-</tr>
-</table>
-
-## A note on building binaries
-
-The ebuild system knows if a target knows either OpenGL or OpenGL ES, or even
-both. If only pre-compiled binaries are used there should not be much of a
-problem with running tests. When editing tests after using the cros_workon
-script the default system behavior is to recompile the binaries once more
-without invoking the ebuild system. Unfortunately this means USE="opengles"
-flags are not honored. Instead the easy way is to specify the proper switch via
-am environment variable **GRAPHICS_BACKEND=OPENGLES./run_remote_tests.sh** that
-gets directly passed to the Makefile. This is somewhat hacky. To use the ebuild
-system to generate the binaries one has to do a painfully slow **USE=opengles
-emerge-tegra2_seaboard chromeos-base/autotest** followed by
-**./run_remote_tests.sh --use_emerged \[...\]**. Don't forget the --use_emerged
-flag as it is not default.
-
-## Autotest graphics_GLAPICheck
-
-- two different binaries can be made
-
--- GRAPHICS_BACKEND=OPENGL or OPENGLES
-
-- runs 25 seconds
-
-- sample results
-
-- for OPENGL creates output below and parses some samples in python to see if
-they are there and if SUCCEED: run to the end is there
-
-GL_VERSION = 3.2.0 NVIDIA 195.36.24
-
-GL_EXTENSIONS = GL_ARB_color_buffer_float GL_ARB_compatibility
-GL_ARB_copy_buffer GL_ARB_depth_buffer_float GL_ARB_depth_clamp
-GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_elements_base_vertex
-\[...\] NV-GLX NV-CONTROL Generic
-
-Event Extension SHAPE MIT-SHM XInputExtension XTEST BIG-REQUESTS SYNC XKEYBOARD
-XC-MISC SECURITY XINERAMA XFIXES RENDER RANDR XINERAMA Composite DAMAGE
-
-SUCCEED: run to the end
-
-### Sample output
-
-(cros-chroot) ihf@ql ~/trunk/src/scripts $ **GRAPHICS_BACKEND=OPENGL
-./run_remote_tests.sh --board=${BOARD} --remote=172.22.71.194
-graphics_GLAPICheck --use_emerged**
-
-Initiating first contact with remote host
-
-\[...\]
-
-INFO : Test results:
-
----------------------------------------------
-
-graphics_GLAPICheck PASS
-
-graphics_GLAPICheck/graphics_GLAPICheck PASS
-
----------------------------------------------
-
-Total PASS: 2/2 (100%)
-
-No crashes detected during testing.
-
-Elapsed time: 0m25s
-
-## Autotest graphics_GLBench
-
-- draws green/ref/purple/fractal rectangles
-
-- runs about 5 minutes
-
-This benchmark executes glbench, a graphics benchmark designed to time how long
-
-various graphic intensive activities take, which includes measuring:
-
-- fill rate
-
-- blended
-
-- opaque
-
--Z reject rate
-
--triangle rate
-
-- no cull
-
-- half cull (half triangles backface culled)
-
-- full cull (mix of back face and degenerates)
-
-- blend rate
-
-- texture fetch
-
-- nearest
-
-- bilinear
-
-- trilinear
-
-- compute
-
-- vertex shader
-
-- pixel shader
-
-- \*fragement shader to test ddx and ddy
-
-- attribute fetch
-
-- color depth stencil test
-
-- \*state change
-
-- texture upload
-
-- read back
-
-- does MD5 checksums of some but not all images
-
--- deps/glbench/src/checksums
-
--- can be re-generated with -save option
-
-### Sample output
-
-(cros-chroot) ihf@ql ~/trunk/src/scripts $ **GRAPHICS_BACKEND=OPENGLES
-./run_remote_tests.sh --board=${BOARD} --remote=172.22.70.27 graphics_GLBench
---use_emerged**
-
-\[...\]
-
-INFO : Test results:
-
-----------------------------------------------------
-
-graphics_GLBench PASS
-
-graphics_GLBench/graphics_GLBench PASS
-
-1280x768_fps_compositing 11.18
-
-1280x768_fps_no_fill_compositing 41.96
-
-mpixels_sec_clear_color 490.74
-
-mpixels_sec_clear_colordepth 323.88
-
-mpixels_sec_clear_colordepthstencil 281.45
-
-mpixels_sec_clear_depth 969.71
-
-mpixels_sec_clear_depthstencil 647.34
-
-mpixels_sec_fill_solid 285.1
-
-mpixels_sec_fill_solid_blended 128.55
-
-mpixels_sec_fill_solid_depth_neq 973.2
-
-mpixels_sec_fill_solid_depth_never 1189.08
-
-mpixels_sec_fill_tex_bilinear 149.56
-
-mpixels_sec_fill_tex_nearest 203.7
-
-mpixels_sec_fill_tex_trilinear_linear_01 164.63
-
-mpixels_sec_fill_tex_trilinear_linear_04 nan
-
-mpixels_sec_fill_tex_trilinear_linear_05 nan
-
-mpixels_sec_fill_tex_trilinear_nearest_05 nan
-
-mpixels_sec_pixel_read 6.72
-
-mpixels_sec_pixel_read_2 6.72
-
-mpixels_sec_pixel_read_3 6.74
-
-mpixels_sec_varyings_shader_1 270.68
-
-mpixels_sec_varyings_shader_2 144.33
-
-mpixels_sec_varyings_shader_4 73.57
-
-mpixels_sec_varyings_shader_8 24.29
-
-mpixels_sec_yuv_shader_1 nan
-
-mpixels_sec_yuv_shader_2 47.82
-
-mpixels_sec_yuv_shader_3 93.36
-
-mpixels_sec_yuv_shader_4 136.15
-
-mtexel_sec_texture_update_teximage2d_1024 149.85
-
-mtexel_sec_texture_update_teximage2d_128 80.92
-
-mtexel_sec_texture_update_teximage2d_1536 146.05
-
-mtexel_sec_texture_update_teximage2d_2048 149.47
-
-mtexel_sec_texture_update_teximage2d_256 132.51
-
-mtexel_sec_texture_update_teximage2d_32 10.29
-
-mtexel_sec_texture_update_teximage2d_512 142.05
-
-mtexel_sec_texture_update_teximage2d_768 147.56
-
-mtexel_sec_texture_update_texsubimage2d_1024 150.94
-
-mtexel_sec_texture_update_texsubimage2d_128 81.59
-
-mtexel_sec_texture_update_texsubimage2d_1536 147.2
-
-mtexel_sec_texture_update_texsubimage2d_2048 149.03
-
-mtexel_sec_texture_update_texsubimage2d_256 130.59
-
-mtexel_sec_texture_update_texsubimage2d_32 10.09
-
-mtexel_sec_texture_update_texsubimage2d_512 113.54
-
-mtexel_sec_texture_update_texsubimage2d_768 150.0
-
-mtri_sec_triangle_setup 30.34
-
-mtri_sec_triangle_setup_all_culled 49.89
-
-mtri_sec_triangle_setup_half_culled 44.91
-
-mvtx_sec_attribute_fetch_shader 149.51
-
-mvtx_sec_attribute_fetch_shader_2_attr 149.34
-
-mvtx_sec_attribute_fetch_shader_4_attr 141.36
-
-mvtx_sec_attribute_fetch_shader_8_attr 106.71
-
-us_swap_swap 19464.19
-
-----------------------------------------------------
-
-Total PASS: 2/2 (100%)
-
-No crashes detected during testing.
-
-Elapsed time: 8m58s
-
-&gt;&gt;&gt; Details stored under /tmp/run_remote_tests.purz
-
-The "nan" in this example are passed because of knownbad output images. For more
-more details and failures look at
-
-(cros-chroot) ihf@ql ~/trunk/src/scripts $ **more
-/tmp/run_remote_tests.purz/graphics_GLBench/graphics_GLBench/summary.txt**
-
-### Note on HW Qual failures
-
-Sometimes when site_tests/suite_HWQual/control.auto is run a constraint is
-violated and failure **mtri_sec_triangle_setup &gt;= 10** is thrown. This is due
-to some x86 boards doing vertex shading in the CPU. This exception is considered
-harmless until a waiver system is developed.
-
-## Autotest graphics_O3DSelenium
-
-- tries to run O3D tests inside of chrome
-
-- failed to run and is known to be broken
-
-## Autotest graphics_Piglit
-
-- tests OpenGL implementation. Does not currently work on OpenGL ES only systems
-like Tegra2
-
-- about 1000-2000 targeted subtests
-
-- usually a few hundred failures
-
-- mostly care about counts of passes/failures over time like perf test
-
-- runs about 12-18 minutes, but initial copying dep-piglit.tar.bz2 takes 5-10
-minutes that seem like a hang. Need to fix this.
-
-- generates html page with detailed results in
-
-/tmp/run_remote_tests.\*/graphics_Piglit/graphics_Piglit/cros-driver/html/index.html
-
-- can compare two test runs against each other via
-
-./piglit-summary-html.py summary/compare results/baseline.results
-results/current.results
-
-- can be build locally from piglit.tar.gz via cmake .;make
-
-- the numbers of passes does fluctuate by about 10 over time, so some
-intermittency
-
-- about 10 test binaries crash and are blocklisted to not be reported
-
-- sometimes (1 in about 2 weeks of test runs) fbo_depth_sample_compare takes
-gpu/system with it when it crashes
-
-2011-05-04T11:06:02.995237-07:00 localhost kernel: \[ 75.994363\]
-fbo-depth-sampl\[4250\]: segfault at 0 ip (null) sp 7fc7abac error 14 in
-card0\[75f97000+4000\] 2011-05-04T11:06:03.040387-07:00 localhost
-crash_reporter\[4251\]: Received crash notification for
-fbo-depth-sample-compare\[4250\] sig 11 (developer build - not testing - always
-dumping) 2011-05-04T11:06:03.234936-07:00 localhost crash_reporter\[4251\]:
-Stored minidump to
-/var/spool/crash/fbo_depth_sample_compare.20110504.110603.4250.dmp
-2011-05-04T11:06:03.235566-07:00 localhost crash_reporter\[4251\]: Leaving core
-file at /var/spool/crash/fbo_depth_sample_compare.20110504.110603.4250.core due
-to developer image 2011-05-04T11:06:17.742377-07:00 localhost kernel: \[
-90.742080\] \[drm:i915_hangcheck_elapsed\] \*ERROR\* Hangcheck timer elapsed...
-GPU hung 2011-05-04T11:06:17.742439-07:00 localhost kernel: \[ 90.742100\]
-render error detected, EIR: 0x00000000 2011-05-04T11:06:17.742471-07:00
-localhost kernel: \[ 90.742168\] \[drm:i915_do_wait_request\] \*ERROR\*
-i915_do_wait_request returns -5 (awaiting 29946 at 29941)
-2011-05-04T11:06:18.330692-07:00 localhost crash_reporter\[4328\]: Received
-crash notification for Xorg\[3498\] sig 6 (developer build - not testing -
-always dumping)
-
-### Sample output
-
-(cros-chroot) ihf@ql ~/trunk/src/scripts $ **./run_remote_tests.sh
---board=${BOARD} --remote=172.22.70.69 graphics_Piglit --use_emerged**
-
-\[...\]
-
-INFO : Test results:
-
--------------------------------------
-
-graphics_Piglit PASS
-
-graphics_Piglit/graphics_Piglit PASS
-
-count_subtests_fail 239
-
-count_subtests_pass 1040
-
-count_subtests_skip 687
-
-count_subtests_warn 14
-
--------------------------------------
-
-Total PASS: 2/2 (100%)
-
-No crashes detected during testing.
-
-Elapsed time: 13m31s
-
-&gt;&gt;&gt; Details stored under /tmp/run_remote_tests.8gjT
-
-Point browser to
-
-/tmp/run_remote_tests.\*/graphics_Piglit/graphics_Piglit/cros-driver/html/index.html
-
-## Autotest graphics_SanAngeles
-
-- draws a bunch of very coarse 3d models
-
-This test runs the San Angeles Observation GPU benchmark. This benchmark uses
-
-a minimal and portable framework to generate a small demo program. It exercises
-
-basic features of OpenGL like vertex arrays, color arrays, and lighting. It
-
-also uses objects generated using procedural algorithms.
-
-This test is a benchmark. It will fail if it fails to complete.
-
-### Sample output
-
-(cros-chroot) ihf@ql ~/trunk/src/scripts $ **GRAPHICS_BACKEND=OPENGL
-./run_remote_tests.sh --board=${BOARD} --remote=172.22.70.69 graphics_SanAngeles
---use_emerged**
-
-\[...\]
-
-INFO : Test results:
-
----------------------------------------------
-
-graphics_SanAngeles PASS
-
-graphics_SanAngeles/graphics_SanAngeles PASS
-
-frames_per_sec_rate_san_angeles 2.1
-
----------------------------------------------
-
-Total PASS: 2/2 (100%)
-
-No crashes detected during testing.
-
-Elapsed time: 2m17s
-
-&gt;&gt;&gt; Details stored under /tmp/run_remote_tests.vDwN
-
-## Autotest graphics_TearTest
-
-- copies glbench as dependency over
-
-- runs deps/glbench/teartest
-
-- This test will fail if there is tearing in the two vertical lines that are
-
-scrolling horizontally.
-
-This is a semi-automated test that displays vertical lines scrolling
-
-horizontally and asks the user if tearing was observed. Three variants are
-
-available:
-
-\* using uniform update. This tests that glSwapInterval function performs as
-
-expected.
-
-\* using full texture update. This tests that CPU-GPU interaction is properly
-
-synchronized in the driver.
-
-\* using pixmap to texture extension. This tests that pixmap to texture
-
-extension is properly synchronized.
-
-### Sample output
-
-(cros-chroot) ihf@ql ~/trunk/src/scripts $ **GRAPHICS_BACKEND=OPENGL
-./run_remote_tests.sh --board=${BOARD} --remote=172.22.70.69 graphics_TearTest
---use_emerged**
-
-\[...\] - some user interaction
-
-INFO : Test results:
-
------------------------------------------
-
-graphics_TearTest PASS
-
-graphics_TearTest/graphics_TearTest PASS
-
------------------------------------------
-
-Total PASS: 2/2 (100%)
-
-No crashes detected during testing.
-
-Elapsed time: 1m26s
-
-&gt;&gt;&gt; Details stored under /tmp/run_remote_tests.SHxS
-
-## Autotest graphics_WebGLConformance
-
-This test runs the WebGL conformance tests:
-<http://www.khronos.org/webgl/wiki/Testing/Conformance>
-
-- currently uses release version 1.0.0
-
-- opens copy of above website in chrome and executes the html page with hundreds
-of targeted tests
-
-- all suite tests must pass, but there is the ability to waive failures in the
-python script
-
-- javascript is patched to report individual results
-
-- suite is currently blocked in autotest regression runs by hangs/crashes in
-browser
-
-### Sample output
-
-Doesn't compile any code, so no GRAPHICS_BACKEND needed (but no harm in using
-it). When the browser doesn't crash/hang it should look like this.
-
-(cros-chroot) ihf@ql ~/trunk/src/scripts $ **./run_remote_tests.sh
---board=${BOARD} --remote=172.22.70.80 graphics_WebGLConformance/control**
-
-\[...\]
-
-INFO : Test results:
-
----------------------------------------------------------
-
-graphics_WebGLConformance PASS
-
-graphics_WebGLConformance/graphics_WebGLConformance PASS
-
-count_tests_fail 352
-
-count_tests_pass 5064
-
-count_tests_timeout 2
-
-waived_url_000
-conformance/tex-image-and-sub-image-2d-with-array-buffer-view.html : 192
-failures (192 waived)
-
-waived_url_001 conformance/tex-image-with-format-and-type.html : 12 failures (12
-waived)
-
-waived_url_002 conformance/texture-npot.html : 12 failures (12 waived)
-
-waived_url_003 conformance/glsl-conformance.html : 1 failures (1 waived)
-
-waived_url_004 conformance/tex-image-and-sub-image-2d-with-image.html : 8
-failures (8 waived)
-
-waived_url_005 conformance/copy-tex-image-and-sub-image-2d.html : 34 failures
-(34 waived)
-
-waived_url_006 conformance/gl-clear.html : 4 failures (4 waived)
-
-waived_url_007 conformance/more/functions/readPixelsBadArgs.html : 1 failures (1
-waived)
-
-waived_url_008 conformance/more/conformance/webGLArrays.html : 1 failures (1
-waived)
-
-waived_url_009 conformance/gl-teximage.html : 46 failures (46 waived)
-
-waived_url_010 conformance/texture-active-bind.html : 4 failures (4 waived)
-
-waived_url_011 conformance/read-pixels-test.html : 3 failures (3 waived)
-
-waived_url_012 conformance/gl-object-get-calls.html : 2 failures (2 waived)
-
-waived_url_013 conformance/point-size.html : 1 failures (1 waived)
-
-waived_url_014 conformance/texture-formats-test.html : 4 failures (4 waived)
-
-waived_url_015 conformance/texture-complete.html : 1 failures (1 waived)
-
-waived_url_016 conformance/tex-image-and-sub-image-2d-with-video.html : 8
-failures (8 waived)
-
-waived_url_017 conformance/context-lost-restored.html : 2 failures (2 waived)
-
-waived_url_018 conformance/tex-image-and-sub-image-2d-with-image-data.html : 16
-failures (16 waived)
-
----------------------------------------------------------
-
-Total PASS: 2/2 (100%)
-
-Crashes detected during testing:
-
----------------------------------------------------------
-
-chrome sig 6
-
-graphics_WebGLConformance/graphics_WebGLConformance
-
----------------------------------------------------------
-
-Total unique crashes: 1
-
-&gt;&gt;&gt; Details stored under /tmp/run_remote_tests.iumX
-
-## Autotest graphics_WindowManagerGraphicsCapture
-
-- This test verifies the window manager can capture graphics from applications.
-
-- This test fails if application screen shots cannot capture the screen output.
-
-- draws less than 10 full screen color frames of a dot/sphere
-
-- copies dep-glbench.tar.bz2 as dependency over
-
-- runs deps/glbench/windowmanagertest
-
-- converts/resizes images to 100x100 pixels
-
-- runs perceptualdiff to compare with reference images
-
-- runs about 30 seconds
-
-- fairly stable test
-
-### Sample Output
-
-ihf@ql ~/trunk/src/scripts $ **GRAPHICS_BACKEND=OPENGL ./run_remote_tests.sh
---board=${BOARD} --remote=172.22.70.69 graphics_WindowManagerGraphicsCapture
---use_emerged**
-
-\[...\]
-
-INFO : Test results:
-
----------------------------------------------------------------------------------
-
-graphics_WindowManagerGraphicsCapture PASS
-
-graphics_WindowManagerGraphicsCapture/graphics_WindowManagerGraphicsCapture PASS
-
----------------------------------------------------------------------------------
-
-Total PASS: 2/2 (100%)
-
-No crashes detected during testing.
-
-Elapsed time: 0m36s
-
-&gt;&gt;&gt; Details stored under /tmp/run_remote_tests.Lb4p \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-keyvals/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-keyvals/index.md
deleted file mode 100644
index 6e399c1357f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-keyvals/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: autotest-keyvals
-title: Autotest Keyvals
----
-
-Job keyvals are key/value pairs, used to cache/exchange data about jobs between
-different services in autotest, via the database. There are two keyvals tables,
-afe_job_keyvals and tko_job_keyvals. Both tables have a job_id column for
-keyvals to be foreign keyed to a job. The job_id can be a suite job id if jobs
-are queued by a suite run, or test job id if the job is queued directly from
-atest/run_remote_test/autoserv.
-
-The initial job keyvals get specified as part of the arguments to the create_job
-RPC and entered into the database (into the afe_job_keyvals table). Then, before
-we go to run a job, we pull the keyvals out of the database and write them to a
-file. This is done by a class named TaskWithJobKeyvals that is a mixin that gets
-included for the Agents representing job runs. The parsing of these keyvals back
-into the database happens when the scheduler kicks off tko/parse.py to parse job
-results during the PARSING phase. tko/parse.py calls tko/db.py:insert_job(),
-which contains the call to update_job_keyvals() which does the actual job keyval
-writing. These get inserted into tko_job_keyvals, so the initial keyvals are
-always in afe_job_keyvals, and the final results in tko_job_keyvals.
-
-afe_job_keyvals stores the a job's suite and build information.
-
-tko_job_keyvals stores the test result information, including:
-
-user that requested the job
-
-job start/end time (job_started, job_queued, job_finished)
-
-perf keyvals, which are up to individual tests to create as they see fit. The
-use and lifecycle of perf keyvals is explained in detail on [a separate
-webpage](/chromium-os/testing/autotest-keyvals/perf-keyvals).
-
-Importantly, the tko_job_keyvals entry for a suite job stores a dictionary
-between hashed test names and job_id-owner. After a suite job is finished,
-run_suite uses this dictionary to find out the job url for a particular test.
-The reason for this is that when a suite is started, all keyvals are keyed by
-suite job id. The test job id is set only after the test job is started. After a
-test job has finished, autoserv creates logs a keyval (for the test’s job id)
-with the hashed test name as the key and job_id-owner as the value. run_suite
-pulls the keyval from tko_job_keyval table and maps the test job to its result
-page, which is the test job page, rather than suite job page. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-keyvals/perf-keyvals/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-keyvals/perf-keyvals/index.md
deleted file mode 100644
index c74ca80a252..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-keyvals/perf-keyvals/index.md
+++ /dev/null
@@ -1,134 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/autotest-keyvals
- - Autotest Keyvals
-page_name: perf-keyvals
-title: Perf Keyvals
----
-
-# Note perf keyvals described in this page has been deprecated. If your test output perf values, please refer to <http://www.chromium.org/chromium-os/testing/perf-data>
-
-# Currently, autotest uses a special kind of keyval called a “perf keyval” to store performance test data. A perf keyval -- like any keyval in autotest -- is simply a key/value pair, where the key is a string that describes the value. The string key can contain only letters, numbers, periods, dashes, and underscores, as defined in write_keyval() in chromeos/src/third_party/autotest/files/client/common_lib/base_utils.py.
-
-Perf keyvals are outputted by autotests via calls to write_perf_keyval(DICT),
-where DICT is a dictionary of perf key/value pairs. There is no standardized
-format for how a chromeOS performance key string is specified. Unofficially,
-perf keys tend to follow the format “UNITS_DESCRIPTION”, as in
-“fps_WebGLAquarium”, but this format is not enforced by calls to
-write_perf_keyval().
-
-## Life of a perf keyval
-
-Summary: a test outputs perf keyvals using write_perf_keyval(), which are then
-pushed to output text files. The autotest infrastructure then pulls these
-keyvals from the output files and dumps them into the results database when
-parsing server job results.
-
-### From a test to output file(s)
-
- dictionary of perf keyvals written by a test using
- “self.write_perf_keyval()”. That function is defined in:
- chromium-os/src/third_party/autotest/files/client/common_lib/test.py, in
- class base_test
-
- That in turn passes the keyvals along to “write_iteration_keyval()”, defined
- in the same class
-
- write_iteration_keyval() accepts a dictionary of “attr” type keyvals, and
- “perf” type keyvals. It then calls utils.write_keyval() with each
- dictionary, passing along the “attr” and “perf” tags for each dictionary
- appropriately. It then appends a newline to the “keyval” file in the current
- results directory.
-
- write_keyval() is defined in:
- chromium-os/src/third_party/autotest/files/client/common_lib/base_utils.py.
- This function verifies that the keys in the keyval dictionary match an
- expected regex; then it writes the keyvals in sorted order to the keyval
- file in the specified directory (in “append” mode).
-
- write_keyval() also accepts a tap_report object; if that is present and its
- “do_tap_report” attribute is true, then the keyvals are also passed to the
- tap_report’s “record_keyval()” function.
-
- A tap_report object is associated with the job that a given test instance is
- a part of. Hence, it’s referenced by write_perf_keyval() in class base_test
- as “self.job._tap”, which is initialized in file
- “chromium-os/src/third_party/autotest/files/client/common_lib/base_job.py”
- as a new TAPReport object. class TAPReport is defined in the same file.
-
- TAPReport is autotest’s support for generating TAP ([Test Anything
- Protocol](http://en.wikipedia.org/wiki/Test_Anything_Protocol)) report
- files.
-
-### From output file(s) into the results database
-
- Autotest’s TKO parser is what puts data into the results database
-
- parse_test() in chromium-os/src/third_party/autotest/files/tko/models.py
- reads in the keyval file for a test and constructs a new models.test object
- from it.
-
- parse_test() is invoked by the state_iterator() function in
- chromium-os/src/third_party/autotest/files/tko/parsers/version_0.py (there’s
- also a version_1.py in there). The files in this directory implement a state
- machine that parses/processes the results of an autotest job.
-
- The state_iterator is driven by process_lines() and end() in
- chromium-os/src/third_party/autotest/files/tko/parsers/base.py.
-
- process_lines() is driven by _parse_status() in
- chromium-os/src/third_party/autotest/files/server/server_job.py
-
- When _parse_status() calls process_lines(), it gets back information about
- new tests associated with the job. It then calls __insert_test() with each
- of these tests, which then inserts the test results into the results
- database via a call to self.results_db.insert_test().
-
- _parse_status() is invoked by the hook in class server_job_record_hook that
- implements the job.record hook for server job.
-
- The record_hook is invoked in the record_entry() function in class
- status_logger in file
- chromium-os/src/third_party/autotest/files/client/common_lib/base_job.py.
- That function is invoked whenever autotest needs to record a
- status_log_entry into the appropriate status log files.
-
-## Storage of perf keyvals
-
- “keyval” files: Perf keyvals are initially written into an output file named
- keyval that is contained within the results output folder of an autotest
- run. Each perf keyval is printed on a separate line in this file. An example
- is:
- FPS_FlashGaming{perf}=17.349133
- The format of each line is PERF_KEY_STRING{perf}=PERF_VALUE. The “{perf}” is
- just a tag indicating that the keyval is a performance keyval. Autotests can
- also run for multiple iterations. When that happens, results for all
- iterations are printed inside the same (single) keyval file, with a blank
- line separating the perf keyvals from each iteration.
-
- autotest results database: perf keyvals are also extracted from the keyval
- output files by autotest’s TKO parser, and are then dumped into the autotest
- results database. The perf keyvals are stored in a table named
- “tko_iteration_result”, with fields “attribute” (the perf key) and “value”
- (the perf value). Each entry in that table is associated with a unique test
- run index, in field “test_idx”. There is a view in the autotest results
- database called “tko_perf_view_2” that simplifies querying for the perf
- keyvals associated with a test run.
-
-## Consumers of perf keyvals
-
- Consumers of perf keyval files
-
- Autotest TKO parser (to get the keyvals into the results database)
-
- team members who are manually inspecting the results of performance test
- runs
-
- Consumers of perf keyvals in the autotest results database
-
- Performance dashboard: automatically extracts new perf keyvals daily at
- 3am \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.png.sha1 b/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.png.sha1
deleted file mode 100644
index 13240636f46..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b46d0bf0624bf9f3ccfb9ca81b9899be97869827 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.svg.sha1 b/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.svg.sha1
deleted file mode 100644
index d20b185b14f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/atest-diagram.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-53b37f34bc73fc117e9047635ec0ea11b008e99b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/index.md b/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/index.md
deleted file mode 100644
index 399d6b69232..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/autotest-user-doc/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: autotest-user-doc
-title: Autotest for Chromium OS developers
----
-
-This content has moved to:
-
-<https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/user-doc.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/building-and-running-tests/index.md b/chromium/docs/website/site/chromium-os/testing/building-and-running-tests/index.md
deleted file mode 100644
index d92e9e7dec6..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/building-and-running-tests/index.md
+++ /dev/null
@@ -1,330 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: building-and-running-tests
-title: Building and Running Tests
----
-
-## [TOC]
-
-## Building tests
-
-Fundamentally, a test has two main phases:
-
-* run_\*() - This is is the main part that performs all testing and is
- invoked by the control files, once or repeatedly.
-* setup() - This function, present in the test case’s main .py file is
- supposed to prepare the test for running. This includes building any
- binaries, initializing data, etc.
-
-During building using emerge, autotest will call a setup() function of all test
-cases/deps involved. This is supposed to prepare everything. Typically, this
-will invoke make on a Makefile present in the test’s src/ directory, but can
-involve any other transformation of sources (also be empty if there’s nothing to
-build).
-Note, however, that setup() is implicitly called many times as test
-initialization even during run_\*() step, so it should be a noop on reentry that
-merely verifies everything is in order.
-Unlike run_\*() functions, setup() gets called both during the prepare phase
-which happens on the host and target alike. This creates a problem with code
-that is being depended on or directly executed during setup(). Python modules
-that are imported in any pathway leading to setup() are needed both in the host
-chroot and on the target board to properly support the test. Any binaries would
-need to be compiled using the host compiler and either ensured that they will be
-skipped on the target (incremental setup() runs) or cross-compiled again and
-dynamically chosen while running on target.
-More importantly, in Chromium OS scenario, doing any write operations inside the
-setup() function will lead to access denied failures, because tests are being
-run from the intermediate read-only location.
-Given the above, building is as easy as emerge-ing the autotest ebuild that
-contains our test.
-
-```none
-$ emerge-${board} ${test_ebuild}
-```
-
-Currently, tests are organized within these notable ebuilds: (see
-[FAQ](/chromium-os/testing/autotest-user-doc#TOC-Q1:-What-autotest-ebuilds-are-out-there-)
-full list)
-chromeos-base/autotest-tests - The main ebuild handling most of autotest.git
-repository and its client and server tests.
-chromeos-base/autotest-tests-\* - Various ebuilds that build other parts of
-autotest.git
-chromeos-base/chromeos-chrome - chrome tests; the tests that are part of chrome
-
-### Building tests selectively
-
-Test cases built by ebuilds generally come in large bundles. Sometimes, only a
-subset, or generally a different set of the tests provided by a given ebuild is
-desired. That is achieved using a
-[USE_EXPANDed](http://devmanual.gentoo.org/general-concepts/use-flags/index.html)
-flag called *TESTS.*
-All USE flags (and therefore tests) have a default state, either enabled (+) or disabled (-), specified directly in the ebuild, that can be manually overridden from the commandline. There are two ways to do that.
-
-* **Non-Incremental - Simply override the default selection by an
- entirely new selection, ignoring the defaults. This is useful if you
- develop a single test and don’t want to waste time building the
- others.**
-
-```none
-$ TESTS="test1 test2" emerge-${board} ${ebuild}
-```
-
-* Incremental - All USE_EXPAND flags are also accessible as USE flags,
- with the appropriate prefix, and can be used incrementally to
- selectively enable/disable tests in addition to the defaults. This
- can be useful if you aim to enable a test that is disabled by
- default and want to test locally.
-
-```none
-$ USE="test_to_be_enabled -test_to_be_disabled" emerge-${board} ${ebuild}
-```
-
-For operations across all tests, following incremental USE wildcard is supported
-by portage: "tests_\*" to select all tests at once (or - to de-select).
-NOTE: Both Incremental and Non-Incremental methods can be set/overriden by (in
-this order): the ebuild (default values), make.profile, make.conf, /etc/portage,
-commandline (see above). That means that any settings provided on the emerge
-commandline override everything else.
-
-## Running tests
-
-**NOTE:** In order to run tests on your device, it needs to have a [test-enabled
-image](/chromium-os/testing/common-testing-workflows#TOC-W4.-Create-and-run-a-test-enabled-image-on-your-device).
-
-When running tests, fundamentally, you want to either:
-
-* Run sets of tests manually - Use case: Developing test cases
-
-Take your local test sources, modify them, and then attempt to run them on a
-target machine using autotest. You are generally responsible for making sure
-that the machine is imaged to a test image, and the image contains all the
-dependencies needed to support your tests.
-
-* Verify a given image - Use case: Developing the projects subject to
- testing
-
-Take an image, re-image the target device and run a test suite on it. This
-requires either use of build-time autotest artifacts or their reproduction by
-not modifying or resyncing your sources after an image has been built.
-
-### Running tests on a machine - test_that
-
-The frontend for running tests is a script called test_that. It provides an
-interface for running the autoserv process which deploys and executes tests on
-remote machines.
-Most basically, test_that takes several flags for specifying the remote machine
-IP address and a list of control files. Control files can be specified either by
-their NAME field, or by a NAME- or path- matching regular expression. For
-example:
-
-```none
-$ test_that test.device.hostname.com dummy_Pass
-```
-
-This script will use autotest_quickmerge to copy over any python-only test
-changes from your source tree to the board sysroot, if it detects that your
-source tree is newer. This allows you to iterate rapidly on python only changes
-without needing to emerge your changes. However, non-python changes still
-require a normal emerge.
-
-### Running tests in a VM - cros_run_vm_tests
-
-WARNING: After
-[crbug/710629](https://bugs.chromium.org/p/chromium/issues/detail?id=710629),
-'betty' is the only board regularly run through pre-CQ and CQ VMTest and so is
-the most likely to work at ToT. 'betty' is based on 'amd64-generic', though, so
-'amd64-generic' is likely to also work for most (non-ARC) tests.
-
-VM tests are conveniently wrapped into a script cros_run_vm_tests that sets up
-the VM using a given image and then calls test_that. This is run by builders to
-test using the Smoke suite.
-If you want to run your tests on the VM (see
-[here](/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines)
-for basic instructions for setting up KVM with cros images) be aware of the
-following:
-
-* cros_run_vm_test starts up a VM and runs test_that using the port
- specified (defaults to 9222). As an example:
-
-```none
-$ ./bin/cros_run_vm_test --test_case=suite_Smoke ---image_path=<my_image_to_start or don't set to use most recent build> --board=betty # or 'amd64-generic'
-```
-
-* The emulator command line redirects localhost port 922 to the
- emulated machine's port 22 to allow you to ssh into the emulator.
- For Chromium OS to actually listen on this port you must append the
- --test_image parameter when you run the ./image_to_vm.sh script, or
- perhaps run the mod_image_for_test.sh script instead.
-* You can then run tests on the correct ssh port with something like
-
-```none
-$ ./test_that --board=x86-generic localhost:922 platform_BootPerf
-```
-
-* To set the sudo password run set_shared_user_password. Then within
- the emulator you can press Ctrl-Alt-T to get a terminal, and sudo
- using this password. This will also allow you to ssh into the unit
- with, e.g.
-
-```none
-$ ssh -p 922 root@localhost
-```
-
-### Interpreting test results
-
-Running autotest will result in a lot of information going by which is probably
-not too informative if you have not used autotest before. At the end of the
-test_that run, you will see a summary of pass/failure status, along with
-performance results:
-
-```none
-22:44:30 INFO | Using installation dir /home/autotest
-22:44:30 ERROR| Could not install autotest from repos
-22:44:32 INFO | Installation of autotest completed
-22:44:32 INFO | GOOD  ----  Autotest.install timestamp=1263509072 localtime=Jan 14 22:44:32
-22:44:33 INFO | Executing /home/autotest/bin/autotest /home/autotest/control phase 0
-22:44:36 INFO | START  ---- ----  timestamp=1263509075 localtime=Jan 14 14:44:35
-22:44:36 INFO |  START   sleeptest sleeptest timestamp=1263509076 localtime=Jan 14 14:44:36
-22:44:36 INFO | Bundling /usr/local/autotest/client/tests/sleeptest into test-sleeptest.tar.bz2
-22:44:40 INFO |   GOOD  sleeptest  sleeptest  timestamp=1263509079  localtime=Jan 14 14:44:39 completed successfully
-22:44:40 INFO |   END GOOD  sleeptest sleeptest  timestamp=1263509079  localtime=Jan 14 14:44:39
-22:44:42 INFO | END GOOD ---- ---- timestamp=1263509082 localtime=Jan 14 14:44:42
-22:44:44 INFO | Client complete
-22:44:45 INFO | Finished processing control file
-```
-
-`` `` `` `A directory full of the latest results will also be left at
-/tmp/test_that_latest` `` `` ``
-
-### Running tests automatically, Suites
-
-Suites provide a mechanism to group tests together in test groups. They also
-serve as hooks for automated runs of tests verifying various builds. Most
-importantly, that is the BVT (board verification tests) and Smoke (a subset of
-BVT that can run in a VM
-
-Please refer to the [suites
-documentation](/chromium-os/testing/dynamic-suites/dynamic-test-suites)
-
-**## ****Troubleshooting/FAQ******
-
-Fairly asked questions, because yes, some of this may be confusing!
-
-**### Q1: What autotest ebuilds are out there?**
-
-**Note that the list of ebuilds may differ per board, as each board has potentially different list of overlays. To find all autotest ebuilds for board foo, you can run:**
-
-**```none
-$ board=foo
-$ for dir in $(portageq-${board} envvar PORTDIR_OVERLAY); do
-     find . -name '*.ebuild' | xargs grep "inherit.*autotest" | grep "9999" |cut -f1 -d: | \
-     sed -e 's/.*\/\([^/]*\)\/\([^/]*\)\/.*\.ebuild/\1\/\2/'
-   done
-```**
-
-**### Q2: I see a test of the name ‘greattests_TestsEverything’ in build output/logs/whatever! How do I find which ebuild builds it?**
-
-**All ebuilds have lists of tests exported as USE_EXPANDed lists called TESTS. An expanded use can be searched for in the same way as other use flags, but with the appropriate prefix, in this case, you would search for ‘tests_greattests_TestsEverything’:**
-
-**```none
-$ use_search=tests_greattests_TestsEverything
-$ equery-$board hasuse $use_search
- * Searching for USE flag tests_greattests_TestsEverything …
-[I-O] [  ] some_ebuild_package_name:0
-```**
-
-**This will however only work on ebuilds which are already installed, ie. their potentially outdated versions.**
-**Alternately, you can run a pretended emerge (emerge -p) of all autotest ebuilds and scan the output.**
-
-**```none
-$ emerge -p ${all_ebuilds_from_Q1} |grep -C 10 “${use_search}”
-```**
-
-**### Q3: I have an ebuild ‘foo’, where are its sources?**
-
-**Generally speaking, one has to look at the ebuild source to figure that question out (and it shouldn’t be hard). However, all present autotest ebuilds (at the time of this writing) are also ‘cros-workon’, and for those, this should always work:**
-
-**```none
-$ ebuild_search=foo
-$ ebuild $(equery-$board which $ebuild_search) info
-CROS_WORKON_SRCDIR=”/home/you/trunk/src/third_party/foo”
-CROS_WORKON_PROJECT=”chromiumos/third_party/foo”
-```**
-
-**### Q4: I have an ebuild, what tests does it build?**
-
-**You can run a pretended emerge on the ebuild and observe the ‘TESTS=’
-statement:**
-
-```none
-$ ebuild_name=foo
-$ emerge-$board -pv ${ebuild_name}
-These are the packages that would be merged, in order:
-Calculating dependencies... done!
-[ebuild   R   ] foo-foo_version to /build/$board/ USE="autox hardened tpmtools xset -buildcheck -opengles" TESTS="enabled_test1 enabled_test2 … enabled_testN -disabled_test1 ...disabled_testN" 0 kB [1]
-```
-
-Alternately, you can use equery, which will list tests with the USE_EXPAND
-prefix:
-
-```none
-$ equery-$board uses ${ebuild_name}
-[ Legend : U - final flag setting for installation]
-[        : I - package is installed with flag     ]
-[ Colors : set, unset                             ]
- * Found these USE flags for chromeos-base/autotest-tests-9999:
- U I
- + + autotest                                    : <unknown>
- + + autotest                                    : <unknown>
- + + autox                                       : <unknown>
- + + buildcheck                                  : <unknown>
- + + hardened                                    : activate default security enhancements for toolchain (gcc, glibc, binutils)
- - - opengles                                    : <unknown>
- + + tests_enabled_test                     : <unknown>
- - - tests_disabled_test                      : <unknown>
-```
-
-### Q5: I’m working on some test sources, how do I know which ebuilds to cros_workon start in order to properly propagate?
-
-You should ‘workon’ and always cros_workon start all ebuilds that have files
-that you touched.
-If you’re interested in a particular file/directory, that is installed in
-/build/$board/usr/local/autotest/ and would like know which package has provided
-that file, you can use equery:
-
-```none
-$ equery-$board belongs /build/${board}/usr/local/autotest/client/site_tests/foo_bar/foo_bar.py
- * Searching for <filename> …
-chromeos-base/autotest-tests-9999 (<filename>)
-```
-
-DON’T forget to do equery-$board. Just equery will also work, only never return
-anything useful.
-As a rule of thumb, if you work on anything from the core autotest framework or
-shared libraries (anything besides
-{server,client}/{test,site_tests,deps,profilers,config}), it belongs to
-chromeos-base/autotest. Individual test case will each belong to a particular
-ebuild, see Q2.
-It is important to cros_workon start every ebuild involved.
-
-### Q6: I created a test, added it into ebuild, emerged it, and I’m getting access denied failures. What did I do wrong?
-
-Your test’s setup() function (which runs on the host before being uploaded) is
-probably trying to write into the read-only intermediate location.
-
-### Q7: Missing pyauto_dep
-
-You're seeing something like:
-
-```none
-Missing pyauto_dep. Unhandled PackageInstallError: Installation of pyauto_dep(type:dep) failed : dep-pyauto_dep.tar.bz2 could not be fetched from any of the repos ['autoserv://']
-```
-
-**You're running the now-deprecated run_remote_tests.sh without the
---use_emerged flag. Use test_that instead. OR, you are using test_that but have
-never emerged autotest-chrome, and thus the telemetry dep is missing. See
-[here](/chromium-os/testing/building-and-running-tests#TOC-Running-tests-on-a-machine---run_remote_tests.sh).** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/cellular-testing/index.md b/chromium/docs/website/site/chromium-os/testing/cellular-testing/index.md
deleted file mode 100644
index 740ea01bb3e..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/cellular-testing/index.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: cellular-testing
-title: 'Cellular: Testing'
----
-
-The cellular team uses autotests for end-to-end testing of the cellular
-components. There are a few separate suites:
-
-1. suite_Cellular: You should run this before pushing a CL that affects
- part of the cellular stack. Tests here can run on real hardware and
- shouldn't take too long.
-2. control.network_3g: This is what the hardware test lab runs "every
- so often". This runs on real hardware and can take a long time if
- needed.
-3. BVT (the build verify test): runs nothing (yet). We need to fix this
- by making some of our tests appropriate for running in a VM. This
- should run quickly. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio - New Page (4).png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio - New Page (4).png.sha1
deleted file mode 100644
index 642a8a48d17..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio - New Page (4).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ffd3caf3bc1f42db7d2e5d4bd3cff80143460a14 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board Block Diagram.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board Block Diagram.png.sha1
deleted file mode 100644
index 642a8a48d17..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board Block Diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ffd3caf3bc1f42db7d2e5d4bd3cff80143460a14 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release PCB.zip.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release PCB.zip.sha1
deleted file mode 100644
index 1533bb51724..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release PCB.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f963df20079354c407aa1e6fd60234b8955848f5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release.pdf.sha1
deleted file mode 100644
index b8cdaf9a936..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/Chameleon Audio Board R1.1 Release.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f9e2cf0f8c91042fefa3dac8a33272f2e43e510a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/index.md b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/index.md
deleted file mode 100644
index 21b0f80100e..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-board/index.md
+++ /dev/null
@@ -1,179 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: chamelium-audio-board
-title: Chamelium Audio Board
----
-
-[TOC]
-
-## Introduction
-
-Chamelium audio board routes audio between four endpoints with two stereo audio
-buses:
-
-* DUT device headphone jack
-* Chamelium FPGA board line-out/line-in
-* Peripheral speaker/microphone
-* Bluetooth audio module
-
-It helps Chamelium automate audio testing including:
-
-* 3.5mm headphone
-* 3.5mm external microphone
-* Onboard internal speaker
-* Onboard internal microphone
-* Bluetooth A2DP playback
-* Bluetooth HSP/HFP playback
-* Bluetooth HSP/HFP record
-
-## Components
-
-* Chamelium
-
-> > <img alt="AB_2.jpg"
-> > src="https://lh6.googleusercontent.com/J7i4-sT2ydPrJmJQo1IZ-e_0PUmoN0R_rXN-1QLIMLDaUIlUfeLj9ZZVe2GgvjhoatKCLu9S-w4iLn8nyxZVVtBvEcKNogcUMgS-9YCHhThkHhem-sSRYnPfeD-F4tNziOghxMaU"
-> > height=274 width=400>
-
-* Audio Board Block Diagram
-
-> > [<img alt="image"
-> > src="/chromium-os/testing/chamelium-audio-board/Chameleon%20Audio%20-%20New%20Page%20%284%29.png"
-> > height=283
-> > width=400>](/chromium-os/testing/chamelium-audio-board/Chameleon%20Audio%20-%20New%20Page%20%284%29.png)
-
-* Audio Board
-
-> > <img alt="AB_1.jpg"
-> > src="https://lh5.googleusercontent.com/OyD9hcw981gB6wUOTVHdweNJAV28gvT9hBp5wiFxnv80SXrfFr0l43tmMqFicK-XM6Mbqn8MOsCme7IOAVkMxr1fwlolWN7IKNP_wpfeDa9g_S0qub2SQMe4EZjgtfRNvX3jp54P"
-> > height=308 width=400>
-
-* Two 3-ring (TRS) audio jack cables
-* One 4-ring (TRRS) audio jack cable
-* One serial ribbon cable (connecting CN4 on audio board with
- J13_LTC_CON on FPGA)
-* USB-A to mini-USB cable
-* 3-ring (TRS) 3.5mm microphone
-
-## Bootstrap
-
- Connect audio board and FPGA board with the serial ribbon grey cable (see
- the assembled picture).
-
- Connect audio board and Chamelium line-in and line-out (blue jack to blue
- jack, green jack to green jack) using two 3.5mm 3-ring(TRS) cables.
-
- For audio jack external audio - connect tested device with audio board using
- 3.5mm 4-ring (TRRS) cable.
-
- For USB audio - connect tested device with the middle USB port on FPGA (top)
- board.
-
- For internal speaker test - connect a mono microphone (two conductor, TS
- connector) to the pink port on the FPGA (top) board.
-
- For internal microphone test - connect a speaker to black SPK port on audio
- board.
-
- For Bluetooth test - Chamelium Eth MAC and audio board BT MAC should be
- related in chameleon_info.
-
-## Setup Chamelium Info
-
- Use the interactive script ~/trunk/src/platform/chameleon/client/test_server
- to connect to chameleond server.
- ~/trunk/src/platform/chameleon/client/test_server
- --chameleon_host=&lt;chameleon ip&gt;
-
- Get the MAC address of chamelium: &gt;&gt;&gt; p.GetMacAddress()
-
- '94:eb:2c:00:01:27'
-
- Disable the bluetooth module on audio board:
- &gt;&gt;&gt; p.AudioBoardDisableBluetooth()
-
- ssh into Cros device:
- ssh chromeos1-row5-rack1-host2.cros
-
- Use bluetoothctl to turn on adapter and start scanning
-
-localhost ~ # bluetoothctl
-
-\[NEW\] Controller 7C:7A:91:9A:EE:89 Chromebook \[default\]
-
-\[bluetooth\]# power on
-
-Changing power on succeeded
-
-\[bluetooth\]# scan on
-
-Discovery started
-
-\[CHG\] Controller 7C:7A:91:9A:EE:89 Discovering: yes
-
- Enable the bluetooth module on audio board using test_server: &gt;&gt;&gt;
- p.AudioBoardResetBluetooth()
-
- In bluetoothctl console, check there is a new **SX3868-3Y** device being
- scanned:
-
-\[NEW\] Device 00:1F:84:01:03:5B SX3868-3Y
-
-\[CHG\] Device 00:1F:84:01:03:5B RSSI: -67
-
-\[CHG\] Device 00:1F:84:01:03:5B RSSI: -56
-
-\[CHG\] Device 00:1F:84:01:03:5B RSSI: -68
-
- Now we know Chamelium with MAC address '94:eb:2c:00:01:27' has a Bluetooth
- module with MAC address ‘00:1F:84:01:03:5B’ on its audio board.
-
- Add the mapping info to client/cros/chameleon/chameleon_info.py
-
-_CHAMELEON_BOARD_INFO = {
-
-'94:eb:2c:00:00:fb': ChameleonInfo('00:1F:84:01:03:68'),
-
-'94:eb:2c:00:01:2b': ChameleonInfo('00:1F:84:01:03:5E'),
-
-'94:eb:2c:00:01:27': ChameleonInfo('00:1F:84:01:03:5B'), }
-
-## Run the test
-
-For example, run basic headphone test on a squawks board 5 times:
-
-test_that --board=squawks --fast --debug --args="chameleon_host=$CHAMELIUM_IP"
-$DUT_IP audio_AudioBasicHeadphone --iterations 5
-
-## Test output/input devices basic function
-
-### Output audio devices
-
-* Internal speaker - audio_AudioBasicInternalSpeaker
-* Headphone - audio_AudioBasicHeadphone
-* HDMI/DisplayPort - audio_AudioBasicHDMI
-* USB headphone - audio_AudioBasicUSBPlayback
-* Bluetooth headphone - audio_AudioBasicBluetoothPlayback
-
-### Input audio devices
-
-* Internal microphone - audio_AudioBasicInternalMicrophone
-* External microphone - audio_AudioBasicExternalMicrophone
-* USB microphone - audio_AudioBasicUSBRecord
-* Bluetooth microphone - audio_AudioBasicBluetoothRecord
-
-## Advanced tests
-
-* Volume control: audio_AudioVolume
-* Suspend/Resume, Reboot: audio_AudioAfterSuspend,
- audio_AudioAfterReboot, audio_AudioQualityAfterSuspend
-* Quality and artifacts: audio_AudioArtifacts
-* BT connection: audio_AudioBluetoothConnectionStability
-* BT playback + record: audio_AudioBasicBluetoothPlaybackRecord
-* USB playback + record: audio_AudioBasicUSBPlaybackRecord
-* Chrome media player: audio_MediaBasicVerification
-* WebRTC: audio_AudioWebRTCLoopback
-* ARC: audio_AudioARCPlayback, audio_AudioARCRecord \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg.sha1
deleted file mode 100644
index 7e9ccc1c106..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-435559a4177b1e5d75c3280fc47e0b79e1a4a9ee \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg.sha1
deleted file mode 100644
index 59ec9f3ad6e..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4bed8642064a850b27600feccbb44bca4841f0a8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg.sha1
deleted file mode 100644
index 019ac49fdbe..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e7d38072c2fad3243538888f56f991eea09fbfc4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_51_43.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_51_43.png.sha1
deleted file mode 100644
index 5a8a95570f1..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_51_43.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4cb486f873443669d7d16a61ebf8d4da85b8852b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_53_38.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_53_38.png.sha1
deleted file mode 100644
index 1bc8a423e8b..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/Screenshot from 2017-03-07 17_53_38.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-08b94b21cbc3126c0a0c643730135f15f2ed994b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/index.md b/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/index.md
deleted file mode 100644
index bc4e9e0b6dc..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-audio-streaming/index.md
+++ /dev/null
@@ -1,261 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: chamelium-audio-streaming
-title: Chamelium Audio streaming
----
-
-[TOC]
-
-## Introduction
-
-Chamelium provides capturing and streaming feature so user can monitor audio
-playing from ChromeOS for a long time.
-
-This document provides the steps to demo this feature.
-
-## Prepare a Chromebook with tick noise
-
-Install an image on ChromeOS such that there will be tick noise caused by
-underrun.
-
-Kevin image R57-9178.0.0 is a good example.
-
-## Play sine tone on Chromebook
-
-Play a sine tone video on youtube, e.g. [1HR 528Hz sine
-tone](https://www.youtube.com/watch?v=dZ5G13MEMgc)
-Listen to it using headphone and find there is tick noise.
-
-## Connect the audio path
-
-Connect the Chromebook to Chamelium audio board using 4 ring audio cable.
-
-Connect Chamelium blue port (LineIn) to audio board blue port using 3 ring audio
-cable.
-
-[<img alt="image"
-src="/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg" height=300
-width=400>](/chromium-os/testing/chamelium-audio-streaming/IMG_0001.jpg) [<img
-alt="image" src="/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg"
-height=300
-width=400>](/chromium-os/testing/chamelium-audio-streaming/IMG_0002.jpg) [<img
-alt="image" src="/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg"
-height=300
-width=400>](/chromium-os/testing/chamelium-audio-streaming/IMG_0003.jpg)
-
-## Find Chamelium's IP
-
-Connect the USB serial port to workstation.
-
-Refer to [network
-setup](/chromium-os/testing/chamelium#TOC-Verify-your-network-setup) to get the
-IP address of Chamelium.
-
-## Connect to Chamelium server
-
-Assume the IP address of Chamelium is 192.168.100.4
-
-In Chromium OS chroot, use test_server script to connect to Chamelium server.
-
-$ cd ~/trunk/src/platform/chameleon/
-
-$ ./client/test_server.py --chameleon_host=192.168.100.4
-
-2017-03-07 17:36:47,219:INFO:Connected to http://192.168.100.4:9992 with MAC
-address 94:eb:2c:00:01:41
-
-2017-03-07 17:36:47,219:INFO:In interactive shell, p is the proxy to chameleond
-server
-
-2017-03-07 17:36:47,287:INFO:
-
-Port 1 is DP.
-
-Port 2 is DP.
-
-Port 3 is HDMI.
-
-Port 4 is VGA.
-
-Port 5 is Mic.
-
-Port 6 is LineIn.
-
-Port 7 is LineOut.
-
-Port 8 is USBIn.
-
-Port 9 is USBOut.
-
-Port 10 is USBKeyboard.
-
-Port 11 is USBTouch.
-
-Port 14 is ClassicBluetoothMouse.
-
-Port 17 is Unknown.
-
-E.g.
-
-p.StartCapturingAudio(6) to capture from LineIn.
-
-p.StopCapturingAudio(6) to stop capturing from LineIn.
-
-p.Plug(3) to plug HDMI.
-
-p.Unplug(3) to unplug HDMI.
-
-Python 2.7.10 (default, Oct 23 2016, 07:38:19)
-
-\[GCC 4.9.x 20150123 (prerelease)\] on linux2
-
-Type "help", "copyright", "credits" or "license" for more information.
-
-(InteractiveConsole)
-
-&gt;&gt;&gt;
-
-&gt;&gt;&gt; **ConnectCrosToLineIn()**
-
-&gt;&gt;&gt; **p.StartCapturingAudio(6, False)**
-
-&gt;&gt;&gt; **DetectAudioValue0**()
-
-2017-03-07 17:46:27,219:INFO:connecting to 192.168.100.4:9994
-
-2017-03-07 17:46:27,222:DEBUG:Major 1, minor 0
-
-2017-03-07 17:46:27,222:INFO:dump realtime audio page mode Best effort
-
-2017-03-07 17:46:27,224:INFO:Start to detect continuous 0s.
-
-2017-03-07 17:46:27,224:INFO:Channels=\[0, 1\], margin=0.010000,
-continuous_samples=5, duration=3600 seconds, dump_frames=48000.
-
-2017-03-07 17:46:27,224:WARNING:Receive error code 7, 'Drop realtime audio page
-52183'
-
-2017-03-07 17:46:27,225:INFO:Value of channel 0 is 0.125715
-
-2017-03-07 17:46:27,225:INFO:Value of channel 1 is 0.123948
-
-2017-03-07 17:46:27,225:INFO:Value of channel 0 is 0.134183
-
-2017-03-07 17:46:27,225:INFO:Value of channel 1 is 0.132190
-
-2017-03-07 17:46:27,225:INFO:Value of channel 0 is 0.142132
-
-2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.140410
-
-2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.149582
-
-2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.147740
-
-2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.156259
-
-2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.154545
-
-2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.162134
-
-2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.160298
-
-2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.167443
-
-2017-03-07 17:46:27,226:INFO:Value of channel 1 is 0.165158
-
-2017-03-07 17:46:27,226:INFO:Value of channel 0 is 0.171803
-
-2017-03-07 17:46:27,227:INFO:Value of channel 1 is 0.169648
-
-2017-03-07 17:46:27,227:INFO:Value of channel 0 is 0.175156
-
-2017-03-07 17:46:27,227:INFO:Value of channel 1 is 0.173238
-
-2017-03-07 17:46:27,227:INFO:Value of channel 0 is 0.178005
-
-2017-03-07 17:46:27,227:INFO:Value of channel 1 is 0.175745
-
-2017-03-07 17:46:28,102:WARNING:Detected continuous 5 0s of channel 0
-
-2017-03-07 17:46:28,102:WARNING:Detected continuous 5 0s of channel 1
-
-2017-03-07 17:46:28,103:WARNING:Save to detect0_20170307174627/audio_52511.wav
-
-2017-03-07 17:46:28,105:WARNING:Continuous 139 0s of channel 0
-
-2017-03-07 17:46:28,106:WARNING:Continuous 140 0s of channel 1
-
-2017-03-07 17:46:28,106:WARNING:Save to detect0_20170307174627/audio_52512.wav
-
-...
-
-The monitoring will keep running.
-
-## Adjust volume on Chromebook, or adjust the parameter of detector
-
-If there is false alarm, adjust the volume on Chromebook to make it louder, or
-use a smaller value for **margin** passed to DetectAudioValue0.
-
-Use help function to get the docstrings of DetectAudioValue0:
-
-&gt;&gt;&gt;help(DetectAudioValue0)
-
-Help on function DetectAudioValue0 in module __main__:
-
-DetectAudioValue0(channels=None, margin=0.01, continuous_samples=5,
-duration=3600, dump_samples=48000)
-
-Detects if Chameleon captures continuous audio data close to 0.
-
-This function will get the audio streaming data from stream server and will
-
-check if the audio data is close to 0 by the margin parameter.
-
--margin &lt; value &lt; margin will be considered to be close to 0.
-
-If there are continuous audio samples close to 0 in the streamed data,
-
-test_server will log it and save the audio data to a wav file.
-
-E.g.
-
-&gt;&gt;&gt; ConnectCrosToLineIn()
-
-&gt;&gt;&gt; p.StartCapturingAudio(6, False)
-
-&gt;&gt;&gt; DetectAudioValue0(duration=24\*3600, margin=0.001)
-
-Args:
-
-channels: Array of audio channels we want to check.
-
-E.g. \[0, 1\] means we only care about channel 0 and channel 1.
-
-margin: Used to decide if the value is closed to 0. Maximum value is 1.
-
-continuous_samples: When continuous_samples samples are closed to 0, trigger
-
-event.
-
-duration: The duration of monitoring in seconds.
-
-dump_samples: When event happens, how many audio samples we want to
-
-save to file.
-
-## Check the recorded defect waveform
-
-Use audacity to view the wav file.
-
-The first wav file is where underrun is detected.
-
-Press the black arrow on the left of a channel and select **Spectrogram** so the
-part where waveform dropped to zero is obvious.
-
-![](/chromium-os/testing/chamelium-audio-streaming/Screenshot%20from%202017-03-07%2017_51_43.png)
-
-The second wav file is where normal playback is resumed.
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium-usb-audio/index.md b/chromium/docs/website/site/chromium-os/testing/chamelium-usb-audio/index.md
deleted file mode 100644
index 032498d2308..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium-usb-audio/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: chamelium-usb-audio
-title: Chamelium USB Audio
----
-
-[TOC]
-
-## Background
-
-USB audio supports multi-channel and higher precision playback / capture
-functionality. This document tells you about how to use chamelium with external
-USB audio devices.
-
-## Needed equipment
-
-1. An USB audio device
-2. Type-A USB to mini-USB converter
-
-## Setup Steps
-
-1. Run command $ touch /etc/default/.usb_host_mod and reboot chamelium.
-2. Run command $ modprobe snd-usb-audio to enable USB audio module.
-3. Plug in a USB audio device in the ***middle*** mini-USB port (with
- the converter) and use command $ aplay -l ($ arecord -l for
- microphone) to check if the device is plugged in.
-4. Test your USB audio device by the following command
- 1. $ arecord -f dat /tmp/test.wav (Test capture function)
- 2. $ aplay -f dat /tmp/test.was (Test playback function)
-
-## **Recover Steps**
-
-1. Run command $ rm /etc/default/.usb_host_mod and reboot chamelium \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/CAT9883CRegisterRev01.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/CAT9883CRegisterRev01.pdf.sha1
deleted file mode 100644
index cc72dc70b5d..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/CAT9883CRegisterRev01.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e7c860553b732f6bece1515b4820a86292d6708e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon Video - New Page (4).png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon Video - New Page (4).png.sha1
deleted file mode 100644
index b6b16eac152..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon Video - New Page (4).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cb45f3fa15b51b7e8b21137d4b6f084ae84d6e9c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon-B1_R1.2_Release %5Bfor external use%5D.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon-B1_R1.2_Release %5Bfor external use%5D.pdf.sha1
deleted file mode 100644
index 1f711dc0383..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon-B1_R1.2_Release %5Bfor external use%5D.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-84ee97fa7de32232250ed9bbd46fb4ab7f05b27f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.1_BOM.xlsx.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.1_BOM.xlsx.sha1
deleted file mode 100644
index 21d1f9c8aa7..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.1_BOM.xlsx.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c3da8d8e15d952fdd4e8653025f8e93a961d2ba3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2- Gerber file.zip.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2- Gerber file.zip.sha1
deleted file mode 100644
index 0edc966078c..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2- Gerber file.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d145efd974d9855a0547854def1eac5159583497 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2_Release.brd.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2_Release.brd.sha1
deleted file mode 100644
index c907be1b28d..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/Chameleon_B1_R1.2_Release.brd.sha1
+++ /dev/null
@@ -1 +0,0 @@
-985542b4dc9214b21f3516b4350e02a5ae59bf1c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/FPGA pins.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/FPGA pins.png.sha1
deleted file mode 100644
index d643e39d4bf..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/FPGA pins.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1d066cc1aec248c0b9a528a3d878a48716c1c7c7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6506 Programming Guide.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/IT6506 Programming Guide.pdf.sha1
deleted file mode 100644
index c4bcd1b4dad..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6506 Programming Guide.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b161ce97ed5bdd8b59fa4042fa9acfd664daf5c0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6506_Datasheet_for_Google_v1.3.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/IT6506_Datasheet_for_Google_v1.3.pdf.sha1
deleted file mode 100644
index 5bd53ff3642..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6506_Datasheet_for_Google_v1.3.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9de6ee94f112c8fe3f3905387b0c17d60aaee700 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6803 Programming Guide.1.05.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/IT6803 Programming Guide.1.05.pdf.sha1
deleted file mode 100644
index 5d107912c87..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6803 Programming Guide.1.05.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c24ae5fd04a3687d937455abe50cbe8715b2522d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6803TE Datasheet_for_Google v0.83.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/IT6803TE Datasheet_for_Google v0.83.pdf.sha1
deleted file mode 100644
index a07c6495b67..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/IT6803TE Datasheet_for_Google v0.83.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1e125d23073773735c159bde2ce9425d2a85e846 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/cat9883c_datasheet_for_Google_Rev1 3.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/cat9883c_datasheet_for_Google_Rev1 3.pdf.sha1
deleted file mode 100644
index 7d54231046d..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/cat9883c_datasheet_for_Google_Rev1 3.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-78bc6d707b83b46f2d1ee18935c838ba9d3ac356 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/index.md b/chromium/docs/website/site/chromium-os/testing/chamelium/index.md
deleted file mode 100644
index 54fa3f1d957..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/index.md
+++ /dev/null
@@ -1,441 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: chamelium
-title: Chamelium
----
-
-[TOC]
-
-Chamelium automates external display testing across VGA, HDMI, and DisplayPort
-(DP), helping to identify graphics bugs and regressions in a reliable and
-scalable way. It can emulate user behavior across a wide range of scenarios,
-such as plugging in (or unplugging) an external monitor before or after
-suspending, waking, or rebooting a device. It also allows us to simulate all
-types of displays on the market, at various resolutions and refresh rates,
-including non-standard or flaky behavior.
-
-Chamelium is the public name of the internal Google project Chameleon (similar
-to Chromium and Chrome). You may see references to the original codename
-throughout the documentation linked below.
-
-Chamelium consists of 3 primary components:
-
- a hardware board which acts as an external display emulator, simulating
- output over VGA, HDMI, and DP. You can either ask a hardware manufacturer to
- build these for you, or contact
- [chamelium-external+requests@google.com](mailto:chamelium-external+requests@google.com)
- to request a few units.
-
- an off-the-shelf FPGA board (SoCKit) to capture the output frames, with a
- micro-SD card that provides the Linux image and FPGA configuration. This can
- be purchased from distributors like
- [Arrow](https://parts.arrow.com/item/detail/arrow-development-tools/sockit#eFGz)
- or
- [Terasic](http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=816).
-
- source code for the underlying test infrastructure and logic
-
-Please direct any questions about Chamelium to
-[chamelium-external@google.com](mailto:chamelium-external@google.com).
-
-## Setting up Chamelium
-
-[<img alt="image"
-src="/chromium-os/testing/chamelium/Chameleon%20Video%20-%20New%20Page%20%284%29.png"
-height=309
-width=400>](/chromium-os/testing/chamelium/Chameleon%20Video%20-%20New%20Page%20%284%29.png)
-
-(Block diagram)
-
-<img alt="1.jpg"
-src="https://lh4.googleusercontent.com/aQWRAYdgxme0N-8131P1Nhb2BkBx9VqxS20Fu4b0CgoPJ8iqrDaBdmLhOzgsYGLUCXY_9Mh19h4E-5aECqYJoi5PFyc1H9mv1Oa4V3ucDSafJpNZEN2tSJaxXRw0UXv7OIkNMYA"
-height=291 width=400>
-
-(Front side of the external display emulator board. On the left side there is
-one HDMI, two DP, and one VGA connector. On the right side there is the HSMC
-connector.)
-
-<img alt="2.jpg"
-src="https://lh5.googleusercontent.com/uUVhSnnUtqCCuOOFLSNCHVkNmLjQwZ6Qwfb9H-FDpQI4NHRr1AAF83_NxHYvF3b19NlrrK6gqHK_nCvs6-gqpYbjNmXn85kjVZ0yRgKu5LxqW6rEWcP9JOqyzHi1KFo_rX4g5jg"
-height=303 width=400>
-
-(Back side of the external display emulator board)
-
-You will need the following equipment to set up all the individual components in
-Chamelium:
-
- 1 external display emulator board (described above)
-
- 1 FPGA board (described above). Included in the box should be:
-
- 1 ethernet cable
-
- 1 power adapter
-
- 1 mini-USB to USB-A cable
-
- 1 micro-SD card with at least 1GB of storage
-
- 1 micro-SD card reader
-
- [1 HSMC flex
- cable](http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=78&No=275)
-
- Depending on what you’d like to test, one of each of the following cables:
- HDMI, VGA, and DP
-
- 1 Linux host (workstation or laptop)
-
- 1 USB drive with at least 4GB of storage
-
-The following equipment is optional:
-
- 4 [M3 screws](https://en.wikipedia.org/wiki/Computer_case_screws#M3_screw)
- (6mm in length)
-
- 2 washers
-
- 4 M3 nuts (15mm in length)
-
- 4 M3 nuts (6mm in length)
-
- 1 additional VGA cable and 1 external monitor for debugging, if you’d like
- to see the display output as well
-
-### Configure the FPGA board
-
- Set the jumpers on the top side of the board
-
- J15 = down
-
- J16 = down
-
- J17 = up
-
- J18 = up
-
- J19 = down
-
- JP2 - 2.5V <img alt="image"
- src="/chromium-os/testing/chamelium/s2mbf9hZBTGKMFHBgqQqDiA.png"> <img
- alt="image"
- src="/chromium-os/testing/chamelium/sjR3S5TzIrNaCyuUbwvWwbA.png"> <img
- alt="image"
- src="/chromium-os/testing/chamelium/swKcCTHdtRXI6IJ-pzsZR9Q.png">
-
- Set the jumpers on the bottom side of the board
-
- MSEL = up-up-down-up-up-up = uncompressed RBF (001000) <img alt="image"
- src="/chromium-os/testing/chamelium/spstW8nBPTZeJhUk-NjRnQg.png">
-
-### Image the SD card
-
-Download
-[tio_v3.zip](https://drive.google.com/file/d/1_2JbvOBCadLSXUBggBPRHs71Hc7IEqAF/view?usp=sharing)
-and unzip it. dd tio_v3.img onto the micro-SD card from your Linux host.
-
-# sudo dd if=tio_v3.img of=/dev/sdx bs=4M oflag=sync
-
-(Replace the above /dev/sd**x** to a proper path, like /dev/sdc, by checking the
-SD device)
-
-Now insert the micro-SD card into the FPGA board.
-
-v3 image:
-
-* Migrated to python3.
-* Only compatible with chameleon-bundles later than 0.0.2-r463.
-
-v2 image (old):
-[tio_v2_4G.img.zip](https://drive.google.com/file/d/1ZITcjsjy8_5WyMRjx1cGMYj8PvlGK3um/view?usp=sharing)
-
- Increased user space from 20M to 4G.
-
- Updated glibc from 2.15 to 2.29.
-
- Fixed broken pip.
-
-v1 image (old):
-[tio.image.gz](https://drive.google.com/file/d/0B9Ff7PW3or-BeHVnQnhkZHBWM2c/view?usp=sharing)
-
-### Configure the external display emulator board
-
-First, attach the HSMC flex cable to connect the two boards.
-
-Optionally, if you’d like a more compact setup, you can stack the FPGA on top of
-the external display emulator board and secure them into place per the diagram
-below:
-
-**<img alt="image"
-src="/chromium-os/testing/chamelium/png%3Bbase644fb8f58c45521404.png">**
-
-Note that the longer nuts should be placed in between the two boards, with the
-shorter nuts on the bottom.
-
-### Attach all cables
-
- Attach the power and HDMI, DP, and/or VGA cables (depending on what
- interface you’d like to test), per the diagram below.
-
- Connect the other end of the HDMI, DP, and/or VGA cable to the device under
- test (DUT) - the device you’d like to run the tests against.
-
- Then connect the mini-USB port in the diagram below to your Linux host.
-
- The additional VGA port next to the ethernet port is optional (it’s for
- debugging purposes only) and should be connected to an external monitor if
- you decide to use it. <img alt="image"
- src="/chromium-os/testing/chamelium/s3x3vmsvmeWSlhdK4GEG60A.png">
-
- Next, connect the ethernet port on the FPGA to the same network as your
- Linux host and as your DUT.
-
-## Running the tests
-
-### Verify your network setup
-
- Power on the FPGA board by pressing the red button. This will boot from the
- SD card.
-
- Connect to the board via UART
-
-# sudo minicom -D /dev/ttyUSB0 -o -w -s
-
- Select Serial port setup
-
- Set the terminal to be 115200 8N1, and the Hardware Flow Control to No
-
- Select Save setup as dfl to save these changes as the default
-
- Restart the FPGA board
-
- Once the FPGA is done booting, login as root
-
- Make sure you can ping the FPGA board from your Linux host, and the Linux
- host from your FPGA. You may need to setup a DHCP server on your Linux host.
-
- Switch your DUT into developer mode
-
- Finally, make sure you can ping the DUT from your Linux host.
-
-The IP address will change at each reboot, as the MAC address of the board is
-not fixed. You can fix it by running the following commands in uboot (change XX
-to hex numbers of your choice):
-
-&gt; setenv ethaddr 0A:XX:XX:XX:XX:XX
-
-&gt; saveenv
-
-&gt; boot
-
-### Setup your Linux host, DUT and the FPGA
-
- [Checkout the source
- tree](http://www.chromium.org/chromium-os/developer-guide) for Chromium OS
-
- [Create and enter a
- chroot](http://www.chromium.org/chromium-os/developer-guide#TOC-Building-Chromium-OS)
- via the command cros_sdk
-
- Build the packages and images to run the tests
-
-# export BOARD=\[name of your DUT’s board, viewable at chrome://version\]
-
-# ./setup_board --board $BOARD
-
-# ./build_packages --board=$BOARD
-
- [Install Chromium OS onto your
- DUT](/chromium-os/developer-guide#TOC-Installing-Chromium-OS-on-your-Device)
-
- Connect your USB drive to your Linux host
-
- Build a test image
-
-# ./build_image --board=$BOARD test
-
- Run the command displayed in the output in the terminal, under the
- section, “To copy the image to a USB key, use…”
-
-# cros flash usb:// ../build/images/\[...\]/chromiumos_test_image.bin
-
- Now, boot your DUT from the USB drive (with the test image) - you’ll
- need to [enter
- vt2](/chromium-os/developer-guide#TOC-Getting-to-a-command-prompt-on-Chro),
- login as root, and run enable_dev_usb_boot. Then, connect your USB drive
- to your DUT and restart - you’ll need to enter \[Ctrl\]-\[u\] at the
- developer mode boot screen.
-
- After the DUT has booted, switch to vt2, login as root (the password on
- the test image is test0000) and run chromeos-install .
-
-# chromeos-install
-
- Shutdown the DUT, disconnect the USB drive, and then turn on the DUT.
-
- On your Linux host, setup the ARM toolchain and set the relevant environment
- variables
-
-# cd ~/trunk/src/scripts
-
-# ./setup_board --board arm-generic
-
-# export CHAMELIUM_IP=\[IP address of the FPGA board\]
-
-# export DUT_IP=\[IP address of the DUT\]
-
- Make and deploy chameleond on the FPGA
-
-# cd ~/trunk/src/platform/chameleon
-# make
-# make remote-install CHAMELEON_HOST=$CHAMELIUM_IP
-
-### Setup root password and SSH key
-
-* There is no password by default. For security concern, we should set
- the password.
-* Set the password on FPGA
-
-# passwd
-
-* In Chromium OS chroot, copy the public key to FPGA and check it
- works.
-
-# ssh root@$CHAMELEON_IP mkdir -p .ssh
-
-# cat ~/trunk/chromite/ssh_keys/testing_rsa.pub | ssh root@$CHAMELEON_IP 'cat
-&gt;&gt; .ssh/authorized_keys'
-
-# ssh $CHAMELEON_IP
-
-### Run the tests
-
- Set $TEST_NAME to any of the following. Please note that the starred test
- items (\*) require [servo](/chromium-os/servo), and will fail without it.
-
- display_ServerChameleonConnection
-
- display_ClientChameleonConnection
-
- display_SwitchMode
-
- display_HotPlugAtBoot.extended
-
- display_HotPlugAtBoot.mirrored
-
- display_HotPlugAtSuspend.extended
-
- display_HotPlugAtSuspend.mirrored
-
- display_HotPlugAtSuspend.extended_unplugged
-
- display_HotPlugAtSuspend.mirrored_unplugged
-
- display_Resolution.extended
-
- display_ResolutionList.extended
-
- display_Resolution.mirrored
-
- display_Resolution.reboot
-
- display_Resolution.relid_extended\*
-
- display_Resolution.relid_mirrored\*
-
- display_Resolution.suspend_resume
-
- display_HotPlugNoisy.extended
-
- display_HotPlugNoisy.mirrored
-
- display_LidCloseOpen.extended\*
-
- display_LidCloseOpen.mirrored\*
-
- display_LidCloseOpen.extended_unplugged\*
-
- display_LidCloseOpen.mirrored_unplugged\*
-
- display_SuspendStress.extended
-
- display_SuspendStress.mirrored
-
- display_EdidStress
-
-# export TEST_NAME=\[name of the test you’d like to run\]
-
- Alternatively, you can run an entire test suite by setting $TEST_NAME to
- either of these values, below. Each suite consists of a combination of the
- individual tests listed above.
-
- suite:chameleon_hdmi
-
- suite:chameleon_dp
-
- Run a test [using
- test_that](/chromium-os/testing/test-suites#TOC-How-to-run-suites-with-test_that-)!
-
-# cd ~/trunk/src/scripts
-
-# test_that --board=$BOARD --args "chameleon_host=$CHAMELIUM_IP" $DUT_IP
-$TEST_NAME
-
-## Advanced usage
-
-For additional instructions on how to modify tests or the FPGA image, please
-refer to the documentation below.
-
- The hardware specs include:
-
- Schematics (see attachment: Chameleon-B1_R1.2_Release \[for external
- use\].pdf)
-
- Board file (see attachment: Chameleon_B1_R1.2_Release.brd)
-
- HDMI receiver (see attachments: IT6803TE Datasheet_for_Google v0.83.pdf
- and IT6803 Programming Guide.1.05.pdf)
-
- DP receiver (see attachments: IT6506_Datasheet_for_Google_v1.3.pdf and
- IT6506 Programming Guide.pdf)
-
- VGA receiver (see attachments: cat9883c_datasheet_for_Google_Rev1 3.pdf
- and CAT9883CRegisterRev01.pdf)
-
- [Chamelium Hardware Design
- Overview](https://docs.google.com/document/d/1Ae_qcraDwNA5dkWkVo3PhK2SQzZITTv-rlDUFE5tybI/edit?usp=sharing)
-
- [Chamelium External Display
- Emulator](https://docs.google.com/presentation/d/1p8F8defw3fQzCtUyZyoQjROQ37jIZRDwkBT9XG2Cj3g/edit?usp=sharing)
-
- [HSMC pin
- mapping](https://docs.google.com/spreadsheets/d/1ISQF5VookmiZWYXKs4fedR6LO5MDmiH0V1v1EMsuiPc/edit?usp=sharing)
-
- [FPGA pin
- mapping](https://docs.google.com/spreadsheets/d/1AkgGdehgp27SnCDMjQ6qxNdfmGV2NTp9bAL8llEtLUo/edit?usp=sharing)
-
- FPGA pin locations (see attachment: FPGA pins.png)
-
- [HSMC spec](http://www.altera.com/literature/ds/hsmc_spec.pdf)
-
-* The FPGA specs:
- * [FPGA Development
- Guide](https://docs.google.com/document/d/1CkQ-VbEW2NumtsmKyWqJlqBKJuCj0QY8qxDT4dKxJWc/edit?usp=sharing)
- * [FPGA
- Interface](https://docs.google.com/document/d/1_HjEMA8fBoHkUbpUZq-OXtITfiomCb1HBKN07T-POlY/edit?usp=sharing)
- * FPGA RTL Source Code (see attachment:
- video-chameleon-658cadce37849ec8330f7cbfa01135983984ec24.tar.gz)
-* Test software:
- * [chameleond](https://chromium.googlesource.com/chromiumos/platform/chameleon/)
- - daemon to drive the hardware and expose its control interfaces
- * [test
- harness](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/client/cros/multimedia/)
- - library in autotest harness to interact with chameleond
- * [tests
- cases](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/server/site_tests/)
- - modular test cases that are meant to represent real-world,
- end-user behavior
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/png;base644fb8f58c45521404.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/png;base644fb8f58c45521404.png.sha1
deleted file mode 100644
index 71a09fdddf4..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/png;base644fb8f58c45521404.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1dd202d72f10ebd68a61cfff2752734c8d4739a5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/s2mbf9hZBTGKMFHBgqQqDiA.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/s2mbf9hZBTGKMFHBgqQqDiA.png.sha1
deleted file mode 100644
index 37f54b94bec..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/s2mbf9hZBTGKMFHBgqQqDiA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a5437b5f22635ceb4ba196d9853cda3ea730f851 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/s3x3vmsvmeWSlhdK4GEG60A.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/s3x3vmsvmeWSlhdK4GEG60A.png.sha1
deleted file mode 100644
index 0b84fc26527..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/s3x3vmsvmeWSlhdK4GEG60A.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-780a0bc107477d46651471b336f38c6833b9ac22 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/sjR3S5TzIrNaCyuUbwvWwbA.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/sjR3S5TzIrNaCyuUbwvWwbA.png.sha1
deleted file mode 100644
index 6a18fb721cd..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/sjR3S5TzIrNaCyuUbwvWwbA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8ac98910cc1e796ee806296896a2eb9cea27983e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/spstW8nBPTZeJhUk-NjRnQg.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/spstW8nBPTZeJhUk-NjRnQg.png.sha1
deleted file mode 100644
index 4e649be652f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/spstW8nBPTZeJhUk-NjRnQg.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-33d234352bd0fa5815b3dd33aca200c4ef4c4473 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/swKcCTHdtRXI6IJ-pzsZR9Q.png.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/swKcCTHdtRXI6IJ-pzsZR9Q.png.sha1
deleted file mode 100644
index 83b332313c1..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/swKcCTHdtRXI6IJ-pzsZR9Q.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-65899c09185ac5970656730b6fe6ba3d279e26a7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/chamelium/video-chameleon-658cadce37849ec8330f7cbfa01135983984ec24.tar.gz.sha1 b/chromium/docs/website/site/chromium-os/testing/chamelium/video-chameleon-658cadce37849ec8330f7cbfa01135983984ec24.tar.gz.sha1
deleted file mode 100644
index 9463a779d96..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/chamelium/video-chameleon-658cadce37849ec8330f7cbfa01135983984ec24.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0042a9a3f5296e5e27a32a501efcdcea65d51444 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/collecting-stats-for-graphite/index.md b/chromium/docs/website/site/chromium-os/testing/collecting-stats-for-graphite/index.md
deleted file mode 100644
index ee8489c94c6..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/collecting-stats-for-graphite/index.md
+++ /dev/null
@@ -1,182 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: collecting-stats-for-graphite
-title: Collecting Stats for Graphite
----
-
-# [TOC]
-
-## Background
-
-We have this amazing and fancy graph displaying utility called Graphite running
-on [chromeos-stats](http://chromeos-stats/). It's beautiful. You all should use
-it. This doc is about how to get data into the system so that you can view it in
-Graphite.
-
-There are two different ways to get data into the system:
-
-The first is to write data to the raw backend of Graphite, which is called
-*carbon*. It accepts data in the format of `<name> <value> <time>`, and one can
-find a basic interface to sending data to carbon in
-`site_utils.graphite.carbon`.
-
-The second is to write data to a service which will calculate statistics over
-the data you're sending, and then forward it onto carbon. This service is called
-*statsd*. It provides better information, as it will calculate min/mean/max,
-deviation, and provides a more intelligible interface. It also allows for better
-horizontal scaling in case we ever start logging a truely hilarious amount of
-stats. (Which we should!)
-
-I would highly recommend using the statsd over carbon unless you have a specific
-reason to be sending data directly to carbon.
-
-## Walkthrough
-
-We have in `site-packages` a library named `statsd`. This has been wrapped for
-our purposes in a library located in `autotest_lib.site_utils.graphite.stats`,
-which does some connection caching, prepending of autotest server name, and a
-little other magic. The interface exposed is exactly the same as the one exposed
-by statsd, and therefore this doc should work as a guide for both. (But you
-should use the `site_utils` one!)
-
-This guide serves to be copy-paste-able, so you should be able to take any
-snippet out of this doc and run it. Therefore, here's the import boilerplate
-you'll need when messing around with this code from within autotest:
-
-`import time import common from autotest_lib.site_utils.graphite import stats `
-
-If you prefer, you can find all the code listed in this doc (as of when this was
-published) in [CL 45286](https://gerrit.chromium.org/gerrit/#/c/45286/).
-
-As you go through and add some stats, or mess with the code shown here, at some
-point you're going to want to see how the data is shown on Graphite. Navigate to
-[chromeos-stats](http://chromeos-stats/). Drill down into `stats->[stat
-type]->[your hostname]->[stat name]`. Main thing to note here is that statsd
-dumps all of the stats under `stats/`, so if you go looking at the root level
-for `[your hostname]->[stat name]`, you won't find anything. :P
-
-`[your hostname]` here means "whatever value you have for `[SERVER] hostname =`
-in your `shadow_config.ini`".
-
-### Timers
-
-The first stat to examine is how to log how long a function takes to run. The
-easiest target for this is the scheduler tick. Let's define a fake scheduler
-tick function:
-
-`def tick(): time.sleep(10) # Sleeping is a very expensive computation `
-
-And now we have a few different ways that we can get the runtime of this
-function.
-
-We can manually create a timer, and call `start()` and `stop()` at the beginning
-and end of the function:
-
-`def tick_manual(): timer = stats.Timer('testing.tick_manual') timer.start()
-time.sleep(3) timer.stop() tick_manual() # You should now see a point at
-3000(ms) in stats/timers/<hostname>/testing/tick_manual `
-
-We can also take advantage of the decorator that is attached to the `Timer`
-object:
-
-`timer = stats.Timer('testing') @timer.decorate def tick_decorator():
-time.sleep(5) tick_decorator() # You should now see a point at 5000(ms) in
-stats/timers/<hostname>/testing/tick_manual `
-
-Statsd timers report their value in milliseconds, so if you report a value by
-hand using `send()`, you should probably report the time in milliseconds also.
-
-#### Counters
-
-If you're looking to keep track of how frequently something occurs, a counter is
-a good choice. Statsd receives the counter stat, tallies it over time, and
-flushes the value of events per second to carbon and resets the counter to zero
-once every ten seconds. With counters, there are no extra statistics that statsd
-can compute. The normal ones of min, max, std_dev, etc. make no sense in the
-context of counters.
-
-`# We can increment a counter every time we get an rpc request. def
-create_job(): stats.Counter('testing.rpc.create_job').increment(delta=1) #
-.increment() defaults to delta=1, so it could have been omitted for _ in
-range(0, 10): create_job() # You should now see 1 at
-stats/<hostname>/testing/rpc/create_job # 1 == 10 events / 10 seconds `
-
-There also exists a `decrement()` on the counter object, but I'm not really sure
-when one would use it. If you're trying to keep a running tally, you should
-instead use a:
-
-#### Gauge
-
-If you're looking to be able to send in a number, or if your stat doesn't really
-make sense as a timer or counter, then you should probably use a gauge. A gauge
-allows you to just report a number. The benefit of using a gauge over just
-sending raw data is that statsd will still compute the statistics about the
-stats you're sending like it normally does.
-
-`def running_jobs(): stats.Gauge('scheduler').send('running_jobs', 300)
-running_jobs() # You should now see 300 at
-stats/gauges/<hostname>/scheduler/running_jobs `
-
-#### Average
-
-Values submitted by an average are automatically averaged against the values in
-the same bucket at the end of the flush interval. The only use case I can think
-of for this is if you're trying to measure something in a gauge that's very
-flaky, which is messing up all of the statistics that are being calculated.
-However, I can't even think of an example to use in our codebase, so I'm just
-mentioning this for completeness.
-
-#### Raw
-
-If all else fails, and you don't want any fancy statsd features, you can get
-statsd to send your data to graphite "pretty much unchanged". Note that the
-prefixing of your hostname still does happen (assuming you didn't turn it off).
-
-One could use this to log the fact that something happened. Logging something so
-that there's an obvious spike when you're overlaying graphs doesn't need any
-sort of statistics calculated about it.
-
-`# statsd automatically adds the current time to the data def
-scheduler_initialized(): stats.Raw('scheduler.init').send('', 100)
-scheduler_initialized() # 1 will now show up at the current time under
-stats/<hostname>/scheduler/init`
-
-# Gathering stats from Whisper via the Command Line
-
-Stats can be queried directly from the command line using `whisper-fetch.py`
-
-For example:
-
-```none
-whisper-fetch.py --pretty /opt/graphite/storage/whisper/stats/timers/cautotest/verify_time/lumpy/mean.wsp 
-```
-
-whisper-fetch can also output in JSON and you can specify the range of data you
-wish to view via the --from and --until command lines. The default is to look at
-a time slice of 24 hours.
-
-# Gathering data directly from Graphite.
-
-Create the graph of the information you are interested and copy the URL. With
-the URL tack on &format=json and you will receive json formatted output with
-time slice and data.
-
-For example:
-
-<http://chromeos-stats/render/?width=586&height=308&_salt=1367326398.143&target=stats.timers.cautotest.scheduler.tick.mean&format=json>
-
-# Future Work/Needed Improvements
-
-* There's an ability to set a value in a gauge, and then modify it.
- This provides a counter that isn't reset to zero at each flushing,
- and is good for, say, number of RPC connections open at one time.
-* There's the ability to log events within Graphite that we currently
- have no API to do. This would allow us to log events like "build for
- 3773.0.0 just came out", providing better context to the rest of the
- stats.
-* Utilizing Events, like adding a new board into the mix. System
- crash, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/common-testing-workflows/index.md b/chromium/docs/website/site/chromium-os/testing/common-testing-workflows/index.md
deleted file mode 100644
index 770cf038773..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/common-testing-workflows/index.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: common-testing-workflows
-title: Common Testing Workflows
----
-
-[TOC]
-
-There are a lot of common developer workflows when it comes to testing. This
-document details those.
-
-## Workflow 1
-
-### *Developer already has a built system using build instructions. Developer wants to create a copy of their image for testing and build Chromium OS tests without re-running build_packages.*
-
-### cros_sdk and run mod_image_for_test on the chromiumos_image.bin (if you get complaints of unmount errors, sudo umount /media/\* outside the chroot).
-
-## Workflow 2
-
-*Developer has a testable image on their device. Developer makes modifications
-to the python component of a test and wants to re-run the test on the target
-system.*
-
-If the user makes modifications on the host system, the easiest way to re-run
-the tests is to re-run run_remote_tests. That script takes local changes from
-third_party/autotest before running tests. However, if the developer wants to
-make changes to dependencies of their tests, the developer must re-run
-build_autotest.sh
-
-## Workflow 3
-
-### *Developer wants to run a test with certain conditions met on the host system before the system is ready for that test e.g. "browser is not running and has never run since boot".*
-
-### For tests that require system-wide setup and system-wide cleanup, the best approach is probably to create a server-side test that sets up the environment, reboots the system, runs the test and cleans up the system. This should not be done for very small tests as rebooting is rather expensive. Take a look at [BootPerfServer](http://git.chromium.org/cgi-bin/gitweb.cgi?p=autotest.git;a=tree;f=server/site_tests/platform_BootPerfServer;h=2362958081700ed3e243935641ebe69b17890045;hb=HEAD) as an example to write such a test.
-
-*Note in the long run we want to create utilities that verify certain
-conditions. If you are interested in writing one of these utilities, please
-email the dev list.*
-
-## Workflow 4
-
-*Developer wants to run a test that requires a user to be logged in.*
-
-Subclass your test from site_ui_test.UITest
-
-*Note we are trying to create a utility for such pre-req's as login, so make
-sure to leave a big todo with DoLogin in it so that we can update your tests
-once they the utility libraries are ready.*
-
-### W1. Develop and iterate on a test
-
-0. Set up environment
-
-```none
-$ cd ~/trunk/src/third_party/autotest/files/
-$ export TESTS=”<the test cases to iterate on>”
-$ EBUILD=<the ebuild that contains TEST>
-$ board=<the board on which to develop>
-```
-
-1. Ensure cros_workon is started
-
-```none
-$ cros_workon --board=${board} start ${EBUILD}
-$ repo sync # Necessary only if you use minilayout.
-```
-
-2. Make modifications (on first run, you may want to just do 3,4 to verify
-everything works before you touch it & break it)
-
-```none
-$ …
-```
-
-3. Build test (TESTS= is not necessary if you exported it before)
-
-```none
-$ emerge-$board $EBUILD
-```
-
-4. Run test to make sure it works before you touch it
-
-```none
-$ run_remote_tests --remote=<machine IP> --use_emerged ${TESTS}
-```
-
-5. Go to 2) to iterate
-6. Clean up environment
-
-```none
-$ cros_workon --board=${board} stop ${EBUILD}
-$ unset TESTS
-```
-
-### W2. Creating a test - steps and checklist
-
-When creating a test, the following steps should be done/verified.
-1. Create the actual test directory, main test files/sources, at least one
-control file
-2. Find the appropriate ebuild package and start working on it:
-
-```none
-$ cros_workon --board=${board} start <package>
-```
-
-3. Add the new test into the IUSE_TESTS list of 9999 ebuild
-4. Try building: (make sure it’s the 9999 version being built)
-
-```none
-$ TESTS=<test> emerge-$board <package>
-```
-
-5. Try running:
-
-**```none
-$ run_remote_tests.sh --remote=<IP> --use_emerged <test>
-```**
-
-**6. Iterate on 4,5 and modify source until happy with the initial version.**
-**7. Commit test source first, when it is safely in, commit the 9999 ebuild version change.**
-**8. Cleanup**
-
-**```none
-$ cros_workon --board=${board} stop <package>
-```**
-
-**### W3. Splitting autotest ebuild into two**
-
-**Removing a test from one ebuild and adding to another in the same revision causes portage file collisions unless counter-measures are taken. Generally, some things routinely go wrong in this process, so this checklist should serve to help that.**
-**0. We have ebuild foo-0.0.1-r100 with test and would like to split that test off into ebuild bar-0.0.1-r1.**
-**Assume that:**
-**- both ebuilds are using cros-workon (because it’s likely the case).**
-**- foo is used globally (eg. autotest-all depends on it), rather than just some personal ebuild**
-**1. Remove test from foo-{0.0.1-r100,9999}; uprev foo-0.0.1-r100 (to -r101)**
-**2. Create bar-9999 (making a copy of foo and replacing IUSE_TESTS may be a good start), with IUSE_TESTS containing just the entry for test**
-**3. Verify package dependencies of test. Make bar-9999 only depend on what is needed for test, remove the dependencies from foo-9999, unless they are needed by tests that remained.**
-**4. Add a blocker. Since bar installs files owned by foo-0.0.1-r100 and earlier, the blocker’s format will be:**
-
-**```none
-RDEPEND=”!<=foo-0.0.1-r100”
-```**
-
-**5. Add a dependency to the new version of bar into chromeos-base/autotest-all-0.0.1**
-
-**```none
-RDEPEND=”bar”
-```**
-
-**6. Change the dependency of foo in chromeos-base/autotest-all-0.0.1 to be version locked to the new rev:**
-
-**```none
-RDEPEND=”>foo-0.0.1-r100”
-```**
-
-**7. Uprev (move) autotest-all-0.0.1-rX symlink by one.**
-**8. Publish all as the same change list, have it reviewed, push.**
-
-### W4. Create and run a test-enabled image on your device
-
-1. Choose which board you want to build for (we'll refer to this as ${BOARD},
-which is for example "x86-generic").
-
-2. Set up a proper portage build chroot setup. Go through the normal process of
-setup_board if you haven't already.
-
-```none
-$ ./build_packages --board=${BOARD}
-```
-
-3. Build test image.
-
-```none
-$ ./build_image --board=${BOARD} test
-```
-
-4. Install the Chromium OS testing image to your target machine. This is through
-the standard mechanisms: either USB, or by reimaging a device currently running
-a previously built Chromium OS image modded for test, or by entering the shell
-on the machine and forcing an auto update to your machine when it's running a
-dev server. For clarity we'll walk through two common ways below, but if you
-already know about this, just do what you normally do.
-
-4a. If you choose to use a USB boot, you first put the image on USB and run this
-from outside the chroot.
-
-```none
-$ cros flash --board=${BOARD} usb:// chromiumos_test_image.bin
-```
-
-4b. Alternatively, if you happen to already have a machine running an image
-modified for test and you know its IP address (${REMOTE_IP}), you can avoid
-using a USB key and reimage it with a freshly built image by running this from
-outside the chroot:
-
-```none
-$ ./image_to_live.sh --remote=${REMOTE_IP} --image=`./get_latest_image.sh --board=${BOARD}`/chromiumos_test_image.bin
-```
-
-This will automatically start dev server, ssh to your machine, cause it to
-update to from that dev server using memento_updater, reboot, wait for reboot,
-print out the new version updated to, and shut down your dev server. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/cros-autotest/cap b/chromium/docs/website/site/chromium-os/testing/cros-autotest/cap
deleted file mode 100644
index 63a4597bed6..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/cros-autotest/cap
+++ /dev/null
@@ -1 +0,0 @@
-ZaSNe287Uvq
diff --git a/chromium/docs/website/site/chromium-os/testing/cros-autotest/index.md b/chromium/docs/website/site/chromium-os/testing/cros-autotest/index.md
deleted file mode 100644
index 68fb456c22f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/cros-autotest/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: cros-autotest
-title: cros-autotest
----
-
diff --git a/chromium/docs/website/site/chromium-os/testing/dynamic-suites/dynamic-test-suites/index.md b/chromium/docs/website/site/chromium-os/testing/dynamic-suites/dynamic-test-suites/index.md
deleted file mode 100644
index 27d3037ef55..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/dynamic-suites/dynamic-test-suites/index.md
+++ /dev/null
@@ -1,441 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/dynamic-suites
- - Dynamic Suites
-page_name: dynamic-test-suites
-title: Running Dynamic Test Suites
----
-
-This document describes how to write, update, run, disable, and enumerate tests
-that are in a Test Suite.
-
-[TOC]
-
-A test suite is a collection of tests, client and server side, that are run on
-across a particular build to validate a larger system.
-
-If you are interested in how dynamic suites works and how it interacts with the
-CrOS Infrastructure please check out it's [generously documented py
-module](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/server/cros/dynamic_suite/dynamic_suite.py).
-
-Test Suites build on the Autotest [control file
-specification](https://github.com/autotest/autotest/wiki/ControlRequirements).
-
-# How to Create a new Test Suite
-
-In order to create a valid suite the following two requirements need to be met:
-
-* A Suite control file (e.g.
- [test_suites/control.bvt](http://git.chromium.org/gitweb/?p=chromiumos/third_party/autotest.git;a=blob;f=test_suites/control.bvt;hb=HEAD))
-* At least one test with the SUITE='your_suite' tag in it.
-
-We have a mechanism that allows suites of tests to be defined dynamically by a
-control file at runtime.
-`[test_suites/control.bvt](http://git.chromium.org/gitweb/?p=chromiumos/third_party/autotest.git;a=blob;f=test_suites/control.bvt;hb=HEAD)`
-in the autotest repo is a simple example of such a suite, and
-[login_LoginSuccess](http://git.chromium.org/gitweb/?p=chromiumos/third_party/autotest.git;a=blob;f=test_suites/control.bvt;hb=HEAD)
-is one test that's included in this suite. Looking at the control file for
-login_LoginSuccess, note the line `SUITE='bvt'`. This is used in `control.bvt`
-like this:
-
-```none
-suite_tag = 'bvt'
-bvt = dynamic_suite.Suite.create_from_name(suite_tag, build, pool=pool)
-```
-
-The infrastructure finds login_LoginSuccess by matching the contents of the
-SUITE field in its control file against the suite tag passed into
-`dynamic_suite.Suite.create_from_name()`
-
-`If one test should be in multiple suites the SUITE= control file variable can
-be a comma delimited list of suites.`
-
-```none
-SUITE='bvt, Kernel_Regression, Nightly'
-```
-
-# How to Modify Suites
-
-This section will go over adding, removing, and marking tests as experimental.
-
-Some suites have restrictions when it comes to adding tests to them. To read
-about the requirements of a particular test suite refer to its suite control
-under autotest/files/test_suite/control.suite_name.
-
-For example:
-[control.bvt](http://git.chromium.org/gitweb/?p=chromiumos/third_party/autotest.git;a=blob;f=test_suites/control.bvt)
-
-## How to Add tests to a Suite
-
-Add the SUITE="suite_name" to the control file of the test you want to be run in
-the suite. If this test is new add it as an experimental test first, see below.
-
-## How to Disable Tests in Test Suite?
-
-To disable a test *remove* the Suite Name from the SUITE= Tag, if it is the only
-suite in the SUITE variable remove the entire variable.
-
-You may consider marking a test as experimental to avoid closing of the tree but
-continue running tests.
-
-## Add new experimental tests?
-
-Some times you may want to add tests that are experimental to start gathering
-some data but you do not want the tree to be closed. To do this use the
-EXPERIMENTAL control file variable.
-
-```none
-AUTHOR = "Autotest Team"
-NAME = "Sleeptest"
-TIME = "SHORT"
-TEST_CATEGORY = "Functional"
-TEST_CLASS = "General"
-TEST_TYPE = "client"
-SUITE = "bvt"
-EXPERIMENTAL = "True"
-```
-
-An example of a test marked experimental.
-
-# Suite Options
-
-These are options that you can use to tweak the behavior in your suite control
-file.
-
-### check_hosts
-
-Boolean, if the hosts required are not currently in good health fail the suite.
-You may want to let the suite sit around for a while and wait for the hosts to
-be repaired. Default: True
-
-### skip_reimage
-
-Whether or not you want the suite to re-image machines before running the tests.
-Default: False
-
-### add_experimental
-
-If you only want the suite to include non-experimental tests. Default: True
-
-### file_bugs
-
-Whether or not bugs should be filed when tests fail (See below for a more
-detailed example)
-
-### suite_dependencies
-
-If you want to apply a dependency across the whole suite (See below for a more
-detailed example)
-
-### max_runtime_mins
-
-How long each job should be allowed to run in a suite. Default is 24 hours. (See
-below for an example)
-
-## Add a suite-level dependency?
-
-In addition to DEPENDENCIES specified on a per-test level, a set of suite
-dependencies can be specified at the suite level. These dependencies will be
-appended to the dependency list of all tests when they are run through that
-suite. To add suite-level dependencies, pass in your desired dependencies to
-dynamic_suite.reimage_and_run with the suite_dependencies argument. For example:
-
-```none
-dynamic_suite.reimage_and_run(
-    build=build, board=board, name='network3g_tmobile', job=job, pool=pool,
-    check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    suite_dependencies='carrier:tmobile')
-```
-
-Multiple suite-level dependencies can be given as a comma separated string.
-
-## How do I enable automatic bug filing for my suite?
-
-If your suite is already being run via suite_scheduler, you only need to edit
-the suite control file.
-
-* Drop an optional _BUG_TEMPLATE dictionary into your suite control
- file:
-
-```none
-_BUG_TEMPLATE = {
-    'labels': ['OS-Chrome','Type-Bug', 'your-label'],
-    'owner': '',
-    'status': None,
-    'summary': None,
-    'title': None,
-    'ccs': ['a@chromium.org','b@chromium.org', 'c@chromium.org']
-}
-```
-
-* Set the file_bugs option in your suite control file, and add a
- bug_template argument to reimage_and_run.
-
-```none
-dynamic_suite.reimage_and_run(
-    build=build, board=board, name='perf_v2', job=job, pool=pool,
-    check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=True, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    bug_template=_BUG_TEMPLATE)
-```
-
-## How do I run jobs in a suite for longer than 24 hours?
-
-In your suite control file pass the max_runtime_mins option:
-
-An example to allow tests to run for 6 hours.
-
-```none
-dynamic_suite.reimage_and_run(
-    build=build, board=board, name='bvt', job=job, pool=pool,
-    check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    max_runtime_mins=60*6)
-```
-
-# How to enumerate what tests will run for a given Suite?
-
-There is a tool under the autotest repo to enumerate tests that will run in a
-suite.
-
-From within the chroot the following command can be executed:
-
-<pre><code>
-~/trunk/src/third_party/autotest/files/site_utils/suite_enumerator.py -a ~/trunk/src/third_party/autotest/files <b>bvt</b>
-</code></pre>
-
--a option is to specify what Autotest directory to look in.
-
-The argument **bvt** is the SUITE you are intersted in.
-
-# How to enumerate what suites are available?
-
-```none
-~/trunk/src/third_party/autotest/files/site_utils/suite_enumerator.py -a ~/trunk/src/third_party/autotest/files -l 
-```
-
-# How to run suites with run_remote_tests?
-
-```none
-./run_remote_tests suite:bvt
-```
-
-Note that if your suite contains multiple control files that are associated with
-the same autotest, you may get an error that says something like this:
-
-TestError: &lt;AUTOTEST_NAME&gt; already exists; multiple tests cannot run with
-the same subdirectory
-
-To fix this, add a "tag" parameter to the job.run_test() in the associated
-control files (e.g., job.run_test('foo', tag='some_tag')) to distinguish them
-and make the results get written into uniquely-named result directories.
-
-# Suite Scheduler (Running suites out of band)
-
-Suite scheduler is the piece of software that is responsible for kicking off
-suites out of band based on a set of events as opposed to in a waterfall. If you
-are interested in running suites in a waterfall refer to the HW_Test section
-below. Below is a run down on how this works and what needs to happen to add new
-suites to this configuration.
-
-## How are suites handled on branches?
-
-Suites are scheduled based off of build artifacts, the autotest tarball
-generated at build time is used to enumerate what control files belong to what
-suites and what version of those particular tests should be run. If updated a
-test on TOT it will need to be back ported to every branch that needs those
-updates just like any other change.
-
-## How do I schedule my suite using suite_scheduler?
-
-If your suite is a part of **bvt, kaen_bvt, or smoke** it will automatically run
-and no further action must be taken.
-
-An out of band process runs on the Autotest server to schedule suite runs based
-on a number of events. The code lives under
-***autotest/files/site_utils/suite_scheduler*** and is configured via a Python
-config file located under
-[autotest/files/suite_scheduler.ini](http://git.chromium.org/gitweb/?p=chromiumos/third_party/autotest.git;a=blob;f=suite_scheduler.ini)
-
-To add your suite send a code review with a new entry as outlined below.
-
-### Example Config Entry
-
-```none
-[WeeklyKernelRegressions]
-run_on: weekly
-suite: kernel_weekly_regression
-branch_specs: >=R21
-pool: suites
-```
-
-There are 5 parts to a configuration entry.
-
-1. A **\[unique name\]** as the toplevel marker for the config
- \[WeeklyKernelRegression\]
-2. What events the suite should **run_on**
-3. What **suite** the config entry is for.
-4. What **branch_specs** to apply to the config entry.
-5. Lastly what **pool** should be used.
-
-The top level unique name marker is part of the Python config format and must be
-**unique** and it should reflect what suite is being configured.
-
-#### Supported *run_on* events
-
-* **nightly** - At trigger time the latest image available on the
- devserver is used to schedule jobs against.
-* **new_build** - When a new build is marked as PASS in
- manifest-versions (Happens via the build process) a suite will be
- kicked off with this build.
-* **weekly** - Once a week on sunday the latest image available will
- be used to schedule jobs against.
-
-Pending implementation: new_chrome [crbug.com/212678](https://crbug.com/212678)
-
-\*If there are other events you would like to have available please [file a
-bug](http://goto.google.com/chromeos-lab-bug).
-
-#### Options for *suite* line
-
-The **suite line** can only be used to describe *one* individual suite. The name
-used pertains to the suite added under
-**autotest/files/test_suites/control.*suite_name***. The above example would
-invoke the control.kernel_weekly_regression suite file.
-
-#### Valid *branch_specs* options
-
-There are three different branch specs that can be used to ensure your suite
-runs on a particular branch:
-
-* **factory** - Any factory branch that is producing images will cause
- this event to fire.
-* **firmware** - Any firmware branch that is producing images will
- cause this event to fire.
-* **&gt;=R21** - Any **release branch** that is greater than or equal
- to R21.
- * The &gt;= is required and is used to avoid trying to run tests
- on branches that do not have the proper control files.
-
-#### What *pool* should I select?
-
-A pool is a label on a machine like pool:bvt. We are using pools extensively
-currently as our dependency support is not quite there yet. Unless you are doing
-something out of the ordinary with extra hardware required to be attached to the
-DUT you should always use *pool: suites* which is a general pool for suite runs.
-
-If you are doing things that require extra hardware chances are there is already
-a precedent for this in the suite_scheduler.ini file and you should reference
-those. When in doubt ask chromeos-lab-infrastructure@google.com.
-
-# Running suites in BuildBot (HW_Test Stage)
-
-Suites can also be run as a step in the buildbot waterfall. This assumes you are
-running your builds via cbuildbot, if you are not please [file a
-bug](http://goto.google.com/chromeos-lab-bug) with your need and the Lab team
-can look at how to best direct you.
-
-**\*Note** when running the HW_Test step you are blocking your waterfall on
-actual hardware tests. If you do not want your builders to block on this
-consider using Suite Scheduler as described above.
-
-**\*Note if your build client is not on the master2 vlan you will need to [file
-a bug](http://goto.google.com/chromeos-lab-bug) with the Chrome OS lab team so a
-proxy connection can be set up.**
-
-Adding a HW_Test step to your cbuildbot config is as easy as editing
-cbuildbot_config.py in the chromite repo and adding a hw_test entry like the
-following:
-
-Example running the **bvt suite** for a lumpy build:
-
-<pre><code>
-internal_paladin.add_config('lumpy-paladin',
-  boards=['lumpy'],
-  paladin_builder_name='lumpy paladin',
- <b>upload_hw_test_artifacts=True,</b>
- <b>hw_tests=['bvt'],</b>
-)
-</code></pre>
-
-You need to specify **upload_hw_test_artifacts** so that Autotest has access to
-the image and the build artifacts via Google Storage and specify what suite(s)
-you want to run via a list called **hw_tests**.
-
-## Format of job names for running suites in Autotest
-
-For suite jobs:
-
-```none
-$build-test_suites/control.$suite_name
-```
-
-i.e.
-
-**x86-alex-release/R20-2264.0.0-test_suites/control.kernel.per_build.benchmarks**
-
-For sub-jobs run from the suite:
-
-```none
-$build/$suite_name/$test_name
-```
-
-i.e.
-
-**x86-alex-release/R20-2264.0.0/kernel.per_build.benchmarks/Hackbench**
-
-If a particular test is set with EXPERIMENTAL = True it is prefaced with
-experimental_test_name.
-
-i.e.
-
-**x86-alex-release/R20-2264.0.0/kernel.per_build.benchmarks/experimental_platform_AesThroughput**
-
-## \*How to force the scheduling of an event suite via suite_scheduler.py
-
-\*This is not a typical use case for users.
-
-Suite scheduler lives under
-*autotest/files/site_utils/suite_scheduler/suite_scheduler.py*
-
-An example of forcing all nightly suites for stumpy to be kicked off.
-
-```none
-site_utils/suite_scheduler/suite_scheduler.py -i  stumpy-release/R21-2270.0.0 -e nightly
-```
-
-## \*How to schedule an individual suite?
-
-If you need to run an individual suite for a particular build but not all of the
-suites that would be kicked off by a particular event you can use the same
-command the buildbots use, run_suite.py.
-
-```none
-site_utils/run_suite.py -b parrot -p pool:parrot_2gb -s kernel_weekly_regression -i parrot-release/R23-1913.156.1 -u 1
-```
-
-# Where can I see results from suite runs?
-
-Other than the BVT suite no other suite results are displayed on the buildbot
-waterfall. To see your results you need to refer to the Autotest dashboard at
-<http://cautotest.corp.google.com/results/dashboard>.
-
-From there:
-
-* Select a board/release of interest by clicking on the cells with BVT
- test results (e.g. "39/39").
- * i.e.
- <http://cautotest.corp.google.com/results/dashboard/alex/x86-alex-r21/bvt.html>
-* Then at the top you will see categories that pertain to that
- board/milestone click on one of those to see your results
- * i.e.
- <http://cautotest.corp.google.com/results/dashboard/alex/x86-alex-r21/security.html>
-
-# How do I get notified via email if suite runs fail?
-
-Refer to: <http://cautotest.corp.google.com/results/dashboard/emails.html> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/dynamic-suites/index.md b/chromium/docs/website/site/chromium-os/testing/dynamic-suites/index.md
deleted file mode 100644
index fc71e85e903..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/dynamic-suites/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: dynamic-suites
-title: Dynamic Suites
----
-
-Documentation about dynamic test suites is under this directory. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/dynamic-suites/test-dependencies-in-dynamic-suites/index.md b/chromium/docs/website/site/chromium-os/testing/dynamic-suites/test-dependencies-in-dynamic-suites/index.md
deleted file mode 100644
index dec8bc632c2..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/dynamic-suites/test-dependencies-in-dynamic-suites/index.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/dynamic-suites
- - Dynamic Suites
-page_name: test-dependencies-in-dynamic-suites
-title: Test Dependencies in Dynamic Suites
----
-
-[TOC]
-
-Not all tests can be run on all machines. Currently, the dynamic suite
-infrastructure has no way to deal with this issue. Our intent is to use the
-existing autotest control file DEPENDENCIES field to express what a test needs
-in order to be able to run. Any label in use in the autotest lab is valid in a
-test’s DEPENDENCIES list.
-
-# DEPENDENCIES in autotest control files today
-
-Currently, it seems that DEPENDENCIES in control files are parsed in only when
-tests are imported for use via the web front end, and they (may be) honored when
-tests are scheduled via that method.
-Dependencies can also be specified when running a test via the create_job() RPC
-exposed by the AFE.
-
-# DEPENDENCIES in dynamic suites
-
-There are two, related, issues here. One is how individual tests will declare
-the things they need from a host in order to run, and how the dynamic suite
-infrastructure will schedule these tests on appropriate machines. The second,
-more complex issue, is how the dynamic suites code will ensure that -- for a
-given suite -- it reimages a set of hosts that will enable all tests in the
-suite to be scheduled.
-
-## Scheduling tests on appropriate hosts
-
-As the dynamic suite code is already parsing each individual test control file
-it intends to run, it will not be too hard for it to add the contents of
-DEPENDENCIES to the metahost spec that it already builds up when scheduling
-tests with the create_job() RPC.
-
-## Determining which machines to reimage for a suite
-
-There are several parameters that will inform dynamic suites’ decision about
-which machines to reimage for a suite:
-
-1. the board being tested,
-2. the number of machines the suite asks to use, and
-3. the collective dependencies of all tests in the suite.
-
-These criteria introduce some new potential failure modes for suites:
-
-1. there is at least one test with unsatisfiable dependencies
- * We should just fast-fail the suite, because we're not going to
- be able to complete it.
-2. all dependencies are satisfiable, but not by the number of machines
- requested
-3. all dependencies can be satisfied by &lt; num machines, but none of
- the remaining machines satisfy any tests in the suite
- * consider a bluetooth test suite that wants two machines, but we
- have only one machine with bluetooth
-
-There are also some resource efficiency concerns here:
-
-1. Machines with rare labels, or label combos, should be avoided if
- possible
- * The only i5 lumpy with a Y3400 modem and swedish keyboard should
- not be used when an i5 wifi-only lumpy from any region will do
-2. One test in a suite with a rare label should not lead to the suite
- monopolizing all hosts with that label
- * a suite that asks for 4 machines and has 15 tests that will run
- anywhere and one that requires GOBI2K should grab 1 GOBI2K
- device and 3 wifi-only ones.
-
-## The naive algorithm (in broad strokes)
-
-There’s a set of machines in the lab, each of which is described by a set of
-labels There’s also a suite (read: set) of tests, each of which is described by
-a set of labels (read: dependencies). For a given N, we need to find a set of N
-machines such that the dependencies of each test in the suite are satisfied by
-some machine in the set.
-The difficulty is that we want to use ‘rare’ machines only if we really need
-them. If we weight hosts somehow, this should allow us to build a scoring
-function that we can use in a simulated annealing or hill-climbing kind of
-approximation algorithm.
-
-### No, it’s not a set-cover problem
-
-At first blush, this problem felt to me like a set-cover problem. Merge all the
-dependencies of all tests in the suite into a single, de-dup’d list, and then
-find the smallest number of devices whose label sets covered the whole she-bang.
-The problem is that this algorithm could provide a solution that leaves some
-tests unsatisfied. Consider the following example:
-
-<table>
-<tr>
-<td>Test Dependencies</td>
-<td>Host Labels</td>
-</tr>
-<tr>
-<td>\[RPM, BT, GOBI3K\]</td>
-<td>\[RPM, BT, GOBI3K\]</td>
-</tr>
-<tr>
-<td>\[RPM, BT, i5\]</td>
-<td>\[RPM, i5\]</td>
-</tr>
-</table>
-
-This algorithm would merge the test deps into \[RPM, BT, GOBI3K, i5\], and
-determine that choosing both hosts would successfully cover. The problem is that
-the second test cannot be run in this testbed, as no machine meets all its
-dependencies.
-
-## A dead-stupid first pass (read: what we've implemented so far!)
-
-Since we only have tests with a single dependency these days, we’re going to
-start by gathering all the deps of all the tests in the suite, de-duping them,
-and finding &lt;= N machines to satisfy those deps. We may try to be smart about
-how we pad out the machines to reach N, if we can. If we have 10 Gobi3K tests
-and 2 Gobi2K tests, and N == 3, then we might try to get 2 Gobi3K devices and 1
-Gobi2K, for example. If we can satisfy all tests with &lt; N devices, and cannot
-pad to reach N total devices, we’ll WARN, but continue to run the suite. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/dynamic-test-suites/index.md b/chromium/docs/website/site/chromium-os/testing/dynamic-test-suites/index.md
deleted file mode 100644
index 15bb78eca60..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/dynamic-test-suites/index.md
+++ /dev/null
@@ -1,257 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: dynamic-test-suites
-title: Dynamic Test Suites
----
-
-## Autotest Dynamic Test Suites
-
-The next iteration of CrOS testing in Autotest is more dynamic and requires
-fewer manual changes with respect to adding and disabling tests. The first pass
-at this required suites to be manually defined by hardcoding a list of tests,
-and added infrastructure to find a set of machines on which to run those tests.
-The former required manual management, and the latter can already be done by
-appropriately using autotest. Dynamic suites, in contrast, are defined by
-looking over all existing control files at runtime, and rely on the autotest
-infrastructure to shard the tests across all available, appropriate machines.
-As far as someone scheduling a BVT run is concerned, sending an RPC to the
-autotest frontend telling it to schedule ‘control.bvt’ for a certain build on a
-certain board is sufficient; all other logic exists inside of the Autotest
-frontend (AFE).
-
-### Detailed Design
-
-#### Specifying job dependencies
-
-#### This is how a single test specifies the kind of machine on which it can be run. DEPENDENCIES is just a list of labels. A machine satisfying all of them must be found in order for the job to be successfully scheduled.
-
-* #### DEPENDENCIES=‘CDMA’, ‘POWER’, ‘GOBI3K’, ‘X86’
-
-#### All current tests need to be re-evaluated and updated to encapsulate required dependencies. e.g. GSM, CDMA, POWER, GOBI3K, BLUETOOTH etc etc. For architecture-dependent tests, we can also include labels like ARM, TEGRA2, TEGRA3, X86, etc.
-
-#### Board compatibility
-
-We ultimately decided against specifically expressing which boards a test should
-and should not run on. We couldn’t come up with a reason we’d need to avoid a
-specific board or class of boards that could not be expressed with DEPENDENCIES.
-Bluetooth tests don’t apply to Alex? Well, no Alex device will have BLUETOOTH.
-ACPI tests don’t apply to ARM? Well, they’ll DEPEND on x86.
-Instead, we will rely on dynamic_suite code in the AFE to distinguish between a
-test that has unsatisfiable dependencies at the time of scheduling, and one that
-can be scheduled, but does not run in the time allotted. In the latter case, the
-job will be ABORTed. In the former case, we will fail the test with TEST_NA. In
-the Alex case above, for example, all tests with a BLUETOOTH dep will be
-TEST_NA. As a more complicated example, consider a GOBI3K test on Mario, and
-assume we have only one Mario with that modem in it. If all is well, the test
-can be scheduled in the time allowed and things are good. If the device is down,
-the AFE still knows that it should have a machine that meets the test’s
-DEPENDENCIES, but discovers that the device is not currently ready. That’s fine,
-and it schedules the test. When the time allotted for the suite is up, the test
-would be ABORTed and included as a failure in the test results.
-
-#### Job reporting
-
-For TPM’s, one can provide a view of test results per-build-per-board that shows
-all jobs that could be scheduled, and the results of those tests. Specifically,
-jobs that are TEST_NA can be ignored if the customers of the dashboard
-so-desire.
-For the lab team, we can show all jobs that we tried to schedule, so that we can
-see which jobs are getting starved and detect new, unexpected starvation.
-
-#### Defining suites
-
-\*\*\* For more updated information, please see the [Dynamic Suites Code
-Lab](/chromium-os/testing/test-code-labs/dynamic-suite-codelab).
-
-We've added a custom variable to control files called SUITE. SUITE can contain a
-comma-delineated list of arbitrary strings. Only suite names that have an
-associated control file will actually be usable in any meaningful way. By
-convention, we put all suite control files in a top-level directory called
-'test_suites', and name the files appropriately. For example,
-`test_suites/control.bvt` is the control file for the BVT suite.
-
-**This does require parser changes, and does make including upstream tests in
-our suites a bit complex. The former is not that difficult (and probably
-upstreamable). We could likely address the latter by adding a level of
-control-file-indirection, and having a site-specific file that uses SUITE and
-references the upstream test.**
-
-**We use the already-existing “EXPERIMENTAL” flag to mark tests as candidates for inclusion in a suite, and will run them along with the non-experimental tests -- but tag them separately so that results can be separated out in the final report.**
-**We considered making all test suites a query of sorts over the labels defined
-in control files (the BVT would be all SHORT, functional tests that are not
-experimental, for example), which would avoid these issues, but decided that
-this smacked too much of magical side effects for use in our primary test
-suites. However, we will provide a library of code that teams can use to create
-their own suite control files. For example, ‘kernel.soak’ could simply be a
-one-liner that found and scheduled jobs for all SHORT, MEDIUM, and LONG
-functional and stress tests in the “kernel” category.**
-
-**### The code**
-
-**#### Scheduling a suite for a given board and image**
-
-**We defined a new autotest RPC for this, with the following interface:**
-
-```none
-def create_suite_job(suite_name, board, build, pool, check_hosts=True,
-```
-
-```none
-                     num=None, file_bugs=False, timeout=24, timeout_mins=None,
-```
-
-```none
- priority=priorities.Priority.DEFAULT,
-```
-
-```none
- suite_args=None, wait_for_results=True):
-```
-
-```none
-    """
-```
-
-```none
-    Create a job to run a test suite on the given device with the given image.
-```
-
-```none
-```
-
-```none
-    When the timeout specified in the control file is reached, the
-```
-
-```none
-    job is guaranteed to have completed and results will be available.
-```
-
-```none
-```
-
-```none
-    @param suite_name: the test suite to run, e.g. 'bvt'.
-```
-
-```none
-    @param board: the kind of device to run the tests on.
-```
-
-```none
-    @param build: unique name by which to refer to the image from now on.
-```
-
-```none
-    @param pool: Specify the pool of machines to use for scheduling
-```
-
-```none
-            purposes.
-```
-
-```none
-    @param check_hosts: require appropriate live hosts to exist in the lab.
-```
-
-```none
-    @param num: Specify the number of machines to schedule across.
-```
-
-```none
-    @param file_bugs: File a bug on each test failure in this suite.
-```
-
-```none
-    @param timeout: The max lifetime of this suite, in hours.
-```
-
-```none
-    @param timeout_mins: The max lifetime of this suite, in minutes. Takes
-```
-
-```none
-                         priority over timeout.
-```
-
-```none
-    @param priority: Integer denoting priority. Higher is more important.
-```
-
-```none
-    @param suite_args: Optional arguments which will be parsed by the suite
-```
-
-```none
-                       control file. Used by control.test_that_wrapper to
-```
-
-```none
-                       determine which tests to run.
-```
-
-```none
-    @param wait_for_results: Set to False to run the suite job without waiting
-```
-
-```none
-                             for test jobs to finish. Default is True.
-```
-
-```none
-```
-
-```none
-    @raises ControlFileNotFound: if a unique suite control file doesn't exist.
-```
-
-```none
-    @raises NoControlFileList: if we can't list the control files at all.
-```
-
-```none
-    @raises StageBuildFailure: if the dev server throws 500 while staging build.
-```
-
-```none
-    @raises ControlFileEmpty: if the control file exists on the server, but
-```
-
-```none
-                              can't be read.
-```
-
-```none
-```
-
-```none
-    @return: the job ID of the suite; -1 on error.
-```
-
-```none
-    """
-```
-
-```none
-```
-
-* **Change priority:** The arg priority is an integer denoting
- priority, used by our scheduler to decide how to prioritize jobs.
- You can find all valid priority options in
- autotest_lib.client.common_lib.priorities. Currently, the priority
- ladder looks like - Weekly &lt; Daily &lt;PostBuild &lt; Default
- &lt; Build &lt; PFQ &lt; CQ.
-* **Wait or not wait for results:** Use the arg
- wait_for_results=True/False to tell the suite job whether you want
- it to wait for all test jobs to finish or not. Not waiting for the
- results can reduce the load burden to our rpc server, so it is
- recommended whenever it is possible.
-
-#### Running the suite
-
-**create_suite_job() starts by telling the dev server to fetch the image to be tested, and its associated autotest bundle, from the URL provided. Clients of autotest will no longer need to be aware of the dev server. The details of this may change going forward, but all this work will be handled by this RPC.**
-**Once the image and autotest bundle are staged on dev server, it goes through all the control files associated with the build being tested, and schedule the proper jobs. At that point, we let the autotest scheduler take responsibility for all the async scheduling/dependency scheduling. It is important that all jobs are scheduled via rpc calls with a name that associates them all together so that when we want to look at results we can aggregate them all in a query. This will allow callers (like the buildbot-autotest connection) to poll for the status of all jobs kicked off by the BVT suite control file, and eventually find and gather up results for reporting purposes** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/existing-autotest-utilities/index.md b/chromium/docs/website/site/chromium-os/testing/existing-autotest-utilities/index.md
deleted file mode 100644
index 84aed0dc999..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/existing-autotest-utilities/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: existing-autotest-utilities
-title: Existing Autotest Utilities
----
-
-This is currently a placeholder. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/gs-offloader/index.md b/chromium/docs/website/site/chromium-os/testing/gs-offloader/index.md
deleted file mode 100644
index 8e279acbdcd..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/gs-offloader/index.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: gs-offloader
-title: GS Offloader
----
-
-The gs_offloader is a crucial part of the chrome os lab infrastructure as it is
-in charge of ensuring that the drones don't run out of disk space. When we run
-jobs on the drone, we store their job results on the drone and each one
-generates at least some amount of data. However due to the number of tests we
-run and the fact that crash logs can cause the amount of data to increase
-greatly, disk space on our drones can be eaten up rather quickly. But we can't
-simply delete the job results as we may need it in the future when bugs occur or
-we discover infrastructure problems.
-
-gs_offloader solves this problem by running on its own on the drones and
-offloads the test result data to google storage for permanent storage. In a
-brief overview: gs_offloader monitors the results directory of tests and special
-tasks and for each folder in the results directory it checks if the
-corresponding job is completed. If so the gs_offloader will make system level
-calls to send this data to google storage. In general it will be using gsutil
-but rsyncing to another host is an option as well.
-
-Originally, gs_offloader offloaded both the job results and the special task
-results within the same loop. It was found that we would frequently spend a
-while offloading special task results, which are quite small, while job results,
-which are much larger, would pile up. Thus, we could either try to prioritize
-directories by size, or just run two instances of gs_offloader, one for special
-tasks and one for job results. The latter is far simpler, so it's what we
-currently have. Thus, we run two copies of gs_offloader, and the code path for
-each is slightly different but follows the same type of logic.
-
-The gs_offloader's main thread loops over the results directory and for each
-folder it uses the is_job_complete module to determine if it should offload the
-directory. is_job_complete makes an RPC call to check if that job has been
-marked as completed. If so the folder is queued up to be offloaded by the
-gs_offloader's offloading threads.
-
-The actual offloading takes place as a system level call to gsutil. This means
-that the system runninggs_offloader needs its ~/.boto file setup correctly in
-order for it to work, as that's where the credentials to access google storage
-are held. The call follows the format of gsutil -m cp -eR -a project-private
-\[folder to offloader\] gs://chromeos-autotest-results/\[folder to offloader
-relative path to results\].
-
-If offloading is going too slowly, (ie. nagios alerts are being sent out about
-the drives filling up, and the problem has been tracked down to there being too
-many job results stored locally) you can take advantage of the multi-threading
-by restarting gs_offloader to run with more offloading threads until most of the
-results are gone. By default, it only runs with one gsutil command at a time.
-This can be done by running sudo stop gs_offloader; sudo start gs_offloader
-PARALLELISM=5 to have gs_offloader have up to 5 parallel invocations of gsutil
-running at once.
-
-Due to the fact that gsutil calls can hang for hours we have a built-in timeout
-of 3 hours. This timeout is implemented by surrounding the subprocess call we
-make to kick off gsutil with a SIGALRM timer. This works by setting the SIGALRM
-timer to 3 hours, kicking off gsutil with subprocess.Popen and then waiting on
-the kicked off process. If the timeout occurs before Popen returns then we know
-we hit a timeout and log the error and send out an email warning the lab team.
-
-Since we always have the chance of the gsutil call failing we wanted to ensure
-we properly capture stdout and stderr for the process call. Therefore we
-redirect both to temp files in /tmp so if there is a failure we have the data
-and email it out. And if not we can simply delete it. The emailer code is the
-email_manager used by the scheduler in order to reduce the number of email
-clients we use for our team.
-
-It's worthwhile to note that gs_offloader is designed to be an extremely
-long-running process. This means that it'll likely be subjected to, and should
-properly handle, unusual events such as the results database being truncated,
-cautotest or cautotest-mysql moving to a different host, or other services being
-down/unavailable. The term 'thread' has also been used here lightly, the current
-implementation actually uses a wrapper around multiprocessing in chromite to do
-the parallelism, as the SIGALRM timer doesn't play well with python threading.
-
-In conclusion, the gs_offloader monitors our result repositories and sends the
-data to google storage for permanent storage. Without it our machines would fill
-up and the lab would go down making it a crucial piece of the lab
-infrastructure. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/hardware_qualification/HWQual.pdf.sha1 b/chromium/docs/website/site/chromium-os/testing/hardware_qualification/HWQual.pdf.sha1
deleted file mode 100644
index 6d9010ba745..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/hardware_qualification/HWQual.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-94a28aa9f81fa663e0b7c20d9dbf1781d3b30ba3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/hardware_qualification/index.md b/chromium/docs/website/site/chromium-os/testing/hardware_qualification/index.md
deleted file mode 100644
index bcc0d49dfc4..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/hardware_qualification/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: hardware_qualification
-title: Hardware_Qualification
----
-
diff --git a/chromium/docs/website/site/chromium-os/testing/index.md b/chromium/docs/website/site/chromium-os/testing/index.md
deleted file mode 100644
index ff0e8771c31..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/index.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: testing
-title: Testing Home
----
-
-<div class="two-column-container">
-<div class="column">
-
-## This is the home page for testing. You should find everything related to writing tests, modifying existing tests, and running tests here. Please feel free to send an email to [chromium-os-dev@chromium.org ](mailto:chromium-os-dev@chromium.org)if you have any questions.
-
-### Unit Tests
-
-We run unit tests using the Portage test FEATURE. For instructions on how to run
-and add your own unit tests, follow these
-[instructions](/chromium-os/testing/adding-unit-tests-to-the-build).
-
-### Testing Workflows
-
-Here's a description of some common [developer
-workflows](/chromium-os/testing/common-testing-workflows)
-
-When iterating on a test, you might save some time by using the
-[autotest_quickmerge](/system/errors/NodeNotFound) tool.
-
-### **Testing Components**
-
-These documents discuss test cases and (eventually) test suites.
-
-* [Power testing](/chromium-os/testing/power-testing)
-* [Touch Firmware Tests](/for-testers/touch-firmware-tests)
-* [FAFT](/for-testers/faft) (Fully Automated Firmware Tests)
-
-## Autotest
-
-[Autotest User Doc](/chromium-os/testing/autotest-user-doc) describes the
-integration of autotest into the build system, along with FAQ and specific
-descriptions of various tasks.
-
-This has additional info on how to [run the smoke test suite on a Virtual
-Machine](/chromium-os/testing/running-smoke-suite-on-a-vm-image).
-
-Before you check in a change, you should also do [a trybot run
-locally](/chromium-os/build/local-trybot-documentation), which will run unit
-tests and smoke tests in the same way that the builders do.
-
-* [AFE RPC
- Infrastructure](/chromium-os/testing/afe-rpc-infrastructure)
-* [Autoserv Packaging](/chromium-os/testing/autoserv-packaging)
-* [Collecting Stats for
- Graphite](/chromium-os/testing/collecting-stats-for-graphite)
-* [GS Offloader](/chromium-os/testing/gs-offloader)
-* [Autotest Keyvals](/chromium-os/testing/autotest-keyvals)
-* [Performance Tests and Dashboard](/chromium-os/testing/perf-data)
-
-</div>
-<div class="column">
-
-### Codelabs
-
-* [Server Side tests
- codelab](/chromium-os/testing/test-code-labs/server-side-test)
-* [Client side
- codelab](/chromium-os/testing/test-code-labs/autotest-client-tests)
-* [Dynamic suite
- codelab](/chromium-os/testing/test-code-labs/dynamic-suite-codelab)
-
-### Writing Tests & Suites
-
-* [Autotest Best
- Practices](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/best-practices.md)
- - Start here when writing any code for Autotest.
-* [Autotest Developer
- FAQ](/chromium-os/testing/autotest-developer-faq) - Working on test
- cases within Autotest.
-* [Autotest Design
- Patterns](/chromium-os/testing/autotest-design-patterns) - Recipes
- for completing specific tasks in Autotest
-* [Existing Autotest
- Utilities](/chromium-os/testing/existing-autotest-utilities) -
- Coming Soon!
-* [Using Test Suites](/chromium-os/testing/test-suites) - How to write
- and modify Test Suites
-
-### MobLab
-
-MobLab is a self-contained automated test environment running on a Chromebox.
-
-* ==[MobLab Home](/chromium-os/testing/moblab)==
-
-### Related Links
-
-* [Slides](https://docs.google.com/present/edit?id=0AXd3jph7Jzc6ZGQ4NjI1el8waGszOXZwZmI)
- for testing in Chromium OS
-* [Autotest API
- docs](https://github.com/autotest/autotest/wiki/TestDeveloper)
-
-### Design Docs
-
-* [Dynamic Test Suite
- Implementation](/chromium-os/testing/dynamic-test-suites)
-* [Test Dependencies in Dynamic
- Suites](/chromium-os/testing/test-dependencies-in-dynamic-suites)
-* [Suite Scheduler AKA Test Scheduler
- V2](/chromium-os/testing/suite_scheduler-1)
-
-## Servo
-
-Servo is a debug board for Chromium OS test and development. It can connect to
-most Chrome devices through a debug header on the mainboard.
-
-* [Servo v2](/chromium-os/servo)
-
-## Chamelium
-
-* [Chamelium](/chromium-os/testing/chamelium) automates external
- display testing across VGA, HDMI, and DisplayPort (DP).
-* [Chamelium with audio
- board](/chromium-os/testing/chamelium-audio-board) automate audio
- testing across 3.5mm headphone/mic, internal speaker, internal
- microphone, HDMI, Bluetooth A2DP/HSP, USB audio.
-* [Chamelium capturing and streaming
- tool](/chromium-os/testing/chamelium-audio-streaming) to monitor
- audio underruns.
-* [Chamelium USB audio](/chromium-os/testing/chamelium-usb-audio) to
- setup external USB audio devices
-
-</div>
-</div> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/infrastructure-components/index.md b/chromium/docs/website/site/chromium-os/testing/infrastructure-components/index.md
deleted file mode 100644
index 6dc78f7c3a9..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/infrastructure-components/index.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: infrastructure-components
-title: Infrastructure Components
----
-
-Documentation about each of the chromeOS autotest infrastructure components can
-be found here. The components are grouped into 2 categories: those that are
-"core" pieces of the infrastructure, such as the scheduler, dev servers, and
-results database; and those that are "auxiliary" pieces of infrastructure, such
-as monitoring and bug-filing systems.
-
-(**\*** = internal to Google only)
-
-**Core Infrastructure Components**
-
-* Scheduler \[[server
- admin](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/autotest-scheduler)(**\***)
- | [design doc](/system/errors/NodeNotFound)\]
-* [Dev
- server](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/dev-server)
- (**\***)
-* [Drones](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/autotest-drones)
- (**\***)
-* [DHCP
- server](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/dhcp-server)
- (**\***)
-* [Golo
- proxy](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/golo-proxy)
- (**\***)
-* [DNS
- server](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/dns-server)
- (**\***)
-* [Puppet](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/puppet)
- (**\***)
-* [Database](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/database)
- (**\***)
-* [RPM
- server](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/rpm-server)
- (**\***)
-
-**Auxiliary Infrastructure**
-
-* Monitoring systems \[[server
- admin](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/monitoring-systems)(**\***)
- | [graphite](/system/errors/NodeNotFound)\]
-* [Autotest development test
- machines](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/autotest-development-test-machines)
- (**\***)
-* [Bug filing
- system](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/bug-filing-system)
- (**\***)
-* [AFE RPC infrastructure](/system/errors/NodeNotFound)
-* [Autoserv packaging](/system/errors/NodeNotFound)
-* [Keyvals](/chromium-os/testing/infrastructure-components/keyvals)
-* [GS offloader](/system/errors/NodeNotFound)
-* [Gsutil
- setup](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/gsutil-setup)
-* Perf dashboard uploader: \[[user
- guide](https://docs.google.com/a/google.com/document/d/1zykB3eO9rXSCAv6czoha-CL8yvH4mg6GyRtaJuVOefo/edit?usp=sharing)(**\***)
- | [developer
- guide](https://docs.google.com/a/google.com/document/d/1jUe4PXCCaj1_rII7_J4uu8mLwRgglljEvCH_ssd057s/edit?usp=sharing)(**\***)\]
-* Test health monitoring \[[user
- guide](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/test-health-monitoring)(**\***)
- | [developer
- guide](https://sites.google.com/a/google.com/chromeos/for-team-members/lab2/infrastructure-components/test-health-monitoring/test-health-monitoring-developer-guide)(**\***)\] \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/infrastructure-components/keyvals/index.md b/chromium/docs/website/site/chromium-os/testing/infrastructure-components/keyvals/index.md
deleted file mode 100644
index cefb8c9500b..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/infrastructure-components/keyvals/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/infrastructure-components
- - Infrastructure Components
-page_name: keyvals
-title: Keyvals
----
-
-Job keyvals are key/value pairs, used to cache/exchange data about jobs between
-different services in autotest, via the database. There are two keyvals tables,
-afe_job_keyvals and tko_job_keyvals. Both tables have a job_id column for
-keyvals to be foreign keyed to a job. The job_id can be a suite job id if jobs
-are queued by a suite run, or test job id if the job is queued directly from
-atest/run_remote_test/autoserv.
-
-The initial job keyvals get specified as part of the arguments to the create_job
-RPC and entered into the database (into the afe_job_keyvals table). Then, before
-we go to run a job, we pull the keyvals out of the database and write them to a
-file. This is done by a class named TaskWithJobKeyvals that is a mixin that gets
-included for the Agents representing job runs. The parsing of these keyvals back
-into the database happens when the scheduler kicks off tko/parse.py to parse job
-results during the PARSING phase. tko/parse.py calls tko/db.py:insert_job(),
-which contains the call to update_job_keyvals() which does the actual job keyval
-writing. These get inserted into tko_job_keyvals, so the initial keyvals are
-always in afe_job_keyvals, and the final results in tko_job_keyvals.
-
-afe_job_keyvals stores the a job's suite and build information.
-
-tko_job_keyvals stores the test result information, including:
-
-user that requested the job
-
-job start/end time (job_started, job_queued, job_finished)
-
-perf keyvals, which are up to individual tests to create as they see fit. The
-use and lifecycle of perf keyvals is explained in detail on [a separate
-webpage](/system/errors/NodeNotFound).
-
-Importantly, the tko_job_keyvals entry for a suite job stores a dictionary
-between hashed test names and job_id-owner. After a suite job is finished,
-run_suite uses this dictionary to find out the job url for a particular test.
-The reason for this is that when a suite is started, all keyvals are keyed by
-suite job id. The test job id is set only after the test job is started. After a
-test job has finished, autoserv creates logs a keyval (for the test’s job id)
-with the hashed test name as the key and job_id-owner as the value. run_suite
-pulls the keyval from tko_job_keyval table and maps the test job to its result
-page, which is the test job page, rather than suite job page. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab-faq/index.md b/chromium/docs/website/site/chromium-os/testing/moblab-faq/index.md
deleted file mode 100644
index 631566bbc4b..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab-faq/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: moblab-faq
-title: MobLab FAQ
----
-
-\*\*\*DEPRECATED, PLEASE VISIT
-<https://www.chromium.org/chromium-os/testing/moblab> \*\*\*
-(20170714)
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/cpcon-release-notes/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/cpcon-release-notes/index.md
deleted file mode 100644
index 21a5480eafa..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/cpcon-release-notes/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: cpcon-release-notes
-title: Chrome OS Partner Console Release Notes
----
-
-August 1, 2017
-
-* Released the feature for users to filing bugs against failed CTS
- Tests. Please refer to [detailed
- instruction](https://docs.google.com/document/d/1CdbV8HtJoeNyN6cnVNhdBDGVnn7XZhn_xsiYH65VnCo/edit).
-* Released the feature for users to create CSV list for failed test
- re-run \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/Running FAFT (Fully Automated Firmware Tests) with MobLab.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/Running FAFT (Fully Automated Firmware Tests) with MobLab.png.sha1
deleted file mode 100644
index 4ca5063f8b7..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/Running FAFT (Fully Automated Firmware Tests) with MobLab.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ed3211461bed368eab683d28a28ceba2b7d12199 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/create_job_faft.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/create_job_faft.png.sha1
deleted file mode 100644
index 8e3146a76de..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/create_job_faft.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-892ab8f975f51dfa0a70695b1963e42ba2845cfa \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/index.md
deleted file mode 100644
index 2737ad69aef..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: faft-testing-with-moblab
-title: Running FAFT with MobLab
----
-
-## \*\*\*DEPRECATED, PLEASE VISIT <https://www.chromium.org/chromium-os/testing/moblab> \*\*\* (20170714)
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/servo v2 diagram.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/servo v2 diagram.png.sha1
deleted file mode 100644
index 614ef9f87d6..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/faft-testing-with-moblab/servo v2 diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-797a39463b111dae21cae1c44e0766c036019967 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/index.md
deleted file mode 100644
index 20bcde66230..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: moblab
-title: MobLab
----
-
-Moblab is a self-contained automated testing environment running on a Chromebox.
-
-It provides a similar set up to the Chrome OS lab and can be used for various
-types of automated testing including:
-
-* Device Bring up testing e.g. running BVTS and other similar tests
-* CTS
-* Component Testing
-* Others
-
-[Moblab introduction & user
-manual](https://docs.google.com/document/d/e/2PACX-1vQKDTDTQFKjNxJatFkFUSjCPdVzgry9vkLLvxL8vwqasrKMP2KReEMZ3iva9GX8EzQYo-kANnzPlFG_/pub)
-will guide you from equipment procurement to successfully run your first test.
-
-[Moblab release notes](/chromium-os/testing/moblab/releasenotes) are available
-for getting the latest version of Moblab.
-
-We also encourage all Moblab users join [Moblab
-Forums](https://groups.google.com/u/2/a/chromium.org/g/moblab-discuss) for
-discussion. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/index.md
deleted file mode 100644
index fdb1b91d28c..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: mob-monitor
-title: Mob Monitor
----
-
-## \*\*\*DEPRECATED, PLEASE VISIT <https://www.chromium.org/chromium-os/testing/moblab> \*\*\* (20170714)
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor.png.sha1
deleted file mode 100644
index 2108d68b71f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-88b8b771eddf48733a2345c131f052180e18d12b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_colours.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_colours.png.sha1
deleted file mode 100644
index ca3d426e311..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_colours.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2b991b4e807a40ea7adeaeb279e359b54054563e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_main_page.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_main_page.png.sha1
deleted file mode 100644
index f459b0db664..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_main_page.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4daf18abaa273fe23abc71a7c6de6a04bf62efca \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_repair_dialog.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_repair_dialog.png.sha1
deleted file mode 100644
index 5325eca28c8..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/mob-monitor/mobmonitor_repair_dialog.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dce4e71f0871c7c98ad03db5c5ec4699c626ce25 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image00.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image00.png.sha1
deleted file mode 100644
index da1fcfbf4d6..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image00.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2e7fb9417c85a1fcbee301a990d83c27ee276ad4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image01.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image01.png.sha1
deleted file mode 100644
index 90ae89ea2e5..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/image01.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4b1cc452ffd546fedc5b406b4d0f22c4c70dfc54 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/index.md
deleted file mode 100644
index cb7ba504734..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/overview-of-moblab/index.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: overview-of-moblab
-title: Overview of MobLab
----
-
-## \*\*\*DEPRECATED, PLEASE VISIT
-https://www.chromium.org/chromium-os/testing/moblab \*\*\*
-(20170714)
-
-## [TOC]
-
-## Introduction
-
-When qualifying a new board for release, the test engineering team for Chrome OS
-performs the following tasks:
-
-* Test and qualify firmware
-* Test the Final Shipping Image (FSI) and Auto-Update (AU) images
-* Add repeatable qualifications for components to the Approved Vendor
- List (AVL)
-
-Done manually, these tests take human testers multiple days to complete. While
-the tests cannot be performed in parallel, each one can be automated. To
-accelerate board bring-up and ensure quality, the Chrome OS team is in the
-process of automating the tests so that partners can run them on site.
-
-Testing at the partner site has numerous benefits for both partners and Google:
-
-* Shortens the feedback loop for bugs found with automated testing.
-* Enables testing on revisions of boards that Google does not have.
-* Identifies hardware defects before mass production begins.
-* Detects regressions during Final Shipping Image and AU image
- revisions.
-* Enables testing of new hardware components (e.g., replace EOL
- components or evaluate a new variant of an existing SKU, such as a
- touchscreen version).
-* Provides a channel for partners to write, run, and add tests to the
- Google framework.
-
-## What is MobLab?
-
-### Required Hardware
-
-MobLab is a test system in a box: a customized Chrome OS image loaded onto a
-Chromebox. The MobLab tests are the same tests that the Chrome OS team at Google
-runs in the Chrome OS lab. A few customizations have been added to help
-partners, like extra processes to streamline interactions with the test suite.
-
-The hardware specs for the supported Moblab platform as of Oct 1, 2015 are
-below. If your setup does not use the hardware below, our team will not be able
-to assist in troubleshooting.
-
-<table>
-<tr>
-
-<td><b>Hardware </b></td>
-
-<td><b>Specification</b></td>
-
-<td><b>Details </b></td>
-
-</tr>
-<tr>
-
-<td>Chromebox </td>
-
-<td>ASUS CN62 with Core i3 processor</td>
-
-<td><a href="https://www.asus.com/Chrome-Devices/ASUS_Chromebox_CN62/specifications/">https://www.asus.com/Chrome-Devices/ASUS_Chromebox_CN62/specifications/</a></td>
-</tr>
-<tr>
-
-<td>USB-to-ethernet adapter</td>
-
-<td>LINKSYS USB3GIG USB 3.0 GIGABIT ETHERNET ADAPTER</td>
-
-<td>---</td>
-
-<td> Apple USB Ethernet adapter</td>
-
-<td>==<a href="http://www.linksys.com/us/p/P-USB3GIG/">http://www.linksys.com/us/p/P-USB3GIG/</a>==</td>
-
-<td>OR</td>
-
-<td>==<a href="https://www.amazon.com/Linksys-Ethernet-Chromebook-Ultrabook-USB3GIG/dp/B00LIW8TBG/ref=sr_1_1?ie=UTF8&qid=1491807967&sr=8-1&keywords=linksys+usb+ethernet+adapter">https://www.amazon.com/Linksys-Ethernet-Chromebook-Ultrabook-USB3GIG/dp/B00LIW8TBG/ref=sr_1_1?ie=UTF8&qid=1491807967&sr=8-1&keywords=linksys+usb+ethernet+adapter</a>==</td>
-
-<td>---</td>
-
-<td> <a href="http://www.apple.com/tw/shop/product/MC704FE/A/apple-usb-ethernet-adapter">http://www.apple.com/tw/shop/product/MC704FE/A/apple-usb-ethernet-adapter</a></td>
-</tr>
-<tr>
-
-<td>Internal SSD</td>
-
-<td>Transcend 128 GB SATA III 6Gb/s MTS400 42 mm M.2 SSD Solid State Drive TS128GMTS400</td>
-
-<td><a href="http://www.amazon.com/Transcend-MTS400-Solid-State-TS128GMTS400/dp/B00KLTPUU0">http://www.amazon.com/Transcend-MTS400-Solid-State-TS128GMTS400/dp/B00KLTPUU0</a> </td>
-
-</tr>
-<tr>
-
-<td>Switching Hub (optional for multiple DUTs)</td>
-
-<td>Netgear GS105 Unmanaged Switch, Gigabit ethernet switch</td>
-
-<td>==https://www.amazon.com/NETGEAR-GS105NA-Ethernet-Replacement-Unmanaged/dp/B0000BVYT3/ref=sr_1_1?srs=2529990011&ie=UTF8&qid=1492454601&sr=8-1&keywords=GS105==</td>
-
-</tr>
-</table>
-
-**Additional requirement for running CTS. Due to the large size of test results
-from CTS tests that can eat up 128GB quickly. We also noticed that upgrading
-from 4GB memory to 16GB will reduce the DUT crash rate, especially when running
-CTS against x86 DUTs.**
-
-<table>
-<tr>
-<td> <b>Hardware</b></td>
-<td><b>Specification </b></td>
-<td><b>Example Details </b></td>
-<td> Comment</td>
-</tr>
-<tr>
-<td> External Hard Drive</td>
-<td> 1TB USB 3.0</td>
-<td> <a href="https://www.amazon.com/Elements-Portable-External-Drive-WDBUZG0010BBK-EESN/dp/B00CRZ2PRM/">https://www.amazon.com/Elements-Portable-External-Drive-WDBUZG0010BBK-EESN/dp/B00CRZ2PRM/</a></td>
-<td> please follow instruction<a href="/chromium-os/testing/moblab/setup#TOC-Formatting-external-storage-for-MobLab"> here </a>to label the HD correctly "MOBLAB-STORAGE".</td>
-</tr>
-<tr>
-<td> RAM</td>
-<td> 16GB</td>
-<td><a href="https://www.amazon.com/gp/product/B00J8U549K/ref=oh_aui_search_detailpage?ie=UTF8&psc=1">https://www.amazon.com/gp/product/B00J8U549K/ref=oh_aui_search_detailpage?ie=UTF8&psc=1</a></td>
-</tr>
-</table>
-
-Note: All of these components can be purchased from:
-
-Sanny Chiu
-
-Synnex Technology International Corp.
-
-Tel: 886-2-2506-3320 Ext 2033
-
-Mobile : 0919-809-819
-
-email: sannychiu@synnex.com.tw
-
----
-
-## Network Configuration
-
-This diagram shows a typical configuration of MobLab on a partner’s network:
-
-![](/chromium-os/testing/moblab/overview-of-moblab/image00.png)
-
-MobLab establishes a test subnet to isolate testing activities and machines from
-the rest of the corporate network. It handles network setup and configuration
-tasks, including requesting addresses and configuring services.
-
-The connection to the corporate network and the Internet enables automatic
-updates of the MobLab server image, as well as access to Google Cloud Storage.
-The corporate network at the partner site should provide security features
-(firewall, VPN, etc.) to protect MobLab and the test subnet from potential
-external attacks.
-
----
-
-## Advantages
-
-This section describes the advantages of setting up MobLab and running tests at
-your site.
-
-### Easy to set up and manage
-
-MobLab requires virtually no administrative overhead. Storage, network
-communication, and software updates are all managed automatically. The latest
-software is used for testing, and versions of the operating system and test
-suite are always in sync.
-
-### Full lab feature support
-
-Any Autotest suite or individual test case can be run on a single box. This
-includes test suites such as build validation tests (BVT), hardware component
-qualification tests, and custom automated tests. MobLab can run any test written
-using the Autotest framework.
-
-Depending on the type of component being tested, additional equipment may be
-required. For example, a WiFi signal is required for wireless connectivity
-tests.
-
-### Scaleable
-
-The Autotest framework enables running across multiple machines and scheduling
-tests. Simpler tools and test frameworks only support manually launching tests,
-or running them on a single machine. With Autotest, you can also define pools of
-multiple hosts, to group machines and set scheduling priorities.
-
-### Common ground
-
-Moblab provides a common platform for test infrastructure. Using the same
-hardware, software, and test builds makes communication between partners and
-Google more efficient. When issues are found, having a common platform makes it
-much quicker and easier to reproduce them.
-
-### Open source project
-
-Community support provides greater security and faster response time for
-questions and issues. Source files are available for inspection and
-customization, and partner contributions are welcome. The only feature
-unavailable to custom builds of MobLab is automatic server updates.
-
-## Summary
-
-With MobLab, partners get a robust, low-maintenance test environment where they
-can:
-
-* Run the same tests in a repeatable fashion as in the Chrome OS lab.
-* View test results.
-* Access build images for projects they are responsible for.
-* Run custom local tests that are not a part of the Chromium OS source
- tree.
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/pre-requirements-of-issue-creation/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/pre-requirements-of-issue-creation/index.md
deleted file mode 100644
index 12a751357a4..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/pre-requirements-of-issue-creation/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: pre-requirements-of-issue-creation
-title: Pre-requirements of issue creation
----
-
-Before filing an issue, please confirm you’ve completed actions below:
-
- Your moblab is using recommended equipments. (
- https://www.chromium.org/chromium-os/testing/moblab/overview-of-moblab?pli=1
- )
-
- Update Moblab to latest version and powerwashed.
-
- DUTs are loaded with test images.
-
- Moblab and DUTs are in dev mode (able to enter VT2 by Ctrl-Alt-F2).
-
- (Optional if Servo board is involved in test) DUT can reboot after
- "dut-control warm_reset:on".
-
-Please have all screenshots ready and rename to descriptions in bold.
-
-Screenshot of **Moblab admin** (
-\[YOUR_MOBLAB_IP\]/moblab_setup/#tab_id=config_Wizard )
-
-Screenshot of **Host List** (if DUT state is concerned.
-\[YOUR_MOBLAB_IP\]/moblab_setup/#tab_id=dut_manage)
-
-Screenshot of **MobMonitor**
-
-Download Moblab logs via Mob\*Monitor page by clicking "Collect Log"
-
-Now you're ready to file issue.
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/5AjtD5fj5XrBV3X.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/5AjtD5fj5XrBV3X.png.sha1
deleted file mode 100644
index 8c9600429e8..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/5AjtD5fj5XrBV3X.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d0d9002095f18af92f7d30c0dd023d5ae86ca1ca \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/65cXCzDADkz.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/65cXCzDADkz.png.sha1
deleted file mode 100644
index f33541bc1c8..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/65cXCzDADkz.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-14fd79ad54e531c6e7ec3b6ce1d362aa4bc6cca8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png.sha1
deleted file mode 100644
index 874ff265313..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-48efabe962af20395dce6ae67536ac362bdfb30c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/944NKgXvoL9ubsp.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/944NKgXvoL9ubsp.png.sha1
deleted file mode 100644
index a2624a58845..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/944NKgXvoL9ubsp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1550300cc192b14b146d124432db2b62a2478638 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_38.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_38.png.sha1
deleted file mode 100644
index 814b447d7ab..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_38.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-75e84a9b30f48a0e59d947ccec81f1f3b3471113 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_50.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_50.png.sha1
deleted file mode 100644
index e702644b41f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/Screenshot from 2014-09-02 17_21_50.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0ab3ec6ad7ba020ba122a3442f66987767023e5a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/index.md
deleted file mode 100644
index 1f306b0d027..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/index.md
+++ /dev/null
@@ -1,654 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: releasenotes
-title: MobLab Release Notes
----
-
-# The latest recovery images for Moblab:**
-
-* [Wukong (fizz) OS Recovery
- Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_14150.88.0_fizz-moblab_recovery_stable-channel_mp.bin.zip)
-* [Wyvern (puff) OS Recovery
- Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_13904.81.0_puff-moblab_recovery_stable-channel_mp-v3.bin.zip)
-
-# Mar 14th 2022: Moblab Update
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-You should reboot your Moblab to get the latest version of the software. Make
-sure no tests are running or scheduled. This update includes an update to
-the Moblab software and an update to the underlying ChromeOS version
-(ChromeOS version update will roll out gradually starting the week of March 14th);
-after the update you will be running Moblab version R-2.15.0.
-
-**Highlights**
-
-* Fix for running tests based on Python 3
-
-* New functionality to copy a build to the partner bucket in the Configuration page
-
-* Other bug fixes and improvements
-
-**UI - Manage DUTs**
-
-* Now trimming leading/trailing spaces from the key, value, pool, and label inputs
-
-* Renamed Name column to DUT
-
-**UI - DUT Detail**
-
-* Removed the obsolete Name field
-
-**UI - Update modal**
-
-* Fixed wording to point to the About page for updates
-
-**UI - MobMonitor**
-
-* Fixed the link shown when sending logs
-
-**UI - Configuration**
-
-* Copy build button on the Configuration page will allow you to copy a build to the partner bucket
-
-**Other**
-
-* Better handling of aborted jobs on Moblab restart
-
-* Fix for test migration to Python 3
-
-
-# Dec 13th 2021: Moblab Update
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-**You should reboot your Moblab to get the latest version of the software. Make
-sure no tests are running or scheduled. This update only includes an update to
-the Moblab software; after the update you will be running Moblab version
-R-2.14.0.**
-
-**Highlights**
-
-* Added new tab for running PVS test-suites
-
-**UI - DUT Detail**
-
-* Made the IP Address field visible on DUT detail page
-
-**UI - Run Suite**
-
-* Added new tab for PVS test-suites
-
-**UI - Job Detail**
-
-* Make the ID field visible
-
-**Other**
-
-* lucifer: update dockerfile to use go modules
-
-# Nov 4th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-You should reboot your Moblab to get the latest version of the software.
-*Make sure no tests are running or scheduled*. This update only includes an
-update to the Moblab software; after the update you will be running Moblab
-version R-2.13.0.
-
-**Highlights**
-
-* Added ability to access test images from the Moblab UI;
-
-**UI - Manage DUTs**
-
-* When connected DUT does not have test image the user will be given a link to copy a test image into the partner's bucket.
-
-**Other**
-
-* Various bug fixes and improvements.
-
-# Sep 30th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-This update includes an update to the underlying moblab ChromeOS version;
-after the update you will be running Chrome OS version R93-14092.55.0 and Moblab
-version R-2.12.3.
-
-[OS Recovery Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_14150.88.0_fizz-moblab_recovery_stable-channel_mp.bin.zip), in the case you need to recover your Moblab.
-
-**Highlights**
-
-* User notified of missing permissions for a board when new DUTs added;
-* New chrome OS version R93-14092.71.0;
-* Various improvements;
-
-**UI - Manage DUTs**
-
-* Banner will indicate if the account used on the Moblab is missing permissions to access builds for any newly enrolled DUT.
-
-**UI - Run Suite**
-
-* Storage qualification is now required to be run inside a pool.
-
-* A UI widget was added to Build drop down to give more info about not available builds.
-
-**UI - View Jobs**
-
-* Result logs link will point to the cloud bucket location after the deletion from the Moblab.
-
-**UI - Configuration**
-
-* Information fields have moved to the newly added About page.
-
-* The Serial Number field was renamed to Moblab Install Id to be consistent with CPCon.
-
-* The page now shows the current stable version per build targets and allows setting a global override for all build targets:
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/0QQfJtBn_oRsZdpvi85wzscyATuICRgnNhrYgyFh6_kcomH_MUyqPGndjLCiwnEBifUyGyDcSIrjeqvtPuOtE1m0gb751LvCfQ-O4B3PXj5pZ7WCA3Drw5miuVARp6msw38prx7BEw=s0"
-height=385 width=624>
-
-**UI - About**
-
-* The MAC address of the external network interface can be found on the configuration page.
-
-* CPU temperature is now displayed on the About page. Also Moblab sends the temperature back to CPCon if the remote console feature is enabled.
-
-**Other**
-
-Various bug fixes and improvements.
-
-# Aug 17th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-After the update you will be running Moblab version R-2.11.4.
-
-**Highlights**
-
-* Beta support for servo and FAFT - will be testing with selected
- partners until full general release.
-
-* CTS suite names changed when running CTS suite. Rather than cts_N
- and cts_P there is just cts and cts_hardware.
- * Most users can just select cts, there should be no difference in
- functionality.
- * cts_hardware currently runs no tests, when the Google CTS test
- team roll out that test suite they will contact the affected
- users directly.
-* Split the configuration page into Configuration / About. The version
- and update buttons are now on the About navigation tab.
-* Added an advanced section to configuration navigation, in general
- you should only make changes in Advanced if Google asks you to.
-
-# Aug 10th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-After the update you will be running Moblab version R-2.10.4.
-
-This is for a small bug fix that only affects users who are running CTS on
-builds newer than R93. If you are not
-
-running CTS on R93 or newer you do not need to update.
-
-The CL that was added is
-https://chromium-review.googlesource.com/c/chromiumos/platform/moblab/+/3086906
-
-To fix an issue where test CtsSecurityHostTestCases did not pass with an error message:
-bash: ./sepolicy-analyze: Permission denied
-
-# July 20th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-This update includes an update to the underlying moblab ChromeOS version; after
-the update you will be running Chrome OS version R91-13904.81.0 and Moblab
-version R-2.10.3.
-
-[OS Recovery Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_13904.81.0_fizz-moblab_recovery_stable-channel_mp.bin.zip), in the case you need to recover your Moblab.
-
-**Highlights**
-
-* User controlled result retention period
-
-* Moblab update notification on UI;
-
-**UI - Configuration**
-
-User controlled result retention period. New configuration parameter is
-added to allow users control the retention period of the results locally on
-the Moblab. User can set value between 1 hour and 7 days. If results are
-fully uploaded to the GC bucket, after the retention period the results are
-deleted from the Moblab.
-
-Other
-
-* Icon added on the toolbar to let the user know that there's an
- update available.
-* Also warnings added on the run suite card alerting the user of pending
- updates.
-
-* Various bug fixes and improvements.
-
-# June 21th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-After the update you will be running Moblab version R-2.9.0.
-
-**Highlights**
-
-* Auto refresh feature on view jobs page;
-
-* Added CUJ and MTBF suites;
-
-**UI - View jobs**
-
-* Add the ability to sort the jobs table.
-
-* Added auto refresh feature on view jobs page. Which is usef
-
-* Add jobs status filter for FAILED/ABORTED/SUCCEEDED in the jobs table.
-
-**UI - Run Suite**
-
-* Added additional performance CUJ and MTBF suite names to the drop down list of 'other' suites.
-
-**Other**
-
-* Fixed the bug when a new error message will auto dismiss the previous one.
-
-* Fix the container crash without a service account.
-
-* Various bug fixes and improvements.
-
-# May 17th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-This update includes an update to the underlying moblab ChromeOS version; after
-the update you will be running Chrome OS version R90-13816.75.0 and Moblab
-version R-2.8.2.
-
-[OS Recovery Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_13816.53.0_fizz-moblab_recovery_stable-channel_mp.bin.zip), in the case you need to recover your Moblab.
-
-**Highlights**
-
-* Moblab loading page on startup is added;
-
-* Cloud configuration setup is required;
-
-* Bad builds are disabled in the build version picker drop-down on Run Suite page;
-
-* New chrome OS version R90-13816.75.0;
-
-**Startup page**
-
-* Moblab now has a startup page. It is helpful in cases when loading takes a
- significant amount of time,for example the first boot after powerwash.
-
- The page will show the loading bar while the first component loads:
- <img alt="image"
- src="https://lh6.googleusercontent.com/UbCrZzPRK6aZjTEEaGF6wYph80rfQ8ETbRFncuOuiD3euy29f2xfuTB4ii78tgk4W4fu12Lu4XG09xYz8AKri8jkFfuPsiQ9alqvfjogdAmPnLtp47XRkyEgJ5MicjZzU5nQkuzu9AaBWJNF6qxo_GceRAyKVcIHpkbL6vnvxuSt33NF"
- height=205 width=624>
-
- And the status of all the components after that:<img alt="image"
- src="https://lh4.googleusercontent.com/ts0kVxdAp8rrmblexWHW5XmaOo1cJQGXuxLMZ4Pkhr9bLE3AqZUOLf0A2yUoNb0F2xZwGsM04Pd5_jq7Mxx0F1vhbIXOWSa5RuMSaalNxLZ_y5QCUN8Mi9ldkYdG7Oxd0vu7OQEkVRMzRv-kq68lIOMcbuBSesg-ZQktUj6hEbntI3Bk"
- height=432 width=624>
-
- When all the components are up and running the page will automatically
- redirect to the main page;
-
-**UI - Manage DUTs**
-
-Fix the page not refreshing when labels or attributes were adjusted. Now
-whenever label is added or removed the DUTs grid will reflect the change
-immediately;
-
-**UI - Run Suite**
-
-On the Run Suite page when selecting a build, the drop-down will show grayed
-out build versions for builds that are known to be bad. User won’t be able
-to select the build;
-
-**UI - View Jobs**
-
-Filter by name on view jobs page is now auto trimming white space around the
-input keyword and performs partial name search;
-
-**UI - Configuration**
-
-The user will be permanently redirected to the Config page until the cloud
-configuration is set.
-
-Input validation added to the user override in Known Good OS Version
-section;
-
-Fix the WiFi credentials not updating
-
-Removed warning icon on config page. Users were mislead by it assuming
-something is wrong with the setup;
-
-Internet connection status indicator fixed;
-
-**Other**
-
-Various bug fixes and improvements.
-
-# April 20th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-This update includes an update to the underlying Moblab Chrome OS version; after
-the update you will be running Chrome OS version R90-13816.53.0 and Moblab
-version R-2.7.3.
-
-[OS Recovery Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_13816.53.0_fizz-moblab_recovery_stable-channel_mp.bin.zip), in the case you need to recover your Moblab.
-
-**Highlights**
-
-* Moblab software version exposed;
-
-* Contact email become required for feedback filing;
- [b/1186115](https://bugs.chromium.org/p/chromium/issues/detail?id=1186115)
-
-* Enrolling older devices issue addressed;
-
-* New chrome OS version R90-13816.53.0;
-
-**UI - Configuration**
-
-* Configuration page along with the Chrome OS version now shows the version of
- Moblab software:
-
- <img alt="image"
- src="https://lh6.googleusercontent.com/4wjAkZpay4pKyKCyjpab2Z17N4tLnz5DfnmihZtw_WpkreNMAfcAc7z9nGBgSOo98gSmil4FhrKpaTfheI8sbSypZamOT_qnqK6Mo5pkUAr3kMHEiyYkmGQ07nYvaxmFXLoUH4D-3w"
- height=121 width=624>
-
-* Update/Force Update button also checks and applies OS updates if available.
-
-* Removed the exclamation icon from the copy of the Cloud Configuration section.
- It was confusing users.
-
-**Feedback**
-
-* Contact email is now a required field to file a feedback report from the Moblab.
-
-**Other**
-
-* New Chrome OS release version R90-13816.53.0.
-
-* The issue with enrolling older devices is fixed.
-
-* Various bug fixes and improvements.
-
-# Mar 16th 2021: Moblab Update
-
-**You should reboot your Moblab when next not running tests to get this latest version of the software.**
-
-To check you have the latest Moblab software you can just look at this text in
-the configuration page, if it says No updates found you have the latest.
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/PgHoT7JwjD9ZMnH_OWE-0QXTanlQNj2M1qghOzY67a6wgvckRDY7K1kDdWQiC15uJSTy7yikA2PeKSRfKDZbwWnPvbA3-JK7mUDO9AfeWpd8r6ioWMQEv8YD_Q3AEnVczVQbQbTXVKd3qYfjQ9EPsp7Rg0LX9hIfHfN3K0L153E8OZVm"
-height=141 width=486>
-
-Moblab checks for new versions every 1 hour.
-
-**Highlights**
-
-* The old UI has been removed.
-
-* Result Uploads use less bandwidth particularly for CTS/GTS.
-
-* StorageQual setup check has been moved to the UI.
-
-* New button to provision DUTs.
-
-**UI - Configuration Page**
-
-Stable Chrome OS version configuration
-
-Set the version of Chrome OS used during the DUT repair process.
-
-Powerwash is required to update google account configuration.
-
-If a Moblab is moved from one account to another, it must be powerwashed or the
-data will not show correctly on CPCon. This has been enforced in the Moblab UI.
-
-**UI - Manage DUT Page**
-
-* Added DUT labels to summary page
-
-* Added MAC Address to summary page
-
-* Similar to the old UI the DUT labels show up on the manage DUT page.
-
-* Added “Reverify Selected” button
-
-* Similar to the old UI you can select a set of DUTs and force a reverify. If
- verify fails then a repair will be performed. There is a quick select option for
- all "Repair Failed" DUT's
-
-* Added Provision DUT’s button
-
-* Based on user feedback we have added a button that will allow you to provision
- some or all of the DUT’s attached to the Moblab to a particular version for
- testing. This is useful for manual CTS-V testing.
-
-**UI - DUT Detail**
-
-* Added link to logs in DUT Actions History
-
-**UI - Run Suite**
-
-* Added suites hardware_thermalqual_fast / hardware_thermalqual_full
-
-* Added DUTs configuration check for Storage Qualification suite to UI.
-
-* Previously you would run a test called “check_setup_storage_qual” now the same
- logic is built into the UI so you can not run a storage qual suite without the
- correct labels/number of DUT’s
-
-**UI - View Jobs**
-
-* Upload status is now shown as an icon; a cloud icon means it has been uploaded to CPCon.
-
-**Offloader**
-
-* Faster uploads using less bandwidth
-
-* Files are now compressed before upload. CTS/GTS will not upload debug files for PASSED tests.
-
-**Other**
-
-* Various bug fixes and improvements.
-
-# Jan 30th 2021: Moblab Update**
-
-**You should reboot your Moblab when next not running test to get this latest version of the software.**
-
-There has been an bug fix update to moblab to fix one important ( but rare ) bug
-and two smaller issues.
-
-Note the OS version of moblab will not change with this update, if you want to
-make sure you have the latest version of moblab reboot, and check the configuration
-page, and make sure it says "No updates found"
-
-**Results Offloader:**
-
-Fix issue where in rare circumstances the database can get out of sync and the
-
-results get sent to CPCon before the test has actually completed: https://crbug.com/1171428
-
-**UI**
-
-Show more builds in the dropdown to select a build number:
-https://crbug.com/1157114
-
-**Remote Agent**
-
-Fix issue where disconnected devices were not showing up correctly.
-https://crbug.com/1167377
-
-# Jan 21th 2021: Moblab Update
-
-**You should reboot your Moblab to get this latest version of the software.**
-
-This update includes an update to the underlying moblab ChromeOS version; after
-the update you will be running version R87-13505.101.0
-
-[OS Recovery Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_13505.101.0_fizz-moblab_recovery_stable-channel_mp.bin.zip), in the case you need to recover your Moblab.
-
-To check you have the latest Moblab software you can just look at this text in
-the configuration page, if it says No updated found you have the latest.
-
-[<img alt="image"
-src="/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png">](/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png)
-
-Moblab checks for new versions every 1 hour.
-
-**Moblab "Pause":**
-
-This is a new feature, it allow users with particularly long running suites,
-normally storage qualification, to pause their Moblab so they can update the
-software
-
-or stop generating data if they have a particularly slow uplink to Google.
-
-It should be noted - this feature does **NOT** stop the current running tests.
-It prevents new tests from being scheduled, you can then have to wait until all
-your DUT's
-
-are in "ready" state. After then you can safely update/reboot your Moblab
-without losing data.
-
-Moblab will automatically turn on Pause feature if your disk space is getting
-low. This typically happens when your Moblab is generating data faster than your
-
-internet connection can copy it to Google. The Pause will allow time for your
-Moblab to catch up and you can unpause when there is enough disk space
-available.
-
-**Remote Console**
-
-Bug fixes and some changes to how often data is sent back to CPCon about failed
-DUT's.
-
-**Uploader**
-
-Improved performance when there are problems or slow connections, uploader will
-now only retry files that have not already been copied to the cloud rather than
-
-re-trying the copy of all the files in the in the test result.
-
-**UI**
-
-Run Suite: The "Other" Tab now has a drop down list of suites you can run. You
-can still select an option to enter a suite name that is not on the list.
-
-Other non user visible bug fixes.
-
-This likely will be the last release that includes the Old UI - we have got
-feedback on features that need to be included in the new UI and are working on
-those
-
-for the next release. We will address all feedback before the remove the Old UI.
-
-# December 7th 2020: Moblab Update**
-
-**You should reboot your Moblab to get this latest version of the software.**
-
-This is a regularly scheduled release of Moblab.
-
-To check you have the latest Moblab software you can just look at this text in
-the configuration page, if it says No updated found you have the latest.
-
-[<img alt="image"
-src="/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png">](/chromium-os/testing/moblab/releasenotes/7tG9QTai4PUH2ue.png)
-
-Moblab checks for new versions every 1 hour.
-
-Manage DUT’s:
-
- Launch beta of firmware inspect/update.
-
- You can now view the current firmware version of all the current
- attached DUT’s. The version in the updater package is also shown and you
- can choose to update the firmware to that version if you wish. This is
- still a beta feature please file bugs / ask questions if you have
- issues.
-
-[<img alt="image"
-src="/chromium-os/testing/moblab/releasenotes/944NKgXvoL9ubsp.png">](/chromium-os/testing/moblab/releasenotes/944NKgXvoL9ubsp.png)
-
-**Configuration:**
-
-* Added checkbox for remote command. If you are not a CTS 3PL you can ignore
- this setting, It is only useful to a few CTS 3PL labs.
-
-**Run Suite:**
-
-* Added Storage Qualification V2 - Do not run unless requested to do so by Google.
-
-* Added CTS R - Do not run unless requested to do so by Google.
-
-**General:**
-
-* There is a warning message on the old UI, we are going to remove that UI in
- January. Please file bugs if you still need to use it.
-
-* Force all web traffic from browser to Moblab to go through port 80, if you
- are sending the "New UI" over SSH this will make things simpler.
-
-* Add logs links to the View Jobs table.
-
-**MobMonitor:**
-
-* Show an unhealthy state if the service account is missing, allows you to fix
- this error.
-
-* Show warning if any Moblab process is not running. Example this can show if
- offloader has failed.
-
-**Remote Agent:**
-
-* Fix for issues with network speeds being incorrectly reported.
-
-There are many other bug fixes and small improvements.
-
-# October 21st 2020 Moblab Update: ChromeOS Update, Remote Console
-
-**To intake this update, please find the update button on the new UI
-[here](https://docs.google.com/document/d/e/2PACX-1vQ050-Fo1n2m0bYLE7r6LPxrnwEet7QtqGNcoqWJ4TQL5TURmdy9DforpOpteIovznUDyl0NrmSIQv5/pub#h.531gwuswnjb4).
-This change will require a reboot to be applied. Please wait until all tests are
-complete before applying this change. This change includes revisions to the new
-UI which may require a [cache
-clear](https://docs.google.com/document/u/1/d/e/2PACX-1vQ050-Fo1n2m0bYLE7r6LPxrnwEet7QtqGNcoqWJ4TQL5TURmdy9DforpOpteIovznUDyl0NrmSIQv5/pub#h.bd548te0mfe6)
-to be seen.**
-
-**This update includes an update to the underlying moblab ChromeOS version; after the update you will be running version R86-13421.72.0**
-
-**This update also introduces [remote console](https://docs.google.com/document/d/1FqL1VzOmbGb_0ACQmVjev2fqSGOoFA7YCWIiDX8t7fc/view) functionality, which allows more Moblab/DUT information to be uploaded and summarized in CPCon ( additional information in the link above ). Instructions on how to enable the remote console can be found [here](https://docs.google.com/document/d/1FqL1VzOmbGb_0ACQmVjev2fqSGOoFA7YCWIiDX8t7fc/edit#heading=h.lypza0y6rfc8).**
-
-**Bugfixes:**
-
-Fix to run-suite page occasionally not starting suite + not showing error. -
-<https://crbug.com/1137063>
-
-Fix to run-suite page to only show compatible build target or model selection. -
-<https://crbug.com/1137063>
-
-Fix so that OAuth credentials are refreshed on configuration changes. -
-<https://crbug.com/1136552>
-
-Fix for issue with remote commands not firing. **- <http://crbug.com/1140613>**
-
-## [OS Recovery Image](https://storage.googleapis.com/moblab-recovery-images/chromeos_13421.72.0_fizz-moblab_recovery_stable-channel_mp.bin.zip) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob1.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob1.png.sha1
deleted file mode 100644
index 91bdbda612a..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-54a8b3361bdd733b9cf2838d756fec951d15a1f1 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob2.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob2.png.sha1
deleted file mode 100644
index 728eaf97dc3..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/releasenotes/mob2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-11ed451f442b1e390f3088fe719c681ca594877b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_38.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_38.png.sha1
deleted file mode 100644
index 814b447d7ab..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_38.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-75e84a9b30f48a0e59d947ccec81f1f3b3471113 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_50.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_50.png.sha1
deleted file mode 100644
index e702644b41f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Screenshot from 2014-09-02 17_21_50.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0ab3ec6ad7ba020ba122a3442f66987767023e5a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_968.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_968.png.sha1
deleted file mode 100644
index 8593d195232..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_968.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6219c2bc8bb6a2bbe46eea78a6312736f599ac51 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_970.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_970.png.sha1
deleted file mode 100644
index 4b227fb64fa..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_970.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b28e89b8fd137389e92d0a49e51a99df1c0182e5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_971.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_971.png.sha1
deleted file mode 100644
index f2bda970ea3..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_971.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9c01b3383255aa2a5a418130c6cb86a5baa0ff03 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_972.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_972.png.sha1
deleted file mode 100644
index 81d216eb11e..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_972.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-787e14e5a6f60455c80df3c4dba21a86dbb4188a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_973.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_973.png.sha1
deleted file mode 100644
index 8bd0385ca78..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/Selection_973.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ae2de845d00e0c2cd031f494f583b61ebd0aa7f1 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image00.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/image00.png.sha1
deleted file mode 100644
index b4f17943a9e..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image00.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c6c1cba613ec20230ac294f4265b6113dd0349f5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image01.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/image01.png.sha1
deleted file mode 100644
index d6489d56697..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image01.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2476adfeb93b85f29b6c5557f6409981fad89458 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image02.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/image02.png.sha1
deleted file mode 100644
index 044eef3fd82..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image02.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e410508b9e6d1cf52208b86d3539e655ae301d8c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image03.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/setup/image03.png.sha1
deleted file mode 100644
index d0b2ce5eecd..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/image03.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6e2e63baae00b8392743badc864ed8d3495a6833 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/setup/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/setup/index.md
deleted file mode 100644
index 8e2938defb0..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/setup/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: setup
-title: Untitled
----
-
-\*\*\*DEPRECATED, PLEASE VISIT
-
-<https://www.chromium.org/chromium-os/testing/moblab>
-
-\*\*\* (20170714)
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/user-manual/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/user-manual/index.md
deleted file mode 100644
index 54bfe873b7b..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/user-manual/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: user-manual
-title: User Manual
----
-
-<img alt="image"
-src="http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D999'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Include+gadget+(iframe)%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D1000'%3D1797'dim'%5C%3D10'%3D10'%3D1000'%3D1797'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&sig=NJMq1swpx7nAn9pHvu9O4k5edZ4"
-height=1800 width=1000> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_945.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_945.png.sha1
deleted file mode 100644
index 6341e2061e8..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_945.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-05ec3034bf61b3ddc821047e3d66db5a2b500132 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_946.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_946.png.sha1
deleted file mode 100644
index 22d26ae2e14..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/Selection_946.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e809ee74daa3282c8a842d99d3a597099ec745b1 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image00.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image00.png.sha1
deleted file mode 100644
index 03ec726e129..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image00.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d667a9360021a98227c482dfdc2cea1f31765798 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image01.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image01.png.sha1
deleted file mode 100644
index feeed88da52..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image01.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dc0e3f612fcb697c92d8b1cb516ef236b5aed63a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image02.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image02.png.sha1
deleted file mode 100644
index f079ee61b70..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image02.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9e33b9a63ef2266832ed2040a9c11d7205a9ab79 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image03.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image03.png.sha1
deleted file mode 100644
index 5a8b37fd934..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/image03.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d47ca3d3f57f48aa51ffac6cab7ae393b4d34e5e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/index.md
deleted file mode 100644
index 682a573baa3..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/usingmoblab/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: usingmoblab
-title: Using MobLab
----
-
-\*\*\*DEPRECATED, PLEASE VISIT
-<https://www.chromium.org/chromium-os/testing/moblab> \*\*\*
-(20170714)
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png.sha1
deleted file mode 100644
index 682ff928c2c..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c42d7589436b2dea5200f530b59a0d383d85937c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png.sha1
deleted file mode 100644
index d90dd179e2f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-92fff357b0e73955436c513521e43378e3b3a533 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png.sha1
deleted file mode 100644
index 1b8e88547fe..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1839bc78e709f6b167944937eb81faed31829e78 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png.sha1 b/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png.sha1
deleted file mode 100644
index d861fb71848..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a8d4fa2c96b5ae01ee8c0488c928d41d2f5710c0 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/index.md b/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/index.md
deleted file mode 100644
index a65f67ff7eb..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/moblab/view-test-result-vis-wmatrix/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/moblab
- - MobLab
-page_name: view-test-result-vis-wmatrix
-title: View Test Result via WMatrix
----
-
-\*\*\*DEPRECATED, PLEASE VISIT
-https://www.chromium.org/chromium-os/testing/moblab \*\*\*
-(20170714)
-
-Starting with M52, Moblab AFE UI will have a link to WMatrix, which will present
-a better test result viewing UI for Moblab users.
-
-![](/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_980.png)
-
-The Test Results UI might look a little overwhelming. It includes all tests that
-currently existing in Chrome OS autotest.git. But might not be relevant to
-Partners initially. We recommend to start with 'Suite List" in the "Quick links"
-section.
-
-![](/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_982.png)
-
-Depends on the type of test suites you have run on your moblab unit, the type of
-suite in the subsequent screens may differ. You may have faft, storage qual,
-bvt, cts tests show up. Here is one example from our faft tests. From here you
-could drill down further to see aggregated test results.
-
-![](/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_978.png)
-
-Aggregated test results of one particular suites across build and devices. Here
-is a simple example of one device and one build test results. If you have your
-mouse hover over the "red" section on the right hand side, you will see all the
-failed tests associated with runs on that build (R52-8350.69.0). Clicking on the
-red "1" in the screen below will lead you to the detailed failure screen so you
-can investigate further.
-
-NOTE: If you are running a build that is old, you might see an empty UI when you
-click on the Suite Name from screen shown earlier. One work around is to add
-"&days_back=15" (or whatever days you know that are required to get to your
-build comparing to today's build) to see the result. We are aware of this flaw
-and working on a fix for next release.
-
-[](/chromium-os/testing/moblab/view-test-result-vis-wmatrix/Selection_977.png)
diff --git a/chromium/docs/website/site/chromium-os/testing/perf-data/index.md b/chromium/docs/website/site/chromium-os/testing/perf-data/index.md
deleted file mode 100644
index 6e74c67d521..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/perf-data/index.md
+++ /dev/null
@@ -1,371 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: perf-data
-title: 'User Guide: Chrome OS Performance Tests and the Chrome Performance Dashboard'
----
-
-[TOC]
-
-## Summary/Quick Start
-
-If you have a performance autotest (either a wrapper around a Telemetry test for
-measuring chrome performance, or a more Chromium OS-specific performance
-autotest) and you want any of its measured perf values displayed as graphs on
-the [performance dashboard](https://chromeperf.appspot.com/), you should
-complete the following high-level steps. More details for each of the steps
-below are provided later in this document.
-
-1. Output your perf data in the test. Have your autotest invoke
- self.output_perf_value() for each measured perf value that you want
- displayed on the perf dashboard.
-2. Specify presentation settings. Associate your test with the proper
- sheriff rotation. Also decide if you need to override any of the
- other default presentation settings for your perf graphs on the
- dashboard. To do so, add an entry for your perf test to the
- [perf_dashboard_config.json](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/tko/perf_upload/perf_dashboard_config.json)
- file to specify your sheriff rotation and custom presentation
- settings.
-3. Let the test run a few times. Wait for your test to run a few times
- in the autotest lab so that some measured perf data can be sent to
- the perf dashboard. Autotest automatically uploads measured perf
- data to the perf dashboard as soon as perf test runs complete in the
- lab.
-4. **Notify chrome-perf-dashboard team for regression analysis and
- alerts (Not required)**. If you want to have the perf dashboard
- analyze your data for regressions, you should request to have your
- data monitored. To do this, you can send a monitoring request by
- [clicking
- here](https://code.google.com/p/chromium/issues/entry?summary=Monitoring%20Request&comment=Please%20add%20monitoring%20for%20the%20following%20tests%3A%0A%0ABuildbot%20master%20name%3A%0ATest%20suite%20names%3A%0ARestrict%20to%20these%20specific%20traces%20(if%20any)%3A%0AEmail%20address%20and%2For%20url%20of%20sheriff%20rotation%3A%20%0AReceive%20individual%20email%20alerts%20immediately%20or%20as%20a%20daily%20summary%3F%0AShould%20these%20alerts%20be%20Google-internal%3F%0A&labels=Performance-Dashboard-MonitoringRequest%2CRestrict-View-Google&cc=)
- or send a message to chrome-perf-dashboard-team@google.com.
-5. See your perf graphs on the dashboard. Navigate in your browser to
- the perf dashboard, log in with your @google.com account (perf data
- is internal-only by default), and then locate and view the perf
- graphs for your test on the dashboard.
-
-## The Performance Dashboard
-
-The Chromium OS team will be using the same performance dashboard that Chrome
-team uses, which is available here:
-
-<https://chromeperf.appspot.com/>
-
-Reasons for sharing Chrome team's dashboard include:
-
-* Integration with existing tools for automated detection of
- performance test result anomalies.
-* Shared codebase; no need for Chromium OS team to develop/maintain
- its own dashboard.
-* More consistency in presenting/viewing performance data across
- multiple chrome products, from desktop to Chromium OS to mobile.
-
-The source code for the dashboard is Google internal-only. Performance test data
-is organized around several main concepts on the dashboard:
-
-* **Test**: This refers to a single measured performance metric, and
- it is typically described as either “test_name/metric_name” or
- “test_name/graph_name/metric_name”, the latter of which is used when
- multiple metrics are to be displayed on the same graph.
-* **Bot**: This refers to a platform that is running a test. For
- Chrome OS, it may be something like “cros-lumpy” or “cros-alex”.
- Each bot may have multiple tests associated with it.
-* **Master**: This refers to a logical group of bots that are running
- tests and are monitored by perf sheriffs. The name “Master” comes
- from Chrome Buildbot, which has a concept called a master. Perf
- sheriffs monitor the test results associated with particular
- masters. For Chrome OS tests that do not run in Chrome Buildbot,
- this should be a string describing the top-level category which this
- test should be associated with, e.g. ChromeOSPerf.
-
-The dashboard itself is externally-visible, but supports internal-only data that
-can only be viewed if logged into the dashboard with an @google.com account.
-Data is either internal or external on a per-bot basis. By default, data
-associated with a bot is considered to be internal-only until it is [explicitly
-allowed](https://chromeperf.appspot.com/bot_whitelist) to be visible externally
-(i.e., without having to login to the dashboard).
-
-To see performance graphs from the front page of the dashboard, click on the
-“Performance Graphs” link in the top menu, or else directly navigate to
-<https://chromeperf.appspot.com/report>. There, you will see a few dropdowns
-that let you specify what graph data you want to see. First, select the test
-name from the left-most dropdown. Next, select the bot name from the next
-dropdown (bots are sorted alphabetically by name under the master to which they
-belong). Finally, select the metric name (or graph name) from the right-most
-dropdown to see the selected performance graph.
-
-> *Example*: We'll take a look at the sunspider benchmark results on lumpy.
-> First navigate to <https://chromeperf.appspot.com/report>. In the “Select a
-> test suite” dropdown, click on “sunspider”. Next, in the “Select bots”
-> dropdown, under the “ChromiumPerf” master category, click on “cros-lumpy”. A
-> new dropdown will appear that shows the default metric for this benchmark,
-> which is “Total”. The page will also display the graph for the “Total” metric.
-> If you click on the “Total” dropdown, you can view the other metrics measured
-> by this test. Click on another one, say “3d-cube”, to see the graph for that
-> metric.
-
-If you don't see your data, you may need to log into the dashboard with your
-@google.com account (see the “Sign in” link on the top-right of the page). This
-will allow you to also see the internal-only test data.
-
-If you still don't see your data, check to make sure your data is getting
-uploaded to the dashboard in the first place. Make sure "results-chart.json"
-file in your autotest result directory contains valid values
-
-## Instructions for Getting Data onto the Perf Dashboard
-
-### Output your perf data in the test
-
-In order to get your test's measured perf data piped through to the perf
-dashboard, you must have your test invoke self.output_perf_value() for every
-perf metric measured by your test that you want displayed on the perf dashboard.
-
-The output_perf_value function is currently defined
-[here](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/client/common_lib/test.py).
-Here is the function definition:
-
-def output_perf_value(self, description, value, units=None,
-
-higher_is_better=True, graph=None):
-
-"""
-
-Records a measured performance value in an output file.
-
-The output file will subsequently be parsed by the TKO parser to have
-
-the information inserted into the results database.
-
-@param description: A string describing the measured perf value. Must
-
-be maximum length 256, and may only contain letters, numbers,
-
-periods, dashes, and underscores. For example:
-
-"page_load_time", "scrolling-frame-rate".
-
-@param value: A number representing the measured perf value, or a list
-
-of measured values if a test takes multiple measurements.
-
-Measured perf values can be either ints or floats.
-
-@param units: A string describing the units associated with the
-
-measured perf value. Must be maximum length 32, and may only
-
-contain letters, numbers, periods, dashes, and underscores.
-
-For example: "msec", "fps", "score", "runs_per_second".
-
-@param higher_is_better: A boolean indicating whether or not a "higher"
-
-measured perf value is considered to be better. If False, it is
-
-assumed that a "lower" measured value is considered to be
-
-better.
-
-@param graph: A string indicating the name of the graph on which the perf value
-will be subsequently displayed on the chrome perf dashboard. This allows
-multiple metrics be grouped together on the same graphs. Defaults to None,
-indicating that the perf value should be displayed individually on a separate
-graph.
-
-"""
-
-Example: Suppose you have a perf test that loads a webpage and measures the
-frames-per-second of an animation on the page 5 times over the course of a
-minute or so. We want to measure/output the time (in msec) to load the page, as
-well as the 5 frames-per-second measurements we've taken from the animation.
-Suppose we've measured these values and have them stored in the following
-variables:
-
-page_load = 173
-
-fps_vals = \[34.2, 33.1, 38.6, 35.4, 34.7\]
-
-To output these values for display on the perf dashboard, we need to invoke
-self.output_perf_value() twice from the test, once for each measured metric:
-
-self.output_perf_value("page_load_time", page_load, "msec",
-
-higher_is_better=False)
-
-self.output_perf_value("animation_quality", fps_vals, "fps")
-
-For the “animation_quality” metric, the perf dashboard will show the average and
-standard deviation (error) from among all 5 measured values. Note that the
-“higher_is_better” parameter doesn't need to be specified for
-“animation_quality”, because it defaults to True and a higher FPS value is
-indeed considered to be better.
-
-Autotest
-[platform_GesturesRegressionTest](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/client/site_tests/platform_GesturesRegressionTest/platform_GesturesRegressionTest.py)
-is an example of a real test that invokes self.output_perf_value().
-
-It's assumed that every perf metric outputted by a test will have a unique
-“description”, and you need to invoke self.output_perf_value() once for each
-perf metric (unique description) measured by your test.
-
-In some cases, a test may take multiple measurements for a given perf metric.
-When doing so, the test should output all of these measurements in a list for
-the “value” parameter. The autotest infrastructure will automatically take care
-of computing the average and standard deviation of these values, and both of
-those values will be uploaded to the perf dashboard (standard deviation values
-are used by the perf dashboard to represent “errors in measurement”, and these
-errors are depicted in the graphs along with the average values themselves).
-
-### Group multiple performance metrics into one graph
-
-You can group multiple metrics into one graph by passing a graph name via
-argument "graph". The value of "graph" defaults to None, indicating each
-performance metric to be displayed on a separate graph.
-
-As an example, suppose we have an autotest called “myTest” that outputs 4 perf
-metrics, with descriptions “metric1”, “metric2”, “metric3”, “metric4”. And we
-want "metric1" and "metric2" to be displayed on a graph called "metricGroupA";
-and "metric3" and "metric4" to be displayed on a graph called "metricGroupB". We
-need to call self.output_perf_value()in the following way.
-
-> output_perf_value(description="metric1", units=.., higher_is_better=..,
-
-> graph='metricGroupA')
-
-> output_perf_value(description="metric2", units=.., higher_is_better=..,
-
-> graph='metricGroupA')
-
-> output_perf_value(description="metric3", units=.., higher_is_better=..,
-
-> graph='metricGroupB')
-
-> output_perf_value(description="metric4", units=.., higher_is_better=..,
-
-> graph='metricGroupB')
-
-### Specify presentation settings
-
-#### Required
-
-The perf dashboard requires perf data to be sent with a "master name". The term
-"master" is used because this originally referred to the Chrome Buildbot master
-name, but for Chrome OS tests that aren't run by Chrome Buildbot, "master"
-should describe the general category of test, e.g. ChromeOSPerf or ChromeOSWifi.
-We generally recommend just use "ChromeOSPerf" for Chrome OS tests.
-
-Once you have determined the appropriate “master” name, add a new entry to the
-file
-[perf_dashboard_config.json](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/tko/perf_upload/perf_dashboard_config.json)
-to specify this. This JSON config file specifies the master name and any
-overridden presentation settings. It is formatted as a list of dictionaries,
-where each dictionary contains the config values for a particular perf test
-(there should be at most one entry in the config file for any given perf test).
-The dictionary for a test in the JSON file must contain, at a minimum, an
-“autotest_name” and a “master_name”:
-
-* “**autotest_name**”: The string name of the autotest associated with
- this config file entry. Must match the actual autotest name.
- Required.
-* “**master_name**” : A string describing the top-level category which
- this test should be associated with, for example ChromeOSPerf
- (recommended) or ChromeOSWifi. Required.
-
-#### Optional
-
-By default, without overriding any of the default presentation settings, the
-name of the test on the dashboard will be the same as the autotest name. If you
-need to change the name of the test as it appears on the dashboard then you need
-to add "dashboard_test_name" to your test's entry in the file
-perf_dashboard_config.json.
-
-* “**dashboard_test_name**”: The string name you want to use for this
- test on the dashboard. Optional: only specify if you don't want to
- use the autotest name itself. Typically, you probably won't want to
- override this. However, it's required by the Telemetry performance
- benchmarks, which are given names like “telemetry_Benchmarks.octane”
- in autotest, but which are simply called names like “octane” on the
- perf dashboard as per convention by chrome team.
-
-### Verify your test and changes
-
-Important: Whenever you make any changes to perf_dashboard_config.json, make
-sure to also run the unit tests in that directory before checking in your
-changes, because those tests run some sanity checks over the JSON file (e.g., to
-make sure it's still parseable as proper JSON). You can invoke the unit test
-file directly:
-
-&gt; python perf_uploader_unittest.py.
-
-You could also check your autotest result folder. Look for a file called
-"results-chart.json". This is an intermediate JSON file which contains data that
-will be later uploaded to the dashboard. Manually check whether this file looks
-correct.
-
-### Let the test run a few times
-
-Once you've modified your test to invoke self.output_perf_value() where
-necessary, you've specified a sheriff rotation name (“master” name) for your
-test, and you've overridden the default presentation settings on the perf
-dashboard if you choose to do so, you're now ready to start getting that perf
-data sent to the perf dashboard.
-
-Check in your code changes and ensure your test starts running in a suite
-through the autotest infrastructure. Perf data should get uploaded to the perf
-dashboard as soon as each run of your autotest completes.
-
-### Notify chrome-perf-dashboard-team@ for regression analysis and alerts (Not required)
-
-If you want to have the perf dashboard analyze your data for regressions, you
-should request to have your data monitored. You can provide an email address to
-receive alerts.
-
-To notify chrome-perf-dashboard-team@, please [**click
-here**](https://code.google.com/p/chromium/issues/entry?summary=Monitoring%20Request&comment=Please%20add%20monitoring%20for%20the%20following%20tests%3A%0A%0ABuildbot%20master%20name%3A%0ATest%20suite%20names%3A%0ARestrict%20to%20these%20specific%20traces%20(if%20any)%3A%0AEmail%20address%20and%2For%20url%20of%20sheriff%20rotation%3A%20%0AReceive%20individual%20email%20alerts%20immediately%20or%20as%20a%20daily%20summary%3F%0AShould%20these%20alerts%20be%20Google-internal%3F%0A&labels=Performance-Dashboard-MonitoringRequest%2CRestrict-View-Google&cc=)
-to file a "Monitoring Request" bug with the label "Performance-Dashboard" with
-the following info. Or send an email to chrome-perf-dashboard-team@google.com
-
-> Please add monitoring for the following tests:
-
-> Buildbot master name: &lt;"master_name" you've specified in
-> perf_dashboard_config.json, e.g. "ChromeOSPerf"&gt;
-
-> Test suite names: &lt;"dashboard_test_name" if you have one, otherwise just
-> put "autotest_name", e.g. "platform_GesturesRegressionTest"&gt;
-
-> Restrict to these specific traces (if any): &lt;Your choice&gt;
-
-> Email address and/or url of sheriff rotation: &lt;Email who will be monitoring
-> the perf data.&gt;
-
-> Receive individual email alerts immediately or as a daily summary? &lt;Your
-> choice&gt;
-
-> Should these alerts be Google-internal? &lt;Your choice&gt;
-
-### See your perf graphs on the dashboard
-
-Once you're sure your test has run at least a few times in the lab, navigate in
-your browser to the [perf dashboard](https://chromeperf.appspot.com/) and look
-for your perf graphs. Refer to the earlier section in this document called “The
-Performance Dashboard” for an overview of the dashboard itself, and how to look
-for your data there.
-
-## Triage issues
-
-1. Make sure your test has run at least a few times in the lab
-2. Make sure there is an entry for your test in the file
- [perf_dashboard_config.json](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/tko/perf_upload/perf_dashboard_config.json)
- 1. If in the control file, the test is run in the following way
- job.run_test('dummy_Pass', tag="bluetooth")
- then in perf_dashboard_config.json, the field "autotest_name" should
- look like "dummy_Pass.bluetooth". **Make sure the tag is included.**
- 2. If perf_dashboard_config.json is modified, the change needs to
- be pushed to our production servers (please contact
- chromeos-lab-infrastructure@ team)
-3. Check the content in "perf_measurement" in the test's result
- directory. Make sure there is data and they look right.
-4. Check the logs in ".parse.log" in the test's result directory for
- error messages related to perf uploading. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/perf-regression-detection/index.md b/chromium/docs/website/site/chromium-os/testing/perf-regression-detection/index.md
deleted file mode 100644
index e60f9735984..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/perf-regression-detection/index.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: perf-regression-detection
-title: Regression Detection for Performance Tests
----
-
-This page describes the automated regression detection tool for ChromeOS
-performance tests. The tool is located at
-src/third_party/autotest/files/client/common_lib/perf_expectations.
-
-## 1. Introduction
-
-**perf_expectations.json** is the place where perf expectations are specified.
-Each expectation is key-value pair. The key is formated as
-"BOARD_NAME/TEST_NAME/TRACE_NAME", for example,
-"lumpy/desktopui_PyAutoPerfTests/FPS_ScrollTextPage". The value is a dictionary
-like: {"improve":"50.32", "regress": "43.23", "better": "lower"}
-
-"better": the value for this field is "lower" or "higher", indicating whether
-
-this is a "higher-is-better" or "lower-is-better" case.
-
-"improve": for "higher-is-better" case, if the actual perf value is higher than
-it, improvement is identified.
-
-for "lower-is-better" case, if the actual perf value is lower than it,
-improvement is identified.
-
-"regress": for "higher-is-better" case, if the actual perf value is lower than
-it, regression is identified.
-
-for "lower-is-better" case, if the actual perf value is higher than it,
-regression is identified.
-
-**expectation_checker.py** provides APIs that can be called at the end of a
-performance test. The checker compares actual performance values against
-expectations that are specified in perf_expectations.json.
-
-## 2. How to decide the baseline
-
-Currently, we need to manually figure out the values of "improve" and "regress"
-for each expectation. One strategy could be reasoning the baseline from a
-recent-look-good performance result. For example, for
-"lumpy/desktopui_PyAutoPerfTests/FPS_ScrollTextPage",
-
-the most recent result is 353.17. We decide to allow 15% tolerance. Then we can
-calculate the "improve" value as 353.17 \* (1 + 0.15) = 406.1455. Similarly, the
-"regress" value can be calculated as 353.17 \* (1 - 0.15) = 300.1945.
-
-## 3. How to modify a test to detect regression.
-
-At the end of a performance test, initialize a perf_expectation_checker and then
-call perf_expectation_checker.compare_multiple_traces(...) to compare actual
-performance values with pre-defined expectations. By defaults,
-perf_expectations.json under the same folder of this file will be used.
-
-Example:
-
-At the end of
-'src/third_party/autotest/files/client/site_test/desktopui_PyAutoPerfTests/desktopui_PyAutoPerfTests.py:run_once()',
-you can add the following code to detect regression/improvement:
-
-` checker = expectation_checker.perf_expectation_checker(`
-
-` "desktopui_PyAutoPerfTests")`
-
-` result = checker.compare_multiple_traces(perf_dict)`
-
-` if result['regress']:`
-
-` raise error.TestFail('Pyauto perf tests regression detected: %s' %`
-
-` result['regress'])`
-
-` if result['improve']:`
-
-` raise error.TestWarn('Pyauto perf tests improvement detected: %s' %`
-
-` result['improve'])`
-
-## 4. Notes
-
-The idea of this tool is adopted from the automated regression detection tool
-for Chrome. Related information can be found at:
-
-http://www.chromium.org/developers/tree-sheriffs/perf-sheriffs
-
-http://src.chromium.org/viewvc/chrome/trunk/src/tools/perf_expectations
-
-Ideally, the expectation checker should work the same way as the tool for
-Chrome. It currently has fewer features. In the future, like what Chrome team
-does, we can add a script, e.g. "make_expectations.py" which automatically
-reasons the thresholds values ("improve" and "regress") and update
-perf_expectations.json. We will need to add some additional fields in a
-expectation so that it will look like the following:
-
-`"lumpy/desktopui_PyAutoPerfTests/FPS_ScrollTextPage": `
-
-` {"builda": "R23-2804.0.0", "buildb": "R23-2811.00", "improve": "50.32",
-"regress": "43.23",`
-
-` "better": "lower", "tolerance":"0.05", "sha1": "xd3234sdf32s"}`
-
-When we want to adjust the baseline, we will first figure out a build number
-range (builda, buildb) for which the performance results look good. Then we will
-run make_expectaions.py to automatically update the values of "improve" and
-"regress". Please refer to
-
-http://src.chromium.org/viewvc/chrome/trunk/src/tools/perf_expectations/make_expectations.py
-to see how the idea is currently working for Chrome. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/index.md b/chromium/docs/website/site/chromium-os/testing/power-testing/index.md
deleted file mode 100644
index cf492dc6f51..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: power-testing
-title: Power testing
----
-
-This documentation now lives
-[here](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/refs/heads/main/client/site_tests/power_LoadTest/README.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/index.md b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/index.md
deleted file mode 100644
index 60e97ad713f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/power-testing
- - Power testing
-page_name: pltp
-title: PLTP
----
-
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetp b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetp
deleted file mode 100644
index f9e2586e085..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetp
+++ /dev/null
@@ -1 +0,0 @@
-chr0m30sm33tt3st!
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetu b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetu
deleted file mode 100644
index 95ea0344a3c..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/meetu
+++ /dev/null
@@ -1 +0,0 @@
-chromeosmeet@lotsoffroggies.com
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltg b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltg
deleted file mode 100644
index 0ca95142bb7..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltg
+++ /dev/null
@@ -1 +0,0 @@
-True
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp
deleted file mode 100644
index 8362e5c95aa..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp
+++ /dev/null
@@ -1 +0,0 @@
-yxLl06_rWwYC
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp_rand b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp_rand
deleted file mode 100644
index 260db6d0750..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltp_rand
+++ /dev/null
@@ -1 +0,0 @@
-CBhz2I*2pB+eUD
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu
deleted file mode 100644
index 0afb3723897..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu
+++ /dev/null
@@ -1 +0,0 @@
-powerloadtest20200621@gmail.com
diff --git a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu_rand b/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu_rand
deleted file mode 100644
index 4964ac24bac..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/power-testing/pltp/pltu_rand
+++ /dev/null
@@ -1,20 +0,0 @@
-powerloadtest2022.001@gmail.com
-powerloadtest2022.002@gmail.com
-powerloadtest2022.003@gmail.com
-powerloadtest2022.004@gmail.com
-powerloadtest2022.005@gmail.com
-powerloadtest2022.006@gmail.com
-powerloadtest2022.007@gmail.com
-powerloadtest2022.008@gmail.com
-powerloadtest2022.009@gmail.com
-powerloadtest2022.010@gmail.com
-powerloadtest2022.011@gmail.com
-powerloadtest2022.012@gmail.com
-powerloadtest2022.013@gmail.com
-powerloadtest2022.014@gmail.com
-powerloadtest2022.015@gmail.com
-powerloadtest2022.016@gmail.com
-powerloadtest2022.017@gmail.com
-powerloadtest2022.018@gmail.com
-powerloadtest2022.019@gmail.com
-powerloadtest2022.020@gmail.com
diff --git a/chromium/docs/website/site/chromium-os/testing/qemu-unittests/index.md b/chromium/docs/website/site/chromium-os/testing/qemu-unittests/index.md
deleted file mode 100644
index 162e922d157..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/qemu-unittests/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: qemu-unittests
-title: Running unittests via QEMU
----
-
-## Moved to <https://chromium.googlesource.com/chromiumos/docs/+/HEAD/testing/qemu_unit_tests_design.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/running-smoke-suite-on-a-vm-image/index.md b/chromium/docs/website/site/chromium-os/testing/running-smoke-suite-on-a-vm-image/index.md
deleted file mode 100644
index 05662badf3f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/running-smoke-suite-on-a-vm-image/index.md
+++ /dev/null
@@ -1,263 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: running-smoke-suite-on-a-vm-image
-title: Running Smoke Suite On a VM Image
----
-
-[TOC]
-
-## Introduction
-
-The VMTest "smoke suite" is a suite of client-side autotests that performs basic
-sanity checks on a Chromium OS build.
-
-Each of the tests in the smoke test suite is capable of running in a virtual
-machine.
-
-This allows the smoke suite to be run as part of the automated build process on
-a 'builder'.
-
-## Smoke Suite tests
-
-The Smoke suite currently consists of the following tests (this list is subject
-to change):
-
-* build_RootFilesystemSize
-* desktopui_ChromeFirstRender
-* desktopui_FlashSanityCheck
-* desktopui_KillRestart('^chrome$')
-* desktopui_KillRestart('^session_manager$')
-* logging_CrashSender
-* login_Backdoor('$backdoor')
-* login_BadAuthentication
-* login_CryptohomeIncognitoMounted('$backdoor')
-* login_CryptohomeMounted
-* login_LoginSuccess
-* platform_FilePerms
-* platform_OSLimits
-
-## Running the Smoke Test Suite on a Virtual Machine (VM)
-
-### Useful Links:
-
-The instructions on this page should be enough to get you going. They install a
-testable Chromium OS image on a VM and run the smoke suite. However, if you want
-more details, you can always go to one of the following pages:
-
-* Building a testable VM image is much like [building other Chromium
- OS images](/system/errors/NodeNotFound).
-* However, some extra steps are needed to [build a test
- image](/system/errors/NodeNotFound).
-* Once built, a clone of this [image should be created to run in a
- VM](http://www.chromium.org/chromium-os/developer-guide#TOC-Building-an-image-to-run-in-a-virtu).
-* Here are some instructions to [run the image on a
- VM](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_vm.md).
-* Here's how to build and run [autotest tests on the
- VM](/system/errors/NodeNotFound).
-
-### Install qemu-kvm
-
-First of all, to run in a vm, you must have vm software installed.
-
-On Ubuntu Lucid, use apt-get to install qemu-kvm:
-
-<pre><code><b>$</b> sudo apt-get install qemu-kvm
-</code></pre>
-
-### Build a testable VM image
-
-WARNING: After
-[crbug/710629](https://bugs.chromium.org/p/chromium/issues/detail?id=710629),
-'betty' is the only board regularly run through pre-CQ and CQ VMTest and so is
-the most likely to work at ToT. 'betty' is based on 'amd64-generic', though, so
-'amd64-generic' is likely to also work for most (non-ARC) tests.
-
-Next, build the testable VM image. The following steps assume that:
-
-1. depot_tools/repo have been installed and configured.
-2. Chromium OS source code has been checked out.
-3. A chroot has been created with make_chroot.
-
-<pre><code>
-<b>$</b> cros_sdk    # To enter the chroot
-<i># Setup the build environment for the target board.  ${BOARD} could should usually be 'betty' or 'amd64-generic'.</i>
-<b>(chroot)$</b> ./setup_board --board=${BOARD}
-<i># Build all the source packages, including those required for running autotests</i>
-<i># Optional: "--oldchromebinary" may make your build faster, but will have old Chrome/libcros</i>
-<i># NOTE: At the moment, "--withautotest" is the default, so don't worry if you built without it.</i>
-<b>(chroot)$</b> ./build_packages --board=${BOARD}
-<b><b><i># Build a bootable image</i></b></b>
-<b><b><i># Optional: Include "--noenable_rootfs_verification" if you think you might need to modify your rootfs.</i></b></b>
-<b>(chroot)$</b> ./build_image --board=${BOARD} test
-<i># Clone this image, modify it for test, and make image for use in qemu-kvm Virtual Machine</i>
-<i># Note: because we use "--test_image", an explicit "modify_image_for_test" is not required.</i>
-<b>(chroot)$</b> ./image_to_vm.sh --board=${BOARD} --test_image
-<i># Exit chroot</i>
-<b>(chroot)$</b> exit
-</code></pre>
-
-The newly created VM image should be in the following path (relative to
-src/scripts):
-
-```none
-../build/images/${BOARD}/latest/chromiumos_qemu_image.bin
-```
-
-### Start a VM image
-
-Before launching autotests, its fun to boot up a virtual Chromium OS on your
-desktop!
-
-<pre><code>
-<b>(chroot)$</b> cros_vm --start --board=${BOARD}
-</code></pre>
-
-### Run the autotest tests on the VM image
-
-Autotests can be run against the VM via test_that.
-
-<pre><code><i># Run the entire smoke suite
-</i> <b>(chroot)$</b> test_that --board=${BOARD} localhost:9222 suite:smoke
-<i># Run an individual test from the smoke Suite
-<b>(chroot)$</b> test_that --board=${BOARD} localhost:9222 logging_CrashSender</i>
-</code></pre>
-
-Don't forget to kill the head-less VM when you are done with it!
-
-<pre><code>
-<b>(chroot)$</b> cros_vm --stop
-</code></pre>
-
-### Run the autotest tests on the VM image using cros_run_vm_test
-
-Another script, cros_run_vm_test, can be used to start the VM, run autotest
-tests on it, and then shut down the VM, all from a single invocation:
-
-<pre><code>
-<i># Run the entire smoke suite:</i>
-<b>(chroot)$</b> mkdir results
-<b>(chroot)$</b> cros_run_vm_test --board=${BOARD} --results-dir=results --autotest suite:smoke
-<i># Run an individual test from the suite</i>
-<b>(chroot)$</b> cros_run_vm_test --board=${BOARD} --results-dir=results --autotest platform_OSLimits
-</code></pre>
-
-### Troubleshooting
-
-#### No space left on device
-
-If you get an error that looks like this:
-
-```none
-Unhandled OSError: [Errno 28] No space left on device: '/home/autotest/tmp/_autotmp_Woz_Qyharness-fifo'
-```
-
-...this may be because you have run out of space on your "stateful partition".
-This can happen if you leave the VM running for a long time and errors fill up
-the /var/log folder. In my case, this folder contained 250M of data! You should
-go into /var/log and cleanup stuff.
-
-Use `df` to determine how much space is available in the stateful partition:
-
-<pre><code>
-<b>localhost ~ #</b> df /mnt/stateful_partition
-<b>Filesystem           1K-blocks      Used Available Use% Mounted on</b>
-<b>/dev/sda1              2064208    450612   1508740  23% /mnt/stateful_partition</b>
-</code></pre>
-
-`stop <daemon_name>.`You may be getting lots of errors if you're running a board-specific image with drivers for hardware that is not present on the VM. If this is the case, try stopping the responsible daemon with
-
-#### Could not set up host forwarding rule 'tcp::9222-:22'
-
-If you get this error when running cros_vm --start, make sure that you don't
-have a VM already running. This should kill it for you.
-
-```none
-cros_vm --stop
-```
-
-#### Could not initialize KVM, will disable KVM support
-
-This is probably because you don't have the kvm module loaded. The VM will
-run.....very.......slowly.
-
-```none
-open /dev/kvm: No such file or directory
-Could not initialize KVM, will disable KVM support
-$ modprobe kvm_intel    # if you have an AMD machine, use 'kvm_amd'
-```
-
-Note that this module interferes with VirtualBox so you may need to remove it (`rmmod kvm_intel`) if you want to use this.
-
-## Updating a client autotest
-
-Autotest tests are usually built and compiled on the autotest server machine.
-
-A 'client' test is installed on the client by the autotest infrastructure when
-the test is run.
-
-The autotest infrastructure is maintained in the **chromeos-base/autotest**
-cros_workon
-[ebuild](http://www.gentoo.org/proj/en/devrel/handbook/handbook.xml?part=2&chap=1).
-
-Individual tests and test suites are in the **chromeos-base/autotest-tests**
-ebuild.
-
-### The new way: Use cros_workon with all Python tests
-
-Working on all Python autotests should be simple and fast.
-
-First `cros_workon` `autotest` for the board on which you plan to run tests:
-
-<pre><code>
-<b>(chroot)$</b> cros_workon start autotest --board=${BOARD}
-</code></pre>
-
-Now, test_that will detect that you are working on autotests and automatically
-copy over Python in the autotest source tree to the sysroot.
-
-Run test_that as usual:
-
-<pre><code><b>(chroot)$</b> test_that --board=${BOARD} localhost:9222 suite:smoke
-</code></pre>
-
-### The old way: emerge individual autotest tests
-
-If you have a test with binary dependencies, you must rebuild them explicitly:
-
-<pre><code><b>(chroot)$</b> emerge-${BUILD} autotest-tests
-</code></pre>
-
-This can take a very, very long time since it will rebuild ALL tests.
-
-To speed this up, set the TESTS variable on the command line when runnning
-emerge to install an individual test:
-
-<pre><code>
-<b>(chroot)$</b> TESTS=&lt;TestName&gt; emerge-${BOARD} autotest-tests
-</code></pre>
-
-Note that doing this will deactivate all other tests! This is a problem for test
-suites.
-
-To rebuild a whole test suite, specify the suite and all individual tests in the
-suite. For example, to rebuild smoke suite:
-
-<pre><code>
-<b>(chroot)$</b> TESTS='build_RootFilesystemSize desktopui_ChromeFirstRender \
-desktopui_FlashSanityCheck desktopui_KillRestart logging_CrashSender \
-login_Backdoor login_BadAuthentication login_CryptohomeIncognitoMounted \
-login_CryptohomeMounted login_LoginSuccess platform_FilePerms platform_OSLimits' \
-emerge-${BOARD} autotest-tests
-</code></pre>
-
-Then go grab a coffee...
-
-### Debugging
-
-You can use [chromium os debugging
-tips](/chromium-os/how-tos-and-troubleshooting/debugging-tips#TOC-We-recommend-that-developers-use-gd)
-on VM as well. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/running-unit-tests-on-the-target/index.md b/chromium/docs/website/site/chromium-os/testing/running-unit-tests-on-the-target/index.md
deleted file mode 100644
index c3e7ada4ead..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/running-unit-tests-on-the-target/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: running-unit-tests-on-the-target
-title: Running Unit Tests On The Target
----
-
-In an ideal world, you'd mock out all of your dependencies so you can run your
-unit tests on your development machine.
-
-When this isn't feasible, don't let it stand in your way:
-
-Add a USE flag "install-tests" to your ebuild:
-
-```none
-IUSE="install_tests"
-```
-
-and conditionalize your unit test libraries on this flag:
-
-```none
-RDEPEND="blah
-    blah
- install_tests? ( dev-cpp/gtest )"
-```
-
-Then build the use flag into a make flag:
-
-```none
-use install_tests && MAKE_FLAGS="INSTALL_TESTS=1"
-```
-
-and pass that to your package:
-
-```none
-src_compile() {
- tc-export CXX PKG_CONFIG
- cros-debug-add-NDEBUG
- emake ${MAKE_FLAGS} PLUGINDIR="${PLUGINDIR}" || die "Failed to compile"
-}
-src_install() {
- emake ${MAKE_FLAGS} DESTDIR=${D} install || die "Install failed"
-}
-```
-
-see cromo's ebuild for an example
-
-To develop with gmerge, set this flag on the commandline when you start your
-devserver:
-
-```none
-USE=install_tests ./start_devserver 
-```
-
-Note that you must do this within the chroot. If you run the devserver from
-outside of the chroot, it will drop its environment in the process of entering
-the chroot, and your USE flag will get dropped. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/specific-test-documentation/index.md b/chromium/docs/website/site/chromium-os/testing/specific-test-documentation/index.md
deleted file mode 100644
index d86001ea862..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/specific-test-documentation/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: specific-test-documentation
-title: Specific Test Documentation
----
-
-Documentation for specific kinds of testing is under this directory. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/suite_scheduler-1/index.md b/chromium/docs/website/site/chromium-os/testing/suite_scheduler-1/index.md
deleted file mode 100644
index a0ee87e5a92..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/suite_scheduler-1/index.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: suite_scheduler-1
-title: Suite Scheduler Design Doc
----
-
-**Autotest Test Scheduler V2**
-
-**We’ve recently added [dynamically-defined test suites](/chromium-os/testing/dynamic-test-suites) for Chrome OS, but can currently only run them synchronously from our build workers. That works great for a BVT suite, but is less than ideal for longer-running suites, suites whose results are not needed immediately, and suites that need to be run on a particular build on-demand.**
-
-**# Requirements**
-
-**The scheduler must be able to:**
-
-* **Run tests on a new full build.**
-* **Run tests only if chrome has changed on a new build.**
-* **Skip a suite if it has already run for a particular platform/build
- combo.**
-* **Suites do not need to be configured to run per-platform,
- per-milestone**
- * **The scheduler will enumerate supported platforms by listing
- labels from the AFE that start with “board:”**
-* **Run a suite at a nightly/weekly interval.**
- * **These runs should use the latest image available for the
- platform that is being run against.**
-* **Run one-shot for a particular build, scheduling all configured
- jobs for that event/build**
- * **./test_scheduler.py -e &lt;list,of,events&gt; -i build**
-
-**The scheduler should never wait for any of these jobs, but instead schedule them with the AFE and then return to waiting for other events to occur.**
-
-**# Detailed Design**
-
-**There are two conceptual classes of tasks in the scheduler: timed-event tasks and build-event tasks.**
-**On each event, the scheduler will wake up and, for each known platform, ask the dev server for the name of the most-recent staged build. It will then run through all the tasks configured to run on this event and query the AFE to see if a job already exists for this (platform, build, suite) tuple. We’ll facilitate this by having a convention for naming jobs, e.g. stumpy-release/R19-1998.0.0-a1-b1135-test_suites/control.bvt for a nightly-triggered regression test of the stumpy build ‘R19-1998.0.0-a1-b1135’. If an appropriate job does not exist, the scheduler will fire-and-forget one.**
-**This de-duping logic allows us to avoid a lot of complexity; we can simply throw tasks on the to-be-scheduled queue in the scheduler, and trust that they’ll get tossed out by this check if they would duplicate work.**
-**As the suite definition files themselves currently handle sharding, we don’t need to take it into account here.**
-
-**## Branches**
-
-**We support a couple symbolic branch names:**
-
-* **factory**
-* **firmware**
-
-**We believe that there’s only one of these that matters, per platform, at any given time.**
-**We also support release branch cutoffs. If a Task can’t be run on branches earlier than R18, say, we allow you to specify ‘branch: &gt;=R18’ in your task config.**
-
-**## Timed-event tasks**
-
-**We’ll start with just ‘nightly’ and ‘weekly’. The time/day of these events can be configured at startup.**
-**When a timer fires, the scheduler will enumerate the supported platforms by querying the AFE. Then, for each platform and branch, we can glob through Google Storage to find the latest build (this requires that we put factory/firmware builds in appropriately-named buckets in GS). Now, we can go through all triggered tasks and schedule their associated suites. This may include some already-run suites, but they will be thrown out by our de-duping logic.**
-
-**## Build-event tasks**
-
-**Initially, we’ll support two events: ‘new-build’, and ‘new-chrome’. The scheduler will poll git, looking for updates to the manifest-versions repo(s) and the chrome ebuilds.**
-**Every time a new build completes, a manifest is published to the manifest-versions git repo (internal or external, depending on the build). By looking at the path that file is checked in at, we can determine what target it was built for, and what the name of the build is. By looking in the file a bit, we can determine what branch the build was on. With all that info, we can look through the configured tasks, and figure out which ones to schedule.**
-**When we see that a Chrome rev has occurred, we can register each ‘new-chrome’-triggered task to run on the next new build for all supported platforms.**
-
-**## Configuration file format**
-
-**We will use python config files.**
-**\[Regression\]**
-**suite=regression**
-**run_on=new-build**
-**branch=&gt;=R18**
-**\[NightlyPower\]**
-**suite=power**
-**run_on=nightly**
-**pool=remote-power**
-**branch=&gt;=R15, firmware**
-**\[FAFT\]**
-**suite=faft**
-**run_on=new-build**
-**branch=firmware**
-
-**# Alternatives considered**
-
-**## Buildbot**
-
-**We considered using buildbot in a couple of different ways, but ultimately decided against it. The largest issue here is that the builders all live in the golo, and the lab does (and will) not. We currently cope with this for the sake of HWTest because we need to return results to the build infrastructure. We prefer to avoid adding further dependencies on the ability to talk from golo &lt;-&gt; corp unless it is strictly necessary to achieve desired functionality. It’s certainly not necessary to add this complexity from the point of view of correctly scheduling tests.**
-**One proposed approach could have us using build workers that trigger when the real builders finish to handle event-triggered suites, and one that kicks off at the same time every day to run timer-based suites. Issues are these:**
-
-1. **We’d still need an extra tool to force the scheduling of suites
- for back-filling purposes.**
-2. **Configuration becomes more manual and is spread over the code
- base**
- 1. **When a new build appears, have to set up a bot to start
- watching it**
- 2. **When a branch build dies, have to change config to repurpose
- the bot**
- 3. **Config dictating which suites to run on which triggers lives
- separately from the code that decides which builds to watch and
- trigger on.**
-
-**Another approach would have us setting up a worker for every suite/trigger/build combo. This has similar maintenance headaches as the above.**
-
-**## Using Gerrit triggers in lieu of git triggers**
-
-**This also would require communicating from two disconnected networks, so we
-also decided against it.** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/suite_scheduler/index.md b/chromium/docs/website/site/chromium-os/testing/suite_scheduler/index.md
deleted file mode 100644
index 2b1dbcb8620..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/suite_scheduler/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: suite_scheduler
-title: suite_scheduler
----
-
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-client-helper-libraries/index.md b/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-client-helper-libraries/index.md
deleted file mode 100644
index 68660adba61..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-client-helper-libraries/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/test-code-labs
- - Test Code Labs
-- - /chromium-os/testing/test-code-labs/autotest-client-tests
- - Autotest Client Tests
-page_name: autotest-client-helper-libraries
-title: Autotest Client Helper Libraries
----
-
-This is a listing and brief explanation of the various helper methods available
-through autotest_lib.client.\*. It is in no way comprehensive, and is only meant
-as an introduction to the topic:
-
-cros
-
-|-audio
-|-camera
-|-cellular
-|---pseudomodem
-|-dhcp_test_data
-|-i2c
-|-rf
-|-saft
-
-auth_server - auth
-
-dns_server - auth
-httpd - auth
-constants - constants
-crash_test - crash programs, get dumps
-cros_logging - logging
-cros_ui - ui, session manager, login
-cryptohome - cryptohome vaults
-
-login - wait_for_(browser, window manager, ownership)
-network - Modem, IP
-pkcs11 - chapsd, TPM
-power_\* - power
-storage - storage devices
-sys_power - wakeup, suspend
-
-common_lib
-
-|-cros
-
-autoupdater
-
-devserver
-|-hosts (Autotest Host base classes)
-|-perf_expectations
-|-test_utils
-
-autotemp - autotest temp dir creation helpers
-
-base_utils - ‘run’ and other system level helpers
-
-error - different error classes
-
-pexpect
-
-utils
-
-bin
-
-|-input
-|-net
-|-self-test
-|---tests
-
-base_utils - linux sysadmin helper: grep, disk, cpu, environ
-
-site_utils - systems level helper: ping hosts, board type.
-utils - base+site utils
-
-test - main test class
-
-unit_test - main unit_test class
-
-If you have come this far, you may also be interested in reading the autotest
-client tests
-[codelab](/chromium-os/testing/test-code-labs/autotest-client-tests). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs/index.md b/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs/index.md
deleted file mode 100644
index 919ea910e75..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs/index.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/test-code-labs
- - Test Code Labs
-- - /chromium-os/testing/test-code-labs/autotest-client-tests
- - Autotest Client Tests
-page_name: autotest-results-logs
-title: Autotest Results Logs
----
-
-This is a listing and brief explanation of the various results logs available
-through autotest. It is in no way comprehensive, and is only meant as an
-introduction to the topic.
-
-**High Level Overview:**
-
-1. Test runs and dumps its results into /usr/local/autotest/results
-
-2. Server job pulls this entire directory back via
-log_collector.collect_client_job_results. This does an rsync from the server
-results dir to the client results dir.
-
-3. [GSoffloader](http://www.chromium.org/chromium-os/testing/gs-offloader)
-uploads these results to google storage.
-
-The rest of this document describes how step 1 occurs, to learn more about the
-server job or gsoffloader please consult relevant documents.
-
-**How are these logs created?**
-
-Sysinfo logs are created by executing a command in a subprocess and redirecting
-it’s stdout to the appropriate file through base_sysinfo.py run(), examples of
-such commands are 'ls -l /boot' and '/opt/google/chrome/chrome --version', or
-just executing something like shutil.copyfile through a hook. There are 4 types
-of hooks:
-
-* boot_loggables - default commands to log per boot, /proc/mounts,
- /proc/cmdline, uname
-* test_loggables - default commands to log per test, dmesg, df
-* before_iteration_loggables - default commands to log before
- iteration
-* after_iteration_loggables - default commands to log after iteration
-
-**How does job.run_test trigger one of the loggables?**
-
-job.run_test creates a _sysinfo_logger through server/test.py
-
-Before invoking common_lib/test.py runtest, it sets up sysinfo logging by:
-
-1. installing autotest into a tmp sysinfo directory like
- /tmp/sysinfo/autoserv-asdf
-2. executing the sysinfo_before_test_script, which leads to a
- job.sysinfo.log_before_each_test
-
-**How do I collect a random directory as a result?**
-
-You should add it as a loggable hook. Say you would like to collect some
-directory every test iteration, you will first need:
-
-* A class that understands how to do this:
- * logdir: plain old copy from source to destination, create
- destination if it doesn't exist.
- * diffable_logdir: copies the diff of the contents of the dir.
- * purgeable_logdir: copies the contents and deletes source.
- * command: runs a command
-* A sysinfo hook: The job will call self.sysinfo.log_after_each_test,
- which will execute the 'run' arguments of all the classes in the
- list, for each hook.
- * iteration loggables are called on every invocation of run_job,
- for a given test job instance
- * boot/test loggables are called on every instantiation of the job
- object, with the latter only happening for client jobs that
- represent tests (i.e there are different types of jobs, like
- site_job, base_client_job, base_job etc but most often you only
- care about the client jobs).
-
-Once you've picked a class and hook:
-
- Instantiate this class and add it to a list of classes to call every
- iteration/test/boo
-
- 1. Import site_sysinfo in your test: from
- autotest_lib.client.bin.site_sysinfo
- 2. within your initialize method add:
- self.test_loggables.add(site_sysinfo.logdir('/tmp/mytempdir_to_copy'))
-
- After your test is done, check the
- &lt;results_folder&gt;/&lt;test_name&gt;/sysinfo/tmp/mytempdir_to_copy
- directory, where the results folder is the one you specified through -r when
- invoking run_remote_tests.
-
-What follows is an inspection of directories we pull back from the DUT:
-
-<table>
-<tr>
-
-<td>Autotest</td>
-
-<td>generate_logs</td>
-
-</tr>
-<tr>
-
-<td>.</td>
-<td> |-crashinfo.172.22.193.233</td>
-<td> |-debug</td>
-<td> |-power_Resume</td>
-<td> |---debug</td>
-<td> |---profiling</td>
-<td> |---results</td>
-<td> |---sysinfo</td>
-<td> |-----iteration.1</td>
-<td> |-------var</td>
-<td> |---------spool</td>
-<td> |-----------crash</td>
-<td> |-----var</td>
-<td> |-------log_diff</td>
-<td> |---------chrome</td>
-<td> |-----------Crash Reports</td>
-<td> |---------gct</td>
-<td> |---------metrics</td>
-<td> |---------power_manager</td>
-<td> |---------recover_duts</td>
-<td> |---------ui</td>
-<td> |---------update_engine</td>
-<td> |---------window_manager</td>
-<td> |---------xorg</td>
-<td> |-------spool</td>
-<td> |---------crash</td>
-<td> |-sysinfo</td>
-
-<td>.</td>
-<td> |-crashdumps</td>
-<td> |---Crash Reports</td>
-<td> |-network_profiles</td>
-<td> |---var</td>
-<td> |-----cache</td>
-<td> |-------shill</td>
-<td> |-policy_data</td>
-<td> |---whitelist</td>
-<td> |-system_level_logs</td>
-<td> |---chrome</td>
-<td> |-----Crash Reports</td>
-<td> |---gct</td>
-<td> |---metrics</td>
-<td> |---power_manager</td>
-<td> |---recover_duts</td>
-<td> |---ui</td>
-<td> |---update_engine</td>
-<td> |---window_manager</td>
-<td> |---xorg</td>
-<td> |-user_level_logs</td>
-
-</tr>
-</table>
-
-The collection of these logs happens through site_sysinfo, base_sysinfo.
-client/bin base_sysinfo has a set of default commands to run per
-test/boot/iteration and sets them in base_sysinfo __init__.
-
-1.
-
-var/
-
---log_diff/
-
-----logs from cc files grouped by function.eg: power_manager directory contains
-log messages from files input.cc, powerd.cc etc. The redirection of their output
-occurs through LOG macros (eg chromium/src/base/logging.cc: ~307), and autotest
-pulls the new contents of ‘/var/log’ generated during the test in its
-log_after_\* hooks using site_sysinfo.diffable_logdir (which rsyncs).
-
---spool/
-
-----crash
-
-\[server/site_crashcollect.py\]
-
-On every crash we get a minidmp on the DUT, the server pulls this file back and
-attempts to symbolicate it with symbols in /build/ and the devserver. how does
-the server know theres a crash, where does it go looking for a crash dump file
-and what generates a dump file.
-
-Normal minidumps are uploaded to a crash server which attempts to produce a
-stack trace txt file. Autotest tries to run stacktrace with the appropriate
-symbols on a crash server.
-
-2.
-
-\[base_sysinfo in bin/base_sysinfo.py\]
-
-boot_loggables-cmdline, installed_packages, proc_mounts, uname, meminfo,
-slabinfo, version, pci, cpuinfo, modules, interrupts, partitions, lspci -vn,
-gcc--version, ld--version, mount, hostname, uptime.
-
-test_loggables-df, dmesg, installed_packages, schedstat, meminfo, slabinfo,
-interrupts
-
-If you have come this far, you may also be interested in reading the autotest
-client tests
-[codelab](/chromium-os/testing/test-code-labs/autotest-client-tests). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting/index.md b/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting/index.md
deleted file mode 100644
index a304a0130bd..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting/index.md
+++ /dev/null
@@ -1,178 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/test-code-labs
- - Test Code Labs
-- - /chromium-os/testing/test-code-labs/autotest-client-tests
- - Autotest Client Tests
-page_name: basic-ebuild-troubleshooting
-title: Basic Ebuild Troubleshooting
----
-
-### This is a brief explanation of how one might trouble shoot local emerge/ebuild failures. It is in no way comprehensive, and is only meant as an introduction to the topic:
-
-**Emerge errors during build_image**
-
-When following the [Chromium OS Developer Guide](/chromium-os/developer-guide)
-emerge errors can be encountered for missing ebuild. A error that can be
-encountered when running build_image is:
-
-> emerge: there are no ebuilds to satisfy XYZ
-
-Where XYZ is a library or other missing package.
-
-This can be resolved by running:
-
-> emerge-$BOARD XYZ
-
-Then recalling build_image:
-
-> ./build_image --board=${BOARD} --noenable_rootfs_verification dev
-
-<table>
-<tr>
-
-<td>References:</td>
-
-<td> \[1\] <a
-href="http://www.chromium.org/chromium-os/testing/autotest-user-doc">Autotest
-ebuild documentation</a></td>
-
-<td> \[2\]<a
-href="http://www.chromium.org/chromium-os/developer-guide/chromite-shell-quick-start">
-Chromite documentation</a></td>
-
-<td>From within the chroot, try running the a new test through run_remote_tests,
-as described in the codelab on autotest client tests, without actually adding it
-to an ebuild. This might give you an error about not being able to find
-kernel_HdParmBasic’s control file.</td>
-
-<td>To resolve this, from within chroot:</td>
-
-<td>1. Find the package with autotest tests:</td>
-
-<td>emerge --search autotest | grep tests</td>
-
-<td>2. Dry emerge it and look for your test in the output:</td>
-
-<td>emerge-lumpy -pv chromeos-base/autotest-tests</td>
-
-<td> ==Two things to note:==</td>
-
-<td> a. The first line will say something like:
-“chromeos-base/autotest-tests-0.0.1-r3531“</td>
-
-<td> This means it’s emerging the r3531 ebuild. </td>
-
-<td> Since we would like it to use our local bits, we need to cros_workon the
-package.</td>
-
-<td> b. You will not find kernel_HdParmBasic in the output.</td>
-
-<td>3. cros_workon the appropriate package:</td>
-
-<td> cros_workon --board=&lt;board name&gt; start &lt;package name&gt;</td>
-
-<td> eg: cros_workon --board=lumpy start autotest-tests</td>
-
-<td> emerge the package: emerge-&lt;board name&gt; &lt;package name&gt;</td>
-
-<td> eg: emerge-lumpy -pv chromeos-base/autotest-tests</td>
-
-<td> ==Two things to note:==</td>
-
-<td> a. The first line will say something like:</td>
-
-<td>“chromeos-base/autotest-tests-9999”</td>
-
-<td> This is good, it means it’s pulling local bits.</td>
-
-<td> b. You still will not find kernel_HdParmBasic in the output.</td>
-
-<td> This is because your new test hasn’t been added to the ebuild yet.</td>
-
-<td>4. Edit the ebuild to include your test:</td>
-
-<td> Find the ebuild file: find -iname “autotest-tests-9999.ebuild” from
-src/third_party/. </td>
-
-<td> a. It will most probably point you to:</td>
-
-<td>
-third_party/chromiumos-overlay/chromeos-base/autotest-tests/autotest-tests-9999.ebuild.
-</td>
-
-<td> b. open this file and add “+test_kernel_HdParmBasic” in the IUSE_TESTS
-section.</td>
-
-<td>5. Emerge the new folder:</td>
-
-<td> a. Make sure you’re cros_working on the right packages:</td>
-
-<td> cros_workon --board=lumpy list</td>
-
-<td> should show autotest_tests</td>
-
-<td> b. Make sure the emerge will touch kernel_HdParmBasic:</td>
-
-<td> emerge-lumpy -pv chromeos-base/autotest-tests | grep
-kernel_HdParmBasic</td>
-
-<td> c. Actual emerge:</td>
-
-<td> emerge-lumpy chromeos-base/autotest-tests</td>
-
-<td>6. Check the staging area for your new test:</td>
-
-<td> eg: ls
-/build/lumpy/usr/local/autotest/client/site_tests/kernel_HdParmBasic</td>
-
-<td>7. Re-run the run_remote command and look for the results directory:</td>
-
-<td> you should see a line like:</td>
-
-<td> &gt;&gt;&gt; Details stored under /tmp/run_remote_tests.KTQ4</td>
-<td> Alternatively, you can specify your own results directory using
-‘--results_dir_root’. </td>
-
-<td>Some common ebuilds to cros_workon and emerge: </td>
-
-* <td>autotest-all (Meta ebuild for all packages providing tests),
- </td>
-* <td>autotest-factory (Autotest Factory tests), </td>
-* <td>autotest-chrome (Autotest tests that require chrome_test or
- pyauto deps), </td>
-* <td>autotest-tests (Pure Autotest tests), </td>
-* <td>autotest (Autotest scripts and tools).</td>
-
-<td>If you have come this far, you may also be interested in reading the
-autotest client tests <a
-href="/chromium-os/testing/test-code-labs/autotest-client-tests">codelab</a>.</td>
-
-<td><b>Access Violation Errors when Emerging</b></td>
-
-<td>When you're attempting to include a file from another project, for example
-#include &lt;shill/net/rtnl_handler.h&gt; Your build may fail with access
-violations, e.g. ... arc-networkd-9999: \[0/3\] CXX
-obj/arc/network/arc-networkd.manager.o \* ACCESS DENIED: open_rd:
-/mnt/host/source/src/platform2/shill/net/rtnl_listener.h arc-networkd-9999: \*
-ACCESS DENIED: open_rd: /mnt/host/source/src/platform2/shill/net/shill_export.h
-arc-networkd-9999: \* ACCESS DENIED: open_rd:
-/mnt/host/source/src/platform2/shill/net/rtnl_listener.h arc-networkd-9999: \*
-ACCESS DENIED: open_rd: /mnt/host/source/src/platform2/shill/net/shill_export.h
-arc-networkd-9999: arc-networkd-9999: \[1/3\] CXX
-obj/arc/network/arc-networkd.manager.o arc-networkd-9999: FAILED:
-obj/arc/network/arc-networkd.manager.o The proper way to handle this is to make
-sure that the ebuild for the package you are including a file from (in this
-case, shill), is installing the necessary headers to /usr/include. This should
-look like: src_install() { # ... insinto /usr/include/\[package_name\]
-doins header_one.h doins header_two.h # ... }</td>
-
-<td>Notably, it is <b>incorrect</b> to add the package name you are depending on
-to your package's ebuild under CROS_WORKON_SUBTREE.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/index.md b/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/index.md
deleted file mode 100644
index 5feccf582e8..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/autotest-client-tests/index.md
+++ /dev/null
@@ -1,458 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/test-code-labs
- - Test Code Labs
-page_name: autotest-client-tests
-title: Autotest Client Tests
----
-
-# [TOC]
-
-# References
-
-* [Autotest Best
- Practices](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/best-practices.md)
-* [Autotest Coding Style
- Guide](http://git.chromium.org/gitweb/?p=chromiumos/third_party/autotest.git;a=blob;f=CODING_STYLE;h=777cc1de3e409a69581ae44a9432d8634dc114e6;hb=HEAD)
-* [Writing
- Autotests](http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-Writing-Autotests)
-* [Dynamic Suites
- Codelab](/chromium-os/testing/test-code-labs/dynamic-suite-codelab)
-* [Server Side Autotests
- Codelab](/chromium-os/testing/test-code-labs/server-side-test)
-* [Result logs
- ](/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs)
-* [Client helper
- libraries](/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-client-helper-libraries)
-* [Troubleshooting ebuild
- files](/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting)
-
-# Overview
-
-In this codelab, you will build a client-side Autotest to check the disk and
-cache throughput of a ChromiumOS device. You will learn how to:
-
-1. Setup the environment needed for autotest
-
-2. Run and edit a test
-
-3. Write a new test and control file
-
-4. Check results of the test
-
-In the process of doing so you will also learn a little about the autotest
-framework.
-
-### Background
-
-Autotest is an open source project designed for testing the linux kernel. Before
-starting this codelab you might benefit from scrolling through some [upstream
-documentation](https://github.com/autotest/autotest/wiki/AddingTest) on autotest
-client tests. Autotest is responsible for managing the state of multiple client
-devices as a distributed system, by integrating a web interface, database,
-servers and the clients themselves. Since this codelab is about client tests,
-what follows is a short description of how autotest runs a specific test, on one
-client.
-
-Autotest looks through all directories in client/tests and client/site_tests for
-simple python files that begin with ‘control.’. These files contain a list of
-variables, and a call to job.run_test. The control variables tell autotest when
-to schedule the test, and the call to run_test tells autotest how. Each test
-instance is part of a job. Autotest creates this job object and forks a child
-process to execute its control file.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/szgUiW_L7jkUJospRoV-dlQ/image?w=668&h=107&rev=1&ac=1"
-height=107px; width=668px;>
-
-Note the exec mentioned above is the python keyword, not os.exec
-
-Tests reside in a couple of key locations in your checkout, and map to similar
-locations on the DUT (Device Under Test). Understanding the layout of these
-directories might give you some perspective:
-
-* `<cros_checkout>/chromium/src/chrome/test/functional`: holds
- chrome/chromeos functional tests.
- * These include pyauto tests, but not autotest tests (Note: pyauto
- is deprecated).
- * On the DUT, these map to:
- /usr/local/autotest/deps/chrome_test/test_src/chrome/test/functional/
-* `<cros_checkout>/src/third_party/autotest/client/site_tests`: holds
- autotest tests.
- * On the DUT, these map to /usr/local/autotest/tests.
-* `<cros_checkout>/src/platform/factory`: holds some private factory
- tests, although the bulk of factory tests reside in site_tests.
-
-Please consult the [dynamic suite
-codelab](/chromium-os/testing/test-code-labs/dynamic-suite-codelab) to
-understand how your tests can run as a suite.
-
-## Prerequisites
-
- chroot build environment.
-
- Autotest source, basic python knowledge.
-
-## Objectives
-
-In this codelab, we will:
-
- Run a test, edit and rerun a test on the client device
-
- Write a new test from scratch
-
- View and collect results of the test
-
- Get an overview of how autotest on the client works
-
- Get an overview of the classes and libraries available to help you write
- tests.
-
-# Running a test on the client
-
-First, get the autotest source:
-
-a. If you [Got the Code](http://www.chromium.org/chromium-os/developer-guide),
-you already have autotest.
-
-b. If you do not wish to sync the entire source and reimage a device, you can
-run tests in a vm.
-
-* [Install
- gsutils](https://sites.google.com/a/google.com/chromeos/for-team-members/lab/gsutil-setup)
-* Get an image
- * Select your image, e.g.,
-
- ```none
- gsutil ls gs://chromeos-releases/dev-channel/lumpy/*
- ```
-
- * Copy your image, e.g.,
-
- ```none
- gsutil cp gs://chromeos-releases/dev-channel/lumpy/3014.0.0/ChromeOS-R24-3014.0.0-lumpy.zip ./
- ```
-
- * Unzip the image and untar autotest.tar.bz2, e.g.,
-
- ```none
- unzip ChromeOS-R24-3014.0.0-lumpy.zip chromiumos_qemu_image.bin autotest.tar.bz2
- ```
-
-* [Get a
- VM](http://www.chromium.org/running-smoke-suite-on-a-vm-image):
- * The unzipped folder from 2.b should contain a VM.
-
- ```none
- <cros_checkout>/src/scripts/bin/cros_start_vm --image_path=path/to/chromiumos_qemu_image.bin
- ```
-
-If the cros_start_vm scripts fails you need to enable virtualization on your
-workstation. check for /dev/kvm or run ‘sudo kvm-ok’ (you might have to ‘sudo
-apt-get install cpu-checker’ first). It will either say /dev/kvm exists and kvm
-acceleration can be used or that /dev/kvm doesn’t and kvm acceleration can NOT
-be used. In the latter case, hit esc on boot and go to ‘system security:’, turn
-on virtualization. More information about running tests on a vm can be found
-[here](http://www.chromium.org/running-smoke-suite-on-a-vm-image).
-
-Once you have autotest, there are 2 ways to run tests, either using your machine
-as a server or from the client DUT. Running it directly on the device is faster,
-but requires invoking it from your server at least once.
-
-#### Through test_that
-
-1. enter chroot:
-
-```none
-cros_checkout_directory$ cros_sdk
-```
-
-2. Invoke test_that, to run login_LoginSuccess on a vm with local autotest bits:
-
-```none
-test_that localhost:9222 login_LoginSuccess
-```
-
-The basic usage of test_that:
-
-```none
-test_that -b board dut_ip[:port] TEST
-```
-
-TEST can be the name of the test, or suite:suite_name for a suite. For example,
-to run the smoke suite on a device with board x86-mario
-
-```none
-test_that -b x86-mario 192.168.x.x suite:smoke
-```
-
-Please see the[ test_that
-](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/test-that.md)page
-for more details.
-
-## Directly on the DUT
-
-You have to use test_that at least once so it copies over the test/dependencies
-before attempting this; If you haven’t, /usr/local/autotest may not exist on the
-device.
-
-```none
-ssh root@<ip_address_of_dut>, password=test0000 
-```
-
-Once you're on the client device:
-
-```none
-cd /usr/local/autotest
-```
-
-```none
-./bin/autotest_client tests/login_LoginSuccess/control
-```
-
-# Editing a Test
-
-*For python-only changes, test_that uses` autotest_quickmerge` to copy your
-python changes to the sysroot. There is no need to run rcp/scp to copy the
-change over to your DUT.*
-
-The fastest way to edit a test is directly on the client. If you find the text
-editor on a Chromium OS device non-intuitive then edit the file locally and use
-a copy tool like rcp/scp to send it to the DUT.
-
-1. Add a print statement to the
-[login_LoginSuccess](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=client/site_tests/login_LoginSuccess/login_LoginSuccess.py;h=2b46ccbb0b37c2eaaa5e0c1a0a23b37c7d877546;hb=HEAD)
-test you just ran
-
-2. rsync it into /usr/local/autotest/tests on the client
-
-```none
-rcp path/to/login_LoginSuccess.py root@<DUT_ip>:/usr/local/autotest/tests/login_LoginSuccess/
-```
-
-3. run it by invoking autotest_client, as described in the section on Running
-Tests Directly on the client. Note a print statement won’t show up when the test
-is run via test_that.
-
-The more formal way of editing a test is to change the source and emerge it. The
-steps to doing this are very similar to those described in the section on
-==[emerging
-tests](/chromium-os/testing/test-code-labs/autotest-client-tests#TOC-Emerging-and-Running)==.
-You might want to perform a full emerge if you’ve modified several files, or
-would like to run your test in an environment similar to the automated
-build/test pipeline.
-
-# Writing a New Test
-
-A word of caution: copy-pasting from Google Docs has been known to convert
-consecutive whitespace characters into unicode characters, which will break your
-control file. Using CTRL-C + CTRL-V is safer than using middle-click pasting on
-Linux.
-
-Our aim is to create a test which does the following:
-
-* run `hdparm -T <disk>`
-* Search output for timing numbers.
-* Report this as a result.
-
-1. Create a directory in `client/site_tests`, name` kernel_HdParmBasic`.
-
-2. Create a control file kernel_HdParmBasic/control, a bare minimum control file
-for the hdparm test:
-
-```none
-AUTHOR = "Chrome OS Team"NAME = "kernel_HdParmBasic"TIME = "SHORT"TEST_TYPE = "client"DOC = """This test uses hdparm to measure disk performance."""job.run_test('kernel_HdParmBasic', named_arg='kernel test')
-```
-
-To which you can add the necessary control variables as described in the
-[autotest best
-practices](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/best-practices.md).
-Job.run_test can take any named arguments, and the appropriate ones will be
-[cherry
-picked](http://git.chromium.org/gitweb/?p=chromiumos/third_party/autotest.git;a=blob;f=client/common_lib/test.py;h=9b51cd65f25b05b9f9a0b60339f77af85f46dc4b;hb=546142013484dbdb2c1322debe9e5fc5e91f63c1#l474)
-and passed on to the test.
-
-3. Create a test file:
-
-At a bare minimum the test needs a run_once method, which should contain the
-implementation of the test; it also needs to inherit from[
-test.test](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=client/bin/test.py;h=33f194ca39e955d030789b08ae8f89bda8f45cab;hb=HEAD).
-Most tests also need initialize and cleanup methods. Create a test file
-`client/site_tests/kernel_HdParmBasic/kernel_HdParmBasic.py`:
-
-```none
-import logging
-```
-
-```none
-```
-
-```none
-from autotest_lib.client.bin import testclass kernel_HdParmBasic(test.test): version = 1 def initialize(self): logging.debug('initialize') def run_once(self, named_arg=''): logging.debug(named_arg) def cleanup(self): logging.debug('cleanup')
-```
-
-Notice how only run_once takes the argument named_arg, which was passed in by
-the `job.run_test `method. You can pass arguments to initialize and cleanup this
-way too. You can find examples of initialize and cleanup methods in helper
-classes, like
-[cros_ui_test](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=client/cros/cros_ui_test.py;h=1f95267d8dce01626e7bcb560922e9513eef265d;hb=HEAD).
-
-## Emerging and Running
-
-Basic flow:
-
-* Add the new test: add `+tests_kernel_HdParmBasic` in the`
- IUSE_TESTS` section of the autotest-tests ebuild file:
-
-```none
-#third_party/chromiumos-overlay/chromeos-base/autotest-tests/autotest-tests-9999.ebuild
-IUSE_TESTS="${IUSE_TESTS}
- # some other tests
- # some other tests
- # ...
-  +tests_kernel_HdParmBasic
-"
-```
-
-* cros_workon autotest-test
-
-```none
-cros_workon --board=lumpy start autotest-tests
-```
-
-* emerge autotest-tests
-
-```none
-emerge-lumpy chromeos-base/autotest-tests
-```
-
-(if that fails because of dependency problems, you can try cros_workon
---board=lumpy autotest-chrome and append `chromeos-base/autotest-chrome` to the
-line above)
-
-* run test_that
-
-```none
-test_that -b lumpy DUT_IP kernel_HdParmBasics
-```
-
-If you’d like more perspective you might benefit from consulting the
-[troubleshooting](/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting)
-doc.
-
-## Checking results
-
-The results folder contains [many
-logs](/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs),
-to analyze client test logging messages you need to find
-kernel_HdParmBasic.(DEBUG, INFO, ERROR) depending on which logging macro you
-used. Note: logging message priorities escalate, and debug &lt; info &lt;
-warning &lt; error. If you want to see all logging messages just look in the
-debug logs.
-
-Client test logs should be in:
-`/tmp/test_that.<RESULTS_DIR_HASH>/kernel_HdParmBasic/kernle_HdParmBasic/debug`
-
-where you will have to replace ‘`/tmp/test_that.<RESULTS_DIR_HASH>`’ with
-anything you might have specified through the --results_dir_root option.
-
-You can also find the latest results in `/tmp/test_that_latest`
-
-In the DEBUG logs you should see messages like:
-
-```none
-01/18 12:22:46.716 DEBUG|     kernel_HdParmBasic:0025| Your logging message
-```
-
-Note that print messages will not show up in these logs since we redirect
-stdout. If you’ve already performed a ‘run_remote’ once you can directly invoke
-your test on a client, as described in the previous section. Two things to note
-when using this approach:
-
-a. print messages do show up
-
-b. logging messages are also available under autotest/results/default/
-
-## Import helpers
-
-You can import any autotest client helper module with the line
-
-```none
-from autotest_lib.client.<dir> import <module>
-```
-
-You might also benefit from reading how the framework [makes
-autotest_lib](http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-Writing-Autotests)
-available for you.
-
-kernel_HdParmBasic Needs test.test, so it needs to import test from client/bin.
-
-Looking back at our initial test plan, it also needs to:
-
-1. run `hdparm -T <disk>`
-
-This implies running things on the command line, modules to look at are
-base/site utils.
-
-However common_lib’s ‘utils.py’ conveniently gives us both.
-
-```none
-from autotest_lib.client.bin import test, utils
-```
-
-2. Search output for timing numbers.
-
-3. Report this as a result.
-
-```none
-import logging, re
-```
-
-## run_once, cleanup and initialize
-
-If your test manages any state on the DUT it might need initialization and
-cleanup. In our case the subprocess handles it’s own cleanup, if any. Putting
-together all we’ve talked about, our run_once method looks like:
-
-```none
-import[ logging](https://cs.corp.google.com/#search&q=package:%5Echromeos_public$%20file:(/%7C%5E)logging(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)&is_navigation=1),[ re](https://cs.corp.google.com/#search&q=package:%5Echromeos_public$%20file:(/%7C%5E)re(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)&is_navigation=1)
-```
-
-```none
-```
-
-```none
-from[ autotest_lib.client.bin](https://cs.corp.google.com/#search&q=package:%5Echromeos_public$%20file:(/%7C%5E)autotest_lib/client/bin(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)&is_navigation=1) import[ test](https://cs.corp.google.com/#search&q=package:%5Echromeos_public$%20file:(/%7C%5E)autotest_lib/client/bin/test(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)&is_navigation=1),[ utils](https://cs.corp.google.com/#search&q=package:%5Echromeos_public$%20file:(/%7C%5E)autotest_lib/client/bin/utils(%5C.(swig%7Cpy)$%7C/__init__%5C.(swig%7Cpy)$)&is_navigation=1)
-class kernel_HdParmBasic(test.test):
-    """
-    Measure disk performance: both disk (-t) and cache (-T).
-    """
-    version = 1
-    def run_once(self):
-        if (utils.get_cpu_arch() == "arm"):
-            disk = '/dev/mmcblk0'
-        else:
-            disk = '/dev/sda'
-        logging.debug("Using device %s", disk)
-        result = utils.system_output('hdparm -T %s' % disk)
-        match = re.search('(\d+\.\d+) MB\/sec', result)
-        self.write_perf_keyval({'cache_throughput': match.groups()[0]})
-        result = utils.system_output('hdparm -t %s' % disk)
-        match = re.search('(\d+\.\d+) MB\/sec', result)
-        self.write_perf_keyval({'disk_throughput': match.groups()[0]})
-```
-
-Note the use of [performance
-keyvals](http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-How-do-I-write-a-performance-test-)
-instead of plain logging statements. The keyvals are written to
-`/usr/local/autotest/results/default/kernel_HdParmBasic/results/keyval `on the
-client and will be reported on your console when run through run_remote_tests:
-
----------------------------------------
-kernel_HdParmBasic/kernel_HdParmBasic cache_throughput 4346.76
-kernel_HdParmBasic/kernel_HdParmBasic disk_throughput 144.28
----------------------------------------
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/dynamic-suite-codelab/index.md b/chromium/docs/website/site/chromium-os/testing/test-code-labs/dynamic-suite-codelab/index.md
deleted file mode 100644
index a39442fffb1..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/dynamic-suite-codelab/index.md
+++ /dev/null
@@ -1,372 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/test-code-labs
- - Test Code Labs
-page_name: dynamic-suite-codelab
-title: Creating and deploying Chromium OS Dynamic Test Suites
----
-
-[TOC]
-
-[go/dynamic_suite_codelab](http://goto.google.com/dynamic_suite_codelab)
-
-## References and Further Reading
-
-1. [Autotest Best
- Practices](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/best-practices.md)
-2. [Codelab: Writing a server side
- test](/chromium-os/testing/test-code-labs/server-side-test)
-3. [Codelab: Writing a client side test](/system/errors/NodeNotFound)
-4. [Design Doc: Dynamic Test
- Suites](/chromium-os/testing/dynamic-test-suites)
-5. [Documentation: Working with Test
- Suites](/chromium-os/testing/test-suites)
-6. [Test Dependencies in Dynamic
- Suites](/chromium-os/testing/test-dependencies-in-dynamic-suites)
-
-## Overview
-
-The Chrome OS version of Autotest introduces a new type of suite, known as a
-dynamic suite. Dynamic suites allow for the jobs in a suite to be sharded over a
-pool of DUTs, and the dynamic suite infrastructure takes care of all of the
-device imaging and test scheduling/sharding details.
-
-Different tests in a suite may require different specific features of a DUT (for
-instance a certain type of cellular modem, or an attached [servo
-board](/chromium-os/servo)). These requirements can be specified as test
-`DEPENDENCIES`, so that the test in question will only be scheduled on DUTs that
-have the required labels. In addition, `DEPENDENCIES` can be specified at the
-suite level, causing all tests invoked through the suite to inherit any
-additional suite level `DEPENDENCIES`.
-
-### Objectives
-
-In this codelab, we will:
-
-* Create a new dynamic suite.
-* Add 2 existing and 2 new tests to the suite.
-* Enumerate the tests in the suite.
-* Add some test level and suite-level dependencies.
-* Run the suite in the lab.
-* Learn how to schedule the suite to be run regularly.
-
-### Prerequisites
-
-* This codelab assumes a full working checkout of the Chromium OS
- repo. To get started with a Chromium OS checkout, see [How to Build
- Chrome OS
- "Internally"](https://sites.google.com/a/google.com/chromeos/resources/engineering/how-to-build).
-* This codelab assumes a basic familiarity with use of `git` to stage
- files and commit changes.
-
-### Non Prerequisites
-
-* This codelab does NOT require a local instance of the Autotest
- server, or even the ability to build ChromiumOS locally (we will
- delegate the building to remote buildbots, and running our suite to
- the Test Lab server).
-* This codelab does NOT assume any familiarity with how to use `repo`
- or `cbuildbot`.
-
-## Creating The Test
-
-### Create a work branch
-
-This codelab will involve touching or changing code in two git repositories
-within the ChromiumOS repo. Our suite will be named **peaches**, so we will
-start by creating a repo branch named peaches, associated with the two git repos
-we will be modifying:
-
-```none
-user@host:~/chromiumos$ repo start peaches src/third_party/autotest/files src/third_party/chromiumos-overlay
-```
-
-If this succeeds, then you should be able to see your newly created branch.
-
-```none
-user@host:~/chromiumos$ repo branch
-*  peaches                   | in:
-                                   src/third_party/autotest/files
-                                   src/third_party/chromiumos-overlay
-```
-
-### Create a dynamic suite
-
-Test suites are defined by Autotest control files (Made up of Python with some
-meta variables), similar to the control files used to define tests themselves.
-The suite control files live in the Chromium OS source tree it the
-`src/third_party/autotest/files/test_suites` directory. Poke around and take a
-look at some of them to see their basic structure.
-
-Once you are satisfied, create a new file in this directory named
-`control.peaches`, with the contents given below. **Caution: copy-pasting from
-Google Docs has been known to convert consecutive whitespace characters into
-unicode characters, which will break your control file. Using CTRL-C + CTRL-V is
-safer than using middle-click pasting on Linux.**
-
-<pre><code># Copyright 2013 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-AUTHOR = "Chrome OS Team"
-<b>NAME = "peaches"</b>
-PURPOSE = "A simple example suite."
-CRITERIA = "All tests with SUITE=peaches must pass."
-TIME = "SHORT"
-TEST_CATEGORY = "General"
-TEST_CLASS = "suite"
-TEST_TYPE = "Server"
-DOC = """
-This is an example of a dynamic test suite.
-@param build: The name of the image to test.
- Ex: x86-mario-release/R17-1412.33.0-a1-b29
-@param board: The board to test on. Ex: x86-mario
-@param pool: The pool of machines to utilize for scheduling. If pool=None
- board is used.
-@param check_hosts: require appropriate live hosts to exist in the lab.
-@param SKIP_IMAGE: (optional) If present and True, don't re-image devices.
-@param file_bugs: If True your suite will file bugs on failures.
-@param max_run_time: Amount of time each test shoud run in minutes.
-"""
-import common
-from autotest_lib.server.cros.dynamic_suite import dynamic_suite
-dynamic_suite.reimage_and_run(
-    build=build, board=board, name=NAME, job=job, pool=pool,
-    check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
-</code></pre>
-
-The suite control file’s `TEST_TYPE` is `Server`. This indicates simply that the
-suite control file is meant to run server side. This restriction does not apply
-to tests contained in the suite, the suite can contain both Client and Server
-side tests regardless of this line in the suite control file.
-
-### Create a new test control file
-
-Tests can declare themselves to be part of any number of suites. This is done by
-listing the suite in the test control file’s SUITE variable. To put a test into
-multiple suites, simply use a comma separated list. In this codelab, we will add
-two existing control files and two new control files to our suite. Let's start
-with two new dummy tests control files. Create the file
-`src/third_party/autotest/files/client/site_tests/peaches_DummyPass/control`
-with the contents below. **Caution: copy-pasting from Google Docs has been known
-to convert consecutive whitespace characters into unicode characters, which will
-break your control file. Using CTRL-C + CTRL-V is safer than using middle-click
-pasting on Linux.**
-
-<pre><code># Copyright 2013 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-AUTHOR = "Chrome OS Team"
-NAME = "peaches_DummyPass"
-PURPOSE = "Dummy test that passes immediately."
-SUITE = "peaches"
-TIME = "SHORT"
-TEST_CATEGORY = "General"
-<b>TEST_CLASS = "peaches"</b>
-TEST_TYPE = "client"
-DOC = """
-Example test for peaches suite.
-"""
-job.run_test('dummy_Pass')
-</code></pre>
-
-### Create a new test control file with DEPENDENCIES
-
-In the same directory, create another file, `control.bluetooth` with the same
-contents, but with the test `NAME` changed to `peaches_DummyPass_BT` and with a
-line added near the other declarations at the top specifying:
-
-```none
-. . .
-DEPENDENCIES = "bluetooth"
-. . .
-```
-
-This label tells the dynamic suite scheduler that this job may only run on DUTs
-with the bluetooth label.
-
-### Add two simple existing tests to the suite
-
-Let's also add some existing tests to the peaches suite. For instance, edit the
-`SUITE` lines of
-`src/third_party/autotest/files/client/site_tests/login_LoginSuccess/control`
-and `.../login_BadAuthentication/control` files to include `peaches`. If you
-need to add a test to multiple suites to accomplish this, you can use a comma
-separated list of the form `SUITE = "suite1, suite2, suite3"`
-
-### Enumerate the suite’s tests
-
-To verify that we have added these 4 tests to our suite, we can use the
-`suite_enumerator` utility, as follows:
-
-```none
-user@host:~/chromiumos/src/third_party/autotest/files$ site_utils/suite_enumerator.py peaches -a .
-./client/site_tests/login_BadAuthentication/control
-./client/site_tests/peaches_DummyPass/control
-./client/site_tests/login_LoginSuccess/control
-./client/site_tests/peaches_DummyPass/control.bluetooth
-```
-
-### Include new test files in autotest-tests ebuild
-
-Earlier, we added two new test control files for client-side tests. In order for
-the new test files to be available to the DUT at test time, they must be
-included in the appropriate overlay ebuild file. This procedure is explained in
-more detail in a separate codelab -- writing a client side test (not yet
-published).
-
-Open the file
-`src/third_party/chromiumos-overlay/chromeos-base/autotest-tests/autotest-tests-9999.ebuild`.
-Near the bottom of the file, at the bottom of the long list of `IUSE_TESTS`
-entries, add the following:
-
-```none
-. . .
-      +tests_peaches_DummyPass
-      +tests_peaches_DummyPass_BT
-. . .
-```
-
-### Commit and upload changes
-
-We need to commit our changes to two separate git repositories. The changes that
-we made to the ebuild are required in order for the suite to run properly on a
-DUT, so we need to make the Autotest repo changes depend on the ebuild changes.
-
-First, from the chromiumos-overlay directory, create a commit with `git commit
--a`. Write a commit message that suits your fancy.
-
-Find the Change-ID for the commit you just created, using `git show --stat`.
-This will be some string similar in form to
-I515b9c4775f518b7b000f964a00df9845ed0c6f6, in the commit message for the commit
-you just created. You should also see in the output of that command that you
-have changed 1 file.
-
-Change directory to the Autotest repository, and create another commit, but this
-time including in your commit message a line `CQ-DEPEND=CL:*****`, pasting in
-the Change-ID of the first commit. This tells the build system that in order to
-apply our patch to the Autotest repository, it must first apply our patch to the
-chromiumos-overlay repository. You should see that 5 files have changed. If not,
-you may have forgotten to add your new control files to the git repo! Run `git
-add .` and `git commit -a --amend` to fix that.
-
-Now, upload both your changes to gerrit with `repo upload . -d` from each
-directory, or run `repo upload --br=<branch> -d` and uncomment the directories
-to upload. The `-d` flag here marks our upload as a draft, so no prying eyes
-will see our dirty hacking.
-
-Once repo upload has finished its work, you will see links to your two new
-changes on chromium-review.googlesource.com.
-
-## Build your changes into a new image using cbuildbot
-
-Determine the Change-ID for your Autotest changes. Then, submit your patch to be
-built remotely:
-
-```none
-user@host:~/chromiumos/chromite/bin$ ./cbuildbot --remote -g ***** lumpy-release-tryjob
-```
-
-where you have pasted in the Change-ID of the changes to the Autotest
-repository.
-
-The output of this command should give you a buildbot link where you can follow
-your build progress. The build will take about 6 hours.
-
-### Run your new suite
-
-Once the building step in the previous section has concluded, you should receive
-an email to this effect from **cros.tryserver@chromium.org**. Follow the link in
-this email to your build results page, then drill down to the "Report stdio"
-link, and pull out the build number (which will be a string similar to
-"**trybot-lumpy-release/R26-3556.0.0-b683**").
-
-Now, run your suite with the command
-
-```none
-user@host:~/chromiumos/src/third_party/autotest/files/site_utils$ ./run_suite.py -s peaches -b lumpy -i ***** -p try-bot
-```
-
-where \*\*\*\*\* is the build number you just extracted.
-
-Point your browser at <http://cautotest/>, and you should soon see your suite
-job appear in the job list. After the suite job has started to run, it will
-spawn sub-jobs for all the individual tests. Note that different tests may end
-up running on different DUTs.
-
-## Add suite-level dependencies
-
-One of the tests we created in the codelab, peaches_DummyPass_BT, made use of a
-DEPENDENCY to require that the test could only run on DUTs with the bluetooth
-label. In addition to specifying dependencies at the test level, they can also
-be specified at the suite level. When a suite with suite level dependencies is
-run, all the jobs kicked off by the suite will have any suite dependencies added
-in addition to the test level dependencies.
-
-To add a suite level dependency, edit the control file for the suite. Add a
-named argument to the call to dynamic_suite.reimage_and_run, of the form
-suite_dependencies=’servo’, for example. Now, when the suite is run, all jobs
-will inherit an additional dependency on servo. The string can contain multiple
-dependencies as a comma separated list.
-
-Suite-level dependencies can be useful when you want to run several closely
-related suites consisting of the same tests, but with slightly different
-dependencies. For example, if you want to run a suite focused on network3g
-connectivity, but separately on devices configured for different cellular
-carriers. See for instance <https://chromium-review.googlesource.com/41260/>
-
-## Get your suite into the regular rotation with suite_scheduler
-
-Suites can be scheduled to run in the test lab automatically, either triggered
-by build events or at regular timed intervals. To add your suite to the
-schedule, edit suite_scheduler.ini in the root directory of the Autotest repo.
-Following in the footsteps of the other suites already in the file, it should be
-easy to add your suite.
-
-To add peaches as a suite that runs nightly, add the following to
-suite_scheduler.ini
-
-```none
-. . .
-[PeachesDaily]
-run_on: nightly
-suite: peaches
-branch_specs: >=R21
-pool: suites
-num: 2
-. . .
-```
-
-The fields above specify when suite runs should be triggered, which suite should
-be run, which branches should trigger the suite to run, which machine pool the
-suite should be assigned to, and the number of DUTs that the suite should
-attempt to use. For more information on what pool to select refere to [What pool
-should I
-select](/chromium-os/testing/test-suites#TOC-What-pool-should-I-select-).
-
-If you have added a new suite to suite_scheduler.ini, one for which a suite
-control file did not exist before, you need to pay attention to the branch_specs
-attribute. Suite control files are picked up from the build artifacts (unlike
-other server-side control files). You can either backport your new suite control
-file to older maintained branches, or avoid scheduling this suite against those
-branches by using branch_specs to set a cutoff.
-
-There are some subtleties in the num parameter, with respect to test
-dependencies. You must ensure that the num parameter is greater than or equal to
-the number of unique dependency sets over all the jobs in your suite. So, for
-instance, if you have a suite (like peaches) that has some jobs with no
-dependencies, and some jobs with 1 dependency (bluetooth), you must make use num
-&gt;= 2, otherwise the suite will fail immediately on running. There’s a handy
-sanity check script to make sure you’re satisfied this:
-
-```none
-./site_utils/suite_scheduler/suite_scheduler.py --sanity
-```
-
-This sanity check will also run as a pre-submit hook, so even if you forget to
-run it yourself, you will be warned on repo upload that you have not fulfilled
-the num criteria. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/index.md b/chromium/docs/website/site/chromium-os/testing/test-code-labs/index.md
deleted file mode 100644
index 8a80b4b2d31..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: test-code-labs
-title: Test Code Labs
----
-
-* [Autotest Client
- Tests](/chromium-os/testing/test-code-labs/autotest-client-tests)
-* [Codelab for server side
- test](/chromium-os/testing/test-code-labs/server-side-test)
-* [Dynamic Suite
- Codelab](/chromium-os/testing/test-code-labs/dynamic-suite-codelab) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/control b/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/control
deleted file mode 100644
index 2f70a1b2c07..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/control
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright information
-
-AUTHOR = "your name, and at least one person ([ldap]@chromium.org) or a mailing list"
-NAME = "power_MyBacklightTest" # test name
-TIME = "SHORT" # can be MEDIUM, LONG
-TEST_CATEGORY = "Benchmark" # can be General, Stress
-TEST_CLASS = "power" # testing area, e.g., platform, network etc
-# indicating it's a server side test
-TEST_TYPE = "server"
-SUITE = "bvt" # if the test should be a part of the BVT
-
-
-DOC = """
-This test measures the backlight level before and after certain system events
-and verifies that the backlight level has not changed.
-"""
-
-
-def run_system_power_MyBacklightTest(machine):
- job.run_test('power_MyBacklightTest', client_ip=machine)
-
-# run the test in multiple machines
-
-job.parallel_simple(run_system_power_MyBacklightTest, machines)
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/index.md b/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/index.md
deleted file mode 100644
index f9316606e89..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/index.md
+++ /dev/null
@@ -1,855 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/test-code-labs
- - Test Code Labs
-page_name: server-side-test
-title: Server Side Test for Chromium OS Autotest Codelab
----
-
-********[TOC]********
-
-****## References****
-
- ****[Autotest Best
- Practices](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/best-practices.md)****
-
- ****[Writing
- Autotests](http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-Writing-Autotests)****
-
- ****[Codelab for Writing an Autotest
- Test](https://wiki.corp.google.com/twiki/bin/view/Codelab/WritingAutotestTests)
- - This is a codelab teaching you how to write a generic test for
- Autotest.****
-
- ****[Autotest for Chromium OS
- developers](http://www.chromium.org/chromium-os/testing/autotest-user-doc)****
-
- ****[Chromium OS Developer
- Guide](http://www.chromium.org/chromium-os/developer-guide)****
-
-****## Overview****
-
-****In this codelab, you will build a server-side Autotest to test if the backlight brightness is restored to the original value on a device after the following operations:****
-
- ****user is logged out and logged back in****
-
- ****device is suspended and resumed****
-
-****## Prerequisite****
-
-****This Codelab is for Chromium OS developers and testers to learn how to write a server side Autotest. Assumptions:****
-
- ****You know the Python programming language.****
-
- ****You have a device under test (DUT) with a test image installed. See
- [Chromium OS Developer
- Guide](http://www.chromium.org/chromium-os/developer-guide#TOC-Installing-Chromium-OS-on-your-Device)
- for details.****
-
- ****You have Chromium OS development environment setup, see [Chromium OS
- Developer
- Guide](http://www.chromium.org/chromium-os/developer-guide#TOC-Get-the-Source)
- for details.****
-
-****Objectives****
-
-****By the end of this lab, you will know how to:****
-
- ****Write Chromium OS server side Autotest in Python****
-
- ****Manually run the server side Autotest against a DUT****
-
- ****Automatically run test as part of a suite****
-
-****## Difference between client and server test****
-
-****Autotest has a notion of both client-side tests and server-side tests. All tests are managed by an Autotest server machine that is typically the machine where [test_that](http://go/cros-test_that) is invoked. test_that (can be found in folder scripts) is a script to run autoserv process which deploys and executes tests on remote machines.****
-
-****Code in a client-side test runs only on the device under test (DUT), and as such isn’t capable of maintaining state across reboots, handling a failed suspend/resume, or the like. If possible, an Autotest should be written as a client-side test, as it’s simpler and more reusable. Code lab for client side test can be found [here](http://www.chromium.org/chromium-os/testing/test-code-labs/autotest-client-tests).****
-
-****A ‘server’ test runs on the Autotest server, and gets assigned a DUT, just like a client-side test. It can use various Autotest primitives (and library code written by the CrOS team) to manipulate that device. Most, if not all, tests that use [Servo](/chromium-os/servo) or remote power management should be written as server-side tests. As a good example, if the DUT needs to be rebooted during the test, it should be a server-side test.****
-
-****Tests are located in 4 locations in the chromeos_public [third_party/autotest/files/](https://cs.corp.google.com/#chromeos_public/src/third_party/autotest/files/) tree:****
-
- ****client/site_tests - These are where most tests live. These are client
- tests that are Chromium OS specific.****
-
- ****client/tests - These are client tests that come from upstream Autotest,
- and most are general Linux tests (not Chromium OS specific).****
-
- ****server/site_tests - These are server tests that are Chromium OS
- specific.****
-
- ****server/tests - These are server tests that are general Linux tests (not
- Chromium OS specific).****
-
-****Decide if your test is a client or server test and choose the appropriate directory from the above.****
-
-****## Create a new server side test****
-
-****[Adding a test](https://github.com/autotest/autotest/wiki/AddingTest) involves putting a control file and a properly-written test wrapper in the right place in the source tree. There are [conventions](http://www.chromium.org/chromium-os/testing/autotest-best-practices#TOC-Writing-tests) that must be followed, and a[ variety of primitives](https://github.com/autotest/autotest/wiki/AutotestApi) available for use. When writing any code, whether client-side test, server-side test, or library, have a strong bias towards using[ Autotest utility code](http://www.chromium.org/chromium-os/testing/existing-autotest-utilities). This keeps the codebase consistent and avoids duplicated effort.****
-
-****In the subsections below, we will discuss the detail of following topics:****
-
- ****Syntax and style guide.****
-
- ****Code for a barebone server side test.****
-
- ****How to manually run a server side test on DUT.****
-
- ****Code to implement the test logic for this exercise.****
-
-****### Syntax and style guide****
-
-****Before we start writing any code, it’s a good idea to understand and follow the Python coding style enforced in Chromium OS project. For Autotest code in Chromium OS project, the Python coding style must follow the coding style specified at the top level of the Autotest repo. This style adds a few additions to [PEP-8](http://www.python.org/dev/peps/pep-0008/) style guide, e.g., formatting on comments and Docstrings. You may also consider to follow [Python Style Guidelines in Chromium Projects](http://www.chromium.org/chromium-os/python-style-guidelines), but coding style defined in Autotest repo and [PEP-8](http://www.python.org/dev/peps/pep-0008/) style guide must take precedence.****
-
-****Some basic rules include:****
-
- ****Use 4 spaces instead of tab.****
-
- ****Use the % operator for formatting strings.****
-
- ****Read [this](http://www.python.org/dev/peps/pep-0008/#indentation) about
- alignment for function calls with multiple line arguments.****
-
- ****lower_case_with_underscores for local variable, function and method
- names.****
-
- ****CapitalizedWords for class names****
-
- ****__double_leading_underscore for private class attribute name.****
-
- ****UPPER_CASE_WITH_UNDERSCORES for static public class attribute name.****
-
- ****Separate top-level function and class definitions with two blank
- lines.****
-
- ****No extra space at the end of a line. Limit all lines to a maximum of 80
- characters.****
-
- ****Use single quote for strings if possible.****
-
- ****End comment with period.****
-
-****[Here](http://www.chromium.org/developers/coding-style) is another resources talking about coding style, including languages other than Python. Keep in mind that the best practice is to keep the test file in pure Python i.e. one should avoid “shelling out” and generally use Python instead of tools like awk and grep.****
-
-****### Step 1. Name your test****
-
-****Create a folder in “src/third_party/autotest/files/server/site_tests/”. Name the folder with the test name, which is “power_MyBacklightTest”.****
-
-****To name the test properly, first you need to decide the area wherein your test falls. It should be something like “power”, "platform", or "network" for instance. Take a look at the folder names in client/site_tests and server/site_tests, you can find some sample test area, and choose one area that’s proper for your test. This name is used to create the test name: e.g. "network_UnplugCable". Create a directory for your test at $(TEST_ROOT)/$(LOWERCASE_AREA)_$(TEST_NAME).****
-
-****Try to find an example test that does something similar and copy it. You will create at least 2 files:****
-
-****${TEST_ROOT}/${LOWERCASE_AREA}_${TEST_NAME}/control****
-
-****${TEST_ROOT}/${LOWERCASE_AREA}_${TEST_NAME}/${LOWERCASE_AREA}_${TEST_NAME}.py****
-
-****Your control file runs the test and sets up default parameters. The .py file is the test wrapper, and has the actual implementation of the test. You can create multiple control files for the same test that can take different arguments. As an example, power_SuspendStress test has multiple control files that serve multiple purpose, while sharing the same test logic with different configuration.****
-
-****Inside the control file, the TEST_CLASS variable should be set to ${LOWERCASE_AREA}. The naming convention simply exists to make it easier to find other similar tests and measure the coverage in different areas of Chromium OS.****
-
-****### Step 2. Create a barebone server side test****
-
-****In this section we will discuss what’s the minimum code needed to create an empty server side test that provides all necessary files and overrides, but with no test logic in it.****
-
-****#### Step 2.1. Create a Control file****
-
-****A control file contains important metadata about the test (name, author, description, duration, what suite it’s in, etc) and then pulls in and executes the actual test code. Detailed description about each variable can be found in the [Autotest Best Practices](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/best-practices.md). You can also find more information about control files [here](https://github.com/autotest/autotest/wiki/AddingTest).****
-
-****In the folder power_MyBacklightTest you just created, create a control file named “control”, with the following content, set NAME to the test name of “power_MyBacklightTest”. Note that NAME must be exactly the same as the folder name. Set AUTHOR to your name or email address (\[user_name\]@chromium.org).****
-
-****------------------------------****
-
-****# Copyright information****
-****AUTHOR = "your name, and at least one person (\[ldap\]@chromium.org) or a mailing list"****
-****NAME = "power_MyBacklightTest" # test name****
-****TIME = "SHORT" # can be MEDIUM, LONG****
-****TEST_CATEGORY = "Benchmark" # can be General, Stress****
-****TEST_CLASS = "power" # testing area, e.g., platform, network etc****
-****TEST_TYPE = "server" *# indicating it's a server side test*****
-
-SUITE = "bvt" *# if the test should be a part of the BVT*
-# EXPERIMENTAL = "True" # Experiment is now not in use
-DOC = """
-This test measures the backlight level before and after certain system events
-and verifies that the backlight level has not changed.
-"""
-def run_system_power_MyBacklightTest(machine):
-job.run_test('power_MyBacklightTest', client_ip=machine)
-# run the test in multiple machines
-job.parallel_simple(run_system_power_MyBacklightTest, machines)
-
------------------------------------------------------
-
-This control file is used for Autotest server to run the test
-“power_MyBacklightTest” in each test device. The test is defined in the test
-wrapper file, which is explained in the next section.
-
-Some important attributes are listed here:
-
- TIME: time duration to run the test, can be FAST (&lt;1 min), SHORT, MEDIUM,
- LONG or LENGTHY (&gt;30 min).
-
- TEST_CATEGORY: describes the category for your tests e.g. Stress, Functional
-
- TEST_TYPE: Client or Server, indicating it’s a client side or server side
- test.
-
-Some optional attributes:
-
- SUITE: A comma-delimited string of suite names that this test should be a
- part of, e.g. bvt, regression, smoke
-
- [DEPENDENCIES](http://www.chromium.org/chromium-os/testing/test-dependencies-in-dynamic-suites):
- list, of, tags known to the HW test lab, e.g., webcam, blue-tooth
-
- (absolete) EXPERIMENTAL: if the test is experimental, value can be True or
- False. For experimental tests, failure is considered to be non-fatal. For
- the test you uploaded, EXPERIMENTAL should be set to True until the test
- passes reliably on all intended platforms in the lab.
-
-#### Step 2.2. Create a test wrapper
-
-The test wrapper file contains code for the test logic. Following is the source
-code for a test wrapper for a barebone server side test that contains all the
-necessary method overrides, but without any test logic. Basically the test
-wrapper contains a class derived from base class “test” (server/test.py).
-Autotest server will pick up this class and execute method “run_once” to do the
-actual test work, and call method cleanup after all tests in this test wrapper
-is done.
-
-Note that the name of folder containing the control file, the NAME value in
-control file, and the test wrapper must match the class name. To create the test
-wrapper, in the folder power_MyBacklightTest, create test file named
-“power_MyBacklightTest.py”.
-
------------------------------------------------------
-
-# Copyright information
-
-from autotest_lib.server import test
-class power_MyBacklightTest(test.test):
-
-"""Test to check backlight brightness restored after various actions."""
-version = 1
-
-def initialize(self):
-
-"""Initialize for this particular test."""
-pass
-
-def setup(self):
-pass
-
-def run_once(self, client_ip):
-
-"""Where the actual test logic lives."""
-
-pass
-def cleanup(self):
-
-"""Called at the end of the test."""
-pass
-
------------------------------------------------------
-
-The test wrapper’s base class is set to test.test (server/test.py). Autotest
-server will pick up this class and call following methods in order:
-
- **initialize**, where you can do initialization for this particular test.
-
- **run_once**, where actual test logic lives.
-
- **cleanup**, called at the end of the test.
-
-Note that setup is not called during testing. Following are some details about
-each method and attribute version.
-
-*version*
-
-You must define the class variable version.
-
-*initialize*
-
-The method initialize runs once for each job. The method is equivalent to
-_init_. It is called before actual test is run. However, do not use _init_ for
-initialization, use initialize instead. _init_ is defined and used in base class
-(base_test) to initialize the attributes for the base class. Overriding _init_
-will break the test.
-
-*Setup*
-
-This method is the only one called when you build_packages --withautotest, while
-other methods are called during testing. The method is triggered when version
-attribute’s value is changed or the test package is built the first time to
-produce expected binaries. If the test is scheduled to run in a DUT in which the
-test has already been installed, Autotest will check the version attribute’s
-value of the test class. If the value is changed, the test will be reinstalled.
-One sample usage of this method can be found
-[here](http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-Adding-binaries-for-your-tests-to-call-as-part-of-the-test).
-
-*run_once*
-
-You then must provide an override for the run_once() method in your class. The
-method contains the actual test logic. The run_once method can accept any
-arguments you desire. These are passed in as the \*dargs in the job.run_test()
-method in the control file. As the test logic can be complicated, instead of a
-lengthy run_once() method, it’s highly recommended to use member methods to
-better organize the test code for easier review. At the end of this method, you
-validate the test results in this method, and log any failure.
-
-*Cleanup*
-
-cleanup is the method where you do the custodial work, e.g., restore the
-system’s status to its original state if you have cached that, in this test,
-it’s the backlight brightness.
-
-### Step 3. Running the server-side test
-
-#### Run Autotest manually
-
-After the control file and test wrapper file are created, you can try to
-manually run your Autotest against DUT, which has a test image installed (follow
-[this
-instruction](http://www.chromium.org/chromium-os/developer-guide#TOC-Build-a-disk-image-for-your-board)
-to build a test image using the “test” argument).
-
-To get started, first you need to create or enter a chroot in your host machine.
-Details can be found
-[here](http://www.chromium.org/chromium-os/developer-guide#TOC-Create-a-chroot).
-Go to chromiumos directory, run following command to create or enter a chroot.
-
-./chromite/bin/cros_sdk
-
-Then go to folder src/scripts, run following command to setup the board, that
-is, the class of target device.
-
-./setup_board --board=${BOARD}
-
-Go to folder src/third_party/autotest/files, run following command to start
-working on the board.
-
-cros_workon --board=${BOARD} start .
-
-Once you complete above steps, you can now try to run the server side test. Go
-to src/scripts directory, run the following command to manually run your
-Autotest:
-
-test_that ${ClientIP} ${LOWERCASE_AREA}_${TEST_NAME}
-
-${LOWERCASE_AREA}_${TEST_NAME} is the NAME in control file. If you set NAME
-attribute to a different value, you need to use that value in test_that command.
-
-For example:
-
-test_that 192.168.1.20 power_MyBacklightTest
-
-You need to replace the DUT’s IP address with your own configuration.
-
-After the command is executed, the test should finish in about 30 seconds. You
-should expect output with detailed information of each step the test is
-executed, for example:
-
- Install autotest if it’s not found in DUT.
-
- Start autotestd_monitor and collect system information before and after the
- test.
-
- Execute the test logic defined in test wrapper.
-
-At the end of the output, you will find the test result, like following:
-
-------------------------------------------------------------------------------------------------------------
-
-/tmp/test_that_results_Bdfrwv/results-1-experimental_power_MyBacklightTest \[
-PASSED \]
-
-/tmp/test_that_results_Bdfrwv/results-1-experimental_power_MyBacklightTest/power_MyBacklightTest
-\[ PASSED \]
-
-------------------------------------------------------------------------------------------------------------
-
-Total PASS: 2/2 (100%)
-
-18:16:28 INFO | Finished running tests. Results can be found in
-/tmp/test_that_results_Bdfrwv
-
-In a real world example, the test may take much longer to finish to execute all
-the test logic.
-
-#### Add test to an existing test suite
-
-If you want Autotest to run your test automatically, you must add it to one or
-more existing test suites. For example, to have it run as part of the BVT (build
-validation test), you would edit the "SUITE" attribute in the control file, and
-set it equal to 'bvt'. Autotest then will pick up this test and run it as part
-of the bvt suite.
-
-The control file and test wrapper must be stored in a subfolder of
-src/third_party/autotest/files/server/site_tests/ folder. Note that the folder
-name must match the class name of the test code (the class is the one defined in
-test wrapper and derived from base class “test”). See the code lab for [Creating
-and deploying Chromium OS Dynamic Test
-Suites](/chromium-os/testing/test-code-labs/dynamic-suite-codelab).
-
-### Step 4. Implement test logic in test wrapper
-
-In the previous section, we show a test wrapper for a barebone server side test
-that contains all necessary method overrides without any actual code in it. In
-this section, we will implement the test logic which is to test if the backlight
-brightness goes back to its original setting after various scenarios. That is,
-you need to write code to accomplish the following individual tasks:
-
- Get/set backlight’s brightness
-
- Log out and log in user
-
- Suspend the device and resume
-
-Code will be added to the test wrapper we created in the last section, that is
-“power_MyBacklightTest.py”, in the folder power_MyBacklightTest. Follow each
-steps in this section, and copy the code to the test wrapper
-“power_MyBacklightTest.py”. At the end you will have a complete test to test the
-backlight brightness of a DUT.
-
-While writing a server side test, it is important to keep in mind that the test
-execution is initiated in the server. To execute a command running on the DUT,
-you need to run the command through a host object (self._client showing in the
-code). Different from to a server side test, client side test code is copied to
-the DUT and executed within the DUT.
-
-#### Step 4.1. Import modules useful for Chromium OS specific test
-
-Add the imports at the beginning of test wrapper.
-
-import logging, os, subprocess, tempfile, time
-
-from autotest_lib.client.common_lib import
-[error](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=client/common_lib/error.py;h=d9854db796a812b86089773b4cfb365a8ddf0359;hb=HEAD)
-from autotest_lib.server import
-[autotest](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=server/autotest.py;h=56b578b08da7d61762dad1bec71608db84ed81d4;hb=HEAD)
-from autotest_lib.server import
-[hosts](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=tree;f=server/hosts;h=c493f142abfaacc5a9db28c64cbc3fbbe9d08f75;hb=HEAD)
-from autotest_lib.server import
-[test](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=server/test.py;h=8fdba9d7c40addf23e139b060f558e17bb34e40b;hb=HEAD)
-from autotest_lib.server import
-[utils](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=server/utils.py;h=72f72f938f37b7c7cac729de05df446b0bbbd253;hb=HEAD)
-
-These modules include some useful base classes to be used to run commands in a
-test device or control a servo device. More details about how
-[import](http://www.chromium.org/chromium-os/testing/autotest-developer-faq#TOC-Writing-Autotests)
-is used in Autotest can be found
-[here](/chromium-os/testing/autotest-developer-faq#TOC-A-word-about-imports).
-Note that each line only imports one module and modules are ordered
-alphabetically.
-
-Step 4.2. Helper methods
-
-Add following methods to class power_MyBacklightTest. They are some helper
-methods to execute the commands from the DUT, or used to check the DUT’s power
-status.
-
-def _client_cmd(self, cmd):
-"""Execute a command on the client.
-@param cmd: command to execute on client.
-@return: The output object, with stdout and stderr fields.
-"""
-logging.info('Client cmd: \[%s\]', cmd)
-return self._client.run(cmd)
-def _client_cmd_and_wait_for_restart(self, cmd):
-boot_id = self._client.get_boot_id()
-self._client_cmd('sh -c "sync; sleep 1; %s" &gt;/dev/null 2&gt;&1 &' % cmd)
-self._client.wait_for_restart(old_boot_id=boot_id)
-def _check_power_status(self):
-cmd_result = self._client_cmd('status powerd')
-if 'running' not in cmd_result.stdout:
-raise error.TestError('powerd must be running.')
-
-****result = self._client_cmd('power_supply_info | grep online')****
-
-if 'yes' not in result.stdout:
-raise error.TestError('power must be plugged in.')
-
-#### Step 4.3. Get/Set brightness
-
-Add following two methods in class power_MyBacklightTest. In these two methods,
-a command is passed by _client_cmd method to get current brightness from test
-device, and _set_brightness to set the device.
-
-def _get_brightness(self):
-"""Get brightness in integer value. It's not a percentage value and
-may be over 100"""
-result = self._client_cmd('backlight_tool --get_brightness')
-return int(result.stdout.rstrip())
-
-def _set_brightness_percent(self, brightness=100):
-result = self._client_cmd('backlight_tool --set_brightness_percent %d'
-
-% brightness)
-
-#### Step 4.4. Actions being taken during the test
-
-Add following methods in class power_MyBacklightTest. In these methods, command
-is called to apply actions to DUT, including, logout/login, and power
-suspend/resume.
-
-def _do_logout(self):
-
-self._client_cmd('restart ui')
-
-def _do_suspend(self):
-
-# The method calls a client side test 'power_resume' to do a power
-
-# suspend on the DUT. It is easy yet powerful for one test to run
-
-# another test to implement certain action without duplicating code.
-
-self._client_at.run_test('power_Resume')
-
-#### Step 4.5. Disable ALS(Auto Light Sensor)
-
-Auto light sensor might interfere the brightness, so it needs to be disabled
-before test starts, and re-enabled after the test finishes. Add following two
-methods in class power_MyBacklightTest.
-
-def _set_als_disable(self):
-"""Turns off ALS in power manager. Saves the old has_ambient_light_sensor
-flag if it exists.
-"""
-
-# Basic use of shell code via ssh run command is acceptable, rather than
-
-# shipping over a small script to perform the same task.
-als_path = '/var/lib/power_manager/has_ambient_light_sensor'
-self._client_cmd('if \[ -e %s \]; then mv %s %s_backup; fi' %
-(als_path, als_path, als_path))
-self._client_cmd('echo 0 &gt; %s' % als_path)
-self._client_cmd('restart powerd')
-self._als_disabled = True
-
-def _restore_als_disable(self):
-"""Restore the has_ambient_light_sensor flag setting that was overwritten in
-_set_als_disable.
-"""
-if not self._als_disabled:
-return
-als_path = '/var/lib/power_manager/has_ambient_light_sensor'
-self._client_cmd('rm %s' % als_path)
-self._client_cmd('if \[ -e %s_backup \]; then mv %s_backup %s; fi' %
-(als_path, als_path, als_path))
-self._client_cmd('restart powerd')
-
-#### Step 4.6. Run test and validate test results
-
-This is the method where you run the actual test logic. At the end of this
-method, you validate the test results, and log any failure. It overrides the
-run_once method in base class test.test.
-
-# The dictionary of test scenarios and its corresponding method to
-
-# apply each action to the DUT.
-
-_transitions = {
-'logout': _do_logout,
-'suspend': _do_suspend,
-}
-
-def run_once(self, client_ip):
-"""Run the test.
-
-****For each system transition event in |_transitions|:****
-
-Read the brightness.
-Trigger transition event.
-Wait for client to come back up.
-Check new brightness against previous brightness.
-@param client_ip: string of client's ip address (required)
-"""
-if not client_ip:
-error.TestError("Must provide client's IP address to test")
-
-# Create a custom host class for this machine, which is used to execute
-
-# commands and other functions.
-self._client = hosts.create_host(client_ip)
-
-# Create an Autotest instance which you can run method like run_test,
-
-# which can execute another client side test to facilitate this test.
-self._client_at = autotest.Autotest(self._client)
-
-****self._results = {}****
-
-****self._check_power_status()****
-
-self._set_als_disable()
-# Save the original brightness, to be restored after the test ends.
-self._original_brightness = self._get_brightness()
-# Set the brightness to a random number which is different from
-# system default value.
-self._set_brightness_percent(71)
-# Run the transition event tests.
-for test_name in self._transitions:
-self._old_brightness = self._get_brightness()
-
-****self._transitions\[test_name\](self)****
-
-# Save the before and after backlight values.
-self._results\[test_name\] = { 'old': self._old_brightness,
-'new': self._get_brightness() }
-
-# Check results to make sure backlight levels were preserved across
-# transition events.
-num_failed = 0
-for test_name in self._results:
-old_brightness = self._results\[test_name\]\['old'\]
-new_brightness = self._results\[test_name\]\['new'\]
-if old_brightness == new_brightness:
-logging.info('Transition event \[ PASSED \]: %s', test_name)
-else:
-logging.info('Transition event \[ FAILED \]: %s', test_name)
-logging.info(' Brightness changed: %d -&gt; %d',
-old_brightness, new_brightness)
-num_failed += 1
-if num_failed &gt; 0:
-raise error.TestFail(('Failed to preserve backlight over %d '
-'transition event(s).') % num_failed)
-
-#### Step 4.7. Cleanup
-
-“cleanup” is the method where you do the custodial work, e.g., restore the
-system’s status to its original state if you have cached that, in this test,
-it’s the backlight brightness. It overrides the cleanup method in base class
-test.test.
-
-def cleanup(self):
-"""Restore DUT's condition before the test starts, and check the test
-results.
-"""
-self._restore_als_disable()
-self._set_brightness_percent(self._original_brightness)
-
-For more information on writing your test, see the [frequently asked
-questions](http://www.chromium.org/chromium-os/testing/autotest-developer-faq).
-
-## Verify Test by Running Autotest Manually
-
-After you complete the last section, you should have all the code ready to run
-the test. As discussed in earlier section, once you configure the chroot
-properly, you can try to run the server side test manually with following
-command in src/scripts folder:
-
-test_that ${ClientIP} ${LOWERCASE_AREA}_${TEST_NAME}
-
-For example:
-
-test_that 192.168.1.20 power_MyBacklightTest
-
-You need to replace the board name and DUT’s IP address with your own
-configuration.
-
-If the test is successful, the following should happen in your test device in
-order:
-
- User log out
-
- User log in
-
- Screen brightness stays at 71%.
-
- Screen goes black (system suspend/resume).
-
- System comes up again.
-
- Screen brightness stays at 71%.
-
- In the clean up procedure, screen brightness is reset to its original value.
-
-All log generated from the test run can be found in a tmp folder, e.g.,
-/tmp/test_that_results_WZ_eVZ. The following are some files useful for
-troubleshooting an issue:
-
- status and status.log, contains the result of each test’s start/end time and
- test result.
-
- keyval, some setup information, e.g., drone, DUT’s hostname
-
- debug/autoserv.DEBUG, contains all logs collected by autoserv during the
- test.
-
-When the test is completed, following message will be shown at the end of the
-output to indicate all tests are passed:
-
-------------------------------------------------------------------------------------------------------------
-/tmp/test_that_results_Bdfrwv/results-1-experimental_power_MyBacklightTest \[
-PASSED \]
-/tmp/test_that_results_Bdfrwv/results-1-experimental_power_MyBacklightTest/power_MyBacklightTest
-\[ PASSED \]
-------------------------------------------------------------------------------------------------------------
-Total PASS: 2/2 (100%) 18:16:28 INFO | Finished running tests. Results can be
-found in /tmp/test_that_results_Bdfrwv
-
-To review the test result later, you can always run generate_test_report to
-retrieve above test result.
-
-## Possible failure scenarios
-
-### Device failed to reboot
-
-If the device failed to reboot during the test, the test will eventually timed
-out and consider failed. You need to verify the DUT is still connected to
-network and can be used to test. A quick check you can do is to ssh to the DUT
-as root user.
-
----
-
-Code of the test wrapper
-
-Reference:
-/src/third_party/autotest/files/server/site_tests/power_BacklightServer
-
-<https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/server/site_tests/power_BacklightServer>
-
----
-
-**# Copyright 2018 The Chromium OS Authors. All rights reserved.**
-**# Use of this source code is governed by a BSD-style license that can be**
-**# found in the LICENSE file.**
-**import logging, os, subprocess, tempfile, time**
-**from autotest_lib.client.common_lib import error**
-**from autotest_lib.server import autotest**
-**from autotest_lib.server import hosts**
-**from autotest_lib.server import test**
-**from autotest_lib.server import utils**
-**class power_MyBacklightTest(test.test):**
-
-**"""Test to check backlight brightness restored after various actions."""**
-**version = 1**
-**def _client_cmd(self, cmd):**
-**"""Execute a command on the client.**
-**@param cmd: command to execute on client.**
-**@return: The output object, with stdout and stderr fields.**
-**"""**
-**logging.info('Client cmd: \[%s\]', cmd)**
-**return self._client.run(cmd)**
-**def _client_cmd_and_wait_for_restart(self, cmd):**
-**boot_id = self._client.get_boot_id()**
-**self._client_cmd('sh -c "sync; sleep 1; %s" &gt;/dev/null 2&gt;&1 &' % cmd)**
-**self._client.wait_for_restart(old_boot_id=boot_id)**
-**def _get_brightness(self):**
-**"""Get brightness in integer value. It's not a percentage value and**
-**may be over 100"""**
-**result = self._client_cmd('backlight_tool --get_brightness')**
-**return int(result.stdout.rstrip())**
-**def _set_brightness_percent(self, brightness=100):**
-**result = self._client_cmd('backlight_tool --set_brightness_percent %d'**
-**% brightness)**
-**def _check_power_status(self):**
-**cmd_result = self._client_cmd('status powerd')**
-**if 'running' not in cmd_result.stdout:**
-**raise error.TestError('powerd must be running.')**
-**result = self._client_cmd('power_supply_info | grep online')**
-**if 'yes' not in result.stdout:**
-**raise error.TestError('power must be plugged in.')**
-**def _do_logout(self):**
-**self._client_cmd('restart ui')**
-**def _do_suspend(self):**
-
-**# The method calls a client side test 'power_resume' to do a power**
-
-**# suspend on the DUT. It is easy yet powerful for one test to run**
-
-**# another test to implement certain action without duplicating code.**
-**self._client_at.run_test('power_Resume')**
-**_transitions = {**
-**'logout': _do_logout,**
-**'suspend': _do_suspend,**
-**}**
-**_als_disabled = False**
-**def _set_als_disable(self):**
-**"""Turns off ALS in power manager. Saves the old has_ambient_light_sensor flag if**
-**it exists.**
-**"""**
-**als_path = '/var/lib/power_manager/has_ambient_light_sensor'**
-**self._client_cmd('if \[ -e %s \]; then mv %s %s_backup; fi' %**
-**(als_path, als_path, als_path))**
-**self._client_cmd('echo 0 &gt; %s' % als_path)**
-**self._client_cmd('restart powerd')**
-**self._als_disabled = True**
-**def _restore_als_disable(self):**
-**"""Restore the has_ambient_light_sensor flag setting that was overwritten in**
-**_set_als_disable.**
-**"""**
-**if not self._als_disabled:**
-**return**
-**als_path = '/var/lib/power_manager/has_ambient_light_sensor'**
-**self._client_cmd('rm %s' % als_path)**
-**self._client_cmd('if \[ -e %s_backup \]; then mv %s_backup %s; fi' %**
-**(als_path, als_path, als_path))**
-**self._client_cmd('restart powerd')**
-**def run_once(self, client_ip):**
-**"""Run the test.**
-**For each system transition event in |_transitions|:**
-**Read the brightness.**
-**Trigger transition event.**
-**Wait for client to come back up.**
-**Check new brightness against previous brightness.**
-**@param client_ip: string of client's ip address (required)**
-**"""**
-**if not client_ip:**
-**error.TestError("Must provide client's IP address to test")**
-
-**# Create a custom host class for this machine, which is used to execute**
-
-**# commands and other functions.**
-
-**self._client = hosts.create_host(client_ip)**
-**# Create an Autotest instance which you can run method like run_test,**
-
-**# which can execute another client side test to facilitate this test.**
-
-**self._client_at = autotest.Autotest(self._client)**
-**self._results = {}**
-**self._check_power_status()**
-**self._set_als_disable()**
-**# Save the original brightness, to be restored after the test ends.**
-**self._original_brightness = self._get_brightness()**
-**# Set the brightness to a random number which is different from**
-**# system default value.**
-**self._set_brightness_percent(71)**
-**# Run the transition event tests.**
-**for test_name in self._transitions:**
-**self._old_brightness = self._get_brightness()**
-**self._transitions\[test_name\](self)**
-**# Save the before and after backlight values.**
-**self._results\[test_name\] = { 'old': self._old_brightness,**
-**'new': self._get_brightness() }**
-**def cleanup(self):**
-**"""Restore DUT's condition before the test starts, and check the test**
-**results.**
-**"""**
-**self._restore_als_disable()**
-**self._set_brightness_percent(self._original_brightness)**
-**# Check results to make sure backlight levels were preserved across**
-**# transition events.**
-**num_failed = 0**
-**for test_name in self._results:**
-**old_brightness = self._results\[test_name\]\['old'\]**
-**new_brightness = self._results\[test_name\]\['new'\]**
-**if old_brightness == new_brightness:**
-**logging.info('Transition event \[ PASSED \]: %s', test_name)**
-**else:**
-**logging.info('Transition event \[ FAILED \]: %s', test_name)**
-**logging.info(' Brightness changed: %d -&gt; %d',**
-**old_brightness, new_brightness)**
-**num_failed += 1**
-**if num_failed &gt; 0:**
-**raise error.TestFail(('Failed to preserve backlight over %d '**
-
-****'transition event(s).') % num_failed)****** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/power_MyBacklightTest.py b/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/power_MyBacklightTest.py
deleted file mode 100644
index 9f21b38ee28..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-code-labs/server-side-test/power_MyBacklightTest.py
+++ /dev/null
@@ -1,190 +0,0 @@
-# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging, os, subprocess, tempfile, time
-
-from autotest_lib.client.common_lib import error
-from autotest_lib.server import autotest
-from autotest_lib.server import hosts
-from autotest_lib.server import test
-from autotest_lib.server import utils
-
-class power_MyBacklightTest(test.test):
- """Test to check backlight brightness restored after various actions."""
- version = 1
-
- def _client_cmd(self, cmd):
- """Execute a command on the client.
-
- @param cmd: command to execute on client.
- @return: The output object, with stdout and stderr fields.
- """
- logging.info('Client cmd: [%s]', cmd)
- return self._client.run(cmd)
-
-
- def _client_cmd_and_wait_for_restart(self, cmd):
- boot_id = self._client.get_boot_id()
- self._client_cmd('sh -c "sync; sleep 1; %s" >/dev/null 2>&1 &' % cmd)
- self._client.wait_for_restart(old_boot_id=boot_id)
-
-
- def _get_brightness(self):
- """Get brightness in integer value. It's not a percentage value and
- may be over 100"""
- result = self._client_cmd('backlight_tool --get_brightness')
- return int(result.stdout.rstrip())
-
-
- def _set_brightness_percent(self, brightness=100):
- result = self._client_cmd('backlight_tool --set_brightness_percent %d'
- % brightness)
-
-
- def _check_power_status(self):
- cmd_result = self._client_cmd('status powerd')
- if 'running' not in cmd_result.stdout:
- raise error.TestError('powerd must be running.')
-
- result = self._client_cmd('power_supply_info | grep online')
- if 'yes' not in result.stdout:
- raise error.TestError('power must be plugged in.')
-
-
- def _do_reboot(self):
- self._client_cmd_and_wait_for_restart('reboot')
-
-
- def _do_panic(self):
- self._client_cmd_and_wait_for_restart('echo panic > /proc/breakme')
-
-
- def _do_logout(self):
- self._client_cmd('restart ui')
-
-
- def _do_suspend(self):
- # The method calls a client side test 'power_resume' to do a power
- # suspend on the DUT. It is easy yet powerful for one test to run
- # another test to implement certain action without duplicating code.
- self._client_at.run_test('power_Resume')
-
-
- def _do_power_off(self):
- # TODO(sque): Do power off thru servo. crosbug.com/25867
- pass
-
-
- _transitions = { #'reboot': _do_reboot,
- #'panic': _do_panic,
- #'logout': _do_logout,
- #'suspend': _do_suspend,
- # 'power_off': _do_power_off,
- }
-
- _als_disabled = False
-
- def _set_als_disable(self):
- """Turns off ALS in power manager. Saves the old
- has_ambient_light_sensor flag if it exists.
- """
- als_path = '/var/lib/power_manager/has_ambient_light_sensor'
- self._client_cmd('if [ -e %s ]; then mv %s %s_backup; fi' %
- (als_path, als_path, als_path))
- self._client_cmd('echo 0 > %s' % als_path)
- self._client_cmd('restart powerd')
- self._als_disabled = True
-
- def _set_als_disable(self):
- """Turns off ALS in power manager. Saves the old
- has_ambient_light_sensor flag if it exists.
- """
- als_path = '/var/lib/power_manager/has_ambient_light_sensor'
- self._client_cmd('if [ -e %s ]; then mv %s %s_backup; fi' %
- (als_path, als_path, als_path))
- self._client_cmd('echo 0 > %s' % als_path)
- self._client_cmd('restart powerd')
- self._als_disabled = True
-
-
- def _restore_als_disable(self):
- """Restore the has_ambient_light_sensor flag setting that was
- overwritten in _set_als_disable.
- """
- if not self._als_disabled:
- return
- als_path = '/var/lib/power_manager/has_ambient_light_sensor'
- self._client_cmd('rm %s' % als_path)
- self._client_cmd('if [ -e %s_backup ]; then mv %s_backup %s; fi' %
- (als_path, als_path, als_path))
- self._client_cmd('restart powerd')
-
-
- def run_once(self, client_ip):
- """Run the test.
-
- For each system transition event in |_transitions|:
- Read the brightness.
- Trigger transition event.
- Wait for client to come back up.
- Check new brightness against previous brightness.
-
- @param client_ip: string of client's ip address (required)
- """
- if not client_ip:
- error.TestError("Must provide client's IP address to test")
- # Create a custom host class for this machine, which is used to execute
- # commands and other functions.
- self._client = hosts.create_host(client_ip)
- # Create an Autotest instance which you can run method like run_test,
- # which can execute another client side test to facilitate this test.
- self._client_at = autotest.Autotest(self._client)
-
- self._results = {}
-
- self._check_power_status()
- self._set_als_disable()
-
- # Save the original brightness, to be restored after the test ends.
- self._original_brightness = self._get_brightness()
- # Set the brightness to a random number which is different from
- # system default value.
- self._set_brightness_percent(71)
-
- # Run the transition event tests.
- for test_name in self._transitions:
- self._old_brightness = self._get_brightness()
-
- self._transitions[test_name](self)
-
- # Save the before and after backlight values.
- self._results[test_name] = { 'old': self._old_brightness,
- 'new': self._get_brightness() }
-
-
- def cleanup(self):
- """Restore DUT's condition before the test starts, and check the test
- results.
- """
- self._restore_als_disable()
- self._set_brightness_percent(self._original_brightness)
-
- # Check results to make sure backlight levels were preserved across
- # transition events.
- num_failed = 0
- for test_name in self._results:
- old_brightness = self._results[test_name]['old']
- new_brightness = self._results[test_name]['new']
-
- if old_brightness == new_brightness:
- logging.info('Transition event [ PASSED ]: %s', test_name)
- else:
- logging.info('Transition event [ FAILED ]: %s', test_name)
- logging.info(' Brightness changed: %d -> %d',
- old_brightness, new_brightness)
- num_failed += 1
-
- if num_failed > 0:
- raise error.TestFail(('Failed to preserve backlight over %d '
- 'transition event(s).') % num_failed)
diff --git a/chromium/docs/website/site/chromium-os/testing/test-dependencies-in-dynamic-suites/index.md b/chromium/docs/website/site/chromium-os/testing/test-dependencies-in-dynamic-suites/index.md
deleted file mode 100644
index a0e9676431f..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-dependencies-in-dynamic-suites/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: test-dependencies-in-dynamic-suites
-title: Test Dependencies in Dynamic Suites
----
-
-****[TOC]****
-
-****Not all tests can be run on all machines. Currently, the dynamic suite infrastructure has no way to deal with this issue. Our intent is to use the existing autotest control file DEPENDENCIES field to express what a test needs in order to be able to run. Any label in use in the autotest lab is valid in a test’s DEPENDENCIES list.****
-
-**# DEPENDENCIES in autotest control files today**
-
-**Currently, it seems that DEPENDENCIES in control files are parsed in only when tests are imported for use via the web front end, and they (may be) honored when tests are scheduled via that method.**
-**Dependencies can also be specified when running a test via the create_job() RPC exposed by the AFE.**
-
-**# DEPENDENCIES in dynamic suites**
-
-**There are two, related, issues here. One is how individual tests will declare the things they need from a host in order to run, and how the dynamic suite infrastructure will schedule these tests on appropriate machines. The second, more complex issue, is how the dynamic suites code will ensure that -- for a given suite -- it reimages a set of hosts that will enable all tests in the suite to be scheduled.**
-
-**## Scheduling tests on appropriate hosts**
-
-**As the dynamic suite code is already parsing each individual test control file it intends to run, it will not be too hard for it to add the contents of DEPENDENCIES to the metahost spec that it already builds up when scheduling tests with the create_job() RPC.**
-
-**## Determining which machines to reimage for a suite**
-
-**There are several parameters that will inform dynamic suites’ decision about which machines to reimage for a suite:**
-
-1. **the board being tested,**
-2. **the number of machines the suite asks to use, and**
-3. **the collective dependencies of all tests in the suite.**
-
-**These criteria introduce some new potential failure modes for suites:**
-
-1. **there is at least one test with unsatisfiable dependencies**
- * **We should just fast-fail the suite, because we're not going to
- be able to complete it.**
-2. **all dependencies are satisfiable, but not by the number of
- machines requested**
-3. **all dependencies can be satisfied by &lt; num machines, but none
- of the remaining machines satisfy any tests in the suite**
- * **consider a bluetooth test suite that wants two machines, but
- we have only one machine with bluetooth**
-
-**There are also some resource efficiency concerns here:**
-
-1. **Machines with rare labels, or label combos, should be avoided if
- possible**
- * **The only i5 lumpy with a Y3400 modem and swedish keyboard
- should not be used when an i5 wifi-only lumpy from any region
- will do**
-2. **One test in a suite with a rare label should not lead to the suite
- monopolizing all hosts with that label**
- * **a suite that asks for 4 machines and has 15 tests that will
- run anywhere and one that requires GOBI2K should grab 1 GOBI2K
- device and 3 wifi-only ones.**
-
-**## The naive algorithm (in broad strokes)**
-
-**There’s a set of machines in the lab, each of which is described by a set of labels There’s also a suite (read: set) of tests, each of which is described by a set of labels (read: dependencies). For a given N, we need to find a set of N machines such that the dependencies of each test in the suite are satisfied by some machine in the set.**
-**The difficulty is that we want to use ‘rare’ machines only if we really need them. If we weight hosts somehow, this should allow us to build a scoring function that we can use in a simulated annealing or hill-climbing kind of approximation algorithm.**
-
-**### No, it’s not a set-cover problem**
-
-**At first blush, this problem felt to me like a set-cover problem. Merge all the dependencies of all tests in the suite into a single, de-dup’d list, and then find the smallest number of devices whose label sets covered the whole she-bang. The problem is that this algorithm could provide a solution that leaves some tests unsatisfied. Consider the following example:**
-
-**<table>**
-**<tr>**
-**<td>Test Dependencies</td>**
-**<td>Host Labels</td>**
-**</tr>**
-**<tr>**
-**<td>\[RPM, BT, GOBI3K\]</td>**
-**<td>\[RPM, BT, GOBI3K\]</td>**
-**</tr>**
-**<tr>**
-**<td>\[RPM, BT, i5\]</td>**
-**<td>\[RPM, i5\]</td>**
-**</tr>**
-**</table>**
-
-**This algorithm would merge the test deps into \[RPM, BT, GOBI3K, i5\], and determine that choosing both hosts would successfully cover. The problem is that the second test cannot be run in this testbed, as no machine meets all its dependencies.**
-
-**## A dead-stupid first pass (read: what we've implemented so far!)**
-
-**Since we only have tests with a single dependency these days, we’re going to
-start by gathering all the deps of all the tests in the suite, de-duping them,
-and finding &lt;= N machines to satisfy those deps. We may try to be smart about
-how we pad out the machines to reach N, if we can. If we have 10 Gobi3K tests
-and 2 Gobi2K tests, and N == 3, then we might try to get 2 Gobi3K devices and 1
-Gobi2K, for example. If we can satisfy all tests with &lt; N devices, and cannot
-pad to reach N total devices, we’ll WARN, but continue to run the suite.** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/test-lab-setup/index.md b/chromium/docs/website/site/chromium-os/testing/test-lab-setup/index.md
deleted file mode 100644
index ad2682a7c8e..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-lab-setup/index.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: test-lab-setup
-title: Test Lab Setup
----
-
-This page will walk you through duplicating the majority of the test lab set up
-that Chrome OS runs internally to validate builds on real hardware.
-
-**You will need:**
-
-* A linux machine for running the multiple servers required.
- * Note you can run them all on one machine or multiple in order to
- scale and spread load.
-* A Chromiumos checkout
- * <http://www.chromium.org/test lab setup (i.e. Autotest Server
- and Devserver)chromium-os/quick-start-guide>
-* A Chrome OS Device.
-
-## Setting up SSH Access to your test device.
-
-In order to run the automated tests against your device you need to ensure it is
-running a Test Image and you have password-less SSH Access.
-
-Please follow:
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md#Set-up-SSH-connection-between-chroot-and-DUT>
-
-## Setting up an Autotest Server and Web Frontend
-
-Autotest is the software that is used to run the tests on devices and also
-collect the results.
-
-Please follow to install and configure the tools:
-
-<https://sites.google.com/a/ch
-romium.org/dev/chromium-os/testing/autotest-developer-faq/setup-autotest-server>
-
-After this is complete you should have an Autotest Frontend (AFE) running on
-your server, please go to <http://localhost> to verify.
-
-## Using the Autotest Server
-
-Now that you have set up the Autotest Server, you need to import your tests, add
-test hosts and launch the scheduler. Please refer to
-<https://www.chromium.org/chromium-os/testing/autotest-developer-faq/autotest-server-usage>
-for more information.
-
-**Note: At this point you can run tests through the Web Interface. However you
-lack the ability to automatically have your devices be re-imaged by the test
-servers. The following steps will setup a Devserver to stage test images from
-Google Storage so that you can do automated updates. This process is currently
-for Internal Google Use and our Partners. If you are a Partner, please contact
-your Google Representative about requesting access to our images.**
-
-## Devserver Prerequisites
-
-Our images are stored in Google Storage and first you need to setup your machine
-to give you access to these builds.
-
-**You will need:**
-
-* Python modules: CherryPy and lockfile
- * **apt-get install python-cherrypy3 python-lockfile**, or
- easy_install -U cherrypy3 lockfile
-* [gsutil
- installed](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/gsutil.md#installing-gsutil)
-* A .boto file in your home directory
- * Run \`gsutil config\`
-
-If you are a Chrome OS Googler you can verify everything is setup by running
-\`gsutil ls gs://chromeos-image-archive\` if you are an external partner test
-with the bucket you have been supplied.
-
-## Devserver Setup
-
-\*After you have installed the above dependencies:
-
-```none
-cd [Your Chromium OS Checkout]/src/platform/dev
-./devserver.py -t --production --archive_dir /some/path/images
-```
-
-Explanation of options above:
-
-* -t - This tells the devserver to serve test images. If you do not
- want to serve test images leave this option off. For a lab set up
- test images are required
-* --production - This increases the server thread pool for cherrypy.
- Again if you are not expecting any sort of load on this server this
- is unnecessary
-* --archive_dir - The directory where all images are stored that are
- staged by the devserver.
-
-After running the above command you will see some information printed out by
-cherrypy and you should be able to browse to*http://server_hostname:8080*. There
-you will see a short index of the different operations that can be carried out
-similar to what is summarized in the "Services Provided by Devserver" paragraph
-above.
-
-## Running Test Suites
-
-Now that everything is configured please refer to the Test Suite Documentation
-on how to the "lab" you just set up. You will likely want to pay attention to
-the sections involving test_that and run_suite.py
-
-<https://www.chromium.org/chromium-os/testing/test-suites>
diff --git a/chromium/docs/website/site/chromium-os/testing/test-suites/index.md b/chromium/docs/website/site/chromium-os/testing/test-suites/index.md
deleted file mode 100644
index 1745e7e383a..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/test-suites/index.md
+++ /dev/null
@@ -1,513 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: test-suites
-title: Test Suites
----
-
-This document describes how to write, update, run, disable, and enumerate tests
-that are in a Test Suite.
-
-[TOC]
-
-A test suite is a collection of tests, client and server side, that are run on a
-particular build to validate a larger system.
-
-[Design Doc](/chromium-os/testing/dynamic-test-suites)
-
-Test Suites build on the Autotest [control file
-specification](http://autotest.readthedocs.org/en/latest/main/local/ControlRequirements.html).
-
-# How to Create a new Test Suite
-
-In order to create a valid suite the following two requirements need to be met:
-
-* A Suite control file (e.g.
- [test_suites/control.bvt-inline](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/test_suites/control.bvt-inline))
-* At least one test with the 'suite:&lt;your_suite_name&gt;' tag in
- the ATTRIBUTES line of test control file.
-
-We have a mechanism that allows suites of tests to be defined dynamically by a
-control file at runtime.
-`[test_suites/control.bvt-inline](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/test_suites/control.bvt-inline)`
-in the autotest repo is a simple example of such a suite, and
-[login_LoginSuccess](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/client/site_tests/login_LoginSuccess/control)
-is one test that's included in this suite. Looking at the control file for
-login_LoginSuccess, note the line ATTRIBUTES = "suite:bvt-inline,
-suite:push_to_prod, suite:smoke". This is used in `control.bvt-inline` like
-this:
-
-```none
-...
-```
-
-```none
-args_dict['name'] = 'bvt-inline'
-```
-
-```none
-dynamic_suite.reimage_and_run(**args_dict)
-```
-
-The infrastructure finds login_LoginSuccess by matching the contents of the
-suite tags in ATTRIBUTES field in its control file against the suite name passed
-into `dynamic_suite.reimage_and_run()`
-
-`If one test should be in multiple suites, the ATTRIBUTES field in the control
-file can be a comma delimited list of suite tags.`
-
-```none
-ATTRIBUTES = "suite:bvt-inline, suite:push_to_prod, suite:smoke"
-```
-
-For an end-to-end demonstration of the flow of creating a new suite, see
-[Dynamic Suites Code
-Lab](/chromium-os/testing/test-code-labs/dynamic-suite-codelab)
-
-# How to Modify Suites
-
-This section will go over adding, removing, and marking tests as experimental.
-
-Some suites have restrictions when it comes to adding tests to them. To read
-about the requirements of a particular test suite refer to its suite control
-under autotest/files/test_suites/control.suite_name.
-
-For example:
-[control.bvt-inline](https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/test_suites/control.bvt-inline)
-
-## How to Add tests to a Suite
-
-Add the 'suite:&lt;your_suite_name&gt;' tag to the ATTRIBUTES field in the
-control file of the test you want to be run in the suite. If this test is new
-add it as an experimental test first, see below.
-
-## How to Disable Tests in Test Suite?
-
-To disable a test *remove* the 'suite:&lt;your_suite_name&gt;' tag from the
-ATTRIBUTES field, if it is the only variable in the ATTRIBUTES field, remove the
-entire ATTRIBUTES line.
-
-You may consider marking a test as experimental to avoid closing of the tree but
-continue running tests.
-
-## Add new experimental tests?
-
-Some times you may want to add tests that are experimental to start gathering
-some data but you do not want the tree to be closed. To do this use the
-EXPERIMENTAL control file variable.
-
-```none
-AUTHOR = "Autotest Team"
-NAME = "Sleeptest"
-TIME = "SHORT"
-TEST_CATEGORY = "Functional"
-TEST_CLASS = "General"
-TEST_TYPE = "client"
-ATTRIBUTES = "suite:bvt-inline"
-EXPERIMENTAL = "True"
-```
-
-An example of a test marked experimental.
-
-# Suite Options
-
-These are options that you can use to tweak the behavior in your suite control
-file.
-
-**check_hosts**
-
-Boolean, if the hosts required are not currently in good health fail the suite.
-You may want to let the suite sit around for a while and wait for the hosts to
-be repaired. Default: True
-
-**add_experimental**
-
-If you only want the suite to include non-experimental tests. Default: True
-
-**file_bugs**
-
-Whether or not bugs should be filed when tests fail (See below for a more
-detailed example)
-
-**file_expermental_bugs**
-
-Whether or not bugs should be filed when experimental tests fail
-
-**max_runtime_mins**
-
-How long each job should be allowed to run in a suite. Default is 24 hours. (See
-below for an example)
-
-**suite_dependencies**
-
-If you want to apply a dependency across the whole suite (See below for a more
-detailed example)
-
-**version_prefix**
-
-What version_prefix to use. Currently we have two types of version_prefix
-CROS_VERSION_PREFIX and FW_VERSION_PREFIX, defined in
-autotest_lib.server.cros.provision
-
-This tells our infrastructure how you would like to provision the
-allocateviarabled machines. CROS_VERSION_PREFIX tells the infrastructure to
-provision the machines to the correct OS version.
-
-FW_VERSION_PREFIX tells the infrastructure to provision the machines to the
-correct firmware version.
-
-**deprecated option: skip_reimage**
-
-This option has been deprecated. If you specify a build string when creating the
-suite, our infrastructure will automatically provision the allocated machines to
-the requested build.
-
-## Add a suite-level dependency?
-
-In addition to DEPENDENCIES specified on a per-test level, a set of suite
-dependencies can be specified at the suite level. These dependencies will be
-appended to the dependency list of all tests when they are run through that
-suite. To add suite-level dependencies, pass in your desired dependencies to
-dynamic_suite.reimage_and_run with the suite_dependencies argument. For example:
-
-```none
-...
-args_dict['suite_dependencies'] = 'carrier:tmobile'
-dynamic_suite.reimage_and_run(**args_dict)
-```
-
-Multiple suite-level dependencies can be given as a comma separated string.
-
-## How do I enable automatic bug filing for my suite?
-
-If your suite is already being run via suite_scheduler, you only need to edit
-the suite control file.
-
-* Drop an optional _BUG_TEMPLATE dictionary into your suite control
- file:
-
-```none
-...
-_BUG_TEMPLATE = {
-    'labels': ['OS-Chrome','Type-Bug', 'your-label'],
-    'owner': '',
-    'status': None,
-    'summary': None,
-    'title': None,
-    'cc': ['a@chromium.org','b@chromium.org', 'c@chromium.org']
-}
-args_dict['bug_template'] = _BUG_TEMPLATE
-dynamic_suite.reimage_and_run(**args_dict)
-```
-
-* Set the [file_bugs option](/chromium-os/testing/test-suites) in the
- suite_scheduler.ini section of your suite
-
-## How do I define bug template in test control file?
-
-If you want to sign up (being owner or being cc-ed), or apply certain label to
-the bug when test failed, you only need to add an optional BUG_TEMPLATE
-dictionary into your test control file:
-
-```none
-BUG_TEMPLATE = {
-```
-
-```none
-    'labels': ['your-label'],
-```
-
-```none
-    'owner': 'your_email@chromium.org',
-```
-
-```none
-    'status': None,
-```
-
-```none
-    'summary': None,
-```
-
-```none
-    'title': None,
-```
-
-```none
-    'cc': ['a@chromium.org','b@chromium.org', 'c@chromium.org']
-```
-
-```none
-}
-```
-
-The settings in this bug template will be merged to the bug template defined in
-suite control file. That is, labels and cc defined in both test and suite
-control files will be merged and applied to the bug filed.
-
-## How do I run jobs in a suite for longer than 24 hours?
-
-In your suite control file pass the max_runtime_mins option:
-
-An example to allow tests to run for 6 hours.
-
-```none
-...
-args_dict['max_runtime_mins'] = 60*6
-dynamic_suite.reimage_and_run(**args_dict)
-```
-
-# How to enumerate what tests will run for a given Suite?
-
-There is a tool under the autotest repo to enumerate tests that will run in a
-suite.
-
-From within the chroot the following command can be executed:
-
-<pre><code>
-$~/trunk/src/third_party/autotest/files/site_utils/suite_enumerator.py -a ~/trunk/src/third_party/autotest/files <b>bvt-inline</b>
-</code></pre>
-
--a option is to specify what Autotest directory to look in.
-
-The argument **bvt-inline** is the SUITE you are intersted in.
-
-# How to enumerate what suites are available?
-
-```none
-$~/trunk/src/third_party/autotest/files/site_utils/suite_enumerator.py -a ~/trunk/src/third_party/autotest/files -l 
-```
-
-# How to run suites with test_that?
-
-```none
-(chroot)$ test_that -b ${board} ${host} suite:bvt-inline
-```
-
-Note that if your suite contains multiple control files that are associated with
-the same autotest, you may get an error that says something like this:
-
-TestError: &lt;AUTOTEST_NAME&gt; already exists; multiple tests cannot run with
-the same subdirectory
-
-To fix this, add a "tag" parameter to the job.run_test() in the associated
-control files (e.g., job.run_test('foo', tag='some_tag')) to distinguish them
-and make the results get written into uniquely-named result directories.
-
-# Suite Scheduler (Running suites out of band)
-
-Suite scheduler is the piece of software that is responsible for kicking off
-suites out of band based on a set of events as opposed to in a waterfall. If you
-are interested in running suites in a waterfall refer to the HW_Test section
-below. Below is a run down on how this works and what needs to happen to add new
-suites to this configuration.
-
-## How are suites handled on branches?
-
-Suites are scheduled based off of build artifacts, the autotest tarball
-generated at build time is used to enumerate what control files belong to what
-suites and what version of those particular tests should be run. If updated a
-test on TOT it will need to be back ported to every branch that needs those
-updates just like any other change.
-
-## How do I schedule my suite using suite_scheduler?
-
-If your suite is a part of **bvt, kaen_bvt, or smoke** it will automatically run
-and no further action must be taken.
-
-An out of band process runs on the Autotest server to schedule suite runs based
-on a number of events. The code lives under
-***autotest/files/site_utils/suite_scheduler*** and it's configuration (a Python
-config file) can be created in ***autotest/files/suite_scheduler.ini.***
-
-For the test lab, the config file is located in chromeos-admin repo as
-[suite_scheduler.ini](https://chrome-internal.googlesource.com/chromeos/chromeos-admin/+/HEAD/puppet/modules/lab/files/autotest_cautotest/suite_scheduler.ini)
-([sample
-CL](https://chrome-internal-review.googlesource.com/#/c/chromeos/chromeos-admin/+/465732/)).
-
-To add your suite send a code review with a new entry as outlined below.
-
-### Example Config Entry
-
-```none
-[WeeklyKernelRegressions]
-run_on: weekly
-suite: kernel_weekly_regression
-day: 0
-branch_specs: >=tot-1
-pool: suites
-boards: first_board,second_board
-```
-
-There are 7 parts to a configuration entry.
-
-1. A **\[unique name\]** as the toplevel marker for the config
- \[WeeklyKernelRegression\]
-2. What events the suite should **run_on**
-3. What **suite** the config entry is for.
-4. What **branch_specs** to apply to the config entry. This supports
- specific releases like R21, or a string for (==tot, &gt;=tot-1,
- &gt;=tot-2)
-5. What **pool** should be used.
-6. What **boards** the suite should run on (optional, defaults to all
- boards).
-7. Which **day** to schedule the weekly run (0 for Sunday).
-
-The top level unique name marker is part of the Python config format and must be
-**unique** and it should reflect what suite is being configured.
-
-#### Supported *run_on* events
-
-* **nightly** - At trigger time the latest image available on the
- devserver is used to schedule jobs against.
-* **new_build** - When a new build is marked as PASS in
- manifest-versions (Happens via the build process) a suite will be
- kicked off with this build.
-* **weekly** - Once a week on sunday the latest image available will
- be used to schedule jobs against.
-
-Pending implementation: new_chrome [crbug.com/212678](https://crbug.com/212678)
-
-\*If there are other events you would like to have available please [file a
-bug](http://goto.google.com/chromeos-lab-bug).
-
-#### Options for *suite* line
-
-The **suite line** can only be used to describe *one* individual suite. The name
-used pertains to the suite added under
-**autotest/files/test_suites/control.*suite_name***. The above example would
-invoke the control.kernel_weekly_regression suite file.
-
-#### Valid *branch_specs* options
-
-There are three different branch specs that can be used to ensure your suite
-runs on a particular branch:
-
-* **factory** - Any factory branch that is producing images will cause
- this event to fire.
-* **firmware** - Any firmware branch that is producing images will
- cause this event to fire.
-* **&gt;=R21** - Any **release branch** that is greater than or equal
- to R21.
- * The &gt;= is required and is used to avoid trying to run tests
- on branches that do not have the proper control files.
-
-#### What *pool* should I select?
-
-A pool is a label on a machine like pool:bvt. We are using pools extensively
-currently as our dependency support is not quite there yet. Unless you are doing
-something out of the ordinary with extra hardware required to be attached to the
-DUT you should always use *pool: suites* which is a general pool for suite runs.
-
-If you are doing things that require extra hardware chances are there is already
-a precedent for this in the suite_scheduler.ini file and you should reference
-those. When in doubt ask chromeos-lab-infrastructure@google.com.
-
-#### How do I specify bug filing options?
-
-Bug filing is optional, and defaults to False. If file_bugs is set to true in
-the ini section of the suite each test failure will either result in a new bug
-or a comment on an existing open bug, on the chromium bug tracker. Deduplication
-of bugs happens based on the test name, the suite name and the reason for
-failure. You can specify more bug filing options through the
-[bug_template](http://www.chromium.org/chromium-os/testing/test-suites#TOC-How-do-I-enable-automatic-bug-filing-for-my-suite-)
-in the suite control file.
-
-# Running suites in BuildBot (HW_Test Stage)
-
-Suites can also be run as a step in the buildbot waterfall. This assumes you are
-running your builds via cbuildbot, if you are not please [file a
-bug](http://goto.google.com/chromeos-lab-bug) with your need and the Lab team
-can look at how to best direct you.
-
-**\*Note** when running the HW_Test step you are blocking your waterfall on
-actual hardware tests. If you do not want your builders to block on this
-consider using Suite Scheduler as described above.
-
-**\*Note if your build client is not on the master2 vlan you will need to [file
-a bug](http://goto.google.com/chromeos-lab-bug) with the Chrome OS lab team so a
-proxy connection can be set up.**
-
-Adding a HW_Test step to your cbuildbot config is as easy as editing
-cbuildbot_config.py in the chromite repo and adding a hw_test entry like the
-following:
-
-Example running the **bvt suite** for a lumpy build:
-
-<pre><code>
-internal_paladin.add_config('lumpy-paladin',
-  boards=['lumpy'],
-  paladin_builder_name='lumpy paladin',
- <b>upload_hw_test_artifacts=True,</b>
- <b>hw_tests=['bvt'],</b>
-)
-</code></pre>
-
-You need to specify **upload_hw_test_artifacts** so that Autotest has access to
-the image and the build artifacts via Google Storage and specify what suite(s)
-you want to run via a list called **hw_tests**.
-
-## Format of job names for running suites in Autotest
-
-For suite jobs:
-
-```none
-$build-test_suites/control.$suite_name
-```
-
-i.e.
-
-**x86-alex-release/R20-2264.0.0-test_suites/control.kernel.per_build.benchmarks**
-
-For sub-jobs run from the suite:
-
-```none
-$build/$suite_name/$test_name
-```
-
-i.e.
-
-**x86-alex-release/R20-2264.0.0/kernel.per_build.benchmarks/Hackbench**
-
-If a particular test is set with EXPERIMENTAL = True it is prefaced with
-experimental_test_name.
-
-i.e.
-
-**x86-alex-release/R20-2264.0.0/kernel.per_build.benchmarks/experimental_platform_AesThroughput**
-
-## \*How to force the scheduling of an event suite via suite_scheduler.py
-
-\*This is not a typical use case for users.
-
-Suite scheduler lives under
-*autotest/files/site_utils/suite_scheduler/suite_scheduler.py*
-
-An example of forcing all nightly suites for stumpy to be kicked off.
-
-```none
-site_utils/suite_scheduler/suite_scheduler.py -i  stumpy-release/R21-2270.0.0 -e nightly
-```
-
-## \*How to schedule an individual suite?
-
-If you need to run an individual suite for a particular build but not all of the
-suites that would be kicked off by a particular event you can use the same
-command the buildbots use, run_suite.py.
-
-```none
-site_utils/run_suite.py -b parrot -p parrot_2gb -s kernel_weekly_regression -i parrot-release/R23-1913.156.1 -u 1
-```
-
-# Where can I see results from suite runs?
-
-Other than the BVT suite no other suite results are displayed on the buildbot
-waterfall. To see your results you need to refer to the Wmatrix dashboard at
-<https://wmatrix.googleplex.com>
-
-From there, select "Suite list" --&gt; select your suite name, e.g. "bvt". You
-will see a matrix where the column represents boards and the rows represents
-builds. Each cell shows the test results available for that (build, board).
diff --git a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/index.md b/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/index.md
deleted file mode 100644
index b917db986b2..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/index.md
+++ /dev/null
@@ -1,160 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-page_name: writing-and-developing-tests
-title: Writing and Developing Tests
----
-
-[TOC]
-
-For understanding and writing the actual python code for autotest, please refer
-to the [Writing Tests
-FAQ](/chromium-os/testing/writing-and-developing-tests/writing-tests-faq).
-
-For understanding test deps, refer to the [Test Deps
-FAQ](/chromium-os/testing/writing-and-developing-tests/test-deps-faq).
-
-For understanding how to test your changes, refer to the [Testing Your Changes
-FAQ](/chromium-os/testing/writing-and-developing-tests/testing-your-changes-faq).
-
-### Writing a test
-
-Currently, all code should be placed in a standard layout inside the
-autotest.git repository, unless otherwise is necessary for technical reasons.
-Regardless, the following text assumes that code is placed in generally any
-repository.
-For a test to be fully functional in Chromium OS, it has to be associated with
-an ebuild. It is generally possible to run tests without an ebuild, either using
-run_remote_tests --build or calling autoserv directly with the correct options,
-but discouraged, as the same will not function with other parts of the system.
-
-### Making a new test work with ebuilds
-
-The choice of ebuild depends on the location of its sources. Structuring tests
-into more smaller ebuilds (as opposed to one ebuild per source repository)
-serves two purposes:
-- Categorisation - Grouping similar tests together, possibly with deps they use
-exclusively
-- Parallelisation - Multiple independent ebuilds can build entirely in parallel
-- Dependency tracking - Larger bundles of tests depend on more system packages
-without proper resolution which dependency belongs to which test. This also
-increases paralellism.
-Current ebuild structure is largely a result of breaking off the biggest
-blockers for parallelism, ie. tests depending on chrome or similar packages, and
-as such, using any of the current ebuilds should be sufficient. (see FAQ for
-listing of ebuilds)
-After choosing the proper ebuild to add your test into, the test (in the form
-“+tests_&lt;testname&gt;”) needs to be added to IUSE_TESTS list that all
-autotest ebuilds have. Failing to do so will simply make ebuilds ignore your
-tests entirely. As with all USE flags, prepending it with + means the test will
-be enabled by default, and should be the default, unless you want to keep the
-test experimental for your own use, or turn the USE flag on explicitly by other
-means, eg. in a config for a particular board only.
-Should a new ebuild be started, it should be added to chromeos-base/autotest-all
-package, which is a meta-ebuild depending on all autotest ebuild packages that
-can be built. autotest-all is used by the build system to automatically build
-all tests that we have and therefore keep them from randomly breaking.
-
-### Deps
-
-Autotest uses deps to provide a de-facto dependencies into the ecosystem. A dep
-is a directory in ‘client/deps’ with a structure similar to a test case without
-a control file. A test case that depends on a dep will invoke the dep’s setup()
-function in its own setup() function and will be able to access the files
-provided by the dep. Note that autotest deps have nothing to do with system
-dependencies.
-As the calls to a dep are internal autotest code, it is not possible to
-automatically detect these and make them an inter-package dependencies on the
-ebuild level. For that reason, deps should either be provided by the same ebuild
-that builds test that consume them, or ebuild dependencies need to be declared
-manually between the dep ebuild and the test ebuild that uses it. An
-autotest-deponly eclass exists to provide solution for ebuilds that build only
-deps and no tests. A number of deponly ebuilds already exist.
-Common deps are:
-- chrome_test - Intending to use any of the test binaries produced by chrome.
-- pyauto_dep - Using pyauto for your code.
-
-### Working on a test
-
-As mentioned, while working on a test, it is necessary to always propagate any
-source changes using the emerge step. This can be either a manual emerge
-(instant) or build_packages (longer, rebuilds all dependencies as well).
-For cros-workon ebuilds, this means first starting to work on all ebuilds that
-are affected. ([Which ebuilds are
-these?](/chromium-os/testing/building-and-running-tests#TOC-Q5:-I-m-working-on-some-test-sources-how-do-I-know-which-ebuilds-to-cros_workon-start-in-order-to-properly-propagate-)):
-
-```none
-$ cros_workon --board=${board} start <list of ebuilds>
-```
-
-As described, all autotest ebuilds have a selectable list of tests, most of
-which can be disabled and only the one test that is being worked on can be built
-selectively, saving time.
-
-```none
-$ TESTS=testname emerge-${board} <list of ebuilds>
-$ run_remote_tests.sh --remote=<ip> testname
-```
-
-Note: If tests have interdependencies not handled via deps, those cannot be
-automatically detected, and you have to include all tests that are being
-depended on. An example of that would be an old-style test suite, which is
-really just a control file calling other tests selectively via hardcoded names.
-In order to make that work, you have to determine the list of tests accordingly,
-before you run the suite.
-
-### Anatomy of test.test
-
-This section describes the pieces of test.test that are available to use,
-describing what each does and when it could be used.
-
-#### Attributes
-
-job backreference to the job this test instance is part of
-
-outputdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;
-
-resultsdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;/results
-
-profdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;/profiling
-
-debugdir eg. results/&lt;job&gt;/&lt;testname.tag&gt;/debug
-
-bindir eg. tests/&lt;test&gt;
-
-src eg. tests/&lt;test&gt;/src
-
-tmpdir eg. tmp/&lt;tempname&gt;_&lt;testname.tag&gt;
-
-#### initialize()
-
-Everytime a test runs this function runs. For example, if you have
-iterations=100 set this will run 100 times. Use this when you need to do
-something like ensure a package is there.
-
-#### setup()
-
-setup() runs the first time the test is set up. This is often used for compiling
-source code one should not need to recompile the source for the test for every
-iteration or install the same
-
-#### run_once()
-
-This is called by job.run_test N times, where N is controlled by the interations
-parameter to run_test (Defaulting to one). it also gets called an additional
-time with profilers turn on, if any profilers are enabled.
-
-#### postprocess_iteration()
-
-This processes any results generated by the test iteration and writes them out
-into a keyval. It's generally not called for the profiling iteration, as that
-may have difference performance implications.
-
-#### warmup()
-
-### Test naming conventions
-
-(TODO) We don’t have any. These need to be defined and documented here. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/test-deps-faq/index.md b/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/test-deps-faq/index.md
deleted file mode 100644
index af10d82cb54..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/test-deps-faq/index.md
+++ /dev/null
@@ -1,232 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/writing-and-developing-tests
- - Writing and Developing Tests
-page_name: test-deps-faq
-title: Test Deps FAQ
----
-
-[TOC]
-
-### Where do I store large files that need to be publicly accessible for tests?
-
-Google Storage is used as the general storage facility for large files. Please
-avoid putting large files in git as it increases everyone's check out size. A
-good general rule of thumb is:
-
-If it is a file larger than 5 megs that will be changing over time, put it in
-Google Storage.
-
-A similar approach is taken as
-[localmirror](https://sites.google.com/a/google.com/chromeos/resources/engineering/releng/localmirror)
-except we use the Google Storage bucket ***gs://chromeos-test-public***
-
-To upload your files please follow ["How to get your files my files to local
-mirror"](https://sites.google.com/a/google.com/chromeos/resources/engineering/releng/localmirror#TOC-How-do-I-get-my-files-in-localmirro)
-but using the bucket ***gs://chromeos-test-public***
-
-<http://sandbox.google.com/storage/?arg=chromeos-test-public>
-
-### How do I use deps?
-
-The deps feature is used to install packages that are required by tests.
-Sometimes these packages must be compiled from source and installed on the test
-machine. Rather than include this installation procedure in the test itself, we
-can create a 'dep' which does this for us. Then the test can specify that it
-needs this dep to work. Autotest will make sure that the dependency is built and
-copied to the target.
-First take a look at an example: hardware_SsdDetection. You will notice that it
-does this in the setup method:
-
-```none
-self.job.setup_dep(['hdparm'])
-```
-
-This ends up running the python file `client/deps/hdparm.py`. This will look
-after building the hdparm utility and making sure it is available for copying to
-the target. The mechanics of this are explained in the next topic, but imagine
-using `./configure` and installing with the `client/deps/hdparm` directory as
-the install root.
-Within the run_once() method in the test you will see this:
-
-```none
-        dep = 'hdparm'
-        dep_dir = os.path.join(self.autodir, 'deps', dep)
-        self.job.install_pkg(dep, 'dep', dep_dir)
-```
-
-This is the code which actually installs the hdparm utility on the target. It
-will be made available in the `/usr/local/autotest/deps/hdparm` directory in
-this case. When it comes time to run it, you will see this code:
-
-```none
-        path = self.autodir + '/deps/hdparm/sbin/'
-        hdparm = utils.run(path + 'hdparm -I %s' % device)
-```
-
-This is pretty simple - since the hdparm binary was installed to
-`client/deps/hdparm/sbin/hdparm` we can run it there on the target.
-
-### How can I create my own dep?
-
-If you have your own tool and want to create a dep for it so that various tests
-can use it, this section is for you.
-First create a subdirectory within deps. Let's call your dep 'harry'. So you
-will create `client/deps/harry` and put `harry.py` inside there.
-In harry.py you will want something like the following:
-
-```none
-#!/usr/bin/python
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-from autotest_lib.client.bin import utils
-version = 1
-def setup(tarball, topdir):
-    srcdir = os.path.join(topdir, 'src')
-    utils.extract_tarball_to_dir(tarball, srcdir)
-    os.chdir(srcdir)
-    utils.system('patch -p1 < ../fix-wibble.patch')
-    utils.configure()
-    utils.make()
-    utils.make('install')
-# We got the src from http://harry.net/harry-0.24.tar.bz2
-pwd = os.getcwd()
-tarball = os.path.join(pwd, 'harry-0.24.tar.bz2')
-utils.update_version(pwd + '/src', False, version, setup, tarball, pwd)
-```
-
-The URL mentioned in the file should be the location where you found your
-tarball. Download this and put it in the deps directory as well. You will be
-checking this into the repository as a binary file.
-The `utils.update_version()` call ensures that the correct version of harry is
-installed. It will call your setup() method to build and install it. If you
-specify False for the preserve_srcdir parameter then it will always erase the
-src directory, and call your setup() method. But if you specify True for
-preserve_srcdir, then update_version() will check the installed version of the
-src directory, and if it hasn't changed it will not bother installing it again.
-You will also see that pwd is set to the current directory. This is
-`client/deps/harry` in this case because autotest changes this directory before
-importing your python module. We unpack into a src subdirectory within that to
-keep things clean.
-When your setup() method is called it should unpack the tarball, configure and
-build the source, then install the resulting binaries under the same
-`client/deps/harry` directory. You can see the steps in the example above - it
-mirrors a standard GNU UNIX build process. If you need to pass parameters to
-configure or make you can do that also. Any parameters after 'setup' in the
-update_version() call are passed to your setup method.
-After calling utils.update_version() from within harry.py we will have binaries
-installed (say in `client/deps/harry/sbin/harry`) as well as the src directory
-still there (`client/deps/harry/src`).
-Finally for reasons that we won't go into you should create the file common.py
-in your directory, like this:
-
-```none
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os, sys
-dirname = os.path.dirname(sys.modules[__name__].__file__)
-client_dir = os.path.abspath(os.path.join(dirname, "../../"))
-sys.path.insert(0, client_dir)
-import setup_modules
-sys.path.pop(0)
-setup_modules.setup(base_path=client_dir,
-                    root_module_name="autotest_lib.client")
-```
-
-and you need a file called 'control' too:
-
-```none
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-job.setup_dep(['fio'])
-```
-
-### Troubleshooting your dep
-
-If you have created a new dep but run_remote_tests.sh doesn't work and you get
-an error like:
-
-```none
-PackageInstallError: Installation of harry(type:dep) failed : dep-harry.tar.bz2 could not be fetched from any of the repos ['autoserv://']
-```
-
-then this section is for you. It explains a little more of the detail of how the
-dependencies are transfered from server (your workstation) to the client
-(target).
-When you call self.job.install_pkg(dep, 'dep', self.dep_dir), it causes the
-autotest client to install the dependency. In this case the client will end up
-using the autoserv fetcher. Within client/bin/harness_autoserve.py you will see
-the class AutoservFetcher. It has a method fetch_pkg_file() which calls
-harness_autoserv.fetch_package() to fetch the package. This issues a
-AUTOTEST_FETCH_PACKAGE command over the logging connection to autoserv,
-requesting the package. Yes the logging connection is re-used to support a kind
-of ftp server for the client!
-The server end of autoserv sits in server/autotest.py. Each line of log output
-coming from the client is examined in client_logger._process_line(). When it
-sees a line starting with AUTOTEST_FETCH_PACKAGE it calls _send_tarball() which
-tries to find a matching directory to package up and send. The pkg_name is in a
-standard format: `pkgtype-name.tar.bz2` and in this case pkgtype is 'dep'. It
-will package up the client/deps/&lt;name&gt; directory into a tarball and send
-it to the client. When this is working you will see something like this message
-when you run the test:
-
-```none
-12:08:06 INFO | Bundling /home/sjg/trunk/src/third_party/autotest/files/client/deps/harry into dep-harry.tar.bz2
-```
-
-When it is not working, make sure the directory exists on the server side in the
-right place.
-
-### What if my dep is built by another ebuild?
-
-The above method is fine for external packages, but it is not uncommon to want
-to use a byproduct of another ebuild within a test. A good example of this is
-the Chromium functional tests, which require PyAuto, a test automation framework
-built by Chromium. In the
-`src/third_party/chromiumos-overlay/chromeos-base/chromeos-chrome` ebuild you
-will see:
-
-```none
-    if use build_tests; then
-        install_chrome_test_resources "${WORKDIR}/test_src"
-        # NOTE: Since chrome is built inside distfiles, we have to get
-        # rid of the previous instance first.
-        rm -rf "${WORKDIR}/${P}/${AUTOTEST_DEPS}/chrome_test/test_src"
-        mv "${WORKDIR}/test_src" "${WORKDIR}/${P}/${AUTOTEST_DEPS}/chrome_test/"
-        # HACK: It would make more sense to call autotest_src_prepare in
-        # src_prepare, but we need to call install_chrome_test_resources first.
-        autotest_src_prepare
-```
-
-You can see that this is creating a deps directory within the build root of
-chrome, called chrome_test. From the previous section we know that a
-chrome_test.py file must be installed in this deps directory for this to work.
-This actually comes from the chromium tree
-(`chrome/src/chrome/test/chromeos/autotest/files/client/deps/chrome_test/chrome_test.py`
-since you asked). This file is very simple:
-
-```none
-#!/usr/bin/python
-# Copyright 2018 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import common, commands, logging, os
-from autotest_lib.client.bin import utils
-version = 1
-def setup(top_dir):
-    return
-pwd = os.getcwd()
-utils.update_version(pwd + '/src', False, version, setup, None)
-```
-
-In this case the directory already contains pre-built binaries, since they were
-built and copied in by the ebuild above. The setup() method will always be
-called, but has nothing to do. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/testing-your-changes-faq/index.md b/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/testing-your-changes-faq/index.md
deleted file mode 100644
index 53c246f1652..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/testing-your-changes-faq/index.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/writing-and-developing-tests
- - Writing and Developing Tests
-page_name: testing-your-changes-faq
-title: Testing Your Changes FAQ
----
-
-[TOC]
-
-## How do I test changes to the Autotest codebase itself?
-
-Often times when making changes to the Autotest codebase itself, it is difficult
-to test your change unless you can actually run an instance of the Autotest
-server locally.
-
-To quickly get functional Autotest server setup please refer to: [Setup Autotest
-Server](/system/errors/NodeNotFound)
-
-Reasons to run a local Autotest server might include:
-
-* Autotest Scheduler work
-* Adding or changing RPCs
-* Tests that involve common library changes
-* GUI/GWT Frontend work.
-
-## How do I test changes to the dynamic_suite infastructure?
-
-You'll definitely want a locally-running Autotest server. For most changes, you
-will want to start by running the unit tests in server/cros/dynamic_suite as you
-work. You may also need to actually run a suite of tests against your Autotest
-instance. The 'dummy' suite is ideal, and there are several ways to run it:
-
-* site_utils/run_suite.py
-* cli/atest create_suite_job
-* server/autoserv test_suites/dev_harness.py
-
-In the first two cases, there are a variety of command line options and
-arguments that allow you to set the build and platform to test, etc. These
-pathways will always stage a build (if necessary), pull control files from that
-build, reimage devices and run the desired test suite.
-
-dev_harness.py does not pull control files from a particular build, but rather
-uses your local source tree. If you're trying to test changes to suite control
-files, for example, this is probably the best way to go. It can also be
-configured to skip reimaging, so you can iterate faster. dev_harness.py is
-pulled in and executed directly by autoserv, so it can't take command line args.
-Instead, it's configured using a file called dev_harness_conf that lives
-adjacent to dev_harness.py.
-
-## What's the fast way to make a change to a test and iterate to see if it now works?
-
-The fastest way to develop a test is to *not use compiled components* in your
-test. If you can write a test without cross-compiling code you can modify the
-test in python/shell on the target and rerun it on the target directly. This of
-course also applies to the situation where you want to modify the python/shell
-parts of a test that has cross-compiled code. The point is, try to use the least
-amount of cross-compiled code to write your test as possible.
-
-Assuming you have done this, on the target device's console, su to root. Then
-enter the /home/autotest directory on the target (provided you've run
-run_remote_tests once with it) and modify the test which will be in the tests
-subdirectory. You can run /home/autotest:
-
-**```none
-on_device# cd /home/autotest; ./bin/autotest tests/system_KernelVersion/control
-```**
-
-If you have modified cross-compiled test code, you can use the above
-instructions but you'll be rebuilding a lot of stuff you don't need. Instead of
-running build_platform --withautotest, you can instead just run
-build_autotest.sh directly (which it calls). This emerges the autotest
-cross-compiled binaries. You can also specify precisely which test you want to
-rebuild to avoid having to build everything (and wait for it all to finish):
-
-**```none
-inside# ./build_autotest.sh --board=${BOARD} --build=storage_Fio,system_SAT
-```**
-
-**The resulting binaries will be placed in your chroot under
-`${CHROOT}/build/${BOARD}/usr/local/autotest`. They are not installed into an
-image at this time. Instead, autotest will copy them over when you run
-run_remote_tests.sh.**
-
-## **What's the fast way to see if a test now works with tip of tree?**
-
-The best way is to prepare a CL and test it using
-[trybots](/chromium-os/build/local-trybot-documentation). \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/writing-tests-faq/index.md b/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/writing-tests-faq/index.md
deleted file mode 100644
index 55ce0759807..00000000000
--- a/chromium/docs/website/site/chromium-os/testing/writing-and-developing-tests/writing-tests-faq/index.md
+++ /dev/null
@@ -1,388 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/testing
- - Testing Home
-- - /chromium-os/testing/writing-and-developing-tests
- - Writing and Developing Tests
-page_name: writing-tests-faq
-title: Writing Tests FAQ
----
-
-[TOC]
-
-## Coding Style
-
-As Autotest is a mature upstream project we follow their style code when it
-comes to committing changes here as opposed to the Chromium OS style guide.
-Please refer to the coding style document that is in autotest/CODING_STYLE or
-view it
-[here](https://gerrit.chromium.org/gerrit/gitweb?p=chromiumos/third_party/autotest.git;a=blob;f=CODING_STYLE;).
-
-## Upstream Documentation
-
-Upstream is hosted on github at <http://autotest.github.com>
-
-Upstream Wiki <https://github.com/autotest/autotest/wiki>
-
-The github website doesn't really let you search through the docs but, you can
-clone the wiki repo and grep through it:
-
-```none
-git clone https://github.com/autotest/autotest.wiki.git
-```
-
-## Where are useful libraries?
-
-Autotest has an import structure that exposes a lot of functionality from a
-number of different places. Good places to grep for code that may already do
-what you need is:
-
-In general we should try to use the same functions in tests that are written
-rather than creating similar functions. This helps keep the whole frame work in
-a maintainable state and utilizes code that has been used for a while and is
-known to work.
-
-* client/common_lib
-* client/bin
-
-## I am writing RPCs, what a is good reference to look at?
-
-Looking at the RPC doc from the server itself can be useful.
-
-<http://cautotest/afe/server/rpc_doc>
-
-## Writing Autotests
-
-### Where do autotests live?
-
-Most tests are checked in under third_party/autotest/files/ (autotest.git
-chromium-os project). Some may be scattered around other locations. See
-[link](/chromium-os/testing/building-and-running-tests#TOC-Q1:-What-autotest-ebuilds-are-out-there-)
-to find out the complete list.
-
-**Test cases are not upstreamed to the general autotest repository as most are
-Chromium OS specific. They are checked out as part of the regular sync command
-you used from the Chromium OS repository.**
-
-**dfdf**
-
-### A word about imports
-
-Autotest has an interesting way of imports due to it not being installed
-properly in PYTHONPATH. This is not an issue on Autotest trunk but Chromium OS
-has not yet remerged all the work there.
-
-When dealing with Autotest internal modules you will need to import/create a
-*common.py* file that can relatively reference the root directory of Autotest.
-You will find these spread throughout the code base and below is a concrete
-example.
-
-If you are working on code under **autotest/files/client/common_lib** and you
-wanted to imported something from server you would need to *import a common.py*
-that looks similar to the following:
-
-```none
-import os, sysdirname = os.path.dirname(sys.modules[__name__].__file__)client_dir = os.path.abspath(os.path.join(dirname, ".."))sys.path.insert(0, client_dir)import setup_modulessys.path.pop(0)setup_modules.setup(base_path=client_dir, root_module_name="autotest_lib.client")
-```
-
-\*Notice the relative path that is fed in to the client_dir variable.
-
-Once this is in the directory where you want to use the Autotest
-
-```none
-#!/usr/bin/pythonimport os, sys
-import commonfrom autotest_lib.server import frontend
-frontend.. etc etc
-```
-
-**\*\*Note when you are writing a test the framework automatically makes
-autotest_lib available for you. There is no need to place a copy of common.py in
-your test directory.
-
-### Writing a simple test
-
-**`Autotest tests are checked into several locations under third_party/autotest.
-`**
-
-**`There are two flavors of tests: client and server. All tests are managed by
-an autotest server machine that is typically the machine where run_remote_tests
-is invoked. Client tests execute entirely on the Chromium OS device. Server
-tests execute on both server and client or only the server. Client tests are
-usually the simplest to write and run. Server tests are needed, for example, if
-a test needs to reboot the device or interact with external devices (e.g. to cut
-off power to the Chromium OS device).`**
-
-**`Tests are located in 4 locations in the `**
-
-**``**``**`third_party/autotest/files/ `**``**``**
-
-**`` `tree:`**``**
-
- **``**`client/site_tests - These are where most tests live. These are client
- tests that are Chromium OS specific.`**``**
-
- **``**`client/tests - These are client tests that are general Linux tests
- (not Chromium OS specific).`**``**
-
- **``**`server/site_tests - These are server tests that are Chromium OS
- specific.`**``**
-
- **``**`server/tests - These are server tests that are general Linux tests
- (not Chromium OS specific).`**``**
-
-****Decide if your test is a client or server test and choose the appropriate
-directory from the above. In the sections below we refer to this directory as
-${TEST_ROOT} below.****
-
-Next decide which area your test falls within based on the tracker
-(<http://code.google.com/p/chromium-os/issues/list>). It should be something
-like "desktopui", "platform", or "network" for instance. This name is used to
-create the test name; e.g. "network_UnplugCable". Create a directory for your
-test at $(TEST_ROOT)/$(LOWERCASE_AREA)_$(TEST_NAME).
-
-Try to find an example test that does something similar and copy it. You will
-create at least 2 files:
-
-${TEST_ROOT}/${LOWERCASE_AREA}_${TEST_NAME}/control
-
-${TEST_ROOT}/${LOWERCASE_AREA}_${TEST_NAME}/${LOWERCASE_AREA}_${TEST_NAME}.py
-
-**``********``********`******Your control file runs the test and sets up default parameters. The .py file is the actual implementation of the test.****** `********``********``**
-
-**``********``********``********``****`Inside the control the TEST_CLASS
-variable should be set to ${LOWERCASE_AREA}. The naming convention simply exists
-to make it easier to find other similar tests and measure the coverage in
-different areas of Chromium OS. `****``********``********``********``**
-
-**``********``********``********``****`You may also want to add this test to one
-or more existing test suites to have it run
-automatically.`****``********``********``********``**
-
-After this, you should modify the autotest-tests-9999.ebuild under
-src/third_party/chromiumos-overlay/chromeos-base/autotest-tests and add your
-test to IUSE_TESTS or it won't be picked up by autotest when you ask it to build
-specific tests.
-
-### Adding binaries for your tests to call as part of the test
-
-In order to cross-compile, your test's compilation step should be implemented
-inside the `setup() method of your python code.` A couple of simple examples:
-
-* Sources inside the autotest repo as part of the test: gl_Bench
-* Sources checked in as a tarball from upstream: hardware_SAT
-* Sources checked in other Chromium OS source repo:
- firmware_VbootCrypto, desktopui_DoLogin
-
-*It is your responsibility to make sure the test will build for all supported
-platforms as it will cause a build break if it does not.*
-
-The setup method of all python scripts are built as part of build_autotest.sh
-(which is called when you build_packages --withautotest). This script calls all
-the setup functions of every python test and runs them. These setup steps are
-compiled on the host for execution on the target. The cross-compiler flags are
-already set so make sure if you have your own Makefile to take in the CC,
-CFLAGS, etc from the environment rather than hardcode them.
-
-*Note that if you have a* `*setup()* `*method, it should create a* `*src*`
-*directory, even if empty, to avoid running the setup method on the target
-device.*
-
-### Writing tests that require that a user is logged in
-
-If you write a test that requires a user is logged in, have your test subclass
-site_ui_test.UITest. Any test that is a subclass of this class will login with
-the default test account as part
-
-of test initialization and logout as part of test cleanup.
-
-### How do I do printf-style debugging in tests?
-
-**Use logging.info() to generate log messages. If you are writing a client-side
-test, the output unfortunately will not be shown while you are running autoserv
-(either directly or indirectly by using run_remote_test.sh). If you want to
-print out numeric data that would be generally useful for developers to track
-over time, consider instead making this a performance test.**
-
-### How do I write a performance test?
-
-A performance test is like any other test except it also logs one or more
-*performance keyvals*. A performance keyval is just an identifier and a floating
-point number that is written to a keyvals file on the machine where
-run_remote_tests is invoked. The identifier should be of the form
-${UNITS}_${DESCRIPTION}. For a simple example, refer to hardware_DiskSize and
-how it uses self.write_perf_keyval().
-
-### How do I write a hardware qualification test?
-
-Hardware qualification tests are like all other tests. The only difference is
-that they are referenced in one of the HWQual/config.\* files. If they require
-no manual setup or steps, they should be added to HWQual/config.auto. Otherwise,
-a new config file should be created and instructions on the manual steps should
-be added to suite_HWQual/README.txt.
-
-Hardware qualification tests also usually involve a benchmark and a minimum
-requirement for that benchmark. The nicest way to do this is to make your test
-record performance metrics with write_perf_keyval() and then add a constraints
-list in the HWQual control file that sets the minimum values. See
-suite_HWQual/control.auto constraints parameters for examples.
-
-### How do I write a manufacturing test?
-
-See how to write a hardware qualification test. A manufacturing test should be
-written similarly, however there is not currently (3/3/2010) a suite for
-manufacturing tests.
-
-### How do I write a test that interacts with the UI?
-
-This varies widely depending on which UI you would like to interact with.
-
-If you would like to temporarily shut down X:
-
-```none
-from autotest_lib.client.cros import cros_ui
-cros_ui.stop()
-```
-
-You can then start it back up by doing:
-
-```none
-from autotest_lib.client.cros import cros_ui
-cros_ui.start()
-```
-
-If you want to control chrome, use PyAuto. See [PyAuto on
-ChromiumOS](/system/errors/NodeNotFound) page for more details.
-desktopui_UrlFetch is a sample autotest test that uses pyauto to control chrome.
-
-**Note:** Pyauto is getting deprecated and being replace with Telemetry. Please
-see below for how to run a Telemetry Test/Benchmark in autotest.
-
-### How do I write a test that uses Telemetry?
-
-[Please refer to Wrapping a Telemetry test in
-Autotest](/system/errors/NodeNotFound)
-
-### How do I bundle a bunch of tests into a suite that can be scheduled and run as a group?
-
-See
-<https://www.chromium.org/chromium-os/testing2/dynamic-suites/dynamic-test-suites>
-
-### How do I write a test that requires some human interaction?
-
-We call these semi-automated tests. If you want to write a test that pops up a
-Chrome window, ask the test engineer some questions or to interact with some web
-browser functionality, and verify the result, refer to the
-desktopui_ChromeSemiAuto test.
-
-### How do I create a test that requires running existing Linux utilities that are not currently installed?
-
-Refer to the steps for a "no cross-compilation" test first. For this additional
-component, you could add it to the image, but this is highly discouraged,
-especially if only your test is likely to use the tool. Instead, it's better to
-create a deps directory for the tool which builds it and installs it. A simple
-example is hardware_SsdDetection which installs the hdparm utility.
-
-***It is your responsibility to make sure the test will build for all supported
-platforms as it will cause a build break if it does not.***
-
-### How do I create a test that requires compiling code?
-
-In order to cross-compile, your test's compilation step should be implemented
-inside the `setup() method of your python code.` A couple of simple examples:
-
-* Sources inside the autotest repo as part of the test: gl_Bench
-* Sources checked in as a tarball from upstream: system_SAT
-* Sources checked in other Chromium OS source repo:
- firmware_VbootCrypto, system_AutoLogin
-
-*It is your responsibility to make sure the test will build for all supported
-platforms as it will cause a build break if it does not.*
-
-Note that if you have a `setup() `method, it should create a `src` directory,
-even if empty, to avoid running the setup method on the target device.
-
-Here's an example. This is the content of platform_NullTest.py:
-
-```none
-#!/usr/bin/python
-# Copyright 2018 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-from autotest_lib.client.bin import test, utils
-class platform_NullTest(test.test):
-    """
-    Test autotest.
-    """
-    version = 1
-    executable = 'nulltest'
-    def setup(self):
-        os.chdir(self.srcdir)
-        utils.make(self.executable)
-    def run_once(self):
-        utils.system(self.srcdir + "/" + self.executable + " autotesting",
-                     timeout=60)
-```
-
-After creating this file (and control, src/Makefile, and src/nulltest.c), add a
-line to the autotest-tests ebuild
-(chromiumos-overlay/chromeos-base/autotest-tests/autotest-tests-9999.ebuild).
-Make sure that autotest-tests is in your cros_workon list, then run
-TESTS=platform_NullTest emerge-&lt;board&gt; autotest-tests. This should compile
-your C program. After this, you may runrun_remote_tests --use_emerged. Don't use
-gmerge for autotest or autotest-tests.
-
-### Why do I get the error "make: command not found" or "patch: command not found"?
-
-These messages come up when autotest tries to run 'make' or 'patch' on the
-client. They are not supposed to run there. Test code is only patched and
-compiled on the host.
-
-Common mistakes are:
-
-* failed to first build with 'TESTS=newtest emerge-&lt;board&gt;
- autotest-tests'.
-* failed to run the run_remote_tests.sh script with --use_emerged.
-
-### What if I want to make use of a binary tool?
-
-See the instructions for including and building the source above, or use the
-ebuild method if needed. You cannot simply include a pre-built binary (e.g. by
-checking it into the repository) since this will not work on any platform. All
-software must be built by the official toolchain for that platform and the only
-reasonable way to be sure of that is to include the source and build it.
-
-### How do I write a test that needs access to large data files, like media files?
-
-If the data files are posted somewhere else, they may fetched by the test when
-it starts. If you add the fetching to the setup() method, this will cause the
-fetch to occur during build_autotest and cause the fetched results to be put in
-every packaged build of autotest. This can cause a large package and might also
-imply that the media/data may be repackaged. The same issues apply if you commit
-the large data files. Instead it's preferable to fetch the data from the client
-machine.
-
-Beware of licensing restrictions on sample data used by a test.
-
-### How do I write a test that reboots the device?
-
-See server/site_tests/platform_BootPerfServer, which reboots the device and runs
-the client test platform_BootPerf which logs performance data about boot time.
-Note that your test must be a server test.
-
-### How do I write a test that measures power consumption?
-
-See power_IdleServer. This test cuts power and logs performance data in the form
-of battery life remaining information.
-
-### What language can I write my test in?
-
-The most straightforward language to use is Python. Every autotest needs at
-least some Python code in the control file, and recording performance results,
-printf-style debugging, and passing up informative error messages all require
-Python code. You can also write C/C++ cross-compiled code. You can even write
-shell scripts, but do note that you will cause yourself extra pain either when
-developing your test and/or when diagnosing problems if you choose a language
-other than Python.
diff --git a/chromium/docs/website/site/chromium-os/tips-and-tricks-for-chromium-os-developers/index.md b/chromium/docs/website/site/chromium-os/tips-and-tricks-for-chromium-os-developers/index.md
deleted file mode 100644
index 5b3c7a44e69..00000000000
--- a/chromium/docs/website/site/chromium-os/tips-and-tricks-for-chromium-os-developers/index.md
+++ /dev/null
@@ -1,806 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: tips-and-tricks-for-chromium-os-developers
-title: Tips And Tricks for Chromium OS Developers
----
-
-## **This document can now be found here:**
-##
-**<https://chromium.googlesource.com/chromiumos/docs/+/main/tips-and-tricks.md>**
-
-## **The content below is a (possibly out-of-date) copy for easier searching.**
-
-## Introduction
-
-This page contains tips and tricks for developing on Chromium OS.
-The free-form content on this page is contributed by developers. Before adding
-content to this page, consider whether the content might fit better in a
-different document, such as the [Chromium OS Developer
-Guide](http://www.chromium.org/chromium-os/developer-guide) or the [Chromium OS
-Developer FAQ](/chromium-os/how-tos-and-troubleshooting/developer-faq):
-
-* **Content that belongs in this document:**
- * tips that developers can use to optimize their workflow, but
- that aren't strictly required
- * instructions to help developers explore/understand the build
- environment in greater depth
-
-* **Content that does not belong in this document:**
- * things that every developer needs to know right away when they
- start developing (put such information in the [Chromium OS
- Developer
- Guide](http://www.chromium.org/chromium-os/developer-guide))
- * things that only a very small subset of developers need to know
- (put such information on a page dedicated to that small subset
- of developers)
-
-**Note:** The tips on this page generally assume that you've followed the
-instructions in the [Chromium OS Developer
-Guide](http://www.chromium.org/chromium-os/developer-guide) to build your image.
-
-[TOC]
-
----
-
-## repo
-
-### How to set up repo bash completion on Ubuntu
-
-Get a copy of
-[repo_bash_completion](https://chromium.googlesource.com/chromiumos/platform/dev-util/+/refs/heads/master/host/repo_bash_completion)
-and copy it to your home directory (e.g., under ~/etc). Then, add the following
-line to your `~/.bashrc`:
-
-```none
-[ -f "$HOME/etc/repo_bash_completion" ] && . "$HOME/etc/repo_bash_completion"
-```
-
-### How to configure repo to sync private repositories
-
-Create a file called .repo/local_manifest.xml and add your private project into
-it.
-
-```none
-<?xml version="1.0" encoding="UTF-8"?>
-<manifest>
-  <remote  name   = "private"
-           fetch  = "ssh://gitrw.chromium.org"
-           review = "http://review.chromium.org" />
-  <project path   = "src/thirdparty/location"
-           name   = "nameofgitrepo"
-           remote = "private" />
-</manifest>
-```
-
-If you want to pull in from a different git server you will need to add a
-different remote for the project. Please type `repo manifest -o tmp.xml` to dump
-your current manifest to see an example. More documentation on the manifest file
-format is available on the [repo Manifest format
-docs](http://android.git.kernel.org/?p=tools/repo.git;a=blob;f=docs/manifest_xml.txt;hb=HEAD).
-
-### How to make `repo sync` less disruptive by running the stages separately
-
-Just running `repo sync` does both the network part (fetching updates for each
-repository) and the local part (attempting to merge those updates in to your
-tree) in one go. This has a couple of drawbacks. Firstly, because both stages
-are mixed up, you need to avoid making changes to your tree for the whole time,
-including during the slow network part. Secondly, errors telling you which
-repositories weren't updated because of your local changes get lost among the
-many messages about the update fetching.
-
-To alleviate these problems, you can run the two stages separately using the
-`-n` (network) and `-l` (local) switches. First, run `repo sync -n`. This
-performs the network stage, fetching updates for each of the repositories in
-your tree, but not applying them. While it's running you can continue working as
-usual. Once it's finished and you've come to a convenient point in your work,
-run `repo sync -l`. This will perform the local stage, actually checking out the
-updated code in each repository where it doesn't conflict with your changes. It
-generally only prints output when such a conflict occurs, which makes it much
-easier to see which repositories you need to manually update. You can run it
-multiple times until all the conflicts are fixed.
-
-### How to find a list of branches that I've created with repo
-
-See the `repo branches` command.
-
----
-
-## How to get more commands available on the release image
-
-If you're using the shell in a Chromium OS device (requires developer mode, or a
-system where you've set a custom chronos password), you may find that you're
-missing commands you wish you had. Try putting `busybox` on a USB key or an SD
-Card. I formatted by USB key with `ext3` and named it `utils` (and that is
-assumed in these instructions) using the Disk Utility that comes with Ubuntu (go
-to the System menu at the top of the screen, then Administration). Since busybox
-is built as part of a normal build (it's used in the factory image), you can
-copy it to your USB key like this (run from outside the chroot). NOTE: this
-assumes that you've followed all the instructions to build a custom Chromium OS
-image from the [Chromium OS Developer Guide](/chromium-os/developer-guide):
-
-```none
-sudo chown root.root /media/utils
-sudo chmod o+rx /media/utils
-sudo cp ~/chromiumos/chroot/build/${BOARD}/bin/busybox /media/utils/
-sudo chmod o+rx /media/utils/busybox
-```
-
-Then, you can go crazy and add symlinks for whatever your favorite busybox
-commands are:
-
-```none
-for cmd in less vi zip zcat; do
-  sudo ln -s busybox /media/utils/$cmd
-done
-```
-
-Unmount your USB key:
-
-```none
-sudo umount /media/utils
-```
-
-Plug your USB key into your Chromium OS device. Make sure that the browser has
-started (i.e., you're not still on the login screen) so that Chromium OS will
-mount your USB key to `/media/utils`. You can get access to your commands with:
-
-```none
-sudo mount -o remount,exec /media/utils
-export PATH="$PATH:/media/utils"
-```
-
-If you want a list of all of the commands that busybox supports, you can just
-run busybox to get a list. If you want to run a busybox command without making a
-symlink, just type busybox first. Like: busybox netstat.
-
-**SIDE NOTE**: If you didn't build Chromium OS, it's possible that you can run a
-busybox binary obtained from some other source. You'll have the best luck if the
-busybox that you get was statically linked.
-
----
-
-## How to modify my prompt to tell me which git branch I'm in
-
-Add the following to your `~/.bash_profile`:
-
-```none
-export PS1='\h:\W$(__git_ps1 "(%s)") \u\$ '
-```
-
----
-
-## How to search the code quickly
-
-When you [installed depot_tools](/developers/how-tos/install-depot-tools), you
-got a tool called `git-gs` that's useful for searching your code. According to
-the [depo_tools info page](/developers/how-tos/depottools), `git-gs` is a
-"Wrapper for git grep with relevant source types". That means it should be the
-fastest way to search through your code.
-
-You can use it to search the `git` project associated with the current directory
-by doing:
-
-```none
-git gs ${SEARCH_STRING}
-```
-
-If you want to search all git projects in the `repo` project associated with the
-current directory:
-
-```none
-repo forall -c git gs ${SEARCH_STRING}
-```
-
-On Goobuntu, you can install
-[Silversearcher](https://github.com/ggreer/the_silver_searcher), which is a
-faster and smarter version of ack/grep. Ag is very fast and works independent of
-git repositories, so you can do queries from your top-level folder.
-
-```none
-sudo apt-get install silversearcher-ag
-# For keyword based search 
-ag "keyword" .
-# To ignore certain paths
-ag --ignore chroot/ "keyword" .
-# ag has the same syntax as grep. For example, excluding files that match a pattern - 
-ag -L "keyword" .
-```
-
----
-
-## How to refer to bugs concisely
-
-If you have a bug number and want to send it to someone else in an email, you
-can use the "crbug" shortcut. So, to refer to bug 1234, you'd refer to:
-
-<https://crbug.com/1234>
-
----
-
-## How to wipe the stateful partition
-
-You can use 'crossystem clear_tpm_owner_request=1; reboot'. You can also reflash
-the DUT with with the --clobber-stateful flag enabled. e.g. 'cros flash
-myDUTHostName --clobber-stateful myboardname/latest'
-
----
-
-## How to enable a local user account
-
-This is not to be confused with how to [enable the chronos
-account](/chromium-os/developer-guide#TOC-Set-the-chronos-user-password). This
-set of instructions allows you to login to the browser as something other than
-guest without having any network connectivity. **Most people don't need to do
-this**.
-
-The local user account allows login with no password even if you can not connect
-to the Internet. If you are customizing Chromium OS and having trouble logging
-in due to your customizations, it may be handy to be able to bypass
-authentication and log yourself in as a test user. This is disabled by default
-for security reasons, but if you want to enable it for a backdoor user USERNAME,
-enter the following from inside the ~/trunk/src/scripts directory:
-
-```none
-./enable_localaccount.sh USERNAME
-```
-
----
-
-## How to avoid typing 'test0000' or any password on SSH-ing to your device
-
-Modify your /etc/hosts and ~/.ssh/config to make pinging and ssh-ing to devices
-easier.
-
-```none
-# Copy testing_rsa and testing_rsa.pub from chromite into your home folder
-# for both inside and outside your chroot. 
-cp $(CHROMIUMOS-ROOT)/src/scripts/mod_for_test_scripts/ssh_keys/testing_rsa* ~/.ssh  # Required for both inside and outside chroot
-chmod 0600 ~/.ssh/testing_rsa # ssh will ignore the private key if the permissions are too wide. 
-# Add the below to your ~/.ssh/config
-Host dut
-  HostName dut
-  User root
-  CheckHostIP no
-  StrictHostKeyChecking no
-  IdentityFile ~/.ssh/testing_rsa
-  ControlMaster auto
-  ControlPersist 3600
-# Do this for any lab/test machine
-Host 100.*
-  User root
-  IdentityFile ~/.ssh/testing_rsa
-# This assumes you have the following entry
-# in your /etc/hosts 
-100.107.2.189 dut # Replace with your DUT IP and chosen name for your DUT
-# All of the above enables you to do the below 
-# from inside and outside of your chroot 
-$ ping dut
-$ ssh  dut # No need to specify root@ or provide password
-```
-
----
-
-## Making sudo a little more permissive
-
-**If you are at Google, you will instead need to follow the instructions on the
-[internal workstation
-notes](https://g3doc.corp.google.com/company/teams/chromeos/sites/resources/ubuntu-workstation-notes.md#configuring-etcsudoers)
-page for finishing the sudoers setup**.
-
-To set up the Chrome OS build environment, you should turn off the tty_tickets
-option for sudo, because it is not compatible with `cros_sdk`. The following
-instructions show how:
-
-```none
-cd /tmp
-cat > ./sudo_editor <<EOF
-#!/bin/sh
-echo Defaults \!tty_tickets > \$1          # Entering your password in one shell affects all shells
-echo Defaults timestamp_timeout=180 >> \$1 # Time between re-requesting your password, in minutes
-EOF
-chmod +x ./sudo_editor
-sudo EDITOR=./sudo_editor visudo -f /etc/sudoers.d/relax_requirements
-```
-
-Note: See the [sudoers man page](http://www.gratisoft.us/sudo/sudoers.man.html)
-for full detail on the options available in sudoers.
-
-Note: depending on your Linux distribution's configuration, sudoers.d may not be
-the correct directory, you may check /etc/sudoers for an #includedir directive
-to see what the actual directory is.
-
----
-
-## How to share files for inside and outside chroot
-
-The `cros_sdk` command supports mounting additional directories into your chroot
-environment. This can be used to share editor configurations, a directory full
-of recovery images, etc.
-
-You can create a `src/scripts/.local_mounts` file listing all the directories
-(outside of the chroot) that you'd like to access inside the chroot. For
-example:
-
-```none
-# source(path outside chroot) destination(path inside chroot)
-/usr/share/vim/google
-/home/YOURID/Downloads /Downloads
-```
-
-Each line of `.local_mounts` refers to a directory you'd like to mount, and
-where you'd like it mounted. If there is only one path name, it will be used as
-both the source and the destination directory. If there are two paths listed on
-one line, the first is considered to be the path `OUTSIDE` the chroot and the
-second will be the path `INSIDE` the chroot. The source directory must exist;
-otherwise, `cros_sdk` will give off an ugly python error and fail to enter the
-chroot.
-Note: For security and safety reasons, all directories mounted via
-`.local_mounts` will be read-only.
-
----
-
-## How to create a cros_workon repository
-
-(TODO: Under construction by dianders, 2011-01-10)
-
-(TODO: some of this probably belongs in a "background" section).
-
-#### First: A brief review of Chromium OS software package management...
-
-Chromium OS uses [Gentoo](http://www.gentoo.org/)
-[Portage](http://www.gentoo.org/proj/en/portage) for software package
-management. Gentoo maintains an official list of available software packages,
-called the [Portage tree](http://packages.gentoo.org/). All packages in this
-tree are available to the Chromium OS developer... but they are not all
-guaranteed to work with - or even compile for - Chromium OS.
-
-The Portage tree is a two-level hierarchy. The top level is a collection of
-categories (e.g., `sys-apps` or `dev-python`), with each category having a list
-of associated packages (e.g., `sys-apps/upstart` or `dev-python/django`).
-
-Each package has a corresponding *ebuild* file that contains all information to
-maintain the package. There are some ebuilds that install binary packages, or
-just specify dependencies, such as the Chromium OS top-level 'meta-ebuild':
-`chromeos/chromeos`. However, most ebuilds specify (1) how to obtain, configure,
-and build the package's source code, (2) how and where to install the
-executables, and (3) other packages upon which the package depends, both at
-compile-time and at run-time. Portage also uses ebuild files to handle package
-options, package versioning and for which computer architectures (`arm`, `x86`,
-`amd64, mips`, etc.) a package is build-able and stable:
-
-* Package options are handled by so-called *USE flags*, that can be
- passed to an ebuild to turn on or off various package options (i.e.
- 'build this package *using* this option'). These options can cause a
- package to depend on additional packages, or change how the source
- code is compiled.
-* The version number of the package built by a particular ebuild is
- always explicit in the ebuild file's name (e.g.,
- `net-wireless/wpa_supplicant/wpa_supplicant-0.7.2-r39.ebuild`). The
- ebuild version number almost always directly corresponds to the
- version number of the corresponding upstream package.
-* Most ebuilds have a `KEYWORDS` field, which lists the architectures
- for which the package can be *built*, and for which the package is
- considered *stable*. In Portage, an unstable architecture is marked
- with a tilde ('~'). For example, `KEYWORDS="~arm x86"` means *stable
- for x86, unstable for arm*.
-
-The tool `emerge` is the used to build a portage package. The first task for
-`emerge` is to search the Portage tree to determine which ebuild to use, for a
-given package. For a single package, there are often several ebuilds in the
-tree, each with a different version number. Using target-specific portage
-settings found in `make.conf` and `package.keywords`, `emerge` examines the
-ebuilds' version numbers and their `KEYWORDS` fields to select an appropriate
-ebuild. In some cases, there is no appropriate ebuild, and `emerge` will fail
-with an error. In general, `emerge` will select the ebuild with the highest
-version number that is stable for the chosen architecture.
-
-After selecting an ebuild for the package, `emerge` computes a dependency graph
-containing the package's explicit dependencies and their dependencies, etc.
-Assuming it can find matching ebuilds for all of these prerequisite packages,
-emerge will then start building them all in parallel.
-
-In most cases a source code archive for a package is retrieved from its official
-'upstream' maintainers (for example, `x11-base/xorg-server` retrieves its source
-directly from `anongit.freedesktop.org`). The source code archive retrieved for
-a particular versioned ebuild is always of a fixed version. However, the Gentoo
-package maintainers often find a need to modify the original upstream source
-code, for example, to apply critical security fixes, or to fix
-architecture-specific or cross-compilation issues. In these cases, the ebuild
-will apply a series of patches to the retrieved upstream source code before
-building it. These patches are usually stored in a package specific 'files/'
-subdirectory. Eventually (hopefully), upstream will accept these patches (or
-otherwise resolve the original issues), and the Gentoo package maintainers will
-create a new ebuild that retrieves a newer source code archive, applying new
-patches to fix any regressions, and so on...
-
-For Chromium OS we always try to use unmodified packages from the same version
-of the Portage tree. In the Chromium OS source tree, the local copy of this
-version Portage tree is at `src/third_party/portage`. However, it is not always
-possible to use only these packages for the following reasons:
-
-1. Like the main Gentoo maintainers, the Chromium OS team will often
- need to maintain a collection of patches to further modify upstream
- source code to fix issues or add features before they are available
- in the main Portage tree (or even, often, before they are available
- in the original upstream source code).
-2. Similarly, sometimes the package's source code is correct, but the
- ebuild itself doesn't quite work as required.
-3. Our version of the Portage tree is relatively constant and does not
- track the daily changes to the upstream Portage tree. Often, we need
- a newer version of a package that only exists in a newer version of
- the Portage tree.
-4. There are some software components of Chromium OS that are Chromium
- OS specific, and don't have a corresponding package in the Portage
- tree.
-5. Chromium OS runs on many different hardware platforms (also referred
- to as *boards*), some that require board specific software packages.
-
-To address these issues, we use *overlays* to modify and extend the base Portage
-tree. The most important overlay is the Chromium OS overlay, located at
-`src/third_party/chromiumos-overlay`. In addition, each of the different
-supported hardware platforms has its own board-specific overlay (e.g.
-`src/overlays/overlay-x86-generic`). Lastly, some vendors may want to add
-additional packages to a private overlay (in `src/private-overlays`) to further
-customize a Chromium OS image for a particular vendor-specific board.
-
-Thus, packages (and their ebuilds) can be located in any of the following
-places:
-
-1. `src/third_party/portage/` - the Portage tree
-2. src/third_party/chromiumos-overlay/ - the Chromium OS overlay
-3. src/overlays/overlay-${BOARD}/ - a board specific overlays
-4. src/private-overlays/${PRIVATE-OVERLAY}/ - a vendor-board specific
- private overlay
-
-Taken together, the overlays contain:
-
-1. Packages from the Chromium OS version of the Portage tree
-2. New, unmodified, upstream portage packages that don't exist in our
- version of the Portage tree.
-3. Upstream portage packages with modified ebuilds, some of which also
- include Chromium OS-specific source code patches.
-4. Chromium OS-specific packages. In particular, all of the packages in
- the `chromeos/` and `chromeos-base/` categories. These packages
- mostly retrieve their source code archives from the Chromium OS git
- server (git.chromium.org). (TODO: verify)
-5. Packages that were originally based on upstream portage packages,
- but which have diverged significantly from the original source over
- time. Instead of maintaining an enormous ever growing set of
- unwieldy patches, these packages retrieve their source code archives
- from the Chromium OS git server (git.chromium.org). (TODO: verify)
-
-#### So, this was supposed to be a FAQ about cros_workon...
-
-Right, so remember those ebuilds that fetch source code archives from
-git.chromium.org?
-
-Well, those ebuilds invariably inherit from the "cros-workon" eclass. This adds
-some additional functionality to the ebuild.
-
-(TODO: what is that additional functionality)
-
-In particular, the cros_workon ebuild will fetch a specific version.
-
-(TODO: from where exactly does it fetch the source repo/branch/SHA-1)
-
-Well, it is also possible to configure the build system to fetch the code from
-the local filesystem instead of the release branch of git.chromium.org.
-
-(TODO: how does this work)
-
-(TODO: what are -9999 ebuilds)
-
-(TODO: The actually instructions for creating a new **cros_workon-able**
-package)
-
----
-
-## How to avoid generating a new password or gitcookies for each push/upload
-
-If you get the following message very often while trying to do a 'git push' or
-'repo upload', it is likely that the ~/.netrc authentication is not sufficient
-for you.
-
-```none
-Username for 'https://chromium.googlesource.com': fooPassword for 'https://foo@chromium.googlesource.com': fatal: remote error: Invalid authentication credentials.Please generate a new identifier: https://chromium.googlesource.com/new-password
-```
-
-More details on this
-[here](https://sites.google.com/a/google.com/android/development/migrating-from-netrc-to-corpsso).
-
-```none
-$ sudo apt-get install git-remote-sso$ git config --global --add credential.helper corpsso
-```
-
----
-
-## How to symbolize a crash dump that I got running on my device?
-
-There is a nifty little script in your chroot, under trunk/src/scripts called
-cros_show_stacks. The script takes in the parameters: board name, IP of the
-remote device you want to fetch and symbolize crashes from,
-
-and a path to the debug symbols. If the path is not specified, it picks it up
-from your local build correctly (/build/$BOARD/usr/lib/debug/breakpad)
-
-```none
-# Typical usage. Note that /Downloads below refers to the Downloads folder outside the chroot, the shared folder mapping is specified in trunk/src/scripts/.local_mount. #./cros_show_stacks --board=eve --remote $DUT_IP --breakpad_root /Downloads/eve_debug_syms/debug/breakpad/
-```
-
----
-
-## How to free up space after lots of builds?
-
-Use \`cros clean\` outside the chroot. This should take care of purging your
-.cache, builds downloaded from devserver etc.
-
----
-
-## How to fetch patches/changes from a Gerrit CL?
-
-Very often, you may want to fetch changes from someone else's or your own CL
-uploaded for code-review on[
-chromium-review.googlesource.com](http://chromium-review.googlesource.com). The
-following function in your bashrc may be useful. Replace cros with whatever
-remote name is listed in your .git/config. The function takes one argument, the
-commit SHA which you can find right below 'Author' and 'Committer' information
-on the review page. For example, for
-<https://chromium-review.googlesource.com/#/c/344778/>, you would use 'apply-cl
-2a22b9dc94c9c13dbff0a1c397f49cb6456f4f2c'. Make sure to be cd-ed into the
-correct directory for that git repository.
-
-```none
-# Google Gerrit specific # Takes a commit ID of a patch in Gerrit, fetches it# and applies it# Sample Usage: apply-cl 2a22b9dc94c9c13dbff0a1c397f49cb6456f4f2capply-cl() { ref=`git ls-remote cros | grep $1 | cut -f2`; git fetch cros $ref; git cherry-pick FETCH_HEAD;}
-```
-
-This works because the CLs are stored on the same remote git server as where all
-the branches and refs reside. You can switch to a branch that has its HEAD
-pointing to a CL, based on just the CL id as follows.
-
-```none
-# Continuing the previous example, to fetch https://chromium-review.googlesource.com/#/c/344778/
-# in the 3.18 kernel repo.
-```
-
-```none
-$ git ls-remote cros | grep 344778
-720a16e3533d17ea73447788fa11db7908accd6f refs/changes/61/319961/8
-5ef1aeb982d60f0071070730e3f21cf542e2c11c refs/changes/78/344778/1
-2a22b9dc94c9c13dbff0a1c397f49cb6456f4f2c refs/changes/78/344778/2
-85130b96bc71b48dbba5ab8eec8e35717af234fa refs/changes/78/344778/meta
-```
-
-```none
-$ git co -b test-branch
-$ git fetch cros refs/changes/78/344778/2
-$ git reset --hard FETCH_HEAD
-# Remember to set the tracking branch to something meaningful, else git gets confused.
-# In this case, the default tracking branch is the main kernel branch.
-$ git branch -u cros/chromeos-3.18
-```
-
----
-
-## How to split my change into two (or any number of) separate changelists for upload
-
-Usually when submitting your changes into a revision control system, it is
-considered best practice to break your submissions into the smallest possible
-logical chunks and then submit one changelist per chunk. Each chunk should work
-fine without future chunks, but may depend on previous chunks. For instance, you
-may be able to submit your change to add a new API in a separate changelist from
-your change that uses the API.
-
-This has several advantages:
-
-* It documents which parts of your change are related to what goal.
-* It makes it easy for someone to revert part of your change without
- reverting the whole thing (if there are problems).
-* It makes it easy for someone to cherry-pick your changes later.
-
-Note that most developers will still develop their entire change at once, then
-only break things apart during submission.
-
-It turns out that `repo` and `git-cl` are not really optimized for this
-workflow. Why?
-
-* The git-cl command always munges all of the changes in your branch
- into one big changelist. It does not easily allow you to create
- multiple changelists from a branch.
-* The repo command always creates branches from the mainline (AKA the
- remote master). This makes it impossible to use repo to create
- branches that depend on one another.
-
-...but, luckily, you can work around that by using git directly.
-
-TODO: This is probably not the perfectly ideal way to do things, but will work.
-Can someone optimize?
-
-TODO: I haven't actually tested all of these steps. They are based on an email
-plus my (poor) understanding of git. Can someone test, then remove this TODO?
-
-### Do all your work in one big branch
-
-I'll assume that you initially did all of your work in one big branch. AKA, you
-started the branch like this:
-
-```none
-repo start ${BRANCH_NAME} ${CROS_WORKON_PROJECT}
-```
-
-...and then made a bunch of changes.
-
-### Create a new branch for your first submission
-
-To keep things simple, we're going to leave our first branch alone and create
-new branches for our submission. We'd like to eventually get to a structure that
-looks like this (if we wanted to do N separate uploads, each of which was
-dependent on the previous ones):
-
-master
-
-\\_____${BRANCH_NAME}_A
-
-\\_______________${BRANCH_NAME}_B
-
-...so the first step is to create "${BRANCH_NAME}_A". We can use `repo start` to
-do this one. Remember, that I'm assuming `${CROS_WORKON_PROJECT}` is the name of
-your project.
-
-<pre><code>repo start ${BRANCH_NAME}<b>_A</b> ${CROS_WORKON_PROJECT}
-</code></pre>
-
-The rest of the instructions are going to assume that you've changed into the
-directory that your project lives. If you want to use repo to help you find it,
-you can do:
-
-```none
-cd `repo forall ${CROS_WORKON_PROJECT} -c 'pwd'`
-```
-
-### Get the relevant changes into branch A
-
-There are probably better ways to this this, but one way to get the changes from
-your big branch into branch A is to use `git cherry-pick`. First, use `git log`
-to figure out what changes you want:
-
-```none
-git log ${BRANCH_NAME}
-```
-
-For instance, in my example, I see this (using `--format=short`):
-
-```none
-commit d7b250822f98bda19f62072555beb66602bed29d
-Author: Me <me@...>
-    Change 4
-commit 0c577cee881471d6509c91eba8eeeb0c8bec1551
-Author: Me <me@...>
-    Change 3
-commit 0a7285d2d09159e540fb89f086f58a457b5f583f
-Author: Me <me@...>
-    Change 2
-commit dd1ee8d9a9d3148cf4403c339ab18f094304d2fa
-Author: Me <me@...>
-    Change 1
-```
-
-Now, use `git cherry-pick` to pick the changes you want. ...so if I wanted
-change #1 and #3, I could do:
-
-```none
-git cherry-pick dd1ee8d9a9d3148cf4403c339ab18f094304d2fa
-git cherry-pick 0c577cee881471d6509c91eba8eeeb0c8bec1551 
-```
-
-### Create branch B
-
-Now, you'll want to create branch B as a subbranch of branch A. You can do that
-like:
-
-```none
-git branch ${BRANCH_NAME}_B ${BRANCH_NAME}_A
-git checkout ${BRANCH_NAME}_B
-```
-
-### Get the relevant changes into branch B
-
-We'll use the same cherry-picking technique to get things into branch B. Let's
-imagine that I want change #2 and #4:
-
-```none
-git cherry-pick 0a7285d2d09159e540fb89f086f58a457b5f583f
-git cherry-pick d7b250822f98bda19f62072555beb66602bed29d 
-```
-
-### Double-check that you've got everything
-
-At this point, your branch B should have everything that was in the original
-branch. There's a `git diff` command you can do to verify that:
-
-```none
-git diff ${BRANCH_NAME}..${BRANCH_NAME}_B
-```
-
-### Upload for code review
-
-To upload the first part for code review, just do:
-
-```none
-git checkout ${BRANCH_NAME}_A
-git cl upload
-```
-
-To upload the second part for code review, just do:
-
-```none
-git checkout ${BRANCH_NAME}_B
-git cl upload ${BRANCH_NAME}_A  # sends diff from ${BRANCH_NAME}_A to ${BRANCH_NAME}_B
-```
-
-It is ***very important*** in this case that you mention in your second upload
-that this change depends on the first one. You should actually include the URL
-pointing to the first code review in the changelist comments of the second
-change. If you don't do this, your reviewers will be very confused. **Even
-better** is if you can actually wait to start the code review for branch B until
-after the code for branch A has been committed.
-
-### Make changes, re-upload
-
-To upload additional changes to branch A (the first changelist), you can do:
-
-```none
-git checkout ${BRANCH_NAME}_A
-# ... make changes ...
-git cl upload
-git checkout ${BRANCH_NAME}_B
-git rebase ${BRANCH_NAME}_A     # Incorporate branch A's changes into branch B
-```
-
-To upload additional changes to branch B, you can do:
-
-```none
-git checkout ${BRANCH_NAME}_B
-# ... make changes ...
-git cl upload ${BRANCH_NAME}_A  # sends diff from ${BRANCH_NAME}_A to ${BRANCH_NAME}_B
-```
-
-### Push
-
-When you're ready to push branch A, it's pretty easy:
-
-```none
-git checkout ${BRANCH_NAME}_A
-git cl push
-```
-
-To push branch B (which you can't do until after you've pushed branch A), you
-need to rebase it to master. TODO: Can someone confirm that this is the right
-set of steps for Chromium OS?
-
-```none
-git checkout cros/master
-git pull
-git checkout ${BRANCH_NAME}_B
-git rebase --onto cros/master ${BRANCH_NAME}_A
-git cl push
-```
-
----
-
-## How to get a fully functional vim on a test device
-
-By default there is a very minimalist build of vim included on test images. To
-replace it with a fully functional copy of vim do the following:
-
-```none
-export BOARD=eve # Replace with the board name of your test device
-export TESTHOST=127.0.0.1 # Replace with the hostname or ip address of the test device
-export JOBS=$(nproc)
-emerge-${BOARD} --noreplace --usepkg -j${JOBS} app-editors/vim-core app-vim/gentoo-syntax
-USE=-minimal emerge-${BOARD} -j${JOBS} app-editors/vim
-cros deploy "${TESTHOST}" app-vim/gentoo-syntax
-cros deploy "${TESTHOST}" app-editors/vim-core
-cros deploy "${TESTHOST}" app-editors/vim
-```
diff --git a/chromium/docs/website/site/chromium-os/tpm_firmware_update/index.md b/chromium/docs/website/site/chromium-os/tpm_firmware_update/index.md
deleted file mode 100644
index e26e225b854..00000000000
--- a/chromium/docs/website/site/chromium-os/tpm_firmware_update/index.md
+++ /dev/null
@@ -1,467 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: tpm_firmware_update
-title: 'Trusted Platform Module firmware vulnerability: technical documentation'
----
-
-[TOC]
-
-## Vulnerability description
-
-There is a bug in certain Infineon TPM firmware versions which results in RSA
-keys generated by the TPM being vulnerable to an attack that allows to recover
-the private half of the RSA key from just the public key. The researchers who
-found the vulnerability have published high-level information here:
-<https://crocs.fi.muni.cz/public/papers/rsa_ccs17>. Currently known exploits are
-computationally expensive; specifically, for RSA keys of bit size 2048, the
-researchers give an estimate of 140.8 CPU years to break a single key. Note that
-this figure might drop as more researchers look at the attack. At the current
-point in time, it means TPM-generated RSA keys can't be broken at large scale,
-but targeted attacks are possible. To summarize: There exists a practical attack
-against TPM-generated RSA keys, but it doesn't allow large-scale exploitation of
-Chrome OS devices.
-
-## Impacted features
-
-Chrome OS relies on TPM-generated RSA keys for a number of features:
-
- Slowing down brute-force attacks against encrypted user data. The page
- [Protecting Cached User
- Data](/chromium-os/chromiumos-design-docs/protecting-cached-user-data)
- describes this in more detail. The vulnerability allows the attacker to
- brute-force the encryption key (bit size 2048) off-device. However, note
- that off-device brute-force attacks are only advantageous against strong
- passwords - weak passwords are still less expensive to brute-force against
- the TPM regardless of whether it runs vulnerable firmware or not.
-
- Hardware-backed encryption keys / certificates. Chrome OS allows users to
- generate and import RSA keys that are protected by the TPM so the main OS
- can't access the private key. These keys are typically accompanied by a
- certificate and then used in network authentication, such as WPA2-EAP, HTTPS
- client authentication, etc. The vulnerability allows attackers to determine
- the private key. The bit size of generated and imported keys depends on
- parameters. The bit sizes supported by Chrome OS for TPM-backed keys are
- 1024 or 2048. You can check key sizes for certificates backed by TPM keys at
- chrome://settings/certificates.
-
- Chrome OS [Verified
- Access](https://support.google.com/chrome/a/answer/7156268) allows network
- services to verify client device integrity and identity. TPM-generated RSA
- keys (bit size 2048) are used in the certification process. Attackers can
- exploit the vulnerability to break an "Attestation Identity Key", which
- allows them to impersonate a legit device from an endpoint of their choice.
-
-## Mitigations
-
-In Chrome OS M60, we strengthened Chrome OS user data protection using the
-scrypt password hashing scheme to act as a second line of defense even in case
-the brute-force protection afforded by the TPM is lost. Users were automatically
-upgraded to the new scheme behind the scenes without user-observable effects.
-This measure guarantees adequate protection of encrypted user data for users
-that use strong passwords. If your password isn't strong, now is a good time to
-fix this - the risk involved with using a weak password generally transcends
-Chrome OS and affects other places that store sensitive data.
-
-For hardware-backed encryption keys and Verified Access, mitigations are
-technically infeasible without losing the hardware binding, and thus breaking
-the feature. The only supported path to restore the designed security strength
-for these features is to update TPM firmware.
-
-See below for advice on whether and when to update TPM firmware.
-
-## Affected TPM firmware versions
-
-You can check the TPM firmware running on your device by looking at the
-firmware_version line of the tpm_version entry in chrome://system. If the
-tpm_version entry is absent, this is likely because you are running an old
-Chrome OS version which doesn't report this information. Upgrade to a newer
-version and check again.
-
-Vulnerable firmware versions used on Chrome OS are (listing the firmware_version
-value from chrome://system as well as the human-readable version number):
-
-* 000000000000041f - 4.31
-* 0000000000000420 - 4.32
-* 0000000000000628 - 6.40
-* 0000000000008520 - 133.32
-
-Fixed firmware versions are as follows:
-
-* 0000000000000422 - 4.34
-* 000000000000062b - 6.43
-* 0000000000008521 - 133.33
-
-## Affected devices
-
-With the exception of older devices that use the Infineon SLB 9635 TPM, all
-Chrome OS devices that include an Infineon TPM chip are affected. Here is the
-complete list of affected devices with code names and marketing names:
-
-* asuka - Dell Chromebook 13 3380
-* auron-paine - Acer Chromebook 11 (C740)
-* auron-yuna - Acer Chromebook 15 (CB5-571)
-* banjo - Acer Chromebook 15 (CB3-531)
-* banon - Acer Chromebook 15 (CB3-532)
-* buddy - Acer Chromebase 24
-* candy - Dell Chromebook 11 (3120)
-* caroline - Samsung Chromebook Pro
-* cave - ASUS Chromebook Flip C302
-* celes - Samsung Chromebook 3
-* chell - HP Chromebook 13 G1
-* clapper - Lenovo N20 Chromebook
-* cyan - Acer Chromebook R11 (CB5-132T / C738T)
-* daisy-skate - HP Chromebook 11 2000-2099 / HP Chromebook 11 G2
-* daisy-spring - HP Chromebook 11 1100-1199 / HP Chromebook 11 G1
-* edgar - Acer Chromebook 14 (CB3-431)
-* elm - Acer Chromebook R13 (CB5-312T)
-* enguarde - ASI Chromebook
-* enguarde - Crambo Chromebook
-* enguarde - CTL N6 Education Chromebook
-* enguarde - Education Chromebook
-* enguarde - eduGear Chromebook R
-* enguarde - Edxis Education Chromebook
-* enguarde - JP Sa Couto Chromebook
-* enguarde - Lenovo N21 Chromebook
-* enguarde - M&A Chromebook
-* enguarde - RGS Education Chromebook
-* enguarde - Senkatel C1101 Chromebook
-* enguarde - True IDC Chromebook
-* enguarde - Videonet Chromebook
-* expresso - Bobicus Chromebook 11
-* expresso - Consumer Chromebook
-* expresso - Edxis Chromebook
-* expresso - HEXA Chromebook Pi
-* falco - HP Chromebook 14
-* gandof - Toshiba Chromebook 2 (2015 Edition)
-* glimmer - Lenovo ThinkPad 11e Chromebook
-* gnawty - Acer Chromebook 11 (C730 / C730E)
-* gnawty - Acer Chromebook 11 (C735)
-* guado - ASUS Chromebox CN62
-* hana - Lenovo N23 Yoga/Flex 11 Chromebook
-* hana - Poin2 Chromebook 14
-* heli - Haier Chromebook 11 G2
-* kefka - Dell Chromebook 11 Model 3180
-* kefka - Dell Chromebook 11 3189
-* kevin - Samsung Chromebook Plus
-* kip - HP Chromebook 11 2100-2199 / HP Chromebook 11 G3
-* kip - HP Chromebook 11 2200-2299 / HP Chromebook 11 G4/G4 EE
-* kip - HP Chromebook 14 ak000-099 / HP Chromebook 14 G4
-* lars - Acer Chromebook 11 (C771, C771T)
-* lars - Acer Chromebook 14 for work (CP5-471)
-* leon - Toshiba Chromebook
-* link - Google Chromebook Pixel
-* lulu - Dell Chromebook 13 7310
-* mccloud - Acer Chromebox
-* monroe - LG Chromebase 22CB25S
-* monroe - LG Chromebase 22CV241
-* ninja - AOPEN Chromebox Commercial
-* nyan-big - Acer Chromebook 13 (CB5-311)
-* nyan-blaze - HP Chromebook 14 x000-x999 / HP Chromebook 14 G3
-* nyan-kitty - Acer Chromebase
-* orco - Lenovo 100S Chromebook
-* panther - ASUS Chromebox CN60
-* peach-pi - Samsung Chromebook 2 13"
-* peach-pit - Samsung Chromebook 2 11"
-* peppy - Acer C720 Chromebook
-* quawks - ASUS Chromebook C300
-* reks - Lenovo N22 (Touch) Chromebook
-* reks - Lenovo N23 Chromebook
-* reks - Lenovo N23 Chromebook (Touch)
-* reks - Lenovo N42 (Touch) Chromebook
-* relm - Acer Chromebook 11 N7 (C731)
-* relm - CTL NL61 Chromebook
-* relm - Edxis Education Chromebook
-* relm - HP Chromebook 11 G5 EE
-* relm - Mecer V2 Chromebook
-* rikku - Acer Chromebox CXI2
-* samus - Google Chromebook Pixel (2015)
-* sentry - Lenovo Thinkpad 13 Chromebook
-* setzer - HP Chromebook 11 G5 / HP Chromebook 11-vxxx
-* squawks - ASUS Chromebook C200
-* sumo - AOpen Chromebase Commercial
-* swanky - Toshiba Chromebook 2
-* terra - ASUS Chromebook C202SA
-* terra - ASUS Chromebook C300SA/C301SA
-* tidus - Lenovo ThinkCentre Chromebox
-* tricky - Dell Chromebox
-* ultima - Lenovo ThinkPad 11e Chromebook 3rd Gen (Yoga/Clamshell)
-* veyron-fievel - AOpen Chromebox Mini
-* veyron-jaq - Haier Chromebook 11
-* veyron-jaq - Medion Akoya S2013
-* veyron-jaq - True IDC Chromebook 11
-* veyron-jaq - Xolo Chromebook
-* veyron-jerry - CTL J2 / J4 Chromebook for Education
-* veyron-jerry - eduGear Chromebook K Series
-* veyron-jerry - Epik 11.6" Chromebook ELB1101
-* veyron-jerry - HiSense Chromebook 11
-* veyron-jerry - Mecer Chromebook
-* veyron-jerry - NComputing Chromebook CX100
-* veyron-jerry - Poin2 Chromebook 11
-* veyron-jerry - Positivo Chromebook CH1190
-* veyron-jerry - VideoNet Chromebook BL10
-* veyron-mickey - ASUS Chromebit CS10
-* veyron-mighty - Chromebook PCM-116E
-* veyron-mighty - eduGear Chromebook M Series
-* veyron-mighty - Haier Chromebook 11e
-* veyron-mighty - Lumos Education Chromebook
-* veyron-mighty - MEDION Chromebook S2015
-* veyron-mighty - Nexian Chromebook 11.6-inch
-* veyron-mighty - Prowise 11.6" Entry Line Chromebook
-* veyron-mighty - Sector 5 E1 Rugged Chromebook
-* veyron-mighty - Viglen Chromebook 11
-* veyron-minnie - ASUS Chromebook Flip C100PA
-* veyron-speedy - ASUS Chromebook C201PA
-* veyron-tiger - AOpen Chromebase Mini
-* winky - Samsung Chromebook 2 11 - XE500C12
-* wizpig - CTL J5 Chromebook
-* wizpig - Edugear CMT Chromebook
-* wizpig - Haier Convertible Chromebook 11 C
-* wizpig - PCMerge Chromebook PCM-116T-432B
-* wizpig - Prowise ProLine Chromebook
-* wizpig - Viglen Chromebook 360
-* wolf - Dell Chromebook 11
-* zako - HP Chromebox CB1-(000-099) / HP Chromebox G1/ HP Chromebox
- for Meetings
-
-## TPM firmware update
-
-Recent Chrome OS builds of version M61 and later include functionality to
-install a TPM firmware update on the affected devices. After installing the
-update, RSA keys generated by the TPM are no longer vulnerable against the
-attack described above.
-
-### Chrome OS versions including the firmware update
-
-The following Chrome OS versions include the TPM firmware update for affected
-devices (note that chromium OS builds do not contain firmware files):
-
-* Chrome OS M61 - build 9765.81.0 and later
-* Chrome OS M62 - build 9901.42.0 and later
-* Chrome OS M63 - build 10020.0.0 and later
-
-The one exception is link / Google Chromebook Pixel, for which the TPM firmware
-update functionality is not enabled yet. There is a problem with firmware update
-installation on that device, we intend to ship an update with a fix to enable
-the TPM firmware update as soon as possible.
-
-### Things to know about the update process
-
-Installing the TPM firmware update requires a hardware reset of the TPM chip.
-This means that all data held by the TPM will be discarded. This includes disk
-encryption keys, implying all user data stored locally on the device will be
-lost. Thus, you need to carefully backup any important data before you install
-the update.
-
-We are actively working on ways to allow updated TPM firmware to be installed
-without losing all data on the device. Launch dates for these non-destructive
-update flows are not confirmed at this point though.
-
-There is also a risk that the update will fail e.g. due to loss of power while
-installing the update. See **below** for more information on how to recover from
-this situation. You'll need Chrome OS recovery media in order to invoke the
-recovery flow. You will want to make sure that you either prepare it before
-starting the TPM firmware update just in case or have another computer available
-to create recovery media in case you need it.
-
-### Deciding whether to install the update
-
-There is no one-size-fits-all advice on whether to install the update or not. As
-described above, there are inherent inconveniences and risks associated with the
-update process and a limited set of features is impacted by the vulnerability.
-In order to help make an informed decision, here is some guidance. If any of the
-following applies, consider installing the update:
-
- You rely on the highest level of protection that Chrome OS can offer for
- your encrypted user data (TPM-backed protection against password
- brute-forcing attacks).
-
- You are using hardware-backed encryption keys and corresponding certificates
- to access network services such as corporate web sites, VPNs. etc. If you're
- unsure you can check the "your certificates" section in
- chrome://settings/certificates to see whether you have any hardware-backed
- certificates.
-
- You are using [Verified
- Access](https://support.google.com/chrome/a/answer/7156268) for device
- authentication on your enterprise-managed Chrome OS devices. When in doubt,
- ask your administrator.
-
-If none of the bullets above apply to you, you don't benefit from the update and
-can safely skip it, thus avoiding potential complications due to failing updates
-as described above.
-
-### Installing the update
-
-Due to the implied loss of data, users must trigger the update explicitly. To do
-so, users can opt in to installing the TPM firmware update as part of the
-[factory reset flow](https://support.google.com/chromebook/answer/183084) also
-known as "powerwash". Note that for enterprise-managed devices, the powerwash UI
-is not regularly available. We have added a TPM firmware update device policy
-though which admins can set to make the TPM firmware update via powerwash
-available to their users.
-
-The steps are as follows:
-
- Trigger the powerwash flow, either via Ctrl+Alt+Shift+r on the login screen,
- or via the powerwash option in chrome://settings &gt; Advanced.
-
- The flow will ask you to reboot unless you have just restarted your device
- anyways.
-
- In the powerwash dialog, there will be a checkbox "Update firmware for added
- security." Check it in order to request the TPM firmware update to be
- installed.
- If you don't see a checkbox, this can be due to a number of reasons:
-
- Your device already runs updated firmware, check chrome://system as
- described above to confirm.
-
- You are running an older Chrome OS version that doesn't include
- functionality to update TPM firmware. Upgrade to a newer OS version.
-
- Once you click the "Powerwash" button and confirm, the device will reboot.
-
- After the reboot, you'll see a message indicating that the powerwash is in
- progress. Wait for it to complete, after which the device will reboot again.
-
- After the second reboot, the device will show a message screen when
- installing the firmware update. There is a progress bar that will be updated
- as the update progresses. The device will reboot once more after installing
- the update.
-
- After the third reboot, you'll see the familiar Chrome OS UI again showing
- the out of box experience. Your device is just as new, so you can go through
- the setup flow again and then log in as usual.
-
- It’s worth double-checking you are running fixed TPM firmware by checking
- the tpm_version entry in chrome://system. See the **Affected TPM firmware
- versions** section for details.
-
-### Retrying a failed update
-
-There is a risk that the device will no longer boot if the update fails. This
-happens when the update installation gets interrupted while on the installation
-progress screen, for example due to power loss. The device will show a screen
-saying "Chrome OS is missing or damaged". If you press Tab on this screen,
-you'll see some additional information including a line labelled
-"recovery_reason". If the boot failure was due to an earlier failed TPM firmware
-update, you'll likely see "Secure NVRAM (TPM) initialization error" as
-"recovery_reason".
-
-Devices in this state can be recovered via [Chrome OS
-recovery](https://support.google.com/chromebook/answer/1080595). Recovery images
-for versions that have the TPM firmware update (see above) include functionality
-to retry a TPM firmware update that has previously failed. Follow these steps to
-recover:
-
- Make absolutely sure that your device is connected to a reliable power
- source and has a charged battery (if applicable).
-
- Press Esc+Refresh+Power (keep holding Esc+Refresh for a while after
- releasing power) in order to start recovery mode. The device will boot to a
- screen that says "Chrome OS is missing or damaged" (older devices) or
- "Please insert a recovery USB stick or SD card" (newer devices).
-
- Plug the recovery media.
-
- The device will launch the recovery procedure, starting with verification of
- the recovery media.
-
- If the recovery software determines the TPM has encountered a previous
- failed update, it will automatically launch the TPM firmware update
- installation process. You'll see a screen indicating the update is getting
- installed, with a progress bar getting updated as the update progresses.
-
- After successful installation of the update, the device will reboot.
- Afterwards, the device should boot to the familiar Chrome OS UI again
- showing the out-of-box experience.
-
-### Troubleshooting recovery failure
-
-The recovery software will show a screen saying "The security module on this
-device is not working" if it encounters a bug or a condition that the recovery
-software is unable to fix. If you see this, you'll want to ask for help either
-via [Chromebook Central Help
-Forum](https://productforums.google.com/forum/#!forum/chromebook-central) or via
-EDU / enterprise support channels (if applicable). There are some important
-pieces of evidence to gather that are helpful in figuring out the root cause of
-the failure:
-
- Hold on to recovery media. The recovery software stores diagnostic
- information on it, so do not use it for recovery attempts on other devices
- and do not overwrite otherwise. The log files can be found on the first
- partition under "recovery_logs" and contain a trace of the recovery software
- execution flow which is invaluable in tracking down the root cause for the
- failure.
-
- Take note of the information shown by pressing Tab on the "Chrome OS is
- missing or damaged screen" e.g. by snapping a photo. The recovery_reason
- line is particularly interesting as it may indicate clues as to what state
- the TPM is in.
-
-### Subsequent TPM firmware update prompt
-
-Due to a [bug](https://bugs.chromium.org/p/chromium/issues/detail?id=872746) in
-the original implementation of the TPM firmware update flow, a vulnerable
-Storage Root Key (a key held in the TPM that is used to encrypt other keys) from
-before the update may remain even after completing the update. This affects a
-small number of devices that did not finish the TPM firmware update in normal
-boot mode but only after retry using a recovery image. This can be addressed by
-performing another powerwash to clear the TPM again and thus regenerate a new
-Storage Root Key that is not vulnerable. Chrome OS M70 and later will show a
-one-time system notification saying "Security upgrade available" / "Reset your
-Chromebook to upgrade your security" for each user to alert of them of the
-situation. Users should re-evaluate their situation per the
-[advice](/chromium-os/tpm_firmware_update#TOC-Things-to-know-about-the-update-process)
-[above](/chromium-os/tpm_firmware_update#TOC-Deciding-whether-to-install-the-update)
-to decide whether they want to perform the powerwash, which can be triggered by
-invoking the firmware update flow again via chrome://chrome.
-
-### Manually Updating
-
-If you want to apply the update manually for any reason (e.g. you're using a
-Chromebook Pixel (link)), here's the steps required.
-
-1. Put the device into dev mode
- * See the [official list of
- devices](/chromium-os/developer-information-for-chrome-os-devices)
- for more details
-2. If you're already in dev mode, you'll need to
- [Powerwash](https://support.google.com/chromebook/answer/183084) or
- go through
- [recovery](https://support.google.com/chromebook/answer/1080595) to
- reset the TPM back to the correct initial state
-3. Boot the device until you get to the initial OOBE screen (where you
- select network/etc...)
- * Don't sign in!
-4. Switch to a console by pressing Ctrl-Alt-F2 (the -&gt; key is the
- same as F2)
-5. Log in using the "root" username (there should be no password)
-6. Type this command (all on one line):
- `dbus-send --system --dest=org.chromium.SessionManager --type=method_call
- /org/chromium/SessionManager
- org.chromium.SessionManagerInterface.StartTPMFirmwareUpdate
- string:first_boot`
-7. After a few seconds, the device should reboot
- * If the device doesn't reboot, check `/var/log/messages`. If it
- says something about a user already having logged in, go back to
- step 2.
-8. Press Ctrl-D to boot
-9. Wait for the powerwash step to finish and reboot (should be quick)
-10. Press Ctrl-D to boot
-11. Wait for the installing update step to finish
-12. If the device reboots and takes you back to the login screen, you're
- done
-13. If you get an error, perform the steps described above to [retry a
- failed
- update](/chromium-os/tpm_firmware_update#TOC-Retrying-a-failed-update).
- Note that there is a known issue with original Chromebook Pixel
- (link) devices:The original TPM firmware version fails installing
- the firmware update just before completion. The device may or may
- not boot normally after turning it off and on again. It is critical
- to go through Chrome OS recovery again to reset the TPM into a good
- state and flush out all weak keys. You have been warned!
-14. If things still aren't working, then review the troubleshooting
- sections above \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/PulseviewRequestAccept.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/PulseviewRequestAccept.png.sha1
deleted file mode 100644
index ccc3d8a87ba..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/PulseviewRequestAccept.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-97e133b67687b190a5227e8e79d5c8a03a5fddee \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/PulseviewSourceCap_request.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/PulseviewSourceCap_request.png.sha1
deleted file mode 100644
index 4784b71fc46..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/PulseviewSourceCap_request.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4ee433466869d0c3ad3a83be9c25c291f04e635d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/Twinkie-diagram.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/Twinkie-diagram.png.sha1
deleted file mode 100644
index 24dcc4fd0d2..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/Twinkie-diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-db1fa965e76b6ec0767258e2b4dd326fd467c782 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/build-sigrok-and-pulseview-from-sources/index.md b/chromium/docs/website/site/chromium-os/twinkie/build-sigrok-and-pulseview-from-sources/index.md
deleted file mode 100644
index 3afc30e5a08..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/build-sigrok-and-pulseview-from-sources/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/twinkie
- - USB-PD Sniffer
-page_name: build-sigrok-and-pulseview-from-sources
-title: Build Sigrok and Pulseview from sources
----
-
-If you want to build Sigrok and Pulseview from sources with the Twinkie support
-in libsigrok,
-
-the easiest path is to use the last released versions:
-
-[libsigrok-0.5.0](http://sigrok.org/gitweb/?p=libsigrok.git;a=shortlog;h=refs/heads/libsigrok-0.5.x)
-(with [twinkie-0.5.0
-patch](https://github.com/vpalatin/libsigrok/commit/6228032ec0c86b776b80ed91bf810952fdd561a7))
-[libsigrokdecode-0.5.0](http://sigrok.org/gitweb/?p=libsigrokdecode.git;a=shortlog;h=refs/heads/libsigrokdecode-0.5.x)
-[sigrok-cli-0.7.0](http://sigrok.org/gitweb/?p=sigrok-cli.git;a=shortlog;h=refs/heads/sigrok-cli-0.7.x)
-[pulseview-0.4.0](http://sigrok.org/gitweb/?p=pulseview.git;a=shortlog;h=refs/heads/pulseview-0.4.x)
-
-Here is a recipe working on Ubuntu Trusty LTS:
-
-```none
-sudo apt-get install gcc g++ libtool automake autoconf libftdi-dev libusb-1.0-0-dev libglib2.0-dev check
-sudo apt-get install libzip-dev libglibmm-2.4-dev doxygen python3.4-dev python-gobject-dev swig3.0
-sudo apt-get install qtbase5-dev qtbase5-dev-tools libqt5svg5-dev cmake
-sudo apt-get install libboost1.55-dev libboost-filesystem1.55-dev libboost-system1.55-dev libboost-test1.55-dev libboost-serialization1.55-dev
-git clone https://github.com/vpalatin/libsigrok.git -b twinkie-0.5.0
-git clone https://github.com/vpalatin/libsigrokdecode.git -b twinkie-0.5.0
-git clone https://github.com/vpalatin/sigrok-cli.git -b twinkie-0.7.0
-git clone https://github.com/vpalatin/pulseview.git -b twinkie-0.4.0
-cd libsigrok
-./autogen.sh
-./configure --prefix=/usr
-make install
-cd ../libsigrokdecode/
-./autogen.sh
-./configure --prefix=/usr
-make install
-cd ../sigrok-cli/
-./autogen.sh
-./configure --prefix=/usr
-make install
-cd ../pulseview/
-cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .
-make install
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/chromium-os-twinkie-v2.tar.bz2.sha1 b/chromium/docs/website/site/chromium-os/twinkie/chromium-os-twinkie-v2.tar.bz2.sha1
deleted file mode 100644
index d112ff5b6a3..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/chromium-os-twinkie-v2.tar.bz2.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d48006681febc3cf4c9f201ebe447ab3bf5cfee1 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/index.md b/chromium/docs/website/site/chromium-os/twinkie/index.md
deleted file mode 100644
index 999b9046bff..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/index.md
+++ /dev/null
@@ -1,334 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: twinkie
-title: USB-PD Sniffer
----
-
-[TOC]
-
-## Overview
-
-This page describes a USB-PD sniffing dongle with Type-C connectors. The dongle
-can be supported by Chrome devices as part of a USB-Type C implementation.
-
-<img alt="image" src="/chromium-os/twinkie/twinkies-2.png" height=156 width=200>
-<img alt="image" src="/chromium-os/twinkie/twinkies-1.png" height=156 width=200>
-<img alt="image" src="/chromium-os/twinkie/twinkies-3.png" height=156 width=200>
-
-## Hardware Capabilities
-
-* Sniffing USB Power Delivery traffic on both Control Channel lines
- (CC1/CC2)
-* Transparent interposer on a USB Type-C connection
-* Monitoring VBUS and VCONN voltages and currents (WARNING: VBUS path
- designed for SPR voltages up to 20V. Not appropriate for use with
- USB PD 3.1 EPR systems when in EPR mode)
-* Injecting PD packets on CC1 or CC2
-* Putting Rd/Rp/Ra resistors on CC1 or CC2
-
-[<img alt="image" src="/chromium-os/twinkie/Twinkie-diagram.png" height=314
-width=400>](/chromium-os/twinkie/Twinkie-diagram.png)
-
-Complete schematics, layout, and enclosure are attached at the bottom of this
-page.
-
-## **Firmware Source Code**
-
-The firmware is located In the Chromium Embedded Controller repository under
-*[board/twinkie/](https://chromium.googlesource.com/chromiumos/platform/ec/+/firmware-twinkie-9628.B/board/twinkie/),*
-the release version is on the firmware-twinkie-9628.B branch :
-
-<https://chromium.googlesource.com/chromiumos/platform/ec/+/firmware-twinkie-9628.B/board/twinkie/>
-
-### **Building Firmware**
-
-Within your Chromium OS chroot, the syntax is:
-
-```none
-For the impatient, here is a very cut-down version of the detailed instructions. 
-```
-
-```none
-If anything here gives you trouble, refer to the [official documentation](http://www.chromium.org/chromium-os/developer-guide) instead.
-```
-
-```none
-```
-
-```none&#10;&#10;## Install the prerequisite tools&#10;&#10;```
-
-```none
-goobuntu$   sudo apt-get install git-core gitk git-gui subversion curl
-```
-
-```none
-goobuntu$   git clone <https://chromium.googlesource.com/chromium/tools/depot_tools.git>
-```
-
-```none
-goobuntu$   export PATH=$(pwd)/depot_tools:$PATH
-```
-
-```none&#10;&#10;## Check out the sources&#10;&#10;```
-
-```none
-goobuntu$   mkdir chromiumos && cd chromiumos
-```
-
-```none
-goobuntu$   repo init -u https://chromium.googlesource.com/chromiumos/manifest.git \
-```
-
-```none
-                    --repo-url https://chromium.googlesource.com/external/repo.git \
-```
-
-```none
-                    -g minilayout -b firmware-twinkie-9628.B
-```
-
-```none
-goobuntu$   repo sync
-```
-
-```none&#10;&#10;## Enter the chroot&#10;&#10;```
-
-```none
-goobuntu$   cros_sdk
-```
-
-```none&#10;&#10;## Install the board-specific compiler toolchain&#10;&#10;```
-
-```none
-chroot$   ./setup_board --board=falco
-```
-
-```none&#10;&#10;## Check out the EC sources&#10;&#10;```
-
-```none
-chroot$  cros_workon-falco start chromeos-ec
-```
-
-```none
-chroot$  repo sync ../platform/ec
-```
-
-```none&#10;&#10;## Build things&#10;&#10;```
-
-```none
-chroot$ cd ../platform/ec
-```
-
-```none
-chroot$  make BOARD=twinkie -j
-```
-
-Alternately, you can use the **pre-built firmware**
-*[twinkie_v1.11.19-9e81762f2.bin](https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/twinkie_v1.11.19-9e81762f2.bin)*
-attached at the bottom of this page.
-
-### **Flashing Firmware**
-
-The USB-PD dongle behaves as a USB DFU device when the ID pin is grounded on the
-USB micro-B connector.
-
-This is done either by plugging an A-A USB cable into an A-to-microB OTG adapter
-as shown in the photo below
-
-or by typing the` dfu` command on the USB console (if you already have a recent
-firmware, e.g. *v1.11.19*+).
-
-Within your Chromium OS chroot:
-
-```none
-./util/flash_ec --board=twinkie
-```
-
-or on Ubuntu Linux:
-
-```none
-sudo apt-get install dfu-util
-```
-
-```none
-sudo dfu-util -a 0 -s 0x08000000 -D twinkie_v1.11.19-9e81762f2.bin
-```
-
-[<img alt="Programming Twinkie with OTG and A-to-A cables"
-src="/chromium-os/twinkie/twinkie_programming.jpg" height=161
-width=320>](/chromium-os/twinkie/twinkie_programming.jpg)
-
-if you have entered the DFU mode by using the dfu console command, you need to
-use the following command to exit it :
-
-sudo dfu-util -a 0 -s 0x08000000:force:unprotect -D
-twinkie_v1.11.19-9e81762f2.bin
-
-else plugging the regular USB cable will do it automatically.
-
-## Using the Integrated Command Line over USB
-
-The USB-PD dongle exports its internal command-line console as a pair of USB
-bulk endpoints.
-
-On a Linux system, you get the console as a /dev/ttyUSB*n* device.
-
-On recent systems (kernel v3.19+), this ttyUSB device should be instantiated
-automatically, or other systems you can try using the *usbserial* kernel module
-:
-
-```none
-echo '18d1 500A' | sudo tee /sys/bus/usb-serial/drivers/generic/new_id
-```
-
-If this fails, you might need to run `sudo modprobe usbserial` first.
-
-## Using as a PD Packet Sniffer
-
-You can use the opensource [Sigrok](http://sigrok.org) framework to acquire and
-decode USB Power Delivery traces with the USB-PD dongle. You can then use
-[Pulseview ](http://sigrok.org/wiki/PulseView)to display them.
-
-The patches for the Sigrok hardware driver for the dongle is not in the upstream
-packages yet.
-
-The packages below also include the bleeding edge version of Pulseview which has
-a convenient "Tabular Decoder Output View".
-
-If your machine has an x86_64 processor, you can try the following experimental
-pre-built packages:
-
-- for Ubuntu Focal Fossal (20.04 LTS)
-
-```none
-cd $(mktemp -d)
-wget https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_20.04/libsigrok4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_20.04/libsigrokcxx4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_20.04/libsigrokdecode4_0.5.3-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_20.04/sigrok-cli_0.7.1-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_20.04/pulseview_0.5.0~git20200910+1acc207a-1_amd64.deb
-sudo dpkg -i *.deb
-sudo apt-get install -f
-```
-
-- for Ubuntu Bionic Beaver (18.04 LTS)
-
-```none
-cd $(mktemp -d)
-wget https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_18.04/libsigrok4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_18.04/libsigrokcxx4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_18.04/libsigrokdecode4_0.5.3-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_18.04/sigrok-cli_0.7.1-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/ubuntu_18.04/pulseview_0.5.0~git20200910+1acc207a-1_amd64.deb
-sudo dpkg -i *.deb
-sudo apt-get install -f
-```
-
-- for Debian Buster (stable) or Chrome OS Crostini container
-
-```none
-cd $(mktemp -d)
-wget https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/debian-buster/libsigrok4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/debian-buster/libsigrokcxx4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/debian-buster/libsigrokdecode4_0.5.3-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/debian-buster/sigrok-cli_0.7.1-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/debian-buster/pulseview_0.5.0~git20200910+1acc207a-1_amd64.deb
-sudo dpkg -i *.deb
-sudo apt-get install -f
-```
-
-- for Rodete
-
-```none
-cd $(mktemp -d)
-wget https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/rodete/libsigrok4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/rodete/libsigrokcxx4_0.5.2-2+twinkie_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/rodete/libsigrokdecode4_0.5.3-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/rodete/sigrok-cli_0.7.1-1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie_20201028/rodete/pulseview_0.5.0~git20200910+1acc207a-1_amd64.deb
-sudo dpkg -i *.deb
-sudo apt-get install -f
-```
-
-If you want to do a full build from sources of sigrok and pulseview with Twinkie
-support,
-
-now the USB PD protocol decoder is now upstreamed in libsigrokdecode (and
-sigrok-cli / pulseview are working out-of-the-box).
-
-You only need to add the Chromium Twinkie hardware driver in libsigrok : [last
-version of the patch applying on
-libsigrok-0.5.2](https://github.com/vpalatin/libsigrok/commit/8147e36b8ffa48a23cf898332c351f6a6d85484b)
-[plus the VBUS
-support](https://github.com/vpalatin/libsigrok/commit/97a7e9cbb3126aa5329b96a2f017e682b9036d8f)
-
-A recipe to do this build is written down in [Build Sigrok and Pulseview from
-sources](/chromium-os/twinkie/build-sigrok-and-pulseview-from-sources).
-
-### Capturing traces with the Sigrok tool
-
-```none
-sigrok-cli -d chromium-twinkie --continuous -o test.sr
-```
-
-### Real-time decoding of USB PD packets while capturing
-
-```none
-sigrok-cli -d chromium-twinkie --continuous -P usb_power_delivery:cc=CC1:fulltext=yes -P usb_power_delivery:cc=CC2:fulltext=yes -A usb_power_delivery=text
-```
-
-### Displaying and decoding PD traces
-
-```none
-pulseview test.sr &
-```
-
-Add the **USB PD** decoder from the Decoders menu, then edit the instantiated
-decoder to select the appropriate CC line.
-
-[<img alt="image"
-src="/chromium-os/twinkie/pulseview_3packets.png">](/chromium-os/twinkie/pulseview_3packets.png)
-
-[<img alt="image"
-src="/chromium-os/twinkie/pulseview_zoom_packet.png">](/chromium-os/twinkie/pulseview_zoom_packet.png)
-
-[<img alt="image"
-src="/chromium-os/twinkie/pulseview_VBUS_V.png">](/chromium-os/twinkie/pulseview_VBUS_V.png)
-
-[<img alt="image"
-src="/chromium-os/twinkie/pulseview_VBUS_V_A.png">](/chromium-os/twinkie/pulseview_VBUS_V_A.png)
-
-### Experimental VBUS analog traces
-
-As shown on the pictures above, you can try to capture the VBUS analog voltage
-and current along with the CCx lines traffic.
-
-This feature is still *experimental and might have negative side effects* on
-your PD packets capture !
-
-Capturing VBUS voltage only and CCx traffic:
-
-```none
-sigrok-cli  -d chromium-twinkie:analog_channels=1 --continuous -o testvbusV.sr
-```
-
-Capturing VBUS voltage and current and CCx traffic:
-
-```none
-sigrok-cli  -d chromium-twinkie:analog_channels=2 --continuous -o testvbusVA.sr
-```
-
-then you can display the .sr files in Pulseview.
-
-## Using as a Power Sink
-
-1. Use the tw sink command. Exit sink mode by using the reboot command.
-2. When a power source is detected, the dongle negotiates a power
- contract, activating the green LED for 5V, the red LED for 20V, or
- the blue LED for other voltage.
-3. You can change the maximum negotiated voltage with the following
- command in the dongle USB shell:
- pd 0 dev 12
- This example sets a limit of 12 V. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/index.md b/chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/index.md
deleted file mode 100644
index c0ea1658604..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/index.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/twinkie
- - USB-PD Sniffer
-page_name: older-sigrok-packages
-title: Older Sigrok packages and firmwares
----
-
-#### Previous versions of the binary packages for x86_64
-
-#### - for Ubuntu Xenial (16.04 LTS)
-
-#### ```none
-cd $(mktemp -d)
-wget https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/ubuntu-xenial/libsigrok4_0.5.0-3twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/ubuntu-xenial/libsigrokcxx4_0.5.0-3twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/ubuntu-xenial/libsigrokdecode4_0.5.0-4twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/ubuntu-xenial/sigrok-cli_0.7.0-2twinkie1_amd64.deb \
-      https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/ubuntu-xenial/pulseview_0.4.0-2twinkie1_amd64.deb
-sudo dpkg -i *.deb
-sudo apt-get install -f
-```
-
-#### - for Debian Buster (testing)
-
-#### ```none
-cd $(mktemp -d)
-wget https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-buster/libsigrok4_0.5.0-3twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-buster/libsigrokcxx4_0.5.0-3twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-buster/libsigrokdecode4_0.5.0-4twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-buster/sigrok-cli_0.7.0-2twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-buster/pulseview_0.4.0-2twinkie1_amd64.deb
-sudo dpkg -i *.deb
-sudo apt-get install -f
-```
-
-#### - for Debian Stretch (stable)
-
-#### ```none
-cd $(mktemp -d)
-wget https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-stretch/libsigrok4_0.5.0-3twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-stretch/libsigrokcxx4_0.5.0-3twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-stretch/libsigrokdecode4_0.5.0-4twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-stretch/sigrok-cli_0.7.0-2twinkie1_amd64.deb \
-    https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/debian-stretch/pulseview_0.4.0-2twinkie1_amd64.deb
-sudo dpkg -i *.deb
-sudo apt-get install -f
-```
-
-#### - for Ubuntu Trusty (14.04 LTS), you can unpack the following
-[binaries](https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/ubuntu-trusty/sigrok-twinkie-0.5.0.tar.gz)
-at the desired location on your computer and install the dependencies, e.g:
-
-#### ```none
-wget -qO- https://storage.googleapis.com/chromeos-vpa/twinkie-20171122/ubuntu-trusty/sigrok-twinkie-0.5.0.tar.gz | tar xvz
-sudo apt-get install libqt5core5a libqt5widgets5 libqt5gui5 libboost-system1.55.0 libboost-filesystem1.55.0 libboost-serialization1.55.0 libglibmm-2.4 libglib2.0
-```
-
-#### then execute them directly, e.g
-`/path/to/your/sigrok-twinkie-0.5.0/bin/pulseview `
-
-#### `or /path/to/your/sigrok-twinkie-0.5.0/bin/sigrok-cli -d chromium-twinkie
---continuous -o [`test.sr`](http://test.sr/)
-#### or add them to your path, e.g `export
-PATH="$PATH:/path/to/your/sigrok-twinkie-0.5.0/bin"`
-
-#### Previous versions of the binary packages for Ubuntu Trusty, mainly for the record
-
-the x86_64 version of the packages:
-
-[libsigrok1_20141111-1_amd64.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20141111/libsigrok1_20141111-1_amd64.deb)
-
-[libsigrokdecode1_20141111-1_amd64.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20141111/libsigrokdecode1_20141111-1_amd64.deb)
-
-[sigrok-cli_20141111-1_amd64.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20141111/sigrok-cli_20141111-1_amd64.deb)
-
-[pulseview_20141111-1_amd64.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20141111/pulseview_20141111-1_amd64.deb)
-
-the ARM version of the packages :
-
-[libsigrok1_0.3.0-7df7cdb-1_armhf.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20150303/libsigrok1_0.3.0-7df7cdb-1_armhf.deb)
-
-[libsigrokdecode1_0.3.0-8a6e61d-1_armhf.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20150303/libsigrokdecode1_0.3.0-8a6e61d-1_armhf.deb)
-
-[sigrok-cli_0.5.0-c9edfa2-1_armhf.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20150303/sigrok-cli_0.5.0-c9edfa2-1_armhf.deb)
-
-[pulseview_20150303-321ce42-1_armhf.deb](http://storage.googleapis.com/chromeos-vpa/sigrok-20150303/pulseview_20150303-321ce42-1_armhf.deb)
-
-Once you have downloaded the .deb packages, you can use the following
-command-line to install them easily:
-
-```none
-sudo dpkg -i libsigrok1_20141111-1_amd64.deb libsigrokdecode1_20141111-1_amd64.deb sigrok-cli_20141111-1_amd64.deb pulseview_20141111-1_amd64.deb
-sudo apt-get install -f
-```
-
-#### Previous released versions of the firmware binary
-
-the*` twinkie_v1.1.2705-bc6d966.combined.bin `*firmware binary is attached at
-the bottom of this page. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/twinkie_v1.1.2705-bc6d966.combined.bin.sha1 b/chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/twinkie_v1.1.2705-bc6d966.combined.bin.sha1
deleted file mode 100644
index f1d1e4197c5..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/older-sigrok-packages/twinkie_v1.1.2705-bc6d966.combined.bin.sha1
+++ /dev/null
@@ -1 +0,0 @@
-820e10b60dc0b19d6e34cb4b305e28ff67084c77 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/pulseview_3packets.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/pulseview_3packets.png.sha1
deleted file mode 100644
index 1572a62f8a1..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/pulseview_3packets.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4611061077c004d47c1b3168f3c7860255c7af33 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V.png.sha1
deleted file mode 100644
index d92ee40846a..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ee1cfb9824c9ed63d0003fc741a40a582a62bafe \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V_A.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V_A.png.sha1
deleted file mode 100644
index 3c549f65eb6..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/pulseview_VBUS_V_A.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b2cf27fef153f7fcdcd86451d933c31cbb4f3307 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packet.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packet.png.sha1
deleted file mode 100644
index 65ef3b2aebf..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packet.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-91b00091f21b6cde1cced2fc5e156b5e5d6d1368 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packetx3.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packetx3.png.sha1
deleted file mode 100644
index c8e78aedd94..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/pulseview_zoom_packetx3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ca5979f4309693466e2c549963b288a82d403b02 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/twinkie_programming.jpg.sha1 b/chromium/docs/website/site/chromium-os/twinkie/twinkie_programming.jpg.sha1
deleted file mode 100644
index ab345aa3533..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/twinkie_programming.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0fecf2b2bd6cccc9d5382f53306b24367c5de8e3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.19-9e81762f2.bin.sha1 b/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.19-9e81762f2.bin.sha1
deleted file mode 100644
index 175295844fc..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.19-9e81762f2.bin.sha1
+++ /dev/null
@@ -1 +0,0 @@
-802396fc2f976605277ae8af39f091480130fa3c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.20-005227d8f.bin.sha1 b/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.20-005227d8f.bin.sha1
deleted file mode 100644
index af89d737451..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.20-005227d8f.bin.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e4d864fa3b131411c65081faaaf249362986ba60 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.21-3e33e08af.webusb.bin.sha1 b/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.21-3e33e08af.webusb.bin.sha1
deleted file mode 100644
index 4a1fb23d06b..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/twinkie_v1.11.21-3e33e08af.webusb.bin.sha1
+++ /dev/null
@@ -1 +0,0 @@
-47b4245d86a3cbcdb4632aa7a4b71a56c7e3c2a8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/twinkies-1.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/twinkies-1.png.sha1
deleted file mode 100644
index a6c2216f9fd..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/twinkies-1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-805e6e8315e2a7935261ced1fbcb19bdb533f9c4 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/twinkies-2.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/twinkies-2.png.sha1
deleted file mode 100644
index 0eee0ae2619..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/twinkies-2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f73f67b22594f11c1a759b5ffc95c5cb3aec6868 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/twinkie/twinkies-3.png.sha1 b/chromium/docs/website/site/chromium-os/twinkie/twinkies-3.png.sha1
deleted file mode 100644
index fce91ae1db1..00000000000
--- a/chromium/docs/website/site/chromium-os/twinkie/twinkies-3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-26bd7a055d012e1ba825915c2d0914fd9a58b490 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.jpg.sha1 b/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.jpg.sha1
deleted file mode 100644
index a85c158c47b..00000000000
--- a/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7d3592f8879f1577301d1b7cbb729b363206c8f6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.png.sha1 b/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.png.sha1
deleted file mode 100644
index aeaf721f56e..00000000000
--- a/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/Type C on a Chromebook.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-34f3bcf6c684fc759732f8f9500df4b4139bfe1e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/index.md b/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/index.md
deleted file mode 100644
index 0d6bfe44dc6..00000000000
--- a/chromium/docs/website/site/chromium-os/type-c-on-rk3399-chromebooks/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: type-c-on-rk3399-chromebooks
-title: Type C on rk3399 Chromebooks
----
-
-[<img alt="image"
-src="/chromium-os/type-c-on-rk3399-chromebooks/Type%20C%20on%20a%20Chromebook.png">](/chromium-os/type-c-on-rk3399-chromebooks/Type%20C%20on%20a%20Chromebook.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/u2f-ecdsa-vulnerability/index.md b/chromium/docs/website/site/chromium-os/u2f-ecdsa-vulnerability/index.md
deleted file mode 100644
index 5ebbde1c4ad..00000000000
--- a/chromium/docs/website/site/chromium-os/u2f-ecdsa-vulnerability/index.md
+++ /dev/null
@@ -1,366 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: u2f-ecdsa-vulnerability
-title: U2F ECDSA vulnerability
----
-
-Published Jun 24, 2019
-
-U2F ECDSA vulnerability
-
-This page provides technical background and advice to users who are affected by
-a security vulnerability in Chrome OS' experimental "built-in security key"
-feature that implements an authenticator in accordance with the Universal 2nd
-Factor specification.
-
-# "Just tell me what to do!"
-
-If you're not interested in technical detail, but just want to fix your account
-security, just follow these steps:
-
- Double-check whether you're affected: This is about the experimental
- built-in security key function where your Chromebook acts as a security key
- that you can trigger by pressing the Chromebook's power button. If you have
- never used this feature, you can stop reading now.
-
- Make a list of your accounts with websites etc. where you have registered
- the built-in security key. These are at risk because the built-in security
- key can potentially be faked by an attacker without the attacker having your
- Chrome OS device.
-
- Unregister the built-in security key from all these services. Exact
- instructions vary by service, but typically there are "account settings" or
- "security settings" that list registered security keys and give you the
- option to remove / unregister security keys. There is no need to change
- passwords or other account security settings.
-
- (optional) Review recent successful logins to services to determine whether
- there's anything suspicious.
-
- In case you received a "Internal security key requires reset" notification,
- click "Reset" on the notification to prevent it from showing again.
-
-That's it, you're good. You can stop reading at this point unless you are
-interested in further technical details.
-
-# Technical Details
-
-## Vulnerability description
-
-We discovered a vulnerability in the H1 security chip firmware concerning ECDSA
-signature generation. The firmware code used incompatible transfer instructions
-when passing a critical secret value to the cryptographic hardware block,
-resulting in generating secret values of a specific structure and having a
-significant loss of entropy in the secret value (64 bits instead of 256 bits).
-We confirmed that the incorrect generation of the secret value allows it to be
-recovered, which in turn allows the the underlying ECC private key to be
-obtained. Thus, attackers that have a single pair of signature and signed data
-can effectively compute the private key, breaking any functionality or protocols
-that use the key pair in question.
-
-## Impacted features
-
-ECDSA signatures generated by H1 were only used by Chrome OS for the
-experimental built-in U2F authenticator. An attacker who observes a signature
-produced by the built-in U2F authenticator can thus obtain the private key and
-spoof the authenticator from that point on. In other words, correct signatures
-no longer provide a strong signal of possession of the corresponding Chrome OS
-device.
-
-Note that signatures are generated both when the U2F authenticator gets
-registered with a service, and when processing an authentication challenge (e.g.
-when logging in to a 2FA-enabled service using the built-in U2F authenticator).
-
-We don't expect the vulnerable signatures to have been exposed broadly as they
-will usually be passed across HTTPS connections. However, since the signature is
-not considered sensitive in the U2F protocols, it would be inadequate to assume
-that no signatures have been observed or logged / stored in locations where they
-still may be retrieved from. As such, the built-in U2F authenticator feature
-that has generated vulnerable signatures using the vulnerable H1 firmware must
-be considered cryptographically broken.
-
-In practice, even the cryptographically broken U2F implementation as described
-above still doesn't immediately cause account compromise. For one, the primary
-factor in two-factor-authentication scheme remains unaffected. Secondly, even
-the broken U2F implementation provides phishing protection against most
-attackers since they won't easily be able to obtain a signature to break.
-Specifically, obtaining signatures is complicated by the U2F protocol creating
-individual keys for each service that a security key is enrolled with.
-
-Nevertheless, we recommend users to take remediation steps as described below to
-avoid the risk of running with a cryptographically weakened U2F authenticator.
-
-## Remediation
-
-Full remediation requires both a firmware fix and retiring key pairs that have
-generated vulnerable signatures.
-
-### Firmware fix
-
-Fixed firmware for the H1 security chip has been shipping with Chrome OS version
-75 and later and the update has automatically been installed on devices. No user
-action is required to get the firmware fix. Concerned users can double-check the
-H1 firmware version as described
-[below](/chromium-os/u2f-ecdsa-vulnerability#TOC-Affected-versions) to verify
-they've been updated to fixed firmware. The fixed firmware no longer generates
-vulnerable signatures. Note that this doesn't retroactively "fix" affected key
-pairs that have previously generated vulnerable signatures, these can still be
-broken if a vulnerable signature is available to an attacker.
-
-### Retiring affected ECDSA keys
-
-Each registration of the built-in U2F authenticator with a service has a
-corresponding ECDSA key. All keys that have produced vulnerable signatures are
-no longer secure, so should no longer be trusted by services. Unfortunately
-there is no way to centrally revoke security keys, so users need to manually
-unregister the built-in U2F authenticator from services. See the [advice
-above](/chromium-os/u2f-ecdsa-vulnerability#TOC-Just-tell-me-what-to-do-) for
-more details.
-
-## Affected versions
-
-Production H1 firmware versions with a version number of 0.3.14 and earlier
-contain the vulnerability. Versions 0.3.15 and later are not vulnerable. The H1
-firmware version is listed on the chrome://system page under cr50_version,
-specifically the RW line.
-
-Fixed H1 firmware versions are shipping with Chrome OS version 75 and later and
-get automatically installed by the OS. Note that the firmware will never get
-downgraded, so even if you downgrade to an earlier OS version, the fixed
-firmware will keep running on the device.
-
-## Affected devices
-
-All shipping devices that have an H1 security chip are potentially affected. A
-full list of models with public codename (listed in Platform or Customization ID
-on the chrome://version page) and model name is given below.
-
- akali360 - Acer Chromebook Spin 13 (CP713-1WN)
-
- akali - Acer Chromebook 13 (CB713-1W)
-
- alan - HP Chromebook 11 G6 EE
-
- aleena - Acer Chromebook 315
-
- ampton - ASUS Chromebook Flip C214
-
- apel - ASUS Chromebook C204
-
- astronaut - Acer Chromebook 11 (C732)
-
- babymako - ASUS chromebook C403
-
- babymega - ASUS Chromebook C223
-
- babytiger - ASUS Chromebook C523
-
- barla - HP Chromebook 11A G6 EE
-
- basking - ASUS Chromebook C213NA/C213SA
-
- bigdaddy - HP Chromebook 14 / HP Chromebook 14 G5
-
- blacktip360 - CTL chromebook NL7T-360
-
- blacktip - CTL chromebook NL7
-
- blacktiplte - CTL Chromebook NL7 LTE
-
- blue - Acer Chromebook 15 CB315-1H / 1HT
-
- bobba360 - Acer Chromebook Spin 511
-
- bobba - Acer Chromebook 311
-
- bob - ASUS Chromebook Flip C101PA
-
- bruce - Acer Chromebook Spin 15 CP315-1H / 1HT
-
- careena - HP Chromebook 14 db0000-db0999
-
- dru - Acer Chromebook Tab 10 (D651N / D650N)
-
- druwl - CTL Chromebook Tab Tx1
-
- dumo - ASUS Chromebook Tablet CT100
-
- electro - Acer Chromebook Spin 11 (R751T / CP511)
-
- epaulette - Acer Chromebook 514
-
- eve - Google Pixelbook
-
- fleex - Dell Chromebook 3100
-
- grabbiter - Dell Chromebook 3100 2in1
-
- kasumi360 - Chromebook Spin 311 (R721T)
-
- kasumi - Chromebook 311 (C721)
-
- kench - HP Chromebox G2
-
- lava - Acer Chromebook Spin 11 (CP311-1H & CP311-1HN)
-
- liara - Lenovo 14e Chromebook
-
- meep - HP Chromebook x360 11 G2 EE
-
- mimrock - HP Chromebook 11 G7 EE
-
- nasher360 - Dell Chromebook 11 2-in-1 5190
-
- nasher - Dell Chromebook 11 5190
-
- nautiluslte - Samsung Chromebook Plus (LTE)
-
- nautilus - Samsung Chromebook Plus (V2)
-
- nocturne - Pixel Slate
-
- orbatrix - Dell Chromebook 3400
-
- pantheon - Yoga C630 Chromebook
-
- phaser360 - Lenovo 300e/500e Chromebook 2nd Gen
-
- phaser - Lenovo 100e Chromebook 2nd Gen
-
- pyro - Lenovo Thinkpad 11e Chromebook (4th Gen)/Lenovo Thinkpad Yoga 11e
- Chromebook (4th Gen)
-
- rabbid - ASUS Chromebook C423
-
- robo360 - Lenovo 500e Chromebook
-
- robo - Lenovo 100e Chromebook
-
- sand - Chromebook 15 (CB515 - 1HT / 1H)
-
- santa - Acer Chromebook 11 (CB311 - 8H / 8HT)
-
- shyvana - ASUS Chromebook Flip C434
-
- sion - Acer Chromebox CXI3
-
- snappy - HP Chromebook x360 11 G1 EE
-
- sona - HP Chromebook x360 14
-
- soraka - HP Chromebook x2
-
- sparky360 - Acer Chromebook Spin 512(R851TN)
-
- sparky - Acer Chromebook 512(C851/C851T)
-
- syndra - HP Chromebook 15 G1
-
- teemo - ASUS Chromebox 3
-
- vayne - Dell Inspiron Chromebook 14 2-in-1 7486
-
- whitetip - CTL Chromebook J41 / J41T
-
- whitetip - PCmerge Chromebook AL116
-
- whitetip - Prowise Chromebook Eduline
-
- whitetip - Sector 5 E3 Chromebook
-
- whitetip - Viglen Chromebook 11C
-
- wukong - CTL Chromebox CBx1
-
- wukong - Promethean Chromebox
-
- wukong - ViewSonic NMP660 Chromebox
-
-# Q&A
-
-This section provides answers for situations we expect users to find themselves
-in.
-
-### I have been getting a notification saying "Internal security key requires reset". Is this related?
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/RgOXv39FQJIDYi_NyQ1d9O5h2VKRrely3La_jLnwuMi04RiTox9jTiqQSwzBm_PY8nGhG5ED8aJ6X1eQX0s56_9doQ6EIoqXl5BUiab1Dm8SuFxPJqTeOY_YPybM2fnYQ-sI4LOT"
-height=407 width=624>
-
-Yes. Chrome OS M76 shows a system notification on all devices that have the
-legacy built-in U2F authenticator feature enabled manually via
-[crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh).
-Note that the notification triggers on whether the feature is enabled,
-regardless of whether you have actually used the U2F authenticator with any
-services. If you have registered the built-in U2F authenticator with any
-services, please unregister as explained above.
-
-There's no good reason to continue using the legacy feature that was enabled via
-u2f_flags u2f or u2f_flags g2f, but users should switch to the improved
-implementation, which the "Reset" button on the notification will do for you
-without having to go through
-[crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh).
-
-### I can't live without the built-in U2F authenticator. What to do?
-
-The good news is that we have been working on an improved implementation of the
-built-in U2F authenticator feature for a while. This will not only be unaffected
-by the bug since it never generated signatures that have the vulnerability, but
-it also has other security improvements. In particular the improved
-implementation now respects user boundaries, i.e. each Chrome OS user has their
-own virtual instance of an U2F authenticator. Also, the underlying encryption
-keys get discarded when you go through powerwash, recovery, or switch to
-developer mode.
-
-The new implementation is still not officially launched, but can be tried out at
-this point. To enable, open
-[crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh) and
-type u2f_flags u2f,user_keys. Note that existing registrations with services
-(which you should have removed per the [advice
-above](/chromium-os/u2f-ecdsa-vulnerability#TOC-Just-tell-me-what-to-do-) on
-this page) will no longer work, so you need to re-register the built-in U2F
-authenticator with any services.
-
-### I have lost access to a service that had the built-in U2F authenticator configured as the only valid security key. Help!
-
-You can temporarily re-enable the legacy implementation of the built-in U2F
-authenticator by issuing the u2f_flags u2f in
-[crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh)
-(see also the [question on u2f_flags
-behavior](/chromium-os/u2f-ecdsa-vulnerability#TOC-How-do-the-various-u2f_flags-commands-in-crosh-affect-behavior-)).
-Your old registrations should now work again. After you regain access to the
-affected service, please turn the legacy U2F authenticator off again.
-
-### How do the various u2f_flags commands in [crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh) affect behavior?
-
-The u2f_flags command in
-[crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh)
-allows you to control the behavior of the built-in U2F authenticator as follows:
-
- u2f_flags u2f,user_keys
- The user_keys flag enables the improved built-in U2F authenticator
- implementation. Users who want to test-drive the feature and are aware of
- the risk of using beta quality features can use this.
-
- u2f_flags
- When invoked without a parameter, the command will turn of the built-in U2F
- authenticator feature.
-
- u2f_flags u2f
- u2f_flags g2f
- Enables legacy built-in U2F authenticator behavior. There is no reason to
- continue using this; enabling will trigger the "Internal security key
- requires reset" system notification. There is no good reason to continue
- using the legacy implementation at this point.
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/-FCWZDxNb0xWgVpTfpn1uNZyp0LPi_IFzIlW86Qp8RyuvEZE5Pc0DO-7HIt6yuc0MK3sEIyvGHiKldUccf94phWPPHcoa96cUegu1yf4nf5L6fQnZhI1yvqJ68IX_OEo2Rr8QpdV"
-height=523 width=624>
-
-Please be advised that the built-in U2F authenticator feature remains in beta
-status at this point, hence
-[crosh](https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh)
-still prints the warning message about the experimental nature of the feature
-and potential consequences. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/unchecked_tpm_reset/index.md b/chromium/docs/website/site/chromium-os/unchecked_tpm_reset/index.md
deleted file mode 100644
index f2d100b1133..00000000000
--- a/chromium/docs/website/site/chromium-os/unchecked_tpm_reset/index.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: unchecked_tpm_reset
-title: Privilege escalation via unchecked TPM reset
----
-
-Vulnerability description
-
-This vulnerability is caused by a hardware design problem specific to a small
-faction of device models resulting in the main CPU being able to trigger a reset
-of the TPM while the main CPU doesn't reset. This falls short of the design
-requirement that a TPM reset implies a reset of the main CPU as well. By
-interacting in a certain way with the power management circuitry, the main CPU
-can trigger a reset signal that will affect the TPM, but not the main CPU. After
-a reset, the TPM starts out in a state where the main CPU can access a lot more
-things in the TPM. The usual boot flow locks down the TPM as we progress through
-the boot flow. However, since the reset took place while the OS is already
-booted, the TPM is left in the state that allows access to privileged data and
-commands which is intended to only be accessible to the firmware.
-
-The vulnerability allows attackers with root privileges to trigger a TPM reset.
-Afterwards, the following TPM functionality is available to the attacker:
-
- TPM physical presence - a special privileged mode to access the TPM that is
- intended for firmware use only. Allows access commands that are normally not
- accessible to the OS, or only accessible with TPM owner authorization.
-
- Platform Configuration Registers (PCR) reset to their initial state. These
- TPM hardware registers reflect the state of the system (e.g. boot mode:
- verified or developer) and can now be updated maliciously to claim an
- incorrect state that does not reflect the actual state.
-
-# Impact
-
-The following Chrome OS security features are affected by the bug:
-
- Rollback protection for the firmware and kernel.
-
- Remote attestation aka "Verified Access" statements regarding boot mode are
- no longer trustworthy.
-
- Device-wide disk encryption secrets can leak across normal mode / developer
- mode transitions.
-
- Devices may be forced into developer mode without explicit user consent.
-
- Lockbox / installation-time attributes lose their intended write-once
- property. Decisions that are supposed to be irreversible after initial
- device setup can be tampered with (most prominently, enterprise vs. consumer
- device mode).
-
-Note that the bug only affects the TPM's operational state and it specifically
-does not lead to compromise of secrets held by the TPM. Specifically, encrypted
-user data or TPM-backed encryption keys are not at risk.
-
-# Affected Versions
-
-Chrome OS version 67 rolls out a firmware update (including a firmware version
-bump to prevent downgrade to vulnerable firmware versions) that includes the
-firmware mitigation described below.
-
-Newly-produced devices incorporate a hardware change that further inhibits the
-ability for the TPM to get reset in isolation at the electrical level.
-
-# Affected Devices
-
-The vast majority of Chrome OS devices deployed in the field are unaffected.
-Only the following device models are affected (code names and product names):
-
- elm - "Acer Chromebook R13 (CB5-312T)"
-
- hana - "Lenovo 300e/N23 Yoga/Flex 11 Chromebook"
-
- hana - "Poin2 Chromebook 11C"
-
- hana - "Poin2 Chromebook 14"
-
-Only elm and hana devices with Board IDs less than 5 is affected. The Board ID
-of a device can be determined by checking the bios_info section displayed on
-chrome://system.
-
-# Mitigations
-
-## Firmware
-
-Via updated firmware, Chrome OS now blocks access to the offending parts of the
-power management controller from the operating system. This prevents the OS from
-triggering a TPM reset and thus fixes the problem.
-
-## Hardware
-
-As a defense-in-depth hardening measure, the schematics of the affected devices
-have been changed to generate the TPM reset signal in a way that won't be
-affected by the problematic power management controller interactions.
-Newly-produced devices contain these changes. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/Concept.jpg.sha1 b/chromium/docs/website/site/chromium-os/user-experience/Concept.jpg.sha1
deleted file mode 100644
index 9bc05717849..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/Concept.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-499a5f05f0333ac9cbfc3ace51148d0f096bc8a6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/Concept2.jpg.sha1 b/chromium/docs/website/site/chromium-os/user-experience/Concept2.jpg.sha1
deleted file mode 100644
index 363ae14920f..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/Concept2.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f0c3c2e2a3f1b5db8e604cd7d1b5dae3aba052ec \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/access-points/apppng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/access-points/apppng.sha1
deleted file mode 100644
index e3951b89a3c..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/access-points/apppng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-67160421db0fc2d3f46fd88353c88eeac314ff35 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/access-points/index.md b/chromium/docs/website/site/chromium-os/user-experience/access-points/index.md
deleted file mode 100644
index 89483973243..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/access-points/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: access-points
-title: Access Points
----
-
-**UI under development. Designs are subject to change.**
-
-<img alt="image" src="/chromium-os/user-experience/access-points/apppng">
-
-The apps menu is the primary access point in Chromium OS. It is available via an
-icon in the upper left, and provides access to universal search, document and
-tab creation, bookmarks, and other OS tools. Its primary functions may include:
-
-* Search Box
-* Tab creation
-* Document Templates
-* New Tab / Window
-* Bookmarks
-* History
-* Downloads
-* Options
-* Notifications
-* Sign out / Shut down
-
-We are exploring a variety of different form factors for this access point:
-standard pull down menus, a full-screen tab, and partial-screen overlays. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/ajpg.sha1 b/chromium/docs/website/site/chromium-os/user-experience/ajpg.sha1
deleted file mode 100644
index a502b7c5813..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/ajpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-967cef82da8cb6ad184715867878f309d0e713a7 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/bjpg.sha1 b/chromium/docs/website/site/chromium-os/user-experience/bjpg.sha1
deleted file mode 100644
index c74f46155ea..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/bjpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0e36bbdbc02bb65fa9f54232e3f37c158baf3a68 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/cjpg.sha1 b/chromium/docs/website/site/chromium-os/user-experience/cjpg.sha1
deleted file mode 100644
index f18282d9b1f..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/cjpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0b8da71a5994de4079a12ebcef2560ac2cb9820d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel1.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel1.png.sha1
deleted file mode 100644
index 0451d5bae13..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-10db9fec1ab070736bfe31077b78cacb57d428ec \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png.sha1
deleted file mode 100644
index a9ad6af8b3b..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a82e157f7a95ff6f2f0fd16cbc935e5c014cb711 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/content-browser/Full.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/content-browser/Full.png.sha1
deleted file mode 100644
index 9dc579ad0cd..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/content-browser/Full.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-19f105c4be7aee76256daf1d6da02ba96ed02f69 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/content-browser/index.md b/chromium/docs/website/site/chromium-os/user-experience/content-browser/index.md
deleted file mode 100644
index 8556efb0c93..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/content-browser/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: content-browser
-title: Content Browser
----
-
-********UI under development. Designs are subject to change.********
-
-******<img alt="image"
-src="/chromium-os/user-experience/content-browser/ContentBrowserPanel1.png">Application
-type:** Panel/Tab****
-
-****Description:****
-
-The content browser is a simple hierarchical file browser. Specifically, it is
-an enhanced version of file:// rendering that allows easier navigation.
-
-Functionality:
-
-* Read only access
-* Attach to email
-* Pop-out for media content
-* File actions menu
-
-Future goals
-
-* Offline access to sync'd content
-* Browsing external file:// and smb:// resources
-* Read/Write access
-* Integration with open/save dialog
-
-Related: [Shelf](/chromium-os/user-experience/shelf) |
-[Open/Save](/chromium-os/user-experience/opensave-dialogs)
-
-Panel Style (with menu)
-
-The pop out menu allows a variety of file manipulation and upload actions.
-
-> [<img alt="image"
-> src="/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png">](/chromium-os/user-experience/content-browser/ContentBrowserPanel2.png)
-
-**Tab Style (for future versions)**
-
-The full tab view of the content browser will show the files in a columnar
-hierarchy. These columns can be popped out into panels.
-
-**[<img alt="image"
-src="/chromium-os/user-experience/content-browser/Full.png">](/chromium-os/user-experience/content-browser/Full.png)** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/djpg.sha1 b/chromium/docs/website/site/chromium-os/user-experience/djpg.sha1
deleted file mode 100644
index e76b102334a..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/djpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-45804ba5fc3ef4fd154197a264ed2f86b0089e45 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Desktop.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/Desktop.png.sha1
deleted file mode 100644
index 3f66876a594..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Desktop.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7af51b717158e3bcaf0b071577adb146f6b7c36e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Display.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/Display.png.sha1
deleted file mode 100644
index 4030633add8..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Display.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9b0e51152852ba118525e034e7bc48abfa80fa4b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Form Factors.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/Form Factors.png.sha1
deleted file mode 100644
index 06cf66d9174..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Form Factors.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fd5308ef0ca5aa93a4b90b099ea7bfd783a21bb6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Tablet.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/Tablet.png.sha1
deleted file mode 100644
index 0a505345e81..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/Tablet.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-137a67d365c22bdfa1d9a28b057c3e07af540e19 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/index.md b/chromium/docs/website/site/chromium-os/user-experience/form-factors/index.md
deleted file mode 100644
index 82ce6224752..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: form-factors
-title: Form Factors Exploration
----
-
-**This is a concept UI under development. Designs are subject to change.**
-
-While its primary focus is netbooks, Chrome OS could eventually scale to a wide
-variety of devices. Each would have vastly different input methods, available
-screen space, and processing power. Below is an illustration of the forms we are
-considering along with notes for each:
-
-<img alt="image"
-src="/chromium-os/user-experience/form-factors/Form%20Factors.png">
-
-> [<img alt="image"
-> src="/chromium-os/user-experience/form-factors/netbook.png">](/chromium-os/user-experience/form-factors/netbook.png)
-
-> Netbook 10-12"
-
-> Because of their small screen resolution, the netbook ui is tailored to one
-> web page on the screen at a time. Interaction is primarily via mouse and
-> keyboard, and the UI is adapted to this, with primary targets distributed
-> along the screen edges. Panels would dock against the bottom of the screen and
-> could be moved to the sides as well.
-
- * Full Screen, Compact/Classic/Sidebar UI
- * Omnibox may autohide on devices with limited vertical height
- * Docking panels
- * Tabs and Windows
-
-> [<img alt="image"
-> src="/chromium-os/user-experience/form-factors/Tablet.png">](/chromium-os/user-experience/form-factors/Tablet.png)
-
-> Tablet 5-10"
-
-> On tablets, the UI would be adjusted to handle larger touch targets. Initial
-> explorations have maintained the same basic chrome layout, but enlarged the
-> controls. Icons could be placed above tabs to provide larger, square targets.
-> Panels would be placed along the bottom edge and could be opened with upward
-> dragging motions.
-
- * Full screen, [Touch
- UI](/chromium-os/user-experience/window-ui#TOC-Touchscreen-navigation)
- * Docking panels
- * Touch panel UI
- * Tabs only
- * [High-res display](/user-experience/resolution-independence)
- * [Visual
- explorations](/chromium-os/user-experience/form-factors/tablet)
-
-> [<img alt="image"
-> src="/chromium-os/user-experience/form-factors/laptop.png">](/chromium-os/user-experience/form-factors/laptop.png)
-
-> Laptop 15-17"
-
-> On laptop-sized devices, full screen mode is not suitable for most web pages.
-> At this point we would re-introduce multiple windows on screen, using either
-> overlapping or tiling windowing systems. Panels would now be able to dock to
-> edges *or* float freely on the screen.
-
- * Windowed, Classic UI
- * Overlapping or tiled window management
- * Floating or docking panels
-
-> [<img alt="image"
-> src="/chromium-os/user-experience/form-factors/Desktop.png">](/chromium-os/user-experience/form-factors/Desktop.png)
-
-> Desktop 24-30"
-
-> The desktop UI is similar to the laptop UI, but benefits more from freely
-> positioned windows and access points near the cursor. Other potential
-> enhancements include magnetic windows/panels that can be moved around with
-> each other to create workspaces.
-
- * Windowed, Classic UI
- * Overlapping window management
- * Floating or docking panels
-
-> [<img alt="image"
-> src="/chromium-os/user-experience/form-factors/Display.png">](/chromium-os/user-experience/form-factors/Display.png)
-
-> Display 40-60"
-
-> On large displays or projector screens, the design needs are very similar to
-> those of the netbook: full screen content, autohiding chrome, large targets.
-> Complex window management is even less important, and it may be sufficient to
-> have no windows, only zoomable tabs.
-
- * Full screen display
- * Auto-hiding Omnibox
- * Docking panels
- * Split screen
- * Tabs only \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/laptop.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/laptop.png.sha1
deleted file mode 100644
index 14b9a700363..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/laptop.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a3c8f233ca659f45c79969f2599381839eacf0d9 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/netbook.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/netbook.png.sha1
deleted file mode 100644
index 7ed538fa7d0..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/netbook.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-387b8786a30a78e5371a21d5dd414cae61fcdd9f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/Tablet.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/Tablet.png.sha1
deleted file mode 100644
index 481cc3687a3..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/Tablet.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5bf21a8615a5717d54fcc0d22e2a3c64d151128c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/index.md b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/index.md
deleted file mode 100644
index 841f00addfe..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/index.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-- - /chromium-os/user-experience/form-factors
- - Form Factors Exploration
-page_name: tablet
-title: Tablet
----
-
-**This is a concept UI under development. Designs are subject to change.**
-
-This page contains visual explorations of how a Chrome OS tablet UI might look
-in hardware. Some possibilites they explore include:
-
-[<img alt="image"
-src="/chromium-os/user-experience/form-factors/tablet/Tablet.png">](/chromium-os/user-experience/form-factors/tablet/Tablet.png)
-
-* Keyboard interaction with the screen: anchored, split, attached to
- focus.
-* Launchers as an overlay, providing touch or search as means to
- access web sites.
-* Contextual actions triggered via dwell.
-* Zooming UI for multiple tabs
-* Tabs presented along the side of the screen (see [Side
- tabs](http://www.chromium.org/chromium-os/user-experience/window-ui))
-* Creating multiple browsers on screen using a launcher
-
-## UI Concepts
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/tablet2.100.png">](/chromium-os/user-experience/form-factors/tablet/tablet2.100.png)
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/tablet2.105.png">](/chromium-os/user-experience/form-factors/tablet/tablet2.105.png)
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/tablet2.106.png">](/chromium-os/user-experience/form-factors/tablet/tablet2.106.png)
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/tablet2.107.png">](/chromium-os/user-experience/form-factors/tablet/tablet2.107.png)
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/tablet2.108.png">](/chromium-os/user-experience/form-factors/tablet/tablet2.108.png)
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/tablet2.141.png">](/chromium-os/user-experience/form-factors/tablet/tablet2.141.png)
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/tablet2.150.png">](/chromium-os/user-experience/form-factors/tablet/tablet2.150.png)
-
-Video Concepts
-
-> > [<img alt="image"
-> > src="/chromium-os/user-experience/form-factors/tablet/video_still.png">](/chromium-os/user-experience/form-factors/tablet/tablet_concept.mp4)
-
-> > Please see attached video at the bottom of this page. \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.100.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.100.png.sha1
deleted file mode 100644
index c599aa8f571..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.100.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-84e925c4032640e5244c38c40455a0df4016df8d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.105.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.105.png.sha1
deleted file mode 100644
index b5e5dc8286d..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.105.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d6361461c93b27436c617f09fe84ecccc20c6e84 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.106.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.106.png.sha1
deleted file mode 100644
index 04bff344de1..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.106.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a1c5c0cb685d15190655489655432592c1da3c8d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.107.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.107.png.sha1
deleted file mode 100644
index 4bbed3874bd..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.107.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-00566310f1ae358033844e690b0e75db02b0aa36 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.108.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.108.png.sha1
deleted file mode 100644
index 9e8c7049695..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.108.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4896d51c53aa76ffecd5cceb41fdf8152fada92d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.109.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.109.png.sha1
deleted file mode 100644
index 45bb0bcf0a9..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.109.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b638b967e56b8c3c92de20f227fa61d68ad55b19 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.141.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.141.png.sha1
deleted file mode 100644
index 57e7cacc8c3..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.141.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-567ebbb55bcc48e9c004ecf8c32817bef12861cb \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.150.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.150.png.sha1
deleted file mode 100644
index 5994afb89a5..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet2.150.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-12af70979a017ded6f1f378552284578aa4a3a5f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet_concept.mp4.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet_concept.mp4.sha1
deleted file mode 100644
index 46604ed578c..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/tablet_concept.mp4.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0b81d92f7d0b4f8eefc482ab2731d7bb27099c85 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/video_still.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/video_still.png.sha1
deleted file mode 100644
index 652dde1a183..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/form-factors/tablet/video_still.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-40e8396ee5f4ebd89ca08b47c17ec6b6460bcec6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/index.md b/chromium/docs/website/site/chromium-os/user-experience/index.md
deleted file mode 100644
index 16607624f92..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: user-experience
-title: User Experience
----
-
-Please visit <http://chromium.org/user-experience> for more information \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Open.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Open.png.sha1
deleted file mode 100644
index 6e72f2e5148..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Open.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0a100093c013eab30528be2deda44a5d551f34e5 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Save.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Save.png.sha1
deleted file mode 100644
index e718c05acb2..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/Save.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7ffec7c6fc8572c3cea3da889ec9cfa4d2e547b8 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/index.md b/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/index.md
deleted file mode 100644
index 00d788735f8..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/opensave-dialogs/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: opensave-dialogs
-title: Open/Save Dialogs
----
-
-******UI under development. Designs are subject to change.******
-
-********Application type:** Sheet/Dialog******
-
-**Description:** Allows a location to be specified for a download action. This
-defaults to the shelf, but a modifier or contextual menu can be used to choose
-an alternate location.
-
-**Functionality:**
-
-* **Shows the same sources as the [content
- browser](/chromium-os/user-experience/content-browser)**
-* **Surfaces [shelf](/chromium-os/user-experience/shelf) as a source**
-* **Could be floating, or attached to tab bar**
-
-### Open
-
-### <img alt="image" src="/chromium-os/user-experience/opensave-dialogs/Open.png">
-
-### Save
-
-* Adds a text field for name
-* Shows the to-be-created file
-* We should start downloading to get the preferred name headers and
- resolve all redirects
-
-[<img alt="image"
-src="/chromium-os/user-experience/opensave-dialogs/Save.png">](/chromium-os/user-experience/opensave-dialogs/Save.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/panels/Chrome-OS-Panels.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/panels/Chrome-OS-Panels.png.sha1
deleted file mode 100644
index 2ce79834736..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/panels/Chrome-OS-Panels.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f7bfd3c150972eb0f4789d1b3fcc3dd299d0fe4d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/panels/index.md b/chromium/docs/website/site/chromium-os/user-experience/panels/index.md
deleted file mode 100644
index eaba22cf1a7..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/panels/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: panels
-title: Panels
----
-
-**UI under development. Designs are subject to change.**
-
-[<img alt="image" src="/chromium-os/user-experience/panels/Chrome-OS-Panels.png"
-height=189 width=400>](/chromium-os/user-experience/panels/Chrome-OS-Panels.png)
-
-Panels in Chromium OS are used as containers that allow a user to multitask
-without leaving the view of their current application. For example, with a music
-player and chat in panels, a user can control the playback of their music and
-chat with a friend while watching a video or reading a long document in their
-main view.
-
-Window manager interactions
-
-Panels are always-on-top, and are not attached to a specific window. New panels
-open to the left of existing panels.
-
-Open behavior
-
-Panels are minimized and maximized by clicking on their titlebar. When
-minimized, a panel is shifted so that only a few pixels of its titlebar are
-visible on-screen (this is the 'minimized' state).
-
-When the user's mouse hits the bottom edge of the screen, any minimized panels
-slide up to reveal the text in their titlebars (this is the 'peeking' state).
-Clicking on these titlebars will restore the panel to its original size.
-
-If a panel is restored with the mouse cursor at the bottom edge of the screen, a
-widget will appear under the user's mouse cursor that will minimize the panel
-when clicked. The widget disappears as soon as the user's mouse moves away from
-the edge. This allows users to quickly open and close panels.
-
-<img alt="image" src="/chromium-os/user-experience/panels/windowstylespng">
-
-Notifications
-
-If a panel is minimized when its title changes, it bounces up to its 'peeking'
-state and potentially flashes its background. This allows for a lightweight
-alert system without having fullsize panels onscreen.
-
-Auto-arrange
-
-Panels are right-aligned, and automatically arrange themselves in order to not
-overlap. If a user drags a panel to the left away from the main group of panels,
-it is pushed to the left of all auto-arranged panels until the user explicitly
-reorders it into the auto arranged set. It will attempt to hold the defined
-position until it is pushed out of the way.
-
-Large panels
-
-In the case where a panel's width exceeds some predetermined max-width value
-('X'), the panel is auto-arranged as if it is has width of 'X'. The contents of
-the panel are displayed above or below other panels in MRU order, relying on the
-user to open and minimize the panels as they see fit.
-
-Overflow
-
-Multiple options exist for overflow (which is to say that we haven't decided
-yet):
-
-* Only show as many panels that fit - others fall off the screen and
- are inaccessible until the onscreen panels are closed.
-* Horizontal scrolling
-* Add a widget to the left side that contains the overflowed items.
-
-Sidebar
-
-Panels can be dragged to sidebars on the left or right of the screen.
-
-Experiments / Controversial features
-
-* Ability to detach panels to regular floating 'always on top' windows
- on ChromeOS.
-* Pro: more flexible
-* Con: lets users be in a bad state
-* Bottom-edge click to dismiss.
-* Pro: easier to minimize panels
-* Con: harder to focus bottom-edge panel content (e.g. chatbox)
-
-**Visual Spec**
-
-**[<img alt="image" src="/chromium-os/user-experience/panels/panel-spec.png"
-height=274 width=400>](/chromium-os/user-experience/panels/panel-spec.png)**
-
-**Themes**
-
-**Themes will not apply to panels.** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/panels/panel-spec.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/panels/panel-spec.png.sha1
deleted file mode 100644
index a1dd72cab94..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/panels/panel-spec.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-815ca07cda5d91e339ba9fd47979da8444d35a7f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/panels/panelspng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/panels/panelspng.sha1
deleted file mode 100644
index 2492550b139..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/panels/panelspng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d08605d53fbae16be85cd4e10dcb0d466d75e912 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/panels/windowstylespng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/panels/windowstylespng.sha1
deleted file mode 100644
index 420a5320fb3..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/panels/windowstylespng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1c39de890a4956ff64932e4e4eb68a0f136e0878 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/sdres_0000_Basic.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/sdres_0000_Basic.png.sha1
deleted file mode 100644
index 321d863a2fd..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/sdres_0000_Basic.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6c3f1fb75532b5081c748f2d4a4a2cdbc97c52c3 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/sdres_0001_App-Menu.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/sdres_0001_App-Menu.png.sha1
deleted file mode 100644
index b94db29cc23..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/sdres_0001_App-Menu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8fff5d5ef70e672266cad65e4007c987765e9aa6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/sdres_0002_Panels.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/sdres_0002_Panels.png.sha1
deleted file mode 100644
index 01015a1833f..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/sdres_0002_Panels.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7b8396c77e87ecf0dcfd3e1d2bfc53eb1efc46e2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/settings/1-General.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/settings/1-General.png.sha1
deleted file mode 100644
index 85eb6177c35..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/settings/1-General.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7e26ab02956a30ec2a8ebc5d33e85cbfa7d78d0e \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/settings/2-Internet.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/settings/2-Internet.png.sha1
deleted file mode 100644
index 1b14446ab2e..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/settings/2-Internet.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d60c74e6ab453e3b3a8808d97284b6eec2bd2fa9 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/settings/3-Browser.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/settings/3-Browser.png.sha1
deleted file mode 100644
index 24a80327ad1..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/settings/3-Browser.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2beb4d101dd73d911425ac5cbe95d7380cf2caf2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/settings/4-PersonalStuff.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/settings/4-PersonalStuff.png.sha1
deleted file mode 100644
index d9c0c8b5bd9..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/settings/4-PersonalStuff.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4fdb579cf1c33db629948023c6c723f43efb8c80 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/settings/5-UnderTheHood.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/settings/5-UnderTheHood.png.sha1
deleted file mode 100644
index 583bdf8f166..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/settings/5-UnderTheHood.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2a5eedaa7b2379a1b0853c6c6fd9f93503d19144 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/settings/index.md b/chromium/docs/website/site/chromium-os/user-experience/settings/index.md
deleted file mode 100644
index 0fc968ad252..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/settings/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: settings
-title: Settings
----
-
-**UI under development. Designs are subject to change.**
-
-[TOC]
-
-Chrome OS settings extend the standard chrome settings with new system and
-network tabs.
-
-### System
-
-Provides access to most general settings from input devices to displays and
-sound.
-
-[<img alt="image" src="/chromium-os/user-experience/settings/1-General.png"
-height=250 width=400>](/chromium-os/user-experience/settings/1-General.png)
-
-### Network
-
-Network settings has a basic top level ui for the interface types, with options
-dialogs that provide deeper customization
-
-[<img alt="image" src="/chromium-os/user-experience/settings/2-Internet.png"
-height=250 width=400>](/chromium-os/user-experience/settings/2-Internet.png)
-
-### Browser
-
-As in Chrome
-
-[<img alt="image" src="/chromium-os/user-experience/settings/3-Browser.png"
-height=250 width=400>](/chromium-os/user-experience/settings/3-Browser.png)
-
-### Personal Stuff
-
-As in Chrome
-
-[<img alt="image"
-src="/chromium-os/user-experience/settings/4-PersonalStuff.png" height=250
-width=400>](/chromium-os/user-experience/settings/4-PersonalStuff.png)
-
-### Under the Hood
-
-As in Chrome
-
-[<img alt="image" src="/chromium-os/user-experience/settings/5-UnderTheHood.png"
-height=250 width=400>](/chromium-os/user-experience/settings/5-UnderTheHood.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/shelf/Shelf.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/shelf/Shelf.png.sha1
deleted file mode 100644
index 641a7802f82..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/shelf/Shelf.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5e3a38705ad6ccd8988b4c8c68a5a5cb7d8a0a7c \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/shelf/index.md b/chromium/docs/website/site/chromium-os/user-experience/shelf/index.md
deleted file mode 100644
index ad0c3fa5f53..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/shelf/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: shelf
-title: Shelf
----
-
-******UI under development. Designs are subject to change.******
-
-****<img alt="image"
-src="/chromium-os/user-experience/shelf/Shelf.png">Application type:** Panel**
-
-**Description:**
-
-The shelf is an on demand target for downloading and uploading. It acts as a
-temporary resting place for files that have been accessed, and for content being
-uploaded to websites. It uses the same display format as the [content
-browser](/chromium-os/user-experience/content-browser) and has similar actions
-available.
-
-Functionality:
-
-* Surfaces as a source in [open/save dialog
- boxes](/chromium-os/user-experience/opensave-dialogs)
-* Surfaces as a source in [content
- browser](/chromium-os/user-experience/content-browser)
-* Appears when content is dragged into the panel bar
-* Allows simple actions to be initiated from each item
-* Replaces the standard download shelf in Chrome.
-* Back button goes up to show other sources
-
-Future goals
-
-* Sync to cloud \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/NetworkMenu.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/NetworkMenu.png.sha1
deleted file mode 100644
index 0fed1272b14..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/NetworkMenu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b5a0568ae9dbb1c724874dd702ae61cacb3ca224 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/Screen shot 2009-12-01 at 12.23.56 PM.PNG.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/Screen shot 2009-12-01 at 12.23.56 PM.PNG.png.sha1
deleted file mode 100644
index 6c8315583e7..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/Screen shot 2009-12-01 at 12.23.56 PM.PNG.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5b773ca575edfc67ace44ccdb7c710367997c8b2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/index.md b/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/index.md
deleted file mode 100644
index 28a3655b2dd..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/system-status-icons/index.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: system-status-icons
-title: System Status Icons
----
-
-****UI under development. Designs are subject to change.****
-
-**[<img alt="image"
-src="/chromium-os/user-experience/system-status-icons/Screen%20shot%202009-12-01%20at%2012.23.56%20PM.PNG.png">](/chromium-os/user-experience/system-status-icons/Screen%20shot%202009-12-01%20at%2012.23.56%20PM.PNG.png)**
-
-******Power******
-
-****Displays battery/charging status****
-
-**Network**
-
-Displays active network interface/status. Combines wireless/wired/cellular
-connections. Provides access to network
-[settings](/chromium-os/user-experience/settings)
-
-[<img alt="image"
-src="/chromium-os/user-experience/system-status-icons/NetworkMenu.png">](/chromium-os/user-experience/system-status-icons/NetworkMenu.png)
-
-**Time**
-
-Displays the time in 12/24 hour formats. May provide access to a clock app.
-
-**Input Method**
-
-See [Design Doc](/chromium-os/chromiumos-design-docs/text-input)
-
-**Audio Muted**
-
-TBD
-
-**Alarm Enabled**
-
-TBD \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/tab-ui/index.md b/chromium/docs/website/site/chromium-os/user-experience/tab-ui/index.md
deleted file mode 100644
index 56d6108d652..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/tab-ui/index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: tab-ui
-title: Pinned Tabs
----
-
-****UI under development. Designs are subject to change.****
-
-**### ****<img alt="image"
-src="/chromium-os/user-experience/tab-ui/tab_stripspng">******
-
-**Many users of existing browsers keep their 'primary' tabs to the left of their
-tab-strip. This allows easy access to commonly used applications that users keep
-open all the time. Others use bookmarks to quickly access their favorite apps
-without leaving them open, though bookmarks will replace their current window
-which may be undesirable.**
-
-**Pinned tabs are an acknowledgement of both of these behaviors:**
-
-* **Any tab can be converted into a 'pinned tab' where it shrinks to
- the size of its favicon, and remains locked to the left of the
- tab-strip**
-* **Any external link opened from a pinned tab will be opened outside
- of the group of pinned tabs, ensuring that the group remains
- consistently accessible**
-* Applications open with the pinned tabs automatically, and pinned
- tabs are removed when they are closed
-
-**Pinned tabs remain available across sessions, allowing users to always access
-their favorite apps from a consistent location. Pinned tabs can be created via
-contextual menu, dragging a tab to the pinned area, or opening an application.** \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/tab-ui/tab_stripspng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/tab-ui/tab_stripspng.sha1
deleted file mode 100644
index df95d6d5b46..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/tab-ui/tab_stripspng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e83783717d9e2491e6ebd4126f679512dafdb1e2 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/video_placeholderpng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/video_placeholderpng.sha1
deleted file mode 100644
index 76c340a01c3..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/video_placeholderpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fc5b1aa84073950caba7b40c4e4ca11ca84c823f \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png.sha1
deleted file mode 100644
index 6cb6e0ff156..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8f6f65632715439008c79ea34c5026e367a30620 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.app.1.0.0.zip.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.app.1.0.0.zip.sha1
deleted file mode 100644
index 4ada78b1800..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.app.1.0.0.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-554cdf83836efb8c34e27ba2c19b170585bade1a \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.png.sha1
deleted file mode 100644
index db279ed7833..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-management/Overview.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3e91da1f6495d0f2e40a62786262fca96c529b7b \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-management/OverviewSketch.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-management/OverviewSketch.png.sha1
deleted file mode 100644
index e2205531301..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-management/OverviewSketch.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ff1e63725f63d27456695905e415235bbb34f0c9 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-management/index.md b/chromium/docs/website/site/chromium-os/user-experience/window-management/index.md
deleted file mode 100644
index a954aa91790..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-management/index.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: window-management
-title: Window Management / Overview
----
-
-******UI under development. Designs are subject to change.******
-
-### In full screen mode, multiple windows are supported by hotkeys and swiping [gestures](https://sites.google.com/a/google.com/chromeos/for-team-members/user-experience/multitouch) to switch back and forth. Users can jump from tab to tab or from window to window. Alternatively, the Overview allows visual tab switching.
-
-[<img alt="image"
-src="/chromium-os/user-experience/window-management/OverviewSketch.png">](/chromium-os/user-experience/window-management/OverviewSketch.png)
-
-### The overview
-
-The overview is available via either gesture and hotkey. It provides a visual
-way of switching between windows and tabs.
-
-Windows are exploded into the tabs they contain, and all tabs/windows are
-visible in a single 2.5d space. We are exploring a variety of different display
-techniques, one illustrated below.
-
-[<img alt="image"
-src="/chromium-os/user-experience/window-management/Overview.png"
-width=600>](/chromium-os/user-experience/window-management/Overview.png)
-
-This model is largely based on Peter Jin Hong & Elin Pedersen's G.L.I.D.E. Tab
-Navigation (
-[mocks](http://www.flickr.com/photos/peterheads/sets/72157620266552714/show/with/3651412293/)
-| [video](http://www.youtube.com/watch?v=kTXvNdiP-rE) ). We present tabs in a
-venetian blind arrangement, ensuring visibility of the top left of every page,
-and using perspective to compress the most useful portions of the page into the
-available strips. Favicons are presented as an alternative visual aid.
-
-To sample window motion, try the
-[prototype](/chromium-os/user-experience/window-management/Overview.app.1.0.0.zip)
-(Requires Mac OS X 10.5+ / Safari 4).
-
-### Tab switching overlay
-
-A lightweight version of this may be available for quick alt-tab switching. This
-would be sorted by most recently used (versus the ordered, ctrl-tab switcher)
-and would potentially include recently closed items from history. When
-switching, the contents in the background would swap to match the currently
-selected thumbnail/icon.
-
-[<img alt="image"
-src="/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png"
-width=600>](/chromium-os/user-experience/window-management/Chrome-OS-Overlay.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchNav.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchNav.png.sha1
deleted file mode 100644
index 805ffe05468..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchNav.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-870e6d2b675bda9da0f4362bc66e9f3c64fef904 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchUI.png.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchUI.png.sha1
deleted file mode 100644
index 32404fffde0..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-ui/TouchUI.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5bde4e4d8f76572db119705495f17f7deddf3949 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-ui/compact_navpng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-ui/compact_navpng.sha1
deleted file mode 100644
index df9da698919..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-ui/compact_navpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ae14c24a744bee05cbe0622d3d8591baac33f39d \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-ui/index.md b/chromium/docs/website/site/chromium-os/user-experience/window-ui/index.md
deleted file mode 100644
index 34fc5be118f..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-ui/index.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/user-experience
- - User Experience
-page_name: window-ui
-title: Window UI Variants
----
-
-******UI under development. Designs are subject to change.******
-
-While working on the UI for Chromium OS, we explored three basic structures for
-our main interface: Classic, Compact, and Sidetab.
-
-Each have their own strengths and weaknesses, and while we are still interested
-in the variations, our current builds are focused on classic and compact
-navigation styles.
-
-**---**
-
-#### **<img alt="image" src="/chromium-os/user-experience/window-ui/navpng">Classic navigation**
-
-The most basic navigation style is that of a single maximized Chromium window.
-This is the equivalent of the Chromium browser windowing UI in maximized mode.
-
-Strengths
-
-* Similarity to Chromium-based browsers
-
-Weaknesses
-
-* Address bar is visually scoped to tab; using it to swap tabs and
- launch new tabs makes less sense
-* Address bar is used to show the URL; it is less clear where to
- search from
-
----
-
-### **#### ****<img alt="image"
-src="/chromium-os/user-experience/window-ui/compact_navpng">******
-
-### **#### **Compact navigation****
-
-### If we take the address bar out of the tab, it can be used as both a launcher
-and switcher; the user doesn't have to worry about replacing their active tab.
-The current url shows while a site is loading, and can be edited or changed by
-clicking on the tab.
-
-Strengths
-
-* Saves vertical real estate for the content area
-* Search can be used as launcher and switcher
-* Flexible for larger screens. Users can quickly toggle between this
- and classic navigation
-* Apps can provide a better experience with full control of their
- content area
-
-Weaknesses
-
-* Current URL is not always visible
-* Navigation controls and menus are not located within the tab and
- lose context sensitivity
-* Crowded tab-strip
-
-### ---
-
-### <img alt="image" src="/chromium-os/user-experience/window-ui/side_navpng">
-
-### #### Sidetab navigation
-
-### By moving the tab-strip to the side, we gain a huge amount of real estate
-for tabs. The vertical alignment also allows for date ordering and grouping of
-tabs. By moving the address bar out of the tab and above the strip, it can be
-used both for navigation as well as search.
-
-### Strengths
-
-* Saves vertical real estate for the content area
-* Allows for a large number of tabs
-* Allows fire-and-forget tab creation
-
-Weaknesses
-
-* Wasted space for users with few tabs
-* Superb for full-screen on devices ~1366px wide, but wasteful on
- larger or smaller displays
-* No clear relationship with Chromium browsers
-
----
-
-### <img alt="image" src="/chromium-os/user-experience/window-ui/TouchUI.png">
-
-### #### Touchscreen navigation
-
-### For touch screens, we provide much larger tab and toolbar targets than on
-standard chrome. This UI takes up more screen space, but is ideal for portrait
-devices, and can be autohidden to have full-screen content. This treatment could
-be used on any edge of the screen, and it may be preferable to use the bottom
-edge depending on the device.
-
-### Strengths
-
-* Large, square targets for navigation.
- [example](/chromium-os/user-experience/window-ui/TouchNav.png)
-* Supports quick navigation between a few common apps
-
-Weaknesses
-
-* Wasted vertical space
-* Extremely short app/site titles \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-ui/navpng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-ui/navpng.sha1
deleted file mode 100644
index 4a0ac455a08..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-ui/navpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-00f59b7b3138513be556ba97932d7dfa7f3bd824 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/user-experience/window-ui/side_navpng.sha1 b/chromium/docs/website/site/chromium-os/user-experience/window-ui/side_navpng.sha1
deleted file mode 100644
index 6d3ac153366..00000000000
--- a/chromium/docs/website/site/chromium-os/user-experience/window-ui/side_navpng.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3935ce760cce708cd011899afaae57219e32e740 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-os/usi-enabled-devices/OWNERS b/chromium/docs/website/site/chromium-os/usi-enabled-devices/OWNERS
deleted file mode 100644
index 268389d51a0..00000000000
--- a/chromium/docs/website/site/chromium-os/usi-enabled-devices/OWNERS
+++ /dev/null
@@ -1,5 +0,0 @@
-graceq@chromium.org
-hadih@google.com
-jora@google.com
-kenalba@google.com
-seobrien@chromium.org
diff --git a/chromium/docs/website/site/chromium-os/usi-enabled-devices/index.md b/chromium/docs/website/site/chromium-os/usi-enabled-devices/index.md
deleted file mode 100644
index 13cac18ad07..00000000000
--- a/chromium/docs/website/site/chromium-os/usi-enabled-devices/index.md
+++ /dev/null
@@ -1,201 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: usi-enabled-devices
-title: USI Capable Devices
----
-
-*Last update: 1 February 2022*
-
-<table>
-<tr>
-<td>Acer Chromebook Spin 314 (CP314-1HN)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook Spin 511 (R753TN)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook Spin 512 (R853TNA)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook Spin 513 (CP513-1H, CP513-1HL, R841T, R841LT)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook Spin 514 (CP514-1H, CP514-1HH, CP514-1W, CP514-2H)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook Spin 713 (CP713-2W, CP713-3W)</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook CX9 (CX9400) (some models, including North American models ending with T)</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Detachable CM3</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Detachable CZ1</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip C436FA</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip CM3200FM1A</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip CM3200FVA</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip CR1100FKA</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip CX3</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip CX5 (CX5400)</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip CX5 (CX5500)</td>
-
-</tr>
-<tr>
-
-<td>Asus Flip C536</td>
-
-</tr>
-<tr>
-
-<td>Asus Flip CM5</td>
-
-</tr>
-<tr>
-
-<td>Dynabook Chromebook C1</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x2 11</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook X360 11 G4 Education Edition</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x360 12b</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x360 13c</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x360 14b (14b-ca0xxx and FHD 14b-cb0xxx models)</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x360 14c</td>
-
-</tr>
-<tr>
-
-<td>HP Elite c1030 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo 10e Chromebook Tablet</td>
-
-</tr>
-<tr>
-
-<td>Lenovo 300e Chromebook Gen 3</td>
-
-</tr>
-<tr>
-
-<td>Lenovo 500e Chromebook Gen 3</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Chromebook Duet</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Chromebook Duet 5</td>
-
-</tr>
-<tr>
-
-<td>Lenovo IdeaPad Duet 5 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo IdeaPad Flex 5i Chromebook (13", 5)</td>
-
-</tr>
-<tr>
-
-<td>Lenovo IdeaPad Flex 5i Chromebook (13", 6)</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad C13 Yoga Gen 1</td>
-
-</tr>
-<tr>
-
-<td>NEC Chromebook Y1 Gen3A</td>
-
-</tr>
-<tr>
-
-<td>NEC Chromebook Y3</td>
-
-</tr>
-<tr>
-
-<td>Samsung Galaxy Chromebook 2</td>
-
-</tr>
-</table>
diff --git a/chromium/docs/website/site/chromium-os/works-with-chromebook-certified/index.md b/chromium/docs/website/site/chromium-os/works-with-chromebook-certified/index.md
deleted file mode 100644
index d8dd313b10e..00000000000
--- a/chromium/docs/website/site/chromium-os/works-with-chromebook-certified/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-page_name: works-with-chromebook-certified
-title: Works With Chromebook Certified SKUs
----
-
-For a full list of Works With Chromebook certified SKUs go to
-[goo.gle/wwcb-certified](http://goo.gle/wwcb-certified).
-
-\[this page will be deprecated end of 2021\] \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-projects/chrome-24.png.sha1 b/chromium/docs/website/site/chromium-projects/chrome-24.png.sha1
deleted file mode 100644
index 12e1e535010..00000000000
--- a/chromium/docs/website/site/chromium-projects/chrome-24.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1d7af03d21b02def90ec7219a2f37510f2910cb6 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-projects/chrome-32.png.sha1 b/chromium/docs/website/site/chromium-projects/chrome-32.png.sha1
deleted file mode 100644
index b4de950474f..00000000000
--- a/chromium/docs/website/site/chromium-projects/chrome-32.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ab6420e2756262b9b113a2d9723faa9745823e55 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-projects/chrome-64.png.sha1 b/chromium/docs/website/site/chromium-projects/chrome-64.png.sha1
deleted file mode 100644
index a97ca5c225f..00000000000
--- a/chromium/docs/website/site/chromium-projects/chrome-64.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-58ded5a6e91ac6cfb14ad907fd3e0f29f0762314 \ No newline at end of file
diff --git a/chromium/docs/website/site/chromium-projects/index.md b/chromium/docs/website/site/chromium-projects/index.md
deleted file mode 100644
index d909ade8511..00000000000
--- a/chromium/docs/website/site/chromium-projects/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs: []
-page_name: chromium-projects
-title: Home
-use_title_as_h1: false
----
-
-The Chromium projects include Chromium and Chromium OS, the open-source projects
-behind the [Google Chrome](https://www.google.com/chrome) browser and Google
-Chrome OS, respectively. This site houses the documentation and code related to
-the Chromium projects and is intended for developers interested in learning
-about and contributing to the open-source projects.
-
-<div class="two-column-container">
-<div class="column">
-
-## [Chromium](/Home)
-
-Chromium is an open-source browser project that aims to build a safer, faster,
-and more stable way for all users to experience the web. This site contains
-design documents, architecture overviews, testing information, and more to help
-you learn to build and work with the Chromium source code.
-
-[![](/chromium-projects/logo_chrome_color_1x_web_32dp.png)](https://www.google.com/chrome)
-
-Looking for Google Chrome?
-
-[Download Google Chrome](https://www.google.com/chrome)
-
-</div>
-<div class="column">
-
-## [Chromium OS](/chromium-os)
-
-Chromium OS is an open-source project that aims to provide a fast, simple, and
-more secure computing experience for people who spend most of their time on the
-web. Learn more about the [project
-goals](https://googleblog.blogspot.com/2009/11/releasing-chromium-os-open-source.html),
-obtain the latest build, and learn how you can get involved, submit code, and
-file bugs.
-
-[![](/chromium-projects/logo_chrome_color_1x_web_32dp.png)](https://www.google.com/chrome)
-
-Looking for Google Chrome OS devices?
-
-[Visit the Google ChromeOS site](https://www.google.com/chromeos)
-
-</div>
-</div>
diff --git a/chromium/docs/website/site/chromium-projects/logo_chrome_color_1x_web_32dp.png.sha1 b/chromium/docs/website/site/chromium-projects/logo_chrome_color_1x_web_32dp.png.sha1
deleted file mode 100644
index 3436c09923e..00000000000
--- a/chromium/docs/website/site/chromium-projects/logo_chrome_color_1x_web_32dp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-43282fa9000484a4c2b4362be9c020fa061e2cf2 \ No newline at end of file
diff --git a/chromium/docs/website/site/conduct/index.md b/chromium/docs/website/site/conduct/index.md
deleted file mode 100644
index cc6c5425629..00000000000
--- a/chromium/docs/website/site/conduct/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs: []
-page_name: conduct
-title: Chromium Code of Conduct
----
-
-Google and the Chromium team are committed to preserving and fostering a
-diverse, welcoming community.
-
-Please read our Code of Conduct at
-<https://chromium.googlesource.com/chromium/src/+/HEAD/CODE_OF_CONDUCT.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/config/app/images/customLogo/customLogo.gif.sha1 b/chromium/docs/website/site/config/app/images/customLogo/customLogo.gif.sha1
deleted file mode 100644
index 489e7fb7bc5..00000000000
--- a/chromium/docs/website/site/config/app/images/customLogo/customLogo.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-34d0b4043dac2b439c7574471007408d8e9c0871 \ No newline at end of file
diff --git a/chromium/docs/website/site/config/customLogo.gif.sha1 b/chromium/docs/website/site/config/customLogo.gif.sha1
deleted file mode 100644
index da047e2faef..00000000000
--- a/chromium/docs/website/site/config/customLogo.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9635ad74717513b5c7d701844ad9d3459aaf0733 \ No newline at end of file
diff --git a/chromium/docs/website/site/contact/index.md b/chromium/docs/website/site/contact/index.md
deleted file mode 100644
index f87d467582e..00000000000
--- a/chromium/docs/website/site/contact/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs: []
-page_name: contact
-title: Contact
----
-
-* [Blog](http://blog.chromium.org)
-* [Report a bug](http://code.google.com/p/chromium/issues/entry)
-* [Report a security
- bug](http://code.google.com/p/chromium/issues/entry?template=Security%20Bug)
- (see
- [here](https://www.google.com/about/appsecurity/chrome-rewards/) for
- more info)
-* [Discussion groups](/developers/discussion-groups)
-* IRC for developers: irc.freenode.net #chromium (try the
- [web-based-client](https://webchat.freenode.net/?channels=%23chromium)
- in your browser)
- * IRC is for developer technical discussions only; for user
- support please [go
- here](http://www.google.com/support/forum/p/Chrome). \ No newline at end of file
diff --git a/chromium/docs/website/site/dev-sentence-diagram.jpg.sha1 b/chromium/docs/website/site/dev-sentence-diagram.jpg.sha1
deleted file mode 100644
index 51923e14bcb..00000000000
--- a/chromium/docs/website/site/dev-sentence-diagram.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0f396cd8f925749b1e1136c44f24dce0b462fa79 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/Web-page-views/WebContents.graffle.sha1 b/chromium/docs/website/site/developers/Web-page-views/WebContents.graffle.sha1
deleted file mode 100644
index c35d12e6fc9..00000000000
--- a/chromium/docs/website/site/developers/Web-page-views/WebContents.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5838c1a4679ab956f14b713007c76d03c6aad385 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/Web-page-views/WebContents.png.sha1 b/chromium/docs/website/site/developers/Web-page-views/WebContents.png.sha1
deleted file mode 100644
index 38db0069085..00000000000
--- a/chromium/docs/website/site/developers/Web-page-views/WebContents.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-91fbe2041788380ba9d7dc45a4e3aa7992dce859 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/Web-page-views/WebContents2.png.sha1 b/chromium/docs/website/site/developers/Web-page-views/WebContents2.png.sha1
deleted file mode 100644
index 38db0069085..00000000000
--- a/chromium/docs/website/site/developers/Web-page-views/WebContents2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-91fbe2041788380ba9d7dc45a4e3aa7992dce859 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/Web-page-views/WebContents3.png.sha1 b/chromium/docs/website/site/developers/Web-page-views/WebContents3.png.sha1
deleted file mode 100644
index 713fd6d2b6d..00000000000
--- a/chromium/docs/website/site/developers/Web-page-views/WebContents3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-29473223768dc55d97e55f0804b635966fc50758 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/Web-page-views/index.md b/chromium/docs/website/site/developers/Web-page-views/index.md
deleted file mode 100644
index 2370945dad2..00000000000
--- a/chromium/docs/website/site/developers/Web-page-views/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: Web-page-views
-title: Web page views
----
-
-Our original architecture did not have any platform separation in the browser
-window and tab layer. WebContents contained a RenderViewHost, and that
-implemented a great deal of both logic and view-related functionality.
-
-We want to make this architecture cleaner and separate out the view from the
-cross-platform logic. This document tracks the progress of this work.
-
-## Current architecture
-
-We have split out a variety of OS-specific views from WebContents. On Windows,
-the objects look like this:
-
-[<img alt="image"
-src="/developers/Web-page-views/WebContents3.png">](/developers/Web-page-views/WebContents3.png)
-
-The view-related calls from RenderViewHost to WebContentsView are removed from
-WebContents completely by using a separate delegate. When RenderViewHost needs
-to make a view-related call, it asks its delegate (through the
-RenderViewHostDelegate interface) for the "View" delegate. This is implemented
-by the WebContentsView. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/about-signin-internals/index.md b/chromium/docs/website/site/developers/about-signin-internals/index.md
deleted file mode 100644
index aef2c12776e..00000000000
--- a/chromium/docs/website/site/developers/about-signin-internals/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: about-signin-internals
-title: about-signin-internals
----
-
-**## Overview**
-
-**The “chrome://signin-internals” webpage is a special URL in chromium that displays a summary of all signin and authentication related information in Google Chrome. It is useful in the triage and pinpointing of errors that could potentially be authentication related.**
-
-**### Summary**
-
-**#### Information Displayed**
-
- **Chrome Version - The version, branch and channel of chrome**
-
- **Signin Status - Whether the user is signed in or not**
-
- **User Id - The id for the currently signed in user or none if not signed
- in.**
-
- **Sid/Lsid - The hash of the SID/LSID for this session.**
-
-**### Last Signin Details**
-
-**#### Information Displayed**
-
- **Type - Is this a credential or a cookie jar/OAuth based login**
-
- **Time - The time stamp of the most recent login**
-
- **Last OnClientLogin Status/Time - The status and timestamp of the last
- credential based login attempt. ‘Successful’ if everything went right, an
- error message if something went wrong.**
-
- **Last OnOAuthLogin Status/Time - The status and timestamp of the last OAuth
- based login attempt. ‘Successful’ if everything went right, an error message
- if something went wrong.**
-
- **Last OnGetUserInfo Status/Time - The status and timestamp of the last
- attempt to fetch information about the currently authenticated user on a
- successful login. The user info is fetched immediately after a Client or
- OAuth login, so the timestamp should be close to one of the preceding
- values.**
-
-**#### Room for improvement**
-
- **Add ChromeOS specific information (Retail login, etc).**
-
-**### Token Details**
-
-**For each service, displays the hash of the current token (or 0 if we don’t have a token), the time stamp of the last token fetch attempt, and the status of the last token fetch attempt. Currently the following services are tracked.**
-
-**#### Services managed by TokenService**
-
-* **chromiumsync**
-* **gaia**
-* **lso**
-* **mobilesync**
-* **oauth2LoginAccessToken**
-* **oauth2LoginRefreshToken**
-
-**#### Services using OAuth2AccessTokenConsumer**
-
-* **AppNotifyChannelSetup**
-* **ChromeToMobile**
-* **OperationsBase**
-* **ProfileDownloader**
-* **UserCloudPolicyManager**
-
-**#### Room for improvement**
-
-* **Once OAuth2AccessTokenConsumers are migrated to use
- OAuth2TokenService, centralize signin-internals notifications from
- those services similar to how TokenService behaves now.** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/chromevox-on-desktop-linux/index.md b/chromium/docs/website/site/developers/accessibility/chromevox-on-desktop-linux/index.md
deleted file mode 100644
index 244b8a17d3d..00000000000
--- a/chromium/docs/website/site/developers/accessibility/chromevox-on-desktop-linux/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: chromevox-on-desktop-linux
-title: ChromeVox on Desktop Linux
----
-
-Moved to:
-<https://chromium.googlesource.com/chromium/src/+/lkgr/docs/accessibility/os/chromevox_on_desktop_linux.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/chromevox/index.md b/chromium/docs/website/site/developers/accessibility/chromevox/index.md
deleted file mode 100644
index dc3678203cb..00000000000
--- a/chromium/docs/website/site/developers/accessibility/chromevox/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: chromevox
-title: ChromeVox (for developers)
----
-
-Moved to:
-<https://chromium.googlesource.com/chromium/src/+/lkgr/docs/accessibility/os/chromevox.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/html-accessibility/index.md b/chromium/docs/website/site/developers/accessibility/html-accessibility/index.md
deleted file mode 100644
index 2c8c098bd05..00000000000
--- a/chromium/docs/website/site/developers/accessibility/html-accessibility/index.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: html-accessibility
-title: HTML Accessibility
----
-
-Significant parts of the user interface on Chrome and Chrome OS are built using
-the web platform: HTML, JavaScript, and CSS. These parts of Chrome include
-"WebUI" (e.g. the New Tab Page, Options pages, Bookmark Manager, and the Chrome
-OS Out-of-box-experience and Sign-in screens), plus many extensions and apps
-provided by Google. This also applies to help pages and tutorials, such as the
-Chrome OS welcome page and the Web Store.
-
-Remember that all of these pages, sites, and apps will be accessed by users with
-disabilities, including blind users with screen readers, low-vision users who
-prefer large fonts, people who can't use a mouse, and more. You should use all
-of the same guidelines you'd use when writing any webpage to make sure it's
-maximally accessible to all users - there are thousands of resources online,
-just do a Google search for "Accessible HTML".
-
-## Accessibility Developer Tools
-
-You can use the Accessibility Developer Tools extension on the Chrome Web Store
-as one way to help test! This extension is developed by the Chromium team and
-will help catch lots of common errors and hopefully make it much easier to catch
-accessibility errors early in the design process.
-
-* [Accessibility Developer Tools
- Web](https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb)
- - for auditing any web page other than an app or built-in page
-* A[ccessibility Developer Tools
- Apps](https://chrome.google.com/webstore/a/google.com/detail/accessibility-developer-t/lfcjaoacndhilkpdhgnfjnienfoibnaa)
- - for auditing packaged apps (link is Google-only)
-* [Accessibility Developer Tools
- WebUI](https://chrome.google.com/webstore/a/google.com/detail/accessibility-developer-t/eacmnlimniaidhecpinhhfjjilfdaccm)
- - for Chromium WebUI like chrome://settings/ (link is Google-only)
-* [Build it from
- source](https://github.com/GoogleChrome/accessibility-developer-tools)
-
-## Auditing and Testing
-
-If you add WebUI tests, an [accessibility
-audit](/developers/accessibility/webui-accessibility-audit), based on the same
-code as the Accessibility Developer Tools, above, is automatically run on any
-pages that get tests.
-
-## Guidelines
-
-Here are some specific things to think about in particular for Chrome:
-
-**Focus**: Make sure that your page is usable without the mouse. You should be
-able to press Tab to cycle through all focusable links and controls on the page.
-It should be very visually apparent when an element has focus, and this
-indication should be as consistent as possible within a page. It should be
-impossible for focus to get "trapped" in a single control. When the user
-activates a button or control that opens a dialog or pop-up, place focus inside
-the new pop-up. When the user closes this pop-up, restore focus to the previous
-place.
-
-**Hover**: Don't ever use Hover as the exclusive way to activate a feature. Make
-sure you can achieve the same thing by focusing a control with the keyboard.
-
-**Visibility and CSS Animation**: If you use **opacity:0** or **height:0** to
-make something disappear (especially for a nice animation), that item will still
-be part of the render tree, and screen readers will still read it! You must add
-some code to wait until the animation finishes and then set the hidden items to
-**hidden**, **visibility:hidden**, or **display:none**.
-
-**Color**: Don't ever use color as the only distinction between one state and
-another, unless there are two states with very different perceived brightness
-levels and an accessible annotation for screen reader users. Make sure that
-there's a lot of contrast between text and the background color.
-
-**Support 300% zoom**: Make sure everything is still usable at 300% zoom.
-
-**Prefer native elements**: Don't use a clickable &lt;div&gt; if you can style a
-&lt;a&gt; or &lt;button&gt; to look like what you want. If you create a custom
-control out of a &lt;div&gt;, you must either read up on ARIA and test with at
-least one screen reader, or send your changes to an accessibility expert for
-review.
-
-**Label Images**: All &lt;img&gt; tags must have an alt attribute with an
-accessible name. If an image is purely decorative or if the accessible name is
-already present in an adjacent element in the DOM, you can use alt="". Note that
-alt="" is not the same as leaving out the attribute entirely; if you leave it
-out, many screen readers will read the filename of the image instead. If you're
-using a background image that's not purely decorative, use the **title**
-attribute to provide an accessible name.
-
-**&lt;!-- The alt text describes the meaning of the image. --&gt;**
-
-&lt;**img** **src**="green_dot.png" **alt**="Online"&gt;
-
-**&lt;!-- Purely decorative, so use an empty alt tag. --&gt;**
-
-&lt;**img** **src**="separator.png" **alt**=""&gt;
-
-**&lt;!-- Use a title attribute for a div with a background image. --&gt;**
-
-&lt;**div** **style**="background-image: **url**('john_doe.png')"
-**title**="John Doe"&gt;...&lt;**/div**&gt;
-
-**Label Controls**: Controls should have a text label. If the control is a
-button whose title is text already, nothing else is needed. Every other control
-should usually have a &lt;label&gt; element pointing to it or wrapping it. If
-that's impossible, give it a **title** or **placeholder** attribute.
-
-**&lt;!-- Label separate from control. --&gt;**
-
-&lt;**input id**="developer_mode" **type**="checkbox"&gt;
-
-&lt;**label for**="developer_mode"&gt;Developer Mode&lt;**/label**&gt;
-
-**&lt;!-- Label wraps control (also valid). --&gt;**
-
-&lt;**label**&gt;
-
-&lt;**input** **type**="checkbox"&gt;
-
-Developer Mode
-
-&lt;**/label**&gt;
-
-**&lt;!-- Has placeholder. --&gt;**
-
-&lt;**input** **placeholder**="First name"&gt;
-
-**&lt;!-- These need titles because the labels are implied for users who can see
-the screen.**
-
-**(Maybe a bad example, but hopefully you get the idea.) --&gt;**
-
-&lt;**input** **size="3" title**="Area code"&gt;
-
-&lt;**input** **size="3" title**="Phone number (first 3 digits)"&gt; -
-
-&lt;**input** **size="4" title**="Phone number (last 4 digits)"&gt;
-
-**Where necessary, override visible text with accessible text:**
-
-Occasionally the text that's on the screen would be confusing to a blind user
-with a screen reader because the text is used symboically - for example an 'X'
-for a close button. In that case, using the title attribute won't work because
-the screen reader user will still also hear the 'X'. For this case, use
-aria-label.
-
-Try to avoid using aria-label when title or placeholder would work equally well.
-
-**&lt;!-- Uses aria-label to override the 'X' text and make sure Close is spoken
-instead. --&gt;**
-
-&lt;**button aria-label**="Close"&gt;X&lt;**/button**&gt;
-
-Note that when it's an interactive control (like a button, checkbox, etc.) the
-aria-label attribute should go on the element that has focus. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/index.md b/chromium/docs/website/site/developers/accessibility/index.md
deleted file mode 100644
index b157cf19bff..00000000000
--- a/chromium/docs/website/site/developers/accessibility/index.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: accessibility
-title: Accessibility for Chromium Developers
----
-
-Not everyone uses a computer the same way you do! If you're developing code for
-Chromium, it's important to pay attention to *accessibility -* making sure that
-all users get equal access to the product, even if they have a disability or use
-some alternative method to access their computer.
-
-Accessibility includes, but is not limited to:
-
-* Full keyboard accessibility.
-* Support for large fonts and very high zoom levels.
-* Support for *[screen
- readers](/user-experience/assistive-technology-support)* for blind
- users.
-* Support for *magnifiers* for low-vision users.
-* Support for *high-contrast modes* for low-vision users.
-* Support for *voice-control software* for users who cannot type.
-
-More information on how to ensure changes to various parts of the codebase are
-accessible:
-
-* [Windows](/developers/accessibility/windows-accessibility)
-* [Mac](/developers/accessibility/mac-accessibility)
-* [Linux](/developers/accessibility/linux-accessibility)
-* [Views (Windows & Chrome
- OS)](/developers/accessibility/views-accessibility)
-* [HTML](/developers/accessibility/html-accessibility) - also see the
- page on [WebUI accessibility
- audits](/developers/accessibility/webui-accessibility-audit).
-* [WebKit/Blink](/developers/accessibility/webkit-accessibility)
-
-### Chrome OS
-
-Test new features on Chrome OS with various accessibility support enabled - in
-particular, try it with spoken feedback enabled, which uses the ChromeVox screen
-reader.
-
-* See [ChromeVox on Desktop
- Linux](/developers/accessibility/chromevox-on-desktop-linux) for
- instructions on how to test ChromeVox on desktop Linux.
-
-### Launch bugs
-
-New features must go through accessibility review. When you create a meta bug
-(Type=Meta), you'll automatically get Dev-AccessibilityReview-No. Just add a
-comment to the bug when you believe it's ready for review or if you have any
-questions about what might be needed.
-
-### Contact Us
-
-Google-internal: use the [Chrome-Accessibility
-Group](https://groups.google.com/a/google.com/forum/#!forum/chrome-accessibility).
-
-Public: the [Chromium-Accessibility
-Group](http://groups.google.com/a/chromium.org/group/chromium-accessibility) is
-a public list for discussion of end-user Chromium accessibility issues.
-
-Bugs: tag it with **Cr-UI-Accessibility**.
-
-For gory details of how Chromium handles web content accessibility in a
-multi-process browser, see [Accessibility Technical
-Documentation](/developers/design-documents/accessibility). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/linux-accessibility/index.md b/chromium/docs/website/site/developers/accessibility/linux-accessibility/index.md
deleted file mode 100644
index 2f97b7a2df0..00000000000
--- a/chromium/docs/website/site/developers/accessibility/linux-accessibility/index.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: linux-accessibility
-title: Linux Accessibility
----
-
-Currently, accessibility of Chromium on desktop Linux is not really supported.
-However, there is a medium-term plan to solve this - please contact
-[dmazzoni@chromium.org](mailto:dmazzoni@chromium.org) if you'd like more
-information. Our goal is for all users to have an excellent experience, and we
-have a plan that will make everything work great while minimizing the extra
-effort required by Chromium developers.
-
-### Linux assistive technology
-
-The accessibility interface on Linux is the [GNOME Accessibility ToolKit
-(ATK)](http://developer.gnome.org/atk/). After enabling accessibility support in
-the GNOME Preferences (in Ubuntu, check System -&gt; Preferences -&gt; Assistive
-Technologies), you can check Chrome's support using
-[accerciser](http://live.gnome.org/Accerciser). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/mac-accessibility/index.md b/chromium/docs/website/site/developers/accessibility/mac-accessibility/index.md
deleted file mode 100644
index 0a620546204..00000000000
--- a/chromium/docs/website/site/developers/accessibility/mac-accessibility/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: mac-accessibility
-title: Mac Accessibility
----
-
-There are two main issues to think about when writing new native Mac code: full
-keyboard access and VoiceOver compatibility.
-
-### Full keyboard access
-
-On Mac OS X, the operating system is not fully keyboard-accessible by default.
-For example, there's no way to access the menu bar or most toolbars without
-using the mouse. However, users can turn on Full Keyboard Access by pressing
-Control+F1, and they can separately control whether they want Tab to cycle
-between all controls or just text boxes and lists by pressing Control+F7, or in
-System Preferences &gt; Keyboard &gt; Keyboard Shortcuts. When Full Keyboard
-Access is enabled, users can press keys like Control+F2 to highlight the menu
-bar, Control+F3 to highlight the Dock, and Control+F5 to highlight an
-application's toolbar.
-
-When Full Keyboard Access is enabled, Chromium should provide full keyboard
-access to all controls. In many cases, Cocoa will take care of this for you
-automatically, so you should simply test its behavior. If you're implementing a
-custom UI widget, you may need to implement it yourself. To determine if Full
-Keyboard Access is enabled programmatically, query
-[isFullKeyboardAccessEnabled](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSApplication_Class/Reference/Reference.html)
-in NSApplication.
-
-### Accessibility Inspector
-
-Xcode comes with a tool that let's you as the developer see all of the
-information your new widget exposes with respect to accessibility. With the
-developer tools installed, use spotlight and search for "Accessibility
-Inspector", then launch it and hover over your widget to see all of the
-attributes a potential assistive technology will receive. Look carefully for
-errors and warnings indicated by the tool. Also, read through each of the
-attributes and make sure they make sense. For further guidance, see the
-NSAccessibility informal protocol reference and the brief code snippet below.
-Sometimes the best way to figure out what the attributes should be is to hover
-over a similar control elsewhere in Chromium or in a different application.
-
-### VoiceOver compatibility
-
-Mac OS X includes a built-in accessibility service called
-[VoiceOver](http://www.apple.com/accessibility/voiceover/) that provides an
-alternative experience for users who are blind or low-vision. VoiceOver works
-quite well with Chromium today and it's important that we keep it that way!
-
-It can take some time to master VoiceOver, but the basics aren't too hard. Press
-Cmd+F5 to toggle it on or off; give it a few seconds to start up if you haven't
-used it before. Consider going through the tutorial.
-
-VoiceOver provides a synthesized-speech interface by default, but users with a
-refreshable braille display can access equivalent content in braille form, too.
-If you're not used to listening to synthesized speech, you can turn down the
-volume and ignore it, and instead just watch the Caption Panel that shows you
-everything VoiceOver is saying.
-
-When testing with VoiceOver, it's very important that you only use VoiceOver
-keys to interact. Don't test things using other keyboard shortcuts you might
-know, because you won't be testing whether or not your interface is discoverable
-for VoiceOver users.
-
-The VoiceOver keys are Control+Option and are abbreviated VO. Keep your fingers
-on these keys! Here are the keys you need to get started:
-
-* VO+Left/Right: move to the previous or next item.
-* VO+Shift+Down: start interacting with the current item
- (hierarchically).
-* VO+Shift+Up: stop interacting with the current item (hierarchically)
- - move up a level.
-* VO+Space: click
-
-When writing custom cocoa code, the most common change you'll need to make is to
-override the **title** and **role** of a UI element. The role tells VoiceOver
-what type of element or control it is, and the title tells it what text to use
-when describing it. You occasionally may want to just tell VoiceOver to skip an
-element entirely, if it's purely decorative. Here's an example code snippet that
-sets the accessible label on button **button** to the localized string
-**IDS_MY_BUTTON_LABEL:**
-
-NSString\* description = l10n_util::GetNSStringWithFixup(IDS_MY_BUTTON_LABEL);
-
-\[button accessibilitySetOverrideValue:description
-
-forAttribute:NSAccessibilityDescriptionAttribute\];
-
-For detailed information, start here: [Accessibility Programming Guidelines for
-Cocoa
-(developer.apple.com)](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Accessibility/cocoaAXSupportingAttributes/cocoaAXSupportAttributes.html) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/testing/automated-testing/ax-inspect/index.md b/chromium/docs/website/site/developers/accessibility/testing/automated-testing/ax-inspect/index.md
deleted file mode 100644
index a7f2195811c..00000000000
--- a/chromium/docs/website/site/developers/accessibility/testing/automated-testing/ax-inspect/index.md
+++ /dev/null
@@ -1,168 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-- - /developers/accessibility/testing
- - Accessibility Testing
-- - /developers/accessibility/testing/automated-testing
- - Accessibility Automated Testing
-page_name: ax-inspect
-title: Accessibility Inspect Tools
----
-
-These cli tools are designed to help to debug accessibility problems in
-applications, primarily in web browsers.
-
-\* `ax_dump_tree` to inspect accessibility tree of application
-
-\* `ax_dump_events` to watch accessibility events fired by application
-
-## Prerequisites
-
-You may be required to enable accessibility on your system. Depending on the
-application, you may also be required to run an assistive technology like a
-screen reader or use an application-specific runtime flag or flip a preference
-on in order to activate accessibility application-wide.
-
-### Mac
-
-1. Turn on Accessibility for Terminal in Security & Privacy System
- Preferences.
- * If you connect over SSH, then make sure to turn Accessibility on
- for sshd-keygen-wrapper as well
-2. Eithe
- * Start VoiceOver (\`CMD+F5\`) or
- * Use application specific flag/preference
- * Chrome/Chromium: use \``--force-renderer-accessibility`\`
- runtime flag
-
-For example, to enable accessibility in Chromium run:
-
-```none
-Chromium.app/Contents/MacOS/Chromium --force-renderer-accessibility
-```
-
-### Linux
-
-Either
-
-* Start Orca or
-* Use application specific flag/preference
- * Chrome/Chromium: use `--force-renderer-accessibility` runtime
- flag
-
-### Windows
-
-Either
-
-* Start Narrator/NVDA/JAWS or
-* Use application specific flag/preference
- * Chrome/Chromium: use `--force-renderer-accessibility` runtime
- flag
-
-## ax_dump_tree tool
-
-Helps to inspect accessibility trees of applications. Trees are dumped into
-console. To dump an accessible tree, run:
-
-```none
-ax_dump_tree <options>
-```
-
-## ax_dump_events tool
-
-The tool logs into console accessibility events fired by application. To watch
-accessibility events, run:
-
-```none
-ax_dump_events <options>
-```
-
-## Options
-
-### Selectors
-
-At your convenience the number of pre-defined application selectors are
-available:
-
-* `--chrome` for Chrome browser
-* `--chromium` for Chromium browser
-* `--firefox` for Firefox browser
-* `--edge` for Edge browser (Windows only)
-* `--safari` for Safari browser (Mac only)
-* `--active-tab` to dump a tree of active tab of a selected browser.
-
-You can also specify an application by its title:
-
-```none
-ax_dump_tree --pattern=title
-```
-
-The pattern string can contain wildcards like \* and ?. Note, you can use
-`--pattern` selector in conjunction with pre-defined selectors.
-
-Alternatively you can dump a tree by HWND on Windows:
-
-`--pid=HWND`
-
-Note, to use a hex window handle prefix it with \`0x\`.
-
-Or by application PID on Mac and Linux:
-
-`--pid=process_id`
-
-### Filters
-
-By default a pre-defined set of property filters is applied. If you want to tune
-up the output, then use `--filters` option which specifies a file containing
-filtering rules:` --filters=absolute_path_to_filters.txt`
-
-The format of the file is a plain text where each line defines a property
-filter. The supported property filters are:
-
-* `@ALLOW` filter means to include the attribute having non empty
- values;
-* `@ALLOW-EMPTY` filter means to include the attribute even if its
- value is empty;
-* `@DENY` filter means to exclude an attribute.
-
-For example, `@ALLOW:AXARIALive` will add `AXARIALive` attributes to the result
-tree on mac. Also see `example-tree-filters.txt` in
-[tools/accessibility/inspect](https://source.chromium.org/chromium/chromium/src/+/HEAD:tools/accessibility/inspect/example-tree-filters.txt)
-for more examples.
-
-### Other options
-
-* `--help` for help
-
-## Examples
-
-To dump Edge accessible tree on Windows:
-
-```none
-out\Default\ax_dump_tree --edge
-```
-
-To dump an accessible tree on Mac for a Firefox window having title containing
-\`\`mozilla\`\`:
-
-```none
-out/Default/ax_dump_tree --firefox --pattern=*mozilla*
-```
-
-To watch Chromium accessibility events on Linux:
-
-```none
-out/Default/ax_dump_events --chromium
-```
-
-## Build
-
-```none
-autoninja -C out/Default ax_dump_tree ax_dump_events
-```
-
-The command generates `ax_dump_tree` and `ax_dump_events` executables in
-\``out/Default`\` directory. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/testing/automated-testing/index.md b/chromium/docs/website/site/developers/accessibility/testing/automated-testing/index.md
deleted file mode 100644
index 2a646b1609c..00000000000
--- a/chromium/docs/website/site/developers/accessibility/testing/automated-testing/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-- - /developers/accessibility/testing
- - Accessibility Testing
-page_name: automated-testing
-title: Accessibility Automated Testing
----
-
-Accessibility is tested in several different places. This page documents some of
-the most widely-used systems.
-
-## Unit testing
-
-This is the most basic accessibility testing. It is designed to test methods of
-a particular accessibility class. To build the unit testsuite do:
-
-```none
-autoninja -C out/Default accessibility_unittests
-```
-
-To run:
-
-```none
-out/Default/accessibility_unittests
-```
-
-You can use `--gtest_filter` option to specify which test to run. For example:
-
-```none
-out/Default/accessibility_unittests --gtest_filter="AXInspectScenario*"
-```
-
-### Add new tests
-
-The unit test file should be postfixed by `_unittest` and placed next to a
-testing file. For example, for `ax_inspect_scenario.h` file it will be
-[`ax_inspect_scenario_unittest.cc`](https://source.chromium.org/chromium/chromium/src/+/main:ui/accessibility/platform/inspect/ax_inspect_scenario_unittest.cc).
-You should also add the test file to under
-[`accessibility_unittests`](https://source.chromium.org/chromium/chromium/src/+/main:ui/accessibility/BUILD.gn;l=222)
-block.
-
-## Browser testing
-
-If you need a test to run it in a browser, then you should use browser
-testsuite. It consist of `browser_tests` to test browser UI and
-`content_browsertests` to test a web document accessibility. To build the
-browser tests you do:
-
-```none
-autoninja -C out/Default browser_tests
-```
-
-or
-
-```none
-autoninja -C out/Default content_browsertests
-```
-
-To run:
-
-```none
-out/Default/browser_tests
-```
-
-or
-
-```none
-out/Default/content_browsertests
-```
-
-Use `--gtest_filter `option to specify which test to run.
-
-Test files shall be postfixed by `_browsertest` and placed next to a tested
-file. You can refer to [this
-test](https://source.chromium.org/chromium/chromium/src/+/main:content/browser/accessibility/accessibility_tree_formatter_mac_browsertest.mm)
-as an example. Also the test file should be added into corresponding block in
-`Build.gn`, for example, under
-[content_browsertests](https://source.chromium.org/chromium/chromium/src/+/main:content/test/BUILD.gn?q=%22test(%22content_browsertests%22)%20%7B%22&ss=chromium%2Fchromium%2Fsrc).
-
-### Dump Accessibility Testing
-
-This testsuite is designed to test platform accessibility APIs. It is part of
-`browser_tests` and `content_browsertests` testsuites. Please refer to [the
-docs](https://source.chromium.org/chromium/chromium/src/+/main:content/test/data/accessibility/readme.md)
-for details.
-
-## Blink Layout Tests
-
-Blink layout tests are another important way accessibility is tested. There are
-a number of accessibility tests in this directory
-`third_party/blink/web_tests/accessibility/`. These tests are critically
-important for testing Blink implementation of accessibility at a low-level,
-including parsing html and sending notifications.
-
-Here's a sample command line for running the tests:
-
-```none
-ninja -C out/Debug blink_tests
-python third_party/blink/tools/run-web-tests.py --no-show-results --no-retry-failures --results-directory=results accessibility/
-```
-
-To run just one test:
-
-```none
-out/Release/content_shell --run-layout-test third_party/blink/web_tests/accessibility/test_name.html
-```
-
-To run just one test, on Mac OS X:
-
-```none
-out/Release/Content\ Shell.app/Contents/MacOS/Content\ Shell --run-layout-test third_party/blink/web_tests/accessibility/test_name.html
-```
-
-## Audit testing
-
-Another testing type is accessibility audit testing aslo known as
-[axe-core](/developers/accessibility/testing/axe-core). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/testing/axe-core/index.md b/chromium/docs/website/site/developers/accessibility/testing/axe-core/index.md
deleted file mode 100644
index 0c8df8f7b5e..00000000000
--- a/chromium/docs/website/site/developers/accessibility/testing/axe-core/index.md
+++ /dev/null
@@ -1,277 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-- - /developers/accessibility/testing
- - Accessibility Testing
-page_name: axe-core
-title: Axe-Core Testing
----
-
-TL;DR
-
-Writing an accessibility (a11y) test with axe-core will create 1 test for each
-rule and test created. This will prevent timeouts.
-
-**A11y tests DO NOT run in DEBUG builds** (also to prevent timeouts), this
-shouldn't be an issue since we're only testing web UI with axe-core.
-
-Simple Test
-
-// Copyright 2019 The Chromium Authors. All rights reserved.
-
-// Use of this source code is governed by a BSD-style license that can be
-
-// found in the LICENSE file.
-
-// Polymer BrowserTest fixture and aXe-core accessibility audit.
-
-GEN_INCLUDE(\[
-
-'//chrome/test/data/webui/a11y/accessibility_test.js',
-
-'//chrome/test/data/webui/polymer_browser_test_base.js',
-
-\]);
-
-TestFixture = class extends PolymerTest {
-
-/\*\* @override \*/
-
-get browsePreload() {
-
-return 'chrome://settings/'; // URL of page to test.
-
-}
-
-};
-
-AccessibilityTest.define('TestFixture', {
-
-// Must be unique within the test fixture and cannot have spaces.
-
-name: 'TestSuiteName',
-
-// Optional. Configuration for axe-core. Can be used to disable a test.
-
-axeOptions: {},
-
-// Optional. Filter on failures. Use this for individual false positives.
-
-violationFilter: {},
-
-// Optional. Any setup required for all tests. This will run before each one.
-
-setup: function() {
-
-},
-
-tests: {
-
-'Test case description': function() {
-
-// Set up an individual test case. You can open up a dialog or click
-
-// buttons to get the test to the state that should be tested for a11y.
-
-// This will run once per axe-core a11y rule.
-
-// Can return a promise for async setup.
-
-}
-
-},
-
-});
-
-Examples
-
-* [MD
- Settings](https://cs.chromium.org/chromium/src/chrome/test/data/webui/settings/a11y/)
-* [MD
- Extensions](https://cs.chromium.org/chromium/src/chrome/test/data/webui/extensions/a11y/)
-
-How it Works
-
-Accessibility audits can take a while to run, so we broke each audit out into
-its own test. This would be tedious to do by hand so the
-AccessibilityTest.define function will create them based on some params. This
-calls TEST_F for each test that's being created and uses a test fixture like all
-web UI tests. In the past, a11y audit was tacked onto the end of all web UI
-tests but we want to avoid timeouts since the number of tests in axe-core is
-much larger than ADT, so a11y tests now have to be created manually-ish.
-
-Each test inside the tests data member will be run as its own Mocha test.
-
-Example:
-
-AccessibilityTest.define('TestFixture', {
-
-name: 'TestSuiteName',
-
-tests: {
-
-'Test1': function() {
-
-// No special setup
-
-},
-
-'Test2': function() {
-
-// Show the dialog before testing for a11y.
-
-let dialog = document.querySelector('#dialog');
-
-dialog.showModal();
-
-},
-
-},
-
-});
-
-That code snippet will create the following tests:
-
-> TestFixture.TestSuiteName_accesskeys
-
-> TestFixture.TestSuiteName_area_alt
-
-> TestFixture.TestSuiteName_aria_allowed_attr
-
-> TestFixture.TestSuiteName_aria_hidden_body
-
-> TestFixture.TestSuiteName_aria_required_attr
-
-> TestFixture.TestSuiteName_aria_required_children
-
-> TestFixture.TestSuiteName_aria_required_parent
-
-> TestFixture.TestSuiteName_aria_roles
-
-> TestFixture.TestSuiteName_aria_valid_attr
-
-> TestFixture.TestSuiteName_aria_valid_attr_value
-
-> TestFixture.TestSuiteName_audio_caption
-
-> TestFixture.TestSuiteName_blink
-
-> TestFixture.TestSuiteName_button_name
-
-> TestFixture.TestSuiteName_bypass
-
-> TestFixture.TestSuiteName_checkboxgroup
-
-> TestFixture.TestSuiteName_definition_list
-
-> TestFixture.TestSuiteName_dlitem
-
-> TestFixture.TestSuiteName_document_title
-
-> TestFixture.TestSuiteName_duplicate_id
-
-> TestFixture.TestSuiteName_empty_heading
-
-> TestFixture.TestSuiteName_frame_title
-
-> TestFixture.TestSuiteName_frame_title_unique
-
-> TestFixture.TestSuiteName_heading_order
-
-> TestFixture.TestSuiteName_hidden_content
-
-> TestFixture.TestSuiteName_href_no_hash
-
-> TestFixture.TestSuiteName_html_has_lang
-
-> TestFixture.TestSuiteName_html_lang_valid
-
-> TestFixture.TestSuiteName_image_alt
-
-> TestFixture.TestSuiteName_image_redundant_alt
-
-> TestFixture.TestSuiteName_input_image_alt
-
-> TestFixture.TestSuiteName_label
-
-> TestFixture.TestSuiteName_label_title_only
-
-> TestFixture.TestSuiteName_layout_table
-
-> TestFixture.TestSuiteName_link_in_text_block
-
-> TestFixture.TestSuiteName_link_name
-
-> TestFixture.TestSuiteName_list
-
-> TestFixture.TestSuiteName_listitem
-
-> TestFixture.TestSuiteName_marquee
-
-> TestFixture.TestSuiteName_meta_refresh
-
-> TestFixture.TestSuiteName_meta_viewport
-
-> TestFixture.TestSuiteName_meta_viewport_large
-
-> TestFixture.TestSuiteName_object_alt
-
-> TestFixture.TestSuiteName_p_as_heading
-
-> TestFixture.TestSuiteName_radiogroup
-
-> TestFixture.TestSuiteName_region
-
-> TestFixture.TestSuiteName_scope_attr_valid
-
-> TestFixture.TestSuiteName_server_side_image_map
-
-> TestFixture.TestSuiteName_tabindex
-
-> TestFixture.TestSuiteName_table_duplicate_name
-
-> TestFixture.TestSuiteName_table_fake_caption
-
-> TestFixture.TestSuiteName_td_has_header
-
-> TestFixture.TestSuiteName_td_headers_attr
-
-> TestFixture.TestSuiteName_th_has_data_cells
-
-> TestFixture.TestSuiteName_valid_lang
-
-> TestFixture.TestSuiteName_video_caption
-
-> TestFixture.TestSuiteName_video_description
-
-Each of these tests will have a mocha body that will run both Test1 and Test2,
-then run the a11y audit on the state of the page after each test setup.
-
-[Googler only link to design doc](http://go/a11y-chrome-settings-design). (Doc
-has a lot of overlap with this page, but goes more into design considerations)
-
-Debugging
-
-Axe-Core has an extension that can be used to debug by running the same library
-that we run the tests with.
-
-[Official
-Extension](https://chrome.google.com/webstore/detail/axe/lhdoppojpmngadmnindnejefpokejbdd)
-
-[Googler Extension](http://go/axe-core-chrome-extension)
-([source](http://go/axe-core-chrome-extension-source))
-
-You must pass in the --extensions-on-chrome-urls flag in order to run these
-extensions on chrome:// urls. This is a security risk, so only run extensions
-you trust when doing this.
-
-Running Locally
-
-The axe-core a11y audit is part of browser_tests. Instructions for building are
-the same as that target.
-
-Note: axe-core tests are NOT part of DEBUG builds to prevent timeouts on test
-bots. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/testing/index.md b/chromium/docs/website/site/developers/accessibility/testing/index.md
deleted file mode 100644
index 6bb5f161f3e..00000000000
--- a/chromium/docs/website/site/developers/accessibility/testing/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: testing
-title: Accessibility Testing
----
-
-Chromium accessibility has
-
-\* [automated testing](/developers/accessibility/testing/automated-testing)
-
-\* [ax_inspect](/developers/accessibility/testing/automated-testing/ax-inspect)
-tools for manual testing \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/views-accessibility/index.md b/chromium/docs/website/site/developers/accessibility/views-accessibility/index.md
deleted file mode 100644
index 97352b6758d..00000000000
--- a/chromium/docs/website/site/developers/accessibility/views-accessibility/index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: views-accessibility
-title: Views accessibility
----
-
-The Views module provides a UI abstraction layer used on both Windows and Chrome
-OS. Views also provides accessibility support automatically on both platforms,
-so if you're building a UI using Views or even writing a new View, making it
-accessible is pretty easy.
-
-### Keyboard Access
-
-In Chromium, there are some "panes" that are not keyboard-accessible by default,
-by we provide a special mode to get access to them. For example, the main
-Toolbar and the Bookmarks Bar are not normally part of the tab order (with the
-exception of the location bar / omnibox). However, if your press F6 (on Windows;
-Ctrl+F1 on Chrome OS), it will focus the first item in the toolbar and you can
-use Tab to interact with the rest of the items in the toolbar. See [Windows
-accessibility](/developers/accessibility/windows-accessibility) for a little
-more information on the underlying model and user expectations for keyboard
-accessibility.
-
-If you're adding a new pane, or some other UI that appears in the main browser
-window but not inside of tab contents, you probably want it to have similar
-keyboard accessibility.
-
-In Views, you can make a view accessible in this way with the AccessiblePaneView
-class, which is used as a base class for the toolbar, bookmarks bar, infobars,
-and more in Chromium. When you subclass AccessiblePaneView, you can designate
-controls that are not normally part of the tab order, but are keyboard-focusable
-if the user first focuses your pane (typically by pressing F6) and then tabs to
-the controls. Use View::set_accessibility_focusable(true) to identify views that
-should be focusable in this special mode but not under normal circumstances.
-
-### Screen reader / accessibility API access
-
-Chromium provides access to screen readers and magnifiers that interact with
-Windows using accessibility APIs. When you create a new View, or build a new bit
-of UI using Views, it's important that you support these APIs so that all users
-can access the controls even if they have trouble seeing or using a mouse.
-Luckily most of the work has been done for you!
-
-If you're just building UI (like a toolbar or dialog) using existing views,
-usually all that's necessary is to provide an accessible name / title for any
-control that doesn't already have accessible text.
-
-If you're creating new widgets, every accessible View subclass should override
-this method:
-
-virtual void GetAccessibleState(ui::AccessibleViewState\* state);
-
-AccessibleViewState looks like this:
-
-struct UI_EXPORT AccessibleViewState { public: AccessibleViewState();
-~AccessibleViewState(); // The view's role, like button or list box.
-AccessibilityTypes::Role role; // The view's state, a bitmask containing fields
-such as checked // (for a checkbox) and protected (for a password text box).
-AccessibilityTypes::State state; // The view's name / label. string16 name; //
-The view's value, for example the text content. string16 value; // The name of
-the default action if the user clicks on this view. string16 default_action; //
-The keyboard shortcut to activate this view, if any. string16 keyboard_shortcut;
-// The selection start and end. Only applies to views with text content, // such
-as a text box or combo box; start and end should be -1 otherwise. int
-selection_start; int selection_end; // The selected item's index and the count
-of the number of items. // Only applies to views with multiple choices like a
-listbox; both // index and count should be -1 otherwise. int index; int count;
-};
-
-When that method is called, call the inherited implementation and then modify
-|state| to reflect the current state of your view. Most views should just update
-the role and name, or perhaps the value and state. For example, a control that
-implements a multi-select list should return the current selected value in
-|value| and update |index| and |count| as appropriate.
-
-Finally, if your control dynamically changes value, you may need to call
-NotifyAccessibilityEvent, like this:
-
-GetWidget()-&gt;NotifyAccessibilityEvent( this,
-ui::AccessibilityTypes::EVENT_VALUE_CHANGED, true);
-
-The only way to test your application is by actually using a screen reader.
-Chromium's accessibility developers will be glad to assist you with this! To
-make our jobs easier, please first figure out a plan for keyboard accessibility
-and implement that completely - you shouldn't need our help with that. Once
-everything works great with the keyboard, we can help with screen reader
-accessibility testing to see what might need to be labeled. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/webkit-accessibility/index.md b/chromium/docs/website/site/developers/accessibility/webkit-accessibility/index.md
deleted file mode 100644
index 380399c7713..00000000000
--- a/chromium/docs/website/site/developers/accessibility/webkit-accessibility/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: webkit-accessibility
-title: Blink Accessibility
----
-
-If you're working on Blink code, here are some things to know about
-accessibility.
-
-In Blink, accessibility is off by default. When an operating system's native
-accessibility services access web content, Blink is switched into accessibility
-mode, which creates a cache of a tree of AccessibilityObjects. For the most
-part, the tree of AccessibilityObjects mirrors the render tree, but there are
-some exceptions.
-
-Note: this document needs to be updated to reflect the changes after the WebKit
--&gt; Blink fork.
-
-core/accessibility/ contains a generic implementation of accessibility, and then
-the mac/, win/, etc. directories contain platform-specific subclasses or
-wrappers for this - classes that implement the platform accessibility API for
-each node in the accessible tree. However, Chromium doesn't use any of these
-platform-specific ports - instead Chromium uses a thin wrapper, defined in
-WebKit/chromium/public/WebAccessibilityObject.h, that shuttles the information
-to the browser process. The accessibility APIs are implemented in Chromium's
-main browser process.
-
-When adding implementations of new HTML tags, make sure they're handled properly
-in WebCore/accessibility - is a new subclass needed? Is there a role that covers
-this element?
-
-When adding new features to the shadow DOM of an existing control, make sure the
-shadow DOM nodes have proper accessibility annotations, like labels or titles.
-Make sure anything you add is keyboard-accessible. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/webui-accessibility-audit/index.md b/chromium/docs/website/site/developers/accessibility/webui-accessibility-audit/index.md
deleted file mode 100644
index 4de6e9476a2..00000000000
--- a/chromium/docs/website/site/developers/accessibility/webui-accessibility-audit/index.md
+++ /dev/null
@@ -1,132 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: webui-accessibility-audit
-title: WebUI accessibility audit
----
-
-[TOC]
-
-### What is it?
-
-Any test written using the [WebUI browser test
-framework](/Home/domui-testing/webui-browser_tests) will now run an
-accessibility audit at the conclusion of each test case.
-
-### How do I find and fix errors?
-
-Each error gives you querySelector strings pointing to the elements that failed
-the audit, and an error code indicating the exact test that failed.
-
-For example, suppose your test fails with the following error:
-
-```none
-*** Begin accessibility audit results ***
-An accessibility audit found 1 error on this page.
-For more information, please see http://chromium.org/developers/accessibility/webui-accessibility-audit
-Error: controlsWithoutLabel (AX_TEXT_01) failed on the following elements (1 - 2 of 2):
-#searchbox > INPUT
-#searchbox > SELECT
-*** End accessibility audit results ***
-```
-
-The error code here is AX_TEXT_01. You can find the definition of the error
-codes on the [Audit
-Rules](https://code.google.com/p/accessibility-developer-tools/wiki/AuditRules)
-page. That should tell you exactly how to fix your error.
-
-Two elements failed this test, with the querySelector strings #searchbox &gt;
-INPUT and #searchbox &gt; SELECT. In other words, there's an element with id
-`searchbox`, and it has two direct descendant elements - one an INPUT element,
-one a SELECT element. You can use the developer tools to interactively evaluate,
-e.g., `document.querySelector('#searchbox > INPUT')` to find one of these
-elements.
-
-### Can I run the audit interactively?
-
-Yes! This audit is based on the public Accessibility Developer Tools Chrome
-extension.
-
-There are different versions of the extension depending on what you want to run
-it on:
-
-* [Accessibility Developer Tools
- Web](https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb)
- - for auditing any web page other than an app or built-in page
-* A[ccessibility Developer Tools
- Apps](https://chrome.google.com/webstore/a/google.com/detail/accessibility-developer-t/lfcjaoacndhilkpdhgnfjnienfoibnaa)
- - for auditing packaged apps (link is Google-only)
-* [Accessibility Developer Tools
- WebUI](https://chrome.google.com/webstore/a/google.com/detail/accessibility-developer-t/eacmnlimniaidhecpinhhfjjilfdaccm)
- - for Chromium WebUI like chrome://settings/ (link is Google-only)
-* [Build it from
- source](https://github.com/GoogleChrome/accessibility-developer-tools)
-
-Note that normally, content scripts don't run on Chrome's WebUI pages with a
-chrome:// url, for security. However, you can bypass this by running Chrome with
-the `--extensions-on-chrome-urls` flag (or toggling the setting in
-chrome://flags) and then using an extension that adds "chrome://\*/\*" to its
-list of permissions. The "Accessibility Developer Tools WebUI" version linked
-above already has this flag set.
-
-Install the extension, navigate to the url you want to test, open developer
-tools, click on the Audit tab, and run the accessibility audit.
-
-### I think the audit is wrong. How do I disable it?
-
-You can disable the accessibility check for a particular **test** **case** by
-calling `disableAccessibilityChecks()` during the test method.
-
-For example,
-
-```none
-TEST_F('SomeWebUITest', 'basicTest', function() {
-   this.disableAccessibilityChecks();
-    // rest of test code
-});
-```
-
-You can disable the accessibility check for a **test** **fixture** by setting
-the `runA11yChecks` parameter on the fixture object.
-
-For example,
-
-```none
-SomeWebUITest.prototype = {
-     _proto__: testing.Test.prototype,
-     runAccessibilityChecks: false,
-    // rest of fixture
-}; 
-```
-
-You can then enable the accessibility check on a **per-test** basis using the
-`enableAccessibilityChecks()`:
-
-```none
-TEST_F('SomeWebUITest', 'aDifferentTest', function()
-    enableAccessibilityChecks();
-    //rest of test code
-})
-```
-
-### How is the audit automatically triggered for WebUI tests?
-
-The code to trigger it is in
-[chrome/test/data/webui/test_api.js](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/test/data/webui/test_api.js).
-Before `tearDown()`, it runs all the audit rules from the
-[accessibility-developer-tools](http://code.google.com/p/accessibility-developer-tools/source/browse/#git%2Fsrc%2Faudits)
-library on the WebUI page under test. Each rule consists of a selector function
-which picks out the relevant elements on the page, and a test which is run on
-each matching element. If the test fails, the element is added to a list of
-failing elements. For each failing audit rule, up to five elements will be
-output at the end of the test, in the form of a query selector string which can
-be used to find the element on the page.
-
-### What do the test results mean?
-
-The [accessibility-developer-tools
-wiki](http://code.google.com/p/accessibility-developer-tools/wiki/AuditRules)
-has more information on the specific audit rules. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/accessibility/windows-accessibility/index.md b/chromium/docs/website/site/developers/accessibility/windows-accessibility/index.md
deleted file mode 100644
index e6ab7ac8a13..00000000000
--- a/chromium/docs/website/site/developers/accessibility/windows-accessibility/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/accessibility
- - Accessibility for Chromium Developers
-page_name: windows-accessibility
-title: Windows accessibility
----
-
-Microsoft Windows is the most widely used desktop operating system in the world,
-and while there are some basic built-in features for users with disabilities,
-there's a much larger and richer ecosystem of third-party products that provide
-alternative ways to interact with Windows.
-
-### Keyboard accessibility
-
-Windows has a tradition of being fully keyboard-accessible without any extra
-configuration needed, and Chromium should be no exception. There shouldn't be
-anything you can do with a mouse that you can't also do with the keyboard. Where
-possible, Chromium should use standard discoverable keyboard shortcuts, but
-where that's impossible or difficult, custom keyboard shortcuts are fine.
-
-Most users are familiar with using Tab to cycle between focusable controls. Here
-are some other keys that are widely supported in Windows applications (and
-should be working great in Chromium, too):
-
-* F6 moves focus between various focusable panes. In Chromium, F6
- provides access to the toolbar, bookmarks bar, infobars, and more.
-* Shift+F10 (or the Context Menu key on some keyboards) opens a
- context menu.
-* Space and Enter should press buttons and links. (In some dialogs,
- Enter presses the default button rather than the current button.)
-* F10 focuses the menu bar. In Chromium, it focuses the Chromium menu
- in the toolbar (but does not open it). You can also press and
- release Alt.
-* Alt+shift+&lt;letter&gt; places focus directly on a container (i.e.
- alt-shift-t places focus on the first item of the toolbar).
-
-If you're adding new UI features, first see if you can make them discoverable -
-put them in the tab order for an existing pane. If that's impossible, make sure
-they have their own keyboard shortcut. Alternatively, for features containing
-menu items, you can let users learn about the shortcut from their exploration of
-the main Chromium menu.
-
-### High Contrast Mode
-
-Windows has a special high contrast mode intended for people with low vision.
-The most common variation is white-on-black text instead of black on white.
-While Mac OS X and Linux provide this at the OS compositor layer (so apps don't
-have to do anything), Windows implements this by changing system colors and
-expects apps to use these colors.
-
-To try High Contrast mode, press Alt+Shift+PrintScreen. (Note: must be the left
-alt and left shift key.)
-
-All UI drawn by Chromium that's outside of the webpage should either be 100%
-themable, or it should respect the system colors. So when choosing colors for
-text and backgrounds in particular, be sure to use system colors, not hardcoded
-colors. See GetSysSkColor in ui/gfx/color_utils.h as a starting point.
-
-On Windows, users who have high-contrast mode enabled will see a bubble the
-first time they open Chrome, prompting them to install the [High
-Contrast](https://chrome.google.com/webstore/detail/high-contrast/djcfdncoelnlbldjfhinnjlhdjlikmph)
-extension and a white-on-black theme from the web store (both optional). The
-High Contrast extension improves the readability of web content, and the themes
-improve the look of the rest of Chrome.
-
-### Accessibility API support
-
-[Microsoft Active Accessibility
-(MSAA)](http://msdn.microsoft.com/en-us/library/ms971310.aspx) is a COM
-interface that Windows programs can implement in order to allow access to their
-interface from assistive technology such as screen readers, magnifiers,
-voice-control applications, and more. Chromium has good support for MSAA now and
-it's important to keep it that way! When writing native Windows UI code, think
-about whether you might need to expose any additional information to make it
-accessible.
-
-To do a quick accessibility check, download
-[AViewer](http://www.paciellogroup.com/blog/2011/06/aviewer-beta-updated/) and
-press F6 to track focus. Then switch to Chromium and use the keyboard to
-navigate any area of the UI you want to test. Then check the Role, Name, Value,
-and other properties in AViewer and make sure they're correct.
-
-Note: Chrome doesn't enable accessibility for the main web area by default
-unless it detects a screen reader or other advanced assistive technology. To
-override this, run chrome.exe with the --force-renderer-accessibility flag.
-
-To do a more involved check, learn to use [NVDA](http://www.nvda-project.org/),
-an open-source screen reader. Google employees also have access to site licenses
-for some of the most popular commercial tools, including JAWS and ZoomText.
-
-Most of the time you probably won't be writing native Windows code, you'll be
-writing Views code. Views has its own accessibility layer, which should make
-things very easy - in most cases it will take only 2 or 3 lines of additional
-code to make a new control accessible. See [Views
-Accessibility](/developers/accessibility/views-accessibility) for more
-information.
-
-If you are writing native Windows code, you may be able to update the
-accessibility information for a particular widget using [dynamic
-annotation](http://msdn.microsoft.com/en-us/windows/cc307286) - that's the
-easiest. Here's an example that sets the accessible name of **hwnd** to
-**name**:
-
-base::win::ScopedComPtr&lt;IAccPropServices&gt; acc_prop_services;
-
-HRESULT hr = CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER,
-
-IID_IAccPropServices, reinterpret_cast&lt;void\*\*&gt;(&acc_prop_services));
-
-hr = acc_prop_services-&gt;SetHwndPropStr(hwnd, OBJID_CLIENT,
-
-CHILDID_SELF, PROPID_ACC_NAME, name.c_str());
-
-If all else fails, you'll have to implement a custom IAccessible interface for
-your widget. Hopefully not! So far Chrome doesn't have any examples of this,
-everything is either handled by the Views accessibility code in
-ui/views/accessibility, the web content accessibility code in
-content/browser/accessibility, or a few tiny annotations like the example above. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/adding-3rd-party-libraries/index.md b/chromium/docs/website/site/developers/adding-3rd-party-libraries/index.md
deleted file mode 100644
index 2b168e1ff6c..00000000000
--- a/chromium/docs/website/site/developers/adding-3rd-party-libraries/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: adding-3rd-party-libraries
-title: Adding third_party Libraries
----
-
-Docs have been converted to markdown:
-
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/adding_to_third_party.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/android-eclipse-dev/index.md b/chromium/docs/website/site/developers/android-eclipse-dev/index.md
deleted file mode 100644
index 1192f2d5ef2..00000000000
--- a/chromium/docs/website/site/developers/android-eclipse-dev/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: android-eclipse-dev
-title: Eclipse Configuration for Android
----
-
-Moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/eclipse.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/androidwebview/android-webview-beta/index.md b/chromium/docs/website/site/developers/androidwebview/android-webview-beta/index.md
deleted file mode 100644
index 37f1ac34768..00000000000
--- a/chromium/docs/website/site/developers/androidwebview/android-webview-beta/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/androidwebview
- - Android WebView
-page_name: android-webview-beta
-title: Try out WebView Beta
----
-
-**How to join:**
-
-Steps for using WebView Beta, Dev, and Canary has been relocated to the
-following page:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/prerelease.md>
-
-### WebView FAQ
-
-The WebView FAQ has been relocated to the following page:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/faq.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/androidwebview/android-webview-beta/screen.png.sha1 b/chromium/docs/website/site/developers/androidwebview/android-webview-beta/screen.png.sha1
deleted file mode 100644
index d380d522e07..00000000000
--- a/chromium/docs/website/site/developers/androidwebview/android-webview-beta/screen.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2a8bdf64be18e58105fc04c2969dce6fb082219c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/androidwebview/index.md b/chromium/docs/website/site/developers/androidwebview/index.md
deleted file mode 100644
index 86ad7608ea9..00000000000
--- a/chromium/docs/website/site/developers/androidwebview/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: androidwebview
-title: Android WebView
----
-
-[Android WebView](http://developer.android.com/guide/webapps/webview.html) is
-one of the six supported platforms for Chromium.
-
-Here are
-[slides](https://docs.google.com/a/chromium.org/presentation/d/1pYAGn2AYJ7neFDlDZ9DmLHpwMIskzMUXjFXYR7yfUko/edit?pli=1#slide=id.g4f030209e_30)
-from a presentation at BlinkOn 3 about how the architecture of Android WebView
-differs from that of other Chromium platforms.
-
-Documentation on
-
-* [tile memory
- management](https://docs.google.com/document/d/1tlthhJmaRVc9_tsEIHdvBChP0Zm3n9qezcGj9uJumY4/edit?usp=sharing)
-* [UI
- thread](https://docs.google.com/document/d/1sDMN-K4TPh8osNBt-4ANfhf9FrRWl3xxrGRp7O-hkB8/edit?usp=sharing)
-* [Garbage collection
- requirements](https://docs.google.com/document/d/1J081GIUprqNbQDSzhYtL2kYsF3mf6jRc1GcAWGgUPXo/edit?usp=sharing)
-
-Please contact android-webview-dev@chromium.org with any technical questions. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/androidwebview/webview-ct-bug/index.md b/chromium/docs/website/site/developers/androidwebview/webview-ct-bug/index.md
deleted file mode 100644
index c705259162a..00000000000
--- a/chromium/docs/website/site/developers/androidwebview/webview-ct-bug/index.md
+++ /dev/null
@@ -1,172 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/androidwebview
- - Android WebView
-page_name: webview-ct-bug
-title: WebView FAQ for Symantec Certificate Transparency Issue
----
-
-The Issue:
-
-Starting with version 53,
-[WebView](https://developer.android.com/reference/android/webkit/WebView.html)
-required that all certificates issued by Symantec Corporation after 1 June 2016
-must comply with Chrome's Certificate Transparency policy. This was [announced
-last
-year](https://security.googleblog.com/2015/10/sustaining-digital-certificate-security.html)
-and implemented in Chrome and WebView 53 which was released at the beginning of
-September 2016. More information about Certificate transparency is available
-[here](https://www.certificate-transparency.org/).
-
-Due to a bug in Chrome’s implementation of Certificate Transparency, pages
-served with Symantec certificates will not load in WebView versions 53 or 54,
-starting 10 weeks after each WebView release. More details are available [in
-this public bug](https://bugs.chromium.org/p/chromium/issues/detail?id=664177).
-
-The chromium-dev group also includes extra information
-[here.](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/_ZILH704AVU)
-
-General Questions and Answers
-
- Which versions of WebView are impacted?
- The impacted versions are 53 and 54 builds of Android WebView. Versions 52
- and earlier, or 55 and later, do not exhibit the problem. For affected
- versions, all channels including stable, beta, dev, canary releases are
- impacted.
-
- When does the issue start occurring?
- The issue manifests 10 weeks after the build date. For 53 stable builds, 10
- weeks have already passed. For 54, builds will expire as follows:
-
-<table>
-<tr>
-
-<td>Build ID</td>
-
-<td>Expiration Date</td>
-
-</tr>
-<tr>
-
-<td>54.0.2840.68</td>
-
-<td>12/27/2016</td>
-
-</tr>
-<tr>
-
-<td>54.0.2840.85</td>
-
-<td>1/7/2017</td>
-
-</tr>
-</table>
-
- Does this issue occur if WebView is up to date?
- Webview is released approximately every 6 weeks. Since the bug takes effect
- 10 weeks after a new version is built, up-to-date versions of WebView are
- not impacted.
-
- Which Android versions are impacted?
- All versions of Android L and above are impacted. This is true even when
- WebView is provided by Chrome (Android N and above).
-
- How can users check their WebView version?
- This is different for Android versions. For Android L-M, users can check the
- version using:
- Settings-&gt;Apps-&gt;Show system (top right 3 dots)-&gt;Android System
- WebView
- For Android N, by default WebView is provided by Chrome. Users can check it
- in Settings-&gt;Apps -&gt; Chrome
- For Android TV devices, there is no Chrome, so WebView version should be
- checked just like Android L-M devices. However, the settings menu is
- slightly different. Use
- Settings-&gt;Apps-&gt;scroll down to Android System WebView
- For Android N devices, where users disable Chrome, WebView is provided by
- Android WebView package. So version should be checked similar to L-M
- devices.
- There are users who enable developer settings and use Canary/Beta channels
- of Chrome as WebView provider. These users can get the version using
- Settings-&gt;Apps and their choice of provider.
- Android watch devices don’t have WebView so are not impacted.
-
- What is required for users to update Webview?
- Users who are signed in to their devices can update WebView through the Play
- Store. Most users will be updated automatically.
-
- The version numbers in the Play Store for both Android WebView and Chrome
- start with 54 for me. Is the issue only in WebView, not Chrome?
- This issue is only in WebView. However WebView can be provided by Chrome in
- Android N and above depending on the type of the device. Please see Q#5 for
- how to find the WebView version for different devices.
-
- How is Android login process impacted?
- Setup Wizard uses Webview while handling Captive portals. This may be broken
- for portals signed with Symantec certs.
- Enterprise dasher accounts that are hosted on 3rd party WebSites will be
- broken if they are signed with Symantec certs.
-
- Can users change system clock to an earlier date to workaround Captive
- portal issues or for setting Dasher account during initial setup?
- If blocked by a captive portal, the system clock may still be unset (for
- example if the device does not have a SIM). If either the date/time is
- unset, the user will be shown the date/time screen in Setup Wizard UI, where
- the default date will be Jan 1 of the build year. If the date is earlier
- than the date for the Certificate Transparency deadline, the issue may not
- be seen.
- We do not suggest changing the time/date as it may cause many other things
- to be broken.
-
- What happens to Android devices that are not in Google Play ecosystem? Are
- they impacted?
- Android WebView is used to provide WebView functionality in non-play
- ecosystem devices too (for example Amazon Fire devices). These devices may
- be impacted if they have WebViews built from M53 and M54 releases of
- Chromium.
- However, WebView implementations and updates in such non Play Store devices
- are beyond Google’s control. OEMs may prefer to fix broken implementations
- using OTAs for example.
-
- I have Android N and My WebView using app (Amazon, Paytm, JD Lite, ... ) is
- broken. The app is suggesting me to update WebView but the link I was
- referred shows WebView as disabled. What should I do? In Android N and
- above, WebView is distributed using Chrome apk. Please update Chrome.
- Alternatively, if you don't want to use Chrome, then you can disable it.
- This will enable WebView.
-
-Developer Questions and Answers
-
- Are there solutions based on user agent sniffing?
- Affected versions of WebView will fail to connect at the TLS layer, before a
- user agent is sent. It might be possible to sniff the client at the TLS
- layer, but it is complex and may not be reliable. For example, CloudFlare
- has a tool to sniff the clients based on unique patterns that different
- clients exhibit (such as Safari vs. WebView). We are not aware of a tool
- that can sniff a particular version of WebView (M53 vs. M55).
-
- How can developers suggest updating WebView properly? Is there a sample
- code?
- Requesting users to update WebView is fairly complicated as WebView on
- Android N is provided by Chrome APK for phones and tablets and further there
- can be multiple WebView providers for a given device. See below.
-
- Can app developers take measures to fix the issue?
- The only action WebView developers can take is to ask the user to update
- WebView. WebView provides an onReceivedSslError() callback, but this does
- not provide enough information to correctly address the problem. Using this
- callback to bypass the error is never recommended and exposes the app to
- numerous security vulnerabilities.
-
- For apps, is this just a simple matter of prompting users to take the Chrome
- update? Or, do the apps themselves need to be rebuilt and republished?
- WebView is a system library. Users only need to update WebView, or Chrome
- (Android N), depending on how WebView is provided. Apps cannot do anything
- except in #2 above.
-
-Sample Code For Developers to Check WebView Version
-
-Please refer to the source code
-[here](https://github.com/ntfschr-chromium/ct_workaround) for an example app
-that demonstrates how to get the WebView version and ask user to update. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/applescript/index.md b/chromium/docs/website/site/developers/applescript/index.md
deleted file mode 100644
index 78ad79641b3..00000000000
--- a/chromium/docs/website/site/developers/applescript/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: applescript
-title: Information for Third-party Applications on Mac
----
-
-JavaScript injection via AppleScript will soon be disabled by default in Chrome
-stable. We’re making this change in order to protect users from injection of
-unwanted content.
-
-Users who need this functionality can re-enable it by going to the menu bar,
-View &gt; Developer &gt; Allow JavaScript from Apple Events
-
-Alternatively, applications that legitimately need to inject JavaScript into
-Chrome can do so by publishing an[
-extension](https://developer.chrome.com/extensions) and using Native Messaging
-to communicate with their application process. For more information, see[
-https://developer.chrome.com/extensions/nativeMessaging](https://developer.chrome.com/extensions/nativeMessaging)
-
-For automation, developers can also use Telemetry:
-<https://github.com/catapult-project/catapult/blob/master/telemetry/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/bisect-builds-py/index.md b/chromium/docs/website/site/developers/bisect-builds-py/index.md
deleted file mode 100644
index d249f750669..00000000000
--- a/chromium/docs/website/site/developers/bisect-builds-py/index.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: bisect-builds-py
-title: bisect-builds.py
----
-
-Have you ever hit a regression bug like this: *"In chromium 85.0.4183.121,
-things were broken. Back in chromium 86.0.4240.193, it was fine."*? A good way
-to attack bugs like this – where it's unclear what change could have caused the
-regression, but where you have a reliable repro – is to bisect.
-
-tools/bisect-builds.py automates downloading builds of Chrome across a
-regression range, conducting a binary search for the problematic change.
-
-If you don't have a chromium checkout, you can fetch just this script with the
-commands below:
-
-Linux
-
-```none
-curl -s --basic -n "https://chromium.googlesource.com/chromium/src/+/HEAD/tools/bisect-builds.py?format=TEXT" | base64 -d > bisect-builds.py
-```
-
-macOS
-
-```none
-curl -s --basic -n "https://chromium.googlesource.com/chromium/src/+/HEAD/tools/bisect-builds.py?format=TEXT" | base64 -D > bisect-builds.py
-```
-
-Windows (no curl, base64) python2
-
-```none
-python -c "import urllib2; import base64; print base64.b64decode(urllib2.urlopen(\"https://chromium.googlesource.com/chromium/src/+/HEAD/tools/bisect-builds.py?format=TEXT\").read())" > bisect-builds.py
-```
-
-Note: Bisect builds works with Python 2 or 3.
-
-Run it like this:
-
-<pre><code>python tools/bisect-builds.py -a <i>platform</i> -g <i>good-revision</i> -b <i>bad-revision</i> -- <i>flags-for-chrome</i>
-</code></pre>
-
-For example,
-
-```none
-python tools/bisect-builds.py -a mac -g 782793 -b 800218 --use-local-cache --verify-range -- --no-first-run --user-data-dir=/tmp http://example.com
-```
-
-Alternately, if bisecting between stable releases you can specify either end of
-the bisect range using milestone numbers, like this:
-
-```none
-python tools/bisect-builds.py -a mac -g M85 -b M86 --use-local-cache --verify-range
-```
-
-Finally, you can specify either end of the bisect range using version numbers.
-
-```none
-python tools/bisect-builds.py -a mac -g 85.0.4183.121 -b 86.0.4240.193 --use-local-cache --verify-range
-```
-
-The three range specifications above are equivalent. Note that in all cases the
-bisect is being done from trunk builds so merges to a release branch will not be
-bisected.
-
-Valid archive types (the -a parameter) are `mac, mac64, win, win64, linux (not
-supported for builds after March 2016), linux64, linux-arm, and chromeos`.
-
-You can also use the `-p` option to specify a profile. If no `-p` or
-`--user-data-dir` option is specified, a new profile will be created in a
-temporary directory each time you are asked to try a build. If you specify a
-profile folder, point to the directory that's a parent of Default/.
-
-The script will download a build in the revision range and execute it. You must
-then manually check if the bug still repros. Quit Chromium, and the script will
-ask you if the bug reproduced or not. It will use your answer to drive a binary
-search, and after just a few steps it will tell you "this regression happened
-somewhere between revisions 793241 and 793248". From that list, it's usually
-easy to spot the offending CL. If you're adding the range as a comment to a bug,
-please always paste the output from bisect-builds.py, as this includes links to
-the chromium changes in the regression range.
-
-View code changes in revision range with this useful URL (replacing SUCCESS_REV
-and FAILURE_REV with the range start and end):
-
-<https://test-results.appspot.com/revision_range?start=SUCCESS_REV&end=FAILURE_REV>
-
-**Notes:** For internal usage, we also enable bisect builds by commits. Please
-refer to [internal
-doc](https://sites.google.com/a/google.com/chrome-te/home/tools/bisect_builds)
-for more information.
-
-**Getting an initial revision range**
-
-If you have two Chrome binaries, one which doesn't work, one which does, you can
-find their revision numbers as follows.
-
-First, visit the [chrome://version](javascript:void(0);) page and copy the
-version number (for example 85.0.4183.121). Then, use this version number as the
-parameter to -g or -b. Alternately you can use stable-release milestone numbers
-(M85, M86) or look in git commit messages for "Cr-Commit-Position:
-refs/heads/master@{{ '{%' }}825204}".
-
-### Verifying the range
-
-If your revision range is incorrect, or if something about your environment
-interferes with your reproduction of the bug, you will not get useful results
-from bisect-builds.py. If you would prefer to know this as soon as possible,
-rather than after downloading and checking O(log n) builds, pass the
-**--verify-range** option to bisect-builds.py. This will check the first and
-last builds in the range before starting the bisect.
-
-### If Pepper Flash is required to repro
-
-You will have to locate a Flash binary from an official build. If you suspect a
-Chromium change causing the regression and the Flash version doesn't matter
-locate any binary on your machine. For instance:
-
-```none
-./bisect-builds.py -f /opt/google/chrome/PepperFlash/libpepflashplayer.so -b 232915 -g 230425 -a linux64
-```
-
-```none
-python bisect-builds.py -f "C:\Program Files (x86)\Google\Chrome\Application\31.0.1650.39\PepperFlash\pepflashplayer.dll" -b 232915 -g 230425 -a win
-```
-
-```none
-./bisect-builds.py -f "/Applications/Google Chrome.app/Contents/Versions/33.0.1707.0/Google Chrome Framework.framework/Internet Plug-Ins/PepperFlash/PepperFlashPlayer.plugin" -b 232915 -g 230425 -a mac
-```
-
-**API Keys and Chrome OS builds**
-
-Without API keys, Chrome OS won't allow you to log in as a specific user. To run
-a chromeos bisect on your Linux desktop, add the following variables to your
-environment (e.g., via .bashrc):
-
-GOOGLE_API_KEY=&lt;key&gt;
-
-GOOGLE_DEFAULT_CLIENT_ID=&lt;id&gt;
-
-GOOGLE_DEFAULT_CLIENT_SECRET=&lt;secret&gt;
-
-See <https://www.chromium.org/developers/how-tos/api-keys> for more info about
-API keys.
-
-**Bisecting Per-Revision Builds (Googlers Only)**
-
-The -o and -r options available in the internal version of the script allow
-tighter bisects. Google employees should visit
-[go/bisect-builds](https://goto.google.com/bisect-builds) for configuration
-instructions.
diff --git a/chromium/docs/website/site/developers/blink-gc-plugin-errors/index.md b/chromium/docs/website/site/developers/blink-gc-plugin-errors/index.md
deleted file mode 100644
index 37c608fdc2b..00000000000
--- a/chromium/docs/website/site/developers/blink-gc-plugin-errors/index.md
+++ /dev/null
@@ -1,509 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: blink-gc-plugin-errors
-title: Blink GC Plugin Errors
----
-
-## Introduction
-
-With the addition of the new Blink garbage collection infrastructure we have
-created a clang compiler plugin to statically check various conditions are met.
-This page documents what conditions are checked, which error a failed condition
-will raise and how the error might be fixed.
-
-All diagnostics produced by the checker are prefixed with \[blink-gc\].
-
-## Tracing Errors
-
-All members of a class must be traced in order to ensure that the GC system does
-not reclaim their storage space. Thus, if a class contains any fields that need
-to be traced (ie, the field is either a GC managed object or it also contains
-fields that need to be traced), then the class must implement a trace method to
-do so.
-
-If you get the error:
-
-* Class 'Foo' requires a trace method because it contains fields that
- require tracing.
-
-then your class/struct contains fields that need to be traced and you must
-define a trace method doing so. The plugin will provide a note describing which
-fields that need to be traced. A problematic class might look like:
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-Baz\* getTheBaz() { return m_baz; }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-This is fixed by defining a trace method and tracing the field m_baz:
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-Baz\* getTheBaz() { return m_baz; }
-
-virtual void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-If you get the error:
-
-* Class 'Foo' overrides non-virtual trace of base class 'Bar'.
-
-then your class/struct has overridden a non-virtual trace method of a base class
-and the base class should either be virtual or the hierarchy needs to implement
-manual trace dispatching (see the section on Dispatch Errors below).
-
-If you get the errors:
-
-* Base class 'Foo' of derived class 'Bar' requires tracing.
-* Class 'Bar' has untraced fields that require tracing.
-
-then your class/struct has a trace method, but it does not trace all of the
-required parts. The base class tracing ensures that fields declared in base
-classes are traced. The plugin will provide a note describing which fields that
-need to be traced. A problematic class might look like:
-
-class Bar : public Foo {
-
-public:
-
-Baz\* getTheOtherBaz() { return m_otherBaz; }
-
-void trace(Visitor\* visitor) { }
-
-private:
-
-Member&lt;Baz&gt; m_otherBaz;
-
-};
-
-This is fixed by tracing Foo and m_otherBaz:
-
-class Bar : public Foo {
-
-public:
-
-Baz\* getTheOtherBaz() { return m_otherBaz; }
-
-void trace(Visitor\* visitor)
-
-{
-
-visitor-&gt;trace(m_otherBaz);
-
-Foo::trace(visitor);
-
-}
-
-private:
-
-Member&lt;Baz&gt; m_otherBaz;
-
-};
-
-## Field Errors
-
-In order to ensure proper tracing, each field of a class is checked against some
-correctness requirements described below.
-
-If you get the errors:
-
-* Class 'Foo' contains invalid fields.
-* Class 'Foo' contains GC root in field 'm_bar'.
-
-then your class/struct contains problematic fields. If a field points to a GC
-allocated object then it should be in a Member, so if the field is currently a
-raw pointer, RefPtr or OwnPtr, it should be changed to a Member or WeakMember
-and properly traced. A problematic class might look like:
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-Baz\* getTheBaz() { return m_baz; }
-
-private:
-
-OwnPtr&lt;Baz&gt; m_baz;
-
-};
-
-Here Baz is a GC allocated type and the issue is fixed by replacing the OwnPtr
-by Member and tracing the field:
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-Baz\* getTheBaz() { return m_baz; }
-
-virtual void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-Another type of invalid field is the embedding of or a pointer to a
-stack-allocated object from within A GC allocated object. This is simply not
-permitted and the containing class must also be stack allocated or the
-stack-allocated object must become GC allocated.
-
-If a field inside a GC allocated object either defines a GC root (ie, Persistent
-or PersistentHeapXXX collection) or embeds a GC root via a part object, then we
-likely have a memory leak. In this case the Persistent should be replaced by a
-properly traced Member. A problematic case might look like:
-
-class Part {
-
-DISALLOW_ALLOCATION();
-
-public:
-
-Baz\* getTheBaz() { return m_baz; }
-
-private:
-
-Persistent&lt;Baz&gt; m_baz;
-
-};
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-Baz\* getTheBaz() { return m_part.getTheBaz(); }
-
-private:
-
-Part m_part;
-
-};
-
-Here Part is used as a part object of Foo and it contains a Persistent pointer
-to Baz. To fix the issue the Persistent should be replaced by Member and Part
-should be traced:
-
-class Part {
-
-DISALLOW_ALLOCATION();
-
-public:
-
-Baz\* getTheBaz() { return m_baz; }
-
-void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-Baz\* getTheBaz() { return m_part.getTheBaz(); }
-
-virtual void trace(Visitor\* visitor) { visitor-&gt;trace(m_part); }
-
-private:
-
-Part m_part;
-
-};
-
-## Finalization Errors
-
-When an object is allocated on the GC managed heap it might need finalization
-support. Objects that derive a GC base with finalization support will be
-finalized on the first GC where they have become unreachable. Thus the
-finalization time (ie, time of destruction) is not known in advance. By default
-finalization of an object will call the objects destructor. If a class does not
-have finalization support its destructor will never be called. The existence of
-destructors that are never called can hide subtle bugs and so we check agains
-this with the GC plugin. The basic rule is that a class with a "non-trivial
-destructor" must have finalization support. A class has a trivial destructor if
-and only if the destructor is the default generated destructor and all of the
-class bases and members have trivial destructors.
-
-If you get the error:
-
-* Class 'Foo' requires finalization.
-
-then your class/struct has a "non-trivial finalizer" and therefore needs to
-inherit from a finalized GC base class, such as, GarbageCollectedFinalized. The
-plugin will try to emit notes about which bases, members and destructors are
-causing the class to have a non-trivial finalizer. For example:
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-~Foo();
-
-};
-
-will issue a note about a "user-declared destructor". The destructor can then
-either be removed or finalization support can be added to the class:
-
-class Foo : public GarbageCollectedFinalized&lt;Foo&gt; {
-
-public:
-
-~Foo();
-
-};
-
-If you get the error:
-
-* Finalizer '~Foo' accesses potentially finalized field 'm_baz'.
-
-then your finalizer is accessing a field of Foo that might be finalized in the
-same GC round. In other words, the object pointed to by m_baz might already be
-reclaimed by the GC. For example:
-
-class Foo : public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-~Foo { m_baz-&gt;doSomeCleanup(); }
-
-void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-needs to be changed to perform the cleanup of baz in some other way dependent on
-the concrete situation. Maybe the cleanup code can be moved into the
-finalization of Baz.
-
-## Dispatch Errors
-
-Some places in the Blink code base avoid introducing a vtable for a class
-hierarchy, such as the CSSValue class hierarchy. In such cases the programmer
-needs to define the dispatch methods manually.
-
-If you get the errors:
-
-* Class 'Foo' is missing manual trace dispatch.
-* Class 'Foo' is missing manual finalization dispatch.
-
-your class needs to define a trace method and/or a
-finalizeGarbageCollectedObject method to perform the manual dispatch.
-
-If you get the errors:
-
-* Class 'Foo' contains or inherits virtual methods but implements
- manual dispatching.
-
-your class has implemented manual dispatch but might be able to simply have a
-virtual trace and destructor.
-
-If you get the errors:
-
-* Missing dispatch to class 'Bar' in manual trace dispatch.
-* Missing dispatch to class 'Bar' in manual finalize dispatch.
-
-then the derived class 'Bar' is not dispatched to from the manually implemented
-dispatch.
-
-## Derived Class Errors
-
-If you get the error:
-
-* Class 'Foo' must derive its GC base in the left-most position.
-
-then the class Foo inherits from a GC base, but does so incorrectly. To ensure
-that the vtable entry and GC meta data of a class is mapped to a reliable
-location in memory, we require that the GC base is always inherited in the
-left-most position in the super-class declarations. For example:
-
-class Foo : public Bar, public GarbageCollected&lt;Foo&gt; {
-
-public:
-
-void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-needs to swap the position of Bar and the GC base:
-
-class Foo : public GarbageCollected&lt;Foo&gt;, public Bar {
-
-public:
-
-void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-The same is true if the GC base is inherited from some other derived class, say
-Baz, then the super-class declaration of Baz must be in the left-most position.
-
-If you get the error:
-
-* Left-most base class 'Bar' of derived class 'Foo' must be
- polymorphic.
-* Left-most base class 'Bar' of derived class 'Foo' must define a
- virtual trace method.
-
-then the base class 'Bar' needs to be polymorphic and if 'Foo' has a virtual
-trace method then it must be declared virtual in 'Bar'. The requirement is to
-ensure that the GC have a consistent view of a vtable/virtual-trace even if a GC
-happens while an object is only partially constructed. In both cases, the
-typical fix will simply be to define a virtual trace in 'Bar', override it in
-'Foo' and trace the super class there. For example:
-
-class Bar : public GarbageCollected&lt;Bar&gt; {
-
-public:
-
-Bar(); // could potentially trigger a GC.
-
-};
-
-class Foo : public Bar {
-
-public:
-
-virtual void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-needs to define trace in 'Bar' and trace it in 'Foo':
-
-class Bar : public GarbageCollected&lt;Bar&gt; {
-
-public:
-
-Bar();
-
-virtual void trace(Visitor\*) { }
-
-};
-
-class Foo : public Bar {
-
-public:
-
-void trace(Visitor\* visitor)
-
-{
-
-visitor-&gt;trace(m_baz);
-
-Bar::trace(visitor);
-
-}
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-If you get the error:
-
-* Stack-allocated class 'Foo' derives class 'Bar' which is not stack
- allocated
-
-then either class Foo can not be annotated as "stack allocated", or class Bar
-must be annotated "stack allocated" and used as such. A stack allocated class
-cannot be new'ed, ie, allocated on the managed heap or using any other kind of
-allocator. For example:
-
-class Bar {
-
-public:
-
-void someMethod();
-
-};
-
-class Foo : public Bar {
-
-STACK_ALLOCATED();
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-needs to either make Bar stack allocated:
-
-class Bar {
-
-STACK_ALLOCATED();
-
-public:
-
-void someMethod();
-
-};
-
-class Foo : public Bar {
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-};
-
-Notice that the stack allocated annotation is inherited and that a stack
-allocated object does not need to define a trace method: its pointers are found
-conservatively on the stack.
-
-Alternatively, Foo can be made GC allocated:
-
-class Bar {
-
-public:
-
-void someMethod();
-
-};
-
-class Foo : public GarbageCollected&lt;Foo&gt;, public Bar {
-
-public:
-
-void trace(Visitor\* visitor) { visitor-&gt;trace(m_baz); }
-
-private:
-
-Member&lt;Baz&gt; m_baz;
-
-}; \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/calendar/Chrome RC.png.sha1 b/chromium/docs/website/site/developers/calendar/Chrome RC.png.sha1
deleted file mode 100644
index df4229f6cea..00000000000
--- a/chromium/docs/website/site/developers/calendar/Chrome RC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-07679a5246073695665184a6928cb2f816635bd0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/calendar/Chrome RCX.png.sha1 b/chromium/docs/website/site/developers/calendar/Chrome RCX.png.sha1
deleted file mode 100644
index 46e172b5f96..00000000000
--- a/chromium/docs/website/site/developers/calendar/Chrome RCX.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1d90552a6b4610e0205b0340a9d685a0c20578ba \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/calendar/Chrome Release Cycle 6.png.sha1 b/chromium/docs/website/site/developers/calendar/Chrome Release Cycle 6.png.sha1
deleted file mode 100644
index 322aeccf305..00000000000
--- a/chromium/docs/website/site/developers/calendar/Chrome Release Cycle 6.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ee1bc540a2d997476f11237c14918b8749321440 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/calendar/index.md b/chromium/docs/website/site/developers/calendar/index.md
deleted file mode 100644
index 434a574effe..00000000000
--- a/chromium/docs/website/site/developers/calendar/index.md
+++ /dev/null
@@ -1,542 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: calendar
-title: Chromium Development Calendar and Release Info
----
-
-**For the latest details, please see:**
-<https://chromiumdash.appspot.com/schedule>
-
-## Branch Points
-
-**2020**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (End of Day Thursday, Pacific Time)</b></td>
-</tr>
-<tr>
-<td>80</td>
-<td> Dec 5, 2019</td>
-</tr>
-<tr>
-<td>81</td>
-<td> Jan 30, 2020</td>
-</tr>
-<tr>
-<td>82</td>
-<td> *Skipped (\*\*)*</td>
-</tr>
-<tr>
-<td>83</td>
-<td> Apr 2, 2020</td>
-</tr>
-<tr>
-<td>84</td>
-<td> May 14, 2020</td>
-</tr>
-<tr>
-<td>85</td>
-<td> Jun 25, 2020</td>
-</tr>
-<tr>
-<td>86</td>
-<td> Aug 20, 2020</td>
-</tr>
-<tr>
-<td>87</td>
-<td> Oct 1, 2020</td>
-</tr>
-<tr>
-<td>88</td>
-<td> Nov 12, 2020</td>
-</tr>
-</table>
-
-**2019**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (End of Day Thursday, Pacific Time)</b></td>
-</tr>
-<tr>
-<td>73</td>
-<td> Jan 24th, 2019</td>
-</tr>
-<tr>
-<td>74</td>
-<td> Mar 7th, 2019</td>
-</tr>
-<tr>
-<td>75</td>
-<td> Apr 18th, 2019</td>
-</tr>
-<tr>
-<td>76</td>
-<td> May 30th, 2019</td>
-</tr>
-<tr>
-<td>77</td>
-<td> Jul 25th, 2019</td>
-</tr>
-<tr>
-<td>78</td>
-<td> Sept 5th, 2019</td>
-</tr>
-<tr>
-<td>79</td>
-<td> Oct 17th, 2019</td>
-</tr>
-<tr>
-</tr>
-</table>
-
-**Estimated\* Stable Dates**
-
-*\*These dates are subject to change without advance notice and provided here
-only for rough planning purposes. New bugs, security incidents, holiday
-schedules, partner dependencies and process changes can all affect these dates
-and move it in either direction. The date only estimates the week of 1st stable
-push of a release – it does not imply that all end points will be updated by
-this week.*
-
-**2020**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b>Estimated Week of Stable</b></td>
-</tr>
-<tr>
-<td>80</td>
-<td> Feb 4, 2020</td>
-</tr>
-<tr>
-<td>81</td>
-<td> Mar 17, 2020</td>
-</tr>
-<tr>
-<td>82</td>
-<td> *Skipped (\*\*)*</td>
-</tr>
-<tr>
-<td>83</td>
-<td> May 19, 2020</td>
-</tr>
-<tr>
-<td>84</td>
-<td> Jul 14, 2020</td>
-</tr>
-<tr>
-<td>85</td>
-<td> Aug 25, 2020</td>
-</tr>
-<tr>
-<td>86</td>
-<td> Oct 6, 2020</td>
-</tr>
-<tr>
-<td>87</td>
-<td> Nov 17, 2020</td>
-</tr>
-<tr>
-<td>88</td>
-<td> Jan 19, <b>2021</b></td>
-</tr>
-</table>
-
-**2019**
-
-<table>
-<tr>
-<td><b> Release </b></td>
-<td><b> Estimated Week of Stable</b></td>
-</tr>
-<tr>
-<td>72</td>
-<td> Jan 29th, 2019 (Feb 5th for Chrome OS)</td>
-</tr>
-<tr>
-<td>73</td>
-<td> Mar 12th, 2019 (Mar 19th for Chrome OS)</td>
-</tr>
-<tr>
-<td>74</td>
-<td> April 23rd, 2019 (April 30th for Chrome OS)</td>
-</tr>
-<tr>
-<td>75</td>
-<td> June 4th, 2019 (June 11th for Chrome OS)</td>
-</tr>
-<tr>
-<td>76</td>
-<td> July 30th, 2019 (Aug 6th for Chrome OS)</td>
-</tr>
-<tr>
-<td>77</td>
-<td> Sept 10th, 2019 (Sept 17th for Chrome OS)</td>
-</tr>
-<tr>
-<td>78</td>
-<td> Oct 22nd, 2019 (Oct 29th for Chrome OS) </td>
-</tr>
-<tr>
-<td>79</td>
-<td> Dec 10th, 2019 (Dec 17th for Chrome OS) </td>
-</tr>
-</table>
-
-**2018**
-
-<table>
-<tr>
-<td><b> Release </b></td>
-<td><b> Estimated Week of Stable</b></td>
-</tr>
-<tr>
-<td>64</td>
-<td> Jan 23rd, 2018 (Jan 30th for Chrome OS)</td>
-</tr>
-<tr>
-<td>65</td>
-<td> Mar 6th, 2018 (Mar 13th for Chrome OS)</td>
-</tr>
-<tr>
-<td>66</td>
-<td> April 17th, 2018 (April 24th for Chrome OS)</td>
-</tr>
-<tr>
-<td>67</td>
-<td> May 29th, 2018 (June 5th for Chrome OS)</td>
-</tr>
-<tr>
-<td>68</td>
-<td> July 24th, 2018 (July 31st for Chrome OS)</td>
-</tr>
-<tr>
-<td>69</td>
-<td> Sept 4th, 2018 (Sept 11th for Chrome OS)</td>
-</tr>
-<tr>
-<td>70</td>
-<td> Oct 16th, 2018 (Oct 23rd for Chrome OS) </td>
-</tr>
-<tr>
-<td>71</td>
-<td> Dec 4th, 2018 (Dec 11th for Chrome OS) </td>
-</tr>
-</table>
-
-Current Release Information
-
-<img alt="image"
-src="http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D499'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Include+gadget+(iframe)%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D500'%3D297'dim'%5C%3D10'%3D10'%3D500'%3D297'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&sig=IJSw0xKlnAnXVyv4GW_C-D4_x8o"
-height=300 width=500>
-
-*(\*\*) Note: M82 was skipped, and M83 and beyond dates were adjusted due to
-COVID-19 accommodations; see
-[here](https://chromereleases.googleblog.com/2020/03/chrome-and-chrome-os-release-updates.html)
-for more details.*
-
-## Previous Release Information
-
-* To check from which revision a certain build is released,
- changelogs, etc:
- <https://omahaproxy.appspot.com>
-
-### **Previous Branch Points**
-
-**2018**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (End of Day Thursday, Pacific Time)</b></td>
-</tr>
-<tr>
-<td>65</td>
-<td> Jan 18th, 2018</td>
-</tr>
-<tr>
-<td>66</td>
-<td> Mar 1st, 2018</td>
-</tr>
-<tr>
-<td>67</td>
-<td> Apr 12th, 2018</td>
-</tr>
-<tr>
-<td>68</td>
-<td> May 24th, 2018</td>
-</tr>
-<tr>
-<td>69</td>
-<td> Jul 19th, 2018</td>
-</tr>
-<tr>
-<td>70</td>
-<td> Aug 30th, 2018</td>
-</tr>
-<tr>
-<td>71</td>
-<td> Oct 11th, 2018</td>
-</tr>
-<tr>
-<td>72</td>
-<td> Nov 29th, 2018</td>
-</tr>
-</table>
-
-**2017**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (End of Day Thursday, Pacific Time)</b></td>
-</tr>
-<tr>
-<td>56</td>
-<td> Nov 17th, 2016</td>
-</tr>
-<tr>
-<td>57</td>
-<td> Jan 19th, 2017</td>
-</tr>
-<tr>
-<td>58</td>
-<td> Mar 2nd, 2017</td>
-</tr>
-<tr>
-<td>59</td>
-<td> Apr 13th, 2017</td>
-</tr>
-<tr>
-<td>60</td>
-<td> May 25th, 2017</td>
-</tr>
-<tr>
-<td>61</td>
-<td> Jul 20th, 2017</td>
-</tr>
-<tr>
-<td>62</td>
-<td> Aug 31st, 2017</td>
-</tr>
-<tr>
-<td>63</td>
-<td> Oct 12th, 2017</td>
-</tr>
-<tr>
-<td>64</td>
-<td> Nov 30th, 2017 </td>
-</tr>
-</table>
-
-**2016**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (End of Day Thursday)</b></td>
-</tr>
-<tr>
-<td>49</td>
-<td> Jan 15th, 2016</td>
-</tr>
-<tr>
-<td>50</td>
-<td> Feb 26th, 2016</td>
-</tr>
-<tr>
-<td>51</td>
-<td> Apr 8th, 2016</td>
-</tr>
-<tr>
-<td>52</td>
-<td> May 19th, 2016</td>
-</tr>
-<tr>
-<td>53</td>
-<td> Jun 30th, 2016</td>
-</tr>
-<tr>
-<td>54</td>
-<td> Aug 25th, 2016</td>
-</tr>
-<tr>
-<td>55</td>
-<td> Oct 6th, 2016</td>
-</tr>
-<tr>
-<td>56</td>
-<td> Nov 17th, 2016</td>
-</tr>
-</table>
-
-**2015**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (End of Day Friday)</b></td>
-</tr>
-<tr>
-<td>41</td>
-<td> Jan 9th, 2015</td>
-</tr>
-<tr>
-<td>42</td>
-<td> Feb 20th, 2015</td>
-</tr>
-<tr>
-<td>43</td>
-<td> Apr 3rd, 2015</td>
-</tr>
-<tr>
-<td>44</td>
-<td> May 15th, 2015</td>
-</tr>
-<tr>
-<td>45</td>
-<td> Jul 10th, 2015</td>
-</tr>
-<tr>
-<td>46</td>
-<td> Aug 21st, 2015</td>
-</tr>
-<tr>
-<td>47</td>
-<td> Oct 2nd, 2015</td>
-</tr>
-<tr>
-<td>48</td>
-<td> Nov 13th, 2015</td>
-</tr>
-</table>
-
-**2014**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point</b></td>
-</tr>
-<tr>
-<td>33</td>
-<td> Dec 16th, 2013</td>
-</tr>
-<tr>
-<td>34</td>
-<td> Feb 17th, 2014</td>
-</tr>
-<tr>
-<td>35</td>
-<td> Mar 31st, 2014</td>
-</tr>
-<tr>
-<td>36</td>
-<td> May 9th, 2014</td>
-</tr>
-<tr>
-<td>37</td>
-<td> Jun 20th, 2014</td>
-</tr>
-<tr>
-<td>38</td>
-<td> Aug 15th, 2014</td>
-</tr>
-<tr>
-<td>39</td>
-<td> Sep 26th, 2014</td>
-</tr>
-<tr>
-<td>40</td>
-<td> Nov 7th, 2014</td>
-</tr>
-</table>
-
-**2013**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (Monday of the week)</b></td>
-</tr>
-<tr>
-<td>26</td>
-<td> Feb 11th, 2013</td>
-</tr>
-<tr>
-<td>27</td>
-<td> Mar 25th, 2013</td>
-</tr>
-<tr>
-<td>28</td>
-<td> May 6th, 2013</td>
-</tr>
-<tr>
-<td>29</td>
-<td> Jun 24th, 2013</td>
-</tr>
-<tr>
-<td>30</td>
-<td> Aug 12th, 2013</td>
-</tr>
-<tr>
-<td>31</td>
-<td> Sept 23rd, 2013</td>
-</tr>
-<tr>
-<td>32</td>
-<td> Nov 4th, 2013</td>
-</tr>
-</table>
-
-**2012**
-
-<table>
-<tr>
-<td><b> Release</b></td>
-<td><b> Week of Branch Point (Monday of the week)</b></td>
-</tr>
-<tr>
-<td>17</td>
-<td> Dec 5th, 2011</td>
-</tr>
-<tr>
-<td>18</td>
-<td> Jan 30th, 2012</td>
-</tr>
-<tr>
-<td>19</td>
-<td> Mar 26th, 2012</td>
-</tr>
-<tr>
-<td>20</td>
-<td> May 7th, 2012</td>
-</tr>
-<tr>
-<td>21</td>
-<td> Jun 18th, 2012</td>
-</tr>
-<tr>
-<td>22</td>
-<td> Aug 6th, 2012</td>
-</tr>
-<tr>
-<td>23</td>
-<td> Sept 17th, 2012</td>
-</tr>
-<tr>
-<td>24</td>
-<td> Oct 29th, 2012</td>
-</tr>
-<tr>
-<td>25</td>
-<td> Dec 17th, 2012</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/change-logs/index.md b/chromium/docs/website/site/developers/change-logs/index.md
deleted file mode 100644
index 257c4abd6ad..00000000000
--- a/chromium/docs/website/site/developers/change-logs/index.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: change-logs
-title: Viewing change logs for Chromium and Blink
----
-
-## The way to generate change logs for Chromium is via gitiles. The format of the URLs is as follows:
-
-https://chromium.googlesource.com/chromium/src/+log/oldhash..newhash?pretty=full
-
-"pretty" can be left off. Options are "full" and "fuller".
-
-* [Example changelog without pretty
- option](https://chromium.googlesource.com/chromium/src/+log/a436b4f19b34bc9ae667530d7cf38916b8237172..ca100d5970b0d0b9a3af96d180f5ea2862227a48)
-* [Example changelog with
- pretty=full](https://chromium.googlesource.com/chromium/src/+log/a436b4f19b34bc9ae667530d7cf38916b8237172..ca100d5970b0d0b9a3af96d180f5ea2862227a48?pretty=full)
-* [Example changelog with
- pretty=fuller](https://chromium.googlesource.com/chromium/src/+log/a436b4f19b34bc9ae667530d7cf38916b8237172..ca100d5970b0d0b9a3af96d180f5ea2862227a48?pretty=fuller)
-
-JSON format queries:
-
-* add format=JSON to any query (note the ALL CAPS). E.g.:
- <https://chromium.googlesource.com/chromium/src/+log/main?pretty=full&format=JSON>
-* The "next" key inside JSON provides a cursor for the next page. Use
- it with s=&lt;next_cursor&gt;, e.g.
- <https://chromium.googlesource.com/chromium/src/+log/main?pretty=full&s=baa385c24c57df62f64a5f1fecee739dc2dcc3ba>
- * The last page will have no "next" key. Also any page except for
- the first will have a "previous" cursor to page backwards.
-* Page size: e.g. n=1000:
- <https://chromium.googlesource.com/chromium/src/+log/main?pretty=full&format=JSON&n=1000>
-
-Note, that JSON format has a ")\]}'" line at the top, to prevent cross-site
-scripting. When parsing, assert that the first line has ")\]}'", strip it, and
-parse the rest of JSON normally.
diff --git a/chromium/docs/website/site/developers/checkstyle/index.md b/chromium/docs/website/site/developers/checkstyle/index.md
deleted file mode 100644
index 5c7094b1aa9..00000000000
--- a/chromium/docs/website/site/developers/checkstyle/index.md
+++ /dev/null
@@ -1,160 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: checkstyle
-title: Checkstyle
----
-
-> *Checkstyle is a development tool to help programmers write Java code that
-> adheres to a coding standard. It automates the process of checking Java code
-> to spare humans of this boring (but important) task. This makes it ideal for
-> projects that want to enforce a coding standard.
-> (*<http://checkstyle.sourceforge.net/>)
-
-**Eclipse**
-
-1. (Package Explorer) Right click and click 'Refresh'
-2. Help-&gt;Install New Software...
-3. Work with -&gt; Add: http://eclipse-cs.sourceforge.net/update
-4. Type 'Checkstyle' into the search box
-5. Select 'Checkstyle' and click-through next
-6. (Menu bar) Window-&gt;Preferences-&gt;Checkstyle-&gt;New
-7. Under 'Type' select 'Project Relative Configuration'
-8. Under 'Name' enter 'chromium-style-5.0'
-9. Click browse and navigate to
- tools/android/checkstyle/chromium-style-5.0.xml
-10. Click OK
-11. (Package Explorer) Right click project -&gt; Properties -&gt;
- Checkstyle
-12. Under "Simple - use the following check configuration for all files"
- select 'chromium-style-5.0'
-13. (Recommended) Under 'Exclude from checking...' Select:
- * files outside source directories
- * files not opened in editor
-
-**Eclim**
-
-1. cd &lt;path&gt;/&lt;to&gt;/&lt;eclimd&gt; (e.g.
- ...../eclipse43/stable/)
-2. find . -name 'checkstyle\*.jar' | grep eclim
-3. The latest version (as of 10/17/2014) is 5.8. If you have an older
- version (e.g. checkstyle-5.6.jar, checkstyle-5.5.jar) follow the
- update steps.
-
-*Update checkstyle jar*
-
-1. Follow Eclipse steps #2 through #5
-2. find . -name 'checkstyle-5.8.jar'
-3. Copy that jar into the same directory as the old one.
-4. vim ./plugins/org.eclim.jdt_2.3.2/META-INF/MANIFEST.MF (jdt version
- number may be different)
-5. Under 'Bundle-ClassPath' edit the old checkstyle\*.jar version
- number to the new one.
-6. Restart eclimd
-
-*Configure Eclim*
-
-1. Open vim and enter :EclimSettings
-2. Find the line org.eclim.java.checkstyle.config=
-3. Append
- /your/project/path/src/tools/android/checkstyle/chromium-style-5.0.xml
-4. Open a Java file and enter :Checkstyle to verify it works
-5. (Optional) Add the following to your vimrc:
-
-> > " Run Checkstyle on open/write
-
-> > autocmd BufWinEnter \*.java :Checkstyle
-
-> > autocmd BufWritePost \*.java :Checkstyle
-
-**Emacs**
-
-You can use the built-in flymake to run the checkstyle in the background as you
-edit your file. Add this to your ~/.emacs file and change the path to the jar
-and conf
-
-;; Check style of Java files.
-
-(require 'flymake)
-
-(add-hook 'find-file-hook 'flymake-find-file-hook)
-
-(defun flymake-java-init ()
-
-(let\* ((temp-file (flymake-init-create-temp-buffer-copy
-
-'flymake-create-temp-inplace))
-
-(local-file (file-relative-name
-
-temp-file
-
-(file-name-directory buffer-file-name))))
-
-(list "java"
-
-(list "-cp"
-
-(expand-file-name "~/.emacs.d/checkstyle-5.9-SNAPSHOT-all.jar")
-
-"com.puppycrawl.tools.checkstyle.Main"
-
-"-c"
-
-(expand-file-name "~/.emacs.d/chromium-style-5.0.xml")
-
-local-file))))
-
-(setq flymake-allowed-file-name-masks
-
-(cons '(".+\\\\.java$"
-
-flymake-java-init
-
-flymake-simple-cleanup
-
-flymake-get-real-file-name)
-
-flymake-allowed-file-name-masks))
-
-(setq flymake-err-line-patterns
-
-(cons '("\\\\(.\*\\\\.java\\\\):\\\\(\[0-9\]+\\\\):\[0-9\]+: \\\\(.+\\\\)" 1 2
-nil 3)
-
-flymake-err-line-patterns))
-
-;; Check \*Message\* buffer for errors. If you don't find any, you can remove
-this line.
-
-(setq flymake-log-level 3)
-
-Flymake will underline lines with errors and warnings. In GUI mode, Emacs will
-show a tooltip when you hover your mouse over the underlined lines. Setup a
-shortcut to go to the next error:
-
-;; Go through flymake errors with F4. Show the tooltip with F3. (Tooltips work
-only in GUI mode.)
-
-(global-set-key \[f4\] 'flymake-goto-next-error)
-
-(global-set-key \[f3\] 'flymake-display-err-menu-for-current-line)
-
-You can use the built-in C-h . (Control-h period) shortcut to show the error
-from the current line in the minibuffer when in running Emacs in a terminal.
-Alternatively, you can configure Emacs to show the error in the minibuffer after
-a short delay of your cursor being in that line:
-
-;; Display errors in the minibuffer after a short delay.
-
-(setq help-at-pt-display-when-idle t)
-
-(setq help-at-pt-timer-delay 0.2)
-
-(help-at-pt-set-timer)
-
-**Limitations**
-
-Does not support double indentation levels for line-wrap which may generate
-spurious warnings. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/chromium-string-usage/index.md b/chromium/docs/website/site/developers/chromium-string-usage/index.md
deleted file mode 100644
index b84e46e1944..00000000000
--- a/chromium/docs/website/site/developers/chromium-string-usage/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: chromium-string-usage
-title: Chromium String usage
----
-
-Types of Strings
-In the Chromium code base, we use std::string and std::u16string. Blink uses
-WTF::String instead, which is patterned on std::string, but is a slightly
-different class (see the
-[docs](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/wtf/text/README.md)
-for their guidelines, we’ll only talk about Chromium here). We also have a
-StringPiece\[16\] class, which is basically a pointer to a string that is owned
-elsewhere with a length of how many characters from the other string form this
-“token”. Finally, there is also WebCString and WebString, which is used by the
-webkit glue layer.
-String Encodings
-We use a variety of encodings in the code base. UTF-8 is most common, but we
-also use ASCII and UTF-16.
-
-* ASCII is the older 7-bit encoding which includes 0-9, a-z, A-Z, and
- a few common punctuation characters, but not much else. ASCII text
- (common in HTML, CCS, and JavaScript) uses one byte per character.
-* UTF-8 is an encoding where characters are one or more bytes (up to
- 6) in length. Each byte indicates whether another byte follows. All
- ASCII characters are UTF-8 characters, so code that works correctly
- with UTF-8 will handle ASCII.
-* UTF-16 is an encoding where all characters are at least two bytes
- long. There are also four-byte UTF-16 characters (a pair of two
- 16-bit code units, called a "surrogate pair"). Common cases of
- 4-byte characters include most Emoji as well as some Chinese
- characters.
-* **UTF-32** is an encoding where all characters are four bytes long.
-
-When to use which encoding
-The most important rule here is the meta-rule, code in the style of the
-surrounding code. In the frontend, we use std::string/char for UTF-8 and
-std::u16string16/char16_t for UTF-16 on all platforms. Even though std::string
-is encoding agnostic, we only put UTF-8 into it. std::wstring/wchar_t is rarely
-used in cross-platform code (in part because it's differently-sized on different
-platforms), but common in Windows-specific code to interface with native APIs
-(which often take wchar_t\* or similar). Most UI strings are UTF-16. URLs are
-generally UTF-8. Strings in the webkit glue layer are typically UTF-16 with
-several exceptions. Chromium code does not use UTF-32.
-The GURL class and strings
-One common data type using strings is the GURL class. The constructor takes a
-std::string in UTF-8 for the URL itself. If you have a GURL, you can use the
-spec() method to get the std::string for the entire URL, or you can use
-component methods to get parsed parts, such as scheme(), host(), port(), path(),
-query(), and ref(), all of which return a std::string. All the parts of the GURL
-with the exception of the ref string will be pure ASCII. The ref string *may*
-have UTF-8 characters which are not also ASCII characters.
-Guidelines for string use in our codebase
-
-* Use std::string from the C++ standard library for normal use with
- strings
-* Length checking - if checking for empty, prefer “string.empty():” to
- “string.length() == 0”
-* When you make a string constant, use char\[\] (or char16_t\[\])
- instead of a std::string:
- * const char kFoo\[\] = “foo”;
- * const char16_t kBar\[\] = u"bar";
- * This is part of our style guidelines. It also makes code faster
- because there are no destructors, and more maintainable because
- there are no shutdown order dependencies.
-* There are many handy routines which operate on strings. You can use
- IntToString() if you want to do atoi(), and StringPrintf() if you
- need the full power of printf. You can use WriteInto() to make a C++
- string writeable by a C API. StringPiece makes it easy and efficient
- to write functions that take both C++ and C style strings.
-* For function input parameters, prefer to pass a string by const
- reference instead of making a new copy.
-* For function output parameters, it is OK to either return a new
- string or pass a pointer to a string. Performance wise, there isn’t
- much difference.
-* Often, efficiency is not paramount, but sometimes it is - when
- working in an inner loop, pay special attention to minimize the
- amount of string construction, and the number of temporary copies
- made.
- * When you use std::string, you can end up constructing lots of
- temporary string objects if you aren’t careful, or copying the
- string lots of times. Each copy makes a call to malloc, which
- needs a lock, and slows things down. Try to minimize how many
- temporaries get constructed.
- * When building a string, prefer “string1 += string2; string1 +=
- string3;” to “string1 = string1 + string2 + string3;” Better
- still, use base::StrCat().
-* For localization, we have the ICU library, with many useful helpers
- to do things like find word boundaries or convert to lowercase or
- uppercase correctly for the current locale.
-* We try to avoid repeated conversions between string encoding
- formats, as converting them is not cheap. It's generally OK to
- convert once, but if we have code that toggles the encoding six
- times as a string goes through some pipeline, that should be fixed. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/clang-mac/index.md b/chromium/docs/website/site/developers/clang-mac/index.md
deleted file mode 100644
index 86a24b8a648..00000000000
--- a/chromium/docs/website/site/developers/clang-mac/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: clang-mac
-title: clang mac
----
-
-Read the [General Chromium/Clang wiki
-page](http://code.google.com/p/chromium/wiki/Clang) first.
-
-We want to keep chromium buildable with clang. Clang warns about more things
-than gcc, so here are some things that need to be done even gcc doesn't complain
-about them:
-
-No const NSString\*s
-
-All of Cocoa takes non-const NSObjects, and passing a `const NSString *` to a
-function that takes `NSString *` is a const violation. gcc doesn't complain
-about this, but clang intentionally does. constness is usually done via
-immutable base classes and mutable subclasses in Cocoa anyway, so getting rid of
-const isn't that bad. Also, we don't really have a choice. There is a good
-chance what you are actually after is `NSString * const`.
-
-**Converting between CFTypes and NSTypes**
-
-The proper way to convert a CFType to a corresponding NSType is to use
-CFToNSCast.
-
-> #include "base/mac/foundation_util.h"
-
-> .....
-
-> NSString \*ns_string = base::mac::CFToNSCast(cf_string);
-
-CFToNSCast avoids any ugly double C++ casts that you may dream up, is clang
-safe, and only allows you to convert between properly toll-bridged types.
-
-All properties are nonatomic
-
-nonatomic: Some of our classes have custom setters that are not `@synchronize`d.
-If the `@property` for that is not non-atomic, then the interface claims that
-the method is synchronized but the implementation actually isn't. That's a bug.
-gcc happens not to complain about this, but clang does. Since we shouldn't need
-atomic properties anywhere, the simple rule is now to just make all properties
-nonatomic. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/class-diagram-webkit-webcore-to-chrome-browser/index.md b/chromium/docs/website/site/developers/class-diagram-webkit-webcore-to-chrome-browser/index.md
deleted file mode 100644
index 6cacdcea740..00000000000
--- a/chromium/docs/website/site/developers/class-diagram-webkit-webcore-to-chrome-browser/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: class-diagram-webkit-webcore-to-chrome-browser
-title: 'Class Diagram: Blink core to Chrome Browser'
----
-
-[<img alt="image"
-src="https://docs.google.com/drawings/pub?id=1BBnlbsJY8qjh5vVQmStZ5og1P3zbgAyCDnbyCq063FA&w=1501&h=908">](https://docs.google.com/drawings/pub?id=1BBnlbsJY8qjh5vVQmStZ5og1P3zbgAyCDnbyCq063FA&w=1501&h=908)
-
-https://docs.google.com/a/chromium.org/drawings/d/
-
-\[chromium.org or google.com accounts can edit the source google doc. Link split
-to suppress access request spam.\]
-
-1BBnlbsJY8qjh5vVQmStZ5og1P3zbgAyCDnbyCq063FA/edit \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/cluster-telemetry/6bAxkmCFOA8.png.sha1 b/chromium/docs/website/site/developers/cluster-telemetry/6bAxkmCFOA8.png.sha1
deleted file mode 100644
index 1692d816a9f..00000000000
--- a/chromium/docs/website/site/developers/cluster-telemetry/6bAxkmCFOA8.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-22f40d253b96614ebc6d70dbb2708f01ceb12f01 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/cluster-telemetry/LW5ZqMVpXdw.png.sha1 b/chromium/docs/website/site/developers/cluster-telemetry/LW5ZqMVpXdw.png.sha1
deleted file mode 100644
index eb56a92fea3..00000000000
--- a/chromium/docs/website/site/developers/cluster-telemetry/LW5ZqMVpXdw.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b1fe83f30287d8d045f71a0807a557f397ab444f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/cluster-telemetry/index.md b/chromium/docs/website/site/developers/cluster-telemetry/index.md
deleted file mode 100644
index 0dd7722f703..00000000000
--- a/chromium/docs/website/site/developers/cluster-telemetry/index.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: cluster-telemetry
-title: Cluster Telemetry
----
-
-[Run on Cluster Telemetry!](http://ct.skia.org/) (Google only, sorry)
-
-**Cluster Telemetry 101**
-
-[Telemetry](https://github.com/catapult-project/catapult/tree/HEAD/telemetry)
-is Chrome's performance testing framework, using it you can perform arbitrary
-actions on a set of web pages and report metrics about it.
-
-**Cluster Telemetry** allows you to run telemetry's benchmarks using multiple
-repository patches through Alexa's top 10k and top 100k web pages.
-
-Developers can use the framework to:
-
-* Measure the performance of multi-repo patches against the top subset
- of the internet on Android devices, bare-metal linux machines, and
- GCE instances using the [perf
- page](https://ct.skia.org/chromium_perf/).
-* Gather metrics for analysis or for reports against 100k web pages on
- CT's VM farm (linux and windows) using the [analysis
- page](https://ct.skia.org/chromium_analysis/).
-* Compute metrics on an analysis run using the [metrics analysis
- page](https://ct.skia.org/metrics_analysis/).
-
-**Should I use CT?**
-
-If you would like to know how your patch impacts Chrome's performance or would
-like to do analysis against a large repository of real world web pages then you
-should try out Cluster Telemetry.
-
-CT has been used to gather analysis data for the following projects:
-
-* Web vitals performance
-* Ad tagging accuracy
-* UserCounter analysis
-* Real-world leak detector
-* Gather data for a language detector
-* TTI variability study
-* Analysis of 5M SVGs
-* Stat rare usages
-
-CT has been used to gather perf data for the following projects:
-
-* Slimming paint
-* Clustering top web sites for Chrome graphics
-* Performance data for layer squashing and compositing overlap map
-* SkPaint in Graphics Context
-* Culling
-* New paint dictionary
-
-**Which telemetry benchmarks does CT support?**
-
-CT supports all benchmarks listed in
-[tools/perf/contrib/cluster_telemetry](https://source.chromium.org/chromium/chromium/src/+/HEAD:tools/perf/contrib/cluster_telemetry/;l=1?q=contrib%2Fcluster&sq=&ss=chromium&originalUrl=https:%2F%2Fcs.chromium.org%2F).
-Many of these benchmarks exist outside of CT, but these are the corresponding CT
-compatible versions.
-
-CT also allows you to run against unlanded / modified benchmarks using the
-multi-repo patches supported in the UI.
-
-Can try out your benchmark's CT version locally with:
-
-`python tools/perf/run_benchmark ${YOUR_BENCHMARK} --also-run-disabled-tests
---user-agent=desktop
---urls-list=`[`http://www.google.com`](http://www.google.com/)`
---archive-data-file=/tmp/something --output-dir=/tmp/output/
---browser-executable=/usr/bin/google-chrome --browser=exact --pageset-repeat=1
---output-format=csv --use-live-sites`
-
-**How accurate are CT's results?**
-
-For an empty patch repaint run on Desktop, these are the results:
-
-<img alt="consistent-results.png"
-src="https://lh4.googleusercontent.com/WrHyPEmSptfgO28zEsnN5e1tM-SFXAtlsQoPnKEghkgSZye19OSoiER6CRoQ9D00dSLWT6Kwxhra3YY3aFx743Tl6rNRrkcmITmv23wQkiCouvLNBDwcoUPly9WWRADcraqWfSE"
-height=157px; width=624px;>
-
-The overall results from Cluster Telemetry runs are accurate within a percentage
-point.
-
-The per webpage results (visible when you click on a field) do have some
-variance, but this has been greatly improved due to efforts detailed
-[here](https://docs.google.com/a/chromium.org/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit#heading=h.lgvqzgu7bc4d).
-
-**Framework Code and Documentation**
-
-Cluster Telemetry is primarily written in Go with a few Python scripts. The
-frontend is written using Polymer. The framework lives in
-[main/ct](https://skia.googlesource.com/buildbot/+/main/ct).
-
-Here is more detailed documentation for the different pages:
-
-* [Perf
- page](https://docs.google.com/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit)
-* [Analysis
- page](https://docs.google.com/document/d/1ziof4lNwDFXyerVbEocdF3_DdUHVnD3FKYB9rShztuE/edit#)
-* [Metrics Analysis
- Page](https://docs.google.com/document/d/1MY95ULhEuKFznBQpF60_uhdhRco5bWzUVfVTp0M2hDw/)
-
-**Contact Us**
-
-If you have questions, please email rmistry@ or
-[cluster-telemetry@google.com](mailto:cluster-telemetry@google.com).
diff --git a/chromium/docs/website/site/developers/code-browsing-in-chromium/index.md b/chromium/docs/website/site/developers/code-browsing-in-chromium/index.md
deleted file mode 100644
index 1b5331d8a8b..00000000000
--- a/chromium/docs/website/site/developers/code-browsing-in-chromium/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: code-browsing-in-chromium
-title: Code Browsing in Chromium
----
-
-**You're new, and Chromium is a big code base. You’ll spend a lot of time searching around Chromium to discover for yourself how the code works, so it makes sense to spend a bit of time investing in a good code browsing solution. Fortunately, there are lots of options.**
-**Code search: The source code is indexed and available on the web, complete with hyperlinks to jump to other symbols. If you have one tab open for each search, then you can easily back up.** <https://code.google.com/p/chromium/codesearch>
-**SlickEdit: This editor works on Linux, Mac, and Windows, and has code searching built in. One drawback is that you may have to spend 20 minutes or so rebuilding your SlickEdit project whenever you sync.**
-**Xcode: The code browsing in Xcode 4.x has a hard time keeping up with the size of the codebase - after a sync, just opening Xcode 4.x with browsing turned on can take more than an hour. We recommend turning symbol indexing off if you use Xcode. That being said, it is a nice browsing environment if you are willing to pay the startup cost, careful to never shut down Xcode, and don't sync often.**
-**Visual Studio and Intellisense: Also nice, also takes a long time.**
-**Emacs (or VI) and CScope: Emacs plugins can run the cscope indexing tool, and it runs very fast (a minute or two after a fresh sync). the xcscope.el extension will run it for you automatically when you search. Check the cscope page for instructions to integrate with VI. <http://cscope.sourceforge.net/>. This works on Windows, Mac, and Linux. [Example Linux setup](/developers/how-tos/cscope-emacs-example-linux-setup).**
-**Emacs (or VI) and tags: This still works.**
-**Emacs and rgrep - a bit slower since there is no prebuilt index, but if you
-can limit your search to a fraction of the source code tree, it is not too slow.
-Even if you have to search all cpp and h files, it is not too bad, but other
-methods are faster. There is an emacs extension called grep-a-lot.el which will
-put the results of each grep into a separate buffer to make it easy to back up
-when grepping around.**
-
-**==Emacs and git-emacs==: The [git-emacs](https://github.com/tsgates/git-emacs/tree/master) package provides 'git-grep' and 'git-find' which are very fast and useful for quickly find keywords or files. It's not actively maintained so may need minor tweaks with recent versions of Emacs.**
-**Plain grep from the command line: This is still available for those who may perfer it and have learned the syntax.**
-**Fancier grep: you can also use “git gs &lt;search term here&gt;” to limit the search to files in the git repository, or “git ls-files | xargs grep -H &lt;search term here&gt;”. These are a lot faster than just letting grep move its way through the whole directory structure. "gclient grep" conceptually runs "git gs" on all subrepositories.**
-**Source Insight - PC only - SI has great browsing support, and the helpful references window that you can configure to see where a function gets called from (among other things). It is important to learn how to customize the .tom file (c.tom) to get the best out of Source Insight.**
-**Sublime Text - Sublime has a built in search feature that works pretty well although slower than Code Search (but sometimes more reliable). Version 3 also has a built in "Goto Definition" feature that opens a list of possible answers which is useful but not very precise (it seems text based, not real x-refs). Indexing is somewhat resource intensive, made continuously in the background but mind that it's limited to currently opened filed and folders included in the current project (so you must "Add folder to Project" for it to work properly).** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/code-coverage/index.md b/chromium/docs/website/site/developers/code-coverage/index.md
deleted file mode 100644
index 53586f77e21..00000000000
--- a/chromium/docs/website/site/developers/code-coverage/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: code-coverage
-title: Code Coverage
----
-
-### Please refer to [src/docs/testing/code_coverage.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/code_coverage.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/coding-style/chromium-style-checker-errors/index.md b/chromium/docs/website/site/developers/coding-style/chromium-style-checker-errors/index.md
deleted file mode 100644
index 95c2a51e867..00000000000
--- a/chromium/docs/website/site/developers/coding-style/chromium-style-checker-errors/index.md
+++ /dev/null
@@ -1,492 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/coding-style
- - Coding Style
-page_name: chromium-style-checker-errors
-title: Chromium Style Checker Errors
----
-
-[TOC]
-
-## Introduction
-
-Due to constant over inlining, we now have plugins to the clang compiler which
-check for certain patterns that can increase code bloat. This document lists
-these errors, explains the motivation behind adding it as an error and shows how
-to fix them. The [chromium/clang wiki
-page](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/updating_clang_format_binaries.md)
-explains how you can run the plugin yourself, or how you can run your CLs
-through the clang trybots which run this plugin as well.
-
-All diagnostics produced by the style checker are marked with
-\[chromium-style\].
-
-## Constructor/Destructor Errors
-
-Constructors and destructors are often much larger and more complex than
-programmers think. They are also implicitly defined in each translation unit if
-you don't declare them. This can have a cascading effect if a class has member
-variables that have inlined/implicitly declared constructors/destructors, or are
-templates.
-
-(Internally, the plugin determines whether a class is complex using a point
-system, adding 9 points for each templated base class, 10 for each templated
-member variable, 3 for each non-POD type member variable, and (only for the
-constructor score) 1 for each integral data type. If a class's score is greater
-than or equal to 10, it will trip these errors.)
-
-If you get any of these compiler errors:
-
-* Complex class/struct needs an explicit out-of-line constructor
-* Complex class/struct needs an explicit out-of-line destructor
-
-It's because you've written something like the following in a header:
-
-> class ComplexStuff {
-
-> public:
-
-> void NoDeclaredConstructor();
-
-> private:
-
-> // Enough data members to trip the detector
-
-> BigObject big_object_;
-
-> std::map&lt;std::string, OtherObj&gt; complex_stl_stuff_;
-
-> };
-
-This is fixed by adding declared constructors:
-
-> class ComplexStuff {
-
-> public:
-
-> // Defined in the cc file:
-
-> ComplexStuff();
-
-> ~ComplexStuff();
-
-> private:
-
-> BigObject big_object_;
-
-> std::map&lt;std::string, OtherObj&gt; complex_stl_stuff_;
-
-> };
-
-Likewise, if you get these compiler errors:
-
-* Complex constructor has an inlined body.
-* Complex destructor has an inline body.
-
-It's because you've written something like the following in a header:
-
-> class MoreComplexStuff {
-
-> public:
-> MoreComplexStuff() {}
-
-> ~MoreComplexStuff() {}
-
-> private:
-
-> BigObject big_object_;
-
-> std::map&lt;std::string, OtherObj&gt; complex_stl_stuff_;
-
-> };
-
-The solution is the same; put the definitions for the constructor/destructor in
-the implementation file.
-
-Sometimes, you might need to inline a constructor/destructor for performance
-reasons. The style checker makes an exception for explicitly inlined
-constructors/destructors:
-
-// In the .h file:
-
-class ComplexFastStuff {
-
-public:
-
-ComplexFastStuff();
-
-~ComplexFastStuff();
-
-private:
-
-/\* complicated members \*/
-
-};
-
-// In the .cc file:
-
-inline ComplexFastStuff::ComplexFastStuff() {
-}
-
-inline ComplexFastStuff::~ComplexFastStuff() {
-
-}
-
-If this class is being copied somewhere in the code, then the compiler will
-generate an implicit copy constructor for the class. As a result, you might also
-see the following error:
-
-* Complex class/struct needs an explicit out-of-line copy constructor.
-
-This can be fixed by adding an explicit copy constructor to your class:
-
-// In the .h file:
-
-class ComplexCopyableStuff {
-
-public:
-
-ComplexCopyableStuff();
-
-ComplexCopyableStuff(const ComplexCopyableStuff& other);
-
-~ComplexCopyableStuff();
-
-private:
-
-/\* complicated members \*/
-
-};
-
-// In the .cc file:
-
-ComplexCopyableStuff::ComplexCopyableStuff(const ComplexCopyableStuff& other) =
-default;
-
-Note that by defaulting the implementation, you ensure that you don't forget to
-copy a member and this code will not need to be updated as the members of the
-class change.
-
-Also note that copying a complex class can be an expensive operation. The
-preferred solution is almost always is to avoid the copy if possible. Please
-consider changing the code and eliminating unnecessary copies instead of simply
-adding an out of line copy constructor to silence the error. Additionally, in a
-large number of cases, you can utilize move semantics to improve the efficiency
-of the code.
-
-Usually a compiler would generate a move constructor for your class, making
-moving objects efficient. This is particularly true for STL containers such as
-std::map. However, specifying either a copy constructor or a destructor prevents
-the compiler from generating a move constructor. All in all, you should prefer
-specifying a move constructor instead of a copy constructor. In cases where your
-object is used as an rvalue, this will also prevent the error since the compiler
-will not generate a copy constructor:
-
-// In the .h file:
-
-class ComplexMovableStuff {
-
-public:
-
-ComplexMovableStuff();
-
-ComplexMovableStuff(ComplexMovableStuff&& other);
-
-~ComplexMovableStuff();
-
-private:
-
-/\* complicated members \*/
-
-};
-
-// In the .cc file:
-
-ComplexMovableStuff::ComplexMovableStuff(ComplexMovableStuff&& other) = default;
-
-For more information on move semantics, please refer to
-<https://www.chromium.org/rvalue-references>
-
-## Virtual Method Out-of-lining
-
-Virtual methods are almost never inlined in practice. Because of this, methods
-on a base class will be emitted in each translation unit that allocates the
-object or any subclasses that don't override that method. This is usually not a
-major gain, unless you have a wide class hierarchy in which case it can be a big
-win (<http://codereview.chromium.org/5741001/>). Since virtual methods will
-almost never be inlined anyway (because they'll need to go through vtable
-dispatch), there are almost no downsides.
-
-If you get the error:
-
-* virtual methods with non-empty bodies shouldn't be declared inline
-
-It's because you wrote something like this:
-
-> class BaseClass {
-
-> public:
-
-> virtual void ThisOneIsOK() {}
-
-> virtual bool ButWeDrawTheLineAtMethodsWithRealImplementation() { return false;
-> }
-
-> };
-
-And can be fixed by out of lining the method that does work:
-
-> class BaseClass {
-
-> public:
-
-> virtual void ThisIsHandledByTheCompiler() {}
-
-> virtual bool AndThisOneIsDefinedInTheImplementation();
-
-> };
-
-## Virtual methods and override/final
-
-If you get the error:
-
-* Overriding method must be marked with 'override' or 'final'.
-
-It is because you are overriding a base class method, yet not annotating that
-override with override or final. For example:
-
-> class BaseClass {
-
-> public:
-
-> virtual ~BaseClass() {}
-
-> virtual void SomeMethod() = 0;
-
-> };
-
-> class DerivedClass : public BaseClass {
-
-> public:
-
-> virtual void SomeMethod();
-
-> };
-
-The solution? Just tell the compiler what you intend:
-
-> \[...\]
-
-> class DerivedClass : public BaseClass {
-
-> public:
-
-> void SomeMethod() **override**;
-
-> };
-
-This allows the compiler to warn you when your intentions stop matching parsed
-reality.
-
-## Redundant Virtual specifiers
-
-If you get one of the following errors:
-
-* 'virtual' is redundant; 'override' implies 'virtual'
-* 'virtual' is redundant; 'final' implies 'virtual'
-* 'override' is redundant; 'final' implies 'override'
-
-Just remove the redundant specifier. Google style is to use only one of virtual,
-override, or final per method. For example:
-
-> class BaseClass {
-
-> public:
-
-> virtual void SomeMethod() = 0;
-
-> };
-
-> class DerivedClass : public BaseClass {
-
-> public:
-
-> virtual void SomeMethod() override final;
-
-> };
-
-Can be simply written:
-
-> \[...\]
-
-> class DerivedClass : public BaseClass {
-
-> public:
-
-> void SomeMethod() final;
-
-> };
-
-## Virtual final base class methods
-
-If you get the error:
-
-The virtual method does not override anything and is final; consider making it
-non-virtual
-
-That means you have a final method that's not overriding anything. In that case,
-consider removing the virtual keyword, since no one can override the method
-anyway. For example:
-
-> class BaseClass {
-
-> public:
-
-> virtual void SomeMethod() final;
-
-> };
-
-Should be written:
-
-> class BaseClass {
-
-> public:
-
-> void SomeMethod();
-
-> };
-
-## "Using namespace" in a header
-
-You should never have using namespace directives in a header because this can
-change the lookup rules in unrelated implementation files.
-
-This is enforced by clang's -Wheader-hygiene warning. This isn't checked by the
-style plugin.
-
-If you get the error:
-
-* using namespace directive in global context in header
- \[-Wheader-hygiene\]
-
-It's because you did something like this in a header:
-
-> using namespace WebKit;
-
-> class OurDerivedClass : public WebKitType {
-
-> };
-
-You can fix this by removing the "using namespace" line and explicitly stating
-the namespace:
-
-> class OurDerivedClass : public WebKit::WebKitType {
-
-> };
-
-## RefCounted types with public destructors
-
-When you declare a type to be referenced counted by making it derive from
-base::RefCounted or base::RefCountedThreadSafe, you're indicating that it should
-not be destructed until the last reference is Released, either explicitly or by
-destructing a scoped_refptr&lt;&gt;. Having a public destructor allows this
-contract to be violated, by allowing callers to stack allocate the object, store
-it in a scoped_ptr&lt;&gt; instead of a scoped_refptr&lt;&gt;, or to explicitly
-delete the object before all references have gone away. Because this can lead to
-subtle security bugs, the style checker will warn if class that is derived from
-a RefCounted type has either an explicit public destructor or an implicit
-destructor, which is automatically public.
-
-If you get the error:
-
-* Classes that are ref-counted should not have public destructors.
-
-It's because you did something like this:
-
-> class Foo : public base::RefCounted&lt;Foo&gt; {
-
-> public:
-
-> Foo() {}
-
-> ~Foo() {}
-
-> };
-
-You can fix this by ensuring that the destructor is either protected (if
-expecting classes to subclass this base) or private. You'll also need to ensure
-that the RefCounted type is friended, as appropriate.
-
-> class Foo : public base::RefCounted&lt;Foo&gt; {
-
-> public:
-
-> Foo() {}
-
-> private:
-
-> friend class base::RefCounted&lt;Foo&gt;;
-
-> ~Foo() {}
-
-> };
-
-If you get the error:
-
-* Classes that are ref-counted should have explicit destructors that
- are protected or private.
-
-It's because you did something like this:
-
-> class Foo : public base::RefCounted&lt;Foo&gt; {
-
-> // Compiler generated constructors, destructor, and copy operator are public.
-
-> };
-
-You can fix it by ensuring you explicitly declare a protected or private
-destructor:
-
-> class Foo : public base::RefCounted&lt;Foo&gt; {
-
-> // Compiler generated constructors and copy operator are public.
-
-> private:
-
-> friend class base::RefCounted&lt;Foo&gt;;
-
-> ~Foo() {} // Explicit destructor is private.
-
-> };
-
-## Enumerator max values
-
-If you have an enumerator value that needs to be the max value (useful for
-histograms or for IPC), declare your enum as an enum class and name the max
-value kMaxValue. The plugin will automatically warn if kMaxValue is no longer
-the max value.
-
-For example:
-
-> enum class Foo {
-
-> kOne,
-
-> kTwo,
-
-> kMaxValue = kOne,
-> };
-
-Will produce the error:
-
-* kMaxValue enumerator does not match max value 0 of other enumerators
-
-This can be fixed by assigning the correct value to kMaxValue:
-
-> enum class Foo {
-> kOne,
-> kTwo,
-> kMaxValue = kTwo,
-> };
diff --git a/chromium/docs/website/site/developers/coding-style/cocoa-dos-and-donts/index.md b/chromium/docs/website/site/developers/coding-style/cocoa-dos-and-donts/index.md
deleted file mode 100644
index 92db64a952e..00000000000
--- a/chromium/docs/website/site/developers/coding-style/cocoa-dos-and-donts/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/coding-style
- - Coding Style
-page_name: cocoa-dos-and-donts
-title: Cocoa Dos and Don'ts
----
-
-## Introduction
-
-When writing code using Cocoa, there are rules to follow. Anything that uses
-Objective-C++ must of course follow the [C++
-guidelines](/developers/coding-style/cpp-dos-and-donts). However, there are
-things in Cocoa that are more subtle than they look. Here are a few things to
-keep in mind.
-
-## Banned Practices
-
-### Const NSObjects
-
-The use of const NSObjects is **prohibited** as it makes Clang unhappy. (This is
-enforced in the presubmit hooks.) See the [Mac Clang
-page](/developers/clang-mac) for more details.
-
-### Atomic properties
-
-The use of atomic properties is **prohibited**. There are differences between
-how our compilers handle them, and since we don't need them anyway we don't use
-them. See the [Mac Clang page](/developers/clang-mac) for more details.
-
-### Tracking rects and raw NSTrackingAreas
-
-Tracking rects are tricky to get right. Apple realized that, and in Mac OS X
-10.5 introduced the NSTrackingArea object. Unfortunately, that is *also*
-difficult to get right, and has historically led to [nasty
-crashes](http://crbug.com/48709).
-
-The use of `-[NSView addTrackingRect:owner:userData:assumeInside:]` is
-**prohibited**.
-
-The use of raw `NSTrackingArea`s is **prohibited**.
-
-You are required to use `CrTrackingArea`. Find it at
-`ui/base/cocoa/tracking_area.h`. There are currently (and unfortunately) lots of
-current usage of tracking rects and `NSTrackingArea`s. Please convert them as
-you encounter them.
-
-## YR DOIN IT RONG
-
-There are spots of Cocoa that are tricky. Watch out.
-
-### Coordinate conversion
-
-All code that manages views is required to be correct, and that correctness is
-more heavily tested when running under "resolution independence" or "HiDPI",
-where window coordinates are not the same as view coordinates. (Turn on
-resolution independence in Quartz Debug.app.)
-
-Any time you need to compute window coordinates based on view coordinates, or
-vice versa, make sure you use the appropriate conversion calls (i.e.
-`-convertRect:toView`: and friends). There is a call for each data type and each
-conversion direction. Also, remember that views have both a `-bounds` and
-`-frame`. They are in different coordinate systems.
-
-See
-<http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html>
-for details.
-
-### The "base" coordinate system
-
-In doing coordinate conversion, you may run into methods on views that convert
-to and from the "base" coordinate system. *Those are almost certainly **not**
-what you are looking for.* When talking about views, the "base" coordinate
-system is referring to the raw backing pixels. If you need to precisely align to
-pixels, they are correct, but most of the time they do not do what you think
-they are doing.
-
-(This problem is compounded by the references in methods on windows to the
-"base" coordinate system, which is indeed the window coordinate system.)
-
-See
-<http://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/6b989dcbb79e9ba/029eeb633c5287cc>
-for details.
-
-### Zero-sized windows
-
-The Mac's windowserver has issues with zero-sized windows, [spewing tons of junk
-to the console](http://crbug.com/78973), yet it's not immediately obvious when
-you resize them that it's a problem.
-
-Ensure that you do not resize windows to be empty, either implicitly or
-explicitly. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/coding-style/cpp-dos-and-donts/index.md b/chromium/docs/website/site/developers/coding-style/cpp-dos-and-donts/index.md
deleted file mode 100644
index 223b92a174c..00000000000
--- a/chromium/docs/website/site/developers/coding-style/cpp-dos-and-donts/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/coding-style
- - Coding Style
-page_name: cpp-dos-and-donts
-title: C++ Dos and Don'ts
----
-
-The page has moved to being checked in to the source tree.
-
-See [C++ Dos and
-Don'ts](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++-dos-and-donts.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/coding-style/important-abstractions-and-data-structures/index.md b/chromium/docs/website/site/developers/coding-style/important-abstractions-and-data-structures/index.md
deleted file mode 100644
index 2ec9729bdf6..00000000000
--- a/chromium/docs/website/site/developers/coding-style/important-abstractions-and-data-structures/index.md
+++ /dev/null
@@ -1,214 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/coding-style
- - Coding Style
-page_name: important-abstractions-and-data-structures
-title: Important Abstractions and Data Structures
----
-
-[TOC]
-
-## [TaskRunner](https://code.google.com/p/chromium/codesearch#chromium/src/base/task_runner.h&q=TaskRunner&sq=package:chromium&type=cs) & [SequencedTaskRunner](https://code.google.com/p/chromium/codesearch#chromium/src/base/sequenced_task_runner.h&q=SequencedTaskRunner&sq=package:chromium&type=cs) & [SingleThreadTaskRunner](https://code.google.com/p/chromium/codesearch#chromium/src/base/single_thread_task_runner.h&q=SingleThreadTaskRunner&sq=package:chromium&type=cs)
-
-Interfaces for posting base::Callbacks "tasks" to be run by the TaskRunner.
-TaskRunner makes no guarantees about execution (order, concurrency, or if it's
-even run at all). SequencedTaskRunner offers certain guarantees about the
-sequence of execution (roughly speaking FIFO, but see the header for nitty
-gritty details if interested) and SingleThreadTaskRunner offers the same
-guarantees as SequencedTaskRunner except all tasks run on the same thread.
-MessageLoopProxy is the canonical example of a SingleThreadTaskRunner. These
-interfaces are also useful for testing via dependency injection. **NOTE:**
-successfully posting to a TaskRunner does not necessarily mean the task will
-run.
-
-**NOTE:** A **very** useful member function of TaskRunner is PostTaskAndReply(),
-which will post a task to a target TaskRunner and on completion post a "reply"
-task to the origin TaskRunner.
-
-## [MessageLoop](https://code.google.com/p/chromium/codesearch#chromium/src/base/message_loop/message_loop.h&q=MessageLoop&sq=package:chromium&type=cs&l=46) & [MessageLoopProxy](https://code.google.com/p/chromium/codesearch#chromium/src/base/message_loop/message_loop_proxy.h&q=MessageLoopProxy&sq=package:chromium&type=cs&l=17) & [BrowserThread](https://code.google.com/p/chromium/codesearch#chromium/src/content/public/browser/browser_thread.h&q=BrowserThread&sq=package:chromium&type=cs) & [RunLoop](https://code.google.com/p/chromium/codesearch#chromium/src/base/run_loop.h&q=run_loop.h&sq=package:chromium&type=cs&l=31)
-
-These are various APIs for posting a task. MessageLoop is a concrete object used
-by MessageLoopProxy (the most widely used task runner in Chromium code). You
-should almost always use MessageLoopProxy instead of MessageLoop, or if you're
-in chrome/ or content/, you can use BrowserThread. This is to avoid races on
-MessageLoop destruction, since MessageLoopProxy and BrowserThread will delete
-the task if the underlying MessageLoop is already destroyed. **NOTE:**
-successfully posting to a MessageLoop(Proxy) does not necessarily mean the task
-will run.
-
-PS: There's some debate about when to use SequencedTaskRunner vs
-MessageLoopProxy vs BrowserThread. Using an interface class like
-SequencedTaskRunner makes the code more abstract/reusable/testable. On the other
-hand, due to the extra layer of indirection, it makes the code less obvious.
-Using a concrete BrowserThread ID makes it immediately obvious which thread it's
-running on, although arguably you could name the SequencedTaskRunner variable
-appropriately to make it more clear. The current decision is to only convert
-code from BrowserThread to a TaskRunner subtype when necessary. MessageLoopProxy
-should probably always be passed around as a SingleThreadTaskRunner or a parent
-interface like SequencedTaskRunner.
-
-## [base::SequencedWorkerPool](https://code.google.com/p/chromium/codesearch#chromium/src/base/threading/sequenced_worker_pool.h&q=base::SequencedWorkerPool&sq=package:chromium&l=72&type=cs) & [base::WorkerPool](https://code.google.com/p/chromium/codesearch#chromium/src/base/threading/worker_pool.h&q=base::WorkerPool&sq=package:chromium&l=30&type=cs)
-
-These are the two primary worker pools in Chromium. SequencedWorkerPool is a
-more complicated worker pool that inherits from TaskRunner and provides ways to
-order tasks in a sequence (by sharing a SequenceToken) and also specifies
-shutdown behavior (block shutdown on task execution, do not run the task if the
-browser is shutting down and it hasn't started yet but if it has then block on
-it, or allow the task to run irrespective of browser shutdown and don't block
-shutdown on it). SequencedWorkerPool also provides a facility to return a
-SequencedTaskRunner based on a SequenceToken. The Chromium browser process will
-shutdown base::SequencedWorkerPool after all main browser threads (other than
-the main thread) have stopped. base::WorkerPool is a global object that is not
-shutdown on browser process shutdown, so all the tasks running on it will not be
-joined. It's generally unadvisable to use base::WorkerPool since tasks may have
-dependencies on other objects that may be in the process of being destroyed
-during browser shutdown.
-
-## [base::Callback](https://code.google.com/p/chromium/codesearch#chromium/src/base/callback.h) and [base::Bind()](https://code.google.com/p/chromium/codesearch#chromium/src/base/bind.h&q=Base::bind&sq=package:chromium&type=cs)
-
-base::Callback is a set of internally refcounted templated callback classes with
-different arities and return values (including void). Note that these callbacks
-are copyable, but share (via refcounting) internal storage for the function
-pointer and the bound arguments. base::Bind() will bind arguments to a function
-pointer (under the hood, it copies the function pointer and all arguments into
-an internal refcounted storage object) and returns a base::Callback.
-
-base::Bind() will automagically AddRef()/Release() the first argument if the
-function is a member function and will complain if the type is not refcounted
-(avoid this problem with base::WeakPtr or base::Unretained()). Also, for the
-function arguments, it will use a COMPILE_ASSERT to try to verify they are not
-raw pointers to a refcounted type (only possible with full type information, not
-forward declarations). Instead, use scoped_refptrs or call make_scoped_refptr()
-to prevent [bugs](http://code.google.com/p/chromium/issues/detail?id=28083). In
-addition, base::Bind() understands base::WeakPtr. If the function is a member
-function and the first argument is a base::WeakPtr to the object, base::Bind()
-will inject a wrapper function that only invokes the function pointer if the
-base::WeakPtr is non-NULL. base::Bind() also has the following helper wrappers
-for arguments.
-
-* base::Unretained() - disables the refcounting of member function
- receiver objects (which may not be of refcounted types) and the
- COMPILE_ASSERT on function arguments. Use with care, since it
- implies you need to make sure the lifetime of the object lasts
- beyond when the callback can be invoked. For the member function
- receiver object, it's probably better to use a base::WeakPtr
- instead.
-* base::Owned() - transfer ownership of a raw pointer to the returned
- base::Callback storage. Very useful because TaskRunners are not
- guaranteed to run callbacks (which may want to delete the object) on
- shutdown, so by making the callback take ownership, this prevents
- annoying shutdown leaks when the callback is not run.
-* base::Passed() - useful for passing a scoped object
- (scoped_ptr/ScopedVector/etc) to a callback. The primary difference
- between base::Owned() and base::Passed() is base::Passed() requires
- the function signature take the scoped type as a parameter, and thus
- allows for **transferring** ownership via .release(). **NOTE:**
- since the scope of the scoped type is the function scope, that means
- the base::Callback **must only be called once**. Otherwise, it would
- be a potential use after free and a definite double delete. Given
- the complexity of base::Passed()'s semantics in comparison to
- base::Owned(), you should **prefer base::Owned() to base::Passed()**
- in general.
-* base::ConstRef() - passes an argument as a const reference instead
- of copying it into the internal callback storage. Useful for obvious
- performance reasons, but generally should not be used, since it
- requires that the lifetime of the referent must live beyond when the
- callback can be invoked.
-* base::IgnoreResult() - use this with the function pointer passed to
- base::Bind() to ignore the result. Useful to make the callback
- usable with a TaskRunner which only takes Closures (callbacks with
- no parameters nor return values).
-
-## [scoped_refptr&lt;T&gt; & base::RefCounted & base::RefCountedThreadSafe](https://code.google.com/p/chromium/codesearch#chromium/src/base/memory/ref_counted.h)
-
-Reference counting is occasionally useful but is more often a sign that someone
-isn't thinking carefully about ownership. Use it when ownership is truly shared
-(for example, multiple tabs sharing the same renderer process), **not** for when
-lifetime management is difficult to reason about.
-
-## [Singleton](https://code.google.com/p/chromium/codesearch#chromium/src/base/memory/singleton.h&q=singleton&sq=package:chromium&type=cs) & [base::LazyInstance](https://code.google.com/p/chromium/codesearch#chromium/src/base/lazy_instance.h&q=base::LazyInstance&sq=package:chromium&type=cs)
-
-They're globals, so you generally should [avoid using
-them](http://www.object-oriented-security.org/lets-argue/singletons), as per the
-[style
-guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Static_and_Global_Variables#Static_and_Global_Variables).
-That said, when you use globals in Chromium code, it's often good to use one of
-these, and in general, prefer base::LazyInstance over Singleton. The reason to
-use these classes is construction is lazy (thereby preventing startup slowdown
-due to static initializers) and destruction order is well-defined. They are all
-destroyed in opposite order as construction when the AtExitManager is destroyed.
-In the Chromium browser process, the AtExitManager is instantiated early on in
-the main thread (the UI thread), so all of these objects will be destroyed on
-the main thread, even if constructed on a different thread. The reason to prefer
-base::LazyInstance over base::Singleton is base::LazyInstance reduces heap
-fragmentation by reserving space in the data segment and using placement new to
-construct the object in that memory location. **NOTE:** Both Singleton and
-base::LazyInstance provide "leaky" traits to leak the global on shutdown. This
-is often advisable (except potentially in library code where the code may be
-dynamically loaded into another process's address space or when data needs to be
-flushed on process shutdown) in order to not to slow down shutdown. There are
-valgrind suppressions for these "leaky" traits.
-
-## [base::Thread](https://code.google.com/p/chromium/codesearch#chromium/src/base/threading/thread.h&q=base::Thread&sq=package:chromium&type=cs) & [base::PlatformThread](https://code.google.com/p/chromium/codesearch#chromium/src/base/threading/platform_thread.h&q=base::PlatformThread&sq=package:chromium&type=cs)
-
-Generally you shouldn't use these, since you should usually post tasks to an
-existing TaskRunner. PlatformThread is a platform-specific thread. base::Thread
-contains a MessageLoop running on a PlatformThread.
-
-## [base::WeakPtr](https://code.google.com/p/chromium/codesearch#chromium/src/base/memory/weak_ptr.h&q=base::WeakPtr&sq=package:chromium&type=cs) & [base::WeakPtrFactory](https://code.google.com/p/chromium/codesearch#chromium/src/base/memory/weak_ptr.h&q=base::WeakPtrFactory&sq=package:chromium&type=cs&l=246)
-
-Mostly thread-unsafe weak pointer that returns NULL if the referent has been
-destroyed. It's safe to pass across threads (and to destroy on other threads),
-but it should only be used on the original thread it was created on.
-base::WeakPtrFactory is useful for automatically canceling base::Callbacks when
-the referent of the base::WeakPtr gets destroyed.
-
-## [FilePath](https://code.google.com/p/chromium/codesearch#chromium/src/base/files/file_path.h&q=FilePath&sq=package:chromium&type=cs&l=132)
-
-A cross-platform representation of a file path. You should generally use this
-instead of platform-specific representations.
-
-## [ObserverList](https://code.google.com/p/chromium/codesearch#chromium/src/base/observer_list.h&q=ObserverList&sq=package:chromium&l=54) & [ObserverListThreadSafe](https://code.google.com/p/chromium/codesearch#chromium/src/base/observer_list_threadsafe.h&q=ObserverListThreadSafe&sq=package:chromium&type=cs&l=94)
-
-ObserverList is a thread-unsafe object that is intended to be used as a member
-variable of a class. It provides a simple interface for iterating on a bunch of
-Observer objects and invoking a notification method.
-
-ObserverListThreadSafe similar. It contains multiple ObserverLists, and observer
-notifications are invoked on the same PlatformThreadId that the observer was
-registered on, thereby allowing proxying notifications across threads and
-allowing the individual observers to receive notifications in a single threaded
-manner.
-
-## [Pickle](https://code.google.com/p/chromium/codesearch#chromium/src/base/pickle.h&q=Pickle&sq=package:chromium&type=cs)
-
-Pickle provides a basic facility for object serialization and deserialization in
-binary form.
-
-## [Value](https://code.google.com/p/chromium/codesearch#chromium/src/base/values.h&sq=package:chromium&rcl=1367374264&l=55)
-
-Values allow for specifying recursive data classes (lists and dictionaries)
-containing simple values (bool/int/string/etc). These values can also be
-serialized to JSON and back.
-
-## [LOG](https://code.google.com/p/chromium/codesearch#chromium/src/base/logging.h&sq=package:chromium)
-
-This is the basic interface for logging in Chromium.
-
-## [FileUtilProxy](https://code.google.com/p/chromium/codesearch#chromium/src/base/files/file_util_proxy.h&q=FileUtilProxy&sq=package:chromium&l=25&type=cs)
-
-Generally you should not do file I/O on jank-sensitive threads
-(BrowserThread::UI and BrowserThread::IO), so you can proxy them to another
-thread (such as BrowserThread::FILE) via these utilities.
-
-## [Time](https://code.google.com/p/chromium/codesearch#chromium/src/base/time/time.h&sq=package:chromium), [TimeDelta](https://code.google.com/p/chromium/codesearch#chromium/src/base/time/time.h&sq=package:chromium), [TimeTicks](https://code.google.com/p/chromium/codesearch#chromium/src/base/time/time.h&sq=package:chromium), [Timer](https://code.google.com/p/chromium/codesearch#chromium/src/base/timer/timer.h&sq=package:chromium)
-
-Generally use TimeTicks instead of Time to keep a stable tick counter (Time may
-change if the user changes the computer clock).
-
-## [PrefService](https://code.google.com/p/chromium/codesearch#chromium/src/components/prefs/pref_service.h&q=PrefService&sq=package:chromium&type=cs), [ExtensionPrefs](https://code.google.com/p/chromium/codesearch#chromium/src/extensions/browser/extension_prefs.h)
-
-Containers for persistent state associated with a user
-[Profile](http://code.google.com/searchframe#OAMlx_jo-ck/src/chrome/browser/profiles/profile.h). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/coding-style/index.md b/chromium/docs/website/site/developers/coding-style/index.md
deleted file mode 100644
index b33bb2fce52..00000000000
--- a/chromium/docs/website/site/developers/coding-style/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: coding-style
-title: Coding Style
----
-
-The style guide has moved to being checked in to the source tree.
-
-See the general [Chromium coding
-style](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/styleguide.md)
-and the specific [Chromium C++ style
-guide](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/coding-style/java/index.md b/chromium/docs/website/site/developers/coding-style/java/index.md
deleted file mode 100644
index 09b52b63547..00000000000
--- a/chromium/docs/website/site/developers/coding-style/java/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/coding-style
- - Coding Style
-page_name: java
-title: Java
----
-
-The style guide has moved to being checked in to the source tree.
-
-### See the general [Chromium coding style](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/styleguide.md) and the specific [Chromium Java style guide](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/java/java.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/committers-responsibility/index.md b/chromium/docs/website/site/developers/committers-responsibility/index.md
deleted file mode 100644
index f0722c81a54..00000000000
--- a/chromium/docs/website/site/developers/committers-responsibility/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: committers-responsibility
-title: Responsibilities of Committers and Reviewers
----
-
-<table>
-<tr>
-<td>This content should be migrated eventually to in-repo documentation:</td>
-<td><a href="https://chromium.googlesource.com/chromium/src/+/main/docs/contributing.md">main/docs/contributing.md</a></td>
-<td><a href="https://chromium.googlesource.com/chromium/src/+/main/docs/code_reviews.md">main/docs/code_reviews.md</a></td>
-</tr>
-</table>
-
-When you're committing to the chromium repositories, ensure that you follow
-those guidelines:
-
-1. Find the right reviewer for your changes **and** for patches you're
- asked to review.
-2. Use the [Commit
- Queue](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/infra/cq.md)
- to commit your change (by setting Commit-Queue +2 on the code review
- page). For exceptional cases where you might not use the CQ, see
- [Directly committing
- code](/developers/contributing-code/direct-commit).
-3. If you need to revert your change, use the *Revert* button on the
- code review page.
-4. Some types of mechanical changes can be landed without requiring
- full owners approval. See [Mechanical
- Changes](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/code_reviews.md#mechanical-changes)
- docs.
-
-In short, do the right thing for the project, not the easiest thing to get code
-committed, and above all: use your best judgement.
-
-Don't be afraid to ask questions. There is always someone on Slack who can help
-you.
-
-**Changes with multiple reviewers**
-
-There are occasionally changes with a lot of reviewers on them, since sometimes
-several people might need to be in the loop for a change because of multiple
-areas of responsibility and expertise.
-
-The problem is that without some guidelines, there's no clear responsibility
-given in these reviews.
-
-If you're the sole reviewer on a change, you know you have to do a good job.
-When there are three other people, you sometimes assume that somebody else must
-have looked carefully at some part of the review. Sometimes all the reviewers
-think this and the change isn't reviewed properly.
-
-In other cases, some reviewers say "LGTM" for a patch, while others are still
-expecting changes. The author can get confused as to the status of the review,
-and some patches have been checked in where at least one reviewer expected
-further changes before committing.
-
-At the same time, we want to encourage many people to participate in the review
-process and keep tabs on what's going on.
-
-So, here are some guidelines to help clarify the process:
-
-1. When a patch author requests more than one reviewer, they should
- make clear in the review request email what they expect the
- responsibility of each reviewer to be. For example, you could write
- this in the email:
- larry: bitmap changes
- sergey: process hacks
- everybody else: FYI
- In this case, you might be on the review list because you've asked to be in
- the loop for multiprocess changes, but you wouldn't be the primary reviewer
- and the author and other reviewers wouldn't be expecting you to review all
- the diffs in detail.
-2. If you get a review that includes many other people, and the author
- didn't do (1), please ask them what part you're responsible for if
- you don't want to review the whole thing in detail.
-3. The author should wait for approval from everybody on the reviewer
- list before checking in.
-4. People who are on a review without clear review responsibility (i.e.
- drive-by reviews) should be super responsive and not hold up the
- review. The patch author should feel free to ping them mercilessly
- if they are.
-5. If you're an "FYI" person on a review and you didn't actually review
- in detail (or at all), but don't have a problem with the patch, note
- this. You could say something like "rubber stamp" or "ACK" instead
- of "LGTM." This way the real reviewers know not to trust that you
- did their work for them, but the author of the patch knows they
- don't have to wait for further feedback from you. Hopefully we can
- still keep everybody in the loop but have clear ownership and
- detailed reviews. It might even speed up some changes since you can
- quickly "ACK" changes you don't care about, and the author knows
- they don't have to wait for feedback from you. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/common-terms--techno-babble/corruption.png.sha1 b/chromium/docs/website/site/developers/common-terms--techno-babble/corruption.png.sha1
deleted file mode 100644
index 35da84a9c75..00000000000
--- a/chromium/docs/website/site/developers/common-terms--techno-babble/corruption.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b6723a649d37189a2cbf37f916aa96624048217f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/common-terms--techno-babble/index.md b/chromium/docs/website/site/developers/common-terms--techno-babble/index.md
deleted file mode 100644
index 0d89149437f..00000000000
--- a/chromium/docs/website/site/developers/common-terms--techno-babble/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: common-terms--techno-babble
-title: Common Terms & Technobabble
----
-
-Moved to the [wiki](http://code.google.com/p/chromium/wiki/Glossary). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/content-module/Content.png.sha1 b/chromium/docs/website/site/developers/content-module/Content.png.sha1
deleted file mode 100644
index 57a724ea3a2..00000000000
--- a/chromium/docs/website/site/developers/content-module/Content.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0032b62ea31908b0043324bf90386b0a7fcab9a9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/content-module/content-api/index.md b/chromium/docs/website/site/developers/content-module/content-api/index.md
deleted file mode 100644
index 70d96a2c75f..00000000000
--- a/chromium/docs/website/site/developers/content-module/content-api/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/content-module
- - Content module
-page_name: content-api
-title: Content API
----
-
-## This has moved to the Chromium repository at <https://chromium.googlesource.com/chromium/src/+/HEAD/content/public/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/content-module/index.md b/chromium/docs/website/site/developers/content-module/index.md
deleted file mode 100644
index 456165fcd45..00000000000
--- a/chromium/docs/website/site/developers/content-module/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: content-module
-title: Content module
----
-
-This documentation moved to the repository at
-<https://chromium.googlesource.com/chromium/src/+/HEAD/content/README.md>
-(except for the diagram below).
-
-[<img alt="image"
-src="/developers/content-module/Content.png">](https://docs.google.com/a/chromium.org/drawings/d/13yo_bSgwVdOUJFCIeVLL_rmtQ2SqElmxouC81q46GAk/edit?hl=en_US)
-
-The diagram above 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. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/contributing-code/-bug-syntax/index.md b/chromium/docs/website/site/developers/contributing-code/-bug-syntax/index.md
deleted file mode 100644
index 3816ef0778b..00000000000
--- a/chromium/docs/website/site/developers/contributing-code/-bug-syntax/index.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/contributing-code
- - Contributing Code
-page_name: -bug-syntax
-title: CL Footer Syntax
----
-
-Chromium stores a lot of information in footers at the bottom of commit
-messages. With the exception of R=, these trailers are only valid in the last
-paragraph of a commit message; any trailers separated from the last line of the
-message by whitespace or non-trailer lines will be ignored. This includes
-everything from the unique "Change-Id" which identifies a Gerrit change, to more
-useful metadata like bugs the change helps fix, trybots which should be run to
-test the change, and more. This page includes a listing of well-known footers,
-their meanings, and their formats:
-
-**Bug:**
-
-A comma-separated list of bug references, where a bug reference is either just a
-number (e.g. 123456) or a project and a number (e.g. skia:1234). On
-chromium-review, the default project is assumed to be 'chromium', so all bugs in
-non-chromium projects on bugs.chromium.org should be qualified by their project
-name.
-
-**Fixed:**
-
-The same as Bug:, but will automatically close the bug(s) as fixed when the CL
-lands.
-
-**R=**
-
-A comma-separated list of reviewer email addresses (e.g. foo@example.com,
-bar@example.com). This field will be going away with the switch to Gerrit, use
-the "-r foo@example.com" command line option to "git cl upload" instead.
-
-**Tbr:**
-
-Same format as the R line, but indicates to the commit queue that it can skip
-checking that all files in the change have been approved by their respective
-OWNERS.
-
-**Cq-Include-Trybots:**
-
-A comma-separated list of trybots which should be triggered and checked by the
-CQ in addition to the normal set. Trybots are indicated in "builder
-group:builder" format (e.g. tryserver.chromium.linux:linux_asan_experimental).
-
-**No-Presubmit:**
-
-If present, the value should always be the string "True". Indicates to the CQ
-that it should not run presubmit checks on the CL. Used primarily on automated
-reverts.
-
-**No-Try:**
-
-If present, the value should always be the string "True". Indicates to the CQ
-that it should not start or check the results of any tryjobs. Used primarily on
-automated reverts.
-
-**No-Tree-Checks:**
-
-If present, the value should always be the string "True". Indicates to the CQ
-that it should ignore the tree status and submit the change even to a closed
-tree. Used primarily on automated reverts.
-
-**Test:**
-
-A freeform description of manual testing that was done to ensure the change is
-correct. Not necessary if all testing is covered by trybots.
-
-**Reviewed-by:**
-
-Automatically added by Gerrit when a change is submitted, this is a list of
-names and email addresses of the people who approved (set the Code-Review label
-on) the change prior to submission.
-
-**Reviewed-on:**
-
-Automatically added by Gerrit when a change is submitted, this is a link back to
-the code review page for easy access to comment and patchset history.
-
-**Change-Id:**
-
-Automatically added by "git cl upload", this is a unique ID that helps Gerrit
-keep track of commits that are part of the same code review.
-
-**Cr-Commit-Position:**
-
-Automatically added by the git-numberer Gerrit plugin when a change is
-submitted, this is of the format fully/qualified/ref@{{ '{#' }}123456} and gives both
-the branch name and "sequence number" along that branch. This approximates an
-SVN-style monotonically increasing revision number.
-
-**Cr-Branched-From:**
-
-Automatically added by the git-numberer Gerrit plugin on changes which are
-submitted to branches other than master, to help someone looking at that commit
-know when that branch diverged from master.
diff --git a/chromium/docs/website/site/developers/contributing-code/direct-commit/index.md b/chromium/docs/website/site/developers/contributing-code/direct-commit/index.md
deleted file mode 100644
index 1aabfad2921..00000000000
--- a/chromium/docs/website/site/developers/contributing-code/direct-commit/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/contributing-code
- - Contributing Code
-page_name: direct-commit
-title: Directly committing code
----
-
-[TOC]
-
-When [contributing code](/developers/contributing-code) to Chromium, the last
-step in the life of a change list is committing it, after which it's closed.
-
-The preferred way of committing changes is via the [commit
-queue](/developers/testing/commit-queue).
-
-However, in certain circumstances it is acceptable or necessary to directly
-commit your change, bypassing the commit queue. This is discouraged however, due
-to not running the tests (hence higher risk of breakage), and requires more
-supervision on the part of the committer.
-
-Updated instructions for bypassing the commit queue are here:
-
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/infra/cq.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/contributing-code/external-contributor-checklist/index.md b/chromium/docs/website/site/developers/contributing-code/external-contributor-checklist/index.md
deleted file mode 100644
index 6f8ebd486de..00000000000
--- a/chromium/docs/website/site/developers/contributing-code/external-contributor-checklist/index.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/contributing-code
- - Contributing Code
-page_name: external-contributor-checklist
-title: External Contributor Checklist
----
-
-Before you LGTM a change from a non-chromium.org address, make sure we have the
-right to accept the contribution:
-
-* Definition: The "author" is the email address that owns the code
- review request on <https://chromiumcodereview.appspot.com/>
-* Make sure the author is already listed in src/AUTHORS. In some
- cases, the author's company might have a wildcard rule in AUTHORS
- (eg, \*@google.com).
-* If the author or his/her company is not listed, the CL should
- include a new AUTHORS entry.
- * If you don't work for Google, find someone who does to review
- the new entry.
- * Googlers: To verify that someone has signed the CLA, search for
- Google CLA signers at <https://signcla.corp.google.com/>.
- * If there's no entry, ask the person to sign the CLA:
- <https://cla.developers.google.com/> (individual or
- corporate, select 'any other Google project')
- * If there's a corporate CLA for the author's company, it must
- list the person explicitly (or the list of authorized
- contributors must say something like "All employees"). If
- the author is not on their company's roster, do not accept
- the change.
-
-If you have any questions or doubts, cc accounts@chromium.org for help. Also,
-please see this for more information:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/contributing.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/contributing-code/flag-ownership/index.md b/chromium/docs/website/site/developers/contributing-code/flag-ownership/index.md
deleted file mode 100644
index 2f9ba1c8feb..00000000000
--- a/chromium/docs/website/site/developers/contributing-code/flag-ownership/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/contributing-code
- - Contributing Code
-page_name: flag-ownership
-title: flag-ownership
----
-
-[This page has
-moved.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/flag_ownership.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/contributing-code/index.md b/chromium/docs/website/site/developers/contributing-code/index.md
deleted file mode 100644
index d117c7f4826..00000000000
--- a/chromium/docs/website/site/developers/contributing-code/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: contributing-code
-title: Contributing Code
----
-
-This document has migrated to
-<https://chromium.googlesource.com/chromium/src/+/main/docs/contributing.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/contributing-code/minimizing-review-lag-across-time-zones/index.md b/chromium/docs/website/site/developers/contributing-code/minimizing-review-lag-across-time-zones/index.md
deleted file mode 100644
index 1815f368d5e..00000000000
--- a/chromium/docs/website/site/developers/contributing-code/minimizing-review-lag-across-time-zones/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/contributing-code
- - Contributing Code
-page_name: minimizing-review-lag-across-time-zones
-title: Minimizing Review Lag Across Time Zones
----
-
-If you're reviewing a change for someone in a different time zone, one review
-cycle can take up to 24 hours.
-
-It's useful to remember that many contributors working outside of PST are
-constantly blocked on reviews. We can't rewrite the laws of physics but here are
-some tips on making the process go faster:
-
-* Please consider "LGTM with nits.", If a review from a committer has
- only minor issues. This small phrase can unblock an excited non-PST
- engineer a full 24 hours sooner!
-* Don't require a second round for trivial changes.
-* For owner reviews: provide an owner LGTM if the overall approach and
- structure of the CL looks good, but ask the CL author to find a
- reviewer in their timezone to work with to get all the details
- right.
-* If you have changes you want to see or if you don't like the CL
- **==suggest a solution and provide as much information as
- possible.==** Terse responses mean a full 48 hours can go by before
- the non-PST person can ask "How would you suggest I accomplish
- this?" and then another 24 while they wait for the answer. Please
- don't simply ask questions on the review; **==suggest an acceptable
- solution==**.
-* Along the same lines, if you don't like the way something is named
- **==please suggest an alternate name==** that you'd find acceptable.
-* See [this
- notice](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/ZeNYH4JBJVY/5bhKpwGuCAAJ)
- about acceptable latency for code reviews. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/contributing-code/watchlists/index.md b/chromium/docs/website/site/developers/contributing-code/watchlists/index.md
deleted file mode 100644
index 0e35ae9dee1..00000000000
--- a/chromium/docs/website/site/developers/contributing-code/watchlists/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/contributing-code
- - Contributing Code
-page_name: watchlists
-title: Watchlists
----
-
-This document has migrated to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/infra/watchlists.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/core-principles/index.md b/chromium/docs/website/site/developers/core-principles/index.md
deleted file mode 100644
index 62e4d4f56ad..00000000000
--- a/chromium/docs/website/site/developers/core-principles/index.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: core-principles
-title: Core Principles
----
-
-These are the things that are important to us: these principles shape the
-product that we build. Note that the examples given are meant to be illustrative
-rather than exhaustive.
-
-**Speed**
-
-Our objective is to make the fastest browser - and we tackle this in a number of
-ways.
-
-* Because the speed of rich web applications is important to us, we
- develop our own JavaScript engine, called V8.
-* Because the speed of page display is important to us, we develop our
- own rendering engine, called Blink. It's incredibly fast.
-* We pay attention to the speed of user interactions - from starting
- the browser to common actions like opening new tabs and windows, and
- switching between them. Noticeable lags are not acceptable.
-* We develop and pay close attention to automated tests for all of
- these things, and run them in combination with new features we
- develop so that we can be sure we're always getting better, not
- worse.
-
-When preparing changelists, we ask ourselves questions like:
-
-*"Does my code make Chrome slower? If it does, how do I fix it?"*
-
-*"Have I created automated performance testing for my feature? Have I created
-variations of existing performance tests to measure performance with my feature
-enabled?"*
-
-*"What opportunities are there for better performance in my feature? Have I
-filed bugs and labeled them with the Performance label?"*
-
-*"How will my code perform when the operating system or hard disk is bogged
-down?"*
-
-*"Am I taking care to avoid "blocking file system access" on the UI and IO
-threads?"*
-
-Ask yourself these questions before you commit your code. If you make a change
-that regresses measured performance, you will be required to fix it or revert.
-There are many tools available to help isolate bottlenecks. (LINK to tuning
-doc).
-
-**Security**
-
-As users spend more time in the browser and do more sensitive activities there
-(banking, tax returns, email) it is increasingly important that we provide the
-most secure environment that we can for our users.
-
-We operate with the principle of least privilege. To the extent possible, code
-is sandboxed and its privileges to interact with the host system are restricted
-as tightly as possible. Untrusted (web) content is intended to never be handled
-in privileged code, but instead passed off to sandboxed code for consumption.
-
-We believe in defense in depth. We have protections for our users at multiple
-levels. While the sandbox is designed to make sure that malware cannot install
-itself onto and read data from your system, we have other components such as
-Safe Browsing to help prevent users from reaching malware in the first place.
-
-We believe that security must be usable. Showing the user a certificate's
-fingerprint and throwing up our arms asking "what shall we do?" is not solving
-the problem at hand. Instead, we strive to provide a more understandable context
-in which relevant information (if any) is presented, along with explanations,
-encouraging users to take a safe default action.
-
-We believe that users should be safe by default. We should not expect users to
-take actions to be secure, rather we should act given the information we have to
-keep the user secure. We automatically update users to the latest version, we
-set reasonable defaults for security-related features, and we understand that
-users are focused on a task, not on security, and act accordingly.
-
-**Stability**
-
-Because browsers are more than just content viewers these days, we do a lot more
-in them. It's important that they act more like platforms.
-
-We apply conventional thinking in operating system design to the web browser. A
-bug that affects one application should not bring all of them down. With that in
-mind, we separate individual tabs into their own processes. We also do this for
-plugins.
-
-We try to write as many automated tests as we can, to make sure that the product
-is still functioning as intended. We close the tree when the tests fail. We
-revert changes that break them. We seek to improve our code coverage in such
-tests over time.
-
-We work to get a good sense of the stability of any build before we push it to
-our users. We gather data in a couple of ways, such as crash dumps from people
-who have opted in to sending them, and our own farm of automated test machines
-that run many builds a day against Google's cache of various web sites. We use
-the crash stats to determine how we should prioritize engineering work, and
-avoid shipping particularly crashy builds to stabler channels.
-
-When writing code, and before sending a changelist for review, we ask ourselves
-questions like:
-
-*"How can I write my code to maximize code coverage from unit tests?" ... unit
-tests are typically less flaky and easier to debug than UI tests.*
-
-*"Have I written or updated unit tests for the code I've changed?" ... all
-non-trivial changes should have a unit test -- the more coverage we can get from
-them, the more confident we can be in the stability of a release.*
-
-*"Have I run valgrind while exercising my feature and its tests?"*
-
-*"Have I isolated potentially brittle/untrusted code parsing in a utility
-process?" ... for example, web pages, profile migration, theme PNG decoding,
-extension parsing, etc. are all done in child processes.*
-
-*"Have I hidden my unfinished experimental feature behind a command line flag so
-as not to destabilize the weekly dev channel?"*
-
-**Simplicity**
-
-Google is all about incredibly sophisticated technology, but wrapped in a simple
-user experience. We do everything we can to optimize user interactions. The
-foremost way in which we've done this is by removing distractions from the
-browser itself, and letting page content speak for itself. "Content, not Chrome"
-is our mantra.
-
-We tend to avoid complex configuration steps in every aspect of the product,
-from installation through options. We take care of keeping the software up to
-date so you never need to be concerned about running the latest, safest version
-of Chrome.
-
-We try not to interrupt users with questions they are not prepared to answer, or
-get in their way with cumbersome modal dialog boxes that they didn't ask for.
-
-We take hints from our host platform, but retain a distinctive aesthetic.
-
-We want the browser to feel like a natural extension of your will. It should
-feel fluid and delightful. It's about getting you to the information you need,
-not about driving a piece of software.
-
-When writing code and designing features, we ask questions like:
-
-*"Have I talked to UI design group (chrome-ui-leads at google dot com) about my
-change?"*
-
-*"Have I made sure all non-trivial work is done off the UI thread, so the UI is
-never unresponsive for &gt; 200ms?" - UI jank is the devil. Don't make your
-change contribute to it.*
-
-*"Have I done my best to avoid introducing unexpected modal workflows, popups,
-questions the user can't answer, superfluous extra options?" - we bend over
-backwards to avoid these things.*
-
-*"Have I spent time before the next major release polishing my feature, making
-sure it has all appropriate animations, plays nicely with other Chrome features
-like themes, etc?" - UI polish is important to us. We want to make sure the UI
-looks and feels tight. Think of the interior trim pieces on an expensive car.* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/core-principles/no-hidden-preferences/index.md b/chromium/docs/website/site/developers/core-principles/no-hidden-preferences/index.md
deleted file mode 100644
index af5a1ff7119..00000000000
--- a/chromium/docs/website/site/developers/core-principles/no-hidden-preferences/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/core-principles
- - Core Principles
-page_name: no-hidden-preferences
-title: No Hidden Preferences
----
-
-One of the [Core Principles](/developers/core-principles) is Simplicity:
-
-> We tend to avoid complex configuration steps in every aspect of the product,
-> from installation through options. We take care of keeping the software up to
-> date so you never need to be concerned about running the latest, safest
-> version of Chrome.
-
-> We try not to interrupt users with questions they are not prepared to answer,
-> or get in their way with cumbersome modal dialog boxes that they didn't ask
-> for.
-
-The target user base for Chromium is incredibly diverse, and while we try to
-make Chromium flexible and powerful enough to serve everyone well, the reality
-is that we can't always do that. Some users might want different behaviors, and
-the easy way out is to give them that option. That is a temptation that must be
-resisted.
-
-When we make a hidden preference, it is admitting failure. If our users complain
-about a feature, do we add a preference for it to be turned off? If we do so
-we're ignoring the feedback of our users that perhaps the feature could be
-smarter in satisfying their needs. In addition, as software developers we
-usually don't think about it, but setting a preference is a pretty technically
-complicated task, so adding one wouldn't actually help the vast majority of the
-users, who will end up suffering with the feature in silence. Take the feedback
-to improve the feature, not to add a switch to turn it off.
-
-Hidden settings also make it nearly impossible to do full testing. Each
-boolean-valued preference means that the code can behave one of two ways. Do you
-write all your tests to take those two branches into account? Each additional
-preference means twice the number of code paths, meaning exponential growth.
-This means preferences are bad for maintainability.
-
-about:flags and command-line flags are only for temporary testing. Long-lived
-command-line flags are prohibited except for rare cases where we need them for
-long-term testing and development.
-
-Recommended external links:
-
-* [ignore the code: Preferences Considered
- Harmful](http://ignorethecode.net/blog/2008/05/18/preferences-considered-harmful/)
-* [Joel Spolsky:
- Choices](http://www.joelonsoftware.com/uibook/chapters/fog0000000059.html) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/cpp-in-chromium-101-codelab/index.md b/chromium/docs/website/site/developers/cpp-in-chromium-101-codelab/index.md
deleted file mode 100644
index 831bdd0a477..00000000000
--- a/chromium/docs/website/site/developers/cpp-in-chromium-101-codelab/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: cpp-in-chromium-101-codelab
-title: C++ in Chromium 101 - Codelab
----
-
-The tutorial has moved to being checked in to the source tree.
-
-See the [C++ in Chromium 101
-Codelab](https://chromium.googlesource.com/chromium/src/+/HEAD/codelabs/cpp101/codelab.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/crash-reports/crash-with-invalid-handle/index.md b/chromium/docs/website/site/developers/crash-reports/crash-with-invalid-handle/index.md
deleted file mode 100644
index 3d241b13f2e..00000000000
--- a/chromium/docs/website/site/developers/crash-reports/crash-with-invalid-handle/index.md
+++ /dev/null
@@ -1,188 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/crash-reports
- - Crash Reports
-page_name: crash-with-invalid-handle
-title: Crash with invalid handle
----
-
-## What is this crash about?
-
-### I'm seeing frequent Chrome crashes and the stack looks like this:
-
-> \[debugger_win.cc:20 \] base::debug::BreakDebugger()
-
-> \[scoped_handle.cc:79 \] base::win::HandleTraits::CloseHandle()
-
-> \[file_win.cc:120 \] base::File::Close()
-
-> \[file_stream_context.cc:184 \] net::FileStream::Context::CloseFileImpl()
-
-> \[bind_internal.h:1169 \] base::internal::Invoker&lt;&gt;::Run()
-
-> \[sequenced_worker_pool.cc:760 \]
-> base::SequencedWorkerPool::Inner::ThreadLoop()
-
-> \[sequenced_worker_pool.cc:508 \] base::SequencedWorkerPool::Worker::Run()
-
-> \[simple_thread.cc:60 \] base::SimpleThread::ThreadMain()
-
-> \[platform_thread_win.cc:78 \] base::\`anonymous namespace'::ThreadFunc()
-
-> \[kernel32.dll + 0x0004ee1b \] BaseThreadInitThunk
-
-> \[ntdll.dll + 0x000637ea \] __RtlUserThreadStart
-
-> \[ntdll.dll + 0x000637bd \] _RtlUserThreadStart
-
-or like this:
-
-> \[debugger_win.cc:20 \] base::debug::BreakDebugger()
-
-> \[scoped_handle.cc:79 \] base::win::HandleTraits::CloseHandle()
-
-> \[scoped_handle.h:52 \]
-> base::win::GenericScopedHandle&lt;&gt;::~GenericScopedHandle&lt;&gt;()
-
-> \[handle_watcher.cc:271 \] mojo::common::WatcherThreadManager::StopWatching()
-
-> \[handle_watcher.cc:434 \]
-> mojo::common::HandleWatcher::SecondaryThreadWatchingState::~SecondaryThreadWatchingState()
-
-> \[chrome.dll + 0x00238a03 \]
-> mojo::common::HandleWatcher::SecondaryThreadWatchingState::\`scalar deleting
-> destructor'()
-
-The relevant part is the first three lines that show that something is being
-closed and there is an intentional crash because there is an error closing that
-handle.
-
-These stacks point to a form of corruption in the past, which is only detected
-when the invalid handle is being closed. Like most forms of corruption, it is
-not safe to continue execution at this point, but at the time of the crash there
-is not enough information to know when (and where) the corruption was
-introduced.
-
-### I am seeing Chrome hangs with stacks like this one:
-
-> \[ntdll.dll + 0x00040da8 \] ZwWaitForSingleObject
-
-> \[KERNELBASE.dll + 0x00001128 \] WaitForSingleObjectEx
-
-> \[KERNELBASE.dll + 0x000010b3 \] WaitForSingleObject
-
-> \[platform_thread_win.cc:222 \] base::PlatformThread::Join()
-
-> \[thread.cc:135 \] base::Thread::Stop()
-
-> \[..._process_sub_thread.cc:26 \]
-> content::BrowserProcessSubThread::~BrowserProcessSubThread()
-
-> \[chrome.dll + 0x0043dcb8 \] content::BrowserProcessSubThread::\`scalar
-> deleting destructor'()
-
-> \[browser_main_loop.cc:829 \]
-> content::BrowserMainLoop::ShutdownThreadsAndCleanUp()
-
-> \[browser_main_runner.cc:146 \] content::BrowserMainRunnerImpl::Shutdown()
-
-> \[browser_main.cc:28 \] content::BrowserMain()
-
-This is another manifestation of the same underlying issue: once a handle is
-corrupt, using it can do anything. If the OS detects that the handle is invalid,
-the operation generally fails right away. However, if the handle now points to
-something else, operations may appear to work but do something generally
-unexpected. The code in this example is simply waiting on the wrong object, so
-most likely it will never be signaled.
-
-## What to do about it
-
-We have better detection baked into the 32-bit builds of Dev and Canary builds
-of Chrome. In that case, the crash stack will hopefully morph into something
-that points to the code at fault.
-
-### For users:
-
-* Consider installing a
- [Canary](https://www.google.com/chrome/browser/canary.html?platform=win)
- or
- [Dev](https://www.google.com/chrome/browser/index.html?extra=devchannel&platform=win)
- Channel Build (Windows only. See
- [this](/getting-involved/dev-channel) for information about what a
- channel is and what to do before installing a new one).
-* Search your system for malware, and try removing software that
- interacts directly with Chrome by injecting DLLs. In the past we
- have seen correlation between 3rd party software loaded into Chrome
- and problems with invalid handles. You can get a list of all DLLs
- loaded into the browser by navigating to about:conflicts (note that
- most likely there are no detected conflicts even if a DLL is causing
- trouble).
-
-### For bug triage:
-
-* Close bugs that are reported on the Stable or Beta builds, as there
- is very little to do. Feel free to point to this page.
-* If the report comes directly from the stability result of a given
- version (top x on the crash server), search for a similar report and
- merge (it may be closed as WontFix). Avoid merging into a
- user-reported bug (there is a similar report somewhere for something
- that is internal
-* The ScopedHandle verifier is far from perfect, so even with a 32-bit
- build canary build it is bound to generate dumps that follow the
- same pattern of dumps from Stable. Ignore those reports.
-
-### For developers:
-
-A Canary build will generate a properly bucketed stack dump like this:
-
-> \[scoped_handle.cc:145 \] base::win::OnHandleBeingClosed()
-
-> \[close_handle_hook_win.cc:27 \] \`anonymous namespace'::CloseHandleHook()
-
-> \[shared_memory_win.cc:75 \] base::SharedMemory::~SharedMemory()
-
-> \[resource_buffer.cc:42 \] content::ResourceBuffer::~ResourceBuffer()
-
-> \[ref_counted.h:192 \] base::RefCountedThreadSafe&lt;&gt;::DeleteInternal()
-
-> \[async_resource_handler.cc:99 \]
-> content::AsyncResourceHandler::~AsyncResourceHandler()
-
-> \[chrome.dll + 0x003af3ae \] content::AsyncResourceHandler::\`scalar deleting
-> destructor'()
-
-> \[...ed_resource_handler.cc:19 \]
-> content::LayeredResourceHandler::~LayeredResourceHandler()
-
-> \[chrome.dll + 0x003aebc7 \] content::BufferedResourceHandler::\`scalar
-> deleting destructor'()
-
-> \[...ed_resource_handler.cc:19 \]
-> content::LayeredResourceHandler::~LayeredResourceHandler()
-
-> \[chrome.dll + 0x003ae5f8 \] content::ThrottlingResourceHandler::\`scalar
-> deleting destructor'()
-
-> \[resource_loader.cc:104 \] content::ResourceLoader::~ResourceLoader()
-
-It points to ~SharedMemory as the source of corruption. This means that said
-code is either double closing a handle somehow (most of the time it is far from
-obvious how that happens), or it is not really doing anything wrong but it is
-being blamed anyway. In any case, this code should not be doing manual handle
-management so it should be refactored to use ScopedHandle instead.
-
-If there is a bug, it most likely will go away with the refactor. If there was
-no bug, ScopedHandle verifier will stop blaming this code, and the overall
-reliability of the verifier will go up.
-
-* So the take away is... refactor the code to remove manual handle
- management. This also means to modify interfaces to remove passing
- raw handles around and instead pass a ScopedHandle (or something
- that encapsulates the handle using a ScopedHandle internally).
- There's plenty of code to choose from!. See bugs
- [322664](http://crbug.com/322664), [416721](http://crbug.com/416721)
- or [417532](http://crbug.com/417532) for some examples.
-* Search the crash server for stacks containing OnHandleBeingClosed to
- get a summary of issues currently detected as problematic. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/crash-reports/handle-file-upload-scheme/index.md b/chromium/docs/website/site/developers/crash-reports/handle-file-upload-scheme/index.md
deleted file mode 100644
index ead7b69f74c..00000000000
--- a/chromium/docs/website/site/developers/crash-reports/handle-file-upload-scheme/index.md
+++ /dev/null
@@ -1,116 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/crash-reports
- - Crash Reports
-page_name: handle-file-upload-scheme
-title: Handle file upload scheme
----
-
-Some client application need to handle the actual upload of the crash reports,
-specially on Mac or iOS where using NSUrlSession is mandatory on some
-conditions.. It can be done by adding support of the file:// scheme for upload
-URL.
-
-Three main modifications have to be done to breakpad to support this feature.
-
- Write the HTTP request to file.
-
- Breakpad thread.
-
- Separate the request creation and the response handler.
-
-As Breakpad is used by multiple applications on multiple platforms, the standard
-behavior has to be preserved if the scheme is not file://.
-
-## Write the HTTP request to file
-
-It is possible to set the uploading URL in the config NSDictionary\* to a
-temporary file://. This requires an API to get the configuration dictionary.
-This URL can then be checked in the HTTPMultipartUpload send method, and in case
-of a file:// scheme, the request is written in a file.
-
-## Breakpad thread.
-
-Every call in Breakpad must be executed in the breakpad thread. This implies to
-use the \[BreakpadController withBreakpadRef:\] method that will ensure that
-operations are executed in the correct thread.
-
-## Separate the request creation and the response handler.
-
-The biggest change in the project is the separation of the request creation and
-the response handler. It is possible for the client to wait a long time before
-sending the report. The two phases send the report and interpret the response
-have to be splitted.
-
-Breakpad renames the minidump from the minidumpID to an ID contained in the HTTP
-response. At the moment the response is received, it is necessary to have both
-IDs. An API has to be provided to the client to store the configuration
-NSDictionary, and to reconstruct the upload objects using it.
-
-**Proposed new API :**
-
-### HTTPMultipartUpload:
-
-- \[HTTPMultipartUpload send\] : (modified)
-
-This method will test if the url scheme is file://. In that case, the request
-body is written to the pointed file and method returns nil.
-
-### Uploader
-
-- \[Uploader report\] (modified)
-
-Split this method into two method :
-
- - \[Uploader report\] that will initiate the upload
-
- - \[handleResponse:(NSData\*)response withError:(NSError\*)error\] that will
- handle the response.
-
-If the URL is not file://, - \[Uploader report\] will directly call -
-\[handleResponse:(NSData\*)response withError:(NSError\*)error\].
-
-- \[handleResponse:(NSData\*)response withError:(NSError\*)error\] (added)
-
-that will handle the response.
-
-NSDictionary \*readConfigurationData(const char \*configFile); (added)
-
-The configuration has to be saved to be able to recreate the uploader object
-when the network response is received. This method has to be public.
-
-### Breakpad
-
-NSDictionary\* BreakpadGetNextReportConfiguration(BreakpadRef ref); (added)
-
-This method is needed to retrieve the configuration of the next report to be
-uploaded.
-
-void BreakpadUploadReportWithParametersAndConfiguration(BreakpadRef ref,
-
-NSDictionary \*server_parameters,
-
-NSDictionary \*configuration); (added)
-
-void BreakpadHandleNetworkResponse(BreakpadRef ref,
-
-NSDictionary\* configuration,
-
-NSData\* data,
-
-NSError\* error); (added)
-
-### BreakpadController :
-
-- (void)threadUnsafeSendReportWithConfiguration:(NSDictionary\*)configuration
-
-withBreakpadRef:ref; (added)
-
-This method calls BreakpadUploadReportWithParametersAndConfiguration in the
-current thread. It is needed to keep the sequentiality of the operations. As the
-name of the method suggests, it is threadUnsafe and should only be used from the
-- (void)withBreakpadRef:(void(^)(BreakpadRef))callback
-
-callback. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/crash-reports/index.md b/chromium/docs/website/site/developers/crash-reports/index.md
deleted file mode 100644
index e5b1796bbe4..00000000000
--- a/chromium/docs/website/site/developers/crash-reports/index.md
+++ /dev/null
@@ -1,257 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: crash-reports
-title: Crash Reports
----
-
-The crash reporting system for Google Chrome is called
-[Breakpad](https://code.google.com/p/google-breakpad/), although it is being
-replaced by [Crashpad](https://crashpad.chromium.org/), which is already in use
-on Windows and Mac. Both are integrated into the Chromium source in
-[//components/crash](https://code.google.com/p/chromium/codesearch#chromium/src/components/crash/).
-Breakpad is disabled by default in Chromium, and crash reports are only
-available to Google employees, though they are frequently copied into the bug
-tracker for tracking and fixing.
-
-[TOC]
-
-# Enabling Breakpad
-
-Breakpad is disabled by default. The cross-platform way to turn on crash
-reporting is to perform an official, branded build of Chromium by setting GN
-arguments is_chrome_branded=true and is_official_build=true, which will require
-a [src-internal](https://goto.google.com/src-internal) checkout.
-
-To enable Breakpad without doing a branded build, each platform has a unique way
-of enabling breakpad:
-
-## In Chromium
-
-### Windows
-
-Windows uses crashpad by default. It's compiled in and enabled by default.
-
-### Linux
-
-Breakpad is compiled in, but is not enabled by default. See
-IsCrashReportingEnabled() in chrome_browser_main_linux.cc for details on when it
-is enabled.
-
-Set the gyp variable (GYP_DEFINES) linux_dump_symbols=1 to dump the debugging
-symbols for the chrome binary in the Breakpad symbol format as part of a build.
-
-### Chrome OS
-
-Breakpad is compiled in, similar to Linux above. See the [Chrome OS crash
-reporting FAQ](/chromium-os/packages/crash-reporting/faq) for differences.
-
-### Mac
-
-Mac uses Crashpad as its crash reporter instead of Breakpad. Crashpad is always
-compiled in and enabled, though reports are only stored locally and not uploaded
-by default.
-
-## Generating Crash Dumps Locally
-
-After Breakpad is enabled, you can have crash report minidumps generated
-locally.
-
-To get crash reports for content_shell and layout tests, see [this
-page](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/using_crashpad_with_content_shell.md).
-
-### On Windows
-
-Run chrome.exe --noerrdialogs to disable the OS-level error reporter. Any
-crashes will then cause a minidump file (.dmp) to be generated in
-%HOME%\\AppData\\Local\\Chromium\\User Data\\Crashpad\\reports.
-
-### On Linux
-
-To make chromium write a .dmp file, run it like
-
-CHROME_HEADLESS=1 out/Release/chrome
-
-### On Mac
-
-To make Chromium write crash dumps, no additional work is needed. To test it, a
-renderer process can be triggered to crash by visiting “about:crash”, or for
-real fun, a browser process crash can be triggered by visiting
-“about:inducebrowsercrashforrealz”. The crash dump file is stored in
-~/Library/Application Support/Chromium/Crashpad/completed.
-
-$ ls -l ~/Library/Application\\ Support/Chromium/Crashpad/completed
-
-total 448
-
--rw-------@ 1 mark staff 229248 Mar 13 2015
-4bfca440-039f-4bc6-bbd4-6933cef5efd4.dmp
-
-# Life of a Crash Report
-
-When a Chrome process crashes, Breakpad or Crashpad springs into action by
-gathering information about the exception state, callstacks, stack memory, and
-loaded modules. It takes all of this information and puts it into a minidump
-file. This minidump is then HTTP POST uploaded to Google, along with some
-metadata. The metadata contains information like Chrome version, OS name and
-version, and [crash
-keys](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/debugging_with_crash_keys.md).
-
-Once the crash report and metadata are received, a server begins processing it.
-The first step is to symbolize the instruction pointers to get function names
-associated with the callstack. The processing servers have platform-neutral
-[Breakpad symbol
-files](https://code.google.com/p/google-breakpad/wiki/SymbolFiles) for Chrome
-executables and operating system shared libraries, which allow symbolication of
-both Chrome functions and OS functions. After symbolizing the crash, the
-processor generates signatures to help group/bucket crash reports by their
-cause, implicated by shared stack frames.
-
-The tools used by the processor to symbolize the stack are effectively the same
-as the minidump_stackwalk and minidump_dump tools available in Breakpad.
-
-Once a crash report is processed, it is made available for view in the [crash
-dashboard](https://goto.google.com/crash/root). The dashboard allows developers
-to drill down into crash reports, grouped by metadata. More documentation on
-this is available internally, linked to from the dashboard. The original
-minidump file can be downloaded from this frontend, as well.
-
-## Crash Signatures
-
-There are three types of signatures generated by the crash processor:
-
-### Stack Signature
-
-The stack signature is the topmost symbol name in the crashed thread, suffixed
-with a small hash of the callstack. This signature provides a high-level
-grouping and easy identification (as it is human-readable), but it can collide
-across versions for different complete stack traces. Variance in the crashing
-thread's callstack can also produce several signatures for the same root cause.
-
-### Stack Signature 2
-
-This signature is merely a hash of the crashed stack. This makes it accurate for
-grouping crashes precisely, but it is not human readable and slight variance in
-a crashed stack defeat this signature's bucketing properties.
-
-### Magic Signature
-
-The magic signature is heuristic-based, using application-specific knowledge of
-the Chromium codebase to find the most germane symbol to produce a signature.
-The magic signature creator has knowledge of CHECK/DCHECK, hangs caught by the
-ThreadWatcher watchdog, out-of-memory conditions, memory corruption signs, and
-other heuristics. This signature is highly simplified, which gives it good
-bucketing properties and protection against callstack variance, but the
-signature can often be generated for disjoint crashes from different versions.
-More information can be found in the processor's [design
-document](https://goto.google.com/xgqgp) and this
-[explanation](https://goto.google.com/gvqex).
-
-# Working with Minidumps
-
-The minidump format originated on Windows, and can be natively loaded into a
-[debugger on that
-platform](/developers/how-tos/debugging-on-windows#TOC-Debugging-with-WinDBG).
-Doing this gives you access to local variables, callstacks, and integrates with
-the source viewer in Visual Studio.
-
-On POSIX systems, however, a minidump is an opaque binary blob. It is possible
-to examine local variable state, but it requires manual work to do so. To work
-with minidumps, Breakpad provides two tools ([more information
-here](/developers/decoding-crash-dumps)):
-
-**minidump_stackwalk** prints the stack trace for all of the threads in the
-minidump. Note that without Breakpad symbol files, placed in a special directory
-structure, this will not symbolize the stack. It will merely print the %EIP,
-%EBP, and %ESP (or the x64 equivalent) for each frame and the code module in
-which the frame resides.
-**minidump_dump** outputs the stack memory for each thread as a hexadecimal
-string.
-
-## Extracting Local Variables on POSIX
-
-This is one workflow for manually analyzing a minidump:
-
-1. Run minidump_dump and minidump_stackwalk on the target minidump
- file, piping output to text files.
-2. Find the target thread in the stackwalk (via the threadid).
-3. Find the corresponding target thread in the stackdump.
-4. Take the raw stack data for that thread, and remove the 0x prefix.
-5. Split the stack data on word-size boundaries (8 hexadecimal
- characters on a 32-bit platform).
-6. Using the information from the stackwalk, annotate EIP, EBP, and ESP
- in the stackdump to delineate stack frames. Note that the byte
- order/endianness in the stackdump may not match host order, i.e. the
- pointer badbeef may be represented in the minidump as efbedbba.
-7. Download the build products (executable and symbol file) for the
- version of Chrome you're working with. Disassemble the function
- you're interested in.
-8. Step through the assembly and see how data is being pushed and
- popped off the stack, and try to correlate it to the data in the
- stackdump.
-
-Unfortunately, this process is neither straightforward nor quick. But there are
-alternatives for saving local variables to be visible in a crash report. See
-below for more information.
-
-However, it may be possible to get most of the same information using
-[WinDBG](/developers/how-tos/debugging-on-windows#TOC-Debugging-with-WinDBG) on
-Windows. As long as the CPU architecture is supported by Windows, the debugger
-will be able to understand the exception record and disassemble the code around
-the exception, show call stacks (without symbols though), and let you inspect
-the contents of the stack and registers. That may be enough to get you going on
-a good percentage of crashes, especially since the symbolized stack may be
-available on the crash server.
-
-See also
-<http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/crash-reporting/debugging-a-minidump>
-
-## Symbolizing Minidumps
-
-To symbolize a minidump that was not uploaded, you can use the
-[crsym](https://goto.google.com/crsym/) tool (internal instance of
-<https://github.com/chromium/crsym/>):
-
-1. Build minidump_stackwalk from inside the Chromium or Breakpad trees.
-2. Run minidump_stackwalk -m /path/to/minidump.dmp &gt; /tmp/stack.txt
-3. Go to [crsym](https://goto.google.com/crsym/) and set the input type
- to be a Minidump Stackwalk.
-4. Paste the contents of /tmp/stack.txt into the input field.
-5. Press the Symbolize button and wait for the output.
-
-To symbolize a minidump for a local build, follow the steps in
-<https://code.google.com/p/chromium/issues/detail?id=304846#c14> for Mac, and
-see <http://www.chromium.org/developers/decoding-crash-dumps> for linux.
-
-# Production Debugging
-
-If a crash is not reproducible, the only tools at one's disposal for
-investigation are what can be gleaned from a crash report. These are some tips
-for debugging builds running in production (i.e. on users' machines).
-
-## Aliasing Against Optimizations
-
-Production builds are highly optimized to make the binary executable fast and
-small. As part of this, when the compiler is optimizing, it will reuse space on
-the stack for different variables. To defeat this optimization, you can use
-base::debug::Alias() on the variable. This will attempt to force the compiler to
-keep dedicated space around for the variable, so that its value is inspectable
-in a minidump stackdump.
-
-## Crash Keys
-
-Another way to make variable values accessible in a crash report is to report it
-as metadata, rather than keeping it in the minidump. The metadata is viewable in
-the crash dashboard and is not contained in the minidump file. Learn more about
-[debugging with crash keys
-here](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/debugging_with_crash_keys.md).
-
-## Checking Out a Release Branch
-
-Production builds are generally not cut from the tip of tree/trunk, but are
-branched and stabilized via the dev, beta, and stable release channels. [Follow
-these
-instructions](https://code.google.com/p/chromium/wiki/UsingGit#Working_with_release_branches)
-for how to check out a release branch, which will give you the code for the
-version of the crash you're investigating. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-and-using-profiles/index.md b/chromium/docs/website/site/developers/creating-and-using-profiles/index.md
deleted file mode 100644
index 3aba3c6ec4d..00000000000
--- a/chromium/docs/website/site/developers/creating-and-using-profiles/index.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: creating-and-using-profiles
-title: Creating and Using Profiles
----
-
-*(This page deals with establishing entirely separate data directories for
-running parallel instances of the Chrome browser. To create separate user
-accounts within the same Chrome browser instance, please read about the
-[multiple accounts feature](/user-experience/multi-profiles).)*
-
-By creating and using multiple profiles, you can do development — creating
-extensions, modifying the browser, or testing the browser — while still being
-able to use Google Chrome as your default browser. We recommend that you use the
-default profile for your everyday browsing.
-The details of how to create and use a profile vary by platform, but here's the
-basic process:
-
-* Create a folder to hold data for the new profile.
-* Create a shortcut or alias that launches the browser, using the
- `--user-data-dir` command-line argument to specify the profile's
- location.
-* Whenever you launch the browser, use the shortcut or alias that's
- associated with the profile. If the profile folder is empty, the
- browser creates initial data for it.
-
-### Instructions: Windows
-
-#### To create a profile
-
-1. Create a folder on your computer, say **C:\\chrome-dev-profile**.
- This folder will hold the data for the new profile.
-2. Make a copy of the Google Chrome shortcut on your desktop.
- (Right-click, then Copy.) Name the new shortcut something like
- **Chrome Development**.
-3. Right-click the **Chrome Development** shortcut, choose
- **Properties**, and paste `--user-data-dir=C:\\chrome-dev-profile`
- at the end of the **Target** field. The result might look like this:
- `"C:\Documents and Settings\me\Local Settings\Application
- Data\Google\Chrome\Application\chrome.exe"
- --user-data-dir=C:\chrome-dev-profile`
-4. Start Google Chrome by double-clicking the **Chrome Development**
- shortcut. This creates the profile data.
-
-#### To use the profile
-
-Just start Google Chrome by double-clicking the **Chrome Development** shortcut.
-Yep, it's that easy.
-
-#### To clear the profile
-
-You might want to clear the profile if you're testing, and you want to start
-from scratch. Here's how:
-
-1. Close Google Chrome.
-2. Delete the contents of your profile folder — the folder you
- specified with `--user-data-dir` (for example,
- **C:\\chrome-dev-profile**).
-
-### Instructions: Mac
-
-To be provided. See [User Data Directory](/user-experience/user-data-directory)
-for the default location.
-
-### Instructions: Linux
-
-To be provided. See [User Data Directory](/user-experience/user-data-directory)
-for the default location. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/0-prof-only.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/0-prof-only.png.sha1
deleted file mode 100644
index 60ab704c8e3..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/0-prof-only.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8635669c0a37fe28e1e230bee4f89839bda34aa9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/1-plot-internal.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/1-plot-internal.png.sha1
deleted file mode 100644
index b178b1ccd86..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/1-plot-internal.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0946bb9279626a40eff941886bfc3037feaeade7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/2-distorted.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/2-distorted.png.sha1
deleted file mode 100644
index 8ba9703ea13..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/2-distorted.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3499d18dc6afa551f18ccc4cb320fa053840cac5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/3-undistorted.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/3-undistorted.png.sha1
deleted file mode 100644
index bede422b34d..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/3-undistorted.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e7088ef58050482e290571f6808a9907056c957a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/4-autoscale.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/4-autoscale.png.sha1
deleted file mode 100644
index 5753e3f614f..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/4-autoscale.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-86b0826dea267353619e1d66e95df6f7fd320a6a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2013-10-06 at 7.33.59 PM.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2013-10-06 at 7.33.59 PM.png.sha1
deleted file mode 100644
index 1c03ae450eb..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2013-10-06 at 7.33.59 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7200c63a283ec1507075deb5cceffcf8b1de20cf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.20.48 PM.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.20.48 PM.png.sha1
deleted file mode 100644
index 3c0a62352b6..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.20.48 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-05d01d79a80d706ada92217b984352c26bdd588f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.27.21 PM.png.sha1 b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.27.21 PM.png.sha1
deleted file mode 100644
index 580816abead..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/Screen Shot 2014-09-14 at 1.27.21 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c8247a11e530e78960bc0c7d5a2cb28e7149ef26 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/index.md b/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/index.md
deleted file mode 100644
index 00067a33c66..00000000000
--- a/chromium/docs/website/site/developers/creating-v8-profiling-timeline-plots/index.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: creating-v8-profiling-timeline-plots
-title: Creating V8 profiling timeline plots
----
-
-For visualization, timeline graphs can be plotted to show where V8 is spending
-time. This can be used to find bottlenecks and spot things that are unexpected
-(for example, too much time spent in unoptimized code). Data for the plot are
-gathered by both sampling and instrumentation. Since the latter distorts the
-performance, the plot script attempts to undistort the logged timestamps.
-
-[<img alt="image"
-src="/developers/creating-v8-profiling-timeline-plots/Screen%20Shot%202014-09-14%20at%201.27.21%20PM.png">](/developers/creating-v8-profiling-timeline-plots/Screen%20Shot%202014-09-14%20at%201.27.21%20PM.png)
-
-## Profiling in Chrome
-
-### Desktop Chrome
-
-Close all Chrome instances (both Canary and Stable).
-
-To profile a web site in chrome, pass the same flags to V8 using `--js-flags`
-and with `--no-sandbox` to enable writing into `v8.log`.
-
-For example:
-
-$ ./chrome --no-sandbox --js-flags="--prof --log-timer-events" mail.google.com &
-sleep 10; kill $!
-
-Given that Gmail is already logged into, this profiles the first 10 seconds
-after starting Chrome and loading Gmail, before Chrome is killed.
-
-This will create a v8.log file next to the Chrome binary folder.
-
-If the plotting script fails stating that the logfile is inconsistent, retry
-while adding --logfile=v8-%p.log to the --js-flags, which will create a separate
-file for each process suffixed with the process' pid.
-
-### Chrome on Android
-
-Since Android has additional security sandboxing, the renderer process will not
-be able to write to a file in the application's working directory (even when
---no-sandbox is enabled). You must therefore create a directory which can be
-written by any user and instruct V8 to log it's output there.
-
-For example:
-
-$ adb shell mkdir /data/local/tmp/v8-logs/ $ adb shell chmod 777
-/data/local/tmp/v8-logs/ \[choose adb_content_shell_command_line or
-adb_chromium_testshell_command_line below depending upon your target\] $
-./build/android/adb_content_shell_command_line --no-sandbox --js-flags=\\"--prof
---log-timer-events --logfile=/data/local/tmp/v8-logs/v8.log\\"
-
-## Now, after restarting the content shell / chromium test shell, the logs will be available in /data/local/tmp/v8-logs/v8.log and can be retrieved using adb pull.
-
-## Profiling in d8
-
-## To profile a script in d8, run d8 with the appropriate flags
-
-* ## `--prof` enables tick based profiling
-* ## `--log-internal-timer-events` enables timing the runtime of V8's
- internal components such as the GC, parser, compiler, etc.
-* ## `--log-timer-events` implies `--log-internal-timer-events`, but
- also times external callbacks.
-
-## For example
-
-## $ out/native/d8 --prof --log-timer-events imaging-darkroom.js
-
-## The log entries will be written into `v8.log`
-
-## Plotting
-
-Find the sure you have the `isolate-***.log `or` v8.log` file created during
-profiling. It was created in the folder you launched that command from.
-
-Open
-<https://v8.googlecode.com/svn/branches/bleeding_edge/tools/profviz/profviz.html>
-
-* In the file picker dialog, select the log file you want to view.
-* Hit start and wait a few seconds for the plot to generate
-* You can modify the range selection and hit Start again to replot.
-
-## Interpretation of the plot. A case study.
-
-Let's profile
-[Octane's](http://www.google.com/url?sa=D&q=http%3A%2F%2Foctane-benchmark.googlecode.com)
-pdfjs benchmark. Due to the nature of the benchmark, having many accesses to
-typed arrays, we expect a considerable amount of time being spent in external
-callbacks (which implement typed arrays).
-
-Figure 1: Using only `--prof`, the resulting plot only contains the sampling
-based data. Note that the granularity isn't really enough to get a good picture
-of all this. The colors of the top-most javascript stack frames show that we are
-running more and more optimized code.
-
-[<img alt="image"
-src="/developers/creating-v8-profiling-timeline-plots/0-prof-only.png">](/developers/creating-v8-profiling-timeline-plots/0-prof-only.png)
-
-* **GCScavenger**: young space GC
-* **GCCompactor**: old space full GC
-* **Execute**: time spent executing JS code (as opposed to GC, waiting
- on native APIs to return, etc.)
-* **Code kind:** color indicates optimized (green) vs. unoptimized
- (red, “full code”)
-
-Figure 2: Adding the option `--log-internal-timer-events` we still get roughly
-the same benchmark score, so we can be sure that the resulting plot has not been
-distorted by a lot by instrumentation. We now have a clearer breakdown of the
-time spent on this benchmark. We can see that parsing the source takes a
-sizeable chunk of time, which also leads to an execution pause. We also see that
-at the beginning, a lot of recompiling (optimizing) is going on. However, we do
-not see the external callbacks that we are expecting. Without additional
-instrumentation, those are incorrectly attributed to V8's execution time.
-
-[<img alt="Figure 2"
-src="/developers/creating-v8-profiling-timeline-plots/1-plot-internal.png">](/developers/creating-v8-profiling-timeline-plots/1-plot-internal.png)
-
-Figure 3: Using `--time-timer-events` instead and plotting with `DISTORTION=0`,
-we can see that we are indeed spending a lot of time in callbacks. However, the
-benchmark score is only a fraction of what it should have been. Comparing this
-plot with previous ones, we can see that it is severely distorted by
-instrumentation. Heterogeneous sampling ticks, observable by unevenly
-distributed white gaps, are yet another indication.
-
-[<img alt="Figure 3"
-src="/developers/creating-v8-profiling-timeline-plots/2-distorted.png">](/developers/creating-v8-profiling-timeline-plots/2-distorted.png)
-
-Figure 4: Having the distortion parameter automatically calibrated (plot range
-is manually set for easier comparison), we can see that due to the
-instrumentation overhead, the benchmark run with instrumentation only executed a
-fraction of what would have been without instrumentation. The background to this
-is that Octane benchmarks are repeated until a minimum length of run time has
-been reached. The un-instrumented run manages to complete more iterations of the
-benchmark than the instrumented run, in the same length of run time.
-
-Now that the plot has been undistorted, it almost completely agrees with
-previous plots in figures 1 and 2.
-
-[<img alt="Figure 4"
-src="/developers/creating-v8-profiling-timeline-plots/3-undistorted.png">](/developers/creating-v8-profiling-timeline-plots/3-undistorted.png)
-
-Figure 5: Zooming into the interesting part of the undistorted plot.
-
-[<img alt="Figure 5"
-src="/developers/creating-v8-profiling-timeline-plots/4-autoscale.png">](/developers/creating-v8-profiling-timeline-plots/4-autoscale.png)
-
-## Other resources
-
-* <http://code.google.com/p/v8/wiki/V8Profiler>
-* <https://developers.google.com/v8/profiler_example> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/debugging-with-crash-keys/index.md b/chromium/docs/website/site/developers/debugging-with-crash-keys/index.md
deleted file mode 100644
index f45a89c1481..00000000000
--- a/chromium/docs/website/site/developers/debugging-with-crash-keys/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: debugging-with-crash-keys
-title: Debugging with Crash Keys
----
-
-# *[This page has moved to Markdown.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/debugging_with_crash_keys.md)* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/decoding-crash-dumps/index.md b/chromium/docs/website/site/developers/decoding-crash-dumps/index.md
deleted file mode 100644
index e2326953324..00000000000
--- a/chromium/docs/website/site/developers/decoding-crash-dumps/index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: decoding-crash-dumps
-title: Decoding Crash Dumps
----
-
-This document describes how to process Breakpad minidumps on Linux.
-
-### Breakpad tools needed
-
-The tools from Breakpad needed to process crash dumps manually are
-minidump_stackwalk and dump_syms. It is possible to build these tools from
-source from within a Chromium checkout on Mac and Linux by running, for example,
-ninja -C out/Release minidump_stackwalk dump_syms. To build these tools from
-source in a Breakpad checkout, check out the source from
-<http://code.google.com/p/google-breakpad/> and follow the included
-instructions.
-
-### Get the crash dump
-
-Crash dumps (.dmp files) usually come from a crash server i.e. <http://crash/>
-or from the crash reports directory: /path/to/profile/Crash Reports. I.e.
-~/.config/google-chrome/Crash Reports/ on Linux.
-
-For Linux crash dumps that are in the crash reports directory, one must strip
-off the headers before processing it with minidump_stackwalk. Just open the file
-in a text editor and delete all the lines up until the line that starts with
-MDMP followed by binary data.
-
-### Getting the stacktrace (without symbols)
-
-Run minidump_stackwalk foo.dmp. For 32-bit, minidump_stackwalk will display the
-stacktrace without symbols. For 64-bit, it will only display the top frame.
-
-### Get the debugging symbols
-
-To get symbols or more frames, one needs to have the symbols for the libraries
-and executables that are part of the stacktrace.
-
-The easiest way is to run a tool that will generate the right directory
-structure:
-
-components/crash/content/tools/generate_breakpad_symbols.py
---build-dir=out/gnand --symbols-dir=/tmp/my_symbols/
---binary=out/gnand/lib.unstripped/libchrome.so --clear --verbose
-
-To do the same thing manually, start by running:
-
-minidump_stackwalk foo.dmp /tmp/my_symbols 2&gt;&1 | grep my_symbols
-
-This will print out lines like:
-
-\[time stamp\] simple_symbol_supplier.cc:150: INFO: No symbol file at
-/tmp/my_symbols/libfoo/hash/libfoo.sym.
-
-In order to get the symbol file for libfoo, one needs to have a copy of the
-exact libfoo binary from the system that generated the crash and its
-corresponding debugging symbols. Oftentimes, Linux distros provide libfoo and
-its debugging symbols as two separate packages. In the chrome build, you'll need
-an unstripped binary -- official builds generate these by default somewhere.
-After obtaining and extracting the packages, use dump_syms to extract the
-symbols. Assuming the library in question is /lib/libfoo.so and its debugging
-symbol is /usr/debug/lib/libfoo.so, run:
-
-dump_syms /lib/libfoo.so /usr/debug/lib &gt; /tmp/libfoo.so.sym
-
-To verify it's the correct version of libfoo, look at the hash from the
-minidump_stackwalk output and compare it to the hash on the first line. If they
-match, move /tmp/libfoo.sym to /tmp/my_symbols/libfoo.so/hash/libfoo.so.sym and
-minidump_stackwalk will load it on future runs to give better stacktraces.
-
-Repeat this process for other libraries until minidump_stackwalk outputs the
-required information.
-
-### Decoding Windows crash dumps on Linux
-
-Windows crash dumps can be decoded the same way as Linux crash dumps. The issue
-is mainly getting the debugging symbols as a .sym file instead of a .pdb file.
-
-To convert a .pdb file to a .sym file:
-
-1. Obtain the .pdb file and put it on a Windows machine. (It may be
- possible to do this with Wine, YMMV.)
-2. Download
- [dump_syms.exe](http://google-breakpad.googlecode.com/svn/trunk/src/tools/windows/binaries/dump_syms.exe).
-3. Run: dump_syms foo.pdb &gt; foo.sym
- * If no error messages, then go to the last step
- * If you get: CoCreateInstance CLSID_DiaSource failed (msdia80.dll
- unregistered?), go to step 4.
-4. Get a copy of msdia80.dll and put it in c:\\Program Files\\Common
- Files\\Microsoft Shared\\VC\\.
-5. As Administrator, run: regsvr32 c:\\Program Files\\Common
- Files\\Microsoft Shared\\VC\\msdia80.dll.
- * On success, retry step 3.
- * If you get error 0x80004005, you did not run as Administrator.
-6. Create a symbol-server directory layout
- 1. Find the GUID/age descriptor (printed on the "No symbols" line
- if symbols can't be found)
- 2. Create a directory of the form symbols/foo.pdb/GUIDandAge,
- similar to symbol-server layout, and put foo.sym in that
- directory. Note that the directory name is foo.pdb but the file
- name is foo.sym. For instance:
- * 0x7ff77ead0000 - 0x7ff77eb6efff main.exe ??? (main)
- (WARNING: No symbols, main.pdb,
- B7B61AB08C8345248B45D99552B0100C1)
- * mkdir -p symbols/main.pdb/B7B61AB08C8345248B45D99552B0100C1
- * cp main.sym
- symbols/main.pdb/B7B61AB08C8345248B45D99552B0100C1
- 3. Run minidump_stackwalk on Linux specifying the crash dump and
- the symbols directory:
- * minidump_stackwalk foo.dmp symbols
-
-### Decoding Mac crash dumps
-
-See [Working with
-Minidumps](/developers/crash-reports#TOC-Working-with-Minidumps).
-
-If you've built Chromium.app with symbols, the easiest way to symbolize a crash
-is to let Crashpad forward the crash to the system crash reporter. See
-[set_system_crash_reporter_forwarding](https://cs.chromium.org/chromium/src/third_party/crashpad/crashpad/client/crashpad_info.h?l=135). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/deep-memory-profiler/cpp-object-type-identifier/index.md b/chromium/docs/website/site/developers/deep-memory-profiler/cpp-object-type-identifier/index.md
deleted file mode 100644
index 64a2ff5d639..00000000000
--- a/chromium/docs/website/site/developers/deep-memory-profiler/cpp-object-type-identifier/index.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/deep-memory-profiler
- - Deep Memory Profiler
-page_name: cpp-object-type-identifier
-title: C++ Object Type Identifier (a.k.a. Type Profiler)
----
-
-## Type Profiler no longer exists, see [crbug.com/490464](https://code.google.com/p/chromium/issues/detail?id=490464).
-
-## Introduction
-
-The C++ Object Type Identifier (a.k.a. Type Profiler) is another profiling
-feature to find “Which type is the object?". For example, it reports:
-
-> "An object at 0x37f3c88 is an instance of std::string."
-
-RTTI is not enough to find a type of an object only from its address \[1\]. You
-can try it with the following steps. See the [Design
-Doc](https://docs.google.com/document/d/1DvgxYxrMH_v196YhPebAMaD7qMR3utTN4-ytVdZLPWE/edit)
-if interested.
-
----
-
-## How to Build with Type Profiler
-
-1. Edit .gclient to checkout the modified version of Clang.
-
- > `solutions = [`
-
- > ` { "name" : "src",`
-
- > ` "url" : "http://git.chromium.org/chromium/src.git",`
-
- > ` ...`
-
- > ` "custom_deps" : {`
-
- > ` ...`
-
- > ` "src/third_party/llvm-allocated-type":
- > "http://src.chromium.org/chrome/trunk/deps/third_party/llvm-allocated-type",`
-
- > ` ...`
-
- > ` },`
-
- > ` ...`
-
- > ` },`
-
- > `]`
-
-2. Build Chromium with additional build options.
- ("clang_type_profiler=1" is the required option.)
-
- > `export GYP_DEFINES='clang_type_profiler=1'`
-
- > `export GYP_GENERATORS='ninja'`
-
- > `export GYP_GENERATOR_FLAGS='output_dir=out_type_profile'`
-
- > `gclient runhooks`
-
- > `ninja -C out_type_profile/Debug -j 16 chrome`
-
----
-
-## How to Use
-
-## In a part of [Deep Memory Profiler](/developers/deep-memory-profiler)
-
-1. Run the customized Chromium with [Deep Memory
- Profiler](/developers/deep-memory-profiler) as usual.
-2. Run the dmprof script with a policy label "t0".
-
- > `tools/deep_memory_profiler/dmprof csv -p **t0**
- > ~/profile/00-test.12345.0002.heap > ~/profile/00-test.12345.result.csv`
-
-## Standalone
-
-1. Run the customized Chromium with TCMalloc's heap-profiler and an
- environment variable "HEAP_PROFILE_TYPE_STATISTICS=1".
-
- > `HEAPPROFILE=/tmp/prefix HEAP_PROFILE_TIME_INTERVAL=20
- > HEAP_PROFILE_TYPE_STATISTICS=1 out_type_profile/Debug/chrome --no-sandbox`
-
-2. Type statistics "prefix.&lt;pid&gt;.????.type" is dumped with every
- heap profile dump. It is a classification of all malloc'ed objects
- by their types. For example, " 13: 520 @ N3WTF5MutexE" means that 13
- objects of WTF::Mutex occupy 520 bytes.
-
- > type statistics:
-
- > 3739: 841574 @ (no_typeinfo)
-
- > 1: 16 @ N3WTF13WTFThreadDataE
-
- > 1: 16 @ N3WTF14ThreadSpecificINS_13WTFThreadDataEE4DataE
-
- > ...
-
- > 13: 520 @ N3WTF5MutexE
-
- > ...
-
-## Looking up from your code
-
-Type Profiler just records mapping from object addresses to their types. You can
-utilize the mapping by yourself. To use it from your code,
-
-1. Include
- third_party/tcmalloc/chromium/src/gperftools/type_profiler_map.h,
- and
-2. Call LookupType() for object addresses.
- * LookupType() returns const std::type_info& for the object.
-
----
-
-## References
-
-* \[1\] Jozsef Mihalicza et al.: "[Type-preserving heap profiler for
- C++](http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=6080813)",
- Proceedings of the 2011 27th IEEE International Conference on
- Software Maintenance (ICSM '11). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/deep-memory-profiler/index.md b/chromium/docs/website/site/developers/deep-memory-profiler/index.md
deleted file mode 100644
index c2614e2b7e4..00000000000
--- a/chromium/docs/website/site/developers/deep-memory-profiler/index.md
+++ /dev/null
@@ -1,582 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: deep-memory-profiler
-title: Deep Memory Profiler
----
-
-## Update 13-Oct-2015:
-
-The Deep Memory Profiler tools (dmprof) were not maintained, became
-non-functional, and were **removed** from the codebase . See [issue
-490464](https://code.google.com/p/chromium/issues/detail?id=490464).
-
-## Introduction
-
-Deep Memory Profiler (dmprof) is a 1) whole-process, 2) timeline-based and 3)
-post-mortem memory profiler for Chromium. It's designed to categorize **all
-memory usage in a process without any omission**. See the [Design
-Doc](https://docs.google.com/document/d/1_Cw9FfzdRT2kjozkNK9cZOXedE8-1fGDqnUvdW_tpGs/edit)
-if interested.
-
-Memory bloat has been a serious issue in Chromium for years. Bloat is harder to
-fix than leak and errors. We have memory checkers like
-[Valgrind](/developers/how-tos/using-valgrind) and [Address
-Sanitizer](/developers/testing/addresssanitizer) for leak and errors, but no
-handy tools for bloat. Dmprof is an easy-to-use tool for bloat to know “who is
-the memory eater”. (It would be helpful also for leak.)
-
-### Announcement
-
-Future announcements (e.g. command line changes) will be done in
-[dmprof@chromium.org](https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/dmprof).
-Subscribe it if you're interested.
-
-document.getElementById('form39898447').submit();
-
-### Sub-profilers
-
-* [C++ Object Type
- Identifier](/developers/deep-memory-profiler/cpp-object-type-identifier)
- (a.k.a. Type Profiler)
-
-## How to Use
-
-Dmprof profiles memory usage post-mortem. You need to 1) get memory dumps while
-Chrome is running, and then 2) analyze the dumps. The analyzing script dmprof is
-available in
-[src/tools/deep_memory_profiler](http://src.chromium.org/viewvc/chrome/trunk/src/tools/deep_memory_profiler/)
-of the Chromium source tree, or can be retrieved by downloading and running
-[download.sh](http://src.chromium.org/viewvc/chrome/trunk/src/tools/deep_memory_profiler/download.sh).
-
-### Phase 1: Build Chromium
-
-You can use dmprof for Chromium **static builds** with some build options both
-for **Release and Debug builds**. Note that it is not available for **shared
-builds**.
-
-#### Linux and ChromeOS-Chrome
-
-* Release builds - use **GYP_DEFINES='$GYP_DEFINES profiling=1
- profiling_full_stack_frames=1 linux_dump_symbols=1'**
-* Debug builds - use **GYP_DEFINES='$GYP_DEFINES profiling=1
- disable_debugallocation=1'**
-
-#### Android
-
-Be careful not to overwrite GYP_DEFINES predefined by env_setup.sh.
-
-* Release builds - use **GYP_DEFINES='$GYP_DEFINES profiling=1
- profiling_full_stack_frames=1 linux_dump_symbols=1
- use_allocator="tcmalloc"'**
-* Debug builds - use **GYP_DEFINES='$GYP_DEFINES profiling=1
- disable_debugallocation=1 android_full_debug=1
- use_allocator="tcmalloc"'**
-
-#### ChromeOS / ChromiumOS
-
-* Release builds - use **USE='... deep_memory_profiler'**
-* Debug builds - not maintained
-
-### Phase 2: Run Chromium
-
-### Remember the Process ID of your target process! (c.f. about:memory)
-
-#### Linux and ChromeOS-Chrome
-
-Run Chromium with a command-line option --no-sandbox and the following
-environment variables:
-
-1. HEAPPROFILE=/path/to/prefix (Files like /path/to/prefix.0001.heap
- are dumped from Chrome.)
-2. HEAP_PROFILE_MMAP=1
-3. DEEP_HEAP_PROFILE=1
-4. (If you get dumps from a standalone Chromium process periodically,
- specify HEAP_PROFILE_TIME_INTERVAL=&lt;interval seconds between
- dumping&gt;)
-
-> `$ HEAPPROFILE=$HOME/prof/prefix HEAP_PROFILE_TIME_INTERVAL=20
-> HEAP_PROFILE_MMAP=1 DEEP_HEAP_PROFILE=1 out/Release/chrome --no-sandbox`
-
-#### Android
-
-```none
-# NOTE: the device needs to be rooted!
-adb root
-# Create a world-writable dump directory
-adb shell mkdir -p /data/local/tmp/heap
-adb shell chmod 0777 /data/local/tmp/heap
-# Set the following system properties
-adb shell setprop heapprof /data/local/tmp/heap/dumptest
-adb shell setprop heapprof.mmap 1
-adb shell setprop heapprof.deep_heap_profile 1
-adb shell setprop heapprof.time_interval 10
-```
-
-#### ChromeOS / ChromiumOS
-
-Prepare a file /var/tmp/deep_memory_profiler_prefix.txt in your device or VM
-image. Its content should just have a prefix to dumped files /path/to/prefix
-like:
-
-```none
-/var/tmp/heapprof
-```
-
-If you get dumps from a standalone Chromium process periodically, prepare a file
-/var/tmp/deep_memory_profiler_time_interval.txt which contains just an integer
-meaning the interval time to dump:
-
-```none
-60
-```
-
-### Phase 3: Make Chromium dump
-
-#### Standalone (automatic periodical dump)
-
-If you specified "time interval" described above, the Chromium process dumps
-heap profiles periodically. It depends on the platform how to specify "time
-interval".
-
-#### WebDriver (ChromeDriver)
-
-A WebDriver (ChromeDriver) API function is available to dump. Try
-dump_heap_profile():
-
-> `dump_heap_profile(reason='Why you want a dump.')`
-
-Note that you may want to copy the dumps from your remote machine if you run
-ChromeDriver remotely.
-
-#### Memory Benchmarking V8 API
-
-You can dump heap profiles manually from DevTools (or automatically with your
-script) when you set the environment variables above and specify the command
-line option --enable-memory-benchmarking to Chrome.
-
-```none
-chrome.memoryBenchmarking.heapProfilerDump("browser" or "renderer", "some reason")
-```
-
-#### Telemetry
-
-You can use a Telemetry profiler to drive chrome and, if running on android, to
-also fetch the files from the device. It utilizes the above Memory Benchmarking
-V8 API internally. See [Telemetry
-instructions](http://www.chromium.org/developers/telemetry/profiling#TOC-Memory-Profiling---Linux-Android).
-
-### Phase 4: Get the dumps
-
-Find the dumps at /path/to/prefix.\*.heap as specified above. Names of the dumps
-include Process IDs. For example, prefix.12345.0002.heap for pid = 12345. '0002'
-is a sequence number of the dump.
-
-The dmprof analyzer script (in the Phase 5) needs the executed Chrome binary to
-extract symbols. If you analyze in the same host with the Chrome process, you
-don't need special things. If you analyze in a different host from the Chrome
-process (it's common in Android and ChromeOS), you may need to specify the path
-to the executed Chrome binary on the host. (See Phase 5 for details.)
-
-#### Linux and ChromeOS-Chrome
-
-Heap profiles are dumped to the directory where you specified in the environment
-variable HEAPPROFILE.
-
-#### Android
-
-Heap profiles are dumped in the device directory where you specified in the
-property heapprof. Fetch the dump from the device to your host by the following
-command.
-
-```none
-adb pull /data/local/tmp/heap/ .
-```
-
-The dmprof script guesses the path of the Chrome binary on the host if the
-executed binary was in an Android-specific directory (e.g. /data/app-lib/). If
-the guess fails, use --alternative-dirs for the dmprof script (in the Phase 5).
-
-#### ChromeOS / ChromiumOS
-
-Heap profiles are dumped in the device directory where you specified in
-/var/tmp/deep_memory_profiler_prefix.txt. Fetch them in a certain way like scp
-from the device / VM.
-
-The dmprof script doesn't know where is the Chrome binary on the host. Use
---alternative-dirs for the dmprof script (in the Phase 5).
-
-### Phase 5: Analyze the dumps
-
-Use the dmprof script to analyze with the dumped heap profiles.
-
-1. Run the analyzing script dmprof, and redirect its stdout to a CSV
- file. You can choose a policy with -p option. Details of policies
- are described below.
- dmprof csv /path/to/first-one-of-the-dumps.heap &gt; result.csv
-2. Copy the CSV into a spreadsheet application, for example, OpenOffice
- Calc and Google Spreadsheet.
-3. Draw a (stacked) line chart on the spreadseet for columns from
- FROM_HERE_FOR_TOTAL to UNTIL_HERE_FOR_TOTAL. (See [the
- example](https://docs.google.com/spreadsheet/ccc?key=0Ajevw6ceMEA7dHZzNHFGRlRKcHItT21XNVlhR3Y3RWc).)
-
-```none
-$ dmprof csv dmprof.03511.0001.heap > dmprof.03511.result.csv
-```
-
-Or, use this to generate a local html with a graph and a data table:
-
-```none
-# Generate a JSON output for your dumps.
-$ tools/deep_memory_profiler/dmprof json /path/to/first-one-of-the-dumps.heap > FOO.json
-# Convert the JSON file to a HTML file.
-$ tools/deep_memory_profiler/graph.py FOO.json > graph.html
-```
-
-In case of Android or ChromeOS, you may need to use --alternative-dirs for the
-dmprof script to specify the path of the Chrome binary on the host instead of
-the path on the device.
-
-#### Android
-
-```none
-$ dmprof csv --alternative-dirs=/data/app-lib/com.google.android.apps.chrome-1@/home/self/chrome/src/out/Release/lib dmprof.03511.0001.heap
-Assuming /data/app-lib/com.google.android.apps.chrome-1 on device as /home/self/chrome/src/out/Release/lib on host
-...
-```
-
-#### ChromeOS / ChromiumOS
-
-```none
-$ dmprof csv --alternative-dirs=/opt/google/chrome@/home/self/chromeos/chroot/build/x86-generic/opt/google/chrome dmprof.03511.0001.heap
-Assuming /opt/google/chrome on device as /home/self/chromeos/chroot/build/x86-generic/opt/google/chrome on host
-...
-```
-
-### Phase 6: Drill down into components / backtraces
-
-Given a specific component listed in the graph above, sue the following command
-to
-
-## ```none
-# HEAP_FILE => TCMalloc .heap file
-# COMPONENT => One of the components displayed in the graph.
-# POLICY => the json file used to generate the graph.
-tools/deep_memory_profiler/dmprof expand HEAP_FILE POLICY COMPONENT 32
-```
-
-## Caveats
-
-### Linux / ChromeOS / Android
-
-* The total size can be different from RSS reported by ps and
- /proc/.../stat iin some cases.
- * RSS by ps and stat doesn't include a part of memory usage. For
- example, the page tables, kernel stack, struct thread_info, and
- struct task_struct (from man ps). The same difference is in
- smaps and pmap.
- * Deep Memory Profiler can double-count page frames (physical
- pages) which are mapped from different virtual pages in the same
- process. It hardly happens in Chrome.
-
-## How to read the graph
-
-Graphs are typical stacked ones which classifies all memory usage into some
-components. We have four kinds of graphs from each execution dump based on four
-built-in "policies": l0, l1, l2, t0.
-
-We're preparing more breakdown policies. If you'd like to add a criteria for
-your component, 1) modify policy.\*.json files, 2) modify polices.json and add a
-policy file or 3) report it to dmprof@chromium.org.
-
-**Common components**
-
-<table>
-<tr>
-<td> mustbezero & unhooked-absent</td>
-<td> Should be zero.</td>
-</tr>
-<tr>
-<td> unhooked-anonymous</td>
-<td> VMA is mapped, but no information is recorded. No label is given in /proc/.../maps.</td>
-</tr>
-<tr>
-<td> unhooked-file-exec</td>
-<td> VMA is mapped, but no information is recorded. An executable file is mapped.</td>
-</tr>
-<tr>
-<td> unhooked-file-nonexec</td>
-<td> VMA is mapped, but no information is recorded. A non-executable file is mapped.</td>
-</tr>
-<tr>
-<td> unhooked-file-stack</td>
-<td> VMA is mapped, but no information is recorded. Used as a stack.</td>
-</tr>
-<tr>
-<td> unhooked-other</td>
-<td> VMA is mapped, but no information is recorded. Used for other purposes.</td>
-</tr>
-<tr>
-<td> no-bucket</td>
-<td> Should be small. Out of record because it is an ignorable small blocks.</td>
-</tr>
-<tr>
-<td> tc-unused</td>
-<td> Reserved by TCMalloc, but not used by malloc(). Headers, fragmentation and free-list.</td>
-</tr>
-</table>
-
-**Policy "l0"**
-
-This policy applies the most rough classification.
-
-<table>
-<tr>
-<td> mmap-v8</td>
-<td> mmap'ed for V8. It includes JavaScript heaps and JIT compiled code.</td>
-</tr>
-<tr>
-<td> mmap-catch-all</td>
-<td> mmap'ed for other purposes.</td>
-</tr>
-<tr>
-<td> tc-used-all</td>
-<td> All memory blocks allocated by malloc().</td>
-</tr>
-</table>
-
-**Policy "l1"**
-
-It breaks down memory usage into relatively specific components.
-
-<table>
-<tr>
-<td> mmap-v8-heap-newspace</td>
-<td> JavaScript new (nursery) heap for younger objects.</td>
-</tr>
-<tr>
-<td> mmap-v8-heap-coderange</td>
-<td> Code produced at runtime including JIT-compiled JavaScript code.</td>
-</tr>
-<tr>
-<td> mmap-v8-heap-pagedspace</td>
-<td> JavaScript old heap and many other object spaces.</td>
-</tr>
-<tr>
-<td> mmap-v8-other</td>
-<td> Other regions mmap'ed by V8.</td>
-</tr>
-<tr>
-<td> mmap-catch-all</td>
-<td> Any other mmap'ed regions.</td>
-</tr>
-<tr>
-<td> tc-v8</td>
-<td> Blocks allocated from V8.</td>
-</tr>
-<tr>
-<td> tc-skia</td>
-<td> Blocks allocated from Skia.</td>
-</tr>
-<tr>
-<td> tc-webkit-catch-all</td>
-<td> Blocks allocated from WebKit.</td>
-</tr>
-<tr>
-<td> tc-unknown-string</td>
-<td> Blocks which are related to std::string.</td>
-</tr>
-<tr>
-<td> tc-catch-all</td>
-<td> Any other blocks allocated by malloc().</td>
-</tr>
-</table>
-
-**Policy "l2"**
-
-It tries to breakdown memory usage into specific components. See
-[policy.l2.json](http://src.chromium.org/viewvc/chrome/trunk/src/tools/deep_memory_profiler/policy.l2.json?view=markup)
-for details, and report to dmprof@chromium.org to add more components.
-
-<table>
-<tr>
-<td> mmap-v8-heap-newspace</td>
-<td> JavaScript new (nursery) heap for younger objects.</td>
-</tr>
-<tr>
-<td> mmap-v8-heap-coderange</td>
-<td> Code produced at runtime including JIT-compiled JavaScript code.</td>
-</tr>
-<tr>
-<td> mmap-v8-heap-pagedspace</td>
-<td> JavaScript old heap and many other spaces.</td>
-</tr>
-<tr>
-<td> mmap-v8-other</td>
-<td> Other regions mmap'ed by V8.</td>
-</tr>
-<tr>
-<td> mmap-catch-all</td>
-<td> Any other mmap'ed regions.</td>
-</tr>
-<tr>
-<td> tc-webcore-fontcache</td>
-<td> Blocks used for FontCache.</td>
-</tr>
-<tr>
-<td> tc-skia</td>
-<td> Blocks used for Skia.</td>
-</tr>
-<tr>
-<td> tc-renderobject</td>
-<td> Blocks used for RenderObject.</td>
-</tr>
-<tr>
-<td> tc-renderstyle</td>
-<td> Blocks used for RenderStyle.</td>
-</tr>
-<tr>
-<td> tc-webcore-sharedbuf</td>
-<td> Blocks used for WebCore's SharedBuffer.</td>
-</tr>
-<tr>
-<td> tc-webcore-XHRcreate</td>
-<td> Blocks used for WebCore's XMLHttpRequest (create).</td>
-</tr>
-<tr>
-<td> tc-webcore-XHRreceived</td>
-<td> Blocks used for WebCore's XMLHttpRequest (received). </td>
-</tr>
-<tr>
-<td> tc-webcore-docwriter-add</td>
-<td> Blocks used for WebCore's DocumentWriter.</td>
-</tr>
-<tr>
-<td> tc-webcore-node-and-doc</td>
-<td> Blocks used for WebCore's HTMLElement, Text, and other Node objects.</td>
-</tr>
-<tr>
-<td> tc-webcore-node-factory</td>
-<td> Blocks created by WebCore's HTML\*Factory.</td>
-</tr>
-<tr>
-<td> tc-webcore-element-wrapper</td>
-<td> Blocks created by WebCore's createHTML\*ElementWrapper.</td>
-</tr>
-<tr>
-<td> tc-webcore-stylepropertyset</td>
-<td> Blocks used for WebCore's StylePropertySet (CSS).</td>
-</tr>
-<tr>
-<td> tc-webcore-style-createsheet</td>
-<td> Blocks created by WebCore's StyleElement::createSheet.</td>
-</tr>
-<tr>
-<td> tc-webcore-cachedresource</td>
-<td> Blocks used for WebCore's CachedResource.</td>
-</tr>
-<tr>
-<td> tc-webcore-script-execute</td>
-<td> Blocks created by WebCore's ScriptElement::execute.</td>
-</tr>
-<tr>
-<td> tc-webcore-events-related</td>
-<td> Blocks related to WebCore's events (EventListener and so on)</td>
-</tr>
-<tr>
-<td> tc-webcore-document-write</td>
-<td> Blocks created by WebCore's Document::write.</td>
-</tr>
-<tr>
-<td> tc-webcore-node-create-renderer</td>
-<td> Blocks created by WebCore's Node::createRendererIfNeeded.</td>
-</tr>
-<tr>
-<td> tc-webcore-render-catch-all</td>
-<td> Any other blocks related to WebCore's Render.</td>
-</tr>
-<tr>
-<td> tc-webcore-setInnerHTML-except-node</td>
-<td> Blocks created by setInnerHTML.</td>
-</tr>
-<tr>
-<td> tc-wtf-StringImpl-user-catch-all</td>
-<td> Blocks used for WTF::StringImpl.</td>
-</tr>
-<tr>
-<td> tc-wtf-HashTable-user-catch-all</td>
-<td> Blocks used for WTF::HashTable.</td>
-</tr>
-<tr>
-<td> tc-webcore-everything-create</td>
-<td> Blocks created by WebCore's any create() method.</td>
-</tr>
-<tr>
-<td> tc-webkit-from-v8-catch-all</td>
-<td> Blocks created by V8 via WebKit functions.</td>
-</tr>
-<tr>
-<td> tc-webkit-catch-all</td>
-<td> Any other blocks created by WebKit.</td>
-</tr>
-<tr>
-<td> tc-v8-catch-all</td>
-<td> Any other blocks created in V8.</td>
-</tr>
-<tr>
-<td> tc-toplevel-string</td>
-<td> All std::string objects created at the top-level.</td>
-</tr>
-<tr>
-<td> tc-catch-all</td>
-<td> Any other blocks by malloc().</td>
-</tr>
-</table>
-
-**Policy "t0"**
-
-It classifies memory blocks based on their type_info.
-
-<table>
-<tr>
-<td> mmap-v8</td>
-<td> mmap'ed for V8. It includes JavaScript heaps and JIT compiled code.</td>
-</tr>
-<tr>
-<td> mmap-catch-all</td>
-<td> mmap'ed for other purposes.</td>
-</tr>
-<tr>
-<td> tc-std-string</td>
-<td> std::string objects.</td>
-</tr>
-<tr>
-<td> tc-WTF-String</td>
-<td> WTF::String objects.</td>
-</tr>
-<tr>
-<td> tc-no-typeinfo-StringImpl</td>
-<td> No type_info (not allocated by 'new'), but allocated for StringImpl.</td>
-</tr>
-<tr>
-<td> tc-Skia</td>
-<td> Skia objects.</td>
-</tr>
-<tr>
-<td> tc-WebCore-Style</td>
-<td> WebCore's style objects.</td>
-</tr>
-<tr>
-<td> tc-no-typeinfo-other</td>
-<td> Any other blocks without type_info.</td>
-</tr>
-<tr>
-<td> tc-other</td>
-<td> All objects with other type_info.</td>
-</tr>
-</table>
-
-## Cases
-
-* <http://crrev.com/166963>
diff --git a/chromium/docs/website/site/developers/design-documents/64-bit-support/index.md b/chromium/docs/website/site/developers/design-documents/64-bit-support/index.md
deleted file mode 100644
index 30518af9fd9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/64-bit-support/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: 64-bit-support
-title: Building 64-bit Chromium
----
-
-### Linux
-
-* 64-bit builds will be the default when compiling on 64-bit Linux.
-
-### Mac OS X
-
-* Run the following command prior to building: build/gyp_chromium
- -Dtarget_arch=x64 -Dhost_arch=x64
-
-### Windows
-
-* The default GN build will match that of the host OS (so 64-bit
- Windows will give 64-bit builds). The default GYP build is 32-bits
- on all Windows variants.
-* To force 64-bit building in GYP, run the following command prior to
- building: python build\\gyp_chromium -Dtarget_arch=x64 *and* use
- either the Release_x64 or Debug_x64 build directory with Ninja
- (e.g. "ninja -C out\\Debug_x64") \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/about-conflicts/incompatibility_thumb.png.sha1 b/chromium/docs/website/site/developers/design-documents/about-conflicts/incompatibility_thumb.png.sha1
deleted file mode 100644
index 1bea8171b38..00000000000
--- a/chromium/docs/website/site/developers/design-documents/about-conflicts/incompatibility_thumb.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8cf54dae1ae10abd51d9a40a8433c2fe9582cd13 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/about-conflicts/index.md b/chromium/docs/website/site/developers/design-documents/about-conflicts/index.md
deleted file mode 100644
index c3bd8f4eeef..00000000000
--- a/chromium/docs/website/site/developers/design-documents/about-conflicts/index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: about-conflicts
-title: Design document for about:conflicts
----
-
- ### Objective
-
- This feature is intended to provide the user with a good overview of what 3rd party modules (ie. DLLs on Windows) get loaded into their Google Chrome installation and to call out suspected and known bad modules. Hopefully this will lead to increased awareness of the adverse effect that 3rd party modules can have on the stability of Google Chrome and make troubleshooting easier. In turn, this should have a positive effect on Google Chrome stability.
-
- Background
- Windows provides developers with an array of options for hooking into both the operating system as well as other applications on the system. Windows provides APIs to, for example, extend the functions of the shell, context menus and to hook into the network stack, not to mention methods to simply inject DLLs into random processes and start executing. There is even a registry key that lists DLLs to get automatically injected into all processes.
- These techniques are often used for legitimate purposes, such as security software (VPN, firewalls, anti-virus, anti-spyware), accessibility (IME) or for general utilities (download managers). Of course this can also be used by malware (viruses, spyware, trojans, etc). To facilitate discussion, we'll refer to the functions these modules provide as 'extensions' (not to be confused with Chrome Extensions).
- Unfortunately, most software vendors don't have the resources to test their extension for compatibility problems with all the applications in use in the wild (and most malware writers wouldn't even if they had the resources). Therefore, the code injected in this way often causes major stability problems for the target applications. Chromium developer Eric Roman analyzed all crash reports for a particular version of Google Chrome and found that over 1 in 4 crashes reported had 3rd party code on the call stack at the time of the crash. It's hard to tell whether the 3rd-party code is directly to blame, but conversely if the extension module causes memory corruption, the crash will often happen when the extension module is no longer on the stack, leaving a weird crash in some code that can be entirely unrelated to the task at hand.
- As far as the user is concerned, there is hardly any correlation between the application crash and the extensions installed, so users have little means to differentiate between a buggy application and a buggy extension. Naturally, the tendency is to blame the application developers and if they can't pinpoint the extension that caused the problem the crashes will simply go unnoticed by the extension developers.
-
- ### Goals
-
- The goals of this feature are to:
-
- * Identify all modules running inside Google Chrome.
- * Call out suspected and known bad 3rd party modules (using a list
- provided by Support).
- * Introduce a flag that allows the user to opt-in to a background
- thread check for known bad modules and show an indicator on the
- wrench menu when incompatibilities are detected.
-
- Possible goals for future versions:
- * Port the feature to non-Windows platforms.
- * Historical note: The name of this feature got changed from
- about:dlls to about:conflicts (to be platform neutral).
- * Provide backend support for a safe-browsing type of database
- that can be auto-updated in the background.
- * To keep things simple for v1 and to test the concept the
- module blocklist will be baked into Chrome.
- * Provide functionality for the user to block certain modules.
- * This is non-essential for v1 but might be implemented later.
- * Integrate with --diagnostics to list bad modules. *\[Done:
- Implemented for v10\]*
-
- ### Non-goals
-
- * Identify modules that actively try to hide their existence or
- for some reason or other won't show up in the module list for
- the running process.
- * Ensure access to about:conflicts even in the event of a module
- that crashes Chrome at every startup (except maybe in
- conjunction with --diagnostics).
-
-Use Cases
-
- The main use case of this feature is simply the user typing in about:conflicts into the Omnibox. This will show a simple web page, similar to about:version, except that the page will enumerate all modules loaded into the browser process and cross-reference each module with a list of known or suspected bad actors. It should also enumerate modules that have not loaded yet, but are likely to (ie. shell extension registrations and Winsock LSPs).
- The other use case would be for the user to opt-in to have the modules periodically enumerated and, on finding known bad actors, show a red dot (see below) over the wrench menu that promotes the about:conflicts page.
-
- Detailed Design
- The about:conflicts page
- about:conflicts is simply an HTML resource, much like about:version, loaded from the resource bundle and populated with the needed data at runtime. See The detection mechanism below.
- For a proposed screenshot of the page see comment 5 of issue 51105:
- <http://code.google.com/p/chromium/issues/detail?id=51105#c5>
- *\[Update: The look of the about:conflicts page no longer resembles the image in the bug\]*
-
- The red dot
-
- *\[Update: The wrench image has since changed and the badging as well -- now
- it is a 'hotdog' menu that changes colors (instead of being badged). This
- doc will still refer to the original design, though: the red dot on the
- wrench menu.\]*
-
- The red dot is the equivalent to the badge we show when there is an update for Chrome available, except that instead it notifies you of confirmed incompatibilities (not suspected ones). It might look something like this:
-
-[<img alt="image"
-src="/developers/design-documents/about-conflicts/incompatibility_thumb.png">](/developers/design-documents/about-conflicts/incompatibility_thumb.png)
-
- Similarly, the wrench menu that pops up will have a menu item 'View incompatibilities', which, when clicked, will take the user to the about:conflicts page.
- If both an incompatibility and a new version are detected, the update dot will show on the Wrench icon (not the red dot) but both menu items will appear in the Wrench menu (both the 'update available' menu item and the 'incompatibility detected' menu item).
-
- The list of bad actors
- A given module has many properties that can be used to try to uniquely identify it. The intent is not to get into the pattern matching business but to use some of the properties that we can extract at run time to try to identify modules. The information that is readily available is the module file name, a location (path) and its file size. Modules often (but not always) contain version information, a description, information about the product it belongs to (name and version) and it may also be digitally signed).
- To start with, we'll use the normalized path (described below) + filename, the description (if any) and a version range (if version is available to us and we need to match a certain version only).
- Paths need to be normalized to account for differences in OS installation and profile location. This means that we'll need to convert local paths from c:\\user\\foo\\bar to %USERPROFILE%\\foo and from short names to long names before we use them for comparison. Furthermore, we should also lower-case all the strings before converting them to hashes (SHA-256?) and use only the hashes to match modules on the client. This will prevent the list from overly increasing the size of the compiled Google Chrome binary.
- Every entry in the list of bad actors will have an associated bitmask of help tips to display along with a confirmed/suspected match.
- Possible bitmasks:
- NONE -- This means we have no help tip. Shows: "We are currently investigating this issue"
- UNINSTALL -- We know uninstall is possible and has resolved the issue for some: "You may try uninstalling this product to see if it resolves the issue".
- DISABLE -- Same as uninstall except "uninstalling" -&gt; "disabling".
- UPDATE -- Same as uninstall except "uninstalling" -&gt; "updating".
- SEE_LINK -- If this is provided, we'll append the link "Learn more" to the end.
- The goal here is to avoid having to ship the help strings down to the client. Also to be generic enough to be included in the resource files, localized to each language we support and reused whenever we find a match. If more details are required, such as a link to a hotfix, we'll need to provide this in the help center article.
-
- If uninstall, disable and/or update appear together, we'll collapse the string into one, such as: "You may try uninstalling, updating or disabling this product to see if it resolves the issue". 'None' can not be used if Uninstall, Disable and Update is specified.
- If SEE_LINK is provided, we'll use the hashes to construct a link to a help center article passing as parameters the hashes we constructed for the list, so we can customize the help messages shown to the user.
- The list would be constructed as follows:
- Filename | location | Signer (if available, otherwise module Description) | version lower | version upper | help tip
- An example hypothetical entry in the list:
- mshtml.dll | %windir%\\system32 | Microsoft (R) HTML Viewer | 1.0 | 1.1 | UPGRADE or SEE_LINK
- This would translate into:
- 32bithash1 | 32bithash2 | 32bithash3 | string | string | bitmask
- If the link is clicked, it would (hypothetically) navigate to something like:
-
- http://www.google.com/support/chrome/bin/answer.py?answer=&lt;someid&gt;&topic=&lt;sometopic&gt;&hl=&lt;language&gt;&n=&lt;hash1&gt;&l=&lt;hash2&gt;&d=&lt;hash3&gt;&s=&lt;hash3&gt;
-
- The detection mechanism
- The client code will enumerate all modules loaded into the browser process and all registered modules of interest (ie. shell extensions). We'll need to enumerate the registered modules as well because some modules load on-demand only (and might even crash the browser while doing so).
- A module is considered a suspected match if its file name matches a file name on the list. If either an Authenticode signature signer or *description* is provided in the blocklist, then we can possibly upgrade the status to confirmed match. Specifically, a module is considered a confirmed match if (in addition to the file name):
- * The module (DLL) is Authenticode signed and the digital
- signature signer matches the signer in the blocklist.
- * _or_
- * Both the location of the module and the description matches the
- information provided in the list of bad actors.
- * _or_
- * The *description* field and the *signer* field in the blocklist
- is left blank.
- Note: If a version range is provided in the list, it must match for the module to be considered either a suspected/confirmed match. The same applies to location.
- To begin with, at least, the red dot will only show for confirmed bad modules (for those opting in). We can later experiment on the Dev channel with showing it also for suspected bad modules.
- Data collection
- For those users who opt-in to data collection (UMA) we'd want to know...
- * How many bad modules did we detect?
- * How often are we displaying the red dot on the Wrench menu?
- * How long does it take to go through the list of all modules?
- FAQ
- Most of this is constructed from discussions among various Chromium members regarding this feature/different approaches.
- Why not block all 3rd party modules in the browser process?
- Because that penalizes the good extension developers that provide properly written useful extension functionality. **Update**: See <https://crbug.com/690166> and <https://crbug.com/846953>
- How about introducing a list of allowed modules?
- Such a list would likely be too hard/time consuming to construct and maintain due to the number of items that users would want to be allowed.
- How about automatically blocking all known bad modules?
- Concerns have been raised that automatically blocking modules introduces code that adversely affects startup time for people who have no bad modules installed. In the future we might look into the possibility of checking on a background thread for known bad modules and set a flag for next startup to eject that module. That's beyond the scope of this feature though (at least the first version).
- Where does the block list come from?
- The block list is constructed by a collaboration between Support and people working on browser stability.
- Won't the red dot on the Wrench menu be annoying for false positives (ie. if just names of modules matching)?
- The red dot notification is opt-in by a flag, but it won't in any case be shown for suspected matches where only the names matches. It has to be a confirmed match (where either the Authenticode signer matches or the location and description match). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/Event_Watcher_Toolbar.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/Event_Watcher_Toolbar.jpg.sha1
deleted file mode 100644
index 36487802ba5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/Event_Watcher_Toolbar.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3bd9e9239d07a5b311f12e0c4c41842d38feb29f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/Inspect_Toolbar.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/Inspect_Toolbar.jpg.sha1
deleted file mode 100644
index e4c85ec4eea..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/Inspect_Toolbar.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-287ce62e4393166f59a79d543d80672d562775b4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/chrome-a11y-2010-09-02.zip.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/chrome-a11y-2010-09-02.zip.sha1
deleted file mode 100644
index 471ba39eb9a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/chrome-a11y-2010-09-02.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8aa1d47f26de052e5f89315020071182ae3e8cf1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/chrome_font_and_languages.png.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/chrome_font_and_languages.png.sha1
deleted file mode 100644
index cebb56e1dfb..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/chrome_font_and_languages.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-04de0d9ea4ccad2e13f029fab22c07374c0bd0ef \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/chrome_toolbar.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/chrome_toolbar.jpg.sha1
deleted file mode 100644
index 7afe5d194f3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/chrome_toolbar.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-509c8cb286082609bdad22877b65be4e1fa885e1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/create_shortcut.png.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/create_shortcut.png.sha1
deleted file mode 100644
index 68216180c98..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/create_shortcut.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-56555cfae8f08ecce3bf642db8773a073de1cd6e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/custom_colors.png.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/custom_colors.png.sha1
deleted file mode 100644
index 32b2d099137..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/custom_colors.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fd1494ee2ffac944516a6d532c6b56cce1c8ab85 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/flag_added.png.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/flag_added.png.sha1
deleted file mode 100644
index e8ecc629395..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/flag_added.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3f27d60ddd770724cf062c644772304d2d04574f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/index.md b/chromium/docs/website/site/developers/design-documents/accessibility/index.md
deleted file mode 100644
index 74644648620..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/index.md
+++ /dev/null
@@ -1,177 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: accessibility
-title: Accessibility Technical Documentation
----
-
-[TOC]
-
-This page is targeted at Chrome developers, third-party assistive technology
-developers, and highly-technical users. For general information about Chrome
-accessibility, see the following user experience documents:
-
-* [Accessibility: Keyboard Access](/user-experience/keyboard-access)
-* [Accessibility: Touch Access](/user-experience/touch-access)
-* [Accessibility: Low-Vision
- Support](/user-experience/low-vision-support)
-* [Accessibility: Assistive Technology
- Support](/user-experience/assistive-technology-support)
-
-**If you're a Chrome developer and you just want to make sure your feature is
-accessible without learning all about the gory details, see:**
-
- **[Accessibility for Chromium Developers](/developers/accessibility)**
-
-For information about how accessibility code is tested, including how to write
-new tests or debug test failures, see:
-
-* [Accessibility Testing](/developers/accessibility/testing)
-
-## Goals
-
-**Chrome should be accessible to all users, including those with special access
-needs. While there are a number of different challenges, we believe the
-following key areas are the most important:**
-
-* **Keyboard access**: it should be possible to accomplish any action
- easily without using the mouse.
-* **Low-vision support**: support high-contrast themes, zooming, and
- large font sizes.
-
- ****Assistive technology support**: Chrome should work with the most popular
- Mac and Windows screen readers, magnifiers, voice control programs, and
- more.**
-
-Improving accessibility support often helps not only users with disabilities,
-but also for power users. Whenever possible, we prefer to design Chrome so that
-everyone can share the same accessible interface, rather than special modes for
-accessibility.
-
-**Volunteers with an interest in improving accessibility are welcome (both for
-testing and development). Please join the
-[chromium-accessibility](http://groups.google.com/a/chromium.org/group/chromium-accessibility)
-list for further information.**
-
-## Accessibility Bug Tracking
-
-We use Chromium's issue tracker to keep track of bugs and feature development.
-You can keep track of Accessibility issues using the following links:
-
-* [All Accessibility
- bugs](https://code.google.com/p/chromium/issues/list?q=Cr%3DUI-Accessibility)
-* [Windows accessibility
- bugs](https://code.google.com/p/chromium/issues/list?q=Cr%3DUI-Accessibility+os%3Dwindows)
-* [Mac accessibility
- bugs](https://code.google.com/p/chromium/issues/list?q=Cr%3DUI-Accessibility+os%3Dmac)
-
-You can also file a [New issue](http://code.google.com/p/chromium/issues/entry).
-
-## How Chrome detects the presence of Assistive Technology
-
-For performance reasons Chromium waits until it detects the presence of
-assistive technology before enabling full support for accessibility APIs.
-
-Windows: Chrome calls NotifyWinEvent with EVENT_SYSTEM_ALERT and the custom
-object id of 1. If it subsequently receives a WM_GETOBJECT call for that custom
-object id, it assumes that assistive technology is running.
-
-Mac OS X: Chromium turns on or off accessibility support based on whether it
-sees a client, such as VoiceOver, has set the AXEnhancedUserInterface attribute
-on the main application window.
-
-**To override:**
-
-1. Start Chrome with this flag:` --force-renderer-accessibility`
-2. Or, visit this url to turn it on from within Chrome:
- `chrome://accessibility`
-
-## How Assistive Technology can detect Chrome
-
-Traditionally, assistive technology on Windows used the window class name as a
-way to identify a known browser and adapt accordingly. However, this means
-assistive technology needs to be updated whenever Chrome needs to change its
-window class name, and it also means that other Chrome-based browsers wouldn't
-be detected.
-
-If you must use the window class name, please accept any class name that begins
-with "Chrome", rather than detecting the current window class name.
-
-As a more robust alternative, Chrome 28 and higher supports
-[IAccessibleApplication](http://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/interface_i_accessible_application.html),
-and it returns strings of this form:
-
-` applicationName: Chrome/vv.xx.yyyy.zz`
-` applicationVersion: Mozilla/5.0... Chrome/`vv.xx.yyyy.zz ...
-` **toolkitName: Chrome**`
-` toolkitVersion: Mozilla/5.0... Chrome/`vv.xx.yyyy.zz ...
-
-Note that there are other Chrome-based browsers. Any Chrome-based browser will
-have "Chrome" as its toolkitName, so ideally you should use the toolkit name as
-the way to enable custom support for Chrome accessibility.
-
-The applicationVersion and toolkitVersion are the browser user agent, the same
-one sent to web servers with each web request. That's a way to get more
-information about the exact Chrome version dynamically.
-
-## Accessibility internals
-
-Chrome's multi-process architecture is different from that of any other browser.
-For security, the main browser UI is in one process, and web pages are run in
-separate renderer processes (typically one per tab). The Renderer processes are
-the only ones with a representation of the webpage's DOM and therefore all of
-the accessibility information, but the renderer processes are specifically not
-allowed to interact with the operating system (sending or receiving events or
-messages) - in particular, the renderer processes cannot send or receive
-accessibility events.
-
-As a result, Chrome uses a cache of the accessible DOM tree in the browser
-process. For performance reasons, this only happens if assistive technology is
-detected or if it's explicitly enabled (see above).
-
-For a high-level overview of the implementation of Chrome's accessibility
-support, see
-[/docs/accessibility.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/accessibility.md).
-
-## API support
-
-**Windows:**
-
-* MSAA/IAccessible (complete)
-* IAccessible2 (complete)
-* ISimpleDOM (mostly complete)
-* IAccessibleEx and UI Automation (very limited)
-
-**Mac OS X:**
-
-* NSAccessibility (complete)
-
-**Linux:**
-
-* ATK
-
-**Android:**
-
-* Android accessibility API (complete)
-
-## Testing
-
-Chrome has a built-in page you can access to view accessibility internals and
-toggle accessibility support on or off on a per-tab basis. Just visit this url:
-
-` chrome://accessibility`
-
-On Windows, we recommend testing with a combination of
-[AccProbe](http://accessibility.linuxfoundation.org/a11yweb/util/accprobe/) and
-[AViewer](http://blog.paciellogroup.com/2013/03/aviewer-2013/) (they each have
-their strengths). To use AccProbe, you may need to have a JRE 6 installation and
-pass it as a command-line option: (e.g., accprobe.exe -vm
-"C:\\jre6\\bin\\javaw.exe") and disable Java auto-updates
-(http://www.java.com/en/download/help/javacpl.xml) which will trash your JRE 6
-installation.
-
-On Mac, we recommend testing with [Accessibility
-Inspector](http://developer.apple.com/library/mac/#documentation/Accessibility/Conceptual/AccessibilityMacOSX/OSXAXTesting/OSXAXTestingApps.html). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/properties.png.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/properties.png.sha1
deleted file mode 100644
index c39cc0e18a4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/properties.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0f5c57f5bc7b2bf799a2cc2c95f00366daa03ce9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.pdf.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.pdf.sha1
deleted file mode 100644
index 4771a37f067..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-12ae893cd0efacb592d067f783d7709aef1bf363 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.txt b/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.txt
deleted file mode 100644
index 13bf9d3ad25..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Accessibility_in_the_Cloud.txt
+++ /dev/null
@@ -1,159 +0,0 @@
-
-Title: Accessibility in the Cloud
-
-Boldy venture forth, ye brave explorers!
-
-Jonas Klink (klink@google.com)
-
-Accessibility Product Manager / Software Engineer
-
-http://google.com/Accessibility
-
----
-
-Slide: Who am I?
-
-PM/SWE, part of a Dev team dedicated to Access Engineering
-
-With Google for the past 4 years
-
-Education:
-
-MS in Computer Science (Chalmers Uni. of Tech., Sweden)
-
-PhD in Computer Science (University of Washington, Seattle)
-
-Research on Education and Technology for the visually impaired
-
-Project work includes:
-
-Client-side: Toolbar, Desktop Search, Chrome
-
-Web Apps: Gmail, Apps, Blogger, Maps, Transit, …
-
----
-
-Slide: Why? Users!
-
-http://google.com/Accessibility
-
----
-
-Slide: The Web as a Platform
-
-Platform layers are changing:
-
-Low-level support framework (TTS, fonts, themes)
-
-JavaScript APIs
-
-Web Applications (GWS, Gmail, Docs)
-
-Graceful Degradation vs. Progressive Enhancement
-
-The Web has the distributed data
-
-Universal Access Engineering makes it available through any channel
-
-Personalization and user goals are key
-
-Every level in the stack is customizable
-
-APIs provides the muscle
-
-User is less dependent on the applications
-
-Designing for Access Workflows:
-
-Focus on workflows, rather than UI components
-
-Most common tasks need to be optimized
-
-Tab/arrow navigation often too slow
-
-Enumerating workflows often highlight common roadblocks
-
-Workflows drill down to component-level access
-
-Designing your product for optimized workflows:
-
-Optimize workflows with keyboard and AT support
-
-Expose a public page-level API, addressable from JS
-
-Provide a clean DOM, with non-obfuscated hooks
-
-Document and empower the curious user!
-
----
-
-Slide: Supporting the brave explorers
-
-Exploration in the document model Web:
-
-Web 1.0: Headings, links, frames to build cognitive model
-
-AT optimized for quick access to key element types
-
-Users have developed personalized techniques for exploration
-
-Need support for exploration in Web 2.0:
-
-Web 2.0 hs application mode and non-document structure
-
-Sighted users rely on visual cues learned from the desktop
-
-Answer: contextual, on-demand exploration aids?
-
-Community can work together to build familiarity!
-
----
-
-Slide: Example: Google Reader Access
-
-Extremely keyboard friendly:
-
-Access keyboard shortcut through '?' or Reader Help Center
-
-Navigate items with 'j' and 'k'
-
-Keyboard bindings available for starring, sharing, commenting, etc
-
-Delivers screen reader augmentation:
-
-Follow link 'click here for ARIA enhanced Google Reader'
-
-Screen reader support in ARIA-enabled browsers
-
-Applies magnification lens for low-vision users:
-
-Follows keyboard navigation
-
-Provides customization through '-' and '='
-
-Zero impact on latency!
-
----
-
-Slide: Conclusion
-
-Collaboration and openness benefit everyone
-
-Customization is key
-
-Configure once, work everywhere
-
-Focus on workflows, then widgets
-
-Develop solutions with little or no latency impact
-
----
-
-Thank you!
-
-Q & A
-
-klink@google.com
-
-http://google.com/Accessibility
-
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_andApplications.pdf.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_andApplications.pdf.sha1
deleted file mode 100644
index ea39c0f1ec4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_andApplications.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8daf094eff529f391e7bb715c99b92cf9b0845ed \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_and_Applications.txt b/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_and_Applications.txt
deleted file mode 100644
index 727c0d4dfea..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/CSUN_Improving_Access_To_Web_Platforms_Content_and_Applications.txt
+++ /dev/null
@@ -1,330 +0,0 @@
-
-Google Access Engineering
-
-Improving Access To Web Platforms, Content, and Applications at Google
-
-
-
-
-Jonas Klink (klink@google.com)
-
-Accessibility Product Manager / Software Engineer
-
----
-
-
-Slide: Who am I?
-
-PM/SWE, part of a Dev team dedicated to Access Engineering
-
-With Google for the past 4 years
-
-Education
-
-MS in Computer Science (Chalmers Uni. of Tech., Sweden)
-
-PhD work in Computer Science (University of Washington, Seattle)
-
-Research on Education and Technology for the visually impaired
-
-Project work includes:
-
-Client-side: Toolbar, Desktop Search, Chrome
-
-Web Apps: Gmail, Apps, Blogger, Maps, Transit, …
-
----
-
-Slide: What is Google Access Engineering?
-
-Information access is at the core of Google's mission
-
-To make the world's information universally accessible and useful
-
-Adapting to the information channels that your user can most effectively use
-
-
-Access involves understanding two key issues:
-
-How differently abled users and/or different setups access information
-
-How developers enable apps to function with assistive technologies and settings
-
-
-
-
-Visit google.com/accessibility for resources and feedback!
-
----
-
-Slide: Why? Users!
-
----
-
-Outline
-
-The Web as a Platform
-
-Mobile: Android
-
-Accessibility in the Cloud 
-
-Q & A
-
----
-
-Slide: The Web as a Platform
-
-Platform layers are changing:
-
-Low-level support framework (TTS, fonts, themes)
-
-JavaScript APIs
-
-Web Applications (GWS, Gmail, Docs)
-
-Graceful Degradation vs. Progressive Enhancement
-
-The Web has the distributed data:
-
-Universal Access Engineering makes it available through any channel
-
-Personalization and user goals are key:
-
-Every level in the stack is customizable
-
-APIs provides the muscle
-
-Focus on workflows, rather than UI components
-
-User is less dependent on the applications
-
----
-
-Slide: Example: Google Reader Access
-
-Extremely keyboard friendly:
-
-Access keyboard shortcut through '?' or Reader Help Center
-
-Navigate items with 'j' and 'k'
-
-Keyboard bindings available for starring, sharing, commenting, etc
-
-Delivers screen reader augmentation:
-
-Follow link 'click here for ARIA enhanced Google Reader'
-
-Screen reader support in ARIA-enabled browsers
-
-Applies magnification lens for low-vision users:
-
-Follows keyboard navigation 
-
-Provides customization through '-' and '='
-
-Zero impact on latency!
-
----
-
-Slide: Eyes-Free Navigation on Android
-
-Built on Open Source TTS library (in production)
-
-Alternative eyes-free Home screen
-
-Configurable to replace default Home screen
-
-Home is where finger first touches
-
-Configurable shortcuts laid out in square pattern around Home
-
-Includes quick access to Signal, Time, Battery, Location, Search, Applications, Voicemail & Shortcuts
-
-Feedback through haptic and speech channels
-
----
-
-Slide: Eyes-Free: Talking Dialer on Android
-
-Built on Open Source TTS library (in production)
-
-Eyes-free dialing on touch screen possible
-
-Keypad number 5 always located at center of square
-
-Numbers 1-9 laid out around number 5 (0 located past 8)
-
-Dialing made possible by gesturing in desired direction, while maintaining touch
-
-Feedback through haptic and speech channels
-
----
-
-Slide: Non-visual feedback through TalkBack
-
-Available under Settings-»Accessibility
-
-TalkBack:
-
-Relying on API available in Android 1.6+ SDK (Donut)
-
-Standard UI elements produce spoken feedback during interaction
-
-Free voices available for en, fr, it, de & es
-
-KickBack:
-
-Producing haptic feedback
-
-SoundBack:
-
-Producing non-spoken auditory feedback
-
-Instructions available on YouTube EyesFree channel
-
----
-
-Slide: Accessibility APIs on Android
-
-Developers: customize your Access experience!
-
-Open Source development APIs
-
-android.accessibilityservice.AccessibilityService:
-
-Accessibility service runs in the background and receives callbacks by the system when AccessibilityEvents are fired.
-
-android.accessibilityservice.AccessibilityServiceInfo:
-
-Describes an AccessibilityService, e.g. what feedback type is generated: audible (but not spoken), spoken, haptic or visual.
-
-android.view.accessibility.AccessibilityEvent:
-
-Represents accessibility events that are sent by the system when something notable happens in the UI.
-
----
-
-Chromium Access
-
-Based on Open Source WebKit:
-
-Open development and standards compliance
-
-Multi-process and sandboxed
-
-Minimal UI - browser fading into the background
-
-Access work in progress:
-
-Keyboard navigation
-
-Developing screen reader support & WAI-ARIA
-
-Full page zoom
-
-High Contrast Support (through Extensions)
-
----
-
-Slide: Extended Access through Extensions
-
-URL: chrome.google.com/extensions
-
-Light-weight and easy to author (HTML/CSS/JS):
-
-Anyone can create!
-
-Open Source and extensible:
-
-Anyone can make it his/her own!
-
-Secure (multi-process), fast (v8) and powerful:
-
-We’ve got your back!
-
-Overlay putting desired information and behavior at your fingertips:
-
-Information the way YOU want it!
-
-Quick navigation, page re-styling & re-structuring, etc
-
----
-
-Slide: AxsJAX
-
-Keyboard navigation in <30 mins!:
-
-Open Source
-
-Can be applied to any page
-
-Overlay can provide additional keyboard navigation
-
-Any DOM node can be spoken
-
-Design for overlays - content in DOM access-friendly
-
-Lens effect
-
-DOM-node level magnification
-
-Available for many Google products:
-
-GWS, Gmail, Calendar
-
-Reader, Scholar, Books
-
-
-URL: http://code.google.com/p/google-axsjax/wiki/Showcase
-
----
-
-Slide: Captions
-
-Talk:Video Captioning at Google and YouTube:
-
-Friday, Mar 26th, 4:20pm in Del Mar AB
-
-Largest online repository of captioned video
-
-Auto-captions & auto-timing
-
-Benefits all users!:
-
-Improved indexing and in-video navigation
-
-Access for non-native speakers
-
-Multiple tracks & languages
-
-Real-time translation
-
----
-
-Slide: Conclusion
-
-Collaboration and openness benefit everyone
-
-Customization is key
-
-Configure once, work everywhere
-
-Focus on workflows rather than widgets
-
-Develop solutions with little or no latency impact
-
----
-
-Slide: Thank you for coming!
-
-?
-
-Q & A
-
-google.com/accessibility
-
----
-
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/ChromeWindowsAccessIssueTracker(public).csv b/chromium/docs/website/site/developers/design-documents/accessibility/tracker/ChromeWindowsAccessIssueTracker(public).csv
deleted file mode 100644
index f3f59913071..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/ChromeWindowsAccessIssueTracker(public).csv
+++ /dev/null
@@ -1,89 +0,0 @@
-Task,Type,Bug URL/ID,Owner,Priority,Status,Changelist
-
-Area: MSAA & IA2 (UI)
-
-Infobar container and extensions bar visibility,Bug,crbug.com/36224,ctguil,,"Ready to submit
-http://codereview.chromium.org/669275"
-Bookmarks bar is partially missing MSAA info,Bug,crbug.com/36281,ctguil,,"Ready to submit
-http://codereview.chromium.org/652156"
-Web content nodes are missing MSAA information,Bug,crbug.com/36286,ctguil,,"Ready to submit
-http://codereview.chromium.org/652199"
-AccExplorer freezes when pointed at Chrome,Bug,crbug.com/36162,ctguil,P0,Fixed & submitted,http://src.chromium.org/viewvc/chrome?view=rev&revision=39828
-Extension toolbar buttons and menus need MSAA information,Bug,crbug.com/36289,ctguil
-Resolve stability issues and remove --enable-renderer-accessibility flag,Bug,crbug.com/25564,ctguil,P1,"In progress, Chris writing proof-of-concept app"
-"""Options"" dialog needs MSAA",Bug,crbug.com/9621
-"""Bookmarks manager"" dialog needs MSAA",Bug,crbug.com/9619
-"""Import bookmarks and settings"" dialog needs MSAA",Bug,crbug.com/9617
-"""Clear browsing data"" dialog needs MSAA",Bug,crbug.com/9616,thiago.farina@gmail.com,,In progress
-"""Report bug or broken website"" dialog needs MSAA",Bug,crbug.com/9614
-"""Find in page"" dialog needs MSAA",Bug,crbug.com/9606
-No keyboard focus tracking in omnibox dropdown,Bug,crbug.com/9605
-"""Edit bookmark"" dialog needs MSAA",Bug,crbug.com/9604
-Bookmark dialog/bubble needs MSAA,Bug,crbug.com/9601
-[Accessibility] Connect renderer accessibility notifications to the browser,Bug,crbug.com/36505,ctguil
-[Accessibility] Chrome's main window is missing an accessible name,Bug,crbug.com/36732,ctguil@chromium.org,,"Ready to submit
-http://codereview.chromium.org/661054"
-[accessibility] Extension toolbar and infobar container views should not have state visible if they are not rendered on screen.,Bug,crbug.com/36224,ctguil@chromium.org,,"In code review (jcampan)
-http://codereview.chromium.org/669275"
-[Accessibility] Bookmarks menu doesn't have an accessible name,Bug,crbug.com/36191,thiago.farina@gmail.com,,Fixed & submitted,http://src.chromium.org/viewvc/chrome?view=rev&revision=41466
-[accessibility] JAWS isn't notified when a checkbox is toggled,Bug,crbug.com/36165,ctguil@chromium.org,,Fixed & submitted,http://src.chromium.org/viewvc/chrome?view=rev&revision=40998
-"[Accessibility] Submenus of ""page button"" and ""Chromium button"" are read as ""context menu"" by JAWS",Bug,crbug.com/36088
-"[Accessibility] Annoying to hear ""insert+F1 help"" for almost every link.",Bug,crbug.com/36858
-[Accessibility] Opening in new window (control+n) is read differently by screenreader,Bug,crbug.com/37235
-[Accessibility] No way to identify if in incognito mode when using screenreader,Bug,crbug.com/37357
-[Accessibility] Links to listen to videos in same window do not play for screenreader users.,Bug,crbug.com/37724
-"[Accessibility] Items in the toolbar are read as ""partially checked""",Bug,crbug.com/36086,dmazzoni
-"[Accessibility] In Google search, pressing ""insert+f1"" for help reads off JAWS commands.",Bug,crbug.com/36090
-"[Accessibility] ""insert F1 help"" is not read.",Bug,crbug.com/36744
-
-Area: Keyboard Access
-
-Extensions on the toolbar have no keyboard navigation,Bug,crbug.com/36222,mhm,,mhm working on design proposal
-Extensions container is in toolbar arrowing order even when not rendered,Bug,crbug.com/36087,ctguil@chromium.org,Will not fix,Duplicate of issue 36224
-Omnibox dropdown does not track keyboard focus as you move from item to item,Bug,crbug.com/9605
-"Menu Bar: Alt/F10 should focus ""menu bar"", drop-down menu role should not be ""pop-up""",Bug,< no bug yet >,dmazzoni,,CL in progress; doing GTK / Chronos in parallel
-"Toolbar child focus should be ""remembered"" when tabbing between toolbars.",Bug,< no bug yet >,dmazzoni,,CL in progress
-"BMB right click context menu displays farwary, with keyboard navigation",Bug,crbug.com/30365,sky
-Want a way to click links with the keyboard (after finding the link through Find in Page),Bug,crbug.com/29500,estade,,In progress - works for gtk (windows and mac to come)
-"[Accessibility] When in Chrome toolbar, navigating out of Chrome and back to Chrome resets location of cursor to default location",,crbug.com/36070
-[Accessibility] Navigating back using back option in toolbar announces wrong cursor location,Bug,crbug.com/36721
-[Accessibility] Cursor focus should be placed in the webpage after selecting an option from toolbar.,Bug,crbug.com/36728
-[Accessibility] options> offer to save password does not interupt user,Bug,crbug.com/37360
-
-"Area: Font, color, layout and style customization"
-
-Windows Accessibility compatibility issues (High Contrast support),Bug,crbug.com/92,pkasting
-"Provide a way to set ""minimum font size""",Feature Request,crbug.com/7417
-Bookmark star color is hard to distinguish.,Feature Request,crbug.com/20501,alcor
-Tab title font size cannot be changed with the desktop settings,Bug,crbug.com/17866
-
-Area: WebKit and WebKit / Chromium infrastructure
-
-WebKit document root node should display MSAA name (page title) and value (URL),Bug,crbug.com/36169,ctguil@chromium.org,P1,"CL prepared, needs tests & WebKit upstreaming"
-WebKit table cell role should be overridden by ARIA role on cell,Bug,https://bugs.webkit.org/show_bug.cgi?id=28923,ctguil@chromium.org,P1,"CL prepared, needs tests & WebKit upstreaming"
-Complete the WAI-ARIA role support (the ones not needing IA2),Bug,crbug.com/19982,ctguil@chromium.org,,In progress - role support listed at: http://www.chromium.org/developers/design-documents/accessibility#TOC-WAI-ARIA-Roles
-[Accessibility] No notification for page refresh,Bug,crbug.com/36093,ctguil@chromium.org
-Screen reader support for web content is needed (includes IA2 - bug will be broken into smaller ones as we spec out more details of what's needed),Bug,crbug.com/13291,"ctguil@chromium.org
-klink@chromium.org"
-Implement accessibilityController in test shell,Bug,crbug.com/10322,dglazkov,,In progress - several CLs submitted already on this
-[Accessibility] JAWS navigation cannot be used in Chrome,Bug,crbug.com/36092
-[Accessibility] deleted characters in an edit box are not read,Bug,crbug.com/36217
-[Accessibility] Labels for Combo boxes are not read properly by JAWS.,Bug,crbug.com/36477,,P1
-[Accessibility] Options in combo box are not read as they are selected,Bug,crbug.com/36478,,P1
-[Accessibility] Name of sender(s) is not read in Gmail,Bug,crbug.com/36515
-[Accessibility] Text for graphics which are also links are not being read by JAWS.,Bug,crbug.com/36581,,P1
-[Accessibility] edit box and button is being identified as list box,Bug,crbug.com/36622
-[Accessibility] Skip links do not work when using screenreader.,Bug,crbug.com/37721
-[Accessibility] Chromium needs to expose aria-activedescendant focus changes,Bug,crbug.com/38106,ctguil@chromium.org,P1,"CL prepared, needs tests & WebKit upstreaming"
-"[Accessibility] Support WAI-ARIA roles alert and alertdialog, as well as associated focus changes",Bug,crbug.com/38108,ctguil@chromium.org,P1,"CL prepared for the roles, needs associated focus events"
-[Accessibility] Most of the text for links and labels for form fields is not read by screenreader,Bug,crbug.com/37234
-
-Area: Documentation
-
-Add documentation for keyboard navigation of bookmarks bar and Alt+E/Alt+F to the Chrome design document,Doc,,klink,,"Done - live at: http://www.chromium.org/developers/design-documents/accessibility, and also listed in the general Chrome Keyboard Shortcuts document: http://www.google.com/support/chrome/bin/answer.py?answer=95743"
-File bugs on WAI-ARIA states and properties,Doc,,klink
-File bugs on live region support,Doc,,klink
-Move issue tracker to public place,Doc,,klink,,Done - live at: http://www.chromium.org/developers/design-documents/accessibility/tracker
-Compose Accessibility User Guidelines for Google Chrome,Doc,,klink,,Done - live at: http://www.chromium.org/developers/design-documents/accessibility
-Create changelog page,Doc,,klink,,Done - live at: http://www.chromium.org/developers/design-documents/accessibility/tracker
-Add all outstanding bugs to this spreadsheet,Doc,,klink,,Done - live at: http://www.chromium.org/developers/design-documents/accessibility/tracker
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/index.md b/chromium/docs/website/site/developers/design-documents/accessibility/tracker/index.md
deleted file mode 100644
index 02985c94706..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/tracker/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/accessibility
- - Accessibility Technical Documentation
-page_name: tracker
-title: Accessibility Issue Tracker
----
-
-### Accessibility Issues
-
-We use Chromium's issue tracker to keep track of bugs and feature development.
-You can keep track of Accessibility issues using the following links:
-
-[Open
-issues](http://code.google.com/p/chromium/issues/list?can=2&q=label:Feature-Accessibility&sort=pri+-stars)
-| [Fixed
-issues](http://code.google.com/p/chromium/issues/list?can=1&q=label:feature-accessibility%20status:Fixed,Verified,Duplicate,WontFix,FixUnreleased,Invalid&sort=-modified)
-| [All
-issues](http://code.google.com/p/chromium/issues/list?can=1&q=label:Feature-Accessibility&sort=-modified) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/accessibility/xoom_menu.png.sha1 b/chromium/docs/website/site/developers/design-documents/accessibility/xoom_menu.png.sha1
deleted file mode 100644
index d585f0b7e7e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/accessibility/xoom_menu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-db4d2e77ad5e27a910c08c89da9d5b454ac8b097 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/advancedspellchecker/index.md b/chromium/docs/website/site/developers/design-documents/advancedspellchecker/index.md
deleted file mode 100644
index c5aec8ef579..00000000000
--- a/chromium/docs/website/site/developers/design-documents/advancedspellchecker/index.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: advancedspellchecker
-title: Adaptive spell checking for multilingual users
----
-
-## The existing spell checking system has all the features that most modern browsers have. It can suggest words, can add custom words, supports 27 languages (and counting), can install spellcheck dictionaries without user intervention, can change spell check languages on the 'fly', has 'new' words incorporated in many languages ([blog](http://blog.chromium.org/2009/02/spell-check-dictionary-improvements.html)), and is generally known to be stable and useful, without being intrusive. As a slightly more advanced feature, [automatic spelling correction](/developers/design-documents/automaticspellingcorrection) was added, as an experiment (under a command line flag). It has been moderately successful, albeit with some small nuances which need to be fixed before it can be fully incorporated as a feature.
-
-At this stage, improvements to spell checking have to go beyond what every other
-browser provides. One important aspect of spell checking is the fact that many
-users are multi lingual. They would like to see spell check support which would
-enable them to switch between their chosen languages of communication through
-the browser smoothly, expecting the spell checking system to adapt to their
-usage automatically, in real time. This would require the SpellChecker to
-automatically detect the intended language of use as the user is typing, and
-switch to it smoothly and non-intrusively.
-
-Usage
-
-This feature has to be designed such that the user involvement is minimum. The
-user should be able to simply start typing in a text box (email, comment, doc
-etc) and the spell checking system keeps pace to update itself to the language
-the user is typing in. The user should be oblivious to the change of spellcheck
-language in terms of performance while typing, and should be able to mix
-multiple languages in a single text box to get the corresponding spell checking
-done automatically. The suggestions to misspelled words should be presented
-intuitively without cluttering up the context menu.
-
-When the user mixes multiple languages together,the SpellChecker detects that
-the user is using multiple languages, and starts supporting the languages
-*simultaneously*. This means that, when the user types in a word, it is marked
-misspelled if it is misspelled in all the languages. Only two concurrent
-languages will be supported. If a new, third language is detected for use,
-remove the one which was least recently used.
-
-On right click on the misspelled word, the context menu shows sub context-menus
-on the top, corresponding to the two languages, and the sub context-menus
-themselves show the suggestions for the corresponding language.
-
-Design principle
-
-Thanks to prior work done to support this features, Chromium already includes a
-rich set of features to enable this advanced feature. The following features
-will be used:
-
-Language detection
-
-The Compact Language Detection (CLD) library was initially written for Google
-Toolbar. It was ripped off from its dependency with toolbar, and was added to
-Chromium recently. CLD is fully integrated with Chromium, and does not require
-any communications with any server. It requires a very low sampling size - most
-of the times it can detect the language from a single sentence. It is not very
-resource intensive, and returns the language fast if the input is kept sparse.
-It returns unknown for languages which it cannot detect.
-
-SpellChecker support
-
-The SpellChecker supports the ability to be changed on the fly. Currently, the
-SpellChecker can handle one language at a time. It has to be upgraded to handle
-multiple languages simultaneously, and should have the ability to quickly change
-these languages on the fly. When this feature is enabled, given a word to check
-for spelling and suggestions, it will do so for the languages it is supporting,
-and will generate suggestions for these languages simultaneously.
-
-UI Support
-
-The UI has to be updated in several places to support this feature.
-
-*Context menu suggestions*
-
-The context menu over a text area currently shows suggestions in a single
-language. It has to be updated so that it can now support sub context-menus to
-show suggestions for different languages simultaneously.
-
-*Sub context menu in Context menu for spell check options*
-
-The context menu for a text area has a dedicated Spell Check options sub menu to
-select language of the SpellChecker. Only one language can be selected through
-context menu radio buttons at this time. When the auto detect language feature
-is turned on, this has to now enable check boxes, which means that the languages
-which have been detected so far will be shown, and two of them will be enabled
-(by check boxes).
-
-The spell checking system has to remember the languages typed by the user. Thus,
-suppose the user types in English, French and German in a session. In a new
-session, when the user starts using a text box, the SpellChecker will be set to
-a default one, and these three languages will show up in the sub context menu,
-with only the default one selected.
-
-*Languages Options Menu*
-
-There should be quick settings to turn this feature ON/OFF from the Language
-Options menu.
-
-*Note*: The Options menu for Languages is undergoing a change where the user can
-simply set the languages used, and not bother explicitly about accept languages,
-spell check languages and Chromium UI languages. The change in spellcheck
-language will be reflected in the languages that the user uses. If the language
-is not set by the user, it is added as a new language detected to be used by the
-User.
-
-**Limitations and possible drawbacks**
-
-While this feature itself is exciting, past experience has revealed that such
-features can be intrusive and counter intuitive for certain edge cases. Some
-edge cases are the following:
-
-*User mixes multiple languages in a single sentence:*
-
-Sometimes, users, when constructing informal emails, mix words from the
-different languages they know. Of course, the fact that multiple languages will
-be supported simultaneously is the end solution - but how does one detect these
-languages?
-
-*How to decide the default language to start with*
-
-Selecting the default language to start with during spell checking can be
-tricky. Right now, the following heuristics will be used to select the default
-language of the SpellChecker - the language of the web page if the text box is
-empty - otherwise, the language of the words in the text box if it is
-pre-populated.
-
-Testing
-
-The spell check tests have to be upgraded so that they are aware of the
-SpellChecker's ability to spell in multiple languages simultaneously. Automated
-tests have to be designed to check the ability of the SpellChecker to change
-language on the fly adaptively with the language of the text being spell
-checked.. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/android-jni/index.md b/chromium/docs/website/site/developers/design-documents/android-jni/index.md
deleted file mode 100644
index 411a0d0fc75..00000000000
--- a/chromium/docs/website/site/developers/design-documents/android-jni/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: android-jni
-title: JNI on Chromium for Android
----
-
-### Moved to: <https://chromium.googlesource.com/chromium/src/+/HEAD/base/android/jni_generator/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/applescript/index.md b/chromium/docs/website/site/developers/design-documents/applescript/index.md
deleted file mode 100644
index 08c1cb19241..00000000000
--- a/chromium/docs/website/site/developers/design-documents/applescript/index.md
+++ /dev/null
@@ -1,116 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: applescript
-title: AppleScript Support
----
-
-## Introduction
-
-AppleScript is a widely used scripting language on Mac OS X, used for
-inter-process communication (IPC). It enables end-users who have no programming
-skills to easily create workflows and perform repetitive tasks. Supporting
-AppleScript also provides a consistent interface for communication with other
-applications.
-
-If you are unfamiliar with AppleScript, you can read more about it at
-[AppleScript Language
-Guide](http://developer.apple.com/mac/library/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html#//apple_ref/doc/uid/TP40000983).
-
-For implementation of AppleScript in your application, you might want to look at
-[Cocoa Scripting
-Guide](http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ScriptableCocoaApplications/SApps_intro/SAppsIntro.html).
-
-## Terminology
-
-* SDEF - scripting definition file, contains all the classes,
- properties, commands that scripters can use.
-* Automator - an application bundled with Mac OS X allowing the user
- to graphically build workflows on top of AppleScript.
-
-## Details
-
-AppleScript support involves five classes, each representing the classes defined
-in the sdef file:
-
-ApplicationApplescript
-
-* Not a separate class but a set of methods added in a category of
- BrowserCrApplication
-* The name, frontmost, and version properties are all obtained by work
- done in NSApplication
-* An application has windows as its elements
- * The windows are obtained by traversing through BrowserList,
- wrapping each Browser in a WindowApplescript class and returning
- it as an NSArray
- * A new window is created by creating a new Browser with a single
- blank tab
- * A window is closed by calling browser-&gt;window()-&gt;Close()
-* Bookmarks are represented as two folders elements, corresponding to
- the bookmarks bar and the "Other Bookmarks" folder
-
-### WindowApplescript
-
-* Encapsulates a Browser object
-* ID of a browser is obtained via browser-&gt;session_id().id()
-* mode indicates whether a browser window is a normal or an incognito
- window. The mode is set only during creation and cannot be changed
- at a later time. The default is a normal window.
-* The NSWindow associated with a browser can be used to get and set
- certain properties such as bounds, closeable, miniaturizable,
- miniaturized, resizable, visible, zoomable, and zoomed.
-* A browser window has tabs as its elements
- * The tabs comprising a browser window are obtained by getting
- each tab using browser-&gt;GetTabContentsAt(), wrapping it
- inside a TabApplescript class, and returning them as an NSArray
- * New tabs are made by using browser-&gt;AddTabWithURL()
- * Tabs are deleted using
- browser-&gt;tabstrip_model()-&gt;DetachTabContentsAt()
-
-### TabApplescript
-
-* Encapsulates a TabContents object
-* ID of a tab is obtained via
- tab_contents-&gt;controller().session_id().id()
-* The url and title associated with a tab can be mutated and accessed
- through the TabContents' controller.
-* Standard text-manipulation commands such as cut, copy, and paste are
- achieved by calling methods on the RenderViewHost associated with a
- particular tab
-* Standard navigation commands such as go back, go forward, and reload
- are achieved by calling methods on the controller associated with a
- particular tab
-* Printing a tab is done by calling tabContents-&gt;PrintNow()
-* Saving a tab is done by calling tabContents-&gt;SavePage(). The
- caller has to provide parameters such as file name and directory
- path, otherwise the user is prompted for these values
-
-### BookmarkFolderApplescript
-
-* Encapsulates a BookmarkNode object which represents a folder
-* ID is obtained via bookmarkNode-&gt;id()
-* The title can be mutated and accessed by calling methods on the
- BookmarkModel, which takes care of obtaining the correct locks and
- other housekeeping details.
-* A bookmark folder has other bookmark folders and bookmark items as
- its elements
- * Any child bookmark folders are obtained by getting all the child
- nodes of type folder, wrapping each up inside a
- BookmarkFolderApplescript class, and returning them as an
- NSArray
- * Adding and deleting bookmark folders and items is done by
- calling appropriate methods on the BookmarkModel which takes
- care of all internal details like obtaining locks etc
- * The bookmark items are obtained by getting all child nodes with
- type as url, wrapping each up in a BookmarkItemApplescript
- class, and returning them as an NSArray
-
-### BookmarkItemApplescript
-
-* Encapsulates a BookmarkNode object which represents a single url
-* ID is obtained via bookmarkNode-&gt;id()
-* Each bookmark item consists of a title and url and can be
- manipulated by calling methods on BookmarkModel \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/appmode-mac/index.md b/chromium/docs/website/site/developers/design-documents/appmode-mac/index.md
deleted file mode 100644
index c65183247c9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/appmode-mac/index.md
+++ /dev/null
@@ -1,343 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: appmode-mac
-title: Mac App Mode (draft)
----
-
-### Overview
-
-Chromium provides a way to create a "custom" browser shortcut for any web site
-(not yet implemented on Mac). Our ultimate goal for the Mac implementation is to
-make such a shortcut appear to be first-class application. In particular, its UI
-should consist of a browser displaying the specified web site, but with many
-"normal" browser features removed (no bookmarks, navigation, a custom menu bar,
-etc.). Usage examples include Gmail, Reader, Facebook, and so on.
-
-### User experience requirements
-
-The following are absolutely essential:
-
-* A shortcut should appear to be an application to the operating
- system (Spotlight, Finder, etc.). This also includes it working in
- the Dock like any other application: click to launch/raise,
- indicates when running, provides a window list, and present in
- Cmd-tab list for quick application switching.
-* The user should be able to treat a shortcut like any other
- Application, e.g., install it wherever he/she wishes.
-* A shortcut must have a customizable name and icon (and of course web
- site); the name must be displayed in the menu bar.
-* The window displayed by a shortcut must not display the "usual"
- gadgets, such as the toolbar, bookmark bar, etc.
-* A shortcut must be robust and maintenance-free with respect to
- browser updates, etc. (This presumably also means that shortcuts
- should be designed to be upgradable, at least in some way, if
- necessary.)
-
-The following would be nice to have:
-
-* A shortcut should function properly with Exposé and Spaces (e.g., a
- user should be able to "pin" a shortcut to any workspace, in
- particular to a workspace different from the browser's workspace).
- \[This is not expected to be a problem; see below.\]
-* A shortcut should have fully customized menus, including in
- particular the main menu. This means, in particular, that many of
- the normal browser's menus would simply not be present. \[This is
- somewhat difficult, but do-able in the near future.\]
-* A shortcut should optionally be able to share cookies, local
- storage, cache, etc. with their regular Chromium browser.
-
-### Technical decisions and implementation
-
-* We have decided to implement each shortcut as a "shim app", that is,
- a small application bundle which finds and dynamically loads the
- Chromium framework.
-* With this design, a shortcut truly is a first-class application,
- albeit one with a tiny binary, and minimal binary contact with
- Chromium.
-* Nearly all nontrivial functionality will be contained in the
- Chromium framework proper.
-* As such, we do not anticipate much of a need to update the shortcut
- application bundles; however, if necessary, this could be done by
- code in the Chromium framework.
-* The hard technical work for this has already been done.
-* The only nontrivial task for the shim app would be to locate
- Chromium. We plan to do this in several ways (in order of priority):
- (1) Whenever Chromium runs, it records its location in the defaults
- system; a shim app can look this up. (2) Look in various standard
- locations, such as /Applications, ~/Applications, etc. (3) Consult
- Launch Services or other system databases.
-* Note that if all the methods fail, the shim app can simply ask the
- user to run Chromium to re-record its location.
-* Q. When cookies, etc. aren't shared, where should the profile data
- be stored?
-
-\[*work in progress, more to come* -Trung\]
-
-### Implementation plan
-
-* Phase 1: Design/code the shim app and basic interface between the
- shim app and the framework. Put the shim app into the build system.
- Make the shim app display an appropriate (specifiable) name in the
- main menu. At completion, one should be able to manually create
- shortcuts which satisfy the essential requirements. \[started\]
-* Phase 2: Design/code the (normal) browser-side code to produce
- shortcuts (with appropriate URL, name, icon) to be saved in a
- user-specifiable location (or perhaps leverage drag-and-drop?). It
- should also have the appropriate behavior when a shortcut is produce
- from a "live" web page. At completion, shortcuts should be fully
- usable by the average user.
-* Phase 3: Fix up the main menu, etc., and generally tighten up any
- other behavior. At completion, shortcuts should be very polished and
- truly look like a first-class application.
-* Phase X: Make cookies, local storage, cache, etc. shareable, and
- make this an optional capability.
-
-\[*sorry for the mess, work in progress* -Trung\]
-
-Old stuff:
-
-### This is just a draft proposal at this time, to figure out options, and see what might apply to other platforms.
-
-### Background
-
-Gears provides an way to create desktop shortcuts to web sites
-([Desktop.createShortcut()](http://code.google.com/apis/gears/api_desktop.html)).
-Chromium expands on this to try and make a "custom" browser for the site. Our
-ultimate goal for the Mac implementation is to have the shortcut appear to the
-OS as a first-class application. Its UI consists of a browser displaying the
-website but with many of the browser features removed (ie-no bookmarks,
-navigation, etc.). Examples would be "applications" such as Gmail, Reader, etc.
-
-### Expectations
-
-The desired user experience is:
-
-* The shortcuts should appear to be Applications to the OS (Spotlight,
- Finder, etc.).
-* The shortcut should work in the Dock like any other application:
- click to launch/raise, indicates when running, provides a window
- list, and present in cmd-tab list for quick process switching.
-* The menu bar and window appearance are different from "normal"
- Chromium
- * App name is related to the website the shortcut is for (created
- by the user? or taken from the shortcut name?)
- * No bookmarks or navigation menus/items.
-
-The desired technical details are:
-
-* Share the HTML5 storage so any site/domain storage data is available
- in both the AppMode and w/in the main browser. ie, offline Gmail is
- in the same state regardless if the user is using a Gmail "app" or
- w/in Chromium.
-* Share the cache so common html/js/images don't have to be
- re-downloaded, cached by each AppMode the user has.
-* Make cookie sharing something that is optional or controlled on a
- per shortcut basis. This would allow some users to have the Gmail
- App share its auth cookie with Chromium, but others might chose not
- to so they could have a Gmail shortcut for one account, and use a
- different account w/in Chromium.
-
-### Possible Approaches
-
-#### Shim Apps to sub-load Chromium
-
-Make each AppMode shortcut a little Cocoa app bundle. The binary itself would be
-extremely small. When launched, it would find Chromium.app, load it as a bundle,
-and invoke an exported system to relay the shortcut info. The vended API from
-w/in Chromium.app would start up Cocoa, WebKit, etc. This would keep the "binary
-contact" between the shortcuts and Chromium as small as possible so they don't
-have to be updated w/ new versions of Chromium. The shortcut app would
-effectively be another instance of Chromium in "browser" mode, maintaining an
-independent set of renderers, plugin hosts, etc.
-
-#### Launcher Apps
-
-Make each AppMode shortcut a little app that simply launches the Chromium
-application (if not already running), sends over the shortcut info, and exits.
-
-#### Shortcut Document
-
-Rather than creating a separate application, create a new document type that the
-Finder recognizes as a Chromium document to store the site location. When the
-user double-clicks the a saved shortcut document, the Finder (through
-LaunchServices) automatically sends a message to Chromium, launching it first if
-it's not already running. Chromium responds to the open event by creating a new
-window with AppMode chrome and disabling the navigation menu items when that
-window is in the foreground. This window will co-exist in the same browser
-process as other non-AppMode windows, thus can share the profile and data
-stores.
-
-#### Make A Full-blown Copy
-
-Rather than trying to load and sub-load parts from another application bundle,
-have the shortcut be a full copy of the Chromium application.
-
-### Limitations / Issues
-
-#### None of these approaches is a obvious win, they all meet different parts of the expectations or have different things that would need to be resolved:
-
-<table>
-<tr>
-<td colspan=4><b>UI</b></td>
-</tr>
-<tr>
-<td>*Proposal*</td>
-<td>*Apps to Spotlight*</td>
-<td>*Work as app from Dock*</td>
-<td>*AppMode menubar and window*</td>
-</tr>
-<tr>
-<td>Shim Apps to sub-load Chromium</td>
-<td>✓</td>
-<td>✓</td>
-<td>✓</td>
-</tr>
-<tr>
-<td>Launcher Apps</td>
-<td>✓</td>
-</tr>
-<tr>
-<td>Shortcut Document</td>
-</tr>
-<tr>
-<td>Make a Full-blown Copy</td>
-<td>✓</td>
-<td>✓</td>
-<td>✓</td>
-</tr>
-</table>
-
-<table>
-<tr>
-<td colspan=4><b>Technical</b></td>
-</tr>
-<tr>
-<td>*Proposal*</td>
-<td>*Share HTML5 Storage*</td>
-<td>*Share Cache*</td>
-<td>*Cookie Control*</td>
-</tr>
-<tr>
-<td>Shim Apps to sub-load Chromium</td>
-<td>TBD - Would require the storage layers support multiple processes actively modifying the on disk storage</td>
-<td>TBD - Same requirement around multiple process support</td>
-<td>TBD - Private cookie store would be easy, opting to share has the same multiple process issue</td>
-</tr>
-<tr>
-<td>Launcher Apps</td>
-<td>✓</td>
-<td>✓</td>
-<td>TBD - Might be able to use a different profile for the window to have different cookies</td>
-</tr>
-<tr>
-<td>Shortcut Document</td>
-<td>✓</td>
-<td>✓</td>
-<td>TBD - Might be able to use a different profile for the window to have different cookies</td>
-</tr>
-<tr>
-<td>Make a Full-blown Copy</td>
-<td>TBD - Would require the storage layers support multiple processes actively modifying the on disk storage</td>
-<td>TBD - Same requirement around multiple process support</td>
-<td>TBD - Private cookie store would be easy, opting to share has the same multiple process issue</td>
-</tr>
-</table>
-
-### Special Notes
-
-Shim Apps to sub-load Chromium does require a long term contract around the
-interface used to find, load, and invoke the real browser. If we ever needed
-changes to the Cocoa info.plist or different arguments, we'd have to find ways
-to handle this without the AppMode stub being updated (as the running user might
-not have privledges to rewrite it).
-Make a Full-blown Copy has a major drawback; the inability to update the
-shortcut applications. Keystone/Omaha requires a one-to-one mapping from GUID to
-installed application, and self-generated GUIDs would receive no updates as they
-don't match the GUID on the server. So once a copy was made for a short cut,
-there wouldn't be a way to target it for updates (feature, security, etc).
-
-### Additional Notes from Trung
-
-**Hybrid solutions:** There are a number of possible hybrid solutions. For
-example, one could make a persistent Launcher App which, instead of quitting
-immediately after launching, persists and performs tasks such as "forwarding"
-Dock activations to the main browser process. One should also be able to switch
-out the main menu on the demand, and such an model would allow a better
-imitation of a full-fledged application. (One could also imagine other hybrids,
-e.g., a Launcher App which just opens an embedded Shortcut Document. This has
-certain *flexibility* advantages; see below.)
-
-**Launcher/Copy: Another possible hybrid is a Launcher App which simply
-launches, for each specific App Mode shortcut, a copy of Chromium with special
-settings/command-line arguments. This would avoid the major drawback of a true
-copy, yet provide most of the benefits. (It would still have the drawback of
-making sharing storage/cache/etc. difficult.) This is very similar to a Shim
-App, but with no binary contact. It would be lightweight on disk space
-requirements (though lack of cache sharing might make increase disk space
-usage); memory usage would hopefully be similar to a Shim App, in that perhaps
-text pages could be shared, and hopefully lighter than that of a Full-blown
-Copy.**
-
-**Flexibility and upgradeability:** Regardless of model, it is worth considering
-how App Mode capabilities may be modified/upgraded (possibly changing models) in
-the future. In general, Shim and Launcher Apps seem most flexible; upgrading a
-Shortcut Document might be troublesome. A possible upgrade model is as follows:
-Upon loading, the Shim/Launcher App locates the primary Chromium application
-bundle and checks if this bundle contains a more up-to-date Shim/Launcher App.
-If necessary, it can then update itself, and relaunch. (This assumes that the
-App Mode data is well-segregated inside the Shim/Launcher App's bundle.)
-
-**"Captivity":** A problem with a web app posing as a normal application is that
-web apps are typically not *captive*, in the sense that there's usually no clear
-delineation of where the application ends. For example, in a native mail client,
-clicking on a link will take one outside the mail program. Likewise, it either
-has calendar functionality built-in, or it doesn't. With a "Gmail App", things
-are not so clear. What should happen if one clicks on "Calendar"? If one has a
-separate "Calendar App" set up, perhaps one would like it to launch or switch to
-that. Perhaps one would view it as integral to the "Gmail App". Or perhaps one
-would prefer that it be opened in a regular browser window. (Worse, one might
-prefer different things for different links, even within the same "site",
-however sites are delineated. For example, one may want "Docs" to be a separate
-app, but keep "Calendar" in the same app.) With web apps, of course, there are
-also usually many external links. Probably one would usually want to open
-external links in a regular browser window, but it is not clear how to
-distinguish between the different cases (open in current app, open in different
-app, open in a regular browser window).
-
-Shortcut Documents, Launcher Apps, and variants skirt this problem by not truly
-distinguishing between different App Mode windows and the regular browser. The
-distinction made is very weak: an "application" is just a window in the regular
-browser with a few special properties. It is then very easy to open normal
-browser windows running with one's normal browsing profile. Depending on the
-approach, there may be no real distinction between an App Mode window running,
-e.g., Gmail from one running Calendar or Docs.
-
-The Shim App, etc. approaches which provide more full, separate applications
-suffer here. For example, if one is in Gmail and one clicks on a link to, say,
-Flickr, not only does one probably want Flickr to open in a normal browser
-window (unless one has a Flickr App set up!), but one probably also wants it to
-open using the profile associated with one's normal browser -- one doesn't
-typically want to maintain have separate Flickr logins between one's Gmail App
-and one's normal browser. (On the other hand, one might want distinct Gmail
-logins!)
-
-**Other considerations:** In addition to making the Dock icon, menus, etc. work,
-it would be good if an App Mode shortcut worked properly with Spaces. In
-particular, one can assign a particular space to each application (e.g., one
-space for the "Gmail App" windows and a different space for normal Chromium
-browser windows). The general lack of API for Spaces means that only Shim Apps,
-full-blown copies, and perhaps the Launcher/Copy hybrid could work properly with
-Spaces.
-
-### Questions from Trung
-
-1. The question of "captivity" is essentially the following: What
- should happen when one clicks on a link from within an App?
-2. Technical problem: When and how does OS X determine what application
- is being run? (To what extent can this be set at run time?)
-3. Technical: Is there any way of convincing Spaces that a given window
- really belongs to a different application? \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/Chrome Graphics Infrastructure.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/Chrome Graphics Infrastructure.png.sha1
deleted file mode 100644
index 479961ae5ca..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/Chrome Graphics Infrastructure.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-302db78bb6d34560280a6b18870f7b13b2a7509c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/index.md b/chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/index.md
deleted file mode 100644
index d0e47cb9c15..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura-desktop-window-manager/index.md
+++ /dev/null
@@ -1,252 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: aura-desktop-window-manager
-title: Aura (obsolete)
----
-
-*This document is still good for a high level overview, with contact
-information, but many technical details are now obsolete; see the main [Aura
-index](/developers/design-documents/aura) for more details.*
-
-### Project Goals
-
-The goal is to produce a new desktop window manager and shell environment with
-modern capabilities. The UI must offer rich visuals, large-scale animated
-transitions and effects that can be produced only with the assistance of
-hardware acceleration.
-
-Other constraints and goals:
-
-* Cross platform code, should be able to build and run on Windows (and
- maybe eventually other platforms), even if we don't have an initial
- product need for them.
-* Scalable performance characteristics depending on the target
- hardware capability.
-* Provide the foundation of a flexible windowing system and shell for
- Chrome and ChromeOS on a variety of form factors.
-
-Notable non-goals for the initial launch of this system include:
-
-* Multiple monitor support. (This was added later, early 2013)
-* Software rendering mode or any kind of remote desktop capability to
- the device.
-* NPAPI plugin support. This will never be required. Pepper plugins
- only will be supported.
-
-### UI Design
-
-*Owner: Nicholas Jitkoff (alcor@) (UX) and Kan Liu (kanliu@) (PM)*
-
-### Quick Chrome UI Implementation Backgrounder
-
-Chrome UI for Chrome on Windows and Chrome OS is built using the Views UI
-framework that lives in src/views. The contents of a window is constructed from
-a hierarchy of views. View subclasses allow for implementation of various
-controls and components, like buttons and toolbars. Traditionally Chrome has
-used a mix of hand-rolled controls for aspects of its user interface where a
-custom look is desired, such as the browser toolbar and tabstrip, and native
-controls provided by the host platform where a more conventional look is
-desired, such as in dialog boxes and menus. When run on Windows, the Win32 API
-provides for native controls in the form of HWNDs, and on ChromeOS, the Gtk
-toolkit is used to provide native controls.
-
-A view hierarchy is hosted within a Widget. A Widget is a cross-platform type,
-and relies on a NativeWidget implementation that is specific to each host
-environment to perform some duties. The NativeWidget implementation is actually
-the connection to the host environment. For example, on Windows a
-NativeWidgetWin wraps a HWND (via the WindowImpl class), receives Windows
-messages for event handling, painting, and other tasks. In the Gtk world, a
-NativeWidgetGtk wraps a GtkWidget and responds to signals. The NativeWidget is
-responsible for translating platform-specific notifications into cross platform
-views::Events and other types that the rest of Views code can respond to in a
-platform-independent fashion.
-
-The Chrome UI was originally written for Windows, and so despite the relatively
-platform-neutral nature of the View hierarchy and much of the views code,
-Win32-isms did creep in. The philosophy on the Chrome team has always been "let
-not the perfect be the enemy of the good," so pathways to shorter-term success
-have been emphasized. The Mac and Desktop-Linux ports of Chrome pursued a
-different strategy for UI, more aggressively using the native toolkits offered
-on those platforms (Cocoa and Gtk), so at the start of the Chrome OS project
-there was still some considerable Win32 influence in Views code. Many of those
-Win32-isms have been augmented by ifdef'ed Gtkisms.
-
-The reliance on platform widget systems has posed a problem though in that it
-prevents hardware acceleration of elements of the UI and arbitrary
-transformation of UI controls. The platform native frameworks are also peculiar
-in a number of ways, sharing constraints that are not relevant to desktop Chrome
-or Chrome OS. Before long a desire to eradicate our usage of them grew strong
-enough to begin work on doing so. An effort was spun up spanning several teams
-to start by removing Gtk usage in the Views frontend code. This has become one
-of the major sub-projects required for the Aura work described here.
-
-### Platform Native Control (aka Gtk/HWND) Elimination
-
-*Owner: Emmanuel Saint-Loubert-Bié (saintlou@)*
-
-Gtk/HWND use is pervasive. It is used everywhere from the NativeWidget
-implementations that host the View hierarchy down to individual dialog boxes.
-Here are examples of work that has been done to eliminate their use:
-
-* Converted the Options UI to WebUI. The Options dialog boxes were
- massive platform-native constructs that used many Gtk widgets.
- Replacing the whole thing with a WebUI implementation has meant many
- fewer controls.
-* Converted other dialogs to WebUI. In general, if something shows in
- a tab or in something resembling what could be a window.open() popup
- (top level window), it is a candidate for conversion to WebUI. While
- Options was the largest conglomeration of native controls, there is
- a long tail of other smaller dialogs that contribute to our reliance
- on Gtk.
-* Written Views-based implementations of some native controls, like
- Textfield. Some places do not suit conversion to WebUI - e.g. the
- browser frame window itself. In these cases we have to write new
- Views-only (often referred to as "pure views" in code) versions of
- controls like the Textfield.
-* Written Aura-based implementations of the RenderWidgetHostView.
- Traditionally the RenderWidgetHostView has been a HWND or GtkWidget,
- and is used as a parent for windowed NPAPI plugins. Since we are
- only supporting Pepper plugins going forward, we did not need a
- native window to parent NPAPI plugins and a synthetic implementation
- could be done.
-
-While many of the major areas have been successfully tackled, this area remains
-a work in progress.
-
-### Hardware Accelerated Rendering/Compositor
-
-*Owner: Antoine Labour (piman@)*
-
-At the onset of this project Chrome was using two compositors - the compositor
-used by WebKit to hardware accelerate CSS transitions, and a "Browser
-Compositor" run in the UI thread of the browser process, used to implement Views
-transformations like whole-screen rotations.
-
-For a number of reasons, it is desirable to unify our compositing efforts here
-and provide a single compositor. The primary reason is achieving acceptable
-performance on target hardware. It is necessary to have a single compositor and
-draw-pass instead of two as we have now. We would also like to unify the layer
-trees too at some point, although this was deemed less critical.
-
-The Browser Compositor is implemented as implementations of a ui::Compositor
-interface, such as a GL one and a D3D one. Antoine has been proceeding by
-writing a new implementation that uses the WebKit-CC compositor. This way the UI
-can continue to use the ui::Layer API as its render target. As mentioned, we may
-eventually consolidate the API between UI and WebKit.
-
-The compositor is a distinct component in Chrome code, consuming only gfx types,
-WebKit (obviously) and other low level components. In the fullness of time the
-WebKit compositor will be extracted from WebKit further so that we do not need
-to drag all of WebKit into Aura and Views.
-
-[<img alt="image"
-src="/developers/design-documents/aura-desktop-window-manager/Chrome%20Graphics%20Infrastructure.png">](/developers/design-documents/aura-desktop-window-manager/Chrome%20Graphics%20Infrastructure.png)
-
-### Aura WM and Shell
-
-Aura
-
-*Owner: Ben Goodger (beng@) and Scott Violet (sky@)*
-
-To allow us to perform large scale window transitions, we need to back Windows
-by compositor layers so that we can animate them without redrawing. This led to
-the development of a simple window type that supported an API compatible with
-(i.e. implementing the other side of the contract expected by) the Views
-NativeWidget type. We had initially tried to do this with a View-backed
-NativeWidget implementation (called NativeWidgetViews) called the views-desktop.
-However we still needed a platform-native widget
-(NativeWidgetWin/NativeWidgetGtk) to host the hierarchy. A big challenge was
-that pervasive in Chrome code is the concept of a gfx::NativeView/NativeWindow,
-which on Chrome OS and Windows was expected to resolve to a GtkWidget or an
-HWND. This assumption is also baked into NativeWidgetWin/NativeWidgetGtk and
-thus we were presented with many challenges parenting windows properly, since we
-could only ever offer the top level (desktop/screen-level window) as a parent to
-code that expected a NativeView, rather than a more localized (and probably more
-correct) window, because a views::View couldn't be a NativeView.
-
-This, combined with some lingering issues with large View hierarchies led to the
-development of the simple aura::Window type. The aura::Window is what we
-consider a NativeView/NativeWindow (it typedefs thus). In the Views system, we
-have implemented a new NativeWidget targeting this type (NativeWidgetAura) that
-returns the bound aura::Window from its GetNativeView() method.
-
-The aura::Window wraps a Compositor Layer. It also has a delegate which responds
-to events and paints to its layer.
-
-aura::Windows are similar to Views, only simpler, they are a hierarchy that live
-within an aura::Desktop. The aura::Desktop is bound to an aura::DesktopHost,
-which is where the real platform-specific code lives. There is a DesktopHost
-that wraps an HWND and one that wraps an X window. There is no Gtk in this
-world. You can think of this as us having pushed the platform specific code one
-layer further away from Views, out to the screen edge (as far as ChromeOS is
-concerned). All windows within are synthetic. The DesktopHost window receives
-the low level platform events, cracks them to aura::Events, targets them to aura
-Windows, which pass them along to their delegates. On the Views side,
-NativeWidgetAura is a aura::Window delegate, receives the aura::Event (which it
-considers a platform native event), and constructs relevant views::Event types
-to propagate into the embedded View hierarchy.
-
-Aura is responsible for the Window hierarchy, event cracking and propagation,
-and other basic window functionality (like focus, activation, etc).
-
-Note that despite the fact that Aura is used by Views, it does not actually use
-Views itself. It is at a lower level of the onion. Think of it like a raw Win32
-HWND or GtkWidget.
-
-#### The Aura Shell and Chrome Integration
-
-*Owner: Zelidrag Hornung (zelidrag@) and David Moore (davemoore@)*
-
-A desktop environment is much more than just basic window types. We needed a
-playground to implement the higher level elements of the window manager, such as
-constraint-based moving and sizing, shell features such as the persistent
-launcher at the bottom of the screen, status areas, etc. Rather than build this
-directly into Chrome, which is huge and takes forever to link, we decided to
-build this as a separate component. Because it consists of UI components like
-the launcher and custom window frame Views, it would need to depend not just on
-Aura but also Views.
-
-The product is a shell library (called aura_shell) that (eventually) we can use
-in Chrome when built with We also have a test runner, called aura_shell_exe.
-This instantiates the shell, and launches a few sample/example windows that
-allow us to build out and test functionality. Within the shell, models for
-components that would normally be populated with user data (such as apps in the
-launcher) come from mocked models. When instantiated in Chrome, the real data is
-provided.
-
-The Chrome OS UI team has traditionally worked on many of these features and
-people from that team will contribute heavily to this effort.
-
-### Implementation Strategy
-
-Since this is a complex project, there are several sub-efforts. The breakdown
-above covers the main areas: Compositor, Gtk-removal, Aura and the Aura
-Shell/Chrome Integration.
-
-There is much work to be done, so we're pursuing a lot of it in parallel. While
-the two-compositor system in place at the start of the project isn't something
-we can put into production, it has let us start building out the Windowing
-system while the single compositor work proceeds. Likewise, getting a basic
-shell up and running with embedded Views widgets allows shell components like
-the launcher to be started while other elements of the window system are being
-designed and constructed. Similarly, Web-UI based components like the App List
-can be built in Chrome behind a flag independent of any of the rest of this
-work.
-
-Since we're offering a new (native) widget system, our approach to implementing
-this new UI has been to consider it a new target platform for Chrome, and our
-work can be considered another "port".
-
-You can build the code by setting use_aura=1 in your GYP_DEFINES. This should
-work from Linux or Windows. This switch should define everything else necessary
-to make the components above work.
-
-### Major Revision History
-
-*11/11/2011 - Ben Goodger and James Cook - revisions*
-
-*10/5/2011 - Ben Goodger - initial revision* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-05-23 5-48-07 PM.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-05-23 5-48-07 PM.png.sha1
deleted file mode 100644
index 253a9be7166..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-05-23 5-48-07 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2d0bb8ae877a27274968d085d51ce43773a1b060 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-20 6_31_36 PM.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-20 6_31_36 PM.png.sha1
deleted file mode 100644
index fa96dc9af91..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-20 6_31_36 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7be59890635f3217369ec490357458d91b0fa92e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-26 3_50_42 PM.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-26 3_50_42 PM.png.sha1
deleted file mode 100644
index 8c7c0b579c3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/Screenshot 2012-06-26 3_50_42 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8ce6463bef4a83e7e70b33ce27afa62bc0ef55ad \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/col.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/col.png.sha1
deleted file mode 100644
index 0d57aba5648..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/col.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6692f73d0a856a31fa4b93214cd1011198386084 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/index.md b/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/index.md
deleted file mode 100644
index 588c6fe2d00..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/ash-color-chooser/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: ash-color-chooser
-title: Ash Color Chooser
----
-
-**## Overview**
-
-**This document describes how to achieve &lt;input type=”color”&gt; UI in ChromeOS/Ash.**
-
-**# Motivation**
-
-**&lt;input type=”color”&gt; is a new input type introduced in HTML5. It enables users to pick a color and returns a value of #hhhhhh format. WebKit forms team has decided to use platform’s default color picker rather than implementing a new one. It means that we need to implement our own color picker view for ChromeOS/Ash.**
-
-**# First Goal**
-
-* **Implement simple color picker dialog w[orking with &lt;input
- type=”color&gt;](https://docs.google.com/a/google.com/document/d/1YIKO-5_m0ZpkvtE24QKKty1ZZk7aYVk-Bw9Xq8zpMEg/edit?hl=en_US).**
-* **Implement with views, not HTML.**
-* **Features**
- * **Behave as Modal Dialog (see
- [doc](https://docs.google.com/a/google.com/document/d/1YIKO-5_m0ZpkvtE24QKKty1ZZk7aYVk-Bw9Xq8zpMEg/edit?hl=en_US))**
- * **Appears in the topmost z-order**
- * **Pick up a color from HSV model**
- * **Has both a Hue bar and a Saturation-Value plane (see below
- mock).**
- * **Pick up a color from text**
- * **A[llow
- copy/paste](https://docs.google.com/a/google.com/document/d/1YIKO-5_m0ZpkvtE24QKKty1ZZk7aYVk-Bw9Xq8zpMEg/edit?hl=en_US)**
- * **Specify the color by …**
- * **rgb(xx ,yy, zz)**
- * **#RRGGBB**
- * **CSS well-known color name**
- * **… anything else?**
- * **Work on Chrome OS**
-
-* **first mock**
-
- **![](/developers/design-documents/aura/ash-color-chooser/col.png)**
-
- * **Confirmed that the upper box isn’t necessary, since the color
- will be shown in the page.**
-* **Current screenshot:**
-
- **![](/developers/design-documents/aura/ash-color-chooser/Screenshot%202012-06-26%203_50_42%20PM.png)**
-
-**# Next plans (not confirmed yet)**
-
-* **Global Color Picker: Picking a color from any point on the
- desktop.**
- * **Even from other tab, window or desktop.**
-* **“Favorite Color” feature**
- * **Pick up the color easily from each user’s favorite color.**
-* **Works on Windows and Chrome OS**
- * **Currently, Windows has native OS Color PIcker Dialog. This new
- Color Picker will replace it.**
-
-**# Not Goal**
-
-* **Alpha value (transparency) support**
- * **HTML5 spec has not supported alpha value.**
-
-**# References**
-
-**Input type=color spec: <http://www.w3.org/TR/html-markup/input.color.html>**
diff --git a/chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/ChromeAshViewsAuradependencies.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/ChromeAshViewsAuradependencies.png.sha1
deleted file mode 100644
index 2155c96fdfb..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/ChromeAshViewsAuradependencies.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c2d066bc37c02384df257e07c97c845b63e6df1a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/index.md b/chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/index.md
deleted file mode 100644
index 88641f08ec4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/aura-and-shell-dependencies/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: aura-and-shell-dependencies
-title: Aura and Shell dependencies
----
-
-The diagram below shows the dependencies of Chrome, Ash (Aura shell),
-views-based widgets, and the Aura windowing subsystem. Note that in many but not
-all cases there are delegate interfaces each module can use to query the module
-above.
-
-[<img alt="image"
-src="/developers/design-documents/aura/aura-and-shell-dependencies/ChromeAshViewsAuradependencies.png">](/developers/design-documents/aura/aura-and-shell-dependencies/ChromeAshViewsAuradependencies.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.graffle.sha1
deleted file mode 100644
index 08279afb874..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1a804f17f11d3d342016f255e6cb2509c6d8a713 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.png.sha1
deleted file mode 100644
index 5321d4fc1ba..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/Aura.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-653905931d224df26ed5cad3a0467f6c23af6854 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.graffle.sha1
deleted file mode 100644
index ed909fe0c76..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-520bbaf3cccf550756530699ad550d958d732c7a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.png.sha1
deleted file mode 100644
index 593e03b484f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/EventFlow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cb393a9f3f6ec747fe8480a167415504ba471f7c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/index.md b/chromium/docs/website/site/developers/design-documents/aura/aura-overview/index.md
deleted file mode 100644
index 802b2268601..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/aura-overview/index.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: aura-overview
-title: Aura Overview
----
-
-[<img alt="image"
-src="/developers/design-documents/aura/aura-overview/Aura.png">](/developers/design-documents/aura/aura-overview/Aura.png)
-
-From the perspective of the user, Aura provides Window and Event types, as well
-as a set of interfaces to customize their behavior.
-
-The root of a Window hierarchy is the RootWindow. This type is responsible for
-event dispatch.
-
-An Aura window hierarchy is embedded within a native window provided by the
-underlying platform (XWindow, HWND). This native window is encapsulated in a
-RootWindowHost implementation for that specific platform. This host receives
-native events from the underlying system, cracks them into aura::Event
-subclasses and sends them to the RootWindow for dispatch.
-
-In many ways the Aura architecture mimics that of Views, though it is a little
-simpler.
-
-### Event Flow
-
-[<img alt="image"
-src="/developers/design-documents/aura/aura-overview/EventFlow.png">](/developers/design-documents/aura/aura-overview/EventFlow.png)
-
-This diagram shows the flow of events through each stage of the Aura system.
-
-1. The RootWindowHost receives a base::NativeEvent (MSG/XEvent\*) from
- the underlying platform.
-2. The RootWindowHost cracks this message to an aura::Event\* type and
- forwards it to the RootWindow for further processing and dispatch.
-3. Depending on the event type, a target window for event dispatch is
- determined for the event. See notes on dispatch below.
-4. Every registered aura::EventFilter\* from the target window up to
- and including the RootWindow is given an opportunity to pre-handle
- the event. An EventFilter implementation will return true if it
- wants to consume the event and stop further processing. EventFilter
- is a powerful API to intercept events before the target Window gets
- a chance to handle them. It can be used by a client to implement
- features like window movement, modality, and so on.
-5. Finally if no EventFilter intercepts the event, it is passed
- directly to the target window's delegate. The Window itself never
- sees the event directly, since window customization in Aura is done
- entirely through delegate interfaces like EventFilter,
- WindowDelegate, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.graffle.sha1
deleted file mode 100644
index 6aa083f2238..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-76008f142dee89f345d3b1d2967ef7b5ddfa3eb1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.png.sha1
deleted file mode 100644
index d17bf0c3629..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/client-api/ClientAPI.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0979469df16dd3f499f1bc46f03fcd766066bd84 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/client-api/index.md b/chromium/docs/website/site/developers/design-documents/aura/client-api/index.md
deleted file mode 100644
index e40eb48d333..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/client-api/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: client-api
-title: Client API
----
-
-The Aura Client API is an API Aura uses to communicate with the client
-application using the Aura system. Since Aura is very simple, providing just
-basic window and event types, there are many details it cannot know about
-directly. It delegates some functionality to its client (such as window
-stacking) and also provides the client API as a conduit for users of Aura to
-communicate with the embedding environment.
-
-For example, Aura does not implement tooltips directly, these are a feature
-implemented by an client application. The Client API has knowledge of tooltips
-however so that a system like Views (which depends on Aura) can specify tooltip
-parameters. The client application can interpret this data and show the relevant
-UI.
-
-The Aura Window class supports opaque properties, and a list of well known keys
-is provided as part of the Client API.
-
-In the ChromeOS Desktop Window Manager, the Aura Client is a component known as
-the "Aura Shell" or "Ash":
-
-[<img alt="image"
-src="/developers/design-documents/aura/client-api/ClientAPI.png">](/developers/design-documents/aura/client-api/ClientAPI.png)
-
-A breakdown of responsibility between Aura and the Aura Shell (as implemented
-for ChromeOS):
-
-<table>
-<tr>
-
-<td>### Aura</td>
-
-1. <td>Basic window type and hierarchy </td>
-2. <td>Event dispatch </td>
-3. <td>Compositor integration </td>
-4. <td>Client API </td>
-
-<td>### Aura Shell</td>
-
-1. <td>"Window Manager" features like: </td>
- 1. <td>Window dragging and resizing </td>
- 2. <td>Transient and modal windows </td>
- 3. <td>Maximize/Restore/Full Screen </td>
- 4. <td>Tooltips </td>
- 5. <td>Drag and drop </td>
- 6. <td>Window embellishments like shadows </td>
- 7. <td>Window stacking </td>
- 8. <td>Advanced layout heuristics </td>
-2. <td>Shell features like: </td>
- 1. <td>Application launcher(s) </td>
- 2. <td>Customizable desktop background </td>
- 3. <td>Global keyboard shortcuts </td>
- 4. <td>Login/lock screens, screen savers, etc. </td>
-
-</tr>
-</table>
-The Aura Shell implements the Aura Client API, and uses Aura and Views to
-achieve all of this.
-
-In the diagram above, I show a second Aura Client API implementation. This is
-what we will end up with when we transition Desktop Chrome on Windows to use the
-Aura system, sometime in 2012. This will allow us to hardware accelerate our UI.
-
-With this in mind, it is important to keep the Aura layer of the framework clean
-and simple, since much of the ChromeOS DWM functionality and feature set is not
-relevant to desktop Chrome, just the basic windowing primitives. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/event-handling/arch4.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/event-handling/arch4.png.sha1
deleted file mode 100644
index bb26b44da14..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/event-handling/arch4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-59842f657529863eee4fcee278ce64c130e90d7f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/event-handling/index.md b/chromium/docs/website/site/developers/design-documents/aura/event-handling/index.md
deleted file mode 100644
index 7c150301917..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/event-handling/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: event-handling
-title: Event Handling
----
-
-A diagram of the architecture of this system:
-
-[<img alt="image"
-src="/developers/design-documents/aura/event-handling/arch4.png">](/developers/design-documents/aura/event-handling/arch4.png)
-
-HWNDMessageHandler owns the WNDPROC, and is code that is shared with the
-non-Aura windows build. This code is in production and "should work."
-
-On this diagram, the new classes are DesktopRootWindowHostWin(\*\*) and
-DesktopNativeWidgetAura. DesktopNativeWidgetAura is a new
-views::NativeWidgetPrivate implementation that wraps an aura::Window\* hosted in
-a special RootWindow/Host, which is implemented by
-DesktopRootWindowHost\[Win|Linux\].
-
-DesktopNativeWidgetAura is cross platform code, DesktopRootWindowHostWin|Linux
-is platform-specific.
-
-Basically there are a bunch of functions on these two new classes that need to
-be connected together.
-
-I've made a list of these functions here:
-
-<https://docs.google.com/a/google.com/spreadsheet/ccc?key=0AsMZXOiSimBbdGhhTU1xQWo2QUZGRTExdWhBN2toenc>
-
-.. along with some notes I quickly made about what I thought would be a
-resolution for that method.
-
-A couple of notes about event handling:
-
-* Events from the system progress through the diagram above left to
- right, i.e. received at the HWND/XWindow and are processed, maybe
- eventually making it to the Widget (and hence the View hierarchy) on
- the right.
-* Input events in aura must be dispatched by the RootWindow's
- dispatcher for correct behavior, so rather than sending them
- directly from the DesktopRootWindowHostWin to the
- DesktopNativeWidgetAura, we send them into the DRWHW's RootWindow.
- They'll wind up being received by the DNWA's aura::Window via its
- WindowDelegate.
-* Other types of events can perhaps be sent directly from the DRWHW to
- the DNWA.
-
-* On the other side, the NativeWidgetPrivate interface provides the
- API that views::Widget expects the native widget to perform, and
- this direction goes right-to-left on the diagram above. The typical
- flow here is through DNWA (which implements NWP) and through a
- DesktopRootWindowHost interface (we can add new methods to this as
- needed) which DRWHWin|Linux implements.
-
-* Sometimes there is a conflict on a method name between one on
- aura::RootWindowHost, which DRWHW|L also implements. In this case
- you can manual RTTI the DRWH to RWH.
-
-* Some methods in DRWHW are never sent back to the DNWA, e.g. those
- that are windows-specific and are for example completely implemented
- by NativeWidgetWin. I tend to look at NativeWidgetWin for
- inspiration when figuring out this kind of thing. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/focus-and-activation/index.md b/chromium/docs/website/site/developers/design-documents/aura/focus-and-activation/index.md
deleted file mode 100644
index 78ff4766864..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/focus-and-activation/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: focus-and-activation
-title: Focus and Activation
----
-
-Focus and Activation are closely related.
-
-### Definitions
-
-Focused window - this is the window that receives keyboard input. The focused
-window is always or is always contained by the Active window.
-
-Active window - this is the window that is rendered as key - i.e. the one that
-contains the focused element. Different platforms will render this differently
-and may show additional affordances e.g. a different treatment in the window
-switcher.
-
-### Notes
-
-A "top level" window is a window that has no parent other than window manager
-constructs. Think of a Chrome window.
-
-An "activatable" window is a top level window that can be activated. Not all top
-level windows can be activated at any given time. For instance in Ash, if the
-screen is locked calling GetActivatableWindow() for a window behind the lock
-screen may return a window in front of the lock screen, whereas
-GetTopLevelWindow() will return the non-activatable toplevel behind the lock
-screen. For this reason GetActivatableWindow is a method most useful to the
-focus/activation implementation, and GetTopLevelWindow is the method most useful
-to general application code.
-
-In Aura, the CoreWM library provided by Views handles focus and activation
-changes in the class FocusController. The FocusController implements two
-interfaces - aura::client::FocusClient and aura::client::ActivationClient. Every
-RootWindow must have an associated Focus/ActivationClient implementation
-associated with it, though several RootWindows can share the same
-implementation. For Desktop-Aura, each top level DesktopNativeWidgetAura creates
-a separate FocusController for the associated RootWindow. For Ash, there is a
-single FocusController shared by all RootWindows managed by the
-DisplayController.
-
-The FocusController tracks the current active and focused windows, and sends
-notifications when either of these change to registered implementations of
-aura::client::FocusChangeObserver and aura::client::ActivationChangeObserver.
-
-Views also tracks focus, for views::View subclasses within a views::Widget.
-Think of it this way. In the Aura world, an aura::Window can have focus, and can
-have an embedded View hierarchy via NativeWidgetAura/Widget. Within that focused
-aura::Window there can be an individual View that has focus, e.g. the omnibox
-textfield vs. a button etc. Each toplevel views::Widget has a
-views::FocusManager which handles View focus. It also handles things like focus
-traversal. Focus traversal is what happens when you press Tab. The traversal
-code figures out what View to focus next when you press Tab or Shift+Tab.
-
-When a views::Widget is deactivated, its FocusManager stores the focused view in
-ViewStorage for restoration later. The history behind this is somewhat vestigial
-but the storage/restoration step is still necessary. When the Widget is later
-reactivated, the last focused view is refocused. This is true in both non-Aura
-Win32 Views and in Aura Views.
-
-As far as what can be focused or activated in Aura, FocusController delegates to
-an implementation of the FocusRules interface to determine what can be focused
-or activated. There are different implementations for Ash (AshFocusRules) and
-Desktop-Aura (DesktopFocusRules). These rules enforce specifics like not
-activating windows behind the lock screen, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/gesture-recognizer-tests/index.md b/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/gesture-recognizer-tests/index.md
deleted file mode 100644
index d49cf95c4e7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/gesture-recognizer-tests/index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-- - /developers/design-documents/aura/gesture-recognizer
- - Gesture Recognizer
-page_name: gesture-recognizer-tests
-title: Gesture Recognizer Tests
----
-
-## Notation:
-
-* Green text
- * The name of a test which focuses on the preceding scenario.
-* None
- * No test exists where the focus is the preceding scenario.
- * There may be other tests which exercise this scenario, but
- ideally there would be a test in which this is the primary
- focus.
-
-## Gesture Events:
-
-* Tap Down
- * Press
- * GestureSequenceTest.TapDown
-* Tap
- * Press, Wait, Release
- * GestureSequenceTest.Tap
-* Double Tap
- * Press, Wait, Release, Press, Wait, Release
- * GestureSequenceTest.DoubleTap
-* Long Press
- * Press, Wait
- * GestureSequenceTest.LongPress
-* Three Fingered Swipe
- * Press 1, Press 2, Press 3, Swipe
- * GestureSequenceTest.ThreeFingeredSwipeLeft
- * GestureSequenceTest.ThreeFingeredSwipeRight
- * GestureSequenceTest.ThreeFingeredSwipeUp
- * GestureSequenceTest.ThreeFingeredSwipeDown
- * Press 1, Move 1, Press 2, Move 2, Press 3, Swipe
- * None
-* Scroll
- * Begin, Update
- * Press, Move
- * GestureSequenceTest.NonRailScroll
- * GestureSequenceTest.HorizontalRailScroll
- * GestureSequenceTest.VerticalRailScroll
- * Press 1, Press 2, Move 1, Move 2
- * GestureSequenceTest.PinchScroll
- * End
- * Press, Move, Release
- * GestureSequenceTest.NonRailFling
- * GestureSequenceTest.HorizontalRailFling
- * GestureSequenceTest.VerticalRailFling
-* Pinch
- * Begin, Update:
- * Press 1, Press 2
- * GestureSequenceTest.Pinch
- * GestureSequenceTest.PinchFromTap
- * Press 1, Move 1, Press 2
- * GestureSequenceTest.PinchFromScroll
- * Press 1, Press 2, Release 1, Press 1
- * GestureSequenceTest.PinchFromScrollFromPinch
- * End
-
-## Aborting Gesture Events:
-
-* Tap Down
- * Can’t be aborted
-* Tap
- * Press, Cancel :
- * GestureSequenceTest.TapCancel
- * Press, Move, Release:
- * None
- * Press, PreventDefault’ed release
- * GestureRecognizerTest.NoTapWithPreventDefaultedRelease
-* Double Tap
- * Press, Release, Press different place, Release
- * GestureSequenceTest.OnlyDoubleTapIfClose
- * Press, Release, Press, Move, Release
- * None
-* Long Press
- * Press, Release, Wait :
- * None
- * Press, Move, Wait :
- * GestureSequenceTest.LongPressCancelledByScroll
- * Press 1, Press 2, Wait
- * GestureSequenceTest.LongPressCancelledByPinch
-* Three Fingered Swipe
- * Press 1, Press 2, Press 3, Swipe Diagonally
- * GestureSequenceTest.ThreeFingeredSwipeDiagonal
- * Press 1, Press 2, Press 3, Swipe in opposite directions
- * GestureSequenceTest.ThreeFingeredSwipeSpread
-* Scroll
- * Begin, Update
- * Can’t be aborted
- * End
- * Can’t be aborted
-* Pinch
- * Begin, Update
- * Can’t be aborted
- * End
- * Can’t be aborted
-
-## Miscellaneous:
-
-* Tap Followed by Scroll:
- * GestureSequenceTest.TapFollowedByScroll
-* Release without Press:
- * GestureSequenceTest.IgnoreDisconnectedEvents
-* Unprocessed gesture events generate synthetic mouse events:
- * GestureRecognizerTest.GestureTapSyntheticMouse
-* Queueing of events:
- * GestureRecognizerTest.AsynchronousGestureRecognition
-
-## Targeting:
-
-1. **If a touch is already locked to a target, keep it.**
- * **GestureRecognizerTest.GestureEventTouchLockSelectsCorrectWindow**
-2. **If a window is capturing touches, target that window.**
- * **WindowTest.TouchCaptureTests**
- * **WindowTest.TouchCaptureCancelsOtherTouches**
- * **WindowTest.TouchCaptureDoesntCancelCapturedTouches**
-3. **If it's outside the root window, target the root window.**
- * **SystemGestureEventFilterTest.TapOutsideRootWindow**
- * **GestureRecognizerTest.GestureEventOutsideRootWindowTap**
-4. **If it's near another touch, use the other touch's target.**
- * **GestureRecognizerTest.GestureEventTouchLockSelectsCorrectWindow**
-5. **Otherwise, use whichever window the touch is above.**
- * **None** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/index.md b/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/index.md
deleted file mode 100644
index bef766bb63d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/index.md
+++ /dev/null
@@ -1,191 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: gesture-recognizer
-title: Gesture Recognizer
----
-
-# Gesture Recognizer Overview
-
-This document describes the process by which Touch Events received by a
-WindowEventDispatcher are transformed into Gesture Events.
-
-[TOC]
-
-## Touch Events
-
-* Press
-* Move
-* Release
-* Cancel: fired on preventDefault'ed release, or when we need to
- truncate a touch stream (i.e. when something else takes window
- capture)
-
-## Gesture Events
-
-Gesture Events contain type specific data in their GestureEventDetails object.
-See
-[here](https://docs.google.com/document/d/1mQFx99xz5jVUHQk2jZTjHPgMjRQd4EUDfdLG0XKOlWI/edit)
-for a summary of the typical event sequences.
-
-* Tap Down
- * Fired when the first finger is pressed.
-* Show Press
- * Fired on a delay after a tap down if no movement has occurred,
- or directly before a tap if the finger is released before the
- delay is finished.
- * Triggers the active state.
-* Tap
- * Fired after a press followed by a release, within the tap
- timeout window.
- * Has a "tap_count" field, indicating whether or not this is a
- single, double or triple tap.
-* Tap Cancel
- * Eventually fired after every Tap Down which doesn't result in a
- tap.
-* Double Tap
- * Only fired on Android, where it is used for double tap zooming.
-* Tap Unconfirmed
- * Only fired on Android.
- * Occurs whenever a tap would occur on Aura.
- * On Android, tap is fired after a delay, to ensure the current
- gesture isn't a double tap.
-* Long Press
- * Fired on a delay after a tap down, if no movement has occurred.
-* Swipe
- * Some number of fingers were pressed, and then at least one
- finger was released while all fingers were moving in the same
- direction.
- * Contains the direction the fingers were moving in.
-* Scroll Begin
- * Contains the offset from the tap down, to hint at the direct the
- scroll is likely to be in.
-* Scroll Update
- * Contains the scroll delta.
-* Scroll End
- * Fired when a finger is lifted during scroll, without enough
- velocity to cause a fling.
-* Fling Start
- * Fired when a finger is lifted during scroll, with enough
- velocity to cause a fling.
-* Fling Cancel
- * If we're in a fling, stop it. This is synthesized and dispatched
- immediately before each tap down event.
-* Pinch Begin
-* Pinch Update
- * Associated scale.
-* Pinch End
-* Two Finger Tap
- * Two fingers were pressed, then one was released, without much
- finger movement.
-* Begin
- * A finger was pressed. You can figure out how many fingers are
- down now using event.details.touch_points().
-* End
- * A finger was released. You can figure out how many fingers are
- down now using event.details.touch_points().
-
-## Terminology
-
-* Touch Lock:
- * The association between an existing touch and its target.
-* Touch Capture:
- * If a window is capturing touches, new touches will be targetted
- at the capturing window.
-* Touch Id:
- * The global id given to each touch. Contiguous starting from 0
- for each display.
-* Rail Scroll:
- * A scroll which is locked to only move vertically or
- horizontally.
-* Fling:
- * When scrolling, if the user releases their fingers, but the
- scroll should continue, this is known as a fling.
-
-# Finding a Target
-
-## Possible ways of establishing a target
-
-1. If a touch is already locked to a target, keep it.
-2. If a window is capturing touches, target that window.
-3. If it's outside the root window, target the root window.
-4. If it's near another touch, use the other touch's target.
-5. Otherwise, use whichever window the touch is above.
-
-In the following images, a filled in circle represents a touch down, and the
-outline of a circle represents a position the touch has moved to. The dotted
-green line indicates the window that a touch is targeted at. The rounded
-rectangle represents a window, and the outer rectangle represents the root
-window.
-
-<table>
-<tr>
-<td>1. If a touch is already locked to a target, keep it. <img alt="image" src="https://lh6.googleusercontent.com/myjxUQXxaThmV7EUoCfCXkyg0YVCFgdlQKO3gpRdynZ4lSMyJGzLnPdPRDe2qBa_qV6gkKxKn_Ghmv43nVY6SUJr8eb_IOevWjtNvBrCn4OGpm7yo7E" height=214px; width=223px;></td>
-<td>2. If a window is capturing touches, target that window. </td>
-<td><img alt="image" src="https://lh6.googleusercontent.com/JyqtKa63Qh9yRhlmok8LDLeA2eiKK-CsrKROfmS4SsT7Wign6pkQqMiz0VnPBco5tn3MbGLhe4U--avCCeNB-jSGVUU4YTAJSXkg-ay1KLPrJn6mxwo" height=214px; width=223px;></td>
-</tr>
-<tr>
-<td>3. If it's outside the root window, target the root window.</td>
-<td><img alt="image" src="https://lh5.googleusercontent.com/YwO3KZjo5CLMQ-_XNOplU4a9YQtIMi1pLqtOZAcX6RLEnGtJ5D4M0Vxjj83RxPAwd8Hp0-_VCc6DKE9melGnYs1kybpxOB9Xdo-zwCV9-XK_MT-hhpQ" height=214px; width=265px;> </td>
-<td>4. If it's near another touch, use the other touch's target. </td>
-<td><img alt="image" src="https://lh3.googleusercontent.com/erpsfYRchXsW5q3Al2rSqngixvmYX_q4hjMaSd96Ak1OCQ89jXE6jsdJnF1cFdgNhIH8tIKxYt60o10mqyjeYZ4nx3trlaWhqRkkK61Y61JNmNg6O6I" height=214px; width=222px;></td>
-</tr>
-<tr>
-<td>5. Otherwise, use whichever window the touch is above. <img alt="image" src="https://lh4.googleusercontent.com/rc5RUdxi_QKrsAYU_DF1v9sVmZyAbYzFQDTUrCsiKVshb4dB7338BwT-bPDpUH1btF5UrrzlzkfgCA8I7qXDes0njRZARTW1qC-_fM9vP5R6E7F1LrQ" height=214px; width=223px;></td>
-</tr>
-</table>
-
-## Complications
-
-### preventDefault’ed Release
-
-When Javascript calls preventDefault on a touch release, we need to make sure
-that no gesture events are created, but we also need to ensure that the
-GestureRecognizer knows that the associated finger isn’t down any more. To
-accomplish this, we turn the touch release into a touch cancel event.
-
-### Touch Capture
-
-When a touch capture occurs, all touches on windows other than the window
-gaining capture need to be ignored until they are released. To do this, we fire
-a touch cancel for each of these touches.
-
-# Generating Gesture Events
-
-Each touch-id has an associated window (See
-GestureRecognizerImpl::touch_id_target_), and each window has an associated
-GestureProviderAura.
-
-GestureProviderAura contains a FilteredGestureProvider, which is responsible for
-performing gesture detection on both Android and Aura.
-
-# Where To Start
-
-[GestureRecognizerImpl](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gestures/gesture_recognizer_impl.h&sq=package:chromium)
-
-* Responsible for mapping from touches to windows, and hosts the
- [GestureProviderAura](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gestures/gesture_provider_aura.h&q=GestureProviderAura&sq=package:chromium&l=26)
- objects.
-
-[GestureDetector](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gesture_detection/gesture_detector.cc&q=gesture_dete&sq=package:chromium&l=1),
-[ScaleGestureDetector](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gesture_detection/scale_gesture_detector.cc&sq=package:chromium)
-
-* Take in touches, and fire callbacks for each gesture.
-
-[GestureProvider](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gesture_detection/gesture_provider.h&q=GestureProvider)
-
-* Hosts the
- [GestureDetector](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gesture_detection/gesture_detector.cc&q=gesture_dete&sq=package:chromium&l=1)
- and
- [ScaleGestureDetector](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gesture_detection/scale_gesture_detector.cc&sq=package:chromium).
-* Constructs
- [GestureEventData](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gesture_detection/gesture_event_data.h&q=GestureEventData&sq=package:chromium&l=17)
- objects, which are turned into
- [GestureEvent](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/event.h&q=GestureEvent&sq=package:chromium&l=654)
- objects in
- [GestureProviderAura](https://code.google.com/p/chromium/codesearch#chromium/src/ui/events/gestures/gesture_provider_aura.h&q=GestureProviderAura&sq=package:chromium&l=26). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/output.png.1379091770284.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/output.png.1379091770284.png.sha1
deleted file mode 100644
index f48607db386..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/gesture-recognizer/output.png.1379091770284.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dbde3e9c7d80628a94e1b01196bffb7c8e270536 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.graffle.sha1
deleted file mode 100644
index df7d75b4f82..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-875cf7a5a76bb22e4ecc0189727fe4ccd3b2218d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.png.sha1
deleted file mode 100644
index 3735258678b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0a529b71e9f70297c003949d461fe198a5811921 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/index.md b/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/index.md
deleted file mode 100644
index 2caa913179b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/graphics-architecture/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: graphics-architecture
-title: Graphics Architecture
----
-
-### Overview
-
-[<img alt="image"
-src="/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.png">](/developers/design-documents/aura/graphics-architecture/ChromeGraphicsArchitecture.png)
-
-Each Aura Window owns a corresponding compositor layer. The layer tree
-corresponds roughly to the window tree (though Views also supports layers, so a
-single Aura Window can have nested Layers created by Views within that Window).
-
-If the Window's layer has a texture that texture is drawn by the compositor.
-Aura is transitioning to using the Chromium Compositor ("CC"). At time of
-writing CC is part of WebKit, but there is a nascent effort to extract it into
-its own library within Chromium.
-
-The Compositor maintains two trees of layers, one on the UI thread and one
-(optionally) on the Compositor thread. This improves performance for animations
-and interactive events like scrolling. See CC documentation for more
-information. The CC library talks to the GPU process via command buffer to do
-the final rendered output.
-
-### Pre-Layer Tree Unification World
-
-At the time of writing we have two layer trees, one for the UI and one for
-content from the renderer process. The renderer process uses WebLayer directly,
-while the UI wraps it in a class ui::Layer in ui/compositor, which provides some
-additional utilities useful to Aura and Views.
-
-Once CC is extracted into a standalone library we will explore replacing
-ui::Layer functionality with direct use of CCLayer.
-
-### Paint Scheduling/Draw Flow
-
-Throughout these documents and in the source code you will see references to
-paint and draw. Paint is an operation performed mostly by the Views system to
-update the contents of the windows... this is a typically a software operation
-to update the contents of a Skia canvas. Draw is an operation performed by the
-compositor to draw the contents of layers' textures to the screen, including
-potentially compositing some of them against each other.
-
-A draw can be triggered by two sources: the underlying native window owned by
-the RootWindowHost can be sent a redraw notification from the system (e.g.
-WM_PAINT or Expose), or an application event can trigger a redraw by calling
-ScheduleDraw() on any number of framework objects (Compositor, RootWindow, etc).
-In the latter case a task is posted that calls Draw().
-
-Layer also supports a method SchedulePaint(), which is exposed through Window
-and also NativeWidgetAura and used by Views when some sub-region of the layer is
-to be marked invalid. The layer stores the current invalid rect which is a union
-of all invalid rects specified since the last validation.
-
-When the compositor draws, it performs a depth-first walk of the layer tree, and
-if any of the layers it encounters has an invalid rectangle, it is asked to
-repaint its contents. The compositor does this via
-WebKit::WebContentLayerClient, implemented by ui::Layer. The layer asks its
-delegate to repaint via a call of OnPaintLayer() which takes a Skia canvas sized
-to the invalid rect. In Aura, the delegate is the Window, and the Window asks
-its delegate to repaint. In production this is often a NativeWidgetAura, a Views
-type. As mentioned earlier, Views can also have layers directly, and as such a
-View can also be a layer's delegate.
-
-Once the draw is complete the invalid region is validated so no further paint
-notifications are sent until explicitly requested by a subsequent invalidation. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/index.md b/chromium/docs/website/site/developers/design-documents/aura/index.md
deleted file mode 100644
index 82feb280854..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: aura
-title: Aura
----
-
-[Original One-Page Design
-Doc](/developers/design-documents/aura-desktop-window-manager) (still good for a
-high level overview, with contact information. Many technical details are now
-obsolete)
-
-[Aura Graphics
-Architecture](/developers/design-documents/aura/graphics-architecture)
-
-[Aura Overview](/developers/design-documents/aura/aura-overview)
-
-[Aura and Shell
-dependencies](/developers/design-documents/aura/aura-and-shell-dependencies)
-
-[Aura Client API and Shell
-Separation](/developers/design-documents/aura/client-api)
-
-[Layout Managers](/developers/design-documents/aura/layout-managers)
-
-[Views](/developers/design-documents/aura/views)
-
-[Gesture Recognizer](/developers/design-documents/aura/gesture-recognizer)
-
-[Ash Color Chooser](/developers/design-documents/aura/ash-color-chooser) (the
-&lt;input type="color"&gt; UI for ChromeOS)
-
-[Event Handling](/developers/design-documents/aura/event-handling)
-
-[Focus and Activation](/developers/design-documents/aura/focus-and-activation)
-
-[Multi-desktop](/developers/design-documents/aura/multi-desktop)
-
-[System Tray](/developers/design-documents/aura/system-tray)
-
-[Immersive fullscreen](/developers/design-documents/immersive-fullscreen) - Part
-of the Ash window manager. Collapses the tab strip and shelf into "light bar"
-strips at the top and bottom of the screen.
-
-[Chrome OS lower layers
-(drivers/etc...)](/chromium-os/chromeos-graphics-reading-list) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.graffle.sha1
deleted file mode 100644
index 39012de45ca..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b1baf91f15c5dd686ea19cfd6a44469874397185 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.png.sha1
deleted file mode 100644
index 38a06545aef..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/layout-managers/LayoutManager.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-783f43a20dab0d09c0b435d65f2547fd7c7673fd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/layout-managers/index.md b/chromium/docs/website/site/developers/design-documents/aura/layout-managers/index.md
deleted file mode 100644
index 11d27c95e99..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/layout-managers/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: layout-managers
-title: Layout Managers
----
-
-LayoutManager is a convenient abstraction that separates messy layout heuristics
-from the other particulars of a Window.
-
-[<img alt="image"
-src="/developers/design-documents/aura/layout-managers/LayoutManager.png">](/developers/design-documents/aura/layout-managers/LayoutManager.png)
-
-A LayoutManager implementation attached to an Aura Window can control the layout
-(bounds, transform, and even other properties) of that Window's children.
-
-A LayoutManager is typically attached to a window at creation/initialization
-time. It is notified when:
-
-* a child window added or removed, or the visibility of a child
- changes. This type of event may cause other child windows to be
- re-laid out.
-* the size of the bound Window changes, which may cause the children
- to be re-laid out to accommodate the new viewport size.
-
-A LayoutManager implementation can be used for everything from simple behavior
-like keeping the application launcher docked to the bottom of the screen to
-complex layout heuristics for multiple windows across several virtual
-workspaces. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/multi-desktop/index.md b/chromium/docs/website/site/developers/design-documents/aura/multi-desktop/index.md
deleted file mode 100644
index 9b5fa600397..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/multi-desktop/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: multi-desktop
-title: Multi-desktop
----
-
-Aura now makes it possible for the same browser process to render to multiple
-desktops simultaneously (e.g., Native Desktop and Metro Desktop on Windows 8).
-
-To enable this, the Chromium codebase had to be made multi-desktop aware (i.e.,
-chrome::HostDesktopType parameters were added in several locations).
-
-So... a bunch of methods now take chrome::HostDesktopType, but **how do you get
-the right HostDesktopType when you need to provide one?**
-
-There are many ways:
-
-1. If you have a Browser: take its host_desktop_type() member.
-2. If you have a gfx::NativeView: use
- chrome::GetHostDesktopTypeForNativeView().
-3. If you have a gfx::NativeWindow: use
- chrome::GetHostDesktopTypeForNativeWindow().
-4. If you have a WebContents\* w: you can use (2) passing in
- w-&gt;GetNativeView() OR you might be able to get a Browser with
- chrome::FindBrowserWithWebContents() and use (1)
-5. If all else fails and you have absolutely NO way of getting desktop
- context (e.g., a background extension that wants to open a new
- window...): you can use chrome::GetActiveDesktop() to get the type
- of the last user-activated Chrome desktop, but be aware that this is
- inherently racy (i.e., the user can switch desktops at any time) --
- If you are in a test, it is OK to use GetActiveDesktop() since
- almost all tests run on a single desktop making GetActiveDesktop()
- constant.
-6. You should almost never hardcode HOST_DESKTOP_TYPE_X constants.
-7. If you work on Chrome OS and your code is under ash/, please use
- HOST_DESKTOP_TYPE_ASH (this is the same as HOST_DESKTOP_TYPE_NATIVE
- on Chrome OS, but not on other platforms).
-
-Most of the methods mentioned above are found in
-src/chrome/browser/ui/host_desktop.h.
-
-Note: If you hardcode HOST_DESKTOP_TYPE_NATIVE it will *look* like it's
-*working* if you're in a single-desktop environment (which most of you are), but
-what it will really do is: one day someone will trigger your feature from the
-Ash desktop (e.g., in Windows 8 Metro) and it will open a window/tab on the
-native desktop (invisible to the user who is immersed in the Ash environment)... \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/system-tray/index.md b/chromium/docs/website/site/developers/design-documents/aura/system-tray/index.md
deleted file mode 100644
index 06f84a68ff4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/system-tray/index.md
+++ /dev/null
@@ -1,278 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: system-tray
-title: System Tray
----
-
-## Summary
-
-The system tray is part of the Ash status area. It displays system status and
-settings, and expands into a menu with more information and settings controls.
-Each system tray item may have any subset of the 4 view types:
-
-* **Tray view.** This is the view that shows in the status area, such
- as the clock or the Wi-Fi indicator image.
-* **Default view.** This is the view that appears in the list when the
- tray bubble is opened.
-* **Detailed view.** This view appears by itself. If the tray bubble
- is already open, the detailed view is displayed within the existing
- window for the tray bubble.
-* **Notification view.** Obsolete. The SMS notification is shown as a
- notification view. Other tray items use the message center or their
- detailed view to show notifications.
-
-This document summarizes the behavior of each system tray item. Some system tray
-items are only available while logged in.
-
-## List of system tray items
-
-<table>
-<tr>
-<td>System tray item</td>
-<td>Tray view</td>
-<td>Default view</td>
-<td>Detailed view</td>
-<td>Notifications</td>
-<td>Chrome OS only</td>
-<td>Visible in sign-in screen, lock screen, OOBE</td>
-</tr>
-<tr>
-<td><b>ScreenCaptureTrayItem</b></td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>Message center</td>
-<td>Yes</td>
-<td>No? </td>
-</tr>
-<tr>
-<td><b>ScreenShareTrayItem</b></td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>Message center</td>
-<td>Yes</td>
-<td>No? </td>
-</tr>
-<tr>
-<td><b>TrayAccessibility</b></td>
-<td>When accessible option is enabled</td>
-<td>Yes, unless disabled in settings</td>
-<td>Yes (from default view)</td>
-<td>Custom popup</td>
-<td>No (Windows, Linux)</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayAudio</b></td>
-<td>When muted</td>
-<td>Yes</td>
-<td>Pops up when volume changes</td>
-<td>Detailed view popup</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayAudioChromeOs</b></td>
-<td>When muted</td>
-<td>Yes</td>
-<td>Pops up when volume changes</td>
-<td>Detailed view popup</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayAudioWin</b></td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>No (Windows)</td>
-<td>N/A</td>
-</tr>
-<tr>
-<td><b>TrayBluetooth</b></td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes (from default view)</td>
-<td>No</td>
-<td>No (Linux)</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayBrightness</b></td>
-<td>No</td>
-<td>In TouchView</td>
-<td>Pops up when brightness changes</td>
-<td>Detailed view popup</td>
-<td>Yes </td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayCapsLock</b></td>
-<td>When enabled</td>
-<td>When enabled</td>
-<td>Pops up when caps lock is enabled</td>
-<td>Detailed view popup</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayDate</b></td>
-<td>Yes</td>
-<td>Yes</td>
-<td>No</td>
-<td>No</td>
-<td>No (Windows, Linux)</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayDisplay</b></td>
-<td>No</td>
-<td>When display changes or is mirrored, extended or docked</td>
-<td>No</td>
-<td>Message center</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayDrive</b></td>
-<td>No</td>
-<td>For the owner when waiting on Drive</td>
-<td>Yes (from default view)</td>
-<td>No</td>
-<td>No (Linux)</td>
-<td>No</td>
-</tr>
-<tr>
-<td><b>TrayEnterprise</b></td>
-<td>No</td>
-<td>When device is managed (non-public user)</td>
-<td>No</td>
-<td>No</td>
-<td>Yes </td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayIME</b></td>
-<td>If multiple input methods are enabled</td>
-<td>If multiple input methods are enabled</td>
-<td>Yes (from default view)</td>
-<td>No</td>
-<td>No (Linux)</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayLocallyManagedUser</b></td>
-<td>No</td>
-<td>For locally managed user</td>
-<td>No</td>
-<td>Message center</td>
-<td>Yes</td>
-<td>No</td>
-</tr>
-<tr>
-<td><b>TrayNetwork</b></td>
-<td>Sometimes</td>
-<td>Yes, once initialized</td>
-<td>Yes (from default view)</td>
-<td>Detailed view popup or message center</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayPower</b></td>
-<td>If battery present</td>
-<td>No</td>
-<td>No (part of TraySettings)</td>
-<td>Message center</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayRotationLock</b></td>
-<td>In TouchView</td>
-<td>In TouchView</td>
-<td>No</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TraySessionLengthLimit</b></td>
-<td>When limited</td>
-<td>No</td>
-<td>No</td>
-<td>Message center</td>
-<td>Yes</td>
-<td>No</td>
-</tr>
-<tr>
-<td><b>TraySettings</b></td>
-<td>No</td>
-<td>Yes</td>
-<td>No</td>
-<td>No</td>
-<td>Yes</td>
-<td>Sometimes</td>
-</tr>
-<tr>
-<td><b>TraySms</b></td>
-<td>When messages available</td>
-<td>When messages available</td>
-<td>When messages available</td>
-<td>Notification view</td>
-<td>Yes</td>
-<td>?</td>
-</tr>
-<tr>
-<td><b>TrayTracing</b></td>
-<td>When tracing is enabled</td>
-<td>When tracing is enabled</td>
-<td>No</td>
-<td>No</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayUpdate</b></td>
-<td>When upgrade is available</td>
-<td>When upgrade is available</td>
-<td>Yes (pops up periodically)</td>
-<td>Detailed view popup</td>
-<td>No (Windows, Linux)</td>
-<td>Yes</td>
-</tr>
-<tr>
-<td><b>TrayUser</b></td>
-<td>Sometimes</td>
-<td>Yes</td>
-<td>Yes (new account management)</td>
-<td>No</td>
-<td>Yes</td>
-<td>No </td>
-</tr>
-<tr>
-<td><b>TrayUserSeparator</b></td>
-<td>No</td>
-<td>When multiple users logged in</td>
-<td>No</td>
-<td>No</td>
-<td>Yes</td>
-<td>No</td>
-</tr>
-<tr>
-<td><b>TrayVPN</b></td>
-<td>No</td>
-<td>If VPN configured</td>
-<td>Yes (from default view)</td>
-<td>No</td>
-<td>Yes</td>
-<td>Lock screen</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/views/Views.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/aura/views/Views.graffle.sha1
deleted file mode 100644
index e30b89dc6a4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/views/Views.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-32526b1a984447b09c544d6caaf3c1e71839b06d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/views/Views.png.sha1 b/chromium/docs/website/site/developers/design-documents/aura/views/Views.png.sha1
deleted file mode 100644
index 6a7dc66a258..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/views/Views.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-870500d529fab5b9017cbd2f71badb8b3948c202 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/aura/views/index.md b/chromium/docs/website/site/developers/design-documents/aura/views/index.md
deleted file mode 100644
index e2e9d0fe175..00000000000
--- a/chromium/docs/website/site/developers/design-documents/aura/views/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/aura
- - Aura
-page_name: views
-title: Views
----
-
-Views is a user interface framework built on a type called, confusingly, View.
-Responsible for providing the content of our Aura windows, most of this code is
-also used by Desktop Chrome on Windows. Only the NativeWidget implementation
-differs (for now). Views also provides a set of useful reusable controls like
-Buttons, Menus, etc.
-
-[<img alt="image"
-src="/developers/design-documents/aura/views/Views.png">](/developers/design-documents/aura/views/Views.png)
-
-Views is somewhat analogous to Aura, with a native host (NativeWidget
-implementations), a View hierarchy within a RootView that handles event
-dispatch.
-
-The primary difference is that this system was designed and built before beng
-developed a healthy skepticism of is-a relationships, and so you accomplish
-rendering, event handling and layout here by subclassing View, rather than
-implementing a delegate interface as in Aura. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/auto-throttled-screen-capture-and-mirroring/index.md b/chromium/docs/website/site/developers/design-documents/auto-throttled-screen-capture-and-mirroring/index.md
deleted file mode 100644
index 72e75e5d2b4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/auto-throttled-screen-capture-and-mirroring/index.md
+++ /dev/null
@@ -1,428 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: auto-throttled-screen-capture-and-mirroring
-title: Auto-Throttled Screen Capture and Mirroring
----
-
-Author: Yuri Wiitala (miu@chromium.org)
-Last Updated: September 2015
-
-# Background
-
-Chromium currently has three built-in screen capture methods (tab content,
-window, and full desktop) and two video remoting methods (WebRTC/PeerConnection,
-and Cast Streaming). Regardless of the combination chosen, the traditional
-approach to mirroring sessions has been to fix a number of key parameters for
-the entire session, such as video resolution, maximum frame rate, encoder bit
-rate, and end-to-end latency (a.k.a. target playout delay, a fixed window of
-time between frame capture and remote display of the frame).
-
-The traditional approach, however, fails to account for a constantly-changing
-system environment during a mirroring session. For example, an encoder might
-become starved for CPU when automated background processes start to run on the
-sending device. Another example: Network throughput, latency, and packet loss
-can wildly fluctuate, especially when using WiFi networks, and especially in
-crowded environments.
-
-The traditional approach fails even in ideal environments: Whether it is a
-Google Engineer shipping default settings (a one size fits all approach) or an
-end-user customizing settings (often under misconceptions about how the system
-works), there is no optimal choice. For example, a video resolution of 1280x720
-may be too much for an old laptop to handle, while at the same time a
-high-performance gaming desktop could easily handle 1920x1080 or higher. Either
-way, the user experience is not optimized.
-
-# Overview
-
-This design discusses the goals to be achieved and how the Sender will
-accomplish those goals by altering parameters while a mirroring session is
-running. This document will focus mainly on tab capture, to produce video, and
-Cast Streaming, to encode and transmit the video to a Receiver (remote device
-and display). However, this design should be applicable to other pairings of
-screen capture type and remoting method.
-
-The user experience depends on the content being mirrored: interactive content
-(e.g., slide-show presentations, browsing news articles, browsing photo
-galleries, and other mostly-static content), and animated content (e.g., movies,
-sports broadcasts, and other video; and real-time rendered visualizations).
-
-For interactive content, the user experience is maximized when end-to-end
-latency is low, so that user input actions have an immediate result on the
-remote display; and also when video frame quality is high, so text and/or
-diagrams are crisp and readable. Therefore, this design focuses on dropping
-frames in order to maintain the maximum possible video resolution and encoder
-target bit rate, all within the hardware constraints of the system.
-
-For animated content, roughly the opposite is true. Dropping frames is a very
-perceivable event and should be avoided at all costs. Thus, the system should
-increase end-to-end latency and decrease video frame quality to compensate. Note
-that users tend not to perceive small adjustments in video resolution (e.g., a
-switch between 1280x720 and 1440x810) so long as the smooth video is not
-interrupted.
-
-# Requirements
-
-Zero configuration: Other than hard-coded "sanity bounds," there should be no
-configuration options exposed to the end-user. Based on the type of content
-being mirrored, the system must continuously self-configure to optimize for the
-user experience. Performance problems must be detected and abated. Likewise,
-where underutilized, the system should take opportunities to improve quality.
-
-Detect animating content: The decisions made by the system depend on knowing
-what type of content is being mirrored. In addition, knowing the animation frame
-rate is critical when calculating new session parameters.
-
-Avoid extra work: Model, predict, and react to upcoming "stalls" before they
-force the mirroring pipeline (capturer, encoder, etc.) or Receiver to drop a
-frame. In other words, a video frame should not be captured if it has no hope of
-getting transmitted and displayed.
-
-Support variable media: Every component of the mirroring pipeline in the Sender,
-as well as the Receiver, must support varying the video resolution, frame rate,
-and encoder bit rate.
-
-# Approach
-
-The overall approach is to control the data volume of the video being produced
-by the screen capturer to a point where all components of the mirroring pipeline
-are operating at a sustainable rate. As each frame progresses through the
-pipeline, each component's processing performance is measured for the frame.
-Heuristics look at how the performance is trending and trigger reductions (or
-increases) in data volume by altering the resolution and/or rate of video frames
-being produced.
-
-A video frame is produced by sending the GPU a request to scale a texture and
-read the result back into a pooled buffer. Once the read-back is complete, the
-buffer is handed over to an encoder and then the resulting encoded frame bytes
-are transmitted over the network to the Receiver.
-
-### Measuring utilization
-
-In order to determine the end-to-end system's capability, the potential
-bottlenecks in the mirroring pipeline must be monitored, and feedback signals
-are sent back to the control logic.
-
-GPU: GPUs are optimized for throughput, and the requests made to scale,
-YUV-convert, and read-back data are internally re-ordered and pipelined. In
-addition, it's possible for multiple frame captures to be executing
-simultaneously within the GPU. Here's an example timing diagram for frame
-captures:
-
-\[\[TBD: Research cause/solution to "Compositor self-throttling" in "Open
-Issues" section below. That will likely change our design approach here.\]\]
-
-One way to measure the GPU's utilization is to measure "lag." First, the time
-difference between each successive capture request is noted (e.g., Frame2Start -
-Frame1Start, and Frame3Start - Frame2Start). Then, the time difference between
-each successive capture completion is noted (e.g., Frame2Finish - Frame1Finish,
-and Frame3Finish - Frame2Finish). The ratio between the two differences is
-labeled "lag," where a value greater than 100% indicates the GPU is not keeping
-up with the capture requests.
-
-Buffer Pool: Chromium currently uses a fixed-size video frame buffer pool \[and
-this design decision needs to be revisited to account for differences in
-available RAM, and greater needs for high frame rate content\]. The utilization
-of the buffer pool is monitored, and when it grows beyond a safety threshold,
-the system interprets this as an overload signal. Either frames are being
-produced at too-fast a rate, frames are not being encoded fast enough, or both.
-
-Encode time: Whether the encoder is a software or hardware-based implementation,
-the amount of time it takes to encode each frame is measured, relative to the
-frame's duration. For a software encoder, this time utilization measurement will
-indicate whether the Sender's CPU is over-utilized. A value that exceeds 100% is
-interpreted as follows: "This frame took longer to encode than the duration it
-will be shown on the Receiver's display. If this occurs too often, the pipeline
-will be forced to drop frames."
-
-Note that: 1) The measurement must be based on the passage of time according to
-a high-resolution clock. 2) The measurement accounts for all the effects of
-thread starvation issues and CPU core availability without having to directly
-measure these things.
-
-Encode bit rate: Network conditions are always changing throughout a session.
-Various measurements are taken to estimate network bandwidth and round-trip
-latency. The estimates are then used to determine a target encode bit rate.
-
-Encoders do their best to match the target bit rate, but have to play an
-up-front "guessing game" with each frame to determine how much entropy will be
-preserved, and this directly impacts the size of the output. They usually over-
-or undershoot the target bit rate, and then remember this error and spread a
-correction over future frame encodes.
-
-A naive utilization measurement is to divide the actual bit rate by the target
-bit rate for each frame. However, using this to determine a bottleneck in the
-pipeline is flawed because the encoder is being tasked with the goal of
-achieving as close to the target bit rate as possible, regardless of the
-complexity of the input frames. Thus, a 100% value would rarely indicate encoder
-output is at a maximum sustainable rate. Instead, the encoder is just trying to
-use more bandwidth to maximize quality and could possibly do an acceptable job
-with less.
-
-Therefore, the encode bit rate utilization needs to be adjusted so that it can
-be interpreted to mean "the fraction of the target bandwidth required to encode
-this frame." The solution is to account for the complexity of the input frames.
-Many encoder implementations, such as libvpx (VP8/VP9), will provide a
-"quantizer index" value that represents how much of the entropy was discarded
-when encoding the frame. Higher quantizer values imply lower quality and smaller
-output. The quantizer value was the encoder's guess when it played the "guessing
-game" described above. And, the results from using that guess are known (the bit
-rate utilization). From these values, the desired utilization measurement can
-computed as follows:
-
-`BitRateUtilization = ActualBitRate / TargetBitRate`
-
-`IdealQuantizer = BitRateUtilization * ActualQuantizer`
-
-`UtilizationMeasurement = IdealQuantizer / MaximumValidQuantizer`
-
-Some examples to show how this works:
-
-Example 1: Let's assume an input frame is too complex to be encoded within the
-limitation of the current target bit rate. After the encode is complete, the
-`BitRateUtilization` turned out to be 140% and the `ActualQuantizer` used for
-the encode was 58. Thus, the `IdealQuantizer` is computed to be 81.2, and with a
-`MaximumValidQuantizer` of 63 (for VP8), the `UtilizationMeasurement` is 129%.
-
-Example 2: Let's assume a very simple input frame is being encoded and the
-encoder uses almost all of the allowed bit rate to maximize quality, but could
-do well with less bandwidth. The `BitRateUtilization` turns out to be 90% and
-the `ActualQuantizer` used was 5. The `IdealQuantizer` would then be 4.5, and
-the `UtilizationMeasurement` is 7%.
-
-There are some encoder APIs that do not provide the quantizer, or any similar
-proxy for it. In this case, it may be necessary to parse frame headers from the
-encoded bitstream to extract this information. If that is not feasible, an
-implementation will need custom logic to model the encoder's response to the
-input video and provide the `ActualQuantizer` value.
-
-### Pre-processing of utilization feedback signals
-
-All utilization signals are in terms of 0% (no load) to 100% (maximum
-sustainable load), with values greater than 100% indicating a pipeline component
-will stall or drop frames if the data volume/complexity is not reduced. These
-raw signals must be translated into metrics that are actionable by control
-logic.
-
-Attenuation: Running at the "red line" is not a good strategy. Therefore, all
-utilization signals should be attenuated so that they are measuring relative to
-a "comfortable maximum." This allows the pipeline components some breathing room
-to be able to process the occasional edge-case frame, one that suddenly takes
-more processing resources to handle, without actually reaching the true maximum
-load.
-
-Time-weighted averaging: The per-frame utilization signals are typically very
-volatile. To ensure outlier data points don't trigger premature decisions, all
-signals are passed through a low-pass filter before being interpreted. The
-weighting of the averaging will depend on the volatility and the risk in making
-bad decisions.
-
-### The actionable metric: Capable pixels per frame
-
-Extensive research was performed to determine that the load experienced by all
-mirroring pipeline components is typically linearly proportional to the number
-of pixels per second being processed. In addition, Receiver video quality was
-tested, both qualitatively and quantitatively, using PSNR and SSIM, and found to
-also be linearly proportional to the pixel rate, all other parameters fixed.
-
-One exception is with the encoded output size; and while the result was observed
-with VP8, it is likely to be the same for other codecs. The complexity of the
-content turned out to have a huge factor on the relationship between the output
-size and the input pixel rate. For videos with very high entropy (e.g., "Ducks
-take off from rippling water"), the encoded output size was linearly
-proportional to the pixel rate. However, with many typical samples of video
-(e.g., action movie clips, sports, 3D animation shorts, etc.) the relationship
-was actually sublinear. In other words, increasing the input pixel rate by 2X
-would result in less than a 2X increase in the output size. The conclusion we
-draw here is to simply assume the worst case--that relationship is linear--and
-allow the control logic to converge at an optimum over time.
-
-Thus, only one control "knob," the pixel rate, is needed to ensure every
-component in the end-to-end system can handle the load. Two things affect the
-pixel rate: the frame resolution, and the frame rate. Of the two, the frame
-resolution has a much larger impact on the pixel rate and, for animated content,
-has a lesser impact on the end-user experience. Any adjustment in capture
-resolution provides a "squared" increase or decrease in the pixel rate, compared
-to only a linear change when adjusting the frame rate.
-
-So, for now, the design only considers controlling load by changing the capture
-resolution. See Open Issues below for considerations regarding high frame rate
-content. The capture resolution is determined by first computing the
-pipeline-capable number of pixels per frame, as follows:
-
-`PipelineUtilizationi = GREATEST(GpuUtilizationi, EncodeTimeUtilizationi, …)`
-
-`CapablePixelsi = CaptureResolutioni / PipelineUtilizationi`
-
-`CapablePixelsPerFramet = TIME_WEIGHTED_AVERAGE(CapablePixels0, …)`
-
-Note that the frame rate is not a term included in the math above. However, it
-is accounted for in the utilization feedback signals: An increasing frame rate
-would cause the per-frame utilization to increase, depending on how resources
-such as CPU and network bandwidth are limited.
-
-### Deciding the capture resolution
-
-Just before requesting the capture of each frame, logic is needed to decide what
-the resulting frame resolution should be. In other words, given the size of the
-source content and the current capable pixels per frame (see above), should the
-source content be down-scaled and, if so, to what size?
-
-First of all, note that the capable pixels per frame can fluctuate
-frame-to-frame in a rather noisy fashion. Suppose a naive calculation is used to
-compute the frame resolution:
-
-`NaiveFrameWidtht = SQRT(CapablePixelsPerFramet * SourceContentAspectRatio)`
-
-`NaiveFrameHeightt = SQRT(CapablePixelsPerFramet / SourceContentAspectRatio)`
-
-The above would result in a different frame resolution for each and every frame,
-with several obvious drawbacks:
-
- Most down-scaling algorithms would have a hard time producing quality
- results with the peculiar/odd resolutions. For example, sharp lines and text
- in the source content image would appear fuzzy and/or distorted in the
- down-scaled result.
-
- There would be extra taxing of the CPU because most encoders require an
- expensive re-initialization whenever frame sizes change. Also, there would
- be extra taxing of the available network bandwidth, as most encoders would
- need to emit a full key frame whenever frame sizes change.
-
- Receivers of the video stream would need to scale the decoded video frames
- to the resolution of the receiver display. Again, scaling from odd
- resolutions to standard display resolutions will produce poor-quality
- results. In addition, many receivers have scalers that are
- performance-optimized only when going between standard resolutions.
-
-Therefore, to mitigate these issues, this design calls for using a fixed set of
-capture resolutions that have the same aspect ratio as the source content. Also,
-capture resolution changes are limited to occur no more than once every three
-seconds. The step between nearby capture resolutions must be small enough that
-the end-user won't notice the difference when a change is made. However, the
-step must be large enough to prevent constant flip-flopping between two or more
-resolutions. For example, when considering 16:9 source content at 1920x1080, a
-good step difference is 90 lines.
-
-Now that the inputs and outputs to the decision logic have been well-defined, a
-strategy for changing resolutions must be described. At a high-level, the
-strategy depends on whether the source content is interactive or animating. When
-interactive, the goal is to maximize the resolution at the expense of dropping
-frames. Therefore, capture resolution changes are allowed every three seconds to
-reach the highest-supported resolution.
-
-When source content is animating, a more-complex strategy must be employed since
-the goal is to provide a smooth capture that avoids dropping frames. In this
-case, the strategy is to allow aggressive and immediate decreases in capture
-resolution in order to preserve frame rate. Then, if the feedback signals
-indicate the end-to-end system has been consistently under-utilized for a long
-(e.g., 30-second) proving period, allow a single step upward in capture
-resolution. This strategy avoids rapid flip-flopping which would both: 1)
-increase the risk of a frame being dropped while the end-to-end system
-repeatedly adjusts to the new resolutions; and 2) possibly impact the end-user
-experience, since many repeated resolution changes could become noticeable and
-bothersome.
-
-### Detecting animating content
-
-Change events are provided by the Chromium compositor as each frame is provided
-to it by the renderer. These change events represent candidate frames for
-capture. They include both the local presentation timestamp and the damage
-region within the frame. For each change event, a decision is made as to whether
-to request capture of the frame from the GPU.
-
-In order to determine whether the source content is animating, the recent
-history of change events is analyzed using on-line heuristics. Not only is the
-goal to detect animating content, but to detect the largest region of animating
-content. The largest region is important because the user experience is
-optimized when timing the capture of video frames to those changes. For example,
-if the source content is a rendered web page that contains a tiny spinner
-graphic animating at 60 FPS plus a large video playing at 24 FPS, then the goal
-of the system is to capture at a rate of 24 FPS:
-
-In order to accomplish this, the recent history of change events participate in
-a voting process. Each change event contributes a vote for its damage region,
-and that vote is weighted in proportion to the number of pixels in its damage
-region. If there is a damage region that gets a supermajority of the votes
-(i.e., 2/3 or more), it is selected as the overall detected animation region.
-Then, the timestamps from all the change events having the same damage region
-are used to determine the average animation rate.
-
-There are a number of cases where animation is decidedly not detected. First,
-there may be an insufficient history of change events. Second, the supermajority
-vote might not be won by any of the candidate damage regions. Third, when a
-damage region wins the vote, the change event timestamps must indicate a
-sequence of regular time periods between events without significant pauses.
-
-# Open Issues
-
-Receiver feedback signals
-
-Everything discussed in the design above for the most part focuses on
-performance bottlenecks sender-side. It is worth exploring whether and how to
-include receiver feedback signals into this design. One issue is that the
-latency in the feedback would be much higher, at minimum a full network
-round-trip time period, and so potential see-sawing effects would have to be
-mitigated.
-
-High frame rate content
-
-The current design ignores throttling of frame rate. For the vast majority of
-typical usage scenarios, this is fine. However, the exception would be high
-frame rate content (e.g., 60 FPS). In this case, a second trade-off needs to be
-researched: When should the source content be sub-sampled (e.g., 30 FPS) instead
-of the capture resolution dropped? In other words, to optimize the user
-experience, when is it better to drop the frame rate instead of the resolution?
-
-Adaptive Latency
-
-In Cast Streaming, the end-to-end system declares a fixed window of latency
-between when a video frame would be presented sender-side and the exact moment
-it is displayed receiver-side. The default is currently 400 ms, which means
-capture, encoding, transmission to the receiver, decoding, and presentation are,
-in-total, allowed to take up to this much time. The point of this is to allow
-for any part of the pipeline to occasionally take much longer in processing a
-frame (e.g., network packets needing re-transmission) without
-interrupting/glitching the user experience.
-
-There is research in-progress to identify whether and when it makes sense to
-dynamically adjust the end-to-end latency throughout a session. For example, for
-interactive content, it makes sense to drop the latency so that user input
-actions on the sender side result in spontaneous responses receiver side.
-Likewise, for animating content, it makes sense to increase the latency,
-effectively adding more "buffering" to the end-to-end system, to help prevent
-unpredictable events from causing forced frame drops. In addition, it may or may
-not become important to account for these latency adjustments with respect to
-the auto-throttling of capture.
-
-Remoting over the WAN (WebRTC use cases)
-
-Transmitting the video stream over a wide-area network, and/or broadcasting to
-multiple receivers introduces additional variance and additional considerations
-for how feedback utilization signals are generated and used.
-
-Research and work on this issue is being tracked
-[here](http://crbug.com/516190).
-
-Compositor self-throttling
-
-There is currently a known issue on lower-end systems: It is possible to achieve
-a state where animated content is captured from the Chromium compositor,
-encoded, and remoted without dropping any frames in the capture pipeline; but
-the frame rate of the source content is actually much higher. Frames are being
-dropped because the compositor is under too much load and is reacting by
-down-throttling the rendering frame rate. The auto-throttling control logic has
-no signals making it aware of this fact. If it were aware, and the tab capture
-resolution were decreased enough, the load on the compositor would decrease to
-the point where the rendering frame rate would raise again and match that of the
-source content.
-
-Research and work on this issue is being tracked
-[here](http://crbug.com/517714).
-
-# Status
-
-Experiment launched in Chrome 45. Stable launched in Chrome 46. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/automaticspellingcorrection/index.md b/chromium/docs/website/site/developers/design-documents/automaticspellingcorrection/index.md
deleted file mode 100644
index c02d38a871f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/automaticspellingcorrection/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: automaticspellingcorrection
-title: Automatic Spelling Correction
----
-
-# A new feature to add to Chrome would be automatic spelling correction. In this feature, common misspelled words will be replaced immediately with the correct word, on the fly, while typing. For example, words such as "the" typed as "teh", "more" typed as "moer", will be replaced with "the" and "more" respectively.
-
-A natural apprehension is that spellings can be auto corrected without the user
-wanting it to happen. In this particular implementation, the algorithm for
-changing the word is kept stringent, so that cases with ambiguity are not dealt
-with at all, thus reducing false positives. Further, this feature can be turned
-OFF for usage in text box which requires technical words not necessarily in the
-dictionary. Selective use of this feature will probably make daily browser
-activities, such as typing an email, a better and faster experience.
-
-A somewhat detailed design is presented below.
-
-## Infrastructure Support
-
-This would require adding support to Webkit. The TypingCommand class
-(TypingCommand.cpp) supports a method markMisspellingsAfterTyping. This takes a
-look at the selection that results after typing and determines whether
-spellcheck is required. This method will ask the
-markMisspellingsAfterTypingToPosition method in Editor (Editor.cpp) to provide
-the integer positions: firstMisspelledCharOffset and firstMisspelledCharCount.
-These positions will be required to generate the exact subrange within the
-Editor object which is to be replaced with the auto correct word after typing.
-Invariably, this would select the word immediately after typing and entering
-space, or other word breaking character (such as $, @, & etc for WebKit).
-
-Once the subrange to replace has been determined, a new method in the editor
-client (editorclient.h and editor_client_impl.cc), called
-getAutoCorrectSuggestionForMisspelledWord, will be asked to provide the
-autocorrect word. If it can provide one, then replace the subrange with that
-word - otherwise, do nothing. Meanwhile,
-getAutoCorrectSuggestionForMisspelledWord will eventually ask the SpellChecker
-to provide it with the auto correct word, by using the WebViewDelegate from
-EditorClientImpl. All the threading issues are automatically taken care of by
-following the same path as that while determining whether a word is misspelled
-in the Editor.
-
-Note that if this feature is turned off from the UI, the
-getAutoCorrectSuggestionForMisspelledWord will fast-return an empty string.
-
-## Auto correct word determination algorithm in SpellChecker
-
-The autocorrection algorithm resides in the SpellChecker Object in method
-GetAutoCorrectWord. This method can contain a wide range of simple to
-sophisticated algorithms for auto spell check.
-
-As a starter, I propose to use the simplest algorithm - that of swapping
-adjacent characters and checking to see if only *one* word is spelled correctly.
-This is a very common case, as we tend to often type in one character before the
-other while typing (at the very time of writing this sentence, I spelled "while"
-as "hwile"!). As an example, consider the word "more". Swapping adjacent
-characters would result in the following - "omre", "mroe", "moer", "more".
-Obviously, only "more" is not misspelled. So, if the user types "omre", "mroe"
-or "moer", it will be replaced with "more" as the auto suggest word.
-
-As an anti-example, consider the (misspelled) word "noen". This will *not* be
-auto corrected, because swapping adjacent characters will result in "neon", as
-well as "none". Both are legitimate word - the user, thus, might have as well
-meant either.
-
-Once this basic algorithm is in place, I will devote my time over the next few
-months to develop more sophisticated algorithms, with your help, to make this
-feature a coveted one, unseen in other browsers so far.
-
-## Chrome UI Support
-
-For now, the only UI support required is the ability to turn this feature
-on/off. This can be done as a check box below the "Allow spellcheck" checkbox in
-Languages options menu. It can also appear in the sub context menu for
-spellcheck options in a text box.
-
-Obviously, more UI support will be eventually required. For example, users might
-not want to have some words auto corrected - they can add those words from a
-context menu command - such as perhaps "Stop autocorrecting this word". Also, a
-UI element should appear below the autocorrected word when the cursor, or mouse,
-if moved over it, to convey to the user that autocorrection has been done.
-
-## Unit Testing
-
-This infrastructure needs to have unit tests for the GetAutoCorrectWord method
-in SpellChecker. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/BlinkCoordinates.png.sha1 b/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/BlinkCoordinates.png.sha1
deleted file mode 100644
index 402f9ec57ec..00000000000
--- a/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/BlinkCoordinates.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c7abc97d26c8bddc80a63a37daa5cfcc9aec279e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/index.md b/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/index.md
deleted file mode 100644
index 51eb7193fb5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/index.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: blink-coordinate-spaces
-title: Blink Coordinate Spaces
----
-
-## #### Blink Coordinate Spaces
-
-## Types of Zoom
-
-There are two types of zoom in Chromium: *Browser Zoom* and *Pinch-Zoom*.
-
-**Browser zoom** is what you get by using Ctrl+/- or the zoom buttons in the
-<img alt="image"
-src="/developers/design-documents/blink-coordinate-spaces/menu.png" height=15
-width=15> menu. It changes the size of a CSS pixel relative to a device
-independent pixel and so it will cause page layout to change. Throughout Blink,
-Browser-zoom is referred to as “Page Zoom” or “Zoom” more generally.
-
-**Pinch-zoom** is activated by using a pinch gesture on a touchscreen or
-touchpad. Throughout Blink and the compositor, pinch-zoom is referred to as
-“Page Scale”. Pinch-zoom is performed as a post-rendering step, scaling the
-surface the web page is rendered onto. This means it doesn't interact with
-layout. Put another way, pinch-zoom doesn't change the relationship between
-physical pixels and CSS pixels (the \`window.devicePixelRatio\`) as far as Blink
-is concerned, even though the user technically sees a different number of
-physical pixels per CSS pixel.
-
-## Types of Pixels
-
-**Physical Pixels:** These are the actual pixels on the monitor or screen.
-
-**Device Independent Pixels (DIPs):** Modern devices sport high density displays
-(e.g. Apple’s Retina). In order to keep the UI at a comfortably readable size we
-scale it up based on the density of the display. This scaling factor is called
-the *device pixel ratio* in web APIs and *device scale factor* in Chromium code.
-A UI will always be the same size in DIPs regardless of how many pixels are
-actually used to display it. To go from physical pixels to DIPs we divide the
-physical pixel dimensions by the device scale factor.
-
-Blink implements UI scaling by applying the device scale factor to the browser
-zoom. As such, code in Blink rarely needs to directly account for device scale
-factor. Instead, most internal geometry in Blink is done in physical pixels.
-When interfacing with web content, geometry is converted to CSS pixels by
-dividing by the browser zoom, which combines both the user's zoom preference
-(ctrl +/-) and device scale factor.
-
-**CSS pixels:** CSS defines its own pixel type that is also independent of
-physical pixels. When there is no Browser-Zoom, Pinch-Zoom, or CSS transforms
-applied, CSS pixels and DIPs are equivalent. However, zoom can make CSS pixels
-bigger or smaller relative to DIPs.
-
-## Coordinate Spaces
-
-Note that the conversion methods between these spaces (in LocalFrameView) do not
-apply browser zoom, they deal in physical pixels. To convert from locations and
-sizes expressed in true CSS pixels (as used in web APIs) to Document Content,
-FrameView Content, or Frame space you must first multiply by the browser-zoom
-scale factor.
-
-**Document**
-
-The coordinate space of the current FrameView's document content, in physical
-pixels. The origin is the top left corner of the Frame’s document content. In
-Web/Javascript APIs this is referred to as "page coordinates" (e.g.
-MouseEvent.pageX) though there it is in CSS pixels (i.e. browser zoom applied).
-Because coordinates in this space are relative to the document origin, scrolling
-the frame will not affect coordinates in this space.
-
-**Frame**
-
-The coordinate space of the current FrameView in physical pixels. The origin is
-the top left corner of the frame. Therefore, scrolling the frame will change the
-"frame-coordinates" of elements on the page. This is the same as document
-coordinates except that Frame coordinates take the Frame’s scroll offset into
-account. In Web/Javascript APIs this is referred to as "client coordinates"
-(e.g. MouseEvent.clientX) though there it is in CSS pixels (i.e. browser zoom
-applied).
-
-**Root Frame**
-
-The Frame coordinates of the top level (i.e. main) frame. This frame contains
-all the other child frames (e.g. elements create frames on a page).
-
-**(Visual) Viewport**
-
-The coordinate space of the visual viewport as seen by the user, in physical
-pixels. The origin is at the top left corner of the browser view (Window or
-Screen). The difference between Viewport and RootFrame is the transformation
-applied by pinch-zoom. This is generally what you'd use to display something
-relative to the user's Window or Screen.
-
-**Screen**
-
-The final screen space on the user's device, relative to the top left corner of
-the screen (i.e. if we're in a Window, this will include the window's offset
-from the top left of the screen). Note that this is in DIPs rather than physical
-pixels.
-
-## Web-exposed input co-ordinate spaces
-
-To see exactly how some of the above co-ordinate spaces are exposed to
-JavaScript in input events see <https://rbyers.github.io/inputCoords.html>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/menu.png.sha1 b/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/menu.png.sha1
deleted file mode 100644
index eb6a9a42c10..00000000000
--- a/chromium/docs/website/site/developers/design-documents/blink-coordinate-spaces/menu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bfd1f563676ee80ac596e7931bc0b9315606e5ba \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/blink-scrollbarthemes/index.md b/chromium/docs/website/site/developers/design-documents/blink-scrollbarthemes/index.md
deleted file mode 100644
index dc9678c77c1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/blink-scrollbarthemes/index.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: blink-scrollbarthemes
-title: Blink ScrollbarThemes
----
-
-ScrollbarTheme class hierarchy
-
-ScrollbarTheme
-
-|
-
-|--- ScrollbarThemeMacCommon
-
-| |--- ScrollbarThemeMacNonOverlayAPI
-
-| \\--- ScrollbarThemeMacOverlayAPI
-
-|
-
-|--- ScrollbarThemeNonMacCommon
-
-| |--- ScrollbarThemeAuraOrGtk
-
-| \\--- ScrollbarThemeWin
-
-|
-
-\\--- ScrollbarThemeOverlay
-
-ScrollbarThemeOverlay is used by Android and optionally by Aura or GTK+.
-
-Future work:
-
-- Perhaps try to consolidate the various overlay scrollbar classes so Mac and
-non-Mac can share.
-
-- Once Windows switches to Aura, we can remove ScrollbarThemeWin and
-ScrollbarThemeNonMacCommon. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/blocking-cross-site-documents/index.md b/chromium/docs/website/site/developers/design-documents/blocking-cross-site-documents/index.md
deleted file mode 100644
index f5c6701de0b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/blocking-cross-site-documents/index.md
+++ /dev/null
@@ -1,164 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: blocking-cross-site-documents
-title: Blocking Cross-Site Documents for Site Isolation
----
-
-### NOTE: This page represents earlier work that led to the current [Cross-Origin Read Blocking (CORB)](/Home/chromium-security/corb-for-developers) policy. Also see the [CORB explainer](https://chromium.googlesource.com/chromium/src/+/HEAD/services/network/cross_origin_read_blocking_explainer.md) and the relevant part of the [Fetch spec](https://fetch.spec.whatwg.org/#corb).
-
-### Motivation
-
-In general, Chrome's renderer processes should not be given access to data they
-don't need. Our [Site Isolation
-project](/developers/design-documents/site-isolation) is trying to make it
-possible to limit a renderer process to pages from only a single site. As part
-of this, Chrome needs to block such a process from receiving network responses
-that the site isn't allowed to use.
-
-A web site is allowed to request **documents** from its own site (or those that
-have been made available using CORS), as well as **resources** from any site.
-
-**Documents** include HTML, XML, and JSON files. **Resources** include a wide
-variety of files that are "opaque" to the site (i.e., cannot be leaked back to
-the site's owner), including images, JavaScript, CSS, fonts, and TextTrack
-files, among others. **Cross-site documents** come from a different site than
-the page that requests them and do not have CORS headers that would make them
-accessible.
-
-However, we can't always rely solely on the MIME type of the HTTP response to
-distinguish documents from resources, since the MIME type on network responses
-is frequently wrong. Content sniffing can help to confirm whether a document is
-what it claims to be, but using typical content sniffers would lead to
-overzealous blocking and create compatibility problems. Fortunately, our
-experiments show that we can enforce a policy that blocks most cross-site
-documents without breaking existing sites, using a combination of MIME type and
-custom content sniffers.
-
-### Proposed Policy
-
-Our proposed **cross-site document blocking policy** prevents a renderer process
-from receiving cross-site documents that (1) have a HTML, XML, or JSON MIME
-type, and (2) are confirmed to be that type by a custom content sniffer (or are
-marked NoSniff). It does not currently protect files that have other MIME types.
-Documents that are blocked appear as empty to the process that requested them.
-
-While implementing versions of this policy, we made several observations about
-how the content sniffing logic must behave:
-
-* For HTML, we cannot assume "&lt;!--" is valid HTML prefix, since
- that also matches many JavaScript files in practice. Instead, we
- plan to find the end of the HTML comment and then sniff again.
-* For HTML and XML, we cannot block "&lt;?xml" unless we can confirm
- it isn't an SVG. Cross-site SVG files are permitted.
-* There is no existing JSON sniffer, but it is necessary because many
- existing JavaScript files are mislabeled as JSON. We have
- implemented a basic sniffer.
-
-To preserve compatibility, we are aiming to avoid disrupting the behavior of
-existing web sites when blocking responses, within reasonable limits. We
-consider certain behavior changes acceptable, though. For example, we prevent
-actual HTML, XML, or JSON files from being parsed as CSS. CSS parsers were
-originally very lenient and could discover "rules" from almost any content,
-which was used by security researchers for attacks \[1\]. CSS now requires a
-valid MIME type, though, so it should be unaffected by the proposed blocking
-behavior.
-
-When measuring the potential impact of the policy, we discovered several
-"non-disruptive" cases in which cross-site documents were blocked but that cause
-no behavior change to the page. These include:
-
-* Responses with error status codes in any context except images.
- (Images continue to render regardless of status code, and this is
- sometimes used in practice for 404 images.)
-* Responses that could not have been parsed for the target. For
- example, files sniffed as HTML cannot be parsed as JavaScript, and
- non-SVG text files cannot be parsed as images.
-
-We consider it harmless to block such network responses.
-
-We only plan to enforce the policy on web renderer processes. Extension
-processes in Chrome are allowed to request more documents (based on the host
-permissions in the extension's manifest), and we could later enforce a similar
-policy that accounts for their permissions. Plugin processes currently have an
-exception as well since their requests currently go through the renderer
-process, but this will be changed in https://crbug.com/778711.
-
-Unfortunately, we do have to give up some security properties when extensions
-with content scripts are installed. Such extensions can request permission in
-their manifest to make XmlHttpRequests to other sites from within the renderer
-process. We cannot block such documents from the renderer process, which would
-allow an exploited renderer to also access such documents. We are investigating
-how to update the content script security model to make this less of a concern
-in practice.
-
-### Compatibility Results
-
-To measure compatibility, we ran an experiment that collected user metrics on
-how many network responses would be blocked using our policy. Our experiment
-followed the policy described above, with two caveats. First, it incorrectly
-blocks cross-site SVG files. Second, it incorrectly blocks cross-site requests
-made by extension content scripts. Using one week of data collected from Chrome
-Beta users (using Chrome's opt-in UMA system), we found that 0.16% of network
-responses were blocked overall, but more than half of these we could prove to be
-non-disruptive (e.g., error status code). Only 0.075% of network responses were
-potentially disruptive.
-
-We intend to refine our experiment to avoid blocking content scripts and SVG
-files. Based on the data we collected, we found that content scripts could
-account for up to 0.009% of responses. Accounting for SVG files could let us
-conclude that up to another 0.063% of responses were not disruptive. This
-suggests that our updated policy could be disruptive for as few as 0.003% of
-network responses.
-
-Using these results, we have started to deploy the policy to users who have Site
-Isolation enabled in Chrome 63. In combination with our other Site Isolation
-work, this can help protect confidential documents from leaking to other sites.
-
-### Current Policy
-
-The current document blocking policy protects HTTP responses for URLs labeled
-with one of these MIME types in the "Content-Type" HTTP response header:
-
-* text/html
-* text/xml
-* application/xml
-* application/rss+xml
-* application/json
-* text/json
-* text/x-json
-* text/plain
-
-The HTTP response should also have a "X-Content-Type-Options: nosniff" HTTP
-response header, which ensures that the protection will not depend on what the
-contents of the file look like.
-
-Note that we recommend not supporting [multipart range
-requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests) for
-sensitive documents, because this changes the MIME type to multipart/byteranges
-and makes it harder for Chrome to protect.
-
-In addition to the recommended cases above, Chrome will also do its best to
-protect responses labeled with any of the MIME types above and without a
-"nosniff" header, but this has limitations. Many JavaScript files on the web are
-unfortunately labeled using some of these MIME types, and if Chrome blocked
-access to them, existing websites would break. Thus, when the "nosniff" header
-is not present, Chrome first looks at the start of the file to try to confirm
-whether it is HTML, XML, or JSON, before deciding to protect it. If it cannot
-confirm this, it allows the response to be received by the cross-site page's
-process. This is a best-effort approach which adds some limited protection while
-preserving compatibility with existing sites. We recommend that web developers
-include the "nosniff" header to avoid relying on this approach.
-
-### Presentation
-
-#### Tech Talk: Cross-Site Document Blocking
-
-### References
-
-\[1\] Huang, Lin-Shung, et al. "Protecting browsers from cross-origin CSS
-attacks." Proceedings of the 17th ACM conference on Computer and communications
-security. ACM, 2010. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/index.md b/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/index.md
deleted file mode 100644
index a705734e495..00000000000
--- a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: bluetooth-design-docs
-title: Bluetooth Design Docs
----
-
-## README documents
-
-See [README documents in source
-code](https://code.google.com/p/chromium/codesearch#search/&q=file:bluetooth.*README&sq=package:chromium&type=cs).
-
-## Supporting Documents
-
-Additional documentation in other formats. These should be linked from README
-files, but are also linked here. They may be hosted directly on this site.
-
-### Google Documents
-
-* [Initial Design
- Doc](https://docs.google.com/document/d/1MBOLc1J09xhmEy9As17Rii4asM7u60LluRIv-OPPARM/edit)
-* [Blocklist](https://docs.google.com/document/d/158gc43rbwXrHbk1lPCBIbImQ8un0IEasIT6oLUSyssw/edit)
-* [Bluetooth platform abstraction layer
- Testing](https://docs.google.com/document/d/1mBipxn1sJu6jMqP0RQZpkYXC1o601bzLCpCxwTA2yGA/edit?usp=sharing)
-* [Web Platform Bluetooth
- Testing](https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/edit)
-* [Internals
- Page](https://docs.google.com/document/d/1wa96bCrB2Iw7tTI-fWsKmhLB7_ffF12frGIjRvhaj9E/edit)
-
-### Sub pages
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.dia.sha1 b/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.dia.sha1
deleted file mode 100644
index 51d5b3e080a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.dia.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a719d1d706c50d03fcb321b1e43268f4a76e19df \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.svg.sha1 b/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.svg.sha1
deleted file mode 100644
index d3caf822a10..00000000000
--- a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0bb9aae0c973040773fb67597bd9ae585358e614 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/index.md b/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/index.md
deleted file mode 100644
index 601ae7f17f9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/bluetooth-design-docs
- - Bluetooth Design Docs
-page_name: web-bluetooth-through-bluetooth-android-class-diagram
-title: Web Bluetooth through Bluetooth Android class diagram for getCharacteristic,
- getPrimaryService
----
-
-Diagram of some classes used in Web Bluetooth implementation down through the
-Android implementation of Bluetooth.
-
-Source file (attached) can be edited with [dia](http://dia-installer.de/)
-program. Authored by tommyt@opera.com, updated by scheib@chromium.org.
-
-[<img alt="image"
-src="/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.svg">](/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram/WebBluetoothThroughBluetoothAndroid.svg) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/browser-components/cookbook/index.md b/chromium/docs/website/site/developers/design-documents/browser-components/cookbook/index.md
deleted file mode 100644
index 436c8f2c082..00000000000
--- a/chromium/docs/website/site/developers/design-documents/browser-components/cookbook/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/browser-components
- - Browser Components
-page_name: cookbook
-title: Cookbook
----
-
-[Browser Components / Layered Components
-Cookbook](/developers/design-documents/cookbook) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/browser-components/index.md b/chromium/docs/website/site/developers/design-documents/browser-components/index.md
deleted file mode 100644
index 103e66a4922..00000000000
--- a/chromium/docs/website/site/developers/design-documents/browser-components/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: browser-components
-title: Browser Components
----
-
-You probably intended to find one of these pages:
-
-[Browser Components / Layered Components
-Cookbook](/developers/design-documents/cookbook)
-
-[Life of a Browser
-Component.pdf](/developers/design-documents/cookbook/Life%20of%20a%20Browser%20Component.pdf)
-
-[Layered Components:
-Design](/developers/design-documents/layered-components-design)
-
-[Layered Components: Technical
-Approach](/developers/design-documents/layered-components-technical-approach)
-
-[Structure of Layered Components Within the Chromium
-Codebase](/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.graffle.sha1
deleted file mode 100644
index fb2ee6f40dc..00000000000
--- a/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-31ae391387768b9b95d2250dc9e0d9fc0c688940 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.png.sha1 b/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.png.sha1
deleted file mode 100644
index b0a73a67790..00000000000
--- a/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-98fd3d6633fc62feb9982d48d4c8bbf7af531187 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow2.png.sha1 b/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow2.png.sha1
deleted file mode 100644
index b0a73a67790..00000000000
--- a/chromium/docs/website/site/developers/design-documents/browser-window/BrowserWindow2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-98fd3d6633fc62feb9982d48d4c8bbf7af531187 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/browser-window/LunaBrowserWindow.png.sha1 b/chromium/docs/website/site/developers/design-documents/browser-window/LunaBrowserWindow.png.sha1
deleted file mode 100644
index 20e5fe307a6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/browser-window/LunaBrowserWindow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f1fe7d79d6c8ec0924594e1e00a3398b8f8f6117 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/browser-window/index.md b/chromium/docs/website/site/developers/design-documents/browser-window/index.md
deleted file mode 100644
index 62496de0b67..00000000000
--- a/chromium/docs/website/site/developers/design-documents/browser-window/index.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: browser-window
-title: Browser Window
----
-
-The Chromium browser window is represented by several objects, some of which are
-included in this diagram:
-
-[<img alt="image"
-src="/developers/design-documents/browser-window/BrowserWindow2.png">](/developers/design-documents/browser-window/BrowserWindow2.png)
-
-## Frame
-
-The frame is the portion of the browser window that includes the title bar,
-sizing borders, and other areas traditionally known as the "non-client" areas in
-Windows terminology. We supply a frame (called BrowserFrame) that subclasses the
-views::Widget class that adds some additional handling on Vista for DWM
-adjustments behind the TabStrip, etc.
-On Windows Vista, we only use the glass mode when desktop compositing is
-enabled; in Classic or Vista Basic modes we use the XP Luna mode. Because the
-user is able to toggle the compositing on and off by changing Windows themes, we
-need to be able to dynamically change frame mode. For more information about how
-this is done in views, see the [views::Widget](goog_1235887298838)[
-documentation](/developers/design-documents/views-windowing). The browser window
-provides two NonClientFrameView subclasses - GlassBrowserFrameView and
-OpaqueBrowserFrameView which are swapped in the BrowserFrame's NonClientView
-when DWM is toggled.
-
-Browser View
-
-The BrowserView object contains all of the elements that are common between the
-frames that are part of the presentation of the browser window - the tab strip,
-the toolbar, the bookmarks bar, and other elements of the UI. When the frame
-changes, this View is inserted into the new NonClientView.
-
-The BrowserView implements an interface called BrowserWindow, which the Browser
-object uses to interact with the View.
-
-## Browser
-
-This is the core state and command execution component of a Browser window. It
-interacts with an abstract Browser Window interface to update the UI. This
-allows us to write unit tests that supply a windowless "testing view" and then
-execute high-level functionality within the browser from within the unit testing
-framework, rather than running UI tests. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsArchitecture.png.sha1 b/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsArchitecture.png.sha1
deleted file mode 100644
index 25f03799921..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsArchitecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-97a558d0d7736a8d6752934d25e37d407f869d16 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsStack.png.sha1 b/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsStack.png.sha1
deleted file mode 100644
index a33b30b7956..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ChapsStack.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f9f1aaacca92ad41048feea6beb141770ba9d894 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ClassHierarchy.png.sha1 b/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ClassHierarchy.png.sha1
deleted file mode 100644
index 6949e448cf9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/ClassHierarchy.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-404d8468d87af70c0390f839ae6f913279265d11 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/KeyHierarchy.png.sha1 b/chromium/docs/website/site/developers/design-documents/chaps-technical-design/KeyHierarchy.png.sha1
deleted file mode 100644
index 9fba4a7ac55..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/KeyHierarchy.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c2b825358fcdd919e102b2ac636477ef7b255ada \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/index.md b/chromium/docs/website/site/developers/design-documents/chaps-technical-design/index.md
deleted file mode 100644
index f95b9bfbcc9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chaps-technical-design/index.md
+++ /dev/null
@@ -1,537 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: chaps-technical-design
-title: Chaps Technical Design
----
-
-[TOC]
-
-## Objective
-
-Chaps is a PKCS #11 implementation that provides trusted platform module (TPM)
-backed cryptographic services. It replaces openCryptoki as the provider of
-TPM-backed cryptographic services on Chrome OS. It aims to improve speed and
-reliability of cryptographic token operations as well as to provide a simpler
-and more flexible codebase for future enhancements. Chaps works with a TCG
-Software Stack (TSS). On Chrome OS the TrouSerS TSS implementation is used, but
-Chaps is not limited to working with TrouSerS. The name "Chaps" has no real
-significance other than its fitness as a name for a layer above TrouSerS.
-
-The following diagram illustrates where Chaps fits in the cryptographic services
-stack.
-
-[<img alt="image"
-src="/developers/design-documents/chaps-technical-design/ChapsStack.png">](/developers/design-documents/chaps-technical-design/ChapsStack.png)
-
-## Rationale
-
-The motivation for creating Chaps and phasing out openCryptoki is threefold:
-
-* Stability - There have been numerous bugs and quirks that are
- difficult to find and sometimes messy to fix. We want a module that
- is designed to be highly testable and that lends itself to automated
- testing.
-* Performance - TPMs are notoriously slow, and we want to both
- leverage security and optimize performance.
-* Integration - We want a module that integrates well with Chrome OS
- and how Chrome OS uses TPM-backed cryptographic services.
- openCryptoki does not meet this criteria, and some future
- considerations, such as multi-token scenarios, are not possible with
- openCryptoki. We also want code that will be easy to enhance in the
- future.
-
-## Audience
-
-This document is for engineers, system integrators, and security analysts
-interested in the details of Chrome OS security.
-
-## Resources
-
-The following resources provide useful background to this document:
-
-* [TrouSers PKCS #11 Interface
- Docs](http://trousers.sourceforge.net/pkcs11.html): OpenCryptoki is
- currently used with a plugin from the TrouSerS project to provide
- the TPM-specific implementation. This link provides details on the
- plugin and the model it implements.
-* [PKCS #11: Cryptographic Token Interface
- Standard](http://www.rsa.com/rsalabs/node.asp?id=2133)
-* [TCG Software Stack
- Specification](http://www.trustedcomputinggroup.org/files/resource_files/6479CD77-1D09-3519-AD89EAD1BC8C97F0/TSS_1_2_Errata_A-final.pdf)
-
-## Overview
-
-Chaps has two major components:
-
-* chapsd - A daemon that receives and handles PKCS #11 calls via the
- D-Bus. This daemon is always running and starts at boot.
-* libchaps.so - A library that exports the PKCS #11 interface and
- communicates with chapsd. An application loads and uses this library
- like any other PKCS #11 library.
-
-Chaps reports two slots: (1) a system slot (not currently enabled) and (2) a
-user slot. The system slot will always have a token available. The user slot
-will have a token available while a user is logged in. chapsd receives
-login/logout notifications from cryptohome. The login notification must provide
-the user password (or some password-derived value) that will be used as
-authorization data for TPM-protected keys. Cryptohome derives the authorization
-data from the user password and a user-and-system-specific salt value using the
-scrypt key derivation scheme.
-
-This diagram shows the Chaps high-level architecture:
-
-[<img alt="image"
-src="/developers/design-documents/chaps-technical-design/ChapsArchitecture.png">](/developers/design-documents/chaps-technical-design/ChapsArchitecture.png)
-
-### Staging
-
-* Phase 1 (enabled in Chrome OS version 18) - Introduce chapsd:
- * Marshaling of all PKCS #11 calls from libchaps.so to chapsd.
- * chapsd redirection to openCryptoki.
- * Integration of libchaps.so with all PKCS #11 applications.
- * chapsd runs as chronos to play nice with existing openCryptoki
- files and facilitate a rollback in the event of unexpected
- problems.
-* Phase 2 (enabled in Chrome OS version 20) - Replace openCryptoki:
- * chapsd implementation (redirection to openCryptoki is removed).
- * chapsd runs as a system user named "chaps."
- * OpenCryptoki is removed from the system.
-* Phase 3 (optional) - Do more in software:
- * TPM-encrypted key store for faster RSA operations. A
- TPM-protected symmetric key is used to encrypt a key store
- outside of the TPM. This symmetric key will be much faster to
- load than RSA keys and can be temporarily cached. The RSA keys
- are then stored in the key store and the cryptographic
- operations are performed in software.
-
-## Infrastructures
-
-### Inter-Process Communication (IPC)
-
-All IPC with chapsd is performed using D-Bus. Both the Chaps client and daemon
-use dbus-c++ to generate proxy and adaptor classes.
-
-### Persistence
-
-Object data is stored in /var/lib/chaps for the system token and in ~/.chaps for
-each user. The object database is implemented using LevelDB.
-
-### TPM Software Layers
-
-The TrouSers library is used to access TPM services from the TSPI layer.
-
-### Testing
-
-Unit tests for Chaps use the gtest and gmock frameworks. End-to-end tests use
-the autotest framework.
-
-## Detailed Design
-
-### TPM Interaction
-
-#### Phase 1 - Introduce chapsd:
-
-In Phase 1 all TPM interaction is still controlled by openCryptoki. The
-introduction of chapsd does not change TPM interaction in any way.
-
-#### Phase 2 - Replace openCryptoki:
-
-All RSA private keys with the attribute CKA_TOKEN set to TRUE will be bound to
-the TPM (wrapped by the Storage Root Key) and will not be extractable. All other
-private data and non-RSA keys are stored encrypted by the User Encryption Key
-which is protected by the TPM’s SRK but is extractable. This diagram depicts the
-key hierarchy:
-
-[<img alt="image"
-src="/developers/design-documents/chaps-technical-design/KeyHierarchy.png">](/developers/design-documents/chaps-technical-design/KeyHierarchy.png)
-
-##### Authorization Data
-
-Authorization data for the User Authorization Key is derived from the user
-password using the scrypt scheme. Salt is stored in a root-accessible file in
-the user’s home directory and is unique per user account per system. This
-ensures that authorization data for the same user on two different systems is
-different. The scrypt parameters are tuned to perform the computation in about
-100ms.
-
-All other authorization data is randomly generated and stored encrypted with the
-User Encryption Key. This authorization data is not directly encrypted with the
-User Authorization Key for performance reasons. This does not reduce security
-since any attack on the key would require access to the TPM (and so decryption
-of authorization data by the TPM would be possible).
-
-##### Migration
-
-Existing TPM-protected keys cannot be migrated to this hierarchy. The existing
-hierarchy is supported so that existing keys can continue to be used. All other
-data including meta-data associated with TPM-protected keys that was previously
-stored in the openCryptoki object store can be migrated to the new persistent
-object store. This migration will take place when valid openCryptoki object data
-is found in a user’s home directory and migration has not previously taken
-place.
-
-##### Multiple Users
-
-In the future, simultaneous multiple user logins may need to be supported, and
-this design must accommodate this scenario. Each slot maintains a distinct
-object database, a distinct User Authorization Key and User Encryption Key, and
-uses a distinct password. Currently, only the "system" and "user" slots exist,
-but adding a new user would be as simple as adding another slot.
-
-#### Phase 3 - Do more in software:
-
-The key hierarchy for Phase 3 is the same as for Phase 2. The difference is that
-in Phase 3 some RSA keys can be protected by the User Encryption Key rather than
-being directly TPM-protected. Keys that require higher performance and do not
-require the high security of direct TPM binding are candidates for this. There
-is no migration of existing RSA keys because they are not extractable.
-
-### Chaps Classes
-
-Chaps is implemented in C++ and makes wide use of mockable interfaces. This
-structure allows for a high level of unit test coverage. In general, all classes
-inherit from an interface class, and when one class interacts with another, it
-references the interface, not the implementation class.
-
-* ChapsInterface - This interface is the C++ equivalent of the IPC
- contract between the Chaps client and daemon. The actual interface
- used by dbus-c++ is described in XML. ChapsInterface is implemented
- on the client side by ChapsProxyImpl and on the daemon side by
- ChapsServiceRedirect (Phase 1) and ChapsServiceImpl (Phase 2). The
- following diagram shows the class hierarchy and how the classes
- interact in practice.
-
-[<img alt="image"
-src="/developers/design-documents/chaps-technical-design/ClassHierarchy.png">](/developers/design-documents/chaps-technical-design/ClassHierarchy.png)
-
-* ChapsProxyImpl - This class implements ChapsInterface and forwards
- all calls to an instance of the dbus-c++ generated proxy class.
-* ChapsAdaptor - This class implements the dbus-c++ generated adaptor
- interface and forwards all dbus calls to a ChapsInterface instance.
-* ChapsServiceRedirect - This class implements ChapsInterface and
- forwards all calls to a PKCS #11 library. In Phase 1 this class is
- hooked up to ChapsAdaptor and forwards incoming calls to
- openCryptoki. In Phase 2 this class will no longer be used.
-* ChapsServiceImpl - This class implements ChapsInterface and provides
- the actual Chaps implementation (in contrast to
- ChapsServiceRedirect). This class is hooked up to ChapsAdaptor (in
- Phase 2) and serves as the entry point of all calls to chapsd.
-* ChapsFactory - This class creates default instances of interface
- classes. In a test environment, a mock of this class can be
- configured to create the desired combination of real and mock
- objects.
-* SlotManager / SlotManagerImpl - This mockable class manages the
- state of all slots, the tokens in them, and maintains a list of
- sessions for each token.
-* Session / SessionImpl - This mockable class represents a session and
- manages all contextual information for a single session.
-* ObjectPolicy - An instance of this class is bound to each object; it
- enforces all policies specified in PKCS #11 for the particular
- object type. There is a subclass of this interface for each object
- type.
-* Object / ObjectImpl - This mockable class represents an object and
- is optionally persistent.
-* ObjectPool / ObjectPoolImpl - This mockable class represents an
- unordered group of objects. An ObjectPool may or may not be backed
- by an ObjectStore.
-* ObjectStore / ObjectStoreImpl - This mockable class implements a
- persistent object store. This is the only class that references the
- LevelDB API.
-* TPMUtility / TPMUtilityImpl - This mockable class interfaces with
- the TrouSerS library for interaction with the TPM.
-* ObjectImporter / OpencryptokiImporter - This mockable class imports
- objects from an external source. The openCryptoki-specific
- implementation imports objects from an openCryptoki database.
-
-### **Marshalling**
-
-All marshalling is performed by dbus-c++ with the exception of template
-arguments (that is, CK_ATTRIBUTE lists), which are serialized using the protobuf
-library.
-
-### Schema
-
-LevelDB is not relational, so a relational schema is not used. Objects are
-serialized and assigned a unique identifier. The keys in LevelDB are the object
-identifiers, and the values are serialized object blobs.
-
-### Deployment
-
-#### Phase 1
-
-Phase 1 deployment has the following goals:
-
-* The PKCS #11 system is fully functional following each individual
- CL. This is necessary because multiple repositories are involved
- (for example, chaps, cryptohome, chrome, init, …).
-* A full rollback is possible at any time.
-
-The following ordered deployment plan meets these goals:
-
-1. Both chapsd and libchaps.so are installed and fully functional.
- chapsd runs as chronos:pkcs11 in order to play nice with other
- applications loading openCryptoki directly.
-2. An upstart configuration file is added for chapsd so it starts
- before login and respawns automatically. It depends on tcsd and
- dbus.
-3. Chaps is added as a run-time dependency to the cryptohome ebuild.
-4. The cryptohome upstart configuration is modified to depend on
- chapsd.
-5. Cryptohome is modified to link against Chaps rather than
- openCryptoki.
-6. All other modules that use openCryptoki are modified (in any order)
- to use Chaps. This includes but is not limited to:
- 1. NSS in Chrome
- 2. vpn_manager
- 3. flimflam
- 4. wpa_supplicant
- 5. entd
-
-#### Phase 2
-
-Phase 2 deployment has the following goals:
-
-* The PKCS #11 system is fully functional at all times.
-* Migration is seamless to all users.
-* A partial rollback is possible for a limited time that will put a
- migrated user token back in the state it was in before migration.
- Modifications since migration will be lost; this works like
- restoring a backup.
-
-The following deployment plan meets these goals:
-
-1. When a token is migrated, all existing files are left intact and a
- database record is created to indicate that migration has taken
- place. Upon rollback, openCryptoki simply keeps working with these
- files as it did before migration.
-2. The switch is in the chapsd upstart configuration: the target
- library argument is removed to enable Phase 2 logic and is re-added
- in order to roll back.
-3. Finally, once confidence is established in the Phase 2 logic,
- cleanup tasks can be performed that preclude future rollbacks. These
- include:
- 1. Remove all openCryptoki-related files in the user token
- directory.
- 2. Remove all openCryptoki-related logic from cryptohome code.
- 3. Remove openCryptoki from the build.
-
-## Project Information
-
-The Chaps code resides in a Chromium OS git repository at
-<http://git.chromium.org/gitweb/?p=chromiumos/platform/chaps.git;a=summary>.
-
-## Internationalization and Localization
-
-The Chaps library returns the following strings which may need to be translated.
-It is assumed that manufacturer ID strings do not require translation. If a
-string does not appear in the Chrome OS user interface, it may not require
-translation.
-
-* C_GetInfo returns a library description.
-* C_GetSlotInfo returns a slot description.
-* C_GetTokenInfo returns a token label, token model, and token
- description.
-
-## Security Considerations
-
-The following table lists some threats that are mitigated by the Chaps system
-and provides details on how the threat is mitigated.
-
-<table>
-<tr>
-<td>Threat</td>
-<td>Mitigation</td>
-</tr>
-<tr>
-<td>Attacker gains access to a user’s cryptographic token services (for example, creates an unauthorized digital signature).</td>
-<td>chapsd only allows connections from authorized uids (chronos, root) using D-Bus policies.</td>
-</tr>
-<tr>
-<td>Attacker owns D-Bus identifier and spoofs cryptographic services.</td>
-<td>D-Bus policy only allows the "chaps" user to own the chapsd identifier.</td>
-</tr>
-<tr>
-<td>Attacker gains access to private data and keys by accessing run-time memory of the chapsd process.</td>
-<td>chapsd runs as the "chaps" user.</td>
-</tr>
-<tr>
-<td>Attacker gains access to private data and keys by accessing persistent data stored by chapsd.</td>
-<td>All private data and keys stored on disk are encrypted with the User Encryption Key and stored in the cryptohome partition.</td>
-</tr>
-<tr>
-<td>Attacker gains access to a user’s TPM-protected resources.</td>
-<td>TPM-protected resources are authorized by a secret derived from the user’s password and a root-accessible random salt value.</td>
-</tr>
-<tr>
-<td>Attacker stages Chaps persistent data in order to leverage a vulnerability in chapsd to gain control of chapsd.</td>
-<td>Chaps persistent data is modifiable only by the "chaps" user (<b>The data needs to be stored in a root-owned directory for this policy to be effective. See <a href="https://crbug.com/212630">crbug.com/212630</a>).</b> </td>
-</tr>
-</table>
-
-If a user is logged in and an attacker gains chapsd privilege, then nothing
-prevents this attacker from reading all private data and keys that are not
-TPM-protected and non-extractable or from creating digital signatures using
-TPM-protected, non-extractable keys. The following are TPM-protected:
-
-* RSA private keys (with modulus 2048 bits or less) that have
- CKA_TOKEN=TRUE.
-
-All objects with CKA_PRIVATE=TRUE are encrypted on disk with a TPM-protected
-key, even if they are not themselves TPM-protected. The following are not
-themselves TPM-protected (other than the on-disk encryption):
-
-* RSA private keys with modulus larger than 2048 bits.
-* RSA private keys with CKA_TOKEN=FALSE.
-* All objects that are not RSA private keys (for example, AES keys,
- data objects).
-
-### Key Storage Example
-
-Suppose you have a certificate with an associated private key used to negotiate
-802.1x and/or VPN connections. The following PKCS #11 objects would exist in the
-Chaps database:
-
-* Certificate: This object is public and is not encrypted.
-* Public Key: This object is public and is not encrypted.
-* Private Key: This object is private and is encrypted with the User
- Encryption Key. It holds the following attributes:
- * Authorization Data: This is random and specific to this key.
- * Private Key Blob: This is a TPM-wrapped blob.
-* Encrypted User Encryption Key: This is encrypted by the User
- Authorization Key.
-* User Authorization Key Blob: This is a TPM-wrapped blob.
-
-The following information would be in chapsd process memory while the token is
-loaded:
-
-* User Encryption Key: This has been decrypted using the User
- Authorization Key and the password-derived secret as authorization
- data.
-* The Certificate, Public Key, and Private Key, as listed above. The
- Private Key has been decrypted using the User Encryption Key.
-
-### Cryptography
-
-This section lists each way in which Chaps uses cryptography and gives details
-as to how it is used. In all cases where cryptography is used in software, Chaps
-uses the openssl crypto library to provide the underlying algorithm
-implementations.
-
-#### Random Numbers
-
-The openssl cryptographically strong pseudo-random-number-generator (PRNG) is
-used as a source of random numbers. It is seeded using the default openssl
-seeding mechanism (/dev/urandom on Chrome OS) in combination with 128 random
-bytes from the TPM. This seeding occurs only once per chapsd process.
-
-#### PKCS #11 Software Mechanisms
-
-Chaps supports a number of mechanisms in software that are not supported by the
-TPM (for example, SHA, HMAC, AES). The implementation of these mechanisms pass
-through directly to openssl, including padding and cipher modes, with the
-following exceptions:
-
-* The construction of RSA signing data. Chaps constructs the signing
- data itself and then employs the openssl RSA primitive. This
- approach guarantees signature compatibility between openssl and a
- TPM.
-* The generation of DES / DES3 keys. Chaps is still using openssl
- functions such as DES_is_weak_key() and the openssl PRNG.
-
-#### Encryption / Authentication of Persistent Objects
-
-Private object blobs are encrypted using AES-256-CBC with PKCS padding. An
-initialization vector (IV) is randomly generated for each encryption operation;
-it is appended to the encrypted blob. An HMAC-SHA512 mac is appended to each
-encrypted blob. This mac is verified before the decryption is attempted.
-Verification uses a version of memcmp that reads and compares all bytes
-regardless of where a mismatch is found.
-
-#### Authorization Data Hashes
-
-Once authorization data is derived from the user password or similar using
-scrypt, it is processed as follows:
-
-* An SHA-1 hash of the authorization data is computed and sent to the
- TPM. This hash is never stored on disk and is considered as
- sensitive as the user password.
-* An SHA-512 hash of the authorization data is computed and the first
- byte of the hash is stored in the token database. This allows Chaps
- to sanity-check incoming authorization data before sending it to the
- TPM. Only a single byte is stored because it allows a reasonable
- sanity check but it is not very useful for a brute-force attack
- against the authorization data or the user password.
-
-## Logging Plan
-
-All errors are logged using the facility provided by base/logging.h.
-
-## Testing Plan
-
-Chaps is tested using both unit and integration tests. All unit tests are run
-from the ebuild test phase. The integration tests can be run manually or with
-the autotest framework.
-
-### Unit / Integration Tests
-
-The classes generated by dbus-c++ are not suitable for stubbing / mocking for
-two reasons:
-
-* We don’t want dbus code running in the unit test environment.
- Problems with this approach have been noted on other projects.
-* The classes are tightly coupled with types and conventions that are
- specific to dbus-c++.
-
-A C++ interface is defined (ChapsInterface) that is very close to the generated
-proxy and adaptor interfaces but suitable for using and mocking in a test
-environment.
-
-#### Client-side Unit Tests
-
-The client-side code is unit tested by using a mock proxy and calling the PKCS
-#11 C interface. Because the code being tested is called by external code, all
-argument validation and internal state validation is tested thoroughly resulting
-in a high level of code coverage.
-
-#### Daemon-side Unit / Integration Tests
-
-Phase 1: There are no unit tests per se for the chapsd code in Phase 1 because
-each layer is either tightly coupled with D-Bus or tightly coupled with
-openCryptoki. The chapsd code is tested by a suite that verifies basic
-functionality of ChapsInterface methods. This test suite is then run on both a
-ChapsServiceRedirect instance and on a ChapsProxyImpl instance. These tests
-require a configured openCryptoki and, in the ChapsProxyImpl case, a running
-chapsd instance. Because of this requirement, the tests must be run on a live
-system, and they do not run as part of the ebuild test phase.
-
-Phase 2: The tests from Phase 1 are reused and are run on a ChapsServiceImpl
-instance and a ChapsProxyImpl instance. In the case of ChapsServiceImpl, a mock
-persistence object can be used, and the suite can run as a unit test. In the
-case of ChapsProxyImpl, the suite is run as an integration test and requires a
-running chapsd instance as in Phase 1. In addition to this, unit tests which are
-specific to a single class are run for the following classes:
-
-* SlotManager
-* Session
-* ObjectPolicy
-* Object
-* ObjectPool
-* ObjectStore
-* TPMUtility
-
-For each of these unit tests, any references to other objects are mocks. The
-following mocks are available:
-
-* ChapsFactoryMock
-* SlotManagerMock
-* SessionMock
-* ObjectPolicyMock
-* ObjectMock
-* ObjectPoolMock
-* ObjectStoreMock
-* ObjectImporterMock
-* TPMUtilityMock \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromeviews/index.md b/chromium/docs/website/site/developers/design-documents/chromeviews/index.md
deleted file mode 100644
index 27321dc10cf..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromeviews/index.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: chromeviews
-title: views
----
-
-### Overview and background
-
-Windows provides very primitive tools for building user interfaces. The system
-provides a few basic controls and native window containers, but building a
-custom user interface is difficult. Since we desired a differentiated aesthetic
-for Chromium, we have had to build a framework on Windows to accelerate our
-development of custom UI. This system is called views.
-
-views is a rendering system not unlike that used in WebKit or Gecko to render
-web pages. The user interface is constructed of a tree of components called
-Views. These Views are responsible for rendering, layout, and event handling.
-Each View in the tree represents a different component of the UI. An analog is
-the hierarchical structure of an HTML document.
-
-At the root of a View hierarchy is a Widget, which is a native window. The
-native window receives messages from Windows, converts them into something the
-View hierarchy can understand, and then passes them to the RootView. The
-RootView then begins propagation of the event into the View hierarchy.
-
-Painting and layout are done in a similar way. A View in the View tree has its
-own bounds (often imbued upon it by its containing View's Layout method), and so
-when it is asked to Paint, it paints into a canvas clipped to its bounds, with
-the origin of rendering translated to the View's top left. Rendering for the
-entire View tree is done into a single canvas set up and owned by the Widget
-when it receives a Paint message. Rendering itself is done using a combination
-of Skia and GDI calls — GDI for text and Skia for everything else.
-
-Several UI controls in Chromium's UI are not rendered using Views, however.
-Rather, they are native Windows controls hosted within a special kind of View
-that knows how to display and size a native widget. These are used for buttons,
-tables, radio buttons, checkboxes, text fields, and other such controls. Since
-they use native controls, these Views are also not especially portable, except
-perhaps in API.
-
-Barring platform-specific rendering code, code that sizes things based on system
-metrics, and so on, the rest of the View system is not especially unportable,
-since most rendering is done using the cross-platform Skia library. For
-historical reasons, many of View's functions take Windows or ATL types, but we
-have since augmented ui/gfx/ with many platform independent types that we can
-eventually replace these with.
-
-### Code Location and Info
-
-The base set of classes and interfaces provided by views can be found in the
-src/ui/views/ directory. All base views classes are in the "views" namespace.
-
-### Common Widgets
-
-In the views framework:
-
-* **WidgetWin**: The base class for all Widgets in views. Provides a
- basic child window control implementation. Subclass this directly if
- you are not making a top-level window or dialog.
-* **Window**: A top-level window. A subclass of WidgetWin.
-
-For more information on building dialog boxes and other windowed UI using
-Window, CustomFrameWindow, etc, read [views
-Windowing](/developers/design-documents/views-windowing).
-
-In the Chromium browser front end:
-
-* BrowserFrame: A subclass of Window that provides additional message
- processing for the Browser window in Chrome. See [Browser
- Window](/developers/design-documents/browser-window).
-* ConstrainedWindowImpl: A subclass of Window that provides the frame
- for constrained dialogs such as the HTTP basic auth prompt.
-
-### Other approaches
-
-At the start of the project, we began building the Chromium browser using native
-windows and the owner-draw approach used in many Windows applications. This
-proved to be unsatisfactory, since native windows don't support transparency
-natively, and handling events requires tedious window subclassing. Some early UI
-elements gravitated towards custom painting and event handling (e.g.
-Autocomplete), but this was very ad-hoc based on the circumstance.
-
-Existing UI toolkits for Windows are similarly unsatisfying, with limited widget
-sets, unnatural aesthetics, or awkward programming models.
-
-### Limitations/issues
-
-By and large, views makes it relatively easy to build complex custom UIs.
-However it has a few rough edges that can be improved over time:
-
-* The Event types currently are occasionally problematic - they crack
- the native windows message parameters and then discard them.
- Sometimes this information is useful.
-* Some ad-hoc message processing.
-* Mix of native controls that don't work properly until inserted into
- a View hierarchy attached to a Widget with a valid HWND. Many of our
- native controls have API methods that require them to exist within a
- window hierarchy. This means that they cannot be fully initialized
- until they are inserted. The View API will eventually be improved to
- make this clearer ([bug 5191](http://crbug.com/5191)).
-* The base Widget interface itself is somewhat frozen in time. Some
- improvement and consolidation would be worthwhile. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/debugging-with-nsight/index.md b/chromium/docs/website/site/developers/design-documents/chromium-graphics/debugging-with-nsight/index.md
deleted file mode 100644
index 199894113ff..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/debugging-with-nsight/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/chromium-graphics
- - Chromium Graphics // Chrome GPU
-page_name: debugging-with-nsight
-title: Debugging with Nsight
----
-
-As of the latest version of NVIDIA's Nsight (4.0 I believe), it is able to
-attach to chrome's GPU process and let us debug/profile low level D3D and OpenGL
-commands. It's also very useful for viewing the results of each draw call
-without having to write additional application code to display intermediate
-buffers.
-
-Here is what's needed to get it working:
-
-1. [Nsight
- 4.0](https://developer.nvidia.com/nsight-visual-studio-edition-downloads),
- Visual Studio and an NVIDIA GPU are required. There is an Eclipse
- version of Nsight but it has not been tested.
-2. Open any project in Visual Studio (just needs to be something to
- "run"), right click the startup project and select Nsight User
- Properties.
-3. Set the radio box to "Launch external program", check "Application
- is launcher" (this is the new feature as of 4.0) and set the command
- line arguments to at least --no-sandbox --disable-gpu-watchdog and
- --gpu-startup-dialog. --disable-gpu-program-cache is optional; if
- you use it, you're able to step through the shader source lines,
- otherwise only the disassembly is available.
-
- <img alt="image"
- src="https://ci6.googleusercontent.com/proxy/jZJ71Lb27tnACe7IEAzXJ1a5rrZjrAUFCniEVTbOGdZz3BzTeM0VRFze7sjkQ0pRHH_KJQ=s0-d-e1-ft#http://i.imgur.com/D8hV6un.png"
- height=322 width=562>
-
-4. From the NSIGHT menu in Visual Studio, select "Start Graphics
- Debugging". Wait until the gpu startup dialog shows up and connect
- to it.
-
- <img alt="image"
- src="https://ci6.googleusercontent.com/proxy/4fRaW0RTY8vzLezZMO6Tc0ufCjuvSSghj_N1051mvZNYjXb-fZ-W3McdrIpjt4Kcvr2gSA=s0-d-e1-ft#http://i.imgur.com/LZYlkk5.png"
- height=351 width=452>
-
-5. Navigate to any page you wish to debug. The Nsight HUD doesn't seem
- to be interactive with chrome though.
-6. When you want to debug a frame, go to the NSIGHT menu in Visual
- Studio and select "Pause and Capture Frame".
-7. Nsight will open a few overlays on top of chrome that let you step
- through the frame (check the taskbar, sometimes they appear behind
- chrome).
-
- <img alt="image"
- src="https://ci3.googleusercontent.com/proxy/sxy8xsEEHBWhzuFw_sEELFGPS9GxGqfD0Jq1jecBvQRYHNVRgaN26PeC6ZNyfoGZO_9kqg=s0-d-e1-ft#http://i.imgur.com/mgDSIf7.png"
- height=428 width=562>
-
-8. It will also open some new windows in Visual Studio for viewing the
- current D3D/GL state and allocated GPU resources, stepping through
- the shaders for debugging (recently caught a HLSL shader
- optimization bug this way), profiling the CPU/GPU speed of each call
- and finding out what kind of bottlenecks we're hitting (input
- assembly, pixel/vertex shader, texture fetch, blend, etc).
-
- <img alt="image"
- src="https://ci6.googleusercontent.com/proxy/Nhac3PCOnqwlM15eSjq9VIFWbGjF-Yt4nCUNmLAnqn35jV3U6a00nCeUktAMGeHAe7Pm4Q=s0-d-e1-ft#http://i.imgur.com/9l1sepp.png"
- height=349 width=562>
-
- <img alt="image"
- src="https://ci4.googleusercontent.com/proxy/oIUtpj1ylzdDBIBFlJHfq7QhHXmZjlA16pl7wTEEJux7IEeYbi4rU0TDqkDK0yzY2yzbHA=s0-d-e1-ft#http://i.imgur.com/0BN5YDv.png"
- height=349 width=562> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/graphics.png.sha1 b/chromium/docs/website/site/developers/design-documents/chromium-graphics/graphics.png.sha1
deleted file mode 100644
index 283f6469ce9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/graphics.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1775846b2c7ef0d70eed85aecb34b05d35d5ab17 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/gpuraster.png.sha1 b/chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/gpuraster.png.sha1
deleted file mode 100644
index d1d7e1f9961..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/gpuraster.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cb4357f16353690896fff259ba4c03ade228ef82 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/index.md b/chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/index.md
deleted file mode 100644
index 75f9bcdf2ad..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/chromium-graphics
- - Chromium Graphics // Chrome GPU
-page_name: how-to-get-gpu-rasterization
-title: How to get GPU Rasterization
----
-
-Chrome 37 introduced a GPU rasterizer. When enabled, some paint workloads can go
-from 100ms/frame to 4-5ms/frame.
-
-It doesn't run for all content, but is enabled as a combination of viewport
-settings and a device allow-list.
-
-### How to enable GPU rasterization:
-
-* **Chrome on Android version &gt;= 54** ([chromium rev
- 406004](https://bugs.chromium.org/p/chromium/issues/detail?id=591179#c16))
- * Define a viewport. (Either as a `<meta>` tag, or in CSS as
- @viewport).
- * Any viewport definition will work.
-* **Chrome on Android version &lt;= 53:**
- * Use a meta viewport tag containing `width=device-width` and
- `minimum-scale=1.0. For example:`
-
-```none
-<meta name="viewport" content="width=device-width, minimum-scale=1.0">
-```
-
- * It will *not* trigger if minimum-scale is set to "yes". "1.0" is
- explicitly required.
- * initial-scale and user-scalable may be set or not. They are not
- considered.
- * Supported devices:
- * All devices with Android &gt; 4.4
- * All devices with Android = 4.4 that support OpenGL ES &gt;=
- 3.0
- * Nexus devices (except Nexus 10)
-
-* **WebView:**
- * Enabled for all documents with the above viewport conditions
- specified in the meta tag.
- * Also enabled on all documents that *do not* specify any viewport
- in the meta tag.
-
-* **Chrome on Desktop**
- * In development (as of August 2015)
- * We will eventually enable GPU rasterization on all platforms and
- devices where we use the GPU for compositing. You can track
- progress towards this goal [here](http://crbug.com/419521).
-
-To use the experimental hardware rasterizer on all pages, regardless of device
-and content: --force-gpu-rasterization or
-`chrome://flags/#enable-gpu-rasterization`
-
-## GPU Rasterization Veto:
-
-Note that GPU rasterization can get vetoed based on the content itself. For
-example, if page contains many SVGs with non-convex paths (common for SVG
-icons), GPU rasterization may get disabled for that page load.
-
-### To see if you have GPU rasterization on:
-
-1. Check in about:gpu for "GPU Rasterization"
-2. Use the FPS meter to show the GPU status.
- * To open FPS meter, Open DevTools, hit Esc to open the console
- drawer, select Rendering, and check the FPS Meter
- * on, on (forced)
- * off (device) - not supported on the device
- * off (content) - supported on the device but content is veto'd
- for gpu rasterization
- * To see the content reason, record a trace using
- chrome://tracing (using cc) and search for the instant event
- 'GPU Rasterization Veto'. The veto reason will be listed
- within the Args.
- * off (viewport) - viewport trigger not available
-3. Take a [frame viewer recording using about
- tracing](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/frame-viewer).
- Click a frame. It will tell you if GPU raster is on.
-
-## GPU Rasterization Before/After
-
-[<img alt="image"
-src="/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/gpuraster.png"
-height=180 width=320>](http://gfycat.com/MediumSevereHermitcrab)
-
-In <http://gfycat.com/MediumSevereHermitcrab> you can view the before and after
-for GPU rasterization.
-
-On the left the content checkerboards because it isn't rasterized fast enough.
-On the right, we raster on the GPU and it keeps up with the fling very well. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/index.md b/chromium/docs/website/site/developers/design-documents/chromium-graphics/index.md
deleted file mode 100644
index 70364dff2b4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/index.md
+++ /dev/null
@@ -1,277 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: chromium-graphics
-title: Chromium Graphics // Chrome GPU
----
-
-**[<img alt="image"
-src="/developers/design-documents/chromium-graphics/graphics.png">](/developers/design-documents/chromium-graphics/graphics.png)**
-
-**Contacts**
-
-[graphics-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/graphics-dev)
-is the best way to get in touch with the folks knowledgeable about the Chromium
-graphics stack.
-
-**Starter Tasks**
-
-[Small to medium sized clean up task meta
-list](https://bugs.chromium.org/p/chromium/issues/detail?id=822915). Please ask
-on specific bugs if you want to start working on it and needs more guidance.
-
-**Technical Info**
-
-Start with this overview of [GPU accelerated compositing in
-Chrome](/developers/design-documents/gpu-accelerated-compositing-in-chrome),
-which includes an overview of the original non-accelerated path.
-
-For current status of feature development, see the [GPU architecture
-roadmap](/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap).
-
-To suggest and vote on presentation topics, see [Compositor/GPU/Graphics talks
-you want to
-see](https://docs.google.com/spreadsheets/d/1IUl8IumXjBvxZVcd-K84uEvMcE71hJSWkHhMn0Lshr4/edit?usp=sharing).
-
-Presentations:
-
-* List of [Googler-only presentation slides and
- videos](http://go/gpu-tech-talk-schedule)
-
-* [Life of a Pixel](http://bit.ly/chromium-loap)
-* [Surface
- Aggregation](https://docs.google.com/presentation/d/14FlKgkh0-4VvM5vLeCV8OTA7YoBasWlwKIJyNnUJltM)
- \[[googler-only
- video](https://drive.google.com/file/d/0BwPS_JpKyELWTURjMS13dUJxR1k/view)\]
-* [History of the World of Chrome Graphics part
- 1](https://docs.google.com/presentation/d/1dCfAxJYIgYlnC49SH3hIeyQVIlkbPPb9QRsKfp-6P0g/edit)
- \[[googler-only
- video](https://drive.google.com/file/d/0BwPS_JpKyELWUUhvUHctT1QzNDA/view)\]
-* [Blink Property
- Trees](https://docs.google.com/presentation/d/1ak7YVrJITGXxqQ7tyRbwOuXB1dsLJlfpgC4wP7lykeo)
- \[[googler-only
- video](https://drive.google.com/file/d/0BwPS_JpKyELWUE1lRWxPXzQtdE0/view)\]
-* [Compositor Property
- Trees](https://docs.google.com/presentation/d/1V7gCqKR-edNdRDv0bDnJa_uEs6iARAU2h5WhgxHyejQ)
- \[[googler-only
- video](https://drive.google.com/file/d/0BwPS_JpKyELWTTJ5aWNfenhPQ0k/view)\]
-* [The compositing stack after Surfaces/Display
- compositor](https://docs.google.com/presentation/d/1ou3qdnFhKdjR6gKZgDwx3YHDwVUF7y8eoqM3rhErMMQ/edit#slide=id.p)
-* [Tile
- Management](https://docs.google.com/presentation/d/1gBYqSX92dMHa_UFek3F0D0g4-dt8xvRq0hIifC2IS7Y/edit#slide=id.p)
- \[[googler-only
- video](https://drive.google.com/a/google.com/file/d/0B5eS4VhPbSBzUmZ2UVNZTm1wZmM/view?usp=sharing)
- and
- [notes](https://docs.google.com/document/d/16vWNxkI54E3swcq1IQvDR-LsPLXfhtlNh6Rbkbro2fI/edit#heading=h.57tap1txoipr)\]
-* [Impl-side
- painting](https://docs.google.com/a/chromium.org/presentation/d/1nPEC4YRz-V1m_TsGB0pK3mZMRMVvHD1JXsHGr8I3Hvc)
- \[[googler-only video](http://go/implside-painting-talk-video)\]
-* [TaskGraphRunner and raster task
- scheduling](https://docs.google.com/presentation/d/1dsPwTzJKaLPfd1wMwRkXz--5PqCa43n5L2_EhJ-Qb-g/edit#slide=id.g4dfba32bf_097)
- \[[googler-only
- video](https://drive.google.com/a/google.com/file/d/0BwPS_JpKyELWYXBVUDNfa2VLa3c/view)
- and
- [notes](https://docs.google.com/document/d/16vWNxkI54E3swcq1IQvDR-LsPLXfhtlNh6Rbkbro2fI/edit#heading=h.e1xk0xwayrkn)\]
-* [Checkerboards: Scheduling Compositor Input and
- Output](https://docs.google.com/presentation/u/2/d/1IaMfmCDspmpQwA1IGF6MP6XjuXwb2daxopAUwvgDOxM/edit#slide=id.p)
- \[[googler-only
- video](https://drive.google.com/a/google.com/file/d/0BwPS_JpKyELWQzlIckRsTFRHRDg/view)
- and
- [notes](https://docs.google.com/document/d/16vWNxkI54E3swcq1IQvDR-LsPLXfhtlNh6Rbkbro2fI/edit#heading=h.wjy9kg2zq8rl)\]
-* [Compositor and Display
- Scheduling](https://docs.google.com/presentation/d/1FpTy5DpIGKt8r2t785y6yrHETkg8v7JfJ26zUxaNDUg/edit?usp=sharing)
- \[[googler-only
- video](https://drive.google.com/a/google.com/file/d/0B_got0batQ0TUDJsUFRPeWVOcEk/view?usp=sharing)
- and
- [notes](https://docs.google.com/document/d/16vWNxkI54E3swcq1IQvDR-LsPLXfhtlNh6Rbkbro2fI/edit#heading=h.klitp6r86anv)\]
-* [Gpu
- Scheduler](https://docs.google.com/a/chromium.org/presentation/d/1QPUu0Nb2_nANLE8VApdMzzrifA6iG_BDG9Cd2L4BFV8/edit?usp=sharing)
- \[[googler-only
- video](https://drive.google.com/a/google.com/file/d/0BwPS_JpKyELWb0k0NmNURU1uclk/view)
- and
- [notes](https://docs.google.com/document/d/16vWNxkI54E3swcq1IQvDR-LsPLXfhtlNh6Rbkbro2fI/edit#heading=h.lnpsv7tfpoew)\]
-* [Image
- Decoding](https://docs.google.com/document/d/13UsG1IVEIqRg5yaQ9ZmF7dXQprI6KCrSy82CK7Xwfkw/edit)
- \[[googler-only
- video](https://drive.google.com/a/google.com/file/d/0BwPS_JpKyELWMEdQdlE2M29JUm8/view)
- and
- [slides](https://docs.google.com/presentation/d/1qLgH323yzj5yb9S7mJVmTxXtzsLyYjwgyeuJrgfLDgw/edit#slide=id.p)\]
-* [Native one-copy texture uploads for
- ChromeOS](https://01.org/blogs/2016/native-one-copy-texture-uploads-for-chrome-OS)
-* [Tessellated GPU Path
- Rendering](https://docs.google.com/presentation/d/1tyroXtcGwOvU1LPFxVU-vtBiDkLTcxZ62v2S9wqZ77w/edit#slide=id.p)
-* [Tessellating Edge-AA GPU Path
- Rendering](https://docs.google.com/presentation/d/1DpM5QS6kCkIqQN034Zz6oFm201Gd2wvq6Z30QfWNhcA/edit?usp=sharing)
-* [WebGL 2.0
- Updates](https://www.khronos.org/webgl/wiki/Presentations#September_2016_WebGL_Meetups)
- \[[googler-only
- presentation](https://docs.google.com/a/google.com/presentation/d/1_V_vDLTTpx7XX7_P2J-Nehy-adhdRJItiN-4Pm9QGHQ/edit?usp=sharing)\]
-* [Background on color
- spaces](https://docs.google.com/presentation/d/1c4zjeWDEpHG36gCPZmXjCH7Rlp5_N9p1qyHRIe0AALY/edit?usp=sharing)
- \[[googler-only
- video](https://drive.google.com/file/d/0B6kh5pYRi1dKWGMtaFU2MkZIVjQ/view?usp=sharing)\]
-* [Global Memory
- Coordination](https://docs.google.com/presentation/d/1H2TN3DMRBlOWrpMqqkWlYeKuc7ecGH4-3tr4zqH5LdQ/edit?usp=sharing)
-* [The RenderSurfaceLayerList data
- structure](https://docs.google.com/a/chromium.org/presentation/d/11f3A8cdfSSKmYazetxy9ochHuHqsmSEk3RW3DTYBDIc)
-* [OOP-D: Out-of-Process Display Compositor
- Talk](https://docs.google.com/presentation/d/1PfaIDZ5oJTEuAEJR8aj-B9QC-r1Pht_jQXwjifM1jQI/edit?usp=sharing)
-* [Chromium OS - Compositor
- Pipeline](https://docs.google.com/presentation/d/1MZ0QtHPwxc5yBdfLmsPMgqIhNel5_Uyki-Mem2usW9s/edit#slide=id.g1e31a87b8b_2_285)
- \[[video](https://drive.google.com/file/d/1TVxTBRzXG58268shmCcoeU4gTaQPxFJK/view)\]
-* [Chromium Fast Rounded
- Corners](https://docs.google.com/presentation/d/1Lhrm-1Rg97hQK3dQh_GS6DdhSyC1bZRcLmsj61HW-cA/edit#slide=id.g1e31a87b8b_2_285)
-
-**Design Docs**
-
-* [An organized list of design
- docs](https://github.com/ds-hwang/wiki/wiki/Chromium-docs)
-
-Major design docs:
-
-* [Graphics and Skia](/developers/design-documents/graphics-and-skia)
-* [Aura](/developers/design-documents/aura-desktop-window-manager)
-
- [Threaded
- compositing](/developers/design-documents/compositor-thread-architecture)
-
- [Impl-side
- painting](http://www.chromium.org/developers/design-documents/impl-side-painting)
-
- [Zero-input latency
- scheduler](https://docs.google.com/a/chromium.org/document/d/1LUFA8MDpJcDHE0_L2EHvrcwqOMJhzl5dqb0AlBSqHOY/edit)
-
- [GPU Accelerated
- Rasterization](https://docs.google.com/a/chromium.org/document/d/1Vi1WNJmAneu1IrVygX7Zd1fV7S_2wzWuGTcgGmZVRyE/edit#heading=h.7g13ueq2lwwd)
-
- [Property
- trees](https://docs.google.com/document/d/1VWjdq8hCJlNbak5ZyAsnLh-0--Hl_wht0xyuagODl8A/edit#heading=h.tf9gh6ldf3qj)
-
- Motivation for property trees: [Compositing Corner
- Cases](https://docs.google.com/document/d/1hajeBrjGuVG8EtDwyiQnV36oP_1mC8DO8N_7e61MiiE/edit#)
-
- [Unified BeginFrame
- scheduling](https://docs.google.com/document/d/13xtO-_NSSnNZRRS1Xq3xGNKZawKc8HQxOid5boBUyX8/edit#)
-
-More design docs:
-
-* [Video playback and the
- compositor](/developers/design-documents/video-playback-and-compositor)
-* [RenderText and Chrome UI text
- drawing](/developers/design-documents/rendertext)
-* [GPU Command
- Buffer](/developers/design-documents/gpu-command-buffer)
-* [GPU Program
- Caching](https://docs.google.com/a/chromium.org/document/d/1Vceem-nF4TCICoeGSh7OMXxfGuJEJYblGXRgN9V9hcE/edit)
-* [Surfaces](/developers/design-documents/chromium-graphics/surfaces)
- (New delegated rendering)
-
- [Ubercompositor](https://docs.google.com/a/chromium.org/document/d/1ziMZtS5Hf8azogi2VjSE6XPaMwivZSyXAIIp0GgInNA/edit)
- (Old delegated rendering)
-
-* [16 bpp texture
- support](https://docs.google.com/a/chromium.org/document/d/1TebAdNKbTUIe3-46RaEggT2dwGIdphOjyjm5AIGdhNw/edit)
-* [Image Filters](/developers/design-documents/image-filters)
-* [Synchronous compositing for Android
- WebView](https://docs.google.com/a/chromium.org/document/d/1jw9Xyuovw32NR73u6uQEVk7-fxNtpS7QWAoDMJhF5W8/edit)
-* [Partial Texture
- Updates](https://docs.google.com/a/chromium.org/document/d/1yvSVVgJ8bFyWjXGHpb8wDNtGdx8W5co7W0gbzjdFRj0)
-* [ANGLE WebGL 2
- Planning](https://docs.google.com/document/d/1MkJxb1bB9_WNeCViVZ4bf4opCH_NhqFn049xGq6lf4Q/edit?usp=sharing)
-* [Asynchronous GPU
- Rasterization](https://docs.google.com/a/chromium.org/document/d/1MAUJrOGMuD56hV4JhKp5bTgDv3d9rXRbAftviF8ZmWE/edit?usp=sharing)
- (Client side of GPU scheduling)
-* [Color correct rendering
- support](https://docs.google.com/document/d/1BMyXXTmiAragmt5ukVBIIOLDthd7JcJBgGMt-PwuTHY/edit#)
-* [PictureImageLayer and Directly Composited
- Images](https://docs.google.com/document/d/1sMGAkWhhZT8AfXCAfv4RjT1QxQnkpYKNFW6VXHB7kKk/edit#)
-* [Discardable GPU
- Memory](https://docs.google.com/document/d/1LoNv02sntMa7PPK-TZTuMgc3UuWFqKpOdEqtFvcm_QE/edit?usp=sharing)
-* [GL Command Buffer
- Extensions](https://chromium.googlesource.com/chromium/src/gpu/+/HEAD/GLES2/extensions/CHROMIUM)
- * [Mailbox
- Extension](https://chromium.googlesource.com/chromium/src/gpu/+/HEAD/GLES2/extensions/CHROMIUM/CHROMIUM_texture_mailbox.txt)
-* [cc::Surfaces for
- Videos](https://docs.google.com/document/d/1tIWUfys0fH2L7h1uH8r53uIrjQg1Ee15ttTMlE0X2Ow/edit#)
-* [Command Buffer Multi
- Flush](https://docs.google.com/document/d/1mvX3VGIrlWtIP8ZBJdzPp9Nf-7TfnrN-cyPy6angVU4/edit)
-* [Lightweight GPU Sync Points
- (SyncTokens)](https://docs.google.com/document/d/1XwBYFuTcINI84ShNvqifkPREs3sw5NdaKzKqDDxyeHk/edit)
-* [Gpu Service
- Scheduler](https://docs.google.com/document/d/1AdgzXmJuTNM2g4dWfHwhlFhs5KVe733_6aRXqIhX43w/edit#heading=h.o5mpe5uzxfv0)
-* [Expected Power Savings from Partial Tree
- Updates](https://drive.google.com/file/d/1KyGuiUm5jm50zsAKmaxAHcFclfbOhHVd/view)
-* [OOP-D: Out-of-Process Display
- Compositor](https://docs.google.com/document/d/1tFdX9StXn9do31hddfLuZd0KJ_dBFgtYmxgvGKxd0rY/edit?usp=sharing)
-* [Viz
- Hit-testing](https://docs.google.com/document/d/1iSZSHdZvV6fx8ee-9SidgIlAUAkxFQBNfjRc8I3PJuQ/edit)
-* [Display Compositing, SkiaRenderer, Skia
- compositing](https://docs.google.com/document/d/1-9zS9c_mJYluu_aX1FvKZuz63FG6R6lWybqJL16ndCo/edit)
-* [Chrome Windows Direct Composition
- Explainer](https://docs.google.com/document/d/1WpdM9VWd-c13IbxJF6eoY7dGaaguTsMXawANWoc36WE/edit?usp=sharing)
-* [Windows Video
- Overlays](https://docs.google.com/document/d/1hmjMKb1DU9ZD2_NzPfFQYGFS1Urc4dqr_mdGdQxPT-M/edit)
-* [Surface Synchronization API
- Guide](https://docs.google.com/document/d/1-54c3c9nZYKxPgKI_ALrpZrwDsXV5VVC2FHlgMh_TOY/edit?usp=sharing)
-
-**Infrastructure**
-
-* [GPU
- Testing](http://www.chromium.org/developers/testing/gpu-testing)
-* [Rendering
- Benchmarks](/developers/design-documents/rendering-benchmarks)
-
-**Other interesting links**
-
-* [How to get Ganesh / GPU
- Rasterization](/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization)
-* [Rendering Architecture
- Diagrams](/developers/design-documents/rendering-architecture-diagrams)
-* Blink:
- * [Presentation about Blink / Compositor
- interaction](https://docs.google.com/a/chromium.org/presentation/d/1dDE5u76ZBIKmsqkWi2apx3BqV8HOcNf4xxBdyNywZR8/edit#slide=id.p)
- * [Blink phases of
- rendering](https://docs.google.com/a/chromium.org/document/d/1jxbw-g65ox8BVtPUZajcTvzqNcm5fFnxdi4wbKq-QlY/edit#heading=h.rxj0p5cgef9y)
- * [How repaint
- works](https://docs.google.com/a/chromium.org/document/d/1jxbw-g65ox8BVtPUZajcTvzqNcm5fFnxdi4wbKq-QlY/edit#heading=h.rxj0p5cgef9y)
-* [Presentation on ANGLE architecture and
- plans](https://docs.google.com/presentation/d/1CucIsdGVDmdTWRUbg68IxLE5jXwCb2y1E9YVhQo0thg/pub?start=false&loop=false)
-* [Debugging Chromium with NVIDIA's
- Nsight](/developers/design-documents/chromium-graphics/debugging-with-nsight)
-* [Chromium WebView graphics
- slides](https://docs.google.com/a/chromium.org/presentation/d/1pYAGn2AYJ7neFDlDZ9DmLHpwMIskzMUXjFXYR7yfUko/edit)
-* [GPU Triage
- Guide](https://docs.google.com/document/d/1Sr1rUl2a5_RBCkLtxfx4qE-xUIJfYraISdSz_I6Ft38/edit#heading=h.vo10gbuchnj4)
-
-**Graphics Meetup Waterloo April, 2019**
-
-* [Roadmap](https://chromium.github.io/mus-preso/gpumeetup19/slides.html)
- (rjkroege)
-* [OOP-R](https://docs.google.com/presentation/d/1eOjb7CIbXAj3AXGjgWC_RnEY-qUe5ZMc8jfFXE-WPoE/edit)
- (enne)
-* [OOP-D](https://docs.google.com/presentation/d/1y2KWsTyrVxQ-WcVAKHywxwJGcABxotFqRQ4eTYlXomM/edit?usp=sharing)
- (kylechar)
-* [SkiaRenderer](https://docs.google.com/presentation/d/1r-pzeK26Ib5TE7qQbXUjLLsJbitF2Co-j_8sG06Wlr0/edit?usp=sharing)
- (backer)
-* [Test
- Infra/Bots](https://docs.google.com/presentation/d/1_BEinU9Jp-L4YGS_FsCTwV7vLLHRO1gW4AmNAtdsN4Q/edit?usp=sharing)
- (jonross)
-* [Android
- WebView](https://docs.google.com/presentation/d/1KpNg6AB1Ll8_A8dJCcjxc9pa_vmBLKhKnazJrdO5P7s/edit?usp=sharing)
- (boliu)
-* Animations (flackr, no link as it's google internal)
-* [Angle Status
- Update](https://docs.google.com/presentation/d/1KabL_0D-pVE5Oe2iGzCxxQhNC7-CPdR57EZ72jIItwI/edit?usp=sharing)
- (geofflang)
-* [Project
- Pastel](https://docs.google.com/presentation/d/1b22BAbf59juu6RBlJ7XqWFGV3Tj1Q_DftrU6MECDU28/edit?usp=sharing)
- (nicolascapens)
-* [Smooth Interactive
- Animations](https://docs.google.com/presentation/d/14Rfeg7j14zkfWzXT3erLIIOgolx_M6VuqP5NXlLwBCA/edit?usp=sharing)
- (majidvp)
-* [VRR on
- ChromeOS](https://docs.google.com/presentation/d/1RSjR4iYZihfV26uxuprpoq84Dy7-PoJNjquDdUAvdhc/edit?usp=sharing)
- (dcastagna)
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/aura ubercomp.png.sha1 b/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/aura ubercomp.png.sha1
deleted file mode 100644
index af9f7594249..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/aura ubercomp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-14fe28244c7072f990f10e1b821ba1d724fe28d6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/index.md b/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/index.md
deleted file mode 100644
index 8ad35c832d3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/index.md
+++ /dev/null
@@ -1,348 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/chromium-graphics
- - Chromium Graphics // Chrome GPU
-page_name: mac-delegated-rendering
-title: Mac Browser Compositor aka Mac Ubercompositor aka Mac Delegated Rendering
----
-
-On Mac, the terms “browser compositor”, “Ubercompositor”, and “delegated
-rendering” refer to the same thing. I will try to use “delegated rendering” to
-refer to this change in this document. This document describes the
-implementation of delegated rendering on the Mac.
-
-Throughout this document, I will try to color-code the data structures and
-functions by the process that they are in. Things in the renderer process are
-red, things in the browser process are blue, and things in the GPU process are
-green.
-
-Table of Contents:
-
-[TOC]
-
-# Delegated Rendering in Aura (Windows, Linux, Chrome OS)
-
-In Aura, the entire browser window is a single OpenGL surface. Everything that
-is drawn in that window (including the tab strip, the address bar, the
-min/max/close buttons) is drawn using OpenGL into that single OpenGL surface.
-<img alt="image"
-src="/developers/design-documents/chromium-graphics/mac-delegated-rendering/aura%20ubercomp.png"
-height=614px; width=624px;>
-
-Inside the browser process, inside the aura::WindowTreeHost, there exists a
-ui::Compositor (which is a wrapper around a cc::LayerTreeHost). This
-ui::Compositor generates, via its cc::LayerTreeHost, the actual OpenGL commands
-to be executed in the GPU process, to produce the pixels that appear in that
-OpenGL surface, for the whole window.
-
-Inside the renderer process, there exists another cc::LayerTreeHost which
-decides what is to be drawn for the web contents area. Instead of outputting
-pixels directly (know as “direct rendering”), this cc::LayerTreeHost outputs
-instructions for how to draw those pixels (in the form of a list of textured
-quads), which it sends the browser process, which adds those quads to the things
-it will draw inside its ui::Compositor.
-
-In this sense, the renderer has delegated producing actual pixels to the browser
-process, hence “delegated rendering”, as opposed to “direct rendering”. These
-concepts of “direct” versus “delegating” are made concrete in the cc::Renderer
-implementations -- there exists a cc::DelegatingRenderer for delegated
-rendering, and there exists a cc::DirectRenderer for direct rendering (with
-cc::GLRenderer for OpenGL-accelerated rendering and a cc::SoftwareRender for
-software rendering).
-
-Of note is that the browser process’ compositor is a direct renderer, while the
-renderer process’ compositor is a delegating renderer.
-
-Note on power+performance:
-
-In the Aura case, in the initial implementation (I think, this may be a lie),
-the renderer process used a direct renderer (rendering to a texture), and then
-we would draw the resulting image in the browser process’ direct renderer.
-
-This is bad for performance and power in that it uses up to 2x-3x the memory
-bandwidth to draw a single frame -- \[write pixel in renderer\] then \[read
-pixels in browser\] then \[write pixels in browser\] versus just \[write pixels
-in browser\]. I say 2x-3x, because both of those pipelines often involve a
-\[read pixels from tile textures\] stage, which makes it more 2x than 3x (other
-work also makes the improvement less dramatic).
-
-# Delegated Rendering on Mac
-
-On Mac, only the web contents part of the browser window is an OpenGL surface
-drawn by Chrome. The rest of the window is drawn using Cocoa, the native Mac UI
-API.
-
-<img alt="image"
-src="/developers/design-documents/chromium-graphics/mac-delegated-rendering/mac%20ubercomp.png"
-height=614px; width=624px;>
-
-This is because we don’t (yet) have a way to draw a native-feeling Mac UI using
-Aura. There is a project underway to do this (starting with non-browser-window
-UI such as task manager and app launcher).
-
-# Where the Actual ui::Compositor Lives on Mac
-
-Recall that in Aura, the aura::WindowTreeHost had the ui::Compositor which would
-draw the web contents (among other things). On Mac, we don’t have any such
-analogous place to put the ui::Compositor.
-
-Creating and destroying a ui::Compositor is very expensive (you have to set up a
-GPU command buffer, among other beasts), and keeping one around isn’t cheap
-either.
-
-One option would be that we could just hang the ui::Compositor off of the
-RenderWidgetHostViewCocoa (the NSView that displays web contents), but this
-would be one-or-more-ui::Compositors-per-tab, which would make creating and
-destroying tabs slow, and make tabs bloated.
-
-Instead there is a BrowserCompositorCALayerTree class, which owns the
-ui::Compositor and a sub-tree of CALayers which draw the contents of the
-ui::Compositor. This class can be recycled across different NSViews as needed.
-There is at most one spare instance of BrowserCompositorCALayerTree kept around
-for recycling.
-
-When a RenderWidgetHostViewCocoa is made visible, it creates a
-BrowserCompositorViewMac, which finds or creates a spare
-BrowserCompositorCALayerTree, and binds to that. The binding involves adding the
-CALayers of the BrowserCompositorCALayerTree to the CALayer tree backing the
-NSView. When the RenderWidgetHostViewCocoa is made invisible, it frees its
-BrowserCompositorViewMac, which allows the bound BrowserCompositorCALayerTree to
-either hang out and try to be recycled, or delete itself.
-
-There also exists a BrowserCompositorViewMacPlaceholder class, which acts as a
-hint that a BrowserCompositorCALayerTree may be needed soon, so keep one around
-to recycle.
-
-# Sending Delegated Frames from the Renderer To the Browser
-
-This is the sequence of steps by which a frame from the renderer is send to the
-browser compositor, and how the frame is acknowledged.
-
- When the renderer has a new frame that it wants drawn (maybe the cat is on
- top of the Roomba in this one), it sends a ViewHostMsg_SwapCompositorFrame
- from the content::CompositorOutputSurface in the renderer process to the
- browser process’s RenderWidgetHostImpl.
-
- The browser process’s RenderWidgetHostImpl then takes the frame information
- out of this message and passes to to its RenderWidgetHostView.
-
- The RenderWidgetHostViewMac and RenderWidgetHostViewAura have a
- DelegatedFrameHost, which acts as an interface between the
- RenderWidgetHostView’s ui::Compositor and the renderer. The frame
- information is passed to this DelegatedFrameHost.
-
- The RenderWidgetHostViewAura’s ui::Compositor is the ui::Compositor of
- the RenderWidgetHostViewAura’s aura::Window’s aura::WindowTreeHost (if
- it exists).
-
- Of note is that the interface between the RenderWidgetHostView and its
- ui::Compositor isn’t as explicit as it could be. The ui::Compositor can
- change at any time, and the DelegatedFrameHost only finds out about this
- by when it asks for the ui::Compositor from the RenderWidgetHostView and
- gets a different value than it got before. There are lots of bugs
- lingering here -- this should be set explicitly (see crbug.com/403011).
-
- Also of note is that RenderWidgetHostViewAndroid has a verbatim copy of
- a lot of the code in DelegatedFrameHost. We should consider making
- RenderWidgetHostViewAndroid use DelegatedFrameHost.
-
- The DelegatedFrameHost tells the ui::Compositor to draw a new frame with the
- updated contents.
-
- When the ui::Compositor does a commit (a step in the process of drawing a
- new frame), DelegatedFrameHost::SendDelegatedFrameAck is called, which sends
- a ViewMsg_SwapCompositorFrameAck to the renderer process'
- CompositorOutputSurface::OnSwapAck, telling the renderer that it can produce
- another frame now (perhaps the cat is wearing a shark costume in this one).
-
-Note that the way that the browser can tell the renderer “hey, you’re producing
-frames too fast for me to draw them” is by delaying when it does a commit, in
-the last step. This means that if the browser’s ui::Compositor stalls, then the
-renderer’s compositor will stop producing delegated frames.
-
-# Drawing Delegated (or any other kind of) Frames in the Browser Using IOSurfaces on Mac
-
-After the ui::Compositor does a commit in the above sequence of events, the
-compositor issues a bunch of OpenGL commands to draw things, followed by a
-glSwapBuffers. This describes that path.
-
-This only describes the IOSurface and CoreAnimation-based approach.
-
-1. While drawing a frame, the ui::Compositor is rendering into an
- IOSurface-backed texture
- * This is via an FBO, allocated and set up by
- ImageTransportSurfaceFBO using IOSurfaceStorageProvider
-2. When done drawing the frame, the ui::Compositor’s
- cc::LayerTreeHostImpl’s cc::OutputSurface will issue a glSwapBuffers
- to the GPU process.
- * The ui::Compositor’s cc::LayerTreeHost will now be blocked until
- its cc::OutputSurface has its OnSwapBuffersComplete method
- called.
-3. The command buffer will decode this and end up calling
- ImageTransportSurfaceFBO::SwapBuffers
- * This will send the IOSurface's ID to the browser process in a
- GpuHostMsg_AcceleratedSurfaceBuffersSwapped message.
-4. Processing of the SwapBuffers in the command stream in the GPU
- process will result in
- BrowserCompositorOutputSurface::OnSwapBuffersComplete being called
- in the browser process (this is done by the GpuControl::Echo
- mechanism).
- * On non-Mac platforms, this results in the cc::OutputSurface
- being un-blocked, un-blocking the ui::Compositor. This is
- undesirable on Mac, because this is insufficiently sensitive to
- GPU back-pressure.
- * To avoid this on Mac, the Mac will not call the super-class'
- cc::OutputSurface::OnSwapBuffersComplete inside
- BrowserCompositorOutputSurface::OnSwapBuffersComplete.
-5. The GpuHostMsg_AcceleratedSurfaceBuffersSwapped IPC will be received
- by GpuProcessHostUIShim in the browser process
- * Of note is that this goes through the RenderWidgetResizeHelper,
- so it will be able to be received even during a live resize.
-6. The GpuProcessHostUIShim will pass this to the static method
- BrowserCompositorViewMac::GotAcceleratedFrame. This will look up the
- BrowserCompositorCALayerTree corresponding to the output surface ID.
- * This call to
- BrowserCompositorCALayerTree::GotAcceleratedIOSurfaceFrame will
- create (if not created already) an IOSurfaceLayer (a sub-class
- of CAOpenGLLayer) and tell it that it needs to draw via
- -\[IOSurfaceLayer setNeedsDisplay:YES\] or -\[IOSurfaceLayer
- setAsynchronous:YES\].
- * It will also open the IOSurface ID that was sent from the GPU
- process and create an OpenGL texture backed by it.
-7. At some point the system will call -\[IOSurfaceLayer
- displayInCGLContext\], which is where the IOSurface is actually
- drawn
- * The OpenGL texture allocated in the above step is drawn here as
- a full-viewport quad
- * After this, the cc::OutputSurface is un-blocked, allowing the
- ui::Compositor to produce more frames (which, in turn, allows
- the renderer to produce more frames).
-
-Notes on power+performance:
-
-Note that we draw all of the content into the IOSurface-backed FBO, and then
-drew that FBO to the screen in the browser process. This is reduction in
-performance and increase in GPU power consumption.
-
-It is possible to draw directly to the browser process using the CAContext (aka
-CARemoteLayer API), discussed later.
-
-**Mechanism of GPU back-pressure:**
-
-> Note that between steps 6 and 7 above, we told CoreAnimation “hey, we’re a
-> CAOpenGLLayer and this is crazy, but we have a new frame, so call our draw
-> method maybe”. If the GPU is really busy, it may be more than one vsync
-> interval before the draw method is called. It is by this mechanism that
-> back-pressure is applied from the GPU to the ui::Compositor, to the renderer.
-
-Draw methods never being called:
-
-This back-pressure mechanism (the delay between steps 6 and 7) can sometimes
-mis-fire. Sometimes we just never end up getting the draw method called, just by
-a fluke. As a result, there is a DelayTimer set which fires 1/6th of a second
-after we ask CoreAnimation to draw us. If we haven’t drawn after this timer
-fires, we un-block the cc::OutputSurface anyway.
-
-Synchronous versus asynchronous drawing:
-
-The way that we say “please draw this IOSurfaceLayer or ImageTransportLayer” is
-not by calling -\[CAOpenGLLayer setNeedsDisplay\], but rather by calling
--\[CAOpenGLLayer setAsynchronous:YES\]. This results in CoreAnimation asking us,
-at (about) every vsync, “hey, do you have content ready for me to draw?”. This
-“CoreAnimation pulls from us” rather than “we push to CoreAnimation” is the best
-way to get smooth animation.
-
-The drawback is that we get a callback every vsync. If we don’t have any
-content, then this is just idle CPU cycles (and it can add up to a lot). To
-compensate for this, if we tell CoreAnimation “sorry, we don’t have new content
-ready for you” (in the -\[CAOpenGLLayer canDrawInCGLContext\] function) a
-certain number of times in a row, we switch to the -\[CAOpenGLLayer
-setAsynchronous:NO\] mode.
-
-This switching the isAsynchronous mode can cause problems when dynamically
-changing the content scale of the layer (no idea why, should probably file a
-Radar, cause this reproduces with a reduced test case), so, when we have to
-change the content scale of the layer, we destroy and re-create the
-CAOpenGLLayer.
-
-# Drawing Delegated (or any other kind of) Frames in the Browser Using CAContexts
-
-This is the mechanism by which we can draw directly into a CALayer in the GPU
-process, and have the content appear in the browser process.
-
-An API for this was introduced in 10.7 (the CARemoteLayer API), but was broken
-in 10.9. The replacement API (CAContext) was reverse-engineered, and appears to
-continue to work in 10.10.
-
-The sequence by which frames are drawn using CAContexts is as follows.
-
-1. While drawing a frame, the ui::Compositor is rendering (via its
- command buffer) into an OpenGL texture.
- * This is via an FBO, allocated and set up by
- ImageTransportSurfaceFBO using CALayerStorageProvider
-2. When done drawing the frame, the ui::Compositor’s
- cc::LayerTreeHostImpl’s cc::OutputSurface will issue a glSwapBuffers
- to the GPU process.
- * The ui::Compositor’s cc::LayerTreeHost will now be blocked until
- its cc::OutputSurface has its OnSwapBuffersComplete method
- called.
-3. The command buffer will decode this and end up calling
- ImageTransportSurfaceFBO::SwapBuffers
- * This will create (if not created yet) a CAContext and
- ImageTransportLayer (a subclass of CAOpenGLLayer), and will tell
- the ImageTransportLayer to draw via -\[ImageTransportLayer
- setNeedsDisplay\] or -\[ImageTransportLayer
- setAsynchronous:YES\].
-4. Processing of the SwapBuffers in the command stream in the GPU
- process will result in
- BrowserCompositorOutputSurface::OnSwapBuffersComplete being called
- in the browser process (this is done by the GpuControl::Echo
- mechanism).
- * On non-Mac platforms, this results in the cc::OutputSurface
- being un-blocked, un-blocking the ui::Compositor. This is
- undesirable on Mac, because this is insufficiently sensitive to
- GPU back-pressure.
- * To avoid this on Mac, the Mac will not call the super-class'
- cc::OutputSurface::OnSwapBuffersComplete inside
- BrowserCompositorOutputSurface::OnSwapBuffersComplete.
-5. At some point the system will call -\[ImageTransportSurfaceLayer
- displayInCGLContext\] in the GPU process
- * The OpenGL texture that was drawn to is drawn here as a
- full-viewport quad
- * After this, the GPU process will send the CAContext’s ID to the
- browser process in a GpuHostMsg_AcceleratedSurfaceBuffersSwapped
- message.
-6. The GpuHostMsg_AcceleratedSurfaceBuffersSwapped IPC will be received
- by GpuProcessHostUIShim in the browser process
- * Of note is that this goes through the RenderWidgetResizeHelper,
- so it will be able to be received even during a live resize.
-7. The GpuProcessHostUIShim will pass this to the static method
- BrowserCompositorViewMac::GotAcceleratedFrame. This will look up the
- BrowserCompositorCALayerTree corresponding to the output surface ID.
- * This call to
- BrowserCompositorCALayerTree::GotAcceleratedCAContextFrame will
- create a CALayer from the CAContext ID, if it has not been done
- already, which will make the frame appear on the screen (if this
- has been done already, then nothing needs to be done to get the
- content to appear on the screen.
- * Finally, the cc::OutputSurface is un-blocked, allowing the
- ui::Compositor to produce more frames (which, in turn, allows
- the renderer to produce more frames).
-
-# Stalling/Waiting for Frames in the Browser
-
-There are some times that the browser will want to pause for frames from the
-renderer. For instance, when resizing, we want to make sure that we do not allow
-the window to complete resizing to a new size until it has content for that
-size. This is accomplished by pumping a specialized nested run-loop which runs
-all tasks posted by the ui::Compositor and handles selected IPCs (the ones
-mentioned in this document, among others) from the GPU process and the renderer
-process.
-
-This restricted nested run loop is pumped inside the NSView’s setFrameSize in
-the WasShown function as well. There is substantial documentation of its
-behavior next to the definition of the RenderWidgetResizeHelper class. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/mac ubercomp.png.sha1 b/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/mac ubercomp.png.sha1
deleted file mode 100644
index 8c3dbf283a5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-delegated-rendering/mac ubercomp.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-822000e6d620606bd84c4c9b505ba0e32bbd36da \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-impl-events/index.md b/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-impl-events/index.md
deleted file mode 100644
index bb377cf37ef..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/mac-impl-events/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/chromium-graphics
- - Chromium Graphics // Chrome GPU
-page_name: mac-impl-events
-title: Handling Mac Overscroll On the Compositor Thread
----
-
-Design document is at
-
-https://docs.google.com/a/chromium.org/document/d/1ePfdAkOKh7DMc7UBOyyXrkmf_25e-d8zTJktAGHtcTw/edit \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/chromium-graphics/surfaces/index.md b/chromium/docs/website/site/developers/design-documents/chromium-graphics/surfaces/index.md
deleted file mode 100644
index b19564c8a75..00000000000
--- a/chromium/docs/website/site/developers/design-documents/chromium-graphics/surfaces/index.md
+++ /dev/null
@@ -1,259 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/chromium-graphics
- - Chromium Graphics // Chrome GPU
-page_name: surfaces
-title: Surfaces
----
-
-Goals
-
-Surfaces are a concept to allow graphical embedding of heterogeneous untrusting
-clients efficiently into one scene.
-
- embedding - the core concept of a surface is that it may contain references
- to surfaces from the same client or different clients
-
- heterogeneous - rendering to a surface does not require that a client use a
- specific library or toolkit, only that it be able to speak the surface
- protocol
-
- untrusting - a client does not have to trust its embedding or embedded
- clients in order to render into a surface. Having access to a surface from
- another client does not provide any access to that surface’s contents.
-
- efficiently - rendering to a surface should have minimal overhead compared
- to rendering directly to the native screen and should be equally efficient
- regardless of the embedding depth.
-
-Use cases
-
-In Chromium, we can use surfaces for many of the embedding cases we have today:
-
- embedding a blink-rendered tab in the browser’s UI
-
- embedding a plugin or video within a page
-
- embedding an iframe rendered from one process into an iframe rendered in a
- different process
-
-Concepts
-
-A Surface is a fixed size rectangle that can be rendered into by submitting
-frames. A client can create a surface by asking the SurfaceManager to construct
-one for a client (possibly itself) to render into. A Surface can be identified
-by two IDs generated by the SurfaceManager - one for identifying the surface
-when issuing frames to render to the surface, one to identify the surface when
-rendering from it to embed.
-
-A Frame is a series of quads to draw, some of which may reference other
-surfaces. A frame also contains a set of resources and associated
-synchronization points. Here’s a (rough) outline of the structure of a frame:
-
- List of prerequisite sequence numbers for the frame
-
- List of resources with associated synchronization points
-
- List of passes, each of which contains
-
- Transform of the pass
-
- Damage and output rects
-
- List of quads within the pass, each of which has
-
- Transform / rect / clip state / opacity / blend mode / etc (may be
- shared with other quads)
-
- Material - maybe solid color, texture, surface, etc
-
- Material-specific properties such as color, texture ID, surface ID
-
-The act of submitting a frame generates an implicit sequence number that can be
-used to synchronize presentation with other frames, potentially submitted by
-other clients. A surface identifier + sequence number tuple unique identifies a
-frame for all clients of an instance of the service (and there will typically
-only be one surface service in the system).
-
-A Display is a physical display (when Chromium is the operating system) or a
-native OS window object (when Chromium is running inside another operating
-system). The surface service provides a surface for each display for a
-designated client to issue frames to. In the case of Chromium running on
-windows, for example, the surface service would generate a surface identifier
-for each top-level HWND and provide them to the browser UI code to render into.
-
-Of particular note is that on Mac we can construct a display wrapping an
-IOSurface for each tab and let CoreAnimation composite the tabs with the browser
-UI. This does not provide the bandwidth benefits of ÜberCompositor but it does
-allow everything outside of the browser process to use the same presentation
-path as platforms using Aura/ÜberCompositor and reduce a lot of
-platform-specific complexity in our code.
-
-Processing model
-
-For clients:
-
-Whenever a client wants to update the rendering of a surface it owns, it
-generates a new frame and submits it to the SurfaceManager. This frame may
-contain quads that references surfaces being embedded by this client. A client
-does not have to issue a new frame whenever a surface it embeds updates its
-rendering. Issuing a frame also transfers ownership of resources (GL textures,
-software shared memory buffers).
-
-Whenever a client wants to start embedding another client, it first generates an
-appropriately sized surface through the SurfaceManager and then sends it to the
-client. The embedding client can start immediately issuing frames referencing
-the new surface or it may wait to receive an acknowledgement from the embedded
-client that the surface is ready, depending on the desired application
-semantics.
-
-Resizing is analogous to creating a new surface.
-
-For the service:
-
-Whenever the manager receives a new frame, it performs some sanity checks on the
-frame (i.e. making sure it only references frames that the client should be
-referencing) and then saves it in the surface’s potential frame list along.
-Whenever this frame’s prerequisites are satisfied, it is moved into the eligible
-frame list for the surface. Only one frame can be rendered for a given surface
-at a time, but a client is allowed to pipeline multiple frames.
-
-Whenever a display is ready for a new frame and something has changed, the
-service aggregates frames from the surfaces that contribute to that display and
-then renders them. The aggregation algorithm is simple:
-
- Start with the most recent eligible frame issued to the surface associated
- with the display
-
- Iterate through the quads in the frame in draw order, keeping track of the
- current clip and transform
-
- If the quad is not a reference to another surface, draw it
-
- If the quad is a reference to another surface, find the most recent
- eligible frame issued to the referenced surface
-
- If there is no such frame, or if this surface has already been
- visited in this aggregation (i.e. there’s a cycle) skip the surface
- quad
-
- Otherwise, recursively repeat this algorithm from step 2
-
-When the service knows that it will never render from a given frame again - for
-instance if it has started rendering a newer frame for a given surface or if the
-embedding client has told the manager that it wants to destroy a surface - the
-service sends an acknowledgement to the client with a set of resources to return
-to the client along with associated synchronization points.
-
-SurfaceService structure
-
-<img alt="image"
-src="https://docs.google.com/a/chromium.org/drawings/d/s_yolhxJiIsHvNqY0pwkVFw/image?w=624&h=431&rev=3&ac=1"
-height=431px; width=624px;>
-
-The SurfaceManager keeps track of all surfaces created in the system. For each
-surface, it keeps track of:
-
- The client that created the surface and will be embedding (rendering from)
- the surface
-
- The client that will be rendering into the surface (may be the same as the
- creator)
-
- List of submitted frames for the given surface
-
-The ResourceProvider keeps track of resources that the service has ownership of
-and how to return ownership to clients. For GL textures, for instance, this
-means managing mailboxes.
-
-The DisplayManager keeps track of all displays that the surface service is
-responsible for rendering into. For each display, the DisplayManager owns a
-surface used to render into the display as well as some state for hit testing
-against surfaces and determining which surfaces contributed to the display’s
-last produced frame.
-
-There is only one instance of each of the Manager types in an instance of the
-service.
-
-A SurfaceAggregator implements the aggregation algorithm and knows how to submit
-an aggregated frame to a renderer. Aggregators are (nearly) stateless and can be
-created whenever necessary.
-
-A Renderer translates an aggregated frame into draw commands appropriate for a
-given display. In GPU rendering mode, this means GL draw calls and a swap into
-the display. In software rendering mode, this means skia calls into the
-appropriate SkCanvas.
-
-Synchronization
-
-Resource synchronization is the same as it is with ÜberCompositor, with the
-slight simplification that the pipeline depth is not influenced by the nesting
-level of the embedding.
-
-Clients can optionally synchronize frames with each other using the prerequisite
-/ postrequisite synchronization points. This has to be done with care but can be
-useful to do things like prevent resize guttering. 99% of the use cases in
-Chromium will not require any explicit synchronization between different
-surfaces - in nearly all cases it’s perfectly fine (and desirable) to let
-clients render independently of each other.
-
-Here’s an example of a possible gutter prevention algorithm. Assume that client
-Alice is embedding client Bob and wants to resize its surface for Bob from
-100x100 to 200x200. If Bob responds fast enough to Alice’s resize message, Alice
-wants to make sure that Bob shows up at 200x200 in the same frame as Alice’s
-decorations.
-
-Start conditions:
-
-Alice is embedding Bob. Alice owns a 100x100 surface that Bob is rendering into.
-Alice and Bob both have pending frames referencing the 100x100 surface.
-
-Sequence for Alice:
-
- Alice decides to resize Bob to 200x200 and change decorations that Alice is
- rendering.
-
- Alice requests a new 200x200 surface from the SurfaceManager
-
- Alice sends Bob a resize request and a handle to the new 200x200 surface
-
- Alice starts a timeout
-
- If Bob responds to the resize message before the timeout:
-
- Alice issues the first frame referencing the 200x200 surface with a
- prerequisite sequence number that it got from Bob
-
- If Bob doesn’t respond before the timeout:
-
- Alice issues a frame referencing the 100x100 surface and appropriate
- quads to stretch or gutter as appropriate
-
- Regardless of when the resize response comes in, Alice issues a destroy call
- for the 100x100 surface to the SurfaceManager after starting to issues
- frames referencing the 200x200 surface.
-
-Sequence for Bob:
-
- Bob receives a resize message with the new surface identifier
-
- Bob issues a new frame appropriate for a 200x200 surface which generates a
- sequence number for the frame
-
- Bob sends a resize response to Alice with this sequence number
-
-End conditions:
-
-Alice and Bob are referencing a 200x200 surface
-
-The SurfaceManager knows that the 100x100 surface can be destroyed as soon as
-the service no longer needs it.
-
-If Bob is slow to respond, Alice may stall or submit one or more frames that
-gutter. However if Bob responds fast enough the service can guarantee using the
-sequence numbers that the new frame from Bob and the new decorations from Alice
-show up on screen at the same time. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/command-dispatch-mac/index.md b/chromium/docs/website/site/developers/design-documents/command-dispatch-mac/index.md
deleted file mode 100644
index 76b4ba5d341..00000000000
--- a/chromium/docs/website/site/developers/design-documents/command-dispatch-mac/index.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: command-dispatch-mac
-title: Menus, Hotkeys, & Command Dispatch (Mac)
----
-
-This document covers how toolbar buttons, the main menu bar, and some context
-menus are hooked up to the back-end Command infrastructure in Chromium on Mac OS
-X.
-
-## Background
-
-Menus are used in three places: the main menu, the toolbar menu, and the context
-menu for right clicks. Menus are constructed using the AppKit framework. The two
-relevant classes are NSMenu, and NSMenuItem.
-
-Mac OS X has a main menu bar that needs to update based on the front-most window
-as well as remain functional when there are no windows open (a situation which
-can't happen on Windows and Linux).
-
-## Construction
-
-The class MenuController and its subclasses are used to dynamically generate or
-modify menus.
-
-The nib file 'MainMenu.xib' generates the static portion of the main menu.
-
-e.g.
-
-The Bookmarks submenu of the main menu consists of:
-
-1. The static portion of the submenu generated by MainMenu.xib
-
-2. A dynamically updated portion generated by BookmarkMenuBridge.
-
-## Enabling/Disabling Menu Items
-
-The cross-platform (XP) infrastructure uses a CommandUpdater object to represent
-the enabled state of a set of commands. Each Browser object has a CommandUpdater
-allowing it to maintain unique state that differs from window to window. User
-interface views, such as menus or buttons, are responsible for querying the
-appropriate CommandUpdater "model" to obtain their enabled state.
-
-In cocoa, the "enabled" state is determined by sending the
-validateUserInterfaceItem: selector up the responder chain for each menu item.
-Despite the fact that MenuController implements validateUserInterfaceItem:, it
-may not be a part of the responder chain. The relevant
-validateUserInterfaceItem: implementation will vary from menu to menu. Most menu
-items are handled by the BrowserWindowController which asks its corresponding
-Browser's CommandUpdater for the enabled state of the command id given by the
-item's tag. This also handles toggling commands and updating the item's title to
-match current application state.
-
-In the case of buttons, the relevant controller (such as ToolbarController)
-registers for changes from the CommandUpdater using a CommandObserverBridge.
-When one of the relevant commands changes its state, the bridge sends
-enabledStateChangedForCommand:enabled: allowing the controller to update the
-enabled state of the button.
-
-For more information, see the [Apple documentation on User Interface
-Validation](http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/UIValidation/UIValidation.html#//apple_ref/doc/uid/10000040).
-
-## Menu Item Dispatch
-
-NSMenuItem has 3 important characteristics: the tag (XP id of the command), the
-hotkey/accelerator, and the action/target pair. There are two ways to invoke a
-menu item - by clicking on it, or by using the hotkey.
-
-**When a user selects a menu item by clicking on it:**
-
-1. BrowserCrApplication receives a sendAction:to:from: callback. It
- performs logging & exception handling. It forwards to its parent
- class.
-2. NSApplication invokes the action/target pair.
-3. If the NSMenuItem was created by a MenuController subclass, it may
- have a custom action/target pair. The target is sent the action, and
- processes the response. END
-4. By default, the NSMenuItem has action=commandDispatch:
- target=firstResponder. The tag contains the id of the command. There
- are 2 possible first responders.
-5. If there exists a relevant browser window, the first responder is
- BrowserWindowController, which forwards the invocation to
- BrowserCommandController::ExecuteCommandWithDisposition.
-6. Otherwise, the first responder is AppController, which processes the
- event in commandDispatch:.
-
-**When a user presses the hotkey associated with a menu item (and there exists a
-relevant browser window)**, ChromeEventProcessingWindow performKeyEquivalent: is
-invoked. It tries to process the hotkey as a extension action, or as a global
-keyboard shortcut (such as ctr+tab to move to next tab, see
-global_keyboard_shortcuts_mac.mm for more details). If it fails to process the
-hotkey, then an event is generated and goes through the same flow from directly
-clicking the menu item.
-
-**When a user presses the hotkey associated with a menu item (and there does not
-exist a browser window)**, an event is generated and goes through the same flow
-from directly clicking the menu item.
-
-There is also a commandDispatchUsingKeyModifiers: for dispatching commands that
-do different things based on the state of modifier keys (for example,
-command-clicking the "Home" button opens the home page in a new window).
-
-## General Hotkey Dispatch
-
-See figure 1.5 in the [Cocoa Event Handling
-Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW1).
-In Cocoa, an event can only be consumed a single time. The consumer priority is:
-
-1. Most OS shortcuts. e.g. (command+space) to invoke spotlight, or
- (command+alt+Esc) to invoke "force kill" dialog. Handled directly by
- Cocoa. No NSEvents are sent to Chrome.
-2. Application specific shortcuts, handled through -\[NSResponder
- performKeyEquivalent:\].
-3. Application specific shortcuts from the menu. Handled directly by
- Cocoa.
-4. Remaining OS shortcuts (e.g. command+\`) to shift through windows.
- Handled directly by Cocoa. No callbacks are sent to Chrome.
-5. View specific actions, handled through -\[NSWindow sendEvent:\],
- which becomes -\[NSView wheelScroll:\](or equivalent) at the view
- layer.
-
-Chrome wants to give websites a chance to process hotkeys first, so the process
-becomes confusing. When Chrome handles -\[NSResponder performKeyEquivalent:\],
-it marks the hotkey as consumed. The NSEvent never reaches steps 3 through 5.
-Chrome sends the event asynchronously to the renderer, which returns an
-asynchronous message indicating whether the event was consumed. If the event was
-not consumed, a new event is generated and passed through the entire cycle
-again, via -\[NSApp sendEvent:\]. The second time through, a flag is set so that
--\[NSResponder performKeyEquivalent:\] does not consume the event.
-
-One important fact is that if Chrome chooses to not consume the event in step
-(2), NSMenu shortcuts are guaranteed to attempt to consume the event (step 3).
-Furthermore, the remaining OS shortcuts in step (4) can be modified by the user.
-Therefore, there is no well established method for determining whether the
-system would attempt to consume an event without also letting Chrome's NSMenu
-shortcuts attempt to consume the event. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/compositor-hit-testing/index.md b/chromium/docs/website/site/developers/design-documents/compositor-hit-testing/index.md
deleted file mode 100644
index ebfed732c0e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/compositor-hit-testing/index.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: compositor-hit-testing
-title: Compositor (Touch) Hit Testing
----
-
-@leviw, @yusufo, @rbyers
-
-# Implementation status:
-
-# Implemented: [crbug.com/135818](http://crbug.com/135818), overhauled: [crbug.com/](http://crbug.com/248522)[248522](http://crbug.com/248522), [crbug.com/261307](http://crbug.com/261307)
-
-**NOW Obsolete** - replaced by much more elegant [RenderingNG hit
-testing](https://docs.google.com/document/d/1WZKlOSUK4XI0Le0fgCsyUTVw0dTwutZXGWwzlHXewiU/edit#heading=h.pzukwhsoocqx)
-
-## Background & Problem Statement
-
-User events such as a mouse click are received by the browser process, then
-marshaled to blink where the click event is hit tested through a page's DOM,
-checking for event handlers along the way. On touch-capable devices, a finger
-drag can be used to scroll the page, but a Touch event handler on the page may
-also optionally override this default behavior by calling
-[preventDefault](https://developer.mozilla.org/en-US/docs/DOM/event.preventDefault).
-Because there is no way to determine programmatically if an event handler will
-prevent this default scrolling behavior, if a Touch event occurs where there's
-an event handler, we have to first marshal the event to blink to run through its
-event handler. The blink thread is often slow to respond, particularly during
-page load, which can result in very long delays between a Touch intended to
-scroll the page, and the scroll actually occurring.
-
-The original solution for this problem was for blink to inform the embedding
-application of when a page had at least one Touch event handler registered. If
-there were no Touch event handlers registered, we wouldn't send the events to
-blink, and would scroll immediately. This document describes a more flexible
-solution where regions of the page where Touch event handlers are active are
-used by the compositor to avoid waiting for blink hit testing for as much of a
-page as is possible.
-
-### Project goal
-
-Remove latency for touch scrolling wherever possible without changing any
-behavior for pages that use touch event handlers. In particular we want to allow
-scroll to start quickly during page load on pages that have some touch handlers
-but are not covered by them.
-
-### Tracking hit test rects in blink
-
-In blink, we hook into the creation of Touch event handlers and track
-EventTargets with handlers in EventHandlerRegistry. During paint,
-HitTestDisplayItems are emitted for all objects with blocking event handlers. As
-an optimization, a cache of the HitTestDisplay item data is stored on PaintChunk
-for all display items in the chunk. Then, after compositing, all hit test rects
-for a cc::Layer are projected into the cc::Layer's coordinate space using
-PaintArtifactCompositor::UpdateTouchActionRects. This approach of painting hit
-test data is described in more detail in
-[PaintTouchActionRects](https://docs.google.com/document/d/1ksiqEPkDeDuI_l5HvWlq1MfzFyDxSnsNB8YXIaXa3sE/view#).
-
-### Hit testing in the compositor
-
-The hit testing is currently done just for the touchStart events since the point
-at which these event hit determines where the next train of events will be sent
-until we receive another touchStart (due to a different gesture starting or due
-to another finger being pressed on screen). On the compositor, (as of the fix
-for [bug
-](goog_353685820)[351723](https://code.google.com/p/chromium/issues/detail?id=351723))
-we do a ray cast at the point of the touch and consult the
-touchEventHandlerRegion for each layer until we hit a layer we know is opaque to
-hit testing. If there is a hit, the compositor forwards this touch event to the
-renderer and then it is sent to blink to be processed as usual. If there is no
-touchEventHandlerRegion that was hit, the compositor sends an ACK with
-NO_CONSUMER_EXISTS.
-
-### Browser side processing
-
-As far as the browser side is concerned, only the ACKs it receives for the
-outgoing touch events matter in determining the current state. Currently there
-are four states that the ACK can be at. INPUT_EVENT_STATE_ACK_UNKNOWN is the
-initial default state that the touch_event_queue is at and might not be used on
-different platforms(ex: Android). When a touchStart event comes the touch event
-queue on the browser side always sends this touch event through IPC to the
-compositor. Then the touch event queue waits for the ACK for that touchStart to
-make a decision about the rest of the touch events in queue.
-
-If it receives NO_CONSUMER_EXISTS, it stops sending touch events to the
-compositor until the next touchStart arrives and sends them directly to the
-platform specific gesture detector. This is mostly the case for regular browsing
-helps the gesture detector take over after a single touch event gets ACKed back
-from the compositor making it possible for the gesture to be generated fast
-enough to not cause any visible lag.
-
-If it receives either NOT_CONSUMED or CONSUMED, this means there was a hit in
-the touchEventHandlerRegion and we should continue sending the touchMoves and
-touchEnd following this event to the compositor (which will send them to the
-renderer without doing any hit testing). If the ACK was CONSUMED, then the
-touchEventHandler had called preventDefault and neither this particular touch
-event nor the rest of the touch events until the next touchStart should be sent
-to the gesture detector. If the ACK was NOT_CONSUMED, this might mean either the
-touchEventHandlerRegion was too conservative and when the touchStart was hit
-tested in blink it didn't hit any touchEventHandlers or the touchEventHandler
-didn't preventDefault or process that particular touch event. In this case the
-touch_event_queue still forwards this event to the gesture_detector. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/compositor-thread-architecture/index.md b/chromium/docs/website/site/developers/design-documents/compositor-thread-architecture/index.md
deleted file mode 100644
index ed8f58a9e64..00000000000
--- a/chromium/docs/website/site/developers/design-documents/compositor-thread-architecture/index.md
+++ /dev/null
@@ -1,182 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: compositor-thread-architecture
-title: Compositor Thread Architecture
----
-
-**## **&lt;jamesr, enne, vangelis, nduca&gt; @chromium.org****
-
-**### Goals**
-
-**The main render thread is a pretty scary place. This is where HTML, CSS, Javascript and pretty much everything on the web platform runs... or originates. It routinely stalls for tens to hundreds of milliseconds. On ARM, stalls can be seconds long. Sadly, it is not feasible to prevent all these stalls: style recalculation, synchronous network requests, long painting times, garbage collection, all these things have content-dependent costs.**
-**The compositor thread architecture allows us to snapshot a version of the page and allow the user to scroll and see animations directly on the snapshot, presenting the illusion that the page is running smoothly.**
-
-**### Background**
-
-**Some background on the basic frontend compositor archtecture, as well as Chrome’s gpu architecture, can be found here: <http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome>**
-
-**### Basic Approach**
-
-**The compositor is architected into two halves: the main thread half, and the “impl thread” half. The word “impl” is horribly chosen, sorry! :)**
-**The main thread half of the world is a typical layer tree. A layer has transformation, size, and content. Layers are filled in on-demand: layers can be damaged (setNeedsDisplayInRect). The compositor decides when to run the layer delegate to tell it to paint. This is similar to InvalidateRect/Paint model you see in most operating systems, but just with layers. Layers have children, and can clip/reflect/etc, allowing all sorts of neat visual effects to be created.**
-**The impl-side of the compositor is hidden from users of the layer tree. It is a nearly-complete clone of the main thread tree --- when we have a layer on the main thread, it has a corresponding layer on the impl thread. Our naming is a little strange but:**
-
-* **LayerChromium : the main thread version of a layer**
-* **CCLayerImpl : the impl-side verison of a layer**
-
-**The main thread tree is a model of what webkit wants to draw. The main thread paints layer contents into textures. These are handed to the impl tree. The impl tree is actually what gets drawn to the screen. We can draw the impl tree anytime, even while the main thread is blocked.**
-**Users of the LayerChromium tree can specify that layers are scrollable. By routing all input events to the impl thread before passing them to the main thread, we can scroll and redraw the tree without ever consulting the main thread. This allows us to implement “smooth scrolling” even when the main thread is blocked.**
-**Users of the LayerChromium tree can add animations to the tree. We can run those animations on the impl tree, allowing hitch-free animations.**
-
-**### Tree Synchronization, Hosts and Commits**
-
-**Every tab in Chromium has a different layer tree. Each tab has a layer tree host, which manages the tab-specific state for the tree. Again:**
-
-* **CCLayerTreeHost: owns a tree of LayerChromiums,
- CCLayerTreeHost::m_rootLayer**
-* **CCLayerTreeHostImpl: owns a tree of CCLayerImpls,
- CCLayerTreeHostImp::m_rootLayer**
-
-**These two trees, the main thread tree and the impl tree are completely isolated from one another. The impl tree is effectively a copy of the main thread tree, although with a different data type. We manually synchronize the impl tree to the main thread tree periodically, a process we call “commit”. A commit is a recursive walk over the main tree’s layers where we push “pushPropertiesTo” the impl-side equivalent of a layer. We do this on the impl thread with the main thread completely blocked.**
-**The basic logic of when to perform a commit is delayed. When the main tree changes, we simply make a note that a commit is needed (setNeedsCommit). When a layer’s contents change, e.g. we change a HTML div text somehow, we treat it as a commit. Later (under the discretion of a scheduler, discussed later) we decide to perform the commit. A commit is a blocking operation but still very cheap: it typically takes no more than a few milliseconds.**
-**An aside on our primitive thread model: we assume that both the main thread and the impl thread are message loops. E.g. they have postTask and postDelayedTask primitives. We try to keep both threads idle as often as possible and prefer async programming to taking a lock and blocking the thread.**
-**The commit flow is as follows (see CCThreadProxy for implementation):**
-
-* **The main thread gets damage. This turns into a setNeedsCommit**
-* **We post the setNeedCommit message to the impl thread.**
-* **The impl thread passes the setNeedsCommit to the CCScheduler.
- Note, the scheduler is an impl-side concept --- it cannot access any
- state on the main thread.**
-* **The scheduler will consider the overall system state (whether we
- recently drew, when the next frame is, many other things) and will
- eventually say “okay, begin a commit”**
-* **The beginFrameAndCommit command from the scheduler turns into a
- postTask back to the main thread.**
-* **When the bFAC message runs on the main thread we do the following
- things:**
- * **Apply any impl-side scrolls to the main thread**
- * **Call the requestAnimationFrame callback**
- * **Perform any pending layout (namely, HTML layout)**
- * **Paint any layers that need to be painted (software
- rasterization)**
-* **Once painting is done, we post a message to the impl thread saying
- “beginCommit.” The main thread then waits on a “commit done” event.
- This event will be signaled by the impl thread when it finishes the
- commit.**
-* **The beginCommit message on the impl thread uploads textures, and
- then synchronizes the trees. When both are done, it signals the
- “commit done” event, which unblocks the main thread which was
- previously waiting on that event. This finishes the commit and the
- two trees are synchronized.**
-
-**At this point, the impl tree can draw as often as it wants without consulting the main thread. Similarly, the main thread (thus javascript, etc) can mutate the main thread tree as much as it wants without consulting the impl thread.**
-**We have one very important rule in the CCThreadProxy architecture: the main thread can make blocking calls to the impl thread, but the impl thread cannot make a blocking call to the main thread. Breaking this rule can lead to deadlocks.**
-
-**## CCProxy**
-
-**To allow development of the threaded compositor while still shipping a single-threaded compositor, we have made it possible to run the same basic two-tree architecture in both single- and threaded modes. In single threaded mode, we still have two trees and delayed commits, but simply run a different synchronization/scheduling algorithm and host the tree on the main thread. This is implemented by the CCProxy interface, which abstracts the types of communication that go on between the main thread and the impl thread. For instance:**
-
-* **setNeedsCommit: tells the proxy to schedule a commit of the main
- thread tree to the impl tree**
-* **setNeedsRedraw: tells the proxy to draw the impl tree (without
- synchronizing the trees)**
-* **setVisible: tells the proxy to make the impl visible/invisible.**
-* **compositeAndReadback(void\* buf)**
-* **… lots more**
-
-**Thus, there are two subclasses of CCProxy:**
-
-* **CCSingleThreadProxy: runs the compositor in single thread mode,
- where the impl tree exists and is drawn on the main thread**
-* **CCThreadProxy: runs the compositor on another thread, the impl
- thread. This is the “threaded compositor” mode.**
-
-**### CCScheduler**
-
-**In addition to synchronizing trees, we have a lot of logic in the compositor that deals with when to commit, when to draw, whether to run animations, when to upload textures, and so on. This logic is not specific to whether the impl is running on the compositor thread or the main thread, so is put inside a standalone class called the CCScheduler. The scheduler exists logically as part of the impl side of tree, and thus in threaded mode lives on the impl thread.**
-**The scheduler itself is a very simple class that glues together two key systems:**
-
-* **CCFrameRateController: decides when good times to draw are. It
- listens to the underlying OS’ vsync api to detect vsync intervals as
- well as progress updates from the GPU. Its job is to dynamically
- pick a target frame rate and periodically kick the scheduler and
- tell it “now is a good time to draw.”**
-* **CCSchedulerStateMachine: tracks all the state of the compositing
- operation, e.g. screen dirty, commit needed, commit begun, and so
- on. We try to keep all corner case logic (“oops, you cant draw now”)
- inside this code so that it can be exhaustively unit tested.**
-
-**Input Handling**
-**A key use of the compositor thread is to scroll pages smoothly even when the main thread is blocked. We do this by intercepting input events before they arrive on the main thread’s event loop and redirecting them onto the impl thread.**
-**Once on the impl thread, they hit the WebCompositorInputHandler. This handler looks at the events and can ask the impl tree to try to scroll particular layers. However, scrolls can sometimes fail: WebKit does not give every scrollable area a layer (and associated clip objects). Therefore, on the impl tree, we track on each layer areas that cannot be impl-side scrolled. If the scroll request from the WebCompositorInputHandler fails because of hitting one of these areas, then we post the scrolling event to the main thread for normal processing. We call main-thread handled scrolls “slow scrolls” and impl-thread-side scrolls “fast scrolls.”**
-**Memory Management**
-**The compositor is based around the idea of caching the contents of a layer in texture (or other GPU-friendly representation). This uses memory, of course. Chrome, being a tabbed browser, can sometimes have hundreds of tabs open and we need to somehow manage memory between all those tabs.**
-**We use a two-level memory management scheme. In the GPU process, we have a GpuMemoryManager that tracks the visibility of all the tabs, and the association of graphics contexts to those tabs. Roughly, it figures out which graphics contexts should get what amount of the total GPU resources based on visibility and recently-used-ness. The global memory manager also factors in the workload requested by each tab, so that a big gmail tab can actually get more than, for example, a little popup window.**
-**At the compositor level, each LayertTreeHost/Impl pair get an allocation from the GPU process for a certain memory budget. They are to do their best to not exceed this memory budget. We do this by prioritizing all the tiles on all layers, and then giving out memory budget to each tile in descending priority order until we hit our limit. Prioritization includes things like visibility, distance from viewport, whether the tile is on an animating layer, and whether the current layer velocity is likely to bring the tile onscreen.**
-
-**### Texture Upload**
-
-**One challenge with all these textures is that we rasterize them on the main thread of the renderer process, but need to actually get them into the GPU memory. This requires handing information about these textures (and their contents) to the impl thread, then to the GPU process, and once there, into the GL/D3D driver. Done naively, this causes us to copy a single texture over and over again, something we definitely don't want to do.**
-**We have two tricks that we use right now to make this a bit faster. To understand them, an aside on “painting” versus “rasterization.”**
-
-* **Painting is the word we use for telling webkit to dump a part of
- its RenderObject tree to a GraphicsContext. We can pass the painting
- routine a GraphicsContext implementation that executes the commands
- as it receives them, or we can pass it a recording context that
- simply writes down the commands as it receives them.**
-* **Rasterization is the word we use for actually executing graphics
- context commands. We typically execute the rasterization commands
- with the CPU (software rendering) but could also execute them
- directly with the GPU using Ganesh.**
-* **Upload: this is us actually taking the contents of a rasterized
- bitmap in main memory and sending it to the GPU as a texture.**
-
-**With these definitions in mind, we deal with texture upload with the following tricks:**
-
-* **Per-tile painting: we pass WebKit paint a recording context that
- simply records the GraphicsContext operations into an SkPicture data
- structure. We can then rasterize several texture tiles from that one
- picture.**
-* **SHM upload: instead of rasterizing into a void\* from the renderer
- heap, we allocate a shared memory buffer and upload into that
- instead. The GPU process then issues its glTex\* operations using
- that shared memory, avoiding one texture copy.**
-
-**The holy grail of texture upload is “zero copy” upload. With such a scheme, we manage to get a raw pointer inside the renderer process’ sandbox to GPU memory, which we software-rasterize directly into. We can’t yet do this anywhere, but it is something we fantasize about.**
-
-**### Animation**
-
-**We allow animations to be added with layers. They allow you to fade or translate layers using “curves,” which are keyframed representations of the position or opacity of a layer over time. Although animations are added on the main thread, they are executed on the impl thread. Animations done with the compositor are thus “hitch free.”**
-
-****### Terminology****
-
-**Threads:**
-
-* **WebKit thread == Main Thread. This is the thread on which the
- LayerChromium hierarchy lives.**
-* **Compositor thread == the thread on which we will perform
- compositing. We call it impl thread because this is where the
- implementation of compositing happens.**
-* **IO Thread == the chromium thread that receives IPCs**
-
-**Impl thread is a word we use often. The compositor can operate in either single or threaded mode. Impl thread merely means “this lives on the impl half of the system.” Seeing the word “impl thread” does not mean that that code only runs on the compositor thread -- it just means that it handles data that is part of the impl part of the architecture.**
-**Suffixes indicate which thread data lives on:**
-
-* **Impl class lives on the compositor thread. Eg
- cclayertreehostimpl**
-
-* **Lack of suffix means data on the main thread. Eg cclayertreehost**
-
-**We use words that are ordinarily synonyms to mean very important and distinct steps in the updating of the screen:**
-
-* **Painting: this is the process of asking Layers for their content.
- This is where we ask webkit to tell us what is on a layer. We might
- then rasterize that content into a bitmap using software, or we
- might do something fancier. Painting is a main thread operation.**
-* **Drawing: this is the process of taking the layer tree and smashing
- it together with OpenGL onto the screen. Drawing is an impl-thread
- operation.**
diff --git a/chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/Content.png.sha1 b/chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/Content.png.sha1
deleted file mode 100644
index d38b29a2861..00000000000
--- a/chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/Content.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-15e70c968a6c4e29625c01ce64d3e472a225c9ea \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/index.md b/chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/index.md
deleted file mode 100644
index ccd6c531ff7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/confirm-to-quit-experiment/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: confirm-to-quit-experiment
-title: Confirm to Quit Experiment
----
-
-## Overview
-
-The browser is one of the most heavily multi-tasked and long-running programs on
-a user's computer. For many users, the uptime of Chromium nearly matches that of
-their computer. One aspect of the Chromium user experience that frustrates users
-is accidentally quitting due to tapping Cmd+Q. This keyboard shortcut is near
-other commonly-used accelerators like Cmd+Tab and Cmd+W. The goal of this
-improvement is to find a non-intrusive way to prevent accidental quitting while
-still allowing users to quit easily and quickly.
-
-This touches aspects of issues
-[147](http://code.google.com/p/chromium/issues/detail?id=147),
-[27786](http://code.google.com/p/chromium/issues/detail?id=27786), and
-[34215](http://code.google.com/p/chromium/issues/detail?id=34215).
-
-## Proposed UI
-
-The proposed experience, from [issue
-27786](http://code.google.com/p/chromium/issues/detail?id=27786), is to display
-a floating window when the user taps Cmd+Q that instructs them to continue
-holding in order to quit. After a few seconds, the quit is confirmed and Chrome
-proceeds to exit. If the user does not continue to hold Cmd+Q, the floating
-window will remain on screen for a few seconds before fading out to give the
-user instructions if they do actually intend to quit.
-
-We have not yet decided if this UI is the right one, and there are some concerns
-that presenting users with such non-standard UI will help them learn habits that
-are not applicable to other applications. Results from the experiment will
-determine whether we ship this feature.
-
-### A Look at Other Browsers:
-
-Safari asks if you want to quit and has a Remmber Me checkbox. Safari's solution
-is adequate (easy to turn off if it gets in your way, but a good default safety
-net), but it forces an interruption in the user experience. The proposed UI
-allows a user to keep her hand on the same keys and just continue pressing to
-confirm a quit.
-
-Firefox asks whether you want to Exit, Cancel, or Save and Exit. It's asking the
-wrong question at the wrong time: users shouldn't have to predict whether or not
-they want to recreate a session when quitting. Chrome's session restore feature
-makes this a non-issue, so the question is not asked. They also have a Remember
-Me checkbox.
-
-## Implementation
-
-This experiment currently only exists on Mac. We hook into
--(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication\*)sender
-and execute this UI there. We spin a nested run loop manually in
-NSEventTrackingRunLoopMode by waiting for a KeyUp event. If no events occur
-within the set threshold duration, the quit is confirmed. Since
--applicationShouldTerminate: method is not normally called as part of Chromium's
-unique shutdown process (a necessity of its multi-process architecture), it is
-manually called from -(BOOL)tryToTerminateApplication:(NSApplication\*)app.
-
-While prototyping, we discovered that holding down Cmd+Q and simply quitting
-after a set duration results in a frustrating behavior: because the system sends
-multiple KeyDown events while keeping the keys pressed, after Chromium quits,
-the system will start sending Cmd+Q to the previous key application, which then
-quits as well. This would obviously be extremely frustrating, so instead, we
-mark the quit as confirmed/committed after the set duration, but do not finalize
-the quit until the next KeyUp event. In order to get users to release the key
-combination without introducing more text-based UI, we animate all of the open
-windows' opacity to 0. This change in state convinces users that Chromium has
-"quit" and when the KeyUp event is received, the process begins its normal
-shutdown procedure (as it was blocked by this nested run loop) by returning
-NSTerminateNow.
-
-If the user does not hold down Cmd+Q long enough to meet the threshold duration,
-we return NSTerminateCancel which in turn causes -tryToTerminateApplication: to
-return NO. This aborts the quit process. The floating panel lingers on-screen
-for a second before fading out, which gives users who are unfamiliar with this
-procedure a chance to learn how to quit Chromium.
-
-[<img alt="image"
-src="/developers/design-documents/confirm-to-quit-experiment/Content.png"
-height=256
-width=320>](/developers/design-documents/confirm-to-quit-experiment/Content.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/constrained-popup-windows/index.md b/chromium/docs/website/site/developers/design-documents/constrained-popup-windows/index.md
deleted file mode 100644
index d237010620a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/constrained-popup-windows/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: constrained-popup-windows
-title: Constrained Popup Windows
----
-
-## Overview
-
-The window.open() API has been abused to open intrusive advertising, which is
-regretful since there are legitimate reasons to open a new window that enhance
-user experience. Traditionally, popup windows are blocked when they aren't
-explicitly requested by a user keypress or mouse click. Currently, other
-browsers either don't alert the user when a popup is blocked, or they show a
-user alert bar offering to either allow the site or disable the popup blocking
-notification.
-Instead, we display the title bar of the new popup in the lower right corner of
-the web page when said page tries to open a window not caused by a user gesture.
-Only the title bar is displayed and if the user navigates away from the site
-without interacting with the popup, it is automatically dismissed. It's not even
-a real window that shows up in the task bar. This is a tradeoff. Popup windows
-are slightly more intrusive than when they are simply blocked without any user
-notification, but in return, there is no list of allowed sites to manually
-manage, and false positives become significantly less confusing.
-
-## Implementation
-
-When the Browser process receives a message requesting a new popup
-(TabContents::AddNewContents()), the TabContents has a chance to build a
-ConstrainedWindow instead of passing the message off to
-Browser::AddNewContents() to do the normal creation of a new window.
-ConstrainedWindows are owned by the TabContents and are "attached" to the lower
-right hand corner of the TabContent's visible area.
-Clicking or dragging a constrained popup window's titlebar will convert the
-popup into a full fledged window (ConstrainedWindowImpl::Detach()). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/conventions-and-patterns-for-multi-platform-development/index.md b/chromium/docs/website/site/developers/design-documents/conventions-and-patterns-for-multi-platform-development/index.md
deleted file mode 100644
index 4d459efe3c7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/conventions-and-patterns-for-multi-platform-development/index.md
+++ /dev/null
@@ -1,214 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: conventions-and-patterns-for-multi-platform-development
-title: Conventions and patterns for multi-platform development
----
-
-Chromium is a large and complex cross-platform product. We try to share as much
-code as possible between platforms, while implementing the UI and OS integration
-in the most appropriate way for each. While this gives a better user experience,
-it adds extra complexity to the code. This document describes the recommended
-practices for keeping such cross-platform code clean.
-
-We use a variety of different file naming suffixes to indicate when a file
-should be used:
-
-* Mac files use the _mac suffix for lower-level files and Cocoa (Mac
- UI) files use the _cocoa suffix.
-* iOS files use the _ios suffix (although iOS also uses some specific
- _mac files).
-* Linux files use _linux suffix for lower-level files, _gtk for
- GTK-specific files, and _x for X Windows (with no GTK) specific
- files.
-* Windows files use the _win suffix.
-* Posix files shared between Mac, iOS, and Linux use the _posix
- suffix.
-* Files for Chrome's "Views" UI (on Windows and experimental GTK)
- layout system use the _views suffix.
-
-The separate front-ends of the browser are contained in their own directories:
-
-* Mac Cocoa: chrome/browser/ui/cocoa
-* Linux GTK: chrome/browser/ui/gtk
-* Windows Views (and the experimental GTK-views):
- chrome/browser/ui/views
-
-The [Coding Style](/developers/coding-style) page lists some stylistic rules
-affecting platform-specific defines.
-
-### How to separate platform-specific code
-
-#### Small platform differences: #ifdefs
-
-When you have a class with many shared functions or data members, but a few
-differences, use #ifdefs around the platform-specific parts. If there are no
-significant differences, it's easier for everybody to keep everything in one
-place.
-
-#### Small platform differences in the header, larger ones in the implementation: split the implementation
-
-There may be cases where there are few header file differences, but significant
-implementation differences for parts of the implementation. For example,
-base/waitable_event.h defines a common API with a couple of platform
-differences.
-
-With significant implementation differences, the implementation files can be
-split. The prevents you from having to do a lot of #ifdefs for the includes
-necessary for each platform and also makes it easier to follow (three versions
-each of a set of functions in a file can get confusing). There can be different
-.cc files for each platform, as in base/waitable_event_posix.cc that implements
-posix-specific functions. If there were cross-platform functions in this class,
-they would be put in a file called base/waitable_event.cc.
-
-#### Complete platform implementations and callers: separate implementations
-
-When virtually none of the implementation is shared, implement the class
-separately for each platform in separate files.
-
-If all implementations are in a cross-platform directory such as base, they
-should be named with the platform name, such as FooBarWin in base/foo_bar_win.h.
-This case will generally be rare since files in these cross-platform files are
-normally designed to be used by cross-platform code, and separate header files
-makes this impossible. In some places we've defined a commonly named class in
-different files, so PlatformDevice is defined in skia/ext/platform_device_win.h,
-skia/ext/platform_device_linux.h, and skia/ext/platform_device_mac.h. This is OK
-if you really need to refer to this class in cross-platform code. But generally,
-cases like this will fall into the following rule.
-
-If the implementations live in platform-specific directories such as
-chrome/browser/ui/cocoa or chrome/browser/ui/views, there is no chance that the
-class will be used by cross-platform code. In this case, the classes and
-filenames should omit the platform name since it would be redundant. So you
-would have FooBar implemented in chrome/browser/ui/cocoa/foo_bar.h.
-
-Don't create different classes with different names for each platform and
-typedef it to a shared name. We used to have this for PlatformCanvas, where it
-was a typedef of PlatformCanvasMac, PlatformCanvasLinux, or PlatformCanvasWin
-depending on the platform. This makes it impossible to forward-declare the
-class, which is an important tool for reducing dependencies.
-
-### When to use virtual interfaces
-
-In general, virtual interfaces and factories should not be used for the sole
-purpose of separating platform differences. Instead, it should be be used to
-separate interfaces from implementations to make the code better designed. This
-comes up mostly when implementing the view as separate from the model, as in
-TabContentsView or RenderWidgetHostView. In these cases, it's desirable for the
-model not to depend on implementation details of the view. In many cases, there
-will only be one implementation of the view for each platform, but gives cleaner
-separation and more flexibility in the future.
-
-In some places like TabContentsView, the virtual interface has non-virtual
-functions that do things shared between platforms. Avoid this. If the code is
-always the same regardless of the view, it probably shouldn't be in the view in
-the first place.
-
-### Implementing platform-specific UI
-
-In general, construct platform specific user interface elements from other
-platform-specific user interface elements. For instance, the views-specific
-class BrowserView is responsible for constructing many of the browser dialog
-boxes. The alternative is to wrap the UI element in a platform-independent
-interface and construct it from a model via a factory. This is significantly
-less desirable as it confuses ownership: in most cases of construction by
-factory, the UI element returned ends up being owned by the model that created
-it. However in many cases the UI element is most easily managed by the UI
-framework to which it belongs. For example, a views::View is owned by its view
-hierarchy and is automatically deleted when its containing window is destroyed.
-If you have a dialog box views::View that implements a platform independent
-interface that is then owned by another object, the views::View instance now
-needs to explicitly tell its view hierarchy not to try and manage its lifetime.
-
-e.g. prefer this:
-
-> // browser.cc:
-> Browser::ExecuteCommand(..) {
-> ...
-> case IDC_COMMAND_EDIT_FOO:
-> window()-&gt;ShowFooDialog();
-> break;
-> ...
-> }
-> // browser_window.h:
-> class BrowserWindow {
-> ...
-> virtual void ShowFooDialog() = 0;
-> ...
-> };
-> // browser_view.cc:
-> BrowserView::ShowFooDialog() {
-> views::Widget::CreateWindow(new FooDialogView)-&gt;Show();
-> }
-> // foo_dialog_view.cc:
-> // FooDialogView and FooDialogController are automatically cleaned up when the
-> window is closed.
-> class FooDialogView : public views::View {
-> ...
-> private:
-> scoped_ptr&lt;FooDialogController&gt; controller_; // Cross-platform
-> state/control logic
-> ...
-> }
-
-to this:
-
-> // browser.cc:
-> Browser::ExecuteCommand(..) {
-> ...
-> case IDC_COMMAND_EDIT_FOO: {
-> FooDialogController::instance()-&gt;ShowUI();
-> break;
-> }
-> ...
-> }
-> // foo_dialog_controller.h:
-> class FooDialog {
-> public:
-> static FooDialog\* CreateFooDialog(FooDialogController\* controller);
-> virtual void Show() = 0;
-> virtual void Bar() = 0;
-> };
-> class FooDialogController {
-> public:
-> ...
-> static FooDialogController\* instance() {
-> static FooDialogController\* instance = NULL;
-> if (!instance)
-> instance = Singleton&lt;FooDialogController&gt;::get();
-> return instance;
-> }
-> ...
-> private:
-> ...
-> void ShowUI() {
-> if (!dialog_.get())
-> dialog_.reset(FooDialog::CreateFooDialog(this));
-> dialog_-&gt;Show();
-> }
-> // Why bother keeping FooDialog or even FooDialogController around?
-> // Most dialogs are very seldom used.
-> scoped_ptr&lt;FooDialog&gt; dialog_;
-> };
-> // foo_dialog_win.cc:
-> class FooDialogView : public views::View,
-> public FooDialogController {
-> public:
-> ...
-> explicit FooDialogView(FooDialogController\* controller) {
-> set_parent_owned(false); // Now necessary due to scoped_ptr in
-> FooDialogController.
-> }
-> ...
-> };
-> FooDialog\* FooDialog::CreateFooDialog(FooDialogController\* controller) {
-> return new FooDialogView(controller);
-> }
-
-Sometimes this latter pattern is necessary, but these occasions are rare, and
-very well understood by the frontend team. When porting, consider converting
-cases of the latter model to the former model if the UI element is something
-simple like a dialog box. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookbook/Life of a Browser Component.pdf.sha1 b/chromium/docs/website/site/developers/design-documents/cookbook/Life of a Browser Component.pdf.sha1
deleted file mode 100644
index 8121baae98d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookbook/Life of a Browser Component.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3436e22dd7955a3791436a62f69b98a1695461b8 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookbook/index.md b/chromium/docs/website/site/developers/design-documents/cookbook/index.md
deleted file mode 100644
index 4744e6f78ab..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookbook/index.md
+++ /dev/null
@@ -1,290 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: cookbook
-title: Browser Components / Layered Components Cookbook
----
-
-# being the story of how a fresh new component is born, or how a veteran feature is rescued from a tangled web of ugly dependencies and reborn as a shiny component.
-
-## Overview
-
-This document serves as a guide for the process of turning a Chromium feature
-into a component or a layered component. The design docs for components and
-layered components are assumed as background.
-
-## Motivation and Layering
-
-We’ve started having multiple top-level applications. For one of these (Chrome
-for Android), the necessary approach was to #ifdef in //chrome, but we want to
-avoid this for future top-level applications.
-
-The //components layer is a place for optional features that products built out
-of the Chromium codebase may want to use. Most of the components currently there
-are features that previously lived in //chrome but were extracted so that they
-could be reused by other top-level applications such as //android_webview.
-
-New features that will get used by more than one top-level application should be
-written as components. For top-level applications other than Chrome for Android,
-features they wish to reuse should first be extracted into //components. This
-document is a cookbook -type guide for how to create a new component, and how to
-extract an existing feature from //chrome into a component. The below diagram
-shows the place of components in the Chromium hierarchy. Note that the diagram
-is over-simplified in that not all components allow dependences on //content;
-for example, a component that is shared by iOS will either disallow dependencies
-on //content entirely or be in the form of a layered component.
-
-[<img alt="image"
-src="/developers/design-documents/cookbook/layercake.png">](/developers/design-documents/cookbook/layercake.png)
-
-## Creating a new Browser Component
-
-Creating a new component is straightforward. Follow the rules in the [design
-document](http://www.chromium.org/developers/design-documents/browser-components),
-and the examples already in the //components directory. TL;DR version:
-
- A component named xyz lives in //components/xyz.
-
- Code in xyz should be enclosed in namespace xyz.
-
- There should be a strict //components/xyz/DEPS to enforce that the component
- depends only on lower layers.
-
- Low-level modules (e.g., //base, //net, potentially //content)
-
- Other //components, in a strictly tree-shaped graph - no circular
- dependencies.
-
- A component may depend concretely on lower layers and other components. For
- stuff it needs its embedder to fulfill, it should define a client interface
- that the embedder will implement and provide.
-
- A component that is used on iOS and also wishes to depend on //content must
- be in the form of a [layered
- component](http://www.chromium.org/developers/design-documents/layered-components-design).
-
- A component used only by the browser process contains code directly in its
- directory.
-
- A component used by multiple process types has a directory per process, e.g.
-
- //components/xyz/browser
-
- //components/xyz/renderer
-
- //components/xyz/common
-
- A component can optionally be a separate dynamic library in the components
- build.
-
- Create, own and configure the component in the embedder layer, e.g. in
- //chrome/browser.
-
-## Extracting an existing feature to a Browser Component
-
-These are the typical steps to extract a feature:
-
- Identify a feature you need to extract and reach out to the feature owners
- to inform them of your desire to componentize the feature.
-
- Create a design document for the componentization and do a file-by-file
- analysis of the //chrome dependencies of the production code of the feature
- (you can leave the componentization of unit tests for a second pass). If the
- feature will be used on iOS, include //content dependencies in your
- analysis.
-
- From the file analysis, do the following: generate a set of high-level tasks
- involved in the componentization (e.g., inject FooService dependency
- directly instead of obtaining FooService from Profile); if the feature is
- intended for use by iOS, determine whether the component needs to be a
- [layered
- component](http://www.chromium.org/developers/design-documents/layered-components-design);
- and determine whether the feature's componentization is blocked by that of
- other //chrome features (if so, go back to step 2 for the blocking
- features).
-
- Map the high-level tasks into a bugtree whose leaf nodes are
- individual-CL-granularity bugs. Give all bugs in the bugtree a relevant
- hotlist (e.g., Hotlist-Foo-Component) so that the list can be easily
- searched for and analyzed.
-
- Create the component (setting it up with the intended final DEPS structure)
- and move some leaf files (i.e., files with few or no problematic
- dependencies) into it. Note that in this first pass you can have the
- component's targets be static libraries.
-
- Burn down the bugtree, moving files into the component incrementally as
- their problematic dependencies are eliminated.
-
- Once all production code is componentized, do a second pass componentizing
- unittests (typically relatively straightforward once the production code has
- been componentized).
-
- Put all the code in the component into the component's namespace (e.g., code
- in //components/foo should be in the "foo" namespace).
-
- If desired, fix up .gypi files and add export declarations to build it as a
- component
-
- See examples in other components, e.g.
- //components/webdata/common/webdata_export.h and its uses.
-
-Note that we have tools for moving source files that updates include guards and
-updates references to files (#includes and #imports in other source files,
-references in .gyp(i) files); see src/tools/git/{move_source_file.py,
-mass-rename.py}. We also have a tool for doing search-and-replace across the
-codebase using Python regular expression syntax; see src/tools/git/mffr.py.
-Finally, we highly encourage the usage of "git cl format" to ease the tedious
-process of reformatting that often needs to occur when doing refactorings.
-
-## **Recipes for Breaking //content Dependencies**
-
-## If the component will be shared by iOS and has //content dependencies, then you have two choices:
-
-* ## Abstract all //content dependencies through the embedder and have
- the component not depend on //content at all.
-* ## Make the component into a [layered
- component](http://www.chromium.org/developers/design-documents/layered-components-design),
- wherein it has a "core/" directory containing code that is shared by
- iOS and cannot depend on //content, and a "content/" directory that
- drives the core code via interactions with //content.
-
-## The first alternative is appropriate when the //content dependencies are not
-significant (e.g., dependencies on content::BrowserThread that can be replaced
-by having SingleThreadedTaskRunners injected into the component). The second
-alternative is necessary when the feature has significant //content
-dependencies, e.g. it interacts heavily with content::WebContents.
-
-## For strategies to abstracting //content dependencies, please see
-[here](http://www.chromium.org/developers/design-documents/layered-components-technical-approach).
-For an example of the structure of a layered component, please see
-[here](http://www.chromium.org/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase).
-
-## Recipes for Breaking //chrome Dependencies
-
-Please feel free to add new sections, add clarifications and examples to this
-section, etc. If you don't have edit rights to the site, feel free to add
-comments at the bottom of the page with additional recipes.
-
-### Dependency Inversion
-
-Dependency inversion is the most fundamental approach to breaking dependencies.
-This is the pattern where you switch from object Foo depending concretely on
-object Bar, and instead object Foo defines an interface FooDelegate that it
-needs fulfilled by any embedder; this interface is then implemented by Bar,
-which passes a FooDelegate pointer to itself or its delegate implementation to
-Foo.
-
-By using this pattern, it is easy to push knowledge of minor dependencies out of
-your component, and possible to remove knowledge of some larger dependencies
-(but see the next section).
-
-Examples:
-
-* [Introduction of
- AutofillManagerDelegate](https://chromiumcodereview.appspot.com/10837363).
-* [Introduction of
- SigninManagerDelegate](https://codereview.chromium.org/14367029).
-
-### Large Dependencies: Do them First
-
-Sometimes you’ll find that the feature you want to extract has a fairly big
-dependency on a fairly big chunk of code. Using dependency inversion (see above)
-would result in a large client interface or even multiple large client
-interfaces.
-
-In these cases, you’ve probably discovered that the component you want isn’t a
-“leaf node,” whereas its dependency may be. In these cases you probably want to
-componentize this dependency first. Exceptions to this might be where the
-dependency would be fulfilled in entirely different ways, rather than in one
-common way, by different embedders; if this is the case then a large client
-interface may still be appropriate.
-
-Examples:
-
-* The generic parts of //chrome/browser/webdata needed to be
- componentized before //chrome/browser/autofill could be
- componentized, and the Autofill-specific parts extracted into the
- Autofill component. See //components/webdata and
- //components/autofill/core/browser/webdata.
-
-### Pass Fundamental Objects
-
-It’s very common in //chrome that an “everything” object such as Profile is
-passed in to initialize an object or a subsystem, which then turns around and
-retrieves just a couple of more fundamental objects from the Profile.
-
-We’ve seen this many times, e.g. a Profile being passed and the only things
-retrieved from it being the PrefService associated with the Profile, and the
-SequencedTaskRunner for the IO thread.
-
-In cases like this, you should change the code to pass the most fundamental
-objects possible, rather than passing more complex “everything” or “bag of
-stuff” objects. See also [Law of
-Demeter](http://en.wikipedia.org/wiki/Law_of_Demeter).
-
-Examples:
-
-* [Avoid use of BrowserProcess global by passing
- PrefService](https://chromiumcodereview.appspot.com/15024007) (see
- e.g. signin_manager.h)
-
-### Splitting Objects
-
-Sometimes, you will encounter an object that brings in a lot of dependencies,
-but at the same time seems to have functionality that is core to the component.
-It might e.g. be an object that has some internal state machine that the
-component needs to use, and also initiates or participates in a bunch of UI
-interactions.
-
-In cases like this, consider whether the object needs to be split into multiple
-objects, where one is the core business logic (which stays with the component)
-and another is the part that brings in all the dependencies (this could stay
-with the embedder).
-
-Examples:
-
-* [Removing knowledge of how to migrate specific table types from
- WebDatabase class](https://chromiumcodereview.appspot.com/12518017)
- and [externalizing
- creation](https://chromiumcodereview.appspot.com/12543034).
-
-### Clean up APIs
-
-It's worth noting that the programming interfaces that result from the types of
-dependency-breaking operations listed above are not always optimal, in fact they
-are often not as nice as what would have resulted from a feature being written
-as a component from the start. Once you've finished breaking dependencies, it
-can certainly be worth going back, taking a fresh look at the interfaces that
-resulted, and cleaning them up.
-
-## Verifying
-
-To verify dependencies, use `tools/checkdeps/checkdeps.py` – to use on a
-different repository, such as Blink, specify the `--root` option:
-
-```none
-buildtools/checkdeps/checkdeps.py --root third_party/WebKit
-```
-
-You can also specify a subdirectory to check:
-
-```none
-buildtools/checkdeps/checkdeps.py --root third_party/WebKit Source/bindings
-```
-
-There are some wrapper scripts to simplify this, like
-`Tools/Scripts/check-blink-deps`.
-
-There are a few wrinkles to be aware of, which result in `checkdeps` *not*
-checking particular directories, confusingly returning SUCCESS without any work.
-You can specify `--verbose` to check that it actually is doing work.
-
-* A `skip_child_includes` in a `DEPS` file causes subdirectories to
- not be checked; this is used in the top-level Chromium `DEPS` file
- to not check other repos.
-* The directory needs to look like a source directory, or imports will
- not be checked; concretely, it needs to include `.svn` or `.git/.` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookbook/layercake.png.sha1 b/chromium/docs/website/site/developers/design-documents/cookbook/layercake.png.sha1
deleted file mode 100644
index b9911cfe251..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookbook/layercake.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7ca14db20d174ceb737b13edba9ff01325f24396 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookie-prompt-replacement/index.md b/chromium/docs/website/site/developers/design-documents/cookie-prompt-replacement/index.md
deleted file mode 100644
index 4dc65127888..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookie-prompt-replacement/index.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: cookie-prompt-replacement
-title: 'Design document: Cookie prompt replacement'
----
-
-DRAFT: April 22, 2010
-
-Jochen Eisinger &lt;jochen@chromium.org&gt;
-
-## Objective
-
-> Provide the functionality of the application modal cookie prompt with
-> something non-modal. <http://crbug.com/38199>
-
-## Background
-
-> Since Google Chrome 4.1, the user has the option to be prompted for every
-> cookie ("Cookie" refers to HTTP cookies, Web databases, local storage, and
-> AppCache. In the future, this might also include things like indexed database)
-> being set. This prompt has to be application modal for the following reason:
-> If a HTML page contains the following JavaScript code:
-
-> document.cookie = "A=B";
-> console.log(document.cookie);
-
-> JavaScript execution has to be blocked until the user decided whether to allow
-> the cookie to be set or not. Since WebKit assumes that it always can execute
-> JavaScript, blocking JavaScript amounts to blocking the renderer. If the
-> renderer is shared between multiple tabs and/or windows, the prompt needs to
-> be application modal. To create a consistent user experience, the cookie
-> prompt was designed to be always application modal.
-
-## Requirements
-
-> The following use-cases for the cookie prompt exist. A replacement should
-> address all of those.
-
- 1. Compile a list of exception rules for the sites a user visits
- and trusts.
- 2. Learn what sites are setting cookies and other site data.
- 3. Force certain cookies to expire at the end of the browsing
- session.
- 4. Allow access to cookies on a case-by-case basis.
-
-## Design
-
-> The idea is to remove the cookie prompt entirely. Instead, the cookie blocked
-> notification bubble is augmented with enough information to address use-cases
-> 1-3.
-
-> **1. Compile a list of exception rules for the sites a user visits and
-> trusts**
-
-> The cookie blocked notification bubble contains a link or button (mock needed)
-> that will open a dialog similar to the content settings exception dialog
-> pre-filled with patterns matching all sites requesting cookies on the current
-> web page. The user can then grant or deny access to the individual sites. It
-> won't be possible to remove or add patterns from this dialog. The dialog will
-> also contain any pre-existing exception that applies to the current web page.
-
-> **2. Learn what sites are setting cookies and other site data.**
-
-> The cookies blocked notification bubble will show a text like "The site
-> example.com and 4 sites included from it were denied access to cookies" or "3
-> sites included from example.com where denied access to cookies" (mock needed).
-> A link to details will open a dialog similar to the "Cookies and other site
-> data" dialog pre-filled with all cookies set by the sites included from the
-> current web page. It will not be possible to modify cookies in this dialog.
-> The information per cookie required for this dialog is the same that is
-> currently presented to the user in the modal cookie prompt. It can be
-> collected on the same code-path that leads to this prompt.
-
-> **3. Force certain cookies to expire at the end of the browsing session.**
-
-> In addition to "Block" and "Allow", content settings exceptions can have the
-> action "Allow for session". This will force all HTML cookies matching such a
-> rule to become session cookies. Non-HTML cookies, such as web databases, will
-> be matched against the set of exceptions during shutdown of Chrome and deleted
-> where required.
-
-> In contrast to the current cookie prompt, a website that requires cookies will
-> not work on the first visit. The user first has to explicitly add exceptions
-> for this site and then reload the page. Furthermore, it is not possible to
-> allow and block certain cookies from the same site - content setting
-> exceptions apply on a per-site basis. Use-case 4 can be, however, addressed to
-> a certain extend using the [cookie extension
-> API](/developers/design-documents/extensions/proposed-changes/apis-under-development/proposal-chrome-extensions-cookies-api).
-
-Alternatives Considered
-
-> An alternative would be to allow all cookies and present the user with an UI
-> to remove/block some or all cookies. This has several disadvantages:
-
- * For all kinds of cookies (e.g. AppCache, local storage), a
- transaction model has to be implemented.
- * The user needs to decide what to do with the cookies at latest
- when navigating away from the current page.
- * The UI is more intrusive than just displaying a content blocked
- notification in the omnibox. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookie-split-loading/index.md b/chromium/docs/website/site/developers/design-documents/cookie-split-loading/index.md
deleted file mode 100644
index 2f7c2d93d4e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookie-split-loading/index.md
+++ /dev/null
@@ -1,189 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: cookie-split-loading
-title: cookie-split-loading
----
-
-Currently, the CookieMonster cookie store is initialized by reading in the
-cookies from the backing store in a large lump on first access. This is bad for
-several reasons:
-
-* It violates the principle that we shouldn't do blocking operations
- on the IO thread.
-* It contributes to perceived user startup time in if a session is
- being restored (which requires URL accesses, which result in
- CookieMonster accesses).
-* It contributes to variation in web page loading, as the first web
- page takes substantially longer than later ones.
-
-This problem is tracked in [Issue 52909](http://crbug.com/52909). This document
-sketches out a proposed solution to this problem.
-
-**Requirements**
-
-* Minimize startup time (including startup time which includes session
- restore, i.e. CM access).
-* Minimize stalling of individual set/get cookies.
-
-I believe that these requirements imply:
-
-* Basic startup cannot be gated on loading all cookies from persistent
- backing store.
-* Individual page loads cannot be gated on loading the entire cookie
- store from persistent backing store. Ideally, individual page loads
- would only load the cookies from persistent backing store that are
- needed for that page.
-* Full persistent store load should be initiated at startup, but in
- the background not blocking any processes (as having cookies loaded
- in memory will result in absolute minimum latency).
-
-**Notes on synchronous vs. asynchronous interfaces to the CookieMonster**
-
-(See [Issue 68657](http://crbug.com/68657))
-
-Generally, services on the IO thread provide asynchronous interfaces with
-callbacks, to avoid the IO thread becoming a bottleneck in providing services
-for other threads. For all requests after the initial one, the CookieMonster
-follows this rule and does not block; all information required for all
-CookieMonster APIs is in memory. However, the first call to the CookieMonster
-triggers loading in of the entire persistent backing store, done on-thread,
-which means that the IO thread blocks on disk operations on the first request to
-a CookieMonster with a backing store.
-
-Giving the CookieMonster an asynchronous interface is a large task, not because
-of the internal structure of the Cookie, but because of the large number of
-callers, all of whom would need to be adapted to the new interface. Issue
-&lt;xxx&gt; tracks this task.
-
-In an ideal world, the current design would not be dependent on async
-CookieMonster interfaces. However, a key part of this design is breaking up the
-loading of the backing store into indepedent pieces, using Task objects, which
-are spawned off asynchronously in the backing in the absence of incoming
-reuqests to laod the backing store database. Combining this with a synchronous
-interface for those reuqests that need backing store loads would mean doing one
-of:
-
-* Loading data inline (in the IO thread) when it is needed for a
- particular reuqest. This would probably mean that all load tasks
- would need to be on the IO thread.
-* Completely blocking any IO thread activity while waiting for
- responses from the DB thread for data load-in. This violates one of
- the basic principles of the IO thread (though in theory it's no
- worse than what we're doing now).
-* Running nested message loops, and carefully tracking which requests
- corresponded to which nesting level of the message loop. If request
- B were run while request A had an outstanding load message to the DB
- thread, this means that request A would be blocked on the completion
- of request B (because the stack couldn't unwind until that point).
-
-None of these options is particularly appealing. Thus it's preferred that this
-work be done after the CookieMonster has been converted over to having an async
-interface. The rest of this design assumes such an interface.
-
-\[Note that it would be relatively easy to layer an asynchronous interface (if
-not behavior) on top of the current synchronous interface; the async trigger
-would wrap the sync call and a PostTask(self) for the callback. This could allow
-incremental changes to the various callers. When all callers had been converted,
-the sync interface could be removed and the async interface made to behave in a
-non-blocking manner. \]
-
-**High Level Design**
-
-The cookie monster will get an additional data structure, indexed by domain key
-(currently eTLD+1) indicating whether or not a particular domain key's set of
-values has been loaded. Incoming requests (either set of get) will trigger the
-loading of the domain key(s) required for those requests if they have not yet
-been loaded. In these cases, the incoming request will block (as it currently
-does if the backing store hasn't been loaded). All actual database accesses will
-occur on the DB thread.
-
-At CookieMonster construction, a background operation will be invoked to load
-the entire cookie store. This will run on the database thread, and will break
-down into a series of tasks (T) marks each separate task:
-
-* (T) Get the list of domain keys contained in the persistent backing
- store.
-* For each key:
- * (T) Load all data from that key into memory
- * (T -- IO thread) Incorporate that loaded data into the cookie
- monster and mark that key as loaded.
-
-These are broken up into indiviudal tasks both to avoid freezing the DB thread,
-and to allow loads of specific keys triggered by particular web page access to
-"jump the queue" and get pulled in earlier.
-
-**Routine Flow Outline**
-
-The primary routines and data structures involved in this design are sketched
-out below.
-
-[<img alt="image"
-src="/developers/design-documents/cookie-split-loading/objects.svg">](/developers/design-documents/cookie-split-loading/objects.svg)
-
-There are two basic "ropes" (since they're potentially cross-thread) of routine
-invocation: the initial spawn of loading of all of the cookies, and the
-load-on-demand triggerred by specific requests to the cookie monster.
-
-The initial spawn occurs from the CookieMonster constructor -&gt;
-SQLitePersistentCookieStore::SpawnFullLoad -&gt;
-SQLitePersistentCookieStore::BackingStore::SpawnFullLoad. Once the rope has
-reached the DB thread, a full list of all the keys in the SQLite DB is loaded
-and stored in BackingStore. Then SpawnFullLoad does a self-dispatch (to the DB
-thread) of a ChainLoadKeyCookies task for the first key in the list.
-ChainLoadKeyCookies will call LoadKeyCookies (which will load in the cookies
-associated with that key from the backing store and notify the CookieMonster of
-that load) and will then self-dispatch another instance of ChainLoadKeyCookies.
-When the last entry in the key list is loaded, ChainLoadKeyCookies will return
-without any action. This will (incrementally, allowing other tasks to run on the
-DB thread) load all the cookies.
-
-If a request comes into the CookieMonster while this chain is executing, it will
-check all_loaded_ and keys_loaded_ to detemrine that the relevant data for the
-request has not been loaded (if the relevant data has already been loaded, it
-will execute the in-memory lookup inline as current and call the callback with
-the information). It will then register the callback and operation information
-into the key-&gt;callback mapping. If that is the first registration of that
-key, it will call SQLitePersistentCookieStore::LoadKeyCookies, which will
-dispatch an invocation to the DB thread of
-SQLitePersistentCookieStore::BackingStore::LoadKeyCookies. If LoadKeyCookies
-determines that the key requested has already been loaded (race with above
-chain), it will simply exit.
-
-The tricky part of this design is making sure that there are no races that
-result in dangling requests. The invariants that guarantee that this doesn't
-happen are:
-
-* The first entry in the keys-&gt;callback table is always correlated
- with a LoadKeyCookies dispatch to the DB thread.
-* That entry/dispatch will only happen if no previous CompleteLoad for
- that key has already arrived.
-* The only case in which a LoadKeyCookies dispatch will not result in
- a later CompleteLoad dispatch is if a previous CompleteLoad dispatch
- for that cookie has already been sent.
-
-So it's possible for a LoadKeyCookies() dispatch to not result in a
-CompleteLoad() being sent back, but only if there's already one in transit.
-Thus, if a callback is registered in the keys-&gt;callback table, it will be
-executed with maximum latency round trip to DB thread + queue wait time + load
-time.
-
-**Object Lifetime Relationships**
-
-\[Will Chan take note :-}.\]
-
-Both CookieMonster and PersistentCookieStore are RefCountedThreadSafe objects.
-The CookieMonster keeps a reference to the PersistentCookieStore in its store_
-pointer; this guarantees that the store lives as long as the Monster does.
-
-Both SpawnFullLoad and LoadKeyCookies will take as arguments scoped_refptrs on
-the CookieMonster which the PersistentCookieStore (or its backing store) will
-use for callbacks. These references will guarantee that the CookieMonster stays
-alive for the duration of the callback.
-
-If the CookieMonster needs to be torn down, it will call an abort() routine on
-the PersistentCookieStore, which will break the chain load and release the
-scoped_refptr&lt;&gt; held on the CookieMonster by that chain load. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.pdf.sha1 b/chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.pdf.sha1
deleted file mode 100644
index 51985573efc..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1f1dd087f2615980f87622d15356a312a18ccfae \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.svg.sha1 b/chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.svg.sha1
deleted file mode 100644
index 668304389b0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookie-split-loading/objects.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8589de1b58f269917fb617578a5902799d088999 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/cookies-and-prerender/index.md b/chromium/docs/website/site/developers/design-documents/cookies-and-prerender/index.md
deleted file mode 100644
index 361afa49f53..00000000000
--- a/chromium/docs/website/site/developers/design-documents/cookies-and-prerender/index.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: cookies-and-prerender
-title: Cookies and Prerender
----
-
-Shared local storage such as DOM storage, IndexedDB, and HTTP cookies present
-challenges for prerendering. Ideally mutations made by the prerendered page
-should not be visible to other tabs until after the user has activated the page.
-Mutations made by other pages should be reflected in the prerendered page, which
-may have already read from local storage before the other pages made the
-changes.
-There is some thought about adding a transactional cookie store which would be
-memory only for the prerendered page. Unlike some of the HTML5 storage
-mechanisms, cookies primarily exist in HTTP and setter's may not have access to
-the Visibility API to change behavior. Basically, the transactional store would
-exist in memory only. If the user never uses a prerendered page, any mutations
-will just disappear. If the user tries to navigate to a page, mutations in the
-transactional cookie store are compared against mutations in the profile's main
-cookie store. If there are any conflicts, the prerendered page is cancelled and
-the mutations disappear. Otherwise, the mutations are merged into the profile's
-main cookie store and the page is swapped in.
-
-Prerendered requests will use a ChromeURLRequestContext which has a new
-CookieStore interface, but is otherwise the same as the current profile’s
-ChromeURLRequestContext. If the PrerenderContents are discarded without being
-used, the changes made to the CookieStore interface go away. Otherwise, the
-deltas will be committed to the main CookieStore for the profile. If there is a
-merge problem, the prerendered page is discarded and a fresh request is issued.
-There are a couple of possible approaches to implementing this:
-a) Do a complete copy of the canonical cookie store for the prerendered page.
-Both the canonical cookie store and the prerendered cookie store make mutations
-locally, and both maintain a log of mutations. Abandoning is simple: just delete
-the new cookie store. Conflict detection happens by examining the logs of the
-canonical store and the prerender store, and merges are simply applying the logs
-of the prerendered store to the canonical store if no detection detected. The
-main advantage is that this does not change the current "get all cookies for
-this request" path at all. The downsides are memory cost plus memcpy
-(back-of-the-envelope estimate is 600KB for store) and some overhead for
-Set-Cookie in non prerender case due to log.
-b) Add ability for CookieMonster's to be chained together. The prerendered
-version starts out with 0 entries, but points to the canonical backing store.
-Set-Cookie in the prerendered page only adds entries to the prerendered version.
-"Get all cookies" in the prerendered page will need to merge together cookies
-from the prerendered cookiemonster and the backing cookiemonster. Abandoning is
-easy - just remove the prerendered cookie monster. Merge will look at last
-modified times for entries and any newer ones in the backing store will cause
-conflict detection. The main concern is how to detect a clearing of Set-Cookie
-in the backing store at the time of merge. The main advantage of this case is
-low overhead at startup and fairly minimial logic changes. The concerns are the
-complexity of "get all cookies" for the prerendered case, as well as detecting
-deleted cookies during the merge.
-c) Add a new CookieStore implementation which stores diffs and has a
-CookieMonster backing store. This is similar to b), but could handle the deleted
-cookie case better. The downside is the potential for lots of duplicated logic,
-and very different lookup paths. Also, a fair bit of code does downcasting of
-CookieStore to CookieMonster, so the CookieStore interface will need to change
-for this to work.
-A few other concerns:
-- Are cookies ever cached in the render process? For example, does
-document.cookies do an IPC over to the CookieMonster to retrieve the values each
-time, or is there a cache that we will have to deal with?
-- How big are the cookiestore's typically? Could we get away with the
-copy-and-log approach? \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/create-amazing-password-forms/index.md b/chromium/docs/website/site/developers/design-documents/create-amazing-password-forms/index.md
deleted file mode 100644
index e0bb836faf5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/create-amazing-password-forms/index.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: create-amazing-password-forms
-title: Create Amazing Password Forms
----
-
-Web browsers (and other agents, such as password managers) try to make the process of filling out forms as convenient to users as possible, to save time and frustration. However good they are at interpreting web pages, however, there are always a few things you, as a web developer, can make sure to do, to ensure the best experience for your users, by making your web pages accessible.
-
-## Group related fields in a single form
-
-Make sure that each authentication process (registration, login or change password) is grouped together in a single &lt;form&gt; element. Don’t combine multiple processes (like registration and login), or skip the &lt;form&gt; element.
-
-## Use autocomplete attributes
-
-[Autocomplete](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofilling-form-controls%3A-the-autocomplete-attribute) attributes help password managers to infer the purpose of a field in a form, saving them from accidentally saving or autofilling the wrong data. A little annotation can go a long way: some common values for text fields are “username”, “current-password” (login forms and change password forms) and “new-password” (registration and change password forms). See a [detailed write-up](/developers/design-documents/form-styles-that-chromium-understands) with examples.
-
-Fields that are not passwords, but should be obscured, such as credit card numbers, may also have a type="password" attribute, but should contain the relevant autocomplete attribute, such as "cc-number" or "cc-csc".
-
-## Make sure form submission is clear
-
-Password managers need some indication that a form has been submitted. Try to make sure your web page does one of the following on form submission:
-
-* Performs a navigation to another page.
-* Emulates a navigation with [History.pushState or
- History.replaceState](https://developer.mozilla.org/en-US/docs/Web/API/History_API),
- and removes the password form completely.**
-
-In addition, if you perform an asynchronous request with [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) or [fetch](https://developers.google.com/web/updates/2015/03/introduction-to-fetch), make sure that the success status is correctly set in the response headers.
-
-## Use hidden fields for implicit information
-
-On some forms, it is not necessary to include some information, which might be obvious from the context (for example, the username field in a change password form). However, this information is still useful to password managers (there may be multiple accounts associated with a web site, for example), so include a hidden input field containing this information even if it is not directly necessary for your form.
-
-## Don’t try to fool the browser
-
-Password managers (either built into the browser, or external) are designed to ease the user experience. Inserting fake fields, using incorrect autocomplete attributes or taking advantage of the weaknesses of the existing password managers simply leads to frustrated users.
-
-## Follow existing conventions
-
-Being different just for the sake of it is not worth it. This will lead to a poor user experience all round. This means, for example, not navigating to a separate web page if a login failed: this is unexpected, and disorienting to both the user and the password manager.
-
-## Follow HTML guidelines
-
-Web browsers are designed with the HTML specification in mind, and going against it can lead to unexpected issues with your web page. This means:
-
-* Element id attributes should be unique: no two elements should have the same id.
diff --git a/chromium/docs/website/site/developers/design-documents/crypto/index.md b/chromium/docs/website/site/developers/design-documents/crypto/index.md
deleted file mode 100644
index 307b523e85b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/crypto/index.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: crypto
-title: Crypto
----
-
-&lt;&lt; UNDER CONSTRUCTION &gt;&gt;
-
-This page covers crypto and related technologies such as SSL and certificates in
-Chromium. Most of the code is in the "net" module, with some crypto classes in
-the "base" module.
-
-## Top priorities
-
-1. Port SSLClientSocketNSS to use native crypto APIs for SSL client
- authentication on [Mac OS
- X](http://code.google.com/p/chromium/issues/detail?id=45369) and
- [Windows](http://code.google.com/p/chromium/issues/detail?id=37560).
- * Pending changelists:
- [4670004](http://codereview.chromium.org/4670004/).
- * Remaining work:
- * Remove support for ssl_PlatformAuthTokenPresent and make it
- always return PR_TRUE.
- * Generate an NSS patch.
-2. [Implement a password callback for NSS on
- Linux](http://code.google.com/p/chromium/issues/detail?id=42073).
- This allows us to protect the private keys in the NSS key database
- with a password, and support smart cards.
- * Pending changelists:
- [5686002](http://codereview.chromium.org/5686002/)
-3. [Load the test root CA certificate temporarily on
- Windows](http://code.google.com/p/chromium/issues/detail?id=8470).
- This eliminates the need to install the test root CA certificate on
- Windows to run the SSL unit tests.
- * Pending changelists:
- [4646001](http://codereview.chromium.org/4646001/).
-4. [Regenerate the root CA and test certificates to have a long
- validity
- period](http://code.google.com/p/chromium/issues/detail?id=5552).
- * Pending changelists:
- [5535006](http://codereview.chromium.org/5535006/)
-5. [Cache certificate verification results in
- memory](http://code.google.com/p/chromium/issues/detail?id=63357).
- * Pending changelists:
- [5386001](http://codereview.chromium.org/5386001/)
-6. Complete &lt;keygen&gt; implementation.
- * [Support for intermediate CAs as part of
- application/x-x509-user-cert](http://code.google.com/p/chromium/issues/detail?id=37142).
- * [Confirmation UI for importing
- certificates](http://code.google.com/p/chromium/issues/detail?id=65541).
- * [Error UI for import
- failures](http://code.google.com/p/chromium/issues/detail?id=65543).
-7. [Cache complete certificate chains in the HTTP
- cache](http://code.google.com/p/chromium/issues/detail?id=7065).
- * Pending changelists:
- [4645001](http://codereview.chromium.org/4645001/).
-
-## Work plan
-
-&lt;&lt; A nice dependency diagram to be added by Ryan Sleevi. &gt;&gt;
-
-1. [SSL client authentication](/system/errors/NodeNotFound)
- * [Improve the SSL client authentication
- UI](http://code.google.com/p/chromium/issues/detail?id=29784).
- * [Remember client certificate selection
- persistently](http://code.google.com/p/chromium/issues/detail?id=37314).
- * [Support European national ID
- cards](http://code.google.com/p/chromium/issues/detail?id=44075).
- * Improve test coverage.
-2. A strategy towards FIPS 140-2 compliance.
-3. Clean up the crypto classes/API in base. The main issue is to
- standardize on one or two ways to represent a data buffer.
-4. Combine regular certificate verification and EV certificate
- verification into one for NSS. Not sure if this is possible.
-5. Have the NSS CERT_PKIXVerifyCert function report all certificate
- errors using the cert_po_errorLog output parameter. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/dependency-management/index.md b/chromium/docs/website/site/developers/design-documents/dependency-management/index.md
deleted file mode 100644
index 8f5fd0aaa85..00000000000
--- a/chromium/docs/website/site/developers/design-documents/dependency-management/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: dependency-management
-title: Dependency Management
----
-
diff --git a/chromium/docs/website/site/developers/design-documents/desktop-notifications/api-specification/index.md b/chromium/docs/website/site/developers/design-documents/desktop-notifications/api-specification/index.md
deleted file mode 100644
index c6d5376f898..00000000000
--- a/chromium/docs/website/site/developers/design-documents/desktop-notifications/api-specification/index.md
+++ /dev/null
@@ -1,167 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/desktop-notifications
- - Desktop Notifications
-page_name: api-specification
-title: API Specification
----
-
-This is a DRAFT specification and subject to change.
-
-Note that the latest version of the *spec* is here:
-<http://dev.w3.org/2006/webapi/WebNotifications/publish/> but this page reflects
-what's implemented in the latest version of Chromium.
-
-The Notification interface
-
-This interface represents a notification object.
-
-interface Notification : EventTarget {
-
-// display methods
-
-void show();
-
-void cancel();
-
-// event handler attributes
-
-attribute Function ondisplay;
-
-attribute Function onerror;
-
-attribute Function onclose;
-
-attribute Function onclick;
-
-}
-
-***Attributes***
-
-**ondisplay**
-
-> **event listener function corresponding to event type "display". This listener
-> must be called when the notification is displayed to the user, which need not
-> be immediately when show() is called.**
-
-**onerror**
-
-> **event listener function corresponding to event type "error". This listener
-> must be called when the notification cannot be displayed to the user because
-> of an error.**
-
-**onclose**
-
-> **event listener function corresponding to event type "close". This listener must be called when the notification is closed by the user. This event must not occur until the "display" event.**
-
-**onclick**
-> **event listener function corresponding to event type "click". This listener
-> must be called when the notification has been clicked on by the user.**
-
-*Methods*
-
-**show**
-
-> Causes the notification to displayed to the user. This may or may not happen
-> immediately, depending on the constraints of the presentation method.
-
-**cancel**
-
-> Causes the notification to not be displayed. If the notification has been
-> displayed already, it must be closed. If it has not yet been displayed, it
-> must be removed from the set of pending notifications.
-
-The NotificationCenter interface
-
-The NotificationCenter interface exposes the ability for web pages to create
-Notification objects.
-
-interface NotificationCenter {
-
-// Notification factory methods.
-
-Notification createNotification(in DOMString iconUrl, in DOMString title, in
-DOMString body) throws(Exception);
-
-optional Notification createHTMLNotification(in DOMString url)
-throws(Exception);
-
-// Permission values
-
-const unsigned int PERMISSION_ALLOWED = 0;
-
-const unsigned int PERMISSION_NOT_ALLOWED = 1;
-
-const unsigned int PERMISSION_DENIED = 2;
-
-// Permission methods
-
-int checkPermission();
-
-void requestPermission(in Function callback);
-
-}
-
-The NotificationCenter interface is available via the Window interface through
-the webkitNotifications property.
-
-interface Window {
-
-...
-
-attribute NotificationCenter webkitNotifications;
-
-...
-
-}
-
-*Methods*
-
-**createNotification**
-
-> Creates a new notification object with the provided content. *iconUrl*
-> contains the URL of an image resource to be shown with the notification;
-> *title* contains a string which is the primary text of the notification;
-> *body* contains a string which is secondary text for the notification. If the
-> origin of the script which executes this method does not have permission level
-> PERMISSION_ALLOWED, this method will throw a security exception.
-
-**createHTMLNotification**
-
-> The parameter *url* contains the URL of a resource which contains HTML content
-> to be shown as the content of the notification. If the origin of the script
-> which executes this method does not have permission level PERMISSION_ALLOWED,
-> this method will throw a security exception. In Chromium, only http:, https:,
-> and chrome-extension: schemes are allowed for *url*.
-
-checkPermission
-> Returns an integer, either PERMISSION_ALLOWED, PERMISSION_NOT_ALLOWED, or
-> PERMISSION_DENIED, which indicates the permission level granted to the origin
-> of the script currently executing.
-
-> * PERMISSION_ALLOWED (0) indicates that the user has granted
- permission to scripts with this origin to show notifications.
-> * PERMISSION_NOT_ALLOWED (1) indicates that the user has not taken
- an action regarding notifications for scripts from this origin.
-> * PERMISSION_DENIED (2) indicates that the user has explicitly
- blocked scripts with this origin from showing notifications.
-
-**requestPermission**
-
-> Requests that the user agent ask the user for permission to show notifications
-> from scripts. This method should only be called while handling a user gesture;
-> in other circumstances it will have no effect. This method is asynchronous.
-> The function provided in *callback* will be invoked when the user has
-> responded to the permission request. If the current permission level is
-> PERMISSION_DENIED, the user agent may take no action in response to
-> requestPermission.
-
-Lifetime of notifications
-
-If the page which generates a notification was generated is closed, the
-notification itself will not be closed, but events will not be delivered, as the
-script execution context is no longer present. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/desktop-notifications/index.md b/chromium/docs/website/site/developers/design-documents/desktop-notifications/index.md
deleted file mode 100644
index 409ac301144..00000000000
--- a/chromium/docs/website/site/developers/design-documents/desktop-notifications/index.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: desktop-notifications
-title: Desktop Notifications
----
-
-**See also: [API
-Specification](/developers/design-documents/desktop-notifications/api-specification)
-for notifications**
-
-**Design for desktop notifications**
-The Desktop Notifications API allows script to request a small toast to appear
-on the desktop of the user. The contents of the toast can either be specified as
-iconUrl/title/text strings, or as a URL to a remote resource which contains the
-contents of the toast.
-In Chromium/WebKit, the API is provided to scripts in WebCore by injecting into
-WebKit (via the Chrome/ChromeClient objects) an implementation of a
-NotificationPresenter interface, which contains methods to show and cancel
-toasts, as well as to check and request permission to show toasts. These calls
-flow via IPC from the renderer process to the browser process, where the toasts
-are actually created on the screen using a small HtmlView.
-**Event feedback**
-Several events flow in the opposite direction: when a notification is displayed
-(it may not be immediate if the screen is cluttered), closed, or encounters an
-error, an event is fired which can be listened for by javascript. These events
-are detected in the browser process and flow back to the renderer instance which
-owns the notification object. Tracking is done by notification-id counters in
-each renderer process, and a map within the browser process which associates a
-toast on the screen with the corresponding renderer-process-id and
-notification-id. Since the renderer process chooses the id, the IPC involved can
-be asynchronous.
-**Lifetime considerations**
-If a page which is showing a desktop notification is closed, the toast should
-not be automatically removed from the screen. However, as the javascript
-Notification object has gone out of scope, Chromium must not attempt to invoke
-events on it. The NotificationPresenter interface supports this via a
-notificationObjectDestroyed() method which must be called from WebCore when a
-Notification object is destroyed.
-For this reason, the renderer process's NotificationPresenter keeps a map of its
-notification-id values to Notification object pointers; if a Notification
-pointer goes out of scope, the NotificationPresenter is called and removes that
-pointer from the map. If the browser subsequently calls with an event on that id
-it will be ignored.
-
-If a renderer process crashes, the notifications will persist in the browser
-process and on the screen, but events intended to reach that renderer process
-will be filtered out in the browser when normal process-lookup fails.
-**Permissions**
-Desktop notification permission is assigned on an origin basis. Chromium stores
-two PrefLists in the user's profile to accomplish this: OriginsAllowed and
-OriginsDenied. A script may request permission on a given origin through a JS
-API which is routed through the NotificationPresenter interface, into the
-browser process via IPC, and results in an InfoBar offering "Allow" or "Deny".
-The origin is then stored in the correct PrefList.
-When a notification is to be shown, permission must first be checked: this is
-handled in the same way, invoking the NotificationPresenter in the renderer,
-jumping via synchronous IPC to the browser, checking the PrefLists and
-returning.
-**Workers' notifications**
-The same API is available to worker processes and mirrors the behavior for
-renderers, with IPC messages using a "worker" flag for correct routing of event
-feedback.
-**Mac/Linux integration**
-On Mac and Linux, we considered to use 3rd party notification libraries, but
-have determined that having a unified HTML-capable interface is a better course,
-so Chrome will render HTML notifications on these platforms as well.
-**Deployment plan**
-Presently the desktop notifications API will be disabled by default, but can be
-enabled with the command-line switch --enable-desktop-notifications.
-*Browser Process Object Flow*
-==============
-RenderViewHost
-v (receives IPC from renderer)
-v
-DesktopNotificationService
-v (object owned by ProfileImpl which handles requests for notifications, also
-"upcasts" text notification to HTML based on template)
-v
-v posts a task
-v
-NotificationUIManager
-v (global object owned by BrowserProcess which manages the space on the desktop
-for notification balloons)
-v
-BalloonCollection
-v (set of balloons on the screen, handles animations as balloons are added and
-removed)
-v
-Balloon
-(mini window, draws notification chrome and contains HTML contents view,
-receives "dismiss" click from the user)
-*Renderer Process Object Flow*
-==============
-Calling from JavaScript to create a notification:
-NotificationCenter object in WebCore
-v (returned by DOMWindow::webkitNotifications()).
-v
-v V8 bindings
-v
-WebKit::NotificationPresenterImpl
-v (WebKit API object which adapts between WebCore::NotificationPresenter
-interface and matching WebKit API interface)
-v
-RendererNotificationPresenter
-(implements WebKit::WebNotificationPresenter interface, object owned by
-WebViewDelegate implementation; sends IPC messages to browser, allocates IDs,
-stores map of ID-&gt;Notification objects)
-Calling back into JavaScript to relay notification events:
-RendererNotificationPresenter
-v (receives IPC message from browser process regarding an event)
-v
-v (post task onto main thread: lookup in notification-id-&gt;Notification object
-map, discard if invalid)
-v
-WebKit::WebNotification (PIMPL wrapper in WebKit API for WebCore::Notification
-object)
-v
-v (invoke event listener)
-v
-Notification in WebCore \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/directwrite-font-cache/index.md b/chromium/docs/website/site/developers/design-documents/directwrite-font-cache/index.md
deleted file mode 100644
index 6c5c3c7c39c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/directwrite-font-cache/index.md
+++ /dev/null
@@ -1,565 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: directwrite-font-cache
-title: DirectWrite Font Cache (obsolete)
----
-
-# The font cache is obsolete. For the current implementation, see the [DirectWrite font proxy](/developers/design-documents/directwrite-font-proxy)
-
-# Abstract:
-
-With Chrome version 38 DirectWrite has been enabled by default on Windows
-Chrome. With Chrome’s secure sandbox architecture DirectWrite poses a basic but
-significant problem. DirectWrite relies on Font Cache Service for system
-installed fonts. It communicates with Font Cache service over Windows mostly
-undocumented and traditional IPC mechanism of ALPC (Asynchronous Local Procedure
-Call.). Due to severe sandbox restrictions DirectWrite is not able to
-communicate to Font Cache service from Chrome Renderer process. This causes main
-hurdle for implementation and usage of DirectWrite from Renderer process.
-DirectWrite allows loading of Custom Fonts separately from System Fonts. We used
-this concept to enable DirectWrite in current release by loading system font
-files as custom fonts. Though this mechanism currently works, it definitely adds
-to load time for renderer (Latency range of 40th percentile less than ~226ms and
-90th percentile ~3000ms). To solve this load latency issue we are implementing
-Font Cache in the Browser process, which will be shared by all renderers. The
-Font Cache will be scoped only for loading all font families and such properties
-during initial DirectWrite font enumeration process. Individual font file for
-Glyphs will still be directly loaded from disk.
-
-## .
-
-## Implementation:
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/sr3ilNMP6rJv-ADbjZC1BFQ/image?w=624&h=263&rev=1&ac=1"
-height=263px; width=624px;>
-
-Inside content/renderer most of the code which deals with all DirectWrite custom
-font collection details is in file
-[renderer_font_platform_win.cc/.h](https://code.google.com/p/chromium/codesearch#chromium/src/content/renderer/renderer_font_platform_win.cc).
-The code is comprised mainly of the following classes that DirectWrite requires
-for loading custom font collection.
-
-FontCollectionLoader: (implementing IDWriteFontCollectionLoader)
-
-Function of interest in this class is CreateEnumeratorFromKey, which returns a
-font file enumerator to the caller.
-
-FontFileEnumerator: (implementing IDWriteFontFileLoader)
-
-This class provides one way enumerator using two function MoveNext and
-GetCurrentFile. MoveNext lets you move cursor to next file in the list where as
-GetCurrentFile gets you file at the cursor. We create a reference to font file
-at cursor using our custom font file loader and return that reference to caller.
-
-FontFileLoader: (implementing IDWriteFontFileLoader)
-
-As name suggests this class is responsible for loading actual font file whether
-it is from disk, resources or somewhere else. This class returns a new instance
-of FontFileStream for the file.
-
-FontFileStream: (implementing IDWriteFontFileStream)
-
-This class actually lets call read bytes and fragments of Font File. DirectWrite
-during initial phase of building collection seem to use methods provided by this
-class to read various data table entries, which include information such as Font
-Families contained in this file. Main function implemented here is
-ReadFileFragment(), which returns binary data starting a specified offset and of
-specified size.
-
-The journey for all this class maze starts from a call to function
-IDWriteFactory::CreateCustomFontCollection(). We supply our own custom
-FontCollectionLoader as parameter to this function so that DirectWrite ends up
-calling us for loading of the actual collection.
-
-\[ Before calling CreateCustomFontCollection we load list of system installed
-fonts from registry (HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows
-NT\\CurrentVersion\\Fonts.). This list is in the form of key value pair, where
-usually key is the name of the main font family contained in the file e.g. Arial
-(TrueType) and value is the path to file which contains that family. e.g.
-arial.ttf. When full path is not specified system uses standard font location
-such as \\windows\\fonts. In our current implementation we ignore all font files
-which have absolute path specified. We are doing this in order to avoid any
-clashes with our sandbox policy. e.g. if path for a file is c:\\program
-files\\xyz\\arial.ttf, we cannot load this file from renderer as this particular
-path is sandboxed. We have added Windows standard font location such as
-\\windows\\fonts into our sandbox policy to load font files from there. \]
-
-DirectWrite then invokes function to create an enumerator to load all font files
-through our FontCollectionLoader. We expose instance to our custom enumerator
-for loading these files (FontFileEnumerator). Then DirectWrite enumerates and
-creates instance of each font file using MoveNext and GetCurrentFile functions.
-Seemingly DirectWrite goes through entire font file collection for generating a
-copy of local cache in some undocumented data structure. Through
-FontFileEnumerator and FontFileLoader when we return instance to FontFileStream
-to represent single font file in our collection, DirectWrite calls
-ReadFileFragment multiple times to get required data to fill internal data
-structures. After entire enumeration is done, DirectWrite then will satisfy some
-of the queries such as how many font families are available etc, from internal
-data structures for actual Glyphs it again creates instance of our
-FontFileStream using the key that we provided during enumeration time.
-
-Given above flow we can clearly see that DirectWrite is dealing with Font
-Collection in two phases, one phase is to load and enumerate entire collection
-to read all font files for properties and store them in internal data structure,
-the other phase is to actually read glyphs and data from specific font file. Our
-theory is that the font file collection enumeration is the key part contributing
-to initial latency and we are trying to minimize that using our font cache. One
-problem with loading all font files that are installed on the system is that
-they are large in numbers. From UMA numbers 55th percentile files to be loaded
-are ~340. Which means every new renderer instance will go through loading of
-those many files. Given our understanding of how antivirus and antimalware
-programs work, we think that these programs sometime add checks for each file
-load operation, which adds to the latency.
-
-As mentioned above we want to provide cache implementation only for phase 1 Font
-File enumeration of DirectWrite. In our experiments we observed that when
-calling ReadFileFragment for the same file such as arial.ttf in various runs,
-DirectWrite actually asks for same offset and chunk sizes. If we cache these
-offsets and chunk sizes into single file during this enumeration phase then we
-may avoid loading of all these font files at least during the startup. In second
-phase we are little less worried as the it is very unlikely that any webpage or
-application in renderer ends up loading all font files simultaneously. In our
-experiments we saw maximum of upto 3-4 font files loaded in phase 2.
-
-For Cache implementation we plan to go through DirectWrite font file enumeration
-noting down all offsets and chunk sizes along with actual chunk bytes in Cache
-File. We run this process either through Chrome Browser or Chrome utility
-process. In our experiment we found that for some files like simunb.ttf,
-DirectWrite ends up asking for entire file after first few chunks. To avoid
-caching whole file simsunb.ttf (~16MB.) We will check on percentage of total
-file to be cached against preset limit such as 70% ([Histogram of total fonts
-with respective cache sizes](#histogram)) and only allow caching chunks if
-criteria satisfies. During actual enumeration inside renderer we will always
-supply alternative path (That is of direct loading from disk) for any font file
-that is asked by DirectWrite during enumeration which is not present in our
-cache.
-
-We will store this cache file under user profile folder. We will have to provide
-mechanism to check for consistency of the file using either checksum or write
-completed mark. Once cache file is created browser process will open this file
-during initialization and map into a shared memory section accessible in read
-only form to all renderers. Renderer will first try to open the section for font
-cache during enumeration process. If unable to find the section renderers will
-fall back to old font file loading path.
-
-Caching merged segments:
-
-As briefly mentioned above, through ReadFileFragment function of FontFileStream,
-DirectWrite reads various data segments inside font file. In our experiments
-these segments overlap each other. Sometimes DirectWrite keeps querying several
-subset of a segment which it read in some previous call. In our caching strategy
-we wait for all these segments to be read and keep track of these offsets and
-length pairs as DirectWrite reads font file. For an example look at sample log
-of following segments that it read for arial.ttf font file in our trials.
-
-<table>
-<tr>
-
-<td>No.</td>
-
-<td>Starting Offset</td>
-
-<td>Data Chunk Length</td>
-
-</tr>
-<tr>
-
-<td>1</td>
-
-<td>0</td>
-
-<td>117</td>
-
-</tr>
-<tr>
-
-<td>2</td>
-
-<td>0</td>
-
-<td>7</td>
-
-</tr>
-<tr>
-
-<td>3</td>
-
-<td>0</td>
-
-<td>16</td>
-
-</tr>
-<tr>
-
-<td>4</td>
-
-<td>0</td>
-
-<td>12</td>
-
-</tr>
-<tr>
-
-<td>5</td>
-
-<td>12</td>
-
-<td>368</td>
-
-</tr>
-<tr>
-
-<td>6</td>
-
-<td>504</td>
-
-<td>96</td>
-
-</tr>
-<tr>
-
-<td>7</td>
-
-<td>380</td>
-
-<td>54</td>
-
-</tr>
-</table>
-
-Figure 1: Shows how segments overlap in actual reading of Arial.ttf font file.
-
-During closing of this font file, we fold/merge all these chunks of segments so
-to create unified caching segments. As could be seen in Figure 1, there are
-several segments that start from offset 0 and are of various sizes, also there
-are some segments which extended already encountered segment because of overlap.
-In Figure 1, segments numbers 2 to 4 are all complete subsets of segments number
-1. In this particular case we fold all these subsets into single to be cached
-segment of (offset: 0, length: 117). Segment number 5 is an overlapping segment
-which starts within (0, 117) but extends beyond it. In this case we extend our
-to be cached segment of (0, 117) to be (0, 368). If you next look at segment
-number 7, then we also need to combine this segment into our first to be cached
-segment of (0, 368) as it is immediate next segment. In conclusion we cache our
-first segment as (0, 442) which is representative of segment numbers 1 to 5 and
-7. We will store segment number 6 separately in our cache. With this logic our
-folded/merged cached segments become:
-
-<table>
-<tr>
-
-<td>No.</td>
-
-<td>Starting Offset</td>
-
-<td>Data Chunk Length</td>
-
-</tr>
-<tr>
-
-<td>1</td>
-
-<td>0</td>
-
-<td>442</td>
-
-</tr>
-<tr>
-
-<td>2</td>
-
-<td>504</td>
-
-<td>96</td>
-
-</tr>
-</table>
-
-Figure 2: Shows how the segments get folded/merged while caching.
-
-During read phase we check if requested segment lies within boundaries of cached
-segments and provide data for request from cache.
-
-## Font Cache File Format:
-
-CacheFileHeader:
-
-Declaration:
-
-struct CacheFileHeader {
-
-UINT32 file_signature;
-
-UINT32 magic_completion_signature;
-
-UINT32 version;
-
-UINT32 undefined\[5\];
-
-};
-
-Details:
-
-file_signature: Contains values identifying this file type. Current value is
-0x4D4F5243, which denote ascii letters ‘CROM’.
-
-magic_completion_signature: Contains specific value which indicate that file has
-been fully written. This is to minimally ensure consistency of the file. Current
-value is 0x454E4F44, which denote ascii letter ‘DONE’
-
-version: Contains version of file format.
-
-undefined: Some extra space to accommodate for future addition of fields into
-this file.
-
-CacheFileEntry:
-
-Declaration:
-
-struct CacheFileEntry {
-
-UINT64 file_size;
-
-DWORD entry_count;
-
-wchar_t file_name\[kMaxFontFileNameLength\];
-
-};
-
-Details:
-
-CacheFileEntry is entry per font file. e.g. arial.ttf and arialb.ttf will have
-two separate entries.
-
-We will have fixed space for font file name. This could be problematic for font
-file names which exceed our limit and are a letter or two off at the end. We
-will have to ignore such entry from adding to font cache for now.
-
-file_size: File size here refers to original file size for which this font file
-entry exists. e.g. size of arial.ttf. This size is required when DirectWrite
-calls GetFileSize function of FontFileStream class.
-
-entry_count: It contains total number of CacheFileOffsetEntry records following
-this CacheFileEntry record.
-
-file_name: Name of the original .ttf/.ttc file.
-
-CacheFileOffsetEntry:
-
-struct CacheFileOffsetEntry {
-
-UINT64 start_offset;
-
-UINT64 length;
-
-/\* BYTE blob\[\]; // Place holder for the blob that follows. \*/
-
-};
-
-Details:
-Array of CacheFileOffsetEntry records follow single CacheFileEntry record. Size
-of this array is specified in entry_count_ field of CacheFileEntry.
-
-start_offset: Contains starting offset within original file that was asked by
-DirectWrite during enumeration in call to ReadFileFragment.
-
-length: This contains value from fragmet_size parameter of ReadFileFragment,
-which as passed by DirectWrite during initial enumeration.
-
-BYTE blob\[\]: This is just a place holder. What follows each
-CacheFileOffsetEntry record is actual blob of data that was returned to
-DirectWrite during initial enumeration. This blob should be copy of exact
-contents of original file such as arial.ttf or times.ttf.
-
-\*\* Our assumption here is that no font file has duplicate record in our cache.
-
-\*\* Another assumption is that if for some reason we find font file cache
-invalid, we just recreate it instead of repairing it.
-
-## Font Cache File Layout:
-
-<table>
-<tr>
-
-<td>CacheFileHeader</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>file_signature</td></td>
-
-<td><td>magic_signature</td></td>
-
-<td><td>version</td></td>
-
-<td><td>undefined</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>CacheFileEntry</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>file_size</td></td>
-
-<td><td>entry_count</td></td>
-
-<td><td>file_name</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>CacheFileOffsetEntry</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>start</td></td>
-
-<td><td>length</td></td>
-
-<td><td>Actual Cached Data Segment</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>CacheFileOffsetEntry</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>start</td></td>
-
-<td><td>length</td></td>
-
-<td><td>Actual Cached Data Segment</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>...</td>
-
-</tr>
-<tr>
-
-<td>CacheFileEntry</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>file_size</td></td>
-
-<td><td>entry_count</td></td>
-
-<td><td>file_name</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>CacheFileOffsetEntry</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>start</td></td>
-
-<td><td>length</td></td>
-
-<td><td>Actual Cached Data Segment</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>CacheFileOffsetEntry</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>start</td></td>
-
-<td><td>length</td></td>
-
-<td><td>Actual Cached Data Segment</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>CacheFileOffsetEntry</td>
-
-<td> <table></td>
-<td> <tr></td>
-
-<td><td>start</td></td>
-
-<td><td>length</td></td>
-
-<td><td>Actual Cached Data Segment</td></td>
-
-<td> </tr></td>
-<td> </table></td>
-
-</tr>
-<tr>
-
-<td>...</td>
-
-</tr>
-</table>
-
-## Font In-memory Cache:
-
-Internally cache is represented by a map of font file name to a list of data
-segments cached from that file. Here in the list we just store start, length and
-pointer inside original cache file, which is memory mapped.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/shy9MpsyCNfdhVX7zqgAefA/image?w=594&h=214&rev=1&ac=1"
-height=214px; width=594px;>
-
-## Histogram of total fonts with cached percentile.
-
-Following histogram shows frequency of fonts on a typical Windows 8 system in
-reference to their respective cached size. Here we are referring to respective
-cache size as total number of bytes that need to be present in cache file
-compared to original font file.
-
-<img alt="dwrite-font-caching-histogram.png"
-src="https://lh5.googleusercontent.com/pShkIUuF5tXWbeqv8F7fPdPNkE-FBdEK-8QQhLuUmX5wkS-tIlsKOMBflGL83n_ZHr3ji4rPZlwe3xczxk6_U4_duYOYfOHXvCojTGYP0hYXPwiRkOQ3yiGwybij8dRwfg"
-height=418px; width=566px;>
-
-## References:
-
-Microsoft DirectWrite API documentation.
-
-<http://msdn.microsoft.com/en-us/library/windows/desktop/dd371554(v=vs.85).aspx>
-
-DirectWrite font system in comparison to GDI.
-
-<http://blogs.msdn.com/b/text/archive/2009/04/15/introducing-the-directwrite-font-system.aspx> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/Removing DWrite font cache (1).png.sha1 b/chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/Removing DWrite font cache (1).png.sha1
deleted file mode 100644
index bc7233c427f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/Removing DWrite font cache (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-aeeb3c224d9e00deda0861541956fb558ae21726 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/index.md b/chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/index.md
deleted file mode 100644
index f4817892996..00000000000
--- a/chromium/docs/website/site/developers/design-documents/directwrite-font-proxy/index.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: directwrite-font-proxy
-title: DirectWrite Font Proxy
----
-
-## **Overview**
-
-The sandbox prevents the renderer from using the system font collection. To get
-around this, we use IPC to enumerate fonts from the system collection in the
-browser and load the corresponding font files in the renderer. The renderer is
-still able to leverage the functionality provided by DirectWrite by loading just
-the needed font files into individual collections, and presenting an
-IDWriteFontCollection interface that allows loading fonts on demand.
-
-**Implementation**
-
-[<img alt="image"
-src="/developers/design-documents/directwrite-font-proxy/Removing%20DWrite%20font%20cache%20%281%29.png">](/developers/design-documents/directwrite-font-proxy/Removing%20DWrite%20font%20cache%20%281%29.png)
-
-DWriteFontProxyMessageFilter is responsible for interacting with the system font
-collection and processing the IPC messages. It can determine if any given font
-is present on the system, and return the list of corresponding font files. The
-message filter is also involved in font fallback.
-
-The DWriteFontCollectionProxy implements IDWriteFontCollection, which is the
-primary interface the font proxy exposes to its clients (primarily Blink and
-Skia). The font collection proxy maintains a cache of all previously loaded font
-families, as well as a list of family names which it tried to load but which
-were not present on the system. When asked for a font family, the collection
-will send an IPC to determine if the family is present. If the family exists,
-the collection will return a DWriteFontFamilyProxy instance. Later, when the
-family is asked for more detailed font data, the proxy will send another IPC to
-get a list of needed font files from the browser. These font files are loaded
-into a custom IDWriteFontCollection using
-IDWriteFactory::CreateCustomFontCollection, which provides the needed
-IDWriteFontFamily.
-
-The DWriteFontFamilyProxy implements IDWriteFontFamily. This is mostly a
-pass-through implementation. The font family proxy will ensure that the font
-family is loaded (this involves sending an IPC to get the list of font files),
-and subsequently will forward calls to the underlying DirectWrite font family.
-
-**Font Fallback**
-
-#### Font fallback uses a similar mechanism to avoid having to load all the fonts in the renderer. When MapCharacters is called, FontFallback will send an IPC to locate the fallback font using the system font collection.
-
-**Future development**
-
-Windows 10 implments IDWriteFactory3::CreateFontCollectionFromFontSet which may
-provide a way to create a font collection that has all the same data as the
-system collection, but does not require loading all the font files. The
-following info was provided by a Microsoft developer and describes a potential
-approach:
-
-> It sounds like you’ve found a pretty good solution with your IPC approach, but
-> I’ll explain more about IDWriteFontSetBuilder in case you find it helpful. In
-> Windows 10, the font collection API is actually implemented in terms of the
-> new font set API. Once you’ve created a custom font set, you can call
-> IDWriteFactory3::CreateFontCollectionFromFontSet to create an equivalent font
-> collection from it. There’s no need to abandon your existing code that uses
-> IDWriteFontCollection, which is still fully supported. However, you might also
-> find it helpful to use the font set API directly in some cases – for example,
-> to query by PostScript name.
-
-> To create a custom font set:
-
-> 1. Call IDWriteFactory3::CreateFontSetBuilder.
-
-> 2. Call IDWriteFontSetBuilder::AddFontFaceReference once for each font you
-> want to add.
-
-> 3. Call IDWriteFontSetBuilder::CreateFontSet.
-
-> There are two overloads of AddFontFaceReference. The one you want takes an
-> IDWriteFontFaceReference and an array of DWRITE_FONT_PROPERTY structures. When
-> you add a font this way, CreateFontSet just constructs the font set using the
-> properties you specify, so it doesn’t have to parse the font. The other
-> overload just takes a font face reference, which means CreateFontSet has to
-> parse the font file to extract the font properties.
-
-> The above assumes you have a priori knowledge of all the font properties. One
-> possible design would be for your higher-privilege process to get the system
-> font set from DWrite, iterate over all the fonts, and serialize the font
-> references (file names) and corresponding properties to an XML for JSON file.
-> The lower-privilege processes can then consume that file to construct a custom
-> font set (and font collection) in-process.
-
-> To create a font face reference, you could call
-> IDWriteFactory3::CreateFontFaceReference – no need to implement a custom
-> loader. We won’t actually open the font file unless you use the font. Note,
-> however, that creating an IDWriteFont object counts as “using” the font in
-> this context because not all the information exposed by that interface is
-> stored as part of the font set. Therefore, you want to avoid patterns in which
-> you enumerate all the fonts in the collection and create IDWriteFont objects
-> for each. For example, you might be doing that now in order to build up a
-> dictionary of PostScript names (something no longer necessary because
-> PostScript name lookup is directly supported by IDWriteFontSet). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer v2.ai.sha1 b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer v2.ai.sha1
deleted file mode 100644
index 199192be207..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer v2.ai.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bb3642ffc76eb531cdd2370e1066d57a0bf14e66 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer-v2.png.sha1 b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer-v2.png.sha1
deleted file mode 100644
index 344063e9fde..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer-v2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-894cf76581ec8d6ff22b29ddbeb88ed4cc73e0db \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer.ai.sha1 b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer.ai.sha1
deleted file mode 100644
index 40dd7a8e96e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer.ai.sha1
+++ /dev/null
@@ -1 +0,0 @@
-97780a2085c79581bdc360550f5dac2f66dfe0ee \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/index.md b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/index.md
deleted file mode 100644
index a050781b393..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/index.md
+++ /dev/null
@@ -1,283 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: displaying-a-web-page-in-chrome
-title: How Chromium Displays Web Pages
----
-
-This document describes how web pages are displayed in Chromium from the bottom
-up. Be sure you have read the [multi-process
-architecture](/developers/design-documents/multi-process-architecture) design
-document. You will especially want to understand the block diagram of major
-components. You may also be interested in [multi-process resource
-loading](/developers/design-documents/multi-process-resource-loading) for how
-pages are fetched from the network.
-
-## Conceptual application layers
-
-[<img alt="image"
-src="https://docs.google.com/drawings/pub?id=1gdSTfvLxbJDbX8oiWo5LTwAmXmdMQvjoUhYEhfhj0-k&w=473&h=211">](https://docs.google.com/drawings/pub?id=1gdSTfvLxbJDbX8oiWo5LTwAmXmdMQvjoUhYEhfhj0-k&w=473&h=204)
-
-(The original Google Doc for this illustration is http://goo.gl/MsEJX which is
-open for editing by any @chromium.org)
-
-Each box represents a conceptual application layer. No layer should have
-knowledge of or dependencies on any higher-level layers.
-
-* **WebKit:** Rendering engine shared between Safari, Chromium, and
- all other WebKit-based browsers. The **Port** is a part of WebKit
- that integrates with platform dependent system services such as
- resource loading and graphics.
-* **Glue:** Converts WebKit types to Chromium types. This is our
- "WebKit embedding layer." It is the basis of two browsers, Chromium,
- and test_shell (which allows us to test WebKit).
-* **Renderer / Render host:** This is Chromium's "multi-process
- embedding layer." It proxies notifications and commands across the
- process boundary.
-* **WebContents:** A reusable component that is the main class of the
- Content module. It's easily embeddable to allow multiprocess
- rendering of HTML into a view. See the [content module
- pages](/developers/content-module) for more information.
-* **Browser:** Represents the browser window, it contains multiple
- WebContentses.
-* **Tab Helpers**: Individual objects that can be attached to a
- WebContents (via the WebContentsUserData mixin). The Browser
- attaches an assortment of them to the WebContentses that it holds
- (one for favicons, one for infobars, etc).
-
-## WebKit
-
-We use the [WebKit](http://webkit.org/) open-source project to lay out web
-pages. This code is pulled from Apple and stored in the /third_party/WebKit
-directory. WebKit consists primarily of "WebCore" which represents the core
-layout functionality, and "JavaScriptCore" which runs JavaScript. We only run
-JavaScriptCore for testing purposes, normally we replace it with our high
-performance V8 JavaScript engine. We do not actually use the layer that Apple
-calls "WebKit," which is the embedding API between WebCore and OS X applications
-such as Safari. We normally refer to the code from Apple generically as "WebKit"
-for convenience.
-
-### The WebKit port
-
-At the lowest level we have our WebKit "port." This is our implementation of
-required platform-specific functionality that interfaces with the
-platform-independent WebCore code. These files are located in the WebKit tree,
-typically in chromium directories or as Chromium-suffixed files. Much of our
-port is not actually OS-specific: you could think of it as the "Chromium port"
-of WebCore. Some parts, like font rendering, must be handled differently for
-each platform.
-
-* Network traffic is handled by our [multi-process resource
- loading](/developers/design-documents/multi-process-resource-loading)
- system rather than being handed off to the OS directly from the
- render process.
-* Graphics uses the Skia graphics library developed for Android. This
- is a cross-platform graphics library and handles all images and
- graphics primitives except for text. Skia is located in
- /third_party/skia. The main entrypoint for graphics operations is
- /webkit/port/platform/graphics/GraphicsContextSkia.cpp. It uses many
- other files in the same directory as well as from /base/gfx.
-
-### The WebKit glue
-
-The Chromium application uses different types, coding styles, and code layout
-than the third-party WebKit code. The WebKit "glue" provides a more convenient
-embedding API for WebKit using Google coding conventions and types (for example,
-we use std::string instead of WebCore::String and GURL instead of KURL). The
-glue code is located in /webkit/glue. The glue objects are typically named
-similar to the WebKit objects, but with "Web" at the beginning. For example,
-WebCore::Frame becomes WebFrame.
-
-The WebKit "glue" layer insulates the rest of the Chromium code base from
-WebCore data types to help minimize the impact of WebCore changes on the
-Chromium code base. As such, WebCore data types are never used directly by
-Chromium. APIs are added to the WebKit "glue" for the benefit of Chromium when
-it needs to poke at some WebCore object.
-
-The "test shell" application is a bare-bones web browser for testing our WebKit
-port and glue code. It uses the same glue interface for communicating with
-WebKit as Chromium does. It provides a simpler way for developers to test new
-code without having many complicated browser features, threads, and processes.
-This application is also used to run the automated WebKit tests. However, the
-downside of the "test shell" is that it doesn't exercise WebKit as Chromium
-does, in a multi-process way. The content module is embedded in an application
-called "content shell" which will soon be running the tests instead.
-
-## The render process
-
-[<img alt="image"
-src="/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer-v2.png">](/developers/design-documents/displaying-a-web-page-in-chrome/Renderingintherenderer-v2.png)
-
-Chromium's render process embeds our WebKit port using the glue interface. It
-does not contain very much code: its job is primarily to be the renderer side of
-the [IPC](/developers/design-documents/inter-process-communication) channel to
-the browser..
-
-The most important class in the renderer is the RenderView, located in
-/content/renderer/render_view_impl.cc. This object represents a web page. It
-handles all navigation-related commands to and from the browser process. It
-derives from RenderWidget which provides painting and input event handling. The
-RenderView communicates with the browser process via the global (per render
-process) RenderProcess object.
-
-FAQ: What's the difference between RenderWidget and RenderView? RenderWidget
-maps to one WebCore::Widget object by implementing the abstract interface in the
-glue layer called WebWidgetDelegate.. This is basically a Window on the screen
-that receives input events and that we paint into. A RenderView inherits from
-RenderWidget and is the contents of a tab or popup Window. It handles
-navigational commands in addition to the painting and input events of the
-widget. There is only one case where a RenderWidget exists without a RenderView,
-and that's for select boxes on the web page. These are the boxes with the down
-arrows that pop up a list of options. The select boxes must be rendered using a
-native window so that they can appear above everything else, and pop out of the
-frame if necessary. These windows need to paint and receive input, but there
-isn't a separate "web page" (RenderView) for them.
-
-### Threads in the renderer
-
-Each renderer has two threads (see the [multi-process
-architecture](/developers/design-documents/multi-process-architecture) page for
-a diagram, or [threading in Chromium](/developers/design-documents/threading)
-for how to program with them). The render thread is where the main objects such
-as the RenderView and all WebKit code run. When it communicates to the browser,
-messages are first sent to the main thread, which in turn dispatches the message
-to the browser process. Among other things, this allows us to send messages
-synchronously from the renderer to the browser. This happens for a small set of
-operations where a result from the browser is required to continue. An example
-is getting the cookies for a page when requested by JavaScript. The renderer
-thread will block, and the main thread will queue all messages that are received
-until the correct response is found. Any messages received in the meantime are
-subsequently posted to the renderer thread for normal processing.
-
-## The browser process
-
-[<img alt="image"
-src="/developers/design-documents/displaying-a-web-page-in-chrome/rendering%20browser.png">](/developers/design-documents/displaying-a-web-page-in-chrome/rendering%20browser.png)
-
-### Low-level browser process objects
-
-All [IPC](/developers/design-documents/inter-process-communication)
-communication with the render processes is done on the I/O thread of the
-browser. This thread also handles all [network
-communication](/developers/design-documents/multi-process-resource-loading)
-which keeps it from interfering with the user interface.
-
-When a RenderProcessHost is initialized on the main thread (where the user
-interface runs), it creates the new renderer process and a ChannelProxy
-[IPC](/developers/design-documents/inter-process-communication) object with a
-named pipe to the renderer. This object runs on the I/O thread of the browser,
-listening to the named pipe to the renderer, and automatically forwards all
-messages back to the RenderProcessHost on the UI thread. A ResourceMessageFilter
-will be installed in this channel which will filter out certain messages that
-can be handled directly on the I/O thread such as network requests. This
-filtering happens in ResourceMessageFilter::OnMessageReceived.
-
-The RenderProcessHost on the UI thread is responsible for dispatching all
-view-specific messages to the appropriate RenderViewHost (it handles a limited
-number of non-view-specific messages itself). This dispatching happens in
-RenderProcessHost::OnMessageReceived.
-
-### High-level browser process objects
-
-View-specific messages come into RenderViewHost::OnMessageReceived. Most of the
-messages are handled here, and the rest get forwarded to the RenderWidgetHost
-base class. These two objects map to the RenderView and the RenderWidget in the
-renderer (see "The Render Process" above for what these mean). Each platform has
-a view class (RenderWidgetHostView\[Aura|Gtk|Mac|Win\]) to implement integration
-into the native view system.
-
-Above the RenderView/Widget is the WebContents object, and most of the messages
-actually end up as function calls on that object. A WebContents represents the
-contents of a webpage. It is the top-level object in the content module, and has
-the responsibility of displaying a web page in a rectangular view. See the
-[content module pages](/developers/content-module) for more information.
-
-The WebContents object is contained in a TabContentsWrapper. That is in chrome/
-and is responsible for a tab.
-
-**Illustrative examples**
-
-Additional examples covering navigation and startup are in [Getting Around the
-Chromium Source
-Code](/developers/how-tos/getting-around-the-chrome-source-code).
-
-### Life of a "set cursor" message
-
-Setting the cursor is an example of a typical message that is sent from the
-renderer to the browser. In the renderer, here is what happens.
-
-* Set cursor messages are generated by WebKit internally, typically in
- response to an input event. The set cursor message will start out in
- RenderWidget::SetCursor in content/renderer/render_widget.cc.
-* It will call RenderWidget::Send to dispatch the message. This method
- is also used by RenderView to send messages to the browser. It will
- call RenderThread::Send.
-* This will call the IPC::SyncChannel which will internally proxy the
- message to the main thread of the renderer and post it to the named
- pipe for sending to the browser.
-
-Then the browser takes control:
-
-* The IPC::ChannelProxy in the RenderProcessHost receives all message
- on the I/O thread of the browser. It first sends them through the
- ResourceMessageFilter that dispatches network requests and related
- messages directly on the I/O thread. Since our message is not
- filtered out, it continues on to the UI thread of the browser (the
- IPC::ChannelProxy does this internally).
-* RenderProcessHost::OnMessageReceived in
- content/browser/renderer_host/render_process_host_impl.cc gets the
- messages for all views in the corresponding render process. It
- handles several types of messages directly, and for the rest
- forwards to the appropriate RenderViewHost corresponding to the
- source RenderView that sent the message.
-* The message arrives at RenderViewHost::OnMessageReceived in
- content/browser/renderer_host/render_view_host_impl.cc. Many
- messages are handled here, but ours is not because it's a message
- sent from the RenderWidget and handled by the RenderWidgetHost.
-* All unhandled messages in RenderViewHost are automatically forwarded
- to the RenderWidgetHost, including our set cursor message.
-* The message map in
- content/browser/renderer_host/render_view_host_impl.cc finally
- receives the message in RenderWidgetHost::OnMsgSetCursor and calls
- the appropriate UI function to set the mouse cursor.
-
-### Life of a "mouse click" message
-
-Sending a mouse click is a typical example of a message going from the browser
-to the renderer.
-
-* The Windows message is received on the UI thread of the browser by
- RenderWidgetHostViewWin::OnMouseEvent which then calls
- ForwardMouseEventToRenderer in the same class.
-* The forwarder function packages the input event into a
- cross-platform WebMouseEvent and ends up sending it to the
- RenderWidgetHost it is associated with.
-* RenderWidgetHost::ForwardInputEvent creates an IPC message
- ViewMsg_HandleInputEvent, serializes the WebInputEvent to it, and
- calls RenderWidgetHost::Send.
-* This just forwards to the owning RenderProcessHost::Send function,
- which in turn gives the message to the IPC::ChannelProxy.
-* Internally, the IPC::ChannelProxy will proxy the message to the I/O
- thread of the browser and write it to the named pipe of the
- corresponding renderer.
-
-Note that many other types of messages are created in the WebContents,
-especially navigational ones. These follow a similar path from the WebContents
-to the RenderViewHost.
-
-Then the renderer takes control:
-
-* IPC::Channel on the main thread of the renderer reads the message
- sent by the browser, and IPC::ChannelProxy proxies to the renderer
- thread.
-* RenderView::OnMessageReceived gets the message. Many types messages
- are handled here directly. Since the click message is not, it falls
- through (with all other unhandled messages) to
- RenderWidget::OnMessageReceived which in turn forwards it to
- RenderWidget::OnHandleInputEvent.
-* The input event is given to WebWidgetImpl::HandleInputEvent where it
- is converted to a WebKit PlatformMouseEvent class and given to the
- WebCore::Widget class inside WebKit. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/layers.png.sha1 b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/layers.png.sha1
deleted file mode 100644
index 927939a3962..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/layers.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-277d065285b4ca66e59c7c3724aafd89bcf353ac \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering browser.png.sha1 b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering browser.png.sha1
deleted file mode 100644
index 56fca86bcb0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering browser.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1973fda51ade5ff07afa50212ee4a2c0d23503ec \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer.png.sha1 b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer.png.sha1
deleted file mode 100644
index 02b79526bb8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4565f3a61ee5dd5efe81ff26be81293245c2261b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer2.png.sha1 b/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer2.png.sha1
deleted file mode 100644
index 02b79526bb8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/displaying-a-web-page-in-chrome/rendering renderer2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4565f3a61ee5dd5efe81ff26be81293245c2261b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/dns-prefetching/index.md b/chromium/docs/website/site/developers/design-documents/dns-prefetching/index.md
deleted file mode 100644
index bdbfd83eaeb..00000000000
--- a/chromium/docs/website/site/developers/design-documents/dns-prefetching/index.md
+++ /dev/null
@@ -1,207 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: dns-prefetching
-title: DNS Prefetching
----
-
-[TOC]
-
-## Problem
-
-DNS resolution time can lead to a significant amount of user perceived latency.
-The time that DNS resolution takes is highly variable. Latency delays range from
-around 1ms (locally cached results) to commonly reported times of several
-seconds.
-
-## Solution
-
-DNS prefetching is an attempt to resolve domain names before a user tries to
-follow a link. This is done using the computer's normal DNS resolution
-mechanism; no connection to Google is used. Once a domain name has been
-resolved, if the user does navigate to that domain, there will be no effective
-delay due to DNS resolution time. The most obvious example where DNS prefetching
-can help is when a user is looking at a page with many links to various domains,
-such as a search results page. When we encounter hyperlinks in pages, we extract
-the domain name from each one and resolving each domain to an IP address. All
-this work is done in parallel with the user's reading of the page, using minimal
-CPU and network resources. When a user clicks on any of these pre-resolved
-names, they will on average save about 200 milliseconds in their navigation
-(assuming the user hadn't already visited the domain recently). More importantly
-than the average savings, users won't tend to experience the "worst case" delays
-for DNS resolution, which are regularly over 1 second.
-
-## **Architecture**
-
-Chromium's implementation of DNS prefetching does not use the browser's network
-stack at all. Instead, it relies on external threads to resolve the names,
-thereby warming the DNS cache of the operating system (completely ignoring any
-cache in the application network stack). The advantage of this approach was that
-it was completely compatible with all network stacks (it is external), and
-prevented accidental regressions on the main network stack.
-
-Since some DNS resolutions can take a long time, it is paramount that such
-delays in one resolution should not cause delays in other resolutions. Toward
-this end (on Windows, where there is no native support for asynchronous DNS
-resolution), Chromium currently employs 8 completely asynchronous worker threads
-to do nothing but perform DNS prefetch resolution. Each worker thread simply
-waits on a queue, gets the next requested domain name, and then blocks on a
-synchronous Windows resolution function. Eventually the operating system
-responds with a DNS resolution, the thread then discards it (leaving the OS
-cache warmed!), and waits for the next prefetch request. With 8 threads, it is
-rare than more than one or two threads will block extensively, and most
-resolution proceed rather quickly (or as quickly as DNS can service them!). On
-Debug builds, the "about:histograms/DNS.PrefetchQueue" has current stats on the
-queueing delay.
-
-## **Manual Prefetch**
-
-Chromium uses the "href" attribute of hyperlinks to find host names to prefetch.
-However, some of those hyperlinks may be redirects, for example if the site is
-trying to count how many times the link is clicked. In those situations, the
-"true" targeted domain is not necessarily discernible by examining the content
-of a web page, and so Chromium not able to prefetch the final targeted domain.
-
-To improve the speed of redirects, content authors can add the following tag to
-their page:
-
-&lt;link rel="dns-prefetch"
-href="[//host_name_to_prefetch.com](http://the_worlds_best_vendor.com/)"&gt;
-
-The above "link rel" tag has no impact on the visual rendering of the page, but
-causes Chromium to prefetch the DNS resolution of "host_name_to_prefetch.com" as
-though there was an actual href targeted at a path in that domain. The double
-slashes indicate that the URL starts with a host name (as specified in [RFC
-1808](http://www.ietf.org/rfc/rfc1808.txt)). It is equivalent (but unnecessary)
-to use a full URL such as "http://host_name_to_prefetch.com/".
-
-## **DNS Prefetch Control**
-
-By default, Chromium does not prefetch host names in hyperlinks that appear in
-HTTPS pages. This restriction helps prevent an eavesdropper from inferring the
-host names of hyperlinks that appear in HTTPS pages based on DNS prefetch
-traffic. The one exception is that Chromium may periodically re-resolve the
-domain of the HTTPS page itself.
-An inquisitive content author (for example, a commenter on a blog) may abuse DNS
-prefetching to attempt to monitor viewing of content containing links. For
-example, links with novel subdomains, when resolved during a prefetch, may
-notify a domain's resolver that a link was viewed, even if it was not clicked.
-In some such cases, the authority serving the content (such as a blog owner, or
-webmail server) may wish to preclude such abusive monitoring.
-To allow webmasters to control whether DNS prefetch is enabled or disabled,
-Chromium includes a DNS Prefetch Control mechanism. It can be used to turn DNS
-prefetch on for HTTPS pages, or turn it off for HTTP pages.
-
-Chromium watches for an HTTP header of the form "X-DNS-Prefetch-Control" (case
-insensitive) with a value of either "on" or "off." This setting changes the
-default behavior for the rendered content. A "meta http-equiv" tag of the same
-name can be used to make policy changes within a page. If a page explicitly opts
-out of DNS prefetch, further attempts to opt in are ignored.
-
-For example, the following page from
-[==https://content_author.com/==](https://content_author.com/) would cause
-Chromium to prefetch "b.com" but not "a.com", "c.com", or "d.com".
-
-&lt;a
-href="[==http://a.com==](http://www.google.com/url?q=http%3A%2F%2Fa.com&sa=D&sntz=1&usg=AFQjCNEYnDzIlRjJbXDcx3Cax_hkvntAFQ)"&gt;
-A) Default HTTPS: No prefetching &lt;/a&gt;
-&lt;meta http-equiv="x-dns-prefetch-control" content="on"&gt;
-&lt;a
-href="[==http://b.com==](http://www.google.com/url?q=http%3A%2F%2Fb.com&sa=D&sntz=1&usg=AFQjCNFq7tUq50NgFVyTsk2WMeiRf6l6WQ)"&gt;
-B) Manual opt-in: Prefetch domain resolution. &lt;/a&gt;
-&lt;meta http-equiv="x-dns-prefetch-control" content="off"&gt;
-&lt;a
-href="[==http://c.com==](http://www.google.com/url?q=http%3A%2F%2Fc.com&sa=D&sntz=1&usg=AFQjCNFTPfaTERg_4COAyTmt8OqdKsFsCA)"&gt;
-C) Manual opt-out: Don't prefetch domain resolution &lt;/a&gt;
-&lt;meta http-equiv="x-dns-prefetch-control" content="on"&gt;
-&lt;a
-href="[==http://d.com==](http://www.google.com/url?q=http%3A%2F%2Fd.com&sa=D&sntz=1&usg=AFQjCNEJTYzjWlVmnzIooEfteTYJZzXmzA)"&gt;
-D) Already opted out: Don't prefetch domain resolution. &lt;/a&gt;
-Child frames also inherit the DNS prefetch control opt-out setting from their
-parent. The DNS prefetch control setting applies only to hyperlinks and not to
-the manual prefetch mechanism.
-
-## **Browser Startup**
-
-Chromium automatically remembers the first 10 domains that were resolved the
-last time the Chromium was started, and automatically starts to resolve these
-names **very** early in the startup process. As a result, the domains for a
-user's home page(s), along with any embedded domains (or anything the user
-"always" visits just after startup), are generally resolved before much of
-Chromium has ever loaded. When Chromium finally starts to try to load and render
-those pages, there is typically no DNS induced latency, and the application
-effectively "starts up" (becoming usable) faster. Average startup savings are
-200ms or more, with common acceleration over 1 second.
-
-## Omnibox
-
-Prefetching is also used in Chromium's omnibox, where URL and/or search queries
-are entered. The omnibox automatically proposes an action, either of the form of
-a search query, or a URL navigation, as the user types in text. This proposed
-action is considered the autocompletion of what the user is typing. Each time
-the omnibox makes a proposal (suggests an autocompletion), the domain for the
-underlying URL is automatically pre-resolved. This means that when a user is
-entering a search query, while they type the query (typically when they enter a
-space between words), Chromium will automatically prefetch the resolution of the
-domain in their search provider's URL. Assuming they haven't done a search in a
-while, this can save a user an average of over 100ms in getting a search result,
-if not more. Similarly, if the URL is a "common" URL that they've typed in the
-past (e.g., their favorite web site; bank; email provider; their company; etc.),
-the savings in resolution time can be quite significant.
-
-## Effectiveness
-
-### **Typical Usage**
-
-If a user resolved a domain name to an IP address recently, their operating
-system will remember (cache) the answer, and then resolution time can be as low
-as 0-1ms (a thousandth of a second). If the resolution is not locally cached and
-needs to "go out over the network," then a bare minimum for resolution time is
-about 15 ms, assuming a nearby firewall (home router?) has a cached answer to
-the question. Most common names like google.com and yahoo.com are resolved so
-often that most local ISP's name resolvers can answer in closer to 80-120ms. If
-the domain name in question is an uncommon name, then a query may have to go
-through numerous resolvers up and down the hierarchy, and the delay can average
-closer to 200-300ms. More interestingly, for any of these queries that access
-the internet, dropped packets, and overworked (under provisioned) name
-resolvers, regularly increases the total resolution time to between 1 and 10
-seconds.
-
-### **Network Usage**
-
-DNS resolutions use a hierarchical system, where each level in the hierarchy has
-a cache, to remember previous resolutions. As a result, extra resolutions don't
-generally speaking cause end-to-end internet usage. The resolutions only go as
-far as needed toward the "authoritative" resolver, stopping when they reach a
-resolver that already has the resolution in a cache. In addition, DNS resolution
-requests are very light weight. Each request typically involves sending a single
-UDP packet that is under 100 bytes out, and getting back a response that is
-around 100 bytes. This minimal impact on network usage is compensated by a
-significant improvement in user experience.
-
-### Cache Eviction
-
-The local machine's DNS cache is pretty limited. Current estimates for the
-number of resolutions remembered on a Windows XP box are in the range of 50-200
-domain names. As a result, if "too many" resolutions are made, then some
-"necessary" resolutions might be "evicted" from the cache to make room for the
-new prefetches. Chromium tries to model the underlying cache, and guess when
-there is a chance that a "soon to be needed" domain resolution has been evicted.
-When Chromium decides an eviction may have taken place, it can automatically
-resolve the domain name again, ensuring it is either reloaded into the cache, or
-marked as "recently used" so that it won't be evicted for a "while." Cache
-evictions caused by Chromium can have a negative impact on other applications
-that don't (yet) use prefetching techniques to keep the underlying cache "warm."
-
-Many large internet sites (google.com, yahoo.com, etc.) commonly mark the domain
-names resolutions with an expiration time in the neighborhood of 5 minutes. They
-probably set the expiration time to be short so that they can better respond to
-changes in supply and demand for their services. This in turn tends cause cache
-evictions. As a result, most applications tend to face the problem of cache
-eviction, and already employ various methods to reduce the impact.
-
-The "about:histograms/DNS" and "about:dns" pages contain more information about
-DNS prefetch activity. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/download/index.md b/chromium/docs/website/site/developers/design-documents/download/index.md
deleted file mode 100644
index 905aef818b3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/download/index.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: download
-title: Download
----
-
-**Diagnose download issues**
-
-Download used to use NetLog for logging purpose, as it is considered part of the
-network operation. With network servicification, NetLog will no longer be
-accessible outside the network process. As a result, download is switching to
-TraceEvent for logging.
-
-# Netlog format (this is deprecated)
-
-For a DownloadItem, its netlog looks like this:
-
-#### 21571799: DOWNLOAD
-
-#### gzip-1.3.9.tar
-
-Start Time: 2017-11-06 11:36:31.319
-
-t=81821 \[st= 0\] +DOWNLOAD_ITEM_ACTIVE \[dt=539\]
---&gt; danger_type = "NOT_DANGEROUS"
---&gt; file_name = "gzip-1.3.9.tar"
---&gt; final_url = "http://ftp.gnu.org/gnu/gzip/gzip-1.3.9.tar"
---&gt; has_user_gesture = true
---&gt; id = "3640"
---&gt; original_url = "http://ftp.gnu.org/gnu/gzip/gzip-1.3.9.tar"
---&gt; start_offset = "0"
---&gt; type = "NEW_DOWNLOAD"
-t=81821 \[st= 0\] DOWNLOAD_URL_REQUEST
---&gt; source_dependency = 21571791 (URL_REQUEST)
-t=81822 \[st= 1\] DOWNLOAD_FILE_CREATED
---&gt; source_dependency = 21571800 (DOWNLOAD_FILE)
-t=81825 \[st= 4\] DOWNLOAD_ITEM_UPDATED
---&gt; bytes_so_far = "0"
-t=81833 \[st= 12\] DOWNLOAD_ITEM_SAFETY_STATE_UPDATED
---&gt; danger_type = "MAYBE_DANGEROUS_CONTENT"
-t=81865 \[st= 44\] DOWNLOAD_ITEM_RENAMED
---&gt; new_filename = "/usr/local/google/home/qinmin/Downloads/Unconfirmed
-246585.crdownload"
---&gt; old_filename = ""
-t=82304 \[st=483\] DOWNLOAD_ITEM_UPDATED
---&gt; bytes_so_far = "1648640"
-t=82305 \[st=484\] DOWNLOAD_ITEM_UPDATED
---&gt; bytes_so_far = "1648640"
-t=82360 \[st=539\] DOWNLOAD_ITEM_RENAMED
---&gt; new_filename = "/usr/local/google/home/qinmin/Downloads/gzip-1.3.9.tar"
---&gt; old_filename = "/usr/local/google/home/qinmin/Downloads/Unconfirmed
-246585.crdownload"
-t=82360 \[st=539\] DOWNLOAD_ITEM_COMPLETING
---&gt; bytes_so_far = "1648640"
---&gt; final_hash =
-"A08ABC68B607A70450930E698A90A0C30C81CE45A656CC47D2B89CA87C059DF6"
-t=82360 \[st=539\] DOWNLOAD_ITEM_FINISHED
---&gt; auto_opened = "no"
-
-For a DownloadFile, it looks like:
-
-#### 21571800: DOWNLOAD_FILE
-
-Start Time: 2017-11-06 11:36:31.320
-
-t=81822 \[st= 0\] +DOWNLOAD_FILE_ACTIVE \[dt=538\]
---&gt; source_dependency = 21571799 (DOWNLOAD)
-t=81822 \[st= 0\] +DOWNLOAD_FILE_OPENED \[dt=43\]
---&gt; file_name =
-"/usr/local/google/home/qinmin/.local/share/.com.google.Chrome.pzFBTU"
---&gt; start_offset = "0"
-t=81822 \[st= 0\] DOWNLOAD_STREAM_DRAINED
---&gt; num_buffers = 0
---&gt; stream_size = 0
-t=81865 \[st= 43\] -DOWNLOAD_FILE_OPENED
-t=81865 \[st= 43\] DOWNLOAD_FILE_RENAMED \[dt=0\]
---&gt; new_filename = "/usr/local/google/home/qinmin/Downloads/Unconfirmed
-246585.crdownload"
---&gt; old_filename =
-"/usr/local/google/home/qinmin/.local/share/.com.google.Chrome.pzFBTU"
-t=81865 \[st= 43\] +DOWNLOAD_FILE_OPENED \[dt=493\]
---&gt; file_name = "/usr/local/google/home/qinmin/Downloads/Unconfirmed
-246585.crdownload"
---&gt; start_offset = "0"
-t=81883 \[st= 61\] DOWNLOAD_FILE_WRITTEN \[dt=0\]
---&gt; bytes = "2262"
-
-…...
-t=82304 \[st=482\] DOWNLOAD_FILE_WRITTEN \[dt=0\]
---&gt; bytes = "2582"
-t=82358 \[st=536\] -DOWNLOAD_FILE_OPENED
-t=82358 \[st=536\] DOWNLOAD_STREAM_DRAINED
---&gt; num_buffers = 2
---&gt; stream_size = 10898
-t=82359 \[st=537\] DOWNLOAD_FILE_RENAMED \[dt=0\]
---&gt; new_filename = "/usr/local/google/home/qinmin/Downloads/gzip-1.3.9.tar"
---&gt; old_filename = "/usr/local/google/home/qinmin/Downloads/Unconfirmed
-246585.crdownload"
-t=82359 \[st=537\] DOWNLOAD_FILE_ANNOTATED \[dt=0\]
-t=82360 \[st=538\] DOWNLOAD_FILE_DETACHED
-t=82360 \[st=538\] -DOWNLOAD_FILE_ACTIVE
-
-# Collect trace event
-
-To start tracing, open Chrome and type in chrome://tracing in the URL bar, Click
-on the record button and click on the “Edit Categories” button, check the
-“download” category and uncheck all other categories, then hit the record
-button.
-
-# Migrating to Trace Event
-
-With trace event, we still want to group most of the file operations and
-download events under the same download. Otherwise, it will be hard to analyze
-the trace if multiple downloads are on going. The downloadId is passed from
-DownloadItem to DownloadFile, so it could be used to group all the nestable
-events.
-
-Because DownloadFile and DownloadItem live on different thread, DownloadFile’s
-trace may outlive DownloadFile’s although the former is created later. As a
-result, we will still keep the DownloadFile and DownloadItem events into
-separate nestable groups.
-
-Trace event is thread based, so instant events will not be grouped to into any
-nestable events. A possible solution is to make any instant events a nestable
-async events, but that doesn’t seems very necessary.
-
-The trace event will contain all the information captured by the previous
-NetLog, and will be shown in the following format:
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/sGXr-eMkBNj31sftVEkr-7A/image?w=595&h=127&rev=33&ac=1&fmt=svg"
-height=127 width=595>
-
-As see in the graph, most of the download file events are grouped under
-DownloadFileActive group. Instant events doesn’t belong to any group, and could
-take place on different threads.
-
-Events under DownloadFileActive include DownloadFileOpen and DownloadFileWrite.
-
-Events under CrBrowserMain include most of the DownloadItem event, such as
-DownloadStarted, DownloadItemUpdated, DownloadItemInterrupted,
-DownloadItemCancelled, DownloadItemRenamed, DownloadItemSafetyStateUpdated,
-DownloadItemCompleting, DownloadItemFinished and DownloadFileCreated event.
-
-There could be multiple TaskScheduler threads for the write to happen. So events
-like DownloadStreamDrained, DownloadFileRename, DownloadFileAnnotate,
-DownloadFileDetached. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_complete.png.sha1 b/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_complete.png.sha1
deleted file mode 100644
index 2bad5a7db77..00000000000
--- a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_complete.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9d72a89983d7826e705672362a04710aa72209d1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_interrupted.png.sha1 b/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_interrupted.png.sha1
deleted file mode 100644
index cf21ea86fd4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_interrupted.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-90f10853bfa627407400bfe5e71e60486d226e37 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_restart.png.sha1 b/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_restart.png.sha1
deleted file mode 100644
index 523633aea0e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_restart.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c40486499a3be20b0272380ea2a0f06037336e80 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_start.png.sha1 b/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_start.png.sha1
deleted file mode 100644
index 2225ec690bb..00000000000
--- a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_start.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8e2b1da40334c4272a52d220e97285af165536cb \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_unpaused.png.sha1 b/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_unpaused.png.sha1
deleted file mode 100644
index ae37df60254..00000000000
--- a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/Download_unpaused.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-59c101fd64392c92b90ad9fe245bf021d16e680f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/index.md b/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/index.md
deleted file mode 100644
index 617976dec20..00000000000
--- a/chromium/docs/website/site/developers/design-documents/downloadmanagersequences/index.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: downloadmanagersequences
-title: Download Manager Sequences
----
-
-The following are typical paths taken during a file download.
-
-The start sequence shows what happens after the headers have been received in
-response to an HTTP request for a file.
-
-[<img alt="image"
-src="/developers/design-documents/downloadmanagersequences/Download_start.png">](/developers/design-documents/downloadmanagersequences/Download_start.png)
-
-Start
-
-This sequence shows what happens when the file has finished downloading:
-
-[<img alt="image"
-src="/developers/design-documents/downloadmanagersequences/Download_complete.png">](/developers/design-documents/downloadmanagersequences/Download_complete.png)
-
-Complete
-
-This sequence shows what happens when the user resumes a download that has been
-paused:
-
-[<img alt="image"
-src="/developers/design-documents/downloadmanagersequences/Download_unpaused.png">](/developers/design-documents/downloadmanagersequences/Download_unpaused.png)
-
-Unpause
-
-This following sequences have not been checked in yet.
-
-This sequence shows what should happen when an error occurs during a file
-download.
-
-Note that currently, the "Complete" sequence is executed in this case, so the
-file appears to have downloaded properly but is in fact incomplete.
-
-[<img alt="image"
-src="/developers/design-documents/downloadmanagersequences/Download_interrupted.png">](/developers/design-documents/downloadmanagersequences/Download_interrupted.png)
-
-Interrupted
-
-This shows how a sequence would be restarted after an interruption (error)
-occurs.
-
-It basically sends a new request for the remainder of the data, and appends it
-to the existing partial file.
-
-[<img alt="image"
-src="/developers/design-documents/downloadmanagersequences/Download_restart.png">](/developers/design-documents/downloadmanagersequences/Download_restart.png)
-
-Restart \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (1).png.1379119292169.png.sha1 b/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (1).png.1379119292169.png.sha1
deleted file mode 100644
index d5035649315..00000000000
--- a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (1).png.1379119292169.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-835cfb2590c35b439c6ca2a2fdf480ba90c27e33 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (2).png.1379119349348.png.sha1 b/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (2).png.1379119349348.png.sha1
deleted file mode 100644
index cf9e1d7eba3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser (2).png.1379119349348.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3bca0790460398ae405bf7bc2edabf6fba5dbcfd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser.png.1379119228467.png.sha1 b/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser.png.1379119228467.png.sha1
deleted file mode 100644
index 1eceea73cbf..00000000000
--- a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design Doc- Flash Fullscreen in Browser.png.1379119228467.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-38bfbb302fd3e1871c65016f8d30e5435dcd9453 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/index.md b/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/index.md
deleted file mode 100644
index 7fffeb0af38..00000000000
--- a/chromium/docs/website/site/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/index.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: embedding-flash-fullscreen-in-the-browser-window
-title: Embedding Flash Fullscreen in the Browser Window
----
-
-# Author: Yuri Wiitala (miu@chromium.org)
-
-# Objective
-
-Enhance the \[Pepper\] Flash fullscreen user experience in Chromium to match the
-HTML5 fullscreen experience. This would provide users with a single, consistent
-fullscreen-mode experience, with Flash fullscreen gaining the improved
-window/desktop management behaviors of HTML5 fullscreen. For example, on Mac,
-one cannot switch to other apps from Flash fullscreen, but this action is
-intelligently handled in the HTML5 fullscreen case.
-
-Side note: Later on, we seek to improve the fullscreen UX further by introducing
-a new "Fullscreen in Tab" concept for tab capture/screencasting
-(<http://crbug.com/256870>). While a user is "casting," fullscreen content is
-being displayed on a remote screen. Therefore, the local screen should be usable
-for other tabs or applications. The changes proposed in this document are a
-necessary prerequisite for this.
-
-Background
-
-Currently, Flash fullscreen is implemented in the "content" component where a
-raw, platform-dependent fullscreen window is created. Some minimal
-focus/keyboard control logic is added to support exit and mouse-lock. The entire
-stack assumes the Flash plugin handles the user permissions with respect to
-allowing fullscreen and/or mouse-locking, and so blindly allows all requests.
-
-Fullscreen mode is initiated by the render process, which is proxying the
-request from the Pepper Flash process. It sends a "create" message followed
-immediately by a "show" message. Once the fullscreen window is shown, a resize
-message is sent back to the renderer as a signal that painting may begin.
-
-The control flow for entering and exiting Flash fullscreen is as follows:
-
-[<img alt="image"
-src="/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design%20Doc-%20Flash%20Fullscreen%20in%20Browser.png.1379119228467.png">](/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design%20Doc-%20Flash%20Fullscreen%20in%20Browser.png.1379119228467.png)
-
-On the other hand, the Browser (user-initiated, "F11") and Tab/HTML5
-(renderer-initiated) fullscreen modes are controlled by the browser UI
-implementation in the "chrome" component, one abstraction level higher. The
-browser uses FullscreenController to manage the window sizing and show
-"permissions balloons" for both modes, and handles the transitions of switching
-in-between or in-and-out.
-
-To engage fullscreen mode for an HTML5 element, the renderer sends a "toggle"
-message to the browser process. Unlike Flash fullscreen, no new widgets are
-created. FullscreenController instructs the browser window to expand to fill the
-screen, and this causes the tab content view to be resized via the layout
-process. Then, the renderer process receives a resize message signalling that
-fullscreen mode is on. The originating HTML5 element (e.g., a video element),
-will then be resized to fill the content area.
-
-The control flow for entering and exiting HTML5 fullscreen is as follows:
-
-[<img alt="image"
-src="/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design%20Doc-%20Flash%20Fullscreen%20in%20Browser%20%281%29.png.1379119292169.png">](/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design%20Doc-%20Flash%20Fullscreen%20in%20Browser%20%281%29.png.1379119292169.png)
-
-Thus, there exist two separate fullscreen control/view implementations in
-Chromium that operate independently and at different component layers. There
-actually exists a conflict, should a page choose to initiate HTML5 fullscreen
-during Flash fullscreen or vice versa.
-
-# Observations and Goals
-
-Fortunately, there are key similarities between the implementations of Flash
-fullscreen and HTML5 fullscreen that suggests the former can be merged into the
-machinery of the latter. First, renderer-side, both send one or more messages to
-the browser process to engage fullscreen mode, and both expect an asynchronous
-ViewMsg_Resize message to confirm and receive the fullscreen dimensions. Second,
-browser-side, the messages from the renderer are handled by delegating to the
-same WebContentsImpl instance to initialize and kick-off. Finally, the browser
-process sends one or more ViewMsg_Resize messages to notify the renderer of
-"screen size" changes, and a ViewMsg_Close to shut down rendering of the widget.
-
-In the past, developing for the Pepper Flash plugin required overcoming very
-temperamental compatibility issues. Since one permeating goal is to ensure Flash
-fullscreen does not break, no changes will be made that could be observable by
-the renderer process (and, by proxy, the pepper flash plugin). This means no
-changes to IPC messaging, with the ordering and content of the messages being
-exactly the same as in the current implementation.
-
-If we are to proceed, one UX issue to resolve is the "Press Esc to Exit
-Fullscreen" message rendered by the Pepper Flash plugin: Ideally, for
-consistency, this would be removed in favor of the balloon pop-up shown by
-FullscreenController. If this is not possible, then the balloon pop-up should
-not be displayed for Flash.
-
-# Design
-
-A three-part change to the existing design is proposed. First, the Flash
-"fullscreen" render widget will become embedded within the browser window. More
-specifically, it will replace the normal tab content view in the view hierarchy
-and participate in layout like any other widget. The owner and creator of the
-widget will remain the same and, from the renderer's perspective, Flash will
-still be painting into its own dedicated "fullscreen" widget.
-
-Second, the FullscreenController will be used to manage the the sizing/expansion
-of the browser window for all fullscreen modes, including Flash, and will treat
-Flash fullscreen in the same way as HTML5 fullscreen. As an embedded widget
-within the browser window, the Flash fullscreen widget will become expanded to
-fill the entire screen during the layout process. FullscreenController itself
-will need only small tweaks: Just as for HTML5 fullscreen, it will be tasked to
-decide whether the fullscreen and mouse-lock privileges are allowed, but will
-instead treat Flash fullscreen mode as fully-privileged by default.
-
-Finally, WebContentsImpl will be modified to invoke the new "embedded widget"
-code paths for startup and shutdown (described in detail below). Use of the new
-code paths versus the old will be switchable via a new WebContentsDelegate
-method, EmbedsFullscreenWidget(). This method will declare whether the browser
-implements embedded Flash fullscreen and whether it is enabled/disabled via
-command-line flags.
-
-The control flow for entering and exiting embedded Flash fullscreen is as
-follows (additions/changes in red):
-
-[<img alt="image"
-src="/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design%20Doc-%20Flash%20Fullscreen%20in%20Browser%20%282%29.png.1379119349348.png">](/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window/Design%20Doc-%20Flash%20Fullscreen%20in%20Browser%20%282%29.png.1379119349348.png)
-
-## Entering Embedded Flash Fullscreen Mode
-
-WebContentsImpl drives this process, being the delegate of the
-RenderViewHostImpl which receives the "show" message from the renderer. Instead
-of showing the window it created as a raw, fullscreened window, the behavior of
-ShowCreatedFullscreenWidget() changes to the following:
-
- Toggle the Browser into fullscreen mode via the same code path as for HTML5
- fullscreen. This triggers FullscreenController's logic which will cause the
- BrowserWindow to expand and re-layout for full-screen. In addition, the
- "Allow/Exit" balloon pop-up will be shown, if appropriate.
-
- Invoke WebContentsObserver::DidShowFullscreenWidget() for all observers.
- This will be received by WebView (or TabContentsController for Mac), which
- is the child view within BrowserWindow that contains the tab content.
- WebView will alter its child window hierarchy to embed the Flash fullscreen
- widget within itself and, therefore, within the fullscreened BrowserWindow.
- WebView accesses the Flash fullscreen widget via a new
- WebContents::GetFullscreenRenderWidget() method.
-
-## Exiting Embedded Flash Fullscreen Mode
-
-Exiting must be considered from two possible originators. When the exit is
-requested by the Flash widget itself, RenderWidgetHostImpl::Shutdown() will be
-invoked in the browser process, which in turn calls
-WebContentsImpl::RenderWidgetDeleted(). From here, two steps are taken:
-
- Toggle the Browser out of fullscreen mode. FullscreenController performs the
- same actions as it would for coming out of HTML5 fullscreen, restoring the
- original size and layout of the BrowserWindow.
-
- Invoke WebContentsObserver::DidHideFullscreenWidget() for all observers.
- WebView receives this and responds by re-attaching the normal tab content
- view in its child window hierarchy.
-
-When the exit originates from the Browser UI (e.g., user action in the
-"Allow/Exit" balloon):
-
- FullscreenController takes the BrowserWindow out of fullscreen mode, just
- like HTML5 fullscreen mode.
-
- FullscreenController invokes RenderViewHostImpl::ExitFullscreen(). Again,
- this is just like HTML5 fullscreen mode.
-
- At this point, RenderViewHostImpl notices a Flash fullscreen widget is
- active, and invokes its RenderWidgetHostImpl::Shutdown() method. As
- described above, shutting down the widget will cause the
- DidHideFullscreenWidget() notification to be sent to WebView, restoring the
- normal tab content view in the browser window.
-
-## Other Considerations
-
-Windows 8 Metro Snap mode: When entering Flash fullscreen mode, the
-FullscreenController will no-op. However, WebView will still receive the
-DidShowFullscreenWidget() notification, allowing it to correctly embed the Flash
-fullscreen widget within itself, all properly laid out within the Metro-Snapped
-browser window.
-
-Kiosk (Fullscreen App) mode: Just like Windows 8 Metro Snap mode, the
-FullscreenController will no-op and WebView will correctly embed the Flash
-fullscreen widget.
-
-Content Shell and non-Chromium applications that use src/content/ as a library:
-By default, the non-embed Flash fullscreen code path will be used. The key to
-this is the new WebContentsDelegate::EmbedsFullscreenWidget() method, whose
-default implementation returns false. The method is only overridden to return
-true for the Chromium browser on supported platforms.
-
-# Work Plan
-
-Prototyping/Feasibility of Design: Completed (<http://crrev.com/23656002>).
-
-Implementation for Aura, Windows and Mac; disabled by default, behind feature
-flag: M31 (<http://crrev.com/23477051>).
-
-Implementation for GTK: M32 (with M31 as a stretch goal).
-
-Launch goal: Tested, UI review, and enabled by default for M32. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/encrypted-partition-recovery/index.md b/chromium/docs/website/site/developers/design-documents/encrypted-partition-recovery/index.md
deleted file mode 100644
index 6ec6d6c56fc..00000000000
--- a/chromium/docs/website/site/developers/design-documents/encrypted-partition-recovery/index.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: encrypted-partition-recovery
-title: Encrypted Partition Recovery
----
-
-**Background**
-
-Starting with R22, /var and /home/chronos are bind mounted from the encrypted
-stateful partition (/mnt/stateful_partition/encrypted). Since this partition is
-tied to the TPM state, it will not be available when switching to dev mode, and
-cannot be decrypted if the drive is removed from the device. Additionally, some
-devices don't have a removable drive, making content extraction very difficult
-even without handling the encryption.
-
-The current process to extract the contents depends on a signed recovery image
-written to a USB stick that has been modified to start the extraction process.
-This will cause the system to reboot twice: first into verified mode to perform
-decryption and then back into recovery mode to copy the results to the USB
-stick. Specifically, this will copy the user’s eCryptfs home directory contents
-(and, when the user is the System Owner, also the "encrypted stateful" system
-partition) to the recovery USB stick.
-
-**Prerequisites**
-
-1. Obtain device in verified mode that is misbehaving (this process
- assumes it does not misbehave until after cryptohomed has started
- running).
-2. Obtain device user's username (full email address) and password.
-3. Obtain USB stick at least 4GB in size.
-4. Obtain [signed recovery
- image](https://support.google.com/chromebook/answer/1080595) for the
- device.
-5. Generate modified recovery image for stateful partition extraction:
- 1. Put image inside [cros chroot](/chromium-os/developer-guide)
- (e.g. ~/trunk/recovery_image.bin).
- 2. Run modification script (this grows the recovery image’s
- stateful partition to 3GB to hold the device’s stateful
- contents, and creates a flag file):
- ~/trunk/src/platform/dev/contrib/mod_recovery_for_decryption.sh
- --image ~/trunk/recovery_image.bin --to
- ~/trunk/recovery_decrypt.bin
-6. Write modified recovery image to USB stick.
-
-**Process**
-
-1. DO NOT switch device to Developer mode, as the TPM will get cleared,
- making it impossible to decrypt the stateful partition.
-2. Boot device into Recovery mode.
-3. Insert modified recovery USB stick (built during “Prerequisites”
- above).
-4. Observe "Stateful recovery requested." statement on-screen, then
- wait. (If normal recovery mode starts doing image verification,
- power off the device before it overwrites itself, and see
- troubleshooting below).
-5. Observe “Stateful recovery requires authentication.” Enter username
- (full email address) and password, then wait. (To include the system
- partition in the recovery, the System Owner's credentials should be
- used.)
-6. Observe automatic reboot back into Verified mode. Wait at login
- screen while files are copied. Copying may take some time, so be
- patient. If the device has a disk activity light, it should show
- activity during this step.
-7. Observe automatic reboot back into Recovery mode.
-8. Observe "Stateful recovery requested." statement on-screen, then
- wait. (If normal recovery mode starts doing image verification,
- power off the device before it overwrites itself, and see
- troubleshooting below).
-9. Observe “Prior recovery request exists. Attempting to extract
- files.” on-screen, then wait while files are copied.
-10. Observe “Operation complete, you can now remove your recovery
- media.”
-11. Pull USB stick, and mount first partition on a test machine.
- Device’s recovered contents will be in /recovery/decrypted/.
-
-**Troubleshooting**
-
-If the on-screen statement in step 4 (or 8) is not seen, something went wrong
-with the recovery image modification, and the device should be powered off to
-avoid wiping the device’s stateful partition. Recheck the prerequisites, and
-make sure the image on the USB stick was successfully modified.
-
-If the system never reboots to step 7, the system is likely in such a bad state
-that even cryptohomed hasn’t started. Handling this situation is out of scope of
-this document; a new bug should be opened for this. Large copies can take a
-while, so check for disk activity.
-
-If step 10 fails (e.g. “Copying failed. Please resize your stateful partition
-and try again!”), something went wrong with the copying from the device to the
-USB stick. On devices that have a removable drive, the decrypted files should be
-visible in /mnt/stateful_partition/decrypted. Otherwise, try again with a larger
-USB stick, and increase the number of sectors used when modifying the recovery
-image via the --statefulfs_sectors argument. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/experiments/index.md b/chromium/docs/website/site/developers/design-documents/experiments/index.md
deleted file mode 100644
index 0213f902d0b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/experiments/index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: experiments
-title: Experiments
----
-
-Here's how to hide a feature behind a flag that can be changed from the
-`chrome://flags` page in Chrome, or with a command line flag. We'll use an
-example from the following revision
-[84971](https://src.chromium.org/viewvc/chrome?view=rev&revision=84971) which
-hides the compact navigation bar behind such a flag.
-
-* First, you need to add a string for your command line switch. For example:
- [chrome_switches.h](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/chrome_switches.h?r1=84971&r2=84970&pathrev=84971)
- &
- [chrome_switches.cc](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/chrome_switches.cc?r1=84971&r2=84970&pathrev=84971)
-* Then you need strings to be displayed on the `chrome://flags` page for the
- name and description of your experiment. For example, the two strings with
- IDs starting with IDS_FLAGS_ENABLE in:
- [generated_resources.grd](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/app/generated_resources.grd?r1=84971&r2=84970&pathrev=84971)
-* And then add all this info to a new entry in the Experiments array. For
- example:
- [about_flags.cc](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/about_flags.cc?r1=84971&r2=84970&pathrev=84971)
- * The first string (e.g., "compact-navigation") is an identifier for the
- preference that will be saved in the user profile based on the settings
- chosen by the user on the `chrome://flags` page.
- * The the resource IDs for the name and description strings.
- * Then which OS should expose it.
- * And finally, the access to the command line flag, using one of the
- following macros:
- * SINGLE_VALUE_TYPE_AND_VALUE, SINGLE_VALUE_TYPE, or MULTI_VALUE_TYPE.
-* And finally, use the
- CommandLine::ForCurrentProcess()->[HasSwitch](https://source.chromium.org/chromium/chromium/src/+/main:base/command_line.cc?q=CommandLine::HasSwitch)(<*your
- flag*>) to check its state. For example:
- [tab_menu_model.cc](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/tabs/tab_menu_model.cc?r1=84971&r2=84970&pathrev=84971)
- uses it to decide whether we show the Hide toolbar option in the tab
- contextual menu or not. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/accessibility/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/accessibility/index.md
deleted file mode 100644
index ec12f0c623b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/accessibility/index.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-page_name: accessibility
-title: Accessibility
----
-
-**[TOC]**
-
-**### Keyboard navigation**
-
-**Fundamental to keyboard-only and screen reader users is navigational access
-and interaction using the keyboard alone. This includes means to set keyboard
-focus to toolstrips and Omnibox icons for background page functionality, as well
-as any popups, dialogs or other UI elements the extensions might generate. Also
-required is a way to discern and trigger any associated behavior/action
-connected to these UI elements.**
-
-**Setting keyboard focus to a toolstrip could be provided either through a
-keyboard shortcut (much like we have for the
-[toolbar](/user-experience/toolbar)), or by unifying access to all of our
-toolbars ([toolbar](/user-experience/toolbar),
-[infobars](/developers/design-documents/info-bars),
-[bookmarks](/user-experience/bookmarks), extensions) by a single shortcut and a
-way to circle through them. The first approach is simpler, but the second has
-more long-term merit, avoiding discoverability issues with multiple keyboard
-shortcuts.**
-
-**Once focus is on the toolstrip, arrow keys should be used to traverse between
-toolstrip buttons, and Space/Enter keys to activate them.**
-
-**### Screen reader support**
-
-**The first piece for supporting screen readers is provided by enabling full
-keyboard access (including focus tracking) to the UI. Secondly, correct
-information needs to be exposed through the platform-specific accessibility
-interface ([MSAA](http://msdn.microsoft.com/en-us/library/ms971310.aspx) on
-Windows). Providing this information for toolstrips themselves is almost landed
-(<http://codereview.chromium.org/155446>), and the next step will be to provide
-coverage for the toolstrip buttons.**
-
-**The real challenge here will be to appropriately give access to the
-information otherwise connected to the toolstrip buttons (e.g. the slideout with
-builder status), as well as interactive Omnibox icons.**
-
-**### Low vision**
-
-**The Extensions toolstrip already respects OS font resizing (on Windows:
-Control Panel &gt; Display &gt; Appearance tab, and choose 'Extra Large Fonts').
-Theming (as below with High Contrast) will help for users with contrast
-issues.**
-
-**### High contrast**
-
-**All of the extensions UI should respect the theming imposed by the [High
-Contrast
-mode](http://www.microsoft.com/windowsxp/using/accessibility/highcontrast.mspx).
-Support for this is being developed this quarter (Q3) by Stephen White, and
-should cover Extensions as well.**
-
-**### Developer documentation**
-
-Anyone developing an extension should be aware of accessibility best practices
-for the parts not covered by Chrome browser accessibility. Included in this are
-things such as HTML files and JS content (including dynamically generated HTML).
-
-Developer documentation pages should be built along accepted guidelines and best
-practices for accessible static HTML, where appropriate. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/api-pattern-design-doc/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/api-pattern-design-doc/index.md
deleted file mode 100644
index d596939e57f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/api-pattern-design-doc/index.md
+++ /dev/null
@@ -1,346 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-page_name: api-pattern-design-doc
-title: APIs as stateless service calls
----
-
-**Note:** This is the original proposal and is kept for historical reasons. It
-may be made obsolete by more recent documentation.
-
----
-
-We want to give extensions programmatic APIs to interact with many of the
-browsers' subsystems. Some examples include: tabs, history, bookmarks,
-downloads, and the omnibar.
-
-An interesting wrinkle in Chrome is that in reality, these data structures exist
-in another process. Because of this, it's impossible to keep a perfectly
-consistent view of the world in the extension process. There will at time be
-conflicts between what the extension thinks the current state of the system is,
-and what it actually is. We need to design APIs that makes this fundamental
-problem as easy to deal with as possible.
-
-## Proposal
-
-We could model these APIs as stateless service calls, similar to the way AJAX
-applications work. Each call will be asynchronous, and just dumb data gets
-passed back and forth across the void.
-
-For example:
-
-window.onload = populate;
-
-function populate() {
-
-extension.bookmarks.getAllBookmarks(function(results) {
-
-// Assuming something MochiKit-ish is present.
-
-forEach(results, function(bookmark) {
-
-var div = DIV(A(bookmark.title, bookmark.url), " ", A("edit"));
-
-div.id = "b" + result.id;
-
-div.lastChild.onclick = bind(edit, result.id);
-
-return div;
-
-});
-
-});
-
-}
-
-function edit(id) {
-
-var newTitle = prompt("Enter new title");
-
-extension.bookmarks.updateBookmark({id: id, title: newTitle});
-
-}
-
-The advantages of this approach:
-
-* Chrome doesn't have to send copies of browser state to any extension
- process until it is requested.
-* Chrome doesn't have to have complex machinery to keep multiple
- copies of browser state synchronized across processes.
-* The API reflects the underlying reality -- that the interaction with
- the browser is asynchronous.
-* Fits a wide variety of applications, so many APIs can follow a
- similar pattern, making new APIs easier for chrome-team to build and
- easier for developers to learn.
-* This feels like idiomatic JavaScript.
-
-The disadvantages:
-
-* Not object-oriented. The verbs are at the top level and accept nouns
- as arguments. This could get ugly in cases where a subsystem has
- many nouns.
-* More coupled to JavaScript (bad if we ever wanted to make these APIs
- available to other languages).
-* May encourage us to be lazy with API design by trying to wedge
- everything into this CRUD idiom.
-
-## Details
-
-#### Conflicts
-
-Without cross-process locking, conflicts can occur in any of our APIs. For
-example, you can attempt to navigate a tab that has since been closed. My
-feeling is that conflicts should \*not\* be treated as exceptions. For simple
-things, we should just let the last change win. For more complex cases that make
-no sense, we should print a warning to the console, but not treat it as a
-fully-fledged error. In the limit, there is nothing the developer can really do
-about these cases. We can propagate the real state back to the extension via
-events and the extension can do something about it if it wants (I think in most
-cases, it won't care).
-
-#### Constraints
-
-Many of these data models have constraints and side-effects. For example, it
-doesn't make sense to set a window's zIndex negative, and changing the index of
-a tab affects the index of other tabs in the same window. Constraints and
-side-effects in this system would typically be handled by the server side and
-propagated back to the client by events, if the extension developer had
-registered to receive them.
-
-#### Non-data APIs
-
-Some APIs don't fit this model. For example, interacting with the omnibar or
-receiving requests from content scripts. We'd just have to handle these on a
-case-by-cases basis. I've outlined some ideas below.
-
-## Alternative Ideas
-
-The main alternative is to have a stateful DOM-style API, like this:
-
-foreach(window.extensions.bookmarks, function(bookmark) {
-
-var div = DIV(A(bookmark.title, bookmark.url), " ", A("edit"));
-
-div.id = "b" + result.id;
-
-div.lastChild.onclick = bind(edit, bookmark);
-
-return div;
-
-});
-
-function edit(bookmark) {
-
-var newTitle = prompt("Enter new title");
-
-bookmark.title = newTitle;
-
-bookmark.save();
-
-}
-
-The main downside of this approach is that it requires synchronizing the state
-of the relevant object models between the extension and browser processes, and
-resolving conflicts. Also, as in my example here, we still might want to have an
-explicit update step if the operation would require writing to disk in the
-browser process.
-
-## API Hierarchy Proposal
-
-chromium.
-
-// An event is a way to register to be notified when something happens. In the
-rest of this
-
-// documentation, Events are referred to as first-class, with the following
-notation:
-
-//
-
-// event name(Arg1Type arg1, Arg2Type arg2, ...);
-
-//
-
-// What this means is that the Event in variable "name" wants handlers with the
-signature:
-
-//
-
-// void handler(Arg1Type arg1, Arg2Type arg2, ...)
-
-class Event
-
-void addListener(object callback(...))
-
-void removeListener(object callback(...))
-
-bool hasListener(object callback(...))
-
-// Dispatches the event. Mainly this would be used by the framework, but it
-might be useful
-
-// to expose to developers.
-
-void dispatch(...)
-
-// A class that is essentially a client to an extension "server" process.
-Provides ways to
-
-// interact with the extension server, usually from a content script, but
-theoretically from
-
-// content or another extension.
-
-class Extension
-
-constructor(int id)
-
-Port connect()
-
-string getURL(string path)
-
-// One end of a connection between an extension process and a content script (or
-content, or
-
-// another extension).
-
-class Port
-
-event onmessage
-
-void postMessage(object args) // args is any json-compatible type
-
-[browser.](/system/errors/NodeNotFound)
-
-[downloads.](/developers/design-documents/extensions/proposed-changes/apis-under-development/downloads-api)
-
-[bookmarks.](/system/errors/NodeNotFound)
-
-[history.](/developers/design-documents/extensions/proposed-changes/apis-under-development/history-api)
-
-// TODO:
-
-thumbnails.
-
-// I think these all fit the basic CRUD pattern.
-
-[omnibox.](/developers/design-documents/extensions/proposed-changes/apis-under-development/omnibox-api)
-
-// This one should be really fun to figure out.
-
-// The "self" module is defined differently depending on whether you are inside
-a content
-
-// script or not.
-
-// When in an extension, 'self' is a module, just like 'tabs', 'history', etc,
-that
-
-// provides access to some meta features.
-
-self.
-
-// For access to other parts of an extension.
-
-DOMWindow background // Gets the single background process if there is one
-
-DOMWindow\[\] toolstrips // Gets a list of live toolstrip instances
-
-// Fired when somebody first creates a channel to this extension
-
-Event onconnect(Port port)
-
-// When in a content script, 'self' is an Extension instance referring to the
-parent
-
-// extension. Content scripts can use this to talk to their parent without
-having to
-
-// know its ID, which should be handy during development.
-
-Extension self
-
-## Examples
-
-Move all google tabs into a new window:
-
-chromium.tabs.getAllTabs(function(tabs) {
-
-var tabsToMove = \[\];
-
-tabs.forEach(function(tab) {
-
-// Too bad the URL isn't a parsed representation :(
-
-if (tab.url.indexOf("google.com")) {
-
-tabsToMove.push(tab);
-
-}
-
-}
-
-if (tabsToMove.length &gt; 0) {
-
-chromium.tabs.createWindow(null, function(newWindow) {
-
-tabsToMove.forEach(function(tab) {
-
-chromium.tabs.updateTab({
-
-id: tab.id,
-
-windowId: newWindow.id
-
-});
-
-});
-
-});
-
-}
-
-});
-
-Write out navigation entries to console:
-
-chromium.tabs.ontabchange.addListener(function(old, new) {
-
-if (old.url != new.url) {
-
-console.log("navigated to: " + newTab.url);
-
-}
-
-});
-
-Communication between content scripts and extension:
-
-// Content script
-
-var port = chromium.self.connect();
-
-port.onmessage.addListener(function(message) {
-
-console.log("got message: " + message);
-
-});
-
-port.postMessage({pageUrl: location.href});
-
-// Extension
-
-chromium.self.onconnect.addListener(function(port) {
-
-console.log("received message from: " + port.pageUrl);
-
-port.postMessage("ack");
-
-}); \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-lg.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-lg.png.sha1
deleted file mode 100644
index c1df4894529..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-lg.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-23bb28f778364279328ecc48e2c5cf7db71836c1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm.png.sha1
deleted file mode 100644
index eea5a59d217..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9c302f2c4fd38756d3eb75a36e057876ae9a7ea4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm2.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm2.png.sha1
deleted file mode 100644
index eea5a59d217..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9c302f2c4fd38756d3eb75a36e057876ae9a7ea4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark.crx.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark.crx.sha1
deleted file mode 100644
index fd46d70bb57..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark.crx.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4b5a5e85ba7294cfe5ed655c23dcf2758677cfd4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/index.md
deleted file mode 100644
index 7aa983b70c9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-page_name: chrome-benchmarking-extension
-title: Benchmarking Extension
----
-
-The Chromium Benchmarking Extension is a quick-and-dirty way to test page load
-time performance within Chrome.
-
-### Features
-
-* Can clear the cache between each page load
-* Can clear existing connections between each page load
-* Works with both SPDY and HTTP
-* Measures time-to-first-paint, overall page load time KB
- read/written, and several other metrics
-* Can compare performance between SPDY and HTTP
-
-### Requirements
-
-* Chrome version 7 or later
-* Command-line flag "--enable-benchmarking" should be used to start
- chrome
-
-### Screenshot
-
-> ### [<img alt="image"
-> src="/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm2.png">](/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-sm2.png)
-
-> ### [(Click to
-> enlarge)](/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension/benchmark-lg.png)
-
-### Instructions
-
-> **Option 1: Use the benchmark from the chromium source code**
-
-> The benchmark is part of the chromium source code. You'll find it here:
-
-> &lt;path-to-chrome-tree&gt;\\src\\chrome\\common\\extensions\\docs\\examples\\extensions\\benchmark
-
-> To run Chrome with the benchmark, use the following command line:
-> chrome.exe --enable-benchmarking
-> --load-extension=&lt;path-to-chrome-tree&gt;\\src\\chrome\\common\\extensions\\docs\\examples\\extensions\\benchmark
-> **Option 2: Install from Chrome Extension Gallery**
-> Install the extension from Chrome Extension Gallery following [this
-> link](https://chrome.google.com/extensions/detail/channimfdomahekjcahlbpccbgaopjll).
-> Then you'll need to restart the browser to use it.
-> When you run chrome, use:
-> chrome.exe --enable-benchmarking
-> As of M34, the method that seems to work is to load the source code as an
-> unpacked extension after enabling developer mode and use the flag
-> --enable-net-benchmarking in addition to --enable-benchmarking
-
-Options
-
-> * Iterations: How many times the test page should be loaded to
- collect performance date.
-> * Clear Results: Clear result table.
-> * Clear connectons: Reset the internal socket pool, oherwise chrome
- will reuse the socket connections if possible.
-> * Clear cache: Reset the cache, otherwise chrome could load the page
- from cache if possible.
-> * Enable Spdy: Use spdy to load a page. When enabled, if the web
- server does not support spdy, an error is reported and test will
- stop.
-> * URL to load: A comma separated list of urls to collect performance
- date. Note, the urls listed here should be the final url. E.g.: if
- url1 will be redirect to url2, url2 should be used. Otherwise, an
- error will be reported and test will stop. You can use "Load URLs
- From File" to load the comma separated url list from file if your
- test set is large. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/default-apps/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/default-apps/index.md
deleted file mode 100644
index 167c3ad52dc..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/default-apps/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-page_name: default-apps
-title: Default Apps
----
-
-Branded Chrome builds ship with a few default apps (Gmail, YouTube, etc.) that
-are installed for new users. Default apps are implemented using a variant of the
-[external
-extensions](http://code.google.com/chrome/extensions/external_extensions.html)
-mechanism.
-
-**Adding a new default app**
-
-1. Locate the app in the Chrome Web Store
-2. Select the "Debug" tab
-3. Save its .crx using the "CRX Package Download: Published version"
- link
-4. Copy the .crx to
- [src/chrome/browser/resources/default_apps](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/resources/default_apps/).
-5. Add it to
- [external_extensions.json](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/resources/default_apps/external_extensions.json?view=markup)
- and
- [common.gypi](http://src.chromium.org/viewvc/chrome/trunk/src/build/common.gypi?view=markup)
- (look for default_apps_list and default_apps_list_linux_dest)
-
-Testing your changes by making a branded build is tedious. Instead you can
-manually copy the default apps directory in your build output, e.g.:
-
-$ cp -r chrome/browser/resources/default_apps out/Debug/
-
-Then you can start chrome with out/Debug/chrome
---user-data-dir=/tmp/&lt;somenewdir&gt; to simulate the new user experience.
-
-For an example, see [the
-changelist](https://chromiumcodereview.appspot.com/10535133) that added Google
-Docs as a default app. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/ExtSourceServer.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/ExtSourceServer.png.sha1
deleted file mode 100644
index 86b89dacf05..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/ExtSourceServer.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-949171695de9ea9f6ef2b0aa281553839845e75e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/extension-doc-server.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/extension-doc-server.png.sha1
deleted file mode 100644
index d83da27adba..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/extension-doc-server.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5b853fc4fb8b2c0f9c34f31372d3a13dfdf5daa6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/index.md
deleted file mode 100644
index cd036ae7cbd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served/index.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-- - /developers/design-documents/extensions/how-the-extension-system-works/docs
- - Extension Documentation System
-page_name: how-docs-are-served
-title: How Extension Docs Are Served
----
-
-The documentation for Chrome extensions and apps is served at
-[developer.chrome.com/extensions](https://developer.chrome.com/extensions) and
-[developer.chrome.com/apps](https://developer.chrome.com/apps) by Google App
-Engine.
-
-See
-<https://cs.>[chromium.org/chrome/common/extensions/docs/README](http://chromium.org/chrome/common/extensions/docs/README)
-to learn how the extension/app docs are generated.
-
-## Contributing documentation
-
-Have you found an error in the documentation? Either submit a patch (see below)
-or file a bug with label `Cr-Platform-Extensions` at the [the issue
-tracker](https://code.google.com/p/chromium/issues/list).
-
-1. Check out Chromium's source code, see [Get the Code: Checkout,
- Build, Run & Submit](/developers/how-tos/get-the-code) (`gclient
- runhooks` is optional for this purpose).
-2. Find the relevant file that you need to edit (e.g. by visiting
- [cs.chromium.org](http://cs.chromium.org) and pasting a quoted
- snippet from the page that you want to edit).
-3. To view the documentation locally, run
- `src/chrome/common/extensions/docs/server2/preview.py` (this will
- serve the documentation at http://localhost:8888, add `-p [port]` to
- serve on a different port).
-4. After updating the documentation, upload the patch to
- codereview.chromium.org (see also: [Contributing
- Code](/developers/contributing-code)).
-5. Others can preview your changes by visiting
- `https://chrome-apps-doc.appspot.com/_patch/*[issue
- id]*/extensions/` (or /apps/). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-to-update-the-release-notes/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-to-update-the-release-notes/index.md
deleted file mode 100644
index afc4dfe7ec3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/how-to-update-the-release-notes/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-- - /developers/design-documents/extensions/how-the-extension-system-works/docs
- - Extension Documentation System
-page_name: how-to-update-the-release-notes
-title: Updating the Release Notes
----
-
-This page has some tips on figuring out what's changed between two releases.
-I've used this technique to update the [What's
-New](http://code.google.com/chrome/extensions/whats_new.html) page in the
-extensions doc, but the technique is more generally useful.
-
-To see what's changed between two releases (e.g. M9 and M10):
-
-1. Go to <https://omahaproxy.appspot.com/viewer>, and get the current
- versions of the two releases. E.g.:
- 1. M9 (win stable): 9.0.597.107
- 2. M10 (win beta): 10.0.648.119
-2. Go to <https://omahaproxy.appspot.com/changelog>, enter the versions
- in the fields, and click **Get SVN logs**. E.g.:
- 1. Old Version: 9.0.597.107
- 2. New Version: 10.0.648.119
- 3. &lt;click!&gt;
- You'll see a big page of revisions, with a revision range (e.g.
- 67679:72316).
- 4. Search for interesting strings in this page, and open relevant
- links to check whether they're worth talking about.
- **Note:** This tells you the differences between these branches at the
- time the branches were created. If you substitute 1 for the last tuple
- of each version #, you get exactly the same information.
-3. Do #2 again, but this time change the old version to be the same as
- the new version, but with a 1 as the last tuple. E.g.:
- 1. Old Version: 10.0.648.1
- 2. New Version: 10.0.648.119
- 3. &lt;click!&gt;
- You'll see another page of revisions with a different (higher) revision
- range (e.g. 72323:75907).
- 4. Search for interesting strings in this page.
-4. Once you have a list of probable changes, make sure they weren't
- merged into the previous release. One way to do this is to do #3
- again, using the previous release's numbers. E.g.:
- 1. Old Version: 9.0.597.1
- 2. New Version: 9.0.597.107
- 3. &lt;click!&gt;
- 4. Search for the revision #s you found interesting in steps 2 & 3.
- If you find something that *was* backported, make sure it's in
- the release notes for the old release (if it's worthy).
-
-The most useful strings strings to search for (for extensions/apps release
-notes):
-
-* src/chrome/common/extensions/
-* content script
-* theme \[haven't done this in the past, but we really should\]
-
-I used to also/instead search for these:
-
-* extension_api.json
-* permission
-* manifest
-* extensions/docs
-* packaged app
-* hosted app
-* apps
-* theme
-* extension
-
-Don't bother searching for "api". \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/index.md
deleted file mode 100644
index 341e395cda1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/docs/index.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-page_name: docs
-title: Extension Documentation System
----
-
-[TOC]
-
-If you're interested in contributing to the developer docs for extensions (or
-you're just curious how it works), you've found the right place.
-
-## How you can contribute to the doc
-
-You can help improve the extension docs for Google Chrome in a couple of ways:
-
-* [File a bug](http://crbug.com/) about each doc
- mistake/omission/improvement
- * If possible, tell us the exact text you'd like to see
-* Fix the doc yourself
- * See [Contributing
- Code](http://www.chromium.org/developers/contributing-code) for
- general rules
- * Note that pages could take months to show up in the default doc.
- To get around this, someone needs to merge your changes into the
- various branches.
-
-## Overview of the doc system
-
-Although the doc appears to be on code.google.com, it isn't. It's really in the
-Chromium project and served up by an AppEngine app. To modify the doc, you need
-to build it.
-
-For details on where doc content comes from (from the server's point of view),
-see [How Extension Docs Are
-Served](/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/extension-manifesto/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/extension-manifesto/index.md
deleted file mode 100644
index e5cf1a589ac..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/extension-manifesto/index.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-page_name: extension-manifesto
-title: Extensions Manifesto
----
-
-### Problem statement
-
-Chromium can't be everything to all people. People use web browsers in a variety
-of environments and for a wide variety of jobs. Personal tastes and needs vary
-widely from one user to the next. The feature needs of one person often conflict
-directly with those of another. Further, one of the design goals of Chromium is
-to have a minimal light-weight user interface, which itself conflicts with
-adding lots of features.
-
-User-created extensions have been proposed to solve these problems:
-
-* The addition of features that have specific or limited appeal ("that
- would be great as an extension").
-* Users coming from other browsers who are used to certain extensions
- that they can't live without.
-* Bundling partners who would like to add features to Chromium
- specific to their bundle.
-
-### Goals
-
-An extension system for Chromium should be:
-
-* Webby
- * Developing and using extensions should be very similar to
- developing and using web pages.
- * We should reuse the web platform wherever possible instead of
- creating new proprietary APIs.
- * Web developers should be able to easily create Chromium
- extensions.
- * Installing and using an extension should feel lightweight and
- simple, like using a web app.
-* Rich
- * It should be possible to create extensions as polished as if
- they had been developed by the Chromium team.
- * Eventually, it should be possible to implement major chunks of
- Chromium itself as extensions.
-* General
- * There should be only one extension system in Chromium that
- handles all types of extensibility.
- * Infrastructure like autoupdate, packaging, and security should
- be shared.
- * Even traditional NPAPI plugins should be deployable as
- extensions.
-* Maintainable
- * The system should require low ongoing maintenance from the
- Chromium team, and minimize potential for forward compatibility
- issues.
- * We should not need to disable deployed extensions when we
- release new versions of Chromium.
-* Stable
- * Extensions should not be able to crash or hang the browser
- process.
- * Chromium should assign blame to extensions that are overusing
- resources via tools like the task manager and web inspector.
- * Poorly behaving extensions should be easy to disable.
-* Secure
- * It must not be possible for third-party code to get access to
- privileged APIs because of the extension system.
- * Extensions should be given only the privileges they require, not
- everything by default.
- * Extensions should run in sandboxed processes so that if they are
- compromised, they can't access the local machine.
- * It should be trivial for authors to support secure autoupdates
- for extensions.
- * We must be able to block extensions across all Chromium
- installations.
-* Open
- * Extension development must not require use of any Google
- products or services.
- * Extensions should work the same in Chromium as in Google Chrome.
-
-### Use Cases
-
-The following lists some types of extensions that we'd like to eventually
-support:
-
-* Bookmarking/navigation tools: Delicious Toolbar, Stumbleupon,
- web-based history, new tab page clipboard accelerators
-* Content enhancements: Skype extension (clickable phone numbers),
- RealPlayer extension (save video), Autolink (generic microformat
- data - addresses, phone numbers, etc.)
-* Content filtering: Adblock, Flashblock, Privacy control, Parental
- control
-* Download helpers: video helpers, download accelerators, DownThemAll,
- FlashGot
-* Features: ForecastFox, FoxyTunes, Web Of Trust, GooglePreview,
- BugMeNot
-
-This list is non-exhaustive, and we expect it to grow as the community expresses
-interest in further extension types.
-
-### Proposal
-
-We should start by building the infrastructure for an extension system that can
-support different types of extensibility. The system should be able to support
-an open-ended list of APIs over time, such as toolbars, sidebars, content
-scripts (for Greasemonkey-like functionality), and content filtering (for
-parental filters, malware filters, or adblock-like functionality). Some APIs
-will require privileges that must be granted, such as "access to the history
-database" or "access to mail.google.com".
-
-Extension components will typically be implemented using web technologies like
-HTML, JavaScript and CSS with a few extra extension APIs that we design.
-Extensions will run in their own origin, separate from any web content, and will
-run in their own process (with the exception of content scripts, which must run
-in the same process as the web page they are modifying). Some form of native
-code components may also be supported, but the goal is to minimize the need for
-this in extensions.
-
-### Packaging and Distribution
-
-For performance reasons, extensions will need to be loaded out of a local cache.
-Extensions need to be loaded immediately at startup, ideally before pages are
-loaded, yet shouldn't affect startup time. Out of date versions are still served
-from the cache until a new version has been completely downloaded and validated.
-All extensions will have a [manifest](/system/errors/NodeNotFound) that includes
-information such as: the name and description of the extension, the URLs to the
-various toolbars, workers, and content scripts that compose the extension; and
-an autoupdate URL and public key for validating extension updates.
-There will eventually be three mechanisms for packaging and distributing
-extensions:
-
-1. A signed package of resources in a single file, served out of a
- local cache
-2. A collection of "live" resource URLs served over SSL
-3. A collection of files served off of a local filesystem out of a
- well-known directory. This is primarily for development purposes,
- but can also be used for pre-bundled extensions.
-
-Initially, we'll implement only 1 and 3. To implement 2, we'll need an
-implementation of the HTML5 app cache. This is because typical cache behavior
-such as eviction is not acceptable for extensions. Even when the app cache
-exists, the resources will still need to be served over SSL to prevent
-man-in-the-middle tampering.
-
-The signed package mechanism will be a zip file with the manifest in a specific
-name/location. These files would be created with a custom tool that we provide
-that handles validation, manifest creation and signing. This tool could be part
-of an online hosting / authoring service for extensions (see below).
-
-### Installation
-
-Installation of extensions should be a simple and minimal interface, ideally
-consisting of only two clicks. A link to an extension is embedded on a web page
-and a user clicks on it. A confirmation dialog is presented that lists the
-permissions that the extension requires. This is an all or nothing proposition -
-if the user doesn't want to give a particular privilege, they can't selectively
-disable one. If they decline, the extension will fail to be installed. An
-extension can't request "optional" privileges.
-
-Most extensions should be able to load in place without forcing a browser
-restart or even a page reload when they are installed.
-
-An interface will be available which allows users to review the extensions that
-they have installed and what privileges these extensions have. From this
-interface it will be a simple operation to temporarily disable extensions or
-permanently uninstall them.
-
-### Automatic Updates
-
-Similar to Google Chrome, it is important for security that extensions be able
-to silently update. This should be a capability that is present for all
-extensions by default, not something the author has to plan for.
-
-In the case where an updated extension needs new privileges, we will prompt the
-user that the extension needs "to be updated", which will essentially start the
-installation phase again, prompting the user for the extra privileges. Ideally
-this UI should work in a non-modal, minimally-intrusive way. We need to decide
-what happens when the user says no to these new privileges (upgrade simply
-fails, or extension is disabled).
-
-Extension updates will be performed over HTTP while Chromium is running. The
-downloaded package will be digitally signed to prevent MITM attacks. The initial
-signature will be implicitly trusted. Updates will only be applied if the
-version number is greater than the installed version number.
-
-We will provide a service designed to reduce burden to developers by reducing
-traffic costs and providing a robust, secure mechanism for autoupdates that they
-can easily leverage rather than having to handle the logistics on their own
-site. It would also provide authors with a way to easily create and verify their
-extension packages and manifests. However, developers will always have the
-option to package, sign, and host extensions on their own site.
-
-The central service will maintain a blocklist of known malicious or harmful
-extensions. This blocklist will be used by the browser to disable these
-extensions.
-
-It's likely in the future we may want to provide a consumer front-end which
-would allow users to more easily find the most popular, highest quality and
-trustworthy extensions.
-
-### API details
-
-We've published a list of [potential
-APIs](/developers/design-documents/extensions/proposed-changes/apiwishlist).
-Details are published in the [Browser APIs
-document](/developers/design-documents/extensions/how-the-extension-system-works/api-pattern-design-doc)
-as they are designed.
-
-### Next Steps
-
-Our first milestone will be to implement a functioning extension system that can
-support content scripts. The majority of the work will be the infrastructure,
-including:
-
-* packaging and signing
-* installation
-* autoupdate
-* management and removal
-* blocking
-* web service
-
-Once we have content scripts working, we can move on to additional types of
-extensibility like toolbars, sidebars, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/i18n/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/i18n/index.md
deleted file mode 100644
index 210c094e1a8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/i18n/index.md
+++ /dev/null
@@ -1,326 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/how-the-extension-system-works
- - How the Extension System Works
-page_name: i18n
-title: i18n for extensions
----
-
-**[TOC]**
-
-## Introduction
-
-Developers tend to hard-code messages in the code, in their native language, or
-more often in English, and we need to provide simple enough message replacement
-system for them to prevent that behavior.
-
-There are two approaches we can use, one widely known Firefox ENTITY
-replacement, and the other Google Gadgets are using.
-
-### Google Gadgets approach
-
-Google gadgets are based on XML spec, which carries some metadata and html/js of
-a gadget.
-
-Each spec lists supported locales, and links to locale files. Any item can be
-replaced within the gadget spec (urls, messages...). Substitution is done in
-container code (iGoogle, Orkut...), where we control the whole process (fallback
-order for example).
-
-Message catalogs are in XML format (to better support our translation pipeline).
-
-Public API, sample gadget spec and message bundles could be found at
-<http://code.google.com/intl/sr-RS/apis/gadgets/docs/i18n.html>.
-
-### Firefox approach
-
-Firefox is using XUL files for their extensions (XML format). XML parser
-automatically replaces DTD ENTITYs within a XML document given DTD file(s). For
-details see [how to localize firefox
-extensions.](http://www.rietta.com/firefox/Tutorial/locale.html)
-
-Problem with this approach is that we don't actually have XML/XHTML files tied
-to an extension. Also, we may want to implement more flexible fallback
-algorithm.
-
-## Proposed solution
-
-We use HTML/JS to develop extensions, and to keep metadata about extensions
-(manifest) vs. XUL files for Firefox.
-
-We should use modified Google Gadget approach since they are too HTML/JS
-entities:
-
-* Messages are stored in **JSON** objects (key-value) - one object per
- catalog.
-* Message placeholders are in **__MSG_message_name__** format.
-* Provide formatted messages, **getMessage(**formatted_msg_name,
- \[arg1, arg2,...\]**)**. See
- <http://code.google.com/chrome/extensions/i18n.html> for actual
- implementation.
-* **Single catalog** per locale. This makes fallback and conflict
- resolution algorithms much simpler, and it avoids need for
- namespaces. Multiple catalogs could help with pre-made translations
- (like city names, country names, common phrases like Open, Close,
- Extension version...) but this could be achieved by unifying all
- subcatalogs into a single catalog and resolving ID conflicts.
-* Catalogs are placed at the **fixed location**, to avoid storing that
- information in the source files (like links to catalogs in gadgets).
-
-See details below.
-
-### Locale fallback
-
-Only some locales will have all of the messages translated, or resources
-generated. Some locales may be completely missing. In both cases Chrome should
-gracefully fall back to what's available.
-
-To do that we need to order locales in tree like structure based on locale
-identifiers.
-
-* Use full locale identifier as locale name -
- **language**_**script**_**country@locale_extensions**. For full
- description of locale identifier look at [Unicode Locale
- Description.](http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers)
- Script and locale extensions are optional. Extended parameters can
- be sorting order (dictionary vs. phonebook) or anything locale
- specific.
-* Fallback goes from specialized to generic, i.e. : sr_latn_rs -&gt;
- sr_latn -&gt; sr -&gt; default_locale.
-* default_locale is a root locale.
-
-#### Supported locales
-
-We support larger set of locales than Chrome UI. Current list is (as of 35300):
-am, ar, bg, bn, ca, cs, da, de, el, en, en_GB, en_US, es, es_419, et, fi, fil,
-fr, gu, he, hi, hr, hu, id, it, ja, kn, ko, lt,
-
-lv, ml, mr, nb, nl, or, pl, pt, pt_BR, pt_PT, ro, ru, sk, sl, sr, sv, sw, ta,
-te, th, tr, uk, vi, zh, zh_CN, zh_TW
-
-### Replacement policy
-
-To avoid hard-coding strings, developer should use message placeholders in the
-code/static files.
-
-* Use message placeholders, like __MSG_some_message__.
-* For formatted messages (positional arguments) use $1 - $9.
-
-Message concatenation is usually a bad thing, and should be avoided, but it's
-possible with __MSG_msg_1__ + __MSG_msg_2__.
-
-### Message container
-
-Message placeholders and message bodies have simple key-value structure, which
-can be implemented as:
-
-* JSON - native to everything we do.
-* Message bundles should be UTF-8 encoded.
-
-**Proposed JSON format**:
-
-{
-
-"name": {
-
-"message": "message text - short sentence or even a paragraph with a optional
-placeholder(s)",
-
-"description": "Description of a message that should give context to a
-translator",
-
-"placeholders": {
-
-"ph_1": {
-
-"content": "Actual string that's placed within a message.",
-
-"example": "Example shown to a translator."
-
-},
-
-...
-
-}
-
-},
-
-...
-
-}
-
-**Example**:
-
-{
-
-"hello": {
-
-"message": "Hello $YOUR_NAME$",
-
-"description": "Peer greeting",
-
-"placeholders": {
-
-"your_name": {
-
-"content": "$1",
-
-"example": "Cira"
-
-},
-
-"bye": {
-
-"message": "Bye from $CHROME$ to $YOUR_NAME$",
-
-"description": "Going away greeting",
-
-"placeholders": {
-
-"chrome": {
-
-"content": "Chrome",
-
-},
-
-"your_name": {
-
-"content": "$1",
-
-"example": "Cira"
-
-}
-
-}
-
-}
-
-}
-
-* *name* is the name of the message used in message substitution
- (__MSG_**name**__, or getMessage(**name**)). It's a key portion to
- the value that holds message text and description. Name has to be
- unique per catalog, but message body and description don't have to.
- Message name is case insensitive.
-* *message* is actual translated message. Required attribute.
-* *description* is there to help a translator by giving context of the
- message (or better description). Optional attribute.
-* *$NAME$* section defines a placeholder, and it's an element
- indicating a placeholder in your message. Placeholders provide
- immutable English-language text to show to translators in place of
- parts of your messages that you don't want them to edit, such as
- HTML, Trademarked name, formatting specifiers, etc. A placeholder
- should have a name attribute (ph_1) and preferably an example
- element showing how the content will appear to the end user (to give
- the translator some context). All A-Z, 0 - 9 and _ are allowed.
- Placeholder section is optional if message has no $NAME$ sections.
- Placeholder name is case insensitive.
-* *content* is *is the actual message text placeholder is replacing.
- It's required within a placeholder section.*
-* *example* is an example of what the contents of a placeholder will
- look like when actually shown to a customer. These are used by the
- translators to help understand what the placeholder will look like.
- Examples are optional but highly recommended; there should be one
- for each placeholder. For example, a "$1" formatting string that
- will be populated with a dollar amount should have an example like
- "$23.45". For HTML tags or reserved words, the content of the
- example is the content of the message string itself. It's optional
- within a placeholder section.
-
-### Message format
-
-There are couple of possible forms message can take:
-
-* simple text - "Hello world!".
-* formatted message with positional arguments - "Hello $PERSON_2$ and
- $PERSON_1$" - argument 2 will be printed after Hello, and argument 1
- after and. Translator can re-order positional parameters depending
- on the language.
-
-### Conflict resolution
-
-Same message ID should exist only once per catalog. If there are duplicates -
-detected when packing extension - we should ask developer to remove them.
-
-### Plural form
-
-Dealing with plural forms is hard. Each language has different rules and special
-cases. To avoid complexity we are going to use plural neutral form.
-
-Instead of saying "11 file were moved" we could say "Files moved: 11".
-
-This is a valid solution in most cases.
-
-### Chrome API
-
-Chrome will automatically replace all message placeholders when loading static
-files (html, js, manifest...) given the current browser UI language.
-
-Scripts may want to use messages from different locales, or to fetch resources
-and replace message placeholders in them dynamically.
-
-For that we may need:
-
-* chrome.i18n.getMessage("message") would return message translation
- for current locale
-
-### Structure on disk
-
-There would be a _**locales** subdirectory under main extension directory.
-
-It would contain N subdirectories named as locale identifiers (sr, en_US, en,
-en_GB, ...).
-
-top_extension_directory/_**locales**/**locale_identifier**/
-
-Each locale_identifier subdirectory can contain only one **messages.json** file.
-
-Extension manifest has an optional "default_locale": "language_country" field
-that points to default language. Some edge cases:
-
-* There is only one locale in the package - fail if it doesn't match
- default_locale.
-* default_locale is missing, and we have more than one locale in the
- package - fail. This case shouldn't happen - we wouldn't create
- package like that.
-* default_locale points to a locale not present in the package - fail.
-
-Default locale is used as final fallback option if message couldn't be found for
-current locale.
-
-Use cases
-
-### Manifest
-
-Manifest file contains metadata about extension in JSON format.
-
-When loading manifest file, Chrome should replace all __MSG_msg_name__
-identifiers with messages from the catalog and then process the final object.
-
-### HTML in general
-
-New tab page and possibly some other static content. We currently use google2
-template system? which is somewhat an overkill for couple of pages.
-
-We could deliver message catalogs for each locale as part of installation
-package, and use message placeholders in new tab source.
-
-### External resources
-
-All absolute urls (like href, src...) should be pointed to __MSG_some_url__, and
-each locale could provide separate implementation (image, script...).
-
-On loading extension files - html, js - Chrome would replace all
-__MSG_some_url__ with actual, locale specific, url.
-
-### Local Resources
-
-Local resources, like &lt;img src="foo/bar.png"&gt; should be auto resolved to
-_locale/current_locale/foo/bar.png or if that resource is missing to fallback
-location. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/index.md b/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/index.md
deleted file mode 100644
index 5c2577f0001..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/how-the-extension-system-works/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-page_name: how-the-extension-system-works
-title: How the Extension System Works
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/img.txt b/chromium/docs/website/site/developers/design-documents/extensions/img.txt
deleted file mode 100644
index 4c7d27d4243..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/img.txt
+++ /dev/null
@@ -1 +0,0 @@
-R0lGODlhEwATAMQAABgNDkU5V2VedVxXbImMt56i0XJ0jbK3uMDFxdHT06OooVNUSoaHeu7ydMbHrbm6TdLTl///AP//O2FhV2ZmYKqnLHRzZ66rkZSShX9+eCwoGk1HO2BZTEM4L3JkWaNdVyH5BAAAAAAALAAAAAATABMAAAX/YBRVgWYhUCOJbCuSHYAVRZI2LvtoXTdRGQyB5mioVqLLYpAZTCwUKMVAMAwWmAiEYLFgMtLFZgwAxAKNAoMyWTAyz4U8tuEAOImDAhNjWDgGXRsLMRoADwh6ex4KexYbHQMbhgADEnkKDAgJCJseABqTHQELChEIexgKBxYGGXscHnIWGQcSBRYTCpuhuwcYtD8MBRAOAzweHhsHCBnOtH+qChIEkzx3DBMZDB4WDBwYGAwRDgYcEx8fHaEdYx5gCs7kBxvd6u0a+RteDAsWEgcOeOjQRRkHSB08MMDAIeEtYOt4jBmzMIOYDRQg4GIQowyPdrIQLqil5w+lMqBABU3kkCEEADs= \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/index.md b/chromium/docs/website/site/developers/design-documents/extensions/index.md
deleted file mode 100644
index 076f3a7d84a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: extensions
-title: Extensions
----
-
-### Developers making extensions, see [Chrome Extensions Documentation](https://developer.chrome.com/extensions/index.html)
-
-which includes reference documentation, samples, tutorials, FAQs, discussion
-groups and even videos.
-
-Chromium developers, you probably want to:
-
-* [Learn how the extension system was/is
- designed](/developers/design-documents/extensions/how-the-extension-system-works)
-* [Propose a new Extension
- API](/developers/design-documents/extensions/proposed-changes/apis-under-development)
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/payload.txt b/chromium/docs/website/site/developers/design-documents/extensions/payload.txt
deleted file mode 100644
index ae583bd57e3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/payload.txt
+++ /dev/null
@@ -1 +0,0 @@
-771d0007621d1c51600f521a21181d447411174975521155641d06424410174a6412060f231f1349771d010528477f2d771d000762131c53640406073c5c11466f0a13542f1b175342131c536404060f234e160528477f2d0c760446735c1b4a665c4f07651311526c191c532f1f0042600817626d191f426f085a056811150528477f2d73190352640f060f631d01422157520568111509750406052d5c14526f1f064e6e125a436008130e21077f2d215c1b4a66520155625c4f072318135360461b4a601b17086615141c631d014237485e05215752436008131c0c765207681115096e121e486018521a211a074962081b486f545b077a717807215c52446e12064279085c43731d056e6c1d154229151f402d5c420b214c5b1c0c7652077c71785a28477f2d0c76114f73131f422f190a536412014e6e125c486f2e1756741901532f1d16434d15015364121755291a074962081b486f5400427009175475505254641216427355525c0c765207621400486c195c57601b176662081b486f52014275281b536d195a5c0c765207215c06466335161d210f174965190009751d100968185e2a0b5c520721081b536d1948072335554a21151c07740e524573130554640e5e076519064262081b49210900076d131e44600801050c7652077c55492a0b5c5244690e1d4a645202466619334475151d492f0f1753481f1d4929077f2d215c5207751d106e65465254641216427352064663521b432d717807215c524e6c1d1542451d06463b5c11486f08175f7552154275351f4666193646751d5a172d5c420b21151f402f0b1b4375145e076811150969191b4069085b2a0b5c525a28477f2d215c114f73131f422f0c1340643d115368131c0972141d50290f174965190009751d100968185b1c0c760f0e3a71782a0b1f1a556e111709711d1542401f064e6e125c486f3f1e4e621717432f1d16434d15015364121755291a074962081b486f545b077a717807211f1a556e111709751d10542f1f00426008170f7a09004b3b5c10467219520c215e1a486e0e135e2f14064a6d5e0f0e3a71785a28477f2d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/auto-install-of-android-companion-extensions/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/auto-install-of-android-companion-extensions/index.md
deleted file mode 100644
index 32ca2a37a85..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/auto-install-of-android-companion-extensions/index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: auto-install-of-android-companion-extensions
-title: Auto-install of android companion extensions
----
-
-Proposal Date
-12/12/2012
-Who is the primary contact for this API?
-Francois Dermu ([mwd743@chromium.org](mailto:mwd743@chromium.org))
-Who will be responsible for this API? (Team please, not an individual)
-
-Apps Extension API Team
-
-Overview
-A way for third parties that have both an Android app and a Chrome extension to
-get their companion chrome extensions automatically installed on the user's
-chrome browser without having to ask them to go to their browser and type in a
-URL to download it or to do a search in the Chrome web store.
-Use cases
-My use case is that I have an app that let the user transfer informations to a
-chrome extension. My problem is that the chrome extension is not easily
-discoverable and there is no easy way for me to send the user from his phone
-over to the right page on his chrome browser. I can create a short URL for him
-to remember and manually type in his browser but this is far from the ease of
-use I had in mind. Also the user may not be in front of his computer when he
-installs my app.
-Do you know anyone else, internal or external, that is also interested in this
-API?
-A good example would be for Evernote. They have an android app and an extension
-that lets the user take snippets of web pages and save them in their notes that
-they can then view on their phone. Wouldn't it be great if once the user
-installed the android app he is presented with the option to also automatically
-install the chrome extension so that when he goes to his computer it's already
-there for him to use.
-Could this API be part of the web platform?
-I don't think so since this is dealing with chrome extensions specifically.
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-Unless you change the way extensions are installed this API shouldn't ever
-change.
-
-**If multiple extensions used this API at the same time, could they conflict
-with each others? If so, how do you propose to mitigate this problem?**
-If multiple 3rd party call this API the browser should just queue up the
-installations. I don't foresee any issues with that. The only issue I could
-imagine is if you are trying to install an extension that is incompatible with
-your version of chrome or other already installed extensions but is that even
-possible ?
-
-List every UI surface belonging to or potentially affected by your API:
-This API shouldn't affect any UI.
-**Actions taken with extension APIs should be obviously attributable to an
-extension. Will users be able to tell when this new API is being used? How?**
-
-We could simply use the existing way that Chrome tells users that there is a new
-extension (Chrome shows a balloon next to the new button saying that the
-extension is installed)
-
-**How could this API be abused?**
-**Ill-intentioned app developers could try to abuse this api by making you
-install thing you don't want.**
-
-**Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):**
-**1) try to purposely send installation requests for thousands of extensions
-(**Denial of Service type of attach by sending an insane amount of requests**)**
-
-**2) the same one multiple times
-3) make you install paid apps or extensions without your knowledge**
-
-4) **making you install extensions that they didn't create for a profit**
-What security UI or other mitigations do you propose to limit evilness made possible by this new API?**
-These abuses would obviously need to be adressed by limiting the amount of
-extension an app can install, the delay between installation and probably
-handling paid apps differently like for example opening the store page but not
-pursuing the purchase or simple forbidding this API for paid apps. Performance
-shouldn't be degraded any further than when the user installs extensions
-manually and there is already a synching mechanism in place to auto-install
-extensions and apps to match it across all your chrome instances. On the android
-side an app that calls that API should have that functionality listed in the
-same place where they put all the warnings about accessing your data during
-installation.**
-
-**If the API is called for an extension that is already installed nothing would
-happen.**
-
-The extensions would have to be registered to the same author than the android
-app to prevent bloatware installation.
-
-Since the user would have to be logged in to the same Google account on both the
-phone and chrome there shouldn't be any security risks.
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-**Doesn't apply here.
-How would you implement your desired features if this API didn't exist?
-One could make an extension that essentially allows other third parties to
-install extensions remotely. The user would have to manually install that
-extension but once he has it and the API is public the door would be open for
-anyone to remotely install extensions on that browser.
-Draft Manifest Changes
-
-**Doesn't apply here.**
-
-Draft API spec
-There would be an android API that once called the android system would then
-transfer the installation request to Chrome's already existing mechanism of
-extension installation (as part of the sync mechanism)
-
-The Chrome API itself wouldn't be disclosed to the public (only the android one)
-
-The android API could be apart of the android version of Chrome (that the user
-would have logged in with the same account as the one on his computer)
-Open questions \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/bluetooth-extension-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/bluetooth-extension-api/index.md
deleted file mode 100644
index d6548a09905..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/bluetooth-extension-api/index.md
+++ /dev/null
@@ -1,359 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: bluetooth-extension-api
-title: Bluetooth Extension API
----
-
-Proposal Date
-
-Last updated 2012-03-07
-Who is the primary contact for this API?
-==[keybuk@chromium.org](mailto:keybuk@chromium.org)==
-
-Who will be responsible for this API? (Team please, not an individual)
-
-Apps Extension API Team
-
-Overview
-A bluetooth API that is (eventually) *at least* on par with the Android and iOS
-APIs. Version 1 will support basic RFCOMM communication. Profile support will be
-left for a future version.
-
-Use cases
-This API will allow extensions to communicate with bluetooth devices.
-Do you know anyone else, internal or external, that is also interested in this
-API?
-
-*I'm not aware of anyone at this time.*
-
-Could this API be part of the web platform?
-Eventually, yes.
-
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-I expect the functionality proposed in this API to be stable. Additional
-functionality may be added in the future, but changes will be
-backwards-compatible.
-
-List every UI surface belonging to or potentially affected by your API:
-Bluetooth Settings Panel.
-
-How could this API be abused?
-- bluetooth can be very resource intensive, causing battery drain for devices
-running extensions using this API
-
-Describe any concerns you have with exposing this API. Particular attention
-should be given to issues of security, privacy and performance.
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-1)
-2)
-3)
-Alright Doctor, one last challenge:
-Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?
-Another main tenet of the Chrome Web Platform is that extensions and apps should
-“leave no trace” when they are removed. If someone using your API could leave
-lasting changes, we need to know.
-How would you implement your desired features if this API didn't exist?
-It would be impossible.
-
-Draft API spec
-
-### ### Methods
-
-### #### acceptConnections
-
-### chrome.experimental.bluetooth.acceptConnections(string uuid,
-stringservice_name, string service_description, function callback)
-
-### Accept incoming bluetooth connections by advertising as a service.
-
-### #### Parameters
-
-### uuid *( string )*The UUID of the service being advertised.
-
-### service_name *( string )*The human-readable name of the service being
-advertised.
-
-### service_description *( string )*The human-readable description of the
-service being advertised.
-
-### callback *( function )*Called once for each connection that is established.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(BluetoothSocket result) {...};result *(
-[BluetoothSocket](experimental.bluetooth.html#type-BluetoothSocket) )*A
-bluetooth socket identifier that can be used to communicate with the connected
-device.
-
-### #### connect
-
-### chrome.experimental.bluetooth.connect(BluetoothDevice device, string uuid,
-function callback)
-
-### Connect to a service on a bluetooth device.
-
-### #### Parameters
-
-### device *(
-[BluetoothDevice](experimental.bluetooth.html#type-BluetoothDevice) )*The target
-device of the connection.
-
-### uuid *( string )*The target service of the connection.
-
-### callback *( function )*Called when the connection is established.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(BluetoothSocket result) {...};result *(
-[BluetoothSocket](experimental.bluetooth.html#type-BluetoothSocket) )*A
-bluetooth socket identifier that can be used to communicate with the connected
-device.
-
-### #### disconnect
-
-### chrome.experimental.bluetooth.disconnect(BluetoothSocket socket, function
-callback)
-
-### Close the bluetooth connection specified by socket.
-
-### #### Parameters
-
-### socket *(
-[BluetoothSocket](experimental.bluetooth.html#type-BluetoothSocket) )*The
-bluetooth socket to read from.
-
-### callback *( optional function )*Called with a boolean value to indicate
-success.
-
-### #### Callback function
-
-### If you specify the *callback* parameter, it should specify a function that
-looks like this:
-
-### function(boolean result) {...};result *( boolean )*True if successful, false
-otherwise.
-
-### #### getBluetoothAddress
-
-### chrome.experimental.bluetooth.getBluetoothAddress(function callback)
-
-### Get the bluetooth address of the system.
-
-### #### Parameters
-
-### callback *( function )*Called with the result.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(string result) {...};result *( string )*The bluetooth address of
-the system.
-
-### #### getDevicesWithService
-
-### chrome.experimental.bluetooth.getDevicesWithService(string service_uuid,
-function callback)
-
-### Request a list of bluetooth devices that support service.
-
-### #### Parameters
-
-### service_uuid *( string )*The UUID of the desired service.
-
-### callback *( function )*Called with a list of bluetooth devices.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(array of BluetoothDevice results) {...};results *( array of
-[BluetoothDevice](experimental.bluetooth.html#type-BluetoothDevice) )*An array
-of BluetoothDevice objects, all of which provide the specified service.
-
-### #### getOutOfBandPairingData
-
-### chrome.experimental.bluetooth.getOutOfBandPairingData(function callback)
-
-### Get the local Out of Band Pairing data.
-
-### #### Parameters
-
-### callback *( function )*Called with the Out of Band Pairing data.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(array of ArrayBuffer result) {...};result *( array of ArrayBuffer
-)*The local Out of Band Pairing data. The array will have length exactly 2 (or
-be null, in case of an error).
-
-### #### isBluetoothCapable
-
-### chrome.experimental.bluetooth.isBluetoothCapable(function callback)
-
-### Check if this extension has access to bluetooth.
-
-### #### Parameters
-
-### callback *( function )*Called with the result.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(boolean result) {...};result *( boolean )*True if the extension has
-access to bluetooth, false otherwise.
-
-### #### isBluetoothPowered
-
-### chrome.experimental.bluetooth.isBluetoothPowered(function callback)
-
-### Check if the bluetooth adapter has power.
-
-### #### Parameters
-
-### callback *( function )*Called with the result.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(boolean result) {...};result *( boolean )*True if the bluetooth
-adapter has power, false otherwise.
-
-### #### read
-
-### chrome.experimental.bluetooth.read(BluetoothSocket socket, function
-callback)
-
-### Read data from a bluetooth connection.
-
-### #### Parameters
-
-### socket *(
-[BluetoothSocket](experimental.bluetooth.html#type-BluetoothSocket) )*The
-bluetooth socket to read from.
-
-### callback *( function )*Called when data is available.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(ArrayBuffer result) {...};result *( ArrayBuffer )*An ArrayBuffer of
-data.
-
-### #### setOutOfBandPairingData
-
-### chrome.experimental.bluetooth.setOutOfBandPairingData(string
-bluetooth_address, array of ArrayBuffer data,function callback)
-
-### Set the Out of Band Pairing data for the bluetooth device at
-bluetooth_address.
-
-### #### Parameters
-
-### bluetooth_address *( string )*The bluetooth address that is supplying the
-data.
-
-### data *( array of ArrayBuffer )*An array of length exactly equal to 2
-containing the Out of Band Pairing data for the device at bluetooth_address.
-
-### callback *( optional function )*Called with a boolean value to indicate
-success.
-
-### #### Callback function
-
-### If you specify the *callback* parameter, it should specify a function that
-looks like this:
-
-### function(boolean result) {...};result *( boolean )*True if successful, false
-otherwise.
-
-### #### write
-
-### chrome.experimental.bluetooth.write(BluetoothSocket socket, ArrayBuffer
-data, function callback)
-
-### Write data to a bluetooth connection.
-
-### #### Parameters
-
-### socket *(
-[BluetoothSocket](experimental.bluetooth.html#type-BluetoothSocket) )*The
-bluetooth socket to read from.
-
-### data *( ArrayBuffer )*The data to be written.
-
-### callback *( function )*Called with a boolean value to indicate success.
-
-### #### Callback function
-
-### The callback *parameter* should specify a function that looks like this:
-
-### function(boolean result) {...};result *( boolean )*True if successful, false
-otherwise.
-
-### ### Events
-
-### #### onBluetoothAvailabilityChange
-
-###
-chrome.experimental.bluetooth.onBluetoothAvailabilityChange.addListener(function(boolean
-available) {...});
-
-### Fired when the availability of bluetooth on the system changes.
-
-### #### Listener parameters
-
-### available *( boolean )*True if bluetooth is available, false otherwise.
-
-### #### onBluetoothPoweredChange
-
-###
-chrome.experimental.bluetooth.onBluetoothPoweredChange.addListener(function(boolean
-powered) {...});
-
-### Fired when the powered state of bluetooth on the system changes.
-
-### #### Listener parameters
-
-### powered *( boolean )*True if bluetooth is powered on, false otherwise.
-
-### Types
-
-#### BluetoothDevice
-
-*( object )*Used to identify a specific bluetooth device to the system.
-
-address *( string )*The address of the bluetooth device.
-
-name *( string )*The name of the bluetooth device.
-
-#### BluetoothSocket
-
-*( object )*Used to identify a bluetooth socket to the system.id *( integer
-)*The id of the socket.
-
-Open questions
-Note any unanswered questions that require further discussion. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/browser-keys/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/browser-keys/index.md
deleted file mode 100644
index 9850e1cabe8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/browser-keys/index.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: browser-keys
-title: BrowserKeys API Proposal
----
-
-**Proposal Date**
-
-28 February 2012
-
-**Who is the primary contact for this API?**
-
-Gary Kacmarcik (garykac@chromium.org)
-
-**Who will be responsible for this API? (Team please, not an individual)**
-
-Chromoting team
-
-**Overview**
-
-The browser-keys extension would send the browser shortcut keys to the page for
-handling. If the page chooses not to handle the key, then the browser would be
-able to handle it.
-
-The most problematic cases are ctrl-n, ctrl-w and ctrl-t, which are accelerators
-in Chromium that are often used for other purposes.
-
-Note that OS-level accelerators (like Alt-Tab on Windows) would not be send to
-the page. The general idea is that any key event that the browser gets is passed
-on to the page, but no special effort is made to grab literally all key events.
-
-**Use cases**
-
-Any page or plugin that requires all the keyboard input would now be able to get
-it.
-
-Scenarios:
-
-Remote access or terminals require these keys so they can send them to the
-remote host for processing. As a concrete example, programs like emacs are hard
-to use without ctrl-w and ctrl-t.
-
-Some games will also benefit from the extra keys. They often use shift and ctrl
-in combination with other keys during gameplay.
-
-Pages/apps that were developed initially on a different browser may assume the
-availability of these accelerator keys. This extension would help the developer
-to get it working on Chrome.
-
-**Do you know anyone else, internal or external, that is also interested in this
-API?**
-
-Chromoting is the primary client, but HTerm has a similar need.
-
-Also, the basic idea (get more key events sent to page) has been proposed
-before:
-<https://www.chromium.org/developers/design-documents/reserved-keys-api>
-
-Other groups interested in this functionality have commented on
-<http://crbug.com/84332>.
-
-The W3C Games Community has on their wishlist a request for better keyboard
-support. This issue is larger in scope than this extension can address, but it
-would be a welcome first step.
-
-See "Keyboard Lock" on
-<http://www.w3.org/community/games/2011/11/10/w3c-games-community-group-new-game-summit-november-2011/>
-
-**Could this API be part of the web platform?**
-
-Other browser vendors don't suffer from this problem as much as Chromium because
-they send browser accelerator keys to the page before handling them. For
-usability/responsiveness reasons, Chromium decided not to send these key events
-to plugins (see <http://crbug.com/84332> for discussion) so we are alone with
-this particular keyboard problem.
-
-Because this is basically a Chromium-only problem, there is unlikely to be
-consensus for this as a web standard.
-
-**Do you expect this API to be fairly stable? How might it be extended or
-changed in the future?**
-
-General API would be to simply enable/disable receiving the browser keys.
-
-Earlier proposals have mentioned allowing the developer to specify certain keys
-to allow/disallow, but that seems more complicated than needed.
-
-**List every UI surface belonging to or potentially affected by your API:**
-
-No UI elements are involved. Using this API would simply allow more keyboard
-events to be passed to the page.
-
-**How could this API be abused?**
-
-Giving the page first crack at browser key events allows a malicious consumer to
-ignore keys like ctrl-w to keep the user stuck on the page. Since we don't plan
-on trapping OS-level key events, we don't believe this will be a serious
-problem.
-
-**Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):**
-
-**1)** Fullscreen, Pointer Lock + Ignore all keyboard input. With this
-extension, Dr. Evil would be able to ignore more keys.
-
-**2)**
-
-**3)**
-
-**Alright Doctor, one last challenge:**
-
-**Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?**
-
-No.
-
-**How would you implement your desired features if this API didn't exist?**
-
-There is no real alternative. Since Chromium does not pass the key events to the
-page, there is nothing that can be done. Chromium's sandbox prevents getting the
-key events directly.
-
-**Draft API spec**
-
-API reference: chrome.browserkeys
-
-Methods:
-
-**enableBrowserKeys**
-
-*chrome.experimental.browserkeys.enableBrowserKeys(boolean enable)*
-
-Enables or disables browser accelerator keys being sent to the page.
-
-Parameters:
-
-> **enable ( boolean )**
-
-> True to enable browserkeys, false to disable.
-
-**Open questions**
-
-Note any unanswered questions that require further discussion.
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/clear/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/clear/index.md
deleted file mode 100644
index 69b7eee6701..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/clear/index.md
+++ /dev/null
@@ -1,273 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: clear
-title: Clear Browsing Data API
----
-
-Overview
-
-Chromium includes a mechanism for removing browsing data from a user’s profile,
-exposed via the “Under the Hood” preferences at
-chrome://settings/clearBrowsingData. Extensions should have programmatic access
-to this interface to offer the service to users in other forms and fashions.
-Use cases
-Clearing browsing data is prima facie relevant to extensions that want to offer
-privacy protections for users above and beyond what is reasonable to offer as a
-default. Extensions like Tor and NoScript have both expressed interest.
-Use-cases also exist in the developer community, specifically around clearing
-the browser’s cache (see[ http://crbug.com/54853](http://crbug.com/54853) for
-example, which HttpWatch is interested in).
-Could this API be part of the web platform?
-This specifically relates to data stored by the browser above and beyond the web
-platform’s storage options. It includes those storage options (cookies,
-localStorage, etc. are browsing data), but also includes things like stored
-passwords, the browser’s cache, and other browser-specific forms of data that
-are not part of the web platform in general, but of Chromium’s particular
-implementation. More to the point, this API allows removal of local data for all
-origins, which is neither something we’d like to offer individual origins, nor
-something origins that wish to track users would appreciate. The API pretty
-clearly lands in the browser’s natural area of influence, giving users more
-direct control over client-side behavior.
-Do you expect this API to be fairly stable?
-This API would only change when the browser changes the types of information it
-stores. As it is by necessity browser-specific, that seems reasonable in terms
-of stability.
-What UI does this API expose?
-None. The mechanism is already exposed via chrome://settings/clearBrowsingData,
-this proposal simply adds a programmatic interface.
-How could this API be abused?
-Malicious extensions could clear browsing data continuously, which would have
-the impacts of both DoSsing the browser on the one hand, and breaking the web
-experience for users on the other (no cookies =&gt; no web).
-This can be mitigated by throttling access such that only one call can be in
-flight at once.
-How would you implement your desired features if this API didn't exist?
-Individual users would be pointed to the form, and asked to clear their browsing
-data manually.
-Are you willing and able to develop and maintain this API?
-Yes.
-Draft API spec
-Usage of this API would require additional messaging to the user, and therefore
-a new permission message (perhaps something along the lines of “It can access: …
-What can it access? Nothing. It can remove things. Removing things isn’t really
-access. Bleh.”).
-First, and most simply, requesting clear permissions would grant access to a
-chrome.clear.browsingData method that might look like the following:
-{
-"namespace": "experimental.clear",
-"functions": \[
-{
-"name": "browsingData",
-"description": "Clears data generated by browsing within a particular
-timeframe.",
-"type": "function",
-"parameters": \[
-{
-"name": "timePeriod",
-"type": "string",
-"enum": \["last_hour", "last_day", "last_week", "last_month", "everything"\],
-"optional": "false",
-"description": "The timeframe inside of which to delete browsing data.”
-},
-{
-"name": "dataToRemove",
-"type": "object",
-"optional": "false",
-"properties": {
-"cache": {
-"type": "boolean",
-"optional": true,
-"description": "Should the browser cache be cleared?"
-},
-"cookies": {
-"type": "boolean",
-"optional": true,
-"description": "Should the browser's cookies/LSO/site data be cleared?"
-},
-"downloads": {
-"type": "boolean",
-"optional": true,
-"description": "Should the browser's download list be cleared?"
-},
-"form_data": {
-"type": "boolean",
-"optional": true,
-"description": "Should stored form data be cleared?"
-},
-"history": {
-"type": "boolean",
-"optional": true,
-"description": "Should the browser's history be cleared?"
-},
-"passwords": {
-"type": "boolean",
-"optional": true,
-"description": "Should the stored passwords be cleared?"
-}
-}
-},
-{
-"name": "callback",
-"type": "function",
-"description": "Called when deletion has completed.",
-"optional": "true",
-"parameters": \[
-{
-"name": "result",
-"type": "boolean",
-"description": "Was the data deletion successful?"
-}
-\]
-}
-\]
-}
-\]
-}
-Along with the general chrome.clear.browsingData(), type-specific methods
-(chrome.clear.xxx()) could be provided for clearing specific types of data:
-
-{
-"namespace": "experimental.clear",
-"functions": \[
-{
-"name": "cookies",
-"description": "Clears cookies/LSO/site data touched within a particular
-timeframe.",
-"type": "function",
-"parameters": \[
-{
-"name": "timePeriod",
-"type": "string",
-"enum": \["last_hour", "last_day", "last_week", "last_month", "everything"\],
-"optional": "false",
-"description": "The timeframe inside of which to delete browsing data.”
-},
-
-{
-"name": "callback",
-"type": "function",
-"description": "Called when deletion has completed.",
-"optional": "true",
-"parameters": \[
-{
-"name": "result",
-"type": "boolean",
-"description": "Was the data deletion successful?"
-}
-\]
-}
-
-\]
-
-}
-
-\]
-
-}
-
-Additionally, Chromium already provides chrome.cookies and chrome.history APIs,
-which give access to subsets of the “Clear Browsing Data” form’s functionality.
-These seem like excellent candidates for BrowsingDataRemover methods; adding
-.clear() methods to each of those seems like a reasonable way of addressing the
-request. The history namespace could additionally be overloaded to include
-.clearXXX() methods to clear the browser cache, downloaded files, stored
-passwords, and Autofill data (since all that data is arguably historical in
-nature).
-These methods might look like the following:
-{
-"namespace": "cookies",
-…
-"functions": \[
-…
-{
-"name": "clear",
-"description": "Clears cookies and other site data modified within a time
-period.",
-"type": "function",
-"parameters": \[
-{
-"name": "timePeriod",
-"type": "string",
-"enum": \["last_hour", "last_day", "last_week", "last_month", "everything"\],
-"optional": "false",
-"description": "The time period inside which to delete cookies and site data."
-},
-{
-"name": "callback",
-"type": "function",
-"description": "Called when deletion has completed.",
-"optional": "true",
-"parameters": \[
-{
-"name": "result",
-"type": "boolean",
-"description": "Was the data deletion successful?"
-}
-\]
-}
-\]
-},
-…
-\],
-…
-},
-{
-"namespace": "history",
-…
-"functions": \[
-…
-{
-"name": "clear",
-"description": "Clears browsing history created within a time period.",
-"type": "function",
-"parameters": \[
-{
-"name": "timePeriod",
-"type": "string",
-"enum": \["last_hour", "last_day", "last_week", "last_month", "everything"\],
-"optional": "false",
-"description": "The time period inside which to delete browsing history."
-},
-{
-"name": "callback",
-"type": "function",
-"description": "Called when deletion has completed.",
-"optional": "true",
-"parameters": \[
-{
-"name": "result",
-"type": "boolean",
-"description": "Was the data deletion successful?"
-}
-\]
-}
-\]
-},
-…
-\],
-…
-}
-It would be valuable to distinguish the namespace from the permission required
-to execute the methods. Extensions focused on removing data (see the use-cases
-above) shouldn’t be required to request read access to cookies on a variety of
-hosts in order to clear them. Using the explicit clear permission should grant
-access to the relevant methods regardless of namespace, as it would enable us to
-give the user a clear warning (cookies should grant the same access, for
-example, but only to the cookies-specific chrome.cookies.clear).
-Open questions
-
-1. BrowsingDataRemover offers the option of clearing browsing history,
- download history, clearing the cache, deleting cookies + site +
- plug-in data, clearing saved passwords, and clearing Autofill data.
- Homes should be found for programmatic methods that clear each type
- of data. chrome.history mostly makes sense, but it’s a stretch. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api.png.sha1
deleted file mode 100644
index 2967b92afe8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-42e12c980df80dd53c1f7e1b9fb9c8afaac045bc \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_2.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_2.png.sha1
deleted file mode 100644
index 2967b92afe8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-42e12c980df80dd53c1f7e1b9fb9c8afaac045bc \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_3.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_3.png.sha1
deleted file mode 100644
index 5f0127e4d29..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fdc49eeafbfae9cc52ccba6950b1aebdfeb85963 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_4.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_4.png.sha1
deleted file mode 100644
index 13a9870060a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fa8f7a75c15ad76b066bc951754ff40b72612592 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/index.md
deleted file mode 100644
index 1c43e8552a5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/index.md
+++ /dev/null
@@ -1,262 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: context-menu-api
-title: Context Menu API Proposal
----
-
-****NOTE: This document is now out of date. The API evolved some while behind the experimental flag, and is becoming fully supported in chrome 6. For details on the current implementation you can see**
-
-******<http://code.google.com/chrome/extensions/trunk/contextMenus.html>********
-
-********---********
-
-****Status****
-
-**Being implemented behind the --enable-experimental-extension-apis flag so we
-can collect developer feedback. Should be landing in the tree relatively soon.**
-
-**Overview**
-
-Provide a way for extensions to add items to the context (aka "right click")
-menu for web pages.
-
-**Use cases**
-
-Many features that extensions want to expose are only applicable to certain
-kinds of content. Some examples include saving selected text or link urls to a
-extension-local or web based notepad, removing particular images from a page,
-filling in form fields, and looking up words in an online dictionary.
-
-**Could this API be part of the web platform?**
-
-Probably not, since many actions people would like to add are logically
-"browser-level" functionality.
-
-**Do you expect this API to be fairly stable?**
-
-Yes, once we get some experience with an experimental version.
-
-**What UI does this API expose?**
-
-New menu items & submenus in context menus.
-
-****How could this API be abused?****
-
-Someone could create menu items with innocuous-sounding or misleading names (or
-even duplicates of built-in menu items) to trick users to click on them.
-
-**How would you implement your desired features if this API didn't exist?**
-
-You could (and perhaps some extensions do?) inject script into all pages to
-intercept onmousedown and create your own custom html menu implementation. But
-that is a terrible user experience since it prevents the browser-native menu
-from appearing.
-
-**Draft API spec**
-
-Initially these functions will only be callable from an extension's background
-page. This will likely not be sufficient, since a frequent use case for context
-menus is to operate on the specific link/image/etc. that the menu was activated
-on. See the "Future Improvements" section below for ideas about this.
-
-**Note: because this will be initially available as an experiment, the API
-methods will at first be chrome.experimental.contextMenu.methodname**
-
-**chrome.contextMenu.create**(object properties, function onCreatedCallback);
-
-> Creates a new context menu item. The onCreatedCallback function should have a
-> signature like function(id) {}, and will be passed the integer id of the newly
-> created menu item.
-
-> The properties parameter can contain:
-
-> \* **title** (optional string) - Text for this menu item. This is required for
-> all types except 'SEPARATOR'. The special string %s in a title will be
-> replaced with the currently selected text, if any.
-
-> \* **type** (optional string) - One of the strings 'NORMAL', 'CHECKBOX',
-> 'RADIO', or 'SEPARATOR'. Defaults to 'NORMAL' if not specified.
-
-> \* **checked** (optional boolean) - For items of type CHECKBOX or RADIO,
-> should this be selected (RADIO) or checked (CHECKBOX)? Only one RADIO item can
-> be selected at a time in a given group of RADIO items, with the last one to
-> have checked == true winning.
-
-> \* **contexts** (string) - Which contexts should this menu item appear for? An
-> array of one or more of the following strings:
-
-> > > 'ALL', 'PAGE', 'SELECTION', 'LINK', 'EDITABLE', 'IMAGE', 'VIDEO', 'AUDIO'.
-
-> > Defaults to PAGE, which means "none of the rest" are selected (no link, no
-> > image, etc.). If 'ALL' is in the array, the item will appear in all contexts
-> > regardless of the rest of the items in the array.
-
-> \* **enabledContexts** (string) - An array of strings similar to the contexts
-> property. This serves to limit the contexts where this item will be enabled
-> (ie not greyed out). If omitted, it defaults to the same set as the contexts
-> property.
-
-> \* **parentId** (integer) - If this should be a child item of another item,
-> this is the id
-
-> \* **onclick** (function(object info, Tab tab)) - A function that will be
-> called when this menu item is clicked on. The info parameter is an object
-> containing the following properties:
-
-> > \* **menuItemId** (integer) - The id of the menu item that was clicked.
-
-> > \* **parentMenuItemId** (optional integer) - The parent id, if any, for the
-> > item clicked.
-
-> > \* **mediaType** (optional string) - One of 'IMAGE', 'AUDIO', or 'VIDEO' if
-> > the context item was brought up on one of these types of elements.
-
-> > \* **linkUrl** (optional string) - If the element is a link, the url it
-> > points to.
-
-> > \* **srcUrl** (optional string) - Will be present for elements with a 'src'
-> > url.
-
-> > \* **pageUrl** (optional string) - The url of the page where the context
-> > menu was clicked.
-
-> > \* **frameUrl** (optional string) - The url of the frame of the element
-> > where the context menu was clicked.
-
-> > \* **selectionText** (optional string) - The text for the context selection,
-> > if any.
-
-> > \* **editable** (boolean) - A flag indicating whether the element is
-> > editable (text input, textarea, etc.)
-
-> > The tab parameter is the tab where the click happened, of the same form as
-> > that returned by chrome.tabs.get.
-
-**chrome.contextMenu.remove**(id);
-
-> Removes an extension menu item with the given id.
-
-**Examples**
-
-​==Define the currently selected word(s)==
-
-​The following code would live in your background page, and you would need to
-have "tabs" specified in the permissions section of your manifest.
-
-​function getDefinition(info, tab) {
-
-if (!info.selectionText || info.selectionText.length == 0) {
-
-return;
-
-}
-
-var maxLength = 1024;
-
-var searchText = (info.selectionText.length &lt;= maxLength) ?
-
-info.selectionText : info.selectionText.substr(0, maxLength);
-
-var url = "http://www.google.com/search?q=define:" + escape(searchText);
-
-chrome.tabs.create({"url": url});
-
-}
-
-chrome.contextMenu.create({"title": "Define '%s'", "onclick": getDefinition,
-
-"contexts":\["SELECTION"\]});
-
-​==Remove an image from a page==
-
-The following code would live in your background page, and you would need to
-have an entry in the permissions section of your manifest which allowed you to
-run chrome.tabs.executeScript on the page where the image had its context menu
-activated. This example highlights one of the limitations of the initial
-proposal, which is that you don't have any way to determine the actual unique
-node that was clicked on, so it removes any instances of the image from the
-page.
-
-chrome.contextMenu.create({"title": "Remove This Image", "contexts":
-\["IMAGE"\],
-
-"onclick": function(info, tab) {
-
-var frameUrl = info.frameUrl ? info.frameUrl : "";
-
-var code =
-
-"var imgs = document.getElementsByTagName('img');" +
-
-"var srcUrl = unescape('" + escape(info.srcUrl) + "');" +
-
-"for (var i in imgs) {" +
-
-" var img = imgs\[i\];" +
-
-" if (img.src == srcUrl) {" +
-
-" img.parentNode.removeChild(img);" +
-
-" }" +
-
-"}";
-
-chrome.tabs.executeScript(tab.id, {"allFrames": true, "code": code});
-
-}});
-
-****UI Design****
-
-**-Extension items appear towards the bottom of the context menu, above "Inspect
-element", sorted by extension name.**
-
-**-We will show at most one top-level menu item per extension. If an extension
-adds more than 1 item, we automatically push the items into a submenu, with the
-extension name as the top-level item.**
-
-**-The extension's icon will appear to the left of the top-level item to help
-the user understand which extension added what items, and help to mitigate the
-spoofing concerns raised above.**
-
-**[<img alt="image"
-src="/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_4.png"
-height=200
-width=151>](/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api/context_menu_api_4.png)**
-
-**Future Improvements**
-
-- Provide a mechanism for getting a handle to the precise node in the DOM where
-the menu was activated. This could mean one of the following ideas:
-
-* Allow registration of context menus from content scripts, with a
- callback function that receives a handle to the node.
-* Pass the id of the node in the callback to the background page, and
- if the node didn't have an id we synthesize one.
-* Provide something like chrome.tabs.executeScript, where you can pass
- a file or string of code to execute but also specify a function that
- will be called with the node
-
-- Add an update(int id, object properties) method so you can change your menu
-items in place.
-
-- Add a removeAll() method so you don't have to keep track of id's if you don't
-want to.
-
--Add a way to limit your menu items to specific tabs or frame urls (by a given
-match pattern, or perhaps automatically limit to only sites you have content
-script permissions for)
-
--Some people have asked for a onBeforeShow() event to fire before the menu items
-are displayed, but this may be infeasible given chrome's multiprocess
-architecture and desire to keep the UI very responsive. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/desktop-notification-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/desktop-notification-api/index.md
deleted file mode 100644
index d88f4681e8d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/desktop-notification-api/index.md
+++ /dev/null
@@ -1,160 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: desktop-notification-api
-title: Desktop Notification API
----
-
-Proposal Date
-
-January 2013.
-Who is the primary contact for this API?
-
-Justin DeWitt (dewittj)
-
-Who will be responsible for this API? (Team please, not an individual)
-
-The Extensions team will own the API, but the Notifications Frontend team will
-own the implementation (i.e., the actual desktop notification code) behind it.
-
-Overview
-
-This API provides rich desktop notifications to Chrome apps and extensions.
-
-Today, Chrome implements an [outdated version of the W3C spec for HTML5 desktop
-notifications](http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification).
-The functionality proposed here is generally similar, but significantly more
-powerful. We have yet addressed the question whether this API will replace,
-enhance, or remain entirely independent of any Chrome implementation of the W3C
-spec.
-
-Use cases
-
-Desktop notifications provide a convenient, non-intrusive method of notifying
-users of events, particularly when those events originate from a background web
-app. Today, a web app has unsatisfactory options to notify a user of important
-information:
-
-1. Raise a JavaScript alert, which might or might not bring a
- backgrounded window to the foreground. In the best case, where the
- user does see the alert, the result is text-only and modal.
-2. Change the window title and hope that enough of the window
- (typically the tab) is prominent. An example is Gmail's "Inbox (1)"
- title, originally designed to exploit the real estate available on a
- background tab in a tabbed browser.
-3. Try to play a sound.
-4. Develop and support a native notifier application that sits in the
- taskbar.
-
-An enumeration of specific use cases isn't needed. Today's web apps are likely
-to be one of many of a user's open browser tabs, only one of which is active at
-a time, any of which might have legitimate reasons to present urgent information
-to the user (new mail, new instant message, completion or failure of
-long-running process, scheduled reminders).
-
-Do you know anyone else, internal or external, that is also interested in this
-API?
-
-Yes.
-Could this API be part of the web platform?
-
-Yes.
-
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-
-We expect many more notification layouts in the near future, as well as more
-structured data supporting those layouts. Our hope is to design a flexible API
-that will accommodate those changes without breaking the API or substantially
-altering its shape.
-
-**If multiple extensions used this API at the same time, could they conflict with each other? If so, how do you propose to mitigate this problem?**
-Our "message center," which is the container that will display notifications,
-will intelligently manage the stream of notifications produced by API consumers.
-It will also give control to users in the form of per-app mute, a global on/off
-switch, and quiet hours. As no app or extension should be able to control these
-settings, they won't be part of the API.
-List every UI surface belonging to or potentially affected by your API:
-
-We'll separately mail out our message-center mocks. For purposes of this
-document, a notification area or taskbar item in the host OS will expand to
-display a rectangular message center. We don't expect the UI of Chrome proper to
-change.
-**Actions taken with extension APIs should be obviously attributable to an
-extension. Will users be able to tell when this new API is being used? How?**
-
-Users can currently attribute a notification to a particular extension by
-right-clicking on it. This names the extension and gives the user the ability to
-disable notifications from the extension.
-
-How could this API be abused?
-
-* Idle detection. Raise a notification and see whether the user
- dismisses it.
-* Create a large number of notifications in a short period of time.
-* Create a large number of notifications over a long period of time.
-* Raise a notification scaring the user ("Warning, system compromised,
- unplug from wall immediately").
-* Raise a notification embarrassing the user during a presentation
- ("Test results received from Fungus-B-Gone Clinic"). We have
- implemented a mode "Quiet Mode" that prevents new notifications from
- being displayed on screen to mitigate this.
-* Raise a notification demanding credentials, then steal them. Because
- the notification appears to originate outside Chrome, it might carry
- more clout than a typical evil website's phishing plea.
-* Impersonate another app or extension.
-
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-
-1. Pretend to be Gmail. Use the Gmail icon. Put up a notification that
- sends the user to a malware site that steals Gmail credentials.
-2. Send just enough inane notifications that the user gives up and
- disables notifications entirely. The user is known to be an oncall
- ops person at a targeted company. Destroy the company's servers and
- use the delay caused by the lost notifications to escape the
- country.
-3. Pretend to be an instant-message service. Send "Becky: what's our
- bank account #? I don't have it handy. \[Reply\]" All you need is
- one husband in a hurry whose wife is named Becky for this attack to
- be profitable. (This is really the same as #1; I'm out of ideas.)
-
-What security UI or other mitigations do you propose to limit evilness made
-possible by this new API?
-For the impersonation case, see answer to the "obviously attributable" question.
-For local DOSing, see answer to the conflicting extensions question.
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?**
-
-No.
-
-How would you implement your desired features if this API didn't exist?
-
-We'd use the existing desktop notification API, which unfortunately is reducing
-its feature set (no HTML layout option). Or we'd advise applications to use
-something like Growl, which wouldn't work on ChromeOS.
-
-**Draft Manifest Changes**
-
-A "notifications" permission, which is merged with the [existing
-**notifications**
-permission](http://developer.chrome.com/extensions/declare_permissions.html)
-that enables HTML5 desktop notifications without a runtime permissions check.
-
-**Draft API spec**
-**Note that this API approximately matches what's in the [Chromium repository](https://code.google.com/searchframe#OAMlx_jo-ck/src/chrome/common/extensions/api/experimental_notification.idl&exact_package=chromium&l=5). The source code is authoritative.**
-
-```none
-namespace notifications { enum TemplateType { // icon, title, message simple, // icon, title, message, expandedMessage, up to two buttons basic, // icon, title, message, expandedMessage, image, up to two buttons image, // icon, title, message, items, up to two buttons list }; dictionary NotificationItem { // Title of one item of a list notification. DOMString title; // Additional details about this item. DOMString message; }; dictionary NotificationButton { DOMString title; DOMString? iconUrl; }; dictionary NotificationOptions { // Which type of notification to display. TemplateType type; // Sender's avatar, app icon, or a thumbnail for image notifications. DOMString iconUrl; // Title of the notification (e.g. sender name for email). DOMString title; // Main notification content. DOMString message; // Priority ranges from -2 to 2. -2 is lowest priority. 2 is highest. Zero // is default. long? priority; // A timestamp associated with the notification, in milliseconds past the // epoch (e.g. Date.now() + n). Currently unimplemented, but planned for // a forthcoming release. double? eventTime; // Text and icons of the notification action button. NotificationButton[]? buttons; // Image thumbnail for image-type notifications DOMString? imageUrl; // Items for multi-item notifications. NotificationItem[]? items; }; callback CreateCallback = void (DOMString notificationId); callback UpdateCallback = void (boolean wasUpdated); callback DeleteCallback = void (boolean wasDeleted); interface Functions { // Creates and displays a notification having the contents in |options|, // identified by the id |notificationId|. If |notificationId| is empty, // |create| generates an id. If |notificationId| matches an existing // notification, |create| first deletes that notification before proceeding // with the create operation. |callback| returns the notification id (either // supplied or generated) that represents the created notification. static void create(DOMString notificationId, NotificationOptions options, CreateCallback callback); // Updates an existing notification having the id |notificationId| and the // options |options|. |callback| indicates whether a matching notification // existed. static void update(DOMString notificationId, NotificationOptions options, UpdateCallback callback); // Given a |notificationId| returned by the |create| method, clears the // corresponding notification. |callback| indicates whether a matching // notification existed. static void clear(DOMString notificationId, DeleteCallback callback); }; interface Events { // The notification closed, either by the system or by user action. static void onClosed(DOMString notificationId, boolean byUser); // The user clicked in a non-button area of the notification. static void onClicked(DOMString notificationId); // The user pressed a button in the notification. static void onButtonClicked(DOMString notificationId, long buttonIndex); };};
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/downloads-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/downloads-api/index.md
deleted file mode 100644
index 189d37f703a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/downloads-api/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: downloads-api
-title: Downloads API
----
-
-The downloads extension API draft proposal is available at <http://goo.gl/6hO1n> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/executecontentscript-proposal/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/executecontentscript-proposal/index.md
deleted file mode 100644
index 31afa8141aa..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/executecontentscript-proposal/index.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: executecontentscript-proposal
-title: executeScript() and executeCSS()
----
-
-### Problem
-
-Sometimes, extension developers don't need to execute content script in a page
-until some event happens in the extension. It is wasteful to execute content
-script in every web page on the off chance that this event will happen.
-
-For example, consider an extension that wants to translate web pages. There will
-be a button in the UI that enables translation. When this button is pressed, the
-DOM needs to be crawled, collecting text nodes, and concatenating them for
-translation. However, it would be nice to avoid running content scripts until
-this button is pressed.
-
-### Proposal
-
-chrome.tabs
-
-// Executes JavaScript in the root frame of a tab. The script is executed in the
-same type of
-
-// sandbox that content scripts are.
-
-//
-
-// Each time this method is called a new sandbox is created to run the script
-and the sandbox
-
-// persists following the usual rules of GC. This isn't particularly
-heavyweight, but it also
-
-// isn't something you'd want to do in a loop.
-
-//
-
-// If you need lots of small communication with a tab, consider executing script
-once and
-
-// then using content script messaging to communicate between that script and
-the extension.
-
-//
-
-// tabId: Optional, defaults to selected tab of the current window (as
-determined by
-
-// chrome.windows.getCurrent()).
-
-// js: Optional, string of JavaScript to execute.
-
-// js_files: Optional, array of JavaScript files to execute, in order.
-
-// callback: Optional, callback to invoke with result of execution (result of
-last statement).
-
-//
-
-// If the extension does not have access to interact with the URL in the
-specified tab, or if a
-
-// js file is specified that does not exist, an error is reported to the console
-associated with the
-
-// view that called the API. Execution errors in the script are reported to the
-console associated
-
-// with the tab.
-
-void **executeScript**(\[int tabId\], {\[string js\], \[string\[\] js_files\]},
-\[callback onSuccess(Object result)\]);
-
-// Applies CSS to the root frame of a tab.
-
-//
-
-// tabId: Optional, defaults to selected tab of the current window (as
-determined by
-
-// chrome.windows.getCurrent()).
-
-// css: Optional, string of CSS to execute.
-
-// css_files: Optional, array of CSS files to execute, in order.
-
-void **insertCSS**(\[int tabId\], {\[string css\], \[string\[\] css_files\]});
-
-Example
-
-chrome.tabs.executeScript(null, {js_files: \["jquery/min.js", "woo.js"\]});
-
-### Details
-
-* When we implement permissions, this API should fail if the extension
- doesn't have access to the page loaded into the tab.
-* No attempt is made to dedupe these. Each time you call the API, the
- script gets executed again. Callers need to maintain state if they
- don't want to execute duplicate scripts.
-* Executing script in subframes is not supported. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/font-settings/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/font-settings/index.md
deleted file mode 100644
index 7c8bd8863a3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/font-settings/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: font-settings
-title: Font Settings
----
-
-Font Settings API is now stable! See the
-**[chrome.fontSettings](http://developer.chrome.com/stable/extensions/fontSettings.html)
-documentation.**
-
-Proposal Date
-Jan 17, 2012
-
-Who is the primary contact for this API?
-*@)*Matt Falkenhagen (falken
-Who will be responsible for this API? (Team please, not an individual)
-
-Chrome Tokyo team / Chrome i18n team
-
-Overview
-Expose Chrome/WebKit font preferences to extensions, much like the Proxy Settings API.
-Use cases
-We want to add a more advanced font settings UI than is currently available, and
-it might be decided that it should be an extension in interest of keeping the
-Chrome UI simple.
-
-Specifically, Chrome/WebKit recently added per-script font settings, so e.g.,
-the "sans-serif" font setting for Simplified Chinese script can be different
-than the one for Traditional Chinese, or Japanese, etc. We want users to have
-access to these preferences. This is [crbug.com/2685](http://crbug.com/2685).
-
-Furthermore, there are other font settings not currently exposed in the UI, such
-as for fantasy and cursive fonts. This API would allow extensions for those
-settings.
-
-Do you know anyone else, internal or external, that is also interested in this
-API?
-No.
-Could this API be part of the web platform?
-No, this is simply client-side Chrome/WebKit settings. I don't see how it could be part of the web platform.
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-Yes, it will be fairly stable, only changing when the underlying Chrome/WebKit
-settings change. Some reasons it may change are:
-
-* It could be extended if support for additional scripts or CSS font
- families is needed.
-* The per-script settings may be extended to be per-script+language.
- For example, Farsi/Persian may need to use a different font than the
- one for Arabic language although both are written in Arabic script.
-* Some settings like default font size, default fixed font size,
- minimum font size that are currently global settings may become
- per-script settings in the future.
-* We could also add more parameters like font settings for certain URL
- patterns.
-
-List every UI surface belonging to or potentially affected by your API:
-Since it's exposing Chrome/WebKit font settings, it should affect only the web
-content renderer. These settings are not used in native UI surfaces to my
-knowledge.
-
-How could this API be abused?
-Describe any concerns you have with exposing this API. Particular attention
-should be given to issues of security, privacy and performance.
-
-Since Chrome observes font settings changes and propagates them to WebKit, which
-redraws as necessary, maybe an extension can cause performance disruptions.
-
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-1) An extension that trashes the font settings. Uninstalling the extension would
-undo the damage.
-
-2) An extension that rapidly keeps changing the fonts. It could conceivably be a
-DOS attack as WebKit tries to keep up. 3) An extension that reads font settings
-and uploads to a server to try to build a database fingerprinting users by the
-font settings. Also, if the API exposes a list of fonts installed on the system,
-it can also be a source of information for fingerprinting. See:
-<http://trac.webkit.org/wiki/Fingerprinting>
-
-Alright Doctor, one last challenge:
-Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?
-
-No. It just uses the standard [extension-controlled
-preferences](http://www.chromium.org/developers/design-documents/preferences#TOC-Extension-Controlled-Preferences)
-feature which handles cleanup when the extension is uninstalled.
-
-How would you implement your desired features if this API didn't exist?
-It could be part of the built-in Settings UI instead of relying on extensions.
-Draft API spec
-For the appropriate style, please refer to [existing
-APIs](http://code.google.com/chrome/extensions/docs.html) as well as the [other
-API proposals](/developers/design-documents/extensions/).
-For example, note that API calls that affect the browser process must be
-asynchronous, to prevent extension JavaScript from blocking on the browser UI.
-See the [current API
-spec](http://code.google.com/chrome/extensions/trunk/experimental.fontSettings.html)
-on trunk documentation.
-
-Originally I planned to use
-[ChromeSetting](http://code.google.com/chrome/extensions/types.html#ChromeSetting)
-to expose all preferences, but there would be too many of them (about 30 scripts
-with 6 font families each...).
-
-Open questions
-Note any unanswered questions that require further discussion.
-
-There was a possibility of putting per-script and other advanced font settings
-in the built-in UI, but to keep Chrome UI simple this is unlikely to happen. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/get-extension-views-by-type-proposal/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/get-extension-views-by-type-proposal/index.md
deleted file mode 100644
index c7acbc4dbc6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/get-extension-views-by-type-proposal/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: get-extension-views-by-type-proposal
-title: Get Views by Type
----
-
-### Problem
-
-Right now we have chrome.extension.getViews() which returns a list of all active
-views (toolstrips, tab contents, the background page) in the extension. This is
-cool, but you also frequently need to get all views of a certain type. For
-example, all toolstrips, or just the background page. Also, people frequently
-want to get the toolstrips associated with a particular window.
-
-### Proposal
-
-chrome.extension
-
-// Returns an array of DOMWindows for the toolstrips running in the current
-extension.
-
-//
-
-// windowId: optional. If specified only returns toolstrips from that window. If
-
-// omitted, defaults to the current window as defined by
-chrome.windows.getCurrent().
-
-// Can also be the string "all", in which case all toolstrips in all windows
-will be
-
-// returned.
-
-DOMWindow\[\] **getToolstrips**(\[int-or-string windowId\]);
-
-// Returns an array of DOMWindows for any tabs running in the current extension.
-
-//
-
-// windowId: optional. If specified only returns toolstrips from that window. If
-
-// omitted, defaults to the current window as defined by
-chrome.windows.getCurrent().
-
-// Can also be the string "all", in which case all toolstrips in all windows
-will be
-
-// returned.
-
-DOMWindow\[\] **getTabs**(\[int-or-string windowId\]);
-
-// Returns the DOMWindow for the extension's background page, or null if the
-extension
-
-// doesn't have a background page.
-
-DOMWindow **getBackgroundPage**();
-
-### Example
-
-// Assuming the extension has a background page and has a global function called
-"foobar".
-
-chrome.extension.getBackgroundPage().foobar(); \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/gleam-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/gleam-api/index.md
deleted file mode 100644
index 68c22cc535d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/gleam-api/index.md
+++ /dev/null
@@ -1,169 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: gleam-api
-title: Gleam API
----
-
-## Overview
-
-Extension developers often want a way to offer contextual actions with different
-parts of a web page. For example:
-
-* The Skype extension would like to offer to make calls to phone
- numbers in the text of a page
-* Many extensions would like to offer to download or edit embedded
- images and video
-* Annotation extensions would like to offer to act on the current
- selection, and to highlight passages of text in a web page
-
-The Gleam API would allow extension developers to do these things, in a way
-that:
-
-* Cannot slow down page load
-* Cannot break the rendering of web pages
-* Simplifies handling all the tricky edge cases in dynamic pages that
- add, edit, and remove nodes at runtime
-* Offers a nice, consistent UI that users will understand and that
- allows multiple extensions to interact nicely without conflict
-
-## Status
-
-Proposal
-
-## Details
-
-Extensions can register interest in several different types of objects:
-
-* Images
-* Plugins
-* Video (the &lt;video&gt; tag)
-* Links
-* Text
-* Selection
-
-Gleams are registered in the manifest, and multiple gleams can be registered
-per-extension. If an extension is only interested in a subset of objects of a
-given type on the page, they can be filtered with optional filter declarations
-in the manifest or a filter function.
-
-Once an object has been selected by at least one extension, it is visually
-highlighted by Chrome. For most types, the available actions wouldn't be visible
-on an object by default, only a highlight indicating that some actions are
-available. When the user hovers over the object, buttons for the available
-actions are rendered. When a Gleam is invoked, a callback is fired in the
-extension with details of the invoked Gleam and the relevant object.
-
-&lt;todo: need mocks!&gt;
-
-## Manifest
-
-{
-
-...
-
-"gleam": \[
-
-{
-
-"type": "image" | "plugin" | "video" | "link" | "text" | "selection",
-
-"id": &lt;string&gt;, /\* a unique ID (within this extension) for the gleam \*/
-
-"name": &lt;string&gt;, /\* the name to display in the UI \*/
-
-"icon": &lt;path&gt;, /\* A path to an icon to display in the UI \*/
-
-"regexp": &lt;string&gt;, /\* optional, only valid for type "text". a regexp
-that filters text objects before invoking the filter function \*/
-
-"content-types": &lt;string\[\]&gt; /\* optional, only valid for types "image",
-"plugin", and "video". an array of content-types to filter to \*/
-
-"filter": &lt;string&gt;, /\* optional, an expression that evaluates to a
-function to use to filter objects to select \*/
-
-"callback": &lt;string&gt; /\* an expression that evaluates to a function to
-call when the gleam is invoked \*/
-
-}
-
-\]
-
-...
-
-}
-
-## Filters
-
-Each page action can specify an optional filter. The filter is a string that
-should evaluate to a JavaScript function. The function is called for each object
-found that matches the specified type and any applicable declarative filters.
-
-The filter callback receives an object with the following properties:
-
-String id // The ID of the gleam that a matching object was found for.
-
-String documentUrl // The URL of the document the object was found on.
-
-int tabId // The ID of the tab the object was found on.
-
-String contentType // The content type of the matching object. Only valid for
-image, video, and plugin.
-
-String url // The URL of the object. Only valid for image, video, and link
-
-String text // The text of the object. Only valid for text and link.
-
-int width // The width of the object, if known. Only valid for image, video, and
-plugin
-
-int height // The height of the object, if known. Only valid for image, video,
-and plugin
-
-For all types except text, the filter callback should return a boolean
-indicating whether the object should be selected. For type text, the filter
-callback should return an array of begin/end pairs indicating the ranges inside
-the text that should be selected.
-
-Note that extension developers may choose to never select any objects if they
-are only interested in knowing about certain types of objects on the page, not
-performing actions on them.
-
-## Callbacks
-
-Each action must specify a callback. The callback is a string that should
-evaluate to a JavaScript function. The function is called when the gleam is
-invoked by the user. The parameters to the callback are the same as the
-parameters to the filter (see above), and there is no return value.
-
-## Extra Details
-
-One of the neat things about this API is that we describe "objects" at a higher
-level than DOM nodes. So Chrome gets to decide how to translate the DOM into
-these "objects". We have an opportunity to really reduce complexity for
-developers by doing these translations smartly.
-
-* For type "image", we shouldn't send images that are very small, or
- off screen. These are layout-related, most likely, and not useful to
- users.
-* For type "text", we should construct a text string for entire
- paragraphs at a time, removing all inline formatting tags, links,
- etc. This is very difficult to do correctly and we can save
- developer lots of work and bugginess by doing it for them. When the
- extension returns ranges, we translate these back into the DOM tree.
- This is hard, but we have all the data necessary to do it. Extension
- developers don't because it isn't surfaced through DOM APIs. This
- also means that we need to track tree changes so that we can
- invalidate filters requests that are outstanding.
-* We could add other high-level objects in the future, like
- "phone-number" and "address". (thanks erikkay for the idea!) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/history-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/history-api/index.md
deleted file mode 100644
index 184dc19ccdf..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/history-api/index.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: history-api
-title: History API
----
-
-history.
-
-void search(HistoryQuery query, void callback(HistoryItem\[\] results))
-
-void clear(HistoryQuery query) // defaults to clearing all. Should we prompt?
-
-// NOTE: these could be done in a v2 -- I don't see huge use cases for them,
-except perhaps for synchronization.
-
-void create({int date, string url, string title, \[string favIconUrl\], \[int
-fromId\]}, \[void callback(HistoryItem result)\])
-
-event onHistoryItemCreated(HistoryItem new)
-
-event onHistoryItemRemoved(HistoryItem removed)
-
-struct HistoryItem {
-
-int id
-
-int date
-
-string url
-
-string title
-
-string favIconUrl
-
-int fromId
-
-int totalVisitCount
-
-int totalTypedCount
-
-}
-
-struct HistoryQuery {
-
-// limited to 100, defaults to current day.
-
-optional int\[\] ids
-
-optional string search
-
-optional Date startDate
-
-optional Date endDate
-
-} \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/i18n-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/i18n-api/index.md
deleted file mode 100644
index 85385d27b5e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/i18n-api/index.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: i18n-api
-title: i18n-api
----
-
-### Overview
-
-The i18n API allows you to manipulate the i18n related browser settings, such as
-the accept languages. (Note: since the first version will only implement the
-access of accept languages, this document will focus on accept languages below.)
-
-### Use cases
-
-It allows extensions to read and write the browser's i18n related settings.
-Given accept languages as an example, page translation extension and dictionary
-extension will need to get the accept languages from the browser and use them as
-the targeted languages for page or word translation.
-
-### Could this API be part of the web platform?
-
-Given accept languages as an example, read accept languages could be part of the
-web platform, it could be exposed by window.navigator.acceptLanguages while UI
-language is exposed through widow.navigator.language. But we would also like to
-be able to modify accept languages preferences as well by extension, for
-example, it'd be nice if we could "learn" the accept-languages through
-translate, such as if you decline to translate a French page, that would be a
-good signal that you want it added to the accept-languages.
-
-### Do you expect this API to be fairly stable?
-
-Yes*.*
-
-### What UI does this API expose?
-
-None*.*
-
-### How could this API be abused?
-
-Read accept languages should be OK.
-
-### Are you willing and able to develop and maintain this API?
-
-Yes*.*
-
-### Draft API spec
-
-## chrome.i18n.
-
-## void getAcceptLanguages(void callback(String acceptLanguages))
-
-## void setAcceptLanguages(Value newAcceptLanguages)
-
-## void appendAcceptLanguage(Value acceptLanguage)
-
-### Notes
-
-The first version will only implement the access of accept languages.
-
-### Issues
-
-* Any issues with modifying the browser's accept languages through
- extension API? \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/index.md
deleted file mode 100644
index a92c0ec5962..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-page_name: apis-under-development
-title: API Proposals (New APIs Start Here)
----
-
-This page has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/extensions/docs/new_api_proposal.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/input-method-editor/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/input-method-editor/index.md
deleted file mode 100644
index ff5641ca2de..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/input-method-editor/index.md
+++ /dev/null
@@ -1,452 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: input-method-editor
-title: Input Method Editor
----
-
-Overview
-The purpose of this API is to allow third parties to develop IMEs for Chrome OS
-via extensions.
-Use cases
-This API would be used to create IMEs that aren’t included in Chrome OS. This
-could include Cloud IME solutions, alternate CJK IMEs, or English IMEs and
-writing assistants.
-There are three basic types of input we should support:
-
-* Text Generators: Generates a block of text to input into a text
- window. Voice Input is an example of this.
-* Keystroke Generators: Generates distinct keystroke, which are passed
- to the active IME. Virtual Keyboard and Handwriting inputs are
- examples of this.
-* IMEs: Manages the candidate window, composition, and processes key
- events.
-
-An input method extension can behave as any or all of these, but only a single
-extension can be active as an IME at a time.
-Could this API be part of the web platform?
-This is a client side feature, and doesn’t make much sense to add to HTML5
-Do you expect this API to be fairly stable?
-Once finalized, I don’t expect this API to change in any way that would break
-backwards compatibility.
-
-What UI does this API expose?
-On ChromeOS, the user interacts with this API through the IME selection button,
-and the candidate window. As such, no new UI would need to be added. To
-implement this API on Windows, Mac and Linux, an IME selection method would need
-to be added, and the candidate window would need to be exposed.
-Candidate Window<img alt="image"
-src="https://lh6.googleusercontent.com/GPuIhveTIycZtycoRX-UpMyjUtTbRagxaFBSumy_lXMm_Jk5XrwNC2c7MDZMY_dsVhIu8yqUXC62eTajN4evCvBJqAbeBa9inZc0EHPEDrEdh7AQzRbIGjlF4p5Q4bM"
-height=273px; width=372px;>
-Language Selection<img alt="image"
-src="https://lh4.googleusercontent.com/mI9f05co5OXWt9epa7Q7dXh0jAqPwaySZ94CI_PlzahEQvMHt0uHupj_gXhIfoMK0DPd0LKqEDie3zEz_EwFbVPAYmKCMKDHsu_x4Vp5oDlGXOufP6iC1sJMF3YGomY"
-height=305px; width=337px;>
-How could this API be abused?
-The biggest danger of this API is that it could easily be used to create key
-loggers. Android deals with this issue by adding additional security dialogs to
-enable third party IMEs. The danger is mitigated slightly by the fact that
-password dialogs do not send their keystrokes to IME. Extensions that generate
-keystrokes such as virtual keyboards will still be able to send keystrokes to
-password fields and could record this data, however.
-This should be protected by both the standard security warning during
-installation, and an additional warning/confirmation dialog when enabled for the
-first time.
-How would you implement your desired features if this API didn’t exist?
-There is currently no way for third parties to add IMEs to Chrome OS. Allowing
-IMEs executing in any other context than sandboxed Javascript seems much more
-dangerous from a security standpoint.
-Are you willing and able to develop and maintain this API?
-Yes.
-
-Draft API spec
-To prevent abuse of IMEs, the API will be guarded by the “ime” permission in
-manifest.json.
-
-Manifest Entries:
-
-To use the ime.engine APIs, you need to specify an input_components entry in the
-manifest. It will contain an array describing any input components in the
-extension.
-
-It should look like:
-
-"input_components" = \[
-
-{
-
-"name": "My IME", // A user visible name.
-
-"type": "ime", // The type of input component.
-
-"id": "my_ime", // The id that will be passed to callbacks
-
-"description": "My Input method for Japanese", // A user visible description
-
-"language": "ja", // The primary language this IME is used for
-
-"layouts": {"jp::jpn", "us:dvorak:eng"} // The supported keyboard layouts for
-this IME
-
-}
-
-\]
-
-Types:
-
-* MenuItem (Object)
- * id (String)
- * label (optional String) (default: “”)
- * style (optional Integer) - Enum representing if this item is:
- None, Check, Radio, or a Separator. Radio buttons between
- separators are considered grouped.
- * visible (optional Boolean) (default: true)
- * enabled (optional Boolean) (default: true)
- * checked (optional Boolean) (default: false)
- * children (optional Array of MenuItem)
-* KeyboardEvent (Object) - See
- <http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent>
- * type (String) - One of 'keyup' or 'keydown'.
- * key (String) - Value of the key being pressed
- * altKey (optional Boolean) - Whether or not the ALT key is
- pressed.
- * ctrlKey (optional Boolean) - Whether or not the CTRL key is
- pressed.
- * shiftKey (optional Boolean) - Whether or not the SHIFT key is
- pressed.
-* InputContext (Object)
- * textID (Integer) - This is used to specify targets of text field
- operations. This ID becomes invalid as soon as onBlur is called.
- * type (String) - Type of value this text field edits, (Text,
- Number, Password, etc)
-
-Methods:
-chrome.
-
-****input.ime****
-
-.setComposition**
-
-* Description
- * Set the current composition. If this extension does not own the
- active IME, this fails.
-* Parameters
- * Object
- * contextID (Integer) - ID of the context with the composition
- text. This is the value provided in the InputContext from
- onFocus.
- * text (String)
- * selectionStart (optional Integer) - Position in the text
- that the selection starts at.
- * selectionEnd (optional Integer) - Position in the text that
- the selection ends at.
- * cursor (Integer) - Position in the text of the cursor
- * segments (optional Array) - List of segments and their
- associated types.
- * Object
- * start (Integer)
- * end (Integer)
- * style (String) - \[underline, doubleUnderline\] This
- is an enum that indicates what type this segment is.
- * callback (optional Function(Boolean success) {} ) - Called when
- the operation completes. success indicates whether the operation
- succeeded, on failure, chrome.extension.lastError is set.
-
-chrome.
-
-********input********
-
-****.ime****
-
-.clearComposition**
-
-* Description
- * Clear the current composition. If this extension does not own
- the active IME, this fails.
-* Parameters
- * Object
- * contextID (Integer) - ID of the context with the composition
- text. This is the value provided in the InputContext from
- onFocus.
- * callback (optional Function(Boolean success) {} ) - Called when
- the operation completes. success indicates whether the operation
- succeeded, on failure, chrome.extension.lastError is set.
-
-chrome.
-
-********input********
-
-****.ime****
-
-.commitText**
-
-* Description
- * Commits the provided text to the current input.
-* Parameters
- * Object
- * contextID (Integer) - ID of the context where the text will
- be committed.
- * text (String)
- * callback (optional Function(Boolean success) {}) - Called when
- the operation completes with a boolean indicating if the text
- was accepted or not. on failure, chrome.extension.lastError is
- set.
-
-chrome.
-
-********input********
-
-****.ime****
-
-.setCandidateWindowProperties**
-
-* Description
- * Sets the properties of the candidate window. This fails if the
- extension doesn’t own the active IME
-* Parameters
- * Object
- * engineID (String)
- * properties (Object)
- * visible (optional Boolean) - True to show the Candidate
- window, false to hide it.
- * cursorVisible (optional Boolean) - True to show the
- cursor, false to hide it.
- * vertical (optional Boolean) - True if the candidate
- window should be rendered vertical, false to make it
- horizontal.
- * pageSize (optional Integer) - The number of candidates
- to display per page.
- * auxiliaryText (optional String) - Text that is shown at
- the bottom of the candidate window.
- * auxiliaryTextVisible (optional Boolean) - True to
- display the auxiliary text, false to hide it.
- * callback (optional Function(Boolean success) {}) - Called when
- the operation completes.
-
-chrome.
-
-********input********
-
-****.ime****
-
-.setCandidates**
-
-* Description
- * Sets the current candidate list. This fails if this extension
- doesn’t own the active IME
-* Parameters
- * Object
- * contextID (Integer)
- * candidates (Array)
- * item (Object)
- * candidate (String)
- * id (Integer) - User defined id that will be used to
- identify this candidate. It must be unique in the
- current list of candidates.
- * label (optional String)
- * annotation (optional String)
- * candidates (Array of items) - Sub-candidates
- * callback (optional Function(Boolean success) {}) - Called when
- the operation completes.
-
-chrome.
-
-********input********
-
-****.ime****
-
-.setCursorPosition**
-
-* Description
- * Set the position of the cursor in the candidate window. This is
- a no-op if this extension does not own the active IME.
-* Parameters
- * Object
- * contextID (Integer)
- * candidateID (Integer) - ID of the candidate to select.
- * callback (optional Function) - Called when the operation
- completes
-
-chrome.
-
-********input********
-
-****.ime****
-
-.setMenuItems**
-
-* Description
- * Adds the provided menu items to the language menu when this IME
- is active.
-* Parameters
- * Object
- * engineID (String) - ID of the engine to use
- * items (array of MenuItem) - MenuItems to add. They will be
- added in the order they exist in the array.
- * callback (optional Function) - Called when the operation
- completes
-
-chrome.
-
-********input********
-
-****.ime****
-
-.updateMenuItems**
-
-* Description
- * Updates the state of the MenuItems specified
-* Parameters
- * Object
- * engineID (String) - ID of the engine to use
- * item (MenuItem or array of MenuItem) - One or more MenuItems
- to update.
- * callback (optional Function) - Called when the operation
- completes
-
-chrome.
-
-********input********
-
-****.ime****
-
-.sendKeyEvent**
-
-* Description
- * Sends a keystroke to the system
-* Parameters
- * Object
- * contextID (Integer) - ID of the context with the composition
- text.
- * key (KeyEvent) - Key data to send
- * callback (optional Function) - Called when the operation
- completes
-
-Events
-chrome.
-
-********input********
-
-****.ime****
-
-.onActivate**
-
-* Description
- * This event is sent when an IME is activated. It signals that the
- IME will be receiving onKeyPress events.
-* Parameters
- * engineID (String) - ID of the engine receiving the event
-
-chrome.
-
-********input********
-
-****.ime****
-
-.onDeactivated**
-
-* Description
- * This event is sent when an IME is deactivated. It signals that
- the IME will no longer be receiving onKeyPress events.
-* Parameters
- * engineID (String) - ID of the engine receiving the event
-
-chrome.
-
-********input********
-
-****.ime****
-
-.onFocus**
-
-* Description
- * This event is sent when focus enters a text box. It is sent to
- all extensions that are listening to this event, and enabled by
- the user.
-* Parameters
- * context (InputContext) - an InputContext object describing the
- text field that has acquired focus.
-
-chrome.
-
-********input********
-
-****.ime****
-
-.onBlur**
-
-* Description
- * This event is sent when focus leaves a text box. It is sent to
- all extensions that are listening to this event, and enabled by
- the user.
-* Parameters
- * contextID (Integer) - the ID of the text field that has lost
- focus. The ID is invalid after this call
-
-chrome.
-
-********input********
-
-****.ime****
-
-.onInputContextUpdate**
-
-* Description
- * This event is sent when the properties of the current
- InputContext change, such as the the type. It is sent to all
- extensions that are listening to this event, and enabled by the
- user.
-* Parameters
- * context (InputContext) - an InputContext object describing the
- text field that has changed.
-
-chrome.
-
-********input********
-
-****.ime****
-
-.onKeyEvent**
-
-* Description
- * This event is sent if this extension owns the active IME.
-* Parameters
- * engineID (String) - ID of the engine receiving the event
- * keyData (KeyEvent) - Data on the key event
-* Return value
- * handled (Boolean) - True if the keystroke was handled, or false
- if it should be
-
-chrome.
-
-********input********
-
-****.ime****
-
-.onCandidateClicked**
-
-* Parameters
- * engineID (String) - ID of the engine receiving the event
- * candidateID (Integer) - ID of the candidate that was clicked.
- * button (String) -\[left, right, middle\] Which mouse buttons was
- clicked.
-
-**chrome.**
-
-******input******
-
-**.ime.onMenuItemActivated**
-
-* Parameters
- * engineID (String) - ID of the engine receiving the event
- * name (String) - Name of the MenuItem which was activated
-
-**Open questions** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/instructions-for-api-shepherds/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/instructions-for-api-shepherds/index.md
deleted file mode 100644
index 0ef7ae8c214..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/instructions-for-api-shepherds/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: instructions-for-api-shepherds
-title: '[Deprecated] Instructions for API launch engineers'
----
-
-## [API
-launch](/developers/design-documents/extensions/proposed-changes/apis-under-development)
-no longer utilizes launch engineers. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/language-detection/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/language-detection/index.md
deleted file mode 100644
index c23e6982d8d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/language-detection/index.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: language-detection
-title: Language Detection for chunks of text
----
-
-## Overview
-
-## Add a new chrome.i18n.detectLanguage that enables CLD language detection for a chunk of user-supplied text.
-
-## Use cases
-
-## This API would be useful for extensions that want to translate parts of a page that are in a different language than the page itself. This is also useful in implementing an extension that translates user-supplied text (in a gadget, for example) into a language of the user’s choice, without needing to rely on an external server for language detection of the text. The existing chrome.tabs.detectLanguage API only provides language detection on a page-level granularity.
-
-## Could this API be part of the web platform?
-
-## No, this is intended to fill in a functionality gap with an existing chrome extension API, and not to introduce new web standards.
-
-## Do you expect this API to be fairly stable?
-
-## The set of languages that can be detected by the CLD may change over time, which affects the results of this function in a similar way as chrome.tabs.detectLanguage.
-
-## What UI does this API expose?
-
-## None.
-
-## How could this API be abused?
-
-## There’s nothing obvious that could be abused here.
-
-## How would you implement your desired features if this API didn't exist?
-
-## The only way to detect the language of a chunk of text from a page right now would be to transmit the text to a third party server and wait for a reply. This is not desirable as it introduces privacy concerns about sending text scraped from parts of a page to a server before a user explicitly requests they be translated.
-
-## Are you willing and able to develop and maintain this API?
-
-## Yes.
-
-## Draft API spec
-
-## Methods
-
-## detectLanguage
-
-## chrome.i18n.detectLanguage(string text, function callback)
-
-## Detects the primary language of a supplied chunk of text. Language detection is more reliable for larger chunks of text (preferably 100 characters or more), but may be able to make a determination with small chunks for languages that use unique characters, such as Arabic or Hebrew.
-
-## Parameters
-
-## text ( string )
-
-## The text to analyze.
-
-## callback ( function )
-
-## The callback parameter should specify a function that looks like this:
-
-## function(array of DetectedLanguage languages) {...};
-
-## result ( LanguageDetectionResult )
-
-## Will contain up to three languages that were detected in text.
-
-## Types
-
-## DetectedLanguage
-
-## ( object )
-
-## language ( string )
-
-## An ISO language code such as en or fr. For a complete list of languages that could be returned here, see [kLanguageInfoTable](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/cld/languages/internal/languages.cc). The 2nd to 4th columns will be checked and the first non-NULL value will be returned except for Simplified Chinese for which zh-CN will be returned.
-
-## confidence ( integer )
-
-## A value between 0 and 100, inclusive, that indicates Chrome’s percentage confidence that the supplied text is in this language. High values indicate high confidence.
-
-## LanguageDetectionResult
-
-## ( Object)
-
-## reliable ( boolean )
-
-## True if language detection was considered reliable. This is the case when a single language emerges with a confidence value that is significantly higher than the next most likely language.
-
-## languages ( array of DetectedLanguage )
-
-## The possible languages that were detected for the supplied text, if any.
-
-## Open questions
-
-## Is it useful to return the raw confidence numbers for each language? These may change with each new implementation of the CLD. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/managed-storage-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/managed-storage-api/index.md
deleted file mode 100644
index d3fb83f71ec..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/managed-storage-api/index.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: managed-storage-api
-title: Managed Storage API
----
-
-**Proposal Date**
-
-June 27 2012
-
-Who is the primary contact for this API?
-joaodasilva@chromium.org
-Who will be responsible for this API?
-
-Chrome Enterprise team: chrome-enterprise-muc@google.com,
-chrome-enterprise@google.com
-
-Overview
-This is a proposal to extend the storage API
-([proposal](/developers/design-documents/extensions/proposed-changes/apis-under-development/settings),
-[API](http://code.google.com/chrome/extensions/storage.html)) to add support for
-managed values that can be set by an administrator, allowing the administrator
-to configure extensions for their domains.
-
-Extensions will have a new 'managed' namespace under 'chrome.storage' that is
-read-only and provides the values of the settings configured by the
-administrator for that extension.
-
-Use cases
-
-Many features of Chrome can be configured using
-[policies](/administrators/policy-list-3). We'd like to give administrators the
-capability to further customize Chrome for their deployments by allowing them to
-not only [force extensions to be
-installed](/administrators/policy-list-3#ExtensionInstallForcelist), but also to
-configure them. Some examples:
-
-* Use an extension to preconfigure bookmarks, and to keep them in sync
- with a shared list retrieved using XHR
-* Use an extension to block URLs, using blocklists downloaded from
- other websites
-* Use an extension to manipulate cookies for internal sites
-* Use an extension to customize the Omnibox results for their domain
-* Use an extension to periodically publish the recent history to an
- internal logging server
-* Use an extension to configure the proxy settings
-* Use an extension to configure the privacy settings
-
-Many of these scenarios can be achieved by creating a custom extension with the
-desired features; we'd like to simplify that by allowing generic extensions to
-be configured via the policy mechanisms.
-
-Do you know anyone else, internal or external, that is also interested in this
-API?
-Administrators often post feature requests on the bug tracker, and some of them could be served by extensions. There are also management scenarios on ChromeOS that would benefit from this feature.
-Could this API be part of the web platform?
-
-That's not planned at this stage. In the future we might consider another proposal to also manage preferences for a website, possibly through the localStorage API.
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-We expect these modified APIs to be stable and don't foresee any further
-changes. They are also designed with compatibility with existing extensions in
-mind.
-
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-Each extension can only read its own stored settings, so we don't expect this to
-introduce conflicts.
-List every UI surface belonging to or potentially affected by your API:
-This proposal does not introduce new UI.
-**Actions taken with extension APIs should be obviously attributable to an
-extension. Will users be able to tell when this new API is being used? How?**
-
-The modified APIs don't results in any browser-side actions, as they are purely
-informational to the extension. The only user-visible aspect of this API is the
-local storage view in the resources inspector. However, managed settings will
-not be shown there, since they come from the policy system and are not persisted
-in local storage.
-
-How could this API be abused?
-This is a read-only API that is only meant to allow extensions to read managed
-settings that have been set explicitly for the requesting extension.
-
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-No idea how this can be abused, really.
-What security UI or other mitigations do you propose to limit evilness made possible by this new API?
-No need for this is foreseen.
-Alright Doctor, one last challenge:
-Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?
-
-No.
-
-How would you implement your desired features if this API didn't exist?
-Administrators could roll their own extension and push an extension update when
-they want to modify the extension's behavior. This isn't as flexible as the
-existing policy mechanisms, and would require the developer of the extension to
-roll their own policy delivery mechanism. Many administrators also don't have
-the technical skills or resources to create their own extensions or to maintain
-a fork of a pre-made extension.
-
-Another possibility would be to implement a "native" Chrome policy that supports
-the administrator's use case, but it is not reasonable to introduce a new policy
-for every corner case. Allowing policy to override the storage settings of some
-extensions greatly broadens the customizability of Chrome for administrators.
-
-Draft API spec
-This proposal involves a backend modification and an extension to the existing
-[storage API](http://code.google.com/chrome/extensions/storage.html).
-
-On the backend, a new storage API implementation will be added that pulls values
-from the [policy
-service](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/policy/policy_service.h?view=markup)
-for the particular extension, when available. These values are exposed in the
-'managed' namespace. The 'managed' namespace is similar to 'local' and 'sync',
-but is a read-only namespace.
-
-The callback of
-[storage.get](http://code.google.com/chrome/extensions/storage.html#method-StorageArea-get)
-currently gets an object mapping a setting key to its value. It will be extended
-to receive a second object that maps a setting key to an object with metadata
-about that setting (existing code can still work with the first argument only).
-For now, the only well-known metadata key will be "policyLevel", which takes the
-value "mandatory" or "recommended". This indicates whether the administrator
-would like the value to be enforced, or if it is just a suggested default that
-the user can override. The metadata object can be extended in the future to
-include other details (for example, the sync version).
-
-Other remarks:
-
-* Settings configured via a policy do not count towards the
- extension's quota. getBytesInUse() is 0 for the 'managed' namespace.
-* The extension can still set() a key that is being overridden by a
- policy in another namespace. It is up to the extension to give
- priority to a managed value, if it exists. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/media-gallery/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/media-gallery/index.md
deleted file mode 100644
index dadfde70e0b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/media-gallery/index.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: media-gallery
-title: MediaGallery
----
-
-Proposal Date
-
-*1/24/2012 updated 4/24/2012*
-
-Who is the primary contact for this API?
-*Steve VanDeBogart. This document was authored by Tony Payne*
-
-Who will be responsible for this API? (Team please, not an individual)
-
-*owp-media-gallery@*
-
-Overview
-Media and metadata access API.
-Use cases
-This API makes media applications much simpler and provides a standard interface
-for both local and online galleries.
-Do you know anyone else, internal or external, that is also interested in this
-API?
-This will be used in Q2 2012 by an internal application for both local
-(removable media) galleries and remote galleries. At least 2 other internal
-teams have expressed interest in using the API.
-
-Could this API be part of the web platform?
-We intend to make this part of the web platform but are looking to release an
-experimental extension API first for 2 reasons: 1) to meet the aggressive goals
-of the internal project, 2) To vet the API before going to standards bodies.
-There are existing Gallery API proposals but they do not meet our needs (provide
-no metadata access and rely on synchronous APIs)
-
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-As mentioned above, we don't expect to go beyond the experimental stage with
-this API. For backwards compatibility, the eventual OWP API can be wrapped by
-the existing experimental API.
-
-List every UI surface belonging to or potentially affected by your API:
-*Settings: We may need a settings interface for adding and removing galleries
-from the browser.*
-
-*Permissions: As an extension, a manifest permissions entry will be used.
-However, as a web platform API, applications that have not been given permission
-to access the browser's galleries will cause a permissions prompt when they
-attempt to access galleries for the first time.*
-
-How could this API be abused?
-*This API contains write and delete operations that can cause permanent data
-loss.*
-
-*Quite a lot of attention has been given to making it easy to write well-performing applications using this API but there is always the potential for trying to keep too much data in memory, since this API gives access to a potentially enormous amount of media file data on the system and online.*
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-1) Delete all media files from the system
-2) Corrupt all media files on the system
-3) Upload all media files on the system to an evil host
-
-4) Fill up the user's local drive
-
-5) Copy malware onto the system, hoping the user will execute it.
-
-Alright Doctor, one last challenge:
-Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?
-*Yes. The MediaGallery API provides write and delete methods for making permanent changes to media files in the gallery.*
-How would you implement your desired features if this API didn't exist?
-*File access via existing HTML5 file APIs using a File dialog to gain permission
-(this is a terrible user experience)*
-
-*Metadata parsing using client-side parsers. These have terrible performance*
-
-Draft API spec
-*The current draft is in WebIDL format here:
-<https://docs.google.com/a/google.com/document/pub?id=1UpwxoIBoTgrA9fLujXCirNp4NYB0Z0F0LiX_SuS9c5U>
-
-*The previous draft can be found here:
-<https://docs.google.com/a/google.com/document/pub?id=1RsLin39Zmun9kaxNUpChL55IoEHmLHF3EU8NRy28168>*
-
-*We will update the draft style to match other extension APIs once we've
-received more feedback.*
-
-Open questions
-*TBD* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/notifications-of-web-request-and-navigation/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/notifications-of-web-request-and-navigation/index.md
deleted file mode 100644
index 8cecae5b3a9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/notifications-of-web-request-and-navigation/index.md
+++ /dev/null
@@ -1,860 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: notifications-of-web-request-and-navigation
-title: Notifications of Web Request and Navigation
----
-
-## Overview
-
-This document describes the following API:
-
-* [chrome.webRequest](http://code.google.com/chrome/extensions/trunk/experimental.webRequest.html):
- Monitors events of HTTP requests.
-* [chrome.webNavigation](http://code.google.com/chrome/extensions/trunk/experimental.webNavigation.html):
- Monitors events of navigations happening in tab content windows as
- well as subframes (iframe / frame elements).
-
-## Use cases
-
-An API of detailed Web progress notifications can be used to log traffic data,
-measure browser performance, etc. Please note that this requirement has been
-listed in the [API Wish
-List](/developers/design-documents/extensions/apiwishlist) (the Network item).
-
-* Configure proxy for each request.
-* Modify headers (e.g. change User-Agent:).
-* Block requests to certain servers.
-* Log traffic data and measure performance.
-
-## Could this API be part of the web platform?
-
-To the best of my knowledge, it could not.
-
-## Do you expect this API to be fairly stable?
-
-I think the API will be fairly stable, since the way how HTTP works, as well as
-how the browser handles Web page navigations, is mature and stable. However, as
-described in the Open questions section, there may be some improvements in the
-future.
-
-## What UI does this API expose?
-
-The API doesn’t expose any UI.
-
-## How could this API be abused?
-
-There may be privacy issues since extensions can collect detailed information
-about network traffic via this API.
-
-## How would you implement your desired features if this API didn't exist?
-
-Without this API,
-
-* I probably cannot monitor HTTP requests.
-* To monitor Web navigation events, I would use chrome.tabs.onUpdated,
- chrome.{tabs,windows}.onCreated and inject content scripts to
- monitor subframe navigations. But there are still things I cannot
- know about, e.g., when a navigation is about to occur, accurate
- timestamp of events, transition type of a navigation, etc.
-
-## Draft API spec
-
-### Manifest
-
-In order to use chrome.webRequest or chrome.webNavigation, the "web_progress"
-permission has to be declared in the permissions section of the extension
-manifest.
-
-Moreover, if you would like to receive extra information along with
-chrome.webRequest.\* (please see the description of extraInfoSpec), you need to
-add hosts (or host match patterns) to the permissions section as well. You can
-only request extra information for URLs whose hosts are specified in the
-permissions section. For example:
-
-```none
-{
-    "name": "My extension",
-    ...
-    "permissions": [
-        "web_progress",
-        "http://www.google.com/"
-    ],
-    ...
-}
-// This isn’t allowed since it requests extra information for any URL.
-chrome.webRequest.onBeforeRequest.addListener(
-    function(object details) { ... }, null, ["requestHeaders"]);
-// This is allowed.
-chrome.webRequest.onBeforeRequest.addListener(
-    function(object details) { ... }, {urls: ["http://www.google.com/foo*bar"]},
-    ["requestHeaders"]);
-// This is allowed too, since it doesn’t request any extra information.
-chrome.webRequest.onBeforeRequest.addListener(
-    function(object details) { ... }, {urls: ["http://www.youtube.com/*"]});
-```
-
-### chrome.webRequest
-
-#### **Events**
-
-#### onBeforeRequest
-
-```none
-chrome.webRequest.onBeforeRequest.addListener(
-    function(object details) { ... }, RequestFilter filter,
-    array of string extraInfoSpec); 
-```
-
-Fires when a request is about to occur. This is sent before any TCP connection
-is made.
-
-**Parameters**
-
-***details (object)***
-
-> ***requestId (integer)***
-
-> > The ID of the request. Request IDs are unique within a browser session. As a
-> > result, they could be used to relate different events of the same request.
-
-> ***url (string)***
-
-> ***method (string)***
-
-> > Standard HTTP method.
-
-> ***tabId (integer)***
-
-> > The ID of the tab in which the request takes place. Set to null if the
-> > request isn’t related to a tab.
-
-> ***type (string)***
-
-> > Please refer to the request types below for detailed explanation.
-
-> ***timeStamp (Date)***
-
-> > The time when the browser was about to make the request.
-
-***filter (optional RequestFilter)***
-
-> Please refer to RequestFilter in the Types section for detailed explanation.
-
-***extraInfoSpec (optional array of string)***
-
-> Extra information that needs to be passed into the callback function. Each
-> element of extraInfoSpec requires a corresponding string property being added
-> to the details object. Array elements can be:
-
- * **"blocking"**
-
-**#### onBeforeSendHeaders**
-
-**```none
-chrome.webRequest.onBeforeSendHeaders.addListener(
-    function(object details) { ... }, RequestFilter filter,
-    array of string extraInfoSpec); 
-```**
-
-**Fires when an HTTP request is about to occur. This may occur after a TCP connection is made to the server, but before any HTTP data is sent. The HTTP request headers are available at this point.**
-
-****Parameters****
-
-*****details (object)*****
-
-> *****requestId (integer)*****
-
-> > **The ID of the request. Request IDs are unique within a browser session. As
-> > a result, they could be used to relate different events of the same
-> > request.**
-
-> *****url (string)*****
-
-> *****timeStamp (Date)*****
-
-> > **The time when the browser was about to make the request.**
-
-*****filter (optional RequestFilter)*****
-
-> **Please refer to RequestFilter in the Types section for detailed
-> explanation.**
-
-*****extraInfoSpec (optional array of string)*****
-
-> **Extra information that needs to be passed into the callback function. Each
-> element of extraInfoSpec requires a corresponding string property being added
-> to the details object. Array elements can be:**
-
- * ****"requestLine"****
- * ****"requestHeaders"****
- * ****"blocking"****
-
-#### onSendHeaders
-
-```none
-chrome.webRequest.onSendHeaders.addListener(
-    function(object details) { ... }, RequestFilter filter,
-    array of string extraInfoSpec);
-```
-
-Fires just before the headers are sent to the server (after all users of the
-webrequest api had a chance to modify the request in onBeforeSendHeaders).
-
-**Parameters**
-
-***details (object)***
-
-> ***requestId (integer)***
-
-> > The ID of the request.
-
-> ***url (string)***
-
-> ***timeStamp (Date)***
-
-> > The time when the browser finished sending the request.
-
-***filter (optional RequestFilter)***
-
-> Please refer to RequestFilter in the Types section for detailed explanation.
-
-***extraInfoSpec (optional array of string)***
-
-> Extra information that needs to be passed into the callback function. Each
-> element of extraInfoSpec requires a corresponding string property being added
-> to the details object. Array elements can be:
-
- * **"requestLine"**
- * **"requestHeaders"**
-
-#### onResponseStarted
-
-```none
-chrome.webRequest.onResponseStarted.addListener(
-    function(object details) { ... }, RequestFilter filter,
-    array of string extraInfoSpec);
-```
-
-Fires when the first byte of the response body is received. For HTTP requests,
-this means that the status line and response headers are available.
-
-**Parameters**
-
-***details (object)***
-
-> ***requestId (integer)***
-
-> > The ID of the request.
-
-> ***url (string)***
-
-> ***ip (string)***
-
-> > The server IP address that is actually connected to. Note that it may be a
-> > literal IPv6 address.
-
-> ***statusCode (integer)***
-
-> > Standard HTTP status code returned by the server.
-
-> ***timeStamp (Date)***
-
-> > The time when the status line and response headers were received.
-
-***filter (optional RequestFilter)***
-
-> Please refer to RequestFilter in the Types section for detailed explanation.
-
-***extraInfoSpec (optional array of string)***
-
-> Extra information that needs to be passed into the callback function. Each
-> element of extraInfoSpec requires a corresponding string property being added
-> to the details object. Array elements can be:
-
- * **"statusLine"**
- * **"responseHeaders"**
-
-#### onBeforeRedirect
-
-```none
-chrome.webRequest.onBeforeRedirect.addListener(
-    function(object details) { ... }, RequestFilter filter,
-    array of string extraInfoSpec); 
-```
-
-Fires when a server initiated redirect is about to occur.
-
-**Parameters**
-
-***details (object)***
-
-> ***requestId (integer)***
-
-> > The ID of the request.
-
-> ***url (string)***
-
-> > The URL of the current request.
-
-> ***ip (string)***
-
-> > The server IP address that is actually connected to. Note that it may be a
-> > literal IPv6 address.
-
-> ***statusCode (integer)***
-
-> > Standard HTTP status code returned by the server.
-
-> ***redirectUrl (string)***
-
-> > The new URL.
-
-> ***timeStamp (Date)***
-
-> > The time when the browser was about to make the redirect.
-
-***filter (optional RequestFilter)***
-
-> Please refer to RequestFilter in the Types section for detailed explanation.
-
-***extraInfoSpec (optional array of string)***
-
-> Extra information that needs to be passed into the callback function. Each
-> element of extraInfoSpec requires a corresponding string property being added
-> to the details object. Array elements can be:
-
- * **"statusLine"**
- * **"responseHeaders"**
-
-#### onCompleted
-
-```none
-chrome.webRequest.onCompleted.addListener(
-    function(object details) { ... }, RequestFilter filter,
-    array of string extraInfoSpec); 
-```
-
-Fires when a request is completed.
-
-**Parameters**
-
-***details (object)***
-
-> ***requestId (integer)***
-
-> > The ID of the request.
-
-> ***url (string)***
-
-> ***ip (string)***
-
-> > The server IP address that is actually connected to. Note that it may be a
-> > literal IPv6 address.
-
-> ***statusCode (integer)***
-
-> > Standard HTTP status code returned by the server.
-
-> ***timeStamp (Date)***
-
-> > The time when the response was received completely.
-
-***filter (optional RequestFilter)***
-
-> Please refer to RequestFilter in the Types section for detailed explanation.
-
-***extraInfoSpec (optional array of string)***
-
-> Extra information that needs to be passed into the callback function. Each
-> element of extraInfoSpec requires a corresponding string property being added
-> to the details object. Array elements can be:
-
- * **"statusLine"**
- * **"responseHeaders"**
-
-#### onErrorOccurred
-
-```none
-chrome.webRequest.onErrorOccurred.addListener(
-    function(object details) { ... }, RequestFilter filter);
-```
-
-Fires when an error occurs.
-
-**Parameters**
-
-***details (object)***
-
-> ***requestId (integer)***
-
-> > The ID of the request.
-
-> ***url (string)***
-
-> ***ip (string)***
-
-> > The server IP address that is actually connected to. Note that it may be a
-> > literal IPv6 address.
-
-> ***error (string)***
-
-> > The error description.
-
-> ***timeStamp (Date)***
-
-> > The time when the error occurred.
-
-***filter (optional RequestFilter)***
-
-> Please refer to RequestFilter in the Types section for detailed explanation.
-
-#### **Event order**
-
-For any successful request, events are fired in the following order:
-
-```none
-onBeforeRequest -> onBeforeSendHeaders[1] -> onSendHeaders ->
-    (onBeforeRedirect -> onBeforeRequest -> onBeforeSendHeaders[1] -> onSendHeaders ->)* ->
-    onResponseStarted -> onCompleted
-```
-
-\[1\] Note: onBeforeSendHeaders is only fired for HTTP requests. It will not be
-fired for e.g. file:/// URLs.
-
-The part enclosed in parentheses indicates that there may be zero or more server
-initiated redirects.
-
-Any error that occurs during the process results in an onErrorOccurred event.
-For a specific request, there is no further events fired after onErrorOccurred.
-
-### chrome.webNavigation
-
-#### **Events**
-
-#### onBeforeNavigate
-
-```none
-chrome.webNavigation.onBeforeNavigate.addListener(function(object details) { ... });
-```
-
-Fires when a navigation is about to occur.
-
-**Parameters**
-
-***details (object)***
-
-> ***tabId (integer)***
-
-> > The ID of the tab in which the navigation is about to occur.
-
-> ***url (string)***
-
-> ***frameId (integer)***
-
-> > 0 indicates the navigation happens in the tab content window; positive value
-> > indicates navigation in a subframe. Frame IDs are unique within a tab.
-
-> ***requestId (integer)***
-
-> > The ID of the request to retrieve the document of this navigation. Note that
-> > this event is fired prior to the corresponding
-> > chrome.webRequest.onBeforeRequest.
-
-> ***timeStamp (Date)***
-
-> > The time when the browser was about to start the navigation.
-
-#### onCommitted
-
-```none
-chrome.webNavigation.onCommitted.addListener(function(object details) { ... });
-```
-
-Fires when a navigation is committed. The document (and the resources it refers
-to, such as images and subframes) might still be downloading, but at least part
-of the document has been received from the server and the browser has decided to
-switch to the new document.
-
-**Parameters**
-
-***details (object)***
-
-> ***tabId (integer)***
-
-> > The ID of the tab in which the navigation occurs.
-
-> ***url (string)***
-
-> ***frameId (integer)***
-
-> > 0 indicates the navigation happens in the tab content window; positive value
-> > indicates navigation in a subframe.
-
-> ***transitionType (string)***
-
-> > Cause of the navigation. Use the same transition types as those defined for
-> > [chrome.history
-> > API](http://code.google.com/chrome/extensions/history.html#transition_types).
-
-> ***transitionQualifiers (string)***
-
-> Zero or more transition qualifiers delimited by "|". Please refer to the
-> qualifier values below for detailed explanation.
-
-> ***timeStamp (Date)***
-
-> > The time when the navigation was committed.
-
-#### onDOMContentLoaded
-
-```none
-chrome.webNavigation.onDOMContentLoaded.addListener(function(object details) { ... });
-```
-
-Fires when the page’s DOM is fully constructed, but the referenced resources may
-not finish loading.
-
-**Parameters**
-
-***details (object)***
-
-> ***tabId (integer)***
-
-> > The ID of the tab in which the navigation occurs.
-
-> ***url (string)***
-
-> ***frameId (integer)***
-
-> > 0 indicates the navigation happens in the tab content window; positive value
-> > indicates navigation in a subframe.
-
-> ***timeStamp (Date)***
-
-> > The time when the page’s DOM was fully constructed.
-
-#### onCompleted
-
-```none
-chrome.webNavigation.onCompleted.addListener(function(object details) { ... });
-```
-
-Fires when a document, including the resources it refers to, is completely
-loaded and initialized.
-
-**Parameters**
-
-***details (object)***
-
-> ***tabId (integer)***
-
-> > The ID of the tab in which the navigation occurs.
-
-> ***url (string)***
-
-> ***frameId (integer)***
-
-> > 0 indicates the navigation happens in the tab content window; positive value
-> > indicates navigation in a subframe.
-
-> ***timeStamp (Date)***
-
-> > The time when the document finished loading.
-
-#### onErrorOccurred
-
-```none
-chrome.webNavigation.onErrorOccurred.addListener(function(object details) { ... });
-```
-
-Fires when an error occurs.
-
-**Parameters**
-
-***details (object)***
-
-> ***tabId (integer)***
-
-> > The ID of the tab in which the navigation occurs.
-
-> ***url (string)***
-
-> ***frameId (integer)***
-
-> > 0 indicates the navigation happens in the tab content window; positive value
-> > indicates navigation in a subframe.
-
-> ***error (string)***
-
-> > The error description.
-
-> ***timeStamp (Date)***
-
-> > The time when the error occurred.
-
-#### onBeforeRetarget
-
-```none
-chrome.webNavigation.onBeforeRetarget.addListener(function(object details) { ... });
-```
-
-Fires when a new window, or a new tab in an existing window, is about to be
-created to host a navigation.
-
-**Parameters**
-
-***details (object)***
-
-> ***sourceTabId (integer)***
-
-> > The ID of the tab in which the navigation is triggered.
-
-> ***sourceUrl (string)***
-
-> > The URL of the document that is opening the new window.
-
-> ***targetUrl (string)***
-
-> > The URL to be opened in the new window.
-
-> ***timeStamp (Date)***
-
-> > The time when the browser was about to create a new view.
-
-#### **Event order**
-
-For a navigation that is successfully completed, events are fired in the
-following order:
-
-```none
-onBeforeNavigate -> onCommitted -> onDOMContentLoaded -> onCompleted 
-```
-
-Any error that occurs during the process results in an onErrorOccurred event.
-For a specific navigation, there is no further events fired after
-onErrorOccurred.
-
-Note that it is possible that a new navigation occurs in the same frame before
-the former navigation completes. As a result, even if a navigation proceeds
-successfully, the event sequence doesn’t necessarily end with an onCompleted.
-
-If a navigating frame contains subframes, its onCommitted is fired before any of
-its children’s onBeforeNavigate; while its onCompleted is fired after any of its
-children’s onCompleted.
-
-### Types
-
-#### Request types
-
-How the requested resource will be used.
-
-* **"main_frame"**: The resource is the document of a tab content
- window.
-* **"sub_frame"**: The resource is the document of a subframe (iframe
- or frame).
-* **"stylesheet"**: The resource is a CSS stylesheet.
-* **"script"**: The resource is an external script.
-* **"image"**: The resource is an image (jpg/gif/png/etc).
-* **"object"**: The resource is an object (or embed) tag for a plugin,
- or a resource that a plugin requested.
-* **"other"**: Other kinds of resource.
-
-#### Transition qualifier values
-
-Any transition type can be augmented by qualifiers, which further define the
-navigation.
-
-* **"client_redirect"**: Redirects caused by JavaScript or a meta
- refresh tag on the page.
-* **"server_redirect"**: Redirects sent from the server by HTTP
- headers.
-* **"forward_back"**: Users use Forward or Back button to navigate
- among browsing history.
-
-#### RequestFilter
-
-***(object)***
-
-> ***urls (optional array of string)***
-
-> > Each element is a URL or URL pattern. Please refer to [content script match
-> > patterns](http://code.google.com/chrome/extensions/dev/match_patterns.html)
-> > for URL pattern definition. Requests that cannot match any of the URLs will
-> > be filtered out.
-
-> ***types (optional array of string)***
-
-> > Each element is a request type described above. Requests that cannot match
-> > any of the types will be filtered out.
-
-> ***tabId (optional integer)***
-
-> > The ID of the tab in which requests takes place.
-
-> ***windowId (optional integer)***
-
-> > The ID of the window in which requests takes place.
-
-## Open questions
-
-### Accessing request and response bodies from extensions?
-
-We could support extensions to specify "requestBody" element in the
-extraInfoSpec array of chrome.webRequest.onBeforeRequest (or onRequestSent), so
-that an extra property, requestBody, will be added to the details object passed
-into the event handler. Similarly, we could support extensions to ask for
-responseBody, too.
-
-Both requestBody and responseBody are EntityBody objects.
-
-#### EntityBody
-
-#### **Methods**
-
-```none
-readBytes(integer length, boolean wait, function callback) 
-```
-
-**Parameters**
-
-***length (integer)***
-
-> How many bytes to read.
-
-***wait (boolean)***
-
-> If wait is set to false, the browser will respond as soon as possible,
-> returning the bytes it has got currently; otherwise, it won’t invoke the
-> callback function until it collects enough bytes or reaches the end of the
-> entity body.
-
-***callback (function)***
-
-**Callback function**
-
-It should specify a function that looks like this:
-
-```none
-function (integer actualLength, string base64EncodedData)
-```
-
-***actualLength (integer)***
-
-> The actual number of bytes that are returned. -1 indicates the end of the
-> entity body has been reached or error occurred. Please note that 0 doesn’t
-> indicate the end of the entity body, if the wait parameter of readBytes() is
-> set to false.
-
-***base64EncodedData (string)***
-
-> Base64 encoded bytes. Please note that normally the string length of
-> base64EncodedData is different from actualLength.
-
-Some issues need to be considered:
-
-* An important issue is how to manage the lifetime of request bodies
- and response bodies properly.
-
-Please consider the following scenario: an extension requests responseBody to be
-passed into the handler of chrome.webRequest.onCompleted. In the handler, it
-calls responseBody.readBytes() to read the content. However, since events are
-asynchronous, the browser fires onCompleted and proceeds immediately. If it
-finishes using the response body and discards it, the call of
-responseBody.readBytes() at the extension side may fail, depending on the
-timing. This is undesired.
-As a result, the browser has to properly manage the lifetime of request bodies
-and response bodies. One possible approach is to keep track of references to
-each EntityBody object (either requestBody or responseBody). An entity body
-maybe be accessed by several EntityBody objects, which are passed to different
-extensions. If all these EntityBody objects are no longer referenced, the
-browser knows that the entity body is no long needed by any extension, and it is
-safe to remove it.
-
-* It may be inconvenient to use an EntityBody object directly. We
- could also provide helper classes. For example, define
- TextEntityBody class to convert entity body to a text stream:
-
-```none
-// entityBody is an EntityBody object, which deals with bytes.
-var textEntityBody = new TextEntityBody(entityBody, ‘UTF-8’);
-// textEntityBody calls entityBody.readBytes() and converts the result to text.
-textEntityBody.readText(10, true, function (text, reachEnd) {
-  // Handle text directly.
-});
-```
-
-### Synchronous (blocking) notifications?
-
-The API proposed above is supposed to be asynchronous (non-blocking)
-notifications. This is consistent with other chrome.\* APIs. More importantly,
-notification publishers / consumers live in different processes. If we block the
-publisher side for sending each notifications, it may hurt browser performance.
-
-However, in some cases we would like to affect the control flow in event
-handlers. (Please note that this has been listed as a requirement on the [API
-Wish List](/developers/design-documents/extensions/apiwishlist), the Navigation
-Interception item.)
-
-Consider the following use case: in the callback function of
-chrome.webRequest.onBeforeRequest we may want to cancel the request or modify
-the request headers. If the notification is asynchronous, the browser fires the
-notification and immediately makes the request. There is no way for extensions
-to make a change.
-
-One possible solution is to design some functions like "installSyncOnXyzHandler"
-that installs a short snippet of JavaScript to run synchronously within the
-browser process for the notifications that may need synchronous responses.
-However, this may not fit with the overall Chrome architecture where we want to
-avoid running javascript in the browser process; and the JavaScript snippet in
-the browser process might need to communicate back to the extension for some of
-its decisions as well.
-
-Another feasible solution is to add support for browser to wait for a response
-from an extension. Take chrome.webRequest.onBeforeRequest as an example, we
-could reform it the extraInfoSpec parameter to accept an optional string
-**"blocking".** If present, then the browser needs to be blocked and wait for a
-response from the callback function.
-
-If blocking is present, the callback function could optionally return an object
-to cancel or modify the request:
-
-**result (optional object)**
-
-> ***requestLine (optional string)***
-
-> > Modified request line.
-
-> ***reqeustHeaders (optional string)***
-
-> > Modified request headers.
-
-> ***cancel (optional boolean)***
-
-> > Set to true to cancel the request.
-
-> ***redirectUrl (optional string)***
-
-> > Redirects the request to a different URL (only available in onBeforeRequest
-> > and onBeforeRedirect).
-
-The biggest concern is the impact on browser performance. We have to measure the
-performance impact very carefully if we really want to make the move.
-
-## References
-
-* [DWebBrowserEvents2 Interface of
- IE](http://msdn.microsoft.com/en-us/library/aa768283%28VS.85%29.aspx)
-* [WinINet Status
- Callback](http://msdn.microsoft.com/en-us/library/aa385121%28v=VS.85%29.aspx)
-* [nsIWebProgressListener Interface of
- Firefox](https://developer.mozilla.org/en/nsIWebProgressListener) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/book_screenshot.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/book_screenshot.png.sha1
deleted file mode 100644
index bf65a6ccc99..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/book_screenshot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b45b3fe4ea234324c5d639063ae98f959ea40f06 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/coverflow_screenshot.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/coverflow_screenshot.png.sha1
deleted file mode 100644
index 293633ca912..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/coverflow_screenshot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-673de30aa21afdf423ecc94ad14b105857eaedfa \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/index.md
deleted file mode 100644
index a3a96e86d00..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/index.md
+++ /dev/null
@@ -1,256 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: offscreen-tabs
-title: Offscreen Tabs (experimental)
----
-
-[TOC]
-
-## Introduction
-
-The chrome.experimental.offscreenTabs.\* API module allows for interacting with
-multiple web pages on the screen at the same time. Example applications might
-look like the [Safari’s “Top
-Sites”](http://decoding.files.wordpress.com/2009/02/safari_40_beta_1.jpg) or
-[Chrome’s “Most
-Visited”](http://www.revthatup.com/wp-content/uploads/2011/04/chrome.jpg) page
-augmented with real-time display updates and user interaction. In combination
-with WebGL and its texture API capabilities the offscreen tabs module could be
-used to create true 3D browser environments on the web!
-
-### Display
-
-The real-time display could be achieved by updating standard HTML &lt;img&gt; or
-&lt;canvas&gt; elements while capturing snapshots of offscreen tabs with the
-***toDataUrl*** method.
-
-### Interaction
-
-For interaction, we propose the ***sendMouse*** and ***sendKeyboard*** methods.
-These methods could pass standard JavaScript mouse and keyboard events along
-with the offscreen tab ID specifying the offscreen tab these events should be
-applied to. In the case of mouse events appropriate x and y coordinates should
-be passed as well. Why? Because when an application or extension is responsible
-for rendering an offscreen tab's contents, only that application knows exactly
-where a click against the tab's canvas is supposed to be dispatched. Once Chrome
-picks up the JavaScript events new synthesized events will be sent to the
-appropriate offscreen tab. Most of the fields of the synthesized events will be
-the same as the ones of the incoming JavaScript events. One exception, for
-example, are the x and y coordinates for mouse events as explained above.
-
-### Window Size
-
-Since the offscreen tabs will not be displayed by the browser in separate tabs
-the developer has to explicitly specify width and height of each offscreen tab's
-window.
-
-## Manifest
-
-The module requires the specification of an *offscreenTabs* permission type.
-This permission would enable the API to see all web sites' user data. The
-developer will have to declare the *offscreenTabs* permission in the [extension
-manifest](http://code.google.com/chrome/extensions/manifest.html). For example:
-**{**
-**"name": "My extension",**
-**...**
-**"permissions": \[**
-**"offscreenTabs"**
-**\],**
-**...**
-**}**
-
-## Example Extensions
-
-Above you can see a video of a Chrome extension we have developed with the
-Offscreen Tab API and WebGL. Here are some additional screenshots:
-
-[<img alt="image"
-src="/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/book_screenshot.png"
-height=220
-width=400>](/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/book_screenshot.png)
-
-[<img alt="image"
-src="/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/coverflow_screenshot.png"
-height=211
-width=400>](/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/coverflow_screenshot.png)
-
-## **Design Review Slides**
-
-[Slides from API design
-review](https://docs.google.com/a/chromium.org/present/edit?id=dcz7497p_9gzwfsfgs)
-
-## Spec (outdated)
-
-Note: the information below is outdated. The current API is in the process of
-being checked in [here](http://codereview.chromium.org/7720002/).
-
-### Types
-
-#### OffscreenTab
-
-***id (int)***
-The ID of the offscreen tab. Tab IDs are unique within a browser session.
-***url (string)***
-The URL the offscreen tab is displaying.
-***width (int)***
-Width of the window.
-***height (int)***
-Height of the window.
-
-### Methods
-
-#### create
-
-create (object createProperties, function callback)
-Creates a new offscreen tab.
-**Parameters**
-**createProperties (object)**
-***url (string)***
-The URL the offscreen tab should be displaying.
-***width (optional int)***
-Width of the visible window. Defaults to width of the current window.
-***height (****optional** **int)***
-Height of the visible window. Defaults to height of the current window.
-***callback (****optional** **function)***
-The callback parameter should specify a function that looks like this:
-function (OffscreenTab offscreenTab) {...};
-Details of the offscreen tab.
-
-#### get
-
-get (int offscreenTabId, function callback)
-Gets details about the specified offscreen tabs.
-**Parameters**
-*offscreenTabId (int)***
-ID of the offscreen tab.
-***callback (function)***
-The callback parameter should specify a function that looks like this:
-function (OffscreenTab offscreenTab) {...};
-Details of the offscreen tab.
-
-#### getAll
-
-getAll (function callback)
-Gets an array of all offscreen tabs.
-**Parameters**
-***callback (function)***
-The callback parameter should specify a function that looks like this:
-function (array of OffscreenTab offscreenTabs) {...};
-
-#### remove
-
-remove (int offscreenTabId, function callback)
-Removes an offscreen tab.
-**Parameters**
-***offscreenTabId (int)***
-ID of the offscreen tab.
-***callback (****optional** **function)***
-The callback parameter should specify a function that looks like this:
-function () {...};
-
-#### sendMouseEvent
-
-sendMouseEvent (int offscreenTabId, int x, int y, MouseEvent mouseEvent,
-function callback)
-Dispatches a mouse event in the offscreen tab.
-**Parameters**
-***offscreenTabId (int)***
-ID of the offscreen tab.
-***mouseEvent (MouseEvent)***
-A JavaScript MouseEvent object. Supported event types: *mousedown*, *mouseup*,
-*click*, *mousemove*, *mousewheel*.
-***x (****optional*** ***int)***
-X position of where the mouse event should be dispatched on the offscreen web
-page. Not required in the case of a *mousewheel* event.
-***y (****optional*** ***int)***
-Y position of where the mouse event should be dispatched on the offscreen web
-page. Not required in the case of a *mousewheel* event.
-***callback (****optional** **function)***
-The callback parameter should specify a function that looks like this:
-function (OffscreenTab offscreenTab) {...};
-Details of the offscreen tab.
-
-#### sendKeyboardEvent
-
-sendKeyboardEvent (int offscreenTabId, KeyboardEvent event, function callback)
-Dispatches a keyboard event in the offscreen tab.
-**Parameters**
-***offscreenTabId (int)***
-ID of the offscreen tab.
-***keyboardEvent (KeyboardEvent)***
-A JavaScript KeyboardEvent object. Supported event types: *keydown*, *keyup*,
-*keypress*. Only *keypress* produces a visible result on screen.
-***callback (****optional** **function)***
-The callback parameter should specify a function that looks like this:
-function (OffscreenTab offscreenTab) {...};
-Details of the offscreen tab.
-
-#### toDataUrl
-
-toDataUrl (int offscreenTabId, object options, function callback)
-Captures the visible area of an offscreen tab.
-**Parameters**
-***offscreenTabId (int)***
-The ID of the offscreen tab.
-***options (****optional** **object)***
-Set parameters of image capture, such as the format of the resulting image.
-***format (****optional** **enumerated string \[“jpeg”, “png”\])***
-The format of the resulting image. Default is jpeg.
-***quality (****optional** **int)***
-When format is 'jpeg', controls the quality of the resulting image. This value
-is ignored for PNG images. As quality is decreased, the resulting image will
-have more visual artifacts, and the number of bytes needed to store it will
-decrease.
-***callback (****function)***
-The callback parameter should specify a function that looks like this:
-function (string dataUrl) {...};
-***dataUrl (string)***
-A data URL which encodes an image of the visible area of the captured offscreen
-tab. May be assigned to the 'src' property of an HTML Image element for display.
-
-#### update
-
-update (int offscreenTabId, object updateProperties, function callback)
-Modifies the properties of an offscreen tab. Properties that are not specified
-in updateProperties are not modified.
-**Parameters**
-***offscreenTabId (int)***
-The ID of the offscreen tab.
-***updateProperties (object)***
-***url (****optional** **string)***
-The URL the offscreen tab is displaying.
-***width (****optional** **int)***
-Width of the window.
-***height (****optional** **int)***
-Height of the window.
-***callback (****optional** **function)***
-The callback parameter should specify a function that looks like this:
-function (OffscreenTab offscreenTab) {...};
-Details of the offscreen tab.
-
-### Events
-
-#### onUpdated
-
-onUpdated.addListener (function (int offscreenTabId, object chnageInfo,
-OffscreenTab offscreenTab) {...})
-Fires when an offscreen tab is updated.
-**Parameters**
-***offscreenTabId (int)***
-ID of the updated offscreen tab
-***changeInfo (object)***
-Lists the changes to the state of the offscreen tab that was updated.
-***url (****optional** **string)***
-The offscreen tab’s URL if it has changed.
-***offscreenTab (OffscreenTab)***
-Details of the offscreen tab \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/screenshot.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/screenshot.png.sha1
deleted file mode 100644
index fbc21430fd5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs/screenshot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0f128585f1224f75bfa6e012b01403e4cecf5345 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/omnibox-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/omnibox-api/index.md
deleted file mode 100644
index 6b519d3d7f4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/omnibox-api/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: omnibox-api
-title: Omnibox API
----
-
-### Status
-
-Dream phase. The underlying omnibox API is fairly complex. This is a work in
-progress, and likely incomplete / missing key bits.
-
-### Overview
-
-There are two goals for the omnibox extension API:
-
-1. Register a keyword that would allow the extension author to provide
- simple command hooks.
-2. Be a full omnibox provider, with autocomplete matches.
-
-### API
-
-omnibox.
-
-// The simple way:
-
-// keyword-based (tab to search?) API. Perhaps usable to implement a basic
-command-line interface.
-
-// Register a keyword for handling in this extension.
-
-void registerKeyword(string keyword)
-
-// Called when the user enters text after using this extension's registered
-keywords.
-
-event onKeywordInput(string input)
-
-// The hard way:
-
-// Be a full-on omnibox provider.
-
-// Notifies Omnibox that matches are ready, and provides them for browser-side
-
-// use when the Omnibox wants them.
-
-void matchesAvailable(Match\[\] matches)
-
-// Called by the Omnibox when the text in the box has been changed.
-
-// TODO: AutocompleteInput has a lot more info than this
-
-event onInputChanged(string input)
-
-// The user has requested that this match never show up in results again.
-
-event onMatchDeleted(Match match)
-
-struct Match {
-
-int relevance
-
-bool deletable
-
-string fill_into_edit
-
-int inline_autocomplete_offset
-
-string destination_url
-
-string contents
-
-// missing content class
-
-string description
-
-// missing description class
-
-} \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/Screen shot 2011-10-06 at 3.47.53 PM.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/Screen shot 2011-10-06 at 3.47.53 PM.png.sha1
deleted file mode 100644
index 65b3c359af0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/Screen shot 2011-10-06 at 3.47.53 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ace727e5e3a0630ebb1c9273cfa3b96bcf5e21b9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/index.md
deleted file mode 100644
index 1834706101c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: panels
-title: Panels
----
-
-**Overview**
-
-Panels are windows that are visible to the user even while the user is
-interacting with other applications. The small windows are positioned at the
-bottom of the screen, with minimal manual window management by the user. This
-API will allow extension developers to create and use panels.
-
-[<img alt="image"
-src="/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/Screen%20shot%202011-10-06%20at%203.47.53%20PM.png">](/developers/design-documents/extensions/proposed-changes/apis-under-development/panels/Screen%20shot%202011-10-06%20at%203.47.53%20PM.png)
-
-**Use cases**
-
-An extension opens small "pop up" windows, for example, separate chat sessions,
-calculator, media player, stock/sport/news ticker, task list, scratchpad, that
-the user wants to keep visible while using a different application or browsing a
-different web site. Scattered "pop up" windows are difficult for the user to
-keep track of, therefore panels are placed along the bottom of the screen and
-are "always on top".
-
-The user would like easy control of chat windows: finding them, moving them out
-of the way, etc. Window management of separate chat "pop ups" is time consuming.
-All panels can be minimized/maximized together.
-
-**Could this API be part of the web platform?**
-
-Eventually, yes. The current needs are from extension developers. If we figure
-out how to make this work in the wider context of web platform, we will propose
-it for the web platform at that point.
-
-**Do you expect this API to be fairly stable?**
-
-Yes.
-
-**What UI does this API expose?**
-
-Panels will be a new type of window with some unique behaviors and UI.
-
-**How could this API be abused?**
-
-An extension could open an excessive number of panels, repeatedly open and close
-panels, or unnecessarily draw the user's attention to a panel.
-
-**How would you implement your desired features if this API didn't exist?**
-
-Extensions could continue to use "pop up" windows and let users manually arrange
-them on their screen such that they will not be obscured by other applications.
-Users would manage each "pop up" individually.
-
-**Are you willing and able to develop and maintain this API?**
-
-Yes.
-
-**API spec**
-
-Extend the chrome.windows.\* API to add a new "panel" type, as Panels are simply
-another type of window.
-
-chrome.windows.create with type="panel" will create a new Panel window. Unlike
-other window types, Panels do not take focus by default. The focused attribute
-can be used to change the default behavior.
-
-chrome.windows.update has a new drawAttention option to attract the user's
-attention to a Panel. This API can be used for all window types. The behavior to
-attract the user's attention will vary depending on window type and OS.
-
-All other actions on the panel can be achieved via manipulations on the
-DOMWindow or the window contents, e.g. change the size of the div containing all
-window content to resize the panel.
-
-Panels are regular windows as far as other extensions \[that did not create the
-panel\] are concerned and are included in all other windows-related API, e.g.
-chrome.windows.getAll, chrome.extensions.getViews. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/power-management-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/power-management-api/index.md
deleted file mode 100644
index b23ee188bb7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/power-management-api/index.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: power-management-api
-title: Power Management API
----
-
-**Proposal Date**
-
-2013-03-11
-Who is the primary contact for this API?
-derat@
-Who will be responsible for this API?
-
-The Chrome OS UI team.
-
-Overview
-This API is intended to provide a way for extensions and apps to temporarily
-disable aspects of system power management on Chrome OS. It is a modified
-version of [an earlier proposed API](/system/errors/NodeNotFound) (see also
-[additional implementation
-details](https://docs.google.com/a/google.com/document/d/1CrZJRH5Eoh8A_6o8PwERzVSDSwEr2DDOOn14gekVCb0/edit#)).
-Use cases
-When the user is inactive, Chrome OS dims the screen, turns it off, and
-eventually suspends the system. It attempts to avoid some or all of these
-actions when the user is watching video or listening to audio. Some apps may
-wish to trigger similar behavior on their own; imagine e-book or presentation
-apps that need to prevent the screen from being dimmed or turned off, or a
-communication app that needs to prevent the system from suspending so that
-incoming calls may be received.
-Do you know anyone else, internal or external, that is also interested in this
-API?
-Yes, there is an internal need for this API (<http://crbug.com/178944>).
-External users have requested the ability to e.g. disable power management
-entirely on desktop machines; this API makes it possible to write a simple
-extension that does so.
-Could this API be part of the web platform?
-Likely, although the level of control over system power management available to
-Chrome may vary between different OSes.
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-Yes, it should be stable. I don't foresee any need to add additional levels of
-power-management-disabling.
-
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-Requests will be tracked per-extension. Since requests are additive, conflicts
-should not be possible.
-List every UI surface belonging to or potentially affected by your API:
-No UI changes are planned.
-**Actions taken with extension APIs should be obviously attributable to an
-extension. Will users be able to tell when this new API is being used? How?**
-
-This isn't currently planned. It would be possible to add UI that notifies the
-user when an extension creates a request, though.
-
-How could this API be abused?
-Extensions could use this API to disable power management features indefinitely.
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-1) Disable power management features indefinitely while the extension is
-running, increasing power consumption, decreasing battery life, and possibly
-confusing the user.
-2) N/A
-3) N/A
-What security UI or other mitigations do you propose to limit evilness made
-possible by this new API?
-Extensions will only be able to override power management while the system's lid
-is open; closing the lid will still suspend the system.
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-**No. Any outstanding requests will be abandoned when an extension is stopped.
-How would you implement your desired features if this API didn't exist?
-An extension could perform actions that trigger Chrome OS's existing automated
-power-management-disabling behavior. For example, playing a silent audio file
-would prevent the system from suspending.
-Draft API spec
-
-*Manifest changes*
-
-**power** permission
-
-> A new permission that is required in order to call this API's methods.
-
-***Methods***
-
-**requestKeepAwake**
-
-> Registers a request to disable power management. Each extension may hold at
-> most one request; when multiple sequential calls are made, only the final one
-> will be honored. When an extension is unloaded, its request will be
-> automatically released.
-
-> **Parameter:**
-
-> *level (enum \["system", "display"\])*
-
-> > Specifies the degree to which power management should be disabled.
-
-> > "system": The system will not suspend due to user inactivity, but the screen
-> > may still be dimmed or turned off.
-
-> > "display": The screen will not be dimmed or turned off due to user
-> > inactivity. Additionally, the system will not suspend due to user
-> > inactivity. If the screen is currently dimmed or turned off due to
-> > inactivity, it will be turned on immediately.
-
-**releaseKeepAwake**
-
-> Unregisters an outstanding request to disable power management. Does nothing
-> if no request exists. Previously-deferred power-management-related actions may
-> be performed immediately.
-
-> **Parameters**
-
-> *none*
-
-Open questions
-
-1. ~~Can the API initially be Chrome-OS-only?~~ This probably won't be
- an issue; content::PowerSaveBlocker should provide cross-platform
- support.
-2. ~~Should a "power" permission be added to the manifest specification
- or should extensions be able to use this API unconditionally?~~ Yes;
- added.
-3. ~~Can the *callback* parameter be omitted from both methods?~~ Yes;
- removed.
-4. ~~The initial implementation of this API never made it out of
- experimental, although [an extension which uses
- it](https://chrome.google.com/webstore/detail/keep-awake-extension/bijihlabcfdnabacffofojgmehjdielb/reviews?hl=en)
- was published. Can the new version of the API use the same method
- names?~~ Yes. I'm updating the existing extension to use the
- chrome.power API if it's present and chrome.experimental.power
- otherwise. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/preference-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/preference-api/index.md
deleted file mode 100644
index 322f075652a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/preference-api/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: preference-api
-title: Preferences API
----
-
-### Overview
-
-The preferences API allows you to manipulate the browser preferences, such as
-the accept languages, URLs to restore on startup etc. For the full list of
-preferences, please refer to chrome/common/pref_names.cc. (Note: since the first
-version will only implement the access of accept languages, this document will
-focus on accept languages below.)
-
-### Use cases
-
-It allows extensions to read and write the browser preferences. Given accept
-languages as an example, page translation extension and dictionary extension
-will need to get the accept languages from the browser and use them as the
-targeted languages for page or word translation.
-
-### Could this API be part of the web platform?
-
-Given accept languages as an example, read accept languages could be part of the
-web platform, it could be exposed by window.navigator.acceptLanguages while UI
-language is exposed through widow.navigator.language. But we would also like to
-be able to modify accept languages preferences as well by extension, for
-example, it'd be nice if we could "learn" the accept-languages through
-translate, such as if you decline to translate a French page, that would be a
-good signal that you want it added to the accept-languages.
-
-### Do you expect this API to be fairly stable?
-
-Yes*.*
-
-### What UI does this API expose?
-
-None*.*
-
-### How could this API be abused?
-
-Read accept languages should be OK.
-
-### Are you willing and able to develop and maintain this API?
-
-Yes*.*
-
-### Draft API spec
-
-## chrome.preferences.
-
-## void getAcceptLanguages(void callback(String acceptLanguages))
-
-## void setAcceptLanguages(Value newAcceptLanguages)
-
-## void appendAcceptLanguage(Value acceptLanguage)
-
-### Notes
-
-The first version will only implement the access of accept languages.
-
-### Issues
-
-* Where should the accept-languages API live:
- chrome.preferences.acceptLanguages? or chrome.i18n.acceptLanguages?
-* Any issues with modifying the browser's accept languages through
- extension API? \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/privacy/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/privacy/index.md
deleted file mode 100644
index 6c615aa40dc..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/privacy/index.md
+++ /dev/null
@@ -1,163 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: privacy
-title: Privacy-relevant Preferences API
----
-
-****Overview****
-
-**Chromium includes a variety of features that provide valuable services to users either by making requests on their behalf (DNS Prefetching, for example), or by sending non-personal information to third-parties (Omnibox suggestions, for example). While we firmly believe that these services offer a huge net benefit, we also want to fully support users who choose not to take part. Users can opt-out (or opt-in, depending) to each, either via chrome://flags or chrome://settings; extensions should have programmatic access to these preferences to offer choices to users in forms that Chromium chooses not to.**
-**Use cases**
-**Every feature that’s listed in the[ privacy whitepaper](http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en/us/intl/en/landing/chrome/google-chrome-privacy-whitepaper.pdf) is relevant to extensions that want to offer privacy protections for users above and beyond what is reasonable for Chromium to offer as a default to everyone. Extensions like Tor have expressed interest in programmatically disabling DNS prefetching (and prerendering, et al.), and it would be valuable for everyone concerned if respected advocates such as the EFF could build “EFF-approved“ default settings that users could choose to install via an extension.**
-**Relatedly, but closer to home, reworking the whitepaper itself into an application from which users could directly toggle preferences without digging through preferences pages would be valuable.**
-**Could this API be part of the web platform?**
-**These preferences don’t relate to anything like the web platform’s storage options, but instead how Chromium interprets, requests, and processes content on the web. These options are clearly Chromium-specific, and not generally applicable to specific websites (nor would we want to offer any website the ability to, for example, toggle UMA settings).**
-**Do you expect this API to be fairly stable?**
-**These preferences map fairly directly to the services and features the browser offers, which means that the API would only shift in relation to changes in browser-functionality. As it is by necessity browser-specific, that seems reasonable in terms of stability.**
-**What UI does this API expose?**
-**None. The preferences are already exposed via chrome://settings and chrome://flags, this proposal simply adds a programmatic interface.**
-**How could this API be abused?**
-**Malicious extensions could send Omnibox keystrokes and other such data to a third-party server by tricking the user into changing her default search engine, and toggling the relevant preferences for Suggest. Likewise, they could force loading of arbitrary sites by doing the same, and enabling Instant.**
-**How would you implement your desired features if this API didn't exist?**
-**Individual users would be pointed to the various bits of UI where these settings exist (preferences and flags), and asked to toggle settings manually. This is, for example, what the Chrome privacy whitepaper does right now.**
-**Are you willing and able to develop and maintain this API?**
-**Yes.**
-**Draft API spec**
-**TODO.**
-**This API could be provided in two ways (possibly together).**
-**Option 1**
-**Chromium already provides APIs related to subsets of the “Clear Browsing Data” form’s functionality. Adding methods to each of those seems like a reasonable way of addressing the request. We call pretty much everything cookies, so adding chrome.cookies.clear might look like the following:**
-**{**
-**"namespace": "cookies",**
-**…**
-**"functions": \[**
-**…**
-**{**
-**"name": "clear",**
-**"description": "Clears cookies and other site data modified within a time period.",**
-**"type": "function",**
-**"parameters": \[**
-**{**
-**"name": "timePeriod",**
-**"type": "string",**
-**"enum": \["last_hour", "last_day", "last_week", "last_month", "everything"\],**
-**"optional": "false",**
-**"description": "The time period inside which to delete cookies and site data."**
-**},**
-**{**
-**"name": "callback",**
-**"type": "function",**
-**"description": "Called when deletion has completed.",**
-**"optional": "true",**
-**"parameters": \[**
-**{**
-**"name": "result",**
-**"type": "boolean",**
-**"description": "Was the data deletion successful?"**
-**}**
-**\]**
-**}**
-**\]**
-**},**
-**…**
-**\],**
-**…**
-**}**
-**chrome.cookies and chrome.history seem like excellent candidates for these sorts of methods. The history namespace could probably be overloaded to include methods to clear the browser cache, downloaded files, stored passwords, and Autofill data (since it’s all arguably historical in nature).**
-**It would be valuable, however, to distinguish the namespace from the permission required to execute the methods. Extensions focused on removing data (see the use-cases above) shouldn’t be required to request read access to cookies on a variety of hosts in order to clear them. Adding an explicit removeBrowsingData permission that would grant access to the relevant methods across namespaces would be valuable (cookies should grant the same access, but only to the cookies-specific chrome.cookies.clear).**
-**Option 2**
-**A drawback to the option above is that clearing all browsing data requires many (expensive) executions of BrowsingDataRemover::Remove. Providing a single method that encapsulated all the options in a single call would be much more efficient. That might look like the following:**
-**{**
-**"namespace": "experimental.browsingData",**
-**"functions": \[**
-**{**
-**"name": "clear",**
-**"description": "Clears data generated by browsing within a particular timeframe.",**
-**"type": "function",**
-**"parameters": \[**
-**{**
-**"name": "timePeriod",**
-**"type": "string",**
-**"enum": \["last_hour", "last_day", "last_week", "last_month", "everything"\],**
-**"optional": "false",**
-**"description": "The timeframe inside of which to delete browsing data.”**
-**},**
-**{**
-**"name": "dataToRemove",**
-**"type": "object",**
-**"optional": "false",**
-**"properties": {**
-**"cache": {**
-**"type": "boolean",**
-**"optional": true,**
-**"description": "Should the browser cache be cleared?"**
-**},**
-**"cookies": {**
-**"type": "boolean",**
-**"optional": true,**
-**"description": "Should the browser's cookies be cleared?"**
-**},**
-**"downloads": {**
-**"type": "boolean",**
-**"optional": true,**
-**"description": "Should the browser's download list be cleared?"**
-**},**
-**"form_data": {**
-**"type": "boolean",**
-**"optional": true,**
-**"description": "Should stored form data be cleared?"**
-**},**
-**"history": {**
-**"type": "boolean",**
-**"optional": true,**
-**"description": "Should the browser's history be cleared?"**
-**},**
-**"lso_data": {**
-**"type": "boolean",**
-**"optional": true,**
-**"description": "Should LSO data be cleared?"**
-**},**
-**"passwords": {**
-**"type": "boolean",**
-**"optional": true,**
-**"description": "Should the stored passwords be cleared?"**
-**}**
-**}**
-**},**
-**{**
-**"name": "callback",**
-**"type": "function",**
-**"description": "Called when deletion has completed.",**
-**"optional": "true",**
-**"parameters": \[**
-**{**
-**"name": "result",**
-**"type": "boolean",**
-**"description": "Was the data deletion successful?"**
-**}**
-**\]**
-**}**
-**\]**
-**}**
-**\]**
-**}**
-**Open questions**
-
-1. **BrowsingDataRemover offers the option of clearing browsing
- history, download history, clearing the cache, deleting cookies +
- site + plug-in data, clearing saved passwords, and clearing Autofill
- data. Homes should be found for programmatic methods that clear each
- type of data.**
-2. **Should we offer a separate namespace for clearing browsing data?
- If so, are there other delete-only methods that would make sense to
- include in such a namespace?** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/index.md
deleted file mode 100644
index fa474c3e9e5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/index.md
+++ /dev/null
@@ -1,297 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: processes-api
-title: Process Model API
----
-
-**Proposal Date**
-**02/24/2012**
-**Who is the primary contact for this API?**
-**Nasko Oskov (nasko@chromium.org), Charlie Reis (creis@chromium.org)**
-**Who will be responsible for this API? (Team please, not an individual)**
-
-**Site Isolation**
-
-Overview**
-Add chrome.processes API that lets extensions access data about the Chrome’s
-process model, such as process ID and CPU usage.**
-
-Use cases
-Web applications are becoming more complex and resource demanding, and power
-users may want a better view of which pages are responsible for resource use. It
-may also be useful as a debugging or diagnosis tool, to see which tabs are
-currently sharing fate. Here are a few types of extensions that could use this
-API:
-
-* A Browser Action showing all tabs sharing the current process. All
- of these tabs would slow down or crash together if something went
- wrong.<img alt="image"
- src="https://lh5.googleusercontent.com/KnOBPV-gjd9L3rQLK966uNUTnsow-9mikKEj049XGuwTJf6UHxe3NXigKywxKyPuPvXEFoe71Vlxn9gDNE2vGTqpK5ffMjx7YmDCXlmVMqPzwR1TThw"
- height=189px; width=500px;>
-* A Browser Action showing the current CPU or memory use of the tab's
- process with a utilization graph, much like the Windows Task Manager
- icon in the system tray.
-* An extension that automatically restores all affected tabs if a
- process crashes, unless the crash repeats itself (much like IE8).
-* An extension that implements a custom task manager, perhaps with
- graphs or other visualizations.
-
-Do you know anyone else, internal or external, that is also interested in this
-API?
-Chris Bentzel and Erik Kay have expressed interest in using this API to
-prototype different policies for process management (such as killing prerender
-processes). Patrick Stinson [has expressed
-interest](http://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/e5f0963407ccfb4d/c7bdd506c06646eb)
-in creating a custom “Aw-snap” screen to use in kiosk scenarios and reload the
-current URL.
-Could this API be part of the web platform?
-Unlikely, because it is mainly useful in multi-process browser architectures.
-While an increasing number of browsers are moving toward such architectures,
-it's certainly not a requirement for all web browsers. It also could expose
-functionality specific to the Chromium process model in the future.
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-**Yes. The API will expose functionality that is already present in the Task Manager and unlikely to disappear in the future.**
-**The initial version of the API will not include memory details other than the
-private memory for the process. The reason is the complexity of adding memory
-usage information, which needs to be retrieved in asynchronous model (through a
-MemoryDetails object). In addition, for getting the overall memory usage of the
-browser, we need platform specific logic for calculating the data. The goal is
-to release an initial version to allow feedback on the API and its usage, with a
-follow up update adding the extra information.**
-List every UI surface belonging to or potentially affected by your API:
-The API will not affect UI surface. It will expose internal browser data to
-extensions, which can author their own UI based on the data.
-How could this API be abused?
-Like most extension APIs, it could be used to leak information about the user's
-browsing habits, such as the number of processes running or CPU usage patterns.
-It could also be used to load attack pages in the same process as another page,
-but that can already be done without this API using iframes. It could be used as
-a DoS tool by crashing particular renderer processes, but extensions can already
-do this by visiting "about:crash" in a given tab.
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-1) Kill random or all processes, causing tabs showing “Oh Snap” screens.
-2) Use the terminate method to try and kill processes outside of Chromium.
-3)
-Alright Doctor, one last challenge:
-Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?
-No, the API will provide access to the process model only. The only state change
-the API will allow is to terminate child processes, which should not lead to any
-permanent changes to the system.
-How would you implement your desired features if this API didn't exist?
-We are not aware of another way to obtain this information. Some of the data
-(though not CPU usage) is provided by about:memory, but extensions are not
-allowed to load this page to parse its contents. Even if about:memory could be
-loaded and parsed by extensions, it would be difficult to match a given tab to a
-process simply by its title.
-Draft API spec
-API reference: chrome.processes
-Methods:
-**terminate**
-**chrome.experimental.processes.terminate(integer processId, optional function callback)**
-**Terminates the specified Chrome process. For renderer processes, it is equivalent to visiting about:crash, but without changing the tab's URL.**
-**Parameters**
-
-**processId ( integer )**
-
-**The ID of the process to be terminated.**
-
-**Callback function**
-**The callback parameter should specify a function that looks like this:**
-**function(boolean result) {...}**
-**Parameters**
-
-**result ( boolean )**
-
-**True if terminating the process was successful, otherwise false.**
-
-getProcessInfo
-**chrome.experimental.processes.getProcessInfo(integer or array of integer
-processIds, boolean includeMemory, function callback)**
-
-Retrieves the process information for each process ID specified.
-**Parameters**
-
-**processIds ( integer or array of integer )**
-
-**The list of process IDs or single process ID for which to return the process information. An empty list indicates all processes are requested.**
-
-**includeMemory ( boolean )**
-
-**True if detailed memory usage is required. Note, collecting memory usage information incurs extra CPU usage and should only be queried for when needed.**
-
-**callback ( optional function )**
-
-**Called when the processes information is collected.**
-
-**Callback function**
-**The callback parameter should specify a function that looks like this:**
-**function(object processes) {...}**
-**Parameters**
-
-**processes ( object )**
-
-**A dictionary of Process objects for each requested process that is a live child process of the current browser process, indexed by process ID. Metrics requiring aggregation over time will not be populated in each Process object.**
-
-Events:
-onCreated
-chrome.experimental.processes.onCreated.addListener(function(Process process)
-{...});
-Fires when a new process is created.
-Parameters
-
-process ( Process )
-
-Details of the process that was created. Metrics requiring aggregation over time
-will not be populated in the object.
-
-**onExited**
-**chrome.experimental.processes.onExited.addListener(function(integer processId, integer exitType, integer exitCode) {...});**
-**Fires when a process is terminated, either cleanly or due to a crash.**
-**Parameters**
-
-**processId ( integer )**
-
-**The ID of the process that exited.**
-
-**exitType ( integer )**
-
-**The type of exit that occurred for the process - normal, abnormal, killed, crashed. Only available for renderer processes.**
-
-**exitCode ( optional integer )**
-
-**The exit code if the process exited abnormally. Only available for renderer processes.**
-
-**onUnresponsive**
-**chrome.experimental.processes.onUnresponsive.addListener(function(Process process) {...});**
-**Fires when a process becomes unresponsive.**
-**Parameters**
-
-**process ( Process )**
-
-**Details of the unresponsive process. Metrics requiring aggregation over time will not be populated in the object. Only available for renderer processes.**
-
-onUpdated
-chrome.experimental.processes.onUpdated.addListener(function(object processes)
-{...});
-Fires each time the Chrome Task Manager updates its process statistics,
-providing a dictionary of updated Process objects, indexed by process ID.
-Parameters
-
-processes ( object )
-
-A dictionary of updated Process objects for each live process in the browser,
-indexed by process ID. Metrics requiring aggregation over time will be populated
-in each Process object.
-
-**onUpdatedWithMemory**
-**chrome.experimental.processes.onUpdatedWithMemory.addListener(function(object processes) {...});**
-**Fires each time the Chrome Task Manager updates its process statistics, providing a dictionary of updated Process objects, indexed by process ID. Identical to onUpdate, with the addition of memory usage details included in each Process object. Note, collecting memory usage information incurs extra CPU usage and should only be listened for when needed.**
-**Parameters**
-
-**processes ( object )**
-
-**A dictionary of updated Process objects for each live process in the browser, indexed by process ID. Memory usage details will be included in each Process object.**
-
-Types:
-**Cache**
-**( object )**
-**The Cache object contains information about the size and utilization of a cache used by Chrome.**
-**size ( integer )**
-
-**The size of the cache, in bytes.**
-
-**liveSize ( integer )**
-
-**The part of the cache that is utilized, in bytes.**
-
-**Process**
-**( object )**
-**The Process object contains various types of information about the underlying OS process. Some of the information, such as cpu or sqliteMemory, needs to be collected over time. Such data is present in the object only when it is part of a callback for the onUpdated or onUpdatedWithMemory events and not for getProcessInfo. Also, privateMemory is expensive to measure, so it is only present in the object when it is part of a callback for onUpdatedWithMemory or getProcessInfo with the includeMemory flag.**
-**id ( integer )**
-**The unique ID of the process provided by Chrome.**
-**osProcessId ( integer )**
-
-**The operating system process ID.**
-
-**type ( string )**
-**The type of process. Either browser, renderer, extension, notification, plugin, worker, nacl,**
-**utility, gpu, or other.**
-**profile ( string )**
-
-**The profile which the process is associated with.**
-
-**tabs ( array of integer )**
-
-**Array of Tab IDs that have a page rendered by this process. The list will be non-empty for renderer processes only.**
-
-**cpu ( optional number )**
-
-**The most recent measurement of the process's CPU usage, between 0 and 100%. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**privateMemory ( optional number )**
-
-**The most recent measurement of the process's private memory usage, in bytes. Only available when receiving the object as part of a callback from onUpdatedWithMemory or getProcessInfo with the includeMemory flag.**
-
-**network ( optional number )**
-
-**The most recent measurement of the process's network usage, in bytes per second. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**jsMemoryAllocated ( optional number )**
-
-**The most recent measurement of the process’s JavaScript allocated memory, in bytes. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**jsMemoryUsed ( optional number )**
-
-**The most recent measurement of the process’s JavaScript memory used, in bytes. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**sqliteMemory ( optional number )**
-
-**The most recent measurement of the process’s SQLite memory usage, in bytes. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**fps ( optional number )**
-
-**The most recent measurement of the process’s frames per section. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**imageCache ( optional object )**
-
-**The most recent information about the image cache for the process. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**scriptCache ( optional object )**
-
-**The most recent information about the script cache for the process. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-**cssCache ( optional object )**
-
-**The most recent information about the CSS cache for the process. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory.**
-
-Open questions
-
-* Does the Tab object need a process ID added to it?
- * After discussion with Charlie Reis, it will be best to be a list
- or tree structure, to accommodate future out of process IFrame
- rendering work. Ideally we can include plugin processes as
- Process objects and form a full tree of all processes involved
- in rendering a single tab.
-* Should Site Instance be exposed through the API?
- * At this point in time it is hard to come up with a good example
- other than some of our own visualizing/debugging. If any
- compelling usage presents itself, we can see if it justifies
- including the information. For now I don't think it is
- worthwhile information to expose.
-* Should we maintain a list of tabs associated with a process, or
- should we let developers do that by looping over the current tabs?
- * *Aaron: That seems useful.* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/process-extension-screenshot.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/process-extension-screenshot.png.sha1
deleted file mode 100644
index 5d4919be9de..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api/process-extension-screenshot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0eb92ca0677d0bb382567067aa85ce3a7d96ae42 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/profile-extension-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/profile-extension-api/index.md
deleted file mode 100644
index 62315ea48f2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/profile-extension-api/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: profile-extension-api
-title: Profile Extension API
----
-
-**Proposal Date**
-**December 27, 2012**
-**Who is the primary contact for this API?**
-**rlp@**
-**Who will be responsible for this API? (Team please, not an individual)**
-**Profiles team (sub team of Frontend team)**
-**Overview**
-**Access to profile information for extensions. This requires adding one method and extending another.**
-**The addition would be a method which returns a list of all existing users on a machine. Users would be an object consisting of to two pieces of data: profile name and icon.**
-**The second part of this proposal would be adding an optional profile parameter to the chrome.window.create method, allowing extensions to open a window for another user.**
-**Use cases**
-**An API to open windows in new profiles has been requested by the marketing team. Furthermore, providing access to the list of profiles would allow extensions to open windows in a selected profile. We've had several profile bugs about not being able to open a link or otherwise in the expected and/or desired profile.**
-**Do you know anyone else, internal or external, that is also interested in this API?**
-**The marketing team has requested access to multiple users for demos. This API would allow for writing an extension to give them the needed access.**
-**Could this API be part of the web platform?**
-**No, because profiles are specific to Chrome.**
-**Do you expect this API to be fairly stable? How might it be extended or changed in the future?**
-**Yes, this API should be stable due to its simplicity. Even if the underlying structure of profiles change, this should not affect this API.**
-**Additional access to profiles could be added in the future.**
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-**This API is read-only. It cannot change or create new profiles. So there can be no conflict between multiple extensions.**
-**List every UI surface belonging to or potentially affected by your API:**
-**This would not add any new UI.**
-**Actions taken with extension APIs should be obviously attributable to an extension. Will users be able to tell when this new API is being used? How?**
-**For the extension to creating a new window, we would be piggybacking on existing methods for indicating a new window was opened by an extension. For getting the list of users, there is no external action which would be visible to users.**
-**How could this API be abused?**
-**This would provide the extension access to know which users are on a given instance of Chrome. Some may view this as as security concern although this information is already available.**
-**By allowing the extension to open new windows, you could potentially switch users on someone.**
-**Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):**
-**1) Open up a website requiring a password with a different user. The original user doesn't realize the newly opened window is from a different user, enters their password which is then stored for the other user.**
-**2) Get a list of the users on a computer and send that information back to a nefarious server (though I don't know what they'd do with that information).**
-**3) Share information about one user with another.**
-**What security UI or other mitigations do you propose to limit evilness made possible by this new API?**
-**User icons from the extension API could be tagged to indicate they are from the extension api.**
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-**No they could not. All information is read-only so they could not make any permanent changes to the state of a user's Chrome.**
-**How would you implement your desired features if this API didn't exist?**
-**Currently there is no way to get this information or allow someone to open a window with a different profile.**
-**Draft Manifest Changes**
-**None.**
-**Draft API spec**
-**Types**
-**Profile (object)**
-**Properties of Profile**
-**name (string)**
-**The name of the profile.**
-**icon (ImageData)**
-**The icon of the profile.**
-**Methods**
-**getProfileList**
-**chrome.users.getProfileList**
-
-**Returns a list of current users known for this instance of Chrome. If the current user is in managed mode or on ChromeOS, this list will only contain the current user.**
-
-**result (array of Profile)**
-**Additional Parameter for chrome.windows.create**
-**profileName (string)**
-**The name of the profile which the window should be created for. If the current user is in managed mode or on ChromeOS, this parameter will have no effect as they can only open windows for the current user.**
-**Open questions**
-**Could this be a function under chrome.windows?** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/proposal-chrome-extensions-cookies-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/proposal-chrome-extensions-cookies-api/index.md
deleted file mode 100644
index 9a124266ddf..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/proposal-chrome-extensions-cookies-api/index.md
+++ /dev/null
@@ -1,807 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: proposal-chrome-extensions-cookies-api
-title: Cookies API
----
-
-### Overview
-
-The proposed API allows Chrome extensions to access the browser's cookies,
-without having to send HTTP requests to obtain those cookies.
-
-### Use Cases
-
-We are developing a Chrome extension that interacts with known services
-requiring authentication. We would like the extension to be able to detect
-authentication status changes as they occur in an inexpensive way, by checking
-for the existence of known cookies associated with that service.
-In general, any Chrome extension wishing to interact with services that set
-browser cookies could benefit from this API. The API could also support Chrome
-extensions which don't care about specific known cookies, but can for instance
-help the user gain more visibility or control into what cookies are being set on
-their browser.
-
-### Could this API be part of the web platform?
-
-No. The web platform relies on the same origin model, and sites can read their
-own cookies. This API is for elevated privilege entities (i.e. extensions) to
-read and write cookies across origins.
-
-### Do you expect this API to be fairly stable?
-
-Yes. The general mechanism of browser cookies is mature and likely stable,
-making this API equally stable.
-
-### What UI does this API expose?
-
-None.
-
-### How could this API be abused?
-
-A malicious extension could steal cookies from sites the user visits. The API
-also exposes HttpOnly cookie data to the extension. However, as documented
-above, it is already possible to obtain cookies and to generate HTTP requests
-from a Chrome extension by using content scripts, so these new APIs don't expose
-any new vulnerabilities.
-
-### How would you implement your desired features if this API didn't exist?
-
-One technique is to use content scripts: loading a URL matching a particular
-cookie's domain, and inspecting the value of document.cookie in a content
-script. Another method could involve sending an XmlHttpRequest to a service that
-will return authentication status information for a particular resource. Both of
-these techniques require network connectivity and communication, making them
-undesirable in a real-world application. Loading extra URLs in new windows or
-hidden iframes in order to access cookies via content scripts poses further
-potential security, privacy and usability risks.
-
-### Are you willing and able to develop and maintain this API?
-
-Yes.
-
-### ******Draft API spec******
-
-### ************Use the chrome.experimental.cookies module to access cookies from your extension.************
-
-### ************#### ************Manifest************************
-
-### ************You must declare the "cookies" permission in your extension's manifest to use the cookies API. You also must request cross-origin permissions for the domains you wish to access cookies for, using the same match-pattern syntax used for cross-origin XHR permissions. For example:************
-
-### ************`{`************
-### ************` "name": "My extension",`************
-### ************` ...`************
-### ************` "permissions": [`************
-### ************` "cookies",`************
-### ************` "http://*.google.com/"`************
-### ************` ],`************
-### ************` ...`************
-### ************`}`************
-
-#### ************Methods************
-
-### ************get************
-
-### ************`chrome.experimental.cookies.get(object details, function callback)`************
-
-### ************Retrieves information about a single cookie. If more than one cookie of the same name exists for the given URL, the one with the longest domain property, longest path length, or earliest creation time will be returned.************
-
-> ### ************#### ************Parameters************************
-
-> ### *************details (object)*************
-
-> > ### *************************Details to identify the cookie being retrieved.*************************
-
-> > ### *************url (string)*************
-
-> > > ### ************The URL with which the cookie to retrieve is associated. This argument may be a full URL, in which case any data following the URL path (e.g. the query string) is simply ignored. If host permissions for this URL are not specified in the manifest file, the API call will fail.************
-
-> > *************name (string)*************
-
-> > > ### **************************************The name of the cookie to retrieve.**************************************
-
-> > ### *************storeId (optional string)*************
-
-> > > ### ************The ID of the cookie store in which to look for the cookie. By default, the current execution context's cookie store will be used.************
-
-> ### *************************callback (function)*************************
-
-> #### ************************************Callback Function************************************
-
-> > #### ************************************************The callback parameter should specify a function that looks like this:************************************************
-
-> > #### ************************************************************`function(Cookie cookie) {...});`************************************************************
-
-> > ### *************cookie (optional Cookie)*************
-
-> > > ### *************************Contains details about the cookie. This parameter is null if no such cookie was found.*************************
-
-### **************getAll**************
-
-### ************`chrome.experimental.cookies.getAll(object `************
-
-### ************``************``### ************`details`************``************``************
-
-### ************``**********`, function callback)`************``************
-
-### Retrieves all cookies from a single cookie store that match the given information.
-
-> #### ************Parameters************
-
-> #### *************************details (object)*************************
-
-> > #### *************************************Information to filter the cookies being retrieved.*************************************
-
-> > ### *************url (optional string)*************
-
-> > > ### Restricts the retrieved cookies to those that would match the given URL.
-
-> > ### *### *************name (optional string)**************
-
-> > > ### *### Filters the cookies by name.*
-
-> > ### *### *************domain (optional string)**************
-
-> > > ### *### Restricts the retrieved cookies to those whose domains match or are subdomains of this one.*
-
-> > ### *### *************path (optional string)**************
-
-> > > ### *### Restricts the retrieved cookies to those whose path exactly matches this string.*
-
-> > ### *### *************secure (optional boolean)**************
-
-> > > ### *### Filters the cookies by their Secure property.*
-
-> > ### *### *************session (optional**************
-
-> > ### *### **************### **************### *************boolean******************************************
-
-> > ### *### *************### *************)****************************
-
-> > > ### *### Filters out session vs. persistent cookies.*
-
-> > ### *### *### **************************storeId (optional****************************
-
-> > ### *### *### ***************************### *### ***************************### *************string**********************************************************************
-
-> > ### *### *### **************************### *### **************************)********************************************************
-
-> > > ### ### **************************The cookie store to retrieve cookies from. If omitted, the current execution context's cookie store will be used.**************************
-
-> ### *callback (function)*
-
-> #### Callback Function
-
-> > #### The callback parameter should specify a function that looks like this:
-
-> > #### `function(array of Cookie cookies) {...});`
-
-> > #### `*cookies (array of Cookie)*`
-
-> > > #### `*All the existing, unexpired cookies that match the given cookie info.*`
-
-****### set****
-
-****### *******************************`chrome.experimental.cookies.set(object
-details)`***********************************
-
-****### #### `*********************Sets a cookie with the given cookie data; may overwrite equivalent cookies if they exist.*********************`****
-
-> ****#### ************Parameters****************
-
-> ****#### *details (object)*****
-
-> > ****#### Details about the cookie being set.****
-
-> > ********### *************url (string)*********************
-
-> > > ********### The request-URI to associate with the setting of the cookie. This value can affect the default domain and path values of the created cookie. If host permissions for this URL are not specified in the manifest file, the API call will fail.********
-
-> > *******### *************name (optional string)*********************
-
-> > > *******### The name of the cookie. Empty by default if omitted.********
-
-> > *******### *************value (optional string)*********************
-
-> > > *******### The value of the cookie. Empty by default if omitted.********
-
-> > *******### *************domain (optional string)*********************
-
-> > > *******### The domain of the cookie. If omitted, the cookie becomes a host-only cookie.********
-
-> > *******### *************path (optional string)*********************
-
-> > > *******### The path of the cookie. Defaults to the path portion of the url parameter.********
-
-> > *******### *************secure (optional boolean)*********************
-
-> > > *******### Whether the cookie should be marked as Secure. Defaults to false.********
-
-> > *******### *************httpOnly (optional boolean)*********************
-
-> > > *******### Whether the cookie should be marked as HttpOnly. Defaults to false.********
-
-> > *******### *************expirationDate (optional number)*********************
-
-> > > *******### The expiration date of the cookie as the number of seconds since the UNIX epoch. If omitted, the cookie becomes a session cookie.********
-
-> > ****### *************storeId (optional string)*****************
-
-> > > ***### The ID of the cookie store in which to set the cookie. By default, the cookie is set in the current execution context's cookie store.****
-
-******remove******
-
-****### ****### ****###
-*******************************`chrome.experimental.cookies.remove(object
-details)`*******************************************
-
-****### ****### ****### *******************************`****#### *Deletes a cookie by name.*****`*******************************************
-
-> ****#### **### ### ### `#### #### Parameters`******
-
-> ****#### *details (object)*****
-
-> > ****#### Information to identify the cookie to remove.****
-
-> > ****#### ****### *************url (string)*********************
-
-> > > ****### The URL associated with the cookie. If host permissions for this URL are not specified in the manifest file, the API call will fail.****
-
-> > ********### ****name (string)************
-
-> > > ****### The name of the cookie to remove.****
-
-> > ****### storeId (optional string)****
-
-> > > ****The ID of the cookie store to look in for the cookie. If unspecified,
-> > > the cookie is looked for by default in the current execution context's
-> > > cookie store.****
-
-****### ********************### ********************### ****### getAllCookieStores************************************************
-
-****### ****### ****###
-*******************************`chrome.experimental.cookies.getAllCookieStores(function
-callback)`*******************************************
-
-****### ****### ****### *******************************`****#### *Lists all existing cookie stores.*****`*******************************************
-
-> ****#### **### ### ### `#### #### Parameters`******
-
-> ****#### *callback (function)*****
-
-> ****#### **#### Callback Function******
-
-> > ****#### The callback parameter should specify a function that looks like this:****
-
-> > ****#### `function(array of CookieStore cookieStores) {...});`****
-
-> > ****#### cookieStores (array of CookieStore)****
-
-> > > ****#### All the existing cookie stores.****
-
-#### **#### Events**
-
-#### **#### ****#### onChanged******
-
-#### **#### ****#### `chrome.experimental.cookies.onChanged.addListener(function(object changeInfo) {...});`******
-
-#### **#### ****#### `Fired when a cookie is set or removed.`******
-
-> #### Parameters
-
-> #### **#### ****#### `changeInfo (object)`******
-
-> > #### **#### ****#### `removed (boolean)`******
-
-> > > #### **#### ****#### `True if a cookie was removed.`******
-
-> > #### **#### ****#### `cookie (Cookie) `******
-
-> > > #### **#### ****#### `Information about the cookie that was set or removed.`******
-
-#### Types
-
-#### **#### ****#### ``**#### ****#### `Cookie (object)`******``******
-
-#### **#### ``#### **#### `Represents information about an HTTP cookie.`**``**
-
-> #### **#### ****#### ``**#### ****#### `name (string)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `The name of the cookie.`******``******
-
-> #### **#### ****#### ``**#### ****#### `value (string)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `The value of the cookie.`******``******
-
-> #### **#### ****#### ``**#### ****#### `domain (string)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `The domain of the cookie.`******``******
-
-> #### **#### ****#### ``**#### ****#### `hostOnly (boolean) `******``******
-
-> > #### **#### ****#### ``**#### ****#### `True if the cookie is a host-only cookie (i.e. a request's host must exactly match the domain of the cookie).`******``******
-
-> #### **#### ****#### ``**#### ****#### `path (string)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `The path of the cookie.`******``******
-
-> #### **#### ****#### ``**#### ****#### `secure (boolean)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `True if the cookie is marked as Secure (i.e. its scope is limited to secure channels, typically HTTPS).`******``******
-
-> #### **#### ****#### ``**#### ****#### `httpOnly (boolean)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `True if the cookie is marked as HttpOnly (i.e. the cookie is inaccessible to client-side scripts).`******``******
-
-> *session (boolean)*
-
-> > #### #### #### ``#### #### `True if the cookie is a session cookie, as opposed to a persistent cookie with an expiration date.` ``
-
-> #### **#### ****#### ``**#### ****#### `expirationDate (optional number) `******``******
-
-> > #### **#### ****#### ``**#### ****#### `The expiration date of the cookie as the number of seconds since the UNIX epoch. Not provided for session cookies. `******``******
-
-> #### **#### ****#### ``**#### ****#### `storeId (string)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `The ID of the cookie store containing this cookie, as provided in getAllCookieStores().`******``******
-
-#### **#### ****#### ``**#### ****#### `CookieStore (object) `******``******
-
-#### **#### ****#### ``**#### ****#### `A session cookie store in the browser. An incognito mode window, for instance, has a separate session cookie store from other windows.`******``******
-
-> #### **#### ****#### ``**#### ****#### `id (string)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `The unique identifier for the cookie store.`******``******
-
-> #### **#### ****#### ``**#### ****#### `tabIds (array of integer)`******``******
-
-> > #### **#### ****#### ``**#### ****#### `Identifiers of all the browser tabs that share this cookie store.`******``******
-
-#### **#### ****#### ``**#### ****#### `A more formal description of the API and some sample code usage:`******``******
-
-`[`
-` {`
-
-` "namespace": "experimental.cookies",`
-
-` "types": \[`
-
-` {`
-
-` "id": "Cookie",`
-
-` "type": "object",`
-
-` "description": "Represents information about an HTTP cookie.",`
-
-` "properties": {`
-
-` "name": {"type": "string", "description": "The name of the cookie."},`
-
-` "value": {"type": "string", "description": "The value of the cookie."},`
-
-` "domain": {"type": "string", "description": "The domain of the cookie."},`
-
-` "hostOnly": {"type": "boolean", "description": "True if the cookie is a
-host-only cookie (i.e. a request's host must exactly match the domain of the
-cookie)."},`
-
-` "path": {"type": "string", "description": "The path of the cookie."},`
-
-` "secure": {"type": "boolean", "description": "True if the cookie is marked as
-Secure (i.e. its scope is limited to secure channels, typically HTTPS)."},`
-
-` "httpOnly": {"type": "boolean", "description": "True if the cookie is marked
-as HttpOnly (i.e. the cookie is inaccessible to client-side scripts)."},`
-
-` "session": {"type": "boolean", "description": "True if the cookie is a session
-cookie, as opposed to a persistent cookie with an expiration date."},`
-
-` "expirationDate": {"type": "number", "optional": true, "description": "The
-expiration date of the cookie as the number of seconds since the UNIX epoch. Not
-provided for session cookies."},`
-
-` "storeId": {"type": "string", "description": "The ID of the cookie store
-containing this cookie, as provided in getAllCookieStores()."}`
-
-` }`
-
-` },`
-
-` {`
-
-` "id": "CookieStore",`
-
-` "type": "object",`
-
-` "description": "Represents a cookie store in the browser. An incognito mode
-window, for instance, uses a separate cookie store from a non-incognito
-window.",`
-
-` "properties": {`
-
-` "id": {"type": "string", "description": "The unique identifier for the cookie
-store."},`
-
-` "tabIds": {"type": "array", "items": {"type": "integer"}, "description":
-"Identifiers of all the browser tabs that share this cookie store."}`
-
-` }`
-
-` }`
-
-` \],`
-
-` "functions": \[`
-
-` {`
-
-` "name": "get",`
-
-` "type": "function",`
-
-` "description": "Retrieves information about a single cookie. If more than one
-cookie of the same name exists for the given URL, the one with the longest
-domain property, longest path length, or earliest creation time will be
-returned.",`
-
-` "parameters": \[`
-
-` {`
-
-` "type": "object",`
-
-` "name": "details",`
-
-` "description": "Details to identify the cookie being retrieved.",`
-
-` "properties": {`
-
-` "url": {"type": "string", "description": "The URL with which the cookie to
-retrieve is associated. This argument may be a full URL, in which case any data
-following the URL path (e.g. the query string) is simply ignored. If host
-permissions for this URL are not specified in the manifest file, the API call
-will fail."},`
-
-` "name": {"type": "string", "description": "The name of the cookie to
-retrieve."},`
-
-` "storeId": {"type": "string", "optional": true, "description": "The ID of the
-cookie store in which to look for the cookie. By default, the current execution
-context's cookie store will be used."}`
-
-` }`
-
-` },`
-
-` {`
-
-` "type": "function",`
-
-` "name": "callback",`
-
-` "parameters": \[`
-
-` {`
-
-` "name": "cookie", "$ref": "Cookie", "optional": true, "description": "Contains
-details about the cookie. This parameter is null if no such cookie was found."`
-
-` }`
-
-` \]`
-
-` }`
-
-` \]`
-
-` },`
-
-` {`
-
-` "name": "getAll",`
-
-` "type": "function",`
-
-` "description": "Retrieves all cookies from a single cookie store that match
-the given information.",`
-
-` "parameters": \[`
-
-` {`
-
-` "type": "object",`
-
-` "name": "details",`
-
-` "description": "Information to filter the cookies being retrieved.",`
-
-` "properties": {`
-
-` "url": {"type": "string", "optional": true, "description": "Restricts the
-retrieved cookies to those that would match the given URL."},`
-
-` "name": {"type": "string", "optional": true, "description": "Filters the
-cookies by name."},`
-
-` "domain": {"type": "string", "optional": true, "description": "Restricts the
-retrieved cookies to those whose domains match or are subdomains of this
-one."},`
-
-` "path": {"type": "string", "optional": true, "description": "Restricts the
-retrieved cookies to those whose path exactly matches this string."},`
-
-` "secure": {"type": "boolean", "optional": true, "description": "Filters the
-cookies by their Secure property."},`
-
-` "session": {"type": "boolean", "optional": true, "description": "Filters out
-session vs. persistent cookies."},`
-
-` "storeId": {"type": "string", "optional": true, "description": "The cookie
-store to retrieve cookies from. If omitted, the current execution context's
-cookie store will be used."}`
-
-` }`
-
-` },`
-
-` {`
-
-` "type": "function",`
-
-` "name": "callback",`
-
-` "parameters": \[`
-
-` {`
-
-` "name": "cookies", "type": "array", "items": {"$ref": "Cookie"},
-"description": "All the existing, unexpired cookies that match the given cookie
-info."`
-
-` }`
-
-` \]`
-
-` }`
-
-` \]`
-
-` },`
-
-` {`
-
-` "name": "set",`
-
-` "type": "function",`
-
-` "description": "Sets a cookie with the given cookie data; may overwrite
-equivalent cookies if they exist.",`
-
-` "parameters": \[`
-
-` {`
-
-` "type": "object",`
-
-` "name": "details",`
-
-` "description": "Details about the cookie being set.",`
-
-` "properties": {`
-
-` "url": {"type": "string", "description": "The request-URI to associate with
-the setting of the cookie. This value can affect the default domain and path
-values of the created cookie. If host permissions for this URL are not specified
-in the manifest file, the API call will fail."},`
-
-` "name": {"type": "string", "optional": true, "description": "The name of the
-cookie. Empty by default if omitted."},`
-
-` "value": {"type": "string", "optional": true, "description": "The value of the
-cookie. Empty by default if omitted."},`
-
-` "domain": {"type": "string", "optional": true, "description": "The domain of
-the cookie. If omitted, the cookie becomes a host-only cookie."},`
-
-` "path": {"type": "string", "optional": true, "description": "The path of the
-cookie. Defaults to the path portion of the url parameter."},`
-
-` "secure": {"type": "boolean", "optional": true, "description": "Whether the
-cookie should be marked as Secure. Defaults to false."},`
-
-` "httpOnly": {"type": "boolean", "optional": true, "description": "Whether the
-cookie should be marked as HttpOnly. Defaults to false."},`
-
-` "expirationDate": {"type": "number", "optional": true, "description": "The
-expiration date of the cookie as the number of seconds since the UNIX epoch. If
-omitted, the cookie becomes a session cookie."},`
-
-` "storeId": {"type": "string", "optional": true, "description": "The ID of the
-cookie store in which to set the cookie. By default, the cookie is set in the
-current execution context's cookie store."}`
-
-` }`
-
-` }`
-
-` \]`
-
-` },`
-
-` {`
-
-` "name": "remove",`
-
-` "type": "function",`
-
-` "description": "Deletes a cookie by name.",`
-
-` "parameters": \[`
-
-` {`
-
-` "type": "object",`
-
-` "name": "details",`
-
-` "description": "Information to identify the cookie to remove.",`
-
-` "properties": {`
-
-` "url": {"type": "string", "description": "The URL associated with the cookie.
-If host permissions for this URL are not specified in the manifest file, the API
-call will fail."},`
-
-` "name": {"type": "string", "description": "The name of the cookie to
-remove."},`
-
-` "storeId": {"type": "string", "optional": true, "description": "The ID of the
-cookie store to look in for the cookie. If unspecified, the cookie is looked for
-by default in the current execution context's cookie store."}`
-
-` }`
-
-` }`
-
-` \]`
-
-` },`
-
-` {`
-
-` "name": "getAllCookieStores",`
-
-` "type": "function",`
-
-` "description": "Lists all existing cookie stores.",`
-
-` "parameters": \[`
-
-` {`
-
-` "type": "function",`
-
-` "name": "callback",`
-
-` "parameters": \[`
-
-` {`
-
-` "name": "cookieStores", "type": "array", "items": {"$ref": "CookieStore"},
-"description": "All the existing cookie stores."`
-
-` }`
-
-` \]`
-
-` }`
-
-` \]`
-
-` }`
-
-` \],`
-
-` "events": \[`
-
-` {`
-
-` "name": "onChanged",`
-
-` "type": "function",`
-
-` "description": "Fired when a cookie is set or removed.",`
-
-` "parameters": \[`
-
-` {`
-
-` "type": "object",`
-
-` "name": "changeInfo",`
-
-` "properties": {`
-
-` "removed": {"type": "boolean", "description": "True if a cookie was
-removed."},`
-
-` "cookie": {"$ref": "Cookie", "description": "Information about the cookie that
-was set or removed."}`
-
-` }`
-
-` }`
-
-` \]`
-
-` }`
-
-` \]`
-
-` }`
-
-`]`
-
-#### Sample code
-
-`function updateUserLoginStatusUi() {`
-` chrome.experimental.cookies.get({`
-` url: "http://www.mysite.com",`
-` name: "MY_COOKIE"`
-` }, function(cookie) {`
-` if (cookie) {`
-` displayLoggedInUi();`
-` } else {`
-` displayLoggedOutUi();`
-` }`
-` });`
-`}`
-`chrome.experimental.cookies.onChanged.addListener(function(changeInfo) {`
-` updateUserLoginStatusUi();`
-`});`
-
-`// Remove a cookie`
-
-`chrome.experimental.cookies.remove(`
-
-` {url: "http://www.mysite.com", name: "MY_COOKIE"});`
-
-`// Manually expire a cookie`
-
-`chrome.experimental.cookies.set(`
-
-` {`
-
-` url: "http://www.mysite.com",`
-
-` name: "MY_COOKIE",`
-
-` expirationDate: 0,`
-
-` }); `
-`function setSessionCookieForTab(tabId, url, name, value) { `
-` chrome.experimental.cookies.getAllCookieStores(function(cookieStores) { `
-` var i;`
-
-` for (i = 0; i < cookieStores.length; i++) {`
-
-` if (cookieStores[i].tabIds.indexOf(tabId) != -1) {`
-
-` chrome.experimental.cookies.set(`
-
-` {url: url, name: name, value: value, storeId: cookieStores[i].id});`
-
-` }`
-` }`
-` });`
-`}` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/push-messaging/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/push-messaging/index.md
deleted file mode 100644
index 608b68ee325..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/push-messaging/index.md
+++ /dev/null
@@ -1,190 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: push-messaging
-title: Push Messaging
----
-
-**You’re about to propose a new extension API, what a marvelous road you have
-ahead of you. Before you venture forth, though, we’d like to get a sense for
-your new API and offer you some guidance on your way. Fill out this proposal and
-post it und**er [For Developers‎ &gt; ‎Design Documents‎ &gt; ‎Extensions‎ &gt;
-‎Proposed & Proposing New Changes‎ &gt; ‎API
-Proposals](/developers/design-documents/extensions/proposed-changes/apis-under-development)
-**in the list of proposed APIs, then include a link in your Extension Review
-request in go/extensionsreview.**
-
-Proposal Date
-2012/07/31
-Who is the primary contact for this API?
-dimich@
-
-Who will be responsible for this API? (Team please, not an individual)
-
-dcheng@, dimich@, petewil@
-
-Overview
-Web apps have the inherent limitation that they're not able to do much when they
-aren't running. Today, extensions/apps use persistent background pages to do
-interesting work even if they're not in the foreground; for example, they can
-use it to poll the server for new emails and download them to a local store when
-they're received. From a performance/efficiency standpoint, this is less than
-desirable since it requires a mostly idle background page to just hang around
-waiting for work. With new Chrome packaged apps and extension APIs that allow
-background pages to be unloaded on idle, this will no longer be possible. As a
-result, we believe it'd be useful to offer an API that would allow a remote
-server to wake up a web app that's not currently running to do useful work. We
-plan on implementing this API on top of the cache invalidation service that
-Chrome is already using for Sync.
-Use cases
-Gmail/Google Docs: instead of polling the server for updates, they could
-subscribe to push messages for their service. When there's actually an update,
-then they can use the event to wake up their background page and update their
-local store.
-Google Talk: a push message would be triggered for the start of a new chat; this
-would allow Google Talk to spawn a new chat window even when it's currently
-unloaded.
-Do you know anyone else, internal or external, that is also interested in this
-API?
-Google Talk is the most interested client, though it could be useful for Gmail
-and Google Docs as well.
-Could this API be part of the web platform?
-It would be difficult to standardize this in the web platform because it depends
-on many other server-side components such as:
-
-* Authentication
-* The invalidation mechanism used
-* The features supported
-
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-We expose only a small subset of the cache invalidation service that Chrome uses
-internally. The main limitation today is that we have a list of hardcoded
-subchannels that we register on behalf of extensions; in the future, it's
-possible that we'd allow extensions to specify their own subchannel names. We'd
-likely have to keep the hardcoded subchannels around forever though, to avoid
-breaking extensions that use those subchannels.
-
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-They cannot conflict with each other, since we do not allow extensions to
-specify any part of the object IDs registered on their behalf.
-List every UI surface belonging to or potentially affected by your API:
-No UI elements are involved.
-**Actions taken with extension APIs should be obviously attributable to an
-extension. Will users be able to tell when this new API is being used? How?**
-
-Invalidations may trigger actions that result in UI elements being surfaced.
-Since we add no new UI elements ourselves, and existing ones should be obviously
-attributable, the existing UI should be sufficient.
-
-How could this API be abused?
-See below.
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-1) The server could trigger a lot of invalidations. Presumably this would
-eventually cause the app to get throttled on the server though...
-2) An extension could claim it will manually acknowledge an invalidation and
-never acknowledge it, allowing it to be woken up regularly.
-3) An app writer could always add the pushMessaging to his permissions list,
-whether or not he used it, causing the extension API to always register object
-IDs for that extension even though they are not used.
-What security UI or other mitigations do you propose to limit evilness made
-possible by this new API?
-To prevent extensions from being able to snoop on invalidations for other
-users/extensions, we do not allow the extensions to actually specify their own
-object IDs--we generate object IDs for an extension based on the signed-in user
-+ the extension ID + the subchannel.
-
-In addition, to reduce server load, we always acknowledge receipt of an
-invalidation immediately when we receive it from the cache invalidation server.
-We re-dispatch invalidations to the extension ourselves and use a backoff policy
-to prevent a faulty/malicious app from causing its background page to be woken
-up excessively.
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-**No. We unregister all object IDs registered on behalf of an extension when it is uninstalled.
-How would you implement your desired features if this API didn't exist?
-The user would have to make sure the app was constantly open for any
-"background" functionality to work as expected. In the case of Google Talk, this
-would require that the roster window always be opened.
-Draft API spec
-API reference: chrome.pushMessaging
-
-Methods:
-
-*getChannelId*
-
-*chrome.pushMessaging.getChannelId(function callback)*
-
-Retrieves the channel ID associated with an extension. This contains the
-obfuscated user ID combined with the extension ID; the typical usage is for the
-extension to send the channel ID to its app server to allow the app server to
-trigger push messages.
-
-*callback ( function )*
-
-Called when channel ID has been retrieved.
-
-*Callback function:*
-
-The callback parameter should specify a function that looks like this:
-
-*function(string channelID) {...};*
-
-*channelID ( string )*
-
-Contains the channel ID of the extension.
-
-Events:
-
-*onMessage*
-
-*chrome.pushMessaging.onMessage.addListener(function(Message message) { ... });*
-
-Fired when a push message is received.
-
-*Listener parameters:*
-
-*message ( Message )*
-
-The data associated with the message.
-
-Types:
-
-*Message*
-
-*( object )*
-
-Stores data about a push message.
-
-*subchannel ( number )*
-
-The subchannel the push message was received for.
-
-*payload ( string)*
-
-The payload associated with the push message. Delivery of the payload is not
-guaranteed; failure to deliver the payload will result in value being set to an
-empty string.
-
-*willAcknowledge ( function )*
-
-An extension can call this to indicate that it will manually acknowledge the
-receipt of the message. This is useful if the extension wants to do something
-asynchronous in response to a push message and wants it to be re-delivered if it
-isn't successfully handled for some reason.
-
-*acknowledge ( function )*
-Allows an extension which called willAcknowledge() to acknowledge receipt of the
-push message.
-Open questions
-willAcknowledge() and acknowledge() may not be possible to implement. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/rlz-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/rlz-api/index.md
deleted file mode 100644
index 056bf308a65..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/rlz-api/index.md
+++ /dev/null
@@ -1,237 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: rlz-api
-title: RLZ Chrome API Proposal
----
-
-## OBSOLETE -- the API has been removed in 2013.
-
-## **Overview**
-
-Google client products use a system called [RLZ](http://code.google.com/p/rlz)
-to perform cohort tagging to manage promotion analysis. This is accomplished by
-having the product record certain events in its life cycle, such as
-installation, first Google search performed, home page set to Google, and so on,
-and then forwarding that information to Google.
-
-This document proposes exposing some RLZ function as a Chrome Extension.
-
-For background documents, please see:
-
-* Chromium blog post: [In The Open, For
- RLZ](https://blog.chromium.org/2010/06/in-open-for-rlz.html)
-* Google Chrome Privacy Whitepaper: [Promotional
- Tokens](https://www.google.com/intl/en/chrome/browser/privacy/whitepaper.html#tokens)
-* [How to read an RLZ
- string](https://github.com/rogerta/rlz/blob/wiki/HowToReadAnRlzString.md)
-* The [RLZ open source project](https://github.com/rogerta/rlz/)
- (since merged into the [main Chromium source
- repo](https://chromium.googlesource.com/chromium/src/+/HEAD/rlz/))
-
-## **Use Cases**
-
-This API can be useful to any chrome-internal extension that wants do promotion
-analysis.
-
-## **Could this API be part of the web platform?**
-
-No. This API is specifically for managing promotions of chrome-internal
-extensions.
-
-## **Do you expect this API to be fairly stable?**
-
-This API is expected to be very stable. No changes are required to this API to
-support new chrome extensions.
-
-## **What UI does this API expose?**
-
-This API proposal does not expose any UI elements.
-
-## **How could this API be abused?**
-
-An extension could record events for different products or for access points it
-does not own. This could result in incorrect assessment of partnership
-distribution. This problem could be mitigated by restricting the products and/or
-access points made visible through this API. For example, a chrome extension
-should not affect Google Desktop or Chrome Omnibox access points.
-
-DoS attacks on Google are not possible since the underlying RLZ code prevents
-more than one financial ping per product per 24 hour period for all RLZ users on
-the same machine, not only chrome extensions.
-
-This API is hidden behind the command line argument used for experimental APIs.
-
-## **How would you implement your desired features if this API didn't exist?**
-
-If this API did not exist, we would need to re-implement the existing [RLZ open
-source library](http://code.google.com/p/rlz) as a combination of javascript and
-NPAPI plugin.
-
-## **Are you willing and able to develop and maintain this API?**
-
-Yes.
-
-**Will the API work on all platforms?**
-
-The RLZ library is Windows-only at the moment, so this API will only be
-supported on Windows until RLZ is adapted to work on other platforms.
-
-**Draft API spec**
-
-> Use the chrome.experimental.rlz module to record an RLZ events in your
-> extension's life cycle.
-
-> *Methods*
-
-> **recordProductEvent**
-
-> chrome.experimental.rlz.recordProductEvent(string *product*, string
-> *accessPoint*, string *event*)
-
-> Records an RLZ event for a given product's access point.
-
-> ***Parameters***
-
-> *product (string)*
-
-> A one-letter product name for the chrome-internal extension. This name should
-> be unique within the RLZ product name space. Refer to the function
-> [GetProductName()](http://code.google.com/p/rlz/source/browse/trunk/win/lib/lib_values.cc)
-> in the RLZ code.
-
-> *accessPoint (string)*
-
-> A two-letter access point name used within the extension. This name should be
-> unique within the RLZ access point name space. Refer to the function
-> [GetAccessPointName()](http://code.google.com/p/rlz/source/browse/trunk/win/lib/lib_values.cc)
-> in the RLZ code.
-
-> *event (string)*
-
-> A string representing the name of the event that occurred on the access point.
-> Valid possibilities:
-
-> <table>
-> <tr>
-> <td><b>Name</b></td>
-> <td><b>Description</b></td>
-> </tr>
-> <tr>
-> <td>`install`</td>
-> <td>Access point installed on the system</td>
-> </tr>
-> <tr>
-> <td>`set-to-google`</td>
-> <td>Point set from non-Google provider to Google</td>
-> </tr>
-> <tr>
-> <td>`first-search`</td>
-> <td>A first search has been performed from this access point since installation </td>
-> </tr>
-> <tr>
-> <td>`activate`</td>
-> <td>Product being used for a period of time </td>
-> </tr>
-> </table>
-
-> **clearProductState**
-
-> chrome.experimental.rlz.clearProductState(string *product*, string\[\]
-> *accessPoints*)
-
-> Clears all product-specific RLZ state from the machine, as well as clearing
-> all events for the specified access points. This function should be called
-> when the extension is uninstalled.
-
-> *Is there any way for an extension to know it is being uninstalled so that it
-> can make this call?*
-
-> ***Parameters***
-
-> *product (string)*
-
-> *A one-letter product name for the chrome-internal extension. This name should be unique within the RLZ product name space. Refer to the function [GetProductName()](http://code.google.com/p/rlz/source/browse/trunk/win/lib/lib_values.cc) in the RLZ code.*
-
-> *accessPoints (array of string)*
-
-> An array of two-letter access point names used within the extension. Each name
-> should be unique within the RLZ access point name space. Refer to the function
-> [GetAccessPointName()](http://code.google.com/p/rlz/source/browse/trunk/win/lib/lib_values.cc)
-> in the RLZ code.
-
-> ****sendFinancialPing****
-
-> **chrome.experimental.rlz.sendFinancialPing(string *product*, string\[\] *accessPoints, signature, brand, id, lang, exclude_machine_id, callback*)**
-
-> **Sends a ping with promotional RLZ information to Google.**
-
-> *******Parameters*******
-
-> ***product (string)***
-
-> ***A one-letter product name for the chrome-internal extension. This name should be unique within the RLZ product name space. Refer to the function [GetProductName()](http://code.google.com/p/rlz/source/browse/trunk/win/lib/lib_values.cc) in the RLZ code.***
-
-> ***accessPoints (array of string)***
-
-> **An array of two-letter access point names used within the extension. Each name should be unique within the RLZ access point name space. Refer to the function [GetAccessPointName()](http://code.google.com/p/rlz/source/browse/trunk/win/lib/lib_values.cc) in the RLZ code.**
-
-> **signature *(string)***
-
-> **A**
-
-> ******product-specific signature******
-
-> **string of the product.****
-
-> **brand *(string)***
-
-> **A promotional brand code assigned to the product.**
-
-> **************Can be an empty string.**************
-
-> **id *(string)***
-
-> **A product-specific installation id. Can be an empty string.**
-
-> **lang *(string)***
-
-> **The language of the product. Used to determine cohort.**
-
-> ********Can be an empty string.********
-
-> **exclude_machine_id *(boolean)***
-
-> **If true, the machine specific id will be excluded from the ping.**
-
-> **callback *(function)***
-
-> **A function that takes one boolean argument indicating whether the ping was successfully sent or not.**
-
-> **getAccessPointRlz**
-
-> chrome.experimental.rlz.getAccessPointRlz(string *accessPoint,* function
-> *callback*)
-
-> Gets the RLZ string to be used when accessing a Google property through the
-> given access point. This string should be used in an `rlz=` CGI parameter in
-> the Google property URLs.
-
-> ***Parameters***
-
-> **accessPoint (string)**
-
-> *A two-letter access point name used within the extension. This name should be unique within the RLZ access point name space. Refer to the function [GetAccessPointName()](http://code.google.com/p/rlz/source/browse/trunk/win/lib/lib_values.cc) in the RLZ code.*
-
-> **callback (function)**
-
-> *A function that takes one string argument, which is the RLZ string for the given access point.* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings/index.md
deleted file mode 100644
index bd78407c52a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings/index.md
+++ /dev/null
@@ -1,207 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: settings
-title: Settings API
----
-
-**Overview**
-
-This page proposes adding methods/events to chrome.settings to let extensions
-store settings data (assumed to be small pieces of string-like data) that is
-synced across a user's browser instances. Initially, the module would start in
-the chrome.experimental.settings namespace.
-
-**Use cases**
-
-Ever since extensions/apps sync was implemented, extension settings sync has
-been an oft-requested and
-[anticipated](http://googlesystem.blogspot.com/2010/12/predictions-for-googles-2011.html)
-feature. Syncing an extension's settings greatly enhances the usefulness of
-extension sync.
-
-**Could this API be part of the web platform?**
-
-No.
-
-**Do you expect this API to be fairly stable?**
-
-Yes. This API is based on the HTML5 storage spec which is unlikely to change
-much.
-
-**What UI does this API expose?**
-
-No additional UI is exposed. However, we may need to add UI to
-chrome://extensions for turning off settings sync for particular extensions. On
-the other hand, extension developers could do this themselves.
-
-**How could this API be abused?**
-
-An ill-behaved extension could create lots of data to sync, bogging down both
-the client and the server. This may also cause the user to be throttled,
-possibly affecting sync for other data types (e.g., bookmarks, preferences).
-
-**How would you implement your desired features if this API didn't exist?**
-
-Currently, extensions sync their settings by stuffing data in bookmarks. This is obviously very hacky and causes problems for sync.
-
-**Are you willing and able to develop and maintain this API?**
-
-The sync team can develop and maintain this API.
-
-**Draft API spec**
-
-It might be helpful to refer to docs for the HTML5 storage spec: see [this
-overview](http://diveintohtml5.org/storage.html) and [the spec
-itself](http://dev.w3.org/html5/webstorage/).
-
-> **API Reference: chrome.experimental.settings (later
-> chrome.extension.settings)**
-
-> **Methods**
-
-> **getSettings**
-
-> chrome.experimental.settings.getSettings(function callback)
-
-> **Parameters**
-
-> ***callback ( function )***
-
-> **Callback function**
-
-> The callback parameter should specify a function that looks like this:
-
-> function(Storage settings) {...}
-
-> **settings ( Storage )**
-
-> **The settings Storage object. It is guaranteed that nothing else will access this (including sync) for the lifetime of the callback.**
-
-> **Events**
-
-> **onSettingsChanged**
-
-> chrome.experimental.settings.onSettingChanged.addListener(function(StorageEvent
-> e) {...});
-
-> Fires when a setting has been changed, either locally or from another browser
-> instance.
-
-> **Parameters**
-
-> **e ( StorageEvent )**
-
-> Details of the setting that was changed.
-
-* The Storage object passed to the getSettings callback behaves very
- similarly to the localStorage object; it is persisted across browser
- restarts and is per-profile. However, any changes made to it may
- eventually be synced to other browser instances with synced turned
- on. Also, the onSettingsChanged event may be fired when changes from
- other browser instances are synced to the local one.
-* No guarantees are made as to how long it takes for changes to
- propagate, or even if they're propagated at all. Sync may be turned
- off, clients may be throttled, and other reasons may prevent or
- delay propagation.
-* Each top-level key-value pair is guaranteed to be synced atomically.
- That is, while settings\["a"\] and settings\["b"\] may be synced
- independently, two clients writing separate values to the same key
- will cause the final state to be either one or the other. However,
- the settings Storage object at worst behaves like another
- localStorage.
-* The storage limits for the settings Storage object are more
- stringent than localStorage; tentatively, it is planned that each
- key/value pair can have a maximum of 16kb, and the total storage for
- an extension cannot exceed 100kb. It is expected that the most
- common use case for this are small pieces of string-like data, e.g.
- settings and preferences.
-* Extension developers must take care not to modify settings too often
- or else they risk being throttled (if they do on the order of
- hundreds or thousands of changes in a 24 hour period).
-* Sync will only kick in after a call to getSettings to propagate any
- changed settings and/or apply any new settings. This means that an
- extension developer has some control on how often sync fires.
-* Uninstalling an extension currently clears all settings data for it.
- (This may be surprising in some cases; we may need to revisit this
- in the future.)
-* This API will have its own manifest permission ("settings") but
- won't trigger a warning.
-
-> Example usage:
-
-> // Imagine an extension that retrieves data from a particular URL.
-
-> chrome.experimental.settings.getSettings(function(settings) {
-
-> // Do initial frobnigation, setting a default value if necessary.
-
-> var dataUrl = settings\["dataUrl"\];
-
-> if (!dataUrl) {
-
-> // This will be propagated to other browser instances after this
-
-> // callback.
-
-> dataUrl = settings\["dataUrl"\] = "http://www.foo.com/mydata";
-
-> }
-
-> doInitialFrobnigate(dataUrl);
-
-> });
-
-> // Do an update every time the dataUrl setting is changed (either
-
-> // locally or remotely).
-
-> chrome.experimental.settings.onSettingChanged.addListener(function(e) {
-
-> if (e.key == "dataUrl") {
-
-> console.info("Changing data URL from " + e.oldValue + " to " + e.newValue);
-
-> doUpdateFrobnigate(e.newValue);
-
-> }
-
-> });
-
-> Example code demonstrating when it's okay to access the settings object:
-
-> chrome.extension.settings.getSettings(function(settings) {
-> // While this callback is being invoked, the extension has exclusive access to
-> the settings.
-> // At other times the extension does not have access. We do this to avoid
-> raciness between
-> // multiple processes manipulating the data concurrently.
-> var foo = settings.foo;
-> settings.foo = foo + 1; // using settings object here is OK
-> window.setTimeout(function() {
-> // This is invalid! The extension no longer has access to |settings|. We need
-> to make it
-> // so that trying to read or write from the settings object after the callback
-> is complete
-> // throws an error.
-> alert(settings.foo);
-> }, 1000);
-> // Access to the extension's settings goes away at the end of this callback.
-> });
-
-**Open questions**
-
-* Is there a need for syncing other types of data, e.g. large pieces
- of data or structured data?
-* Do we need anything for the enterprise use case? It may be useful to
- be able to provide a default settings object and maybe even to mark
- some settings non-editable. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings_pages/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings_pages/index.md
deleted file mode 100644
index a69327c065d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/settings_pages/index.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: settings_pages
-title: Settings pages
----
-
-**Overview**
-
-We want to enable extensions to provide custom settings UI to extend the (more
-and more) minimal settings UI that is build into Chrome.
-
-**Use cases**
-
-Similarly to e.g. browser actions, an extension can define a HTML file in its
-manifest that it wants to be rendered as part of Chrome's settings UI. We
-provide a set of widgets (CSS and JavaScript) that an extension can use to
-render its UI using the same theme as Chrome's settings UI, however, extensions
-are free to display arbitrary UI.
-
-**Could this API be part of the web platform?**
-
-no
-
-**Do you expect this API to be fairly stable?**
-
-The API itself will be stable. We might change/extend the JavaScript/CSS
-provided to render the settings UI in the future, however, I expect that it will
-be possible to do this in a non-breaking way.
-
-**What UI does this API expose?**
-
-An extension using this API can display arbitrary HTML as part of Chrome's
-settings UI.
-
-**How could this API be abused?**
-
-An extension using this API can pretend to e.g. manage your passwords, but
-instead send all passwords you enter to a third-party site. A possible way to
-mitigate this risk would be to disallow all communication with other extension
-pages or network resources from settings page. An extension could also mess up
-your settings, but it already can do so from the background page.
-
-In order to avoid an extension accessing the APIs available to Chrome's settings
-UI, the extension settings page would be rendered in an sandboxed iframe.
-
-**How would you implement your desired features if this API didn't exist?**
-
-An extension could define a browser action or an options page and allow the user
-to configure settings from there. Option pages, however, are meant for settings
-for the extension, not settings for the browser. Browser actions aren't where
-the user expects browser settings either.
-
-**Are you willing and able to develop and maintain this API?**
-
-Yes. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/system-indicator-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/system-indicator-api/index.md
deleted file mode 100644
index dc8ff3aa3ae..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/system-indicator-api/index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: system-indicator-api
-title: System Indicator API
----
-
-**Proposal Date**
-**14 November 2012**
-**Who is the primary contact for this API?**
-**dewittj@**
-**Who will be responsible for this API? (Team please, not an individual)**
-
-**dimich@, dewittj@**
-
-**Overview**
-**This API would serve two main purposes: first, to provide a system-wide status indication, appearing as an icon in the system tray area. Alongside this API, we would extend the chrome.contextMenus API to also control the system indicator context menu.**
-**There is a class of applications that require the ability to let the user know, at a glance, the status of the application, regardless of what else is running on the system. These applications tend to fall into a few classes:**
-
-1. **Apps that wait for incoming events but do not have their own
- windows in the common case - e.g. chat, where a user needs to know
- that everything is OK with the application (online, available
- status) at a glance even when the app is otherwise idle.**
-2. **System status apps - e.g. a WiFi indicator app, which a user will
- check the app when she needs to either determine if a connection has
- been made, or troubleshoot her system**
-3. **Resource usage indicators - e.g. a battery indicator, that inform
- a user’s behavior over a long period of time (do I have x enough
- battery to write this document before finding an outlet? Is my
- battery draining more quickly than usual?)**
-
-**Many applications can use such an API to make it easier for users to interact with their app. An app that requires frequent short interaction, such as a chat app, can make use of this to both create a visual cue that action needs to be taken (such as reading an incoming chat message), and to allow the user to bring into focus any existing chat conversations, or the contact roster panel.**
-**This API exposes an icon whose behavior and support varies across operating systems. Frequently, users are allowed to hide icons; in some cases, such as ChromeOS, there is no appropriate area for such an icon. Accordingly, this API will expose functionality on a best-effort basis. Apps should provide all functionality exposed through this API in other places as well.**
-**[Example usage and
-images](https://docs.google.com/document/d/1QhhfR33Y28Yqnnoa_Sl3fnZK_mKtwt4dZe6kNyJ_MjU/edit)**
-
-**Do you know anyone else, internal or external, that is also interested in this API?**
-**Currently the “Chat for Google” application installs an NPAPI plugin to achieve this functionality. Already, NPAPI plugins are disabled on some systems and their use going forward is being discouraged. This API would allow them to remove their system indicator binary plugin and rely on Chrome APIs instead.**
-**Could this API be part of the web platform?**
-**This API is fundamental to long-running offline applications. As such it is not appropriate for the OWP.**
-**Do you expect this API to be fairly stable? How might it be extended or changed in the future?**
-**This API itself is minimal - only enabling apps to show and hide icons. Because the most complex portions of this feature will be within the chrome.contextMenus API, this API is expected to remain quite stable.**
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-**Multiple apps could indeed use this API at the same time. The system tray has historically been a place that every app wants to have a presence in, despite its extremely limited real estate. This will be mitigated by restricting apps to one indicator icon (or zero).**
-**List every UI surface belonging to or potentially affected by your API:**
-**This API would affect the system indicator area appropriate to each platform (OSX: the menu bar, Windows and Linux: the system tray), by adding an icon and exposing a menu on click.**
-**Actions taken with extension APIs should be obviously attributable to an extension. Will users be able to tell when this new API is being used? How?**
-**Icons used for this menu will be distributed with the extension, and there will be hovertext over the icon that shows the app’s name.**
-**How could this API be abused?**
-**This API could be abused by creating functionality that is only exposed through the menus or click event of the system tray. Since not all platforms support it, this would create a highly inaccessible and inconsistent experience across platforms. Additionally this API could be used to incessantly attract user attention.**
-**Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):**
-**1) I could pretend to be an application that I’m not**
-**2) I could write a bunch of extensions that all take icon space in the indicator area**
-**3) I could create distracting icons and constantly draw the user’s attention to my app.**
-**What security UI or other mitigations do you propose to limit evilness made possible by this new API?**
-
-* **We will require that the hovertext of this icon be the app’s name
- to prevent spoofing**
-* **Other evil acts would best be mitigated by uninstalling an
- offending app.**
-
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-**This API should not leave anything behind. The indicator icon will only be visible when the app is listening for messages, so removing the app will prevent any indicator from being shown.**
-**How would you implement your desired features if this API didn't exist?**
-**Currently the way to do this is via NPAPI plugins.**
-**Draft Manifest Changes**
-**This will require a new ‘systemIndicator’ permission so that users know that they’re volunteering access to the system indicator area.**
-**Draft API spec**
-*// Manages an app's system indicator icon, an image displayed in the system's
-// menubar, system tray, or other visible area provided by the OS. namespace
-systemIndicator {*
-
-*dictionary SetIconDetails {*
-
-*// Path should be either a string representing an icon loaded with the app
-manifest,*
-
-*// or a dictionary representing multiple resolutions of the same icon that are
-to*
-
-*// be used on systems with different icon sizes, or DPI scaling factors.*
-
-*any? path;*
-
-*// ImageData should be either a single ImageData object (typically from a
-canvas*
-
-*// element) or a dictionary representing multiple resolutions of the same icon.
-any? imageData; }; callback DoneCallback = void (); interface Functions { // Set
-the image to be used as an indicator icon, using a set of ImageData // objects.
-These objects should have multiple resolutions so that an // appropriate size
-can be selected for the given icon size and DPI scaling // settings. Only square
-ImageData objects are accepted. static void setIcon(SetIconDetails details,
-optional DoneCallback callback); // Show the icon in the status tray. static
-void enable(optional DoneCallback callback); // Hide the icon from the status
-tray. static void disable(optional DoneCallback callback); }; interface Events {
-// Fired only when a click on the icon does not result in a menu being // shown.
-static void onClicked(); }; };*
-
-Open questions
-
-* System indicator areas are slowly being removed from each operating
- system. Win8 Metro doesn’t have one at all, and ChromeOS’ area is
- restricted to a few explicitly allowed native applications. How will
- the functionality from this API be exposed if this trend continues?
- Currently we are treating this API as providing an optional service
- that should not break functionality of the app if the icon and menu
- fail to display on a user’s system.
-* Different operating systems have different human interface
- guidelines for icons appearing in the status area. For example, Mac
- OS icons in the title bar area are typically black and white. How
- should this difference be exposed to the API consumer? \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/systeminfo/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/systeminfo/index.md
deleted file mode 100644
index afb28dccd30..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/systeminfo/index.md
+++ /dev/null
@@ -1,315 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: systeminfo
-title: SystemInfo Extension API
----
-
-Intel Open Technology Center
-
-[hongbo.min@intel.com,](mailto:hongbo.min@intel.com,)
-[ningxin.hu@intel.com](mailto:ningxin.hu@intel.com),
-[james.p.ketrenos@intel.com](mailto:james.p.ketrenos@intel.com)
-
-## Overview
-
-This API is intended to provide extension with a set of interfaces to get
-hardware devices information, such as CPU and memory status, OS information,
-disk storage and network state etc.
-
-The followings are some typical usage cases of SystemInfo API but not limited to
-these:
-
-1. An extension or packaged app can query the number of processors to
- determine the optimal number of WebWork to be created.
-2. An extension or packaged app can decide which binary should be
- downloaded and used according to the CPU architecture, e.g. NaCl
- module.
-3. An extension can check if there is enough storage space to a huge
- file before downloading it from Internet.
-4. An extension or packaged app can popup a media gallery app if the
- new storage attached is a MTP-compatible device.
-5. A packaged app is allowed to create app window on the external
- display with display information.
-
-#### SystemInfo in W3C
-
-The SysApps Working Group is working on defining a set of System-Level API for
-web application, including [Device Capabilities
-API](http://device-capabilities.sysapps.org/). The purpose is the same as
-SystemInfo extension API which allows web app to access system information.
-
-## Design and Considerations
-
-### Namespace and Permission
-
-The namespace for SystemInfo API is `chrome.system`, and currently has the
-following categories:
-
-* chrome.system.cpu
-* chrome.system.storage
-* chrome.system.memory
-* chrome.system.display
-* …
-
-Obviously, the `chrome.system` namespace can be easily extended in future if a
-new system level API is introduced. The corresponding permission is also simple
-and straightforward:
-
-* system.cpu
-* system.storage
-* system.memory
-* system.display
-
-### Implementation Notes
-
-The design goals of the new SystemInfo extension API introduction are:
-
-1. No need to pay the additional overhead if an extension or packaged
- app won't need to query system information at, e.g. no extra memory
- footprint at runtime.
-2. Efficiently handle too-frequent querying operation. Although it
- seems a corner case since few app will query the same information
- repeatly, we take it into consideration to avoid such an exception
- and make Chrome much robust.
-
-A base class `SystemInfoProvider `is abstracted away for every system
-information retrieval. It will:
-
-1. Maintain a callback queue for the incoming query request;
-2. Post the query operation to non-UI thread. The logic of how to query
- the requested information is implemented in each derived class of
- `SystemInfoProvider`;
-3. Forward the query result to each callback in the queue once the
- query is completed
-
-In order to satisfy the minimal overhead required by design goal, each app using
-the API won't pay for what it don't use, the lifetime of each concrete
-`SystemInfoProvider `implementation is
-
-1. Created on demand. This mean the instance should be only created
- when it is needed
-2. Singleton instance. All apps using this API can share one
- InfoProvider.
-
-Currently, we have `CpuInfoProvider `for `system.cpu` API set implementation,
-`StorageInfoProvider `for `system.display`, `DisplayInfoProvider `for
-`system.display`, and `MemoryInfoProvider `for `system.memory`.
-
-## Extension API IDL
-
-### CPU Info API
-
-` dictionary CpuInfo {`
-` // The number of logical processors.`
-` long numOfProcessors;`
-` // The architecture name of the processors.`
-` DOMString archName;`
-` // The model name of the processors.`
-` DOMString modelName;`
-` };`
-` callback CpuInfoCallback = void (CpuInfo info);`
-` interface Functions {`
-` // Queries basic CPU information of the system.`
-` static void getInfo(CpuInfoCallback callback);`
-` };`
-
-### Storage Info API:
-
-`enum StorageUnitType {`
-` // The storage has fixed media, e.g. hard disk or SSD.`
-` fixed,`
-` // The storage is removable, e.g. USB flash drive.`
-` removable,`
-` // The storage type is unknown.`
-` unknown`
-` };`
-` dictionary StorageUnitInfo {`
-` // The unique storage id. It will use the transient ID.`
-` DOMString id;`
-` // The name of the storage unit.`
-` DOMString name;`
-` // The media type of the storage unit.`
-` StorageUnitType type;`
-` // The total amount of the storage space, in bytes.`
-` // Default value is 0 if query operation fails.`
-` double capacity;`
-` };`
-` enum EjectDeviceResultCode {`
-` // The ejection command is successful -- the application can prompt the user`
-` // to remove the device.`
-` success,`
-` // The device is in use by another application. The ejection did not`
-` // succeed; the user should not remove the device until the other`
-` // application is done with the device.`
-` in_use,`
-` // There is no such device known.`
-` no_such_device,`
-` // The ejection command failed.`
-` failure`
-` };`
-` callback StorageInfoCallback = void (StorageUnitInfo[] info);`
-` callback EjectDeviceCallback = void (EjectDeviceResultCode result);`
-
-` callback GetAvailableCapabilityCallback = void (double availableCapability);`
-
-` interface Functions {`
-` // Get the storage information from the system. The argument passed to the`
-` // callback is an array of StorageUnitInfo objects.`
-` static void getInfo(StorageInfoCallback callback);`
-` // Ejects a removable storage device.`
-` // Note: We plan to move this function into a namespace that indicates it`
-` // that modifies the state of the system rather than just gathering`
-` // information.`
-` static void ejectDevice(DOMString id, EjectDeviceCallback callback);`
-` };`
-` interface Events {`
-` // Fired when a new removable storage is attached to the system.`
-` static void onAttached(StorageUnitInfo info);`
-` // Fired when a removable storage is detached from the system.`
-` static void onDetached(DOMString id);`
-
-` // Get the available capability, in bytes`
-` static void getAvailableCapacity(DOMString id, GetAvailableCapabilityCallback
-callback);`
-
-` };`
-
-### Memory Info API
-
-` dictionary MemoryInfo {`
-` // The total amount of physical memory capacity, in bytes.`
-` double capacity;`
-` // The amount of available capacity, in bytes.`
-` double availableCapacity;`
-` };`
-` callback MemoryInfoCallback = void (MemoryInfo info);`
-` interface Functions {`
-` // Get physical memory information.`
-` static void getInfo(MemoryInfoCallback callback);`
-` };`
-
-### Display Info API
-
-` dictionary Bounds {`
-` // The x-coordinate of the upper-left corner.`
-` long left;`
-` // The y-coordinate of the upper-left corner.`
-` long top;`
-` // The width of the display in pixels.`
-` long width;`
-` // The height of the display in pixels.`
-` long height;`
-` };`
-` dictionary Insets {`
-` // The x-axis distance from the left bound.`
-` long left;`
-` // The y-axis distance from the top bound.`
-` long top;`
-` // The x-axis distance from the right bound.`
-` long right;`
-` // The y-axis distance from the bottom bound.`
-` long bottom;`
-` };`
-` dictionary DisplayUnitInfo {`
-` // The unique identifier of the display.`
-` DOMString id;`
-` // The user-friendly name (e.g. "HP LCD monitor").`
-` DOMString name;`
-` // Identifier of the display that is being mirrored on the display unit.`
-` // If mirroring is not in progress, set to an empty string.`
-` // Currently exposed only on ChromeOS. Will be empty string on other`
-` // platforms.`
-` DOMString mirroringSourceId;`
-` // True if this is the primary display.`
-` boolean isPrimary;`
-` // True if this is an internal display.`
-` boolean isInternal;`
-` // True if this display is enabled.`
-` boolean isEnabled;`
-` // The number of pixels per inch along the x-axis.`
-` double dpiX;`
-` // The number of pixels per inch along the y-axis.`
-` double dpiY;`
-` // The display's clockwise rotation in degrees relative to the vertical`
-` // position.`
-` // Currently exposed only on ChromeOS. Will be set to 0 on other platforms.`
-` long rotation;`
-` // The display's logical bounds.`
-` Bounds bounds;`
-` // The display's insets within its screen's bounds.`
-` // Currently exposed only on ChromeOS. Will be set to empty insets on`
-` // other platforms.`
-` Insets overscan;`
-` // The usable work area of the display within the display bounds. The work`
-` // area excludes areas of the display reserved for OS, for example taskbar`
-` // and launcher.`
-` Bounds workArea;`
-` };`
-` dictionary DisplayProperties {`
-` // If set and not empty, starts mirroring between this and the display with`
-` // the provided id (the system will determine which of the displays is`
-` // actually mirrored).`
-` // If set and not empty, stops mirroring between this and the display with`
-` // the specified id (if mirroring is in progress).`
-` // If set, no other parameter may be set.`
-` DOMString? mirroringSourceId;`
-` // If set to true, makes the display primary. No-op if set to false.`
-` boolean? isPrimary;`
-` // If set, sets the display's overscan insets to the provided values. Note`
-` // that overscan values may not be negative or larger than a half of the`
-` // screen's size. Overscan cannot be changed on the internal monitor.`
-` // It's applied after <code>isPrimary</code> parameter.`
-` Insets? overscan;`
-` // If set, updates the display's rotation.`
-` // Legal values are [0, 90, 180, 270]. The rotation is set clockwise,`
-` // relative to the display's vertical position.`
-` // It's applied after <code>overscan</code> paramter.`
-` long? rotation;`
-` // If set, updates the display's logical bounds origin along x-axis. Applied`
-` // together with <code>boundsOriginY</code>, if <code>boundsOriginY</code>`
-` // is set. Note that, when updating the display origin, some constraints`
-` // will be applied, so the final bounds origin may be different than the one`
-` // set. The final bounds can be retrieved using $ref:getInfo.`
-` // The bounds origin is applied after <code>rotation</code>.`
-` // The bounds origin cannot be changed on the primary display. Note that is`
-` // also invalid to set bounds origin values if <code>isPrimary</code> is`
-` // also set (as <code>isPrimary</code> parameter is applied first).`
-` long? boundsOriginX;`
-` // If set, updates the display's logical bounds origin along y-axis.`
-` // See documentation for <code>boundsOriginX</code> parameter.`
-` long? boundsOriginY;`
-` };`
-` callback DisplayInfoCallback = void (DisplayUnitInfo[] displayInfo);`
-` callback SetDisplayUnitInfoCallback = void();`
-` interface Functions {`
-` // Get the information of all attached display devices.`
-` static void getInfo(DisplayInfoCallback callback);`
-` // Updates the properties for the display specified by |id|, according to`
-` // the information provided in |info|. On failure, $ref:runtime.lastError`
-` // will be set.`
-` // |id|: The display's unique identifier.`
-` // |info|: The information about display properties that should be changed.`
-` // A property will be changed only if a new value for it is specified in`
-` // |info|.`
-` // |callback|: Empty function called when the function finishes. To find out`
-` // whether the function succeeded, $ref:runtime.lastError should be`
-` // queried.`
-` static void setDisplayProperties(`
-` DOMString id,`
-` DisplayProperties info,`
-` optional SetDisplayUnitInfoCallback callback);`
-` };`
-` interface Events {`
-` // Fired when anything changes to the display configuration.`
-` static void onDisplayChanged();`
-` };` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/text-translate-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/text-translate-api/index.md
deleted file mode 100644
index 1ddd0c044af..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/text-translate-api/index.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: text-translate-api
-title: Text Translate API
----
-
-## Problem
-
-Extension developers would like to be able to translate the text of pages.
-Transforming arbitrary DOM trees into blocks of text of suitable length for
-translation is hard, and potentially time consuming if done naively. Noticing
-dynamic updates to the page is also difficult to do correctly. Also, modifying
-the content of text nodes may confuse some web applications who weren't
-expecting mutation events to occur (this is probably a minor problem though).
-
-## Proposal
-
-Expose an API that can feed an extension process blocks of text to translate.
-Chromium takes care of the hard work of creating nice blocks of text, removing
-html tags, noticing dynamic updates, handling races between the extension and
-renderer process, and modifying the text of the page in the most compat-friendly
-way.
-
-The extension just has to translate and return the text when requested.
-
-## API
-
-chrome.textTranslate
-
-// Start translating text for the specified tab. The callback gets called
-
-// repeatedly until stop() is called. Each time it is called it will pass
-
-// a block of text that needs translating.
-
-// NOTE: tab.documentId doesn't yet exist and needs to be added.
-
-void start(int tabId, int documentId, void callback(int blockId, string text))
-
-// The extension should call this function when a block of text has been
-
-// translated.
-
-void updateBlock(int blockId, string translatedText))
-
-// Stop translating text for a tab.
-
-void stop(int tabId, int documentId)
-
-## Example Usage
-
-// Start translating
-
-chrome.tabs.getCurrent(null, function(tab) {
-
-chrome.textTranslate.start(tab.id, tab.documentId, translate);
-
-});
-
-function translate(blockId, text) {
-
-var req = new XMLHttpRequest();
-
-req.open("POST", "http://www.google.com/sometranslateservice", false);
-
-req.onreadystatechange = function() {
-
-if (req.readyState == 4) {
-
-chrome.textTranslate.updateBlock(blockId, req.responseText);
-
-}
-
-}
-
-req.send(null);
-
-}
-
-## Implementation Details
-
-TODO: Flesh this area out Here are some ideas:
-
-* It seems reasonable for a "block" to just be any block-level
- element, such as "div", and "p".
-* Invalidation should happen on a block level. So if a text node
- inside a block changes, the whole block is retranslated. But if a
- parent node of a block changes, the block is not retranslated.
-* There will have to be code in the renderer tracking outstanding
- translate requests so that they can be abandoned if the related
- blocks change.
-* If possible, we should do the text modification at the CSS layer in
- webcore so that it is not visible to the web page (similar to how
- text-transform is implemented today). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/usb-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/usb-api/index.md
deleted file mode 100644
index 02024fe7ec3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/usb-api/index.md
+++ /dev/null
@@ -1,416 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: usb-api
-title: USB API
----
-
-Proposal Date
-
-March 7th, 2012
-Who is the primary contact for this API?
-gdk@chromium.org
-Who will be responsible for this API? (Team please, not an individual)
-
-Apps Extension API Team
-
-Overview
-The USB API aims to provide access to fundamental low-level USB operations from
-within the context of an extension.
-Use cases
-
-- Devices which require third-party drivers to function in ChromeOS are
-currently unusable. One of the use cases for this API would be to provide the
-ability for a Chrome extension to function as a device driver and allow
-previously unusable devices to be used under ChromeOS.
-
-- Conversely, this would also allow device driver implementors to be able to
-quickly deploy new driver versions to applications which are written within
-Chrome that make use of USB functionality, instead of depending on writing
-platform-dependent code.
-Do you know anyone else, internal or external, that is also interested in this
-API?
-Not yet.
-Could this API be part of the web platform?
-
-Maybe. This API has the potential to be very controversial, and I believe there
-are people within the standards organization that would not back it.
-
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-
-The API should remain fairly stable, as the fundamental mechanism for
-interacting with USB devices is standardized and does not change. This API will
-surface the underlying USB mechanisms for communication, and so itself should
-not need to change.
-
-List every UI surface belonging to or potentially affected by your API:
-
-- The extension installation dialog box (potentially). There should be a
-mechanism for informing users about the kinds of USB devices that an extension
-wishes to access, and this information should be surfaced.
-
-How could this API be abused?
-
-- This API could be used (without per-extension VID/PID lockdown) to map the
-devices attached to a computer, thereby gaining knowledge outside of the scope
-of the extension.
-
-- This API could be used to cause physical devices to damage themselves or their
-surroundings. I've yet to see a printer catch fire due to software commands, but
-I would not rule the possibility out, for example.
-
-Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you
-could commit with your API (if you’ve got good ones, feel free to add more):
-1) Use a USB-attached device to cause physical harm.
-2) Cause permanent harm to a USB device.
-3) TODO.
-Alright Doctor, one last challenge:
-Could a consumer of your API cause any permanent change to the user’s system
-using your API that would not be reversed when that consumer is removed from the
-system?
-
-Yes. There are circumstances where a USB device could be put into a bad state
-(or frozen entirely!) that may be impossible to restore to a pristine state
-without physically reconnecting the device. The attached devices could also, for
-example, themselves leave a physical trace. A printer driver could print a page,
-a CD writer could write a disc, a robot karate arm could break a table, etc.
-
-How would you implement your desired features if this API didn't exist?
-
-By writing code that used libusb and then surfacing some form of WebSocket
-interface that would allow a client to communicate with my device-specific
-server.
-
-Draft API spec
-
-## API reference: chrome.experimental.usb
-
-### Methods
-
-#### bulkTransfer
-
-chrome.experimental.usb.bulkTransfer(integer device, string direction,integer
-endpoint, string data, function callback)
-
-Performs a USB bulk transfer to the specified device.
-
-#### Parameters
-
-device
-
-*( integer )*
-
-A device handle on which the transfer is to be made.
-
-direction
-
-*( string )*
-
-The direction of the control transfer. "in" for an inbound transfer, "out" for
-an outbound transfer.
-
-endpoint
-
-*( integer )*
-
-The endpoint to which this transfer is being made.
-
-data
-
-*( string )*
-
-(TODO(gdk): ArrayBuffer) The bulk data payload for this transfer.
-
-callback
-
-*( optional function )*
-
-A callback to be invoked with the results of this transfer.
-
-#### Callback function
-
-If you specify the *callback* parameter, it should specify a function that looks
-like this:
-
-function(object result) {...};
-
-result
-
-*( object )*
-
-data
-
-*( optional string )*
-
-(TODO(gdk): ArrayBuffer) If the transfer results in inbound data, it is returned
-here.
-
-result
-
-*( integer )*
-
-On success, 0 is returned. On failure, -1.
-
-#### closeDevice
-
-chrome.experimental.usb.closeDevice(integer device, undefined callback)
-
-Close a USB device handle.
-
-#### Parameters
-
-device
-
-*( integer )*
-
-The device handle to be closed.
-
-callback
-
-*( optional function )*
-
-A callback function that is invoked after the device has been closed.
-
-#### controlTransfer
-
-chrome.experimental.usb.controlTransfer(integer device, string direction, string
-recipient, string type,integer request, integer value, integer index, string
-data, function callback)
-
-Performs a USB control transfer to the specified device.
-
-#### Parameters
-
-device
-
-*( integer )*
-
-A device handle on which the transfer is to be made.
-
-direction
-
-*( string )*
-
-The direction of the control transfer. "in" for an inbound transfer, "out" for
-an outbound transfer.
-
-recipient
-
-*( string )*
-
-The intended recipient of this message. Must be one of "device", "interface",
-"endpoint" or "other".
-
-type
-
-*( string )*
-
-The type of this request. Must be one of "standard", "class", "vendor" or
-"reserved".
-
-request
-
-*( integer )*
-
-value
-
-*( integer )*
-
-index
-
-*( integer )*
-
-data
-
-*( string )*
-
-(TODO(gdk): ArrayBuffer) The data payload carried by this transfer.
-
-callback
-
-*( optional function )*
-
-An optional callback that is invoked when this transfer completes.
-
-#### Callback function
-
-If you specify the *callback* parameter, it should specify a function that looks
-like this:
-
-function(object result) {...};
-
-result
-
-*( object )*
-
-data
-
-*( optional string )*
-
-(TODO(gdk): ArrayBuffer) If the transfer is inbound, then this field is
-populated with the data transferred from the device.
-
-result
-
-*( integer )*
-
-On success, 0 is returned. On failure, -1.
-
-#### createContext
-
-chrome.experimental.usb.createContext(function callback)
-
-Creates a USB context by which devices may be found.
-
-#### Parameters
-
-callback
-
-*( function )*
-
-#### Callback function
-
-The callback *parameter* should specify a function that looks like this:
-
-function(integer result) {...};
-
-result
-
-*( integer )*
-
-The handle to the created context. On failure, -1.
-
-#### destroyContext
-
-chrome.experimental.usb.destroyContext(integer context)
-
-Disposes of a context that is no longer needed. It is not necessary that this
-call be made at all, unless you want to explicitly free the resources associated
-with a context.
-
-#### Parameters
-
-context
-
-*( integer )*
-
-#### findDevice
-
-chrome.experimental.usb.findDevice(integer context, integer vendorId, integer
-productId, function callback)
-
-Locates an instance of the device specified by its vendor and product
-identifier.
-
-#### Parameters
-
-context
-
-*( integer )*
-
-A handle to a USB context.
-
-vendorId
-
-*( integer )*
-
-The vendor ID of the device to search for.
-
-productId
-
-*( integer )*
-
-The product ID of the device to search for.
-
-callback
-
-*( function )*
-
-#### Callback function
-
-The callback *parameter* should specify a function that looks like this:
-
-function(integer result) {...};
-
-result
-
-*( integer )*
-
-On success, the handle to the found USB device. On failure, -1.
-
-#### interruptTransfer
-
-chrome.experimental.usb.interruptTransfer(integer device, string direction,
-integer endpoint, string data,function callback)
-
-Performs a USB interrupt transfer to the specified device.
-
-#### Parameters
-
-device
-
-*( integer )*
-
-A device handle on which the transfer is to be made.
-
-direction
-
-*( string )*
-
-The direction of the control transfer. "in" for an inbound transfer, "out" for
-an outbound transfer.
-
-endpoint
-
-*( integer )*
-
-The endpoint to which this transfer is being made.
-
-data
-
-*( string )*
-
-(TODO(gdk): ArrayBuffer) The interrupt data payload for this transfer.
-
-callback
-
-*( optional function )*
-
-A callback to be invoked with the results of this transfer.
-
-#### Callback function
-
-If you specify the *callback* parameter, it should specify a function that looks
-like this:
-
-function(object result) {...};
-
-result
-
-*( object )*
-
-data
-
-*( optional string )*
-
-(TODO(gdk): ArrayBuffer) If the transfer results in inbound data, it is returned
-here.
-
-result
-
-*( integer )*
-
-On success, 0 is returned. On failure, -1.
-
-Open questions
-Note any unanswered questions that require further discussion. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webnavigation-v2/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webnavigation-v2/index.md
deleted file mode 100644
index 87a60e678b7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webnavigation-v2/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: webnavigation-v2
-title: webNavigation v2
----
-
-**Proposal Date**
-
-*2012-06-14*
-
-Who is the primary contact for this API?
-*jochen@*
-
-Who will be responsible for this API? (Team please, not an individual)
-
-*jochen@, mpcomplete@*
-
-Overview
-*Now that the webNavigation API is released for a while, I learned about certain
-short-comings I'd like to fix. This proposal captures the required additions /
-changes to the current webNavigation API.*
-
-Use cases
-
-* Currently, if a page is pre-rendered, and you navigate to that page,
- the navigation is aborted, and the page magically is there (without
- further visible webNavigation events). The next version of the
- webNavigation API should indicate when a prerendered page is swapped
- in.
-* *If a navigation crosses a process boundary, the tuple (tab ID,
- frame ID) is no longer unique, but there might be two frames with
- the same ID navigating for the same tab, but in two different
- processes. Also, the frame ID of the main frame might change during
- a provisional load. It seems that we can't hide these details of our
- process model (without considerable effort). The next version should
- allow for updating frame IDs during provisional loads, and have a
- truly unique identifier for frames.*
-
-Do you know anyone else, internal or external, that is also interested in this
-API?
-*There were bug reports filed about this: <http://crbug.com/116643>
-<http://crbug.com/117043>*
-
-Could this API be part of the web platform?
-*No, it's just an extension of an existing API*
-
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-When we add new fancy navigation features (e.g. similar to prerendering), the
-API might need to be extended again.
-
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-No*
-List every UI surface belonging to or potentially affected by your API:
-None
-**Actions taken with extension APIs should be obviously attributable to an
-extension. Will users be able to tell when this new API is being used? How?**
-
-*The API is only observing events, there should be no observable impact.*
-
-**How could this API be abused?**
-**The API can be used to monitor each and every navigation, but that's already possible with v1.**
-**Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):**
-**1) observe each and every navigation, send it to some 3rd-party server**
-**2) ...**
-**3) profit**
-What security UI or other mitigations do you propose to limit evilness made possible by this new API?**
-*The webNavigation API already triggers a warning at install time.*
-Alright Doctor, one last challenge:**
-Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-No
-How would you implement your desired features if this API didn't exist?
-*You could guess that a page is being prerendered, or try to work around
-duplicate frame IDs.*
-Draft API spec
-All existing events and methods that take or return a frame ID will in addition
-take a process ID. A frame is then uniquely identified by the tripple (tab id,
-process id, frame id).
-
-The onCommitted signal's documentation is updated to state that the frame ID and
-process ID might have changed since the onBeforeNavigate signal.
-
-Furthermore, this new event is introduced. :
-
-**onReplacedTab**
-
-chrome.webNavigation.onReplacedTab.addListener(function (object details) { ...
-});
-
-Fired when a navigation is aborted, and instead a prerendered tab is swapped in.
-
-Listener parameters
-
-details (object)
-
-sourceTabId (integer)
-
-The ID of the tab being replaced
-
-tabId (integer)
-
-The ID of the tab replacing the sourceTabId
-
-timeStamp (number)
-
-The time when the browser was about to replace the tab in milliseconds since the
-epoch.
-
-Open questions
-The proposed changes are "breaking changes" as an extension using v1 of the API
-will still experience the above referenced bugs. Is that ok? \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/TabCaptureStates.png.sha1 b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/TabCaptureStates.png.sha1
deleted file mode 100644
index c27f07d5449..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/TabCaptureStates.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d1a2221d9e09a5acdb6de83815ae0154c6b7de61 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/index.md
deleted file mode 100644
index ca0ef8f2016..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture/index.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: webrtc-tab-content-capture
-title: Tab Content Capture into MediaStreams
----
-
-**\*\* This launched as of Chrome 31. Documentation:
-https://developer.chrome.com/extensions/tabCapture \*\***
-
-**Proposal Date**
-**August 14th, 2012**
-
-**Who is the primary contact for this API?**
-**mfoltz@chromium.org**
-
-**Who will be responsible for this API? (Team please, not an individual)**
-
-**[mfoltz@](mailto:mfoltz@google.com)chromium.org, [keiger@google.com](mailto:keiger@google.com), [markdavidscott@google.com](mailto:markdavidscott@google.com)**
-
-****Overview****
-****The proposed APIs enable tab output to be captured as a media stream, and transmitted using WebRTC. Supporting APIs are also defined to notify and query the capture status for tabs.****
-****Use cases****
-****This API enables a special form of screencasting, but in which users are able to share the contents of a tab rather than sharing their entire desktop. This avoids a number of issues with desktop sharing, such as the presence of icons, taskbars, window chrome, pop-ups, and other elements that it is often not desirable (or in some cases, even embarassing - e.g. when a new mail notification or IM shows up for all to see) to share.****
-****This API also enables the creation of WebRTC-based screencasting approaches, allowing the receiver of such content to run in a standard browser, entirely plug-in (and extension) free.****
-****Versus desktop screencasting, this API enables multitasking use cases, since switching active tabs doesn’t impact the content that’s being transmitted.****
-****Finally, this can later enable multi-screen applications that function by creating multiple tabs with one or more of those tabs being screencast for display on a different surface.****
-
-****Do you know anyone else, internal or external, that is also interested in this API?****
-****We are aware of 3 projects at Google that have an interest in this functionality, and believe that it will be externally interesting to many others.****
-
-****Could this API be part of the web platform?****
-****We believe that this functionality is useful both for extensions and the open web - but they are independently useful for each.****
-****The extension approach to these APIs, proposed here, allows for the capture of the contents of any tab, without any updates needed to the content displayed in the tab. Thus, any existing content or application can be accommodated.****
-****By contrast, a web platform approach (which we hope to pursue later after proving the approach here) is also useful, but needs significantly more restrictions around security and privacy (e.g. limiting access to elements that are owned by the site calling the API). This lends to a different set of use cases (e.g. the multiscreen cases).****
-****We believe that extension API work and experience will help in making a better proposal for the open web in the relatively near future.****
-
-****Do you expect this API to be fairly stable? How might it be extended or changed in the future?****
-****Yes, we believe that this API will be fairly stable, since it is modelled after an existing API (getUserMedia) and has narrowly defined semantics.****
-****Extensions or changes to incorporate other capture scopes - e.g.
-window-level or desktop-level - is possible but should not result in significant
-changes to the API.****
-
-****If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?****
-****Nothing inherently prevents multiple tabs from being captured independently,
-but there may be implementation limits on how many tabs can be captured
-simultaneously (and in our initial implementation, we believe that capturing 1
-tab is sufficient). To address this, the proposed API includes a notification to
-indicate when tab capture status changes so we can notify an application if a
-tab is no longer being captured due to a newer conflicting action.****
-
-****List every UI surface belonging to or potentially affected by your API:****
-****The proposed APIs don’t expose any new UI surfaces to extensions. It is
-proposed that we provide a visual indication to the user when a tab is being
-captured, though the exact design for this is still under consideration. One
-proposed approach is a color or animation on the tab itself or its favicon,
-another is use of the existing mechanism used by WebRTC to indicate when camera
-capture is active (this may be preferred for consistency).****
-
-****Actions taken with extension APIs should be obviously attributable to an extension. Will users be able to tell when this new API is being used? How?****
-****Per the above, we plan to have a visual indicator of the tab(s) being
-captured. Hovering over this indicator will indicate which extension is
-performing the capture.****
-
-****How could this API be abused?****
-****From a security/privacy perspective, since this API enables tab contents to be captured, it could be used to capture user browsing and to send that as a video stream to an external site. However, since we require the tabs permission, this is not substantively different from capturing the HTML/JS content of a tab (in fact, it’s less effective than the latter). It’s also no more sensitive than the tab snapshot API in terms of what it has access to.****
-****From a security perspective, creating a video stream that’s targetted at an arbitrary destination coud be used in DDOS-type attacks, though this is not significantly more effective than sending a large number of HTTP requests or transmitting a large binary file.****
-****From a performance perspective, too many simultaneous tabs being captured could impact performance. To mitigate this, we plan to limit the number of tabs that can be captured simultaneously (starting with a value of 1).****
-****Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):****
-****1) Per prior answer, scrape screen and send it to a malicious site.****
-****2) Per prior answer, create “fake” video stream and use it for DDOS attack.****
-****3) Per prior answer, create a bunch of bogus tab captures and send them somewhere meaningless, in an attempt to waste resources and trigger a crash.****
-****What security UI or other mitigations do you propose to limit evilness made possible by this new API?****
-****Per the above, we’re proposing a visual indicator for tabs that are being captured which identifies the extension performing the capture, and to ensure that the user is aware that capture is ongoing.****
-****Alright Doctor, one last challenge:****
-****Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?****
-****No; no permanent changes are possible as a result of the proposed API.****
-****How would you implement your desired features if this API didn't exist?****
-****Existing alternatives depending on building native applications or using dangerous NPAPI plug-ins with full system access.****
-****Draft Manifest Changes****
-****At this point in time, we believe that the tabs permission is sufficient.
-We’re very open to input and advice on this, though!****
-
-****Draft API spec****
-
-****getTabMedia****
-****chrome.experimental.capture.getTabMedia(integer tabId,****
-****object options, function callback)****
-****Captures the visible area of the tab with the given tabId. Extensions must have the host permission for the given tab as well as the “tabs” permission to use this method.****
-****Parameters:****
-****tabId (optional integer): The tabId of the tab to capture. Defaults to the active tab.****
-****options (optional object): Configures the returned media stream.****
-****video (boolean): Whether to return video (default true)****
-****audio (boolean): Whether to return audio (default true)****
-
-****callback (function): Called when the media stream is ready.****
-
-****Callback function:****
-****function (stream)****
-****stream (optional LocalMediaStream): The LocalMediaStream that was created, or null if no stream was created. chrome.extension.lastError will be set if the stream could not be created (see below)****
-****Errors:****
-
-* ****“Permission Denied” - The user did not grant permission for the
- tab to be captured****
-* ****“Busy” - Capture resources are occupied by an existing capture
- operation (i.e., we can’t capture two tabs at once)****
-* ****“Closed” - The tab was closed before the media stream could be
- created.****
-
-****See below for details on the LocalMediaStream structure.****
-
-****onTabCaptured****
-****chrome.experimental.capture.onTabCaptured.addListener(****
-****function(object captureInfo) { ... })****
-****Event fired when the capture status of a tab changes. This allows extension authors to keep track of the capture status of tabs, to keep UI elements like page actions and infobars in sync.****
-****Parameters:****
-****captureInfo (object): Details of the change.****
-****tabId (integer): The id of the tab whose status changed.****
-****status (string): The new capture status of the tab, one of “requested”, “cancelled”, “pending”, “active”, “muted”, “stopped”****
-****Status state diagram is attached.****
-
-****getCapturedTabs****
-****chrome.experimental.capture.getCapturedTabs(function callback)****
-****Returns a list of tabs that have requested capture or are being captured, i.e. status != stopped and status != cancelled. This allows extensions to inform the user that there is an existing tab capture that would prevent a new tab capture from succeeding (or, to prevent redundant requests for the same tab).****
-****Callback function:****
-****function(&lt;array of CaptureInfo&gt; result) { ... }****
-****CaptureInfo is as specified above.****
-****Open questions****
-****- Confirm permissions approach stated above****
-****- Can a WebKit object be returned through an extension API?****
-****- Control over aspect ratio, clipping, scaling of resulting media?**** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/window-management/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/window-management/index.md
deleted file mode 100644
index 8f85bb917ee..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apis-under-development/window-management/index.md
+++ /dev/null
@@ -1,218 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/apis-under-development
- - API Proposals (New APIs Start Here)
-page_name: window-management
-title: Window Management
----
-
-Proposal Date
-
-August 3rd, 2012
-Who is the primary contact for this API?
-sadrul@google.com
-Who will be responsible for this API? (Team please, not an individual)
-
-sadrul@, reveman@
-
-Overview
-Using this API, an extension will be able to (1) manage the positioning of the
-window (including size, transform etc.), (2) perform window operations (e.g.
-close, minimize etc.), (3) handle some input events for window management
-purposes (e.g. install custom keyboard/mouse/gesture bindings etc.), and (4)
-apply custom window decorations. This is primarily targeted for ChromeOS (to be
-more specific, the primary target is the Ash desktop environment used in
-ChromeOS. Ash is expected to be used on Windows too at some point, and the
-expectation/hope is that this API will work there too). [Design
-doc](https://docs.google.com/a/chromium.org/document/d/1szxvr95ymXNbJfpHfVmtcglr-F2bAgokxbZR_quVwY8/edit)
-
-Use cases
-
-* **Useful especially for developers**: A lot of the developers use a
- window manager that allows managing the finer details of window
- management using some scripting language. On ChromeOS, using an app
- for doing the same would be very useful. (Specifically if/when ash
- is used on linux platforms: see
- <https://chromiumcodereview.appspot.com/10789018/>)
-* Easier to make and test changes: With JS, it would be a lot easier
- to implement and try out new window-management behaviour.
-
-Do you know anyone else, internal or external, that is also interested in this
-API?
-There is interest in the ChromeOS test team to use this (since pyauto tests will
-be updated to use extension API). There is also interesting among developers and
-UX leads to experiment with this API.
-
-Could this API be part of the web platform?
-Unlikely.
-
-Do you expect this API to be fairly stable? How might it be extended or changed
-in the future?
-The API can potentially include a lot of features. However, the plan is to start
-small, adding support for a limited set of functionality, and then add to the
-API. However, it should be fairly easy to keep the API backwards-compatible when
-new API is added.
-
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-Multiple extensions can use the API at the same time. The reason for allowing
-this is because a particular extension might be used for managing window
-positioning, while at the same time, another extension might be used for
-managing input-handling. However, if multiple active extensions use this API to
-manage window positioning, then they can potentially conflict with each other
-(although in the end, only one will 'win'). There is no plan to mitigate this
-problem at this point.
-
-List every UI surface belonging to or potentially affected by your API:
-Initially all toplevel windows (e.g. browser windows, panels, modal windows).
-This can perhaps be extended to also support notification windows, desktop
-windows etc.
-
-**Actions taken with extension APIs should be obviously attributable to an
-extension. Will users be able to tell when this new API is being used? How?**
-
-When the extension is installed/enabled, the user will be required to grant the
-extension "wm" permission, so the user will have the knowledge that the
-extension manages windows. But there will be no more visual cues in the UI after
-that.
-
-**Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):**
-**1) The API allows closing windows. So an extension could potentially close a window/modal window immediately after it is opened. However, it will not be able to trigger the default action on the modal windows.**
-**2) The extension could close/hide all notification windows before they are displayed. (if notification windows are exposed through the API. see above)**
-**3) Add emacs-like key-bindings for window management (e.g. close window, move/resize window, focus window etc.)**
-What security UI or other mitigations do you propose to limit evilness made possible by this new API?**
-I do not think it is necessary to have a UI for mitigating the evilness.
-However, it might make sense to add the extension icon to the active window's
-title-bar.**
-
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-**The API does not provide access to the user's preferences, or other such data.
-The only preference-data that can get modified by the API is the browser
-window-position/size. Once the extension is disabled, the effects of the
-extension should be completely reversible, possibly trivially.**
-
-**How would you implement your desired features if this API didn't exist?**
-**There unfortunately is no alternative. If a user wants to have different
-window-management behaviour, then the user needs to change source and recompile
-chrome.**
-
-Draft API spec
-
-**<table>**
-**<tr>**
-**<td>API Function (chrome.experimental.wm.XXX)</td>**
-**<td>Details (asynchronous unless explicitly stated otherwise)</td>**
-**</tr>**
-**<tr>**
-**<td>close</td>**
-**<td>Closes a window.</td>**
-**</tr>**
-**<tr>**
-**<td>transform</td>**
-**<td>Applies transforms (e.g. rotation, scaling, translation) to a window. These transforms can be applied with an animation, and the app can decide how long the animation lasts.</td>**
-**</tr>**
-**<tr>**
-**<td>opacity</td>**
-**<td>Changes the opacity of a window. The opacity can be applied with an animation, and the app can decide how long the animation lasts.</td>**
-**</tr>**
-**<tr>**
-**<td>windows</td>**
-**<td>Gets a list of all the windows. (synchronous)</td>**
-**</tr>**
-**<tr>**
-**<td>setWindowBounds</td>**
-**<td>Sets the size of a window. (can be animated) This may (or may not?) override the resizability of a window.</td>**
-**</tr>**
-**<tr>**
-**<td>stackWindowAbove(window1, window2)</td>**
-**<td>Changes the stack-ordering of windows.</td>**
-**</tr>**
-**<tr>**
-**<td>screenBounds</td>**
-**<td>Gets the bounds of the screen (synchronous). The details for dealing with multi-monitor configuration TBD (will likely mirror how ash/aura/views deals with this).</td>**
-**</tr>**
-**<tr>**
-**<td>minimize</td>**
-**<td>Minimizes a window.</td>**
-**</tr>**
-**<tr>**
-**<td>maximize</td>**
-**<td>Maximizes a window. This may (or may not?) override the resizability of a window.</td>**
-**</tr>**
-**<tr>**
-**<td>fullscreen</td>**
-**<td>Makes the window fullscreen. This may (or may not?) override the resizability of a window.</td>**
-**</tr>**
-**<tr>**
-**<td>\[feel free to add more here\]</td>**
-**</tr>**
-**</table>**
-
-**<table>**
-**<tr>**
-**<td>Events</td>**
-**<td>Details (synchronous unless explicitly stated otherwise)</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowCreated(AshWindow)</td>**
-**<td>Triggered when a new window is created (but before the window is made visible.)</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowClosed(AshWindow)</td>**
-**<td>Triggered when a window gets closed. This will be triggered whenever the window is closed (i.e. by the user, by the web-page, or by the WM app from the close API call)</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowShown(AshWindow)</td>**
-**<td>Triggered when a window becomes visible.</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowHidden(AshWindow)</td>**
-**<td>Triggered when a window is hidden.</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowActivated(AshWindow)</td>**
-**<td>Triggered when an inactive window becomes active (e.g. user clicked on the window to make it active, or the previously active window was closed, or by other means).</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowInputEvent(AshWindow, Event, EventModifiers)</td>**
-**<td>Triggered when an ‘interesting’ input event happens on the window (e.g. user presses Alt+Ctrl+Key, or does a four-finger swipe gesture, or clicks with Alt down etc.)</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowMoved(AshWindow, OldPosition)</td>**
-**<td>Triggered when a window is moved. This will be triggered whenever the window is moved (i.e. by the user, by the web-page, or by the WM app from the setWindowBounds API call)</td>**
-**</tr>**
-**<tr>**
-**<td>onWindowResized(AshWindow, OldSize)</td>**
-**<td>\[similar to above\]</td>**
-**</tr>**
-**<tr>**
-**<td>\[feel free to add more here\]</td>**
-**</tr>**
-**</table>**
-
-**Some more details: a Window object is represented in the app as a dictionary with the following fields:**
-
-* **id: A unique id for the window for the duration of the session.**
-* **type: Window type (one of \[“modal”, “panel”, “normal”\]).**
-* **state: Window state (one of \[“normal”, “minimized”, “maximized”,
- “fullscreen”\])**
-* **title: The title of the window (this is typically user-visible;
- could be empty).**
-* **name: The name of the window (this is typically not visible to
- user; could be empty).**
-* **bounds: The location/size of the window.**
-* **active: Whether the window is currently active or not.**
-* **visible: Whether the window is currently visible or not.**
-
-**All the callbacks (event callbacks, and callback to windows function call)
-receive these details about the window(s).**
-
-Open questions \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apiwishlist/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apiwishlist/index.md
deleted file mode 100644
index 45eef6de7c9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/apiwishlist/index.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-page_name: apiwishlist
-title: API Wish List
----
-
-An early design document containing an unsorted list of things we've want to do
-as extension APIs. Some of these ideas have now been implemented.
-
-<table>
- <tr>
- <th>Name</th>
- <th>Notes</th>
- <th>Use cases</th>
- <th>Priority</th>
- </tr>
- <tr>
- <td>Launch external programs</td>
- <td>Just a simple command line, for more interaction with native code use NPAPI</td>
- <td>Download accelerators</td>
- <td></td>
- </tr>
- <tr>
- <td>History</td>
- <td>APIs to the built-in history and bookmark system. For example, to be notified when the star button is pressed, or to push items into either database.</td>
- <td>Synchronization</td>
- <td></td>
- </tr>
- <tr>
- <td>Internationalization</td>
- <td>This is particularly necessary in cases where UI is declarative. For example, if we have declarative content gleam or tool buttons. It is also useful for internationalizing HTML without having to use JS at runtime.</td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Read-write user scripts</td>
- <td>Inject javascript into pages.</td>
- <td>Like Greasemonkey</td>
- <td></td>
- </tr>
- <tr>
- <td>Thumbnail</td>
- <td>Generate thumbnails from open tabs. Access read and write to the thumbnail database.</td>
- <td>CtrlTab Preview</td>
- <td></td>
- </tr>
- <tr>
- <td>Sidebars</td>
- <td></td>
- <td>Delicious</td>
- <td></td>
- </tr>
- <tr>
- <td>Content layers</td>
- <td>A separate DOM for use by extensions that renders on top of a content DOM. Extensions (user scripts) can access both, but the top layer's CSS is isolated from the bottom layer.</td>
- <td>Drawing selection UI, like FlashGot</td>
- <td></td>
- </tr>
- <tr>
- <td>Keyboard and mouse handlers</td>
- <td>Extensions should be able to listen to events over the entire browser UI.</td>
- <td>CtrlTab Preview, Gestures</td>
- <td></td>
- </tr>
- <tr>
- <td>Async DOM</td>
- <td>An idea to allow manipulation of the DOM asynchronously from the browser process.</td>
- <td>This would allow Greasemonkey-type use cases without having to require authors split apart their code into separate processes. It should also be more efficient.</td>
- <td></td>
- </tr>
- <tr>
- <td>Settings</td>
- <td>Interact with various Chromium settings, like what pages JavaScript is enabled for, what pages cookies are sent to, user agent settings, proxy settings, etc</td>
- <td>NoScript, privacy filters, proxy switchers</td>
- <td></td>
- </tr>
- <tr>
- <td>Network</td>
- <td>Listen for requests, watch data go by, etc.</td>
- <td>Cloud-based history</td>
- <td></td>
- </tr>
- <tr>
- <td>Omnibox</td>
- <td>Take part in omnibox sessions.</td>
- <td>Make cloud-based bookmark and history first-class in Chromium UI</td>
- <td></td>
- </tr>
- <tr>
- <td>Read-only user scripts</td>
- <td>Read-only javascript access to the DOM.</td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Pop-out areas</td>
- <td>Ability to render web content outside the viewport</td>
- <td>Pull out areas from toolbars, shelves</td>
- <td></td>
- </tr>
- <tr>
- <td>Shelves and bottom bars</td>
- <td>They may be able to be the same thing. Shelves have a different default presentation than bottom bars (constrained height, like a toolbar, different background and edges).</td>
- <td>Download status, Firebug</td>
- <td></td>
- </tr>
- <tr>
- <td>Element-specific actions</td>
- <td>Tell Chromium to somehow highlight a DOM element and advertise that an action is possible.</td>
- <td>Send this image to a friend on Facebook</td>
- <td></td>
- </tr>
- <tr>
- <td>Menus</td>
- <td>add items to in-page context menus and system menus</td>
- <td>bookmarking and recommendation systems, many more</td>
- <td></td>
- </tr>
- <tr>
- <td>Downloads</td>
- <td>APIs to manipulate the download system.</td>
- <td>DownThemAll</td>
- <td></td>
- </tr>
- <tr>
- <td>New Tab Page</td>
- <td>Replace it entirely, or add modules (iframes?) to it.</td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Themes</td>
- <td>Customizing the look and feel of the interface. We might surface them to users as different than extensions, but they will use a lot of the underlying infrastructure.</td>
- <td>It turns out people like to decorate.</td>
- <td></td>
- </tr>
- <tr>
- <td>Storage</td>
- <td>Should come for free via HTML5 APIs.</td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>Navigation Interception</td>
- <td>APIs for an extension to intercept a navigation event and modify it.</td>
- <td>Automated file format converters, auto-incognito mode on certain website URLs</td>
- <td></td>
- </tr>
-</table>
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/creating-new-apis/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/creating-new-apis/index.md
deleted file mode 100644
index d9f53b9064f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/creating-new-apis/index.md
+++ /dev/null
@@ -1,407 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-page_name: creating-new-apis
-title: Implementing a new extension API
----
-
-**Proposal**
-
-See [API Proposals (New APIs Start
-Here)](/developers/design-documents/extensions/proposed-changes/apis-under-development).
-
-So you want to add the Widgets API. Let's call it **widgets**.
-
-**Defining the Interface**
-
-#### How will extensions declare their intent to use widgets?
-
-### You need to decide this now. In other words, what will a user of widgets need to write in their manifest?
-
-Typically this will be either via a **permission string** or **manifest entry**.
-There is no need for both. By convention it should be called "widgets".
-
-* Use a **manifest entry** for declarative style APIs, or when you
- need to express some sort of rich structure. For example,
- [commands](http://developer.chrome.com/extensions/commands.html).
-
-> > {
-
-> > "name": "Demo widget extension",
-
-> > "widgets": {
-
-> > "foo": "bar",
-
-> > "baz": "qux"
-
-> > }
-
-> > ...
-
-> > }
-
-* Use a **permission string** for procedural APIs, typically those
- which are just a collection of functions. Most APIs are of this
- form. For example,
- [storage](http://developer.chrome.com/extensions/storage.html).
-
-> > {
-
-> > "name": "Demo widget extension",
-
-> > "permissions": \[..., "widgets", ...\]
-
-> > ...
-
-> > }
-
-There are exceptions:
-
-* Some APIs are integral parts of the platform (e.g.
- [runtime](http://developer.chrome.com/apps/runtime.html),
- [app.window](http://developer.chrome.com/apps/app.window.html), etc)
- and require no declaration.
-* Some older APIs use object permissions rather than strings, such as
- [fileSystem](http://developer.chrome.com/apps/fileSystem.html). This
- is deprecated. Use a manifest entry instead.
-
-#### Tell the extensions platform about widgets
-
-Firstly decide, *can your API be applied to any platform built on the web, or
-does it only make sense for Chrome?* Examples of the former: storage, messaging.
-Examples of the latter: browserAction, bookmarks. A good clue is whether you
-need to #include anything from chrome.
-
-* If it applies to any platform, widgets should be implemented in the
- extensions module (src/extensions).
-* If it's Chrome only, widgets should be implemented in Chrome
- (src/chrome/common/extensions and src/chrome/browser/extensions,
- etc).
-* If in doubt, try to implement it in src/extensions.
-
-From here, all files here are relative to either extensions/common/api or
-chrome/common/extensions/api:
-
-First, add an entry in _api_features.json. This tells the extensions platform
-about when your API should be available (anywhere? only in extension
-processes?), and what they need to do to use it (do they need a permission? a
-manifest entry?).
-
-* If you're using a **manifest entry**, use "manifest:widgets" as the
- dependency.
-* If you're using a **permission string**, use "permission:widgets" as
- the dependency.
-
-Second, add an entry to either _manifest_feature.json or
-_permission_features.json. This tells the platform how to interpret "widgets"
-when it encounters it as either a manifest entry or a permission. What is it
-available to (extensions? apps? both?), and importantly what channel is it
-available in (dev? beta? stable?). **New extension APIs MUST start in dev**
-(although if they're unimplemented then trunk is advisable).
-
-*==New extension APIs MUST start in dev==* (just repeating it).
-
-**Write a schema for widgets**
-
-Extension APIs can be defined in either IDL (widgets.idl) or JSON Schema
-(widgets.json). IDL is much more concise, but doesn't include some of the
-advanced features supported by JSON Schema.
-
-You probably want IDL, though be warned *IDL syntax errors occasionally cause
-the compiler to never terminate*.
-
-Fourth, list the schema in
-[//extensions/common/api/schemas.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:extensions/common/api/schema.gni),
-which tells the build system to generate a bunch of boilerplate for you in
-&lt;build_dir&gt;/gen/extensions/common/api or
-&lt;build_dir&gt;/gen/chrome/common/extensions/api: models for your API, and the
-glue to hook into your implementation.
-
-Finally, add some documentation:
-
-## **Adding documentation**
-
-Adding documentation is very simple:
-
-1. Write a summary for your API and put it in
- chrome/common/extensions/docs/templates/intros/myapi.html.
-2. Create the publicly accessible template(s) in
- chrome/common/extensions/docs/templates/public/{extension,apps}/myapi.html.
- Whichever of extensions and/or apps you add an HTML file in depends
- on which platform can access your API.
- * Each will look something like:
- {{ '{{' }}+partials.standard_extensions_api api:apis.extensions.myapi
- intro:intros.myapi /{{ '}}' }} (or apps).
-
-**C++ implementation**
-
-The actual C++ implementation will typically live in
-extensions/browser/api/myapi or chrome/browser/extensions/api/myapi (as
-mentioned above, the magic glue is generated for you).
-
-**Functions**
-
-Extension APIs are implemented as subclasses of ExtensionFunction from
-extensions/browser/extension_function.h.
-
-* Use DECLARE_EXTENSION_FUNCTION to declare the JavaScript identifier
- for the function.
-* Implement ExtensionFunction::Run. The comments on that method
- explain how to implement it.
-* Note: use EXTENSION_FUNCTION_VALIDATE to validate input arguments,
- which are placed in args_. Failing this check kills the renderer, so
- the idiom for this is catching bugs in the renderer (for example:
- schema validation errors).
-* Add your implementation files to
- [chrome/common/extensions/api/api_sources.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:chrome/common/extensions/api/api_sources.gni).
-
-**Model generation**
-
-Your C++ implementation **must live** in
-extensions/browser/api/myapi/myapi_api.h/cc or
-chrome/browser/extensions/api/myapi/myapi_api.h/cc (depending on where it was
-declared).This is so that the code generator can find the header file defining
-your extension function implementations. Remember to add your source files to
-[//chrome/common/extensions/api/api_sources.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:chrome/common/extensions/api/api_sources.gni).
-
-In your header file, include extensions/common/api/myapi.h or
-chrome/common/extensions/api/myapi.h to use the generated model. This comes from
-a code-generated file that lives under e.g.
-out/Debug/gen/chrome/common/extensions/api. Let's say we have the following IDL
-(or equivalent JSON schema):
-
-// High-level description of your API. This will appear in various places in the
-docs.
-
-**namespace** myapi {
-
-**dictionary** BazOptions {
-// Describes what the id argument means.
-**long** id;
-// Describes what the s argument means.
-**DOMString** s;
-};
-**dictionary** BazResult {
-**long** x;
-
-**long** y;
-};
-**callback** BazCallback = **void** (BazResult result);
-**interface** Functions {
-
-// An interesting comment describing what the baz operation is.
-
-// Note that this function can take multiple input arguments, including things
-like
-
-// long and DOMString, but they have been elided for simplicity.
-**static void** doBaz(BazOptions options, BazCallback callback);
-};
-};
-
-A simple C++ implementation might look like this:
-
-namespace extensions {
-
-// You must follow a naming convention which is ApiNameFunctionNameFunction,
-
-// in this case MyapiDoBazFunction. This is so that the generated code
-
-// can find your implementation.
-
-**class** MyapiDoBazFunction : **public** AsyncExtensionFunction {
-
-**public**:
-
-virtual ~MyapiDoBazFunction () {}
-
-**private**:
-
-// The MYAPI_DOBAZ entry is an enum you add right before ENUM_BOUNDARY
-
-// in chrome/browser/extensions/extension_function_histogram_value.h
-
-DECLARE_EXTENSION_FUNCTION("myapi.doBaz", MYAPI_DOBAZ);
-
-**virtual** ResponseAction Run() OVERRIDE {
-
-// Args are passed in via the args_ member as a base::ListValue.
-
-// Use the convenience member of the glue class to easily parse it.
-
-std::unique_ptr&lt;api::myapi::DoBaz::Params&gt; params(
-
-api::myapi::DoBaz::Params::Create(\*args_));
-
-EXTENSION_FUNCTION_VALIDATE(params.get());
-
-api::myapi::BazResult result;
-
-result.x = params-&gt;options.id;
-
-base::StringToInt(params-&gt;options.s, &result.y);
-
-// Responds to the caller right, but see comments on
-
-// ExtensionFunction::Run() for other ways to respond to messages.
-
-**return** RespondNow(ArgumentList(result.ToValue()));
-
-}
-
-};
-
-} // namespace extensions
-
-ExtensionFunction is refcounted and instantiated once per call to that extension
-function, so use base::Bind(this) to ensure it's kept alive (or use
-AddRef...Release if that's not possible for some reason).
-
-**Events**
-
-Use ExtensionEventRouter (on the UI thread) to dispatch events to extensions.
-Prefer the versions that allow you to pass in base::Value rather than a JSON
-serialized format. Event names are auto-generated in the API file (e.g.
-chrome/common/extensions/api/myapi.h). In the un-common case where an event is
-not defined in IDL or json, the corresponding event name should be defined in
-chrome/browser/extensions/event_names.h.
-
-As with extension functions, it generates some C++ glue classes. Let's say we
-have the following IDL (or equivalent JSON Schema):
-
-**namespace** myapi {
-
-**dictionary** Foo {
-
-// This comment should describe what the id parameter is for.
-
-**long** id;
-
-// This comment should describe what the bar parameter is for.
-
-**DOMString** bar;
-
-};
-
-**interface** Events {
-
-// Fired when something interesting has happened.
-
-// |foo|: The details of the interesting event.
-
-**static void** onInterestingEvent(Foo foo);
-
-};
-
-};
-
-To use the generated glue in C++:
-
-DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-api::myapi::Foo foo;
-
-foo.id = 5;
-
-foo.bar = "hello world";
-
-ExtensionSystem::Get(profile)-&gt;event_router()-&gt;DispatchEventToExtension(
-extension_id,
-
-**api::myapi::OnInterestingEvent::kEventName**,
-
-**\*api::myapi::OnInterestingEvent::Create(foo)**,
-profile,
-GURL());
-
-**Permissions**
-
-By default, extension APIs should require a permission named the same as the API
-namespace.
-
-New permissions are added in ExtensionAPIPermissions::GetAllPermissions() in
-extensions/common/permissions/extensions_api_permissions.cc or in
-ChromeAPIPermissions::GetAllPermissions() in
-chrome/common/extensions/permissions/chrome_api_permissions.cc. You may also
-need to modify api_permission.h and chrome_permission_message_rules.cc in those
-directories; see how it's done for other permissions.
-
-**Advanced Extension Functionality**
-
-**Custom Bindings**
-
-Custom JS bindings go in chrome/renderer/resources/extensions/\*.js.
-
-These are necessary for doing anything special: synchronous API functions,
-functions bound to types, anything renderer-side. (If it's a common enough
-operation, please send us patches to do it automatically as part of the bindings
-generation :).
-
-**New Manifest Sections**
-
-If your API requires a new manifest section:
-
-1. Add a schema for the manifest entry to
- chrome/common/extensions/api/manifest_types.json (e.g. Widgets).
- * This is the JSON Schema format. See "Write a schema for
- widgets".
-2. Add the name of the manifest entry to
- chrome/common/extensions/api/_manifest_features.json and declare
- when it's available.
- * See "Tell the extensions platform about widgets".
-3. Add a ManifestHandler implementation in
- chrome/common/extensions/manifest_handlers (e.g.
- chrome/common/extensions/widgets_handler.cc/h).
- * Your implementation can use the model that has been generated
- from the schema in manifest_types.json
- * And of course, test it.
-4. If your manifest section requires permission messages and/or custom
- permissions, add a ManifestPermission implementation. See
- "sockets_manifest_handler" for an example.
-
-The code which handles the externally_connectable manifest key is a good place
-to start.
-
-**Testing Your Implementation**
-
-Make sure it has tests. Like all of Chrome, we prefer unit tests to integration
-tests.
-
-* There is a relatively new mini framework for unit tests in
- chrome/browser/extensions/extension_function_test_utils.h. Hopefully
- it meets your needs.
-* If not, there is the older [API
- tests](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/data/extensions/api_test/README.txt?view=markup)
- for integration tests.
-
-**Iterating**
-
-1. Create an example extension that uses your API and add it to
- chrome/common/extensions/docs/examples
-2. Ask someone else (preferably someone in chrome-devrel@ or
- chrome-extensions-team@) to make a second example extension
-3. Iterate based on how those examples went
-4. Make sure that your API is functional on all of Chrome's platforms
- that have access to the web store and that all tests are enabled on
- all platforms
-5. Announce the dev channel API to the community by sending mail to
- chromium-extensions@chromium.org and a blog post if appropriate
-6. Encourage community feedback (ask chrome-extensions-team@ for ideas
- here)
-7. Iterate on the API based on community feedback
-8. In general, an API should be on dev channel for at least one full
- release cycle before moving on to the next phase
-
-### Going to Stable
-
-Follow the [Going Live
-Phase](/developers/design-documents/extensions/proposed-changes/apis-under-development)
-instructions.
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/breaking-changes/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/breaking-changes/index.md
deleted file mode 100644
index 08326215230..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/breaking-changes/index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/extension-system-changes
- - Extension System
-page_name: breaking-changes
-title: Breaking Changes
----
-
-Our general philosophy for the Chrome extensions system is to try hard to avoid
-breaking (ie backwards-incompatible) changes. Over time we've discussed a number
-of ideas for improvements based on actual experience with the extensions system
-that would require breaking backwards compatibility. Ideally we'd do them all
-together in one big batch to minimize developer pain.
-
-In no particular order, here's a list of these ideas. Some require changes to
-the manifest format, and some change the behavior of existing APIs.
-
-* We want to reduce the need for background pages to help save memory,
- and some ideas for how to do this require breaking changes. See [a
- list of related
- bugs](http://code.google.com/p/chromium/issues/list?q=TaskForce%3DBackgroundPagesMustDie).
-* Split out host permissions and API permissions into separate fields
- ([crbug.com/62898](http://crbug.com/62898))
- * We might want to design for extensibility in these fields, for
- example to allow things like adding an optional
- "why"/"justification" field for each permission.
- * Also, for some API's such as spell checking, you want to grant
- permissions at the host level to get events on input into text
- boxes but don't necessarily want the ability to do cross-origin
- XHR or chrome.tabs.executeScript.
- * (aa says:) In that case, the permission should be different.
- A host permission means authenticated access to the host. We
- shouldn't twist the meaning per-API.
-* Improve security in content scripts by either forcing the following
- behaviors, or making them the default with explicit developer
- opt-out:
- * forbid eval
- * turn on javascript strict mode
- (<https://developer.mozilla.org/en/JavaScript/Strict_mode>)
- * turn on CSP
- (<http://www.w3.org/Security/wiki/Content_Security_Policy>)
- * If a content script injects a &lt;script&gt; tag into the DOM,
- only allow it if the src is an https url
-* Split permissions into read and write (Context: captureVisibleTab
- really requires &lt;all_urls&gt; because iframes can have content
- from any site, but we don't want to require screenshot extensions to
- get write-all permissions when they don't need/want it. There may be
- other cases like this.)
-* Move tabs.captureVisibleTab into its own top-level permission to
- simplify concerns with iframe permissions
-* Rationalize naming conventions. Excepting special circumstances, we
- probably want to stick to the [Google javascript style
- guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml):
- * functionNamesLikeThis, variableNamesLikeThis,
- ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis, and
- SYMBOLIC_CONSTANTS_LIKE_THIS
- * Unify our handling for abbreviations like URL - we have
- functions named getURL, setUpdateUrlData, addUrl, etc. We should
- standardize on URL or Url.
-* Have a "tabs_simple" or "tabs_light" permission for things like
- chrome.tabs.{create,update,remove,onRemoved}
-* Allow extensions to have opt-in "public" pages that can be loaded in
- iframes, window.open, etc. from within other origins, and make pages
- private by default.
-* Fix the port madness in URLPattern. Can we make all URLPatterns
- support ports? I believe right now, most cases of URLPatterns make
- ports an error, which means we can make it work without a breaking
- change. But in a few cases, ports are silently allowed for backward
- compatibility. Fixing this would be the breaking change.
-* Change chrome://favicon/ to a new scheme chrome-favicon:// (this was
- the root of a security bug, <http://crbug.com/83010>)
- * We should just make this a separate top-level API permission. We
- don't need or want authenticated access to these origins - we
- just want the icons.
- * Some work on this is in-progress: crbug.com/172375
-* Allow better URL pattern matching (to differentiate between path,
- query and fragments): <http://crbug.com/84024>
-* Change the manifest format in any ways needed to let us use [JSON
- Schema](http://json-schema.org/) for parsing it.
- * Note: we already have an internal C++ implementation of JSON
- Schema that is used for other things in the extension system
-* Scan extension.cc for DEPRECATED and the like. Remove old stuff like
- the support for multiple pageActions. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/index.md
deleted file mode 100644
index 32402fa4164..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-page_name: extension-system-changes
-title: Extension System
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/install-dialog-2/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/install-dialog-2/index.md
deleted file mode 100644
index fcc8c1064c9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/extension-system-changes/install-dialog-2/index.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-- - /developers/design-documents/extensions/proposed-changes/extension-system-changes
- - Extension System
-page_name: install-dialog-2
-title: Install Dialog v2
----
-
-### **Problem**
-
-The current extension install dialog displays a different string of text
-depending on the permissions the extension requests. This has a few problems:
-
-1. It isn't extensible. We keep adding new permissions, but it's hard
- to update the text strings to deal with all possible combinations of
- permissions.
-2. It isn't clear. Users don't realize that the text is telling them
- something specific about the extension they're installing.
-3. Advanced users have complained that they would like to see the
- details of the exact permissions being requested, not the text form.
-4. Very advanced users have requested the ability to disable individual
- permissions during installation.
-
-### **Proposal**
-
-The current set of permissions are:
-
-* Data on a domain (eg www.google.com)
-* tabs system details (urls, titles, etc)
-* browsing history
-* geolocation
-* unlimited storage quota
-* desktop notifications
-
-Some of these permissions are too granular to be useful to most users during
-installation, and should be hidden by default. For example, most users won't
-want to approve access to desktop notifications during installation.
-Installation should grant that privilege automatically. Similar for extra
-storage quota. Access to the tab system and to the history system are basically
-the same kind of access, so those should be grouped.
-
-Thus the user-visible permissions for the above would be simplified to:
-
-* Data on a domain
-* Browsing history (tabs, history, etc)
-* Geolocation
-
-The new install dialog should show a list of high-level permissions by default,
-but give advanced users a way to see the detailed list if they want.
-
-So something like:
-
-+=============================================+
-
-| +------+ |
-
-| | | |
-
-| | icon | Install Gmail Checker? |
-
-| | | |
-
-| +------+ |
-
-+---------------------------------------------+
-
-| This extension will have access to: |
-
-| |
-
-| ! Your private data on mail.google.com, |
-
-| www.google.com, and 3 other web sites. |
-
-| |
-
-| ! Your physical location on planet Earth. |
-
-| |
-
-| ! Your browsing history. |
-
-| |
-
-| \[more details\] |
-
-| |
-
-| |
-
-| \[ ok \] \[cancel\] |
-
-+=============================================+
-
-When the user clicks "more details", the dialog expands and shows all the
-permissions requested in as much detail possible. In the future, we might also
-make it possible to turn off individual permissions in that area, but the
-extension system doesn't support that yet.
-
-### Text details for high-level permissions
-
-**Site access**
-
-Your private data on www.google.com.
-
-Your private data on www.google.com and foo.com.
-
-Your private data on www.google.com, foo.com, and 5 other sites.
-
-Your private data on all web sites.
-
-**Tabs and History**
-
-Your browsing history.
-
-**Geolocation**
-
-Your physical location on planet Earth.
-
-**NPAPI**
-
-Full access to your computer and private data.
-
-**Camera (future)**
-
-Your computer's camera
-
-**Microphone (future)**
-
-Your computer's microphone
-
-**Infinite Storage, Notifications**
-
-&lt;none&gt; \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/index.md
deleted file mode 100644
index 7bd2a589911..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-page_name: proposed-changes
-title: Proposed & Proposing New Changes
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/spellcheck-api/index.md b/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/spellcheck-api/index.md
deleted file mode 100644
index 4b65f533069..00000000000
--- a/chromium/docs/website/site/developers/design-documents/extensions/proposed-changes/spellcheck-api/index.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/extensions
- - Extensions
-- - /developers/design-documents/extensions/proposed-changes
- - Proposed & Proposing New Changes
-page_name: spellcheck-api
-title: Spellcheck API
----
-
-**Proposal Date**
-**December 27, 2012**
-**Who is the primary contact for this API?**
-**rlp@**
-**Who will be responsible for this API? (Team please, not an individual)**
-**Spelling team**
-**Overview**
-**The proposed API would allow the user to load a new dictionary.**
-**Use cases**
-**Currently there are many languages which neither Chrome spellchecking nor our third party library Hunspell support (e.g., Zulu, Klingon, etc.). We routinely see bug reports requesting languages not yet supported (approximately 20-30% of Spellcheck bugs). There are avid users who have put together or would put together dictionaries if they knew they could use them. This API would provide an interface to allow them to write extensions to load the dictionary of their choice making it available for spellchecking.**
-**Do you know anyone else, internal or external, that is also interested in this API?**
-**We have several bugs that are for languages which we do not support and cannot find libraries. If we provided this API, those users could maintain their own dictionaries.**
-**Could this API be part of the web platform?**
-**It is unlikely that spellchecking will become part of the web platform.**
-**Do you expect this API to be fairly stable? How might it be extended or changed in the future?**
-**Yes. We will allow users to specify which format their dictionary is in. If at some point we change the format which we read dictionaries in, we will be able to update the API to keep the current format and simply convert to the new format.**
-**If multiple extensions used this API at the same time, could they conflict with each others? If so, how do you propose to mitigate this problem?**
-**With this API we'd be adding the ability to have multiple dictionaries. If multiple extensions provided dictionaries, the only problem might be on loading if the user had an excessive number of dictionary-loading extensions as the loading was queued up.**
-**List every UI surface belonging to or potentially affected by your API:**
-**Settings-&gt;Language Settings: We would need to show the new dictionary as a language being used for spellcheck.**
-**When spellchecking, red underlines and other spelling features would now be dependent on the dictionary available through this API.**
-**Actions taken with extension APIs should be obviously attributable to an extension. Will users be able to tell when this new API is being used? How?**
-**In the Settings-&gt;Language Settings dialog, we would show an icon or tag to indicate that a given dictionary came from an extension rather than a built in library.**
-**How could this API be abused?**
-**Dictionaries are just text files which are loaded in to Chrome. Possible abuse
-could be adding words which one would normally expect to be spellchecked such
-that they are not any more or adding "bad" words such as cursing or swear words.
-Someone could also attempt to add a dictionary which is really code to be
-executed upon loading.**
-
-**Imagine you’re Dr. Evil Extension Writer, list the three worst evil deeds you could commit with your API (if you’ve got good ones, feel free to add more):**
-**1) Buffer overflow with a loaded dictionary.**
-**2) Killing a normal spellcheck by creating a dictionary of common misspellings.**
-**3) Creating a dictionary with code that executes upon loading.**
-**What security UI or other mitigations do you propose to limit evilness made possible by this new API?**
-**We would not allow binary dictionaries and we would sanitize all dictionaries before loading them, ensuring that they only consisted of words in the format we expect. This would eliminate 1 and 3. 2 is difficult to eliminate because if the user wants to add common misspellings as "correct" words, that's their choice and we would not want to prevent them from doing so.**
-**Alright Doctor, one last challenge:**
-**Could a consumer of your API cause any permanent change to the user’s system using your API that would not be reversed when that consumer is removed from the system?**
-**No. Once an extension using this API was removed, the dictionary it loads would no longer be loaded and the user would not see the dictionary in their Settings. Thus there would be no trace of this extension.**
-**How would you implement your desired features if this API didn't exist?**
-**We could provide a command line option for users to load a dictionary from a file on their system. The unfortunate aspect of this method is that users then have to find the file on the web and figure out how to pass it in from the command line which means only power users are likely to do so.**
-**Draft Manifest Changes**
-**Unknown -- see additional questions at bottom.**
-**Draft API spec**
-**Methods**
-**loadDictionary**
-**chrome.spellcheck.loadDictionary**
-
-**Loads a dictionary based on the format specified by the user. This dictionary is automatically set to be used for spellchecking, but the user can stop using it for spellchecking via the Settings-&gt;Language Settings dialog at any time.**
-
-**Parameters**
-**dictionaryFile (string)**
-**The path for the dictionary file. This may be either a url or a local file path.**
-**dictionaryFormat(enumerated string \["hunspell", "text"\])**
-**The user must indicate which format their dictionary is in: hunspell dictionary (concatentation of .aff and .dic files) or plain text.**
-**result (int)**
-**The result is a int indicating success or an error code in loading the dictionary.**
-**Example:**
-**function loadMyDictionary(myDictionaryFile) {**
-**var result = chrome.experimental.spellcheck.loadDictionary(myDictionaryFile);**
-**if (!result) {**
-**// Indicate to user that dictionary load failed through dialog/infobar/etc.**
-**}**
-**}**
-**Open questions**
-**Is a dictionaryLoaded event necessary?**
-**Do we need an optional permission to load the dictionary?** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/find-bar/FindBar.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/find-bar/FindBar.graffle.sha1
deleted file mode 100644
index 8891e264fcd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/find-bar/FindBar.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ec8d8c1a65d38af23fa0e710253802e1591ce885 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/find-bar/FindBarGeneral.png.sha1 b/chromium/docs/website/site/developers/design-documents/find-bar/FindBarGeneral.png.sha1
deleted file mode 100644
index e6792013160..00000000000
--- a/chromium/docs/website/site/developers/design-documents/find-bar/FindBarGeneral.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-793b531010746b97d3cb12ee4de4d7e216831586 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/find-bar/FindBarTabSwitching.png.sha1 b/chromium/docs/website/site/developers/design-documents/find-bar/FindBarTabSwitching.png.sha1
deleted file mode 100644
index b1043ecb23f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/find-bar/FindBarTabSwitching.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-aa7151171e0cdf93b7d0033ef09fa79d5368cecd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/find-bar/index.md b/chromium/docs/website/site/developers/design-documents/find-bar/index.md
deleted file mode 100644
index 9c58b7159fe..00000000000
--- a/chromium/docs/website/site/developers/design-documents/find-bar/index.md
+++ /dev/null
@@ -1,132 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: find-bar
-title: Find Bar
----
-
-#### Background
-
-Google Chrome implements find for web pages using a "Find Bar" which appears
-from the top right (or top left, depending on language) corner of the browser
-window. The bar contains a text field for typing in search terms and some
-controls for advancing find selection and closing the bar.
-
-This is a proposal for lifetime management of the Find Bar. At present, the Find
-Bar is created and owned by the WebContentsViewWin, and a unique one is
-maintained per Tab. The FindBar is implemented as a WidgetWin subclass called
-FindBarWin, which is a WS_CHILD of the frame. Whenever the selected tab changes,
-if the newly selected Tab has a FindBar, it is made visible. Whenever a tab is
-dragged out of a window and into another, the FindBarWin associated with that
-Tab is re-parented to the new window.
-
-To increase the flexibility of the TabContents/WebContents API and to enhance
-the consistency in how bits of Chrome browser UI are maintained, we have been
-moving the creation and ownership of bits of the Chrome browser UI out of the
-TabContents and other objects and into the BrowserView. (This has already been
-completed for the TabStrip, the browser toolbar, InfoBars, and some other
-objects). The BrowserView class has become the class that represents the
-contents of the window independent of frame type. For more information on this
-read the [Browser Window document](/developers/design-documents/browser-window).
-The general intent of this design approach is that the "View" in the MVC sense
-(the hierarchy of objects implementing the BrowserWindow interface) is able to
-initialize its state from the set of Model objects that back it, (Browser,
-TabStripModel, TabContents, etc).
-
-#### New FindBar Creation and Ownership
-
-In light of this transition, it made sense that the Find Bar, as a part of the
-Chrome Browser UI, be created and managed with the rest of the Browser UI. The
-logical place for this is the BrowserView class, which creates and lays out the
-toolbars, info bars, and other elements of the Browser Window. In this new
-world, an instance of the FindBarWin class is created for every BrowserView at
-the time it is added to the frame's Widget, and is maintained for the lifetime
-of that BrowserView.
-
-The WebContents object is extended to provide a basic interface for finding
-(that drives the underlying RenderViewHost and WebKit) and also carries some
-state about the last search string the user entered, whether a find session is
-currently active for the tab, and the last set of Find results that were
-returned from WebKit (in the form of a FindNotificationDetails object held as a
-member variable).
-
-<img alt="image"
-src="/developers/design-documents/find-bar/FindBarTabSwitching.png">
-
-The BrowserView implements the TabStripModelObserver interface, and so is
-notified of tab switches, additions and removals. Whenever the selected tab
-changes, the BrowserView tells its FindBarWin to change the WebContents it's
-active for (if the newly selected Tab is a WebContents). FindBarWin code
-initializes its UI from the state of the newly set WebContents so that the View
-is brought up to date with the Model.
-
-When it comes time to perform a find, the FindBar code (in FindBarWin and
-FindBarView) drives the WebContents it is attached to directly by starting a
-find session. The WebContents implements the RenderViewHostDelegate interface
-which includes an OnFindReply method which is called when the renderer process
-returns with find results. WebContents updates its last saved results and then
-notifies interested observers via the NOTIFY_FIND_RESULT_AVAILABLE notification:
-
-<img alt="image" src="/developers/design-documents/find-bar/FindBarGeneral.png">
-
-The FindBarWin then updates its contained view (FindBarView) with the current
-result values from the WebContents. This change means that both the UI and the
-automation provider (used for UI tests for Find in Page) obtain their state from
-the same notification.
-
-#### Layout
-
-The Find Bar is always positioned attached to the lowest row in the "visible
-toolbar" of the Browser window. This means the Bookmark Bar if the Bookmark Bar
-is persistently visible across tabs, or the main toolbar if the Bookmark Bar is
-not persistently visible across tabs. This requires some work in Find Bar's
-positioning logic to identify the state of the parent BrowserView so it can
-position itself appropriately. With the old design, this was harder because the
-FindBarWin object didn't have direct access to the BrowserView so had to do a
-lot of work to figure out the bounds of various elements of the Browser UI and
-position relative to them. With the new design, there is a direct 1:1 mapping
-between the FindBarWin and its parent BrowserView. The BrowserView does Layout
-for all of its child views (including the toolbars the FindBarWin must layout
-relative to) and so under the new design the FindBarWin can just ask the
-BrowserView what its bounding box should be.
-
-#### Tab Drag & Drop
-
-When a Tab is detached from one window and dropped into a different one, a few
-things happen. In both the source and the target windows, a different tab is
-selected. In the source window, another tab becomes active and the Find Bar for
-that window is updated with the state of that tab, which might not have a find
-session active in which case it'll be hidden. In the target window, the dragged
-tab will cause that window's find bar to be initialized with the state of the
-tab that was inserted and selected. Native child windows are never reparented
-(and thus there are no focus manager transitions) under this design.
-
-#### Prepopulate State
-
-When the Find Bar appears, it is pre-filled with the string that was searched
-for last in that Tab. If there is no previous text the Find Bar shows no string.
-The ownership changes described here do not affect this behavior - every
-WebContents maintains a new find_text_ member that tracks the last text the user
-searched for. In the future, we want to change this such that if there is no
-last find string for a specific tab but there is for another tab, then we
-populate with that string instead. This proposal does not affect this behavior
-at this time however.
-
-#### Long Running Find Queries
-
-Find queries in long documents can take some time to execute. Handling the
-results from a find operation is contained entirely at the WebContents level.
-When a query is initiated from a particular WebContents that WebContents
-receives its results. When the WebContents receives the results it notifies
-interested observers, which may include the Find Bar UI, if that Tab is active.
-When the selected tab changes, the Find Bar code un-registers itself as an
-observer of find result notifications sourced from the last selected WebContents
-and registers itself as an observer of find result notification sourced from the
-new one. This ensures that the Find Bar only receives update notifications from
-the selected WebContents, even if a find operation is pending in multiple tabs.
-When the user switches back to another tab, the Find Bar will be initialized
-with the current result state of that tab and observe any future results in it
-for as long as that tab remains selected. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/first-run-customizations/index.md b/chromium/docs/website/site/developers/design-documents/first-run-customizations/index.md
deleted file mode 100644
index 18f95cd23ae..00000000000
--- a/chromium/docs/website/site/developers/design-documents/first-run-customizations/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: first-run-customizations
-title: First Run Customizations
----
-
-Chromium can be customized to perform certain behaviors during its first run.
-The key to it is a special file named ***master_preferences*** that must exist
-before chrome first run in the same folder as the chrome.exe binary.
-
-The master_preferences file is a text file of JSON format, which needs to
-contain some specific name/value pairs. A prototypical file is shown here (for a
-more exhaustive list consult the [source
-code](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/installer/util/master_preferences.h?view=markup)
-directly):
-
-{
-
-"homepage" : "http://www.chromium.org",
-
-"homepage_is_newtabpage" : false,
-
-"distribution": {
-
-"create_all_shortcuts": true,
-
-"import_history": false,
-
-"import_bookmarks": false,
-
-"import_home_page": false,
-
-"import_search_engine": false,
-
-"do_not_launch_chrome": false
-
-},
-
-"first_run_tabs": \[
-
-"http://example.com",
-
-"http://welcome_page",
-
-"http://new_tab_page"
-
-\]
-
-}
-
-There is one dictionary, called "distribution" and one list, called
-"first_run_tabs". Setting the home page behavior is done outside of these.
-
-The home page settings control the following behaviors:
-
-* homepage: when set, this is the URL opened as the home page (see
- setting below.)
-* homepage_is_newtabpage: if set to false, clicking the 'home' button
- or taking actions that send the user 'home' will open the home page
- instead of the new tab page.
-
-The distribution dictionary controls the following behaviors:
-
-* create_all_shortcuts: if set to true, the desktop, quick-launch and
- start menu shortcuts are created without user intervention.
-* import_history: if set to true it automatically imports the browser
- history from the current default browser.
-* import_bookmarks: if set to true it automatically imports the user's
- bookmarks from the current default browser.
-* import_home_page: if set to true it automatically imports the user's
- home page from the current default browser.
-* import_search_engine: if set to true it automatically imports the
- user's search engine setting from the current default browser.
-* do_not_launch_chrome: if set to true, per-user Chromium will not
- automatically launch after it is installed (per-machine Chromium
- never auto-launches after install).
-
-The first_run_tabs list controls the set of urls that are displayed in chromium
-when first run. If you want the default behavior the entire section can be
-removed. Each entry can be a standard url or you can use these special names to
-display special tabs:
-
-* "http://welcome_page" : shows the default welcome page for the
- current locale.
-* "http://new_tab_page" : shows the new tab page. Which contains the
- thumbnails of the favorite pages.
diff --git a/chromium/docs/website/site/developers/design-documents/focus-and-activation-in-views-and-aura/index.md b/chromium/docs/website/site/developers/design-documents/focus-and-activation-in-views-and-aura/index.md
deleted file mode 100644
index 2fa2355f040..00000000000
--- a/chromium/docs/website/site/developers/design-documents/focus-and-activation-in-views-and-aura/index.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: focus-and-activation-in-views-and-aura
-title: Focus and Activation in Views and Aura
----
-
-Focus and Activation are closely related.
-
-### Definitions
-
-Focused window - this is the window that receives keyboard input. The focused
-window is always or is always contained by the Active window.
-
-Active window - this is the window that is rendered as key - i.e. the one that
-contains the focused element. Different platforms will render this differently
-and may show additional affordances e.g. a different treatment in the window
-switcher.
-
-### Notes
-
-A "top level" window is a window that has no parent other than window manager
-constructs. Think of a Chrome window.
-
-An "activatable" window is a top level window that can be activated. Not all top
-level windows can be activated at any given time. For instance in Ash, if the
-screen is locked calling GetActivatableWindow() for a window behind the lock
-screen may return a window in front of the lock screen, whereas
-GetTopLevelWindow() will return the non-activatable toplevel behind the lock
-screen. For this reason GetActivatableWindow is a method most useful to the
-focus/activation implementation, and GetTopLevelWindow is the method most useful
-to general application code.
-
-In Aura, the CoreWM library provided by Views handles focus and activation
-changes in the class FocusController. The FocusController implements two
-interfaces - aura::client::FocusClient and aura::client::ActivationClient. Every
-RootWindow must have an associated Focus/ActivationClient implementation
-associated with it, though several RootWindows can share the same
-implementation. For Desktop-Aura, each top level DesktopNativeWidgetAura creates
-a separate FocusController for the associated RootWindow. For Ash, there is a
-single FocusController shared by all RootWindows managed by the
-DisplayController.
-
-The FocusController tracks the current active and focused windows, and sends
-notifications when either of these change to registered implementations of
-aura::client::FocusChangeObserver and aura::client::ActivationChangeObserver.
-
-Views also tracks focus, for views::View subclasses within a views::Widget.
-Think of it this way. In the Aura world, an aura::Window can have focus, and can
-have an embedded View hierarchy via NativeWidgetAura/Widget. Within that focused
-aura::Window there can be an individual View that has focus, e.g. the omnibox
-textfield vs. a button etc. Each toplevel views::Widget has a
-views::FocusManager which handles View focus. It also handles things like focus
-traversal. Focus traversal is what happens when you press Tab. The traversal
-code figures out what View to focus next when you press Tab or Shift+Tab.
-
-When a views::Widget is deactivated, its FocusManager stores the focused view in
-ViewStorage for restoration later. The history behind this is somewhat vestigial
-but the storage/restoration step is still necessary. When the Widget is later
-reactivated, the last focused view is refocused. This is true in both non-Aura
-Win32 Views and in Aura Views.
-
-As far as what can be focused or activated in Aura, FocusController delegates to
-an implementation of the FocusRules interface to determine what can be focused
-or activated. There are different implementations for Ash (AshFocusRules) and
-Desktop-Aura (DesktopFocusRules). These rules enforce specifics like not
-activating windows behind the lock screen, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/form-autofill/index.md b/chromium/docs/website/site/developers/design-documents/form-autofill/index.md
deleted file mode 100644
index cf79334890e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/form-autofill/index.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: form-autofill
-title: Form Autofill
----
-
-**Objective**
-A feature in Chrome to automatically fill out an html form with appropriate
-data.
-
-## Background
-
-Most browsers have an autofill feature, and Google toolbar for Firefox has an
-autofill feature. Every browser presents a slightly different user experience,
-but the basic paradigms of how it should appear to the user are well
-established.
-**Other Implementations**
-
-* [Google
- Toolbar](http://toolbar.google.com/T5/intl/en/features.html#autofill)
-* [Firefox](http://support.mozilla.com/en-US/kb/Form+autocomplete)
-* [Safari](http://docs.info.apple.com/article.html?path=Safari/2.0/en/ibr47.html)
-* [Internet
- Explorer](http://msdn.microsoft.com/en-us/library/ms533032%28VS.85%29.aspx)
-
-## Overview
-
-Every time the user submits a form, entries in text input fields organized by
-the name of the field specified in html get stored in the SQLite database under
-the profile.
-When the user opens a webpage containing a form and types into one of the
-fields, Chrome checks the database for past entries into fields with the same
-name. As the user types, a pop-up menu appears allowing the user to select from
-entries which match the prefix already entered.
-
-## User Experience
-
-The user visits a website containing a form and commences to filling it out.
-When the user starts filling out a field autofill kicks in and displays a menu
-showing frequently entered data into fields with the same name as the currently
-focused field.
-**Implementation**
-**Data Structures**
-AutofillForm: A struct for storing name/value pairs as well as origin and action
-urls. One of these gets constructed when the user submits the form. The class
-uses a static factory method AutofillForm::CreateAutofillForm() which might
-return NULL if the form itself is unsuitable for autofilling.
-AutofillManager: The per-tab autofill manager. Handles receiving form data from
-the renderer and storing and retrieving name/value pairs through WebDataService.
-Each WebContents has a single AutofillManager which gets accessed by the method
-GetAutofillManager().
-**Program Flow**
-When the user submits a form, the form gets sent to
-AutofillForm::CreateAutofillForm(). If the form is suitable for autofill, the
-return value will be a new AutofillForm holding all the values that the user
-entered in the form. WebFrameLoaderClient::dispatchWillSubmitForm() passes the
-AutofillForm as the argument of its delegate's function
-OnAutofillFormSubmitted(). The delegate, provided it is a RenderView, sends a
-ViewHostMsg_AutofillFormSubmitted message to its RenderViewHost. Upon getting
-the message, the RenderViewHost then forwards the form to its delegate as the
-argument of AutofillFormsSeen(). That delegate should be a WebContents. The
-WebContents contains a pointer to its AutofillManager, and passes the form to
-AutofillManager::StoreFormEntriesInWebDatabase(). The AutofillManager then uses
-WebDataService to record the submitted form entries into the local database.
-When the user navigates to a form that is potentially fillable by autofill,
-WebFrameLoaderClient::dispatchDidFinishDocumentLoad() calls
-WebFrameLoaderClient::RegisterAutofillListeners() which attaches a
-webkit_glue::FormAutocompleteListener to each text input field. The
-FormAutocompleteListener waits for keyboard events in the field and calls
-RenderView::QueryFormFieldAutofill for suggestions. The RenderView sends a
-message to its RenderViewHost which calls GetAutofillSuggestions on its
-delegate. That delegate should be a WebContents.
-WebContents::GetAutofillSuggestions() gets the list of suggestions from its
-AutofillManager. The AutofillManager gets the suggestion list from
-WebDataService, and then calls back
-RenderViewHost::AutofillSuggestionsReturned().
-**Tables in the SQLite Databse**
-autofill: Stores in each row the following information for an entry into a form:
-pair_id, name, value, count. pair_id is an integer unique to that row in the
-table. pair_id is meant to be thought of as uniquely identifying a name/value
-pair that has been entered. name/value pairs are only entered into one row of
-the autofill table. After that if the same value is entered in a field with that
-name, the count entry in the row gets incremented, and a separate row gets
-entered in autofill_dates.
-autofill_dates: Gets a row added for each form element (of text input type),
-every time the user submits a form. Each row contains a pair_id idenitifying the
-corresponding row in the autofill table and a time date_created indicating when
-that form element was added.
-
-## Internationalization
-
-Internationalization of the Autofill feature is described
-[here](/developers/design-documents/form-autofill/internationalization-of-autofill).
-
-## Future Work
-
-## Fill not just the currently focused form field but other fields in the form once the user has identified themselves.
-
-Introduce a profile data structure that stores specific information by user such
-as names (first/last) addresses telephone numbers, and record the type of data
-that gets entered into a form rather than the data itself.
-Handle names in a way that accounts for fields which ask for full name on one
-line versus first and last name separately.
-Handle phone number entry with "split" fields. Different sites require phone
-numbers to be entered in various formats. Some require the punctuation, some
-require country code, area code, prefix and extension in separate fields. Phone
-numbers are formatted differently from country to country. We should add
-heuristics to handle these various cases.
-Allow the user to specify multiple addresses (mailing, shipping).
-Just in case autofill fills in everything wrong (such as the user is borrowing
-somebody's computer, and it filled in the computer's owner's information
-somehow) a gentle, unassuming control appears allowing the user to turn autofill
-off for the current form.
-Allow multiple profiles.
-Allow credit card information in a profile with extra password protection.
-
-## Privacy and Security Concerns
-
-Autofill should not enter information into a text field which a program could
-potentially read unless the user has implicitly given consent to upload that
-information such as by selecting an item from a drop-down menu or hitting the
-submit button. Otherwise, a sinister person could construct a website with
-hidden form fields which harvest personal data by getting autofilled.
-
-**Subsystem design docs**
-
-[Syncing autofill Wallet metadata](https://goo.gl/LS2y6M) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg.sha1
deleted file mode 100644
index 8faf0b17a0b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9ca7709f8b57c0e805bbe0a8996587148b82e5f4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg.sha1
deleted file mode 100644
index d0f0ec6196d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d2f4f4647214d9f25d9c3543e77db59b1c1f1755 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18n_design.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18n_design.jpg.sha1
deleted file mode 100644
index fccc49b6868..00000000000
--- a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18n_design.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5ef76415d041f60593f624a92e015ea7c78cefa9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/index.md b/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/index.md
deleted file mode 100644
index ca8affd156b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/form-autofill/internationalization-of-autofill/index.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/form-autofill
- - Form Autofill
-page_name: internationalization-of-autofill
-title: Internationalization of Autofill
----
-
-**Objective**
-To extend the Autofill feature in Chrome to better handle non-English and non-US
-pages and user address and credit card information.
-
-## Background
-
-The Autofill feature shipped with Chrome 6. Localization of the Autofill UI was
-achieved, but opportunities to provide deeper internationalization of the
-feature exist.
-
-User Experience
-
-**Addresses**
-
-The addresses stored in Autofill settings/preferences will better adapt to
-non-US addresses. For example, a Canadian address will present "Postal Code"
-instead of "Zip Code". Additional fields such as "Prefecture" may be appropriate
-in Japan.
-
-The "Country" field will use a popup selection of countries. This allows for
-more dynamic structure for locale-specific address information.
-
-> > [<img alt="image"
-> > src="/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg">](/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_ui.jpg)
-
-For different regions, such as Japan, additional local-specific fields may be
-introduced. For example, notice "Prefecture" below. Notice also the renaming of
-"Zip code" to "Postal code" and reordering of fields:
-
-> > [<img alt="image"
-> > src="/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg">](/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18l_address_jp_ui.jpg)
-
-**Form Field Matching**
-
-Autofill analyses web pages to find appropriate form fields for filling. This
-analysis will be enhanced to cover a greater variety of non-English pages.
-
-**HTML / JavaScript based UI**
-
-Platform-specific UI for Autofill will be deprecated in favor of HTML /
-JavaScript based UI (aka "DOMUI"). Internationalization of Autofill will apply
-to this new DOMUI only. Dynamic layout of the Autofill user preferences will be
-data-driven based on declarative descriptions of locale-specific address
-formats.
-
-**Implementation**
-**Data Structures**
-
-****Locale information is sourced from three places:****
-
-1. Application Locale. The locale of the running Chrome application.
-2. Form Locale. The locale information, if any, associated with the
- HTML page containing the form.
-3. Address Locale. The locale dictated by the address "Country" field
- set by the user in Autofill preferences.
-
-**Program Flow**
-
-**During page-load Autofill analyses the forms within the page for fillable
-fields. Program flow (A) is the current flow of control through the system.**
-
-**Forms may or may not contain locale information directly, in which case we
-attempt to derive the locale by other means. The strategy employed is as
-follows:**
-
-**1.**
-
-**********The FormManager will be enhanced to pull locale information from the
-WebKit DOM (see (B) in the diagram below).**********
-
-**Give preference to local information set in the HTML markup.****
-
-****For example:******
-
-**&lt;form lang="fr-CA"&gt;...&lt;/form&gt;**
-
-**&lt;div lang="fr-CA"&gt;&lt;form&gt;...&lt;/form&gt;&lt;/div&gt;**
-
-**&lt;html&gt;&lt;head&gt;&lt;meta http-equiv="Content-Language"
-content="fr-CA"/&gt;&lt;/head&gt;...&lt;/html&gt;**
-
-**Would all yield a Form Locale of "fr-CA".**
-
-**2. If no locale information is set by the page author, then the textual contents of the page are analysed.**
-
-****The Compact Language Detection ( src/third_party/cld/... ) module is
-utilized for this****
-
-**********(see (C) in diagram below)************
-
-****.******
-
-**3.**
-
-******URL top-level domain suffix may also be used if other sources of
-information about locale are not present (not pictured).******
-
-<img alt="image"
-src="/developers/design-documents/form-autofill/internationalization-of-autofill/autofill_i18n_design.jpg"> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/form-styles-that-chromium-understands/index.md b/chromium/docs/website/site/developers/design-documents/form-styles-that-chromium-understands/index.md
deleted file mode 100644
index 0742af0fbd3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/form-styles-that-chromium-understands/index.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: form-styles-that-chromium-understands
-title: Password Form Styles that Chromium Understands
----
-
-### Automatically Comprehensible Password Forms
-
-You can help ensure that browsers' and extensions' password management
-functionality can understand your site's sign-up, sign-in and change-password
-forms by enriching your HTML with a dash of metadata. In particular:
-
-1. Add an
- `[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)`
- attribute with a value of `username` for usernames.
-2. If you've implemented an "[email
- first](https://developers.google.com/identity/toolkit/web/account-chooser#email_first)"
- sign-in flow that separates the username and password into two
- separate forms, include a form field containing the username in the
- form used to collect the password. You can, of course, hide this
- field via CSS if that's appropriate for your layout.
-3. Add an
- `[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)`
- attribute with a value of `current-password` for the password field
- on a sign-in form.
-4. Add an
- `[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)`
- attribute with a value of `new-password` for the password field on
- sign-up and change-password forms.
-5. If you require the user to type their password twice during sign-up
- or password update, add the `new-password`
- `[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)`
- attribute on both fields.
-
-#### Sign-in Form:
-
-&lt;form id="login" action="login.php" method="post"&gt; &lt;input type="text"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="username"**&gt;
-&lt;input type="password"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="current-password"**&gt;
-&lt;input type="submit" value="Sign In!"&gt; &lt;/form&gt;
-
-#### Email First Sign-in Flow:
-
-Collect the email: &lt;form id="login" action="login.php" method="post"&gt;
-&lt;input type="text"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="username"**&gt;
-&lt;input type="submit" value="Sign In!"&gt; &lt;/form&gt; Then collect the
-password, but include the email as the value of a hidden form field:
-&lt;style&gt; #emailfield { display: none; } &lt;/style&gt; &lt;form id="login"
-action="login.php" method="post"&gt; &lt;input id="emailfield" type="text"
-**value="me@example.test"**
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="username"**&gt;
-&lt;input type="password"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="current-password"**&gt;
-&lt;input type="submit" value="Sign In!"&gt; &lt;/form&gt;
-
-#### Sign-up Form:
-
-&lt;form id="login" action="signup.php" method="post"&gt; &lt;input type="text"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="username"**&gt;
-&lt;input type="password"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="new-password"**&gt;
-&lt;input type="submit" value="Sign Up!"&gt; &lt;/form&gt; Or: &lt;form
-id="login" action="signup.php" method="post"&gt; &lt;input type="text"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="username"**&gt;
-&lt;input type="password"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="new-password"**&gt;
-&lt;input type="password"
-**[autocomplete](https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute)="new-password"**&gt;
-&lt;input type="submit" value="Sign Up!"&gt; &lt;/form&gt;
-
-### Related advice
-
-Further tips beyond just autocomplete attributes are listed in the [Create
-Amazing Password Forms
-page](/developers/design-documents/create-amazing-password-forms).
-
-There are also useful [autocomplete attribute values for annotating address
-forms](https://developers.google.com/web/updates/2015/06/checkout-faster-with-autofill). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/fullscreen-mac/index.md b/chromium/docs/website/site/developers/design-documents/fullscreen-mac/index.md
deleted file mode 100644
index 57ee926b96d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/fullscreen-mac/index.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: fullscreen-mac
-title: fullscreen-mac
----
-
-​**Fullscreen in Mac Chrome (draft)**
-
-The decision is to support a version of fullscreen that serves as both
-"presentation mode" and "maximized mode". We will support tab switching, window
-switching, and have a floating slide-down tab strip / toolbar / omnibox /
-bookmark bar to aid in navigation. Glen and Cole have tentatively approved this
-for the Mac. There are no current plans to build a floating bar for
-Windows/Linux. The rationale is that no space-efficient "maximized mode" is
-available on the Mac, since the menu bar is always visible outside of fullscreen
-mode; such a mode is desirable for use on computers with small screens, in
-particular, on notebooks.
-
-Fullscreen mode features:
-
-* Normally, as on other platforms, only the web contents will be
- displayed.
-* When the mouse is moved to the top of the screen and left there for
- longer than an instant, the menu bar and also a floating bar (with
- the normal set of "bar" controls, including a tab strip) will slide
- down. See DVD Player for a comparable UI but note that its
- implementation is slightly flawed since there's no delay in its
- slide down. This floating bar will remain visible while the mouse
- remains over it (or, alternatively, will only be hidden when the
- mouse leaves it for long enough).
-* Some other operations, such as Cmd-L, should also cause the floating
- bar to appear.
-* Switching and re-ordering tabs will be fully supported. Tearing off
- tabs will be inhibited, as will dropping tabs in from other windows.
- (This is for simplicity, and may be reconsidered later.)
-* Most operations will be supported, including:
- * creating new tabs (including download and history tabs)
- * creating new windows (which will pop up in front; see below)
- * pinning tabs
- * accessing the tab context menu
- * etc.
-* We should allow windows to pop in front, since web pages frequently
- use popup windows. Thus one can switch to other windows, including
- normal (non-fullscreen) windows. More specifically:
- * z-order will be handled "as usual", so that when active a
- fullscreen window will usually be on top
- * the user has the opportunity to activate other windows, which
- will then appear over the fullscreen window
- * popup windows should also pop up over the fullscreen window
- * if there are other windows visible over a fullscreen window and
- then the user re-activates that fullscreen window, that window
- will move to the top of the z-order (i.e., show in front, hiding
- all other windows)
-* Minimize should be supported, though it will take the window out of
- fullscreen mode. Zoom should be disabled.
-* The download shelf will appear as normal. This is the same as on
- other platforms.
-* Application and popup windows may also be made fullscreen.
-* Dialog-opening operations should also be supported, though there
- remains the question of from where sheets should hang.
-* UI elements which appear as part of the web content area, such as
- infobars and the NTP bookmark bar, will continue to appear as such.
- That is, they will be visible even when the floating bar is not
- visible, and the floating bar will slide down over them.
-* In fullscreen mode, Chrome should interact with the system in the
- way other applications do when they are in fullscreen mode:
- * Spaces will be allowed and a fullscreen window will appear to
- take one space.
- * Exposé will be allowed and fullscreen windows will be part of
- the exposed windows.
-
-Quirks and limitations:
-
-* Cmd-space for Spotlight doesn't work when the menu bar is hidden
- (general problem in OS X).
-
-Open questions and issues:
-
-* This space is intentionally left nonblank.
-
-Implementation notes:
-
-* it'd be a good idea to make some sort of "FullscreenController"
- which can be tied to (and owned by) the BWC, just to make things
- cleaner
-* for the stuff requiring delays, we can probably use
- -performSelector:afterDelay:
-* we need to check see if anyone registers for notifications from the
- window
-* the controller will also have to handle keeping the floating bar
- showing when things in the bar have focus
-* be careful when changing the view hierarchy, since views often
- assume that they're the subview of something fixed
-* having to change the view hierarchy significantly (at least the
- bookmark bar and the tabstrip have to move, even if the other things
- are permanently in a "BarView") reduces the benefit of a cleaner
- model. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/generic-sensor/index.md b/chromium/docs/website/site/developers/design-documents/generic-sensor/index.md
deleted file mode 100644
index 0df0d33c4e9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/generic-sensor/index.md
+++ /dev/null
@@ -1,862 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: generic-sensor
-title: generic-sensor
----
-
-Sensor APIs implementation in Chromium: Generic Sensor Framework
-
-Contact : Reilly Grant
-&lt;[reillyg@chromium.org](mailto:reillyg@chromium.org)&gt;, Rijubrata Bhaumik
-&lt;[rijubrata.bhaumik@intel.com](mailto:rijubrata.bhaumik@intel.com)&gt;,
-Raphael Kubo da Costa
-&lt;[raphael.kubo.da.costa@intel.com](mailto:raphael.kubo.da.costa@intel.com)&gt;
-
-Former editors: Mikhail Pozdnyakov
-&lt;[mikhail.pozdnyakov@intel.com](mailto:mikhail.pozdnyakov@intel.com)&gt;,
-Alexander Shalamov
-&lt;[alexander.shalamov@intel.com](mailto:alexander.shalamov@intel.com)&gt;,
-Maksim Sisov &lt;[maksim.sisov@intel.com](mailto:maksim.sisov@intel.com)&gt;
-
-Last updated: April 12 2017
-
-# Objective
-
-This document explains how sensor APIs (such as Ambient Light Sensor,
-Accelerometer, Gyroscope, Magnetometer) based on Generic Sensor API are
-implemented in Chromium. This document describes the Generic Sensor API
-implementation on both renderer process and browser process sides, it also
-describes important implementation details, for example how data from a single
-platform sensor is distributed among multiple JS sensor instances and how sensor
-configurations are managed.
-
-At the time of writing following specifications were implemented in Chromium
-under “Generic Sensor” feature flag.
-
-ED Specs:
-
-Generic Sensor API <https://w3c.github.io/sensors/>
-
-Ambient Light Sensor API <https://w3c.github.io/ambient-light/>
-
-Accelerometer Sensor API <https://w3c.github.io/accelerometer/>
-
-Gyroscope Sensor API <https://w3c.github.io/gyroscope/>
-
-Magnetometer Sensor API <https://w3c.github.io/magnetometer/>
-
-Absolute Orientation Sensor API <https://w3c.github.io/orientation-sensor/>
-
-# Background
-
-The Generic Sensor API defines base interfaces that should be implemented by
-concrete sensors. In most of the cases, concrete sensors should only define
-sensor specific data structures and if required, sensor configuration options.
-Same approach is applied on the implementation side: Generic Sensor API
-implementation (we call it Generic Sensor Framework or GSF) provides the common
-functionality that is reused by concrete sensor implementations, its goal is to
-decrease to a minimum the amount of code required for implementation of a new
-sensor type.
-
- Generic Sensor Framework requirements
-
- Share the crucial parts of functionality between the concrete sensor
- implementations.
-
-Avoid the code duplication and thus simplify maintenance and development of new
-features.
-
- Support simultaneous existence and functioning of multiple JS Sensor
- instances of the same type that can have different configurations and
- life-time.
-
- Support for both “slow” sensors that provide periodic updates (e.g.
- AmbientLight, Proximity), and “fast” streaming sensors that have low-latency
- requirements for sensor reading updates (motion sensors).
-
-# Overview/Scope
-
-The GSF implementation consists of two main components: Sensor module in Blink
-(located at
-[third_party/WebKit/Source/](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/WebKit/Source/modules/sensor)[modules/sensor](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/WebKit/Source/modules/sensor))
-which contains JS bindings for Generic Sensor API and concrete sensors APIs, and
-‘generic_sensor’ component (located at
-[services/device/generic_sensor/](https://cs.chromium.org/chromium/src/services/device/generic_sensor/))
-- a set of classes living on Browser process side that eventually call system
-API to access the actual device sensors.
-
-The ‘generic_sensor’ component exposes following mojo interfaces for
-communication with JS bindings:
-
- [SensorProvider](https://cs.chromium.org/chromium/src/device/generic_sensor/public/interfaces/sensor_provider.mojom?l=33)
- is a “factory like” interface that provides data about the sensors present
- on the device and their capabilities (reporting mode, maximum sampling
- frequency).
-
- [Sensor](https://cs.chromium.org/chromium/src/device/generic_sensor/public/interfaces/sensor.mojom?l=42)
- is an interface wrapping a concrete device sensor. JS bindings code uses it
- to start polling the device sensor with the configurations obtained from JS.
-
- [SensorClient](https://cs.chromium.org/chromium/src/device/generic_sensor/public/interfaces/sensor.mojom?l=80)
- is implemented by JS bindings code to be notified about errors occurred on
- platform side and about sensor reading updates for sensors with ‘onchange’
- reporting mode.
-
-Please note, that the fetched sensor data is not passed to JS bindings via mojo
-calls - shared memory buffer is used instead, thus we obviate bloating of mojo
-IPC channel with sensor data (for sensors with continuous reporting mode) when
-platform sensor has high sampling frequency and also avoid bringing of an extra
-latency.
-
-GSF component diagram is shown on figure below:
-
-<img alt="image"
-src="https://docs.google.com/drawings/u/3/d/swJKFqj5wPl_myKrVsrPfvA/image?w=624&h=173&rev=1&ac=1&parent=1Ml65ZdW5AgIsZTszk4mD_ohr40pcrdVFOIf0ZtWxDv0"
-height=173 width=624>
-
-# Detailed Design
-
-## Generic sensor component
-
-The class diagram of Generic Sensor device component is shown below. All classes
-act on IO thread, except if documented otherwise.
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/Dvff-Ry2p4OwE-6KKcvQaZR0hZqTkiiYSUFAlxKFyU8hhcX9qHZMxKRunk-wxPBA9hn4ctdK3IovGkFU4_gg6CafhLuXV2lDVNiPopwIqhW2gGWvnTEy7ZCiwuy76Ws-UahRyon-"
-height=508 width=624><img alt="image"
-src="https://lh4.googleusercontent.com/YIBN9vemOQF5g3gvBcZUzZXSurINqAsm-5GrLWGgpjAF0XEU07pkN34LbSHDFrwJqb_A3gbDYfOG0mo1rbkJApD5n14fTquUZ35C-stpnxBhIQBOL3gzFhoFSQqfhcIk6CJ-4vaWZbpNGFgteA"
-height=661 width=814>
-
-PlatformSensorProvider is a singleton class, its main functionality is creating
-and tracking PlatformSensor instances. PlatformSensorProvider is also
-responsible for creating a shared buffer for sensor readings. Every platform has
-its own implementation of PlatformSensorProvider (PlatformSensorProviderAndroid,
-PlatformSensorProviderWin, ...), generic part of the functionality is
-encapsulated inside the inherited PlatformSensorProviderBase class.
-
-PlatformSensor represents device sensor of a given type, there can be only one
-PlatformSensor instance of the same type at the time, its ownership is shared
-between existing SensorImpl instances. PlatformSensor is an abstract class which
-encapsulates generic functionality and is inherited by the platform-specific
-implementations (PlatformSensorAndroid, PlatformSensorWin, ...).
-
-SensorImpl class implements the exposed Sensor mojo interface and forwards IPC
-calls to the owned PlatformSensor instance. SensorImpl implements
-PlatformSensor::Client interface to receive notifications from PlatformSensor.
-
-SensorProviderImpl class implements the exposed SensorProvider mojo interface
-and forwards IPC calls to the PlatformSensorProvider singleton instance.
-
-## Sensor module in Bink
-
-Blink side class diagram is shown below.
-
-<img alt="sensor_blink.png"
-src="https://lh5.googleusercontent.com/zJkWjhDxivcT-LPfjxkM9G8b5JvW0mtGzBpIOiHMBIcrA-p6uJyospc7JaBL6ZbyRmC40lhVwzWVUWGeR10srHGxAAdFb59Kr-8JxocnlhNwZKmeBo9vZBVU8PZ64MQgbTXfP3lf4HltKvTf2g"
-height=627 width=807>
-
-Sensor - implements bindings for the
-[Sensor](https://w3c.github.io/sensors/#the-sensor-interface) interface. All
-classes that implement concrete sensor interfaces (such as AmbientLightSensor,
-Gyroscope, Accelerometer) must be inherited from it.
-
-SensorReading - implements bindings for the
-[SensorReading](https://w3c.github.io/sensors/#the-sensor-reading-interface) IDL
-interface. All classes that implement concrete sensor reading interfaces (e.g.
-GyroscopeReading) must be inherited from it.
-
-SensorProxy wraps the mojom::Sensor mojo interface proxy and itself implements
-mojom::SensorClient interface. It provides nested SensorProxy::Observer
-interface which is inherited by Sensor class in order to receive notification
-from platform side.
-
-SensorProxy contains the SensorReading instance which is shared between all
-Sensor instances inside the frame.
-
-Inside a frame there can be only one SensorProxy instance for a concrete sensor
-type (i.e. ambient light, accelerometer) at the time and its ownership is shared
-between Sensor instances. SensorProxy instance is created at first
-Sensor.start() method call and destroyed when there are no more active Sensor
-instances left.
-
-SensorProviderProxy wraps 'SensorProvider' mojo interface proxy and manages
-'SensorProxy' instances. Sensor implementation obtains SensorProviderProxy
-instance as a LocalFrame supplement and uses it to the get SensorProxy instance
-for the needed type.
-
-SensorReadingUpdater abstract class (and its implementations
-SensorReadingUpdaterOnChange and SensorReadingUpdaterContinuous) encapsulates
-the logic for sending 'onchange' event which depends on sensor's reporting mode.
-
-## Sensor shared buffer
-
-Sensor shared buffer is used to transfer sensor readings from browser process to
-renderer process. Read-write operations are synchronized via seqlock mechanism.
-
-GSF uses a single shared memory buffer which is divided into chunks - sensor
-reading buffers, one chunk per sensor type. Every sensor reading buffer contains
-6 tightly packed 64-bit floating fields: { seqlock, timestamp, sensor reading 1,
-sensor reading 2, sensor reading 3, sensor reading 4 }, so it has fixed size 6
-\* 8 = 48 bytes.
-
-Please see
-[sensor_reading.h](https://cs.chromium.org/chromium/src/services/device/public/cpp/generic_sensor/sensor_reading.h)
-for more details.
-
-## Sensor configurations management
-
-This paragraph describes the implementation of logic behind
-[Sensor.reading](https://w3c.github.io/sensors/#sensor-reading) update and
-sending of [Sensor.onchange](https://w3c.github.io/sensors/#sensor-onchange)
-event. The issue here is that relationship between device sensor and
-corresponding JS sensor instances is one-to-many, and each JS sensor instance
-may have different configuration.
-
-In GSF the resulting configuration which is applied to the device sensor is the
-highest from the currently existing JS sensors configurations. The following
-object diagram illustrates these logic with example of four sensor instances of
-the same type and they have different sampling frequencies: 1Hz, 50Hz, 10Hz,
-20Hz.
-
-The maximum sampling frequency used is 50 Hz and PlatformSensor updates shared
-buffer using this frequency. <img alt="image"
-src="https://docs.google.com/drawings/u/3/d/seLUCG5qYsxSM0B-2rqap5A/image?w=652&h=488&rev=61&ac=1&parent=1Ml65ZdW5AgIsZTszk4mD_ohr40pcrdVFOIf0ZtWxDv0"
-height=488 width=652>
-
-Note: the given sampling frequency value is capped to 60 Hz for security
-reasons, that are explained in “Security and Privacy” section of this document.
-
-On platform side (in generic_sensor component) sensor configurations are managed
-inside PlatformSensor class.
-
-On Blink side, for ‘continuous’ reporting mode, SensorProxy continuously updates
-the stored reading instance from shared buffer using periodic timer and then
-notifies all dependent Sensor instances that sensor reading has changed.
-Further, Sensor instance may send ‘onchange’ event considering its own frequency
-and based on the timestamp delta between the newly arrived reading and the one
-that had been previously send.
-
-For ‘onchange’ reporting mode the behavior is a bit different: SensorProxy
-updates reading from shared buffer, however, unlike the ‘continuous’ reporting
-mode case, it does not do it all the time. Reading updates start after
-‘SensorReadingChanged()’ mojo call and continue for the period of time equal to
-
-T= 1÷Fmin
-
-where Fmin is the minimal sampling frequency from the currently present Sensor
-instances, in the example above it would be 1÷1Hz =1s.
-
-# Platform Implementation details
-
-## Implementation on Android
-
-<img alt="generic_sensors_android.png"
-src="https://lh6.googleusercontent.com/XscvEjpOvW8ZMteqph3E2lG-KTxxyU-H_ep2YpZ62yOlzf2trcGkRLzZ9-CWDSfJKX5m2rUIXyF6xwNX9iQvDBN-MupNuLli20VRAeMKxJ52plpDgCHaNZJP54HPRDz35XAksyylyvzEgTytew"
-height=504 width=796>
-
-The adaptation for Android platform consists of two parts, native (C++) and
-java. Native adaptation includes PlatformSensorProviderAndroid and
-PlatformSensorAndroid C++ classes, while java counterpart consists of
-PlatformSensorProvider and PlatformSensor java classes that are included in
-org.chromium.device.sensors package. Java classes interface with Android Sensor
-API to fetch reading from device sensors. Native side and java classes
-communicate with each other over JNI interface.
-
-The PlatformSensorProviderAndroid class implements PlatformSensorProvider
-interface and responsible for creation of PlatformSensorProvider instance over
-JNI, when java object is created, all sensor creation requests are forwarded to
-java object.
-
-The PlatformSensorAndroid class implements PlatformSensor interface, owns
-PlatformSensor java object and forwards start, stop and other requests to it.
-
-The PlatformSensorProvider java object is responsible for thread management, and
-PlatformSensor creation, it also owns Android SensorManager object that is
-accessed by PlatformSensor java objects.
-
-The PlatformSensor java object implements SensorEventListener interface and owns
-Android Sensor object. The PlatformSensor adds itself as a event listener for a
-Sensor to receive sensor reading updates and forwards them to native side using
-native\* methods.
-
-Simplified runtime view.
-
-<img alt="generic_sensors_android_runtime.png"
-src="https://lh6.googleusercontent.com/4hI9CnGt2BDeiatXCrCWgFXOW2Z6-CKr3ySIkgvLUerrQQaOGBxvYM76O9GL_VNbRl8rq-dghdLkEZ_-Jkifr6grZmq6xz_o3VftEQW_Za9LjqWCVxCdhZp0hhJOuL3DvmUIyx6VxIWo9zV4kg"
-height=620 width=794>
-
-O
-
-## Implementation on Windows
-
-<img alt="generic_sensors_win.png"
-src="https://lh6.googleusercontent.com/piQ76AtNgH95JBmYvq39nQHVuHKtn8IwtxBduY3kHFlCSZk_27Oh8xGpQ7O0B7IfAsRwVb9-nHJDU3K0hV19UDl4ZRzj9H_iCTMOpCKev_NjEEZX0cxmtMel6KLngN8f49sJmWgRvyMMNWZrkA"
-height=496 width=816>
-
-The adaptation layer for Generic Sensors on Windows platform uses Windows Sensor
-API that provides COM interfaces to interact with platform sensors. The
-adaptation consists of three main classes: PlatformSensorProviderWin,
-PlatformSensorWin and PlatformSensorReaderWin.
-
-All Windows Sensor API COM objects and PlatformSensorReaderWin are created on
-sensors thread, while PlatformSensorProviderWin and PlatformSensorWin live on
-IPC thread and communicate with Generic Sensor API mojo interfaces.
-
-The PlatformSensorProviderWin implements PlatformSensorProvider interface, it is
-responsible for creation of PlatformSensorWin and PlatformSensorReaderWin
-instances. It also manages COM object ISensorManager and sensor thread where all
-COM objects are created.
-
-The PlatformSensorReaderWin communicates with ISensor interface to configure it
-and get readings from ISensor COM object. The EventListener class implements
-ISensorEvents interface to get notifications about sensor state changes and
-delivers sensor readings to parent class PlatformSensorReaderWin that in turn,
-forwards sensor readings to PlatformSensorWin through
-PlatformSensorReaderWin::Client interface that is implemented by
-PlatformSensorWin.
-
-The PlatformSensorWin implements PlatformSensor and controls
-PlatformSensorReaderWin state using StartSensor() and StopSensor() methods.
-Implements PlatformSensorReaderWin::Client interface to receive notifications
-about new readings or error conditions.
-
-Simplified runtime view.
-
-<img alt="generic_sensors_win_runtime.png"
-src="https://lh3.googleusercontent.com/O7PaI9Lb6kbVvv33bm_ROGeMnMqEL99OYs8aA2AZHqM8GFtw6sewswYCoqlm_jxOamCOLTrVAHeSoTFXxYepQXEx0dHHZpMXxh4te7a1bD-dRHTaqDO9uaCzldVLj6vwSZVhtOmMCtMNIMJORA"
-height=639 width=718>
-
-## Implementation on Chrome OS and Linux
-
-ChromeOS (CrOS) and Linux Operating Systems (OS) share the same code base except
-for some auxiliary data structures, which are used to read sensor values in a
-right order and in accordance to Generic Sensor API specifications, and
-functions, which are used to apply scaling value, offset value and other values
-to keep readings in single units of measurement.
-
-Sensor data is read using Industrial Input/Output (IIO) APIs. There are two ways
-to read data:
-
- Using sysfs paths.
-
- Using device node interface.
-
-Our implementation is using sysfs for both CrOS and Linux platforms. The problem
-with the device node interface is that it requires device nodes to be accessible
-not only by root but by a user without root rights, who runs Chromium or Chrome
-browser. While the mentioned problem concerns only Linux distributions, CrOS
-involves another problem - data cannot be read by multiple clients
-simultaneously, which is true for Linux platform as well. As far as we know,
-there is an AccelerometerReader that uses this interface to read accelerometer
-data for CrOS specific components in the browser. To be more precise, the
-interface uses a ring buffer, whose values are erased after reading happens or
-buffer is full. If there are two simultaneous clients trying to read from the
-same buffer, both of them will miss data which will cause performance and
-reliability issues. There is a new feature in the latest kernel - two and more
-simultaneous reads can be done for the same device node interface, but this
-feature is still in staging.
-
-The implementation on CrOS and Linux involves several classes - a
-PlatformSensorProviderLinux, derived from a PlatformSensorProvider, a
-PlatformSensorLinux derived from a PlatformSensor, a SensorDeviceManager and a
-SensorReader, which is a base class for a PollingSensorReader.
-
-<img alt="image"
-src="https://docs.google.com/drawings/u/3/d/sRFxDJyPPjE85FLZKbmQGCg/image?w=579&h=65&rev=1&ac=1&parent=1Ml65ZdW5AgIsZTszk4mD_ohr40pcrdVFOIf0ZtWxDv0"
-height=65 width=579><img alt="generic_base.png"
-src="https://lh3.googleusercontent.com/D_qfkaVYUldbQPHUFNrxpbpkI1SGv6yxJlxuO1r6b88ne7jkuoqpLZelPc_nZCbqefzEQf5nKivGxnyIaaucFGLnqyI8svPuHiPczpomteqVN3E-OGgNI76MqVPQZ6Ak1rDm-cPuVtzXzKpmQA"
-height=740 width=803>
-
-PlatformSensorProviderLinux is a singleton class that processes requests for new
-sensors. It uses composition and holds a unique pointer to a SensorDeviceManager
-object, which sends notifications about added and removed iio sensors back to it
-using a Delegate pattern. The PlatformSensorProviderLinux has a SensorDeviceMap
-cache, which is an unordered map that stores a pair of a mojom::SensorType key
-and a std::unique_ptr&lt;SensorInfoLinux&gt; structure, which represents a
-structure of an existing iio device. The structure’s members will be discussed
-further along with the implementation of the SensorDeviceManager.
-
-The SensorDeviceMap is a cache, which is used to store type to structure pairs
-of all known IIO sensors provided by an OS and is used to create sensors of
-requested types. When a request for a specific type of sensor comes
-(PlatformSensorProviderLinux::CreateSensorInternal is called), the provider
-checks if the SensorDeviceManager has been started and enumeration has been
-done. If not, the provider starts the manager and waits until it enumerates all
-iio devices available to create PlatformSensorLinux sensors asynchronously,
-otherwise the provider checks if it has a SensorInfoLinux for a specific sensor
-type in its cache. Then it creates a platform sensor passing SensorInfoLinux to
-it, which will use the structure to set own frequency, reporting mode and then
-passes the structure to a SensorReader created by that sensor.
-
-Once enumeration is done, the provider starts to process stored in
-std::vector&lt;mojom::SensorType&gt; requests according their types by
-enumerating own cache and looking for a SensorInfoLinux structure that
-represents the requested type of a sensor.
-
-As previously said, the PlatformSensorLinux creates a SensorReader and passes a
-SensorInfoLinux structure to it. The reader has a static factory method
-SensorReader::Create, which creates a PollingSensorReader (we will implement
-triggered sensor reader, which will use the device node interface in the future
-once all problems regarding this reading strategy are resolved). The reader uses
-the SensorInfoLinux structure and stores sysfs paths, which are used to read iio
-sensor values, offset value, scaling value and a functor -
-SensorPathsLinux::ReaderFunctor, which is used to apply scaling and offset
-values and invert signs if needed. A base::RepeatingTimer is used to instantiate
-readings using a frequency provided by a PlatformSensorLinux.
-
-SensorDeviceManager is a class that uses LinuxDeviceMonitor to enumerate
-devices, listen to "add/removed" events and then notify the
-PlatformSensorProviderLinux about added or removed IIO devices. It has own cache
-to speed up an identification process of removed devices. The LinuxDeviceMonitor
-is a class that listens for notifications from libudev about
-
-connected/disconnected devices. When the manager is started, it adds itself as
-an observer to the LinuxDeviceMonitor and asks to enumerate devices. During
-enumeration, the provider gets notifications about found sensors and updates its
-cache.
-
-<img alt="generic_base_sd_cros_linux.png"
-src="https://lh3.googleusercontent.com/05VRDc-LdkOLgTi6-HuFBjbZ8qzUVT8iBtigiZbvWePCGwSpjMD4W2uFRX-WBOjRPDF7FZbxmzjmpWJWkdDilCLQcQWp5E5nnRf_etJwwd8_UVY7fbgnuDOyh1haCHtTwFz1ZjdU-yJNE1YhSg"
-height=553 width=624>
-
-<img alt="image"
-src="https://docs.google.com/drawings/u/3/d/s-HVe_BTAtNxE_My3Rl6HRA/image?w=579&h=69&rev=1&ac=1&parent=1Ml65ZdW5AgIsZTszk4mD_ohr40pcrdVFOIf0ZtWxDv0"
-height=69 width=579>
-
-## Chrome OS and Linux: threading model
-
-The threading model differs from other Generic Sensor API’s platform
-implementations. Three threads are used to preserve Chromium or Chrome fast and
-responsive. Those are an I/O browser thread, a browser file thread and a custom
-polling thread.
-
-The PlatformSensorProviderLinux and PlatformSensorLinux use the I/O browser
-thread and all the communications with another Generic Sensor framework code
-happens there. The SensorDeviceManager uses the browser file thread and
-communicates with the PlatformSensorProviderLinux using I/O thread’s task
-runners. The polling thread is created and owned by the
-PlatformSensorProviderLinux and stopped once there are no sensors left. The
-provider passes the polling thread’s task runner to the PlatformSensorLinux,
-which uses that to communicate with the SensorReader. The SensorReader is
-created on a I/O thread, but detached in it’s constructor and attached to a
-custom polling thread once it’s methods are called by the sensor.
-
-## Implementation on macOS
-
-The implementation for Mac platform consists of two classes:
-PlatformSensorProviderMac (singleton) and PlatformSensorAmbientLightMac. The
-reason of a precise naming of the sensor class is that the platform has only
-ambient light sensors embedded into hardware.
-
-PlatformSensorProviderMac implements PlatformSensorProvider’s interface and is
-responsible for creation of PlatformSensorAmbientLightMac object. Both of them
-live on I/O browser thread and communicate with the rest Generic Sensor API code
-using mojo interfaces.
-
-PlatformSensorAmbientLightMac utilizes IOKit to get information from the
-platform and callback
-
-when the value of the sensor is changed. In order to get a right callback
-notification, IOServiceAddInterestNotification is used.
-
-<img alt="generic_sensors_reverse.png"
-src="https://lh6.googleusercontent.com/PVqMgrhDf57huqKTFHmuyofmIQMXvXKmEOu6RFki99pEVJyL8Yp4dLUGidwvFW99hIQpwiW1iYVLgmDcghMxDZLGF9QD-rjeImhqMTUCBoRVsffefgyfPfUqSZPJfkbXHiZN7umISwmdFUx-WQ"
-height=518 width=590>
-
-<img alt="image"
-src="https://docs.google.com/drawings/u/3/d/szpXlJsbA4i15I6FIku9Auw/image?w=579&h=69&rev=1&ac=1&parent=1Ml65ZdW5AgIsZTszk4mD_ohr40pcrdVFOIf0ZtWxDv0"
-height=69 width=579>
-
-<img alt="generic_sensors_cd_mac.png"
-src="https://lh5.googleusercontent.com/0IbAyniyvBWeqcBJ40LRkcu4qo_olAaveiuxFpd31K0tJB4y68KtXSp8nLY2Ky_HUez7lYO3NXFnWJPRvL1PcoI1BngZD3SvgXdr4FcNgadPKIfvUR716Ovaq9P7G4RJLy01b6ES6eH1zjwr3A"
-height=652 width=657>
-
-<img alt="image"
-src="https://docs.google.com/drawings/u/3/d/saLeDm0SYjy7M5I_uX-tE_w/image?w=579&h=69&rev=1&ac=1&parent=1Ml65ZdW5AgIsZTszk4mD_ohr40pcrdVFOIf0ZtWxDv0"
-height=69 width=579>
-
-# Security and Privacy
-
-Generic Sensor APIs can be only accessed by top-level secure browsing contexts.
-Only focused browsing context is able to access sensor data. When browsing
-context (tab) is unfocused, sensors that are associated with are stopped to
-reduce power consumption and avoid exposing sensor data. Generic Sensors API
-specification addresses security and privacy in chapter [5. Security and Privacy
-considerations.](https://w3c.github.io/sensors/#security-and-privacy)
-
-Generic Sensor implementation in Chromium is using Permission mojo service to
-obtain permission from the user.
-
-In order to avoid privacy information leakage, sensors that might expose privacy
-sensitive data must be protected by permission system and maximum allowed
-polling frequency should capped to complicate ‘gyrophone’ \[1\] or keylogger
-\[2,3,4,5\] type of attacks.
-
-The ambient light sensor is prone to keylogging attacks \[5\], therefore, must
-have separate permission token, so that UA / web page is able to control access
-to data provided by the sensor. The data could be rounded to its integer part
-and only illuminance values returned to the users of the API without exposing
-RGB data. Also, ambient light sensor might be used to track what end-user is
-watching at the moment on the TV or tell whether user has moved from one room to
-another.
-
-The accelerometer and gyroscope sensors might be used for keylogger type of
-attacks \[2,3,4\] or, for example, identify users by walking patterns,
-therefore, must be protected by separate permission token.
-
-The magnetometer sensor provides information about magnetic field and in theory,
-can expose location of a user. For example, attack vector could be
-pre-magnetized surface in a particular location, or mapping between location and
-constant magnetic field disturbances caused by the building. Due to non-uniform
-strength of the Earth’s magnetic field, another attack vector could be exposure
-/ validation of user location. For example, if end-user is connected through
-VPN, magnetic field associated with GEO IP information can be compared with
-magnetometer readings at real location, therefore, tell whether user is using
-VPN or not.
-
-Orientation sensor that provides quaternion or rotation matrix data is a fusion
-sensor that uses accelerometer, gyroscope and optionally magnetometer. It fuses
-data from different sources, therefore, it is difficult to reconstruct original
-data provided by low-level sensors. Research paper \[6\] indicates that
-orientation sensors can be used for keylogger type of attacks.
-
-To avoid out-of-band communication between different origins, actual polling
-frequency is not exposed to JS objects.
-
-Generic Sensor APIs functions the same in incognito and regular windows.
-
-Discussion of past issues discovered in Blink’s Device Orientation and Motion
-APIs is [here](https://bugs.chromium.org/p/chromium/issues/detail?id=598674), we
-believe they are all addressed by the above mitigations.
-
-## Sensor permissions considerations
-
-Given the privacy and security risks described above the most sensitive data is
-fetched from the low-level sensors (accelerometer and gyroscope in particular),
-therefore access to these sensor interfaces is better to be protected with
-permission mechanism.
-
-## Proposed security policies
-
-<table>
-<tr>
-
-<td>Sensor</td>
-
-<td>Fusion sensor</td>
-
-<td>Access to low level data</td>
-
-<td>Security impact</td>
-
-<td>Proposed security policy</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/accelerometer/">Accelerometer</a></td>
-
-<td>No</td>
-
-<td>Easy</td>
-
-<td>High</td>
-
-<td>auto-grant + opt-out</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/accelerometer/">LinearAccelerationSensor</a></td>
-
-<td>Yes</td>
-
-<td>Easy</td>
-
-<td>High</td>
-
-<td>auto-grant + opt-out</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/accelerometer/">GravitySensor</a></td>
-
-<td>Yes</td>
-
-<td>Difficult</td>
-
-<td>High</td>
-
-<td>auto-grant + opt-out </td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/gyroscope/">Gyroscope</a></td>
-
-<td>No</td>
-
-<td>Easy</td>
-
-<td>High</td>
-
-<td>auto-grant + opt-out </td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/magnetometer/">Magnetometer</a></td>
-
-<td>No</td>
-
-<td>Easy</td>
-
-<td>Medium ?</td>
-
-<td>auto-grant + upt-out UI</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/ambient-light/">AmbientLight</a>, rounded lux</td>
-
-<td>No</td>
-
-<td>Easy</td>
-
-<td>Medium ?</td>
-
-<td>auto-grant + upt-out UI</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/orientation-sensor/">AbsoluteOrientation</a></td>
-
-<td>Yes</td>
-
-<td>Difficult</td>
-
-<td>High</td>
-
-<td>auto-grant + opt-out </td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/orientation-sensor/">RelativeOrientation</a></td>
-
-<td>Yes</td>
-
-<td>Difficult</td>
-
-<td>High</td>
-
-<td>auto-grant + opt-out </td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/orientation-sensor/">GeomagneticOrientation</a></td>
-
-<td>Yes</td>
-
-<td>Difficult</td>
-
-<td>High</td>
-
-<td>auto-grant + opt-out </td>
-
-</tr>
-</table>
-
-## Proposed security tokens
-
-<table>
-<tr>
-
-<td>Sensor</td>
-
-<td>Security tokens</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/accelerometer/">Accelerometer</a></td>
-
-<td>“accelerometer”</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/accelerometer/">LinearAccelerationSensor</a></td>
-
-<td>“accelerometer”</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/accelerometer/">GravitySensor</a></td>
-
-<td>“accelerometer”</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/gyroscope/">Gyroscope</a></td>
-
-<td>“gyroscope”</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/magnetometer/">Magnetometer</a></td>
-
-<td>“magnetometer”</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/ambient-light/">AmbientLight</a>, rounded lux</td>
-
-<td>“ambient-light-sensor”</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/orientation-sensor/">AbsoluteOrientationSensor</a></td>
-
-<td>\[“accelerometer”, “gyroscope”, “magnetometer”\]</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/orientation-sensor/">RelativeOrientationSensor</a></td>
-
-<td>\[“accelerometer”, “gyroscope”\]</td>
-
-</tr>
-<tr>
-
-<td><a href="https://w3c.github.io/orientation-sensor/">GeomagneticOrientationSensor</a></td>
-
-<td>\[“accelerometer”, “magnetometer”\]</td>
-
-</tr>
-</table>
-
-## Chrome UI
-
-The site settings UI could contain single option entry dedicated for sensors.
-The user might forbid access, thus disabling sensors that are under ‘opt-out’
-group. If the default permission policy for particular sensor is ‘ASK’ web page
-could request permissions using Permission API, thus, triggering permission
-dialog. Therefore, localized strings and possibly icons would be required for
-the UI.
-
-## Mock (opt-out) UI
-
-### Simple site settings UI
-
-<img alt="site_settings_mock.png"
-src="https://lh3.googleusercontent.com/f6H63VF9pQtgw_SmljATMVK29aSIz3z7Ef6wWSaaWmq409W08-kFMreB4JjJqp7wSlIQU6e6AfDW1Ig6lHKIjIMshNt7qujaVRwXGzmYUgGHBZY-WpYMSPRQOATwXnZynPx9n7Xn"
-height=574 width=390>
-
-If “always block” is selected by the user, Chrome should (options):
-
- Block all sensors?
-
- Block particular set of sensors?
-
-### Site settings UI with granular permission settings
-
-<table>
-<tr>
-<td><img alt="granular_site_settings.png" src="https://lh4.googleusercontent.com/dclZNraHc8sOwB7lJrl_6GDR8StPxP_vd8dFF8zbygXnMs27oL1R3hAaQU7TB0ALfJ_fBZlzOYlGgyz6jR9AD-AjRcOPPv-AEVCLAOJWtj1AH6x0PV7bScavi39FMFHNtBJ3ktjb" height=473 width=321></td>
-
-<td># <img alt="granular_permissions.png" src="https://lh4.googleusercontent.com/6Yytq5AuiJiHPFZO7lqqEu332lZAGhDt7waCUo6wbk-rYqEHs7zB8re_v74VxnFoa0UAXNyJsG9GQ3X51SVPO9f5RqyzypRmu9K8vFEfkbt08tvBZUatdonoWA9YpkoL1sZG235V" height=243 width=298></td>
-
-</tr>
-</table>
-
-Pros:
-
- User is able to see what sensors are being used by the web page.
-
- Block all sensors or particular sensor in “granular” UI, similar to cookies.
-
-Cons:
-
- Unclear whether this can be implemented on mobile devices, e.g., Android.
-
-### Android infobar (popup)
-
-<table>
-<tr>
-
-<td><img alt="android_popup_1.png" src="https://lh6.googleusercontent.com/-GNYtIANAmfkA9VmbfKB5AKAJ-dq8bLSTXOmyjiwlwhy-WclWw4ZkLWwe63qPkGYllispb919_OT4EDEQat7Bxgejzrzi0l1TFZ8WI0MeBglbcb10xNcA8gDlVm2UwLGXmqGS15l" height=529 width=298></td>
-
-<td><img alt="android_popup_2.png" src="https://lh3.googleusercontent.com/xZR-r4CAGzZucEI8Nwhnda2FJPp2bjQ3GNYwaQEsAl1UXDQDFD2xzaM9aWNMUhmK8Wl0G5lb8HD3AWIbHxemkRJOKX5yeGM1keSJUrI2P6CLHyYY6TlP0UCtTZpZvcX7No7wr8iA" height=529 width=298></td>
-
-</tr>
-</table>
-
-### Desktop infobar (popup)
-
-<img alt="desktop_genericsensors_infobar.png"
-src="https://lh3.googleusercontent.com/DSDcnBTf5zMdyt4piqmOCQLeY3L3HE34hEL0ZJ0STdbpOd_iatb_wp3XmkSj7rQW6CWuYIrGgwYEr96dv1vqx2Yg2njjN9SRxCK_QsGQrHJ8wWAZCsQtMtA3UFk5Vgb69ae3YPtH"
-height=519 width=446>
-
-<table>
-<tr>
-
-<td><img alt="desktop_genericsensors_popup_allow.png" src="https://lh6.googleusercontent.com/iu13HosNelFXwWX7f9rtHLWmNXxEevLutGELB7eJ6g_s3tarGsNpv7wJE3zaxPkNRiZTFhAff_iExLfi1waa6z3f_douP_MBbv4BtWsuwlqiUXHrp4zMghnHUD6qN0eR2_j4JmMp" height=438 width=376></td>
-
-<td><img alt="desktop_genericsensors_popup_settings.png" src="https://lh3.googleusercontent.com/_XS0VlWjvaFZCqIq6j6VMS3hPu7FbFD2D-LWVpIlzPZzyz4EqH1hxenzAckYXhubMfl7inupubl_px66OX_7KKZB2_CE4vpEHdy2VcOhwKUiobUVdS-QZHIWoj2tKF-4CFT7VpFX" height=436 width=373></td>
-
-</tr>
-</table>
-
-# References
-
-\[1\] - Michalevsky, Y., Boneh, D. and Nakibly, G., 2014, August. Gyrophone:
-Recognizing Speech from Gyroscope Signals. In USENIX Security (pp. 1053-1067).
-
-URL: <https://crypto.stanford.edu/gyrophone/files/gyromic.pdf>
-
-\[2\] - Owusu, E., Han, J., Das, S., Perrig, A. and Zhang, J., 2012, February.
-ACCessory: password inference using accelerometers on smartphones. In
-Proceedings of the Twelfth Workshop on Mobile Computing Systems & Applications
-(p. 9). ACM.
-
-URL:
-<https://pdfs.semanticscholar.org/3673/2ae9fbf61f84eab43e60bc2bcb0a48d05b67.pdf>
-
-\[3\] - Mehrnezhad, Maryam, et al. "Touchsignatures: identification of user
-touch actions and pins based on mobile sensor data via javascript." Journal of
-Information Security and Applications 26 (2016): 23-38.
-
-URL: https://arxiv.org/pdf/1602.04115.pdf
-
-\[4\] - Spreitzer, R., Moonsamy, V., Korak, T. and Mangard, S., 2016. SoK:
-Systematic Classification of Side-Channel Attacks on Mobile Devices. arXiv
-preprint arXiv:1611.03748.
-
-URL: <https://arxiv.org/pdf/1611.03748.pdf>
-
-\[5\] - Spreitzer, Raphael. "Pin skimming: Exploiting the ambient-light sensor
-in mobile devices." Proceedings of the 4th ACM Workshop on Security and Privacy
-in Smartphones & Mobile Devices. ACM, 2014.
-
-URL: <https://arxiv.org/pdf/1405.3760.pdf>
-
-\[6\] - Xu, Z., Bai, K. and Zhu, S., 2012. TapLogger: Inferring User Inputs On
-Smartphone Touchscreens Using On-board Motion Sensors.
-
-URL:
-<https://pdfs.semanticscholar.org/c860/4311321f1b8f8fdc8acff8871a5bad2ad4ac.pdf> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/index.md b/chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/index.md
deleted file mode 100644
index 5cc874ed31c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: generic-theme-for-test-shell
-title: A Generic theme for the Test Shell
----
-
-When running layout tests, we'd like to minimize the differences we get between
-platforms, so that we don't have to maintain a large number of different
-baselines. The best example of this is on Windows, where different versions of
-Windows can render form controls and other widgets differently depending on your
-desktop settings (classic mode vs. XP theme vs. Vista theme vs. Aero, etc.).
-
-In order to solve this problem, we've [implemented a generic set of
-widgets](http://src.chromium.org/viewvc/chrome?view=rev&revision=26161) for the
-test shell (in
-[test_shell_webthemecontrols.{cc,h}](http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/test_shell/test_shell_webthemecontrol.cc)
-and
-[test_shell_webthemeengine.{cc,h}](http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/test_shell/test_shell_webthemeengine.cc)
-), and the test shell uses those instead of the native controls. The downside to
-this, of course, is that we won't catch any regressions in the native widget
-mapping code.
-
-The new generic widgets are rendered using
-[Skia](http://code.google.com/p/skia/) and are designed explicitly for
-testability (rather than aesthetic concerns). Each widget is drawn differently
-depending on which state the control is in (disabled, readonly, active, hovered,
-etc.), and each widget is drawn differently from each other (e.g., the upper
-part of the scroll bar and the lower part of the scroll bar are distinctly
-different). This is different from what you might do when design real widgets
-for users, because you might actually want different widgets to look the same.
-In this case, we'd rather catch programmatic errors like passing the wrong
-widget ID or the wrong state in.
-
-This image gives you an idea of what all of the "generic" controls look like:
-
-[<img alt="image"
-src="/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png">](/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png)
-
-As you can see, it's none too pretty, but it's quite clear what's what. Some of
-the things to look for:
-
-* Each control state (normal, disabled, read only, hovered, etc.) is
- rendered in a different background color. Controls that are active
- in one form or another (have the keyboard focus, are hovered over,
- or are part of a larger control that has a different part active)
- also get triangles marked in one of the four corners of the widget.
-* Widgets that have "directionality" (e.g., scroll bar top vs. scroll
- bar bottom) have a square marked in the corresponding edge of the
- control (you can see this on the scroll bars in the image above).
-
-This code is currently windows-specific, only because it implements the
-[WebThemeEngine](http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/win/WebThemeEngine.h)
-interface (as found in [src/webkit/api/win
-](http://src.chromium.org/viewvc/chrome/trunk/src/webkit/api/public/win/)). We
-could certainly genericize this further and use the same theme on other
-platforms (Mac, Win), with the same tradeoff (we would test less of the actual
-production code). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png.sha1 b/chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png.sha1
deleted file mode 100644
index 6065dcd2ab1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/generic-theme-for-test-shell/test_shell_generic_theme.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fc65bfc0ebde88239ba3ab2a67b9a3c7bfee8e28 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/google-cloud-print-proxy-design/index.md b/chromium/docs/website/site/developers/design-documents/google-cloud-print-proxy-design/index.md
deleted file mode 100644
index 6e56de9f524..00000000000
--- a/chromium/docs/website/site/developers/design-documents/google-cloud-print-proxy-design/index.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: google-cloud-print-proxy-design
-title: Chromium Print Proxy
----
-
-## **[TOC]**
-
-## **Abstract**
-
-A cloud print proxy enables cloud printing support for legacy (non-cloud-aware) printers. The proxy acts as a [protocol bridge](http://code.google.com/apis/cloudprint/docs/proxyinterfaces.html) between Google Cloud Print and the native print driver stack on existing PCs. The cloud print proxy runs on Windows (XP SP2 and higher), Mac OS X (10.5 and higher on Intel), and Linux desktops and laptops. The proxy code is built as a part of the Google Chrome browser and is an end-user opt-in feature. It should be noted that in parallel to developing the cloud print proxy for legacy printer support, Google will be working with third parties to help create solutions (based on open/documented standards) for allowing printers to connect directly to Google Cloud Print without the need for a dedicated PC or cloud print proxy on that PC.
-
-## **Goals**
-
-* Provide cloud printing support for legacy printers.
-* Serve as a reference implementation for the [service
- interfaces](http://code.google.com/apis/cloudprint/docs/proxyinterfaces.html)
- provided by Google Cloud Print.
-
-## **Audience**
-
-The cloud print proxy code acts as a reference implementation for implementing
-the [service
-interfaces](http://code.google.com/apis/cloudprint/docs/proxyinterfaces.html)
-provided by Google Cloud Print. This document is intended for Google Chrome
-browser developers as well as future implementers of the [service
-interfaces](http://code.google.com/apis/cloudprint/docs/proxyinterfaces.html)
-(for example, printer vendors).
-
-## **Design**
-
-The Google Chrome browser exposes the cloud print proxy as an end-user opt-in
-feature in the Options dialog. When the user chooses to enable this feature, the
-proxy code asks for the user's Google account credentials (if this has not
-already been entered for another cloud-related feature such as Bookmarks Sync).
-Upon successful authentication, the client proxy code runs a background thread
-that performs the following steps:
-
-* It enumerates all the local and network printers connected to the
- client machine. It then requests Google Cloud Print for a list of
- printers already registered to this specific proxy for this specific
- user.
-* The cloud print proxy then registers any local and network printers
- that have not already been registered with the user's Google
- account. Printer registration includes publishing the capabilities
- as well as printer default settings for each printer in an
- extensible format. Printer registration follows the steps outlined
- in the [service
- interfaces](http://code.google.com/apis/cloudprint/docs/proxyinterfaces.html)
- document.
-* For each registered printer, the proxy does the following:
- * Checks to see if the printer still exists locally. If it does
- not, it deletes the printer from the server.
- * Compares the hash of the printer's current capabilities against
- the last uploaded hash to the server. Any changes are then
- uploaded to Google Cloud Print.
- * Checks for any pending jobs assigned to the printer. Pending
- jobs are downloaded and spooled to the local printer. See below
- for details of job status reporting.
- * Registers for notifications of changes or deletions to the
- printer. Changes or deletions are synced with Google Cloud
- Print.
-* The proxy code also listens for print request notifications from
- Google Cloud Print. Print request notifications are delivered using
- the XMPP protocol. Upon receiving a print request, the proxy fetches
- the print jobs for that specific proxy from Google Cloud Print and
- spools them to the local printer. The printer notification code
- above checks for changes to the status of the job and updates Google
- Cloud Print with the status of the job.
-* The proxy code registers for notifications of printer additions.
- Newly added printers are registered with Google Cloud Print.
-* With the exception of the code to talk to the operating system print
- spooler and to perform printer-specific tasks, all of the cloud
- print proxy code is platform-independent. The platform-dependent
- code is abstracted behind a platform-agnostic interface.
-
-Cloud services in the Google Chrome browser such as cloud print proxy and
-Bookmarks Sync share a common framework for signing in to the user's Google
-account as well as for receiving XMPP-based notifications. Users enter their
-Google credentials only once to enable one or more of these features.
-
-The cloud print proxy background thread continues to run in a persistent process
-even when the user closes all visible browser windows. In addition, upon user
-login, an invisible instance of this process with this background thread running
-is launched automatically.
-
-As listed in the table below, the cloud print proxy fetches print jobs in PDF
-format. The format used for the user-selected printer settings (print ticket) on
-each platform is also listed in this table. On Windows, the proxy code will use
-a PDF interpreter library to print the PDF. The proxy code leverages platform
-support on Mac OS X and Linux to print PDF documents.
-
-**Data formats**
-
-The following table summarizes the data formats used for the current proxy
-implementations. Note that these formats are specific to the current proxy
-implementations. Google Cloud Print supports multiple formats and the actual
-data formats used for cloud-aware printers will likely be different from the
-ones listed below.
-
-<table>
-<tr>
-<td><b>Proxy operating system</b></td>
-<td><b>Data format for document to be printed</b></td>
-<td><b>Data format for printer capabilties</b></td>
-<td><b>Data format for printer defaults</b></td>
-<td><b>Data format for print job settings</b></td>
-</tr>
-<tr>
-<td>Windows</td>
-<td>PDF</td>
-<td>XML-based Print Schema. <a href="http://msdn.microsoft.com/en-us/library/ms716431%28VS.85%29.aspx">See here for details</a>.</td>
-<td>XML-based Print Schema. <a href="http://msdn.microsoft.com/en-us/library/ms715314%28VS.85%29.aspx">See here for details</a>.</td>
-<td>XML-based Print Schema. <a href="http://msdn.microsoft.com/en-us/library/ms715314%28VS.85%29.aspx">See here for details</a>.</td>
-</tr>
-<tr>
-<td>Mac OS</td>
-<td>PDF</td>
-<td>PPD. <a href="http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf">See here for details</a>.</td>
-<td>PPD. <a href="http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf">See here for details</a>.</td>
-<td>PPD. <a href="http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf">See here for details</a>.</td>
-</tr>
-<tr>
-<td>Linux</td>
-<td>PDF</td>
-<td>PPD.</td>
-<td>PPD.</td>
-<td>PPD.</td>
-</tr>
-</table>
-**Note:** Not enough research has been done on the details of formats on the Mac
-OS, and our decision might change.
-
-## Open issues
-
-* Printer defaults for specific printers can be changed on the client
- OS. Should we upload the new set of defaults when they change? Or
- should we maintain a separate set of defaults in the cloud? If so,
- we need server-side UI to change defaults. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/CompositingwiththeGPUProcess.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/CompositingwiththeGPUProcess.png.sha1
deleted file mode 100644
index 459d9496269..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/CompositingwiththeGPUProcess.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-14cf139188eb03dc98ef3b2977db03c6e8ad76f9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/HandlingMultipleContexts.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/HandlingMultipleContexts.png.sha1
deleted file mode 100644
index 074904b545e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/HandlingMultipleContexts.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6415db6a44806ca3073da39aeccb0e78a86e2d7a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/SoftwareRenderingArchitecture.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/SoftwareRenderingArchitecture.png.sha1
deleted file mode 100644
index 5044ff228bd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/SoftwareRenderingArchitecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b65aa2d3cc7748f2ea4b348b0d96ed5daf779d2f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/TheGPUProcess.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/TheGPUProcess.png.sha1
deleted file mode 100644
index 15e0b58994b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/TheGPUProcess.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f3b344de987ed8a7e82f8014aac06b23b5e2f972 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/compositing_with_the_gpu_process.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/compositing_with_the_gpu_process.png.sha1
deleted file mode 100644
index 72d56db0c1d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/compositing_with_the_gpu_process.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b9b6b27d9832a19fd920f4f0f8f52bfab1969d74 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap/index.md b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap/index.md
deleted file mode 100644
index 244d8e28c2f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap/index.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/gpu-accelerated-compositing-in-chrome
- - GPU Accelerated Compositing in Chrome
-page_name: gpu-architecture-roadmap
-title: GPU Architecture Roadmap
----
-
-The Chromium graphics stack is complicated, and has been evolving rapidly for
-the last several years. As a result of this rapid evolution, plus the pressure
-to try to ship performance-improving features as fast as possible, we’ve
-developed a large matrix of feature configurations on different platforms. This
-document lays out what’s enabled where, as well as our long-term plans for the
-architectural evolution of the stack.
-
-Our end-goal architecture consists of:
-
- Force compositing mode in the Renderer (accelerated compositing on all
- pages, see our [hardware acceleration overview doc for
- details](http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome))
-
- A browser compositor (which is typically Aura, although we might do
- something slightly different on Mac \[called “Purlieus” below as a
- placeholder\] and the Android WebView) ([design doc for
- Aura](/developers/design-documents/aura-desktop-window-manager))
-
- Ubercompositor ([design
- doc](https://docs.google.com/a/chromium.org/document/d/1ziMZtS5Hf8azogi2VjSE6XPaMwivZSyXAIIp0GgInNA/edit))
-
- Threaded compositing in both the Browser and Renderer ([design
- doc](/developers/design-documents/compositor-thread-architecture))
-
- Impl-side painting in the Renderer and Browser ([design
- doc](http://www.chromium.org/developers/design-documents/impl-side-painting))
-
- BrowserInputController and our zero-input-latency scheduler ([design
- doc](https://docs.google.com/a/chromium.org/document/d/1LUFA8MDpJcDHE0_L2EHvrcwqOMJhzl5dqb0AlBSqHOY/edit))
-
- A software backend for the compositor, used when we don’t have a viable GPU
- (blocklisted or the GPU process crashes repeatedly). This is the only
- configuration variable we intend to support indefinitely. (covered in the
- [ubercomp design
- doc](https://docs.google.com/a/chromium.org/document/d/1ziMZtS5Hf8azogi2VjSE6XPaMwivZSyXAIIp0GgInNA/edit))
-
- Hybrid accelerated rasterization that, when possible, rasterizes layer
- contents using the GPU ([design
- doc](https://docs.google.com/a/chromium.org/document/d/1Vi1WNJmAneu1IrVygX7Zd1fV7S_2wzWuGTcgGmZVRyE/edit#heading=h.7g13ueq2lwwd))
-
-This implies that the following code paths are eventually going away:
-
- Legacy software path in the Renderer
-
- Anything that puts UI onscreen with OS-specific graphics APIs (e.g.
- extensions bubbles, menus, popups, form controls, etc that talk to HWNDs,
- Gtk handles, etc)
-
- Single-threaded compositing scheduler
-
- Main-thread rasterization (i.e. non-impl-side-painting)
-
- BrowserInputController and the old scheduler
-
- Orphaned compositing (self-drawing cc in the renderer or browser (i.e.
- drawing without ubercomp and a browser compositor))
-
-Conceptually, the architecture has various features, some of which depend on
-each other. These features can be enabled or not on every platform (i.e. all
-five operating systems), plus based on whether or not we have a trusted GPU
-device (non-blocklisted card, drivers, and OS version). We’re trying hard to get
-all of these features enabled on all platform configurations, and then delete a
-significant amount of legacy code that we no longer need (i.e. everything
-above).
-
-The current status of these features on all platform configs is captured in the
-below spreadsheet. Platform configs are the cross product of OS, have GPU /
-don’t have GPU, and Aura / non-Aura. Note that Aura is included in the platform
-configuration, rather than as a feature column, because it has such a large
-impact on everything else. We end up with quite a few configurations. Each
-column represents a “feature” and each row represents a platform configuration.
-Current work is marked, as well as what’s finished and what’s yet to be
-attempted.
-
-[Link to
-spreadsheet](https://docs.google.com/a/chromium.org/spreadsheet/ccc?key=0AmUAouCtyY6-dDIwV19qNzJvb3RvOG1QWnNnUlpLS1E#gid=0),
-or see below (see "overview" tab for key):
-
-#### GPU Feature Dashboard
-
-We want to get all the columns green for rows with good viability, and delete
-code that supports the rows with red viability.
-
-Keep this goal in mind when working on features. Contributions to the codebase
-that add dependencies to cells in rows with bad viability are problematic
-because we’re trying to delete these codepaths -- we’re actively working to
-remove dependencies on them. Furthermore, keep in mind that we need to
-eventually make the whole column green, not a single cell. If we don’t, we incur
-technical debt and add complexity by moving our architecture further out of sync
-across platforms. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/index.md b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/index.md
deleted file mode 100644
index 6b70c69cc74..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/index.md
+++ /dev/null
@@ -1,422 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: gpu-accelerated-compositing-in-chrome
-title: GPU Accelerated Compositing in Chrome
----
-
-Tom Wiltzius, Vangelis Kokkevis & the Chrome Graphics team
-
-**updated May 2014**
-
-This code is changing due to [Slimming Paint](/blink/slimming-paint) and thus there may be large changes in the future. Note also that some class names may have changed (e.g. RenderObject to LayoutObject, RenderLayer to PaintLayer).
-
-### Summary
-
-This document provides background and details on the implementation of hardware-accelerated compositing in Chrome.
-
-### Introduction: Why Hardware Compositing?
-
-Traditionally, web browsers relied entirely on the CPU to render web page content. With capable GPUs now an integral part of even the smallest of devices, attention has turned on finding ways to more effectively use this underlying hardware to achieve better performance and power savings. Using the GPU to composite the contents of a web page can result in very significant speedups.
-
-The benefits of hardware compositing come in three flavors:
-
- Compositing page layers on the GPU can achieve far better efficiency
- than the CPU (both in terms of speed and power draw) in drawing and
- compositing operations that involve large numbers of pixels. The hardware is
- designed specifically for these types of workloads.
-
- Expensive readbacks aren’t necessary for content already on the GPU
- (such as accelerated video, Canvas2D, or WebGL).
-
- Parallelism between the CPU and GPU, which can operate at the same time
- to create an efficient graphics pipeline.
-
-Lastly, before we begin, a big disclaimer: the Chrome graphics stack has evolved substantially over the last several years. This document will focus on the most advanced architecture at the time of writing, which is not the shipping configuration on all platforms. For a breakdown of what’s enabled where, see the [GPU architecture roadmap](/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap). Code paths that aren’t under active development will be covered here only minimally.
-
-### Part 1: Blink Rendering Basics
-
-The source code for the Blink rendering engine is vast, complex, and somewhat scarcely documented. In order to understand how GPU acceleration works in Chrome it’s important to first understand the basic building blocks of how Blink renders pages.
-
-#### Nodes and the DOM tree
-
-In Blink, the contents of a web page are internally stored as a tree of Node objects called the DOM tree. Each HTML element on a page as well as text that occurs between elements is associated with a Node. The top level Node of the DOM tree is always a Document Node.
-
-#### From Nodes to RenderObjects
-
-Each node in the DOM tree that produces visual output has a corresponding RenderObject. RenderObjects are stored in a parallel tree structure, called the Render Tree. A RenderObject knows how to paint the contents of the Node on a display surface. It does so by issuing the necessary draw calls to a GraphicsContext. A GraphicsContext is responsible for writing the pixels into a bitmap that eventually get displayed to the screen. In Chrome, the GraphicsContext wraps Skia, our 2D drawing library.
-
-Traditionally most GraphicsContext calls became calls to an SkCanvas or SkPlatformCanvas, i.e. immediately painted into a software bitmap (see [this document](http://www.chromium.org/developers/design-documents/graphics-and-skia) for more detail on this older model of how Chrome uses Skia). But to move painting off the main thread (covered in greater detail later in this document), these commands are now instead recorded into an [SkPicture](https://code.google.com/p/skia/source/browse/trunk/include/core/SkPicture.h). The SkPicture is a serializable data structure that can capture and then later replay commands, similar to a [display list](http://en.wikipedia.org/wiki/Display_list).
-
-#### From RenderObjects to RenderLayers
-
-Each RenderObject is associated with a RenderLayer either directly or indirectly via an ancestor RenderObject.
-
-RenderObjects that share the same coordinate space (e.g. are affected by the same CSS transform) typically belong to the same RenderLayer. RenderLayers exist so that the elements of the page are composited in the correct order to properly display overlapping content, semi-transparent elements, etc. There's a number of conditions that will trigger the creation of a new RenderLayer for a particular RenderObject, as defined in [RenderBoxModelObject::requiresLayer()](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/rendering/RenderBoxModelObject.h) and overwritten for some derived classes. Common cases of RenderObject that warrant the creation of a RenderLayer:
-
- It's the root object for the page
-
- It has explicit CSS position properties (relative, absolute or a
- transform)
-
- It is transparent
-
- Has overflow, an alpha mask or reflection
-
- Has a CSS filter
-
- Corresponds to <canvas> element that has a 3D (WebGL) context or
- an accelerated 2D context
-
- Corresponds to a <video> element
-
-Notice that there isn't a one-to-one correspondence between RenderObjects and RenderLayers. A particular RenderObject is associated either with the RenderLayer that was created for it, if there is one, or with the RenderLayer of the first ancestor that has one.
-
-RenderLayers form a tree hierarchy as well. The root node is the RenderLayer corresponding to the root element in the page and the descendants of every node are layers visually contained within the parent layer. The children of each RenderLayer are kept into two sorted lists both sorted in ascending order, the negZOrderList containing child layers with negative z-indices (and hence layers that go below the current layer) and the posZOrderList contain child layers with positive z-indices (layers that go above the current layer).
-
-#### From RenderLayers to GraphicsLayers
-
-To make use of the compositor, some (but not all) of the RenderLayers get their own backing surface (layers with their own backing surfaces are broadly referred to as compositing layers). Each RenderLayer either has its own GraphicsLayer (if it is a compositing layer) or uses the GraphicsLayer of its first ancestor that has one. This is similar to RenderObject’s relationship with RenderLayers.
-
-Each GraphicsLayer has a GraphicsContext for the associated RenderLayers to paint into. The compositor is ultimately responsible for combining the bitmap output of GraphicsContexts together into a final screen image in a subsequent compositing pass.
-
-While in theory every single RenderLayer could paint itself into a separate backing surface, in practice this could be quite wasteful in terms of memory (VRAM especially). In the current Blink implementation, one of the following conditions must to be met for a RenderLayer to get its own compositing layer (see [CompositingReasons.h](https://code.google.com/p/chromium/codesearch#search/&q=file:CompositingReasons.h)):
-
- Layer has 3D or perspective transform CSS properties
-
- Layer is used by <video> element using accelerated video
- decoding
-
- Layer is used by a <canvas> element with a 3D context or
- accelerated 2D context
-
- Layer is used for a composited plugin
-
- Layer uses a CSS animation for its opacity or uses an animated webkit
- transform
-
- Layer uses accelerated CSS filters
-
- Layer has a descendant that is a compositing layer
-
- Layer has a sibling with a lower z-index which has a compositing layer
- (in other words the layer overlaps a composited layer and should be rendered
- on top of it)
-
-#### Layer Squashing
-
-Never a rule without an exception. As mentioned above, GraphicsLayers can be costly in terms of memory and other resources (e.g. some critical operations have CPU time complexity proportional to the size of the GraphicsLayer tree). Many additional layers can be created for RenderLayers that overlap a RenderLayer with its own backing surface, which can be expensive.
-
-We call intrinsic compositing reasons (e.g. a layer that has a 3D transform on it) “direct” compositing reasons. To prevent a “layer explosion” when many elements are on top of a layer with a direct compositing reason, Blink takes multiple RenderLayers overlapping a direct-compositing-reason RenderLayer and “squashes” them into a single backing store. This prevents the layer explosion caused by overlap. More detail motivating layer squashing can be found in [this presentation](https://docs.google.com/presentation/d/1WOhbWLkhMyo4vZUaHq-FO-mt0B2sejXw-lMwohD5iUo/edit#slide=id.g2a8a2080a_088), and more detail on the code in between RenderLayers and compositing layers can be found in [this presentation](https://docs.google.com/a/chromium.org/presentation/d/1dDE5u76ZBIKmsqkWi2apx3BqV8HOcNf4xxBdyNywZR8/edit#slide=id.p); both are current as of approximately Jan 2014 although this code is undergoing significant change in 2014.
-
-#### From GraphicsLayers to WebLayers to CC Layers
-
-Only a couple more layers of abstraction to go before we get to Chrome’s compositor implementation! GraphicsLayers can represent their content via one or more Web\*Layers. These are interfaces that WebKit ports needed to implement; see Blink’s [public/platform](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/public/platform/) directory for interfaces such as WebContentsLayer.h or WebScrollbarLayer.h. Chrome’s implementations are in [src/webkit/renderer/compositor_bindings](https://code.google.com/p/chromium/codesearch#chromium/src/webkit/renderer/compositor_bindings/) which implement the abstract Web\*Layer interfaces using Chrome compositor layer types.
-
-#### Putting it Together: The Compositing Forest
-
-In summary, there are conceptually four parallel tree structures in place that serve slightly different purposes for rendering:
-
- The DOM tree, which is our fundamental retained model
-
- The RenderObject tree, which has a 1:1 mapping to the DOM tree’s
- visible nodes. RenderObjects know how to paint their corresponding DOM
- nodes.
-
- The RenderLayer tree, made up of RenderLayers that map to a
- RenderObject on the RenderObject tree. The mapping is many-to-one, as each
- RenderObject is either associated with its own RenderLayer or the
- RenderLayer of its first ancestor that has one. The RenderLayer tree
- preserves z-ordering amongst layers.
-
- The GraphicsLayer tree, mapping GraphicsLayers one-to-many
- RenderLayers.
-
-Each GraphicsLayer has Web\*Layers implemented in Chrome with Chrome compositor layers. It is these final “cc layers” (cc = Chrome compositor) that the compositor knows how to operate on.
-
-From here on in this document “layer” is going to refer to a generic cc layer, since for hardware compositing these are the most interesting -- but don’t be fooled, elsewhere when someone says “layer” they might be referring to any of the above constructs!
-
-[<img alt="image" src="/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_compositing_forest.png">](/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_compositing_forest.png)
-
-The Compositing Forest
-
-Now that we’ve (briefly) covered the data structures in Blink that link the DOM to the compositor, we’re ready to explore the compositor itself in earnest.
-
-### Part 2: The Compositor
-
-Chrome’s compositor is a software library for managing GraphicsLayer trees and coordinating frame lifecycles. Code for it lives in the [src/cc](https://code.google.com/p/chromium/codesearch#chromium/src/cc/) directory, outside of Blink.
-
-#### Introducing the Compositor
-
-Recall that rendering occurs in two phases: first paint, then composite. This allows the compositor to perform additional work on a per-compositing-layer basis. For instance, the compositor is responsible for applying the necessary transformations (as specified by the layer's CSS transform properties) to each compositing layer’s bitmap before compositing it. Further, since painting of the layers is decoupled from compositing, invalidating one of these layers only results in repainting the contents of that layer alone and recompositing.
-
-Every time the browser needs to make a new frame, the compositor draws. Note this (confusing) terminology distinction: drawing is the compositor combining layers into the final screen image; while painting is the population of layers’ backings (bitmaps with software rasterization; textures in hardware rasterization).
-
-#### Whither the GPU?
-
-So how does the GPU come into play? The compositor can use the GPU to perform its drawing step. This is a significant departure from the old software rendering model in which the Renderer process passes (via IPC and shared memory) a bitmap with the page's contents over to the Browser process for display (see “The Legacy Software Rendering Path” appendix for more on how that works).
-
-In the hardware accelerated architecture, compositing happens on the GPU via calls to the platform specific 3D APIs (D3D on Windows; GL everywhere else). The Renderer’s compositor is essentially using the GPU to draw rectangular areas of the page (i.e. all those compositing layers, positioned relative to the viewport according to the layer tree’s transform hierarchy) into a single bitmap, which is the final page image.
-
-#### Architectural Interlude: The GPU Process
-
-Before we go any further exploring the GPU commands the compositor generates, its important to understand how the renderer process issues any commands to the GPU at all. In Chrome’s multi-process model, we have a dedicated process for this task: the GPU process. The GPU process exists primarily for security reasons. Note that Android is an exception, where Chrome uses an in-process GPU implementation that runs as a thread in the Browser process. The GPU thread on Android otherwise behaves the same way as the GPU process on other platforms.
-
-Restricted by its sandbox, the Renderer process (which contains an instance of Blink and of cc) cannot directly issue calls to the 3D APIs provided by the OS (GL / D3D). For that reason we use a separate process to access the device. We call this process the GPU Process. The GPU process is specifically designed to provide access to the system's 3D APIs from within the Renderer sandbox or the even more restrictive [Native Client](http://www.chromium.org/nativeclient) "jail". It works via a client-server model as follows:
-
- The client (code running in the Renderer or within a NaCl module),
- instead of issuing calls directly to the system APIs, serializes them and
- puts them in a ring buffer (the command buffer) residing in memory shared
- between itself and the server process.
-
- The server (GPU process running in a less restrictive sandbox that
- allows access to the platform's 3D APIs) picks up the serialized commands
- from shared memory, parses them and executes the appropriate graphics
- calls.
-
-[<img alt="image" src="/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_gpu_process.png">](/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_gpu_process.png)
-
-The GPU Process
-
-#### The Command Buffer
-
-The commands accepted by the GPU process are patterned closely after the GL ES 2.0 API (for example there's a command corresponding to glClear, one to glDrawArrays, etc). Since most GL calls don't have return values, the client and server can work mostly asynchronously which keeps the performance overhead fairly low. Any necessary synchronization between the client and the server, such as the client notifying the server that there's additional work to be done, is handled via an IPC mechanism.
-
-From the client's perspective, an application has the option to either write commands directly into the command buffer or use the GL ES 2.0 API via a client side library that we provide which handles the serialization behind the scenes. Both the compositor and WebGL currently use the GL ES client side library for convenience. On the server side, commands received via the command buffer are converted to calls into either desktop OpenGL or Direct3D via [ANGLE](https://code.google.com/p/angleproject/).
-
-#### Resource Sharing & Synchronization
-
-In addition to providing storage for the command buffer, Chrome uses shared memory for passing larger resources such as bitmaps for textures, vertex arrays, etc between the client and the server. See the [command buffer documentation](http://www.chromium.org/developers/design-documents/gpu-command-buffer) for more about the command format and data transfer.
-
-Another construct, referred to as a [mailbox](http://src.chromium.org/viewvc/chrome/trunk/src/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_texture_mailbox.txt), provides a means to share textures between command buffers and manage their lifetimes. The mailbox is a simple string identifier, which can be attached (consumed) to a local texture id for any command buffer, and then accessed through that texture id alias. Each texture id attached in this way holds a reference on the underlying real texture, and once all references are released by deleting the local texture ids, the real texture is also destroyed.
-
-[Sync points](http://src.chromium.org/viewvc/chrome/trunk/src/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_point.txt) are used to provide non-blocking synchronization between command buffers that want to share textures via mailboxes. Inserting a sync point on command buffer A and then "waiting" on the sync point on command buffer B ensures that commands you then insert on B will not run before the commands that were inserted on A before the sync point.
-
-#### Command Buffer Multiplexing
-
-Currently Chrome uses a single GPU process per browser instance, serving requests from all the renderer processes and any plugin processes. The GPU process can multiplex between multiple command buffers, each one of which is associated with its own rendering context.
-
-Each Renderer can have multiple sources of GL, e.g. WebGL Canvas elements create GL command streams directly. Composition of layers whose contents are created directly on GPU works as follows: instead of rendering straight into the backbuffer, they render into a texture (using a Frame Buffer Object) that the compositor context grabs and uses when rendering that GraphicsLayer. It's important to note that in order for the compositor's GL context to have access to a texture generated by an offscreen GL context (i.e. the GL contexts used for the other GraphicsLayers’ FBOs), all GL contexts used by the GPU process are created such that they share resources.
-
-The resulting architecture looks like this:
-
-[<img alt="image" src="/developers/design-documents/gpu-accelerated-compositing-in-chrome/HandlingMultipleContexts.png">](/developers/design-documents/gpu-accelerated-compositing-in-chrome/HandlingMultipleContexts.png)
-
-Handling multiple contexts
-
-#### Summary
-
-The GPU process architecture offers several benefits including:
-
- Security: The bulk of the rendering logic remains in the sandboxed
- Renderer process, and access to platform 3D APIs is limited to only the GPU
- process.
-
- Robustness: A GPU process crash (e.g. due to faulty drivers) doesn't
- bring down the browser.
-
- Uniformity: Standardizing on OpenGL ES 2.0 as the rendering API for the
- browser regardless of the platform allows for a single, easier to maintain
- codebase across all OS ports of Chrome.
-
- Parallelism: The Renderer can quickly issue commands into the command
- buffer and go back to CPU-intensive rendering activities, leaving the GPU
- process to process them. We can make good use of both processes on
- multi-core machines as well as the GPU and CPU simultaneously thanks to this
- pipeline.
-
-With that explanation out of the way, we can go back to explaining how the GL commands and resources are generated by the Renderer’s compositor.
-
-### Part 3: The Threaded Compositor
-
-The compositor is implemented on top of the GL ES 2.0 client library which proxies the graphics calls to the GPU process (using the method explained above). When a page renders via the compositor, all of its pixels are drawn (remember, drawing != painting) directly into the window’s backbuffer via the GPU process.
-
-The compositor’s architecture has evolved over time: initially it lived in the Renderer’s main thread, was then moved to its own thread (the so-called compositor thread), then took on additional responsibility orchestrating when paints occur (so-called impl-side painting). This document will focus on the latest version; see the [GPU architecture roadmap](http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap) for where older versions may still be in use.
-
-In theory, the threaded compositor is fundamentally tasked with taking enough information from the main thread to produce frames independently in response to future user input, even if the main thread is busy and can’t be asked for additional data. In practice this currently means it makes a copy of the cc layer tree and SkPicture recordings for layer regions within in an area around the viewport’s current location.
-
-#### Recording: Painting from Blink’s Perspective
-
-The interest area is the region around the viewport for which SkPictures are recorded. When the DOM has changed, e.g. because the style of some elements are now different from the previous main-thread frame and have been invalidated, Blink paints the regions of invalidated layers within the interest area into an SkPicture-backed GraphicsContext. This doesn’t actually produce new pixels, rather it produces a display list of the Skia commands necessary to produce those new pixels. This display list will be used later to generate new pixels at the compositor’s discretion.
-
-#### The Commit: Handoff to the Compositor Thread
-
-The threaded compositor’s key property is operation on a copy of main thread state so it can produce frames without needing to ask the main thread for anything. There are accordingly two sides to the threaded compositor: the main-thread side, and the (poorly named) “impl” side, which is the compositor thread’s half. The main thread has a [LayerTreeHost](https://code.google.com/p/chromium/codesearch#chromium/src/cc/trees/layer_tree_host.cc), which is its copy of the layer tree, and the impl thread has a [LayerTreeHostImpl](https://code.google.com/p/chromium/codesearch#chromium/src/cc/trees/layer_tree_host_impl.cc), which is its copy of the layer tree. Similar naming conventions are followed throughout.
-
-Conceptually these two layer trees are completely separate, and the compositor (impl) thread’s copy can be used to produce frames without any interaction with the main thread. This means the main thread can be busy running JavaScript and the compositor can still be redraw previously-committed content on the GPU without interruption.
-
-In order to produce interesting new frames, the compositor thread needs to know how it should modify its state (e.g. updating layer transforms in response to an event like a scroll). Hence, some input events (like scrolls) are forwarded from the Browser process to the compositor first and from there to the Renderer main thread. With input and output under its control, the threaded compositor can guarantee visual responsiveness to user input. In addition to scrolls, the compositor can perform any other page updates that don’t require asking Blink to repaint anything. Thus far CSS animations and CSS filters are the only other major compositor-driven page updates.
-
-The two layer trees are kept synchronized by a series of messages known as the commit, mediated by the compositor’s scheduler (in [cc/trees/thread_proxy.cc](https://code.google.com/p/chromium/codesearch#chromium/src/cc/trees/thread_proxy.cc)). The commit transfers the main thread’s state of the world to the compositor thread (including an updated layer tree, any new SkPicture recordings, etc), blocking the main thread so this synchronization can occur. It’s the final step during which the main thread is involved in production of a particular frame.
-
-Running the compositor in its own thread allows the compositor’s copy of the layer tree to update the layer transform hierarchy without involving the main thread, but the main thread eventually needs e.g. the scroll offset information as well (so JavaScript can know where the viewport scrolled to, for example). Hence the commit is also responsible for applying any compositor-thread layer tree updates to the main thread’s tree and a few other tasks.
-
-As an interesting aside, this architecture is the reason JavaScript touch event handlers prevent composited scrolls but scroll event handlers do not. JavaScript can call preventDefault() on a touch event, but not on a scroll event. So the compositor cannot scroll the page without first asking JavaScript (which runs on the main thread) if it would like to cancel an incoming touch event. Scroll events, on the other hand, can’t be prevented and are asynchronously delivered to JavaScript; hence the compositor thread can begin scrolling immediately regardless of whether or not the main thread processes the scroll event immediately.
-
-#### Tree Activation
-
-When the compositor thread gets a new layer tree from the main thread it examines the new tree to see what areas are invalid and re-rasterizes those layers. During this time the active tree remains the old layer tree the compositor thread had previously, and the pending tree is the new layer tree whose content is being rasterized.
-
-To maintain consistency of the displayed content, the pending tree is only activated when its visible (i.e. within the viewport) high-resolution content is fully rasterized. Swapping from the current active tree to a now-ready pending tree is called activation. The net effect of waiting for the rastered content to be ready means the user can usually see at least some content, but that content might be stale. If no content is available Chrome displays a blank or checkerboard pattern with a GL shader instead.
-
-It’s important to note that it’s possible to scroll past the rastered area of even the active tree, since Chrome only records SkPictures for layer regions within the interest area. If the user is scrolling toward an unrecorded area the compositor will ask the main thread to record and commit additional content, but if that new content can’t be recorded, committed, and rasterized to activate in time the user will scroll into a checkerboard zone.
-
-To mitigate checkerboarding, Chrome can also quickly raster low-resolution content for the pending tree before high-resolution. Pending trees with only low-resolution content available for the viewport are activated if its better than what’s currently on screen (e.g. the outgoing active tree had no content at all rasterized for the current viewport). The tile manager (explained in the next section) decides what content to raster when.
-
-This architecture isolates rasterization from the rest of the frame production flow. It enables a variety of technologies that improve the responsiveness of the graphics system. Image decode and resize operations are performed asynchronously, which were previously expensive main-thread operations performed during painting. The asynchronous texture upload system mentioned earlier in this document was introduced with impl-side painting as well.
-
-#### Tiling
-
-Rasterizing the entirety of every layer on the page is a waste of CPU time (for the paint operations) and memory (RAM for any software bitmaps the layer needs; VRAM for the texture storage). Instead of rasterizing the entire page, the compositor breaks up most web content layers into tiles and rasterizes layers on a per-tile basis.
-
-Web content layer tiles are prioritized heuristically by a number of factors including the tile’s proximity to the viewport and its estimated time to being on-screen. GPU memory is then allocated to tiles based on their priority, and tiles are rastered from the SkPicture recordings to fill the available memory budget in priority order. Currently (May 2014) the specific approach to tile prioritization being reworked; see the [Tile Prioritization Design Doc](https://docs.google.com/a/chromium.org/document/d/1tkwOlSlXiR320dFufuA_M-RF9L5LxFWmZFg5oW35rZk/edit#) for more info.
-
-Note that tiling isn’t necessary for layer types whose contents are already resident on the GPU, such as accelerated video or WebGL (for the curious, layer types are implemented in the [cc/layers](https://code.google.com/p/chromium/codesearch#chromium/src/cc/layers/) directory).
-
-#### Rasterization: Painting from cc/Skia’s perspective
-
-SkPicture records on the compositor thread get turned into bitmaps on the GPU in one of two ways: either painted by Skia’s software rasterizer into a bitmap and uploaded to the GPU as a texture, or painted by Skia’s OpenGL backend (Ganesh) directly into textures on the GPU.
-
-For Ganesh-rasterized layers the SkPicture is played back with Ganesh and the resulting GL command stream gets handed to the GPU process via the command buffer. The GL command generation happens immediately when the compositor decides to rasterize any tiles, and tiles are bundled together to avoid prohibitive overhead of tiled rasterization on the GPU. See the [GPU accelerated rasterization design doc](https://docs.google.com/a/chromium.org/document/d/1Vi1WNJmAneu1IrVygX7Zd1fV7S_2wzWuGTcgGmZVRyE/edit?usp=drive_web) for more information on the approach.
-
-For software-rasterized layers the paint targets a bitmap in memory shared between the Renderer process and the GPU process. Bitmaps are handed to the GPU process via the resource transfer machinery described above. Because software rasterization can be very expensive, this rasterization doesn’t happen in the compositor thread itself (where it could block drawing a new frame for the active tree), but rather in a compositor raster worker thread. Multiple raster worker threads can be used to speed up software rasterization; each worker pulls from the front of the prioritized tile queue. Completed tiles are uploaded to the GPU as textures.
-
-Texture uploads of bitmaps are a non-trivial bottleneck on memory-bandwidth-constrained platforms. This has handicapped the performance of software-rasterized layers, and continues to handicap uploads of bitmaps necessary for the hardware rasterizer (e.g. for image data or CPU-rendered masks). Chrome has had various different texture upload mechanisms in the past, but the most successful has been an asynchronous uploader that performs the upload in a worker thread in the GPU process (or an additional thread in the Browser process, in the case of Android. This prevents other operations from having to block on potentially-lengthy texture uploads.
-
-One approach to removing the texture upload problem entirely would be to use zero-copy buffers shared between the the CPU and GPU on unified memory architecture devices exposing such primitives. Chrome does not currently use this construct, but could in the future; for more information see the [GpuMemoryBuffer design doc](https://docs.google.com/document/d/1SaTYTBvHWWDKA3MPJPpQ-79RNgdS4Xu4g3KiD39VQjU/edit?usp=sharing).
-
-Also note it’s possible to take third approach to how content is painted when using the GPU to rasterize: rasterize the content of each layer directly into the backbuffer at draw time, rather than into a texture beforehand. This has the advantage of memory savings (no intermediate texture) and some performance improvements (save a copy of the texture to the backbuffer when drawing), but has the downside of performance loss when the texture is effectively caching layer content (since now it needs to be re-painted every frame). This “direct to backbuffer” or “direct Ganesh” mode is not implemented as of May 2014, but see the [GPU rasterization design doc](https://docs.google.com/a/chromium.org/document/d/1Vi1WNJmAneu1IrVygX7Zd1fV7S_2wzWuGTcgGmZVRyE/edit#) for additional relevant considerations.
-
-[<img alt="image" src="/developers/design-documents/gpu-accelerated-compositing-in-chrome/compositing_with_the_gpu_process.png">](/developers/design-documents/gpu-accelerated-compositing-in-chrome/compositing_with_the_gpu_process.png)
-
-Compositing with the GPU process
-
-#### Drawing on the GPU, Tiling, and Quads
-
-Once all the textures are populated, rendering the contents of a page is simply a matter of doing a depth first traversal of the layer hierarchy and issuing a GL command to draw a texture for each layer into the frame buffer.
-
-Drawing a layer on screen is really a matter of drawing each of its tiles. Tiles are represented as quads (simple 4-gons i.e. rectangles; see [cc/quads](https://code.google.com/p/chromium/codesearch#chromium/src/cc/quads)) drawn filled with a subregion of the given layer’s content. The compositor generates quads and a set of render passes (render passes are simple data structures that hold a list of quads). The actual GL commands for drawing are generated separately from the quads (see [cc/output/gl_renderer.cc](https://code.google.com/p/chromium/codesearch#chromium/src/cc/output/gl_renderer.cc)). This is abstracted away from the quad implementation so it is possible to write non-GL backends for the compositor (the only significant non-GL implementation is the software compositor, covered later). Drawing the quads more or less amounts to setting up the viewport for each render pass, then setting up the transform for and drawing each quad in the render pass’s quad list.
-
-Note that doing the traversal depth-first ensures proper z-ordering of cc layers, and the z-ordering of the potentially-multiple RenderLayers associated with that cc layer is guaranteed earlier by the ordering of the RenderObject tree traversal when the RenderObjects for a layer are painted.
-
-#### Varied Scale Factors
-
-One significant advantage of impl-side painting is that the compositor can reraster existing SkPictures at arbitrary scale factors. This comes in useful in two main contexts: pinch-to-zoom and producing low-resolution tiles during fast flings.
-
-The compositor will intercept input events for pinch/zoom and scale the already-rastered tiles appropriately on the GPU, but it also rerasters at more suitable target resolutions while this is happening. Whenever the new tiles are ready (rastered and uploaded) they can be swapped in by activating the pending tree, improving the resolution of the pinch/zoom’d screen (even if the pinch isn’t yet complete).
-
-When rasterizing in software the compositor also attempts to quickly produce low-resolution tiles (which are typically much cheaper to paint) and display them during a scroll if the high-res tiles aren’t yet ready. This is why some pages can look blurry during a fast scroll -- the compositor displays the low-res tiles on screen while the high-res tiles raster.
-
-## Appendixes
-
-### Appendix A: Browser Compositing
-
-This document primarily covers activity in the Renderer process for displaying web content. Chrome’s UI also makes use of the same underlying compositing infrastructure, however, and it’s worth noting the Browser’s involvement.
-
-#### Browser Compositing with Aura/Ash
-
-Chrome & ChromeOS have a composited window manager in the combination of Ash and Aura (Ash is the window manager itself, while Aura provides the basic primitives like windows and input events). Ash, the window manager, is only used on ChromeOS and in Win8’s Metro Mode; on Linux and non-Metro Windows Aura windows wrap native OS windows. Aura uses cc for Aura window composition, and Views uses cc through Aura for compositing different elements in the browser UI for a window. Most Aura windows only have 1 layer, although some Views can pop into their own layers too. These mirror the way Blink uses cc to composite web content layers. For more information on Aura, see the [Aura design doc index](/developers/design-documents/aura).
-
-#### The Übercompositor
-
-Originally Blink would composite all of the Renderer’s layers (i.e. layers for the web contents area) into a texture, and then that texture would be composited with the rest of the browser UI’s layers by a second copy of cc in the browser process. This was simple, but had the major disadvantage of incurring an extra copy the size of the viewport each frame (since the content layers were first composited to a texture, and then that texture would get copied during the browser compositor’s draw).
-
-The Übercompositor performs all composition of both browser UI and renderer layers in a single drawing pass. Rather than drawing its quads itself, the Renderer hands all them to the browser where they are drawn in the location of a DelegatedRendererLayer in the Browser compositor’s layer tree. For much more detail on this subject, see the [übercompositor design doc](https://docs.google.com/a/chromium.org/document/d/1ziMZtS5Hf8azogi2VjSE6XPaMwivZSyXAIIp0GgInNA/edit).
-
-### Appendix B: The Software Compositor
-
-In some situations hardware compositing is infeasible, e.g. if the device’s graphics drivers are blocklisted or the device lacks a GPU entirely. For these situations is an alternative implementation to the GL renderer called the SoftwareRenderer (see [src/cc/output/software_renderer](https://code.google.com/p/chromium/codesearch#chromium/src/cc/output/software_renderer.h)). A number of other places (the RasterWorkerPool, ResourceProvider, etc) also require their own software fallbacks for when a OutputSurface (see [src/cc/output/output_surface](https://code.google.com/p/chromium/codesearch#chromium/src/cc/output/output_surface.h&l=90)) ContextProvider is not available. In sum, when operating without access to a GPU Chrome has roughly the same capabilities in software, but with a few key differences in implementation:
-
- Rather than uploading quads to the GPU as textures, it leaves they are
- left in system memory and shuttled them around as shared memory
-
- Rather than using GL to copy content texture tiles into the backbuffer,
- the software renderer uses Skia’s software rasterizer to perform the copies
- (and to perform any necessary matrix math and clipping)
-
-This means that operations like 3D transforms and composited CSS filters “just work” with the software renderer, but web content that inherently relies on GL (e.g. WebGL) does not. For software rendering of WebGL Chrome uses SwiftShader, a software GL rasterizer.
-
-### Appendix C: Grafix 4 N00bs glossary
-
-bitmap: a buffer of pixel values in memory (main memory or the GPU’s video RAM)
-
-texture: a bitmap meant to be applied to a 3D model on the GPU
-
-texture quad: a texture applied to a very simple model: a four-pointed polygon, e.g. a rectangle. Useful when all you want is to display the texture as a flat rectangular surface, potentially translated (either in 2D or 3D), which is exactly what we do when compositing.
-
-invalidation: region of the document marked dirty, usually meaning it requires repainting. The style system has a similar notion of invalidation, so style can be dirtied too, but most commonly this refers to a region needing repainting.
-
-painting: in our terms, the phase of rendering where RenderObjects make calls into the GraphicsContext API to make a visual representation of themselves
-
-rasterization: in our terms, the phase of rendering where the bitmaps backing up RenderLayers are filled. This can occur immediately as GraphicsContext calls are by the RenderObjects, or it can occur later if we’re using SkPicture record for painting and SkPicture playback for rasterization.
-
-compositing: in our terms, the phase of rendering that combines RenderLayer’s textures into a final screen image
-
-drawing: in our terms, the phase of rendering that actually puts pixels onto the screen (i.e. puts the final screen image onto the screen).
-
-backbuffer: when double-buffering, the screen buffer that’s rendered into, not the one that’s currently being displayed
-
-frontbuffer: when double-buffering, the screen buffer that’s currently being displayed, not the one that’s currently being rendered into
-
-#### swapbuffers: switching the front and back buffers
-
-Frame Buffer Object: OpenGL term for a texture that can be rendered to off-screen as if it were a normal screen buffer (e.g. the backbuffer). Useful for us because we want to be able to render to textures and then composite these textures; with FBOs we can pretend to give e.g. WebGL its own frame and it need not worry about anything else going on on the page.
-
-damage: the area of the screen that has been “dirtied” by user interaction or programmatic changes (e.g. JavaScript changing styles). This is the area of the screen that needs to be re-painted when updating.
-
-retained mode: a rendering method where the graphics system maintains a complete model of the objects to be rendered. The web platform is retained in that the DOM is the model, and the platform (i.e. the browser) keeps track of the state of the DOM and its API (i.e. JavaScript’s access to the DOM) can be used to modify it or query the current state of it, but the browser can render from the model at any time without any instruction from JavaScript.
-
-immediate mode: a rendering method where the graphics system doesn’t keep track of the overall scene state but rather immediately executes any commands given to it and forgets about them. To redraw the whole scene all commands need to be re-issued. Direct3D is immediate mode, as is Canvas2D.
-
-context virtualization: The GPU process does not necessarily create an actual driver-level GL context for a given command buffer client. It can also have a shared real context for multiple clients and restore the GL state to the expected state for a given client when it parses its GL commands -- we refer to this shadowed state as a “virtual context”. This is used on Android to work around bugs and performance problems with certain drivers (slow GL context switches, synchronization issues with FBO rendering across multiple contexts, and crashes when using share groups). Chrome enables context virtualization on a subset of drivers via the GPU blocklist file.
-
-### Appendix D: Relevant flags
-
-If you are curious about the structure of the composited layers, use the ‘show composited layer borders’ flag. You can also try the ‘threaded compositing’, ‘threaded animation’. All available in about:flags.
-
-As mentioned earlier, accelerated compositing in WebKit (and Chromium) kicks in only if certain types of content appear on the page. An easy trick to force a page to switch over to the compositor is to supply a -webkit-transform:translateZ(0) for an element in the page.
-
-### Appendix E: Debugging composited layers
-
-Using the --show-composited-layer-borders flag will display borders around layers, and uses colors to display information about the layers, or tiles within layers.
-
-These colors can sometimes change and the list that used to be here quickly gets outdated, so refer to the comments in [src/cc/debug/debug_colors.cc](https://code.google.com/p/chromium/codesearch#chromium/src/cc/debug/debug_colors.cc&q=debug%20borders&sq=package:chromium) for a current list of the colors and their meaning.
-
-### Appendix F: The Legacy Software Rendering Path
-
-This section is included here for posterity as part of the original design of WebKit pre-compositing. This path is still lingering as of May 2014, but will soon be removed entirely in Blink.
-
-#### The Legacy Software Rendering Path
-
-WebKit fundamentally renders a web page by traversing the RenderLayer hierarchy starting from the root layer. The WebKit codebase contains two distinct code paths for rendering the contents of a page, the software path and hardware accelerated path. The software path is the traditional model.
-
-In the software path, the page is rendered by sequentially painting all the RenderLayers, from back to front. The RenderLayer hierarchy is traversed recursively starting from the root and the bulk of the work is done in RenderLayer::paintLayer() which performs the following basic steps (the list of steps is simplified here for clarity):
-
- Determines whether the layer intersects the damage rect for an early out.
-
- Recursively paints the layers below this one by calling paintLayer() for
- the layers in the negZOrderList.
-
- Asks RenderObjects associated with this RenderLayer to paint themselves.
-
- This is done by recursing down the RenderObject tree starting with the
- RenderObject which created the layer. Traversal stops whenever a
- RenderObject associated with a different RenderLayer is found.
-
- Recursively paints the layers above this one by calling paintLayer() for
- the layers in the posZOrderList.
-
-In this mode RenderObjects paint themselves into the destination bitmap by issuing draw calls into a single shared GraphicsContext (implemented in Chrome via Skia).
-
-Note that the GraphicsContext itself has no concept of layers, but to make drawing of semi-transparent layers correct there’s a caveat: semi-transparent RenderLayers call GraphicsContext::beginTransparencyLayer() before asking their RenderObjects to draw. In the Skia implementation, the call to beginTransparencyLayer() causes all subsequent draw calls to render in a separate bitmap, which gets composited with the original one when the layer drawing is complete and a matching call to endTransparencyLayer() is made to the GraphicsContext after all the semi-transparent RenderLayer’s RenderObjects have drawn.
-
-#### From WebKit to the Screen
-
-[<img alt="image" src="/developers/design-documents/gpu-accelerated-compositing-in-chrome/software_rendering_architecture.png">](/developers/design-documents/gpu-accelerated-compositing-in-chrome/software_rendering_architecture.png)
-
-Software Rendering Architecture
-
-Once all the RenderLayers are done painting into the shared bitmap the bitmap still needs to make it onto the screen. In Chrome, the bitmap resides in shared memory and control of it is passed to the Browser process via IPC. The Browser process is then responsible for drawing that bitmap in the appropriate tab / window via the OS’s windowing APIs (using e.g. the relevant HWND on Windows). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/software_rendering_architecture.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/software_rendering_architecture.png.sha1
deleted file mode 100644
index 2b8b5daee37..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/software_rendering_architecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b58c7a09a206d87f8f14784fd9df333f30f5075c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_compositing_forest.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_compositing_forest.png.sha1
deleted file mode 100644
index abef704a8fa..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_compositing_forest.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-99b9b1a00dcd73203f719885391e708e78548704 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_gpu_process.png.sha1 b/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_gpu_process.png.sha1
deleted file mode 100644
index dbcd3e44f62..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-accelerated-compositing-in-chrome/the_gpu_process.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9fa383ea4f0472c65c4b83b723bebc36a73b554b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-command-buffer/index.md b/chromium/docs/website/site/developers/design-documents/gpu-command-buffer/index.md
deleted file mode 100644
index 652b51553ae..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-command-buffer/index.md
+++ /dev/null
@@ -1,434 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: gpu-command-buffer
-title: GPU Command Buffer
----
-
-This are mostly just notes on the GPU command buffer
-
-The GPU Command Buffer system is the way in which Chrome talks to the GPU either
-OpenGL or OpenGL ES (or OpenGL ES emulated through ANGLE). It is designed to
-have an API that emulates the OpenGL ES 2.0 API enforcing the restrictions of
-that API and working around incompatibilities in drivers and platforms.
-
-## Goals:
-
-The #1 goal of the command buffer system is security. Graphics systems in OSes
-have gaping security holes. Two simple examples are you can allocate a texture
-or a buffer and the memory returned is left as is. That memory is often left
-over from other applications and could contain passwords, images or other data
-that should not be visible to the calling app. Similarly there are many API
-functions that are buggy or have poorly designed APIs that make them easy to
-call in ways that would crash the browser. The #1 goal of the GPU process is to
-prevent these problems.
-
-The #2 goal is compatibility across systems. From the POV of clients there
-should be no differences in behavior across systems. In some cases that means
-enforcing restrictions that are not there on the actual system. Examples include
-disabling advanced GLSL features. Others involve working around bugs by
-re-writing shaders or other techniques.
-
-The #3 goal is speed. Speed is why a command buffer implementation was chosen.
-The client can write commands very quickly with little or no communication with
-the service and only once in a while tell the service it has written more
-commands. For example, another implementation could have used a separate IPC for
-each OpenGL ES 2.0 function but that would arguably be too slow. The command
-buffer gets another speed boost because it effectively parallelizes calls into
-the OS graphics API. A call like glUniform or glDrawArrays might be a very
-expensive call but because of the command buffer the client just writes a few
-bytes into the command buffer and is done. The GPU process calls the real OpenGL
-function on another process which effectively makes the program multi-core.
-
-Implementation:
-
-The basic implementation is a "command buffer". A client (the render process,
-pepper plugin, etc..) writes commands into some shared memory. It updates a
-'put' pointer through IPC telling the GPU process how far it has written into
-that buffer. The GPU process or service then reads commands from that buffer.
-For each command it validates the command, its arguments, and whether or not the
-arguments are appropriate for the current state of the OSes graphics API and
-only then makes the actual call into the OS. This means even a compromised
-renderer running native code, writing its own commands, can hopefully not get
-the GPU process to call the graphics system in such a way as to compromise the
-system.
-
-When writing new service side code, please keep that in mind. Never design a new
-command that requires the client to be well behaved. Assume the client can go
-rogue. For example, make sure the service's bookkeeping will never be wrong no
-matter what the client does.
-
-API Layers:
-
-### Life of a GL call in Chrome
-
-In simple terms:
-
-gl2.h-&gt;gles2_c_lib.cc-&gt;GLES2Implemetation-&gt;GLES2CmdHelper...SharedMemory...-&gt;GLES2DecoderImpl-&gt;ui/gfx/gl/gl_bindings-&gt;OpenGL
-
-There is an interface, CommandBuffer, that is responsible for coordinating
-communication between GLES2CmdHelper and GLES2DecoderImpl. It has methods for
-creating and deleting shared memory as well as communicating the current state
-back and forth. Specifically sending the latest 'put' pointer from the client
-through AsyncFlush() or Flush() and for getting the latest 'get' pointer through
-the results of 'Flush'
-
-An implementation of CommandBuffer called CommandBufferService directly talks to
-GLES2DecoderImpl. If you had a single threaded single process chrome you could
-pass an instance of CommandBufferService to GLES2CmdHelper and the ideas is
-things would just work. In the the real multi-process chrome there is another
-implementation, ComamdBufferProxy which uses IPC to talk from the client to the
-service through GpuCommandBufferStub to GpuScheduler to CommandBufferService.
-
-Client side code:
-
-Note: Everything in src/gpu/command_buffer/client and
-src/gpu/command_buffer/common must compile WITHOUT EXTRA LIBRARIES as they are
-used in the untrusted Pepper plugin
-
-These define the public OpenGL ES 2.0 interface
-
-src/third_party/khronos/GLES2/gl2.h
-
-src/third_party/khronos/GLES2/gl2ext.h
-
-This defines the C interface. Most of this is auto generated
-
-src/gpu/command_buffer/client/gles2_c_lib.cc
-
-src/gpu/command_buffer/client/gles2_c_lib_autogen.h
-
-This is the actual client side implementation that writes commands into the
-command buffer. Most of this is auto generated.
-
-src/gpu/command_buffer/client/gles2_implementation.cc
-
-src/gpu/command_buffer/client/gles2_implementation_autogen.h
-
-This is a mostly auto generated class to help with formatting commands.
-
-src/gpu/command_buffer/client/gles2_cmd_helper.h
-
-src/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
-
-These define the actual format of the commands
-
-src/gpu/command_buffer/common/cmd_buffer_common.h
-
-src/gpu/command_buffer/common/gles2_cmd_format.h
-
-src/gpu/command_buffer/common/gles2_cmd_format_autogen.h
-
-### Service side code:
-
-This is the code that reads the commands, validates and calls OpenGL.
-
-src/gpu/command_buffer/service/gles2_cmd_decoder.cc
-
-src/gpu/command_buffer/service/gles2_cmd_decoder_autogen.cc
-
-## 3 ways of transferring data
-
-There are 3 ways of transferring data through the command buffer.
-
-### #1) In a command itself
-
-Commands can either have a hard coded length (glUniform4f for example takes
-exactly a location and 4 floats) or they can have a variable length
-(glUniform4fv takes N sets of 4 floats). The data is inserted after the command
-in the command buffer and the length of the command itself is updated to contain
-that data.
-
-Advantages:
-
-\* Easy. Fire and forget
-
-Disadvantages:
-
-\* Commands have a maximum length of 1meg - 1
-
-\* Commands can only be as long as the command buffer itself.
-
-### #2) In shared memory
-
-Some commands transfer data in shared memory. TexImage2D for example, the client
-puts data into a shared memory. The command itself has a shared memory id and an
-offset into that shared memory as well as either an explicit or implicit size.
-For TexImage2D the size is implicit.
-
-Advantages:
-
-\* Can transfer any size
-
-\* Can pre-allocate the shared memory and fill any time (glMapTexSubImage2D for
-example)
-
-Disadvantages:
-
-\* Must check with the server when it has actually used the contents of the
-shared memory.
-
-### #3) In a bucket
-
-Buckets are a kind of abstraction of #2. You define a bucket by size (1 command)
-you then transfer the data into the bucket through shared memory (n commands),
-finally you issue the command you really wanted to issue (ShaderSource,
-CompressedTeximage2D, ...) and reference the bucket.
-
-The problem buckets attempt to solve is; Imagine you are trying to implement
-TexImage2D and you only have 1meg of shared memory and you are asked to send a
-3meg texture. You can't call TexImage2D with your 3 meg of data since you only
-have 1 meg so instead you call TexImage2D with no data to define your texture
-and then call TexSubImage2D 3 times to transfer your data. GLES2Implementation
-actually does this.
-
-Now imagine you are trying to implement ShaderSource. You are passed a 3 meg
-string and you only have 1meg of shared memory. There is no ShaderSubSource
-function so you can't use the previous solution. Instead, you create a bucket of
-3 meg, transfer the data to that bucket 1meg at a time, then issue the
-ShaderSource command referencing the bucket.
-
-Advantages:
-
-\* Do not need a "SubData" command implemented
-
-\* Can handle data larger than shared memory
-
-Disadvantages:
-
-\* Slower. Data has to be copied out of shared memory and into a bucket.
-
-Adding a command:
-
-Here are some terse notes for adding a new command:
-
-1. Add your function to src/gpu/command_buffer/cmd_buffer_functions.txt
- Note: See examples. For new enums, GLenumTypeOfEnum. For GLint, GLintptr or
- GLsizei, if negative is disallowed GLxxxNotNegative. For resources
- GLidTypeOfResource
-2. Add your function to _FUNCTION_INFO in
- src/gpu/command_buffer/build_gles2_cmd_buffer.py
- Copy a function that is similar to yours.
-3. run build_gles2_cmd_buffer.py from the command_buffer directory
- Note: we don't currently run this as part of the build as this lets us
- easily see the changes during code review.
-4. Add your function to src/third_party/gl2ext.h if you want it
- callable as an OpenGL like function.
- If you only need it callable from WebGraphicsContext3DCommandBufferImpl then
- you don't need to do this step.
-5. If your function adds any new GL ENUMs to other functions (most
- commonly glGetInteger, glTexImage2D, etc.)
- 1. Add them in src/gpu/command_buffer/service/function_info.cc
- In particular, add them only if your functionally is available and if
- they are requested. See code in function_info.cc
- 2. Add them in src/gpu/command_buffer/common/gles2_cmd_utils.cc
- * for glGetInteger enums add them to
- GLES2Util:GLGetNumValuesReturned
- * for texture and buffer formats see ElementsPerGroup,
- BytesPerElement
- * for texture and renderbuffer formats see
- GetChannelsForFormat
-6. See these CLs as examples
- * <http://codereview.chromium.org/8772033/>
-
-**Texture issues**
-
-In order to prevent a user program from reading uninitialized vram all textures
-must be cleared before being used. In order to increase the speed of programs
-that upload a lot of textures this clearing happens lazily. If you call
-glTexImage(..., null) the command buffer will create the texture level and mark
-it as unclear. Before any read or write to that texture the command buffer will
-clear it.
-
-If you add functions that update textures you need to call the code that clears
-an uncleared level by calling TextureManager::ClearTextureLevel for the level in
-question. You can see examples of this in GLES2DecoderImpl::DoTexImage2D,
-GLES2DecoderImpl::DoCopyTexSubImage2D, etc..
-
-## OpenGL Quirks to be aware of
-
-* There are N \* M texture binding points.
- The reference pages for OpenGL ES 2.0 were derived from OpenGL 1.0 written
- in 1993 when maybe there was only 1 texture allowed and talk about 2 binding
- points, GL_TEXTURE_2D, and GL_TEXTURE_CUBE_MAP. But, glActiveTexture select
- the active texture slot, each one has these binding points. To give an
- example
- GLuint textures\[2\];
- glGenTextures(2, textures);
- texture0 = textures\[0\];
- texture1 = textures\[1\];
- glBindTexture(GL_TEXTURE_2D, texture0);
- glActiveTexture(GL_TEXTURE1);
- glBindTexture(GL_TEXTURE_2D, texture1);
- glActiveTexture(GL_TEXTURE0);
- // This command will effect texture0 not texture1
- glTexImage2D(GL_TEXTURE_2D, ....
- As more texture targets are added there are more binding points.
-* glGenXXX only reserves a name, it does not create a resource.
- In other worlds
- GLuint tex;
- glGenTextures(1, &tex);
- printf("%s\\n", glIsTexture(tex) ? "true" : "false"); // prints false
- glBindTexture(GL_TEXTURE_2D, tex);
- printf("%s\\n", glIsTexture(tex) ? "true" : "false"); // prints true
- This is a arguably a bug in the command buffer right now though there is
- code to work around it. You'll see we create internal tracking objects on
- glGenXXX but they are marked as invalid until glBindXXX time (except for
- Queries)
-* glBindXXX creates objects.
- You do NOT have to call glGenXXX before calling glBindXXX. You can make up
- any ids you like on your own for buffers, framebuffers, renderbuffers and
- textures and GL will automatically create an object for you when you call
- glBindXXX.
- Note: This is not true for Queries, Programs and Shaders.
-* Resources are ref counted.
- This has many issues. In general, calling glDeleteXXX does 2 things. It
- releases the 'id' so the 'id' if used again, will generate a new resource.
- It releases the references in the current context's state and the current
- context's bound objects BUT NO WHERE ELSE.
- So: glDeleteTextures will free the ids for those textures and clear the
- references from this contexts texture units and from the current framebuffer
- object. It will NOT clear the references from other framebuffer objects nor
- other contexts.
- Programs and Shaders are far more quirky.
-* Framebuffer objects can not be shared across contexts.
- According to the OpenGL ES spec all objects are declared as shared but
- Appendix C of the OpenGL spec says that FBOs can not actually be shared.
-* Texture id 0 is the default texture.
- There's no such thing as turning off textures in OpenLG ES 2.0. Binding
- texture id = 0 just binds the default texture. All the normal texture
- commands can effect this default texture.
-
-## OpenGL ES 2.0 incompatibilities
-
-### Client side arrays
-
-Client side arrays refers to the ability to store vertex data in client side
-memory and have OpenGL reference it directly. The command buffer itself does not
-support this. All vertex data must be put in an OpenGL buffer.
-
-To keep compatibility the client side class, GLES2Implementation, emulates
-client side arrays by tracking the OpenGL attribute state and at draw time,
-copying any client side arrays into a buffer, updating the vertex attributes to
-use this buffer, issuing the draw call, then restoring the vertex attribute
-state. This is a very slow operation and because there is no way to know when
-the client has changed any of its data those buffers must be updated with every
-draw call. For this reason, and because more modern versions of OpenGL require
-it, client side array emulation is compiled out for everything except Native
-Client.
-
-### GL_FIXED
-
-OpenGL ES 2.0 is required to support GL_FIXED as an attribute type (an argument
-to glVertexAttribPointer). Desktop GPUs do not support this.
-
-The command buffer has optional support for this. Turning it on requires calling
-glEnableFeatureCHROMIUM("pepper3d_support_fixed_attribs"); as one of the first
-calls into GL. This makes the command buffer keep it's own copy of all GL
-buffers. At DrawXXX time, any attributes that are of type GL_FIXED are pulled
-out of their respective buffers, converted to float and copied to a temp buffer.
-The attributes are changed to point to this temp buffer. Then the draw happens
-and the attributes are reset to their previous state.
-
-Clearly this is slow and requires lots of memory. It is there solely to help
-port OpenGL ES 2.0 apps to NaCl and to pass the OpenGL ES 2.0 conformance tests.
-
-Refactoring Ideas:
-
-### Separating decoding the command buffer from emulating OpenGL ES 2.0
-
-Currently those 2 responsibilities are mixed together in GLES2DecoderImpl. There
-has been some discussion of separating them. A few issues off the top of my head
-
-#### #1) Validating shared memory
-
-As one example the command for TexImage2D gets passed a shared memory id, an
-offset and a size. Before the real glTexImage2D is called the service needs to
-validate that the id is a valid shared memory id, that the offset and size are
-wholly contained inside that shared memory, that the call to glTexImage2D is
-going to only reference memory inside that shared memory region. To do that
-requires potentially knowing various state that would normally be not
-efficiently query-able given a separated OpenGL ES emulation. It's possible the
-needed state could be easily exposed through separate functions or else maybe
-changing TexImage2D and similar commands so the size is explicit 'size' instead
-of implicit 'width \* height \* type \* format'.
-
-#### #2) Dealing with resource ids
-
-OpenGL ES 2.0 uses int ids for resources. The client uses one set of ids and the
-service a different set. A mapping from a client id to the service id is kept by
-the service. In order to avoid a round trip from client to server to manage
-those ids, for clients context that are not sharing resources, the ids are
-completely managed on the client and just their usage is communicated to the
-service. The service makes up a service id to associate with a given client id
-as needed. Under the current design this works. If the command buffer code was
-separated from the OpenGL ES 2.0 emulation code a new method of managing these
-ids would need to be inserted, possibly requiring a double mapping, mapping a
-client id to a command buffer service id and mapping a command buffer service id
-to the OpenGL ES 2.0 emulation id. Again, there may be ways to design out that
-issue.
-
-### Moving functionally from GLES2DecoderImpl to the various resource managers
-
-GLES2DecoderImpl is HUGE. Nearly 8000 lines. There's been talk of moving large
-chunks of functionality to the various resource managers. For example, move all
-handling of the texture functions, TexImage2D, TexSubImage2D, TexParameter,
-CopyTexImage2D, CopyTexSubImage2D, CompressedTexImage2D,
-CompressedTexSubImage2D, GenTexture, DeleteTexture, IsTexture, TexStorage2DEXT
-from GLES2DecoderImpl to TextureManager.
-
-I'd love to see that happen. Unfortunately I expect it's not a small amount of
-work. In particular fixing up all the unit tests
-
-Still, it seems like it would be a much cleaner implementation to go that route.
-
-### Separate command generation from OpenGL ES
-
-build_gles2_cmd_buffer.py has a nearly 1 to 1 mapping of OpenGL ES functions to
-commands. Ideally the commands in the command buffer would be separate from the
-OpenGL api so that it would be easier to add any command needed and not have to
-expose it as an OpenGL ES extension.
-
-### Remove legacy code
-
-Originally the command buffer commands were going to be the public API to the
-gpu process with the OpenGL ES API as a wrapper. Most game consoles allow you to
-work directly with command buffers which is one reason for their performance.
-Being able to work directly with command buffers means you can pre-compute
-command buffers and patch them on the fly as needed which in turn means your
-code can do the minimal amount of work and therefore gain a lot of speed.
-Eventually it was decided not to expose the command buffer commands directly but
-there is still code based on the original design that could be removed.
-
-#### low-level commands
-
-#### Implemented in src/gpu/command_buffer/client/cmd_buffer_helper.cc, src/gpu/command_buffer/common/cmd_buffer_common.h and src/gpu/command_buffer/service/common_decoder.cc are functions that implement JUMP, CALL and RETURN. These functions in turn influence some of the design constraints of the rest of the system. They are not needed unless command buffers are a public interface and could be removed.
-
-#### 3 types of commands
-
-build_gles2_cmd_buffer.py generates 3 versions of many functions. One for each
-of the data transfer modes above. For example TexImage2D, TexImage2DImmediate
-and TexImage2DBucket are respectively the transfer buffer implementation of
-TexImage2D, the data-in-the-command-buffer version of TexImage2D and the bucket
-version of TexImage2D. When the command buffer was the public interface it
-seemed important to have all 3 as they each have their pluses and minuses. Now
-though only the commands used by GLES2Implementation are needed. Maybe the code
-that generates all 3 versions should be retired.
-
-#### remove _CMD_ID_TABLE
-
-in build_gles2_cmd_buffer.py _CMD_ID_TABLE's sole purpose is to make sure the
-ids of commands do not change. This was important when commands were going to be
-a public API. It no longer matters and can be removed and commands can change
-ids any time.
-
-#### size in entries
-
-Left over from the O3D code, the command buffer works on CommandBufferEntry
-units. Each unit is 32 bits and sizes of commands and command data is calculated
-in those units. There's a lot of superfluous math involved in converting to and
-from those units. If instead the code was refactored so that the size of
-commands was in bytes all of that extra math code could disappear. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/gpu-memory-buffer/index.md b/chromium/docs/website/site/developers/design-documents/gpu-memory-buffer/index.md
deleted file mode 100644
index dafe84cd676..00000000000
--- a/chromium/docs/website/site/developers/design-documents/gpu-memory-buffer/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: gpu-memory-buffer
-title: GPU Memory Buffer
----
-
-Design doc
-[here](https://docs.google.com/document/d/1SaTYTBvHWWDKA3MPJPpQ-79RNgdS4Xu4g3KiD39VQjU). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/graphics-and-skia/index.md b/chromium/docs/website/site/developers/design-documents/graphics-and-skia/index.md
deleted file mode 100644
index 77f53a514e6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/graphics-and-skia/index.md
+++ /dev/null
@@ -1,292 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: graphics-and-skia
-title: Graphics and Skia
----
-
-Chrome uses Skia for nearly all graphics operations, including text rendering.
-GDI is for the most part only used for native theme rendering; new code should
-use Skia.
-
-Also see the section [RenderText and Chrome UI text
-drawing](/developers/design-documents/rendertext) for a more specific discussion
-of Chrome UI text rendering.
-
-### Why Skia?
-
-* GDI is not full-featured enough for things like SVG, Canvas, and
- some of the complex UI things we have in mind.
-* Skia is in-house and can be modified to suit our needs.
-* There was already a high-quality Webkit/Canvas port to Skia.
-* GDI+ is no longer in development by Microsoft and is slower than
- Skia on most operations, at least on XP. On Vista, it seems that at
- least some GDI+ operations are hardware accelerated, but software
- Skia is generally fast enough for our needs.
-* GDI+ text rendering is unacceptably different from GDI text
- rendering (see GDI+ Text, Resolution Independence, and Rendering
- Methods), and slow to boot.
-
-### Background: What's with all these Canvii?
-
-#### The lowest levels
-
-There are a confusing number of Canvas classes in use. At the lowest level is
-SkCanvas (in third_party/skia/include/SkCanvas.h, it is pretty well documented
-and you will want to refer to this file a lot in normal usage). This object
-contains all the methods that are used to draw. Canvases draw into an
-internalSkDevice, which is a simple wrapper around an SkBitmap object that
-actually holds the bits.
-
-In addition, we have a platform-specific wrapper around the native Skia canvas
-called SkPlatformCanvas, which allows using platform-specific APIs to draw
-things such as themes. Its backing store is a SkPlatformDevice, which includes
-memory that is shared by Skia (who writes into it directly) and Windows, where
-we create an HBITMAP for the bytes and draw into it using an HDC wrapping the
-bitmap. In this way, we can use Skia for normal rendering and Windows for theme
-drawing.
-
-The SkPlatformDevice has two functions BeginPlatformPaint (which returns an HDC
-you can draw into) and EndPlatformPaint that are used to wrap sections of native
-drawing. They manage the necessary flushing that allow Skia and GDI to see a
-consistent bitmap. Be very careful when rendering to the returnedHDC, see
-comments below on this.
-
-#### The application layer
-
-For the Webkit layer, SkCanvas and SkPlatformCanvas are the only objects that
-are used. Callers must manually set up for text drawing, which is OK because all
-graphics operation go through one graphics layer, GraphicsContext that we have
-ported to use this scheme.
-If you are writing code that will run in the browser process, for example, that
-draws the tab strip or one of the Destinations views, there is a higher-level
-option. At this layer, we also support gfx::Canvas (in ui/gfx/canvas.h) which
-wraps a SkCanvas. It provides text-drawing routines that provide richer
-functionality than the ones on SkCanvas and also wrappers around some of the
-common graphics primitive routines that take integer values instead of SkScalar
-coordinates which are more handy when integrating with most of our graphics code
-(see "Scalar values" below). These integer wrappers are named with "Int"
-appended, and a capital first letter (we use Google coding styles, Skia uses a
-different one for historical reasons) for example, DrawRectInt.
-One thing to note is that SkPlatformCanvas is heavier weight than SkCanvas
-because it has a Windows HDC and an HBITMAP associated with it. If you are doing
-rendering that does not need to be copied to the screen, you should use an
-SkCanvas. An example would be a temporary buffer used to render a bitmap into,
-which is then resampled and composited into the final SkPlatformCanvas before
-being copied to the screen.
-
-#### Which canvas should you use?
-
-If you do not need to call GDI operations and only copy the canvas to another
-canvas instead of the screen, use SkCanvas directly. It will be the fastest.
-If you are in the renderer, you must use SkPlatformCanvas if SkCanvas is not
-enough for you. Inside Webkit, though, you should always use its interface,
-GraphicsContext, instead.
-All browser-level code that needs more functionality than SkCanvas should use
-gfx::Canvas. The Views system uses only gfx::Canvas except for intermediate
-results as described above.
-
-### Scalar values
-
-Skia uses a custom type, SkScalar, for most of its routines to represent
-coordinates. Depending on the value of a compiler flag, this is either typedefed
-to a float for floating-point mode, or an int for fixed-point mode. In
-fixed-point mode, the high 16-bits represent the whole part of the number, and
-the low 16-bits represent the fractional part. Although we currently compile
-with floating-point mode, we want to leave open the option to move to fixed
-point mode. You should therefore be very careful and not pass integer or
-floating point values directly to these functions.
-The easiest way is to use the \*Int functions provided in gfx::Canvas if you are
-using one of the commonly-used functions that have wrappers. If this is not an
-option, you must use either SkIntToScalar or SkFloatToScalar to convert your
-value (an int or float, respectively), to the appropriate SkScalar type. To
-convert from scalars back to ints, use SkScalarRound.
-
-### The epic battle of RGBA and BGRA
-
-Both Windows and Skia use RGBA color in each 32-bit word. When written to memory
-on a little-endian machine like a Pentium, this becomes BGRA. While we are
-fortunate they agree, this still causes some problems when getting data in and
-out of the system. Many graphics libraries such as libpng and libjpeg expect the
-data to be in RGB(A) order in memory regardless of machine endianness.
-The result is that we have to be careful to swizzle the bytes when interfacing
-with these systems. Our application-level graphics codecs such as
-PNGEncoder,PNGDecoder, and JPEGCodec (these are not used by Webkit), support
-this.
-
-### Opacity
-
-Using both Windows and Skia to draw into a single buffer is great because it
-gives us the best of both. Windows, however, doesn't know about the alpha
-channel. Most GDI operations treat the high 8 bits of each 32-bit word as
-padding.
-
-### Premulitplied alpha channels
-
-It is important to know that Skia uses premultiplied colors. This means that the
-color components have already been multiplied by the alpha channel. Most people
-are accustomed to having a color and then thinking about a separate opacity
-value. Premultiplied colors have already been "composited on black," allowing
-layers to be composited by addition of the color values rather than requiring an
-additional multiplication by alpha. Therefore, if the alpha is 50%, no color
-channels can have values greater than 50%.
-Since most graphics file formats assume postmultiplied alphas (color values plus
-a separate opacity of that color), we have to be careful to convert properly
-between the two formats when reading and writing to these systems.
-Use SkPreMultiplyColor to convert from an SkColor to a premultiplied color value
-(SkPMColor).
-
-### The case of the disappearing alpha
-
-Windows causes some problems by not knowing about the alpha channel. When
-drawing with GDI, it inconveniently sets the alpha channel to 0 (transparent).
-We have two approaches to dealing with this, one for the Webkit port, and the
-other for the UI. We may merge or enhance these in the future.
-
-### Transparency in the Webkit port
-
-Web pages do not require arbitrary transparency to render properly. The base of
-the web page is fully opaque. Some image formats can support alpha channels, but
-these images are composited on top of the opaque background and require no
-special handling. The only way that a web page can create transparency is by
-setting a global transparency on an element. Therefore, we don't need to support
-arbitrary transparency, only compositing layers with a 1-bit mask to separate
-out the totally transparent regions from the (possibly partially) opaque
-regions.
-New SkPlatformDevices with transparency will have their values filled with a
-color that is impossible using premultiplied alphas. Webkit draws like normal
-over the top of this using opaque colors, potentially clearing the alpha channel
-using text drawing routines. When the layer is being composited, we do color
-replacements in fixupAlphaBeforeCompositing to reconstruct the correct alpha
-channel and composite. The thing to realize here is that this operation is
-destructive and the device will be invalid if used again.
-
-### Transparency in the UI
-
-In the UI, we often want to have more complex alpha channels. We give
-finer-grained control using prepareForGDI and postProcessGDI which are called
-for a rectangular region before and after GDI calls that may mangle the alpha.
-It does a similar replacement of transparent values to impossible colors, and
-then back. It assumes that all pixels written by GDI are supposed to be opaque.
-If you want more complex operations, you will have to do the rendering to an
-intermediate buffer and do separate compositing to get what you want.
-
-### Coordinate transforms
-
-Currently, SkDevice syncs Windows' coordinate transform to the current Skia
-transform whenever you call BeginPlatformPaint. This means that you can call GDI
-operations without worrying about the current transform (unless you have set up
-a perspective transform, which Windows doesn't support).
-However, this will eventually change. The problem is that Windows does a
-surprisingly bad job handling transformed graphics operations. For example, in
-text drawing, character spacing is expressed in terms of integer values in the
-untransformed coordinate space. If your transform has a positive scaling, the
-characters will become larger, but there will be visible rounding errors in the
-character spacing and the characters will appear uneven. Drawing themed controls
-is even worse, as the nearest-neighbor resampling Windows does will cause parts
-to expand or contract unevenly.
-The eventual solution will be to never transform the GDI coordinates and
-manually compute the new positions and sizes of text and themed controls that we
-draw. In some cases, we may need to render to a temporary bitmap and do the
-resampling ourselves.
-
-### Useful tips
-
-The SkBitmap class is internally reference counted. To prevent memory errors, it
-is generally best to copy the objects rather than hold pointers to them. These
-copies are lightweight so you should not be concerned about performance.
-Sometimes you want to temporarily override the transform, clipping, or other
-canvas parameters for a function. Use the SkCanvas.save() function, which will
-save the current state on an internal stack. Use SkCanvas.restore() to pop the
-stack and go back where you were.
-When you want to have a partially transparent layer of stuff, you can use the
-SkCanvas.saveLayerAlpha() function. This will create a new "layer," which will
-look like an empty, fully transparent canvas that you can draw into. In
-addition, this saves the same state as save(). Calling restore() will composite
-the layer back onto the previous layer with the transparency applied that you
-specified when saving it. If you do not need a global opacity, use
-thesaveLayer() function (it will still obey the layer's alpha channel).
-Clipping regions have one-bit precision. This means that you will not get
-antialiased edges if you have curves in your clipping region. If you want to
-draw something with antialiased clipping, and you can get your contents into a
-bitmap, you can use a bitmap shader to fill a path instead. Filled paths have
-nice antialiased edges.
-
-### Using Skia
-
-#### The basics
-
-The model is that you use an SkCanvas to draw into an SkBitmap with an SkPaint.
-The SkBitmap (wrapped by an SkDevice) holds the bits, the SkCanvas manages the
-device and contains the drawing primitives, and the SkPaint holds most of the
-graphics state such as colors and antialiasing options. Most other graphics
-libraries combine the graphics state inside the canvas. SkPaint is lightweight
-and you should not generally worry about creating and destroying them as needed.
-To draw a round rect:
-
-// Create the canvas. Note that this is a SkCanvas and not a PlatformCanvas so
-
-// we won't be able to draw text on it. The canvas first requires a backing
-store
-// (SkPlatformCanvas doesn't need this since it creates its own backing store).
-SkBitmap backing_store;
-backing_store.setConfig(SkBitmap::kARGB_8888_Config, canvas_width,
-canvas_height);
-backing_store.setIsOpaque(true); // This will make some things faster if it's
-opaque.
-backing_store.allocPixels(); // Don't forget to call this or it will be invalid!
-SkCanvas canvas(backing_store);
-canvas.drawARGB(255, 255, 255, 255); // Fill with white.
-// Make a rect from (0,0) to (100,75).
-SkRect rect;
-rect.set(SkIntToScalar(0), SkIntToScalar(0),
-SkIntToScalar(100), SkIntToScalar(75));
-// Create a path with that rect and rounded corners of radius 10.
-SkPath path;
-path.addRoundRect(rect, SkIntToScalar(10), SkIntToScalar(10));
-// Fill the path (with antialiasing) in 50% transparent green.
-SkPaint paint;
-paint.setStyle(SkPaint::kFill_Style);
-paint.setAntiAlias(true);
-paint.setARGB(128, 0, 255, 0);
-canvas-&gt;drawPath(path, paint);
-
-Using the platform canvas
-
-There is a handy class called SkPlatformCanvasPaint to help you handle WM_PAINT
-messages. It will automatically do BeginPaint and EndPaint on init/destruction,
-and will create the bitmap and canvas with the correct size and transform for
-the dirty rect. The bitmap will be automatically painted to the screen on
-destruction.
-
-case WM_PAINT: {
-
-SkPlatformCanvasPaint canvas(hwnd);
-
-if (!canvas.isEmpty()) {
-
-... paint to the canvas ...
-
-}
-
-return 0;
-
-}
-
-**Working with a writable Skia tree**
-
-**Add this to the custom_deps the .gclient file:**
-
-**"src/third_party/skia": "<https://skia.googlecode.com/svn/trunk>",**
-
-**"src/third_party/skia/gyp": None,**
-
-**"src/third_party/skia/src": None,**
-
-**"src/third_party/skia/include": None,**
-
-**This gets you a writable tip-of-tree skia inside chrome. For a specific
-revision put @&lt;rev#&gt; after trunk in the URL.** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/greasemonkey/index.md b/chromium/docs/website/site/developers/design-documents/greasemonkey/index.md
deleted file mode 100644
index 83a192cb3e6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/greasemonkey/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: greasemonkey
-title: greasemonkey
----
-
-Page moved to [user scripts](/developers/design-documents/user-scripts). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/high-dpi-resources/index.md b/chromium/docs/website/site/developers/design-documents/high-dpi-resources/index.md
deleted file mode 100644
index 86f3a64d07d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/high-dpi-resources/index.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: high-dpi-resources
-title: High DPI Resources
----
-
-## If you are thinking of adding new resources, *strongly* consider [vectorized icons](/developers/how-tos/vectorized-icons-in-native-chrome-ui).
-
-## Summary
-
-Most Chrome image assets should be supplied in 1x and (for Mac Retina display)
-2x scales. Eventually we'll probably also have 1.4x and 1.8x scales for Windows
-8 Metro.
-
-In addition to different scale factors, some assets come in different sizes for
-LAYOUT_TOUCH mode (eg. buttons that need to be larger to touch reliably). Layout
-is an orthogonal issue to scale factor, but both affect which assets are loaded.
-
-If you just have to add new assets this section should cover everything you need
-to know. For the purposes of brevity this document assumes that you want to add
-a 2x asset but the same applies for any scale factor.
-
-### Native
-
-Resources in ui/resources/ and chrome/app/theme/ should be added to the relevant
-subfolder for grit to automatically discover them:
-
-* default_100_percent: 1x resources
-* default_200_percent: 2x resources
-* touch_100_percent: touch optimized 1x resources
-* touch_200_percent: touch optimized 2x resources
-
-### WebUI
-
-High DPI resources can be loaded in Chrome WebUI using one of three methods,
-which one is appropriate depends on where the image is.
-
-**Important**: For grit to automatically construct a -webkit-image-set reference
-the relevant css file must be included from a &lt;structure
-type="chrome_html"&gt; tag. See *chrome/browser/resources/shared_resources.grd*
-for examples.
-
-#### WebUI resources
-
-WebUI resources are those located in *chrome/browser/resources/*. These are also
-referred to using the *chrome://resources/* handler. These should be referenced
-using a relative path to the image. For example from
-*chrome/browser/resources/shared/css/overlay.css*:
-
-background-image: url('../images/x.png');
-
-Add a 2x subfolder to the location of the base image and place the 2x image in
-there. In this case you would have both:
-
-chrome/browser/resources/shared/images/x.png
-
-chrome/browser/resources/shared/images/2x/x.png
-
-A -webkit-image-set rule will automatically be generated by grit when processing
-this file. If for some reason the file must be specified by a url or in script
-then manually write an image-set rule as in the UI Resources section below.
-
-#### Theme and UI resources
-
-Theme and UI resources are those defined in
-*chrome/app/theme/theme_resources\*.grd* or *ui/resources/ui_resources.grd*.
-These should be added according to the native resources convention. From WebUI,
-the resource is usually loaded from a *chrome://theme/IDR_RESOURCE_NAME* url
-referring to the name specified in *theme_resources\*.grd* or
-*ui/resources/ui_resources.grd*.
-
-* If the resource is referred to by resource name from a css rule,
- (i.e. background-image: url('chrome://theme/IDR_RESOURCE_NAME');)
- then a high DPI reference is added automatically by grit and you are
- done.
-* If the resource is referred to from Javascript or HTML by resource
- name you can either move this to a CSS definition or set the
- -webkit-image-set property on the object's style as follows:
-
-html: &lt;img
-style="content:-webkit-image-set(url('chrome://theme/IDR_RESOURCE_NAME') 1x,
-url('chrome://theme/IDR_RESOURCE_NAME@2x') 2x);"&gt;
-
-js: $('my-img').style.content =
-'-webkit-image-set(url(\\'chrome://theme/IDR_RESOURCE_NAME\\') 1x, ' +
-
-'url(\\'chrome://theme/IDR_RESOURCE_NAME@2x\\') 2x);';
-
-* If the img is using the 'src' attribute to specify the url, 'srcset' can be used in addition to 'src' to specify just the 2x property (or just srcset can be used to describe both):
- `<img src='chrome://theme/IDR_RESOURCE_NAME' srcset='chrome://theme/IDR_RESOURCE_NAME@2x 2x'>`
- `<img srcset='chrome://theme/IDR_RESOURCE_NAME 1x chrome://theme/IDR_RESOURCE_NAME@2x 2x'>`
-* If the resource is referred to using a relative path and you do not
- want to move this to css then follow the Theme and UI resources
- (Manual image set) section.
-
-#### Theme and UI Resources (Manual image set)
-
-Theme and UI image resources without corresponding IDR definitions should be
-referenced using a relative path with an explicit -webkit-image-set. I.e. for
-the file *ui/resources/default_100_percent/close.png* being referred to from
-*chrome/browser/resources/close.css* change the CSS to the following:
-
-background-image: -webkit-image-set(
-
-url('../../../ui/resources/default_100_percent/close.png') 1x,
-
-url('../../../ui/resources/default_200_percent/close.png') 2x);
-
-## Design
-
-### WebUI
-
-The goals of the means for using high DPI resources in WebUI are the following:
-
-1. Use standard HTML / CSS / Javascript such that developers can
- potentially run WebUI pages outside of chrome.
-2. Make it obvious when changes to one size asset require a
- corresponding change to other size asset descriptions through code
- locality.
-3. Have a mechanism by which developers can be warned when adding only
- low resolution assets. Automatically get other densities when
- working on WebUI without having to think about it.
-4. Avoid including resources for densities not supported on a platform.
-
-Given (1) and (2), we use the [image-set()
-function](http://lists.w3.org/Archives/Public/www-style/2012Feb/1103.html) when
-manually specifying rules. This makes it immediately obvious if you are changing
-one of the assets that the other density assets may need to be changed as well.
-In order to facilitate (3) and (4) the build process will do some conversion of
-CSS but only in so far as it is compatible with running the page standalone (1)
-(i.e. there should be no macros or otherwise incorrect CSS if you use the file
-directly).
-
-In order to automatically get other densities (3) and remove unsupported
-densities, the build process performs some conversion of CSS properties on files
-included in a chrome_html structure node. In particular, if it can determine
-from a given CSS image rule such as content: url('../my/image/foo.png') that a
-2x image is available, then it will automatically generate an image set
-referring to both the 1x and 2x image. This is accomplished by using a '2x' (or
-scale factor + 'x') subdirectory where the 1x image is located. This allows
-images to be located in each of the relevant component directories and can deal
-with any relative image path appropriately. Since native resources must be
-centrally located a different tradeoff was made with respect to directory
-structure so we have to manually reference each density asset in folders outside
-of *chrome/browser/resources/*.
-
-Theme resources are loaded by name, and in practice can be changed dynamically.
-In order to fetch various density theme resources theme_source.cc was modified
-to accept theme source requests such as chrome://theme/IDR_RESOURCE_NAME@2x and
-fetch the appropriate theme image. If a high DPI theme resource is not available
-it falls back to returning the 1x theme resource which means that in any place
-where you use a theme source which may not have a 2x asset it should have the
-size of the image explicitly set. Otherwise, the 1x image is returned, assumed
-to be 2x and scaled down to half the size such that it is displayed 1:1 on a 2x
-screen. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/http-authentication/index.md b/chromium/docs/website/site/developers/design-documents/http-authentication/index.md
deleted file mode 100644
index e9009d84d4f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/http-authentication/index.md
+++ /dev/null
@@ -1,234 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: http-authentication
-title: HTTP authentication
----
-
-As specified in [RFC 2617](http://www.ietf.org/rfc/rfc2617.txt), HTTP supports
-authentication using the WWW-Authenticate request headers and the Authorization
-response headers (and the Proxy-Authenticate and Proxy-Authorization headers for
-proxy authentication).
-
-**Supported authentication schemes**
-
-> Chrome supports four authentication schemes: Basic, Digest, NTLM, and
-> Negotiate. Basic, Digest, and NTLM are supported on all platforms by default.
-> Negotiate is supported on all platforms except Chrome OS by default.
-
-> The Basic and Digest schemes are specified in [RFC
-> 2617](http://www.ietf.org/rfc/rfc2617.txt). NTLM is a Microsoft proprietary
-> protocol. The Negotiate (or SPNEGO) scheme is specified in [RFC
-> 4559](http://www.ietf.org/rfc/rfc4559.txt) and can be used to negotiate
-> multiple authentication schemes, but typically defaults to either Kerberos or
-> NTLM.
-
-> The list of supported authentication schemes may be overridden using the
-> [AuthSchemes](/administrators/policy-list-3#AuthSchemes) policy. See [this
-> page](/administrators) for details on using administrative policies.
-
-**Choosing an authentication scheme**
-
-> When a server or proxy accepts multiple authentication schemes, our network
-> stack selects via HttpAuth::ChooseBestChallenge() the authentication scheme
-> with the highest score:
-
- * Basic: 1
- * Digest: 2
- * NTLM: 3
- * Negotiate: 4
-
-> The Basic scheme has the lowest score because it sends the username/password
-> unencrypted to the server or proxy.
-
-> So we choose the most secure scheme, and we ignore the server or proxy's
-> preference, indicated by the order in which the schemes are listed in the
-> WWW-Authenticate or Proxy-Authenticate response headers. This could be a
-> source of compatibility problems because [MSDN documents that "WinInet chooses
-> the first method it
-> recognizes."](http://msdn.microsoft.com/en-us/library/aa384220%28VS.85%29.aspx)
-> Note: In IE7 or later, WinInet chooses the first *non-Basic* method it
-> recognizes.
-
-**Integrated Authentication**
-
-> With Integrated Authentication, Chrome can authenticate the user to an
-> Intranet server or proxy without prompting the user for a username or
-> password. It does this by using cached credentials which are established when
-> the user initially logs in to the machine that the Chrome browser is running
-> on. Integrated Authentication is supported for Negotiate and NTLM challenges
-> only.
-
-> Due to potential attacks, Integrated Authentication is only enabled when
-> Chrome receives an authentication challenge from a proxy, or when it receives
-> a challenge from a server which is in the permitted list.
-
-> This list is passed in to Chrome using a comma-separated list of URLs to
-> Chrome via the
-> [AuthServerWhitelist](/administrators/policy-list-3#AuthServerWhitelist)
-> policy setting. For example, if the AuthServerWhitelist policy setting was:
-
-> > \*example.com,\*foobar.com,\*baz
-
-> ...then Chrome would consider that any URL ending in either 'example.com',
-> 'foobar.com', or 'baz' is in the permitted list. Without the '\*' prefix, the
-> URL has to match exactly.
-
-> In **==Windows only==**, if the AuthServerWhitelist setting is not specified,
-> the permitted list consists of those servers allowed by the Windows Zones
-> Security Manager (queried for URLACTION_CREDENTIALS_USE). By default, this
-> includes servers in the Local Machine or Local Intranet security zones. For
-> example, when the host in the URL includes a "." character, by default it is
-> outside the Local Intranet security zone). This behavior matches Internet
-> Explorer and other Windows components.
-
-> If a challenge comes from a server outside of the permitted list, the user
-> will need to enter the username and password.
-
-> Starting in Chrome 81, Integrated Authentication is [disabled by default for
-> off-the-record (Incognito/Guest)
-> profiles](https://bugs.chromium.org/p/chromium/issues/detail?id=458508#c62),
-> and the user will need to enter the username and password.
-
-**Kerberos SPN generation**
-
-> When a server or proxy presents Chrome with a Negotiate challenge, Chrome
-> tries to generate a Kerberos SPN (Service Principal Name) based on the host
-> and port of the original URI. Unfortunately, the server does not indicate what
-> the SPN should be as part of the authentication challenge, so Chrome (and
-> other browsers) have to guess what it should be based on standard conventions.
-
-> The default SPN is: HTTP/&lt;host name&gt;, where &lt;host name&gt; is the
-> canonical DNS name of the server. This mirrors the SPN generation logic of IE
-> and Firefox.
-
-> The SPN generation can be customized via policy settings:
-
-> * [DisableAuthNegotiateCnameLookup](/administrators/policy-list-3#DisableAuthNegotiateCnameLookup)
- determines whether the original hostname in the URL is used rather
- than the canonical name. If left unset or set to false, Chrome
- uses the canonical name.
-> * [EnableAuthNegotiatePort](/administrators/policy-list-3#EnableAuthNegotiatePort)
- determines whether the port is appended to the SPN if it is a
- non-standard (not 80 or 443) port. If set to true, the port is
- appended. Otherwise (or if left unset) the port is not used.
-
-> For example, assume that an intranet has a DNS configuration like
-
-> auth-a.example.com IN CNAME auth-server.example.com
-
-> auth-server.example.com IN A 10.0.5.3
-
-> <table>
-> <tr>
-> <td> URL</td>
-> <td> Default SPN </td>
-> <td> With DisableAuthNegotiateCnameLookup</td>
-> <td> With EnableAuthNegotiatePort </td>
-> </tr>
-> <tr>
-> <td> http://auth-a</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-a</td>
-> <td> HTTP/auth-server.example.com</td>
-> </tr>
-> <tr>
-> <td> https://auth-a</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-a </td>
-> <td> HTTP/auth-server.example.com</td>
-> </tr>
-> <tr>
-> <td> http://auth-a:80</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-a</td>
-> <td> HTTP/auth-server.example.com</td>
-> </tr>
-> <tr>
-> <td> https://auth-a:443</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-a</td>
-> <td> HTTP/auth-server.example.com</td>
-> </tr>
-> <tr>
-> <td> http://auth-a:4678</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-a</td>
-> <td> HTTP/auth-server.example.com:4678</td>
-> </tr>
-> <tr>
-> <td> http://auth-a.example.com</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-a.example.com</td>
-> <td> HTTP/auth-server.example.com</td>
-> </tr>
-> <tr>
-> <td> http://auth-server</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-server</td>
-> <td> HTTP/auth-server.example.com</td>
-> </tr>
-> <tr>
-> <td> http://auth-server.example.com</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-server.example.com</td>
-> <td> HTTP/auth-server.example.com</td>
-> </tr>
-> </table>
-
-**Kerberos Credentials Delegation (Forwardable Tickets)**
-
-> Some services require delegation of the users identity (for example, an IIS
-> server accessing a MSSQL database). By default, Chrome does not allow this.
-> You can use the
-> [AuthNegotiateDelegateWhitelist](/administrators/policy-list-3#AuthNegotiateDelegateWhitelist)
-> policy to enable it for the servers.
-
-> Delegation does not work for proxy authentication.
-
-### **Negotiate external libraries**
-
-> On Windows, Negotiate is implemented using the SSPI libraries and depends on
-> code in secur32.dll.
-
-> On Android, Negotiate is implemented using an external Authentication app
-> provided by third parties. Details are given in [Writing a SPNEGO
-> Authenticator for Chrome on
-> Android](/developers/design-documents/http-authentication/writing-a-spnego-authenticator-for-chrome-on-android).
-> The AuthAndroidNegotiateAccountType policy is used to tell Chrome the Android
-> account type provided by the app, hence letting it find the app.
-
-> On other platforms, Negotiate is implemented using the system GSSAPI
-> libraries. The first time a Negotiate challenge is seen, Chrome tries to
-> dlopen one of several possible shared libraries. If it is unable to find an
-> appropriate library, Chrome remembers for the session and all Negotiate
-> challenges are ignored for lower priority challenges.
-
-> The [GSSAPILibraryName](/administrators/policy-list-3#GSSAPILibraryName)
-> policy can be used to specify the path to a GSSAPI library that Chrome should
-> use.
-
-> Otherwise, Chrome tries to dlopen/dlsym each of the following fixed names in
-> the order specified:
-
- * OSX: libgssapi_krb5.dylib
- * Linux: libgssapi_krb5.so.2, libgssapi.so.4, libgssapi.so.2,
- libgssapi.so.1
-
-> Chrome OS follows the Linux behavior, but does not have a system gssapi
-> library, so all Negotiate challenges are ignored.
-
-**Remaining work**
-
-* Support GSSAPI on Windows \[for MIT Kerberos for Windows or
- Heimdal\]
-* Offer [a policy to disable Basic authentication
- scheme](https://bugs.chromium.org/p/chromium/issues/detail?id=1025002)
- over unencrypted channels.
-
-**Questions?**
-
-> Please feel free to send mail to net-dev@chromium.org \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/http-authentication/writing-a-spnego-authenticator-for-chrome-on-android/index.md b/chromium/docs/website/site/developers/design-documents/http-authentication/writing-a-spnego-authenticator-for-chrome-on-android/index.md
deleted file mode 100644
index f59ddacd8bd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/http-authentication/writing-a-spnego-authenticator-for-chrome-on-android/index.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/http-authentication
- - HTTP authentication
-page_name: writing-a-spnego-authenticator-for-chrome-on-android
-title: Writing a SPNEGO Authenticator for Chrome on Android
----
-
-As described in [Kerberos for Chrome on
-Android](https://docs.google.com/document/d/1G7WAaYEKMzj16PTHT_cIYuKXJG6bBcrQ7QQBQ6ihOcQ/edit?usp=sharing),
-in Chrome M46 third parties can enable SPNEGO authentication in Chrome for
-Android. To do this they must provide a SPNEGO Authenticator. This page
-describes the interface between Chrome and the SPNEGO Authenticator.
-
-# Basics
-
-The SPNEGO Authenticator is provided by an Android Service. This must be
-incorporated in an app, provided by the third party, installed on the user’s
-device. The app is responsible for managing any accounts used for SPNEGO
-authentication, and for all communication with the SPNEGO server.
-
-The SPNEGO Authenticator is an Android AccountAuthenticator. As such it must
-follow the pattern described in
-[AbstractAccountAuthenticator](http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html).
-In particular it must implement an authenticator class derived from
-AbstractAccountAuthenticator.
-
-The SPNEGO Authenticator must define a new account type. Its name should be
-derived from the writer’s domain name (e.g. com.example.spnego). As explained in
-[Kerberos for Chrome on
-Android](https://docs.google.com/document/d/1G7WAaYEKMzj16PTHT_cIYuKXJG6bBcrQ7QQBQ6ihOcQ/edit?usp=sharing),
-the account type must be defined to use
-[customTokens](http://developer.android.com/reference/android/R.attr.html#customTokens).
-The account type must support the “SPNEGO” feature
-(HttpNegotiateConstants.SPNEGO_FEATURE).
-
-# Interface to Chrome
-
-Chrome finds the SPNEGO authenticator through the Android account type it
-provides. This is defined by the authenticator, and passed to Chrome through the
-AuthAndroidNegotiateAccountType policy.
-
-The interface to Chrome is through the Android account management framework, and
-in particular through
-[AbstractAccountManager.getAuthToken](http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html#getAuthToken(android.accounts.AccountAuthenticatorResponse,%20android.accounts.Account,%20java.lang.String,%20android.os.Bundle)).
-Chrome, in
-[org.chromium.net.HttpNegotiateConstants](https://code.google.com/p/chromium/codesearch#chromium/src/net/android/java/src/org/chromium/net/HttpNegotiateConstants.java&q=HttpNeg&sq=package:chromium&l=10),
-defines some additional keys and values that are used in the arguments to
-getAuthToken, and in the returned result bundle.
-
-## getAuthToken arguments
-
-When
-[getAuthToken](http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html#getAuthToken(android.accounts.AccountAuthenticatorResponse,%20android.accounts.Account,%20java.lang.String,%20android.os.Bundle))
-is called the authTokenType will be "SPNEGO:HOSTBASED:&lt;spn&gt;" where
-&lt;spn&gt; is the principal for the request. This will always be a host based
-principal (in the current implementation; future versions may allow other types
-of principal, but if they do so they will use a different prefix. SPNEGO
-Authenticators should check the prefix).
-
-The options bundle will contain the keys:
-
- [KEY_CALLER_PID](http://developer.android.com/reference/android/accounts/AccountManager.html#KEY_CALLER_PID)
-
- [KEY_CALLER_UID](http://developer.android.com/reference/android/accounts/AccountManager.html#KEY_CALLER_UID)
-
- HttpNegotiateConstants.KEY_CAN_DELEGATE - True if delegation is allowed,
- false otherwise.
-
-If this is the second or later round of multi-round authentication sequence it
-will also contain.
-
- HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN - The incoming token from the
- WWW-Authenticate header, Base64 encoded.
-
- HttpNegotiateConstants.KEY_SPNEGO_CONTEXT - The SPNEGO context provided by
- the authenticator on the previous round. This is a bundle. Chrome treats
- this as an opaque object and simply preservers it between rounds.
-
-## getAuthToken result bundle
-
-The final result bundle of
-[getAuthToken](http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html#getAuthToken(android.accounts.AccountAuthenticatorResponse,%20android.accounts.Account,%20java.lang.String,%20android.os.Bundle))
-(returned either as the return value of getAuthToken, or through the
-[AccountAuthenticatorResponse](http://developer.android.com/reference/android/accounts/AccountAuthenticatorResponse.html))
-should contain the account name, account type, and token as defined in the
-Android documentation. The token should be Base64 encoded. In addition the
-bundle should contain the keys:
-
- HttpNegotiateConstants.KEY_SPNEGO_RESULT - the SPNEGO result code. This
- should be one of the values defined in
- [HttpNegotiateConstants](https://code.google.com/p/chromium/codesearch#chromium/src/net/android/java/src/org/chromium/net/HttpNegotiateConstants.java&q=HttpNeg&sq=package:chromium&l=10).
-
- HttpNegotiateConstants.KEY_SPNEGO_CONTEXT - a context to be returned to the
- authenticator in the next authentication round. This is only required if
- authentication is incomplete.
-
-# Implementation recommendations
-
- Each account provided by an SPNEGO Account Authenticator should correspond
- to a single user principal (account) provided by single key distribution
- center.
-
- The account authenticator should not store any passwords. Instead it should
- store TGTs for the user principles, and require the users to re-enter their
- passwords (or other authentication data) when their TGT expires.
-
- The account authenticator should keep a list of authorized applications (or
- application signatures) for each account, and refuse to provide service
- tokens to other applications. The list of authorized applications may be:
-
- Built into the account authenticator.
-
- Configurable by the system administrator
-
- Configurable by the user. In this case the account authenticator might
- choose to allow the user to authorize new applications dynamically when
- they first request access.
-
-The authenticator can get the uid of the calling app using the KEY_CALLER_UID
-field of the options bundle, and then identify the requesting application using
-context.getPackageManager().getNameForUid() or similar.
-
-This is required to ensure that malicious apps run by the user cannot use the
-user’s credentials to access services in unintended ways. This is particularly
-important since using the custom tokens option (as described above) disables
-Android’s own signature check when getting auth tokens.
-
- Unless it is built into the account authenticator, the system administrator
- or user will need to be able to configure the location of the key
- distribution center.
-
-Error codes displayed in Chrome
-
-In addition to the error codes that can be forwarded from the authenticator app,
-the following errors can be displayed by Chrome when trying to authenticate a
-request:
-
-* ERR_MISSING_AUTH_CREDENTIALS: The account information is not usable.
- It can be raised for example if the user did not log in to the
- authenticator app and no eligible account is found, if the account
- information can't be obtained because the current app does not have
- the required permissions, or if there is more than one eligible
- account and we can't obtain a selection from the user.
-* ERR_UNEXPECTED: An unexpected error happened and the request has
- been terminated.
-* ERR_MISCONFIGURED_AUTH_ENVIRONMENT: The authentication can't be
- completed because of some issues in the configuration of the app.
- Some permissions may be missing.
-
-Please search for the **cr_net_auth** tag in logcat to have more information
-about the cause of these errors.
-
-# Use, and testing, with Chrome
-
-Chrome defines [a number of policies for controlling the use of SPNEGO
-authentication](/administrators/policy-list-3#HTTPAuthentication). In particular
-to enable SPNEGO authentication the
-[AuthServerWhitelist](/administrators/policy-list-3#AuthServerWhitelist) must
-not be empty, and the
-[AuthAndroidNegotiateAccountType](http://www.chromium.org/administrators/policy-list-3#AuthAndroidNegotiateAccountType)
-must match the account type provided by the SPNEGO authenticator.
-
-To simplify testing of SPNEGO authentication Chrome on Android supports command
-line options corresponding to these policies. These are
-“--auth-server-whitelist=*&lt;whitelist&gt;*” and
-“--auth-spnego-account-type=*&lt;account type&gt;*”. To set these, [add them to
-the command line on the
-device](/developers/how-tos/run-chromium-with-flags#TOC-Setting-Flags-for-Chrome-on-Android)
-(requires a rooted device). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/idealized-mediastream-design/index.md b/chromium/docs/website/site/developers/design-documents/idealized-mediastream-design/index.md
deleted file mode 100644
index a80a472591b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/idealized-mediastream-design/index.md
+++ /dev/null
@@ -1,473 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: idealized-mediastream-design
-title: Idealized MediaStream Design
----
-
-Idealized MediaStream Design in Chrome
-
-Designed November 2013 by the [Piranha
-Plant](https://code.google.com/p/chromium/wiki/PiranhaPlant)
-[team](mailto:piranha-plant@chromium.org). Document author
-[joi@chromium.org](mailto:joi@chromium.org).
-
-# Introduction
-
-This document describes the idealized design for MediaStreams (local and remote)
-that we are aiming for in Chrome. By idealized we mean that this is not the
-current design at the time of writing, but rather the design we want to
-incrementally move towards.
-
-# Background
-
-The [MediaStream](http://dev.w3.org/2011/webrtc/editor/getusermedia.html)
-specification has evolved from being focused around
-[PeerConnections](http://dev.w3.org/2011/webrtc/editor/webrtc.html) for sending
-media to remote endpoints and &lt;audio&gt; and &lt;video&gt; tags for local
-playback, to a spec where streaming media can have multiple different endpoints,
-including the above as well as
-[recording](http://www.w3.org/TR/mediastream-recording/) and
-[WebAudio](https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html)
-and possibly more in the future.
-
-Because of this heritage, Chrome’s current implementation of MediaStreams is
-heavily dependent on [libjingle](https://code.google.com/p/libjingle/), even for
-streams that are neither sent nor received via a PeerConnection.
-
-At the same time, the specification now seems relatively stable, and we are
-aware of various things we will want to be able to achieve in the near future
-that the current design is not well-suited for (examples include relaying,
-hardware capture devices that can encode directly to a transport encoding,
-hardware decoders that can directly render media, embedder-specific features
-that wish to act as endpoints for streaming media, and more).
-
-This document assumes familiarity with the
-[MediaStream](http://dev.w3.org/2011/webrtc/editor/getusermedia.html) and
-[PeerConnection](http://dev.w3.org/2011/webrtc/editor/webrtc.html) HTML5
-specifications, with Chrome's [multi-process
-architecture](http://www.chromium.org/developers/design-documents/multi-process-architecture),
-its [Content](http://www.chromium.org/developers/content-module),
-[Blink](http://www.chromium.org/blink) and
-[Media](http://www.chromium.org/audio-video) layers, as well as common
-[abstractions](http://www.chromium.org/developers/coding-style/important-abstractions-and-data-structures)
-and approaches to
-[threading](http://www.chromium.org/developers/design-documents/threading).
-
-# Objectives
-
-Objectives include:
-
- Create the simplest design that will support features we expect to need in
- the future (see background section).
-
- Make life easier for Chrome developers using MediaStream.
-
- Improve quality, maintainability and readability/understandability of the
- MediaStream code.
-
- Limit use of libjingle to Chrome’s implementation of PeerConnection.
-
- Balance concerns and priorities of the different teams that are or will be
- using MediaStreams in Chrome.
-
- Do the above without hurting our ability to produce the WebRTC.org
- deliverables, and without hurting interoperability between Chrome and
- software built on the WebRTC.org deliverables.
-
-# Design
-
-## Sources, Tracks and Sinks<img alt="image" src="https://lh4.googleusercontent.com/HN2JTb9zkbg98uWT5ed8imaPP-Ee7JSuUeAi22aoN6TV8VWViBa0gYQlpgCGiekw-DicKIvwcTMeHhFzcu2UO9z0Nly-4dnlQ08AjyJIJK1MuK0zddVXsKkl-Q" height=515px; width=624px;>
-
-Figure 1 - Overview of Sources, Tracks and Sinks. Local media capture assumed.
-
-The main Blink-side concepts related to MediaStreams will remain as-is. These
-are WebMediaStream, WebMediaStreamTrack, and WebMediaStreamSource.
-
-In Content, there will be a content::MediaStreamTrack and
-content::MediaStreamSource, each with Audio and Video subclasses and each
-available to higher levels through the Content API. These will be directly owned
-by their Blink counterparts via their ExtraData field.
-
-A MediaStream is mostly just a collection of tracks and sources. The Blink-side
-representation of this collection should be sufficient, with no need for this
-collection concept in Content.
-
-A content::MediaStreamSource can be thought of as receiving raw data and
-processing it
-
-(e.g. for echo cancellation and noise suppression) on behalf of one or more
-content::MediaStreamTrack objects.
-
-A media::MediaSink interface (with Audio and Video subclasses) can be
-implemented by Content and layers above it in order to register as a sink (and
-unregister prior to destruction) with a content::MediaStreamTrack, thereby
-receiving the audio or video bitstream from the track, and necessary metadata.
-
-Sinks are not owned by the track they register with.
-
-A content::MediaStreamTrack will register with a content::MediaStreamSource (and
-unregister prior to destruction). The interface it registers will be a
-media::MediaSink. Additionally, on registration the track will provide the
-[constraints](http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamconstraints)
-for the track, which among other things indicate which type of audio or video
-processing is desired.
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/vVe5rDS6SzeAAygbYo3Ynrjq5UCH65dVTJidG708hpSuW6XvCVWPLWQiDVbvAP-01sJFcBtLpqNmPGY6LhsLen2z3psmsOzJOkaczSGG3zw98sycvrX_INRx3Q"
-height=333px; width=624px;>
-
-Figure 2 - Showing processing module ownership in a source.
-
-A source will own the processing modules for the tracks registered with it, and
-will create just one such module for each equivalent set of constraints. Shown
-here are audio processing modules or APMs, but in the future we expect to have
-something similar for video e.g. for scaling and/or cropping.
-
-## Sinks for Media
-
-### Local Sinks
-
-In the Content and Blink layers, there will be local sink implementations, i.e.
-recipients of the audio and video media from a MediaStreamTrack, for
-&lt;audio&gt; and &lt;video&gt; tags, [WebAudio
-](https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html)and
-[recording](http://www.w3.org/TR/mediastream-recording/).
-
-### Remote-Destined Sinks
-
-The Content and Blink layers will also collaborate to enable piping the media
-from the various tracks in a MediaStream over a PeerConnection.
-
-### Application-Specific
-
-Layers embedding Content (e.g. the Chrome layer) may also implement
-application-specific sinks for MediaStreamTracks. These might be local or
-remote-destined.
-
-## Push Model and Synchronization
-
-Above the level of sources, we will have a push model. Sources will push data to
-tracks, which in turn will push data to sinks.
-
-Sources may either have raw data pushed to them (e.g. in the case of local media
-capture), or will need to pull data (e.g. in the case of media being received
-over a PeerConnection). This distinction will be invisible to everything above a
-source.
-
-A source will have methods to allow pushing media data into it. It will also
-allow registering a media::MediaProvider (which will have Audio and Video
-subclasses) from which the source can pull. The source takes ownership of the
-MediaProvider.
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/XHk0O8xJDiezATLchY1z6pI-aeq9zXlMvsN4BUfstJZs6mk0FzZTAxpfa3xbxUNUfkSNihpobofg9EQGGMfgBs5apJJXq4xW29QQMWJKU_WGsnHSpOTdjwk5hQ"
-height=448px; width=624px;>
-
-Figure 3 - Pushed to source vs. pulled by source
-
-When audio is being played locally that needs to be pulled by a source, the
-“heartbeat” that will cause the source to pull will be the heartbeat of the
-local audio output device, which will be sent over IPC and end up on the capture
-thread. When there is no such heartbeat available (e.g. audio is not being
-played, data is just being relayed to another peer over a PeerConnection or only
-video is playing) an artificial heartbeat for pulling from MediaProviders and
-pushing out from the source will be generated on the capture thread.
-
-The reason to use the audio output device as the heartbeat is to ensure that
-data is pulled at the right rate and does not fall behind or start buffering up.
-
-Both audio and video data, from all sources, will have timestamps at all levels
-above the source (the source will add the timestamp if it receives or pulls data
-that is not already timestamped). Media data will also have a GUID identifying
-the clock that provided the timestamps. Timestamps will allow synchronization
-between audio and video, e.g. dropping video frames to catch up with audio when
-video falls behind. A GUID will allow e.g. synchronization of two tracks that
-were sent over separate PeerConnections but originated from the same machine.
-TODO: Specify this in more detail before implementing.
-
-## MediaStreams with Local Capture
-
-To create a MediaStream capturing local audio and/or video, the
-[getUserMedia](http://dev.w3.org/2011/webrtc/editor/getusermedia.html) API is
-used. The result is a MediaStream with a collection of MediaStreamTracks each of
-which has a locally-originated MediaStreamSource.
-
-In this section, we add some detail on the local audio and video pipelines for
-such MediaStreams.
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/TP8PmdhcA59qxU_1azStCn61FPUraoeEG2kw4Bz_-oyvZpZMoUcDYTtUurXwFnVoPAaBIPxhr5EITQMLbHrzehzq8y6wgM9ibdR90F11FiowFAyhEdjQspA-nQ"
-height=510px; width=414px;>
-
-Figure 4 - Detail on getUserMedia request.
-
-Figure 4 shows the main players in a getUserMedia request. A UserMediaRequest is
-created on the Blink side, the request to open devices ends up in the
-CaptureDeviceManager on the browser side, and the UserMediaHandler is
-responsible for creating the hierarchy of a WebMediaStream object on the blink
-side, and the blink- and Content-side source objects for each opened device, and
-the initial track for each source.
-
-### Local Audio Pipeline<img alt="image" src="https://lh4.googleusercontent.com/O0MUgRkOUg0sdLy7Q4JlvJ1axESTtUPBe5mut532JBX4dzgoyh1v9cvNUQypGLqdLQ9be0T7Trv0qfihEpNoEsnFeM7grcDWBqVyFxSYzAmct1eh76gaez8DtA" height=476px; width=426px;>
-
-Figure 5 - Local Audio Pipeline Overview
-
-When a local audio capture device is opened, the end result is that there is an
-AudioStream instance on the browser side that receives the bitstream from the
-physical device, and an AudioInputDevice instance on the renderer side that, in
-the abstract, is receiving the same bitstream (over layers of IPC and such, as
-is typical in Chrome). The AudioInputDevice pushes the audio into the
-MediaStreamAudioSource.
-
-Setting up an AudioInputDevice/AudioStream pair involves several players. At a
-somewhat abstract level:
-
- The MediaStreamAudioSource has a session ID, which receives it on creation,
- in step 8 of figure 4;
-
- This session ID is passed through the various layers. The AudioInputHost
- looks up session ID-keyed information in the AudioInputDeviceManager, then
- using that information causes the AudioInputController to create an
- AudioStream for the device via the AudioManager.
-
-### Local Video Pipeline
-
-Similar to the audio capture pipeline. Key players are the browser/renderer pair
-VideoCaptureController and VideoCaptureClient (analogous to AudioStream and
-AudioInputDevice), and the browser-side VideoCaptureHost and
-VideoCaptureManager.
-
-TODO: Finish this section and provide a chart matching the class hierarchy and
-names between the two.
-
-Figure 6 (placeholder) - Local Video Pipeline Overview
-
-## MediaStreams With PeerConnection
-
-### Sent Over PeerConnection<img alt="image" src="https://lh4.googleusercontent.com/0sq2VE9aHu2tNBW-sL4brXuYwqhbazksb4OnToj8lxPtNmNTUaIGOsBNTjGnZ7FnqmXJQzn3HfYp-fWjgigtV2nZtMPJa2eNOaJPNJvXLCL18rSjSJ8_yyCn9Q" height=359px; width=624px;>
-
-Figure 7 - MediaStream Sent Over PeerConnection
-
-When a web page calls PeerConnection::AddStream to add a MediaStream to a
-connection, the sequence of events will be as follows:
-
- content::RTCPeerConnectionHandler will add a SentPeerConnectionMediaStream
- to its map of such objects, keyed by the WebMediaStream that is being added.
-
- SentPeerConnectionMediaStream creates the libjingle-side
- webrtc::MediaStream.
-
- For each content::MediaStreamTrack, it creates a webrtc::MediaStreamTrack,
- and a content::LibjingleSentTrackAdapter which will push media bits to the
- webrtc::MediaStreamTrack.
-
- SentPeerConnectionMediaStream registers the LibjingleSentTrackAdapter as a
- sink on the content::MediaStreamTrack.
-
- Once all adapters and libjingle-side tracks are set up,
- SentPeerConnectionMediaStream adds the webrtc::MediaStream to the
- webrtc::PeerConnection.
-
-Ownership is such that the WebMediaStream and related objects on the Blink side
-own the content::MediaStreamSource and its tracks, and the
-SentPeerConnectionMediaStream owns the libjingle object hierarchy and the
-LIbjingleSentTrackAdapter (likely one implementation for audio, and one for
-video).
-
-In this structure, the only usage of libjingle in Content is by
-LibjingleSentTrackAdapter and by SentPeerConnectionMediaStream. The rest of the
-MediaStream implementation in Content and Blink does not know about libjingle at
-all. Note also that no libjingle-side objects except for the PeerConnection are
-created until a MediaStream is added to it.
-
-### Received Via PeerConnection<img alt="image" src="https://lh4.googleusercontent.com/TULqa8D9Rb6grUNNNZ8srWtwt0hv9ZPV7aoi2vLoX-YVa4gNNSUK6MAchJdkVCB43kenkyxW1Bb3hK0b_ibwHj51BYuxeANLidyq7kAAZ9mda4-COU_qLuN6_g" height=332px; width=624px;>
-
-Figure 8 - MediaStream Received via PeerConnection
-
-When a webrtc::PeerConnection receives a new remote MediaStream, the sequence of
-events is as follows:
-
- On the libjingle side, the webrtc::MediaStream and its tracks are created.
- Note that these tracks do not have a source.
-
- content::RTCPeerConnectionHandler receives an onAddStream notification. It
- creates a ReceivedPeerConnectionMediaStream and adds it to a map of such
- objects keyed by MediaStream labels for MediaStreams received over a
- PeerConnection.
-
- The ReceivedPeerConnectionMediaStream creates the Blink-side object
- representing the MediaStream.
-
- It then creates one local Source per received track. This is important;
- since received tracks don’t have sources, locally they act like sources.
-
- It then creates one local Track per local Source.
-
- Finally, in the audio case it creates a
- content::LibjingleReceivedTrackAdapter that retrieves data from the
- webrtc::MediaStreamTrack, and registers it as a media::MediaProvider for the
- local content::MediaStreamSource. The source will pull data via the
- MediaProvider interface. In the video case, the adapter will push video to
- the source.
-
-Ownership is such that the WebMediaStream and related objects on the Blink side
-are referenced by the ReceivedPeerConnectionMediaStream, and they own the
-content::MediaStreamSource and its tracks. The LibjingleReceivedTrackAdapter is
-owned by the content::MediaStreamSource object.
-content::RTCPeerConnectionHandler owns the webrtc::PeerConnection, which owns
-the libjingle-side object hierarchy.
-
-In this structure, the only usage of libjingle in Content is by
-LibjingleReceivedTrackAdapter, ReceivedPeerConnectionMediaStream and
-RTCPeerConnectionHandler. The rest of the MediaStream implementation in Content
-and Blink does not know about libjingle at all. Note also that no libjingle-side
-objects except for the PeerConnection are created until the PeerConnection
-receives a new MediaStream from a peer.
-
-### MediaStream Mutability
-
-This section explains how addition and removal of MediaStreamTracks to a
-MediaStream being sent/received over a PeerConnection will be done.
-
-In the case where a track is added to a local MediaStream,
-RTCPeerConnectionHandler will receive a notification that this has happened
-(TODO: specify how it receives this notification). It will check if it has a
-SentPeerConnectionMediaStream for the given MediaStream. If so, it will create
-the libjingle-side track and add it to the libjingle-side MediaStream, as well
-as creating the requisite LibjingleSentTrackAdapter and registering it as a sink
-for the local track that was added to the MediaStream.
-
-When a track is added to a MediaStream received over a PeerConnection, the
-libjingle-side code will add the webrtc::MediaStreamTrack to the
-webrtc::MediaStream. The content::ReceivedPeerConnectionMediaStream object
-(which observes webrtc::MediaStream) will receive a notification that a track
-was added, and will add a Blink- and Content-side source and track to the
-Blink-side MediaStream it already owns. It will create and own a
-LibjingleReceivedTrackAdapter, configure it to retrieve media from the
-libjingle-side track, and set it as the media::MediaProvider for the local
-content::MediaStreamSource (see previous section, Received via PeerConnection).
-
-It is important to note that when a track is added to or removed from a
-MediaStream that is not being sent over or received via a PeerConnection, the
-libjingle code will not be involved in any way and no libjingle-side objects
-will be created or destroyed.
-
-### NetEQ
-
-NetEQ is a subsystem that is fed an input stream of RTP packets carrying encoded
-audio data, and from which client code pulls decoded audio. When audio is pulled
-out of it, NetEQ attempts to create the best audio possible given the data
-available from the network at that point (which may be incomplete, e.g. in the
-face of packet loss or packets arriving out of order).
-
-Currently, there is a single NetEQ for audio on a MediaStream received over a
-PeerConnection, and the NetEQ sits at the libjingle level.
-
-Several medium-term usage scenarios would be better served if we had more
-control over where to place the NetEQ. Two examples are:
-
- Relaying audio data from one peer to another peer. In this case we might
- want to have no decoding done on the data whatsoever, and therefore skip the
- NetEQ.
-
- [Recording](http://www.w3.org/TR/mediastream-recording/) audio. Since
- recording does not have the same near-real-time demands as does a
- &lt;video&gt; tag showing a live video/audio chat with a remote peer, it can
- afford to let more audio data buffer up in the NetEQ before it starts
- pulling audio from it, and possibly even to delay the next pull up to some
- maximum time if the NetEQ reports that it does not have full audio data yet.
- If you are recording audio at the same time as playing it, this implies you
- would want one NetEQ that is pulled out of at near real-time for playing the
- audio, and a separate one that is pulled out of more slowly for recording,
- since this will improve the quality of the recorded audio (fewer missing
- packets of audio data).
-
-To fulfill the above needs, we plan to look into moving the NetEQ to the same
-layer as the intended location of the APM (see Figure 2). This would allow
-individual tracks on a source to set up the NetEQ using their desired
-constraints, and in the scenarios above would allow you to have a track that
-receives the raw audio data without it being decoded, or to clone your
-near-real-time track and set the constraints on the clone to get a track with
-NetEQ usage more suited to recording.
-
-## MediaStream Threading Model
-
-TODO: This needs more work to flesh it out on the video side, and to figure out
-the idealized design. The following mostly documents the current situation for
-audio. For video, a separate capture thread may not be needed and for some
-clients it is undesirable to have a separate thread for capture in both the
-audio and video cases.
-
-We expect the current threading model around MediaStreams in Content to remain
-mostly unchanged. On the renderer side, the main threads are:
-
- The main renderer thread (RenderThread). This is where most signaling takes
- place.
-
- A single media render thread. This is where media is prepared for output.
- This thread takes care of things such as resampling to APM format to provide
- the original image for echo cancellation (may happen 2 times or more;
- possibly some of this can be avoided).
-
- A single media capture thread. This thread does the following:
-
- processing
-
- resampling
-
- AEC, noise suppression, AGC
-
-On the browser side, messages to/from the renderer are sent/received on the IPC
-thread. There are also media render and media capture threads similar to the
-renderer side, whose job is to open physical devices and write to or read from
-them. The browser-side media render thread may also do resampling of audio when
-the renderer is providing audio in a different format than the browser side
-needs, but this should be minimized by reconfiguring the renderer side when
-needed.
-
-### PeerConnection Threading
-
-For PeerConnection, there are two main threads:
-
- The “signaling thread” which in Chrome is actually the same as the
- RenderThread. The signaling thread is where the “API” for libjingle lives.
-
- This is a bit confusing because calls from the RenderThread are made to
- a proxy class, that in the general case would post the tasks to a
- different thread. In the special case where the calling and destination
- threads are the same, this ends up as a simple same-thread dispatch,
- i.e. equivalent to a method call.
-
- This is a libjingle thing, other clients desire thread-independent
- calling.
-
- It would be nice to get rid of the need for the proxy but we may
- need it for Java code in Android. TODO: Check with Ami.
-
- The worker thread (created and owned within libjingle), of which there is
- initially one, but may be more.
-
- This is separate from the signaling thread.
-
- It prepares network packets.
-
- It calls libjingle for media work.
-
-## Directory Structure
-
-We plan to make a couple of minor changes to the directory structure under
-//content to help better manage dependencies and more easily put in place an
-appropriate ownership structure:
-
- Code that #includes anything from libjingle will be isolated to
- //content/renderer/media/webrtc.
-
- Outside of this directory, //content will not directly depend on
- libjingle.
-
- Code related to the HTML5 MediaStream spec will be isolated to
- //content/{common|browser|browser/renderer_host|renderer}/media/media_stream. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/idl-build/index.md b/chromium/docs/website/site/developers/design-documents/idl-build/index.md
deleted file mode 100644
index 9356dca0902..00000000000
--- a/chromium/docs/website/site/developers/design-documents/idl-build/index.md
+++ /dev/null
@@ -1,357 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: idl-build
-title: IDL build
----
-
-[TOC]
-
-The IDL build is a significant source of [generated
-files](/developers/generated-files), and a complex use of the build system (GYP
-or GN); see their documentation for possible issues.
-
-## Steps
-
-...
-
-## GYP
-
-Components other than bindings do not need to know about the internal
-organization of the bindings build. Currently the components `core` and
-`modules` depend on `bindings,` specifically `bindings_core` (in
-[bindings/core](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/core/))
-and `bindings_modules` (in
-[bindings/modules](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/modules/)),
-due to cyclic dependencies `core` ⇄ `bindings_core` and `modules` ⇄
-`bindings_modules`. These should just include
-[bindings/core/core.gypi](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/core/core.gypi)
-or
-[bindings/modules/modules.gypi](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/modules/modules.gypi),
-respectively, and depend on top-level targets, currently:
-
-```none
-bindings/core/v8/generated.gyp:bindings_core_v8_generated
-bindings/modules/v8/generated.gyp:bindings_modules_v8_generated
-```
-
-GYP files (.gyp and .gypi) are arranged as follows:
-
-**.gyp:** There's a generated.gyp file in each directory that generates files
-(outputting to
-`[gen/blink/bindings](https://code.google.com/p/chromium/codesearch#chromium/src/out/Debug/gen/blink/bindings/)/$dir`),
-namely core, core/v8, modules, and modules/v8; these correspond to global info
-(core and modules) and actual V8 bindings (core/v8 and modules/v8). There's also
-[scripts/scripts.gyp](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/scripts/scripts.gyp),
-for precaching in scripts (lexer/parser tables, compiling templates).
-
-**.gypi:** The .gypi files are named (as usual) as:
-
-```none
-foo/foo.gypi        # main, public: list of static files and configuration variables
-foo/generated.gypi  # list of generated files
-```
-
-There is one bindings-specific complexity, namely idl.gypi files
-([core/idl.gypi](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/core/idl.gypi)
-and
-[modules/idl.gypi](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/modules/idl.gypi)),
-due to having to categorize the IDL files for the build (see [Web IDL
-interfaces:
-Build](http://www.chromium.org/developers/web-idl-interfaces#TOC-Build)).
-
-There are relatively long lists of .gypi includes in the .gyp files, which are
-due to factoring for componentization, and are longer than desired due to
-layering violations, namely `bindings_core` → `bindings_modules` (Bug
-[358074](https://code.google.com/p/chromium/issues/detail?id=358074)): these
-make the (bad) dependencies explicit.
-
-## Performance
-
-*For build performance in compiling a single IDL file, see [IDL compiler:
-Performance](http://www.chromium.org/developers/design-documents/idl-compiler#TOC-Performance)*
-
-Build performance is one of the [IDL compiler
-goals](http://www.chromium.org/developers/design-documents/idl-compiler#TOC-Goals),
-though secondary to correctness and performance of the generated code.
-
-The primary concern is minimizing *full build time* (notably full bindings
-generation and compilation); the secondary concern is maximizing
-*incrementality* of the build (only do full rebuilds when necessary). These
-priorities are because full builds are common (e.g., on build bots and for any
-compiler code changes), and changes to individual IDL files are also common,
-which should only rebuild that file's bindings and any dependents, not trigger a
-full rebuild.
-
-Current performance (as of Blink
-[r168630](https://src.chromium.org/viewvc/blink?revision=168630) in March 2014)
-is acceptable: on a fast Linux workstation with 16 cores, full regeneration
-takes ~3 seconds (~50 seconds of user time, ~80 ms/IDL file), and full rebuilds
-on IDL changes only occur if a dependency IDL file (partial interface or
-implemented interface) is touched, which is infrequent.
-
-The coarsest way to profile a full build – which is sufficient for verifying
-coarse improvements – is to do a build (using ninja), then `touch
-idl_compiler.py` and [`time(1)`](http://en.wikipedia.org/wiki/Time_(Unix))
-another build (most finely the targets should be `bindings_core_v8_generated
-bindings_modules_v8_generated` but (for ninja) it's fine for the target to be
-`chrome`); "user time" is most relevant. This should only rebuild the bindings,
-but not recompile or do any other steps, like linking. Note that build system
-(like ninja) has some overhead, so you want to compare to an empty build, and
-that touching some other files may trigger other steps.
-
-In the overall build, bindings compilation and linking are more significant
-factors, but are difficult to improve: minimizing includes and minimizing and
-simplifying generated code are the main approaches.
-
-The main improvement would be precise computation of dependencies to minimize
-full rebuilds, so only dependent files are rebuild if a dependency is touched
-(Bug [341748](https://code.google.com/p/chromium/issues/detail?id=341748)), but
-this would require GYP changes.
-
-### Details
-
-IDL build performance contains various components:
-
-* *(Preliminary):* Build file generation (GYP runtime)
-* Build system time (ninja runtime)
-* Overall IDL file recompile time (including auxiliary steps and
- parallelization)
-* Individual IDL file compile time (bindings generation time, IDL →
- C++)
-* C++ compile time (bindings compile time, C++ → object code)
-
-Build performance criteria of the IDL build are the time for the following
-tasks:
-
-* Generate build files (gyp time)
-* Run build system (both empty build and overhead on regeneration or
- recompile)
-* Generate all bindings
-* Compile all generated bindings
-* Incremental regeneration
-* Incremental recompile
-
-The key techniques to optimize these are:
-
-* Generate build files: avoid computations in `.gyp` files,
- particularly *O*(*n*2) ones
-* Run build system: minimize size and complexity of generated build
- files (avoid excess dependencies)
-* Generate all bindings: parallelize build, and optimize individual
- IDL compilation time
-* Compile all bindings: **FIXME ???** *(minimize includes, shard
- aggregated bindings?)*
-* Incremental regeneration: compute dependencies precisely (to avoid
- full regeneration)
-* Incremental recompile: **FIXME ???**
-
-Compilation of multiple IDL files is embarrassingly parallel, as files are
-almost completely independent (code generation is independent, and reading in is
-independent other than reading in implemented or referenced interfaces, which is
-currently minor, and global information, which is handled in a separate step).
-Thus with enough cores or a distributed build, compilation is very fast:
-assuming one core per IDL file, full recompile should take 0.1 seconds, plus
-distribution overhead.
-
-### Further optimizations
-
-The main areas at the overall build level that suggest further optimization are
-as follows. These would not help significantly with full rebuilds, but would
-improve incrementality. These are thus possible, but not high priorities.
-
-* Precise computation of dependencies, rather than conservative
- computation (Bug XXX)
-
-This would minimize full rebuilds, and decrease the size of generated build
-files: currently if a dependency IDL file (partial interface or implemented
-interface) is touched, *all* bindings are regenerated (conservatively). Instead,
-precise computation of dependencies would mean only the dependent files are
-rebuilt, so 1 or 2 files instead of 600. Further, this would reduce the size of
-the generated build files, because instead of the conservative list of about 60
-dependencies x 600 main IDL files = 36,000 dependencies, this would have about
-100 (some dependencies are implemented interfaces that are used multiple times);
-this would speed up build time due to lower overhead of reading and checking
-these dependencies.
-
-This would require new features in GYP, to allow per-file dependency computation
-in rules.
-
-* Split global computations as individual compute public information
- steps and a consolidation step
-
-This would speed up incremental builds a bit, by minimizing the global
-computation, but may slow down full rebuilds significantly, due to launching
-*O*(*n*) processes.
-
-Currently global computations are done in a single step, which processes all IDL
-files. Thus touching any IDL file requires reading all of them to recompute the
-global data. This could be replaced by a 2-step processes: compute the public
-data one file at a time (*n* processes), then have a consolidation step that
-reads these all in and produces the overall global data. Further, if the public
-data does not change (as is usually the case), the consolidation step need not
-run. This would thus speed up incremental builds. However, this would require
-*n* additional processes, so it would slow down full rebuilds.
-
-### Cautions
-
-Certain mistakes that significantly degrade build performance are easily made;
-all of these have either occurred or been proposed.
-
-* Touching or regenerating global dependency targets
-
-Be careful to use "write only on diff" (correctly) for all global dependency
-targets.
-
-Touching a global dependency (a file or target that is a dependency of all IDL
-files) causes a full recompile: if a global dependency changes, *all* IDL files
-must be recompiled. Global dependency files are primarily the compiler itself,
-but also (for now) all dependency IDL files, since we compute dependencies
-conservatively in the build, not precisely. Global dependency targets (files
-generated in the preliminary steps) are primarily the global context, but also
-the generated global constructor IDL files, as these are partial interfaces
-(hence dependencies, hence treated as global dependencies). Touching any IDL
-file requires recomputing the global context and these generated global files.
-However, most changes to IDL files do not change the global dependencies (global
-context and global constructors), since they only change private information,
-and thus should not trigger full rebuilds. The "write only on diff" option,
-supported by some build systems, notably ninja, means that if these files do not
-change, we do not regenerate the targets, hence avoiding a full rebuild. If this
-is missed, touching any IDL file cause full regeneration.
-
-* Excess processes :: source of *O*(*n*) process overhead
-
-Avoid launching processes per-IDL file: preferably only 1 process for the actual
-compilation, avoiding per-file caching steps.
-
-Launching processes is relatively expensive, particularly on Windows. For global
-steps this is *O*(1) in the number of IDL files, so adding an extra global build
-step is cheap, but for compiling individual IDL files this is *O*(*n*), so it's
-faster to have 1 process per IDL file, i.e., compile each file in a single step.
-Thus any changes that add a process per IDL file are expensive. These include:
-splitting global computations into "compute per file one process at a time, then
-consolidate in one step" (turns *O*(*n*) computation in 1 process into *O*(*n*)
-computation in *n* + 1 processes); splitting the compile into "compute IR, then
-compile IR" (turns *n* processes into 2*n* processes).
-
-* Doing redundant work :: source of *O*(*n*2) algorithms
-
-Compute global data in a single preliminary step.
-
-Computed data that is needed by more than one IDL file should generally be done
-a single time, most simply in the global context computation step (or a GYP
-variable); getting this wrong can turn *O*(*n*) work into O(*n*2) work. For
-example, public information about an interface should be computed once, rather
-than computing it every time it is used.
-
-However, in some cases redundant work is preferable to adding extra processes.
-For example, there is some redundancy in the front end, since some files
-(notably implemented interfaces) are read during the compile of several IDL
-files, but this is relatively rare (about 30/600=5% of files are read multiple
-times) and cheap (actual parsing is cheap relative to parser initialization),
-and fixing it would require a separate per-file caching step, which would
-increase the number of processes.
-
-* *O*(*nk*) and *O*(*n*2) work or data in build files
-
-Use precise (not conservative) computations and static lists in GYP, and be
-careful of GYP rules.
-
-GYP rules generate actions; for the IDL build this is the `binding` rule in the
-`individual_generated_bindings` target, which generates one action per IDL file.
-Thus any work this does or data this generates is scaled by *n*. This is an
-issue for dependencies: the `inputs` are used for all generated actions, and
-thus currently include all dependency files, which generates *O*(*nk*) data
-(currently about 60 dependencies x 600 main IDL files = 36,000 input lines in
-the actions, instead of ~100 (some dependencies are implemented interfaces that
-are used multiple times)), which slows down both gyp runtime and the build
-(ninja) runtime, as it needs to read and check all these dependencies. Further,
-any *O*(*n*) work in the inputs, notably calling a Python script that runs a
-global computation, results in *O*(*n*2) work at gyp runtime.
-
-See also [350317](https://code.google.com/p/chromium/issues/detail?id=350317):
-Reduce size of individual_generated_bindings.ninja​​.
-
-Work can be reduces to *O*(1) if instead of using a Python script to compute
-dependencies dynamically (at gyp runtime), one determines the dependencies
-statically (when writing the `.gyp, .gypi` files). This is a key reason that
-there are multiple variables with lists of IDL files: this allows gyp to just
-expand the variables, rather than running a computation (and obviates the need
-for a separate Python script).
-
-### Rejected optimizations
-
-Some intuitively appealing optimizations don't actually work well or at all;
-these are discussed here. These generally have little impact (or negative
-impact) and involve significant complexity in the build or compiler.
-
-#### Compile multiple files in a single process (in sequence or via multiprocessing)
-
-Python and library initialization can be further sped up by processing multiple
-IDL files in a single compiler run (a single compilation process). However, this
-significantly complicates the build due to needing to manually distribute the
-input files to various build steps, ideally one per available core. This
-interacts poorly with GYP (GYP rules are designed for a single input file and
-the corresponding output), and is only useful if you cannot fully distribute the
-build, and thus is not done.
-
-Note that
-[multiprocessing](http://docs.python.org/2/library/multiprocessing.html) or
-multithreading Python would not allow a single Python process to compile all
-files in parallel (thus minimizing initialization time), since the Python
-interpreter is not concurrency safe (hence not multithreaded; concretely this is
-due to the [Global Interpreter
-Lock](http://docs.python.org/2/glossary.html#term-global-interpreter-lock),
-GIL), and the actual parsing and templating are done in Python. A
-multiprocessing Python process could launch separate (OS) processes to compile
-individual files, but this offers no advantage over the build system doing it,
-and is more complex.
-
-#### Fork multiple processes
-
-One could start a single Python process, which then forks others once it has
-initialized to reduce startup time (both of Python and of the libraries): either
-one per input file or distributing among them. This allows both parallelization
-and minimal initialization, so it would increase speed. However, this is
-platform dependent (`fork()` is not available on Windows, and would need to be
-replaced by `spawn()` or
-[`subprocess`](http://docs.python.org/2/library/subprocess.html)), and would
-move substantial build complexity into the compiler from the build system, hence
-avoided since this level of performance is not required.
-
-#### Cache IR
-
-The IR is computed multiple times for a few IDL files, namely implemented
-interfaces that are implemented by several IDL interfaces and targets of
-`[PutForwards]`. This is redundant work, so caching them would avoid this
-duplication. However, this would require splitting compilation into two steps –
-generate IR in one step, then compile IR in the second – and thus double the
-number of processes, which would slow down the build significantly, particularly
-on Windows. This can be worked around, at the expense of complicating the build,
-by only doing the caching for dependencies (or indeed only for implemented
-interfaces) and then checking for a cached IR file before reading the IDL file
-onself, but this is significant complexity for little benefit.
-
-#### Compute public dependencies precisely
-
-Currently if the *global* context changes, *all* bindings are generated. This is
-conservative and simple, which is why we do it this way, but it causes excess
-full rebuilds: if the public data of one IDL file changes (e.g., its
-`[ImplementedAs]`), only bindings that actually depend on that public
-information (namely: use that interface) need to be rebuilt. Thus if IDL files
-depended on the public information of individual files, rather than on the
-global context, we could have more incremental rebuilds.
-
-This is not done because it would add significant complexity for little benefit
-(changes to public data are rare, and generally require a significant rebuild
-anyway), and would require GYP changes (above) for file-by-file dependency
-computation in rules.
-
-### References
-
-* [Issue 341748: Improve bindings
- build](https://code.google.com/p/chromium/issues/detail?id=341748):
- tracking bug for build rewrite (2014) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/idl-compiler/index.md b/chromium/docs/website/site/developers/design-documents/idl-compiler/index.md
deleted file mode 100644
index c34a1cd68f8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/idl-compiler/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: idl-compiler
-title: IDL compiler
----
-
-This documentation has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLCompiler.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/idn-in-google-chrome/index.md b/chromium/docs/website/site/developers/design-documents/idn-in-google-chrome/index.md
deleted file mode 100644
index c2bfe1db712..00000000000
--- a/chromium/docs/website/site/developers/design-documents/idn-in-google-chrome/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: idn-in-google-chrome
-title: IDN in Google Chrome
----
-
-### [An updated version of this document is now in the Chromium source tree.](https://chromium.googlesource.com/chromium/src/+/main/docs/idn.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/image-filters/index.md b/chromium/docs/website/site/developers/design-documents/image-filters/index.md
deleted file mode 100644
index c72fc885c21..00000000000
--- a/chromium/docs/website/site/developers/design-documents/image-filters/index.md
+++ /dev/null
@@ -1,128 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: image-filters
-title: Filter Effects
----
-
-Filter Effects in Chrome can be somewhat confusing. The
-[SVG](http://www.w3.org/TR/SVG/filters.html) and
-[CSS](http://www.w3.org/TR/filter-effects-1/) specs give us three different ways
-of specifying filters (SVG-on-SVG, SVG-in-CSS, shorthand CSS), Chrome has two
-rendering modes (GPU-accelerated or CPU), and two filter implementations (Blink
-and Skia). This is an attempt to document the current situation, and where we're
-headed.
-
-One important thing to note is that we currently only trigger the GPU filter
-path for source elements that are already in a composited layer, e.g., 2D
-&lt;canvas&gt;, WebGL, &lt;video&gt;, 3D CSS. We don't really have a choice but
-to apply these filters in the compositor, since only the compositor contains the
-source textures to which the filters are to be applied. We do trigger the GPU
-path for filters which are animated, but only for the duration of the animation,
-after which we switch back to software (same as is done for animated opacity, 2D
-transforms, etc). All other rendering of filters on web content uses the CPU.
-Currently, SVG-on-SVG filters are only rendered using a CPU path.
-
-Ways to author filters (in chronological order):
-
-SVG-on-SVG filters: the oldest (spec-wise, and blink-wise). Syntax:
-filter="url(#foo)" on the target SVG element, where "foo" refers to an SVG
-filter graph. Applies a SVG filter to an SVG element, via a DOM attribute.
-Animatable via SVG. First shipped in Chrome M6.
-
-SVG-in-CSS filters (aka reference filters, aka url() filters). Specified by CSS
-property -webkit-filter: url(#foo), where foo refers to the ID of an SVG filter
-node. Renders an HTML element to a buffer, then applies an SVG filter DAG to it.
-First appeared in Firefox 5 or so. Implemented in Chrome M25 on the software
-path, and M31 on the GPU path (disabled in M32 due to ubercomp; re-enabled in
-M33). Animatable via SVG.
-
-CSS shorthand filters. Specified by (e.g.,) CSS property -webkit-filter:
-grayscale(50%) hue-rotate(90deg). A simple linear chain of filters. This is
-essentially a simplified subset of what is possible with the SVG DAG. Animatable
-via CSS. Proposed by Apple (but first shipped in Chrome M19), shipped in Safari
-6.
-
-The Blink implementation uses a graph of FilterEffect nodes (in
-platform/graphics/filters/FilterEffect.\*, and subclasses FE\*.) This renders
-only on the CPU.
-
-The Skia implementation uses a graph of SkImageFilter nodes (in
-src/core/SkImageFilter.\*, and subclasses \*ImageFilter.cpp). This has CPU and
-GPU modes.
-
-Shipping now:
-
-<table>
-<tr>
-<td>Syntax</td>
-<td>CPU</td>
-<td>GPU</td>
-</tr>
-<tr>
-<td>SVG-on-SVG</td>
-<td>filter="url(#foo)"</td>
-<td>FilterEffect DAG, renderer process</td>
-<td>none yet\*</td>
-</tr>
-<tr>
-<td>SVG-in-CSS</td>
-<td>-webkit-filter: url(#foo)</td>
-<td>FilterEffect DAG, renderer process</td>
-<td>SkImageFilter DAG, compositor thread</td>
-</tr>
-<tr>
-<td>CSS shorthand</td>
-<td>-webkit-filter: grayscale(50%)</td>
-<td>FilterEffect chain, renderer process</td>
-<td>SkImageFilter chain, compositor thread</td>
-</tr>
-</table>
-
-(\*there was actually a prototype implementation under the "Accelerated SVG
-Filters" flag, but it ran in the renderer process, and the resulting filtered
-element had to incur a readback from the GPU to be (CPU) composited. It was
-useful for testing the individual Skia GPU filters before we had the accelerated
-SVG-in-CSS path, but it's now old and busted. I've removed the flag in M36.)
-
-Future (paths which will change are in bold):
-
-<table>
-<tr>
-<td>Syntax</td>
-<td>CPU</td>
-<td>GPU</td>
-</tr>
-<tr>
-<td>SVG-on-SVG</td>
-<td>filter="url(#foo)"</td>
-<td>SkImageFilter DAG, impl thread (enabled in M37)</td>
-<td>SkImageFilter DAG, compositor thread (enabled in M37 where Ganesh is enabled)</td>
-</tr>
-<tr>
-<td>SVG-in-CSS</td>
-<td>-webkit-filter: url(#foo)</td>
-<td>SkImageFilter DAG, impl thread (enabled in M39)</td>
-<td>SkImageFilter DAG, compositor thread</td>
-</tr>
-<tr>
-<td>CSS shorthand</td>
-<td>-webkit-filter: grayscale(50%)</td>
-<td>SkImageFilter chain, impl thread (enabled in M39)</td>
-<td>SkImageFilter chain, compositor thread</td>
-</tr>
-</table>
-
-The GPU path for SVG-on-SVG filters (\*\*\*) can forced on via
---force-gpu-rasterization (the Ganesh GPU rasterization path, essentially).
-
-Now that these changes are done, all software rasterization of filters is be
-performed on the impl-thread using the Skia implementation, and compatible with
-multi-threaded and GPU rasterization. The Blink implementation of filter
-processing can be removed (including its bespoke ParallelJobs threading
-library). As a side note, this will also make filters compatible with non-tiled
-GPU-accelerated rendering of web content too (a la IE9+), if that proves
-promising. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/immersive-fullscreen/index.md b/chromium/docs/website/site/developers/design-documents/immersive-fullscreen/index.md
deleted file mode 100644
index a0a0fc6325e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/immersive-fullscreen/index.md
+++ /dev/null
@@ -1,234 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: immersive-fullscreen
-title: Immersive fullscreen
----
-
-<div class="two-column-container">
-<div class="column">
-
-jamescook, pkotwicz
-
-August 2013
-
-User Experience
-
-Immersive fullscreen is a fullscreen mode for the Chrome OS Ash window manager.
-It allows users with small screens to use almost the entire screen for web
-content, but still access the tab strip and app shelf when needed.
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/4mTHvcSoE3eOhCTWLh3yziRiq67Bfgo0qKZHxC1UXpxRKxQmhT7sJuGhlNeNCnwZvV3ZDk0fI-JoMm4Slp35zJapaYx1vUMktvArbGa760VdXp51DdoFodat">
-
-The tabs (and location bar) are collapsed into a small strip at the top of the
-screen. The shelf is similarly collapsed at the bottom of the screen. Showing
-the strip gives the user a visual target for the mouse.
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/saLdLHVhQarR82y2Z9zIK9Qg12aYVX41LxYBUbOs5ro4jTgejhv60Q2Flkt0UNasfy42_CGaMOUcVl8Bc_DA-uMMb1MC3gjd-rZ5He0m4Q0OhdXd8NTShkce"
-height=120px; width=500px;>
-
-Mousing to the top of the screen slides in the top controls, which are fully
-interactive.
-
-For a detailed description of the user experience, see Ben’s [original
-proposal](https://docs.google.com/a/google.com/document/d/1dequH51rwf8YpU6s5v6htmEozk8VBB5FbtM1jFDOwt4/edit).
-
-Top of screen implementation
-
-We introduce a TopContainerView that holds the tab strip and location bar.
-BrowserView continues to hold the page contents and download shelf.
-
-TopContainerView sometimes contains the bookmark bar. If the bookmark bar is
-visible (“attached” under the location bar) it should slide down over the page.
-However, on the new tab page the bookmark bar is visually part of the page
-contents, so the top controls must slide down over it. Therefore the bookmark
-bar is reparented between the BrowserView and the TopContainerView as needed.
-
-Infobars (“Save this password?”) are considered part of the page contents. The
-TopContainerView always slides over infobars.
-
-These are the states for the top controls. “Closed” is the steady state.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/s2NLSYoYsxuc8Z5YxLbWGyg/image?w=512&h=258&rev=644&ac=1"
-height=258px; width=512px;>
-
-During the sliding and revealed states the TopContainerView paints to a
-compositor layer to allow it to be stacked above the web contents layer.
-
-Revealing the top controls
-
-The top controls need to feel like they slide open when the user presses the top
-of the screen, but not trigger accidentally when the user is mousing past web
-content at the top of the page. A reveal is triggered when the mouse is at the
-top of screen past a time delay and is moving slowly (or not at all) in a
-horizontal direction.
-
-In addition to revealing when the user mouses to the top of the screen there are
-a variety of situations in the UI when the top controls need to be visible. For
-example:
-
- When focus is in the location bar (so the user can see what he types)
-
- Making a bookmark (the dialog relies on the location bar to show the URL)
-
- Opening the tools menu (so the menu is visually attached to the 3-lines
- button)
-
-In these situations the top controls need to stay visible even if the mouse
-moves away from the screen edge. Getting these situations correct was one of the
-hardest parts of this feature.
-
-pkotwicz@ introduced a clever ImmersiveRevealedLock class to deal with the
-visibility issue. Various parts of Chrome code can acquire a lock and hold it
-until their UI is dismissed. The ImmersiveModeController handles sliding closed
-the top controls when all locks are destroyed and the mouse is away from the
-screen edge.
-
-The top controls also stay visible when any child control has focus, which
-handles the location bar and several other situations.
-
-Painting the collapsed controls
-
-The white strips in the collapsed controls (the “light bar”) help reinforce to
-the user that their tabs are still present. It also provides a place to show
-loading animations.
-
-The light-bar uses the existing TabStrip for painting, but with a special
-painting style flag set. This allows the existing tab layout code to be used for
-the light bar, so the tab positions exactly match. We also recycle most of the
-loading animation code.
-
-The disadvantaged of this approach is that it requires resizing, relayout and
-repainting of the tab strip whenever the reveal state changes. However, we
-decided the benefits of reusing the layout and animation code outweighed this
-cost.
-
-Browser and tab fullscreen
-
-Chrome supports two internal fullscreen concepts “browser fullscreen” and “tab
-fullscreen”. Browser fullscreen is entered via UI commands (e.g. Tools menu &gt;
-Fullscreen). Tab fullscreen is entered when a web page requests fullscreen (e.g.
-Docs presentations).
-
-Immersive fullscreen is only tied to browser fullscreen. This has two
-advantages:
-
-1. From the user’s perspective, immersive fullscreen is the only fullscreen
-state in the Ash window manager. In particular we avoid the confusion Mac OS
-creates with its two separate “fullscreen” and “presentation mode” commands.
-
-2. Fullscreen videos, presentations and games don’t display the light-bars at
-the top and bottom of the screen, and the user doesn’t need to do anything
-special for this to happen.
-
-See chrome/browser/ui/fullscreen/fullscreen_controller.h for details on the two
-fullscreen modes.
-
-Test coverage
-
-Immersive fullscreen is covered by both unit tests and browser tests. The
-browser tests are used primarily to verify integration with the rest of the
-browser’s fullscreen mechanisms. See
-c/b/ui/views/frame/immersive_mode_controller_ash_unittest.cc and
-c/b/ui/views/frame/immersive_mode_controller_ash_browsertest.cc.
-
-Appendix
-
-During the development of immersive fullscreen the instant-extended project
-(“1993”) experimented with using web content to display the auto-complete
-suggetsions under the location bar. This presented challenges for layout in
-immersive fullscreen, as the suggestions were sometimes in a separate web view
-and sometimes (on the new tab page) part of the primary web content.
-
-The suggestions list has been reverted back to a native UI widget. However, if
-it becomes web content again this is how the layout code will need to change:
-
-Tab contents position, without 1993:
-
-<table>
-<tr>
-
-<td>Regular window</td>
-
-<td>Immersive fullscreen</td>
-
-</tr>
-<tr>
-
-<td>Bookmark bar hidden</td>
-
-<td>bottom of omnibox (top_container)</td>
-
-<td>3 pixels from top (omnibox hidden, bookmarks hidden)</td>
-
-</tr>
-<tr>
-
-<td>Bookmark bar attached</td>
-
-<td>bottom of bookmark bar (top_container)</td>
-
-<td>3 pixels from top (omnibox hidden, bookmarks bar shown during reveals)</td>
-
-</tr>
-<tr>
-
-<td>New tab page with bookmark bar detached</td>
-
-<td>bottom of bookmark bar (not top_container)</td>
-
-<td>below bookmarks</td>
-
-</tr>
-</table>
-
-Tab contents position, with 1993:
-
-<table>
-<tr>
-
-<td>Regular window</td>
-
-<td>Immersive fullscreen</td>
-
-</tr>
-<tr>
-
-<td>No suggestions</td>
-
-<td>bottom of omnibox</td>
-
-<td>3 pixels from top</td>
-
-</tr>
-<tr>
-
-<td>Suggestions (in overlay)</td>
-
-<td>bottom of omnibox</td>
-
-<td>3 pixels from top, overlay contents below top_container</td>
-
-</tr>
-<tr>
-
-<td>NTP suggestions (in active)</td>
-
-<td>bottom of omnibox (unless suggestions won’t cover bookmarks, then at top)</td>
-
-<td>bottom of omnibox (unless suggestions won’t cover bookmarks, then at top)</td>
-
-</tr>
-</table>
-
-</div>
-<div class="column">
-
-</div>
-</div> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/impl-side-painting/index.md b/chromium/docs/website/site/developers/design-documents/impl-side-painting/index.md
deleted file mode 100644
index 04babf02c2a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/impl-side-painting/index.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: impl-side-painting
-title: Multithreaded Rasterization
----
-
-## **## **## **@nduca, @enne, @vangelis (and many others)******
-
-# Implementation status:
-
-# crbug.com/169282, and <https://code.google.com/p/chromium/issues/list?q=label:Cr-Internals-Compositing-Rasterization>
-
-This feature is referred to as "multithreaded painting" and "impl-side painting"
-in some forums.
-
-## Background & Problem Statement
-## Our current compositor thread architecture is built around the idea of rasterizing layers on the main webkit thread and then, on the compositor thread, drawing the bits of the layers that we have based on their various animated and scrolled positions. This allows us to move the page up and down, e.g. due to finger dragging, without having to block on the webkit thread. When a tile is exposed that does not have contents, we draw a checkerboard and wait for the main thread to rasterize that tile.
-
-1. ## ****We want to be able to fill in checkerboards without requiring
- a new commit, since that requires going to a busy webkit thread and
- pulling in a whole new tree + damage. We also want to be able to
- render tiles at multiple resolutions, and quality levels. These
- kinds of tricks reduce memory pressure, avoid the jarring
- interruption of checkerboards.****
-
-## ****### The Excessive Checkerboarding Problem****
-
-## ****A lot of our unwanted checkerboarding comes from invalidates getting intermixed with "requests" from the impl thread to fill in missing tiles. In the current architecture, we can only rasterize tiles on the main thread, using webkit's rendering data structures. If webkit's rendering tree is completely unchanged, then the page scrolls, all the rasterization requests that go to the main thread are easily satisifed by webkit.****
-
-## ****However, any time javascript changes the rendering tree, we have the following problem: we have some "newly exposed tiles" that the compositor thread needs to prevent checkerboarding. But, annoyingly, any of the previously-painted tiles that webkit says were invalidated. We can only paint the new rendering tree -- the old rendering tree is gone. So, we have two options at this point:****
-
-****1. Draw the new tiles with the new rendering tree, and redraw the old tiles
-with the new rendering tree****
-
-****2. Draw only the new tiles, and let the old tiles stick around.****
-
-****#2 doesn't work well at all, of course: if you have a page that toggles
-between green and blue constantly, what you'd see is a random mix of green and
-blue page at any given moment. We want to preserve the "atomicity of rendering"
---- meaning that the complete state of a web page at rAF time is what gets put
-on the screen.****
-
-****There is a variant on 2 where we draw the new tiles, as well as any old
-tiles that are \*onscreen\*. If a tile is offscreen, then we make a note that is
-is invalid, but dont repaint it. In the green-blue scenario, this causes the
-screen to be green or blue, but never both==, as long as you dont scroll==. We
-ship this on Chrome Android m18. Even so, this is undesirable: if you scroll,
-you'll see a mix of content. This is expedient performance wise, but makes us
-all feel dirty.****
-
-## Our other source of heavy checkerboarding is latency related. The work we do on the main thread is based on as scroll position update message that comes from the impl thread. This message is itself not very latent, arriving on the main thread milliseconds after it is sent. However, paints for a new set of tiles can take 300ms + to complete, even with the relaxed atomicity approach described above. By the time we have painted all 300ms worth of work, the page has scrolled way past the original scroll position, and half of the tiles we worked hard to prepare are irrelevant. We have discussed a variety of solutions here, but the real core problem is that the main thread cannot be updated fast enough with the new scroll positions to really ever keep up properly.
-
-### Planned Solution
-
-### Display lists. Namely, SkPictures, modified a bit to support partial updating. We call this a Picture pile, a name borrowed from the awesome folks behind Android Browser. The idea is to only capture a display list of the webkit rendering tree on the main thread. Then, do rasterization on the impl thread, which is much more responsive.
-
-### On main thread, web content is turned into PictureLayers. ****Picture layers make a recording of the layer into a PicturePile. We track invalidations in SkRegions and during the display list capture process, decide between re-capturing the entire layer or just grabbing the invalidated area and drawing it on-top of the previously recorded base layer.****
-
-## ****During commit, we pass these PicturePiles to a PictureLayerImpl.** **Recall, layers can change in scale over time, under animation, pinch zoom, etc. To handle this, a PictureLayerImpl manages** **one or more PictureLayerTiling objects (via a PictureLayerTilingSet), which is a decomposition of the layer's entire contents into tiles at a picture screenspace resolution. So for example, a 512x512 layer might have a tiling into 4 256x256 tiles for a 1:1 ratio of screenspace pixels to content pixels, but also 1 256x256 tile for a 1:2 ratio of screenspace to conten space. We manage these tilings dyanmically.****
-
-## ****A tiling itself takes the layers entire size, not just the visible part, and breaks it up into Tiles. Each tile represents a rectangle of the PicturePile painted into a Resource ID \[think, GL texture\], at a given resolution and quality setting.****
-
-****Every tile is given a set of TilePriority values by the PictureLayerImpl
-based on its screen space position, animation and scroll velocity, and picture
-contents. These different priorities encode how soon, in time units, the tile
-could be visually useful onscreen. Key metrics are things like "how soon will it
-be visible" and "how soon will it be crisp" and "is this a tile we'd use if a
-crisp one wasn't available?"****
-
-****These Tiles are registered to the** **TileManager, which keeps these tiles
-sorted based on their priority and some global priority states. Tiles are binned
-in orders of urgency (needed now, needed in the next second, needed eventually,
-never going to be needed) and then sorted within their bin. The total GPU Memory
-budget is then assigned in decreasing priority order to these tiles. Tiles that
-are given permission to use memory are then added to a rasterization queue if
-needed.****
-
-****The raster thread scheduler is a very simple solution: on the impl thread,
-we simply pop from the raster queue, dispatch the raster task. We keep a certain
-number of jobs enqueued per thread, opting to not enqueue them all so that if
-the prioritization changes much in the future, we wont do redundant work.****
-
-****JPEG/PNG/etc bitmaps are stored in the display lists in still-encoded form
-to keep display list recording cost low and memory footprint small. Thus, the
-first time we draw a bitmap, a costly decode and downsample operation may be
-needed.** **Thus, before dispatch, tiles are "cracked open" to determine whether
-any bitmaps need to be decompressed, using the SkLazyPixelRef interface to
-WebCore's ImageDecodingStore. If decoding is needed, the tile is held in a side
-queue while a decoding task is dispatched to the raster threads. When the
-decodes are done, raster tasks are enqueued.****
-
-## **### ****This approach fixes the “atomicity of commits” problem by allowing us to servie checkerboard misses without havin to go to the laggy, potentially changed main thread. In the previous example, when the compositor sees a checkerboarded tile, we can rasterize it without having to start a commit flow, allowing us to disallow commits entirely during flings and other heavy animation use cases.******
-
-## ****### ## **### Hitch-free commits******
-
-## ****### ## ### ****A key challenge with this approach is switching from the old tree to the new tree. In the existing architecture, when we go to switch to the new tree, we have painted and uploaded all the tiles, so the tree can be immediately switched.**********
-
-## ****### ## ****In the impl-side painting architecture, we need to create
-PictureLayerImpl's in order to begin rasterizing them. Moreover, those impls
-need to be attached together to the LayerTreeHostImpl in order to get their
-screenspace positions, which are essential in computing their
-priorities.**********
-
-## ****### ## ****The obvious way to do this is to simply commit the main tree
-to the impl tree like we usually do. However, if we do that, then the impl tree
-now has holes in it where there were invalidations. At this point, the impl-side
-has two options when vsync comes around: checkerboard, or drop the frame.
-Neither is very cool.**********
-
-## ****### ## ****Our solution is the LayerTreeImpl. Whereas the previous
-architecture's LayerTreeHostImpl had a root layer and all its associated state,
-we instead introduce LayerTreeImpl, which has all the state associated with a
-layer tree: scrolling info, viewport, background color, etc. The LTHI then
-stores not one, but two LayerTreeImpl's: the active tree is the one we are
-drawing, while the pending tree is the one we are rasterizing. Priority is given
-to the active tree, but once the pending tree is fully painted, we activate it
-and throw away the old one. This allows us to switch between old and new trees
-without janking.**********
-
-## ****### Handling Giant SkPictures****
-
-## ****One potential challenge to impl-side painting compared to our existing painting model is that the SkPicture for a given layer are potentially unbounded. We plan to mitigate this by limiting the PicturePile's size to a 10,000px (emperically determined) portion of the total layer size cenetered around the viewport at the time of the picture pile's first creation. When the impl thread starts needing tiles outside the pile's area, we will asynchronously trigger the main thread to go update the pile around the new viewport center.****
-
-****### Choosing the scale at which to raster****
-
-Whenever we compute the draw properties for a PictureLayerImpl, we also decide
-what tilings it should have, or in other words, at what scales it should have
-sets of tiles. To do this we track two scale values: The ideal scale, and the
-raster scale. The ideal scale is the scale at which we should create tiles to
-give the texels in the tile a 1:1 correspondence with pixels on the screen. The
-raster scale is the high-resolution scale at which we are currently creating
-tiles. When we set the raster scale to be equal to the ideal scale, we get crisp
-tiles. This is what we'd like to have at all times, but we limit this for
-performance reasons. During a pinch gesture, or an accelerated animation, the
-raster scale lags behind the ideal scale. CSS can change the scale of a layer
-through the DOM, and we limit how often it is allowed to change the raster
-scale. This decision to reset the raster scale to the ideal or leave it alone is
-made in PictureLayerImpl::ManageTilings. Whenever the raster scale changes, we
-add a tiling both at the raster scale, and at a low resolution related to the
-raster scale. These tilings are marked as HIGH_RESOLUTION and LOW_RESOLUTION and
-are given priority as we raster tiles for the layer.
-
-****### Texture Upload****
-
-****One key challenge on lowend devcies is that uploading a single 256x256
-texture can take many milliseconds, sometimes as crazy as 3-5ms. Because of
-this, we have to carefully throttle our texture uploads so that we dont drop a
-frame. To do this, we are adopting a new approach of async texture uploads.
-Instad of issuing standard glTexImage calls, we instead place textures into
-shared memory and then instruct the GPU process to do the upload
-when-convenient. This enables the GPU process to do the upload during idle
-times, or even on another thread. The compositor then polls the GPU process via
-the query infrastructure to determine if the upload is complete. Only when the
-upload is complete will we draw with it.****
-
-****### Handling setPictureListener****
-
-****If the embedder has a picture listener, we need to send a serialized
-SkPicture to the embedding process. We would need to, at every impl-side
-swapbuffers, serialize our SkPictures for all the active layers (plus the
-bitmaps) and send them to the main thread.****
-
-****Followup Work****
-****The initial impl-side painting implementation is expected to enable the following followup use cases:****
-
-****Low-res tiles: For tiles that take a long time to rasterize, we may want to rasterize them at half or third resolution. This often dramatically reduces (5-6x anecdotally) raster cost and allows us to avoid checkerboarding during fling. However, it is worth noting that some Android users criticized this behavior on ICS devices as making fonts look too ugly. High-dpi devices may change the UX impact of this behavior on users.****
-
-****Just-in-time scaling: We currently do resizing of content at many layers in the pipeline. For example, we rasterize layers at their content resolution without consideration to their screenspace transform. Thus, a layer that is -webkit-transform: scale(0.5)’d will actually paint at its full size. Similarly, we resize images inside webkit at their content resolution. We could reduce rasterization/decode costs and memory footprint if we could do all of this scaling using the draw-time transforms on the impl thread.****
-
-****Accelerated painting: An interesting property of impl-side painting is that it cleans up our accelerated painting story. We would store the SkPicture for a layer, and then can decide to rasterize a layer with the GPU without having to involve the main thread at all in the process.**** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/index.md b/chromium/docs/website/site/developers/design-documents/index.md
deleted file mode 100644
index 92b966c7d99..00000000000
--- a/chromium/docs/website/site/developers/design-documents/index.md
+++ /dev/null
@@ -1,384 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: design-documents
-title: Design Documents
----
-
-## Start Here: Background Reading
-
-* [Multi-process
- Architecture](/developers/design-documents/multi-process-architecture):
- Describes the high-level architecture of Chromium
- **Note:** Most of the rest of the design documents assume familiarity with
- the concepts explained in this document.
-* [How Blink
- works](https://docs.google.com/document/d/1aitSOucL0VHZa9Z2vbRJSyAIsAz24kX8LFByQ5xQnUg)
- is a high-level overview of Blink architecture.
-* The "Life of a Pixel" talk ([slides](http://bit.ly/lifeofapixel) /
- [video](http://bit.ly/loap-2020-video)) is an introduction to
- Chromium's rendering pipeline, tracing the steps from web content to
- displayed pixels.
-* \[somewhat outdated\] [How Chromium Displays Web
- Pages](/developers/design-documents/displaying-a-web-page-in-chrome):
- Bottom-to-top overview of how WebKit is embedded in Chromium
-
-## See Also:
-
-* [Design docs in source
- code](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/README.md)
-* [Design doc
- template](https://docs.google.com/document/d/14YBYKgk-uSfjfwpKFlp_omgUq5hwMVazy_M965s_1KA/edit)
-
-## General Architecture
-
-* [Conventions and patterns for multi-platform
- development](/developers/design-documents/conventions-and-patterns-for-multi-platform-development)
-* [Extension Security
- Architecture](http://webblaze.cs.berkeley.edu/2010/secureextensions/):
- How the extension system helps reduce the severity of extension
- vulnerabilities
-* [HW Video Acceleration in
- Chrom{e,ium}{,OS}](https://docs.google.com/a/chromium.org/document/d/1LUXNNv1CXkuQRj_2Qg79WUsPDLKfOUboi1IWfX2dyQE/preview#heading=h.c4hwvr7uzkfl)
-* [Inter-process
- Communication](/developers/design-documents/inter-process-communication):
- How the browser, renderer, and plugin processes communicate
-* [Multi-process Resource
- Loading](/developers/design-documents/multi-process-resource-loading):
- How pages and images are loaded from the network into the renderer
-* [Plugin
- Architecture](/developers/design-documents/plugin-architecture)
-* [Process Models](/developers/design-documents/process-models): Our
- strategies for creating new renderer processes
-* [Profile
- Architecture](/developers/design-documents/profile-architecture)
-* [SafeBrowsing](/developers/design-documents/safebrowsing)
-* [Sandbox](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md)
-* [Security
- Architecture](http://crypto.stanford.edu/websec/chromium/): How
- Chromium's sandboxed rendering engine helps protect against malware
-* [Startup](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/startup.md)
-* [Threading](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/threading.md):
- How to use threads in Chromium
-
-Also see the documentation for [V8](http://code.google.com/apis/v8/), which is
-the JavaScript engine used within Chromium.
-
-## UI Framework
-
-* [UI Development
- Practices](/developers/design-documents/ui-development-practices):
- Best practices for UI development inside and outside of Chrome's
- content areas.
-* [Views framework](/developers/design-documents/chromeviews): Our UI
- layout layer used on Windows/Chrome OS.
-* [views Windowing
- system](/developers/design-documents/views-windowing): How to build
- dialog boxes and other windowed UI using views.
-* [Aura](/developers/design-documents/aura): Chrome's next generation
- hardware accelerated UI framework, and the new ChromeOS window
- manager built using it.
-* [NativeControls](/developers/design-documents/native-controls):
- using platform-native widgets in views.
-* [Focus and Activation with Views and
- Aura](/developers/design-documents/aura/focus-and-activation).
-* [Input Event Routing in Desktop
- UI](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ui/input_event/index.md).
-
-**Graphics**
-
-* [Overview](/developers/design-documents/chromium-graphics)
-* [GPU Accelerated Compositing in
- Chrome](/developers/design-documents/gpu-accelerated-compositing-in-chrome)
-* [GPU Feature Status
- Dashboard](/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap)
-* [Rendering Architecture
- Diagrams](/developers/design-documents/rendering-architecture-diagrams)
-* [Graphics and Skia](/developers/design-documents/graphics-and-skia)
-* [RenderText and Chrome UI text
- drawing](/developers/design-documents/rendertext)
-* [GPU Command
- Buffer](/developers/design-documents/gpu-command-buffer)
-* [GPU Program
- Caching](https://docs.google.com/a/chromium.org/document/d/1Vceem-nF4TCICoeGSh7OMXxfGuJEJYblGXRgN9V9hcE/edit)
-* [Compositing in Blink/WebCore: from WebCore::RenderLayer to
- cc::Layer](https://docs.google.com/presentation/d/1dDE5u76ZBIKmsqkWi2apx3BqV8HOcNf4xxBdyNywZR8/edit?usp=sharing)
-* [Compositor Thread
- Architecture](/developers/design-documents/compositor-thread-architecture)
-* [Rendering
- Benchmarks](/developers/design-documents/rendering-benchmarks)
-* [Impl-side
- Painting](/developers/design-documents/impl-side-painting)
-* [Video Playback and
- Compositor](http://www.chromium.org/developers/design-documents/video-playback-and-compositor)
-* [ANGLE architecture
- presentation](https://docs.google.com/presentation/d/1CucIsdGVDmdTWRUbg68IxLE5jXwCb2y1E9YVhQo0thg/pub?start=false&loop=false)
-
-**Network stack**
-
-* [Overview](/developers/design-documents/network-stack)
-* [Network Stack
- Objectives](/developers/design-documents/network-stack/network-stack-objectives)
-* [Crypto](/developers/design-documents/crypto)
-* [Disk Cache](/developers/design-documents/network-stack/disk-cache)
-* [HTTP Cache](/developers/design-documents/network-stack/http-cache)
-* [Out of Process Proxy Resolving Draft
- \[unimplemented\]](/system/errors/NodeNotFound)
-* [Proxy Settings and
- Fallback](/developers/design-documents/network-stack/proxy-settings-fallback)
-* [Debugging network proxy
- problems](/developers/design-documents/network-stack/debugging-net-proxy)
-* [HTTP
- Authentication](/developers/design-documents/http-authentication)
-* [View network internals tool](/system/errors/NodeNotFound)
-* [Make the web faster with SPDY](http://www.chromium.org/spdy/) pages
-* [Make the web even faster with QUIC](/quic) pages
-* [Cookie storage and
- retrieval](/developers/design-documents/network-stack/cookiemonster)
-
-**Security**
-
-* [Security
- Overview](/chromium-os/chromiumos-design-docs/security-overview)
-* [Protecting Cached User
- Data](/chromium-os/chromiumos-design-docs/protecting-cached-user-data)
-* [System
- Hardening](/chromium-os/chromiumos-design-docs/system-hardening)
-* [Chaps Technical
- Design](/developers/design-documents/chaps-technical-design)
-* [TPM Usage](/developers/design-documents/tpm-usage)
-* [Per-page
- Suborigins](/developers/design-documents/per-page-suborigins)
-* [Encrypted Partition
- Recovery](/developers/design-documents/encrypted-partition-recovery)
-* [XSS Auditor](/developers/design-documents/xss-auditor)
-
-## Input
-
-* See [chromium input](/teams/input-dev) for design docs and other
- resources.
-
-## Rendering
-
-* [Multi-column
- layout](/developers/design-documents/multi-column-layout)
-* [Style Invalidation in
- Blink](https://docs.google.com/document/d/1vEW86DaeVs4uQzNFI5R-_xS9TcS1Cs_EUsHRSgCHGu8/)
-* [Blink Coordinate
- Spaces](/developers/design-documents/blink-coordinate-spaces)
-
-## Building
-
-* [IDL build](/developers/design-documents/idl-build)
-* [IDL
- compiler](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLCompiler.md)
-
-See also the documentation for [GYP](https://code.google.com/p/gyp/w/list),
-which is the build script generation tool.
-
-## Testing
-
-* [Layout test results
- dashboard](/developers/design-documents/layout-tests-results-dashboard)
-* [Generic theme for Test
- Shell](/developers/design-documents/generic-theme-for-test-shell)
-* [Moving LayoutTests fully upstream](/system/errors/NodeNotFound)
-
-## Feature-Specific
-
-* [about:conflicts](/developers/design-documents/about-conflicts)
-* [Accessibility](/developers/design-documents/accessibility): An
- outline of current (and coming) accessibility support.
-* [Auto-Throttled Screen Capture and
- Mirroring](/developers/design-documents/auto-throttled-screen-capture-and-mirroring)
-* [Browser Window](/developers/design-documents/browser-window)
-* [Chromium Print
- Proxy](http://www.chromium.org/developers/design-documents/google-cloud-print-proxy-design):
- Enables a cloud print service for legacy printers and future
- cloud-aware printers.
-* [Constrained Popup
- Windows](/developers/design-documents/constrained-popup-windows)
-* [Desktop
- Notifications](/developers/design-documents/desktop-notifications)
-* [DirectWrite Font Cache for Chrome on
- Windows](/developers/design-documents/directwrite-font-cache)
-* [DNS Prefetching](/developers/design-documents/dns-prefetching):
- Reducing perceived latency by resolving domain names before a user
- tries to follow a link
-* [Download Page (Material Design
- Refresh)](https://docs.google.com/document/d/1XkUDOc6085tir4D5yYEyjL2GsIGBslJBHXiNQDzJawI/edit)
-* [Embedding Flash Fullscreen in the Browser
- Window](/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window)
-* [Extensions](/developers/design-documents/extensions): Design
- documents and proposed APIs.
-* [Find Bar](/developers/design-documents/find-bar)
-* [Form Autofill](/developers/design-documents/form-autofill): A
- feature to automatically fill out an html form with appropriate
- data.
-* [Geolocation](https://docs.google.com/a/chromium.org/document/pub?id=13rAaY1dG0nrlKpfy7Txlec4U6dsX3PE9aXHkvE37JZo):
- Adding support for [W3C Geolocation
- API](http://www.w3.org/TR/geolocation-API/) using native WebKit
- bindings.
-* [Generic-Sensor](/developers/design-documents/generic-sensor) :
- Access sensor data
-* [IDN in Google
- Chrome](/developers/design-documents/idn-in-google-chrome)
-* [IndexedDB](/developers/design-documents/indexeddb) (early draft)
-* [Info Bars](/developers/design-documents/info-bars)
-* [Installer](/developers/installer): Registry entries and shortcuts
-* [Instant](/developers/design-documents/instant)
-* [Isolated Sites](/developers/design-documents/isolated-sites)
-* [Linux Resources and Localized
- Strings](/developers/design-documents/linuxresourcesandlocalizedstrings):
- Loading data resources and localized strings on Linux.
-* [Media Router & Web Presentation
- API](/developers/design-documents/media-router)
-* [Memory Usage Backgrounder:
- ](/developers/memory-usage-backgrounder)Some information on how we
- measure memory in Chromium.
-* [Mouse Lock](/developers/design-documents/mouse-lock)
-* Omnibox Autocomplete: While typing into the omnibox, Chromium
- searches for and suggests possible completions.
- * [HistoryQuickProvider](/omnibox-history-provider): Suggests
- completions from the user's historical site visits.
-* [Omnibox/IME
- Coordination](/developers/design-documents/omnibox-ime-coordination)
-* [Omnibox Prefetch for Default Search
- Engines](/developers/design-documents/omnibox-prefetch-for-default-search-engines)
-* [Ozone Porting
- Abstraction](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ozone_overview.md)
-* [Password Form Styles that Chromium
- Understands](/developers/design-documents/form-styles-that-chromium-understands)
-* [Password
- Generation](/developers/design-documents/password-generation)
-* [Pepper plugin
- implementation](/developers/design-documents/pepper-plugin-implementation)
-* [Plugin Power
- Saver](https://docs.google.com/document/d/1r4xFSsR4gtjBf1gOP4zHGWIFBV7WWZMgCiAHeepoHVw/edit?usp=sharing)
-* [Preferences](/developers/design-documents/preferences)
-* [Prerender](/developers/design-documents/prerender)
-* [Print Preview](/developers/design-documents/print-preview)
-* [Printing](/developers/design-documents/printing)
-* [Rect-based event targeting in
- views](/developers/design-documents/views-rect-based-targeting):
- Making it easier to target views elements with touch.
-* [Replace the modal cookie
- prompt](/developers/design-documents/cookie-prompt-replacement)
-* [SafeSearch](/developers/design-documents/safesearch)
-* [Sane Time](/developers/design-documents/sane-time): Determining an
- accurate time in Chrome
-* [Secure Web Proxy](/developers/design-documents/secure-web-proxy)
-* [Service Processes](/developers/design-documents/service-processes)
-* [Site Engagement](/developers/design-documents/site-engagement):
- Tracking user engagement with sites they use.
-* [Site Isolation](/developers/design-documents/site-isolation):
- In-progress effort to improve Chromium's process model for security
- between web sites.
-* [Software Updates:
- Courgette](/developers/design-documents/software-updates-courgette)
-* [Sync](/developers/design-documents/sync)
-* [Tab Helpers](/system/errors/NodeNotFound)
-* [Tab to search](/tab-to-search): How to have the Omnibox
- automatically provide tab to search for your site.
-* [Tabtastic2
- Requirements](/developers/design-documents/tabtastic-2-requirements)
-* [Temporary downloads](/system/errors/NodeNotFound)
-* [Time Sources](/developers/design-documents/time-sources):
- Determining the time on a Chrome OS device
-* [TimeTicks](https://docs.google.com/document/d/1ypBZPZnshJ612FWAjkkpSBQiII7vYEEDsRkDOkVjQFw/edit?usp=sharing):
- How our monotonic timer, TimeTicks, works on different OSes
-* [UI Mirroring
- Infrastructure](/developers/design-documents/ui-mirroring-infrastructure):
- Describes the UI framework in ChromeViews that allows mirroring the
- browser UI in RTL locales such as Hebrew and Arabic.
-* [UI Localization](/developers/design-documents/ui-localization):
- Describes how localized strings get added to Chromium.
-* [User scripts](/developers/design-documents/user-scripts):
- Information on Chromium's support for user scripts.
-* [Video](/developers/design-documents/video)
-* WebSocket: A message-oriented protocol which provides bidirectional
- TCP/IP-like communication between browsers and servers.
- * [Design
- doc](https://docs.google.com/document/d/11n3hpwb9lD9YVqnjX3OwzE_jHgTmKIqd6GvXE9bDGUg/edit):
- mostly still relevant but some parts have been revised. In
- particular, mojo is used for the communication between Blink and
- //content now.
- * [WebSocket
- handshake](https://docs.google.com/document/d/1r7dQDA9AQBD_kOk-z-yMi0WgLQZ-5m7psMO5pYLFUL8/edit):
- The HTTP-like exchange before switching to WebSocket-style
- framing in more detail.
- * [Obsolete design
- doc](https://docs.google.com/document/d/1_R6YjCIrm4kikJ3YeapcOU2Keqr3lVUPd-OeaIJ93qQ/pub):
- WebSocket code has been drastically refactored. Most of the code
- described in this doc is gone. It is mostly only of historical
- interest.
-* [Web MIDI](/developers/design-documents/web-midi)
-* [WebNavigation API
- internals](/developers/design-documents/webnavigation-api-internals)
-* [Web NFC](/developers/design-documents/web-nfc)
-
-## OS-Specific
-
-* **Android**
- * [Java Resources on
- Android](/developers/design-documents/java-resources-on-android)
- * [JNI Bindings](/developers/design-documents/android-jni)
- * [Android WebView docs](/developers/androidwebview)
- * [Child process
- importance](https://docs.google.com/document/d/1PTI3udZ6TI-R0MlSsl2aflxRcnZ5blnkGGHE5JRI_Z8/edit?usp=sharing)
-* **Chrome OS**
- * See the [Chrome OS design
- documents](/chromium-os/chromiumos-design-docs) section.
-* **Mac OS X**
- * [AppleScript Support](/developers/design-documents/applescript)
- * [BrowserWindowController Object
- Ownership](/system/errors/NodeNotFound)
- * [Confirm to
- Quit](/developers/design-documents/confirm-to-quit-experiment)
- * [Mac App Mode](/developers/design-documents/appmode-mac) (Draft)
- * [Mac Fullscreen
- Mode](/developers/design-documents/fullscreen-mac) (Draft)
- * [Mac NPAPI Plugin
- Hosting](/developers/design-documents/mac-plugins)
- * [Mac specific notes on UI
- Localization](/developers/design-documents/ui-localization/mac-notes)
- * [Menus, Hotkeys, & Command
- Dispatch](/developers/design-documents/command-dispatch-mac)
- * [Notes from meeting on IOSurface usage and
- semantics](/developers/design-documents/iosurface-meeting-notes)
- * [OS X Interprocess Communication
- (Obsolete)](/developers/design-documents/os-x-interprocess-communication)
- * [Password Manager/Keychain
- Integration](/developers/design-documents/os-x-password-manager-keychain-integration)
- * [Sandboxing
- Design](/developers/design-documents/sandbox/osx-sandboxing-design)
- * [Tab Strip Design (Includes tab layout and tab
- dragging)](/developers/design-documents/tab-strip-mac)
- * [Wrench Menu
- Buttons](/developers/design-documents/wrench-menu-mac)
-* **iOS**
- * [WKWebView Problems Solved by web//
- layer](https://docs.google.com/document/d/1qgFVIhUdQf_RxhzF-sAsETvo7CNqSLmzlz5YY7rfRe0/edit)
-
-## Other
-
-* [64-bit Support](/developers/design-documents/64-bit-support)
-* [Layered
- Components](/developers/design-documents/layered-components-design)
-* [Closure Compiling Chrome
- Code](https://docs.google.com/a/chromium.org/document/d/1Ee9ggmp6U-lM-w9WmxN5cSLkK9B5YAq14939Woo-JY0/edit#heading=h.34wlp9l5bd5f)
-* [content module](/developers/content-module) / [content
- API](/developers/content-module/content-api)
-* [Design docs that still need to be
- written](http://code.google.com/p/chromium/wiki/DesignDocsToWrite)
- (wiki)
-* [In progress refactoring of key browser-process architecture for
- porting](/developers/Web-page-views)
-* [Network Experiments](/network-speed-experiments)
-* [Transitioning InlineBoxes from floats to
- LayoutUnits](https://docs.google.com/a/chromium.org/document/d/1fro9Drq78rYBwr6K9CPK-y0TDSVxlBuXl6A54XnKAyE/edit)
-
-## Full listing of all sub-pages:
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/design-documents/indexeddb/index.md b/chromium/docs/website/site/developers/design-documents/indexeddb/index.md
deleted file mode 100644
index 59c592ceba4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/indexeddb/index.md
+++ /dev/null
@@ -1,428 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: indexeddb
-title: IndexedDB Design Doc
----
-
-**This is quite outdated. The fundamental design is still pretty similar to what's described here, but this document is now of limited usefulness.**
-Please send any feedback you might have to *Jeremy Orlow
-&lt;jorlow@chromium.org&gt;* or *chromium-dev@chromium.org*.
-
-**Introduction:**
-
-The IndexedDB API implements a persistent (across browser/machine restarts)
-database that is quite stripped down. It is built upon "Object Stores" (btrees
-of key-&gt;value pairs) and Indexes (btrees of key-&gt;object store record). It
-includes an async API for use in pages and both an async and a sync API for
-workers.
-
-The latest editors draft of the spec can be found here:
-<http://dev.w3.org/2006/webapi/WebSimpleDB/> And there's a lot of discussion
-currently happening on public-webapps@w3.org.
-
-At the time of this writing the following are major changes that will probably
-happen to the spec in the near term:
-
-1. The async API will probably be changed to a callback based one.
-2. The async API should be available from workers.
-3. Composite indexes will probably be added.
-4. External indexes will probably be removed (indexes not attached to a
- object store).
-5. Inverted indexes will hopefully be added so it's possible to
- efficiently implement full text search.
-
-*Note: Most of this design doc is talking about work inside WebKit/WebCore since
-most of the implementation will exist there. At the bottom, there is discussion
-of Chromium specific plumbing.*
-
-**Threading model:**
-
-All database processing will happen on a background thread. The reasons are as
-follows: Both workers and pages will be able to access IndexedDB and thus it's
-possible that two different WebKit threads may have the same database open at
-the same time. Database access will result in file IO and we need to ensure that
-we never block the main thread. There's no way to re-use worker threads (even if
-we wanted to) because their lifetimes may be shorter than that of the opened
-database. In addition, sharing things across threads is particularly difficult
-and dangerous in WebKit. So, the easiest way to mitigate this is to do all
-database work on its own thread.
-
-Up for debate is whether we should have one IndexedDB thread, one per origin, or
-one per database. Originally I was leaning towards one per database since
-threads are cheap and we should let the OS do its thing in terms of IO
-scheduling, but this may be excessive. Either way, I'd like to design so that we
-*can* split things up thread wise if we choose to in the future.
-
-A side effect of having all work take place on a background thread is that we
-can share almost all of the code between the sync and async versions of the API.
-To make this simpler, I'm planning on creating a class like what follows to link
-code running on a background thread to either the sync or async messages
-happening on the main/worker threads.
-
-// This is a class that abstracts away the idea of having another thread offer a
-
-// "promise" to give a particular return value, go off and do the processes, and
-then
-
-// send a message which either triggers asynchronous callbacks or unblocks the
-thread
-
-// and returns a result. This class is not threadsafe, so be sure to only call
-it from
-
-// the thread it's created on.
-
-template &lt;typename ResultType&gt;
-
-class AsyncReturn&lt;ResultType&gt; : RefCounted&lt;ResultType&gt; {
-
-public:
-
-// Provide async callbacks to be used in the event of a success or error.
-
-// You should only call this or syncWaitForResult, and you should only call
-
-// either one once.
-
-void setAsyncCallbacks(PassOwnPtr&lt;ScriptExecutionContext::Task&gt;
-successCallback,
-
-PassOwnPtr&lt;ScriptExecutionContext::Task&gt; errorCallback);
-
-// Block execution until a result or an exception is returned. This will run
-
-// a WorkerRunLoop (sync is only available on workers) with the mode set to only
-
-// process tasks from our background thread. You should only call this or
-
-// setAsyncCallbacks, and you should only call either one once. If an exception
-
-// is set, the returned pointer will be 0.
-
-PassOwnPtr&lt;ResultType&gt;
-syncWaitForResult(OwnPtr&lt;IDBDatabaseException&gt;\*);
-
-// Called on success. If there's anything in the queue, starts a one shot timer
-
-// on m_timer.
-
-void setResult(PassOwnPtr&lt;Type&gt;);
-
-// Called on error. If there's anything in the queue, starts a one shot timer on
-
-// m_timer.
-
-void setError(PassOwnPtr&lt;IDBError&gt;);
-
-private:
-
-// Function called by our timer. Calls the proper callback.
-
-void onTimer(Timer\*);
-
-// Only one of the following should ever be set. These are necessary even in
-
-// sync mode because it's possible for syncWaitForResult to be called after
-
-// the response has reached us. These are zeroed out again when passed to the
-
-// callback or returned via syncWaitForResult.
-
-OwnPtr&lt;Foo&gt; m_result;
-
-OwnPtr&lt;IDBDatabaseError&gt; m_error;
-
-// When this fires, we'll call the proper callback. Only for async usage.
-
-Timer m_timer;
-
-// Only one of these is ever used and only during async usage.
-
-OwnPtr&lt;ScriptExecutionContext::Task&gt; m_successCallback;
-
-OwnPtr&lt;ScriptExecutionContext::Task&gt; m_errorCallback;
-
-// Used so we can assert this class is only used in one way or another.
-
-bool m_asyncUsage;
-
-bool m_syncUsage;
-
-};
-
-**Class structure:**
-
-In the spec, each interface has an async and a sync counterpart. In most cases,
-they share a common base class. The sync version has a "Sync" suffix and the
-async version has a "Request" suffix. Thus the following is fairly common:
-
-interface Foo
-
-Interface FooRequest : Foo
-
-interface FooSync : Foo
-
-In most cases, FooRequest and FooSync are almost identical except in terms of
-the return types. For sync, the methods usually return values. For the other,
-they call callbacks which pass the values in as a parameter. (The current event
-based API has you set event handlers that are shared by all requests and make a
-call. So it is like the callback interface except only one call can be inflight
-at a time. Plus the syntax is ugly.)
-
-In WebKit, my plan is to call the base class FooBase, but otherwise implement
-the IDLs exactly as specced. So, I'll implement things as if the structure was
-as follows:
-
-interface FooBase
-
-interface FooRequest : FooBase
-
-interface FooSync : FooBase
-
-FooRequest and FooSync are very similar. The only difference is in their return
-values and whether they block. Since we're doing all real work on the background
-thread anyway, it makes sense for our sync and async APIs to run the same code
-and simply use the above AsyncReturn class to signal completion in both cases.
-
-Both FooRequest and FooSync will have a pointer to a Foo class. This Foo class
-will have all the same methods as FooRequest and FooSync except it'll return an
-AsyncReturn&lt;Type&gt; instance. FooSync will then call syncWaitForResult()
-which will run the WorkerRunLoop with the mode set to only accept messages from
-a background thread (much like WebSockets and sync XHR) while waiting for the
-response. FooRequest will call setAsyncCallbacks and use those to call the
-proper javascript callback when the result is ready.
-
-For browsers that use multiple processes (like Chromium) there needs to be some
-way to detach the central backend from various frontends (in Chromium terms, the
-browser process and the various renderer processes). We'll do this by making all
-the Foo classes abstract interfaces and having the actual implementations be
-FooImpl classes.
-
-Each Foo class will have a .cpp file with a single static method in it: a
-constructor. For normal WebKit, that will call FooImpl::create. For
-multi-process implementations, they can omit this file from their build and
-instead have Foo::create return a proxy object which implements the Foo
-interface but which actually sends messages across processes.
-
-So, to recap, for each type of interface in the IDLs (for example,
-IDBObjectStore____) we'll have the following classes:
-
-* IDBObjectStoreBase -&gt; "IDBObjectStore" in the IDL; just a base
- class with stuff shared between the next two.
-* IDBObjectStoreRequest -&gt; The same in the IDL; the async version
- of the class. This and the next one do little more than have a
- reference to IDBObjectStore and call methods on it.
-* IDBObjectStoreSync -&gt; The same in the IDL; the sync version of
- the class.
-* IDBObjectStore -&gt; Interface for IDBObjectStoreImpl; methods will
- pretty much match what's exposed in IDL.
-* IDBObjectStoreImpl -&gt; Implements IDBObjectStore; lives almost
- entirely on the background thread; will send a message to the
- AsyncReturn instance on completion.
-
-Because all objects either are tied 100% to the thread they're created on
-(FooSync/FooRequest/FooBase) or exist completely on the background thread (Foo),
-object lifetimes and how they're destroyed should be fairly easy. This is even
-true in the face of the page cache. When a page is suspended, we should pause
-all of it's callbacks. Ideally, we'd cancel all currently running operations and
-restart if/when the page comes back, but it's not necessary for correctness. All
-in all, the threading model should make page cache integration fairly
-straightforward. During early development, however, we'll probably just have
-canSuspend return false to keep things simple.
-
-When we open an indexed database, we'll need to call the chrome client to see if
-it's allowed.
-
-It may make sense to take some parts of workers (like GenericWorkerTask and
-WorkerRunLoop) and make them a tad more generic and then move them into
-Platform.
-
-**Bindings:**
-
-There are currently no examples of methods that take callbacks that aren't
-implemented as custom functions. I fear this means I have a lot of custom
-binding writing in my future. Hopefully there's some way to modify the code
-generators to avoid this, though.
-
-To keep things simple, during the bootstrapping process I'll only be working on
-V8 bindings. Once things start to stabilize API/Spec/code wise, I'll take a shot
-at JSC bindings. If they're not fairly straightforward, I might see if someone
-from the JSC side of the world is interested in helping.
-
-**Btree implementation**/persistance**:******
-
-I often say "btree" but there are many possible ways to implement data
-persistence. Either way, it's out of scope for this document at the moment. The
-most important thing is to get an implementation working with or without
-persistance. Once we're getting close to that goal, then we can start thinking
-about this. In the mean time, it's most important to get good feedback to the
-working group since WebKit already has a good data persistence layer
-(WebSQLDatabase) and there is no indication anyone else will be shipping an
-implementation soon.
-
-**Chromium side of the implementation:**
-
-The communication from WebCore in the renderer to WebCore in the browser is all
-fairly straightforward (and will look much like how we implemented
-LocalStorage/SessionStorage), but the reverse needs to happen completely via
-async callbacks/tasks. To handle this cleanly/efficiently, we'll need to add
-some notion of "tasks" to the Chromium WebKit API (like
-WebCore::GenericWorkerTask and Chromium's Task/RunnableMethod classes). We'll
-also have FooProxy classes in WebCore that implement the Foo interface and which
-proxy all calls through to the WebKit layer, much like in
-LocalStorage/SessionStorage.
-
-Here are the various layers of calls (from renderer to browser):
-
-WebCore::FooProxy (implements WebCore::Foo)
-
-WebKit::RendererWebFooImpl (implements WebKit::WebFoo)
-
-&lt;-- IPC --&gt;
-
-Foo
-
-WebKit::WebFooImpl (implements WebKit::WebFoo)
-
-WebCore::FooImpl (implements WebCore::Foo)
-
-Note the symmetry and how we're essentially just trying to connect WebCore (in
-the renderer) to WebCore (in the browser process).
-
-In addition to the standard set of classes, we'll need a couple special ones.
-
-* **WebKit::WebAsyncReturn&lt;&gt;** Much like
- WebCore::AsyncReturn&lt;&gt; except without any of the synchronous
- waiting functionality. Returned from all methods.
-* **WebKit::WebTask** Much like WebCore::GenericWorkerTask or
- Chromium's Task. Passed into
- WebKit::WebAsyncReturn&lt;&gt;::setAsyncCallbacks().
-* **IndexedDBDispatcher** Lives in the renderer and handles all the
- reply messages from the browser process. Each outgoing request is
- assigned an ID so that we know which WebAsyncReturn object to match
- it up with. There's one per renderer process.
-* **IndexedDBDispatcherHost** Lives in the browser and handles all the
- messages from the renderer process. It has a reference to the
- IndexedDB context and can send reply messages back to the renderer
- process. There's one per ResourceMessageFilter.
-* **IndexedDBContext** Keeps track of all the IDs for the various
- WebKit wrappers and contains a hirarchy of Chromium objects which
- wrap the WebKit objects which wrap the WebCore implementations. The
- context is connected to the profile (and threadsafe ref counted).
-
-Now that you're acquainted with the objects, lets run through an example. In
-this case, what happens when IDBDatabaseRequest::openObjectStore() is called:
-
-* In WebCore inside the renderer process, openObjectStore will be
- called on an IDBDatabaseProxy object which implements the
- WebCore::IDBDatabase interface.
-* The proxy will call RendererWebIDBDatabaseImpl::openObjectStore().
- (An implementation of the WebIDBDatabase interface.)
-* RendererWebIDBDatabaseImpl::openObjectStore() sends an async IPC to
- the browser process with the RendererWebIDBDatabaseImpl's ID.
-* It then creates a
- RendererWebAsyncReturnImpl&lt;WebIDBObjectStore&gt; object and
- registers it with the IndexedDBDisptcher.
-* RendererWebIDBDatabaseImpl::openObjectStore() then returns that
- WebAsyncReturn&lt;WebIDBObjectStore&gt; object to its caller
- (IDBDatabaseProxy).
-* IDBDatabaseProxy::openObjectStore() would then instantiate an
- AsyncReturn&lt;IDBObjectStore&gt; object and two WebTasks.
-* Both WebTasks would have pointers to the AsyncReturn&lt;&gt; object.
- One would set the result. The other would set the error.
-* WebAsyncReturn&lt;&gt;::setAsyncCallbacks() would be called with the
- two tasks.
-* IDBDatabaseProxy::openObjectStore() would then return the
- AsyncReturn&lt;&gt; object to its caller.
-* That caller would similarly create tasks and pass them into the
- AsyncReturn&lt;&gt; (but that's just what happens normally; it's not
- Chromium speciifc).
-
-So now there's an async message in flight to the browser process and a chain of
-callbacks/tasks set up to fire a callback or allow execution to continue inside
-the browser process.
-
-* On the IO thread in the browser, the message comes in. An
- IndexedDBDispatcherHost receives the message. Each method detects
- whether it's on the IO thread and, if so, redirects it to the WebKit
- thread.
-* The message would then call IndexedDBContext::getIndexedDatabase()
- with the WebIDBDatabase's ID.
-* If the ID doesn't exist, we kill off the renderer since at best
- there's a major bug or memory corruption, and at worst the renderer
- is compromised.
-* We then call Chromium's IDBDatabase::openObjectStore() method. (Note
- that the name is the same as another object in WebCore. That's fine.
- They're in separate namespaces and since the WebKit layer is in
- between, it isn't confusing in practice.)
-* Chromium's IDBDatabase::openObjectStore then calls
- WebIDBDatabaseImpl::openObjectStore(). (The WebIDBDatabaseImpl is an
- implementation of WebIDBDatabase that lives in WebKit/chromium/src
- and provides entry back into WebCore's implementation of the
- IndexedDB implementation)
-* WebIDBDatabaseImpl::openObjectStore() then calls
- WebCore::IDBDatabase::openObjectStore(). (Which, via the virtual
- method call, actually calls
- WebCore::IDBDatabaseImpl::openObjectStore().)
-* WebCore's IndexedDB implementation does its thing and returns an
- AsyncReturn&lt;IDBObjectStore&gt; object.
-* WebIDBDatabaseImpl then creates a
- WebAsyncReturnImpl&lt;WebIDBObjectStore&gt; object that has a
- pointer to the AsyncReturn&lt;&gt; object and returns it.
-* Chromium's IDBDatabase::openObjectStore() then creates two WebTasks.
- One for a success/result and one for an error. These WebTasks wrap
- Chromium Tasks/RunnableMethods.
-* When the WebTasks get a response, they'll wrap it in a
- WebIDBDatabaseError or a WebIDBObjectStore as appropriate. They'll
- then pass the result on to the appropriate WebTask.
-* The appropriate Chromium Task will then be called which will fetch
- the result. If it's a WebIDBObjectStore, it'll be added to the
- IndexedDBContext and an ID will be assigned.
-* Either the serialized WebIDBDatabaseError or the WebIDBObjectStore's
- ID will be sent back via the IndexedDBDispatcherHost via an async
- message. Either way, it'll include an ID that was sent with the
- original async request.
-
-So now a reply message is en route to the renderer.
-
-* The IndexedDBDispatcher receives the message. Based on the ID, it
- figures out which WebAsyncReturn&lt;&gt; object is associated with
- it.
-* It'll create a RendererWebIDBDatabaseErrorImpl or a
- RendererWebIDBObejctStoreImpl to wrap the result in. If it's the
- latter, it'll be given the ID the browser process created.
-* The object is passed into either WebAsyncReturn&lt;&gt;::setResult()
- or ::setError.
-* That then either converts the WebIDBDatabaseError object into a
- WebCore::IDBDatabaseError or wraps the WebIDBObjectStore in an
- WebCore::IDBObjectStoreProxy and passes the result into
- WebCore::AsyncReturn&lt;&gt;::setResult() or ::setError().
-* And the rest proceeds as it normally would in WebCore.
-
-This same process happens for each object type--except for IndexedDatabase since
-it's a singleton and the entrypoint to the whole API. It'd be created as
-follows:
-
-* WebCore::IndexedDatabase::create() is normally part of
- WebCore/storage/IndexedDatabase.cpp, but Chromium won't compile that
- file. Instead, the file with our WebCore::IndexedDatabaseProxy will
- contain the WebCore::IndexedDatabase::create() implementation.
- (Normally WebCore::IndexedDatabase::create() would just call
- WebCore::IndexedDatabaseImpl::create().)
-* WebCore::IndexedDatabase::create() would call
- WebCore::IndexedDatabaseProxy::create() through the ChromiumBridge.
-* IndexedDatabaseProxy::create() would call
- WebKitClient::CreateIndexedDatabase() which would create a
- RendererWebIndexedDatabaseImpl and return is synchronously.
- IndexedDatabaseProxy would then wrap that class.
-* The browser process would create its own
- IndexedDatabase/WebIndexedDatabase/WebCore::IndexedDatabase lazily
- on first use.
-
-Whenever a Proxy object is deleted, it should delete the wrapper it owns. When
-the RendererFooImpl is deleted, it should send a message to the browser and the
-chain of deleting should continue. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/indexeddb/indexeddbbackup/index.md b/chromium/docs/website/site/developers/design-documents/indexeddb/indexeddbbackup/index.md
deleted file mode 100644
index 78d5ae10626..00000000000
--- a/chromium/docs/website/site/developers/design-documents/indexeddb/indexeddbbackup/index.md
+++ /dev/null
@@ -1,430 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/indexeddb
- - IndexedDB Design Doc
-page_name: indexeddbbackup
-title: IndexedDBBackup
----
-
-**This is an early draft:** Please send any feedback you might have to *Jeremy
-Orlow &lt;jorlow@chromium.org&gt;* or *chromium-dev@chromium.org*.
-
-**Introduction:**
-
-The IndexedDB API implements a persistent (across browser/machine restarts)
-database that is quite stripped down. It is built upon "Object Stores" (btrees
-of key-&gt;value pairs) and Indexes (btrees of key-&gt;object store record). It
-includes an async API for use in pages and both an async and a sync API for
-workers.
-
-The latest editors draft of the spec can be found here:
-<http://dev.w3.org/2006/webapi/WebSimpleDB/> And there's a lot of discussion
-currently happening on public-webapps@w3.org.
-
-At the time of this writing the following are major changes that will probably
-happen to the spec in the near term:
-
-1. The async API will probably be changed to a callback based one.
-2. The async API should be available from workers.
-3. Composite indexes will probably be added.
-4. External indexes will probably be removed (indexes not attached to a
- object store).
-5. Inverted indexes will hopefully be added so it's possible to
- efficiently implement full text search.
-
-Q: Why this over LocalStorage?
-
-A: LocalStorage is inherently racy or a parallelism disaster, depending on
-whether or not you're willing to implement the "storage mutex" described in the
-spec. Chromium has decided not to implement it. WebKit itself is single
-thread/process (i.e. no parallelism period).
-
-Q: Why this over WebSQLDatabase?
-
-A: Microsoft and Mozilla have made it very clear they will not implement SQL in
-the browser. If you want to argue this is silly, talk to them, not me.
-
-*Note: Most of this design doc is talking about work inside WebKit/WebCore since
-most of the implementation will exist there. At the bottom, there is discussion
-of Chromium specific plumbing.*
-
-**Threading model:**
-
-All database processing will happen on a background thread. The reasons are as
-follows: Both workers and pages will be able to access IndexedDB and thus it's
-possible that two different WebKit threads may have the same database open at
-the same time. Database access will result in file IO and we need to ensure that
-we never block the main thread. There's no way to re-use worker threads (even if
-we wanted to) because their lifetimes may be shorter than that of the opened
-database. In addition, sharing things across threads is particularly difficult
-and dangerous in WebKit. So, the easiest way to mitigate this is to do all
-database work on its own thread.
-
-Up for debate is whether we should have one IndexedDB thread, one per origin, or
-one per database. Originally I was leaning towards one per database since
-threads are cheap and we should let the OS do its thing in terms of IO
-scheduling, but this may be excessive. Either way, I'd like to design so that we
-*can* split things up thread wise if we choose to in the future.
-
-A side effect of having all work take place on a background thread is that we
-can share almost all of the code between the sync and async versions of the API.
-To make this simpler, I'm planning on creating a class like what follows to link
-code running on a background thread to either the sync or async messages
-happening on the main/worker threads.
-
-// This is a class that abstracts away the idea of having another thread offer a
-
-// "promise" to give a particular return value, go off and do the processes, and
-then
-
-// send a message which either triggers asynchronous callbacks or unblocks the
-thread
-
-// and returns a result. This class is not threadsafe, so be sure to only call
-it from
-
-// the thread it's created on.
-
-template &lt;typename ResultType&gt;
-
-class AsyncReturn&lt;ResultType&gt; : RefCounted&lt;ResultType&gt; {
-
-public:
-
-// Provide async callbacks to be used in the event of a success or error.
-
-// You should only call this or syncWaitForResult, and you should only call
-
-// either one once.
-
-void setAsyncCallbacks(PassOwnPtr&lt;ScriptExecutionContext::Task&gt;
-successCallback,
-
-PassOwnPtr&lt;ScriptExecutionContext::Task&gt; errorCallback);
-
-// Block execution until a result or an exception is returned. This will run
-
-// a WorkerRunLoop (sync is only available on workers) with the mode set to only
-
-// process tasks from our background thread. You should only call this or
-
-// setAsyncCallbacks, and you should only call either one once. If an exception
-
-// is set, the returned pointer will be 0.
-
-PassOwnPtr&lt;ResultType&gt;
-syncWaitForResult(OwnPtr&lt;IDBDatabaseException&gt;\*);
-
-// Called on success. If there's anything in the queue, starts a one shot timer
-
-// on m_timer.
-
-void setResult(PassOwnPtr&lt;Type&gt;);
-
-// Called on error. If there's anything in the queue, starts a one shot timer on
-
-// m_timer.
-
-void setError(PassOwnPtr&lt;IDBError&gt;);
-
-private:
-
-// Function called by our timer. Calls the proper callback.
-
-void onTimer(Timer\*);
-
-// Only one of the following should ever be set. These are necessary even in
-
-// sync mode because it's possible for syncWaitForResult to be called after
-
-// the response has reached us. These are zeroed out again when passed to the
-
-// callback or returned via syncWaitForResult.
-
-OwnPtr&lt;Foo&gt; m_result;
-
-OwnPtr&lt;IDBDatabaseError&gt; m_error;
-
-// When this fires, we'll call the proper callback. Only for async usage.
-
-Timer m_timer;
-
-// Only one of these is ever used and only during async usage.
-
-OwnPtr&lt;ScriptExecutionContext::Task&gt; m_successCallback;
-
-OwnPtr&lt;ScriptExecutionContext::Task&gt; m_errorCallback;
-
-// Used so we can assert this class is only used in one way or another.
-
-bool m_asyncUsage;
-
-bool m_syncUsage;
-
-};
-
-**Class structure:**
-
-In the spec, each interface has an async and a sync counterpart. In most cases,
-they share a common base class. The sync version has a "Sync" suffix and the
-async version has a "Request" suffix. Thus the following is fairly common:
-
-interface Foo
-
-Interface FooRequest : Foo
-
-interface FooSync : Foo
-
-In most cases, FooRequest and FooSync are almost identical except in terms of
-the return types. For sync, the methods usually return values. For the other,
-they call callbacks which pass the values in as a parameter. (The current event
-based API has you set event handlers that are shared by all requests and make a
-call. So it is like the callback interface except only one call can be inflight
-at a time. Plus the syntax is ugly.)
-
-In WebKit, my plan is to call the base class FooBase, but otherwise implement
-the IDLs exactly as specced. So, I'll implement things as if the structure was
-as follows:
-
-interface FooBase
-
-interface FooRequest : FooBase
-
-interface FooSync : FooBase
-
-FooRequest and FooSync are very similar. The only difference is in their return
-values and whether they block. Since we're doing all real work on the background
-thread anyway, it makes sense for our sync and async APIs to run the same code
-and simply use the above AsyncReturn class to signal completion in both cases.
-
-Both FooRequest and FooSync will have a pointer to a Foo class. This Foo class
-will have all the same methods as FooRequest and FooSync except it'll return an
-AsyncReturn&lt;Type&gt; instance. FooSync will then call syncWaitForResult()
-which will run the WorkerRunLoop with the mode set to only accept messages from
-a background thread (much like WebSockets and sync XHR) while waiting for the
-response. FooRequest will call setAsyncCallbacks and use those to call the
-proper javascript callback when the result is ready.
-
-For browsers that use multiple processes (like Chromium) there needs to be some
-way to detach the central backend from various frontends (in Chromium terms, the
-browser process and the various renderer processes). We'll do this by making all
-the Foo classes abstract interfaces and having the actual implementations be
-FooImpl classes.
-
-Each Foo class will have a .cpp file with a single static method in it: a
-constructor. For normal WebKit, that will call FooImpl::create. For
-multi-process implementations, they can omit this file from their build and
-instead have Foo::create return a proxy object which implements the Foo
-interface but which actually sends messages across processes.
-
-So, to recap, for each type of interface in the IDLs (for example,
-IDBObjectStore____) we'll have the following classes:
-
-* IDBObjectStoreBase -&gt; "IDBObjectStore" in the IDL; just a base
- class with stuff shared between the next two.
-* IDBObjectStoreRequest -&gt; The same in the IDL; the async version
- of the class. This and the next one do little more than have a
- reference to IDBObjectStore and call methods on it.
-* IDBObjectStoreSync -&gt; The same in the IDL; the sync version of
- the class.
-* IDBObjectStore -&gt; Interface for IDBObjectStoreImpl; methods will
- pretty much match what's exposed in IDL.
-* IDBObjectStoreImpl -&gt; Implements IDBObjectStore; lives almost
- entirely on the background thread; will send a message to the
- AsyncReturn instance on completion.
-
-Because all objects either are tied 100% to the thread they're created on
-(FooSync/FooRequest/FooBase) or exist completely on the background thread (Foo),
-object lifetimes and how they're destroyed should be fairly easy. This is even
-true in the face of the page cache. When a page is suspended, we should pause
-all of it's callbacks. Ideally, we'd cancel all currently running operations and
-restart if/when the page comes back, but it's not necessary for correctness. All
-in all, the threading model should make page cache integration fairly
-straightforward. During early development, however, we'll probably just have
-canSuspend return false to keep things simple.
-
-When we open an indexed database, we'll need to call the chrome client to see if
-it's allowed.
-
-**Disk based tree implementation possibilities:**
-
-I often say "btree" but really a B+Tree, B\*Tree, B-Tree, etc, etc could all
-work, and I'm not married to any particular one.
-
-I haven't done much research into which would be best here or (more importantly)
-which library to use but <http://1978th.net/tokyocabinet/> seems like a major
-possibility. If all else fails, we can probably use the implementation in some
-existing product (that's license compatible) like SQLite.
-
-If you have thoughts on this, please send me suggestions!
-
-I'm not exactly sure how we'll integrate such a library with WebKit. If it's
-small, we might be able to simply check it in. If it's large.....ideas?
-
-**Chromium side of the implementation:**
-
-The communication from WebCore in the renderer to WebCore in the browser is all
-fairly straightforward (and will look much like how we implemented
-LocalStorage/SessionStorage), but the reverse needs to happen completely via
-async callbacks/tasks. To handle this cleanly/efficiently, we'll need to add
-some notion of "tasks" to the Chromium WebKit API (like
-WebCore::GenericWorkerTask and Chromium's Task/RunnableMethod classes). We'll
-also have FooProxy classes in WebCore that implement the Foo interface and which
-proxy all calls through to the WebKit layer, much like in
-LocalStorage/SessionStorage.
-
-Here are the various layers of calls (from renderer to browser):
-
-WebCore::FooProxy (implements WebCore::Foo)
-
-WebKit::RendererWebFooImpl (implements WebKit::WebFoo)
-
-&lt;-- IPC --&gt;
-
-Foo
-
-WebKit::WebFooImpl (implements WebKit::WebFoo)
-
-WebCore::FooImpl (implements WebCore::Foo)
-
-Note the symmetry and how we're essentially just trying to connect WebCore (in
-the renderer) to WebCore (in the browser process).
-
-In addition to the standard set of classes, we'll need a couple special ones.
-
-* **WebKit::WebAsyncReturn&lt;&gt;** Much like
- WebCore::AsyncReturn&lt;&gt; except without any of the synchronous
- waiting functionality. Returned from all methods.
-* **WebKit::WebTask** Much like WebCore::GenericWorkerTask or
- Chromium's Task. Passed into
- WebKit::WebAsyncReturn&lt;&gt;::setAsyncCallbacks().
-* **IndexedDBDispatcher** Lives in the renderer and handles all the
- reply messages from the browser process. Each outgoing request is
- assigned an ID so that we know which WebAsyncReturn object to match
- it up with.
-* IndexedDBDispatcherHost Lives in the browser and handles all the
- messages from the renderer process. It has a reference to the
- IndexedDB context and can send reply messages back to the renderer
- process.
-* IndexedDBContext Owns the IndexedDatabase wrapper which owns all
- knows how to route messages to the right Chromium wrapper, which is
- 1:1 to a WebKit wrapper, which is 1:1 with a WebCore implementation.
-
-delete mesages
-
-Lets take IDBDatabaseRequest::openObjectStore() as an example:
-
-* In WebCore inside the renderer process, openObjectStore will be
- called on an IDBDatabaseProxy object which implements the
- WebCore::IDBDatabase object. (This object would have been returned
- earlier by the IndexedDatabase::open() call.)
-* The proxy will call RendererWebIDBDatabaseImpl::openObjectStore().
- (The object would have been returned earlier by
- RendererWebIndexedDatabaseImpl::open(). The object is an
- implementation of the WebIDBDatabase interface.)
-* The Chromium implementation of
- RendererWebIndexedDatabaseImpl::openObjectStore() makes an async
- call to the browser process with the RendererWebIDBDatabaseImpl's
- ID.
-* It then creates a
- RendererWebAsyncReturnImpl&lt;WebIDBobjectStore&gt; object and
- registers it with the IndexedDBDisptcher.
-* RendererWebIDBDatabaseImpl::openObjectStore() then returns that
- WebAsyncReturn&lt;WebIDBObjectStore&gt; object to its caller
- (IDBDatabaseProxy).
-* IDBDatabaseProxy::openObjectStore() would then instantiate a
- AsyncReturn&lt;IDBObjectStore&gt; object and two WebTasks.
-* Both WebTasks would have pointers to the AsyncReturn&lt;&gt; object.
- One would set the result. The other would set the error.
-* WebAsyncReturn&lt;&gt;::setAsyncCallbacks() would be called with the
- two tasks.
-* IDBDatabaseProxy::openObjectStore() would then return the
- AsyncReturn&lt;&gt; object to its caller.
-* That caller would similarly create tasks and pass them into the
- AsyncReturn&lt;&gt; (but that's just what happens normally; it's not
- Chromium speciifc).
-
-So now there's an async message in flight to the browser process and a chain of
-callbacks/tasks set up to fire a callback or allow execution to continue inside
-the browser process.
-
-* On the IO thread in the browser, the message comes in. An
- IndexedDBDispatcherHost receives the message. Each method detects
- whether it's on the IO thread and, if so, redirects it to the WebKit
- thread.
-* The message would then call IndexedDBContext::getIndexedDatabase()
- with the WebIndexedDatabase's ID.
-* If the ID doesn't exist, we kill off the renderer since at best
- there's a major bug or memory corruption, and at worst the renderer
- is compromised.
-* We then call Chromium's IDBDatabase::openObjectStore() method. (Note
- that the name is the same as another object in WebCore. That's fine.
- They're in separate namespaces and since the WebKit layer is in
- between, it isn't confusing in practice.)
-* Chromium's IDBDatabase::openObjectStore then calls
- WebIDBDatabaseImpl::openObjectStore(). (The WebIDBDatabaseImpl is an
- implementation of WebIDBDatabase that lives in WebKit/chromium/src
- and provides entry back into WebCore's implementation of the
- IndexedDB implementation)
-* WebIDBDatabaseImpl::openObjectStore() then calls
- WebCore::IDBDatabase::openObjectStore(). (Which, via the virtual
- method call, actually calls
- WebCore::IDBDatabaseImpl::openObjectStore().)
-* WebCore's IndexedDB implementation does its thing and returns an
- AsyncReturn&lt;IDBObjectStore&gt; object.
-* WebIDBDatabaseImpl then creates a
- WebAsyncReturnImpl&lt;WebIDBObjectStore&gt; object that has a
- pointer to the AsyncReturn&lt;&gt; object and returns it.
-* Chromium's IDBDatabase::openObjectStore() then creates two WebTasks.
- One for a success/result and one for an error. These WebTasks wrap
- Chromium Tasks/RunnableMethods.
-* When the WebTasks get a response, they'll wrap it in a
- WebIDBDatabaseError or a WebIDBObjectStore as appropriate. They'll
- then pass the result on to the appropriate WebTask.
-* The appropriate Chromium Task will then be called which will fetch
- the result. If it's a WebIDBObjectStore, it'll be added to the
- IndexedDBContext and an ID will be assigned.
-* Either the serialized WebIDBDatabaseError or the WebIDBObjectStore's
- ID will be sent back via the IndexedDBDispatcherHost via an async
- message. Either way, it'll include an ID that was sent with the
- original async request.
-
-So now a reply message is en route to the renderer.
-
-* The IndexedDBDispatcher receives the message. Based on the ID, it
- figures out which WebAsyncReturn&lt;&gt; object is associated with
- it.
-* It'll create a RendererWebIDBDatabaseErrorImpl or a
- RendererWebIDBObejctStoreImpl to wrap the result in. If it's the
- latter, it'll be given the ID the browser process created.
-* The object is passed into either WebAsyncReturn&lt;&gt;::setResult()
- or ::setError.
-* That then either converts the WebIDBDatabaseError object into a
- WebCore::IDBDatabaseError or wraps the WebIDBObjectStore in an
- WebCore::IDBObjectStoreProxy and passes the result into
- WebCore::AsyncReturn&lt;&gt;::setResult() or ::setError().
-* And the rest proceeds as it normally would in WebCore.
-
-This same process happens for each object type--except for IndexedDatabase since
-it's a singleton and the entrypoint to the whole API. It'd be created as
-follows:
-
-* WebCore::IndexedDatabase::create() is normally part of
- WebCore/storage/IndexedDatabase.cpp, but Chromium won't compile that
- file. Instead, the file with our WebCore::IndexedDatabaseProxy will
- contain the WebCore::IndexedDatabase::create() implementation.
- (Normally WebCore::IndexedDatabase::create() would just call
- WebCore::IndexedDatabaseImpl::create().)
-* WebCore::IndexedDatabase::create() would call
- WebCore::IndexedDatabaseProxy::create() through the ChromiumBridge.
-* IndexedDatabaseProxy::create() would call
- WebKitClient::CreateIndexedDatabase() which would create a
- RendererWebIndexedDatabaseImpl and return is synchronously.
- IndexedDatabaseProxy would then wrap that class.
-* The browser process would create its own
- IndexedDatabase/WebIndexedDatabase/WebCore::IndexedDatabase lazily
- on first use. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/info-bars/2infobars.png.sha1 b/chromium/docs/website/site/developers/design-documents/info-bars/2infobars.png.sha1
deleted file mode 100644
index 7adc818d246..00000000000
--- a/chromium/docs/website/site/developers/design-documents/info-bars/2infobars.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-44a23236f71957ad85f117f8e595ad29dce74500 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.graffle.sha1
deleted file mode 100644
index 3977b74706e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b44f66a14273c8a63803ca8c699d080175eb0cd0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.png.sha1 b/chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.png.sha1
deleted file mode 100644
index cbcce7612f1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/info-bars/InfoBars.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-855a2220a4d27be7aebb1e423dd263f50d2c193b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/info-bars/index.md b/chromium/docs/website/site/developers/design-documents/info-bars/index.md
deleted file mode 100644
index 3a929488733..00000000000
--- a/chromium/docs/website/site/developers/design-documents/info-bars/index.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: info-bars
-title: Info Bars
----
-
-Info Bars are informational messages associated with a Tab. They are displayed
-when something happens in the Tab that the user should be aware of, e.g. a
-plugin has crashed, or the user can save a password they just entered. They are
-designed to be non-modal so as not to interrupt the workflow.
-
-#### Proposed Design
-
-The TabContents object provides a simple API that clients can use to add
-InfoBars to the presentation of that Tab. A client must have an object
-implementing an InfoBarDelegate interface which provides some basic information
-and callbacks for an InfoBar UI. It calls TabContents::AddInfoBar to add the
-InfoBar to that Tab. The TabContents uses the NOTIFY_TAB_CONTENTS_INFOBAR_ADDED
-notification (source = TabContents, details = the delegate) to broadcast the
-change to the UI. There is also a symmetrical
-NOTIFY_TAB_CONTENTS_INFOBAR_REMOVED.
-
-On the UI side, Info Bars are hosted and owned by the window UI, more
-specifically by a views::View subclass called InfoBarContainer that is hosted
-within the BrowserView class.
-
-There are several different types of InfoBar, and corresponding InfoBarDelegate
-interfaces that provide common InfoBar appearance. The simplest is AlertInfoBar
-and AlertInfoBarDelegate, which allows for the display of a string message and
-optional icon. If the client does not want to implement this message it can
-create an instance of SimpleAlertInfoBarDelegate, which is constructed with a
-string and an icon, and deletes itself automatically when the InfoBar is closed.
-
-Another common type is ConfirmInfoBar and ConfirmInfoBarDelegate, which allows
-the client to ask the user a question and control buttons to receive their
-response. The delegate interface notifies the client of the button chosen.
-
-It is possible for the client to create custom InfoBars by subclassing the
-InfoBar view and the InfoBarDelegate interface. InfoBarDelegate should be
-platform independent, as it is used by TabContents which is platform
-independent. The implementation of an InfoBar may vary significantly from
-platform to platform.
-
-Here is a diagram showing the relationship between the objects in a couple of
-use cases:
-
-[<img alt="image"
-src="/developers/design-documents/info-bars/2infobars.png">](/developers/design-documents/info-bars/2infobars.png)
-
-#### Add Flows
-
-An instance of object X "x1" implements AlertInfoBarDelegate, and its lifetime
-is managed by some other object. Here is the flow for its addition to
-TabContents t:
-
-t-&gt;AddInfoBar(x1);
-
-This adds x1 to t's list of InfoBarDelegates, and broadcasts a
-NOTIFY_TAB_CONTENTS_INFOBAR_ADDED that the InfoBarContainer in the associated
-hosting BrowserView observes. InfoBarContainer calls x1's CreateInfoBar method
-to construct a platform-specific View for the InfoBar and adds it to its list of
-children, beginning an animation that causes the InfoBar to appear to slide in.
-
-#### Remove Flows
-
-The user clicks the close button on x1's InfoBar view. The InfoBar view
-communicates, via its InfoBarContainer back through to the selected TabContents
-telling it to remove the associated InfoBarDelegate. The TabContents removes the
-delegate from its list and broadcasts NOTIFY_TAB_CONTENTS_INFOBAR_REMOVED. The
-InfoBarContainer observes this message and begins an animation that causes the
-associated InfoBar to appear to slide out. When the slide out animation is
-completed, the InfoBar calls through to its delegate saying that the InfoBar is
-about to be deleted. The InfoBarDelegate implementation can use this as an
-opportunity to delete itself if it is not managed some other way.
-
-#### Tab Switch Flows
-
-When the user switches tabs, the BrowserView receives a TabSelectedAt function
-call via its implementation of TabStripModelObserver. The BrowserView calls the
-ChangeTabContents method on the InfoBarContainer, which causes it to reset its
-selected TabContents value, and remove and add observers from the old and new
-TabContents. It also uses this opportunity to update its visual state, removing
-the child views associated with the old TabContents and constructing a new set
-of InfoBar views for the newly selected TabContents. InfoBar views are designed
-to be destroyed and re-created every time tab selection changes. When InfoBar
-views are created in this mode, there is no animation as they are added and
-removed.
-
-Another important note: The InfoBarContainer's active TabContents is set to NULL
-whenever a TabContents is detached from a window, much as the BrowserView's
-TabContentsContainer's active TabContents is set to NULL. This is done because
-when you drag the last tab out of a window, that window is destroyed, which
-results in WM_NCDESTROY being sent to the frame and the focus manager to be shut
-down. However the view hierarchy is not destroyed until OnFinalMessage. Because
-both InfoBarContainer and TabContentsContainerView configure the focus manager,
-this shutdown behavior means that both of these views may try and configure the
-FocusManager after it has been destroyed.
-
-A possible improvement to this situation would be to have the RootView delete
-its view hierarchy when the window is destroyed, rather than waiting for
-OnFinalMessage.
-
-#### InfoBar Uniqueness
-
-The InfoBarContainer supports showing of multiple child InfoBar at the same
-time. This allows client code to queue up multiple notices that the user can
-respond to at their leisure. Sometimes however client code may wish there to be
-only one InfoBar for a specific type of notice. The InfoBarDelegate has an
-Equals method that can be implemented to support this functionality. Consider
-the AlertInfoBarDelegate, which is used to display a simple text string. The
-TabContents will never allow two AlertInfoBarDelegates with the same text string
-to be shown. AlertInfoBarDelegate overrides InfoBarDelegate::EqualsDelegate to
-test equality by comparing text strings with another AlertInfoBarDelegate. This
-ensures that multiple InfoBars with the same string are not added.
-
-#### InfoBar Layout
-
-The InfoBarContainer overrides views::View::GetPreferredSize to communicate to
-the BrowserView its total size during Layout. When InfoBars are added or
-removed, or their height changes due to animations, the InfoBarContainer tells
-the BrowserView to update its Layout.
-
-#### InfoBar Expiration
-
-By default, InfoBars "expire" (automatically close) after a reload or a
-navigation to the TabContents that they were opened within. Delegates can
-override the ShouldExpire method to customize this behavior.
-
-#### InfoBar View Ownership
-
-InfoBar views are not owned by the view hierarchy. They automatically delete
-themselves after they are removed from the View hierarchy. This is not done
-immediately but after a return to the message loop since the stack of View
-hierarchy changed notifications must be allowed to completely unwind. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/instant/index.md b/chromium/docs/website/site/developers/design-documents/instant/index.md
deleted file mode 100644
index 1454a2da83b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/instant/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: instant
-title: Instant
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/design-documents/instant/instant-support/index.md b/chromium/docs/website/site/developers/design-documents/instant/instant-support/index.md
deleted file mode 100644
index f339c9855f5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/instant/instant-support/index.md
+++ /dev/null
@@ -1,344 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/instant
- - Instant
-page_name: instant-support
-title: Instant Support
----
-
-**ALL CONTENT BELOW IS OUTDATED, INSTANT IS UNLAUNCHED**
-
-This document assumes some familiarity with the Chrome Instant feature,
-including the capabilities in Instant Extended. It's written primarily for
-developers working on the feature.
-
-## Instant URL
-
-An *Instant URL* is a URL that matches the instant_url template of the default
-search engine. So, given the default Chrome installation,
-"http://www.google.com/webhp" and "http://www.google.com/webhp?foo=bar#q=quux"
-are considered Instant URLs, whereas "http://www.google.com/accounts" is not.
-Instant Extended allows Instant URLs to match more template fields of the
-default search engine, with restrictions. So, in the extended mode,
-"https://www.google.com/?espv=1" and
-"https://www.google.com/search?espv=1&q=foo" are also Instant URLs, whereas the
-corresponding URLs without the "espv=1" parameter are not.
-
-**Why does this matter?**
-The Chrome Instant functionality only works with Instant URLs. So, in extended
-mode, we extract query terms from a URL into the omnibox only if the URL is an
-Instant URL. Similarly, we create an InstantTab (described below) only if the
-URL is an Instant URL.
-In addition, we try to bucket all Instant URLs (and only Instant URLs) into a
-dedicated renderer process (the *Instant renderer*). I say *try to* because we
-won't always succeed, as you'll see below. We also install the SearchBox
-extension only in the Instant renderer (and not other renderers). The SearchBox
-extension is responsible for implementing Chrome's side of the [SearchBox
-API](/searchbox), so this means that only webpages loaded in the Instant
-renderer can access the API.
-
-**Terminology note:** URLs can be classified into Instant URLs or non-Instant
-URLs. Webpages support Instant or they don't. In other words, to talk about
-Instant support, you need an actual page (WebContents). Throughout this
-document, we use the terms URL and page consistently in this manner. Of course
-pages have URLs, so we also say that "a page has an Instant URL" or "a
-non-Instant URL page".
-
-## Determining Instant Support
-
-**What is Instant support?**
-
-We want to know whether the page that we've loaded in the hidden Instant overlay
-actually supports Instant, i.e., the SearchBox API. We start by loading the
-default search engine's Instant URL into the overlay, but after it goes through
-redirects, it may end up in a page that may or may not support Instant.
-
-**Why do we want to determine Instant support?**
-Say the page isn't known to support Instant yet. When the user types in the
-omnibox, we should immediately fallback to the local omnibox popup. Doing
-otherwise is bad. If the user types, and we send `onchange()` to the page,
-hoping that it will eventually respond, we would be making the user wait.
-Conversely, if we know that the page supports Instant, we can and should send
-onchange() to it, instead of falling back to the local omnibox popup, since the
-local popup is an inferior experience.
-
-**How do we determine Instant support?**
-We start by assuming the page doesn't support Instant. At some point, the
-browser sends an IPC to the renderer. The SearchBox receives it, checks if
-`window.chrome.searchBox.onsubmit()` is a JS function defined in the page, and
-responds. When the response IPC is received by the browser, it thus determines
-Instant support.
-Also, if the browser receives an IPC at any point that's part of the SearchBox
-API (such as *SetSuggestions* or *ShowInstantPreview*), it considers the page to
-support Instant.
-Only pages that are Instant URLs can support Instant. A random non-Instant URL
-webpage can define the onsubmit() method, but there'll be no SearchBox extension
-available to receive or send the appropriate IPCs. In other words, a random
-webpage can't fool the browser into thinking it supports Instant (however, see
-the caveat in footnote \[1\]).
-
-**When do we determine Instant support?**
-The browser waits for the page to fully load and then sends the IPC mentioned
-above. This happens in the Instant implementation of
-`WebContentsObserver::DidFinishLoad()`.
-
-**Why don't we just check to see if the final page loaded in the Instant renderer?**
-First, even if the page is an Instant URL, it might not actually support
-Instant. For example, "http://www.google.com/webhp" might be a recognized
-Instant URL (so it gets assigned to the Instant renderer), but when it loads,
-the page may disable Instant due to server side experiments or other failures.
-Second, the page may go through one or more redirects that cause a
-*cross-process navigation* (see the OpenURLFromTab section below). If one of
-these redirects is renderer-initiated (e.g.: using `location.href = "..."` or a
-`<meta http-equiv=refresh>` tag), we'll still get a DidFinishLoad(). Say
-"http://www.google.com/webhp" (the Instant URL we initially load) uses a JS
-redirect to "http://www.google.com/accounts" (a non-Instant URL), which, after
-verifying your login cookies, redirects you back to the "/webhp" URL, again
-through a JS redirect. At some point, we'll get a DidFinishLoad() for the
-"/accounts" URL. If we check the renderer at that time, we will wrongly conclude
-that the page doesn't support Instant.
-In fact, we do actually send the request IPC after "/accounts" loads (because of
-DidFinishLoad(), as mentioned above). But by the time the response IPC comes
-back, the browser already knows about the JS redirect and is in the midst of
-handling it, so it knows that the response is for an older page, and ignores it.
-This is achieved by checking `WebContents::IsActiveEntry()` using the page_id
-contained in the response IPC.
-Of course, it's possible for the JS redirect to happen much later through a
-delayed timer, in which case, the "/accounts" URL is still the active entry when
-the browser receives the response IPC. In this case, we'll conclude that the
-page doesn't support Instant. This is okay since we can't possibly handle
-arbitrarily delayed redirects. Our method works for the common case of an
-immediate JS redirect.
-
-**What happens if the final page isn't an Instant URL? We will never get a response IPC, right?**
-True, since there's no SearchBox extension in that page's renderer. However, in
-the absence of a response IPC, the browser will continue to treat the page as
-not supporting Instant, so it all works out.
-
-## OpenURLFromTab
-
-`WebContentsDelegate::OpenURLFromTab()` is called whenever there's a
-cross-process navigation. This can happen in a few different ways:
-**Case 1:** The initial page load of the Instant URL in the hidden overlay may
-go through a series of HTTP redirects, any of which may trip the cross-process
-bit. Say we start by loading URL A. It redirects to URL B, which is "claimed" by
-an installed app (i.e., the app has listed B in its list of URL patterns in its
-manifest.json). Apps are loaded in separate renderer processes, so the redirect
-from A to B causes a cross-process navigation. HTTP redirects that are not
-claimed by any app do **not** trip the cross-process bit, even if they are not
-Instant URLs. I.e., if URL A is an Instant URL, but URL B is not, B will still
-be loaded in the same Instant renderer process that we started out with. \[1\]
-Alternatively, we'll hit the cross-process case if any of the redirects are
-renderer-initiated (as mentioned in the previous section, using location.href or
-a &lt;meta&gt; tag). Normally, renderer-initiated navigations (including
-redirects) are considered cross-process only if they actually cross an app or
-extension boundary (see `RenderViewImpl::decidePolicyForNavigation()`). For
-Instant however, we have added some code that makes **all** renderer-initiated
-navigations be initially treated as cross-process (see
-`ChromeContentRendererClient::ShouldFork()`).
-**Case 2:** Say we are showing the Instant overlay (URL A), and the user does
-something (such as click on a link) that causes the page to navigate to URL B,
-tripping a renderer-initiated cross-process navigation (as explained above).
-Assume that the click by itself doesn't cause the overlay to be committed
-(because the overlay is showing at less than full height).
-Let's look at what happens if B is not considered to be an Instant URL (in both
-cases above). In Case 2, we want to commit the overlay if possible, since it
-would be a mistake to try to continue using the overlay (B cannot support the
-Instant API, so the overlay would just stop working). However, in Case 1, we
-don't want to commit or discard the overlay just yet, since it's part of the
-initial series of redirects, and the final Instant page hasn't even been loaded
-yet.
-The way we distinguish these cases is by looking at whether the overlay is
-already known to support Instant. In Case 1, the Instant support determination
-hasn't yet been performed. In Case 2, it has, since we can't possibly be showing
-the overlay if it didn't support Instant. So, our algorithm for OpenURLFromTab()
-is this:
-
-```none
-OpenURLFromTab(url) {
-  if (!supports_instant_) {
-    // Case 1: Allow (perform) the navigation.
-    contents_->GetController().LoadURL(url);
-  } else {
-    // Case 2: Commit the overlay if possible. Allow or deny the navigation based on whether the commit succeeds or fails.
-    if (CommitIfPossible(...)) {
-      // The Browser is now the WebContentsDelegate, not us.
-      contents_->GetDelegate()->OpenURLFromTab(url);
-    } else {
-      // Deny (don't perform) the navigation.
-    }
-  }
-}
-```
-
-Note that when we get an OpenURLFromTab() call, it's incumbent upon us to
-actually perform the navigation. If we don't do anything, the navigation (or
-redirect) won't happen.
-
-**Wait, the above algorithm doesn't check whether `url` is a non-Instant URL, which is the reasoning given for distinguishing Case 2 above. Why not?**
-Actually, we want to commit the overlay on any user action, even if the
-navigation is to an Instant URL. This is because the user could've clicked on a
-link to say "http://www.google.com/webhp". The user expects the click to result
-in a committed tab, with the full webpage in it. It would be weird if it was
-still an overlay. The overlay isn't expected to randomly navigate on its own, so
-we'll assume that any call to OpenURLFromTab() is due to a user action (thus,
-committing the overlay is an appropriate action for us to take).
-
-**What happens if the overlay tries to update its hash state, i.e., the "#q=..."
-fragment of its URL, to keep state (i.e., without any user action)?**
-
-Thankfully, updating the fragment does not result in a call to OpenURLFromTab(),
-and thus we don't attempt to erroneously commit the overlay. TODO(sreeram): How
-about pushState?
-
-**If we can't commit, why do we not allow the navigation?**
-In the `else { // Deny }` part above, we could've chosen to still perform the
-navigation, and then do a new round of Instant support determination. Then, if
-the page ends up supporting Instant, we could keep using it as the overlay.
-Otherwise, we could discard it. This is needlessly complex and probably would
-introduce subtle bugs due to the second round of Instant support determination.
-Practically, this should never be needed. We *ought* to be able to commit all
-the time.
-The only time we wouldn't be able to commit the overlay is if the current
-omnibox text is a URL (and not a search). But in that case, the overlay
-shouldn't be showing any links other than suggestions (in particular, there
-should be no search results, search tools, Google+ widgets or such). If the user
-clicks on a suggestion, the page will request for it through the SearchBox API
-(*navigateContentWindow* for URLs and *show(reason=query)* for queries), so the
-page shouldn't cause an OpenURLFromTab() call. If something slips through the
-cracks (say because the overlay showed a "Learn more" link that the user
-clicked), we'll just disallow the navigation, which means the overlay remains
-showing the Instant page, and continues to work.
-
-## InstantTab
-
-In Instant Extended mode, an *InstantTab* represents a committed page (i.e., an
-actual tab on the tabstrip, and not an overlay) that's an Instant URL.
-Typically, this is either the server-provided NTP (New Tab Page) or a search
-results page. Such a page can also be used to show Instant suggestions and
-results, so it's appropriate to ask whether an InstantTab supports the Instant
-API.
-An InstantTab is a lightweight wrapper that's deleted and recreated as the user
-switches tabs (i.e., Instant only has a single InstantTab object, not one per
-tab). When the user switches to a tab with an Instant URL, we create an
-InstantTab wrapper around it, starting as usual by assuming that it doesn't
-support Instant. We then immediately send the request IPC. The rest of the
-Instant support determination works similar to the overlay. Since we (Instant)
-are not the WebContentsDelegate for a committed tab, none of the
-OpenURLFromTab() issues arise here. Note that we reset the InstantTab when the
-user switches tabs. We don't store the result of the Instant support
-determination anywhere permanently in the tab's WebContents.
-This generally works well, except for the following case: If the tab is a
-server-provided NTP ("http://www.google.com/webhp"), it's possible that we just
-created the WebContents and had to immediately commit it, so the page hasn't
-fully loaded yet. Since the common case is to open a browser with the NTP, we
-don't want to fall back to the local NTP just because we haven't finished
-loading the server-provided NTP. But, if the user starts typing into the omnibox
-before the NTP finishes loading, we don't want to wait for the server page
-(since that could take an arbitrary amount of time). In such a case (user typing
-before the NTP finishes loading), we'll fallback to the overlay (local omnibox
-popup).
-
-**Does that mean that we fallback to the overlay whenever the user types, but we haven't yet determined Instant support for an InstantTab?**
-No, that would mean practically every time the user switches to a tab and
-immediately starts typing, we'll end up with the overlay. This is obviously bad
-(because the user is bounced out of whatever search modes/tools they had in the
-tab).
-
-**Perhaps the solution is to store the Instant support bit with the WebContents? So that, when we switch to a tab, we won't have to perform the determination all over again?**
-This might help somewhat, but it doesn't solve all problems. For example, an
-Instant URL tab might have been created without Instant (i.e., through a link
-click or a bookmark navigation). When the user switches to it the first time, we
-still have to perform Instant support determination. Also, storing this bit with
-the WebContents means storing it somewhere within the SearchTabHelper, and this
-introduces unnecessary complexity (what should happen to that bit if the tab
-navigates in the background?) and leaks Instant concepts to an unrelated part of
-the codebase.
-
-**What's the solution then?**
-If we are on an InstantTab, and we haven't yet determined its Instant support,
-switch to the overlay only if the page hasn't finished loading. The reason this
-works is that, if the page has finished loading , we can go ahead and blindly
-send the onchange() to it as the user types. Note that we are not waiting for
-the page to load to determine Instant support. We send the IPC as soon as the
-user switches to the tab. Waiting for a page to load is the long pole that takes
-an indeterminate amount of time. Waiting for an IPC is a much smaller, mostly
-determinate amount of time (a few milliseconds, usually). So, if it turns out
-that the page doesn't support Instant, we'll quickly discover that and fallback
-to the overlay anyway.
-
-**What happens if the tab is a "sad tab", i.e., the page has crashed?**
-
-Right. We need to not wait for Instant support in that case.
-
-**What happens if the page isn't an Instant URL? Won't we end up waiting indefinitely for a response IPC that never arrives? So, won't we send onchange() into the void?**
-No. An InstantTab is only created for pages that are Instant URLs, so they
-should all have been bucketed into the Instant renderer process, and thus should
-have the SearchBox extension. So, a response IPC is guaranteed.
-
-Well, not really. Recall that a renderer-initiated navigation normally isn't
-cross-process unless it crosses an app boundary. So, it's possible that a tab
-started out with a non-Instant URL (thus, it was **not** assigned to the Instant
-renderer), then the user clicked on a link to an Instant URL. Now, this tab is
-eligible to be treated as an InstantTab. But the page is still in the
-non-Instant renderer, so we'll never get the response IPC back. This can only
-happen with InstantTab and not with the overlay, because the overlay always
-starts out with an Instant URL, and thus always starts out in the Instant
-renderer.
-
-So, putting all this together, here's our algorithm regarding InstantTab:
-
-```none
-ResetInstantTab() {
-  WebContents* contents = GetActiveWebContents();
-  if (contents->GetURL() is an Instant URL
-      AND contents hasn't crashed
-      AND contents->GetRenderViewHost()->GetProcess()->GetID() is an Instant renderer) {
-    overlay_.reset();  // Discard the overlay, if any.
-    instant_tab_.reset(contents);
-    instant_tab_->DetermineInstantSupport();  // Send the request IPC.
-  } else {
-    instant_tab_.reset();  // Don't use InstantTab.
-  }
-}
-Update() {
-  if (instant_tab_) {
-    if (overlay_) {
-      // We previously switched to the overlay because the InstantTab wasn't done loading.
-      // It probably has finished loading by now, but no matter. We'll continue using the overlay
-      // until it's discarded, to avoid a jarring switch as the user types.
-      overlay_->Update(...);
-    } else {
-      if (instant_tab_->contents()->IsLoading()) {
-        // The InstantTab hasn't finished loading. Use the overlay instead.
-        overlay_.reset(new InstantOverlay(...));
-        overlay_->Update(...);
-      } else {
-        // Use the InstantTab.
-        instant_tab_->Update(...);
-      }
-    }
-  } else {
-    // Use the overlay_, creating one if necessary.
-  }
-}
-ActiveTabChanged() {
-  overlay_.reset();  // Discard the overlay.
-  ResetInstantTab();
-}
-```
-
-Questions? Comments? Send them to sreeram@chromium.org.
-
----
-
-\[1\] The astute reader would have observed that thus, it's technically possible
-for us to end up with a non-Instant URL page in the Instant renderer process,
-one which may even define the onsubmit() method and thus pass the Instant
-support determination test. This is fine. It can only happen if the Instant URL
-that we start with willfully redirects (using HTTP redirects) to such a
-non-Instant URL. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/inter-process-communication/index.md b/chromium/docs/website/site/developers/design-documents/inter-process-communication/index.md
deleted file mode 100644
index c300b216183..00000000000
--- a/chromium/docs/website/site/developers/design-documents/inter-process-communication/index.md
+++ /dev/null
@@ -1,313 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: inter-process-communication
-title: Inter-process Communication (IPC)
----
-
-[TOC]
-
-## Overview
-
-Chromium has a [multi-process
-architecture](/developers/design-documents/multi-process-architecture) which
-means that we have a lot of processes communicating with each other. Our main
-inter-process communication primitive is the named pipe. On Linux & OS X, we use
-a `socketpair()`. A named pipe is allocated for each renderer process for
-communication with the browser process. The pipes are used in asynchronous mode
-to ensure that neither end is blocked waiting for the other.
-
-For advice on how to write safe IPC endpoints, please see [Security Tips for
-IPC](/Home/chromium-security/education/security-tips-for-ipc).
-
-### IPC in the browser
-
-Within the browser, communication with the renderers is done in a separate I/O
-thread. Messages to and from the views then have to be proxied over to the main
-thread using a `ChannelProxy`. The advantage of this scheme is that resource
-requests (for web pages, etc.), which are the most common and performance
-critical messages, can be handled entirely on the I/O thread and not block the
-user interface. These are done through the use of a
-`ChannelProxy::MessageFilter` which is inserted into the channel by the
-`RenderProcessHost`. This filter runs in the I/O thread, intercepts resource
-request messages, and forwards them directly to the resource dispatcher host.
-See [Multi-process Resource
-Loading](/developers/design-documents/multi-process-resource-loading) for more
-information on resource loading.
-
-### IPC in the renderer
-
-Each renderer also has a thread that manages communication (in this case, the
-main thread), with the rendering and most processing happening on another thread
-(see the diagram in [multi-process
-architecture](/developers/design-documents/multi-process-architecture)). Most
-messages are sent from the browser to the WebKit thread through the main
-renderer thread and vice-versa. This extra thread is to support synchronous
-renderer-to-browser messages (see "Synchronous messages" below).
-
-## Messages
-
-### Types of messages
-
-We have two primary types of messages: "routed" and "control." Control messages
-are handled by the class that created the pipe. Sometimes that class will allow
-others to received message by having a `MessageRouter` object that other
-listeners can register with and received "routed" messages sent with their
-unique (per pipe) id.
-
-For example, when rendering, control messages are not specific to a given view
-and will be handled by the `RenderProcess` (renderer) or the `RenderProcessHost`
-(browser). Requests for resources or to modify the clipboard are not
-view-specific so are control messages. An example of routed messages are a
-message to ask a view to paint a region.
-
-Routed messages have historically been used to get messages to a specific
-`RenderViewHost`. However, technically any class can receive routed messages by
-using `RenderProcessHost::GetNextRoutingID` and registering itself with
-`RenderProcessHost::AddRoute`. Currently both `RenderViewHost` and
-`RenderFrameHost` instances have their own routing IDs.
-
-Independent of the message type is whether the message is sent from the browser
-to the renderer, or from the renderer to the browser. Messages related to a
-document's frame sent from the browser to the renderer are called `Frame`
-messages because they are being sent *to* the `RenderFrame`. Similarly, messages
-sent from the renderer to the browser are called `FrameHost` messages because
-they are being sent *to* the `RenderFrameHost`. You will notice the messages
-defined in
-[frame_messages.h](https://code.google.com/p/chromium/codesearch#chromium/src/content/common/frame_messages.h)
-are two sections, one for `Frame` and one for `FrameHost` messages.
-
-Plugins also have separate processes. Like the render messages, there are
-`PluginProcess` messages (sent from the browser to the plugin process) and
-`PluginProcessHost` messages (sent from the plugin process to the browser).
-These messages are all defined in
-[`plugin_process_messages.h`](https://code.google.com/p/chromium/codesearch#chromium/src/content/common/plugin_process_messages.h).
-The automation messages (for controlling the browser from the UI tests) are done
-in a similar manner.
-
-The same organization applies for other groups of messages exchanged between the
-browser and the renderer, as for `View` and `ViewHost` labeled messages
-exchanged between `RenderViewHost` and `RenderView`, defined in
-[view_messages.h](https://code.google.com/p/chromium/codesearch#chromium/src/content/common/view_messages.h).
-
-### Declaring messages
-
-Special macros are used to declare messages. To declare a routed message from
-the renderer to the browser (e.g. a `FrameHost` message specific to a frame)
-that contains a URL and an integer as an argument, write:
-```cpp
-IPC_MESSAGE_ROUTED2(FrameHostMsg_MyMessage, GURL, int)
-```
-To declare a control message from the browser to the renderer (e.g. a `Frame`
-message not specific to a frame) that contains no parameters, write:
-```cpp
-IPC_MESSAGE_CONTROL0(FrameMsg_MyMessage)
-```
-#### Pickling values
-
-Parameters are serialized and de-serialized to message bodies using the
-`ParamTraits` template. Specializations of this template are provided for most
-common types in `ipc_message_utils.h`. If you define your own types, you will
-also have to define your own `ParamTraits` specialization for it.
-
-Sometimes, a message has too many values to be reasonably put in a message. In
-this case, we define a separate structure to hold the values. For example, for
-the `FrameMsg_Navigate` message, the `CommonNavigationParams` structure is
-defined in
-[`navigation_params.h`](https://code.google.com/p/chromium/codesearch/#chromium/src/content/common/navigation_params.h).
-[`frame_messages.h`](https://code.google.com/p/chromium/codesearch/#chromium/src/content/common/frame_messages.h)
-defines the `ParamTraits` specializations for the structures using the
-[`IPC_STRUCT_TRAITS`](https://code.google.com/p/chromium/codesearch/#chromium/src/ipc/param_traits_macros.h)
-family of macros.
-
-### Sending messages
-
-You send messages through "channels" (see below). In the browser, the
-`RenderProcessHost` contains the channel used to send messages from the UI
-thread of the browser to the renderer. The `RenderWidgetHost` (base class for
-`RenderViewHost`) provides a `Send` function that is used for convenience.
-
-Messages are sent by pointer and will be deleted by the IPC layer after they are
-dispatched. Therefore, once you can find the appropriate `Send` function, just
-call it with a new message:
-```cpp
-Send(new ViewMsg_StopFinding(routing_id_));
-```
-Notice that you must specify the routing ID in order for the message to be
-routed to the correct View/ViewHost on the receiving end. Both the
-`RenderWidgetHost` (base class for `RenderViewHost`) and the `RenderWidget`
-(base class for `RenderView`) have` GetRoutingID()` members that you can use.
-
-### Handling messages
-
-Messages are handled by implementing the `IPC::Listener` interface, the most
-important function on which is `OnMessageReceived`. We have a variety of macros
-to simplify message handling in this function, which can best be illustrated by
-example:
-```cpp
-MyClass::OnMessageReceived(const IPC::Message& message) {
- IPC_BEGIN_MESSAGE_MAP(MyClass, message)
- // Will call OnMyMessage with the message. The parameters of the message will be unpacked for you.
- IPC_MESSAGE_HANDLER(ViewHostMsg_MyMessage, OnMyMessage)
- ...
- IPC_MESSAGE_UNHANDLED_ERROR() // This will throw an exception for unhandled messages.
- IPC_END_MESSAGE_MAP()
-}
-
-// This function will be called with the parameters extracted from the ViewHostMsg_MyMessage message.
-MyClass::OnMyMessage(const GURL& url, int something) {
- ...
-}
-```
-
-You can also use `IPC_DEFINE_MESSAGE_MAP` to implement the function definition
-for you as well. In this case, do not specify a message variable name, it will
-declare a `OnMessageReceived` function on the given class and implement its
-guts.
-
-Other macros:
-
-* `IPC_MESSAGE_FORWARD`: This is the same as `IPC_MESSAGE_HANDLER` but
- you can specify your own class to send the message to, instead of
- sending it to the current class.
-
- ```cpp
- IPC_MESSAGE_FORWARD(ViewHostMsg_MyMessage, some_object_pointer, SomeObject::OnMyMessage)
- ```
-
-* `IPC_MESSAGE_HANDLER_GENERIC`: This allows you to write your own
- code, but you have to unpack the parameters from the message
- yourself:
-
- ```cpp
- IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_MyMessage, printf("Hello, world, I got the message."))
- ```
-
-### Security considerations
-
-Security bugs in IPC can have [nasty
-consequences](http://blog.chromium.org/2012/05/tale-of-two-pwnies-part-1.html)
-(file theft, sandbox escapes, remote code execution). Check out our [security
-for IPC](/Home/chromium-security/education/security-tips-for-ipc) document for
-tips on how to avoid common pitfalls.
-
-## Channels
-
-`IPC::Channel` (defined in `ipc/ipc_channel.h`) defines the methods for
-communicating across pipes. `IPC::SyncChannel` provides additional capabilities
-for synchronously waiting for responses to some messages (the renderer processes
-use this as described below in the "Synchronous messages" section, but the
-browser process never does).
-
-Channels are not thread safe. We often want to send messages using a channel on
-another thread. For example, when the UI thread wants to send a message, it must
-go through the I/O thread. For this, we use a `IPC::ChannelProxy`. It has a
-similar API as the regular channel object, but proxies messages to another
-thread for sending them, and proxies messages back to the original thread when
-receiving them. It allows your object (typically on the UI thread) to install a
-`IPC::ChannelProxy::Listener` on the channel thread (typically the I/O thread)
-to filter out some messages from getting proxied over. We use this for resource
-requests and other requests that can be handled directly on the I/O thread.
-`RenderProcessHost` installs a `RenderMessageFilter` object that does this
-filtering.
-
-## Synchronous messages
-
-Some messages should be synchronous from the renderer's perspective. This
-happens mostly when there is a WebKit call to us that is supposed to return
-something, but that we must do in the browser. Examples of this type of messages
-are spell-checking and getting the cookies for JavaScript. Synchronous
-browser-to-renderer IPC is disallowed to prevent blocking the user-interface on
-a potentially flaky renderer.
-
-**Danger:** Do not handle any synchronous messages in the UI thread! You must
-handle them only in the I/O thread. Otherwise, the application might deadlock
-because plug-ins require synchronous painting from the UI thread, and these will
-be blocked when the renderer is waiting for synchronous messages from the
-browser.
-
-### Declaring synchronous messages
-
-Synchronous messages are declared using the `IPC_SYNC_MESSAGE_*` macros. These
-macros have input and return parameters (non-synchronous messages lack the
-concept of return parameters). For a control function which takes two input
-parameters and returns one parameter, you would append `2_1` to the macro name
-to get:
-
-```cpp
-IPC_SYNC_MESSAGE_CONTROL2_1(SomeMessage, // Message name
- GURL, //input_param1
- int, //input_param2
- std::string); //result
-```
-
-Likewise, you can also have messages that are routed to the view in which case
-you would replace "control" with "routed" to get `IPC_SYNC_MESSAGE_ROUTED2_1`.
-You can also have `0` input or return parameters. Having no return parameters is
-used when the renderer must wait for the browser to do something, but needs no
-results. We use this for certain printing and clipboard operations.
-
-### Issuing synchronous messages
-
-When the WebKit thread issues a synchronous IPC request, the request object
-(derived from `IPC::SyncMessage`) is dispatched to the main thread on the
-renderer through a `IPC::SyncChannel` object (the same one is also used to send
-all asynchronous messages). The `SyncChannel` will block the calling thread when
-it receives a synchronous message, and will only unblock it when the reply is
-received.
-
-While the WebKit thread is waiting for the synchronous reply, the main thread is
-still receiving messages from the browser process. These messages will be added
-to the queue of the WebKit thread for processing when it wakes up. When the
-synchronous message reply is received, the thread will be un-blocked. Note that
-this means that the synchronous message reply can be processed out-of-order.
-
-Synchronous messages are sent the same way normal messages are, with output
-parameters being given to the constructor. For example:
-```cpp
-const GURL input_param("http://www.google.com/");
-std::string result;
-content::RenderThread::Get()-&gt;Send(new MyMessage(input_param, &result));
-printf("The result is %s\\n", result.c_str());
-```
-
-### Handling synchronous messages
-
-Synchronous messages and asynchronous messages use the same
-`IPC_MESSAGE_HANDLER`, etc. macros for dispatching the message. The handler
-function for the message will have the same signature as the message
-constructor, and the function will simply write the output to the output
-parameter. For the above message you would add
-```cpp
-IPC_MESSAGE_HANDLER(MyMessage, OnMyMessage)
-```
-to the `OnMessageReceived` function, and write:
-```cpp
-void RenderProcessHost::OnMyMessage(GURL input_param, std::string* result) {
- *result = input_param.spec() + " is not available";
-}
-```
-### Converting message type to a message name
-
-If you get a crash and you have the message type you can convert this to a
-message name. The message type will be 32-bit value, the high 16-bits are the
-class and the low 16-bits are the id. The class is based on the enums in
-ipc/ipc_message_start.h, the id is based on the line number in the file that
-defines the message. This means that you need to get the exact revision of
-Chromium in order to accurately get the message name.
-
-Example of this in [554011](https://crbug.com/554011) was 0x1c0098 at Chromium
-revision
-[ad0950c1ac32ef02b0b0133ebac2a0fa4771cf20](https://crrev.com/ad0950c1ac32ef02b0b0133ebac2a0fa4771cf20).
-That's class 0x1c which is line
-[40](https://chromium.googlesource.com/chromium/src/+/ad0950c1ac32ef02b0b0133ebac2a0fa4771cf20/ipc/ipc_message_start.h#40)
-which matches ChildProcessMsgStart. ChildProcessMsgStart messages are in
-content/common/child_process_messages.h and the IPC will be on line 0x98 or line
-[152](https://chromium.googlesource.com/chromium/src/+/ad0950c1ac32ef02b0b0133ebac2a0fa4771cf20/content/common/child_process_messages.h#152)
-which is ChildProcessHostMsg_ChildHistogramData.
-
-This technique is particularly useful if you are dealing with crashes caused by
-content::RenderProcessHostImpl::OnBadMessageReceived \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md b/chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md
deleted file mode 100644
index b65c7c3a75c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/iosurface-meeting-notes/index.md
+++ /dev/null
@@ -1,210 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: iosurface-meeting-notes
-title: iosurface-meeting-notes
----
-
-How Chrome uses IOSurfaces:
-
-- Three processes involved in rendering: browser process (owns window), renderer
-process (sandboxed), GPU process (executes OpenGL)
-
-- GPU process has to provide rendering results to browser process
-
-- Upon window resize, GPU process allocates an IOSurface, uses IOSurfaceGetID to
-get global identifier
-
-- Sends ID to browser process, which uses IOSurfaceLookup to turn it into an
-IOSurfaceRef
-
-- Both processes use CGLTexImageIOSurface2D to bind IOSurface to an OpenGL
-texture
-
-- GPU process binds texture to an FBO, renders into it using OpenGL
-
-- Browser process texture maps that IOSurface onto a triangle pair
-
-- (When window is resized, both GPU and browser processes use CFRelease against
-IOSurfaceRef to unreference it)
-
-Note:
-
-- We found early on in Chrome's development that it didn't appear necessary to
-double-buffer our IOSurfaces
-
-- For this reason, currently allocate one IOSurface per tab. Didn't want to
-double VRAM requirement unnecessarily.
-
-Q. What are the buffering semantics of IOSurfaces? Double-buffered?
-Single-buffered? Is there locking going on internally to make them appear
-double-buffered?
-
-A. Semantically single-buffered.
-
-Basically, rendering correctness is determined just by how the command buffers
-are serialized to the GPU.
-
-This means if the browser process manages to squeeze in a command buffer which
-draws the IOSurface to the screen in between the GPU process's command buffers
-filling the IOSurface, we could possibly see an incomplete rendered frame.
-
-Q. Is it possible to change these semantics with dictionary properties during
-IOSurfaceCreate?
-
-A. No.
-
-Q. Should Chrome double-buffer its IOSurfaces (i.e., avoid rendering into one
-while concurrently sampling from it in another process)? Would doing so avoid
-any driver instability (window server lockups, kernel panics) we have seen on
-various OS X hardware and software configurations? I note that both Firefox and
-the Qt WebKit port are double-buffering their IOSurfaces.
-
-A. Double-buffering probably would only improve the "race" between rendering to
-and from the IOSurface.
-
-Q. When are IOSurfaces released? If two processes both release their
-IOSurfaceRefs, is the IOSurface reclaimed immediately? In a deferred fashion?
-
-A. Should go away immediately. Subject to outstanding live texture objects that
-reference that IOSurface.
-
-It would be possible to re-look up the IOSurface in this case. (\* Maybe this is
-the reason Vangelis was able to do this in his testing. \*)
-
-You have to call glDeleteTexture, or delete the OpenGL context, to ensure the
-IOSurface bound to the texture is gone.
-
-Can run: ioreg -n IOSurfaceRoot -w 0
-
-Has very verbose output, but it could be parsed.
-
-A good indicator that we aren't leaking IOSurfaces is that the IOSurface IDs
-don't increase monotonically. If they are increasing, it's an indication
-something is leaking somewhere.
-
-Q. At what point does the IOSurface allocation fail? We had a leak at one point,
-and at some point IOSurface allocation would fail.
-
-A. You could exhaust the kernel's address space. Otherwise, there's currently no
-hard-coded limit.
-
-When you create an IOSurface, it doesn't allocate anything except system memory.
-You're not really using those pages right off the bat.
-
-Until you actually create a texture object and use it with a particular GPU, it
-doesn't allocate VRAM, either.
-
-You need to worry about texture lifetimes across processes; the IOSurface can
-get read back into system memory if the texture is deleted but the IOSurface is
-stil alive!
-
-Whenever the last texture reference is torn down, you're probably paying the
-cost of paging the VRAM back to system memory before the IOSurface is
-deallocated.
-
-There is a way to tell IOSurface to auto-purge if you're willing to track a
-system-wide use count. Any time the use count goes to 0, purge the VRAM and
-system memory. Requires more cross-process lifetime management.
-
-Q. Is fragmentation something we should worry about?
-
-A. Not really. Nothing you can do at the user level about it.
-
-In general, the working set of the GPU will be much larger than the few
-IOSurfaces you allocate. But: Chrome is allocating up to 8 IOSurfaces per
-window...
-
-Q. In 10.7, there appear to be new APIs that indicate whether the IOSurface is
-in use.
-
-A. Each process referencing an IOSurface can increment and decrement its use
-count. When the process's use count goes from 0 to 1, traps into the kernel to
-reference the IOSurface at the system level.
-
-IOSurfaceIsInUse() is the only call that should be used to determine usage --
-according to IOSurfaceIncrementUseCount / IOSurfaceDecrementUseCount. You can't
-query how many system-level references exist for a given IOSurface.
-
-In a system that's quiescent, (i.e., running just the Finder, and in particular
-not Safari), should be able to make some guarantees that IOSurfaces are all
-released.
-
-Could potentially use ioreg in conjunction with "wc -l" on a system with a known
-configuration (i.e., a GPU bot) to assert that there are no leaked IOSurfaces.
-
-One thing you do have to worry about: IOSurface doesn't let you get past any of
-the limitations of the GPU. For example, render size limits. Can only render to
-a surface so big. There is the fragmentation issue. The IOSurface does have to
-be allocated contiguously.
-
-Q. We're not using IOSurfaceAlignProperty.
-
-A. Not necessary. Implementation will pick an aligned value for e.g. the row
-bytes if the value is not specified.
-
-Q. What kind of user errors can lead to IOSurface leaks? For example, if you
-release the IOSurface but still have an OpenGL texture linked to the IOSurface,
-and don't delete the OpenGL texture, the IOSurface still appears to be valid.
-
-A. Already answered above.
-
-Q. Are IOSurfaces more expensive resources to allocate than OpenGL textures
-(accessible only to one process)? If so, how much more expensive?
-
-A. No. They might not be as performant -- due to how the GPU memory is allocated
--- but they're basically as cheap as textures.
-
-Q. During CGLTexImageIOSurface2D call: you can change how the memory as accessed
--- but can you change how much of the IOSurface you use?
-
-A. Theoretically you could pick a smaller region of the upper-left-hand corner
--- but you can't pick an arbitrary sub-rectangle.
-
-Q. Chrome currently renders IOSurfaces to the screen using OpenGL, which is
-difficult to make seamlessly interoperate with Cocoa. Currently Chrome has to
-generate a "mask" in Cocoa and render the OpenGL as an underlay in order for
-Cocoa to correctly occlude web page rendering when necessary. In the past,
-attempted to use a layer-backed view for the root view, but had occlusion
-problems such as the find bar. Are there better ways, or ways more compatible
-with CG, to draw IOSurfaces to the screen? Alternative code paths like IOSurface
--&gt; CIImage? Also, we switch back and forth between software-rendered NSViews
-and those into which we render an IOSurface using OpenGL.
-
-A. Not really. There's also a way to back a CALayer to an IOSurfaceRef nowadays
--- but this wouldn't really save a blit. It might save \*Chrome\* a blit, but CA
-would be doing it internally.
-
-Could consider rendering to a single-buffered NSOpenGLContext in the browser
-process!
-
-Q. Is the sharing of Core Animation layer trees across processes (which Safari
-does via SPI, apparently) more efficient than using IOSurfaces?
-
-A. Yes -- it is probably more efficient -- but we can't talk about what Safari
-might be doing internally.
-
-Q. Texture corruption during paging
-
-A. Should re-verify existing Radars (MapsGL) against 10.8.2 seed on current
-hardware.
-
-Q. Is there something Chrome might be doing obviously wrong in its rendering
-pipeline which is provoking window server hangs and kernel panics more often
-than other OpenGL applications?
-
-A. Watch out for lifetime management of stuff. Leaks are bad. Will provoke
-paging that otherwise wouldn't have to do.
-
-Check cross-process GL texture lifetime.
-
-Aside from that, nothing obviously architecturally wrong.
-
-Q. Are window server hangs like http://crbug.com/140175 definitely Apple bugs,
-or is it expected that applications might be able to provoke this behavior?
-
-A. Window server hangs are Apple bugs. Please file them. The more Radars the
-better. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/isolated-sites/index.md b/chromium/docs/website/site/developers/design-documents/isolated-sites/index.md
deleted file mode 100644
index 7ac3b858cb2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/isolated-sites/index.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: isolated-sites
-title: Isolated Sites
----
-
-### NOTE: This project is no longer being pursued, and <http://crbug.com/69335> has been marked WontFix. We are investigating other ways to get similar protections once the [Site Isolation](/developers/design-documents/site-isolation) effort is deployed.
-
-### Motivation
-
-For browsing high value web sites (e.g., your bank account), Isolated Sites help
-provide stronger protection against cross-origin attacks, such as reflected XSS
-and CSRF. See this paper for more details: [App Isolation: Get the Security of
-Multiple Browsers with Just
-One](http://www.charlesreis.com/research/publications/ccs-2011.pdf).
-
-### How it works
-
-A user designates a set of URLs to be be an "isolated site." This can be done
-either via an extension API or via chrome://settings/content (still to be
-flushed out).
-
-When you perform a top-level navigation to an isolated site, it will behave as
-if you are visiting it from a separate browser. Any state that would be used for
-browsing (cookie store, cache, localstorage, etc.) will not be shared with your
-normal browsing session. This includes any subresource loads, subframes, or
-javascript XHR calls. A dedicated renderer processes are used as well, so that
-any in-memory state is also isolated from your normal browsing session. This
-helps shield the isolated app from most known cross-origin attacks, from
-reflected XSS to full WebKit exploits.
-
-As an example, suppose you have designated http://isolatedsite.com to be
-isolated and that http://isolatedsite.com serves the following HTML:
-
-&lt;html&gt;&lt;body&gt;&lt;iframe
-src="http://thirdparty.com"&gt;&lt;/iframe&gt;&lt;/body&gt;&lt;/head&gt;
-
-During your browsing session, you directly visit http://thirdparty.com in a
-different tab and authenticate. Now Chrome has cookies for thirdparty.com in
-your general browsing session. However, within the isolated site, the
-http://thirdparty.com iframe on http://isolatedsite.com does not have access to
-those cookies, so you do not appear logged in. The iframe is loaded in the
-context of the isolated site, so it behaves as if it is on a different browser
-than your first tab. Conversely, any cookies set in the iframe inside the
-isolated site will remain attached only to the isolated site and not affect the
-state of the rest of the browser.
-
-### Requirements
-
-The browser process must create a partitioned view of the data based on the site
-that is requesting the data. This includes modifying at least the following
-objects to support partitioning the data:
-
-* Cookies and Cache (via URLRequestContext)
-* HTML5 Storage (via DomStorage)
-* IndexDB (via IndexDBContext)
-* Filesystem access (via FileSystemContext)
-* AppCache access (via AppCacheService)
-* QuotaManager access (via QuotaManager)
-* DatabaseTracker access (via DataBaseTracker)
-
-For now, we are aiming to partition this data on a per-process basis. This may
-require Chrome to create a larger number of processes (rather than sharing
-processes when a limit is reached), but it is simpler than modifying WebKit to
-handle multiple storage contexts within a single renderer process.
-
-### Current State
-
-Tracking bug here: <http://crbug.com/69335> (marked WontFix)
-
-Much of the state isolation infrastructure needed for this effort now exists in
-the StoragePartition class, which is used by Chrome's Platform Apps. Chrome no
-longer supports navigating from one StoragePartition to another, though, which
-would be necessary for this Isolated Sites proposal. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/java-resources-on-android/index.md b/chromium/docs/website/site/developers/design-documents/java-resources-on-android/index.md
deleted file mode 100644
index 3cc62b4f633..00000000000
--- a/chromium/docs/website/site/developers/design-documents/java-resources-on-android/index.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: java-resources-on-android
-title: Java Resources on Android
----
-
-### Overview
-
-Chrome for Android uses certain resources in Java code (e.g. Android layouts and
-associated strings or images). These resources are stored according to
-[Android's resource directory
-structure](http://developer.android.com/guide/topics/resources/providing-resources.html)
-within a Java root folder.
-
-* content/public/android/java/res - Java resources available within
- content and anything that depends on content
-* chrome/android/java/res - Java resources available within chrome and
- anything that depends on chrome
-* ui/android/java/res - Java resources available within ui and
- anything that depends on ui
-
-Java code can reference these resources in [the normal
-way](http://developer.android.com/guide/topics/resources/accessing-resources.html)
-using a generated R class, being sure to qualify it with the correct package
-name.
-
-<pre><code>
-// Use a resource from content
-setImageResource(<b>org.chromium.content.R</b>.drawable.globe_favicon);
-// Use a resource from chrome
-setContentView(<b>org.chromium.chrome.R</b>.layout.month_picker);
-</code></pre>
-
-### How resources are packaged
-
-While compiling the Java code in content, an R.java file is generated based on
-the Java resources in content. This R.java contains non-final constants and is
-used only while compiling content (and any non-APK target that depends on
-content) but is not included in the content jar.
-
-When building an APK target, such as content_shell_apk, resources are merged
-from content, any other dependencies, and from content shell itself. These
-merged resources are processed and included in the APK. Based on these
-resources, a new R.java is generated with the correct resource -&gt; ID
-mappings. This R.java is copied into the R packages needed by each dependency
-(e.g. org.chromium.content.R and org.chromium.content_shell.R), and all these
-copies are included in the APK.
-
-This process closely follows Android's handling of resources in [library
-projects](http://developer.android.com/tools/projects/index.html#LibraryProjects),
-where content and chrome are the "libraries", though we don't use the SDK to
-compile our "libraries". Hence some of the same
-[caveats](http://developer.android.com/tools/projects/index.html#considerations)
-apply. In particular, two resources with the same ID cannot coexist. The
-resource highest in the dependency chain (e.g. in content shell) will override
-the others (e.g. in content).
-
-### Supporting resources in gyp
-
-To add resources to another Java root folder, add the variables
-has_java_resources, R_package, and R_package_relpath to the gyp target that
-builds that Java code. For example:
-
-<pre><code>
-{
-  'target_name': 'content_java',
-  'type': 'none',
-  'dependencies': [ ... ],
-  'variables': {
-    'package_name': 'content',
-    'java_in_dir': '../content/public/android/java',
-    <b># Support Java resources in content</b>
-    <b>'has_java_resources': 1,</b>
-    <b>'R_package': 'org.chromium.content',</b>
-    <b>'R_package_relpath': 'org/chromium/content',</b>
-  },
-  'includes': [ '../build/java.gypi' ],
-},
-</code></pre> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/layered-components-design/index.md b/chromium/docs/website/site/developers/design-documents/layered-components-design/index.md
deleted file mode 100644
index bdc92464c28..00000000000
--- a/chromium/docs/website/site/developers/design-documents/layered-components-design/index.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: layered-components-design
-title: 'Layered Components: Design'
----
-
-## Overview
-
-Chrome for iOS cannot use the content layer as-is due to the restrictions that
-Apple places on third-party browsers on iOS. Given this fact, the goal of this
-project is to enable iOS’s usage of chrome- and component-level features that:
-
-* Minimizes pain on Chromium developers, both for iOS and for other
- platforms
-* Enables Chromium developers developing multi-platform features to
- target iOS as well
-
-To that end, we will be performing refactorings to introduce **layered
-components**: components that consist of shared code that is content-free
-together with a driver based on the content layer and an alternative driver for
-iOS that uses an iOS-specific API.
-
-## Motivation
-
-Apple restricts third-party iOS apps to using UIWebView as the
-JavaScript/rendering engine and additionally to being single-process. This fact
-means that Chrome for iOS:
-
-* Cannot use the existing content/ implementation, which is based on
- V8/Blink and is multiprocess.
-* Could provide at best a partial alternative implementation of the
- content API due to the black-box nature of UIWebView.
-
-As a result, iOS usage of chrome- and component-level features currently
-requires a sea of ifdef’s, code modifications, and code additions. Upstreaming
-this surgery would introduce maintainability and readability challenges.
-
-The fact that most Chromium developers have no visibility into iOS’s
-restrictions and requirements additionally causes a raised level of difficulty
-for developers looking to target feature work to iOS in addition to other
-platforms.
-
-## Layered Components
-
-Our approach to the challenges outlined above is to gradually **eliminate
-dependence on the content API in code that is used on iOS** (see the below
-background for discussion of alternative approaches and how we converged on this
-approach).
-In determining how to structure this approach within the codebase, we took the
-position that DEPS restrictions are easiest for developers to understand and
-introduce the least amount of maintainability pain when they are put within a
-recognizable structure. We will introduce **layered components**. These
-components will live in one of a small number of known locations within the
-source tree (e.g., src/components). Each such component will consist of the
-following:
-
-* A core/ subdirectory consisting of code shared by all platforms.
- This code cannot depend on content/, and will contain e.g. core
- model logic of the component.
-* An ios/ subdirectory that contains code that depends on an
- iOS-specific API and drives the shared code for iOS.
-* A content/ subdirectory that contains code that can depend on
- content/ and drives the shared code for all other platforms. For
- example, this subdirectory might contain a WebContentsObserver that
- invokes behavior of the shared code when a WebContents is destroyed.
-
-The technical details of our plan to realize this approach are detailed
-[here](/developers/design-documents/layered-components-technical-approach), and
-a detailed description of the proposed structure within the Chromium codebase is
-detailed
-[here](/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase).
-
-## FAQ
-
-* **Won’t creating this structure introduce extra layering in the
- affected features?** Inevitably it will. However, we have explicit
- goals of (a) minimizing added layering to reduce maintainability
- pain and (b) making decouplings as logical as possible (e.g.,
- decoupling model code from code interacting with the renderer via
- IPC). We plan to work together with feature owners to develop
- agreeable designs.
-* **What is this “iOS-specific API”?** It will be an API that will
- have a similar purpose as the content API (e.g., allow an object to
- know when a webpage has finished loading) but will be much smaller.
- In a sense, it will be a “content API around UIWebView.”
-* **Will there be a wrapper API around the content API and the iOS
- API?** Unknown at this time. The goal is to avoid such an API;
- however, if it turns out that having a thin wrapper API would
- greatly simplify the structure of multiple components, such an API
- might be introduced.
-* **Without a wrapper API, how will you possibly handle
- WebContents/NavigationController/BrowserContext/etc.?** These
- questions will have to be examined on a case-by-case basis. Starting
- from the position that we would like to avoid a wrapper API will
- enable isolating the cases (if any) where the lack of such a wrapper
- API causes significant pain.
-* **What if the shared code of a layered component needs to talk to
- its driver?** We expect that in general communication between the
- shared code of a layered component and its driver will be
- bi-directional. Communication from the shared code to a driver will
- be done via classes that the shared code declares and drivers define
- (the exact fashion in which this will be done will likely have to be
- approached on a case-by-case basis with the goal of minimizing
- boilerplate/code duplication).
-* **Will this work make the Chromium codebase less maintainable as a
- whole?** While the primary motivation of this project is to enable
- upstream code/features to be shared by (and developed for) iOS in
- the most maintainable way, we see several other potential benefits
- that are independent of iOS:
- * Mitigate the monolithic nature of chrome/browser
- * Enable simpler unit testing of the code that will be shared
- * Perform refactorings that increase understandability of the
- impacted features
-* **How large is the scope of this project?** Of the ~80 directories
- under chrome/browser, iOS uses ~30.
-* **I think that approach &lt;X&gt; would be better!** We welcome
- feedback and discussion; please read the background section below as
- context.
-
-## Background: iOS and the Content API
-
-We have examined several approaches to iOS’s usage of content:
-
-1. iOS uses all the parts of the content API that it needs/can support,
- providing alternative partial implementations of interfaces for
- which it cannot share the existing full-fledged implementation
- (e.g., WebContents).
-2. iOS uses only the parts of the content API for which it can share
- the implementations, refactoring the Chromium codebase to remove and
- disallow usage of problematic parts of the content API (e.g.,
- WebContents) in shared code.
-3. iOS does not use the content API (the approach that we ultimately
- decided on).
-
-The conclusion re: Approach 1 was that the fact that iOS would only be able to
-provide a partial implementation of the content API would make it more
-challenging for developers to develop against the API: they would have to always
-be aware of (a) whether the given piece of code that they were working on was
-shared on iOS, and (b) which subsets of the content API were OK to use in code
-shared on iOS.
-The conclusion re: approach 2 was similar to that re: approach 1, with the added
-concern that performing somewhat arbitrary-looking refactorings throughout the
-codebase would introduce maintainability and readability problems (initial CLs
-targeting this approach bore out these fears).
-
-## Contact
-
-Stuart Morgan (stuartmorgan@) and Colin Blundell (blundell@) are the leads on
-this project. Darin Fisher (darin@) and John Abd-El-Malek (jam@) are providing
-guidance, direction and approval. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/index.md b/chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/index.md
deleted file mode 100644
index aa79a2ef2d3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/index.md
+++ /dev/null
@@ -1,187 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: layered-components-technical-approach
-title: 'Layered Components: Technical Approach'
----
-
-This document assumes that the reader has read the [high-level
-design](http://www.chromium.org/developers/design-documents/layered-components-design)
-of layered components, and presents strategies for realizing that design.
-
-# Choosing Features to Refactor
-
-We will aim to tackle simpler “leaf” features first. By tackling these features
-first, we can wrestle with the basic issues and establish basic
-structure/patterns in a simpler context. As we move to more complex features,
-the extra complexities that they introduce will thus be easier to isolate and
-focus on.
-
-# Dealing with Upstreaming’s Incremental Nature
-
-For the foreseeable future, Chrome for iOS will be in a state where some code is
-upstream and some code is downstream. This fact creates two challenges:
-
- Upstream code needs to call code that is not yet upstreamed. This case might
- occur because of challenging dependency chains that need to be addressed
- incrementally.
-
- Not-yet-upstreamed code calls code that is upstream. This case causes
- problems because it makes Chrome for iOS vulnerable to bustage during
- merges.
-
-The first case will be handled by introducing an API that allows the downstream
-codebase to inject functionality into upstream features via embedder objects
-(precisely following the example of ContentClient and friends).
-
-The second case will be handled by introducing an API via which downstream iOS
-code consumes upstream Chromium code. This “consumer API” will live upstream in
-directories that are owned by iOS engineers together with unittests of the API
-that specify the expected semantics. Thus, downstream usage of these APIs will
-be visible to all Chromium engineers (likely there will be a policy of TBR’ing
-an API OWNER on a change of a consumer API implementation but getting a full
-review from an OWNER on a change of a consumer API definition).
-
-# Refactoring a Feature
-
- Reach out to the feature owner(s) to make them aware that we are tackling
- this feature.
-
- They should already have the general context as we will have publicized
- the project on chromium.org/chromium-dev.
-
- Move the feature to its desired final location and lock down DEPS rules on
- it (put in the desired DEPS restrictions and then allow inclusions of all
- existing violations, together with a note to talk to one of us before adding
- to the list) in order to stop the bleeding on the feature while we work on
- it.
-
- Gain sufficient expertise in the feature to develop a design for refactoring
-
- Discussion with feature owners
-
- Strong desire against designs that require introducing ifdef’ing
-
- Strong desire against designs that require wrapper API around content
- layer and iOS embed layer
-
- Note that the two above points might well come into conflict at
- times, wherein consultation with darin@ and jam@ will likely be in
- order to decide on best way of proceeding
-
- Iterate on the design with feature owners
-
- If there are aspects of debate (e.g., the feature owner thinks that
- having some ifdef’s would be better than introducing a new layer, or it
- seems that introducing a specific wrapper api around content would
- greatly simplify the structure), bring in darin@/jam@ for discussion
-
- Turn the finalized feature-level design into CLs
-
- Once the feature is in its final form, introduce iOS consumer API around
- downstream usage of the feature to prevent downstream bustage while
- upstreaming of the clients of the feature is still ongoing
-
-# Approaches to Challenges Encountered During Refactoring
-
-### Laying the Groundwork via a Driver
-
-Most features both receive incoming information from the content layer (e.g.,
-IPC or notifications) and send out information to or query the content layer
-(e.g., sending IPC, asking BrowserContext if it is off the record). To enable
-abstracting these interactions, the general pattern is to introduce a FooDriver
-interface. This interface will live in the core code of the component, and an
-instance of it will be injected into this core code on instantiation. The
-content-based and iOS drivers of the component will each have a concrete
-subclass of the FooDriver interface.
-
-Example: <https://codereview.chromium.org/16286020/>
-
-### Abstracting WebContentsObserver
-
-You can make the content-based FooDriver implementation be a
-WebContentsObserver. This class can contain references to the core classes that
-were previously themselves WebContentsObservers and call (potentially new)
-appropriate public APIs that those core classes expose in response to observing
-events on the given WebContents.
-
-Example: <https://codereview.chromium.org/16286020/>
-
-The iOS FooDriver implementation, by contrast, can observe WebState (iOS's
-equivalent to WebContents).
-
-**### Abstracting WebContentsUserData**
-
-The content-based FooDriver implementation can itself be a WebContentsUserData,
-and can own the core classes that were previously themselves WebContentsUserData
-objects. Thus, the lifetime of these core classes will still be scoped to the
-lifetime of the WebContents.
-
-Example: <https://codereview.chromium.org/17225008/>
-
-The iOS FooDriver implementation, by contrast, can be a WebStateUserData.
-
-### Abstracting Listening to Notifications and IPC Reception
-
-The approach to these is similar to that for WebContentsObserver: have the
-content-based FooDriver implementation listen for the notifications/IPC, and
-then invoke appropriate calls on the core classes (potentially creating new
-public APIs on these core classes in order to do so).
-
-Example of abstracting listening for notifications:
-<https://codereview.chromium.org/17893010/>
-
-Example of abstracting IPC reception:
-<https://codereview.chromium.org/17382007/>
-
-The iOS implementation of the feature will likely just call the new public APIs
-on the core classes directly.
-
-### Abstracting IPC Sending
-
-Expose methods on the FooDriver interface that the core code can call where it
-was previously directly sending IPC. The content-based FooDriver implementation
-will implement these calls by sending IPC.
-
-Example: <https://codereview.chromium.org/17572015/>
-
-The iOS FooDriver will implement these methods via an iOS-specific flow.
-
-**# General Strategies to Consider When Doing Refactoring**
-
- **If a class Foo gets a WebContents via a callback to another class (e.g.,
- FooDelegate-&gt;GetWebContents()), consider just having FooDelegate expose
- the API from WebContents that Foo uses. FooDelegate will likely already have
- (or be made to have) platform-specific implementations.**
-
- **To minimize duplication of header files, consider avoiding subclassing:
- Instead of having an interface FooDelegate.h with e.g. a content
- implementation FooDelegateContentImpl.h and FooDelegateContentImpl.cc, just
- have FooDelegate.h declare the concrete class and then have
- FoodDelegateContent.cc and FooDelegateIOS.cc.**
-
- **One question this raises is of declaring platform-specific variables
- in FooDelegate.h. This problem can of course be solved by if-defing, but
- we are looking to avoid if-defing in almost all cases. In some cases, it
- can be solved without ifdefing by the [Pimpl
- paradigm](http://en.wikipedia.org/wiki/Opaque_pointer).**
-
- **Alternative to introducing a wrapper API around the content layer and the
- iOS embed layer would be introducing typedef’s**
-
- **This would be a usage of ifdef’s but would be contained to a single
- location**
-
- **Difficult case arises when shared classes currently take in a WebContents
- instance (or similarly problematic class) in their constructor. These are
- the cases where we’ll have to consider very carefully to devise solutions
- that avoid the need for either a wrapper API or ifdef’ing. To put it a
- different way, if we have to introduce either a wrapper API or ifdef’ing, it
- will likely be due to these kinds of cases.**
-
-**# Case Studies / Examples to Follow**
-
-* [components/autofill](/developers/design-documents/layered-components-technical-approach/making-autofill-into-a-layered-component) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/making-autofill-into-a-layered-component/index.md b/chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/making-autofill-into-a-layered-component/index.md
deleted file mode 100644
index 88ca6e31da2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/layered-components-technical-approach/making-autofill-into-a-layered-component/index.md
+++ /dev/null
@@ -1,158 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/layered-components-technical-approach
- - 'Layered Components: Technical Approach'
-page_name: making-autofill-into-a-layered-component
-title: Making Autofill Into a Layered Component
----
-
-[TOC]
-
-## Objective
-
-Restructure `components/autofill` into a [layered
-component](/developers/design-documents/layered-components-design) in order to
-enable iOS to cleanly share code in `components/autofill/browser` and
-`components/autofill/common`. Concretely, eliminate usage of the content layer
-from `components/autofill` code that iOS wishes to share (for details on why iOS
-will not be using the content layer, see the motivation and background sections
-of the layered components [design
-document](/developers/design-documents/layered-components-design)).
-
-## Analysis
-
-On the browser side, Autofill's usage of the content layer falls into several
-broad categories:
-
-* **Receiving communication from the renderer/external world.**
- * Observing WebContents
- * Receiving IPC
- * Listening for notifications
-* **Communicating to the renderer via IPC.**
-* **Querying the external world for information.**
- * e.g., asking BrowserContext whether it is off-the-record
- * e.g., getting the values of UserPrefs
-* **Convenience usages**
- * The FormData struct has a content::SSLStatus field
- * AutofillManager uses a constant defined in the content layer to
- reference HTTPS scheme
-
-## Plan
-
-* **Introduce AutofillDriver interface to abstract communication from
- autofill core code to the renderer**
- * **Features:**
- * Interface declared in shared browser code
- * Content-based implementation will use IPC to communicate to
- the renderer
- * iOS-based implementation will forward calls directly to iOS
- autofill UI implementation
- * **Content-based: AutofillDriverImpl class that will live in
- autofill's content driver and handle communication from the
- renderer/external world**
- * Will implement the AutofillDriver interface
- * Will be a WebContentsObserver, using observations to drive
- flow of the shared browser code
- * Will be a WebContentsUserData, providing access to per-tab
- instances of shared browser classes
- * Will receive IPC, transforming the received messages into
- method calls on shared browser code
- * Will listen for notifications, transforming them into method
- calls on shared browser code
- * **iOS-based: Introduce a conceptually-similar AutofillDriverIOS
- class that will live in autofill's iOS driver**
-* **Extend AutofillDriver interface to supply the information that
- shared code needs from the external world**
- * New interfaces will replace direct calls that the shared code
- makes on the content API (e.g., to BrowserContext)
- * Content-based implementation will back these interfaces by
- content layer objects
- * iOS implementation will back these interfaces by iOS web layer
- objects
-* **Eliminate convenience usages on a case-by-case basis**
- * e.g., for SSLStatus, determine exactly what SSL information
- FormData needs and have FormData maintain just that information
-
-## Status
-
-* Put autofill/components into the structure of a layered component
- with temporary DEPS allowances for violations (and a comment
- instructing devs not to add any more allowances) **\[DONE\]**
- * Completed over a progression of several CLs
- * CL finishing the move and introducing DEPS restrictions with
- temporary allowances:
- <https://chromiumcodereview.appspot.com/17392006>
-* [Introduce the AutofillDriver
- interface](https://codereview.chromium.org/16286020/) **\[DONE\]**
-* Introduce the content-based AutofillDriverImpl class and
- incrementally expand it to:
- * [Abstract WebContentsObserver from shared
- code](https://codereview.chromium.org/16286020/) **\[DONE\]**
- * [Abstract WebContentsUserData from shared
- code](https://codereview.chromium.org/17225008/) **\[DONE\]**
- * [Abstract listening for notifications from shared
- code](https://codereview.chromium.org/17893010/) **\[DONE\]**
- * [Abstract IPC reception from shared
- code](https://codereview.chromium.org/17382007/) **\[DONE\]**
-* Extend the AutofillDriver interface to abstract sending IPC from
- autofill core code **\[STARTED\]**
- * <https://codereview.chromium.org/17572015/>
- * <https://codereview.chromium.org/18563002/>
- * Several other CLs, similar in nature
-* Introduce the AutofillDriverIOS class **\[NOT STARTED\]**
-* Eliminate convenience usages of the content layer **\[DONE\]**
-* Abstract BrowserContext usage **\[DONE\]**
- * Several CLs, see tracking
- [bug](https://code.google.com/p/chromium/issues/detail?id=303034)
- * Example
- [CL](https://code.google.com/p/chromium/issues/detail?id=303047)
- abstracting BrowserContext::IsOffTheRecord()
-* Abstract BrowserThread usage **\[DONE\]**
- * Several CLs, see tracking
- [bug](https://code.google.com/p/chromium/issues/detail?id=303009)
- * Example [CL](https://codereview.chromium.org/25783002)
-* [Build Autofill core code and component-level unittests on
- iOS](https://codereview.chromium.org/108013004) **\[DONE\]**
-* Change all Autofill core unittests to be component-level unittests
- **\[NOT STARTED\]**
-
-## Help! How Do I Get My Autofill-Related Work Done?
-
-The intended audience of this section is engineers working on
-components/autofill, and its purpose is to answer questions of the form "I need
-to do Foo, but I can't do it via Bar anymore! What do I do?".
-
-* **How do I get an AutofillManager instance/AutofillExternalDelegate
- instance from a WebContents instance?** Get the AutofillDriver
- instance (which is a WebContentsUserData) from the WebContents and
- then call the relevant accessor of AutofillDriver.
-* **How do I take some action in shared code based on a new IPC
- message/WebContents observation/notification?** Add a new method(s)
- as appropriate in shared code to implement the desired behavior;
- then have AutofillDriver listen for the IPC/observation/notification
- and invoke the new flow in shared code as appropriate.
-* **Where are the common/ and browser/ directories under autofill/?**
- Code that is shared with iOS has been moved to `autofill/core/`;
- code that is not shared with iOS has been moved to
- `autofill/content/`.
-* **I need to use the content layer in foo.cc, but I'm getting a DEPS
- violation when I try to upload!** The reason for the DEPS violation
- is that foo.cc is used on iOS and thus cannot use the content layer
- directly. See if you can implement your desired flow via one of the
- suggestions earlier in this set of questions. If not, consider
- whether the information that you need to obtain from the content
- layer can be done by extending one of the existing delegate
- interfaces via which shared code obtains information indirectly from
- the content layer. If all else fails, contact blundell@chromium.org
- to assist.
-* **I want to add a new browser-side file; where should I put it?** It
- depends on whether you think that the functionality of the file
- should be shared on iOS. If so, put it in `autofill/core/browser`,
- in which case it cannot reference the content layer directly.
- Otherwise, put it under `autofill/content/browser/`, in which case
- it can freely reference the content layer. In cases of doubt, feel
- free to contact blundell@chromium.org or stuartmorgan@chromium.org. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/layout-tests-results-dashboard/index.md b/chromium/docs/website/site/developers/design-documents/layout-tests-results-dashboard/index.md
deleted file mode 100644
index f7d49503309..00000000000
--- a/chromium/docs/website/site/developers/design-documents/layout-tests-results-dashboard/index.md
+++ /dev/null
@@ -1,391 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: layout-tests-results-dashboard
-title: Tests Results Dashboard
----
-
-WARNING: THIS DOCUMENT IS FAIRLY STALE.
-
-This is a mini-design doc for the test dashboard at
-<http://test-results.appspot.com/dashboards/flakiness_dashboard.html>. This
-dashboard helps identify flaky tests and compare test expectations across
-platforms, including upstream webkit.org's expectations. It currently supports
-webkit tests and gtest tests.
-
-The dashboard itself consists of flakiness_dashboard.html and
-dashboard/dashboard_base.js. In order to minimize maintenance cost, there is no
-server-side logic. Instead the dashboard grabs JSONP files from each builder.
-Each builder creates and archives two JSON files that it updates with each run's
-results. There is one results.json file per builder that holds the results for
-**all** runs and there is an expectations.json file that translates
-src/webkit/tools/layout_tests/text_expectations.txt into JSON that the dashboard
-can parse. The expectations.json files will be the same on all the bots, so the
-dashboard can grab it from any of them.
-
-The JSON files are created by run_webkit_tests.py. It stores them at the top
-level of the layout test results directory (same place as results.html). On each
-run, it reads in the results.json file from that location, adds the results from
-the current run and writes it out again. If it does not exist locally (e.g. if
-the layout test results directory was deleted), then it grabs it off the archive
-location on the bot. Once both JSON files have been written, they are both
-copied to the archive location for the layout test results so that they can be
-accessed via http from the dashboard.
-
-Once all the JSON files have loaded, the dashboard does a bunch of processing on
-them and generates the HTML for the page, which is mostly then innerHTMLed. The
-results.json file also has a bunch of data that is counts of failing tests that
-is used in the [test progress
-dashboard](http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/layout_tests/dashboards/aggregate_results.html).
-For the purposes of the flakiness dashboard, they can just be excluded from the
-JSON. If they are included, then the layout test progress dashboard would work
-as well.
-
-The dashboard stores all the relevant state in the URL's hash and uses
-hashchange events to detect changes. Thus it only works in browsers that support
-the hashchange event.
-
-**Changes needed in order to add upstream webkit.org**
-
-1. output results.json and expectations.json per builder. See the two
- notes below marked "For upstream webkit.org".
-2. Add useUpstreamWebkit. It should mimic what useWebKitCanary does
- (primarily it just adds a new builders array).
-3. getPlatformAndBuildType: Needs to be modified to understand any new
- mapping from builderName to platform/buildType
-4. Consider excluding bugs, modifiers, expectations, missing and extra
- columns from the dashboard since upstream webkit doesn't have a
- test_expectations.txt file.
-
-See the webkit bug for progress on making the dashboard work for the webkit
-bots: <https://bugs.webkit.org/show_bug.cgi?id=32954>.
-
-#### JSON file size optimizations
-
-If we store information about every test on every run, the JSON files quickly
-become many megabytes large. In order to keep the size manageable we do the
-following:
-
-* The number of runs stored is hard-coded at 750.
-* Any test that has passed for all runs and takes less than 1 second
- to run for all those runs is dropped from the JSON.
-* The data for failures/speed of each test result is run-length
- encoded.
-* Strip all unnecessary whitespace.
-
-#### **Incremental updates of JSON files**
-
-Currently the JSON files are generated and updated locally, then they are
-uploaded to the archive location (test-results.appspot.com). In order to improve
-performance and make it so that the bots don't rely on local state, we will
-create a local JSON file with just the incremental updates. That JSON file will
-then be uploaded to the appengine server, which will **merge** it with the
-stored JSON file. In that case, the logic of truncating to 750 runs will be in
-the appengine server.
-
-The JSON format for an incremental update is exactly the same as that of the
-stored JSON file. The only catch in doing the merge is that the runs being
-merged in may not be uploaded in order (e.g. if we have multiple builders
-processing separate runs). So the merge function must take care to look at the
-buildNumbers array and merge the values in correctly.
-
-### JSON file formats
-
-#### The order of all arrays is from newest run to oldest run. In other words, the results from each run are prepended to the existing results.json file's contents.
-
-#### results.json
-
-ADD_RESULTS({
-
-"version": NUMBER,
-
-"BUILDER_NAME": {
-
-"wontfixCounts": FAILURE_COUNTS,
-
-"deferredCounts": FAILURE_COUNTS,
-
-"fixableCounts": FAILURE_COUNTS,
-
-"fixableCount": ARRAY_OF_NUMBERS,
-
-"allFixableCount": ARRAY_OF_NUMBERS,
-
-"buildNumbers": ARRAY_OF_NUMBERS,
-
-"webkitRevision": ARRAY_OF_NUMBERS,
-
-"chromeRevision": ARRAY_OF_NUMBERS,
-
-"secondsSinceEpoch": ARRAY_OF_NUMBERS,
-
-"tests": {
-
-"TEST": {
-
-"results": RUN_LENGTH_ENCODED_RESULTS,
-
-"times": RUN_LENGTH_ENCODED_RESULTS
-
-},
-
-...
-
-}
-
-}
-
-});
-
-BUILDER_NAME: Name of the builder the tests were run on (e.g. Webkit Mac10.5).
-TEST: Relative path to the test, e.g. "LayoutTests/fast/foo/bar.html".
-TODO(ojan): Exclude the LayoutTests prefix now that all layout tests live in
-that directory.
-
-FAILURE_COUNTS: Array of objects mapping single-char failure type to number of
-failures of that type. The mapping from single-char failure type to the
-human-readable string used in expectations.json is held in EXPECTATIONS_MAP in
-dashaboard_base.js.
-
-ARRAY_OF_NUMBERS: An array of numbers.
-
-RUN_LENGTH_ENCODED_RESULTS: An array of RUN_LENGTH_VALUEs.
-
-RUN_LENGTH_VALUE: An array with exactly two items. The first item is the number
-of runs that this value represents. The second item is the value of the result
-for that run. The values used for the results are in dashboard_base.js as
-EXPECTATIONS_MAP. If a test is listed in results.json, but was not run during
-this run for some reason (e.g. it's skipped), then the 'N' value is used for
-that run to indicate we have no data for that test for that run. There's a copy
-below for reference:
-
-var EXPECTATIONS_MAP = { 'T': 'TIMEOUT', 'C': 'CRASH', 'P': 'PASS', 'F': 'TEXT',
-'I': 'IMAGE', 'Z': 'IMAGE+TEXT', // We used to glob a bunch of expectations into
-"O" as OTHER. Expectations // are more precise now though and it just means
-MISSING. 'O': 'MISSING', 'N': 'NO DATA', 'X': 'SKIP' };
-
-version: The version of the JSON format that we're using. This is so we can make
-backwards-incompatible changes and know to upgrade the JSON data appropriately.
-Currently just hard-coded to 1.
-
-wontfixCounts: Number of tests marked WONTFIX broken down by type of failure
-that actually occurred.
-
-deferredCounts: Number of tests marked DEFER broken down by type of failure that
-actually occurred.
-
-fixableCounts: Number of tests in test_expectations.txt not marked DEFER/WONTFIX
-broken down by type of failure that actually occurred.
-
-fixableCount: Number of tests not marked DEFER/WONTFIX that failed.
-
-allFixableCount: Number of tests we not marked DEFER/WONTFIX (includes expected
-passes and failures)
-
-buildNumbers: The build number for this run on the bot.
-
-webkitRevision: The revision of webkit being used.
-
-chromeRevision: The revision of chorme being used.
-
-secondsSinceEpoch: Number of seconds since the epoch (time.time() in python)
-
-TODO(ojan): Track V8/Skia revision numbers as well so we can better track
-regressions from V8/Skia.
-
-**For upstream webkit.org** results we can exclude chromeRevision and all the
-count/Counts values. The latter are not meaningful if failing tests are skipped.
-If that ever changes, then we can change upstream to include these numbers and
-we can track number of failures over time.
-
-Sample results.json:
-
-ADD_RESULTS({
-
-"Webkit Mac10.5": {
-
-"wontfixCounts": \[
-
-{
-
-"C": 0,
-
-"F": 105,
-
-"I": 2,
-
-"O": 0,
-
-"T": 1,
-
-"X": 33,
-
-"Z": 11
-
-}
-
-\],
-
-"fixableCounts": \[
-
-{
-
-"C": 2,
-
-"F": 136,
-
-"I": 725,
-
-"O": 1,
-
-"T": 15,
-
-"X": 8665,
-
-"Z": 25
-
-}
-
-\],
-
-"tests": {
-
-"LayoutTests/fast/frames/viewsource-attribute.html": {
-
-"results": \[
-
-\[
-
-751,
-
-"I"
-
-\]
-
-\],
-
-"times": \[
-
-\[
-
-741,
-
-0
-
-\],
-
-\[
-
-10,
-
-2
-
-\]
-
-\]
-
-}
-
-},
-
-"secondsSinceEpoch": \[
-
-1259810345
-
-\],
-
-"fixableCount": \[
-
-904
-
-\],
-
-"allFixableCount": \[
-
-9598
-
-\],
-
-"buildNumbers": \[
-
-"7279"
-
-\],
-
-"webkitRevision": \[
-
-"51615"
-
-\],
-
-"deferredCounts": \[
-
-{
-
-"C": 0,
-
-"F": 56,
-
-"I": 0,
-
-"O": 0,
-
-"T": 0,
-
-"X": 7,
-
-"Z": 0
-
-}
-
-\],
-
-"chromeRevision": \[
-
-"33659"
-
-\]
-
-},
-
-"version": 1
-
-}
-
-expectations.json
-
-ADD_EXPECTATIONS({
-
-"TEST": \[ MODIFIERS_AND_EXPECTATIONS, MODIFIERS_AND_EXPECTATIONS, ... \],
-
-"TEST": \[ MODIFIERS_AND_EXPECTATIONS \]
-
-});
-
-TEST: Same as above in results.json.
-
-MODIFERS_AND_EXPECTATIONS: object of the following form { "modifiers":
-MODIFIERS, "expectations": EXPECTATIONS }
-
-MODIFIERS: Space separated string of modifiers. This includes bug numbers
-(BUG1234), platforms (LINUX, MAC, etc), build types (debug, release), SKIP,
-DEFER, WONTFIX and SLOW.
-
-EXPECTATIONS: The expected results for this test. TIMEOUT, TEXT, IMAGE, PASS,
-etc.
-
-**For upstream webkit.org**, we should probably make an expectations file that
-parses all the SKIPPED lists and creates the appropriate expectations file.
-Something like:
-
-ADD_EXPECTATIONS({
-
-"foo/bar/baz.html", \[ {"modifiers": "SKIP LINUX", "expectations": ""},
-{"modifiers": "SKIP WIN", "expectations": ""} \],
-
-...
-
-}); \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md b/chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md
deleted file mode 100644
index d177a850633..00000000000
--- a/chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md
+++ /dev/null
@@ -1,100 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: linuxresourcesandlocalizedstrings
-title: LinuxResourcesAndLocalizedStrings
----
-
-Resources (and localized strings) on Linux
-**Goals**
-Find a way to load binary data blobs and localized strings on linux. It's not an
-explicit goal for us to provide a solution for OSX, but a cross platform
-solution would be preferred.
-**Background**
-On Windows, we store resources in dll files. They are compiled into dll files
-using Visual Studio's resource compiler (rc.exe) which read .rc files. .rc files
-are just lists of resource ids and the actual file on disk that they represent
-or an inlined string (for translations). From code we reference the resource
-using the resource ids which are found in a header file. For localized strings,
-we use GRIT to generate the .rc files.
-Most resources are compiled directly into chrome.dll. There are two exceptions:
-theme images are in theme.dll and languages are in locale specific dlls (e.g.,
-en-US.dll). Having a separate theme.dll was to make it easier to transition to a
-real theming system and to make it easier for UI developers to test changes to
-the theme (by not having to re-link chrome.dll). Locale data is in a separate
-dll because we would like to reduce the chrome download size by providing
-localized builds of chrome. One would only need to download the strings for
-languages that are of interest. This doesn't save much in download right now,
-but if ICU data files could be split into chunks, then it could save &gt; 1mb of
-download.
-On Linux, data resources are normally just kept as files on disk that are read
-during runtime. The location of these resources are normally hard-coded into the
-binary at compile time. Localized strings are normally handled using gettext.
-From code, gettext uses the English string to reference the localized string.
-gettext has another interface called catgets which can be used to reference
-strings using a resource id. This is pretty similar to what we do on Windows.
-**Requirements**
-The standard Linux method of reading data resources from disk seems like a
-non-starter because we use lots of small image files to create the Chromium UI.
-We could possibly work around this by image spriting, but we would still read
-more files from disk that windows currently is. Also, while catgets might be a
-good solution for localized strings, it doesn't handle binary data.
-**Design Ideas**
-Roll our own resource handling. This would involve a disk format for data
-resources and strings, and code to load the file and read ranges of bytes from
-the file. To create the disk format, we would use a python script that reads the
-.rc files at compile time and generates our data file. This would be similar to
-the Visual Studio resource compiler except it wouldn't be able to put data
-directly into the dll (shared object). The code to load the file and read a
-range of bytes would exist in base so we can load data resources (like the tld
-data file) in sub module tests.
-The main drawback is that we won't be able to bundle binary data blobs directly
-into the chrome binary. We currently do this for everything other than the theme
-images and localized strings. Putting the data directly into chrome makes it
-easier for the renderer process to access resources because it doesn't have to
-go to disk. To work around this, on linux we would have to load the data
-resource in the renderer process before sandboxing it. This is similar to what
-we already do for localized resources in the renderer process.
-This has the benefit that we don't need to maintain different resource file
-definitions across platforms, it would be sufficient to update the main .rc
-file. We also don't have to change any of the callers or the current use of
-resource IDs throughout the code base. We just need to change ResourceBundle to
-handle the new data file.
-This would also work cross platform, so we may eventually be able to move
-Windows over to it so we all use the same system.
-Data File Format version 4
-uint32 file version
-uint32 number of resources in the file
-uint8 encoding of the text resources in the file
-&lt;uint16 resource id, uint32 file offset&gt;\*
-two zero bytes, uint32 end of last file
-&lt;resource data&gt;\*
-Unsigned ints will be little endian byte order and strings will be encoded in
-conformity to the encoding field. Valid encodings correspond to the following
-values:
-0 -&gt; Binary: PAK file is not expected to contain any text resources.
-1 -&gt; UTF8: PAK file may contain binary data, but all text resources are
-encoded in UTF8.
-2 -&gt; UTF16: PAK file may contain binary data, but all text resources are
-encoded in UTF16.
-The length of each resource can be computed by subtracting from the start of the
-next resource. To aid in computing the last resource, we include an extra index
-entry with the resource id set to zero.
-**Other Ideas**
-Leave everything in code.
-This would work for data blobs, but it doesn't match the current method of
-having a separate dll per locale. We could possibly put all the locale strings
-into chrome.dll, but this would require more work for indexing the values
-properly (i.e., GRIT would no longer work). It would also make it harder to
-transition to a single language download.
-Leave everything in code, but in .so files (dlls)
-Each data resource would become a .c file which we compile into a single .so.
-This is very similar to the current approach on Windows and would allow us to
-embed data resources into the main chrome.so. This might also be a bit faster to
-load because it doesn't have to parse the data file index. The only drawback to
-this approach is that it loads data as code. On Windows, you can load a dll with
-LoadLibraryEx(LOAD_AS_DATAFILE) which prevents code execution in the case of a
-corrupt file. I don't know of a way to do something similar on Linux. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/mac-occlusion/index.md b/chromium/docs/website/site/developers/design-documents/mac-occlusion/index.md
deleted file mode 100644
index 8fe453724f9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/mac-occlusion/index.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: mac-occlusion
-title: Mac Window Occlusion API Use
----
-
-On Mac, a NSWindow can check to see if it is visible to the user (that is, check
-to see if it is not covered by other windows, or on another desktop). This
-document discusses how this feature can be used to save power.
-
-**==Visible and Hidden on RenderWidget and RenderWidgetHostView==**
-
-There are two separate pieces of state that are currently conflated (they are
-always kept in lock-step), which need to be decoupled for this feature.
-
-**RenderWidget::SetHidden**
-
-This is in the renderer process. It is controlled through calling
-RenderWidgetHostImpl::WasHidden/WasShown, which sends a ViewMsg_WasHidden/Shown
-IPC down to the renderer. This will make the renderer process stop producing
-frames, and free up some resources. This state is entered when a tab is
-backgrounded.
-
-This is the state that is queried by the Javascript Page Visibility API. See the
-example at
-http://ie.microsoft.com/TEStdrive/Performance/PageVisibility/Default.html
-
-Of note is that on Safari, unlike Chrome (for now), the Page Visibility API
-indicates that the page is hidden when it is occluded. We should match this
-behavior.
-
-Also of note is that when a page has a frame subscriber (for tab capture), the
-renderer must always be in the visible state, not the hidden state.
-
-**RenderWidgetHostView::Show/Hide and
-RenderWidgetHostViewBase::WasShown/WasHidden**
-
-These functions control if the RenderWidgetHostViewCocoa (the NSView
-corresponding to the RenderWidgetHostViewMac) is actually visible on-screen. It
-is possible (and does happen) that there are multiple RenderWidgetHostViewCocoas
-attached to the same NSWindow, and which one is visible is controlled by this
-Show/Hide method.
-
-It is these functions that call RenderWidgetHostImpl::WasHidden/Shown, which, in
-turn, tells the renderer what is happening, keeping this state in lock-step with
-the RenderWidget.
-
-These functions are called by WebContentsImpl::WasShown/WasHidden.
-
-**Relationship with Tab Capture**
-
-When a WebContentsImpl starts capturing, the active capture will (sometimes,
-hopefully) prevent WebContents::WasHidden from being called.
-
-This is done by the WebContents::should_normally_be_visible() flag, which all
-callers to WebContents::WasHidden need to check (very brittle).
-
-This is also accomplished by having WebContentsImpl::DecrementCapturerCount
-potentially call WasHidden when the last capturer goes away.
-
-**==Problems With This Situation for Occlusion==**
-
-When a Chrome window is occluded, we will want the RenderWidget in the renderer
-process to be told that it is hidden (this will cause it to drop its resources
-and to indicate this to Javascript), but we do not want the the NSView for the
-RenderWidgetHostView to be hidden (because we want it to be immediately visible
-when the window is un-covered).
-
-This combination of state, where the RenderWidget is not visible, but the
-RenderWidgetHostView is visible, is not currently supported.
-
-**==Proposed Changes==**
-
-We should divorce the ideas of the RenderWidgetHostView being visible from the
-RenderWidget being visible. When doing tab capture, it is necessary that the
-RenderWidget be visible, but the RenderWidgetHostView should be capable of being
-hidden.
-
-At present, the relevant interface between WebContentsImpl and
-RenderWidgetHostView is through WebContentsImpl calling
-RenderWidgetHostView::Show/Hide.
-
-This interface can be changed in two ways.
-
-**Proposal A (not favored):**
-
-Split this interface into RenderWidgetHostView::CaptureWasStarted/Stopped and
-RenderWidgetHostView::Show/**ShowOccluded**/Hide.
-
-From there, it will be up to the various RenderWidgetHostViews implementations
-to decide if they want to conflate these, and how it wants to separate them out.
-
-**Proposal B (favored):**
-
-Split this interface into RenderWidgetHostView::ShowWidget/HideWidget and
-RenderWidgetHostView::Show/Hide.
-
-In this version, WebContentsImpl takes care of the logic to determine, based on
-the view state and the capture state, if the RenderWidget should be visible or
-hidden. The RenderWidgetHostView, meanwhile, can add optimizations to
-partially-deactivate the view if it knows that the RenderWidget has been hidden
-(and therefore won't be updating its content often). It's not clear if a
-ShowOccluded function is very useful here (occluded state can be inferred from
-the RenderWidget being hidden but the view being visible), but the possibility
-shouldn't be excluded.
-
-**New Configurations**
-
-For situations where tab capture is enabled, but the tab being captured is
-backgrounded, the RenderWidget will be visible, but the RenderWidgetHostView
-will not be.
-
-For situations where the window is occluded, the RenderWidget will not be
-visible, but the RenderWidgetHostView will be. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/mac-plugins/index.md b/chromium/docs/website/site/developers/design-documents/mac-plugins/index.md
deleted file mode 100644
index cdb71dad489..00000000000
--- a/chromium/docs/website/site/developers/design-documents/mac-plugins/index.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: mac-plugins
-title: Mac Plugins
----
-
-## Overview
-
-This document provides an overview of the Mac-specific aspects of implementation
-of Chromium’s plugin hosting. Except where noted, Chromium for Mac uses the same
-[overall architecture](/developers/design-documents/plugin-architecture) as
-Windows and Linux.
-
-## Platform API Handling
-
-Much of the complexity of the Mac plugin host implementation is in the drawing
-and event handling discussed below. There are a few specific areas common to all
-of them, relating to certain platform APIs that would not work correctly without
-special handling. Use of platform APIs in plugin is discouraged due to this, but
-some are very common and have no supported NPAPI equivalent, so must be
-supported.
-
-### Plugin-Created Windows
-
-Because plugins are in their own process, the window layer and activation for
-windows created by plugins is not correct. To work around this, Chromium uses
-DYLD_INSERT_LIBRARIES to hook Carbon window creation and activation calls, and
-swizzling to hook Cocoa window creation and activation calls. Chromium attempts
-to manage the process activation to match the window activation, so that plugin
-windows show on top of browser windows.
-
-#### Full-Screen Windows
-
-Full-screen windows are detected as a special case of plugin-opened windows, and
-cause the browser to request or relinquish full screen mode as appropriate,
-since this must be done from the foreground process.
-
-#### Limitations
-
-* Complex plugin and browser window layering, in the case where a
- plugin creates multiple windows, may not be correct. In practice,
- this doesn’t appear to be a problem.
-* Modal windows don’t currently prevent interaction with background
- windows, only bringing background windows forward.
-* There may be specific calls not caught by the current
- interposing/swizzling.
-
-### Cursors
-
-As with full-screen mode, cursors must be managed from the foreground process.
-As a result, several Cocoa cursor calls are hooked, and the cursor information
-handed off to another process.
-
-#### Limitations
-
-* Not all cursor operations are currently handled.
-
-## Drawing and Event Handling
-
-## There are two event models and four drawing models on the Mac, and Chromium supports all but the oldest of each. The specific details of each implementation are explained below.
-
-### Carbon Events
-
-This event model is no longer support
-
-### Cocoa Events
-
-The Cocoa event model doesn’t provide a window reference to the plugin, so the
-out-of-process implementation is mostly straightforward. However, there are two
-wrinkles:
-
-#### IME Support
-
-Cocoa event model IME has extremely specific semantics, which did not mesh
-cleanly with WebKit’s IME at the time the code was written. As a result, plugin
-IME is handled explicitly in the browser process, with messages sent back and
-forth through the renderer process. In the future, it might be possible to move
-that support into Blink itself.
-
-#### NPN_ConvertPoint
-
-NPN_ConvertPoint requires that browsers be able to map plugin coordinates to
-screen and window coordinates, so the plugin host is forced to track the
-location of the browser window. This function is poorly spec’d, however, and
-it’s unclear how it should behave in the presence of CSS transforms, so the
-implementation may need to move to one where the query is passed into the
-renderer and/or browser process, and answered there, instead of window location
-being tracked by the plugin process.
-
-### QuickDraw
-
-This drawing model is no longer supported.
-
-### CoreGraphics
-
-CoreGraphics support is straightforward: plugins are provided a graphics port
-pointing to the shared buffer. Since plugins are only allowed to draw during a
-draw event in this model, tearing is not an issue.
-Unlike Windows, where the page background must be provided to the plugin in
-order to allow the plugin to composite, CoreGraphics-based drawing preserves
-transparency data. As a result, transparent plugins on the Mac do not have the
-same double-buffer and synchronous drawing requirements that they do on Windows.
-
-### Core Animation
-
-Since the purpose of the Core Animation model is to provide hardware accelerated
-drawing, the normal plugin drawing system is bypassed (as with windowed plugins
-on other platforms). Instead, an IOSurface is shared between the plugin and gpu
-processes, and the plugin’s CALayer is drawn into that surface using CARenderer.
-On the gpu side, the contents of the IOSurface are composited into the page
-using a hardware-accelerated drawing mechanism.
-Because the IOSurface approach requires explicit action on the browser side when
-drawing is necessary, but CARenderer doesn’t provide a way to know when drawing
-is necessary, drawing is driven by a high-frequency timer on the plugin side. As
-a result, the invalidating Core Animation model described below was developed as
-an alternative. Use of the original Core Animation model in Chromium is
-discouraged.
-
-#### Limitations
-
-* The timer adds a small amount of CPU overhead.
-
-### Invalidating Core Animation
-
-The invalidating Core Animation model is identical to the Core Animation model,
-except that the plugin informs the plugin host when drawing is necessary; as a
-result, the timer is not needed.
-
-### Future Plans
-
-#### 64-Bit
-
-A number of plugins on the Mac are still 32-bit only; because Safari and Firefox
-both support 32-bit plugins out of process in 64-bit mode, there has not been
-strong incentive for plugin vendors to release 64-bit plugins. Because of this,
-any 64-bit Mac Chromium release will likely need to support 32-bit plugins. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/mac-xib-files/index.md b/chromium/docs/website/site/developers/design-documents/mac-xib-files/index.md
deleted file mode 100644
index 3cd82b1efc8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/mac-xib-files/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: mac-xib-files
-title: Mac XIB Files
----
-
-Cocoa interfaces are typically [created using Xcode's Interface
-Builder](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html).
-The output of that program produces XIB files, which are XML representations of
-a user interface.
-
-**Chromium does not use XIB files. Do not add new ones.** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/making-chrome-independent-of-extensions/index.md b/chromium/docs/website/site/developers/design-documents/making-chrome-independent-of-extensions/index.md
deleted file mode 100644
index 4e3aadacafc..00000000000
--- a/chromium/docs/website/site/developers/design-documents/making-chrome-independent-of-extensions/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: making-chrome-independent-of-extensions
-title: Making Chrome Independent of Extensions
----
-
-## **The goal of this work is to make the core Chrome browser code independent of extensions. Direct callsites of extensions code from non-extensions code would be replaced by adding observer-style interfaces onto the non-extensions code and/or abstracting the functionality that extensions provides non-extensions code into delegate interfaces as appropriate. In addition to the general desire for [componentization](http://www.chromium.org/developers/design-documents/browser-components) of [extensions](https://docs.google.com/a/google.com/document/d/1hSwqniJVtk3he1fTl_PW422_48F7ZRQUpXLDPqCmRgk/edit), the concrete motivation for the work is the challenges that Chrome for iOS would face in adopting/extending the Chrome for Android solution to extensions (i.e., build enough extensions-related code that the linker is satisfied).**
-
-**This work is complementary to the
-[work](https://docs.google.com/a/google.com/document/d/1hSwqniJVtk3he1fTl_PW422_48F7ZRQUpXLDPqCmRgk/edit)
-currently underway to reduce the dependence of extensions on Chrome. There may
-be cases where this work is blocked by that work, but there is also much that
-can be done toward this goal in parallel with that complementary work. The
-components team (most notably, yoz@ and joi@) have been involved in discussions
-on this work and are in agreement both on tackling the problem and on the basic
-approach.**
-
-## Approach
-
- ****Take a given class Foo outside of extensions that directly uses extensions-related code.****
-
- ****Add observer and/or delegate interfaces to Foo that enable moving knowledge of extensions out of Foo.****
-
- ****Once Foo no longer knows anything about extensions, add a DEPS restriction such that knowledge of extensions cannot be added back to Foo. When a given directory is cleaned of extensions knowledge, this DEPS restriction can be generalized to the directory.****
-
- ****Goto 1.****
-
-5. ****When all such knowledge is removed, remove the dependence on
- browser_extensions from the chrome_browser target.****
-
-## FAQ
-
-* **Sounds great; do you need help?** Yes! Please contact blundell@ or
- stuartmorgan@ re: ways to get involved.
-* **What will happen to the Chrome for Android solution for extensions?
-
- Android developers (specifically, nileshagrawal@) have indicated that once this solution is complete Android would be happy to be moved to it; at that point the modifications that Android had to make to extensions code would be removed, and ENABLE_EXTENSIONS would serve to signify whether the browser_extensions target was built or not.**
-
- **Has this proposal been vetted by Chromium eng leadership?** Yes; an
- earlier version of this proposal was developed in conjunction with yoz@ and
- joi@ from the components team, and the proposal in its current form is the
- result of going through the design review process with cpu@ and jam@.
-
-* **How can I follow along?** **There is a [tracking
- bug](https://code.google.com/p/chromium/issues/detail?id=186422).** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture (1).png.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture (1).png.sha1
deleted file mode 100644
index 53801bfa3ce..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2c1042c407f6122b90b8e4ba7e937f3cf3d529a7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture.png.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture.png.sha1
deleted file mode 100644
index 30cbb26aa4d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router - Chrome architecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8226188955e645de956c19583863e0ca8b4c8542 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture (1).png.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture (1).png.sha1
deleted file mode 100644
index e0ff0a523ae..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-67a817114d3a5d0e7e01f0c4ed2be7ede8970490 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture.png.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture.png.sha1
deleted file mode 100644
index 5e81ace5659..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/Chrome Media Router Architecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dacd8748e9f87e3cbdaf77c814021483bd88d0e8 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/index.md b/chromium/docs/website/site/developers/design-documents/media-router/index.md
deleted file mode 100644
index 90134d9e801..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/index.md
+++ /dev/null
@@ -1,375 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: media-router
-title: Media Router & Web Presentation API
----
-
-**This document is obsolete and will be removed soon. [The new version is
-here](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/media/media_router.md).**
-
-The media router is a component in Chrome responsible for matching clients that
-wish to render content outside the browser (*media sources*) with devices and
-endpoints capable of rendering that content (*media sinks*). When a media source
-is linked with a m*edia sink* (in general, requiring user permission), a *media
-route* is created that allows two-way messaging between the client and the sink.
-The media route allows the client to negotiate a peer-to-peer media streaming
-session with the media sink via messaging (e.g., via
-[WebRTC](http://www.webrtc.org/) or [Cast
-Streaming](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/renderer/extensions/cast_streaming_native_handler.h&q=cast_streaming&sq=package:chromium&type=cs)),
-aka "mirroring." The media route can also be used to control remotely rendered
-media without an associated peer-to-peer media streaming session, aka
-"flinging". The media route can be terminated at user or client request, which
-denies access to the media sink from the application.
-
-The Web [Presentation API](http://www.w3.org/2014/secondscreen/) allows a Web
-application to request display of Web content on a secondary (wired, or
-wireless) screen. The content may be rendered locally and streamed to the
-display or rendered remotely. The Web application controls the content by
-two-way messaging.
-
-Note that the non-Blink parts of the media router will be implemented only in
-desktop Chrome and ChromeOS. Presentation API functionality will be implemented
-in Chrome for Android using analogous platform components such as the [Android
-Media Route Provider
-framework](https://developer.android.com/guide/topics/media/mediarouteprovider.html).
-
-Also note that a separate design is in progress for offscreen rendering,
-capture, and streaming of WebContents (required for full Presentation API
-support).
-
-## Objectives
-
-The objectives of this project:
-
-* Allow use of media sinks from a multitude of clients, including: Web
- applications via the [Presentation
- API](http://w3c.github.io/presentation-api/); Chrome apps; the
- browser itself; and the Chrome OS system shell.
-* Support mirroring locally rendered content to external screens,
- including on-screen and off-screen tabs, Chrome apps windows, and
- the system desktop.
-* Support "flinging" HTML5 documents to remote devices capable of
- rendering them.
-* Support the [Cast Chrome Sender
- SDK](https://developers.google.com/cast/docs/reference/chrome/) on
- desktop and Android without any user installed extensions.
-* Allow new types of media sinks to be added to Chrome by implementing
- additional Media Route Providers.
-
-The following are non-goals but may be objectives for future work:
-
-* Multicast of local content to multiple sinks at once.
-* Support for third party media route providers (in Javascript or
- NaCl) or run-time installation of media route providers.
-* Support for sinks that are not primarily intended to render media.
-
-## Overview
-
-The media router consists of four distinct components:
-
-1. The Chrome Media Router is a browser service exposed in-process via
- C++ API and is exposed to other processes via a set of two Mojo
- interfaces: the Presentation interface and the Media Router API
- interface. Its job is to field requests from clients for media sink
- availability, media route construction/destriction, and media route
- control via messaging. It also controls the Media Router Dialog and
- delegates many functions to the Media Router component extension.
-2. The Media Router extension is an external component extension
- responsible for direct interaction with media sinks. The component
- extension will initially support use of
- [Cast](http://www.google.com/cast/) and
- [DIAL](http://www.dial-multiscreen.org/) devices with more types of
- sinks to be added over time. The component extension interacts with
- the Chrome Media Router via the Media Router API Mojo service, and
- uses some chrome.\* platform APIs, such as chrome.dial,
- chrome.cast.channel, and chrome.mdns to implement network level
- interaction with Cast and DIAL devices.
-3. Users interact with the Chrome Media Router through the Media Router
- Dialog. This WebUI component allows users to choose the destination
- media sink for new media routes and view and stop active media
- routes. It may be pulled up by the user clicking the Cast icon in
- the browser toolbar, or at the request of a Web application via the
- Presentation API.
-4. The Presentation Mojo interface acts as a bridge between the Chrome
- Media Router and the Blink implementation of the Presentation API
- ([launch
- bug](https://code.google.com/p/chromium/issues/detail?id=412331)).
-
-## Architecture
-
-The following diagram illustrates the architecture of the components described
-above.
-
-[<img alt="image"
-src="/developers/design-documents/media-router/Chrome%20Media%20Router%20Architecture%20%281%29.png">](/developers/design-documents/media-router/Chrome%20Media%20Router%20Architecture%20%281%29.png)
-
-## Chrome Media Router
-
-The Chrome Media Router is a browser-resident service that serves as a
-media-protocol-agnostic platform for parties interested in media routing. It
-provides its clients with a set of APIs for media routing related queries and
-operations, including:
-
-* Register for notifications when a sink is available that can render
- a media source. (Media sources are represented as URIs and can
- represent local media or remotely hosted content.)
-* Request routing of media for that source, which will show the user
- the media router dialog to select a compatible sink. If the user
- selects a sink, the media route is returned to the application to
- allow it to control media playback.
-* Accept media control actions from the Media Router Dialog for an
- active media route and forwarding them to the associated route
- provider.
-* Send and receive arbitrary (string) messages between the application
- the media sink.
-* Terminate media routes, and notify the client and media route
- provider when that happens.
-
-The Chrome Media Router, itself, does not directly interact with media sinks.
-Instead it delegates these requests and responses to a media route provider in
-the component extension. The Chrome Media Router will contain bookkeeping of
-established routes, pending route requests, and other related resources, so it
-does not have to request this information from the route provider each time.
-
-The following pseudocode describes how a client of the Chrome Media Router
-(through its C++ API) would use it to initiate and control a media sharing
-session.
-
-#### Media Router API Example
-
-```none
-MediaRouter* media_router = MediaRouterImpl::GetInstance();// Find out what screens are capable of rendering, e.g.// www.youtube.comMediaSource youtube_src = MediaSource::ForPresentationUrl("http://www.youtube.com");// MyMediaSinksObserver should override MediaSinksObserver::OnSinksReceived to handle updates to// the list of screens compatible with youtube_srcMediaSinksObserver* my_observer = new MyMediaSinksObserver(youtube_src);media_router->RegisterObserver(my_observer);// Ask the user to pick a screen from the list passed to// my_observer and capture the sink_id (code not shown)// Request routing of media for that source.// |callback| is passed a MediaRouteResponse& that contains a MediaRoute result if successful.media_router->StartRouteRequest(youtube_src, sink_id, callback);// The MediaRoute can be used to post messages to the// sink. media_router->PostMessage(media_route.media_route_id, "some data", "optional_extra_data_json");// The MediaRoute can be closed which signals the sink// to terminate any remote app or media streaming// session.media_router->CloseRoute(media_route.media_route_id);
-```
-
-The Media Router interacts with the component extension via a Mojo service, the
-Media Router API, that exposes functionality whose implementation is delegated
-to the extension.
-
-#### Media Router API Mojo Interface
-
-```none
-// Interface for sending messages from the MediaRouter (MR) // to the Media Router Provider Manager (MRPM). interface MediaRouterApiClient { // Signals the media route manager to route the media located // at |source_urn| to |sink_id|. RequestRoute(int64 request_id, string source, string sink_id); // Signals the media route manager to close the route specified by |route_id|. CloseRoute(string route_id); // Signals the media route manager to start querying for sinks // capable of displaying |source|. AddMediaSinksQuery(string source); // Signals the media route manager to stop querying for sinks // capable of displaying |source|. RemoveMediaSinksQuery(string source); // Sends |message| with optional |extra_info_json| via the media route // |media_route_id|. // |extra_info_json| is an empty string if no extra info is provided. PostMessage(string media_route_id, string message, string extra_info_json); }; // Interface for sending messages from the MRPM to the MR. [Client=MediaRouterApiClient] interface MediaRouterApi { // Called when the provider manager is ready. OnProviderManagerReady(string extension_id); // Called when the Media Route Manager receives a new list of sinks. OnSinksReceived(string source, array<MediaSink> sinks, array<MediaRoute> routes); // Called after a MediaRoute is established. OnRouteResponseReceived(int64 request_id, MediaRoute route); // Called when route establishment fails. OnRouteResponseError(int64 request_id, string error_text); };
-```
-
-## Media Router Component Extension
-
-The component extension manages discovery of and network interaction with
-individual media sinks. For the purposes of this discussion a sink is a
-LAN-connected device that speaks the Cast or DIAL protocol, but in theory it
-could be any other type of endpoint that supports media rendering and two-way
-messaging. The extension consists of three types of components:
-
-* Media Route Providers: Each provider is a Javascript bundle that
- knows how to find and communicate with a specific type of media
- sink. It communicates with the media sink using HTTP/XHR or via
- device-specific network protocols (e.g., Cast Channel and Cast
- Streaming).
-* Media Route Provider Manager: This is responsible for dispatching
- requests from the Chrome Media Router to individual providers. It
- also registers providers on startup.
-* Mirroring Service: If a media source is requested that represents
- the tab or desktop contents, this service acts on the behalf of the
- application to initiate the mirroring session. This is handled
- internally to the component extension and is not exposed to the rest
- of the browser, it appears to be just another media route.
-
-A component extension is used rather than implementing functionality directly
-into the browser since remote display functionality is implemented by first and
-third parties using a mix of open source and proprietary code, and must be
-released on a schedule independently of Chrome (i.e. tied to specific hardware
-release dates). We only plan to open source the DIAL media route provider.
-
-The component extension is written in JavaScript using the Closure library and
-will be available via two public channels; the default, “stable” extension will
-be installed as an external component without the user needing to visit the Web
-Store. Users may choose to install a pre-release “beta” extension via the Web
-Store, which disables the stable version.
-
-Initially Media Route Providers will be implemented for Cast and DIAL devices
-with others to follow. Over time media route providers that do not rely on
-proprietary protocols will be unbundled and included in the Chromium repository,
-once script packaging and deployment issues are resolved. As an external
-component, the extension is installed on the initial run of the browser. It is
-built around an event page so it registers itself with the Media Router,
-registers itself with discovery APIs to be notified of display availability, and
-then suspends. The component extension will only be active when there are
-applications with pending sink availability requests or media routes, or when
-there is active network traffic between the extension and a media sink.
-
-There are several modules to the extension that are loaded on-demand. The main
-event page bundles are 238kb. Updates are independent of Chrome.
-
-## Tab/Desktop Mirroring
-
-Tab and desktop mirroring will request routing of a media source with URN like
-urn:google:tab:3 representing tab contents. When the component extension
-receives a request to route this source, the media route provider manager will
-query route providers to enumerate sinks that can render streamed tab contents.
-Once a sink is selected by the user, the mirroring service will create the
-appropriate MediaStream using the chrome.tabCapture extension API. The
-MediaStream will then be passed to a Cast Streaming or WebRTC session depending
-on the preferred protocol of the selected sink. When the media route is
-terminated, the associated streaming session and media capture are also
-terminated. A similar approach will be used for desktop mirroring but using
-chrome.desktopCapture instead.
-
-## Presentation API
-
-Media routing of Web content will primarily be done through the Presentation
-API. Some media sinks (e.g. Cast) can render a subset of Web content natively,
-or render an equivalent app experience (e.g., via DIAL). For generic Web
-documents, we plan on rendering it in an offscreen WebContents and then using
-the Tab Mirroring approach outlined above. The design of the offscreen rendering
-capability will be added later to this document.
-
-The Presentation API implementation in Blink will live in content/ and will
-operate on the frame level. It will delegate the calls to the embedder's Media
-Router implementation (Android Media Router / Chrome Media Router for Android /
-Chrome, respectively) via a common PresentationServiceDelegate interface. A
-draft Mojo interface follows (not yet complete):
-
-#### PresentationService Mojo interface
-
-```none
-interface PresentationService { // Returns the last screen availability state if it’s changed since the last // time the method was called. The client has to call this method again when // handling the result (provided via Mojo callback) to get the next update // about the availability status. // May start discovery of the presentation screens. The implementation might // stop discovery once there are no active calls to GetScreenAvailability. // |presentation_url| can be specified to help the implementation to filter // out incompatible screens. GetScreenAvailability(string? presentation_url) => (bool available); // Called when the frame no longer listens to the // |availablechange| event. OnScreenAvailabilityListenerRemoved(); };
-```
-
-Here is how the presentation API will roughly map to Chrome Media Router API:
-
-<table>
-<tr>
-<td> <b>Presentation API</b></td>
-<td><b>Chrome Media Router </b></td>
-</tr>
-<tr>
-<td> Adding onavailablechange listener</td>
-<td> RegisterObserver(), with result propagated back to the RenderFrame / Presentation API.</td>
-</tr>
-<tr>
-<td> startSession</td>
-<td> Opens Media Router Dialog (via MediaRouterDialogController) -&gt; User action -&gt; StartRouteRequest()</td>
-</tr>
-<tr>
-<td> joinSession</td>
-<td> StartRouteRequest()</td>
-</tr>
-<tr>
-<td> postMessage</td>
-<td> PostMessage()</td>
-</tr>
-<tr>
-<td> close</td>
-<td> CloseRoute()</td>
-</tr>
-<tr>
-<td> Adding onmessage listener</td>
-<td> RegisterMessageObserver() (tentative)</td>
-</tr>
-<tr>
-<td> Adding onstatechange listener</td>
-<td> RegisterRouteStateChangeObserver() (tentative)</td>
-</tr>
-</table>
-
-## Media Router Dialog
-
-End user control of media routing is done through the Media Router Dialog. The
-media router dialog is a constrained, tab modal dialog implemented using WebUI.
-It auto-resizes to fit the currently rendered contents and appears in the top
-center of the browser. The dialog supports a number of views, including a screen
-selector, screen status, error/warning messages, and informational messages. To
-avoid excess whitespace, the dialog appropriately resizes to the current view.
-
-## The media router dialog is activated by clicking on the Cast icon, which is always available to the user. The Cast icon implements the action icon interface and appears on either the toolbar action menu (normally) or in the omnibox if there is an available Casting experience (a detected media sink).
-
-## [<img alt="image"
-src="/developers/design-documents/media-router/media_router_overflow.jpg">](/developers/design-documents/media-router/media_router_overflow.jpg)
-
-## Clicking on the Cast icon brings up a menu of available media sinks that are compatible with the current content. For Web documents not using the Presentation API, these will include sinks that can render tab or desktop capture. For Web documents, it will include media sinks compatible with the URL requested to be presented through the Presentation API (once we are able to declare this URL through the API and proactively filter to compatible displays).
-
-## [<img alt="image"
-src="/developers/design-documents/media-router/media_router_screen_selector.jpg">](/developers/design-documents/media-router/media_router_screen_selector.jpg)
-
-## Media Route providers may customize the appearance of the active media
-activity and inject custom controls into the WebUI (subject to UX guidelines).
-We are prototyping this approach using &lt;extensionview&gt;.
-
-## [<img alt="image"
-src="/developers/design-documents/media-router/media_router_universal_remote.jpg">](/developers/design-documents/media-router/media_router_universal_remote.jpg)
-
-## The Media Router Dialog Controller keeps track of whether or not the initiator tab is currently open. When the tab is closed or navigated away to another URL, the media router dialog is closed.
-## The HTML resources are built using [custom Polymer elements](https://www.polymer-project.org/). Data is passed between the WebUI and backend by calling the following:
-## WebUI: chrome.send(functionName);
-## Backend: web_ui()-&gt;CallJavascriptFunction(function_name, arg, ...);
-
-## [<img alt="image"
-src="/developers/design-documents/media-router/media_router_ui_diagram.jpg">](/developers/design-documents/media-router/media_router_ui_diagram.jpg)
-
-## The WebUI and controller classes are located in the proposed location:
-## chrome/browser/ui/webui/media_router
-## The dialog resources, which include HTML, CSS, JS, and image files, are located in the proposed location:
-## chrome/browser/resources/media_router
-
-## We will use the &lt;extensionview&gt; HTML tag to embed the custom media controller UX. This will allow the component extension to flexibly customize and control the UX instead of having the functionality implemented directly into the browser. ExtensionView allows us to embed a page from the component extension into the Media Router WebUI. We will use the load API to take in the full media controller URL.
-
-The extension will utilize
-[chrome.runtime.\*](https://developer.chrome.com/extensions/runtime)
-functionality to message between the controller embedded in the ExtensionView
-and the extension itself.
-
-## Offscreen Rendering
-
-TODO(miu)
-
-## Security
-
-The entire project should be security reviewed from a holistic and architectural
-perspective. Specific security-related aspects:
-
-* The Chrome Media Router will be designed to have a minimal
- processing of the URIs and messages passed through it (perhaps only
- checking for syntactic validity).
-* The Media Router Dialog will allow the MRPs to inject custom content
- into it, so for example, the inline controls for a game can differ
- from those for a movie. This content will be rendered out-of-process
- in an &lt;extensionview&gt; to prevent any escalation of privileges
- from compromised content.
-* The individual platform APIs used by the component extension MRPs
- (chrome.dial, chrome.mdns, chrome.cast.channel,
- chrome.cast.streaming) have been security reviewed previously.
-
-## Team members
-
-* Mark Foltz
- &lt;[mfoltz@chromium.org](mailto:mfoltz@chromium.org)&gt;, TL
-* Jennifer Apacible
- &lt;[apacible@chromium.org](mailto:apacible@chromium.org)&gt;, WebUI
-* Derek Cheng
- &lt;[imcheng@chromium.org](mailto:imcheng@chromium.org)&gt;, Media
- Router
-* Haibin Lu
- &lt;[haibinlu@chromium.org](mailto:haibinlu@chromium.org)&gt;,
- Component extension
-* Kevin Marshall
- &lt;[kmarshall@chromium.org](mailto:kmarshall@chromium.org)&gt;,
- Mojo integration
-* Anton Vayvod
- &lt;[avayvod@chromium.org](mailto:avayvod@chromium.org)&gt;,
- Presentation API, Chrome for Android implementation
-* Yuri Wittala &lt;[miu@chromium.org](mailto:miu@chromium.org)&gt;,
- Offscreen rendering
-
-## Code location
-
-The patches to implement the Media Router have been developed in an internal
-repository. They will be upstreamed into mainline Chromium with the primary code
-location of
-
-chrome/browser/media/router
-
-for the media router, and other components living in appropriate locations
-according to their type. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/media_router_overflow.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/media_router_overflow.jpg.sha1
deleted file mode 100644
index ce778627e95..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/media_router_overflow.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d61880bb5c9c28f65001fff9c692eec040e7f5ab \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/media_router_screen_selector.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/media_router_screen_selector.jpg.sha1
deleted file mode 100644
index 9672e98d14e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/media_router_screen_selector.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b9024d565ebcaa9a733f4f335030a9d3f3a9a119 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/media_router_ui_diagram.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/media_router_ui_diagram.jpg.sha1
deleted file mode 100644
index fea32f87221..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/media_router_ui_diagram.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-12a7cd934fd9610009a62ec95091c5b4d5d0e83e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/media-router/media_router_universal_remote.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/media-router/media_router_universal_remote.jpg.sha1
deleted file mode 100644
index 17f7f11495d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/media-router/media_router_universal_remote.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-33921d3bbae150e4f73391c466cad919ca438320 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/mouse-lock/index.md b/chromium/docs/website/site/developers/design-documents/mouse-lock/index.md
deleted file mode 100644
index 19d3eeba186..00000000000
--- a/chromium/docs/website/site/developers/design-documents/mouse-lock/index.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: mouse-lock
-title: Mouse Lock (Pointer Lock)
----
-
-This document describes implementation details of the [Pointer
-Lock](http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html) JavaScript
-specification (In Chrome code it is referred to as Mouse Lock), the Pepper/NaCl
-[MouseLock](https://developers.google.com/native-client/pepper16/pepperc/struct_p_p_b___mouse_lock),
-and the shared user interface Full Screen Bubble UI .
-
-**What is Pointer Lock?** From the specification:
-
-> The Pointer Lock API provides for input methods of applications based on the
-> movement of the mouse, not just the absolute position of a cursor. A popular
-> example is that of first person movement controls in three dimensional
-> graphics applications such as games. Movement of the mouse is interpreted for
-> rotation of the view-port, there is no limit to how far movement can go, and
-> no mouse cursor is displayed.
-
-> Pointer Lock is related to Mouse Capture \[MDN-SETCAPTURE\]. Capture provides
-> continued event delivery to a target element while a mouse is being dragged,
-> but ceases when the mouse button is released. Pointer Lock differs by being
-> persistent, not limited by screen boundaries, sending events regardless of
-> mouse button state, hiding the cursor, and not releasing until an API call or
-> specific release gesture by the user.
-
-**Demos:**
-
-[media.tojicode.com/q3bsp/](http://media.tojicode.com/q3bsp/)
-
-<https://developer.mozilla.org/en-US/demos/detail/bananabread>
-
-**Chrome 16 introduced Mouse Lock only in full screen mode:**
-
-* Pepper and JavaScript apps can programmatically obtain mouse lock
- after full screen has been entered.
- * For trusted sites, full screen is entered without a user prompt
- to confirm.
- * For untrusted sites full screen is entered and the user is
- prompted (see strings below). Mouse lock will not be possible
- until the user confirms fullscreen.
- * Attempts to lock the mouse prior to requesting full screen will
- fail.
- * Attempts to lock the mouse after full screen is entered but
- before it is confirmed will be merged with the full screen
- request and presented to the user as a single confirmation.
-* After locking, exit instructions are shown for a brief amount of
- time (see strings below).
-* A content setting remembers the permission for any domain a user
- previously allowed. (done in
- [97768](http://code.google.com/p/chromium/issues/detail?id=97768))
-* Mouse lock can be exited in many ways:
- * Programmatically.
- * User pressing Esc.
- * There is a conflict with Esc meaning "stop loading".
- Assuming the page is loading content and mouse lock is
- enabled, repeated presses to Esc will:
- * ESC to exit mouse lock & full screen
- * ESC to stop loading
- * ESC again is handled by the page.
- * Another window or tab getting focus.
- * Full screen mode is exited.
- * Navigation or a page refresh.
-
-**Chrome 21 added support for Mouse Lock without the full screen prerequisite:**
-
-* A request to lock the mouse when the tab is not in full screen will
- succeed if it is made with a user gesture (e.g. a mouse click)
-* For trusted sites mouse lock will be entered with exist instructions
- presented (see strings below).
-* For untrusted sites the user is prompted to allow mouse lock (see
- strings below)
- * If full screen is then requested, the prompt will be merged to a
- single prompt
-* After mouse lock is accepted the site will be marked trusted, and
- the mouse locked.
-* If full screen is requested while the mouse is locked and user
- confirmation is required the mouse will be unlocked to allow the
- user to allow full screen (the site will need to request mouse lock
- again).
-
-Also, when an application exits (i.e. not due to the user pressing ESC, etc.)
-and reenters mouse lock there is no user gesture required and no exit
-instructions are shown. This provides for an improved user experience when an
-application frequently shifts in and out of mouse lock, such as a game with
-first person controls but a cursor used for inventory management.
-
-**Chrome 22 shipped Pointer Lock (the JavaScript API) default on.**
-
-* Access restricted to same document only, and blocked from sandboxed
- iframes.
-
-**Chrome 23 enables Pointer Lock via sandboxed iframes.**
-
-* &lt;iframe sandbox="webkit-allow-pointer-lock ..."&gt;
-
-**Strings:**
-
-* "You have gone full screen. Exit full screen (F11)"
-* "MyExtension triggered full screen Exit full screen (F11)"
- * It will be "An extension triggered full screen Exit full screen
- (F11)" if the extension is already uninstalled.
-* "**==google.com==** is now full screen. \[Allow\] \[Exit full
- screen\]"
-* "**==google.com==** is now full screen and wants to disable your
- mouse cursor. \[Allow\] \[Exit\]"
-* "**==google.com==** wants to disable your mouse cursor. \[Allow\]
- \[Deny\]"
-* "**==google.com==** is now full screen. Press ESC to exit."
-* "**==google.com==** is now full screen and disabling your mouse
- cursor. Press ESC to exit."
-* "**==google.com==** has disabled your mouse cursor. Press ESC to
- exit."
-* (URLs in all strings are bold)
-
-**Content Settings Preferences Page Strings:**
-
-> Mouse Cursor
-
-> (_) Allow all sites to disable the mouse cursor
-
-> (o) Ask me when a site tries to disable the mouse cursor (recommended)
-
-> (_) Do not allow any site to disable the mouse cursor
-
-> \[Manage Exceptions...\]
-
-> Mouse Cursor Exceptions
-
-State transitions for the initial Chrome 16 launch were enumerated in this
-[spreadsheet](https://spreadsheets.google.com/spreadsheet/ccc?key=0Ah7RuMHPdFJYdEFMSndkblFyWWNKdU9vUUloUk5GVVE#gid=0),
-which is now out of date with the addition of extension triggered full screen
-and non fullscreen permission of mouse lock.
-
-**Tests are in:**
-
-* [fullscreen_controller_browsertest.cc](http://code.google.com/codesearch#search/&exact_package=chromium&q=fullscreen_controller_browsertest.cc&type=cs)
-* [fullscreen_controller_interactive_browsertest.cc](http://code.google.com/codesearch#search/&exact_package=chromium&q=fullscreen_controller_interactive_browsertest.cc&type=cs)
-* [fullscreen_mouselock.py](http://code.google.com/codesearch#search/&exact_package=chromium&q=fullscreen_mouselock.py&type=cs)
-
-Related open issues:
-[Feature=Input-MouseLock](http://code.google.com/p/chromium/issues/list?can=2&q=Feature%3DInput-MouseLock&colspec=ID+Pri+Mstone+ReleaseBlock+Area+Feature+Status+Owner+Summary&cells=tiles) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-column-layout/index.md b/chromium/docs/website/site/developers/design-documents/multi-column-layout/index.md
deleted file mode 100644
index d04645aab81..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-column-layout/index.md
+++ /dev/null
@@ -1,592 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: multi-column-layout
-title: Multi-column layout
----
-
-Spec: <http://www.w3.org/TR/css3-multicol/>
-
-Editor's draft: <http://dev.w3.org/csswg/css-multicol/>
-
-## The flow thread (LayoutMultiColumnFlowThread)
-
-Breaking content into multiple columns means that line boxes may no longer only
-be stacked below each other, and also that child blocks may no longer be
-rectangular, visually, if they cross a column boundary. We try to worry as
-little about that internally, though. A multi-column container will insert a
-special child renderer - the flow thread - which lays out everything as a long
-single strip (with the width of one column - all columns have the same width).
-It's only during painting and hit testing (and similar operations) that we need
-to break this single strip into columns.
-
-All DOM children of the multicol container are moved into the flow thread,
-instead of being direct children of the multicol container. The flow thread does
-not take up any space in its container. We create LayoutMultiColumnSet siblings
-(of the flow thread) that make sure that we take up the correct amount of space.
-The flow thread cannot be painted / hit-tested / etc. directly.
-LayoutMultiColumnSet is needed to calculate correct translation and clipping for
-each column. It's needed to convert between flow thread coordinates and visual
-coordinates. A LayoutMultiColumnSet represents one or more rows of columns. It
-has no child layout objects. A column set contains an array of
-MultiColumnFragmentainerGroup objects. There is one object per column row. We
-need multiple rows when a multicol container is nested inside another
-FragmentationContext (another multicol container (LayoutMultiColumnFlowThread),
-or, in case of printing, pagination context (ViewFragmentationContext)).
-
-## Definitions
-
-So in multicol (and all other fragmentation contexts) we need to distinguish
-between flow thread coordinates and visual coordinates.
-
-Flow thread coordinates: Used internally in the layout engine. All flow thread
-descendants' dimensions (and overflow rectangles, and pretty much everything
-else) are in flow thread coordinates. The flow thread (which holds all multicol
-content) is laid out as one tall single-column strip, not worrying much \[\*\]
-about where each column begins and ends. This allows the layout engine to be
-rather oblivious to fragmentation, so that e.g. a block can always be
-represented as a simple rectangle internally. Each flow thread establishes their
-own coordinate space, and they can be nested (multicol inside multicol).
-
-Visual coordinates: The actual dimensions for painting, hit-testing, etc
-(basically, what you see on the screen). Calculated from flow thread
-coordinates, by determining which column a given point is in, and then adding
-that column's offset to the inline-direction coordinate, and subtracting that
-column's flow thread portion rectangle's logical top from the block-direction
-coordinate.
-
-Flow thread portion rectangle (in flow thread coordinates): Each column has a
-flow thread portion rectangle. It defines which part of the flow thread a given
-column occupies. It is stored (or calculated) as a rectangle, although we really
-only care about the logical top and logical bottom coordinates. Logical widths
-and inline-direction coordinates are the same for every column anyway.
-
-\[\*\] However, the flow thread needs to add pagination struts at column
-boundaries (described later), to achieve a uniform column height.
-
-## Example
-
-&lt;div style="-webkit-columns:3; -webkit-column-rule:solid;
--webkit-column-gap:20px; line-height:20px; width:220px;"&gt;
-
-` line1<br>`
-
-` line2<br>`
-
-` line3<br>`
-
-` line4<br>`
-
-` line5<br>`
-
-` <div id="elm">`
-
-` LINE6<br>`
-
-` LINE7<br>`
-
-` </div>`
-
-` line8<br>`
-
-` line9<br>`
-
-`</div>`
-
-The render tree would look like this:
-
-`LayoutBlockFlow (the multicol container DIV)`
-
-` LayoutMultiColumnFlowThread (anonymous)`
-
-` LayoutBlock (anonymous, to hold inline content)`
-
-` LayoutText "line1"`
-
-` LayoutBR`
-
-` LayoutText "line2"`
-
-` LayoutBR`
-
-` LayoutText "line3"`
-
-LayoutBR
-
-` LayoutText "line4"`
-
-LayoutBR
-
-` LayoutText "line5"`
-
-LayoutBR
-
-` LayoutBlock ("elm" DIV)`
-
-` LayoutText "LINE6"`
-
-LayoutBR
-
-` LayoutText "LINE7"`
-
-LayoutBR
-
-` LayoutBlock (anonymous, to hold inline content)`
-
-` LayoutText "line8"`
-
-LayoutBR
-
-` LayoutText "line9"`
-
-LayoutBR
-
-` LayoutMultiColumnSet (anonymous)`
-
-Column width will be 60px (220px minus two gaps (2 \* 20px), then divided by the
-number of columns (3)).
-
-Column height will also be 60px (three lines, 3 \* 20px).
-
-It will be rendered like this, visually:
-
-`+---------------------------+`
-
-`|line1 | line4 | LINE7 |`
-
-`|line2 | line5 | line8 |`
-
-`|line3 | LINE6 | line9 |`
-
-`+---------------------------+`
-
-The flow thread, however, is laid out like an imaginary tall single column, like
-this:
-
-`+-------+`
-
-`|line1 |`
-
-`|line2 |`
-
-`|line3 |`
-
-`|line4 |`
-
-`|line5 |`
-
-`|LINE6 |`
-
-`|LINE7 |`
-
-`|line8 |`
-
-`|line9 |`
-
-`+-------+`
-
-The width of the flow thread is the same as the column width - 60px:
-
-The height of the flow thread is 9\*20px = 180px.
-
-The flow thread portion rectangle for the first column is (0, 0, 60px, 60px) -
-logical top:0, logical bottom:60px
-
-The flow thread portion rectangle for the second column is (0, 60px, 60px, 60px)
-- logical top:60px, logical bottom:120px
-
-The flow thread portion rectangle for the third column is (0, 120px, 60px, 60px)
-- logical top:120px, logical bottom:180px
-
-The visual rectangle for the first column is (0, 0, 60px, 60px).
-
-The visual rectangle for the second column is (80px, 0, 60px, 60px) (x = 60px +
-a gap of 20px).
-
-The visual rectangle for the third column is (160px, 0, 60px, 60px).
-
-The position of the "elm" DIV, in flow thread coordinates, relatively to the
-flow thread, is (0, 100px). Its size (in the same coordinate space) is (60px,
-40px).
-
-To convert the top/left position (0, 100px) of this element from flow thread
-coordinates to visual coordinates, we need to do this:
-
-1. Figure out which column it's in. Int-divide its top position by the column
-height - 100px / 60px = 1 (aha, the second column)
-
-2. Add the visual left position of the column (80px).
-
-3. Subtract the flow thread portion rectangle top coordinate (60px).
-
-So: (0 + 80px, 100px - 60px) = (80px, 40px).
-
-The position of LINE6 relatively to the multicol container, in flow thread
-coordinates, is (0, 100px).
-
-The position of LINE7 relatively to the multicol container, in flow thread
-coordinates, is (0, 120px).
-
-The position of LINE6 relatively to the multicol container, in visual
-coordinates, is (80px, 40px).
-
-The position of LINE7 relatively to the multicol container, in visual
-coordinates, is (160px, 0).
-
-The bounding box of "elm" (the one with LINE6 and LINE7) in flow thread
-coordinates, relatively to the multicol container, will be (0, 100px, 60px,
-40px). A nice rectangle. But the block isn't rectangular, visually, since "elm"
-lives in two columns. There's one portion at the bottom in the second column, at
-(80px, 40px, 60px, 20px) (in visual coordinates, relatively to the multicol
-container), and one portion at the top in the third column, at (160px, 0, 60px,
-20px) (in visual coordinates, relatively to the multicol container). The visual
-bounding box is the union of these two portions - i.e. (80px, 0, 140px, 60px).
-
-## Pagination struts
-
-A pagination strut is inserted at a column break, when a column ends up with
-unusable space at a column boundary. We end up with unusable space when
-unbreakable content (e.g. a line) gets moved to the next column, because there
-was **some**, but not enough, space available in the current column. For
-example, if we have a bunch of lines, and the column height is 5em, and line
-height is 2em, you can fit 2 lines per column. At the bottom of each column
-there'll be 1em of unusable space. So we need to insert a strut in front of
-lines that are "moved" to the next columns. This way the flow thread can be
-sliced nicely and easily into columns when painting and hit-testing.
-
-### Example
-
-&lt;div style="-webkit-columns: 3; column-fill: auto; height: 3.8em; border:
-solid; -webkit-column-rule: 1px solid;"&gt;
-
-&lt;div style="background:yellow;"&gt;
-
-&lt;span style="font-size:1.7em;"&gt;Tall line&lt;/span&gt;&lt;br&gt;
-
-line2&lt;br&gt;
-
-line3&lt;br&gt;
-
-&lt;/div&gt;
-
-line4&lt;br&gt;
-
-line5&lt;br&gt;
-
-line6&lt;br&gt;
-
-line7&lt;br&gt;
-
-&lt;/div&gt;
-
-This gives the following flow thread, with pagination struts shown in magenta:
-
-Visual rendering, with the flow thread super-imposed for each column. Struts
-shown in magenta:
-
-Note that we also end up with unusable space (and therefore need pagination
-struts) at forced breaks.
-
-## Column balancing
-
-## If column height cannot be deduced from CSS properties (typically "height"), because the height is auto, or column-fill is 'balance' (that's the initial value), or if a column row is followed by a column-span:all element, we need to attempt to calculate an optimal column height on our own, based on the contents.
-
-It goes like this:
-
-1. Lay out the flow thread without any column breaks
-
-2. Initial / guessed / minimal column height is: flow thread's height divided by
-the number of columns.
-
-3. Lay out the flow thread again, with implicit breaks, inserting any necessary
-pagination struts at column boundaries.
-
-4. If we get too many columns now, stretch column height by the "minimum space
-shortage" and repeat the previous step, as many times as necessary.
-
-Minimum space shortage: the smallest amount of space that would have prevented a
-break at a given position in the previous layout pass.
-
-## Nested fragmentation contexts
-
-A fragmentation context is either established by a multicol container or by
-printing. When printing, the entire document is split into pages. Printing a
-multicol container is an example of a nested fragmentation context situation. If
-the multicol container is split across multiple pages, special attention is
-required, so that content is flowed into columns on one page before continuing
-on the next page.
-
-### Example for printing
-
-&lt;div style="-webkit-columns:2; line-height:2em;"&gt;
-
-line1&lt;br&gt;
-
-line2&lt;br&gt;
-
-line3&lt;br&gt;
-
-line4&lt;br&gt;
-
-line5&lt;br&gt;
-
-line6&lt;br&gt;
-
-line7&lt;br&gt;
-
-line8&lt;br&gt;
-
-line9&lt;br&gt;
-
-line10&lt;br&gt;
-
-&lt;/div&gt;
-
-If the first page only has room left for 3 lines of text, we'd be able to fit
-the first 6 lines (since we have 2 columns) on the first, and the remaining 4
-lines on the next page.
-
-We get this layout:
-
-line1 line4
-
-line2 line5
-
-line3 line6
-
----------- page break ---------
-
-line7 line9
-
-line8 line10
-
-And NOT this, for instance:
-
-~~line1 line6~~
-
-~~line2 line7~~
-
-~~line3 line8~~
-
-~~---------- page break ---------~~
-
-~~line4 line9~~
-
-~~line5 line10~~
-
-This will give us two MultiColumnFragementainerGroup objects, one for each page.
-The height of the first one will be 2em\*3 = 6em (the remaining space on that
-page), while the height of second one will be 2em\*2 = 4em, which is what we get
-when we balance the remaining 4 lines.
-
-Another way of ending up in a nested fragmentation context situation, is to put
-a multicol container inside another multicol container. Each multicol container
-establishes their own flow thread.
-
-### Example with nested multicol
-
-&lt;style&gt;
-
-.multicol { -webkit-columns:2; -webkit-column-gap:1em; line-height:2em; }
-
-#outer { width:19em; padding:5px; background:blue; }
-
-#inner { background:yellow; }
-
-&lt;/style&gt;
-
-&lt;div class="multicol" id="outer"&gt;
-
-&lt;div class="multicol" id="inner"&gt;
-
-line1&lt;br&gt;
-
-line2&lt;br&gt;
-
-line3&lt;br&gt;
-
-line4&lt;br&gt;
-
-line5&lt;br&gt;
-
-line6&lt;br&gt;
-
-line7&lt;br&gt;
-
-line8&lt;br&gt;
-
-line9&lt;br&gt;
-
-line10&lt;br&gt;
-
-&lt;/div&gt;
-
-&lt;/div&gt;
-
-The layout tree looks like this:
-
-LayoutView 0x26aae9804010 #document 0x20b8ed506be0
-
-LayoutBlockFlow 0x26aae9814010 HTML 0x20b8ed507828
-
-LayoutBlockFlow 0x26aae9814120 BODY 0x20b8ed507a20
-
-LayoutBlockFlow 0x26aae9814230 DIV 0x20b8ed507a88 ID="outer"
-CLASS="multicol"
-
-LayoutMultiColumnFlowThread (anonymous) 0x26aae9818010
-
-LayoutBlockFlow 0x26aae9814340 DIV 0x20b8ed507b40 ID="inner"
-CLASS="multicol"
-
-LayoutMultiColumnFlowThread (anonymous) 0x26aae9818198
-
-LayoutText 0x26aae9830c88 #text 0x20b8ed507ba8 "\\n line1"
-
-LayoutBR 0x26aae9830be0 BR 0x20b8ed507bf8
-
-LayoutText 0x26aae9830b38 #text 0x20b8ed507c60 "\\n line2"
-
-LayoutBR 0x26aae9830a90 BR 0x20b8ed507cb0
-
-LayoutText 0x26aae98309e8 #text 0x20b8ed507d18 "\\n line3"
-
-LayoutBR 0x26aae9830940 BR 0x20b8ed507d68
-
-LayoutText 0x26aae9830898 #text 0x20b8ed507dd0 "\\n line4"
-
-LayoutBR 0x26aae98307f0 BR 0x20b8ed507e20
-
-LayoutText 0x26aae9830748 #text 0x20b8ed507e88 "\\n line5"
-
-LayoutBR 0x26aae98306a0 BR 0x20b8ed507ed8
-
-LayoutText 0x26aae98305f8 #text 0x20b8ed507f40 "\\n line6"
-
-LayoutBR 0x26aae9830550 BR 0x20b8ed507f90
-
-LayoutText 0x26aae98304a8 #text 0x20b8ed507ff8 "\\n line7"
-
-LayoutBR 0x26aae9830400 BR 0x20b8ed508048
-
-LayoutText 0x26aae9830358 #text 0x20b8ed5080b0 "\\n line8"
-
-LayoutBR 0x26aae98302b0 BR 0x20b8ed508100
-
-LayoutText 0x26aae9830208 #text 0x20b8ed508168 "\\n line9"
-
-LayoutBR 0x26aae9830160 BR 0x20b8ed5081b8
-
-LayoutText 0x26aae98300b8 #text 0x20b8ed508220 "\\n line10"
-
-LayoutBR 0x26aae9830010 BR 0x20b8ed508270
-
-LayoutMultiColumnSet (anonymous) 0x26aae9824170
-
-LayoutMultiColumnSet (anonymous) 0x26aae9824010
-
-Some random facts:
-
-The LayoutMultiColumnSet of the outer multicol container (0x26aae9824010) has
-one row (fragmentainer group) with two columns.
-
-The LayoutMultiColumnSet of the inner multicol container (0x26aae9824170) has
-two rows (fragmentainer groups) with two columns each.
-
-All 10 lines are inside the inner multicol, so they are laid out in the inner
-flow thread.
-
-The first inner fragmentainer group holds 6 lines, so it takes up 6\*2em = 12em
-of space in the flow thread. Its height in the coordinate space of the outer
-flow thread is 6em.
-
-The second inner fragmentainer group holds 4 lines, so it takes up 4\*2em = 8em
-in the flow thread. Its height in the outer flow thread is 4em.
-
-The total height of the inner flow thread is 12em+8em = 20em.
-
-The height of the inner multicol container in the coordinate space of the outer
-flow thread is the combined height of its fragmentainer groups - 6em+4em = 10em.
-
-The outer multicol container has two columns, with room for one inner
-fragmentainer group in each.
-
-Its content height (i.e. excluding the padding) needs to be 6em to fit
-everything.
-
-TODO(mstensho): clean up and add more stuff here
-
-Here's a table of the logical left and logical top coordinates for each line, in
-various coordinate spaces. All values are in "em" units.
-
-<table>
-<tr>
-
-<td><b> Inner flow thread coordinate space</b></td>
-<td><b> Outer flow thread coordinate space</b></td>
-<td><b>Visual coordinate space (relative to content edge of outer multicol container)</b></td>
-</tr>
-<tr>
-<td> <b>line1</b></td>
-<td>0,0</td>
-<td> 0,0</td>
-<td>0,0</td>
-</tr>
-<tr>
-<td> <b>line2</b></td>
-<td>0,2</td>
-<td> 0,2</td>
-<td>0,2</td>
-</tr>
-<tr>
-<td> <b>line3</b></td>
-<td>0,4</td>
-<td> 0,4</td>
-<td>0,4</td>
-</tr>
-<tr>
-<td> <b>line4</b></td>
-<td>0,6</td>
-<td> 5,0</td>
-<td>5,0</td>
-</tr>
-<tr>
-<td> <b>line5</b></td>
-<td>0,8</td>
-<td> 5,2</td>
-<td>5,2</td>
-</tr>
-<tr>
-<td> <b>line6</b></td>
-<td>0,10</td>
-<td> 5,4</td>
-<td>5,4</td>
-</tr>
-<tr>
-<td> <b>line7</b></td>
-<td>0,12</td>
-<td> 0,6</td>
-<td>10,0</td>
-</tr>
-<tr>
-<td> <b>line8</b></td>
-<td>0,14</td>
-<td> 0,8</td>
-<td>10,2</td>
-</tr>
-<tr>
-<td> <b>line9</b></td>
-<td>0,16</td>
-<td> 5,6</td>
-<td>15,0</td>
-</tr>
-<tr>
-<td> <b>line10</b></td>
-<td>0,18</td>
-<td> 5,8</td>
-<td>15,2</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/Multiprocessarchitecture.ai.sha1 b/chromium/docs/website/site/developers/design-documents/multi-process-architecture/Multiprocessarchitecture.ai.sha1
deleted file mode 100644
index b75f81fe6e3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/Multiprocessarchitecture.ai.sha1
+++ /dev/null
@@ -1 +0,0 @@
-602ecd32c2d269fd5fb85ff58eeee95b2994c0c3 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/arch.png.sha1 b/chromium/docs/website/site/developers/design-documents/multi-process-architecture/arch.png.sha1
deleted file mode 100644
index 0866fa69405..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/arch.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0a1998b599fdb6a87e392dc7ad125964065efbe0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/architecture.png.sha1 b/chromium/docs/website/site/developers/design-documents/multi-process-architecture/architecture.png.sha1
deleted file mode 100644
index fdc9195d8a1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/architecture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-63810885d8837f614e50deb385055d2594544902 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/chrome_archoverview.png.sha1 b/chromium/docs/website/site/developers/design-documents/multi-process-architecture/chrome_archoverview.png.sha1
deleted file mode 100644
index 2df207e0ff1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/chrome_archoverview.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5426525a7a43583eeef3d187aca6a7199cffe90e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/how-to-add-new-features/index.md b/chromium/docs/website/site/developers/design-documents/multi-process-architecture/how-to-add-new-features/index.md
deleted file mode 100644
index 2a97cb83624..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/how-to-add-new-features/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/multi-process-architecture
- - Multi-process Architecture
-page_name: how-to-add-new-features
-title: How to Add New Features (without bloating RenderView/RenderViewHost/WebContents)
----
-
-**Problem**
-
-Historically, new features (i.e. autofill to pick an example) have been added by
-bolting on their code to RenderView in the renderer process, and RenderViewHost
-in the browser process. If a feature was handled on the IO thread in the browser
-process, then its IPC messages were dispatched in BrowserMessageFilter.
-RenderViewHost would often dispatch the IPC message only to call WebContents
-(through the RenderViewHostDelegate interface), which would then call to another
-piece of code. All the IPC messages between the browser and renderer were
-declared in a massive render_messages_internal.h. Touching each of these files
-for every feature meant that the classes became bloated.
-
-**Solution**
-
-We have added helper classes and mechanisms for filtering IPC messages on each
-of the above threads. This makes it easier to write self contained features.
-
-**Renderer side:**
-
-If you want to filter and send IPC messages, implement the RenderViewObserver
-interface (content/public/renderer/render_view_observer.h). The
-RenderViewObserver base class takes a RenderView and manages the object's
-lifetime so that it's tied to RenderView (this is overridable). The class can
-then filter and send IPC messages, and additionally gets notifications about
-frame loading and closing, which many features need. As an example, see
-ExtensionHelper (extensions/renderer/extension_helper.h).
-
-If your feature has part of the code in WebKit, avoid having callbacks go
-through WebViewClient interface so that we don't bloat it. Consider creating a
-new WebKit interface that the WebKit code calls, and have the renderer side
-class implement it. As an example, see WebAutoFillClient
-(third_party/WebKit/public/WebAutoFillClient.h).
-
-**Browser UI thread:**
-
-The WebContentsObserver (content/public/browser/web_contents_observer.h)
-interface allows objects on the UI thread to filter IPC messages and also gives
-notifications about frame navigation. As an example, see TabHelper
-(chrome/browser/extensions/tab_helper.h).
-
-**Other browser threads:**
-
-To filter and send IPC messages on other browser threads, such as IO/FILE etc,
-implement BrowserMessageFilter interface
-(content/public/browser/browser_message_filter.h). The RenderProcessHostImpl
-object creates and adds the filters in its CreateMessageFilters function.
-
-In general, if a feature has more than a few IPC messages, they should be moved
-into a separate file (i.e. not be added to render_messages_internal.h). This
-also helps with filtering messages on a thread other than the IO thread. As an
-example, see content/common/database_messages.h. This allows their filter,
-DatabaseMessageFilter, to easily send the messages to the file thread without
-having to specify their IDs in multiple places.
-
-void DatabaseMessageFilter::OverrideThreadForMessage( const IPC::Message&
-message, BrowserThread::ID\* thread) { if (IPC_MESSAGE_CLASS(message) ==
-DatabaseMsgStart) \*thread = BrowserThread::FILE; } \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/index.md b/chromium/docs/website/site/developers/design-documents/multi-process-architecture/index.md
deleted file mode 100644
index 8bbfb9c9972..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-architecture/index.md
+++ /dev/null
@@ -1,170 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: multi-process-architecture
-title: Multi-process Architecture
----
-
-This document describes Chromium's high-level architecture.
-
-## Problem
-
-It's nearly impossible to build a rendering engine that never crashes or hangs.
-It's also nearly impossible to build a rendering engine that is perfectly
-secure.
-
-In some ways, the state of web browsers around 2006 was like that of the
-single-user, co-operatively multi-tasked operating systems of the past. As a
-misbehaving application in such an operating system could take down the entire
-system, so could a misbehaving web page in a web browser. All it took is one
-browser or plug-in bug to bring down the entire browser and all of the currently
-running tabs.
-
-Modern operating systems are more robust because they put applications into
-separate processes that are walled off from one another. A crash in one
-application generally does not impair other applications or the integrity of the
-operating system, and each user's access to other users' data is restricted.
-
-## Architectural overview
-
-We use separate processes for browser tabs to protect the overall application
-from bugs and glitches in the rendering engine. We also restrict access from
-each rendering engine process to others and to the rest of the system. In some
-ways, this brings to web browsing the benefits that memory protection and access
-control brought to operating systems.
-
-We refer to the main process that runs the UI and manages tab and plugin
-processes as the "browser process" or "browser." Likewise, the tab-specific
-processes are called "render processes" or "renderers." The renderers use the
-[Blink](/blink) open-source layout engine for interpreting and laying out HTML.
-
-[<img alt="image"
-src="/developers/design-documents/multi-process-architecture/arch.png">](/developers/design-documents/multi-process-architecture/arch.png)
-
-### Managing render processes
-
-Each render process has a global `RenderProcess` object that manages
-communication with the parent browser process and maintains global state. The
-browser maintains a corresponding `RenderProcessHost` for each render process,
-which manages browser state and communication for the renderer. The browser and
-the renderers communicate using [Chromium's IPC
-system](/developers/design-documents/inter-process-communication).
-
-### Managing views
-
-Each render process has one or more `RenderView` objects, managed by the
-`RenderProcess`, which correspond to tabs of content. The corresponding
-`RenderProcessHost` maintains a `RenderViewHost` corresponding to each view in
-the renderer. Each view is given a view ID that is used to differentiate
-multiple views in the same renderer. These IDs are unique inside one renderer
-but not within the browser, so identifying a view requires a `RenderProcessHost`
-and a view ID. Communication from the browser to a specific tab of content is
-done through these `RenderViewHost` objects, which know how to send messages
-through their `RenderProcessHost` to the `RenderProcess` and on to the
-`RenderView`.
-
-## Components and interfaces
-
-In the render process:
-
-* The `RenderProcess` handles IPC with the corresponding
- `RenderProcessHost` in the browser. There is exactly one
- `RenderProcess` object per render process. This is how all browser ↔
- renderer communication happens.
-* The `RenderView` object communicates with its corresponding
- `RenderViewHost` in the browser process (via the RenderProcess), and
- our WebKit embedding layer. This object represents the contents of
- one web page in a tab or popup window
-
-In the browser process:
-
-* The `Browser` object represents a top-level browser window.
-* The `RenderProcessHost` object represents the browser side of a
- single browser ↔ renderer IPC connection. There is one
- `RenderProcessHost` in the browser process for each render process.
-* The `RenderViewHost` object encapsulates communication with the
- remote `RenderView`, and RenderWidgetHost handles the input and
- painting for RenderWidget in the browser.
-
-For more detailed information on how this embedding works, see the [How Chromium
-displays web
-pages](/developers/design-documents/displaying-a-web-page-in-chrome) design
-document.
-
-## Sharing the render process
-
-In general, each new window or tab opens in a new process. The browser will
-spawn a new process and instruct it to create a single `RenderView`.
-
-Sometimes it is necessary or desirable to share the render process between tabs
-or windows. A web application opens a new window that it expects to communicate
-with synchronously, for example, using window.open in JavaScript. In this case,
-when we create a new window or tab, we need to reuse the process that the window
-was opened with. We also have strategies to assign new tabs to existing
-processes if the total number of processes is too large, or if the user already
-has a process open navigated to that domain. These strategies are described in
-[Process Models](/developers/design-documents/process-models).
-
-## Detecting crashed or misbehaving renderers
-
-Each IPC connection to a browser process watches the process handles. If these
-handles are signaled, the render process has crashed and the tabs are notified
-of the crash. For now, we show a "sad tab" screen that notifies the user that
-the renderer has crashed. The page can be reloaded by pressing the reload button
-or by starting a new navigation. When this happens, we notice that there is no
-process and create a new one.
-
-## Sandboxing the renderer
-
-Given the renderer is running in a separate process, we have the opportunity to
-restrict its access to system resources via
-[sandboxing](/developers/design-documents/sandbox). For example, we can ensure
-that the renderer's only access to the network is via its parent browser
-process. Likewise, we can restrict its access to the filesystem using the host
-operating system's built-in permissions.
-
-In addition to restricting the renderer's access to the filesystem and network,
-we can also place limitations on its access to the user's display and related
-objects. We run each render process on a separate Windows
-"[Desktop](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682573(v=vs.85).aspx)"
-which is not visible to the user. This prevents a compromised renderer from
-opening new windows or capturing keystrokes.
-
-## Giving back memory
-
-Given renderers running in separate processes, it becomes straightforward to
-treat hidden tabs as lower priority. Normally, minimized processes on Windows
-have their memory automatically put into a pool of "available memory." In
-low-memory situations, Windows will swap this memory to disk before it swaps out
-higher-priority memory, helping to keep the user-visible programs more
-responsive. We can apply this same principle to hidden tabs. When a render
-process has no top-level tabs, we can release that process's "working set" size
-as a hint to the system to swap that memory out to disk first if necessary.
-Because we found that reducing the working set size also reduces tab switching
-performance when the user is switching between two tabs, we release this memory
-gradually. This means that if the user switches back to a recently used tab,
-that tab's memory is more likely to be paged in than less recently used tabs.
-Users with enough memory to run all their programs will not notice this process
-at all: Windows will only actually reclaim such data if it needs it, so there is
-no performance hit when there is ample memory.
-
-This helps us get a more optimal memory footprint in low-memory situations. The
-memory associated with seldom-used background tabs can get entirely swapped out
-while foreground tabs' data can be entirely loaded into memory. In contrast, a
-single-process browser will have all tabs' data randomly distributed in its
-memory, and it is impossible to separate the used and unused data so cleanly,
-wasting both memory and performance.
-
-## Plug-ins and Extensions
-
-Firefox-style NPAPI plug-ins ran in their own process, separate from renderers.
-This is described in detail in [Plugin
-Architecture](/developers/design-documents/plugin-architecture).
-
-The [Site Isolation](/developers/design-documents/site-isolation) project aims
-to provide more isolation between renderers, an early deliverable for this
-project includes running Chrome's HTML/JavaScript content extensions in isolated
-processes. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resource-loading.png.sha1 b/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resource-loading.png.sha1
deleted file mode 100644
index 1ac4eb0b6d5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resource-loading.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-43aef08b346621d1838aad0576745b1be93cec06 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resourceloading2.ai.sha1 b/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resourceloading2.ai.sha1
deleted file mode 100644
index 4b0a891a6a5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/Resourceloading2.ai.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ced380315a4e22e48007be47bc22728b706eb9f1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/index.md b/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/index.md
deleted file mode 100644
index 1f080e0cd8b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: multi-process-resource-loading
-title: Multi-process Resource Loading
----
-
-[TOC]
-
-## This design doc needs update. Some figures contains stale information.
-
-## Background
-
-All network communication is handled by the main browser process. This is done
-not only so that the browser process can control each renderer's access to the
-network, but also so that we can maintain consistent session state across
-processes like cookies and cached data. It is also important because as a
-HTTP/1.1 user-agent, the browser as a whole should not open too many connections
-per host.
-
-## Overview
-
-Our [multi-process](/developers/design-documents/multi-process-architecture)
-application can be viewed in three layers. At the lowest layer is the Blink
-engine which renders pages. Above that are the renderer process (simplistically,
-one-per-tab), each of which contains one Blink instance. Managing all the
-renderers is the browser process, which controls all network accesses.
-
-[<img alt="image"
-src="/developers/design-documents/multi-process-resource-loading/Resource-loading.png">](/developers/design-documents/multi-process-resource-loading/Resource-loading.png)
-
-## Blink
-
-Blink has a `ResourceLoader` object which is responsible for fetching data. Each
-loader has a `WebURLLoader` for performing the actual requests. The header file
-for this interface is inside the Blink repo.
-
-`ResourceLoader` implements the interface `WebURLLoaderClient`. This is the
-callback interface used by the renderer to dispatch data and other events to
-Blink.
-
-The test shell uses a different resource loader, so provides a different
-implementation, non-IPC version ~~of `ResourceLoaderBridge`, located in
-`webkit/tools/test_shell/simple_resource_loader_bridge`~~.
-
-## Renderer
-
-The renderer's implementation of `WebURLLoader`, called `WebURLLoaderImpl`, is
-located in `content/child/`. It uses the global `ResourceDispatcher` singleton
-object (one for each renderer process) to create a unique request ID and forward
-the request to the browser via IPC. Responses from the browser will reference
-this request ID, which can then be converted back to the `RequestPeer` object
-(WebURLRequestImpl) by the resource dispatcher.
-
-## Browser
-
-The `RenderProcessHost` objects inside the browser receive the IPC requests from
-each renderer. It forwards these requests to the global
-`ResourceDispatcherHost`, using a pointer to the render process host
-(specifically, an implementation of `ResourceDispatcherHost::Receiver`) and the
-request ID generated by the renderer to uniquely identify the request.
-
-Each request is then converted into a `URLRequest` object, which in turn
-forwards it to its internal `URLRequestJob` that implements the specific
-protocol desired. When the `URLRequest` generates notifications, its
-`ResourceDispatcherHost::Receiver` and request ID are used to send the
-notification to the correct `RenderProcessHost` for sending back to the
-renderer. Since the ID generated by the renderer is preserved, it is able to
-correlate all responses with a specific request first generated by Blink.
-
-## Cookies
-
-All cookies are handled by our `CookieMonster` object in `/net/base`. We do not
-share cookies with other browsers' network stacks (e.g. WinINET or Necko). The
-cookie monster lives in the browser process which handles all network requests
-because cookies need to be the same across all tabs.
-
-Pages can request cookies for a document via `document.cookie`. When this
-occurs, we send a synchronous message from the renderer to the browser
-requesting the cookie. While the browser is processing the cookie, the thread
-that Blink works on is suspended. When the renderer's I/O thread receives the
-response from the browser, it un-suspends the thread and passes the result back
-to the JavaScript engine. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/resource_loader.png.sha1 b/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/resource_loader.png.sha1
deleted file mode 100644
index 663efb14a16..00000000000
--- a/chromium/docs/website/site/developers/design-documents/multi-process-resource-loading/resource_loader.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-84e20fabfa4dde957f9ce9f53b0ea29e93f131ab \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.graffle.sha1
deleted file mode 100644
index d31c35a9a8b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e4071e25e50fb08fba3fea14a8a78aa4587f2f47 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.png.sha1 b/chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.png.sha1
deleted file mode 100644
index 3ca136e07f9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControl.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c4a1fc894fdf8d939ad1b5ac71b45a4fc66dd91a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.graffle.sha1
deleted file mode 100644
index 615c77fb880..00000000000
--- a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d66e8a610cf1135c5acbfaf83bc7149eea70af53 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.png.sha1 b/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.png.sha1
deleted file mode 100644
index e75f7228047..00000000000
--- a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fcc2018f936bd5a9ac855abb5ea0a567dd99ba89 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric2.png.sha1 b/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric2.png.sha1
deleted file mode 100644
index e75f7228047..00000000000
--- a/chromium/docs/website/site/developers/design-documents/native-controls/NativeControlHistoric2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fcc2018f936bd5a9ac855abb5ea0a567dd99ba89 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/native-controls/index.md b/chromium/docs/website/site/developers/design-documents/native-controls/index.md
deleted file mode 100644
index b6021554cc0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/native-controls/index.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: native-controls
-title: Native Controls
----
-
-### Background
-
-Despite the fact that views provides facilities for custom layout, rendering and
-event processing, in many situations we have found it desirable to use the
-controls provided by the host operating system (Windows to begin with). This is
-because these widgets already have many desirable properties: a system-native
-appearance that reflects the latest and greatest of the host operating system
-(e.g. using the same Win32 API as Windows XP on Windows Vista, native buttons
-receive glow animations when highlighted), handling for accessibility, focus,
-etc. Implementing new controls using views and Skia would be possible but it
-would take a long time to replicate all of this functionality, and we would have
-to update it for each new operating system release as well. So for areas of our
-UI where it wasn't important to have a distinctive, custom look, we have fallen
-back to native controls.
-
-### Historic Abstraction
-
-Historically, NativeControls have been used like so:
-
-[<img alt="image"
-src="/developers/design-documents/native-controls/NativeControlHistoric2.png">](/developers/design-documents/native-controls/NativeControlHistoric2.png)
-
-A base class, NativeControl, is the root of all NativeControls, like buttons,
-checkboxes, tree views, etc. This View subclass is Windows-specific and has a
-child View that is a HWNDView. This HWNDView hosts a HWND
-(NativeControlContainer) that is the parent of the actual native control HWND.
-The parent is responsible for receiving messages sent from the child HWND (e.g.
-WM_COMMAND, WM_NOTIFY etc) and forwarding these back to the NativeControl. This
-structure with the additional HWND was thought necessary because the assorted
-Windows common controls communicate message notifications to the client app by
-sending messages to the parent window. Back when Chrome had several different
-ViewContainer/root widget types, it made sense to encapsulate this handling at
-the NativeControl level. These days, there is only one root HWND type to be
-concerned with - WidgetWin, so it actually makes more sense to have it receive
-control notifications and forward them back to the NativeControl, rather than
-having to carry around all these extra HWNDs.
-
-Another problem with this abstraction is related to the fact that Chrome has
-many different kinds of Buttons. Because NativeButton has no shared base class
-with the other Button base (BaseButton), much of the API ends up being slightly
-different. It'd be desirable to share a base class and then implement any of the
-NativeButton-specific methods in the derived class. However this is not possible
-due to this structure.
-
-A final point of note: some NativeControl subclasses like CheckBox are a
-combination of system native controls and views components. To get proper
-transparent rendering behind the text label of a checkbox, the CheckBox has two
-child views - one which is the native windows control rendering only the
-checkmark section, and a views::Label child which renders the text. This
-structure has to be accommodated in any proposed modifications to this design.
-
-### Proposed Design
-
-First of all, for any proposed design it's desirable to keep the API simple for
-users since native controls are used in very many places throughout Chrome.
-Ideally, using a native control is as simple as constructing one and adding it
-to your view hierarchy, which is the usage model that exists today for the
-windows-specific native controls and the views controls.
-
-To achieve this, we use the PIMPL idiom to hide the native control
-implementation from the client in a setup like this:
-
-[<img alt="image"
-src="/developers/design-documents/native-controls/NativeControl.png">](/developers/design-documents/native-controls/NativeControl.png)
-
-In this world, NativeButton is a class derived from a base Button class just as
-the other Button classes are (e.g. TextButton, etc). It overrides various
-methods that require interaction with the native control, such as making the
-button appear as the default button in a dialog box etc. The interesting thing
-here is that the NativeButton itself is cross-platform code. The
-platform-specific details of implementing a native control are encapsulated
-behind a platform-neutral NativeControl interface implemented, in this example,
-by a new class NativeControlWin, a subclass of HWNDView that hosts the actual
-Windows native control. We avoid having an extra HWND here by stashing a pointer
-to the NativeControlWin on the attached HWND, and have the message handler in
-WidgetWin attempt to forward the message to the NativeControlWin directly if it
-finds such an association. The NativeButton implements a listener interface that
-receives higher level notifications from the NativeControl implementation about
-messages received from the operating system.
-
-Since NativeControl is an interface not a class, it must provide a GetView
-accessor for the View that is to be parented as a child of the NativeButton,
-CheckBox or other view.
-
-In this way, NativeButton can share a base class with other button types. A
-similar relationship can exist for other native controls where this is
-applicable, e.g. scroll bars, tree views, etc.
-
-#### More Complex Controls
-
-For controls more complex than buttons like, for example, TreeViews, there can
-be more elaborate code in NativeControlWin subclasses that handle messages from
-the native UI control and notify the view on the right half of the diagram as
-needed. Keeping the views on the right half of diagram platform neutral hides
-the complexity of maintaining platform-specific controls from consumers in the
-application - e.g. there is no need for ifdefs or factory methods at the call
-sites - the views can just be constructed directly and added to the view
-hierarchy:
-
-void FooView::Init() {
-
-button_ = new views::NativeButton;
-
-button_-&gt;SetListener(this);
-
-AddChildView(button_);
-
-}
-
-...
-
-void FooView::Layout() {
-
-button_-&gt;SetBounds(0, 0, width(), height());
-
-}
-
-vs the more baroque:
-
-void FooView::Init() {
-
-button_ = views::NativeButton::CreateNativeButton();
-
-button_-&gt;SetListener(this);
-
-AddChildView(button_-&gt;GetView());
-
-}
-
-...
-
-void FooView::Layout() {
-
-button_-&gt;GetView()-&gt;Layout(0, 0, width(), height());
-
-} \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-settings/index.md b/chromium/docs/website/site/developers/design-documents/network-settings/index.md
deleted file mode 100644
index 31921ecf1ca..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-settings/index.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: network-settings
-title: Network Settings
----
-
-[TOC]
-
-### System network settings
-
-The Chromium network stack uses the system network settings so that users and
-administrators can control the network settings of all applications easily. The
-network settings include:
-
-* proxy settings
-* SSL/TLS settings
-* certificate revocation check settings
-* certificate and private key stores
-
-So far this design decision has worked well. The only network settings that some
-users ask for an alternative to system settings are proxy settings. For this we
-recently added some command-line options that allow you to run Chromium with
-custom proxy settings.
-
-### Preference service for network settings
-
-Although the system network settings have been sufficient for our network stack,
-eventually there will be some configuration settings specific to our network
-stack, so we need to have our own preference service for those settings. See
-also issue 266, in which some Firefox users demand that we not use the WinInet
-proxy settings (the de facto system proxy settings on Windows).
-
-### Command-line options for proxy settings
-
-Chrome supports the following proxy-related command line arguments:
-
-**--no-proxy-server**
-
-This tells Chrome not to use a Proxy. It overrides any other proxy settings
-provided.
-
-**--proxy-auto-detect**
-
-This tells Chrome to try and automatically detect your proxy configuration. This
-flag is ignored if --proxy-server is also provided.
-
-**--proxy-server=&lt;scheme&gt;=&lt;uri&gt;\[:&lt;port&gt;\]\[;...\] |
-&lt;uri&gt;\[:&lt;port&gt;\] | "direct://"**
-
-This tells Chrome to use a custom proxy configuration. You can specify a custom
-proxy configuration in three ways:
-
-1) By providing a semi-colon-separated mapping of list scheme to url/port pairs.
-
-For example, you can specify:
-
---proxy-server="http=foopy:80;ftp=foopy2"
-
-to use HTTP proxy "foopy:80" for http URLs and HTTP proxy "foopy2:80" for ftp
-URLs.
-
-2) By providing a single uri with optional port to use for all URLs.
-
-For example:
-
---proxy-server="foopy:8080"
-
-will use the proxy at foopy:8080 for all traffic.
-
-3) By using the special "direct://" value.
-
---proxy-server="direct://" will cause all connections to not use a proxy.
-
-**--proxy-bypass-list=(&lt;trailing_domain&gt;|&lt;ip-address&gt;)\[:&lt;port&gt;\]\[;...\]**
-
-This tells chrome to bypass any specified proxy for the given
-semi-colon-separated list of hosts. This flag must be used (or rather, only has
-an effect) in tandem with --proxy-server.
-
-Note that trailing-domain matching doesn't require "." separators so
-"\*[google.com](http://google.com/)" will match
-"[igoogle.com](http://igoogle.com/)" for example.
-
-For example,
-
---proxy-server="foopy:8080"
---proxy-bypass-list="\*.[google.com](http://google.com/);\*[foo.com](http://foo.com/);[127.0.0.1:8080](http://127.0.0.1:8080/)"
-
-will use the proxy server "foopy" on port 8080 for all hosts except those
-pointing to \*.[google.com](http://google.com/), those pointing to
-\*[foo.com](http://foo.com/) and those pointing to localhost on port 8080.
-
-[igoogle.com](http://igoogle.com/) requests would still be proxied.
-[ifoo.com](http://ifoo.com/) requests would not be proxied since \*foo, not
-\*.foo was specified.
-
-**--proxy-pac-url=&lt;pac-file-url&gt;**
-
-This tells Chrome to use the PAC file at the specified URL.
-
-For example,
-
---proxy-pac-url="<http://wpad/windows.pac>"
-
-will tell Chrome to resolve proxy information for URL requests using the
-windows.pac file. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/Chromium HTTP Network Request Diagram.svg.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/Chromium HTTP Network Request Diagram.svg.sha1
deleted file mode 100644
index 5ff54a204a6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/Chromium HTTP Network Request Diagram.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0190b16307751004d2d10bd9519d85009c0954fd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/Chromium Network Stack.svg.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/Chromium Network Stack.svg.sha1
deleted file mode 100644
index 3c1f20937f3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/Chromium Network Stack.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-78b5e11ba74f571a46a2fbdae07c259724e11d48 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance-new.tiff.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance-new.tiff.sha1
deleted file mode 100644
index 8b1ee175e79..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance-new.tiff.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b2cd6bf3fc1ad9dfa659887bfb3f03d026f61ede \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.jpeg.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.jpeg.sha1
deleted file mode 100644
index acb216a3bb1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.jpeg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-60028ff1cd422e447b8cf505c215ee82c7136751 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.pdf.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.pdf.sha1
deleted file mode 100644
index a61e799937d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bce296b04ef9057fa380fcf250d747f44b19045a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.png.sha1
deleted file mode 100644
index b42dde6101a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ec7cc8f382cc015a154f6f6cde2a4e919049e426 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.svg.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.svg.sha1
deleted file mode 100644
index 274318f1277..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-inheritance.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6f691a151c0e47248c2a1cac5371b7a0ecb77ec5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.jpg.sha1
deleted file mode 100644
index a5fd0fc3f11..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-201687cb5f00526e18fc7f129a2a80f583ec69fe \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.svg.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.svg.sha1
deleted file mode 100644
index f08b3c5ade7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-06f01838891f13fd1123152cd5ee92f97f9732de \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/index.md
deleted file mode 100644
index bf6f5afe735..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/cookiemonster/index.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: cookiemonster
-title: CookieMonster
----
-
-The CookieMonster is the class in Chromium which handles in-browser storage,
-management, retrieval, expiration, and eviction of cookies. It does not handle
-interaction with the user or cookie policy (i.e. which cookies are accepted and
-which are not). The code for the CookieMonster is contained in
-net/base/cookie_monster.{h,cc}.
-
-CookieMonster requirements are, in theory, specified by various RFCs. [RFC
-6265](http://datatracker.ietf.org/doc/rfc6265/) is currently controlling, and
-supersedes [RFC 2965](http://datatracker.ietf.org/doc/rfc2965/). However, most
-browsers do not actually follow those RFCs, and Chromium has compatibility with
-existing browsers as a higher priority than RFC compliance. An RFC that more
-closely describes how browsers normally handles cookies is being considered by
-the RFC; it is available at
-<http://tools.ietf.org/html/draft-ietf-httpstate-cookie>. The various RFCs
-should be examined to understand basic cookie behavior; this document will only
-describe variations from the RFCs.
-
-The CookieMonster has the following responsibilities:
-
-* When a server response is received specifying a cookie, it confirms
- that the cookie is valid, and stores it if so. Tests for validity
- include:
- * The domain of the cookie must be .local or a subdomain of a
- public suffix (see <http://publicsuffix.org/>--also known as an
- extended Top Level Domain).
- * The domain of the cookie must be a suffix of the domain from
- which the response was received.
-
-> We do not enforce the RFC path or port restrictions
-
-* When a client request is being generated, a cookie in the store is
- included in that request if:
- * The cookie domain is a suffix of the server hostname.
- * The path of the cookie is a prefix of the request path.
- * The cookie must be unexpired.
-* It enforces limits (both per-origin and globally) on how many
- cookies will be stored.
-
-**CookieMonster Structure**
-
-The important data structure relationships inside of and including the
-CookieMonster are sketched out in the diagram below.
-
-[<img alt="image"
-src="/developers/design-documents/network-stack/cookiemonster/CM-inheritance.svg">](/developers/design-documents/network-stack/cookiemonster/CM-inheritance.svg)
-
-In the above diagram, type relationships are represented as follows:
-
-* Reference counted thread safe: Red outline
-* Abstract base class: Dashed outline
-* Inheritance or typedef: Dotted line with arrow, subclass to
- superclass
-* Member variable contained in type: Line with filled diamond, diamond
- on the containing type end.
-* Pointer to object contained in type: Line with open diamond, diamond
- on the containing type end.
-
-The three most important classes in this diagram are:
-
-* CookieStore. This defines the interface to anything that stores
- cookies (currently only CookieMonster), which are a set of Set, Get,
- and Delete options.
-* CookieMonster. This adds the capability of specifying a backing
- store (PersistentCookieStore) and Delegate which will be notified of
- cookie changes.
-* SQLitePersistentCookieStore. This implements the
- PersistentCookieStore interface, and provides the persistence for
- non-session cookies.
-
-The central data structure of a CookieMonster is the cookies_ member, which is a
-multimap (multiple values allowed for a single key) from a domain to some set of
-cookies. Each cookie is represented by a CanonicalCookie(), which contains all
-of the information that can be specified in a cookie (see diagram and RFC 2695).
-When set, cookies are placed into this data structure, and retrieval involves
-searching this data structure. The key to this data structure is the most
-inclusive domain (shortest dot delimited suffix) of the cookie domain that does
-not name a domain registrar (i.e. "google.com" or "bbc.co.uk", but not "co.uk"
-or "com"). This is also known as the Effective Top Level Domain plus one, or
-eTLD+1, for short.
-
-Persistence is implemented by the SQLitePersistentCookieStore, which mediates
-access to an on-disk SQLite database. On startup, all cookies are read from this
-database into the cookie monster, and this database is kept updated as the
-CookieMonster is modified. The CookieMonster notifies its associated
-PersistentCookieStore of all changes, and the SQLitePersistentCookieStore
-batches those notifications and updates the database every thirty seconds (when
-it has something to update it about) or if the queue gets too large. It does
-this by queuing an operation to an internal queue when notified of a change by
-the CookieMonster, and posting a task to the database thread to drain that
-queue. The backing database uses the cookie creation time as its primary key,
-which imposes a requirement on the cookie monster not to allow cookies with
-duplicate creation times.
-
-The internal code of the cookie monster falls into four paths: The setter path,
-the getter path, the deletion path, and the garbage collection path.
-
-The setter path validates its input, creates a canonical cookie, deletes any
-cookies in the store that are identical to the newly created one, and (if the
-cookie is not immediately expired) inserts it into the store. The getter path
-computes the relevant most inclusive domain for the incoming request, and
-searches that section of the multimap for cookies that match. The deletion path
-is similar to the getter path, except the matching cookies are deleted rather
-than returned.
-
-Garbage collection occurs when a cookie is set (this is expected to happen much
-less often than retrieving cookies). Garbage collection makes sure that the
-number of cookies per-eTLD+1 does not exceed some maximum, and similarly for the
-total number of cookies. The algorithm is both in flux and subtle; see the
-comments in cookie_monster.h for details.
-
-This class is currently used on many threads, so it is reference counted, and
-does all of its operations under a per-instance lock. It is initialized from the
-backing store (if such exists) on first use.
-
-**Non-Obvious Uses of CookieMonster**
-
-In this writeup, the CookieMonster has been spoken of as if it were a singleton
-class within Chrome. In reality, CookieMonster is \*not\* a singleton (and this
-has produced some bugs). Separate CookieMonster instances are created for:
-
-* Use in standard browsing
-* Incognito mode (this version has no backing store)
-* Extensions (this version has its own backing store; map keys are
- extension ids)
-* Incognito for Extensions.
-
-To decide in each case what kinds of URLs it is appropriate to store cookies
-for, a CookieMonster has a notion of "cookieable schemes"--the schemes for which
-cookies will be stored in that monster. That list defaults to "http" and
-"https". For extensions it is set to "chrome-extension".
-
-When file cookies are enabled via --enable-file-cookies, the default list will
-include "file", and file cookies will be stored in the main CookieMonster. For
-file cookies, the key will be either null, or (for UNC names, e.g.
-//host.on.my.network/path/on/that/host) the hostname in the file cookie.
-Currently, the store does not distinguish carefully between file cookies and
-network cookies.
-
-**Implementation Details; Subject to Change Without Notice**
-
-The call graph of the routines used in the CookieMonster is included below. It
-is correct as of revision 59070, but may not apply to later versions.
-
-[<img alt="image"
-src="/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.svg">](/developers/design-documents/network-stack/cookiemonster/CM-method-calls-new.svg)
-
-Key:
-
-* Green fill: CookieMonster/CookieStore Public method.
-* Grey fill: CookieMonster Private method.
-* Red ring: Method take instance lock.
-* Dark blue fill: CookieMonster static method.
-* Light blue fill: cookie_monster.cc static function
-* Yellow fill: CanonicalCookie method.
-
-The CookieMonster is referenced from many areas of the code, including
-
-but not limited to:
-
-* URLRequestHttpJob: Main path for HTTP request/response.
-* WebSocketJob
-* Automation Provider
-* BrowsingDataRemover: For deleting browsing data.
-* ExtensionDataDeleter
-* CookieTreeModel: Allows the user to examine and delete specific
- cookies.
-* Plugins
-* HttpBridge: For synchronization \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/debugging-net-proxy/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/debugging-net-proxy/index.md
deleted file mode 100644
index eb4f7ee39ab..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/debugging-net-proxy/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: debugging-net-proxy
-title: Debugging problems with the network proxy
----
-
-This documentation [has moved
-here](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md#Capturing-a-Net-Log-for-debugging-proxy-resolution-issues). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc.PNG.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc.PNG.sha1
deleted file mode 100644
index ba662ec469f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-72d1e91abecf1ce59504ddd5479bd40f2e86dbaf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc2.PNG.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc2.PNG.sha1
deleted file mode 100644
index 3ae0a864094..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/alloc2.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-66ccf9a40ae7938572b56bccbe1abd0574579d3e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-benchmarking/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-benchmarking/index.md
deleted file mode 100644
index 33a266493d6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-benchmarking/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-- - /developers/design-documents/network-stack/disk-cache
- - Disk Cache
-page_name: disk-cache-benchmarking
-title: Disk Cache Benchmarking & Performance Tracking
----
-
-## Summary
-
-More backend work in the disk cache is demanding good tools for ongoing disk
-cache performance tracking. The [Very Simple
-Backend](/developers/design-documents/network-stack/disk-cache/very-simple-backend)
-implementation needs continuous A/B testing to show its implementation is
-advancing in speed. To track progress on this backend, and also to permit
-comparisons between alternative backends provided in net, two ongoing
-methodologies are proposed.
-
-## Proxy Backend with Replay
-
-The Proxy Backend is a simple [Disk Cache
-Backend](/developers/design-documents/network-stack/disk-cache) and Entry
-implementation that pass through to an underlying Entry and Backend, but
-recording a short log with parameter information & timing information to allow
-replay.
-
-This log can then be replayed in a standalone replay application which takes the
-log, constructs a backend (perhaps a standard blockfile backend, a [very simple
-backend](/developers/design-documents/network-stack/disk-cache/very-simple-backend)
-or a log structured backend), and performs the same operations at the same
-delays, all calls as if from the IO thread. The average latency of calls, as
-well as system load during the test can then permit A/B comparison between
-backends.
-
-Pros:
-
-* Well suited to use on developer workstations.
-* Very simple to collect logs and run.
-* Very fast to run tests.
-* Low level, includes very little noise from outside of the disk
- cache.
-* Using logs with multiple versions of the same backend allows
- tracking progress over time of a particular backend.
-
-Cons:
-
-* Sensitive to evictions: if two different backends have different
- eviction algorithms, the same operations on two backends can result
- in different logs. For instance an OpenEntry() on the foo backend
- could find an entry that then is Read/Written to when the same log
- played on a bar backend.
-* Compares all low level operations equally: backend operations in the
- critical path of requests block launching requests. Other backend
- operations (like WriteData) almost never occur in the critical path,
- and so performance may impact rendering less. Without a full
- renderer, this impact is hard to measure.
-* Does not track system resource consumption. Besides answering
- requests, the backend is consuming finite system resources (RAM,
- buffer cache, file handles, etc...), competing with the renderer for
- resources. This impact isn't very well measured in the replay
- benchmark.
-
-## browser_test with corpus
-
-Starting up with a backend, the browser_test loads a large corpus of pages
-(either from a local server, or a web server simulating web latency, or possibly
-even the actual web), with an initially empty cache, and then runs either that
-same corpus or a second corpus immediately afterwards with the warm cache. This
-can be repeated using different backends, to permit A/B comparisons.
-
-The browser test should introspect on UMA; outputs should include HttpCache.\*
-benchmarks, as well as PLT.BeginToFirstPaint/PLT.BeginToFinish.
-
-Pros:
-
-* Well suited to ongoing performance dashboards.
-* Tracks a metric more closely connected to user experience.
-* Allows comparison of backends with wildly different eviction
- behaviour.
-
-Cons:
-
-* Noisier, since it includes much, much more than just the Chrome
- renderer.
-* Slower to run.
-* Because of ongoing renderer changes, comparisons of the same backend
- over time are problematic without a lot of patch cherry picking. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-v3/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-v3/index.md
deleted file mode 100644
index 68b80696bb7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/disk-cache-v3/index.md
+++ /dev/null
@@ -1,475 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-- - /developers/design-documents/network-stack/disk-cache
- - Disk Cache
-page_name: disk-cache-v3
-title: Disk Cache 3.0
----
-
-## [TOC]
-
-## Introduction
-
-This version of the disk cache is an evolution of the previous design, so some
-familiarity with the [previous
-design](/developers/design-documents/network-stack/disk-cache) (implemented in
-versions 1 and 2) is recommended. Functionality specific to the new version is
-implemented by files located under src/net/disk_cache/v3.
-
-## Requirements
-
-From the implementation of version 2 (file format 2.1, V2 from this point on),
-in no particular order:
-
-### Survive system level crashes
-
-The design of V2 assumes that system level-crashes are rare enough to justify
-throwing away everything when corruption caused by a system-level crash happens.
-That assumption turned out to be wrong.
-
-### Allow storing significantly more entries for the same total disk space
-
-One characteristic of Chrome’s disk cache is that it keeps track of entries’
-reuse. It even keeps track of entries for some time after a given entry is
-evicted from the cache, which allows it to correctly identify important content.
-The new design should allow keeping track of a lot of entries (most of them
-already evicted) without having to scale the space used as if all entries were
-present.
-
-### Allow growing the main index
-
-There are multiple users of the disk cache, some of which require very little
-disk space. The cache should be able to start with a small footprint and grow by
-itself as needed.
-
-### Allow memory-only access time to determine a Hit or Miss
-
-The cache should minimize the number of disk operations required to identify if
-an entry is stored or not. It may be too expensive to do that all the time
-(think about the memory footprint required to handle collisions with half a
-million entries), but the probability of requiring a disk access should be much
-lower than what it is today (if V2 were scaled to the same number of entries).
-
-### Keep disk synchronization to a minimum
-
-Disk synchronization (for lack of a better name) refers to actions that attempt
-to synchronize, snapshot or flush the current state of the cache so that we know
-everything is in a consistent state. This is bad because there is no real
-guarantee anywhere that a file flush will actually write to the disk (the OS
-usually lies to the application, and the disk usually lies to the OS), and flush
-operations are basically synchronous operations that induce delays and lack of
-responsiveness.
-
-Another important characteristic to preserve is minimal synchronization at
-shutdown, and almost zero cost to recover from user level crashes.
-
-### Disk space / memory use
-
-This is not really a requirement, but the use of disk and memory is an important
-consideration.
-
-## Detailed Design
-
-### Memory Mapped files
-
-The cache continues using memory mapped files, but to be Linux friendly, the
-mapped section will expand the whole file, so parts that are accessed through
-regular IO are stored on a dedicated file. That means that the bitmap of a block
-file is separated from the bulk of the file.
-
-Decent memory mapped files behavior is still considered a requirement of the
-backend, and a platform where memory mapped files is not available or
-underperforms should consider one of the alternative implementations.
-
-### Batching
-
-As implied by the previous section, the cache will not attempt to batch
-operations to a restricted period of time in an effort to do some
-synchronization between the backup files and the normal files. Operations will
-continue as needed (insertions, deletions, evictions etc).
-
-### Reduced address space
-
-The number of entries stored by the cache will be artificially reduced by the
-implementation. A typical cache will have 22-bit addresses so it will be limited
-to about 4 million entries. This seems more than enough for a regular HTTP cache
-and other current uses of the interface.
-
-However, this limit can be increased in future versions with very little effort.
-In fact, as stated in [section
-2.3](/developers/design-documents/network-stack/disk-cache/disk-cache-v3#TOC-Allow-growing-the-main-index)
-the cache will grow as needed, and the initial address space will be much lower
-than 22 bits. For very small caches the cache will start with a total address
-space of just 16 bits.
-
-If the cache is performing evictions, there is an extra implied addressing bit
-by the fact that evicted entries belong to their own independent address space,
-because they will not be stored alongside alive entries.
-
-### Entry hash
-
-An entry is identified by the hash of the key. The purpose of this hash is to
-quickly locate a key on the index table, so this is a hash-table hash, not a
-cryptographic hash. The whole hash is available through the cache index, and
-we’ll use a standard 32 bit hash.
-
-Note that this means that there will be collisions, so the hash doesn’t become
-the unique identifier of an entry either. In fact, there is no unique identifier
-as it is possible to store exactly the same key more than once.
-
-UMA data from Chrome Stable channel indicates that the top 0.05% of users have
-bursts of activity that if sustained would result in about 39000 requests per
-hour. For the users at the 80 percentile mark, the sustained rate would be about
-4800 requests per hour. Assuming a cache that stores about half a million
-entries when full, and uses a 32 bit hash with uniform distribution, the
-expected number of collisions in an hour would be about 4.7 for the 99.5
-percentile and 0.56 for the 80 percentile. This means that the expected time
-between collisions would be a little over 12 minutes for the 99.5 percentile and
-at least 106 minutes for 80% of the users.
-
-The effect of having a collision would be having to read something from disk in
-order to confirm if the entry is there or not. In other words, a collision goes
-against [requirement
-2.4](#TOC-Allow-memory-only-access-time-to-determine-a-Hit-or-Miss), but
-requiring one extra disk access every hour is well within reason. In order to
-completely eliminate collisions, the hash would have to be increased to at least
-128 bits (and maybe move away from a standard hash table hashing) which goes
-against [requirement 2.6](#TOC-Disk-space-memory-use) by substantially
-increasing the size of the index and it would actually make keeping track of
-in-progress deletions much harder.
-
-### Data backtrace to the entry
-
-All data stored individually somewhere by the cache should contain a way to
-validate that it belongs to a given entry. The identifier would be the hash of
-the key. If the hash matches, it is assumed that everything is fine; if it
-doesn’t, the conclusion would be that this is a record that belonged to a stale
-entry that was not correctly detected before.
-
-### Index
-
-The whole index is memory mapped, has a header with relevant details about the
-whole backend, and the bitmap and header are backed up periodically using only
-regular IO. The actual table is divided in two parts: the main table (stored as
-“index_tb1”) always grows by a factor of 2, and the overflow or extra table
-(stored as “index_tb2”) which grows by smaller increments. (See
-[buckets](TOC-Buckets) for more details).
-
-#### Bitmap
-
-Every cell of the hash table has an implied number (the location of the cell).
-The first cell of the first bucket is cell 0, the next one is number one etc.
-There is a bitmap that identifies used cells, using regular semantics. The
-bitmap is stored right after the header, in a file named “index” (backed up by
-“index_bak”).
-
-#### Control state
-
-Each cell of the index table can be in one of the following states:
-
-Free - State 0 (bitmap 0)
-
-New - State 1 (bitmap 1). An entry was added recently
-
-Open - State 2 (bitmap 1)
-
-Modified - State 3 (bitmap 1)
-
-Deleted - State 4 (bitmap 0)
-
-Used - State 6 (bitmap 1). A stored entry that has not seen recent activity.
-
-The state is represented by three bits, and state 7 is invalid, while 5 is used
-temporarily for entries that are invalid while they are fixed. Each time the
-state changes to something else, the corresponding bit on the bitmap should be
-adjusted as needed.
-
-##### Insert transitions
-
-Let’s say that the full state of an entry is determined by \[state - bitmap -
-backup\] (see [section 3.10](#TOC-Backups) for information about backups).
-
-Inserting an entry requires the following transitions:
-
- \[free - 0 - 0\]
-
- \[new - 1 - 0\]. Pointers and data added.
-
- \[new - 1 - 1\]
-
- \[used - 1 - 1\]
-
-A system crash between 2 and 3 can result in either 1 or 2 being persisted to
-disk. If it is 1, there’s no information about the new entry anywhere, so in
-fact the entry was not inserted. If it is 2, the mismatch between the bitmap and
-the backup (and the fact that the state is “new”) allows detection of the crash
-impacting this entry, so the actual data should be verified.
-
-A system crash between 3 and 4 may end up in state 3 after restart, and we know
-that the entry was being inserted. If for some reason the relevant page was not
-saved to disk, the state could be \[free - 0 - 1\], in which case we know that
-something was wrong, but we don’t have the address or has of the entry which was
-being inserted, so effectively nothing was added to the index. In that case, we
-may end up with some data pointing back to some hash that doesn’t live in the
-table, so we can detect the issue if we attempt to use the record.
-
-##### Remove transitions
-
-Removing an entry requires the following transitions (for example):
-
- \[used - 1 - 1\]
-
- \[deleted - 0 - 1\]
-
- \[deleted - 0 - 0\]. Actual data removed at this point.
-
- \[free - 0 - 0\]. Pointers deleted.
-
-A system crash between 2 and 3 can result in either 1 or 2 being persisted to
-disk. If it is 2, we know that something is wrong. If it is 1, to prevent the
-case of an entry pointing to data that was deleted (although the case will be
-recognized when actually reading the data), the deletion should be postponed
-until after the backup is performed. Note that deleting and creating again an
-entry right away is not affected by this pattern because the index can store
-exactly the same hash right away, on a different table cell. At regular run time
-it’s easy to know that we are in the process of deleting an entry, while at the
-same time there’s a replacement in the table.
-
-A system crash between 3 and 4 will either see the entry “deleted”, or “used”
-with the bitmap mismatching the backup, so the problem will be detected.
-
-#### Entry
-
-The cache stores enough information to drive evictions and enumeration without
-having to rebuild the whole list in memory. An entry on the hash table has:
-
- Address (22 bits). Points to the actual entry record.
-
- State (3 bits). See [section 3.6.2](#TOC-Control-state)
-
- Group (3 bits). Up to 8 different groups of entries: reused, deleted etc.
- (old Lists).
-
- Reuse (4 bits). Reuse counter for moving entries to a different group.
-
- Hash (18 bits). Enough to recover the whole hash with a big table.
-
- Timestamp (20 bits).
-
- Checksum (2 bits). To verify self consistency of the record.
-
-For a total of 9 bytes.
-
-The limited timestamp deserves a more detailed explanation. There is a running
-timer of 30 seconds that is the basis of a bunch of measurements on the cache.
-Stamping each entry with a value from that counter, and keeping 20 bits,
-provides about one full year of continuous run time before the counter
-overflows.
-
-The idea of the timestamp is to track the last time an entry is modified so that
-we can build some form of LRU policy. Ignoring overflow for a second, in order
-to get a set of entries for eviction all we have to do is keep track of the last
-timestamp evicted, and walk the table looking for entries on the next set: all
-entries that have the closest timestamp to the previous one, and on the desired
-Group. This gives us all entries that were modified on the same 30 seconds
-interval, with the desired characteristics.
-
-At some point when we are getting close to reach overflow on the timestamp all
-we have to do is rebase all timestamps on the table. Note that the backend keeps
-a full resolution time counter, so we just have to track the range of entries
-stored by the cache. This, of course, limits the range of last-modified entries
-storable by the cache to about one year, assuming that the browser is never shut
-down. Keeping an entry alive for that long without accessing it sounds like more
-than enough for a cache.
-
-The expected pattern is that most entries tracked by the cache will be “deleted”
-entries. For those entries, the timestamp is not really needed because deletion
-of evicted entries is not controlled by the timestamp but simply by discarding a
-bunch of entries that are stored together.
-
-A small cache (say for 256 buckets) needs to store 24 bits of the hash in order
-to recover the whole value. In that case, the extra 6 bits come from the address
-field that shrinks to 16 bits, enough to cover 64K entries. The overhead for
-very small repositories with 1024 entries minimum would be: 10KB for the table,
-4KB for the header/bitmap + 4KB for the backup.
-
-#### Buckets
-
-A bucket is simply a group of 4 entries that share the same high order bits of
-the hash, plus a few extra bits for book keeping.
-
-For example, a hash table with 1024 cells has 256 buckets where each bucket has
-4 entries. In that case, the low order byte of the hash is shared by the four
-entries inside the bucket, but all entries can have anything on the high order
-bits of the hash (even the same value).
-
-When the four entries of a bucket are used, the next entry with a matching hash
-will cause a new bucket to be reserved, and the old bucket will point to the new
-one. New buckets are used on demand, until the number of extra buckets gets
-close to the number of buckets on the main table. At that point the table size
-is doubled, and all extra buckets are assimilated into the new table. Note that
-the process of doubling the size and remapping entries to cells is very simple
-and can be performed even while entries are added or removed from the table,
-which is quite valuable for large tables.
-
-Using the baseline entry described in [section 3.6.3](#TOC-Entry), the
-corresponding bucket will look like:
-
- Entry 1 (9 bytes)
-
- Entry 2 (9 bytes)
-
- Entry 3 (9 bytes)
-
- Entry 4 (9 bytes)
-
- Next bucket (4 bytes, the address of a cell as referenced by the bitmap of
- [section 3.6.1](#TOC-Bitmap))
-
- Hash (up to 4 bytes, for buckets outside of the main table)
-
-For a total size of 44 bytes.
-
-Continuing with the example of a 1024-cell table, this is a representation of
-the buckets:
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/2plliNfEX6wsjVzF8qav6SUR9fMgLZK7TRQ4APc45IUYvfD0XR8Fb48TU1vZe60Cg9Iefa9_NVrSNLJ-I7hgvd2KJ2CgI1ZCJGz2g51D48GjYI-ZJOONTCWG"
-height=389px; width=634px;>
-
-Note that all entries that share the same lower 8 bits belong to the same
-bucket, and that there can be empty slots in the middle of a bucket. The initial
-table size would be 256 buckets, so entry 1024 would be the first cell of an
-extra bucket, not part of the main table.
-
-The presence of chained buckets allows a gradual growth of the table, because
-new buckets get allocated when needed, as more entries are added to the table.
-It also allows keeping multiple instances of the same entry in the table, as
-needed by the system crash correction code.
-
-### EntryRecord
-
-A regular entry has (104 bytes in total):
-
- Hash (32 bits). Padded to 64 bits
-
- Reuse count (8 bits)
-
- Refetch count (8 bits)
-
- State (8 bits)
-
- Times (creation, last modified, last access) (64 bits x 3)
-
- Key Length (8 bits)
-
- Flags (32 bits)
-
- Data size (32 bits x 4 streams)
-
- Data address (32 bits x 4)
-
- Data hash (32 bits x 4)
-
- Self hash (32 bits)
-
- Extra padding
-
-Note that the whole key is now part of the first stream, just before user
-provided data:
-
-Stream 0: owner hash (4 bytes) + key + user data.
-
-Stream 1..3: owner hash (4 bytes) + user data.
-
-A small data hash (fast, not cryptographic) is kept for each data stream, and it
-allows finding consistency issues when a straight, from start to end pattern is
-used to write and read the stream.
-
-For an evicted entry the cache keeps (48 bytes in total):
-
- Hash (32 bits)
-
- Reuse count (8 bits)
-
- Refetch count (8 bits)
-
- State (8 bits)
-
- Last access time (64 bits)
-
- Key length (32 bits)
-
- Key hash (160 bits)
-
- Self hash (32 bits)
-
-In this case all the data streams are deleted, and that means that the key
-itself is not preserved. That’s the reason to rely on a much stronger key hash.
-Note that there is no harm if a URL is built to collide with another one: the
-worst that would happen is that the second URL may have better chances of being
-preserved by the cache, as long as the first URL was already evicted.
-
-### Block files
-
-The structure of a block file remains the same. The consistency of the block
-file is taken care by detecting stales entry at the index layer and following
-the data records to the block files, while verifying the backtrace hash. The
-only difference is that now a block file is backed by two actual files: the
-header + bitmap (a file named “data_xx”) and the actual data (a file named
-“data_xx_d”).
-
-In terms of number of files, the rankings file is gone and now there is a
-dedicated file for live entries, and another one for deleted entries. External
-files are also tracked by a dedicated block file.
-
-As a future improvement, we can consider moving entries to dedicated files once
-they reach the highly reused group.
-
-### External files
-
-External files will be tracked by a block file that basically just have the
-bitmap of used files and the backtrace data to the owning entry (the hash). The
-actual number of files per directory is limited to 1024.
-
-### Backups
-
-There is a backup file of the index bitmap (+ header), updated using regular,
-buffered IO at a given interval (every 30 seconds), without any flushing or
-double-file with replacing.
-
-It is assumed that the operating system will flush the memory mapped sections
-from time to time, so there is no explicit action to attempt to write the main
-bitmap to disk. In general, it is expected that memory mapped data will reach
-disk within the refresh interval of the backup, so that a complete write cycle
-may take from one to two backup cycles. Note that this doesn’t imply that the
-memory mapped data write has to be synchronized in any way with the backup
-cycle.
-
-For example, consider a typical cycle for removing an entry from the index (as
-explained in [section 3.6.2.2](#TOC-Remove-transitions)):
-
- \[used - 1 - 1\]
-
- \[deleted - 0 - 1\]
-
- \[deleted - 0 - 0\]. Actual data removed at this point.
-
-4. \[free - 0 - 0\]. Pointers deleted.
-
-Step 2 happens at a random place during backup cycle n. Step 3 happens at the
-start of backup cycle n+1, but the backup data itself will reach disk at some
-point after that (being buffered by the operating system). Step 4 takes place at
-the start of backup cycle n+2, so roughly a full cycle after the backup file was
-saved and the data deleted from the cache.
-
-If the slot is reused for another entry after step 4, ideally the intermediate
-step (2-3) reaches disk before the slot transitions again to a used state.
-However, if that doesn’t happen we’ll still be able to detect any problem when
-we see a mismatched backtrace hash. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files.PNG.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files.PNG.sha1
deleted file mode 100644
index b980e2dbe6c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c65be4e92340e725d0d8be6310e2eb97de31bbc9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files2.PNG.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files2.PNG.sha1
deleted file mode 100644
index 16798bbdd43..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files2.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-75485bf5d4e2af1ddb348ee352faa0d338c0151c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files3.PNG.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files3.PNG.sha1
deleted file mode 100644
index 16798bbdd43..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files3.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-75485bf5d4e2af1ddb348ee352faa0d338c0151c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files4.PNG.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files4.PNG.sha1
deleted file mode 100644
index 72b868fc2b0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/files4.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-85d7e24fbcfe1069e423cc7de1a2679db7711130 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/index.md
deleted file mode 100644
index 332a3394401..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/index.md
+++ /dev/null
@@ -1,434 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: disk-cache
-title: Disk Cache
----
-
-[TOC]
-
-## Overview
-
-The disk cache stores resources fetched from the web so that they can be
-accessed quickly at a latter time if needed. The main characteristics of
-Chromium disk cache are:
-
-* The cache should not grow unbounded so there must be an algorithm
- for deciding when to remove old entries.
-* While it is not critical to lose some data from the cache, having to
- discard the whole cache should be minimized. The current design
- should be able to gracefully handle application crashes, no matter
- what is going on at that time, only discarding the resources that
- were open at that time. However, if the whole computer crashes while
- we are updating the cache, everything on the cache probably will be
- discarded.
-* Access to previously stored data should be reasonably efficient, and
- it should be possible to use synchronous or asynchronous operations.
-* We should be able to avoid conflicts that prevent us from storing
- two given resources simultaneously. In other words, the design
- should avoid cache trashing.
-* It should be possible to remove a given entry from the cache, and
- keep working with a given entry while at the same time making it
- inaccessible to other requests (as if it was never stored).
-* The cache should not be using explicit multithread synchronization
- because it will always be called from the same thread. However,
- callbacks should avoid reentrancy problems so they must be issued
- through the thread's message loop.
-
-A [new version of the
-cache](/developers/design-documents/network-stack/disk-cache/disk-cache-v3) is
-under development, and some sections of this documents are going to be stale
-soon. In particular, the description of a cache entry, and the big picture
-diagram (sections 3.4 and 3.5) are only valid for files saved with version 2.x
-
-Note that on Android we don't use this implementation; we use the [simple
-cache](/developers/design-documents/network-stack/disk-cache/very-simple-backend)
-instead.
-
-## External Interface
-
-Any implementation of Chromium's cache exposes two interfaces:
-disk_cache::Backend and disk_cache::Entry. (see
-[src/net/disk_cache/disk_cache.h](http://src.chromium.org/viewvc/chrome/trunk/src/net/disk_cache/disk_cache.h?view=markup)).
-The Backend provides methods to enumerate the resources stored on the cache
-(a.k.a Entries), open old entries or create new ones etc. Operations specific to
-a given resource are handled with the Entry interface.
-
-An entry is identified by its key, which is just the name of the resource (for
-example http://www.google.com/favicon.ico ). Once an entry is created, the data
-for that particular resource is stored in separate chunks or data streams: one
-for the HTTP headers and another one for the actual resource data, so the index
-for the required stream is an argument to the Entry::ReadData and
-Entry::WriteData methods.
-
-## Disk Structure
-
-All the files that store Chromium’s disk cache live in a single folder (you
-guessed it, it is called cache), and every file inside that folder is considered
-to be part of the cache (so it may be deleted by Chromium at some point!).
-
-Chromium uses at least five files: one index file and four data files. If any of
-those files is missing or corrupt, the whole set of files is recreated. The
-index file contains the main hash table used to locate entries on the cache, and
-the data files contain all sorts of interesting data, from bookkeeping
-information to the actual HTTP headers and data of a given request. These data
-files are also known as block-files, because their file format is optimized to
-store information on fixed-size “blocks”. For instance, a given block-file may
-store blocks of 256 bytes and it will be used to store data that can span from
-one to four such blocks, in other words, data with a total size of 1 KB or less.
-
-When the size of a piece of data is bigger than disk_cache::kMaxBlockSize (16
-KB), it will no longer be stored inside one of our standard block-files. In this
-case, it will be stored in a “separate file”, which is a file that has no
-special headers and contains only the data we want to save. The name of a
-separate file follows the form f_xx, where xx is just the hexadecimal number
-that identifies the file.
-
-### Cache Address
-
-Every piece of data stored by the disk cache has a given “cache address”. The
-cache address is simply a 32-bit number that describes exactly where the data is
-actually located.
-
-A cache entry will have an address; the HTTP headers will have another address,
-the actual request data will have a different address, the entry name (key) may
-have another address and auxiliary information for the entry (such as the
-rankings info for the eviction algorithm) will have another address. This allows
-us to reuse the same infrastructure to efficiently store different types of data
-while at the same time keeping frequently modified data together, so that we can
-leverage the underlying operating system to reduce access latency.
-
-The structure of a cache address is defined on
-[disk_cache/addr.h](http://src.chromium.org/viewvc/chrome/trunk/src/net/disk_cache/addr.h?view=markup),
-and basically tells if the required data is stored inside a block-file or as a
-separate file and the number of the file (block file or otherwise). If the data
-is part of a block-file, the cache address also has the number of the first
-block with the data, the number of blocks used and the type of block file.
-
-These are few examples of valid addresses:
-
-0x00000000: not initialized
-
-0x8000002A: external file f_00002A
-
-0xA0010003: block-file number 1 (data_1), initial block number 3, 1 block of
-length.
-
-### Index File Structure
-
-The index file structure is specified on
-[disk_cache/disk_format.h.](http://src.chromium.org/viewvc/chrome/trunk/src/net/disk_cache/disk_format.h?view=markup)
-Basically, it is just an disk_cache::IndexHeader structure followed by the
-actual hash table. The number of entries in the table is at least
-disk_cache::kIndexTablesize (65536), but the actual size is controlled by the
-table_len member of the header.
-
-The whole file is memory mapped to allow fast translation between the hash of
-the name of a resource (the key), and the cache address that stores the
-resource. The low order bits of the hash are used to index the table, and the
-content of the table is the address of the first stored resource with the same
-low order bits on the hash.
-
-One of the things that must be verified when dealing with the disk cache files
-(the index and every block-file) is that the magic number on the header matches
-the expected value, and that the version is correct. The version has a mayor and
-a minor part, and the expected behavior is that any change on the mayor number
-means that the format is now incompatible with older formats.
-
-### Block File Structure
-
-The block-file structure is specified on
-[disk_cache/disk_format.h](http://src.chromium.org/viewvc/chrome/trunk/src/net/disk_cache/disk_format.h?view=markup).
-Basically, it is just a file header (disk_cache::BlockFileHeader) followed by a
-variable number of fixed-size data blocks. Block files are named data_n, where n
-is the decimal file number.
-
-The header of the file (8 KB) is memory mapped to allow efficient creation and
-deletion of elements of the file. The bulk of the header is actually a bitmap
-that identifies used blocks on the file. The maximum number of blocks that can
-be stored on a single file is thus a little less than 64K.
-
-Whenever there are not enough free blocks on a file to store more data, the file
-is grown by 1024 blocks until the maximum number of blocks is reached. At that
-moment, a new block-file of the same type is created, and the two files are
-linked together using the next_file member of the header. The type of the
-block-file is simply the size of the blocks that the file stores, so all files
-that store blocks of the same size are linked together. Keep in mind that even
-if there are multiple block-files chained together, the cache address points
-directly to the file that stores a given record. The chain is only used when
-looking for space to allocate a new record.
-
-To simplify allocation of disk space, it is only possible to store records that
-use from one to four actual blocks. If the total size of the record is bigger
-than that, another type of block-file must be used. For example, to store a
-string of 2420 bytes, three blocks of 1024 bytes are needed, so that particular
-string will go to the block-file that has blocks of 1KB.
-
-Another simplification of the allocation algorithm is that a piece of data is
-not going to cross the four block alignment boundary. In other words, if the
-bitmap says that block 0 is used, and everything else is free (state A), and we
-want to allocate space for four blocks, the new record will use blocks 4 through
-7 (state B), leaving three unused blocks in the middle. However, if after that
-we need to allocate just two blocks instead of four, the new record will use
-blocks 1 and 2 (state C).
-
-[<img alt="image"
-src="/developers/design-documents/network-stack/disk-cache/alloc2.PNG">](/developers/design-documents/network-stack/disk-cache/alloc2.PNG)
-
-There are a couple of fields on the header to help the process of allocating
-space for a new record. The empty field stores counters of available space per
-block type and hints stores the last scanned location per block type. In this
-context, a block type is the number of blocks requested for the allocation. When
-a file is empty, it can store up to X records of four blocks each (X being close
-to 64K / 4). After a record of one block is allocated, it is able be able to
-store X-1 records of four blocks, and one record of three blocks. If after that,
-a record of two blocks is allocated, the new capacity is X-1 records of four
-blocks and one record of one block, because the space that was available to
-store the record of three blocks was used to store the new record (two blocks),
-leaving one empty block.
-
-It is important to realize that once a record has been allocated, its size
-cannot be increased. The only way to grow a record that was already saved is to
-read it, then delete it from the file and allocate a new record of the required
-size.
-
-From the reliability point of view, having the header memory mapped allows us to
-detect scenarios when the application crashes while we are in the middle of
-modifying the allocation bitmap. The updating field of the header provides a way
-to signal that we are updating something on the headers, so that if the field is
-set when the file is open, the header must be checked for consistency.
-
-### Cache Entry
-
-An entry is basically a complete entity stored by the cache. It is divided in
-two main parts: the disk_cache::EntryStore stores the part that fully identifies
-the entry and doesn’t change very often, and the disk_cache::RankingsNode stores
-the part that changes often and is used to implement the eviction algorithm.
-The RankingsNode is always the same size (36 bytes), and it is stored on a
-dedicated type of block files (with blocks of 36 bytes). On the other hand, the
-EntryStore can use from one to four blocks of 256 bytes each, depending on the
-actual size of the key (name of the resource). In case the key is too long to be
-stored directly as part of the EntryStore structure, the appropriate storage
-will be allocated and the address of the key will be saved on the long_key
-field, instead of the full key.
-
-The other things stored within EntryStore are addresses of the actual data
-streams associated with this entry, the key’s hash and a pointer to the next
-entry that has the same low-order hash bits (and thus shares the same position
-on the index table).
-
-Whenever an entry is in use, its RankingsNode is marked as in-use so that when a
-new entry is read from disk we can tell if it was properly closed or not.
-
-### The Big Picture
-
-[<img alt="image"
-src="/developers/design-documents/network-stack/disk-cache/files4.PNG">](/developers/design-documents/network-stack/disk-cache/files4.PNG)
-
-This diagram shows a disk cache with 7 files on disk: the index file, 5
-block-files and one separate file. *data_1* and *data_4* are chained together so
-they store blocks of the same size (256 bytes), while *data_2* stores blocks of
-1KB and *data_3* stores blocks of 4 KB. The depicted entry has its key stored
-outside the EntryStore structure, and given that it uses two blocks, it must be
-between one and two kilobytes. This entry also has two data streams, one for the
-HTTP headers (less than 256 bytes) and another one for the actual payload (more
-than 16 KB so it lives on a dedicated file). All blue arrows indicate that a
-cache address is used to locate another piece of data.
-
-## Implementation Notes
-
-Chromium has two different implementations of the cache interfaces: while the
-main one is used to store info on a given disk, there is also a very simple
-implementation that doesn’t use a hard drive at all, and stores everything in
-memory. The in-memory implementation is used for the Incognito mode so that even
-if the application crashes it will be quite difficult to extract any information
-that was accessed while browsing in that mode.
-
-There are a few different types of caches (see
-[net/base/cache_type.h](http://src.chromium.org/viewvc/chrome/trunk/src/net/base/cache_type.h?view=markup)),
-mainly defined by their intended use: there is a media specific cache, the
-general purpose disk cache, and another one that serves as the back end storage
-for AppCache, in addition to the in-memory type already mentioned. All types of
-caches behave in a similar way, with the exception that the eviction algorithm
-used by the general purpose cache is not the same LRU used by the others.
-
-The regular cache implementation is located on disk_cache/backend_impl.cc and
-disk_cache/entry_impl.cc. Most of the files on that folder are actually related
-to the main implementation, except for a few that implement the in-memory cache:
-disk_cache/mem_backend_impl.cc and disk_cache/entry_impl.cc.
-
-### Lower Interface
-
-The lower interface of the disk cache (the one that deals with the OS) is
-handled mostly by two files: disk_cache/file.h and disk_cache/mapped_file.h,
-with separate implementations per operating system. The most notable requirement
-is support for partially memory-mapped files, but asynchronous interfaces and a
-decent file system level cache go a long way towards performance (we don’t want
-to replicate the work of the OS).
-
-To deal with all the details about block-file access, the disk cache keeps a
-single object that deals with all of them: a disk_cache::BlockFiles object. This
-object enables allocation and deletion of disk space, and provides
-disk_cache::File object pointers to other people so that they can access the
-information that they need.
-
-A StorageBlock is a simple template that represents information stored on a
-block-file, and it provides methods to load and store the required data from
-disk (based on the record’s cache address). We have two instantiations of the
-template, one for dealing with the EntryStore structure and another one for
-dealing with the RankingsNode structure. With this template, it is common to
-find code like entry-&gt;rankings()-&gt;Store().
-
-### Eviction
-
-Support for the eviction algorithm of the cache is implemented on
-disk_cache/rankings (and mem_rankings for the in-memory one), and the eviction
-itself is implemented on
-[disk_cache/eviction](http://src.chromium.org/viewvc/chrome/trunk/src/net/disk_cache/eviction.cc?view=markup).
-Right now we have a simple Least Recently Used algorithm that just starts
-deleting old entries once a certain limit is exceeded, and a second algorithm
-that takes reuse and age into account before evicting an entry. We also have the
-concept of transaction when one of the the lists is modified so that if the
-application crashes in the middle of inserting or removing an entry, next time
-we will roll the change back or forward so that the list is always consistent.
-
-In order to support reuse as a factor for evictions, we keep multiple lists of
-entries depending on their type: not reused, with low reuse and highly reused.
-We also have a list of recently evicted entries so that if we see them again we
-can adjust their eviction next time we need the space. There is a time-target
-for each list and we try to avoid eviction of entries without having the chance
-to see them again. If the cache uses only LRU, all lists except the not-reused
-are empty.
-
-### Buffering
-
-When we start writing data for a new entry we allocate a buffer of 16 KB where
-we keep the first part of the data. If the total length is less than the buffer
-size, we only write the information to disk when the entry is closed; however,
-if we receive more than 16 KB, then we start growing that buffer until we reach
-a limit for this stream (1 MB), or for the total size of all the buffers that we
-have. This scheme gives us immediate response when receiving small entries (we
-just copy the data), and works well with the fact that the total record size is
-required in order to create a new cache address for it. It also minimizes the
-number of writes to disk so it improves performance and reduces disk
-fragmentation.
-
-### Deleting Entries
-
-To delete entries from the cache, one of the Doom\*() methods can be used. All
-that they do is to mark a given entry to be deleted once all users have closed
-the entry. Of course, this means that it is possible to open a given entry
-multiple times (and read and write to it simultaneously). When an entry is
-doomed (marked for deletion), it is removed from the index table so that any
-attempt to open it again will fail (and creating the entry will succeed), even
-when an already created Entry object can still be used to read and write the old
-entry.
-
-When two objects are open at the same time, both users will see what the other
-is doing with the entry (there is only one “real” entry, and they see a
-consistent state of it). That’s even true if the entry is doomed after it was
-open twice. However, once the entry is created after it was doomed, we end up
-with basically two separate entries, one for the old, doomed entry, and another
-one for the newly created one.
-
-### Enumerations
-
-A good example of enumerating the entries stored by the cache is located at
-[src/net/url_request/url_request_view_cache_job.cc](http://src.chromium.org/viewvc/chrome/trunk/src/net/url_request/url_request_view_cache_job.cc?view=markup)
-. It should be noted that this interface is not making any statements about the
-order in which the entries are enumerated, so it is not a good idea to make
-assumptions about it. Also, it could take a long time to go through all the info
-stored on disk.
-
-### Sparse Data
-
-An entry can be used to store sparse data instead of a single, continuous
-stream. In this case, only two streams can be stored by the entry, a regular one
-(the first one), and a sparse one (the second one). Internally, the cache will
-distribute sparse chunks among a set of dedicated entries (child entries) that
-are linked together from the main entry (the parent entry). Each child entry
-will store a particular range of the sparse data, and inside that range we could
-have "holes" that have not been written yet. This design allows the user to
-store files of any length (even bigger than the total size of the cache), while
-the cache is in fact simultaneously evicting parts of that file, according to
-the regular eviction policy. Most of this logic is implemented on
-disk_cache/sparse_control (and disk_cache/mem_entry_impl for the in-memory
-case).
-
-### Dedicated Thread
-
-We have a dedicated thread to perform most of the work, while the public API is
-called on the regular network thread (the browser's IO thread).
-
-The reason for this dedicated thread is to be able to remove **any** potentially
-blocking call from the IO thread, because that thread serves the IPC messages
-with all the renderer and plugin processes: even if the browser's UI remains
-responsive when the IO thread is blocked, there is no way to talk to any
-renderer so tabs look unresponsive. On the other hand, if the computer's IO
-subsystem is under heavy load, any disk access can block for a long time.
-
-Note that it may be possible to extend the use of asynchronous IO and just keep
-using the same thread. However, we are not really using asynchronous IO for
-Posix (due to compatibility issues), and even in Windows, not every operation
-can be performed asynchronously; for instance, opening and closing a file are
-always synchronous operations, so they are subject to significant delays under
-the proper set of circumstances.
-
-Another thing to keep in mind is that we tend to perform a large number of IO
-operations, knowing that most of the time they just end up being completed by
-the system's cache. It would have been possible to use asynchronous operations
-all the time, but the code would have been much harder to understand because
-that means a lot of very fragmented state machines. And of course that doesn't
-solve the problem with Open/Close.
-
-As a result, we have a mechanism to post tasks from the main thread (IO thread),
-to a background thread (Cache thread), and back, and we forward most of the API
-to the actual implementation that runs on the background thread. See
-disk_cache/in_flight_io and disk_cache/in_flight_backend_io. There are a few
-methods that are not forwarded to the dedicated thread, mostly because they
-don't interact with the files, and only provide state information. There is no
-locking to access the cache, so these methods are generally racing with actual
-modifications, but that non-racy guarantee is not made by the API. For example,
-getting the size of a data stream (*entry::GetDataSize*()) is racing with any
-pending *WriteData* operation, so it may return the value before of after the
-write completes.
-
-Note that we have multiple instances of disk-caches, and they all have the same
-background thread.
-
-## Data Integrity
-
-There is a balance to achieve between performance and crash resilience. At one
-extreme, every unexpected failure will lead to unrecoverable corrupt information
-and at the other extreme every action has to be flushed to disk before moving on
-to be able to guarantee the correct ordering of operations. We didn’t want to
-add the complexity of a journaling system given that the data stored by the
-cache is not critical by definition, and doing that implies some performance
-degradation.
-
-The current system relies heavily on the presence of an OS-wide file system
-cache that provides adequate performance characteristics at the price of losing
-some deterministic guarantees about when the data actually reaches the disk (we
-just know that at some point, some part of the OS will actually decide that it
-is time to write the information to disk, but not if page X will get to disk
-before page Y).
-
-Some critical parts of the system are directly memory mapped so that, besides
-providing optimum performance, even if the application crashes the latest state
-will be flushed to disk by the system. Of course, if the computer crashes we’ll
-end up on a pretty bad state because we don’t know if some part of the
-information reached disk or not (each memory page can be in a different state).
-
-The most common problem if the system crashes is that the lists used by the
-eviction algorithm will be corrupt because some pages will have reached disk
-while others will effectively be on a “previous” state, still linking to entries
-that were removed etc. In this case, the corruption will not be detected at
-start up (although individual dirty entries will be detected and handled
-correctly), but at some point we’ll find out and proceed to discard the whole
-cache. It could be possible to start “saving” individual good entries from the
-cache, but the benefit is probably not worth the increased complexity. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/very-simple-backend/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/very-simple-backend/index.md
deleted file mode 100644
index 60a49c6a921..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/disk-cache/very-simple-backend/index.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-- - /developers/design-documents/network-stack/disk-cache
- - Disk Cache
-page_name: very-simple-backend
-title: Very Simple Backend
----
-
-[TOC]
-
-## Summary
-
-Proposed is a new backend for the disk cache, conforming to the interface in
-[Disk Cache](/developers/design-documents/network-stack/disk-cache). The new
-backend is purposefully very simple, using one file per cache entry, plus an
-index file. This backend will be useful as a testing baseline, as well as
-dealing with IO bottlenecks impairing mobile browsing performance on some
-platforms.
-
-Compared to the standard blockfile cache, this new design has benefits and
-goals:
-
-*It is more resilient under corruption from system crashes.* The new design
-periodically flushes its entire index, and swaps it in atomically. This single
-atomic operation, together with cache entries being in separate files similarly
-swapped in makes the implications of system crash much less serious; after
-system crash Chrome will start with a stale cache, rather than have to drop its
-entire cache as many users experience with the blockfile cache.
-*It does not delay launching network requests.* The current cache requires
-multiple context switches, and possibly blocking disk IO before launching
-requests that ultimately use the network. These delays average over 25ms on
-requests using the network, and about 14ms averaged over all requests on
-Windows. Without context switches or blocking disk IO, this can be entirely
-eliminated. On the Android platform, the slower flash controllers make these
-delays significantly slower, increasing this benefit of a very simple backend.
-*Lower resident set pressure and fewer IO operations.* Our disk format has
-256-512byte per entry records, plus rankings & index information of ~100bytes
-per entry in resident set pressure. Not all entries that are heavily used are
-contiguous, so paging pressure is in practice larger. The very simple cache
-stores only SMALLNUM bytes per entry in memory, contiguously, and does not
-normally access the disk in the critical path of a request where not required.
-As a result, the Very Simple Backend should maintain good performance even
-without good OS buffer cache.
-
-*Simpler.* The very simple cache explicitly avoids implementing a filesystem in
-chrome. Files are opened and either read or written from the beginning to end.
-No reallocations within files take place. The cache thread component of the very
-simple cache should be shorter and easier to maintain than the
-filesystem-in-chrome approach.
-Together with the above benefits and goals, the new design has some non-goals:
-*It is not a log structured cache.* While the IO performed by the Very Simple
-Cache is mostly sequential, it is not fundamentally log structured; in
-particular, the filesystem operations it performs are not log structured unless
-used on a filesystem that itself is log structured.
-*It is not a filesystem.* The disk cache delegates filesystem operations to the
-filesystem. As filesystems improve, or change for different devices, the disk
-cache will benefit simultaneously.
-
-## Status
-
-See [Bug 173381](https://code.google.com/p/chromium/issues/detail?id=173381) for
-status on this implementation, or [track the Internals-Network-Cache-Simple
-issue in
-crbug](https://code.google.com/p/chromium/issues/list?q=label:Internals-Network-Cache-Simple).
-For related designs covering performance tracking, see [Disk Cache Benchmarking
-& Performance
-Tracking](/developers/design-documents/network-stack/disk-cache/disk-cache-benchmarking).
-
-## External Interface
-
-[See the main disk cache design
-document.](/developers/design-documents/network-stack/disk-cache#TOC-External-Interface)
-
-## Structure on Disk
-
-Like the blockfile disk cache, the disk cache is stored in a single directory.
-There is one index file, and each entry is stored in a single file in that
-directory.
-An Entry Hash is a relatively short hash of the url, used for storage efficiency
-in index and entry naming. Two entries with the same Entry Hash cannot be
-stored. With a 40 bit per-user-salted SHA-2 of the url; collisions would occur
-only at one in a million probability with a million entry cache. Each cache
-entry is stored in a file named by the Entry Hash in hexadecimal, an underscore,
-and the backend stream number.
-The cache is stored in a single directory, with a file file 00index that
-contains data for initializing an in memory index used for faster cache
-performance. The index consists of entry hashes for records, together with
-simple eviction information.
-Format of Entry Files:
-
-* A magic number and version field.
-* The full url, length prefixed.
-* Chunks of data, length prefixed, compressed and checksummed.
-* An EOF record.
-
-## Implementation
-
-### IO Thread Operations
-
-The public API is called on the IO thread; and the cache maintains the index
-data on the IO thread as well. This allows for cache misses, and cache create
-operations to be performed at low latency. The index is updated in the IO thread
-as well.
-
-### Worker Pool Operations
-
-All IO operations in the simple cache are performed asynchronously on a worker
-thread pool.
-
-To reduce the critical path cost of creating new entries, the simple cache will
-keep a pool of newly created entries ready to move into final place; this
-permits the IO thread to update its index and provide a new entry at zero
-latency, with some cost in renames-into-place occurring later in the entries
-life cycle.
-
-### Index Flushing and Consistency Checking
-
-The index is flushed on shutdown, and periodically while running to guard
-against system crashes. On recovery from a system crash, the browser will have a
-stale index, and thus will need to periodically iterate over the cache directory
-to find entries in the directory not mentioned in the idex.
-
-### Operation without Index
-
-If startup speeds and startup IO is too costly, note that the simple backend can
-operate without the IO thread index by directly opening files in the directory.
-
-### Code Location
-
-[src/net/disk_cache/simple](https://chromium.googlesource.com/chromium/src/+/HEAD/net/disk_cache/simple/)
-
-## Potential Improvements
-
-### HTTP Metadata in Index
-
-Request conditionalization, freshness lifetime, and HTTP validator information
-could be stored in the index on the IO thread, greatly reducing latency required
-to serve requests.
-
-### Single File per Entry
-
-It's arguably not a very simple idea, but in practice combining the headers and
-the entry data into the same file makes atomic filesystem operations (renames,
-etc...) easier, while also making writes/reads of a single entry generally more
-sequential. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/http-authentication-throttling/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/http-authentication-throttling/index.md
deleted file mode 100644
index af9a4074fbc..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/http-authentication-throttling/index.md
+++ /dev/null
@@ -1,183 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: http-authentication-throttling
-title: HTTP Authentication Throttling
----
-
-## Problem statement
-
-Some users get locked out of proxies or servers after entering an invalid
-username/password combination because Chrome will immediately reissue all
-pending requests with the same invalid credentials.
-
-To prevent this from happening, only one request should be reissued. If
-authentication succeeds, all other pending requests can be reissued. If it
-fails, the user will be presented with another login prompt. If the request is
-cancelled, another pending request will be reissued.
-
-The downside is that this will introduce an RTT penalty for the other pending
-requests. However, that penalty will likely be dwarfed by the time to enter
-username/password, and the penalty is severe enough that the cost is likely
-worth it.
-
-**Implementation Choices**
-
-There are two general approaches for implementing this.
-a) Do the throttling in the network stack, with no changes to the URLRequest
-delegates. All pending requests are reissued from the perspective of
-ResourceDispatcherHost and LoginHandler, but are queued someplace such as
-HttpAuthController::MaybeGenerateAuthToken \[which can complete
-asynchronously\], with the state residing in the HttpAuthCache::Entry. If the
-authentication request succeeds, all pending requests continue down the network
-stack. If it fails, pretend that all of the other requests also were rejected by
-the server or proxy and send a 401 or 407 back up the network stack using the
-same auth challenge as before.
-
-b) Do the throttling in the LoginHandler, and only restart one URLRequest. To
-make this happen, we'll need to change LoginHandler so there is one per (domain,
-scheme, realm) tuple instead of one per URLRequest, and add a LoginHandlerTable
-to do the discovery/creation. If the outstanding request succeeds, reissue all
-other pending requests. If it fails, re-show all possible dialogs \[one per
-tab\]. If it is cancelled, reissue another pending request or kill the
-LoginHandler if none remain.
-
-Initially a) seemed like a more attractive option. All users of the networking
-stack would be able to take advantage of the behavior without having to
-implement their own throttling mechanism. It's also less of a change: we already
-do grouping of (domain, scheme, realm) tuples in the HttpAuthCache and have a
-natural queuing location at HttpAuthController::MaybeGenerateAuthToken.
-
-However, it has a number of issues which make it seem like the wrong approach:
-
-* If authentication fails, and the user cancels authentication, the
- pending requests will not contain the correct body of the 401 or 407
- response.
-* The NetLog and developer tools may show a number of requests which
- were not actually issued.
-* It's possible that not all consumers of the network stack want this
- behavior.
-* Only does throttling for HTTP, not FTP \[not sure if this is good or
- bad\].
-
-As a result, doing the throttling at the LoginHandler level makes more sense.
-It's also a more natural match for what's actually going on.
-
-**LoginHandler throttling**
-
-Instead of one LoginHandler per request, there will be one LoginHandler per
-(domain, scheme, realm). A LoginHandlerDirectory will maintain a map of
-LoginHandler's and manage their lifetime, and the LoginHandlerDirectory will be
-owned by the ResourceDispatcherHost.
-
-The LoginHandler interface will look like
-
-class LoginHandler {
-
-public:
-
-// Adds a request to be handled
-
-void AddRequest(URLRequest\* request);
-
-// Removes a request from being handled, done on cancellation.
-
-void RemoveRequest(URLRequest\* request);
-
-// Called when the user provides auth credentials.
-
-void OnCredentialsSupplied();
-
-// Called when the user cancels entering auth credentials.
-
-void OnUserCancel();
-
-// Called when authentication succeeds on a request.
-
-void OnAuthSucceeded(URLRequest\* request);
-
-// Called when authentication fails on a request.
-
-void OnAuthFailed(URLRequest\* request);
-
-// Called by LoginHandlerDirectory to see if it should free.
-
-bool IsEmpty() const;
-
-};
-
-The LoginHandler is a state machine, with four states.
-
-WAITING_FOR_USER_INPUT
-
-WAITING_FOR_USER_INPUT_COMPLETE TRYING_REQUEST
-
-TRYING_REQUEST_COMPLETE
-
-with perhaps a Nil or initialization state.
-
-AddRequest() will always queue the request, but it should not already be in the
-set of requests.
-
-If RemoveRequest() is called while in the WAITING_FOR_USER_INPUT or
-WAITING_FOR_USER_INPUT_COMPLETE state, it will remove from the set and remove a
-dialog if it is the only request for a particular tab. It will also remove the
-LoginHandler if it is the last request. If in the TRYING_REQUEST or
-TRYING_REQUEST_COMPLETE state, the request is simply removed from the set if it
-is not the currently attempted request. If it is the currently attempted
-request, then TRYING_REQUEST is re-entered with a different request.
-
-OnCredentialsSupplied() must be called during WAITING_FOR_USER_INPUT and will
-transition to WAITING_FOR_USER_INPUT_COMPLETE. This will also choose a request
-to try and enter TRYING_REQUEST.
-
-OnUserCancel() must be called during WAITING_FOR_USER_INPUT and will transition
-to WAITING_FOR_USER_INPUT_COMPLETE. This will cancel auth on all of the pending
-requests and display the contents of the 401/407 body.
-
-OnAuthSucceeded() must be called during the TRYING_REQUEST state, and will
-transition to TRYING_REQUEST_COMPLETE. This will reissue all other pending
-requests and close out the LoginHandler.
-
-OnAuthFailed() must be called during the TRYING_REQUEST state, will enter
-TRYING_REQUEST_COMPLETE, and will go back to WAITING_FOR_USER_INPUT. The pending
-request is moved back to the main set of pending requests.
-
-**Delaying credential entering into HttpAuthCache**
-
-Although the LoginHandler changes described above will throttle most unconfirmed
-authentication requests, there is still the chance that some will get through.
-
-While the LoginHandler is in the TRYING_REQUEST state, the username/password are
-entered into the HttpAuthCache::Entry before hearing back from the server or
-proxy about whether the results are successful. Any other URLRequest's issued
-during this period of time will use the unconfirmed username/password.
-
-If the credentials are entered on a successful response, then this problem goes
-away. ResourceDispatcherHost issued URLRequest's will likely fail, get a 401,
-and get added to the queue of pending requests in the appropriate LoginHandler.
-Other dispatched ones such as URLFetcher will simply fail.
-
-There is a race I just thought about which might annoy owners, and I don't have
-a good answer for. Assume that there is an outstanding request A which is
-waiting to hear back from the proxy if the authentication succeeded. A second
-request B comes in, notices no username/password in the HttpAuthCache and so
-does not add preemptive authentication and issues a raw GET. Request A completes
-successfully, fills in the HttpAuthCache with the credentials, goes back to the
-LoginHandler, reissues all requests and closes the LoginHandler. Then, Request B
-returns from the proxy with a 407 response code, since it provided no
-Authorization header. Since the LoginHandler has been destroyed, a new one is
-created and the user is presented with a login prompt again.
-
-One way to fix that case is to add a PENDING state to the HttpAuthCache::Entry
-when Request A is issued, and removed when it hears back from the proxy. Request
-B will be stalled at the MaybeGenerateAuthToken state when the entry is pending,
-and adds itself to a list in the entry. When it completes, all issues are
-continued either using preemptive authentication with the credentials in the
-cache entry \[if Request A succeeded\] or issued with no credentials if Request
-A failed. That still may result in a race in the failure case, however. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/http-cache/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/http-cache/index.md
deleted file mode 100644
index 13269592e80..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/http-cache/index.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: http-cache
-title: HTTP Cache
----
-
-[TOC]
-
-**Overview**
-
-The HTTP Cache is the module that receives HTTP(S) requests and decides when and
-how to fetch data from the [Disk
-Cache](/developers/design-documents/network-stack/disk-cache) or from the
-network. The cache lives in the browser process, as part of the network stack.
-It should not be confused with Blink's in-memory cache, which lives in the
-renderer process and it's tightly coupled with the resource loader.
-
-Logically the cache sits between the content-encoding logic and the
-transfer-encoding logic, which means that it deals with transfer-encoding
-properties and stores resources with the content-encoding set by the server.
-
-The cache implements the
-[HttpTransactionFactory](https://chromium.googlesource.com/chromium/src/+/HEAD/net/http/http_transaction_factory.h)
-interface, so an
-[HttpCache::Transaction](https://chromium.googlesource.com/chromium/src/+/HEAD/net/http/http_cache_transaction.h)
-(which is an implementation of
-[HttpTransaction](https://chromium.googlesource.com/chromium/src/+/HEAD/net/http/http_transaction.h))
-will be the transaction associated with the
-[URLRequestJob](https://chromium.googlesource.com/chromium/src/+/HEAD/net/url_request/url_request_job.h)
-used to fetch most
-[URLRequests](https://chromium.googlesource.com/chromium/src/+/HEAD/net/url_request/url_request.h).
-
-There's an instance of an
-[HttpCache](https://chromium.googlesource.com/chromium/src/+/HEAD/net/http/http_cache.h)
-for every profile (and for every isolated app). In fact, a profile may contain
-two instances of the cache: one for regular requests and another one for media
-requests.
-
-Note that because the HttpCache is the one in charge of serving requests either
-from disk or from the network, it actually owns the HttpTransactionFactory that
-creates network transactions, and the
-[disk_cache::Backend](https://chromium.googlesource.com/chromium/src/+/HEAD/net/disk_cache/disk_cache.h)
-that is used to serve requests from disk. When the HttpCache is destroyed
-(usually when the profile data goes away), both the disk backend and the network
-layer (HttpTransactionFactory) go away.
-
-There may be code outside of the cache that keeps a copy of the pointer to the
-disk cache backend. In that case, it is a requirement that the real ownership is
-maintained at all times, which means that such code has to be owned transitively
-by the cache (so that backend destruction happen synchronously with the
-destruction of the code that kept the pointer).
-
-## **Operation**
-
-The cache is responsible for:
-
-* Create and manage the disk cache backend.
-
-> This is mostly an initialization problem. The cache is created without a
-> backend (but with a backend factory), and the backend is created on-demand by
-> the first request that needs one. The HttpCache has all the logic to queue
-> requests until the backend is created.
-
-* Create HttpCache::Transactions.
-
-* Create and manage ActiveEntries that are used by
- HttpCache::Transactions to interact with the disk backend.
-
-> An ActiveEntry is a small object that represents a disk cache entry and all
-> the transactions that have access to it. The Writer, the list of Readers and
-> the list of pending transactions (waiting to become Writer or Readers) are
-> part of the ActiveEntry.
-
-> The cache has the code to create or open disk cache entries and place them on
-> an ActiveEntry. It also has all the logic to attach and remove a transaction
-> to and from ActiveEntry.
-
-* Enforce the cache lock.
-
-> The cache implements a single writer - multiple reader lock so that only one
-> network request for the same resource is in flight at any given time.
-
-> Note that the existence of the cache lock means that no bandwidth is wasted
-> re-fetching the same resource simultaneously. On the other hand, it forces
-> requests to wait until a previous request finishes downloading a resource (the
-> Writer) before they can start reading from it, which is particularly
-> troublesome for long lived requests. Simply bypassing the cache for subsequent
-> requests is not a viable solution as it will introduce consistency problems
-> when a renderer experiences the effect of going back in time, as in receiving
-> a version of the resource that is older than a version that it already
-> received (but which skipped the browser cache).
-
-The bulk of the logic of the HTTP cache is actually implemented by the cache
-transaction.
-
-## **Sparse Entries**
-
-The HTTP Cache supports using spares entries for any resource. Sparse entries
-are generally used by media resources (think large video or audio files), and
-the general idea is to be able to store only some parts of the resource, and
-being able to serve those parts back from disk.
-
-The mechanism that is used to tell the cache that it should create a sparse
-entry instead of a regular entry is by issuing a byte-range request from the
-caller. That tells the cache that the caller is prepared to deal with byte
-ranges, so the cache may store byte ranges. Note that if the cache already has a
-resource stored for the requested URL, issuing a byte range request will not
-"upgrade" that resource to be a sparse entry; in fact, in general there is no
-way to transform a regular entry into a sparse entry or vice-versa.
-
-Once the HttpCache creates a sparse entry, the disk cache backend will be in
-charge of storing the byte ranges in an efficient way, and it will be able to
-evict part of a resource without throwing the whole entry away. For example,
-when watching a long video, the backend can discard the first part of the movie
-while still storing the part that is currently being received (and presented to
-the user). If the user goes back a few minutes, content can be served from the
-cache. If the user seeks to a portion that was already evicted, that part the
-video can be fetched again.
-
-At any given time, it is possible for the cache to have stored a set of sections
-of a resource (which don't necessarily match any actual byte-range requested by
-the user) interspersed with missing data. In order to fulfill a given request,
-the HttpCache may have to issue a series of byte-range network requests for the
-missing parts, while returning data as needed either from disk or from the
-network. In other words, when dealing with sparse entries, the
-HttpCache::Transaction will synthesize network byte-range requests as needed.
-
-## **Truncated Entries**
-
-A second scenario where the cache will generate byte-range request is when a
-regular entry (not sparse) was not completely received before the connection was
-lost (or the caller cancelled the request). In that case, the cache will attempt
-to serve the first part of the resource from disk, and issue a byte range
-request for the remainder of the resource. A large part of the logic to handle
-truncated entries is the same logic needed to support spares entries.
-
-## **Byte-Range Requests**
-
-As explained above, byte-range requests are used to trigger the creation of
-sparse entries (if the resource was not previously stored). From the user point
-of view, the cache will transparently fulfill any combination of byte-range
-requests and regular requests either from sparse, truncated or normal entries.
-Needless to say, if a client uses byte-range requests it should be prepared to
-deal with the implications of that request, as having to determine when requests
-can be combined together, what a range applies to (over the wire bytes) etc.
-
-## **HttpCache::Transaction**
-
-The bulk of the cache logic is implemented by the cache transaction. At the
-center of the implementation there is a very large state machine (probably the
-most common pattern in the network stack, given the asynchronous nature of the
-problem). Note that there's a block of comments that document the most common
-flow patterns for the state machine, just before the main switch implementation.
-
-This is a general (not exhaustive) diagram of the state machine:
-
-[<img alt="image"
-src="/developers/design-documents/network-stack/http-cache/t.png">](/developers/design-documents/network-stack/http-cache/t.png)
-
-This diagram is not meant to track the latest version of the code, but rather to
-provide a rough overview of what the state machine transitions look like. The
-flow is relatively straight forward for regular entries, but the fact that the
-cache can generate a number of network requests to fulfill a single request that
-involves sparse entries make it so that there is a big loop going back to
-START_PARTIAL_CACHE_VALIDATION. Remember that each individual network request
-can fail, or the server may have a more recent version of the resource...
-although in general, that kind of server behavior while we are working with a
-request will result in an error condition. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/http-cache/t.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/http-cache/t.png.sha1
deleted file mode 100644
index 183df4b1ce9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/http-cache/t.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0b7ce019fae7eb25fa5d54246b34093128efcd05 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/http-pipelining/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/http-pipelining/index.md
deleted file mode 100644
index 3916011b017..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/http-pipelining/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: http-pipelining
-title: HTTP Pipelining
----
-
-## Objective
-
-Speed up Chrome's network stack by enabling HTTP Pipelining. Pipelining issues
-multiple requests over a single connection without waiting for a response.
-
-## Risks
-
-* Broken servers. Servers may ignore pipelined requests or corrupt the
- responses.
-* Broken proxies. May cause the same problems. Some users are behind
- "transparent proxies," where the requests are proxied even though
- the user has not explicitly specified a proxy in their system
- configuration.
-* Front of queue blocking. The first request in a pipeline may block
- other requests in the pipeline. The net result of pipelining may be
- slower page loads.
-
-## Mitigation
-
-Response headers must have the following properties:
-
-* HTTP/1.1
-* Determinable content length, either through explicit Content-Length
- or chunked encoding
-* A keep-alive connection (implicit with HTTP/1.1)
-* No authentication
-
-Pipelining does not begin until these criteria have been met for an origin (host
-and port pair). If at any point one of these fail, the origin is black-listed in
-the client. If an origin has successfully pipelined before, it is remembered and
-pipelining begins immediately on next use.
-
-## Status
-
-The option to enable pipelining has been removed from Chrome, as there are known
-crashing bugs and known front-of-queue blocking issues. There are also a large
-number of servers and middleboxes that behave badly and inconsistently when
-pipelining is enabled. Until these are resolved, it's recommended nobody uses
-pipelining. Doing so currently requires a custom build of Chromium. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/index.md
deleted file mode 100644
index 6143c26d7f3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/index.md
+++ /dev/null
@@ -1,298 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: network-stack
-title: Network Stack
----
-
-**Warning:** This document is somewhat outdated. See
-<https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/life-of-a-url-request.md>
-for more modern information.
-
-[TOC]
-
-## Overview
-
-The network stack is a mostly single-threaded cross-platform library primarily
-for resource fetching. Its main interfaces are `URLRequest` and
-`URLRequestContext`. `URLRequest`, as indicated by its name, represents the
-request for a [URL](http://en.wikipedia.org/wiki/URL). `URLRequestContext`
-contains all the associated context necessary to fulfill the URL request, such
-as [cookies](http://en.wikipedia.org/wiki/HTTP_cookie), host resolver, proxy
-resolver, [cache](/developers/design-documents/network-stack/http-cache), etc.
-Many URLRequest objects may share the same URLRequestContext. Most `net` objects
-are not threadsafe, although the disk cache can use a dedicated thread, and
-several components (host resolution, certificate verification, etc.) may use
-unjoined worker threads. Since it primarily runs on a single network thread, no
-operation on the network thread is allowed to block. Therefore we use
-non-blocking operations with asynchronous callbacks (typically
-`CompletionCallback`). The network stack code also logs most operations to
-`NetLog`, which allows the consumer to record said operations in memory and
-render it in a user-friendly format for debugging purposes.
-
-Chromium developers wrote the network stack in order to:
-
-* Allow coding to cross-platform abstractions
-* Provide greater control than would be available with higher-level
- system networking libraries (e.g. WinHTTP or WinINET)
- * Avoid bugs that may exist in system libraries
- * Enable greater opportunity for performance optimizations
-
-## Code Layout
-
-* net/base - Grab bag of `net` utilities, such as host resolution,
- cookies, network change detection,
- [SSL](http://en.wikipedia.org/wiki/Transport_Layer_Security).
-* net/disk_cache - [Cache for web
- resources](/developers/design-documents/network-stack/disk-cache).
-* net/ftp - [FTP](http://en.wikipedia.org/wiki/File_Transfer_Protocol)
- implementation. Code is primarily based on the old HTTP
- implementation.
-* net/http -
- [HTTP](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol)
- implementation.
-* net/ocsp -
- [OCSP](http://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol)
- implementation when not using the system libraries or if the system
- does not provide an OCSP implementation. Currently only contains an
- NSS based implementation.
-* net/proxy - Proxy ([SOCKS](http://en.wikipedia.org/wiki/SOCKS) and
- HTTP) configuration, resolution, script fetching, etc.
-* net/quic - [QUIC](/quic) implementation.
-* net/socket - Cross-platform implementations of
- [TCP](http://en.wikipedia.org/wiki/Transmission_Control_Protocol)
- sockets, "SSL sockets", and socket pools.
-* net/socket_stream - socket streams for WebSockets.
-* net/spdy - HTTP2 (and its predecessor) [SPDY](/spdy) implementation.
-* net/url_request - `URLRequest`, `URLRequestContext`, and
- `URLRequestJob` implementations.
-* net/websockets -
- [WebSockets](http://en.wikipedia.org/wiki/WebSockets)
- implementation.
-
-## Anatomy of a Network Request (focused on HTTP)
-
-[<img alt="image"
-src="/developers/design-documents/network-stack/Chromium%20HTTP%20Network%20Request%20Diagram.svg">](/developers/design-documents/network-stack/Chromium%20HTTP%20Network%20Request%20Diagram.svg)
-
-### URLRequest
-
-```none
-class URLRequest {
- public:
-  // Construct a URLRequest for |url|, notifying events to |delegate|.
-  URLRequest(const GURL& url, Delegate* delegate);
-  
-  // Specify the shared state
-  void set_context(URLRequestContext* context);
-  // Start the request. Notifications will be sent to |delegate|.
-  void Start();
-  // Read data from the request.
-  bool Read(IOBuffer* buf, int max_bytes, int* bytes_read);
-};
-class URLRequest::Delegate {
- public:
-  // Called after the response has started coming in or an error occurred.
-  virtual void OnResponseStarted(...) = 0;
-  // Called when Read() calls complete.
-  virtual void OnReadCompleted(...) = 0;
-};
-```
-
-When a `URLRequest` is started, the first thing it does is decide what type of
-`URLRequestJob` to create. The main job type is the `URLRequestHttpJob` which is
-used to fulfill http:// requests. There are a variety of other jobs, such as
-`URLRequestFileJob` (file://), `URLRequestFtpJob` (ftp://), `URLRequestDataJob`
-(data://), and so on. The network stack will determine the appropriate job to
-fulfill the request, but it provides two ways for clients to customize the job
-creation: `URLRequest::Interceptor` and `URLRequest::ProtocolFactory`. These are
-fairly redundant, except that `URLRequest::Interceptor`'s interface is more
-extensive. As the job progresses, it will notify the `URLRequest` which will
-notify the `URLRequest::Delegate` as needed.
-
-### URLRequestHttpJob
-
-URLRequestHttpJob will first identify the cookies to set for the HTTP request,
-which requires querying the `CookieMonster` in the request context. This can be
-asynchronous since the CookieMonster may be backed by an
-[sqlite](http://en.wikipedia.org/wiki/SQLite) database. After doing so, it will
-ask the request context's `HttpTransactionFactory` to create a
-`HttpTransaction`. Typically, the
-`[HttpCache](/developers/design-documents/network-stack/http-cache)` will be
-specified as the `HttpTransactionFactory`. The `HttpCache` will create a
-`HttpCache::Transaction` to handle the HTTP request. The
-`HttpCache::Transaction` will first check the `HttpCache` (which checks the
-[disk cache](/developers/design-documents/network-stack/disk-cache)) to see if
-the cache entry already exists. If so, that means that the response was already
-cached, or a network transaction already exists for this cache entry, so just
-read from that entry. If the cache entry does not exist, then we create it and
-ask the `HttpCache`'s `HttpNetworkLayer` to create a `HttpNetworkTransaction` to
-service the request. The `HttpNetworkTransaction` is given a
-`HttpNetworkSession` which contains the contextual state for performing HTTP
-requests. Some of this state comes from the `URLRequestContext`.
-
-### HttpNetworkTransaction
-
-```none
-class HttpNetworkSession {
- ...
- private:
-  // Shim so we can mock out ClientSockets.
-  ClientSocketFactory* const socket_factory_;
-  // Pointer to URLRequestContext's HostResolver.
-  HostResolver* const host_resolver_;
-  // Reference to URLRequestContext's ProxyService
-  scoped_refptr<ProxyService> proxy_service_;
-  // Contains all the socket pools.
-  ClientSocketPoolManager socket_pool_manager_;
-  // Contains the active SpdySessions.
-  scoped_ptr<SpdySessionPool> spdy_session_pool_;
-  // Handles HttpStream creation.
-  HttpStreamFactory http_stream_factory_;
-};
-```
-
-`HttpNetworkTransaction` asks the `HttpStreamFactory` to create a `HttpStream`.
-The `HttpStreamFactory` returns a `HttpStreamRequest` that is supposed to handle
-all the logic of figuring out how to establish the connection, and once the
-connection is established, wraps it with a HttpStream subclass that mediates
-talking directly to the network.
-
-```none
-class HttpStream {
- public:
-  virtual int SendRequest(...) = 0;
-  virtual int ReadResponseHeaders(...) = 0;
-  virtual int ReadResponseBody(...) = 0;
-  ...
-};
-```
-
-Currently, there are only two main `HttpStream` subclasses: `HttpBasicStream`
-and `SpdyHttpStream`, although we're planning on creating subclasses for [HTTP
-pipelining](http://en.wikipedia.org/wiki/HTTP_pipelining). HttpBasicStream
-assumes it is reading/writing directly to a socket. SpdyHttpStream reads and
-writes to a `SpdyStream`. The network transaction will call methods on the
-stream, and on completion, will invoke callbacks back to the
-`HttpCache::Transaction` which will notify the `URLRequestHttpJob` and
-`URLRequest` as necessary. For the HTTP pathway, the generation and parsing of
-http requests and responses will be handled by the `HttpStreamParser`. For the
-SPDY pathway, request and response parsing are handled by `SpdyStream` and
-`SpdySession`. Based on the HTTP response, the `HttpNetworkTransaction` may need
-to perform [HTTP
-authentication](/developers/design-documents/http-authentication). This may
-involve restarting the network transaction.
-
-### HttpStreamFactory
-
-`HttpStreamFactory` first does proxy resolution to determine whether or not a
-proxy is needed. The endpoint is set to the URL host or the proxy server.
-`HttpStreamFactory` then checks the `SpdySessionPool` to see if we have an
-available `SpdySession` for this endpoint. If not, then the stream factory
-requests a "socket" (TCP/proxy/SSL/etc) from the appropriate pool. If the socket
-is an SSL socket, then it checks to see if
-[NPN](https://tools.ietf.org/id/draft-agl-tls-nextprotoneg-01.txt) indicated a
-protocol (which may be SPDY), and if so, uses the specified protocol. For SPDY,
-we'll check to see if a `SpdySession` already exists and use that if so,
-otherwise we'll create a new `SpdySession` from this SSL socket, and create a
-`SpdyStream` from the `SpdySession`, which we wrap a `SpdyHttpStream` around.
-For HTTP, we'll simply take the socket and wrap it in a `HttpBasicStream`.
-
-#### Proxy Resolution
-
-`HttpStreamFactory` queries the `ProxyService` to return the `ProxyInfo` for the
-GURL. The proxy service first needs to check if it has an up-to-date proxy
-configuration. If not, it uses the `ProxyConfigService` to query the system for
-the current proxy settings. If the proxy settings are set to no proxy or a
-specific proxy, then proxy resolution is simple (we return no proxy or the
-specific proxy). Otherwise, we need to run a [PAC
-script](http://en.wikipedia.org/wiki/Proxy_auto-config) to determine the
-appropriate proxy (or lack thereof). If we don't already have the PAC script,
-then the proxy settings will indicate we're supposed to use [WPAD
-auto-detection](http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol),
-or a custom PAC url will be specified, and we'll fetch the PAC script with the
-`ProxyScriptFetcher`. Once we have the PAC script, we'll execute it via the
-`ProxyResolver`. Note that we use a shim `MultiThreadedProxyResolver` object to
-dispatch the PAC script execution to threads, which run a `ProxyResolverV8`
-instance. This is because PAC script execution may block on host resolution.
-Therefore, in order to prevent one stalled PAC script execution from blocking
-other proxy resolutions, we allow for executing multiple PAC scripts
-concurrently (caveat: [V8](http://en.wikipedia.org/wiki/V8_(JavaScript_engine))
-is not threadsafe, so we acquire locks for the javascript bindings, so while one
-V8 instance is blocked on host resolution, it releases the lock so another V8
-instance can execute the PAC script to resolve the proxy for a different URL).
-
-#### Connection Management
-
-After the `HttpStreamRequest` has determined the appropriate endpoint (URL
-endpoint or proxy endpoint), it needs to establish a connection. It does so by
-identifying the appropriate "socket" pool and requesting a socket from it. Note
-that "socket" here basically means something that we can read and write to, to
-send data over the network. An SSL socket is built on top of a transport
-([TCP](http://en.wikipedia.org/wiki/Transmission_Control_Protocol)) socket, and
-encrypts/decrypts the raw TCP data for the user. Different socket types also
-handle different connection setups, for HTTP/SOCKS proxies, SSL handshakes, etc.
-Socket pools are designed to be layered, so the various connection setups can be
-layered on top of other sockets. `HttpStream` can be agnostic of the actual
-underlying socket type, since it just needs to read and write to the socket. The
-socket pools perform a variety of functions-- They implement our connections per
-proxy, per host, and per process limits. Currently these are set to 32 sockets
-per proxy, 6 sockets per destination host, and 256 sockets per process (not
-implemented exactly correctly, but good enough). Socket pools also abstract the
-socket request from the fulfillment, thereby giving us "late binding" of
-sockets. A socket request can be fulfilled by a newly connected socket or an
-idle socket ([reused from a previous http
-transaction](http://en.wikipedia.org/wiki/HTTP_persistent_connection)).
-
-#### Host Resolution
-
-Note that the connection setup for transport sockets not only requires the
-transport (TCP) handshake, but probably already requires host resolution.
-`HostResolverImpl` uses assorted mechanisms including getaddrinfo() to perform
-host resolutions, which is a blocking call, so the resolver invokes these calls
-on unjoined worker threads. Typically host resolution usually involves
-[DNS](http://en.wikipedia.org/wiki/Domain_Name_System) resolution, but may
-involve non-DNS namespaces such as
-[NetBIOS](http://en.wikipedia.org/wiki/NetBIOS)/[WINS](http://en.wikipedia.org/wiki/Windows_Internet_Name_Service).
-Note that, as of time of writing, we cap the number of concurrent host
-resolutions to 8, but are looking to optimize this value. `HostResolverImpl`
-also contains a `HostCache` which caches up to 1000 hostnames.
-
-#### SSL/TLS
-
-SSL sockets require performing SSL connection setup as well as certificate
-verification. Except on iOS, Chromium uses
-[BoringSSL](https://boringssl.googlesource.com/boringssl/) to handle the SSL
-connection logic. However, we use platform specific APIs for certificate
-verification. We are moving towards using a certificate verification cache as
-well, which will consolidate multiple requests for certificate verification of
-the same certificate into a single certificate verification job and cache the
-results for a period of time.
-
-*Danger: Outdated*
-
-`SSLClientSocketNSS` roughly follows this sequence of events (ignoring advanced
-features like [Snap
-Start](http://tools.ietf.org/html/draft-agl-tls-snapstart-00) or
-[DNSSEC](http://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions)
-based certificate verification):
-
-* Connect() is called. We set up NSS's SSL options based on
- `SSLConfig` specified configuration or preprocessor macros. Then we
- kickoff the handshake.
-* Handshake completes. Assuming we didn't hit any errors, we proceed
- to verify the server's certificate using `CertVerifier`. Certificate
- verification may take some amount of time, so `CertVerifier` uses
- the `WorkerPool` to actually call `X509Certificate::Verify()`, which
- is implemented using platform specific APIs.
-
-Note that Chromium has its own NSS patches which support some advanced features
-which aren't necessarily in the system's NSS installation, such as support for
-[NPN](http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-00), [False
-Start](http://tools.ietf.org/search/draft-bmoeller-tls-falsestart-00), Snap
-Start , [OCSP stapling](http://en.wikipedia.org/wiki/OCSP_Stapling), etc.
-
-TODO: talk about network change notifications \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/netlog/NetLog1.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/netlog/NetLog1.png.sha1
deleted file mode 100644
index 2735d9b4906..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/netlog/NetLog1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3bd5a144a3671fb4066522f00220016c002a64dc \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/netlog/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/netlog/index.md
deleted file mode 100644
index edcd6c083c8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/netlog/index.md
+++ /dev/null
@@ -1,223 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: netlog
-title: "NetLog: Chrome\u2019s network logging system"
----
-
-**Eric Roman**
-
-**Matt Menke**
-
-**Overview**
-**NetLog is an event logging mechanism for Chrome’s network stack to help debug problems and analyze performance. It enables a “capture → dump → analyze” style of workflow similar to tools like tcpdump.**
-**Here is a typical use case:**
-
-1. **User enables network logging**
-2. **User reproduces a problem**
-3. **User uploads the log file to a bug report**
-4. **Developer analyzes the log file to see what happened**
-
-**Under the hood Chrome’s network stack has been instrumented to emit events at various interesting trace points. This event stream can be watched by observers to do interesting things with the data. Some of Chrome’s NetLog observers are:**
-
-* **([file_net_log_observer.cc](https://cs.chromium.org/chromium/src/net/log/file_net_log_observer.h))
- Serializes the event stream to a JSON file that can be loaded by the
- [Catapult NetLog
- Viewer](https://chromium.googlesource.com/catapult/+/HEAD/netlog_viewer/).**
-* **(net_internals_ui.cc) \[[Removed in
- 2018](https://bugs.chromium.org/p/chromium/issues/detail?id=678391&desc=2#c18)\]
- ~~Forwards events to the JavaScript application
- chrome://net-internals. This app can visualize the data and also
- export it to a file~~**
-
-**Goals of NetLog**
-
-* **Net Logging is off by default**
-* **Net Logging does not affect performance when off**
-* **Net Logging support ships with official builds of Chrome**
-* **Events are easily serialized/deserialized to disk**
-
-**Non-Goals**
-**NetLog is intended solely for logging.**
-**Features needing reliable network information should never be built on top of NetLog. It may be tempting to add an observer of NetLog as a quick hack to glean some internal state (since you circumvent having to create a proper interface and plumb it deep into the network stack). But that is wrong, and it will break. Instead, you should add an interface to NetworkDelegate, complete with regression tests and documentation.**
-**Think of NetLog as a fancy way of writing:**
-**LOG(INFO) &lt;&lt; “Some network event; bla bla bla”;**
-**It would be silly if any feature broke simply because you moved around such a logging statement or changed its format slightly!**
-**Similarly, we want net logging to be easy to add/edit so developers can instrument problem areas as needed.**
-**Terminology**
-**There are a couple of terms Chrome engineers use when talking about this domain. They sound similar but have slightly different meanings!**
-
-* **“netlog”: The C++ mechanism that exposes the network event stream
- (in particular, net::NetLog).**
-* **“net internals”: This refers specifically to the
- chrome://net-internals application. It *used to be* a visualizer for
- the network event stream. This is also called “about net-internals”
- verbally (in reference to the URL about:net-internals).**
-* **“netinternals dump”, or *"netlog dump"*: A JSON file containing a
- serialized event stream. The usual way to create these dumps is
- using the export functionality on chrome://net-export. However dumps
- can also be generated by launching Chrome with the command line flag
- --log-net-log=*FILENAME*.**
-
-**Structure of a NetLog event**
-**On the C++ side of things, events are represented by a net::NetLog::Entry. This in-memory representation is intended to be easily serialized to JSON.**
-**We try not to serialize events to JSON until it is absolutely necessary (most
-of the time there are no consumers of the events so we don't have to). When we
-do need to serialize the events, this is the JSON format that we use:**
-
-**<table>**
-**<tr>**
-**<td>Field</td>**
-**<td>Type</td>**
-**<td>Description</td>**
-**</tr>**
-**<tr>**
-**<td>time</td>**
-**<td>string</td>**
-**<td>The time in milliseconds when the event occurred.</td>**
-**<td> This is a time tick count and not a unix timestamp. However it is easily convertible given the time tick offset (time ticks are independent of system clock adjustments, guaranteeing that our timestamps don't go backwards)</td>**
-**<td> Another oddity is that despite being a numeric quantity, we encode time as a string. This is to avoid precision loss due to Chrome’s JSON stringifier.</td>**
-**</tr>**
-**<tr>**
-**<td>type</td>**
-**<td>number</td>**
-**<td>The ID of the event type. These are enumerated in <a href="https://cs.chromium.org/chromium/src/net/log/net_log_event_type_list.h">net_log_event_type_list.h</a></td>**
-**</tr>**
-**<tr>**
-**<td>source</td>**
-**<td>object</td>**
-**<td>This field identifies which entity emitted the event. For instance this might identify a particular URLRequest.</td>**
-**<td> The event stream is a flat sequence of events, which has intermixed starts and completions for all sorts of asynchronous events (potentially happening across multiple threads).</td>**
-**<td> The usefulness of source is to be able to group these events into logical blocks with a serial control flow.</td>**
-**<td> The source object itself is comprised of two sub-fields “id” and “type”. The “id” is unique across all types. The type field is included as a convenience so that processing the event stream can be done in a stateless manner.</td>**
-**<td> The list of possible source types is enumerated in <a href="https://cs.chromium.org/chromium/src/net/log/net_log_source_type_list.h?q=net_log_source_type_list.h&sq=package:chromium&dr">net_log_source_type_list.h</a></td>**
-**</tr>**
-**<tr>**
-**<td>phase</td>**
-**<td>number</td>**
-**<td>This enumeration can be one of BEGIN, END, NONE.</td>**
-**<td> Let's say you wanted to log the duration of a URLRequest by logging the start and then the end:</td>**
-**<td> One way to do that would be to define two event types: URL_REQUEST_BEGIN and URL_REQUEST_END. This certainly works, however it is inconvenient when doing automated analysis or hierarchical grouping, since it requires knowing which event pairs complement each other.</td>**
-**<td> To address this, we prefer to define a single event type, say URL_REQUEST, and emit the starting event with phase=BEGIN, and the terminating event with phase=END</td>**
-**<td> (phase=END events are assumed to terminate the most recent phase=BEGIN of the same type, within the same source.)</td>**
-**</tr>**
-**<tr>**
-**<td>params</td>**
-**<td>object</td>**
-**<td>This is an optional field.</td>**
-**<td> When provided, it represents event-specific parameters. For example, when starting a URL request, we smuggle the load flags, URL and priority of the request into the params structure. The visualizer knows how to pretty print the parameters for certain event types. For everything else it just dumps the JSON in a readable fashion.</td>**
-**</tr>**
-**</table>**
-
-**How network events are emitted**
-**net::NetLog is the interface for emitting NetLog events.**
-**Code throughout src/net/\* that needs to emit network events must be passed a
-pointer to a net::NetLog to send the events to.**
-
-**[<img alt="image"
-src="/developers/design-documents/network-stack/netlog/NetLog1.png">](/developers/design-documents/network-stack/netlog/NetLog1.png)**
-
-**Most commonly, this net::NetLog dependency is passed via a net::BoundNetLog parameter rather than directly as a net::NetLog\*. This is a wrapper to “bind” the same source parameter to each event output to the stream. You can think of it like creating a private event stream for a single entity. Read more about this in [net_log.h](https://cs.chromium.org/chromium/src/net/log/net_log.h?type=cs&sq=package:chromium&g=0)**
-**Ultimately though, net::NetLog is just a boring interface and doesn’t actually do anything.**
-**In the Chrome browser, the concrete implementation of net::NetLog used is [ChromeNetLog](https://cs.chromium.org/chromium/src/components/net_log/chrome_net_log.h). We configure things so that all network logging events for all browser profiles flow through a single instance of ChromeNetLog. ChromeNetLog is responsible for forwarding this event stream on to other interested parties via an observer mechanism.**
-**As was alluded to earlier in the overview, [FileNetLogObserver ](https://cs.chromium.org/chromium/src/net/log/file_net_log_observer.h)is implemented as one such observer (which serializes the network events to a JSON file).**
-**How custom parameters are attached to events**
-**Custom parameters are specified by a base::Value\*. Value is used to represent a hierarchy of nodes, that maps directly into JSON; it has all the expected building blocks -- dictionaries, strings, numbers, arrays. See [values.h](https://cs.chromium.org/chromium/src/base/values.h) for more details.**
-**For the sake of efficiency, you do not directly create a base::Value\* when emitting events. Rather, you pass in a Callback which knows how to build the Value\*, in case one is needed.**
-**This decoupling allows deferring the creation of Values until really necessary. This is good since, in the common case when not exporting events, we simply don’t need that data. Creating the custom Value parameters is not free since it involves copying internal state into a new Value\* hierarchy.**
-makes it easy to piece things together without needing to define helper structures!** **You are guaranteed that the parameter callback will only be invoked synchronously before the return of the logging function. We use a** **Callback for convenience, since** **Bind
-Here is an example of how to emit an event with custom parameters:**
-net_log_.BeginEvent(**
-NetLog::TYPE_URL_REQUEST_START_JOB,**
-base::Bind(&NetLogURLRequestStartCallback,**
-&url(), &method_, load_flags_, priority_));**
-By the time BeginEvent returns, NetLogURLRequestStartCallback() will have been invoked if-and-only-if the Value\* parameter was needed. That is why it is safe for the callback to take pointers to url() and method_ (pointers are preferred in this case to avoid making unnecessary copies).**
-Here is what the bound function might look like:**
-Value\* NetLogURLRequestStartCallback(const GURL\* url, const std::string\* method, int load_flags, RequestPriority priority, NetLog::LogLevel) {**
-DictionaryValue\* dict = new DictionaryValue(); dict-&gt;SetString("url", url-&gt;possibly_invalid_spec()); dict-&gt;SetString("method", \*method); dict-&gt;SetInteger("load_flags", load_flags); dict-&gt;SetInteger("priority", static_cast&lt;int&gt;(priority)); return dict; }**
-What does NetLog actually log?**
-The logging is subject to change, but in general we try to log whatever is useful for debugging.**
-Admittedly that description isn’t very helpful.**
-… let me give some examples of what we currently log:**
-
-* Queueing delay to schedule DNS resolves to threads**
-* Stalls due to exceeding socket pool limits**
-* Attempts to do a TCP connect to an IP address**
-* Speculative DNS resolves**
-* Proxy resolution**
-* Cache hits for DNS resolves**
-* Reads/writes from disk cache**
-* Network change events**
-* Proxy configuration change events**
-* Stalls due to Chrome extensions pausing requests**
-* Errors**
-
-The sorts of events emitted are application specific. NetLog does not aim to replace lower-level network tools like packet captures (i.e. tcpdump). Rather it focuses on application level logic and caches which cannot possibly be known at the lower layers. There is some overlap though, since NetLog can optionally capture bytes sent/received over sockets, as well as the decrypted bytes for secure channels.**
-chrome://net-internals (aka about:net-internals)**
-Until 2018, net-internals was visualizer for the NetLog event stream. It can be used both in real-time, and also to load up post-mortem NetLog dumps.**
-Most of the data displayed by net-internals comes from the NetLog event stream. When you load about:net-internals it installed an observer into ChromeNetLog (inside the browser process) which serializes network events to JSON and sends them over IPC to the renderer running about:net-internals application.**
-about:net-internals is itself a JavaScript application, whose code lived under [src/chrome/browser/resources/net_internals/](https://cs.chromium.org/chromium/src/chrome/browser/resources/net_internals/)**
-Some of the other data displayed by net-internals comes by polling other state
-functions. For instance the “DNS cache” listed on about:net-internals is
-obtained by polling the browser for the full list, rather than by an event-based
-mechanism.**
-
-**In 2018, the NetLog Viewer was removed from Chrome and moved to an external
-repository:**
-<https://github.com/catapult-project/catapult/tree/master/netlog_viewer>. The
-move was made for a number of reasons, including reducing installer size and
-attack surface. Perhaps most importantly, WebUI-run JavaScript is subject to
-many tight restrictions (e.g. no external libraries) which made it hard to
-improve and maintain. As an external application running in an untrusted web
-context, these restrictions can be relaxed.
-
-***Limiting Log Size***
-
-**[FileNetLogObserver::FileWriter](https://source.chromium.org/chromium/chromium/src/+/HEAD:net/log/file_net_log_observer.cc;l=238;drc=0afff123401318329000bfe34af0cde12ce3488c;bpv=1;bpt=1) explains the implementation of the basic "circular" log: To accommodate the request for a size-limited JSON file, instead of writing a single JSON output file initially, Chrome instead creates a folder full of event-containing JSON fragment files (10 by default) that are overwritten on a least-recently-written basis. When the capture is complete, Chrome will stitch the partial files together, including a "prefix" and "end" file containing the constants and other non-event data.**
-
-**NetLogExporter::CreateScratchDir's function uses |scratch_dir.CreateUniqueTempDir()| to choose the target location.**
-
-**History: the evolution of NetLog/NetInternals**
-
-**version 1: LoadLog**
-**In the beginning, there was LoadLog. This was basically a small per-request log buffer. Each URLRequest had its own LoadLog member field, which was essentially a std::vector of events and their timings. These events got accumulated directly in the browser process. In other words, it was a form of always-on passive logging.**
-**My** (eroman) original use case for LoadLog was to diagnose performance
-problems. At the time, internal users were complaining to me about sporadic
-performance issues. But of course they would never reproduce them when I was
-around! I wanted a system that could dump the relevant information reliably
-AFTER the problem had already happened.
-
-**To capture the information I added LoadLogs to URLRequests to track the performance of core operations like DNS resolving and proxy resolution. This structure was really just a small set of event timings.**
-**To expose the data, I created a very simple webapp at “about:net-internals”. This page was entirely generated by C++, and believe me when I say it was basic!**
-**Since LoadLogs were attached to particular URLRequests, the visualizer would work by traversing the list of in-progress requests and subsequently printing its logs. I also kept a “graveyard” of recently finished requests in the browser so we would have some data on recently finished requests, (which ultimately was my original objective). Since about:net-internals was a static page, you would have to reload it to view new data. You would reload at the risk of losing the data it was currently displaying, since the data was backed by the browser process and might have already been evicted from the circular graveyard buffer.**
-**The exchange format for users to send me their logs was ad-hoc. Essentially they would save the HTML page, often by using the “save webpage as” feature, or simply copy-pasting. (Some users would even print-to-pdf and attach that).**
-**Due to the limitations of the C++ generated HTML formatting, this first version of “about:net-internals” used a fixed-width text format for visualizing logs. This is in fact the same cryptic display (with few changes) that is used today. (When I ported that code from C++ to Javascript I left a TODO to improve it later...)**
-**You might be wondering about the URL... why not simply call it “about:net”? Well, at the time there was already a page running at “about:net”! So I added the suffix “-internals” to distinguish them. Moreover, at the time I just wanted to build something quick and dirty and did not want to go through any UI reviews. By calling it “-internals” I was assuring people that it was just a janky developer page that didn’t need to meet our higher standards for end-user content.**
-**Interestingly “about:net” got deprecated when porting Chrome to Mac/Linux (since it relied on native UI which no one wanted to port). We eventually deleted it, but by the time that happened about:net-internals was already a well established URL so I saw no point in changing it. Today, ChromeOS has re-appropriated the url about:net.**
-**version 2: NetLog**
-**I wanted to do more with about:net-internals. However the fact that it was entirely generated via C++ made it very difficult to work with. Formatting HTML from C++ is no fun, and the code quickly devolves into something terrifying. That last thing I wanted to be adding to Chrome was a pile of ugly C++ code. Since webui pages were all the rage at the time (this was around the time of one of the “new tab page” rewrites), my solution was to re-write about:net-internals in JavaScript.**
-**I started doing this, and created the experimental page “about:net2” for my in-progress work. These two pages coexisted for a while since it was just a side project for me. But eventually when it was good enough, I would rename about:net2 to about:net-internals.**
-**The requirement to use JavaScript motivated the evolution of LoadLog into NetLog.**
-**The problem with LoadLog was the data was siloed by request. This meant my webapp couldn’t receive real-time updates. Rather it would have to do gnarly polling to see what had changed (and suck down all the data each time). Another issue that scared me was the browser-side accumulation of data being done with LoadLogs. When tracing I wanted to turn on higher logging granularity, but this came at the risk of using up lots of browser memory, which at the extreme might kill the process.**
-**To address this, I decided to generalize the mechanism of a per-request events into a single flat event stream. This gave me a nice choke point for transferring updates to the net-internals app. It also meant that the accumulation of data was done in a renderer process, so at worst a memory exhaustion would kill just that single tab.**
-**However this new approach also created some new problems. First of all, having a flat event stream meant needing to re-build the structure within each consumer of the NetLog. This is why the “source” parameter exists in events today. Since this is inefficient, I tried to keep browser-side interpretation of NetLog events to a minimum, and leaving this task to the visualizer.**
-**The second issue was how to maintain feature parity with LoadLog’s ability to do “passive logging.” To support passive logging (i.e. “always on logging”) I introduced the PassiveLogCollector observer.**
-**PassiveLogCollector was an observer that would watch the event stream and save recent events into a circular buffer (using a variety of heuristics to try and keep the most relevant information, clustered by request). That way if something went wrong, we would have a partial log showing what happened most recently. Getting the heuristics for PassiveLogCollector good-enough was non-trivial, since it required re-building and tracking the structure for the events.**
-**Initially PassiveLogCollector worked as promised. But it didn’t scale well over time, and has since been removed.**
-**The problem is that over time the amount of net logging grew substantially (success!), and also the event stream became more fragmented into sources (due to more overlapping async stuff). The tension with PassiveLogCollector was wanting to collect enough useful information to be able to debug problems, while at the same time not having fragile heuristics which could break at any moment leading to browser memory bloat. Ultimately I wasn’t comfortable with the risk of bad heuristics leading to bloat, and how it complicated adding new logging, and hence removed it.**
-**Some of the gaps left by the removal of PassiveLogCollector can be addressed by issue [117026](https://crbug.com/117026).**
-**version 3: The age of mmenke**
-**The current evolution of about:net-internals is what I would call v3. It starts when Matt Menke teamed up with me to work on net-internals.**
-**Prior to the golden age of menke, exchanging NetLogs involved copy-pasting the webpage! This was a hassle, since invariably users would paste the useless parts of the log and not the whole thing, or provide screenshots rather than text... It was downright embarrassing.**
-**Matt added the ability to save logs to a JSON file, and to import them back again into about:net-internals, which was a huge step forward.**
-**Other core features of v3 were unittests for the JavaScript frontend, and a timeline visualization to plot network metrics both in real-time and from postmortem dump files.**
-**v3 also got custom views for Sockets, SPDY sessions, Winsock LSPs (SPIs), a slew of other functionality and increased logging sprinkled throughout the network stack.**
-**version 4: The extraction of the viewer**
-**In 2018, the JavaScript of the viewer application was** [removed](https://bugs.chromium.org/p/chromium/issues/detail?id=678391&desc=2#c18) from the net-internals page and extracted to a [new repository](https://github.com/catapult-project/catapult/tree/master/netlog_viewer) and running from a [public app server](https://netlog-viewer.appspot.com/#import). The reasons for this extraction are documented in the [NetLog Viewer design document](https://docs.google.com/document/d/1Ll7T5cguj5m2DqkUTad5DWRCqtbQ3L1q9FRvTN5-Y28/).
-version ?:
-**… patches welcome!** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/index.md
deleted file mode 100644
index a83934adfa8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/index.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-- - /developers/design-documents/network-stack/network-bug-triage
- - Network bug triage
-page_name: downloads-bug-triage
-title: Triaging Downloads Bugs
----
-
-[Downloads
-bugs](https://code.google.com/p/chromium/issues/list?can=2&q=cr-ui-browser%3Ddownloads&sort=&groupby=&colspec=ID+Pri+Status+Modified+Owner+Summary&nobtn=Update)
-are automatically cc'd to the mailing list download-bugs@chromium.org. People on
-the bugs rotation should subscribe to that list. The suggested frequency for
-handling incoming bugs is 2-3 days, but that's just a suggestion.
-
-Triagers should
-
-1. Attempt to reproduce and set the correct Status for [untriaged and
- unconfirmed
- bugs](http://crbug.com/?q=cr-ui-browser%3Ddownloads+status%3Auntriaged%2Cunconfirmed+-blocking%3A96604+-needs%3Dfeedback&colspec=ID+Summary+Modified).
- (That search ignores Needs-Feedback and External bugs.)
- * Engage with users as they report bugs to get all the information
- we need for eventual resolution.
- * Set Type-Feature Available for feature requests or mark WontFix
- and explain why this feature is unlikely to be implemented.
- * Crash reports frequently do not contain crash ids. Send
- reporters to [Reporting a Crash
- Bug](http://www.chromium.org/for-testers/bug-reporting-guidelines/reporting-crash-bug)
- and set Needs-Feedback.
- * [Providing Network Details for bug
- reports](/for-testers/providing-network-details)
- * Ensure high priority bugs receive appropriate attention. Consult
- benjhayden or asanka if necessary in order to ensure timely
- resolution. High priority bugs include
- * Regressions: Mark as Type-Bug-Regression Pri-1
- * Possible security problems: Request security review and lock
- down (Restrict-View-Commit). If security review shows
- severity medium or higher, mark Pri-1
- * Crashers: Mark as Pri-1 if it's on the top crash list or
- looks likely to happen in the wild. If it looks like a
- use-after-free that might be reproducible in the wild, it's
- a security issue.
- * [chromecrash
- query](https://chromecrash.corp.google.com/browse?q=int32(extract_regexp(product.version%2C%20r'%5Cd%2B%5C.%5Cd%2B%5C.(%5Cd%2B)%5C.%5Cd%2B'))%20%3E%3D%200%20AND%0Acustom_data.ChromeCrashProto.ptype%3D'browser'%20AND%0A(custom_data.ChromeCrashProto.magic_signature_1.component%20CONTAINS%20'src%2Fcontent%2Fbrowser%2Fdownload'%20OR%0A%20custom_data.ChromeCrashProto.magic_signature_1.component%20CONTAINS%20'src%2Fchrome%2Fbrowser%2Fdownload'%20OR%0A%20custom_data.ChromeCrashProto.magic_signature_1.file_path%20CONTAINS%20'src%2Fchrome%2Fbrowser%2Fextensions%2Fapi%2Fdownloads'%20OR%0A%20custom_data.ChromeCrashProto.magic_signature_1.file_path%20CONTAINS%20'src%2Fchrome%2Fbrowser%2Fui%2Fwebui%2Fdownload')):
- fiddle with the literal 0 to find crashes
- before/after/at a specific branch.
- * Badly broken features
- * Failing or disabled tests
- * Mark duplicates as such. [Frequently duplicated
- bugs](/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/salient-bug-list)
- * Some issues on windows are due to bad shell extensions.
- Point reporters to
- [ShellMenuView](http://www.nirsoft.net/utils/shell_menu_view.html)
-2. Categorize [uncategorized
- bugs](http://crbug.com?q=cr-ui-browser%3Ddownloads+-blocking%3A68191+-blocking%3A68195+-blocking%3A68196+-blocking%3A68197+-blocking%3A68198+-blocking%3A68200+-blocking%3A68201+-blocking%3A68204+-blocking%3A68206+-blocking%3A68208+-blocking%3A68209+-blocking%3A68276+-blocking%3A68356+-blocking%3A68358+-blocking%3A68359+-blocking%3A68361+-blocking%3A69298+-blocking%3A78147+-blocking%3A78148+-blocking%3A96604+-blocking%3A133971+-blocking%3A133960&colspec=ID+Summary+Modified)
- by adding them to the "Blocked on" list of one of [these category
- bugs](http://crbug.com/?q=Cr-Ui-Browser%3DDownloads+blocking%3A133960&colspec=ID+Summary).
-3. Sweep
- [needs=feedback](https://code.google.com/p/chromium/issues/list?can=2&q=cr-ui-browser=downloads%20needs=feedback&sort=modified&colspec=ID%20Status%20Owner%20Summary%20Modified):
- if feedback has been provided, remove needs-feedback and continue
- debugging; if feedback has not been provided after 2 weeks, Archive
- the bug.
-4. When major changes such as file moves happen, either update the
- below documentation or delete it if nobody has found it useful.
-
-FAQ, Bug-hunting tips
-
-Where to begin fixing different kinds of bugs. Please feel free extend this
-liberally.
-
-* Main entry point from the ResourceDispatcherHost to the downloads
- system:
- [BufferedResourceHandler](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/loader/buffered_resource_handler.cc)
- decides whether RDH should create
- [DownloadResourceHandler](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/download/download_resource_handler.cc)
-* The download state machine is managed on the UI thread in
- [DownloadItemImpl](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/download/download_item_impl.cc),
- managed by
- [DownloadManagerImpl](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/download/download_manager_impl.cc).
-* chrome://downloads
- [WebUI](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/ui/webui/downloads_dom_handler.cc)
- [HTML/CSS/JS](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/resources/downloads/)
-* [Target filename
- determiner](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/download/download_target_determiner.cc)
-* [DownloadHistory](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/download/download_history.cc)
- observes the DownloadManager and DownloadItems and posts changes to
- [DownloadDatabase](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/history/download_database.cc)
-* chrome.downloads Extension API
- [IDL](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/common/extensions/api/downloads.idl),
- [implementation](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/extensions/api/downloads/downloads_api.cc)
-* Multiple automatic download throttling infobar
- [DownloadRequestLimiter](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/download/download_request_limiter.cc) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/salient-bug-list/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/salient-bug-list/index.md
deleted file mode 100644
index 7dc992ff165..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/salient-bug-list/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-- - /developers/design-documents/network-stack/network-bug-triage
- - Network bug triage
-- - /developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage
- - Triaging Downloads Bugs
-page_name: salient-bug-list
-title: Salient Bug List
----
-
-For reference, some bugs that may be useful to have an easy list for (usually
-for duping). Feel free to edit this list as you feel moved.
-
-<table>
-<tr>
-<td> FTP directory listing fails with pt-br locale (Bug reports may consist of a single line description alluding to a FTP error)</td>
-<td><a href="http://crbug.com/177428">177428</a></td>
-</tr>
-<tr>
-<td> Auto-execution of JNLP files don't work</td>
-<td><a href="http://crbug.com/92846">92846</a> </td>
-</tr>
-<tr>
-<td> Open With</td>
-<td><a href="http://crbug.com/333">333</a> </td>
-</tr>
-<tr>
-<td> Downloads Interrupted by Sleep</td>
-<td><a href="http://crbug.com/110497">110497</a> </td>
-</tr>
-<tr>
-<td> Can't download PDF as binary/octet-stream</td>
-<td><a href="http://crbug.com/104331">104331</a> </td>
-</tr>
-<tr>
-<td> Downloading a URL already downloading but paused hangs</td>
-<td><a href="http://crbug.com/100529">100529</a> </td>
-</tr>
-<tr>
-<td> Make MHTML a Save Page As ... format</td>
-<td><a href="http://crbug.com/120416">120416</a> </td>
-</tr>
-<tr>
-<td> Downloads resumption/resume interrupted downloads</td>
-<td><a href="http://crbug.com/7648">7648</a> </td>
-</tr>
-<tr>
-<td> Make pdf a Save Page As ... format</td>
-<td><a href="http://crbug.com/116749">116749</a> </td>
-</tr>
-<tr>
-<td> Make a whole lot of things a Save Page As .. format</td>
-<td><a href="http://crbug.com/113888">113888</a> </td>
-</tr>
-<tr>
-<td> Mac circumvention of downloads warning dialog incorrect for last incognito window close</td>
-<td><a href="http://crbug.com/88419">88419</a></td>
-</tr>
-<tr>
-<td> Downloads fail with 'Insufficient Permissions' error</td>
-<td><a href="https://code.google.com/p/chromium/issues/detail?id=161793">161793</a></td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/index.md
deleted file mode 100644
index 5f1a1f61d27..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/network-bug-triage/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: network-bug-triage
-title: Network bug triage
----
-
-This page has moved to the source repository:
-
-[Chrome Network Bug
-Triage](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/bug-triage.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/network-stack-objectives/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/network-stack-objectives/index.md
deleted file mode 100644
index 174135eaa3e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/network-stack-objectives/index.md
+++ /dev/null
@@ -1,592 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: network-stack-objectives
-title: Network Stack Objectives
----
-
-## Q2 2014 Objectives
-
-### Blink
-
-* Make WebSocket scalable
- * Switch WebSocket to new stack in Chromium
- * Ensure that WS/HTTP2 mapping work with HTTP2 spec
- * Revive upgrade success rate experiment
- * Make permessage-compress spec ready for IESG review
-* Extend XMLHttpRequest for streaming use cases
- * Streams API standardization
-* Optimize networking APIs
-* Promises Blink bindings
-
-## Q4 2011 Objectives
-
-#### Performance
-
-* SPDY
-* mobile tuning
-* DNS resolver
-* HTTP pipelining prototype
-
-#### **SSL**
-
-* captive portals support
-* origin-bound certificates
-* DOMCrypt API
-
-#### **Developer productivity**
-
-* analysis view of net-internals logs
-* API cleanup
-
-## Q2 2011 Objectives
-
-#### Improve test coverage
-
-* Add tests of SSL client authentication (wtc)
-* Set up automated test environment for HTTP Negotatie and NTLM
- authentication (asanka, cbentzel)
-* Add drag-n-drop, fine-grained cancels tests to Downloads
- (rdsmith,ahendrickson,asanka)
-
-#### Fix bugs and clean up / refactor code
-
-* Clean up network stack API, threading model, etc. (willchan, wtc)
-* Use base, net, and crypto as DLLs on Windows (rvargas)
-* Refactor Socket classes to support server, UDP, and other transport
- sockets (mbelshe, willchan)
-* Finish Downloads System major refactors (dataflow, file
- determination, state granularity) (ahendrickson, rdsmith)
-* Fix Download incorrect name problems -- see http://crbug.com/78200
- (asanka)
-* Fix Downloads error detection and cache interface (ahendrickson)
-* Substantially reduce downloads crashers. Tentative Goal: halve
- "crashes touching downloads directory / total downloads initiated"
- metric (rdsmith, others)
-
-#### Improve network performance / features
-
-* SPDY (willchan)
-* NSS certificate verification and revocation checking (wtc)
-* SSL client authentication to destination server through HTTPS proxy
- (mattm, wtc)
-* WPAD over DHCP (joi)
-* Roll out Anti-DDoS functionality (joi)
-* \[Stretch\] Add Download resumption after error (ahendrickson)
-
-**Documentation**
-
-* Write design document for HTTP authentication (cbentzel)
-
-## Q1 2011 Objectives
-
-Improve test coverage
-
-* Set up test environment for HTTP Negotiate and NTLM authentication
- (asanka, cbentzel, wtc) - 0.1 Have a manual test environment.
- Started work on automated test environment at the very end of the
- quarter
-* Write new tests, enable and deflake existing ones for the download
- subsystem (rdsmith, ahendrickson) -- 0.8 Existing tests deflaked
- (major accomplishment), some new tests but not many.
-* Add tests of SSL client authentication (wtc) -- 0.0 Did not work on
- it.
-
-Fix bugs and clean up / refactor code
-
-* Fix download subsystem bugs - crashes, corruption, etc. (rdsmith,
- ahendrickson) -- 0.6 Fixed several bugs, but didn't get anywhere
- near as far with this as intended.
-* Clean up download subsystem code (rdsmith, ahendrickson) -- 0.7
- Control flow much cleaner, main path deraced. Two important
- refactors not done last quarter (dataflow, file determination); will
- be highpri this quarter.
-* Refactor safebrowsing code (lzheng)
-* Fix HTTP authentication bugs - background tabs, authentication
- freezes/crashes, Negotiate authentication failures on Unix. (asanka,
- cbentzel) - 0.7 Addressed a lot of key remaining issues, such as
- background tab.
-* Clean up network stack API - URLRequestContext, etc. (willchan)
-* Use base as a DLL, a prerequisite for using net as a DLL (rvargas) -
- 0.7 working on getting projects to compile cleanly
-
-Improve network performance / features
-
-* TLS enhancements - OCSP stapling in NSS and integration with Windows
- CryptoAPI, Snap Start (wtc, agl, rsleevi) -- 0.7 OCSP stapling
- turned on for Linux and Windows, but not Mac OS X. Finished
- implementation of Snap Start.
-* Add extension API for HTTP authentication prompt (stretch) (asanka,
- cbentzel) - 0.0 did not start
-* Make SPDY faster (mbelshe, willchan)
-* Relax single-writer, multi-reader locking of the http cache,
- allowing readers to start reading the parts of a resource that the
- writer has written (rvargas, gavinp) - 0.0, No progress.
-* Add server hint & prefetching support - Link: header and link
- rel=prefetch. (gavinp) - 0.5, link rel=prefetch is supported, link
- header is not.
-* Release binary exploration protection for safebrowsing (lzheng)
-* Continue disk cache performance and reliability experiments
- (rvargas) - 0.8, One is done, the other one is blocked on
- infrastructure.
-* Implement offline (network disconnected) detection for Mac and Linux
- (eroman)
-
-## Q4 2010 Objectives
-
-**Improve test coverage**
-
-* Implement <http://code.google.com/p/web-page-replay/> to provide
- more complete network stack coverage and catch performance
- regressions (tonyg,mbelshe) -- 0.5 lots of good progress; up and
- running, not yet done!
-* [Improve tests for HTTP
- authentication](http://www.chromium.org/developers/design-documents/http-authentication).
- (cbentzel, wtc) - 0.2 Added unit tests and manual system-level
- tests, but still need automated system level tests.
-* [Add tests for SSL client
- authentication](http://www.chromium.org/developers/design-documents/ssl-client-authentication).
- (wtc) -- 0.2. (by rsleevi) Implemented a better way to trust a test
- root CA that doesn't require changing the system certificate store.
- Regenerated test certificates to have long validity periods.
-
-## Fix bugs and clean up / refactor code
-
-* Fix bugs (everyone)
-* Improve network diagnostics (about:net-internals) to help fix bugs
- (mmenke, eroman)
-* Clean up / support previously neglected code (Downloads (rdsmith:
- 0.6), SafeBrowsing(lzheng: 0.6), HTTP Auth, etc) (rdsmith, lzheng,
- ahendrickson, cbentzel)
-* Clean up valgrind reported issues in network tests (everyone) --
- 0.3. Fixed some, but still have plenty more to fix.
-* Better modularize the network stack (willchan,eroman) -- 0.2. Lots
- of discussion, not many changes happened yet. A little work towards
- new URLRequestContexts
-
-## Improve network performance / features
-
-* Continue running cache experiments (request throttling, performance,
- reliability) (rvargas) -- 0.9 Constant monitoring of the experiments
- and changes made as appriopriate.
-* Relax SWMR locking of the http cache (rvargas, gavinp) -- 0.5 Work
- is under way, but nothing checked in yet.
-* Continue supporting SPDY development (mbelshe, etc) -- 0.6 SPDY up
- and running on all google.com. External partners starting to
- experiment.
-* TLS latency enhancements (False Start, Snap Start, etc) (agl, wtc)
- -- 0.6. Added a certificate verification result cache. False Start
- is enabled in M8, thanks to agl's hard work. OCSP stapling works on
- Linux.
-* Better support prefetching mechanisms (Link: and X-Purpose headers,
- link rel=prefetch, resource prediction, preconnection) (gavinp, jar)
-* Continue work towards HTTP pipelining (vandebo) -- 0.0. No progress.
-* Finish user certificate import and native SSL client authentication
- (wtc) -- 0.6. No progress on user certificate import. Finished
- native SSL client authentication (rsleevi wrote the original patch),
- which completed the switchover to NSS for SSL.
-* Detect network disconnectivity and handle it better (eroman)
-
-## Q3 2010 Objectives
-
-Annotations on the status of each objective (at the close of the quarter) shown
-in red.
-
-### High level
-
-* Measure performance.
-* Improve performance.
-* Investigate and fix bugs.
-* Enterprise features.
-
-### Specific items
-
-**Feature work and bug fixes for SSL library / crypto. (wtc, agl, rsleevi,
-davidben)**
-
-* Bring the NSS SSL library to feature parity with Windows Vista's
- SChannel. -- 0. Did not have time to work on this. Postponed to Q1
- 2011. Will work on native SSL client auth for NSS in Q4 2010.
-* Tackle long-standing bugs in Chrome's crypto and certificate code.
- -- 0.3. Fixed some certificate verification bugs in NSS and Chrome.
- Didn't have time to tackle the major items such as thread-safe
- certificate cache and certificate verification result cache.
-* [Certificate enrollment with the HTML &lt;keygen&gt;
- tag](http://code.google.com/p/chromium/issues/detail?id=148). --
- 0.7. davidben added UI and fixed many bugs in certificate
- enrollment. Remaining work is to [support all formats of
- application/x-x509-user-cert
- responses](http://code.google.com/p/chromium/issues/detail?id=37142),
- and then to test with various CAs.
-
-**Feature work on download handling (ahendrickson)**
-
-* Resume partially completed downloads, including across Chrome
- restarts. -- 0.5?; preliminary CL sent out
- (<http://codereview.chromium.org/3127008/show>)
-* Measure Chrome versus IE download performance to see whether it is
- in fact slower in chrome (user reports suggest this is the case). --
- 0
-
-**Improvements to cookie handling (rdsmith)**
-
-* Implement alternate eviction algorithm and measure impact (to reduce
- the cookies evicted while browsing). -- 1
-* (Stretch) [Restrict access of CookieMonster to IO
- Thread](http://code.google.com/p/chromium/issues/detail?id=44083).
- -- 0
-
-**URL Prefetching (gavinp)**
-
-* [Implement link
- rel=prefetch](http://code.google.com/p/chromium/issues/detail?id=13505)
- and measure impact. -- 1.0; implemented, measurement shows 10%
- improvement of PLT
-* Implement link HTTP headers and measure impact. -- 0.5; preliminary
- code reviews sent out.
-
-**HTTP cache (rvargas, gavinp)**
-
-* Simultaneous streaming readers on ranges in a cache entry (to
- support video prefetch for YouTube). -- 0
-* Experiment with [request throttling at the cache
- layer](http://code.google.com/p/chromium/issues/detail?id=10727) --
- 1.0
-
-**HTTP authentication (cbentzel)**
-
-* Integrated Authentication on all platforms. -- 0.9; NTLM on
- Linux/OSX not supported without auth prompt.
-* Add full proxy authentication support to
- [SocketStream](http://code.google.com/p/chromium/issues/detail?id=47069)
- and
- [SPDY](http://code.google.com/p/chromium/issues/detail?id=46620). --
- 0
-* [System level tests for
- NTLM/Negotiate](http://code.google.com/p/chromium/issues/detail?id=35021).
- -- 0
-
-**Simulated Network Tester (cbentzel, klm, tonyg)**
-
-* Implement basic pagecycler test over a DummyNet connection -- 0.7;
- work in progress for webpage replay
- (<http://code.google.com/p/web-page-replay/wiki/GettingStarted>)
-* Record and playback of Alexa 500 rather than static pages from 10
- years ago. -- 0
-* (stretch): Minimize false positives enough to make this a standard
- builder. -- 0
-
-**Network Diagnostics (rdsmith, mmenke, eroman)**
-
-* Improve error pages to better communicate network error -- 0.7; new
- error codes for proxy and offline, and reworked some other confusing
- ones. Updated text in the works.
-* Improve error page to link to system network configurator -- 0; need
- to figure out sandboxable solution.
-* Improve network diagnostics tool for configuration problems -- 0; no
- changes
-
-**Proxy handling**
-
-* [Extension API for changing proxy
- settings](http://code.google.com/p/chromium/issues/detail?id=48930)
- (pamg) -- 0.5
-* [Execute PAC scripts out of
- process](http://code.google.com/p/chromium/issues/detail?id=11746)
- (eroman) -- 0; punted
-
-**Implement HTTP pipelining (vandebo)**
-
-* [crbug.com/8991](http://crbug.com/8991)
-
-**WebKit/Chrome network integration (tonyg)**
-
-* Support the WebTiming spec. -- 1.0; landed in Chrome 6.
-* [Enable persisting disk cache of pre-parsed
- javascript](http://code.google.com/p/chromium/issues/detail?id=32407).
- -- 0
-* Pass all of the BrowserScope tests -- 0.9; ToT chromium scores
- 91/100 on the tests
-
-**SafeBrowsing (lzheng)**
-
-* [Add end to end tests for
- safe-browsing](http://code.google.com/p/chromium/issues/detail?id=47318)
- -- 1.0
-* Extract the safe browsing code to its own library that can be
- re-used by other projects -- 0
-
----
-
-## Past objectives
-
-Annotations on the status of each objective (at the close of the quarter) shown
-in red.
-
-### Milestone 6 (branch cut July 19 2010).
-
-#### #### Run PAC scripts out of process
-
-#### [Move the evaluation of proxy auto-config scripts out of the browser
-process](http://code.google.com/p/chromium/issues/detail?id=11746) to a
-sandboxed process for better security. (eroman)
-
-#### Ended up doing multi-threaded PAC execution instead, to address performance
-problems associated with speculative requests + slow DNS (crbug.com/11079)
-
-#### Cache pre-parsed JavaScript
-
-The work on the HTTP cache side is done. Need to write the code for [WebKit and
-V8 use the interface](http://code.google.com/p/chromium/issues/detail?id=32407)
-and measure the performance impact. (tonyg, rvargas)
-
-Done. M6 has pre-parsed JS in the memory cache ON by default. It has pre-parsed
-JS in the disk cache is OFF by default (--enable-preparsed-js-caching).
-
-#### Switch to NSS for SSL on Windows
-
-Use NSS for SSL on Windows by default. We need to modify NSS to [use Windows
-CryptoAPI for SSL client
-authentication](http://code.google.com/p/chromium/issues/detail?id=37560). (wtc)
-
-Done. NSS is being used for SSL on all platforms.
-
-#### Improve the network error page
-
-The network error page should [help the user diagnose and fix the
-problem](http://code.google.com/p/chromium/issues/detail?id=40431) (see also
-[issue 18673](http://code.google.com/p/chromium/issues/detail?id=18673)), rather
-than merely displaying a network error code. (eroman, jar, jcivelli)
-
-The UI of the error page has not been improved, however some user-level
-connectivity tests have been added to help diagnose when a chronic network error
-is happening (chrome://net-internals/#tests).
-
-#### #### Implement SSLClientSocketPool
-
-#### This allows us to implement [late binding of SSL
-sockets](http://code.google.com/p/chromium/issues/detail?id=30357) and is a
-prerequisite refactor for speculative SSL pre-connection and pipelining.
-(vandebo)
-
-#### Done.
-
-#### #### HTTP authentication
-
-* #### Implement the [Negotiate (SPNEGO) authentication scheme on
- Linux and
- Mac](http://code.google.com/p/chromium/issues/detail?id=33033) using
- GSS-API. (ahendrickson)
- #### Almost completed.
-* #### Create [system-level tests for NTLM and Negotiate
- authentication](http://code.google.com/p/chromium/issues/detail?id=35021).
- (cbentzel)
- #### Hasn't been started yet.
-
-#### #### HTTP cache improvements
-
-* #### Improve the coordination between the memory cache (in WebCore)
- and disk cache (in the network stack). For example, memory cache
- accesses should count as HTTP cache accesses so that the HTTP cache
- knows how to better maintain its LRU ordering. (rvargas)
- #### Still needs investigation.
-* #### Define good cache performance metrics. Measure HTTP cache's
- hit/miss rates, including "near misses". (rvargas)
- #### Still needs investigation.
-* #### Make the [HTTP
- cache](http://code.google.com/p/chromium/issues/detail?id=26729) and
- [disk
- cache](http://code.google.com/p/chromium/issues/detail?id=26730)
- fully asynchronous. Right now the HTTP cache is serving the metadata
- synchronously, which may block the IO thread.
- #### Done.
-* #### Throttle the requests.
- #### This was dependent on making the disk cache fully asynchronous, which
- only just got finished.
-
-#### Network internals instrumentation, logging, and diagnostics
-
-* [Create a chrome://net page for debugging the network
- stack](http://code.google.com/p/chromium/issues/detail?id=37421).
- (eroman)
- * This will replace about:net-internals and about:net.
- * Allow tracing of network requests and their internal states.
- * Diagnosing performance problems.
- * Getting more information from users in bug reports.
- * Exploring and resetting internal caches.
-
-Done. Replaced the defunct about:net with the new about:net-internals.
-Instruments a lot more tracing information, support for active and passive
-logging, and log generation for bug reports.
-
-#### Define Chromium extensions API for networking
-
-Define an API for Chromium extensions to access the network stack. We already
-defined an API that exposes proxy settings to extensions. (willchan)
-
-Some drafts were circulated for network interception APIs, but work hasn't been
-started yet.
-
-The proxy settings API has been revived, and Pam is starting on it.
-
-#### SafeBrowsing
-
-This is a stretch goal because we may not have time to work on this in Q2.
-
-* Refactor SafeBrowsing code into an independent library that can be
- shared with other SafeBrowsing clients.
- Not started, however an owner was found.
-* Integrate with SafeBrowsing test suite.
- Work in progress.
-
-#### IPv6
-
-* The AI_ADDRCONFIG flag for getaddrinfo is ignored on some platforms,
- causing us to issue DNS queries for IPv6 addresses (the AAAA DNS
- records) unnecessarily. AI_ADDRCONFIG also does not work for
- loopback addresses. We should find out when to pass AF_UNSPEC with
- AI_ADDRCONFIG and when to pass AF_INET to getaddrinfo, so we get the
- best host name resolution performance. (jar)
-* Implement IPv6 extensions to
- [FTP](http://code.google.com/p/chromium/issues/detail?id=35050).
- (gavinp)
- Done. Support for EPSV.
-
-#### Speculative TCP pre-connection
-
-Jim Roskind has an incomplete [changelist](http://codereview.chromium.org/38007)
-that shows where the necessary hooks are for TCP pre-connection. (jar)
-
-* First do this for search (pre-connect while user types a query)
-* Eventually pre-connect based on DNS sub-resource history so that we
- pre-connect for sub-resource acquisition before containing page even
- arrives.
-* Preliminary implementation behind flag will facilitate SDPY
- benchmarking of feature.
-
-Initial implementation has landed; it is off by default, but can be enabled with
-these flags:
-
---enable-preconnect
-
---preconnect-despite-proxy
-
-#### Improve WebKit resource loading
-
-Improve resource loading so we can pass all of the [network tests on
-Browserscope](http://www.browserscope.org/?category=network&v=top) (Chromium
-issues [13505](http://code.google.com/p/chromium/issues/detail?id=13505),
-[40014](http://code.google.com/p/chromium/issues/detail?id=40014),
-[40019](http://code.google.com/p/chromium/issues/detail?id=40019) and WebKit
-[bug 20710](https://bugs.webkit.org/show_bug.cgi?id=20710)). Most of the work
-will be in WebKit. (gavinp, tonyg).
-
-Work in progress.
-
-#### #### Certificate UI
-
-* #### [Linux certificate management
- UI](http://code.google.com/p/chromium/issues/detail?id=19991).
- (summer intern?)
- #### Work in progress.
-* #### UI for [&lt;keygen&gt; certificate
- enrollment](http://code.google.com/p/chromium/issues/detail?id=148)
- on Linux and Windows: right now &lt;keygen&gt; finishes silently.
- (summer intern?)
- #### Work in progress by summer intern.
-
----
-
-## Future
-
-#### Prioritizing HTTP transactions
-
-* #### Support loading resources in the background (for example, for
- updating the thumbnails in the New Tab Page) without impacting
- real-time performance if the user is doing something else.
-* #### Support dynamically adjusting priorities. If the user switches
- tabs, the newly focused tab should get a priority boost for its
- network requests.
-
-#### #### Other HTTP performance optimizations
-
-* #### Reuse HTTP keep-alive connections under more conditions
-* #### Resume SSL sessions under more conditions
-
-#### #### New unit tests and performance tests
-
-#### Some parts of the network stack, such as SSL, need more unit tests. Good
-test coverage helps bring up new ports. In addition, any bugs that get fixed
-should get unit tests to prevent regression.
-#### We should [add performance
-tests](http://code.google.com/p/chromium/issues/detail?id=6754) to measure the
-performance of the network stack and track it over time.
-
-#### ********Fix SSLUITests********
-
-All the [SSLUITests are marked as
-flaky](http://code.google.com/p/chromium/issues/detail?id=40932) now.
-
-#### ********Better histograms********
-
-**We need better histograms for networking.**
-
-**#### ****Integrate loader-specific parts of WebKit into the network stack******
-
-Parts of WebKit that throttle and prioritize resource load requests could be
-moved into the network stack. We can disable WebCore's queuing, and get more
-context about requests (flesh out the ResourceType enum).
-
-#### #### Captive portals
-
-#### [Avoid certificate name mismatch
-errors](http://code.google.com/p/chromium/issues/detail?id=71736) when visiting
-an HTTPS page through a captive portal.
-
-#### #### HTTP pipelining
-
-#### We should implement an [optional pipelining
-mode](http://code.google.com/p/chromium/issues/detail?id=8991).
-
-#### #### HTTP authentication
-
-* #### [support NTLMv2 on Linux and
- Mac](http://code.google.com/p/chromium/issues/detail?id=22532)
-
-#### We also need to review the interaction between HTTP authentication and disk
-cache. For example, [cached pages that were downloaded with authentication
-should not be retrieved without
-authentication](http://code.google.com/p/chromium/issues/detail?id=454).
-
-#### FTP
-
-* reusing control connections
-* caching directory listings.
-
-We need to be able to [request FTP URLs through a
-proxy](http://code.google.com/p/chromium/issues/detail?id=11227).
-
-#### Preference service for network settings
-
-We strive to use the system network settings so that users can control the
-network settings of all applications easily. However, there will be some
-configuration settings specific to our network stack, so we need to have our own
-preference service for those settings. See also [issue
-266](http://code.google.com/p/chromium/issues/detail?id=266), in which some
-Firefox users demand that we not use the WinInet proxy settings (the de facto
-system proxy settings) on Windows.
-
-#### Share code between HTTP, SPDY, and WebSocket
-
-A lot of code was copied from net/http to net/socket_stream for WebSocket
-support. We should find out if some code can be shared.
-
-#### WPAD over DHCP
-
-Support [WPAD over
-DHCP](http://code.google.com/p/chromium/issues/detail?id=18575). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/network-stack-use-in-chromium/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/network-stack-use-in-chromium/index.md
deleted file mode 100644
index 8e42da7bc55..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/network-stack-use-in-chromium/index.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: network-stack-use-in-chromium
-title: Network Stack Use in Chromium
----
-
-[TOC]
-
-## Overview
-
-Chromium is the primary consumer of the Chromium network stack. While there are
-other consumers, the main one is the Chromium browser process. For the most
-part, the network stack runs in the browser process's IO thread, and interfaces
-with the Chromium network stack via `ChromeURLRequestContext` and
-`URLRequest`/`URLFetcher`.
-
-### ChromeURLRequestContext
-
-The Chromium browser process uses several instances of
-`ChromeURLRequestContext`, a subclass of
-`[URLRequestContext](/developers/design-documents/network-stack#TOC-Overview)`.
-For a given profile, there are a number of `ChromeURLRequestContext` instances:
-
-* The "main" `ChromeURLRequestContext`. The majority of `URLRequest`s
- are associated with this `ChromeURLRequestContext` instance.
-* The "media" `ChromeURLRequestContext`. This one uses a different
- `[HttpCache](/developers/design-documents/network-stack/disk-cache)`
- instance that is optimized for large media requests (video). It
- shares many objects, such as the `HostResolver`,
- `[CookieMonster](/developers/design-documents/network-stack/cookiemonster)`,
- etc. with the main `ChromeURLRequestContext`.
-* The "extension" `ChromeURLRequestContext`. It shares many objects
- with the main `ChromeURLRequestContext`. This instance helps service
- chrome-extension:// requests.
-
-There are also some other `ChromeURLRequestContext`s, such as sync's
-`HttpBridge::RequestContext`, the `ConnectionTester`'s
-`ChromeURLRequestContext`, etc. These are not tied to the profile, although with
-a multiple profile Chromium, sync's `HttpBridge::RequestContext` likely would
-have to be tied to a profile.
-
-Note that the "off the record" (Incognito) profile uses a special OTR
-`ChromeURLRequestContext`, in addition to the media and extension contexts, that
-shares some objects, although notably not the `HttpCache` or `CookieMonster` etc
-that are important to be separated for an off the record profile. The
-`HostResolver` is shared.
-
-Many of the objects in `ChromeURLRequestContext` use `scoped_refptr`s to share
-ownership. This causes a lot of problems with object destruction ordering and
-reference cycles. Many of these members are being moved towards being owned
-externally, by the `IOThread`, although that choice may have to change to
-`ProfileImpl` or something to support multiple profiles in Chromium.
-
-Note that currently ChromeURLRequestContext contains a lot of extra members that
-don't exist in `URLRequestContext`. These are being moved out, because they have
-nothing to do with `URLRequestContext` and were only placed in
-`ChromeURLRequestContext` because it was a convenient per-profile object, and
-originally there weren't many ChromeURLRequestContext objects.
-
-### ChromeURLRequestContextGetter:
-
-`ChromeURLRequestContext` is constructed and destroyed on the same thread.
-However, sometimes other threads need to hold references to them, even before
-they get constructed. `ChromeURLRequestContextGetter` is a handle for
-`ChromeURLRequestContext` that will lazily construct it on the first attempt to
-use it. Accesses to the contained `ChromeURLRequestContext` are only allowed on
-the IO thread.
-
-#### URLRequest usages
-
-* `ResourceDispatcherHost` creates `URLRequests` when the renderer or
- plugin processes issue resource requests. It retains pointers to all
- the `ChromeURLRequestContextGetters`.
-* `URLFetcher` is another frontend for `URLRequest`. It allows any
- thread with access to the appropriate
- `ChromeURLRequestContextGetter` to proxy requests to the IO thread.
- It provides a simplified delegate interface that returns the full
- response body as a single string. There are many users of
- `URLFetcher` in the Chromium browser process, including the omnibox,
- extensions, sync (which uses its own `ChromeURLRequestContext`),
- etc. Usually these objects use the "main"
- ChromeURLRequestContextGetter object.
-
-#### NetworkChangeNotifier
-
-* IntranetRedirectDetector - Lets us probe the network to see if ISPs
- are trying to redirect requests to non-existent hosts.
-* GoogleURLTracker - Lets us probe Google to see the appropriate
- domain for the search engine.
-
-#### Network predictor
-
-It uses `URLRequest::Interceptor` to hook into all `URLRequests` to watch them
-come and go, so it can analyze the referers to learn the subdomains used in
-subsequent requests. It uses this knowledge to predict network requests. For
-likely requests, it keeps around the pointer to the "main"
-`ChromeURLRequestContext`'s `HostResolver`, so it can perform DNS prefetching.
-For requests that are almost guaranteed to happen, it goes even further and uses
-the "main" `ChromeURLRequestContext`'s `HttpStreamFactory` to preconnect a
-socket. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/preconnect/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/preconnect/index.md
deleted file mode 100644
index b915e0e8439..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/preconnect/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: preconnect
-title: Preconnect
----
-
-## **[TOC]**
-
-## **Overview**
-
-The networking stack implements the blink interface for the [W3C Resource Hints
-preconnect specification](http://www.w3.org/TR/resource-hints/#preconnect) to
-allow site developers to request connections to servers in anticipation of
-future requests. The predominant use cases are:
-
-1. sub-resources for the current page that the preload scanner is not
- capable of identifying. This can include resources discovered by
- styles being applied (background images, fonts) as well as resources
- initiated by scripts (analytics beacons, ads domains, etc).
-2. Top-level domains used in future navigations. For example, clinking
- on a link to an url shortener or click tracker that then redirects
- to the actual page. If the page knows the resulting final
- destination it can start initiating the connection in parallel with
- the navigation to the redirector.
-
-[Issue 450682](https://code.google.com/p/chromium/issues/detail?id=450682)
-tracks the implementation as well as issues that came up during implementation
-and experimentation.
-
-## Implementation Notes
-
-### Connection Pools (not all connections are the same)
-
-Chrome maintains separate connection pools for the various different protocols
-(http, https, ftp, etc). Additionally, separate connection pools are managed for
-connections where cookies can be transmitted and connections where they can not
-in order to prevent tracking of users when a request is determined to be private
-(when blocking cookies to third-party domains for example). The determination of
-which connection pool a request will use is made at request time and depends on
-the context in which it is being made. Top-level navigations go in the
-cookie-allowed pool while sub-resource requests get assigned a pool based on the
-domain of the request, the domain of the page and the user's privacy settings.
-
-Connections can not move from one pool to another so the determination of which
-pool a connection will be assigned to needs to be made at the time when the
-connection is being established. In the case of TLS connections, the cost of not
-using a preconnected connection can be quite high, particularly on mobile
-devices with limited resources.
-
-The initial implementation for preconnect did not take private mode into account
-and all connections were pre-connected in the cookies-allowed connection pool
-leading to
-[situations](https://code.google.com/p/chromium/issues/detail?id=468005) where
-the preconnected connection was not leveraged for the future request.
-
-### Preconnect Connection Pool Selection Heuristic (proposed)
-
-The two different use cases for preconnect require different treatment for
-determining which connection pool a connection should belong to. In the case of
-a sub-resource request the document URL should be considered and the relevant
-privacy settings should be evaluated. In the case of the top-level navigation
-the document URL should NOT be considered and the connection. There are no hints
-that the site owner can provide to indicate what kind of request will be needed
-so it is up to the browser to guess correctly.
-
-For preconnect requests that are initiated while the document is being loaded
-(before the onload event while the HTML is being parsed and scripts are being
-executed), Chrome will assume that preconnect requests are going to be for
-sub-resources that are going to be requested in the context of the current
-document and the connection pool will be selected by taking the owning
-document's URL into account.
-
-For preconnect requests that are initiated after the document has finished
-loading, Chrome will assume that preconnect requests will be used for future
-page navigations and the connections will not take the current document's URL
-into account when selecting a connection pool (which effectively means the
-connection will be established in the allows-cookies pool).
-
-This does leave a few possible cases for mis-guessing but should handle the vast
-majority of cases. Specifically:
-
-1. Top-level navigations that are preconnected before the page has
- finished loading may end up in the wrong connection pool as the
- document's URL will be considered.
-2. Sub-resource requests that are preconnected after the page has
- finished loading may end up in the wrong pool if the request
- requires a private connection. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/fox-proxy-settings.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/fox-proxy-settings.png.sha1
deleted file mode 100644
index b1ddec044ff..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/fox-proxy-settings.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fba9dfa833a4210f919ab35cc4f9c0183fd32745 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.dot b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.dot
deleted file mode 100644
index 1275d3249d4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.dot
+++ /dev/null
@@ -1,9 +0,0 @@
-digraph Fallback {
-
- Automatic [label="Automatic (PAC) configuration"];
- Direct;
- Error [color="red", style=bold];
-
- Automatic -> Direct [label="(On Javascript runtime error)"];
- Automatic -> Error [label="(On exhaustion of proxy list)"];
-}
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.png.sha1
deleted file mode 100644
index 50dc6ea6765..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fa2d3758aed6f415e3109d58e5fdef6b97e9d066 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.dot b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.dot
deleted file mode 100644
index f5f2e7cd519..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.dot
+++ /dev/null
@@ -1,27 +0,0 @@
-digraph Fallback {
-
- subgraph cluster_automatic {
- label="Automatic settings";
- style=dotted;
-
- WPAD [label="WPAD (Automatically detect)"];
- CustomPac [label="Custom PAC script"];
- }
-
- subgraph cluster_manual {
- label="Manual settings";
- style=dotted;
-
- ProxyForAllSchemes [label="Single proxy server for all schemes"];
- SchemeSpecific [label="Proxy server per URL scheme"];
- Socks [label="SOCKS proxy server"];
- }
-
- Direct;
-
- WPAD -> CustomPac [style=bold, color="blue"];
- CustomPac -> ProxyForAllSchemes [style=bold, color="blue"];
- ProxyForAllSchemes -> SchemeSpecific;
- SchemeSpecific -> Socks;
- Socks -> Direct;
-}
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.png.sha1
deleted file mode 100644
index 1897a02a2fa..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6f9bbc74751b42425aa60aafff220e9ce5317acf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.dot b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.dot
deleted file mode 100644
index 95809842f8c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.dot
+++ /dev/null
@@ -1,7 +0,0 @@
-digraph Fallback {
-
- Manual [label="Manual configuration"];
- Error [color="red", style=bold];
-
- Manual -> Error [label="(On any error)"];
-}
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.png.sha1
deleted file mode 100644
index 5474bdf7395..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eea1f06bd7d27340cda669c0ed8e79bcc2f9ca2f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-server-settings.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-server-settings.png.sha1
deleted file mode 100644
index 34d4364681b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-server-settings.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ca9e740f8f35de78ce45e5aee53ce1180dda2652 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-settings.png.sha1 b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-settings.png.sha1
deleted file mode 100644
index 9fe486d1be1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-settings.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-88ac9351c0c3fbc7cc73a1506a3c2db3ecc90a79 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/index.md
deleted file mode 100644
index c58b436b204..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/proxy-settings-fallback/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: proxy-settings-fallback
-title: Proxy settings and fallback
----
-
-On Windows, Chromium uses WinInet's proxy settings.
-
-Consequently, it is important that Chromium interpret and apply these proxy
-settings in the same manner as WinInet. Otherwise the same proxy settings may
-give different results in Chromium than in other WinInet-based applications
-(like Internet Explorer).
-
-In Firefox, the proxy settings are divided into four different modes using radio
-buttons. This modal approach makes it pretty easy to understand which proxy
-settings will be used, since there is only one set of choices.
-
-<img alt="image"
-src="/developers/design-documents/network-stack/proxy-settings-fallback/fox-proxy-settings.png">
-
-However in Internet Explorer, the settings are more complex.
-
-All of the various settings are presented in the UI as optional checkboxes.
-
-This makes it unclear what is supposed to happen when conflicting choices are
-given.
-
-Screenshot of IE's settings dialog:
-
-<table>
-<tr>
-<td> <img alt="image" src="/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-settings.png"> </td>
-<td> + </td>
-<td> <img alt="image" src="/developers/design-documents/network-stack/proxy-settings-fallback/ie-proxy-server-settings.png"> </td>
-</tr>
-</table>
-
-## How WinInet resolves the ambiguity
-
-\[The following was determined experimentally using Internet Explorer 8 on
-Windows XP. (Couldn't find an official explanation of the steps to link to).\]
-
-The way Internet Explorer applies these settings is using a fallback scheme
-during initialization:
-
-<img alt="image"
-src="/developers/design-documents/network-stack/proxy-settings-fallback/ie-fallback.png">
-
-* Fallback between the automatic settings is represented with a **blue
- arrow**, and occurs whenever:
- * The setting is not specified.
- * The underlying PAC script failed to be downloaded.
- * The underlying PAC script failed to be parsed.
-* Fallback between the manual settings is represented by a **black
- arrow**, and occurs whenever:
- * The setting is not specified.
-* The bypass list is applied ONLY within the manual settings.
-
-TODO(eroman): haven't verified fallback for SOCKS.
-
-There is a secondary fallback mechanism at runtime:
-
-<img alt="image"
-src="/developers/design-documents/network-stack/proxy-settings-fallback/ie-auto-fallback.png">
-<img alt="image"
-src="/developers/design-documents/network-stack/proxy-settings-fallback/ie-manual-fallback.png">
-
-So for example if auto-detect was chosen during the initialization sequence, but
-the PAC script is failing during execution of FindProxyForURL(), it will
-fallback to direct (regardless of whether there are manual proxy settings). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/network-stack/socks-proxy/index.md b/chromium/docs/website/site/developers/design-documents/network-stack/socks-proxy/index.md
deleted file mode 100644
index 95d23cd782b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/network-stack/socks-proxy/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/network-stack
- - Network Stack
-page_name: socks-proxy
-title: Configuring a SOCKS proxy server in Chrome
----
-
-To configure chrome to proxy traffic through the SOCKS v5 proxy server
-***myproxy:8080***, launch chrome with these two command-line flags:
-
---proxy-server="socks5://***myproxy:8080***"
-
---host-resolver-rules="MAP \* ~NOTFOUND , EXCLUDE ***myproxy***"
-
-Explanation
-
-The --proxy-server="socks5://myproxy:8080" flag tells Chrome to send all http://
-and https:// URL requests through the SOCKS proxy server "myproxy:8080", using
-version 5 of the SOCKS protocol. The hostname for these URLs will be resolved by
-the *proxy server*, and not locally by Chrome.
-
-* NOTE: proxying of ftp:// URLs through a SOCKS proxy is not yet
- implemented.
-
-The --proxy-server flag applies to URL loads only. There are other components of
-Chrome which may issue DNS resolves *directly* and hence bypass this proxy
-server. The most notable such component is the "DNS prefetcher".Hence if DNS
-prefetching is not disabled in Chrome then you will still see local DNS requests
-being issued by Chrome despite having specified a SOCKS v5 proxy server.
-
-Disabling DNS prefetching would solve this problem, however it is a fragile
-solution since once needs to be aware of all the areas in Chrome which issue raw
-DNS requests. To address this, the next flag, --host-resolver-rules="MAP \*
-~NOTFOUND , EXCLUDE myproxy", is a catch-all to prevent Chrome from sending any
-DNS requests over the network. It says that all DNS resolves are to be simply
-mapped to the (invalid) address 0.0.0.0. The "EXCLUDE" clause make an exception
-for "myproxy", because otherwise Chrome would be unable to resolve the address
-of the SOCKS proxy server itself, and all requests would necessarily fail with
-PROXY_CONNECTION_FAILED.
-
-Debugging
-
-There are a lot of intricacies to configuring proxy settings as you intend:
-
-* Different profiles can use different proxy settings
-* Extensions can modify the proxy settings
-* If using the system setting, other applications can change them, and
- there can be per-connection settings.
-* The proxy settings might include fallbacks to other proxies, or
- direct connections
-* Plugins (for instance Flash and Java applets) can bypass the Chrome
- proxy settings alltogether
-* Other third-party components in Chrome might issue DNS resolves
- directly, or bypass Chrome's proxy settings.
-
-The first thing to check when debugging is look at the Proxy tab on
-about:net-internals, and verify what the effective proxy settings are:
-
-chrome://net-internals/#proxy
-
-Next, take a look at the DNS tab of about:net-internals to make sure Chrome
-isn't issuing local DNS resolves:
-
-chrome://net-internals/#dns
-
-Next, to trace the proxy logic for individual requests in Chrome take a look at
-the Events tab of about:net-internals:
-
-chrome://net-internals/#events \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/imeomni.png.sha1 b/chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/imeomni.png.sha1
deleted file mode 100644
index 9d06517d0d5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/imeomni.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c411a9bcdbfcba0c8a5f0d07d401a67757002867 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/index.md b/chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/index.md
deleted file mode 100644
index 04a6cb71ce0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/omnibox-ime-coordination/index.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: omnibox-ime-coordination
-title: Omnibox/IME Coordination
----
-
-## Implementation Status Update
-
-* Implemented in M17 on Win
-* Implemented in M18 on Chrome OS
-* Implemented in M29 on Win (Views implementation, IMM32)
-
-## Objective
-
-We aim to fix the poor interaction between Chrome’s omnibox and the IME (Input
-Method Editor). The main problem is that IME windows overlap with the omnibox
-autocomplete results, as pictured below.
-
-[<img alt="image"
-src="/developers/design-documents/omnibox-ime-coordination/imeomni.png">](/developers/design-documents/omnibox-ime-coordination/imeomni.png)
-
-This looks unpolished and may be confusing and frustrating to the user.
-
-## Proposed Solution and Plan
-
-Our proposal is to close the omnibox autocomplete popup window whenever the IME
-candidate window is open.
-We can easily detect the candidate window on Windows and Chrome OS, so we will
-implement this design on those platforms. It is likely not possible on Mac and
-Linux.
-After this design is implemented, we can consider a more sophisticated one. We
-would most likely experiment on Chrome OS, as we have the most control on that
-platform. If we implement and enjoy very good reception, we can consider further
-effort to implement on other platforms.
-
-## Background
-
-### The Omnibox
-
-Based on its current input, the omnibox pops up autocomplete results,
-suggestions that may come from browsing history, bookmarks, or Instant Suggest.
-There is also inline autocomplete, which is an autocomplete result inserted into
-the text edit area itself. Inline autocomplete seems to be already disabled
-during IME composition as it would otherwise interfere with composition (see
-<http://crbug.com/64983> and <http://crbug.com/75651>).
-
-### The IME
-
-An IME is used to input text in a more complex manner than the typical direct
-mapping of keystrokes to characters. For instance, Japanese has too many
-characters to fit on a keyboard. Using a Japanese IME, the user inputs a reading
-(“fujisan”) then converts them to the desired characters (“富士山”). The IME
-presents conversion candidates in a window and in general can present arbitrary
-UI elements that the application process has little control over.
-Text that has been generated through the IME but not yet committed is called
-composition text (or pre-edit text).
-
-### The Problem
-
-In Chrome as of M15, the IME’s UI elements are drawn over the omnibox
-autocomplete results, resulting in a poor user experience. Specific issues
-include the following:
-
-* The autocomplete results can’t be seen, but are rendered as if the
- user is expected to make use of them.
-* The autocomplete results appear to be interactive but are not. IME
- handles keystrokes, so up/down arrows navigate through IME windows
- instead of autocomplete results.
-* The user cannot easily uncover a partially obscured autocomplete
- result that looks interesting. The correct method, pressing Enter,
- commits and dismisses the IME, but in practice this is not very
- intuitive, and requires the user to delete and retype the query if
- the suggestion is ultimately rejected. Instead of Enter, the user
- may try to use the mouse (but clicking immediately activates the
- result instead of making it visible) or hit Escape (this closes that
- particular IME window but also alters the composition text, so the
- results change).
-* Navigating through the IME candidates alters the autocomplete
- results, since the composition text changes. The user notices these
- results are updating as if they are useful but cannot use them. This
- feels unpolished.
-
-IME and Omnibox Instant interaction may also be problematic. Instant is
-triggered immediately whenever the composition text is updated, which may feel
-noisy and sluggish to the user.
-
-## Requirements and Scale
-
-Ideally, we would fix the current poor interaction on all platforms, but our
-solution is likely implementable only on Windows and Chrome OS.
-We would also prefer the solution to work for all IMEs and all languages.
-However, universal coverage is not an absolute requirement, and we can keep a
-solution that works for a large enough group of users and doesn’t introduce new
-problems to others.
-If we attempt a more sophisticated design, we would probably implement on Chrome
-OS first, with an eye to implementing on other platforms if it has good
-reception. Ideally, we wouldn’t have different behavior on each platform. But it
-may be the case that only Chrome OS can be saved, due to the control we have on
-that platform.
-
-## Alternatives Considered
-
-We considered several design alternatives. These included the following ideas:
-
-1. Place the autocomplete popup below the IME window - This solves the
- overlap but can be unsightly as the IME window can be vertically
- large. Also, two focal points on screen (autocomplete results and
- IME candidates) is generally bad UX-wise. There are also questions
- like whether you switch between the two UI elements.
-2. Place IME window inside the autocomplete popup - This is about the
- same as 1.
-3. Remove IME panels - This is invasive and may render some IMEs
- unusable.
-4. Integrate IME suggestions/candidates with autocomplete results -
- This is hard implementation-wise. Some IMEs might not expose their
- suggestions/candidates in a usable way. We'd have to handle the IME
- UI ourselves.
-5. Request IME use compact/horizontal mode - This is more of a wish as
- most IMEs don't have such a mode.
-6. Keep autocomplete results always visible but greyed out during IME
- composition - Some people find this ugly. Also, same issues as 1.
-7. Use inline autocomplete during IME composition but not autocomplete
- popup - This solves overlap but loses multiple autocomplete results.
-
-However, these have both serious implementation difficulties and UX concerns.
-Implementation difficulties arise from the limited control over the IME which
-varies by platform. Furthermore, altering the IME’s native UX risks confusing
-and annoying the user.
-Thus the design and implementation costs are high. If we were to choose one of
-these solutions, we risk sinking much effort into a solution that might not be
-usable. Perhaps it would work only for some IMEs or break on future versions of
-IMEs. Or, it may be implemented and ultimately be poorly received by users.
-Another idea is to always close the autocomplete popup during IME composition.
-However, this is too aggressive. It would prevent users from making use of
-autocomplete during the input phase before character conversion (for Japanese,
-when inputting kana before converting to kanji/kana). It would also make little
-sense for IMEs which usually do not have a composition window open, such as
-Korean IMEs.
-For reference, Firefox and IE9 seem to always close their suggestions popup
-during IME composition, but we haven’t looked into this extensively.
-
-## Detailed Design
-
-On Windows, we can detect the candidate window using composition attributes or
-WM_IME_NOTIFY/IMN_OPENCANDIDATE and IMN_CLOSECANDIDATE messages. When the
-candidate window is open, we suppress the autocomplete popup. The autocomplete
-results should be fetched anyway, to be displayed immediately when the candidate
-window closes.
-This only detects the candidate window; some IMEs may display windows other than
-the candidate window, such as Google Japanese Input, which displays a suggestion
-window. But we are OK with allowing such popups, as they are not the common
-case, and removing them might be overly aggressive anyway.
-We can also choose whether to enable or disable Instant Search during
-conversion.
-
-## UMA Metrics
-
-We believe our design is a better UX, but want some way to confirm this. At
-least, we must confirm that it is it rare that an autocomplete result is used
-while candidate window is open. Unfortunately, getting UMA metrics like the
-number of times an autocomplete result was selected is impossible, as Chrome's
-UI design is such that an item from the dropdown is always selected. We still
-need ideas for measuring the impact of our change.
-
-## Links
-
-* [Chromium bug
- 2924](http://code.google.com/p/chromium/issues/detail?id=2924) -
- Don't let IME candidate window overwrite the autocomplete popup
-* [Chromium bug
- 38450](http://code.google.com/p/chromium/issues/detail?id=38450) -
- Omnibox autocomplete behavior for Korean is less than optimal
- (related, but this design doc doesn’t affect this bug)
-* [Chromium bug
- 245578](https://code.google.com/p/chromium/issues/detail?id=245578)
- - IME candidate window overlaps Omnibox suggest. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/omnibox-prefetch-for-default-search-engines/index.md b/chromium/docs/website/site/developers/design-documents/omnibox-prefetch-for-default-search-engines/index.md
deleted file mode 100644
index cc260384c9d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/omnibox-prefetch-for-default-search-engines/index.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: omnibox-prefetch-for-default-search-engines
-title: Omnibox Prefetch for Default Search Engines
----
-
-This doc provides a quick guideline and example of how to adapt an existing
-Chrome Default Search Engine (DSE) to prefetch likely suggestions. This doc also
-provides some key details for understanding how Chrome treats instructions to
-prefetch.
-
-# How to recommend prefetches
-
-Chrome utilizes the DSE suggestion API to fetch a list of suggestions that are
-parsed in a fairly straightforward manner. This API fetches suggestions based on
-the current user input in the omnibox, and a new set of suggestions is fetched
-for each input change in the omnibox. Search engines specify their suggestion
-API URL in a Chromium config file, e.g., [Bing is configured
-here](https://source.chromium.org/chromium/chromium/src/+/main:components/search_engines/prepopulated_engines.json;drc=453b22336b4546cf64373bfc8a7ba9ed31c24fff;l=67).
-Note that “{searchTerms}” is the input in the omnibox, and various search
-engines have implemented query params that any search engine can send to their
-suggestion API.
-
-There are up to 5 elements in an array, none of which are required. However,
-they are parsed by position, so to provide the 5th element, all previous fields
-must be present (but can be empty). The fields are:
-
-1. The query value (must match the user input)
-
-1. The suggestion list (an array of the suggestions text, i.e., possible autocompleted query values)
-
-1. The description list (an array of the descriptive text corresponding to to the suggestion list that is shown to the user)
-
-1. The query URL list (appears to be unused in Chrome, but needs to be the 4th item)
-
-1. A JSON object of optional values
-
-We will assume that the search engine has already implemented at least the first
-and second field of the suggestion API. The third field is optional, but will be
-implemented by most search engines that implement the suggestion API. The fourth
-field must be present (in order to use the fifth field), but can be an empty
-array. The fifth field is where we will focus our attention.
-
-Assuming the provider has entries for the first 4 fields, the fifth field is a
-JSON object, which can be initially added as an empty JSON object (“{}”) (note
-there are other fields that can be added to this object, so en existing DSE
-implementation may already provide a non-empty object). The prefetch
-functionality is triggered using a new JSON field in this fifth field JSON
-object. The provider needs to determine which suggestion result should be
-prefetched using 0-indexing to represent the suggestion (often this is the first
-suggestion result, as it is at the top of the list, so the index is 0). Once the
-suggestion index is identified, the following should be added to the JSON object
-replacing &lt;prefetch index&gt; with the appropriate value:
-
- "google:clientdata": {
- "phi": <prefetch index>;
- }
-
-An example of the entire suggestion autocomplete response is provided below. It
-will cause a prefetch for the first result in the suggestion list:
-
- [
- "do",
- ["Dog","Dolphin","Dodo"\],
- ["Terrestrial Mammal", "Aquatic Mammal", "Extinct Bird"],
- [],
- {
- "google:clientdata": {
- "phi": 0
- }
-
- }
- ]
-
-This response will show the user the three results (Dog: Terrestrial mammal,
-Dolphin: Aquatic Mammal, Dodo: Extinct Bird), and it will trigger a prefetch of
-the search result for “Dog”. The prefetched result page will be fetched with the
-“Purpose: Prefetch” header. The prefetched results page (if successfully
-fetched) is stored in memory for 60 seconds, and ignores cache headers when
-being served.
-
-If a DSE wants to customize the prefetch behavior, such as to add a query
-parameter, they may submit a change list to alter the [Chromium Source Code
-(components/search_engines/prepopulated_engines.json)](https://source.chromium.org/chromium/chromium/src/+/main:components/search_engines/prepopulated_engines.json?q=prepopulate%20-f:Debug%2Fgen%20f:json&ss=chromium)
-to modify the search URL. Google has added a
-[google:prefetchSource](https://source.chromium.org/chromium/chromium/src/+/main:components/search_engines/prepopulated_engines.json?q=f:prepopulated%20google:prefetchSource%20-f:Debug%2Fgen&ss=chromium)
-parameter to the search URL (i.e., the URL adds
-“[&pf=cs](https://source.chromium.org/chromium/chromium/src/+/main:components/search_engines/template_url.cc;l=1153;drc=98898daa2e8f46ff098cea1f2e218f8a8266c838;bpv=1;bpt=1)”).
-This query parameter is sent by chromium and used by Google Search’s server to
-treat the request as a prefetch from the omnibox.
-
-# Things to note about the implementation
-
-There are various reasons that Search prefetches might not be triggered by
-Chrome or might not be served to the user:
-
-* The user has disabled speculative prefetching
-
-* The user has disabled Javascript (overall of for the search provider domain)
-
-* The suggestion engine is not the DSE
-
-* There was a recent error when prefetching
-
-* There were too many recent prefetches that the user did not navigate to
-
-* A prefetch (for that search term) was issued recently, whether it can be served or not
-
-* Chrome (or an extension) blocked or delayed the search query URL
-
-* The prefetch did not finish (see a 2XX response code) by the time the user navigated
-
-* The user changed language, changed DSE, cleared history, etc. before the user navigates to the prefetch
-
-* The prefetch became stale (60 seconds is the current configuration)
-
-* The request failed (received a non 2XX error, timed out, network error)
-
-Additionally, if the DSE adds a prefetch parameter, and the prefetch is served,
-the address bar will show the URL the user would have otherwise navigated to
-without the prefetch. This preserves history and link sharing to prevent users
-seeing an error code or other problems when the server assumes the prefetch
-parameter means the query is low priority due to being a prefetch. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/Cross Process Tabs (for posting).png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/Cross Process Tabs (for posting).png.sha1
deleted file mode 100644
index 93c03ef4469..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/Cross Process Tabs (for posting).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1a5b3228080fdf7503ea6b3a11d64bc19ddbdcf7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document (1).png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document (1).png.sha1
deleted file mode 100644
index 2c3c5bcc400..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-016be1be0c70c366f8e46afd3b78ff5a9734cb21 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document 2015 (for posting).png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document 2015 (for posting).png.sha1
deleted file mode 100644
index 468d0a9c56a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame DOMWindow Document 2015 (for posting).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b7f2bc02be997f9cec7d308e18f03e1a5a2edc49 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees (for posting).png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees (for posting).png.sha1
deleted file mode 100644
index b0446725bee..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees (for posting).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eceb1961ff9892b6a41289a6d7b30d557bc2df4c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees 2015 (for posting).png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees 2015 (for posting).png.sha1
deleted file mode 100644
index 8e9dfc63e92..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/Frame Trees 2015 (for posting).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2e7c590b080165fcb3a3ec29728693ee8c78103c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/Local vs Remote Frame diagram.png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/Local vs Remote Frame diagram.png.sha1
deleted file mode 100644
index f73b3f10ec3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/Local vs Remote Frame diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9bbd257d4c112491641f2d1cef1ec001eff6674e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/framehandle/index.md b/chromium/docs/website/site/developers/design-documents/oop-iframes/framehandle/index.md
deleted file mode 100644
index 419cef0f4d8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/framehandle/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/oop-iframes
- - Out-of-Process iframes (OOPIFs)
-page_name: framehandle
-title: FrameHandle
----
-
-**This design document is out of date.**
-
-Blink Frames are now implemented using an inheritance relationship, where
-blink::Frame is a base class for blink::LocalFrame and blink::RemoteFrame. They
-are now fully implemented so this documentation will not be updated.
-
-Doc:
-<https://docs.google.com/a/chromium.org/document/edit?id=1PeSpryRsXlLxHU58GOa0s67kuKaQeGitmM0iWS02CvU>
-
-#### FrameHandle
-
-Diagram:
-https://docs.google.com/a/chromium.org/drawings/d/1sqOb8DCNy7wlPMCp9oPyd981wBsYfvy4SsRZD4_HYos/view
-
-#### FrameHandle \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/index.md b/chromium/docs/website/site/developers/design-documents/oop-iframes/index.md
deleted file mode 100644
index 3516855fcc2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/index.md
+++ /dev/null
@@ -1,270 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: oop-iframes
-title: Out-of-Process iframes (OOPIFs)
----
-
-This page provides an overview of Chromium's support for out-of-process iframes
-(OOPIFs), which allow a child frame of a page to be rendered by a different
-process than its parent frame. OOPIFs were motivated by security goals like the
-[Site Isolation](/developers/design-documents/site-isolation) project, since
-they allow a renderer process to be dedicated to a single web site, even when
-cross-site iframes are present. OOPIFs are a general mechanism, though, and can
-be used for other features than security (e.g., the &lt;webview&gt; tag in
-Chrome Apps).
-
-Supporting OOPIFs required a large architecture change to Chromium. At a high
-level, the browser process now tracks subframes directly, and core parts of the
-browser (e.g., painting, input events, navigation, etc) have been updated to
-support OOPIFs. Many other features in Chromium now combine information from
-frames in multiple processes when operating on a page, such as Accessibility or
-Find-in-Page.
-
-[TOC]
-
-## Status
-
-### Current Uses
-
-The first use of OOPIFs was --isolate-extensions mode, which launched to Chrome
-Stable in M56. This mode used OOPIFs to keep web iframes out of privileged
-extension processes, which offered a second line of defense against malicious
-web iframes that might try to compromise an extension process to gain access to
-extension APIs. This mode also moved extension iframes on web pages into
-extension processes.
-
-We enabled OOPIFs in general web pages when launching Site Isolation (for all
-sites) on desktop in M67. The first uses on Android launched in M77, to enable
-Site Isolation for sites that users log into.
-
-Beyond Site Isolation, OOPIFs have been used for a number of Chrome
-architectural features. They have replaced the plugin infrastructure for
-implementing GuestViews, such as the &lt;webview&gt; tag in Chrome Apps. They
-have also replaced plugin code for MimeHandlerView, which is how PDFs and some
-other data types are rendered.
-
-For any issues observed in these uses of OOPIFs, please file a bug in the
-component
-[Internals&gt;Sandbox&gt;SiteIsolation](https://bugs.chromium.org/p/chromium/issues/list?q=component:Internals%3ESandbox%3ESiteIsolation).
-
-### Project Resources
-
- [Task Dependency Diagram](http://csreis.github.io/oop-iframe-dependencies/)
- - A visualization of the bugs and tasks that need to be completed for each
- upcoming milestone. (Out of date.)
-
- [Internals&gt;Sandbox&gt;SiteIsolation](https://bugs.chromium.org/p/chromium/issues/list?q=component:Internals%3ESandbox%3ESiteIsolation)
- - All known bugs with OOPIFs and Site Isolation in general. The overall
- tracking bug for OOPIFs is <https://crbug.com/99379>, and the launch is
- tracked at <https://crbug.com/545200>.
-
- Bots using --site-per-process: [FYI
- Linux](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Linux),
- [FYI
- Windows](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Win),
- [linux_site_isolation](http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_site_isolation)
- try bot
-
- [Feature Update
- FAQ](https://docs.google.com/document/d/1Iqe_CzFVA6hyxe7h2bUKusxsjB6frXfdAYLerM3JjPo/edit?usp=sharing)
- - General information for how to update Chromium features to be compatible
- with OOPIFs.
-
- [Affected Feature
- List](https://docs.google.com/document/d/1dCR2aEoBJj_Yqcs6GuM7lUPr0gag77L5OSgDa8bebsI/edit?usp=sharing)
- - The set of Chromium features we know are affected by OOPIFs.
-
- [Site Isolation Summit
- talks](http://www.chromium.org/developers/design-documents/site-isolation#TOC-2015-Site-Isolation-Summit-Talks)
- - A set of slides and videos covering the changes to Chromium's architecture
- and how features can be updated.
-
- Mailing list:
- [site-isolation-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/site-isolation-dev)
-
-## Architecture Overview
-
-### Frame Representation
-
-Much of the logic in the [content
-module](http://www.chromium.org/developers/content-module) has moved from being
-tab-specific to frame-specific, since each frame may be rendered in different
-processes over its lifetime.
-
-#### Proxies
-
-[<img alt="image"
-src="/developers/design-documents/oop-iframes/Cross%20Process%20Tabs%20%28for%20posting%29.png"
-height=329
-width=400>](/developers/design-documents/oop-iframes/Cross%20Process%20Tabs%20%28for%20posting%29.png)
-
-Documents that have references to each other (e.g., from the frame tree,
-window.opener, or named windows) can interact via JavaScript. When the documents
-are same-site, they must live in the same process to allow synchronous access.
-When they are cross-site, they can live in different processes but need a way to
-route messages to each other, for calls like postMessage. Same-site documents
-with references to each other are grouped together using the SiteInstance class,
-as described on the [Process
-Models](/developers/design-documents/process-models) page.
-
-To support cross-process interactions like postMessage on a document's
-DOMWindow, Chromium must keep a proxy for the DOMWindow in each of the other
-processes that can reach it. As shown in the diagram at right, this allows a
-document from site A to find a proxy in its own process for a DOMWindow that is
-currently active on site B. The proxy can then forward the postMessage call to
-the browser and then to the correct document in the process for site B.
-
-OOPIFs require each renderer process to keep track of proxy DOMWindows for all
-reachable frames, both main frames and subframes.
-
-#### Browser Process
-
-Chromium keeps track of the full frame tree for each tab in the browser process.
-WebContents hosts a tree of FrameTreeNode objects, mirroring the frame tree of
-the current page. Each FrameTreeNode contains frame-specific information (e.g.,
-the frame's name, origin, etc). Its RenderFrameHostManager is responsible for
-cross-process navigations in the frame, and it supports replicating state and
-routing messages from proxies in other processes to the active frame.
-
-#### Renderer Process
-
-In each renderer process, Chromium tracks of proxy DOMWindows for each reachable
-frame, allowing JavaScript code to find frames and send messages to them. We try
-to minimize the overhead for each of the proxy DOMWindows by not having a
-document, widget, or full V8 context for them.
-
-Frame-specific logic in the content module's RenderView and RenderViewHost
-classes has moved into routable RenderFrame and RenderFrameHost classes. We have
-one full RenderFrame (in some process) for every frame in a page, and we have a
-corresponding but slimmed down RenderFrameProxy as a placeholder in the other
-processes that can reference it. These proxies are shown with dashed lines in
-the diagram below, which depicts one BrowsingInstance (i.e., group of related
-windows) with two tabs, containing two subframes each.
-
-[<img alt="image"
-src="/developers/design-documents/oop-iframes/Frame%20Trees%202015%20%28for%20posting%29.png">](/developers/design-documents/oop-iframes/Frame%20Trees%202015%20%28for%20posting%29.png)
-
-#### Inside Blink
-
-[<img alt="image"
-src="/developers/design-documents/oop-iframes/Frame%20DOMWindow%20Document%202015%20%28for%20posting%29.png">](/developers/design-documents/oop-iframes/Frame%20DOMWindow%20Document%202015%20%28for%20posting%29.png)
-
-Blink has LocalFrame and LocalDOMWindow classes for frames that are in-process,
-and it has RemoteFrame and RemoteDOMWindow classes for the proxies that live in
-other renderer processes. The remote classes have very little state: generally
-only what is needed to service synchronous operations. A RemoteDOMWindow does
-not have a Document object or a widget.
-LocalFrame and RemoteFrame inherit from the Frame interface. While downcasts
-from Frame to LocalFrame are possible, this will likely cause bugs with OOPIFs
-unless extra care is taken. LocalFrame corresponds to WebLocalFrame (in the
-public API) and content::RenderFrame, while RemoteFrame corresponds to
-WebRemoteFrame and content::RenderFrameProxy.
-
-Blink has the ability to swap any frame between the local and remote versions.
-(This replaces the old "swapped out RenderViewHost" implementation that Chromium
-used for cross-process navigations.)
-
-It is worth noting that the
-[&lt;webview&gt;](https://developer.chrome.com/apps/tags/webview) implementation
-is being migrated to work on top of the new OOPIF infrastructure. For the most
-part, Blink code will be able to treat a &lt;webview&gt; similar to an
-&lt;iframe&gt;. However, there is one important difference: the parent frame of
-an &lt;iframe&gt; is the document that contains the &lt;iframe&gt; element,
-while the root frame of a &lt;webview&gt; has no parent and is itself a main
-frame. It will likely live in a separate frame tree.
-
-This support for OOPIFs and &lt;webview&gt; has several major implications for
-Blink:
-
-* Page's main frame may be local **or** remote. There are a number of
- places that assume that main frame will always be local (e.g., the
- current drag and drop implementation always uses the main frame's
- event handler to perform hit-testing). These places will need to
- change.
-* More generally, any given frame in the frame tree may be remote.
- Thus, we are rewriting code like the web page serializer, which
- depended on iterating through all the frames in one process to
- generate the saved web page.
-* Layout and rendering were formerly coordinated by the main frame.
- This (and other code like this) needs to change to use a new
- concept: the local frame root. The local frame root for a given
- LocalFrame A is the highest LocalFrame that is a part of a
- contiguous LocalFrame subtree that includes frame A. In code form:
- LocalFrame\* localRootFor(LocalFrame\* frame) {
- LocalFrame\* local_root = frame;
- while (local_root && local_root-&gt;parent()-&gt;isLocalFrame())
- local_root = toLocalFrame(local_root-&gt;parent());
- return local_root;
- }
- These contiguous LocalFrame subtrees are important in Blink because they
- synchronously handle layout, painting, event routing, etc.
-
-Some earlier information on the refactoring goals can be found in the
-[FrameHandle design doc](/developers/design-documents/oop-iframes/framehandle),
-however that is largely obsolete.
-
-Note: We are attempting to minimize the memory requirements of RemoteFrames and
-RemoteDOMWindows, because there will be many more than in Chromium before
-OOPIFs. Before, the space required for swapped out RenderViewHosts was O(tabs \*
-processes) within a BrowsingInstance, and most BrowsingInstances only contain 1
-or 2 tabs. OOPIFs will require O(frames \* processes) space for proxies. This
-could be much higher, because the number of frames can be much larger than the
-number of tabs, and because the number of processes will increase based on
-cross-site frames. Fortunately, RemoteFrames require far less memory than
-LocalFrames, and not all cross-site iframes will require separate processes.
-
-### Navigation
-
-Chromium now has support for cross-process navigations within subframes. Rather
-than letting the renderer process intercept the navigation and decide if the
-browser process should handle it, all navigations are intercepted in the browser
-process's network stack. If the navigation crosses a site boundary that requires
-isolation (according to our Site Isolation policy), the browser process will
-swap the frame's renderer process. This can be done because the browser process
-knows the full frame tree, as described above. Until
-[PlzNavigate](https://docs.google.com/document/d/1cSW8fpJIUnibQKU8TMwLE5VxYZPh4u4LNu_wtkok8UE/edit?usp=sharing)
-launched, this was implemented using CrossSiteResourceHandler to transfer
-navigations to a different process when needed.
-
-A tab's session history also becomes more complicated when subframes may be
-rendered by different processes. Originally, Blink took care of tracking the
-frame tree in each HistoryItem in the renderer process, and the browser process
-just tracked each back/forward entry using NavigationEntry. We removed the frame
-tracking logic from Blink's HistoryController to keep track of each frame's
-navigations in the browser process directly.
-
-We also changed the representation of a tab's session history to more closely
-match the HTML5 spec. Rather than cloning the frame tree for each HistoryItem,
-we now keep track of each frame's session history separately in the browser
-process, and we use a separate "joint session history" list for back and forward
-navigations. Each entry in this list will have a tree of pointers to each
-frame's corresponding session history item.
-
-All details of navigation refactoring were described in this [design
-document](https://docs.google.com/document/d/1Z-24Xmb5A00eMSfaBB5MQLTrp9LQ5hm3GKMfpFi44fQ/edit).
-
-### Rendering
-
-To render an iframe in a different process than its parent frame, the browser
-process passes information back and forth between the renderer processes and
-helps the GPU process composite the images together in the correct sizes and
-locations. We use the
-[Surfaces](http://www.chromium.org/developers/design-documents/chromium-graphics/surfaces)
-implementation to maintain a set of textures from multiple renderer processes,
-compositing them into a single output image. More details are available in this
-[design
-document](http://www.chromium.org/developers/design-documents/oop-iframes/oop-iframes-rendering).
-
-### Input Events
-
-Similar to rendering, we use the
-[Surfaces](http://www.chromium.org/developers/design-documents/chromium-graphics/surfaces)
-implementation to do hit testing in the browser process to deliver input events
-directly to the intended frame's renderer process. We also manage focus in the
-browser process to send keyboard events directly to the renderer process of the
-focused frame. More details are available in this [design
-document](https://docs.google.com/document/d/1RQUbxiK60Z7CZDcWeryqKeX-bewZzgsirjF2Dprfx3U/edit?usp=sharing). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/Design Doc- Rendering and compositing out-of-process iframes.png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/Design Doc- Rendering and compositing out-of-process iframes.png.sha1
deleted file mode 100644
index aa055c6cf3d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/Design Doc- Rendering and compositing out-of-process iframes.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dacbd923fabc6bff39b72e195c59becb7e40126a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/index.md b/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/index.md
deleted file mode 100644
index 63df652a84c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/index.md
+++ /dev/null
@@ -1,323 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/oop-iframes
- - Out-of-Process iframes (OOPIFs)
-page_name: oop-iframes-rendering
-title: Rendering and compositing out of process iframes
----
-
-# Summary
-
-This document provides a design for rendering and compositing out-of-process
-iframe (OOPIF) elements.
-
-## Contents
-
-[TOC]
-
-## Background
-
-### Out-of-process iframes
-
-This is in support of the main OOPIF design work, for which a higher level
-description can be found at
-<http://www.chromium.org/developers/design-documents/oop-iframes>.
-
-### A very brief primer on Blink rendering and painting
-
-When an HTML resource is loaded into Blink, the parser tokenizes the document
-and builds a DOM tree based on the elements it contains. The DOM tree is a
-WebCore data structure that consists of objects with types that inherit from
-[WebCore::Node](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/WebCore/dom/Node.h).
-
-As each node is added to the DOM tree, the attach() method is called on it which
-creates an associated renderer (an object with a type that inherits from
-[WebCore::RenderObject](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/WebCore/rendering/RenderObject.h))
-and adds it to the render tree. Objects in the render tree roughly correspond to
-objects in the DOM tree, but there are many exceptions (some DOM nodes do not
-receive renderers, some will have more than one renderer, and many renderers are
-created that that do not have corresponding DOM nodes). The render tree is the
-primary data structure involved in the layout phase of rendering, during which
-size and position are computed for all rendered elements.
-
-During construction or modification of the render tree, some renderers will
-receive associated
-[WebCore::RenderLayer](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/WebCore/rendering/RenderLayer.h)
-objects. Attaching a RenderLayer to a RenderObject indicates that the renderer
-has its own coordinate system, and therefore the content of the renderer and its
-descendants can (but won’t necessarily) be painted to a separate compositing
-layer. Each RenderLayer is added to the RenderLayer tree, which has a sparse
-association with the render tree and is the primary data structure used for the
-painting phase of rendering.
-
-The diagram below provides a basic illustration of the DOM tree, render tree,
-and RenderLayer tree for the following HTML:
-
-&lt;html&gt;
-
-&lt;body&gt;
-
-&lt;iframe src=”<http://www.example.org>”&gt;&lt;/iframe&gt;
-
-&lt;/body&gt;
-
-&lt;/html&gt;
-
-<img alt="image"
-src="/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering%20design%20-%20rendering%20trees.png">
-
-More details on rendering, and in particular the layout phase, can be found at
-<https://www.webkit.org/blog/114/webcore-rendering-i-the-basics/>.
-
-The details of painting depend on whether accelerated compositing is used. This
-design uses the assumption that OOPIFs will always be rendered using GPU
-accelerated compositing in Chromium.
-
-When accelerated compositing is in use, some RenderLayers receive separate
-compositing layers, or backing surfaces, onto which their bitmaps will be
-painted. All compositing layers are provided to the compositor, where they are
-used to create the final rendered bitmap. In WebCore, compositing layers are
-represented and managed by the
-[RenderLayerBacking](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/WebCore/rendering/RenderLayerBacking.h)
-class.
-
-RenderLayerBacking in turn corresponds to a GraphicsLayer, the glue between
-WebCore rendering and platform compositing, instantiated in our case as
-[GraphicsLayerChromium](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h).
-GraphicsLayers are positioned into yet another sparse tree, this one used by the
-compositor.
-
-### A little bit about compositing and the GPU
-
-A GraphicsLayer internally manages a
-[WebLayer](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/Platform/chromium/public/WebLayer.h),
-which is a compositor container for a shared memory buffer between a renderer
-process and the GPU process. During the painting phase, each RenderLayer
-instructs all of its associated RenderObjects to paint into the WebLayer buffer.
-The GPU process can output the bitmap texture to the screen.
-
-Details of how the different processes synchronize buffer usage and throttle
-rendering vary significantly by platform. The GPU often uses a double buffering
-system, in which two buffers are shared so that one buffer is being output to
-the screen while the other is being painted. When a paint is complete, the
-renderer issues a swap buffer command to the GPU to cause it to swap which
-buffer is being displayed, and which is available for paint. The renderer sends
-an IPC to the browser when a new buffer is available and expects an ACK for
-every such message. This ACK contains a previously sent buffer to be reused by
-the GPU and a sync point (location in the GPU command buffer), or a NULL buffer,
-if nothing is available to be recycled. Sync points are used to make sure the
-same buffer isn’t being rendered into and drawn out of. When an embedding
-compositor issues the last draw call that uses the child renderer’s image data
-to the GPU command buffer, it also inserts a sync point into the command stream
-and sends an ACK to the renderer with that number. Rendering into the recycled
-buffer is only allowed after the GPU processed all commands up to the sync
-point. Rendering is suspended until that happens.
-
-The compositor uses a
-[TextureLayer](https://code.google.com/p/chromium/codesearch#chromium/src/cc/layers/texture_layer.h)
-to encapsulate textures that need to be shared between different processes. It
-also provides a management facility for TextureLayer in
-[TextureMailbox](https://code.google.com/p/chromium/codesearch#chromium/src/cc/resources/texture_mailbox.h),
-which conveys ownership of the texture between processes. One process can make a
-texture available to another process by using the glProduceTextureCHROMIUM GPU
-command buffer API for the appropriate mailbox, and then the next process takes
-ownership of the texture via the glConsumeTextureCHROMIUM GPU command buffer API
-on the same mailbox.
-
-Most of this information, and much much more, can be found at
-<http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome>.
-
-### The Übercompositor
-
-The
-[ubercompositor](https://docs.google.com/a/chromium.org/document/d/1ziMZtS5Hf8azogi2VjSE6XPaMwivZSyXAIIp0GgInNA/edit)
-is being developed to improve rendering performance on Aura, by integrating
-compositing of UI and web content in the browser process. Under the new
-architecture, child compositors in each rendering process supply compositor
-frames to the parent compositor which are then composited into the screen for
-display.
-
-Each CompositorFrame contains a set of quads and associated texture references
-that are generated by a child compositor in a renderer process. Internally,
-TextureMailboxes are used to transfer textures to the browser process.
-
-Whereas in the existing hardware path compositing mode the renderer sends a
-SwapBuffer message to the GPU to instruct it to display its uploaded texture to
-screen, in the ubercompositor architecture the renderer sends an IPC message
-directly to the browser containing the compositor frame. The parent compositor
-then interacts with the GPU process via IPC in order to do the final
-compositing.
-
-## Rendering OOPIFs
-
-### Overview
-
-The full security advantage of OOPIFs is very difficult to achieve when the
-compositing of a browser tab’s contents is done by a renderer process, because
-the ability to use a texture in compositing implies read access to the pixels of
-that texture (see the Cross Site Texture Stealing section below). Therefore the
-primary design assumes the availability of ubercompositor. A prototype has been
-built using conventional hardware path compositing, and we are maintaining that
-parallel design with the expectation that we will want OOPIFs to be available on
-platforms without ubercompositor availability, despite the significantly reduced
-security properties.
-
-The following list enumerates the requirements for OOPIFs to paint:
-
- The browser must enable accelerated compositing whenever an OOPIF is being
- rendered.
-
- New browser process facilities must pass messages from the embedding
- renderer process to the iframe renderer process for sizing information, and
- from the iframe renderer process to the embedding renderer process with
- information on texture availability for compositing.
-
- New renderer process facilities must receive identifying texture information
- (i.e. a texture mailbox name or ubercompositor frame) and associate it with
- a WebLayer that is attached to the FrameView object associated with the
- OOPIF’s Frame object.
-
- RenderFrameBase, the WebCore renderer associated with frame and iframe
- elements, must be aware when it contains out-of-process rendered content and
- in that case receive its own RenderLayer and RenderLayerBacking.
-
- the RenderLayerBacking associated with RenderFrameBase must set the contents
- of its graphics layer to the WebLayer.
-
-When using hardware path compositing without ubercompositor, the renderer
-process for the out-of-process frame creates a TextureMailbox. A
-RenderWidgetHostViewSubframe object in the browser process passes the mailbox
-name to the top-level frame renderer. This is illustrated in the diagram below.
-The right half of the diagram is mainly existing functionality that will require
-few changes. The left half contains some new and modified classes as well as new
-IPC messages.
-
-[<img alt="image"
-src="/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering%20design%20-%20texture%20routing.png">](/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering%20design%20-%20texture%20routing.png)
-
-When using the ubercompositor, the renderer process for the subframe creates a
-compositor frame (a concept entirely distinct from HTML frames), which can
-contain many texture mailboxes. It passes the compositor frame directly to the
-browser process, which then relays it to the top-level frame renderer. The
-top-level frame renderer cannot access the textures that are stored in GPU
-memory, but can pass all of its compositor frames, including those obtained from
-the subframe renderer process, back to the browser process for the
-ubercompositor to composite them.
-
-[<img alt="image"
-src="/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering%20design%20-%20compositor%20frame%20routing.png">](/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering%20design%20-%20compositor%20frame%20routing.png)
-
-### Browser process changes
-
-Relevant changes to the representation of pages and frames in the browser
-process are described at
-<http://www.chromium.org/developers/design-documents/oop-iframes>.
-
-IPC messages must be routed from the subframe renderer to the top-level frame
-renderer to notify it of changed texture buffers or compositor frames. Also, IPC
-messages must be routed from the top-level frame renderer to the subframe
-renderer with control information such as resizing.
-
-Each ViewHost_\* message will be passed through the RenderWidgetHostView for its
-associated RenderFrame. RenderWidgetHostView will use the WebContents to send
-the message to the destination RenderFrame (for messages originating from a
-subframe renderer, this is the top-level RenderFrame; for messages destined to a
-subframe renderer, this will use GetRenderManager()-&gt;current_host()) and then
-dispatch the message to the proper recipient.
-
-### Renderer process changes
-
-1. IPCs
-
-RenderView registers handlers for the new ViewMsg_BuffersSwapped IPC message (in
-hardware path compositing) and ViewMsg_CompositorFramesSwapped (for
-ubercompositor). This handlers lazily instantiate a SubframeCompositorHelper
-object and proxies most of the handling to the helper. The new IPC messages
-convey information such as size, TextureMailbox name, compositor frame data, and
-GPU routing information for the texture with the swapped out frame contents that
-was rendered by another process.
-
-2. SubframeCompositorHelper
-
-SubframeCompositorHelper is a new class that is responsible for managing the
-TextureLayer and DelegatedRendererLayer information associated with a swapped
-out frame. It is attached to the WebKit::RenderFrame for an out-of-process
-frame, and is created upon receipt of a ViewMsg_BuffersSwapped or
-ViewMsg_CompositorFramesSwapped IPC message. It performs the following tasks:
-
- Create a local TextureLayer for a received TextureMailbox name, or a
- DelegatedRendererLayer for a received compositor frame
-
- Creates a WebLayer containing a TextureLayer or DelegatedRendererLayer, and
- attaches the WebLayer to the FrameView for the swapped out subframe
-
- Manages the lifetime of the TextureLayer or DelegatedRendererLayer
-
-[<img alt="image"
-src="/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering%20design%20-%20ogres%20are%20like%20onions.png">](/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering%20design%20-%20ogres%20are%20like%20onions.png)
-
-3. FrameView and RenderIFrame
-
-WebCore itself requires few modifications related to rendering. The main change
-is that for any cross-site iframe element, its associated RenderIFrame must
-always have a RenderLayer and RenderLayerBacking created. This can be
-accomplished by modifying RenderPart::requiresAcceleratedCompositing() and
-RenderIFrame::requiresLayer() to return true. Additionally,
-RenderCompositor::requiresCompositingForFrame(), which decides whether to create
-a new compositing layer for a frame renderer, must always return true for
-OOPIFs.
-
-RenderIFrame, since it inherits from WebCore::RenderWidget, contains a pointer
-to a WebCore::Widget. The m_widget on any RenderIFrame should always point to a
-FrameView. SubframeCompositorHelper attaches the layer to the FrameView to make
-it accessible during rendering: RenderCompositor accesses the WebLayer via
-FrameView::platformLayer() and assigns it as the content for the frame’s
-RenderLayerBacking. Once this is done, the compositor will display the frame
-texture in the correct position.
-
-## Compositing
-
-### Cross-site texture stealing
-
-An important security requirement for OOPIFs is that even though cross-site
-frame contents are being composited with the content in the top-level frame, the
-top-level renderer process must not be able to read the pixels that are drawn
-within the frame. The ability to do this would allow a compromised renderer
-process access to cross-site content, which is contrary to [the goals of the
-site isolation
-project](http://www.chromium.org/developers/design-documents/site-isolation).
-
-We don’t believe this to be a feasible goal without the availability of
-ubercompositor. It would be very difficult, given the performance constraints of
-compositing, to require that the top-level renderer process be able to composite
-using a given texture without being able to write that texture to an accessible
-memory buffer. In the ubercompositor model, compositing is done by the trusted
-browser process so this constraint no longer .
-
-Access to the texture from a parent renderer process will be prevented by the
-GPU process, where a check will be added to the handler of the
-glConsumeTextureCHROMIUM command buffer API so that a TextureMailbox can be
-consumed only by the renderer process that initially created the texture, and by
-the browser process.
-
-## Constraints
-
-### Software path rendering
-
-OOPIFs will not be supported when software path rendering is enabled. Software
-compositing, when it becomes available, will allow OOPIFs to function on systems
-with graphics driver that do not support hardware-based compositing, but this
-will have the same security limitations as OOPIFs rendered under current
-hardware path compositing, which does not prevent cross-site texture stealing.
-
-### Compositor availability
-
-Ubercompositor is limited to running on Aura, which currently only runs on
-ChromeOS. We expect Aura to be running on Windows and Linux before OOPIFs are
-enabled on stable without a flag. Until Aura is also ported to OS X, our
-implementation will rely on the current hardware-accelerated compositor and the
-software compositor. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - compositor frame routing.png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - compositor frame routing.png.sha1
deleted file mode 100644
index d2c4cd15390..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - compositor frame routing.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8cf6bc4973c9cc07d33d18d5381c3ac202979d77 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - ogres are like onions.png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - ogres are like onions.png.sha1
deleted file mode 100644
index 21d2c43a770..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - ogres are like onions.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cc4adc69049911afd8d8f983416539153870fd20 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - rendering trees.png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - rendering trees.png.sha1
deleted file mode 100644
index bc57be2dbf7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - rendering trees.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1307d709e094d7b582602f3ee58916f6a9b5b077 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - texture routing.png.sha1 b/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - texture routing.png.sha1
deleted file mode 100644
index 132e617495a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/oop-iframes/oop-iframes-rendering/rendering design - texture routing.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-14583abab98966ea276a077835df13190e3b54bf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/os-x-interprocess-communication/index.md b/chromium/docs/website/site/developers/design-documents/os-x-interprocess-communication/index.md
deleted file mode 100644
index fa1bb496c1c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/os-x-interprocess-communication/index.md
+++ /dev/null
@@ -1,311 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: os-x-interprocess-communication
-title: Mach based OS X Interprocess Communication (Obsolete)
----
-
-## ==Mach based IPC Design==
-
-==Current status of this design:==
-The design described here is currently not used on OS X. Please see the
-[Interprocess
-Communication](/developers/design-documents/inter-process-communication) design
-doc for coverage of the current implementation for all platforms.
-A reference implementation of Mach based IPC including a kqueue bridge can be
-found in [issue 5308](http://code.google.com/p/chromium/issues/detail?id=5308).
-
-In 2015, another consideration was given to using Mach IPC, and [the results of
-that survey are
-here](https://docs.google.com/a/chromium.org/document/d/14-twSrkEhgPI87Pi757auoRhzFYRPqbzdHorHhJn0Kk/edit#).
-==Rationale for not using Mach based IPC:==
-Chrome handles network communication and IPC messages on the same thread.
-Sockets are waited on using kqueues via libevent.
-Although there is a constant defined in the kqueue headers on OS X
-(EVFILTER_MACH in sys/event.h), there is currently no way to block on both a
-socket and a mach port at once, this means that our only option is to spawn
-another thread to bridge Mach messages to kqueue. Our reference implementation
-does this by opening a pipe between both threads and writing a byte each time a
-Mach message is received.
-Because of this extra step, we now need to pay the price both of receiving a
-Mach message and communicating via a pipe between threads. We've timed this
-approach and found it to be 10uSec slower on Desktops & 20uSecs faster on
-laptops than a pure pipe based implementation.
-If you look at the measurements at the bottom of this document, you can see that
-most of the messages Chrome sends are very small. So the performance benefits of
-Mach messages over pipes are negligible.
-Thus our decision at this time is to use the same approach as Linux. If we run
-into problems at a later date with a pipe-based implementation we can revert to
-the Mach-based one.
-
-### ==Mach based IPC:==
-
-Summary of departures from current Windows architecture:
-
-==PC::Channel:==
-
-This class basically needs to be rewritten to use Mach ports, we require a
-bidirectional communication mechanism able to transfer arbitrarily sized
-messages. This means we need to create two Mach ports (Server-&gt;Client &
-Client-&gt;Server).
-
-==Establishing Communications:==
-
-(From chrome/common/ipc_channel.h)
-
-enum Mode {
-
-MODE_SERVER,
-
-MODE_CLIENT
-
-};
-
-IPC::Channel::Channel(const std::wstring& channel_id, Mode mode, Listener\*
-listener);
-
-bool Connect();
-
-When a Channel is created in Server mode it creates a Mach port and registers it
-with the Bootstrap server using the channel_id prefixed with the string
-'chrome_'. It then sets waiting_connect_ to false.
-
-When a Child process is started, it's passed the channel id and an authorization
-token via stdin (since that's not visible to other processes on the system).
-
-When a Channel is opened in Client mode, the Channel ID is looked up on the
-Bootstrap server. The client then creates a Mach port for incoming messages, it
-sends a Hello message to the server containing port rights to its incoming port
-and the authorization token sent over the pipe.
-
-Upon receiving a Hello message, the Server verifies the token, if it's valid, it
-stores the send port rights and sets waiting_connect_ to false.
-
-Server-&gt;Client.
-
-==Sending Messages:==
-
-(From chrome/common/ipc_channel.h)
-
-bool Send(Message\* message);
-
-Mach ports have a fixed queue size, we want to be able to send arbitrary numbers
-of messages without blocking.
-
-Messages to send over the wire are queued up on the Server side in an
-std::vector&lt;Message\*&gt;, we specify a timeout value when sending a Mach
-message, if the send times out then we set a delayed task to attempt to resend
-the message after a delta.
-
-When IPC::Channel::Send() is called, we attempt to send out all the messages in
-our outgoing queue until we block.
-
-==Receiving messages:==
-
-Messages can be an size up to 256MB, this presents a problems since we don't
-want to allocate a 256MB buffer to receive messages into.
-
-We can allocate an input buffer of a reasonable size, and specify the
-MACH_RCV_LARGE flag when receiving messages, if the message doesn't fit into our
-buffer then we get a chance to dynamically allocate a new receive buffer and
-stick our data in there.
-
-We will probably also want to look at large messages and send those over as OOL
-transfer (OS X Internals 9.5.5) so that they're transferred with copy-on-write
-semantics.
-
-==Security:==
-The initial security token provides security in the face of rogue client
-processes trying to connect back to a server, we can use the OS X Authorization
-Services API & AuthorizationMakeExternalForm() to generate the token.
-
-We can make use of Mach's sender security token (OS X Internals 9.2.2.3) to
-prevent processes not owned by the user from communicating with the server.
-
-## ==Rationale for using Mach ports:==
-
-==Current Windows implementation:==
-
-The IPC::Channel object (chrome/common/ipc_channel.h) sends/receives discrete
-messages \[length/byte array\] over a bidirectional named pipe.
-Messages are limited to be less than 256MB, but can otherwise be of arbitrary
-size.
-The pipe name is passed as a parameter to new rendering processes. This is
-useful for debugging purposes since you can connect an arbitrary rendering
-process to a browser instance.
-==Sharing resources between processes:==
-Windows OS Handles can be shared between processes by calling DuplicateHandle(),
-this duplicates the handle into the target process and returns an ID valid in
-that process. This ID can then be sent as POD over the IPC Channel . This is
-very convenient since it means that they can just be wrapped in an arbitrary
-messagen and send over the wire, but it's a very Windows-specific capability.
-There are currently 45 calls to DuplicateHandle() in the code (Not all of these
-are necessarily used for IPC).
-==OS X Implementation:==
-We basically have two options for implementation here worth discussing:
-==FIFO:==
-==Advantages:==
-
-* Very close to the current Windows implementation.
-* Might be shareable with Linux port.
-* Access control via full file system owner/permissions/ACL semantics
-
-==Disadvantages:==
-
-* Provides no mechanism to transmit mach semaphores and other system
- resources over the connection.
-* Messy, lives in the file system.
-* OS X may have quirks that prevent us from sharing the implementation
- with Linux.
-
-==Mach ports:==
-==Advantages:==
-
-* Fast:
- * pretty much any other IPC API we might use is already layered on
- top of this.
- * Does everything it can to remap memory rather than copy data.
- * Facilities to send over mem. buffers by remapping them via
- copy-on-write (OOL).
-* Secure - bunch of security primitives.
-* Allows us to send unnamed system resources such as semaphores and
- shared memory regions to another process.
-
-==Disadvantages:==
-
-* OS X Specific.
-* Message based rather than stream based so if we get large messages
- we potentially need to copy them multiple times.
-
-## ==Performance Considerations==
-
-What follows are the results of some benchmarks we ran contrasting Mach
-messaging and FIFO's.
-We tested Mach ports using both inline & out of line (OOL) data transfer. Inline
-transfer means the payload is transferred as part of the message and copied into
-the receiving process. OOL remaps the memory area using copy-on-write semantics.
-
-The executive summary is that Mach messages are faster than FIFOs on OS X,
-especially if we transfer messages larger than a certain threshold using OOL.
-
-==Technical Detail:==
-
-The tables below contain the results from the following test programs:
-
-* Mach - spawn two processes and send mach messages containing an
- inline buffer of the requisite size between them.
-* Mach OOL - Same as MachPerf but sends the data OOL.
-* FIFO - spawn a new process and read/write data over a FIFO.
-
-Our testing methodology was to send over 2000 messages, times are in uSec and
-the ones shown represent the 98th percentile of the measured data. Variance of
-all values is ~10uSec, possibly higher.
-==Discussion:==
-
-Inline Mach messages take a performance hit for message sizes &gt;5K, below that
-they are ~1.5X FIFOS on a 4 core Mac desktop and 280%-1000% faster than FIFOs a
-Laptop.
-
-The desktop/laptop difference is something we see consistently.
-OOL transfer has a constant overhead of ~30uSec which appears to be a clear win over any method that copies data between processes.
-
-==The data (times in uSec +/- 10uSec):==
-Laptop:
-Packet Size (bytes) Mach Mach OOL FIFO % min(Mach,Mach OOL) better than FIFO
-100 29 35 112 386
-200 10 37 121 1210
-500 11 36 124 1127
-1024 9 36 115 1277
-2048 28 37 131 467
-3072 11 39 129 1172
-4096 11 29 128 1163
-5120 13 31 127 976
-6144 51 30 134 446
-7168 46 30 133 443
-8192 51 32 215 671
-9216 57 30 218 726
-1048576 1477 29 2873 9906
-5242880 11079 39 10924 28010
-7340032 15144 38 14184 37326
-Desktop:
-
-Packet Size (bytes) Mach Mach OOL FIFO % min(Mach,Mach OOL) better than FIFO
-100 10 26 29 290
-200 11 26 30 272
-500 12 29 30 250
-1024 11 34 30 272
-2048 15 36 31 206
-3072 16 39 32 200
-4096 14 29 36 257
-5120 19 25 37 194
-6144 66 27 34 125
-7168 53 26 38 146
-8192 70 26 59 226
-9216 81 25 66 264
-1048576 1822 33 2623 7948
-5242880 11536 37 13125 35472
-7340032 15693 41 17960 43804
-
-Distribution of IPC Message Sizes In The Current Windows Implementation
-
-The following histogram was added to IPC::Channel::Send(), and measures an hour
-long browsing session including Gmail, YouTube, Hulu, CNN and other random
-sites. We see that:
-
-* 90% of messages are less than 65 bytes
-* 99.9% of messages are less than 2400 bytes
-
-Histogram: IPC.MessageSize recorded 37573 samples, average = 86.4, standard
-deviation = 329.5
-
-0 ...
-
-12 ---------------------O (4387 = 11.7%) {0.0%}
-
-16 ----O (990 = 2.6%) {11.7%}
-
-21 -----------------------------------O (9307 = 24.8%) {14.3%}
-
-28 O (10 = 0.0%) {39.1%}
-
-37 O (8 = 0.0%) {39.1%}
-
-49 ------------------------------------------------------------------------O
-(19123 = 50.9%) {39.1%}
-
-65 --O (614 = 1.6%) {90.0%}
-
-86 O (38 = 0.1%) {91.7%}
-
-113 O (113 = 0.3%) {91.8%}
-
-149 O (34 = 0.1%) {92.1%}
-
-196 O (110 = 0.3%) {92.2%}
-
-258 --O (663 = 1.8%) {92.4%}
-
-340 ---O (783 = 2.1%) {94.2%}
-
-448 --O (653 = 1.7%) {96.3%}
-
-590 --O (443 = 1.2%) {98.0%}
-
-777 -O (198 = 0.5%) {99.2%}
-
-1023 O (72 = 0.2%) {99.7%}
-
-1347 O (6 = 0.0%) {99.9%}
-
-1774 O (5 = 0.0%) {99.9%}
-
-2336 O (1 = 0.0%) {100.0%}
-
-3077 ...
-
-12196 O (15 = 0.0%) {100.0%}
-
-16063 ... \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/os-x-password-manager-keychain-integration/index.md b/chromium/docs/website/site/developers/design-documents/os-x-password-manager-keychain-integration/index.md
deleted file mode 100644
index 1ef45bb7ad3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/os-x-password-manager-keychain-integration/index.md
+++ /dev/null
@@ -1,223 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: os-x-password-manager-keychain-integration
-title: OS X Password Manager/Keychain Integration
----
-
-Note: As of version 45, the password manager is [no longer integrated with
-Keychain](https://code.google.com/p/chromium/issues/detail?id=466638), since the
-interoperability goal discussed in the Background section is no longer possible.
-This document is here for historical purposes only.
-
----
-
-### Background
-
-The Mac Keychain provides a shared, secure storage implementation that includes
-API specifically for storing various types of web passwords (web forms, HTTP
-auth, etc.). The platform expectation is that we should store our passwords
-there, providing interoperability with other browsers (with the exception of
-Firefox), rather than simply using it a private secure-storage mechanism.
-
-### Storage
-
-Because the Keychain schema is limited, and is not extensible, we cannot use it
-as the sole storage mechanism—most notably we would lose the "action" field,
-without which we have dramatically different user experience for security
-reasons. This means we need our own (non-secure) storage for extra information.
-Because Keychain entries don't have a stable, unique identifier, and don't have
-a field we can use for adding an identifier for our own record, they must be
-paired by matching across multiple fields.
-
-The fields that will be stored in each location, in PasswordForm terminology:
-
-> **Keychain**
-
- * scheme
- * kSecAuthenticationTypeItemAttr (direct equivalents exist for
- each of the SCHEME_\* types)
- * signon_realm
- * for SCHEME_HTML: kSecProtocolItemAttr + kSecServerItemAttr +
- kSecPortItemAttr
- * for SCHEME_BASIC and SCHEME_DIGEST: as above, with the
- addition of kSecSecurityDomain
- * for proxies: TBD (format is "proxy-host/auth-realm"; need to
- see what other browsers store, and how "origin" is handled
- on the Chromium side)
- * origin
- * signon_realm components + kSecPathItemAttr
- * username_value
- * kSecAccountItemAttr
- * password_value
- * Keychain data
- * date_created
- * kSecCreationDateItemAttr
-
-> **Internal Database** (using LoginDatabase)
-
-> * scheme
-> * signon_realm
-> * origin
-> * username_value
-> * The above is duplicate information necessary to match our
- entries with Keychain entries. They should be sufficient to
- map uniquely to a Keychain entry, given Keychain's
- non-duplication enforcement.
-> * action
-> * This is the most important aspect of our metadata, since the
- UE changes if we don't have it (see discussion below).
-> * submit_element
-> * username_element
-> * password_element
-> * Used only for minor scoring changes.
-> * ssl_valid
-> * This gives us an extra security indicator for passwords we
- store; for passwords stored by other browsers we must infer it
- from kSecProtocolItemAttr, similar to how imported passwords
- are handled on other platforms.
-> * preferred
-> * blacklisted_by_user
-> * date_created
-> * Primarily for blacklisted_by_user here, which has no
- corresponding keychain entry
-
-Note: In the PasswordStore implementations for other platforms, the
-PasswordStore doesn't need to understand anything about the format of
-signon_realm, so it can be free-form, which is not the case here. However, if we
-ever need to add a new format that cannot be expressed in Keychain terms, we can
-fall back to storing more metadata ourselves and using a generic application
-Keychain item for the password.
-
-### Saving, Updating, Retrieving, and Deleting
-
-**Saving** is relatively straightforward, except for a wrinkle with collisions:
-
-1. Store the keychain entry
- * If this fails as a "duplicate item", attempt to set the password
- (since the other primary information must already match). If
- that succeeds—which is not guaranteed, since the user may deny
- us access to modify the item—count storage as a success.
-2. If (1) succeeds, store our metadata.
-
-This means that it is possible for us to have multiple entries in our database
-(different only by the \*_element fields) mapping to the same keychain entry.
-
-**Updating** is essentially the same:
-
-1. Store/update the Keychain, exactly as with Saving
-2. If we successfully create or update a Keychain item, update our
- metadata (or if we had no metadata, store some).
-
-**Retrieving (single)** is trickier:
-
-1. Find all the matching entries in our database, and convert them to
- PasswordForms.
-2. Find all the matching Keychain entries, and convert them to
- PassswordForms.
-3. Walk the database PasswordForm list, and for each item:
- * If it's a blacklist item, add it to the merged list; otherwise
- * try to find a matching entry from the Keychain list. If there is
- a match, merge the keychain PasswordForm into the database
- PasswordForm, then move the combined entry to the return list
- (and remember the keychain entry as having been used).
-4. Move everything left in the original keychain list that's not a
- blacklist item into the return list.
- * These will be treated like imported passwords in the UI due to
- the lack of an action field.
-5. Delete the database entry for anything left in the database list; if
- it's still there the user has deleted the keychain item outside of
- Chromium and it is now useless.
-
-**Retrieving (batch)** differs from single retrieval in handling of Keychain
-entries (see Design Choices):
-
-1. Find all entries in our database, and convert them to PasswordForms.
-2. For each entry, find and merge in the corresponding Keychain entry.
- * If there isn't one, delete the database entry, since it is now
- useless.
-
-**Deleting (single)** is slightly tricky due to potential sharing of an item by
-multiple database entries:
-
-1. Delete the database entry that we are trying to delete.
-2. Find the Keychain item corresponding to the entry to delete.
-3. If we created the Keychain item (see Design Choices below):
- 1. Find all remaining database items that would use that Keychain
- item.
- 2. If there aren't any, delete the Keychain item.
-
-**Deleting (batch)** works much the same way (and is subject to some
-limitations; see Design Choices below):
-
-1. Delete everything in our metadata database from the given time
- range.
-2. Find everything that's left in the database.
-3. Find everything in the Keychain created by Chromium.
-4. Merge the lists from those two steps, and delete any Keychain
- entries that aren't used.
-
-### Issues/Limitations
-
-* Translation to PasswordForm format requires accessing the password,
- which will cause UI (from the OS) if the password was saved by
- another application or the Keychain is locked. This will be most
- noticeable for users visiting a site that we find a Keychain
- password for but no metadata of our own, because without an "action"
- we won't auto-fill without user interaction. Users will likely be
- confused/annoyed by being prompted for access to a password that
- doesn't immediately appear to be used.
- * Some Camino users complained about this general issue, causing a
- change to load passwords lazily. That would be possible in
- Chromium, but would require making PasswordForm a class,
- incorporating at least some platform-specific knowledge.
-* Keychain enforces more uniqueness than Chromium does. Specifically,
- we cannot store two password entries that differ only by \*_element
- fields or by action.
- * This does not seem likely to be a significant concern; in
- testing of Windows behavior getting into this state appeared to
- require "tricking" Chromium by first storing the new entry with
- a different username, then changing that username.
-* Unlike the other platoforms' password storage, we can encounter
- errors in normal usage (experience with Camino tells us that
- unexpected keychain problems will occur for some number of users).
- There is currently no error reporting, so failures will be largely
- silent, although there is console logging.
-
-### Design Choices
-
-* Deleting all passwords won't actually prevent Chromium from having
- stored passwords that it may access. Complete batch-deletion will
- leave Chromium in the same state that it started in: having access
- to passwords it did not create, but not trusting them for auto-fill.
- * This is the more conservative of the two options, and matches
- Camino's behavior; Safari, on the other hand, deletes all items
- it understands whether it created them or not (which runs a high
- risk of unexpected data loss by users who don't realize that
- there is a shared storage system for passwords).
-* Deleting individual password entries created by another browser will
- revert us to the untrusted state for that password, but will not
- delete it from the keychain.
- * This is primarily to be consistent with batch delete, although
- the the same argument also applies here to a lesser extent.
-* Passwords from the Keychain that we don't yet trust will not be
- listed in the Preferences UI (batch retrieval).
- * This is a consequence of the decisions about deletion; it would
- be extremely confusing to show entries that didn't go away when
- deleted. We'll need to watch for how much confusion there is
- about Chromium filling passwords (once they are typed) when they
- don't show up in the Preferences.
-* We do not attempt to share blacklist entries with other browsers. We
- don't store our blacklist entries in the keychain, or honor those
- stored by other browsers.
- * It's not entirely clear that if a user tells Safari never to
- remember a password for a given site that they should be unable
- to store a password there in Chromium. (Camino does not
- currently use or honor blacklist entries in the Keychain.) We
- also run the risk of confusing other browsers that don't make
- use of path information for Keychain entries, so that a
- blacklist for an individual form on a site in Chromium could
- block password storage for the entire site in other browsers. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/password-generation/01_form.png.sha1 b/chromium/docs/website/site/developers/design-documents/password-generation/01_form.png.sha1
deleted file mode 100644
index e1590a2aab6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/password-generation/01_form.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1f768a9b80b9ad98862cfb5c6652be1cbfe6c620 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/password-generation/02_hover.png.sha1 b/chromium/docs/website/site/developers/design-documents/password-generation/02_hover.png.sha1
deleted file mode 100644
index da87770595c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/password-generation/02_hover.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9e65b06cb342c7d794ee1d01015603c45aff7bbe \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/password-generation/03_suggestion.png.sha1 b/chromium/docs/website/site/developers/design-documents/password-generation/03_suggestion.png.sha1
deleted file mode 100644
index a17fe8b19e2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/password-generation/03_suggestion.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-63f022bce4dc3574ce1cbebd2694305f3c418955 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/password-generation/04_filled.png.sha1 b/chromium/docs/website/site/developers/design-documents/password-generation/04_filled.png.sha1
deleted file mode 100644
index 4516d7e135d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/password-generation/04_filled.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-db4167b2f0cdbfd7f5b82691ee839b918dff2835 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/password-generation/EditingUI.png.sha1 b/chromium/docs/website/site/developers/design-documents/password-generation/EditingUI.png.sha1
deleted file mode 100644
index ba8ac704454..00000000000
--- a/chromium/docs/website/site/developers/design-documents/password-generation/EditingUI.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fe846c0c3f093440e8189e90be030688b68daee0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/password-generation/GenerationUI.png.sha1 b/chromium/docs/website/site/developers/design-documents/password-generation/GenerationUI.png.sha1
deleted file mode 100644
index fcccc397ef4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/password-generation/GenerationUI.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2131f048918dc79d96f01965ec0335d2f34e3479 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/password-generation/index.md b/chromium/docs/website/site/developers/design-documents/password-generation/index.md
deleted file mode 100644
index f4ad65c97ff..00000000000
--- a/chromium/docs/website/site/developers/design-documents/password-generation/index.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: password-generation
-title: Password Generation
----
-
-**Overview**
-
-Passwords are not a very good form of authentication. They are easy to use but
-they are trivial to steal, either through phishing, malware, or a
-malicious/incompetent site owner. Furthermore, since people are so apt to reuse
-passwords losing one password leaks a substantial amount of your internet
-identity.
-
-Chrome's long term solution to this problem is browser sign in plus OpenID.
-While implementing browser sign in is something that we can control, getting
-most sites on the internet to use OpenID will take a while. In the meantime it
-would be nice to have a way to achieve the same affect of having the browser
-control authentication. Currently you can mostly achieve this goal through
-Password Manager and Browser Sync, but users still know their passwords so they
-are still susceptible to phishing. By having Chrome generate passwords for
-users, we can remove this problem. In addition to removing the threat of
-phishing, automatically generating password is a good way to promote password
-manager use, which should be more secure and seamless than manual password
-management.
-
-**Design**
-
-**Generating and Updating Passwords**
-
-Detecting when we are on a page that is meant for account sign up will be most
-of the technical challenge. This will be accomplished by a combination of local
-heuristics and integration with Autofill. In particular, the password manager
-will upload information to Autofill servers when a user signs in using a saved
-password on a form different from the one it was saved on. This gives a strong
-signal that the original form was used for account creation. This data is then
-aggregated to determine if the form is or isn't used for account creation. Those
-that are will be labeled as such by Autofill. If a signal is received from
-Autofill when the form is rendered, we mark the password field. When the users
-focuses this field, we show an Autofill like dropdown with a password
-suggestion.
-
-[<img alt="image"
-src="/developers/design-documents/password-generation/GenerationUI.png">](/developers/design-documents/password-generation/GenerationUI.png)
-
-The generated password is generic enough that it works on most sites as is, but
-not all sites have the same requirements. Eventually we will use additional
-signals to craft the generated password we use, but for now we ease editing by
-showing the password if the user focuses the field and also sync any changes
-made to the confirm password field (if one exists).
-
-[<img alt="image"
-src="/developers/design-documents/password-generation/EditingUI.png">](/developers/design-documents/password-generation/EditingUI.png)
-
-The user doesn't need to explicitly save a password that is generated as it
-happens automatically, and they should go through the normal password management
-experience from that point on.
-
-**Retrieving Passwords**
-
-While generally it's good that users don't know their passwords, there are times
-when they will need them such as when they aren't able to use Chrome. For these
-cases, we will have a secure password storage web site where users can sign in
-and view (and possibly export?) their passwords. Since it should be relatively
-rare that users need this, and since this information is valuable, we are
-debating adding additional safety checks here, such as a prompt to enable
-StrongAuth. TODO(gcasto): Add link once this site is live.
-
-**Implementation**
-
-**Renderer**
-
-PasswordGenerationAgent is responsible for both detecting account creation
-password fields and properly filling and updating the passwords depending on the
-users interaction with the UI.
-
-**Browser**
-
-PasswordGenerationManager takes messages from the renderer and makes an OS
-specific dropdown. This UI use a PasswordGenerator to create a reasonable
-password for this site (tries to take in account maxlength attribute, pattern
-attribute, etc.). If the password is accepted, it is sent back to the renderer.
-
-**Caveats**
-
-**Users must have password sync enabled**
-
-Since users are not going to know their passwords, we need to be able to
-retrieve it for them no matter which computer they are using.
-
-**Not all websites can be protected**
-
-This feature only works for sites that work with both the password manager and
-Autofill. Currently this means sites that do signup with only two input fields
-(e.g. Netflix) aren't covered since Autofill doesn't upload in this case. It
-also means that sites that don't work with the password manager (e.g. sites that
-login without navigation) aren't covered.
-
-**Users are only protected for new passwords**
-
-We will not force users to use this feature, we simply suggest it when they sign
-up. Eventually we will want to prompt on change password forms as well, though
-the password manager currently doesn't have this capability.
-
-**Feature makes Google a higher value hijacking target**
-
-Google is already a high value target so this shouldn't changes much. Moreover
-it's easier for us to make logging into Google more secure via StrongAUTH than
-have every site on the internet secure itself. At some point in the future it
-might also be possible for us to automatically change all of a users passwords
-when we realize that their account is hijacked. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/Pepper design.ai.sha1 b/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/Pepper design.ai.sha1
deleted file mode 100644
index 2c892d5365a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/Pepper design.ai.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d1a8fa85dcd6c44be46adf078aa37694b4c3fd0c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/index.md b/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/index.md
deleted file mode 100644
index 3e59ce19a1c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/index.md
+++ /dev/null
@@ -1,477 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: pepper-plugin-implementation
-title: Pepper plugin implementation
----
-
-This document provides a quick reference for PPAPI integration in Chromium.
-
-If you're adding a new API, see [Pepper API Best
-Practices](/developers/pepper-api-best-practices) for helpful guidelines and our
-process is documented in [Pepper API
-Proposals](https://docs.google.com/document/d/1sjR0ZlDFVaxnKYdYCeLShumcaeYYSC_CgTM05gKcfXs/edit#heading=h.y526gzy584nh).
-
-## Quick reference to important code locations
-
-* ppapi — Root PPAPI code.
- * api — IDL versions of the interfaces.
- * c — Public C binary interface (generated by the IDL, checked
- into the tree)
- * cpp — Convenience C++ wrapper around the C interface.
- * generators — the IDL-to-C compiler
- * host — code used in content and chrome to implement the backends
- for the various resources.
- * native_client — The NaCl trusted plugin
- * proxy — Chrome IPC-based proxy
- * tests — Source code for the unit tests.
- * shared_impl — Contains implementations for Pepper objects that
- we want to share between the proxied (ppapi/proxy) and the
- in-process version (content/renderer/pepper).
- * thunk — Converts the C PPAPI calls from the plugin into C++ for
- the browser implementation.
-* chrome/browser/renderer_host/pepper/pepper_\*_host.\* — Backend
- ("host") implementations of new-style resources in the Chrome
- browser process.
-* chrome/renderer/pepper/pepper_\*_host.\* — Backend ("host")
- implementations of new-style resources in the Chrome renderer
- process.
-* content/renderer/pepper/ppb_\*_impl.\* — Implementation of the
- old-style in-process resources and their connection to WebKit.
-* content/browser/renderer_host/pepper/pepper_\*_host.\* — Backend
- ("host") implementations of new-style resources in the Content
- browser process.
-* content/renderer/pepper/pepper_\*_host.\* — Backend ("host")
- implementations of new-style resources in Content renderer process
-* content/renderer/pepper/pepper_plugin_delegate_impl.\* — Delegate
- interface used to talk to the browser from the WebKit code.
-* content/renderer/render_view.cc — Allocates the plugins (see
- createPlugin).
-* chrome/test/ppapi/ — Code to run the tests as part of the Chrome
- browser tests.
-
-## Issue tracking
-
-We're tracking PPAPI bugs in the Chromium issue tracker to keep things simpler.
-To file a pepper-related bug, use *all* of the following labels:
-
-* Area-Internals
-* Cr-Internals-Plugins-Pepper
-
-If the bug relates to a Native Client specific part, additionally use the label:
-
-* NaCl
-
-See the [current open bugs under the "Cr-Internals-Plugins-Pepper"
-label](https://code.google.com/p/chromium/issues/list?can=2&q=label%3ACr-Internals-Plugins-Pepper&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&cells=tiles).
-
-## Running a plugin in Chrome
-
-There are two modes of operation, "trusted" and "untrusted" plugins. Untrusted
-plugins use the [Native Client](http://code.google.com/p/nativeclient/) to
-safely run code from the web and is cross-platform. Trusted plugins are loaded
-directly in either the renderer process or a separate plugin process as
-platform-specific libraries.
-
-You run a plugin in trusted mode by building a platform-specific library
-implementing the API. For random manual testing, you can use one of the
-examples, the graphics 2D "paint manager" example is a good one for general
-hacking (see ppapi/examples/2d/). A trusted plugin is instantiated by
-registering it to handle a MIME type on the command line. Provide the full
-plugin name (which varies by platform), followed by a semicolon, followed by the
-MIME type. The MIME type should match the "type" attribute of the object tag
-specified on your page. For the paint manager example plugin on Linux, you would
-run:
-
-> chrome
-> --register-pepper-plugins="/local/src/out/Debug/lib/libppapi_example_paint_manager.so;application/x-ppapi-example-2d"
-> file:///local/src/ppapi/examples/2d/2d.html
-
-In this case, application/x-ppapi-example-2d is what is specified in the
-[example.html](http://src.chromium.org/viewvc/chrome/trunk/src/ppapi/examples/2d/2d.html?revision=144972&view=markup)
-page. This can be anything you want, as long as the two types match. Note also
-that we specify --ppapi-out-of-process. In-process mode is being deprecated so
-it's a good idea to use this in general.
-
-On Linux, you can automatically launch this process in a new GDB instance in a
-new xterm, which will help you in debugging startup problems. Use this command
-line switch:
-
-> --ppapi-plugin-launcher='xterm -title plugin -e gdb --eval-command=run --args'
-
-## "Old" resource and proxy design
-
-Most resources are currently implemented using the old proxy design. There are
-several layers, and each resource is implemented once for in-process and once
-for out-of-process.
-
-The in-process implementations are in content/renderer/pepper/ppb_\*_impl.\*
-These integrate with the rest of Chrome by using blink or other parts of
-content/renderer.
-
-The proxy implements interfaces for the out-of-process case. They are
-implemented in ppapi/proxy/ppb_\*_proxy.\* The proxy has a
-ppapi/proxy/dispatcher.h on each end of the IPC channel. The specialization
-PluginDispatcher is on the plugin side, and the specialization HostDispatcher is
-on the renderer side. Each interface has a Proxy object for which there is one
-per dispatcher, and a resource object that corresponds to the PP_Resource
-object.
-
-Some proxy objects and implementations share some or all of their code. Shared
-code can be put into ppapi/shared_impl/ppb_\*_shared.\* to avoid duplication.
-
-Life cycle of a plugin -&gt; renderer call:
-
-1. Plugin calls PPAPI function.
-2. Thunk layer converts this to a C++ call on a resource object.
-3. Resource object sends IPC message to renderer via the
- PluginDispatcher.
-4. The HostDispatcher receives message and forwards it to the
- appropriate interface proxy object in the renderer.
-5. Interface proxy converts IPC message back to a PPAPI call and issues
- it to the in-process implementation.
-6. Resource "impl" gets call and performs action.
-
-Unlike the "new" design there is no standard way of communicating with the
-browser. Some components (TCP/UDP sockets) do this with hand-rolled tracking.
-
-## "New" resource and proxy design
-
-All additions should use the new proxy design. It is higher performance and
-involves writing much less code. The new and old designs exist in parallel and
-we're moving resources over one-by-one.
-
-The resource object is implemented once (in ppapi/proxy/\*_resource.cc). This
-resource sends IPC to a "host" object in the browser and/or renderer process to
-do its work. The host object does not speak the Pepper API, it just uses Chrome
-IPC types. It can be in the renderer process, the browser process, or
-potentially both or neither (if all functionality is contained in the plugin
-process). It can also be implemented in the chrome or the content modules.
-
-[<img alt="image"
-src="/developers/design-documents/pepper-plugin-implementation/pepper_design.png">](/developers/design-documents/pepper-plugin-implementation/pepper_design.png)
-
-Where does your host object live?
-
-* content/renderer/pepper/ — Probably the most common location. Most
- resources that interact with blink or other renderer functionality
- will go here.
-* chrome/renderer/pepper/ — Use for Chrome-only interfaces (Flash,
- PDF, other custom stuff for custom Google plugins).
-* content/browser/renderer_host/pepper/ — Use instead of or in
- addition to content/renderer/pepper when your resource needs to talk
- to the browser process for some reason.
-* chrome/browser/renderer_host/pepper/ — Use instead of or in addition
- to chrome/renderer/pepper when your resource needs to talk to the
- browser process for some reason.
-
-Each of the above directories has a "host factory" file in it for creating the
-hosts for your resource. You'll also have access to the BrowserPpapiHost /
-RendererPpapiHost which will allow you to make calls into the system and get
-context for your resource.
-
-We support in-process mode for legacy interfaces needed by certain plugins. New
-resources do not need to support in-process. For resources that need in-process,
-we have a "fake" IPC channel that allows the "proxy" and "host" to be in the
-same process. To wire this up, first get your out-of-process implementation
-working, then hook up creation through
-content/renderer/pepper/pepper_in_process_resource_creation.cc. Note that this
-only works for resources implemented in content/renderer. Other types of hosts
-are not supported in in-process mode.
-
-Life cycle of a plugin -&gt; renderer call
-
-1. Plugin calls PPAPI function.
-2. Thunk layer converts this to a C++ call on the proxy resource
- object.
-3. Proxy resource does a CallRenderer with its message. This gets
- embedded into a "resource call" IPC message which encodes the
- resource ID and instance.
-4. The ResourceHost in the renderer receives the message and finds the
- corresponding resource host object.
-5. The resource host decodes the message and performs the operation.
-
-Note that creation is a separate step. The resource creates the host in the
-browser or renderer by calling SendCreateToBrowser or SendCreateToRenderer. This
-is picked up by the host factory in the directory holding the resource.
-
-### Adding a new interface
-
-**Please look at our [Pepper API Process
-Doc](https://docs.google.com/document/d/1sjR0ZlDFVaxnKYdYCeLShumcaeYYSC_CgTM05gKcfXs/edit#heading=h.y526gzy584nh)
-before starting to implement a new API.**
-
-**To make the interface definitions (this is the same between the "new" and
-"old" proxy designs):**
-
-1. **Create the IDL file.Most new interfaces will be dev so would be
- called ppapi/api/dev/ppb_foo_dev.idl.
-2. **Generate the C interface file.** Run the script
- ppapi/generators/generator.py. Make sure to run it from within the
- generators directory. This should make a corresponding
- ppapi/c/dev/ppb_foo_dev.h file which you should add to your CL.
-3. **Write a C++ wrapper for your interface.** (Some classes may not
- need C++ wrappers, check with Brett if you're unsure.) The
- corresponding location would be in ppapi/cpp/foo_dev.h. This is
- pretty easy and you should be able to copy the surrounding classes.
- Add it to the .gyp file.
-4. **Add your new interface file to the C test list in**
- ppapi/tests/all_c_includes.h. This is how we make sure that
- everything continues to compile in C (rather than just C++ mode).
-
-To hook up your interface **(this is the same between the "new" and "old" proxy
-designs):**
-
-1. **Write a C++ "API" for it.** This is in ppapi/thunk/ppb_foo_api.h.
- This defines the virtual interface that Chrome will use to implement
- your interface. If your interface is a bunch of functions rather
- than a new resource, you can just add it on to ppb_instance_api.h.
- Check with Brett if you're unsure. Add a creation function for your
- resource to ResourceCreationAPI.
-2. **Write a thunk for it.** This converts the C PPAPI calls for your
- interface to C++ calls on the API you made in the previous step.
- Look at a similar interface to see what it does. Typically the
- Create function on a resource API would go through the
- ResourceCreationAPI object (add a function there for your new
- resource type) and the rest of the functions go through to your API.
- Add the thunk and API to ./ppapi/ppapi_shared.gypi.
-3. **Register the interface with Chrome.** Add it to
- ppapi/thunk/interfaces_ppb_public_dev.h. Follow the directions in
- the _stable version of that file. This tells Chrome about your
- interface name and connects your thunk function to it. This file is
- included in various places that define implementations of the macros
- to register the name-&gt;vtable mapping.
-
-Implement the resource "proxy" (this is different from the "old" design):
-
-1. **Create the proxy file.** This is called FooResource as opposed to
- "old" design resources which would be PPB_Foo_Proxy.
-2. **Define the IPC messages you need.** Add them to
- ppapi/proxy/ppapi_messages.h. You'll generally need one for creating
- your host resource, one for each "call" from the proxy to the host,
- and one for each "reply".
-3. **Write a unit test in the same directory.** This should just
- emulate the IPC layer. Be sure to test different edge conditions and
- make sure that the proper IPC messages are sent in response to
- plugin calls, and that the correct plugin callbacks are called in
- response to IPC messages.
-
-Implement the resource "host" (this is different from the "old" design):
-
-1. **Write the resource host.** Put the file in one of the four
- locations discussed above.
-2. **Hook up the host creation.** The host factory in the same
- directory as your resource host should have a switch in it. Be sure
- to check the permissions if your interface is dev/trusted/etc. to
- make sure the plugin is allowed to create such resources.
-3. **Implement the IPC message handlers.** You should be able to copy
- how an existing resource host works to get the calls you expect.
-4. **Keep in mind that the plugin is untrusted.** It could be trying to
- exploit you. Don't trust that it has permission to do anything, and
- rigorously check all parameters.
-
-## Designing your interface
-
-Features are implemented as "interfaces." An interface is just a vtable
-identified by a string name. Most features are implemented as "resources" which
-are generic refcounted project identified by an opaque handle. Your normally
-have an interface that exposes all the functions your resource supports.
-
-* The first two functions in a resource's interface should be
- PP_Resource Create(PP_Instance, ...) to allow creation of your
- resource and PP_Bool IsFoo(PP_Resource) to allow for type checking.
-
-* Since most stuff happens out-of-process, these functions should be
- asynchronous. Asynchronous functions should take a
- PP_CompletionCallback argument and return an int32_t (which will
- normally be PP_OK_COMPLETIONPENDING for asynchronous completion).
- It's important that your create function *not* be asynchronous
- because then the caller has no way to cancel the callback (normally
- you can just delete the object). If you object constuction requires
- asynchronous completion, have a simple synchronous Create function
- and then an asynchronous Open or Init function which you would call
- after creation.
-
-* Many completion callbacks want to return data. These should be of
- the form:
- int32_t DoFoo(PP_Resource resource, PP_Var\* output_arg,
- PP_CompletionCallback cb);
- Your C++ wrapper can then take a CompletionCallbackWithOutput&lt;Var&gt;
- which has template magic to convert the output argument to a parameter on
- the callback function.
-
-## Writing error logs
-
-In a resource implementation, use Resource.Log() to display a message in the
-console (in the JS inspector) for the page. In other places, use
-PpapiGlobals::LogWithSource().
-
-* Log messages should have the name of the interface, a dot, and the
- function name, followed by a colon and the text of the message. The
- rest of the message should begin with a capital and end with a
- period as with Chrome comments. So: "PPB_Foo.Frobulate: The bar is
- invalid.".
-* Not all errors should have error logs. In fact, most shouldn't. Most
- functions should have well-defined error conditions that are
- described in the documentation for that function. In this case, it's
- unnecessary to log an error because the caller can easily see they
- got a NOACCESS and look up what that means in the context of your
- function, for example.
-* Some things may be tricky or easily called incorrectly, may have no
- return value, or ambiguous return values. In these cases, it can be
- useful to add a Log call to tell the programmer how they messed up.
-
-## Architecture of the renderer implementation
-
-It may help to open the NPAPI [plugin architecture design
-doc](/developers/design-documents/plugin-architecture) in another tab. This
-section will compare Pepper to the "in process" NPAPI implementation. Most of
-the names are the same between Pepper and NPAPI, except we use the webkit::ppapi
-namespace and NPAPI uses the webkit::npapi namespace. If you haven't already,
-you should also understand the [important
-concepts](http://code.google.com/p/ppapi/wiki/Concepts) of PPAPI.
-
-* To WebKit, a Pepper plugin is the same as an NPAPI plugin. We
- implement the WebKit::WebPlugin interface as
- webkit::ppapi::WebPluginImpl in ppapi_webplugin_impl.cc. This is our
- analog of NPAPI's webkit::npapi::WebPluginImpl.
-
-* The PluginInstance object talks to the plugin's PPP_Instance
- interface, and receives requests through the browser's PPB_Instance
- interface.
-
-* The PluginInstance owns a reference to the PluginModule which
- represents the shared library loaded in the renderer. The
- PluginModule is shared between all instances of that plugin. It
- handles loading and unloading of the library, implements the
- PPB_Core interface, and also implements the GetInterface function
- that the plugin module uses to get all other browser interfaces.
-
-* In some cases, the plugin needs to talk "up" the browser stack. For
- example, a certain operation might require that the browser process
- do something on behalf of the plugin. To support this, there is the
- webkit::ppapi::PluginDelegate virtual interface.
-
-* The RenderView handles creation of the Pepper plugin in
- RenderView::createPlugin. RenderView has as a member a helper class
- PepperPluginDelegateImpl which implements the
- webkit::ppapi::PluginDelegate interface. This implementation is
- supplied to a plugin when it is created.
-
-## Debugging a plugin
-
-Trusted plugins are loaded directly into the renderer sub-process, rather than a
-separate plugin process. You can use the standard renderer debugging techniques,
-including single process mode, for debugging the plugin.
-
-Plugins also run in the renderer sandbox. You will find your plugin code is
-constrained to the same requirements and limitations as other code in the
-renderer (can't read and write files or directly access devices).
-
-## Running the tests
-
-The tests in ppapi/tests are run as part of the Chrome browser_tests. The source
-code is in chrome/test/ppapi and you can see in that file there are separate
-GTest tests for each PPAPI test file. To just run this test, you can use:
-
-> browser_tests --gtest_filter="PPAPITest.\*"
-
-Or to run tests out of process:
-
-> browser_tests --gtest_filter="OutOfProcessPPAPITest.\*"
-
-You can also run the tests manually in Chrome. You first need to build the test
-plugin, which is the ppapi_tests project, and build Chrome (PPAPI doesn't work
-in test shell). When running Chrome, enable the PPAPI testing interface (it's
-off by default to prevent production plugins from abusing this API) and register
-the test plugin as handling the application/x-ppapi-tests MIME type:
-
-> chrome
-> --register-pepper-plugins="C:\\code\\src\\chrome\\Debug\\ppapi_tests.dll#PPAPI
-> Tests##1.2.3;application/x-ppapi-tests" --enable-pepper-testing
-
-The library name is platform-specific. On Linux, use libppapi_tests.so in the
-output directory. On Mac, use ppapi_tests.plugin. Once Chrome is running, just
-load the
-[test_case.html](http://code.google.com/p/ppapi/source/browse/trunk/tests/test_case.html)
-file in the browser. Set the "query" part of the URL to be the name of the test
-you want to run, for example to run the ImageData tests, load:
-
-> file:///C:/code/src/ppapi/tests/test_case.html?ImageData
-
-You will see a log of the test cases in the gray square. If the plugin doesn't
-load, you will see an error message above the gray square indicating that the
-plugin could not be found. This means that the library name is incorrect or it
-failed to load for some reason.
-
-#### Running HTTP tests manually
-
-Some tests like the URLLoader test require that it be run over HTTP. The Chrome
-browser tests are configured to automatically do this. But for debugging
-purposes you may want to do this manually. From your src directory on Linux, do:
-
-> export
-> PYTHONPATH=third_party/pyftpdlib/src:third_party/tlslite:third_party/pywebsocket/src
-
-> python net/tools/testserver/testserver.py --port=1337 --data-dir=ppapi/tests
-
-and on Windows, use:
-
-> set
-> PYTHONPATH=third_party\\pyftpdlib\\src;third_party\\tlslite;third_party\\pywebsocket\\src
-
-> python net\\tools\\testserver\\testserver.py --port=1337
-> --data-dir=ppapi/tests
-
-Then you should be able to load http://127.0.0.1:1337/files/test_case.html in
-your browser.
-
-#### Running NaCl tests manually
-
-The NaCl tests also must be run over HTTP, but they are loaded from the build
-output directory instead of ppapi/tests. So to start the test server for NaCl
-tests on Linux for a Debug build, do:
-
-> export
-> PYTHONPATH=third_party/pyftpdlib/src:third_party/tlslite:third_party/pywebsocket/src
-
-> python net/tools/testserver/testserver.py --port=1337 --data-dir=out/Debug
-
-and on Windows, use:
-> set
-> PYTHONPATH=third_party\\pyftpdlib\\src;third_party\\tlslite;third_party\\pywebsocket\\src
-> python net\\tools\\testserver\\testserver.py --port=1337 --data-dir=out/Debug
-
-The command-line for running NaCl tests is different; you don't need to load the
-test plugin, but you do need to enable NaCl:
-
-> chrome --enable-nacl --enable-pepper-testing
-
-You must append "&mode=nacl_glibc" or "&mode=nacl_newlib" to the URL. E.g.: load
-http://127.0.0.1:1337/files/test_case.html?testcase=URLLoader&mode=nacl_glibc in
-your browser.
-
-## Testing with Flash
-
-## Running a local build with Flash is slightly different. You can usually run a local build of Chromium with a Flash plugin that comes with a recent Chrome distribution (for example, Canary or Dev Channel) using --ppapi-flash-path and --ppapi-flash-version (gotten from the "Manifest.json" file that is bundled alongside the Flash plugin in Chrome. For example, on Linux you could type:
-
-> ## out/Debug/chrome --ppapi-flash-path=/opt/google/chrome-unstable/PepperFlash/libpepflashplayer.so --ppapi-flash-version=\`grep -i version /opt/google/chrome-unstable/PepperFlash/manifest.json | awk '{print $2}' | awk -F"\\"" '{print $2}'\`
-
-## Instead of specifying the matching flash version you can specify 99.99.99.99, like this: --ppapi-flash-version=99.99.99.99. This gives a possible command line for Windows of this:
-
-> out\\release_component\\chrome.exe
-> --ppapi-flash-path="%localappdata%\\Google\\Chrome SxS\\User
-> Data\\PepperFlash\\25.0.0.119\\pepflashplayer.dll"
-> --ppapi-flash-version=99.99.99.99
-
-There are no specific gn args needed to run flash in a local build -
-non-official, component, and debug/release builds all work fine.
-
-Make sure that the bitness (32-bit versus 64-bit) of your local build matches
-that of the DLL that you specify.
-
-To test fullscreen flash, you may use
-<https://www.permadi.com/tutorial/flash9FullScreen/index.html> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/pepper_design.png.sha1 b/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/pepper_design.png.sha1
deleted file mode 100644
index 5e3f7aabedf..00000000000
--- a/chromium/docs/website/site/developers/design-documents/pepper-plugin-implementation/pepper_design.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dbd5e3dd7ee816b93910dc59971ac5f634eee189 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/per-page-suborigins/index.md b/chromium/docs/website/site/developers/design-documents/per-page-suborigins/index.md
deleted file mode 100644
index a6e87e8c206..00000000000
--- a/chromium/docs/website/site/developers/design-documents/per-page-suborigins/index.md
+++ /dev/null
@@ -1,299 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: per-page-suborigins
-title: Per-page Suborigins
----
-
-# [TOC]
-
-# The following is deprecated and left for historical purposes. Please see the
-editor's draft of the spec for the most up to date design:
-<https://w3c.github.io/webappsec-suborigins/>
-
-# Objective
-
-Our objective is to provide a new mechanism for allowing sites to easily
-separate their content into separate, flexible synthetic origins while serving
-content from a single physical origin. Furthermore, the synthetic origins should
-be predictable and convey the full physical origin so that compartmentalized
-content can easily use current browser technologies, such as postMessage, to
-interact with each other.
-
-# Background
-
-This document is based on (and much text lifted from) an original proposal
-written by Michal Zalewski
-
-Currently, web applications are almost always compartmentalized by using
-separate host names to establish separate web origins. This is useful for
-helping to prevent XSS and other cross-origin attacks, but has many unintended
-consequences. For example, it causes latency due to additional DNS lookups,
-removes the ability to use single-origin features (such as the history.pushState
-API), and creates cryptic host name changes in the user experience. Perhaps most
-importantly, it results in an extremely inflexible architecture that, once
-rolled out, can’t be easily and transparently changed later on.
-
-There are several mechanisms for reducing the attack surface for XSS without
-creating separate host-name based origins, but each pose their own problems.
-Per-page Suborigins is an attempt to fill some of those gaps. Two of the most
-notable mechanisms are Sandboxed Frames and Content Security Policy (CSP). Both
-are powerful but have shortcomings and there are many external developers
-building legacy applications that find they cannot use those tools.
-
-Sandboxed frames can be used to completely separate untrusted content, but they
-pose a large problem for containing trusted but potentially buggy code because
-it is very difficult, by design, for them to communicate with other frames. The
-synthetic origins assigned in a sandboxed frame are random and unpredictable,
-making the use of postMessage and CORS difficult.
-
-Content Security Policy is also promising but is generally incompatible with
-current website design. Many notable companies found it impractical to retrofit
-most of their applications with it. On top of this, until all applications
-hosted within a single origin are simultaneously put behind CSP, the mechanism
-offers limited incremental benefits, which is especially problematic for
-companies with large portfolios of disparate products all under the same domain.
-
-# Overview
-
-We want to create a new browser primitive to provide isolation within a single
-origin between disparate components. Often, there are many web applications that
-share a single real origin. One example of this is www.google.com, which many
-functionally separate applications (in the hundreds) share for reasons related
-to branding, DNS latency, and seamless interoperability, despite being very
-different properties. The consequence of this is that one compromised web
-application from an XSS at the www.google.com origin means that all properties
-at www.google.com are compromised. Many other popular web destinations such as
-Facebook, Twitter, Dropbox, etc. face similar issues.
-
-This is an accident of the Same Origin Policy (SOP) in the sense that the SOP
-assumes everything at a given real origin is part of the same application. A
-Per-page Suborigin primitive would allow developers to apply the SOP at a finer
-grained granularity and specify that different applications within the same real
-origin should, in fact, be treated as different origins under the SOP. The
-primitive should fill a space between Sandboxed Frames and CSP by allowing
-consumers to separate trusted components into separated origins while still
-allowing efficient cross-origin communication via postMessage and CORS, but also
-without significant retrofitting limitations to legacy applications.
-
-Per-page Suborigins would provide a way for applications at the same origin to
-request to be placed in separate, synthetic suborigins. These suborigins would
-be in a predictable namespace, so utilizing postMessage and CORS would be
-possible just as normal. However, it would also provide the strong isolation
-properties of regular SOP protection; despite being in the same real origin,
-code from different suborigins would not be able to access the DOM of a
-different suborigin.
-
-Furthermore, Per-page Suborigins could actually help with a rollout of CSP. As
-noted above, when many different properties are hosted on the same domain, if
-only some have CSP applied, many of the benefits are lost because an XSS on one
-of the non-CSP enabled pages poses an immediate threat to CSP-enabled content.
-With Per-page Suborigins, by compartmentalizing different applications within
-the same domain, an exploit of one application that is not CSP enabled would not
-necessarily compromise an application in a different Per-page Suborigin, thus
-increasing the value of gradually deploying CSP for high-value components.
-
-We see effectively three different use cases for Per-page Suborigins:
-
- Separating distinct applications that happen to be served from the same
- domain, but do not need to extensively interact with other content. Examples
- include marketing campaigns, simple search UIs, and so on. This use requires
- very little engineering effort and faces very few constraints; the
- applications may use XMLHttpRequest and postMessage to communicate with
- their host domain as required.
-
- Allowing for modularity within a larger web application by splitting the
- functional components into different suborigins. For example, Gmail might
- put the contacts widget, settings tab, and HTML message views in separate
- Per-page Suborigins. Such deployments may require relatively modest
- refactorings to switch to postMessage and CORS where direct DOM access and
- same-origin XMLHttpRequest are currently used, but we believe doing so is
- considerably easier than retrofitting CSP onto arbitrary code bases and can
- be done very incrementally.
-
- Similar to (2), applications with many users can split information relating
- to different users into their own suborigin. For example, Twitter might put
- each user profile into a unique suborigin so that an XSS within one profile
- cannot be used to immediately infect other users or read their personal
- messages stored within the account.
-
-# Detailed Design
-
-## Definition of Suborigins
-
-Suborigins will be a synthetic origin, similar to the already implemented
-synthetic suborigins for HTML5 sandboxed frames. However, suborigins will have
-the important property of being predictable, well-defined, and hierarchical,
-allowing postMessage and CORS communication between sandboxed content.
-
-A suborigin may be specified by a HTTP header such as:
-
-Suborigin: &lt;name&gt;
-
-where &lt;name&gt; is defined by the server or developer and should be
-predictable.
-
-We will treat suborigins as a separate field from origins that must be checked
-whenever the SOP is being enforced. Thus, the above suborigin will result in the
-following SOP origin for the frame of:
-
-origin: &lt;protocol&gt;://&lt;host&gt;:&lt;port&gt;
-
-suborigin: &lt;name&gt;
-
-where &lt;protocol&gt;, &lt;host&gt;, and &lt;port&gt; remain as they always
-have, and &lt;name&gt; is a name defined by the server of alpha-numeric
-characters only. In the case that no suborigin is specified, the value of
-suborigin should be treated as the empty string.
-
-A potentially preferable option would be to implement this as a CSP directive.
-For example:
-
-Content-Security-Policy: suborigin &lt;name&gt;;
-
-which would result in the same full origin as above.
-
-An important point to note here is that, because of security considerations,
-there is no way to “surrender” or “escape” a suborigin. That is, once assigned a
-suborigin, a page cannot return within that instance to the real origin; the
-ability to do so would completely defeat the sandboxing purpose of the
-mechanism.
-
-We have considered alternative approaches to encoding suborigins but concluded
-that including it in the header is the best approach. For example, one
-alternative would be to encode the suborigin as part of the host or protocol.
-Two ways you might do this are:
-
-origin: &lt;protocol&gt;+&lt;name&gt;://&lt;host&gt;:&lt;port&gt;
-
-or origin: &lt;protocol&gt;://&lt;name&gt;@&lt;host&gt;:&lt;port&gt;
-
-These have the advantage that they (a) encode the suborigin as part of the
-current origin, thus no new suborigin field is required, and (b) current
-enforcement mechanisms would require relatively few changes since it would
-effectively be encoding the suborigin as part of either the protocol or host,
-and the current SOP already enforces these components.
-
-However, suborigins are not intended to be user understandable or interactive,
-and encoding suborigins in the scheme/host/port would risk users interacting
-with them, such as in the URL bar or having them accidentally displayed.
-Additionally, suborigins, as we will discuss, cannot be used in a variety of
-contexts that origins are valid, such as resource identifiers in &lt;iframe&gt;
-or &lt;img&gt; tags because we require that the server be the authority on what
-entities are place in suborigins. Thus, we create suborigins as a unique field
-alongside the origin field.
-
-Permissions that are normally associated with origins should not be applied to
-Suborigins. For example, geolocation permissions and fullscreen permissions
-should not be propagated to execution contexts in a new Suborigin. Moreover,
-there should be no way for Suborigins to obtain such permissions. We apply these
-restrictions because there should be no way for users to see or interact with
-Suborigins, and any special permissions might require user confirmation that
-would require knowledge about the implementation level details of suborigins.
-
-Cross-origin and cross-suborigin communication via postMessage is one of the
-most important features of per-page suborigins. Per-page suborigins with
-postMessage is a mostly straightforward extension of the current implementation.
-The main concern is on the receiving end of a message listener since we need
-both backwards compatibility and do not want to let legacy implementations
-accidentally accept messages from incorrect origins. Thus, the receiving event
-object will have event.origin set to null so that legacy applications will not
-confuse a message from the foo suborigin at bar.com for a message from the top
-level suborigin at bar.com. Instead, we propose a new property on the event
-object, event.finerorigin, that will contain two properties, origin and
-suborigin, containing the host and suborigin values respectively.
-
-In the case of pages with a non-empty string suborigin fields, all
-XMLHttpRequest requests to any URL should be treated as cross-origin, thus
-triggering CORS logic. This contains a similar concern to the postMessage issue
-outlined above. In order to prevent legacy applications from accidentally
-accepting CORS requests from suborigins, CORS headers originating from a
-suborigin execution context must specify a Suborigin: &lt;name&gt; header and a
-Finer-Origin: &lt;origin&gt; header, while explicitly not setting an Origin
-header. Similarly, responses should be checked for matching new
-Access-Control-Allow-Finer-Origin and Access-Control-Allow-Finer-Suborigin
-headers, while Access-Control-Allow-Origin headers should be ignored.
-
-Execution contexts with a Suborigin should be tagged with a flag is_suborigin
-that is inherited by all child contexts that normally inherit the origin of the
-creator. The SOP should apply as it currently does, using the suborigin in
-addition to the traditional origin for making policy decisions. Thus,
-containment should nearly be “for free,” that is it should work using the
-current SOP mechanisms with an additional check for the Suborigin of an
-execution context.
-
-However, in order to compartmentalize, there may be things that may require
-limited access. As mentioned before, various permissions, such as geolocation,
-must be disallowed in Suborigins. Additional restrictions also apply.
-
-Notably, a suborigin frame may not access document.cookie. While cookies will
-still be sent with HTTP requests based on the real origin, to simplify
-compartmentalization and security, suborigin contexts will not be able to access
-the cookie object, similar to sandboxed contexts. This will prevent information
-leak and limit the damage a compromised frame can do. If information from a
-cookie is needed, it will need to communicate with a non-suborigin frame via
-postMessage or another cross-origin mode of communication.
-
-Additionally, plugins pose a problem because they use questionable methods to
-determine the origin of the embedding page, and may bestow some privileges
-associated with this origin to the plugin-executed code. In light of this,
-&lt;embed&gt;, &lt;object&gt;, or &lt;applet&gt; content within documents where
-is_suborign is set will not be allowed. As opposed to sandboxed frames, however,
-is_suborign will not unconditionally propagate to all subframes - and therefore,
-many forms of rich ads or Flash videos placed on sandboxed pages should continue
-to work as-is or with only minimal tweaks.
-
-## Checking Origins and Suborigins
-
-As mentioned before, the SOP will now be applied to the new composite orign,
-that includes both an origin and suborigin field. SOP checks should remain
-functionally the same, however they should now include an additional check of
-the suborigin field for lexical case-insensitive equality.
-
-## Concerns
-
-There are many potential unintended consequences of establishing finer- or
-coarser-grained origins, and there is a long history of security issues and
-surprising corner cases caused by many of the previously proposed mechanisms
-(including sandboxed frames and CSP).
-
-Nevertheless, we think that this proposal avoids most of the pitfalls evident in
-previous efforts - in large part because it does not try to enforce any new,
-complex security rules for the sandboxed content, and does not routinely expose
-the new boundaries to the user.
-
-One concern, however, is with phishing attacks. As mentioned earlier, suborigins
-are purposefully create as a new field, rather than being fit into the current
-scheme/host/port scheme. This is because we don’t want users to see these
-implementation details. However, this has the consequence that phishing attacks
-are possible by suborigin content where content pretends to be from another
-suborigin. However, this is already the case with CSP.
-
-# Security Considerations
-
-When implementing the feature, care should be taken to provide several
-relatively straightforward guarantees:
-
- The origin needs to be correctly communicated and matched by the postMessage
- API and in the Origin header in CORS requests (this should require no code
- changes, but should be confirmed by the implementor). All XMLHttpRequest
- initiated from an isolated origin would be treated as CORS.
-
- The document.cookie API must be inaccessible from contexts marked as
- is_suborigin, similar to how sandboxed contexts are currently treated.
-
- Password manager and the “content permissions” (geolocation, full-screen
- access, microphone & webcam APIs) generally should be disallowed in
- Suborigin execution contexts. This is generally because of UI considerations
- and the desire to not display anything about Suborigins to users.
-
-# Future Work and Extensions
-
-Allow some limited access to document.cookie. Although we suggest using
-postMessage for transmitting and cookie related information to a suborigin, it
-might be useful to allow some limited access to cookies. One future approach
-might be to create suborigin-specific sections of cookies that only the named
-suborigin can access. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitecture.ai.sha1 b/chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitecture.ai.sha1
deleted file mode 100644
index 89ca44817e7..00000000000
--- a/chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitecture.ai.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9be166fa8c6d1a1bfdee2f345ab7a766d16a7281 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitectureoutofprocess.ai.sha1 b/chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitectureoutofprocess.ai.sha1
deleted file mode 100644
index 9bc45620ff2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/plugin-architecture/Pluginarchitectureoutofprocess.ai.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ab1600de6f7af104d57737cd83255c6bc6051f64 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/plugin-architecture/in_process_plugins.png.sha1 b/chromium/docs/website/site/developers/design-documents/plugin-architecture/in_process_plugins.png.sha1
deleted file mode 100644
index 4be5db62c4c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/plugin-architecture/in_process_plugins.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3d0e86dbf7bbbad32c166f3b010ce30a4385ffd5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/plugin-architecture/index.md b/chromium/docs/website/site/developers/design-documents/plugin-architecture/index.md
deleted file mode 100644
index 23f357b8cdb..00000000000
--- a/chromium/docs/website/site/developers/design-documents/plugin-architecture/index.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: plugin-architecture
-title: Plugin Architecture
----
-
-## Background
-
-Before reading this document, you should be familiar with Chromium's
-[multi-process
-architecture](/developers/design-documents/multi-process-architecture).
-
-## Overview
-
-Plugins are a major source of browser instability. Plugins also make sandboxing
-the process where the renderer runs impractical, as plugins are written by
-third-parties and we can't control their access to the operating system. The
-solution is to run plugins in their own separate process.
-
-## Detailed design
-
-### In-process plugins
-
-Chromium has the ability to run plugins in process (this is handy for testing)
-as well as out of process. Both start at our non-multi-process-aware WebKit
-embedding layer, which expects the embedder to implement the WebKit::WebPlugin
-interface. This is implemented by WebPluginImpl. The WebPluginImpl talks "up"
-the chain to a WebPluginDelegate interface, which for in-process plugins is
-implemented by WebPluginDelegateImpl. This in turn talks to our NPAPI wrapper
-layer.
-
-[<img alt="image"
-src="/developers/design-documents/plugin-architecture/in_process_plugins.png">](/developers/design-documents/plugin-architecture/in_process_plugins.png)
-
-**Historical note:** Before we had the WebKit embedding layer, WebPluginImpl
-*was* the embedding layer. It would talk to the "embedding application" through
-the WebPluginDelegate abstract interface, which we would switch implementations
-of for in-process and out-of-process plugins. With the addition of the Chromium
-WebKit API, we added the new WebKit::WebPlugin abstract interface, which has the
-same function as the old WebPluginDelegate interface. A better design with this
-interface would be to merge WebPluginImpl and WebPluginDelegateImpl and do the
-process split at the WebKit::WebPlugin level. This has not been changed due to
-its complexity.
-
-### Out-of-process plugins
-
-Chromium switches out implementations at the layer indicated by the dotted line
-in the diagram above to support out-of-process plugins. This just interposes an
-IPC layer between the WebPluginImpl and WebPluginDelegateImpl layers, and lets
-us share all of our NPAPI code between each mode. All of the old
-WebPluginDelegateImpl code, as well as all of the NPAPI layer it talks to, now
-executes in the separate plugin process.
-
-The two sides of a Renderer/Plugin communication channel are represented by the
-PluginChannel and the PluginChannelHost. We have many renderer processes, and
-one plugin process for each unique plugin. This means there is one
-PluginChannelHost in the renderer for each type of plugin it uses (for example,
-Adobe Flash and Windows Media Player). In each plugin process, there will be one
-PluginChannel for each renderer process that has an instance of that type of
-plugin.
-
-Each end of the channel, in turn, maps to many different instances of a plugin.
-For example, if there are two Adobe Flash movies embedded in a web page, there
-will be two WebPluginDelegateProxies (and related stuff) in the renderer side,
-and two WebPluginDelegateStubs (and related stuff)
-
-in the plugin side. The channel is in charge of multiplexing the communication
-between these many objects over one IPC connection.
-
-In this diagram, you can see the classes from the above in-process diagram
-grayed out, with the new out-of-process layer (in color) in the middle.
-
-[<img alt="image"
-src="/developers/design-documents/plugin-architecture/out_of_process_plugins.png">](/developers/design-documents/plugin-architecture/out_of_process_plugins.png)
-
-**Historical note:** We used to consistently use a stub/proxy model for
-communication, with one stub and one proxy on each side of the IPC channel for
-receiving and sending messages to one plugin, respectively. This leads to many
-classes that can get confusing. As a result, the WebPluginStub was merged into
-the WebPluginDelegateProxy which now handles the renderer side of all IPC
-communication for one plugin instance. The plugin side has not been merged yet,
-leaving two classes, the WebPluginDelegateStub and the WebPluginProxy as
-conceptually the same object, just representing different directions of
-communication.
-
-### Windowless Plugins
-
-Windowless plugins are designed to run directly within the rendering pipeline.
-When WebKit wants to draw a region of the screen involving the plugin it calls
-into the plugin code, handing it a drawing context. Windowless plugins are often
-used in situations where the plugin is expected to be transparent over the page
--- it's up to the plugin drawing code to decide how it munges the bit of the
-page it's given.
-To take windowless plugins out of process, you still need to incorporate their
-rendering in the (synchronous) rendering pass done by WebKit. A naively slow
-option is to clip out the region that the plugin will draw on then synchronously
-ship that over to the plugin process and let it draw. This can then be sped up
-with some shared memory.
-However, rendering speed is then at the mercy of the plugin process (imagine a
-page with 30 transparent plugins -- we'd need 30 round trips to the plugin
-process). So instead we have windowless plugins asynchronously paint, much like
-how our existing page rendering is asynchronous with respect to the screen. The
-renderer has effectively a backing store of what the plugin's rendered area
-looks like and uses this image when drawing, and the plugin is free to
-asynchronously send over new updates representing changes to the rendered area.
-All of this is complicated a bit by "transparent" plugins. The plugin process
-needs to know what pixels it wants to draw over. So it also keeps a cache of
-what the renderer last sent it as the page background behind the plugin, then
-lets the plugin repeatedly draw over that.
-
-So, in all, here are the buffers involved for the region drawn by a windowless
-plugin:
-Renderer process
-- backing store of what the plugin last rendered as
-- shared memory with the plugin for receiving updates ("transport DIB")
-- copy of the page background behind the plugin (described below)
-Plugin process
-- copy of the page background behind the plugin, used as the source
-material when drawing
-- shared memory with the renderer for sending updates ("transport DIB")
-Why does the renderer keep a copy of the page background? Because if the page
-background changes, we need to synchronously get the plugin to redraw over the
-new background it will appear to lag. We can tell that the background changed by
-comparing the newly-rendered background against our copy of what the plugin
-thinks the background. Since the plugin and renderer processes are asynchronous
-with respect to one another, they need separate copies.
-
-### Overall system
-
-This image shows the overall system with the browser and two renderer processes,
-each communicating with one shared out-of-process Flash process. There are three
-total plugin instances. Note that this diagram is out of date, and WebPluginStub
-has been merged with WebPluginDelegateProxy.
-
-[<img alt="image"
-src="/developers/design-documents/plugin-architecture/pluginsoutofprocess.png">](/developers/design-documents/plugin-architecture/pluginsoutofprocess.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/plugin-architecture/out_of_process_plugins.png.sha1 b/chromium/docs/website/site/developers/design-documents/plugin-architecture/out_of_process_plugins.png.sha1
deleted file mode 100644
index 0850d7b6090..00000000000
--- a/chromium/docs/website/site/developers/design-documents/plugin-architecture/out_of_process_plugins.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4e13a7cd3495ca0bd8fecb4957f433528f9f47e0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsinprocess.png.sha1 b/chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsinprocess.png.sha1
deleted file mode 100644
index 837b60882be..00000000000
--- a/chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsinprocess.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f9860f4776ffa8f6e82eb74b37ae7c44b4fe10ce \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsoutofprocess.png.sha1 b/chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsoutofprocess.png.sha1
deleted file mode 100644
index ac793f04821..00000000000
--- a/chromium/docs/website/site/developers/design-documents/plugin-architecture/pluginsoutofprocess.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2c2f759e1a8afd779bd0b9662d0b9e9ddd62a49c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/preferences/index.md b/chromium/docs/website/site/developers/design-documents/preferences/index.md
deleted file mode 100644
index f22728c348c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/preferences/index.md
+++ /dev/null
@@ -1,474 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: preferences
-title: Preferences
----
-
-**Abstract:** Preferences are used to store configuration parameters that can be
-modified at run-time rather than compile-time. This document describes the
-architecture of Chromium’s preferences system and explains how to use it in the
-context of extensions and policies.
-
-**Authors:** battre, pamg
-
-**Last modification:** March 16, 2013 (updated code search links)
-
-[TOC]
-
-## Introduction
-
-Preferences are a means to **store configuration options** in Chromium. Each
-**preference** is **identified by a key** (a string like “proxy.mode”) and
-points to a value that we call the **preference value**. These values can be
-represented by any data-type that is defined in “values.h”, i.e. booleans,
-integers, strings, lists, dictionaries, et cetera.
-Preferences can be **associated** with a **browser profile** or with **local
-state**. Local state contains everything that is not directly associated to a
-specific profile but rather represents values that are associated with the user
-account on the host computer (e.g. “Was the browser shut down correctly last
-time?”, “When was the ‘GPU block list’ downloaded the last time?”, etc.). Due to
-its nature, local state is never synced across machines.
-The **preference values that are effective at runtime can be set from various
-sources like default values, files of persisted settings, extensions** and
-**policies**.
-The **preference system is responsible for** and allows for
-
-* registering preferences with default values
-* setting and getting of preference values
- * while performing basic type validation
- * while respecting precedences (priority) of preference value
- sources
- * while providing thread safety (allow access only on UI thread,
- provide some helpers for subscribing to preference values on
- other threads)
-* notification of preference value changes
-
-These aspects are addressed in the following.
-
-## Basics
-
-### Registering preferences
-
-**Each preference needs to be registered** before being used as in the following
-example:
-
-```none
-PrefService* prefs = …;
-prefs->RegisterBooleanPref(prefs::kSavingBrowserHistoryDisabled, false, PrefService::UNSYNCABLE_PREF);
-```
-
-where `prefs::kSavingBrowserHistoryDisabled` is a string defined in
-`pref_names.{h,cc}`.
-Here we register a boolean preference with the **key**
-`“history.saving_disabled”` **and a default value** of `false`. The default
-value determines the type of value that can be stored under the key (in this
-case: boolean). Prefs associated with a profile may be labeled as sync-able and
-un-sync-able (see [sync](/developers/design-documents/sync)).
-Registering preferences is important to define their type and guarantee valid
-default values but also because only registered preference keys can be queried
-for their current value. Preferences are persisted to disk in the “Preferences”
-file as JSON with nested dictionaries. The “.” in the preference key is used as
-the nesting operator:
-
-```none
-{
-  “history”: {
-    “saving_disabled”: false
-  }
-}
-```
-
-This hierarchical namespace is not exposed within Chromium. You must not query
-`“history”` and expect a dictionary containing `“saving_disabled”`. Always
-access registered preferences by their full key.
-To register new preferences, add your `RegisterPrefs` call to
-`RegisterLocalState` or `RegisterUserPrefs` in `browser_prefs.cc`.
-
-### Accessing preference values
-
-The **preferences system lives entirely on the UI thread**. In the following we
-assume that we want to access it from there.
-The preferences associated with the profile can be accessed using the
-`PrefService` provided by `Profile::GetPrefs()`. The `PrefService` responsible
-for local_state is accessible by calling `g_browser_process->local_state()`.
-The **PrefService provides getter and setter methods** like
-`bool GetBoolean(const char* path) const;`
-` void SetBoolean(const char* path, bool value);`
-As we want to be sure that modifications trigger notifications (see below),
-`GetDictionary()` and `GetList()` return const-pointers. To modify the values,
-there are two choices:
-
-1. Use `void PrefService::Set(const char* path, const Value& value)` to
- set a new dictionary value.
-2. Use a `ScopedUserPrefUpdate` (see `scoped_user_perf_update.h`) to
- modify a dictionary or list.
- For **updating a dictionary**, the code would look as follows:
- `DictionaryPrefUpdate update(pref_service, prefs::kPrefName);`
- `update->SetBoolean(“member_key”, true);`
- `update->Remove(“other_key”, NULL);`
- At the time when “update” leaves its scope, a “value has changed”
- notification is automatically triggered.
-
-You **do not need to save modified preferences**. All set and update operations
-trigger a timer to write the modified preferences to disk. This reduces the
-number of incremental write operations. If you really need to be sure that the
-preferences are written to disk (during shutdown), use
-`PrefService::CommitPendingWrite()`.
-
-The **PrefChangeRegistrar** allows to subscribe to preference change events. A
-class that implements the `NotificationObserver` interface
-(`notification_observer.h`) can have a member variable
-
-```none
-PrefChangeRegistrar registrar_;
-```
-
-In its constructor, the class would initialize the registrar as follows
-
-```none
-registrar_.Init(pref_service);
-registrar_.Add(prefs::kPreference, this);
-```
-
-Any changes to `prefs::kPreference` would call the `Observe()` method of `this`.
-The **PrefMember** classes (`BooleanPrefMember`, `IntegerPrefMember`, …, see
-`pref_member.h`) are helper classes that stay in sync with preference values
-beyond the scope of the UI thread. This allows simple reading of preference
-values even outside the UI thread.
-
-### PrefStores and Precedences
-
-Chromium knows several locations where preferences can be stored:
-
-<table>
-<tr>
-<td><b> Store</b></td>
-<td><b>Purpose </b></td>
-</tr>
-<tr>
-<td>managed_platform_prefs </td>
-<td>contains all managed platform (non-cloud policy) preference values </td>
-</tr>
-<tr>
-<td>managed_cloud_prefs </td>
-<td>contains all managed cloud policy preference values </td>
-</tr>
-<tr>
-<td>extension_prefs </td>
-<td>contains preference values set by extensions </td>
-</tr>
-<tr>
-<td>command_line_prefs </td>
-<td>contains preference values set by command-line switches </td>
-</tr>
-<tr>
-<td>user_prefs </td>
-<td>contains all user-set preference values </td>
-</tr>
-<tr>
-<td>recommended_platform_prefs </td>
-<td>contains all recommended platform policy preference values </td>
-</tr>
-<tr>
-<td>recommended_cloud_prefs </td>
-<td>contains all recommended platform cloud preference values </td>
-</tr>
-<tr>
-<td>default_prefs </td>
-<td>contains all default preference values </td>
-</tr>
-</table>
-Source:
-[pref_value_store.h](https://code.google.com/p/chromium/codesearch#chromium/src/base/prefs/pref_value_store.h&q=file:pref_value_store.h%20%22decreasing%20order%20of%20precedence%22&sq=package:chromium&type=cs&l=34)
-
-The locations are **sorted in decreasing order of precedence** meaning that a
-higher preference store overrides preference values returned by a lower
-preference store. This is important because it means for example that an
-extension can override command-line configured preferences and that policies can
-overrule extension controlled preference values.
-The `default_prefs` `PrefStore` contains the values set by
-`PrefService::Register...Value` (see above).
-The four policy related `PrefStore`s are discussed in a chapter below.
-The `user_prefs` `PrefStore` represents a persisted pref store. It contains
-preference values configured by Chromium’s “Preferences” dialogs (and also
-preferences set by extensions stored under extension-specific preference keys
-“`extensions.settings.$extensionid.preferences`”).
-The `extension_prefs` `PrefStore` maintains an in-memory view of the currently
-effective preference values that are set by extensions. As multiple extensions
-can try to override the same preference, this PrefStore respects their relative
-preferences (more on this below). It provides a view over the
-“`extensions.settings.*.preferences`” paths in the `user_prefs`.
-The `command_line_prefs` represent preferences activated by command-line flags.
-
-### Incognito Profile
-
-The incognito profile is designed to overlay the regular profile. Preferences
-defined in the regular profile are visible in the incognito profile unless they
-are overridden.
-The following table illustrates which `PrefStore`s are shared between the
-profiles and which are handled differently.
-<table>
-<tr>
-<td><b>Store in regular profile</b></td>
-<td><b>Incognito profile</b></td>
-</tr>
-<tr>
-<td>managed_platform_prefs </td>
-<td>Same PrefStore as in regular profile</td>
-</tr>
-<tr>
-<td>managed_cloud_prefs </td>
-<td>Same PrefStore as in regular profile</td>
-</tr>
-<tr>
-<td>extension_prefs </td>
-<td>Special handling for different life-cycles (see below)</td>
-</tr>
-<tr>
-<td>command_line_prefs </td>
-<td>Same PrefStore as in regular profile</td>
-</tr>
-<tr>
-<td>user_prefs </td>
-<td>In-memory overlay that prevents persistence to disk</td>
-</tr>
-<tr>
-<td>recommended_platform_prefs </td>
-<td>Same PrefStore as in regular profile</td>
-</tr>
-<tr>
-<td>recommended_cloud_prefs </td>
-<td>Same PrefStore as in regular profile</td>
-</tr>
-<tr>
-<td>default_prefs</td>
-<td>Same PrefStore as in regular profile</td>
-</tr>
-</table>
-Extension controlled preferences can be defined for three different scopes:
-
-* regular (inherited by incognito profile, persisted to disk)
-* incognito_persistent (overrides regular, persisted to disk)
-* incognito_session_only (overrides regular and incognito_persistent,
- not persisted to disk, life-time limited to one incognito session)
-
-The in-memory overlay for user_prefs can be used to ensure that specific changes
-to the preferences do not get persisted in the regular user prefs.
-
-## Class Structure
-
-The following figure illustrates the `PrefStores` (the figures use UML syntax:
-dashed lines with triangles represent inheritance; solid lines with arrows and
-filled diamonds represent composition; solid lines with arrows and empty
-diamonds represent aggregation):<img alt="image"
-src="https://lh4.googleusercontent.com/1uVGQHkigA9rUfiAyp9u9wpolF425l4wji6YNJne7Ct8RYb8blgyeTAPGbTjrDCCR9D9mCTsXLBzT8prDjeLvVf_n0XmBdXHF98npBjrVnXthNB5oMo5C6go0y1yGSUb">
-`PrefStore` is an interface that allows read access and subscription to changed
-values.
-The `PersistentPrefStore` interface extends this with setter methods as well as
-read and write operations to load and persist the preferences to disk. The
-`JsonPrefStore` implements this interface to store the “Preferences” file in the
-profile on disk. The `IncognitoUserPrefStore` provides means for an in-memory
-overlay. This allows storing incognito preferences that are not written to disk
-but forgotten when the last incognito window is closed.
-The `ConfigurationPolicyPrefStore`s handle policy driven preferences. They are
-discussed in a separate chapter.
-The `CommandLinePrefStore`, `DefaultPrefStore` and `ExtensionPrefStore` store
-the respective types of preference values. The `ExtensionPrefStore` is discussed
-in a separate chapter. These three PrefStores are based on the
-`ValueMapPrefStore` which provides an in-memory implementation of a `PrefStore`
-and relies on the `PrefValueMap` for this.
-The `PrefValueStore` is a facade around all `PrefStores` that enforces the
-precedence presented above. It maintains ownership of the respective
-`PrefStore`s and asks them one by one until the first `PrefStore` contains a
-specific key. `PrefValueStore` also answers questions about where a preference
-value comes from. For example, client code occasionally wants to know whether a
-preference is under control of the user, i.e., not forced by configuration
-management or extensions.
-The `PrefService` is the global interface to preferences. It supports
-registering default values, and simple access to currently effective preference
-values. At this abstraction layer, the `PrefValueStore` becomes an
-implementation detail of the `PrefService`:
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/-3xUJutScqdsTVmiR1QCi0nPow-L2sBZBk17oOU7iWpKdfFqAkoSEpclcQXYRrHK9H3xwe28rHhzRmMtnZeeWHcX1hhHsiYHwUHwQZA2D3iplxqMHl5XVkCCjTIjrCfV">
-The `PrefService` serves three purposes:
-
-* Registering default values for preferences.
-* Retrieving the currently effective preference value.
-* Storing preference values in the persisted user_prefs.
-
-The `ExtensionPrefs` class manages preference values that extensions want to
-set. It persists values to disk using the `PrefService` and feeds values to the
-`ExtensionPrefStore` so that the `PrefValueStore` can consider extension
-controlled preferences for effective preference values. The latter happens
-indirectly. The `ExtensionPrefs` instance writes the preference values into the
-`ExtensionPrefValueMap` which knows about regular and incognito preferences. The
-`ExtensionPrefStore`, which is specific to either a regular profile or an
-incognito profile, subscribes to the `ExtensionPrefValueMap` and retrieves the
-respective regular or incognito preferences.
-
-### Notification Mechanisms
-
-The following figure indicates how preferences are set (blue arrows) and how
-change notifications are propagated to subscribers (red arrows).
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/f40v5VbhUvCRk6R0zHSwQ1K9IrRJ2q860-gywMk-VfEbVRwXquL8y8ZnUKaGiHq5tyB4iVUVQgaSB5o1VNy8jDFc5dxgagHfZEqZApACk349KQNhwDfqgQMgbEJ-zgi6">
-The blue paths are triggered in three different ways:
-
-* Registering a default preference value: `PrefService` →
- `DefaultPrefStore`
-* Setting user preference (user modifies a setting in Chromium):
- `PrefService` → `JsonPrefStore`
-* Extension sets a preference: `ExtensionPrefs` →
- `ExtensionPrefValueMap` and for persistence beyond browser sessions:
- `ExtensionPrefs` → `PrefService` → `JsonPrefStore`
-
-Helper classes like the `PrefChangeRegistrar` and `PrefMember` can be used to
-subscribe to changes as outlined above.
-
-## Extension Controlled Preferences
-
-Some (selected) preferences can be controlled by extensions (such as the proxy
-settings). These preferences need to be made available to extensions explicitly
-as we do not want to allow extensions to configure all preferences.
-Some particularities of extension controlled preferences need to be addressed:
-
-* Two or more extensions might write different preference values for
- the same preference. E.g. two extensions might want to set the proxy
- configuration. In this case it is important to ensure that one
- extension overrides the preference values of the other extension and
- to guarantee a **deterministic precedence**. This means that each
- time somebody requests the current value of a preference, he gets
- the same reply. The precedence rule is defined as **“last extension
- installed wins”**. This precedence order needs to be maintained even
- between browser restarts where extensions are loaded asynchronously.
- This is realized by adding a path
- `extensions.settings.$EXTENSION_ID.install_time` to the Preferences
- file.
-* The `ExtensionPrefStore` needs to **provide values even before
- extensions are started**. Imagine that a proxy extension provides
- proxy configuration values that are essential for any kind of
- network communication. Other extensions would not be able to
- communicate until the proxy extension has been started. For this
- reason, the Preferences file is extended by
- `extensions.settings.$EXTENSION_ID.preferences`. At this point we
- store a dictionary, whose keys are un-expanded path names that
- identify the preferences. Maintaining these entries and updating the
- `ExtensionPrefStore` that represents the winning preferences of
- extensions is task of the `ExtensionPrefs` class.
-* We want to allow using **different preference values for incognito
- windows**. We support two different kinds of incognito preferences:
- * **persistent_incognito** preferences are persisted in the
- Preferences file as
- `extension.settings.$EXTENSION_ID.incognito_preferences`. Their
- life-time spans several browser sessions (i.e. browser restart)
- and can be used for settings about incognito windows that are
- NOT related to the specific browsing history of an incognito
- session. Otherwise we would defeat the purpose of the incognito
- mode (don’t store any browsing behavior related data).
- * **session_only_incognito** preferences are not persisted. They
- can only be set once at least one incognito window has been
- opened and are cleared when the last incognito window is closed.
-
-### Exposing preferences to extensions
-
-In order to expose a preference to an extension, you need to follow these steps:
-Add a property of type ChromeSettings to your extension namespace in the
-respective file in `chrome/common/extensions/api`. This is an example from the
-proxy extension:
-
-```none
-"properties": {
-  "settings": { // “settings” is the name of the preference exposed to the extension
-    "$ref": "ChromeSetting",
-    "description": "Proxy settings to be used. The value of this setting is a ProxyConfig object.",
-    "value": [
-      "proxy", // this is an internal, unique key referred to as “preference key” below
-      {"$ref": "ProxyConfig"} // this is the schema to which preferences need to comply
-    ]
-  }
-}
-```
-
-Add an `PrefMappingEntry` to `kPrefMapping[]` in `extension_preference_api.cc`.
-You require three entries:
-
-* Name of the preference as exposed to the extension (referred to as
- “preference key” above)
-* Name of the preference as handled within the browser (a string
- literal in the prefs:: namespace)
-* Name of the permission required to modify the preference
-
-Optionally you can register a `PrefTransformer` to `PrefMapping::PrefMapping()`
-in `extension_preference_api.cc`. This allows for a transformation of how
-preferences are structured within the browser and in the extension. For example,
-the Proxy Settings API exposes preferences differently to extensions than they
-are stored internally.
-By following these steps, we guarantee that all preferences are made available
-in the same way. We provide `get()`, `set()`, and `clear()` functions as well as
-an `onChanged` event.
-
-## Configuration Policy
-
-Configuration policy, a.k.a. admin policy, uses preferences as the main way of
-exposing policy settings in the Chromium code. There are two levels policy can
-come in:
-
-* **Mandatory policy**: Settings that are forced upon the user by
- their administrator. These policy settings are injected through the
- `managed_platform` and `managed_cloud`
- `ConfigurationPolicyPrefStore`s, which are the highest-precedence
- `PrefStore`s. Any user-visible configuration settings (e.g. in
- chrome://settings) should be disabled and merely show the preference
- value if a policy-configured preference value is present. To
- facilitate implementing this, there is
- `PrefService::Preference::IsManaged()` which will return `true` if
- there's a managed policy setting.
-* **Recommended policy**: At the low-precedence side of the
- `PrefStore` stack, there are two more
- `ConfigurationPolicyPrefStore`s: `recommended_platform` and
- `recommended_cloud`. These contain policy-configured values that are
- not forced on the user, but merely defaults provided by the
- administrator, which the user can still override. From the
- perspective of the Chromium code, recommended policy shouldn't
- require special handling in most cases; the PrefService will just
- return the policy-configured default when appropriate.
-
-The `ConfigurationPolicyPrefStore` objects always keep the latest known policy
-configuration. Behind the scenes, the policy settings are read from the
-platform's native management APIs through the `ConfigurationPolicyProvider`
-abstraction, which monitors the platform's policy configuration an notifies
-`ConfigurationPolicyPrefStore` to reexamine policy configuration as provided by
-the ConfigurationPolicyProvider on changes. ConfigurationPolicyProvider will
-then map the new configuration to preferences and expose them to PrefValueStore,
-generating `PREF_CHANGED` notifications as appropriate.
-
-Covering the design of all `ConfigurationPolicyProvider` implementations is out
-of scope for this document, but here is a quick overview (see also
-<http://www.chromium.org/administrators>):
-
-* On Windows, `ConfigurationPolicyProviderWin` integrates with Windows
- Group Policy. Policy settings are read from the registry and
- Chromium watches for policy notifications to update policy settings
- when Group Policy changes.
-* Mac has a mechanism called "Managed Preferences" and
- policy-configured settings come as locked application preferences.
- They can be configured and distributed through the Workgroup Manager
- application and Apple's Directory Service.
-* For Linux, `ConfigDirPolicyProvider` reads policy settings from JSON
- files in `/etc`. The directories are monitored for changes so policy
- can be reloaded when files change.
-* On ChromeOS, there is code that can pull down policy settings from a
- device management service in the cloud.
-
-## Command line parameters
-
-In order to map command line parameters to preference values, you can edit
-`command_line_pref_store.cc` and follow the examples therein. Note that it may
-be advantageous to copy command-line flags into the `CommandLinePrefStore`. This
-decouples our code from a static global `CommandLine` instance.
diff --git a/chromium/docs/website/site/developers/design-documents/prerender/CroppedPrerenderingDiagram.png.sha1 b/chromium/docs/website/site/developers/design-documents/prerender/CroppedPrerenderingDiagram.png.sha1
deleted file mode 100644
index 6257105c825..00000000000
--- a/chromium/docs/website/site/developers/design-documents/prerender/CroppedPrerenderingDiagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-651af6586fddb93e2d20f0b4bfb59b8ccda18fcb \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/prerender/Prerenderingdiagram.png.sha1 b/chromium/docs/website/site/developers/design-documents/prerender/Prerenderingdiagram.png.sha1
deleted file mode 100644
index 322eee4c117..00000000000
--- a/chromium/docs/website/site/developers/design-documents/prerender/Prerenderingdiagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f535f33efe16a38764c493cc29b201044f44d2e2 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/prerender/Wickedflowchart.gif.sha1 b/chromium/docs/website/site/developers/design-documents/prerender/Wickedflowchart.gif.sha1
deleted file mode 100644
index 505906ee227..00000000000
--- a/chromium/docs/website/site/developers/design-documents/prerender/Wickedflowchart.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cd33a477104b506ecb5914dfba2d883071f7aca0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/prerender/index.md b/chromium/docs/website/site/developers/design-documents/prerender/index.md
deleted file mode 100644
index aa3bc83a0f2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/prerender/index.md
+++ /dev/null
@@ -1,236 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: prerender
-title: Chrome Prerendering
----
-
-## Overview
-
-> Prerendering is a feature in Chrome to improve user-visible page load times.
-> Prerendering is triggered by &lt;link rel="prerender"&gt; elements in
-> referring pages. A hidden page is created for the prerendered URL, which will
-> do full loading of all dependent resources, as well as execution of
-> Javascript. If the user navigates to the page, the hidden page will be swapped
-> into the current tab and made visible.
-
-> ![](/developers/design-documents/prerender/CroppedPrerenderingDiagram.png)
-
-> Although the core of prerendering is a fairly simple change to Chrome, there
-> are a number of issues which make the implementation more complex:
-
- * Minimizing resource contention.
- * Handling dynamic media \[video, audio, plugins, canvas\]
- * Cancellation of pages on certain corner cases.
- * Minimizing server side effects.
- * Mutations to shared local storage \[cookies, sessionStorage,
- etc.\]
-
-> Note that this document is not intended to be a comprehensive list of issues.
-
-### Base Mechanism
-
-> #### Creating a Prerendered Page
-
-> Prerender is initiated when a page contains a &lt;link rel=”prerender”&gt;
-> resource. The ResourceDispatcherHost receives a resource request with
-> ResourceType::Prerender - but this request will never be sent out to the
-> network. Instead, it is used as a signal to create a PrerenderContents, and
-> the request itself is cancelled.
-
-> The PrerenderContents is stored in the PrerenderManager, which maintains a
-> directory of all PrerenderContents created by the same profile. A small number
-> of recently created PrerenderContents are allowed. The current implementation
-> only keeps one page around for a maximum of 30 seconds, but this may change in
-> the future. Older pages are pruned, and a Least-Recently-Created eviction
-> algorithm is used if capacity has been reached.
-
-> #### Using a Prerendered Page
-
-> There are two cases where a prerendered page may be used instead of a new page
-> load:
-
- * In a call to TabContents::NavigateToPending entry, which is
- triggered e.g. when a user types in a new URL to visit.
- * In a call to TabContents::DidNavigate, which is, among other
- cases, exercised when a user clicked on a link on the current
- page.
-
-> In both cases, the current profile’s PrerenderManager is checked to see if a
-> valid PrerenderContents matches the destination URL. If a match is found,
-> then:
-
- * The PrerenderContents is removed from the PrerenderManager, so
- it can only be used once.
- * The PrerenderContents’ TabContentsWrapper is swapped in for the
- existing TabContentsWrapper using the TabContents delegate
- ReplaceAt mechanism.
- * The old TabContentsWrapper is kept alive until unload handlers
- complete running, and then is destroyed.
-
-> #### Visibility API
-
-> A page visibility API has been added to expose the current visibility state of
-> a web page, such as whether it is prerendered, hidden, or potentially
-> visibile.
-
-> See <http://w3c-test.org/webperf/specs/PageVisibility/> for the proposed API.
-> Note that the current implementation adds a webkit prefix since the API may
-> still change.
-
-> This can be used for a variety of purposes, such as lowering the volume of a
-> game while it’s not visible, or pausing an intro sequence until the page
-> transitions out of the prerender state.
-
-### Minimizing Resource Contention
-
-> Prerendering runs the risk of negatively impacting page load time of other
-> pages due to resource contention. Although some of these issues are also
-> tickled with the existing prefetch support, prerendering makes the potential
-> for problems more severe: more resources will be fetched because the
-> subresources are also retrieved, not just the top level page; and CPU and
-> memory consumption will likely be higher.
-
-> To minimize network contention, all resources in a prerendered page are
-> retrieved at the lowest priority level. Currently the priority is only used to
-> order pending requests for a particular domain: the scheduling may need to
-> change for this priority to only allow idle requests if there are no active
-> network requests at all. There is currently no way to cancel active
-> connections when a higher priority request comes along--this may be needed so
-> long-lived speculative requests for prerender do not block requests for a page
-> that the user is actively visiting on the same domain. Finally, there is no
-> way to change resource priorities after a request has started--this may be
-> needed to bump up the priority of requests after a page has transitioned from
-> prerender to visible.
-
-> Memory utilization is being handled by restricting the number of prerendered
-> pages to only 3 (At most 2 per page), and is restricted if there is not enough
-> available RAM on the system at the time of the prerender. Additionally, if the
-> memory for the page exceeds [150
-> MiB](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/prerender/prerender_config.cc&l=9)
-> then the prerendering is cancelled and the memory returned to the system.
-
-> CPU utilization is being handled by lowering the priority of the render
-> process which contains the prerendered page. A prerendered page is only
-> created if it can be assigned to a unique process, so this minimizes the
-> chance that we will decrease the priority of a render process containing an
-> active tab.
-
-> Minimizing GPU utilization is currently not handled. One problem is that GPU
-> usage is measured per render process rather than per RenderView.
-
-> Minimizing disk cache utilization is currently not handled. The disk cache is
-> not currently priority based. Also, the cache hit rate may decrease over time
-> for users with prerender enabled due to more unused resources being inserted.
-> The eviction algorithm for the disk cache may also need to change to more
-> aggressively evict resources which were speculatively retrieved but never
-> used.
-
-> If a prerendered page tries to prerender another page, the requested prerender
-> is deferred until and unless the first prerender is navigate to.
-
-> Prerenders are destroyed if not used within 5 minutes. The source page can
-> cancel the prerender earlier if desired.
-
-### Handling Dynamic Media
-
-> #### Plugin deferral
-
-> While a page is in the prerendered state, plugin instantiation (and loading)
-> will be deferred until the page has been activated. The main rationale is to
-> prevent audio or video media from playing prior to the user actually viewing
-> the page, as well as to minimize the possible exploit surface.
-
-> A BlockedPlugin instance is created for each plugin element on the original
-> page. This is the same instance used by the Click-to-Play feature. It places a
-> simple shim plugin in the place of the originally intended plugin, and retains
-> the parameters that are needed to correctly create and initialize the
-> originally intended plugin. When the page transitions out of the prerendered
-> state, all BlockedPlugin instances created for prerendering purposes will swap
-> in the originally intended plugins.
-
-> #### HTML5 media elements
-
-> Playback is deferred the page completes, similar to plugins.
-
-Cancellation on Corner Cases
-
-> Pages are canceled if any of the conditions happen:
-
-> * The top-level page is not an HTTP/HTTPS scheme, either on the
- initial link or during any server-side or client-side redirects.
- For example, both ftp are canceled. Content scripts are allowed to
- run on prerendered pages.
-> * window.opener would be non-null when the page is navigated to.
-> * A download is triggered. The download is cancelled before it
- starts.
-> * A request is issued which is not a GET, HEAD, POST, OPTIONS, or
- TRACE.
-> * A authentication prompt would appear.
-> * An SSL Client Certificate is requested and requires the user to
- select a certificate.
-> * A script tries to open a new window.
-> * alert() is called.
-> * window.print() is called.
-> * Any of the resources on the page are flagged by Safe Browsing as
- malware or phishing.
-> * The fragment on the page does not match the navigated-to location.
-
-> When a problem is detected, the cancellation is done synchronously and the
-> offending behavior is typically stopped. For example, an XmlHttpRequest PUT
-> will cancel the request before it goes over the network, and prevent the page
-> from being swapped in. The prerendered page may live for a little while longer
-> due to the asynchronous nature of RenderView cancellation, but it will not be
-> swapped in.
-
-> Additional behavior may cause cancellation in the future, and some of the
-> existing cancellation causes may be relaxed in the future.
-
-### Mutations to shared local storage
-
-> Shared local storage such as DOM storage, IndexedDB, and HTTP cookies present
-> challenges for prerendering. Ideally mutations made by the prerendered page
-> should not be visible to other tabs until after the user has activated the
-> page. Mutations made by other pages should be reflected in the prerendered
-> page, which may have already read from local storage before the other pages
-> made the changes.
-
-> One option is to not worry about these issues. Since the prerendered pages are
-> only retained for a short period of time after their creation, the window for
-> race-like conditions is fairly short. However, this may result in confusion
-> for users (for example, if a prerender starts for a page, the user logs out on
-> the main page, and then the prerendered page becomes active with the user’s
-> old credentials). Additionally, the Visibility API provides ways for pages to
-> defer any mutating behavior until after the page becomes visibile. This is the
-> current approach taken in Chrome.
-
-> A second option is to cancel the prerender any time local storage is accessed.
-> This may be feasible for more recent versions of local storage \[such as
-> IndexedDB\] but is not an option for more commonplace schemes, particularly
-> HTTP cookies. Long-term, the cancel prerendering approach will also lead to
-> resistance of adoption of new forms of local storage.
-
-> A third option is to have a local storage sandbox while the page is
-> prerendered, and attempt to transactionally commit changes to the shared local
-> storage when the page becomes activated. See
-> <https://www.chromium.org/developers/design-documents/cookies-and-prerender>
-> for some thoughts about how to do this for Cookies.
-
-### Minimizing server side effects
-
-> Prerendering is only triggered when the top level page is retrieved with a
-> GET, and is assumed to be idempotent. Additionally, any non-GET, HEAD, TRACE,
-> POST, or OPTIONS requests from XmlHttpRequests will not be sent over the
-> network and the page will be cancelled.
-
-### Following redirects
-
-> ## If the server sends a redirect response for a subresource with a "Follow-Only-When-Prerender-Shown: 1" header, Chrome will hold off on following the redirect and on fetching the respective subresource until the prerender is shown to the user.
-
-## Any Questions?
-
-> Please send mail to prerender@chromium.org, or read the group archives at
-> <http://groups.google.com/a/chromium.org/group/prerender/topics>
diff --git a/chromium/docs/website/site/developers/design-documents/print-preview/index.md b/chromium/docs/website/site/developers/design-documents/print-preview/index.md
deleted file mode 100644
index ceedaf45b80..00000000000
--- a/chromium/docs/website/site/developers/design-documents/print-preview/index.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: print-preview
-title: Print Preview
----
-
-### Status: Draft as of 2010/10/14.
-
-#### Objective
-
-A feature in Chrome to let users see their printer output before sending it to
-the printer.
-
-#### Background
-
-Web pages are generally designed to be displayed on a computer screen and are
-not always optimized for printing. When a web page gets printed, the browser has
-to reformat the page
-to fit the physical constraints of the paper media. The web page printed to
-paper may look very different from what users see on the screen. Thus users need
-to be have a print preview feature in order to verify their print jobs before
-sending them off to the printer, so they do not waste consumables like ink and
-paper.
-As of October 2010, all major browsers have a print preview feature which lets
-users see what their print jobs will look like. The only exception is Chrome.
-The current implementation of printing in Chrome pops up a native printer
-selection dialog, where the user can select a destination printer and change
-printer settings. Once the user selects print from the native printing dialog,
-Chrome generates a print job and sends it off to the printer.
-Overview
-For print preview in Chrome, the plan is to display the print preview in a new
-tab which is a DOM UI page. The print preview page will consist of a left pane
-that allows for printer selection and printer options, and a right pane for
-displaying the preview as well as page thumbnails.
-
-Mocks: TODO(thestig) \[insert pictures here\]
-
-To generate a preview that most closely resembles what will be printed, Chrome
-will generate a PDF document to be sent to the printer and display it as the
-preview. Chrome will leverage the existing PDF plugin it ships with to render
-the PDF to screen.
-
-#### User Experience
-
-Users should be able to select print as they currently do with the wrench menu,
-renderer context menu, and shortcut key to bring up a print preview tab. In the
-print preview tab, the left pane will have a drop down list to select printers
-that are currently available through the native print dialog. Below the printer
-selection drop down is a list of commonly used options, including the pages to
-print, the number of copies, and portrait/landscape modes. A ‘More options’
-button expands the options list to show advances options when clicked.
-As the user adjusts the options, the preview on the right updates to reflect the
-new options the user selects. When the user finishes previewing, the user can
-hit the print button to print the document or the cancel button to exit the
-print preview. In addition, there will be a button so the user can access the
-native print dialog. TODO(UI) - figure out details.
-
-#### Related Work
-
-There is ongoing work to implement a PDF backend for Skia. This backend will
-enable Chrome to render web pages to consistent and size-efficient PDFs on
-Windows and Linux, which have no PDF generation capabilities and poor PDF
-generation capabilities, respectively. Mac OS X already has a high fidelity PDF
-backend built-in.
-There is ongoing work to improve the PDF plugin with additional features like
-page thumbnails.
-
-#### Implementation
-
-The print preview feature consists of both frontend work to provide the desired
-interactive user experience and backend work to generate the PDF and talk to the
-printers. Another area to consider is persistent on disk data.
-
-##### Frontend
-
-The front end work starts with hooking up the various print commands and hot
-keys to display a new tab that loads chrome://print. There will be a manager for
-print preview TabContents so each existing printable tab only has at most one
-print preview tab. Pressing print on a page that already has a preview tab will
-just bring the preview tab into focus. The print preview tab closes
-automatically when the user prints or cancels. Print preview tabs themselves are
-not printable.
-The PrintPreviewManager will be similar to the DevToolsManager. There is a
-single instance that lives inside BrowserProcess and shares its lifetime. It
-keeps a mapping of TabContents and their associated PrintPreviewUIs. The print
-event handler will ask the PrintPreviewManager for a PrintPreviewUI for a given
-existing tab. The PrintPreviewManager will either create a new print preview tab
-and return it or return an existing print preview tab. Since the
-PrintPreviewManager knows which tabs are print preview tabs, it will not create
-a PrintPreviewUI for another PrintPreviewUI.
-The print preview tab uses DOM UI to construct a special web page that has
-privileges to communicate with the browser process. It uses IPC to talk to the
-browser process to get the list of printers and set the the selected printer. It
-also needs to get the html snippet for the options for the selected printer from
-the browser, and send updates as the user selects options that affects the print
-output.
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/o6Bxn-bQokkswehLoGiZbhn9UfjyNCsyYDOg8hmGIh5sOm2bftvqQM33zZFj4zYR4s04ULbSJPNIP5YX_wUw0r7LaEHrIWXxbti6__vI6U-V1ObMIw"
-height=406px; width=633px;>
-
-The frontend also embeds a PDF plugin to display the preview. The browser
-generates the PDF and make it available to the print preview UI via a special
-URL, i.e. chrome://print/foo, so the UI just needs to create &lt;embed&gt; tag
-with the appropriate src parameter. The front end also needs to communicate with
-the PDF plugin to keep the list of pages to print in sync with the thumbnail
-selection inside the plugin. The DOM UI will communicate with the plugin via a
-Pepper API. TODO(thestig) talk to PDF plugin folks about interfacing with the
-plugin.
-
-##### Backend
-
-The backend code in the browser process needs to do the heavy lifting to support
-all the requests coming from the front end.
-To start, the browser process needs to get the list of printers and printer
-options using platform specific APIs. Cloud print already has code to generate
-html options code from a PPD/XPS, which is useful here. Though to make this work
-on Windows XP, which does support XPS, the browser also need to be able to query
-for common options from printers.
-The majority of the work in the backend involves restructuring the messy
-printing pipeline to support preview. The current Linux printing pipeline works
-differently from Windows and Mac. Once all the platforms are brought in line,
-the printing pipeline needs to be broken up into two pieces: PDF generation and
-printing. The current printing pipeline waits for the user to select a printer
-before generating the print output using platform specific code and sending the
-output to the printer. The actual printing process uses pipelining: the renderer
-generates printing metadata one page at a time, so it can generate them while
-the PrintJobWorker in the browser process sends them to the printer at the same
-time.
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/2z3HNh9XZnXodPVnCvwAPxo0t2XNuvA1WMR9btDaOPVnE7mnTHAAlcE_qgZeDvVqjBVEoBZGVwlEaW4T-nok5C8ifNomKSZcjMh3SXoUu3LDP88OcA"
-height=349px; width=663px;>
-
-In the printing work flow for print preview, the renderer needs to retrieve the
-current printer settings, generate a PDF, and send the PDF to the browser. On
-the browser side, it just displays the PDF and wait for users to tweak the
-printer settings, after which the browser would ask the renderer to generate a
-new PDF for previewing. This process repeats until the user finishes with
-preview, after which Chrome sends the final revision of the PDF to the printer.
-Whether this should be done directly or by ask the plugin to do it through parts
-of the existing printing pipeline remains TBD.
-
-<img alt="image"
-src="https://lh4.googleusercontent.com/AztOs3lb0beuoYTs6GRn-y-xpnJaCTL_GoJXE9Z3C_hxaLq5SrQB5qx9mqkrmwSbnHbxZqkMvbXHZLahm8EXTBPoXrbuNuknU62-VawahlHMvNP3Rw"
-height=161px; width=717px;>
-Points to consider are:
-
-* The printing pipeline needs to support both the current model and
- the new model while print preview development is a work in progress
- behind a command line flag.
-* PDF generation needs to happen in a reasonable amount of time to
- ensure print preview feels responsive to the user.
-* Alternatively, we can generate the PDF as a set of one page PDFs,
- but the PDF viewer plugin needs to know how to display them together
- as one PDF.
-* Duplicate the Frame/DOM/Render tree for printing?
- <http://crbug.com/21555>
-
-##### Persistent On Disk Data
-
-The print preview feature may need to save user settings for printers to disk so
-they persist between print jobs. I.e. it would be annoying to have to set the
-printer to landscape, black and white, with options foo and bar every time a
-user printers.
-These user preferences should be stored in a new database specifically for
-printer settings. This is a better alternative to storing the data directly in
-the preferences file. A user with many printers can generate lots of printer
-setting data that can potentially make the preferences file much bigger. This
-impacts start up time since Chrome needs to load the preferences file on start
-up, even though the printer settings are not used until much later.
-The proposed database will contain a table for global print preview settings,
-like the most recently used printers. It will also have a table for printer
-settings, where the columns are printer name, setting name, and setting value.
-Printer name and setting name should together form a unique key. In memory, the
-representation will be the same as cloud_print::PrinterBasicInfo’s options
-variable.
-
-#### Internationalization
-
-TODO / does the left pane need to be flipped around for RTL languages? Other
-i18n issues?
-
-#### Future Enhancements
-
-##### Cloud Printing Integration
-
-The initial version of print preview will only work with printers exposed by the
-OS. To integrate with Cloud Printing, Chrome will need to query for cloud
-printers in additional to local printers via the cloud printing APIs. Assuming
-print preview uses the same code as the cloud printer server to parse PPD/XPS
-files and display options, Chrome just need to get the printer info (PPD file)
-and available/default paper sizes. With these two pieces of data, Chrome can
-generate the option dialog and preview on its own. When the user hits the print
-button, Chrome will simply send the PDF to the cloud print server instead of to
-a local printer.
-
-##### Other Enhancements
-
-* Ability to adjust headers and footers.
-* Ability to adjust margins.
-* Shrink/expand to fit page
-* Integration with Google Docs.
-* UI feature to search for printers by name - large companies may have
- many network printers available which makes it hard to select from a
- list.
-* Location-aware printer selection.
-* Sync print preview settings to the native dialog
-
-#### Privacy and Security Concerns
-
-The print preview page and the PDF plugin both run inside a sandboxed renderer
-process. The page does have special privileges to communicate with the browser
-process to get printer options and send it print jobs. Provide the interface
-between the renderer and the browser is carefully controlled, print preview
-should be as secure as any other renderer process. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/printing/index.md b/chromium/docs/website/site/developers/design-documents/printing/index.md
deleted file mode 100644
index 66bf83b91b4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/printing/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: printing
-title: Printing
----
-
-* The printing is initiated by the yellow boxes; either by user
- intents or by script.
-* The actual printer spooling is done in the print worker thread.
-* The renderer thread is blocking the whole time, which could lead to
- deadlock where:
- * The renderer sends a sync message to the browser UI thread
- (which implicitly requires a round trip to the I/O thread)
- * The browser thread displays a PrintDlgEx() dialog box for
- instance
- * The tab client area (e.g. the HTML display area) receives a
- invalidation; requiring it to regenerate the display.
- * (or) A windowed plugin receives a WM_PAINT window message.
- * The windowed plugin calls NPAPI_ExecuteJavascript()
- * This calls synchronously the renderer.
- * But the renderer is not processing messages anymore -&gt;
- **Deadlock**.
-
-Because of this, there is work going on to not block the Renderer Thread by
-duplicating the WebViewImpl/WebFrameImpl and use the "inert" duplicate frame for
-the printing. This removes all the sync messages requirements. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/process-models/OWNERS b/chromium/docs/website/site/developers/design-documents/process-models/OWNERS
deleted file mode 100644
index bccc55526a4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/process-models/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-alexmos@chromium.org
-creis@chromium.org
-nasko@chromium.org
diff --git a/chromium/docs/website/site/developers/design-documents/process-models/index.md b/chromium/docs/website/site/developers/design-documents/process-models/index.md
deleted file mode 100644
index 3ab99e9b6e3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/process-models/index.md
+++ /dev/null
@@ -1,289 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: process-models
-title: Process Models
----
-
-[TOC]
-
-This document describes the different process models that Chromium supports for
-its renderer processes, as well as caveats in the models as they exist
-currently. **\[NOTE: This documentation predates the launch of [Site
-Isolation](/Home/chromium-security/site-isolation) and should be updated.\]**
-
-## Overview
-
-Web content has evolved to contain significant amounts of active code that run
-within the browser, making many web sites more like applications than documents.
-This evolution has changed the role of the browser into an operating system
-rather than a simple document renderer. Chromium is built like an operating
-system to run these applications in a safe and robust way, using multiple OS
-processes to isolate web sites from each other and from the browser itself. This
-improves robustness because each process runs in its own address space, is
-scheduled by the operating system, and can fail independently. Users can also
-view the resource usage of each process in Chromium's Task Manager.
-There are many ways that a web browser could be segmented into different OS
-processes, and choosing the best architecture depends on many factors, including
-stability, resource usage, and observations from actual usage. Chromium supports
-four different process models to allow experimentation, with a default model
-that best fits most users.
-
-## Supported models
-
-Chromium supports four different models that affect how the browser allocates
-pages into renderer processes. By default, Chromium uses a separate OS process
-for each instance of a web site the user visits. However, users can specify
-command-line switches when starting Chromium to select one of the other
-architectures: one process for all instances of a web site, one process for each
-group of connected tabs, or everything in a single process. These models differ
-in whether they reflect the origin of the content, the relationships between
-tabs, or both. This section discusses each model in greater detail; caveats in
-Chromium's current implementation are described later in this document.
-
-### Process-per-site-instance
-
-By default, Chromium creates a renderer process for each instance of a site the
-user visits. This ensures that pages from different sites are rendered
-independently, and that separate visits to the same site are also isolated from
-each other. Thus, failures (e.g., renderer crashes) or heavy resource usage in
-one instance of a site will not affect the rest of the browser. This model is
-based on both the origin of the content and relationships between tabs that
-might script each other. As a result, two tabs may display pages that are
-rendered in the same process, while navigating to a cross-site page in a given
-tab may switch the tab's rendering process. (Note that there are important
-caveats in Chromium's current implementation, discussed in the Caveats section
-below.)
-Concretely, we define a "site" as a registered domain name (e.g., google.com or
-bbc.co.uk) plus a scheme (e.g., https://). This is similar to the origin defined
-by the Same Origin Policy, but it groups subdomains (e.g., mail.google.com and
-docs.google.com) and ports (e.g., http://foo.com:8080) into the same site. This
-is necessary to allow pages that are in different subdomains or ports of a site
-to access each other via Javascript, which is permitted by the Same Origin
-Policy if they set their document.domain variables to be identical.
-A "site instance" is a collection of connected pages from the same site. We
-consider two pages as connected if they can obtain references to each other in
-script code (e.g., if one page opened the other in a new window using
-Javascript).
-
-#### **Strengths**
-
-* *Isolates content from different sites*. This provides a meaningful
- form of fate sharing for web content, where pages are isolated from
- failures caused by other web sites.
-* *Isolates independent tabs showing the same site*. Visiting the same
- site independently in different tabs will create different
- processes. This will prevent contention and failures in one instance
- from affecting other instances.
-
-#### **Weaknesses**
-
-* *More memory overhead*. In most workloads, this model will create
- more renderer processes than the process-per-site model described
- below. While this increases stability and may add opportunities for
- parallelism, it also increases memory overhead.
-* *More complex to implement.* Unlike process-per-tab and
- single-process, this model requires complex logic to support
- swapping processes in a tab when it navigates between sites, as well
- as proxying a small set of JavaScript actions that are permitted
- between origins, such as postMessage. (For more on this issue and
- our ongoing efforts to support it fully, see the Caveats section
- below and our [Site
- Isolation](/developers/design-documents/site-isolation) project
- page.)
-
-### Process-per-site
-
-Chromium also supports a process model that isolates different sites from each
-other, but groups all instances of the same site into the same process. To use
-this model, users should specify a `--process-per-site` command-line switch
-when starting Chromium. This creates fewer renderer processes, trading some
-robustness for lower memory overhead. This model is based on the origin of the
-content and not the relationships between tabs.
-
-#### Strengths
-
-* *Isolates content from different sites*. As in the
- process-per-site-instance model, pages from different sites will not
- share fate.
-* *Less memory overhead*. This model is likely to create fewer
- concurrent processes than the process-per-site-instance and
- process-per-tab models. This may be desirable to reduce Chromium's
- memory footprint.
-
-#### Weaknesses
-
-* *Can result in large renderer processes*. Sites like google.com host
- a wide variety of applications that may be open concurrently in the
- browser, all of which would be rendered in the same process. Thus,
- resource contention and failures in these applications could affect
- many tabs, making the browser seem less responsive. It is
- unfortunately hard to identify site boundaries at a finer
- granularity than the registered domain name without breaking
- backwards compatibility.
-* *More complex to implement.* Like the process-per-site-instance
- model, this requires logic for swapping processes during navigation
- and proxying some JavaScript interactions.
-
-### Process-per-tab
-
-The process-per-site-instance and process-per-site models both consider the
-origin of the content when creating renderer processes. Chromium also supports a
-simpler model which dedicates one renderer process to each group of
-script-connected tabs. This model can be selected using the `--process-per-tab`
-command-line switch.
-
-Specifically, we refer to a set of tabs with script connections to each other as
-a *browsing instance*, which also corresponds to a "unit of related browsing
-contexts" from the HTML5 spec. This set consists of a tab and any other tabs
-that it opens using Javascript code. Such tabs must be rendered in the same
-process to allow Javascript calls to be made between them (most commonly between
-pages from the same origin).
-
-#### Strengths
-
-* *Simple to understand*. Each tab has one renderer process dedicated
- to it that does not change over time.
-
-#### Weaknesses
-
-* *Leads to undesirable fate sharing between pages*. If the user
- navigates a tab in a browsing instance to a different web site, the
- new page will share fate with any other pages in the browsing
- instance.
-
-It is worth noting that Chromium still forces process swaps within a tab in some
-situations in the process-per-tab model, when it is required for security. For
-example, normal web pages are not allowed to share a process with privileged
-pages like Settings and the New Tab Page. As a result, this model is not
-significantly simpler in practice than process-per-site-instance.
-
-### Single process
-
-Finally, for the purposes of comparison, Chromium supports a single process
-model that can be enabled using the `--single-process` command-line switch. In
-this model, both the browser and rendering engine are run within a single OS
-process.
-The single process model provides a baseline for measuring any overhead that the
-multi-process architectures impose. It is not a safe or robust architecture, as
-any renderer crash will cause the loss of the entire browser process. It is
-designed for testing and development purposes, and it may contain bugs that are
-not present in the other architectures.
-
-## Sandboxes and plug-ins
-
-In each of the multi-process architectures, Chromium's renderer processes are
-executed within a sandboxed process that has limited access to the user's
-computer. These processes do not have direct access to the user's filesystem,
-display, or most other resources. Instead, they gain access to permitted
-resources only through the browser process, which can impose security policies
-on this access. As a result, Chromium's browser process can mitigate the damage
-that an exploited rendering engine can do.
-Browser plug-ins, such as Flash and Silverlight, are also executed in their own
-processes, and some plug-ins like Flash even run within Chromium's sandbox. In
-each of the multi-process architectures that Chromium supports, there is one
-process instance for each type of active plug-in. Thus, all Flash instances run
-in the same process, regardless of which sites or tabs they appear in.
-
-## Caveats
-
-This section lists a few caveats with Chromium's current implementation of the
-process models, along with their implications.
-
-* Most renderer-initiated navigations within a tab do not yet lead to
- process swaps. If the user follows a link, submits a form, or is
- redirected by a script, Chromium will not attempt to switch renderer
- processes in the tab if the navigation is cross-site. Chromium only
- swaps renderer processes for browser-initiated cross-site
- navigations, such as typing a URL in the location bar or following a
- bookmark. As a result, pages from different sites may be rendered in
- the same process, even in the process-per-site-instance and
- process-per-site models. This is likely to change in future versions
- of Chromium as part of the [Site
- Isolation](/developers/design-documents/site-isolation) project.
- However, there is a mechanism web pages can use to suggest that a link
- points to an unrelated page and can be safely rendered in a different
- process. If a link has the `rel=noreferrer target=_blank` attributes, then
- Chromium will typically render it in a different process.
-* Subframes are currently rendered in the same process as their parent
- page. Although cross-site subframes do not have script access to
- their parents and could safely be rendered in a separate process,
- Chromium does not yet render them in their own processes. Similar to
- the first caveat, this means that pages from different sites may be
- rendered in the same process. This will likely change in future
- versions of Chromium.
-* There is a limit to the number of renderer processes that Chromium
- will create. This prevents the browser from overwhelming the user's
- computer with too many processes. The limit is proportional to the
- amount of memory on the computer, and may be as high as 80
- processes. Because of the limit, a single renderer process may be
- dedicated to multiple sites. This reuse is currently done at random,
- but future versions of Chromium may apply heuristics to more
- intelligently allocate sites to renderer processes.
-
-## Implementation notes
-
-Two classes in Chromium represent the abstractions needed for the various
-process models: `BrowsingInstance` and `SiteInstance`.
-The `BrowsingInstance` class represents a set of script-connected tabs within
-the browser, also known as a unit of related browsing contexts in the HTML 5
-spec. In the process-per-tab model, we create a renderer process for each
-`BrowsingInstance`.
-The `SiteInstance` class represents a set of connected pages from the same site.
-It is a subdivision of pages within a `BrowsingInstance`, and it is important
-that there is only one `SiteInstance` per site within a `BrowsingInstance`. In
-the process-per-site-instance model, we create a renderer process for each
-`SiteInstance`. To implement process-per-site, we ensure that all
-`SiteInstances` from the same site end up in the same process.
-
-## Academic Papers
-
-[Isolating Web Programs in Modern Browser
-Architectures](http://www.charlesreis.com/research/publications/eurosys-2009.pdf)
-
-Charles Reis, Steven D. Gribble (both authors at UW + Google)
-
-Eurosys 2009. Nuremberg, Germany, April 2009.
-
-Abstract:
-
-*Many of today's web sites contain substantial amounts of client-side code, and
-consequently, they act more like programs than simple documents. This creates
-robustness and performance challenges for web browsers. To give users a robust
-and responsive platform, the browser must identify program boundaries and
-provide isolation between them.*
-
-*We provide three contributions in this paper. First, we present abstractions of
-web programs and program instances, and we show that these abstractions clarify
-how browser components interact and how appropriate program boundaries can be
-identified. Second, we identify backwards compatibility tradeoffs that constrain
-how web content can be divided into programs without disrupting existing web
-sites. Third, we present a multi-process browser architecture that isolates
-these web program instances from each other, improving fault tolerance, resource
-management, and performance. We discuss how this architecture is implemented in
-Google Chrome, and we provide a quantitative performance evaluation examining
-its benefits and costs.*
-
-[Security Architecture of the Chromium
-Browser](http://crypto.stanford.edu/websec/chromium/)
-
-Adam Barth, Collin Jackson, Charles Reis, and The Google Chrome Team
-
-Stanford Technical Report, September 2008.
-
-Abstract:
-
-*Most current web browsers employ a monolithic architecture that combines "the
-user" and "the web" into a single protection domain. An attacker who exploits an
-arbitrary code execution vulnerability in such a browser can steal sensitive
-files or install malware. In this paper, we present the security architecture of
-Chromium, the open-source browser upon which Google Chrome is built. Chromium
-has two modules in separate protection domains: a browser kernel, which
-interacts with the operating system, and a rendering engine, which runs with
-restricted privileges in a sandbox. This architecture helps mitigate
-high-severity attacks without sacrificing compatibility with existing web sites.
-We define a threat model for browser exploits and evaluate how the architecture
-would have mitigated past vulnerabilities.* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/profile-architecture/dot.png.sha1 b/chromium/docs/website/site/developers/design-documents/profile-architecture/dot.png.sha1
deleted file mode 100644
index 40fbe0f321a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/profile-architecture/dot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-882bf42958ee125e9435cd0b12c7407dc3b09194 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/profile-architecture/graph5.png.sha1 b/chromium/docs/website/site/developers/design-documents/profile-architecture/graph5.png.sha1
deleted file mode 100644
index 6f575e1a626..00000000000
--- a/chromium/docs/website/site/developers/design-documents/profile-architecture/graph5.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-83860121eac3f4911f38acb14d819089917d341e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/profile-architecture/index.md b/chromium/docs/website/site/developers/design-documents/profile-architecture/index.md
deleted file mode 100644
index b1709c56ddd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/profile-architecture/index.md
+++ /dev/null
@@ -1,287 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: profile-architecture
-title: Profile Architecture
----
-
-*This page details an ongoing design refactoring, started in **January 2012**.*
-
-Note: As of Jun 2013, this doc needs updating. The classes have been renamed
-(s/ProfileKeyed/BrowserContextKeyed/) and moved into
-components/browser_context_keyed_service.
-
-Chromium has lots of features that hook into a **Profile**, a bundle of data
-about the current user and the current chrome session that can span multiple
-browser windows. When Chromium first started, the profile had only a few moving
-parts: the cookie jar, the history database, the bookmark database, and things
-to do with user preferences. In the three years of the Chromium Project, Profile
-became the join point for every feature, leading to things like
-Profile::GetInstantPromoCounter() or Profile::GetHostContentSettingsMap(). As of
-this writing there are 58 pure virtual methods that start with "Get" in Profile.
-
-Profile should be a minimal reference, a sort of handle object that doesn't own
-the world.
-
-[TOC]
-
-## Design Goals
-
-* **We must be able to move to the new architecture piece-wise.** One
- service and feature at a time. We can not stop the world and convert
- everything in one operation. As of this writing, we've moved 19
- services out of Profile.
- * We should only make small modifications at the callsite where a
- Profile is used to get the service in question.
-* **We must fix Profile shutdown.** When we started and only had a few
- objects hanging off of Profile, manual ordering was acceptable for
- destruction. Now we have over seventy five components and we know
- that our manual destruction ordering is incorrect as written today.
- We can not rely on manual ordering when we have so many components.
-* **We must allow features to be compiled in and out.** Now that we
- have chromium variants that don't contain all the features in a
- standard Windows/Mac/Linux Google Chrome build, we need a way to
- allow these variants to compile without #ifdefing profile.h and
- profile_impl.h into a mess. These variants also have their own
- services that they'd like to provide. (Letting chromium variants add
- their own services also touches on why we can't rely on manual
- ordering in Profile shutdown.)
- * Stretch goal: Separate features go in their own .a/.so files to
- further minimize our ridiculous linking time.
-
-## BrowserContextKeyedServiceFactory
-
-### The Old Way: Profile interface and ProfileImpl
-
-In the previous design, services were fetched through an accessor on Profile:
-
-> class ProfileImpl {
-
-> public:
-
-> virtual FooService\* GetFooService();
-
-> private:
-
-> scoped_ptr&lt;FooService&gt; foo_service_;
-
-> };
-
-In the previous system, Profile was an interface with mostly pure virtual
-accessors. There were separate versions of Profile for Normal, Incognito and
-Testing profiles.
-
-In this world, the Profile was the center of all activity. The profile owned all
-of its service and handed them out. Profile destruction was according to
-whatever order the services were listed in ProfileImpl. There wasn't a way for
-another variant to add its own services (or leave out ones it didn't need)
-without modifying the Profile interface.
-
-### The New Way: BrowserContextKeyedServiceFactory
-
-Instead of having the Profile own FooService, we have a dedicated singleton
-FooServiceFactory, like this minimal one:
-
-> class FooServiceFactory : public BrowserContextKeyedServiceFactory {
-> public:
-> static FooService\* GetForProfile(Profile\* profile);
-> static FooServiceFactory\* GetInstance();
-> private:
-> friend struct DefaultSingletonTraits&lt;FooServiceFactory&gt;;
-> FooServiceFactory();
-> virtual ~FooServiceFactory();
-> // BrowserContextKeyedServiceFactory:
-> virtual BrowserContextKeyedService\* BuildServiceInstanceFor(
-> content::BrowserContext\* context) const OVERRIDE;
-> };
-
-We have a generalized BrowserContextKeyedServiceFactory which performs most of
-the work of associating a profile with an object provided by your
-BuildServiceInstanceFor() method. The BrowserContextKeyedServiceFactory provides
-an interface for you to override while managing the lifetime of your Service
-object in response to Profile lifetime events and making sure your service is
-shut down before services it depends on.
-
-An absolutely minimal factory will supply the following methods:
-
-* A static GetInstance() method that refers to your Factory as a
- Singleton.
-* A constructor that associates this BrowserContextKeyedServiceFactory
- with the ProfileDependencyManager singleton, and makes DependsOn()
- declarations.
-* A GetForProfile() method that wraps
- BrowserContextKeyedServiceFactory, casting the result back to
- whatever type you need to return.
-* A BuildServiceInstanceFor() method which is called once by the
- framework for each |profile|, which must return a proper instance of
- your service.
-
-In addition, BrowserContextKeyedServiceFactory provides these other knobs for
-how you can control behavior:
-
-* RegisterUserPrefs() is called once per Profile during initialization
- and is where you can place any user pref registration.
-* By default, BCKSF return NULL when given an Incognito profile.
- * If you override ServiceRedirectedInIncognito() to return true,
- it will return the associated normal Profile's service.
- * If you override ServiceHasOwnInstanceInIncognito() to return
- true, it will create a new service for the incognito profile.
-* By default, BCKSF will lazily create your service. If you override
- ServiceIsCreatedWithProfile() to return true, your service will be
- created alongside the profile.
-* BCKSF gives you multiple ways to control behavior during unit tests.
- See the header for more details.
-* BCKSF gives you a way to augment and tweak the shutdown and
- deallocation behavior.
-
-### A Few Types of Factories
-
-Not all objects have the same lifecycle and memory management. The previous
-paragraph was a major simplification; there is a base class
-BrowserContextKeyedBaseFactory that defines the most general dependency stuff
-while BrowserContextKeyedServiceFactory is a specialization that deals with
-normal objects. There is a second RefcountedBrowserContextKeyedServiceFactory
-that gives slightly different semantics and storage for RefCountedThreadSafe
-objects.
-
-### A Brief Interlude About Complexity
-
-So the above, from an implementation standpoint is significantly more complex
-than what came before it. Is all this really worth it?
-
-**Yes.**
-
-We absolutely have to address the interdependency of services. As it stands
-today, we do not shut down profiles after they are no longer needed in
-multiprofile mode because our crash rate when shutting down a profile is too
-high to ship to users. We have about 75 components that plug into the profile
-lifecycle and their dependency graph is complex enough that our naive manual
-ordering can not handle the complexity. All of the overrideable behavior above
-exists because it was implemented per service, ad hoc and copy pasted.
-
-We likewise need to make it easy for other chromium variants to add their own
-features/compile features out of their build.
-
-### Dependency Management Overview
-
-With that in mind, let's look at how dependency management works. There is a
-single ProfileDependencyManager singleton, which is what is alerted to Profile
-creation and destruction. A PKSF will register and unregister itself with the
-ProfileDependencyManager. The job of the ProfileDependencyManager is to make
-sure that individual services are created and destroyed in a safe ordering.
-
-Consider the case of these three service factories:
-
-> AlphaServiceFactory::AlphaServiceFactory()
-> : BrowserContextKeyedServiceFactory(ProfileDependencyManager::GetInstance()) {
-> }
-> BetaServiceFactory::BetaServiceFactory()
-> : BrowserContextKeyedServiceFactory(ProfileDependencyManager::GetInstance()) {
-> DependsOn(AlphaServiceFactory::GetInstance());
-
-}
-
-> GammaServiceFactory::GammaServiceFactory()
-> : BrowserContextKeyedServiceFactory(ProfileDependencyManager::GetInstance()) {
-> DependsOn(BetaServiceFactory::GetInstance());
-
-}
-
-The explicitly stated dependencies in this simplified graph mean that the only
-valid creation order for services is \[Alpha, Beta, Gamma\] and the destruction
-order is \[Gamma, Beta, Alpha\]. The above is all you, as a user of the
-framework, have to do to specify dependencies.
-
-Behind the scenes, ProfileDependencyManager takes the stated dependency edges,
-performs a Kahn topological sort, and uses that in CreateProfileServices() and
-DestroyProfileServices().
-
-## The Five Minute Tutorial of How to Convert Your Code
-
-1. **Make Your Existing FooService derive from
- BrowserContextKeyedService.**
-2. **If possible, make your FooService no longer refcounted. Most of
- the refcounted objects that hang off of Profile appear to be that
- way because they aren't using
- [base::bind/WeakPtrFactory](http://www.chromium.org/developers/design-documents/threading#Runnable_methods)
- instead of needing to own data on multiple threads. (In case you
- have a real reason for being a RefCountedThreadSafe, such as being
- accessed on multiple threads, derive your factory from**
- RefcountedBrowserContextKeyedServiceFactory **and everything should
- just work.)**
-3. Build a simple FooServiceFactory derived from
- BrowserContextKeyedServiceFactory. Your FooServiceFactory will be
- the main access point consumers will ask for FooService.
- BrowserContextKeyedServiceFactory gives you a bunch of virtual
- methods that control behavior.
- 1. BrowserContextKeyedService\*
- BrowserContextKeyedServiceFactory::BuildServiceInstanceFor(content::BrowserContext\*
- context) is the only required method. Given a BrowserContext
- handle, return a valid FooService.
- 2. You can control the incognito behavior with
- ServiceRedirectedInIncognito() and
- ServiceHasOwnInstanceInIncognito().
-4. Add your service to the
- EnsureBrowserContextKeyedServiceFactoriesBuilt() list in
- chrome_browser_main_extra_parts_profiles.cc**.**
-5. Understand shutdown behavior. For historical reasons, we have a two
- phase deletion process:
- 1. Every BrowserContextKeyedService will first have its Shutdown()
- method called. Use this method to drop weak references to the
- Profile or other service objects.
- 2. Every BrowserContextKeyedService is deleted and its destructor
- is run. Minimal work should be done here. Attempts to call any
- \*ServiceFactory::GetForProfile() will cause an assertion in
- debug mode.
-6. Change each instance of "profile_-&gt;GetFooService()" to
- "FooServiceFactory::GetForProfile(profile_)".
-
-If you need an example of what the above looks like, try looking at these
-patches:
-
-* [r100516](http://src.chromium.org/viewvc/chrome?view=rev&revision=100516):
- A simple example, adding a new ProfileKeyedService. This shows off a
- minimal ServiceFactory subclass.
-* [r104806](http://src.chromium.org/viewvc/chrome?view=rev&revision=104806):
- plugin_prefs_factory.h gives an example of how to deal with things
- that are (and have to stay) refcounted. This patch also shows off
- how to move your preferences into your ProfileKeyedServiceFactory.
-
-## Debugging Tips
-
-### Using the dependency visualizer
-
-Chrome has a built in method to dump the profile dependency graph to a file in
-[GraphViz](http://www.graphviz.org/) format. When you run chrome with the
-command line flag --dump-browser-context-graph, chrome will write the dependency
-information to your /path/to/profile/browser-context-dependencies.dot file. You
-can then convert this text file with dot, which is part of GraphViz:
-
-> dot -Tpng /path/to/profile/browser-context-dependencies.dot &gt; png-file.png
-
-This will give you a visual graph like this (generated January 23rd, 2012, click
-through for full size):
-
-[<img alt="Graph as of Aug 15, 2012"
-src="/developers/design-documents/profile-architecture/graph5.png" height=40
-width=400>](/developers/design-documents/profile-architecture/graph5.png)
-
-### Crashes at Shutdown
-
-If you get a stack that looks like this:
-
-> ProfileDependencyManager::AssertProfileWasntDestroyed()
-
-> ProfileKeyedServiceFactory::GetServiceForProfile()
-> MyServiceFactory::GetForProfile()
-> ... \[Probably a bunch of frames\] ...
-> OtherService::~OtherService()
-> ProfileKeyedServiceFactory::ProfileDestroyed()
-> ProfileDependencyManager::DestroyProfileServices()
-> ProfileImpl::~ProfileImpl()
-
-The problem is that OtherService is improperly depending on MyService. The
-framework asserts if you try to use a Shutdown()ed component. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/profile-chooser-menu/Avatar Menu Classes.png.sha1 b/chromium/docs/website/site/developers/design-documents/profile-chooser-menu/Avatar Menu Classes.png.sha1
deleted file mode 100644
index 424cdaa7dd0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/profile-chooser-menu/Avatar Menu Classes.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5323d6278fd927835cd05443bf6907267bba315e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/profile-chooser-menu/index.md b/chromium/docs/website/site/developers/design-documents/profile-chooser-menu/index.md
deleted file mode 100644
index 02fb63c8ceb..00000000000
--- a/chromium/docs/website/site/developers/design-documents/profile-chooser-menu/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: profile-chooser-menu
-title: Profile Chooser Menu
----
-
-The profile chooser menu, also known as the avatar menu, is represented by
-different, platform-dependent views and models. The AvatarMenu class is used to
-retrieve items for the menu and responds to actions like switching, adding and
-editing profiles.
-
-[<img alt="image"
-src="/developers/design-documents/profile-chooser-menu/Avatar%20Menu%20Classes.png">](/developers/design-documents/profile-chooser-menu/Avatar%20Menu%20Classes.png)
-
-## **AvatarMenu**
-
-AvatarMenu defines the Item struct and provides methods for retrieving these
-items and interacting with an item's associated profile. Most of its functions
-delegate tasks to either the ProfileList object or the AvatarMenuActions object,
-both of which are created in AvatarMenu::AvatarMenu(). The various Views use
-AvatarMenu to determine whether the menu should be shown, to access the menu
-items, and to respond to clicks on menu items or links.
-
-**ProfileList**
-
-AvatarMenu delegates generation of the profile list to the ProfileList
-interface, which currently has two implementations. On desktop Chrome,
-ProfileListDesktop simply exposes all of the profiles in LocalState for
-inclusion in the menu. ProfileListChromeOS restricts the listed profiles to
-those that are associated with logged-in users, hiding the Default profile and
-profiles for users who are not logged into the session (including managed
-users); additionally, the menu items' icon fields are populated with user images
-instead of profile avatar icons. Both implementations rely on the
-ProfileInfoInterface (ProfileInfoCache), and ProfileListChromeOS also uses
-UserManager.
-
-**AvatarMenuActions**
-
-The AvatarMenuActions interface controls behavior such as adding and editing
-profiles, as well as determining whether these links should be shown. As of this
-writing, AvatarMenuActionsDesktop allows for adding and editing profiles through
-the Settings sub-page, as well as signing out of a profile, while
-AvatarMenuActionsChromeOS disallows editing (i.e., returns false from
-ShouldShowEditProfileLink) and only lets the Add Profile link be shown if the
-right conditions are met with respect to the user's type and other users on the
-machine. Currently, AvatarMenuActions implementations use the Browser object; in
-the future, this dependency should be removed by delegating actions like
-AddNewProfile and EditProfile. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rappor/index.md b/chromium/docs/website/site/developers/design-documents/rappor/index.md
deleted file mode 100644
index 4fa94d5eb42..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rappor/index.md
+++ /dev/null
@@ -1,282 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: rappor
-title: Rappor (Randomized Aggregatable Privacy Preserving Ordinal Responses)
----
-
-RAPPOR reports consist of randomly generated data that is biased based on data
-collected from the user. Data from many users can be aggregated to learn
-information about the population, but little or nothing can be concluded about
-individual users from their reports.
-
-Descriptions of individual metrics should be found in
-[tools/metrics/rappor/rappor.xml](https://chromium.googlesource.com/chromium/src/+/HEAD/tools/metrics/rappor/rappor.xml)
-
-For full technical details of the algorithm, see [the RAPPOR
-paper](http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/42852.pdf).
-
-## Algorithm
-
-The first time the RapporService is started, a client will generate and save a
-random 128-byte secret key, which won't change and is never transmitted to the
-server. It will also assign itself to a random cohort.
-
-For each metric we collect, we store a [Bloom
-filter](http://en.wikipedia.org/wiki/Bloom_filter), represented as an array of m
-bits. Each cohort uses a different set of hash functions for the bloom filter.
-When the RapporService is passed a sample for recording, it sets bits in the
-Bloom filter for that metric. For example, with the "Settings.HomePage2" metric,
-which is collected only for users who opt-in to UMA, our Bloom filter will be an
-array of 128 bits, and one or two of those bits will be set based on the eTLD+1
-of the user's homepage.
-
-Once we have collected samples, and are ready to generate a report, we take the
-array of bits we've gathered for the metric and introduce two levels of noise by
-taking the following steps.
-
-1. Add deterministic noise.
- 1. Create a deterministic psuedo-random function by passing the
- client's secret key, the metric name, and the bloom filter value
- into an HMAC_DRBG function.
- 2. For each bit use this deterministic function to flip two
- weighted coins.
- 1. If the first is heads, replace the bit with the result of
- the second coin.
- 2. Otherwise, leave the bit as is.
-2. Add fresh random noise.
- 1. Using fresh randomness, flip two more coins, with different
- weights.
- 1. If the bit is true, report the result of the first coin
- flip.
- 2. Otherwise, report the result of the second.
-
-The cohort that the client that belongs to and the results from the above
-process are sent to the server.
-
-The large amount of randomness means that we can't draw meaningful conclusions
-from a small number of reports. Even if we aggregate many reports from the same
-user, they include the same pseudo-random noise in all of their reports of the
-same value, so we are effectively limited to one report for each distinct value.
-
-Indeed, even with infinite amounts of data on a RAPPOR statistic, there are
-strict bounds on how much information can be learned, as outlined in more detail
-at <http://arxiv.org/abs/1407.6981>. In particular, the data collected from any
-given user or client contains such significant uncertainty, and guarantees such
-strong deniability, as to prevent observers from drawing conclusions with any
-certainty.
-
-**Adding metrics**
-
-To add a new rappor metric, you need to add a bit of code to collect your
-sample, and add your metric to
-[tools/metrics/rappor/rappor.xml](https://chromium.googlesource.com/chromium/src/+/HEAD/tools/metrics/rappor/rappor.xml).
-Samples should be recorded on the UI thread of the browser process. For most use
-cases, you will want to use one of the helper methods in
-[components/rappor/rappor_utils.h](https://chromium.googlesource.com/chromium/src/+/HEAD/components/rappor/rappor_utils.h)
-(formerly
-[chrome/browser/metrics/rappor/sampling.h](https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/metrics/rappor/sampling.h))
-e.g.
-
-```none
-#include "components/rappor/rappor_utils.h"
-```
-
-```none
-```
-
-```none
-rappor::SampleDomainAndRegistryFromGURL(g_browser_process->rappor_service(),
-```
-
-```none
-                                        "Settings.HomePage2", GURL(homepage_url));
-```
-
-If you need to do something more specific you may need to call
-RapporService::RecordSample directly, e.g.
-
-```none
-#include "components/rappor/rappor_service.h"
-```
-
-```none
-<table>
-```
-```none&#10;<tr>&#10;```
-```none&#10;<td>g_browser_process->rappor_service()->RecordSample( </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> "MyCustomMetric", </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> rappor::ETLD_PLUS_ONE_RAPPOR_TYPE, </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> my_custom_metric_sample);</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>);</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;</table>&#10;```
-
-If you collect multiple samples for the same metric in one reporting interval
-(currently 30 minutes), a single sample will be randomly selected for generating
-the randomized report.
-
-Remember to add documentation for your metric to
-[tools/metrics/rappor/rappor.xml](https://chromium.googlesource.com/chromium/src/+/HEAD/tools/metrics/rappor/rappor.xml)
-
-```none
-<table>
-```
-```none&#10;<tr>&#10;```
-```none&#10;<td><rappor-metric name="Settings.HomePage2" type="ETLD_PLUS_ONE"> <owner>holte@chromium.org</owner> <summary> The eTLD+1 of the prefs::kHomePage setting. Recorded when a profile is loaded if the URL is valid and prefs::kHomePageIsNewTabPage is false. </summary> </rappor-metric></td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;</table>&#10;```
-
-## Code overview
-
-[CL/49753002](https://codereview.chromium.org/49753002) introduces a
-`RapporService` object which is instantiated by the browser process object. The
-service allows collection of RAPPOR metrics and periodically uploads reports to
-our servers.
-
-### Sample Collection
-
-In order to collect samples, we call `RapporService::RecordSample` to record
-samples of it. The first call to `RecordSample` after the browser starts or a
-report is generated will instantiate a new `RapporMetric` object to hold the
-data for that metric. If subsequent calls to `RecordSample` are made for the
-same metric during the same reporting interval, one sample is randomly selected
-for generating the report. Calls to `RecordSample` should take place on the
-browser UI thread.
-
-Currently, samples may only be collected in the browser process, but
-`RapporMetric`s could be serialized to IPC calls to enable collection from other
-processes.
-
-#### Report generation and uploading
-
-The other function of `RapporService` is generating and uploading reports of the
-collected data. First `RapporService::RegisterPrefs()` should be called to
-register `prefs::kRapporSecret` and `prefs::kRapporCohort`, and then
-`RapporService::Start()` may be called to begin generating reports.
-
-The `RapporService` generates a report shortly after it is started at fixed time
-intervals afterwards. If any new `RapporMetrics`s have been created, randomized
-data is generated for them by calling `RapporMetric::GetReport()` and recorded
-into a `RapporReports` proto, and the `RapporMetric` is deleted.
-
-```none
-<table>
-```
-```none&#10;<tr>&#10;```
-```none&#10;<td>message RapporReports {</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // Which cohort these reports belong to. The RAPPOR participants are </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // partioned into cohorts in different ways, to allow better statistics and </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // increased coverage. In particular, the cohort will serve to choose the </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // hash functions used for Bloom-filter-based reports. </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> optional int32 cohort = 2; </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> message Report { </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // The name of the metric, hashed. </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> optional fixed64 name_hash = 1; </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // The sequence of bits produced by random coin flips in </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // RapporMetric::GetReport(). For a complete description of RAPPOR </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // metrics, refer to the design document at: </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> // http://www.chromium.org/developers/design-documents/rappor </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> optional bytes bits = 2; </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> } </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td> repeated Report report = 3; </td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;<tr>&#10;```
-```none&#10;<td>}</td>&#10;```
-```none&#10;</tr>&#10;```
-```none&#10;</table>&#10;```
-
-The proto is passed to the `LogUploader`. It stores all of the logs it is passed
-in a queue, and sends them to the server. When uploads fail, it retries with
-exponential backoff. For now, if chrome exits before the logs are uploaded, they
-are lost. We may implement caching unsent logs in prefs similar to UMA in the
-future. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-hw-rendering.png.sha1 b/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-hw-rendering.png.sha1
deleted file mode 100644
index ba12b762910..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-hw-rendering.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5bd549417eaa3a02072d09be2ccb89591f473913 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-sw-rendering.png.sha1 b/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-sw-rendering.png.sha1
deleted file mode 100644
index 17645d56c37..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-composited-sw-rendering.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-02f835ca9eb9c4237b3a2c62552729c4ff75afc6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-non-composited-sw-rendering.png.sha1 b/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-non-composited-sw-rendering.png.sha1
deleted file mode 100644
index 929fe6e87e9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-non-composited-sw-rendering.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b959e2135624af7174e5469e3a97b1d2be1afc5e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-request-anim-frame.png.sha1 b/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-request-anim-frame.png.sha1
deleted file mode 100644
index 386e661f618..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/chromium-request-anim-frame.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7d909339cfb390802533f4a11572c8e30c6cc3e7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/index.md b/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/index.md
deleted file mode 100644
index ea769590987..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rendering-architecture-diagrams/index.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: rendering-architecture-diagrams
-title: Rendering Architecture Diagrams
----
-
-The following sequence diagrams illustrate various aspects of Chromium's
-rendering architecture. The first picture below shows how Javascript and CSS
-animations are scheduled using the requestAnimationFrame callback mechanism.
-
-[<img alt="image"
-src="/developers/design-documents/rendering-architecture-diagrams/chromium-request-anim-frame.png"
-height=300
-width=400>](/developers/design-documents/rendering-architecture-diagrams/chromium-request-anim-frame.png)
-
-After the Javascript callback is executed or the CSS animations have been
-updated, the web contents view generally needs to be redrawn. The following
-(simplified) diagrams show the code execution flow during a repaint in the
-non-composited software rendering, composited software rendering and (threaded)
-composited GPU rendering modes. Note that the newer [multithreaded ("impl-side")
-rasterization mode](/developers/design-documents/impl-side-painting) is not
-shown below.
-
-<table>
-<tr>
-<td>Non-composited SW rendering</td>
-<td> Composited SW rendering</td>
-<td> Composited GPU rendering</td>
-</tr>
-<tr>
-
-<td><a
-href="/developers/design-documents/rendering-architecture-diagrams/chromium-non-composited-sw-rendering.png"><img
-alt="image"
-src="/developers/design-documents/rendering-architecture-diagrams/chromium-non-composited-sw-rendering.png"
-height=165 width=200></a></td>
-
-<td><a
-href="/developers/design-documents/rendering-architecture-diagrams/chromium-composited-sw-rendering.png"><img
-alt="image"
-src="/developers/design-documents/rendering-architecture-diagrams/chromium-composited-sw-rendering.png"
-height=400 width=243></a></td>
-
-<td><a
-href="/developers/design-documents/rendering-architecture-diagrams/chromium-composited-hw-rendering.png"><img
-alt="image"
-src="/developers/design-documents/rendering-architecture-diagrams/chromium-composited-hw-rendering.png"
-height=400 width=245></a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rendering-benchmarks/index.md b/chromium/docs/website/site/developers/design-documents/rendering-benchmarks/index.md
deleted file mode 100644
index 86942db93e2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rendering-benchmarks/index.md
+++ /dev/null
@@ -1,217 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: rendering-benchmarks
-title: Rendering Benchmarks (aka Smoothness benchmarks)
----
-
-**## **Deprecated: see** <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed/benchmark/harnesses/rendering.md>**
-
-## **Contact: nduca, ernstm****
-
-### Chrome now has an awesome rendering benchmark system for GPU and rendering related benchmarks. It works on all chrome flavors, even android and CrOS, even in their content_shell forms.
-
-### We use the following terminology:
-
-* ### action: an interaction with a web page that we want to measure.
- e.g. scrolling, or simply waiting for a few seconds
-* ### page set: a collection of web pages and associated actions
-* ### metric: computes high-level statistical measures (e.g. means and
- medians) from raw data (e.g. traces).
-* ### measurement: loads the pages from a page set, executes the
- associated actions, collects raw data, and computes final results
- using a metric.
-* ### benchmark: bundles together a measurement and a page_set
-
-### To run the rendering benchmarks you need:
-
-* ### A chrome checkout ([get the
- code](/developers/how-tos/get-the-code))
-* ### A chrome build. Just canary or a stable will work. Or download a
- continuous build from
- <http://commondatastorage.googleapis.com/chromium-browser-continuous/index.html>
-* ### python.
-
-### Once you've got these things, you're ready to go. To run our top 25 page set
-through our smoothness measurement (which tests scrolling speed for sites that
-scroll, or interaction speed for sites that have interactions):
-
-> ./run_benchmark --browser=canary smoothness.top_25
-
-### To measure impl-side painting on important mobile sites:
-
-> tools/perf/run_benchmark --browser=canary smoothness.key_mobile_sites
-
-To measure the key mobile sites on an attached android device:
-
-> tools/perf/run_benchmark --browser=android-chrome smoothness.top_25
-
-### To run the smoothness measurement on a Chrome OS device with IP address $CHROMEBOOK_IP from a host machine with a chromium checkout, do this:
-
-> `tools/perf/run_benchmark --browser=cros-chromeos --remote=$CHROMEBOOK_IP
-> smoothness.top_25`
-
-Lets break down this command a bit:
-
-* **`tools/perf`** is where we keep our rendering benchmarks. It
- contains benchmarks, which are written in Python.
-* **`run_benchmark`** is the script we use to run a specific
- benchmark. Benchmarks are a combination of a "measurement" (e.g.
- numbers to compute) and a list of pages to compute those numbers
- for.
-* **`--browser=canary`** tells the script to use Chrome Canary, if it
- is installed on the system. If you don't have canary \[e.g. you're
- on Linux\] it'll fail and tell you to give it another browser.
- * `--browser=list` - for all browsers that the script thinks it
- can use. Pass --browser=list -vvv if you're not seeing a browser
- you expect to see.
- * `--browser=system` - the stable chrome install on your system
- * `--browser=debug` or `release` - chromium from out/Debug or
- out/Release, if it was found
- * `--browser=content-shell-debug` - a content shell build found in
- out/Debug
- * `--browser=android-chrome` - chrome detected on an attached
- android device via adb
- * `--browser=cros-chrome --remote=$CHROMEBOOK_IP` - chrome running
- on your chromebook
- * `--browser=exact --browser-executable=<path to build>` - your
- tests will work with any chrome build &gt;= M18!
-* **`smoothness.top_25`** is one of our canned benchmarks to run. If
- you type `./run_benchmark`, you'll see a list of other benchmarks
- that we support. There are a lot, and you can add more. :)
-* **`tools/perf/page_sets/top_25.py`** is a list of 25 pages that get
- a tremendous amount of volume on desktop, and hence are important
- for us to not regress. This pageset is used by a variety of
- benchmarks, from smoothness to thread times. There are other sets of
- pages too, for example `key_desktop_sites, key_mobile_sites,` and
- `tough_scrolling_cases`. Some have hundreds or thousands of sites.
- Some have only a few.
-* If you want to have a benchmark that computes smoothness, but for a
- different pageset, then just copy an existing benchmark's .py file
- and make a new one from it that points at your favorite pageset.
-
-When you run a benchmark, you'll get some output that looks like this:
-
-> Pages: \[http___www.youtube.com\]
-
-> \*RESULT frame_times: frame_times=
-> \[16.900000,17.280000,17.340000,16.810000,17.400000,17.500000,17.020000,16.820000,17.070000,17.190000,17.560000,17.670000,17.450000,17.570000,17.270000,17.410000,17.590000,17.530000,17.240000,17.550000,17.190000,17.140000,17.090000,17.500000,17.540000,17.000000,17.300000,17.600000,17.430000,17.070000,17.070000,17.760000,17.090000,16.950000,17.020000,17.040000,16.780000,17.060000,17.700000,17.850000,17.230000,17.090000,17.110000,17.110000,17.610000,17.200000,16.990000,17.180000,17.140000,17.130000,17.430000,17.080000,17.100000,17.100000,17.970000,17.150000,17.600000,17.400000,17.140000,16.920000,17.790000,16.780000,17.440000,16.860000,17.720000,17.700000,17.610000,16.940000,17.200000,16.980000,17.260000,17.310000,17.380000,16.960000,17.000000,17.500000,17.240000,17.170000\]
-> ms Avg frame_times: 17.267564ms Sd frame_times: 0.279332ms \*RESULT jank:
-> jank= 19.4673 \*RESULT mean_frame_time: mean_frame_time= 17.268 ms \*RESULT
-> mostly_smooth: mostly_smooth= 1.0 RESULT telemetry_page_measurement_results:
-> num_failed= 0 count RESULT telemetry_page_measurement_results: num_errored= 0
-> count
-
-These are some key statistics for that page as it scrolled, in the default mode
-for that platform. But, lets say you wanted to run chrome with some extra
-commandline arguments. For this, `--extra-browser-args` is your friend:
-
-> `tools/perf/run_benchmark --browser=canary smoothness.top_25
-> tools/perf/page_sets/top_25.json
-> --extra-browser-args="--force-llamas-to-have-parachutes
-> --use-rainbows-instad-of-omnibox"`
-
-Fun! Remember, unless you pass `--disable-gpu-vsync`, scrolling goes only as
-fast as your screen. So, for screen with 60 Hz refresh, 16.6 is usually a good
-thing.
-
-### Smoothness Metrics
-
-These are the most important smoothness metrics:
-
-* **mean_frame_time**: arithmetic mean of frame times
-* **jank**: absolute discrepancy of frame time stamps, where
- discrepancy is a measure of irregularity. It quantifies the worst
- jank. For a single pause, discrepancy corresponds to the length of
- this pause in milliseconds. Consecutive pauses increase the
- discrepancy. The metric is important because even if the mean and
- 95th percentile are good, one long pause in the middle of an
- interaction is still bad.
-* **mostly_smooth**: were 95 percent of the frames hitting 60 fps;
- boolean value (1/0).
-* **frame_times**: list of raw frame times, helpful to understand the
- above 3 metrics
-* **mean_pixels_approximated**: percentage of pixels that was
- approximated (checkerboarding, low-resolution tiles, etc.).
-* **mean_input_event_latency**: time between receiving a touchmove
- event and performing the frame swap for the corresponding scroll
- event.
-
-### Rasterize_And_Record Metrics
-
-### Throughout the metrics, you will see the words *paint*, *record*, and *raster*. These have very precise meanings:
-
-* **paint:** Time dumping WebKit's rendering structures into the
- compositor's rendering structures in software mode and regular
- compositing modes. This is the time spent to walk the webkit tree
- AND software-rasterize its 2D ops AND any time required to do image
- decodes
-* **record:** (impl-side painting mode only). This is the time to JUST
- walk the WebKit tree and dump it into an SkPicture.
-* **raster:** (impl-side painting mode only). This is the time to
- rasterize SkPictures to tiles. If we had a decode cache miss, will
- include time servicing the image cache miss.
-
-In some sense impl-side painting splits paint into raster + record.
-
-rasterize_and_record measurement calculates the time spent in raster and record.
-It automatically enables impl-side painting and only works on platforms that
-support this feature.
-
-**How it works**
-
-[Telemetry](/developers/telemetry) performance testing framework
-
-Page scrolling is done by telemetry's "scroll" action,
-`tools/telemetry/telemetry/internal/actions/scroll.py`. On chrome, it boots the
-browser with `--enable-gpu-benchmarking-extension`, which exposes a
-`beginSmoothScrollBy(numPixels, function() { callback })` API to javascript that
-simulates scrolling as would be done by the user. We then use it to move a page
-down.
-
-Other synthetic gestures, such as pinch-to-zoom or swipe, are available. See the
-[Synthetic Gestures in
-Chrome](https://docs.google.com/a/chromium.org/document/d/1VZ0FhQVc5e2HA9_mJ3HRQlXylCMgNiEJx9kVXe7yTfE/edit?usp=sharing)
-document for a full list of gestures and how they're implemented in Chrome.
-
-The smoothness measurement `tools/perf/measurements/smoothness.py` captures a
-trace from this interaction, and extracts the time stamps of frames that were
-generated. Specifically, the
-`BenchmarkInstrumentation::ImplThreadRenderingStats` and
-`BenchmarkInstrumentation::MainThreadRenderingStats` events are analyzed. These
-events are issued from `cc/debug/benchmark_instrumentation.cc` based on data
-collected through `cc/debug/rendering_stats_instrumentation.h`. The smoothness
-metric `tools/perf/metrics/smoothness.py` is then used to calculate the metrics
-described above (mean_fram_time, jank, etc.).
-
-Telemetry provides a way to separate out the measurement process from the
-interaction process from the actual pages being tested. We then maintain a
-number of important lists of web pages (page sets), some synthetic some real, in
-`tools/perf/page_sets`, grouped by their kind of importance. `top_25`,
-`key_desktop_sites` and `key_mobile_sites` are likely of particular interest to
-users.
-
-Telemetry provides a mechanism to very reliably record a web page and then
-replay it many times in that exact recorded state. We (Chrome team) cannot make
-our recordings public since the assets the recording are the property of the
-site owners. However, we have exposed a utility that anyone can use to make
-their own recordings:
-
-> tools/perf/record_wpr --browser=system tools/perf/page_sets/top_25.json
-
-This will place a file called `top_25.wpr` in `tools/perf/page_sets/data` that
-is an archive of the data required to replay those pages back over-and-over
-again without deviation.
-
-## Adding credentials to test live sites that require a logged in user
-
-As part of GPU testing, we often want to measure the performance of a site like
-Gmail, or Facebook, that sit behind a login. We do not give out logins for
-these, but if you have your own, you can put a `credentials.json` in
-`tools/perf/page_sets/data` or `~/.telemetry-credentials` in the style of
-`tools/telemetry/examples/credentials_example.json` with the right logins and
-telemetry will automatically then login to gmail or facebook for you. Patches
-are welcome to add support for other sites as well. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/rendertext/index.md b/chromium/docs/website/site/developers/design-documents/rendertext/index.md
deleted file mode 100644
index 7ff9e882bde..00000000000
--- a/chromium/docs/website/site/developers/design-documents/rendertext/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: rendertext
-title: RenderText and Chrome UI text drawing
----
-
-**Most text in Chrome’s UI is rendered either through gfx::Canvas text drawing facilities or by using gfx::RenderText directly. Indeed, gfx::Canvas itself uses gfx::RenderText for drawing and measuring text, so that nearly all UI text drawn in Chrome Windows and ChromeOS ends up going through gfx::RenderText.**
-**gfx::RenderText has platform-specific subclasses for shaping text runs using platform APIs: Uniscribe on Windows, Pango on Linux + ChromeOS and CoreText on the Mac. Although the shaping/layout code is platform-specific, drawing the text uses a common path, using Skia. The gfx::RenderText subclasses also share common implementations of the various effects that can be applied to the text such as fading and shadows, as well as the more rudimentary settings such as text alignment.**
-**In addition to text layout, each gfx::RenderText subclass also performs any necessary selection of fallback fonts needed to render particular runs of text. While this is mostly delegated to Pango on Linux and CoreText on the Mac, the Windows implementation has to do this work itself through the font linking information from the registry.**
-**gfx::RenderText is a stateful API - an instance of a gfx::RenderText subclass will cache its layout information between draw calls. Because of this, it is often more efficient to use the gfx::RenderText API directly instead of using a state-less abstraction such as the gfx::Canvas drawing calls. In particular, for text that changes rarely but that may be drawn multiple times, it is more efficient to keep an instance of gfx::RenderText around, so that the text layout would be performed only when the text is updated and not on every draw operation. Prior to the introduction of gfx::RenderText, this pattern was not possible, so you may see existing code still doing its text drawing through gfx::Canvas text drawing APIs (which in the past were not based on gfx::RenderText).**
-**gfx::RenderText is also used to render footers and headers in printed page.
-This works because Skia has a PDF backend so that the glyph drawing calls done
-by gfx::RenderText are appropriately transformed to PDF output. This is
-currently the case on Mac OS X and Windows, but not yet Linux or ChromeOS
-because of sandboxing issues.** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details.svg.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details.svg.sha1
deleted file mode 100644
index 157a61bf98d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-03e558ac48ff3006c19935ac08d2540997f109b6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details1.svg.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details1.svg.sha1
deleted file mode 100644
index 157a61bf98d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details1.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-03e558ac48ff3006c19935ac08d2540997f109b6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details2.svg.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details2.svg.sha1
deleted file mode 100644
index 36409ddd47a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details2.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4a9aa3d10b492a92478ffbc45bdc76981098b238 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details3.svg.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details3.svg.sha1
deleted file mode 100644
index 316a9d2bc31..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details3.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d3af7ac6dd434ab71af4209cc92a8e536b32c47e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details4.svg.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details4.svg.sha1
deleted file mode 100644
index 44e625a543f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.details4.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a25e066a2adaa8633bf6d7e398ccbd40ef0268c6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.svg.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.svg.sha1
deleted file mode 100644
index 86bc0f1308f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/browse.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-38d28e09ea20ae2e8b0dfcb54c1c24f165980ba0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png.sha1
deleted file mode 100644
index 7dbc826da05..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-abfd6274b5d03afa1ab7dc4d66f2d61c2dec2c43 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/csdservice.svg.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/csdservice.svg.sha1
deleted file mode 100644
index f0f07308dce..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/csdservice.svg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cd61543acea7b7259e73dbc37dd1475c75a0a3db \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection.png.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection.png.sha1
deleted file mode 100644
index b0aab0b8c25..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bcec531ce20cc6ece6409c0d84a9db2a8e474a1b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection_without_legend.png.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection_without_legend.png.sha1
deleted file mode 100644
index c9ea9d2d83c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/download_protection_without_legend.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f62d4721170735cfb81d9bd1d29b022ee3df8ad3 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/index.md b/chromium/docs/website/site/developers/design-documents/safebrowsing/index.md
deleted file mode 100644
index d2d87ada318..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/index.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: safebrowsing
-title: Safe Browsing
----
-
-[TOC]
-
-## Browsing Protection
-
-When Safe Browsing is enabled, all URLs will be checked before the content is
-allowed to begin loading. URLs are checked against two lists: malware and
-phishing. Depending on which list is matched we show a different warning message
-on the interstitial page.
-
-Checking the safe browsing database is a multistep process. The URL is hashed
-and a synchronous check against the in-memory prefix list is done. If no match
-is found, the URL is considered safe immediately. If the prefix matches, an
-asynchronous request is made to the safe browsing servers for a list of all full
-hashes matching that prefix. Once the list is returned, the full hash is
-compared against the list and the URL request can be continued or cancelled. For
-more information, you may check the full description of the [Safe Browsing v3
-Protocol](https://developers.google.com/safe-browsing/v3). There is work
-underway to switch to the [v4
-protocol](https://developers.google.com/safe-browsing/v4/).
-
-### Resource Handlers
-
-Whenever a resource is requested, the ResourceDispatcherHost will create a chain
-of ResourceHandlers. For each event in the loading of the resource, each handler
-can choose to cancel the request, defer the request (to do some asynchronous
-work before deciding what to do), or continue (letting the next handler in the
-chain have a chance to decide). The SafeBrowsingResourceHandler is created at
-the head of the chain so that it has first say over whether to allow loading a
-resource. If safe browsing is disabled, the SafeBrowsingResourceHandler is
-simply not added to the chain, and thus no browsing-related safe browsing
-actions occur.
-
-### Safe Browsing Interstitial Page
-
-When a resource is marked as unsafe the resource request is paused and an
-interstitial page (SafeBrowsingBlockingPage) is displayed. The user can choose
-to continue anyway, which will resume the resource request, or to go back, which
-will cancel the resource request and return to the previous page.
-
-**Threat Details Collection**
-If the interstitial is for a hit in the threat list (including malware,
-phishing, and UwS), ~~the page is http (not https),~~ and the tab is not in an
-incognito window, there is an opt-in option to send extra details about the the
-unsafe resources for further analysis.
-When the interstitial appears an IPC is sent to the renderer process to collect
-details from the DOM. The data consists of a tree of the URLs for the various
-frames, iframes, scripts and embeds.
-If the checkbox is checked when the user chooses dismisses the interstitial
-page, various extra details will be collected asynchronously on the browser
-side. First the History service is queried to get the list of redirects involved
-in all the URLs, then the Cache is queried to get the headers for each of the
-requests for those URLs, and finally the report will be sent.
-
-## Download Protection
-
-### URL Checking
-
-The download checks operate in a similar manner to the browsing ones, though
-with some changes due to the different nature of downloads. It is not known that
-a resource request will be a download until the headers are received, therefore
-all downloads also go through the browsing checks. For the same reason, we
-cannot check the redirect URLs as we go along like is done in the browsing
-tests. Instead the chain of redirects is saved in the URLRequest object and once
-we begin the download checks, all the URLs in the chain will be checked
-simultaneously. Since downloads are less latency sensitive than page loads, we
-also dispense with the in-memory database and the caching of full hash results.
-Finally, the check is done in parallel to the download rather than pausing the
-download request until the checks are done, however the file will be given a
-temporary name until the checks complete.
-
-If a download is flagged as malicious, the item in the download bar will be
-replaced with a warning and buttons to keep or discard the file. If discard is
-chosen, the request will be cancelled and the file deleted. If the file is kept,
-it will be renamed to its actual name (with .crdownload if the download is still
-in progress).
-
-### Hash Checking
-
-As the file downloads, we also compute a hash of the file data. Once the file
-has completed downloading this hash is checked against the download digest list.
-Currently we are evaluating the usefulness of the hash check so no UI is
-displayed.
-
-This is an overview of the code flow of handling a download. Some details are
-omitted to keep the size reasonable. This is an overview of the code flow of
-handling a request. Some details are omitted to keep the size reasonable. The
-green line indicates the common case where loading a non-malware page only
-requires a synchronous check to the in-memory safe browsing database. The dashed
-lines indicate asynchronous calls. The dotted magenta lines indicates a request
-to Google's Safe Browsing server.
-
-[<img alt="Safe Browsing Diagram Legend"
-src="/developers/design-documents/safebrowsing/legend.png">](/developers/design-documents/safebrowsing/legend.png)
-
-[<img alt="Download Protection Diagram"
-src="/developers/design-documents/safebrowsing/download_protection_without_legend.png">](/developers/design-documents/safebrowsing/download_protection_without_legend.png)
-
-## Client Side Phishing Detection
-
-Client Side Phishing Detection runs a detection model on pages the user visits
-to try to detect phishing pages that are not in the safe browsing lists. On
-startup, and periodically afterwards, the ClientSideDetectionService will fetch
-an updated model. The model is sent in an IPC to every Render Process, then
-assigned to PhishingClassifierDelegate associated with each RenderView. This
-allows the classification to be done in the render process, which has access to
-the page text.
-
-[<img alt="image"
-src="/developers/design-documents/safebrowsing/csdservice.svg">](/developers/design-documents/safebrowsing/csdservice.svg)
-
-## Resource Request Flow
-
-This is an overview of the code flow of handling a request. Some details are
-omitted to keep the size reasonable. The green line indicates the common case
-where loading a non-malware page only requires a synchronous check to the
-in-memory safe browsing database. The dashed lines indicate asynchronous calls.
-The dotted magenta lines indicates a request to Google's Safe Browsing server.
-
-[<img alt="Safe Browsing Resource Request Diagram"
-src="/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png">](/developers/design-documents/safebrowsing/chrome_safe_browsing_wo_legend_wo_download.png)
-
-## Metrics
-
-Most safe browsing histograms use the "SB2." prefix, but newer ones now use
-"SafeBrowsing." prefix. Histograms for older versions used "SB.". There are also
-a few safe browsing UserMetrics (filter on "SB"), and safe browsing Rappor
-metrics (starts with "interstitial"). Metrics about what happens on
-interstitials are under "interstitial.{malware,harmful,phishing}.\*", and
-metrics about download classification are under "SBClientDownload.\*".
-
-## Safe Browsing Database
-
-The SafeBrowsingService is responsible for updating the various databases used
-by safe browsing. In 2016 there is work ongoing to replace all of the database
-code for the new Safe Browsing Pver4 update protocol.
-
-TODO(vakh): provide more details about database format and update process. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safebrowsing/legend.png.sha1 b/chromium/docs/website/site/developers/design-documents/safebrowsing/legend.png.sha1
deleted file mode 100644
index 36552a083b4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safebrowsing/legend.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f3d699ba96bf3183aaf3b1eba8895409f478277f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/safesearch/index.md b/chromium/docs/website/site/developers/design-documents/safesearch/index.md
deleted file mode 100644
index c9aaf389474..00000000000
--- a/chromium/docs/website/site/developers/design-documents/safesearch/index.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: safesearch
-title: SafeSearch
----
-
-## Design
-
-We wanted to introduce the option to enforce SafeSearch being active on all
-Google Search queries done in Chrome.
-
-In order to do that we introduced both a preference(currently
-prefs::kForceSafeSearch) and a policy in Chrome which when set active will make
-sure that the parameters safe=active and ssui=on are present.
-
-The implementation of this feature is done in
-chrome/browser/net/chrome_network_delegate.cc, where we see if it is a Google
-search URL (if the feature is active of course). Since an extension could come
-and modify the URL after us we let the extensions (if any) do their work first.
-If the extension modifies the URL the network stack will detect that and it will
-generate a OnBeforeRedirect which is followed by OnBeforeURLRequest.
-
-In OnBeforeURLRequest we have two scenarios:
-
-* either the extensions(if any) return immediately and we enforce the
- SafeSearch parameters there.
-* or the extensions(if any) use the callback to announce completion.
- For this case we use a wrapper that enforces the SafeSearch
- parameters and then calls the regular callback.
-
-While enforcing the SafeSearch parameters we split the query part of the URL
-(everything between ? and #) into parameters. Then we remove any safe= and ssui=
-parameters and add the correct values at the end. As stated
-[here](/developers/chromium-string-usage) the query part is in ASCII..
-
-## Other search engines
-
-At the current time this change only affects Google Web Search queries which
-come form any source (omnibox, google.tld websites). This is the result of a
-lack of standardization when it comes to setting SafeSearch. Maybe in the future
-we will pursue implementing this option for multiple search engines or thorugh
-OpenSearch.
-
-## Tests
-
-This feature is tested using unit tests in
-chrome/browser/net/chrome_network_delegate_unittest.cc. To run the test simply
-compile the unit_tests executable and run:
-
-out/Debug/unit_tests "--gtest_filter=ChromeNetworkDelegateSafesearchTest.\*"
-
-The policy part of it is tested using browser tests in
-chrome/browser/policy/policy_browsertest.cc. To run it:
-
-out/Debug/browser_tests --gtest_filter=PolicyTest.ForceSafeSearch
-
-Note: This feature is still in review and has not landed yet in Chrome.
-Initially it will also not be visible to the users. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sandbox/Sandbox-FAQ/index.md b/chromium/docs/website/site/developers/design-documents/sandbox/Sandbox-FAQ/index.md
deleted file mode 100644
index 42695a8cb08..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sandbox/Sandbox-FAQ/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/sandbox
- - Sandbox
-page_name: Sandbox-FAQ
-title: Sandbox FAQ
----
-
-#### [This page has moved to the source code docs.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox_faq.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sandbox/index.md b/chromium/docs/website/site/developers/design-documents/sandbox/index.md
deleted file mode 100644
index 7efaa34c3d5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sandbox/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: sandbox
-title: Sandbox
----
-
-[This page has moved to the source code
-docs.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sandbox/osx-sandboxing-design/index.md b/chromium/docs/website/site/developers/design-documents/sandbox/osx-sandboxing-design/index.md
deleted file mode 100644
index 3a85dcd141d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sandbox/osx-sandboxing-design/index.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/sandbox
- - Sandbox
-page_name: osx-sandboxing-design
-title: OSX Sandboxing Design
----
-
-This document describes the process sandboxing mechanism used on Mac OS X.
-
-## Background
-
-Sandboxing treats a process as a hostile environment which at any time can be
-compromised by a malicious attacker via buffer overruns or other such attack
-vectors. Once compromised, the goal is to allow the process in question access
-to as few resources of the user's machine as possible, above and beyond the
-standard file-system access control and user/group process controls enforced by
-the kernel.
-
-See the [overview document](/developers/design-documents/sandbox) for goals and
-general architectural diagrams.
-
-## Implementation
-
-On Mac OS X versions starting from Leopard, individual processes can have their
-privileges restricted using the sandbox(7) facility of BSD, also referred to in
-some Apple documentation as "Seatbelt". This is made up of a single API call,
-sandbox_init(), which sets the access restrictions of a process from that point
-on. This means that previously opened file descriptors continue working even if
-the new privileges would deny access to newly created descriptors. We can use
-this to our advantage by setting up everything correctly at the start of the
-process then cutting off all access before we expose the renderer to any 3rd
-party input (html, etc).
-
-Seatbelt does not place restrictions on memory allocation, threading, or access
-to previously opened OS facilities. As a result, this shouldn't impose any
-additional requirements or drastically alter our IPC designs.
-
-OS X provides additional protection against buffer overflows. In Leopard, the
-stack is marked as non-executable memory and thus less susceptible as an attack
-vector for executing malicious code. This doesn't prevent against buffer
-overruns in the heap, but for 64-bit apps, Leopard disallows any attempts to
-execute code unless that portion of memory is explicitly marked as executable.
-As we move towards 64-bit render processes in the future, this will be another
-attractive security feature.
-
-sandbox_init() has supports for both predefined sandbox access restrictions and
-sandbox profile scripts which provide finer grained control.
-
-Chromium uses custom sandbox profiles defined in .sb files in the source tree.
-
-The following profiles are defined (paths relative to root of source directory):
-
-* content/common/common.sb - used for common setup for all sandboxes.
-* content/renderer/renderer.sb - used for the extension & renderer
- processes. Enables access to the font server.
-* chrome/browser/utility.sb - used by the utility process. Allows
- access to a single configurable directory.
-* content/browser/worker.sb - used by the worker process. Most
- restrictive - no file system access apart from loading system
- libraries.
-* chrome/browser/nacl_loader.sb - used for running Native Client
- untrusted (i.e., "user") code.
-
-One sticky point we run into is that the sandboxed process calls through to OS X
-system APIs. There is no documentation available about which privileges each API
-needs, such as whether they need access to on-disk files, or call other APIs to
-which the sandbox restricts access. Our approach to date has been to "warm up"
-any problematic API calls before turning the sandbox on. This means that we call
-through to the API, to allow it to cache whatever resource it needs. For
-example, color profiles and shared libraries can be loaded from disk before we
-"lock down" the process.
-
-SandboxInitWrapper::InitializeSandbox() is the main entry point for initializing
-the Sandbox, it performs the following steps:
-
-* Determines if the current process type needs to be sandboxed and if
- so, which sandbox configuration to use.
-* "Warm up" relevant system APIs by calling through to
- sandbox::SandboxWarmup() .
-* Enable the Sandbox by calling through to sandbox::EnableSandbox() .
-
-### Diagnostics
-
-The OS X sandbox implementation supports the following flags:
-
-* --no-sandbox - Disable the sandbox entirely.
-* --enable-sandbox-logging - Verbose information about which system
- calls are blocked is logged to syslog.
-
-[Debugging Chrome on OS X](/developers/how-tos/debugging-on-os-x) contains more
-documentation on debugging and diagnostic tools provided by the Mac OS X sandbox
-API.
-
-## Additional Reading
-
-* <http://reverse.put.as/wp-content/uploads/2011/09/Apple-Sandbox-Guide-v1.0.pdf>
-* <http://www.318.com/techjournal/?p=107>
-* sandbox man page (man 7 sandbox)
-* System sandbox files can be found under one of the following paths
- (depending on the OS Version):
- * /Library/Sandbox/Profiles
- * /System/Library/Sandbox/Profiles
- * /usr/share/sandbox \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sandbox/sbox_top_diagram.PNG.sha1 b/chromium/docs/website/site/developers/design-documents/sandbox/sbox_top_diagram.PNG.sha1
deleted file mode 100644
index 021d8061c09..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sandbox/sbox_top_diagram.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-35b7d49e37d4e43e2868ab85c6c4ddd5f5490fb2 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sane-time/index.md b/chromium/docs/website/site/developers/design-documents/sane-time/index.md
deleted file mode 100644
index 59aaad6d6dd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sane-time/index.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: sane-time
-title: Sane time
----
-
-"...because any sane person knows what day it is!" -- Raz
-
-## Background
-
-There are cases in Chrome where it is important to have an accurate time source.
-Although most modern operating systems now automatically synchronize computer
-clocks to some external time source, some computers may still have a skewed
-clock for various reasons: time syncing may not be configured correctly, the
-user may have manually set the clock erroneously, malware commonly changes the
-system time, etc. Thus, it is desirable for Chrome itself to keep track of time
-from an external source and its offset from the time on the local computer.
-
-The use of time in TLS (for certificate verification) has two consequences.
-First, we cannot depend upon a client’s ability to make a TLS connection to
-establish the time! And second, it’s important that the source of time be
-secure, because TLS security depends upon it. An attacker who can control the
-time on the user’s computer can, for example, cause Chrome to accept an expired
-certificate as valid.
-
-[Time Sources](/developers/design-documents/time-sources) discusses a similar
-problem for Chrome OS devices.
-
-## Design
-
-We desire that the time be known to within a few minutes. Assuming that the time
-on any Google server is accurate, and that we can communicate to Google machines
-securely, we call any time that we receive from a Google server over a secure
-channel "sane time" (because it's just accurate enough to be considered sane).
-
-In the case where the client’s clock is badly wrong, we won’t be able to
-establish a TLS connection. Hence, we will use a purpose-built time server.
-
-#### What about NTP?
-
-NTP is a protocol built expressly for time synchronization. But relying on it in
-Chrome has some disadvantages:
-
- It requires maintaining NTP client code in Chrome, which is a higher burden
- than the solution outlined here, both in code size and developer time.
-
- Chrome may be unable to send UDP, as suggested by metrics from QUIC. Making
- time available to the widest range of clients suggests we should prefer
- HTTP.
-
- There are [attacks on NTP](http://www.cs.bu.edu/~goldbe/NTPattack.html).
-
-Another possibility is to rely on the local time if it's already running an NTP
-client. This is also problematic, as it involves writing code to detect running
-NTP clients and verifying that it's sanely configured.
-
-#### Representation and accuracy
-
-In Chrome, there are two clocks: a wall clock (base::Time) and a non-decreasing
-clock (base::TimeTicks). The wall clock is what changes when the local time is
-changed, so we cannot reliably use it to compare against the server time unless
-we can detect when it changes (currently not possible). Furthermore, we have no
-way of detecting when it changes when Chrome isn't running!
-
-The non-decreasing clock, which is usually a tick count since the computer has
-started, is unaffected when the local time is changed. However, it becomes
-meaningless across restarts of Chrome (since the computer may be rebooted
-between restarts). Furthermore, it may stop when the computer is put to sleep,
-so even though it is intended for measure durations, it gives inaccurate results
-if the computer was asleep for the measured time interval.
-
-Chrome can detect when the computer goes to sleep and wakes, but only on some
-platforms. So instead, we define an idea of “sanity”, meaning that the wall
-clock and non-decreasing clock have recorded approximately equal times since the
-last network time query. The internal representation of time thus consists of a
-tuple of (network time, wall clock time, tick clock time), which is serialized
-to a pref and restored at startup. Note that a restart that resets the tick
-clock will cause the deserialized representation to be rejected as insane.
-
-Finally, we record an uncertainty (base::TimeDelta) that accounts for both the
-coarseness of the time representation, and the latency in fetching it. But, to
-reiterate, we are aiming only for an approximation: availability is much more
-important than accuracy.
-
-#### Time protocol
-
-Since the [Omaha
-protocol](https://github.com/google/omaha/blob/master/doc/ServerProtocol.md) has
-the needed security properties, and since it works over HTTP, and since it
-already has a server fleet deployed, we’ll use it as the basis for a temporary
-time protocol. Client requests will include a random nonce as a GET parameter,
-which is signed in the server’s response. (This incidentally defeats caching.)
-This is fairly heavyweight, of course, but since we are still experimenting we’d
-rather leverage existing code than design and support a lightweight protocol
-with a long lifetime. The responses look like this:
-
-> **)\]}'**
-
-> **{"protocol_version": 1, "current_time_millis": 1457471762000}**
-
-To avoid excess queries, queries will be sent only when the time is insane or
-unavailable, but no more often than every (say) 60 minutes. We’ll make this
-number configurable, to allow experimentation & to enable us to disable the
-feature if necessary. Another possible refinement is platform-specific
-adjustments, e.g. to save network traffic on Android or to allow more frequent
-updates on Windows, which tends to have less accurate clocks. On startup, if
-sane time is unavailable via deserialization, Chrome will wait for a random
-backoff period before issuing its first time query.
-
-This hopefully avoids most “thundering herd” scenarios, since time queries are
-issued only in response to local events.
-
-For managed devices, we may need to supply a way to disable time queries.
-
-Use of sane time in SSL certificate validation
-
-One day, it would be nice to use secure time for all certificate validation
-decisions, but it will take a while to get there.
-
-As a first step, we’ll use sane time to validate certificate rejections: if the
-rejection was due to the wall clock being wrong, Chrome displays an interstitial
-asking the user to correct it, and records SHOW_BAD_CLOCK to UMA.
-
-Use of sane time in upgrades
-
-Sane time is used in upgrade_detector_impl.cc to detect when Chrome needs to be
-updated.
-
-## Code changes
-
-Addition of the NetworkTimeTracker class was done in bug
-[146090](http://crbug.com/146090). The SSL “bad clock” interstitial was done in
-bug [414843](http://crbug.com/414843). The bug for the changes below is
-[589700](http://crbug.com/589700).
-
-Time is kept by the
-[NetworkTimeTracker](https://code.google.com/p/chromium/codesearch#chromium/src/components/network_time/network_time_tracker.h)
-class. The following changes will be needed to bring its implementation into
-line with this design:
-
- Change the source of time updates. Once we’ve stood up the new time servers,
- we’ll add code to periodically query them. The most natural way to do this
- is to change NetworkTimeTracker to manage time updates on its own, rather
- than than relying on external callers (currently just variations_service.cc)
- to provide time. UpdateNetworkTime should become a private method.
-
- For managed devices, implement a policy to disable time queries.
-
- Add the notion of “sanity” to NetworkTimeTracker. This means recording the
- value of the tick clock, as well as the value of the wall clock, so that
- they can be compared. Most likely we’ll change received_network_time to
- simply return false when the clock is insane.
-
- The amount of skew allowed between the wall clock and the tick clock can be
- generous (hours?), but we’ll still want to establish by some experimental
- means that most clients can run for a long time without becoming insane.
-
-And in addition, to benefit from these changes:
-
-1. Change ssl_error_handler.cc to call
- NetworkTimeTracker::GetNetworkTime to decide whether to display the
- “please fix your clock” interstitial. If it is simple to extract the
- validity period of the rejected certificate, we’ll ensure that sane
- time falls within its validity period before showing the
- interstitial. If that’s not easy to do, we’ll have to define a rule
- of thumb, like “only display the interstitial if the wall clock is
- more than 24 hours different from sane time.” \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/secure-web-proxy/index.md b/chromium/docs/website/site/developers/design-documents/secure-web-proxy/index.md
deleted file mode 100644
index 889900f6c60..00000000000
--- a/chromium/docs/website/site/developers/design-documents/secure-web-proxy/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: secure-web-proxy
-title: Secure Web Proxy
----
-
-## Introduction
-
-A secure web proxy is a web proxy that the browser communicates with via SSL, as
-opposed to clear text. In insecure public networks, such as airports or cafes,
-browsing over HTTP may leave the user vulnerable to cookie stealing, session
-hijacking or worse. A secure web proxy can add a significant layer of defense in
-these cases.
-
-## **Using a Secure Web Proxy with Chrome**
-
-To make use of a secure web proxy, Chrome needs to be configured to use a [proxy
-auto-config](http://en.wikipedia.org/wiki/Proxy_auto-config) file which specify
-the `HTTPS` proxy type. For example:
-
-```none
- function FindProxyForURL(url, host) { return "HTTPS secure-proxy.example.com:443"; }
-```
-
-This pac file can be specified by starting Chrome with the `--proxy-pac-url=...`
-command line argument, or through the settings dialog. Please be aware that
-other browser do not support the `HTTPS` proxy type in a .pac file, so modifying
-the system-wide proxy configuration to use such a .pac file might be
-inadvisable.
-
-Alternatively, a secure web proxy can be specified by using the
-`--proxy-server=https://<proxy>:<port>` command line argument. For example:
-
-```none
- chrome --proxy-server=https://secure-proxy.example.com:443
-```
-
-Since the communication between Chrome and the proxy uses SSL, next protocol
-negotiation will be used. If the servers supports HTTP/2, then the proxy will
-act as an HTTP/2 Proxy.
-
-## **Running a Secure Web Proxy**
-
-**While all the details of running a secure web proxy are out of scope for this
-document, here are two suggestions. If you are already running a web proxy, you
-use [stunnel](http://www.stunnel.org/) to convert it into a secure web proxy.
-For example:**
-
-**```none
-stunnel -f -d 443 -r localhost:8080 -p cert.pem 
-```**
-
-**This would cause stunnel to listen for SSL connections on port 443 and send
-any HTTP requests to the web proxy running on port 8080.**
-
-**Alternatively, the popular proxy program Squid appears to offer support for
-running as a secure web proxy via the [https_port
-directive](http://www.squid-cache.org/Doc/config/https_port/).**
-
-## **Debugging Certificate Errors**
-
-Debugging certificate errors for a secure web proxy [may be
-difficult](https://bugs.chromium.org/p/chromium/issues/detail?id=1130233)
-because the certificate information is not readily visible. Certificate
-information is captured in NetLogs (capture with chrome://net-export, view with
-<https://netlog-viewer.appspot.com/>). Alternatively, without the proxy
-configured, navigate directly to the proxy's endpoint (e.g.
-<https://123.123.123.123:1234/>) in a new tab and you'll get the typical
-certificate error experience shown for server certificate errors. After that
-page works without error, reconfigure the secure web proxy. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/service-processes/index.md b/chromium/docs/website/site/developers/design-documents/service-processes/index.md
deleted file mode 100644
index f732a62fc64..00000000000
--- a/chromium/docs/website/site/developers/design-documents/service-processes/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: service-processes
-title: Service Processes
----
-
-Overview
-
-> Service processes (processes with --type=service) are child processes that are
-> intended to possibly outlive the browser process that spawned them. They are
-> currently used by the [cloud print
-> feature](/developers/design-documents/google-cloud-print-proxy-design).
-> Service processes can be set to start at login. They communicate with a
-> browser via standard chromium IPC channels, but the way these channels is set
-> up varies by platform.
-
-## Start At Login
-
-> ### Windows
-
-> > Service processes are launched at login by adding them to the current users
-> > auto run key path in the registry.
-
-> ### Linux
-
-> > Service processes are launched at login by adding an entry to the autostart
-> > file in $XDG_CONFIG_HOME.
-
-> ### MacOS X
-
-> > Service processes are launched at login by adding a property list (.plist)
-> > to ~/Library/LaunchAgents. This means that service processes on MacOS X are
-> > controlled by
-> > [launchd](http://www.afp548.com/article.php?story=20050620071558293). This
-> > has some interesting ramifications that are discussed below.
-
-## Process Lifetime
-
-> Service processes continue to run as long as the service that they are
-> providing is enabled and/or there is a browser process attached to them.
-> Service processes are identified on the system by a unique identifier based on
-> a service name, the user-data directory and the version of the service process
-> supplying the service. If the user enables something that requires a service
-> process (eg CloudPrint) the browser will launch the service process
-> immediately, and set it up so that the service process will be started at
-> login. On Windows and Linux, the service process is simply launched, while on
-> Mac OS X the service process is started as a launchd job. Browser processes
-> can force a service process to quit. On Windows and Linux this is performed by
-> sending the equivalent of a SIGTERM to the service process. On MacOS X this is
-> performed by telling launchd to remove the service process which in turn
-> causes launchd to send the service process a SIGTERM. The relevant code is in
-> ForceServiceProcessShutdown(...).
-
-> **MacOS X note:** Since service processes are launched by launchd on MacOS X
-> they will automatically be relaunched if they ever crash. The proper way to
-> stop the service processes manually on MacOS X is to manipulate them using
-> [launchctl](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/launchctl.1.html).
-> Sending a SIGTERM directly to the child process without using launchctl will
-> result in a job still being registered with launchd. Launching a service
-> process manually on MacOS X is difficult as it requires a properly configured
-> property list containing several entries.
-
-## IPC
-
-> ### Windows
-
-> > IPC is performed using a named pipe. The pipe name is based on the path to
-> > the user-data directory and the version of the browser/service creating the
-> > pipe.
-
-> ### Linux
-
-> > IPC is performed using unix domain sockets. The name of the socket is based
-> > on the path to the user-data directory and the version of the
-> > browser/service creating the sockets.
-
-> ### MacOS X
-
-> > IPC is performed using unix domain sockets. The name of the socket is
-> > assigned to the browser by looking up an environment variable that is set by
-> > launchd. On the service process side, the IPC channel is created using the
-> > file descriptor that is passed to the service process when it checks in with
-> > launchd. More information on this can be found on the [launchd man
-> > page](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html).
-> > The name of the environment variable is based on the path to the user-data
-> > directory and the version of the browser/service creating the sockets. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/site-engagement/index.md b/chromium/docs/website/site/developers/design-documents/site-engagement/index.md
deleted file mode 100644
index d110f51e5d8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/site-engagement/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: site-engagement
-title: Site Engagement
----
-
-The Site Engagement Service provides information about how engaged a user is
-with a site. The primary signal is the amount of active time the user spends on
-the site but various other signals may be incorporated (e.g whether a site is
-added to the homescreen).
-
-What is a site?
-
-Site is an inexact term. For the purposes of site engagement, we’ll be treating
-origins as sites.
-
-What is engagement?
-
-Engagement is an even more nebulous term. We want to track that the user is
-giving some amount of active attention to the site. To approximate this, we
-register a user as active when the user scrolls, clicks or types on the page.
-Media playback also provides a small engagement increase.
-
-Engagement Score
-
-The engagement score has the following properties:
-
- The score is a double from 0-100. The highest number in the range represents
- a site the user engages with heavily, and the lowest number represents zero
- engagement.
-
- Scores are keyed by origin.
-
- Activity on a site increases its score, up to some maximum amount per day.
-
- After a period of inactivity the score will start to decay.
-
- The engagement score is not intended to be a dumping ground for ‘signals we
- want to include’. If other signals that are not directly user-attention
- based are required, they should be tracked separately.
-
-The current activity based signals are:
-
- Direct navigations to a site (e.g omnibox, bookmark and not link clicks,
- popups)
-
- Active time on the site (where active time is represented by e.g. scrolling,
- clicking, keypresses)
-
- Media playback on a site
-
-The current grant based signals are:
-
- Adding the site to the homescreen / desktop
-
-The user engagement score are not synced, so decisions made on a given device
-are made based on the users’ activity on that device alone.
-
-Usage of the engagement score
-
-Site Engagement clients should consider how their use case relates to
-engagement. We expect that many clients should only be using engagement as one
-facet of a more tailored heuristic. The engagement score has been designed with
-these use cases in mind:
-
- Sorting or prioritizing sites in order of engagement (e.g tab discarding,
- most used list on NTP)
-
- Setting engagement cutoff points for features (e.g app banner, video
- autoplay, window.alert())
-
- Allocating resources based on the proportion of overall engagement a site
- has (e.g storage, background sync)
-
-Privacy Considerations
-
-When in incognito mode, site engagement will be copied from the original profile
-and then allowed to decay and grow independently. There will be no information
-flow from the incognito profile back to the original profile. Incognito
-information is deleted when the browser is shut down.
-
-Engagement scores are cleared with browsing history. Origins are deleted when
-the history service deletes URLs and subsequently reports zero URLs belonging to
-that origin are left in history.
-
-URLs are cleared when scores decay to zero. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-arch.png.sha1 b/chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-arch.png.sha1
deleted file mode 100644
index 9a8e7150271..00000000000
--- a/chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-arch.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b3b74579f1b633a3a819b8da12173fe00eba9850 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-siteinstances.png.sha1 b/chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-siteinstances.png.sha1
deleted file mode 100644
index 4b32b216ad3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/site-isolation/ChromeSiteIsolationProject-siteinstances.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-040a8fbbfe8c19da71664fa70591a261d7f9bc22 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/site-isolation/OWNERS b/chromium/docs/website/site/developers/design-documents/site-isolation/OWNERS
deleted file mode 100644
index bccc55526a4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/site-isolation/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-alexmos@chromium.org
-creis@chromium.org
-nasko@chromium.org
diff --git a/chromium/docs/website/site/developers/design-documents/site-isolation/index.md b/chromium/docs/website/site/developers/design-documents/site-isolation/index.md
deleted file mode 100644
index 4e7f4bc2f46..00000000000
--- a/chromium/docs/website/site/developers/design-documents/site-isolation/index.md
+++ /dev/null
@@ -1,350 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: site-isolation
-title: Site Isolation Design Document
----
-
-*This design document covers technical information about how Site Isolation is
-built. For a general overview of Site Isolation, see
-<https://www.chromium.org/Home/chromium-security/site-isolation>.*
-
-## Motivation
-
-Chrome's [multi-process
-architecture](/developers/design-documents/multi-process-architecture) provides
-many benefits for speed, stability, and security. It allows web pages in
-unrelated tabs to run in parallel, and it allows users to continue using the
-browser and other tabs when a renderer process crashes. Because the renderer
-processes don't require direct access to disk, network, or devices, Chrome can
-also run them inside a restricted
-[sandbox](/developers/design-documents/sandbox). This [limits the
-damage](http://crypto.stanford.edu/websec/chromium/) that attackers can cause if
-they exploit a vulnerability in the renderer, including making it difficult for
-attackers to access the user's filesystem or devices, as well as privileged
-pages (e.g., settings or extensions) and pages in other profiles (e.g.,
-Incognito mode).
-
-[<img alt="image"
-src="/developers/design-documents/site-isolation/ChromeSiteIsolationProject-arch.png"
-height=137
-width=320>](/developers/design-documents/site-isolation/ChromeSiteIsolationProject-arch.png)
-
-However, for a long time there was a large opportunity to use Chrome's sandbox
-for greater security benefits: isolating web sites from each other. Until
-version 67, Chrome made an effort to place pages from different web sites in
-different renderer processes when possible, but due to compatibility
-constraints, there were many cases in which pages from different sites share a
-process (e.g., cross-site iframes). In these cases, we used to rely on the
-renderer process to enforce the Same Origin Policy and keep web sites isolated
-from each other.
-
-This page describes our "site isolation" efforts to improve Chrome to use
-sandboxed renderer processes as a security boundary between web sites, even in
-the presence of vulnerabilities in the renderer process. Our goal is to ensure a
-renderer process can be limited to contain pages from at most one web site. The
-browser process can then restrict that process's access to cookies and other
-resources, based on which web sites require dedicated processes.
-
-**Status:** Site Isolation has been enabled by default on desktop platforms (for
-all sites) in Chrome 67, and on Android (for sites users log into) in Chrome 77.
-This helps defend against speculative side channel attacks (e.g., Spectre), and
-(on desktop) against UXSS and fully compromised renderer processes.
-
-[TOC]
-
-## **Threat Model**
-
-For a "one-site-per-process" security policy, we assume that an attacker can
-convince the user to visit a page that exploits a vulnerability in the renderer
-process, allowing the attacker to run arbitrary code within the sandbox. We also
-assume that an attacker may use [speculative side channel
-attacks](https://security.googleblog.com/2018/01/todays-cpu-vulnerability-what-you-need.html)
-(e.g., Spectre) to read data within a renderer process. We focus on attackers
-that want to steal information or abuse privileges granted to other web sites.
-
-Here, we use a precise definition for a **site** that we use as a principal: a
-page's site includes the scheme and registered domain name, including the public
-suffix, but ignoring subdomains, port, or path. We use sites instead of origins
-to avoid breaking compatibility with existing web pages that might modify their
-document.domain to communicate across subdomains.
-
-We consider the following threats in scope for the proposed policy (once fully
-implemented):
-
-* **Stealing cross-site cookies and HTML5 stored data.** We can
- prevent a renderer process from receiving cookies or stored data
- from sites other than its own.
-* **Stealing cross-site HTML, XML, and JSON data.** Using MIME type
- and content sniffing, we can prevent a renderer process from loading
- most sensitive cross-site data. We cannot block all cross-site
- resources, however, because images, scripts, and other opaque files
- are permitted across sites.
-* **Stealing saved passwords.** We can prevent a renderer process from
- receiving saved passwords from sites other than its own.
-* **Abusing permissions granted to another site.** We can prevent a
- renderer process from using permissions such as geolocation that the
- user has granted to other sites.
-* **Compromising X-Frame-Options.** We can prevent a renderer process
- from loading cross-site pages in iframes. This allows the browser
- process to decide if a given site can be loaded in an iframe or not
- based on X-Frame-Options or CSP frame-ancestors headers.
-* **Accessing cross-site DOM elements via UXSS bugs.** An attacker
- exploiting a universal cross-site scripting bug in the renderer
- process will not be able to access DOM elements of cross-site pages,
- which will not live in the same renderer process.
-
-We do not expect this policy to mitigate traditional cross-site attacks or
-attacks that occur within the page of a victim site, such as XSS, CSRF, XSSI, or
-clickjacking.
-
-## Requirements
-
-To support a site-per-process policy in a multi-process web browser, we need to
-identify the smallest unit that cannot be split into multiple processes. This is
-not actually a single page, but rather a group of documents from the same web
-site that have references to each other. Such documents have full script access
-to each other's content, and they must run on a single thread, not concurrently.
-This group may span multiple frames or tabs, and they may come from multiple
-sub-domains of the same site.
-
-[<img alt="image"
-src="/developers/design-documents/site-isolation/ChromeSiteIsolationProject-siteinstances.png"
-height=150
-width=400>](/developers/design-documents/site-isolation/ChromeSiteIsolationProject-siteinstances.png)
-
-The HTML spec refers to this group as a "[unit of related similar-origin
-browsing
-contexts](http://dev.w3.org/html5/spec/single-page.html#unit-of-related-similar-origin-browsing-contexts)."
-In Chrome, we refer to this as a **SiteInstance**. All of the documents within a
-SiteInstance may be able to script each other, and we must thus render them in
-the same process.
-
-Note that a single tab might be navigated from one web site to another, and thus
-it may show different SiteInstances at different times. To support a
-site-per-process policy, a browser must be able to swap between renderer
-processes for these navigations.
-
-There are also certain JavaScript interactions, such as postMessage() or
-close(), that are allowed between windows or frames even when they are showing
-documents from different sites. It is necessary to support these limited
-interactions between renderer processes.
-
-In addition, top-level documents may contain iframes from different web sites.
-These iframes have their own security context and must be rendered in a process
-based on their own site, not the site of their parent frame.
-
-Finally, it is important that sensitive cross-site data is not delivered to the
-renderer process, even if requested from contexts like image or script tags
-which normally work cross-site. This requires identifying which responses to
-allow and which to block.
-
-## Project Progression
-
-As described on our [Process
-Models](/developers/design-documents/process-models) page, there were originally
-several cases in which Chrome (prior to version 67) would place documents from
-different sites in the same renderer process. This kept Chrome compatible with
-existing web pages with cross-site iframes, at least until Site Isolation was
-enabled. Some examples of cross-site pages that shared a process at the time:
-
-* Cross-site iframes were usually hosted in the same process as their
- parent document.
-* Most renderer-initiated navigations (including link clicks, form
- submissions, and script navigations) were kept within the current
- process even if they cross a site boundary. This is because other
- windows in the same process could attempt to use postMessage or
- similar calls to interact with them.
-* If too many renderer processes had been created, Chrome started to
- reuse existing processes rather than creating new ones. This reduces
- memory overhead.
-
-However, at the time, Chrome already had taken many large steps towards site
-isolation. For example, it swapped renderer processes for cross-site navigations
-that were initiated in the browser process (such as omnibox navigations or
-bookmarks). Cross-origin JavaScript interactions were supported across
-processes, such as postMessage() and navigating another window. Chrome
-eventually gained support for out-of-process iframes in some contexts.
-
-That early progress allowed us to use a stricter security policy for certain
-types of pages, such as privileged WebUI pages (like the Settings page). These
-pages are never allowed to share a process with regular web pages, even when
-navigating in a single tab. This is generally acceptable from a compatibility
-perspective because no scripting is expected between normal pages and WebUI
-pages, and because these can never be loaded in subframes of unprivileged pages.
-
-As of Chrome 56, Chrome started using out-of-process iframes to [keep web
-content out of privileged extension
-processes](https://blog.chromium.org/2017/05/improving-extension-security-with-out.html).
-
-As of Chrome 63, Site Isolation could be
-[enabled](https://support.google.com/chrome/answer/7623121?hl=en) as an
-[additional mitigation against universal cross-site scripting (UXSS)
-vulnerabilities and Spectre](/Home/chromium-security/site-isolation). It was
-also available via [enterprise
-policy](https://www.blog.google/topics/connected-workspaces/security-enhancements-and-more-enterprise-chrome-browser-customers/).
-That initial support was still in progress and had [known issues and
-tradeoffs](https://support.google.com/chrome/a/answer/7581529), but helped to
-defend against UXSS vulnerabilities and Spectre by putting pages from different
-sites in different processes to prevent leaks of cross-site data. The feature
-did not yet mitigate attacks with arbitrary remote code execution in the
-renderer process; this will later be possible as additional enforcements in the
-browser process are completed.
-
-In Chrome 67, Site Isolation was enabled for all sites on desktop platforms
-(Windows, Mac, Linux, and ChromeOS), helping to defend against Spectre.
-
-In Chrome 77, Site Isolation was also enabled on Android devices with at least 2
-GB of RAM, but only for sites that users log into (to keep memory overhead
-lower). By this time, Site Isolation on desktop (i.e., with the full
-site-per-process policy) also defended against fully compromised renderer
-processes.
-
-## Project Tasks
-
-To support a site-per-process policy in Chrome, we needed to complete the tasks
-outlined below. These ensure that cross-site navigations and script interactions
-will not break, despite having all pages from different sites in different
-processes. The master tracking bug is <https://crbug.com/467770>.
-
-* **Cross-Process Navigations**
- Any navigation to a different web site requires a process swap in the
- current tab or frame.
- *Status:* Complete. Cross-process navigations are supported in all frames,
- and they are used for many cases: out-of-process iframes, keeping privileged
- WebUI or extension pages isolated from web pages, any cross-site main frame
- navigation, etc.
-* **Cross-Process JavaScript**
- As mentioned above, some window and frame level interactions are allowed
- between pages from different sites. Common examples are postMessage, close,
- focus, blur, and assignments to window.location, notably excluding any
- access to page content. These interactions can generally be made
- asynchronous and can be implemented by passing messages to the appropriate
- renderer process.
- *Status:* Complete. Chrome supports all required interactions, including
- frame placeholders, postMessage, close, closed, focus, blur, and assignments
- to window.location between top-level windows in different processes.
-* **Out-of-Process iframes**
- Iframes have separate security contexts from their parent document, so
- cross-site iframes must be rendered in a different process from their
- parent. It is also important that an iframe that is from the same origin as
- a popup window shares a process with the popup window and not its own parent
- page. We render these out-of-process iframes in a separate RenderFrame
- composited into the correct visual location, much like plugins. This is by
- far the largest requirement for supporting site-per-process, as it involves
- a major architecture change to the Chrome and Blink codebases.
- *Status:* Complete. The first uses of [Out-of-Process
- iframes](/developers/design-documents/oop-iframes) (OOPIFs) launched in
- Chrome 56, isolating extensions from web content. Widespread use for
- cross-site iframes launched in Chrome 67 on desktop, and in Chrome 77 for
- Android. Tracked at <https://crbug.com/99379>.
-* **Cross-Origin Read Blocking**
- While any given site is allowed to request many types of cross-site
- resources (such as scripts and images), the browser process should prevent
- it from receiving cross-site HTML, XML, and JSON data (based on a
- combination of MIME type and content sniffing).
- *Status:* Complete. Our initial [Cross-Site Document Blocking
- Policy](/developers/design-documents/blocking-cross-site-documents) design
- evolved into [Cross-Origin Read Blocking
- (CORB)](/Home/chromium-security/corb-for-developers), with a [CORB
- Explainer](https://chromium.googlesource.com/chromium/src/+/HEAD/services/network/cross_origin_read_blocking_explainer.md).
- This was implemented for non-compromised renderer processes when Site
- Isolation is enabled as of Chrome 63, and for compromised renderers as of
- Chrome 77. The work was tracked at <https://crbug.com/268640>.
-* **Browser Process Enforcements**
- Some of Chrome's security checks are performed in the renderer process. When
- a process is locked to a given site, the browser process can enforce many of
- these checks itself, limiting what a compromised renderer process can
- achieve in an attack. This includes attempts to access site specific stored
- data and permissions, as well as other attempts to lie to the browser
- process.
- *Status:* Most enforcements are in place, though more are tracked in
- <https://crbug.com/786673>.
-* **Improved Renderer Process Limit Policy**
- We have investigated ways to limit number of extra processes Chrome creates
- in Site Isolation modes. One option is to support modes that only isolate a
- set of origins or sites (i.e., --isolate-origins) rather than all sites
- (i.e., --site-per-process). However, we are currently leaning towards
- isolating all sites given our current findings. Note that a page from one
- site may reuse a process that has already been used for that same site, and
- we aggressively reuse processes in this way for subframes when possible.
- Processes will not be reused for cross-site pages.
- *Status:* On desktop, we isolate all sites, allowing process reuse only for
- pages from the same site. On Android, only a subset of sites end up in
- dedicated processes.
-
-## Performance
-
-Monitoring the performance impact of Site Isolation on Chrome has been a
-critical part of this effort. Site Isolation can affect performance in several
-ways, both positive and negative: some frames may render faster by running in
-parallel with the rest of the page, but creating additional renderer processes
-also increases memory requirements and may introduce latency on cross-process
-navigations. We are taking several steps to minimize the costs incurred, and we
-are using metrics collected from actual browsing data to measure the impact.
-
-As mentioned above under "Renderer Process Limit Policy," we investigated one
-option for reducing the number of processes by isolating only a subset of web
-sites. In such a mode, most web sites would continue to use Chrome's old process
-model, while web sites that users are likely to log into would be isolated.
-However, we are currently aiming to isolate all sites if possible, based on
-current performance measurements, simplicity, and the extra protection it
-offers.
-
-Our evaluation is described in our USENIX Security 2019 paper: [Site Isolation:
-Process Separation for Web Sites within the
-Browser](https://www.usenix.org/conference/usenixsecurity19/presentation/reis).
-
-## How to Enable
-
-See this [Site Isolation Overview page](/Home/chromium-security/site-isolation)
-for more details on how to enable or configure Site Isolation. In most cases, no
-action is necessary.
-
-## **Development Resources**
-
-Updating Chrome Features:
-
-* [Feature Update FAQ for Out-of-Process
- iframes](https://docs.google.com/document/d/1Iqe_CzFVA6hyxe7h2bUKusxsjB6frXfdAYLerM3JjPo/edit?usp=sharing)
-* [Features to Update for Out-of-Process
- iframes](https://docs.google.com/document/d/1dCR2aEoBJj_Yqcs6GuM7lUPr0gag77L5OSgDa8bebsI/edit?usp=sharing)
-
-Build Status:
-
-* Site Isolation FYI bots:
- [Linux](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Linux)
- and
- [Windows](http://build.chromium.org/p/chromium.fyi/builders/Site%20Isolation%20Win)
-* Site Isolation try bot:
- [linux_site_isolation](http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_site_isolation)
-
-## 2015 Site Isolation Summit Talks
-
-Talks and discussion from January 2015.
-
-### Site Isolation Overview
-
-[Slides](https://docs.google.com/presentation/d/10HTTK4dsxO5p6FcpEOq8EkuV4yiBx2n6dBki8cqDWyo/edit?usp=sharing)
-
-#### Site Isolation Overview
-
-### Chromium Changes for OOPIF
-
-[Slides](https://docs.google.com/presentation/d/1e25K7BW3etNDm1-lkMltMcCcRDeVwLibBcbACRhqZ1k/edit?usp=sharing)
-
-#### Chromium Changes for OOPIF
-
-### Blink Changes for OOPIF
-
-[Slides](https://docs.google.com/presentation/d/11nrXiuXBTC72E5l_MUtu2eJN6rcW9PtBewDOPPTk9Bc/edit?usp=sharing)
-
-#### Blink Changes for OOPIF
-
-## Discussions/Questions
-
-The mailing list for technical discussions on Site Isolation is
-[site-isolation-dev@chromium.org](mailto:site-isolation-dev@chromium.org). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/software-updates-courgette/index.md b/chromium/docs/website/site/developers/design-documents/software-updates-courgette/index.md
deleted file mode 100644
index 61297c4a0ce..00000000000
--- a/chromium/docs/website/site/developers/design-documents/software-updates-courgette/index.md
+++ /dev/null
@@ -1,211 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: software-updates-courgette
-title: 'Software Updates: Courgette'
----
-
-[TOC]
-
-#### How Courgette works
-
-As I described in *[Smaller is faster (and safer
-too)](http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html)*,
-we wrote a new differential compression algorithm for making Google Chrome
-updates significantly smaller.
-
-We want smaller updates because it *narrows the window of vulnerability*. If the
-update is a tenth of the size, we can push ten times as many per unit of
-bandwidth. We have enough users that this means more users will be protected
-earlier. A secondary benefit is that a smaller update will work better for users
-who don't have great connectivity.
-
-Rather than push put a whole new 10MB update, we send out a diff that takes the
-previous version of Google Chrome and generates the new version. We tried
-several binary diff algorithms and have been using
-[bsdiff](http://www.daemonology.net/bsdiff/) up until now. We are big fans of
-bsdiff - it is small and worked better than anything else we tried.
-
-But bsdiff was still producing diffs that were bigger than we felt were
-necessary. So we wrote a new diff algorithm that knows more about the kind of
-data we are pushing - large files containing compiled executables. Here are the
-sizes in bytes for the recent 190.1-&gt;190.4 update on the developer channel:
-
-<table>
-<tr>
-<td>Full update</td>
-<td>10,385,920</td>
-</tr>
-<tr>
-<td>bsdiff update</td>
-<td> 704,512</td>
-</tr>
-<tr>
-<td>Courgette update</td>
-<td> 78,848</td>
-</tr>
-</table>
-
-The small size in combination with Google Chrome's silent update means we can
-update as often as necessary to keep users safe.
-
-#### Compiled code
-
-The problem with compiled applications is that even a small source code change
-causes a disproportional number of byte level changes. When you add a few lines
-of code, for example, a range check to prevent a buffer overrun, all the
-subsequent code gets moved to make room for the new instructions. The compiled
-code is full of internal references where some instruction or datum contains the
-address (or offset) of another instruction or datum. It only takes a few source
-changes before almost all of these internal pointers have a different value, and
-there are a lot of them - roughly half a million in a program the size of
-chrome.dll.
-
-The source code does not have this problem because all the entities in the
-source are *symbolic*. Functions don't get committed to a specific address until
-very late in the compilation process, during assembly or linking. If we could
-step backwards a little and make the internal pointers symbolic again, could we
-get smaller updates?
-
-Courgette uses a primitive disassembler to find the internal pointers. The
-disassembler splits the program into three parts: a list of the internal
-pointer's target addresses, all the other bytes, and an 'instruction' sequence
-that determines how the plain bytes and the pointers need to be interleaved and
-adjusted to get back the original input. We call this an 'assembly language'
-because we can run an 'assembler' to process the instructions and emit a
-sequence of bytes to recover the original file.
-
-The non-pointer part is about 80% of the size of the original program, and
-because it does not have any pointers mixed in, it tends to be well behaved,
-having a diff size that is in line with the changes in the source code. Simply
-converting the program into the assembly language form makes the diff produced
-by bsdiff about 30% smaller.
-
-We bring the pointers under control by introducing 'labels' for the addresses.
-The addresses are stored in an array and the list of pointers is replaced by a
-list of array indexes. The array is a primitive 'symbol table', where the names
-of the symbols, or 'labels' are the integer indexes into the array. What we get
-from the symbol table is a degree of freedom in how we express the program. We
-can move the addresses around in the array provided we make the corresponding
-changes to the list of indexes.
-
-How do we use this to generate a better diff? With bsdiff we would compute the
-new file, 'update' from the 'original' like this:
-
-server:
-diff = bsdiff(original, update)
-transmit diff
-
-client:
-
-receive diff
-
-update = bspatch(original, diff)
-
-(The server would pre-compute diff so that it could be transmitted immediately)
-
-Courgette transforms the program into the primitive assembly language and does
-the diffing at the assembly level:
-
-server:
-
-asm_old = disassemble(original)
-
-asm_new = disassemble(update)
-
-asm_new_adjusted = adjust(asm_new, asm_old)
-
-asm_diff = bsdiff(asm_old, asm_new_adjusted)
-
-transmit asm_diff
-
-client:
-
-receive asm_diff
-
-asm_old = disassemble(original)
-
-asm_new_adjusted = bspatch(asm_old, asm_diff)
-
-update = assemble(asm_new_adjusted)
-
-The special sauce is the adjust step. Courgette moves the addresses within the
-asm_new symbol table to minimize the size of asm_diff. Addresses in the two
-symbol tables are matched on their statistical properties which ensures the
-index lists have many long common substrings. The matching does not use any
-heuristics based on the surrounding code or debugging information to align the
-addresses.
-
-#### More than one executable, less than an executable
-
-For the above to work, 'assemble' and 'disassemble' have to be strict inverses,
-and 'original' and 'update' have to be single well-formed executable files. It
-is much more useful if 'original' and 'update' can contain several executables
-as well as a lot of non-compiled files like JavaScript and PNG images. For
-Google Chrome, the 'original' and 'update' are an archive file containing all
-the files needed to install and run the browser.
-
-We can think of a differential update as a prediction followed by a correction,
-a kind of guessing game. In its simplest form (just bsdiff / bspatch), the
-client has only a dumb guess, 'original', so the server sends a binary diff to
-correct 'original' to the desired answer, 'update'. Now what if the server could
-pass a hint that could be used to generate a better guess, but we are not sure
-the guess will be useful? We could insure against losing information by using
-the original and the guess together as the basis for the diff:
-
-server:
-
-hint = make_hint(original, update)
-
-guess = make_guess(original, hint)
-
-diff = bsdiff(concat(original, guess), update)
-
-transmit hint, diff
-
-client
-
-receive hint, diff
-
-guess = make_guess(original, hint)
-
-update = bspatch(concat(original, guess), diff)
-
-This system has some interesting properties. If the guess is the empty string,
-then we have the same diff as with plain bsdiff. If the guess is perfect, the
-diff will be tiny, simply a directive to copy the guess.
-
-Between the extremes, the guess could be a perfect subset of 'update'. Then
-bsdiff will construct a diff that mostly takes material from the perfect
-prediction and the original to construct the update. This is how Courgette deals
-with inputs like tar files containing both executable files and other files. The
-hint is the location of the embedded executables together with the asm_diff for
-each one.
-
-Once we have this prediction / correction scheme in place we can use it to
-reduce the amount of work that the client needs to do. Executables often have
-large regions that do not contain internal pointers, like the resource section
-which usually contains string tables and various visual elements like icons and
-bitmaps. The disassembler generates an assembly language program which pretty
-much says 'here is a big chunk of constant data', where the data is identical to
-the original file. bsdiff then generates a diff for the constant data. We can
-get substantially the same effect by omitting the pointer-free regions from the
-disassembly and letting the final diff do the work.
-
-#### Source Code
-
-Everyone loves source, so you can find it here:
-<https://chromium.googlesource.com/chromium/src/courgette/+/HEAD>
-
-#### Summary
-
-Courgette transforms the input into an alternate form where binary diffing is
-more effective, does the differential compression in the transformed space, and
-inverts the transform to get the patched output in the original format. With
-careful choice of the alternate format we can get substantially smaller updates.
-
-We are writing a more detailed paper on Courgette and will post an update when
-it is ready.
diff --git a/chromium/docs/website/site/developers/design-documents/startup/index.md b/chromium/docs/website/site/developers/design-documents/startup/index.md
deleted file mode 100644
index b9257d19914..00000000000
--- a/chromium/docs/website/site/developers/design-documents/startup/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: startup
-title: Startup
----
-
-[This page has moved to the source code
-docs.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/startup.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase/index.md b/chromium/docs/website/site/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase/index.md
deleted file mode 100644
index 595a84764f0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase/index.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: structure-of-layered-components-within-the-chromium-codebase
-title: Structure of Layered Components and iOS Code Within the Chromium Codebase
----
-
-The purpose of this document is to describe the structure of layered components
-and iOS code within the Chromium source tree. This document assumes the context
-of the[
-accompanying](https://docs.google.com/a/google.com/document/d/1AMPEkXKgVB7vYoSwLrLaZNC3UDJBh0rjkj4W5BA-TUU/edit#heading=h.c66otrtl06ql)
-[high-level design](/developers/design-documents/layered-components-design) and
-[technical
-strategy](/developers/design-documents/layered-components-technical-approach)
-documents.
-
-# Overview
-
-There will be a new top-level directory, ios/. This directory will contain the
-following:
-
- web/: iOS’s src/content/ equivalent
-
- chrome/: iOS’s src/chrome equivalent
-
- provider/: the API via which Chromium code will call downstream iOS code
-
- consumer/: the API via which downstream iOS code will call Chromium code
- ***\[On hold:** Due to the significant flux with componentization and
- upstreaming, it's not yet clear which code will actually need consumer APIs,
- so for now this is not enforced and does not need to be built out
- further.\]*
-
-Each layered component will be divided as follows:
-
- core/: shared code that is src/content/- and src/ios/-free.
-
- content/: Content-based driver for the component.
-
- ios/: Driver for the component based on src/ios/web/ and src/ios/embed/web/.
-
-For components that are multi-process (i.e., currently have browser/, renderer/,
-etc. subdirectories), the process division will move to be under the content/
-driver (since Chrome for iOS is single-process and almost never uses Chromium
-code that is not browser-process code).
-
-# Detailed Example/Discussion of DEPS Rules
-
-## Autofill-Focused Example
-
-The below example indicates a structure for form autofill wherein:
-
- content- or ios-specific code detects that a form is being rendered
-
- core code determines whether there is data with which to fill the form
-
- content- or ios-specific code renders the data
-
-Additionally, we assume that key components of the iOS flow (its
-WebContents-like object and the object that renders autofill data) are
-implemented downstream and exposed to upstream code via the embed layer, which
-will indeed be the case for some amount of time.
-
-Structure under components/autofill/:
-
- core/
-
- AutofillManager interface/impl
-
- AutofillDriver interface
-
- content/
-
- browser/
-
- AutofillDriverImpl
-
- Listens for IPC from the renderer to know when a form is
- rendered and call into AutofillManager
-
- Receives OnFormDataFilled calls from AutofillManager and sends
- IPC, which is caught by the renderer
-
- renderer/
-
- ios/
-
- AutofillDriverIOS
-
- Observes WebState to know when a form is rendered and call into
- AutofillManager
-
- Receives OnFormDataFilled calls from AutofillManager and asks
- AutofillDriverBridge to render the data
-
-Structure under ios/:
-
- web/ (upstream impl code of the web layer)
-
- chrome/ (startup, glue code, etc.)
-
- provider/
-
- web/ (interfaces that downstream code provides to the web layer)
-
- WebState interface (WebContents-like object)
-
- components/
-
- autofill/
-
- AutofillDriverBridge interface
-
- RenderDataForForm()
-
- consumer/
-
- components/
-
- autofill/ (Wrapper API for downstream code to call into autofill)
-
-# DEPS Rules
-
- ios/foo can depend on ios/provider/foo
-
- Purpose of ios/provider/foo is for foo (and higher layers) to use it
-
- ios/provider/foo can depend only on lower-layer consumer/ targets
-
- Might need lower-level consumer API to pass parameters to downstream
- code
-
- ios/consumer/foo will depend on ios/foo (which can’t depend on
- ios/consumer/foo)
-
- components/foo/ios can depend only on ios/web, ios/provider/web, and lower
- layers \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sync/client-tag-based-model-type-processor/index.md b/chromium/docs/website/site/developers/design-documents/sync/client-tag-based-model-type-processor/index.md
deleted file mode 100644
index a8c825e006e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/client-tag-based-model-type-processor/index.md
+++ /dev/null
@@ -1,130 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/sync
- - Sync
-page_name: client-tag-based-model-type-processor
-title: ClientTagBasedModelTypeProcessor
----
-
-The [`ClientTagBasedModelTypeProcessor`][SMTP] is a crucial piece of the USS
-codepath. It lives on the model thread and performs the tracking of sync
-metadata for the [`ModelTypeSyncBridge`][MTSB] that owns it by implementing the
-[`ModelTypeChangeProcessor`][MTCP] interface, as well as sending commit requests
-to the [`ModelTypeWorker`][MTW] on the sync thread via the [`CommitQueue`][CQ]
-interface and receiving updates from the same worker via the
-[`ModelTypeProcessor`][MTP] interface.
-
-This processor supports types that use a client tag, which is currently
-includes all except bookmarks. This means all changes in flight (either incoming
-remote changes provided via the [`ModelTypeWorker`][MTW], or local changes
-reported by the [`ModelTypeSyncBridge`][MTSB]) must specify a client tag, which
-is considered (after being hashed) the main global identifier of a sync entity.
-
-[SMTP]: https://cs.chromium.org/chromium/src/components/sync/model/client_tag_based_model_type_processor.h
-[MTSB]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_sync_bridge.h
-[MTCP]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_change_processor.h
-[MTW]: https://cs.chromium.org/chromium/src/components/sync/engine/model_type_worker.h
-[CQ]: https://cs.chromium.org/chromium/src/components/sync/engine/commit_queue.h
-[MTP]: https://cs.chromium.org/chromium/src/components/sync/engine/model_type_processor.h
-
-[TOC]
-
-## Lifetime
-
-The bridge owns a processor object at all times and operates on the same thread
-as it. If sync is disabled, the processor is destroyed but a new one is
-immediately created to replace it.
-
-## Processor State Machines
-
-The processor sits between the model bridge and the sync engine. It has
-knowledge of what state each is in based on the calls it has received and
-performed. The states are not stored explicitly, but are implicit based on
-state stored in the processor. Here are the states of each, with notes on their
-transitions and how to determine them.
-
-### Model States
-
-* `UNREADY`
- * Waiting for `ModelReadyToStart` to be called.
- * Determined by: `waiting_for_metadata_ && !model_error_`
-* `NEEDS_DATA`
- * Waiting for data for pending commits to be loaded.
- * This state is skipped if there are no pending commits.
- * Determined by: `waiting_for_pending_data_ && !model_error_`
-* `READY`
- * The model is completely ready to sync.
- * Determined by: `!waiting_for_metadata_ && !waiting_for_pending_data &&
- !model_error`
-* `ERROR`
- * Something in the model or storage broke.
- * This state is permanent until DisableSync destroys the object.
- * Determined by: `!!model_error_`
-
-### Sync States
-
-* `DISCONNECTED`
- * Sync for this type has not started.
- * This state can be re-entered from any other state if Disconnect is
- called.
- * Determined by: `!error_handler_`.
-* `STARTED`
- * Sync has started but the model is not yet `READY` (or `ERROR`).
- * This state is skipped if the model is ready before sync is.
- * Determined by: `error_handler_ && start_callback_`
-* `CONNECT_PENDING`
- * Both the model and sync are ready. The start callback has been called
- and we're waiting to connect to the sync thread.
- * If the model was `ERROR`, the error is passed along and the callback is
- cleared; we're really waiting for DisableSync instead of connect.
- * Determined by: `error_handler_ && !start_callback_`
-* `CONNECTED`
- * We have a [`CommitQueue`][CQ] that passes changes to the
- [`ModelTypeWorker`][MTW] on the sync thread.
- * Determined by: `!!worker_`
-
-### Processor States
-
-Based on the interplay of the model and sync states, the processor effectively
-progresses through 3 states worth noting:
-
-* `UNINITIALIZED`
- * Metadata isn't loaded so we have no knowledge of entities.
- * `Put` and `Delete` calls are not allowed in this state (will DCHECK).
-* `NOT_TRACKING`
- * Indicates that not metadata is being tracked and that `Put` and `Delete`
- calls will be ignored.
- * This state is entered if the loaded metadata shows an initial merge
- hasn't happened (`ModelTypeState::initial_sync_done` is false).
- * Exposed via `IsTrackingMetadata` for optimization, not correctness.
-* `TRACKING`
- * Indicates that metadata is being tracked and `Put` and `Delete` calls
- must happen for entity changes.
- * This state is entered if the loaded metadata shows an initial merge
- has happened (`ModelTypeState::initial_sync_done` is true).
-* `SYNCING`
- * Indicates that commits can be sent and updates can be received from the
- sync server. This is a superstate of `TRACKING`.
- * If the processor was in `TRACKING`, it progresses to this state as soon
- as it gets connected to the worker.
- * If the processor was in `NOT_TRACKING`, it progresses to this state
- after `MergeSyncData` is called and the metadata is initialized.
-
-## Entity Tracker
-
-The [`ProcessorEntity`][PET] tracks the state of individual entities for
-the processor. It keeps the [`EntityMetadata`][EM] proto in memory, as well as
-any pending commit data until it gets acked by the server. It also stores the
-special `commit_requested_sequence_number_`, which tracks the sequence number of
-the last version that's been sent to the server.
-
-The tracker holds the metadata in memory forever, which is needed so we know
-what to update the on-disk memory with when we get a new local or remote change.
-Changing this would require being able to handle updates asynchronously.
-
-[PET]: https://cs.chromium.org/chromium/src/components/sync/model/processor_entity.h
-[EM]: https://cs.chromium.org/chromium/src/components/sync/protocol/entity_metadata.proto
diff --git a/chromium/docs/website/site/developers/design-documents/sync/diagnostics/index.md b/chromium/docs/website/site/developers/design-documents/sync/diagnostics/index.md
deleted file mode 100644
index b7fb3a05430..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/diagnostics/index.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/sync
- - Sync
-page_name: sync-diagnostics
-title: Sync diagnostics (Needs update)
----
-
-### <http://go/aboutsync>
-
-### Overview
-
-* Located in **about:sync** (or **chrome://sync-internals**)
-* Inspired by **chrome://net-internals**
-* In M35 - Notifications tab has been branched off to
- **chrome://invalidations**.
-* Tabs:
- * About tab: "Classic" about:sync page, concise status overview
- * Data tab: dump debugging data to text for copy & paste
- * Notifications tab: Keeps track of incoming sync notifications
- * Events tab: logs for sync-related events
- * Sync Node Browser tab: browse all synced data
- * Search tab: Searching for strings in all synced data
- * Traffic tab: Text dump all of the sent and received messages to
- and from chrome sync servers.
-
-### **About tab**
-
-* "Classic" about:sync page
-* Updates on the fly
- * Try moving a bookmark, or stopping and starting sync
-* Some stuff will eventually be moved out, but page is still useful as
- an overview
-
-### Data tab
-
-* Dump to text button
- * Dumps all info from about and events tab
- * But can also select datatypes info to dump
- * Can be used to tell users to:
- * Open about:sync
- * Repro the problem if possible
- * Wait a while (15-30 seconds)
- * Go to data tab
- * Dump info, paste into bug (or email privately if there's
- sensitive info)
- * Event log will probably be most useful part
- * Redacts sensitive info
-* Room for improvement
- * Automatically highlight dumped text, add "Copy to clipboard"
- button
- * Button to add to an existing bug, or create a new one
-
-### Notifications tab (up to M35)
-
-* If a notification is received when the page (not just the tab) is
- open, a counter will increment (one for each data type)
- * Try moving a bookmark, setting a preference, or stopping and
- starting sync
- * Takes ~5-10 seconds for a notification to bounce back
- * Total Count of invalidations per each data type
- * Session Counters reset if you reload
-* Room for improvement
- * More detailed connection stats
- * How long has connection been up? Which XMPP server/port? How
- long ago was the last message sent/received?
-
-### Events tab
-
-* Shows all sync events (i.e., functions in SyncManager::Observer and
- incoming notifications) that happen as long as the page is open
- * Try moving a bookmark, or starting sync (dumps lots of data!)
- * Doesn't quite log everything yet
- * Only logs events after backend is initialized
- * Resets if you reload
-* Room for improvement
- * Store last N events (C++ side) so you can open it right when you
- hit a problem and still get some useful info
- * Also log requests/responses to HTTP server
- * Perhaps more logging for sync setup events
- * Better display ([82866](http://crbug.com/82866))
- * Start logging even before backend is initialized (tricky)
-
-### Sync node browser tab
-
-* Shows sync nodes
- * Sync nodes are structured in a tree.
- * Each data type has a top-level node which is a child of the root
- node
- * Only bookmarks sub-tree has true tree structure
- * Everything else is just a list under the top-level node
- * Use links to navigate tree: parent, first child, predecessor,
- successor
- * Ignore specifics information for folder
-* Tree view version
- * Tree visualized on the left, details of selected node on the
- right
-* Does *not* auto-update; you need to refresh
- * Be careful, you may lose logged events; you can always open a
- new about:sync tab instead
-* Room for improvement
- * Implement auto-updating (hard)
- * Add a refresh button (easier)
-
-### Search tab
-
-* Searches expressions in all the nodes
-* Supports Regex over the JSONified version of each node
-* Has quick searches to provide for easy access to interesting nodes.
- So far:
- * Unapplied updates
- * Unsynced items
- * Delted items
- * Conflicted items (unapplied and unsynced)
-
-### Network-level debugging
-
-* Sync talks to the sync server via POSTing to clients4.google.com.
-* Sync talks to the notification servers via XMPP (talk.google.com).
-* Both sockets should show up in **chrome://net-internals** (after
- [82365](http://code.google.com/p/chromium/issues/detail?id=82365) is
- fixed).
-
-### Room for improvement
-
-* Data type-specific tabs
- * Model associators / change processors have access to the
- SyncService, so shouldn't be too hard to emit events or
- reply to calls
- * Probably easier for things that live on the UI thread
-* Some way to capture VLOG() events
-* Should be obvious when sync isn't working
-* Use HTML notifications for events
-* Front-end for memory usage info (Lingesh is working on backend)
diff --git a/chromium/docs/website/site/developers/design-documents/sync/index.md b/chromium/docs/website/site/developers/design-documents/sync/index.md
deleted file mode 100644
index aaf46bd5206..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: sync
-title: Sync
----
-
-**Design docs**
-
-[Model API](/developers/design-documents/sync/model-api)
-
-[ClientTagBasedModelTypeProcessor](/developers/design-documents/sync/client-tag-based-model-type-processor)
-
-
-[Sync diagnostics](/developers/design-documents/sync/diagnostics) (Needs update)
-
-[Sync Data Best
-Practices](/developers/design-documents/sync/sync-data-best-practices) (Needs update)
-
-[Unified Sync And Storage
-proposal](/developers/design-documents/sync/unified-sync-and-storage-overview)
- (Needs update)
-
-***What***
-
-A library that implements the client side of our sync protocol, as well as the
-Google server-side infrastructure to serve Google Chrome users and synchronize
-data to their Google Account.
-
-The goals for this protocol include:
-
-* Store/sync different kinds of "data types", e.g. bookmarks.
-* Allow the user to connect to the server from multiple clients
- simultaneously.
-* Changes the user makes in one client should be immediately reflected
- in other clients connected to the server.
-* Allow the user to make changes to their data even if the server is
- unreachable, such that changes made while offline are synced with
- the server at a later time.
-* Resolve data conflicts on the client without prompting the user.
-
-*Where*
-
-TODO(crbug.com/1006699): Nowadays we have directories with reasonable meaning
-and dependencies between them. Describe that here, just like the password
-manager [folks](https://source.chromium.org/chromium/chromium/src/+/91bcc3658d7f81fde685523091ca94755419a708:components/password_manager/README.md).
diff --git a/chromium/docs/website/site/developers/design-documents/sync/model-api/index.md b/chromium/docs/website/site/developers/design-documents/sync/model-api/index.md
deleted file mode 100644
index ed26ea6b7bd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/model-api/index.md
+++ /dev/null
@@ -1,317 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/sync
- - Sync
-page_name: model-api
-title: Chrome Sync's Model API
----
-
-Chrome Sync operates on discrete, explicitly defined model types (bookmarks,
-preferences, tabs, etc). These model types are individually responsible for
-implementing their own local storage and responding to remote changes. This
-guide is for developers interested in syncing data for their model type to the
-cloud using Chrome Sync. It describes the newest version of the API, known as
-Unified Sync and Storage (USS). There is also the deprecated [SyncableService
-API] (aka Directory), which as of early 2022 is still used by several legacy
-model types, but "wrapped into" USS (see [SyncableServiceBasedBridge]).
-
-[SyncableService API]: https://www.chromium.org/developers/design-documents/sync/syncable-service-api
-[SyncableServiceBasedBridge]: https://cs.chromium.org/chromium/src/components/sync/model/syncable_service_based_bridge.h
-
-[TOC]
-
-## Overview
-
-To correctly sync data, USS requires that sync metadata be stored alongside your
-model data in a way such that they are written together atomically. **This is
-very important!** Sync must be able to update the metadata for any local data
-changes as part of the same write to disk. If you attempt to write data to disk
-and only notify sync afterwards, a crash in between the two writes can result in
-changes being dropped and never synced to the server, or data being duplicated
-due to being committed more than once.
-
-[`ModelTypeSyncBridge`][Bridge] is the interface the model code must implement.
-The bridge is usually owned by a [`KeyedService`][KeyedService].
-The correct place for the bridge generally lies as close to where your model
-data is stored as possible, as the bridge needs to be able to inject metadata
-updates into any local data changes that occur.
-
-The bridge owns a [`ModelTypeChangeProcessor`][MTCP] object, which it uses to
-communicate local changes to sync using the `Put` and `Delete` methods.
-The processor will communicate remote changes from sync to the bridge using the
-`MergeSyncData` and `ApplySyncChanges` methods, respectively for the initial
-merge of remote and local data, and for incremental changes coming from sync.
-[`MetadataChangeList`][MCL] is the way sync communicates metadata changes to the
-storage mechanism. Note that it is typically implemented on a per-storage basis,
-not a per-type basis.
-
-[Bridge]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_sync_bridge.h
-[KeyedService]: https://cs.chromium.org/chromium/src/components/keyed_service/core/keyed_service.h
-[MTCP]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_change_processor.h
-[MCL]: https://cs.chromium.org/chromium/src/components/sync/model/metadata_change_list.h
-
-## Data
-
-### Specifics
-
-Model types will define a proto that contains the necessary fields of the
-corresponding native type (e.g. [`TypedUrlSpecifics`][TypedUrlSpecifics]
-contains a URL and a list of visit timestamps) and include it as a field in the
-generic [`EntitySpecifics`][EntitySpecifics] proto. This is the form that all
-communications with sync will use. This proto form of the model data is referred
-to as the specifics.
-
-[TypedUrlSpecifics]: https://cs.chromium.org/chromium/src/components/sync/protocol/typed_url_specifics.proto
-[EntitySpecifics]: https://cs.chromium.org/search/?q="message+EntitySpecifics"+file:sync.proto
-
-### Identifiers
-
-There are two primary identifiers for entities: **storage key** and **client
-tag**. The bridge will need to take an [`EntityData`][EntityData] object (which
-contains the specifics) and be able generate both of these from it. For
-non-legacy types without significant performance concerns, these will generally
-be the same.
-
-The storage key is meant to be the primary key in the local model/database.
-It’s what’s used to refer to entities most of the time and, as its name implies,
-the bridge needs to be able to look up local data and metadata entries in the
-store using it. Because it is a local identifier, it can change as part of
-database migrations, etc. This may be desirable for efficiency reasons.
-
-The client tag is used to generate the **client tag hash**, which will identify
-entities **across clients**. This means that its implementation can **never
-change** once entities have begun to sync, without risking massive duplication
-of entities. This means it must be generated using only immutable data in the
-specifics. If your type does not have any immutable fields to use, you will need
-to add one (e.g. a GUID, though be wary as they have the potential to conflict).
-While the hash gets written to disk as part of the metadata, the tag itself is
-never persisted locally.
-
-[EntityData]: https://cs.chromium.org/chromium/src/components/sync/protocol/entity_data.h
-
-## Storage
-
-A crucial requirement of USS is that the model must add support for keeping
-sync’s metadata in the same storage as its normal data. The metadata consists of
-one [`EntityMetadata`][EntityMetadata] proto for each data entity, and one
-[`ModelTypeState`][ModelTypeState] proto containing metadata pertaining to the
-state of the entire type (the progress marker, for example). This typically
-requires two extra tables in a database to do (one for each type of proto).
-
-Since the processor doesn’t know anything about the store, the bridge provides
-it with an implementation of the [`MetadataChangeList`][MCL] interface. The
-change processor writes metadata through this interface when changes occur, and
-the bridge simply has to ensure it gets passed along to the store and written
-along with the data changes.
-
-[EntityMetadata]: https://cs.chromium.org/chromium/src/components/sync/protocol/entity_metadata.proto
-[ModelTypeState]: https://cs.chromium.org/chromium/src/components/sync/protocol/model_type_state.proto
-
-### ModelTypeStore
-
-While the model type may store its data however it chooses, many types use
-[`ModelTypeStore`][Store], which was created specifically to provide a
-convenient persistence solution. It’s backed by a [LevelDB] to store serialized
-protos to disk. `ModelTypeStore` provides two `MetadataChangeList`
-implementations for convenience; both accessed via
-[`ModelTypeStore::WriteBatch`][WriteBatch]. One passes metadata changes directly
-into an existing `WriteBatch` and another caches them in memory until a
-`WriteBatch` exists to consume them.
-
-The store interface abstracts away the type and will handle setting up tables
-for the type’s data, so multiple `ModelTypeStore` objects for different types
-can share the same LevelDB backend just by specifying the same path and task
-runner. Sync already has a backend it uses for DeviceInfo that can be shared by
-other types via the [`ModelTypeStoreService`][StoreService].
-
-[Store]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_store.h
-[LevelDB]: https://github.com/google/leveldb/blob/master/doc/index.md
-[WriteBatch]: https://cs.chromium.org/search/?q="class+WriteBatch"+file:model_type_store_base.h
-[StoreService]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_store_service.h
-
-## Implementing ModelTypeSyncBridge
-
-### Initialization
-
-The bridge is required to load all of the metadata for its type from storage and
-provide it to the processor via the [`ModelReadyToSync`][ModelReadyToSync]
-method **before any local changes occur**. This can be tricky if the thread the
-bridge runs on is different from the storage mechanism. No data will be synced
-with the server if the processor is never informed that the model is ready.
-
-Since the tracking of changes and updating of metadata is completely
-independent, there is no need to wait for the sync engine to start before
-changes can be made. This prevents the need for an expensive association step in
-the initialization.
-
-[ModelReadyToSync]: https://cs.chromium.org/search/?q=ModelReadyToSync+file:/model_type_change_processor.h
-
-### MergeSyncData
-
-This method is called only once, when a type is first enabled. Sync will
-download all the data it has for the type from the server and provide it to the
-bridge using this method. Sync filters out any tombstones for this call, so
-`EntityData::is_deleted()` will never be true for the provided entities. The
-bridge must then examine the sync data and the local data and merge them
-together:
-
-* Any remote entities that don’t exist locally must be be written to local
- storage.
-* Any local entities that don’t exist remotely must be provided to sync via
- [`ModelTypeChangeProcessor::Put`][Put].
-* Any entities that appear in both sets must be merged and the model and sync
- informed accordingly. Decide which copy of the data to use (or a merged
- version or neither) and update the local store and sync as necessary to
- reflect the decision. How the decision is made can vary by model type.
-
-The [`MetadataChangeList`][MCL] passed into the function is already populated
-with metadata for all the data passed in (note that neither the data nor the
-metadata have been committed to storage yet at this point). It must be given to
-the processor for any `Put` or `Delete` calls so the relevant metadata can be
-added/updated/deleted, and then passed to the store for persisting along with
-the data.
-
-Note that if sync gets disabled and the metadata cleared, entities that
-originated from other clients will exist as “local” entities the next time sync
-starts and merge is called. Since tombstones are not provided for merge, this
-can result in reviving the entity if it had been deleted on another client in
-the meantime.
-
-[Put]: https://cs.chromium.org/search/?q=Put+file:/model_type_change_processor.h
-
-### ApplySyncChanges
-
-While `MergeSyncData` provides the state of sync data using `EntityData`
-objects, `ApplySyncChanges` provides changes to the state using
-[`EntityChange`][EntityChange] objects. These changes must be applied to the
-local state.
-
-Here’s an example implementation of a type using `ModelTypeStore`:
-
-```cpp
-absl::optional<ModelError> DeviceInfoSyncBridge::ApplySyncChanges(
- std::unique_ptr<MetadataChangeList> metadata_change_list,
- EntityChangeList entity_changes) {
- std::unique_ptr<WriteBatch> batch = store_->CreateWriteBatch();
- for (const EntityChange& change : entity_changes) {
- if (change.type() == EntityChange::ACTION_DELETE) {
- batch->DeleteData(change.storage_key());
- } else {
- batch->WriteData(change.storage_key(),
- change.data().specifics.your_type().SerializeAsString());
- }
- }
-
- batch->TakeMetadataChangesFrom(std::move(metadata_change_list));
- store_->CommitWriteBatch(std::move(batch), base::BindOnce(...));
- NotifyModelOfChanges();
- return {};
-}
-```
-
-A conflict can occur when an entity has a pending local commit when an update
-for the same entity comes from another client. In this case, the bridge’s
-[`ResolveConflict`][ResolveConflict] method will have been called prior to the
-`ApplySyncChanges` call in order to determine what should happen. This method
-defaults to having the remote version overwrite the local version unless the
-remote version is a tombstone, in which case the local version wins.
-
-[EntityChange]: https://cs.chromium.org/chromium/src/components/sync/model/entity_change.h
-[ResolveConflict]: https://cs.chromium.org/search/?q=ResolveConflict+file:/model_type_sync_bridge.h
-
-### Local changes
-
-The [`ModelTypeChangeProcessor`][MTCP] must be informed of any local changes via
-its `Put` and `Delete` methods. Since the processor cannot do any useful
-metadata tracking until `MergeSyncData` is called, the `IsTrackingMetadata`
-method is provided. It can be checked as an optimization to prevent unnecessary
-processing preparing the parameters to a `Put` or `Delete` call.
-
-Here’s an example of handling a local write using `ModelTypeStore`:
-
-```cpp
-void WriteLocalChange(std::string key, ModelData data) {
- std::unique_ptr<WriteBatch> batch = store_->CreateWriteBatch();
- if (change_processor()->IsTrackingMetadata()) {
- change_processor()->Put(key, ModelToEntityData(data),
- batch->GetMetadataChangeList());
- }
- batch->WriteData(key, data.specifics->SerializeAsString());
- store_->CommitWriteBatch(std::move(batch), base::BindOnce(...));
-}
-```
-
-## Error handling
-
-If any errors occur during store operations that could compromise the
-consistency of the data and metadata, the processor’s
-[`ReportError`][ReportError] method should be called. The only exception to this
-is errors during `MergeSyncData` or `ApplySyncChanges`, which should just return
-a [`ModelError`][ModelError].
-
-This will inform sync of the error, which will stop all communications with the
-server so bad data doesn’t get synced. Since the metadata might no longer be
-valid, the bridge will asynchronously receive an `ApplyStopSyncChanges` call
-with a non-null `MetadataChangeList` parameter. All the metadata will be cleared
-from the store (if possible), and the type will be started again from scratch on
-the next client restart.
-
-[ReportError]: https://cs.chromium.org/search/?q=ReportError+file:/model_type_change_processor.h
-[ModelError]: https://cs.chromium.org/chromium/src/components/sync/model/model_error.h
-
-## Sync Integration Checklist
-
-Before starting any integration work, please reach out to us at
-chrome-sync-dev@google.com and share your plans / design doc!
-
-* Define your specifics proto in [`//components/sync/protocol/`][protocol].
-* Add it to the [proto value conversions][conversions] files.
-* Add a field for it to [`EntitySpecifics`][EntitySpecifics].
-* At this point, there are also some server-side integration steps to be done.
- Reach out to chrome-sync-dev@google.com for details.
-* Add it to the [`ModelType`][ModelType] enum and
- [`kModelTypeInfoMap`][info_map].
-* Register a [`ModelTypeController`][ModelTypeController] for your type in
- [`SyncApiComponentFactoryImpl::CreateCommonDataTypeControllers`][CreateCommonDataTypeControllers] or platform-specific equivalent in
- [`ChromeSyncClient::CreateDataTypeControllers`][CreateDataTypeControllers].
-* Add your KeyedService dependency to
- [`SyncServiceFactory`][SyncServiceFactory].
-* Add an field for encrypted data to [`NigoriSpecifics`][NigoriSpecifics].
-* If your type should have its own toggle in sync settings, add an entry to
- the [`UserSelectableType`][UserSelectableType] enum, add a
- [preference][pref_names] for tracking whether your type is enabled, and
- map your type to the pref in [`GetPrefNameForType`][GetPrefName].
-* Otherwise, if your type should be included in an existing toggle in sync
- settings, add it in [`GetUserSelectableTypeInfo`]
- [GetUserSelectableTypeInfo].
-* Add to the `SyncModelTypes` enum in [`enums.xml`][enums] and to the
- `SyncModelType` suffix in [`histograms.xml`][histograms].
-
-[protocol]: https://cs.chromium.org/chromium/src/components/sync/protocol/
-[ModelType]: https://cs.chromium.org/chromium/src/components/sync/base/model_type.h
-[info_map]: https://cs.chromium.org/search/?q="kModelTypeInfoMap%5B%5D"+file:model_type.cc
-[conversions]: https://cs.chromium.org/chromium/src/components/sync/protocol/proto_value_conversions.h
-[ModelTypeController]: https://cs.chromium.org/chromium/src/components/sync/driver/model_type_controller.h
-[CreateCommonDataTypeControllers]: https://cs.chromium.org/search/?q="SyncApiComponentFactoryImpl::CreateCommonDataTypeControllers"
-[CreateDataTypeControllers]: https://cs.chromium.org/search/?q="ChromeSyncClient::CreateDataTypeControllers"
-[SyncServiceFactory]: https://cs.chromium.org/search/?q=:SyncServiceFactory%5C(%5C)
-[NigoriSpecifics]: https://cs.chromium.org/chromium/src/components/sync/protocol/nigori_specifics.proto
-[UserSelectableType]: https://cs.chromium.org/chromium/src/components/sync/base/user_selectable_type.h?type=cs&q="enum+class+UserSelectableType"
-[pref_names]: https://cs.chromium.org/chromium/src/components/sync/base/pref_names.h
-[GetPrefName]: https://cs.chromium.org/search/?q=GetPrefNameForType+file:sync_prefs.cc
-[GetUserSelectableTypeInfo]: https://cs.chromium.org/chromium/src/components/sync/base/user_selectable_type.cc?type=cs&q="UserSelectableTypeInfo+GetUserSelectableTypeInfo"+f:components/sync/base/user_selectable_type.cc
-[enums]: https://cs.chromium.org/chromium/src/tools/metrics/histograms/enums.xml
-[histograms]: https://cs.chromium.org/chromium/src/tools/metrics/histograms/histograms.xml
-[DataTypeHistogram]: https://cs.chromium.org/chromium/src/components/sync/base/data_type_histogram.h
-
-## Testing
-
-The [`TwoClientTypedUrlsSyncTest`][UssTest] suite is probably a good place to start
-for integration testing. Especially note the use of a `StatusChangeChecker` to
-wait for events to happen.
-
-[UssTest]: https://cs.chromium.org/chromium/src/chrome/browser/sync/test/integration/two_client_typed_urls_sync_test.cc
diff --git a/chromium/docs/website/site/developers/design-documents/sync/sync-data-best-practices/index.md b/chromium/docs/website/site/developers/design-documents/sync/sync-data-best-practices/index.md
deleted file mode 100644
index d61fe60fcb0..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/sync-data-best-practices/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/sync
- - Sync
-page_name: sync-data-best-practices
-title: Sync Data Best Practices (Needs update)
----
-
-[The new sync API](/developers/design-documents/sync/syncable-service-api) uses
-protobufs to communicate with Chrome services, which is nice because protobufs
-were written to be robust against protocol changes (see [protobuf
-docs](http://code.google.com/apis/protocolbuffers/docs/overview.html) for
-details). However, once you start syncing data, changing your protobuf format
-isn't completely painless; not only can sync users upgrade from one Chrome
-version to another, but they may have different Chrome versions running at the
-same time! Fortunately, there are some best practices to help make it easy:
-
-* Avoid using "explicit version numbers" in your protobuf; instead,
- have your code test for the existence of a field to determine what
- to do. Protobufs were written precisely to avoid version-specific
- logic, and testing for fields is more robust.
-* Adding a new field is the simplest case. Old clients will simply
- ignore the unknown new field, and when old clients send up new data,
- the sync backend preserves unknown fields so new clients can still
- use them.
-* Removing an old field is also pretty simple. Simply stop populating
- the field. Old clients will continue to use it, and new clients will
- ignore it. Once the Chrome stable version moves past the last
- version to use the old field, (where "moves past" means something
- like "the number of users using a version of Chrome older than the
- stable version drops below 1%) then you can remove the field
- entirely via a server-side map-reduce.
-* Avoid repurposing existing fields. Instead, add a new field for the
- new data and stop populating the old field, although continue to
- read it if the new field isn't present. Then, when the stable
- version of Chrome moves past the last version that creates old data,
- add code to migrate the old field to the new field (preferably on
- the server side, as adding substantial migration code might cause
- sync traffic spikes on version upgrades). Finally, once the stable
- version of Chrome becomes the first Chrome version with the
- migration code, you can remove data in the old field.
diff --git a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/index.md b/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/index.md
deleted file mode 100644
index 27b4f8cfee1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/index.md
+++ /dev/null
@@ -1,421 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/sync
- - Sync
-page_name: unified-sync-and-storage-overview
-title: Unified Sync And Storage Overview (Needs update)
----
-
-# What is it?
-
-Unified Sync and Storage (USS) is a refactoring of Sync internals and services
-that depend on Sync.
-
-The goal of the refactoring is to address the following existing issues:
-
- Address sync data consistency issues that stem from the lack of
- transactional consistency between Sync database and native model specific
- storages.
-
- Reduce disk and memory usage by Sync data on the client.
-
- Improve parallelism, eliminate thread contention on shared objects (Sync
- Directory).
-
- Reduce code complexity.
-
-Currently, all synced data is stored locally in two different locations (see the
-first diagram below). The first is the native storage, which exists regardless
-of whether or not sync is turned on. Examples of the native model storage are
-Preferences JSON file, Bookmarks file, Autofill SQLite Database. The second is
-Sync DB, a file in SQLite format, which is managed entirely by Sync. Sync DB
-contains snapshots of synced data and sync specific metadata.
-
-On Sync startup the database is loaded into the Directory - the in-memory
-repository of all sync data and metadata. The directory is shared between
-threads and provides transactional semantics for all changes triggered by local
-model changes as well as changes coming with server updates. The directory
-provides a decoupling between the model facing part of Sync Engine and the
-server facing part of the engine running on the sync thread. For example, if
-there is a local change, it first gets updated in the directory, marked as
-unsynced, then sync thread separately reads it from the directory when it is
-time to commit changes to the server. This makes the directory the centerpiece
-of the current design. But at the same time this makes the directory the the
-main bottleneck - an exclusive access to the directory is needed for any
-operation with it. Also since the directory keeps all the data and sync metadata
-readily available in memory there the scalability of this approach is limited to
-tens of thousands of entries.
-
-The idea is to decentralize Sync storage and to shift the storage
-responsibility, at least conceptually, from Sync engine to Sync clients e.g.
-native models that own the actual synced data. The core Sync components don’t
-have to know anything about the storage, they just pass messages containing sync
-data asynchronously all the way to model type specific sync service (the adapter
-between Sync engine and the native model). The sync service encapsulates the
-storage capable of storing sync metadata along with the model data. The storage
-implementation is responsible for ensuring consistency of the model data with
-sync metadata.
-
-That doesn’t mean every native model has to roll out its own storage. Sync team
-will provide a generic levelDB based storage that should satisfy requirements
-for most simple model types that want to leverage the simple “syncable storage”
-API.
-
-More complex data types can roll their own sync metadata storage implementation
-on top of their already existing storage mechanism or on top of an in-memory
-object model. In most cases it would be a thin adapter over the existing storage
-that allows Sync to bundle Sync metadata with the corresponding data entities or
-to store Sync metadata side-by-side (e.g. in a separate table in case of SQLite
-DB). The expectation is that in most cases no or very little changes would be
-needed to the existing native model and/or storage implementations. The
-customization would be handled by the model specific sync service.
-
-# High Level design comparison
-
-The two pictures below illustrate the current Sync design (the first picture)
-and compare that to the proposed USS changes (the second picture).
-
-Current
-
-[<img alt="image"
-src="/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png">](/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png)
-
-Proposed changes
-
-[<img alt="image"
-src="/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png">](/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png)
-
-Color coding:
-
-<table>
-<tr>
-
-<td>Grey</td>
-
-<td>Existing Sync components shared between the existing implementation and USS implementation.</td>
-
-</tr>
-<tr>
-
-<td>Blue</td>
-
-<td>New USS specific components (typically one instance per native model type).</td>
-
-</tr>
-<tr>
-
-<td>Yellow</td>
-
-<td>Native model type specific components. The most typical case of model type implementation is shown, but a more complex custom implementation is possible.</td>
-
-</tr>
-</table>
-
-The most significant difference between the current Sync design and USS is where
-the storage for sync data and metadata is.
-
-With the USS proposal there is no centralized in-memory Directory and Sync DB.
-The responsibility for providing the storage for sync metadata is shifted to the
-native model, the storage is encapsulated by the model specific implementation
-of ModelTypeService.
-
-The in-memory repository of sync entities is handled by a generic type agnostic
-sync processor component - SharedModelTypeProcessor. This component is roughly a
-counterpart of SharedChangeProcessor and GenericChangeProcessor in the current
-design.
-
-ModelTypeService works in conjunction with SharedModelTypeProcessor. The pair is
-designed to be fairly decoupled from the rest of Sync engine and to handle
-native model changes even when the rest of Sync isn’t running. Here is how
-responsibilities are divided between them:
-
-<table>
-<tr>
-
-<td>Model specific ModelTypeService (the service)</td>
-
-<td>SharedModelTypeProcessor (the processor)</td>
-
-</tr>
-<tr>
-
- <td>An “adapter” between the native model and the Sync engine.</td>
-
- <td>Observes the local native model changes, translates them into local Sync
- changes, and submits changes to the processor.</td>
-
- <td>Applies sync changes coming from the processor to the native model</td>
-
- <td>Handles complex conflict resolution that requires understanding sync
- data.</td>
-
- <td>Encapsulates the metadata storage - either directly or via the
- model</td>
-
- <td>Abstracts storage of sync metadata for the rest of Sync engine</td>
-
- <td>Has ability to asynchronously fetch model data and translate it to sync
- data on demand.</td>
-
- <td>Integrates the model type specific service with the rest of Sync
- engine.</td>
-
- <td>Serves as a broker between the model specific service and Sync backend
- (the worker).</td>
-
- <td>Handles messages from the worker and commits local changes to the
- worker.</td>
-
- <td>“Understands” sync metadata. Owns metadata cache and knows how to
- translate local and remote changes into metadata changes.</td>
-
- <td>Handles simple conflict resolution that doesn't require understanding
- sync data, delegates data specific conflict resolution to the service.</td>
-
-</tr>
-</table>
-
-Having a separate copy of synced data is no longer necessary except for holding
-on to it for a short time in memory, only for in-flight entities that are being
-committed to the server or passed back with a server update. The transactional
-semantics of the directory as a way to pass the data between the model and the
-sync thread is replaced with asynchronous messaging with sync data payloads.
-
-USS reuses a significant part of the current design. There are two integration
-points where USS specific components plug into Sync architecture:
-
-On the UI thread sync datatype configuration and management is done through
-model type specific instance of NonBlockingDataTypeController (USS specific
-implementation of DataTypeController). It has the same responsibilities as
-regular DataType controllers in the current implementation:
-
- Abstracts USS datatype management from the rest of Sync engine.
-
- Handles USS datatype initialization, configuration and state transition
- logic during startup and shutdown.
-
- Handles activation and deactivation of the datatype with Sync backend.
-
-ModelTypeWorker (the worker) is USS specific implementation of Sync engine’s
-UpdateHandler and CommitContributer interfaces. The key difference between this
-component and currently existing counterparts is that the existing
-implementation propagates sync changes through the shared directory by writing
-updates to the directory and querying uncommitted local changes from the
-directory. The USS based implementation achieves the same by exchanging the data
-across the thread boundary with the processor. The worker provides a short term
-in-memory cache for pending committed entities waiting for the next scheduled
-sync cycle or for the network connection to the server. If the application
-terminates before successfully committing pending entities to the server, the
-processor running on the model, based on the last saved snapshot of the
-metadata, can still determine all the entities with unfinished commit and
-re-commit them through the engine pipeline.
-
-ModelTypeWorker has the following responsibilities:
-
- Provides integration of USS datatypes on Sync backend side:
-
- Generates commit messages to the server
-
- Processes update messages from the server
-
- Generates nudges to the sync scheduler.
-
- Handles two-way communication with the processor running on the model thread
- (receives commit requests, posts back commit confirmations and updates).
-
- Handles data encryption.
-
- Tracks in-flight entities and resolves some simple conflicts.
-
-The rest of Sync backend (shown as Syncer on the diagram) remains mostly
-unchanged from the current design.
-
-Patterns of model type implementation on top of USS
-
- ### Typical - for data types with a simple model.
-
-This pattern is close to the original USS proposal. It is usable for cases where
-the entire model is fully syncable meaning that:
-
- All model entities are syncable
-
- All data fields of each entity are syncable
-
- An entire model entity data can be translated to
- [sync_pb::EntitySpecifics](https://code.google.com/p/chromium/codesearch#chromium/src/sync/protocol/sync.proto&q=EntitySpecifics&sq=package:chromium&type=cs&l=66)
- and back without losing any state.
-
-This pattern would be most suitable for brand new model types that don’t have
-their own storage mechanism. The consistency is ensured by the Sync provided
-levelDB based storage that holds both native model data and Sync metadata.
-
-The typical implementation is based on a fairly generic base implementation of
-ModelTypeService that would implement all of the logic for hosting the storage,
-accessing and saving all model data and sync metadata, handling interaction with
-the Sync Engine, etc. The service surfaces a simple storage API for the native
-model to get, put, delete entities, and to notify about remote updates. All of
-the syncing is happening transparently to the model.
-
-[<img alt="image"
-src="/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png">](/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png)
-
-### 2. Trivial - special case of Typical pattern without the native model
-
-Model type examples: Sessions, DeviceInfo.
-
-This is a further simplification of the Typical pattern where there is no native
-model and everything is fully contained inside the model type specific
-ModelTypeService.
-
-### 3. Custom with unified storage.
-
-Model type examples: Bookmarks, TypedURLs.
-
-This pattern is for complex model types with existing storage mechanism that can
-accommodate storing additional Sync metadata. The consistency is ensured by
-custom, model type specific sync metadata storage implementation that piggybacks
-the already existing native storage mechanism.
-
-For example, for Bookmarks model type, the metadata storage could leverage the
-existing bookmark’s MetaInfo container to bundle arbitrary Sync metadata along
-with bookmarks.
-
-For TypedURLs model type, sync metadata could go into a separate table in the
-existing SQLite database. The consistency would be ensured by leveraging the
-already existing open transaction mechanism.
-
-[<img alt="image"
-src="/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png">](/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png)
-
-### 4. Custom with separate sync storage.
-
-Model type examples: Passwords.
-
-This pattern is for complex model types with existing storage mechanism that
-can’t accommodate storing additional Sync metadata.
-
-While this pattern can’t guarantee the high level of consistency that the
-unified storage can provide, it should still be able to improve the situation
-compared to the current Sync implementation and to leverage some other benefits
-of the refactoring like the storage isolation, smaller memory usage, better
-parallelism.
-
-[<img alt="image"
-src="/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png">](/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png)
-
-In this case Sync metadata is stored on the side, in Sync provided levelDB
-storage which is hosted by the model type specific implementation of
-ModelTypeService. There should be no need to duplicate the actual data in the
-metadata storage except may be for in-flight data for a small number of
-entities.
-
-Because there are two side-by-side storages, a custom model specific association
-would need to be performed when the storage is loaded to detect and handle any
-discrepancies. The association / synchronization of the two storages would be
-done entirely at the service level. Just like in other cases, as far as Sync
-core components are concerned, the Sync metadata storage mechanism should be
-opaque to the engine and handled completely by the model type specific
-ModelTypeService implementation.
-
-Implementation Notes
-
-USS architecture shares a number of components with the current Directory based
-Sync Engine architecture and should have no problem running side-by-side with
-it. Existing Sync datatypes might be migrated to the new architecture one by
-one. The migration should be transparent to Sync Server and to other clients
-running older versions of Chrome.
-
-The plan is to start by implementing all USS specific Sync Engine components as
-well as the generic levelDB based storage.
-
-Then migrate one trivial datatype such as DeviceInfo and one complex datatype
-such as Bookmarks. Based on the experience migrating these two datatypes we'll
-decide what datatypes to migrate next and in which order.
-
-# Summary
-
-Let’s review each USS refactoring goal and how it is going to be addressed.
-
-### Data Consistency
-
-The main reason for inconsistency is lack of transactional coordination between
-Sync writing sync data to its own database and the native models persisting data
-into their own storages.
-
-USS avoids this problem altogether by eliminating the Sync’s private storage and
-shifting the metadata storage to the unified storage. The model type specific
-service (ModelTypeService implementation) is responsible for keeping the sync
-metadata in sync with the data changes. In some cases the metadata consistency
-with the data is guaranteed by owning the storage implementation and in some
-cases that is provided by piggybacking on the native storage implementation and
-understanding how a particular native storage persisting works (see the
-implementation patterns section above).
-
-Another source of inconsistency is delayed startup of Sync or turning Sync off
-temporarily (which is possible on mobile platforms). The complete configuration
-of Sync may sometimes be blocked on network connectivity and gives a user plenty
-of time to make local changes that remain untracked by Sync.
-
-USS avoids this problem by allowing the change processor component
-(SharedModelTypeProcessor) to handle local changes and keep updating related
-sync metadata regardless of whether the rest of Sync engine is up and running.
-This is possible because the storage of sync metadata doesn’t depend on the Sync
-backend anymore.
-
-### Disk and memory usage optimization
-
-Sync DB maintains two copies of synced data plus some sync specific metadata for
-each synced entity. The two data copies of data are:
-
- Local entity data received from or propagated to the native model.
-
- Remote entity data received from or committed to the server.
-
-These copies are needed to guarantee that sync metadata is always consistent
-with the data that Sync operates on(which can get out of sync with the native
-model as explained above), to ensure that Sync can resume incomplete operations
-across Chrome restarts, and to enable conflict resolution when the local changes
-collide with server updates.
-
-Sync loads the entire database into memory at startup which includes all the
-metadata and two data copies per entity. As a result of recent Directory
-copy-on-write memory usage optimization Sync attempts to share the two copies if
-they contain identical data. However even with the optimization the extra memory
-usage is still on the order of several KB per entity.
-
-With USS implementation the plan is to stop keeping any extra copies of sync
-data on disk or in memory except for short term caching of in-flight entities,
-e.g. the entities waiting to be committed or applied to the model. The metadata
-maintained by Sync should allow it to recover from unexpected termination and to
-redo unfinished operations from scratch, including re-fetching from the model
-and re-committing items that need to be committed and re-requesting update from
-the last known progress marker.
-
-### Improved parallelism, reduction of thread contention.
-
-The main source of thread contention is exclusive access to Sync Directory
-shared between all threads. It is fair to say that most of the time only one
-thread at a time can perform sync operations. Other threads are often blocked
-waiting to enter the directory read or write transaction.
-
-With USS implementation there is no locking on the directory access. Each
-datatype has its own asynchronous messaging pipeline.
-
-### Code Complexity
-
-The proposed design in general has a fewer number of layers. The centerpiece
-between the model thread and sync thread is eliminated. The whole layering
-complexity around the directory access with the transactions, directory
-persistence, integrity checking, etc is completely eliminated. Each syncable
-datatype becomes mostly independent from any other datatype. The type specific
-complexity that is still present in the directory implementation should be moved
-all the way to type specific ModelTypeService implementation. The core of Sync
-engine should become more or less a streamlined messaging pipeline with conflict
-resolution logic.
-
-At the same time the complexity of conflict resolution might increase due to
-asynchronous nature of USS pipeline and lack of a well defined transaction.
diff --git a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png.sha1 b/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png.sha1
deleted file mode 100644
index 4fb19ab6cf2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/s7ipoJ9OaaLWolpF0aIYfoA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a7192d54baed1f5b2a2d1eeb69019e7d174c8090 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png.sha1 b/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png.sha1
deleted file mode 100644
index 791f976e21c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sGBklpDhSmt-dGNQJUSkhNA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c6c402bd948173497d19604bf3551450c36f6f37 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png.sha1 b/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png.sha1
deleted file mode 100644
index 281494f33d5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sK5QS5Ee9i0OE2L4RIHredA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-023e12278e30061d8aa8eb5f1c66734238747d10 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png.sha1 b/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png.sha1
deleted file mode 100644
index 9b4c0e450b4..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/sSbkKodQc5-RbyCqTGkUCzw.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7c5927d3252c95f4ba53ba30d99ee8ad3443329b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png.sha1 b/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png.sha1
deleted file mode 100644
index b9af8784e71..00000000000
--- a/chromium/docs/website/site/developers/design-documents/sync/unified-sync-and-storage-overview/syHRLLSqHvALzjSchvniqSw.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9cc38c78d6c1fba2e9f544d6873e4321f8168eff \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/system-dictionary-pop-up-architecture/index.md b/chromium/docs/website/site/developers/design-documents/system-dictionary-pop-up-architecture/index.md
deleted file mode 100644
index 1cd6894e76f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/system-dictionary-pop-up-architecture/index.md
+++ /dev/null
@@ -1,227 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: system-dictionary-pop-up-architecture
-title: System Dictionary Pop-Up Architecture
----
-
-The Mac OS X system function "Lookup in Dictionary" pops open a hover panel that
-shows the dictionary definition of the word at which the mouse cursor points.
-This functionality is provided by the system but is difficult to make work with
-Chromium's multi-process architecture. The underlying implementation uses
--\[NSTextInput characterIndexAtPoint:\] to return the index of the character in
-the text stream where the mouse is pointing. Our current accessibility work
-provides the text content of the webpage over IPC to the browser process.
-Unfortunately, the mapping of points to characters is a prohibitively large data
-set and cannot be moved over IPC. Since the underlying implementation of the
-dictionary function relies on a synchronous accessibility API, the problem is
-further complicated.
-
-One possible implementation is to send a synchronous IPC message from the
-browser process to the renderer. This would have to have a very short timeout
-because this synchronous message will block the UI thread, which could lead to a
-janky experience. But, the browser process, as a general rule, does not send
-synchronous messages to the renderer; only the vice versa is allowed. In order
-to perform this, then, the browser's IPC channel would need to be made
-synchronous as well as asynchronous. However, doing so would make it easier for
-people to add other synchronous IPC View messages, which should be avoided at
-all costs.
-
-Another option, rather than making the main IPC channel synchronous, would be to
-add another channel between the browser and renderer. This shares the same
-drawbacks as the first implementation, but at least would separate out the
-single synchronous View message into its own member, which could be documented
-with verboten warnings. But it also has an additional drawback of requiring
-another IPC channel, which would consume another file descriptor per renderer
-process. Considering file descriptor exhaustion could already be an issue due to
-Chrome's architecture, this is not desirable for the implementation of a single
-feature.
-
-The third option is to communicate to the renderer with asynchronous messages
-and use thread synchronization techniques to make the communication behave
-synchronously. To do this, we use a condition variable and a Singleton member.
-
-A fourth option is to completely bypass how the system implements this using
-Accessibility of NSText and instead call the 10.6+ API to show the popup
-manually. The API in question is: -\[NSView
-showDefinitionForAttributedString:range:options:baselineOriginProvider:\] with
-NSDefinitionPresentationTypeKey=NSDefinitionPresentationTypeOverlay in options.
-This works well on 10.6, but it means that the browser process would need to
-simulate the cmd-ctrl-d-then-keep-cmd-ctrl-down-and-drag-mouse-around logic,
-which is unfortunate. On the plus side, this would be completely async.
-
-## Dictionary Pop-Up Internals
-
-This section will detail how Mac OS X brings up the dictionary pop-up. This
-examination was done on Mac OS X 10.6.5.
-
-All typical Cocoa apps get the dictionary pop-up behavior for free because
-NSTextField and NSTextView conform to NSTextInput (or NSTextInputClient). These
-protocols define the three methods used to implement the dictionary
-functionality:
-
-1. -
- (NSAttributedString\*)attributedSubstringFromRange:(NSRange)theRange
-2. - (NSUInteger)characterIndexForPoint:(NSPoint)thePoint
-3. - (NSRect)firstRectForCharacterRange:(NSRange)theRange
-
-The system calls these methods in that order, with this rough pattern:
-
-1. -attributedStringForRange:{0, 10}
-2. -characterIndexForPoint:{mouseX, mouseY} → returns index **C**
-3. -attributedStringForRange:{**C**, 50} → returns string **S**
-4. -firstRectForCharacterRange:{**C** ± 50, **S\***.length}
-
-It's unclear why each dictionary popup request always starts with (1), but it's
-likely some sort of warmup test. The rest is fairly forward: it receives the
-index of the character in the text stream over which the mouse points. From
-there, it gets the attributed string at that point and the 50 characters after
-it. The string it returns is attributed because the highlighted word effect is
-done by drawing the attributed string with the gray background over the word
-that is being looked up. Finally, it gets the drawing rectangle for the word so
-it knows where to position the popup. The range it passes is determined by the
-Dictionary framework, which breaks up the 50 character string and finds the
-individual word or phrase that is being looked up.
-
-In Chromium, our native view that lives in the browser process conforms to the
-NSTextInput protocol but the text stream and web contents live in a separate
-process. This means that the access to the necessary data has to be brought
-across the process boundary. Unfortunately, the API assumes that everything is
-within the same process (a safe assumption for almost all Cocoa applications),
-so it is synchronous. To work within that constraint, we use the third option
-outlined above: send asynchronous ViewMsg messages to the renderer and then wait
-on a condition variable. Each of the 3 NSTextInput methods listed above follow
-this pattern in render_widget_host_view_mac.mm, using the example pseudocode
-below.
-
----
-
-### Sample Code:
-
-#### //chrome/browser/cocoa/lookup_in_dictionary.h:
-
-#include "base/singleton.h"
-
-class LookupInDictionary {
-
-public:
-
-// Locks the internal condition for use before the asynchronous message is sent
-to the renderer
-
-// to lookup the character index at a given point.
-
-void BeforeRequest() {
-
-lock_.Acquire();
-
-character_index_ = NSNotFound;
-
-}
-
-// Blocks the calling thread with a short timeout after the async message has
-been sent to the
-
-// renderer to lookup the character index of a given mouse point. This will
-return NSNotFound
-
-// if the timeout expires or if no character at the given point was found,
-otherwise it will return
-
-// the character index.
-
-NSUInteger WaitForCharacterIndex() {
-
-condition_.TimedWait(1.5 seconds);
-
-return character_index_;
-
-}
-
-// Called at the end of the critical section. This will release the lock and
-condition.
-
-void AfterRequest() {
-
-lock_.Release();
-
-}
-
-// Sets the character index for the last point message. This is called from the
-IO thread upon
-
-// receipt of the reply message. This will signal the condition to wake the
-sleeping UI thread if it
-
-// has not yet timed out.
-
-void SetCharacterIndexAndSignal(NSUInteger index) {
-
-lock_.Acquire();
-
-character_index_ = index;
-
-lock_.Release();
-
-condition_.Signal();
-
-}
-
-private:
-
-friend struct DefaultSingletonTraits;
-
-LookupInDictionary()
-
-: character_index_(NSNotFound),
-
-lock_(),
-
-condition_(&lock_) {
-
-}
-
-NSUInteger character_index_;
-
-Lock lock_;
-
-ConditionVariable condition_;
-
-};
-
----
-
-render_widget_host_mac.mm
-
-- (NSUInteger)characterIndexAtPoint:(NSPoint)thePoint {
-
-gfx::Point point(thePoint.x, thePoint.y);
-
-LookupInDictionary\* service = Singleton&lt;LookupInDictionary&gt;::get();
-
-service-&gt;BeforeRequest();
-
-Send(new ViewMsg_CharacterIndexAtPoint(routing_id(), point));
-
-NSUInteger index = service-&gt;WaitForCharacterIndex();
-
-service-&gt;AfterRequest();
-
-return index;
-
-}
-
----
-
-resource_message_filter.cc
-
-void ResourceMessageFilter::OnCharacterIndexAtPoint(uint index) {
-
-LookupInDictionary\* service = Singleton&lt;LookupInDictionary&gt;::get();
-
-service-&gt;SetCharacterIndexAndSignal(index);
-
-} \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin.png.sha1 b/chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin.png.sha1
deleted file mode 100644
index 42d6a36787f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9644c16272251c953f8642be8823ce32a97ca4dd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin2.png.sha1 b/chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin2.png.sha1
deleted file mode 100644
index 42d6a36787f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/dragWithin2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9644c16272251c953f8642be8823ce32a97ca4dd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/index.md b/chromium/docs/website/site/developers/design-documents/tab-strip-mac/index.md
deleted file mode 100644
index f737cbc17d1..00000000000
--- a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/index.md
+++ /dev/null
@@ -1,321 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: tab-strip-mac
-title: Tab Strip Design (Mac)
----
-
-This document describes the design of the tab strip on Mac OS X including tab
-layout, tab drag and drop, and the tab animations.
-
-## Classes
-
-The following classes make up the most important pieces of the implementation of
-the tab strip:
-
-#### TabContents
-
-The cross-platform representation of the contents of a tab. There is a
-one-to-one correspondence between open tabs and a TabContents object.
-
-#### TabStripModel
-
-The cross-platform model for the contents of the tab strip. There is one
-TabStripModel per Browser object. It contains the logic for manipulating
-addition and removal of tabs, as well as more complicated features such as
-"close all tabs to right". Individual tabs are referenced by index,
-\[0..count()\].
-
-#### TabView
-
-The NSView responsible for drawing the curved edges of a tab. Also contains all
-the logic for dragging a tab within and between windows.
-
-#### TabController
-
-The NSViewController for managing a single tab in the tab strip. It coordinates
-a close box, a title and an "icon view", a client-specified NSView that can be
-changed, for example, to show a favicon when the page is at rest and a spinner
-view when the page is loading. The default is a NSImageView.
-
-#### TabContentsController
-
-The NSViewController for managing the web contents of an individual tab,
-coordinating the native NSViews for a specific TabContents.
-
-#### TabStripController
-
-The Objective-C controller, Mac specific, for managing the interaction between
-the TabStripModel and the Cocoa TabViews that comprise the user interface.
-Handles
-
-positioning and layout of the TabViews as well as the animations related to tab
-drag and drop and tab opening/closing. The controller is responsible for
-switching the visible tab to the correct TabContents/TabContentsController based
-on changes either in the TabStripModel or in response to a user clicking in a
-specific TabView. The controller handles changes from the tab model by
-registering a C++ observer.
-
-To match the model with the corresponding views, the controller keeps several
-parallel arrays which are normally in sync with the indices of the
-TabStripModel, but as described below in the section on animations, they
-sometimes are not. It is very important to not confuse the two array indexes and
-always use the conversion methods.
-
-#### TabWindowController
-
-The NSWindowController for a window that participates in dragging a tab between
-windows. It has the concept of a tab strip and a view that gets switched out
-when the tab selection changes. The controller also maintains an "overlay
-window" used during tab dragging so that parts of the window frame can be
-translucent. It should be reusable in other projects as there is nothing
-browser-specific about the API.
-
-## Tab Layout
-
-Tab layout is handled primarily by a single method,
--layoutTabsWithAnimation:renegerateSubviews:. This method performs several
-critical tasks:
-
-* Positioning, sizing, and animating the tabs, including not using all
- available space if rapidly closing tabs
-* Positioning and animating the New Tab Button (NTB), including
- showing and hiding it based on the status of a drag.
-* Handling the view z-ordering so tabs appear with a consistent
- overlap
-* Inserting an empty placeholder space during drag and drop
-* Animating a newly inserted tab
-
-Tab layout can be done both with and without animation. For example, there's no
-need to animate tabs before the initial layout has completed or to animate the
-first tab in a window. In general, however, any changes caused by user
-interaction or model changes are done with animations enabled.
-
-Tabs overlap by a small amount (about 20px) which means z-order becomes
-important. If not paid attention to, switching tabs and bringing them forward
-over other tabs can cause a haphazard appearance over time as the z-order
-becomes inconsistent across the tab strip. In order to address this, the
-subviews (TabViews) are removed and re-inserted into the view hierarchy in the
-correct z-order based on the regenerateSubviews parameter. Regenerating the
-views needs to be done when the tab model or selection changes, but doesn't need
-to be done when only the size and position of the tabs change (for instance when
-the window is resized).
-
-In order to size and position tabs correctly, the first order of business is to
-compute how much space is available which may not be the entire width if the
-user is quickly closing tabs. When the user closes a tab using the tab's close
-button, tabs to the right should shift left such that the next tab's close
-button ends up directly under the mouse. This allows the user to continue
-clicking rapidly to close a large number of tabs. A requirement for this to work
-is that the tabs do not change width until the user is done (signified by moving
-the mouse outside of the tab strip). As a result, during "rapid closure mode"
-the amount of available space for determining the width of tabs must remain
-consistent and thus the tabs won't change size even though their positions
-change during re-layout.
-
-The available width is also affected by (zero or more) pinned (fixed-width)
-tabs, as well as compensating for the amount of overlap between tabs. Finally,
-space is reserved for both the NTB and the window close/minimize/zoom controls.
-After space is allocated to pinned tabs, the remaining space is divided evenly
-among the remaining tabs, ensuring that tabs fit within a min and max width.
-When tabs get too small, it's the responsibility of the TabController to handle
-properly displaying only the elements that fit, such as hiding the title and
-only displaying the icon. Note that selected tabs have a slightly larger minimum
-width than unselected tabs, allowing enough room to display the close button.
-
-Tab layout is effectively a big for-loop that walks the array of TabControllers,
-laying them out in order from left to right with a bit of overlap. The size and
-positions are set on the corresponding TabView, or its animator if animations
-are requested. In they are, there is also some additional pre-flighting to avoid
-redundant calls to the animator when the view isn't moving. Once the tabs have
-been positioned, layout places the NTB at the far right, showing or hiding based
-on if a drag is in progress.
-
-During drag and drop, there's one more component to tab layout: the placeholder.
-A "placeholder tab" is an empty space representing where the tab would go were
-it to be dropped at the mouse location. Obviously, there can only be one of
-these at a time. If there is a placeholder tab (see below for how it's
-instantiated), leave a blank space corresponding to the width of the tab being
-dragged before moving on to positioning the next tab. Note that this width can
-be different than the width of tabs in the current window if the dragged tab
-comes from another window. Even though a wider placeholder might cause tabs at
-the far right to spill off the edge, it makes for a much improved user
-experience as the gap can be better associated with the dragged tab.
-
-## Tab Animations
-
-There are 3 causes of animation in the tab strip:
-
-* Tabs moving or resizing in response to model changes or the window
- resizing
-* A new tab
-* A closing tab
-
-Moving and resizing is described above in the section on layout, handled simply
-by sending the new frame size and position to the TabView's animator. In
-addition, handling a new tab is actually just a special case of layout. When a
-tab is identified as being new (new tabs are not visible by default), its
-TabView is made visible and positioned just below the tab strip. Then, as a part
-of normal layout, its animator is told the final location and it "submarines"
-into place.
-
-In general, there is a one-to-one correspondence between TabControllers,
-TabViews, TabContentsControllers, and the TabContents in the TabStripModel. In
-the steady-state, the indices line up so an index coming from the model is
-directly mapped to the same index in the parallel arrays holding the views and
-controllers. This is also true when new tabs are created (even though there is a
-small period of animation) because the tab is present in the model while the
-TabView is animating into place. As a result, nothing special need be done to
-handle "new tab" animation.
-
-This all goes out the window with the "close tab" animation. The animation kicks
-off in -tabDetachedWithContents:atIndex: after receiving the notifiation that
-the tab has been removed from the model. The simplest solution at this point
-would be to remove the views and controllers as well, however once the TabView
-is removed from the view list, the tab z-order code takes care of removing it
-from the tab strip and there will be no animation. That means if there is to be
-any visible animation, the TabView needs to stay around until its animation is
-complete. In order to maintain consistency among the internal parallel arrays,
-this means all structures are kept around until the animation completes. At this
-point, though, the model and our internal structures are out of sync: the
-indices no longer line up. As a result, there is a concept of a "model index"
-which represents an index valid in the TabStripModel. During steady-state, the
-"model index" is just the same index as the parallel arrays (as above), but
-during tab close animations, it is different, offset by the number of tabs
-preceding the index which are undergoing tab closing animation. Therefore, the
-caller needs to be careful to use the available conversion routines when
-accessing the internal parallel arrays (e.g., -indexFromModelIndex:). Care also
-needs to be taken during tab layout to ignore closing tabs in the total width
-calculations and in individual tab positioning (to avoid moving them right back
-to where they were).
-
-In order to prevent actions being taken on tabs which are closing, the TabView
-itself gets marked so it no longer will send back its select action or allow
-itself to be dragged. In addition, drags on the tab strip as a whole are
-disabled while there are tabs closing.
-
-When the CAAnimation for the tab close completes, it notifies its delegate,
-TabCloseAnimationDelegate. The delegate messages the TabStripController to
-remove the tab from all internal data structures and the indices are once again
-all back in sync.
-
-## Tab Drag and Drop
-
-## Tab dragging is one of the more complex aspects of the tab strip and its related classes, but most of the work is actually done within TabView, not the tab strip's controller. There are three basic phases to the dragging, handled by TabView's mouseDown:, mouseDragged:, and mouseUp:, but the main driver is a loop within mouseDown: that runs until the user releases the mouse button. mouseDown: handles both drags and regular clicks on a TabView. A simple click sends the view's action to its target, which selects the appropriate tab by updating the model. While the mouse button is down but is moving, the TabView repeatedly calls mouseDragged:. Once the mouse button is released, it calls mouseUp: to clean up and reset for next time.
-
-The first order of business when dragging a tab is determining if the user wants
-to move the entire window or if they want to drag one tab among many. The
-heuristic used here assumes that if there is only one tab in a window and there
-are no other windows in which this tab can be dropped, dragging the tab acts as
-if the user is dragging the background title bar. This simply extends the area
-in which the user can reposition the entire window.
-
-If the user is dragging a tab with the potential to drop it somewhere else, they
-can either reposition the tab within the same source window, or they can put the
-tab into a different destination window. Clearly, if there is only one tab in
-the source window, the former can not be the case, and it is assumed the
-destination will be in a different window.
-
-Assuming there are more than one tab in the source window, the drag begins in
-the mode of tracking a drag within the same source window. As the user drags the
-mouse back and forth, the TabView instructs the window's TabWindowController to
-insert a placeholder for the given tab at the appropriate mouse location. Doing
-so will force a layout which moves the dragged tab to the given location in the
-window and the tab will appear to "follow" the mouse as it moves back and forth
-with the other tabs getting out of its way should it overlap them too much. The
-animation comes for free as a part of the normal layout, described above.
-
-[<img alt="image"
-src="/developers/design-documents/tab-strip-mac/dragWithin2.png">](/developers/design-documents/tab-strip-mac/dragWithin2.png)
-
-If at any time the mouse leaves a certain boundary above or below the tab strip,
-the dragging code assumes the user wants to "tear" the tab out into its own
-window. This breaks out of the previous mode and enters the general mode where a
-tab (now a full-fledged window) can be dropped anywhere on the desktop or into
-another window. Detaching the tab creates a new Browser, complete with its own
-TabStripModel, containing the TabContents associated with the original tab. This
-allow it to maintain all its existing state and render processes (complete with
-animations!). Creating a new browser creates a new BrowserWindowController and
-all of the Cocoa objects that make a normal browser window and is a rather
-heavy-weight process. The source window is no longer the original from where the
-tab was dragged, but becomes the newly formed window.
-
-In this new mode, the visual appearance of the dragged window changes such that
-the background of the title bar is translucent but the tab and all the window
-contents are opaque. If the user moves the tab over a tab strip of a potential
-destination window, the title bar background disappears entirely to give the
-appearance that the tab can be part of the destination window. Also, as the user
-moves the mouse over a potential destination window, it will be brought to the
-front so its tab strip is not obscured by other windows.
-
-[<img alt="image"
-src="/developers/design-documents/tab-strip-mac/translucent.png">](/developers/design-documents/tab-strip-mac/translucent.png)
-
-This change in visual appearance is handled by the TabWindowController via an
-"overlay window" which re-parents the views of the tab strip, toolbars, content
-area, etc into a new (opaque) floating child window while the source window
-behind it becomes translucent. When the drag completes, the moving of views into
-the overlay is reversed and everything returns to the actual source window.
-
-When the user releases the mouse, there are three cases to check for:
-
-* User dropped the tab within the same window without leaving the tab
- strip
-* User dropped the tab in a different window (or possibly the same
- window but tore it off then put it back)
-* User dropped the tab on the desktop
-
-In the first case, there's nothing complicated to do as everything is within a
-single TabStripModel. When moving between windows, the TabContents of the
-dragged source window is added to the destination window's model at the given
-location. Finally, the last case doesn't require anything to be moved around at
-all because the TabContents was already moved into the new window when it was
-initially torn off. In the latter two cases, the overlay window must be cleaned
-up and the window appearance put back to normal. The ordering can be tricky with
-shadows and alpha values.
-
-One goal of the design of the tab dragging code was for it to be application
-agnostic. None of the classes involved are browser-specific and the TabView
-itself only makes calls to the TabWindowController of either the source or
-destination windows. Any handling of the Chromium-defined TabContents objects
-are performed by the BrowserWindowController, which clearly isn't intended to be
-shared. Hopefully one day these classes can move to GTM so they can be more
-easily re-used by other applications.
-
-## New Tab
-
-The process to create a new tab begins in the model, arriving at the
-TabStripController via its C++ observer bridge. First it creates a new
-TabContentsController and stores that in an array parallel to the model. Next,
-it creates a new TabController and inserts it into a similar parallel array.
-Note that the act of creating a new tab cancels "rapid closure mode", restoring
-the available width to the full amount. Finally, the controller broadcasts that
-the number of tabs has changed, then returns. This allows various parts of the
-user interface (such as the menu bar) to adjust for the new number of tabs in
-the key window.
-
-Tab layout is performed at different times depending on if the tab is created in
-the foreground or background. If in the background, layout is done immediately
-so the new tab appears. However, if the tab is created in the foreground, layout
-is deferred until the models notifies the controller to select the new tab. This
-is done because tab selection can change the width of (small) tabs and thus
-layout always needs to be done on tab selection. Waiting for selection avoids
-laying out the tabs twice in a row.
-
-Close Tab
-
-The process to close a tab is mostly the reverse of the "new tab" case, only
-that it's handled in multiple stages to allow for the animation to complete (as
-described above). The model notifies the controller via its observer bridge that
-a tab has been detached. Note that there is a notification that the tab is
-closing, but it is not used in this implementation. If the window should remain
-open because there are more tabs remaining, being the tab closing animation
-which will sync up all the data structures upon completion. If closing the final
-tab in a window, the window will be going away on its own so don't bother with
-animations and close the tab directly.
-
-Detaching also happens in the drag and drop case where a tab is being moved
-between windows. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/translucent.png.sha1 b/chromium/docs/website/site/developers/design-documents/tab-strip-mac/translucent.png.sha1
deleted file mode 100644
index 67675e41d96..00000000000
--- a/chromium/docs/website/site/developers/design-documents/tab-strip-mac/translucent.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0aa286b4399bfd463bd0e10d300fe4cb215c2ff5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/tabtastic-2-requirements/index.md b/chromium/docs/website/site/developers/design-documents/tabtastic-2-requirements/index.md
deleted file mode 100644
index 5e9117ca36b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/tabtastic-2-requirements/index.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: tabtastic-2-requirements
-title: Tabtastic 2 Requirements
----
-
-This page is a collection of requirements for the third generation Chrome
-tabstrip implementation.
-
-* live tab contents during dragging
-* full size dragged representations
-* frame fade transition during detach/attach
-* dragged representation places tab at relevant position in tabstrip
- (from jar)
-* ability to resume drag in tabstrip after attach
-* ability to resume drag in tabstrip after move from overflow UI
-* overflow UI capability
-* multiselect for drag and close
-* independent continuous animations (View::GetAnimator)
-* generic TabStrip baseclass that does not deal with TabContentses
-* BrowserTabStrip subclass that interacts with TabStripModel (and
- knows about TabContentses)
-* testing for Layout
-* general testable interface (View-Controller separation)
-* tests for drag and drop using testable interface
-* windows 7 integration for drag and drop targets at screen edges in
- lieu of the current Dock system that we use on Vista and below.
-
-P2s/3s:
-
-* pinned tabs
-* tab coloring
-
-Implementing a system capable of supporting all of this will require some tweaks
-to TabStripModel and a replacement of the existing Tab/TabRenderer/TabStrip/etc
-system.
-
-We should avoid adding new features/capabilities to the current tabstrip until
-this system is implemented \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/themes/index.md b/chromium/docs/website/site/developers/design-documents/themes/index.md
deleted file mode 100644
index 800d0f7fc44..00000000000
--- a/chromium/docs/website/site/developers/design-documents/themes/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: themes
-title: Themes
----
-
-If you want to write a theme, please see the documentation at:
-<http://code.google.com/chrome/extensions/themes.html>
-
-## Implementation
-
-Themes are installed and packaged as extensions - once installed, the theme
-specification is copied into your browser preferences, allowing users to
-override individual theme choices. This theme data is loaded and managed by
-browser_theme_provider.cc (which also handles telling everyone to repaint when a
-theme is applied).
-
-#### Theme provider
-
-The theme provider has the following interface:
-
-GetBitmapNamed(int id)
-
-This wraps ResourceBundle::GetBitmapNamed and provides themed images if they
-exist, falling back to the default ResourceBundle images otherwise.
-
-GetColor(int id)
-
-Returns an SkColor with the specified ID (see the list of ids in
-browser_theme_provider.h)
-
-#### Views Implementation
-
-All views have access to a theme provider through their GetThemeProvider()
-method - this returns the root widget's theme provider. In browser-ui land, the
-theme provider hangs off the profile, and the root widget is profile aware.
-
-In some cases, the root widget is not profile aware, and so you will have to
-inject the theme provider into the view. An example of this is tab_renderer.cc,
-which doesn't have access to the profile while in its dragged state. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/threading/index.md b/chromium/docs/website/site/developers/design-documents/threading/index.md
deleted file mode 100644
index c75ba8b1c80..00000000000
--- a/chromium/docs/website/site/developers/design-documents/threading/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: threading
-title: Threading
----
-
-[This page has moved to the source code
-docs.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/threading_and_tasks.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/threading/suble-threading-bugs-and-patterns-to-avoid-them/index.md b/chromium/docs/website/site/developers/design-documents/threading/suble-threading-bugs-and-patterns-to-avoid-them/index.md
deleted file mode 100644
index 9320f198dea..00000000000
--- a/chromium/docs/website/site/developers/design-documents/threading/suble-threading-bugs-and-patterns-to-avoid-them/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/threading
- - Threading
-page_name: suble-threading-bugs-and-patterns-to-avoid-them
-title: Subtle Threading Bugs and Patterns to avoid them
----
-
-Moved to
-<https://chromium.googlesource.com/chromium/src/+/lkcr/docs/subtle_threading_bugs.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/time-safety-and-readability/index.md b/chromium/docs/website/site/developers/design-documents/time-safety-and-readability/index.md
deleted file mode 100644
index b709566b521..00000000000
--- a/chromium/docs/website/site/developers/design-documents/time-safety-and-readability/index.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: time-safety-and-readability
-title: Time Safety and Code Readability
----
-
-As someone that's written a ton of code using the src/base/time classes, and
-have made significant contributions in src/base/time, there are "holes" where
-these types can be too-easily used in semantically incorrect ways. In addition,
-there are opportunities to improve readability.
-
-My "wish list" for changes (live document) follows:
-
-## One C++ class for each Clock/Timeline
-
-base::Time represents values that have been sampled/computed from the local
-system calendar clock. However, base::TimeTicks values may have come from
-several different clocks. A recent bug revealed the mixing of values from
-different clocks was actually happening in the code base, and this was resolved
-via <https://codereview.chromium.org/797893003/>. The solution eliminated the
-possibility of having separate "high-res" versus "low-res" clock sources for
-TimeTicks.
-
-Two other TimeTicks clock sources remain: "ThreadNow" time and "SystemTrace"
-time. We should provide separate classes for these so that compile-time checking
-enforces semantically correct time math.
-
-## Eliminate From/ToInternalValue()
-
-Code throughout Chromium subverts the compile-time type-checking of time math by
-illegally using these public methods. The code only works under an assumption
-that, internally, the time classes use a one-microsecond timebase with values
-stored internally in a 64-bit signed integer type. The stated purpose of these
-methods is only to allow (de)serialization of the time types (e.g., for IPC),
-and **not** to provide direct access to private members.
-
-These methods should be eliminated altogether and replaced with
-From/ToMicroseconds(). Code that (de)serializes time values should also simply
-use the From/ToMicroseconds() methods, since that is the highest-resolution
-timebase currently supported; and so (de)serialization can be performed without
-introducing any rounding error.
-
-## Fix Time::is_null() and TimeTicks::is_null()
-
-These methods make an incorrect assumption: That a zero-valued Time is the same
-as an "unset" or "undefined" Time. However, this has caused bugs abound (e.g.
-<https://crbug.com/447742>). The reason is because "negative" Time values can
-represent a point-in-time before epoch (e.g, kernel boot time for TimeTicks).
-These negative values can then increment over time and become zero at some
-point. This then fools code into thinking a Time value is "unset" when it has
-actually been assigned/incremented to zero.
-
-Instead of `0LL`, which is dirt-smack in the middle of the range of possible
-values, a boundary value should represent the "unset" value: `kint64min`. The
-default constructors for base::Time and base::TimeTicks should then initialize
-to `kint64min` as well. We will have to be careful that this does not break any
-assumptions in client code.
-
-## "Zero" TimeDelta Operations
-
-Currently, a lot of code does stuff like this:
-
-```none
-if (last_foo_offset_ < base::TimeDelta())
-  last_foo_offset_ = base::TimeDelta();
-...or...
-DCHECK_GT(duration, base::TimeDelta());
-...or...
-SetNetworkingDelay(base::TimeDelta());
-```
-
-These lines of code are poor for readability. Instead, the TimeDelta class
-should provide convenience methods for a global "zero" constant as well
-"compare-to-zero". Then, the example above becomes:
-
-```none
-if (last_foo_offset_.is_negative())
-  last_foo_offset_ = base::TimeDelta::Zero();
-...or...
-DCHECK(duration.is_positive());
-...or...
-SetNetworkingDelay(base::TimeDelta::Zero());
-```
-
-After migrating code to use the new convenience methods, a PRESUBMIT check
-should be added to make sure future code changes don't regress the code base.
-(Note: The no-arg base::TimeDelta constructor must remain public to allow for
-using this type in STL containers.) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/time-sources/index.md b/chromium/docs/website/site/developers/design-documents/time-sources/index.md
deleted file mode 100644
index 22d1fef6d7f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/time-sources/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: time-sources
-title: Time Sources
----
-
-Reliably figuring out what time it is on a machine operating in an untrustworthy
-environment is pretty difficult. Currently we use the following sources:
-
-1. The machine's realtime clock, if set
-2. htpdate(1) pointed at http://www.google.com
-
-Unfortunately, at first boot, the realtime clock may not be set well, and there
-exist platforms where the realtime clock does not persist across power cycles
-because it is not battery-backed. We need to get the right time on these
-machines, mainly to avoid attacks on TLS connections (by setting the date far
-enough backwards, an attacker might render a TLS certificate that expired valid
-again). Right now, htpdate(1) refuses to set the date to before the time it was
-built. There could also be attacks that are opened up by pushing the system
-clock far enough forward (e.g., causing various system daemons to see files on
-disk with an apparent modification time far in the future, or causing
-cryptohomes to not be expired as 'old' when they should be). Currently we have
-no real protection against these (admittedly limited-scope) attacks. Worse,
-without a reliable realtime clock, we're always fetching our system time from an
-unauthenticated source. We have had problems with this in practice - e.g.,
-captive portals that intercept HTTP traffic and return their own headers,
-sometimes with wildly bogus times in them.
-We should instead use the following sources:
-
-1. tlsdate(1) pointed at https://www.google.com
-2. A file stored in the stateful partition with the last known good
- time (from tlsdate) and the last known rtc time.
- * *The file system itself has a "last modified" timestamp that
- might be more straightforward -- jrbarnette*
- * *This can get tricky though as the mtime field could be updated
- for various reasons, some of which are susceptible to the
- aforementioned attack vectors. Having dedicated storage would be
- clear as to its meaning, and the micro optimization here
- probably doesn't gain much in trading off to complexity.*
-3. The machine's rtc
-
-Of these sources, we can always consider 1 authoritative if we do get a
-response, since we'll be doing SSL validation of the whole connection. For
-situations where we can't do 1 (for example, if we're behind a captive portal
-that is blocking our TLS connection), we can look at the machine's rtc and
-compare it against the file mentioned in 2; if the rtc is ahead of the file by
-some reasonable offset, we can trust the rtc and update the file. If the
-machine's rtc isn't ahead of the file (or is too far ahead), we probably have no
-reliable time sources and will have to fall back on setting our time to the last
-good time stored in the file.
-
-There are a couple of other sources we could try: on machines with a 3g modem,
-we might have access to the network time, but doing this is likely to be fraught
-with peril. There might be other pieces of hardware on the system (the TPM?)
-that have a notion of what time it is.
-
-There are some upsides of this crazy plan:
-
-1. Drop htpdate, which is about 850 lines of code that parses HTTP, in
- exchange for tlsdate, which is 500 lines of code that uses OpenSSL
- very carefully;
-2. Works on systems without rtcs
-
-An open question is whether we should accept tlsdate updates if TLS
-authentication of the connection fails. If we accept unauthenticated updates,
-we're vulnerable to clock manipulation in the interval (build time, build time +
-max offset), with max offset most likely being on the order of a few years, but
-we have a decent chance of getting an at-least-roughly-accurate time. If we
-reject unauthenticated updates, we may find ourselves in a situation where we
-have no reliable notion of the time at all, which would force us to default to
-the build time. Worse, having no reliable time might make it impossible to
-authenticate to a given captive portal. For a better UX, it's probably wise to
-just accept the untrusted time, clamping it to the boundaries as needed, since
-otherwise users might find themselves mysteriously unable to authenticate to a
-captive portal. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/tpm-usage/index.md b/chromium/docs/website/site/developers/design-documents/tpm-usage/index.md
deleted file mode 100644
index 9110148a614..00000000000
--- a/chromium/docs/website/site/developers/design-documents/tpm-usage/index.md
+++ /dev/null
@@ -1,295 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: tpm-usage
-title: TPM Usage
----
-
-[TOC]
-
-## Introduction
-
-This document describes the usage of a Trusted Platform Module (TPM) in Chrome
-devices (Chromebook or other form factors), including firmware, operating
-system, and applications. It assumes some knowledge of Chrome OS concepts as
-well as TPM functions. It may be of interest to Chromium OS developers who want
-to use the TPM and to users who wish to understand the usage of the TPM in
-Chrome OS.
-
-Chrome OS uses the TPM for these tasks:
-
-* Preventing software and firmware version rollback
-* Maintaining information to detect transitions between normal and
- developer modes
-* Protecting user data encryption keys
-* Protecting certain user RSA keys (‘hardware-backed’ certificates)
-* Providing tamper evidence for installation attributes
-* Protecting stateful partition encryption keys
-* Attesting TPM-protected keys
-* Attesting device mode
-
-The TPM is not directly available outside of Chrome OS for any purpose; that is,
-no remote computer has access to the TPM.
-
-Chrome OS does not use the TPM for the following:
-
-* Trusted boot - the TPM is not used as part of the Chrome OS verified
- boot solution.
-* Hardware-strength platform configuration reporting. See [Attesting
- Device
- Mode](/developers/design-documents/tpm-usage#TOC-Attesting-Device-Mode)
- for more details.
-* Whole-disk encryption or similar. In particular, the TPM is not used
- to unwrap an encryption key during the boot process.
-
-The rest of this document first discusses the four different modes of operation
-of Chrome devices; then it describes how Chrome OS controls TPM ownership; and
-finally it presents each area of TPM usage in detail.
-
-## Modes of Operation
-
-A Chrome device can be booted in four different modes, corresponding to the
-settings of two switches (physical or virtual) at power on. They are the
-developer switch and the recovery switch. They may be physically present on the
-device, or they may be virtual, in which case they are triggered by certain key
-presses at power on. When both switches are off, the boot is called normal mode
-boot. When the developer switch is on, it is called developer mode boot. When
-the recovery switch is on, it is called recovery mode boot (and normal-recovery
-or developer-recovery when there is a need to distinguish them).
-
-These modes give users a choice between a high degree of security or complete
-control over the device. In normal mode, the device is running a Google-provided
-copy of Chrome OS, which cannot be altered (assuming the hardware has not been
-tampered with). In developer mode, users can run a modified copy of Chromium OS
-(or any other supported operating system), though without some of the Chrome OS
-security defenses. The recovery modes allow for installation of Chrome OS or
-Chromium OS from recovery media.
-
-## TPM Ownership and Restrictions
-
-Most of the TPM functionality becomes available after a TPM owner is
-established. In normal mode, Chrome OS attempts to establish a TPM owner with a
-random password, which is generated only after the owner of the Chrome device
-starts using it. When the owner password is created, there is a period of time
-in which the user can find out what it is and write it down. After this period,
-the password is destroyed. However, knowledge of the owner password is not
-necessary at any point in Chrome OS.
-
-Under certain conditions, the TPM owner will be cleared, rendering keys
-currently protected by the TPM useless (and therefore the data protected by
-those keys unrecoverable). These conditions are as follows:
-
-* On the first power-on after switching to developer mode, the TPM is
- cleared by the firmware before the OS kernel begins booting.
-* On the first power-on after switching to normal mode, the TPM is
- also cleared by the firmware before the OS kernel begins booting.
-* During a recovery mode boot in normal mode, a Chrome OS recovery
- image will clear the TPM before the device is rebooted.
-* Some Chrome devices allow the system (or, if in developer mode, the
- user) to explicitly request that the TPM owner be cleared on the
- next reboot.
-
-When a non-Chrome OS image is booted in developer mode, it is up to that
-user-installed OS to decide whether or not to take ownership, or do anything at
-all with the TPM. The user-installed system, for example, may create additional
-TPM NVRAM spaces other than those that Chrome OS creates (e.g., see [Rollback
-Prevention](/developers/design-documents/tpm-usage#TOC-Rollback-Prevention)
-below).
-
-Note the following developer mode restrictions on the TPM:
-
-* The TPM physical presence command is disabled by the read-write
- firmware on every boot. This means that physical presence cannot be
- asserted even by a custom OS.
-* The NVRAM firmware space (see [Rollback
- Prevention](/developers/design-documents/tpm-usage#TOC-Rollback-Prevention)
- below) cannot be removed.
-* The NVRAM kernel space (see [Rollback
- Prevention](/developers/design-documents/tpm-usage#TOC-Rollback-Prevention)
- below) can be removed, but doing so will result in the firmware
- forcing recovery mode at the next boot.
-
-In the event that the NVRAM kernel space is removed, the device will only boot a
-Google-provided recovery image, which will try to reconstruct that space. Chrome
-OS recovery will aggressively destroy other spaces as needed to make room.
-
-## Rollback Prevention
-
-The normal boot process of a Chrome device follows a chain of trust, in the
-following order:
-
-1. Read-only section of firmware (set during factory installation and
- unchangeable in software)
-2. Upgradable section of firmware (called read-write firmware)
-3. Kernel
-4. Programs and services that comprise the operating system
-
-Each link in the chain is responsible for verifying that the next link has not
-been tampered with before yielding control to it.
-
-Read-write firmware and kernel can be updated, either manually (through a
-“recovery” process) or automatically. For security, the automatic update process
-does not allow updating to versions of the software that are older than the
-current one. This prevents “remote rollback attacks,” in which a remote attacker
-replaces newer software, through a hard to exploit vulnerability, with older
-software, with a well-known and easy to exploit vulnerability.
-
-To prevent remote rollback attacks, Chrome devices reserve two small NVRAM
-spaces in the TPM to store version numbers and other information. These NVRAM
-spaces are called “firmware space” and “kernel space.” They are created during
-factory initialization and are never removed. (The kernel space can be removed
-in developer mode, but the firmware space cannot. Also note that a Chrome OS
-recovery image will try to recreate the kernel space, possibly removing other
-spaces to make room.)
-
-The firmware space contains the read-write firmware version number (among other
-things). It is created with permission TPM_NV_PER_GLOBALLOCK |
-TPM_NV_PER_PPWRITE, and is locked by setting the TPM bGlobalLock bit. On a
-normal boot, this space is locked by the read-only firmware, possibly after
-updating it to reflect the version of the verified read-write firmware
-installed. As mentioned, this update may only replace the current version number
-with a larger one.
-
-The kernel space contains the kernel version number. It is created with
-permission TPM_NV_PER_PPWRITE. On a normal boot it is locked by turning off and
-locking physical presence in the read-write firmware. As in the case of the
-firmware space, the read-write firmware will update this number to the version
-number of the current kernel.
-
-On a recovery boot (either in normal or developer mode), neither the firmware
-nor the kernel space is locked. Therefore the recovery image can bypass the
-anti-rollback mechanism. Bypassing the anti-rollback mechanism is allowed
-because there are legitimate cases in which it is desirable to install older
-versions of the system, as long as this rollback does not happen without the
-knowledge of the user.
-
-## Protecting User Data Encryption Keys
-
-User data in Chrome OS is encrypted when stored on the disk using the eCryptfs
-stacked filesystem. When a user logs in for the first time, two random 128-bit
-AES keys are generated. One key is used by eCryptfs to encrypt file names, and
-the other is used to encrypt file content. These keys are managed locally; they
-are not escrowed outside of the Chrome device. This allows users to log in and
-access their data while offline and also means that the keys never need to leave
-the device. However, this feature also necessitates a strong method of
-protecting these keys from disclosure as they are stored in a persistent file on
-disk.
-
-Chrome OS uses the TPM to make parallelized attacks and password brute-forcing
-difficult. One feature and one characteristic of the TPM are exploited here.
-First, the TPM provides secure key storage for RSA keys. This means that the
-private key only exists in plain text while it resides on the TPM itself--it can
-only be stored outside of the TPM in encrypted form. This feature makes
-parallelizing difficult: decrypt operations involving that key must happen on
-the TPM itself (unless a vulnerability exists whereby the attacker can obtain
-the plain-text private key of a TPM-wrapped RSA key). Second, the TPM is a
-relatively slow device. Private key operations can take over half a second to
-complete; this provides a level of brute-force protection by effectively
-throttling the rate at which guesses can be made.
-
-To protect the user keys, Chrome OS creates a system-wide RSA key wrapped by the
-TPM’s Storage Root Key (SRK) on first boot. When storing a particular user’s AES
-keyset, Chrome OS encrypts the keyset using a random symmetric key. That
-symmetric key is encrypted using the system-wide RSA key. To tie the decryption
-to a user secret, 128 bits of this encrypted blob are encrypted a second time
-using a key derived from the user’s login password. Since this step is done
-without padding, any decryption must blindly decrypt those 128 bits and then
-decrypt the entire blob on the TPM before knowing if the decryption process (and
-therefore the password) was correct. Using this method (over per-user TPM keys
-requiring authentication) has the benefit of avoiding the TPM’s dictionary
-attack defense, which is overly aggressive for use during user login.
-
-There are two important implications to the use of the TPM to protect user data:
-
-* If the TPM is cleared, user data protected by it cannot be
- recovered. In this case, Chrome OS removes user data.
-* If the TPM is somehow disabled or faults, user data cannot be
- accessed. Chrome OS will fail logins for existing users until the
- TPM is enabled.
-
-## Protecting Certain User RSA Keys
-
-Chrome OS implements TPM-backed cryptographic services via the Chaps PKCS #11
-component. (More information about Chaps can be found in the [Chaps Technical
-Design](/developers/design-documents/chaps-technical-design).) RSA private keys
-generated or imported into a Chaps PKCS #11 token with a modulus size supported
-by the TPM (typically up to 2048 bits) will be wrapped by the TPM Storage Root
-Key (SRK). Each user account on the device has a distinct token. A user can
-import a certificate and private key into his TPM-backed token by using the
-‘Import and Bind’ operation available in Chrome’s certificate manager. Also, any
-keys generated using the Webkit ‘keygen’ tag will use the TPM-backed token by
-default.
-
-RSA private keys that are not supported by the TPM and all other PKCS #11 data
-(certificates, public keys, data objects, TPM-encrypted key blobs, etc.) are
-encrypted with a symmetric key and stored in /home/chronos/user/.chaps. This
-symmetric key is itself encrypted using a TPM-backed key which requires a value
-partially derived from the user password for authorization. Thus, a user’s Chaps
-token can only be decrypted if both the TPM and the user password are available.
-
-## Tamper-Evident Installation Attributes
-
-The first time a device is used, a set of installation attributes is stored on
-the device and remains tamper-evident for the remainder of the install (i.e.,
-until the device mode changes). If a device has been enterprise enrolled, as
-evidenced by a ribbon with text like “This device is owned by yourcompany.com,”
-then the installation attributes correspond to this enrollment. If not, the set
-of attributes is empty. Either way, the tamper-evidence for the set of
-attributes is implemented by computing a salted hash of the attributes and
-storing the random salt and the hash in TPM NVRAM with TPM_NV_PER_WRITE_DEFINE
-permissions (i.e. read-only until destroyed by the TPM owner). The hash can then
-be verified at any time to ensure the attributes have not been modified. This
-tamper-evident container is referred to as the “lockbox.”
-
-## Stateful Partition Encryption
-
-Some parts (e.g., /var, /home/chronos) of the stateful partition are encrypted
-using dm-crypt. The encryption key is randomly chosen via the TPM’s RNG on first
-boot and is encrypted by a TPM-held “system key” (read from TPM NVRAM during
-startup). This system key is actually the random salt used for hashing
-installation attributes.
-
-## Attesting TPM-Protected Keys
-
-If an RSA private key has been generated in the TPM and has always been
-non-migratable, then the key may be certified by a key that has been verified as
-an Attestation Identity Key (AIK). No key, including any AIK, is certified
-unless the user or device-owner has consented to remote attestation of his or
-her device. A certified key credential gives very strong assurance that the key
-is protected by a Chrome Device TPM.
-
-## Attesting Device Mode
-
-At boot time, the read-only firmware extends TPM PCR0 with the status of the
-developer and recovery mode switches. The value of PCR0 can later be quoted
-using a key that has been verified as an Attestation Identity Key (AIK). The
-quote, in combination with the AIK credential, gives assurance that the reported
-PCR0 value is accurate. While assurance of the PCR0 value is very strong,
-assurance that this correctly reflects the device mode is weaker because of the
-reliance on read-only firmware to extend PCR0. It is nonetheless useful for
-reporting policy compliance. This PCR0 quote is not available outside of Chrome
-OS unless the user or device-owner has consented to remote attestation of the
-device.
-
-## Chrome OS-Specific TPM Configuration
-
-Under Chrome OS, there are a few configuration settings for the TPM that may
-differ from other operating systems:
-
-* TPM ownership, as discussed above, is automatic and random. While
- the user may choose to write the random owner password down, it is
- never used. Rather, TPM ownership is established merely to enable
- the cryptographic features (such as using keys wrapped directly or
- indirectly by the SRK) that Chrome OS uses in the TPM.
-* The Storage Root Key (SRK) is unrestricted so that it can be used
- without the owner password. Since the TPM is used as a generic
- cryptographic device, and Chrome OS manages clearing the TPM in
- firmware as necessary, unrestricted use of the SRK is allowable.
-* In Chrome OS, the TPM is only used locally on the Chrome device.
- Chrome OS uses TrouSerS for communication with the TPM, which has
- been patched to use a UNIX domain socket instead of a TCP socket.
-* Under Chrome OS, physical presence is disabled on every boot by the
- read-write firmware. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/translate/index.md b/chromium/docs/website/site/developers/design-documents/translate/index.md
deleted file mode 100644
index 40c18ebefd9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/translate/index.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: translate
-title: Translate
----
-
-## Objective
-
-The great thing about the web is that it lets people from all over the world
-share information and ideas. Unfortunately that information is sometimes in a
-language the user does not understand.
-The goal of the Translate feature is to provide a way for users to translate a
-page's text when it is not in the same language as the one Chrome is configured
-with.
-
-## Overview
-
-The Translate feature works in conjunction with the Google Translate server,
-which is actually responsible for translating the page.
-Here is the basic scenario of a page translation:
-
-* the user visits a page in a different language
-* once the page has been loaded, the renderer extracts the text from
- the page and detects which language it's in and sends it to the
- browser process
-* the browser compares the page language to the language it is
- configured with. If they are different it shows an infobar with a
- button to translate the page
-* if the user clicks that button, the browser download a script for
- translating the page from the Google Translate server and sends it
- to the renderer
-* the renderer injects the script in the page and instructs it to
- translate the page
-* the render keeps polling the script for when translation is complete
- or if it has failed, and forward that notification to the browser
-* the browser displays an infobar to report that the page has been
- translated or that the translation failed
-
-## Detailed typical scenario
-
-### Page language detection
-
-The renderer already extracts the text from each loaded page for indexing
-purpose (so that users can look for pages they visited based on words these
-pages contain). The language detection piggy-backs on that process. Once the
-text has been extracted for indexing, a third-party library called CLD (Compact
-Language Detection) is used to detect the language.
-Note that the language detection is fairly fast but may not always be accurate
-for certain pages.
-The page language is then sent along with the page's text to the browser in the
-ViewHostMsg_PageContents IPC message.
-
-### Exception to the translation
-
-Some pages may not want to be translatable. They might provide their own
-translation mechanism (for example GMail) or may not be good target for
-translation (heavy dynamic sites). To disable translation, they need to include
-a specific meta tag (name "google", content should be "notranslate").
-Whether the page should be a candidate for translation is also provided with the
-ViewHostMsg_PageContents IPC message that is sent by the renderer.
-
-### Prompting the user for translation
-
-Once the ViewHostMsg_PageContents IPC message is received by the browser, the
-TabContents sends a TAB_LANGUAGE_DETERMINED notifications. The TranslateManager
-receives that notifications and shows the translate infobar to the user if
-applicable. There are several transate related infobars (before translation,
-during translation, after translation, error when translating). All these
-infobars are controlled by the same delegate TranslateInfobarDelegate, which has
-a type to determine which type of infobar it is.
-
-### Initiating the translation
-
-If the user requests the page to be translated, the TranslateManager first needs
-to download the translate script from the Google server. The download script is
-cached in the TranslateManager so it can be reused for future translations. We
-do expire and refetch the script once a day, to ensure that newer versions of
-that script are downloaded for people with long running browser sessions. The
-TranslateManager then sends a ViewMsg_TranslatePage IPC message to the renderer
-to start the translation. The translate script is passed along, with also the
-original language and language the page should be translated to.
-
-### Translating the page
-
-On receiving the translate script, the renderer injects it in the page and start
-the translation (see TranslateHelper::StartTranslation() ).
-For security reasons, we do not want to the page contents to be able to notify
-the renderer directly. So we poll the state of the translation regularly until
-we are notified the translation is complete or has failed (see
-TranslateHelper::CheckTranslateStatus()). Once we have been notified of such an
-event, TranslateHelper sends a ViewHostMsg_PageTranslated message to the browser
-which displays the "after translate" infobar to indicate to the user that the
-translation was performed. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-development-practices/index.md b/chromium/docs/website/site/developers/design-documents/ui-development-practices/index.md
deleted file mode 100644
index 75fd944e227..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-development-practices/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: ui-development-practices
-title: UI Development Practices
----
-
-Guidelines
-
-Principles for developing for Chrome. These best practices center around
-ensuring features are implemented as efficiently as possible.
-
-## Content Area (UI in a Tab)
-
-The UI that lives in the content area should be implemented with HTML
-technologies on desktop platforms. (Either web or native can be used for the
-content area UI on Android and iOS.) This HTML can be either WebUI or plain HTML
-and JS bundled with Chrome. It should work with no connection and lo-fi
-connections. The expectation is that the implementation does not contain
-polyfills, code that only executes for other browsers, or arcane Web development
-practices.
-
-## Non-Content Area (UI in Popups or in Chrome’s Chrome)
-
-UI outside of the content area should be implemented using
-[Views](https://code.google.com/p/chromium/codesearch#chromium/src/ui/views/)
-(in C++) for Windows/Linux/ChromeOS. Mac UI is done with Cocoa although work is
-progressing on porting Views to it as well. The expectation is that UI of this
-style is limited to small, transient windows with low-complexity UI. On Clank,
-this UI should be implemented using the Android View system.
-
-## Manipulating DOM on Arbitrary Pages
-
-Some features need to inspect or modify the DOM of the current tab, which can be
-any arbitrary website. Blink's Web\* C++ API is intentionally simple and limited
-to guide you to use it only for what is practical. When Blink’s C++ API is
-impractical, use [isolated
-world](https://cs.chromium.org/chromium/src/content/public/browser/render_frame_host.h?q=ExecuteJavaScriptInIsolatedWorld&sq=package:chromium&dr=CSs&rcl=1467300303&l=130)
-script injection. The script injected should be as lean as possible and should
-not contain any code that deals with other browsers (for example Closure).
-
-Because script injection carries a runtime and memory cost, it is expected that
-it is driven by a user action that has an expectation of work. A good example is
-‘translate’. If inspecting every page that the user might open is required,
-script injection is not recommended. For this case, consult with
-chrome-eng-review@ for an appropriate solution. For example, reader mode
-[converted](https://crbug.com/509869) the triggering logic from script injection
-to native implementation.
-
-## Prototyping and Exploring the Solution Space
-
-Experimenting can be accomplished with an extension. Non-confidential features
-can be published on the Chrome Web Store and installed manually for early
-testing. Confidential extensions can be enabled only for trusted testers so they
-are invisible to the public. Extensions can use content scripts to do script
-injection and can use page actions and browser actions to provide UI outside the
-content area. Extensions can also use NaCL, which has full access to the Pepper
-API.
-
-Component extensions (i.e. extensions automatically installed into Chrome) are
-also a prototyping option, but should only be used if there is something needed
-that a regular extension cannot do. Extensions should strive to only execute on
-explicit user action and never on startup. Persistent background pages should be
-avoided. Event pages should only be used for infrequent items like push
-messaging, hardware events, alarms etc…, but not common events like navigation.
-If you need to do something that imposes a constant load or requires updating
-state on each navigation, consult the extensions team; they might be able to
-provide a declarative API so the job can be done with low impact. Failing that,
-consult with chrome-eng-review@ if you need to deviate from these guidelines. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-localization/index.md b/chromium/docs/website/site/developers/design-documents/ui-localization/index.md
deleted file mode 100644
index 9630d9f8156..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-localization/index.md
+++ /dev/null
@@ -1,330 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: ui-localization
-title: Add & translate strings (aka 'Localization' or 'Translations')
----
-
-**Help improve our translations:**
-* **[File a bug](https://bugs.chromium.org/p/chromium/issues/entry?template=Translation%20Issue)** using the translation template; CC "chromelocalization@google.com"
-* **[Provide translations](https://davidplanella.org/chromium-opens-to-community-translations-in-launchpad/)** for the chromium-browser package on Ubuntu
-
----
-
-[TOC]
-
-Chromium uses [GRIT](/developers/tools-we-use-in-chromium/grit) for managing its
-translated strings in grd/grdp files.
-
-Base messages are written in U.S. English (en-US) and are translated into
-supported language locales by an internal Google Localization process.
-Translations are submitted to the chromium
-[.xtb](https://source.chromium.org/search?q=android%20file:%5C.xtb&sq=&ss=chromium)
-files after a few weeks.
-
-Strings are included on all platforms by default and will needlessly increase
-the download size if they're not used. It's important to judiciously surround
-strings with appropriate &lt;if&gt; clauses to ensure that they are only
-included on the platforms where they're actually used.
-
-### How strings get translated
-
-1. Strings get added to a .grd(p) file in en-US.
-2. \[BlackCloudOfMagic\] Translators are provided with the new strings.
-3. &lt;Googler-only link&gt; Further internal detail about the
- translation process
- [here](https://sites.google.com/a/google.com/chrome-pmo/tasks/l13n).
- &lt;/Googler-only link&gt;
-4. \[BlackCloudOfMagic\] Translations are created and stored in .xtb
- files
-5. Changes to .xtb files are submitted to the Chromium source tree
-
-## Add a string
-
-If you're developing for Mac, also see notes on [how to add strings for Chrome on Mac](/developers/design-documents/ui-localization/mac-notes).
-
-1. Check whether the string you need already exists. If you find a
- matching string, read the description to see how it's intended to be
- used, and leverage it if you can. Otherwise, continue.
-2. Add the string to the grd file (`generated_resources.grd`,
- `webkit_strings.grd`, `chromium_strings.grd` or
- `google_chrome_strings.grd`).
- * See tips on [writing better user-facing strings](/user-experience/ui-strings).
-3. Include
- [screenshots](/developers/design-documents/ui-localization#add-a-screenshot),
- [meanings](/developers/design-documents/ui-localization#use-message-meanings-to-disambiguate-strings),
- and
- [descriptions](/developers/design-documents/ui-localization#write-good-descriptions)
- for all strings. This is crucial for high-quality translations.
-4. Use [ICU message syntax](https://unicode-org.github.io/icu/userguide/format_parse/messages/) to
- accommodate plurals and gender.
-5. As needed, surround the string with an appropriate &lt;if&gt; clause
- to ensure that it's only included it on platforms where it's
- actually used (e.g., Mac and Linux); this avoids needlessly
- increasing the download size. Strings used on all platforms can omit
- the &lt;if&gt; clause.
-6. The next time you build the solution, this will automatically add
- the en-US string.
-7. In your code, include `ui/base/l10n/l10n_util.h` and
- `chrome/grit/generated_resources.h`.
-8. To get the string, use `l10n_util::GetStringUTF16`. Alternately, you
- can use `l10n_util::GetStringFUTF16` which will replace placeholders
- $1 through $4 with the extra arguments of GetStringFUTF16. Note that
- we generally prefer to use UTF-16 encoded strings for user-visible
- text.
-9. Deal with message placeholder content. Example:
-
- ```
- Hey <ph name="USER">%1$s<ex></ex></ph>, you have <ph name="NUMBER"><ex>10</ex>$2</ph> messages.
- ```
-
-## Add an Android/Java string
-
-1. Check whether the string you need already exists. If you find a
- matching string, read the description to see how it's intended to be
- used, and leverage it if you can. Otherwise, continue.
-2. Add the string to the grd file in the Java folder (e.g.
- `content/public/android/java/strings/android_content_strings.grd`).
- Strings should be named in all caps with the prefix `IDS_`. For
- example: `IDS_MY_STRING`.
- * See tips on [writing better user-facing strings](/user-experience/ui-strings).
-3. Include
- [screenshots](/developers/design-documents/ui-localization#add-a-screenshot),
- [meanings](/developers/design-documents/ui-localization#use-message-meanings-to-disambiguate-strings),
- and
- [descriptions](/developers/design-documents/ui-localization#write-good-descriptions)
- for all strings. This is crucial for high-quality translations.
-4. At build time, an Android-style strings.xml file will be generated
- in the out directory.
-5. You can reference these strings in Java code using the standard
- `R.string.my_string` syntax, or in Android layouts using
- `@string/my_string`. Note: the name is lowercase and the `IDS_` prefix
- is stripped.
-6. Deal with [special characters](https://developer.android.com/guide/topics/resources/string-resource#FormattingAndStyling).
-7. Deal with message placeholder content. Example:
-
- ```
- Hey <ph name="USER">%1$s<ex></ex></ph>, you have <ph name="NUMBER"><ex>10</ex>$2</ph> messages.
- ```
-
-## Add a new grd(p) file
-
-This should be rare. We want to be very careful about expanding the number of
-grd(p) files in our source tree.
-
-**General notes:**
-
-* New grdp files need to be referenced from a parent grd file.
-* If the resources will be referenced from C++ code, make sure to do
- the following actions. This doesn't impact the translation process,
- but your new grd file won't compile without them.
- * New grd files need to be added to `/src/tools/gritsettings/resource_ids`
- * New grd files need to have a rule added to
- `/src/chrome/chrome_resources.gyp`. During `gclient sync`, these
- grit rules are run, and your grd's `.h` file will be generated.
- This file should be included by any `.cc` file that references
- your strings.
-
-**Notes for translation:**
-
-* New grd files need to be added to
- `/src/tools/gritsettings/translation_expectations.pyl` (or
- &lt;message&gt;s won't be translated).
-* If your new grd(p) will result in new XTB files after translation,
- you must commit placeholder .xtb files or else Chrome won't compile.
- The placeholders need to have a basic xml structure. Example for
- creating the XTBs:
-
- ```
- > for lang in fr de en-GB etc; do echo '<?xml version="1.0" ?><!DOCTYPE translationbundle><translationbundle lang="'$lang'"></translationbundle>' > foo_strings_$lang.xtb; done
- ```
-
-* If your new grd will NOT be translated (set in
- translation_expectations.pyl and no XTB placeholder files required
- above), there is very minimal XML content required in your grd.
- Example:
-
- ```
- <?xml version="1.0" encoding="utf-8"?>
- <!--
- This file contains all "about" strings. It is set to NOT be translated, in translation_expectations.pyl. en-US only.
- -->
- <grit base_dir="." latest_public_release="0" current_release="1"
- source_lang_id="en" enc_check="möl">
- <outputs>
- <output filename="grit/about_strings.h" type="rc_header">
- <emit emit_type='prepend'></emit>
- </output>
- </outputs>
- <release seq="1" allow_pseudo="false">
- <messages fallback_to_english="true">
- <message name="IDS_NACL_DEBUG_MASK_CHOICE_DEBUG_ALL">
- Debug everything.
- </message>
- </messages>
- </release>
- </grit>
- ```
-
----
-
-## Give context to translators
-
-### Add a screenshot
-
-Screenshots of Chrome's UI strings can provide more and clearer context for our
-translators. Requests for screenshots make up at least 5% of localization bugs.
-
-Follow the steps at
-[**https://g.co/chrome/translation**](https://g.co/chrome/translation) to add a
-screenshot to correspond with your strings.
-
-### Use message meanings to disambiguate strings
-
-**When?** Existing translations are reused when a new message matches an
-existing one. We rely heavily on reused translations to keep our localization
-costs manageable. If your string has a specific need to be treated differently
-than existing strings with identical text (because of a unique context or new
-restrictions like length or capitalization), add a meaning attribute. Messages
-with different meaning attributes will be translated separately. Adding a
-meaning to an existing string will trigger a retranslation.
-
-The meaning attribute may specify a need for disambiguation, due to:
-
-* The nature of the message (e.g., action, description, accessibility,
- ID)
-* The nature of the word (e.g., noun, adjective, verb). For example,
- "click" may be translated to "clic" or "clique" depending on
- context.
-* Any constraints (e.g., length)
-* Any homonymy disambiguation
-* Don't include: General context for the message (that should go in
- the description attribute)
-
-**How?** In the example below, we want to apply specific capitalization rules,
-so we can't reuse the existing translation. We added a meaning to the string so
-that the automated Translation Console tool disambiguates this string. The
-meaning's details will help future Chromium contributors understand the
-difference among identical strings; however, the translators will not see the
-`meaning` attribute:
-
-```
-<message name="IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED"
- meaning="In Title Case for Apple OS"
- desc="In Title Case: Title of the bubble after bookmarking a page.">
- Bookmark Added!
-</message>
-```
-
-### Write good descriptions
-
-**Why?** The message description is a critical piece of context our translators
-receive when translating UI strings. Translators see each string in isolation
-and in a random order: they don't know which feature the string is associated
-with, where it might appear on a page, or what action it triggers. Adding enough
-context to each string in a project increases the speed, accuracy, and quality
-of translations, which ultimately improves user satisfaction. For example,
-of the following code:
-
-```
-<message name="IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED"
- desc="In Title Case: Title of the bubble after bookmarking a page.">
- Bookmark Added!
-</message>
-```
-
-the translator would only see:
-* "In Title Case: Title of the bubble after bookmarking a page."
-* "Bookmark Added!"
-
-
-**How?** Add as much of the info below in the message description as would be
-useful:
-
-* Location: Button, title, link, drop-down menu, etc.
-* Grammar: Is this a noun or a verb? If it's an adjective, what is it
- describing?
-* Audience: Who is the intended audience?
-* Causality: What causes this message to appear? What is the next
- message that will appear?
-* Placeholder: What do the placeholders mean? What are a few values
- that your placeholder may display? If you have multiple
- placeholders, do they need to be arranged in a certain way? Will
- this message replace a placeholder in another message?
-* Length: Does this message have to have fewer than some number of
- characters? (For example, mobile products have limited UI space.)
- How should line breaks be dealt with? Are there character limits per
- line?
-
-Keep in mind that the translators will not know the product as well as you do,
-and they work on multiple products and projects. Also, they're not engineers.
-So make sure that the description will be understandable by a more general
-audience and doesn't contain too much technical detail. Imagine giving this
-description out of context to a person who isn't on your project, like your
-cousin. Would they still understand it?
-
-Note: changing a message description without changing the message itself or
-adding a meaning attribute does not trigger a retranslation of a string.
-
-**Examples of good message descriptions:**
-
-* **Source text**: "US city or zip" <br>
- **Description**: The message is displayed in gray in an empty search box for
- a movie showtimes location. Localize by country to name city and optional
- postal code. <br>
- **Comment**: This description clearly explains where the source text appears
- in the UI, and gives instructions on how the message should be adapted
- for non-US locales. <br>
-
- <br>
-
-* **Source text**: "Zoom" <br>
- **Description**: Clicking the Zoom menu command launches help on how to zoom.
- Try to limit translations to 10 characters. <br>
- **Comment**: A thorough description tells what the source text plays does,
- what it triggers, and states a character limit as well as a rationale. <br>
-
- <br>
-
-* **Source text**: "Account budget increased" <br>
- **Description**: This text is the placeholder in the sentence 'PLACEHOLDER
- from X to Y' <br>
- **Comment**: Since the string is only part of a sentence, this description
- provides essential information about context, and alerts the translator
- that it will appear as part of a longer UI message. <br>
-
- <br>
-
-**Examples of poor message descriptions:**
-
-* **Source text**: "All" <br>
- **Description**: The word "All" in the phrase "Select: All None" <br>
- **Comment**: Good immediate context, but unclear what "all" refers to. <br>
- **Suggested description**: Appears in the phrase "Select: All None" and
- refers to message threads. <br>
-
- <br>
-
-* **Source text**: "PLACEHOLDER from X to Y" <br>
- **Description**: Describes account budget changes <br>
- **Comment**: It is not clear what the placeholders are used for. <br>
- **Suggested description**: Describes account budget changes; PLACEHOLDER is
- one of "account budget increased" or "account budget decreased"; X and Y
- are both dollar amounts. <br>
-
- <br>
-
-* **Source text**: "We could not send your message. A space alien ate it. Please
- try again in a few minutes." <br>
- **Description**: A funny error message. <br>
- **Comment**: Translators will translate the message literally, so if they
- should be creative, the message description should let them know that.
- Also, "space alien" may not be culturally appropriate. <br>
- **Better Description**: An error message. Since humor varies across
- cultures, use an appropriate translation for the error. It doesn't have
- to be a direct translation. <br>
-
- <br>
diff --git a/chromium/docs/website/site/developers/design-documents/ui-localization/mac-notes/index.md b/chromium/docs/website/site/developers/design-documents/ui-localization/mac-notes/index.md
deleted file mode 100644
index 0e68100c99f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-localization/mac-notes/index.md
+++ /dev/null
@@ -1,264 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-- - /developers/design-documents/ui-localization
- - Add & translate strings (aka 'Localization' or 'Translations')
-page_name: mac-notes
-title: Mac Notes
----
-
-[TOC]
-
-keywords: i18n, internationalization, l10n, localization
-
-## Mac Chromium UI Localization
-
-In a nutshell, Apple's model for localizing a UI is to use .lproj directories
-and localize your xib files for each language. This way the UI can be tweaked
-for sizing to make sure everything fits, including changing layouts as needed
-for the locales where the normal layout just doesn't work ([Apple's Localization
-Documentation](http://developer.apple.com/internationalization/localization/)).
-At the moment (August 2009), the tree has 21 xib files and the GRD files list 50
-languages; that means maintaining and shipping over 1000 nib files! A tool could
-be written to automate pulling the strings from the pak files and putting them
-into the xib files, but that still leaves the sizing/layout adjustments. Within
-Google, there are projects that automate driving every part of a product's UI,
-in every language, and taking screen shots. Someone could inspect all of these,
-tweak the layouts to get a working UI; but to keep the UI working, there would
-need to be automation to continually do this to detect when any UI changes, and
-manually re-inspect each time any part of the UI changes to catch new layout
-problems, but that means signing up for that work plus the shipping overhead of
-the nibs.
-
-Some of the cross platform model code already generates content for the UI out
-of pak files. We're following that model with our xib based UI, and doing as
-much as possible at runtime. The nibs compiled out of xibs are landing in the
-Resources directory of the app directly, ie-they aren't language specific. The
-actual strings in them are markers so a helper can fetch the right strings from
-the pak files. We've also got some helpers that will do their best to *tweak*
-the sizes of objects based on the new string values. The good news is this looks
-like it is going to be able to cover a lot of the needs we have; but it also
-means, if we really have to, we can also fall back to creating a locale specific
-xib for any specific locales that need in (put it in the right .lproj subfolder
-and Cocoa will pick that up over the more generic one).
-
-These next sections cover some of what is available and how to use it for making
-sure any Mac UI being built is localized.
-
-## String Constants
-
-### Context of the String
-
-Since the UI is similar on all platforms there is a good chance the string you
-need already exists in the GRD files, but make sure you are using it from the
-right context. Sometimes multiple IDS_\* values have the same English text, in
-many cases these string values won't be the same in all languages. To figure out
-the right one to use, read the description to see how they are intended to be
-used (e.g., one might be a menu item, and another a window title). The
-differences are usually things like one use is as a Noun (a title, label) and
-the other is a Verb/Action (menu item, button)–so using the right one is
-important.
-
-### New Strings
-
-If you do need to add new constants to generated_resources.grd, make sure both
-the IDS_\* value and the description on it are clear. When it reaches the
-Translation Console they will only have the description to understand what it
-is/how it's used; and if someone is looking at a code/XIB, they might only have
-the IDS_\* value to go by. Remember to put the new entry into a conditional
-block so it is only defined on the Mac, we don't want to cause other platforms
-to carry strings they don't actually need. There doesn't appear to be a solid
-convention on the naming of the IDS_\* constants, but TVL (following what
-Pinkerton did) has been putting _MAC at the end of the new ones he's created to
-help make it clear they are specific to one platform; it can't hurt to follow
-this convention.
-
-## Building/Updating UI from Code
-
-Chrome already includes some helpers for fetching resource strings and
-assembling them (src/ui/base/l10n/l10n_util.h). There are some Mac additions
-(src/ui/base/l10n/l10n_util_mac.h) to help get things into the form needed for
-Cocoa UI:
-
-* Fetch resource strings directly into NSStrings via
- l10n_util::GetNSString() and l10n_util::GetNSStringF().
-* Some of the resources strings include the Windows keyboard
- accelerator marker (*"&Cut"*, Alt-C would jump the focus to that UI
- item), and they also tend to have three periods (...) instead of
- ellipses (…). l10n_util::FixUpWindowsStyleLabel() will clean these
- up and return an NSString.
-* If you are fetching a resource string that is meant for the UI
- (i.e.-the combination of the two above), you can do it in one call
- with l10n_util::GetNSStringWithFixup() and
- l10n_util::GetNSStringFWithFixup().
-
-The one to remember here is l10n_util::FixUpWindowsStyleLabel(). If you are
-getting a list of menu items, button title, etc. from cross platform code, there
-is a good chance you will need to run it though there before putting it into
-Cocoa UI objects.
-
-*Example:* See src/chrome/browser/tab_contents/render_view_context_menu_mac.mm.
-
-## UI from XIB Files
-
-The l10n support is built on GTM's
-[UILocalizer](http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/AppKit/GTMUILocalizer.h)
-and
-[UILocalizerAndLayoutTweaker](http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/AppKit/GTMUILocalizerAndLayoutTweaker.h).
-For more detail than the steps below, please see [GTM's
-docs](http://code.google.com/p/google-toolbox-for-mac/wiki/UILocalization) and
-source.
-
-### Menus Only
-
-For places where you need to manually load a menu from a XIB file (like the
-menubar or the menus for the bookmark bar), build the menus in the XIB file like
-normal, then once you have them wired up go back back and make it localizable as
-follows:
-
-1. Check whether the string you need already exists. If you find a
- matching string, read the description to see how it's intended to be
- used, and leverage it if you can. Otherwise, continue.
-2. Open chrome_nibs.gypi and add your XIB to the max_translated_xibs
- list.
-3. Update the titles to be ^IDS_CONSTANT_NAME (yes, put a caret
- followed by the IDS constant name into the XIB). You can even do
- things like ^IDS_CONSTANT$IDS_PRODUCT_NAME, and use the
- l10n_util::GetStringF API to insert one string into another (say for
- "*About \[product name\]*").
- * See tips on [writing better user-facing
- strings](/user-experience/ui-strings).
- * Include
- [screenshots](/developers/design-documents/ui-localization#TOC-Add-a-screenshot),
- [meanings](/developers/design-documents/ui-localization#TOC-Use-message-meanings-to-disambiguate-strings),
- and
- [descriptions](/developers/design-documents/ui-localization#TOC-Write-good-descriptions)
- for all strings. This is crucial for high-quality translations.
- * Use [ICU message
- syntax](http://userguide.icu-project.org/formatparse/messages)
- to accommodate plurals and gender.
-4. In your XIB, and add an NSObject.
-5. In the Inspector, change the class of this NSObject to the
- ChromeUILocalizer class.
-6. Still in the Inspector, switch over to the outlets for this object,
- where you'll have three outlets. Wire any of them to the different
- menus you need in your XIB file. You don't need to wire owner_ to
- the file owner; any menu will work here, and owner_ can have extra
- meaning (see the UI section).
-
-That's it. During the awakeFromNib the Localizer will run through any referenced
-object and change any strings that started with ^IDS_ to the values that are
-looked up.
-
-*Examples:* See src/chrome/app/nibs/BookmarkBar.xib,
-src/chrome/app/nibs/MainMenu.xib
-
-### Windows and Views
-
-Even for the most basic of UIs, like the bookmark editor or new bookmark folder,
-it can get complicated as the names of labels and button can change with
-different languages. Just how much work you need to do depends on how complex
-your UI is.
-
-#### Very Simple UIs
-
-If you are very lucky, you just need strings replaced and nothing will ever get
-clipped, then...
-
-Build your UI as you normally would and get things working, then (and these are
-very similar to what menu's listed):
-
-1. Check whether the string you need already exists. If you find a
- matching string, read the description to see how it's intended to be
- used, and leverage it if you can. Otherwise, continue.
-2. Open chrome_nibs.gypi and add your XIB to the max_translated_xibs
- list.
-3. Update the UI strings to be ^IDS_CONSTANT_NAME (yes, put a caret
- followed by the IDS constant name into the XIB). You can even do
- things like ^IDS_CONSTANT$IDS_PRODUCT_NAME, and use the
- l10n_util::GetStringF API to insert one string into another (say for
- "*About \[product name\]*").
- * See tips on [writing better user-facing
- strings](/user-experience/ui-strings).
- * Include
- [screenshots](/developers/design-documents/ui-localization#TOC-Add-a-screenshot),
- [meanings](/developers/design-documents/ui-localization#TOC-Use-message-meanings-to-disambiguate-strings),
- and
- [descriptions](/developers/design-documents/ui-localization#TOC-Write-good-descriptions)
- for all strings. This is crucial for high-quality translations.
- * Use [ICU message
- syntax](http://userguide.icu-project.org/formatparse/messages)
- to accommodate plurals and gender.
-4. In your XIB, and add an NSObject.
-5. In the Inspector, change the class of this NSObject to the
- ChromeUILocalizer class.
-6. Still in the Inspector, switch over to the outlets for the Localizer
- object:
- * If the owner for this XIB is a subclass of NSViewController or
- NSWindowController, you can just wire owner_ to the XIB owner,
- and the Localizer will run through the controller's view/window
- (going into view, subviews, view's menus, etc.) processing all
- strings that start with ^IDS_\*. This will not only handle
- titles, but also altTitles for VoiceOver, tooltips, etc.
- * If the owner of the XIB isn't one of these and/or you have
- another view/window in the XIB, you can use the
- otherObjectToLocalize_ and yetAnotherObjectToLocalize_ to wire
- those up also (if you have NSMenus you don't need to directly
- wire them if they are wired into the view hierarchy that is
- already being walked).
-
-*Example:* See ???
-
-#### Simple Entry UIs
-
-If you have a UI with labeled text fields and/or checkboxes/radios, then odds
-are you need some of the object sizes to be tweaked so text isn't truncated and
-the clickable areas don't extend miles to the right. GTM's
-UILocalizerAndLayoutTweaker can handle some of this for you. The GTM docs
-include a page with examples showing some of what can be done, [GTM's
-UILocalization
-docs](http://code.google.com/p/google-toolbox-for-mac/wiki/UILocalization).
-
-Build your UI as normal, then:
-
-1. Do steps 1-4 of the Very Simple UI case (but do NOT wire up any
- outlets on the Localizer).
-2. Go through your UI putting things that need alignment into
- CustomViews and change the view's class to be a
- GTMWidthBasedTweaker. See the [GTM
- docs](http://code.google.com/p/google-toolbox-for-mac/wiki/UILocalization)
- for some of what can be done.
-3. Add an NSObject to your XIB file.
-4. In the Inspector, change the class of the new object to be a
- GTMUILocalizerAndLayoutTweaker, and wire:
- 1. The localizer_ outlet to the Localizer you created before.
- 2. The uiObject_ to the window/view you need fixed up.
-
-*Example:* See src/chrome/app/nibs/BookmarkEditor.xib.
-
-Notes for the curious:
-
-* For anything in Chrome you wire up the LocalizerAndLayoutTweaker's
- localizer_ rather than the owner_, because we aren't using the stock
- GTM behavior of localizing via .strings files.
-* You don't wire any of the outlets on the Localizer because there is
- no defined order on when the two objects' awakeFromNib will be
- called, so the LocalizerAndTweaker drives the Localizer to define
- the order.
-
-#### Complex UIs
-
-Preferences was sorta the best example of this, but that has since moved to
-domui, so the relevant info isn't in the tree any more. If you are curious, you
-can look at the history to dig up the sources/xibs to see how it was done.
-
-#### Dynamic UIs
-
-There are cases where the data that ends up being displayed is dynamic, in that
-it includes data that comes from webpages, servers, etc. For these, we will
-probably always need to do custom code to help with the layout.
-
-*Examples:* See src/chrome/browser/cocoa/infobar\*. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg.sha1
deleted file mode 100644
index 0e0720f0919..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d9f245c674af311ff36ad59bc1cfd2903b8bfc56 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg.sha1
deleted file mode 100644
index 5dd7c5fcaec..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-588ca51515c55a0023e0abbfac61877c7056898e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg.sha1
deleted file mode 100644
index 1f74b73dced..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bdfad01b33274be63b49fd90b50e309836ab4ee5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/index.md b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/index.md
deleted file mode 100644
index 1f5d4a25646..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/index.md
+++ /dev/null
@@ -1,451 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: ui-mirroring-infrastructure
-title: UI Mirroring Infrastructure
----
-
-[TOC]
-
-## Objective
-
-One of the goals for the launch of Chromium is to support 40 UI languages; that
-is, the UI needs to be localized for each language such that any UI text element
-(menus, titles, labels, etc.) is displayed in the target language. In order to
-make sure that Chromium can be easily localized to different languages (an
-effort known as *localizability*), the Chromium source code is structured such
-that localizable strings are stored in locale-specific DLLs. This way, the
-actual UI strings are loaded from the right DLL, depending on the target locale.
-There is one more localizability aspect which applies only to right-to-left
-(RTL) languages, such as Hebrew and Arabic. In such languages, translating the
-strings to the target language is not enough. In order to provide a perfect
-right-to-left look and feel to the browser, the entire UI needs to be mirrored.
-
-This document starts by providing a brief overview of the UI mirroring
-technology in general and in particular the Windows support for UI mirroring.
-Then, the newly added ChromeViews mirroring infrastructure is described. Using
-this new infrastructure, the Chromium UI elements can be easily mirrored for RTL
-locales. Finally, and most importantly, the document provides a set of
-guidelines for writing Chromium UI elements that don't break when mirrored in
-RTL UIs.
-
-## Windows UI mirroring architecture
-
-### An example
-
-The Windows operating system itself has been localized for a large set of
-languages, including right-to-left languages like Hebrew. Thus, users of the
-Hebrew version of Windows are presented with a mirrored version of the English
-OS UI. Before we examine the mirroring Windows API available to application
-developers, it will be helpful to compare the mirrored and the non-mirrored
-versions of a fundamental Windows UI component - Windows Explorer. Looking at
-the manner in which the Windows OS mirrors its core UI elements will shed some
-light on the ChromeViews Mirroring Infrastructure design. The following diagram
-shows the English version of Windows Explorer we are all familiar with:
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg">](/developers/design-documents/ui-mirroring-infrastructure/explorer_window_en_us.jpg)
-
-The first thing to note about the English version is that left alignment is used
-for all the text elements. Also, there are two groups of highlighted UI elements
-(the red group and the black group) that behave differently when displayed in a
-mirrored UI. The elements in both groups contain an image (a bitmap or an icon).
-All the elements in the red group (elements 1, 2 and 3) contain direction
-sensitive images; that is, the images in these elements must be flipped
-horizontally when displayed in mirrored UIs. Not flipping direction sensitive
-graphics can cause various UI problems. For example, not flipping the resize
-bitmap (item 3) will cause the UI to appear incorrectly - a Southeast-oriented
-resize bar will appear in the Southwest corner of the window. Not flipping the
-back button (item 1) will result in a confusing user experience - the button
-will say 'Back' but the arrow will point to a direction indicating going
-'Forward'. All the elements in the black group (elements A, B and C) do not
-contain direction sensitive images. Thus, the images in these elements must look
-the same in mirrored and non-mirrored UIs. Generally, legal trademarks, logos,
-favicons, etc. are not direction sensitive and flipping them horizontally in
-mirrored UIs does not make sense. Following is the Hebrew (and therefore
-mirrored) version of Windows Explorer:
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg">](/developers/design-documents/ui-mirroring-infrastructure/explorer_window_he.jpg)
-
-The first thing to note about the Hebrew version is that right alignment is used
-for all the text elements (English and Hebrew). Also, all the UI text (menus,
-buttons, status bar info, etc.) is translated to Hebrew. All the UI elements and
-sub-elements are mirrored recursively. For example, the position of the folder
-tree view is mirrored (it is on the right-hand side of the window and not the
-left-hand side). The elements in the tree view (the plus signs, the directory
-icons, etc.) also appear in their mirrored position within the tree view. Note
-how even though the position of all the highlighted elements is mirrored, the
-elements in the black group look exactly the same as they did in the English
-version while the elements in the red group are flipped horizontally.
-
-### How does Windows do it?
-
-The Windows API provides a set of useful techniques for dealing with RTL UI
-localization. The goal of the Windows UI mirroring API is to allow GUI
-developers to write UI code without having to worry about mirroring the UI for
-right-to-left locales. The UI is created using well known Windows GUI constructs
-(HWNDs, Device Contexts, Dialog Boxes, etc.) and then an RTL layout property can
-be applied to individual elements in order to mirror their UI. For example, the
-property WS_EX_LAYOUTRTL can be applied to an HWND in order to mirror the UI of
-the underlying window. When an RTL layout is applied to a GUI element, the
-element's coordinate system is transformed in the following manner:
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg">](/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg)
-
-When using an RTL layout, the right-most horizontal coordinate value is 0
-(instead of the leftmost) and the coordinate values increase (instead of
-decrease) when moving from right to left on the X axis. Using this
-transformation, a UI element the application positions in the top left corner
-will be positioned on the top right corner when the UI is mirrored. The concept
-of coordinate transformation is extremely powerful since it doesn't require the
-GUI application's logic to change in order to support mirroring. In reality,
-however, more often than not mirroring a GUI application involves much more than
-just setting a few flags. There are a few bad programming practices that cause
-the GUI application to appear incorrectly when mirrored. For the most part these
-have to do with incorrect conversions between screen and window coordinates. To
-learn more about the Windows mirroring API and about how to avoid programming
-techniques that don't work well in mirrored UIs, see the following [MSDN
-article](http://msdn2.microsoft.com/en-us/goglobal/bb688119.aspx).
-
-## ChromeViews mirroring infrastructure
-
-Chromium has a portable, object oriented UI framework (aka *ChromeViews*) that
-allows developers to write Chromium UI elements. In order to allow the Chromium
-UI to be mirrored easily, a mirroring infrastructure needed to be added to the
-*ChromeViews* framework. The inherent Windows support could not be used by
-itself to mirror the Chromium UI for a few different reasons:
-
-* In order to render the Chromium UI elements inside a Windows HWND
- (such as the window created by XPFrame), the entire Chromium UI is
- rendered into a DIB and then the DIB is being *BitBlt*ed into the
- underlying HWND's device context (or HDC). Setting the
- WS_EX_LAYOUTRTL property of the top level Chromium HWND means that
- any text drawn into the DIB (using Windows' DrawText API) will need
- to be drawn such that each and every glyph is mirrored (so that
- flipping the DIB into the mirrored HDC will display the correct
- text). The problem with this method is that it will break ClearType
- because ClearType text rendering is direction dependant (which
- subpixels the ClearType algorithm sets depends on where the
- subpixels are relative to the drawn glyphs); in other words,
- flipping a bitmap containing ClearType is guaranteed to break the
- cripsness of the text.
-* *ChromeViews* is a portable framework and therefore it does not make
- much sense to use a platform-specific solution for mirroring in code
- that needs to remain portable.
-* The Windows mirroring applies to the HWND hierarchy of windows and
- controls. *ChromeViews* has its own concept of UI elements hierarchy
- and it is not possible to use the Windows API for mirroring and
- still have the flexibility of controlling mirroring in a *View*
- subclass granularity; in other words, not every *View* subclass is
- associated with a Windows HWND handle and it is therefore not
- possible to control the setting of each and every Chromium UI
- element by only using HWND mirroring. As we'll see later on, the
- Chromium mirroring infrastructure does use Windows native mirroring
- for the Chromium native UI controls.
-
-### ChromeViews::View mirroring support
-
-The Chromium mirroring infrastructure and API resides mostly in the
-*ChromeViews::View* class since it is the base class for the majority of the
-Chromium browser UI elements. Before describing the interface, it is important
-to note that whenever we refer to the concept of 'locale' or 'current locale' we
-refer to the Chromium UI language. The locale concept entails more than just the
-UI language, but for the purpose of explaining the mirroring infrastructure, it
-is OK to ignore the other locale aspects or the logic Chromium uses in order to
-set the default locale.
-
-Just like the Windows mirroring API, the corresponding Chromium API is designed
-in a way that frees individual GUI developers from the burden of
-programmatically mirroring UI elements and sub elements. However, the API has
-certain limitations and in some cases more mirroring-related code needs to be
-written for specific Chromium UI elements. Chromium *View* subclasses that
-follow a certain set of conventions (described in **How to write RTL-ready
-Chromium UI**, below), are going to work well in mirrored UIs and won't need to
-have additional code for handling right-to-left layout issues. For a complete
-documentation of the mirroring API, refer to the comments in view.h. Here is a
-brief description of the new mirroring functions:
-
-* **GetBounds(), GetX()** overloaded versions were added that take a
- parameter indicating whether to apply the mirroring coordinate
- transformation to the X coordinate of the *View*. Most *View*
- subclasses don't need to use these new methods and should continue
- using the version of these two functions that don't take the new
- transformation parameter.
-* **UILayoutIsRightToLeft()** determines whether the layout for the
- *View* is right-to-left. The *View*'s layout is RTL if the locale's
- language is a right-to-left language AND the RTL layout is not
- disabled for the *View*.
-* **FlipCanvasOnPaintForRTLUI()** determines whether the
- *ChromeCanvas* used by the *View* to draw graphics (when the
- *View::Paint()* is invoked) should be transformed such that bitmaps
- are automatically flipped horizontally. This function returns true
- if the UI layout for the *View* is RTL AND if canvas flipping has
- been enabled for the *View* using*EnableCanvasFlippingForRTLUI* (see
- later).
-* **EnableUIMirroringForRTLLanguages()** allows RTL UI layout to be
- enabled/disabled for the *View*. This is useful if a specific *View*
- subclass instance needs to use an LTR layout regardless of the
- locale.
-* **EnableCanvasFlippingForRTLUI()** allows RTL canvas flipping to be
- enabled/disabled for the *View*. Using this method, it is easy to
- control whether or not the graphics drawn by the *View* is going to
- be flipped horizontally when the locale is RTL. Generally, canvas
- flipping is enabled for *Views* representing direction sensitive UI
- elements and it is disabled for direction insensitive*Views*.
-* **MirroredX()** returns the mirrored X coordinate for the *View*.
- There is generally no need for subclasses to use this method.
-* **MirroredLeftPointForRect()** returns the mirrored X coordinate of
- a given region relative to the *View*'s bounds. This method is used
- only when the *View* is drawing different UI elements on the canvas
- and thus needs to 'manually' mirror the position of each such
- element if the UI layout is RTL.
-* **MirroredXCoordinateInsideView()** allows mirroring a given X
- coordinate inside the *View* bounds. Generally, this functionality
- is needed only for handling drag/drop operations, to make sure that
- the drop position is aligned with the display position of the
- *Views* in question.
-* **GetViewForPoint(), ConvertPointForView(), etc.** the various
- point-to-view methods have been modified to use the mirrored
- position of the *View* so that things like mouse events use the
- mirrored point of the *View* inside the parent.
-
-**NOTE: unlike Windows, the mirroring infrastructure in Chromium does not rely
-on coordinate transformations. Regardless of the locale, mouse events are always
-relative to the top left corner of the View.**
-
-The best way to demonstrate how the API works is to look at a hypothetical
-*View* subclass named Foo that contains three child *View*s. Here is the code
-snippet from the header file:
-
-class BitmapView : public ChromeViews::View {
-...
-public:
-BitmapView() {
-// By default, we want to flip the canvas so that the bitmap is flipped
-// when the UI layout is right-to-left.
-EnableCanvasFlippingForRTLUI(true);
-}
-virtual void Paint(ChromeCanvas\* canvas) {
-canvas-&gt;DrawBitmapInt(bitmap_, 0, 0);
-}
-private:
-// The bitmap we draw on the canvas.
-SkBitmap bitmap_;
-...
-}
-class Foo : public ChromeViews::View {
-public:
-// Layout the three child bitmap Views diagonally from top left to bottom
-// right.
-virtual void Layout() {
-...
-}
-private:
-BitmapView\* bitmap_one_;
-BitmapView\* bitmap_two_;
-BitmapView\* bitmap_three_;
-...
-}
-
-The *Foo* class contains three child *View*s that are laid out diagonally from
-top left to bottom right. Each child is an instance of the *BitmapView* subclass
-which represents a single bitmap. The following diagram visualizes the impact of
-different API calls on the manner in which *Foo* is rendered. Note that in the
-example, children one, two, and three contain a bitmap with the corresponding
-number.
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg">](/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg)
-
-It is important to emphasize that even though the mirroring API contains quite a
-few elements, *View* subclasses don't need to explicitly use the API in the
-majority of the cases. As an example, consider *BrowserToolbarView*, which is a
-*View* subclass with several child *Views*. Here is a snippet from
-toolbar_view.h with the definition of the different Toolbar controls:
-
-class BrowserToolbarView : public ChromeViews::View,
-public Menu::BaseControllerDelegate,
-public ChromeViews::ViewMenuDelegate,
-public ChromeViews::DragController,
-public LocationBarView::Delegate {
-...
-// Controls
-ChromeViews::Button\* back_;
-ChromeViews::Button\* forward_;
-ChromeViews::Button\* reload_;
-ChromeViews::ToggleButton\* star_;
-LocationBarView\* location_bar_;
-GoButton\* go_;
-ChromeViews::MenuButton\* page_menu_;
-ChromeViews::MenuButton\* app_menu_;
-...
-}
-
-All the toolbar's UI sub elements are child *View*s and the toolbar class does
-not render any UI elements itself. Instead, it delegates painting to its sub
-elements (we'll explain later why this is the preferred way to structure a
-*View* subclass). Here is a snippet from the code in
-*BrowserToolbarView::Layout()*:
-
-void BrowserToolbarView::Layout() {
-...
-back_-&gt;GetPreferredSize(&sz);
-back_-&gt;SetBounds(kControlIndent,
-kControlVertOffset,
-sz.cx,
-sz.cy);
-forward_-&gt;GetPreferredSize(&sz);
-forward_-&gt;SetBounds(back_-&gt;GetX() + back_-&gt;GetWidth(),
-kControlVertOffset,
-sz.cx,
-sz.cy);
-...
-}
-
-The toolbar lays out its child elements using the normal *View* positioning API
-(GetX(), GetBounds(), etc.) and does not have to special case the layout for RTL
-locales. Finally, here is what the toolbar looks like in RTL and LTR locales:
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg">](/developers/design-documents/ui-mirroring-infrastructure/chrome_toolbar.jpg)
-
-The toolbar's code didn't need to change at all in order to appear correctly in
-an RTL UI. The toolbar is an example of a *View* subclass for which UI mirroring
-is taken care off automatically by the new framework. This is unfortunately not
-the case for all the Chromium UI elements.
-
-### Chromium support for native mirroring
-
-Most of the Chromium mirroring infrastructure resides in *ChromeViews*. However,
-since Chromium also uses Windows native UI controls, the mirroring
-infrastructure includes interfaces that allow mirroring these controls easily.
-Here is a brief description of the interface:
-
-* **NativeControl::GetAdditionalExStyle()** when *NativeControl*
- subclasses invoke *::CreateWindowEx* in order to create the
- underlying Windows control, they must bitwise-or the value returned
- from this function with the control's extended style. This way, if
- mirroring is turned on for the control, then WS_EX_LAYOUTRTL will be
- passed when creating the control.
-* **MenuHostWindow::Delegate::IsRightToLeftUILayout()** this virtual
- method lets the menu delegate control the directionality of the
- menu. By default, the direction is derived from the locale's
- direction so generally subclasses don't need to override this
- method.
-
-## How to write RTL-ready Chromium UI
-
-The mirroring infrastructure described in this document is designed to be
-transparent to GUI developers. However, this is true only if the UI elements
-adhere to a certain set of conventions. Not following these rules when writing a
-UI element generally means that mirroring-specific code will need to be added to
-the element so that it is displayed correctly in right-to-left locales. This
-section describes the rules together with examples that demonstrate why not
-following these rules is problematic. Even though it is discouraged to put
-mirroring-specific code in a UI element (it is better to just follow the rules),
-this section shows how to handle mirroring manually in UI components. This is
-useful for UI component that, for whatever reason, can not be written in a
-manner that allows the mirroring infrastructure to display the component
-correctly in RTL locales.
-
-**Rule #1: represent UI sub elements as child *View*s**
-
-The Chromium toolbar example presented earlier is an example of a Chromium
-*View* subclass that contains several child *View*s as its sub elements. The
-toolbar lays out the sub elements, but it does not do any rendering. Instead,
-rendering is done by the individual sub elements. In other words, for the
-toolbar, the 'leaf' elements in the UI tree are the only elements that draw
-graphics on the canvas during *View::Paint()*. This method plays well with the
-mirroring infrastructure since the coordinate transformation can be easily
-applied to the bounds of the child elements. One of the Chromium UI components
-that does not adhere to this rule is the *Tab* (see chrome/browser/tabs/tab.h).
-The *Tab* contains three UI sub elements. A 'close' button, a title and a
-favicon. The button is represented as a *ChromeView::Button* child *View*. The
-title and the favicon are both drawn directly on the canvas by the *Tab* class
-during *View::Paint()*. While the tabs look correctly on left-to-right locales,
-they don't on RTL locales:
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg">](/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg)
-
-As the image shows, the button is positioned correctly on the left-hand side of
-the tab because during *Tab::Layout()*, it is positioned on the right-hand side
-(which becomes left when applying the coordinate transformation). The title and
-the favicon, on the other hand, are not positioned in the same manner since they
-are not child views. During *Tab::Paint()*, they are still drawn on the
-left-hand side, instead of the right-hand side. Readers of this (already long
-and boring) document are probably thinking the following right now: "This can
-probably be solved if *View::EnableCanvasFlippingForRTLUI(true);* is invoked in
-*Tab*'s constructor so that the canvas is transformed.". Well, think again:
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg">](/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg)
-
-Flipping the canvas makes sense only for 'leaf' *View*s that draw graphics on
-their entire area. When drawing different elements on the canvas, it is not
-possible to use the mirroring infrastructure in order to control the appearance
-of each element. The best way to fix the problem is to represent the title and
-the favicon as child views. If that's not possible, the position of these
-elements needs to be mirrored manually:
-
-favicon_bounds_.set_x(MirroredLeftPointForRect(favicon_bounds_));
-title_bounds_.set_x(MirroredLeftPointForRect(title_bounds_));
-
-With this change, the tabs are displayed properly:
-
-[<img alt="image"
-src="/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg">](/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg)
-
-**Rule #2: don't make assumptions such as top-left is always northwest**.
-
-When your *View* subclass is being mirrored, its coordinate system is
-transformed and therefore if you are processing a mouse event for the point
-(0,0), the actual mouse position is the Northeast corner of your control. Thus,
-you should not write your GUI code assuming a left-to-right coordinate system.
-If the logic of your code depends on the actual position of the mouse event,
-then you should use the mirroring API in order to find out whether or not the
-coordinate system is transformed. See chrome\\views\\custom_frame_window.cc for
-an example.
-
-**More rules will be added later on as I continue analyzing the cause of the
-most common Chromium mirroring bugs. For now, try to adhere to the initial
-rules.**.
-
-## How to test a mirrored Chromium UI element
-
-If you write a new Chromium UI element or modify an existing element, it is
-highly important that you make sure the element is mirrored correctly in
-right-to-left locales. In order to do that, you can either change the UI
-language of Chromium via the **Options** dialog, or you can run Chromium from
-the command line such that the Hebrew UI is used:
-
-> Windows: chrome.exe --lang=he
-
-> Linux: Confirm the **he_IL** locale is installed on the system by running
-> \`locale -a\` to list. Then: LANG=he_IL.UTF-8 LANGUAGE=he_IL chrome
-
-> Mac: Use the Language and Region settings to change OS X to Hebrew. Then
-> restart Chrome.
-
-Once you do that, you can look at your control and make sure it doesn't have
-layout bugs. Note that your machine probably doesn't include the files required
-for displaying right-to-left languages and therefore all the Hebrew strings will
-be rendered from left to right which will make them unreadable. It will also
-make certain Unicode control characters to appear as little squares surrounding
-the text. This does not impact the layout of the Chromium UI elements so it
-shouldn't prevent you from making sure your UI element is properly laid out. If
-you want the Hebrew strings to appear correctly and you want the annoying
-squares to go away, you can easily install the required Windows right-to-left
-language files by going to **Control Panel &gt; Regional and Language Options**,
-selecting the **Languages** tab, and selecting the option to **Install files for
-complex script and right-to-left languages (including Thai)**. Note that
-installing the right-to-left files requires a restart.
-
-I am still trying to figure out if there is a way to write a UI test that makes
-sure UI mirroring is not broken so that people can make sure they don't break
-anything before a check-in. Suggestions are welcome! \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg.sha1
deleted file mode 100644
index ce3d40c3b15..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/mirroring_api.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1fa111b13fa833477dfdd80a19d23b9d33f4130d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg.sha1
deleted file mode 100644
index adac8ade427..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_fixed.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6a144d384c08f2f405c4f3274cb6490e80cadb2c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg.sha1
deleted file mode 100644
index 332c7606878..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_flipping_bug.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-afe4fa37cc8fbc020c094928e177a6b9697c7a13 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg.sha1
deleted file mode 100644
index 2200d33344c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/tabs_layout_bug.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-93be8dea344d53b73ddd4c87542a8c6acb1625ec \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg.sha1
deleted file mode 100644
index a01400e0263..00000000000
--- a/chromium/docs/website/site/developers/design-documents/ui-mirroring-infrastructure/ws_layout_rtl.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4659f37b4b12fea913f39481773aca1c0a3d8375 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/user-scripts/index.md b/chromium/docs/website/site/developers/design-documents/user-scripts/index.md
deleted file mode 100644
index 7f3bbcecfe9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/user-scripts/index.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: user-scripts
-title: User Scripts
----
-
-Chromium and Google Chrome (version 4 and higher) have built-in support for
-Greasemonkey-style user scripts.
-
-To use, click on any .user.js file. You should see an install dialog. Press OK
-to install.
-
-Known issues:
-
-* Chromium does not support @require, @resource, unsafeWindow,
- GM_registerMenuCommand, GM_setValue, or GM_getValue.
-* GM_xmlhttpRequest is same-origin only.
-
-### Match Patterns
-
-The preferred way to specify the pages that a user script should run against in
-Chromium is the **@match** attribute. Here are some examples of its use:
-
-// ==UserScript==
-
-// @match http://\*/\*
-
-// @match http://\*.google.com/\*
-
-// @match http://www.google.com/\*
-
-// ==/UserScript==
-
-See [these
-comments](https://code.google.com/p/chromium/codesearch#chromium/src/extensions/common/url_pattern.h&q=file:url_pattern.h&sq=package:chromium&l=1)
-for details on the @match syntax.
-
-Support for Greasemonkey-style @include patterns is also implemented for
-compatibility, but @match is preferred.
-
-With Greasemonkey-style @include rules, it is not possible for Chrome to know
-for certain the domains a script will run on (because google.\* can also run on
-google.evil.com). Because of this, Chrome just tells users that these scripts
-will run on all domains, which is sometimes scarier than necessary. With @match,
-Chrome will tell users the correct set of domains a user script will run on.
-
-### Idle Injection
-
-In Chromium/Google Chrome, Greasemonkey scripts are injected by default at a new
-point called
-"[document-idle](http://code.google.com/chrome/extensions/content_scripts.html)".
-This is different than Greasemonkey, which always injects at document-end.
-
-The document-idle injection point is selected automatically by the browser for
-the best user-perceived performance. If the document has many external resources
-like images that slow down page load, the browser will run the script at
-document-end, like Greasemonkey, while waiting for resources. However, if the
-page loads quickly, scripts may not be run until after window.onload has
-occurred -- much later than with Greasemonkey.
-
-The main impact this has on script developers is that you should \*not\* wait
-for window.onload in Greasemonkey scripts intended for use with Chromium/Google
-Chrome, because it may have already occurred when your script has run.
-
-Note that there is normally no reason to wait for window.onload in any
-Greasemonkey script, even in Firefox. Document-end and document-idle are both
-guaranteed to run after the entire DOM is parsed, which is the usual thing
-script developers are interested in having occurred. If for some reason you
-really need your script to run after window.onload, you can check the
-document.readystate property. If it is "complete", then you can assume onload
-has occurred. If it isn't, then you can listen for onload. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video-capture/VideoCaptureBrowserClasses.jpg.sha1 b/chromium/docs/website/site/developers/design-documents/video-capture/VideoCaptureBrowserClasses.jpg.sha1
deleted file mode 100644
index 05d430686f6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video-capture/VideoCaptureBrowserClasses.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a9a464f8a4f982cfdc0b53a208dec9cbd81fca40 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video-capture/index.md b/chromium/docs/website/site/developers/design-documents/video-capture/index.md
deleted file mode 100644
index a1605e7a50a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video-capture/index.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: video-capture
-title: Video Capture
----
-
-Last updated March 2015. Contributor: mcasas@
-
-### Overview
-
-There are several components allowing for Video Capture in Chrome
-
-* the Browser-side classes
-* the common Render infrastructure supporting all MediaStream use
- cases
-* the local &lt;video&gt; playback and/or Jingle/WebRtc PeerConnection
- implementation.
-
-At the highest level, both Video and Audio capture is abstracted as a
-[MediaStream](http://w3c.github.io/mediacapture-main/getusermedia.html); this JS
-entity is created via calls to
-[GetUserMedia()](http://www.html5rocks.com/en/tutorials/getusermedia/intro/#toc-gettingstarted)
-with the appropriate bag of parameters. What happens under the hood and what
-classes do what is the topic of this document. I'll speak about Video Capture
-although some concepts are interchangeable with Audio. I'll speak of
-WebCam/Camera but the same reasoning applies to Video Digitizers, Virtual
-WebCams etc.
-
-### Browser
-
-In the Cr sandbox model, all of what pertains to using hardware is abstracted in
-the Browser process, to which Render clients direct requests via IPC mechanisms,
-and Video Capture is no different.
-
-[<img alt="image"
-src="/developers/design-documents/video-capture/VideoCaptureBrowserClasses.jpg"
-height=253
-width=400>](/developers/design-documents/video-capture/VideoCaptureBrowserClasses.jpg)
-
-The goal of this set of classes is to enumerate, open and close devices for
-capture, process captured frames, and keep accountancy of underlying resources.
-
-At the Browser level there should be no device-specific code, that is, no
-non-singletons, created before the user first tries to enumerate or use any kind
-of capture (Video or Audio) device -- and that's the reason why "Video Capture
-Device Capabilities" under chrome://media-internals is empty before actually
-using any capture device.
-
-Let's have a look at the diagram. In the early Chrome startup times there'd be
-just one class,
-[MediaStreamManager](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/renderer_host/media/media_stream_manager.h&sq=package:chromium&type=cs&q=mediastreammanager&l=64)
-(MSM) sitting lonely on the upper left corner. MSM is a singleton class created
-and owned by BrowserMainLoop on UI thread, using a bunch of
-[MediaStream\*](https://code.google.com/p/chromium/codesearch#search/&sq=package:chromium&type=cs&q=content/browser/renderer_host/media/media_stream_*)
-classes to have conversations over IPC and to request the user for permissions
-(MediaStreamUI\*). MS\* classes deal with both Audio and Video.
-
-MSM creates on construction two other important singletons, namely the
-ref-counted
-[VideoCaptureManager](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/renderer_host/media/video_capture_manager.h&sq=package:chromium&type=cs&q=videocapturemanager)
-(VCM) and the associated
-[VideoCaptureDeviceFactory](https://code.google.com/p/chromium/codesearch#chromium/src/media/video/capture/video_capture_device_factory.h&sq=package:chromium&type=cs&q=VideoCaptureDeviceFactory)
-(VCDF). VCDFactory is used to enumerated Device names and their capabilities, if
-they have any, and to instantiate VCDevices. There's one implementation
-per-platform and there are a few available:
-
-* Platform specific: Linux/CrOS (based on
- [V4L2](http://linuxtv.org/downloads/v4l-dvb-apis/index.html) API),
- Mac (both
- [QTKit](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/QTKitApplicationProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008156-CH1-SW1)
- and
- [AVFoundation](https://developer.apple.com/library/mac/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/00_Introduction.html#//apple_ref/doc/uid/TP40010188)
- APIs), Windows (both
- [DirectShow](https://msdn.microsoft.com/en-us/library/windows/desktop/dd375454%28v=vs.85%29.aspx)
- and [Media
- Foundation](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694197%28v=vs.85%29.aspx)
- APIs) and Android
- ([Camera](http://developer.android.com/reference/android/hardware/Camera.html)
- and
- [Camera2](http://developer.android.com/reference/android/hardware/camera2/package-summary.html)
- APIs).
-* Debug/Test devices:
- [FakeVCD](https://code.google.com/p/chromium/codesearch#chromium/src/media/video/capture/fake_video_capture_device.h&sq=package:chromium&type=cs&q=fakevideocapturedevice&l=21)
- and
- [FileVCD](https://code.google.com/p/chromium/codesearch#chromium/src/media/video/capture/file_video_capture_device.h&sq=package:chromium&type=cs&rcl=1426491802&l=26).
- FakeVCD produces a stream with a rolling PacMan over a green canvas,
- while FileVCD plays uncompressed Y4M files.
-* Other captures: Desktop and Tab (Web contents) Capture.
-
-VCM manages the lifetime of pairs
-&lt;[VideoCaptureController](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/renderer_host/media/video_capture_controller.h&sq=package:chromium&type=cs&q=videocapturecontroller),
-[VideoCaptureDevice](https://code.google.com/p/chromium/codesearch#chromium/src/media/video/capture/video_capture_device.h&sq=package:chromium&type=cs&q=videocapturedevice&l=29)&gt;.
-VideoCaptureDevices (VCD) are adaptation layers between whichever infrastructure
-is provided by the OS for Video Capture and VideoCaptureController (VCC), whose
-mission is to bridge captured frames towards Render clients through the IPC.
-
-VCC interacts with the Render side code via a list of VideoCaptureHosts (VCH).
-VCH is a dual citizenship bridge between commands coming from Render to VCM
-([VideoCaptureHostMsg_Start](https://code.google.com/p/chromium/codesearch#chromium/src/content/common/media/video_capture_messages.h&cl=GROK&ct=xref_jump_to_def&l=91&gsn=VideoCaptureHostMsg_Start)
-and relatives) and those flowing from VCC towards Renderer. There are as many
-VCHosts as Render clients and they are created by RenderProcessHostImpl, another
-high level entity.
-
-Large data chunks cannot be passed through the IPC pipes, so a Shared Memory
-mechanism is implemented in
-[VideoCaptureBufferPool](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/renderer_host/media/video_capture_buffer_pool.h&sq=package:chromium&type=cs&q=videocapturebufferpool&l=46)
-(VCBP -- not in the diagram, lives inside VCC). These ShMem-based "Buffers", as
-they are confusingly called, are allocated on demand and reserved for Producer
-or Consumers. VCC keeps accountancy of those and recycles them when all clients
-have sent the [corresponding release
-message](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/renderer_host/media/video_capture_host.cc&sq=package:chromium&type=cs&l=228).
-
-VideoFrames do not understand Buffers from this Pool so VCC has to keep count of
-them and recycle its uses via, again, IPC.
-
-It's relatively common that the Capture Devices do not provide exactly what the
-Render side requests or needs, hence an adaptation layer is inserted between VCC
-and VCD:
-[VideoCaptureDeviceClient](https://code.google.com/p/chromium/codesearch#chromium/src/content/browser/renderer_host/media/video_capture_device_client.h&sq=package:chromium&type=cs&q=videocapturedeviceclient).
-VCDClient adapts sizes, applies rotations and otherwise converts the incoming
-pixel format to YUV420, which is the global transport pixel format. The output
-of such conversion rig is a ref-counted VideoFrame, which is the generic video
-transport class. The totality of VCDs assume a synchronous capture callback,
-hence VCDC copies/converts the captured buffer onto the ShMem allocated as a
-"Buffer". This VideoFrame-Buffer couple is then replicated to each VCHost on
-VCController.
-
-(For the curious, IPC listener classes derive from BrowserMessageFilter).
-
-Device Monitoring?
-
-**Common Render Infra**
-
-**Local &lt;video&gt; Playback**
-
-**Remote WebRTC/Jingle encode and send** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video-playback-and-compositor/index.md b/chromium/docs/website/site/developers/design-documents/video-playback-and-compositor/index.md
deleted file mode 100644
index 5598d96a18e..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video-playback-and-compositor/index.md
+++ /dev/null
@@ -1,188 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: video-playback-and-compositor
-title: Video Playback and Compositor
----
-
-**Authors: [jamesr@chromium.org](mailto:jamesr@chromium.org), [danakj@chromium.org](mailto:danakj@chromium.org)**
-
-**The Chromium compositor has support for video playback to support offloading work to the GPU and displaying video frames while the main thread is blocked. There are a few different media engine implementations in Chromium, but they interact with the compositor in similar ways. Here’s a diagram of the different classes and how they interact:**
-
-**<img alt="image" src="https://lh6.googleusercontent.com/Ubm3huhrrO8rFBTvZxG2h5aAdOJFR9PvyBsBnOr4q0vVzyzGFryquQLsrRf_OWH84E2nd_9ZGF6RPMGUbSXggTdkmg4N9WscPYWiwvLCEhzzEPmVqfqXDKXo" height=322px; width=616px;>**
-
-**Things in dotted square boxes are interfaces, things in ovals are concrete classes. Arrows represent pointers between objects.**
-
-**Objects by thread (note that a few span multiple threads):**
-
-**<img alt="image" src="https://lh5.googleusercontent.com/AvKsmAQ2zo1X-40GA1d8e9Nb5o5Qn5IGGcytXaDPuYWgS-RY_V9SOzNdbFnZ0jnywb99m821436KnMXo5Z5G8xTMiHMgvebU1qwt7cHa3upPERKUj7ogrqX8" height=342px; width=625px;>**
-
-**Before video playback:**
-
-**1.) WebMediaPlayerClientImpl constructed by WebCore**
-
-**At start of video load:**
-
-**2.) WebMediaPlayerClientImpl constructs WebMediaPlayer**
-
-**In SetReadyState, if the video has loaded enough to know we want composited playback:**
-
-**3.) WebMediaPlayerImpl constructs a WebLayerImpl wrapping a cc::VideoLayer with the provider pointer set to the WebMediaPlayerImpl**
-
-**4.) WebMediaPlayerImpl provides WebLayer\* to WebMediaPlayerClientImpl to register in WebCore’s compositing tree**
-
-**On the next compositor commit during tree sync (on compositor thread with main thread blocked):**
-
-**5.) cc::VideoLayer creates a cc::VideoLayerImpl and passes the cc::VideoFrameProvider\***
-
-**6.) cc::VideoLayerImpl creates a cc::VideoFrameProviderClientImpl with the provider pointer**
-
-**7.) cc::VideoFrameProviderClientImpl calls SetVideoFrameProviderClient(this) on the cc::VideoFrameProvider\*, which is the WebMediaPlayerImpl**
-
-**On tree activation (immediately after tree sync when not in impl-side painting, at some point later on in impl-side painting)**
-
-**8.) Active tree cc::VideoLayerImpl sets itself as the cc::VideoFrameProviderClientImpl’s active layer**
-
-**If we fully initialize without anything shutting down, then the pathway for the video layer to grab a new frame is:**
-
-**On the compositor thread when preparing to draw a frame:**
-
-**1.) cc::VideoLayerImpl::WillDraw calls VideoFrameProviderClientImpl::AcquireLockAndCurrentFrame()**
-
-**2.) VFPCI::ALACF takes its provider_lock_ and calls GetCurrentFrame() on its provider**
-
-**3.) WebMediaPlayerImpl takes its internal lock_ and returns its current_frame_**
-
-**4.) cc::VideoLayerImpl uploads data into textures (if needed)**
-
-**On the compositor thread when drawing a frame:**
-
-**5.) cc::VideoLayerImpl::AppendQuads adds quads into the draw list referencing the video texture(s)**
-
-**On the compositor thread after drawing a frame:**
-
-**6.) cc::VideoLayerImpl::DidDraw calls VideoFrameProviderClientImpl::PutCurrentFrame**
-
-**7.) VFPCI::PCF calls PutCurrentFrame() on its provider**
-
-**8.) cc::VideoLayerImpl::DidDraw calls VFPCI::ReleaseLock which releases provider_lock_**
-
-**The way the media system can notify the compositor of new video frames on the compositor thread is (currently implemented only on android):**
-
-**On the compositor thread when the media system has a new frame available**
-
-**1.) Something in the media playback system (content::StreamTextureProxyImpl for android) calls cc::VideoFrameProvider::DidReceiveFrame()**
-
-**2.) cc::VideoFrameProviderClientImpl checks if it has an active cc::VideoLayerImpl and calls SetNeedsRedraw() on it if so**
-
-**3.) cc::VideoLayerImpl::SetNeedsRedraw tells the compositor to schedule a new frame**
-
-**Shutdown**
-
-**There are a few ways this system can shut down. All shutdown paths start on the main thread, but they can propagate out to other threads in different ways depending on the type of shutdown.**
-
-**Video layer removed from compositing tree while playing**
-
-**This can happen if a &lt;video&gt; element is detached from the DOM tree or display:none is set on an ancestor of the element.**
-
-**There are two cases to consider here - impl-side painting off and impl-side painting on. With impl-side painting off, there is only one cc::VideoLayerImpl associated with a given cc::VideoLayer. The cc::VideoLayerImpl is always created or destroyed during the tree sync part of commit which happens on the compositor thread with the main thread blocked.**
-
-**With impl-side painting on, there are potentially two cc::VideoLayerImpls associated with a given cc::VideoLayer. One is in the pending/recycle tree and is always created/destroyed during the commit tree sync on the compositor thread with the main thread blocked. The other is in the active tree and is created/destroyed during tree activation, which happens on the compositor thread while the main thread is not blocked. In impl-side painting mode both cc::VideoLayerImpls hold a reference to the same cc::VideoFrameProviderClientImpl.**
-
-**Preconditions:**
-
-**1.) WebMediaPlayerClientImpl owns a WebMediaPlayer (which is a WebMediaPlayerImpl)**
-
-**2.) WebMediaPlayerImpl owns a WebLayerImpl, which has a ref to a cc::VideoLayer**
-
-**3.) cc::VideoLayer has an associated cc::VideoLayerImpl (two in impl-side painting mode) which reference a cc::VideoFrameProviderClientImpl**
-
-**4.) WebMediaPlayerImpl’s provider_client_ pointer points to the cc::VideoFrameProviderClientImpl**
-
-**5.) cc::VideoFrameProviderClientImpl’s provider_ pointer points to the WebMediaPlayerImpl**
-
-**Sequence:**
-
-**On the main thread at any point in time**
-
-**1.) cc::VideoLayer removed from the compositing tree and/or destroyed**
-
-**In the next compositor commit on the compositor thread with the main thread blocked:**
-
-**2.) Tree sync starts destruction of the cc::VideoLayerImpl (only cc::VideoLayerImpl when not in impl-side painting, pending/recycle layer in impl-side painting)**
-
-**3.) ~cc::VideoLayerImpl() calls cc::VideoFrameProviderClientImpl::Stop()**
-
-**4.) cc::VFPCI::Stop() calls SetVideoFrameProviderClientImpl(NULL) on its cc::VideoFrameProvider\*, which is a WebMediaPlayerImpl**
-
-**5.) cc::VFPCI::StopUsingProvider() takes its provider_lock_ and nulls out its provider_**
-
-**6.) WebMediaPlayerImpl nulls out its provider_client_ pointer**
-
-**7.) cc::VFPCI::Stop() nulls out its provider_ pointer (again)**
-
-**If in impl-side painting mode, on tree activation in the compositor thread:**
-
-**8.) cc::VideoLayerImpl in active tree destroyed, dropping last reference to cc::VideoFrameProviderClientImpl**
-
-**Ordering:**
-
-**Steps 2-7 happen on the compositor thread with the main thread blocked. This means that the compositor cannot be in a frame for any of these steps and nothing on the main thread can advance (i.e. we can’t start shutting down the WebMediaPlayerImpl).**
-
-**Postconditions:**
-
-**1.) WebMediaPlayerImpl’s provider_client_ pointer is NULL (as of step 7)**
-
-**2.) cc::VideoFrameProviderClientImpl’s provider_ pointer is NULL (as of step 6)**
-
-**When impl-side painting is not enabled, then**
-
-**3.) cc::VideoLayerImpl and cc::VideoFrameProviderClientImpl destroyed (as of step 9)**
-
-**Media engine shut down while video layer is in compositing tree**
-
-**Preconditions:**
-
-**1.) WebMediaPlayerClientImpl owns a WebMediaPlayer (which is a WebMediaPlayerImpl)**
-
-**2.) WebMediaPlayerImpl owns a WebLayerImpl, which has a ref to a cc::VideoLayer**
-
-**3.) cc::VideoLayer has an associated cc::VideoLayerImpl (two in impl-side painting mode) which reference a cc::VideoFrameProviderClientImpl**
-
-**4.) WebMediaPlayerImpl’s provider_client_ pointer points to the cc::VideoFrameProviderClientImpl**
-
-**5.) cc::VideoFrameProviderClientImpl’s provider_ pointer points to the WebMediaPlayerImpl**
-
-**6.) We’re outside a compositor commit on the main thread**
-
-**7.) The compositor thread may be in any state, including activation or drawing a frame.**
-
-**Sequence:**
-
-**On the main thread at any point in time:**
-
-**1.) WebMediaPlayerClientImpl destroys its WebMediaPlayer (which is a WebMediaPlayerImpl)**
-
-**2.) ~WebMediaPlayerImpl() calls SetVideoFrameProviderClient(NULL) on its provider_client_, which is a cc::VideoFrameProvierClientImpl**
-
-**3.) cc::VideoFrameProviderClientImpl::SetVideoFrameProviderClient() takes its provider_lock_**
-
-**4.) cc::VideoFrameProviderClientImpl::SetVideoFrameProviderClient() nulls out its provider_ pointer, which pointed to the WebMediaPlayerImpl**
-
-**5.) cc:VFPCI::SetVideoFrameProviderClient() releases its provider_lock_**
-
-**6.) ~WebMediaPlayerImpl() completes and the object is destroyed**
-
-**Ordering:**
-
-**1.) In step (3) the cc::VFPCI takes its provider_lock_. If the compositor thread is in the middle of drawing a frame (specifically between WillDraw() and DidDraw()), this call will block until the frame is complete**
-
-**Postconditions:**
-
-**1.) WebMediaPlayerImpl’s provider_client_ pointer is NULL (as of step 4)**
-
-**2.) cc::VideoFrameProviderClientImpl’s provider_ pointer is NULL (as of step
-5)** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video/index.md b/chromium/docs/website/site/developers/design-documents/video/index.md
deleted file mode 100644
index 520ced086fe..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video/index.md
+++ /dev/null
@@ -1,169 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: video
-title: Audio / Video Playback
----
-
-## Interested in helping out? Check out our [bugs](https://bugs.chromium.org/p/chromium/issues/list?q=component%3AInternals%3EMedia)! New to Chromium? [GoodFirstBug](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3AInternals%3EMedia+Hotlist%3DGoodFirstBug) is your friend!
-
-Filing a new bug:
-[Template](https://bugs.chromium.org/p/chromium/issues/entry?template=Audio/Video%20Issue)
-
-**Documentation:**
-
-- [HTMLAudioElement](https://html.spec.whatwg.org/#htmlaudioelement)
-
-- [HTMLMediaElement](https://html.spec.whatwg.org/#htmlmediaelement)
-
-- [HTMLVideoElement](https://html.spec.whatwg.org/#htmlvideoelement)
-
-Much of the documentation below is out of date and has significant gaps. For the
-most up to date documentation please see the
-[README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/media/README.md)
-file in the media/ directory (which is where all the code for Chromium's media
-pipeline lives).
-
-### Overview
-
-There are several major components to Chromium's media playback implementation,
-here are three most folks are commonly interested in:
-
-* [Pipeline](https://cs.chromium.org/chromium/src/media/base/pipeline.h)
- * Chromium's implementation of a media playback engine
- * Handles audio/video synchronization and resource fetching
-* FFmpeg{[Demuxer](https://cs.chromium.org/chromium/src/media/filters/ffmpeg_demuxer.h),
- [AudioDecoder](https://cs.chromium.org/chromium/src/media/filters/ffmpeg_audio_decoder.h),
- [VideoDecoder](https://cs.chromium.org/chromium/src/media/filters/ffmpeg_video_decoder.h)}
- * Open source library used for container parsing and software
- audio and video decoding.
-* Blink's
- [HTMLMediaElement](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.h)
- * Implements the HTML and Javascript bindings as specified by
- WHATWG
- * Handles rendering the user agent controls
-
-#### Pipeline
-
-The pipeline is a pull-based media playback engine that abstracts each step of
-media playback into (at least) 6 different filters: data source, demuxing, audio
-decoding, video decoding, audio rendering, and video rendering. The pipeline
-manages the lifetime of the renderer and exposes a thread safe interface to
-clients. The filters are connected together to form a filter graph.
-
-Design goals:
-
-- Use Chromium threading constructs such as
-[TaskRunner](https://cs.chromium.org/chromium/src/base/task_runner.h)
-
-- Filters do not determine threading model
-
-- All filter actions are asynchronous and use callbacks to signal completion
-
-- Upstream filters are oblivious to downstream filters (i.e., DataSource is
-unaware of Demuxer)
-
-- Prefer explicit types and methods over general types and methods (i.e., prefer
-foo-&gt;Bar() over foo-&gt;SendMessage(MSG_BAR))
-
-- Can run inside security sandbox
-
-- Runs on Windows, Mac and Linux on x86 and ARM
-
-- Supports arbitrary audio/video codecs
-
-Design non-goals:
-
-- Dynamic loading of filters via shared libraries
-
-- Buffer management negotiation
-
-- Building arbitrary filter graphs
-
-- Supporting filters beyond the scope of media playback
-
-The original research into supporting video in Chromium started in September
-2008. Before deciding to implement our own media playback engine we considered
-the following alternative technologies:
-
-- DirectShow (Windows specific, cannot run inside sandbox without major hacking)
-
-- GStreamer (Windows support questionable at the time, extra ~2MB of DLLs due to
-library dependencies, targets many of our non-goals)
-
-- VLC (cannot use due to GPL)
-
-- MPlayer (cannot use due to GPL)
-
-- OpenMAX (complete overkill for our purposes)
-
-- liboggplay (specific to Ogg Theora/Vorbis)
-
-Our approach was to write our own media playback engine that was audio/video
-codec agnostic and focused on playback. Using FFmpeg avoids both the use of
-proprietary/commercial codecs and allows Chromium's media engine to support a
-wide variety of formats depending on FFmpeg's build configuration.
-
-[<img alt="image"
-src="/developers/design-documents/video/video_stack_arch.png">](/developers/design-documents/video/video_stack_arch.png)
-
-As previously mentioned, the pipeline is completely pull-based and relies on the
-sound card to drive playback. As the sound card requests additional data, the
-[audio
-renderer](https://cs.chromium.org/chromium/src/media/base/audio_renderer.h)
-requests decoded audio data from the [audio
-decoder](https://cs.chromium.org/chromium/src/media/base/audio_decoder.h), which
-requests encoded buffers from the
-[demuxer](https://cs.chromium.org/chromium/src/media/base/demuxer.h), which
-reads from the [data
-source](https://cs.chromium.org/chromium/src/media/base/data_source.h), and so
-on. As decoded audio data data is fed into the sound card the pipeline's global
-clock is updated. The [video
-renderer](https://cs.chromium.org/chromium/src/media/base/video_renderer.h)
-polls the global clock upon each vsync to determine when to request decoded
-frames from the [video
-decoder](https://cs.chromium.org/chromium/src/media/base/video_decoder.h) and
-when to render new frames to the video display. In the absence of a sound card
-or an audio track, the system clock is used to drive video decoding and
-rendering. Relevant source code is in the
-[media](https://cs.chromium.org/chromium/src/media/) directory.
-
-The pipeline uses a state machine to handle playback and events such as pausing,
-seeking, and stopping. A state transition typically consists of notifying all
-filters of the event and waiting for completion callbacks before completing the
-transition (diagram from
-[pipeline_impl.h](https://cs.chromium.org/chromium/src/media/base/pipeline_impl.h)):
-
-// \[ \*Created \] \[ Any State \] // | Start() | Stop() // V V // \[ Starting
-\] \[ Stopping \] // | | // V V // \[ Playing \] &lt;---------. \[ Stopped \] //
-| | Seek() | // | V | // | \[ Seeking \] ----' // | ^ // | Suspend() | // V | //
-\[ Suspending \] | // | | // V | // \[ Suspended \] | // | Resume() | // V | //
-\[ Resuming \] ---------'
-
-The pull-based design allows pause to be implemented by setting the playback
-rate to zero, causing the audio and video renderers to stop requesting data from
-upstream filters. Without any pending requests the entire pipeline enters an
-implicit paused state.
-
-### Integration
-
-The following diagram shows the current integration of the media playback
-pipeline into WebKit and Chromium browser; this is slightly out of date, but the
-gist remains the same.
-
-<table>
-<tr>
-<td> <img alt="image" src="/developers/design-documents/video/video_stack_chrome.png"> </td>
-<td> (1) WebKit requests to create a media player, which in Chromium's case creates WebMediaPlayerImpl and Pipeline.</td>
-<td> (2) BufferedDataSource requests to fetch the current video URL via ResourceLoader.</td>
-<td> (3) ResourceDispatcher forwards the request to the browser process.</td>
-<td> (4) A URLRequest is created for the request, which may already have cached data present in HttpCache. Data is sent back to BufferedDataSource as it becomes available.</td>
-<td> (5) FFmpeg demuxes and decodes audio/video data.</td>
-<td> (6) Due to sandboxing, AudioRendererImpl cannot open an audio device directly and requests the browser to open the device on its behalf.</td>
-<td> (7) The browser opens a new audio device and forwards audio callbacks to the corresponding render process.</td>
-<td> (8) Invalidates are sent to WebKit as new frames are available.</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video/video_stack_arch.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/video/video_stack_arch.graffle.sha1
deleted file mode 100644
index a9415acbda6..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video/video_stack_arch.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e87ef1cf74c1877599f367e2cccf582af1dc0b9d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video/video_stack_arch.png.sha1 b/chromium/docs/website/site/developers/design-documents/video/video_stack_arch.png.sha1
deleted file mode 100644
index ef4f33cb2d9..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video/video_stack_arch.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0163b1937f67d01a3162deda89174d318f89fdbf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.graffle.sha1
deleted file mode 100644
index e0253caaef5..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b8e69552031e1bc3c16c2e0822f9399c21ad8bb5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.png.sha1 b/chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.png.sha1
deleted file mode 100644
index a2de5973af2..00000000000
--- a/chromium/docs/website/site/developers/design-documents/video/video_stack_chrome.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a1b752433dcdadeb9ed199e967c518bd6e2158eb \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/views-rect-based-targeting/index.md b/chromium/docs/website/site/developers/design-documents/views-rect-based-targeting/index.md
deleted file mode 100644
index b8c19e6c738..00000000000
--- a/chromium/docs/website/site/developers/design-documents/views-rect-based-targeting/index.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: views-rect-based-targeting
-title: Rect-based event targeting in views
----
-
-Author: Terry Anderson (tdanderson at chromium)
-
-**Problem**
-
-Views (tabs, tab close buttons, bookmark star, etc.) formerly only supported
-point-based event targeting, which meant that targeting for gestures only
-considered the center point of the touch region and not its size. Treating
-gesture events in the same manner as mouse events when determining the event's
-target can lead to a poor experience for touchscreen users because a touch
-region can overlap many more possible targets than a mouse cursor and it is
-difficult to ensure that the center of the touch region is over the intended
-target (especially if that target is small, such as the tab close button). The
-goal of this feature is to add support for rect-based event targeting
-("fuzzing") by using a heuristic to determine the most probable target of a
-gesture having its touch region represented by a rectangle.
-
-**Solution**
-
-This heuristic is implemented in **View::GetEventHandlerForRect()** with the
-idea that small targets are more difficult to touch reliably than large targets,
-so small targets should get priority when determining the most probable target
-of a gesture. The heuristic works by recursively looking for candidate targets
-among the descendants of **this** which the touch region overlaps by at least
-60%. Among all such candidates, we return the target which has its center
-point\[1\] closest to the center point of the touch region. If no candidates for
-rect-based targeting exist, we instead return the target that would have been
-returned if point-based event targeting were used with the center point of the
-touch region.
-
-Point-based targeting still uses **View::GetEventHandlerForPoint(gfx::Point)**,
-but this function has been made non-virtual and simply calls into the virtual
-function **GetEventHandlerForRect(gfx::Rect)** with a unit rect (i.e., having
-size 1x1). The implementation of **View::GetEventHandlerForRect()** and its
-overrides has preserved the existing behavior of point-based targeting in this
-case. Otherwise, if called with a non-unit rect, the overrides of
-**GetEventHandlerForRect()** call directly into
-**View::GetEventHandlerForRect()**, with two exceptions mentioned in the "Future
-work" section below.
-
-See
-[r232891](https://src.chromium.org/viewvc/chrome?view=revision&revision=232891)
-for the implementation details.
-
-**Future work**
-
-The algorithm does not seem to perform as well for touchscreens which do not
-report their own radius values (as compared to touchscreens which do); see
-[issue 315795](https://code.google.com/p/chromium/issues/detail?id=315795).
-Furthermore, rect-based event targeting is not yet implemented for
-**AutofillDialogViews** or **NotificationView**.
-
-**Metrics**
-
-UMA metrics have been added to the **Ash.GestureTarget** histogram to give a
-rough estimation of how difficult it is for users to successfully tap on views
-elements (see
-[r209263](https://src.chromium.org/viewvc/chrome?revision=209263&view=revision)).
-These metrics specifically focus on successful taps (where the tap resulted in a
-user-visible effect) and unsuccessful taps (where the tap had no visible effect)
-on the tabstrip and surrounding regions.
-
-Successful taps counted:
-
- GESTURE_TABSWITCH_TAP: A tap on a currently unselected tab (i.e., the tap
- was responsible for selecting the tab).
-
- GESTURE_TABCLOSE_TAP: A tap on a tab's close button.
-
- GESTURE_NEWTAB_TAP: A tap on the new tab button.
-
- GESTURE_FRAMEMAXIMIZE_TAP: A tap on the frame maximize button.
-
- GESTURE_MAXIMIZE_DOUBLETAP: A double-tap on the browser window resulting in
- a maximize or restore action.
-
-Unsuccessful taps counted:
-
- GESTURE_TABNOSWITCH_TAP: A tap on a currently selected tab.
-
- GESTURE_FRAMEVIEW_TAP: A tap on the space to the right of the tabstrip, left
- of the tabstrip, or in between tabs\[2\].
-
- GESTURE_ROOTVIEWTOP_TAP: A tap on the top edge of a browser window.
-
-The effectiveness is computed as the ratio of successful taps to unsuccesful
-taps.
-
-This measurement is not perfect because it does not take into account cases
-where a tap was classified as successful but had an unintended result (for
-example, tapping with the intent of closing a tab but instead having a new tab
-open). Measuring these types of cases would require one or both of the
-following:
-
- Adding new metrics that track pairs of actions which occur with a very small
- delay in between. For example, a tap on a tab close button followed almost
- immediately by a Ctrl-Alt-T to restore the most recently closed tab may
- indicate that closing the tab was not the user’s intent.
-
-* Conducting a user study where participants execute a set of tasks
- (e.g., “close the second tab”, “open a new tab”) and we keep track
- of how many taps were required to accomplish each one.
-
-**Footnotes**
-
-\[1\] Originally the distance to the *center line* (the line that remains after
-repeatedly removing 1px borders from the rectangle) of the view was used in
-order to prevent bias against wide/tall rectangular targets. But in
-[r241955](https://src.chromium.org/viewvc/chrome?revision=241955&view=revision)
-this was changed to instead use the center point to fix an edge case and also
-because wide/tall targets would never actually be candidates for rect-based
-targeting due to their size relative to a touch region.
-
-\[2\] Each double-tap to maximize or restore the window contributes 2 to the
-value of this count, and each single tap also contributes 2 to the value of this
-count. Thus when interpreting the results of the data, the value of
-GESTURE_FRAMEVIEW_TAP first needs to be adjusted as (GESTURE_FRAMEVIEW_TAP - (2
-\* GESTURE_MAXIMIZE_DOUBLETAP)) / 2. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.graffle.sha1 b/chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.graffle.sha1
deleted file mode 100644
index f89796b503c..00000000000
--- a/chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.graffle.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c159b9a62902a4a449e73985af9875c55819e935 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.png.sha1 b/chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.png.sha1
deleted file mode 100644
index 05ec3e63d5d..00000000000
--- a/chromium/docs/website/site/developers/design-documents/views-windowing/NonClientView.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-90bb59b700d24eb65a19e4802f103670d7ea131a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/views-windowing/index.md b/chromium/docs/website/site/developers/design-documents/views-windowing/index.md
deleted file mode 100644
index 80cf6a6b7e8..00000000000
--- a/chromium/docs/website/site/developers/design-documents/views-windowing/index.md
+++ /dev/null
@@ -1,198 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: views-windowing
-title: views Windowing
----
-
-views provides support for creating dialog boxes and other kinds of windows
-through its Widget object. The developer creates a WidgetDelegate (or
-sub-interface) implementation that provides the Window with the necessary
-information to display itself, and also provides callbacks for notifications
-about windowing events.
-
-#### A Simple Example
-
-To create a simple window:
-
-#include "base/basictypes.h"
-
-#include "base/compiler_specific.h"
-
-#include "base/utf_string_conversions.h"
-
-#include "ui/gfx/canvas.h"
-
-#include "ui/views/controls/label.h"
-
-#include "ui/views/view.h"
-
-#include "ui/views/widget/widget.h"
-
-#include "ui/views/widget/widget_delegate.h"
-
-class WindowView : public views::WidgetDelegateView {
-
-public:
-
-WindowView() : label_(NULL) {
-
-Init();
-
-}
-
-virtual ~WindowView() {}
-
-private:
-
-// Overridden from views::View:
-
-virtual void OnPaint(gfx::Canvas\* canvas) OVERRIDE {
-canvas-&gt;FillRect(GetLocalBounds(), SK_ColorWHITE);
-
-}
-
-virtual void Layout() OVERRIDE {
-
-gfx::Size ps = label_-&gt;GetPreferredSize();
-
-label_-&gt;SetBounds((width() - ps.width()) / 2, (height() - ps.height()) / 2,
-ps.width(), ps.height());
-
-}
-
-virtual gfx::Size GetPreferredSize() OVERRIDE {
-
-gfx::Size ps = label_-&gt;GetPreferredSize();
-
-ps.set_width(ps.width() + 200);
-
-ps.set_height(ps.height() + 200);
-
-return ps;
-
-}
-
-// Overridden from views::WidgetDelegate:
-
-virtual string16 GetWindowTitle() const OVERRIDE{
-
-return ASCIIToUTF16("Hello World Window");
-
-}
-
-virtual bool CanResize() const OVERRIDE {
-
-return true;
-
-}
-
-virtual bool CanMaximize() const OVERRIDE {
-
-return true;
-
-}
-
-virtual views::View\* GetContentsView() OVERRIDE {
-
-return this;
-
-}
-
-void Init() {
-
-label_ = new views::Label(ASCIIToUTF16("Hello, World!"));
-
-AddChildView(label_);
-
-}
-
-views::Label\* label_;
-
-DISALLOW_COPY_AND_ASSIGN(WindowView);
-
-};
-
-...
-
-views::Widget::CreateWindow(new WindowView)-&gt;Show();
-
-The window will delete itself when the user closes it, which will cause the
-RootView within it to be destroyed, including the WindowView.
-
-#### WidgetDelegate
-
-The WidgetDelegate is an interface that provides information to the Widget class
-used when displaying the window, such as its title and icon, as well as
-properties such as whether or not the window can be resized. It also provides
-callbacks for events like closing. It has an accessor window() which provides
-access to the associated Window object. A Widget has a ContentsView, provided by
-the WidgetDelegate, which is a View that is inserted into the Window's client
-area.
-
-#### DialogDelegate
-
-A DialogDelegate is a specialized kind of WidgetDelegate specific to dialog
-boxes that have OK/Cancel buttons. The DialogDelegate and its associated
-ClientView (see below) provide built in OK/Cancel buttons, keyboard handlers for
-Esc/Enter and enabling for those features. As a user, you write a View that is
-inserted into the DialogClientView that provides the contents of the dialog box,
-and implement DialogDelegate instead of WidgetDelegate, which provides callbacks
-for when the buttons are clicked as well as methods to provide the button text,
-etc.
-
-#### Client and Non Client Views
-
-[<img alt="image"
-src="/developers/design-documents/views-windowing/NonClientView.png">](/developers/design-documents/views-windowing/NonClientView.png)
-
-Due to Chrome's non-standard window design, views supports custom rendered
-non-client areas. This is supported via the Window class and NonClientFrameView
-subclasses. To provide a custom window frame, a View subclasses
-NonClientFrameView. This allows the overriding View to render and respond to
-events from the non-client areas of a window. views contains two built in type
-that do this - CustomFrameView and NativeFrameView. These are used for standard
-dialog boxes and top level windows.
-
-For the [Browser Window](/developers/design-documents/browser-window), different
-subclasses of NonClientFrameView are used (GlassBrowserFrameView and
-OpaqueBrowserFrameView). To allow these to be used the browser overrides
-Window's CreateFrameViewForWindow method to construct the appropriate frame
-view.
-
-Aside from the RootView, the topmost View in a Window's View hierarchy is the
-NonClientView. This view is a container of exactly two views - the
-NonClientFrameView described above and a ClientView or subclass. The ClientView
-subclass contains the contents of the client area of the window (the stuff
-inside the titlebar/frame). A common ClientView subclass is DialogClientView,
-which provides built in handling for OK/Cancel buttons and a dialog theme
-background. The specific ClientView to be used is specified by a WidgetDelegate
-in its CreateClientView implementation. The default implementation of
-DialogDelegate automatically creates a DialogClientView. Custom WidgetDelegates
-can implement this method to return their own ClientView, which is what
-BrowserView does (the Browser window's WidgetDelegate implementor) to return
-itself. The ClientView API is fairly minimal except it is given a chance to
-perform non-client hit-testing, which is how the draggable title bar within the
-TabStrip and the resize corner of windows is implemented.
-
-The ClientView and NonClientFrameView are siblings because it is fairly common
-for Views to do one-time initialization when they are inserted into a View
-hierarchy and DWM toggling on Windows Vista and newer mean the
-NonClientFrameView needs to be swapped out when the DWM is enabled or disabled.
-As such if the ClientView were a child of the NonClientFrameView it would be
-re-parented, meaning its children might re-initialize with negative
-side-effects.
-
-#### Creating a Window
-
-Some simple code to create a window using the WindowView defined in the example
-above:
-
-views::Widget\* window = views::Widget::CreateWindow(new WindowView);
-
-window-&gt;Show();
-
-.. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview (1).png.sha1 b/chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview (1).png.sha1
deleted file mode 100644
index a48714c0704..00000000000
--- a/chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5aaa928b8481029d0244f7741a58c62ab4d32d87 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview.png.sha1 b/chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview.png.sha1
deleted file mode 100644
index 2c6e74d7b0a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/web-midi/Web MIDI design overview.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3eeca300256c10c4968db291d0eeadabda0ac441 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/web-midi/index.md b/chromium/docs/website/site/developers/design-documents/web-midi/index.md
deleted file mode 100644
index 8b9f3912170..00000000000
--- a/chromium/docs/website/site/developers/design-documents/web-midi/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: web-midi
-title: Web MIDI
----
-
-## Status
-
-* Enabled by default at m43
- * The base spec is [Working Draft 17 March
- 2015](http://www.w3.org/TR/2015/WD-webmidi-20150317/), but
- MIDIOut::clear() is missed.
-* [MIDIMessageEvent::receivedTime
- deprecation](https://www.chromestatus.com/features/5665772797952000)
- * deprecated at m54, and will be removed at m56.
-
-## W3C spec
-
-* Latest editor's draft: <http://webaudio.github.io/web-midi-api>
-* Issue tracker: <https://github.com/WebAudio/web-midi-api/issues>
-
-## Implementation notes
-
-* OS native software synths are partially disabled on Windows for
- security reasons
-* sysex permission can be allowed only for secure source like https://
- or http://localhost
- * See [Prefer Secure Origins For Powerful New
- Features](/Home/chromium-security/prefer-secure-origins-for-powerful-new-features)
-* sysex is not available from Chrome Apps
- ([crbug.com/266338](http://crbug.com/266338))
-
-## Web MIDI content layer - Design overview
-
-[<img alt="image"
-src="/developers/design-documents/web-midi/Web%20MIDI%20design%20overview%20%281%29.png"
-height=256
-width=400>](/developers/design-documents/web-midi/Web%20MIDI%20design%20overview%20%281%29.png)
-
-## Chromium open issues
-
-* [Cr=Blink-WebMIDI @
- crbug.com](https://code.google.com/p/chromium/issues/list?q=Cr%3DBlink-WebMIDI)
-
-## Trouble shooting
-
-* Crashes for OOM on Windows: VirtualMIDISynth may be the root. See
- <https://crbug.com/493663>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/web-nfc/index.md b/chromium/docs/website/site/developers/design-documents/web-nfc/index.md
deleted file mode 100644
index 8dc978a4225..00000000000
--- a/chromium/docs/website/site/developers/design-documents/web-nfc/index.md
+++ /dev/null
@@ -1,162 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: web-nfc
-title: Web NFC
----
-
-W3C Web NFC API implementation in Chromium
-
-Rijubrata Bhaumik
-&lt;[rijubrata.bhaumik@intel.com](mailto:rijubrata.bhaumik@intel.com)&gt;
-
-Leon Han &lt;[leon.han@intel.com](mailto:leon.han@intel.com)&gt;
-
-Donna Wu &lt;[donna.wu@intel.com](mailto:donna.wu@intel.com)&gt;
-
-Former: Alexander Shalamov
-&lt;[alexander.shalamov@intel.com](mailto:alexander.shalamov@intel.com)&gt;
-
-Last updated: 22 Dec 2020
-
-# Objective
-
-# **This document explains how W3C Web NFC API is implemented in Chromium on both renderer and browser process sides. Future work and implementation challenges are described in “Future work” section of this document.**
-
-# **ED Spec (8 Dec 2020):**
-
-# **W3C Web NFC API[ https://w3c.github.io/web-nfc/](https://w3c.github.io/web-nfc/)**
-
-# Background
-
-# **The[ Web NFC API](https://docs.google.com/document/d/1zowdPEgg_EhIp17MWUg-OhI9VSHv9FXjMMiHCrAiASY/edit#heading=h.nfo3i2oc05zq) enables wireless communication in close proximity between[ active](https://docs.google.com/document/d/1zowdPEgg_EhIp17MWUg-OhI9VSHv9FXjMMiHCrAiASY/edit#heading=h.b6v3ppngc8ml) and[ passive](https://docs.google.com/document/d/1zowdPEgg_EhIp17MWUg-OhI9VSHv9FXjMMiHCrAiASY/edit#heading=h.b6v3ppngc8ml) NFC devices. The means of communication are based on[ NDEF](https://docs.google.com/document/d/1zowdPEgg_EhIp17MWUg-OhI9VSHv9FXjMMiHCrAiASY/edit#heading=h.m4gclg6qqivi) message exchange specification. The API provides simple, yet powerful interfaces to create, read (receive) or write (send) NDEF compliant messages. The NDEF format was chosen to hide low level complexity and laborious handling of various NFC technology types. The NFC APIs are available on Android, Windows (UWP),[ iOS](https://developer.apple.com/documentation/corenfc), Chrome OS and Linux platforms.**
-
-# High level overview
-
-# **The implementation of Web NFC in Chromium consists of two main parts:**
-
-# **The NFC module in Blink located at[ third_party/blink/renderer/modules/nfc/](https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/nfc/) which contains Blink JS bindings for Web NFC, and the browser side platform level adaptation that is located at[ services/device/nfc](https://cs.chromium.org/chromium/src/services/device/nfc/). The Blink NFC module communicates with the browser adaptation through NFC mojo interface defined in[ nfc.mojom](https://cs.chromium.org/chromium/src/services/device/public/mojom/nfc.mojom) file and implemented by the[ services/device/nfc](https://cs.chromium.org/chromium/src/services/device/nfc/) module. The browser communicates with the android NFC implementation also through [nfc_provider.mojom](https://source.chromium.org/chromium/chromium/src/+/HEAD:services/device/public/mojom/nfc_provider.mojom), in order to get the NFC object associated with which either resumes or suspends NFC operation in case of webpage visibility status change. At the time of writing, only Android platform is supported.**
-
-# **Other platforms provide NFC interfaces and can be supported in[ the future](https://docs.google.com/document/d/1zowdPEgg_EhIp17MWUg-OhI9VSHv9FXjMMiHCrAiASY/edit#heading=h.430ahftk4vy).**
-
-# **[NDEFReader](https://w3c.github.io/web-nfc/#dom-ndefreader) is the primary interface of the Web NFC. The NDEFReader interface has both, write and scan methods:**
-
-# **- The write method is for writing data to an NFC tag. This method returns a promise, which will be resolved when the message is successfully written to an NFC tag, or rejected either when errors happened or process is aborted by setting the AbortSignal in the NDEFWriteOptions.**
-
-# **- The scan method tries to read data from any NFC tag that comes within proximity. Once there is some data found, an NDEFReadingEvent carrying the data is dispatched to the NDEFReader.**
-
-# Detailed design
-
-## Blink module
-
-### Details:
-
-# **<img alt="image" src="https://docs.google.com/drawings/u/1/d/sXWxXeOVTW7-4k_g3YrWR9w/image?w=624&h=447&rev=1361&ac=1&parent=1Q8cCKRJXIMLEw_bOHH6eRjzU9GN2nlpZTRK56knAyfQ" height=447 width=624>**
-
- # **NFCProxy will be the mojo interface proxy for NDEFReader(s).**
-
- # **There will be one NFCProxy instance per Document, and its lifecycle
- is bound with the document which will align with the Spec’s description
- “per ExecutionContext”**
-
- # **NDEFReader Read:**
-
- # **NFCProxy will have a &lt;reader, watch_id&gt; map to keep all active
- readers.**
-
- # **NDEFReader::scan() will call NFCProxy::StartReading(reader), which
- will assign a |watch_id| for the |reader| and add it into NFCProxy’s
- active reader list then call device::mojom::blink::NFC::Watch() to make
- a request to DeviceService.**
-
- # **The promise returned by scan() being resolved means DeviceService
- has already started the scanning process.**
-
- # **The scanning can be aborted anytime by setting the corresponding
- AbortSignal in NDEFScanOptions, NDEFReader will call
- NFCProxy::StopReading(reader) to remove itself from NFCProxy’s active
- reader list and make a request to DeviceService to cancel.**
-
- # **Stop itself when document is destroyed or it is destroyed itself.**
-
- # **This will be an EventTarget and an ActiveScriptWrappable. If the
- reader is in the middle of scanning and there are event listeners
- registered, then it should remain alive until all pending activities get
- done.**
-
- # **NDEFReader Write:**
-
- # **It will implement ContextClient for a valid Document to get NFCProxy
- and pass the write request to the NFCProxy for push() method.**
-
- # **The push() can be aborted anytime by setting the corresponding
- AbortSignal.**
-
-## Android adaptation
-
-# **<img alt="image" src="https://docs.google.com/drawings/u/1/d/s9b1hpRzyLqspPbIWs5MOeg/image?w=624&h=435&rev=1703&ac=1&parent=1Q8cCKRJXIMLEw_bOHH6eRjzU9GN2nlpZTRK56knAyfQ" height=435 width=624>**
-
-# **The most important classes for Android adaptation are[ NfcImpl](https://cs.chromium.org/chromium/src/services/device/nfc/android/java/src/org/chromium/device/nfc/NfcImpl.java),[ NfcTagHandler](https://cs.chromium.org/chromium/src/services/device/nfc/android/java/src/org/chromium/device/nfc/NfcTagHandler.java) and[ NdefMessageUtils](https://cs.chromium.org/chromium/src/services/device/nfc/android/java/src/org/chromium/device/nfc/NdefMessageUtils.java).**
-
-# **NfcImpl class implements mojo NFC interface and uses Android platform NFC APIs to access NFC functionality. NfcTagHandler wraps android.nfc.Tag object and provides a unified interface for reading / writing NDEF messages. NdefMessageUtils has few static methods for conversion between android.nfc.NdefMessage and mojom.NdefMessage objects.**
-
-# **At runtime, the latest NFC.push operation is stored in PendingPushOperation object and as soon as the NFC tag appears within close proximity, write operation is performed. Same pattern is applicable for NFC.watch operations.**
-
-# Runtime view
-
-## NDEFReader#write()
-
-# **<img alt="image" src="https://lh5.googleusercontent.com/pGJyH8SbkcZ8dIxDUmb6w2WJIED5-t44IR-igSv5IAwSL1PIvVzSg7hq2WX0kghDJXSKwHq87sbsJjFBwWMAnOfNc4WOH-ApMTM-2QzRT-RJ5vO8XGA8l1lAHCtz81KFMk_7o1Li" height=397 width=624>**
-
-# **NDEFReader::write() will resolve the promise if there is no error occurred and the message is written to a matched target successfully. In other cases, any errors, or the AbortSignal is set during the process, it will reject the promise.**
-
-## NDEFReader#scan()
-
-# **<img alt="image" src="https://lh3.googleusercontent.com/SseJ6tQdMf97GuUQ3mPfCrmHrMv8sqGE2UYNKtiKmN0a7FNj1O-vCJOVPg_XXpP1bvFUoQnUqRlTPVVpC6EKovMWddphgnZ_MaYRn13lp0REBQlHTRE5aZsCDLQVjsvBn6Ps0qQ5" height=497 width=624>**
-
-# **NDEFReader#scan() may trigger NDEFReader#{onreading,onreadingerror}() events during the whole process. NDEFReader::scan() can be called multiple times on the same reader object but there is maximum only one active at any time point.**
-
-# Future work
-
- # **Support for ISO-DEP. The ISO-DEP (ISO 14443-4) protocol provides low
- level I/O operations on a NFC tag. This functionality might be required by
- developers who would like to communicate with smart cards or implement
- custom communication mechanisms.**
-
- # **Support for HCE.[ Host-based Card Emulation
- (HCE)](https://developer.android.com/guide/topics/connectivity/nfc/hce.html)
- would allow web developers to emulate secure element component. This feature
- would enable ticketing, payments, and other complex use-cases.**
-
- # **Bootstrapping WebVR. HMD enclosure can have NFC tag that contains
- information about lens configuration (dual / single element), FOV, magnet
- button, URL to be opened and other features.**
-
- # **Support for: Chrome OS, Linux and Windows (UWP) platforms.**
-
- # **Support for: NFC assisted WebBluetooth handover / pairing.**
-
- # **Research whether[ iOS Core
- NFC](https://developer.apple.com/documentation/corenfc) can be used to
- implement Web NFC support in Chromium on iOS platform.**
-
-# Security and Privacy
-
-# **Please see the[ UX design](https://docs.google.com/document/d/1ZpPGoMkPwIl-uT9ixE_g3acEZSXdoZAdegMfvmBqh5w/edit#heading=h.o3wrh87n7a7o) for detailed information about the permission model.**
-
-# **<img alt="image" src="https://lh6.googleusercontent.com/JuVnI4n1F5L7oFbaRwHQbbeCDKgchJrWYRo7Y6LD6fS0n_lCwFc9afzyf9PaChDP3sALFQfQpv5vm5pzmpTNiaksqTCady2Wt4M4662cKccdkHWkGbQHtFg5uevVKMCRGzOZoxvK" height=317 width=624>**
-
-# **Web NFC API can be only accessed by top-level secure browsing contexts and user permission is required to access NFC functionality. Web NFC API specification addresses security and privacy topics in chapter[ Security and Privacy.](https://w3c.github.io/web-nfc/#security)**
-
-# Glossary
-
-### \[Web NFC\] W3C Web NFC API[ https://w3c.github.io/web-nfc/](https://w3c.github.io/web-nfc/)
-
-### \[active\] Active NFC device (phones, NFC readers, powered devices)
-
-### \[passive\] Passive NFC device (tags, smart cards, etc)
-
-### \[NDEF\] NFC Data Exchange Format[ NDEF definition](http://nfc-forum.org/our-work/specifications-and-application-documents/specifications/data-exchange-format-technical-specification/) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/web-nfc/ndef_reader.png.sha1 b/chromium/docs/website/site/developers/design-documents/web-nfc/ndef_reader.png.sha1
deleted file mode 100644
index 663b05189bd..00000000000
--- a/chromium/docs/website/site/developers/design-documents/web-nfc/ndef_reader.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cfef1b6d755f551e6d5840322b97a908a5463b00 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/web-nfc/ndef_writer.png.sha1 b/chromium/docs/website/site/developers/design-documents/web-nfc/ndef_writer.png.sha1
deleted file mode 100644
index 45340565342..00000000000
--- a/chromium/docs/website/site/developers/design-documents/web-nfc/ndef_writer.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01878925af9aac8acc85cbf6e4035e6224efef3b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/web-nfc/nfc_android_platform.png.sha1 b/chromium/docs/website/site/developers/design-documents/web-nfc/nfc_android_platform.png.sha1
deleted file mode 100644
index 31b0a01871b..00000000000
--- a/chromium/docs/website/site/developers/design-documents/web-nfc/nfc_android_platform.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cdbf8e4d6f57fc5e936b295733b190dd8979440c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/webnavigation-api-internals/index.md b/chromium/docs/website/site/developers/design-documents/webnavigation-api-internals/index.md
deleted file mode 100644
index a0e3c6f119f..00000000000
--- a/chromium/docs/website/site/developers/design-documents/webnavigation-api-internals/index.md
+++ /dev/null
@@ -1,139 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: webnavigation-api-internals
-title: WebNavigation API internals
----
-
-**# **This document aims at explaining how the [webNavigation API](http://developer.chrome.com/extensions/webNavigation.html) is tracking the navigation state of a WebContents (aka RenderViewHostDelegate). If you’re interested in the source, the WebContentsObserver is defined in [src/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc)****
-
-**## What is the current RenderViewHost?**
-
-**Contrary to popular belief, a WebContents has not a 1:1 relation to a
-RenderViewHost, but in fact, it's a 1:n relation. A WebContents has one visible
-RenderViewHost at a time, but the RenderViewHost can change during navigation,
-and the WebContents keeps around previous RenderViewHosts in case the user comes
-back to them. Therefore, a WebContentsObserver has to pay close attention to
-which RenderViewHost triggered a given signal.**
-
-**The WebNavigation API tracks two RenderViewHosts per WebContents, the current
-RenderViewHost, and the pending RenderViewHost. The former is the visible one:
-the latest RenderViewHost in which a top-level navigation was committed, or, if
-no such RenderViewHost exists, the first RenderViewHost connected to the
-WebContents.**
-
-**The latter is the latest RenderViewHost in which a provisional top-level navigation was started other than the current RenderViewHost.**
-
-**We ignore all navigations from RenderViewHosts but those two RenderViewHosts. We also do not observe navigation events from interstitial pages such as SSL certificate errors - these are rendered with an InterstitialPage as RenderViewHostDelegate.**
-
-**Those two RenderViewHosts are determined as follows.**
-
-* **WebContentsObserver::AboutToNavigateRenderView**
-
-**Every top-level navigation starts with this call. If this is the first call, the passed in RenderViewHost becomes the current RenderViewHost, otherwise, if it isn't the current RenderViewHost, it becomes the pending RenderViewHost.**
-
-* **WebContentsObserver::DidCommitProvisionalLoadForFrame**
-
-**As soon as a top-level navigation is committed, the corresponding RenderViewHost becomes the current RenderViewHost. We discard the pending RenderViewHost.**
-
-* **WebContentsObserver::DidFailProvisionalLoad**
-
-**If the pending RenderViewHost fails the provisional load, we discard it.**
-
-* **WebContentsObserver::RenderViewGone:**
-
-**If the current RenderViewHost crashes, we discard both RenderViewHosts.**
-
-* **WebContentsObserver::RenderViewDeleted:**
-
-**If the pending RenderViewHost is deleted for whatever reason, we discard it. If the current RenderViewHost is deleted, we discard it and if there is a pending RenderViewHosts it becomes the current RenderViewHost.**
-
-**Note that the current RenderViewHost is not only deleted when the tab is closed. The instant search and prerender features can swap in a different WebContents of a tab.**
-
-**## Navigation of a top-level Frame**
-
-**For a successful navigation, a frame has to go through several states (see
-also Adam’s recent presentation “[How WebKit
-works](https://docs.google.com/a/google.com/presentation/pub?id=1ZRIQbUKw9Tf077odCh66OrrwRIVNLvI_nhLm2Gi__F0#slide=id.p)”).
-Keep in mind that you can receive these signals from any number of
-RenderViewHosts. You should ignore all signals but from the current
-RenderViewHost or the pending RenderViewHost.**
-
-**Since a frame is only uniquely identified within a renderer process, and a
-WebContents can be a delegate for several RenderViewHosts in different renderer
-processes, we need the tuple (RenderViewHost, frame_id) to identify a frame
-uniquely within a given WebContents.**
-
-* **WebContentsObserver::DidStartProvisionalLoadForFrame**
-
-**At this point, the URL load is about to start, but might never commit (invalid URL, download, etc..). Only when the subsequently triggered resource load actually succeeds and results in a navigation, we will know what URL is going to be displayed.**
-
-* **content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT**
-
-**While not strictly necessary to track the navigation state, we observe this notification to determine whether a server-side redirect happened.**
-
-* **WebContentsObserver::DidCommitProvisionalLoadForFrame**
-
-**At this point, the navigation was committed, i.e. we received the first headers, and an history entry was created.**
-
-**If the navigation only changed the reference fragment, or was triggered using the history API (e.g. [window.history.replaceState](https://developer.mozilla.org/en-US/docs/DOM/window.history)), we will receive this signal without a prior DidStartProvisionalLoadForFrame signal.**
-
-* **WebContentsObserver::DocumentLoadedInFrame**
-
-**WebKit finished parsing the document. At this point scripts marked as defer were executed, and content scripts marked “document_end” get injected into the frame.**
-
-* **WebContentsObserver::DidFinishLoad**
-
-**The navigation is done, i.e. the spinner of the tab will stop spinning, and the onload event was dispatched.**
-
-**If we’re displaying replacement content, e.g. network error pages, we might see a DidFinishLoad event for a frame which we didn’t see before. It is safe to ignore these events.**
-
-**## Navigation of a sub-frame**
-
-**The navigation events for sub-frames do not differ from the events for the
-top-level frame. Sub-frame navigations can start at any time after the
-provisional load of their parent frame was committed. If a sub-frame is part of
-the parent document (as opposed to created by JavaScript), the parent frame’s
-DidFinishLoad signal will be sent after all of its sub-frames DidFinishLoad
-signals.**
-
-**It’s also possible for sub-frames of a frame to send navigation signals while their parent frame already started a new provisional load.**
-
-**## Navigation failures**
-
-**A navigation can fail for a number of reasons. Since we’re tracking the state
-of all frames (and extensions using the webNavigation API might do the same), it
-is important to not have frames hanging around forever. They should either
-finish navigation, or fail.**
-
-**The following is a list of events we observe to determine whether a navigation
-has failed.**
-
-* **content::NOTIFICATION_RENDER_VIEW_HOST_DELETED**
-
-**When the frame’s RenderViewHost was deleted, the navigation failed.**
-
-* **WebContentsObserver::AboutToNavigateRenderView**
-
-**When the pending RenderViewHost is replaced by a new pending RenderViewHost, all frames navigating in the old pending RenderViewHost fail.**
-
-* **WebContentsObserver::DidCommitProvisionalLoadForFrame**
-
-**If the main frame of the current RenderViewHost commits, all navigations in the pending RenderViewHost fail. If the main frame committed a real load (as opposed to a reference fragment navigation or an history API navigation), all sub frames in the current RenderViewHost fail.**
-
-**If a frame in the pending RenderViewHost commits, all navigations in the current RenderViewHost fail.**
-
-* **WebContentsObserver::DidFailProvisionalLoad**
-
-**This error would occur if e.g. the host could not be found.**
-
-* **WebContentsObserver::DidFailLoad**
-
-**This error would occur if e.g. window.stop() is invoked, or the user hits ESC.**
-
-* **WebContentsObserver::WebContentsDestroyed**
-
-**All frames we know about fail.** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/widget-refactor/index.md b/chromium/docs/website/site/developers/design-documents/widget-refactor/index.md
deleted file mode 100644
index 3b17eb2349a..00000000000
--- a/chromium/docs/website/site/developers/design-documents/widget-refactor/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: widget-refactor
-title: Widget Refactor
----
-
-### Background
-
-A view hierarchy is hosted by a views::Widget subclass. This subclass (e.g.
-WidgetWin or WidgetGtk) receives native events from the operating system, cracks
-them into views-specific types and propagates them into the view hierarchy.
-
-The current arrangement poses some challenges that make porting to a new native
-toolkit problematic:
-
-* The native Widget implementations are very thick. There is a lot of
- duplicated code that makes fixing bugs cumbersome.
-* Swapping native Widget implementations is problematic because they
- are stateful. The state is meaningful and may not have good analogs
- in other implementations.
-
-### Details
-
-sdfsdf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.graffle.zip.sha1 b/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.graffle.zip.sha1
deleted file mode 100644
index 072bafa1b99..00000000000
--- a/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.graffle.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c98105030a1ce4e614cb7dd096c15a480a9e4d34 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png.sha1 b/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png.sha1
deleted file mode 100644
index ec5c760efbe..00000000000
--- a/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-953c8c5fefd10fcc405799793fefbb3aa6344052 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/index.md b/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/index.md
deleted file mode 100644
index f8b2100f5d3..00000000000
--- a/chromium/docs/website/site/developers/design-documents/wrench-menu-mac/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: wrench-menu-mac
-title: Wrench Menu (Mac)
----
-
-Chrome 6 introduces a new Wrench menu that unifies it with the old Page menu. To
-save space and eliminate clutter, the UI leads decided to merge common elements
-into button items. Cocoa allows putting custom items in menus using
--\[NSMenuItem setView:\], but none of the typical menu interactions that users
-expect are provided. Missing are hover states, menu closing on selection, and
-non-sticky mode. Menus on Mac OS X have two modes of interaction; the first is
-typical of other platforms: click to open and click to select an item. The other
-is non-sticky mode, where the user can click the menu open and, without
-releasing, drag to the desired item, and release to select it. Custom buttons
-were written to implement all these behaviors, as well as to change their
-appearance.
-
-Another feature of the menu is to be able to use the zoom buttons and have the
-page update while the menu stays open. The issue in implementing this was that
-after the zoom button messages the renderer to zoom, the acknowledgment
-(containing the actual zoom level) comes back asynchronously to the I/O thread,
-which then forwards the Task to the UI thread's main event loop. When a menu is
-running, though, a nested event loop is run that blocks that UI event loop. To
-fix this, the callback on the IPC thread is special-cased to post the Task in a
-way that both the modal menu loop and, if a menu is not running, the main loop
-can process it.
-
-[<img alt="image"
-src="/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png">](/developers/design-documents/wrench-menu-mac/WrenchMenuTaskDispatch.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/xss-auditor/XSSAuditorViewSource.png.sha1 b/chromium/docs/website/site/developers/design-documents/xss-auditor/XSSAuditorViewSource.png.sha1
deleted file mode 100644
index 7b2340a8ece..00000000000
--- a/chromium/docs/website/site/developers/design-documents/xss-auditor/XSSAuditorViewSource.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bed083917beb84e99dd3fde9ba251b94ab371876 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/design-documents/xss-auditor/index.md b/chromium/docs/website/site/developers/design-documents/xss-auditor/index.md
deleted file mode 100644
index 6b58dd6d209..00000000000
--- a/chromium/docs/website/site/developers/design-documents/xss-auditor/index.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: xss-auditor
-title: XSS Auditor
----
-
-## Note: [An Intent to Deprecate and Remove the XSS Auditor](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/TuYw-EZhO9g/blGViehIAwAJ) was published on 15-July-2019. The feature was [permanently disabled](https://chromium.googlesource.com/chromium/src.git/+/73d3b625e731badaf9ad3b8f3e6cdf951387a589) on 5-August-2019 and shortly after fully [removed](https://bugs.chromium.org/p/chromium/issues/detail?id=968591#c10) for Chrome 78.
-
-## Design
-
-The XSS Auditor runs during the HTML parsing phase and attempts to find
-[reflections](https://en.wikipedia.org/wiki/Cross-site_scripting#Reflected_(non-persistent))
-from the request to the response body. It does not attempt to mitigate Stored or
-DOM-based XSS attacks.
-
-If a possible reflection has been found, Chrome may ignore (neuter) the specific
-script, or it may block the page from loading with an ERR_BLOCKED_BY_XSS_AUDITOR
-error page.
-
-The original design <http://www.collinjackson.com/research/xssauditor.pdf> is
-the best place to start. The current rules are an evolved response to things
-observed in the wild.
-
-## Performance
-
-Processing costs are essentially zero unless the URL or POST body includes any
-of the four characters **" &gt; &lt; '**. When those characters are found, we
-only invoke heavy processing on those attributes that might be dangerous. This
-stands in contrast to the XSS Filter in Internet Explorer, which runs costly
-regular expressions.
-
-## False Negatives (Bypasses and bugs)
-
-Bypasses are [not considered security
-bugs](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md#Are-XSS-filter-bypasses-considered-security-bugs),
-but should be logged against the [XSS Auditor component](https://goo.gl/4xSVhV)
-as functional issues. Stored (attacks where the script is stored in a site's
-database, for instance) and DOM-based XSS attacks (where JavaScript on the page
-unsafely manipulates content retrieved from document.location.href, for
-instance) are out-of-scope and do not need to be logged.
-
-## False Positives
-
-## Unlike implementations in some other browsers, Chrome's XSS Auditor runs on
-same-origin navigations; this increases the risk of a false-positive but
-provides better protection against multi-stage attacks.
-
-## The XSS Auditor looks for reflected content within the context of executable
-(script) nodes. By checking for reflections only in contexts where script may be
-executed, the Auditor avoids many types of false positive. Because text that is
-reflected into a non-executable context (e.g. into a &lt;textarea&gt; element)
-does not trigger the Auditor.
-
-## However, the Auditor has no way of knowing whether a given script block which
-appears in both the request and the response was truly reflected from the
-request to the response. For instance, [consider this
-page](http://webdbg.com/test/xss/alert12345.aspx) that *always* contains the
-markup &lt;script&gt;alert("12345");&lt;/script&gt;. If the user navigates to
-this page normally, the Auditor does not trigger. However, if the user navigates
-to this page [using a URL](http://webdbg.com/test/xss/auditor.aspx) whose query
-string contains ?query=&lt;script&gt;alert("12345");&lt;/script&gt;, the Auditor
-concludes that the script appearing within the response page may be a reflection
-from the request (an XSS attack), and the XSS Auditor blocks the response.
-
-## In the past, the XSS Auditor defaulted to neutering only the
-potentially-reflected block, leaving the rest of the page intact. However, this
-creates a vulnerability whereby an attacker may
-"[snipe](https://bugs.chromium.org/p/chromium/issues/detail?id=825675)" an
-unwanted block of script from a victim page by sending the script-to-kill in the
-request body. To mitigate such attacks, as of Chrome 57, the XSS Auditor [now
-blocks](https://www.chromestatus.com/features/5748927282282496) the response
-entirely.
-
-## In some scenarios, a site legitimately wishes to send SCRIPT markup from one
-page to another where that markup may already appear (for instance, in the HTML
-Editing UI of a CMS or bulletin board site). In such cases, the site developers
-should either encode the content before transferring it (e.g. encode the content
-as base64, such that it is not identified as a reflection), or by opting out of
-the XSS Auditor by setting the HTTP response header.
-
-## Control via Response Header
-
-Sites may control the XSS Auditor's behavior using the X-XSS-Protection response
-header, either disabling the feature or changing its mode.
-
-This Response header disables the Auditor:
-
-X-XSS-Protection: 0
-
-This Response header enables the Auditor and sets the mode to neuter:
-
-X-XSS-Protection: 1
-
-This Response header enables the Auditor and sets the mode to block (the
-default):
-
-X-XSS-Protection: 1; mode=block
-
-When the feature is enabled (state "1"), Chrome's XSS Auditor allows the header
-to specify a report URI to which violation reports should be sent. In Chrome 64
-and 65, that URI must be same-origin to the page, but that limit was [removed in
-Chrome 66](https://crbug.com/811440). If your report URL includes a semicolon,
-be sure to [wrap the URL in quotation marks](https://crbug.com/825557).
-
-X-XSS-Protection: 1; mode=block; report=https://example.com/log.cgi
-
-X-XSS-Protection: 1; report="https://example.com/log.cgi?jsessionid=132;abc"
-
-## Debugging via View Source
-
-## If the XSS Auditor blocks or modifies a response because it detected
-reflected script, the View Source (CTRL+U) view for that page will point to the
-script that was reflected:
-
-## [<img alt="View-Source view highlights the reflected text"
-src="/developers/design-documents/xss-auditor/XSSAuditorViewSource.png">](/developers/design-documents/xss-auditor/XSSAuditorViewSource.png)
-
-## Code
-
-The code for the XSS Auditor feature can be found in Blink at
-[XSSAuditor.h](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/html/parser/xss_auditor.h)
-and
-[XSSAuditorDelegate.h](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/html/parser/xss_auditor_delegate.h?).
-Performance tests can be found
-[here](https://cs.chromium.org/chromium/src/third_party/blink/perf_tests/xss_auditor/).
-
-## History
-
-The XSS Auditor was introduced [in Chrome
-4](https://blog.chromium.org/2010/01/security-in-depth-new-security-features.html)
-in 2010.
-
-## Abuse
-
-The XSS Auditor works by matching request data to data in a response page, which
-may be cross-origin. This creates the possibility that the XSS Auditor may be
-abused by an attacker to determine the content of a cross-origin page, a
-violation of Same Origin Policy.
-
-In a canonical attack, the attacker frames a victim page with a string of
-interest in it, then attempts to determine that string by making a series of
-successive guesses until it **detects blocking** by the XSS Auditor. If the XSS
-Auditor blocks the page, the attacker concludes that their guess was correct.
-This form of attack is constrained to pages matching certain
-[criteria](https://bugs.chromium.org/p/chromium/issues/detail?id=176137#c17).
-
-To combat this threat, the attacker should not be able to detect that the
-Auditor has blocked loading of the page. Most known
-[detection](https://crbug.com/176137) [mechanisms](https://crbug.com/396544)
-have been fixed, although a website with a content injection vulnerability may
-remain [vulnerable](https://crbug.com/396544#c14) and [quirks of
-same-origin-policy](http://blog.portswigger.net/2015/08/abusing-chromes-xss-auditor-to-steal.html)
-may permit detection of blocking. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/DumpCFReg.zip.sha1 b/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/DumpCFReg.zip.sha1
deleted file mode 100644
index 492c1d21245..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/DumpCFReg.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-30f48ab4e590c8c21a1158db78850f3b968d7a49 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image0.png.sha1 b/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image0.png.sha1
deleted file mode 100644
index 9834452fb11..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image0.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6bd7f5c7783b67a644f4edea8a4f10ada29b0bac \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image1.png.sha1 b/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image1.png.sha1
deleted file mode 100644
index 4de5d494c8b..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-276d7b85a0fa46f298a6cb44dd5008ee478e9e7c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image2.png.sha1 b/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image2.png.sha1
deleted file mode 100644
index 5949186b04e..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-52bbd1c9dbc4643861cf06e83d9215f1b27c378f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image3.png.sha1 b/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image3.png.sha1
deleted file mode 100644
index 5c47dd61aa6..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7c2418aaaf10c7bd476495f7e42b8a02879151f9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image4.png.sha1 b/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image4.png.sha1
deleted file mode 100644
index d1b425935c0..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/image4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cc1b298576df41df4cdcb93e1aa270fd26e59631 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/index.md b/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/index.md
deleted file mode 100644
index 7007051e787..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/gcf_troubleshooting/index.md
+++ /dev/null
@@ -1,270 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/diagnostics
- - Diagnostics
-page_name: gcf_troubleshooting
-title: Chrome Frame Troubleshooting
----
-
-## Google Chrome Frame is no longer supported and retired as of February 25, 2014. **For guidance on what you need to know as a developer or IT administrator, please read our [developer FAQs](https://developers.google.com/chrome/chrome-frame/) for Chrome Frame.**
-
-[TOC]
-
-## Introduction
-
-This document describes the troubleshooting flow for Google Chrome Frame users.
-
-## Basic Troubleshooting Actions
-
-### Filing a bug
-
-If the problem has serious security implications please report it using
-guidelines posted here:
-<http://www.chromium.org/Home/chromium-security/reporting-security-bugs>
-
-Before you file any bug, please search Google Chrome Frame bug tracker:
-<http://code.google.com/p/chromium/issues/list?q=Area%3DChromeFrame> If your
-problem is a known issue then it’s likely that a solution is waiting for you. If
-you find the bug is already there, feel free to star it so you can find it later
-and indicate to us another person is interested in its resolution.
-
-if you can't find the bug in the database should you consider filing a new one
-by filling out the form here:
-<http://code.google.com/p/chromium/issues/entry?template=ChromeFrame%20Issue> If
-possible, provide a test page that demonstrates the problem. Test pages help
-quickly fix the problem and allow us to catch regressions in future.
-
-Asking a Question on the ChromeFrame Discussion Group
-
-Join / post your question to
-<http://groups.google.com/group/google-chrome-frame> This forum is answered by
-Chrome Frame engineers, and is publicly-viewable, so don’t ask any
-sensitive/proprietary questions here.
-
-### Checking if a Page is Running in Chrome Frame
-
-Right-click the page (make sure to click on the page, not on any embedded
-controls e.g., flash). You should see a (small-ish) context menu that shows
-“About Chrome Frame...” as the last option in the list.
-
-If you don’t see this, then ChromeFrame is not running this page.
-
-### Check if Chrome Frame is installed
-
-Websites are not automatically triggered to load in Chrome Frame -- the site has
-to explicitly trigger it. In order for a web site to know that chrome frame is
-available the following should work:
-
-1. Chrome Frame is properly installed: typing “gcf:about:version” into
- IE address bar should display a page with version information.
-2. Chrome Frame is enabled: you can verify that it is enabled by
- accessing ‘Manage Addons’ dialog via Tools menu in IE.
-3. To make sure that web sites can see chrome frame, visit
- [whatsmyuseragent.com](http://www.google.com/url?q=http%3A%2F%2Fwhatsmyuseragent.com&sa=D&sntz=1&usg=AFQjCNFVJf0_Aui3AZpzlWQ1o7wZEHbkeg)
- and see if “chromeframe/...” appears in the user-agent string.
-
-## Common Issues
-
-### I just installed Chrome Frame but it is not working
-
-Make sure that Chrome Frame is installed and enabled. Chrome Frame plugs into
-Internet Explorer as a
-[BHO](http://www.google.com/url?q=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fbb250436(v%3Dvs.85).aspx%23bho_whatare&sa=D&sntz=1&usg=AFQjCNFTOgksXW5aAjZ0PIjbS5dDJiKVsw).
-When a new BHO is installed, it needs a browser restart to get loaded. However,
-after a fresh install, a site can use a script on the landing page that makes
-sure the current browser instance gets Chrome Frame activated.
-
-If a browser restart or reboot fixes this problem then this is very likely a BHO
-load after install issue.
-
-Example support thread::
-<https://groups.google.com/group/google-chrome-frame/browse_thread/thread/517755cfbe6d31db>
-
-### Is IE restart required after installing Chrome Frame for it to work?
-
-1. No, you shouldn’t need to restart after installing for it to work.
-2. If it isn’t working, please file a bug.
-
-Example support
-thread:<http://groups.google.com/group/google-chrome-frame/browse_thread/thread/438390134edaf4fd#>
-
-### Chrome Frame Is Enabled but not working
-
-You have installed Chrome Frame and even after the browser restart or reboot it
-does not work. Then you can first check if Chrome Frame is installed:
-
-1. Verify that “third party browser extensions” are not disabled in IE
- (‘Tools’ -&gt; ‘Manage Add-ons’)
-2. This can also be controlled via Group Policy, check the setting
- here: Computer Configuration/Administrative Templates/Windows
- Components/Internet Explorer/Internet Control Panel/Advanced
- Page/Alllow third-party browser extensions
-
-Example support
-thread:<http://groups.google.com/group/google-chrome-frame/browse_thread/thread/6ef50d50cb09db9f/d6d0a1bc9fad0725?pli=1>
-
-### Can a server tell if GCF is both Installed \*and\* Enabled?
-
-1. Check the user-agent string. If the “chromeframe/...” token is
- present, then it is installed and enabled.
-2. If Chrome Frame is installed but the BHO is disabled then it can be
- detected using script: var gcf = new
- ActiveXObject('ChromeTab.ChromeFrame')
-
-Example support
-thread:<http://groups.google.com/group/google-chrome-frame/browse_thread/thread/21cb36205d1b79a2#>
-
-### Google Chrome Frame doesn't work for site XYZ
-
-1. Make sure that Chrome Frame is installed and enabled.
-2. Sites have to opt-in to turning on Chrome Frame, so it doesn’t
- automatically turn on for every site.
-3. Make sure that the site XYZ is sending the ChromeFrame &lt;meta&gt;
- tag, or the HTTP headers as described here:
- <http://www.chromium.org/developers/how-tos/chrome-frame-getting-started#TOC-Making-Your-Pages-Work-With-Google->
-4. If the user wants Chrome Frame on for every site, see
- <http://www.chromium.org/developers/how-tos/chrome-frame-getting-started#TOC-Testing-Your-Sites>
-
-Example support threads:
-
-<http://groups.google.com/group/google-chrome-frame/browse_thread/thread/6914c2edd167503c#><http://groups.google.com/group/google-chrome-frame/browse_thread/thread/021af37c507512cd#>
-
-### Chrome frame works, but gcf: prefix doesn't, Why?
-
-1. gcf: doesn’t work on all sites by default, for security reasons.
-2. To enable this testing feature, open regedit.exe and add a DWORD
- value AllowUnsafeURLs=1 under HKCU\\Software\\Google\\ChromeFrame
-
-Example support
-thread:<http://groups.google.com/group/google-chrome-frame/browse_thread/thread/38c53f04d1f6af13#>
-
-### Chrome Frame Is Not active unless I use the gcf: prefix
-
-1. Make sure the page is only sending one X-UA-Compatible &lt;meta&gt;
- tag.
-2. Make sure that the meta tag in in the first 1K of the page contents.
-
-Example support thread:
-
-<http://groups.google.com/group/google-chrome-frame/browse_thread/thread/04f133762065d471#>
-
-### CFInstall.js’s Chrome Frame Detection doesn't work
-
-1. Make sure the calls to CFInstall.js’s CFInstall.check() are
- correctly formed.
-2. Make sure the CFInstall.check() is performed after the &lt;body&gt;
- is loaded.
-
-Example support
-thread:<http://groups.google.com/group/google-chrome-frame/browse_thread/thread/a49b91141fc84a10#>
-
-## Advanced Troubleshooting
-
-### Detecting crashes
-
-Google Chrome Frame plugin is loaded as npchrome_frame.dll in Internet Explorer
-processes. It uses Chrome’s multi process architecture so when a web page is
-loaded using this plugin, it will launch a Chrome Browser process, which in turn
-launches a Chrome Renderer process.
-
-The following sections describe how to identify crashes in these processes.
-
-#### Internet Explorer Crash
-
-In this case Internet Explorer will detect a crashing plugin and put up a dialog
-like this:
-
-[<img alt="image"
-src="/developers/diagnostics/gcf_troubleshooting/image2.png">](/developers/diagnostics/gcf_troubleshooting/image2.png)
-
-More detailed information about the crash can be added by clicking on the
-‘Advanced...’ button to bring up the crash details dialog and inserting the
-details in the bug report .
-
-#### Chrome Browser Crash
-
-If for some reason the Chrome Browser process crashed or lost connection with
-the plugin running in Internet Explorer, then it looks like this:
-
-[<img alt="image"
-src="/developers/diagnostics/gcf_troubleshooting/image1.png">](/developers/diagnostics/gcf_troubleshooting/image1.png)
-
-To figure out if this is a crash use the following steps:
-
-1. Make sure that there are no stand alone Chrome browser windows open.
-2. Make sure that this is the only tab or window loaded with Chrome
- Frame.
-3. Open up task manager and look for chrome.exe processes.
-4. If there are one or more chrome.exe processes in the task manager
- then this is a sign of a connection loss between Chrome Frame plugin
- and Chrome Browser process.
-5. If there are no chrome.exe processes then it’s most likely a crash.
- If this is happening at launch time then it could be a failure to
- launch Chrome.exe.
-
-#### Chrome Renderer Crash
-
-If a Chrome Renderer process crashed with Chrome Frame then it will look like
-this:
-
-[<img alt="image"
-src="/developers/diagnostics/gcf_troubleshooting/image4.png">](/developers/diagnostics/gcf_troubleshooting/image4.png)
-
-It’s very rare to have Chrome Frame specific renderer crashes. So the first
-thing to verify is see if the same steps lead to a crash in stand alone Chrome
-browser. In either case, a test page that demonstrates the crash will be really
-helpful in the report.
-
-### Reporting crashes
-
-While reporting a crash, having a reproducible test case is very important. If
-the crash is happening at random then having a crash dump is quite useful.
-
-#### How to generate a crash dump
-
-A freely available tool called ‘Debugging Tools For Windows’ ([32 bit
-download](http://www.google.com/url?q=http%3A%2F%2Fwww.microsoft.com%2Fwhdc%2Fdevtools%2Fdebugging%2Finstallx86.mspx&sa=D&sntz=1&usg=AFQjCNFhPKf3h5kZ1oBJmIEdrRMkPigeZA)
-[64 bit
-download](http://www.google.com/url?q=http%3A%2F%2Fwww.microsoft.com%2Fwhdc%2Fdevtools%2Fdebugging%2Finstall64bit.mspx%2520&sa=D&sntz=1&usg=AFQjCNEZnFyqlcxNJW3A16kQXP4ZSSj_1w))
-or ‘WinDbg’ in short, can be used to collect crash dumps. Once you have
-downloaded and installed the correct flavor of WinDbg then run Internet Explorer
-under the debugger using the command line:
-
-`"c:\Program Files\Debugging Tools For Windows (x86)\windbg.exe" -g -G -o
-"c:\program files\Internet Explorer\iexplore.exe"`
-
-or for 64 bit OS use:
-
-`"c:\Program Files\Debugging Tools For Windows (x64)\windbg.exe" -g -G -o
-"c:\program files (x86)\Internet Explorer\iexplore.exe"`
-
-Once Internet Explorer is launched, WinDbg should look like this:
-
-[<img alt="image"
-src="/developers/diagnostics/gcf_troubleshooting/image3.png">](/developers/diagnostics/gcf_troubleshooting/image3.png)
-
-Now switch to Internet Explorer and follow steps to reproduce the crash. **Note
-that once the crash happens, you will not see usual dialog or ‘sad tab’ bitmap.
-Instead, Internet Explorer will appear unresponsive**. When that happens, come
-back to WinDbg and it should look like this:
-
-[<img alt="image"
-src="/developers/diagnostics/gcf_troubleshooting/image0.png">](/developers/diagnostics/gcf_troubleshooting/image0.png)
-
-Type the following command into the debugger prompt as shown in the picture
-above and press Enter:
-
-`.dump c:\temp\crash.dmp`
-
-After the crash dump is successfully written to the disk please attach it to the
-bug.
-
-### Detecting stability issues
-
-Sometimes Chrome Frame may not work as expected due to spyware or other buggy
-Internet Explorer Add-ons. To make sure that is not the case, it’s best to test
-on a clean Windows image. Also, for the purpose of testing, any other installed
-Add-ons can be disabled by going into ‘Tools’ -&gt; ‘Manage Add-ons’ dialog in
-Internet Explorer. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/index.md b/chromium/docs/website/site/developers/diagnostics/index.md
deleted file mode 100644
index 933fac18fd3..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: diagnostics
-title: Diagnostics
----
-
-For diagnostics that any user can run check [Diagnostic
-Mode](/administrators/diagnostic-mode). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/diagnostics/installer-error-strings/index.md b/chromium/docs/website/site/developers/diagnostics/installer-error-strings/index.md
deleted file mode 100644
index 2b88ba1b925..00000000000
--- a/chromium/docs/website/site/developers/diagnostics/installer-error-strings/index.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/diagnostics
- - Diagnostics
-page_name: installer-error-strings
-title: Installer Error Strings
----
-
-Chrome's Windows installer provides localized error strings to Google Update for
-presentation to the user. The strings are written to the registry by
-[WriteInstallerResult](http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/chrome/installer/util/installer_state.h&exact_package=chromium&q=WriteInstallerResult&l=183&ct=rc&cd=1).
-As of this writing, the set of error string message identifiers (search for them
-in
-[google_chrome_strings.grd](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/app/google_chrome_strings.grd?view=markup)
-for their corresponding text) is:
-
-<table>
-<tr>
-<td> <b>Message ID</b></td>
-<td> <b>Product(s)</b></td>
-<td> <b>Operation</b></td>
-</tr>
-<tr>
-<td> IDS_INSTALL_DIR_IN_USE</td>
-<td> All</td>
-<td> First install</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_FAILED</td>
-<td> All</td>
-<td> All </td>
-</tr>
-<tr>
-<td> IDS_INSTALL_HIGHER_VERSION</td>
-<td> Chrome</td>
-<td> Update</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_HIGHER_VERSION_CB_CF</td>
-<td> Chrome + Chrome Frame</td>
-<td> Update</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_HIGHER_VERSION_CF</td>
-<td> Chrome Frame</td>
-<td> Update</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_INCONSISTENT_UPDATE_POLICY</td>
-<td> All</td>
-<td> Update</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_INSUFFICIENT_RIGHTS</td>
-<td> All</td>
-<td> All system-level</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_INVALID_ARCHIVE</td>
-<td> All</td>
-<td> All</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_MULTI_INSTALLATION_EXISTS</td>
-<td> All</td>
-<td> Update or Repair</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_NON_MULTI_INSTALLATION_EXISTS</td>
-<td> Chrome Frame</td>
-<td> Update or Repair</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_NO_PRODUCTS_TO_UPDATE</td>
-<td> Chrome</td>
-<td> First install</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_OS_ERROR</td>
-<td> All</td>
-<td> All</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_OS_NOT_SUPPORTED</td>
-<td> All</td>
-<td> All</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_READY_MODE_REQUIRES_CHROME</td>
-<td> Chrome Frame</td>
-<td> All</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_SYSTEM_LEVEL_EXISTS</td>
-<td> All</td>
-<td> Update or Repair</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_TEMP_DIR_FAILED</td>
-<td> All</td>
-<td> All</td>
-</tr>
-<tr>
-<td> IDS_INSTALL_UNCOMPRESSION_FAILED</td>
-<td> All</td>
-<td> All</td>
-</tr>
-<tr>
-<td> IDS_SAME_VERSION_REPAIR_FAILED</td>
-<td> Chrome</td>
-<td> Repair</td>
-</tr>
-<tr>
-<td> IDS_SAME_VERSION_REPAIR_FAILED_CF</td>
-<td> Chrome Frame</td>
-<td> Repair</td>
-</tr>
-<tr>
-<td> IDS_SETUP_PATCH_FAILED</td>
-<td> All</td>
-<td> All</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/discussion-groups/index.md b/chromium/docs/website/site/developers/discussion-groups/index.md
deleted file mode 100644
index 213a10732c7..00000000000
--- a/chromium/docs/website/site/developers/discussion-groups/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: discussion-groups
-title: Discussion Groups
----
-
-For general user help, please try the [Google Chrome Help
-Center](https://www.google.com/support/chrome/).
-
-You can subscribe to the following groups to get project updates and discuss the
-Chromium projects, and to get help in developing for Chromium-based browsers:
-
-<div class="two-column-container">
-<div class="column">
-
-[chromium-discuss](https://groups.google.com/a/chromium.org/group/chromium-discuss)
-
-General Chromium discussion, ideas and suggestions should go here. This is a
-high-volume mailing list, and in general is the right list to post to as a
-default if you are unsure of exactly where you should post. Topical posts
-include items such as ideas for new features or the improvement of existing
-features, questions or comments around the high level design of Chromium, and
-other high-level topics that are not necessarily focused on the actual
-engineering or implementation of code.
-
-**[chromium-os-discuss](https://groups.google.com/a/chromium.org/group/chromium-os-discuss)**
-
-This is the main group for discussing the Chromium OS project. Use this list to
-discuss ideas for new features, how to improve existing features, the high-level
-design of Chromium OS, and other topics that are not focused on the actual
-engineering or implementation of code.
-
-</div>
-<div class="column">
-
-**[chromium-extensions](https://groups.google.com/a/chromium.org/group/chromium-extensions)**
-
-This group is for people who are creating extensions for Chromium or Google
-Chrome.
-
-**[chromium-apps](https://groups.google.com/a/chromium.org/group/chromium-apps)**
-
-This group is for people who are creating installable web apps for Chromium or
-Google Chrome.
-
-**[chromium-HTML5](https://groups.google.com/a/chromium.org/group/chromium-html5/)**
-
-This is the group to help with questions about how to use these new APIs from
-HTML5 (and other standards groups) that are now available for use within
-Chromium and Google Chrome, the extensions framework and Google Chrome OS.
-
-[**chromium-accessibility**](https://groups.google.com/a/chromium.org/group/chromium-accessibility)
-
-This group is for discussing compatibility and use of Chromium or Google Chrome
-with assistive technology such as screen readers.
-
-</div>
-</div>
-
-*Note: On 1/21/2010 we switched our mailing lists to be hosted on chromium.org.
-Posts before that date for the above lists are available at
-[chromium-discuss](https://groups.google.com/group/chromium-discuss),
-[chromium-os-discuss](https://groups.google.com/group/chromium-os-discuss), and
-[chromium-extensions](https://groups.google.com/group/chromium-extensions).*
-
-If you're interested in **implementation details** of the Chromium projects, see
-the **technical discussion** groups for
-[Chromium](/developers/technical-discussion-groups) and [Chromium
-OS](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/contact.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/dns-over-https/index.md b/chromium/docs/website/site/developers/dns-over-https/index.md
deleted file mode 100644
index 61b36e024ac..00000000000
--- a/chromium/docs/website/site/developers/dns-over-https/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: dns-over-https
-title: DNS over HTTPS (aka DoH)
----
-
-## Motivation
-
-When you navigate to a website, your browser first needs to determine which
-server is responsible for delivering said website, a step known as DNS
-resolution. With DNS over HTTPS, all DNS resolutions occur over an encrypted
-channel, helping to further safeguard user security and privacy.
-
-## Launches
-
-See these blog posts to learn more about DoH in Chrome:
-[Desktop](https://blog.chromium.org/2020/05/a-safer-and-more-private-browsing-DoH.html)
-(exception: Linux),
-[Android](https://blog.chromium.org/2020/09/a-safer-and-more-private-browsing.html).
-
-### DoH Providers
-
-The latest version of DoH providers recognized by Chrome (canary) can be found
-[here](https://source.chromium.org/chromium/chromium/src/+/HEAD:net/dns/public/doh_provider_entry.cc)
-(the format should be self explanatory).
-
-Note that users can configure any DoH providers of their choosing, the providers
-included in Chrome are for the auto-upgrade mechanism and for a list of
-popular/relevant options as a convenience (see the [requirements and
-process](https://docs.google.com/document/d/128i2YTV2C7T6Gr3I-81zlQ-_Lprnsp24qzy_20Z1Psw/edit?usp=sharing)).
-
-For technical questions, please send an email to
-[net-dev@](https://groups.google.com/a/chromium.org/forum/#!forum/net-dev/) with
-the \[DoH\] prefix in the subject line.
-
-### **FAQ**
-
-**Q:** Do you plan to support a canary domain similar to Mozilla's
-[use-application-dns.net](http://use-application-dns.net/)?
-
-**A:** We have no plans to support this approach. We believe that our deployment
-model is significantly different from Mozilla's, and as a result canary domains
-won't be needed. In particular, our deployment model is designed to preserve the
-current user experience, i.e. auto-upgrading to the current DNS provider's DoH
-server which offers the same features.
-
-**Q:** How will Chrome's auto-upgrade approach work with Split Horizon?
-
-**A:** Chrome's auto-upgrade approach does not change the DNS provider, and is
-designed to preserve the same user experience. Split Horizon setups should
-continue to work as is. Furthermore, managed deployments should be automatically
-opted-out, and administrators can use policies to control the feature. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/enterprise-changes/index.md b/chromium/docs/website/site/developers/enterprise-changes/index.md
deleted file mode 100644
index 7b25fa8721a..00000000000
--- a/chromium/docs/website/site/developers/enterprise-changes/index.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: enterprise-changes
-title: Shipping changes that are enterprise-friendly
----
-
-Shipping changes to enterprise customers requires some extra due-diligence.
-
-Millions of users rely on Chromium browsers to do their job. For home use, we
-strive to make the browser as simple and safe as we can, by taking complex
-configurations off people's minds. However, in small and large enterprises, this
-is a task left to specialists who need their browser to fit in the complex
-puzzle of hardware and software that drives their organization. Enterprise
-customers:
-
-- Have complex and unique environments, supporting a wide range of apps and use
-cases for their users
-- Take time to adapt to changes, which may include testing and training
-- Incur large costs because of disruptive changes
-
-Even changes that are not targeted for enterprises may still have an effect on
-them. (Non-exhaustive) examples:
-
-- Major UI changes
-- Changes that affect how the browser interacts with proxies, firewalls,
-certificates, network protocols, and common enterprise configurations
-- Changes that interact with policies, like changing default values
-- Changes to web technologies and implementation of specs, especially
-interventions ([example](https://www.chromestatus.com/feature/6172836527865856))
-and deprecations
-
-Any change that's likely to affect enterprises should follow these guidelines,
-easing the burden for IT admins managing their fleets, and reducing the number
-of changes that need to be reverted from the stable channel.
-
-## How to ship enterprise-friendly changes
-
-### 1. Give enterprises visibility
-
-If your change has a Chrome launch bug, it includes an enterprise review.
-The enterprise team will use this as an input to the enterprise release notes,
-so no action is required from you yet.
-
-If your change does not have a Chrome launch bug with an enterprise review,
-describe your planned changes by joining and emailing the
-[chromium-enterprise](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-enterprise)
-technical discussion group, at least 3 milestones (~3 months) prior to launch
-to stable, and sooner than that for highly disruptive changes.
-
-Include:
-
-- What is changing
-- Why it's changing
-- When it's expected to ship to stable
-- What enterprises will have to do in response if applicable (update
-server-side implementations to conform to a new standard, stop using an
-API...)
-
-We will announce the changes in the "Coming Soon" section of the [enterprise
-release notes](https://support.google.com/chrome/a/answer/7679408?hl=en)
-before your change ships to stable and in the "This release" section when
-the change goes to stable. If you've announced the changes in the
-[chromium-enterprise](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-enterprise)
-technical discussion group, or if it has a Chrome launch bug, the enterprise
-team will reach out to you to confirm the plan and the wording each time the
-release notes are written (don't worry if schedules have changed since last
-time; this is normal).
-
-### 2. Give enterprises control
-
-[Include a policy](/developers/how-tos/enterprise/adding-new-policies) to
-control the new change, where possible. The specifics depend on the exact
-change, but here's a best practice that works for most disruptive changes
-
-Introduce a policy that can force the new behavior on or force the behavior
-off. If the policy is not set (i.e. for consumers), the behavior is defined
-by a Finch config.
-
-- The policy can be temporary. This is appropriate if eventually all users
-should have the new behavior (e.g. it's a security-positive change). Having
-a temporary policy mitigates unexpected incompatibilities in the enterprise,
-and gives IT admins extra time to adjust their environment if this was a
-surprise to them. If the policy is temporary:
- - Keep it at least 3 months after the change for small changes, or up to a
- year for major changes.
- - Specify in the policy description which milestone it will be removed when
- you introduce it.
- - Do not set a temporary policy to "deprecated" when you introduce it, even
- though it has an end milestone (this hides it from the documentation by
- default).
-- Consider introducing the policy a release before making any changes on
-default, so enterprises can opt-in to test it before the default behavior
-changes.
-
-- Roll out the change using Finch, following the standard launch process (e.g.
-[process for blink](/blink/launching-features)). Any enterprise that's set the
-policy will not see any change, since the policy overrides the Finch config.
-
-- If the policy was only intended as a temporary escape hatch, remove it in the
-milestone communicated.
-
-### Need more help?
-
-Feel free to email
-[chromium-enterprise@chromium.org](mailto:chromium-enterprise@chromium.org)
-with any questions.
diff --git a/chromium/docs/website/site/developers/experimental-branches/index.md b/chromium/docs/website/site/developers/experimental-branches/index.md
deleted file mode 100644
index 0e962c108af..00000000000
--- a/chromium/docs/website/site/developers/experimental-branches/index.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: experimental-branches
-title: Experimental Branches
----
-
-Sometimes it is useful to share work directly, rather than just via code
-reviews. Everyone who is a Chromium Committer has permission to push their work
-to a set of experimental refs in the chromium/src.git repository. Simply
-
-1. Check out the branch you wish to push
-2. git push origin HEAD:refs/experimental/**&lt;your
- username&gt;**/**&lt;branch name&gt;**
-
-where **&lt;your username&gt;** is "foo@chromium.org" and **&lt;branch
-name&gt;** is whatever you want the ref to be called (e.g. "foo-refactor-wip").
-You'll then be able to view your push online at
-https://chromium.googlesource.com/chromium/src/+/refs/experimental/&lt;your
-username&gt;/&lt;branch name&gt;.
-
-Note that anyone, including anonymous users, can checkout or view online what
-you push to your experimental ref. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/extensions-deployment-faq/index.md b/chromium/docs/website/site/developers/extensions-deployment-faq/index.md
deleted file mode 100644
index 794a4350e46..00000000000
--- a/chromium/docs/website/site/developers/extensions-deployment-faq/index.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: extensions-deployment-faq
-title: Chrome Extension Developer FAQ for upcoming changes in May 2015 related to
- hosting extensions
----
-
-As a follow-up to our blog post on [continuing to protect Chrome users from
-malicious
-extensions](http://blog.chromium.org/2015/05/continuing-to-protect-chrome-users-from.html),
-we’re enforcing the following changes starting in May 2015 for all Windows
-channels and starting in July 2015 for all Mac channels:
-
-* Users can only install extensions hosted in the Chrome Web store,
- except for installs via [enterprise
- policy](https://support.google.com/chrome/a/answer/188453) or
- [developer
- mode](http://developer.chrome.com/extensions/getstarted.html#unpacked).
-* Extensions that were previously installed, but not hosted on the
- Chrome Web Store will be
- [hard-disabled](https://support.google.com/chrome/answer/2811969)
- (i.e. the user cannot enable these extensions again), except for
- installs via [enterprise
- policy](https://support.google.com/chrome/a/answer/188453) or
- [developer
- mode](http://developer.chrome.com/extensions/getstarted.html#unpacked).
-
-[TOC]
-
-## **What’s the rationale for this measure?**
-
-See [Continuing to protect Chrome users from malicious
-extensions](http://blog.chromium.org/2015/05/continuing-to-protect-chrome-users-from.html).
-
-## For extensions that are currently hosted outside the Chrome Web Store, what should be done and by when?
-
-If your extensions are currently hosted outside the Chrome Web Store you should
-migrate them to the Chrome Web Store as soon as possible. The above changes will
-very soon become effective for all channels on Windows and will become effective
-for all Mac channels in July 2015. Once you migrate your extensions to the
-Chrome Web Store, there will be no impact to your users, who will still be able
-to use your extension as if nothing changed. And if you have a dedicated
-installation flow from your own website, you can make use of the existing
-[inline
-installs](https://developers.google.com/chrome/web-store/docs/inline_installation)
-feature.
-
-## What will happen if I migrate the extension to the Chrome Web Store sometime in the future? Will I lose all my users?
-
-Users will have their off-store extensions hard-disabled once the enforcement
-rolls out. However, if the extension is migrated to the Chrome Web Store after
-the rollout, users will be able to manually enable the migrated extension from
-extensions settings page (chrome://extensions) or from the Chrome Web Store
-listing.
-
-## What if I want to restrict access to certain users or prevent my extension from being listed on the Chrome Web Store?
-
-You can restrict access to your extension by limiting its visibility to Trusted
-Tester or by unlisting the extension from the Chrome Web Store.
-
-## Which operating systems and Chrome channels are affected by this change?
-
-As of May 2015, these changes are effective for all Windows channels starting
-with Chrome 33 and for all Mac channels starting with Chrome 44 (around end of
-July 2014).
-
-## Will this affect my ability to develop my extensions on Windows?
-
-No. You can still load unpacked extensions in [developer
-mode](http://developer.chrome.com/extensions/getstarted.html#unpacked) on
-Windows and Mac.
-
-## Why couldn't this problem be solved by having a setting/option to load extensions that are not hosted in the Chrome Web Store?
-
-Unlike modern mobile operating systems, Windows and Mac do not sandbox
-applications. Hence we wouldn’t be able to differentiate between a user opting
-in to this setting and a malicious downloaded program overriding the user’s
-desired setting.
-
-## What are the supported deployment options for extensions after this change?
-
-Apart from users installing extensions from the Chrome Web Store, the following
-deployment options will be supported:
-
-* For OSX and Linux, extensions can be installed via a [preferences
- JSON
- file](http://developer.chrome.com/extensions/external_extensions.html#preferences).
-* For Windows, extensions can be installed via the [Windows
- registry](http://developer.chrome.com/extensions/external_extensions.html#registry).
-* In the Windows registry and in an OS X preferences JSON file, ensure
- that the update_url registry key points to the following URL:
- <https://clients2.google.com/service/update2/crx>. Local .crx
- installs via the path registry key are deprecated. Note that this
- deployment option works only for Chrome Web Store hosted extensions,
- and update_url cannot point to any other host other than
- <https://clients2.google.com/service/update2/crx>.
-* For Enterprises, we’ll continue to support [group
- policy](https://support.google.com/chrome/a/answer/188453?hl=en) to
- install extensions, irrespective of where the extensions are hosted.
- Note that any extension which is not hosted on the Web Store and
- installed via GPO on a machine which has not joined a domain will be
- **hard-disabled**.
-
-## Are there any other considerations to be aware of for extensions that depend on a native application binary?
-
-Previously when off-store extensions were supported, it was possible to have the
-third party application binaries and the sideloaded extension be updated in
-lockstep. However, extensions hosted on the Chrome Web Store are updated via the
-Chrome update mechanism which developers do not control. Extension developers
-should be careful about updating extensions that have a dependency on the native
-application binary (for example, extensions using [native
-messaging](https://developer.chrome.com/extensions/messaging.html#native-messaging)
-or legacy extensions using
-[NPAPI](http://developer.chrome.com/extensions/npapi.html)).
-
-## What will users see when their off-store extension is disabled as a result of this rollout?
-
-They will get a notification that says: “Unsupported extensions disabled” with a
-link to the following [support
-article](https://support.google.com/chrome/answer/2811969).
-
-## Why do I see a bubble about “Disable developer mode extensions” when loading an unpacked extension in Windows stable/beta channels?
-
-We do not want the developer mode to be used as an attack vector for spreading
-malicious extensions. Hence we’re informing users about developer mode
-extensions on all Windows and Mac channels and giving them an option to disable
-these extensions. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.52.02 AM.png.sha1 b/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.52.02 AM.png.sha1
deleted file mode 100644
index 9f7f96006f1..00000000000
--- a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.52.02 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-172b6b3bb52f99c9f90d2f66cb2fa5bcc3109bc7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.57.03 AM.png.sha1 b/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.57.03 AM.png.sha1
deleted file mode 100644
index d2e557133a5..00000000000
--- a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.57.03 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01d844fbe1c7942bd8aca40b030254ea07b0b7ee \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.12 AM.png.sha1 b/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.12 AM.png.sha1
deleted file mode 100644
index 75822d28744..00000000000
--- a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.12 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d652b968f8767f73761687b3825090e6edf23438 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.21 AM.png.sha1 b/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.21 AM.png.sha1
deleted file mode 100644
index ae1f162c6e4..00000000000
--- a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 11.59.21 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5403ec5cc2db32988b07968437f05e663bd0d937 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 4.27.30 PM.png.sha1 b/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 4.27.30 PM.png.sha1
deleted file mode 100644
index f86ad096a93..00000000000
--- a/chromium/docs/website/site/developers/f-script-anywhere/Screen shot 2011-04-01 at 4.27.30 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e88cdd18dd86b4863f4d6fa1baa2af8473775409 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/f-script-anywhere/index.md b/chromium/docs/website/site/developers/f-script-anywhere/index.md
deleted file mode 100644
index fb322118ae0..00000000000
--- a/chromium/docs/website/site/developers/f-script-anywhere/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: f-script-anywhere
-title: F-Script Anywhere
----
-
-F-Script Anywhere turns any Mac app into a smalltalk-y environment: You're able
-to click on any view to learn its type, and you can send messages to every
-object in the program at run time. It's very useful to get around in Chrome: If
-you're wondering which piece of code is responsible for the findbar, you'd just
-click the findbar and get the name of the class that implements it. Put that in
-<http://cs.chromium.org>, and you're done. This page explains how to install and
-use F-Script Anywhere.
-
-### Installing F-Script Anywhere
-
-1. Download
- <http://www.fscript.org/download/F-ScriptInjectionService.zip> and
- follow the instructions in the included readme.txt.
-2. Make sure you also downloaded FScript.Framework (as described in the
- aforementioned readme.txt!)
-3. If you run OSX 10.8 or later, you need to fix up the automator
- workflow. Edit the injection service with Automator, and make sure
- the "New Text File" action generates plain text. Also, ensure that
- the following AppleScript refers to /tmp/gdbtemp***.txt*** - "New
- Text File" now enforces an extension.
-
-See <http://pmougin.wordpress.com/2010/01/05/the-revenge-of-f-script-anywhere/>
-for more information.
-
-### Using F-Script Anywhere
-
-Click "Chrome-&gt;Services-&gt;Inject F-Script into application". **Note**: This
-won't work for programs that are running in gdb (e.g. it won't work in Chromium
-if you started it through Xcode).
-
-[<img alt="image"
-src="/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.52.02%20AM.png">](/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.52.02%20AM.png)
-
-This will take about 15 seconds in Release builds and several minutes in Debug
-builds.
-
-Alternatively, you could do it right from gdb (the Service is an Automator
-script that runs gdb for you, and there are several Automator scripts floating
-around, some of them don't work):
-
-&gt;gdb --args ./out/Release/Chromium.app/Contents/MacOS/Chromium (or wherever
-it is)
-
-(gdb) r
-
-.....
-
-&lt;Ctrl-C&gt;
-
-(gdb) p (char)\[\[NSBundle
-bundleWithPath:@"/Library/Frameworks/FScript.framework"\] load\]
-
-(gdb) p (void)\[FScriptMenuItem insertInMainMenu\]
-
-(gdb) c
-
-When it's done, an "F-Script" menu entry will appear in the top level menu:
-
-[<img alt="image"
-src="/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.57.03%20AM.png">](/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.57.03%20AM.png)
-
-Click "Open Object Browser". In the window that opens, click "Select View". Say
-you're wondering which class implements the Omnibox, so click the Omnibox next.
-F-Script Anywhere will tell you that the Omnibox is an AutocompleteTextField.
-
-[<img alt="image"
-src="/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%204.27.30%20PM.png">](/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%204.27.30%20PM.png)
-
-You can even send methods to this object: Type "sethid" into the search box in
-the upper right corner, and then click "setHidden:" on the right:
-
-[<img alt="image"
-src="/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.59.12%20AM.png">](/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.59.12%20AM.png)
-
-Type "YES" into the popup that opens, and the Omnibox will disappear:
-
-[<img alt="image"
-src="/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.59.21%20AM.png">](/developers/f-script-anywhere/Screen%20shot%202011-04-01%20at%2011.59.21%20AM.png)
-
-You can also navigate to a view's superview this way, and do many other fun
-things. Read the F-Script documentation for more. F-Script Anywhere works with
-every OS X app, not just with Chrome. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/fast-intro-to-git-internals/index.md b/chromium/docs/website/site/developers/fast-intro-to-git-internals/index.md
deleted file mode 100644
index 28f9bc72655..00000000000
--- a/chromium/docs/website/site/developers/fast-intro-to-git-internals/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: fast-intro-to-git-internals
-title: Fast Intro to Git Internals
----
-
-#### Fast Intro to Git Internals \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/finding-somebody-who-knows-how-a-piece-of-code-works/index.md b/chromium/docs/website/site/developers/finding-somebody-who-knows-how-a-piece-of-code-works/index.md
deleted file mode 100644
index 2aab2208273..00000000000
--- a/chromium/docs/website/site/developers/finding-somebody-who-knows-how-a-piece-of-code-works/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: finding-somebody-who-knows-how-a-piece-of-code-works
-title: Finding somebody who knows how a piece of code works
----
-
-**It’s much more efficient to ask somebody how something works than to take
-weeks to figure it out yourself. So how do you find the person who knows how it
-works? Here are some ideas to get you started.**
-
-1. **Ask your teammates - the folks who have been on the project longer
- than you will have a better idea or may have contacts in other
- areas.**
-2. **Look at the OWNERS files - If you can identify a source file
- involved in what you want to do, find the lowest level OWNERS file
- above it, and email those people. Be aware that they may no longer
- be working on chromium, or on parental leave, so don’t just wait
- forever and keep hoping for an answer if you don’t hear back soon.**
-3. **Sometimes, there isn't one person who knows what you want to find
- out, but you can find people who know parts of the system. For
- instance, no one person knows everything about how chromium starts
- up or shuts down and can tell you what you did wrong in a shutdown
- scenario, but you can find people who know some parts of the
- shutdown to guide you.**
-4. **Use the IRC channel - while not everybody is listening all the
- time, there is always a sheriff listening, and you may get a pointer
- to the right folks to talk to.**
-5. **Use the chromium-dev email alias to ask questions. This is a
- fairly large email list, so use your judgment about what to post,
- and it may take awhile to get a reply. If you do this, it helps to
- ask one crisp question at the top of your mail and then explain in
- detail instead of rambling and asking many questions.**
-6. **Try searching the code. Sure, searching for “Init” or “setup” will
- have about 10^100 hits (at least it will seem that way), but
- searching for something more specific may pay off. Try several
- related terms. For instance, searching for “favicon” will quickly
- take you to the right part of the code, even if you have no idea how
- the code is laid out our what you are looking at when you arrive at
- the right code.**
-7. **Debugging into the code can provide a lot of insight.** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/generated-files/index.md b/chromium/docs/website/site/developers/generated-files/index.md
deleted file mode 100644
index 0b262ca7236..00000000000
--- a/chromium/docs/website/site/developers/generated-files/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: generated-files
-title: Generated files
----
-
-Many files are generated as part of the Chrome build. Fundamentally these are
-treated the same as static files (files checked into the repo), but have various
-subtleties. In many cases the build configuration file will be named
-`generated.{gn,gyp,gypi}` or similar.
-
-## Location
-
-Generated files are output in `$CHROMIUM_DIR/out/$BUILD_TYPE/gen,` as in
-`src/out/Release/gen`.
-
-These are indexed in code search in
-[src/out/Debug/gen](https://code.google.com/p/chromium/codesearch#chromium/src/out/Debug/gen/).
-
-Because this is a *different* directory than static files, any behavior must be
-separately specified for generated files, notably:
-
-* **Include search path:** if you compile generated C++ files, you
- need to list the appropriate directory for generated files in the
- include search path, e.g., `<(SHARED_INTERMEDIATE_DIR)/blink` in a
- .gyp file for Blink generated files.
- * Note that static and generated files are not distinguished by
- path in includes; this is because qualified paths are for
- componentization, and static and generated files are in the same
- component.
-* **Possibly different directory tree:** life is much simpler if the
- generated files follow the same directory structure as the static
- files: this allows them to be treated uniformly, only needing to
- specify two roots.
- * E.g., for qualified paths in includes, you don't need to
- distinguish whether a file is generated or not: you just need to
- list both roots in the include search path.
- * For the same reason, `checkdeps` is simpler if generated files
- have the same directory structure.
-
-## Outputs (esp. .pyc)
-
-*All* generated files must be listed in the `outputs` of the build step. If not,
-these files won't be cleaned up (notably by `ninja -t clean`), and then the
-build won't function properly (it will rebuild excessively). One case of this
-are byte-compiled Python files (`.pyc`), which are implicitly generated on
-import: if you generate Python files, you must *also* list the .pyc files in the
-outputs. See Bug [397909](http://crbug.com/397909) and CL
-[463063003](http://crrev.com/463063003).
-
-## Clobber build
-
-[Moving generated
-files](/Home/chromium-clobber-landmines#TOC-Moving-generated-files) can break
-incremental builds, and thus requires a "clobber build" (i.e., full, clean
-build: delete all generated files). This is because the build does not *delete*
-old generated files, so a stale file may be used, notably via includes of
-headers with unqualified paths.
-
-This shows up as generated files appearing to not be regenerated, though in fact
-the files are being generated in a new location; see for example Issue
-[381111](https://code.google.com/p/chromium/issues/detail?id=381111)
-([comment](https://code.google.com/p/chromium/issues/detail?id=381111#c4)).
-
-To avoid this (see also [Chromium clobber landmines: moving generated
-files](/Home/chromium-clobber-landmines#TOC-Moving-generated-files)):
-
-* *(Required):* Warn the [tree sheriff](/developers/tree-sheriffs) or
- gardener (if other repo).
-* *(Required):* Add a [clobber
- landmine](/Home/chromium-clobber-landmines), which forces a rebuild.
- * This *should* be done as part of the original CL (if in
- Chromium), or part of the roll (if in another repo).
- * If you forget this, it can also be done in a followup CL (E.g.,
- CL [316343003](https://codereview.chromium.org/316343003)).
- * For files in other repos (like Blink), this requires a roll, and
- thus causes breakage if there are other changes before the roll.
-* *(Optional):* In case of moving headers, put destination directory
- *after* origin directory in search path, so new files are found
- first. (E.g., CL
- [325483002](https://codereview.chromium.org/325483002/)
- ([comment](https://codereview.chromium.org/325483002/#msg14)))
- * This does not always work, and can cause cruft if the order is
- not natural.
- * However, this does not require a roll, and thus is good for
- changes in other repos.
-
-## Dependencies
-
-Currently `checkdeps` is *not* run on generated files (Issue
-[365190](https://code.google.com/p/chromium/issues/detail?id=365190)), so
-generated files can break componentization. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/gerrit-guide/index.md b/chromium/docs/website/site/developers/gerrit-guide/index.md
deleted file mode 100644
index 7e758d21f53..00000000000
--- a/chromium/docs/website/site/developers/gerrit-guide/index.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: gerrit-guide
-title: Gerrit Guide
----
-
-[TOC]
-
-## Introduction
-
-### (EVERYONE) To get access to the Chromium Gerrit instance
-
-1. Go to <https://chromium-review.googlesource.com/new-password>
-2. Log in with the email you use for your git commits.
- * **If you are a Googler, make sure you're using the account you
- want to use (either @google.com or @chromium.org, depending on
- how you want to use things).**
- * **You can verify this by ensuring that the Username field looks
- like git-&lt;user&gt;.chromium.org**
-3. Follow the directions on the new-password page to set up/append to
- your .gitcookies file.
- * You should click the radio button labeled "only
- chromium.googlesource.com" if it exists.
-4. **Verification:** Run `git ls-remote
- https://chromium.googlesource.com/chromiumos/manifest.git`
- * This should **not** prompt for any credentials, and should just
- print out a list of git references.
-5. Make sure to set your real name.
- 1. Visit <https://chromium-review.googlesource.com/#/settings/> and
- check the "Full Name" field.
-
-### (EVERYONE) Configure local checkouts for your account
-
-Now that you've configured your account on the server, you should configure your
-local checkouts.
-
-1. Run ``cd src && git config --local gerrit.host true` `` to default
- to uploading your reviews to Gerrit.
-
-### (Googler) Link @chromium.org & @google.com accounts
-
-If you have both @chromium.org and @google.com accounts, you may want to link
-them. Doing so may make it easier to view all of your CLs at once, and may make
-it less likely that you'll upload a CL with the wrong account.
-
-However, if you do choose to link them, you will be prompted to log in using
-**only** your @google.com account, and that means you have to follow all of the
-normal security restrictions for such accounts.
-
-**To link them:**
-
-==If you have two email accounts== (@chromium.org and @google.com) but only have
-one Gerrit account you can link them yourself:
-
-1. Login into <https://chromium-review.googlesource.com> using your
- @chromium.org account.
-2. Go to [Settings -&gt; Email
- Addresses](https://chromium-review.googlesource.com/#/settings/EmailAddresses).
-3. In the "New email address" field, enter your @google.com account,
- click the Send Verification button, and follow the instructions.
- 1. If you see an error on clicking the link, use this link to file
- a ticket
- [go/fix-chrome-git](http://goto.google.com/fix-chrome-git)
-4. To verify that it worked, open [Settings -&gt;
- Identities](https://chromium-review.googlesource.com/#/settings/web-identities)
- and verify your @chromium.org, @google.com and ldapuser/\*
- identities are listed.
-5. Repeat 1-4 on <https://chrome-internal-review.googlesource.com>, but
- use your @google.com email to login, and @chromium.org in "Register
- new email" dialog.
-6. If you see any errors during this process, file a [Infra-Git
- ticket](https://bugs.chromium.org/p/chromium/issues/entry?template=Infra-Git)
- with the subject "Link my &lt;id&gt;@chromium.org and
- &lt;id&gt;@google.com accounts". If it is urgent, email
- ajp@chromium.org. Otherwise, the request should be handled within
- 2-3 days.
-
-==If you have two Gerrit accounts== you need an admin to link them. File a
-[Infra-Git
-ticket](https://bugs.chromium.org/p/chromium/issues/entry?template=Infra-Git)
-with the subject "Link my &lt;id&gt;@chromium.org and &lt;id&gt;@google.com
-accounts". If it is urgent, email ajp@chromium.org. Otherwise, the request
-should be handled within 2-3 days.
-
-Once your accounts are linked, you'll be able to use both @chromium.org and
-@google.com emails in git commits. It is particularly useful if you have your
-@chromium.org email in global git config, and you try to trigger chrome-internal
-trybots (that otherwise require @google.com email).
-
-**Please note** that linking your accounts does NOT change ownership of CLs
-you've already uploaded and you will **lose edit access** to any CLs owned by
-your secondary (@google.com) account. i.e CLs you uploaded with your @google.com
-account, before the link, will not show up in your @chromium.org dashboard. You
-will have to re-upload in-flight changes and, for old closed changes, you can
-set the assignee to your @chromium.org to make them visible in your linked
-account dashboard. We don't recommend linking accounts when you significant
-in-flight changes.
-
-If you have linked accounts, and want to unlink them:
-
-* On chromium-review, go to
- https://chromium-review.googlesource.com/settings/#EmailAddresses,
- click "Delete" on all addresses associated with the account you
- don't want to use anymore (e.g. all the @google ones), and then sign
- in again using the account you do want to use (e.g. their @chromium
- one).
-* On chrome-internal-review, go to
- https://chrome-internal-review.googlesource.com/settings/#EmailAddresses
- and do the same (probably deleting @chromium, and then signing in
- with your @google account).
-
-If you see any errors during this process, file [Infra-Git
-ticket](https://bugs.chromium.org/p/chromium/issues/entry?template=Infra-Git)
-with the subject "Unlink my &lt;id&gt;@chromium.org and &lt;id&gt;@google.com
-accounts". If it is urgent, email ajp@chromium.org. Otherwise, the request
-should be handled within 2-3 days.
-
-## Watching Projects / Notifications
-
-You can select Projects (and branches) you want to "watch" for any changes on by
-adding the Project under [Settings -&gt;
-Notifications](https://chromium-review.googlesource.com/settings/#Notifications).
-
-## How do I build on other ongoing Gerrit reviews?
-
-Scenario: You have an ongoing Gerrit review, with issue number 123456 (this is
-the number after the last / in the URL for your Gerrit review). You have a local
-branch, with your change, say 2a40ae.
-
-Someone else has an ongoing Gerrit review, with issue number 456789. You want to
-build on this. Here’s one way to do it:
-
-> git checkout -b their_branch
-
-> git cl patch -f 456789
-
-> git checkout -b my_branch # yes, create a new
-
-> git cherry-pick 2a40ae # your change from local branch
-
-> git branch --set-upstream-to=their_branch
-
-> git rebase
-
-> git cl issue 123456
-
-> &lt;any more changes to your commit(s)&gt;
-
-> git cl upload
-
-## Not getting email?
-
-In case you think you should be receiving email from Gerrit but don't see it in
-your inbox, be sure to check your spam folder. It's possible that your mail
-reader is mis-classifying email from Gerrit as spam.
-
-## Still having a problem?
-
-Check out the [Gerrit
-Documentation](https://gerrit-review.googlesource.com/Documentation/index.html)
-to see if there are hints in there.
-
-If you have any problems please [open a Build Infrastructure
-issue](https://bugs.chromium.org/p/chromium/issues/entry?template=Build+Infrastructure)
-on the **Chromium** issue tracker (the "Build Infrastructure" template should be
-automatically selected).
-
-For additional information, you can also visit the [PolyGerrit + Chromium
-FAQ](https://polygerrit.appspot.com/). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/git-cache/index.md b/chromium/docs/website/site/developers/git-cache/index.md
deleted file mode 100644
index 8110ff30c68..00000000000
--- a/chromium/docs/website/site/developers/git-cache/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: git-cache
-title: git-cache
----
-
diff --git a/chromium/docs/website/site/developers/github-collaboration/index.md b/chromium/docs/website/site/developers/github-collaboration/index.md
deleted file mode 100644
index 8868f3b32e3..00000000000
--- a/chromium/docs/website/site/developers/github-collaboration/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: github-collaboration
-title: GitHub Collaboration
----
-
-This document explains how to collaborate on work in progress by using Git and
-pushing changes to GitHub.
-
-Alternatives would be to email code diffs or use codereview.chromium.org and
-`git cl patch`. However they are brittle and time consuming when patches do no
-apply cleanly and or are part of several pipelined or dependent patches.
-
-Collaboration via git is made easy by simply using `git merge` to include code
-from other patches into a local branch you are working with.
-
-1. Create a chromium fork on GitHub if you will share code with others.
- 1. [**Fork**](https://help.github.com/articles/fork-a-repo/) an
- existing chromium repository on GitHub such as:
- * <https://github.com/chromium/chromium>
- 2. [**Delete
- branches**](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/)
- you are not interested in.
-2. Add remote references to GitHub respositories (yours or others)
- * git remote add g https://github.com/your-user-name/chromium
- * git remote add other-repo-name
- https://github.com/other-user-name/chromium
- * (I typically name my own github repo just 'g')
-3. [Fetch](https://git-scm.com/docs/git-fetch) from github repos
- * git fetch g
- * git fetch other-repo-name
- * Occasionally add `--prune` to remove any remote-tracking
- references that no longer exist on the remote.
-4. [Merge](https://git-scm.com/docs/git-merge) from github repos
- * git merge other-repo-name/branch-name
-5. [Push](https://git-scm.com/docs/git-push) to github
- * Push current branch
- * git push g HEAD
- * Push all branches where the local names match remote names.
- * git push g :
- * Delete a remote branch
- * git push g -f :remote-branch \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/gn-build-configuration/index.md b/chromium/docs/website/site/developers/gn-build-configuration/index.md
deleted file mode 100644
index 666fa240702..00000000000
--- a/chromium/docs/website/site/developers/gn-build-configuration/index.md
+++ /dev/null
@@ -1,270 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: gn-build-configuration
-title: GN build configuration
----
-
-This page provides some common build setups for the GN build. It assumes you
-already [got a Chromium checkout](/developers/how-tos/get-the-code).
-
-See also
-
-* Run "gn help" from the command line.
-* [All GN Docs](https://gn.googlesource.com/gn/+/HEAD/docs/)
-* [GN Quick Start
- Guide](https://gn.googlesource.com/gn/+/HEAD/docs/quick_start.md)
-* [GN
- Reference](https://gn.googlesource.com/gn/+/HEAD/docs/reference.md)
- (a dump of everything from "gn help" in one web page).
-
-## Understanding GN build flags
-
-Recall that in GN, you pick your own build directory. These should generally go
-in a subdirectory of src/out. You set build arguments on a build directory by
-typing:
-
-```
-$ gn args out/mybuild
-```
-
-This will bring up an editor. The format of the stuff in the args file is just
-GN code, so set variables according to normal GN syntax (true/false for
-booleans, double-quotes for string values, # for comments). When you close the
-editor, a build will be made in that directory. To change the arguments for an
-existing build, just re-run this command on the existing directory.
-
-You can get a list of all available build arguments for a given build directory,
-with documentation, by typing
-
-```
-$ gn args out/mybuild --list
-```
-
-To get documentation for a single flag (in this example, is_component_build):
-
-```
-$ gn args out/mybuild --list=is_component_build
-```
-
-You have to list your build directory as the first argument because the
-available arguments and their default values are build-specific. For example,
-setting Android as your target OS might expose new Android-specific build
-arguments or use different default values.
-
-*"GN args" as used on this page are **not** the command line arguments passed to
-GN. They refer to the individual variables that are passed as part of the --args
-command line flag and/or written to the args.gn file.*
-
-## Common build variants
-
-### Release build
-
-The default GN build is debug. To do a release build:
-
-```
-is_debug = false
-```
-
-On Android, you can toggle ProGuard on/off with:
-
-```
-is_java_debug = false # Defaults to is_debug.
-```
-
-Trybots that run release builds have DCHECKs enabled, to catch potential bugs.
-
-```
-dcheck_always_on = true
-```
-
-### Component build
-
-The [component
-build](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/component_build.md)
-links many parts of Chrome into separate shared libraries to avoid the long link
-step at the end. It is the default when compiling debug non-iOS builds and most
-developers use this mode for everyday builds and debugging. Startup is slower
-and some linker optimizations won't work, so don't do benchmarks in this mode.
-Some people like to turn it on for release builds to get both faster links and
-reasonable runtime performance.
-
-```
-is_component_build = true
-```
-
-### Faster builds with no or minimal symbols
-
-The symbol_level setting varies from 0 (no symbols or minimal symbols) to 2
-(full symbols). Lower levels make debugging almost impossible, but the build
-will be much faster. It can be useful in some cases where you just want a build
-ASAP (many build bots do this).
-
-```
-symbol_level = 0
-```
-
-Alternately you can set symbol_level=1 which will build almost as fast as
-symbol_level=0 but will give you additional information in call stacks.
-
-### Disable Native Client
-
-Most developers don't normally need to test Native Client capabilities and can
-speed up the build by disabling it.
-
-```
-enable_nacl = false
-```
-
-### Remove WebCore symbols
-
-WebCore has lots of templates that account for a large portion of the debugging
-symbols. If you're not debugging WebCore, you can set the blink symbol level to
-0 or 1:
-
-```
-blink_symbol_level=0
-```
-
-### Remove v8 symbols
-
-v8 is often the second-largest source of debugging symbols. If you're not
-debugging v8, you can set the v8 symbol level to 0 or 1:
-
-```
-v8_symbol_level=0
-```
-
-### Overriding the CPU architecture
-
-By default, the GN build will match that of the host OS and CPU architecture. To
-override:
-
-```
-target_cpu = "x86"
-```
-
-Possible values for the `target_cpu`:
-
-* Windows supports "`x86`" and "`x64`". Since building is only supported
- on 64-bit machines, the default will always be "`x64`".
-
-* Mac and desktop Linux supports only "`x64`". On desktop Linux you
- might also theoretically try any of the ARM or MIPS architecture
- strings form the Android section below, but these aren't supported
- or tested and you will also need a sysroot.
-
-* Chrome OS supports "`x86`" and "`x64`", but to build a 32-bit binary you
- will need to use a sysroot on a 64-bit machine.
-
-* If you specify an Android build (see below) the default CPU
- architecture will be "`arm`". You could try overriding it to "`arm64`",
- "`x86`", "`mipsel`", or "`mips64el`" but the GN builds for these aren't
- regularly tested.
-
-### Goma
-
-Googlers can use this for distributed builds. `goma_dir` is only required if you
-use the Goma tools not in the depot_tools.
-
-```
-use_goma = true
-goma_dir = "/home/me/somewhere/goma" # Optional
-```
-
-### Official Chrome build
-
-This build requires that you are a Googler with src-internal checked out.
-
-Use these args for official builds:
-
-```
-is_official_build = true
-is_chrome_branded = true
-is_debug = false
-```
-
-For 32-bit official builds, append this arg to the above set:
-
-```
-target_cpu = "x86"
-```
-
-On Windows and Mac you also need to add the following entry to your .gclient
-file to automatically fetch the PGO profiles required to do an official build:
-
-```
-solutions = [
- {
- "name": "src",
- # ...
- "custom_vars": {
- "checkout_pgo_profiles": True,
- },
- },
-],
-```
-
-### You can also set the following GN argument to disable PGO if needed:
-
-```
-chrome_pgo_phase = 0
-```
-
-### Windows
-
-There is a `gn gen` argument (`--ide`) for producing Visual Studio project and
-solution files:
-
-```
-$ gn gen out\mybuild --ide=vs
-```
-
-Projects are configured for VS 2019 by default.
-
-See [this
-page](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/windows_build_instructions.md)
-for more information on configuring Chromium builds for Windows.
-
-### Android build (from Linux)
-
-This assumes you've already followed the [Android build
-instructions](/developers/how-tos/android-build-instructions) to check out.
-
-It is easy to use the same checkout on Linux to build both Android and desktop
-Linux versions of Chrome. Your .gclient file must list Android, however, to get
-the proper SDKs downloaded. This will happen automatically if you follow the
-Android checkout instructions. To add this to an existing Linux checkout, add
-`target_os` to your `.gclient` file (in the directory above src), and run `gclient
-runhooks`.
-
-```
-solutions = [
- ...existing stuff in here...
-]
-target_os = [ 'android' ] # Add this to get Android stuff checked out.
-```
-
-### Chrome OS build (from Linux)
-
-This will build the Chrome OS variant of the browser that is distributed with
-the operating system. You can run it on your Linux desktop for feature
-development.
-
-```
-target_os = "chromeos"
-```
-
-Checkouts which are used to build Chrome OS builds must also have `'chromeos'`
-added to the `target_os` list in the .gclient file. After making this change,
-you will need to run `gclient sync` once.
-
-```
-solutions = [
- ...existing stuff in here...
-]
-target_os = ['chromeos']
-# Or if you also build e.g. android, this might be
-# target_os = ['android', 'chromeos']
-```
diff --git a/chromium/docs/website/site/developers/gyp-environment-variables/index.md b/chromium/docs/website/site/developers/gyp-environment-variables/index.md
deleted file mode 100644
index 8c1dbcf4d78..00000000000
--- a/chromium/docs/website/site/developers/gyp-environment-variables/index.md
+++ /dev/null
@@ -1,251 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: gyp-environment-variables
-title: GYP build parameters
----
-
-Chromium no longer uses GYP but GN. The corresponding page is [GN build
-configuration.](/developers/gn-build-configuration)
-
-Hence, the following is **obsolete**.
-
-GYP has many **environment variables** that configure the way Chrome is built.
-By modifying these parameters, you can build chrome for different architectures,
-or speed up the build process. Generally, we strive to have good defaults and
-you shouldn't have to set many of these. The wiki also has some additional tips
-on [common build
-tasks](https://code.google.com/p/chromium/wiki/CommonBuildTasks).
-
-## Specifying parameters
-
-### Command-line
-
-To specify build parameters for GYP, you can do so on the command line:
-
-$ ./build/gyp_chromium -Dchromeos=1 -Dcomponent=shared_library
-
-### Environment variable
-
-Or with an environment variable:
-
-$ export GYP_DEFINES="chromeos=1 component=shared_library" $
-./build/gyp_chromium
-
-### chromium.gyp_env file
-
-Or in a chromium.gyp_env file in your chromium directory:
-
-$ echo "{ 'GYP_DEFINES': 'chromeos=1 component=shared_library' }" &gt;
-../chromium.gyp_env
-
-### Some common file examples:
-
-**Windows**:
-
-{ 'GYP_DEFINES': 'component=shared_library' }
-
-**Mac**:
-
-{ 'GYP_DEFINES': 'fastbuild=1' }
-
-**Linux**:
-
-{ 'GYP_DEFINES': 'component=shared_library remove_webcore_debug_symbols=1' }
-
-## ChromeOS on Linux:
-
-{ 'GYP_DEFINES': 'chromeos=1 component=shared_library
-remove_webcore_debug_symbols=1' }
-
-## Android:
-
-{ 'GYP_DEFINES': 'OS=android' }
-
-## Recommended Parameters
-
-For a full list of the main build variables and their defaults, see the
-variables section in any \*.gyp or \*.gypi file, e.g.:
-
-$ cat build/common.gypi
-
-<table>
-<tr>
-
-<td>### Variable</td>
-
-<td>### Explanation</td>
-
-<td>### Linux</td>
-
-<td>### Windows</td>
-
-<td>### Mac</td>
-
-</tr>
-<tr>
-<td>component=shared_library</td>
-<td>If you dynamically link, you save a lot of time linking for a small time cost during startup. On Windows, this uses a DLL build and incremental linking, which makes linking much faster in Debug.</td>
-
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img
-alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-<tr>
-<td>fastbuild=1</td>
-<td><b>Optional: removes all debug information, but builds much faster. </b>0 means all debug symbols (.pdb generated from .obj), 1 means link time symbols (.pdb generated from .lib) and 2 means no pdb at all (no debug information). In practice 0 and 1, will generate the exact same PE. Only 2 will generate a PE that could have it's .rdata to be ~40 bytes smaller.</td>
-
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img
-alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-<tr>
-<td>remove_webcore_debug_symbols=1</td>
-<td>If you don't need to trace into WebKit, you can cut down the size and slowness of debug builds significantly by building WebKit without debug symbols. </td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a> </td>
-</tr>
-</table>
-
-### Building a release build
-
-To build Chrome in a release build, as well as building in the out/Release
-directory, you may add the following flags:
-
-<table>
-<tr>
-
-<td>### Variable</td>
-
-<td>### Explanation</td>
-
-<td>### Linux</td>
-
-<td>### Windows</td>
-
-<td>### Mac</td>
-
-</tr>
-<tr>
-<td>buildtype=Official</td>
-<td>Builds the heavily optimized official release build (invalid for builds in out/Debug). Other options include 'Dev', for development/testing. Official builds take <b>*drastically*</b> longer to build, and are most likely not what you want.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a> </td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a> </td>
-</tr>
-<tr>
-<td>branding=Chrome</td>
-<td>Changes the branding from 'Chromium' to 'Chrome', for official builds.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a> </td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-</table>
-
-### Use goma distributed build (Googlers only)
-
-See [go/ma](https://sites.google.com/a/google.com/goma/) for more information on
-how to set up goma.
-
-### Use the icecc linker (Linux only)
-
-[Icecc](https://github.com/icecc/icecream) is the distributed compiler with a
-central scheduler to share build load. Currently, many external contributors use
-it. e.g. Intel, Opera, Samsung.
-
-<table>
-<tr>
-
-<td>### Variable</td>
-
-<td>### Explanation</td>
-
-<td>### Linux</td>
-
-<td>### Windows</td>
-
-<td>### Mac</td>
-
-</tr>
-<tr>
-<td>linux_use_bundled_binutils=0</td>
-<td>-B option is not supported. See <a href="https://github.com/icecc/icecream/commit/b2ce5b9cc4bd1900f55c3684214e409fa81e7a92">this commit</a> for more details.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-<tr>
-<td>linux_use_debug_fission=0</td>
-<td><a href="http://gcc.gnu.org/wiki/DebugFission">Debug fission</a> is not supported. See <a href="https://github.com/icecc/icecream/issues/86">this bug</a> for more details.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-<tr>
-<td>clang=0</td>
-<td>Icecc doesn't support clang yet.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-</table>
-
-### Build ChromeOS on Linux (Linux only)
-
-To build ChromeOS on Linux, use the following gyp variables and the regular
-chrome target will run ChromeOS instead of Chrome.
-
-<table>
-<tr>
-
-<td>### Variable</td>
-
-<td>### Explanation</td>
-
-<td>### Linux</td>
-
-<td>### Windows</td>
-
-<td>### Mac</td>
-
-</tr>
-<tr>
-<td>chromeos=1</td>
-<td>Build for the ChromeOS platform instead of Linux.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-</table>
-
-### Build Android (Linux only)
-
-To build ChromeOS on Linux, use the following gyp variables and the either the
-chrome_shell_apk or webview_instrumentation_apk target.
-
-<table>
-<tr>
-
-<td>### Variable</td>
-
-<td>### Explanation</td>
-
-<td>### Linux</td>
-
-<td>### Windows</td>
-
-<td>### Mac</td>
-
-</tr>
-<tr>
-<td>OS=android</td>
-<td>Build for the Android platform instead of Linux.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-<tr>
-<td>target_arch=ia32</td>
-<td><b>Optional. </b>Use this if building for x86 targets.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-<tr>
-<td>target_arch=mipsel</td>
-<td><b>Optional. </b>Use this if building for MIPS targets.</td>
-<td><a href="/developers/gyp-environment-variables/menu_check.png"><img alt="image" src="/developers/gyp-environment-variables/menu_check.png"></a></td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/gyp-environment-variables/menu_check.png.sha1 b/chromium/docs/website/site/developers/gyp-environment-variables/menu_check.png.sha1
deleted file mode 100644
index 0bc9a5ebba6..00000000000
--- a/chromium/docs/website/site/developers/gyp-environment-variables/menu_check.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d1da55fa470e4fb04f4fd5563815f808b4964d2e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/bashrc-tail b/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/bashrc-tail
deleted file mode 100644
index c6eb57a0d30..00000000000
--- a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/bashrc-tail
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/bash
-# -*- fill-column: 200 -*-
-
-
-function lumpy() {
- export BOARD=lumpy
- chrome_build
-}
-
-function daisy() {
- export BOARD=daisy
- chrome_build
-}
-
-
-# Useful site: https://www.chromium.org/chromium-os/building-chromium-os/building-chromium-separately
-function chrome_build() {
- # https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/building-chromium-browser
- export CHROME_ORIGIN=LOCAL_SOURCE
-
- unset GYP_DEFINES GYP_GENERATORS
- export BUILD_OUT=out_${BOARD}
- export builddir_name=out_${BOARD}
- export GYP_GENERATOR_FLAGS="output_dir=out_${BOARD} config=Debug"
- export GYP_GENERATORS="ninja"
- export GYP_DEFINES="$GYP_DEFINES disable_nacl=1 enable_svg=0 chromeos=1 use_official_google_api_keys=1"
- if [ "$BOARD" = "daisy" ]; then
- export GYP_DEFINES="$GYP_DEFINES target_arch=arm armv7=1 arm_float_abi=hard v8_use_arm_eabi_hardfloat=true"
- export GYP_DEFINES="$GYP_DEFINES use_allocator=none "
- export GYP_DEFINES="$GYP_DEFINES arm_neon=1"
- # Of interest: http://code.google.com/p/chromium/wiki/LinuxChromiumArm
- export XBASE="armv7a-cros-linux-gnueabi"
- function crosip() {
- echo 10.0.0.1
- }
- else
- export XBASE="x86_64-cros-linux-gnu"
- function crosip() {
- echo 10.0.0.2
- }
- fi
- export GYP_DEFINES="$GYP_DEFINES proprietary_codecs=1 ffmpeg_branding=ChromeOS enable_smooth_scrolling=1"
- export GYP_DEFINES="$GYP_DEFINES python_ver=2.6 swig_defines=-DOS_CHROMEOS linux_sandbox_path=/opt/google/chrome/chrome-sandbox"
- export GYP_DEFINES="$GYP_DEFINES remove_webcore_debug_symbols=1"
- export GYP_DEFINES="$GYP_DEFINES component=shared_library"
- export SYSROOT=/build/${BOARD}/
-
- export GOLDIFY="-B/usr/x86_64-pc-linux-gnu/${XBASE}/binutils-bin/2.21-gold/"
- export SYSROOTFLAG="--sysroot=$SYSROOT"
- export BACKTRACE="-funwind-tables -rdynamic"
- export GYP_GENERATORS=ninja
- export GYP_PARALLEL=1
- export AR="${XBASE}-ar"
- export CC="${XBASE}-gcc $SYSROOTFLAG $BACKTRACE"
- export CXX="${XBASE}-g++ $SYSROOTFLAG $GOLDIFY $BACKTRACE"
- export AR_host="ar"
- export CC_host="gcc"
- export CXX_host="g++ -B/usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.21-gold/"
-
-}
-
-export NINJA_STATUS="[%u/%r/%f] "
-
-export TESTING_RSA_KEY=~/trunk/src/scripts/mod_for_test_scripts/ssh_keys/testing_rsa
-
-function crosdevice() {
- echo -e "\ek$BOARD\e\\"
- ssh -o StrictHostKeyChecking=no -o CheckHostIP=no -i $TESTING_RSA_KEY root@$(crosip) "$@"
-}
-
-function crosdevicecp() {
- scp -o StrictHostKeyChecking=no -o CheckHostIP=no -i $TESTING_RSA_KEY \
- "$@" root@$(crosip):/home/chronos/user/chrome/
-}
-
-function initcrosdevice() {
- cd ~/chrome_root/src
- crosdevice 'bash -x -c "echo \"core.%p\" > /proc/sys/kernel/core_pattern && \
- mkdir -p ~chronos/chrome && chown chronos ~chronos/chrome && \
- sudo -u chronos /bin/bash -c \"cd ~chronos/chrome && mkdir -p Release Debug\""' && \
- echo "Now log into crosdevice and run:"
- echo "ulimit -c unlimited && cd ~chronos/chrome && sudo -u chronos bash"
- echo "sshfs <desktop-username>@<desktop-hostname>:/home/<desktop-username>/src/chromium/src/out_$BOARD/Debug Debug"
- crosdevice
-}
diff --git a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/goma-ninja b/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/goma-ninja
deleted file mode 100644
index 2393346ff1f..00000000000
--- a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/goma-ninja
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-export PATH="/home/fischman/src/goma:$PATH"
-# AMI: per http://go/g-d/msg/goma-users/iqAEq3IBLk8/K0gOhNxLxVoJ
-if [ -n "$GOMA_IMPLICIT_INPUT_FILES" ]; then
- GOMA_IMPLICIT_INPUT_FILES="$GOMA_IMPLICIT_INPUT_FILES,"
-fi
-export GOMA_IMPLICIT_INPUT_FILES="${GOMA_IMPLICIT_INPUT_FILES}$(dirname $(realpath $0))/src/build/common.gypi"
-
-{ ~/src/goma/goma_ctl.sh status || ~/src/goma/goma_ctl.sh start; } && $(dirname $0)/ninja -j5000 "$@"
diff --git a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/index.md b/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/index.md
deleted file mode 100644
index 5b119058a0f..00000000000
--- a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: -quickly-building-for-cros-arm-x64
-title: (Quickly!) Building for CrOS (ARM & x64)
----
-
-Googlers note: you might want go/simplechrome instead of this page.
-
-Assuming you have a local chromium checkout you've been building natively, and
-you want to be able to hack in it and build it for a CrOS device, see
-instructions below.
-
-Following
-<http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/building-chromium-browser>,
-a one-time setup step is:
-> $ cros_sdk --enter --chrome_root=.../path/to/chrome/dir \[
-> --chroot=../../which_chroot \]
-
-(where the *chrome/dir* part is the parent of *src/*).
-
-Subsequent cros_sdk invocations will have the chrome source directory mounted at
-*~/chrome_root/src* inside the chroot.
-
-Make sure you've run *build_packages* and *build_image* at least one
-successfully in the repo in question, or it's likely you'll be missing
-packages/binaries/includes/libs needed to build chrome! See [CrOS dev
-guide](/chromium-os/developer-guide) for details on those commands.
-
-Inside the parent of the chrome src/ dir, I have two scripts: "ninja" and
-"goma-ninja" (attached to this page):
-
-* ninja: wraps regular ninja assuming a 32-core machine (z620) and
- emitting build output depending on $GYP_GENERATOR_FLAGS so that
- different builds (e.g.: native, lumpy, and daisy) can coexist
-* (**google-internal only)** goma-ninja: wraps the above ninja wrapper
- to compile on [goma](http://go/ma) with a parallelism of -j5000.
-
-Having these scripts in the parent of the src/ dir means they're available both
-inside the chroot and outside it, so regardless of where I am, I can always say
-"*../goma-ninja chrome*" for example and the right thing happens.
-
-Finally, I have a file named bashrc-tail which I source inside the chroot with:
-
-> *. ~/chrome_root/cros-chroot-homedir/bashrc-tail*
-
-at the bottom of my chroot's *~/.bashrc*. This defines two shell functions
-("lumpy" and "daisy") which set up environment variables facilitating building
-for different CrOS boards, as well as shell functions that help run chrome and
-other ninja outputs **on** the boards, without having to explicitly copy things
-around, by using sshfs. After a build like *../goma-ninja chrome* from above is
-done, I'll run *initcrosdevice* which will ssh into the device (**note:** make
-sure to update the crosip() functions in your copy of bashrc-tail to point to
-the right IP addresses of your boards, as well as the username/hostname/path in
-the definition of *initcrosdevice*!) and echo a helpful message useful for
-copy/paste to sshfs-mount the ninja output directory on the board. At that point
-I can run a unittest like:
-
-> DISPLAY=:0 ./Debug/video_decode_accelerator_unittest
-
-or run a full chrome. Beware that running chrome on a board usually requires a
-pile of switches (depending on what features are launched on CrOS at a given
-time, and the state of the drivers on any given board at any given time), which
-you are best off extracting from the "real" chrome running on the device. I
-usually keep these switches in a script at *out_daisy/Debug/go*, so that it's
-available via the sshfs mount above and I can just run it on the device as
-*./Debug/go*.
-
-**Good luck!**
diff --git a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/ninja b/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/ninja
deleted file mode 100644
index 4a196843ad3..00000000000
--- a/chromium/docs/website/site/developers/how-tos/-quickly-building-for-cros-arm-x64/ninja
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash -e
-
-OUTPUT_DIR="$(echo $GYP_GENERATOR_FLAGS |sed -n -e 's/.*output_dir=\([^ ]*\).*/\1/p')" #
-FLAVOR="$OUTPUT_DIR/$(echo $GYP_GENERATOR_FLAGS |sed -n -e 's/.*config=\([^ ]*\).*/\1/p')" #
-if [ ! -d $FLAVOR ]; then mkdir -p $FLAVOR; fi
-
-ninja -C $FLAVOR -j32 "$@"
diff --git a/chromium/docs/website/site/developers/how-tos/android-build-instructions/index.md b/chromium/docs/website/site/developers/how-tos/android-build-instructions/index.md
deleted file mode 100644
index f2461a79d90..00000000000
--- a/chromium/docs/website/site/developers/how-tos/android-build-instructions/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: android-build-instructions
-title: Build Instructions (Android)
----
-
-This page has been replaced by
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/angle-infra/index.md b/chromium/docs/website/site/developers/how-tos/angle-infra/index.md
deleted file mode 100644
index a5763647653..00000000000
--- a/chromium/docs/website/site/developers/how-tos/angle-infra/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: angle-infra
-title: ANGLE Standalone Testing Infrastructure (obsolete)
----
-
-This page is now moved to
-<https://chromium.googlesource.com/angle/angle/+/HEAD/infra/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/angle-wrangling/index.md b/chromium/docs/website/site/developers/how-tos/angle-wrangling/index.md
deleted file mode 100644
index c11eec4b29d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/angle-wrangling/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: angle-wrangling
-title: ANGLE Wrangling (obsolete)
----
-
-## This page is now moved to <https://chromium.googlesource.com/angle/angle/+/HEAD/infra/ANGLEWrangling.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/api-keys/index.md b/chromium/docs/website/site/developers/how-tos/api-keys/index.md
deleted file mode 100644
index 07e97e9498f..00000000000
--- a/chromium/docs/website/site/developers/how-tos/api-keys/index.md
+++ /dev/null
@@ -1,179 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: api-keys
-title: API Keys
----
-
-## What is this doc?
-
-1. If there are features which use Google APIs that you need for a
- custom build, fork, or integration of stock Chromium.
-2. If you are building ChromiumOS yourself, as API access is required
- for login.
-
-*Note: Software distribution with keys acquired for yourself is allowed, but the
-keys themselves cannot be shared with parties outside the legal entity that
-accepted the API ToS. Keep in mind that a number of the APIs will have no or
-very limited quota and not all of the APIs have additional quota available for
-purchase.*
-
-**Googlers only**:
-
-* for a simpler approach to API keys, see
- <http://go/chrome-api-key-setup>
-* if you need a new API enabled in chrome, use
- <http://b/new?component=165132>
-
-**How-to:**
-
-First, acquire API keys. Then, specify the API keys to use either when you build
-Chromium, or at runtime using environment variables.
-
-## Acquiring Keys
-
-1. Make sure you are a member of
- [chromium-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/chromium-dev)
- (you can just
- [subscribe](https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/chromium-dev)
- to chromium-dev and choose not to receive mail). *Note: the APIs
- below are only visible to people subscribed to that group.*
-2. Make sure you are logged in with the Google account associated with
- the email address that you used to subscribe to chromium-dev.
-3. Go to <https://cloud.google.com/console>
-4. Click on the dropdown next to "Google Cloud Platform" and select
- **Create Project** (upper right).
-5. (Optional) You may add other members of your organization or team on
- the Team tab.
-6. Open the **APIs and Services &gt; Library** from the hamburger menu,
- search for all of the following APIs. If you're a member of the
- chromeos-dev Google group you should see all of them. For each of
- these APIs click on them when found by the search, and then click on
- "Enable API" button at the top, read and agree to the Terms of
- Service that is shown, check the "I have read and agree to &lt;API
- name&gt; Terms of Service" checkbox and click Accept: *(This list
- might be out of date; try searching for APIs starting with "Chrome"
- or having "for Chrome" in the name.)*
- * Cloud Search API
- * Geolocation API (requires [enabling
- billing](https://developers.google.com/console/help/#EnableBilling)
- but is free to use; you can skip this one, in which case
- geolocation features of Chrome will not work)
- * Google Drive API (enable this for Files.app on Chrome OS and
- SyncFileSystem API)
- * Safe Browsing API
- * Time Zone API
- * Optional
- * Admin SDK
- * Cloud Translation API
- * Geocoding API
- * Google Assistant API
- * Google Calendar API
- * Nearby Messages API
-
- ***If any of these APIs are not shown, recheck step 1.***
-
-1. Go to the **Credentials** sub tab under the **API & Services**
- section in the hamburger menu.
-2. Click the "**Create credentials**" button then click on the **OAuth
- client ID** item in the drop-down list.
- * Click on the "Configure consent screen" button. Fill in the
- "Product name" (name it anything you want) and other details if
- you have available then click on "Save" at the bottom.
- * Return to the Credentials tab and click the "Add credentials"
- button again, then select "OAuth 2.0 client ID" from the
- drop-down list.
- * In the "Application type" section check the "Other" option and
- give it a name in the "Name" text box, then click "Create"
-3. In the pop-up window that appears you'll see a **client ID** and a
- "**client secret**" string. Copy and paste those in a text file on
- your dev box then click OK to dismiss it.
- * A new item should now appear in the "OAuth 2.0 client IDs" list.
- You can click on the name of your client id to retrieve the ID
- and secret at any time. In the next sections, we will refer to
- the values of the “Client ID” and “Client secret” fields.
-4. Click the **Create credentials** button *again* on the same page.
-
- * In the pop-over window that shows up click the **API key**
- button.
- * A pop-over should show up giving you the API key. Copy and paste
- it in a text file to save it, although you can access it later
- as well.
- * Click OK to dismiss this.
-
-You should now have an API key and a OAuth 2.0 client ID in on the Credentials
-tab. The next sections will refer to the value of the “API key” field too.
-
-*Note: that the keys you have now acquired are not for distribution purposes and
-must not be shared with other users.*
-
-## Providing Keys at Build Time
-
-If you are building Chromium yourself, you can provide keys as part of your
-build configuration, that way they are always baked into your binary.
-
-Specify three variables in your `args.gn` file (which you can edit by running
-`gn args out/your_out_dir_here`)
-
-```none
-google_api_key = "your_api_key"
-google_default_client_id = "your_client_id"
-google_default_client_secret = "your_client_secret"
-```
-
-## Providing Keys at Runtime
-
-If you prefer, you can build a Chromium binary (or use a pre-built Chromium
-binary) without API keys baked in, and instead provide them at runtime. To do
-so, set the environment variables `GOOGLE_API_KEY`, `GOOGLE_DEFAULT_CLIENT_ID`
-and `GOOGLE_DEFAULT_CLIENT_SECRET` to your "API key", **"Client ID" and**
-"Client secret" values respectively.
-On Chromium OS to specify the keys as environment variables append them to the
-end of `/etc/chrome_dev.conf`:
-
-<pre><code>GOOGLE_API_KEY=<i>your_api_key</i>
-GOOGLE_DEFAULT_CLIENT_ID=<i>your_client_id</i>
-GOOGLE_DEFAULT_CLIENT_SECRET=<i>your_client_secret</i>
-</code></pre>
-
-## Signing in to Chromium is restricted
-
-Signing in to Chromium requires an OAuth 2.0 token for authentication. As this
-OAuth 2.0 token gives access to various Google services that handle user data
-(e.g. Chrome sync), for security and privacy reasons the generation of this
-OAuth 2.0 token is restricted. This means that signing in to Chromium is
-restricted (as the OAuth 2.0 token cannot be generated). In order to sign in
-to Chromium builds, please add your test account to
-[google-browser-signin-testaccounts@chromium.org](https://groups.google.com/u/1/a/chromium.org/g/google-browser-signin-testaccounts)
-(accounts in this group are allowed to get access tokens bypassing the
-restriction above).
-
-*Note: Starting with Chromium M69, when the browser is set up with an OAuth 2.0
-client ID and client secret, signing in with your Google Account to any Google
-web property will also attempt to sign you in to Chromium (which will fail as
-explained above). To avoid such errors, remove your OAuth 2.0 client ID and
-client secret from your build to stop generating tokens when users sign in to
-Google web properties (remove google_default_client_id,
-google_default_client_secret from gn args and GOOGLE_DEFAULT_CLIENT_ID and
-GOOGLE_DEFAULT_CLIENT_SECRET from your environment settings).*
-
-## Getting Keys for Your Chromium Derivative
-
-Many of the Google APIs used by Chrome are specific to Google and not intended
-for use in derived products. In the API Console
-(<http://developers.google.com/console>) you may be able to purchase additional
-quota for some of the APIs listed above. **For APIs that do not have a "Pricing"
-link, additional quota is not available for purchase.**
-
-### Polyfilling chrome.identity API in Your Chromium Derivative
-
-The default Chromium `chrome.identity.getAuthToken` API that extensions may
-call to obtain auth tokens will fail outside of Google Chrome as the
-implementation uses restricted APIs.
-
-A prototype CL for Chromium embedders might use to replace the implementation
-with one not dependent upon private APIs can be found attached to [this
-post](https://groups.google.com/a/chromium.org/g/embedder-dev/c/tGCJ3QNVzYE). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/build-instructions-android-webview/index.md b/chromium/docs/website/site/developers/how-tos/build-instructions-android-webview/index.md
deleted file mode 100644
index e71bdfe6a0e..00000000000
--- a/chromium/docs/website/site/developers/how-tos/build-instructions-android-webview/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: build-instructions-android-webview
-title: Build Instructions (Android WebView)
----
-
-## This content has moved: <https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/build-instructions.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/build-instructions-cast/index.md b/chromium/docs/website/site/developers/how-tos/build-instructions-cast/index.md
deleted file mode 100644
index d112a9a2803..00000000000
--- a/chromium/docs/website/site/developers/how-tos/build-instructions-cast/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: build-instructions-cast
-title: Build Instructions (Cast)
----
-
-**Cast docs have moved! Linux instructions are
-[here](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/cast_build_instructions.md)
-and Android are
-[here](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_cast_build_instructions.md).** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/build-instructions-chromeos/index.md b/chromium/docs/website/site/developers/how-tos/build-instructions-chromeos/index.md
deleted file mode 100644
index c5b4cada824..00000000000
--- a/chromium/docs/website/site/developers/how-tos/build-instructions-chromeos/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: build-instructions-chromeos
-title: Build Instructions (Chromium OS on Linux)
----
-
-This page has been replaced by
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/chromeos_build_instructions.md>
-
-## Running Chromium on a Chromium OS device
-
-See [Building Chromium for Chromium OS (simple
-chrome)](http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/building-chromium-browser) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/build-instructions-windows/index.md b/chromium/docs/website/site/developers/how-tos/build-instructions-windows/index.md
deleted file mode 100644
index 768d5385a1c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/build-instructions-windows/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: build-instructions-windows
-title: Build Instructions (Windows)
----
-
-**Windows build instructions have been moved! See them
-[here.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/windows_build_instructions.md)** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/chrome-frame-cfinstall/index.md b/chromium/docs/website/site/developers/how-tos/chrome-frame-cfinstall/index.md
deleted file mode 100644
index fe7aeae3005..00000000000
--- a/chromium/docs/website/site/developers/how-tos/chrome-frame-cfinstall/index.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: chrome-frame-cfinstall
-title: Chrome Frame CFInstall script
----
-
-## Google Chrome Frame is no longer supported and retired as of February 25, 2014. For guidance on what you need to know as a developer or IT administrator, please read our [developer FAQs](https://developers.google.com/chrome/chrome-frame/) for Chrome Frame.
-
-## Introduction
-
-This page describes the latest version of the Chrome Frame CFInstall script that
-allows easy prompting for Chrome Frame installation within your own site.
-
-This version supports a new streamlined and improved API, though it is expected
-to be backwards compatible with previous versions of the API as well.
-
-## User Experience
-
-This version of the CFInstall script is designed to optimize the user's
-installation experience and get them onto your site, with Chrome Frame
-installed, as fast as possible.
-
-To use this install flow, simply:
-
-1. Provide the user with a prompt to install Chrome Frame, whether it
- is optional or required for your site to function.
-2. If the user chooses to install Chrome Frame, invoke
- CFInstall.require(). You may pass optional success and failure
- callbacks, in that order.
-
-CFInstall.require will check the user's browser for compatibility and, if Chrome
-Frame is supported, launch a modal dialog with the Chrome Frame EULA and
-installation flow. The appropriate callback will be invoked upon installation
-success, failure, or cancellation.
-
-By default, the current page will be reloaded after installation completes, with
-the Chrome Frame plugin active. Naturally, your site must be sending the Chrome
-Frame header or meta tag in order to be activated in Chrome Frame.
-
-See
-<http://src.chromium.org/viewvc/chrome/trunk/src/chrome_frame/cfinstall/examples/simple.html>
-for an example of this integration.
-
-## Custom Look & Feel
-
-The default look & feel of the installation flow dialog can be replaced quite
-easily to match the look of your site. See
-<http://src.chromium.org/viewvc/chrome/trunk/src/chrome_frame/cfinstall/examples/jquery.html>
-for an example using the JQuery library.
-
-## **Hosting the Scripts**
-
-You can access the CFInstall script directly off of Google's servers or host it
-yourself. If you choose to host it yourself, please note that the script
-consists of both the small initial script (the "stub") and a second, larger
-script (the "implementation") that is only downloaded if the install flow is
-launched. If you move the script elsewhere, you must either specify the
-implementation location or recompile the stub with your intended hosting path
-(see below).
-
-### Specifying a Custom Implementation URL
-
-The implementation is located at
-<http://google.com/tools/dlpage/res/chromeframe/script/cf-xd-install-impl.js> .
-If you wish to access it from elsewhere, you must make the following call before
-CFInstall.require:
-
-```none
-CFInstall.setImplementationUrl('/path/to/cf-xd-install-impl.js');
-```
-
-Note that the path supplied may be absolute or scheme, host, or path relative
-(i.e. 'http://host/path/to/...', '//host/path/to/...', '/path/to',
-'../../path/to'). It will be resolved relative to the HTML document in which the
-script is executed.
-
-## Compiling CFInstall from Source
-
-CFInstall uses the [Closure Library](http://code.google.com/closure/library/)
-and is optimized using the [Closure
-Compiler](http://code.google.com/closure/compiler/). The source code for
-CFInstall is included in the Chromium source repository and may be checked out
-using the following command:
-
-```none
-svn co http://src.chromium.org/chrome/trunk/src/chrome_frame/cfinstall/
-```
-
-Once you have checked out the code, you may simply run build.sh to download the
-required dependencies and build the optimized scripts (see the 'out' directory).
-The Closure Compiler requires Python and Java in order to run. If you are unable
-to execute build.sh (due to a lack of a shell interpreter, for example), you
-should find it pretty straightforward to manually invoke the compiler using the
-script as an example.
-
-The build.sh script accepts two options for customizing the optimized output:
-
-```none
-Usage: ./build.sh [-l //host.com/path/to/scripts/dir/] [-p] [-d]
-       -l <URL>   The path under which the generated
-                  scripts will be deployed.
-       -d         Disable obfuscating optimizations.
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/index.md b/chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/index.md
deleted file mode 100644
index 1d2a76d118d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: chrome-frame-getting-started
-title: Chrome Frame
----
-
-## Google Chrome Frame was an open source plug-in that seamlessly brought Google Chrome's open web technologies and speedy JavaScript engine to Internet Explorer.
-
-* ## If you have Chrome Frame installed, please uninstall it. It is no
- longer supported or updated.
-* ## You should continue to encourage your users to install and run
- [evergreen
- browsers](http://tomdale.net/2013/05/evergreen-browsers/), that is,
- browsers that auto-update their users to the latest and greatest.
-
-## Google Chrome Frame is no longer supported and retired as of February 25, 2014.
-
-## Please read our June 2013 [Chromium blog post](http://blog.chromium.org/2013/06/retiring-chrome-frame.html) for details.
-
-### Chrome for Business
-
-## Deploying [Chrome for Business](http://www.google.com/chrome/work) lets you configure over 100 policies to fit your organization's needs. As an admin, you have solid control over the browser deployment, including managing updates, supporting compatibility of older apps, and installing extensions globally.
-
-### Chrome Legacy Browser Support
-
-## If your organization wants to take advantage of the Chrome browser, but your users still need to access older websites and apps that require Internet Explorer, you can use [Legacy Browser Support](https://www.google.com/intl/en/chrome/business/browser/lbs.html) to easily and automatically switch between browsers. When your user clicks a link that requires a legacy browser to open (such as a site that requires ActiveX), the URL will automatically open in the legacy browser from Chrome. You can specify which URLs to launch into a second browser and deploy this Chrome policy for the organization. More info on [Legacy Browser Support in our help center.](http://support.google.com/chrome/a/bin/answer.py?hl=en&answer=3019558)
-
-### How should I deliver feature-forward experiences across browsers now?
-
-## Continue to use feature detection to identify capabilities of a browser. Scaling experiences across desktop and mobile in a performant way may require reducing the amount of effects for older browsers. You can define a browser support policy that outlines the various levels of support and/or consider a low-res edition where the content is very accessible, though it's lacking significant visual and interaction design. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/screenshot-chromeframe.jpeg.sha1 b/chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/screenshot-chromeframe.jpeg.sha1
deleted file mode 100644
index cb10f9cf452..00000000000
--- a/chromium/docs/website/site/developers/how-tos/chrome-frame-getting-started/screenshot-chromeframe.jpeg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2dbb4938cbd7d98d4945ccb390097637fbc0e0a1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/chromium-modularization/index.md b/chromium/docs/website/site/developers/how-tos/chromium-modularization/index.md
deleted file mode 100644
index 3661fb391a0..00000000000
--- a/chromium/docs/website/site/developers/how-tos/chromium-modularization/index.md
+++ /dev/null
@@ -1,201 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: chromium-modularization
-title: Chromium Modularization
----
-
-[TOC]
-
-## Background
-
-Chromium is a big project, and it makes sense to modularize. Many sub-teams work
-largely independently, such as the sandbox and V8 teams, and the WebKit code is
-merged on regular schedules. It makes sense to modularize such that these teams
-can work independently, yet still share common code.
-
-For an overview of the modules that exist, please see [Chromium code
-layout](/developers/how-tos/getting-around-the-chrome-source-code).
-
-## Quick start
-
-Say you need to make a change that adds or changes something in `base` for the
-benefit of something in `chrome`.
-
-First you make your change, get it reviewed and checked in. At this point,
-Chromium is still pulling a specific, older revision of base without your
-changes. It does this by pulling in a specific version of `webkit`, and then
-specifying that it should use the version of base that the `webkit` module is
-currently using (see the "From" syntax below). Nobody will see your change
-because of this.
-
-Then you update the `webkit` module to pull in your new version of `base`. First
-you need to figure out which version your new version is. It's a good idea to
-first do `svn update` in `base/` to make sure everything is up-to-date, then do
-`svn info`. You'll see a `Revision` line that tells you the current revision
-number of the current module. Put this revision number into the `webkit/DEPS`
-file for the `base` module. Get this change reviewed and submitted.
-
-At this point, `chrome` is still pulling a specific version of `webkit` that
-pulls `base` without your change. Repeat the same procedure as before, but this
-time, make `chrome` pull the latest version of `webkit`. Along with this deps
-file changes should go your corresponding changes to Chromium. This allows you
-to atomically pull in the most recent version and update Chromium to be
-compatible with it.
-
-Dependencies
-
-Each project depends on a variety of modules. For example, the WebKit project
-depends on the networking code, our shared base code, and some third-party
-libraries. Chromium and V8 in turn both depend on WebKit. (In practice, Chromium
-depends on everything since we are in the Chromium tree). Each project must list
-the projects it depends on, and which version it wants to pull. We do not
-support transitive dependencies, so each project must list all of the projects
-it depends on.
-
-A user's *client* specifies a set of target *solutions* to check out. (Yes,
-please excuse the Visual Studio jargon.) In the simplest case, a user's client
-only specifies a single solution, say the `chrome` solution. The root directory
-of each solution has a text file named `DEPS` that defines the set of
-dependencies for the project. Users can override these dependencies if desired.
-
-The contents of the `DEPS` file is a python associative array, which looks
-something like the following:
-
-deps = {
-"breakpad" : "http://google-breakpad.googlecode.com/svn/trunk@189",
-"webkit" : "http://src.chromium.org/chrome/trunk/src/webkit@3395",
-"v8" : "http://v8.googlecode.com/svn/trunk@77829",
-...
-}
-
-The `DEPS` file can easily be used to express a dependency on a subversion tag
-and other subversion servers:
-
-deps = {
-...
-"breakpad" : "http://google-breakpad.googlecode.com/svn/tags/1.0.29.0",
-...
-}
-
-While it is possible for a `DEPS` file to specify that the trunk of a dependency
-be used, it is intended that a `DEPS` file instead specify a known good revision
-number or tag. This ensures that Chromium developers, for example, are insulated
-from activity on the trunk of a dependency. When the maintainer(s) of the
-dependency decide to make Chromium use the new revision of the dependency, they
-just need to contribute a change to the `chrome/DEPS` file.
-
-### The "From" keyword
-
-Given that dependencies are not computed recursively, it can be a pain to
-maintain complex dependency trees manually, especially if modules have multiple
-overlapping dependencies. To simplify such situations, `gclient` supports the
-`From` keyword which can be used to express a dependency in terms of the `DEPS`
-file of another module. For example, you could have:
-
-deps = {
-"breakpad" : "http://google-breakpad.googlecode.com/svn/trunk@189",
-"webkit" : "http://src.chromium.org/chrome/trunk/src/webkit@3395",
-"v8" : From("webkit"),
-...
-}
-
-The use of the `From` keyword above indicates that the version of "v8" to be
-pulled should be determined by inspecting `webkit/DEPS`.
-
-## Test Data
-
-Some modules like `webkit` have very large amounts of test data. For these
-modules, a good convention is to define a separate module for the test data. In
-the case of the `webkit` module, `webkit/DEPS` can define a dependency on the
-webkit test data module, but `chrome/DEPS` can exclude this dependency. As a
-result, Chromium developers are exempted from having to checkout the WebKit test
-data by default, but this also does not inconvenience WebKit developers who
-prefer to check out the test data. Also, by having the test data in a parallel
-directory, the cost of manually updating just the webkit directory is minimized.
-
-## Tooling
-
-To facilitate working with a bunch of separately versioned modules, some tooling
-is needed.
-
-### Installation
-
-Checkout the `depot_tools` package, which includes `gclient`, `gcl`, and `svn`:
-`$ `git clone https://chromium.googlesource.com/chromium/tools/depot_tools
-
-Add the `depot_tools` directory to your PATH.
-
-### Basic Usage
-
-To checkout Chromium the first time, follow [these
-instructions](/developers/how-tos/get-the-code).
-
-### Advanced Usage
-
-The contents of a default `.gclient` file looks something like:
-
-solutions = \[
-{ "name" : "chrome",
-"url" : "http://src.chromium.org/chrome/trunk/src/chrome",
-"custom_deps" : {}
-}
-\]
-
-An element of the `solutions` array (a *solution*) describes a repository
-directory that will be checked out into your working copy. Each solution may
-optionally define additional dependencies (via its `DEPS` file) to be checked
-out alongside the solution's directory. A solution may also specify custom
-dependencies (via the `custom_deps` property) that override or augment the
-dependencies specified by the `DEPS` file.
-
-Users can edit this file to add new solutions or alter dependencies for a
-particular solution.
-
-For example, a V8 developer may wish to checkout the V8 trunk alongside a stable
-version of Chromium. So, they might setup a `.gclient` file like so:
-
-solutions = \[
-{ "name" : "chrome",
-"url" : "http://src.chromium.org/chrome/trunk/src/chrome@5000",
-"custom_deps" : {
-"v8" : "http://v8.googlecode.com/svn/trunk"
-}
-}
-\]
-
-The above specifies that a particular revision of Chromium, r5000, should be
-used instead of the Chromium trunk. It then specifies that the V8 trunk should
-be used instead of the version of V8 specified by `chrome/DEPS`.
-
-The V8 example is somewhat simple since V8 does not itself have other
-dependencies. For modules like webkit, specifying custom dependencies for each
-of WebKit's dependencies is tedious and could potentially get out of sync with
-what other developers are using (as specified in `webkit/DEPS`). So, an
-alternative approach to working with the trunk of another module is to set up a
-second solution:
-
-solutions = \[
-{ "name" : "chrome",
-"url" : "http://src.chromium.org/chrome/trunk/src/chrome@5000",
-"custom_deps" : {
-"skia" : None,
-"webkit" : None,
-"v8" : None
-}
-},
-{ "name" : "webkit",
-"url" : "http://src.chromium.org/chrome/trunk/src/webkit",
-"custom_deps" : {}
-}
-\]
-
-The above `.gclient` file specifies that the svn URLs given in `chrome/DEPS` for
-the skia, webkit, and v8 modules should be ignored. Those modules are then
-fetched according to `webkit/DEPS`. Both `chrome/DEPS` and `webkit/DEPS`, in
-this example, specify other common dependencies such as `base`. The tool will
-complain if the two solutions specify conflicting dependencies. A user must
-explicitly ignore a dependency that conflicts. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/closure-compilation/index.md b/chromium/docs/website/site/developers/how-tos/closure-compilation/index.md
deleted file mode 100644
index 0286e84e43d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/closure-compilation/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: closure-compilation
-title: Closure Compilation
----
-
-See:
-[wiki:ClosureCompilation](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/closure_compilation.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/component-build/index.md b/chromium/docs/website/site/developers/how-tos/component-build/index.md
deleted file mode 100644
index 6ca24c07381..00000000000
--- a/chromium/docs/website/site/developers/how-tos/component-build/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: component-build
-title: Component build / Shared Library / Multi-DLL build
----
-
-This documentation has moved to the source tree. See t[he Chromium component
-build](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/component_build.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope-update b/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope-update
deleted file mode 100644
index a26d3aa6b10..00000000000
--- a/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope-update
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash -e
-
-S=$(pwd)
-SRCDIRS=$(find ./src -mindepth 1 -maxdepth 1 -type d|
- egrep -v '^\./(ninja|out|\.git)' |sed -e "sX^\./X-s $S/Xg"| tr '\012' ' ')
-D=$(mktemp -d)
-cd $D
-cscope -Rbq $SRCDIRS
-mv * $S
-cd $S
-rmdir $D
diff --git a/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope.el b/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope.el
deleted file mode 100644
index 3cdfe5901e9..00000000000
--- a/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/cscope.el
+++ /dev/null
@@ -1,41 +0,0 @@
-(load "/usr/share/emacs/site-lisp/xcscope.el")
-
-(setq cscope-do-not-update-database t)
-(setq cscope-initial-directory nil)
-
-(defun ami-src-root-for-buffer ()
- "Return the source root for the current buffer"
- (cond
- ((null buffer-file-name) (error "Unexpected no path!"))
- ((string-match "/chromium/src/" buffer-file-name) "~/src/chromium/src")
- ((string-match "/wr/trunk/" buffer-file-name) "~/src/wr/trunk")
- (t (error (concat "Unexpected path: " buffer-file-name)))))
-(defun ami-cscope-symbol-feeling-lucky (sym)
- "Do a cscope symbol lookup trying for the declaration of a type."
- (interactive (list
- (cscope-prompt-for-symbol "Find this symbol: " nil)
- ))
- (let* ((file-line
- (shell-command-to-string
- (format (concat "cd %s/.. && "
- "cscope -dL -1 %s |egrep '[0-9] *((struct|class|#define)( [A-Z]*_EXPORT)? %s($| |\\()|typedef .* %s(;?| {)$)'|" ;; #
- "head -1 |cut -d' ' -f1,3|tr ' ' ':'")
- (ami-src-root-for-buffer) sym sym sym))))
- (if (not (string= "" file-line))
- (let* ((parts (split-string file-line ":"))
- (file (car parts))
- (line (string-to-int (cadr parts))))
- (find-file file)
- (goto-line line))
- (cscope-find-this-symbol sym))))
-(defun ami-cscope-at-point ()
- "Invoke reasonable cscope command depending on the context.
-Useful in chromium."
- (interactive)
- (let ((line (buffer-substring-no-properties
- (line-beginning-position) (line-end-position))))
- (if (string-match "^#include [\"<]" line)
- (call-interactively 'cscope-find-this-file)
- (call-interactively 'ami-cscope-symbol-feeling-lucky))))
-
-(global-set-key '[?\M-.] 'ami-cscope-at-point)
diff --git a/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/index.md b/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/index.md
deleted file mode 100644
index 6ea6a018cb4..00000000000
--- a/chromium/docs/website/site/developers/how-tos/cscope-emacs-example-linux-setup/index.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: cscope-emacs-example-linux-setup
-title: 'cscope/emacs: example Linux setup'
----
-
-This is a simple recipe for being setting up jump-to-file (for #includes) and
-jump-to-declaration (for symbol names) in emacs, on gprecise (should work on
-most posix systems).
-
-* Install cscope: `sudo apt-get install -y cscope cscope-el`
-* Place the attached cscope-update script in the directory containing
- `.gclient` (parent of `src/`).
-* Run `./cscope-update` after each `gclient sync` to update the cscope
- database
-* Load the attached `cscope.el` from your `.emacs`; note you'll
- probably want to edit this with your own client roots in
- `ami-src-root-for-buffer`.
-* While browsing source, hit meta-. (period) to jump to the file
- `#include`d at point or to the declaration of the symbol at point. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-gpu-related-code/index.md b/chromium/docs/website/site/developers/how-tos/debugging-gpu-related-code/index.md
deleted file mode 100644
index 3cb3ca4642c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-gpu-related-code/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: debugging-gpu-related-code
-title: Debugging GPU related code
----
-
-This page has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gpu/debugging_gpu_related_code.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-android/index.md b/chromium/docs/website/site/developers/how-tos/debugging-on-android/index.md
deleted file mode 100644
index f7f0ab076f1..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-android/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: debugging-on-android
-title: Debugging Chromium on Android
----
-
-Moved to:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_debugging_instructions.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-os-x/building-with-ninja-debugging-with-xcode/index.md b/chromium/docs/website/site/developers/how-tos/debugging-on-os-x/building-with-ninja-debugging-with-xcode/index.md
deleted file mode 100644
index cbec573cff2..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-os-x/building-with-ninja-debugging-with-xcode/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/debugging-on-os-x
- - Debugging Chromium on macOS
-page_name: building-with-ninja-debugging-with-xcode
-title: Building with Ninja, Debugging with Xcode
----
-
-## This page has moved to <https://chromium.googlesource.com/chromium/src/+/main/docs/mac/debugging.md#Working-with-Xcode> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-os-x/index.md b/chromium/docs/website/site/developers/how-tos/debugging-on-os-x/index.md
deleted file mode 100644
index 7109e37c2b5..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-os-x/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: debugging-on-os-x
-title: Debugging Chromium on macOS
----
-
-## This page has moved to <https://chromium.googlesource.com/chromium/src/+/main/docs/mac/debugging.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/StepIntoSpecific.png.sha1 b/chromium/docs/website/site/developers/how-tos/debugging-on-windows/StepIntoSpecific.png.sha1
deleted file mode 100644
index 47097b5900b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/StepIntoSpecific.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6b63fe098008640b4079215c771a7eb0200c8c2f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/example-of-working-with-a-dump/index.md b/chromium/docs/website/site/developers/how-tos/debugging-on-windows/example-of-working-with-a-dump/index.md
deleted file mode 100644
index cf4beabc0f8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/example-of-working-with-a-dump/index.md
+++ /dev/null
@@ -1,304 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/debugging-on-windows
- - Debugging Chromium on Windows
-page_name: example-of-working-with-a-dump
-title: Example of working with a dump.
----
-
-Let's say that you are looking at a crash dump, so following the first command
-from [this
-page](/developers/how-tos/debugging-on-windows/windbg-help#TOC-Common-commands-when-working-with-a-crash)
-you do:
-
-```none
-0:006> !analyze -v
-```
-
-Part of what the command prints is:
-
-```none
-FAULTING_IP: 
-YCWebCameraSource+14c7e
-1c414c7e 8b01            mov     eax,dword ptr [ecx]
-EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
-ExceptionAddress: 1c414c7e (YCWebCameraSource+0x00014c7e)
-   ExceptionCode: c0000005 (Access violation)
-  ExceptionFlags: 00000000
-NumberParameters: 2
-   Parameter[0]: 00000000
-   Parameter[1]: 00000000
-Attempt to read from address 00000000
-CONTEXT:  00000000 -- (.cxr 0x0;r)
-eax=00000000 ebx=0465c528 ecx=00000000 edx=00000500 esi=0465c498 edi=00000000
-eip=77c2e1a4 esp=0465c370 ebp=0465c4f0 iopl=0         nv up ei pl nz ac po nc
-cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00200212
-PROCESS_NAME:  chrome.exe
-ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
-EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
-EXCEPTION_PARAMETER1:  00000000
-EXCEPTION_PARAMETER2:  00000000
-READ_ADDRESS:  00000000 
-FOLLOWUP_IP: 
-YCWebCameraSource+14c7e
-1c414c7e 8b01            mov     eax,dword ptr [ecx]
-BUGCHECK_STR:  APPLICATION_FAULT_NULL_POINTER_READ_INVALID_POINTER_READ_BEFORE_CALL
-STACK_TEXT:  
-0465cab8 00000000 0465cbc4 096052c0 1c414fe1 YCWebCameraSource+0x14c7e
-```
-
-which basically says that there is an attempt to read from NULL:
-
-YCWebCameraSource+14c7e
-
-1c414c7e 8b01 mov eax,dword ptr \[ecx\]
-
-and ECX is 0.
-
-The problematic part is the last one: the stack is a single line of text, inside
-a DLL that you know nothing about. Moving on to the next command,
-
-```none
-0:006> .ecxr
-eax=0bd00048 ebx=000000f0 ecx=00000000 edx=00000500 esi=0465cbc4 edi=00000140
-eip=1c414c7e esp=0465cabc ebp=000000f0 iopl=0         nv up ei pl nz na po nc
-cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210202
-YCWebCameraSource+0x14c7e:
-1c414c7e 8b01            mov     eax,dword ptr [ecx]  ds:002b:00000000=????????
-```
-
-confirms what we already know as the debugger loads the context when the
-exception was received. The stack window shows only one line of text.
-
-```none
-0:006> k
-  *** Stack trace for last set context - .thread/.cxr resets it
-ChildEBP RetAddr  
-WARNING: Stack unwind information not available. Following frames may be wrong.
-0465cab8 00000000 YCWebCameraSource+0x14c7e
-```
-
-Looking at the registers show the reason: EBP is 0xF0, which is not a pointer to
-the stack. ESP looks fine, so let's see what's there using the next command from
-the list:
-
-```none
-0:006> dds esp
-0465cabc  00000000
-0465cac0  0465cbc4
-0465cac4  096052c0
-0465cac8  1c414fe1 YCWebCameraSource+0x14fe1
-0465cacc  0b7b0000
-0465cad0  00000140
-0465cad4  000000f0
-0465cad8  00000500
-0465cadc  09710000
-0465cae0  00000140
-0465cae4  000000f0
-0465cae8  000003c0
-0465caec  00000000
-0465caf0  00000000
-0465caf4  00000140
-0465caf8  1c40c24e YCWebCameraSource+0xc24e
-0465cafc  0b7b0000
-0465cb00  00000140
-0465cb04  000000f0
-0465cb08  00000000
-0465cb0c  00000500
-0465cb10  09710000
-0465cb14  00000140
-0465cb18  000000f0
-0465cb1c  00000000
-0465cb20  000003c0
-0465cb24  0465e074
-0465cb28  09158124
-0465cb2c  091561c8
-0465cb30  00000000
-0465cb34  09605848
-0465cb38  0b8007c8
-```
-
-A few pointers to code close to the address that crashed, which is good because
-it means the control flow before the crash is reasonable. But clearly that code
-is not using EBP to maintain stack frames (more on that later). So see what else
-is on the stack:
-
-```none
-0:006> dds
-0465cb3c  0b800960
-0465cb40  000003c0
-0465cb44  091561c8
-0465cb48  00022009
-0465cb4c  80004005
-0465cb50  1c4238f8 YCWebCameraSource+0x238f8
-0465cb54  09605848
-0465cb58  00000000
-0465cb5c  000000b2
-0465cb60  096052c0
-0465cb64  00000000
-0465cb68  00000000
-0465cb6c  00000140
-0465cb70  000000f0
-0465cb74  00000140
-0465cb78  000000f0
-0465cb7c  00000500
-0465cb80  00022009
-0465cb84  0b7b0000
-0465cb88  00000001
-0465cb8c  1c4238f8 YCWebCameraSource+0x238f8
-0465cb90  096046c8
-0465cb94  00000000
-0465cb98  0465cc28
-0465cb9c  00000140
-0465cba0  000000f0
-0465cba4  000003c0
-0465cba8  00021808
-0465cbac  09710000
-0465cbb0  00000002
-0465cbb4  557cf400
-0465cbb8  11d31a04
-```
-
-Note that issuing the command without an argument just continues where the last
-invocation left of. Furthermore, just hitting enter repeats the last command so
-after this point is a matter of keep hitting enter. Which is good because in
-this case interesting things happen after a long time:
-
-```none
-0:006> 
-0465f22c  f15f2bff
-0465f230  0465f27c
-0465f234  772b9b03 msvcrt!free+0x65
-0465f238  01700000
-0465f23c  00000000
-0465f240  772b9b10 msvcrt!free+0x84
-0465f244  f1a4c16f
-0465f248  00000000
-0465f24c  0170b3f8
-0465f250  00000000
-0465f254  00000000
-0465f258  0465f238
-0465f25c  ffffffff
-0465f260  00000000
-0465f264  0465f244
-0465f268  82eaa80b
-0465f26c  0465f98c
-0465f270  772dc265 msvcrt!_except_handler4
-0465f274  82eaa80b
-0465f278  fffffffe
-0465f27c  772b9b10 msvcrt!free+0x84
-0465f280  732343a5 devenum!ATL::CComObject<CCreateSwEnum>::`scalar deleting destructor'+0x3d
-0465f284  0170b3f8
-0465f288  73234566 devenum!ATL::CComObject<CCreateSwEnum>::Release+0x23
-0465f28c  03290d90
-0465f290  031f0b50
-0465f294  0465f4bc
-0465f298  6fb647db chrome_6faf0000!media::GetDeviceNamesDirectShow+0x3ab
-0465f29c  6fb647e5 chrome_6faf0000!media::GetDeviceNamesDirectShow+0x3b5
-0465f2a0  0465f2b8
-0465f2a4  6faf22b5 chrome_6faf0000!tcmalloc::FL_Push+0x71
-0465f2a8  01192308
-```
-
-After a while of seeing symbols from various DLLs go through the stack we start
-to see symbols from Chrome. The last part looks relatively good. Note that at
-address 0465f298 there is a pointer to Chrome code, and more importantly, 4
-bytes before there is a pointer to another place in the stack, some bytes after
-the current position: 0465f294 0465f4bc. This is the typical pattern of a call
-to a function that use EBP to track stack frames. Time to use the next command
-from the list:
-
-```none
-0:006> k = 0465f294  0465f294  0465f294  
-ChildEBP RetAddr  
-WARNING: Frame IP not in any known module. Following frames may be wrong.
-0465f294 6fb647db 0x465f294
-0465f4bc 07554180 chrome_6faf0000!media::GetDeviceNamesDirectShow+0x3ab
-0465f4cc 6fb643d2 0x7554180
-0465f4e8 6fb64386 chrome_6faf0000!media::VideoCaptureDeviceFactory::EnumerateDeviceNames+0x45
-0465f4f4 6fb55ece chrome_6faf0000!base::internal::Invoker<>
-0465f5d4 6fb5552d chrome_6faf0000!base::MessageLoop::RunTask+0x50a
-0465f718 6fb62bad chrome_6faf0000!base::MessageLoop::DoWork+0x359
-0465f744 6fb5503a chrome_6faf0000!base::MessagePumpDefault::Run+0xc7
-0465f768 6fb54f2d chrome_6faf0000!base::MessageLoop::RunHandler+0x6e
-0465f794 6fb54ec4 chrome_6faf0000!base::MessageLoop::Run+0x65
-0465f79c 6fb5291e chrome_6faf0000!base::Thread::Run+0xb
-0465f928 6fb52509 chrome_6faf0000!base::Thread::ThreadMain+0x26e
-0465f94c 778a850d chrome_6faf0000!base::`anonymous namespace'::ThreadFunc+0xcb
-0465f958 77c5bf39 kernel32!BaseThreadInitThunk+0xe
-0465f99c 77c5bf0c ntdll!__RtlUserThreadStart+0x72
-0465f9b4 00000000 ntdll!_RtlUserThreadStart+0x1b
-```
-
-Strictly speaking the format that I just used is not correct, but the debugger
-does a decent job figuring out what I want just complaining about the first
-frame. The good part is that now we have a stack that looks reasonable. Time to
-go up and try to get something better.
-
-The pattern that we just saw, a pointer a few bytes ahead followed by a symbol
-should repeat itself... as in the pointer should point to another pointer
-followed by a symbol. Se if we search up on the debugger output for 0465f294 we
-should get to the previous frame. If there is no match, it means that either we
-reached a function call that doesn't use EBP, or we are following stale data
-from the stack (traces of something that happened before, and has not been
-overwritten yet, but it is not the current call sequence).
-
-And that's exactly what happens in this case. But going up and following stack
-manually a few times provides a better stack. Remember that the goal is not to
-get a perfect stack trace but to get enough information to do something about
-it. We already know that get the actual stack will be impossible because close
-to the crash point there's no EBP and no symbols. But the type of symbols that
-you see going through while executing dds gives you a rough idea of how the flow
-ends up at the code that crashes.
-
-```none
-0:006> k = 0465e0ac  0465e0ac  0465e0ac  
-ChildEBP RetAddr  
-WARNING: Frame IP not in any known module. Following frames may be wrong.
-0465e0ac 76ec7543 0x465e0ac
-0465e11c 76ec4fdf combase!CServerContextActivator::CreateInstance+0x18b
-0465e15c 76ec7610 combase!ActivationPropertiesIn::DelegateCreateInstance+0x5c
-0465e1b0 76ec7334 combase!CApartmentActivator::CreateInstance+0x75
-0465e1d4 76ec6d52 combase!CProcessActivator::CCICallback+0x3b
-0465e1f4 76ec72cf combase!CProcessActivator::AttemptActivation+0x2c
-0465e22c 76ec73a9 combase!CProcessActivator::ActivateByContext+0x97
-0465e25c 76ec4fdf combase!CProcessActivator::CreateInstance+0x5d
-0465e29c 76ec50d7 combase!ActivationPropertiesIn::DelegateCreateInstance+0x5c
-0465e4fc 76ec4fdf combase!CClientContextActivator::CreateInstance+0xdd
-0465e53c 76ec5ba6 combase!ActivationPropertiesIn::DelegateCreateInstance+0x5c
-0465ede8 76ebc9c2 combase!ICoCreateInstanceEx+0xfb6
-(Inline) -------- combase!CComActivator::DoCreateInstance+0x11a
-(Inline) -------- combase!CoCreateInstanceEx+0x14e
-0465ee3c 732352c3 combase!CoCreateInstance+0x169
-0465eef0 70cedfbd devenum!CDeviceMoniker::BindToObject+0x1ac
-0465f0e0 70ce59df chrome_6faf0000!media::VideoCaptureDeviceWin::GetDeviceFilter+0x234
-0465f3ac 70ce56a2 chrome_6faf0000!media::GetDeviceSupportedFormatsDirectShow+0x335
-0465f3c0 6fb64995 chrome_6faf0000!media::VideoCaptureDeviceFactoryWin::GetDeviceSupportedFormats+0x20
-0465f44c 6fb648c1 chrome_6faf0000!content::VideoCaptureManager::ConsolidateDevicesInfoOnDeviceThread+0xc1
-0465f46c 6fb64883 chrome_6faf0000!base::internal::RunnableAdapter<>::Run+0x2e
-0465f488 6fb64848 chrome_6faf0000!base::internal::InvokeHelper<>::MakeItSo+0x25
-0465f4b8 6fb64800 chrome_6faf0000!base::internal::Invoker<<media::VideoCaptureDevice::N+0x33
-0465f4cc 6fb643d2 chrome_6faf0000!base::Callback<>::Run+0x17
-0465f4e8 6fb64386 chrome_6faf0000!media::VideoCaptureDeviceFactory::EnumerateDeviceNames+0x45
-0465f4f4 6fb55ece chrome_6faf0000!base::internal::Invoker<2,base::internal::BindState<>::Run+0x10
-0465f5d4 6fb5552d chrome_6faf0000!base::MessageLoop::RunTask+0x50a
-0465f718 6fb62bad chrome_6faf0000!base::MessageLoop::DoWork+0x359
-0465f744 6fb5503a chrome_6faf0000!base::MessagePumpDefault::Run+0xc7
-0465f768 6fb54f2d chrome_6faf0000!base::MessageLoop::RunHandler+0x6e
-0465f794 6fb54ec4 chrome_6faf0000!base::MessageLoop::Run+0x65
-0465f79c 6fb5291e chrome_6faf0000!base::Thread::Run+0xb
-0465f928 6fb52509 chrome_6faf0000!base::Thread::ThreadMain+0x26e
-0465f94c 778a850d chrome_6faf0000!base::`anonymous namespace'::ThreadFunc+0xcb
-0465f958 77c5bf39 kernel32!BaseThreadInitThunk+0xe
-0465f99c 77c5bf0c ntdll!__RtlUserThreadStart+0x72
-0465f9b4 00000000 ntdll!_RtlUserThreadStart+0x1b
-```
-
-Note how this stack is slightly different right where the previous stack
-started, but it flows nicely into a sequence of com calls. There's usually no
-point in going too deep into code we don't control, so that is all we need in
-this case. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/gflags.png.sha1 b/chromium/docs/website/site/developers/how-tos/debugging-on-windows/gflags.png.sha1
deleted file mode 100644
index 6beccca47d6..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/gflags.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c55130c1788c9afbbf6f571e6583818431746c8b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/graphicsdebugger.png.sha1 b/chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/graphicsdebugger.png.sha1
deleted file mode 100644
index 26af945c9e2..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/graphicsdebugger.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6bb7834a243e91e54421f9d85e56cbe5482c37a2 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/index.md b/chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/index.md
deleted file mode 100644
index f7e8e257e42..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/debugging-on-windows
- - Debugging Chromium on Windows
-page_name: graphics-debugging-in-visual-studio-2013
-title: Graphics Debugging in Visual Studio 2013
----
-
-Visual Studio 2013 has a built-in graphics debugger that can capture a rendered
-frame. This is a replacement for PIX.
-
-To use it with Chromium:
-
-* Pass the command arguments: --no-sandbox --in-process-gpu
- * To enable gpu rasterization, include the command line arguments:
- --force-gpu-rasterization --enable-impl-side-painting
- * You might need following hack or something
- diff --git a/content/app/content_main_runner.cc b/content/app/content_main_runner.cc index 05e45bd..46db961 100644 --- a/content/app/content_main_runner.cc +++ b/content/app/content_main_runner.cc @@ -401,6 +401,11 @@ int RunNamedProcessTypeMain( { switches::kGpuProcess, GpuMain }, #endif // !CHROME_MULTIPLE_DLL_BROWSER }; + base::CommandLine& command_line = + \*base::CommandLine::ForCurrentProcess(); + command_line.AppendSwitch(switches::kInProcessGPU); + command_line.AppendSwitch(switches::kNoSandbox);
-* Within Visual Studio, show the Graphics toolbar
-* Click File&gt;Open&gt;Project/Solution, and then click your
- chrome.exe FYI, release build chrome.exe/content_shell.exe works
- well.
-* Click the "Start Diagnostics" button on the Graphics toolbar
-* While hardware accelerated graphics are being rendered within
- Chromium, press the Print Scrn key, or the "Capture Next Rendered
- Frame" button on the Graphics toolbar
-
-Each frame time will be super imposed on top of Chrome. If you don't see this
-then the Graphics Debugger is not working correctly and you won't be able to
-capture frames.
-
-[<img alt="image"
-src="/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/graphicsdebugger.png">](/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013/graphicsdebugger.png)
-
-Here is a description of some of the more important elements of the Graphic
-Debugger (numbers correspond to the highlighted part on the above image):
-
-1. The Graphic toolbar
-2. The *Graphic Event List* pane keeps a complete history of the calls
- to create the frame. Clicking through the list will generate a
- preview of the frame up to the call that you have selected in the
- .vsglog frame in the center.
-3. Within the event list, you can find objects that were created by or
- used in a function call
-4. The *Graphics Object Table* contains a list of all objects used
- during the frame
-5. The name of an object is set within the chrome source. For example,
- if you search for "Offscreen back buffer texture", you will find it
- in the function "SwapChain11::resetOffscreenTexture"
-6. Some calls within the *Graphics Event List* will give you a call
- stack (usually, you must click directly on a DirectX function to get
- a call stack)
-7. If you double click an object in the *Graphics Object Table*, you
- can get details on the object. If it is a texture, it will open and
- display the texture
-8. If you double click on a shader in the *Graphics Object Table*, you
- can open a temporary file that shows the shader code
-
-You can find more information on the Graphics Debugger at
-<http://msdn.microsoft.com/en-us/library/hh873207.aspx> and
-<https://www.youtube.com/watch?v=j4SpasLF6Co>
-
-You may find it useful to use the configuration manager within Visual Studio to
-create multiple debug targets. For example, you can set up a second
-configuration to pass the gpu specific flags. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/index.md b/chromium/docs/website/site/developers/how-tos/debugging-on-windows/index.md
deleted file mode 100644
index a080fa1f4ac..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/index.md
+++ /dev/null
@@ -1,496 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: debugging-on-windows
-title: Debugging Chromium on Windows
----
-
-First see [get the code](/developers/how-tos/get-the-code) for checkout and
-build instructions.
-
-## Getting started
-
-You can use Visual Studio's built-in debugger or
-[WinDBG](/developers/how-tos/debugging-on-windows/windbg-help) to debug
-Chromium. You don't need to use the IDE to build in order to use the debugger:
-Ninja is used to build Chromium and most developers invoke it from a command
-prompt, and then open the IDE for debugging as necessary. To start debugging an
-already-built executable with Visual Studio just launch Visual Studio (2019 or
-higher) and select File-&gt; Open-&gt; Project/Solution (Ctrl+Shift+O) and
-select the executable of interest. This will create a solution with that
-executable as the 'project'. You can then launch the debugger with F5 or F11 or
-from the Debug menu. If you right-click on the executable in Solution Explorer
-and select properties then you can edit things such as the executable path,
-command-line arguments, and working directory.
-
-You can add additional executables to the solution by using File-&gt; Add-&gt;
-Existing Project and selecting another already-built executable. You can select
-which one to debug by right-clicking on one of them in Solution Explorer and
-selecting Set as Startup Project.
-
-When your solution file is customized to your taste you can save it to a
-directory such as out\\solutions. Saving it there helps ensure that relative
-paths to source files, printed from build commands, will correctly identify the
-source files.
-
-The Tools menu can be used to add commands to do things like invoke ninja to
-build Chrome, compile the selected source file, or other things.
-
-Visual Studio 2017 is not recommended for debugging of Chromium - use a newer
-version for best performance and stability.
-
-`symbol_level=2` is the default on Windows and gives full debugging information
-with types, locals, globals, function names, and source/line information.
-`symbol_level=1` creates smaller PDBs with just function names, and source/line
-information - source-level debugging is still supported (new from June 2019),
-but local variables and type information are missing. `symbol_level=0` gives
-extremely limited debugging abilities, mostly just viewing call stacks when
-Chromium crashes.
-
-#### Browsing source code
-
-If you use a solution file generated by gn (`gn gen --ide=vs`) then Intellisense
-may help you navigate the code. If this doesn't work or if you use a solution
-created as above then you may want to install
-[VsChromium](https://chromium.github.io/vs-chromium/) to help navigate the code,
-as well as using <https://source.chromium.org>.
-
-#### Profiles
-
-It's a good idea to use a different Chrome profile for your debugging. If you
-are debugging Google Chrome branded builds, or use a Chromium build as your
-primary browser, the profiles can collide so you can't run both at once, and
-your stable browser might see profile versions from the future (Google Chrome
-and Chromium use different profile directories by default so won't collide). Use
-the command-line option:
-
-```
---user-data-dir=C:\tmp\my_debug_profile (replace the path as necessary)
-```
-
-Using the IDE, go to the **Debugging** tab of the properties of the chrome
-project, and set the **Command Arguments.**
-
-#### Chrome debug log
-
-Enable Chrome debug logging to a file by passing `--enable-logging --v=1`
-command-line flags at startup. Debug builds place the `chrome_debug.log` file in
-the `out\Debug` directory. Release builds place the file in the top level of the
-user data Chromium app directory, which is OS-version-dependent. For more
-information, see [logging](/for-testers/enable-logging) and [user data
-directory](/user-experience/user-data-directory) details.
-
-#### Symbol server
-
-If you are debugging official Google Chrome release builds, use the symbol
-server:
-
-```
-https://chromium-browser-symsrv.commondatastorage.googleapis.com
-```
-
-In Visual Studio, this goes in **Tools &gt; Options** under **Debugging &gt;
-Symbols**. You should set up a local cache in a empty directory on your
-computer.
-
-In windbg you can add this to your symbol server search path with the command
-below, where C:\\symbols is a local cache directory:
-
-```
-.sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com
-```
-
-Alternately, You can set the _NT_SYMBOL_PATH environment variable to include
-both the Microsoft and Google symbol servers - VS, windbg, and other tools
-should both respect this environment variable:
-
-```
-_NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com
-```
-
-Note that symbol servers will let the debuggers download both the PE files (DLLs
-and EXEs) and the PDB files.
-
-Chrome often loads third party libraries and partial symbols for some of these
-are also public. For example:
-
-**AMD**: https://download.amd.com/dir/bin
-
-**Nvidia**: https://driver-symbols.nvidia.com/
-
-**Intel**: https://software.intel.com/sites/downloads/symbols/
-
-For example, for completeness, the following symbol server environment variable
-will resolve all of the above sources - but this is more than is normally
-needed:
-
-```
-_NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://download.amd.com/dir/bin;SRV\*C:\symbols\*https://driver-symbols.nvidia.com/;SRV\*C:\symbols\*https://software.intel.com/sites/downloads/symbols/
-```
-
-#### Source indexing
-
-You should set up source indexing in your debugger (`.srcfix` in windbg,
-Tools-&gt; Options-&gt; Debugging-&gt; General-&gt; *Enable source server
-support* in Visual Studio) so that the correct source files will automatically
-be downloaded based on information in the downloaded symbols.
-
-Additionally, you must have `python` in your `path` in order for the [command that
-fetches source
-files](https://source.chromium.org/chromium/chromium/src/+/main:tools/symsrc/source_index.py;drc=374a3e7974dacf4423c2f44cf9dab69c31d34b48;l=492)
-to succeed; launching the debugger from the same environment as where you build
-Chromium is an easy way to ensure it's present.
-
-This is highly recommended when debugging released Google Chrome builds or
-looking at crash dumps. Having the correct version of the source files
-automatically show up saves significant time so you should definitely set this.
-
-## Multi-process issues
-
-Chromium can be challenging to debug because of its [multi-process
-architecture](/developers/design-documents/multi-process-architecture). When you
-select **Run** in the debugger, only the main browser process will be debugged.
-The code that actually renders web pages (the Renderer) and the plugins will be
-in separate processes that's not (yet!) being debugged. The
-[ProcessExplorer](https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)
-tool has a process tree view where you can see how these processes are related.
-You can also get the process IDs associated with each tab from the Chrome Task
-Manager (right-click on an empty area of the window title bar to open).
-
-**Automatically attach to child processes**
-
-There are two Visual Studio extensions that enable the debugger to automatically
-attach to all Chrome processes, so you can debug all of Chrome at once.
-Microsoft's [Child Process Debugging Power
-Tool](https://blogs.msdn.microsoft.com/devops/2014/11/24/introducing-the-child-process-debugging-power-tool)
-is a standalone extension for this, and
-[VsChromium](https://chromium.github.io/vs-chromium/) is another option that
-bundles many other additional features. In addition to installing one of these
-extensions, you **must** run Visual Studio as Administrator, or it will silently
-fail to attach to some of Chrome's child processes.
-
-### Single-process mode
-
-One way to debug issues is to run Chromium in single-process mode. This will
-allow you to see the entire state of the program without extra work (although it
-will still have many threads). To use single-process mode, add the command-line
-flag
-
-```
---single-process
-```
-
-This approach isn't perfect because some problems won't manifest themselves in
-this mode and some features don't work and worker threads are still spawned into
-new processes.
-
-### Manually attaching to a child process
-
-You can attach to the running child processes with the debugger. Select
-**Tools &gt; Attach to Process** and click the **chrome.exe** process you want
-to attach to. Before attaching, make sure you have selected only Native code
-when attaching to the process This is done by clicking Select... in the Attach
-to Process window and only checking Native. If you forget this, it may attempt
-to attach in "WebKit" mode to debug JavaScript, and you'll get an error message
-"An operation is not legal in the current state."
-
-You can now debug the two processes as if they were one. When you are
-debugging multiple processes, open the **Debug &gt; Windows &gt; Processes**
-window to switch between them.
-
-Sometimes you are debugging something that only happens on startup, and want
-to see the child process as soon as it starts. Use:
-
-```
---renderer-startup-dialog --no-sandbox
-```
-
-You have to disable the sandbox or the dialog box will be prohibited from
-showing. When the dialog appears, visit Tools &gt; Attach to Process and attach
-to the process showing the Renderer startup dialog. Now you're debugging in the
-renderer and can continue execution by pressing OK in the dialog.
-
-Startup dialogs also exist for other child process types:
-`--gpu-startup-dialog`, `--ppapi-startup-dialog`, `--utility-startup-dialog`,
-`--plugin-startup-dialog` (for NPAPI).
-
-For utilities, you can add a service type
-`--utility-startup-dialog=data_decoder.mojom.DataDecoderService`.
-
-You can also try [the vs-chromium
-plug-in](https://chromium.github.io/vs-chromium/#attach-to-chrome) to attach to
-the right processes.
-
-### Semi-automatically attaching the debugger to child processes
-
-The following flags cause child processes to wait for 60 seconds in a busy
-loop for a debugger to attach to the process. Once either condition is true, it
-continues on; no exception is thrown.
-
-```
---wait-for-debugger-children[=filter]
-```
-
-The filter, if provided, will fire only if it matches the `--type` parameter
-to the process. Values include `renderer`, `plugin` (for NPAPI), `ppapi`, `gpu-process`,
-and `utility`.
-
-When using this option, it may be helpful to limit the number of renderer
-processes spawned, using:
-
-```
---renderer-process-limit=1
-```
-
-### Image File Execution Options
-
-Using Image File Execution Options (IFEO) will not work because CreateProcess()
-returns the handle to the debugger process instead of the intended child
-process. There are also issues with the sandbox.
-
-## Time travel debugging
-
-You can do [time travel debugging using WinDbg
-Preview](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/time-travel-debugging-overview)
-(must be installed from the Microsoft Store). This lets you execute a program
-forward and backwards. After capturing a trace, you can set breakpoints and step
-through code as normal, but also provides 'backwards' commands (g-, t-, p-) so
-that you can go back and forth through the execution. It is especially useful to
-set data breakpoints ([ba
-command](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/ba--break-on-access-))
-and reverse continuing, so you can see when a certain variable was last changed
-to its current value.
-
-Chromium specifics:
-
-- The type of injection the time travel tracer needs to perform is incompatible
-with the Chromium sandbox. In order to record a trace, you'll need to run with
-`--no-sandbox`.
-
-- Chromium cannot run elevated with Administrator privileges, so the "Launch
-executable (advance)" option won't work, you'll need to attach after the process
-has already launched via the checkbox in the bottom right.
-
-- If you need to record startup-like things, you'll have to use
---{browser,gpu,renderer,utility}-startup-dialog, then attach (and hope the
-relevant code hasn't executed before that point).
-
-## JsDbg -- data structure visualization
-
-You can install [JsDbg as a plugin for WinDbg or Visual
-Studio](https://github.com/MicrosoftEdge/JsDbg). It interactively lets you look
-at data structures (such as the DOM tree, Accessibility tree, layout object
-tree, and others) in a web browser as you debug. See the [JsDbg
-site](https://github.com/MicrosoftEdge/JsDbg/blob/master/docs/FEATURES.md) for
-some screen shots and usage examples. This also works when examining memory
-dumps (though not minidumps), and also works together with time travel
-debugging.
-
-## Visual Studio hints
-
-### **Debug visualizers**
-
-Chrome's custom debug visualizers should be added to the pdb files and
-automatically picked up by Visual Studio. The definitions are in
-[//tools/win/DebugVisualizers](https://cs.chromium.org/chromium/src/tools/win/DebugVisualizers/)
-if you need to modify them (the BUILD.gn file there has additional
-instructions).
-
-### **Don't step into trivial functions**
-
-The debugger can be configured to automatically not step into functions based on
-regular expression. Edit `default.natstepfilter` in the following directory:
-
-* For Visual Studio 2015: `C:\Program Files (x86)\Microsoft Visual
- Studio 14.0\Common7\Packages\Debugger\Visualizers` (for all
- users)
- or `%USERPROFILE%\My Documents\Visual Studio 2015\Visualizers` (for the
- current user only)
-* For Visual Studio 2017 Pro: `C:\Program Files (x86)\Microsoft
- Visual
- Studio\2017\Professional\Common7\Packages\Debugger\Visualizers`
- (for all users)
- or `%USERPROFILE%\My Documents\Visual Studio 2017\Visualizers` (for the
- current user only)
-
-Add regular expressions of functions to not step into. Remember to regex-escape
-*and* XML-escape them, e.g. &lt; for &lt; and \\. for a literal dot. Example:
-
-```
-<Function><Name>operator new</Name><Action>NoStepInto</Action></Function>
-<Function><Name>operator delete</Name><Action>NoStepInto</Action></Function>
-<!-- Skip everything in std -->
-<Function><Name>std::.*</Name><Action>NoStepInto</Action></Function>
-<!-- all methods on WebKit OwnPtr and variants, ... WTF::*Ptr<*>::* -->
-<Function><Name>WTF::.*Ptr<.*>::.*</Name><Action>NoStepInto</Action></Function>
-```
-
-This file is read at start of a debugging session (F5), so you don't need to
-restart Visual Studio after changing it.
-
-More info: [Microsoft email
-thread](https://groups.google.com/group/microsoft.public.vsnet.debugging/msg/26addb1b539883e8)
-
-## V8 and Chromium
-
-V8 supports many command-line flags that are useful for debugging. V8
-command-line flags can be set via the Chromium command-line flag --js-flags; for
-instance:
-
-```
-chrome.exe --js-flags="--trace_exception --heap_stats"
-```
-
-Note that some V8 command-line flags exist only in the debug build of V8. For a
-list of all V8 flags try:
-
-```
-chrome.exe --js-flags="--help"
-```
-
-## Graphics debugging
-
-GPU Acceleration of rendering can be more easily debugged with tools. See:
-
-* [Graphics Debugging in Visual Studio
- 2013](/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013)
-* [Graphical debugging with NVIDIA
- NSight](/developers/design-documents/chromium-graphics/debugging-with-nsight)
-
-## Debugging on another machine
-
-Sometimes it's useful to debug installation and execution on a machine other
-than your primary build box. To run the installer on said other machine, first
-build the mini_installer target on your main build machine (e.g., ninja -C
-out\\Debug mini_installer). Next, on the debug machine:
-
-* Make the build machine's build volume available on the debug machine
- either by mounting it locally (e.g., Z:\\) or by crafting a UNC path
- to it (e.g., \\\\builder\\src)
-* Open up a command prompt and change to a local disk
-* Run
- src\\tools\\win\\[copy-installer.bat](https://code.google.com/p/chromium/codesearch#chromium/src/tools/win/copy-installer.bat)
- in the remote checkout by way of the mount (e.g.,
- Z:\\PATHTOCHECKOUT\\src\\...) or UNC path (e.g.,
- \\\\builder\\src\\...). This will copy the installer, DLLs, and PDBs
- into your debug machine's C:\\out or C:\\build (depending on if
- you're rocking the component=shared_library build or not)
-* Run `C:\out\Debug\mini_installer.exe` with the flags of your choice
- to install Chrome. This can take some time, especially on a slow
- machine. Watch the Task Manager and wait until mini_installer.exe
- exits before trying to launch Chrome (by way of the shortcut(s)
- created by the installer)
-* For extra pleasure, add C:\\out\\Debug to your _NT_SYMBOL_PATH
- environment variable
-
-Consider reading the documentation at the top of copy-installer.bat to see how
-you can run it. It tries to be smart and copy the right things, but you may need
-to be explicit (e.g., "copy-installer.bat out Debug"). It is safe to re-run the
-script to copy only modified files (after a rebuild, for example).
-
-You can also use the zip action of the isolate scripts (tools\\mb\\mb.py) to
-package all the files for a target into a single zip file, for example:
-
-```
-python tools\mb\mb.py zip out/Release base_unittests base_unittests.zip
-```
-
-## Finding all memory allocations
-
-It is possible to use Heap Snapshots to get call stacks on all outstanding
-allocations that use the OS heap. This works particularly well if heap snapshots
-are started as soon as the Chrome browser process is created, but before it
-starts running. Details can be found in
-[this batch file](https://github.com/google/UIforETW/blob/master/bin/etwheapsnapshot.bat).
-However, with [PartitionAlloc Everywhere](https://blog.chromium.org/2021/04/efficient-and-safe-allocations-everywhere.html)
-most Chromium allocations no longer use the Windows heap so this will only find
-a subset of allocations, mostly from OS DLLs.
-
-## Find memory leaks
-
-Note: as with Heap Snapshots the utility of UMDH is greatly reduced now because
-PartitionAlloc Everywhere has mostly replaced the Windows heap.
-
-The Windows heap manager has a really useful debug flag, where it can be asked
-to capture and store a stack trace with every allocation. The tool to scrape
-these stack traces out of processes is UMDH, which comes with
-[WinDbg](/developers/how-tos/debugging-on-windows/windbg-help).
-
-UMDH is great. It will capture a snapshot of the heap state as many times as you
-like, and it'll do it fairly quickly. You then run it again against either a
-single snapshot, or a pair of snapshots, at which time it'll symbolize the stack
-traces and aggregate usage up to unique stack traces.
-
-Turning on the user stack trace database for chrome.exe with gflags.exe makes it
-run unbearably slowly; however, turning on the user stack trace database on for
-the browser alone is just fine.
-
-While it's possible to turn on the user stack database with the "!gflag"
-debugging extension, it's too late to do this by the time the initial debugger
-breakpoint hits. The only reasonable way to do this is to
-
-1. Launch GFlags.exe,
-2. Enable the user stack trace database (per image below),
-3. Launch Chrome under the debugger.
-4. Set a breakpont when chrome.dll loads with "sxe ld chrome.dll".
-5. Step up, to allow Chrome.dll to initialize.
-6. Disable the stack trace database in GFlags.exe.
-7. Continue chrome, optionally detaching the debugger.
-
-[<img alt="image"
-src="/developers/how-tos/debugging-on-windows/gflags.png">](/developers/how-tos/debugging-on-windows/gflags.png)
-
-GFlags.exe settings for user mode stack trace database.
-
-If you then ever suffer a browser memory leak, you can snarf a dump of the
-process with
-
-```
-umdh -p:<my browser pid> > chrome-browser-leak-umdh-dump.txt
-```
-
-which can then typically be "trivially" analyzed to find the culprit.
-
-## Miscellaneous
-
-Note that by default Application Verifier only works with non-official builds of
-Chromium. To use Application Verifier on official builds you need to add
---disable-features=RendererCodeIntegrity to avoid sandbox crashes in renderer
-processes. See [crbug.com/1004989](https://crbug.com/1004989) for details. See
-also [this page](/developers/testing/page-heap-for-chrome).
-
-* [Application
- Verifier](https://randomascii.wordpress.com/2011/12/07/increased-reliability-through-more-crashes/)
- is a free tool from Microsoft (available as part of the Windows SDK)
- that can be used to flush out programming errors. Starting with M68
- Application Verifier can be enabled for chrome.exe without needing
- to disable the sandbox. After adding chrome.exe to the list of
- applications to be stressed you need to expand the list of Basics
- checks and disable the *Leak* checks. You may also need to disable
- *Handles* and *Locks* checks depending on your graphics driver and
- specific Chrome version, but the eventual goal is to have Chrome run
- with *Handles* and *Locks* checks enabled. When bugs are found
- Chrome will trigger a breakpoint so running all Chrome processes
- under a debugger is recommended. Chrome will run much more slowly
- because Application Verifier puts every heap allocation on a
- separate page. Note that with PartitionAlloc Everywhere most
- Chromium allocations don't actually go through the Windows heap
- and are therefore unaffected by Application Verifier.
-* You can check the undocumented 'Cuzz' checkbox in Application
- Verifier to get the Windows thread scheduler to add some extra
- randomness in order to help expose race conditions in your code.
-
-* To put a breakpoint on CreateFile(), add this break point:
-{,,kernel32.dll}_CreateFileW@28
- * {,,kernel32.dll} specifies the DLL (context operator).
- * _ prefix means extern "C".
- * @28 postfix means _stdcall with the stack pop at the end of the
- function. i.e. the number of arguments in BYTES.
-* You can use [DebugView
- ](https://docs.microsoft.com/en-us/sysinternals/downloads/debugview)from
- SysInternals or
- [sawbuck](https://github.com/google/sawbuck/releases/latest) to view
- LOG() messages that normally go to stderr on POSIX.
diff --git a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/windbg-help/index.md b/chromium/docs/website/site/developers/how-tos/debugging-on-windows/windbg-help/index.md
deleted file mode 100644
index 193d66f05ea..00000000000
--- a/chromium/docs/website/site/developers/how-tos/debugging-on-windows/windbg-help/index.md
+++ /dev/null
@@ -1,249 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/debugging-on-windows
- - Debugging Chromium on Windows
-page_name: windbg-help
-title: WinDBG help
----
-
-[WinDBG](http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx) is a
-great, free tool. It is more powerful than Visual Studio's built-in debugger,
-but is harder to use (kind of like gdb on Linux). You can retrieve the [latest
-version](http://msdn.microsoft.com/en-us/windows/hardware/hh852365) from
-Microsoft's web site. You should end up with two versions of the tool: the
-32-bit debugger and the 64-bit debugger. If you already have it installed or if
-you are using the packaged Chromium toolchain (which includes windbg) then you
-can launch it using tools\\win\\windbg32.bat or tools\\win\\windbg64.bat. These
-batch files find and run the appropriate version, wherever it is.
-
-### Initial setup
-
-Once you're started, you may wish to fix a few things. If you have run WinDbg
-before and saved any workspaces, you may wish to start with a clean slate by
-deleting the key HKCU\\Software\\Microsoft\\Windbg using your favorite registry
-editor.
-
-1. Set the environment variable **_NT_SYMBOL_PATH**, as per [Symbol
- path for Windows
- debuggers](https://msdn.microsoft.com/library/windows/hardware/ff558829.aspx#controlling_the_symbol_path)
- (e.g., File -&gt; Symbol Search Path), to:
- https://chromium-browser-symsrv.commondatastorage.googleapis.com****SRV\*c:\\code\\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*c:\\code\\symbols\*
-2. Configure WinDbg to use a sensible window layout by navigating
- explorer to "**C:\\Program Files (x86)\\Windows
- Kits\\10\\Debuggers\\x64\\themes**" and double-clicking on
- **standard.reg**.
-3. Launch **windbg.exe** and:
- 1. In the menu *File,* *Source File Path...*, set the path to
- **srv\***.
- * If you have a local checkout of the source, you can just
- point *Source Path* to the root of your code (src). Multiple
- paths are separated by semicolons.
- * If you want to download the individual source files to a
- given directory, add the destination to the path like so:
- **srv\*c:\\path\\to\\downloaded\\sources;c:\\my\\checkout\\src**
- 2. In the menu *View*, *Source language file extensions*..., add
- **cc=C++** to have automatic source colors.
- 3. Optionally, customize the window layout as desired via the
- *View* menu, and dock the windows as you want them to be. Note
- that the UI allows multiple "Docks" and each Dock can have
- multiple tiled panels in it, and each panel can have multiple
- tabbed windows. You may want to have source files to be tabbed
- on the same panel, and visible at the same time as local
- variables and the stack and command windows. It is useful to
- realize that by default windbg creates a workspace per debugged
- executable or minidump, so each target can have its own
- configuration. The "default" workspace is applied to new
- targets.
- 4. Optionally, run additional customization commands such as:
- 1. **.asm no_code_bytes**
- * disables display of opcodes
- 2. **.prompt_allow -sym -dis -ea -reg -src**
- * Disables display of symbol for the current instruction,
- disassembled instructions, effective address of current
- instruction, current state of registers and source line
- for the current instruction
- 3. **.srcfix**
- * Enables source server. This tells the debugger to use
- information in the Chrome PDBs to download the correct
- version of all necessary source files.
- 5. Use *File, Save Workspace* to make this new configuration the
- default for all future execution.
- 6. Exit windbg.
-4. In Windows Explorer, associate **.dmp** extension with windbg.exe.
- You may have to manually add -z to the open command like so:
- **"...\\windbg.exe" -z "%1"** to make this work properly.
- Alternatively, run **windbg.exe -IA**
-5. Register as the default just in time debugger: **windbg.exe -I**
-
-**To set your symbol and source environment variables permanently, you can run
-the following commands:**
-
-**setx _NT_SYMBOL_PATH
-SRV\*c:\\code\\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*c:\\code\\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com**
-
-**setx _NT_SOURCE_PATH SRV\*c:\\code\\source;c:\\my\\checkout\\src**
-
-### Common commands
-
-* **dt this-&gt;member_**
- * Displays the data
-
-* **x chrome\*!\*function_name**
- * Finds a symbol.
-
-* **.open -a \[symbol address or complete symbol name found by using
- x\]**
- * Opens the source file containing the specified symbol. Pretty
- neat.
-* **k**
- * Displays the stack.
- * **kP**: Show all parameters.
- * **kM**: Show links to each stack frame.
- * Clicking on the links shifts into the other stack frame,
- allowing you to browse locals, etc.
-
-* **?? \[data name\]**
- * Quick evaluation of a C++ symbol (local variable, etc). You
- don't need to specify this-&gt; for member variables but it's
- slower if you don't.
-
-* **dv \[/V\]**
- * Displays local variables
-* **dt varname**
- * Displays a variable.
-
-* **dd address**
- * Displays the contents of memory at the given address (as
- doubles... **dc, dw, dq** etc)
-
-* **dt -r1 type address**
- * Displays an object of the given type stored at the given
- address, using 1 level of recursion.
-* **uf symbol**
- * Disassembles a function showing source line number.
-
-* **!stl**
- * Displays some stl structures (visualizer)
-
-* **dt -n &lt;type&gt;**
- * Displays a type forcing the name to the supplied type (when
- there are problematic characters in the name)
-
-* **~\*n**
- * Freezes all threads
-
-* **~4m**
- * Thaws thread number 4
-
-* **Ctrl-Shift-I**
- * Sets the selected source line to be the next line to be executed
-
-* **F5, Ctrl-Shift-F5, F9, F10, F11**
- * Run, restart, toggle breakpoint, step over, step into.
-
-One of the major benefits of WinDBG for debugging Chromium is its ability to
-automatically debug child processes. This allows you to skip all the complicated
-instructions above. The easiest way to enable this is to check "*Debug child
-processes also*" in the "*Open Executable*" dialog box when you start debugging
-or start "**windbg.exe -o**". **NOTE that on 64-bit Windows you may need to use
-the [64-bit
-WinDbg](http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx) for
-this to work.** You can switch dynamically the setting on and off at will with
-the **.childdbg 1|0** command, to follow a particular renderer creation. You can
-also attach to a running process (**F6**) and even detach without crashing the
-process (**.detach**)
-
-### **Common commands when working with a crash**
-
-* **!analyze -v**
- * Displays a basic crash analysis report.
-
-* **.ecxr**
- * Switch the context to the exception record.
-
-* **dds address**
- * Displays symbols following address (as in a stack or vtable)
-
-* **k = address address address**
- * Rebuilds a call stack assuming that address is a valid stack
- frame.
-
-* **lm vmchr\***
- * Lists verbose information about all modules with a name that
- starts with ch
-
-* **ln address**
- * Lists all symbols that match a given address (dedups a symbol).
-
-* **.load wow64exts**
- * On a 64-bit debugger, load the 32-bit extensions so that the
- current architecture can be switched
-
-* **.effmach x86**
- * Switches the current architecture to 32-bit.
-
-* **.effmach x86; k = @ebp @ebp @ebp**
- * Shows the 32-bit call stack from a 64-bit dump
-
-For more info, see [this example of working with a crash
-dump](/developers/how-tos/debugging-on-windows/example-of-working-with-a-dump),
-consult the program help (really, it's exhaustive!), see [Common windbg
-commands](http://windbg.info/doc/1-common-cmds.html) or use your favorite search
-engine.
-
-### **Random handy hints**
-
-To set attach to child processes, and also skip the first breakpoint and the
-extra breakpoint on process exit (this gives you a pretty responsive Chrome you
-can debug):
-
-**sxn ibp**
-
-**sxn epr**
-
-**.childdbg 1**
-
-**g**
-
-You can also get this effect by using the -g -G -o options when launching
-windbg, as in:
-
-**windbg -g -G -o chrome.exe**
-
-To automatically attach to processes you want to run over and over with complex
-command lines, just attach WinDBG to your command prompt and then **.childdbg
-1** the command prompt - any processes launched from there will automatically be
-debugged. H/T pennymac@
-
-To set a breakpoint in the current process you can use this module/function
-syntax, among others:
-
-**bp msvcrt!invalid_parameter**
-
-To apply this to future processes that are created (assuming child process
-debugging is enabled) you can use this syntax, which says to run the bp command
-whenever a new process is created:
-
-**sxe -c "bp msvcrt!invalid_parameter" cpr**
-
-If you want a chance to do this when you first launch the browser process then
-you need to launch it without -g (so that the first breakpoint will be hit). You
-will probably then want to disable the "Create process" breakpoint and "Initial
-breakpoint" with these commands:
-
-**sxn ibp; sxn epr;**
-
-These are equivalent to going to Debug-&gt; Event Filters and setting "Create
-process" and "Initial breakpoint" to "Ignore".
-
-Always use **--user-data-dir** when starting Chrome built with
-**branding=Chrome** or else you're going to have a bad time.
-
-### Resources
-
-* [Extensive slide deck](http://windbg.info/doc/2-windbg-a-z.html)
- \[windbg.info\] \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/depottools/gclient/index.md b/chromium/docs/website/site/developers/how-tos/depottools/gclient/index.md
deleted file mode 100644
index d1eec12e46f..00000000000
--- a/chromium/docs/website/site/developers/how-tos/depottools/gclient/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/depottools
- - Using depot_tools
-page_name: gclient
-title: gclient
----
-
-See [depot_tools](/developers/how-tos/depottools). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/depottools/index.md b/chromium/docs/website/site/developers/how-tos/depottools/index.md
deleted file mode 100644
index 05ab321cec9..00000000000
--- a/chromium/docs/website/site/developers/how-tos/depottools/index.md
+++ /dev/null
@@ -1,196 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: depottools
-title: Using depot_tools
----
-
-[TOC]
-
-View the [**updated depot_tools documentation**
-here.](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html)
-These same docs are also available as man pages.
-Not all the information on this page has been migrated to the man pages yet, so
-this resource will stay around for a while, but where there are discrepancies,
-the man pages should be considered authoritative.
-
-The [depot_tools
-tutorial](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html)
-walks through a few key scenarios like managing branches.
-
-## Introduction
-
-Chromium uses a package of scripts, the depot_tools, to manage interaction with
-the Chromium source code repository and the Chromium development process. It
-contains the following utilities:
-
-* gclient: Meta-checkout tool managing both subversion and git
- checkouts. It is similar to [repo
- tool](https://gerrit.googlesource.com/git-repo) except that it works
- on Linux, OS X, and Windows and supports both svn and git. On the
- other hand, gclient doesn't integrate any code review functionality.
-* **gcl**: [Rietveld](https://github.com/rietveld-codereview/rietveld)
- code review tool for *subversion*. The gcl tool runs [presubmit
- scripts](/developers/how-tos/depottools/presubmit-scripts).
-* **git-cl**:
- [Rietveld](https://github.com/rietveld-codereview/rietveld) code
- review tool for *git*. The git-cl tool runs [presubmit
- scripts](/developers/how-tos/depottools/presubmit-scripts).
-* **svn** \[Windows only\]: [subversion
- client](https://subversion.apache.org/) for Chromium development.
- (Executable Subversion binaries are included in the depot_tools on
- Windows systems as a convenience, so that working with Chromium
- source code does not require a separate Subversion download.)
-* **drover**: Quickly revert svn commits.
-* **cpplint.py**: Checks for C++ style compliance.
-* **pylint**: Checks for Python style compliance.
-* **presubmit_support.py**: Runs PRESUBMIT.py presubmit checks.
-* **repo**: The repo tool.
-* **wtf**: Displays the active git branches in a chromium os checkout.
-* **weekly**: Displays the log of checkins for a particular developer
- since a particular date for git checkouts.
-* **git-gs**: Wrapper for git grep with relevant source types.
-* **zsh-goodies**: Completion for zsh users.
-
-It is highly encouraged to look around and open the files in a text editor as
-this page can quickly become outdated.
-
-Please keep ~~this page~~ the man pages updated!
-
-## Installing
-
-See the
-[depot_tools_tutorial](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up)
-for set-up instructions.
-
-## Help!
-
-These tools don't have man pages but have integrated help! Try all of these
-commands! If the doc is not adequate, send patches to fix them.
-
-* gclient help
- * It works for subcommands too like: gclient help sync
-* git-cl help
- * It works for subcommands too like: git-cl help patch
-
-Otherwise, there are
-[many](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/app_notepad.mspx?mfr=true)
-[great](https://www.vim.org/) [text](https://www.gnu.org/software/emacs/)
-[editors](https://notepad-plus-plus.org/) that can help you out to read what the
-tools are actually doing.
-
-## gclient
-
-`gclient` is a python script to manage a workspace of modular dependencies that
-are each checked out independently from different subversion or git
-repositories. Features are:
-
-* Dependencies can be specified on a per-OS basis.
-* Dependencies can be specified relative to their parent dependency.
-* Variables can be used to abstract concepts.
-* Hooks can be specified to be run after a checkout.
-* .gclient and DEPS are python scripts, you can hack in easily or add
- additional configuration data.
-
-### .gclient file
-
-It's the primary file. It is, in fact, a python script. It specifies the
-following variables:
-
-* **solutions**: an array of dictionaries specifying the projects that
- will be fetched.
-* **hooks**: additional hooks to be run when this meta checkout is
- synced.
-* **target_os**: an optional array of (target) operating systems to
- fetch OS-specific dependencies for.
-* **cache_dir**: Primarily for bots, multiple working sets use a
- single git cache. See [gclient.py
- --cache-dir](https://code.google.com/p/chromium/codesearch#chromium/tools/depot_tools/gclient.py&sq=package:chromium&type=cs&q=%22parser.add_option('--cache-dir'%22&l=1865).
-
-Additional variables are ignored.
-
-Each project described in the solutions array can contain an optional DEPS file
-that will be processed. The .gclient file is generated with `gclient config
-<url>` or by hand. Each solutions entry is a dictionary that can contain the
-following variables:
-
-* **name**: really, the path of the checkout.
-* **url**: the remote repository to fetch/clone.
-* **custom_deps**: (optional) override the dependencies specified in
- the deps and deps_os variables in child DEPS files. Useful when you
- want to fetch a writable checkout instead of the default read-only
- checkout of a dependency, e.g. you work on native_client from a
- chromium checkout.
-* **custom_vars**: (optional) override the variables defined in vars
- in child DEPS files. Example: override the WebKit version used for a
- chromium checkout.
-* **safesync_url**: (optional) url to fetch to retrieve the revision
- to sync this checkout to.
-
-### DEPS file
-
-A DEPS file specifies dependencies of a project. It is in fact a python script.
-It specifies the following variables:
-
-* **deps**: a dictionary of child dependencies to fetch.
-* **deps_os**: a dictionary of OSes for OS-specific dependencies, each
- containing a dictionary of child dependencies to fetch.
-* **vars**: a dictionary of variables to define. Mainly useful to
- easily override a batch of revisions at once.
-* **hooks**: hooks to run after a sync.
-* **use_relative_paths**: relative paths should specify the checkout
- relative to this directory instead of the root gclient checkout.
-
-Additional variables are ignored. Special keywords are:
-
-* **File()**: used for dependencies, specify to expect to checkout a
- file instead of a directory.
-* **From()**: used to fetch a dependency definition from another DEPS
- file, for chaining.
-* **Var()**: replace this string with a variable defined in vars or
- overridden.
-
-### Pinned deps
-
-Each dependency checkout URL can (and usually does) contain a revision number or
-git hash, which means you're going to check out and build from that specific
-revision of the module in question. We call that **pinned deps**. The advantage
-is that you can build from a known working revision, even if it comes from a
-completely different SCM repository or going back in time. The drawback is you
-have to update the revision number(s) constantly, what we call **deps rolls**.
-
-### DEPS examples
-
-Chromium's
-[src/DEPS](https://chromium.googlesource.com/chromium/src/+/HEAD/DEPS) is a
-fairly complex example that will show all the possibilities of a DEPS file.
-
-## Sending patches
-
-[Contributing code](/developers/contributing-code) is done the same way as in
-other Chromium repositories.
-
-## Disabling auto update
-
-The `gclient` and `git-cl` scripts are actually wrapper scripts that will, by
-default, always update the `depot_tools` to the latest versions of the tools
-checked in at
-<https://chromium.googlesource.com/chromium/tools/depot_tools.git>. If for some
-reason you wish to disable this auto-update behavior, either:
-
-* Set the environment variable `DEPOT_TOOLS_UPDATE=0`.
-* Remove `depot_tools/.git`. This may be appropriate if you choose to
- install depot_tools in a common location for use by multiple users
- (for example, `/usr/local/bin` on a Linux system).
-
-Note: If you aren't using either of these helper scripts (e.g. you're developing
-Chromium OS), then you will need to manually update depot_tools yourself from
-time to time with a simple: git pull
-
-### Caveat
-
-Chromium engineers expect the auto-updating behavior of depot_tools, checkout or
-presubmit breakage may ensue. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/depottools/presubmit-scripts/index.md b/chromium/docs/website/site/developers/how-tos/depottools/presubmit-scripts/index.md
deleted file mode 100644
index 8c4c3c8b343..00000000000
--- a/chromium/docs/website/site/developers/how-tos/depottools/presubmit-scripts/index.md
+++ /dev/null
@@ -1,275 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/depottools
- - Using depot_tools
-page_name: presubmit-scripts
-title: Presubmit Scripts
----
-
-[TOC]
-
-### Overview
-
-`gcl` and `git-cl` will check for and run presubmit scripts before you upload
-and/or commit your changes. Presubmit scripts are a way of applying automatic
-verification to your changes before they are reviewed and/or before they are
-committed.
-
-Presubmit scripts can perform automated checks on the files in your change and
-the description of your change, and either fail your attempt to upload or
-commit, show a warning that you must acknowledge before uploading/committing, or
-simply show an informational message as part of the output of `gcl`.
-
-Examples of things presubmit scripts may be useful for include:
-
-* Ensuring your change is linked to a bug via a BUG= line.
-* Ensuring you have run
- [cpplint.py](http://src.chromium.org/viewvc/chrome/trunk/tools/depot_tools/cpplint.py?view=markup)
- or automatically running cpplint for you.
-* Enforcing coding conventions.
-* Preventing you from breaking dependency rules e.g. by including a
- header that code in your directory is not supposed to depend upon.
-* Warning you if you haven't built your client and/or run unit tests
- within the last X hours.
-
-Generally you want the same tests for upload and committing, but there are
-exceptions.
-
-Firstly, the commit bot can autofix various problems, so these problems only
-need to be checked on commit (to check that they have been fixed), not on upload
-(another good reason to use the commit queue!). Secondly, you can skip slow
-tests on upload and only run them on commit, if running these every time slows
-development too much, but this can result in problems only being caught at the
-last minute, and thus requiring last-minute changes after you think they're good
-to go.
-
-### Bypassing tests
-
-To skip the scripts on upload, use the `--bypass-hooks` flag, as in:
-
-```none
-git cl upload --bypass-hooks
-```
-
-To skip the scripts on commit, use --bypass-hooks and [directly
-commit](/developers/contributing-code/direct-commit) your change.
-
-You should only do these if necessary, as the presubmit scripts are there for a
-reason, but they're not perfect.
-
-If you have trouble with a presubmit script, it's preferable to *fix it,* rather
-than simply bypassing it. See [depot_tools: sending
-patches](http://www.chromium.org/developers/how-tos/depottools#TOC-Sending-patches)
-for how to contribute.
-
-### Design
-
-When you run `gcl upload` or `gcl commit`, `gcl` will look for all files named
-`PRESUBMIT.py` in folders enclosing the files in your change, up to the
-repository root.
-
-For each such file, it will load the file into the Python interpreter and then
-call either the `CheckChangeOnUpload` or `CheckChangeOnCommit` function
-depending on whether you are calling \[gcl upload\] or \[gcl commit\].
-
-The same applies to `git-cl upload`, `git-cl dcommit` and `git-cl push`.
-
-Please note that presubmit scripts are a best-effort kind of thing; they do not
-prevent users from submitting without running the scripts, since one can always
-dcommit, and in fact there is a --bypass-hooks (formerly `--no_presubmit`) flag
-to gcl that skips presubmit checks. Further, since they use the local copy of
-the `PRESUBMIT.py` files, users must sync their repos before the latest
-presubmit checks will run when they upload or submit.
-
-More subtly, presubmit scripts do not guarantee invariants: even if presubmit
-scripts pass prior to submission to CQ, once all changes land, the scripts may
-fail! This is because 2 changes may individually pass the tests, and the patches
-both apply cleanly together, but the combined change does not pass tests. Since
-presubmit/precommit scripts run at upload or at start of CQ steps, if two such
-changes are in the CQ at the same time, they can both pass, both be enqueued,
-and both land, at which point the tests start failing. A common example is
-change 1 adding a new test, and change 2 changing existing tests. After they
-both land, there is a new test in the old style (from change 1), which is out of
-sync with the new tests (from change 2).
-
-### Writing tests
-
-To create a new test, either create a new PRESUBMIT.py script or edit an
-existing one, adding a new function for your test.
-
-To check your changes, first commit locally (else `git-cl` will complain about
-the dirty tree), then:
-
-To test the upload checks (i.e., to run `CheckChangeOnUpload`):
-
-```none
-git cl presubmit --upload
-```
-
-To test the submit checks (i.e., to run `CheckChangeOnCommit`):
-
-```none
-git cl presubmit
-```
-
-The functions must match these method signatures. You do not need to define both
-functions if you're only interested in one type of event, and if you want to run
-the same tests in both events, just have them both call a single underlying
-function:
-
-```none
-def CheckChangeOnUpload(input_api, output_api):
-    pass
-def CheckChangeOnCommit(input_api, output_api):
-    pass
-```
-
-The `input_api` parameter is an object through which you can get information
-about the change. Using the `output_api` you can create result objects.
-
-Both `CheckChangeOnXXX` functions must return a list or tuple of result objects,
-or an empty list or tuple if there is nothing to report. The types of result
-objects you may use are `output_api.PresubmitError` (a critical error),
-`output_api.PresubmitPromptWarning` (a warning the user must acknowledge before
-the command will continue) and `output_api.PresubmitNotifyResult` (a message
-that should be shown). Each takes a message parameter, and optional "items" and
-"long_text" parameters.
-
-#### **Version 2**
-
-Presubmit version 2 reduces some of the overhead of managing which checks are
-executed on upload and/or submit. To enable presubmit version 2, in the global
-scope of your presubmit script, define:
-
-```none
-PRESUBMIT_VERSION = '2.0.0'
-```
-
-In presubmit version 2, you are not required to use `CheckChangeOnUpload` and
-`CheckChangeOnCommit` as your entry points. Any function that begins with the
-prefix `Check` will be executed, receiving `input_api` and `output_api` as its
-parameters. `CheckXXX` functions that end in `Upload` will only be executed on
-upload and `CheckXXX` functions that end in `Commit` will only be executed on
-commit. `CheckXXX` functions that do not end in either suffix will be executed
-at both upload and commit. The format of return values of `CheckChangeOnXXX`
-functions is the same as for `CheckChangeOnUpload/CheckChangeOnCommit. This
-makes existing presubmit scripts backwards compatible with presubmit version 2
-provided there are no functions in the global scope of the script` that begin
-with `Check`.
-
-#### InputApi
-
-The `input_api` parameter is an object of type `presubmit.InputApi`; see [`class
-InputApi`](https://source.chromium.org/chromium/chromium/tools/depot_tools/+/main:presubmit_support.py?q=file:presubmit_support.py%20%22class%20InputApi%22)
-in
-[`presubmit_support.py`](https://source.chromium.org/chromium/chromium/tools/depot_tools/+/main:presubmit_support.py)
-for implementation.
-
-This object can be used to transform from local to repository paths and vice
-versa, and to get information on the files in the change that are contained in
-the same directory as your `PRESUBMIT.py` file or subdirectories thereof.
-
-The `input_api.change` object represents the change itself. Using this object
-you can retrieve the description of the change, any key-value pairs in the
-description (e.g. BUG=123), and details on all of the files in the change (not
-just the ones contained by the directory your `PRESUBMIT.py` file resides in).
-
-An `input_api.canned_checks` object contains a set of ready-made checks that you
-can easily add to your presubmit script.
-
-The `os/os.path` module is available as `input_api.os_path`, so you do not need
-to import this yourself.
-
-Files in the API are represented by an `AffectedFile` object through which you
-can query the `LocalPath()`, `ServerPath()`, and the `Action()` being performed
-('A', 'M' or 'D').
-
-The `input_api.is_committing` attribute indicates whether the CL is being
-committed or just uploaded. This is particularly useful if you wish the same
-test to be run for both upload and committing, but with different behavior. A
-common pattern is to prompt a warning on upload, but an error on committing,
-which allows a CL to be uploaded and reviewed even if the test fails, but not
-committed (without dcommit). This can be done as follows:
-
-```none
-if input_api.is_committing:
-  message_type = output_api.PresubmitError
-else:
-  message_type = output_api.PresubmitPromptWarning
-```
-
-### Caveats
-
-It is possible to run arbitrary Python code in the presubmit scripts. To avoid
-side effects and hard-to-debug errors, it is safest to run tests in
-subprocesses. The InputApi object provides various facilities to assist with
-this; see example below.
-
-Please note that you should not use any functions or attributes on the API
-objects that begin with an underscore (_) as these are private functions that
-may change, whereas all public functions will be retained through future
-versions of the API.
-
-### Details and Example
-
-The most detailed documentation for the presubmit API is in its [implementation
-code](https://cs.chromium.org/chromium/tools/depot_tools/presubmit_support.py).
-
-The [canned
-checks](https://source.chromium.org/chromium/chromium/tools/depot_tools/+/main:presubmit_canned_checks.py)
-are good examples of what you can do with the presubmit API.
-
-An example simple file might be as follows:
-
-```none
-def CheckChange(input_api, output_api):
-    results = []
-    results += input_api.canned_checks.CheckDoNotSubmit(input_api, output_api)
-    results += input_api.canned_checks.CheckChangeHasNoTabs(input_api, output_api)
-    results += input_api.canned_checks.CheckLongLines(input_api, output_api)
-    # Require a BUG= line and a HOW_TO_TEST= line.
-    if not input_api.change.BUG or not input_api.change.HOW_TO_TEST:
-        results += [output_api.PresubmitError(
-            'Must provide a BUG= line and a HOW_TO_TEST line.')]
-    return results
-def CheckChangeOnUpload(input_api, output_api):
-    return CheckChange(input_api, output_api)
-def CheckChangeOnCommit(input_api, output_api):
-    return CheckChange(input_api, output_api)
-```
-
-A simple example of a custom command (call from `CheckChangeOnUpload` or
-`CheckChangeOnCommit`) is:
-
-```none
-def MyTest(input_api, output_api):
-  test_path = input_api.os_path.join(input_api.PresubmitLocalPath(), 'my_test.py')
-  cmd_name = 'my_test'
-  if input_api.platform == 'win32':
-    # Windows needs some help.
-    cmd = [input_api.python_executable, test_path]
-  else:
-    cmd = [test_path]
-  test_cmd = input_api.Command(
-    name=cmd_name,
-    cmd=cmd,
-    kwargs={},
-    message=output_api.PresubmitPromptWarning)
-  if input_api.verbose:
-    print('Running ' + cmd_name)
-  return input_api.RunTests([test_cmd])
-```
-
-You can look at existing scripts for examples ([search:
-PRESUBMIT.py](https://code.google.com/p/chromium/codesearch#search/&q=file:PRESUBMIT.py&sq=package:chromium&type=cs)).
-[Chromium's
-PRESUBMIT.py](http://src.chromium.org/viewvc/chrome/trunk/src/PRESUBMIT.py?view=markup)
-and [Chromium-os
-PRESUBMIT.py](http://src.chromium.org/cgi-bin/gitweb.cgi?p=chromium.git;a=blob;f=PRESUBMIT.py;hb=HEAD)
-are detailed examples, while the [Blink bindings
-PRESUBMIT.py](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/PRESUBMIT.py)
-is a very simple example. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/drover/1.png.sha1 b/chromium/docs/website/site/developers/how-tos/drover/1.png.sha1
deleted file mode 100644
index 6dadca50408..00000000000
--- a/chromium/docs/website/site/developers/how-tos/drover/1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b80d75ad2767ef59e3979eb9f36c8dcf24073f4d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/drover/2.png.sha1 b/chromium/docs/website/site/developers/how-tos/drover/2.png.sha1
deleted file mode 100644
index 03eaa6ee837..00000000000
--- a/chromium/docs/website/site/developers/how-tos/drover/2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-df03142b1df18425233a26fc17473f24c646c0e0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/drover/index.md b/chromium/docs/website/site/developers/how-tos/drover/index.md
deleted file mode 100644
index 4c2f883b640..00000000000
--- a/chromium/docs/website/site/developers/how-tos/drover/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: drover
-title: How to merge a change to a release branch
----
-
-## This page has been deprecated, see [here](https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main/docs/process/merge_request.md#Landing-an-approved-merge) instead. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/editing-the-spell-checking-dictionaries/index.md b/chromium/docs/website/site/developers/how-tos/editing-the-spell-checking-dictionaries/index.md
deleted file mode 100644
index 3904365002e..00000000000
--- a/chromium/docs/website/site/developers/how-tos/editing-the-spell-checking-dictionaries/index.md
+++ /dev/null
@@ -1,163 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: editing-the-spell-checking-dictionaries
-title: Editing the spell checking dictionaries
----
-
-Each hunspell dictionary comes in two files. The .dic file which is the list of
-words, and the .aff file which is a list of rules and other options. When adding
-new words to existing dictionaries, you should only add to the .dic_delta file,
-but you may need to refer to the .aff file for several things. The .dic files
-are overwritten when dictionaries are updated, so they should not be modified.
-
-We maintain some additions to the dictionary files which we keep in a separate
-file ending in .dic_delta. Keeping the original unchanged allows us to more
-easily pull updated versions from the [dictionary
-maintainers](http://lingucomponent.openoffice.org/). Chromium actually reads an
-optimized format which uses the suffix .bdic. This file is generated from the
-.aff, .dic, and .dic_delta files using the convert_dict tool in the Chromium
-project. All of these files are checked into
-[deps/third_party/hunspell_dictionaries/](http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/hunspell_dictionaries/)
-in Subversion, and checked out into src/third_party/hunspell_dictionaries when
-syncing locally.
-
-#### Encoding issues
-
-The .dic and .aff files are normally in the encoding most appropriate for that
-language, which is unfortunately not usually UTF-8. You will need to open the
-files in an editor with that encoding enabled. Most of the Western European
-languages use Latin1 which should be easy. For other ones, search in the .aff
-file for the line that begins with "SET" to see which character set it uses.
-
-The .dic_delta files are always in UTF-8! This is confusing, but it allows us to
-additional flexibility to add foreign words. The .bdic files are always UTF-8
-internally, and the convert_dict tool converts things appropriately when it
-runs.
-
-## To help
-
-Our .dic_delta files do not generally have affix rules. These rules tell
-Hunspell, for example, how to convert a word into its plural or possessive
-forms. The rest of this document explains how to do this.
-
-The easiest way to get started is to find a word in the .dic file that is like
-the word you're looking at in the .dic_delta file, and copy the rules. For
-example, en_US.dic contains the entry cat/SM. If you want to add the word
-"raccoon" and all of its variants to the dictionary, then add raccoon/SM to
-en_US.dic_delta.
-
-If the .dic files contains incorrect rules for a word, then add the word with
-the correct rules to .dic_delta. For example, if en_US.dic contains the entry
-raccoon/M, but the rule should be /MS, then add raccoon/MS to en_US.dic_delta.
-Rules for entries in .dic_delta override the rules for entries in .dic.
-
-You can also help by reviewing word lists of words we've identified as popular
-but not in the dictionary. Please contact brettw AT chromium.org if you are
-interested.
-
-## Full details
-
-Affix rules optionally follow each word in the dictionary file. These are
-separated from the word using a slash. Each file uses one of two formats. It
-will generally be obvious which one is which. Affix rules tell you what prefixes
-and suffixes (affixes) can apply to the word. I will describe as much as you
-need to know. There are additional details at
-<http://sourceforge.net/docman/display_doc.php?docid=29374&group_id=143754>
-
-### Explicit affix rules
-
-Explicit affix rules look like a string of letters and numbers after each word.
-This is the most common type. For example, here are some lines from the French
-file:
-
-> aberrante/LMF
-> aberration/LMS
-> aberre/jnu
-> aberré
-> aberrer/nM
-
-Each one of the letters indicates a rule that can possibly apply. You can see
-that aberré has no rules. This is OK. The other words have a sequence of rules:
-each rule is identified by a unique letter. Case matters so "F" is different
-than "f".
-
-Each rule is in the .aff file for that language. The rules come in two flavors:
-SFX for suffixes, and PFX for prefixes. Each line begins with PFX/SFX and then
-the rule letter identifier (the ones that follow the word in the dictionary
-file:
-
-> PFX &lt;*rule_letter_identifier*&gt; &lt;*combineable_flag*&gt;
-> &lt;*number_of_rule_lines_that_follow*&gt;
-
-You can normally ignore the combinable flag, it is Y or N depending on whether
-it can be combined with other rules. Then there are some number of lines
-(indicated by the &lt;*number_of_rule_lines_that_follow*&gt;) that list
-different possibilities for how this rule applies in different situations. It
-looks like this:
-
-> PFX &lt;*rule_letter_identifier*&gt; &lt;*number_of_letters_to_delete*&gt;
-> &lt;*what_to_add*&gt; &lt;*when_to_add_it*&gt;
-
-For example:
-
-> SFX B Y 3
-> SFX B 0 able \[^aeiou\]
-> SFX B 0 able ee
-> SFX B e able \[^aeiou\]e
-
-If "B" is one of the letters following a word, then this is one of the rules
-that can apply. There are three possibilities that can happen (because there are
-three lines). Only one will apply:
-
-* *able* is added to the end when the end of the word is "not"
- (indicated by "^") one of the letters in the set (indicated by "\[
- \]") of letters a, e, i, o, and u. For example, *question* →
- *questionable*
-* *able* is added to the end when the end of the word is "ee". For
- example, *agree* → *agreeable.*
-* *able* is added to the end when the end of the word is not a vowel
- ("\[^aeiou\]") followed by an "e". The letter "e" is stripped (the
- column before *able*). For example, *excite* → *excitable.*
-
-PFX rules are the same, but apply at the beginning of the word instead for
-prefixes.
-
-### Numbered affix rules
-
-Some dictionaries use numbers instead of a list of affix rules. Each number is a
-unique combination of rules, which is convenient since there are usually not
-very many unique combinations of rules that can apply. This just means an extra
-step. For example, the English dictionary has:
-
-> Abeu/6
-> abeyance/7
-> abeyant
-> Abey/6
-
-You can see that abeyant has no rules, so it is never conjugated. The other
-rules are 6 and 7. To see what these are, look up in the .aff file. The "AF"
-lines you which set of rules correspond to each number. For example, the
-en-US.aff file has a bunch of lines like this:
-
-> AF mn # 1
-> AF 1n # 2
-> AF pt # 3
-> AF p # 4
-> AF ct # 5
-> AF M # 6
-> AF MS # 7
-> AF DGLRS # 8
-
-You can then see that 6 corresponds to the rule sequence "M" and 7 corresponds
-to the rule sequence "MS". You would look these sequences of rules up just like
-the explicit affix rules discussed above. So you look up in the PFX and SFX
-lines and find the rule for "M" is:
-
-> SFX M Y 1
-> SFX M 0 's .
-
-Which means to make it possessve. For example, *Abey* → *Abbey's.* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/enterprise/adding-new-policies/index.md b/chromium/docs/website/site/developers/how-tos/enterprise/adding-new-policies/index.md
deleted file mode 100644
index 9b3dc95ea1c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/enterprise/adding-new-policies/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/enterprise
- - Enterprise
-page_name: adding-new-policies
-title: Policy Settings in Chrome
----
-
-**This documentation has been moved to**
-
-==<https://source.chromium.org/chromium/chromium/src/+/main:docs/enterprise/add_new_policy.md>== \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/enterprise/index.md b/chromium/docs/website/site/developers/how-tos/enterprise/index.md
deleted file mode 100644
index c049187d9f5..00000000000
--- a/chromium/docs/website/site/developers/how-tos/enterprise/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: enterprise
-title: Enterprise
----
-
-This is a loose collection of enterprise relevant documents:
-
-* High-level overview [slide
- deck](https://docs.google.com/a/chromium.org/presentation/d/1dPtXXOXiOvvvt9VCTJcFEgSxFG2_FGY6R9zCiACqCc0/present)
-* [Adding New Group
- Policies](/developers/how-tos/enterprise/adding-new-policies)
-* [Running the cloud policy test
- server](/developers/how-tos/enterprise/running-the-cloud-policy-test-server)
-* [Working with protobuf-encoded policy
- blobs](/developers/how-tos/enterprise/protobuf-encoded-policy-blobs) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/enterprise/protobuf-encoded-policy-blobs/index.md b/chromium/docs/website/site/developers/how-tos/enterprise/protobuf-encoded-policy-blobs/index.md
deleted file mode 100644
index 4c7ec775bc2..00000000000
--- a/chromium/docs/website/site/developers/how-tos/enterprise/protobuf-encoded-policy-blobs/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/enterprise
- - Enterprise
-page_name: protobuf-encoded-policy-blobs
-title: Protobuf-encoded policy blobs
----
-
-Cloud policy blobs encode policy settings in a protobuf format, protected with a
-signature. The signature facilitates authenticity checks, the key pair is
-typically created and owned by the entity managing the device or user. Policy
-blobs are also used as the canonical format for device settings on Chromium OS.
-They are stored on disk by session_manager, which also takes care of
-authenticating incoming protobufs.
-
-## Structure
-
-The term "policy blob" usually refers to a binary-encoded PolicyFetchResponse
-protobuf message as defined here:
-<https://chromium.googlesource.com/chromium/src/components/policy/proto/+/HEAD/device_management_backend.proto>
-
-This protobuf message is a nested structure and contains binary-encoded payload
-protobufs. The layers are as follows:
-
-1. PolicyFetchResponse is the outer protobuf. It wraps the actual
- payload - a PolicyData protobuf message - in binary form and
- includes a signature that's computed on the payload binary. It also
- contains fields for shipping a new key in case of key rotation.
- Rotation requires the signature on the new key to verify against the
- old key.
-2. PolicyData hosts a fair amount of meta data about the policy, such
- as policy type, timestamps, intended receiver etc. These are used
- for further validity checks. The actual policy values are nested in
- the binary policy_value field. The field contains a binary-encoded
- protobuf, it's message type depends on the policy type.
-3. The CloudPolicySettings message type is used for user-level policy,
- which is indicated by type google/chromeos/user. The protobuf
- definition is generated at compile time from
- chrome/app/policy/policy_templates.json:
- <https://chromium.googlesource.com/chromium/src/+/HEAD/components/policy/resources/policy_templates.json>
-4. Chromium OS device policy is handled by ChromeDeviceSettingsProto
- defined in
- <https://chromium.googlesource.com/chromium/src/+/HEAD/components/policy/proto/chrome_device_policy.proto>
- and is applicable if the policy type is google/chromeos/device.
-
-## Location of binary blobs
-
-Binary policy blobs are stored on Chromium OS in these locations:
-
-* /var/lib/devicesettings/policy - device policy blob
-* /home/root/&lt;user-hash&gt;/session_manager/policy/policy - user
- policy blob \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/enterprise/running-the-cloud-policy-test-server/index.md b/chromium/docs/website/site/developers/how-tos/enterprise/running-the-cloud-policy-test-server/index.md
deleted file mode 100644
index 946f6d1b1b8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/enterprise/running-the-cloud-policy-test-server/index.md
+++ /dev/null
@@ -1,288 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/enterprise
- - Enterprise
-page_name: running-the-cloud-policy-test-server
-title: Running the cloud policy test server
----
-
-Chromium can pull down enterprise policy configuration from a cloud service. We
-have a simplistic python implementation of the management service, so we are
-able to test features without relying on a full cloud policy server
-implementation. This page explains how to run it:
-
-## Running the test server
-
-1. You need a Linux Chromium checkout that's in good shape for building
- the browser. See [Get the Code](/developers/how-tos/get-the-code)
-2. Make sure you have the protocol buffer source compiled (add the
- `device_policy_proto` to the line below if you're building for
- Chrome OS):
-
- ```none
- ninja -C out/Debug py_proto components/policy/core/common full_runtime_code_generate
- ```
-
-3. Start the test server. You can start testserver.py directly from the
- src/ directory of your Chrome source tree:
-
- ```none
- OUT_DIR=out/Debug \
- PYTHONPATH=third_party/tlslite:third_party/pywebsocket3/src:$OUT_DIR/pyproto:net/tools/testserver:third_party/protobuf/python:$OUT_DIR/pyproto/components/policy/proto:$OUT_DIR/pyproto/third_party/shell-encryption/src:$OUT_DIR/pyproto/third_party/private_membership/src \
- python components/policy/test_support/policy_testserver.py --data-dir ~/tmp/ --host 127.0.0.1 --port 8889
- ```
-
- Note: replace out/Debug with out/Release if appropriate, depending on your
- build configuration.
- If this fails with a Python error, try running inside an isolated Python
- environment via [virtualenv](https://virtualenv.pypa.io/en/stable/).
- If you want logging, add these flags:
-
- ```none
- --log-level DEBUG --log-to-console
- ```
-
- Notes on parameters:
- * `--data-dir` specifies the directory from which the server will
- read the policy file (see below). Up to you where to place it.
- * `--port` specifies the port the server should listen on, you can
- pick a port of your liking.
- * `--host` The IP address the server should bind to. Note that if
- you want to test a Chromium OS image running on a Chromebook or
- in a Virtual Machine against the server, you need to specify the
- host name or IP address of the public interface in your machine.
- Note that the server only accepts connections from that IP. To
- work around these restrictions you can use a port forwarding
- (ssh is your friend) or local proxy server.
- * --client-state specifies a file in which to persist current
- server state. This is useful if you want the server to remember
- registered clients and such across server restarts, for example
- when your tinkering with the python code in policy_testserver.py
- to create specific error conditions etc.
- * --config-file specifies a file that contains server
- configuration. If not specified, the server will default to the
- device_management file in the data directory.
- * --policy-key a PEM-encoded file containing a private RSA key
- used to sign policy blobs. More information on the policy blob
- format and signatures is
- [here](/developers/how-tos/enterprise/protobuf-encoded-policy-blobs).
- Note that for signing keys to be accepted by Chrome, a
- verification signature is required that certifies the signing
- key. These signatures are checked against a Google-owned key
- pair, the public half of which is [baked into the chrome
- binary](https://code.google.com/p/chromium/codesearch#chromium/src/components/policy/core/common/cloud/cloud_policy_constants.cc&l=65).
- The policy test server contains [hardcoded verification
- signatures](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/policy/test/policy_testserver.py&l=115)
- for a couple test domains. If you specify a policy key on the
- command line, the server will try to load a verification
- signature from the file that's named like the policy key file,
- but with ".sig" appended. Multiple policy keys may be specified
- in the command line in order to test key rotation.
-4. Check whether the server answers requests. Point your browser to
- <http://localhost:8889/test/ping> (or the public IP you've passed to
- the `--host` switch). The server should respond with a page saying
- "Policy server is up."
-5. Ready to roll!
-
-## Setting up a configuration file
-
-The configuration file is a JSON file containing server-global parameters.
-Here's an example:
-
-```none
-{
-  "managed_users": [ "*" ],
-  "policy_user": "madmax@managedchrome.com",
-  "current_key_index": 0,
-  "service_account_identity": "",
-  "robot_api_auth_code": "",
-  "invalidation_source": 0,
-  "invalidation_name": "",
-  "device_state": {
-    "management_domain": "managedchrome.com",
-    "restore_mode": 2
-  }
-}
-```
-
-Notes on parameters:
-
-* `managed_users` specifies the list of clients the server is allowing
- to register. Each entry is an oauth token, or the "\*" wildcard
- which matches any client.
- (Note that going by OAuth token actually isn't very useful, we should either
- remove this parameter or give the server the ability to figure out the
- actual user)
-* `policy_user` is the user ID to put in policy responses to identify
- the target of the policy settings. This needs to match the user on
- the Chrome side or Chrome will reject the policy.
-* `current_key_index` is the index of the signing key to use when
- generating policy blob signatures.
-* `service_account_identity` is the email address of the service
- account. This is the account used on Chrome OS to enable Google
- cloud services that require authentication. Note that the test
- server can't create service accounts, so this parameter is likely
- only useful for testing (i.e. you have a way to create a service
- account separately and want to inject the proper service account
- name).
-* `robot_api_auth_code` specifies the authentication code the server
- should return when a Chrome OS client asks for one during enterprise
- enrollment. Since the server doesn't have the ability to create
- robot accounts, it can't satisfy these request. Leave this parameter
- empty unless you are testing robot auth setup and have a way to
- create robot accounts and obtain auth codes separately.
-* `invalidation_source` and invalidation_name are used in policy
- change push notifications. Change notifications are not supported by
- the test server. This parameter merely exists to facilitate testing
- using a source identifier obtained elsewhere.
-* `device_state` provides device state parameters requested by Chrome
- OS clients that have gone through a hardware reset and are
- performing a handshake with the server to discover their previous
- state. This is part of the forced re-enrollment and device disabling
- features. You should generally only need these parameters if you're
- specifically testing the aforementioned features.
-
-## Setting up a policy file
-
-The test server reads policy to supply to clients from the data directory
-specified with the `--data-dir`. The directory contains text files containing
-protobuf messages that supply the payload to return to the client when it asks
-for policy. The files are named according to the type of policy requested and
-the entity the policy is intended for.
-
-### User policy
-
-The file names are:
-
-* policy_google_android_user.txt
-* policy_google_chromeos_publicaccount_$PUBLICACCOUNTID.txt
-* policy_google_chromeos_user.txt
-* policy_google_chrome_user.txt
-* policy_google_ios_user.txt
-
-The payload protocol buffer message is CloudPolicySettings. This is generated
-from
-[policy_templates.json](https://code.google.com/p/chromium/codesearch#search/&q=policy_templates.json&sq=package:chromium&type=cs)
-and there is a message field with the name matching the policy name for each
-supported policy. The value field within the nested message contains the policy
-value. Here is an example with a few policy settings defined:
-
-```none
-HomepageLocation {
-  value: "http://www.chromium.org"
-}
-ShowHomeButton {
-  value: true
-}
-```
-
-### Device policy
-
-The file name is policy_google_chromeos_device.txt and the payload protocol
-buffer is ChromeDeviceSettingsProto. Example contents:
-
-```none
-device_policy_refresh_rate {
-  device_policy_refresh_rate: 60
-}
-user_allowlist {
-  user_allowlist: "*@managedchrome.com"
-  user_allowlist: "*@gmail.com"
-}
-device_local_accounts {
-  account {
-    account_id: "publicsession@managedchrome.com"
-    type: ACCOUNT_TYPE_PUBLIC_SESSION
-  }
-}
-```
-
-## Configuring Chromium OS to talk to the test server
-
-In order to do something useful with the test server, you can configure Chromium
-built for Chromium OS to talk to the test server for device- and user-level
-policy. Here is what you need to do:
-
-1. Get a root shell on the VM or Chromebook that you want to talk to
- the test server.
-2. Make sure you have a writable root file system. Try `mount -o
- remount,rw /` if you don't, if that fails, you're likely on an
- actual device with enabled root file system protection, in that case
- check out `/usr/share/vboot/bin/make_dev_ssd.sh
- --remove_rootfs_verification`
-3. Edit `/etc/chrome_dev.conf`. Add the following flags:
-
- ```none
- --device-management-url=http://<your-ip>:<yourport>
- --enterprise-enrollment-skip-robot-auth
- ```
-
- This points the device at your test server and instructs it to skip robot
- auth setup, which avoids an error during enrollment due to the test server
- not being able to create robot accounts.
-4. On a shell, say
-
- ```none
- restart ui
- ```
-
-5. You're now set up to fetch policy from the test server!
-
-## Configuring Chromium to talk to the test server
-
-Pass the following command line flag to chrome:
-
-```none
---device-management-url=http://<your-ip>:<yourport>
-```
-
-## User policy
-
-To test some user policy setting, configure the policy file as desired and then
-just log in. The browser should automatically pull policy. You can verify that
-the policy is correctly pulled down from the server by inspecting
-[chrome://policy](javascript:void(0);). To test policy changes, you can also
-just update the policy in the file, and use the "Reload policies" button on
-[chrome://policy](javascript:void(0);) to refresh policy at runtime.
-
-## Device policy
-
-For devices to receive device policy, they need to be enrolled for enterprise
-management at device setup time. There are some requirements for that to
-succeed:
-
-* The device's TPM needs to be clear. In particular, running
- `cryptohome --action=tpm_status` should indicate that the TPM is not
- yet owned. If you have an owned TPM, do the following:
-
- ```none
- crossystem clear_tpm_owner_request=1
- echo "fast keepimg" > /mnt/stateful_partition/factory_install_reset
- reboot
- ```
-
- The system will reboot, do a powerwash and reboot again. The device should
- have a clear TPM and be in enrollable state afterwards.
-* The device may not have a consumer owner already, i.e. you shouldn't
- have logged in previously. Ownership is mainly indicated through
- files in `/var/lib/whitelist`, which you can clear like this
-
- ```none
- stop ui
- rm -rf /var/lib/whitelist/*
- start ui
- ```
-
- This works well in a VM, note that you probably need a TPM reset an actual
- hardware (see above).
-
-To perform the actual enrollment, hit `Ctrl+Alt+E` on the sign in screen.
-Provide credentials (note that in case of the test server, you must match the
-"policy_user" field in your JSON config file) and speak a short prayer. If you
-get lucky, the device will enroll. Log in and check
-[chrome://policy](javascript:void(0);) for whether it says device policy is
-present. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/file-web-bluetooth-bugs/index.md b/chromium/docs/website/site/developers/how-tos/file-web-bluetooth-bugs/index.md
deleted file mode 100644
index 7346f113c57..00000000000
--- a/chromium/docs/website/site/developers/how-tos/file-web-bluetooth-bugs/index.md
+++ /dev/null
@@ -1,223 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: file-web-bluetooth-bugs
-title: How to file Web Bluetooth bugs
----
-
-[TOC]
-
-When [filing a Web Bluetooth
-bug](https://bugs.chromium.org/p/chromium/issues/entry?components=Blink%3EBluetooth&source=chromium.org),
-please attach some Bluetooth logs (both Chrome and platform logs) so we can
-debug the issue.
-
-## General Bluetooth Inspection Tools
-
-These general tools will help you explore bluetooth devices that you are
-attempting to communicate with:
-
-1. chrome://bluetooth-internals
- * Displays Bluetooth information Chrome is able to access,
- allowing you to experiment without going through the device
- chooser dialog, blocklist, or other web platform security
- aspects of Web Bluetooth.
-2. [nRF Connect for
- Android](https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=en)
- or [nRF Connect for
- iOS](https://itunes.apple.com/us/app/nrf-connect/id1054362403?mt=8)
- * Generic tool that allows you to scan, advertise and explore your
- Bluetooth low energy (BLE) devices and communicate with them.
-
-## Bluetooth Devices to Test With
-
-These devices are some that can be used to act as peripheral devices.
-
-1. [BLE Peripheral
- Simulator](https://play.google.com/store/apps/details?id=io.github.webbluetoothcg.bletestperipheral)
- Android app
- * Simulates a devices with Battery, Heart Rate, Health Thermometer
- services. Developers can connect to the app to Read and Write
- Characteristics, Subscribe to Notifications for when the
- Characteristics change, and Read and Write Descriptors.
- * Code at:
- https://github.com/WebBluetoothCG/ble-test-peripheral-android
-2. [nRF
- Connect](https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-mobile/GetStarted)
- Can also simulate a GATT server.
-3. [Espruino](https://www.espruino.com/) devices ([Puck
- JS](https://www.puck-js.com/) etc)
- * Programable in JavaScript with a
- [WebIDE](https://www.espruino.com/ide/).
-
-## chrome://device-log
-
-**chrome://device-log** displays a filtered view of logs on multiple platforms.
-
-* Change the **Log level** to **Debug**
-* **Filter** to only **Bluetooth**.
-
-However, more detailed platform logs may be necessary to diagnose issues, see
-below:
-
-## Mac
-
-#### Chrome logs
-
-1. Quit any running instance of Chrome.
-2. Launch /Applications/Utilities/Terminal.app
-3. At the command prompt enter:
- /Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome
- --enable-logging=stderr --vmodule=\*bluetooth\*=2
-
-#### Platform logs
-
-1. Install Apple's [Additional Tools for
- XCode](https://developer.apple.com/download/more/?name=Additional%20Tools%20for%20XCode)
- if you have XCode 8+, otherwise install Apple's [Hardware IO Tools
- for
- Xcode](https://developer.apple.com/downloads/?name=Hardware%20IO%20Tools).
-2. Use **Bluetooth Explorer** in that package to try to discover and
- connect to your device.
- * Devices | Low Energy Devices will let you scan for and connect
- to BLE devices. If you can't find or use your device with
- Bluetooth Explorer, there's likely a bug in MacOS rather than
- Chrome. Please file a bug in [Apple's bug
- tracker](https://bugreport.apple.com/).
- * "Tools" and select "Device Cache Explorer", from there you can
- click "Delete All" button to clear **device cache** if needed to
- help reproduce errors.
-3. Use **PacketLogger** to capture a log of Bluetooth packets while
- you're reproducing your bug. Remember to clear the packet log before
- you start so you send us mostly relevant packets.
-
-## Linux
-
-#### Chrome logs
-
-1. Quit any running instance of chrome.
-2. Execute in a console:
- google-chrome --enable-logging=stderr --vmodule=\*bluetooth\*=9
- --enable-experimental-web-platform-features
-
-#### Platform logs
-
-1. Get BlueZ version with dpkg -l bluez
-2. Get Linux kernel version with uname -r
-3. Start monitoring bluetooth via sudo btmon or record traces in
- btsnoop format via sudo btmon -w ~/Downloads/btmon.btsnoop
-
-## Chrome OS
-
-#### Chrome logs
-
-1. Put the device into [Developer
- Mode](/chromium-os/chromiumos-design-docs/developer-mode) so you can
- get a Root Shell
-2. Open Chrome OS Shell with \[Ctrl\] + \[Alt\] + T
-3. Enter shell and run these shell commands:
- sudo su
- cp /etc/chrome_dev.conf /usr/local/
- mount --bind /usr/local/chrome_dev.conf /etc/chrome_dev.conf
- echo "--vmodule=\*bluetooth\*=9" &gt;&gt; /etc/chrome_dev.conf
-4. Restart the UI via:
- `restart ui`
-5. Check out messages logged by Chrome at
- file:///home/chronos/user/log/chrome
-
-#### Platform logs
-
-Check out System Logs:
-
-1. Go to file:///var/log/messages
-2. Look for "bluetooth"
-
-Enter a Bluetooth debugging console:
-
-1. Open Chrome OS Shell with \[Ctrl\] + \[Alt\] + T
-2. Enter bt_console and type help to get to know commands
-
-Monitor Bluetooth traffic:
-
-1. Put the device into [Developer
- Mode](/chromium-os/chromiumos-design-docs/developer-mode) so you can
- get a Root Shell
-2. Open Chrome OS Shell with \[Ctrl\] + \[Alt\] + T
-3. Enter shell
-4. Start monitoring bluetooth via sudo btmon or record traces in
- btsnoop format via sudo btmon -w ~/Downloads/btmon.btsnoop
-
-Monitor BlueZ messages going through a D-Bus message bus:
-
-1. Put the device into [Developer
- Mode](/chromium-os/chromiumos-design-docs/developer-mode) so you can
- get a Root Shell
-2. Open Chrome OS Shell with \[Ctrl\] + \[Alt\] + T
-3. Enter shell
-4. Start monitoring with dbus-monitor --system
- "interface=org.freedesktop.DBus.Properties"
- "interface=org.freedesktop.DBus.ObjectManager"
-
-Getting the BlueZ package version:
-
-1. Put the device into [Developer
- Mode](/chromium-os/chromiumos-design-docs/developer-mode) so you can
- get a Root Shell
-2. Open Chrome OS Shell with \[Ctrl\] + \[Alt\] + T
-3. Enter shell
-4. Get the version with more
- /etc/portage/make.profile/package.provided/chromeos-base.packages |
- grep bluez
-
-And if you're enthusiastic, you can also build [BlueZ](http://www.bluez.org/)
-from source on your Chromebook in [Developer
-Mode](/chromium-os/poking-around-your-chrome-os-device), with
-[crouton](https://github.com/dnschneid/crouton) and run it by following these
-[instructions](https://github.com/beaufortfrancois/sandbox/blob/gh-pages/web-bluetooth/Bluez.md).
-
-## Android
-
-#### ADB logs
-
-* If you have Android SDK installed
- * Use adb logcat, perhaps filtering it through grep to highlight
- interesting bits for you:
- * adb logcat -v time | grep -E "
- |\[Bb\]luetooth|cr.Bluetooth|BtGatt|BluetoothGatt|bt_btif_config"
-* If you do not have Android SDK installed
- * [Enable USB
- Debugging](http://developer.android.com/tools/device.html) via
- Developer options
- * Settings &gt; About phone and tap Build number seven times.
- Return to the previous screen to find Developer options.
- * Enable USB Debugging
- * Take a bug report
- * Settings &gt; Debeloper options &gt; Take a bug report
- * Send the bug report to **yourself**, it contains more
- information than we need.
- * Extract the bug report .zip file
- * Search within the bug report text file to find the logcat
- output.
- * Copy the relevant section that includes Bluetooth information to
- a new file, and send that.
-
-## Windows
-
-**Packet capture**
-
-1. Install the [Windows Driver
- Kit](https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk)
- for Windows 10.
-2. Open an administrator command prompt.
-3. Run the command: logman create trace "bth_hci" -ow -o
- C:\\bth_hci.etl -p {8a1f9517-3a8c-4a9e-a018-4f17a200f277}
- 0xffffffffffffffff 0xff -nb 16 16 -bs 1024 -mode Circular -f bincirc
- -max 4096 -ets
-4. Reproduce your issue.
-5. Run the command: logman stop "bth_hci" -ets
-6. Find BtEtlParse.exe in the WDK and run the command: btetlparse
- C:\\bth_hci.etl
-7. The resulting file can be opened using Wireshark. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/get-the-code-v2/index.md b/chromium/docs/website/site/developers/how-tos/get-the-code-v2/index.md
deleted file mode 100644
index eb5d811e21b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/get-the-code-v2/index.md
+++ /dev/null
@@ -1,313 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: get-the-code-v2
-title: Get the Code (Deprecated)
----
-
-[TOC]
-
-## *This page is obsolete. Please see [Get the Code: Checkout, Build, & Run Chromium](/developers/how-tos/get-the-code) instead.*
-
-**Post Git Migration Update! Developer workflow and tools documentation has now
-largely moved to the man pages provided with depot_tools.**
-
-Please see [the online version of those
-docs](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html),
-and especially the new [tutorial
-page](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html)
-for the most up-to-date information about getting and working with Chromium
-sources.
-
-Not all the information here has been migrated to the depot_tools docs yet, so
-this page will stay around for a while as a resource, but where there are
-discrepancies, the depot_tools pages should be considered authoritative.
-
----
-
-# New to Git?
-
-If you're new to Git but experienced with Subversion, we recommend following the
-[Git-SVN Crash Course](http://git-scm.com/course/svn.html). This guide should
-help you understand how Git differs from Subversion and how to get up to speed
-the fastest.
-
-# Prerequisites
-
-* Committers will need a Chromium access account. You can request one
- at [Chromium access](https://chromium-access.appspot.com/) using the
- [request form](https://chromium-access.appspot.com/request). Only
- account holders (read-only or read-write) can send tryjobs.
-
-* [depot_tools](/developers/how-tos/install-depot-tools) is required
- on every platform. Install it and make sure it's correctly in your
- PATH.
-
-## Windows Prerequisites
-
-Run gclient **TWICE, FROM A CMD WINDOW** to download and setup everything else
-you need. It's important to run twice, and not to use msysgit bash or other
-non-cmd shells, because otherwise gclient may fail to properly install all its
-dependencies. Using the "--version" flags just reduces the amount of output
-spew; it's not necessary for the operations to succeed. If you run gclient
---version a third time it should succeed.
-
-gclient --version gclient --version
-
-After running gclient (twice), depot_tools will now contain a full stand-alone
-installation of msysgit. **If you have a previous installation of msysgit, it is
-strongly recommended that you use the version installed under depot_tools**.
-This version of msysgit contains custom performance improvements that facilitate
-working with very large git repositories (like chromium and blink). You can run
-the shell from the provided version of msysgit using:
-
-/path/to/depot_tools/git-.../bin/sh.exe --login -i
-
-where git-... will depend on which version of msysgit was fetched (e.g.
-git-1.9.0.chromium.5_bin). However you will normally just run git.bat, which
-should now be in your path.
-
-## Mac and Linux Prerequisites
-
-You'll need to manually install:
-
-* Git 1.9 or above
-
-# Initial checkout
-
-First, tell git about yourself.
-
-git config --global user.name "My Name"
-git config --global user.email "my-name@chromium.org"
-git config --global core.autocrlf false
-git config --global core.filemode false git config --global
-branch.autosetuprebase always
-
-## Git credentials setup for committers (.netrc file)
-
-If you plan to push commits directly to Git (bypassing Commit Queue, e.g. with
-'git cl land') you would need to setup netrc file with your git password:
-
-1. Go to <https://chromium.googlesource.com/new-password>
-2. Login with your **@chromium.org** account (e.g. your committer
- account, non-chromium.org ones work too).
-3. Follow the instructions in the "Staying Authenticated" section. It
- would ask you to copy-paste two lines into ~/.netrc file.
-
-In the end, ~/.netrc (or %HOME%/_netrc on Windows) should have two lines that
-look like:
-
-machine chromium.googlesource.com login git-yourusername.chromium.org password
-&lt;generated pwd&gt;
-
-machine chromium-review.googlesource.com login git-yourusername.chromium.org
-password &lt;generated pwd&gt;
-
-Make sure that ~/.netrc file's permissions are 0600 as many programs refuse to
-read .netrc files which are readable by anyone other than you.
-
-On Windows, you must manually create HOME as a per-user environment variable and
-set it to the same as %USERPROFILE%.
-
-You can check that you have everything set up properly by running
-tools/check_git_config.py .
-
-## Actual Checkout
-
-We will use the fetch tool included in depot_tools to check out Chromium,
-including all dependencies. This will create a new folder in your current
-working directory named src.
-
-fetch --nohooks chromium # 'chromium' may alternatively be one of blink,
-android, ios, see below. # or alternatively fetch --nohooks --no-history
-chromium # get a shallow checkout (saves disk space and fetch time at the cost
-of no git history) cd src git checkout master # if you are building for Linux
-only: build/install-build-deps.sh # if you are building for Android:
-build/install-build-deps-android.sh # if you are building for iOS: echo "{
-'GYP_DEFINES': 'OS=ios', 'GYP_GENERATOR_FLAGS': 'xcode_project_version=3.2', }"
-&gt; chromium.gyp_env
-
-gclient sync
-
-Alternatives to 'fetch chromium' are:
-
-fetch chromium # Blink from DEPS (most recent roll) - if you're not working on
-Blink itself
-fetch blink # Blink at Tip of Tree (latest) - if you are working on Blink
-instead of or in addition to Chromium
-fetch android # Blink from DEPS with additional Android tools - if you are
-building for Android
-fetch ios # Using iOS dependencies instead of Mac dependencies - if you are
-building for iOS
-
-fetch chromium and fetch blink both fetch both Chromium and Blink, but the two
-commands fetch different versions of Blink: fetching chromium will get a dated
-Blink (most recent roll to Chromium), and is sufficient and easier if only
-working on Chromium, while fetching blink will instead get the latest Blink
-(ToT), and is useful if working on Blink.
-
-In other words, fetch X if you want to work on X.
-
-Note that, by default, fetch creates a local branch called "master". This can be
-confusing if you mistake it for the upstream "origin/master". Unless you know
-what you're doing, you should simply delete this branch as follows:
-
-git checkout origin/master git branch -D master
-
-Note that if e.g. you're developing Blink, you'll want to do this in you Blink
-directory (likely third_party/WebKit) as well.
-
-Post initial checkout, you should be able to switch between projects via
-`sync-webkit-git.py` but better tooling is being worked on. If you wish to later
-add Android to an existing Chromium tree, `sync-webkit-git.py` will not help. It
-may be better to make a separate top level directory and have a parallel tree.
-While the projects can live happily in the same tree, we don't have tools yet to
-help you configure the tree for both.
-
-## Additional environments
-
-If you're building Chrome for:
-
-* Chrome OS, see [these build
- instructions](http://www.chromium.org/developers/how-tos/build-instructions-chromeos)
-* Android, see [these build
- instructions](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md)
-* iOS, see [these build instructions](/system/errors/NodeNotFound)
-
-## Using the last known good/compilable revision (LKGR/LKCR)
-
-If you'd like to only sync to the last known good revision (lkgr), you can
-checkout **origin/lkgr** instead of **origin/master**. Similarly, the lkcr is
-available at **origin/lkcr**.
-
-## Updating the code
-
-Update your current branch with `git pull` followed by `gclient sync`, as
-follows. Note that if you're not on a branch, `git pull` won't work, and you'll
-need to use `git fetch` instead (but you make all your changes on branches,
-right? See "Contributing" below).
-
-cd "$CHROMIUM_DIR"
-git pull
-gclient sync
-
-If developing Blink, you'll need to pull Blink as well, as follows:
-
-cd "$CHROMIUM_DIR" && git pull
-cd "$BLINK_DIR" && git pull
-gclient sync
-
-To speed up updating, using more jobs, for example --jobs=16:
-
-cd "$CHROMIUM_DIR"
-git pull
-gclient sync --jobs=16
-
-# Contributing
-
-Moved to [Committing and Reverting Changes
-Manually](/system/errors/NodeNotFound).
-
-# Commit your change manually
-
-Moved to [Committing and Reverting Changes
-Manually](/system/errors/NodeNotFound).
-
-# Tips
-
-See [GitTips](https://code.google.com/p/chromium/wiki/GitTips) for general tips,
-and [GitCookbook](https://code.google.com/p/chromium/wiki/GitCookbook) for more
-Chromium-specific tips.
-
-## Googler
-
-See <http://wiki/Main/ChromeBuildInstructions>
-
-## Multiple Working Directories
-
-Moved to [Managing Multiple Working
-Directories](/developers/how-tos/get-the-code/multiple-working-directories).
-
-## Working with release branches
-
-Moved to [Working with Release
-Branches](/developers/how-tos/get-the-code/working-with-release-branches).
-
-## Branches
-
-Moved to [Working with
-Branches](/developers/how-tos/get-the-code/working-with-branches).
-
-## If gclient sync fails
-
-* Make sure you checked out master: run git branch
-* Run git status to make sure you don't have any uncommitted changes
-* Try running git rebase origin/master directly to get more specific
- errors that gclient sync might not show
-* Do the same in each subdirectory that belongs to a separate
- repository that you might have worked in - for example, if you
- hacked on
- WebKit[?](https://code.google.com/p/chromium/w/edit/WebKit) code, cd
- to
- third_party/WebKit[?](https://code.google.com/p/chromium/w/edit/WebKit)/Source
- and run git status there to make sure you're on the master branch
- and don't have uncommitted changes.
-
-Sometimes you'll get the message "You have unstaged changes." when you
-personally don't, often due to a directory that has been moved or delete. You
-can fix this by moving the directory outside of the repo directory (or deleting
-it), and then trying gclient sync again.
-
-It is also possible that you're getting this due to local changes (or other
-problems) in the depot_tools directory. You can fix these by going to
-depot_tools and resetting:
-
-git reset --hard HEAD
-
-## Working with repositories in subdirectories other than the main Chromium repository
-
-Moved to [Working with Nested
-Repos](/developers/how-tos/get-the-code/working-with-nested-repos).
-
-## Reverting a change
-
-Moved to [Committing and Reverting Changes
-Manually](/system/errors/NodeNotFound).
-
-## Seeing strange errors using Git on Windows?
-
-Moved to [Windows Build
-Instructions](/developers/how-tos/build-instructions-windows).
-
-## Using Emacs as EDITOR for "git commit" on Mac OS
-
-Moved to [Mac build
-instructions](https://code.google.com/p/chromium/wiki/MacBuildInstructions).
-
-## Tweaking similarity
-
-git-cl defaults to using 50% similarity as a threshold for detecting renames.
-This is sometimes inappropriate, e.g., if splitting off a small file from a
-large file (in which case you want a smaller threshold, to avoid false
-negatives), or when adding a small file (in which case you want a larger
-threshold, to avoid false positives from common boilerplate). This is controlled
-by the add_git_similarity function in git_cl.py, and you can set threshold to a
-given value for a branch (saved in config for that branch), or not look for
-copies on a specific upload (but not saved in config for the branch):
-
-git cl upload --similarity=80 # set threshold to 80% for this branch
-git cl upload --no-find-copies # don't look for copies on this upload
-
-# Managed mode
-
-Moved to [Gclient Managed
-Mode](/developers/how-tos/get-the-code/gclient-managed-mode).
-
-# Need help?
-
-If you find yourself needing help with the new workflow, please file a bug with
-the infrastructure team at
-<https://code.google.com/p/chromium/issues/entry?template=Build%20Infrastructure> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/get-the-code/gclient-managed-mode/index.md b/chromium/docs/website/site/developers/how-tos/get-the-code/gclient-managed-mode/index.md
deleted file mode 100644
index 13333f3e641..00000000000
--- a/chromium/docs/website/site/developers/how-tos/get-the-code/gclient-managed-mode/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/get-the-code
- - 'Get the Code: Checkout, Build, & Run Chromium'
-page_name: gclient-managed-mode
-title: Gclient Managed Mode
----
-
-Managed mode is a **deprecated** feature of gclient. It was conceived to give an
-easier workflow for newcomers to git, but turned out to be full of surprising
-behaviors. It has thus been deprecated, unmanaged mode is the default, and
-existing users of managed mode are encouraged to change to unmanaged mode.
-
-To check which mode you are using, check .gclient (the gclient config file) and
-see the value of the "managed" flag. To switch to unmanaged mode from managed
-mode:
-
-* edit your .gclient and set:
- "managed": False,
-* update your repository by using git pull (as described above),
- followed by gclient sync, rather than just gclient sync.
-
-To make the Blink repo also unmanaged, first fetch blink and then:
-
-* edit your .gclient and set:
- "managed": False,
- "custom_deps": {
- "src/third_party/WebKit": None,
- },
-* update your repository by using git pull in Chromium, then git pull
- in Blink (as described above), followed by gclient sync, rather than
- just gclient sync.
-
-## Reference
-
-* “[PSA: fetch chromium now uses git unmanaged
- mode](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/n9N5N3JL2_U)”
-
-The main difference between managed mode and unmanaged mode is that in managed
-mode, local branches track local master branch instead of origin/master, and
-gclient “manages” the branches so that they stay in sync. However in practice
-this leads to two master branches (local master and origin/master) that go out
-of sync and prevent further uploads/commits. With unmanaged mode you always have
-only one master: origin/master. The local master still exists but is not treated
-in any special way by the tools.
-
-## What's missing
-
-* Safesync is not supported for new managed git checkouts yet
- (<http://crbug.com/109191>). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/get-the-code/index.md b/chromium/docs/website/site/developers/how-tos/get-the-code/index.md
deleted file mode 100644
index e7ff33c8cb8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/get-the-code/index.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: get-the-code
-title: 'Get the Code: Checkout, Build, & Run Chromium'
----
-
-## *If you work at Google, you probably want to read the [Google-specific instructions](https://goto.corp.google.com/building-chrome) instead, which are basically the same except for some details relating to the Google corporate computer images.*
-
-You can [Browse or Search the Chromium Code](https://source.chromium.org/chromium) online.
-
-Chromium supports building on Windows, Mac and Linux host systems.
-Select the platform you want to build:
-
-* [Linux](https://chromium.googlesource.com/chromium/src/+/main/docs/linux/build_instructions.md)
-* [Windows](https://chromium.googlesource.com/chromium/src/+/main/docs/windows_build_instructions.md)
-* [Mac](https://chromium.googlesource.com/chromium/src/+/main/docs/mac_build_instructions.md)
-* Chrome OS (Build on Linux)
- * [linux-chromeos](https://chromium.googlesource.com/chromium/src/+/main/docs/chromeos_build_instructions.md)
- (runs the Chrome OS version of Chrome on Linux)
- * [cros-vm](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_vm.md)
- (runs in a Chrome OS virtual machine)
- * ["simplechrome"](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md)
- (runs on Chromebook hardware)
-* [iOS](https://chromium.googlesource.com/chromium/src/+/main/docs/ios/build_instructions.md) (Build on Mac)
-* Cast (these instructions are still old)
- * [Android](https://chromium.googlesource.com/chromium/src/+/main/docs/android_cast_build_instructions.md) (Build on Linux)
- * [Linux](https://chromium.googlesource.com/chromium/src/+/main/docs/linux/cast_build_instructions.md)
-* [Android](https://chromium.googlesource.com/chromium/src/+/main/docs/android_build_instructions.md) (Build on Linux)
-
-### *The Chromium documentation is gradually moving into the source repository. The links above will take you there.*
-
-## If you need help, try the [chromium-dev Google Group](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev), or the #chromium IRC channel on irc.freenode.net (see the [IRC page](/developers/irc) for more on how Chromium uses IRC). **These are not support channels for Chrome itself but forums for developers.**
-
-You can also, for a limited time, read [the old instructions for getting the
-code](/developers/how-tos/old-get-the-code). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/get-the-code/multiple-working-directories/index.md b/chromium/docs/website/site/developers/how-tos/get-the-code/multiple-working-directories/index.md
deleted file mode 100644
index 63f131a440f..00000000000
--- a/chromium/docs/website/site/developers/how-tos/get-the-code/multiple-working-directories/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/get-the-code
- - 'Get the Code: Checkout, Build, & Run Chromium'
-page_name: multiple-working-directories
-title: Managing Multiple Working Directories
----
-
-**git worktree**
-
-If you only want to do some quick git operations, like merging/rebasing other
-branches, but don't want to make your working directory dirty and cause
-unnecessarily rebuild, git worktree is a good solution. It only handles one
-single git repo though, and doesn't come with Chromium environment setup like
-gclient and install-build-deps.
-
-If you need to have multiple working directories that you can actually build,
-use gclient-new-workdir instead. Using git worktree and set up environment there
-would be slower and use more disk space.
-
-**gclient-new-workdir**
-
-If you are a multitasker or want to build chromium for different targets without
-clobbering each other, then perhaps you'll like the
-[gclient-new-workdir.py](https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/HEAD/gclient-new-workdir.py)
-script located in
-[depot_tools.](http://www.chromium.org/developers/how-tos/depottools) The script
-works by creating a new working directory with symlinks pointing to the git
-database(s) found in your original chromium checkout. You can have as many
-working directories as you want without the overhead and hassle of cloning
-chromium multiple times.
-
-```none
-gclient-new-workdir.py /path/to/original/chromium chromium2
-```
-
-If your file system supports copy-on-write, like btrfs, gclient-new-workdir is
-smart enough to use reflink to save copying time and disk space. Better yet, if
-the source repo is a btrfs subvolume, btrfs snapshot would be created, with all
-the artifacts retained. You can skip environment setup, and rebuilding should be
-incremental. This is the most space-efficient way to create a separate working
-directory. See <https://crbug.com/721585> for details.
-
-### Windows devs
-
-gclient-new-workdir.py doesn't support Windows, but you can try[
-https://github.com/joero74/git-new-workdir](https://github.com/joero74/git-new-workdir)
-to do the same thing **(needs to be run as admin)**. For the curious, the script
-essentially uses mklink /D and other minor tricks to setup the mirrored .git
-repo.
-
-### Chromium OS devs
-
-gclient-new-workdir.py uses symlinks that will not work inside the cros_sdk
-chroot. If using a [local Chromium source for Chromium
-OS](/chromium-os/developer-guide#TOC-Making-changes-to-non-cros_workon-able-packages),
-be sure to use the original working directory. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-branches/index.md b/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-branches/index.md
deleted file mode 100644
index 52f14a41843..00000000000
--- a/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-branches/index.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/get-the-code
- - 'Get the Code: Checkout, Build, & Run Chromium'
-page_name: working-with-branches
-title: Working with Branches
----
-
-*This applies to commits to Chromium repository branches. For changes to
-Chromium OS repositories, see the information
-[here](/chromium-os/how-tos-and-troubleshooting/working-on-a-branch).*
-
-### Basics
-
-Enumerate your local branches:
-
-cd src
-git branch
-
-Switching from one branch to another: Example: Switching from branch 'branch1'
-to branch 'branch2'.
-
-cd src
-git checkout branch2
-
-Note that `-` can be used to refer to the previous branch, which is useful when
-switching between two branches.
-
-```none
-git checkout some_branch
-git checkout - # back to previous branch!
-```
-
-### Suggested branching workflow
-
-We normally do our feature work in branches to keep changes isolated from each
-other. The recommended workflow is to make local branches off the server master,
-referred to as the origin/master branch. The `git-new-branch` command (in
-depot_tools) will do this:
-
- git new-branch branch_name
-
-Note that this is equivalent to the following:
-
- git checkout -b new_branch origin/master
-
-### Branch off a branch
-
-If you have dependent changes, a very productive workflow is to have a branch
-off a branch. Notably, this means that your patch sets (in Rietveld) will show
-the separate changes, and be easy to review, rather than showing the merged
-changes (including irrelevant changes), and means you can commit downstream CLs
-without having to rebase them after the upstream has landed. Do this as follows:
-
-```none
-git checkout master
-git checkout branch1
-# some edits, commit
-git checkout -b branch2
-git branch --set-upstream-to=branch1
-# some edits, commit
-```
-
-Now when you update the first branch, you can simply git pull on the second
-branch as normal to pull in your changes:
-
-```none
-git checkout branch1
-# some edits, commit
-git checkout branch2
-git pull
-```
-
-**Splitting up a CL**
-
-A common variant of "branch off a branch" is splitting up a large CL into
-pieces. Given a local branch `big`, you'd like to split it up into `branch1` and
-`branch2`.
-
-One way to do this is to split off `branch1`, have that reviewed and committed,
-update local repo (`gclient sync`), and then rebase `big` to `master`. This is
-ok, but adds latency, and you can get the same result locally, so the second
-part of the CL can be uploaded and reviewed even before the first part is
-committed.
-
-This can be done manually, particularly if the files don't overlap, by making a
-new branch `branch1`, manually copying the changed files in the first part, then
-branching `branch2` off of that, and manually copying the files in the second
-part.
-
-However, this can be done more cleanly via git. The main points are `git-add -i`
-([Interactive
-Staging](http://git-scm.com/book/en/Git-Tools-Interactive-Staging): to
-interactively choose files or hunks of a patch set) and `git-rebase` (to set the
-second part to be dependent on the first part, removing the common changes);
-[`git-cherry-pick`](http://git-scm.com/docs/git-cherry-pick) is a technicality:
-
-```none
-# first split off branch1
-git checkout origin/master
-git new-branch branch1
-git cherry-pick -n ..big  # apply and stage all ancestors of big that are not ancestors of HEAD, do not commit
-git add -i  # interactively choose which files or hunks to stage
-git commit  # commit staged changes
-git checkout -- . # discard unstaged changes
-# next set big to be a branch off of branch1
-git checkout big
-git branch --set-upstream-to=branch1
-git rebase branch1  # may need to resolve conflicts
-git branch -m branch2  # done!
-```
-
-Concretely, `git-cherry-pick -n` applies and stages all changes, but does not
-commit them. In `git-add -i`, you can unstage files via `3: **r**evert`, and
-then stage files (or hunks of files, or edit the diff manually) via `5:
-**p**atch`, with manually editing via by the `e - manually edit the current
-hunk` option when staging a hunk. While tedious, this is often easier than
-resolving conflicts during rebasing.
-
-### Deleting an obsolete branch
-
-You generally want to delete local branches after the changes have been
-committed to master. It is safest to check that your work has, in fact, been
-committed before deleting it.
-
-Remember that you can always apply a CL that has been posted via:
-
-git checkout -b myworkfrompatch
-git cl patch 12345 # Using CL issue number, not bug number, applies latest patch
-set
-git cl patch https://codereview.chromium.org/download/issue12345_1.diff # Use
-URL of raw patch for older patch sets
-
-...so as long as your CL has been posted, you can easily recover your work.
-Otherwise, you'll need to dig through the git repository, so be careful.
-
-Simply, if master (remote or local) is up-to-date and your branch has been
-rebased, git branch -d will delete the branch. If not, it will refuse; to force
-deletion, use git branch -D. So make sure master is up-to-date, rebase branch,
-and then try deleting (optionally check manually before).
-
-Beware that if your local branch has many revisions (instead of always amending
-a single revision), rebasing to master may fail, since it will try to apply the
-patches incrementally. You can avoid this by squashing your local revisions into
-a single revision (see [6.4 Git Tools - Rewriting
-History](http://git-scm.com/book/en/Git-Tools-Rewriting-History), or more simply
-[squashing commits with
-rebase](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)).
-This may be more trouble than it's worth, but it's the safest way.
-
-To check that the branch has been committed upstream:
-
-git checkout mywork
-git rebase origin/master
-git diff --stat origin/master # optional check
-
-If there are no differences, delete the branch:
-
-git checkout origin/master
-git branch -d mywork # will only work if has been merged
-
-**NOTE:** If you haven't waited long enough after your commit, it is possible
-that 'git fetch' did not get your commit and git will continue to believe that
-you have local changes, which will prevent "git branch -d" from succeeding. It's
-best to redo the steps later, (The repo is updated every 3 minutes) but you can
-also instruct git to force-delete your branch.
-
-Note that when you delete your branch, it will give you the SHA-1 hash for its
-tip:
-
-Deleted branch mywork (was 123abc0).
-
-You can then recover the branch via:
-
-git checkout -b mywork 123abc0
-
-If you forget the hash, you can find it via git reflog. (Reference: [Can I
-recover branch after the deletion in
-git?](http://stackoverflow.com/questions/3640764/can-i-recover-branch-after-the-deletion-in-git))
-
-### Prevent commits to master
-
-If you commit to master, updating will be messy. (This is a good reason to
-simply delete master entirely, as noted near the top of this document. You only
-need to read the remainder of this section if you don't do this.)
-
-You can prevent this by adding a pre-commit hook that checks if you're in master
-and stops you from doing this. Create a file named
-chromium/src/.git/hooks/pre-commit and add the below to it, then mark
-executable. (Blink developers: add in blink directory as well.)
-
-#!/bin/bash
-# Prevent commits against the 'master' branch
-if \[\[ \`git rev-parse --abbrev-ref HEAD\` == 'master' \]\]
-then
-echo 'You cannot commit to the master branch!'
-echo 'Stash your changes and apply them to another branch, using:'
-echo 'git stash'
-echo 'git checkout &lt;branch&gt;'
-echo 'git stash apply'
-exit 1
-fi
-
-If you've accidentally uploaded a change list from master, you can clear the
-association of an issue number with master via:
-
-git cl issue 0
-
-If you've accidentally committed to master, then, after copying your work to a
-new branch (e.g., make patch and then apply to new branch), you can clean up
-master by deleting your accidental commit as per [this
-answer](http://stackoverflow.com/a/6866485) to [How to undo the last Git
-commit?](http://stackoverflow.com/questions/927358/how-to-undo-the-last-git-commit)
--- see more details there.
-
-git reset --hard HEAD~1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-nested-repos/index.md b/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-nested-repos/index.md
deleted file mode 100644
index 0898765d997..00000000000
--- a/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-nested-repos/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/get-the-code
- - 'Get the Code: Checkout, Build, & Run Chromium'
-page_name: working-with-nested-repos
-title: Working with Nested Third Party Repositories
----
-
-The Chromium source tree includes other repositories in third party directories
-(src/third_party) and elsewhere.
-
-## Make changes
-
-## Do your work, on a branch here, and commit locally.
-
-git checkout -b work
-vim third-party-file.cc
-git commit -a -m "work done"
-
-## Upload for review
-
-git cl upload
-
-## Do the usual add-reviewers-seek-lgtm dance. Once reviewed, submit your change:
-
-git cl land
-
-## Done? Not quite: you need to roll your change into the Chromium tree.
-
-## Roll DEPS
-
-Since Chromium mirrors these projects with git, the DEPS file entry for the
-project has a git hash. So how do you update the DEPS file hash for source code
-changes that don't really live in git?
-
-Method #1: Use the depot_tools roll-dep script
-
-# cd to the main src directory for your checkout cd src # Create and switch to a
-new branch git new-branch depsroll # Run roll-dep giving the path and the
-desired revision # if you omit the revision, it will roll to the current repo
-HEAD roll-dep src/third_party/foo
-\[--roll-to=SVN_REVISION_NUMBER/GIT_COMMIT_HASH\]
-
-Method #2: Manual inspection (patch the hash into the DEPS file by hand).
-
-# cd to the main src directory for your checkout pushd src # Create and switch
-to a new branch git new-branch depsroll # cd to the directory listed in the DEPS
-file (e.g., src/third_party/cld_2/src for 'cld2') pushd third_party/foo/bar #
-Fetch (but do not pull) the latest revisions from Chromium's git mirror of the
-remote repository git fetch origin # Use 'git log' to list the commits in the
-mirror and find the hash of the one you need git log origin # Go back to src/
-popd # Patch the revision hash into the DEPS file by hand.
-
-Regardless of method used, the result is a modified DEPS file. Commit it locally
-and upload for review:
-
-git commit -a -m "roll third_party/whatever deps because ..."
-git cl upload
-
-## Adding new repositories to DEPS
-
-Ensure the repository in question **is mirrored at chromium.googlesource.com**.
-We do this to avoid swamping upstream hosts with loads of traffic from our
-developers and bot fleet. To mirror a repository, please file an [infrastructure
-ticket](https://code.google.com/p/chromium/issues/entry?template=Build%20Infrastructure). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-release-branches/index.md b/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-release-branches/index.md
deleted file mode 100644
index 1f6bba4c05b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/get-the-code/working-with-release-branches/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/get-the-code
- - 'Get the Code: Checkout, Build, & Run Chromium'
-page_name: working-with-release-branches
-title: Working with Release Branches
----
-
-*This applies to commits to Chromium repository branches. For changes to
-Chromium OS repositories, see the information
-[here](/chromium-os/how-tos-and-troubleshooting/working-on-a-branch).*
-
-## Checking out a release branch
-
-**Note: Prior to branch 3420 it is usually NOT possible to sync and build a
-release branch** (i.e. with consistent third_party DEPS), The instructions below
-will only work with branch 3420 or later. For old branches, please refer to the
-internal documentation (*go/ChromeReleaseBranches*).
-
-```sh
-# Make sure you are in 'src'.
-# This part should only need to be done once, but it won't hurt to repeat it.
-# The first time checking out branches and tags might take a while because it
-# fetches an extra 1/2 GB or so of branch commits.
-gclient sync --with_branch_heads --with_tags
-
-# You may have to explicitly 'git fetch origin' to pull branch-heads/
-git fetch
-
-# Checkout the branch 'src' tree. $BRANCH can be found under Chromium
-# [here](https://chromiumdash.appspot.com/branches).
-git checkout -b branch_$BRANCH branch-heads/$BRANCH
-
-# Checkout all the submodules at their branch DEPS revisions.
-gclient sync --with_branch_heads --with_tags
-```
-
-## Building a branch
-
-Once checked out, building a branch should be [the same as building
-trunk](/developers/how-tos/get-the-code). To avoid clobbering other build
-artifacts, you may want to specify a different build directory (e.g.
-`//out/Branch1234` instead of `//out/Default`).
-
-## Merging a patch from another branch (e.g. trunk)
-
-Please see the [cherry-pick/drover instructions.](/developers/how-tos/drover)
-
-## Developing a patch directly on the branch
-
-**Note:** Bugs should generally be fixed and tested on trunk (canary) and then
-merged to branches. However, if you cannot do that:
-
-```sh
-# Make sure you are in 'src'.
-# Create a branch for the patch.
-git new-branch --upstream branch-heads/$BRANCH my_hack_on_the_branch
-
-# Develop normally.
-git commit
-git cl upload
-
-# After your CL is carefully reviewed, land via the normal CQ process.
-git cl land
-```
-
-## Syncing and building a release tag
-
-Releases are tagged in git with the release version number.
-Note: You cannot commit to a release tag. This is purely for acquiring the
-sources that went into a release build.
-
-```sh
-# Make sure you have all the release tag information in your checkout.
-git fetch --tags
-# Checkout whatever version you need (known versions can be seen with
-# 'git show-ref --tags')
-git checkout -b your_release_branch 74.0.3729.131 # or tags/74.0.3729.131
-gclient sync --with_branch_heads --with_tags
-```
-
-Then build as normal.
-
-## Get back to the "trunk"
-
-```sh
-# Make sure you are in 'src'.
-git checkout -f origin/main
-gclient sync
-```
diff --git a/chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/Content.png.sha1 b/chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/Content.png.sha1
deleted file mode 100644
index 57a724ea3a2..00000000000
--- a/chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/Content.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0032b62ea31908b0043324bf90386b0a7fcab9a9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/index.md b/chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/index.md
deleted file mode 100644
index 38201d10c78..00000000000
--- a/chromium/docs/website/site/developers/how-tos/getting-around-the-chrome-source-code/index.md
+++ /dev/null
@@ -1,358 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: getting-around-the-chrome-source-code
-title: Getting Around the Chromium Source Code Directory Structure
----
-
-[TOC]
-
-## High-level overview
-
-Chromium is separated into two main parts (excluding other libraries): the
-browser and the renderer (which includes Blink, the web engine). The browser is
-the main process and represents all the UI and I/O. The renderer is the (often)
-per-tab sub-process that is driven by the browser. It embeds Blink to do layout
-and rendering.
-
-You will want to read and become familiar with our [multi-process
-architecture](/developers/design-documents/multi-process-architecture) and [how
-Chromium displays web
-pages](/developers/design-documents/displaying-a-web-page-in-chrome).
-
-## Top-level projects
-
-When you [Browse and Search the Chromium Code](https://source.chromium.org/chromium)
-or [Checkout the Chromium Code](https://www.chromium.org/developers/how-tos/get-the-code/)
-you will notice a number of top-level directories:
-
-* **android_webview:** Provides a facade over src/content suitable for
- integration into the android platform. NOT intended for usage in
- individual android applications (APK). [More
- information](https://docs.google.com/document/d/1a_cUP1dGIlRQFUSic8bhAOxfclj4Xzw-yRDljVk1wB0/edit?usp=sharing)
- about the Android WebView source code organization.
-* **apps**: [Chrome packaged
- apps](http://developer.chrome.com/apps/about_apps.html).
-* **base**: Common code shared between all sub-projects. This contains
- things like string manipulation, generic utilities, etc. Add things
- here only if it must be shared between more than one other top-level
- project.
-* **breakpad**: Google's open source crash reporting project. This is
- pulled directly from Google Code's Subversion repository.
-* **build**: Build-related configuration shared by all projects.
-* **cc**: The Chromium compositor implementation.
-* **chrome**: The Chromium browser (see below).
-* **chrome/test/data**: Data files for running certain tests.
-* **components**: directory for components that have the Content
- Module as the uppermost layer they depend on.
-* **content:** The core code needed for a multi-process sandboxed
- browser (see below). [More information](/developers/content-module)
- about why we have separated out this code.
-* **device:** Cross-platform abstractions of common low-level hardware
- APIs.
-* **net**: The networking library developed for Chromium. This can be
- used separately from Chromium when running our simple test_shell in
- the `webkit` repository. See also `chrome/common/net`.
-* **sandbox**: The sandbox project which tries to prevent a hacked
- renderer from modifying the system.
-* **skia + third_party/skia**: Google's Skia graphics library. Our
- additional classes in ui/gfx wrap Skia.
-* **sql:** Our wrap around sqlite.
-* **testing**: Contains Google's open-sourced GTest code which we use
- for unit testing.
-* **third_party**: 200+ small and large "external" libraries such as
- image decoders, compression libraries and the web engine Blink (here
- because it inherits license limitations from WebKit). [Adding new
- packages](/developers/adding-3rd-party-libraries).
- * **.../blink/renderer**: The web engine responsible for turning
- HTML, CSS and scripts into paint commands and other state
- changes.
-* **tools**
-* **ui/gfx**: Shared graphics classes. These form the base of
- Chromium's UI graphics.
-* **ui/views**: A simple framework for doing UI development, providing
- rendering, layout and event handling. Most of the browser UI is
- implemented in this system. This directory contains the base
- objects. Some more browser-specific objects are in
- chrome/browser/ui/views.
-* **url**: Google's open source URL parsing and canonicalization
- library.
-* **v8**: The V8 Javascript library. This is pulled directly from
- Google Code's Subversion repository.
-
-For historical reasons, there are some small top level directories. Going
-forward, the guidance is that new top level directories are for applications
-(e.g. Chrome, Android WebView, Ash). Even if these applications have multiple
-executables, the code should be in subdirectories of the application
-
-Here's a slightly dated diagram of the dependencies. In particular, WebKit is
-replaced by blink/renderer. A module that is lower can't include code from a
-higher module directly (i.e. content can't include a header from chrome), but
-talks to it using embedder APIs.
-
-[<img alt="image"
-src="/developers/how-tos/getting-around-the-chrome-source-code/Content.png">](/developers/how-tos/getting-around-the-chrome-source-code/Content.png)
-
-## Quick reference for the directory tree under "content/"
-
-* **browser**: The backend for the application which handles all I/O
- and communication with the child processes . This talks to the
- `renderer` to manage web pages.
-* **common:** Files shared between the multiple processes (i.e.
- browser and renderer, renderer and plugin, etc...). This is the code
- specific to Chromium (and not applicable to being in base).
-* **gpu:** Code for the GPU process, which is used for 3D compositing
- and 3D APIs.
-* **plugin:** Code for running browser plugins in other processes.
-* **ppapi_plugin:** Code for the [Pepper
- ](/developers/design-documents/pepper-plugin-implementation)plugin
- process.
-* **renderer**: Code for the subprocess in each tab. This embeds
- WebKit and talks to `browser` for I/O.
-* **utility:** Code for running random operations in a sandboxed
- process. The browser process uses it when it wants to run an
- operation on untrusted data.
-* **worker:** Code for running HTML5 Web Workers.
-
-## Quick reference for the directory tree under "chrome/"
-
-* **app**: The "app" is the most basic level of the program. It is run
- on startup, and dispatches to either the browser or renderer code
- depending on which capabilities the current process is in. It
- contains the projects for `chrome.exe` and `chrome.dll`. You won't
- generally need to change this stuff except for resources like images
- and strings.
- * **locales**: Projects for building localized DLLs.
- * **resources**: Icons and cursors.
- * **theme**: Images for the theme of the window.
-* **browser**: The frontend including the main window, UI, and the
- backend for the application which handles all I/O and storage. This
- talks to the `renderer` to manage web pages.
- * **ui** model, view and controller code for UI features and
- functionality
-* **common**: Files shared between the browser and the renderer that
- is specific to the Chrome module.
- * **net**: Some Chromium-specific stuff on top of the `net`
- top-level module. This should be merged with browser/net.
-* **installer**: Source files and projects for making the installer
- (MSI package).
-* ****renderer**: Chrome specific code that runs in the renderer
- process. This adds Chrome features like autofill, translate etc to
- the content module.**
-* **test**:
- * **automation**: Used by tests to drive the browser UI, for
- example, in `test/ui`, `test/startup`, etc. This communicates
- with `browser/automation` in the browser.
- * **page_cycler**: Code for running page cycler tests (for
- performance measurement). See `tools/perf/dashboard`.
- * **reliability**: Reliability tests for distributed testing of
- page loads for reliability metrics and crash finding.
- * **selenium**: Code for running the selenium tests, which is a
- third-party test suite for Ajaxy and JavaScript stuff. See
- `test/third_party/selenium_core`.
- * **startup**: Tests for measuring startup performance. See
- `tools/perf/dashboard` and `tools/test/reference_build`.
- * **ui**: UI tests for poking at the browser UI, opening tabs,
- etc. It uses `test/automation` for doing most operations.
- * **unit**: The base code for the unit tests. The test code for
- individual tests is generally alongside the code it is testing
- in a `*_unittest.cc` file.
-* **third_party**: Third party libraries that are specific to
- Chromium. Some other third party libraries are in the top-level
- `third_party` library.
-* **tools**
- * **build**: Tools and random stuff related to building.
- * **memory**: Tools for memory stuff. Currently includes `gflags`
- for setting page heap options.
- * **perf/dashboard**: Code for converting performance logs (for
- example `test/startup_test`) into data and graphs.
- * **profiles**: Generator for random history data. Used to make
- test profiles.
-
-## A personal learning plan
-
-Eventually you’ll have your build setup, and want to get to work. In a perfect
-world, we would have all the time we needed to read every line of code and
-understand it before writing our first line of code. In practice, we’d have a
-hard time reading just the checkins that happen in one day if we did nothing
-else, so none of us will ever be able to read all of the code. So, what can we
-do? We suggest you develop your own plan for learning what you need, here are
-some suggested starting points.
-
-Fortunately for us, Chromium has some top quality design docs
-[here](/developers/design-documents). While these can go a bit stale (for
-instance, when following along, you may find references to files that have been
-moved or renamed or refactored out of existence), it is awesome to be able to
-comprehend the way that the code fits together overall.
-
-**Read the most important dev docs**
-
-[multi-process-architecture](/developers/design-documents/multi-process-architecture)
-
-[displaying-a-web-page-in-chrome](/developers/design-documents/displaying-a-web-page-in-chrome)
-
-[inter-process-communication](/developers/design-documents/inter-process-communication)
-
-[threading](/developers/design-documents/threading)
-
-**See if your group has any startup docs**
-
-There may be some docs that people working on the same code will care about
-while others don’t need to know as much detail.
-
-**Learn some of the code idioms:**
-
-[important-abstractions-and-data-structures
-](/developers/coding-style/important-abstractions-and-data-structures)
-
-[smart-pointer-guidelines](/developers/smart-pointer-guidelines)
-
-[chromium-string-usage](/developers/chromium-string-usage)
-
-Later, as time permits, skim all the design docs, reading where it seems
-relevant.
-
-Get good at using code search (or your code browsing tool of choice)
-
-Learn who to ask how the code works [hints
-here](/developers/finding-somebody-who-knows-how-a-piece-of-code-works).
-
-Debug into the code you need to learn, with a debugger if you can, log
-statements and grepping if you cannot.
-
-Look at the differences in what you need to understand and you currently
-understand. For instance, if your group does a lot of GUI programming, then
-maybe you can invest time in learning GTK+, Win32, or Cocoa programming.
-
-Use [source.chromium.org](https://source.chromium.org/) to search the source
-code. This can be particularly helpful if code moves around and our
-documentation is no longer accurate.
-
-## Code paths for common operations
-
-There is additional information and more examples on [how Chromium displays web
-pages](/developers/design-documents/displaying-a-web-page-in-chrome).
-
-### Application startup
-
-1. Our `WinMain` function is in `chrome/app/main.cc`, and is linked in
- the `chrome` project.
-2. `WinMain` launches the Google Update Client, which is the
- installer/autoupdater. It will find the subdirectory for the current
- version, and load `chrome.dll` from there.
-3. It calls `ChromeMain` in the newly loaded library, which is in
- `chrome_main.cc` in the `chrome_dll` project.
-4. `ChromeMain` does initialization for common components, and then
- forwards to either `RendererMain` in
- `chrome/renderer/renderer_main.cc` if the command line flag
- indicates that this should be a subprocess, or `BrowserMain` in
- `chrome/browser/browser_main.cc` if not to load a new copy of the
- application. Since this is startup, we're launching the browser.
-5. `BrowserMain` does common browser initialization. It has different
- modes for running installed webapps, connecting to the automation
- system if the browser is being tested, etc.
-6. It calls `LaunchWithProfile` in `browser_init.cc` which creates a
- new `Browser` object in `chrome/browser/ui/browser.cc`. This object
- encapsulates one toplevel window in the application. The first tab
- is appended at this time.
-
-### Tab startup & initial navigation
-
-1. `BrowserImpl::AddTab` in `weblayer/browser/browser_impl.cc` is
- called to append a new tab.
-2. It will create a new `TabContents` object from
- `browser/tab_contents/tab_contents.cc`
-3. `TabContents` creates a `RenderViewHost`
- (`chrome/browser/renderer_host/render_view_host.cc`) via the
- `RenderViewHostManager's` Init function in
- `chrome/browser/tab_contents/render_view_host_manager.cc`).
- Depending on the `SiteInstance`, the `RenderViewHost` either spawns
- a new renderer process, or re-uses an existing `RenderProcessHost`.
- `RenderProcessHost` is the object in the browser that represents a
- single renderer subprocess.
-4. The `NavigationController` in
- `chrome/browser/tab_contents/navigation_controller.cc` which is
- owned by the tab contents, is instructed to navigate to the URL for
- the new tab in `NavigationController::LoadURL`. "Navigating from the
- URL bar" from step 3 onward describes what happens from this point.
-
-### Navigating from the URL bar
-
-1. When the user types into or accepts an entry in the URL bar, the
- autocomplete edit box determines the final target URL and passes
- that to `AutocompleteEdit::OpenURL`. (This may not be exactly what
- the user typed - for example, an URL is generated in the case of a
- search query.)
-2. The navigation controller is instructed to navigate to the URL in
- `NavigationController::LoadURL`.
-3. The `NavigationController` calls `TabContents::Navigate` with the
- `NavigationEntry` it created to represent this particular page
- transition. It will create a new `RenderViewHost` if necessary,
- which will cause creation of a `RenderView` in the renderer process.
- A `RenderView` won't exist if this is the first navigation, or if
- the renderer has crashed, so this will also recover from crashes.
-4. `Navigate` forwards to `RenderViewHost::NavigateToEntry`. The
- `NavigationController` stores this navigation entry, but it is
- marked as "pending" because it doesn't know for sure if the
- transition will take place (maybe the host can not be resolved).
-5. `RenderViewHost::NavigateToEntry` sends a `ViewMsg_Navigate` to the
- new `RenderView` in the renderer process.
-6. When told to navigate, `RenderView` may navigate, it may fail, or it
- may navigate somewhere else instead (for example, if the user clicks
- a link). `RenderViewHost` waits for a `ViewHostMsg_FrameNavigate`
- from the `RenderView`.
-7. When the load is "committed" by WebKit (the server responded and is
- sending us data), the `RenderView` sends this message, which is
- handled in `RenderViewHost::OnMsgNavigate`.
-8. The `NavigationEntry` is updated with the information on the load.
- In the case of a link click, the browser has never seen this URL
- before. If the navigation was browser-initiated, as in the startup
- case, there may have been redirects that have changed the URL.
-9. The `NavigationController` updates its list of navigations to
- account for this new information.
-
-### Navigations and session history
-
-Each `NavigationEntry` stores a page ID and a block of history state data. The
-page ID is used to uniquely identify a page load, so we know which
-`NavigationEntry` it corresponds to. It is assigned when the page is committed
-commit, so a pending `NavigationEntry` will have a page ID of -1. The history
-state data is simply a `WebCore::HistoryItem` serialized to a string. Included
-on this item are things like the page URL, subframe URLs, and form data.
-
-1. When the browser initiates the request (typing in the URL bar, or
- clicking back/forward/reload)
- 1. A `WebRequest` is made representing the navigation, along with
- extra information like a page ID for bookkeeping. New
- navigations have an ID of -1. Navigations to old entries have
- the ID assigned to the `NavigationEntry` when the page was first
- visited. This extra information will be queried later when the
- load commits.
- 2. The main `WebFrame` is told to load the new request.
-2. When the renderer initiates the request (user clicks a link,
- javascript changes the location, etc):
- 1. `WebCore::FrameLoader` is told to load the request via one of
- its bajillion varied load methods.
-3. In either case, when the first packet from the server is received,
- the load is committed (no longer "pending" or "provisional").
-4. If this was a new navigation, `WebCore` will create a new
- `HistoryItem` and add it to the `BackForwardList`, a `WebCore`
- class. In this way, we can differentiate which navigations are new,
- and which are session history navigations.
-5. `RenderView::DidCommitLoadForFrame` handles the commit for the load.
- Here, the previous page's state is stored in session history, via
- the `ViewHostMsg_UpdateState` message. This will tell the browser to
- update the corresponding `NavigationEntry` (identified by
- `RenderView's` current `page ID`) with the new history state.
-6. `RenderView's` current `page ID` is updated to reflect the committed
- page. For a new navigation, a new unique `page ID` is generated. For
- a session history navigation, it will be the `page ID` originally
- assigned when it was first visited, which we had stored on the
- `WebRequest` when initiating the navigation.
-7. A `ViewHostMsg_FrameNavigate` message is sent to the browser,
- updating the corresponding `NavigationEntry` (identified by
- `RenderView's` newly updated `page ID`) with the new URL and other
- information. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-gardening/index.md b/chromium/docs/website/site/developers/how-tos/gpu-gardening/index.md
deleted file mode 100644
index 7fd007d1fd3..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-gardening/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: gpu-gardening
-title: ''
----
-
-[GPU Pixel Wrangling](/developers/how-tos/gpu-wrangling) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-overdraw-debugging-tool/index.md b/chromium/docs/website/site/developers/how-tos/gpu-overdraw-debugging-tool/index.md
deleted file mode 100644
index af8364cabbe..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-overdraw-debugging-tool/index.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: gpu-overdraw-debugging-tool
-title: GPU Overdraw Debugging Tool
----
-
-Debugging GPU Overdraw in Chrome
-
-# Intro
-
-When diagnosing performance problems it can be valuable to visualize GPU
-overdraw. This can show you where Chrome might be doing more rendering work than
-necessary and help you see where you might be able to reduce rendering overhead.
-
-The primary audience for this tool is Chrome developers but it can also be used
-to diagnose performance problems with web pages.
-
-# Getting Started
-
-The GPU overdraw feedback tool built into Chrome has been inspired by the [GPU
-overdraw debug
-feature](https://developer.android.com/studio/profile/dev-options-overdraw.html)
-that exists on Android and developers familiar with that feature will feel at
-home using this tool to improve the Chrome UI or web pages.
-
-To visualizing GPU overdraw in Chrome navigate to about:flags and enable the
-Show overdraw feedback experiment. If you are on Chrome OS then it is also
-recommended to disable the Partial swap experiment as that produces output that
-is easier to analyze.
-
-When enabled, this tool visualize overdraw by color-coding interface elements
-based on how many elements are drawn underneath. The element colors are hinting
-at the amount of overdraw on the screen for each pixel, as follows:
-
-True color: No overdraw
-
-Blue: Overdrawn once
-
-Green: Overdrawn twice
-
-Pink: Overdrawn three times
-
-Red: Overdrawn four or more times
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/sKYz4g05kUmYRmx8p5qR50w/image?w=599&h=386&rev=1&ac=1"
-height=386 width=599>
-
-Example of GPU overdraw feedback output.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/s0J4KvzwLwH8-dNJuiC8UOQ/image?w=599&h=435&rev=22&ac=1"
-height=435 width=599>
-
-Some overdraw is unavoidable. As you are tuning your UI elements or web page,
-the goal is to arrive at a visualization that shows mostly true colors and 1X
-overdraw in blue. The calculator UI shown above is an example of undesirable
-amount of GPU overdraw.
-
-Examples of undesirable and desirable Debug GPU Overdraw output.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/shfmR54KvCMtndr2_oPSxDg/image?w=624&h=473&rev=102&ac=1"
-height=473 width=624>
-
-# Fixing Overdraw
-
-There are several strategies you can pursue to reduce or eliminate overdraw. If
-you are working on the Chrome OS UI then it usually comes down to using fewer
-Aura windows with opacity set to TRANSLUCENT. For Chrome apps and web-pages in
-general, the following strategies will likely apply:
-
- Removing unnecessary use of “position:fixed;”.
-
- Avoid use of 3D transformations and translateZ=0.
-
- Use { alpha: false } for &lt;canvas&gt; elements unless alpha is needed.
-
-# Tracing
-
-If you are analyzing GPU overdraw for animations or creating automated
-performance tests then overdraw feedback in the form of trace events can be
-useful. See [The Trace Event Profiling Tool
-(about:tracing)](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool)
-for more details about how to record tracing runs. Enable the viz.overdraw
-tracing category to have Chrome record the amount of overdraw for each frame.
-The result is presented as a GPU Overdraw counter that changes over time as
-overdraw increase or decrease.
-
-<img alt="image"
-src="https://docs.google.com/a/google.com/drawings/d/sLB42g9KPAjoPQGg8bqA4Sg/image?w=599&h=435&rev=21&ac=1"
-height=435 width=599>
-
-The value of the counter is the percentage of overdraw in the last frame
-presented. No overdraw for one half the screen and 1X overdraw for the other
-half results in a Gpu Overdraw counter value of 50. This metric is only
-available when ARB_occlusion_query is available.
-
-*Under construction...* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step1.png.sha1 b/chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step1.png.sha1
deleted file mode 100644
index 2149a39551c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3aca56b5c10e827e01cd1653b123d2eee34039de \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step2.png.sha1 b/chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step2.png.sha1
deleted file mode 100644
index b21602825a9..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/Step2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c379322ffda434bf6df24b7d2ffa529a80c8480c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/check_gpu_bots.py b/chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/check_gpu_bots.py
deleted file mode 100644
index bbdd5c23361..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/check_gpu_bots.py
+++ /dev/null
@@ -1,498 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import datetime
-import getpass
-import json
-import os
-import smtplib
-import sys
-import time
-import urllib
-import urllib2
-
-BASEURL = 'http://build.chromium.org/p/'
-BASEBUILDERURL = BASEURL + '%s/builders/%s'
-BASEJSONBUILDERSURL = BASEURL + '%s/json/builders'
-BASEJSONBUILDSURL = BASEURL + '%s/json/builders/%s/builds'
-SPECIFICBUILDURL = BASEURL + '%s/builders/%s/builds/%s'
-
-DEFAULTEMAILPASSWORDFILE = '.email_password'
-DEFAULTPREVIOUSRESULTSFILE = '.poll_gpu_scripts_previous_results'
-
-GMAILSMTPSERVER = 'smtp.gmail.com:587'
-
-def getJsonFromUrl(url):
- c = urllib2.urlopen(url)
- js = c.read()
- c.close()
- return json.loads(js)
-
-def getBuildersJsonForWaterfall(waterfall):
- querystring = '?filter'
- return getJsonFromUrl((BASEJSONBUILDERSURL + '%s') % (waterfall, querystring))
-
-def getLastNBuildsForBuilder(n, waterfall, builder):
- if n == 0 or n < -1:
- return {}
-
- querystring = ''
- if n > 0:
- querystring = '?'
- for i in range(n):
- querystring += 'select=-%d&' % (i + 1)
- querystring += 'filter'
-
- return getJsonFromUrl((BASEJSONBUILDSURL + '%s') %
- (waterfall, urllib.quote(builder), querystring))
-
-def getFilteredBuildersJsonForWaterfall(waterfall, filter):
- querystring = '?'
- for botindex in range(len(filter)):
- bot = filter[botindex]
- querystring += 'select=%s&' % urllib.quote(bot)
- querystring += 'filter'
-
- return getJsonFromUrl((BASEJSONBUILDERSURL + '%s') % (waterfall, querystring))
-
-def getAllGpuBots():
- regularwaterfalls = ['chromium.gpu',
- 'tryserver.chromium.gpu',
- 'chromium.gpu.fyi']
-
- WEBKITGPUBOTS = ['GPU Win Builder',
- 'GPU Win Builder (dbg)',
- 'GPU Win7 (NVIDIA)',
- 'GPU Win7 (dbg) (NVIDIA)',
- 'GPU Mac Builder',
- 'GPU Mac Builder (dbg)',
- 'GPU Mac10.7',
- 'GPU Mac10.7 (dbg)',
- 'GPU Linux Builder',
- 'GPU Linux Builder (dbg)',
- 'GPU Linux (NVIDIA)',
- 'GPU Linux (dbg) (NVIDIA)']
- filteredwaterfalls = [('chromium.webkit', WEBKITGPUBOTS)]
-
- allbots = {k: getBuildersJsonForWaterfall(k) for k in regularwaterfalls}
- filteredbots = {k[0]: getFilteredBuildersJsonForWaterfall(k[0], k[1])
- for k in filteredwaterfalls}
- allbots.update(filteredbots)
-
- return allbots
-
-def timestr(t):
- return time.strftime("%a, %d %b %Y %H:%M:%S", t)
-
-def roughTimeDiffInHours(t1, t2):
- dt = []
- for t in [t1, t2]:
- dt.append(datetime.datetime(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour,
- t.tm_min, t.tm_sec))
- dtd = dt[0] - dt[1]
-
- hours = float(dtd.total_seconds()) / 3600.0
-
- return abs(hours)
-
-def getBotStr(bot, t):
- s = ' %s::%s\n' % (bot['waterfall'], bot['name'])
-
- if 'failurestring' in bot:
- s += ' failure: %s\n' % bot['failurestring']
- if 'endtime' in bot:
- s += (' last build end time: %s (roughly %f hours ago)\n' %
- (timestr(bot['endtime']), roughTimeDiffInHours(t, bot['endtime'])))
- if 'boturl' in bot:
- s += ' bot url: %s\n' % bot['boturl']
- if 'buildurl' in bot:
- s += ' build url: %s\n' % bot['buildurl']
- s += '\n'
-
- return s
-
-def getBotsStr(bots):
- t = time.localtime()
- s = ''
- for bot in bots:
- s += getBotStr(bot, t)
- s += '\n'
- return s
-
-def getOfflineBots(bots):
- offlinebots = []
- for waterfallname in bots:
- waterfall = bots[waterfallname]
- for botname in waterfall:
- bot = waterfall[botname]
- if bot['state'] != 'offline':
- continue
- botspec = {'waterfall': waterfallname, 'name': botname, 'impl': bot}
- mrbuild = getMostRecentlyCompletedBuildForBot(botspec)
- if mrbuild:
- botspec['endtime'] = time.localtime(mrbuild['times'][1])
- botspec['boturl'] = BASEBUILDERURL % (waterfallname,
- urllib.quote(botname))
- else:
- print 'no most recent build available: %s::%s' % (waterfallname,
- botname)
- offlinebots.append(botspec)
- return offlinebots
-
-def getOfflineBotsStr(offlinebots):
- return 'Offline bots:\n%s' % getBotsStr(offlinebots)
-
-def getMostRecentlyCompletedBuildForBot(bot):
- if 'impl' in bot and 'mrbuild' in bot['impl']:
- return bot['impl']['mrbuild']
-
- numbuilds = 10 # TODO?
- builds = getLastNBuildsForBuilder(numbuilds, bot['waterfall'], bot['name'])
- for i in range(numbuilds):
- currbuildname = '-%d' % (i + 1)
- currbuild = builds[currbuildname]
- if 'results' in currbuild and currbuild['results'] is not None:
- if 'impl' in bot:
- bot['impl']['mrbuild'] = currbuild
- return currbuild
-
-def getFailedBots(bots):
- failedbots = []
- for waterfallname in bots:
- waterfall = bots[waterfallname]
- for botname in waterfall:
- bot = waterfall[botname]
- botspec = {'waterfall': waterfallname, 'name': botname, 'impl': bot}
- mrbuild = getMostRecentlyCompletedBuildForBot(botspec)
- if mrbuild and 'text' in mrbuild and 'failed' in mrbuild['text']:
- botspec['failurestring'] = ' '.join(mrbuild['text'])
- botspec['boturl'] = BASEBUILDERURL % (waterfallname,
- urllib.quote(botname))
- botspec['buildurl'] = SPECIFICBUILDURL % (waterfallname,
- urllib.quote(botname), mrbuild['number'])
- failedbots.append(botspec)
- elif not mrbuild:
- print 'no most recent build available: %s::%s' % (waterfallname,
- botname)
- return failedbots
-
-def getFailedBotsStr(failedbots):
- return 'Failed bots:\n%s' % getBotsStr(failedbots)
-
-def getShallowBots(bots):
- shallowbots = []
- for bot in bots:
- shallowbot = {}
- for k in bot:
- if k != 'impl':
- shallowbot[k] = bot[k]
- shallowbots.append(shallowbot)
- return shallowbots
-
-def jsonableToTime(j):
- return time.struct_time((j['year'], j['mon'], j['day'], j['hour'], j['min'],
- j['sec'], 0, 0, 0))
-
-# mutates bots
-def offlineBotsJsonableToTime(bots):
- for bot in bots['offline']:
- bot['endtime'] = jsonableToTime(bot['endtime'])
- return bots
-
-def getPreviousResults(previous_results_file):
- file = (previous_results_file if previous_results_file is not None
- else DEFAULTPREVIOUSRESULTSFILE)
- previous_results = {}
- if os.path.isfile(file):
- with open(file, 'r') as f:
- previous_results = offlineBotsJsonableToTime(json.loads(f.read()))
- return previous_results
-
-def timeToJsonable(t):
- return {'year': t.tm_year, 'mon': t.tm_mon, 'day': t.tm_mday,
- 'hour': t.tm_hour, 'min': t.tm_min, 'sec': t.tm_sec}
-
-# this mutates the offline bots, do it last
-def offlineBotsTimeToJsonable(bots):
- t = time.localtime()
- for bot in bots:
- bot['hourssincelastrun'] = roughTimeDiffInHours(bot['endtime'], t)
- bot['endtime'] = timeToJsonable(bot['endtime'])
- return bots
-
-def getSummary(offlinebots, failedbots):
- shallowofflinebots = offlineBotsTimeToJsonable(getShallowBots(offlinebots))
- shallowfailedbots = getShallowBots(failedbots)
- return {'offline': shallowofflinebots, 'failed': shallowfailedbots}
-
-def writeResults(summary, previous_results_file):
- file = (previous_results_file if previous_results_file is not None
- else DEFAULTPREVIOUSRESULTSFILE)
- with open(file, 'w') as f:
- f.write(json.dumps(summary))
-
-def findBot(name, lst):
- for bot in lst:
- if bot['name'] == name:
- return bot
- return None
-
-def getNoteworthyEvents(offlinebots, failedbots, previous_results):
- t = time.localtime()
-
- CRITICALNUMHOURS = 1.0
-
- previousoffline = (previous_results['offline'] if 'offline'
- in previous_results else [])
- previousfailures = (previous_results['failed'] if 'failed'
- in previous_results else [])
-
- noteworthyoffline = []
- for bot in offlinebots:
- if roughTimeDiffInHours(bot['endtime'], t) > CRITICALNUMHOURS:
- previousbot = findBot(bot['name'], previousoffline)
- if (previousbot is None or
- previousbot['hourssincelastrun'] < CRITICALNUMHOURS):
- noteworthyoffline.append(bot)
-
- noteworthynewfailures = []
- for bot in failedbots:
- previousbot = findBot(bot['name'], previousfailures)
- if previousbot is None:
- noteworthynewfailures.append(bot)
-
- noteworthynewofflinerecoveries = []
- for bot in previousoffline:
- if bot['hourssincelastrun'] < CRITICALNUMHOURS:
- continue
- currentbot = findBot(bot['name'], offlinebots)
- if currentbot is None:
- noteworthynewofflinerecoveries.append(bot)
-
- noteworthynewfailurerecoveries = []
- for bot in previousfailures:
- currentbot = findBot(bot['name'], failedbots)
- if currentbot is None:
- noteworthynewfailurerecoveries.append(bot)
-
- return {'offline': noteworthyoffline, 'failed': noteworthynewfailures,
- 'recoveredfailures': noteworthynewfailurerecoveries,
- 'recoveredoffline': noteworthynewofflinerecoveries}
-
-def getNoteworthyStr(noteworthy):
- t = time.localtime()
-
- s = ''
-
- if noteworthy['offline']:
- s += 'IMPORTANT bots newly offline for over an hour:\n'
- for bot in noteworthy['offline']:
- s += getBotStr(bot, t)
- s += '\n'
-
- if noteworthy['failed']:
- s += 'IMPORTANT new failing bots:\n'
- for bot in noteworthy['failed']:
- s += getBotStr(bot, t)
- s += '\n'
-
- if noteworthy['recoveredoffline']:
- s += 'IMPORTANT newly recovered previously offline bots:\n'
- for bot in noteworthy['recoveredoffline']:
- s += getBotStr(bot, t)
- s += '\n'
-
- if noteworthy['recoveredfailures']:
- s += 'IMPORTANT newly recovered failing bots:\n'
- for bot in noteworthy['recoveredfailures']:
- s += getBotStr(bot, t)
- s += '\n'
-
- return s
-
-def hasEmailable(noteworthy, send_email_for_recovered_offline_bots,
- send_email_for_recovered_failing_bots):
- if noteworthy['offline'] or noteworthy['failed']:
- return True
-
- if send_email_for_recovered_offline_bots and noteworthy['recoveredoffline']:
- return True
-
- if (send_email_for_recovered_failing_bots and
- noteworthy['recoveredfailures']):
- return True
-
- return False
-
-def get_email_body(tstr, offlinestr, failedstr, noteworthystr):
- return '%s%s%s%s' % (tstr, offlinestr, failedstr, noteworthystr)
-
-def send_email(email_from, email_to, email_password, body):
- subject = 'Chrome GPU Bots Notification'
- message = 'From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s' % (email_from,
- ','.join(email_to), subject, body)
-
- try:
- server = smtplib.SMTP(GMAILSMTPSERVER)
- server.starttls()
- server.login(email_from, email_password)
- server.sendmail(email_from, email_to, message)
- server.quit()
- except Exception as e:
- print 'Error sending email: %s' % str(e)
-
-def testEmailLogin(email_from, email_password):
- server = smtplib.SMTP(GMAILSMTPSERVER)
- server.starttls()
- server.login(email_from, email_password)
- server.quit()
-
-def getEmailPassword(email_password_file):
- password = ''
-
- password_file = (email_password_file if email_password_file is not None
- else DEFAULTEMAILPASSWORDFILE)
-
- if os.path.isfile(password_file):
- with open(password_file) as f:
- password = f.read().strip()
- else:
- password = getpass.getpass(
- 'Please enter email password for source account: ')
-
- return password
-
-def checkBots(email_from, email_to, send_email_for_recovered_offline_bots,
- send_email_for_recovered_failing_bots, send_email_on_error,
- email_password, previous_results_file):
- tstr = 'Current time: %s\n\n' % (timestr(time.localtime()))
- print tstr
-
- try:
- # TODO(hartmanng) parallelize the http requests
- bots = getAllGpuBots()
-
- offlinebots = getOfflineBots(bots)
- offlinestr = getOfflineBotsStr(offlinebots)
- print offlinestr
-
- failedbots = getFailedBots(bots)
- failedstr = getFailedBotsStr(failedbots)
- print failedstr
-
- previous_results = getPreviousResults(previous_results_file)
- noteworthy = getNoteworthyEvents(offlinebots, failedbots, previous_results)
- noteworthystr = getNoteworthyStr(noteworthy)
- print noteworthystr
-
- # this mutates the offline bots, do it last
- summary = getSummary(offlinebots, failedbots)
- writeResults(summary, previous_results_file)
-
- if (email_from is not None and email_to is not None and
- hasEmailable(noteworthy, send_email_for_recovered_offline_bots,
- send_email_for_recovered_failing_bots)):
- send_email(email_from, email_to, email_password,
- get_email_body(tstr, offlinestr, failedstr, noteworthystr))
- except Exception as e:
- errorstr = 'Error: %s' % str(e)
- print errorstr
- if send_email_on_error:
- send_email(email_from, email_to, email_password, errorstr)
-
-def parseArgs(sysargs):
- parser = argparse.ArgumentParser(prog=sysargs[0],
- description='Query the Chromium GPU Bots Waterfall, output ' +
- 'potential problems, and optionally repeat automatically and/or ' +
- 'email notifications of results.')
- parser.add_argument('--repeat-delay', type=int, dest='repeat_delay',
- required=False,
- help='How often to automatically re-run the script, in minutes.')
- parser.add_argument('--email-from', type=str, dest='email_from',
- required=False,
- help='Email address to send from. Requires also specifying ' +
- '\'--email-to\'.')
- parser.add_argument('--email-to', type=str, dest='email_to', required=False,
- nargs='+',
- help='Email address(es) to send to. Requires also specifying ' +
- '\'--email-from\'')
- parser.add_argument('--send-email-for-recovered-offline-bots',
- dest='send_email_for_recovered_offline_bots', action='store_true',
- default=False,
- help='Send an email out when a bot which has been offline for more ' +
- 'than 1 hour goes back online.')
- parser.add_argument('--send-email-for-recovered-failing-bots',
- dest='send_email_for_recovered_failing_bots',
- action='store_true', default=False,
- help='Send an email when a failing bot recovers.')
- parser.add_argument('--send-email-on-error',
- dest='send_email_on_error',
- action='store_true', default=False,
- help='Send an email when the script has an error. For example, if ' +
- 'the server is unreachable.')
- parser.add_argument('--email-password-file',
- dest='email_password_file',
- required=False,
- help=(('File containing the plaintext password of the source email ' +
- 'account. By default, \'%s\' will be tried. If it does not exist, ' +
- 'you will be prompted. If you opt to store your password on disk ' +
- 'in plaintext, use of a dummy account is strongly recommended.')
- % DEFAULTEMAILPASSWORDFILE))
- parser.add_argument('--previous-results-file',
- dest='previous_results_file',
- required=False,
- help=(('File to store the results of the previous invocation of ' +
- 'this script. By default, \'%s\' will be used.')
- % DEFAULTPREVIOUSRESULTSFILE))
-
- args = parser.parse_args(sysargs[1:])
-
- if args.email_from is not None and args.email_to is None:
- parser.error('--email-from requires --email-to.')
- elif args.email_to is not None and args.email_from is None:
- parser.error('--email-to requires --email-from.')
- elif args.email_from is None and args.send_email_for_recovered_offline_bots:
- parser.error('--send-email-for-recovered-offline-bots requires ' +
- '--email-to and --email-from.')
- elif (args.email_from is None and args.send_email_for_recovered_failing_bots):
- parser.error('--send-email-for-recovered-failing-bots ' +
- 'requires --email-to and --email-from.')
- elif (args.email_from is None and args.send_email_on_error):
- parser.error('--send-email-on-error ' +
- 'requires --email-to and --email-from.')
- elif (args.email_password_file and
- not os.path.isfile(args.email_password_file)):
- parser.error('File does not exist: %s', args.email_password_file)
-
- return args
-
-def main(sysargs):
- args = parseArgs(sysargs)
-
- email_password = None
- if args.email_from is not None and args.email_to is not None:
- email_password = getEmailPassword(args.email_password_file)
- try:
- testEmailLogin(args.email_from, email_password)
- except Exception as e:
- print 'Error logging into email account: %s' % str(e)
- sys.exit(1)
-
- while True:
- checkBots(args.email_from, args.email_to,
- args.send_email_for_recovered_offline_bots,
- args.send_email_for_recovered_failing_bots,
- args.send_email_on_error,
- email_password,
- args.previous_results_file)
- if args.repeat_delay is None:
- break
- print 'Will run again in %d minutes...\n' % args.repeat_delay
- time.sleep(args.repeat_delay * 60)
-
-if __name__ == '__main__':
- main(sys.argv)
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/index.md b/chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/index.md
deleted file mode 100644
index 0ed18dc2cb7..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/check_gpu_bots-script/index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/gpu-wrangling
- - GPU Bots & Pixel Wrangling
-page_name: check_gpu_bots-script
-title: check_gpu_bots script
----
-
-This is a script I hacked up during my wrangling shift. Hopefully this is only a
-temporary measure, and will be deprecated by the awesome work being done on the
-hackability CY and the sheriff-o-matic.
-
-#### Purpose
-
-While wrangling, I found it cumbersome and time consuming to keep track of
-various waterfalls in a browser window with 10+ tabs. This script is meant to be
-a quick-and-dirty way to avoid having to stare at the waterfalls quite so much
-during a shift.
-
-#### How to get it
-
-[Here](/developers/how-tos/gpu-wrangling/check_gpu_bots-script/check_gpu_bots.py)
-is an older version of the script available for direct download for convenience,
-but there will be little continued support for it. The canonical version is now
-checked into the Chromium repository at src/gpu/tools/check_gpu_bots.py.
-
-#### Features
-
-The script, when run directly with no args, simply polls the waterfall's [JSON
-API](http://build.chromium.org/p/chromium/json/help), gathers some information
-about (hopefully all of) the relevant GPU bots. It then prints out a summary of
-the offline or failing bots, and exits.
-
-It can also be set up to repeat itself periodically, sort of like an
-auto-refresh.
-
-The feature that made it most useful to me is that it can also optionally email
-you when there's something that needs to be looked into. By default, "needs to
-be looked into" is roughly defined as
-
-* there is at least one bot whose most recent build failed, and whose
- most recent build had passed on the previous execution of the
- script, OR
-* there is at least one bot which has been in the "offline" state for
- over an hour, and hadn't been the last time the script executed
-
-As described above, it only sends an email *once* per bot, the first time
-something goes wrong. I did that to prevent getting spammed. Currently this
-can't be overridden with command-line arguments, but I intend to add the ability
-to override this.
-
-**NOTE** that currently only gmail addresses are supported as the source email
-address, since the script hard-codes gmail's smtp server address. In addition,
-if you use a weak password, gmail may require you to explicitly allow "[less
-secure apps](https://support.google.com/accounts/answer/6010255)".
-
-Running the script on repeat, and having it set up to email you in case of a
-problem, takes away a good deal of staring at waterfalls. I recommend that you
-take a look at the waterfall from time to time, just because this script is not
-time-tested, and bugs aren't outside the realm of possibility.
-
-### Examples
-
-* ./check_gpu_bots.py
- * This runs once, and prints the results to stdout.
-* ./check_gpu_bots.py --help
- * This prints basic usage information, including the list of
- possible command-line arguments.
-* ./check_gpu_bots.py --email-from &lt;source email&gt; --email-to
- &lt;dest email&gt; --send-email-on-error --repeat-delay 10
- * '--repeat-delay 10' sets the script to poll the waterfall every
- 10 minutes. '--send-email-on-error' tells the script to email
- you in case of error/exception (for example, an unreachable
- server), as well as the normal cases. The rest tells the script
- to send an email from &lt;source email&gt; to &lt;dest
- email&gt;. You do have to be in control of &lt;source email&gt;
- and will need to supply the password, either by saving it in a
- file on disk, or supplying it to the script's prompt. If you opt
- to save the password on disk, it is very strongly recommended
- that you use a dummy account for the source email address. Also
- note that the script can accept multiple destination email
- addresses.
-
-#### Bugs
-
-Please report bugs to [hartmanng@chromium.org](mailto:hartmanng@chromium.org).
-Feedback, features requests, and suggestions are also welcome. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/index.md b/chromium/docs/website/site/developers/how-tos/gpu-wrangling/index.md
deleted file mode 100644
index 669e33e8948..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: gpu-wrangling
-title: GPU Bots & Pixel Wrangling
----
-
-This page has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gpu/pixel_wrangling.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/wrangler.png.sha1 b/chromium/docs/website/site/developers/how-tos/gpu-wrangling/wrangler.png.sha1
deleted file mode 100644
index 69b73bf2115..00000000000
--- a/chromium/docs/website/site/developers/how-tos/gpu-wrangling/wrangler.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e5eff2b13f0cec322db6d9a08c0d3708ec82a5d8 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers/index.md b/chromium/docs/website/site/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers/index.md
deleted file mode 100644
index 55bdac46b33..00000000000
--- a/chromium/docs/website/site/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers/index.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: how-to-set-up-visual-studio-debugger-visualizers
-title: Setting up Visual Studio Debugger Visualizers
----
-
-[TOC]
-
-## Introduction
-
-Visual Studio (2013 and 2015) allows you to plug in additional "visualizers" to
-display data in the watch windows. This makes debugging some of our more complex
-data types much easier. To add macros:
-
-* Copy the contents of Chrome\\src\\tools\\win\\DebugVisualizers\\ to
- %USERPROFILE%\\My Documents\\Visual Studio 2013\\Visualizers\\ (or
- for newer versions, %USERPROFILE%\\Documents\\Visual Studio
- 2015\\Visualizers\\)
-* Start the debugger, and be amazed at the fancy new way it displays
- your favorite objects. When you edit the file, you shouldn't have to
- restart all of Visual Studio - it will get re-loaded when you start
- the debugger.
-
-## Definitions
-
-* DisplayString: an expression (string literal or expression) to be
- shown in the Watch, QuickWatch or Command window; if the preview
- section is present and you also have a AutoExpand rule for it, the
- AutoExpand rule is ignored.
-* Expand: offer the possibility to construct hierarchies.
-
-## References
-
-* <http://blogs.msdn.com/b/vcblog/archive/2013/06/28/using-visual-studio-2013-to-write-maintainable-native-visualizations-natvis.aspx>
-* <https://code.msdn.microsoft.com/windowsdesktop/Writing-type-visualizers-2eae77a2> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/index.md b/chromium/docs/website/site/developers/how-tos/index.md
deleted file mode 100644
index 71dc8997c76..00000000000
--- a/chromium/docs/website/site/developers/how-tos/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: how-tos
-title: How-Tos
----
-
-* Build instructions:
- [Windows](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/windows_build_instructions.md),
- [Mac OS
- X](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/mac_build_instructions.md),
- [Linux](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_build_instructions.md),
- [ChromeOS](http://www.chromium.org/developers/how-tos/build-instructions-chromeos),
- [Android](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md),
- and
- [iOS](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ios/build_instructions.md)
-* Debugging instructions:
- [Windows](/developers/how-tos/debugging-on-windows), [Mac OS
- X](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/mac/debugging.md),
- [Linux](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/debugging.md),
- and
- [Android](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_debugging_instructions.md)
-* [Running Chrome
- tests](http://code.google.com/p/chromium/wiki/RunningChromeUITests)
-* [Linux
- Development](http://code.google.com/p/chromium/wiki/LinuxDevelopment)
- tips and porting guide
-* [Using Git](http://code.google.com/p/chromium/wiki/UsingGit) for
- version control and code reviews
-
-For more, see this list of sub-pages:
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/how-tos/inspecting-ash/Screenshot from 2017-08-28 14_28_36.png.sha1 b/chromium/docs/website/site/developers/how-tos/inspecting-ash/Screenshot from 2017-08-28 14_28_36.png.sha1
deleted file mode 100644
index 63a385cedbb..00000000000
--- a/chromium/docs/website/site/developers/how-tos/inspecting-ash/Screenshot from 2017-08-28 14_28_36.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-52e45f4adaa97e6521101b5bca90ad607dfeb27b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/inspecting-ash/XoWGyYBg5EA.png.sha1 b/chromium/docs/website/site/developers/how-tos/inspecting-ash/XoWGyYBg5EA.png.sha1
deleted file mode 100644
index 1a88f4ac3d8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/inspecting-ash/XoWGyYBg5EA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b03a321a3d40a7dfed7253685b1643a02b30f015 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/inspecting-ash/chrome_inspect_other.png.sha1 b/chromium/docs/website/site/developers/how-tos/inspecting-ash/chrome_inspect_other.png.sha1
deleted file mode 100644
index 4ff9e28d952..00000000000
--- a/chromium/docs/website/site/developers/how-tos/inspecting-ash/chrome_inspect_other.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bd3dd24dd111cae39013a26a374e812ee0ddb31a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/inspecting-ash/distances.png.sha1 b/chromium/docs/website/site/developers/how-tos/inspecting-ash/distances.png.sha1
deleted file mode 100644
index 5ced44e39f1..00000000000
--- a/chromium/docs/website/site/developers/how-tos/inspecting-ash/distances.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-704ef674cccccb5cdbf22b4b7cd556c7afa20dfd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/inspecting-ash/dom_tree.png.sha1 b/chromium/docs/website/site/developers/how-tos/inspecting-ash/dom_tree.png.sha1
deleted file mode 100644
index a9f9bf8433a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/inspecting-ash/dom_tree.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fe3985fd776e65456fc85c54bd68d613b2f063a7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/inspecting-ash/index.md b/chromium/docs/website/site/developers/how-tos/inspecting-ash/index.md
deleted file mode 100644
index 1732c95d2fe..00000000000
--- a/chromium/docs/website/site/developers/how-tos/inspecting-ash/index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: inspecting-ash
-title: Inspecting Chrome Native UI with Chrome UI DevTools
----
-
-Aura/Views UI can now be 'inspected' just like a webpage inspect-able using
-Chrome DevTools. This is accomplished by re-using the existing frontend DevTools
-inspector and creating a backend in Chrome and Components which interact with
-DevTools inspector using the DevTools protocol language. We name this tool
-Chrome UI Devtools. The design document for this tool can be found
-[here](https://docs.google.com/document/d/1zpXnSLFrTbLRBJNnO2lWXV--nTOUWfBLPXwA9BDEsKA/edit?usp=sharing).
-
-And,
-[here](https://docs.google.com/presentation/d/1q3RBp-QEIx5snjbi3_FNl1pp8wf74DXFpt_NgT0KMB0/edit?usp=sharing)
-is a slideshow containing numerous GIFs showing what this is like to use.
-
-**Distances between a pinned element (in solid blue border) and a hovered
-element (in solid green border). Guide lines are displayed along the pinned
-element (could be either window,widget, or view):**
-
-![](/developers/how-tos/inspecting-ash/distances.png)
-
-**Picture 1: Distances between a pinned element and a hovered element.**
-
-**UI Element hierarchy tree:**
-
-![](/developers/how-tos/inspecting-ash/dom_tree.png)
-
-**Picture 2:** **UI Element hierachy tree.**
-
-**Current Features**
-
-* Display window/widget/view in UI Element hierarchy tree (picture 2).
-* Selecting nodes in the inspector displays their attributes (height,
- width, x, y, visibility, view text tool tip if exist) in the CSS
- side panel (picture 2).
-* Attributes (except tooltip) can be edited in the CSS side panel.
-* Any changes in the UI such as addition/removal/rearranging of
- elements in Aura/Views UI will be reflected in the Chrome UI
- Inspector.
-* Hovering over elements in the inspector highlights them in
- Aura/Views UI, displays guide lines around the elements and and
- expands them in the inspector.
-* Entering inspect mode by clicking on the arrow-in-box ![](/developers/how-tos/inspecting-ash/Screenshot%20from%202017-08-28%2014_28_36.png)
- and hovering on any window/widget/view will show the corresponding
- node in DOM tree and element guide lines.
-* Entering inspect mode by clicking on the arrow-in-box ![](/developers/how-tos/inspecting-ash/Screenshot%20from%202017-08-28%2014_28_36.png)
- and hovering on any DOM node will show the corresponding UI Element
- in Chrome UI and element guide lines.
-* Entering inspect mode and clicking on any element will pin the
- element. While the element is being pinned, hovering on another
- element displays the distances between the pinned element and the
- hovered element (as in picture 1). There are 7 position arrangements
- between 2 elements as described in [this design
- document.](https://docs.google.com/document/d/1ySba9uad3ClqlA9CExlII6r0kgyhRnE0QWo11x2Wmbg)
-* Pressing ESC or clicking on the arrow-in-box ![](/developers/how-tos/inspecting-ash/Screenshot%20from%202017-08-28%2014_28_36.png)
- to exit inspect mode.
-* Display hit test target window under mouse cursor in inspect mode.
- Steps are shown in this [presentation
- slide](https://docs.google.com/presentation/d/1ldW2rPAexu-nf-gIS1hUgcyPNpgF1fBaqppezyxBRLE)[.](https://docs.google.com/presentation/d/1ldW2rPAexu-nf-gIS1hUgcyPNpgF1fBaqppezyxBRLE)
-* Support platforms: ChromeOS, Linux and Windows.
-
-**Planned Features**
-
-* Any animations initiated in in Aura/Views UI are displayed in the
- inspector under the "Animations" tab and can be replayed.
-
-**Instructions**
-
-1. Run Chromium with default port 9223 using one of these 2 ways:
- * Start with UI DevTools flag:
- * On Windows : $ chrome.exe --enable-ui-devtools
- * On ChromeOS, Linux: $ ./chrome --enable-ui-devtools
- * If you want to use different port, add port in the flag
- --enable-ui-devtools=&lt;port&gt;
- * Start Chrome without flag (./chrome or chrome.exe):
- * Go to Chrome Omnibox, type about:flags
- * Go to enable native UI inspection, click Enable and restart
- Chrome. This will start Chrome will listening port 9223.
-2. In your Chrome browser, go to Omnibox, either
- * Type `**chrome://inspect#other** then click` `**inspect**` under
- UiDevToolsClient in the listing. This will open up the inspector
- in a new tab (Picture 3).
- * Type direct link:
- **devtools://devtools/bundled/devtools_app.html?uiDevTools=true&ws=localhost:9223/0**
-
-![](/developers/how-tos/inspecting-ash/chrome_inspect_other.png)
-
-Picture 3: Open Chrome UI Inspection window
-
-To remotely debug from different Chrome browser, navigate to
-***devtools://devtools/bundled/devtools_app.html?uiDevTools=true&ws=&lt;ip
-address&gt;:&lt;port&gt;/0*** (the 0 stands for the first inspect-able component
-which is in Aura/Views UI*,* for now).
diff --git a/chromium/docs/website/site/developers/how-tos/inspecting-ash/screenshot2.gif.sha1 b/chromium/docs/website/site/developers/how-tos/inspecting-ash/screenshot2.gif.sha1
deleted file mode 100644
index ff8c760f908..00000000000
--- a/chromium/docs/website/site/developers/how-tos/inspecting-ash/screenshot2.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d07f136ef73b27c1b9aa06017e000de9c4e6368f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/install-depot-tools/index.md b/chromium/docs/website/site/developers/how-tos/install-depot-tools/index.md
deleted file mode 100644
index 60fa7a5cebb..00000000000
--- a/chromium/docs/website/site/developers/how-tos/install-depot-tools/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: install-depot-tools
-title: Install depot_tools
----
-
-Chromium and Chromium OS use a package of scripts called
-[**depot_tools**](/developers/how-tos/depottools) to manage checkouts and code
-reviews.
-
-The depot_tools package includes `gclient`, `gcl`, `git-cl`, `repo`, and others.
-
-View the [**updated depot_tools set-up documentation** in the depot_tools
-tutorial](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up).
-Then continue with the tutorial or [see the depot_tools
-documentation](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html)
-for usage. These same docs are also available as man pages.
-
-See also [How-To: Using depot_tools](/developers/how-tos/depottools) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/leak-gdi-object-in-windows/index.md b/chromium/docs/website/site/developers/how-tos/leak-gdi-object-in-windows/index.md
deleted file mode 100644
index 3ff3c670ded..00000000000
--- a/chromium/docs/website/site/developers/how-tos/leak-gdi-object-in-windows/index.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: leak-gdi-object-in-windows
-title: Leak GDI Objects in Windows
----
-
-## Tools
-
-* Windows Task Manager
- * Add "GDI Objects" column by \[View\]-\[Select Columns...\]
- * You may also want to add "Handle", "Thread" and "USER Objects"
-* GDIView (works Win7 32bit and 64bit)
- * <http://www.nirsoft.net/utils/gdi_handles.html>
- * Note: GdiQueryTable (undocumented GDI32.DLL Win32 API) and
- PEB-&gt;GetSharedGdiHandleTable don't work on Win7.
- * I'm studying how to enumerate GDI handles on Win7.
-
-## Anti Patterns
-
-### DeleteObject with HICON
-
-**DeleteObject WIN32 API works all GDI objects except for icon**
-([97559](http://code.google.com/p/chromium/issues/detail?id=97559))
-
-We must use DestroyIcon.
-
-> In tabe_view.cc(237)
-
-> <http://src.chromium.org/viewvc/chrome/trunk/src/views/controls/table/table_view.cc?annotate=101329>
-
-> 810 HICON empty_icon = 811
-> IconUtil::CreateHICONFromSkBitmap(canvas.ExtractBitmap()); 812
-> ImageList_AddIcon(image_list, empty_icon); 813 ImageList_AddIcon(image_list,
-> empty_icon); 814 DeleteObject(empty_icon);
-
-### Leak Screen DC aka GetDC(NULL)
-
-GetDC(NULL) returns newly created screen DC. So, you must release it by using
-ReleaseDC. You may want to use ScopedGetDC
-(<http://codesearch.google.com/#OAMlx_jo-ck/src/base/win/scoped_hdc.h>)
-
-**I would like to draw in bitmap** (<http://crbug.com/98523>)
-
-> In print_web_view_helper_win.cc(237)
-
-> <http://src.chromium.org/viewvc/chrome/trunk/src/chrome/renderer/print_web_view_helper_win.cc?annotate=103082>
-
-> 235 // Page used alpha blend, but printer doesn't support it. Rewrite the
-
-> 236 // metafile and flatten out the transparency.
-
-> 237 HDC bitmap_dc = CreateCompatibleDC(GetDC(NULL));
-
-> 238 if (!bitmap_dc)
-
-**Easy way to know screen DPI**:
-
-> In chrome_content_utility_cline.cc(299)
-
-> <http://src.chromium.org/viewvc/chrome/trunk/src/chrome/utility/chrome_content_utility_client.cc?annotate=101911>
-
-> 299 int screen_dpi = GetDeviceCaps(GetDC(NULL), LOGPIXELSX);
-
-> 300 xform.eM11 = xform.eM22 =
-
-> 301 static_cast&lt;float&gt;(screen_dpi) /
-> static_cast&lt;float&gt;(render_dpi);
-
-### Play Enhanced Metafile Record More Than Once
-
-Oops, some devices don't support alpha blending. We should do alpha blending by
-ourselves by using bitmap DC (<http://crbug.com/98523>)
-
-Since, metafile records having GDI object creation command and stores into
-*lpHandleTable* of second parameter of **EnhMetaFileProc**.
-
-> In crhome/renderer/print_web_view_helper_win.cc(40-69)
-
-> <http://src.chromium.org/viewvc/chrome/trunk/src/chrome/renderer/print_web_view_helper_win.cc?annotate=103082>
-
-> 40 // Play this command to the bitmap DC.
-
-> 41 PlayEnhMetaFileRecord(\*bitmap_dc, handle_table, record, num_objects);
-
-> ...
-
-> 68 // Play this command to the metafile DC.
-
-> 69 PlayEnhMetaFileRecord(dc, handle_table, record, num_objects);
-
-## References
-
-* GdIQueryTable
- * Explanation of GDI handle table
- * <http://www.fileinview.com/chms/Windows%20Graphics%20Programming%20Win32%20GDI%20and%20DirectDraw/Win32GDI/32.htm>
- * Implementation of GDIQueryTable in
- [ReactOS](http://www.reactos.org)
- * <http://doxygen.reactos.org/d9/db3/dll_2win32_2gdi32_2misc_2misc_8c_a4086f8e85c3c92a3c6d518ef5bf8a690.html>
- * WinXP/32bit returns 0x00410000.
-* Process Environment Block (PEB)
- * <http://en.wikipedia.org/wiki/Win32_Thread_Information_Block>
- * <http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Thread/TEB.html>
- * reinterpret_cast&lt;PEB\*&gt;(__readfsdword(0x30))-&gt;GdiSharedHandleTable
- (PEB+0x94)
-* GDI Object Handle Encoding
- * \[0:15\] Index
- * \[16:22\] Object Type (1=DC, 4=Region, 5=Bitmap, 8=Pallete,
- A=Font, 10=Brush, 21=EnhMF, 30=Pen, 50=ExtPen)
- * \[23:23\] Stock Object
- * \[24:31\] Unknown \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/mac-development/index.md b/chromium/docs/website/site/developers/how-tos/mac-development/index.md
deleted file mode 100644
index c535ec964df..00000000000
--- a/chromium/docs/website/site/developers/how-tos/mac-development/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: mac-development
-title: Mac Development
----
-
-Resources for developers new to the Mac platform:
-
-* Depending on what you're touching, you may not need to modify UI
- code or write Objective C at all in which case you don't really need
- any of this.
-* [Cocoa Programming for Mac OS
- X](http://www.amazon.com/exec/obidos/ASIN/0321503619) by Aaron
- Hillegass is a great starter book on Cocoa programming, working
- through the examples will get you pretty far in terms of
- understanding the fundamentals of Cocoa.
-* [From C++ to
- Objective-C](http://ktd.club.fr/programmation/fichiers/cpp-objc-en.pdf)
- by Pierre Chatelier is a free online book introducing Objective C.
-* [Objective-C Development in
- Chrome](https://docs.google.com/a/chromium.org/document/d/1HDxOA0TD97e8MhS__7KBSAJRzKWyi0hqVTc13WSHFqc/edit?usp=sharing)
- by krstnmnlsn is a collection of basic information about working
- with Objective C in Chrome along with pitfalls to avoid.
-* [Intro to Chrome Mac
- Development](https://docs.google.com/presentation/d/1H8UOJmSJFQl3hgzDAjmObYTqHDTF98hj_ENpVydJ4OE/edit?usp=sharing)
- is a shorter summary of things specific to Chrome + Mac, with links
- to useful parts of the code.
-
-More in-depth stuff:
-
-* [Mac OS X
- Internals](http://www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542)
- by Amit Singh is the defacto reference for low level OS X
- programming topics.
-* [Advanced Mac OS X
- Programming](http://www.amazon.com/Advanced-Mac-Programming-Core-Unix/dp/0974078514)
- by Mark Dalrymple and Aaron Hillegass .
-
-Stuff you should read on this site:
-
-* [Mac debugging tips](/developers/how-tos/debugging-on-os-x) - a page
- with details pertaining to debugging Chrome on Mac. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/make-a-web-standards-proposal/index.md b/chromium/docs/website/site/developers/how-tos/make-a-web-standards-proposal/index.md
deleted file mode 100644
index 87e50cc389e..00000000000
--- a/chromium/docs/website/site/developers/how-tos/make-a-web-standards-proposal/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: make-a-web-standards-proposal
-title: How to make a web standards proposal
----
-
-**Please see <https://www.chromium.org/blink/launching-features>** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/old-get-the-code/index.md b/chromium/docs/website/site/developers/how-tos/old-get-the-code/index.md
deleted file mode 100644
index 68ada5560b8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/old-get-the-code/index.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: old-get-the-code
-title: The old instructions for getting the code
----
-
-## *This page is obsolete. Please see [Get the Code: Checkout, Build, & Run Chromium](/developers/how-tos/get-the-code) instead.*
-
-## Prerequisites
-
-Chromium supports building on Windows, Mac and Linux host systems. Linux is
-required for building Android, and a Mac is required for building iOS.
-
-### Platform-specific requirements
-
-This page documents common checkout and build instructions. There are
-platform-specific pages with additional information and requirements:
-
-* [Linux](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_build_instructions.md)
-* [Windows](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/windows_build_instructions.md)
-* [Mac](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/mac_build_instructions.md)
-* [ChromeOS](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/chromeos_build_instructions.md)
-* [iOS](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ios_build_instructions.md)
-* [Cast](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/cast_build_instructions.md)
-* [Android](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md)
-
-### Set up your environment
-
-Check out and install the [depot_tools
-package](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up).
-This contains the custom tools necessary to check out and build.
-
-Create a chromium directory for the checkout and change to it (you can call this
-whatever you like and put it wherever you like, as long as the full path has no
-spaces):
-
-```none
-mkdir chromium
-cd chromium
-```
-
-## Check out the source code
-
-Use the "fetch" tool that came with depot_tools:
-
-```none
-fetch chromium    # [fetch --no-history chromium]
-cd src    # All other commands are executed from the src/ directory.
-```
-
-Use `--no-history` if you don't need repo history and want a faster checkout.
-Expect a checkout to take at least 30 minutes on fast connections, and many
-hours on slower connections.
-
-### Post-sync hooks
-
-Some platform-specific pages (linked above) may have extra instructions. In
-particular, on Ubuntu Linux run:
-
-```none
-./build/install-build-deps.sh
-```
-
-**Optional:** [install API keys](/developers/how-tos/api-keys) which allow your
-build to use certain Google services. This isn't necessary for most development
-and testing purposes.
-
-Run hooks to fetch everything needed for your build setup.
-
-```none
-gclient runhooks
-```
-
-### Update the checkout
-
-To sync to newer versions of the code (not necessary the first time), run the
-following in your src/ directory:
-
-```none
-git rebase-update
-gclient sync
-```
-
-The first command updates the primary Chromium source repository and rebases
-your local development branches on top of tip-of-tree. The second command
-updates all of the dependencies specified in the DEPS file. See also "More help
-managing your checkout" below.
-
-## Setting up the build
-
-GN is our meta-build system. It reads build configuration from `BUILD.gn` files
-and writes Ninja files to your build directory. To create a GN build directory:
-
-```none
-gn gen out/Default
-```
-
-* You only have to do this once, it will regenerate automatically when
- you build if the build files changed.
-* You can replace `out/Default` with another name inside the `out`
- directory.
-* To specify build parameters for GN builds, including release
- settings, see [GN build
- configuration](/developers/gn-build-configuration). The default will
- be a debug component build matching the current host operating
- system and CPU.
-* For more info on GN, run `gn help` on the command line or read the
- [quick start
- guide](https://chromium.googlesource.com/chromium/src/+/HEAD/tools/gn/docs/quick_start.md).
-
-## Building
-
-Build Chromium (the "chrome" target) with Ninja using the command:
-
-```none
-ninja -C out/Default chrome
-```
-
-List all GN targets by running `gn ls out/Default` from the command line. To
-compile one, pass to Ninja the GN label with no preceding "//" (so for
-`//ui/display:display_unittests` use `ninja -C out/Default
-ui/display:display_unittests`).
-
-## Running
-
-You can run chrome with (substituting "Default" with your build directory):
-
-* Linux/ChromeOS: `out/Default/chrome`
-* Windows: `out\Default\chrome.exe`
-* Mac: `out/Default/Chromium.app/Contents/MacOS/Chromium`
-* [Android](/developers/how-tos/android-build-instructions)
-* [iOS](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ios_build_instructions.md)
-
-### Running tests
-
-Run the test targets listed above in the same manner. You can specify only a
-certain set of tests to run using `--gtest_filter`, e.g.
-
-```none
-out/Default/unit_tests --gtest_filter="PushClientTest.*"
-```
-
-You can find out more about GoogleTest on the [GoogleTest wiki
-page](https://github.com/google/googletest)
-
-## Quick start to submit a patch
-
-See [contributing code](/developers/contributing-code) for a more in-depth
-guide.
-
-<pre><code>git checkout -b my_patch
-<i>...write, compile, test...</i>
-git commit -a
-git cl upload
-</code></pre>
-
-The `git cl upload` command will upload your code review to
-[codereview.chromium.org](https://codereview.chromium.org/) for review.
-
-* Add reviewers and submit your code for review by clicking on
- "Publish+Mail Comments" (you can leave the mail message empty).
-* If you have try bot access, you can click "CQ dry run" which will
- compile and run the tests.
-* Once your patch has been reviewed and marked LGTM ("Looks Good To
- Me") by an authorized reviewer, click the "Commit" checkbox below
- the patch to submit to the commit queue.
-
-### More help managing your checkout
-
-* [Depot tools
- manpage](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html)
- and
- [tutorial](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html).
-* [Working with release
- branches](/developers/how-tos/get-the-code/working-with-release-branches).
-* [Working with nested
- repositories](/developers/how-tos/get-the-code/working-with-nested-repos).
-* [Commit or revert changes manually](/system/errors/NodeNotFound).
-* [git-drover](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/git-drover.html)
- for merging changes to release branches.
-
-## Getting help
-
-* Ensure your checkout has been properly updated (`git
- rebase-update`).
-* Check you're on a stable, unmodified branch from master (`git
- map-branches`).
-* Check you have no uncommitted changes (`git status`).
-* Join the `#chromium` IRC channel on `irc.freenode.net` (see the [IRC
- page](/developers/irc) for more).
-* Join the [chromium-dev Google
- Group](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev),
- and other [technical discussion
- groups](/developers/technical-discussion-groups). **These are not
- support channels for Chrome itself but forums for developers.**
-* If you think there is an infrastructure problem that affects many
- developers, file [a new bug with the label
- 'Infra'](https://bugs.chromium.org/p/chromium/issues/entry?template=Build%20Infrastructure).
- It will be looked at by our infrastructure team.
-* If you work at Google, check out the [Googler-specific Chrome
- documentation](http://wiki/Main/ChromeBuildInstructions). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/order-file-development-guide/index.md b/chromium/docs/website/site/developers/how-tos/order-file-development-guide/index.md
deleted file mode 100644
index a40b57bb34f..00000000000
--- a/chromium/docs/website/site/developers/how-tos/order-file-development-guide/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: order-file-development-guide
-title: Order file development guide
----
-
-1. Build chromeos-chrome with profile instrumentation
-
-```none
-export USE="$USE -reorder"
-export EXTRA_BUILD_ARGS="order_profiling=1 order_text_section=''"
-```
-
-2. Add `--no-sandbox` to chrome start arguments (in the buttom of
-/sbin/session_manager_setup.sh).
-
-3. As you prepare, you may have run chrome collecting logs (which you don't want
-yet). Remove them and reboot.
-
-```none
-rm /var/log/chrome/cyglog.*; sudo reboot
-```
-
-4. After you browse several sites (google.com, maps.google.com, youtube.com),
-copy logs to your host machine to some directory.
-
-5. Sanitize logs.
-
-```none
-head -1 cyglog.*
-```
-
-If some log does not contain header (containing /opt/google/chrome/chrome),
-remove it. This log left from before you removed all cyglogs last boot.
-
-6. Merge logs to a single file. This may take some minutes to run.
-
-```none
-$CHROME_SRC/tools/cygprofile/mergetraces.py `ls cyglog.* -Sr` > merged_cyglog
-```
-
-7. Symbolize the log using your instrumented image (from p.1).
-
-```none
-$CHROME_SRC/tools/cygprofile/symbolize.py -t orderfile merged_cyglog /build/x86-alex/opt/google/chrome/chrome > unpatched_orderfile
-```
-
-8. Rebuild chromeos-chrome with new orderfile.
-
-```none
-export USE="$USE -reorder"
-export EXTRA_BUILD_ARGS="order_profiling=0 order_text_section='/home/$USER/trunk/src/scripts/cyglog/unpatched_orderfile'"
-```
-
-9. Patch the orderfile to
-
-```none
-$CHROME_SRC/tools/cygprofile/patch_orderfile.py unpatched_orderfile /build/x86-alex/opt/google/chrome/chrome > orderfile
-```
-
-9. If you want to visually check that the resulting image is reordered, use
-
-```none
-nm -Sn /build/x86-alex/opt/google/chrome/chrome | less
-```
-
-And note, that ChromeMain symbol is not at the beginning of symbols.
-
-In the image built without reordering, ChromeMain immediately follows main and
-is about 10th symbol in the image.
-
-10. Update the repository containing orderfiles.
-
-The repo, containing orderfiles is here:
-http://git.chromium.org/gitweb/?p=chromiumos/profile/chromium.git
-
-Intructions on how to update the repo:
-http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/git-server-side-information
-
-11. Update
-src/third_party/chromiumos-overlay/chromeos-base/chromeos-chrome/chromeos-chrome-9999.ebuild
-to grab the latest version of the orderfile (that you updated in p.10). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/retrieving-crash-reports-on-ios/index.md b/chromium/docs/website/site/developers/how-tos/retrieving-crash-reports-on-ios/index.md
deleted file mode 100644
index 72fd97566a4..00000000000
--- a/chromium/docs/website/site/developers/how-tos/retrieving-crash-reports-on-ios/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: retrieving-crash-reports-on-ios
-title: Retrieving Crash Reports on iOS
----
-
-## [TOC]
-
-There are multiple ways to retrieve crash reports from an iOS device. They are
-listed below from (roughly) easiest to hardest. Please use whichever method
-works best for you.
-
-## Syncing with iTunes
-
-This method involves syncing your device with iTunes. After syncing, crash
-reports will be copied to a specific location on your hard drive. This method is
-also documented at
-<https://developer.apple.com/library/ios/#qa/qa1747/_index.html>.
-
-1. Sync your device with iTunes on your desktop.
-2. After syncing, look for crash logs in the correct directory. See
- below for a list of directories for each operating system.
-3. In this directory, look for files starting with "Chrome_".
-
-(NOTE FOR MAC USERS: ~/Library is hidden by default on Mac OS X. To easily get
-this folder, open the Finder application, then hold the "option" key while
-clicking on the "Go" menu. You should see a menu item for "Library." Click on
-that, then continue navigating to Logs, CrashReporter, etc.
-
-<table>
-<tr>
-
-Operating System
-
-Location
-
-</tr>
-<tr>
-
-<td>Mac OS X:</td>
-
-<td>~/Library/Logs/CrashReporter/MobileDevice/&lt;DEVICE_NAME&gt;</td>
-
-</tr>
-<tr>
-
-<td>Windows XP</td>
-
-<td>C:\\Documents and Settings\\&lt;USERNAME&gt;\\Application Data\\Apple Computer\\Logs\\CrashReporter\\MobileDevice\\&lt;DEVICE_NAME&gt;</td>
-
-</tr>
-<tr>
-
-<td>Windows Vista or 7</td>
-
-<td>C:\\Users\\&lt;USERNAME&gt;\\AppData\\Roaming\\Apple Computer\\Logs\\CrashReporter\\MobileDevice\\&lt;DEVICE_NAME&gt;</td>
-
-</tr>
-</table>
-
-## Emailing from a device
-
-1. Start by opening up the Settings app.
-2. Navigate to General -&gt; About -&gt; Diagnostics & Usage -&gt;
- Diagnostic & Usage Data.
-3. Select a Chrome crash from the list. This will start with “Chrome_”
- and contain the timestamp of the crash.
-4. Tap on the crash and you will see a text field with a crash log.
- Long press to Select All and then Copy the crash text.
-5. Paste it into something you can get off of your device (for example,
- an email to yourself).
-
-## Using the Xcode Organizer
-
-NOTE: This method will only work for iOS developers. If you are not a developer,
-you will not have Xcode installed on your machine.
-
-1. Launch Xcode on your desktop machine.
-2. Open the Xcode Organizer window. (Window menu -&gt; Organizer, or
- Cmd-Shift-2.)
-3. Find your device in the left sidebar, then select “device logs”.
-4. Choose a Chrome crash (or multiple crashes) and select “Export” at
- the bottom of the Organizer window. This will copy the crash reports
- to your hard drive. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/run-chromium-with-flags/index.md b/chromium/docs/website/site/developers/how-tos/run-chromium-with-flags/index.md
deleted file mode 100644
index 91eed9a74ad..00000000000
--- a/chromium/docs/website/site/developers/how-tos/run-chromium-with-flags/index.md
+++ /dev/null
@@ -1,162 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: run-chromium-with-flags
-title: Run Chromium with flags
----
-
-[TOC]
-
-There are command line flags (or "switches") that Chromium (and Chrome) accept
-in order to enable particular features or modify otherwise default
-functionality.
-
-Current switches may be found at
-<http://peter.sh/examples/?/chromium-switches.html>
-
-It is important to note that some switches are intended for development and
-temporary cases. They may break, change, or be removed in the future without
-notice. IT admins looking to manage Chrome for their organization should
-instead use [enterprise policies](http://chromeenterprise.google/polices).
-
-Note that if you look at `chrome://flags` to see if the command line option is
-active, the state might not be accurately reflected. Check `chrome://version`
-for the complete command line used in the current instance.
-
-## Windows
-
-1. Exit any running-instance of Chrome.
-2. Right click on your "Chrome" shortcut.
-3. Choose properties.
-4. At the end of your "Target:" line add the command line flags. For
- example:
- * `--disable-gpu-vsync`
-5. With that example flag, it should look like below (replacing
- "--disable-gpu-vsync" with any other command line flags you want to
- use):
- `chrome.exe --disable-gpu-vsync`
-6. Launch Chrome like normal with the shortcut.
-
-## macOS
-
-1. Quit any running instance of Chrome.
-2. Run your favorite Terminal application.
-3. In the terminal, run commands like below (replacing
- "--remote-debugging-port=9222" with any other command line flags you
- want to use):
-
- ```none
- /Applications/Chromium.app/Contents/MacOS/Chromium --remote-debugging-port=9222
- # For Google Chrome you'll need to escape spaces like so:
- /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
- ```
-
-## Linux
-
-1. Quit any running instance of Chrome.
-2. Run your favorite terminal emulator.
-3. In the terminal, run commands like below (replacing
- "--remote-debugging-port=9222" with any other command line flags you
- want to use):
-
- ```none
- chromium-browser --remote-debugging-port=9222
- google-chrome --foo --bar=2
- ```
-
-## iOS
-
-If you are building Chromium from the source, you can run it with flags by
-adding them in the Experimental Settings.
-
-1. Open the Settings app
-2. Go to Chromium/Experimental Settings
-3. Add your flags in the "Extra flags (one per line)". Don't forget to
- switch on the "Append Extra Flags" setting.
-
-It is not possible to run with flags the official releases (Google Chrome from
-App Store or Testflight).
-
-## V8 Flags
-
-V8 can take a number of flags as well, via Chrome's `js-flags` flag. For
-example, this traces V8 optimizations:
-
-```none
-chrome.exe --js-flags="--trace-opt --trace-deopt --trace-bailout"
-```
-
-To get a listing of all possible V8 flags:
-
-```none
-chrome.exe --js-flags="--help"
-```
-
-Browse [the V8 wiki](http://code.google.com/p/v8/w/list) for more flags for V8.
-
-## Android
-
-Visit '`about:version`' to review the flags that are effective in the app.
-
-If you are running on a rooted device or using a debug build of Chromium, then
-you can set flags like so:
-
-```none
-out/Default/bin/chrome_public_apk argv  # Show existing flags.
-out/Default/bin/content_shell_apk argv --args='--foo --bar'  # Set new flags
-```
-
-You can also install, set flags, and launch with a single command:
-
-```none
-out/Default/bin/chrome_public_apk run --args='--foo --bar'
-out/Default/bin/content_shell_apk run  # Clears any existing flags
-```
-
-For production build on a non-rooted device, you need to enable "Enable command
-line on non-rooted devices" in chrome://flags, then set command line in
-/data/local/tmp/chrome-command-line. When doing that, mind that the first
-command line item should be a "_" (underscore) followed by the ones you actually
-need. Finally, manually restart Chrome ("Relaunch" from chrome://flags page
-might no be enough to trigger reading this file). See
-<https://crbug.com/784947>.
-
-### ContentShell on Android
-
-There's an alternative method for setting flags with ContentShell that doesn't
-require building yourself:
-
-1. Download a [LKGR build of
- Android](https://download-chromium.appspot.com/?platform=Android&type=continuous).
-2. This will include both ChromePublic.apk and ContentShell.apk
-3. Install ContentShell APK to your device.
-4. Run this magic incantation
-
-```none
-adb shell am start \
-  -a android.intent.action.VIEW \
-  -n org.chromium.content_shell_apk/.ContentShellActivity \
-  --es activeUrl "http://chromium.org" \
-  --esa commandLineArgs --show-paint-rects,--show-property-changed-rects
-```
-
-This will launch contentshell with the supplied flags. You can apply whatever
-commandLineArgs you want in that syntax.
-
-### Android WebView
-
-This is documented [in the chromium
-tree](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/commandline-flags.md).
-
-## Chrome OS
-
-1. Put the device into [dev mode, disable rootfs verification, and
- bring up a command
- prompt](/chromium-os/poking-around-your-chrome-os-device).
-2. Modify /etc/chrome_dev.conf (read the comments in the file for more
- details).
-3. Restart the UI via:
- `sudo restart ui`
diff --git a/chromium/docs/website/site/developers/how-tos/run-mojo-shell/index.md b/chromium/docs/website/site/developers/how-tos/run-mojo-shell/index.md
deleted file mode 100644
index ae14142c847..00000000000
--- a/chromium/docs/website/site/developers/how-tos/run-mojo-shell/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: run-mojo-shell
-title: Run Mojo Shell
----
-
-## These instructions now live here: <https://github.com/domokit/mojo/blob/master/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/scopedlogger/index.md b/chromium/docs/website/site/developers/how-tos/scopedlogger/index.md
deleted file mode 100644
index d47cedb1bf9..00000000000
--- a/chromium/docs/website/site/developers/how-tos/scopedlogger/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: scopedlogger
-title: ScopedLogger
----
-
-## This page moved to [third_party/blink/renderer/platform/wtf/ScopedLogger.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/wtf/ScopedLogger.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_09.png.sha1 b/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_09.png.sha1
deleted file mode 100644
index d34605ce81a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_09.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-99c28ed2fd8fb02940d00bd75ecd30724c879bcd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_29.png.sha1 b/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_29.png.sha1
deleted file mode 100644
index 40d8426915c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_52_29.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-103d270f392c7fbc7aec7c4e276b981e257f48f1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_54_06.png.sha1 b/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_54_06.png.sha1
deleted file mode 100644
index 469a5e947d7..00000000000
--- a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_54_06.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e1c341726e0818ad5c87152bceed241101c58103 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_55_28.png.sha1 b/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_55_28.png.sha1
deleted file mode 100644
index 0e531576586..00000000000
--- a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-10 14_55_28.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bf8ab4082db32504ad1b49bae48bf56af7aac4ca \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-24 11_16_39.png.sha1 b/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-24 11_16_39.png.sha1
deleted file mode 100644
index 683a3d0203c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2015-03-24 11_16_39.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-36a2e6086990b1ff70059f064d7e53f9d5c2dd11 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2019-11-27 23-09-36.png.sha1 b/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2019-11-27 23-09-36.png.sha1
deleted file mode 100644
index eedb534e79b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/Screenshot from 2019-11-27 23-09-36.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-919c42db050099e580c0a983216d83e00c7b4df7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/index.md b/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/index.md
deleted file mode 100644
index fb6b3af8950..00000000000
--- a/chromium/docs/website/site/developers/how-tos/submitting-a-performance-bug/index.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: submitting-a-performance-bug
-title: Submitting a Performance Bug
----
-
-For more advanced use cases, click for [advanced
-instructions](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs).
-
-**Note: Uploading a trace to Google may share personal information such as the
-titles and URLs of open tabs.**
-
-**Android:**
-
-1. Connect the Android device to a host PC
-
-2. Navigate the host PC to **chrome://inspect?tracing**
-
-3. Find the instance of Chrome on your device you'd like to trace and click on
-the "trace" link.
-
-![](/developers/how-tos/submitting-a-performance-bug/Screenshot%20from%202019-11-27%2023-09-36.png)
-
-4. Follow the **Desktop** instructions starting from step 2.
-
-**Desktop:**
-
-1. In the address bar of a new tab, type **chrome://tracing**
-
-2. In the upper left, press the **Record** button.
-
-![](/developers/how-tos/submitting-a-performance-bug/Screenshot%20from%202015-03-10%2014_52_09.png)
-
-3. In the dialog that opens, select **Manually select settings**
-
-![](/developers/how-tos/submitting-a-performance-bug/Screenshot%20from%202015-03-24%2011_16_39.png)
-
-4. Under **Record Categories**, click **All**.
-
-5. In the lower right, click **Record**.
-
-6. Complete whatever action reproduces the performance issue: opening a new tab,
-navigating to a certain website, scrolling a page, etc. If possible, the
-duration of your recording should be about 10 seconds or less.
-
-7. Return to the tracing tab and press **Stop**.
-
-![](/developers/how-tos/submitting-a-performance-bug/Screenshot%20from%202015-03-10%2014_54_06.png)
-
-8. When the recording has been imported, click **Save** at the top of the
-screen, then choose where to save it on your computer.
-
-![](/developers/how-tos/submitting-a-performance-bug/Screenshot%20from%202015-03-10%2014_55_28.png)
-
-9. File a [new performance
-bug](https://code.google.com/p/chromium/issues/entry?summary=Performance+issue:&comment=Chrome+Version+++++++%3A%0AOperating+System+and+Version%3A+%0AURLs+(if+applicable)+%3A%0A%0ADescription+of+performance+problem:%0A%0A%0A%0ARemember%20to%20attach%20your%20trace%20file%20to%20this%20bug!&labels=Type-Bug,Pri-2,Hotlist-Slow,Performance&).
-Make sure to add a descriptive title, your Chrome version, your operating system
-and version, URLs (if applicable), and details about your issue.
-
-10. Click **Attach a file** and locate the trace file you saved in step 7. There
-is a 10MB limit, so you may need to compress the file first.
-
-11. In the bottom left, click **Submit Issue**. Thank you!
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/3dtracing2.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/3dtracing2.png.sha1
deleted file mode 100644
index 21555a20483..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/3dtracing2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0c8f370fc01b98ef8574b38d6664f408d07b67f6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/Screenshot-about_gpu.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/Screenshot-about_gpu.png.sha1
deleted file mode 100644
index f229a3aac50..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/Screenshot-about_gpu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-da4486b7c8ef2af915942dd886a22f60722a5dac \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracing2.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracing2.png.sha1
deleted file mode 100644
index 8a8b3456b7c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracing2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8099bbc8add3709b79d4f2e5e2455a96b9600668 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracingfinal.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracingfinal.png.sha1
deleted file mode 100644
index 7e8f2b5bc05..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/abouttracingfinal.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-07fdfe89c591142835cae1d644d13bf9df5f6edc \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/index.md
deleted file mode 100644
index 9a05487ba53..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/index.md
+++ /dev/null
@@ -1,273 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: anatomy-of-jank
-title: Anatomy of Jank
----
-
-author: wiltzius@
-
-## Intro
-
-Rendering performance is a huge topic of great interest to the Chrome project
-and web developers. As the web platform is essentially an application
-development framework, ensuring it has the capability to handle input and put
-new pixels on the screen at a speed that keeps up with the display’s refresh
-rate is critical.
-
-“Performance” is an oft-cited problem area for web developers. We spend a lot of
-time investigating and (hopefully) improving performance of the platform, often
-guided by specific bad examples. This is the pursuit and elimination of jank.
-
-But what does jank mean? What are people complaining about when they say a web
-page “feels slow”? This document attempts to categorize the various symptoms
-that all get put under the “jank” category, for the purposes of accurate
-identification and precise discussion.
-
-To understand the descriptions of potential causes of jank, it's important to
-understand roughly how rendering works. See [The Rendering Critical
-Path](/developers/the-rendering-critical-path) for a primer; these two documents
-should be read together.
-
-Finally, a note on the videos of examples -- video playback performance can
-tragically mask subtle performance problems as it frequently isn't rendered at
-60Hz. The examples here should be obvious enough that the problem is still
-visible, but the originals of these videos are attached to the page, which you
-can download for slightly more accurate recordings.
-
-## Symptom Taxonomy
-
-[TOC]
-
-### Incomplete content
-
-##### Checkerboarding
-
-#### YouTube Video
-
-<pre><code><i>Brief:</i> Parts of the page not showing up, particularly during a fast scroll or animation, and instead patches of either a gray checkerboard pattern or the background of the page showing through.
-</code></pre>
-
-Some background, for the curious. The checkerboarding problem is a very
-fundamental one for a document viewer: do you preserve responsiveness to user
-input or do you only show fully correct content? Chrome has developed a lot of
-(expensive) machinery to combat this problem, preferencing responsiveness.
-Checkerboarding occurs mainly during fast scrolling, when the page cannot be
-rasterized quickly enough to put up a new viewport’s worth of content every
-frame. When this happens Chrome will continue to scroll in an attempt to
-preserve the physical metaphor of page under the user’s finger... but in place
-of the missing content there will just be a blank space. On desktop platforms
-Chrome will draw a greyish checkerboard pattern; on Android (where this is more
-common) it draws the background color of the page.
-
-To try to avoid having to checkerboard Chrome will pre-rasterize content around
-the viewport and keep it as bitmaps in memory. This policy trades CPU and memory
-resource consumption for a greater likelihood that the page content will be
-ready if/when the user starts scrolling. It’s essentially a giant buffer to
-guard against how slow software rasterization can be.
-
-This approach has several limitations. For one, it’s a bit of a resource hog. It
-also isn’t under the control of the app developer at all, so if for instance
-they would prefer to jank (not produce a frame) instead of checkerboard when the
-scroll hits an unrasterized region of the page, they’re out of luck. It’s also
-ineffective if parts of the page that are pre-rasterized get invalidated by
-JavaScript -- now that pre-rasterized content is stale. It’s still useful to
-have around, since at least Chrome can display the pre-rasterized content until
-the new content is ready (this is the whole pending tree vs. active tree
-architecture; see the compositing design doc for an explanation), but it isn’t a
-replacement for fast rasterization. This is one of the (many) reasons motivating
-the move to GL-based rasterization (Ganesh), and when using Ganesh Chrome
-pre-paints only a very small buffer around the screen.
-
-> ###### Checkerboarding special case: low resolution tiles
-
-> #### YouTube Video
-
-> `*Brief:* Parts of the page displaying, but displaying at low resolution
-> instead of high resolution.`
-
-> This is a “feature” of impl-side painting, designed mainly to gracefully
-> handle pinch/zoom scenarios. Chrome will quickly rasterize large sections of
-> the pending tree (i.e. the content that’s queued up to go on screen) at low
-> resolution first, with the aim of at least showing something. The cause here
-> is identical to the cause of checkerboarding; this is essentially an
-> intermediate state between having the content fully rasterized and not
-> rasterized at all (checkerboard).
-
-> ###### Checkerboarding common cause: URL bar jank
-
-> `*Brief:* Full-screen invalidations caused by the URL bar’s showing / hiding
-> on scroll.`
-
-> There are times when Chrome doesn’t have a chance to rasterize enough content
-> before a scroll gets to a region of the page (e.g. on very long pages), but
-> for the most part impl-side painting handles static content well. As mentioned
-> in the checkerboarding section, however, it copes poorly when the page is
-> frequently invalidated by JavaScript. The resize event fired when the URL bar
-> appears and disappears (per the current Chrome for Android omnibox UX) is a
-> tragically common, totally unnecessary cause of invalidation on many mobile
-> websites. Chrome itself has to do a re-layout to account for the additional
-> pixels that just got added or subtracted from the total document height, but
-> this is an optimized layout pass that shouldn’t (theoretically) cause
-> full-document invalidations. Unfortunately many pages listen for the resize
-> event, assume getting it means the page has actually changed dimensions
-> dramatically as in the case of e.g. a rotation, and then modify their entire
-> document’s style in response. This typically ends up looking exactly the same,
-> but invalides everything as a result.
-
-> ##### *Partial content during network load*
-
-> `*Brief:* When loading a web page from the network Chrome will attempt to
-> render the page as quickly as possible, even if it doesn’t have all the
-> required resources yet. This is a long-standing feature of the platform to let
-> you read content as quickly as possible, and not technically jank, but is
-> included for completeness.`
-
-> Unfortunately, it also looks significantly less polished than the style of
-> many native applications, which show nothing (or a splash screen) until a
-> basic UI shell is ready, and fill that shell in with data atomically when the
-> data is ready. It’s possible to emulate this behavior on the web platform, and
-> it looks much more polished to do so, but that’s unfortunately not a very
-> common practice at this point.
-
-### Framerate
-
-##### Low sustained framerate during any kind of animation (“janky animations”)
-
-#### YouTube Video
-
-<pre><code><i>Brief:</i> animation with a mostly-steady framerate that’s below 60Hz.
-</code></pre>
-
-There’s typically a consistent bottleneck in the system when this is the case,
-and about:tracing is designed for diagnosing exactly this case. If encountered,
-a standard trace (no need for Frame Viewer) of the low-framerate animation
-should show what operations are the long pole for the animation.
-
-It’s worth noting that there are two types of animation: those handled entirely
-by the compositor thread (so-called “accelerated” animations) and those that
-need to synchronously call into Blink or v8. The only type of accelerated
-animations are CSS animations (and CSS transitions and Web Animation) on
-opacity, transform, and certain CSS filters; plus scrolling and pinch/zoom.
-Everything else goes through Blink. Accelerated animations will never be
-bottlenecked on anything in the RendererMain thread, but non-accelerated
-animations can be.
-
-##### Delayed beginning to any animation
-
-#### YouTube Video
-
-<pre><code><i>Brief:</i> a discernible pause between when an animation is meant to begin (e.g. in response to a finger tap) and when it actually begins. This is distinct from low framerate since sometimes the animation itself is fine, there’s just a pause before it starts.
-</code></pre>
-
-This is commonly caused by accelerated animations that are set up but require
-rasterization before beginning. E.g. creating a new layer and setting a CSS
-animation on its transform -- the animation will not start until the new layer
-is done being painted. The timeline delay here is designed to prevent animations
-beginning immediately only to drop a number of frames. The result is typically a
-much smoother-looking interaction overall, but it can be surprising.
-
-##### Low framerate during to swipe input (throughput)
-
-<pre><code><i>Brief:</i> special case of low-framerate animation, specifically when the animation is moving something in response to a touch movement. All touch-event-driven animations are non-accelerated animations.
-</code></pre>
-
-Unlike the delay at the beginning of an animation, which can be stretched out
-tens of milliseconds without the user really noticing, the only acceptable frame
-time for a running animation is the vsync interval (e.g. 16ms). Touch input can
-only be programmatically handled by JavaScript on the RendererMain thread, which
-means that all visual touch-input-based effects are technically non-accelerated
-animations. Note that they can still avoid painting by using an accelerated
-animation property, but they’ll subject to jank from all other activity on the
-main thread because the JavaScript input events can be blocked.
-
-##### Isolated long pauses (“jank”) during JS-driven animations (incl touch)
-
-<pre><code><i>Brief:</i> Single long pauses, rather than a consistent low framerate, during animations
-</code></pre>
-
-Sometimes an animation is mostly fine, but stutters at one point. This is often
-harder to isolate, but about:tracing and the Dev Tools timeline are invaluable
-for figuring out what went wrong. Special cases of this include the delay at the
-beginning of animations. All non-accelerated animations are subject to jank of
-this type from any other activity on the Blink main thread (e.g. JavaScript
-timers executing).
-
-### Latency
-
-Long input latency (rather than low framerate)
-
-<pre><code><i>Brief:</i> Most jank is related to interruptions in frame production, but latency represents another class of problem manifesting as longer delays between input events entering the system and corresponding new frames being output. It’s possible to have a good / high framerate but bad / long latency
-</code></pre>
-
-Some examples of high latency are covered in the framerate examples, for
-instance delays at the beginning of an animation that’s kicked off in response
-to input. Generally if the entire pipeline takes long enough that it doesn’t fit
-into frame budget, we categorize it as a framerate rather than a latency issue.
-However, there are some edge cases where latency can be increased by seemingly
-unrelated issues.
-
-##### High scrolling latency or delays beginning scrolling when the document has touch event handlers
-
-#### YouTube Video
-
-<pre><code><i>Brief:</i> Calling preventDefault on a touch move event is spec’d to prevent scrolling from happening. Chrome therefore tries to give JavaScript a chance to run any registered touch move event handlers before scrolling the page. If JavaScript takes a while to respond, however, it can increase input latency during the scroll.
-</code></pre>
-
-There’s a delicate balance between honoring the contract with touch event
-handlers the page has registered and staying responsive. In particular, becuase
-JavaScript touch event handlers are stuck on the main thread with everything
-else, completely unrelated activity such as XHR parsing or style recalculation
-or JavaScript timers that run on the main thread will all block touch event
-handlers from running (none of these tasks currently yield, and as of this
-writing Blink’s entire event loop is a FIFO queue with no prioritization,
-although that’s changing with the advent of the Blink scheduler). The result is
-that if style recalculation runs for 100ms right when the user is dragging the
-page around, the scroll won’t move for 100ms until style recalc is finished, the
-touch event gets run and preventDefault doesn’t get called during it.
-
-Note that browser behavior here is wildly under-specified. Chrome’s behavior has
-evolved over time, and changed significantly recently with the advent of
-[asynchronous touch move
-processing](http://updates.html5rocks.com/2014/05/A-More-Compatible-Smoother-Touch).
-One of the more egregious behavior hacks here is that Chrome typically gave
-touch events a ~200ms deadline to run, and if the event wasn’t processed by then
-it would get dropped and the page would scroll anyway. This was designed to
-preserve basic responsiveness even in the face of adversarial content.
-
-##### Scroll-linked effects out of sync
-
-<pre><code><i>Brief:</i> visual effects linked to the scroll position can become 1-2 frames out of sync from the actual scroll
-</code></pre>
-
-This is somewhat complicated, but boils down to two different modes of operation
-in Chrome’s multi-stage rendering pipeline. In low-latency mode each stage of
-the pipeline will complete fast enough that all of the stages complete within
-16ms. If any of the stages run long, Chrome will fall out of low latency mode
-into high latency mode. At that point there will be an extra frame of latency in
-the entire rendering pipeline, which effectively increases frame budget by
-allowing thread parallelism but at the cost of latency.
-
-Note that technically there is currently a low/high latency mode for both the
-main thread &gt; compositor thread step and the compositor thread &gt; browser
-UI thread step. The problem described here is specific to the main thread &gt;
-compositor thread step.
-
-The synchronization issue is that scrolling is a compositor-thread operation
-whereas the scroll-linked effects are necessarily main thread operations. This
-means that in high latency mode the main thread may be 1 frame behind the
-compositor thread, which means that the scroll position that the compositor is
-using to position the page and the scroll position Blink/JavaScript is currently
-aware of will be 1 step out of sync. Other than keeping the page in low latency
-mode by never blowing frame budget, there’s currently nothing a page can do
-about this.
-
-It’s also worth noting, though, that input latency is rarely a visible problem
-outside of these scroll-linked effects (like pull to refresh, or poorly
-implemented parallax, etc). The platform’s biggest problem remains that it’s
-incredibly difficult to maintain a high framerate. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov1.mp4.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov1.mp4.sha1
deleted file mode 100644
index 6858e4b3fb0..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov1.mp4.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fc24e98d316d180a4a3fa70d4328951a9243b7f8 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov2.mp4.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov2.mp4.sha1
deleted file mode 100644
index fe82369a1b9..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov2.mp4.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ad0aba92c337cd755fd4c397b5e55213d4805f4e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov3.mp4.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov3.mp4.sha1
deleted file mode 100644
index 75850a8f952..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov3.mp4.sha1
+++ /dev/null
@@ -1 +0,0 @@
-43428f9d7d1925fa5bf7c53ef49fc1c8c7b0845c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov4.mp4.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov4.mp4.sha1
deleted file mode 100644
index e95f75d5516..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank/mov4.mp4.sha1
+++ /dev/null
@@ -1 +0,0 @@
-95a0deaacba87720dc9e87d7ac9966b209ccf0b0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/Screen Shot 2013-05-14 at 9.10.55 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/Screen Shot 2013-05-14 at 9.10.55 PM.png.sha1
deleted file mode 100644
index 2e4e6418382..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/Screen Shot 2013-05-14 at 9.10.55 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4b230685cf2ba5f397bd78d91cba650d41d8d962 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/frameviewer.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/frameviewer.png.sha1
deleted file mode 100644
index 0a9a198149a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/frameviewer.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bf007ac2c59af2c52820da0c2b2dd35a90572439 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/index.md
deleted file mode 100644
index 0114402be5d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/frame-viewer/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: frame-viewer
-title: Chrome Frame Viewer Overview and Getting Started
----
-
-The frame viewer is a feature in Chrome's about:tracing for studying difficult
-rendering performance problems.
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/frame-viewer/frameviewer.png"
-height=269
-width=400>](/developers/how-tos/trace-event-profiling-tool/frame-viewer/frameviewer.png)
-
-## Getting started
-
-Frame viewer is best used in Chrome Canary, but viewing traces requires that you
-launch with special flags. On OSX, the appropriate incantation is:
-
-> **/Applications/Google\\ Chrome\\ Canary.app/Contents/MacOS/Google\\ Chrome\\
-> Canary --enable-skia-benchmarking**
-
-When you have such a build:
-
-* Go to about:tracing and press record
-* Check the **Frame Viewer** option.
-* Press **Record**
-* Go to some other tab, refresh, then do the janky action.
-* Go back to tracing and press stop.
-* Scroll through the tracks (using W, A, S, and D) looking for the
- "cc::LayerTreehostImpl" track. Click a dot on that track and you
- will get a viewer for that frame.
-
-## Reporting Rendering Performance Bugs
-
-## The best performance bug reports come with two traces: one taken with frame viewer on, and one taken with frame viewer off. We use both because frame viewer, while fast, is still intrusive to total performance. To do this:
-
-* Start up chrome with the frame viewer command line, above.
-* Record a trace of your slow action, with **cc.debug** and
- **cc.debug.display_items** ==unchecked==. This is your true
- performance trace. We will use that to understand whether the
- performance issue is functional \[requiring the frame viewer data\]
- or raw performance related \[requiring just the performance data\]
-* Without rebooting chrome or changing its command line, record a
- second trace, now with **cc.debug** and
- **cc.debug.**display_items**** ==checked==. This is the frame viewer
- trace and lets us understand functional issues in the page that may
- lead to performance problems.
-
-## Frame Viewer on Android
-
-You can trace a USB-connected Android device remotely from the
-***chrome://inspect/?tracing#devices*** URL. Alternatively, there is a command
-line script in the Chrome repository that provides the same functionality. For
-example, this command captures a 5 second trace with frame viewer data from the
-stable version of Chrome on an Android device:
-
-> **build/android/adb_profile_chrome --browser=stable --trace-frame-viewer -t
-> 5**
-
-## The script downloads the resulting trace file to the current directory. You can view it by opening Chrome on your desktop, going to about:tracing and clicking on "Load". The chrome you load it into must be a similar version of chrome (within ~2 major versions) of your Android build for it to load properly. The viewing browser must have the **--enable-skia-benchmarking** flag set to see the frame images.
-
-## Some notes
-
-* Arrow keys move between frames, once you have selected them
-
-## Demo Video
-
-#### JSConf.Eu demo
-
-## More info
-
-## For details on how it works, see the [design doc](https://docs.google.com/a/chromium.org/document/d/13FAQ9ckY7RDihv6aW5ehz15Pm2aheQFR7cY6FPdBmIQ/edit#heading=h.uyhrrm74z5nq). For more information, you can join/read the [trace-viewer mailing list](https://groups.google.com/forum/#!forum/trace-viewer), or review the code, which is located inside <https://code.google.com/p/trace-viewer/>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/index.md
deleted file mode 100644
index 10f56c3fe6b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: trace-event-profiling-tool
-title: The Trace Event Profiling Tool (about:tracing)
----
-
-When diagnosing performance problems it can be valuable to see what Chrome is
-doing "under the hood." One way to get a more detailed view into what's going on
-is to use the about:tracing tool.
-
-Tracing records activity in Chrome's processes (see [multi-process
-architecture](http://www.chromium.org/developers/design-documents/multi-process-architecture)
-for more on what each process is doing). It records C++ or javascript method
-signatures in a hierarchical view for each thread in each process. This is a lot
-of information, but sifting through it can help identify performance
-bottlenecks, slow operations, and events with irregular lengths (leading to e.g.
-framerate variation).
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/abouttracing2.png"
-height=269
-width=400>](/developers/how-tos/trace-event-profiling-tool/abouttracing2.png)
-
-## Getting Started Using about:tracing
-
-1. [Recording Tracing
- Runs](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs);
- start with this, it's prerequisite for using about:tracing.
-2. [How to use the Frame Viewer to Bust
- Jank](/developers/how-tos/trace-event-profiling-tool/using-frameviewer);
- read this next, to understand how to diagnose rendering performance
- problems.
-3. [Jank Case Study 1](/developers/rendering-performance-case-study-1);
- then read this, for further examples of how to effectively use
- about:tracing in conjunction with the Dev Tools timeline
-
-Note that to understand what's happening in trace events you'll need a basic
-understanding of how the browser works. The above articles provide enough to get
-started, but it's recommended to first read at minimum:
-
-* [The Rendering Critical
- Path](/developers/the-rendering-critical-path) for a little more
- background, and...
-* [Anatomy of
- Jank](/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank)
- for precise explanations of various rendering performance problems
-
-**Further reading:**
-
-* [A presentation from
- pdr@](https://docs.google.com/a/google.com/presentation/d/1pw9kbUFMD7s9KME8yIsCpCNKaSwjkGa89tt4M5rxIGM/edit)
- on how to debug the graphics stack with tracing
-* [Frame Viewer
- Basics](/developers/how-tos/trace-event-profiling-tool/frame-viewer),
- a short guide for how to navigate the frame viewer view. This is
- more succinct but less informative than [frame viewer
- how-to](/developers/how-tos/trace-event-profiling-tool/using-frameviewer)
- above.
-* [Saving Skia
- Pictures](/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium);
- this is useful if you want to capture isolated SkPictures for the
- Skia team.
-* [Tracking memory
- allocations](https://chromium.googlesource.com/chromium/src/+/HEAD/components/tracing/docs/memory_infra.md)
- with memory-infra tracing
-
-**Even further reading:**
-
-* [How to Understand about:tracing
- results](/developers/how-tos/trace-event-profiling-tool/trace-event-reading)
- (somewhat out of date; refer to the [Frame Viewer
- how-to](/developers/how-tos/trace-event-profiling-tool/using-frameviewer)
- instead)
-
-## Contributing to about:tracing
-
-Start by perusing the [Tracing Ecosystem
-Explainer](https://docs.google.com/a/chromium.org/document/d/1QADiFe0ss7Ydq-LUNOPpIf6z4KXGuWs_ygxiJxoMZKo/edit#)
-to understand the various different pieces of code involved.
-
-* To instrument Chrome and add your own custom traces, see
- [Instrumenting Chromium or Javascript code to get more
- detail](/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation).
-* To add functionality to the about:tracing viewer itself, see
- [contributing to
- trace-viewer](https://github.com/google/trace-viewer/wiki/Contributing).
- * [trace-viewer](https://github.com/google/trace-viewer) lives in
- its own repository on GitHub, not in the Chromium tree.
-
-Please file bugs as you find them! If you find any bugs, please [let us
-know](https://github.com/google/trace-viewer/issues/new). You review the [known
-bugs](https://github.com/google/trace-viewer/issues) as well. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/2. MemoryInfra- From trace JSON to Tracks.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/2. MemoryInfra- From trace JSON to Tracks.png.sha1
deleted file mode 100644
index 22077453136..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/2. MemoryInfra- From trace JSON to Tracks.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-444ac6d1f1d89a96c79e2f4c7965be2de2a627de \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 5.30.33 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 5.30.33 PM.png.sha1
deleted file mode 100644
index e359a0c752b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 5.30.33 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9980aed92edf9030b3a9e7f5fdacab4ba1890e1d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 7.42.47 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 7.42.47 PM.png.sha1
deleted file mode 100644
index a3adff44b3d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/Screen Shot 2015-06-12 at 7.42.47 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-99ef4e18dc707d3113f0eb161ebee360885c1e0d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/dump.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/dump.png.sha1
deleted file mode 100644
index 7e3f756f019..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/dump.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d6d6efd67254fe8faed4791770d4999e90e13346 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.34.32 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.34.32 PM.png.sha1
deleted file mode 100644
index 71731e74faf..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.34.32 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5b8d6674cfbdb88df18b561f27a949c51ba2ac89 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.38.32 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.38.32 PM.png.sha1
deleted file mode 100644
index 1d9ce39e9e2..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/Screen Shot 2015-09-24 at 8.38.32 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2b5dbb4732be9ddb6d20b2175bd5c120cc98af45 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/index.md
deleted file mode 100644
index f6dca542e2e..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-- - /developers/how-tos/trace-event-profiling-tool/memory
- - OBSOLETE. Memory profiling in chrome://tracing
-page_name: gpu-memory
-title: OBSOLETE. GPU Memory Tracing
----
-
-Moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory-infra/probe-gpu.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA (1).png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA (1).png.sha1
deleted file mode 100644
index 158c5b344c9..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6ac8bd15753f7f699b14099ba640481e78e4f613 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA.png.sha1
deleted file mode 100644
index 1421641229e..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory/sXTqTORl7xn0ijvmBV3etcA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-987aa713f589011db2278f7be006a5d462196170 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/detailed_dump.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/detailed_dump.png.sha1
deleted file mode 100644
index 2c03bf1850a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/detailed_dump.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0df67e2cd56c15cc8c4134d5c87a2edf758e22ca \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/heap.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/heap.png.sha1
deleted file mode 100644
index d0c403e2ea8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/heap.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1c98f53a95b92804ebdfc1b106e3bf7a0b36e952 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/index.md
deleted file mode 100644
index f8785404936..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-- - /developers/how-tos/trace-event-profiling-tool/memory
- - OBSOLETE. Memory profiling in chrome://tracing
-page_name: heap-profiling-with-memory-infra
-title: OBSOLETE. Heap Profiling with memory-infra
----
-
-Moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory-infra/heap_profiler.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/new.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/new.png.sha1
deleted file mode 100644
index 9062817d40d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra/new.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e801f55cdc79b8f5497f8399c1d25c131b442c0b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/howto-adding-memory-infra-tracing-to-a-component/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/howto-adding-memory-infra-tracing-to-a-component/index.md
deleted file mode 100644
index 5df036ad1ae..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/howto-adding-memory-infra-tracing-to-a-component/index.md
+++ /dev/null
@@ -1,226 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-- - /developers/how-tos/trace-event-profiling-tool/memory
- - OBSOLETE. Memory profiling in chrome://tracing
-page_name: howto-adding-memory-infra-tracing-to-a-component
-title: 'HowTo: Adding Memory Infra Tracing to a Component'
----
-
-## Motivation
-
-If you have a component that manages memory allocations, you should be
-registering and tracking those allocations with Chrome's memory-infra system.
-This lets you:
-
-* See an overview of your allocations, giving insight into total size
- and breakdown.
-* Understand how your allocations change over time and how they are
- impacted by other parts of Chrome.
-* Catch regressions in your component's allocations size by setting up
- telemetry tests which monitor your allocation sizes under certain
- circumstances.
-
-Some existing components which make use of memory tracing infra:
-
-* Discardable Memory - Tracks usage of discardable memory throughout
- chrome.
-* GPU - tracks GL and other GPU object allocations.
-* V8 - tracks heap size for JS.
-* many more....
-
-## Overview
-
-In order to hook into Chrome's memory infra system, your component needs to do
-two things:
-
-1. Create a
- [base::trace_event::MemoryDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_provider.h)
- for your component.
-2. Register/Unregister your
- [base::trace_event::MemoryDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_provider.h)
- with the
- [base::trace_event::MemoryDumpManager](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_manager.h).
-
-## Creating a MemoryDumpProvider
-
-In order to tie into the memory infra system, you must write a
-[base::trace_event::MemoryDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_provider.h)
-for your component. You can implement this as a stand-alone class, or as an
-additional interface on an existing class. For example, this interface is
-frequently implemented on classes which manage a pool of allocations (see
-[cc::ResourcePool](https://code.google.com/p/chromium/codesearch#chromium/src/cc/resources/resource_pool.h)
-for an example).
-
-A MemoryDumpProvider has one basic job, to implement
-[MemoryDumpProvider::OnMemoryDump](https://code.google.com/p/chromium/codesearch#chromium/src/skia/ext/skia_memory_dump_provider.h).
-This function is responsible for iterating over the resources allocated/tracked
-by your component, and creating a
-[base::trace_event::MemoryAllocatorDump](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_allocator_dump.h)
-for each using
-[ProcessMemoryDump::CreateAllocatorDump](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/process_memory_dump.h).
-Here is a simple example:
-
-> <table>
-> <tr>
-> <td>bool MyComponent::OnMemoryDump(</td>
-> <td> const base::trace_event::MemoryDumpArgs& args,</td>
-> <td> base::trace_event::ProcessMemoryDump\* process_memory_dump) {</td>
-> <td> for (const auto& allocation : my_allocations_) {</td>
-> <td> auto\* dump = process_memory_dump-&gt;CreateAllocatorDump(</td>
-> <td> "path/to/my/component/allocation_" + allocation.id().ToString());</td>
-> <td> dump-&gt;AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,</td>
-> <td> base::trace_event::MemoryAllocatorDump::kUnitsBytes,</td>
-> <td> allocation.size_bytes());</td>
-> <td> // While you will typically have a kNameSize entry, you can add additional</td>
-> <td> // entries to your dump with free-form names. In this example we also dump</td>
-> <td> // an object's "free_size", assuming the object may not be entirely in use.</td>
-> <td> dump-&gt;AddScalar("free_size",</td>
-> <td> base::trace_event::MemoryAllocatorDump::kUnitsBytes,</td>
-> <td> allocation.free_size_bytes());</td>
-> <td> }</td>
-> <td> }</td>
-> </tr>
-> </table>
-
-For many components, this may be all that is needed. See Handling Shared Memory
-Allocations and Sub Allocations for information on more complex use cases.
-
-## Registering/Unregistering a MemoryDumpProvider
-
-### Registration
-
-Once you have created a
-[base::trace_event::MemoryDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_provider.h),
-you need to register it with the
-[base::trace_event::MemoryDumpManager](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_manager.h)
-before the system can start polling it for memory information. Registration is
-generally straightforward, and involves calling
-[MemoryDumpManager::RegisterDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_manager.h):
-
-> <table>
-> <tr>
-> <td>...</td>
-> <td> // Each process uses a singleton MemoryDumpManager</td>
-> <td> base::trace_event::MemoryDumpManager::GetInstance()-&gt;RegisterDumpProvider(</td>
-> <td> my_memory_dump_provider_, my_single_thread_task_runner_);</td>
-> <td>...</td>
-> </tr>
-> </table>
-
-In the above code, my_memory_dump_provider_ is the
-[base::trace_event::MemoryDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_provider.h)
-outlined in the previous section. my_single_thread_task_runner_ is more complex
-and may be a number of things:
-
-* Most commonly, if your component is always used from the main
- message loop, my_single_thread_task_runner_ may just be
- [base::ThreadTaskRunnerHandle::Get()](https://code.google.com/p/chromium/codesearch#chromium/src/base/thread_task_runner_handle.h).
-* If your component already uses a custom
- [base::SingleThreadTaskRunner](https://code.google.com/p/chromium/codesearch#chromium/src/base/single_thread_task_runner.h)
- for executing tasks on a specific thread, you should likely use this
- runner.
-
-In all cases, if your
-[base::trace_event::MemoryDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_provider.h)
-accesses data that may be used from multiple threads, you should make sure the
-proper locking is in place in your implementation of
-[MemoryDumpProvider::OnMemoryDump](https://code.google.com/p/chromium/codesearch#chromium/src/skia/ext/skia_memory_dump_provider.h).
-
-### Unregistration
-
-Unregistering a
-[base::trace_event::MemoryDumpProvider](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_provider.h)
-is very similar to registering one:
-
-> <table>
-> <tr>
-> <td>...</td>
-> <td> // Each process uses a singleton MemoryDumpManager</td>
-> <td> base::trace_event::MemoryDumpManager::GetInstance()-&gt;UnregisterDumpProvider(</td>
-> <td> my_memory_dump_provider_);</td>
-> <td>...</td>
-> </tr>
-> </table>
-
-The main complexity here is that unregistration must happen on the thread
-belonging to the
-[base::SingleThreadTaskRunner](https://code.google.com/p/chromium/codesearch#chromium/src/base/single_thread_task_runner.h)
-provided at registration time. Unregistering on another thread can lead to race
-conditions if tracing is active when the provider is unregistered.
-
-## Handling Shared Memory Allocations
-
-When an allocation is shared between two components, it may be useful to dump
-the allocation in both components, but you also want to avoid double-counting
-the allocation. This can be achieved using memory infra's concept of "ownership
-edges". An ownership edge represents that the "source" memory allocator dump
-owns a "target" memory allocator dump. If multiple "source" dumps own a single
-"target", then the cost of that "target" allocation will be split between the
-"source"s. Additionally, importance can be added to a specific ownership edge,
-allowing the highest importance "source" of that edge to claim the entire cost
-of the "target".
-
-In the typical case, you will use
-[base::trace_event::ProcessMemoryDump](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/process_memory_dump.h)
-to create a shared global allocator dump. This dump will act as the target of
-all component-specific dumps of a specific resource:
-
-> <table>
-> <tr>
-> <td>...</td>
-> <td> // Component 1 is going to create a dump, source_mad, for an allocation,</td>
-> <td> // alloc_, which may be shared with other components / processes.</td>
-> <td> MyAllocationType\* alloc_;</td>
-> <td> base::trace_event::MemoryAllocatorDump\* source_mad;</td>
-> <td> // Component 1 creates and populates source_mad;</td>
-> <td> ...</td>
-> <td> // In addition to creating a source dump, we must create a global shared</td>
-> <td> // target dump. This dump should be created with a unique GUID which can be</td>
-> <td> // generated any place the allocation is used. I recommend adding a GUID</td>
-> <td> // generation function to the allocation type.</td>
-> <td> base::trace_event::MemoryAllocatorDumpGUID guid(alloc_-&gt;GetGUIDString());</td>
-> <td> // From this GUID we can generate the parent allocator dump.</td>
-> <td> base::trace_event::MemoryAllocatorDump\* target_mad =</td>
-> <td> process_memory_dump-&gt;CreateSharedGlobalAllocatorDump(guid);</td>
-> <td> // We now create an ownership edge from the source dump to the target dump.</td>
-> <td> // When creating an edge, you can assign an importance to this edge. If all</td>
-> <td> // edges have the same importance, the size of the allocation will be split</td>
-> <td> // between all sources which create a dump for the allocation. If one</td>
-> <td> // edge has higher importance than the others, its soruce will be assigned the</td>
-> <td> // full size of the allocation.</td>
-> <td> const int kImportance = 1;</td>
-> <td> process_memory_dump-&gt;AddOwnershipEdge(</td>
-> <td> source_mad-&gt;guid(), target_mad-&gt;guid(), kImportance);</td>
-> <td>...</td>
-> </tr>
-> </table>
-
-If an allocation is being shared across process boundaries, it may be useful to
-generate a GUID which incorporates the ID of the local process, preventing two
-processes from generating colliding GUIDs. As it is not recommended to pass a
-Process ID between processes for security reasons, a function
-[MemoryDumpManager::GetTracingProcessId](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_dump_manager.cc)
-is provided which generates a unique ID per process that can be passed with the
-resource without security concerns. Frequently this ID is used to generate a
-GUID that is based on the allocated resource's ID combined with the allocating
-process' tracing ID.
-
-## Sub Allocations
-
-Another advanced use case involves tracking sub-allocations of a larger
-allocation. For instance, this is used in
-[gpu::gles2::TextureManager](https://code.google.com/p/chromium/codesearch#chromium/src/gpu/command_buffer/service/texture_manager.cc)
-to dump both the sub-allocations which make up a texture. Creating a sub
-allocation is easy - instead of calling
-[ProcessMemoryDump::CreateAllocatorDump](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/process_memory_dump.h)
-to create a
-[base::trace_event::MemoryAllocatorDump](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/memory_allocator_dump.h),
-you simply call
-[ProcessMemoryDump::AddSubAllocation](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/process_memory_dump.h),
-providing the GUID of the parent allocation as the first parameter. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/index.md
deleted file mode 100644
index 3574941accc..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: memory
-title: OBSOLETE. Memory profiling in chrome://tracing
----
-
-Moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory-infra/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/memory_infra_logo.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/memory_infra_logo.png.sha1
deleted file mode 100644
index 329bd7f1a52..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/memory_infra_logo.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-62123f2712d8e90c3a09264ff2091f7026c03448 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/startup-tracing-with-memory-profiling/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/startup-tracing-with-memory-profiling/index.md
deleted file mode 100644
index 2bc8152cdb8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/memory/startup-tracing-with-memory-profiling/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-- - /developers/how-tos/trace-event-profiling-tool/memory
- - OBSOLETE. Memory profiling in chrome://tracing
-page_name: startup-tracing-with-memory-profiling
-title: Startup tracing with memory profiling
----
-
-**Related wiki pages**
-
-* See [this
- page](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs)
- for general information on startup tracing.
-* See [this
- page](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory-infra/README.md)
- for general information about memory tracing.
-
-There are two ways to perform memory tracing at startup:
-
-**Simple way with default configuration (one memory dump every 250 ms., one
-detailed memory dump every 2 s.)**
-
-$chrome --no-sandbox \\
-
---trace-startup=-\*,disabled-by-default-memory-infra \\
-
---trace-startup-file=/tmp/trace.json \\
-
---trace-startup-duration=7
-
-Then just load /tmp/trace.json in chrome://tracing
-
-**Advanced, memory tracing configuration**
-
-If you need more advanced configuration (e.g., higher granularity dumps, no need
-for detailed memory dumps) specify a custom trace config file, as follows:
-
-$ cat &gt; /tmp/trace.config
-
-{
-
-"startup_duration": 4,
-
-"result_file": "/tmp/trace.json",
-
-"trace_config": {
-
-"included_categories": \["disabled-by-default-memory-infra"\],
-
-"excluded_categories": \["\*"\],
-
-"memory_dump_config": {
-
-"triggers": \[
-
-{"mode":"light", "periodic_interval_ms": 50},
-
-{"mode":"detailed", "periodic_interval_ms": 1000}
-
-\]
-
-}
-
-}
-
-}
-
-$chrome --no-sandbox --trace-config-file=/tmp/trace.config \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 1.37.00 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 1.37.00 PM.png.sha1
deleted file mode 100644
index a43ccaaeebe..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 1.37.00 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8ff999184a6c70f3af0f70edbaa327201f1a6d2d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.46.58 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.46.58 PM.png.sha1
deleted file mode 100644
index 2500b93e11a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.46.58 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fc70edf239917af2d0f7e4407b42062c2955214d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.47.34 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.47.34 PM.png.sha1
deleted file mode 100644
index fd38d310425..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen Shot 2015-06-04 at 12.47.34 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d42bf23825cc5a431d723f437d7048e2bdd523aa \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-30.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-30.png.sha1
deleted file mode 100644
index d479ecadfe3..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-30.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3409e18a95bb54ca1f54ecb7e4c5cdb41678ce0f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-44.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-44.png.sha1
deleted file mode 100644
index ae8aaba76df..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-18-44.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1f673f14edabc1b165b8710c87abd6b7c79de141 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-19-11.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-19-11.png.sha1
deleted file mode 100644
index 032f2167db1..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot from 2014-10-14 10-19-11.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-27573f4af39ccc572f8cfcdc5993788c2662f1b7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/index.md
deleted file mode 100644
index 718b4baf37a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/index.md
+++ /dev/null
@@ -1,299 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: recording-tracing-runs
-title: Recording Tracing Runs
----
-
-When diagnosing performance problems it can be valuable to see what Chrome is
-doing "under the hood." One way to get a more detailed view into what's going on
-is to use the about:tracing tool.
-
-See [Trace Event Profiling Tool
-(about:tracing)](/developers/how-tos/trace-event-profiling-tool) for more
-information on what this tool does.
-
-[TOC]
-
-## Capture a trace on Chrome desktop
-
-Sometimes Chromium developers will ask for about:tracing results in a bug report
-to help us understand what's going on.
-**Here's an easy step-by-step guide: [ Submitting an Awesome Performance
-Bug](/developers/how-tos/submitting-a-performance-bug)**
-
-The TL;DR:
-
-1. Open a new tab and type "**about:tracing**" in the Omnibox.
-2. Press "**Record**". Choose the "**Manually select settings**"
- preset, click the **All** button above the left column and press
- "**Record**".
-3. Switch back to the tab with the content you're debugging and do
- whatever it is that's slower than it should be (or behaving
- incorrectly). A few seconds of the bad activity is usually
- sufficient.
-4. Switch back to the tracing tab and press "**Stop**", then "**Save**"
-5. (Optional) If this is for a bug report, upload the output file as an
- attachment to bug. If the file is bigger than 10MB, zip it first
- (the files compress well, and files bigger than 10MB can be
- truncated during upload).
-
-**IMPORTANT:** *Before attaching a trace to a bug keep in mind that it will
-contain the URL and Title of all open tabs, URLs of subresources used by each
-tab, extension IDs, hardware identifying details, and other similar information
-that you may not want to make public.*
-
-### *Capturing chrome desktop startup*
-
-> Assuming $CHROME is set to the command you need on your OS to start chrome,
-> the following will record the first 7 seconds of Chrome's lifetime into
-> /tmp/foo.json
-
-> > > `$CHROME --trace-startup --trace-startup-file=/tmp/foo.json
-> > > --trace-startup-duration=7`
-
-> On Windows you can modify the properties for your Chrome shortcut to add this
-> after where it says chrome.exe (don't forget to modify it back when you are
-> done):
-
-> > > `--trace-startup --trace-startup-file=%temp%\foo.json
-> > > --trace-startup-duration=7`
-
-## Capture a trace from Chrome on Android (on device)
-
-First you need to enable Chrome's developer options. To do this, open **Settings
-&gt; About Chrome**. Then tap **"Application version"** 7 times in a row:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s.png"
-height=400
-width=194>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s.png)
-
-After this you can access developer settings from **Settings &gt; Developer
-options**. From this menu, select **Tracing**:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s2.png"
-height=400
-width=194>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s2.png)
-
-Select your categories and tap **"Record trace"** to start recording:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s3.png"
-height=400
-width=194>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s3.png)
-
-To stop the recording, pull down on the notification shade and tap **"Stop
-recording"**. After this, you can access the trace with the **"Share trace"**
-button:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s4.png"
-height=400
-width=194>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s4.png)
-
-## Capture a trace from Chrome on Android (with DevTools)
-
-> **Tip:** this also works with tracing the system Android WebView.
-
-> 1. If you're debugging a WebView app: edit the app to call the **static**
-> method `WebView.setWebContentsDebuggingEnabled(true)` ([API
-> docs](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs))
-
-> 2. Connect Chrome DevTools on your desktop to the Android device. Follow
-> [these instructions for
-> Chrome](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs)
-> or [these instructions for
-> WebView](https://developer.chrome.com/docs/devtools/remote-debugging/webviews/)
-> 3. Go to `chrome://inspect?tracing` on desktop chrome. Find the app to be
-> traced, and click on the trace link beside the title.
-
-> [<img alt="image"
-> src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen%20Shot%202015-06-04%20at%2012.46.58%20PM.png"
-> height=277
-> width=400>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen%20Shot%202015-06-04%20at%2012.46.58%20PM.png)
-
-> 3. Click on "Record" at top left.
-
-> [<img alt="image"
-> src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen%20Shot%202015-06-04%20at%2012.47.34%20PM.png">](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen%20Shot%202015-06-04%20at%2012.47.34%20PM.png)
-
-> 4. Select trace categories. Hit Record, then Stop.
-> [<img alt="image"
-> src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot%20from%202014-10-14%2010-19-11.png"
-> height=313
-> width=400>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screenshot%20from%202014-10-14%2010-19-11.png)
-
-## Capture a trace from Chrome on Android (on the command line)
-
-> You'll need:
-
-> * Your device running Chrome on Android
-> * USB debugging enabled and the device attached.
-> * [ADB](http://developer.android.com/guide/developing/tools/adb.html)
-> * Linux or Mac desktop. Sorry Windows friends!
-
-> You can use \`adb_profile_chrome\` from the build/android/ directory in
-> Chromium's source checkout.
-
-> Follow these steps to record a trace:
-
-> #### **1. Launch the browser**
-
-> Run Chrome normally.
-> Developers, however, may want to launch from the command line:
-> > `$ build/android/adb_run_content_shell URL `# run content shell
-
-> > `$ clank/bin/adb_run_chrome URL # run clank (Googlers only) `
-
-> #### **2. Optionally, make a screen recording (optional)**
-
-> ` $ build/android/screenshot.py --video `
-
-> ` # or `
-
-> ` $ adb shell screenrecord /sdcard/recording.mp4 && adb pull
-> /sdcard/recording.mp4`
-
-> #### **3. Record a trace**
-
-> #### Look at the [usage documentation for adb_trace and profile_chrome](https://github.com/johnmccutchan/adb_trace/blob/master/README.md#basics).
-
-> > [<img alt="image" src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/Screen%20Shot%202015-06-04%20at%201.37.00%20PM.png" height=215 width=320>](https://github.com/johnmccutchan/adb_trace/blob/master/README.md#basics)
-
-> For example:
-
-> ` $ build/android/adb_profile_chrome --browser build --time 5 --view`
-
-> Note: build here refers to the version of Chrome you are tracing. Other valid
-> values are stable, beta (see --help for a full list).
-
-### Tracing options for Android
-
-> You can also use additional command line flags to capture more data. For
-> example:
-
-> **1. Systrace:** --systrace gfx,view,input,freq,sched
-
-> > [ <img alt="image"
-> > src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-systrace.png"
-> > height=109
-> > width=400>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-systrace.png)
-
-> Captures data about system-level events. Generally useful categories are
-
-> > > sched = Kernel scheduling decisions
-
-> > > freq = CPU core frequency scaling
-
-> > > gfx = SurfaceFlinger events, Vsync
-
-> > > view = Android Framework events
-
-> > > input = Framework input event processing
-
-> adb shell atrace --list_categories shows the rest.
-
-> **2. IPC messages:** --trace-flow
-
-> > [ <img alt="image"
-> > src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-flow.png"
-> > height=143
-> > width=400>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-flow.png)
-
-> Adds arrows showing IPC message flows, making it easier to see message
-> traffic.
-
-> 3. More trace categories, e.g.:
-> --categories=disabled-by-default-cc.debug.scheduler,\*
-
-> > [ <img alt="image"
-> > src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-scheduler.png"
-> > height=106
-> > width=400>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-scheduler.png)
-
-> Adding more trace categories makes it possible to see events that are normally
-> disabled. This particular example gives information about why the compositor
-> scheduler decided to run a given action. To see the full list of categories,
-> use --categories=list.
-
-> **4. Frame viewer data:** --trace-frame-viewer
-
-> > [ <img alt="image"
-> > src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-frame-viewer.png"
-> > height=233
-> > width=400>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-frame-viewer.png)
-
-> Captures rich layer data from the compositor. This is useful for understanding
-> how the DOM affects the compositor's layer tree structure. When viewing traces
-> like this, make sure to launch Chrome (on the desktop) with the
-> --enable-skia-benchmarking command line flag so that all features are
-> available.
-
-> **5. Perf profiling data:** --perf
-> [Perf](https://perf.wiki.kernel.org/index.php/Main_Page) is a sampling
-> profiler which can help you find performance intensive parts of the source
-> code. The --perf switch runs perf and automatically combines the data with all
-> other enabled event sources.
-
-> > [ <img alt="image"
-> > src="/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/sunburst.png"
-> > height=400
-> > width=396>](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/sunburst.png)
-
-> You can also view the raw recorded perf data using the command line which is
-> printed out by adb_profile_chrome.
-
-## Making a Good Recording
-
-* Keep the recording to a max of 10 seconds
-* Try to keep to 1 activity per recording. If you see two slowdowns,
- do one recording each. Or leave a second long pause between each.
-* Pause and leave the computer completely idle for 2 seconds before
- and after demonstrating the slowdown. This helps make the slow part
- obvious in the recording.
-
-### Step by step:
-
-1. Start with only the tab you’re investigating and about:tracing open
- in a fresh browser session (see below for other methods of figuring
- out which tab is which if you need multiple).
-2. Set up the tab for investigation to right before the point where the
- problem will occur (e.g. right before an animation is going to be
- triggered, or right before part of the page that scrolls slowly)
-3. Start a tracing run in the about:tracing tab
-4. Switch to the tab under investigation
-5. Pause for a couple seconds to record empty space on the timeline
- (makes finding it later easier)
-6. Perform the action to trigger the bad performance behavior (e.g.
- start the animation or scroll the page). Keeping the recorded
- activity under 10 seconds is a good idea.
-7. Pause again
-8. Switch back to the about:tracing tab and stop the recording.
-
-## Tracing in Telemetry
-
-For more repeatable trace recordings you may want to consider using
-[Telemetry](/developers/telemetry) to automate the process. In particular the
---profiler=trace, --profiler=v8 and --profiler=android-systrace flags will save
-a trace for each tested page.
-
-## Trace Report File Formats
-
-After recording one can save a trace report by pressing the Save button. This
-will save the trace in JSON format.
-
-It is also possible to convert it to HTML (which is easier to link to) using
-[Catapult](https://github.com/catapult-project/catapult)'s
-[trace2html](https://github.com/catapult-project/catapult/blob/master/tracing/bin/trace2html)
-script.
-
-## Slide deck of Android Tracing tricks
-
-This information is already detailed above. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s.png.sha1
deleted file mode 100644
index 68731331e44..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-78e0eabaa692a4e50aee5306aac4a87b4fa04f55 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s2.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s2.png.sha1
deleted file mode 100644
index 64eab40962c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0bb4fa7cea5b84e6cbac818f5747b9b0b15a30ed \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s3.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s3.png.sha1
deleted file mode 100644
index 08020bc80fb..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b93306edd28037317c831aac1a224bc8ed376a3f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s4.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s4.png.sha1
deleted file mode 100644
index 5c658d733d6..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/s4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-448c3933a8c0e94f623c76833391bafc4ce47f61 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/sunburst.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/sunburst.png.sha1
deleted file mode 100644
index 9e629c2a80d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/sunburst.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4391d42d0c035acb397dc06730b354a14716cd10 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-flow.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-flow.png.sha1
deleted file mode 100644
index e15b03021b5..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-flow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d95b8d43159394050f45849a1f193678c5acd672 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-frame-viewer.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-frame-viewer.png.sha1
deleted file mode 100644
index 71c88d3b096..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-frame-viewer.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6c4e0beb32bbb5d92e5838597abf3537c6ec2395 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-scheduler.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-scheduler.png.sha1
deleted file mode 100644
index 15f09723f5d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-scheduler.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-53221b8d435d896b51fa699d979c2a84c623b0c8 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-systrace.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-systrace.png.sha1
deleted file mode 100644
index 6ca9d4b35c1..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs/tracing-systrace.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c756f33588b819b30d742ceba8900354dcb039e9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/checkboxes.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/checkboxes.png.sha1
deleted file mode 100644
index 36c997db072..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/checkboxes.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-44cf2e6d887133c4d4a0c9ba460716d194e308a5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/index.md
deleted file mode 100644
index df8006a05df..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: saving-skp-s-from-chromium
-title: How to save .skp files from Chromium
----
-
-Skia pictures or ".skp's" are a binary format for the draw commands Chromium
-sends to Skia for rasterization. You can view these in the [Skia
-debugger](https://skia.org/dev/tools/debugger). To get the SkPicture you have
-two options:
-
-**Option 1: save the whole page**
-
-1. Grab Chrome Canary or a tip-of-tree Chromium Release build and
- launch it with the following flags (for help, see \[1\]):
- --enable-gpu-benchmarking --no-sandbox
-2. Load your favorite page
-3. In the DevTools console, type
- chrome.gpuBenchmarking.printToSkPicture('/path/to/skp_dir/')
-4. In the Skia checkout , run ./out/Debug/debugger
- /path/to/skp_dir/layer_0.skp
-
-**Option 2: save an individual picture**
-
-You can view and export these files from Chrome's
-[about:tracing](/developers/how-tos/trace-event-profiling-tool) tool
-
-1. Grab Chrome Canary or a tip-of-tree Chromium Release build and
- launch it with the following flag (for help, see \[1\]):
- --enable-skia-benchmarking
-2. Navigate to "about:tracing".
-
- [<img alt="image"
- src="/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/smallabouttracing.png"
- height=162
- width=400>](/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/smallabouttracing.png)
-
-3. Open a new tab and navigate to your favorite knitting website.
-
- [<img alt="image"
- src="/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skpsite.png"
- height=341
- width=400>](/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skpsite.png)
-
-4. Go back to the about:tracing tab and press record. Choose the "Frame
- viewer", or check “cc” and “cc.debug.display_items”. Uncheck
- everything else for this demo, then press record.
-
- [<img alt="image"
- src="/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/checkboxes.png"
- height=341
- width=400>](/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/checkboxes.png)
-
-5. Go back to your knitting webpage and refresh the page. You can
- scroll around, select text, etc (each generated skpicture will be
- saveable).
-6. Go back to “about:tracing” and press “stop tracing”.
-7. Now for some fun! Use the W, A, S, and D keys like you’re playing a
- video game. Your goal in this game is to find the
- “cc::DisplayItemList” dot that you’d like to save. When you’ve found
- the one, click “Save SkPicture”. Note: you can use the left and
- right arrow keys to cycle through cc::DisplayItemLists. You may
- notice there are two copies of most pictures--this is for low
- resolution (first) and high resolution (second).
-
- [<img alt="image"
- src="/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/picture.png"
- height=341
- width=400>](/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/picture.png)
-
-8. You can now open this picture in the [Skia
- debugger](https://sites.google.com/site/skiadocs/developer-documentation/skia-debugger).
-
- [<img alt="image"
- src="/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skdebugger2.png"
- height=334
- width=400>](/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skdebugger2.png)
-
-**\[1\] How to launch Chrome with flags on OSX**
-
-> Chrome Canary can be launched with:
-
-> > ./Applications/Google\\ Chrome\\ Canary.app/Contents/MacOS/Google\\ Chrome\\
-> > Canary --enable-threaded-compositing --force-compositing-mode
-> > --enable-impl-side-painting --enable-skia-benchmarking
-> > --allow-webui-compositing
-
-> If you build yourself, make sure to use a Release build and launch with:
-
-> > ./out/Release/Chromium.app/Contents/MacOS/Chromium
-> > --enable-threaded-compositing --force-compositing-mode
-> > --enable-impl-side-painting --enable-skia-benchmarking
-> > --allow-webui-compositing \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/picture.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/picture.png.sha1
deleted file mode 100644
index c903f294f71..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/picture.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a42cabe115682e8223600e3f83685e0e3968d8df \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skdebugger2.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skdebugger2.png.sha1
deleted file mode 100644
index 0f8c36821ce..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skdebugger2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-464355355e250db334044c20094415ff119a3f15 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skpsite.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skpsite.png.sha1
deleted file mode 100644
index 648e7ecd0ca..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/skpsite.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-84ea8ed8e646f33238b2c791566eadc69ac29100 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/smallabouttracing.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/smallabouttracing.png.sha1
deleted file mode 100644
index 3e5a3f60505..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium/smallabouttracing.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fdaeccda3078be255df72343dfe5f37b84f1cc5f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.39.51 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.39.51 PM.png.sha1
deleted file mode 100644
index fe318c0bba9..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.39.51 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-df9aa45fd8002e8cbe1c02969c59716cde961d6b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.46.48 PM.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.46.48 PM.png.sha1
deleted file mode 100644
index 8527bef637f..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen Shot 2015-09-02 at 8.46.48 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f8b173f46dfee6b5e91e512aa45afa281d36a985 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png.sha1
deleted file mode 100644
index 678306a0d70..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-691e9cdbbb7453270424c836a02af22f59b0fd49 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png.sha1
deleted file mode 100644
index 2d815cc4cc4..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-806e3a615c8941ba5eb7bbd810382758c185665b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/first.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/first.png.sha1
deleted file mode 100644
index 9ef42c71894..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/first.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-31268d87366497d689ed57b0094ef2c59a62fcd0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png.sha1
deleted file mode 100644
index db5ce44fa8a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bed4b84f47f32402acb4c11866045cc06a67d7c9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/index.md
deleted file mode 100644
index 02cbf00cd28..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/index.md
+++ /dev/null
@@ -1,623 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: trace-event-reading
-title: Understanding about:tracing results
----
-
-*Getting down with performance in web apps: not for the faint of heart.*
-
-**[TOC]**
-
-### Intro
-
-Chrome’s DevTools are great, but sometimes you’ve got a hitchy animation or page
-that scrolls slowly and you just need more info on what’s going on. If you want
-to dig into the guts of Chrome and figure out what the browser’s really doing
-under the hood, about:tracing is for you.
-This document will walk you through about:tracing and how to use it to diagnose
-common, basic rendering performance problems. For background we’ll also cover a
-few concepts central to Chrome’s overall rendering architecture, since artifacts
-of this architecture show up all over tracing results.
-
-### Background: How Chrome Renders Web Pages
-
-A key mental backflip one has to do when reading a trace is understand how web
-concepts are actually executed by Chrome. Once you understand how Chrome works,
-and its words for common web concepts, you'll feel a lot better moving around in
-a trace. This section covers a few key concepts to get you started.
-
-#### Chrome's use of multiple processes
-
-Full article: [Chrome’s Multi-Process
-Architecture](/developers/design-documents/multi-process-architecture)
-There are three types of processes in Chrome you need to worry about when
-dealing with graphics:
-
-##### 1. The Browser Process
-
-The browser process is the central coordination point for all of Chrome’s
-renderers (i.e. things actually drawing web pages). We call the browser process
-CrBrowserMain, and any threads with the same PID as CrBrowserMain are threads
-within that process.
-The browser process receives input from the OS, controls the browser UI (e.g.
-omnibox, back buttons, the tabstrip, menus, etc). In software mode, it actually
-puts the image of the webpage on the screen.
-
-##### 2. Renderer Processes
-
-The renderer process is responsible for a given web page. There are typically
-many renderer processes running in Chrome at any given time, but just one
-Browser process. The renderers are all instances of CrRendererMain, and threads
-with the same PID as a given CrRendererMain are that process’s threads.
-Chrome tries to put each tab in its own render process, subject to various
-restrictions. In general, the rule is different domains go into different
-processes, up to some memory-defined limit on process count. CrRendererMain is
-where javascript/html/css/etc is running, and in most cases, it is the
-bottleneck in your application!
-
-##### 3. The GPU Process
-
-Chrome has a single GPU process where GPU accelerated operations are issued to
-the graphics driver. We call this process CrGpuMain.
-GPU operations are done in a separate process/thread for security and stability
-reasons. When you use WebGL in JavaScript, or 3D CSS, or accelerated canvas,
-they are being made in the renderer but then sent asynchronously for actual
-execution in the GPU process.
-
-#### The Message Loop
-
-All threads in Chrome use a message loop, which is roughly a bit of code that
-does "while(true) { pop message; run message; }". A nice feature of
-about:tracing is that anytime chrome is running a message, it will be traced.
-This means that if there is no MessageLoop task on a thread, you can have high
-confidence that that thread is idle.
-
-#### Web page rendering/CSS/layout/reflow/etc is lazy
-
-Positioning and rendering of renderable elements (divs, etc) is done lazily by
-Webkit. For instance:
-
-* When you move a div, we just set a dirty bit and come around later
- and actually move it and update the screen.
-* Similarly, when you change an element’s class, we don’t recalculate
- its new computed style until the last possible minute. We just set a
- dirty bit.
-
-The actual costs of this laziness show up in the following ways:
-
-* When javascript code asks for a computed style, or we decide it is
- time \[here be dragons\], you may see a trace for recalculateStyle.
- If you see that spiking, you're seeing the interaction of classnames
- with style cascades and your DOM size/shape. That’s WebKit
- inspecting your css and classnames and figuring out what things are
- supposed to look like.
-* At the beginning of a frame \[see below for definition\], we
- recompute styles AND get ready to render. There, you will see
- WebViewImpl::layout, which is both style recalc and also us figuring
- out what part of (and how) your page should be drawn.
-* Painting/Updating: when we go to make a picture of the screen, we
- call it painting or updating. This is picture generation, and will
- usually include costs like bitmap decompression (if needed), complex
- gradient shading, rounded edges, blurriness, text rendering, and so
- on.
-
-#### Compositing vs Software Mode
-
-Full article: [GPU Accelerated Compositing in
-Chrome](/developers/design-documents/gpu-accelerated-compositing-in-chrome)
-Chrome renders in either "software mode" or "accelerated compositing mode":
-
-* In software mode, Chrome software rasterizes the webpage into an
- image and blits it onto the screen using the underlying OS' software
- drawing primitives. Chrome tracks a "dirty region" on the screen to
- minimize the size of the blits for common operations like blinking
- cursors, playing videos, and scrolling.
-
-* In accelerated compositing mode, Chrome breaks the webpage up into
- layers, and then each layer is composited together using the GPU.
-
-Additionally, accelerated mode operates in either single or multi-threaded
-modes:
-
-* In single threaded mode, we periodically stop the webpage to update
- the screen.
-* In multi-threaded (often referred to as just ‘threaded’) mode, we
- can update the screen without stopping the webpage, which allows us
- to scroll the page smoothly or run animations without hitching.
-
-What does stopping the web page entail? In effect, the main thread in the
-renderer process is the thing that needs to do the screen updating. When it’s
-doing that, it can’t be doing any of the other things that it normally would --
-like running JavaScript. Being able to run script while the screen updates is a
-main motivation both for threaded compositing and for web workers.
-The configurations to keep in mind, based on Chrome 18, are:
-
-* Android: multi-threaded accelerated mode
-* CrOS: single-threaded accelerated mode
-* Desktop: depends on page content.
- * When WebGL, Canvas, or 3D CSS is used, single-threaded
- accelerated mode.
- * Otherwise, software mode is on.
-
-We’re going to change this as time goes on: we eventually intend to enable
-multi-threaded accelerated mode on all platforms and pages.
-
-#### Frames (as in Frames Per Second)
-
-It’s important to understand the entire lifecycle of a frame when Chrome is
-drawing. The key lifecycle events are outlined for each mode below:
-
-##### Software Mode
-
-In software mode, a frame can be found by looking for DoDeferredUpdate in the
-trace. DoDeferredUpdate will run requestAnimationFrame, perform a layout (which
-is css style recalc plus preparation for rendering), and then paint the screen.
-We then send the bitmap to the browser where you will see an
-"UpdateBackingStore" which is us putting the resulting picture on the screen.
-
-##### Single-threaded Accelerated Mode
-
-In single-threaded accelerated mode, a frame can be found by looking for
-DoDeferredUpdate. DoDeferredUpdate does the same steps as before, but instead of
-sending the results as pictures to the browser, it sends GL draw calls to the
-CrGPuMain for every layer.
-
-##### Multi-threaded Accelerated Mode
-
-In threaded accelerated mode, you have to think of there being two types of
-frame: the frames generated by the renderer (i.e. what JavaScript can touch),
-and copies of these frames that are handed to the compositor to draw.
-From the renderer / JavaScript perspective, frames can be identified by the
-"CCThreadProxy::beginFrame" trace event, which does the usual steps of calling
-requestAnimationFrame, doing layout/style recalc, and painting/updating. At the
-end of a beginFrame, we then "commit" the world to the compositor thread. The
-renderer has produced a single frame.
-The compositor thread is then free to draw many frames based on the world it was
-handed. This is extremely useful because the compositor thread can render many
-frames e.g. in response to a scroll. Those frames will all be generated from the
-same “world” (i.e. page state) -- i.e. nothing will have changed from
-JavaScript, but the compositor thread knows how to handle certain types of other
-changes like input events (scrolling again) or CSS animations. So even if the
-renderer is choking on running all your fatty JavaScript, the compositor can
-continue to serenely scroll the page and run CSS animations on elements. On the
-compositor’s side of the world, you will see a frame as a
-CCThreadProxy::scheduledActionDrawAndSwap.
-
-#### HTML5 Canvas
-
-Canvas can be software-accelerated or GPU-accelerated. `about:gpu` will show you
-which is the case for your browser / computer configuration. In non-accelerated
-mode, canvas calls are executed immediately using software rasterization and are
-blocking operations in the main thread of the renderer. In accelerated mode,
-canvas calls are converted to GL commands and issued to the CrGpuMain process
-for execution. This rendering is ‘deferred’ so the commands are issued to the
-GPU process and the main thread is free to continue to run JavaScript while the
-GPU process actually renders them and updates the screen.
-
-#### WebGL
-
-WebGL is always GPU accelerated. Your WebGL calls are marshalled into a command
-buffer and shipped to CrGpuMain where we unpack the commands and make the
-equivalent GL or DirectX calls.
-If your command buffer fills up, or you call a GL function that requires an
-answer from the underlying driver, e.g. glGetError or glGetUniform, you will see
-FlushSync call. This FlushSync blocks on the GPU process executing whatever
-command you issued and ruins performance.
-
-#### Input
-
-Input events are received from the system by the Browser process and then
-forwarded to the renderer process.
-When tracing an input event, first look for a (very small) ForwardInputEvent
-message in CrBrowserMain. This is the browser receiving the input event and
-forwarding it to the renderer. After the ForwardInputEvent happens, the render
-process will get a HandleInputEvent message. You will see events inside that
-HandleInputEvent if it got forwarded into JavaScript.
-Note that for flow control reasons, CrBrowserMain will not send more than 1
-input to the renderer process at a time. Rather, it waits on sending another
-input until the previous one is acknowledged. The renderer will acknowledge
-input events immediately, most of the time. The one exception is mouse
-moves/scrolls -- if the screen is dirty (e.g. a DoDeferredUpdate is necessary),
-then the renderer will not reply to an input until the DoDeferredUpdate
-completes.
-
-#### Javascript/V8
-
-When JavaScript is running, you will (usually) see traces for things that begin
-with V8. We haven't instrumented every single thing, but you will see v8.run or
-v8.callfunction for common cases. See the below glossary of common trace events
-for additional V8 functions that are instrumented (e.g. for event listener
-callbacks, setTimeout/setInterval callbacks, etc).
-Many JS APIs interact with the browser process synchronously. E.g. cookie
-access, IndexedDB operations, synchronous XHR/network operations. When that
-happens, you can bracket the suspicious operation with console.time/timeEnd
-calls and look on the browser process for activity that appears correlated with
-your JS code. See More Investigation Strategies below for examples of how to do
-this.
-
-### Navigating the Tracing View
-
-Now that you’ve got the theory down, how do you actually interact with the
-tracing tool?
-This trace assumes that you have opened up a fresh browser, and opened Wikipedia
-in one tab and about:tracing in another, hit record in the tracing tab and
-scrolled a bit in the WikiPedia tab, then stopped the recording. More detailed
-directions on how to do that are[
-here](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool).
-
-#### Processes & Timelines
-
-Once you have a trace recorded, you should get something like the following:
-
-**[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.46.48%20PM.png"
-width=700>](/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.46.48%20PM.png)**
-
-**This is a visualization of the recorded trace. What you’re seeing is Chrome's multi-process architecture at work, scrolling your page. The first thing to notice is that there are three processes running: the browser (pid=17965), the renderer process for about:tracing (pid=17974) and the renderer process for Wikipedia (pid=17982).**
-**Each process has a separate horizontal track, filled with trace events. The track is basically an event timeline for events on that thread/process. Events are the colored, rectangular blocks on the timeline tracks. Time moves from left to right.**
-
-**[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png">](/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png)**
-
-**#### Trace Events**
-
-**In this case, the data being shown is ~10 seconds, broken down as follows:**
-
-**[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png">](/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png)**
-
-**The keyboard can be used to zoom and pan around inside the timeline. The ‘w’
-and ‘s’ keys zoom in centered around the mouse, and the ‘a’ and ‘d’ keys pan the
-timeline left and right. So, with a bit of zooming around, we can look at how a
-single mousewheel event propagates through Chrome:**
-
-### [<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png">](/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fourth.png)
-
-**A single rectangle represents a TRACE_EVENT: where it began, and where it ended. When you see a stack of different rectangles on top of each other, it means that trace events were issued inside one another on the same thread. For example:**
-
-**foo() {**
-
-**sleep 10ms**
-
-**bar()**
-
-**sleep 5ms**
-
-**}**
-
-**bar() {**
-
-**sleep 5ms**
-
-**}**
-
-**Would look like this:**
-
-**[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png">](/developers/how-tos/trace-event-profiling-tool/trace-event-reading/fifth.png)**
-
-**To study individual rectangles, you can click on them. This will display
-information about the rectangle: its Duration, ThreadDuration (CPU time),
-SelfTime (time spent in the current slice, subtracting the time**
-
-of all the children slices), **ThreadSelfTime** (CPU time spent in the current
-slice, subtracting the CPU time for all the children) and **Occurrences** (the
-number of times that event appeared in the selection).
-
-The information is sortable. Clicking on a title from the info table will expand
-all the slices for that event.
-For the Foo/Bar example, the SelfTime for Foo will be 15ms (20 - 5), while the
-SelfTime for Bar will be 5ms (Since it has no know children).
-
-The ThreadDuration is not available for all events and for all platforms, the
-SelfTime is omitted in cases where the Slice has no known children. Asynchronous
-events has no SelfTime by definition.
-
-In addition to clicking, you can drag the mouse in a rectangle over a group of
-trace events. This will give you a list of events that intersect that rectangle
-and summarize them for you:
-
-**[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png">](/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Selection.png)**
-
-#### Import and Export
-
-Once recorded, you can give a trace file to someone else. Just press the save
-button. The resulting file is just JSON.
-To load a trace, use the load button, or grab the standalone trace viewer from
-<https://github.com/catapult-project/catapult/tree/master/tracing>
-
-### Investigating Performance Problems
-
-Now that you can navigate the basic view, let’s dive into a basic strategy for
-investigating a performance problem. Here’s an overview:
-
-#### Setting up a good trace run
-
-1. Start with only the tab you’re investigating and about:tracing open
- in a fresh browser session (see below for other methods of figuring
- out which tab is which if you need multiple).
-2. Set up the tab for investigation to right before the point where the
- problem will occur (e.g. right before an animation is going to be
- triggered, or right before part of the page that scrolls slowly)
-3. Start a tracing run in the about:tracing tab
-4. Switch to the tab under investigation
-5. Pause for a couple seconds to record empty space on the timeline
- (makes finding it later easier)
-6. Perform the action to trigger the bad performance behavior (e.g.
- start the animation or scroll the page). Keeping the recorded
- activity under 10 seconds is a good idea.
-7. Pause again
-8. Switch back to the about:tracing tab and stop the recording.
-
-#### Investigation strategy
-
-Now let’s find a problematic frame and see what caused the hitch or slowdown.
-See below for more details on the trace events
-
-1. Look for the pause right before you started the problem action
-2. Once you’ve found the beginning of the problem area, look for
- regular patterns that indicate drawing updates.
- 1. The entire time the renderer process is busy (i.e. doing
- anything at all) will be marked by MessageLoop::RunTask
- 2. A regular draw update will usually start with one of:
- 1. an input event (RenderWidget::OnHandleInputEvent)
- 2. a requestAnimationFrame callback
- (RenderWidget::AnimationCallback)
- 3. a timer firing (ScheduledAction::Execute)
- 3. ...and the actual drawing is done in
- RenderWidget::DoDeferredUpdate
-3. Once you’ve found the pattern indicating frame updates by looking
- for a regular block of trace events and zooming in to confirm that
- they’re being called from what you expect, zoom back out to look for
- a problem area
- 1. If you’re investigating a hitch, look for an interruption to the
- regular pattern -- a block of tracing events that takes longer
- than the others.
- 2. If you’re investigating general slowness (e.g. scrolling), check
- to see if the entire draw block from the triggering event to the
- end of the deferred update are over frame budget (i.e. longer
- than 16ms on a 60hz screen).
-4. Once you’ve identified a problem frame, it’s time to figure out what
- caused that frame to take too long. Options are:
- 1. Paint time
- 1. Look for PaintRect or CCLayerTreeHost::UpdateLayers events
- that take too long
- 2. Layout
- 1. Look for WebViewImpl::layout events that take too long
- 3. JPEG decode/resize
- 1. Look for ImageOperations::ResizeSubPixel or
- ImagerOperations::ResizeBasic
- 4. Heavy input handling
- 1. Look for too much activity in
- RenderWidget::OnHandleInputEvent
-5. An orthogonal option is that you’re GPU bound.
- 1. If you have a ton of activity in the GPU process the card can be
- swamped -- in this case the renderer process might not be doing
- anything (won’t be in MessageLoop::RunTask) while the GPU is
- working feverishly. Look for lots of events in the GPU process
- but few in the renderer.
- 2. Content updates as the GPU draws are under
- GPUScheduler::PutChanged, while the actual screen is updated
- (timed with a screen refresh, as Chrome vsyncs) during
- GLContext::SwapBuffers
-
-#### Next: Fixing it!
-
-What to do next depends on the nature of the problem. Options are:
-
-* Long paint times or long layout
-
-* Paint’s show up in the web inspector’s timeline, too, so if you
- determine that your problem is heavy paints you can use the
- inspector to figure out when these paints are happening relative to
- your JavaScript events.
-* You can also turn on the Chrome flag --show-paint-rects to see which
- areas of the screen are painted when, which can help identify what’s
- being painted (and from there try to reduce the amount or frequency
- of what’s being painted).
-* Modify your CSS styles to try to isolate and remove the problem.
- This is by far the highest leverage way to make a site faster!
- Iterate in the following loop:
- * Remove one of:
- * An entire element
- * A single CSS style (e.g. CSS class)
- * A single style modification (e.g. if you set style in JS)
- * Grab another trace of the page
- * Check if the paint times (PaintRect or UpdateLayers) or style
- recalculation and layout (WebViewImpl::layout) times have gone
- down.
- * If they have, you’ve found your culprit (possibly one of
- many). Start adding parts of the style back in (if you
- removed a whole class) or experiment with an alternative way
- of getting the same visual effect but with different style
- rules.
- * If they haven’t, repeat the whole process and remove more.
-
-* Heavy input
- * You should be doing as little as possible in your input
- handlers. Ensure that your V8EventListener::callListenerFunction
- inside of RenderWidget::OnHandleInputEvent take minimal time by
- simply saving some state in your input handler and then actually
- acting on that state in your requestAnimationFrame callback, for
- instance.
-* JPEG decode/resize
- * Unfortunately there isn’t a lot to do here at the moment. You
- can attempt to size your source images such that they won’t get
- resized, and you can attempt to invalidate them less frequently,
- but if necessary JPEG operations are what’s causing your woes
- there isn’t much you can do.
-* GPU bound
- * If your page is composited and drawing to the GPU, make sure you
- aren’t invalidating more layers than necessary.
- * If only one thing is moving on the screen (e.g. an
- animation) it should be in its own layer
- * If you’re scrolling and everything needs to be updated, you
- want to ensure that things that aren’t changing are in their
- own layers so they don’t get invalidated and can just be
- translated on the GPU
- * But, if you have too many layers you’ll overwhelm the GPU --
- so don’t put everything in its own layer just for the sake
- of it.
- * In the future, we’ll have a way to see which layers are
- invalidated when (like --show-paint-rects but for composited
- mode), but it’s not finished yet.
- * An easy way to force layer creation is to add a
- -webkit-transform:translateZ(0) to an element, which will stick
- it in its own layer but have no visual effect.
- * An easy way to see what layers are being created for what
- content is to use the “show composited layer render borders” in
- about:flags.
-
-#### Tip: trace event color
-
-Trace event types will have a common color across all runs and processes. This
-means that common events like MessageLoop::RunTask are always the same color,
-making them easy to identify.
-
-#### Tip: which tab am I looking at?
-
-It can be difficult to discern which tab is which in the renderer process. The
-easiest way by far to do this is just not to run any other tabs when you’re
-doing a tracing run. This way you’ll only end up with two renderer processes
-(one for about:tracing, one for your content tab)
-Another method is to use about:memory, which lists all tabs, apps, and
-background pages along with their titles and process IDs. You can figure out
-which process ID you’re interested in here and then refer to the renderer with
-that process ID in about:tracing.
-
-### Glossary: Common Trace Events
-
-There are a few common scenarios that can cause performance to suffer that the
-tracing tool is good at identifying. These examples are meant to give you some
-guidance on common signposts to look for.
-
-#### Common Events
-
-* MessageLoop::RunTask
- * This notes that the process is busy. It’s important to tell when
- the process is even attempting to do anything vs. not,
- especially when trying to track down if performance problems are
- in the renderer, browser, or GPU processes.
-* RenderWidget::OnHandleInputEvent
- * This is the browser handling an input event. Your JS event
- handling will also be in here as a sub-event
- (V8EventListener::callListenerFunction), and you can determine
- if that’s taking longer than it should.
-* RenderWidget::DoDeferredUpdate
- * This is the renderer process updating the screen.
- * Note that content may not go to the screen immediately
- because it’s a deferred update -- textures may be passed to
- the GPU process and from there to an eventual screen buffer,
- but these various buffering layers can cause delays.
- * The basic steps in a draw are:
- * Animation
- * Layout (see
- * Painting and compositing in software, or updating and
- drawing on the GPU
-* V8EventListener::callListenerFunction
- * This is V8 executing an event listener callback, probably
- deferring to JS code you actually wrote. It’s a good place to
- stick your own trace events for further detail (see below).
-* WebViewImpl::layout
- * This is page re-layout, which can be caused by DOM structure and
- style changes.
- * Page layout shows up in the web inspector’s timeline, too, so if
- you determine your problem is layout taking too long you can use
- the web inspector’s timeline to track it down (i.e. making
- changes to your page to try to reduce the time or frequency of
- layout).
-* PaintRect
- * This is the renderer painting part of the screen that was
- invalidated.
- * See “Fixing it” above for strategies on what to do if this is
- taking too long.
-* ScheduledAction::Execute
- * This is a setTimeout or setInterval event firing.
- * Again, these show up in the web inspector so if you determine
- that a setTimeout event is getting in the way (blocking the
- renderer from drawing and causing a hitch, for instance) you can
- use the inspector to more easily identify and disect the related
- JavaScript.
-* ImageOperations::ResizeBasic and ImageOperations::ResizeSubPixel
- * This is an image being resized, which can be expensive.
- * The best way to optimize these is probably to avoid them
- entirely whenever possible, e.g. by sizing your images
- correctly, but sometimes they’re unfortunately unavoidable.
-
-### More Investigation Strategies
-
-#### Adding your own trace events
-
-If you’re having trouble figuring out what part of your code maps to what part
-of the trace, it can be invaluable to add your own trace events. By doing so
-from JavaScript you can drop annotations onto the trace timeline, allowing easy
-identification of key points in your code (for instance, the beginning of a draw
-loop or the entrance of a particularly complicated bit of JS you fear is blowing
-your frame budget).
-Adding your own events is as simple as calling console.time() and
-console.timeEnd():
-
-function Foo() {
-
-console.time(“Foo”);
-
-var now = Date.now();
-
-while (Date.now() &lt; now + 1000);
-
-console.timeEnd("Foo");
-
-}
-
-See [this
-page](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation)
-for more information on adding your own trace events to C++ code.
-
-#### *Determining which IPC message is active*
-
-To determine what IPC message corresponds with the class and line shown in the
-trace:
-
-1. Click on the event and note the class and line values.
- * e.g. `class: 41, line: 783`
-2. Open the
- [ipc/ipc_message_start.h](https://chromium.googlesource.com/chromium/src/+/HEAD/ipc/ipc_message_start.h)
- for your build.
- * Protip: If it's not ToT, you can pull the git hash from
- about:version and replace \`master\` in the URL with the hash.
-3. Look at the IPCMessageStart enum to find your class. (If the enum
- values start at line 12, you'll find your class type on line `x+12
- `;)
- * e.g. class 41 maps to [line
- 53](https://chromium.googlesource.com/chromium/src/+/4d31269c6cafb98eced74df70f5d1ccde3af0a44/ipc/ipc_message_start.h):
- `ExtensionMsgStart`
-4. Amongst [the xxx_messages.h
- files](https://code.google.com/p/chromium/codesearch#search/&q=f:_messages.h&sq=package:chromium&type=cs),
- open the one that contains your class.
- * e.g. Our match is in[
- extension_messages.h](https://code.google.com/p/chromium/codesearch#chromium/src/extensions/common/extension_messages.h&q=f:_messages.h%20ExtensionMsgStart&sq=package:chromium&type=cs&l=33)
-5. Look at the corresponding line number in the xxx_messages.h file.
- Your desired declaration will typically be *ending* on the given
- line.
- * e.g. Line 783 is the end of the
- `ExtensionHostMsg_DetailedConsoleMessageAdded` declaration.
- We've found our message!
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.39.51%20PM.png">](/developers/how-tos/trace-event-profiling-tool/trace-event-reading/Screen%20Shot%202015-09-02%20at%208.39.51%20PM.png)
-
-### Staying Current
-
-We continuously add new events and features to about:tracing to help us figure
-out what’s going on inside of Chrome. Some of the images above may not reflect
-all of these features, so don’t be surprised if there are new threads and events
-in your about:tracing view that aren’t listed here -- all follow the same basic
-pattern. We welcome additional documentation and use cases. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png.sha1
deleted file mode 100644
index 0003e3644ee..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/second.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5a232213d4a5a13836dd2850a2cbe3193c87639c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/sixth-before-import.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/sixth-before-import.png.sha1
deleted file mode 100644
index 5b972aa9700..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/sixth-before-import.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f401fc27483e0fa6310e4e2e3fa212051d5937ab \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/synchanell.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/synchanell.png.sha1
deleted file mode 100644
index e6fcdf81361..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/synchanell.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-13c0875afc8ea161bbcebd3fe0c749cb13bd9d17 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png.sha1
deleted file mode 100644
index 1868215e93b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace-event-reading/third.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e722b024596e73bfae203c5d3f83797a76c475eb \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace.png.sha1
deleted file mode 100644
index 7ee142d4790..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-99a1d6830576639a6bca1eb1ae09ce0eb8e5a3b6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace3.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace3.png.sha1
deleted file mode 100644
index ffb8e9685f7..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/trace3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ad67d35668d92ed44b5b26feafbab6ef5220b46d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation/index.md
deleted file mode 100644
index 2e6bcf14113..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation/index.md
+++ /dev/null
@@ -1,149 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: tracing-event-instrumentation
-title: Adding Traces to Chromium/WebKit/Javascript
----
-
-See [Trace Event Profiling Tool
-(about:tracing)](/developers/how-tos/trace-event-profiling-tool) for more
-information on about:tracing
-
-Sometimes, about:tracing wont show you all the detail you want. Don't worry, you
-can add more instrumentation yourself.
-
-****Trace macros are very low overhead. When tracing is not turned on, trace
-macros cost at most a few dozen clocks. When running, trace macros cost a few
-thousand clocks at most. Arguments to the trace macro are evaluated only when
-tracing is on --- if tracing is off, the value of the arguments dont get
-computed.****
-
-**[trace_event_common.h](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/common/trace_event_common.h&q=f:trace_event_common.h&sq=package:chromium&type=cs&l=1)
-defines the below behavior.**
-
-## Function Tracing
-
-The basic trace macros are TRACE_EVENTx, in 0, 1, and 2 argument flavors. These
-time the enclosing scope. In Chrome code, just do this:
-
-> #include "base/trace_event/trace_event.h"
-
-> // This traces the start and end of the function automatically:
-
-> void doSomethingCostly() {
-
-> TRACE_EVENT0("MY_SUBSYSTEM", "doSomethingCostly");
-
-> ...
-
-> }
-
-In WebKit/Source/WebCore/, you can trace this way:
-
-> #include "platform/TraceEvent.h"
-
-> void doSomethingCostly() {
-
-> TRACE_EVENT0("MY_SUBSYSTEM", "doSomethingCostly");
-
-> ...
-
-> }
-
-****The "MY_SUBSYSTEM" argument is a logical category for the trace event. This
-category can be used by the UI to hide certain kinds events, or even skip them
-from being collected. A common practice is to use the chromium module in which
-the code lies, so for example, code in content/renderer gets the "renderer"
-category.****
-
-**TRACE_EVENT1 and 2 allows you to capture 1 and 2 pieces of data long with the
-event. So, for example, this records the paint dimensions number along with the
-paint:**
-
-**void RenderWidget::paint(const Rect& r) {**
-
-**TRACE_EVENT2("renderer", "RenderWidget::paint", "width", r.width(), "height",
-r.height());**
-
-## Javascript Tracing
-
-You
-
-**********can instrument javascript code as well:**********
-
-function Foo() {
-
-console.time(“Foo”);
-var now = Date.now();
-
-while (Date.now() &lt; now + 1000);
-
-console.timeEnd("Foo");
-
-}
-
-**Note that currently, console.time/timeEnd spam the inspector console when it
-is open --- when inspector is closed, there is little or no performance penalty
-to the API.**
-
-## Counters
-## To track a value as it evolves over time, use TRACE_COUNTERx or TRACE_COUNTER_IDx. For example:
-
-> ## #include "base/trace_event/trace_event.h"
-
-> ## shmAlloc(...) {
-> ## ...
-> ## TRACE_COUNTER2("shm", "BytesAllocated", "allocated", g_shmBytesAllocated,
-> "remaining", g_shmBytesFree);
-> ## }
-
-> ## shmFree(...) {
-> ## ...
-> ## TRACE_COUNTER2("shm", "BytesAllocated", "allocated", g_shmBytesAllocated,
-> "remaining", g_shmBytesFree);
-> ## }
-
-## Sometimes a counter is specific to a class instance. For that, use the _ID variant:
-
-> ## Document::didModifySubtree(...) {
-> ## TRACE_COUNTER2("dom", "numDOMNodes", calcNumNodes());
-
-> ## }
-
-## This will create a different counter for each ID.
-
-## Asynchronous Events
-
-Sometimes, you will have an asynchronous event that you want to track. For this,
-use TRACE_EVENT_ASYNC_BEGINx and TRACE_EVENT_ASYNC_ENDx. For example:
-
-> #include "base/trace_event/trace_event.h"
-
-> AsyncFileOperation::AsyncFileOperation(...) {
-> TRACE_EVENT_ASYNC_BEGIN("io", "AsyncFileOperation", this);
-
-> }
-
-> void AsyncFileOperation::OnReady() {
-
-> TRACE_EVENT_ASYNC_END("io', "AsyncFileOperation", this);
-> ...
-> }
-
-Async operations can start and finish on different threads, or even different
-proceses. Association is done by the concatenation of the name string and the
-third "id" argument. The nearest match in time establishes the relationship.
-
-## Resources
-
-* [trace_event_common.h](https://code.google.com/p/chromium/codesearch#chromium/src/base/trace_event/common/trace_event_common.h&q=f:trace_event_common.h&sq=package:chromium&type=cs&l=1),
- the basic readme for trace_event instrumentation
-* [Tracing Ecosystem
- Explainer](https://docs.google.com/document/d/1QADiFe0ss7Ydq-LUNOPpIf6z4KXGuWs_ygxiJxoMZKo/edit?pli=1#heading=h.dytg6ymhhy0b)
-* [Trace Event
- Format](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit?pli=1) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png.sha1
deleted file mode 100644
index 545eb4f0e13..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b729fce8e136eb430da529918ee2367e2d749849 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png.sha1
deleted file mode 100644
index 7065716e7dd..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b2dfa1aeec41da838ec3877146b7784e87e3fe32 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual trace.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual trace.png.sha1
deleted file mode 100644
index 961e08d5c8c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual trace.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-639e1bf844cb7eb8a0c580b6c3786bb246f2a6db \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information is.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information is.png.sha1
deleted file mode 100644
index 7da84b31583..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information is.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-579a50b9604f5485ba4c6b82bf0fc6f248b22bd6 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png.sha1
deleted file mode 100644
index 2d815cc4cc4..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-806e3a615c8941ba5eb7bbd810382758c185665b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png.sha1
deleted file mode 100644
index e3ec36ade3c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4942738f244d7459e1b9227abff9fdfaad829ffb \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png.sha1
deleted file mode 100644
index 84b44bfb9e3..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d9f11f7b9d16db5248e12cedf7e0a8ea2c0de267 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png.sha1
deleted file mode 100644
index c9dd7281f56..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9ea43c12b5eb9e7796ca6661e90d418f13dadb18 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png.sha1
deleted file mode 100644
index 99219760d4c..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a40267b5171b63410ab5178bebc916be7f0aee58 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png.sha1
deleted file mode 100644
index 26b3a6ec97b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5dc833db1ff85b97867baa982d2f77eb024cdfb5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png.sha1
deleted file mode 100644
index 8eeb1c63f24..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7cdfd69c03a41a728331e69c3bca710b0008a9a2 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png.sha1
deleted file mode 100644
index 52730e98f9d..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-84a2560a4fd84ac472abb0248ef6c63e287ee03c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png.sha1
deleted file mode 100644
index 9c0a8726493..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-62c42bf85ee8f35b85b7aa96eaea286168cfadfa \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png.sha1
deleted file mode 100644
index 2e92fe28043..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-06ffc4c9b95077fdd3e0c6f1238e3f191ea51831 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png.sha1
deleted file mode 100644
index 22f0199e030..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1b846b513689e76d59fba87d07593973aabfa53c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png.sha1
deleted file mode 100644
index 2c727595fa0..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2052eb1e45d19b0391d7cc675c7a8b2de33bdb1a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png.sha1
deleted file mode 100644
index 0bfb24c21a8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-40c2c5068273ccf1354a2b62f88b974291b388d8 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png.sha1
deleted file mode 100644
index 61c946730bd..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b7144bba70bfa028486d6e47e3b392a778086019 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png.sha1
deleted file mode 100644
index d3ae56170bd..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b6b63e80c9ec2026bb891216944892eae7c91e8a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png.sha1
deleted file mode 100644
index 36d6a0c7d55..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f32b55e7b3010f4bccc7e339f422dbc30ac9ee77 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png.sha1
deleted file mode 100644
index b02361269ad..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dd110013d006387da6a6d7a4d95bba6de3f7b566 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png.sha1
deleted file mode 100644
index f8663346fc6..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0d2f411135727c6276006bb8c6e36f7e5b8ac075 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png.sha1
deleted file mode 100644
index 10f18b1eb89..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e47313d1c0d53ecb71ace8948d5663f117dca008 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png.sha1
deleted file mode 100644
index 4f49fbb278b..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-36f8743c20bdf136d57aafadcbec7061576033db \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png.sha1
deleted file mode 100644
index 83a93e26ed7..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7b847085802a03a400b5434c9fff49441ec9a208 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png.sha1
deleted file mode 100644
index 6fdf4530543..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-631209d413507717fed7b9e5d4948bf5c669dede \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_frameviewer_trace.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_frameviewer_trace.sha1
deleted file mode 100644
index 4400597f717..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_frameviewer_trace.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2313091f96299278fbd1a3f038bc137e4bb86509 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_normal_trace.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_normal_trace.sha1
deleted file mode 100644
index 821436b4e28..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_normal_trace.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d1f2ae7442ecb87cec30259a08390d816aaf3847 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/index.md b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/index.md
deleted file mode 100644
index dbe2838b7ac..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/index.md
+++ /dev/null
@@ -1,566 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-- - /developers/how-tos/trace-event-profiling-tool
- - The Trace Event Profiling Tool (about:tracing)
-page_name: using-frameviewer
-title: FrameViewer How-To
----
-
-# *wiltzius@*
-
-For a web application to respond smoothly to user touch input the application
-needs to receive input events in JavaScript, react to them, and then allow time
-for the browser to render any changes made to the page -- all within a 16ms
-frame budget.
-
-This can be challenging, and it can be instructive to look under the hood to see
-what the browser is doing each frame. This is what Chromium’s Frame Viewer does,
-although it was built with debugging Chrome in mind, not debugging web apps.
-Chromium devs and adventurous outsiders may nevertheless be curious what’s
-happening in the browser on a per-frame basis.
-
-Prerequisites:
-
- [Get set up to record
- traces](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs);
- recommended to use adb_profile_chrome.py from
- <https://github.com/johnmccutchan/adb_trace> (also in Chrome’s source tree
- under src/tools/perf/)
-
- Read the [Frame Viewer
- Overview](/developers/how-tos/trace-event-profiling-tool/frame-viewer) for
- information on how to record a frame viewer trace, rather than a standard
- trace. The short version is you need a number of non-default tracing
- categories enabled; the easiest way to do this is to use the
- adb_prorfile_chrome script (see above) and pass --trace-frame-viewer to it.
-
- Frame-viewer only works on the latest versions of Chrome, and with the
- latest rendering architecture. For some features to work both the version of
- Chrome used to view traces and the version used to record traces must be run
- with impl-side-painting enabled (--enable-impl-side-painting), and the
- version of Chrome used to view the trace must be run additionally with
- --enable-skia-benchmarking. See Frame Viewer’s [Getting
- Started](/developers/how-tos/trace-event-profiling-tool/frame-viewer) for an
- example command line.
-
- This entire document assume you know a lot about how the web platform works
- and a lot about how Chrome works. Performance of a sophisticated rendering
- system like a modern browser is very complicated, so please do not use this
- to blindly infer that any particular operation is cheap or expensive --
- rather, use this tool to inform your own experimentation and debugging.
-
-### Simplified Version of Browser Rendering
-
-Before trying to read a Frame Viewer trace, a few fundamentals:
-
-After its loaded, the page changes in response to two inputs: user interaction
-mediated by the user agent (default pressed button styles, scrolling, etc) and
-updates to the DOM from JavaScript. From there, a cascade of effects through
-several rendering sub-systems eventually produces new pixels on the user’s
-screen.
-
-The main subsystems are:
-
- Parsing, which turns a chunk of HTML into DOM nodes
-
- Style, which resolves CSS on the DOM
-
- Layout, which figures out where DOM elements end up relative to one another
-
- Paint setup, sometimes referred to as recording, which converts styled DOM
- elements into a display list (SkPicture) of drawing commands to paint later,
- on a per-layer basis
-
- Painting, which converts the SkPicture of drawing commands into pixels in a
- bitmap somewhere (either in system memory or on the GPU if using Ganesh)
-
- Compositing, which assembles all layers into a final screen image
-
- and, less obviously, the presentation infrastructure responsible for
- actually pushing a new frame to the OS (i.e. the browser UI and its
- compositor, the GPU process which actually communicates with the GL driver,
- etc).
-
-We’ll focus on 1-6; the browser compositor and GPU process take up resources too
-but these operations don't map very meaningfully to page content.
-
-Adding a new DOM element that’s visible on-screen will trigger work in every one
-of the systems above. In bad cases any one of them can cost tens of milliseconds
-(or more), meaning every one of them can be considered a liability for staying
-within frame budget.
-
-One way to keep your animations inexpensive is to avoid stages of this pipeline
-altogether. For instance, if the DOM remains untouched in a given frame but one
-particular &lt;div&gt; changes from a red background to a blue background, no
-parsing needs to happen -- but style needs to be updated on at least that
-&lt;div&gt;, and because CSS’s inherited nature this can often trigger style
-recalculation on other parts of the DOM as well.
-
-Note that user interactions that the browser handles, rather than the
-application, are largely unexceptional: clicking a button changes its style
-(adding pseudo-classes) and those style changes need to be resolved and later
-stages of the pipeline run (e.g. the depressed button state needs to be painted,
-and then the page needs to be re-composited with that new painted content).
-
-The browser has multiple threads, and because of the dependencies implied in the
-above pipeline which thread an operation runs on matters a lot when it comes to
-finding the rendering bottleneck. Style, layout, and some paint setup operations
-run on the renderer’s main thread, which is the same place that JavaScript runs.
-Parsing gets its own thread (in most cases), as does compositing and painting.
-
-Keep in mind that JavaScript is single threaded and does not yield by default,
-which means that JavaScript events, style, and layout operations will block one
-another. That means if e.g. the style system is running, Javascript can’t
-receive new events. More obviously, it also means that other JavaScript events
-(such as a timer firing, or an XHR success callback, etc) will block JS events
-that may be very timely -- like touch events. NB this essentially means
-applications responding to touch input must consider the JavaScript main thread
-the application’s UI thread, and not block it for more than a few milliseconds.
-
-The above explanation simplifies a lot, but should be enough to get going. Two
-exceptions worth pointing out though: first, scrolling is “special” in that it
-happens outside of the main JavaScript context, and scroll positions are
-asynchronously reported back to the main thread and updated in the DOM. This
-prevents janky scrolling even if the page executes a lot of JavaScript, but it
-can get in the way if the page is well-behaved and wants to respond to
-scrolling. Second, the pipeline above isn’t strictly hierarchically ordered --
-that is, sometimes you can update style without needing to re-lay-out anything
-and without needing to repaint anything. A key example is CSS transforms, which
-don’t alter layout and hence can skip directly from style resolution (e.g.
-changing the transform offset) to compositing if the necessary content is
-already painted.
-
-### Introducing Frameviewer
-
-For the rest of this document to make sense you’ll need to get set up to record
-frame viewer traces. See the [Frame Viewer
-Overview](/developers/how-tos/trace-event-profiling-tool/frame-viewer) for
-instructions.
-
-Caveats: Frame Viewer only works on the very latest Chrome rendering
-architecture (both for the Chrome where the trace is recorded and the Chrome
-where its viewed; see the above link for info on how to get Chrome into that
-mode), and it… can be buggy. Don’t say we didn’t warn you.
-
-Let’s start with something simple. Here’s a frame viewer trace of scrolling
-mobile.nytimes.com
-
-The trace file being screenshotted in this section is attached to this page, as
-are all the traces referenced here, and can be
-[downloaded](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/nytimes_scroll_trace)
-and opened in about:tracing to follow along.
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/01-followalong.png)
-
-Lots of stuff on the screen. Let’s try to make sense of it.
-
-### Navigating the Basic Tracing View
-
-Before even touching the Frame Viewer, let’s examine some standard trace events
-as a refresher. There’s more detail in [this
-document](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/trace-event-reading)
-about trace events and how to read them, but it’s a bit stale. Below is an
-updated, shortened recap.
-
-#### Processes & Timelines
-
-#### What you’re seeing is Chrome's multi-process architecture at work, scrolling your page. The first thing to notice is that there are three processes running: the browser (pid=16099) and the renderer process for nytimes.com (pid=23360).
-
-#### Each process has a separate horizontal track, filled with trace events. The track is basically an event timeline for events on that thread/process. Events are the colored, rectangular blocks on the timeline tracks. Time moves from left to right.
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/02-lefttoright.png)
-
-#### Panning and Zooming with the Keyboard
-
-#### **The keyboard can be used to zoom and pan around inside the timeline. The ‘w’ and ‘s’ keys zoom in centered around the mouse, and the ‘a’ and ‘d’ keys pan the timeline left and right.**
-
-#### Trace Events
-
-#### In this case, the data being shown is ~5 seconds. Zooming in on a section of the trace for more detail, we can make out individual trace event records.
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual%20trace.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/03-individual%20trace.png)
-
-A single rectangle represents a TRACE_EVENT: where it began, and where it ended.
-When you see a stack of different rectangles on top of each other, it means that
-trace events were issued inside one another on the same thread. For example:
-
-```none
-foo() {
-```
-
-```none
- sleep 10ms
-```
-
-```none
- bar()
-```
-
-```none
- sleep 5ms
-```
-
-```none
-}
-```
-
-```none
-bar() {
-```
-
-```none
- sleep 5ms
-```
-
-```none
-}
-```
-
-Would look like this:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/1.png)
-
-To study individual rectangles, you can click on them. This will display
-information about the rectangle: its Duration, ThreadDuration (CPU time),
-SelfTime (time spent in the current slice, subtracting the time of all the
-children slices), ThreadSelfTime (CPU time spent in the current slice,
-subtracting the CPU time for all the children) and Occurrences (the number of
-times that event appeared in the selection). The information is sortable.
-Clicking on a title from the info table will expand all the slices for that
-event.
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information%20is.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/04-information%20is.png)
-
-For the Foo/Bar example, the SelfTime for Foo will be 15ms (20 - 5), while the
-SelfTime for Bar will be 5ms (Since it has no traced children).
-
-The ThreadDuration is not available for all events and for all platforms, the
-SelfTime is omitted in cases where the Slice has no known children. Asynchronous
-events have no SelfTime by definition.
-
-In addition to clicking, you can drag the mouse in a rectangle over a group of
-trace events. This will give you a list of events that intersect that rectangle
-and summarize them for you:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png)
-
-### Navigating Frame Viewer Mode
-
-What Frame Viewer adds beyond the basic trace event system is a dump of the
-page’s state taken each time the renderer produces aframe. This is very useful
-when trying to visualize what’s happening from frame to frame. To see the state
-of the page’s layer tree for a frame, click one of the green circles along the
-top of the Renderer process track:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png)
-
-You’ll get frames on the bottom of the screen that show the browser’s layer tree
-for this frame (on the left) as well as an image of the page with outlines for
-all the page’s layers (on the right).
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/2.png)
-
-Checkboxes in the layer view control what information is included in the page
-visualization: the most useful are typically “other layer’s / passes” (to view
-the whole page, rather than just the layer selected), “invalidations” which
-shows what got dirtied that frame for repainting, and “contents” which attempts
-to fill in the actual pixels for each layer by rasterizing the SkPictures for
-each layer (the SkPicture being essentially a DisplayList Chrome internally uses
-to store paint operations and which also gets dumped along with the layer tree
-each frame when frame viewer is on). The “contents” view doesn’t always work
-well (e.g. text gets garbled) and you’ll need --enable-skia-benchmarking passed
-to whatever Chrome you’re using to view the trace.
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/3.png)
-
-The layer visualization can get crowded, so the mouse controls are very useful.
-You can pan with [<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/4.png),
-zoom in and out with [<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/5.png),
-and rotate (in 3D, because we’re nerds) with [<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/6.png),
-while [<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/7.png)
-allows you to select a layer for more detail about it.
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/8.png)
-
-When selected everything the compositor knows about the layer is shown in the
-bottommost frame. The “layerName” property is interesting because it maps the
-layer back to its root element in the DOM, such as div#content or the #document
-
-Selecting an invalidation tells you what layer the invalidation happened on as
-well as the invalidation’s bounds. Cross-reference the layer number with one of
-the layers in the layer tree on the left for more info about that layer.
-
-Layers with invalidations have SkPictures associated with them. Clicking on the
-SkPicture link will show you more information about the relevant SkPicture
-recording. You can also access these recordings by selecting the blue dots along
-the top of the Renderer’s track in the trace view; the pictures will appear at
-different times than the frames because they’re located at the time they got
-recorded, rather than the time they were played back to produce a frame. This
-might be within the same frame, if an on-screen invalidation occurred that
-frame, or it might be much earlier if a picture was recorded and the compositor
-has been using the picture to produce frames for some time afterward (this will
-happen with composited scrolls and with CSS transform animations in particular,
-since the compositor can run these on its own).
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/9.png)
-
-Frame viewer’s best feature is that is captures all of this information on a
-per-frame basis. The arrow keys move between frames while trying to retain the
-same view, so you can step through frame by frame and watch layer positions move
-with respect to one another or see invalidations appear.
-
-[<img alt="image" src="http://jankfree.org/images/output_optimized_frame.gif"
-height=376 width=400>](http://jankfree.org/images/output_optimized_frame.gif)
-
-This information, combined with the timing information encoded in the trace
-events, provides a powerful view into the performance of a web application.
-
-### The Critical Path
-
-Taking a trace of a page that makes a change that requires repainting in
-response to touch input illustrates the entire pipeline in action (and in this
-case, working well).
-
-The traces in this section are all from
-[inbox_app.html](http://git.chromium.org/gitweb/?p=chromium/src.git;a=blob_plain;f=tools/perf/page_sets/key_silk_cases/inbox_app.html;hb=HEAD)
-in the Silk page set. The trace files used are available here ([normal
-trace](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_normal_trace))
-and here ([frameviewer
-trace](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/inbox_frameviewer_trace)).
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/10.png)
-
-Zooming in it’s possible to follow a frame propagating through the Renderer
-process:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/11.png)
-
-*Open the trace file yourself to zoom in further and see individual events*
-
- Input event comes in from the browser process (not shown, but visible in its
- own track higher up in the trace) and gets delivered to the compositor
- thread. This is a tiny slice in the above trace that includes
- “InputEventFilter::ForwardToHandler”
-
- The input event gets routed from the compositor thread to the main thread.
- This kicks off Blink’s input event handling, bottoming out in V8 (i.e. the
- JavaScript touchmove event handler running)
-
- Blink begins a new animation frame, doing some of its own bookkeeping as
- well as calling requestAnimationFrame callback inside of
- “WebViewImpl::animate”
-
- JavaScript has modified the page since the last frame (presumably either in
- the rAF callback or the input event handler), triggering a layout. The first
- part of this is style recalculation, visible as Document::updateStyle
-
- Part of the on-screen DOM has been invalidated, so Blink repaints a chunk of
- the screen covering the invalidated area. This records drawing commands into
- an SkPicture, visible in the trace as Picture::Record events. Layer
- properties (such as transforms, scroll offsets, and opacity) are also
- updated in Blink’s copy of the layer tree.
-
- The new recordings and updated layer tree are transferred from the Blink
- thread to the compositor thread in ThreadProxy::BeginMainFrame::Commit.
- During this time the main thread is blocked on the compositor thread.
-
- The compositor considers the position of all layers and sorts all of the
- document’s content layer tiles to decide what order to rasterize them (this
- is for prioritization; on-screen tiles get highest priority followed by any
- prepainted tiles that might be on the screen soon). This is the
- ::UpdateTilePriorities and ::ManageTiles
-
- Some tiles needed for this frame get rasterized in Picture::Raster events
- (this trace is using Ganesh to rasterize tiles, so rasterization occurs on
- the compositor thread and actually represents the generation of GL commands
- for the tile contents, not filling in a bitmap which happens on the GPU).
-
- Shortly after the rasterization completes the compositor thread’s draw
- deadline arrives, so it does a bunch of bookkeeping to decide where exactly
- to draw each tile on the screen (LayerTreeHostImpl::PrepareToDraw) and then
- sends this frame to the browser compositor (DelegatingRenderer::DrawFrame)
- and swaps the framebuffer (DelegatingRenderer:SwapBuffers)
-
-That’s the event flow, but it’s difficult (/impossible) to look at a trace and
-understand what actually changing on-screen in this frame.
-
-This is where Frame Viewer comes in. In a Frame Viewer trace of the same
-interaction, inspecting a couple frames around this one shows how the layers are
-moving from frame to frame. Here’s one:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/12.png)
-
-Pressing one of the right/left arrow keys lets us step to the previous/next
-frame. Here’s the next one:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/13.png)
-
-They look almost the same, but the rectangle offset from the others, which is a
-layer that’s moving in response to touch input, has changed offsets slightly.
-Also note that a different green circle in the list of frames along the top of
-the Renderer track is now selected.
-
-It becomes more obvious what’s changing when we enable the “Contents” checkbox:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/14.png)
-
-Remember from earlier we saw rasterization happen in this frame though, not just
-a layer changing position. You can see what got invalidated by turning on the
-“Invalidations” checkbox:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/15.png)
-
-Clicking on the red invalidation rect, we see that it’s for layer 32:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/16.png)
-
-Selecting layer 32 in the list of layers on the left, or disabling the
-invalidations and selecting the layer itself in the viewer rather than the
-invalidation rect, tells us more about that layer:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/17.png)
-
-There’s a lot of information here, but the most interesting is probably the
-layerName which links this layer to the DOM; in this case, “RenderBlock
-APP-DISMISSABLE-ITEM class='message'”
-
-We can also get more info on the associated SkPicture for this layer for this
-frame by clicking the picture link. This opens up the SkPicture debugger:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/18.png)
-
-Which has a list of all the draw operations stored in the SkPiture on the left
-and a timing graph that shows the cost of each draw operations as a vertical
-line. Selecting vertical lines will replay the picture up to that point, which
-helps identify what a given draw op is doing and letting you understand what the
-most expensive draw operations in the SkPicture are.
-
-Important caveat: this works by replaying the SkPicture locally, on the machine
-used to view tracing. That means that the timing information will not be an
-accurate representation of performance on the device the trace was taken on!
-Furthermore, at this point all picture playback in tracing uses the software
-rasterizer, even if the picture was actually rastered with Ganesh when
-displaying the frame originally! Despite these two big limitations, the picture
-debugger can still be helpful to understand relative operation costs.
-
-### Anatomy of a Performance Problem
-
-Lastly, a couple isolated examples of performance problems. A real app usually
-has a combination of problems and may go beyond these simple examples, but these
-are common bottlenecks shown on their own.
-
-Important caveat: tracing always imposes some amount of overhead on the
-browser’s regular operation. This is usually negligible for standard traces, but
-Frame Viewer traces are expensive and timing is not necessarily representative
-for Frame Viewer traces. It’s more useful to see what’s going on, rather than
-how long a particular operation took. In particular the DrawLayers operation on
-the compositor thread is expensive since it does most of the frame dump.
-
-#### Excess Javascript / Touch Responsiveness
-
-Remember, the JavaScript main thread is a web app’s UI thread. Here’s an example
-where a JS event handler that spends 50ms in V8 during the requestAnimationFrame
-callback gets in the way of touch events, causing a long stall in the rendering
-pipeline:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/19.png)
-
-Note the compositor thread is essentially idle during this time since the main
-thread can’t run additional JavaScript to process new touch events while its
-busy running the long rAF callback. The user would not see a new Renderer frame
-during this period (jank).
-
-The compositor is capable of running certain animations on its own (composited
-scroll and accelerated CSS animations), which it can run without waiting on JS.
-However with a touch event handler registered, as is the case on this page, the
-compositor thread must wait on the Blink main thread to process the touch event
-before responding to it by e.g. scrolling because JavaScript might call
-preventDefault on the touch event.
-
-#### Unexpected Painting
-
-Sometimes the only reasonable way to achieve an effect is to paint, but
-sometimes either Blink gets overeager and invalidates more than seems necessary
-or JavaScript manipulates style that invalidates more than it needs to.
-
-Frame viewer is great for catching these cases.
-
-For instance, look at this jsfiddle example from the Silk page set:
-<http://jsfiddle.net/ugkd4/9/embedded/result/>
-
-Here’s a trace ([trace
-file](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_trace))
-of that animation running for a few seconds.
-
-It’s supposed to demonstrate performing a clip with composited layers, so there
-shouldn’t be any painting going on. Stepping through the frames, though, we
-notice an odd invalidation at the beginning of each animation:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/20.png)
-
-What’s that red rectangle doing there? Clicking on its associated layer and
-looking at layerName reveals it as “RenderButton BUTTON id=’button’”
-
-OK, so what’s going on with the button? The main thread frame that produced this
-invalidation precedes it in the CrRendererMain timeline, and shows a JavaScript
-timer firing:
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/21.png)
-
-This makes sense, since referring to our example code the timer is firing once a
-second to restart the animation.
-
-So we know something in that timer’s JS block caused a style recalculation
-(visible under the timer’s V8 execution block). Unfortunately there the trail
-goes cold, because we don’t know what style change did it. We can start
-commenting out style changes and seeing if the invalidation goes away, however.
-
-A few rounds of that later, we have a simple reduction:
-
-<http://jsfiddle.net/3wMzq/1/embedded/result/>
-
-And its [corresponding
-trace](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_reduced_trace).
-
-[<img alt="image"
-src="/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png">](/developers/how-tos/trace-event-profiling-tool/using-frameviewer/22.png)
-
-Nothing is changing on screen, and we’ve stripped out the additional DOM and all
-JavaScript except the empty click handler, which gets called once a second… and
-it’s still repainting!
-
-At which point it becomes clear that this is in fact a bug in Chrome, which one
-[files](https://code.google.com/p/chromium/issues/detail?id=369358).
-
-Happy hacking! \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/nytimes_scroll_trace.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/nytimes_scroll_trace.sha1
deleted file mode 100644
index bc30169eeb7..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/nytimes_scroll_trace.sha1
+++ /dev/null
@@ -1 +0,0 @@
-31f8efd0218500ee0c8916dd5575987129ec9111 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/output_optimized_frame.gif.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/output_optimized_frame.gif.sha1
deleted file mode 100644
index 821e9fdbe64..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/output_optimized_frame.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b774396339433982f409599d05b85a33a4b792de \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png.sha1
deleted file mode 100644
index 84b44bfb9e3..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/process.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d9f11f7b9d16db5248e12cedf7e0a8ea2c0de267 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_reduced_trace.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_reduced_trace.sha1
deleted file mode 100644
index b9dc0db24b1..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_reduced_trace.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2d6590425df9e92b39fa46b9250a071faaf16baf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_trace.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_trace.sha1
deleted file mode 100644
index 7364e645a7e..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/repaint_example_trace.sha1
+++ /dev/null
@@ -1 +0,0 @@
-202fc924c87d8f6875b94af68066f0592b89db21 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png.sha1 b/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png.sha1
deleted file mode 100644
index 678306a0d70..00000000000
--- a/chromium/docs/website/site/developers/how-tos/trace-event-profiling-tool/using-frameviewer/summarize.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-691e9cdbbb7453270424c836a02af22f59b0fd49 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/using-drmemory/index.md b/chromium/docs/website/site/developers/how-tos/using-drmemory/index.md
deleted file mode 100644
index 5791820f319..00000000000
--- a/chromium/docs/website/site/developers/how-tos/using-drmemory/index.md
+++ /dev/null
@@ -1,232 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: using-drmemory
-title: Using Dr. Memory
----
-
-[TOC]
-
-### Note: Dr.Memory bot has retired and the documentation here is obsolete (added on Jul. 27, 2017)
-
-### Dr. Memory is a new open-source tool for finding memory errors - similar to Memcheck (Valgrind) but with Windows support, including detection of Windows handle leaks and GDI usage errors.
-
-Dr. Memory is running on the MFYI waterfall [MFYI
-waterfall](http://build.chromium.org/p/chromium.memory.fyi/waterfall?builder=Chromium+Windows+Builder+(DrMemory)&builder=Windows+Unit+(DrMemory)&builder=Windows+Browser+(DrMemory)+(1)&builder=Windows+Browser+(DrMemory)+(2)&reload=none)
-where it finds bugs in Chromium on Windows.
-
-If you want to try Dr. Memory on your machine, please do the following:
-
-* First of all, you need Windows. Win7 x64 is preferred. DrMemory
- supports Linux, but the support is not as robust.
-
-* [Build](/developers/how-tos/build-instructions-windows) Chromium
- tests on Windows with the following GN configuration (you can save
- some time by building only the small tests like googleurl, ipc,
- base, net to start with). Build with the following setting in order
- to disable inlining and FPO for better callstacks:
-
- enable_iterator_debugging = false
-
- is_component_build = true
- is_debug = false
-
-* The Dr. Memory binaries are downloaded from Google Storage
- automatically (on Windows) into the third_party/drmemory directory.
-* Now you can run chromium tests like this:
- tools\\valgrind\\chrome_tests.bat -t *&lt;test&gt;* --tool drmemory_light #
- only search for unaddressable accesses and uses-after-free
- or
- tools\\valgrind\\chrome_tests.bat -t *&lt;test&gt;* --tool drmemory_full #
- search for uninits and leaks etc as well
- Alternatively, if you prefer Msysgit, you can also use
- tools/valgrind/chrome_tests.sh with the same arguments. Just be aware that
- the bots use the .bat script.
-* You can use --build-dir to select between Debug and Release, for
- example: tools\\valgrind\\chrome_tests.bat -t base_unittests --tool
- drmemory_light --build-dir=out\\Release
-* You can use --gtest_filter to run an individual test or a subset of
- tests, for examle:
- tools\\valgrind\\chrome_tests.bat -t base_unittests --tool drmemory_light
- --gtest_filter=A\*
-* You can use --drmemory_ops to add additional Dr. Memory options, for
- example: tools\\valgrind\\chrome_tests.bat -t base_unittests --tool
- drmemory_light --drmemory_ops "-pause_at_error"
-
-* Extra Dr. Memory specific options can be passed via option
- --drmemory_ops, for example: tools\\valgrind\\chrome_tests.bat
- --drmemory_ops "-fuzz" for [fuzzing the test with Dr.
- Memory](/developers/testing/dr-fuzz).
-* It will print you some error reports at the end.
-
-If for some reason you cannot reproduce a bot failure on your Windows machine,
-look for the exact command that started the tests and run that. For example,
-here is one variation of the test command that catches some memory bugs that the
-above commands may not catch:
-
-src\\tools\\valgrind\\chrome_tests.bat --brave-new-test-launcher
---test-launcher-bot-mode --test &lt;test&gt; --tool drmemory_full --target
-Release --build-dir src\\out
-
-### OK, I've found a real bug
-
-Great!
-
-Please file a crbug and add the
-[Stability-Memory-DrMemory](http://code.google.com/p/chromium/issues/list?q=Stability-Memory-DrMemory)
-label.
-
-### drmemory_light vs drmemory_full
-
-Light: searches for unaddressable accesses like OOB or use-after-frees, handle
-leaks, and graphical library usage errors, incurring a moderate execution
-slowdown.
-
-Full: additionally searches for uninitialized reads but adds a large slowdown.
-
-More on the "full" mode:
-
-If you're familiar with the Valgrind guts you probably know that tools like
-Valgrind and Dr. Memory need to intercept and handle all system calls to know
-precisely what data is uninitialized, what is read and so on.
-
-In contrast to the open-source Linux kernel with just a hundred system calls or
-so, on Windows we have an open-ended problem of handling undocumented system
-calls.
-We're trying hard to do that but we haven't finished yet. We have some
-heuristics that work pretty well to ignore errors stemming from system libraries
-making system calls as opposed to Chromium code, but if you do see an error
-report that you believe is a false positive, please create a short reproducer
-and file it into our [issue
-tracker](http://code.google.com/p/drmemory/issues/list?can=2&q=Bug%3DFalsePositive).
-
-### Suppressing error reports from the bots
-
-**TODO(rnk): When the DrMemory bots have moved to the chromium.memory.fyi
-waterfall, this information will be moved into the [memory
-sheriff](/system/errors/NodeNotFound) page.**
-
-**timurrrr: most of this info sounds DrMemory-specific, do we really want to put
-it onto the "common" page?**
-
-The DrMemory suppression file is at
-tools/valgrind/drmemory/suppressions\[_full\].txt.
-Generally speaking, suppressions in these files are maintained in exactly the
-same way as those for all of the other memory tools we use for Chromium, except
-that DrMemory uses a slightly different suppression format.
-
-When the bot generates a report, follow the link to the bot's stdio and search
-for "hash=#" to find the report quickly. You should see something similar to:
-
-UNADDRESSABLE ACCESS: reading 0x00000000-0x00000004 4 byte(s) # 0
-TestingProfile::FinishInit \[chrome\\test\\base\\testing_profile.cc:211\] # 1
-TestingProfile::TestingProfile \[chrome\\test\\base\\testing_profile.cc:164\] #
-2 BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody
-\[chrome\\browser\\browser_about_handler_unittest.cc:110\] # 3
-testing::Test::Run \[testing\\gtest\\src\\gtest.cc:2162\]Note: @0:00:08.656 in
-thread 1900 Note: instruction: mov (%ebx) -&gt; %esi Suppression (error
-hash=#30459DB8320B1FA3#): { UNADDRESSABLE ACCESS
-name=&lt;insert_a_suppression_name_here&gt; \*!TestingProfile::FinishInit
-\*!TestingProfile::TestingProfile
-\*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody
-\*!testing::Test::Run }
-
-As a starting point, you can copy the suppression (the portion between the curly
-brackets **not including the brackets**) into the suppressions.txt file and then
-widen it so it covers any similar reports on other bots.
-The curly brackets are **not** part of the suppression as in all the other
-memory tools! DrMemory suppressions are separated by blank lines instead, so
-make sure your suppression does not run into an existing suppression.
-
-Each frame from the stack trace is of the form
-"&lt;module&gt;!&lt;function&gt;". For functions from Chrome, we generally link
-the code statically into many different binaries, so we always use a wildcard
-for the module.
-For third party code, it is generally helpful to identify which DLL the frame
-came from, especially since we often do not have debug info for windows system
-libraries.
-
-As in the other tool suppression formats, '\*' is a single frame variable-width
-wildcard, '?' is a single-character wildcard, and '...' will match any number of
-frames.
-
-DrMemory has support for a handful of other pattern matching mechanisms.
-In particular, if you paste the instruction from the report on a line starting
-with "instruction=", you can match the exact instruction producing the report.
-The instruction= qualifier is mostly useful when suppressing bit-level false
-positive uninitialized reads in third party libraries where we don't have an
-accurate callstack and want to make a tight suppression.
-
-Once you have your suppression, you can test that it suppresses the existing
-reports using tools/valgrind/waterfall.sh as you would with the other memory
-tools.
-
-### Running Chromium under Dr. Memory on a given set of URLs
-
-First, put the list of URLs into tools\\valgrind\\reliability\\url_list.txt, one
-URL per line without the http:// prefix. You can also put in the local URLs like
-file://c:\\mypath\\repro.htm
-
-Then, run
-
-tools\\valgrind\\chrome_tests.bat -t reliability --tool drmemory
---tool_flags="-no_check_uninitialized -no_count_leaks"
-
-If you're searching for some stability/security bugs, you may consider running
-Chromium in the single process mode to increase the probability of the report by
-applying this patch:
-
-Index: tools/valgrind/chrome_tests.py
-===================================================================
---- tools/valgrind/chrome_tests.py ([revision
-96002](http://code.google.com/p/chromium/source/detail?r=96002))
-+++ tools/valgrind/chrome_tests.py (working copy)
-@@ -271,7 +271,8 @@
-# Valgrind timeouts are in seconds.
-UI_VALGRIND_ARGS = \["--timeout=7200", "--trace_children", "--indirect"\]
-# UI test timeouts are in milliseconds.
-- UI_TEST_ARGS = \["--ui-test-action-timeout=120000",
-+ UI_TEST_ARGS = \["--single-process=yes",
-+ "--ui-test-action-timeout=120000",
-"--ui-test-action-max-timeout=280000"\]
-def TestAutomatedUI(self):
-
-### Running your custom command line under Dr. Memory
-
-Sometimes you may need to run your own program or your own custom command line
-under Dr. Memory. For example, if you want to prefix your own "chrome.exe
---my-flags" command with Dr. Memory, do the following:
-`tools\valgrind\drmemory.bat chrome.exe -- --my-flags # don't forget to increase
-the timeouts`
-If the command line runs Chrome, you may consider increasing the timeouts by
-appending
-
---ui-test-action-timeout=120000 --ui-test-action-max-timeout=280000
---ui-test-terminate-timeout=120000
-
-to the commandline.
-
-Random notes for the curious ones
-
-You can find the Dr. Memory suppression file for Chrome at
-tools\\valgrind\\drmemory\\suppressions\[_full\].txt
-
-The report files are parsed and re-formatted to be more familiar for Valgrind
-users (see tools\\valgrind\\drmemory_analyze.py).
-
-Excluded tests are listed in tools\\valgrind\\gtest_exclude - see [Using
-Valgrind](/system/errors/NodeNotFound) more for information.
-
-Some debugging tips while using Dr. Memory can be found
-[here](https://github.com/DynamoRIO/drmemory/wiki/Debugging).
-
-For those still wanting to use Valgrind, be aware Valgrind requires Chrome be
-built using the system memory allocator. To do this, add use_allocator = "none"
-to your gn args.
-
-### Feedback?
-
-Drop drmemory-team@ a message \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/using-r-to-reduce-page-cycler-regressions/index.md b/chromium/docs/website/site/developers/how-tos/using-r-to-reduce-page-cycler-regressions/index.md
deleted file mode 100644
index 05216670416..00000000000
--- a/chromium/docs/website/site/developers/how-tos/using-r-to-reduce-page-cycler-regressions/index.md
+++ /dev/null
@@ -1,202 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: using-r-to-reduce-page-cycler-regressions
-title: Using R to reduce Page Cycler Regressions
----
-
-See also
-<https://www.chromium.org/developers/testing/page-cyclers/analyzing-page-cycler-results>.
-
-IMPORTANT: When you see a page cycler regression, make sure to upload a saved
-copy of the before/after stdio data off the bot. We regularly delete that data
-off of buildbot, and you'll need it to do any of the analysis below.
-
-Most of the time, with page cycler regressions, there are a handful of pages in
-that test suite that regress. If you can narrow down which pages regressed, it's
-easier to make a reduce suite that you can iterate on quickly to address the
-regression.
-
-R is a programming language for statistical analysis that make it easy to do
-analysis on these results. I got a copy at
-<http://cran.r-project.org/bin/macosx/>. I know very little R. If you have more
-experience with R, please fix up this page to be moar awesome.
-
-The page cycler stdio page has a detailed output of the runtime of each page in
-the page cycler test. For example, page_cycler_moz spits out:
-
-Pages:
-\[bugzilla.mozilla.org,espn.go.com,home.netscape.com,hotwired.lycos.com,lxr.mozilla.org,my.netscape.com,news.cnet.com,slashdot.org,vanilla-page,web.icq.com,www.altavista.com,www.amazon.com,www.aol.com,www.apple.com,www.cnn.com,www.compuserve.com,www.digitalcity.com,www.ebay.com,www.excite.com,www.expedia.com,www.google.com,www.iplanet.com,www.mapquest.com,www.microsoft.com,www.moviefone.com,www.msn.com,www.msnbc.com,www.nytimes.com,www.nytimes.com_Table,www.quicken.com,www.spinner.com,www.sun.com,www.time.com,www.tomshardware.com,www.travelocity.com,www.voodooextreme.com,www.w3.org_DOML2Core,www.wired.com,www.yahoo.com,www.zdnet.com,www.zdnet.com_Gamespot.com\]
-\*RESULT times: t=
-\[376,292,128,85,178,79,87,38,9,54,27,40,43,20,73,35,32,92,37,45,8,44,21,77,34,47,24,52,68,69,42,18,91,71,39,153,144,47,46,80,101,27,35,34,27,53,32,31,29,10,43,22,25,39,14,57,28,25,24,33,35,8,17,14,20,25,44,19,38,66,22,37,15,38,50,32,95,122,40,18,47,49,27,34,35,27,53,31,30,28,10,44,19,26,39,14,57,29,26,24,33,36,8,17,15,19,25,44,19,38,65,24,37,15,40,49,33,94,123,42,18,46,48,26,35,33,27,53,33,30,29,10,44,20,26,40,15,56,29,26,24,33,37,9,17,15,19,26,43,18,38,66,23,37,15,38,51,32,94,121,41,18,47,49,26,35,34,26,54,31,29,28,10,45,21,25,39,14,56,29,26,24,32,36,7,17,14,19,25,43,18,39,65,21,36,15,38,50,31,92,122,41,18,47,49,26,35,35,26,53,31,30,29,9,44,20,25,38,14,57,29,26,25,33,37,8,16,15,20,25,41,19,39,66,23,34,15,39,50,32,93,122,41,19,47,50,26,35,35,25,53,31,31,29,9,44,21,25,39,14,56,30,25,25,33,36,9,17,15,19,25,44,19,38,67,22,36,14,40,51,31,94,122,41,18,47,50,25,36,33,27,53,33,29,29,10,45,21,25,39,14,57,30,27,24,33,37,8,17,15,20,25,43,19,38,66,22,35,14,39,51,33,95,124,40,19,47,49,26,35,35,25,53,32,29,28,10,45,20,25,40,14,56,30,26,25,33,37,9,17,15,20,25,43,19,38,66,22,38,14,40,51,32,94,123,42,19,45,50,27,35,35,26,52,32,30,29,9,44,20,25,39,15,57,29,27,25,34,37,8,17,16,20,27,43,20,39,66,22,37,13,38,51,33,96,123,41,19,45,50\]
-ms
-
-The pages listed under "Pages:" are loaded in a loop 10 times. So, t\[0\] is the
-time to load bugzilla.mozilla.org the first time, and t\[10\] is the time to
-load it the second time around.
-
-Lets create some dummy page cycler data to work with. Lets stay that someone
-commits a patch that causes a regression.
-
-Before patch:
-
-Pages: \[ojan.com, glens-head.org\];
-
-\*RESULT times: t= \[0,99,2,56,0,99,2,56,0,99,2,56,0,99,2,56,0,99,2,56\] ms
-
-After patch:
-
-Pages: \[ojan.com, glens-head.org\];
-
-\*RESULT times: t=
-\[105,34,206,57,105,34,206,57,105,34,206,57,105,34,206,57,105,34,206,57\] ms
-
-Clearly, looking at this, ojan.com got a lot slower. Looking at real page cycler
-data, it's a lot hard to make sense of.
-
-## Get the data into R
-
-So, start the R interpreter and copy-paste the before and after runtimes:
-
-&gt; before = c(0,99,2,56,0,99,2,56,0,99,2,56,0,99,2,56,0,99,2,56)
-
-&gt; after =
-c(105,34,206,57,105,34,206,57,105,34,206,57,105,34,206,57,105,34,206,57)
-
-&gt; pages = c('ojan.com','glens-head.org')
-
-## Working with the data
-
-// Get an easy summary of before
-
-&gt; summary(before)
-
-Min. 1st Qu. Median Mean 3rd Qu. Max.
-
-0.00 1.50 29.00 39.25 66.75 99.00
-
-// Get all the before times for ojan.com
-
-&gt; seq(1, 10 \* length(pages), length(pages))
-
-\[1\] 1 3 5 7 9 11 13 15 17 19
-
-&gt; before\[seq(1, 10 \* length(pages), length(pages))\]
-
-\[1\] 0 2 0 2 0 2 0 2 0 2
-
-// Get all the before times for glens-head.org
-
-&gt; before\[seq(2, 10 \* length(pages), length(pages))\]
-
-\[1\] 99 56 99 56 99 56 99 56 99 56
-
-// Now lets make that a function
-
-&gt; oneSite = function(data, index) {
-
-data\[seq(index, 10 \* length(pages), length(pages))\];
-
-}
-
-&gt; oneSite(before, 1)
-
-\[1\] 0 2 0 2 0 2 0 2 0 2
-
-// And we can make a function to print the before/after summaries for a given
-index.
-
-&gt; summaries = function(index) {
-
-print(pages\[index\]);
-
-print(summary(oneSite(before, index)));
-
-print(summary(oneSite(after, index)));
-
-}
-
-// Before/after summaries for ojan.com
-
-&gt; summaries(1)
-
-\[1\] "ojan.com"
-
-Min. 1st Qu. Median Mean 3rd Qu. Max.
-
-0 0 1 1 2 2
-
-Min. 1st Qu. Median Mean 3rd Qu. Max.
-
-105.0 105.0 155.5 155.5 206.0 206.0
-
-// Now we can loop and see before/after summaries for each site in the cycler.
-
-&gt; for (i in 1:length(pages)) {
-
-summaries(i);
-
-}
-
-\[1\] "ojan.com"
-
-Min. 1st Qu. Median Mean 3rd Qu. Max.
-
-0 0 1 1 2 2
-
-Min. 1st Qu. Median Mean 3rd Qu. Max.
-
-105.0 105.0 155.5 155.5 206.0 206.0
-
-\[1\] "glens-head.org"
-
-Min. 1st Qu. Median Mean 3rd Qu. Max.
-
-56.0 56.0 77.5 77.5 99.0 99.0
-
-Min. 1st Qu. Median Mean 3rd Qu. Max.
-
-34.0 34.0 45.5 45.5 57.0 57.0
-
-// Print all sites where the mean regressed by more than 10ms.
-
-&gt; threshold = 10;
-
-&gt; for (i in 1:length(pages)) {
-
-if (mean(oneSite(before, i)) &lt; (mean(oneSite(after, i) - threshold))) {
-
-summaries(i);
-
-}
-
-}
-
-## Graphs
-
-// Bloxplot visualizing the median and stddev.
-
-&gt; boxplot(before, after)
-
-// Plot with the dots from before as one color and the dots of after as another.
-
-&gt; plot(before, after, col=2:3)
-
-// Plot each site individually using the oneSite function from above.
-
-&gt; boxplot(oneSite(before, 1), oneSite(after, 1))
-
-// Plot all the sites in separate graphs.
-
-&gt; par(mfrow=c(ceiling(sqrt(length(pages))),ceiling(sqrt(length(pages))))) //
-Make a graphics context big enough for all the graphs. Might need to make the
-window that pops up very large for the next loop to work.
-
-&gt; for (i in 1:length(pages)) {
-
-boxplot(oneSite(before, i), oneSite(after, i), main=pages\[i\])
-
-}
diff --git a/chromium/docs/website/site/developers/how-tos/vectorized-icons-in-native-chrome-ui/index.md b/chromium/docs/website/site/developers/how-tos/vectorized-icons-in-native-chrome-ui/index.md
deleted file mode 100644
index fe80df18c28..00000000000
--- a/chromium/docs/website/site/developers/how-tos/vectorized-icons-in-native-chrome-ui/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: vectorized-icons-in-native-chrome-ui
-title: Vectorized icons in native Chrome UI
----
-
-the docs have migrated to markdown:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/components/vector_icons/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/how-tos/visualstudio-tricks/index.md b/chromium/docs/website/site/developers/how-tos/visualstudio-tricks/index.md
deleted file mode 100644
index 2572b0547b8..00000000000
--- a/chromium/docs/website/site/developers/how-tos/visualstudio-tricks/index.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: visualstudio-tricks
-title: VisualStudio Tricks
----
-
-Here is an incomplete stack of tricks to help you work with Chromium in Visual
-Studio.
-
-### **Faster Solution Loading / IntelliSense**
-
-### Loading a huge solution (like all.sln as generated by gn) makes Visual
-Studio very slow, and certain operations like IntelliSense can be somewhat
-unusable. Some tips for speeding it up:
-
-* ### Use the "filters" argument to gn to exclude parts of Chromium
- you're not interested in, e.g. "gn gen --ide=vs
- --filters=//components/omnibox/\* --sln=omnibox out/Debug" will only
- create projects for components/omnibox/ and its dependencies.
- However, be aware that Code Search (see below) will not work on code
- that's been filtered out!
-* ### A very useful extension which helps manage this is
- [VsFunnel](https://marketplace.visualstudio.com/items?itemName=DimitriDering.Funnel).
- This extension allows you to select which projects in a solution
- will be loaded at solution load time, and which will remain in the
- "unloaded" state. Unloaded projects are not indexed by VS, so this
- extension can drastically speed up VS responsiveness. The unloaded
- projects will remain searchable via VsChromium (see below).
-
-### After opening the solution, give Visual Studio about 10-15 minutes to finish
-parsing files etc; it'll become more responsive after that.
-
-### Code Search
-
-### The [VsChromium](http://chromium.github.io/vs-chromium/) extension provides
-fast code search, among other useful features. Code from unloaded solutions (via
-VsFunnel, see above) is still searchable!
-
-### Column Limit
-
-You can set up column guidelines at 80 columns or wherever you would like by
-installing [this Visual Studio
-extension](https://visualstudiogallery.msdn.microsoft.com/da227a0b-0e31-4a11-8f6b-3a149cf2e459)
-and using the context menu options.
-
-### cpplint.py integration
-
-cpplint.py integration makes it easy to check that a source file conforms to the
-style guide. To do this, just go to Tools &gt; External Tools &gt; Add. Specify:
-
-* Title: cpplint.py
-* Command: c:\\src\\depot_tools\\cpplint.bat
-* Arguments: --output=vs7 $(ItemPath)
-* Initial directory: $(ItemDir)
-* Check Use Output window
-
-To create a keyboard shortcut:
-
-1. Go to Tools &gt; Options &gt; Environment &gt; Keyboard.
-2. Select Tools.ExternalCommand1. (This assumes cpplint.py is your
- first external command in your Tools menu.)
-3. Press a shortcut key (let's say Alt+L) and Assign it.
-4. Press OK.
-
-Or, make the title something like c&pplint.py, and invoke it with Alt+t,p.
-
-### Text Editor (No tabs, indentation, line numbers)
-
-The style guide requires no tabs and 2 char indentation. To set this, go to
-Tools &gt; Options. On the Text Editor/All languages/Tabs page, set
-
-* Indenting radio to Smart
-* Tab size and Indent Size to 2
-* Check Insert spaces
-
-### Debugging visualization, macros, more
-
-See
-<http://www.chromium.org/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers>.
diff --git a/chromium/docs/website/site/developers/how-tos/webkit-gardening/index.md b/chromium/docs/website/site/developers/how-tos/webkit-gardening/index.md
deleted file mode 100644
index 534659eec4a..00000000000
--- a/chromium/docs/website/site/developers/how-tos/webkit-gardening/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/how-tos
- - How-Tos
-page_name: webkit-gardening
-title: webkit-gardening
----
-
-This page has moved: [Gardening Blink](/blink/sheriffing) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/index.md b/chromium/docs/website/site/developers/index.md
deleted file mode 100644
index 3668365d6b3..00000000000
--- a/chromium/docs/website/site/developers/index.md
+++ /dev/null
@@ -1,309 +0,0 @@
----
-breadcrumbs: []
-page_name: developers
-title: For Developers
----
-
-<div class="two-column-container">
-<div class="column">
-
-#### *See also: docs in the source code - <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/README.md>*
-
-### Start here
-
-* [Get the Code: Checkout, Build, &
- Run](/developers/how-tos/get-the-code)
-* [Contributing
- code](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/contributing.md)
-
-### How-tos
-
-#### *Note that some of these guides are out-of-date.*
-
-#### Getting the Code
-
-* [Quick reference](/developers/quick-reference) of common development
- commands.
-* Look at our [Git
- Cookbook](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/git_cookbook.md)
- for a helpful walk-through, or the [Fast Intro to Git
- Internals](/developers/fast-intro-to-git-internals) for a background
- intro to git.
-* [Changelogs for Chromium and Blink](/developers/change-logs).
-
-#### Development Guides
-
-* Debugging on [Windows](/developers/how-tos/debugging-on-windows),
- [Mac OS X](/developers/how-tos/debugging-on-os-x),
- [Linux](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/debugging.md)
- and
- [Android](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_debugging_instructions.md).
-* [Threading](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/threading_and_tasks.md)
-* [Subtle Threading Bugs and How to Avoid
- Them](/developers/design-documents/threading/suble-threading-bugs-and-patterns-to-avoid-them)
-* [Visual Studio tricks](/developers/how-tos/visualstudio-tricks)
-* [Debugging GPU related
- code](/developers/how-tos/debugging-gpu-related-code)
-* [How to set up Visual Studio debugger
- visualizers](/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers)
- to make the watch window more convenient
-* [Linux
- Development](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_development.md)
- tips and porting guide
-* [Mac Development](/developers/how-tos/mac-development)
-* [Generated files](/developers/generated-files)
-* [Chromoting (Chrome Remote Desktop)
- compilation](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/chromoting_build_instructions.md)
-* [Updating module
- dependencies](/developers/how-tos/chromium-modularization)
-* [Editing
- dictionaries](/developers/how-tos/editing-the-spell-checking-dictionaries)
-* Editors Guides
- * [Atom](/developers/using-atom-as-your-ide)
- * [Eclipse](/developers/using-eclipse-with-chromium)
- * [Emacs
- cscope](/developers/how-tos/cscope-emacs-example-linux-setup)
- * [QtCreator](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/qtcreator.md)
- * [SlickEdit](/developers/slickedit-editor-notes)
- * [Sublime
- Text](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/sublime_ide.md)
- * [Visual Studio
- Code](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/vscode.md)
-* [Learning your way around the
- code](/developers/learning-your-way-around-the-code)
-* [Guide to Important Libraries, Abstractions, and Data
- Structures](/developers/libraries-guide)
- * [Important Abstractions and Data
- Structures](/developers/coding-style/important-abstractions-and-data-structures)
- * [Smart Pointer Guidelines](/developers/smart-pointer-guidelines)
- * [String usage](/developers/chromium-string-usage)
-* [Android WebView](/developers/androidwebview)
-* [GitHub Collaboration](/developers/github-collaboration)
-
-See also: All [How-tos](/developers/how-tos).
-
-### Blink
-
-* [Blink Project](/blink)
- * [DOM Team](/teams/dom-team)
- * [Binding Team](/teams/binding-team)
- * [Layout Team](/teams/layout-team)
- * [Memory Team](/blink/memory-team)
- * [Paint Team](/teams/paint-team)
- * [Style Team](/teams/style-team)
- * [Animation Team](/teams/animations)
- * [Input Team](/teams/input-dev)
-* [Running and Debugging the Blink web tests (pka layout
- tests)](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_tests.md)
-* [Blink Sheriffing](/blink/sheriffing)
-* [Web IDL interfaces](/developers/web-idl-interfaces)
-* [Class Diagram: Blink Core to Chrome
- Browser](/developers/class-diagram-webkit-webcore-to-chrome-browser)
-* [Rebaselining
- Tool](http://code.google.com/p/chromium/wiki/RebaseliningTool)
-* [How repaint
- works](https://docs.google.com/a/chromium.org/document/d/1jxbw-g65ox8BVtPUZajcTvzqNcm5fFnxdi4wbKq-QlY/edit)
-* [Phases of
- Rendering](https://docs.google.com/a/chromium.org/document/d/1UkxPz9GDQXLBZcbw5OeUQpk1VIq_BKhm6BGvWJ5mKdU/edit)
-* [Web Platform
- Tests](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_platform_tests.md)
-* [Baseline computation and some line layout
- docs](https://docs.google.com/a/chromium.org/document/d/1OP49xbB-D7A0qKNAwFTOfbDL-1dYxu74Jp38ZKAS6kk/edit)
-* [Fast Text Autosizer](http://tinyurl.com/fasttextautosizer)
-* [Debugging with
- ScopedLogger](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/WebKit/Source/wtf/ScopedLogger.md)
-
-### Testing and Infrastructure
-
-* [Tests](/developers/testing)
- * [Tour of the Chromium Continuous Integration
- Console](/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot)
- * [WebKit Layout Tests](/developers/testing/webkit-layout-tests)
- * [Flakiness Dashboard
- HOWTO](/developers/testing/flakiness-dashboard)
- * [Frame Rate Test](/developers/testing/frame-rate-test)
- * [GPU Testing](/developers/testing/gpu-testing)
- * [GPU Recipe](/system/errors/NodeNotFound)
- * [WebGL Conformance
- Tests](/developers/testing/webgl-conformance-tests)
- * [Blink, Testing, and the W3C](/blink/blink-testing-and-the-w3c)
- * [The JSON Results
- format](/developers/the-json-test-results-format)
-* [Browser Tests](/developers/testing/browser-tests)
-* [Handling a failing
- test](/developers/tree-sheriffs/handling-a-failing-test)
-* [Running Chrome
- tests](http://code.google.com/p/chromium/wiki/RunningChromeUITests)
-* [Reliability Tests](/system/errors/NodeNotFound)
-* [Using Valgrind](/system/errors/NodeNotFound)
-* [Page Heap for Chrome](/developers/testing/page-heap-for-chrome)
-* [Establishing Blame for Memory usage via
- Memory_Watcher](/developers/memory_watcher)
-* [GPU Rendering
- Benchmarks](/developers/design-documents/rendering-benchmarks)
-* [Infra
- documentation](https://chromium.googlesource.com/infra/infra/+/HEAD/doc/index.md)
-* [Contacting a
- Trooper](https://chromium.googlesource.com/infra/infra/+/HEAD/doc/users/contacting_troopers.md)
-
-
-### Performance
-
-* [Adding Performance
- Tests](/developers/testing/adding-performance-tests)
-* [Telemetry: Performance testing framework](/developers/telemetry)
- * [Cluster Telemetry](/developers/cluster-telemetry): Run
- benchmarks against the top 10k web pages
-* [Memory](/Home/memory)
-* [Profiling Tools](/developers/profiling-chromium-and-webkit):
- * [Thread and Task Profiling and
- Tracking](/developers/threaded-task-tracking) (about:profiler)
- Also allows diagnosing per-task heap usage and churn if Chrome runs with
- "--enable-heap-profiling=task-profiler".
- * [Tracing tool](/developers/how-tos/trace-event-profiling-tool)
- (about:tracing)
- * [Deep Memory Profiler](/developers/deep-memory-profiler)
- * Investigating [Windows Binary
- Sizes](/developers/windows-binary-sizes)
- * Windows-specific issues can be profiled with
- [UIforETW](https://randomascii.wordpress.com/2015/09/01/xperf-basics-recording-a-trace-the-ultimate-easy-way/)
- * [Leak Detection](/developers/leak-detection)
-* [Perf
- Sheriffing](http://www.chromium.org/developers/tree-sheriffs/perf-sheriffs)
-
-### Sync
-
-* [Sync](/developers/design-documents/sync)
-
-### **Diagnostics**
-
-* [Diagnostics](/developers/diagnostics)
-
-### Documentation hosted in / generated by source code
-
-* [depot_tools](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html)
-* [C++ use in Chromium](http://chromium-cpp.appspot.com/)
-* [GN](https://gn.googlesource.com/gn/): Meta-build system that
- generates NinjaBuild files; Intended to be GYP replacement.
-* [MB](https://chromium.googlesource.com/chromium/src/+/HEAD/tools/mb#):
- Meta-build wrapper around both GN and GYP.
-* [Chrome
- Infra](https://chromium.googlesource.com/infra/infra/+/HEAD/doc/index.md)
-
-</div>
-<div class="column">
-
-### Practices
-
-* [Core Product Principles](/developers/core-principles)
- * [No Hidden
- Preferences](/developers/core-principles/no-hidden-preferences)
-* [Contributing code](/developers/contributing-code)
- * [Coding style](/developers/coding-style)
- * [C++ Dos and
- Don'ts](/developers/coding-style/cpp-dos-and-donts)
- * [Cocoa Dos and
- Don'ts](/developers/coding-style/cocoa-dos-and-donts)
- * [Web Development Style
- Guide](/developers/web-development-style-guide)
- * [Java](/developers/coding-style/java)
- * [Jinja](/developers/jinja)
- * [Becoming a Committer](/getting-involved/become-a-committer)
- * [Gerrit Guide (Googler/Non-Googler)](/developers/gerrit-guide)
- * [Create experimental branches to work
- on](/developers/experimental-branches)
- * [Committer's
- responsibility](/developers/committers-responsibility)
- * [OWNERS
- Files](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/code_reviews.md)
- * [Try server
- usage](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/infra/trybot_usage.md)
- * [Commit queue](/developers/testing/commit-queue)
- * [Tips for minimizing code review lag across
- timezones](/developers/contributing-code/minimizing-review-lag-across-time-zones)
-* [Starting to work on a new web platform
- feature](/blink/launching-features)
-* [Filing bugs](/for-testers/bug-reporting-guidelines)
- * [Severity Guidelines for Security
- Issues](/developers/severity-guidelines)
-* [Network bug
- triage](/developers/design-documents/network-stack/network-bug-triage)
-* [GPU bug
- triage](https://docs.google.com/document/d/1Sr1rUl2a5_RBCkLtxfx4qE-xUIJfYraISdSz_I6Ft38/edit#heading=h.vo10gbuchnj4)
-* [Ticket milestone punting](/system/errors/NodeNotFound)
-* [Tree Sheriffs](/developers/tree-sheriffs)
-* [Useful extensions for developers](/developers/useful-extensions)
-* [Adding 3rd-party libraries](/developers/adding-3rd-party-libraries)
-* [Shipping changes that are
- enterprise-friendly](/developers/enterprise-changes)
-
-Design documents
-
-* [Getting around the source code
- directories](/developers/how-tos/getting-around-the-chrome-source-code)
-* [Tech Talks: Videos & Presentations](/developers/tech-talk-videos)
-* [Engineering design docs](/developers/design-documents)
-* [User experience design docs](/user-experience)
-* *Sharing design documents on Google drive: share on Chromium domain*
- If on private domain, share with self@chromium.org, then log in with
- self@chromium.org, click "Shared with Me", right-click "Make a copy", then
- set the permissions: "Public on the web" or "Anyone with the link",
- generally "Can comment". It a good idea to then mark your local copy
- *(PRIVATE)* and only edit the public copy.
-
-### Communication
-
-* [General discussion groups](/developers/discussion-groups)
-* [Technical discussion
- groups](/developers/technical-discussion-groups)
-* [Slack](/developers/slack)
-* [IRC](/developers/irc)
-* [Development calendar and release info](/developers/calendar)
-* [Common Terms & Techno
- Babble](http://code.google.com/p/chromium/wiki/Glossary)
-* [Public calendar for meetings discussing new
- ideas](/developers/public-calendar-for-meetings-discussing-new-ideas)
-* Questions or problems with your Chromium account? Email
- [accounts@chromium.org](mailto:accounts@chromium.org).
-
-### Status
-
-* [Status Update Email Best
- Practices](/developers/status-update-email-best-practices)
-* [chromestatus.com](http://chromestatus.com)
-
-Usage statistics
-
-* [MD5 certificate statistics](/developers/md5-certificate-statistics)
-
-### Graphics
-
-* [Graphics overview and design
- docs](/developers/design-documents/chromium-graphics)
-
-### External links
-
-* Waterfalls
- * [Continuous
- build](http://build.chromium.org/p/chromium/waterfall)
- ([console](http://build.chromium.org/p/chromium/console))
- * [Memory](http://build.chromium.org/p/chromium.memory/waterfall)
- ([console](http://build.chromium.org/p/chromium.memory/console))
- * [For Your Information
- build](http://build.chromium.org/p/chromium.fyi/waterfall)
- ([console](http://build.chromium.org/p/chromium.fyi/console))
- * [Try
- Server](http://build.chromium.org/p/tryserver.chromium.linux/waterfall)
-* [Build Log Archives
- (chromium-build-logs)](http://chromium-build-logs.appspot.com/)
-* [Bug tracker](https://bugs.chromium.org/p/chromium/issues/list)
-* [Code review tool](https://chromium-review.googlesource.com/)
-* [Viewing the
- source](https://chromium.googlesource.com/chromium/src/)
-* [Glossary](http://code.google.com/p/chromium/wiki/Glossary)
- (acronyms, abbreviations, jargon, and technobabble)
-
-</div>
-</div>
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/installer/index.md b/chromium/docs/website/site/developers/installer/index.md
deleted file mode 100644
index 723335b4c96..00000000000
--- a/chromium/docs/website/site/developers/installer/index.md
+++ /dev/null
@@ -1,215 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: installer
-title: A short trip through the Chromium installer's mind!
----
-
-## Installed components
-
-* [Registry entries](/developers/installer#reg)
-* [Shortcuts](/developers/installer#shortcuts)
-
-### Registry Entries
-
-Syntax:
-
-&lt;variable to be defined later&gt;
-
-{for all things matching this definition}
-
-\[RegistryValue\]
-
-(Wow6432Node\\) -- Only on 64-bit versions of Windows.
-
-Entry types:
-
-* *AppId entries* (Windows 8+ only):
- * &lt;root&gt;\\Software\\Classes\\Chromium&lt;suffix&gt;
- ([AppUserModelId on
- MSDN](http://msdn.microsoft.com/library/windows/desktop/dd378459.aspx))
-* *ProgId entries*:
- * &lt;root&gt;\\Software\\Classes\\ChromiumHTM&lt;suffix&gt;
- ([ProgId on
- MSDN](http://msdn.microsoft.com/en-us/library/aa911706.aspx))
-* *DelegateExecute COM registration entries* (Windows 8+ only):
- * &lt;root&gt;\\Software\\Classes\\(Wow6432Node\\)CLSID\\{A2DF06F9-A21A-44A8-8A99-8B9C84F29160}
-* *App Registration entries*:
- * &lt;root&gt;\\Software\\Microsoft\\Windows\\CurrentVersion\\App
- Paths\\chrome.exe (for ShellExecute to be able to find
- chrome.exe without needing to modify PATH;
- [MSDN](http://msdn.microsoft.com/library/windows/desktop/ee872121.aspx#appPaths)).
- * &lt;root&gt;\\Software\\{file_assoc}\\OpenWithProgids\[ChromiumHTML&lt;suffix&gt;\]
- (to show up in "Open With" in the context menu for supported
- file types;
- [MSDN](http://msdn.microsoft.com/library/bb166549.aspx)).
-* *Shell Integration entries* (can only be registered in
- &lt;root&gt;==HKLM pre-Win8):
- * &lt;root&gt;\\Software\\Clients\\StartMenuInternet\\Chromium&lt;suffix&gt;
- ([StartMenuInternet on
- MSDN](http://msdn.microsoft.com/library/windows/desktop/dd203067.aspx#internet))
- * Capabilities (URL + File Associations) and other information
- (put under this entry, but could theoretically be anywhere
- in the registry;
- [MSDN](http://msdn.microsoft.com/library/windows/desktop/cc144154.aspx#registration)).
- * &lt;root&gt;\\Software\\RegisteredApplications\[Chromium&lt;suffix&gt;\]
- (to appear in "Default Programs" and have the ability to become
- default browser;
- [MSDN](http://msdn.microsoft.com/library/windows/desktop/cc144154.aspx#RegisteredApplications)).
-* *XP-style default browser entries*:
- * &lt;root&gt;\\Software\\Classes\\{file_association |
- protocol_association}\[Default\] = ChromiumHTM&lt;suffix&gt;
- * These are not necessary post-XP to be the default browser,
- but many programs are still hardcoded to lookup these
- values.
-* *Protocol specific entries*:
- * &lt;root&gt;\\Software\\Client\\StartMenuInternet\\Chromium&lt;suffix&gt;\\Capabilities\\URLAssociations\[&lt;protocol&gt;\]
-* *Active Setup entries* (Google Chrome system-level installs only --
- [Active Setup design
- doc](https://docs.google.com/a/google.com/document/d/1yQdG1wMDKi_lf0i8bk6P2_BWqudRb-ap6Y2C5f1RO2w/edit)):
- * HKEY_LOCAL_MACHINE\\Software\\(Wow6432Node\\)Microsoft\\Active
- Setup\\Installed
- Components\\{8A69D345-D564-463c-AFF1-A69D9E530F96}
-* *Uninstall entries*:
- * &lt;root&gt;\\Software\\(Wow6432Node\\)Microsoft\\Windows\\CurrentVersion\\Uninstall\\Chromium
- (to show up in "Programs and Features" or "Add or Remove
- Programs" in the Control Panel)
-
-Note: &lt;root&gt;\\Software\\Classes is also known as
-[HKEY_CLASSES_ROOT](http://msdn.microsoft.com/library/windows/desktop/ms724475.aspx)
-
-For *Google Chrome* replace the following values as indicated:
-
-* Chromium --&gt; Chrome (except for Protocol specific entries and
- Uninstall entries)
-* Chromium --&gt; Google Chrome (for Protocol specific entries and
- Uninstall entries)
-* ChromiumHTM --&gt; ChromeHTML
-* StartMenuInternet\\Chromium --&gt; StartMenuInternet\\Google Chrome
-* {A2DF06F9-A21A-44A8-8A99-8B9C84F29160} --&gt;
- {5C65F4B0-3651-4514-B207-D10CB699B14B}
-
-#### System-level installs
-
-* &lt;suffix&gt; = ""
-* At Install:
- * All entry types fully registered in &lt;root&gt; =
- HKEY_LOCAL_MACHINE
- * If making Chromium default machine-wide:
- * Register *XP-style default browser entries* in
- &lt;root&gt;=HKEY_CURRENT_USER
-* + When making Chromium default for a user:
- * Register *XP-style default browser entries* in
- &lt;root&gt;=HKEY_CURRENT_USER
- * (on top of incanting Windows into making Chromium the default
- browser, but that doesn't require any further registrations
- post-XP).
-* + When making Chrome the default handler for some protocol:
- * Register *protocol specific entries* with
- &lt;root&gt;=HKEY_LOCAL_MACHINE if not already registered
- (requires UAC)
- * Register *XP-style default entries* for this protocol with
- &lt;root&gt;=HKEY_CURRENT_USER
-
-#### User-level installs
-
-* &lt;suffix&gt; = .&lt;base32 encoding of the md5 hash of the user’s
- SID&gt; (which is always 26 characters (27 with the dot))
- * Exception (for backward compatibility with old registration
- schemas):
- * &lt;suffix&gt; = &lt;none&gt; if the user already has the
- unsuffixed registration in HKLM from the old-style
- registrations.
- * &lt;suffix&gt; = .&lt;username&gt; if the user already has
- the username suffixed registration in HKLM from the
- old-style registrations.
- * Note: *AppId Entries* are always suffixed with the new-style
- suffixed (as they were introduced after the registration
- schema changes).
-* At install:
- * Install *AppId, ProgId, and App Registration entries* in
- &lt;root&gt;=HKEY_CURRENT_USER.
- * On Windows 8+ also install *Shell Integration entries in*
- &lt;root&gt;=HKEY_CURRENT_USER.
- * Before Windows 8, if |elevate_if_not_admin| (which is true when
- triggering the "make chromium default" flow):
- * Elevate (UAC) and register all entry types in
- &lt;root&gt;=HKEY_LOCAL_MACHINE.
-* When making Chromium default:
- * If some registration are missing (i.e. *Shell Integration
- entries* before Windows 8 if the user has not yet elevated
- Chromium to complete registration):
- * Elevate (UAC) and register all entry types in
- &lt;root&gt;=HKEY_LOCAL_MACHINE.
- * Register *XP-style default browser entries* in
- &lt;root&gt;=HKEY_CURRENT_USER
-* When making Chrome the default handler for some protocol:
- * Register *protocol specific entries* with
- &lt;root&gt;=HKEY_LOCAL_MACHINE (HKEY_CURRENT_USER on Win8+) if
- not already registered (requires UAC before Win8)
- * Register *XP-style default entries* for this protocol with
- &lt;root&gt;=HKEY_CURRENT_USER
-
-### Shortcuts
-
-#### User-level installs
-
-* At install:
- * Create Start Menu shortcut (Start Screen on Win8)
- C:\\Users\\&lt;username&gt;\\AppData\\Roaming\\Microsoft\\Windows\\Start
- Menu\\Programs\\Chromium\\Chromium.lnk
- * Pin shortcut to taskbar (Windows 7+)
- C:\\Users\\&lt;username&gt;\\AppData\\Roaming\\Microsoft\\Internet
- Explorer\\Quick Launch\\User Pinned\\TaskBar
- * Create desktop shortcut
- C:\\Users\\&lt;username&gt;\\Desktop
- * Create Quick Launch shortcut
- C:\\Users\\&lt;username&gt;\\AppData\\Roaming\\Microsoft\\Internet
- Explorer\\Quick Launch
-
-#### System-level installs
-
-* At install:
- * Create all-users Start Menu shortcut (in Win8 this will only
- show on the Start Screen for the user running the install (i.e.,
- not for new users); Microsoft claims that this is by design).
- C:\\ProgramData\\Microsoft\\Windows\\Start
- Menu\\Programs\\Chromium\\Chromium.lnk)
- * Create all-users Desktop shortcut (shows on every user’s
- Desktop, but if any user deletes it, it’s gone for all...)
- C:\\Users\\Public\\Desktop\\Chromium.lnk
-* At install (if the installer is running in a given user's context;
- i.e., not for the MSI which runs as SYSTEM):
- * Create per-user Quick Launch shortcut
- C:\\Users\\&lt;username&gt;\\AppData\\Roaming\\Microsoft\\Internet
- Explorer\\Quick Launch
- * Pin shortcut to taskbar (WIndows 7+)
- C:\\Users\\&lt;username&gt;\\AppData\\Roaming\\Microsoft\\Internet
- Explorer\\Quick Launch\\User Pinned\\TaskBar
-* Upon the next login of each other user (when *Active Setup* triggers
- Chromium's *Active Setup* for that user and **only if** that user
- has yet to run Chrome on this machine):
- * Create per-user shortcuts that do not have a matching all-users
- shortcut.
- * Per-user Quick Launch shortcut.
- * Pin shortcut to taskbar (Windows 7+).
- * Per-user desktop shortcut (if the all-users Desktop shortcut
- is absent).
- * Per-user Start Menu shortcut (if the all-users Start Menu
- shortcut is absent).
-
-**Master Preferences**
-
-* do_not_create_desktop_shortcut: Prevents creation of the Desktop
- shortcut in all scenarios above (including Active Setup).
-* do_not_create_quick_launch_shortcut: Prevents creation of the Quick
- Launch shortcut (Windows XP only) in all scenarios above (including
- Active Setup).
-* do_not_create_taskbar_shortcut: Prevents creation of the taskbar pin
- (Windows 7+) in all scenarios above (including Active Setup).
-* do_not_create_any_shortcuts: Supersedes any other preference and
- prevents creation of all shortcuts in all scenarios above (including
- Active Setup).
-
-For *Google Chrome* replace *Chromium* by *Google Chrome* above. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/irc/index.md b/chromium/docs/website/site/developers/irc/index.md
deleted file mode 100644
index 91296cbb554..00000000000
--- a/chromium/docs/website/site/developers/irc/index.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: irc
-title: IRC
----
-
-The channel **#chromium** on **https://webchat.freenode.net/** is used for
-technical discussion as well as communicating about the current state of the
-tree.
-
-For user questions, visit the unofficial support channel **#chromium-support**
-at **https://webchat.freenode.net/**.
-
-Googlers, see [internal IRC
-notes](https://wiki.corp.google.com/twiki/bin/view/Main/ChromeIRC).
-
-For info on IRC servers and ports, see <https://freenode.net/kb/answer/chat>
-
-**Logging**
-
-An unofficial IRC log seems to be hosted at
-https://echelog.com/logs/browse/chromium/ (EDIT: this URL appears to be dead so
-the link has been removed). It's likely that anything you say here will be
-copied in triplicate forever, so only say things your mother would approve of or
-you wouldn't mind being on the news.
-
-**Contributors**
-
-If you are contributing or wish to do so, it is a good idea to connect to this
-channel. In particular, if you are committing, please connect to the channel so
-that the sheriff or others may notify you of build breaks and other
-time-sensitive issues with the build infrastructure. Consider adding your IRC
-nick to the table here:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/user_handle_mapping.md>,
-espeically if it varies wildly from your @chromium.org account name. (This helps
-us know who to ping when things go wrong.)
-
-To find out whether your mapping is working (or to find out who to yell at if
-you're a sheriff), you can ask trungl-bot who a user is:
-
-nick#chromium&gt; trungl-bot: whois user
-
-and trungl-bot should respond shortly with an answer like:
-
-nick#chromium&gt; nick: It looks like user could be: user@chromium.org /
-:da_nick / user@google.com.
-
-You can also do this sneakily in a private message with:
-
-/msg trungl-bot whois user
-
-**Bots**
-
-trungl-bot is a helpful automated servant who can answer many questions for you
-in the channel. Find out what it can do by asking for help, er, "halp":
-
-/msg trungl-bot halp
-
-For example, find the current sheriffs using:
-
-/msg trungl-bot sheriffs
-
-**Getting op permissions for #chromium via chanserv**
-
-If people in the channel repeatedly get off topic and are making it hard for
-sheriffs or chromium contributors to talk without distractions, it may be
-suitable to give them a ban with timeout.
-
-You must first be identified (chanserv requires this) and have the correct
-permissions. Ask someone who already has privileges with chanserv (anyone who
-gets an automatic +v when joining) to grant you the appropriate flags. They will
-need to run:
-
-/msg chanserv flags #chromium &lt;your_nick&gt; +ARVfiorstv
-
-on your behalf. You should know this is successful if you are given voice
-automatically on joining #chromium. If there are problems just ask on IRC (and
-if no one responds, start with maruel@, thakis@, or awong@).
-
-**Off-topic folks in the channel**
-
-If you already have permissions with chanserv, to give an off-topic nick an hour
-to file a bug, gather repro steps/screenshots/test cases, and otherwise see some
-sunlight, use:
-
-/msg chanserv akick #chromium add &lt;their_nick&gt; !T 1h \[optional rationale
-that's logged with chanserv\]
-
-If you'd rather do this manually, you can op yourself as follows:
-
-/msg chanserv op #chromium &lt;your_nick&gt;
-
-and kick the user with something like:
-
-/kick #chromium &lt;nick_to_kick&gt; \[optional rationale for kicking user\]
-
-and if you'd like to un-op yourself after:
-
-/mode #chromium -o &lt;your_nick&gt; \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/javascript-unittests/Coverage.png.sha1 b/chromium/docs/website/site/developers/javascript-unittests/Coverage.png.sha1
deleted file mode 100644
index 0ea1308c843..00000000000
--- a/chromium/docs/website/site/developers/javascript-unittests/Coverage.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0c52ff9b291b685cd1794d37a26996edb57c7410 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/javascript-unittests/EnableCoverage.png.sha1 b/chromium/docs/website/site/developers/javascript-unittests/EnableCoverage.png.sha1
deleted file mode 100644
index 213d39c96c6..00000000000
--- a/chromium/docs/website/site/developers/javascript-unittests/EnableCoverage.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-446acd1bddb5000a4f60c63c5e52c1f9f806cb6f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/javascript-unittests/QUnit.png.sha1 b/chromium/docs/website/site/developers/javascript-unittests/QUnit.png.sha1
deleted file mode 100644
index 2967dde5ca4..00000000000
--- a/chromium/docs/website/site/developers/javascript-unittests/QUnit.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6b2bcf6432c79f8d31b91f9fbe760704645b3486 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/javascript-unittests/index.md b/chromium/docs/website/site/developers/javascript-unittests/index.md
deleted file mode 100644
index e3aec79ffd6..00000000000
--- a/chromium/docs/website/site/developers/javascript-unittests/index.md
+++ /dev/null
@@ -1,219 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: javascript-unittests
-title: JavaScript Unit tests Cookbook for Chrome Remote Desktop
----
-
-[TOC]
-
-## Overview
-
-This page explains how easy it is write a JavaScript Unit test for chrome remote
-desktop using QUnit.
-
-[<img alt="image"
-src="/developers/javascript-unittests/QUnit.png">](/developers/javascript-unittests/QUnit.png)
-
-## Key features
-
-1. Code coverage report with blanket.js
-2. Supports mocks, stubs and spies via sinon.js
-3. Supports DOM testing.
-4. Supports Async testing. (Promises, setTimeouts, etc)
-5. Can be run as a browser test on try-bots and built-bots
-6. Can be run as a standalone page to facilitate fast development
-7. Can be debugged easily with the Developer console.
-
-Currently, the QUnit infrastructure is only used by the chrome remote desktop
-team. It can be easily extended to other teams if there are interests
-
-## In a nut shell
-
-The key components are:
-
-1. **QUnit** is the overall JavaScript unit testing framework. It
- provides a test store, asserts and test reporting.
-2. **SinonJS** provides a mocking/spying/stubbing framework to make
- writing test easier.
-3. **BlanketJS** provides code coverage numbers.
-4. **QUnitBrowserTestRunner** makes it possible to run the unit test in
- browser tests.
-
-## How do I ...
-
-### Create a new test case?
-
-> 1. Create a new file under *src/remoting/unittests*, the filed should be named
-> as test_&lt;module_name&gt;.js, here is an example for *test_math.js*
-
-> `// Copyright 2014 The Chromium Authors. All rights reserved.`
-> `// Use of this source code is governed by a BSD-style license that can be`
-> `// found in the LICENSE file.`
-> `(function() {`
-> `'use strict';`
-> `QUnit.module('Math.floor', {`
-> ` beforeEach: function() {`
-> ` ...`
-> ` },`
-> ` afterEach: function() {`
-> ` ...`
-> ` }`
-> `});`
-> `QUnit.test('should round down a floating point number', function(assert) {`
-> ` assert.equal(Math.floor(1.1), 1);`
-> `});`
-> `QUnit.test('should work for negative numbers', function(assert) {`
-> ` assert.equal(Math.floor(-1.1), 2);`
-> `});`
-> ` })();`
-
-> 2. Add the file to the **'remoting_webapp_unittest_cases'** variable in
-> ***src/remoting/remoting_webapp_files.gypi***
-
-> `# The unit test cases for the webapp`
-> `'remoting_webapp_unittest_cases': [`
-> ` ...,`
-> ` 'webapp/unittests/test_math.js',`
-> `],`
-
-> 3. Update gyp
-
-> `gclient runhooks`
-
-> 4. Build the test
-
-> `ninja -C out/Debug -j500 remoting_webapp_unittests`
-
-### Run the test locally?
-
-> #### For the chrome remote desktop unit test
-
-> Go to the source directory
-
-> `./remoting/tools/run_webapp_unittests.py`
-
-> What the script does under the hood is to run the test page in ***Chrome***
-> with the --***allow-file-access flag***. ***Blanketjs*** need to load the
-> source file locally to instrument it for code coverage.
-
-> If you make changes to your test code, you don't need to rebuild after this.
-> Simply edit your test code and hit F5
-
-### Organize my test?
-
-There should be one test file per product file, e.g.
-
-> &lt;product_file_name&gt;_unittest.js
-
-> Group each class into its own module, e.g.
-
-> `QUnit.module('class_name')`
-
-> `Create one test case per behavior. The name of a test should be an English statement in the format of method1() should ... '`
-> `If a method has multiple behavior, you can create multiple test for it.`
-
-> `QUnit.module('class_name');`
-
-> ` test('method1() should have behavior X', function (assert) {`
-
-> ` // test body`
-
-> `});`
-
-> `QUnit.test('method1() should have behavior Y', function (`assert) {
-
-> ` // test body`
-
-> `});`
-
-> `QUnit.test('method2() should have behavior Z', function (`assert) {
-
-> ` // test body`
-
-> `});`
-
-### Use asserts?
-
-> QUnit is assertion-based. An assert is claim about the behavior of the piece
-> of code under test.
-
-> The most common asserts are:
-
-> `ok(condition)`
-
-> `equal(expected, actual)`
-
-> See <http://api.qunitjs.com/category/assert/> for the API reference.
-
-### Mock out existing components?
-
-> SinonJS allows you to mock existing components. SinonJS provides three key
-> functionalities
-> **Spying** - **Track calls to functions**
-> **Stubs** - Create functions with **pre-programmed behaviors**. When wrapped
-> around existing function with a stub, the original function is not called.
-> **Mocking** - Create functions with **pre-programmed behaviors** and
-> **pre-programmed expectations**
-> See <http://sinonjs.org/docs/> for the API reference.
-
-### See the coverage number?
-
-> 1. Click on ***Enable Coverage*** in the test page
-> [<img alt="image"
- src="/developers/javascript-unittests/EnableCoverage.png">](/developers/javascript-unittests/EnableCoverage.png)
-> 2. The number will be reported inline, with uncovered lines displayed
- with a red highlighted background.
-> [<img alt="image"
- src="/developers/javascript-unittests/Coverage.png">](/developers/javascript-unittests/Coverage.png)
-
-### Debug a test failure?
-
-> Since the QUnit test runs in the browser, you can debug a test failure just
-> like any web page using the developer console.
-
-### Run my unit test in the browser test?
-
-> You can also run the test under the browser test infrastructure
-
-> `./out/Debug/browser_tests
-> --gtest_filter=QUnitBrowserTestRunner.Remoting_Webapp_Js_Unittest`
-
-> If the test fails, it will print out the test case that fails:
-
-> `Value of: passed`
-> `Actual: false`
-> Expected: true`
-> `1 test failed:`
-> ` base.EventSource.removeEventListener.should work even if the listener is removed during |raiseEvent|`
-> ` 1. expected spy to be called twice but was called once`
-> ` spy(undefined)`
-> ` at Object.sinon.assert.fail
-> (file:///usr/local/google/home/kelvinp/enlistments/chromium/src/out/Release/remoting/unittests/sinonjs/sinon-qunit.js:36:11)`
-> `[ FAILED ] QUnitBrowserTestRunner.Remoting_Webapp_Js_Unittest, where
-> TypeParam = and GetParam() = (1340 ms)`
-
-> The easiest way to debug the failure is to run the failed module manually in
-> chrome and debug from there.
-
-## Documentation and Design Docs
-
-<table>
-<tr>
-<td>Design docs</td>
-<td> <a href="https://docs.google.com/a/chromium.org/document/d/1SOacnv91zFWEqtietEG6ubh3qDfpds3J3e1Bb1Lfgys/edit?usp=sharing">https://docs.google.com/a/chromium.org/document/d/1SOacnv91zFWEqtietEG6ubh3qDfpds3J3e1Bb1Lfgys/edit?usp=sharing</a></td>
-</tr>
-<tr>
-<td>QUnit documentation </td>
-<td> <a href="http://api.qunitjs.com/">http://api.qunitjs.com/</a></td>
-</tr>
-<tr>
-<td>BlanketJS documentation</td>
-<td> <a href="http://blanketjs.org/">http://blanketjs.org/</a></td>
-</tr>
-<tr>
-<td>SinonJS documentation</td>
-<td> <a href="http://sinonjs.org/docs/">http://sinonjs.org/docs/</a></td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/leak-detection/index.md b/chromium/docs/website/site/developers/leak-detection/index.md
deleted file mode 100644
index a380506068a..00000000000
--- a/chromium/docs/website/site/developers/leak-detection/index.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: leak-detection
-title: Leak Detection
----
-
-When launching a new feature it is important to consider doing manual inspection
-to look for memory leaks since some types of leaks will not easily show up
-during other testing, especially if they are slow leaks. This can avoid bugs
-which are otherwise difficult to detect.
-
-You can look for memory leaks on Windows using ETW heap tracing using
-[UIforETW](https://randomascii.wordpress.com/2015/09/01/xperf-basics-recording-a-trace-the-ultimate-easy-way/),
-an open-source wrapper for Microsoft's ETW/WPT toolkit. To set up for heap
-tracing you need to download and run UIforETW, then:
-
-* Click on Settings and set "Heap-profiled processes" to chrome.exe,
- check "Chrome developer", then close Settings
-* Change the tracing type (just below "Input tracing") to "Heap
- tracing to file"
-* Close all unnecessary programs including other copies of Chrome in
- order to reduce the trace size and noise
-* If you need to record allocations that happen during startup then
- start tracing and then launch Chrome. If not then you should launch
- Chrome and wait for its startup activity to calm down. If you launch
- Chrome with a minimal set of tabs then this will reduce the trace
- size and noise
-* When you are ready to test your feature then type Ctrl+Win+R (with
- any window active) or click "Start Tracing" in UIforETW
-* Run your test a few times, let Chrome go idle again, and then type
- Ctrl+Win+R (with any window active) or click "Save Trace Buffers" in
- UIforETW
-
-Tips for efficient tracing:
-
-* If you want to just heap-profile a renderer process then you should
- launch Chrome *before* setting the tracing type. This will ensure
- that heap tracing is disabled for the browser, GPU, utility,
- extension, crashpad, and watcher processes. Only processes launched
- *after* you change the tracing type to "Heap tracing to file" will
- be heap traced, and only allocations/frees done after you start
- tracing will be recorded.
-* If you are only going to be looking at heap data then uncheck
- "Context switch call stacks" and "CPU sampling call stacks" in order
- to keep the trace as small as possible
-
-These trace analysis instructions are very terse because a full explanation
-would require many pages. If you need assistance then please contact
-brucedawson@chromium.org.
-
-If you have Python installed then IdentifyChromeProcesses.py will be run and a
-list of Chrome process types and PIDs will be printed, which helps with
-identifying the browser process, etc. If you need to identify a specific render
-process PID then use Chrome's Task Manager. You can copy the trace to a
-different machine for analysis, and you can manually run
-IdentifyChromeProcesses.py on that machine by right-clicking on the trace name
-and selecting Scripts-&gt; Identify Chrome Processes.
-
-Open the trace in WPA. The default view is designed for analyzing performance
-rather than allocations so you will want to use HeapAnalysis.wpaProfile from
-UIforETW's bin directory (available in versions published in September 2018 or
-later). You can apply this profile by going to the Profiles menu in WPA,
-selecting Apply... and then browsing to the .wpaProfile file. Load symbols
-(Trace-&gt; Load Symbols) and you can then drill down into the allocations for
-the process of interest. The Type column will usually list AIFI and AIFO types.
-AIFI means Allocated Inside and Freed Inside - meaning that the allocation was
-transient within the visible time range. AIFO means Allocated Inside and Freed
-Outside meaning that the memory was allocated but not freed within the visible
-time range. AIFO allocations are potential leaks. You can drill down through the
-stack, sorting by Count, or Size, or you can search for particular symbols by
-typing Ctrl+F when the Stack column is selected.
-
-The allocation times for the selected portion of stack will be highlighted in
-the graph area, giving clues to patterns. These can be compared against input
-events emitted by UIforETW.exe.
-
-It is also possible to use Visual Studio's heap profiler. This is particularly
-convenient for profiling the browser process at startup. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/learning-your-way-around-the-code/index.md b/chromium/docs/website/site/developers/learning-your-way-around-the-code/index.md
deleted file mode 100644
index 48c3f3c97c1..00000000000
--- a/chromium/docs/website/site/developers/learning-your-way-around-the-code/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: learning-your-way-around-the-code
-title: Learning your way around the code
----
-
-**There is lots to learn about the Chromium code base, both at a macro level
-(how the processes are laid out, how IPC works, the flow of a URL load), and at
-a micro level (code idioms such as smart pointer usage guidelines, message
-loops, common threads, threading guidelines, string usage guidelines, etc).**
-
-## Learning to do things the Chromium way
-
-**[Coding style](/developers/coding-style): If you’ve coded elsewhere, the chrome guidelines (and code reviewer comments) might seem strict. For example, extra spaces at the end of lines are forbidden. All comments should be legitimate English sentences, including the ending period. There is a strict 80 column limit (with exceptions for things that can’t possibly be broken up).**
-
-## **A personal learning plan**
-
-Eventually you’ll have your build setup, and want to get to work. In a perfect
-world, we would have all the time we needed to read every line of code and
-understand it before writing our first line of code. In practice, this is
-impossible. So, what can we do? We suggest you develop your own plan for
-learning what you need, here are some suggested starting points.
-Fortunately for us, Chromium has some top quality [design
-docs](/developers/design-documents). While these can go a bit stale (for
-instance, when following along, you may find references to files that have been
-moved or renamed or refactored out of existence), it is awesome to be able to
-comprehend the way that the code fits together overall.
-
-1. Read the most important developer design docs
- 1. [Multi-process
- architecture](/developers/design-documents/multi-process-architecture)
- 2. [Displaying a web page in
- Chrome](/developers/design-documents/displaying-a-web-page-in-chrome)
- 3. [Inter-process
- communication](/developers/design-documents/inter-process-communication)
- 4. [Threading](/developers/design-documents/threading)
- 5. [Getting around the Chrome source
- code](/developers/how-tos/getting-around-the-chrome-source-code)
-2. See if your group has any docs; there may be some docs that people
- working on the same code will care about while others don’t need to
- know as much detail.
-3. Learn some of the code idioms:
- 1. [Important abstractions and data
- structures](/developers/coding-style/important-abstractions-and-data-structures)
- 2. [Smart pointer guidelines](/developers/smart-pointer-guidelines)
- 3. [Chromium String usage](/developers/chromium-string-usage)
-4. Later, as time permits, skim all the design docs, reading where it
- seems relevant.
-5. Get good at using code search ([or your code browsing tool of
- choice](/developers/code-browsing-in-chromium))
-6. Learn who to ask how the code works ([how to find somebody who knows
- how the code
- works](/developers/finding-somebody-who-knows-how-a-piece-of-code-works))
-7. Debug into the code you need to learn, with a debugger if you can,
- or log statements and grepping if you cannot.
-8. Look at the differences in what you need to understand and you
- currently understand. For instance, if your group does a lot of GUI
- programming, then maybe you can invest time in learning GTK+, Win32,
- or Cocoa programming.
-
-## **Blink**
-
-**Sometimes to make a fix or add a feature to Chromium, the right place to put it is in Blink (formerly WebKit).**
-**There is a (2012) [“How Webkit works” slide
-deck](https://docs.google.com/presentation/pub?id=1ZRIQbUKw9Tf077odCh66OrrwRIVNLvI_nhLm2Gi__F0).
-While Blink has forked, some of this may still be relevant.**
-
-There is also a slide that explains a [basic workflow for WebKit development for
-people who are already familiar with Chromium
-development](/system/errors/NodeNotFound). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/libraries-guide/index.md b/chromium/docs/website/site/developers/libraries-guide/index.md
deleted file mode 100644
index a31efe83f8d..00000000000
--- a/chromium/docs/website/site/developers/libraries-guide/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: libraries-guide
-title: Libraries Guide
----
-
-[TOC]
-
-## Chromium base libraries
-
-* [Important Abstractions and Data
- Structures](/developers/coding-style/important-abstractions-and-data-structures)
-* [Smart Pointer Guidelines](/developers/smart-pointer-guidelines)
-* [Chromium String usage](/developers/chromium-string-usage)
-
-## Blink's WTF library
-
-* [Strings in
- Blink](https://docs.google.com/document/d/1kOCUlJdh2WJMJGDf-WoEQhmnjKLaOYRbiHz5TiGJl14/edit#) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/linux-technical-faq/index.md b/chromium/docs/website/site/developers/linux-technical-faq/index.md
deleted file mode 100644
index f3cab7ef79b..00000000000
--- a/chromium/docs/website/site/developers/linux-technical-faq/index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: linux-technical-faq
-title: Linux Technical FAQ
----
-
-****Q**. Why doesn't Chromium do *\[insert feature X\]* better?**
-
-**A. Frequently, the answer is that just that we haven't had time to implement
-it. If you're so inspired, [come learn how to contribute to the
-project](/developers).**
-
-**Q**. Why does Chromium warn me that downloading a .exe is dangerous? I'm not
-on Windows!
-
-**A**. When you click on the downloaded file from within Chromium, we open it
-with the default viewer. On some systems the default viewer for .exe files is
-Wine, which means a malicious .exe can be as dangerous as on Windows.
-
-### System Integration
-
-**Q**. Why doesn't Chromium integrate with fontconfig/GTK/Pango/X/etc. better?
-
-**A**. Frequently, the answer is due to our
-[sandbox](/developers/design-documents/sandbox/Sandbox-FAQ) (Windows-specific
-doc but the concepts apply to all platforms), which attempts to prevent web
-content from having any access to your system. Features that other browsers get
-for free often take extra implementation effort. For example, since the entire
-web content area is rendered as a bitmap in a separate process that doesn't have
-access to the filesystem, we can't draw native widgets in the renderer (which
-are blobs of binary code and image files). See the answer to the topmost
-question on this page.
-
-**Q**. How do I control what program Chromium uses to open downloads?
-
-**A**. Rather than have its own set of settings separate from your system,
-Chromium calls xdg-open to open files. xdg-open is supposed to handle the shared
-subset of settings of Gnome/KDE/XFCE, with a fallback for users who don't use a
-desktop environment. Consult your favorite search engine for information on how
-to configure xdg-open.
-
-**Q**. Why doesn't Chromium put its tabs into the title bar on my window
-manager? (Or: why don't Chromium's minimize/maximize/close buttons theme
-properly?)
-
-**A**. The way X works is that the "title bar" of the app is drawn by a
-completely separate program (the window manager) than the app itself, without
-any API between the application and the window manager for doing these sorts of
-tricky behaviors. This leaves us with two options: either let the window manager
-draw the ordinary title bar (in which case our tabs don't extend up into it) or
-we tell the window manager to not draw a title bar at all and we draw the entire
-title bar ourselves (which means we have to just make a guess at how your window
-manager looks). We attempt to guess which of these two behaviors to use at
-startup; you can toggle between these modes on the second tab of the options
-window.
-
-### Google Chrome
-
-**Q**. What is the difference between Chromium and Google Chrome?
-
-**A**. See [our separate page about
-this](http://code.google.com/p/chromium/wiki/ChromiumBrowserVsGoogleChrome).
-
-**Q**. Why do the Google Chrome packages automatically add the Google Chrome
-repository and repository key to my distribution's package manager?
-
-**A**. We wanted installing the packages and getting updates to require a single
-click: download the package, click OK, and it's installed. Requiring users to
-add an extra sources line, update the package list, then find the package in the
-updated list is too much effort. If you don't want this behavior, Create an
-empty /etc/default/google-chrome before installing. You can also add the line:
-repo_add_once=false to /etc/default/google-chrome to achieve the same effect.
-
-**Q**. Why does the Google Chrome package install a cron job on RPM systems?
-(i.e. Fedora, OpenSUSE, Mandriva)
-
-****A**. On some RPM-based distros, the RPM / repo database is locked while the
-installer is running. As a result, we cannot add the repository and/or the
-repository key during the install. Instead, a cron job does this at a later
-time. See previous entry for instructions on how to disable this cron job.**
-
-**Q**. Why does the Google Chrome package install a cron job on Debian systems?
-(i.e. Debian, Ubuntu)
-**A**. We found some Debian-based distros will remove the Google Chrome source
-when doing an upgrade, meaning users will silently stop getting updates. All the
-cron job does is verify the above sources line still exists; it doesn't do any
-updating itself. Again, /etc/default/google-chrome controls this behavior. You
-can either create an empty /etc/default/google-chrome or explicitly add the
-line: repo_reenable_on_distupgrade=false. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/lock-and-condition-variable/index.md b/chromium/docs/website/site/developers/lock-and-condition-variable/index.md
deleted file mode 100644
index 3bd2ae949b3..00000000000
--- a/chromium/docs/website/site/developers/lock-and-condition-variable/index.md
+++ /dev/null
@@ -1,1160 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: lock-and-condition-variable
-title: Chrome C++ Lock and ConditionVariable
----
-
-# First a warning: do you really need Locking or CondVars?
-
-Are you sure you need to use explicit locking and condition variables? In Chrome
-code, message passing is far more common (via `TaskRunner` and `PostTask`) and
-low-level primitives like locks and condition variables should be used only when
-necessary.
-
-Some additional motivation:
-
-* Condition variables are nearly impossible to implement correctly on
- Windows XP or earlier. Our implementation is correct, but _very_
- slow. Whenever you use a CV you are disproportionately harming our
- performance on Windows.
-* A lot of times people just want to wait on a boolean. In such cases,
- if message passing cannot work, please use WaitableEvent instead.
-
-But for the times when you *do* need to use locks and condition variables, this
-document will explain the best practices and pitfalls in using them.
-
-(Much of the below was originally written by Mike Burrows.) (TODO: Figure out
-how to get anchor links to work)
-
-## Using `Lock` and `ConditionVariable`
-
-### Terminology and basics
-
-The `Lock` class implements a *mut*ual *ex*clusion lock, or *mutex* for short. A
-mutex is used to permit only one thread at a time to have exclusive access to
-some resource, which is typically some variable or data structure. Mutexes are
-so common that many words have been coined to describe their operation.
-
-Each `Lock` `mu` has two basic operations: `mu.Acquire()` and `mu.Release()`.
-Conceptually, it has just a single bit of abstract state: the boolean `mu.held`.
-When `mu` is created, `mu.held` is `false` and `mu` is said to be *free* or
-*unlocked*. `mu.Acquire()` blocks the caller until some moment when `mu` is
-free, and then atomically changes `mu.held` from `false` to `true`; `mu` is then
-said to be *held* or *locked* by the caller. `mu.Release()` sets `mu.held` to
-`false` once more.
-
-Calling `mu.Acquire()` is often referred to as *locking* or *acquiring* `mu`,
-while calling `mu.Release()` is referred to as *unlocking* or *releasing* `mu`.
-An action performed by a thread while holding `mu` is said to be performed
-*under* `mu`. Data structures manipulated under `mu`, and their invariants, are
-said to be *protected by* `mu`.
-
-Clients of `Lock` must obey these rules:
-
-1. Each time a thread acquires `mu` it must later release `mu`.
-2. A thread may not attempt to release `mu` unless it holds `mu`.
-
-Because `mu.Acquire()` acts atomically to change the state of `mu.held` we are
-guaranteed that, if these rules are followed, only one thread may hold `mu` at
-any given time.
-
-These rules are best followed by bracketing regions of code with matching calls
-to `mu.Acquire()` and `mu.Release()` in the same procedure. Such sections of
-code are called *critical regions* or *critical sections*, or occasionally
-[*monitors*](#monitors) after Hoare monitors, from which mutexes were derived.
-(A Hoare monitor is an abstraction that automatically acquires a lock on entry
-and releases it on exit.) In Chrome C++ code, many use the idiom `AutoLockl(mu)`,
-which acquires `mu` and releases it when `l` goes out of scope. (Less
-commonly, `AutoUnlock l(mu)` can also be used.)
-
-Mutexes perform two tasks in concurrent programming. Their primary role is to
-protect the invariants of variables and data structures manipulated by multiple
-threads (these invariants are often called *monitor invariants*, again recalling
-the work of Hoare). The programmer is required to establish the invariant before
-releasing the mutex; he can then assume the invariant holds whenever he acquires
-the mutex, even if his updates *temporarily* invalidate the invariant during the
-critical section. One cannot guarantee the invariant is true in a thread that
-does not hold the mutex, because the mutex holder may be changing the monitored
-state at that moment. For example, suppose `Lock mu` protects the invariant that
-`a + b == 0`. This code is then legal:
-
- mu.Acquire();
- assert(a + b == 0);
- // invariant assumed to hold
- a++;
- // invariant temporarily invalidated
- b--;
- // invariant restored before mu is released
- mu.Release();
-
-while this code is erroneous:
-
- mu.Acquire();
- assert(a + b == 0);
- // invariant assumed to hold
- a++;
- // invariant invalidated
- mu.Release();
- // BUG: mu released while invariant invalid
- mu.Acquire();
- b--;
- // attempt to restore the invariant, but the damage is already done
- mu.Release();
-
-The following does not invalidate the invariant, but incorrectly assumes it is true when the lock is not held:
-
- mu.Acquire();
- assert(a + b == 0);
- // correct: invariant assumed to hold
- mu.Release();
- assert(a + b == 0);
- // BUG: can't assume invariant without lock
-
-The invariant holds only when evaluated on state observed in a single
-critical section:
-
- mu.Acquire();
- assert(a + b == 0);
- // correct: invariant assumed to hold
- temp = a;
- // takes a temporary copy of "a"
- mu.Release();
-
- mu.Acquire();
- assert(temp + b == 0);
- // BUG: can't assume invariant on state
- // from two distinct critical sections
- mu.Release();
-
-A less obvious role of mutexes is to ensure a sequentially-consistent view of
-such data structures on machines with memory systems that are not sequentially
-consistent. Mutexes also prevent compiler reordering which could otherwise cause
-race conditions.
-
-### Other properties of `Lock`
-
-The call `mu.Try()` either returns `false` or acquires `mu` and returns
-`true`. It does not block. If `mu` is free, it is unlikely to return
-`false`.
-
-The call `mu.AssertAcquired()` aborts the process in debug mode if `mu` is
-not held by the calling thread..
-
-`Lock` is able to synchronize its own deletion. For example, if an object
-`*o` contains a `Lock` `mu` and a correctly-maintained reference count `c`,
-this code is safe:
-
- o->mu.Acquire();
- bool del = (--(o->c) == 0);
- o->mu.Release();
- if (del) { delete o; }
-
-Not all lock implementations have this property, so it
-should not be taken for granted when porting code. (To provide this
-property, we guarantee that `mu.Release()` does not touch `mu` after the
-atomic moment at which `mu` becomes free.)
-
-`Lock` is not re-entrant (also known as not recursive). See
-[below](#reentrant).
-
-### Condition variables
-
-Condition variables are a means for blocking a thread until some condition has
-been satisfied. Viewed in isolation, a condition variable allows threads to
-block and to be woken by other threads. However, condition variables are
-designed to be used in a specific way; a condition variable interacts with a
-mutex to make it easy to wait for an [arbitrary condition on state protected by
-the mutex](#condprotect). Chrome's C++ condition variables have type
-`ConditionVariable`.
-
-Suppose that a thread is to wait for some boolean expression *cond_expr* to
-become true, where the state associated with *cond_expr* is protected by `Lock
-mu`. The programmer would write:
-
-// Waiter mu.Acquire(); while (!cond_expr) { cv.Wait(); // mu was passed to cv's
-constructor } // cond_expr now holds ... mu.Release(); The `Wait()` call
-atomically unlocks `mu` (which the thread must hold), and blocks on the
-condition variable `cv`. When another thread signals the condition variable, the
-thread will reacquire the `mu`, and go around the [mandatory
-while-loop](#whileloop) to recheck *cond_expr*.
-
-Another thread that makes *cond_expr* true might execute:
-
- // Waker mu.Acquire();
- Make_cond_expr_True();
- // cond_expr now holds
- cv.Signal();
- mu.Release();
-
-The call to `Signal()` wakes at least one of the
-threads waiting on `cv`. Many threads may be blocked on a condition variable at
-any given time; if it makes sense to wake more than one such thread
-`Broadcast()` can be used. (However, this may lead to contention and poor
-performance if all waiting threads use the same lock; a possibly better approach
-to getting a lot of threads out of `Wait()` is to have each thread (upon exiting
-`Wait()`) call `Signal()` to free up another `Wait()`ing thread.)
-
-A single condition variable can be used by threads waiting for different
-conditions. However, in this case, `Broadcast()` *must* be used when any of the
-conditions becomes true, because the `ConditionVariable` implementation cannot
-otherwise guarantee to wake the correct thread. It can be more efficient to use
-one condition variable for each different condition; any number of condition
-variables can be used with a single mutex.
-
-Both `Signal()` and `Broadcast()` are efficient if there are no threads to wake.
-(TODO: verify this) Clients should call `Signal()` or `Broadcast()` [inside the
-critical
-section](http://www.chromium.org/developers/lock-and-condition-variable#TOC-Why-put-Signal-inside-the-critical-section-)
-that makes the condition true.
-
-The call `TimedWait()` allows a thread to wait until either a condition is true,
-or until some time has elapsed. Like `Wait()`, `TimedWait()` *always* reacquires
-the mutex before returning. Example use:
-
- static const int64 kMSToWait = 1000;
- // we'll wait at most 1000ms TimeDelta
- left_to_wait = base::Milliseconds(kMSToWait);
-
- // ms to wait at any given time
- Time deadline = Time::Now() + left_to_wait;
- mu.Acquire();
- while(!cond_expr && left_to_wait.InMilliseconds() > 0) {
- cv.TimedWait(left_to_wait);
- left_to_wait = deadline - Time::Now();
- }
- if (cond_expr) {
- // cond_expr true
- } else {
- // cond_expr false; 1000ms timeout expired
- }
- mu.Release();
-
-### Recommended usage
-
-Variables accessed by more than one thread and written by at least one thread
-should be protected consistently by a `Lock`.
-
-An exception to this rule is that fields may be initialized in constructors
-without a mutex, since no other thread should be able to reference the memory at
-that time.
-
-#### Recommended commenting convention
-
-There are two main dangers when using threads and mutexes: deadlocks and data
-races. These can be avoided using some simple rules and adding small comments to
-variable and procedure declarations. You are strongly advised to use such
-comments; they may seem tedious to write, but they help tremendously in avoiding
-errors. The particular commenting conventions shown below are derived from the
-work of Nelson and Manasse.
-
-Critical sections should almost always start and end in the same routine.
-That is, if a routine acquires a lock, it should release it before it
-returns, and it should release no locks that it does not itself acquire.
-This is normally achieved by writing `Acquire()` and `Release()` calls in
-pairs, or by using `AutoLock l(mu)`, which automatically releases `mu` when
-`l` goes out of scope.
-
-Every shared variable/field should have a comment indicating which mutex
-protects it:
-
- int accesses_;
- // account of accesses (guarded by mu_)
- // or a comment explaining why no mutex is needed:
- int table_size_; // no. of elements in table (readonly after init)
-
-Every mutex should have a comment indicating which variables and also any
-non-obvious invariants it protects:
-
- // protects accesses_, list_, count_
- // invariant: count_ == number of elements in linked-list list_
- Lock mu_;
-
-Think of the matching comments on
-variables and mutexes as analogous to matching types on procedure arguments
-and parameters; the redundancy can be very helpful to later maintainers of
-the code.
-
-Whenever a thread can hold two mutexes concurrently, either one (or both) of
-the mutexes should be commented with `acquired before` or `acquired after`
-to indicate which mutex must be acquired first:
-
- Lock mu0_;
- // protects foo_ (acquired before mu1_)
-
-If the mutex acquisition order is not consistent, [deadlock may result](#deadlock).
-
-Each routine should have a comment indicating which mutexes must and must
-not be held on entry. This allows implementors to edit routines without
-examining their call sites, and allows clients to use routines without
-reading their bodies.
-
-Never hold locks when invoking a callback, as the callback may call into the
-module once more, leading to deadlock. (Violations of this rule should be
-extremely rare and conspicuously commented in the module's interface.)
-Comments should indicate what threads can or cannot be used for callbacks:
-
- // Call cb.Run() in "ms" milliseconds.
- // cb.Run() is called in a private thread; it will not be called
- // from the thread calling RunAfter(), even if ms==0.
- void RunAfter(Closure cb, int ms);
-
-In rare cases, it may be useful for a routine to acquire a lock and return
-without releasing it, or to release a lock (perhaps temporarily using
-`ConditionVariable::Wait`) that it did not acquire. Such routines may
-surprise clients, and should be commented clearly in interfaces. Note that a
-routine that acquires a lock and returns without releasing it is practically
-a locking primitive and should be commented as such.
-
-Every condition variable should have a comment indicating when it is
-signalled:
-
- ConditionVariable non_empty_; // signalled when the queue becomes non-empty
-
-In some cases, exclusive access to data is ensured by referencing it only
-from one thread. (See the section on [message passing](#message).) The
-thread can be thought of as playing the part of a mutex; you should name the
-thread and use the name in comments as if it were a lock.
-
- int queue_length_; // length of receive queue (under net_thread) ...
- // Process one packet from the queue.
- // L >= net_thread void
- ProcessPacket() { ... }
-
-In very rare cases, a variable may be protected by more than one mutex. This
-means that the variable may be read while holding any of the mutexes, but
-may be written only when all the mutexes are held. You should document it
-clearly in the comments.
-
- int bytes_left_; // bytes remaining in queue (under mu_ and net_thread)
-
-If these conventions are followed it is straightforward to tell what locks are
-held at any point in a routine by reading the routine and its comments. By
-reading the comments on shared variables and mutexes, it is then possible to
-tell that all variable accesses are correctly protected by a mutex, and that
-mutexes are acquired in the correct order.
-
-Without such comments, working with mutexes is significantly harder. We
-recommend their use.
-
-#### Performance hints
-
-##### Critical sections should not be too long
-
-Normally, you should hold mutexes for short periods (nanoseconds to
-microseconds) at a time, and the mutexes should be free most of the time, often
-approaching 99%. To achieve this, it's best to avoid doing slow operations such
-as I/O inside critical sections---assuming it is not the purpose of the mutex to
-serialize the I/O, of course.
-
-Another, more complex technique is to make the locking more *fine-grained* by
-employing more locks, each protecting a subset of the data.
-
-Other transformations may help, such as breaking a critical section in two, or
-arranging to perform long-running operations on state that is local to a thread.
-
-##### Lock acquisitions are cheap but not free
-
-A lock acquisition is generally more expensive than a cached variable access,
-but less expensive than a cache miss. If a mutex is acquired and released too
-often (say, more than a hundred thousand times per second) the overhead of these
-operations themselves may start to be significant in CPU profiles.
-
-Frequent acquisition can be avoided by combining critical sections, or by
-delaying operations on shared state by buffering them in memory local to a
-single thread. For example,
-[tcmalloc](http://goog-perftools.sourceforge.net/doc/tcmalloc.html) uses a
-per-thread cache of memory to avoid locking overhead on every allocation.
-
-### Pitfalls
-
-#### Deadlocks
-
-A deadlock (sometimes called a *deadly embrace*) occurs when an *activity*
-attempts to acquire a limited *resource* that has been exhausted and cannot be
-replenished unless that activity makes progress.
-
-When considering deadlocks involving only mutexes, each activity is typically
-represented by a thread, and the resources are mutexes that are exhausted when
-held, and replenished when released. However, other possibilities exist: In a
-[message passing](#message) environment, an activity may be represented by a
-message, and a resource may be represented by a bounded-length message queue or
-a bounded-size thread pool. When both mutexes and message passing are used,
-deadlocks may involve combinations of these activities and resources.
-
-The simplest mutex-related deadlock is the *self-deadlock*:
-
- mu.Acquire();
- mu.Acquire();
- // BUG: deadlock: thread already holds mu Deadlocks
-
-involving two resources, such as a mutex and a bounded-sized thread pool, are
-easily generated too, but deadlocks involving three or more resources are less
-common. A two-mutex deadlock results when thread T0 attempts to acquire M1 while
-holding M0 at the same time that thread T1 attempts to acquire M0 while holding
-M1; each thread will wait indefinitely for the other.
-
-##### Debugging deadlocks
-
-Fortunately, deadlocks are among the easiest bugs to debug and avoid. Debugging
-is typically easy because the address space stops exactly where the bug occurs.
-A stack trace of the threads is usually all that is is required to see what the
-threads are waiting for and what resources they hold. (Deadlocks involving
-messages in queues can be harder to spot.)
-
-##### Avoiding deadlocks
-
-Deadlocks can be avoided by disallowing cycles in the resources' exhaust-before
-graph; this can be done by imposing a partial order on the graph. If an activity
-can exhaust resource R0 and then attempt to use a resource R1 that may be
-exhausted, then we say that R0 *precedes* R1 (and R1 *follows* R0) in the
-exhaust-before graph. To guarantee no deadlocks, it is sufficient to guarantee
-that if R0 *precedes* R1, then R1 never *precedes* R0. That is, for all pairs of
-resources R0 and R1, either R0 and R1 are unordered (neither *precedes* the
-other), or their ordering is unambiguous (one *precedes* the other, but not vice
-versa).
-
-Considering only mutexes, we can avoid deadlocks by ensuring that the
-acquired-before graph is a partial order and is therefore free of cycles. In
-practice, we simply pick an order for any two mutexes that can be held
-simultaneously by the same thread, and comment the code with this choice.
-
-As described [above](#comments), if a thread does `mu0.Acquire(); mu1.Acquire();
-` then we should comment the declarations of `mu0` and `mu1` with either
-`acquired before` or `acquired after` (or both). Because we wish our code to be
-modular, our comments should also indicate what locks a caller must or must not
-hold on entry to a routine. Combined, these comments allow the programmer to
-know whether he is about to violate the locking order by acquiring a mutex or
-calling a routine. Experience shows that if this convention is followed,
-deadlocks are usually both rare and easy to correct.
-
-A particularly important rule of thumb for deadlock avoidance is [never hold a
-lock while invoking a callback](#callback). More generally, try to avoid holding
-locks for long periods, and across calls to other levels of abstraction that you
-do not fully understand. (That is, you might hold a lock access an access to a
-hash table, but you should not hold a lock across a call to a complex
-subsystem.)
-
-#### Races
-
-Races occur in three main ways:
-
-A shared variable is accessed without being protected consistently by a
-mutex. The reasons for the problems are discussed at length [below](#why).
-This error can be avoided with the conventions [already
-described](#comments); simply ensure that each shared variable is accessed
-only when its protecting mutex is known to be held. Such races can be
-detected automatically by
-[ThreadSanitizer](http://code.google.com/p/data-race-test/wiki/ThreadSanitizer)
-as described [below](#racedebug).
-
-A critical section modifies protected state but does not [preserve the
-monitor invariant](#invariant_bug). Such bugs are rare if invariants are
-commented correctly.
-
-A critical section reads protected state, which is then encoded in a
-temporary variable or the program counter. Then the lock is released, then
-reacquired and the state from the previous critical section is used as
-though still valid:
-
- string name_; // guarded by mu_
- size_t NameLen() {
- AutoLock l(this->mu_);
- return this->name_.size();
- }
-
- // Requires 0 <= i < this->name_.size()
- int CharFromName(size_t i) {
- AutoLock l(this->mu_);
- return this->name_[i];
- }
- ...
- size_t len = this->NameLen();
- int x = 0;
- if (len > 0) {
- // BUG: temporary len encodes protected state from a previous
- // critical section that is used inside another.
- // The length of name_ may have changed since len was assigned.
- x = this->CharFromName(len - 1);
- }
- ...
-
-This is the most insidious form of race, and the best known way
-to avoid them is vigilance. Fortunately, they are quite rare. There are
-algorithms that can detect such races using data flow analysis, but as yet
-none has been applied to C++.
-
-### Debugging
-
-`Lock` and `ConditionVariable` have various features to aid debugging.
-
-#### Assertions
-
-`mu.AssertAcquired()`: abort in debug mode if `mu` is not held by the
-calling thread.
-
-#### Race detection
-
-Race detection requires an external tool. One such tool is
-[ThreadSanitizer](http://code.google.com/p/data-race-test/wiki/ThreadSanitizer),
-which is a dynamic race detector based on the [Valgrind](http://go/valgrind)
-binary translation framework. See [this
-page](http://code.google.com/p/data-race-test/wiki/ThreadSanitizer) for more
-details on how to use it with Chrome.
-
-### Examples
-
-The following show simple implementations of reader-writer locks and
-producer-consumer queues using condition variables.
-
-#### Reader-writer lock
-
-The example below could be improved in various ways at the cost of clarity. In
-particular, they allow readers to starve writers.
-
- class RWLock {
- public:
- RWAcquire() : lockers_(0), lock_free_(&mu_) {}
- ~RWAcquire() {}
- void WriteAcquire() {
- // acquire a write lock
- this->mu_.Acquire();
- while (this->lockers_ != 0) {
- this->lock_free_.Wait();
- }
- this->lockers_ = -1;
- this->mu_.Release();
- }
- void ReadAcquire() {
- // acquire a read lock
- this->mu_.Acquire();
- while (this->lockers_ < 0) {
- this->lock_free_.Wait();
- }
- this->lockers_++; this->mu_.Release();
- }
-
- void Release() {
- // release lock (either mode)
- this->mu_.Acquire();
- this->lockers_ = (this->lockers_ == -1? 0 : this->lockers_ - 1);
- if (this->lockers_ == 0) {
- // if lock became free, wake all waiters
- this->lock_free_.Broadcast();
- }
- this->mu_.Release();
- }
- private: Lock mu_;
- // protects lockers_ int lockers_;
- // 0 => free, -1 => writer, +ve => reader count
- ConditionVariable lock_free_; // signalled when lockers_ becomes 0
- };
-
-#### Producer-consumer queue
-
- class PCQ {
- // a bounded, blocking FIFO producer-consumer queue
- public:
- PCQ(int n) : max_count_(n), non_full_(&mu_), non_empty_(&mu_) {}
- ~PCQ() {
- CHECK_EQ(this->queue_.size(), 0);
- }
- // error if queue is not empty
- // waits until queue is not full, then adds value to its end
- void Add(void *value) {
- this->mu_.Acquire();
- while (this->queue_.size() == this->max_count_) {
- this->non_full_.Wait();
- }
- this->non_empty_.Signal(); // no need to Broadcast.
- // (only one remover can consume this item)
- // Could use:
- // if (this->queue_.size() == 0) { this->non_empty_.Broadcast(); }
- this->queue_.push_back(value);
- this->mu_.Release();
- }
- // waits until this queue is non-empty, then removes and returns first value
- void *Remove() {
- this->mu_.Acquire();
- while (this->queue_.size() == 0) {
- this->non_empty_.Wait();
- }
- this->non_full_.Signal();
- // no need to Broadcast. (only one adder can consume this gap)
- // Could use:
- // if (this->queue_.size() == this->max_count_) {
- // this->non_full_.Broadcast();
- // }
- void *value = this->queue_.front();
- this->queue_.pop_front();
- this->mu_.Release();
- return value;
- }
- private:
- Lock mu_; // protects *queue_
- // protects invariant 0 <= queue_.size() <= max_count_
- deque<void *> queue_; // list of queued items const int
- max_count_; // max number of items in *queue_ (readonly after init)
- ConditionVariable non_full_; // signalled when queue becomes non-full
- ConditionVariable non_empty_; // signalled when queue becomes non-empty
- };
-
-## Why are mutexes the way they are?
-
-### Why use a mutex when accessing shared data?
-
-It is perilous to access data that another thread may be modifying concurrently.
-Consider accesses to a C++ `string`. A well-formed `string` may have invariants,
-such as its length field indicating the true length of the string it represents.
-Such invariants may be temporarily broken by the `string` implementation when an
-update occurs. Clearly, one thread may not be allowed to read a `string` that is
-being written by another, as it may not observe a length consistent with the
-stored bytes. If the string is accessed only under a mutex `mu`, the `string`'s
-invariants become `mu`'s monitor invariants, and each thread will see a
-well-formed `string`.
-
-It is tempting to assume that mutexes are unnecessary when there is no obvious
-monitor invariant to protect. Consider a variable or field with type `double`.
-One might expect to be able to read and write this variable from multiple
-threads without the protection of a mutex, but this is not safe:
-
-Many machines, including the x86, do not guarantee to access a `double`
-atomically. (A stack-allocated double need not be naturally-aligned by the
-compiler, potentially leading to two memory operations for a single access.)
-Thus, there *is* an invariant we need to protect: that the `double` is
-well-formed.
-
-On some machines seemingly obvious data-dependency properties do not hold
-without the cross-thread synchronization provided by a mutex; a thread might
-read a well-formed `double` but get a value from an apparently earlier time.
-This comment applies to all types, including integers, pointers, and even
-["atomic" types](#atomic) provided by the language or runtime.
-
-A variable's concrete type may change as a program is maintained, and this
-change may be hidden by a `typedef`.
-
-In short, data accessed by multiple threads should be protected with a mutex. To
-do otherwise is to court disaster.
-
-Despite this advice, some programmers enjoy the intellectual challenge of using
-lower-level primitives (["atomic" types](#atomic), compare-and-swap, memory
-barrier) instead of mutexes. There are many problems with such code:
-
-* it usually does not work.
-* it is often no faster overall than using mutexes.
-* it may rely on assumptions about the hardware or compiler, or both.
-
-However, the most important reason not to use such code is that it is
-complicated. Even if the author understands it, the next maintainer of the code
-may not. Worse, he may *think* he understands it.
-
-The best way to avoid locking is to avoid shared mutable state. When shared
-mutable state is needed, use a mutex. If you experience [lock
-contention](#perf), consider using more mutexes, each protecting less data (that
-is, make the locking finer-grained). If you feel you must access a shared
-mutable variable without a mutex, and have data that shows it is worth the
-maintenance expense of doing so, ask an expert how to do it.
-
-### Why can the holder of a `Lock` not reacquire it?
-
-Some mutex implementations, notably that of Java, and the Windows
-CRITICAL_SECTION are called *reentrant* or *recursive*. They allow the holder of
-a mutex to reacquire the mutex without deadlocking by maintaining an internal
-*acquisition count* and *holder* identity instead of the `held` boolean. The
-mutex is free when the count is zero. The acquisition count keeps track of the
-number of acquisitions performed by the holder; the holder is required to
-release the mutex the same number of times it acquired it to make the mutex
-free. This bookkeeping allows a method of an object to call other methods of the
-same object while holding the lock, even if those other methods acquire the
-lock. We do not allow this apparently convenient usage in `Lock` not because of
-the small additional cost of maintaining the counter, but because of two
-problems.
-
-Recall that a mutex's primary purpose is to allow the programmer to maintain
-monitor invariants, and that the programmer may assume a monitor invariant just
-after acquiring the appropriate mutex. Consider a Java method M0 that acquires a
-mutex `mu` protecting invariant *Inv*. The author of M0 is entitled to assume
-*Inv* at the moment he acquires `mu`. Now consider another method M1 that
-acquires `mu`, invalidates *Inv* during an update, calls M0, restores *Inv*, and
-releases `mu`. M0 assumes *Inv*, but *Inv* is untrue when M0 is called, so M0
-fails. Remember that both M0 and M1 may have multiple implementations written by
-multiple authors over years, and perhaps multiple implementations in the same
-program, due to inheritance. The source code of M0 may not be available to the
-author of M1, or vice versa. Without remarkably good discipline and
-documentation standards, the programmers may not understand why M0 is not
-functioning correctly.
-
-If a programmer attempted to do the same thing with a non-reentrant mutex such
-as `Lock`, his code would instantly deadlock and a stack trace would show that a
-thread is attempting to reacquire a lock it already holds. Not only is the error
-discovered immediately, but the fix is usually trivial: write a small method M0
-that acquires `mu` and calls a private method M0', which does the real work,
-assuming *Inv* but without acquiring `mu`. The specifications of M0 and M0'
-differ only in their locking behaviour, so the programmer almost always
-documents this difference, often in the names of M0 and M0'. The presence of the
-additional method and the corresponding name or comment provides an additional
-reminder to the author of M1. He realizes that by calling M0' rather than M0, he
-has the burden of establishing *Inv* before the call---it is not guaranteed
-automatically by the monitor invariant. This solution is not a panacea, but
-disallowing reentrancy at least makes the error apparent, rather than hiding it.
-
-The second problem with reentrancy is associated with condition variables. In
-the example above, imagine that M0 waits on a condition variable and thus
-effectively contains more than one critical section. Normally M0 will work, but
-if called from M1 with `mu` held, it is unclear what happens, and neither
-outcome is satisfactory. If the wait() primitive decrements `mu`'s acquisition
-count by one, `mu` does not become free, the condition never becomes true, and
-the thread deadlocks. If instead the acquisition count is set to zero by
-`Wait()`, `mu` becomes free during a critical section initiated by M1. This is
-likely to cause M1 to malfunction silently. In the non-reentrant case, M0 must
-be split into M0 and M0' as before. Since M0' waits on a condition variable, it
-now has an interesting specification: it temporarily releases a mutex that it
-did not acquire. This is unusual, and usually very dangerous, so one might
-expect a comment to that effect. This comment then tells the author of M1 that
-he must be especially careful if he calls M0'.
-
-### Why not use monitored modules? (or automatically locked objects, locking pointers, lock-free data structures, ...)
-
-It seems attractive to automate the acquisition and release of mutexes by
-declaring somehow that a mutex will be acquired on entry to a module and
-released on exit, as in a Hoare monitor. This can be used for trivial cases, but
-even quite common examples require more complex locking.
-
-Consider a table `*t` mapping strings to integer counts. The table might have
-methods `insert()`, `lookup()`, `remove()`. If the table provides its own
-synchronization, perhaps inserted automatically in each method by some
-mechanism, we eliminate data races within the table itself, but this does not
-help the client. Consider this code, which increments the count for "foo" in the
-table `*t`:
-
- int *v = t->lookup("foo");
- // safe because *t is a monitor
-
- if (v != 0) {
- (*v)++;
- // BUG: data race: unlocked increment
- } else {
- t->insert("foo", 1);
- // safe because *t is a monitor
- }
-
-If the client does not use his own mutex,
-counts may be missed. If he does, the synchronization inside `*t` is redundant.
-Thus, monitored modules are rarely helpful.
-
-The implementors of SGI STL made the [same
-observation](http://www.sgi.com/tech/stl/thread_safety.html).
-
-A further problem is that the designers of automatic locking mechanisms often
-desire to reduce the amount of typing needed to implement a monitor, rather than
-to improve the readability and maintainability of the code. All too often, these
-two desires are in conflict; some code is [more readable](#autolock) if one can
-tell when a lock is released.
-
-### Alternatives to mutexes
-
-There are a number of ways to handle concurrency, and ways to avoid it
-altogether. Of the various possible models, only two permit high-performance
-implementations that can use multiple CPUs and sharing of resources, and still
-allow large programs to be built from smaller components while maintaining
-abstraction boundaries. These models are "threads + mutexes +
-condition-variables", and "threads + message-passing". These two can be used
-together, and often are.
-
-#### Message passing
-
-One can associate data with threads, so that each thread *owns* some variables
-and data structures; a variable is accessed only by its owning thread. Other
-threads wishing to access the data then communicate with the owning thread via
-*message passing*, such as Chrome's `TaskRunner`.
-
-This style is a dual of the mutex-based style (see Lauer and Needham's oft-cited
-paper on the subject): A message-send corresponds to acquiring a mutex; running
-in a critical section corresponds to executing code within the owning thread;
-and receiving a reply corresponds to releasing the mutex. Thus, the most obvious
-difference between the approaches is that in message-passing all the code that
-manipulates a particular data item is brought together into one thread, while
-with mutexes the data accesses can be interleaved with other code.
-
-Message passing and mutexes can be intermixed; often one is preferred either
-because the author is comfortable with the style, or because one leads to a
-clearer module than the other. The message-passing model tends to work well when
-there is a natural resource that already serializes accesses (such as an I/O
-device), a linear state machine best expressed as a single routine, or when
-critical sections are long. Mutexes work well when critical sections are short
-and may be invoked in many places, or when reader-writer locks can be used
-effectively. In Chrome code, message passing is much more common (via
-`TaskRunner` and `PostTask`) and low-level primitives like locks and condition
-variables are used only when necessary.
-
-Both models allow high-throughput implementations, and both can suffer from both
-races and deadlocks. Deadlocks can often be eliminated in the message-passing
-model by using unbounded queues and/or threadpools.
-
-#### Atomic types and atomic operations
-
-Many runtimes and languages (including C++11) provide atomic operations, such as
-compare-and-swap, and "atomic" types that can be read and written atomically.
-Atomic operations and types are much harder to use than one might first think,
-and they should not be used in normal code. Unfortunately, programmers are
-attracted to them for various reasons:
-
-Programmers enjoy the intellectual puzzle of using these operations. This
-leads to clever, but ill-advised, and often broken code.
-
-Algorithms involving atomic operations are extremely subtle. For example, a
-general-purpose, efficient, lock-free, singly-linked list algorithm took
-significant research to discover, and requires care to implement. Almost all
-programmers make mistakes when they attempt direct use of atomic operations.
-Even when they don't make mistakes, the resulting code is hard for others to
-maintain. Both CPUs and compilers can rearrange reads and writes in ways
-that lead to subtle race conditions. The simple-sounding pattern of
-[double-checked
-locking](http://en.wikipedia.org/wiki/Double-checked_locking) is actually
-extremely subtle and is usually implemented incorrectly.
-
-Programmers assume that locking is expensive, and that using atomic
-operations will be more efficient. But in reality, acquiring and releasing a
-lock is cheaper than a cache miss; attention to cache behaviour is usually a
-more fruitful way to improve performance. Furthermore, lock-free data
-structures are often more expensive than using locks. This is because a lock
-allows arbitrary changes to be made to a complex data structure; if the same
-changes must be made without a lock, the result is likely to take more
-atomic read-modify-write instructions, not fewer.
-
-People wish to avoid lock contention when concurrency is high. This is best
-solved by partitioning locked data structures to avoid lock contention. For
-example, it is easier, more efficient, and [more useful](#monitors) to build
-a high-concurrency hash table from many normal hash tables, each with its
-own lock, than to build one lock-free hash table using atomic operations.
-
-Atomic operations should be used in only a handful of low-level data structures,
-written by a few experts, and then reviewed and tested thoroughly.
-Unfortunately, many attempt to write lock-free code, and almost always this is a
-mistake. Please do not fall into this trap: do *not* use atomic operations or
-types---if you do, you will make mistakes, and you will cost the company time
-and money.
-
-#### A single thread
-
-A process that uses only a single thread requires no mutexes, and this is often
-the best approach for simple programs that do not require high performance or
-that are inherently sequential. However, it is usually not the best choice for
-large programs, or when high performance is required.
-
-A single-threaded application can use only one CPU, which typically makes it
-far slower than other options, even when the overheads of locking are taken
-into account. If the application is simple enough, one may be able to run
-multiple copies of the same program on each machine, but this introduces two
-inefficiencies: cross-address-space context switches are more expensive than
-thread context switches because threads share TLB entries while address
-spaces do not; and the address space separation precludes sharing some
-resources (caches, ports, etc.).
-
-Some programs, such as network servers, exhibit natural concurrency: they
-must deal with many concurrent client requests, so some mechanism is needed
-to allow this.
-
-##### The fallacy of thread context-switch cost
-
-Some try to argue that it is significantly cheaper to multiplex a single thread
-than to use multiple threads because a single thread requires no thread context
-switches. Such an argument stems from confusion about what constitutes a
-"context switch" and what contributes to its cost. A context switch is simply
-the act of multiplexing the processor between multiple activities; its dominant
-costs are similar regardless of whether this is done in kernel-mode or in
-user-mode:
-
-When a program switches to a new activity, it incurs cache and TLB misses by
-touching the data and instructions associated with a new activity. This cost
-is the most important, and is essentially the same regardless of whether the
-new activity takes place in a different thread or in the same thread. The
-cost occurs not only when a multithreaded program performs a thread context
-switch, but also when an [event driven](#event) program processes a new
-event, or when a [co-operative multithreaded](#coop) program switches
-context in user-space. Multithreaded programs rarely context switch due to
-time-slicing because time-slices are large.
-
-The cost of user-kernel mode switches is sometimes counted as part of the
-context-switch cost between threads. However, multithreaded programs usually
-context switch when they have *already* entered the kernel for other
-reasons---typically, via some system call or to service an interrupt. A
-single-threaded program incurs these same mode switches, and thus they are
-common to all models. One might expect mutex and condition variable calls to
-add to the number of system calls, but this effect is modest because
-uncontended mutexes induce no system calls, while contended mutexes and
-condition-variable operations should be relatively rare.
-
-Context switches between address spaces are more expensive because TLB
-entries must be replaced.
-
-To summarize, if a single address space is used, the costs of switching between
-activities are nearly independent of the number of threads used within that
-address space; the technique that leads to slowest execution is to run multiple
-copies of a single-threaded program.
-
-##### The event-driven style
-
-To handle concurrent activities in a single thread, some programmers adopt a
-style variously known as *event-driven*, *state-machine* or
-*continuation-passing*: One can decompose the actions for a given request into a
-graph of *handler* routines that never block for I/O internally, but rather
-specify which handlers should be invoked when pending I/O requests complete.
-This approach can be made to work and may even be straightforward in simple
-programs, but it has bad effects on readability, modularity, and abstraction, as
-well as using only one CPU. To see the problems with the event-driven style,
-consider the code ... for (int i = 0; i != 10; i++) { foo(i); } ... Now imagine
-that the third-party library routine `foo()` is modified at some future time to
-improve its functionality or average performance. Imagine that a side-effect of
-this improvement is that occasionally `foo()` must perform some blocking I/O
-that should not be performed within a handler. Neither the author of the
-for-loop nor the author of the new implementation of `foo()` has done anything
-unusual, and yet the program may show poor throughput or even deadlock in an
-event-driven environment. Even subtler changes can have undesirable effects.
-Imagine that `foo()` includes a call to `fprintf()`; if one day the output
-stream is redirected to a device with high-throughput but high-latency, the
-program's throughput will drop precipitously because `foo()`'s latency cannot be
-hidden in the event-driven model without rewriting both `fprintf()` and `foo()`.
-
-We can fix the performance problem if we change `foo()`'s signature to include a
-continuation to be called when `foo()` completes. However, this is not a local
-change: the loop must be restructured so that the loop variable is encoded in
-the continuation state. Worse, *every* use of `foo()` must be similarly modified
-not only to handle the new signature, but to break the calling procedure into
-two---the prefix before the call to `foo()`, and the continuation. Thus, a
-*local* change in `foo()` has affected an arbitrary number of modules in a
-significant way: the event-driven style does not preserve modularity.
-
-Notice how this differs from the multi-threaded case. Just as the event-driven
-style style requires that `foo()` be non-blocking, the multithreaded style
-requires that `foo()` be thread-safe. However, this constraint is easier to live
-with. First, most libraries are thread-safe either naturally or by design, while
-few are designed for use in event-driven systems. (For example, `fprintf()` is
-thread safe, but provides no callback mechanism.) Second, if `foo()` were not
-thread safe, calls to it can be made safe *either* by a change to `foo()` *or*
-by wrapping `foo()` with a new routine `foo()` that acquires a lock before
-calling the old `foo()`. Either change is local, and does not affect other
-aspects of the interface, so modularity is preserved.
-
-The problem with the event-driven style is worse for routines like `printf()`
-whose signatures cannot be changed lightly. Even more worryingly, some I/O
-methods cannot be made efficient in a single-threaded event-driven system *even
-with arbitrary restructuring of the entire program*. For example, while one can
-with effort write a continuation-passing equivalent of `printf()`, memory-mapped
-I/O and programmed I/O have no such equivalent.
-
-A further problem with the event-driven style is that the resulting code becomes
-quite difficult to understand, maintain, and debug. This is primarily because it
-is harder to tell from reading the code which routine caused the current one to
-be called, and which routine will be called next. Standard debugging and
-performance tools become less effective too, as they rarely have support for
-tracing through continuations, and continuation mechanisms rarely maintain call
-history. In contrast, non-event-driven programs maintain much of their state and
-history conveniently on the thread stacks; debugging tools can reveal a great
-deal simply by displaying stack traces.
-
-##### Co-operative multithreading
-
-An alternative style called *co-operative multithreading* allows the programmer
-to use multiple threads on a single CPU. The scheduler guarantees that no two
-threads can run concurrently, and guarantees never to pre-empt a thread that has
-not blocked. In theory, this allows mutexes to be omitted: the code `a++; b--;`
-will always execute atomically. Unfortunately, reliance on this property makes
-the code more fragile. For example, because any I/O may block, `a++;
-printf("bar\n"); b--;` probably does not execute atomically, and `a++; foo();
-b--;` may or may not execute atomically, depending on the implementation of
-`foo()`. Thus, co-operative multithreading without explicit synchronization can
-lead to code in which a bug may be introduced to one module by adding a debug
-printf-statement in another module. If explicit synchronization is used, the
-technique becomes equivalent to the straightforward use of threads.
-
-For these reasons, unless a program is quite simple it usually pays in both
-performance and maintainability to use multiple threads, and to protect shared
-variables explicitly with mutexes or to communicate between threads with
-messages.
-
-### Why is `cv.Wait()` always in a while-loop?
-
-Hoare's original condition variables did not require the while-loop, but modern
-versions require it for somewhat subtle reasons:
-
-The presence of the while-loop allows one to tell by *local* inspection that
-the condition is true when the loop exits. Hoare's original precise
-semantics required inspection of all code that could potentially call
-`Signal()`, which made some errors rather harder to debug.
-
-The while-loop allows clients to do spurious wakeups, which gives the
-programmer the opportunity to trade performance for ease of programming.
-Suppose he arranges for threads *always* to signal the condition variable
-when they modify protected state, rather than only when they make a specific
-condition true. This allows modularity between waiters and wakers: the
-wakers don't need to know what conditions wakers are waiting for, and each
-waiter can wait for a different condition without affecting the code of the
-wakers.
-
-The while-loop allows the condition variable implementation more freedom to
-schedule woken threads in any order. Consider a thread T0 that wakes thread
-T1 that was waiting for condition C. If the runtime semantics guarantee that
-T1 will enter the critical section next, T1 can assume C. But context
-switches have overhead, so it is usually more efficient merely to add T1 to
-the run queue while continuing to run T0 and perhaps other threads, which
-may then enter the critical section before T1. If any of those threads
-falsifies C, T1 must not assume C on entering the critical section;
-scheduling has made it appear that it has received a spurious wakeup. The
-while-loop ensures that T1 tests C, and continues only if C is really true.
-Thus, the while-loop effectively allows more freedom in choosing an
-efficient scheduling discipline.
-
-Timed waits become less error-prone. A timed wait may cause a thread to wake
-before its condition C is true. Suppose the programmer forgets to test for a
-timeout. If he is forced to use a while-loop, his thread will go to sleep
-again and his program will probably deadlock, allowing easy detection of the
-bug. Without the while-loop, the thread would falsely assume C, and cause
-arbitrarily bad behavior.
-
-### Why must the condition used with `cv.Wait()` be a function of state protected by the mutex?
-
-Consider a thread W waiting for a condition `cond_expr` to become true:
-mu.Acquire(); while (!cond_expr) { cv.Wait(); // mu was passed to cv's
-constructor } // cond_expr now holds ... mu.Release(); If `cond_expr` is not a
-function of state protected by `mu`, two bad things can happen:
-
-Suppose that thread W finds `cond_expr` false, and is about to call
-`cv.Wait()`. If the state associated with `cond_expr` is not protected by
-`mu`, another thread can make `cond_expr` true and call `cv.Signal()` before
-W calls `cv.Wait()`. This means that W may block indefinitely in `Wait()`,
-even though `cond_expr` is true (only a thread currently in `Wait()` is
-woken by a call to `Signal()`).
-
-Suppose that thread W finds `cond_expr` true, and is about to execute the
-code labelled "cond_expr now holds". If the state associated with
-`cond_expr` is not protected by `mu`, another thread can make `cond_expr`
-false before W runs the rest of the code, so W cannot assume `cond_expr`.
-This negates the purpose of the condition variable, which was to give W a
-guarantee about `cond_expr`.
-
-### Why put `Signal()` inside the critical section?
-
-In most cases, it is correct to put `Signal()` after the critical section, but
-in Chrome code it is *always* both safe and efficient to put it inside the
-critical section. (TODO: verify this)
-
-Some texts recommend putting `Signal()` after the critical section because this
-makes it more likely that the mutex is free when a thread attempts to reacquire
-it on return from `Wait()`. If the `Signal()` were inside the critical section,
-a naive implementation might wake the thread which could then block once more on
-the mutex held by the very thread that woke it.
-
-Chrome's condition variables (and most reasonable implementations) detect this
-case, and delay waking the waiting thread until the mutex is free. (TODO: verify
-this) Hence, there is no performance penalty for calling `Signal()` inside the
-critical section.
-
-In rare cases, it is incorrect to call `Signal()` after the critical section, so
-we recommend always using it inside the critical section. The following code can
-attempt to access the condition variable after it has been deleted, but could be
-safe if `Signal()` were called inside the critical section.
-
- struct Foo {
- Lock mu;
- ConditionVariable cv;
- bool del;
- ...
- };
- ...
- void Thread1(Foo *foo) {
- foo->mu.Acquire();
- while (!foo->del) {
- foo->cv.Wait();
- }
- foo->mu.Release();
- delete foo;
- }
- ...
- void Thread2(Foo *foo) {
- foo->mu.Acquire();
- foo->del = true;
- // Signal() should be called here
- foo->mu.Release();
- foo->cv.Signal(); // BUG: foo may have been deleted
- }
-
-### Why should implementors of mutexes pay attention to mutex performance under contention?
-
-Clients should avoid lock contention, because contention necessarily implies
-less parallelism; some threads are blocked while another executes the critical
-section. Because clients must avoid contention, some implementors of mutexes pay
-less attention to the performance of mutexes under contention. However,
-contention is sometimes encountered despite clients' best efforts. For example:
-
-A network server may become overloaded or see a changed pattern of use,
-causing a mutex to be used more than it normally would.
-
-A program may be run on an upgraded machine with more CPUs, causing
-contention on a mutex that was previously lightly loaded.
-
-Software developers encourage abstraction between parts of our programs, so
-the authors and clients of modules may have different expectations of how
-the module will be used. In particular, a client may cause contention on a
-mutex that he is unaware of.
-
-While it is important for clients to fix contention to avoid loss of
-parallelism, that loss of parallelism should be their main consideration. The
-performance of the mutex itself should not degrade precipitously, even when
-heavily contended. That is: an overloaded server should recover from overload if
-the load drops once more; a machine with more CPUs should run no slower than a
-machine with fewer CPUs; and calling a module more often should not reduce the
-amount of work that gets done, even if it doesn't increase it.
-
-Ideally, a critical section should provide approximately the same rate of
-progress to many contending threads as it can to a single thread. Mutex
-implementations can approximate this ideal by not providing fairness, and by
-preventing multiple threads that have already blocked from simultaneously
-competing for the lock.
-
-### Does every Lock operation imply a memory barrier?
-
-Programmers should not use `Lock` operations as a means for inserting arbitrary
-memory barriers into their code. (Or for exerting control over when threads
-run.) `Lock` operations imply only ordering necessary for the protection of
-monitor invariants. In particular, the intent is:
-
-*If* threads T0 and T1 execute the following code, where some location is
-modified by one of `T0_Inside()` and `T1_Inside()` and read or written by the
-other:
-
- // thread T0 // thread T1
- T0_Before();
- T1_Before();
- mu.Acquire();
- mu.Acquire();
- T0_Inside();
- T1_Inside();
- mu.Release();
- mu.Release();
- T0_After();
- T1_After();
-
-
-*then* the memory operations in `Tx_Before()` and `Tx_Inside()` all precede the
-memory operations in `Ty_Inside()` and `Ty_After()` either for `x=0, y=1` or for
-`x=1, y=0`.
-
-If the predicate does not hold, no memory ordering should be assumed from the
-`Lock` operations. This surprises programmers who expect the simplest possible
-implementation, with no optimizations. Unfortunately, this expectation is
-reinforced by some API standards.
-
-We discourage such assumptions because they make various transformations more
-difficult. Examples include:
-
-* Removal of critical sections that are redundant with others.
-* Removal of locks used by only one thread, or that protect no data.
-* Coalescing and splitting of locks and critical sections.
-* Conversion of exclusive locks to shared locks.
-* Replacing locks with transactional memory.
-
-Some lock implementations already apply some of these transformations, and are
-more efficient as a result. Therefore, `Lock` reserves the right to use such
-transformations when safe, even if that means removing memory barriers. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/mandoline/Mandoline.png.sha1 b/chromium/docs/website/site/developers/mandoline/Mandoline.png.sha1
deleted file mode 100644
index 0920cb1e350..00000000000
--- a/chromium/docs/website/site/developers/mandoline/Mandoline.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-032bbeecd2f92d2ac68d2f65a3dafb7327b00ebe \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/mandoline/build/index.md b/chromium/docs/website/site/developers/mandoline/build/index.md
deleted file mode 100644
index e78a65aac09..00000000000
--- a/chromium/docs/website/site/developers/mandoline/build/index.md
+++ /dev/null
@@ -1,202 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/mandoline
- - Mandoline (deprecated according to https://codereview.chromium.org/1677293002/)
-page_name: build
-title: 'Mandoline: Build, Debug & Test Instructions'
----
-
-### Mandoline can be built out of a normal chromium checkout.
-
-### Desktop:
-
-Build mandoline. The code exclusively uses gn, and does not build with
-is_component_build=true:
-
-`gn gen out/Debug` `ninja -C out/Debug mandoline:all` Run mandoline with these
-flags: `out/Debug/`mandoline `http://google.com`
-
-If you're running over chromoting run:
-
-`ninja -C out/Debug osmesa`
-
-`DISPLAY=:20 out/Debug/`mandoline [`http://google.com`](http://google.com/)
---override-use-gl-with-osmesa-for-tests
-
-### Android:
-
-Follow the instructions here to make sure you have the necessary android files:
-<https://code.google.com/p/chromium/wiki/AndroidBuildInstructions>. You don't
-need to do a build yet, but make sure you have the necessary resources.
-
-Build mojo for android:
-
-`gn gen out/android_Debug --args='`symbol_level=1 target_os="android"
-use_aura=true'
-
-`ninja -C out/android_Debug mandoline:all`
-
-**Note:** You will need to re-run \`gn gen\` without |use_aura| flag if you want
-to build chrome or content-shell, since those targets do not use aura on
-android.
-
-Run the script to start mandoline on your device:
-
-`./mandoline/tools/android/run_mandoline.py http://www.google.com `
-
-If you just want to install, you can run the install_mandoline.py script in the
-same directory.
-
-**Build and test on the Android emulator with x86 Image:**
-
-Build mojo for android x86:
-
-`gn gen out/android_x86_Debug --args='`symbol_level=1 target_os="android"
-target_cpu="x86" use_aura=true'
-
-`ninja -C out/android_x86_Debug mandoline:all`
-
-Run the script to start mandoline on the Android emulator:
-
-`./mandoline/tools/android/run_mandoline.py --target=x86 http://www.google.com `
-
-**Note:** You will need to create and run a x86 AVD(Android Virtual Device)
-first.
-
-**Debugging on android:**
-
-For this to work you need to root your device. For Googlers follow instructions
-[here](https://wiki.corp.google.com/twiki/bin/view/Main/MojoBuildInstructions).
-
-Pass `--gdb` to `run_mandoline.py`. It'll do everything you need, which is the
-following:
-
-This assumes you've set things up for android, eg:
-
-`. build/android/envsetup.sh`
-
-Once per reboot/attaching you need to do the following:
-
-`adb forward tcp:5039 tcp:5039`
-
-On desktop pass in --wait-for-debugger to the shell.
-
-On device:
-
-`$ adb shell`
-
-`$ gdbserver --attach :5039 pid`
-
-pid should have been spit out when running. If not, ps | grep mojo
-
-Back on desktop:
-
-`./third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gdb`
-
-In gdb type the following:
-
-`target remote localhost:5039`
-
-And you should be able to continue.
-
-You may not have symbols. You may need to do (in gdb):
-
-`set solib-search-path path-to-your-android-debug-build`
-
-If you are still seeing a garbage stack after all this it could be a couple of
-possible things. I've had the best luck by inserting BreakDebugger() where the
-crash is happening. With that gdb should break before you crash. If at this
-point you still don't see symbols try the following (in gdb):
-
-`info sharedlibrary`
-
-Look for the library that the crash is happening in. If you see 'No' in the
-column next to the library the crash is occurring in then gdb didn't find the
-symbols. The path may be mangled, which is why gdb can't find the symbols. For
-example, instead of libcore_services.so you might have
-temp-1234-libcore_services.so. If this is the case, create a link to the real
-one, eg (again, from within your build directory):
-
-`ln -s libcore_services.so temp-1234-libcore_services.so`
-
-It's entirely possible the library you want is not at the root of the build
-directory. If that is the case you'll need to copy/link things around so that
-the library gdb is looking for can be found.
-
-Also, make sure you run set solib-search-path after you hit the breakpoint you
-added.
-
-**Testing:**
-
-Beyond the unit tests associated with Mojo and Mandoline code, there is a suite
-of Mojo application tests.
-
-These are Mojo applications hosting GTest suites and fixtures, run in the
-shell/runner with a helper script:
-
-./mojo/tools/apptest_runner.py out/Debug
-
-./mojo/tools/apptest_runner.py out/android_Debug
-
-To run a unittest on Android, use the helper script:
-
-build/android/test_runner.py gtest --s html_viewer_unittests
---output-directory=out/android_Debug
-
-**Performance tests:**
-
-To run a performance test, use the run_benchmark script with
---browser=mandoline-debug or --browser=mandoline-release, like:
-
-./tools/perf/run_benchmark --browser=mandoline-debug &lt;test_suite_name&gt;
-
---browser-{debug,release} assumes that the binary locates at ./out/{Debug,
-Release}. If you use a different output directory, use --browser=exact
---browser-executable=path/to/mandoline/including/binary/name.
-
-Use the run_benchmark script with the list command to show all available test
-suites.
-
-Telemetry runs tests with archived Web resources. To launch Mandoline manually
-and let it load those Web resources, use the following commands: (Take
-typcial_25 as example, change the wpr file path if you want to load pages from a
-different page set.)
-
-third_party/webpagereplay/replay.py --host=127.0.0.1 --port=54813
---ssl_port=54814 --no-dns_forwarding --use_closest_match --log_level=warning
-tools/perf/page_sets/data/typical_25_002.wpr
-
-mandoline --ignore-certificate-errors "--host-resolver-rules=MAP \*
-127.0.0.1,EXCLUDE localhost," --testing-fixed-http-port=54813
---testing-fixed-https-port=54814 &lt;some_url&gt;
-
-**Layout tests:**
-
-Run by way:
-
-`./third_party/WebKit/Tools/Scripts/run-webkit-tests \`
-
-` --driver-name=layout_test_runner \`
-
-`
---additional-driver-flag=--content-handlers=text/html,mojo:layout_test_html_viewer
-\`
-
---additional-driver-flag=--js-flags=--expose-gc \\
-
-` --debug --no-retry-failures \`
-
-` fast/events/touch`
-
-If you are using a build directory that is not the standard out/Debug or
-out/Release, then you need to also specify --target and --build-directory flags.
-(e.g. --build-directory=custom_out --target=Debug_gn).
-
-**Bugs:**
-
-Use
-[Proj-Mandoline](https://code.google.com/p/chromium/issues/list?can=2&q=label%3Aproj-mandoline&colspec=ID+Pri+M+Week+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-label. If the bug is performance-related, please also add Test-Performance
-label. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/mandoline/index.md b/chromium/docs/website/site/developers/mandoline/index.md
deleted file mode 100644
index 02340d7ca8b..00000000000
--- a/chromium/docs/website/site/developers/mandoline/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: mandoline
-title: Mandoline (deprecated according to https://codereview.chromium.org/1677293002/)
----
-
-<https://codereview.chromium.org/1677293002/><img alt="image"
-src="/developers/mandoline/Mandoline.png" height=148 width=150>
-
-Mandoline is a project to explore an alternate to the Content layer in Chrome
-using Mojo Shell for application loading & management.
-
-We use the Mojo View and Surface systems for application hierarchy/rendering and
-the Mojo HTML Viewer Blink embedding for displaying web content. We have a
-simple browser shell (a la content shell).
-
-Mandoline components are not allowed to depend on anything at the content layer
-or above in the Chromium source, so where we need to reuse code we refactor into
-a component with a content layer and a Mojo interface.
-
-Sub-pages:
-
-* [Build, Debug & Test instructions](/developers/mandoline/build).
-
-Bugs: [all
-open](https://code.google.com/p/chromium/issues/list?can=2&q=label%3AProj-Mandoline&colspec=ID+Pri+M+Week+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-
-IRC: #mandoline on freenode \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/markdown-documentation/index.md b/chromium/docs/website/site/developers/markdown-documentation/index.md
deleted file mode 100644
index c0d759df029..00000000000
--- a/chromium/docs/website/site/developers/markdown-documentation/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: markdown-documentation
-title: Markdown Documentation guide
----
-
-New documentation related to code structure should be put in Markdown. The best
-practices recommendation is to put a README.md file in the code directory
-closest to your component or code.
-
-To preview changes to Markdown files, see
-[//src/docs/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/README.md).
-
-Please write your Markdown in accordance with Google's [style
-guide](https://github.com/google/styleguide/tree/gh-pages/docguide), and
-[attempt to limit lines to 80 characters where
-possible](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/KECdEn562vY/sqRor1frEgAJ);
-unfortunately, **git cl format** will not do this for you.
-
-After committing the patch, you can view the rendered markdown using a URL like
-https://chromium.googlesource.com/chromium/src/+/HEAD/&lt;my
-path&gt;/README.md
-([example](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/WebKit/Source/core/paint/README.md)).
-
-[Here are some more
-examples](https://cs.chromium.org/search/?q=file:readme.md+-file:/third_party/&type=cs)
-to learn from. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/md5-certificate-statistics/index.md b/chromium/docs/website/site/developers/md5-certificate-statistics/index.md
deleted file mode 100644
index aaf0b6f974c..00000000000
--- a/chromium/docs/website/site/developers/md5-certificate-statistics/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: md5-certificate-statistics
-title: MD5 Certificate Statistics
----
-
-Thursday, February 19, 2009
-
-Last December, a group of security researchers published a practical attack on
-CAs that issue certificates signed with MD5-based signatures
-(<http://www.win.tue.nl/hashclash/rogue-ca/>). As a result, some browser
-developers are planning to drop support of MD5 certificates at some point. The
-exact time frame depends in part on how many HTTPS websites are still using MD5
-certificates. Johnathan Nightingale of Mozilla crawled the top 1 million HTTPS
-sites and published his findings
-(<http://blog.johnath.com/2009/01/21/ssl-information-wants-to-be-free/>). With
-Google Chrome's usage statistics collection service, we can help answer this
-usage question by measuring how often Google Chrome users are encountering MD5
-certificates. We'd like to share these measurements with other browser
-developers.
-
-The following statistics were gathered on our Dev channel releases, which are
-weekly releases based on the tip of the Chromium source tree. Also note that
-only Google Chrome users who opted in to usage statistics collection send their
-numbers to us.
-
-The counts shown below reflect periods of time on the order of a week, but
-didn't seem to vary significantly across over a month of investigating. For each
-kind of certificate, we collected two counts. One count reflects the number of
-SSL connections made to sites using that kind of certificate, while the other
-count reflects the number of Google Chrome sessions involving that kind of
-certificate. The latter can provide an estimator of the percentage of users that
-would be impacted by dropping MD5 certificate support. Note that we ignore the
-root CA certificates because the signatures in the root CA certificates are
-irrelevant to an attack of this sort.
-
-1. The number of SSL connections with certain kinds of certificates. Note that
-an HTTP keep-alive connection is counted once even though multiple HTTP requests
-may be sent over it.
-
-* The number of all SSL connections: 16408141
-* The number of SSL connections with an MD5 (end entity or
- intermediate CA) certificate in the certificate chain: 365152
-* The number of SSL connections with an MD2 (end entity or
- intermediate CA) certificate in the certificate chain: 47
-* The number of SSL connections with an MD4 (end entity or
- intermediate CA) certificate in the certificate chain: 0
-* The number of SSL connections with an MD5 intermediate CA
- certificate in the certificate chain: 480
-* The number of SSL connections with an MD2 intermediate CA
- certificate in the certificate chain: 25
-
-2. The number of Google Chrome sessions in which the user has seen certain kinds
-of certificates.
-
-* The number of all Google Chrome sessions: 542846
-* The number of Google Chrome sessions that used SSL: 496090
-* The number of Google Chrome sessions that saw an MD5 (end entity or
- intermediate CA) certificate: 33134
-* The number of Google Chrome sessions that saw an MD2 (end entity or
- intermediate CA) certificate: 14
-* The number of Google Chrome sessions that saw an MD4 (end entity or
- intermediate CA) certificate: 0
-* The number of Google Chrome sessions that saw an MD5 intermediate CA
- certificate: 58
-* The number of Google Chrome sessions that saw an MD2 intermediate CA
- certificate: 10
-
-The percentage of MD5 certificates of the secure Web, weighted by site
-popularity and reported by users of Google Chrome's Dev channel releases who
-opted in to usage statistics collection, is 365152/16408141 = 2.23%. Looking at
-the per session statistics, we see that the number of user sessions that would
-be impacted by no longer supporting MD5 certificates would be 33134/542846 =
-6.1%. Either of these percentages, though significantly smaller than reported by
-Nightingale, suggests that there would be a large user impact if MD5 certificate
-support were suddenly removed.
-
-A second alternative being considered is to remove support for MD5 intermediate
-CA certificates. Although this would not completely preclude an attack, it would
-significantly raise the cost of attacks. The percentage of MD5 intermediate CA
-certificates is notably lower, at 480/16408141 &lt; 0.003%. Looking at a per
-session statistics, we can see that only 58/542846 = .011% would be impacted by
-such a change. As a result, it should be possible for browsers to drop support
-of MD5 intermediate CA certificates sooner, which will make the MD5 certificate
-attack much more expensive.
-
-In the future we hope to use the statistics collection service to gather other
-information of interest to crypto practitioners, such as which SSL cipher suites
-are being used in practice and how many HTTPS sites use certificates with
-certification path validation errors.
-
-Posted by Wan-Teh Chang and Jim Roskind, Software Engineers \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/meet-the-web-platform-companion/index.md b/chromium/docs/website/site/developers/meet-the-web-platform-companion/index.md
deleted file mode 100644
index d2bf78d094a..00000000000
--- a/chromium/docs/website/site/developers/meet-the-web-platform-companion/index.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: meet-the-web-platform-companion
-title: Meet the Web Platform Companion Guide
----
-
-# **Last updated 3/13/12**
-
-The web platform is composed of a large collection of interoperable standards
-that represent a solid foundation for building powerful apps. New standards are
-born on the cutting edge, where various organizations experiment with new
-capabilities. Those capabilities that capture the imagination of the broader
-community may eventually become a formal part of the web platform.
-The demos in the [Meet the Web Platform
-videos](http://www.youtube.com/watch?v=3i4dtgh3ym0&list=PL0207724E1C9C22A6&feature=plpp_play_all)
-show a few examples of some of the cool stuff you can do on the cutting edge of
-the web platform. Not all of these capabilities have been standardized yet, some
-only work in Chrome today, and some are still actively being implemented in
-Chrome. This guide serves as a companion to the videos, providing more context
-on each demo and the technology that powers them.
-
-## Building on Foundations
-
-### Web Components
-
-* Implementation status: Shadow DOM, a core foundational piece of Web
- Components, is available in Chrome 19+ behind the Shadow DOM flag.
- Other bits will be implemented in the near future.
-* Cross-browser support: Active interest demonstrated by Microsoft and
- Mozilla
-* Standardization status: All specifications under Web Components
- umbrella are being developed in the [W3C WebApps Working
- Group](http://www.w3.org/2008/webapps/)
-* Learn more:
- * A comprehensive [introduction to Web
- components](http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html)
- * A readable introduction to [Shadow
- DOM](http://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/)
- * Follow the [Web Components Google+
- page](https://plus.google.com/u/1/103330502635338602217/posts)
- to stay up to date
- * W3C Editor’s Draft of the [Shadow DOM
- specification](http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html)
-
-### Blocks are easy to style, and everything is a block
-
-* Implementation status: -webkit-filter is enabled in Chrome 19+. 3D
- CSS transformations has been enabled since M16. Video has been
- available for many releases.
-* Cross-browser support: filter is not implemented in other browsers
- yet, but should be soon. 3D transformations are supported in most
- other browsers. Video support is available in all modern browsers
-* Standardization status: All features are standardized or being
- standardized
-* Learn more:
- * [CSS Filters specification
- ](http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html)
- * [HTML5
- video](http://www.html5rocks.com/en/tutorials/video/basics/)
- * [3D
- transformations](http://www.html5rocks.com/en/tutorials/3d/css/)
- * [BeerCamp example](http://2011.beercamp.com/)
-
-### Improved layout primitives
-
-* Implementation status: The older version of the spec is supported,
- and the improved flexbox spec is being actively implemented in
- Chrome with basic support in Chrome 19.
-* Cross-browser support: Firefox, Safari, Chrome and Internet Explorer
- 10 implement the old flexbox spec; updated spec should be
- implemented soon in Chrome and other browsers.
-* Standardization status: Fully standardized
-* Learn more:
- * The improved [Flexbox
- specification](http://www.w3.org/TR/css3-flexbox/)
- * [Grid layout specification](http://www.w3.org/TR/css3-layout/)
- (another app layout CSS module that is being actively
- standardized)
-
-### Debugging on mobile
-
-* Implementation status: Works in Chrome 18+
-* Cross-browser support: N/A
-* Standardization status: N/A
-* Learn more:
- * [Guide to debugging Chrome for Android
- Beta](http://code.google.com/chrome/mobile/docs/debugging.html)
-
-### World Class Developer Tools
-
-* Implementation status: Fully implemented
-* Cross-browser support: Other browsers have strong tools as well
-* Standardization status: N/A
-* Learn more:
- * [Overview of dev tools](http://code.google.com/chrome/devtools/)
-
-### Powerful Text Layout
-
-* Implementation status: A side build of WebKit from Adobe
- demonstrates CSS exclusions and regions. Work to land that
- functionality in WebKit is ongoing, but doesn't yet work in Chrome.
-* Cross-browser support: No shipping browser supports it yet
-* Standardization status: Actively undergoing standardization at W3C
-* Learn more:
- * Play around with [Adobe's WebKit build and
- examples](http://labs.adobe.com/technologies/cssregions/)
- * [CSS Exclusions
- specification](http://dev.w3.org/csswg/css3-exclusions/)
- * [CSS Regions
- specification](http://dev.w3.org/csswg/css3-regions/) (related
- to Exclusions but not featured in the video)
-
-## Learning from Other Platforms
-
-### Push notifications
-
-* Implementation status: push notifications for apps on the New Tab
- Page implemented but not yet available to developers. Notification
- center work underway.
-* Cross-browser support: Not yet, as this is part of the Chrome
- extension APIs
-* Standardization status: Not standardized
-
-### Payments
-
-* Implementation status: Fully implemented
-* Cross-browser support: All modern browsers can use the payments API
-* Standardization status: Not standardized
-* Learn more:
- * [Payments API
- reference](https://developers.google.com/in-app-payments/docs/samples)
- * [Bastion](https://chrome.google.com/webstore/detail/oohphhdkahjlioohbalmicpokoefkgid)
-
-### Web Intents
-
-* Implementation status: Initial functionality available in Chrome 19
- for Chrome Web Store apps.
-* Cross-browser support: No other browsers have implemented web
- intents yet.
-* Standardization status: Being standardized publicly at the W3C
-* Learn more:
- * [WebIntents.org](http://webintents.org/) overview
- * [Web Intents Draft
- API](http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html)
- * Web Intents Task Force [mailing
- list](http://lists.w3.org/Archives/Public/public-web-intents/)
- at the W3C
- * [Imagemator](http://www.imagemator.com/)
- * [CloudFilePicker
- app](https://chrome.google.com/webstore/detail/kpeiggegnjmcinljkdmjglpjopdjihff)
- for getting to your Picasa images
- * [MemeMator
- app](https://chrome.google.com/webstore/detail/lkinojipklbmjkgmmpppmbhlhfpkhmed)
- to edit a photo
-
-## On the Cutting Edge
-
-### WebCam
-
-* Implementation status: implemented in Chrome 18+, requires enabling
- "Enable MediaStream" in about:flags. Note: as of this writing there
- are no security checks in place for access to webcam yet; do not
- browse untrusted sites with that flag enabled. Security UI will be
- landing in Chrome 19 for all platforms.
-* Cross-browser support: Implemented in Opera and being implemented in
- Firefox
-* Standardization status: Actively being standardized
-* Learn more:
- * [CAPTURING AUDIO & VIDEO IN
- HTML5](http://www.html5rocks.com/en/tutorials/getusermedia/intro/)
- at HTML5Rocks
- * [Minimal code
- example](http://webrtc.cloudfoundry.com/get_user_media)
- * [Neave HTML5 Photobooth App](http://neave.com/webcam/html5/)
- * [DMV photobooth app](http://dmv.nodejitsu.com/)
-
-### Web Audio
-
-* Implementation status: Available in Chrome since version 14
-* Cross-browser support: No other browsers yet, although Firefox has a
- separate audio API
-* Standardization status: Being standardized at the W3C
-* Learn more:
- * [Web Audio
- specification](https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html)
- * [Introductory tutorial to the Web Audio
- API](http://www.html5rocks.com/en/tutorials/webaudio/intro/) at
- HTML5Rocks
- * [Collection of Web Audio
- articles](http://www.html5rocks.com/tutorials/#webaudio) at
- HTML5Rocks
- * [Plink](http://labs.dinahmoe.com/plink/) collaborative
- music-making app
-
-### WebGL
-
-* Implementation status: fully implemented in all recent versions of
- Chrome
-* Cross-browser support: support in nearly all desktop browsers except
- for IE; Safari requires opt-in. Beginning to see support on mobile
- devices (Sony Experia, Opera Mobile)
-* Standardization status: standardized at the Khronos group
-* Learn more:
- * [WebGL
- tutorial](http://www.html5rocks.com/en/tutorials/webgl/webgl_fundamentals/)
- at HTML5Rocks
- * [WebGL water example scene](http://madebyevan.com/webgl-water/)
- * [WebGL wiki](http://khronos.org/webgl/wiki)
-
-### NaCl and GamePad
-
-* Implementation status: NaCl available for web store apps in Chrome
- 14+. GamePad API is in M19+ behind the "Enable Gamepad" flag in
- about:flags.
-* Cross-browser support: NaCl only works in Chrome. GamePad is not
- implemented in other browsers (but will be soon).
-* Standardization status: NaCl is not standardized, but GamePad is
- being actively standardized.
-* Learn more:
- * [AirMech ](http://www.airme.ch/)(without GamePad support for the
- time being)
- * Learn more about the [GamePad
- API](https://wiki.mozilla.org/GamepadAPI)
- ([spec](http://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html))
- * Learn more about [Native
- Client](https://developers.google.com/native-client/) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/memory-bloat/index.md b/chromium/docs/website/site/developers/memory-bloat/index.md
deleted file mode 100644
index e787396d833..00000000000
--- a/chromium/docs/website/site/developers/memory-bloat/index.md
+++ /dev/null
@@ -1,235 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: memory-bloat
-title: Efforts against Memory Bloat
----
-
-This page surveys and organizes efforts against memory bloat in Chrome.
-
-## Memory Bloat
-
-There are two main types of memory issues. One is *memory safety* issues like
-use-after-free and buffer-overflow. Many tools are your friends like
-[ASAN](/developers/testing/addresssanitizer) and [Dr.
-Memory](/developers/how-tos/using-drmemory) for memory safety issues. Other
-memory issues are *memory bloat* issues that simply mean too large memory usage.
-We need completely different efforts and toolsets against memory bloat issues
-than memory safety issues.
-
-### Leaks
-
-Leaks are a part of memory bloat issue. Some leaks can be found by some memory
-safety tools like Dr. Memory, especially in case malloc'ed objects remain to the
-end. We however have many other types of practical leaks. For example,
-forgetting to release a reference-counted pointer to a bulk of objects may
-practically cause a leak. It cannot be caught as it's eventually released at the
-very end. Such leaks are observed by tools against memory bloat issues.
-
-### Which is Bloating: Native or JavaScript?
-
-Memory bloat issues are usually observed either in two places: native (C++) heap
-and/or JavaScript heap. Your first action is to identify which is bloating. A
-JavaScript value window.performance.memory (visible from DevTools) would help to
-identify. Chromium is usually blamed when the bloat is observed in native heap,
-and the Web application is usually in charge of bloat in JavaScript heap. The
-difficulty is that it's not always, but identifying which is bloating must help
-to track the issue.
-
-### File a Bug
-
-Please file a bug with a
-"[Performance-Memory](https://code.google.com/p/chromium/issues/list?q=Performance%3DMemory)"
-label for memory bloat issues.
-
-## Efforts and Tools
-
-### Categorizing the Efforts
-
-Memory bloat issues are complicated, and we need to observe them from various
-viewpoints: testing, reproducing, breaking-down, leaking... The following is a
-trial to categorize existing efforts. Feel free to edit the table for better
-categorization.
-
-<table>
-<tr>
-<td>Testing and Benchmarking</td>
-<td><a href="/developers/memory-bloat#TOC-Chrome-Endure">Chrome Endure</a></td>
-<td><a href="http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20Leak">LeakDetector on Bots</a></td>
-</tr>
-<tr>
-<td>Runtime Bloat Detection</td>
-<td>MemoryPressureListener</td>
-</tr>
-<tr>
-<td>Real-world Data Collection</td>
-<td><a href="/developers/memory-bloat#TOC-about:memory-internals">about:memory-internals</a></td>
-<td> <a href="/developers/memory-bloat#TOC-WANTED:-UMA-based-tool">WANTED: UMA-based tool</a></td>
-</tr>
-<tr>
-<td>Top-down Analysis</td>
-<td><a href="/developers/memory-bloat#TOC-about:profiler">about:profiler</a></td>
-<td> <a href="/developers/memory-bloat#TOC-about:tracing-memory-snapshots"> about:tracing memory snapshots</a></td>
-<td> <a href="/developers/memory-bloat#TOC-Deep-Memory-Profiler">Deep Memory Profiler</a></td>
-<td> <a href="/developers/memory-bloat#TOC-Memory_Watcher">Memory_Watcher</a></td>
-<td> <a href="/developers/memory-bloat#TOC-memdump-Android-only">memdump</a> (Android only) </td>
-<td>LeakDetector</td>
-</tr>
-<tr>
-<td>Bottom-up Analysis</td>
-<td><a href="/developers/memory-bloat#TOC-LeakSanitizer">LeakSanitizer</a></td>
-<td> <a href="/developers/memory-bloat#TOC-Leak-Finder-for-JavaScript">Leak Finder for JavaScript</a></td>
-<td> <a href="/developers/memory-bloat#TOC-WANTED:-Tracking-reference-counted-pointers">WANTED: Tracking reference-counted pointers</a></td>
-</tr>
-<tr>
-<td>Life Prolongation</td>
-<td><a href="/developers/memory-bloat#TOC-Tab-Discarder">Tab Discarder</a></td>
-<td> Memory Purger</td>
-</tr>
-<tr>
-<td>DevTools: for Web-application side</td>
-</tr>
-</table>
-
-**Feel free to add your efforts in the list. The description is nice to have its
-advantage and also DISADVANTAGE (limitation) so that we can easily understand
-what is missing and needed to reduce memory usage. Just a plan is welcome in the
-list!**
-
-### Testing and Benchmarking
-
-> #### [Chrome Endure](/system/errors/NodeNotFound)
-
-> (to be written...)
-
-### Runtime Bloat Detection
-
-> #### MemoryPressureListener
-
-> Implemented <http://crbug.com/246125> to replace Memory Purger.
-
-### Real-world Data Collection
-
-Memory bloat issues are happening in the real world, but it is hard to reproduce
-them in our "lab" (tests and builders). The efforts are to reproduce real-world
-memory bloat issues by collecting more real-world memory usage data.
-
-> #### about:memory-internals
-
-> A page that summarizes memory-related information for easier reporting from
-> users for memory bloat. It's similar in concept to about:network-internals.
-> The page can include detailed information (extensions, process status and
-> more) for a specific bloating situation, but less cases (for example than UMA)
-> because it's not automatic. This page should help us get a better
-> understanding of real-world memory issues reports. It might be kicked by
-> observing memory pressure or memory bloat (see MemoryPressureListener).
-
-> #### WANTED: UMA-based tool
-
-> While memory-internals is a tool to get detailed information of a specific
-> case, we have had a tool to get rough information from all over the world,
-> UMA. It is however difficult to get correlation between memory usage and
-> something from UMA. For example, "Users using this extension have a tendency
-> to bloat." or like that. We need a tool to find such correlation easily.
-
-### Top-down Analysis
-
-"Top-down" means breaking down the entire (or a large part of) memory usage into
-some parts.
-
-> #### [about:profiler](/developers/threaded-task-tracking)
-
-> If you set a CHROME_PROFILER_TIME environment variable to 1, the
-> about:profiler page will then show you the amount of memory, in bytes,
-> allocated in each task, listed in the "duration" columns. You can take a
-> couple of snapshots, show the diff and group by process to find out where the
-> memory is going. Note: confirmed to work on Windows by setting a user variable
-> from the system properties panel.
-
-> #### [about:tracing memory snapshots](/system/errors/NodeNotFound)
-
-> An experimental tool that reports on tcmalloc heap memory usage using the
-> about:tracing TRACE_EVENT macros to generate stacks (instead of real stacks
-> with symbols). Works with release builds without symbols with minimal
-> performance hit, but provides very non-specific stack data. Contact:
-> jamescook@, nduca@
-
-> #### [Deep Memory Profiler](/developers/deep-memory-profiler)
-
-> A native (C++-level) memory profiler to breakdown the whole-process memory
-> usage of a long-running process. The goal is to observe and visualize physical
-> memory usage deeper and deeper (e.g. mapped files, mmap and malloc backtraces,
-> C++ object types and more). The limitation is that it works post-mortem and
-> needs a special build (Release with some build options or Debug). It works for
-> Linux and Android for now. Contact: [the dmprof
-> group](https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/dmprof).
-
-> #### [Memory_Watcher](/developers/memory_watcher)
-
-> (to be written...)
-
-> #### [memdump](/developers/testing/multi-process-ram-usage-analysis-on-android) (Android only)
-
-> Multi-process aware version of /proc/&lt;PID&gt;/smaps.
-
-### Bottom-up Analysis
-
-"Bottom-up" means finding individual specific memory problems like leaks, cyclic
-reference and else. We have some existing leak finding tools like Massif (in
-[Valgrind](/system/errors/NodeNotFound)) and
-[heap-checker](/system/errors/NodeNotFound) (in gperftools)
-
-> #### [LeakSanitizer](/developers/testing/leaksanitizer)
-
-> #### LeakSanitizer is an experimental tool that works similarly to Heap Leak Checker. LeakSanitizer is fast and can be used on top of ASan.
-
-> **[Leak Finder for
-> JavaScript](https://code.google.com/p/leak-finder-for-javascript/)**
-
-> In JavaScript you cannot have "memory leaks" in the traditional sense, but you
-> can have objects which are unintentionally kept alive and which in turn keep
-> alive other objects and ends up in hogging a huge chunk of memory. Leak Finder
-> for JavaScript detects objects which are considered "memory leaks" according
-> to predefined leak definitions.
-
-> #### WANTED: Tracking reference-counted pointers
-
-> Reference-counted pointers can be sources of "hidden" memory leaks as
-> described above. Some good thing to track such "hidden" leaks by
-> reference-counted pointers would help to eliminate memory leaks.
-
-### Life Prolongation
-
-> #### [Tab Discarder](/chromium-os/chromiumos-design-docs/tab-discarding-and-reloading)
-
-> c.f. [Chrome OS out-of-memory design
-> doc](http://www.chromium.org/chromium-os/chromiumos-design-docs/out-of-memory-handling)
-
-> #### Memory Purger
-
-> To be removed: discussed in <http://crbug.com/98238>.
-
-### [DevTools](https://developers.google.com/chrome-developer-tools/): for Web-application side
-
-[**Timeline Memory
-view**](https://developers.google.com/chrome-developer-tools/docs/timeline#memory_mode)
-
-> Here you can track number of live DOM Nodes, Documents and JS event listeners
-> in the inspected render process.
-
-> **[JavaScript Heap
-> Profiler](https://developers.google.com/chrome-developer-tools/docs/heap-profiling)**
-
-> Allows to take JS heap snapshots, analyze memory graphs and compare snapshots
-> with each other.
-
-> **[JavaScript Object Allocation
-> Tracker](http://www.youtube.com/watch?v=x9Jlu_h_Lyw)**
-
-> Dynamic version of the JS heap profiler that allows you to see JS object
-> allocation in real time.
-
-## Analysis Reports and Case Studies
-
-Let's collect public reports of any kind of memory usage analysis. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/memory-usage-backgrounder/aboutmemory.jpg.sha1 b/chromium/docs/website/site/developers/memory-usage-backgrounder/aboutmemory.jpg.sha1
deleted file mode 100644
index 8714d003166..00000000000
--- a/chromium/docs/website/site/developers/memory-usage-backgrounder/aboutmemory.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9f4f591f1b8c1449892232697d1b227c95049a8c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/memory-usage-backgrounder/chrometaskmanager.jpg.sha1 b/chromium/docs/website/site/developers/memory-usage-backgrounder/chrometaskmanager.jpg.sha1
deleted file mode 100644
index cae3d963b9b..00000000000
--- a/chromium/docs/website/site/developers/memory-usage-backgrounder/chrometaskmanager.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-05f418ba000d4e932bd4d5b762920cc407449703 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/memory-usage-backgrounder/index.md b/chromium/docs/website/site/developers/memory-usage-backgrounder/index.md
deleted file mode 100644
index 3d37f5593fe..00000000000
--- a/chromium/docs/website/site/developers/memory-usage-backgrounder/index.md
+++ /dev/null
@@ -1,261 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: memory-usage-backgrounder
-title: Memory Usage Backgrounder
----
-
-Chromium Memory Usage
-
-Here is some background information if you are measuring memory in Chromium.
-
-**Multi-Process Model Background**
-
-To understand Chromium's memory usage, let's understand the multi-process model.
-Unlike other browsers, Chromium is divided into multiple processes. When
-Chromium starts up, it will initially have two processes. One process is the
-**browser process** which controls the main browser functionality, and the other
-is the initial **renderer process**, which runs the Blink rendering engine and
-JavaScript (V8). Each time you open a new tab in Chromium, you'll likely get a
-new renderer process. With typical browsing, it is common to see 5-7 chrome.exe
-processes active. Further, if you utilize plugins, apps, or extensions, they may
-also execute within independent processes. All of Chromium's processes, whether
-it is a browser process, a renderer process, or a plugin process, will show
-under the Task Manager as "chrome.exe".
-
-Here is a screenshot of what you might see from Windows 8 running Chromium:
-
-[<img alt="Windows task manager displaying multiple Chrome processes."
-src="/developers/memory-usage-backgrounder/taskmanager.jpg">](/developers/memory-usage-backgrounder/taskmanager.jpg)
-
-If you were to look at the above table on Windows XP, the numbers for Memory
-would be significantly larger. This is because Windows Vista and higher has
-updated the primary metric for measuring process memory since Windows XP. Both
-operating systems primarily measure a process' **working set** - that is the
-number of bytes held in physical memory on behalf of that process. However, the
-working set is made up of three distinct components:
-
-* **Private Working Set**
- Resident pages which are private only to this process
-* **Shareable Working Set**
- Resident pages which may be shared with other processes.
-* **Shared Working Set**
- Resident pages which are currently being shared with other processes. This
- is a subset of the Shareable Working Set.
-
-In Windows XP, each process is measured by its total working set. In Windows
-Vista the definition was changed to just be the private working set. This
-actually makes more sense, because the total working set will change based on
-what other processes are currently running. Thus, if you want to measure a
-reproducible metric for memory, the Private Working Set is generally a better
-measure.
-
-**How to Measure Memory**
-
-It turns out that there are several ways to look at memory. For Chromium, we
-really wanted to find a measure which is a true reflection of the actual system
-resources used by the application. We couldn't use the Total Working Set,
-because this measure double-counts the shared memory used by each process.
-Almost all windows applications benefit from at least some amount of shared
-memory, and Chromium is no exception. For example, each process typically loads
-several Windows DLLs (such as kernel32, ntdll, user32, and more), and these DLLs
-are shared by Windows across all running processes; double counting this memory
-within Chromium would make it appear to be 10-50MB larger than it really is.
-
-The primary metric we selected for Chromium is a measurement which is similar to
-what Windows uses. We measure the working set. However, unlike Windows Task
-Manager, we consider which memory is shared and which is not. We also wanted to
-make sure that if Chromium loads DLLs which no other process uses, that those
-are counted as memory used specifically by Chromium. The final algorithm for
-"Private" size is: Private Working Set + Shareable Working Set - Shared Working
-Set. This is close to Window XP's measurement of memory, except for that it also
-accounts for shared memory.
-
-The simplest way to look at total memory used by Chromium is to use the
-**Chromium about:memory** feature. Simply type 'about:memory' into Chromium's
-URL bar, and you might see something like this:
-
-[<img alt="Chrome&#39;s about:memory page, displaying the breakdown of memory
-among tabs and other processes."
-src="/developers/memory-usage-backgrounder/aboutmemory.jpg">](/developers/memory-usage-backgrounder/aboutmemory.jpg)
-
-At the top of the page is a summary of the overall memory usage. If you just
-want a single number for Chromium's memory usage, the Private column is the best
-figure which aggregates all memory used by all Chromium processes.
-
-The rest of the numbers on the page provide more detailed breakdowns about
-memory usage within Chromium. The Summary section provides aggregate information
-across processes used by the browser, and the Processes section enumerates the
-memory usage used by each active chrome.exe process.
-
-When the about:memory page is loaded, Chromium also looks for other browsers
-(Firefox, Opera, Safari, or IE) that are running and includes them within the
-summary for a quick comparison. We use the same metric for measuring each
-browser (including IE8's multi-process mode).
-
-**How to Measure Memory Part 2**
-
-Looking at an application's Working Set is not the only way to measure memory.
-While it does provide a good general measure, what about other system resources
-consumed which may not show up as part of a process' working set? As it turns
-out, there are system resources allocated by any application. A common resource
-consumed is GDI memory; this memory will show up in the system's commit charge
-and may not be reflected in the working set.
-
-To measure this, we need to look at the system's **Total Commit Charge**. The
-total commit charge measures the total amount of memory used by all applications
-and the system itself. Because this measurement is a system-wide measurement
-rather than a per-process measurement, it is much trickier to measure. It is
-also sensitive to any background processes or services which may run unbeknownst
-to the user while executing the test. However, the basic procedure is this:
-
-* shut down any unnecessary services
-* reboot
-* measure the Total Commit Charge of the system (1)
-* run the application test (chrome.exe)
-* measure the Total Commit Charge of the system (2)
-* close the application
-* measure the Total Commit Charge of the system (3)
-
-To verify that the test was valid, measurements (3) and (1) should be almost
-identical. The "Total Commit Charge" will be the difference between measurement
-(2) and (1).
-
-We've executed these tests for Chromium, and it scores reasonably well. These
-tests are complicated, and results vary greatly depending on the operating
-system version, video drivers installed, and hardware configuration.
-
-**Weaknesses of a Multi-Process Model on Memory Usage**
-
-Using a multi-process model within the browser offers benefits for reliability,
-robustness, and security of the browser. Those benefits drove our design toward
-the multi-process model, and you can read more about them
-[here](https://sites.google.com/a/google.com/the-chrome-project/developers/design-documents/process-models).
-
-However, using multiple processes is somewhat at odds with building a
-lightweight browser. First off, each process does have some amount of overhead.
-The process overhead turns out to be relatively small, however, once you've
-accounted for the shared memory properly. The more significant handicaps are the
-replicated internal components of a browser, such as caches, JavaScript VM
-heaps, and internal data structures which must be duplicated inside multiple
-processes. JavaScript is particularly troublesome because of its garbage
-collected heap. Heaps are generally relatively large and must be replicated
-across each browser process.
-
-How can Chromium overcome these deficiencies? In short, it can't :-) All we can
-do is to make everything else that much smaller, so that the effects of being
-multi-process is minimized. As a result, there are degenerate cases where
-Chromium uses a lot more RAM than other browsers. The case which is worst is
-where many tabs are open, each to separate domains with large amounts of
-JavaScript. But for typical usage, we think Chromium fares well at balancing the
-benefits of multiple processes and also maintaining memory usage at levels which
-is lower than some popular browsers.
-
-Note to techies: Check out single process mode. To see how Chromium would fare
-if it were not a multi-process model, you can ditch the multi-process model and
-run Chromium in 'single process mode' (use the --single-process command line
-option).
-
-**Benefits of a Multi-Process Model on Memory Usage**
-
-Despite the obvious negative impact of multiple processes on memory usage, it
-turns out there are some unique benefits which in the long run may dramatically
-overshadow the downsides. These are benefits which are simply not available to
-single-process model browsers.
-
-The first benefit is that the multi-process browser more readily reclaims unused
-memory than single-process models. Here is a quick test to run at home. Run a
-Chromium browser, and also a single-process browser side by side. Open up
-several tabs - say 10 tabs to different sites. Use each browser a bit. Then,
-close 9 of the tabs and look at the memory usage of the browser. What you'll
-notice is that while Chromium is able to give back almost all of the memory used
-for those tabs, the single-process browsers cannot. Those same data structures,
-caches, and Javascript heaps which must be replicated in the multi-process model
-cannot be purged in the single-process model! This has a dramatic impact on your
-browsing experience over time. With Chromium, when you close a tab, it's
-resources are completely flushed.
-
-Another benefit of the multi-process model is that Chromium can actively help
-the operating system when memory is tight. Windows already has a feature where
-when a foreground application is minimized it will tell Windows that the
-application's memory can be reclaimed if necessary. As long as there is plenty
-of RAM, this has no effect on system performance. However, when RAM is tight,
-the OS knows to take pages from the minimized application rather than the
-applications which the user may still be using. Similarly, Chromium employs this
-exact same model for active tabs. It is quite common for some users to have
-12-15 tabs open concurrently, but only 2-3 of those tabs to be actively in use.
-Some of those tabs may not have been touched for days! As you use Chromium, it
-will actively tell Windows that the tabs which are not in use should be paged
-out first. Single-process browsers cannot differentiate which memory is in use
-by which tabs.
-
-Finally, a third benefit to the multi-process browser's memory usage is the
-ability to selectively cleanup unused memory. Below is a screenshot of
-Chromium's Task Manager. To activate the Task Manager, click the menu button in
-the upper right -&gt; More tools -&gt; Task Manager (or just press Shift-Esc). A
-screenshot is included below:
-
-[<img alt="Chrome&#39;s task manager showing the CPU and memory usage of its
-tabs and processes."
-src="/developers/memory-usage-backgrounder/chrometaskmanager.jpg">](/developers/memory-usage-backgrounder/chrometaskmanager.jpg)
-
-In the unfortunate event that your browser is using more memory than you'd like
-it to, you can use Chromium's Task Manager to get a glimpse at which tabs are
-using the most memory. If you spot an errant plugin process or tab using more
-than you want, you can kill it using the "End process" button, and instantly
-reclaim that memory. Your browser will keep running. Without the help of
-multiple processes, this would not be possible.
-
-Helping the Operating System
-Windows today uses several hints to help the operating system manage memory. One
-of these is reducing the working set when a process is not in use. For example,
-if you minimize a windows application, Windows will automatically release the
-working set of that application to the OS. If there is plenty of RAM, this has
-little effect; however, when memory is tight, the OS uses this information to
-decide which pages to page out first. (You can test this yourself - run Outlook,
-and check its memory usage. Then minimize it. Watch the working set shrink to a
-very small size).
-
-Just as Windows can do this for desktop applications, a multi-process browser
-can do this for tabs. When you navigate away from a tab, Chrome uses this as a
-hint that the resource for that tab are less important than your foreground tab.
-Chrome will lower the priority of the now backgrounded tab and also give back a
-portion of the working set for that tab to the OS.
-
-Giving back pages to the OS when there are no RAM constraints is somewhat of a
-no-op; but when other applications need the memory, Chrome is "nice" and yields
-its memory so that foreground applications (Chrome or any other app) can be
-responsive. Users on low memory machines definitely notice the difference.
-Imagine having 15 tabs open, but only being "active" in 2 of them. You'd rather
-have those two be snappy than have all 15 compete for RAM.
-
-Likewise, if you leave Chrome idle for periods of time, it will attempt to give
-back RAM to the operating system. You aren't using it, so giving it back helps
-other applications.
-
-Partial TODO List For Reducing Memory Usage
-
-Here is a partial list of things we can do to improve memory usage. Most of
-these apply to Blink and Chromium; if possible, please try to fix within the
-Blink project for maximal re-use of code.
-
-Font management: The way fonts are cached in memory is fairly sparse.
-
-Strings: Duplicate strings are bad. All strings in Blink/Chromium are unicode
-strings, even if the string could be encoded with a single-byte encoding. This
-has been measured to add up to megabytes of extra space.
-
-History subsystem: The SQLite DB for history could be optimized. This will
-particularly help keep Chromium lean with usage-over-time.
-
-In Memory Cache: Chrome currently uses a shared memory cache across all
-processes. Maximum size is currently 32MB, partitioned across the active
-processes.
-
-Javascript: Since Chrome renderers each generally have their own JavaScript VM,
-reducing memory usage in Javascript pays benefits repeatedly. See the V8 project
-for more information.
-
-Tools: Better real-time tools is always needed. The memory_watcher project is
-currently used for debugging. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/memory-usage-backgrounder/taskmanager.jpg.sha1 b/chromium/docs/website/site/developers/memory-usage-backgrounder/taskmanager.jpg.sha1
deleted file mode 100644
index b8ff88e3c78..00000000000
--- a/chromium/docs/website/site/developers/memory-usage-backgrounder/taskmanager.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2f629fc757c3d0b0179c40a239e47850e2a64985 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/memory/index.md b/chromium/docs/website/site/developers/memory/index.md
deleted file mode 100644
index 24da71cd018..00000000000
--- a/chromium/docs/website/site/developers/memory/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: memory
-title: Memory
----
-
-See the [markdown
-docs](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory/). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/memory_watcher/index.md b/chromium/docs/website/site/developers/memory_watcher/index.md
deleted file mode 100644
index e0d0bf995d9..00000000000
--- a/chromium/docs/website/site/developers/memory_watcher/index.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: memory_watcher
-title: Memory_Watcher
----
-
-**Memory_Watcher is no longer supported. Either tcmalloc tools or UMDH on
-Windows are good alternatives.**
-
-**Document kept for historical interest**
-
----
-
-**OVERVIEW**
-
-Memory watcher is a tool that helps to attribute blame for memory usage on a
-windows build. It was originally coded predominantly by Mike Belshe, and was
-recently ressurected (and made to run on Vista).
-
-Memory_watcher provides a dump for each Chromium process, of the aggregate
-information on all memory that is currently in use. It gathers this information
-by recording stack traces whenever any form of dynamic memory allocation is
-requested (i.e., malloc, HeapAlloc, VirtualAlloc, GlobalHeapAlloc,
-LocalHeapAlloc). The dump for each process includes, for each stack that was
-used above an allocation, a count of the number of still-live allocations, and
-the total byte counts for those still-live regions. The dumped output is in
-human readable format (ASCII). The dump is sorted so that the stacks that
-induced the largest byte counts are listed first. Note that call counts and
-byte-allocation tallies are not included for memory that was freed (or
-decommitted). \[Future versions may tally stack traces that thrash through
-allocations and frees in a second per-process dump file\]
-
-A second included tool can process the dump file from any of the processes
-(i.e., either the browser process, or any of the renderer processes) and
-attribute blame to roughly 20 distinct users of memory. This latter tool will
-evolve over time to be more precise (and hopefully helpful).
-
-**HOW TO BUILD AND RUN CHROMIUM WITH THE MEMORY_WATCHER TOOL ACTIVE**
-
-We suggest that you build Chrome using the "Purify" setting, rather than Debug
-or Release. Debug may have different allocation results from the Release, and
-Release has cryptic stacks. You'll probably get the best results using purify,
-which turns off the DEBUG macros, but avoids optimizations that obscure the
-stacks.
-
-After you've built chrome, select and build the tools-&gt;memory_watcher module
-(right click on it in the "Solution Explorer" tab, and select "Build").
-
-Currently, memory_watcher works only with the Windows Default allocator (the
-amount of allocated memory should be identical to what happens with other
-allocators, as only the varying overhead, and fragmentation impact, will not be
-tallied). To insure that you are using that allocator, you need to either set an
-environment variable (set CHROME_ALLOCATOR to "WINHEAP" and not to "JEMALLOC",
-"WINLFH", or "TCMALLOC"; don't set CHROME_ALLOCATOR_2), or you can more
-thoroughly change the default by editing
-src/thirdparty/tcmalloc/allocator_shim.cc. To change the default in that source
-code, you should change the line that reads:
-
-// This is the default allocator.
-
-static Allocator allocator = **TCMALLOC**;
-
-to:
-
-// This is the default allocator.
-
-static Allocator allocator = **WINHEAP**; // Equivalent to setting environment
-variable to "WINHEAP".
-
-Also change the specification of the subprocess allocator by changing:
-
-char\* secondary_value = secondary_length ? buffer : "**TCMALLOC**";
-
-to:
-
-char\* secondary_value = secondary_length ? buffer : "**WINHEAP**";
-
-After making those changes, you'll need to rebuild again, but it will complete
-relatively quickly.
-
-Finally, you'll need to modify the command line arguments used for starting
-chrome. You'll need the command line:
-
---memory-profile --no-sandbox --js-flags="--noprof"
-
-You are now ready to run chrome, and gather stats. Chrome will run a little
-slower, but it is doing a lot more work on each allocation (i.e., it is
-recording stack traces). The directory that you use to run chrome will be the
-directory where the stack dumps appear. If you are running under a vanilla setup
-with MSVC, this will typically be the src/chrome directory, and NOT for instance
-the src/chrome/Purify directory.
-
-**HOW TO GET CHROME TO DUMP THE LIST OF TRACES FOR CURRENTLY ALLOCATED MEMORY**
-
-When you have reached an interesting point that you would like to understand,
-you can press:
-
-Ctrl-Alt-d
-
-You can only do this once during a run of Chrome. Pressing it again and again
-will do nothing :-/.
-
-It takes a while to complete a dump. The dump files will accumulate in files
-named memory_watcher.logNNNN.tmp, where NNNN is the process id of the dumping
-process. When the dump is complete, the file will be renamed to
-memory_watcher.logNNNN. Please do not terminate Chrome while the dumping is in
-progress, or you will get an incomplete dump.
-
-**HOW CAN I EXAMINE THE DUMP FILE**
-
-The easiest way is with a text editor, as it is plain ASCII. Unfortunately, it
-is VERY large, and there will typically be many distinct stacks. To get a
-summary of any individual dump file, run the script file
-src/tools/memory_watcher/scripts/summary.pl with the dump file piped in as
-standard input. For example:
-
-./summary.pl &lt;memory_watcher.logNNNN
-
-If you have a number of process dumps, it may be convenient to run something
-like the following in an Msysgit bash window:
-
-for i in memory_watcher.log???? ; do echo summary.pl from file $i; ./summary.pl
-&lt;$i; echo; done
-
-**CAVEATS**
-
-1) The total memory listed appears smaller than I would expect, based on other
-memory tools. I don't yet have the complete explanation for this, but some of
-the missing memory is surely static initialized data, and code space. Still,
-that cannot account for what is missing, and this tool will hopefully get better
-over time.
-
-2) The summary.pl file is NOT perfect. It merely attempts to find an
-"interesting" stack frame, and use that to decisively blame the stack on a
-specific module. Over time, it will get better. If you think that some dump
-should be refined in greater detail, and some attribution is too coarse, take a
-look inside the summary.pl file. You can make a minor edit to cause the
-contributors to any bucket-of-blame to be examined more closely, and any "large"
-contributors will be listed separately (from said bucket), along with their
-individual stacks. After you've made the edit (and perchance asked for details
-of contributors to said bucket that are over 100,000 bytes), you should run the
-summary.pl script. When you see the stacks, and realize the error of blame, you
-can then add a new rule to the summary.pl file, and run it again. If you have a
-great addition, please consider landing a change list with your improvements!!!
-
-This is a work-in-progress. Please feel free to help it along, or to make
-suggestions.
-
-Thanks,
-
-Jim Roskind \[jar at chromium dot org\] \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/mus-ash/index.md b/chromium/docs/website/site/developers/mus-ash/index.md
deleted file mode 100644
index 3b35eaa0a5b..00000000000
--- a/chromium/docs/website/site/developers/mus-ash/index.md
+++ /dev/null
@@ -1,162 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: mus-ash
-title: mus+ash
----
-
-mus+ash (pronounced "mustash") is a project to separate the window management
-and shell functionality of ash from the chrome browser process. The benefit is
-performance isolation for system components outside of the browser, and a
-sharper line between what components are considered part of the ChromeOS UX and
-what are part of the browser. mus+ash is built on top of Mandoline UI Service
-("Mus") and the Ash system UI and window manager.
-
-**Contact**
-
-[mustash-dev@chromium.org](mailto:mustash-dev@chromium.org)
-
-**Schedule/Milestone**
-
-<table>
-<tr>
-
-<td>Milestone</td>
-
-<td>Description</td>
-
-<td>Crbug Label</td>
-
-<td>Target Date</td>
-
-</tr>
-<tr>
-
-<td>Window Service 2 </td>
-
-<td>The window service runs as part of the ash process, instead of in a separate process. This allows us to write small apps the use the window service mojo APIs, as preparation for making the very large chrome browser use those APIs..</td>
-
-<td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-WS2&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-WS2</a></td>
-
-<td>Q2/3 2018</td>
-
-</tr>
-<tr>
-
-<td>Keyboard Shortcut Viewer </td>
-
-<td>Migrating KSV into a separate app using the window service mojo APIs from above.</td>
-
-<td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=+Proj%3DMash-KSV&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-KSV</a></td>
-
-<td>Q3 2018 (M69 Beta, M70 Stable)</td>
-
-</tr>
-<tr>
-
-<td>Single Process Mash </td>
-
-<td>Ash header refactoring to support making single process Mash work. Allows chrome browser to use the window service APIs, but still has ash and browser in a single process. This lets us exercise very complex window APIs without having to finish all the ash / browser decoupling.</td>
-
-<td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-SingleProcess+&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-SingleProcess</a></td>
-
-<td>Q4 2018</td>
-
-</tr>
-<tr>
-
-<td>Multi Process Mash</td>
-
-<td>Ash header refactoring to support making ash and the browser run in separate processes. This is the end goal of the mustash project.</td>
-
-<td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-MultiProcess&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-MultiProcess</a></td>
-
-<td>Q2/Q3 2019</td>
-
-</tr>
-</table>
-
-**Bug Tracking**
-
-* [Bug Tracking
- Process](https://docs.google.com/document/d/1wiTlRVvSsINYa61An1XywU9TuewWCLupyDV_u9Z4jkw/edit#heading=h.iupkzhopjke8)
-
- <table>
- <tr>
-
- <td>Label Name</td>
-
- <td>Use</td>
-
- </tr>
- <tr>
-
- <td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash</a></td>
-
- <td>Label for tracking all Mustash related issues (bugs, features)</td>
-
- </tr>
- <tr>
-
- <td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-WS2&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-WS2</a></td>
-
- <td>Tracking Window Service 2 work</td>
-
- </tr>
- <tr>
-
- <td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-KSV&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-KSV</a></td>
-
- <td>Tracking KSV migration</td>
-
- </tr>
- <tr>
-
- <td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-SingleProcess&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-SingleProcess</a></td>
-
- <td>Tracking ash refactoring support mash in single process</td>
-
- </tr>
- <tr>
-
- <td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-MultiProcess&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-MultiProcess</a></td>
-
- <td>Tracking ash refactoring support mash in multi process</td>
-
- </tr>
- <tr>
-
- <td><a href="https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Proj%3DMash-Cleanup&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids">Proj-Mash-Cleanup</a></td>
-
- <td>Label for tracking clean up tasks.</td>
-
- </tr>
- </table>
-
-**Links**
-
-* [Intent to
- Implement](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/stof4wmbEDg/bhvWa-PrFQAJ)
- on chromium-dev with high level tactical details
-* [Bugs](https://code.google.com/p/chromium/issues/list?can=2&q=mustash)
-* Notes in
- [//ash/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/ash/README.md)
-* Googlers: See go/mustash and linked documents
-
-**Build Instructions**
-
-mus+ash builds only for Chrome OS (either for device or on Linux with
-target_os="chromeos"). It requires aura and toolkit_views. There are no special
-build flags other than target_os.
-
-*Build chrome:*
-
-autoninja -C out/foo chrome
-
-*Run*
-
-out/foo/chrome --enable-features=Mash
-
-By default, each service will run in its own process, including chrome and all
-of chrome's renderers. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/new-features/index.md b/chromium/docs/website/site/developers/new-features/index.md
deleted file mode 100644
index a38202d7ec9..00000000000
--- a/chromium/docs/website/site/developers/new-features/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: new-features
-title: New Features
----
-
-## This page has been deprecated, refer to
-
-* New Features in [Launching
- Features](/blink/launching-features#TOC-The-Chromium-process-to-launch-a-new-feature) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked bubble.png.sha1 b/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked bubble.png.sha1
deleted file mode 100644
index a8abd965be1..00000000000
--- a/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked bubble.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a93ab28da1b3466fe8d0f095a123a66e3a942bf0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked yellow slide and bubble.png.sha1 b/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked yellow slide and bubble.png.sha1
deleted file mode 100644
index ecbe1bc4ca2..00000000000
--- a/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked yellow slide and bubble.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e0d70898d21294441f9d72c3553e3fe34ede3d3a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked-yellow-slide.png.sha1 b/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked-yellow-slide.png.sha1
deleted file mode 100644
index c27981f31d4..00000000000
--- a/chromium/docs/website/site/developers/npapi-deprecation/Plugin-blocked-yellow-slide.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0d92df95fe88a797fa8a061ceb5e112bfb8875c7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.09.10 AM.png.sha1 b/chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.09.10 AM.png.sha1
deleted file mode 100644
index 2331fc86e3f..00000000000
--- a/chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.09.10 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-312699079caf30d7b9299ccd1e8bb341250c1d61 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.10.16 AM.png.sha1 b/chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.10.16 AM.png.sha1
deleted file mode 100644
index 33310be36d0..00000000000
--- a/chromium/docs/website/site/developers/npapi-deprecation/Screen Shot 2013-12-03 at 10.10.16 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-08fdf49caef9a50881df4c4a4c23c003ae4e3c24 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/npapi-deprecation/index.md b/chromium/docs/website/site/developers/npapi-deprecation/index.md
deleted file mode 100644
index 79499024577..00000000000
--- a/chromium/docs/website/site/developers/npapi-deprecation/index.md
+++ /dev/null
@@ -1,259 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: npapi-deprecation
-title: 'NPAPI deprecation: developer guide'
----
-
-We [recently
-updated](http://blog.chromium.org/2014/11/the-final-countdown-for-npapi.html)
-our plans to phase out support for NPAPI in early 2015. This guide provides more
-details about what to expect and alternatives to NPAPI.
-
-# Timeline
-
-**January 2014**
-
-Starting in Chrome 32*—*expected to reach the Stable channel in mid-January
-2014*—*when a user visits a page with a blocked NPAPI plug-in, they will see:
-
-[<img alt="image"
-src="/developers/npapi-deprecation/Screen%20Shot%202013-12-03%20at%2010.10.16%20AM.png"
-height=65
-width=400>](/developers/npapi-deprecation/Screen%20Shot%202013-12-03%20at%2010.10.16%20AM.png)
-
-Note that users who have already installed the plug-in in previous versions of
-Chrome will still need to go through this "click-to-accept" experience. You can
-test the behavior on [this
-site](http://www.medicalrounds.com/quicktimecheck/troubleshooting.html).
-
-**Mid-2014**
-
-In mid-2014, the blocking UI will become more difficult to navigate, as a means
-of discouraging NPAPI use by developers. With the harder-to-bypass blocking UI,
-users will see a puzzle piece in place of the plug-in and a "Blocked plug-in"
-[page action icon](http://developer.chrome.com/extensions/pageAction.html) in
-the Omnibox:
-
-<table>
-<tr>
-
-<td>Puzzle piece with right-click context menu</td>
-
-<td>Blocked plug-in page action</td>
-
-</tr>
-<tr>
-<td><img alt="image" src="https://lh4.googleusercontent.com/ug4oXz-OqmestmLBdUpyW4GRhLcWuyNt5CrzPTSX2zwEbgXYtLFwPRgotMFpeDqiDX91l7biB4ysP78f9ArErYfaz5a-VQMGQ3CdBadxR-MObR6BZk2LURQy" height=281px; width=297px;></td>
-
-<td>(The yellow box will animate in.)</td>
-
-<td><a
-href="/developers/npapi-deprecation/Plugin-blocked%20yellow%20slide%20and%20bubble.png"><img
-alt="image" src="/developers/npapi-deprecation/Plugin-blocked-yellow-slide.png"
-height=93 width=200></a></td>
-
-<td><a
-href="/developers/npapi-deprecation/Plugin-blocked%20yellow%20slide%20and%20bubble.png"><img
-alt="image"
-src="/developers/npapi-deprecation/Plugin-blocked%20yellow%20slide%20and%20bubble.png"
-height=192 width=320></a></td>
-
-</tr>
-</table>
-
- Right clicking the puzzle piece will bring up a context menu allowing the
- user to run or hide the plug-in (just once).
-
- Left clicking the page action icon will bring up a bubble giving the user
- the choice to "Always allow plug-ins on this site" or "Run all plug-ins this
- time."
-
-Note that there will not be a yellow info bar (i.e. "drape") at the top of the
-page. Also, the page action icon will appear even if the plug-in itself is
-invisible. Visit this site in Canary to see the new UI in action:
-http://www.medicalrounds.com/quicktimecheck/troubleshooting.html
-
-This behavior is similar to existing behavior when all plug-ins are blocked by
-default (“Settings” =&gt; “Advanced Settings” =&gt; “Privacy - Content Settings”
-=&gt; “Plug-ins,” select “Block all,” and then load, for example,
-<http://techcrunch.com>).
-
-**January 2015**
-
-Currently Chrome supports NPAPI plugins, but they are blocked by default unless
-the user chooses to allow them for specific sites (via the [page action
-UI](/developers/npapi-deprecation)). A small number of the most popular plugins
-are allowed by default. In January 2015 all plugins will be blocked by default.
-Even though users will be able to let NPAPI plug-ins run by default in January,
-we encourage developers to migrate of off NPAPI as soon as possible. Support for
-NPAPI will be completely removed from Chrome by September 2015.
-
-**April 2015**
-
-In April 2015 (Chrome 42) NPAPI support will be disabled by default in Chrome
-and we will unpublish extensions requiring NPAPI plugins from the Chrome Web
-Store. All NPAPI plugins will appear as if they are not installed, as they will
-not appear in the navigator.plugins list nor will they be instantiated (even as
-a placeholder). Although plugin vendors are working hard to move to alternate
-technologies, a small number of users still rely on plugins that haven’t
-completed the transition yet. We will provide an override for advanced users
-(via chrome://flags/#enable-npapi) and enterprises (via Enterprise Policy) to
-temporarily re-enable NPAPI (via the [page action
-UI](/developers/npapi-deprecation)) while they wait for mission-critical plugins
-to make the transition. In addition, setting any of the plugin Enterprise
-[policies](/administrators/policy-list-3) (e.g. EnabledPlugins,
-PluginsAllowedForUrls) will temporarily re-enable NPAPI.
-
-**September 2015**
-
-# In September 2015 (Chrome 45) we will remove the override and NPAPI support will be permanently removed from Chrome. Installed extensions that require NPAPI plugins will no longer be able to load those plugins.
-
-# Exceptions
-
-The only allowed plug-ins are the ones mentioned in the [blog
-post](http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html).
-That list is based entirely on usage. There is no "process" for other plug-ins
-to be universally allowed and the list will be removed in January 2015.
-
-**Enterprise**
-
-Enterprise administrators will be able to allow specific NPAPI plug-ins by
-adding them to the
-[EnabledPlugins](http://www.chromium.org/administrators/policy-list-3#EnabledPlugins)
-policy list, to avoid their users seeing the UI mentioned above. Setting this
-policy also re-enables NPAPI plugins. This, however, will not be relevant once
-support for NPAPI is completely removed from Chrome in September 2015. Hence we
-recommend enterprises and enterprise app developers as well to move entirely off
-NPAPI as soon as possible.
-
-On Mac, version 39 onward, Chrome will be 64 bit only and this will imply 32 bit
-NPAPI plugins will stop to work on Chrome on Mac and there will be no way to
-allow it by policy. [64 bit
-plugins](https://support.google.com/chrome/answer/6083313) however can still be
-allowed and will continue to work until overall NPAPI removal in September 2015.
-
-# Alternatives to NPAPI
-
-With the deprecation of NPAPI, some developers have asked which modern
-technologies can be used to implement features which in the past would have
-relied on a platform-specific NPAPI plug-in. In answer to these questions we
-have composed the following list of common NPAPI use cases and web platform
-alternatives.
-
-In general, the core standards-based web technologies (HTML/CSS/JS) are suitable
-for most client software development. If your application requires access to
-features outside the web sandbox, myriad Chrome [Extension and App
-APIs](http://developer.chrome.com/extensions/api_index.html) offer access to OS
-features.
-
-## Video and audio
-
-A common use case for NPAPI plug-ins on the modern web is embedded video and/or
-audio. A range of modern web technologies exist to facilitate media streaming.
-The basic building blocks are WebRTC and media elements:
-
- HTML5 Media Elements. The [HTML5 Specification](http://www.w3.org/TR/html5/)
- provides a rich media platform through the
- [&lt;audio&gt;](http://www.w3.org/TR/html5/embedded-content-0.html#the-audio-element)
- and
- [&lt;video&gt;](http://www.w3.org/TR/html5/embedded-content-0.html#the-video-element)
- elements. More complicated use cases can be achieved using the
- [&lt;canvas&gt;](http://www.w3.org/TR/html5/embedded-content-0.html#the-canvas-element)
- element (for example check out the [Video FX Chrome
- Experiment](http://www.chromeexperiments.com/detail/videofx/)).
-
- WebRTC. [WebRTC](http://dev.w3.org/2011/webrtc/editor/webrtc.html) was
- designed for real time communication between peers and the technology can
- also be used for applications like live streaming media and data. Google’s
- [Chromecast
- device](http://www.google.com/intl/en/chrome/devices/chromecast/) uses
- WebRTC to stream HD video between a browser and TV.
-
-Several features on top of these building blocks support more advanced use
-cases:
-
-### Adaptive Streaming
-
-The ability to adapt media streaming to an individual consumer is critical in
-delivering high-quality content to a large audience. In the past this capability
-has been provided by technologies such as Silverlight’s smooth streaming and
-Quicktime’s HTTP live streaming. The [Media Source
-Extensions](https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html)
-to the HTML media element provide the capability to adapt a stream to an
-individual consumer on the modern web. Html5rocks has put together a great
-[example](http://updates.html5rocks.com/2011/11/Stream-video-using-the-MediaSource-API)
-of how to use the Media Source Extensions to implement some of these common use
-cases.
-
-### Video Conferencing
-
-Several of the most popular NPAPI extensions including Facebook Video Chat and
-Google Talk provide video conferencing functionality within the browser. With
-the introduction of [WebRTC](http://dev.w3.org/2011/webrtc/editor/webrtc.html)
-video conferencing is facilitated directly through JavaScript APIs. The [Cube
-Slam Chrome Experiment](http://www.chromeexperiments.com/detail/cube-slam/)
-provides an example of peer to peer video conferencing via WebRTC.
-
-### Digital Rights Management
-
-[Encrypted Media
-Extensions](https://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html)
-give HTML5 video the DRM capabilities that previously would have required the
-use of a platform specific plug-in. The [WebM
-project](http://www.webmproject.org/) has provided a
-[demo](http://downloads.webmproject.org/adaptive-encrypted-demo/adaptive/index.html)
-which performs video playback using the Encrypted Media Extensions of the video
-element. For more information, check out [the EME HTML5 Rocks
-article](http://www.html5rocks.com/en/tutorials/eme/basics/).
-
-### Closed Captioning
-
-### [WebVTT](http://dev.w3.org/html5/webvtt/) and the [&lt;track&gt;](http://www.html5rocks.com/en/tutorials/track/basics/) element (a child element of &lt;video&gt;) enable web developers to add timed-text captioning capabilities to their HTML apps.
-
-## Communicating with native applications
-
-Try the [Native Messaging
-API](http://developer.chrome.com/extensions/messaging.html#native-messaging) for
-Chrome Apps and Extensions.
-
-## Games & 3D
-
-[Native Client (NaCL)](https://developers.google.com/native-client/) provides a
-rich environment for cross-platform game development. Many games have already
-been ported to or designed for NaCL. A number of
-[examples](https://developers.google.com/native-client/community/application-gallery)
-and [detailed
-tutorials](https://developers.google.com/native-client/devguide/tutorial) to get
-started with NaCL are available on the NaCL development site. The [WebGL
-specification](http://www.khronos.org/registry/webgl/specs/latest/1.0/) provides
-a high-performance platform for hardware-accelerated 3D graphics in the browser.
-[Chrome experiments has an entire
-category](http://www.chromeexperiments.com/webgl/) dedicated to examples and
-demos of various WebGL use cases.
-
-## Security
-
-Some services have relied on NPAPI-based security techniques. We recommend
-switching to [TLS](http://en.wikipedia.org/wiki/Transport_Layer_Security) or,
-soon, [Web Crypto](http://www.w3.org/TR/WebCryptoAPI/#use-cases).
-
-## Hardware access
-
-In the past it has often been necessary to write platform specific plug-ins to
-access system hardware such as webcams, microphones, USB devices, and bluetooth.
-Direct access to local media streams such as webcams and microphones can now be
-requested directly from the web via the WebRTC [Media
-Capture](http://dev.w3.org/2011/webrtc/editor/getusermedia.html) specification.
-Chromium also provides an [App API for access to USB
-hardware](http://developer.chrome.com/apps/usb.html) and another [API for
-accessing Bluetooth devices](http://developer.chrome.com/apps/bluetooth.html).
-
-## Screen capture
-
-Chrome extensions can perform screen capture or streaming using either [Desktop
-Capture](http://developer.chrome.com/extensions/desktopCapture.html) for full
-screen capture or the [Tabs
-API](http://developer.chrome.com/extensions/tabs.html) captureVisibleTab for
-individual tab content capture. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/npapi-deprecation/npapimock.png.sha1 b/chromium/docs/website/site/developers/npapi-deprecation/npapimock.png.sha1
deleted file mode 100644
index 3eda2c696f1..00000000000
--- a/chromium/docs/website/site/developers/npapi-deprecation/npapimock.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f71dd49566b51e7a93524bca908f7297030311bd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/os-x-keyboard-handling/index.md b/chromium/docs/website/site/developers/os-x-keyboard-handling/index.md
deleted file mode 100644
index 0765d6399e4..00000000000
--- a/chromium/docs/website/site/developers/os-x-keyboard-handling/index.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: os-x-keyboard-handling
-title: OS X keyboard handling
----
-
-This document describes how keyboard events are handled on OS X. Some of this is
-common for all three platforms, some of it is specific to OS X.
-
-## Requirements
-
-The central principles behind all design decisions are
-
-1. Keyboard events should not use synchronous IPC calls.
-2. All key events should be forwarded to the web page first, and only
- if the web page does not handle and event it should be handled by
- Chromium itself (with the exception of a few reserved shortcuts)
- 1. The javascript events send for key presses should be similar to
- what Safari sends (this is not true yet, [bug
- 25249](http://crbug.com/25249))
-3. The events that end up being handled by Chromium should behave like
- keyboard events normally behave on OS X
- 1. Key equivalents should blink the menu item they activate
- 2. It should be possible to configure custom keyboard shortcuts in
- System Preferences
- 3. Text input should support everything the Cocoa text input system
- supports (IME, configurable text actions, emacs shortcuts, etc
-
-## Life of a keypress
-
-TODO(thakis): Write
-
-Copy all links from my notes, have a version of Apple's diagram with annotations
-where we intercept and redispatch what.
-
-Cocoa sends all events to -\[NSApplication sendEvent:\]. The standard
-implementation of this checks if cmd or ctrl are pressed (of if the key is an
-arrow key), and if so sends the event via -performKeyEquivalent: down to the
-window, which does a pre-order traversal of all views in the window and calls
--performKeyEquivalent: on every view until a view handles the event. The
-responder chain is not used during key equivalent processing. If no view handles
-the event, it is next sent to the menu, then to the key view loop, and if it is
-not handled by those, down the regular path of key events.
-
-For normal key events, -\[NSWindow sendEvent:\] is called, which sends -keyDown:
-to the window's first responder. The first responder either handles the event or
-forwards it to the next responder in the responder chain.
-
-FOO about pKE being a problem and keyDown: being good.
-
-The first approach I tried was to have -\[RenderWidgetHostViewMac
-performKeyEquivalent:\] always return YES for key events that would be handled
-by the menu (by checking if cmd is down) and then ipc the event that was passed
-in to the renderers. Other key events would make it through to -keyDown: and be
-processed correctly through the flow there. If the key comes back unprocessed
-from the renderer, I passed it to -\[NSMenu performKeyEquivalent:\] so that it
-would trigger a menu item. There were several problems: Some keys didn't make it
-through to -keyDown: (notably, ctrl-tab, which Cocoa swallowed for use in the
-view loop), and some keys that Cocoa should handle get dropped (for example,
-cmd-\`, which is not handled by the main menu).
-
-The next approach was that -\[CrApplication sendEvent:\] asks the window if it
-wants to shortcircuit the event. The window checks if its first responder is a
-RenderWidgetHostViewMac and if so, sends the key over ipc and tells the
-application to drop the key. If the key comes back unhandled from the renderer,
-it is sent to -\[NSApp sendEvent:\] again (with a flag set that the
-shortcircuiting mechanism should not be used this time). This will then let
-cocoa give the key to the menu and handle keyboard shortcuts like cmd-\`.
-(TODO(thakis): Mention that original key events are kept in a queue on the
-browser side and the original object is used during redispatch).
-
-The current approach is based on -performKeyEquivalent: again, as the
-sendEvent-based approach disabled input menu toggling if the web page swallowed
-the key press for that. To work around the problems this approach had on the
-first try, the event redispatch is kept from the old approach (that maked cmd-\`
-work), and we use an SPI to make sure ctrl-tab is not swallowed by the key view
-loop handling. (TODO(thakis): Probably, nobody cares about the history? Remove
-the old two approaches, at least from the main text)
-
-FIXME(thakis): Explain how the shortcut blocklist (cmd-w etc) works.
-
-FIXME(thakis): Explain what isSystemKey keys are.
-
-FIXME(thakis): Explain why there are window-level and browser-level equivalent
-shortcuts. Talk about global_keyboard_shortcuts_mac, but also about how this
-being keycode-based sucks.
-
-FIXME(thakis): Explain how keys are IPCd.
-
-FIXME(thakis): Explain why the key needs to go to the menu before going go
-g_k_s_m and _then_ to \[NSApp sendEvent:\].
-
-FIXME(thakis): Explain how IME works.
-
-FIXME(thakis): Explain how emacs key bindings are implemented.
-
-TODO(thakis): Split this up into several sections. Possible sections: "Big
-picture" with subsections Key event interception, IPC, Redispatch. "Gory
-details" with all the FIXMEs above?
-
-## Testing
-
-To guard against regressions, the keyboard handling code should be thoroughly
-unit-tested. As of now, it is not very tested. This section contains a list of
-interesting keyboard handling bugs, as a list of things to think of when
-changing the keyboard handling code. I will write tests for all of these once
-in-process browser tests work.
-
-* Keyboard events should go to JS first and only be processed by the
- browser if javascript doesn't handle them. Bug , No Test. All other
- test cases assume that js does not handle the keypress.
-* Cmd-up/down should scroll to end of the page. Bug, Test .
-* Cmd-1-8 should switch to tab 1-8, no matter what is focussed. Bug,
- Test .
-* Cmd-left/right should go back/forward if the web is focussed, but
- not if the omnibox is focussed or a text field on the web is
- focussed. Bug, Test .
-* Cmd-opt-left/right should switch tabs.
-* Ctrl-Tab should switch tabs and not trigger the view loop.
-* Cmd-\` should cycle windows. It should be possible to change the key
- for this in System Preferences, and the other key should still work.
-* Backspace should go back if no textbox is focusses. It should not go
- back while IME is active.
-* Cmd-c, cmd-v, cmd-x should blink their menu entries.
-* Cmd-z, cmd-shift-z do not yet blink their menu entries, but they
- should work none the less.
-* Tab should make focus jump between web page elements when the web
- has focus.
-* Ctrl-left/right should go to start/end of line
-* Cmd-space (or whatever is configured to trigger this) should always
- change the current input language, and not give the web an
- opportunity to swallow that keypress.
-* Cmd-left/right should go back/forward and not scroll the page if the
- page has a horizontal scrollbar.
-
-These are still broken at the time of this writing:
-
-* Cmd-shift-v should work even though it doesn't have a menu entry
- yet.
-* html accesskey attribute
-* Hitting arrow left/right while IME is active should move the cursor. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/owners-files/index.md b/chromium/docs/website/site/developers/owners-files/index.md
deleted file mode 100644
index 433a49a6f67..00000000000
--- a/chromium/docs/website/site/developers/owners-files/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: owners-files
-title: OWNERS Files
----
-
-This documentation has [moved to the source
-tree](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/code_reviews.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/page-sets-and-benchmarks/index.md b/chromium/docs/website/site/developers/page-sets-and-benchmarks/index.md
deleted file mode 100644
index 69ed4105c9c..00000000000
--- a/chromium/docs/website/site/developers/page-sets-and-benchmarks/index.md
+++ /dev/null
@@ -1,130 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: page-sets-and-benchmarks
-title: Benchmarks == Measurements + Page Set
----
-
-## Overview
-
-Telemetry is opinionated in what a benchmark is. A benchmark is:
-
-* A PageMeasurement, which is a canned way to measure an arbitrary
- page. The measurement really should work for any page.
- Good: Number of DOM Nodes in a Page
- Bad: Number of DOM Nodes in Gmail
-* A page set, which is a list of pages your PM is interested in
- Good: top 25 websites. The 10 most interesting ways users use our webapp
- Bad: page set for measuring memory, another page set for measuring scrolling
-
-Here's why you care:
-
-* Writing a good measurement is really hard, and Chrome has a bunch in
- tools/perf/ that are all-ready-to-go!
-* Once you can measure a page, you'll often want to track more pages
- just like that. And each page you try to add is going to have corner
- cases. And quirks. A request will come in for A/B tests. Pretty
- soon, you'll have your original measurement hacked up with tons of
- special cases to handle all your app's different use cases. This is
- cray!
-* A page set is a product-level idea. PMs know what use cases are
- important for the product. Have them maintain the list of use cases
- as a page set.
-* The measurement is a code level idea. Given a given page, the
- measurement should evaluate how well you did. Engineers are good
- maintainers of a measurement class.
-
-# Check out tools/perf/page_sets/top_25 for examples of page sets.
-
-# ## An Example
-
-## Lets say my users often go to a specific page, click a button, and ==scroll== a div that shows up. I could measure any number of things:
-
-* How long it takes to go to that URL in a fresh tab until the div is
- up
-* How smoothly I can scroll the div
-* How much time I spend in key WebKit systems: javascript, style,
- layout, paint, compositing
-* How much the memory footprint varies as I scroll the div
-* How much time I spend decoding images, and painting the page
-
-Those are measurements. tools/perf has many measurements. **THINK TWICE BEFORE
-YOU WRITE ANOTHER MEASUREMENT.** There probably is one already.
-
-**Most telemetry users should be putting their effort into writing page sets.**
-In this example, the page set isn't going to be "the page set for measuring this
-specific url and how well it scrolls." Its going to be "the page sets for my
-application," and since I have only one use case right now, it will be:
-
-> {description: "my teams pages that are worth benchmarking",
-
-> pages: \[
-
-> {
-
-> "url": "my page's url",
-
-> "smoothness": \[
-
-> {action: click_element, selector: "#show-dialog"},
-
-> {action: scroll, selector: "#dialog &gt; #dialog-contents"}
-
-> \]
-
-> }
-
-> }
-
-Now if I wanted to measure the smoothness of this use case:
-
-> ./tools/perf/run_multipage_benchmark smoothness_benchmark my_team.json
-
-Suppose now you also want to test the perf of your main page without that dialog
-showing. Ugh, write another benchmark? Not so much... just add another page:
-
-> {
-
-> "url": "my page's url",
-
-> "smoothness": \[
-
-> {action: scroll, selector: "body"}
-
-> \]
-
-> }
-
-And maybe I want to monitor memory for that page, by clicking a compose button
-10 times. Again, thats not a benchmark, its just another entry in yoru page.
-
-> {
-
-> "url": "my page's url",
-
-> "smoothness": \[
-
-> {action: scroll, selector: "body"}
-
-> \],
-
-> "stress_memory": \[
-
-> {action: repeat, times: 10,
-
-> repeat: \[
-
-> {"action": click_element, selector: compose},
-
-> {"action": "click_element", selector: "#discard"}
-
-> \]
-
-> \]
-
-> }
-
-Voila. Now we just:
-
-> ./tools/perf/run_multipage_benchmark memory_benchmark my_team.json \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/pepper-api-best-practices/index.md b/chromium/docs/website/site/developers/pepper-api-best-practices/index.md
deleted file mode 100644
index 4b288ee0d0a..00000000000
--- a/chromium/docs/website/site/developers/pepper-api-best-practices/index.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: pepper-api-best-practices
-title: Pepper API Best Practices
----
-
-When appropriate, suffix enumeration constants with _PRIVATE.
-
-Two enum constants can't have the same name, so making a separate enum for
-
-Private constants causes trouble. Suffixing the constants with _PRIVATE makes
-
-it clear which values are public and which are private. This also keeps names
-
-from colliding.
-
-Use primitive types in C interfaces when possible.
-
-It's easier for users to deal with primitive types (int, double, etc.) than
-
-PP_Var. This is worth doing, even when trying to make an interface mirror a
-
-JavaScript counterpart. If a string must be valid UTF-8, use PP_Var.
-
-Be extra careful with C++ interfaces.
-
-We don't have any mechanism today to provide multiple versions of a C++
-
-interface to users. This means we must be even more forward-looking about what
-
-is in those APIs, as libraries may come to depend on them.
-
-In C++ implementations, always call the newest reasonable C interface.
-
-Code in ppapi/cpp/ should check for the available C versions and always call
-
-the newest available version that works for the given parameters. This makes it
-
-more feasible to deprecate or remove a version of the C interface at some point
-
-in the future.
-
-Don't pass structs by value.
-
-This can cause API breakage because PNaCl may change calling conventions on
-
-different platforms.
-
-Follow existing reference counting conventions.
-
-When passing PP_Resource or PP_Var as an input parameter to an API, the API
-
-should not expect to be passed a reference. It should explicitly take a
-
-reference if it needs to.
-
-Return values and output parameters must pass a reference back to the caller.
-
-This includes output parameters for calls that return asynchronously via a
-
-CompletionCallback.
-
-Follow existing PP_CompletionCallback conventions.
-
-Functions that take a completion callback should:
-
-- Return int32_t, which must be either a positive value or a value from
-
-ppapi/c/pp_errors.h
-
-- Take only 1 PP_CompletionCallback parameter.
-
-- Run the PP_CompletionCallback exactly once.
-
-Use the Enter\* classes and TrackedCallback to ensure the behavior is
-
-consistent.
-
-Provide all new PPP interfaces as a parameter to a PPB interface.
-
-Legacy PPP interfaces are exposed via the Plugin's GetInterface call and are
-
-associated with an interface string, much like PPB interfaces. This has two
-
-drawbacks:
-
-- It's hard to associate a particular version of a PPB interface with its
-
-corresponding PPP interface.
-
-- We can only ever call the PPP interface on the main thread.
-
-Design your API to be friendly as a porting layer for a more well-known API.
-
-Our FileIO API should make it easy to implement POSIX file operations.
-
-Similarly, our sockets APIs should make it possible to implement BSD/POSIX
-
-sockets. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/polymer-0-8/index.md b/chromium/docs/website/site/developers/polymer-0-8/index.md
deleted file mode 100644
index 1eb5a71647d..00000000000
--- a/chromium/docs/website/site/developers/polymer-0-8/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: polymer-0-8
-title: Polymer 0.8
----
-
-## [Moved to Polymer 1.0.](/developers/polymer-1-0) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/postmortems/index.md b/chromium/docs/website/site/developers/postmortems/index.md
deleted file mode 100644
index c805b52ad26..00000000000
--- a/chromium/docs/website/site/developers/postmortems/index.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: postmortems
-title: Postmortems
----
-
-### Why Write a Postmortem
-
-To understand how failures happen, in order to prevent future occurrences by
-education and process changes.
-
-### When To Write a Postmortem
-
-A postmortem is expected for any tree closures lasting longer than 4 hours,
-within 72 hours of the outage.
-
-### Who Should Write the Postmortem
-
-The postmortem should be written by someone involved with detecting and
-correcting the issue, preferably someone who can take responsibility for the
-followup.
-
-### What to Include
-
-Please use the postmortem template found
-[here](https://docs.google.com/document/d/1oBYQmpBthPfxMvW0XgHn7Bu918n6eFLlQM7nVhEdF_0/edit?usp=sharing)
-(file -&gt; make a copy).
-
-Your postmortem should include the following sections:
-
-1. Title
-2. Summary of the event
-3. Full timeline
-4. Root cause(s)
-5. What worked and what didn't (a.k.a., lessons learned)
-6. Action items (followup bugs assigned to specific people)
-
-### Where to Put It
-
-Whenever possible, postmortems should be accessible to the entire Chromium
-community. If you are a Google employee, and your postmortem contains internal
-details, see the internal infrastructure team's postmortem site instead.
-
-1. With your chromium.org, write it in a Google Doc, set sharing
- permissions to “Anyone who has the link can comment”
-2. Add it to the list below.
-3. Send the link to
- [chromium-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev)
- or
- [infra-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/infra-dev),
- as relevant.
-
-See also:
-
-* <http://codeascraft.com/2012/05/22/blameless-postmortems/>
-* [Example of a great
- postmortem](https://docs.google.com/document/d/1AyeS2du6wp_Pw8Grg8WovbE_A_HV4EUMqdiqeq1KUZ8/edit#heading=h.40nli0xmdtb5).
-
-<table>
- <tr>
- <th>Title</th>
- <th>Date</th>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/document/d/1pHtodNt3Bk0YliLTPmq42LaZaKGcD_v-ZqDtrJFxXzc/edit?usp=sharing">SPDY/QUIC Connection Pooling Bug Postmortem</a></td>
- <td></td>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/document/d/1MnSceOmgw5VPgegNWaMV5iakrvRROeVYw6P0FXvvC28/edit">chromium.perf tests on android userdebug builds failing for 7 days</a></td>
- <td>2015-01-30</td>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/a/chromium.org/document/d/1eCR2v9uR9jR-LQi2GiZ9soQmW4p8lfAFjj-uewBGbh8/edit#heading=h.cg9oxhygkrer">No data from some android bots on chromium.perf for 2 weeks</a></td>
- <td>2014-12-22</td>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/a/chromium.org/document/d/1O2CUqFGMJ6uHP_hBdh9i9AHIOY96nTYaKRa6c4oAHJs/edit#heading=h.cg9oxhygkrer">Grit Compile Errors Require Clobber</a></td>
- <td>2014-07-25</td>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/document/d/1IQMoBeZe8cKjaCf4VIlj2AIt5ZBEsVfrh4o7DP1MPo0/edit#heading=h.xt2hz3y9j243">Swarming Postmortem: 2014-12-04</a></td>
- <td>2014-12-04</td>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/a/google.com/document/d/1qQS8dZ5_wt3iOZ44vYmfrAn3EsAIkwFh9sAMdDPraQE/edit">.dbconfig files loss on master3</a></td>
- <td>2014-09-19</td>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/a/chromium.org/document/d/1wkxPKzWt3Xb3tjczhHl66Y5uCgO0EeE5mlDd9xIHbiE/edit">Postmortem: 15 hour tree closure by a file named "about"</a></td>
- <td>2014-05-09</td>
- </tr>
- <tr>
- <td><a href="https://docs.google.com/document/d/1E9B03cFkyLXjdLjVCu-bTK762E2RJiBhkvbv_4rjDr0">Swarming Postmortem: Undeleteable directorie</a></td>
- <td>2015-11-22</td>
- </tr>
-</table>
diff --git a/chromium/docs/website/site/developers/profiling-chromium-and-webkit/index.md b/chromium/docs/website/site/developers/profiling-chromium-and-webkit/index.md
deleted file mode 100644
index 1fe844e8377..00000000000
--- a/chromium/docs/website/site/developers/profiling-chromium-and-webkit/index.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: profiling-chromium-and-webkit
-title: Profiling Chromium and Blink
----
-
-There are a few ways to profile Chromium and Blink. Here are some of the tools
-that work well for diagnosing performance problems.
-
-See also the [Deep memory
-profiler](http://www.chromium.org/developers/deep-memory-profiler).
-
-## Built-In Tools
-
-For JavaScript issues, the built in profiler works very well. To use this open
-up the Chrome Dev Tools (right click, Inspect Element) and select the 'Profiles'
-tab.
-
-For a broader understanding of Chromium speed and bottlenecks, as well as
-understanding how posted-task and threads interact in aggregate, there is a
-cross-platform, task-level profiler built in. Profiler results can be seen in
-about:profiler (or equivalently chrome://profiler) For more details, visit
-(<http://www.chromium.org/developers/threaded-task-tracking>).
-
-See chrome://tracing for timelines showing TRACE_EVENT activity across all the
-different threads; originally used for GPU performance, and will probably
-require you to add TRACE_EVENT calls to the features you're interested in
-outside of compositing & rendering (this was named about://gpu through M14).
-
-## C++
-
-For native C++ code the tools depend on the OS.
-
-Note that basic printf debugging and using a general debugger (such as gdb) may
-be sufficient for some purposes. However, more specialized tools are available.
-
-## Linux, ChromeOS, Android
-
-See <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/profiling.md>
-
-### OS X
-
-DTrace and the pre-packaged "CPU Sampler" tool in Xcode work well. Shark or the
-command-line sample work also, though they both will spend an exceedingly long
-time processing symbols if you are running Leopard (10.5). Anecdotally this is
-much faster in Snow Leopard (10.6)
-
-### Windows
-
-Windows Performance Toolkit (WPT, aka xperf, ETW, or WPA) is a free profiler
-from Microsoft that can profile CPU consumption, CPU idle time, file I/O, disk
-I/O, and more. To use WPT you need Windows 7 or higher. Getting started
-instructions for recording a trace using UIforETW can be found on [this blog
-post](https://randomascii.wordpress.com/2015/09/01/xperf-basics-recording-a-trace-the-ultimate-easy-way/).
-Trace analysis can then be done (be sure to configure [Chrome's symbol
-server](/developers/how-tos/debugging-on-windows)) or the trace can be shared on
-Google drive by analysis by somebody else. If you will be doing the analysis of
-the traces that you record then you may want to check the "Chrome developer" box
-in the settings dialog. This will tell UIforETW to print a summary of your
-Chrome process tree. You can also check some of the chrome tracing categories
-(maybe input, toplevel, latency, blink.user_timing,
-disable-by-default-toplevel.flow) so that Chrome will emit those chrome:tracing
-events into the ETW event stream. WPT is the recommended Windows profiler for
-any Chrome performance problems that aren't handled by the built-in tools. If
-you are profiling officially published Chrome builds (Canary, stable, etc.) then
-you need to add Chrome's symbol server to WPA using the Trace-&gt; Configure
-Symbol Paths dialog. If you are profiling a local build then you can either add
-your local build directory to that dialog or set use_full_pdb_paths = true in
-your gn args so that the full path to the PDB is put in the EXE and DLL files.
-
-Visual Studio also includes an [instrumenting
-profiler](https://msdn.microsoft.com/en-us/library/dd255369.aspx). "vsinstr
-/help" and "vsperfcmd /help" have details for additional options. Currently this
-requires a non-debug non-component build of Chromium (debug or component builds
-omit the /profile linker flag).
-
-AMD Code Analyst is a free profiler that can run inside Visual Studio. It
-captures frequency counts for functions in every process on the computer. It can
-optionally capture call-stack information, %CPU, and memory usage statistics;
-even with the Frame Pointer Omission optimization turned off
-(build\\internal\\release_defaults.gypi; under 'VCCLCompilerTool' set
-'OmitFramePointers':'false'?), the call stack capture can have lots of bad
-information, but at least the most-frequent-caller seems accurate in practice.
-
-Intel's VTune 9.1 does work in the Sampling mode (using the hardware performance
-counters), but call graphs are unavailable in Windows 7/64. Note also that
-drilling down into the results for chrome.dll is extremely slow (on the order of
-many minutes) and may appear hung. It does work (I suggest coffee or foosball).
-VTune has been essentially supplanted by Intel® VTune™ Amplifier XE, which is an
-entirely new code base and interface, AFAIK.
-
-Very Sleepy (<http://www.codersnotes.com/sleepy>) is a light-weight standalone
-profiler that seems to works pretty well for casual use and offers a decent set
-of features.
-
-## Android
-
-See [Profiling Content Shell on
-Android](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/profiling_content_shell_on_android.md)
-for detailed Android-specific instructions, and [Telemetry
-profiling](/developers/telemetry/profiling) for general instructions about using
-Telemetry to profile (rather than using `adb_profile_chrome`).
-
-GPU profiling
-
-Both nVidia PerfHUD and Microsoft PIX are freely available. They may not run
-without making minor changes to how the graphics contexts are set up; check with
-the chrome-gpu team for current details.
-
-The OpenGL Profiler for OSX allows real-time inspection of the top GL
-performance bottlenecks, as well as call traces. In order to use it with
-Chrome/Mac, you must pass --disable-gpu-sandbox on the command line. Some people
-have had more luck attaching it to the GPU process after-the-fact than launching
-Chrome from within the Profiler; YMMV.
-
-GPUView is a Windows tool that utilizes ETW (Event Tracing for Windows) for
-visualizing low-level GPU, driver and kernel interactions in a time-based
-viewer. It's available as part of the Microsoft Windows Performance Toolkit, in
-%ProgramFiles%\\Windows Kits\\10\\Windows Performance Toolkit\\GPUView. There's
-a README.TXT in there with basic instructions, or see
-<http://graphics.stanford.edu/~mdfisher/GPUView.html>. Traces for loading into
-GPUView can be recorded with wprui or UIforETW (see the Windows section).
-
-## Googlers Only
-
-Take a look at go/chrome-performance-how for an overview of internal performance
-tools. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/profiling-flame-graphs/flamegraph.png.sha1 b/chromium/docs/website/site/developers/profiling-flame-graphs/flamegraph.png.sha1
deleted file mode 100644
index 01a779106b4..00000000000
--- a/chromium/docs/website/site/developers/profiling-flame-graphs/flamegraph.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-54aad7be854e55f10225c73580d59cb7d53b5a0b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/profiling-flame-graphs/index.md b/chromium/docs/website/site/developers/profiling-flame-graphs/index.md
deleted file mode 100644
index 72398176f13..00000000000
--- a/chromium/docs/website/site/developers/profiling-flame-graphs/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: profiling-flame-graphs
-title: Profiling Blink using Flame Graphs
----
-
-Quick how to explaining how to profile Blink tests on Linux and analyze the
-results using flame graphs.
-
-<img alt="Example flame graph."
-src="/developers/profiling-flame-graphs/flamegraph.png">
-[Interactive Example](https://blink.gs/images/line-layout-flame-graph.svg)
-
-## Prerequisites
-
-* perf - available in the package linux-tools on Ubuntu.
-* FlameGraph -
- [FlameGraph.zip](https://github.com/brendangregg/FlameGraph/archive/master.zip)
- or see [github page](https://github.com/brendangregg/FlameGraph).
-
-## Instructions
-
-To get profiling data one needs to build chromium and/or content_shell with
-`GYP_DEFINE+="profiling=1"`
-
-The basic strategy is to do the following:
-
-1. Build with `GYP_DEFINE+="profiling=1"`
-2. Record using `perf record`.
-3. Collapse stacks using `stackcollapse-perf.pl`.
-4. Generate flame graph using `flamegraph.pl`.
-
-## Profiling a Performance Test
-
-For example, to profile and generate a visualization for the Blink
-`Layout/line-layout.html` performance tests the following command sequence could
-be used. This assumes that the FlameGraph software from above is in the `PATH`.
-
-GYP_DEFINES+="profiling=1" gclient runhooks ninja -C out/Release blink_tests
-perf record -F 500 -g -q -- ./out/Release/content_shell \\ --dump-render-tree
-\`pwd\`/third_party/WebKit/PerformanceTests/Layout/line-layout.html perf script
-| stackcollapse-perf.pl | flamegraph.pl &gt; /tmp/flamegraph.svg
-
-## Analyzing the Results
-
-The generated SVG file is an interactive document that can be opened in Chrome
-(or any other browser). Clicking a stack frame will "zoom in" to that frame. See
-the [Flame Graphs](http://www.brendangregg.com/flamegraphs.html) home page for
-further information and other use cases.
-
-## Further Reading
-
-* [Chromium profiling on
- linux](https://code.google.com/p/chromium/wiki/LinuxProfiling). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/public-calendar-for-meetings-discussing-new-ideas/index.md b/chromium/docs/website/site/developers/public-calendar-for-meetings-discussing-new-ideas/index.md
deleted file mode 100644
index 31d5363f1ea..00000000000
--- a/chromium/docs/website/site/developers/public-calendar-for-meetings-discussing-new-ideas/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: public-calendar-for-meetings-discussing-new-ideas
-title: Public calendar for meetings discussing new ideas
----
-
-We strongly recommend that Chromium discussions happen in public forums!
-
-But, if you would like to discuss an idea that is not yet public with another
-Chromium contributor outside of a public forum (eg. in a meeting or a
-conference), please add the meeting details to this [public
-calendar](https://calendar.google.com/calendar/r?cid=Y18xODhlMjI4YWZhMnY4dmswdHJzZ25zcmZwYzJkMDRnYWN0bm11cHJjY2tuNjZycmRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).
-
-* Add a brief agenda and any documents/links to track progress.
-* Ensure that the discussion is moved to the public forums and
- reflects any decisions made in such meetings.
-* If you receive interest from another contributor to attend the
- meeting, please try to accommodate the interest. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/quarantined-pages/index.md b/chromium/docs/website/site/developers/quarantined-pages/index.md
deleted file mode 100644
index 0f5b7c53b96..00000000000
--- a/chromium/docs/website/site/developers/quarantined-pages/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: quarantined-pages
-title: Quarantined pages
----
-
-Subpages are pages that should be deleted. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/quarantined-pages/meeting-notes/index.md b/chromium/docs/website/site/developers/quarantined-pages/meeting-notes/index.md
deleted file mode 100644
index 9a67e7d436e..00000000000
--- a/chromium/docs/website/site/developers/quarantined-pages/meeting-notes/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/quarantined-pages
- - Quarantined pages
-page_name: meeting-notes
-title: Meeting Notes
----
-
-[Meeting Notes from February 9, 2009](#02092009)
-
----
-
-February 9, 2009
-
-### Browser
-
-> Mostly stability work this week, with several crashers and layout tests fixed.
-> For a status report, see:
-> <http://code.google.com/p/chromium/wiki/StabilizeTrunk?ts=1229629370&updated=StabilizeTrunk>
-
-### Multiplatform
-
-* Mac Update
- * Creating and destroying tabs (renderer process is getting
- created/destroyed)
- * shutting down is working properly
- * plugins are loading things (callbacks are working correctly) but
- not displaying
- * close to having visible bits on the screen, jrg is working on
- telling the renderer to draw
- * bits are traveling across the wire but it hasn't been tested so
- we'll know once the renderer is drawing
-* Linux Update
- * Displays a window and a toolbar
- * Pieces are in place for bits on the wire
- * Displays flash without glitches (woo dean!) in window'ed mode
-
-### Infrastructure
-
-> Not much work on the new network stack, one crasher fixed and one security bug
-> under investigation. Wan-teh is also starting work on supporting NTLM auth. On
-> the stability front, the build is more stable this week in terms of renderer
-> crashes (200 different stack traces at the beginning of last week, but only 45
-> stack traces on Friday). In the build area, maruel disabled incremental
-> linking for 32-bit OSes (Vista 64 users not affected) because things grew too
-> large. WebCore is moving into its own DLL, should help. Rahul and Pam are
-> Sheriff and Deputy this week, be nice to them by keeping the tree green.
-
-### Webkit
-
-* Darin, Pam and Brett are doing the merge this week.
-
- * Daily merge calendar:
- <http://www.google.com/calendar/hosted/google.com/embed?src=google.com_h1kjbmjo6p29ta0rluu8eh5qjo%40group.calendar.google.com&ctz=America/Los_Angeles>
-
-* Continuing to unfork. About 64 files forked, and starting to
- upstream V8 bindings, which account for a large number.
-* Stability push: doing very well on layout tests, but accumulation of
- crashers is bringing stability of dev channel down. If you can fix a
- crasher, please help!
-
-### Extensions
-
-* Aaron finished URLPattern integration for user scripts, now working
- on giving them a separate JS context.
-* Erik is making progress on loading extensions once they've been
- installed.
-* Matt is working on the new extension process model:
- <http://www.chromium.org/developers/design-documents/extensions/process-model>
diff --git a/chromium/docs/website/site/developers/quick-reference/index.md b/chromium/docs/website/site/developers/quick-reference/index.md
deleted file mode 100644
index f1d6a663de1..00000000000
--- a/chromium/docs/website/site/developers/quick-reference/index.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: quick-reference
-title: Quick reference
----
-
-**THIS PAGE IS DEPRECATED.**
-
-This page provides a quick reference for common development related commands.
-
-### Checking the status of your repository
-
-> **Main status command:** svn status
-
-> > This command shows you the status of the repository in the current directory
-> > and all subdirectories. It does not check directories outside the current
-> > one. C:\\chrome\\src&gt;svn status
-> > ? chrome\\mypatch.diff
-> > M chrome\\browser\\navigation_controller.cc
-> > C chrome\\browser\\navigation_controller.h
-
-> > Note that this does not show changelists. Use gcl opened or gcl changes to
-> > see those.
-
-> > **Key of common status codes:** "?" this file is not added to the
-> > repository, "A" this file is being added, "M" this file is modified, "C"
-> > there is a conflict (see "if you get conflicts" below on fixing this).
-
-> **Helper commands:** gcl provides a few commands to only show parts of the
-> subversion status:
-
-> * gcl opened shows modified files and which changelists they belong
- to, if any.
-> * gcl nothave shows files not under version control.
-
-> **Show modifications:** svn diff
-
-> * With no extra arguments, this creates a diff of all modified files
- in the current and child directories relative to your last
- checkout.
-> * svn diff *&lt;filename&gt;* shows a diff for the given file.
-> * See also "Managing changelists" below.
-
-### Syncing your checkout
-
-> **To update your checkout:** gclient sync
-
-> * For a faster update, use the -j / --jobs flag to update multiple
- repositories in parallel, for example: gclient sync --jobs 12
-> * Be sure to run this command within the repository (the root of
- your checkout or any other svn-managed directory). The "Debug" and
- "Release" directories aren't under version control and won't work.
-> * Under Windows, it's best to exit Visual Studio before syncing. It
- will not pick up changes to property sheets (.vsprops) while it's
- running, which can cause strange compiler errors.
-> * *Don't* use svn update. It will only update the current
- repository. A Chromium checkout consists of multiple repositories,
- which gcl tracks simultaneously.
-
-> **If you get conflicts:** Conflicts denoted by a "C" in the status list, and
-> indicate that both you and somebody else has changed the same code. After you
-> update the file and remove the conflict markers, run svn resolved
-> *&lt;filename&gt;* remove the conflict flag. You won't be able to check in
-> with the conflict flag set.
-
-### Adding, editing, and reverting
-
-> Unlike some version control systems such as Perforce, Subversion doesn't
-> require you to do anything special to begin editing a file. Just edit it.
-
-> **To add a new file to Subversion:** svn add *&lt;filename&gt;*
-
-> **To add a new file to the build: Find the .gyp file for the target you are
-> modifying and add the new file into the sources list.**
-
-> **To revert a single file:** svn revert *&lt;filename&gt;*
-
-> **To recursively revert all files a directory:** svn revert -R
-> *&lt;directory&gt;* (you can use "." for the current directory).
-
-> **To revert every file in your checkout with extreme prejudice:** gclient
-> revert
-
-### Managing changelists
-
-> **To create or modify a changelist:** gcl change *&lt;changename&gt;*
-
-> * The name is used only on your local computer to identify your
- change, so give it any name that will help you remember.
-> * If you don't specify a name, a random one will be created for you.
-> * After executing this command, your editor will open and you will
- be able to modify the changelist description and move files in and
- out of the changelist by copying and pasting their names.
-
-> **To list all changelists:** gcl changes
-
-> > This lists all files in all changes, even outside of the current directory
-> > and its subdirectories.
-
-> > C:\\chrome\\src\\chrome\\browser&gt;gcl changes
-> > --- Changelist mychange
-> > M chrome\\browser\\navigation_controller.cc
-
-> > This does not show files not in any changelist. Use gcl opened to see those
-> > as well.
-
-> **To see a diff of a changelist:** gcl diff *&lt;changename&gt;*
-
-> **To delete a changelist:** gcl delete *&lt;changename&gt;*
-
-> > This does not actually revert the files in the changelist, it leaves the
-> > files in their current state, just outside of any changelist.
-
-### Review and commit
-
-> Please see the [contributing code](/developers/contributing-code) page for
-> full details.
-
-> **To upload a changelist for review:** gcl upload &lt;changename&gt;
-
-> > This may prompt your for a username and password. Use a Google login (such
-> > as your Gmail address and password). Chromium team members should use their
-> > full "@chromium.org" address.
-
-> **To see your open reviews:** Go to <http://codereview.chromium.org/> and log
-> in. You will see you uploaded, unsubmitted patches as well as patches that
-> others have requested you to review.
-
-> **To request review:** Go to the patch on your review page and select "Edit
-> issue" on the left (you may need to click on "log in" to see these commands).
-> Enter the email address of the reviewer, any additional message (this is
-> optional, your changelist description will also be included in the email), and
-> press "Update issue".
-
-> **To submit a changelist:** If you don't have commit access, you should ask
-> your reviewer to submit the patch for you. If you do have commit access: gcl
-> commit &lt;changename&gt;
-
-### Further documentation
-
-You can look at the documentation directly with:
-gcl help
-and
-python /path_to_depot_tools/depot_tools/release/upload.py --help
-(gcl will pass through all your arguments to upload.py) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/recent-changes-credential-management-api/index.md b/chromium/docs/website/site/developers/recent-changes-credential-management-api/index.md
deleted file mode 100644
index 688099c8459..00000000000
--- a/chromium/docs/website/site/developers/recent-changes-credential-management-api/index.md
+++ /dev/null
@@ -1,213 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: recent-changes-credential-management-api
-title: Recent Changes to the Credential Management API
----
-
-## Introduction
-
-Recently there have been multiple changes to the Credential Management API. This
-doc aims to summarizes the changes and give developers advice to use the new
-features while still being able to support older versions of Chromium.
-
-## Changes in Details
-
-The following developer facing changes have been made:
-
-## The unmediated flag to CredentialRequestOptions is replaced by an mediation enum
-
-This change extends the possible mediation options passed to
-navigator.credentials.get. Instead of a boolean flag unmediated get now supports
-a CredentialMediationRequirement enum with three different values: “silent”,
-“optional” and “required”. Providing mediation: “silent” is equivalent to the
-old unmediated: true, while mediation: “optional” is equivalent to unmediated:
-false. The novel option is “required”, which always leads to user mediation,
-even if auto-signin would be possible otherwise. Similarly as before, mediation:
-“optional” is the default option and will be chosen if no other value is
-specified.
-
-### Polyfill
-
-In order to migrate existing code that uses the boolean unmediated flag to make
-use of the new enum the following patch to get will be necessary. Note that it
-is impossible to use mediation: required while being backwards compatible, given
-that this is a new feature.
-
-var origNavigatorCredentialsGet = navigator.credentials.get;
-
-navigator.credentials.get = function(options) {
-
-if (!("mediation" in options)) {
-
-options\["mediation"\] = options\["unmediated"\] ? "silent" : "optional";
-
-}
-
-return origNavigatorCredentialsGet(options);
-
-}
-
-## Introduction of navigator.credentials.create
-
-In addition to get, store and requireUserMediation navigator.credentials now
-supports a fourth method called create. It can be used to asynchronously create
-Credential objects. Currently it expects an option dictionary with a single key
-which can be either “password” or “federated”. In case of “password” the value
-will be used to instantiate a PasswordCredential object, while in case of
-“federated” the key’s value will be used to instantiate a FederatedCredential.
-create() returns a Promise, which resolves to a Credential object if successful
-and rejects otherwise. However, it is still possible to create Credentials using
-the PasswordCredential or FederatedCredential constructor. This continues to be
-the preferred way for synchronous creation.
-
-### Polyfill
-
-In order to make use of the new Promise based creation method the following
-polyfill is needed in old browsers that do not support it natively:
-
-if (!("create" in navigator.credentials)) {
-
-navigator.credentials.create = function(options) {
-
-return new Promise(function(resolve, reject) {
-
-if (Object.keys(options).length !== 1) {
-
-reject("NotSupportedError: Only 'password' and 'federated' " +
-
-"credential types are currently supported.");
-
-}
-
-if ("password" in options) {
-
-try {
-
-resolve(new PasswordCredential(options\["password"\]));
-
-} catch (e) {
-
-reject(e);
-
-}
-
-}
-
-if ("federated" in options) {
-
-try {
-
-resolve(new FederatedCredential(options\["federated"\]));
-
-} catch (e) {
-
-reject(e);
-
-}
-
-}
-
-reject("NotSupportedError: Only 'password' and 'federated' credential " +
-
-"types are currently supported.");
-
-});
-
-};
-
-}
-
-## Renaming of requireUserMediation to preventSilentAccess
-
-In order to address concerns that navigator.credentials.requireUserMediation can
-be confusing depending on the context it has been renamed to
-navigator.credentials.preventSilentAccess. However, there is no change in
-functionality.
-
-### Polyfill
-
-Given that this is simply a rename the polyfill for old browsers is very short:
-
-if (!("preventSilentAccess" in navigator.credentials)) {
-
-navigator.credentials.preventSilentAccess =
-
-navigator.credentials.requireUserMediation;
-
-}
-
-## Exposing of passwords to JavaScript and deprecation of the custom fetch infrastructure
-
-Perhaps the biggest change is that PasswordCredential.password is now directly
-accessible from JavaScript. The reason for this change is that the current
-security model of the Credential Management API is not as effective as desired
-(see e.g.
-[here](https://github.com/w3c/webappsec-credential-management/issues/58)) and
-the current fetch based infrastructure has reported usability issues (e.g. it's
-impossible to send JSON or apply a hash to the password before sending). While
-exposing passwords in JavaScript does not improve the security situation, it
-does not significantly worsen it and it also improves greatly the usability of
-the API.
-
-Deprecation of the custom fetch infrastructure entails that it is no longer
-needed to pass a PasswordCredential object to fetch’s RequestInit object and
-that PasswordCredential attributes idName, passwordName and additionalData will
-be deprecated and removed later this year.
-
-### Polyfill
-
-If possible, new code should simply access the new password property instead of
-relying on the deprecated fetch infrastructure.
-
-If this is not possible, existing code should be migrated in the following way.
-Given the following legacy code that passes a Credential object to fetch:
-
-c.idName = "id";
-
-c.passwordName = "password";
-
-c.additionalData = formData;
-
-fetch(url, { credentials: c, method: "POST" });
-
-The same can now be achieved using the following updated code, setting the
-necessary attributes in the formData body directly:
-
-formData.set("id", c.id);
-
-formData.set("password", c.password);
-
-fetch(url, { body: formData, method: "POST" });
-
-A polyfill that patches fetch to do this automatically is provided below and
-provides compatibility between old and new browsers:
-
-var origFetch = fetch;
-
-fetch = function(input, init) {
-
-if (init && init\["credentials"\] instanceof Credential) {
-
-var credential = init\["credentials"\];
-
-if ("password" in credential) {
-
-var body = credential.additionalData || {};
-
-body\[credential.idName\] = credential.id;
-
-body\[credential.passwordName\] = credential.password;
-
-init\["body"\] = body;
-
-init\["credentials"\] = "include";
-
-}
-
-}
-
-origFetch(input, init);
-
-} \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/01-movement.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/01-movement.png.sha1
deleted file mode 100644
index 1a22b0cda25..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/01-movement.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0c87e30951f1451fb191dd09c01d509658d6875a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/02-frameviewr.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/02-frameviewr.png.sha1
deleted file mode 100644
index b1e206ce2a2..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/02-frameviewr.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e06de873c5548dee060b4f97b722aafe1010f7ea \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/03-zoom.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/03-zoom.png.sha1
deleted file mode 100644
index 3aa074e8a1c..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/03-zoom.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-39f6e2940b7ad58f1db75702c99649186226d11e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/04-rects.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/04-rects.png.sha1
deleted file mode 100644
index c95261f346b..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/04-rects.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-43acd2e5e31d9bd658222f674463de8419f13496 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/05-tapdelay.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/05-tapdelay.png.sha1
deleted file mode 100644
index 053a9b03ee9..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/05-tapdelay.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e2a84f8fc0744b7c13e7294cf948687fba2eaeb4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/06-invalidation.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/06-invalidation.png.sha1
deleted file mode 100644
index 85197a14659..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/06-invalidation.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a3fe88dbffd93423697f7f186604023d836b6ae2 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/07-hypothetsis.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/07-hypothetsis.png.sha1
deleted file mode 100644
index 923cffc90f6..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/07-hypothetsis.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c6fea984218b8084f23308c1b65831a803e5d7ef \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/08-after.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/08-after.png.sha1
deleted file mode 100644
index 2816f35e94c..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/08-after.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b15898937daf9a0e60b724155593e37d09744888 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/09-layertree.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/09-layertree.png.sha1
deleted file mode 100644
index 56f7e084e19..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/09-layertree.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5584bf8644887715778b3a5aa1a9d66382f2bc6c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/10-dramatically.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/10-dramatically.png.sha1
deleted file mode 100644
index d6451d4269d..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/10-dramatically.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8e9b90b914d18b0372c924337811cb5fa9ef31ed \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/11-investigation.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/11-investigation.png.sha1
deleted file mode 100644
index e37ca07a8e3..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/11-investigation.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fe8ff7e7d05db46f973bcc458ef61d5d1d7fd532 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/12-asusual.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/12-asusual.png.sha1
deleted file mode 100644
index 0f407cb1d23..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/12-asusual.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-83a0976b78b4b739b32bbc28baa74a675d71f4c0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/13-recalc.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/13-recalc.png.sha1
deleted file mode 100644
index 0dc8b84c13c..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/13-recalc.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4f53e5390f0356fd494a2d93266bbebb38882d8a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/14-otherlayers.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/14-otherlayers.png.sha1
deleted file mode 100644
index 09d48cdd4f0..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/14-otherlayers.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6a338427ede6d0e98833d20b5fe03cc84f68c033 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/15-difflayertree.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/15-difflayertree.png.sha1
deleted file mode 100644
index 75bd9b9796d..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/15-difflayertree.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bf0848a26963a94243bb05e7d51d8b02f58e1de1 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/16-after.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/16-after.png.sha1
deleted file mode 100644
index e210c63c618..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/16-after.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7df6093640f429e8e82e4574242b4fba472bcdaf \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/17-loadrelatedjank.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/17-loadrelatedjank.png.sha1
deleted file mode 100644
index 091cef67959..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/17-loadrelatedjank.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a56cabccb0bcdb1bfaceae6c01d85a58519595d0 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/18-verylong.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/18-verylong.png.sha1
deleted file mode 100644
index f5ae46b9120..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/18-verylong.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cd3e6b827b56f7b1a3042135c6ed3f0b9cfa92d7 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/19-populated.png.sha1 b/chromium/docs/website/site/developers/rendering-performance-case-study-1/19-populated.png.sha1
deleted file mode 100644
index 92cf08270de..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/19-populated.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-44a8de36ae84d0cafbfa57feea639ac1d6a647bc \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rendering-performance-case-study-1/index.md b/chromium/docs/website/site/developers/rendering-performance-case-study-1/index.md
deleted file mode 100644
index 55fb7f08f25..00000000000
--- a/chromium/docs/website/site/developers/rendering-performance-case-study-1/index.md
+++ /dev/null
@@ -1,303 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: rendering-performance-case-study-1
-title: 'Jank Case Study 1: theverge.com'
----
-
-## wiltzius@
-
-### Background: Reading the Tracing Tea Leaves
-
-Most websites on mobile devices are painfully janky. The problems are obvious
-and everywhere, but it can be challenging to isolate janky behavior and
-understand its cause. This sort of performance investigation is not a very
-widely known practice, and often involves advanced tools such as Chrome’s
-[tracing](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool).
-This article seeks to provide an example of jank identification and triage.
-
-There’s very little explaining the “why” of anything here, just examples of jank
-(including tools used to identify it and any conclusions). Therefore it’s highly
-recommended to start by reading the [how to bust jank with frame
-viewer](/developers/how-tos/trace-event-profiling-tool/using-frameviewer),
-[anatomy of
-jank](/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank) and [the
-rendering critical path](/developers/the-rendering-critical-path) articles
-before reading on; otherwise this is unlikely to prove helpful.
-
-The Verge [recently
-launched](http://www.theverge.com/2014/9/2/6096609/welcome-to-verge-2-0) a
-responsive mobile website. It’s a nice success story for the mobile web.
-Unfortunately in Chrome for Android the UX is a little lacking, so let’s dig
-into it as an example.
-
-### Investigation
-
-Let’s start with [www.theverge.com](http://www.theverge.com), the home page.
-
-Symptom: Frequent checkerboarding on scroll
-
-Scroll halfway down the page. Then, with the finger held down, scroll up and
-down in a small area. These small movements back and forth should be simple
-composited scrolls that leaves the page content all in texture memory, since the
-area being scrolled is small. But unfortunately we can see visible
-checkerboarding during these movements (the patches of the screen being slowly
-filled in).
-
-There are a couple possible explanations for this: either (a) something’s being
-invalidated during the scroll and requiring re-rasterization, or (b) Chrome is
-out of VRAM (or thinks it’s out of VRAM) and is discarding the tiles in texture
-memory as soon as they’re off-screen.
-
-To dig into why this is happening, we can start with the Dev Tools timeline.
-Here’s a timeline recording of that quick movement back and forth:
-
-[<img alt="Movement"
-src="/developers/rendering-performance-case-study-1/01-movement.png">](/developers/rendering-performance-case-study-1/01-movement.png)
-
-You can see the (very, very long) painting operations as content is
-re-rasterized, but we don’t have any insight into why this content needs to be
-painted. There’s a lot of JavaScript, but aren’t any style recalculations or
-layouts in the vicinity of the painting operations. We don’t have any leads on
-what’s causing the paint.
-
-Where the Dev Tools timeline fails to tell us anything, we can turn to tracing’s
-Frame Viewer. Here’s a frame viewer trace of the same movement:
-
-[<img alt="Frame Viewer"
-src="/developers/rendering-performance-case-study-1/02-frameviewr.png">](/developers/rendering-performance-case-study-1/02-frameviewr.png)
-
-This is zoomed in on a part of the timeline where the scroll is happening
-(higher up in the tracing timeline you can see
-“InputLatency:GestureScrollUpdate” events). Note, significantly, that there
-appear to be no invalidations! This is easier to see if you disable “contents”
-in the layer tree viewer pane and zoom way out:
-
-[<img alt="Frame Viewer"
-src="/developers/rendering-performance-case-study-1/03-zoom.png">](/developers/rendering-performance-case-study-1/03-zoom.png)
-
-There aren’t any invalidation rects. The lack of invalidation rects indicates
-that Chrome itself is throwing out content tiles for some reason. This will
-happen on scroll, but it shouldn’t happen so soon after the tiles are off-screen
-on small scroll in a localized area.
-
-To get visibility into what the tile manager is doing, we can turn on coverage
-rects in the frame viewer. In the top dropdowns enable “coverage rects” and for
-the tile heatmap select “Is using GPU memory”
-
-[<img alt="Rects"
-src="/developers/rendering-performance-case-study-1/04-rects.png">](/developers/rendering-performance-case-study-1/04-rects.png)
-
-Now we can see what content tiles are actually resident in GPU memory on any
-given frame. Stepping through the frames of the scroll, you can see that there’s
-a horizontal layer that goes from having it’s content resident in memory (all
-content tiles are dark green) to losing it (all a content tiles become white
-with red outlines).
-
-#### YouTube Video
-
-This may simply be the reality of memory constraints, but it also might be a
-legitimate bug in tile prioritization. Particularly, it’s suspicious that there
-are tiles much further away from the viewport that are still resident in memory
--- this indicates suboptimal resource management.
-
-Conclusion: file a Chrome bug with these findings,
-[crbug.com/412436](https://code.google.com/p/chromium/issues/detail?id=412436)
-
-Symptom: Tap delay on menu button
-
-[<img alt="Tap Delay"
-src="/developers/rendering-performance-case-study-1/05-tapdelay.png">](/developers/rendering-performance-case-study-1/05-tapdelay.png)
-
-The cause of the jank is immediately apparent: note the huge paint block after
-the input events are processed.
-
-(Also note the mouse input events, even on a phone, because mouse events are by
-default emulated; the page could skip this work by not listening for them if
-there isn’t a mouse.)
-
-Turning on “compositor layer borders” under the Dev Tools “rendering” menu might
-make it clear why this invalidation happens.
-
-[<img alt="Invalidation"
-src="/developers/rendering-performance-case-study-1/06-invalidation.png">](/developers/rendering-performance-case-study-1/06-invalidation.png)
-
-Unfortunately it’s hard to see what’s happening, but because there are layer
-borders around the menu we can guess that the page is trying to smartly use 3D
-CSS to position the menu. A common problem here is that the final layers only
-get created by JavaScript in response to the menu tap, causing a big
-invalidation when new layers are created. The new layer can’t move for the
-animation until it’s done rasterizing, which takes ages.
-
-We can confirm this hypothesis with Frame Viewer. Here’s the layer tree just
-before the mouse tap:
-
-[<img alt="Hypothetsis"
-src="/developers/rendering-performance-case-study-1/07-hypothetsis.png">](/developers/rendering-performance-case-study-1/07-hypothetsis.png)
-
-And here’s just after:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/08-after.png">](/developers/rendering-performance-case-study-1/08-after.png)
-
-It’s very subtle, but you can see that the layer tree is actually different --
-layers 73 and 74 have been replaced by layer 79, at the bottom of the list.
-
-Enabling the invalidation rects, we can see the large invalidation corresponding
-to that long paint from we saw in Dev Tools also appearing in the frame where
-the layer tree changes:
-
-[<img alt="Layer Tree"
-src="/developers/rendering-performance-case-study-1/09-layertree.png">](/developers/rendering-performance-case-study-1/09-layertree.png)
-
-Conclusions:
-
-There are essentially two problems here. One is that the invalidation is
-happening at all, which is under the control of the site (avoiding invalidation
-is tricky but possible, in this case, by having the right layers already set up
-before the animation begins).
-
-The other problem is that the rasterization takes such a comically long time.
-This is also somewhat under page control, since they could simplify the CSS, but
-Chrome should really render faster. This isn’t even worth a Chrome bug, though,
-because we know the answer here is to use Ganesh for faster rasterization. This
-page is still blocklisted for now, but if we force it on in about:flags we can
-see the paint time drop dramatically:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/10-dramatically.png">](/developers/rendering-performance-case-study-1/10-dramatically.png)
-
-Symptom: Grabbing and sliding menu frequently becomes unresponsive
-
-When the menu is out, grabbing the side of it allows the user to slide it in and
-out. Frustratingly the menu frequently becomes stuck, though, and unresponsive.
-
-First investigation is just a Dev Tools timeline recording of the interaction:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/11-investigation.png">](/developers/rendering-performance-case-study-1/11-investigation.png)
-
-The timeline recording shows that the system is actually running fine (i.e. is
-responsive and not bottlenecked). Touch moves are getting handled consistently
-by the browser.
-
-Conclusion: This is actually an application bug where touches outside of the
-drawer area mid-touch-stream don’t update the drawer position.
-
-Symptom: Delay before releasing menu to let it animate back in
-
-After sliding the menu around, releasing it causes a hitch before the drawer
-animates back to a hidden state.
-
-As usual, start with the Dev Tools timeline:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/12-asusual.png">](/developers/rendering-performance-case-study-1/12-asusual.png)
-
-Note that whole-document layout right after the touchend event. It isn’t
-possible to say anything conclusive from just the timeline, but it’s a good
-guess that this is the root cause of the problem since the layout will probably
-invalidate the whole document.
-
-One step before that layout is the recalc style causing it:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/13-recalc.png">](/developers/rendering-performance-case-study-1/13-recalc.png)
-
-A class being removed (via jQuery). The JS is minified so we can’t tell much
-more meaningfully from the stack trace or the JS itself, but if we had
-unminified sources it would become obvious which line of JS was changing CSS and
-causing the invalidation.
-
-Note that we can tell that the whole document was invalidated, rather than just
-part of it, because the subsequent paint events cover every part of the screen.
-Expanding the paint, we see events for tiles on the main document as well as all
-other layers:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/14-otherlayers.png">](/developers/rendering-performance-case-study-1/14-otherlayers.png)
-
-If we look at this with frame viewer, we can see different layer trees before:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/15-difflayertree.png">](/developers/rendering-performance-case-study-1/15-difflayertree.png)
-
-And after:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/16-after.png">](/developers/rendering-performance-case-study-1/16-after.png)
-
-Note the additional layers 82 and 83 at the bottom, plus a bunch of the layers
-in the middle were reparented.
-
-Conclusion: This is a double-sided issue just like the jank on menu tap: on the
-one hand it’s an application bug, in the sense that it could technically be
-worked around, but on the other hand Chrome could be made smarter not to
-invalidate these layers (especially those that are just reparented). Enabling
-Ganesh on this page will also make those invalidations much less painful.
-Speculatively file [crbug.com/412551](http://crbug.com/412551) for the
-reparenting-of-existing-layers question.
-
-Symptom: Slow, unresponsive comment display on articles
-
-Moving past the home page, let’s look at one of the articles. Randomly picking
-this one:
-
-<http://www.theverge.com/2014/9/3/6101831/a-closer-look-at-sonys-sleek-new-xperia-z3-and-z3-tablet-compact#comments>
-
-That link is to an anchor at the comments section. After the page is finished
-fully loading, tap “read them” to see comments.
-
-Try scrolling or doing anything right after tapping “read them.” Note the page
-is completely non-responsive during the comment load.
-
-Using the Dev Tools timeline trace, you can see that this is all load-related
-jank:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/17-loadrelatedjank.png">](/developers/rendering-performance-case-study-1/17-loadrelatedjank.png)
-
-The very long JavaScript block is dominated by HTML parsing, if we expand it:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/18-verylong.png">](/developers/rendering-performance-case-study-1/18-verylong.png)
-
-The app could theoretically improve this by changing the way it populated the
-DOM. Looking at the call stack for these it’s largely performed by their
-framework’s templating (backbone.js), though, so it probably won’t be easy to
-change:
-
-[<img alt="image"
-src="/developers/rendering-performance-case-study-1/19-populated.png">](/developers/rendering-performance-case-study-1/19-populated.png)
-
-Unfortunately because all of this loading is done by script there’s also no
-obvious way for Blink to yield during these many calls, although this might make
-for an interesting discussion; the ambitious might consider filing a bug here.
-
-More obviously problematic is the huge style recalculation block that comes
-afterward, which weighs in around half a second. This is worth a bug so at least
-the pattern is understood: [crbug.com/412558](http://crbug.com/412558).
-
-## Conclusion
-
-When investigating a janky site there are almost a handful of ways Chrome could
-be behaving better and a handful of things the site could be doing better.
-Staring hard enough at nearly any page usually yields a plethora of both; jank
-is all over the place on the web (particularly the mobile web).
-
-Filing good bugs usually means making sure to very narrowly and reproducibly
-specify the interaction you want to improve, and then attaching traces of that
-interaction. Getting the bug looked at usually means getting in front of the
-right people’s eyes and labelling it correctly, but there aren’t any good rules
-for that.
-
-Providing useful advice to website developers usually means trying to
-specifically isolate the bit of JavaScript that’s behaving suboptimally (e.g.
-causing invalidations or expensive style recalculation) and then pointing the
-developer at it. Unfortunately it’s often hard to work around, but the generic
-advice for web devs is to structure their code in a way that just does less work
--- if you’re careful about setting up the structure of your page and then
-modifying as little as possible, updates can often be made surprisingly cheap.
-
-That’s all for this example. Happy hunting! \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_1.pdf.sha1 b/chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_1.pdf.sha1
deleted file mode 100644
index cc5f007f868..00000000000
--- a/chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_1.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d38d29e152f318660e9569d6f0e303f9875f83bd \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_2.pdf.sha1 b/chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_2.pdf.sha1
deleted file mode 100644
index bdc7901b078..00000000000
--- a/chromium/docs/website/site/developers/rtl-in-webkit/WebKit_For_Web_Developers_2.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-06f5549f7d4961653683b90cffc0fb1f0cffbceb \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/rtl-in-webkit/index.md b/chromium/docs/website/site/developers/rtl-in-webkit/index.md
deleted file mode 100644
index e433cef551a..00000000000
--- a/chromium/docs/website/site/developers/rtl-in-webkit/index.md
+++ /dev/null
@@ -1,241 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: rtl-in-webkit
-title: BiDi support in WebKit
----
-
-## [TOC]
-
-## ## RTL Task Force
-
-Objective: Improve RTL handling in webkit editing and layout/rendering.
-
-Mailing list: rtl-editing@google.com
-
-[Issue
-tracker](https://spreadsheets.google.com/a/google.com/ccc?key=0AjIpE6jmfbPCdHJlOW9iUUp5WmpuQ1VIUTBFR2VncUE&authkey=CKCj8d4O&hl=en#gid=0)
-
-Members: Alex Komoroske (PM), Xiaomei Ji, Ryosuke Niwa, Jeremy Moskovich, Levi
-Weintraub, Uri Bernstein, Aharon Lanin, Roland Steiner, Jason Elbaum, Ahmed
-Hassan, Mohamed Elhawary, Michal Levin (UX).
-
-## Standard Proposal: Additional Requirements for Bidi in HTML
-
-* [Proposal](http://www.w3.org/TR/html-bidi/)
-
-* [Implementation
- status](https://docs.google.com/a/google.com/document/d/17nb3wlYkIG9MNtL1mlXVPOVe4QwyApiHRYim3nTi5CE/edit?hl=en#)
-
-* [WebKit rollup bug](https://bugs.webkit.org/show_bug.cgi?id=50910)
-
-## Test Suite
-
-RTL in Rich Text Edit in [browserscope](http://www.browserscope.org/).
-
-HTML+CSS internationalization test suite:[ text
-direction](http://www.w3.org/International/tests/tests-html-css/list-text-direction).
-
-## The Challenges
-
-### Lack of one-to-one correspondence between visual and logical character positions.
-
-For right-to-left text, logical order (the order the text is stored) and visual
-order (the order the text is displayed) are not the same. They are not just the
-reversed order of each other when bi-directional text is involved. They also
-don't have a simple relationship (without going through reordering resolved
-levels in the [ Unicode Bidi Algorithm](http://unicode.org/reports/tr9/)). For
-example, the last logical run of text could be a in the middle visually (not
-visually first neither visually last).
-
-&lt;div style="direction: ltr;"&gt;
-
-Just
-
-&lt;span&gt;testing רק&lt;/span&gt;
-
-בודק
-
-&lt;/div&gt;
-
-\[Bidi editing in Mozilla\] The main issue involved in bidirectional editing is
-that there is no one-to-one relationship between a logical position in the text,
-and a visual position on screen. A single logical position can map to two
-different visual positions, and a single visual position might map to two
-different logical positions.
-
-*In the following examples, I will use uppercase Latin letters to represent RTL
-(e.g. Hebrew) letters, whereas lowercase Latin letters will represent LTR (e.g.
-Latin) letters. This is the convention, as it makes it easier for people who can
-not read RTL languages to understand the examples.*
-
-Consider, for example, the text with the following logical representation:
-**latinHEBREWmore** (this example deliberately omits spaces, in order to avoid
-the issues associated with resolving their directionality). This text is
-displayed on the screen as **latinWERBEHmore**.
-
-Consider the logical position between **n** and **H**. This is immediately after
-**n**, so it maps to the visual position between **n** and **W**. But it is also
-immediately before **H**, so it also maps to the visual position between **H**
-and **m**.
-
-Now, consider the visual position between **n** and **W**. It is immediately
-after **n**, so it can be mapped to the logical position between **n** and
-**H**. But it also immediately after **W**, so it can also be mapped to the
-logical position between **W** and **m**.
-
-Bidirectional text is stored logically, and (obviously) displayed visually. The
-caret, being a graphical element, corresponds to a visual location. The user can
-manipulate text and move the caret through a combination of **logical
-functions** (such as typing or deleting) and **visual functions** (such as using
-the arrow keys). Therefore, the problem of mapping between logical and visual
-positions in a way that meets the user's expectations is the central problem of
-bidirectional editing.\[Bidi editing in Mozilla\]
-
-IBM has a non-trivial [algorithm
-](http://www-01.ibm.com/software/globalization/topics/bidiui/conversion.jsp)for
-rendering the caret in correct position in bi-directional text.
-
-### Lack of clear spec on BiDi editing behavior
-
-As mentioned above, mapping between logical and visual positions is the central
-problem of bidirectional editing. But, there is no standard on how such mapping
-should be done. Different browsers behave differently. For example, a logical
-string "123ABC" (where 123 represents Arabic number and ABC represents Arabic
-letter) is rendered as "CBA123" visually when the paragraph directionality is
-left-to-right. The visual positions in Firefox, IE, and Chrome/WebKit are as
-following:
-
-Internet Explorer: (0)(1)(7)C(6)B(5)A(4)1(2)2(3)3
-Firefox: (0)(7)C(6)B(5)A(1)(4)1(2)2(3)3
-Chrome/WebKit: (0)C(5)B(4)A1(1)2(2)3(3)(6).
-Which one meets user's expectation is under
-[discussion](https://bugs.webkit.org/show_bug.cgi?id=53696) right now.
-Another case of lacking clear spec is that there is no consensus on whether a UI
-function should behave logically or visually. Different browsers might behave
-differently. For example, IE handles cursor movement (arrow keys) as logical
-function, while Firefox (by default) and WebKit \[after a long debate on the
-topic\] handle it as visual function. For example, there are always discussions
-on whether selection should be treated as visual or logical. Currently, IE,
-Firefox (by default) and WebKit all treat selection as a logical operation. But
-Firefox also provides options to toggle between visual and logical behavior. For
-example, whether HOME & END should put the caret at the visual extreme or they
-should be considered as logical operation. Currently, IE and WebKit handle HOME
-& END as putting the caret at the visual extreme, while Firefox (by default)
-handles it as logical operation.
-
-### Lack of clear spec on behavior of HTML in the face of certain BiDi issues.
-
-For some HTML elements, there is no standard defined on how they should be
-rendered in RTL or in a bi-directional context. Different browsers behave
-differently. Since RTL users are mostly adjusted to the behavior of IE, they
-would expect the same behavior as that of IE, even it might not be the desired.
-For example, there is no standard defined on how to render &lt;input&gt;
-element, whether it should auto-detects the input text's directionality and uses
-that for rendering, or use the &lt;input&gt; element's directionality for
-rendering the input text. There are some discussions (comment
-[#2](https://bugs.webkit.org/show_bug.cgi?id=27889#c10),
-[#7](https://bugs.webkit.org/show_bug.cgi?id=27889#c10),
-[#8](https://bugs.webkit.org/show_bug.cgi?id=27889#c10),
-[#10](https://bugs.webkit.org/show_bug.cgi?id=27889#c10) ) in related WebKit
-[issue](https://bugs.webkit.org/show_bug.cgi?id=27889). For example, there is no
-standard defined on how to render &lt;selection&gt;/&lt;option&gt; elements when
-either or both the element have 'dir' attributes defined. There is discussion
-(comment [#2](https://bugs.webkit.org/show_bug.cgi?id=29612#c5),
-[#5](https://bugs.webkit.org/show_bug.cgi?id=29612#c5)) in related Webkit
-[issue](https://bugs.webkit.org/show_bug.cgi?id=29612). The same goes for for
-script dialog text, &lt;title&gt; attribute etc. Aharon Lanin proposed
-additional requirement for BiDi in HTML for HTML5.
-
-The main issue involved in RTL rendering is not only whether to render
-bi-directional text correctly for any HTML structure (from example, inline
-element inside block element) when 'dir' attribute is set, when unicode bidi
-control characters are used, when unicode-bidi property is set. But also to
-rendering the whole RTL page correctly. For example, previously, the #1 issue
-reported in Middle East North Africa by Chrome users is the [truncation of the
-content of RTL page](https://bugs.webkit.org/show_bug.cgi?id=23556)s so only the
-right-most part of the content that fit in browser window was displayed. Fixing
-it requires a good understanding of the rendering layer (with 67k line of code)
-and its relation with the page and platform layers. Beyond that, the fix needed
-to work on different platforms (for example, Apple's Mac port has it's own
-distinct code path handling scroll view) as well.
-
-## References
-
-"dir" attribute:
-
-<http://www.w3.org/TR/html401/struct/dirlang.html#h-8.2>
-
-"direction" and "unicode-bidi" properties:
-
-<http://www.w3.org/TR/CSS21/visuren.html#direction>
-
-Handling right-to-left scripts:
-
-<http://www.w3.org/TR/i18n-html-tech-bidi/>
-
-Internationalization techniques: handling text direction:
-
-<http://www.w3.org/International/techniques/authoring-html#direction>
-
-What you need to know about the bidi algorithm and inline markup:
-
-<http://www.w3.org/International/articles/inline-bidi-markup/>
-
-Unicode Bidi Algorithm:
-
-<http://unicode.org/reports/tr9/>
-
-BiDi HowTo:
-
-<http://doctype.googlecode.com/svn/trunk/bidihowto/index.html>
-
-Public talk by Aharon on BiDi on the web:
-
-<https://video.google.com/a/?pli=1#/Play/contentId=f041561143265ad5>
-
-Bidi editing in Mozilla:
-
-<https://wiki.mozilla.org/User:Uri/Bidi_editing>
-
-Guidelines of a logical user interface for editing bidirectional text by IBM
-
-<http://www-01.ibm.com/software/globalization/topics/bidiui/index.jsp>
-
-## RTL Release Note
-
-Milestone 9 (r72805):
-
-1. Solved the #1 issue reported in Middle East and North Africa. Now,
- RTL page with content overflow could be viewed completely with
- horizontal scrollbar instead of page being truncated (r72852).
-2. Unicode bidi control characters are preserved in text input area.
- So, Hebrew, Arabic, and Persian speakers can type or cut/copy/paste
- the text having unicode bidi control characters correctly, and they
- can start enjoy twitters (r71566).
-
-Milestone 10 (r76408):
-
-1. TAB inside &lt;pre&gt; overflow correctly in RTL context (r72847).
-2. up arrow works correctly with RTL text with word wrapping (r72861).
-3. clicking to position cursor at the end of a line of Arabic text
- position the cursor correctly (r73548).
-4. Default horizontal position of position:fixed block is right in RTL
- context.
-5. move to line boundary visually works correctly in RTL context
- (r75018).
-6. Caret goes to the right direction when pressing an arrow key after
- selection is made (r76312).
-
-Milestone 11 (r80534)
-
-1. Support dir="auto" (r79024).
-2. ISO-8859-8 Hebrew text displayed correctly (r78491).
-3. Text runs with different directionality inside an embedding inline
- box displayed correctly in RTL context (r77267).
-4. Background image positioned correctly in RTL context (r78396).
-5. &lt;option&gt; supports the dir attribute and be displayed
- accordingly both in the drop-down and after being chosen (r77654).
-6. extend selection by line boundary works correctly in RTL context
- (r78799). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/severity-guidelines/index.md b/chromium/docs/website/site/developers/severity-guidelines/index.md
deleted file mode 100644
index 0d6c84b983a..00000000000
--- a/chromium/docs/website/site/developers/severity-guidelines/index.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: severity-guidelines
-title: Severity Guidelines for Security Issues
----
-
-### **Do not edit — for historical reference only**
-
-The canonical version of this page is now in the [Chromium source tree](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/severity-guidelines.md).
-
-### ---
-
-### Vendors shipping products based on Chromium might wish to rate the severity of security issues in the products they release. This document contains guidelines for how to rate these issues. Check out our [security release management page](/Home/chromium-security/security-release-management) for guidance on how to release fixes based on severity.
-
-### Any significant mitigating factors, such as unusual or additional user interaction, or running Chrome with a specific command line flag or non-default feature enabled, may reduce an issue’s severity by one or more levels. Also note that most crashes do not indicate vulnerabilities. Chromium is designed to crash in a controlled manner (e.g., with a __debugBreak) when memory is exhausted or in other exceptional circumstances.
-
-### Critical severity
-
-Critical severity issues allow an attacker run arbitrary code on the underlying
-platform with the user's privileges in the normal course of browsing.
-
-They are normally assigned priority Pri-0 and assigned to the current stable
-milestone (or earliest milestone affected). For critical severity bugs,
-[SheriffBot](/issue-tracking/autotriage) will automatically assign the
-milestone.
-
-For critical vulnerabilities, we aim to deploy the patch to all Chrome users in
-under 30 days. Critical vulnerability details may be made public in 60 days, in
-accordance with Google's general [vulnerability disclosure
-recommendations](https://security.googleblog.com/2010/07/rebooting-responsible-disclosure-focus.html),
-or [faster (7 days) if there is evidence of active
-exploitation](https://security.googleblog.com/2013/05/disclosure-timeline-for-vulnerabilities.html).
-
-Example bugs:
-
- Memory corruption in the browser process controllable by a malicious web
- site
- ([564501](https://bugs.chromium.org/p/chromium/issues/detail?id=564501)).
-
- Exploit chains made up of multiple bugs that can lead to code execution
- outside of the sandbox
- ([416449](https://bugs.chromium.org/p/chromium/issues/detail?id=416449)).
- Note that the individual bugs that make up the chain will have lower
- severity ratings.
-
-### High severity
-
-High severity vulnerabilities allow an attacker to execute code in the context
-of, or otherwise impersonate other origins. Bugs which would normally be
-critical severity with unusual mitigating factors may be rated as high severity.
-For example, renderer sandbox escapes fall into this category as their impact is
-that of a critical severity bug, but they require the precondition of a
-compromised renderer.
-
-They are normally assigned priority Pri-1 and assigned to the current stable
-milestone (or earliest milestone affected). For high severity bugs,
-[SheriffBot](/issue-tracking/autotriage) will automatically assign the
-milestone.
-
-For high severity vulnerabilities, we aim to deploy the patch to all Chrome
-users in under 60 days.
-
-Example bugs:
-
- A bug that allows full circumvention of the same origin policy. Universal
- XSS bugs fall into this category, as they allow script execution in the
- context of an arbitrary origin
- ([534923](https://bugs.chromium.org/p/chromium/issues/detail?id=534923)).
-
- A bug that allows arbitrary code execution within the confines of the
- sandbox, such as renderer or GPU process memory corruption
- ([570427](https://bugs.chromium.org/p/chromium/issues/detail?id=570427),
- [468936](https://bugs.chromium.org/p/chromium/issues/detail?id=468936)).
-
- Complete control over the apparent origin in the omnibox
- ([76666](https://bugs.chromium.org/p/chromium/issues/detail?id=76666)).
-
- Memory corruption in the browser process that can only be triggered from a
- compromised renderer, leading to a sandbox escape
- ([469152](https://bugs.chromium.org/p/chromium/issues/detail?id=469152)).
-
- Kernel memory corruption that could be used as a sandbox escape from a
- compromised renderer
- ([377392](https://bugs.chromium.org/p/chromium/issues/detail?id=377392)).
-
- Memory corruption in the browser process that requires specific user
- interaction, such as granting a permission
- ([455735](https://bugs.chromium.org/p/chromium/issues/detail?id=455735)).
-
-### Medium severity
-
-Medium severity bugs allow attackers to read or modify limited amounts of
-information, or which are not harmful on their own but potentially harmful when
-combined with other bugs. This includes information leaks that could be useful
-in potential memory corruption exploits, or exposure of sensitive user
-information that an attacker can exfiltrate. Bugs that would normally rated at a
-higher severity level with unusual mitigating factors may be rated as medium
-severity.
-
-They are normally assigned priority Pri-1 and assigned to the current stable
-milestone (or earliest milestone affected). If the fix seems too complicated to
-merge to the current stable milestone, assign it to the next stable milestone.
-
-Example bugs:
-
- An out-of-bounds read in a renderer process
- ([281480](https://bugs.chromium.org/p/chromium/issues/detail?id=281480)).
-
- An uninitialized memory read in the browser process where the values are
- passed to a compromised renderer via IPC
- ([469151](https://bugs.chromium.org/p/chromium/issues/detail?id=469151)).
-
- Memory corruption that requires a specific extension to be installed
- ([313743](https://bugs.chromium.org/p/chromium/issues/detail?id=313743)).
-
- An HSTS bypass
- ([461481](https://bugs.chromium.org/p/chromium/issues/detail?id=461481)).
-
- A bypass of the same origin policy for pages that meet several preconditions
- ([419383](https://bugs.chromium.org/p/chromium/issues/detail?id=419383)).
-
- A bug that allows web content to tamper with trusted browser UI
- ([550047](https://bugs.chromium.org/p/chromium/issues/detail?id=550047)).
-
- A bug that reduces the effectiveness of the sandbox
- ([338538](https://bugs.chromium.org/p/chromium/issues/detail?id=338538)).
-
- A bug that allows arbitrary pages to bypass security interstitials
- ([540949](https://bugs.chromium.org/p/chromium/issues/detail?id=540949)).
-
- A bug that allows an a
-
- ttacker to reliably read or infer browsing history
- ([381808](https://bugs.chromium.org/p/chromium/issues/detail?id=381808)).
-
- An address bar spoof where only certain URLs can be displayed, or with other
- mitigating factors
- ([265221](https://bugs.chromium.org/p/chromium/issues/detail?id=265221)).
-
- Memory corruption in a renderer process that requires specific user
- interaction, such as dragging an object
- ([303772](https://bugs.chromium.org/p/chromium/issues/detail?id=303772)).
-
-### Low severity
-
-Low severity vulnerabilities are usually bugs that would normally be a higher
-severity, but which have extreme mitigating factors or highly limited scope.
-
-They are normally assigned priority Pri-2. Milestones can be assigned to low
-severity bugs on a case-by-case basis, but they are not normally merged to
-stable or beta branches.
-
-Example bugs:
-
- Bypass requirement for a user gesture
- ([256057](https://bugs.chromium.org/p/chromium/issues/detail?id=256057)).
-
- Partial CSP bypass
- ([534570](https://bugs.chromium.org/p/chromium/issues/detail?id=534570)).
-
- A limited extension permission bypass
- ([169632](https://bugs.chromium.org/p/chromium/issues/detail?id=169632)).
-
- An uncontrolled single-byte out-of-bounds read
- ([128163](https://bugs.chromium.org/p/chromium/issues/detail?id=128163)).
-
-The [security FAQ](/Home/chromium-security/security-faq) covers many of the
-cases that we do not consider to be security bugs, such as [denial of
-service](/Home/chromium-security/security-faq). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/shutdown/index.md b/chromium/docs/website/site/developers/shutdown/index.md
deleted file mode 100644
index 8ddb923e758..00000000000
--- a/chromium/docs/website/site/developers/shutdown/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: shutdown
-title: Shutdown
----
-
-[TOC]
-
-## Profile Destruction
-
-See [shutdown.md](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/shutdown.md#Step-0_Profile-destruction)
-
-## Browser Process Shutdown
-
-`BrowserProcess` is also refcounted, much like `Profile`. `ScopedKeepAlive`
-inhibits teardown, and the refcount is managed by `KeepAliveRegistry`.
-
-### Stopping the UI Message Loop
-
-* A UI event is received that leads to `~ScopedKeepAlive` (closing the window,
- closing the last tab, keyboard shortcut for app termination, etc).
-* If the refcount in `KeepAliveRegistry` drops to zero, then we begin
- application termination.
- * Note that macOS keeps the application alive even without browser
- windows by adding an extra `ScopedKeepAlive` in `AppController`.
-* If the refcount reaches zero, post a task to the message loop to exit
-* Notification `content::NOTIFICATION_APP_TERMINATING` is broadcast
-* The UI message loop eventually stops running, we exit out of
- `RunUIMessageLoop()`. Note that all other main browser threads are
- still running their message loops. So even though the main (UI)
- thread outlives all other joined browser threads, its `MessageLoop`
- terminates first.
-
-### BrowserProcessImpl deletion
-
-* After exiting the UI message loop, the shutdown sequence is started
- in BrowserMainParts::RunMainMessageLoopParts, which calls
- PostMainMessageLoopRun.
-* In ChromeBrowserMainParts::PostMainMessageLoopRun:
- * The ProcessSingleton is released.
- * MetricsService (which records UMA metrics) is stopped, which:
- * Creates a log (for future upload) of all remaining metrics.
- * Records a successful shutdown.
- * The persistent metrics file, on disk, remains in case other
- metrics are updated after this point. Any such values will
- be sent during the next run sometime after Browser startup.
- * We persist Local State to disk.
- * We delete g_browser_process, which:
- * Deletes the ProfileManager (which deletes all the profiles
- and persists their state, such as Preferences)
- * Joins the watchdog, IO, CACHE, PROCESS_LAUNCHER threads, in
- that order
- * Shuts down the DownloadFileManager and SaveFileManager
- * Joins the FILE thread
- * Deletes the ResourceDispatcherHost which joins the WEBKIT
- thread
- * Joins the DB thread
-
-### ContentMain() exit
-
-* The AtExitManager goes out of scope and destroys all
- Singletons/LazyInstances
-
-## Renderer Process Shutdown
-
-### Browser process triggers shutdown via:
-
-* Closing a tab (explain the sequence of events from UI thread objects
- to the IO thread termination of a renderer process)
diff --git a/chromium/docs/website/site/developers/slack/blob_cheer.png.sha1 b/chromium/docs/website/site/developers/slack/blob_cheer.png.sha1
deleted file mode 100644
index b960f6ccbea..00000000000
--- a/chromium/docs/website/site/developers/slack/blob_cheer.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f1c5bc87bbdcfdbbe8b01cc2e6c259d7258a0bac \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/slack/blob_peek.png.sha1 b/chromium/docs/website/site/developers/slack/blob_peek.png.sha1
deleted file mode 100644
index 9d4ffe69cc5..00000000000
--- a/chromium/docs/website/site/developers/slack/blob_peek.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6c845a8d5ed8cc145ec64fc9ae07df7f2a5f255c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/slack/blob_praise.png.sha1 b/chromium/docs/website/site/developers/slack/blob_praise.png.sha1
deleted file mode 100644
index 5996caf592c..00000000000
--- a/chromium/docs/website/site/developers/slack/blob_praise.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-af50a6ea0f1419e2d045051d0e9934f4314f9414 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/slack/blob_stop.png.sha1 b/chromium/docs/website/site/developers/slack/blob_stop.png.sha1
deleted file mode 100644
index a355e851c1a..00000000000
--- a/chromium/docs/website/site/developers/slack/blob_stop.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8b309a70d9b7ff787240c4b6326ed641d576cfea \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/slack/blob_think.png.sha1 b/chromium/docs/website/site/developers/slack/blob_think.png.sha1
deleted file mode 100644
index 7ca3203b525..00000000000
--- a/chromium/docs/website/site/developers/slack/blob_think.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2b1561e805aa4ca9e88dd16fbf9facbf28c534ef \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/slack/index.md b/chromium/docs/website/site/developers/slack/index.md
deleted file mode 100644
index 34e01bf5337..00000000000
--- a/chromium/docs/website/site/developers/slack/index.md
+++ /dev/null
@@ -1,116 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: slack
-title: Slack
----
-
-## ![image](/developers/slack/blob_peek.png) What Is This?
-
-[Chromium.slack.com](https://chromium.slack.com) is a virtual meeting place
-where Chromium developers can foster community and coordinate work. With so much
-geographic and organizational diversity in our team, making it easy to have
-“hallway conversations” in a public online forum like chromium.slack.com helps
-keep everyone in the loop.
-
-This workspace is meant for people developing Chromium; it is not a user support
-forum.
-
-## ![image](/developers/slack/blob_stop.png) No Confidential Discussions Please
-
-This is considered a PUBLIC system -- even private messages and groups.
-
-No confidential information (Google or other) should be posted. Ever.
-
-## Official information
-
-Official information needs to go on public mailing lists and in public bugs.
-
-Don't believe you've informed everyone because you've said something in a Slack
-channel.
-
-## ![image](/developers/slack/blob_cheer.png) Yay! How do I join?
-
-* First … sign up!
-
- * Anybody in the
- [AUTHORS](https://chromium.googlesource.com/chromium/src/+/HEAD/AUTHORS)
- file is welcome to join the slack.
-
- * Folks on allow-listed email domains from AUTHORS can directly use [the
- signup page](https://chromium.slack.com/signup), e.g. @microsoft.com or @mozilla.com.
-
- * Others listed in AUTHORS should email
- [chromium-slack-invites@chromium.org](mailto:chromium-slack-invites@chromium.org)
- for an invite link.
-
- * Furthermore, if you are a part of a project that is significantly related
- to Chromium and that is significantly owned or maintained by Chromium
- AUTHORS, you can also have access without being in the Chromium AUTHORS file
- yourself. Send an email to request access. The list of accepted projects are
- currently: Angle, Skia, V8, WebRTC.
-
-* Then … start interacting!
-
- * Find [interesting channels and join
- them](https://get.slack.help/hc/en-us/articles/205239967-Join-a-channel)
-
- * [Create public
- channels](https://get.slack.help/hc/en-us/articles/201402297-Create-a-channel)
- for your subteam
-
- * Add new and exciting [custom
- emoji](https://chromium.slack.com/customize/emoji)
-
- * ...and avoid private channels/DMs when possible. Let’s be open!
-
-## Example channels:
-
-* #halp - a channel where all project related questions are welcome
-* #misc - anything
-* #slack-help - the one mandatory channel, a place to ask questions
- about using slack
-* #sheriffing - what is going on? Is anyone on it?
-* #mojo - you're also confused? Join and ask/learn
-* #cxx - a place to ~~rant about~~ discuss C++
-
-Any Slack member can create channels when they need one. There are many.
-
-## ![image](/developers/slack/blob_praise.png) Good Behavior Required!
-
-As with all Chromium venues, the [Chromium Code of
-Conduct](https://chromium.googlesource.com/chromium/src/+/HEAD/CODE_OF_CONDUCT.md)
-applies here.
-
-## ![image](/developers/slack/blob_think.png) Tips and Tricks
-
-There are [many
-pages](https://www.google.se/search?client=opera&q=slack+tips+and+tricks&sourceid=opera&ie=UTF-8&oe=UTF-8)
-listing Tips and Tricks for Slack. These are a couple selected to make the
-transition from earlier systems smoother.
-
-### Read like IRC?
-
-Enable "All unread" in settings and read all channels amalgamated.
-
-### Quieter slack
-
-Mute channels by clicking on the channel name. A muted channel will
-still notify you if someone triggers an alert by using your name
-
-### Remind me
-
-```
-/remind me in 20 minutes to eat lunch
-
-/remind #release at 11:45 May 20, 2020 Release Chromium 80
-```
-
-Right click a post and select "remind me in ..." to get reminded about that post
-later
-
-## Questions?
-
-If you can, probably best to ask questions on #slack-help. If you can't log in
-to Slack at all, contact chromium-slack-invites@chromium.org \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/slickedit-editor-notes/index.md b/chromium/docs/website/site/developers/slickedit-editor-notes/index.md
deleted file mode 100644
index 5f426609ab4..00000000000
--- a/chromium/docs/website/site/developers/slickedit-editor-notes/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: slickedit-editor-notes
-title: SlickEdit Editor Notes
----
-
-[SlickEdit](http://www.slickedit.com/) is a paid multi-platform IDE / text
-editor. (Googlers have a site license) with many features. Notably:
-
-* Chromium code is indexed *rapidly* (faster than Eclipse) and setup
- to do so is simple.
- * 'Goto Definition', 'Goto Reference' work well across multiple
- languages
-* Generally competitive features to Eclipse, but much faster. Visual
- Studio users will find many features they miss as well.
-* Minimum project configuration required, easily works with files not
- 'in project'.
-* Many strong GUI IDE features:
- * Tiled tab groups
- * Find replace with RegEx etc
- * Multiple cursor & block edit modes
- * Highly customizable and scriptable.
- * Source control integration
-* With more setup, debugging and in-IDE builds can work, but the setup
- complexity may not be worth it.
-
-## Settings
-
-1. Context tagging is much faster with multiple background threads.
- In settings search for and set:
- 1. Number of tagging threads to start: 8
- 2. Create dedicated tagging thread for reading: Off
-2. Languages: Applications: C/C++: Formatting: Google Style
-
-## Project & Workspace
-
-1. Create a Workspace
- 1. Project: New: Workspace: Blank
- 2. Give it a name that will be different than the project, so that
- you can later create other projects that include the same
- project and not have the project & workspace tag file names
- collide.
- 3. src/.. directory is a reasonable place to create this.
- 4. Files will be created:
- 1. workspace.vpw (tiny config listing the projects included)
- 2. workspace.vpwhistu (window layout, etc)
- 3. workspace.vtg (tag file, can become large though settings
- below will keep it small)
-2. Create a Project
- 1. Project: New: Project: (Other)
- 2. Name it uniquely from the workspace.
- 3. Files will be created
- 1. project.vpj
- 2. project.vtg (if you change the project setting, as below,
- and will be large)
- 4. Change project setting to add tag files to a project specific
- tag file.
- 1. (Done on project settings, Files tab, bottom of dialog)
- 2. This will allow you to quickly switch between multiple
- workspaces having different saved window layouts without
- incurring a cost to re-tag the project.
- 5. Add Tree...
- 1. For each sub-path of interest (all of 'src' would be
- overkill, but you can include most of it. Come back and add
- directories as you have the need):
- 1. Select src/directory of interest
- 2. exclude: .svn/;.git
- 3. Select 'Add as wildcard'
- 6. <https://github.com/scheib/chromium-config> has an example, you
- may copy paste the project folders to your own to bootstrap.
-3. Optionally create additional workspaces to make it easy to switch
- between tasks with many files open and tiled window layout saved.
- 1. StackOverflow answer on [How to save and restore window layout
- in
- SlickEdit?](http://stackoverflow.com/questions/15304321/how-to-save-and-restore-window-layout-in-slickedit/32850676#32850676) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/smart-pointer-guidelines/index.md b/chromium/docs/website/site/developers/smart-pointer-guidelines/index.md
deleted file mode 100644
index f91822b2f60..00000000000
--- a/chromium/docs/website/site/developers/smart-pointer-guidelines/index.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: smart-pointer-guidelines
-title: Smart Pointer Guidelines
----
-
-## What are smart pointers?
-
-Smart pointers are a specific kind of "scoping object". They are like regular
-pointers but can automatically deallocate the object they point to when they go
-out of scope. Since C++ is not a garbage collected language, such functionality
-is important. The pattern where scoping objects are used to automatically manage
-the lifetime of heap-allocated objects is called RAII - **R**esource
-**A**cquisition **I**s **I**nitialization.
-
-Here's some sample use of `std::unique_ptr<>`, the most common type of smart
-pointer:
-
-```cpp
-// We can put a pointer into a std::unique_ptr<> at construction time...
-std::unique_ptr value(base::JSONReader::Read(data));
-std::unique_ptr foo_ptr(new Foo(...));
-
-// ...or by using reset().
-std::unique_ptr bar_ptr; // Like "Bar* bar_ptr = nullptr;".
-bar_ptr.reset(new Bar(...)); // Now |bar_ptr| is non-nullptr and owns the object.
-
-// We can test the std::unique_ptr<> directly.
-if (!value)
- return false;
-
-// get() accesses the raw pointer underneath.
-Foo* raw_ptr = foo_ptr.get();
-
-// We can call through the std::unique_ptr<> as if it were a raw pointer.
-DictionaryValue* dict;
-if (!value->GetAsDictionary(&dict))
- return false;
-```
-
-## Why do we use them?
-
-Smart pointers ensure we properly destroy an object even if its creation and
-destruction are widely separated. They make functions simpler and safer by
-ensuring that no matter how many different exit paths exist, local objects are
-always cleaned up correctly. They help enforce that exactly one object owns
-another object at any given time, preventing both leaks and double-frees.
-Finally, their use clarifies ownership transference expectations at function
-calls.
-
-## What types of smart pointers exist?
-
-The two common smart pointers in Chromium are `std::unique_ptr<>` and
-`scoped_refptr<>`. The former is used for singly-owned objects, while the latter
-is used for reference-counted objects (though normally you should avoid these --
-see below). If you're familiar with C++11, `scoped_refptr<>` is similar in
-intent to `std::shared_ptr<>` (Note: the [latter is
-banned](https://chromium.googlesource.com/chromium/src/+/main/styleguide/c++/c++11.md)).
-
-[base/memory/](https://chromium.googlesource.com/chromium/src/+/HEAD/base/memory/)
-has a few other objects of interest:
-
-* `WeakPtr<>` is not actually a smart pointer; it functions like a
- pointer type, but rather than being used to automatically free
- objects, it's used to track whether an object owned elsewhere is
- still alive. When the object is destroyed, the `WeakPtr<>` will be
- automatically set to null, so you can see that it's no longer alive.
- (You still need to test for null before dereferencing -- a blind
- dereference of a null `WeakPtr<>` is the equivalent of dereferencing
- null, rather than a no-op.) This is somewhat like C++11's
- `std::weak_ptr<>`, but with a different API and fewer restrictions.
-
-## When do we use each smart pointer?
-
-* **Singly-owned objects** - use `std::unique_ptr<>`. Specifically,
- these are for non-reference-counted, heap-allocated objects that you
- own.
-* **Non-owned objects** - use raw pointers or `WeakPtr<>`. Note that
- `WeakPtr<>`s must only be dereferenced on the same thread where they
- were created (usually by a `WeakPtrFactory<>`), and if you need to
- take some action immediately before or after an object is destroyed,
- you'd likely be better-served with some sort of callback or
- notification instead of a `WeakPtr<>`.
-* **Ref-counted objects** - use `scoped_refptr<>`, but better yet,
- rethink your design. Reference-counted objects make it difficult to
- understand ownership and destruction order, especially when multiple
- threads are involved. There is almost always another way to design
- your object hierarchy to avoid refcounting. Avoiding refcounting in
- multithreaded situations is usually easier if you restrict each
- class to operating on just one thread, and use `PostTask()` and the
- like to proxy calls to the correct thread. `base::Bind()`,
- `WeakPtr<>`, and other tools make it possible to automatically
- cancel calls to such an object when it dies. Note that too much of
- our existing code uses refcounting, so just because you see existing
- code doing it does not mean it's the right solution. (Bonus points
- if you're able to clean up such cases.)
-* **Platform-specific types** - use one of the many platform-specific
- scoping objects, such as `base::win::ScopedHandle`,
- `base::win::ScopedComPtr`, or `base::mac::ScopedCFTypeRef`. Note
- that these may have slightly different usage patterns than
- `std::unique_ptr<>`; for example, they might be assigned as
- outparams via a `.receive()` type of method.
-
-## What are the calling conventions involving different kinds of pointers?
-
-See the [calling conventions section of the Chromium style
-guide](/developers/coding-style) for the rules; some common cases are
-illustrated below.
-
-* If a function **takes** a `std::unique_ptr<>`, that means it takes
- ownership of the argument. Callers need to use `std::move()` to
- indicate that they're passing ownership if the object being passed
- is not a temporary:
- ```cpp
- // Foo() takes ownership of |bar|.
- void Foo(std::unique_ptr<Bar> bar);
-
- ...
- std::unique_ptr<Bar> bar_ptr(new Bar());
- Foo(std::move(bar_ptr)); // After this statement, |bar_ptr| is null.
- Foo(std::unique_ptr<Bar>(new Bar())); // No need to use std::move() on temporaries.
- ```
-
-* If a function **returns** a `std::unique_ptr<>`, that means the
- caller takes ownership of the returned object. Usage of
- `std::move()` while returning an object is only needed if the return
- type of the function differs from the type of the local variable.
- ```cpp
- class Base { ... };
- class Derived : public Base { ... };
-
- // Foo takes ownership of |base|, and the caller takes ownership of the returned
- // object.
- std::unique_ptr<Base> Foo(std::unique_ptr<Base> base) {
- if (cond) {
- return base; // Transfers ownership of |base| back to
- // the caller.
- }
-
- // Note that on these next codepaths, |base| is deleted on exit.
- if (cond2) {
- return std::unique_ptr<Base>(new Base())); // No std::move() necessary on temporaries.
- }
- std::unique_ptr<Derived> derived(new Derived());
- return std::move(derived); // Note that std::move() is necessary because
- // type of |derived| is different from the return
- // type of the function.
- }
- ```
-
-* If a function takes or returns a raw pointer, it may mean no
- ownership is transferred, or it may not. Much of Chromium was
- written before `std::unique_ptr<>` existed, or by people unfamiliar
- with using it to indicate ownership transfers, and thus takes or
- returns raw pointers but transfers ownership in the process. Because
- the compiler can't enforce correct behavior here, this is less safe.
- Consider cleaning up such code, so that functions which take or
- return raw pointers never transfer ownership.
-
-## What about passing or returning a smart pointer by reference?
-
-Don't do this.
-
-In principle, passing a `const std::unique_ptr<T>&` to a function which does not
-take ownership has some advantages over passing a `T*`: the caller can't
-accidentally pass in something utterly bogus (e.g. an `int` converted to a
-`T*`), and the caller is forced to guarantee the lifetime of the object persists
-across the function call. However, this declaration also forces callers to
-heap-allocate the objects in question, even if they could otherwise have
-declared them on the stack. Passing such arguments as raw pointers decouples the
-ownership issue from the allocation issue, so that the function is merely
-expressing a preference about the former. For the sake of simplicity and
-consistency, we avoid asking authors to balance these tradeoffs, and simply say
-to always use raw pointers.
-
-One exception is lambda functions used with STL algorithms operating on
-containers of smart pointers; these may have to take e.g. `const
-std::unique_ptr<T>&` in order to compile. And speaking of that...
-
-## I want to use an STL container to hold pointers. Can I use smart pointers?
-
-Yes! As of C++11, you can store smart pointers in STL containers.
-
-## General references on smart pointers
-
-* [StackOverflow guide to smart
- pointers](http://stackoverflow.com/questions/106508/what-is-a-smart-pointer-and-when-should-i-use-one)
-* [Wikipedia article on smart
- pointers](http://en.wikipedia.org/wiki/Smart_pointer)
-* [Guide to smart pointer usage in
- WebKit](http://www.webkit.org/coding/RefPtr.html)
diff --git a/chromium/docs/website/site/developers/speed-hall-of-fame/index.md b/chromium/docs/website/site/developers/speed-hall-of-fame/index.md
deleted file mode 100644
index 338d545d1ed..00000000000
--- a/chromium/docs/website/site/developers/speed-hall-of-fame/index.md
+++ /dev/null
@@ -1,349 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: speed-hall-of-fame
-title: Speed Hall of Fame
----
-
-For some time in 2013-2015, we listed a performance improvement of the week.
-This page is now here for historical purposes.
-
-But, feel free to nominate future changes! All Chromium contributors are
-eligible. To ensure a change is considered, nominate it to
-[perf-sheriffs@chromium.org](mailto:perf-sheriffs@chromium.org).
-
-[TOC]
-
-## 2015
-
-### 2015-02-11
-
-This week, we highlight the performance sheriffing process working as it should
-due to reliability improvements. A few weeks ago, Joshua Bell landed a [patch
-impacting IndexedDB](http://f27dd1d7e9322388546c613cfed39bafda153859/). The
-performance sheriff Oystein Eftevaag filed a [bug for an IndexedDB
-regression](http://crbug.com/454622) and the autobisect bot submitted a bisect
-job on his behalf. It returned with high confidence that Joshua's patch was to
-blame. While the regression was unexpected, Joshua investigated, determined it
-was his patch, and then posted a [fix that resolved the performance
-regression](https://chromium.googlesource.com/chromium/src/+/05d0eec7715de17e1a9b7b9b16a5a5f37d36fb73).
-While we still have plenty of work to do improving reliability and decreasing
-latency, successes like these show that our improvements are making progress.
-Thank you to Oystein for the find and Joshua for the fix!
-
-### 2015-01-20
-
-This week Balazs Engedy [moved opening the LoginDatabase off of the UI
-thread](https://chromium.googlesource.com/chromium/src/+/41c91fbbdcfde75c9058d06ceae816f12699fc2f)
-and out of the critical path for opening Chrome. This [shaved hundreds of
-milliseconds off startup
-times](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win8-dual%2Clinux-release&tests=startup.warm.blank_page%2Fmessageloop_start_time&checked=messageloop_start_time%2Cref%2Cmessageloop_start_time%2Cref%2Cmessageloop_start_time%2Cref%2Cmessageloop_start_time%2Cref&rev=312613)
-for Windows and Linux, decreasing the amount of time until the browser windows
-becomes responsive. Thanks for your help Balazs!
-
-## 2014
-
-### 2014-10-28
-
-This week's improvement of the week goes to Ulan Degenbaev. A few weeks ago we
-noticed recurring, long garbage collection activity and a seemingly related 80%
-spike in metrics from the field. The V8 team triaged this back an issue with
-their idle notification scheme, and Ulan [landed a
-fix](https://codereview.chromium.org/662543008) to make things right. The patch
-has already been merged to M39 and will go out with the next push. Thanks Ulan!
-
-### 2014-09-17
-
-Last week Mike Klein turned on the [new SkRecord-based backend for
-SkPicture](https://chromium.googlesource.com/chromium/src/+/c3d2efb33238a3ee19cc8e21f4d91ef8c55f23c4),
-which resulted in [25-30% faster
-recording](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-motoe%2Candroid-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2&tests=rasterize_and_record_micro.key_silk_cases%2Frecord_time&checked=record_time%2Crecord_time%2Crecord_time%2Crecord_time%2Crecord_time&start_rev=293371&end_rev=294785)
-on Android devices. Recording is one phase of the painting process, so faster
-recording will result in smaller paint times and faster framerates. This new
-backend is the result of several months of Mike's work. Thanks Mike!
-
-### 2014-08-20
-
-Last week Oystein Eftevaag [landed a
-patch](https://codereview.chromium.org/169043004/) to start the commit upon
-receiving the last blocking stylesheet. This resulted in a 25% improvement from
-the time the user initiates a request to the time they see the first paint.
-Unlike most metrics we quote here, this didn't come from from our devices in the
-lab, but from real users in the wild. Great work Oystein!
-
-### 2014-08-06
-
-Last week, Danno Clifford landed a JavaScript [array allocation
-optimization](https://code.google.com/p/v8/source/detail?r=22645) targeted at
-the Kraken benchmark suite. It improved Chromium's score on the [audio-dft
-subtest by
-30-70%](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus4%2Cchromium-rel-win7-dual&tests=kraken%2Faudio-dft&checked=core)
-and the [benchmark total score by
-5-15%.](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus4%2Cchromium-rel-win7-dual&tests=kraken%2FTotal&checked=core)
-Danno was so pleased with his work that he immediately left on a well-deserved
-vacation. Thanks Danno!
-
-### 2014-07-13
-
-This week, Fadi Meawad [fixed a bug in Chrome's power
-monitor](https://codereview.chromium.org/401083002/) on Windows that resulted in
-an improvement of 7% of the entire system's battery life while running Chrome.
-This particular bug gathered[ over 7,000 stars on the issue
-tracker](https://code.google.com/p/chromium/issues/detail?id=153139) - the most
-of any bug by [several
-thousand](https://code.google.com/p/chromium/issues/list?can=2&q=stars%3A5000).
-While these savings are impressive, our power work is nowhere near complete.
-Stay tuned for more improvements!
-
-### 2014-06-18
-
-Jakob Kummerow landed [two](https://code.google.com/p/v8/source/detail?r=21816)[
-optimizations](https://code.google.com/p/v8/source/detail?r=21834) to V8
-specifically targeted at optimizing the
-[React](http://facebook.github.io/react/) framework. Thanks for your work!
-
-### 2014-06-11
-
-This week, Emil Eklund [finished up
-work](https://codereview.chromium.org/315623002/) on
-[DirectWrite](http://msdn.microsoft.com/en-us/library/windows/desktop/dd368038(v=vs.85).aspx)
-for Windows. In addition to being a widely requested feature by users and
-developers with [over 500 stars on the
-bug](https://code.google.com/p/chromium/issues/detail?id=25541), DirectWrite
-also has performance considerations. For example, we're seeing about a 7-10%
-warm page
-[load](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual&tests=page_cycler.intl_ko_th_vi%2Fwarm_times&checked=page_load_time%2Cpage_load_time_ref&start_rev=274147&end_rev=276826)[
-time](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual&tests=page_cycler.intl_hi_ru%2Fwarm_times&checked=core&start_rev=274147&end_rev=276826)[
-improvement](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual&tests=page_cycler.intl_ar_fa_he%2Fwarm_times&checked=core&start_rev=274147&end_rev=276826)
-on pages with non-Latin fonts. Thanks Emil, for your work toward a beautiful and
-speedy user experience.
-
-### 2014-05-28
-
-Over the past few weeks, Sami Kyostila landed a
-[series](https://src.chromium.org/viewvc/chrome?revision=273530&view=revision)[
-of](https://src.chromium.org/viewvc/chrome?revision=273984&view=revision)[
-patches](https://src.chromium.org/viewvc/chrome?revision=269094&view=revision)
-for increased reliability and decreased cycle time of our performance tests.
-Performance improvements are fantastic, but without work like Sami's we would be
-flying blind with a bunch of broken tests. Thanks for your hard work Sami!
-
-### 2014-04-30
-
-Simon Hatch[
-upgraded](https://src.chromium.org/viewvc/chrome?revision=266629&view=revision)
-the capabilities of our bisect bots so that they can now bisect functional
-breakages and changes in variance. You can find instructions in the ["tips"
-section of the
-documentation](http://www.chromium.org/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions#TOC-Tips),
-but it's as easy as setting bisect_mode to return_code or std_dev in your bisect
-jobs. Simon's work should help us quite a bit in our quest for reliable, stable
-benchmarks!
-
-### 2014-04-16
-
-Dale Curtis landed a[
-patch](https://src.chromium.org/viewvc/chrome?revision=264741&view=revision)
-this week that increases the buffer size for audio streams when appropriate,
-reducing both CPU and power usage. For certain media types (such as mp3) the
-system-wide power consumption improved by[ up to
-35%](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac9&tests=media.tough_media_cases%2Fenergy_consumption_mwh&checked=video.html%3Fsrc_tulip2.mp3_type_audio&start_rev=263589&end_rev=264782),
-with about[ 20% savings on
-average](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac9&tests=media.tough_media_cases%2Fenergy_consumption_mwh&checked=core&start_rev=263589&end_rev=264782).
-This is the first of many great power patches we expect to see now that the
-infrastructure is in place. Great work Dale!
-
-### 2014-03-26
-
-This week David Reveman landed a
-[patch](http://src.chromium.org/viewvc/chrome?revision=254436&view=revision) to
-remove task references from RasterWorkerPool on all platforms. I can't possibly
-produce a better summary than his own patch description: "This moves the
-responsibility to keep tasks alive while scheduled from the RasterWorkerPool to
-the client where unnecessary reference counting can be avoided. The result is a
-[~5x improvement in BuildRasterTaskQueue
-performance](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-gn%2Candroid-nexus10%2Candroid-nexus5%2Cchromium-rel-mac9%2Cchromium-rel-win8-dual%2Clinux-release&tests=cc_perftests%2Fbuild_raster_task_queue&rev=254610&checked=32_0),
-which under some circumstances translate to almost [2x improvement in
-ScheduleTasks
-performance](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-gn%2Candroid-nexus10%2Candroid-nexus5%2Cchromium-rel-mac9%2Cchromium-rel-win8-dual%2Clinux-release&tests=cc_perftests%2Fschedule_tasks_direct_raster_worker_pool&rev=254610&checked=32_1)."
-Thanks David!
-
-### 2014-03-12
-
-Last week Hayato Ito reduced checking if a DOM tree is a descendent of another
-from O(N) in the height of the tree of trees to O(1). In smaller trees this
-produces[ 2-3x faster event
-dispatching](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus5%2Cchromium-rel-mac8%2Cchromium-rel-win7-dual&tests=blink_perf%2FEvents_EventsDispatchingInShadowTrees&rev=256330&checked=core),
-but in the deeply nested trees Hayato created he saw more than a 400x
-improvement! I'd also like to thank Hayato for the[ fantastic
-description](http://src.chromium.org/viewvc/blink?revision=168901&view=revision)
-of the patch and its effects in the CL description. Great work!
-
-### 2014-03-05
-
-This week's improvement goes to Chris Harrelson, who [landed a
-patch](http://src.chromium.org/viewvc/blink?view=rev&revision=168238) speeding
-up CSS descendant selectors by an astounding factor of [20-30x across all
-platforms](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2%2Cchromium-rel-mac6%2Cchromium-rel-mac8%2Cchromium-rel-mac9%2Cchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual%2Cchromium-rel-win8-dual%2Cchromium-rel-xp-dual%2Clinux-release&tests=blink_perf%2FCSS_ClassDescendantSelector&checked=CSS_ClassDescendantSelector&start_rev=254375&end_rev=255079).
-Though it can be difficult to trust microbenchmark results, this change is
-expected to save 90% or 50ms of style recalc time from expand animations. One
-more step in the direction of silky smooth web apps!
-
-### 2014-02-26
-
-This week's improvement belongs to Kentaro Hara, whose[ V8 bindings
-patch](http://src.chromium.org/viewvc/blink?view=revision&revision=167879)
-resulted in a 20-30% improvement in[
-several](https://chromeperf.appspot.com/report?rev=253452&masters=ChromiumPerf&bots=android-gn%2Cchromium-rel-mac8%2Cchromium-rel-win8-dual%2Clinux-release&tests=blink_perf%2FBindings_insert-before&checked=core)[
-bindings](https://chromeperf.appspot.com/report?rev=253452&masters=ChromiumPerf&bots=android-gn%2Cchromium-rel-mac8%2Cchromium-rel-win8-dual%2Clinux-release&tests=blink_perf%2FBindings_append-child&checked=core)[
-benchmarks](https://chromeperf.appspot.com/report?rev=253452&masters=ChromiumPerf&bots=android-gn%2Cchromium-rel-mac8%2Cchromium-rel-win8-dual%2Clinux-release&tests=blink_perf%2FBindings_node-list-access&checked=core)
-across all platforms. Great work!
-
-### 2014-02-19
-
-This week Oystein Eftevaag landed a
-[patch](https://codereview.chromium.org/157963002) that allows faster first
-paints in the lack of pending stylesheet loads. This produced a [Speed
-Index](https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index)
-improvement of about 5% on Android, and a radically faster Google Search loading
-time -- beginning to show the page a full 2.5s sooner! Oystein's work also
-unlocked the possibility for several further performance enhancements, so stay
-tuned for more progress.
-
-### 2012-02-12
-
-This week it was impossible to choose between three truly epic improvements! So
-they’ll have to share the winnings. First, Daniel Sievers
-[dropped](https://codereview.chromium.org/148243011) Windows cold message loop
-start time from [~4s to
-~1s](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win7-dual&tests=startup.cold.blank_page%2Fmessageloop_start_time&checked=messageloop_start_time%2Cref&start_rev=247437&end_rev=250669),
-returning us to pre-Aura levels. David Reveman pwnd some compositing benchmarks
-in a [series](https://codereview.chromium.org/154003006)[
-of](https://codereview.chromium.org/131543014)[
-patches](https://codereview.chromium.org/144463012), improving them [several
-fold](https://chromeperf.appspot.com/report?rev=249602&masters=ChromiumPerf&bots=android-nexus5%2Cchromium-rel-mac9%2Cchromium-rel-win7-single&tests=cc_perftests%2Fschedule_alternate_tasks&checked=2_1_0)
-across platforms. Last but not least, Camille Lamy shaved [a couple hundred
-milliseconds](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-gn%2Candroid-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2&tests=page_cycler.top_10_mobile%2Fwarm_times&checked=page_load_time)
-off some page loads in the top 10 mobile sites suite by
-[moving](https://codereview.chromium.org/88503002/) unload event handling off of
-the critical path.
-
-### 2012-02-05
-
-This week's improvement has been over a year in the making. Toon Verwaest
-succeeded in reducing code duplication and complexity by removing call inline
-caches from the V8 codebase. The result was the deletion of over 10,000 lines of
-code and several
-[unexpected](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac6%2Cchromium-rel-mac8%2Cchromium-rel-mac9%2Cchromium-rel-win7-dual%2Cchromium-rel-win7-single%2Cchromium-rel-win7-x64-dual%2Cchromium-rel-win8-dual%2Cchromium-rel-xp-dual%2Clinux-release&tests=dromaeo.jslibeventprototype%2Fjslib&rev=248514&checked=jslib%2Cref)[
-perf](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac8%2Cchromium-rel-mac9&tests=blink_perf%2FCSS_ClassDescendantSelector&rev=248527&checked=CSS_ClassDescendantSelector%2Cref)[
-improvements](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac8%2Cchromium-rel-mac9&tests=blink_perf%2FLayout_SimpleTextPathLineLayout&rev=248527&checked=Layout_SimpleTextPathLineLayout%2Cref)
-- not to mention the improvement to the developers' lives who would have had to
-maintain that code. Thank you Toon for all your hard work!
-
-### 2014-01-22
-
-This week’s improvement is in our ability to measure. We’re now receiving the
-first [energy consumption
-metrics](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac9&tests=smoothness.top_25%2Fenergy_consumption_mwh&rev=247255&checked=energy_consumption_mwh%2Cref)
-on the Mac 10.9 perf bots (with Android soon to follow). This enables us to
-begin optimizing while avoiding regressions. Huge thanks to Jeremy Moskovich,
-Elliot Friedman, and the Chrome Infra team for getting our first energy
-benchmark up and running!
-
-### 2014-01-08
-
-Just before the holidays, the on-duty performance sheriff Victoria Clarke
-noticed significant [startup time performance
-regressions](https://code.google.com/p/chromium/issues/detail?id=330285); in
-some cases, the regression was as much as 350%. Victoria traced it back to an
-innocuous-looking [change in the password
-manager](http://src.chromium.org/viewvc/chrome?view=revision&revision=241930).
-Upon revert our [startup
-metrics](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win8-dual&tests=startup.warm.blank_page%2Fopen_tabs_time&checked=open_tabs_time%2Cref&start_rev=241294&end_rev=243265)
-recovered completely. Thanks Victoria!
-
-## 2013
-
-### 2013-12-18
-
-Simon Hatch landed a
-[patch](http://src.chromium.org/viewvc/blink?view=revision&revision=163110) that
-prioritizes the loading of visible images. This is a huge user win in perceived
-loading time, but the initial attempt also unexpectedly introduced
-[several](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win7-single&tests=blink_perf%2FLayout_fixed-grid-lots-of-data&checked=Layout_fixed-grid-lots-of-data&start_rev=238327&end_rev=241268)[
-large](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac8&tests=page_cycler.typical_25%2Fcold_times%2Fpage_load_time&checked=page_load_time&start_rev=238426&end_rev=241090)[
-performance](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac8&tests=blink_perf%2FLayout_floats_50_100&rev=238938&checked=Layout_floats_50_100)[
-regressions](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win7-gpu-intel&tests=robohornet_pro%2FTotal&rev=238982&checked=Total)
-which probably would have went to stable in the olden days. Pat Meenan, the
-performance sheriff on duty, [tracked them back to Simon’s
-patch](https://code.google.com/p/chromium/issues/detail?id=326165). This enabled
-Simon to
-[revert](http://src.chromium.org/viewvc/blink?revision=163362&view=revision) the
-patch and
-[reland](http://src.chromium.org/viewvc/blink?view=revision&revision=163563) it
-a few days later with all regressions resolved.
-
-### 2013-12-11
-
-More compositor improvements this week, thanks to Vlad Levin. Vlad [introduced
-the concept of
-TileBundles](http://src.chromium.org/viewvc/chrome?revision=239074&view=revision)
-into the compositor, resulting in a [3-4x performance
-gain](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-mac8%2Cchromium-rel-win7-dual%2Clinux-release&tests=cc_perftests%2Fupdate_tile_priorities_stationary&rev=239020&checked=perspective)
-in updating tile priorities on desktop.
-
-### 2013-12-04
-
-This week we saw a [70-90%
-improvement](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-gn%2Candroid-nexus10%2Candroid-nexus4%2Candroid-nexus5%2Candroid-nexus7v2%2Cchromium-rel-mac7-gpu-intel%2Cchromium-rel-win7-gpu-intel%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release&tests=cc_perftests%2Flayer_tree_host_commit_time&rev=237085&checked=heavy_page_page_scale)
-in composited layer tree host commit time across all platforms with impl-side
-painting. This is due in part to two changes, [one by Adrienne
-Walker](http://src.chromium.org/viewvc/chrome?revision=237136&view=revision) and
-[one by Eric
-Penner](http://src.chromium.org/viewvc/chrome?view=revision&revision=237179).
-The former ensures that on a page with many layers, Chrome only spends time
-updating ones that have actually changed; the latter optimizes tiling resolution
-when scaling. Thanks to you both!
-
-### 2013-11-13
-
-This week’s improvement comes from outside Google: Jun Jiang from Intel landed
-an [order of magnitude speed
-increase](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=chromium-rel-win8-dual&tests=blink_perf%2FCanvas_draw-dynamic-webgl-to-hw-accelerated-canvas-2d&rev=234806&checked=Canvas_draw-dynamic-webgl-to-hw-accelerated-canvas-2d)
-for drawing dynamic WebGL to hardware-accelerated Canvas 2D.
-
-### 2013-11-07
-
-Elly Jones [landed a
-fix](https://src.chromium.org/viewvc/chrome?revision=224030&view=revision) that
-reduces startup time by 1.5s for most users on Windows. The win was secured by
-decreasing the timeout for
-[WPAD](http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol) to a
-reasonable value.
-
-### 2013-10-31
-
-This week we wanted to recognize the folks working on Aura and the
-Ubercompositor, who not only reversed a number of Windows regressions but pushed
-them further into solid performance enhancements. Specifically they were able to
-improve framerate (as much as double!) on the [blob
-demo](http://webglsamples.googlecode.com/hg/blob/blob.html), [deferred
-irradiance volume
-demo](http://codeflow.org/webgl/deferred-irradiance-volumes/www/), and [WebGL
-aquarium](http://webglsamples.googlecode.com/hg/aquarium/aquarium.html). The
-changes also affected real-world applications, similarly improving framerate on
-properties such as Google Maps.
-
-### 2013-10-23
-
-This week’s top improvement is from a perf sheriff, Prasad Vuppalapu, who
-diagnosed a 50% regression in loading Japanese and Chinese web pages on Windows.
-The [revert](https://code.google.com/p/chromium/issues/detail?id=304868)
-recovered the performance. Holding on to the speed we have is equally as
-important as improving our speed in the first place.
-
-### 2013-10-16
-
-This week’s top improvement is from Elliott Sprehn, who landed a massive 93.5%
-performance improvement to CSS/StyleSheetInsert. Great work Elliott! \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/speed-infra/chrome_speed_color.png.sha1 b/chromium/docs/website/site/developers/speed-infra/chrome_speed_color.png.sha1
deleted file mode 100644
index 70f51b3e3b0..00000000000
--- a/chromium/docs/website/site/developers/speed-infra/chrome_speed_color.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e2d1cdf4013a6588771d81ccc5ea38e3fe87fca4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/speed-infra/index.md b/chromium/docs/website/site/developers/speed-infra/index.md
deleted file mode 100644
index 0c4c976d922..00000000000
--- a/chromium/docs/website/site/developers/speed-infra/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: speed-infra
-title: Speed Infra
----
-
-Content has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/speed-infra/perf-bug-faq/index.md b/chromium/docs/website/site/developers/speed-infra/perf-bug-faq/index.md
deleted file mode 100644
index 022dc607ce7..00000000000
--- a/chromium/docs/website/site/developers/speed-infra/perf-bug-faq/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/speed-infra
- - Speed Infra
-page_name: perf-bug-faq
-title: FAQ for when a perf regression bug is assigned to you
----
-
-This page has been moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed/addressing_performance_regressions.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/speed-infra/speed_logo.png.sha1 b/chromium/docs/website/site/developers/speed-infra/speed_logo.png.sha1
deleted file mode 100644
index d32897e2b07..00000000000
--- a/chromium/docs/website/site/developers/speed-infra/speed_logo.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9ed88c43dfc5e6ace18d641d9dfb58938430d36f \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/status-update-email-best-practices/index.md b/chromium/docs/website/site/developers/status-update-email-best-practices/index.md
deleted file mode 100644
index adf3e6194a7..00000000000
--- a/chromium/docs/website/site/developers/status-update-email-best-practices/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: status-update-email-best-practices
-title: Status Update Email Best Practices
----
-
-### General suggestions
-
-* Send to list with +status, e.g. blink-dev+status@chromium.org
-* Minimize boilerplate subject line.
-* Summarize highlights in subject, or as the first line of the email.
-* Main content follows as a bullet list of key status updates.
-* Every 2 weeks works well for many projects. Adjust as appropriate
- given the news of an update.
-* For feature status updates, link the feature on
- [chromestatus.com](http://chromestatus.com).
-* Optimize for skimmability.
-
-## Example
-
-To: blink-dev+status@chromium.org
-
-Subject: **Bluetooth Status - Experiment targeting M51, Opera demoed at MWC.**
-
-[Web Bluetooth](https://www.chromestatus.com/feature/5264933985976320) provides
-Bluetooth GATT Access to web apps.
-
-* Additional [launch
- requirements](https://www.chromestatus.com/feature/5264933985976320)
- have moved the planned experiment launch from M50 to M51.
- * [Issues](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink%3EBluetooth+M%3D51&sort=pri&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
- include tab indicator and fuzzing. Additional feature
- improvements are stretch goals to improve demos.
-* Started migration to Mojo, and eventual migration to Blink.
-* Starting to seek partners to have in hand for Chrome Dev Summit.
-* [Opera demoed Web Bluetooth at Mobile Web
- Congress](http://www.opera.com/blogs/news/2016/02/opera-heads-to-mobile-world-congress-2016/)
- and [shipped it behind a
- flag](https://dev.opera.com/articles/web-bluetooth-intro/) in Opera
- for Android beta. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/sublime-text/SublimeExample.png.sha1 b/chromium/docs/website/site/developers/sublime-text/SublimeExample.png.sha1
deleted file mode 100644
index 8c13d809b62..00000000000
--- a/chromium/docs/website/site/developers/sublime-text/SublimeExample.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6c65db333f2ff5d4344a7839198c2950d05fe3e9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/sublime-text/compile_current_file.py b/chromium/docs/website/site/developers/sublime-text/compile_current_file.py
deleted file mode 100644
index 973b9c9e85e..00000000000
--- a/chromium/docs/website/site/developers/sublime-text/compile_current_file.py
+++ /dev/null
@@ -1,217 +0,0 @@
-import datetime
-import fnmatch
-import logging
-import os
-import os.path
-import Queue
-import sublime
-import sublime_plugin
-import subprocess
-import tempfile
-import threading
-import time
-
-
-class CompileCurrentFile(sublime_plugin.TextCommand):
- # static thread so that we don't try to run more than once at a time.
- thread = None
- lock = threading.Lock()
-
- def __init__(self, args):
- super(CompileCurrentFile, self).__init__(args)
- self.thread_id = threading.current_thread().ident
- self.text_to_draw = ""
- self.interrupted = False
-
- def description(self):
- return ("Compiles the file in the current view using Ninja, so all that "
- "this file and it's project depends on will be built first\n"
- "Note that this command is a toggle so invoking it while it runs "
- "will interrupt it.")
-
- def draw_panel_text(self):
- """Draw in the output.exec panel the text accumulated in self.text_to_draw.
-
- This must be called from the main UI thread (e.g., using set_timeout).
- """
- assert self.thread_id == threading.current_thread().ident
- logging.debug("draw_panel_text called.")
- self.lock.acquire()
- text_to_draw = self.text_to_draw
- self.text_to_draw = ""
- self.lock.release()
-
- if len(text_to_draw):
- edit = self.output_panel.begin_edit()
- self.output_panel.set_read_only(False)
- self.output_panel.insert(edit, self.output_panel.size(), text_to_draw)
- self.output_panel.show(self.output_panel.size())
- self.output_panel.set_read_only(True)
- self.output_panel.end_edit(edit)
- self.view.window().run_command("show_panel", {"panel": "output.exec"})
- logging.debug("Added text:\n%s.", text_to_draw)
-
- def update_panel_text(self, text_to_draw):
- self.lock.acquire()
- self.text_to_draw += text_to_draw
- self.lock.release()
- sublime.set_timeout(self.draw_panel_text, 0)
-
- def execute_command(self, command):
- """Execute the provided command and send ouput to panel.
-
- Because the implementation of subprocess can deadlock on windows, we use
- a Queue that we write to from another thread to avoid blocking on IO.
-
- Args:
- command: A list containing the command to execute and it's arguments.
- Returns:
- The exit code of the process running the command or,
- 1 if we got interrupted.
- -1 if we couldn't start the process
- -2 if we couldn't poll the running process
- """
- logging.debug("Running command: %s", command)
-
- def EnqueueOutput(out, queue):
- """Read all the output from the given handle and insert it into the queue.
-
- Args:
- queue: The Queue object to write to.
- """
- while True:
- # This readline will block until there is either new input or the handle
- # is closed. Readline will only return None once the handle is close, so
- # even if the output is being produced slowly, this function won't exit
- # early.
- # The potential dealock here is acceptable because this isn't run on the
- # main thread.
- data = out.readline()
- if not data:
- break
- queue.put(data, block=True)
- out.close()
-
- try:
- proc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True,
- stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
- except OSError, e:
- logging.exception('Execution of %s raised exception: %s.', (command, e))
- return -1
-
- # Use a Queue to pass the text from the reading thread to this one.
- stdout_queue = Queue.Queue()
- stdout_thread = threading.Thread(target=EnqueueOutput,
- args=(proc.stdout, stdout_queue))
- stdout_thread.daemon = True # Ensure this exits if the parent dies
- stdout_thread.start()
-
- # We use the self.interrupted flag to stop this thread.
- while not self.interrupted:
- try:
- exit_code = proc.poll()
- except OSError, e:
- logging.exception('Polling execution of %s raised exception: %s.',
- command, e)
- return -2
-
- # Try to read output content from the queue
- current_content = ""
- for _ in range(2048):
- try:
- current_content += stdout_queue.get_nowait()
- except Queue.Empty:
- break
- self.update_panel_text(current_content)
- current_content = ""
- if exit_code is not None:
- while stdout_thread.isAlive() or not stdout_queue.empty():
- try:
- current_content += stdout_queue.get(block=True, timeout=1)
- except Queue.Empty:
- # Queue could still potentially contain more input later.
- pass
- time_length = datetime.datetime.now() - self.start_time
- self.update_panel_text("%s\nDone!\n(%s seconds)" %
- (current_content, time_length.seconds))
- return exit_code
- # We sleep a little to give the child process a chance to move forward
- # before we poll it again.
- time.sleep(0.1)
-
- # If we get here, it's because we were interrupted, kill the process.
- proc.terminate()
- return 1
-
- def run(self, edit, target_build):
- """The method called by Sublime Text to execute our command.
-
- Note that this command is a toggle, so if the thread is are already running,
- calling run will interrupt it.
-
- Args:
- edit: Sumblime Text specific edit brace.
- target_build: Release/Debug/Other... Used for the subfolder of out.
- """
- # There can only be one... If we are running, interrupt and return.
- if self.thread and self.thread.is_alive():
- self.interrupted = True
- self.thread.join(5.0)
- self.update_panel_text("\n\nInterrupted current command:\n%s\n" % command)
- self.thread = None
- return
-
- # It's nice to display how long it took to build.
- self.start_time = datetime.datetime.now()
- # Output our results in the same panel as a regular build.
- self.output_panel = self.view.window().get_output_panel("exec")
- self.output_panel.set_read_only(True)
- self.view.window().run_command("show_panel", {"panel": "output.exec"})
- # TODO(mad): Not sure if the project folder is always the first one... ???
- project_folder = self.view.window().folders()[0]
- self.update_panel_text("Compiling current file %s\n" %
- self.view.file_name())
- # The file must be somewhere under the project folder...
- if (project_folder.lower() !=
- self.view.file_name()[:len(project_folder)].lower()):
- self.update_panel_text(
- "ERROR: File %s is not in current project folder %s\n" %
- (self.view.file_name(), project_folder))
- else:
- # Look for a .ninja file that contains our current file.
- logging.debug("Searching for Ninja target")
- file_relative_path = self.view.file_name()[len(project_folder) + 1:]
- output_dir = "%s\\out\\%s" % (project_folder, target_build)
- matches = []
- for root, dirnames, filenames in os.walk(output_dir):
- for filename in fnmatch.filter(filenames, '*.ninja'):
- matches.append(os.path.join(root, filename))
- logging.debug("Found %d Ninja targets", len(matches))
- # The project file name is needed to construct the full Ninja target path.
- project_file = None
- for ninja_file in matches:
- for line in open(ninja_file):
- if file_relative_path in line:
- project_file = os.path.basename(ninja_file)
- break
- if project_file is None:
- self.update_panel_text(
- "ERROR: File %s is not in any Ninja file under %s" %
- (file_relative_path, output_dir))
- else:
- filename = os.path.splitext(os.path.basename(file_relative_path))[0]
- target = "obj\\%s\\%s.%s.obj" % (os.path.dirname(file_relative_path),
- os.path.splitext(project_file)[0],
- filename)
- command = [
- "ninja", "-C", "%s\\out\\%s" % (project_folder, target_build),
- target]
- self.interrupted = False
- self.thread = threading.Thread(target=self.execute_command,
- kwargs={"command":command})
- self.thread.start()
-
- time_length = datetime.datetime.now() - self.start_time
- logging.debug("Took %s seconds on UI thread to startup",
- time_length.seconds)
- self.view.window().focus_view(self.view)
diff --git a/chromium/docs/website/site/developers/sublime-text/index.md b/chromium/docs/website/site/developers/sublime-text/index.md
deleted file mode 100644
index 367ba40c6c8..00000000000
--- a/chromium/docs/website/site/developers/sublime-text/index.md
+++ /dev/null
@@ -1,475 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: sublime-text
-title: Using Sublime Text as your IDE
----
-
-## The below instructions are outdated.
-
-## New instructions:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/sublime_ide.md>
-
-## [TOC]
-
-## [<img alt="image" src="/developers/sublime-text/SublimeExample.png">](/developers/sublime-text/SublimeExample.png)
-
-## What is Sublime Text?
-
-It's a fast, powerful and easily extensible code editor. Check out some of the
-demos on the site for a quick visual demonstration.
-
-Some of its benefits include:
-
-* Project support.
-* Theme support.
-* Works on Mac, Windows and Linux.
-* No need to close and re-open during a `gclient sync`.
-* Supports many of the great editing features found in popular IDE's
- like Visual Studio, Eclipse and SlickEdit.
-* Doesn't go to lunch while you're typing.
-* The UI and keyboard shortcuts are pretty standard (e.g. saving a
- file is still Ctrl+S on Windows).
-* It's inexpensive and you can evaluate it (fully functional) for
- free.
-
-## Installing Sublime Text 2
-
-Download and install from here: <http://www.sublimetext.com/>
-
-Help and general documentation is available here:
-<http://www.sublimetext.com/docs/2/>
-
-*Assuming you have access to the right repositories, you can also install
-Sublime via apt-get on Linux.*
-
-## Preferences
-
-Sublime configuration is done via JSON files. So the UI for configuring the text
-editor is simply a text editor. Same goes for project files, key bindings etc.
-
-To modify the default preferences, go to the Preferences menu and select
-Settings-Default. Note that if you would rather like to make these settings user
-specific, select Settings - User as this applies there as well. The difference
-is that the default settings file already contains many settings that you might
-want to modify.
-
-Here are some settings that you might want to change (look these variables up in
-the settings file and modify their value, you should not have to add them):
-
-```none
-    "rulers": [80],
-    "tab_size": 2,
-    "trim_trailing_white_space_on_save": true,
-    "ensure_newline_at_eof_on_save": true,
-    "translate_tabs_to_spaces" : true
-```
-
-The settings take effect as soon as you save the file.
-
-If you've got a big monitor and are used to viewing more than one source file at
-a time, you can use the View-&gt;Layout feature to split the view up into
-columns and/or rows and look at multiple files at the same time. There's also
-the Shift+F11, distraction free view that allows you to see nothing but code!
-?8-D Sublime also supports dragging tabs out into new windows as Chrome
-supports, so that might be useful as well.
-
-*One thing to be aware of when editing these JSON files is that Sublime's JSON
-parser is slightly stricter than what you might be used to from editing e.g. GYP
-files. In particular Sublime does not like it if you end a collection with a
-comma. This is legal: {"foo", "bar"} but not this: {"foo", "bar", }. You have
-been warned.*
-
-## Project files
-
-Like configuration files, project files are just user editable JSON files.
-
-Here's a very simple project file that was created for WebRTC and should be
-saved in the parent folder of the trunk folder (name it webrtc.sublime-project).
-It's as bare bones as it gets, so when you open this project file, you'll
-probably see all sorts of files that you aren't interested in.
-
-```none
-{
- "folders":
- [
- {
- "path": "trunk"
- }
- ]
-}
-```
-
-Here is a slightly more advanced example that has exclusions to reduce clutter.
-This one was made for Chrome on a Windows machine and has some Visual Studio
-specific excludes. Save this file in the same directory as your .gclient file
-and use the .sublime-project extension (e.g. chrome.sublime-project) and then
-open it up in Sublime.
-
-```none
-{
- "folders":
- [
- {
- "path": "src",
- "name": "src",
- "file_exclude_patterns": [
- "*.vcproj",
- "*.vcxproj",
- "*.sln",
- "*.gitignore",
- "*.gitmodules",
- "*.vcxproj.*"
- ],
- "folder_exclude_patterns": [
-   "build",
-   "out",
-   "third_party",
-   ".git",
-   "Debug",
-   "Release"
- ]
- }
- ]
-}
-```
-
-## Navigating the project
-
-Here are some basic ways to get you started browsing the source code.
-
-* **"Goto Anything" or Ctrl+P** is how you can quickly open a file or
- go to a definition of a type such as a class. Just press Ctrl+P and
- start typing.
-* **Open source/header file:** If you're in a header file, press Alt+O
- to open up the corresponding source file and vice versa. For more
- similar features check out the Goto-&gt;Switch File submenu.
-* **"Go to definition"**: Right click a symbol and select "Navigate to
- Definition". A more powerful way to navigate symbols is by using the
- Ctags extension and use the Ctrl+T,Ctrl+T shortcut. See the section
- about source code indexing below.
-
-## Enable source code indexing
-
-For a fast way to look up symbols, we recommend installing the CTags plugin. we
-also recommend installing Sublime's Package Control package manager, so let's
-start with that.
-
-* Install the Sublime Package Control package:
- <https://packagecontrol.io/installation>
-* Install Exuberant Ctags and make sure that ctags is in your path:
- <http://ctags.sourceforge.net/>
- * On linux you should be able to just do: sudo apt-get install
- ctags
-* Install the Ctags plugin: Ctrl+Shift+P and type "Package Control:
- Install Package"
-
-Once installed, you'll get an entry in the context menu when you right click the
-top level folder(s) in your project that allow you to build the Ctags database.
-If you're working in a Chrome project however, **do not do that at this point**,
-since it will index much more than you actually want. Instead, do one of:
-
-1. Create a batch file (e.g. ctags_builder.bat) that you can run either
- manually or automatically after you do a gclient sync:
-
- ```none
- ctags --languages=C++ --exclude=third_party --exclude=.git --exclude=build --exclude=out -R -f .tmp_tags & ctags --languages=C++ -a -R -f .tmp_tags third_party\platformsdk_win8 & ctags --languages=C++ -a -R -f .tmp_tags third_party\WebKit & move /Y .tmp_tags .tags
- ```
-
- This takes a couple of minutes to run, but you can work while it is
- indexing.
-2. Edit the CTags.sublime-settings file for the ctags plugin so that it
- runs ctags with the above parameters. **Note**: the above is a batch
- file - don't simply copy all of it verbatim and paste it into the
- CTags settings file :-)
-
-Once installed, you can quickly look up symbols with Ctrl+t, Ctrl+t etc. More
-information here: <https://github.com/SublimeText/CTags>
-
-One more hint - Edit your .gitignore file (under %USERPROFILE% or ~/) so that
-git ignores the .tags file. You don't want to commit it. :)
-
-If you don't have a .gitignore in your profile directory, you can tell git about
-it with this command:
-
-```none
-Windows: git config --global core.excludesfile %USERPROFILE%\.gitignore
-Mac, Linux: git config --global core.excludesfile ~/.gitignore
-```
-
-## Building with ninja
-
-Assuming that you've got ninja properly configured and that you already have a
-project file as described above, here's how to build Chrome using ninja from
-within Sublime. For any other target, just replace the target name.
-
-Go to Tools-&gt;Build System-&gt;New build system and save this as a new build
-system:
-
-```none
-{
- "cmd": ["ninja", "-C", "out\\Debug", "chrome.exe"],
- "working_dir": "${project_path}\\src",
- "file_regex": "^[.\\\\/]*([a-z]?:?[\\w.\\\\/]+)[(:]([0-9]+)[):,]([0-9]+)?[:)]?(.*)$"
-}
-```
-
-file_regex explained for easier tweaking in future:
-
-<pre><code>
-Aims to capture the following error formats while respecting [Sublime's perl-like group matching](http://sublimetext.info/docs/en/reference/build_systems.html):
- 1. <i>d:\src\chrome\src\base\threading\sequenced_worker_pool.cc(670): error C2653: 'Foo': is not a class or namespace name</i>
- 2. <i>../../base/threading/sequenced_worker_pool.cc:670:26: error: use of undeclared identifier 'Foo'</i>
- <i>3. ../../base/process/memory_win.cc(18,26):  error: use of undeclared identifier 'Foo'</i>
- <i>4. ../..\src/heap/item-parallel-job.h(145,31):  error: expected ';' in 'for' statement specifier</i>
-"file_regex": "^[.\\\\/]*([a-z]?:?[\\w.\\-\\\\/]+)[(:]([0-9]+)[):,]([0-9]+)?[:)]?(.*)$"
-                (   0   ) (   1  )(      2      ) (3 ) (  4 ) ( 5 ) (  6   )( 7 )(8 )
-(0) Cut relative paths (which typically are relative to the out dir and targeting src/ which is already the "working_dir")
-(1) Match a drive letter if any
-(2) Match the rest of the file
-(1)+(2) Capture the "filename group"
-(3) File name is followed by open bracket or colon before line number
-(4) Capture "line number group"
-(5) Line # is either followed by close bracket (no column group) or comma/colon
-(6) Capture "column filename group" if any.
-(7) If (6) is non-empty there will be a closed bracket or another colon (but can't put it inside brackets as the "column filename group" only wants digits).
-(8) Everything else until EOL is the error message.
-</code></pre>
-
-*On Linux and Mac, fix the targets up appropriately, fwd slash instead of
-backslash, no .exe, etc*
-
-Linux example:
-
-```none
-{
- // Pass -j1024 if (and only if!) building with GOMA.
- "cmd": ["ninja", "-C", "out/Debug", "blink", "-j1024"],
- "working_dir": "${project_path}/src",
- // Ninja/GN build errors are build-dir relative, however file_regexp
- // is expected to produce project-relative paths, ignore the leading
- // ../../ to make that happen.
- // ../../(file_path):(line_number):(column):(error_message)
- "file_regex": "^../../([^:\n]*):([0-9]+):?([0-9]+)?:? (.*)$"
-}
-```
-
-or to avoid making ninja in the path or environment variables:
-
-```none
-{
- "cmd": ["/usr/local/google/home/MYUSERNAME/git/depot_tools/ninja", "-j", "150", "-C", ".", "chrome", "content_shell", "blink_tests"],
- "working_dir": "${project_path}/src/out/Release",
- "file_regex": "([^:\n]*):([0-9]+):?([0-9]+)?:? (.*)$",
- "variants":
-   [
-    {
-      "cmd": ["/usr/local/google/home/MYUSERNAME/git/depot_tools/ninja", "-j", "150", "-C", ".", "chrome", "content_shell", "blink_tests"],
-      "name": "chrome_debug_blink",
-      "working_dir": "${project_path}/src/out/Debug",
-      "file_regex": "([^:\n]*):([0-9]+):?([0-9]+)?:? (.*)$"
-    }
-  ]
-}
-```
-
-Further [build system
-documentation](http://docs.sublimetext.info/en/latest/reference/build_systems.html)
-or [older
-documentation](http://sublimetext.info/docs/en/reference/build_systems.html) (as
-of Nov 2014 older is more complete).
-
-This will make hitting Ctrl-B build chrome.exe (really quickly, thanks to
-ninja), F4 will navigate to the next build error, etc. If you're using Goma, you
-can play with something like: "cmd": \["ninja", ***"-j", "200",*** "-C",
-"out\\\\Debug", "chrome.exe"\],.
-
-You can also add build variants so that you can also have quick access to
-building other targets like unit_tests or browser_tests. You build description
-file could look like this:
-
-```none
-{ "cmd": ["ninja", "-j200", "-C", "out\\Debug", "chrome.exe"], "working_dir": "${project_path}\\src", "file_regex": "^[.\\\\/]*([a-z]?:?[\\w.\\\\/]+)[(:]([0-9]+)[):]([0-9]+)?:?(.*)$", "variants": [ { "cmd": ["ninja", "-j200", "-C", "out\\Debug", "unit_tests.exe"], "name": "unit_tests" }, { "cmd": ["ninja", "-j200", "-C", "out\\Debug", "browser_tests.exe"], "name": "browser_tests" } ]}
-```
-
-This way, you have separate key binding to start the unit or browser tests
-target build as follows:
-
-```none
- { "keys": ["ctrl+shift+u"], "command": "build", "args": {"variant": "unit_tests"} }, { "keys": ["ctrl+shift+b"], "command": "build", "args": {"variant": "browser_tests"} }
-```
-
-And keep using "ctrl+b" for a regular, "chrome.exe" build. Enjoy!
-
-## Example plugin
-
-Sublime has a Python console window and supports Python plugins. So if there's
-something you feel is missing, you can simply add it.
-
-Here's an example plugin (Tools-&gt;New Plugin) that runs cpplint (assuming
-depot_tools is in the path) for the current file and prints the output to
-Sublime's console window (Ctrl+\`):
-
-```none
-import sublime, sublime_plugin
-import subprocess
-class RunLintCommand(sublime_plugin.TextCommand):
-  def run(self, edit):
-      command = ["cpplint.bat", self.view.file_name()]
-      process = subprocess.Popen(command, shell=True,
-            stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE)
-      print process.communicate()[1]
-```
-
-Or, in Sublime Text 3:
-
-from __future__ import print_function
-
-import sublime, sublime_plugin
-
-import subprocess
-
-class RunLintCommand(sublime_plugin.TextCommand):
-
-def run(self, edit):
-
-print("AMI: %s" % self.view.file_name())
-
-command = \["/home/fischman/src/depot_tools/cpplint.py", self.view.file_name()\]
-
-process = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE,
-stderr=subprocess.PIPE)
-
-output, error = process.communicate()
-
-if error:
-
-` print(error)`
-
-Save this file as run_lint.py (Sublime will suggest the right location when you
-save the plugin - Packages\\User).
-
-You can run the command via the console like so:
-
-```none
-view.run_command('run_lint')
-```
-
-Note that here's an interesting thing in how Sublime works. CamelCaps are
-converted to lower_case_with_undescore format. Note also that although the
-documentation currently has information about "runCommand" member method for the
-view object, this too is now subject to that convention.
-
-Taking this a step further, you can create a keybinding for your new plugin.
-Here's an example for how you could add a binding to your User key bindings
-(Preferences-&gt;Key Bindings - User):
-
-```none
-[
-    {  
-        "keys": ["ctrl+shift+l"], "command": "run_lint"  
-    }
-]
-```
-
-Now, when you hit Ctrl+Shift+L, cpplint will be run for the currently active
-view. Here's an example output from the console window:
-
-```none
-D:\src\cgit\src\content\browser\browsing_instance.cc:69:  Add #include <string> for string  [build/include_what_you_use] [4]
-Done processing D:\src\cgit\src\content\browser\browsing_instance.cc
-Total errors found: 1
-```
-
-As a side note, if you run into problems with the documentation as I did above,
-it's useful to just use Python's ability to dump all properties of an object
-with the dir() function:
-
-```none
->>> dir(view)
-['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add_regions', 'begin_edit', 'buffer_id', 'classify', 'command_history', 'em_width', 'encoding', 'end_edit', 'erase', 'erase_regions', 'erase_status', 'extract_completions', 'extract_scope', ... <snip>
-```
-
-### Compile current file using Ninja
-
-As a more complex plug in example, look at the attached python file:
-[compile_current_file.py](/developers/sublime-text/compile_current_file.py).
-This plugin will compile the current file with Ninja, so will start by making
-sure that all this file's project depends on has been built before, and then
-build only that file.
-
-First, it confirms that the file is indeed part of the current project (by
-making sure it's under the &lt;project_root&gt; folder, which is taken from the
-self.view.window().folders() array, the first one seems to always be the project
-folder when one is loaded). Then it looks for the file in all the .ninja build
-files under the &lt;project_root&gt;\\out\\&lt;target_build&gt;, where
-&lt;target_build&gt; must be specified as an argument to the
-compile_current_file command. Using the proper target for this file compilation,
-it starts Ninja from a background thread and send the results to the output.exec
-panel (the same one used by the build system of Sublime Text 2). So you can use
-key bindings like these two, to build the current file in either Debug or
-Release mode:
-
-```none
-  { "keys": ["ctrl+f7"], "command": "compile_current_file", "args": {"target_build": "Debug"} },
-  { "keys": ["ctrl+shift+f7"], "command": "compile_current_file", "args": {"target_build": "Release"} },
-```
-
-If you are having trouble with this plugin, you can set the python logging level
-to DEBUG in the console and see some debug output.
-
-### Format selection (or area around cursor) using clang-format
-
-Copy buildtools/clang_format/scripts/clang-format-sublime.py to
-~/.config/sublime-text-3/Packages/User/ (or -2 if still on ST2) and add
-something like this to Preferences-&gt;Key Bindings - User:
-
-```none
-"keys": ["ctrl+shift+c"], "command": "clang_format",
-```
-
-Miscellaneous tips
-
-* To synchronize the project sidebar with the currently open file,
- right click in the text editor and select "Reveal in Side Bar".
- Alternatively you can install the **SyncedSideBar** sublime package
- (via the Package Manager) to have this happen automatically like in
- Eclipse.
-* If you're used to hitting a key combination to trigger a build (e.g.
- Ctrl+Shift+B in Visual Studio) and would like to continue to do so,
- add this to your Preferences-&gt;Key Bindings - User file:
- * { "keys": \["ctrl+shift+b"\], "command": "show_panel", "args":
- {"panel": "output.exec"} }
-* Install the **Open-Include** plugin (Ctrl+Shift+P, type:"Install
- Package", type:"Open Include"). Then just put your cursor inside an
- #include path, hit Alt+D and voila, you're there.
- * If you want to take that a step further, add an entry to the
- right-click context menu by creating a text file named
- "context.sublime-menu" under "%APPDATA%\\Sublime Text
- 2\\Packages\\User" with the following content:
- \[ { "command": "open_include", "caption": "Open Include" } \]
-
-## Other useful packages
-
-Assuming you've installed Package Control already
-(<https://packagecontrol.io/installation>) you can easily install more packages
-via:
-
-1. Open Command Palette (Ctrl-Shift-P)
-2. Type "Package Control: Install Package" (note: given ST's string
- match is amazing you can just type something like "instp" and it
- will find it :-)).
-
-A few recommended packages:
-
-* [Case Conversion](https://github.com/jdc0589/CaseConversion)
- (automatically swap casing of selected text -- works marvel with
- multi-select -- go from a kConstantNames to ENUM_NAMES in seconds)
-* CTags (see detailed setup info above).
-* Git
-* Open-Include
-* [Text Pastry](https://github.com/duydao/Text-Pastry) (insert
- incremental number sequences with multi-select, etc.)
-* Wrap Plus (auto-wrap a comment block to 80 columns with Alt-Q) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/index.md b/chromium/docs/website/site/developers/tech-talk-videos/index.md
deleted file mode 100644
index 06ad4c046f1..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: tech-talk-videos
-title: 'Tech Talks: Videos & Presentations'
----
-
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/release-process/buildbot_screenshot.PNG.sha1 b/chromium/docs/website/site/developers/tech-talk-videos/release-process/buildbot_screenshot.PNG.sha1
deleted file mode 100644
index 07cb65dbc4d..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/release-process/buildbot_screenshot.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-670d9d348649a3e4dd6b2755e028a989b516e1ac \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/release-process/chromium-24.png.sha1 b/chromium/docs/website/site/developers/tech-talk-videos/release-process/chromium-24.png.sha1
deleted file mode 100644
index f4f9fcf70b1..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/release-process/chromium-24.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d427dd674c6789fbd33a8c01a3afde96031f1b6a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/release-process/death_metal_rooster3.png.sha1 b/chromium/docs/website/site/developers/tech-talk-videos/release-process/death_metal_rooster3.png.sha1
deleted file mode 100644
index f6dc41e64ad..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/release-process/death_metal_rooster3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4b462def7ef95e102cf6e33abae31969ad787d0c \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/release-process/index.md b/chromium/docs/website/site/developers/tech-talk-videos/release-process/index.md
deleted file mode 100644
index 1bbe747a213..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/release-process/index.md
+++ /dev/null
@@ -1,465 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tech-talk-videos
- - 'Tech Talks: Videos & Presentations'
-page_name: release-process
-title: Release process
----
-
-[TOC]
-
-**Update: See**
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/process/release_cycle.md#Overview>
-for more information.
-
-**OPINION EXPRESSED IN THIS DOCUMENT ARE THE VIEW OF MARC-ANTOINE RUEL AND ARE
-NOT REPRESENTATIVE OF THE VIEW OF HIS EMPLOYER, GOOGLE INC.** &lt;/blink&gt;
-
-## Google Chrome Infrastructure
-
-### Upgrading 200 million users within 6 hours
-
-Initially presented at [agilis.is](http://agilis.is) conference in Reykjavik,
-Iceland on 2011-11-14 by Marc-Antoine Ruel. This document is a flattened version
-of the presentation done there.
-
-As a team, we provide the infrastructure necessary to enable the current release
-process, which I'll describe during the presentation.
-
-## Web vs Client app
-
-### Web app? [<img alt="Google Chrome icon" src="/developers/tech-talk-videos/release-process/chromium-24.png">](/developers/tech-talk-videos/release-process/chromium-24.png) Client app?
-
-You cannot approach client project infrastructure the same way you do for web
-services. The deployment cost is largely different. The feedback loop, to know
-what's happening on the user's machine, has much higher latency.
-
-Most web services and web sites use really fast release cycles. I've heard some
-big site having a 6 months release cycle but that's not the norm. And I presume
-if you are here today, you don't want to be on the laggard side. I'm going to
-focus this presentation on client side which has totally different and
-interesting challenges. We wanted Google Chrome to *feel* like the web and *not*
-like shrink wrapped software. My talk is focusing on techniques used to enable
-this vision.
-
-## Points of friction
-
-Reduce friction for
-
-* devs
-* users
-* software
-* security fixes
-
-First, you cannot be agile if you have friction along the path. Being agile is
-all about reducing the friction from the inital requirement, to the updated
-requirements to the end result, all in an iterative feedback loop. If you don't
-look at the whole picture, the end-to-end experience breaks down.
-
-To ensure a delightful experience for the user, we need to react fast. I'll
-focus on four points in this presentation with how we addressed each of these
-friction points.
-
-## Friction for devs
-
-### « All I want is to git push »
-
-Let's start with friction for developers. That what most people thinks about for
-agile development, staying up to date with the requirement from your client and
-updating accordingly. But in practice that's not sufficient. There's mentality
-and practice changes to ensure that the lean small team agility scales to
-hundreds of developers.
-
-## Feature branches
-
-### Big no! no!
-
-Feature branches are the worst of all evils. Let me explain. Most of the time,
-the feature doesn't work well on the branch, but *everytime*, it doesn't work at
-all when merged back on the master branch. Even more, they are disruptive to
-merge and most of all; they always need to be merged yesterday.
-
-The incentives are just plain wrong. First, it's too easy to underestimate the
-cost of the feature branch for a product manager. The developer wants a stable
-code base to work on. But staying on old code means that he doesn't see any
-refactoring going on, so when he merges back, he may need to redo his change
-completely on the new code. What this means is that after a while, nobody evey
-dare to refactor the code in fear of retaliation.
-
-## Working on master
-
-### Let's all work together
-
-Most of our features are developed directly on the master branch and disabled
-just after forking a release branch if not stable *worthy*. Let me do a pause
-here, we have 4 release channels in increasing order of freshness, stable, beta,
-developer and canary. The canary strives to be a daily build. That's why the
-canary is very unstable as all the experimental features are enabled, once a
-developer release branch is made, all the experimental features that have no
-chance to go to stable in their current state are disabled on the branch.
-They'll have their chance in 6 weeks as we do new major release every 6 weeks.
-Devs like to work on a branch that works for them so they can do a fast
-code/build/debug cycle. If unrelated breaking change breaks their local
-checkout, they will be staled. Scaling up the number of developers means scaling
-up the number of commits per hour.
-
-## Code review
-
-### You thought you knew how to code?
-
-First line of defense is code reviews. We require it for almost all of the
-commits going in. There are exceptions but in general, not doing code reviews is
-frowned upon. Code reviews are a great tool to improve the code quality before
-it gets checked in, and has the side effect of helping new contributors to ramp
-up much faster by getting immediate feedback for their first change. Having
-effective code reviews require the developers to care about giving thoughtful
-feedback. That's a culture that is hard to enforce after starting a project.
-
-Question: Who does systematic code reviews on their projects?
-
-## Continuous integration
-
-[<img alt="http://build.chromium.org/p/chromium/console screenshot"
-src="/developers/tech-talk-videos/release-process/buildbot_screenshot.PNG"
-height=149
-width=200>](/developers/tech-talk-videos/release-process/buildbot_screenshot.PNG)
-
-The second line of defense is continuous integration.
-
-Question: Who uses continuous integration in their projects?
-
-To work on master branch, the code must work. It's all about making sure each
-and *every single commit* is valid *enough* so that all the main functionality
-of the project is kept. Let me precise a little bit here. We don't want to
-product to be completely perfect; good enough will suffice. Good enough that we
-can actually release a build directly from it. That's a huge mentality ship for
-certain developers but that's a requirement. This also requires a huge
-investment in the infrastructure. In practice, [we use
-buildbot](http://buildbot.net/), which is a open source python framework to
-manage a centralized build system. It's also used by [WebKit and Mozilla and
-others](http://trac.buildbot.net/wiki/SuccessStories). In practice, the tool
-doesn't matter, the process matters. We try to keep the testing cycle as low as
-possible to reduce the latency so the feedback loop from commit to test results
-is as tight as possible. To help with reducing tree breakage in the first place,
-we also use pre commit tests.
-
-## Keep master from exploding
-
-### What is your legacy?
-
-A colleague wrote recently; we often discuss our software engineering practices,
-especially code review and testing, but I think that sometimes the reasons for
-our practices get lost in the mix. We aim:
-
-1. to keep trunk shippable; and
-2. to have enough automated testing to continually prove that trunk is
- shippable.
-
-This is in support of our goal to release as often as possible, which makes us
-more agile. We absorb the extra costs of thorough code reviews and testing since
-we believe that these things help keep us agile and reduce costs in the long
-run. Code reviews and automated fuzzing also reduce security risks.
-
-These goals and practices are really suited to the age of the Internet, where
-software deployment is fast and easy. Compare that to a few years ago where
-people where still getting their software on DVDs!
-
-Question: Who installed software on DVD/CD this year?
-
-It's especially true for server-side only projects but it is now also true for
-projects with fast auto-updates à la Google Chrome.
-
-## Pipelining releases
-
-[<img alt="release pipeline graph"
-src="/developers/tech-talk-videos/release-process/release%20process%20version%202.png"
-height=118
-width=200>](/developers/tech-talk-videos/release-process/release%20process%20version%202.png)
-
-I briefly talked about our release process but I want to take a pause to explain
-it more in depth.
-
-This busy graphic represents our release process. Each line is a branch in our
-source tree. Horizontal lines are what is released to our users. An aborted
-branch is one that didn't pass QA. The red section is the developer channel, the
-yellow section is the beta channel and the green section is the stable release.
-
-We also have what we call the canary channel but I'm not depicting it here
-because it's a release done directly from trunk. This is to prove that trunk is
-always stable enough to make a release out of it. The canary channel strives to
-be daily or at least every few days. The developer channel is roughly weekly. We
-then release one major beta channel and stable channel release every 6 weeks. A
-dot release can be done on the beta channel or stable channel to introduce more
-fixes, which is depicted here as branch inside the same channel.
-
-Indeed, we have very good people that manages these branches. The trick to make
-it workable is to send our dev channel release in the field, look for bugs found
-out and merge fixes back in the beta or stable channel as needed. Also, and let
-me put emphasis here, every code change is done on the trunk first and then
-merged back to a branch. No change is ever directly done on a branch.
-
-We try to have our branches as short lived as possible. With a 6 weeks of dev,
-beta and stable channels, a branch lives roughly for 18 weeks, or 3 months.
-Which means that we don't care about any code that is more than 3 months old,
-which helps us tremendously to stay flexible on the code base refactoring.
-That's really a huge advantage. The pipelining here is really what makes us much
-more efficient because we get different kind of feedback from each of the
-channels. Let's talk about user feedback.
-
-## Friction for users
-
-Users don't like questions and second, they don't like to be interrupted. Many
-of them don't want to do the the cognitive effort of task switching when it's
-not their will. Every single dialog box is a context switch. So we strive to
-only ask meaningful questions. For example, that's the main reason we are not
-installing in the Program Files directory, it's just too much friction for the
-user. Delight the user and make the application as easy to use as a web page.
-
-FYI, UAC prompt is the dialog box with all the remaining of the screen being
-grayed out, specific to Windows.
-
-## Update on restart
-
-### Please! Do not prompt on start!
-
-[<img alt="fake update dialog"
-src="/developers/tech-talk-videos/release-process/update_software_popup.png">](/developers/tech-talk-videos/release-process/update_software_popup.png)
-
-As an example, I was away from my main workstation for a week and upon reboot,
-one piece of software and one device driver nagged me to be updated. After 10
-minutes, too many clicks and 90 megs of download, I finally could resume
-working. And as an OS, don't tell me you have 8 new important updates to
-install. You are the OS, you should have One update to install at any given
-time, and One and only one per supported applications.
-
-Thanks for wasting my precious time, folks. So please don't make your users
-angry at you. Nobody likes a dialog box poping during a web based presentation.
-
-The reason I'm raising this point is that it's important to reduce the number of
-different state each client can be. As you increase the number of one-off
-patches, having users to upgrade multiple modules independently, you increase
-the odds of something going bad. So it's easier, at least for us, to make sure
-everyone gets the same bits and disable functionality as needed.
-
-Question: As an example, who used Google Talk video chat or Google+ Hangout? Who
-recalls installing the plugin to make that work? Who recalls updating the
-plugin? Well, it probably updated since you installed it, you just never
-realized and you probably don't care.
-
-## Frequent releases
-
-### Gradual, gentle changes
-
-By releasing more frequently, the number of changes per upgrade is reduced. This
-means that users will see smaller changes more frequently, instead of big
-changes every year or so. This makes it easier for users on the long run, as you
-don't need to do big training for non-tech-savvy users. Also, users become used
-to see gradual changes occuring, which reduces the natural change aversion some
-users may tend to have.
-
-## User feedback channels
-
-[<img alt="I felt a great disturbance in the Force ...as if millions of users
-suddenly cried out in terror and were suddenly silenced."
-src="/developers/tech-talk-videos/release-process/starwars-disturbance2.jpg"
-height=139
-width=320>](/developers/tech-talk-videos/release-process/starwars-disturbance2.jpg)
-
-What if you do an error? Getting good feedback from your users is not a simple
-task. They may not know what they want. They may not understand what is
-happening. « Google stopped working ». Maybe the user means he got power outage.
-So getting usage statistics is gold. In our case, we chose for an opt-in. So the
-user has to check a box to have Google Chrome send usage statistics and crash
-reports.
-
-Also, decoupling the automatic update software from the client software helps
-recovering in case of failure. I recommend to keep them as separate as possible
-from a software version standpoint. Especially when the failure comes from third
-party software; In our case, we use Omaha, which we open sourced. I'll leave a
-reference at the end of the presentation.
-
-## Testing in the field
-
-### Continuously hacking your users \*
-
-#### \* yes, you are a guinea pig
-
-One interesting thing once a project grows large enough is to be able to do
-controlled A/B testing with a small percentage of your users. To be able to do
-this, all the infrastructure must be set to be able to disable the experiment
-really fast if something goes bad. Also, the intrinsic goal of the testing is to
-gather feedback so we must make sure we are getting it. On a web service, it's
-relatively easy to manage. It's much more fun to do on client applications. We
-made [privacy aware anonymous feedback
-infrastructure](http://www.google.com/chrome/intl/en/more/privacy.html) to
-gather experiment information only from users who opted to send statistics.
-
-This gives valuable information for things where the test matrix is too large.
-Here are a few examples: test OpenGL implementation robustness, test
-effectiveness of different on disk web cache heuristics, implement new SSL
-designs and verify its compatibility in the field, tweak omnibox or autofill
-heuristics, network packet retries heuristics, etc. Lots of things where it's
-really about tweaking the best values or the best automatic selection of values.
-The important thing here is to correctly do the measurement and do it both
-anonymously and in an non-intrusive way.
-
-## Friction for software
-
-In that case, I'm specifically referring to third party software. There's the
-third party software extending the browser, like plugins and extensions, but the
-actual web pages are also to be considered third party software, since it's code
-interpreted inside the browser. Each new version of the browser may affect the
-way the plugins, extensions or web pages are handled.
-
-## Don't break the web
-
-### Not Everyone Uses
-### body {
-### text-transform: capitalize
-### }
-### But We Still Support It \*
-
-#### \* Marketers Really Need It
-
-Similarly to how Microsoft trumped compatibility with older applications in each
-of their Windows OS releases, web browsers strive to not *break the web*. And
-that's true for every web browser. The testing matrix is much larger than what
-we can actually test, so it's more efficient for us to ship the developer
-channel often and early, and if we break things people care about, we'll get
-feedback about it soon enough. Indeed everytime a regression is detected in
-javascript, css, html parsing, or that we found a new http proxy misbehaving in
-an interesting new way, a regression test is added. But be realistic here, that
-is still not enough because the gap between the spec, like the HTTP spec, and
-third party programmers expectations is too large.
-
-## Don't break extensions
-
-[<img alt="Death Metal Rooster extension screen shot"
-src="/developers/tech-talk-videos/release-process/death_metal_rooster3.png"
-height=123
-width=200>](/developers/tech-talk-videos/release-process/death_metal_rooster3.png)
-
-In addition, we don't want to break the 62 users of this extension. Simple
-things need to stay simple. In that case, it may mean either versioning the API
-and eventually dropping the older API versions or being backward compatible all
-the way up to the initial version or being just very relax in the bindings and
-hoping for the best.
-
-Actually, we solve the problem since we make the update ping infrastructure
-Google Chrome uses for itself available for extensions too. This is a huge
-benefit for extension developers because it's like having all your users running
-tip of tree all the time, also on the latest version of the browser, with only a
-worst-case propagation delay of 5 hours. All this is *free* for extension
-writers. This is a huge difference from the experience on other web browsers.
-And extensions are updated as you are using the web browser, without ever
-requiring the user to reopen his windows to be updated. This is a huge benefit
-for the users since I found out upgrading extensions can be very annoying in
-some case for some applications.
-
-## Show respect
-
-### It's harder than it appears
-
-Unless your process is running on dedicated hardware like a gaming console, you
-need to try to show respect to the other processes so the OS doesn't misbehave.
-Here's an example of things we do. Bombing the system with a number of utility
-processes. Using too much physical memory. Using too much bandwidth for
-automatic upgrades.
-
-One workaround is to use incremental upgrades so we only download the delta.
-Another is to limit the number of processes and further more by the amount of
-physical memory. The processes use shared memory as much as they can and trim
-the in-cache memory aggressively. We slow down background tabs to reduce CPU
-usage, to increase battery life. We slow down the various timers while on
-battery, also to increase battery life. But still, what if you are breaking
-hooks from an anti-virus software or even worst, from malware hooking on
-kernel32, which brings me to...
-
-## Don't expect to be respected
-
-### What do you do with malware crashing your app?
-### Who's *fault* is it?
-
-One recent issue was *what do you do if some security software thinks you are a
-virus and tries to delete your application*? This may mean pushing new code that
-will work around the problem. That's what we did, within half a day of learning
-about it so many users may even realized. To achieve this, your release team
-must always be ready to fire and manual QA must be minimal. I'm not trying to
-point fingers here, that's the kind of thing that cannot be tested by all
-security vendors. We just have to live with that possibility.
-
-But still, what if some malware hooks your process, and crashes because it fails
-to access the sandboxed process? Which brings me to...
-
-## Security
-
-### What is security?
-
-... security!
-
-Security can be viewed as making sure that no action is done on a user's behalf
-by a third party that could go against his will. If you have valuable
-information, people will try to hack you in all possible ways. Spoofing our DNS
-name, proxies serving fake SSL certificates and on the fly packet translation.
-We've seen it all. Many of these are hard to address from the web service
-directly. Having a end-to-end solution helps there, even if it is for a subset
-of users. You can't just think about security without looking at the overall
-picture. One important thing we developed is the Google Chrome sandbox. Feel
-free to meet me after the presentation if you'd like to talk about it.
-
-Always look for the easiest path, that's what crooks do. They are willing to
-invest a significant amount of time in searching to figure out holes in the
-security mechanisms. And once they find something, they will use it fast to
-affect as many people as they can.
-
-How do we address that?
-
-## You deploy fast?
-
-### Which is preferable?
-### Average upgrade delay of 1.5h or 3h?
-
-That's simple. Put your bits out as fast as you can. Seriously, our security
-guys were argumenting about the upgrade ping rate. Is it better to ping at every
-3hrs or 5hrs. Doing the check on startup is the worst time you can do that. The
-system is already CPU and I/O bound. But updating still means for most users to
-notify the user only if a real immediate risk is present. So the basic idea is
-to update the system but make it almost transparent and hopefully magical to the
-user. Subtle enough that most users won't realize but power users will act upon.
-In both Google Chrome and Chrome OS, we decided to add a little green arrow when
-an update is ready to be installed.
-
-## Enterprise deployment
-
-### Who's in charge to decide who's upgraded?
-
-Enterprises like to control deployment of the software used by their workforce.
-That's normal, a disruption in their workforce could cost a lot of money to the
-company. How to conciliate that with forced automatic upgrades? First of all,
-because of our release pipeline, they can canary themselves a few users on the
-beta channel or the dev channel, which gives them an astronomical 6 to 12 weeks
-to find out quirks and if it's not enough, they can delay stable update a bit
-more if really needed.
-
-We created tools for administrators to delay updates or apply policies to
-installations of Google Chrome or Chrome OS on their domain. What helps us, and
-them, here is that each upgrade only represents 6 weeks of changes that occured
-less than 3 months ago, so the freshness is always relatively good. Second, they
-have one package to control, not sixty billion small component upgrades to mess
-with. This reduces a lot the overhead of patches management. In the end,
-everyone wins with a more secure and simple environment.
-
-## References
-
-* Chromium and infrastructure
- * You are on the right site, feel free to navigate around!
-* Omaha (Windows updater)
- * [code.google.com/p/omaha](http://code.google.com/p/omaha)
-
-Note that I forgot to talk about Build Sheriffs, which are an important part of
-the cultural team mindset that helps making sure the team is make progress in a
-cohesive way.
-
-Obi-Wan Kenobi is copyright Lucasfilm \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/release-process/release process version 2.png.sha1 b/chromium/docs/website/site/developers/tech-talk-videos/release-process/release process version 2.png.sha1
deleted file mode 100644
index 04aeeb65dac..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/release-process/release process version 2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d763e81c3d9be79bd8f7f3c2fb694f2f6f4bb535 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/release-process/starwars-disturbance2.jpg.sha1 b/chromium/docs/website/site/developers/tech-talk-videos/release-process/starwars-disturbance2.jpg.sha1
deleted file mode 100644
index 4eff41c1f82..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/release-process/starwars-disturbance2.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dc437fc28211abed05b015895ecf20f6be44e6cc \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tech-talk-videos/release-process/update_software_popup.png.sha1 b/chromium/docs/website/site/developers/tech-talk-videos/release-process/update_software_popup.png.sha1
deleted file mode 100644
index d546fdbcd65..00000000000
--- a/chromium/docs/website/site/developers/tech-talk-videos/release-process/update_software_popup.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-40323461311d214452a6d0ae723b92c7a092349d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/technical-discussion-groups/index.md b/chromium/docs/website/site/developers/technical-discussion-groups/index.md
deleted file mode 100644
index 35e2bd777a0..00000000000
--- a/chromium/docs/website/site/developers/technical-discussion-groups/index.md
+++ /dev/null
@@ -1,312 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: technical-discussion-groups
-title: Technical Discussion Groups
----
-
-#### Feature requests, help/support queries, or other end user questions:
-
-#### [Google Chrome Help Center](https://www.google.com/support/chrome/) or [Discussion Groups](/developers/discussion-groups).
-
-#### Technical discussion:
-
-* [chromium-dev](https://groups.google.com/a/chromium.org/group/chromium-dev)
- * The engineering (developer) team uses this to discuss technical
- issues and for announcements. This is a moderate volume, high
- technical content mailing list. Topical posts include items such
- as plans to reduce memory consumption, discussion around how
- certain code areas are implemented and how to extend or improve
- such code, announcements of new tests being added to the
- builders, and so forth.
-
-**Sub Lists:**
-
-* [android-webview-dev](https://groups.google.com/a/chromium.org/forum/#!forum/android-webview-dev)
- * Technical discussions about the Android WebView
- (src/android_webview).
-* [animations-dev](https://groups.google.com/a/chromium.org/forum/#!forum/animations-dev)
- * Technical discussions about animations in blink.
-* [apps-dev](https://groups.google.com/a/chromium.org/forum/#!forum/apps-dev)
- * Implementation discussions for the Chrome Packaged Apps platform
- and APIs.
-* [attribution-reporting-api-dev](https://groups.google.com/u/1/a/chromium.org/g/attribution-reporting-api-dev)
- * A place to discuss implementation questions about the
- [Attribution Reporting
- API](https://github.com/WICG/conversion-measurement-api), and to
- notify developers of upcoming changes.
-* [bfcache-dev](https://groups.google.com/a/chromium.org/forum/#!forum/bfcache-dev)
- * Back-Forward Cache. Speeds up common uses of the 'back' browser
- button. [Implementation
- status](https://www.chromestatus.com/feature/5815270035685376).
-* [bidi-dev](https://groups.google.com/a/chromium.org/g/bidi-dev)
- * Discussion about the [WebDriver
- BiDi](https://w3c.github.io/webdriver-bidi/) standard and its
- implementation in Chromium.
-* [binary-size](https://groups.google.com/a/chromium.org/forum/#!forum/binary-size)
- * Discussion about measuring and/or reducing binary size.
-* [blink-dev](https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev)
- * List for discussing technical issues related to the Blink
- rendering engine.
-* [blink-network-dev](https://groups.google.com/a/chromium.org/forum/#!forum/blink-network-dev)
- * Technical discussions about the web platform networking APIs -
- covering XMLHttpRequest, Fetch API, Streams, WebSocket, etc.
-* [chromium-accessibility](https://groups.google.com/a/chromium.org/group/chromium-accessibility)
- * The engineering (developer) team uses this to discuss technical
- issues related to Chromium accessibility, including
- compatibility with assistive technology such as screen readers,
- magnifiers, voice controllers, and more.
-* [chromium-apps](https://groups.google.com/a/chromium.org/group/chromium-apps)
- * This list is for people creating apps for Chromium or Google
- Chrome. Discussion about upcoming apps APIs and webstore issues
- also happens here.
-* [chromium-design-docs](https://groups.google.com/a/chromium.org/group/chromium-design-docs)
- * List to email and discuss public design docs for the Chromium
- project. Public design docs should all be sent here.
-* [chromium-enterprise](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-enterprise)
- * A place to discuss chromium changes that affect enterprise
- users, and to notify of upcoming changes
-* [chromium-extensions](https://groups.google.com/a/chromium.org/group/chromium-extensions)
- * This list is for people creating extensions for Chromium or
- Google Chrome. Discussion about upcoming extension APIs and
- webstore issues also happens here.
-* [chromium-mojo](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-mojo)
- * Discussion of development and use of
- [Mojo](/developers/design-documents/mojo) IPC system.
-* [chromium-polymer](https://groups.google.com/a/chromium.org/group/chromium-polymer)
- * List for discussing the use of
- [Polymer](https://www.polymer-project.org/) in Chromium WebUI
- and Apps.
-* [device-dev](https://groups.google.com/a/chromium.org/forum/#!forum/device-dev)
- * [Device Team](/teams/device-team) communication related to APIs
- such as Gamepad, NFC, Sensors, Serial, HID, USB, etc.
-* [devtools-dev](https://groups.google.com/a/chromium.org/g/devtools-dev)
- * Discussion forum for [Chrome
- DevTools](https://developers.google.com/web/tools/chrome-devtools).
-* [dom-dev](https://groups.google.com/a/chromium.org/forum/#!forum/dom-dev)
- * List for technical discussions related to DOM, HTML, Forms, and
- the [DOM Team](/teams/dom-team).
-* [ecosystem-infra](https://groups.google.com/a/chromium.org/forum/#!forum/ecosystem-infra)
- * Discussion for the [ecosystem infrastructure
- team](https://docs.google.com/document/d/1MgcisuMnvh3z6QNIjDSvRbt4uoNtmI_cljcQkGXzNQ8/edit)
- (eg. tooling for web-platform-tests and other cross-cutting
- issues around interoperability)
-* [embedder-dev](https://groups.google.com/a/chromium.org/forum/#!forum/embedder-dev)
- * Technical discussions about embedding Chromium and changes in
- that area.
-* [experimentation-dev](https://groups.google.com/a/chromium.org/forum/#!forum/experimentation-dev)
- * Discussion forum for experimenting with web platform features,
- specifically [Origin
- Trials](https://github.com/jpchase/OriginTrials/).
-* [feature-control](https://groups.google.com/a/chromium.org/forum/#!forum/feature-control)
- * Discussion relating to the infrastructure and APIs in chromium
- that control the exposure of APIs to the web and reports on when
- and how they are used (Origin trials, UseCounters, Feature
- Policy, Reporting API, etc.).
-* [fugu-dev](https://groups.google.com/a/chromium.org/group/fugu-dev)
- * Project Fugu is an effort to close gaps in web's capabilities,
- enabling new classes of applications to run on the web. See
- [web-capabilities-fugu](/teams/web-capabilities-fugu).
-* [graphics-dev](https://groups.google.com/a/chromium.org/group/graphics-dev)
- * The engineering (developer) team uses this to discuss technical
- issues related to Chromium's graphics stack. This is a low
- volume, high technical content mailing list covering the
- Chromium compositor, GPU command buffer stack, and other
- graphics-related parts of the code.
-* [headless-dev](https://groups.google.com/a/chromium.org/forum/#!forum/headless-dev)
- * Discussions about running Chromium in a headless/server
- environment.
-* [infra-dev](https://groups.google.com/a/chromium.org/forum/#!forum/infra-dev)
- * List for discussing technical issues related to the
- infrastructure (continuous build, code review, commit queue,
- etc).
-* [intervention-dev](https://groups.google.com/a/chromium.org/forum/#!forum/intervention-dev)
- * Discuss user agent interventions.
-* [input-dev](https://groups.google.com/a/chromium.org/forum/#!forum/input-dev)
- * Discussions related to input handling in chromium and blink with
- a focus on making touch-based interactions on mobile fast, rich
- and rational.
-* [layout-dev](https://groups.google.com/a/chromium.org/forum/#!forum/layout-dev)
- * Discussion forum for the [Layout team](/teams/layout-team).
-* [loading-dev](https://groups.google.com/a/chromium.org/forum/#!forum/loading-dev)
- * Technical discussions related to the full experience of the
- initial load of web content (resource fetching/scheduling,
- parsing, initial layout/paint).
-* [navigation-dev](https://groups.google.com/a/chromium.org/forum/#!forum/navigation-dev)
- * Technical discussions related to navigation, loading, session
- history, and similar topics.
-* [media-dev](https://groups.google.com/a/chromium.org/forum/#!forum/media-dev)
- * Technical discussions related to media playback in Chromium
- covering the media stack, the media experience and media APIs.
-* [midi-dev](https://groups.google.com/a/chromium.org/forum/#!forum/midi-dev)
- * Discussions forum for MIDI in Chromium.
-* [net-dev](https://groups.google.com/a/chromium.org/forum/#!forum/net-dev)
- * Technical discussions about networking in Chrome - covering
- HTTP, SSL/TLS, DNS, TCP - as well as the APIs for networking
-* [network-service-dev](https://groups.google.com/a/chromium.org/forum/#!forum/network-service-dev)
- * Discussions related to the [Network
- Service](https://docs.google.com/document/d/1wAHLw9h7gGuqJNCgG1mP1BmLtCGfZ2pys-PdZQ1vg7M/edit)
- effort of servicification.
-* [offline-dev](https://groups.google.com/a/chromium.org/forum/#!forum/offline-dev)
- * Technical discussions related to Offline Pages, MHTML, Download
- Page functionality.
-* [ozone-dev](https://groups.google.com/a/chromium.org/forum/#!forum/ozone-dev)
- * Technical discussion about ports to different windowing systems,
- graphics drivers, & input devices.
-* [paint-dev](https://groups.google.com/a/chromium.org/forum/#!forum/paint-dev)
- * Discussion forum for the [Paint team](/teams/paint-team).
-* [pepper-dev](https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/pepper-dev)
- * List for discussing technical issues related to the Pepper APIs
- in Chromium, including proposals for new APIs, changes to
- existing APIs and discussion around the implementation of APIs
- in the browser.
-* [platform-architecture-dev](https://groups.google.com/a/chromium.org/forum/#!forum/platform-architecture-dev)
- * Discussion forum for the [Platform Architecture
- Team](https://docs.google.com/document/d/1_fs3efUiimJzDotTzcdVddS6TtHG1lUdPnJocyERWJA/edit?pref=2&pli=1).
-* [platform-predictability](https://groups.google.com/a/chromium.org/forum/#!forum/platform-predictability)
- * Discussion forum for the [Web Platform Predictability
- effort](/blink/platform-predictability).
-* [progressive-web-metrics](https://groups.google.com/a/chromium.org/forum/#!forum/progressive-web-metrics)
- * Discussion of creating a modern set of metrics used in all
- Chrome Speed projects and in all of our Web Developer facing
- projects.
-* [project-warden](https://groups.google.com/a/chromium.org/forum/#!forum/project-warden)
- * Warden is a project to cleanup and fix long standing issues in
- order to increase developer productivity. See
- [goo.gl/VEv1YQ](https://goo.gl/VEv1YQ)
-* [pwa-dev](https://groups.google.com/a/chromium.org/forum/#!forum/pwa-dev)
- * Technical discussion about features related to progressive web
- apps.
-* [python](https://groups.google.com/a/chromium.org/forum/#!forum/python)
- * Discussions regarding the Chromium Python style guide.
-* [rust-dev](https://groups.google.com/a/chromium.org/g/rust-dev)
- * Discussions about Rust development in Chromium.
-* [scheduler-dev](https://groups.google.com/a/chromium.org/forum/#!forum/scheduler-dev)
- * Discussion about scheduling work (e.g., rendering, input
- handling tasks) in different parts of Chromium.
-* [security-dev](https://groups.google.com/a/chromium.org/forum/#!forum/security-dev)
- * Discussions related to security engineering and development on
- Chrome, with a particular focus on security features and
- designs. Note: this is not a bug announcement list. If that is
- what your looking for, please see the [Chrome
- Security](/Home/chromium-security) page for more information on
- security-notify@chromium.org.
-* [services-dev](https://groups.google.com/a/chromium.org/forum/#!forum/services-dev)
- * Discussion about [servicification](/servicification) effort in
- Chromium
-* [site-isolation-dev](https://groups.google.com/a/chromium.org/forum/#!forum/site-isolation-dev)
- * Discussions related to [out-of-process
- iframes](/developers/design-documents/oop-iframes) and the
- general [Site
- Isolation](/developers/design-documents/site-isolation) effort
- to protect web sites from each other using Chrome's sandbox.
-* [sensors-dev](https://groups.google.com/a/chromium.org/forum/#!forum/sensors-dev)
- * Discussing Generic Sensors and derivative APIs.
-* [storage-dev](https://groups.google.com/a/chromium.org/forum/#!forum/storage-dev)
- * List for discussing implementation of web storage technologies:
- Cookies, IndexedDB, AppCache, FileSystem, Local/Session storage,
- Quotas, and, yes, WebSQL.
-* [tast-users](https://groups.google.com/a/chromium.org/forum/#!forum/tast-users)
- * Discussion about using the [Tast testing
- framework](https://chromium.googlesource.com/chromiumos/platform/tast/)
- to write Chrome OS integration tests.
-* [threaded-rendering-dev](https://groups.google.com/a/chromium.org/forum/#!forum/threaded-rendering-dev)
- * Discussion about leveraging threads / asynchrony for a faster
- web. AnimationWorklet, position:sticky, snap points, metrics,
- etc.
-* [web-bluetooth](https://groups.google.com/a/chromium.org/forum/#!forum/web-bluetooth)
- * Implementation discussions for [Web
- Bluetooth](https://github.com/WebBluetoothCG/web-bluetooth).
-* [worker-dev](https://groups.google.com/a/chromium.org/forum/#!forum/worker-dev)
- * List for discussing implementation of web workers and worklets.
- See the [Worker Team](/teams/worker-team).
-* [v8-dev](https://groups.google.com/forum/#!forum/v8-dev)
- * List for discussing implementation of the [V8
- engine](https://github.com/v8/v8/wiki).
-
-#### Reviews/Check-ins/bugs:
-
-* [chromium-reviews](https://groups.google.com/a/chromium.org/group/chromium-reviews)
- * The engineering (developer) team uses this to conduct code
- reviews of changes to the Chromium source. This is a high
- volume, high technical content mailing list. Topical posts are
- strictly limited to code reviews. All email threads on this list
- originate from code reviews. Please do not start new threads on
- this list.
-* [chromium-checkins](https://groups.google.com/a/chromium.org/group/chromium-checkins)
- * This is a read-only list that can be used to monitor individual
- checkins to the Chromium source. This is a high volume, high
- technical content mailing list. All emails to this list are
- automatically generated when code is checked in. Please do not
- send emails to this list.
-* [chromium-bugs](https://groups.google.com/a/chromium.org/group/chromium-bugs)
- * This is a read-only list that contains all of the bug database
- email traffic. All email threads originate from bugs opened in
- the bug database. Please do not create new threads on this list.
-* [blink-reviews](https://groups.google.com/a/chromium.org/forum/#!forum/blink-reviews)
- * The engineering (developer) team uses this to conduct code
- reviews of changes to the Blink source. This is a high volume,
- high technical content mailing list. Topical posts are strictly
- limited to code reviews. All email threads on this list
- originate from code reviews. Please do not start new threads on
- this list
- * Some sublists are:
- * blink-reviews-paint
- * blink-reviews-animation
- * blink-reviews-bindings
- * blink-reviews-css
- * blink-reviews-dom
- * blink-reviews-events
- * blink-reviews-platform-graphics
- * blink-reviews-html
- * blink-reviews-api
- * blink-reviews-layout
- * To subscribe to them, edit the URL for blink-reviews to add the
- suffix.
- * See the
- [WATCHLISTS](https://cs.chromium.org/chromium/src/WATCHLISTS)
- file for what these lists cover.
-* [blink-checkins](https://groups.google.com/a/chromium.org/forum/#!forum/blink-checkins)
- * This is a read-only list that can be used to monitor individual
- checkins to the Blink rendering engine. This is a high volume,
- high technical content mailing list. All emails to this list are
- automatically generated when code is checked in. Please do not
- send emails to this list.
-* [feature-media-reviews](https://groups.google.com/a/chromium.org/forum/#!forum/feature-media-reviews)
- * This is a read-only list that can be used to monitor code
- reviews related to media in Chromium. This is a high volume,
- high technical content mailing list. All emails to this list are
- automatically generated when a media-related code review is
- updated. Please do not start new threads on this list.
-* [vaapi-reviews](https://groups.google.com/a/chromium.org/forum/#!forum/vaapi-reviews/new)
- * Code reviews related to VA API, a video/image encode/decode
- accelerator API; all email threads on this list originate from
- code reviews. Please do not start new threads on this list ! :-)
-
-* [v8-reviews](https://groups.google.com/forum/#!forum/v8-reviews)
- * The engineering (developer) team uses this to conduct code
- reviews fo changes to the V8 source. This is a high volume, high
- technical content mailing list. Topical posts are strictly
- limited to code reviews. All email threads on this list
- originate from code reviews. Please do not start new threads on
- this list.
-* There are some mailing lists that are auto-cc'd on certain crbug.com
- issue categories
- * [paint-bugs](https://groups.google.com/a/chromium.org/forum/#!forum/paint-bugs):
- bugs tracked by the paint team
-
-#### Other discussion:
-
-* [branches](https://groups.google.com/a/chromium.org/g/branches)
- * Discussions related to branch stabilization and release
- processes, e.g. milestone branch length, merge and release
- blocking processes
-
-*Note: On 1/21/2010 we switched our mailing lists to be hosted on chromium.org.
-Posts before that date for the above lists are available at
-[chromium-dev](https://groups.google.com/group/chromium-dev),
-[chromium-reviews](https://groups.google.com/group/chromium-reviews),
-[chromium-checkins](https://groups.google.com/group/chromium-checkins),
-[chromium-bugs](https://groups.google.com/group/chromium-bugs), and*
-[*chromium-extensions*](https://groups.google.com/group/chromium-extensions)*.* \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/add_a_measurement/index.md b/chromium/docs/website/site/developers/telemetry/add_a_measurement/index.md
deleted file mode 100644
index 20e63ddc171..00000000000
--- a/chromium/docs/website/site/developers/telemetry/add_a_measurement/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: add_a_measurement
-title: 'Telemetry: Add a Measurement'
----
-
-[TOC]
-
-## Are you sure you want to add a measurement?
-
-Writing a good measurement is really hard. We already have a bunch of
-measurements in
-[tools/perf/measurements](https://code.google.com/p/chromium/codesearch#chromium/src/tools/perf/measurements/)
-for you to use. If you are looking to write a new benchmark, you probably just
-need to add or modify an existing story set and you might need to add new
-metrics to an existing measurement. Think twice before you write another
-measurement.
-
-## What is a measurement?
-
-A measurement is a python class that obtains a set of Numbers about a Page.
-Measurements must work for all pages, not just one specific page.
-
-For example, let’s say my users often go to a specific page, click a button, and
-scroll a div that shows up. I could measure any number of things:
-
- How long it takes to go to that URL in a fresh tab until the div shows up
-
- How smoothly I can scroll a div
-
- How much time I spend in key WebKit systems: javascript, style, layout,
- paint, compositing
-
- How much the memory footprint varies as I scroll the div
-
- How much time I spend decoding images and painting the page
-
-These are all examples of measurements.
-
-## How about Timeline-Based Measurement?
-
-Timeline-Based Measurement is a new and preferred way for computing Telemetry
-metrics from traces in a unified manner. The code is contained in
-[tools/telemetry/telemetry/web_perf](https://code.google.com/p/chromium/codesearch#chromium/src/tools/telemetry/telemetry/web_perf/).
-
-For details about this approach, see the following documents: [Why choose
-TimelineBasedMeasurement over other
-measurements?](https://docs.google.com/document/d/10G0PbePQOwJao57Mu6Xr7Fx0o2ng8fwZ33wUqpnsyog)
-
-[How does TimelineBasedMeasurement
-work?](https://docs.google.com/document/d/1cx_yplQQUVtIka5DD846kcfheIdIoTHfCL0dH93ezA8/edit?usp=sharing)
-
-## I think I need to write a new measurement, now what?
-
-Please email [telemetry@chromium.org](mailto:telemetry@chromium.org) with
-details about what you are trying to measure. We can help you get started and
-ensure that there are not existing measurements that you could use. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/benchmark-organization-diagram.png.sha1 b/chromium/docs/website/site/developers/telemetry/benchmark-organization-diagram.png.sha1
deleted file mode 100644
index 1f0e025a80a..00000000000
--- a/chromium/docs/website/site/developers/telemetry/benchmark-organization-diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a1878e1fa991c5da4c1d8dd810534f37d1ae9955 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/Screen Shot 2014-12-10 at 9.42.17 AM.png.sha1 b/chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/Screen Shot 2014-12-10 at 9.42.17 AM.png.sha1
deleted file mode 100644
index 926dc0cf43e..00000000000
--- a/chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/Screen Shot 2014-12-10 at 9.42.17 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-190c9521358067ee37e46f0c979a3741fa1d6c86 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/index.md b/chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/index.md
deleted file mode 100644
index c8c832d619d..00000000000
--- a/chromium/docs/website/site/developers/telemetry/diagnosing-test-failures/index.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: diagnosing-test-failures
-title: 'Telemetry: Diagnosing Test Failures'
----
-
-If you're seeing a test failure on the bots and are unable to diagnose the issue
-from the test log, here are some steps to help debug the issue.
-
-## ==Reproducing the Issue==
-
-### Determining how Telemetry was invoked
-
-The command line used to invoke Telemetry can be seen when looking at the log
-for the failing build step, the output is very verbose but if you search for
-\`run_benchmark\` you should be able to find it. Look for a command that
-resembles the following:
-
-```none
-/tools/perf/run_benchmark -v --output-format=chartjson --upload-results blink_perf.shadow_dom --browser=reference --output-trace-tag=_ref
-```
-
-### Running a Windows VM
-
-Instructions on setting up a Windows VM on a Linux host [can be found
-here](https://docs.google.com/a/google.com/document/d/1fAQRjM9oJqVrxzNpS1GH_62smLgphvpeWChCKo-wW2Y/edit?usp=sharing)
-(for Googlers only). For how to run it locally on windows, check the
-instructions [here](/developers/telemetry/run_locally).
-
-### Diagnosing on the trybots
-
-Reproducing a failure locally is the most desirable option, both in terms of
-speed and ease of debugging. If the failure only occurs on a specific OS you
-don't have access to or if the failure only reproduces on a specific bot you may
-need to access that bot directly. Information on accessing a trybot remotely
-[can be found here](https://goto.google.com/chrome-trybot-remote-access)
-(Internal-only).
-
-You can find the name of the trybot the test is failing on by looking at the
-"BuildSlave" section of the test run (build58-a1 in the below screenshot):
-
-[<img alt="image"
-src="/developers/telemetry/diagnosing-test-failures/Screen%20Shot%202014-12-10%20at%209.42.17%20AM.png"
-height=109
-width=200>](/developers/telemetry/diagnosing-test-failures/Screen%20Shot%202014-12-10%20at%209.42.17%20AM.png)
-
-Another option is to use the [performance
-trybots](/developers/telemetry/performance-try-bots) to try a patch with extra
-diagnostics.
-
-## Tips on Diagnosis
-
-* Telemetry prints local variables on test failure and will attempt to
- print a stack trace for the browser process if it crashes, this
- should be visible in the builder output.
-* If the Telemetry is wedged, you can send it a SIGUSR1 ($kill
- -SIGUSR1 &lt;telemetry pid&gt; on a POSIXy system), this has the
- effect of printing the current stack trace (search for
- InstallStackDumpOnSigusr1() to see the code behind this.)
-* Consider adding logging.info()messages to the code to print
- diagnostic information, as can be seen above - the bots run
- Telemetry with the '-v' option so these will be visible in the build
- output. These can be sent to the [performance
- trybots](/developers/telemetry/performance-try-bots) or committed
- and reverted afterwards but consider leaving in messages that might
- help diagnose similar issues in the future. If left in, beware of
- spamming the console.
-* As the benchmark runs, devtools can be used to examine the state of
- the running page.
-
-### Useful Telemetry command line flags
-
-<table>
-<tr>
-<td>Name</td>
-<td> Effect</td>
-</tr>
-<tr>
-<td> --browser={list,&lt;version&gt;}</td>
-<td> Change the version of the browser used, list will print all the browsers that Telemetry can see and a browser name will run that browser e.g. --browser=release</td>
-</tr>
-<tr>
-<td> --repeat=&lt;N&gt;</td>
-<td> Repeats the test N times. Note that flaky tests might fail after repetition e.g. --repeat=5</td>
-</tr>
-<tr>
-<td> --story-filter=&lt;regex&gt;</td>
-<td> Only run pages from the pageset that match the given regex, this is useful to make test runs faster if a test only fails on a specific page e.g. --story-filter=flickr</td>
-</tr>
-<tr>
-<td> --story-filter-exclude=&lt;regex&gt;</td>
-<td> Inverse of the above.</td>
-</tr>
-<tr>
-<td> -v, -vv</td>
-<td> Change log level</td>
-</tr>
-<tr>
-<td> --show-stdout</td>
-<td> Show browser stdout</td>
-</tr>
-<tr>
-<td> --extra-browser-args=</td>
-<td> Pass extra arguments when invoking the browser, you can find a useful list of Chrome's command-line arguments <a href="http://peter.sh/experiments/chromium-command-line-switches/">here</a>.</td>
-<td>E.g.: '--extra-browser-args=--enable-logging=stderr --v=2'</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/index.md b/chromium/docs/website/site/developers/telemetry/index.md
deleted file mode 100644
index 6df93d3d9fc..00000000000
--- a/chromium/docs/website/site/developers/telemetry/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: telemetry
-title: 'Telemetry: Introduction'
----
-
-This page has MOVED to
-[chromium.googlesource.com](https://chromium.googlesource.com/catapult/+/HEAD/telemetry/README.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.28 AM.png.sha1 b/chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.28 AM.png.sha1
deleted file mode 100644
index a5bf763aaf8..00000000000
--- a/chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.28 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-04352826d526377be62ac79a8cda4cb0825ccbe9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.51 AM.png.sha1 b/chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.51 AM.png.sha1
deleted file mode 100644
index 1408677ff0c..00000000000
--- a/chromium/docs/website/site/developers/telemetry/performance-try-bots/Screen Shot 2014-08-26 at 10.49.51 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-baaca03af5290d43585317e93e9d6932c706de35 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/performance-try-bots/index.md b/chromium/docs/website/site/developers/telemetry/performance-try-bots/index.md
deleted file mode 100644
index cd298031eaa..00000000000
--- a/chromium/docs/website/site/developers/telemetry/performance-try-bots/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: performance-try-bots
-title: Performance Try Bots
----
-
-#### Latest docs are at: <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed/perf_trybots.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/profiling/index.md b/chromium/docs/website/site/developers/telemetry/profiling/index.md
deleted file mode 100644
index 4287f245db8..00000000000
--- a/chromium/docs/website/site/developers/telemetry/profiling/index.md
+++ /dev/null
@@ -1,249 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: profiling
-title: 'Telemetry: Profiling'
----
-
-[TOC]
-
-**Warning:** Use these directions at your own risk: --profiler is deprecated and
-[platform/tracing_controller.py](https://code.google.com/p/chromium/codesearch#chromium/src/tools/telemetry/telemetry/core/platform/tracing_controller.py)
-should be used instead for scenarios requiring long-term support for profiling
-data collection.
-
-## Tracing
-
-On all platforms, Telemetry can gather an
-[about:tracing](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool)
-trace for each page in the page_set. To do so, simply pass the --profiler=trace
-flag. For example:
-
-```none
-$ tools/perf/run_benchmark --profiler=trace page_cycler tools/perf/page_sets/typical_25.json
-```
-
-Instructions for opening the results will be printed.
-
-## CPU Profiling - Linux / Android and Mac
-
-### Linux / Android
-
-In order for Linux profilers to display call graph information correctly, it is
-necessary to first build with profiling=1 (GYP) or enable_profiling = true (GN).
-To do so:
-
-```none
-$ # Linux (GYP)
-$ GYP_DEFINES='profiling=1' gclient runhooks
-$ ninja -C out/Release chrome
-$ # Android (GYP)
-$ GYP_DEFINES="OS=android profiling=1 release_extra_cflags=-fno-omit-frame-pointer disable_pie=1" \
-    gclient runhooks
-$ ninja -C out/Release chrome_public_apk
-$ # GN
-$ gn args out/Profiling
-# include "enable_profiling = true"
-$ export CHROMIUM_OUTPUT_DIR="$PWD/out/Profiling"
-$ ninja -C out/Profiling chrome_public_apk
-```
-
-### perf
-
-On Linux and Android, Telemetry can gather a
-[perf](https://perf.wiki.kernel.org/index.php/Tutorial) profile for each page in
-the page_set. To do so, pass the --profiler=perf flag. For example:
-
-```none
-$ tools/perf/run_benchmark --profiler=perf kraken
-```
-
-Instructions for opening the results will be printed.
-
-If the page_set you are profiling includes cross-origin navigations, it is
-necessary to pass --page-repeat=2 so that renderer process is not swapped out
-mid-profile on the second run. For example:
-
-```none
-$ tools/perf/run_benchmark --profiler=perf --page-repeat=2 page_cycler tools/perf/page_sets/intl_ar_fa_he.json
-```
-
-### You may find it useful to install a copy of perf from your distro's repository and use that instead of the included perfhost binary (e.g. for additional UI options), as long as you use the flags Telemetry suggests.
-
-### VTune
-
-On x86 builds (including Android on x86) Telemetry can collect an [Intel
-VTune](https://software.intel.com/en-us/intel-vtune-amplifier-xe) profile for
-each page in the page_set. This requires VTune to be installed on your home
-system. To collect a profile, pass the --profiler=vtune flag. For example:
-
-```none
-$ tools/perf/run_benchmark --profiler=vtune kraken
-```
-
-You can then open the results in the VTune GUI. Instructions for opening the
-results will be printed.
-
-### gprof
-
-While not explicitly supported by Telemetry. It is possible to gather a
-[gprof](http://sourceware.org/binutils/docs/gprof/) profile for the entire
-measurement run when running in single process mode. To do so, first build with
-profiling enabled, -fno-omit-frame-pointer and without position independent
-code:
-
-```none
-$ GYP_DEFINES='profiling=1' gclient runhooks
-```
-
-```none
-$ ninja -C out/Release chrome
-```
-
-Then run with CPUPROFILE in the environment and --single-process. For example:
-
-```none
-$ CPUPROFILE=/tmp/myprofile tools/perf/run_benchmark --extra-browser-args=--single-process sunspider
-```
-
-View the profile like so:
-
-```none
-$ cpprof --gv out/Release/chrome /tmp/myprofile
-```
-
-### systrace
-
-Telemetry also supports recording an Android
-[Systrace](http://developer.android.com/tools/help/systrace.html) while running
-measurements:
-
-```none
-$ tools/perf/run_benchmark --profiler=android-systrace kraken
-```
-
-The resulting trace file can be opened in Chrome by going to
-[about:tracing](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool)
-and clicking on "Load".
-
-### Mac
-
-On mac, Telemetry can gather an
-[Instruments](http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html)
-profile for each page in the page_set. To do so, pass the --profiler=iprofiler
-flags. For example:
-
-```none
-$ tools/perf/run_benchmark --profiler=iprofiler octane
-```
-
-Instructions for opening the results will be printed. Once in Instruments, if
-symbols are not resolved, go to “File &gt; Re-Symbolicate Document...” and
-browse to the \*.dsym files for Chromium Framework and Chromium Helper.
-
-## Memory Profiling - Linux / Android
-
-### Linux / Android (C/C++)
-
-On special instrumented builds of linux Android, Telemetry can gather TCMalloc
-heap dumps that can be then fed to [Deep Memory
-Profiler](/developers/deep-memory-profiler) . Please check that page for:
-
- GYP_DEFINES for both platforms.
-
- linux: environment variables
-
- android: system properties (note: requires a rooted device)
-
-Run any measurement with --profiler=tcmalloc-heap flags. For example:
-
-```none
-$ tools/perf/run_benchmark -v --browser=android-content-shell --profiler=tcmalloc-heap memory.top_25
-```
-
-Once the measurement completes, the dump files will be in /tmp/{RANDOM}.
-
-Follow instructions from the [Deep Memory
-Profiler](/developers/deep-memory-profiler) to generate the data and graphs.
-
-Note: depending on the page set, there’ll be multiple directories under
-/tmp/{RANDOM}, one per page in the set. In each folder, there’ll be a mix of
-dumps per browser and renderer processes for that particular page. You may want
-to analyse the browser process across the entire page set, rather than just a
-particular page. To do so:
-
- There’s a file called “browser.pid” on each one of the page directories.
-
- Copy (or move) all dump files for that pid to say, “browser/”.
-
- Run dmprof on that folder.
-
-### Android Memory Report
-
-Telemetry can gather high level "memory report" for each page in the page_set.
-To do so, pass the --profiler=android-memreport flags. At the end of the test,
-it will print a link to the HTML page that was generated. This profile gives an
-overview of all memory (including mapped files, read-only, dirty, clean pages,
-etc..) but without any backtrace like the ones above. It does not require any
-instrumented build, as it gathers all information directly from /proc/PID/maps,
-etc..
-
-### Android Java
-
-Telemetry can gather “heap profiles” for the java side for each page in the
-page_set. To do so, pass the --profiler=java-heap flags. For example:
-
-```none
-$ tools/perf/run_benchmark -v --browser=android-content-shell --profiler=java-heap memory.top_25
-```
-
-The dump files will then be fetched in /tmp/{RANDOM} in the host, already
-converted to “hprof” format which can be used by tools like [Eclipse’s
-MAT](http://www.eclipse.org/mat/). [This post
-](http://android-developers.blogspot.co.uk/2011/03/memory-analysis-for-android.html)
-from the android team contains useful instructions. Please note: android has a
-“zygote” process that contains pre-loaded resources for all apps. These
-resources will show up in the heap profile: they are actually shared across all
-apps, they aren't exclusive to the process being profiled.
-
-## Network Profiling - Linux / Android
-
-### Linux / Android
-
-Telemetry can gather “tcpdump” network captures for each page in the page_set.
-To do so, pass the --profiler=tcpump flags. For example:
-
-```none
-$ tools/perf/run_benchmark --browser=android-content-shell --profiler=tcpdump memory_measurement memory.top_25
-```
-
-The dump files will then be fetched in /tmp/{RANDOM}, and then can be opened in
-tools such as [Wireshark](http://www.wireshark.org/).
-
-On android, "tcpdump" binary will be downloaded from [cloud
-storage](http://www.chromium.org/developers/telemetry/upload_to_cloud_storage)
-and installed in the device automatically.
-
-## "Manual" Profiling - Android
-
-Sometimes it's useful to drive the browser "manually" in order to run a specific
-profiler during a regular browsing session. This command:
-
-```none
-$ tools/perf/record_android_profile.py --browser=android-chrome --profiler=perf
-```
-
-Will launch the browser and the associated profiler and wait until you hit
-enter. It will then fetch all profile data from the device and print
-instructions on how to open them.
-
-You can also use
-[adb_profile_chrome](http://www.chromium.org/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs)
-to record a perf profile from a running browser:
-
-```none
-$ tools/android/adb_profile_chrome --browser=build --time 5 --perf
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/record_a_page_set/WebPageReplayDiagram.png.sha1 b/chromium/docs/website/site/developers/telemetry/record_a_page_set/WebPageReplayDiagram.png.sha1
deleted file mode 100644
index 62e8eafa772..00000000000
--- a/chromium/docs/website/site/developers/telemetry/record_a_page_set/WebPageReplayDiagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6c989330c4c4a58258e456bdf6fbec96ec235363 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/record_a_page_set/index.md b/chromium/docs/website/site/developers/telemetry/record_a_page_set/index.md
deleted file mode 100644
index 279700849b1..00000000000
--- a/chromium/docs/website/site/developers/telemetry/record_a_page_set/index.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: record_a_page_set
-title: 'Telemetry: Record a Page Set'
----
-
-[TOC]
-
-We record page sets so we control network conditions and other changes in the
-live sites, leading to more stable benchmarks.
-
-## Write a page set
-
-Before you can record a page set, you need to write it! If you want to record a
-pre-existing page set, you can skip this step.
-
-Page sets are located in
-[`tools/perf/page_sets`](https://code.google.com/p/chromium/codesearch#chromium/src/tools/perf/page_sets/).
-A simple page set with one URL looks like:
-
-<pre><code>from telemetry.page import pagefrom telemetry.page import page_setclass MyPageSet(page_set.PageSet): def __init__(self): super(MyPageSet, self).__init__( user_agent_type='<b>desktop</b>', archive_data_file='<b>data/my_page_set.json</b>', bucket=page_set.PUBLIC_BUCKET) self.AddPage(page.Page( name='example', url='<b>http://example.com/</b>', page_set=self))
-</code></pre>
-
-Telemetry spoofs Chrome's User-Agent field, and `user_agent_type` tells it
-whether to use a desktop, mobile, or tablet user agent. We generally only use
-one recording for all platforms.
-
-The `archive_data_file` contains metadata about which pages are stored in which
-archive files. You need to specify its location, and it will be generated when
-recording the page set.
-
-Note that the naming convention of page set file is to lowercase & underscore
-class name, e.g. MyPageSet should be stored as my_page_set.py.
-
-### Choosing a bucket
-
-Telemetry has three Cloud Storage buckets you can put page sets in.
-
-* `page_set.PUBLIC_BUCKET == 'chromium-telemetry'`
-* `page_set.PARTNER_BUCKET == 'chrome-partner-telemetry'`
-* `page_set.INTERNAL_BUCKET == 'chrome-telemetry'`
-
-Google wants to avoid legal issues with distributing third-party content, so to
-be safe, **most recordings of websites on the public web go in
-`PARTNER_BUCKET`**, which is accessible by Googlers and certain Google partners.
-Recordings of Google-properties on the public web can go in `PUBLIC_BUCKET`, and
-recordings of unreleased or internal Google websites go in `INTERNAL_BUCKET`.
-
-## Recording and Uploading
-
-You can record and upload a page set or benchmark using
-[the update_wpr tool](https://source.chromium.org/chromium/chromium/src/+/main:tools/perf/recording_benchmarks.md)
-(recommended!). Alternatively, follow the instructions below.
-
-### Record a page set or benchmark
-
-Use the `record_wpr` script to record a page set or benchmark (preferred). Your
-command will look something like this:
-
-```none
-src$ tools/perf/record_wpr --browser=(release|system) <page_set_name or benchmark name>
-```
-
-For example, to record the top25_smooth.py page set, specify
-top25_smooth_page_set:
-
-```none
-src$ tools/perf/record_wpr --browser=system top25_smooth_page_set
-```
-
-To update the recording for only some pages in the page set, use
-`--story-filter`. This command will record only Wikipedia pages:
-
-```none
-src$ tools/perf/record_wpr --browser=system --story-filter=wikipedia top25_smooth_page_set
-```
-
-`record_wpr` generates a few files:
-
-* A `.wpr` file containing the recorded data. This file is hidden from
- `git status`, which we'll explain next.
-* A `.wpr.sha1` file containing the SHA1 hash of the `.wpr` file.
-* A `.json` file containing metadata about which `.wpr` files store
- which URLs.
-
-### Upload the recording to Cloud Storage
-
-To avoid bloating everyone's Chromium checkouts, we avoid committing the large
-`.wpr` files to source control. Instead, we upload them to Cloud Storage and
-download them as needed. If you just want to use your recording locally, you can
-skip this step.
-
-If you haven't already, you may need to [set up Cloud
-Storage](/developers/telemetry/upload_to_cloud_storage).
-
-To do this, check in only the `.sha1` and `.json` files. When you run `git cl
-upload`, a `PRESUBMIT` script will check whether you have already uploaded the
-recording to Cloud Storage.
-
-To upload your new recording to cloud storage, use the following command, as
-referenced in the presubmit warning:
-
-<pre><code>src$ depot_tools/upload_to_google_storage.py --bucket (chromium-telemetry|chrome-partner-telemetry|chrome-telemetry) tools/perf/page_sets/data/<b>my_page_set_000</b>.wpr
-</code></pre>
-
-#### Moving recordings between Cloud Storage buckets
-
-Sometimes the addition or removal of pages changes the permission of the page
-set, or the page set archives are in the wrong bucket. To move files between
-buckets, use this command:
-
-<pre><code>src$ tools/telemetry/cloud_storage mv tools/perf/page_sets/data/<b>my_page_set</b>_*.wpr (public|partner|google-only)
-</code></pre>
-
-## What is Web Page Replay?
-
-Web Page Replay is a service that allows us to capture and store HTTP requests
-and responses.
-
-[<img alt="image"
-src="/developers/telemetry/record_a_page_set/WebPageReplayDiagram.png">](/developers/telemetry/record_a_page_set/WebPageReplayDiagram.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/run_locally/index.md b/chromium/docs/website/site/developers/telemetry/run_locally/index.md
deleted file mode 100644
index 1654c28689f..00000000000
--- a/chromium/docs/website/site/developers/telemetry/run_locally/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: run_locally
-title: 'Telemetry: Run Benchmarks Locally'
----
-
-The latest instruction is moved to
-<https://github.com/catapult-project/catapult/blob/master/telemetry/docs/run_benchmarks_locally.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/running-telemetry-on-chrome-os/index.md b/chromium/docs/website/site/developers/telemetry/running-telemetry-on-chrome-os/index.md
deleted file mode 100644
index 82e427e0e4f..00000000000
--- a/chromium/docs/website/site/developers/telemetry/running-telemetry-on-chrome-os/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: running-telemetry-on-chrome-os
-title: Running Telemetry on Chrome OS
----
-
-This page has moved to:
-
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_vm.md#Run-telemetry-unit-tests> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/telemetry-feature-guidelines/index.md b/chromium/docs/website/site/developers/telemetry/telemetry-feature-guidelines/index.md
deleted file mode 100644
index 57ee9df3124..00000000000
--- a/chromium/docs/website/site/developers/telemetry/telemetry-feature-guidelines/index.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: telemetry-feature-guidelines
-title: 'Telemetry: Feature Guidelines'
----
-
-*This page describes some general guidelines for both reviewers and authors.
-When justified, there may always be exceptions to these guidelines. But authors
-be forewarned, you may not get an lgtm on patches that don't adhere to these.*
-
-## Backwards compatibility
-
-## All benchmarks and unittests must work for all Chromes from the current stable version to tip of tree. Where new Telemetry features rely on new Chrome features, the benchmark should gracefully degrade. Backwards compatibility fallbacks may be cleaned up after they are no longer necessary for the stable channel.
-
-## Cross platform support
-
-All features must be generalized to have a reasonable path to support on every
-platform where Chrome runs (Android, CrOS, Linux, Mac, Windows and soon iOS).
-
-We aim to take advantage of the best support on each platform, not conform to
-the lowest common denominator across platforms. So some APIs may indicate that a
-give functionality is not supported for the platform.
-
-Since it isn't always feasible to implement all platforms in a single patch,
-some platforms may raise a NotImplementedError. In this case, a crbug should be
-filed for the platform implementation and reasonable effort should be made to
-implement or find an owner.
-
-## Dependencies
-
-Telemetry must work for our builders and chromium developers without requiring a
-compilation or manual installation/configuration. This means assuming no more
-than a Chrome checkout and python 2.7.
-
-In cases where native code is necessary, we [check in prebuilt
-binaries](/developers/telemetry/upload_to_cloud_storage) for all relevant
-platforms to cloud storage. In cases where installation/configuration is
-required, Telemetry scripts it for the user.
-
-There are also module boundaries where dependencies can only go in one
-direction. These include, but are not limited to:
-
-* tools/telemetry cannot depend on tools/perf or content/test/gpu
-* telemetry.core cannot depend on telemetry.page
-
-## Style
-
-Code must adhere to the [Chromium Style Guide](/developers/coding-style) first
-and the [Google Python Style
-Guide](http://google-styleguide.googlecode.com/svn/trunk/pyguide.html) second.
-We also borrow naming principles from the [Cocoa Coding
-Guidelines](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingBasics.html).
-
-## Unittests
-
-All features, large or small, must have unittest coverage. We welcome new
-unittests, especially where there's no current coverage! Your patch/feature will
-be much easier to accept should you decide to first bring some test coverage to
-the existing code, and then add your new feature.
-
-## Error handling
-
-Be particularly careful when executing JavaScript or executing external
-applications. If the JavaScript call hangs or the application has unexpected
-behavior or output, we end up with TimeoutErrors that are hard to diagnose. For
-applications, always check whether the application launched correctly, whether
-it's in a consistent state, whether it produced the expected output, and whether
-it produced the expected exit code. For JavaScript calls, try to catch
-TimeoutErrors and print additional diagnostic information. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/telemetry-mac-keychain-setup/index.md b/chromium/docs/website/site/developers/telemetry/telemetry-mac-keychain-setup/index.md
deleted file mode 100644
index c0847389f87..00000000000
--- a/chromium/docs/website/site/developers/telemetry/telemetry-mac-keychain-setup/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: telemetry-mac-keychain-setup
-title: Telemetry Mac Keychain Setup
----
-
- These commands need to be run as the user that will be running the tests.
-
- These commands assume that the login keychain is unlocked (default on OSX)
-
- The password was generated via 16 random bytes, base 64 encoded. For test
- bots, I imagine the randomness doesn't matter, so I just chose a specific,
- arbitrary password. If the tests use official builds of Chrome, you'll need
- to replace "Chromium" with "Chrome" in the following instructions.
-
- ```none
- security delete-generic-password -s "Chromium Safe Storage" login.keychainsecurity add-generic-password -a Chromium -w "+NTclOvR4wLMgRlLIL9bHQ==" -s "Chromium Safe Storage" -A login.keychain
- ```
-
- If the default keychain settings have been changed, the following lines need
- to be run. Unfortunately, they require the user's password in plaintext, as
- well as knowledge of the current keychain password. (As long as no one has
- mucked with the keychain on the devices, these lines shouldn't be necessary)
-
- ```none
- security set-keychain-password -o [old_keychain_password] -p [user_login_password] login.keychainsecurity unlock-keychain -p [user_login_password] login.keychain
- ``` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/telemetry-profile-generation/index.md b/chromium/docs/website/site/developers/telemetry/telemetry-profile-generation/index.md
deleted file mode 100644
index f47aad4beaa..00000000000
--- a/chromium/docs/website/site/developers/telemetry/telemetry-profile-generation/index.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: telemetry-profile-generation
-title: 'Telemetry: Profile Generation'
----
-
-By default, Telemetry runs all benchmarks in a fresh, clean profile. This isn't
-always desirable for benchmarking. To run with other types of profiles, use
-either --profile-type or --profile-dir.
-
-**--profile-type=**
-
-* clean (default behavior) -- a clean, new profile. Note that
- benchmarks may include initialization routines that only happen on
- the first run.
-* default -- the default profile associated with the browser. As far
- as Telemetry is concerned, this is a non-deterministic state.
-* typical_user -- a pre-recorded profile that represents a typical
- user's profile. Note that benchmarks may include profile upgrade
- routines.
-* power_user -- a pre-recorded profile that represents a power user's
- profile. Note that benchmarks may include profile upgrade routines.
-
-**--profile-dir=**
-
-> A path to a profile to use. This is useful with generated profiles.
-
-### Generated profiles
-
-Because the canned profile-types may exhibit unrealistic behavior in benchmarks
-(due to profile initialization or update routines), it is useful to be able to
-generate a deterministic profile for benchmarking. To do so:
-
-> $ tools/perf/generate_profile --profile-type-to-generate=&lt;PROFILE_TYPE&gt;
-> --output-dir=/path/to/output/profile
-
-**&lt;PROFILE_TYPE&gt;** may be small_profile, theme_profile or
-many_extensions_profile.
-
-Generated profile output directories should then be passed to --profile-dir. For
-example, to run the session_restore benchmark:
-
-> $ tools/perf/generate_profile --profile-type-to-generate=small_profile
-> --output-dir=out/Release/generated_profile
-
-> $ tools/perf/run_benchmark
-> --profile-dir=out/Release/generated_profile/small_profile
-> session_restore.cold.typical_25
-
-Profile generation is in the process of being updated to generate more realistic
-profiles. This is still a work in progress. To try it out, run:
-
-$ tools/perf/generate_profile --profile-type-to-generate=large_profile
---browser=exact --browser-executable={path_to_executable} --use-live-sites
---output-dir=/path/to/output/profile \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/telemetry-unittests/index.md b/chromium/docs/website/site/developers/telemetry/telemetry-unittests/index.md
deleted file mode 100644
index 5ea3854de9a..00000000000
--- a/chromium/docs/website/site/developers/telemetry/telemetry-unittests/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: telemetry-unittests
-title: 'Telemetry: Unit tests'
----
-
-See
-<https://chromium.googlesource.com/catapult/+/HEAD/telemetry/docs/run_telemetry_tests.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/telemetry/upload_to_cloud_storage/index.md b/chromium/docs/website/site/developers/telemetry/upload_to_cloud_storage/index.md
deleted file mode 100644
index 4bb49c41d88..00000000000
--- a/chromium/docs/website/site/developers/telemetry/upload_to_cloud_storage/index.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/telemetry
- - 'Telemetry: Introduction'
-page_name: upload_to_cloud_storage
-title: 'Telemetry: Cloud Storage'
----
-
-[TOC]
-
-In order to reduce the size of the Chromium source checkout, Telemetry stores
-binaries in Cloud Storage. This includes:
-
-* *Recordings of webpages*, known as "page set archives" or
- "[WPR](https://github.com/chromium/web-page-replay) archives."
-* *Support binaries*, such as device/host_forwarder, ipfw,
- minidump_stackwalk, crash_service.
-* *credentials.json*, which is in Cloud Storage to provide access
- rights.
-
-Many benchmarks require these files to run, and will fail without them.
-
-When recording performance tests, we generally don't call this script directly.
-Instead, we use [update_wpr](https://source.chromium.org/chromium/chromium/src/+/main:tools/perf/recording_benchmarks.md).
-
-
-## Set Up Cloud Storage
-
-### Install depot_tools
-
-Follow [these instructions](/developers/how-tos/install-depot-tools) to install
-depot_tools.
-
-### Request Access (for Google partners)
-
-Many of the page set archives are in the `chrome-partner-telemetry` bucket,
-which is not accessible publicly. Google partners can request access by emailing
-`telemetry@chromium.org`.
-
-### Authenticate into Cloud Storage
-
-Some files in Cloud Storage include data internal to Google or its partners. To
-run benchmarks that rely on this data, you need to authenticate. Run the command
-below and follow the instructions for authentication with your **corporate
-account**.
-
-```none
-$ python depot_tools/gsutil.py config
-```
-
-When prompted with “`What is your project-id?`”, just enter `0`. Note that this
-command is in `depot_tools`, not part of the Google Cloud SDK.
-
-## Buckets
-
-Telemetry has three Cloud Storage buckets you can put binary data in.
-
-* `cloud_storage.PUBLIC_BUCKET == 'chromium-telemetry'`
-* `cloud_storage.PARTNER_BUCKET == 'chrome-partner-telemetry'`
-* `cloud_storage.INTERNAL_BUCKET == 'chrome-telemetry'`
-
-BSD-compatible support binaries should all go into `PUBLIC_BUCKET` so that
-everyone can use them.
-
-Google wants to avoid legal issues with distributing third-party content, so to
-be safe, **most recordings of websites on the public web go in
-`PARTNER_BUCKET`**, which is accessible by Googlers and certain Google partners.
-Recordings of Google-properties on the public web can go in `PUBLIC_BUCKET`, and
-recordings of unreleased or internal Google websites go in `INTERNAL_BUCKET`.
-
-## Upload to Cloud Storage
-
-### Upload your files into the bucket “chromium-telemetry”
-
-Put the target file in the directory you want it to be when downloaded from
-Cloud Storage, say `path/to/target`. Use this command to upload:
-
-```none
-$ python depot_tools/upload_to_google_storage.py --bucket chromium-telemetry path/to/target
-```
-
-A SHA1 file `path/to/target.sha1` will be generated for each uploaded file.
-
-### Check the .sha1 files into the repository
-
-```none
-$ git add path/to/target.sha1
-```
-
-## Download from Cloud Storage
-
-### Download the file in Python
-
-```none
-from telemetry.util import cloud_storagecloud_storage.GetIfChanged('path/to/target', cloud_storage.PUBLIC_BUCKET)
-```
-
-### Download the file manually
-
-```none
-$ python depot_tools/download_from_google_storage.py -s [target.sha1] -b chromium-telemetry
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/adding-performance-tests/Screen Shot 2013-12-20 at 9.03.31 AM.png.sha1 b/chromium/docs/website/site/developers/testing/adding-performance-tests/Screen Shot 2013-12-20 at 9.03.31 AM.png.sha1
deleted file mode 100644
index 4f15979903d..00000000000
--- a/chromium/docs/website/site/developers/testing/adding-performance-tests/Screen Shot 2013-12-20 at 9.03.31 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3247aa05e0489796d13eaf551dad5b3d992b40b9 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/adding-performance-tests/index.md b/chromium/docs/website/site/developers/testing/adding-performance-tests/index.md
deleted file mode 100644
index cfeb62d4a85..00000000000
--- a/chromium/docs/website/site/developers/testing/adding-performance-tests/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: adding-performance-tests
-title: Adding Performance Tests
----
-
-Chrome runs a battery of [performance tests](https://chromeperf.appspot.com/)
-against every build. These tests are monitored by the [perf
-sheriffs](http://www.chromium.org/developers/tree-sheriffs/perf-sheriffs) for
-regressions. The best ways to ensure your feature stays fast and gets faster is
-to add a performance test.
-
-1. **Create the test.** Most new perf tests will want to use the
- [Telemetry](/developers/telemetry) framework. All enabled Telemetry
- tests are automatically detected and run by the perf bots. If you
- know what you are doing and have a good reason not to use Telemetry,
- a perf test may be any program or script which outputs results in
- the format the builder understands. You'll need to edit the bot
- configurations to run the test.
-2. **Announce it.** When you add, remove, or change a test, you can
- email chrome-speed-infra@google.com.
-3. **Monitor the results.** Finally, monitor the results for
- regressions. Once the test is monitored, it will show up in the
- dashboard by default. To do so, use the "Report Issue &gt; Request
- Monitoring for Tests" menu item on the [perf
- dashboard](http://chromeperf.appspot.com/), or email
- chrome-speed-infra@google.com \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/adding-tests-to-the-main-waterfall/index.md b/chromium/docs/website/site/developers/testing/adding-tests-to-the-main-waterfall/index.md
deleted file mode 100644
index 1e36d6c6ecb..00000000000
--- a/chromium/docs/website/site/developers/testing/adding-tests-to-the-main-waterfall/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: adding-tests-to-the-main-waterfall
-title: Adding new tests to the Main Chromium Waterfall
----
-
-The main Chromium waterfall
-(<https://ci.chromium.org/p/chromium/g/main/console>) is policed by sheriffs to
-keep it green as possible. When adding a new test to these bots, it's important
-that the tests be free from flakiness and that the [Try
-Server](/system/errors/NodeNotFound) and CQ provide developers coverage for the
-test. See the design of the [Chromium Commit
-Queue](/developers/testing/commit-queue) for details on how this works. Please
-coordinate with the Infra team and troopers while adding these tests.
-
-### Phase One - FYI
-
-Make sure your test target is in one of the builder targets in
-[all.gyp](https://chromium.googlesource.com/chromium/chromium/+/trunk/build/all.gyp).
-Then add the test entries (GTestTestStep and BuildrunnerGTest) to
-[chromium_factory](https://chromium.googlesource.com/chromium/tools/build/+/HEAD/scripts/master/factory/chromium_factory.py).
-Finally put the test on the
-[chromium.fyi](https://chromium.googlesource.com/chromium/tools/build/+/HEAD/masters/master.chromium.fyi)
-[master.cfg](https://chromium.googlesource.com/chromium/tools/build/+/HEAD/masters/master.chromium.fyi/master.cfg)
-for the platforms that make sense for the test. Watch these tests and eliminate
-any flakiness that arises.
-
-### Phase Two - Main Chromium Waterfall / TryServer
-
-When the test has been declared stable, it's time to land it on the main
-Chromium waterfall. As these parts depend on each other, try to land all the
-following simultaneously (with a trooper's help):
-
-1. Add the test to
- [chromium_trybot.json](https://chromium.googlesource.com/chromium/src/+/HEAD/testing/buildbot/chromium_trybot.json).
-2. Add the test to the appropriate bots in
- [src/testing/buildbot/](https://chromium.googlesource.com/chromium/src/+/HEAD/testing/buildbot/).
-3. Add your test to
- [lkgr_finder.py](https://chromium.googlesource.com/chromium/tools/build/+/HEAD/scripts/tools/lkgr_finder.py)
- and CQ's
- [projects.py](https://chromium.googlesource.com/chromium/tools/commit-queue/+/HEAD/projects.py).
-
-Most bots on the main Chromium waterfall have been converted to recipes, which
-have the simplified flow listed above. If you are adding tests to a non-recipe
-bot, contact infra-dev@. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/addresssanitizer/index.md b/chromium/docs/website/site/developers/testing/addresssanitizer/index.md
deleted file mode 100644
index b7c754a804a..00000000000
--- a/chromium/docs/website/site/developers/testing/addresssanitizer/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: addresssanitizer
-title: AddressSanitizer (ASan)
----
-
-This document has moved to
-[//docs/asan.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/asan.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/android-tests/android-webview-tests/index.md b/chromium/docs/website/site/developers/testing/android-tests/android-webview-tests/index.md
deleted file mode 100644
index 3e00ad58768..00000000000
--- a/chromium/docs/website/site/developers/testing/android-tests/android-webview-tests/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/android-tests
- - Android Tests
-page_name: android-webview-tests
-title: Android WebView tests
----
-
-This content has moved into the chromium repository:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/test-instructions.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/android-tests/index.md b/chromium/docs/website/site/developers/testing/android-tests/index.md
deleted file mode 100644
index 94a53cf36f3..00000000000
--- a/chromium/docs/website/site/developers/testing/android-tests/index.md
+++ /dev/null
@@ -1,163 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: android-tests
-title: Android Tests
----
-
-## Concepts
-
-* **Native Unit Tests** - Normal Chromium unit tests based on the
- gtest framework.
-* **Java Unit Tests** - Tests for pure Java code, run on the host
- using the Junit framework. Can use
- [Robolectric](http://robolectric.org/) to emulate Android, and
- [Mockito](http://mockito.org/) to mock or stub classes that are not
- part of the code under test.
- * These are relatively new, and only exist in a few places so far.
-* **Instrumentation Tests** - Java tests written using the [Android
- Instrumentation Test
- Framework](http://developer.android.com/tools/testing/testing_android.html).
-* **Unit Instrumentation Tests** - Instrumentation tests that only
- tests Java code and not native code. Do not require JNI bindings and
- do not require starting up ContentShell (or another application).
- These should extend InstrumentationTestCase directly.
-* **Integration Instrumentation Tests** - Instrumentation tests that
- tests the entire stack from Java into native code, require JNI
- bindings to be set up and thus require ContentShell (or another
- application) to be started. These typically extend more specialized
- test base classes such as ContentShellTestBase.
-
-## Running Tests
-
-View this guide for running Android tests:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/android_test_instructions.md>
-
-## Location of Test Code
-
-As a general rule, tests should live next to the production code and test
-utilities should live in a test folder.
-In general, this should look like:
-
-* foo/android/java/src/bar - production code.
-* foo/android/junit/src/bar - Java unit tests
-* foo/android/javatests/src/bar - unit instrumentation tests.
-* foo/test/android/javatests/src/bar/test/util - reusable test
- utilities used to test the foo production code.
-* native unit tests should live next to the source (same as general
- Chromium unit test)
-
-Test utilities that are pure Java and do not depend on content or other Chromium
-code should live in:
-
-* base/test/android/javatests/src/org/chromium/base/test/util
-
-Test utilities in the content layer that are re-used by chrome should live in:
-
-* content/public/test/android/javatests/src/org/chromium/content/test/util
-
-The location of integration instrumentation tests depends on what they are
-testing:
-
-* If the test is directly testing code in
- content/public/android/java/src, it should live in
- content/public/android/javatests/src (although it might require the
- test base class from content/shell/android/javatests/src).
-* If the test is directly testing code in chrome/android/java/src, it
- should live in chrome/android/javatests/src (although it might
- require the test base class from
- chrome/android/testshell/javatests/src).
-* If the test is a general integration test (i.e. testing general
- functionality that might not be tied directly to specific code), it
- should live in the appropriate javatests folder:
- * content/shell/android/javatests/src - Content Shell
- * chrome/android/testshell/javatests/src - Chrome Test Shell
- * android_webview/javatests/src - [Android
- WebView](/developers/testing/android-tests/android-webview-tests)
-
-Please note that this implies that outside of Content Shell, Chrome Test Shell
-and Android WebView, you should:
-
-* write Java unit tests (if possible) or unit instrumentation tests to
- test your Java code.
-* write native tests for everything else.
-
-## Guidelines for Writing Tests
-
-### TestBase Classes and Test Utilities
-
-* TestBase classes
- * should only contain state that all subclasses will need.
- * should be as small and clean as possible.
- * should not include utility methods, instead use utility classes.
-* Unit instrumentation test classes should extend
- InstrumentationTestCase and not any other TestBase classes.
-* Utility test classes
- * are the preferred method of sharing functionality between test
- packages.
- * should only depend on production code or other test utilities.
- * should live in foo/test/android/javatests/src/bar/test/util.
-
-### Annotations
-
-Each instrumentation test should have a test size and feature annotation.
-
-#### Test Size Annotations
-
-* Always annotate a test with one of the test size annotations:
- * @SmallTest
- * @MediumTest
- * @LargeTest
- * android.test.suitebuilder.annotation.LargeTest/MediumTest/SmallTest
-* Know the size of your test.
- * In general:
- * unit Instrumentation tests are small.
- * integration Instrumentation tests are medium or large.
-* The timeouts for each test size is:
- * @SmallTest - 1 minute
- * @MediumTest - 3 minutes
- * @LargeTest - 5 minutes
-
-#### Feature Annotation
-
-* The feature annotation is used to specify which feature(s) the test
- is exercising.
-* The list of features can be found in
- [crbug](http://chromegw.corp.google.com/viewvc/chrome-internal/trunk/tools/issue_tracker/labels.txt?view=markup).
-* To add a feature annotation to your test, add the @Feature
- annotation and specify the feature(s) that the test is testing.
- * For example: @Feature({"Mobile-WebView"})
-* To run the tests for a specific feature, use:
- * foo/android/junit/src/bar python build/android/test_runner.py
- instrumentation --test-apk ContentShellTest --A
- Feature=Android-WebView,Main
-
-### Flaky and Crashing Tests
-
-If a test is flaky or randomly crashes, the test should **not** run on the build
-bots.
-The guidelines for handling flaky and crashing tests are as follows:
-
-* If a test is flaky but doesn’t crash, it should be marked flaky
- using the FlakyTest annotation.
-* If a test is crashing, it should be disabled using the DisabledTest
- annotation.
-* To mark a test flaky or disabled, do the following
- * create a bug for the test/area owner to fix the test.
- * don't mark a test flaky or disabled without creating a bug!!
- * add the @FlakyTest or @DisabledTest annotation to the test
- depending on whether the test is flaky or crashing.
- * add the relevant package import in the file header, import
- org.chromium.base.test.util.FlakyTest; or import
- org.chromium.base.test.util.DisabledTest;
- * add the bug number in a comment to the test.
- * please follow this example:
- @FlakyTest(message = "crbug.com/XXXXXX")
- Replace @FlakyTest with @DisabledTest if disabling a test.
- * if the test has any other annotations, do NOT remove these!
- * if a test fails only on a subset of devices, consider disabling
- it conditionally, like:
- @DisableIf.Build(sdk_is_greater_than = 23, message = "crbug.com/XXXXXX") \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/android-tests/testing-android-code-that-crosses-the-c-java-boundary/index.md b/chromium/docs/website/site/developers/testing/android-tests/testing-android-code-that-crosses-the-c-java-boundary/index.md
deleted file mode 100644
index 4a8f436cb9b..00000000000
--- a/chromium/docs/website/site/developers/testing/android-tests/testing-android-code-that-crosses-the-c-java-boundary/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/android-tests
- - Android Tests
-page_name: testing-android-code-that-crosses-the-c-java-boundary
-title: Testing Android code that crosses the C++/Java boundary
----
-
-## Java unit testing using JUnit
-
-The Junit tests run on the host, in an environment that doesn't include the C++
-components of Chromium. This gives two problems:
-
-* Testing ***@CalledByNative*** members:
-
-> These members are not generally called from other Java code, so are typically
-> declared as private. They are, however, part of the class's interface, so it
-> makes sense to test them. The solution is simple; change their scope to
-> package or public.
-
-* Calls to ***native*** members.
-
-> Calls to native code won't work in this environment, so the test needs to
-> intercept these calls. To solve this:
-
-> 1. Give your native methods a scope (package or public) that makes
- them visible to the tests, and mark them @VisibleForTesting.
-> 2. Use Mockito.spy to spy on the class you are testing.
-> 3. Stub the native method using Mockito. See the Mockito notes on
- [spying on real
- objects](http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#spy).
-
-> The following code shows an example of this:
-
-> ` // Spy on the authenticator so that we can override and intercept the native
-> method call.`
-
-> ` HttpNegotiateAuthenticator authenticator =`
-
-> ` spy(HttpNegotiateAuthenticator.create(1234, "Dummy_Account"));`
-
-> ` doNothing().when(authenticator).nativeSetResult(anyLong(), anyBoolean(),
-> anyString());`
-
-You can check that the native methods are called correctly using Mockito.verify
-etc
-
-## C++ unit testing of classes calling Java
-
-If you are testing a C++ class that calls Java methods there is generally no way
-of stubbing or mocking the Java methods in C++ without significant code changes
-(e.g. creating a C++ wrapper for the Java methods). C++ unit tests can, however
-call Java through the JNI. For many cases calling the real Java classes in the
-tests works fine, however if you need to stub or mock a Java class you can do so
-by writing an alternative version of it, with the same native interface, and
-building your tests against that alternative version.
-
-One problem that can occur is that certain Android SDK methods (e.g. those of
-AccountManager) return their results asynchronously through callbacks. These
-callbacks are called through the Android event loop, so can only be called on a
-thread that runs an Android Looper. At least some of the unit tests (e.g. the
-net_unittests) run on a thread that does not call the Android looper within
-their message loop's Run() method. One possible solution to this is to:
-
-1. Create a new Java thread with a Looper.
-2. Use ThreadUtils.setUiThread to tell Chrome that this is the UI
- thread.
-3. Run your test on the original thread, calling its Run method as
- appropriate. The test's Run loop should be terminated through a call
- to Quit once the result has been returned to the C++ code.
-
-base::StartTestUiThreadLooper will start such a dummy UI thread. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/browser-tests/index.md b/chromium/docs/website/site/developers/testing/browser-tests/index.md
deleted file mode 100644
index 17cd808dddc..00000000000
--- a/chromium/docs/website/site/developers/testing/browser-tests/index.md
+++ /dev/null
@@ -1,223 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: browser-tests
-title: Browser Tests
----
-
-## Introduction
-
-Browser tests are the framework used for integration tests of Chrome. As the
-name implies, they run inside the browser process.
-
-## Background
-
-In the beginning, Chrome integration tests were in a ui_tests binary which used
-automation to control and inspect a running Chrome. This was problematic because
-every time we wanted access to an object in the browser process, we had to add
-new automation hooks. It also made debugging hard because two processes had to
-be debugged (the test process and the browser process). In response to this,
-browser_tests was added. This is a binary which has the Chrome code compiled
-into it, as well as test code. The test code runs after browser process
-initialization and after a window has been created. Each test runs in a new
-browser process, to avoid tests impacting each other.
-
-## Test Binaries
-
-These are the current browser test binaries:
-
-* browser_tests: this is the original browser test binary. It's used
- for testing Chrome features (i.e. autofill, extensions).
-* interactive_ui_tests: the name is a holdover, but these are
- browser_tests which run on a bot that has an interactive session.
- They are also not sharded (i.e. run many times in parallel). This is
- needed for a small number of tests which need to generate input
- events from the OS (instead of simulating them internally), care
- about focus, etc...
-* components_browsertests: for code in //components
-* content_browsertests: this is like browser_tests, except that it's
- for testing features that are at the [Content
- module](/developers/content-module) layer. It's based on Content
- Shell instead of Chrome.
-* extensions_browsertests: for code in //extensions
-* performance_browser_tests: these are perf tests that run on bots
- with hardware GPUs for more realistic performance characteristics.
- These are not sharded.
-* weblayer_browsertests: for code in //weblayer
-
-## Example
-
-To write a browser test, instead of using the TEST_F GTEST macro, use
-IN_PROC_BROWSER_TEST_F, which requires src/content/public/test/browser_test.h.
-
-The parent class of the test depends on which binary it's in:
-
-* browser_tests and interactive_ui_tests use
- [InProcessBrowserTest](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/base/in_process_browser_test.h?revision=HEAD&view=markup)
- (src/chrome/test/base/in_process_browser_test.h)
-* content_browsertests use
- [ContentBrowserTest](http://src.chromium.org/viewvc/chrome/trunk/src/content/test/content_browser_test.h?view=markup)
- (src/content/test/content_browser_test.h)
-
-Both browser tests in src/content and src/chrome have access to a collection of
-test utilities for browser tests in
-[src/content/public/test/browser_test_utils.h](https://cs.chromium.org/chromium/src/content/public/test/browser_test_utils.h).
-This includes things like simulating input events, executing JavaScript and
-getting the result, modifying cookies etc... This is in addition to test
-utilities available to all tests (browser tests and unit tests) that are in
-[src/content/public/test/test_utils.h](https://cs.chromium.org/chromium/src/content/public/test/test_utils.h).
-This includes things like running nested message loops.
-
-Also include testing/gtest/include/gtest/gtest.h, rather than relying on
-browser_test.h including it for you.
-
-Browser tests in src/content and src/chrome have their own utility headers for
-interacting with the window, to add helpers for waiting for a new window to be
-added, navigating, getting the location of a test file etc.. Tests in src/chrome
-use
-[src/chrome/test/base/ui_test_utils.h](https://cs.chromium.org/chromium/src/chrome/test/base/ui_test_utils.h),
-while tests in src/content use
-[src/content/public/test/content_browser_test_utils.h](https://cs.chromium.org/chromium/src/content/public/test/content_browser_test_utils.h).
-
-An example test in browser_tests would like:
-
-IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, Foo) {
-
-GURL test_url = ui_test_utils::GetTestUrl(test_dir, test_file);
-
-ui_test_utils::NavigateToURL(browser(), test_url);
-
-content::WebContents\* web_contents = ...
-
-content::SimulateMouseClick(web_contents);
-
-// Inspect C++ objects and modify them now.
-
-}
-
-In general, existing tests provide the best examples on how to write a new test.
-Look at the browser_tests and interactive_ui_tests targets in the [chrome/test
-build
-file](https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/test/BUILD.gn),
-or the content_browsertests target in [content/test build
-file](https://chromium.googlesource.com/chromium/src/+/HEAD/content/test/BUILD.gn)
-to see a list of tests.
-
-## Debugging
-
-Per above, each test runs in a new browser process. To aid in debugging, you can
-start the browser test binary with --single-process-tests flag (along with
---gtest_filter=Foo.Bar). That way you can attach to the process that just got
-created, which will contain the test code. In this mode, make sure the filter
-only executes one test. Running more than one test will likely result in
-undefined behavior because the test fixture does not attempt to reinitialize any
-global state.
-
-To prevent the test from timing out while debugging, try playing with switches
-like --ui-test-action-max-timeout=1000000 --test-launcher-timeout=1000000.
-Although the test tries not to time out while a debugger is attached, if you use
---renderer-startup-dialog to attach a debugger to the renderer process, the test
-can time out in the meantime.
-
-Browser tests do not show pixel output by default, i.e. only a blank white
-window is shown. Use --enable-pixel-output-in-tests to change this. If you
-prefer to hide the window completely, follow [these
-instructions](https://chromium.googlesource.com/chromium/src/+/main/docs/linux/debugging.md#to-replicate-window-manager-setup-on-the-bots)
-to setup a virtual display using Xvfb and openbox and then set DISPLAY
-environment variable to redirect pixel output.
-
-In case you are debugging JavaScript browser tests (e.g. tests defined in
-[cr_settings_browsertest.js](https://source.chromium.org/chromium/chromium/src/+/HEAD:chrome/test/data/webui/settings/cr_settings_browsertest.js)),
-it can be helpful to add debugger; statements and to pass
---auto-open-devtools-for-tabs. This way the browser test will automatically halt
-when the debugger; statement is hit, allowing you to inspect the execution state
-via DevTools.
-
-## Customizing The Test Harness
-
-To allow more customization (such as changing the command line flags of the
-browser process, i.e. to enable features that are off by default), the test
-fixture can derive from InProcessBrowserTest or ContentBrowserTest and override
-some methods. See their shared base class,
-[BrowserTestBase](https://chromium.googlesource.com/chromium/src/+/HEAD/content/public/test/browser_test_base.h),
-for more information
-
-## Tests Spanning Restarts
-
-A test can span a restart of the browser process. This is useful in testing that
-something persisted, as an example. To do this, use the PRE prefix:
-
-IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, PRE_Foo) {
-
-// Do something.
-
-}
-
-IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, Foo) {
-
-// Verify something was done.
-
-}
-
-Each test above was run in a separate browser process, but the data directory of
-the profile was the same.
-
-## Tests That Don't Run By Default
-
-Something that often comes up is that a team wants to run a browser test based
-binary on their own bots. They can create a new binary, but that slows down the
-build for all bots. Instead, the tests should be put in browser_tests or
-content_browsertests with a MANUAL_ prefix. That way the test is compiled into
-the same binary that's used for all tests, but doesn't run by default on bots.
-It's only used when --run-manual is passed. The team's bots can then run
-browser_tests with --run-manual --gtest_filter=FooTeam\* .
-
-**Running Tests**
-
-ninja -C out/Release browser_tests
-
-./out/Release/browser_tests
-
-Works, but can take an hour or more, even on a fast machine.
-
-browser_tests also has lots of options which you can see via --help. Most useful
-are:
-
---test-launcher-bot-mode (used by the bots and is the recommended way to run
-browser_tests)
-
---test-launcher-jobs=20 (for manually controlling how many jobs are launched)
-
---gtest_filter=Foo.\* (for only running a subset of tests)
-
-For example, on linux use the following:
-
-xvfb-run -s "-screen 0 1024x768x24" ./out/out/browser_tests
---test-launcher-bot-mode
-
-For more info, we have an entire separate page to explain how to run
-[browser_tests on specific
-platforms](http://www.chromium.org/developers/testing/running-tests#TOC-Running-basic-tests).
-
-## Networking
-
-To avoid flakiness tests are not allowed to access the network. This is enforced
-by content::BrowserTestBase::SetUp() through its instantiation of
-content::TestHostResolver.
-
-Some tests may need to use multiple origins to test their code paths; one common
-way this is done is to redirect all origins to localhost:
-host_resolver()-&gt;AddRule("\*", "127.0.0.1")
-
-A small number of tests exercise code paths that make requests to Google domain.
-Due to the included [HSTS preload list](https://hstspreload.org/) in Chrome's
-networking code, your test will need to use an EmbeddedTestServer that's
-configured for https. Additionally, you will need two more switches:
-
-1. switches::kIgnoreCertificateErrors: needed since the test server
- only has a valid certificate for localhost
-2. switches::kIgnoreGooglePortNumbers: needed since production code
- only allows known ports (80/443) for Google domains
diff --git a/chromium/docs/website/site/developers/testing/changedashboard/index.md b/chromium/docs/website/site/developers/testing/changedashboard/index.md
deleted file mode 100644
index 709ac57638d..00000000000
--- a/chromium/docs/website/site/developers/testing/changedashboard/index.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: changedashboard
-title: Making changes to test dashboard
----
-
-**http://test-results.appspot.com**
-
-Making changes:
-
-1. In a Blink checkout, the code is at Tools/TestsResultServer.
-
-2. Modify the files locally. If you're only modifying files in the
-static-dashboards directory, then to test, you can just load the appropriate
-HTML file off your local disk.
-
-3. Run the flakiness_dashboard.html unittests by loading run-unittests.html.
-
-4. Get the patch reviewed and committed as per the usual Blink procedure.
-
-If you're fixing an emergency issue (e.g. the dashboard doesn't load at all),
-it's acceptable to push the new server before you've gotten your patch reviewed
-and committed.
-
-In order to push the changes to the server, you need to get permissions to
-modify the server. Contact one of the existing admins (e.g. ojan@chromium.org).
-Anyone is welcome to permissions.
-
-Pushing committed changes to the server:
-
-1. Install the appengine SDK for python:
-<http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Python>
-
-2. cd Tools/TestResultServer
-
-3. appcfg.py update . --version rXXXXX
-
-^^^ replace XXXXX with the SVN revision your Blink checkout is synced to. This
-is just a string. The push is from your local repository, not the actual SVN
-server. It's so we can keep track of what we've pushed to appengine.
-
-4. Go to <https://appengine.google.com/deployment?&app_id=test-results-hrd>.
-
-5. Verify that your version works by clicking on the "instances" link and
-navigating around.
-
-6. Select the version you just uploaded and click "Make Default".
-
-7. Sanity check that your changes are all working as expected. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/chrome-test-apis/index.md b/chromium/docs/website/site/developers/testing/chrome-test-apis/index.md
deleted file mode 100644
index 2f18596ff0d..00000000000
--- a/chromium/docs/website/site/developers/testing/chrome-test-apis/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: chrome-test-apis
-title: chrome.test APIs
----
-
-The chrome.test extension API is defined in
-[src/extensions/common/api/test.json](https://code.google.com/p/chromium/codesearch#chromium/src/extensions/common/api/test.json&q=test.json&sq=package:chromium&type=cs),
-that file also has some documentation for some of the methods it defines. The
-same code that injects all other extension APIs in the right context
-([extensions::Dispatcher::UpdateBindingsForContext](https://code.google.com/p/chromium/codesearch#chromium/src/extensions/renderer/dispatcher.cc&l=1089))
-also is responsible for injecting the chrome.test bindings (there is some
-special code there to not inject the chrome.test API unless the process has a
---test-type command line flag). The
-[src/extensions/common/api/_api_features.json](https://code.google.com/p/chromium/codesearch#chromium/src/extensions/common/api/_api_features.json&l=270)
-file determines in what contexts the chrome.test API (and other extension APIs
-as well) will be injected. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/index.md b/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/index.md
deleted file mode 100644
index d8f3fc39f94..00000000000
--- a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: chromium-build-infrastructure
-title: Chromium build infrastructure
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/index.md b/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/index.md
deleted file mode 100644
index 74be71e1b14..00000000000
--- a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/index.md
+++ /dev/null
@@ -1,269 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/chromium-build-infrastructure
- - Chromium build infrastructure
-page_name: performance-test-plots
-title: Performance Test Plots - to track performance regressions
----
-
-Warning: this page is stale. Performance test results are now displayed at
-[chromeperf.appspot.com](https://chromeperf.appspot.com/).
-
-See:
-
-* [User Guide: Chrome OS Performance Tests and the Chrome Performance
- Dashboard](/chromium-os/testing/perf-data)
-* [Adding Performance
- Tests](/developers/testing/adding-performance-tests)
-* [Sending Data to the Performance
- Dashboard](/system/errors/NodeNotFound)
-
----
-
-Chromium's buildbot runs a battery of performance tests on each build it
-produces. These performance test results are collected and viewable on the web
-to help Chromium developers study how the project's builds perform over time. By
-adding new tests, tuning existing tests, and configuring monitors to alert
-developers to unexpected conditions (such as regressions or speedups), the
-Chromium project continually improves its overall code quality. This document
-explains how that performance testing system functions and how changes can be
-introduced.
-
-[TOC]
-
-### Gathering performance results
-
-Each performance test is run by buildbot by executing that test's harness. The
-harness sets up the initial conditions for the test, runs the test (maybe
-repeatedly), and reports results on the program's standard output. You can build
-and run a test harness on your system -- these are the same programs the
-buildbot runs to measure performance. Note that your performance results could
-vary considerably from what the Chromium project's test systems report.
-
-### A sample performance plot
-
-Test runs can be simple -- "test the amount of time it takes to switch between
-two tabs" -- or complicated -- "test warm/cold startup performance with/without
-themes." Most of the tests run by the buildbot are pretty straightforward, but
-the performance test output can be hard to use at first. Let's look at the most
-complicated kind of performance test, a page-cycler test, as an example. The
-page-cycler tests take a set of URLs that have been saved to local files to
-eliminate the network as a source of performance noise, and load them several
-times each, tracking various data. Find a "Perf" builder, scroll down to any
-page_cycler step, and click the "results" link. You'll see a plot like this one:
-
-[<img alt="image"
-src="/developers/testing/chromium-build-infrastructure/performance-test-plots/page_cycler_plot.png">](/developers/testing/chromium-build-infrastructure/performance-test-plots/page_cycler_plot.png)
-
-The boxes along the top list the different graphs available, one for each kind
-of data that was collected by the page_cycler test. Click on one to see that
-information plotted. Here's what all the pieces of the names mean:
-
-<table>
-<tr>
-<td>times</td>
-<td>time in milliseconds to load each page once</td>
-</tr>
-<tr>
-<td>_b</td>
-<td>a data point collected from the browser process</td>
-</tr>
-<tr>
-<td>_r</td>
-<td>a data point collected from the renderer process</td>
-</tr>
-<tr>
-<td>vm_</td>
-<td>virtual memory used</td>
-</tr>
-<tr>
-<td>ws_</td>
-<td>working-set memory used</td>
-</tr>
-<tr>
-<td>_peak_</td>
-<td>peak memory usage during the entire test</td>
-</tr>
-<tr>
-<td>_final_</td>
-<td>memory usage when the test ended</td>
-</tr>
-<tr>
-<td>_op_</td>
-<td>I/O operations</td>
-</tr>
-<tr>
-<td>_byte_</td>
-<td>I/O bytes</td>
-</tr>
-<tr>
-<td>read_</td>
-<td>I/O ops or bytes read</td>
-</tr>
-<tr>
-<td>write_</td>
-<td>I/O ops or bytes written</td>
-</tr>
-<tr>
-<td>other_</td>
-<td>any other I/O bytes or ops</td>
-</tr>
-<tr>
-<td>total_</td>
-<td>sum of read, write, and other I/O</td>
-</tr>
-</table>
-
-So for example, "vm_final_b" is the final VM usage of the browser process.
-
-Depending on the graph you're looking at, there will be one or more colored
-lines, or "traces". Generally one of these is the main data point for the build
-being tested ("t" for times, for instance) and one is data taken from a
-reference build so we can discount temporary glitches on the machine ("t_ref"
-for reference times). Other traces might be shown, too, and described in the
-legend below the plot.
-
-If you click your mouse on the plot, one build will be highlighted by a grey
-vertical line, and the svn log for the build you've selected will be shown in a
-frame below the plot. Below the legend is the revision number and first data
-point (using the order on the legend) for that revision. It's followed by the
-data value for the spot your mouse is hovering over, so you can quickly compare
-two points. If you shift-click on the plot, you'll place a horizontal marker,
-and the offset between that marker and the mouse is shown in the lower right.
-
-### Adding a new performance plot
-
-When a Chromium developer wants to measure a new aspect of Chromium's
-performance, the developer either modifies an already-in-place harness to
-provide additional data or creates a new harness to produce this data. When a
-new harness is added, the Chromium buildbot's configuration is updated to run it
-and told where to gather its performance test results. Modifying a harness to
-add more data may not require any buildbot configuration changes.
-
-Tests in Chromium typically use one of the methods in
-[chrome/test/perf/perf_test.h](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/perf/perf_test.h?view=markup)
-to print their results in the standard format expected by the post-processing
-scripts.
-
-### Monitoring performance for regressions
-
-Once the Chromium buildbot runs all of a build's tests, it gathers the results
-on the perf dashboard and reports whether the test met, exceeded, or missed its
-expectations. The Chromium buildbot follows this algorithm to determine what to
-report after gathering results:
-
-1. If the current test crashes or times out:
- -&gt; FAILURE
-2. If the current report being scanned doesn't match any trace
- instances (see "Format of expectations file" below) the buildbot is
- monitoring:
- -&gt; SUCCESS
-
-3. If any monitored trace instance regressed:
- -&gt; FAILURE
-
-4. If any monitored trace instance was faster than expected:
- -&gt; WARNING
-
-5. If all monitored trace instances were within expectations:
- -&gt; SUCCESS
-
-In a non-success result, the build's details are updated to include a
-description of which graph+trace regressed or got faster.
-
-#### Format of expectations file
-
-Perf regression monitoring is controlled via
-[src/tools/perf_expectations/perf_expectations.json](http://src.chromium.org/viewvc/chrome/trunk/src/tools/perf_expectations/perf_expectations.json?view=markup).
-This is a JSON file with the following format:
-{
-"PERFID/TEST/GRAPH/TRACE": {"reva": REVA, "revb": REVB, "improve": IMPROVE,
-"regress": REGRESS},
-"PERFID/TEST/GRAPH/TRACE": {"reva": REVA, "revb": REVB, "improve": IMPROVE,
-"regress": REGRESS},
-"PERFID/TEST/GRAPH/TRACE": {"reva": REVA, "revb": REVB, "improve": IMPROVE,
-"regress": REGRESS},
-...,
-"load": true
-}
-<table>
-<tr>
-<td><b>Name</b></td>
-<td><b>Type</b></td>
-<td><b>Description </b></td>
-</tr>
-<tr>
-<td>PERFID</td>
-<td>string</td>
-<td>System perf name (ie. xp-release-dual-core -- see factory/chromium_commands.py).</td>
-</tr>
-<tr>
-<td>TEST</td>
-<td>string</td>
-<td>Test name (ie. moz, startup -- see factory/chromium_commands.py).</td>
-</tr>
-<tr>
-<td>GRAPH</td>
-<td>string</td>
-<td>Graph name (ie. times, warm).</td>
-</tr>
-<tr>
-<td>TRACE</td>
-<td>string</td>
-<td>Trace name on the selected graph (ie. t, vm_rss_f_r). </td>
-</tr>
-<tr>
-<td>REVA</td>
-<td>integer</td>
-<td>Start (inclusive) of expected range (see make_expectations.py).</td>
-</tr>
-<tr>
-<td>REVB</td>
-<td>integer</td>
-<td>End (inclusive) of expected range (see make_expectations.py).</td>
-</tr>
-<tr>
-<td>IMPROVE</td>
-<td>integer</td>
-<td>The best result of the current trace less the ref trace. In times tests, this is the lower value; in scores tests, the higher value.</td>
-</tr>
-<tr>
-<td>REGRESS</td>
-<td>integer</td>
-<td>The worst allowed result of the current trace less the ref trace. In times tests, this is the higher value; in scores tests, the lower value.</td>
-</tr>
-</table>
-Notes:
-
-* Setting "load" to "true" enables performance regression monitoring.
-* Strings must be quoted with " (not ').
-* Comments are not allowed in JSON.
-
-#### Perf expectations example
-
-Take the following perf_expectations.json file as an example:
-{"xp-release-dual-core/morejs/times/t": {"improve": 50, "regress": 110},
-"xp-release-dual-core/startup/warm/t": {"improve": -65, "regress": 25},
-"load": true
-}
-This declares 2 trace instances that should be monitored for regressions, both
-on Chromium's XP perf test system. The first --
-xp-release-dual-core/morejs/times/t -- monitors results of the morejs page
-cycler's page load time. It alerts when the page load time for the current build
-less the reference build is greater than 110ms.
-
-The second -- xp-release-dual-core/startup/warm/t -- monitors results of the
-warm startup test and alerts when the difference between the current build and
-reference build is greater than 25ms.
-For each of these traces, warnings (not failures) are generated when speed ups
-occur. A speed up occurs when a given result is better than the expected improve
-value.
-
-#### **Updating performance expectations, selecting acceptable results, ...**
-
-See the [Perf Sheriffing](/developers/tree-sheriffs/perf-sheriffs) page for more
-details about updating perf expectations, selecting acceptable results, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/page_cycler_plot.png.sha1 b/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/page_cycler_plot.png.sha1
deleted file mode 100644
index c170f41df5d..00000000000
--- a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/performance-test-plots/page_cycler_plot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8f72b2586869d21e028b1858232b583a931db3b5 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/repro-a-build/index.md b/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/repro-a-build/index.md
deleted file mode 100644
index 0394dce1b44..00000000000
--- a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/repro-a-build/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/chromium-build-infrastructure
- - Chromium build infrastructure
-page_name: repro-a-build
-title: How to repro a build from a waterfall.
----
-
-Reproducing a builder's build can generally be done by following the
-instructions located under the 'run_recipe' link on the build page itself.
-
-In particular, you need to [install
-depot_tools](/developers/how-tos/install-depot-tools), and then get a build
-checkout:
-
-```none
-$ cd <empty dir>
-$ # One of:
-$ fetch infra           # external user
-$ fetch infra_internal  # internal user
-$ cd build
-```
-
-And then navigate to a build that you want to repo. Look for the build step
-which looks like:
-
- ==setup_build== setup_build
- running recipe: "&lt;RECIPE_NAME&gt;" ( 0 secs )
-
- * ==stdio==
- * ==run_recipe==
-
-Then click the 'run_recipe' link and you'll get some instructions on how to
-repro the build. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/index.md b/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/index.md
deleted file mode 100644
index 037b17c803d..00000000000
--- a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/index.md
+++ /dev/null
@@ -1,343 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/chromium-build-infrastructure
- - Chromium build infrastructure
-page_name: tour-of-the-chromium-buildbot
-title: Tour of the Chromium Continuous Integration Console
----
-
-Chromium uses [LUCI](https://chromium.googlesource.com/infra/luci/luci-go/) to
-run continuous builds and tests. The most useful is the [Main
-Console](https://ci.chromium.org/p/chromium/g/main/console). From the top
-section you'll see other consoles linked. Each can display its own console view.
-The Chromium Console shows the status of many tests. That Console shows a lot of
-information that can be hard to understand at first, so let's take a quick tour.
-
-[TOC]
-
-## Basics
-
-The LUCI service watches the git repository, telling machines in Swarming to
-start building and testing new revisions, and serves the "console" page that
-shows all the results. Every time a new revision is discovered, the scheduler
-triggers builders as each serve a different purpose. "Testing" builders are
-triggered when a "building" builder doing compilation archives its build. For
-example, all "XP Tests (dbg)(N)" and "Vista Tests (dbg)(N)" are triggered when
-"Chromium Builder (dbg)" is done archiving its build.
-
-## Builds
-
-Let's take a look at the [console
-page](https://ci.chromium.org/p/chromium/g/main/console). For now, skip over the
-header (green, red, yellow, etc.) and the box at the top with lots of links and
-horizontal stripes (we'll come back to them later), and look down at the row of
-grey boxes with "changes" at the left. Those boxes show one column per builder.
-
-The main console page shows only the builders, machines that build the
-executables and then distribute them to numerous machines to run various kinds
-of tests.
-
-TODO: Everything below here is outdated.
-
-[<img alt="image"
-src="/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/waterfall.png">](/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/waterfall.png)
-
-"Memory" builders run tests using ASAN to check memory correctness, "Perf"
-builders are running performance tests, and "GPU" builders run tests related to
-GPU usage. "Tree closers" automatically close the tree (preventing people from
-committing new changes) when they fail; "FYI" testers are considered less
-important, so failures there shouldn't close the tree.
-
-Click on one of the platform names next to a row of colored boxes in the big
-grey box at the top, and then on "waterfall" at the left, to see the testing
-bots working on that platform, for example
-[Windows](http://build.chromium.org/p/chromium.win/waterfall). The set of
-builders changes pretty often, so any list we could put here would go out of
-date quickly, but the names are generally pretty good at describing what kinds
-of machines they are and what kinds of tests they're running. A "dbg" builder is
-running a Debug build rather than a Release build. Some machines both build and
-test, but "builder" machines only build the executables, then upload them to
-"tests" machines to run the tests.
-
-## Build Steps
-
-Now look down one of the columns, starting at the grey box with the builder's
-name. Each box shows one step in that builder's build/test sequence, with the
-oldest one at the bottom and the current or latest one just below the name box.
-Just above the name box is the builder's current activity, and above that is the
-final result of the last build/test sequence that finished.
-
-A yellow build step is still in progress, green finished successfully, red
-finished with errors, orange finished with warnings, and purple had an internal
-build error.
-
-<table>
-<tr>
-<td><b>Step name</b></td>
-<td><b>Script </b></td>
-<td><b>Description</b></td>
-<td><b>When is it orange?</b></td>
-<td><b>When it is red...</b></td>
-</tr>
-<tr>
-<td>svnkill</td>
-<td>taskkill</td>
-<td>Kill any leftover svn processes before starting a new test cycle.</td>
-<td>N/A</td>
-<td>N/A; contact trooper</td>
-</tr>
-<tr>
-<td>update scripts</td>
-<td>gclient sync</td>
-<td>Update the internal build scripts on the builder.</td>
-<td>N/A</td>
-<td>svn server failure; contact trooper</td>
-</tr>
-<tr>
-<td>update</td>
-<td>gclient sync </td>
-<td>Update the checkout with gclient. This also runs the hooks like gyp to generate the make/vcproj/xcodeproj files.</td>
-<td>N/A</td>
-<td>svn server failure or DEPS breakage; contact trooper</td>
-</tr>
-<tr>
-<td>taskkill</td>
-<td>kill_processes.py</td>
-<td>Kill a bunch of other possible leftover processes (test_shell.exe, ui_tests.exe, etc.) that would interfere with a clean run.</td>
-<td>N/A</td>
-<td>N/A; contact trooper</td>
-</tr>
-<tr>
-<td>gclient_revert</td>
-<td>gclient_safe_revert.py</td>
-<td>Revert any changes if a checkout exists.</td>
-<td>N/A</td>
-<td>svn server failure or broken checkout; contact trooper</td>
-</tr>
-<tr>
-<td>cleanup_temp</td>
-<td>cleanup_temp.py</td>
-<td>Remove any leftover temp files.</td>
-<td>N/A</td>
-<td>N/A; contact trooper</td>
-</tr>
-<tr>
-<td>check deps</td>
-<td>checkdeps.py </td>
-<td>Ensure that source dependencies stay clean. It's done by parsing .cc and .h files according to rules to DEPS files.</td>
-<td>N/A</td>
-<td>A bad change; revert</td>
-</tr>
-<tr>
-<td>compile</td>
-<td>compile.py</td>
-<td>Build the executables</td>
-<td>N/A</td>
-<td>A bad change; revert</td>
-</tr>
-<tr>
-<td>archive build</td>
-<td>archive_build.py</td>
-<td>Save the executables and symbols into "snapshots"</td>
-<td>N/A</td>
-<td>N/A</td>
-</tr>
-<tr>
-<td>extract build</td>
-<td>extract_build.py</td>
-<td>Extract an archive build on a tester from the corresponding "builder"</td>
-<td>Failed to fetch the url requested. The last archived build is used instead.</td>
-<td>Failed to fetch any build; the bot probably needs to be restarted, contact a trooper</td>
-</tr>
-<tr>
-<td>(various tests)</td>
-<td>runtest.py, debuger_unittests.py, chrome_tests.py, etc</td>
-<td>See <a href="/developers/testing">testing information</a></td>
-<td>Only FLAKY_ tests failed</td>
-<td>Tests failed; revert.</td>
-</tr>
-<tr>
-<td>layout tests</td>
-<td>webkit_test.py</td>
-<td>Run <a href="/developers/testing/webkit-layout-tests">html based tests from webkit</a></td>
-<td>Tests marked as FAIL passed, no test unexpectedly failed. See test_expectations in layout test doc.</td>
-<td>Unexpected layout test failure. It's usually related to a Webkit roll.</td>
-</tr>
-<tr>
-<td>BVT tests</td>
-<td>wait_for_bvt.sh and others</td>
-<td>Run tests on actual ChromiumOS hardware</td>
-<td>N/A</td>
-<td>Tests failed or machine broke.</td>
-</tr>
-<tr>
-<td>Reliability tests</td>
-<td>reliability_tests.py</td>
-<td>Run <a href="/system/errors/NodeNotFound">distributed tests</a> to find non-deterministic crashes. It is green when only "known crashers" happens</td>
-<td>Fails to grab the summary of the test runs for the expected build.</td>
-<td>New stack traces appeared in crashes. </td>
-</tr>
-</table>
-
-If you click on the "stdio" link for a step, you can see the exact command that
-was run and the environment it was run in in blue, and any output it produced in
-black. stderr is in red.
-Most of the tests are pretty straightforward, but performance test output can be
-complicated at times. See the [Guide to Perf Test
-Plots](/developers/testing/chromium-build-infrastructure/performance-test-plots)
-for more about that.
-
-## Builders vs Testers
-
-A tester doesn't compile, so **you can't clobber it**. It simply extracts its
-build from a builder. Testers are triggered when the corresponding builder
-finishes.
-
-## Changes
-
-Each time someone commits a change to the repository, the system notifies
-builders to start their build and test sequences. (If they're already busy, the
-change is queued, which means that more than one change is included in a single
-run if they're coming in faster than the builders can test.) The "changes"
-column at the left of the waterfall shows who committed a patch and when. If you
-hover over that link, you'll see a summary of the change; click on it to see a
-little more information. The times at the very left are in Pacific time.
-At the start of each run (that is, at the bottom of each series of steps for a
-build), there's a yellow box holding the build number. Clicking on that
-build-number link shows more information about the run, including in principle
-the "blamelist" of changes that went into it. Every now and then, though, that
-list of changes is off by one. If you need to know for sure, look at the results
-of the "update" step to see exactly what gclient sync pulled in.
-
-## Tree state
-
-The "tree" is the sum of the various source repositories used to build the
-project, being Chromium, ChromiumOS, NativeClient, etc. In Chromium case, it's
-chrome/src/ plus everything listed in its
-[DEPS](http://src.chromium.org/viewvc/chrome/trunk/src/DEPS?view=markup) file,
-and a bit more for Google Chrome like trademarked graphics. The tree can be
-"open", "closed" or "throttled". The normal state is open. When tests break, the
-tree is closed by putting the word "closed" in the tree status;
-[PRESUBMIT.py](http://src.chromium.org/viewvc/chrome/trunk/src/PRESUBMIT.py?view=markup)
-checks the status and will block commits, and the build sheriff will act to fix
-the tree. When the tree is throttled, commits are only allowed with specific
-permission from the build sheriff, generally because the sheriff wants to make
-sure the tree is stable before opening it up to unlimited commits.
-
-## Seeing More and Seeing Less
-
-Tucked away down at the very bottom of the waterfall page is a set of small
-links, of which two are particularly useful. The \[next page\] link takes you to
-the next screenful of the waterfall, which is backward in time to earlier
-builds. The \[help\] link, among other things, shows you a list of all the bots
-attached to this waterfall. You can choose which ones you'd like to see, then
-bookmark the resulting URL so you can get that view easily next time.
-
-**Banner and Box**
-
-Now back to the top of the waterfall. At the very top is a banner showing the
-current state of the tree. If the tree is closed because of build or test
-failures, it should be mentioned here. If there's an announcement about a new
-build process, expected downtime, or some other aspect of Chromium development,
-it'll generally be shown here, too.
-Below that is an oval box. It has a number of handy links at the left -- try
-them to see where they go. It also has four rows of colored boxes, which show
-the pass/fail status of the last completed runs for several categories of
-builders. If you click on one of those category names, you'll go to a partial
-waterfall view that shows only the related builders. Hovering over a colored box
-shows you the name of the builder it's summarizing, and clicking on the box will
-go to a waterfall view with only that one builder.
-
-## Sheriffs
-
-The last thing in the oval is a list of this week's build sheriffs. Although
-every developer is responsible for running tests before committing patches and
-watching the tree for problems afterward, the sheriffs have overall
-responsibility in case someone else is away or not paying attention.
-
-## Sources
-
-Most of the source for Chromium's builder setup is found in the
-[chromium/tools/build](https://chromium.googlesource.com/chromium/tools/build)
-Git repo.
-
-## Adding new build configurations and tests to the main Chromium waterfall & Commit Queue
-
-Since every additional configuration that closes the tree has a cost for all the
-developers to maintain it, there are some guidelines for adding new bots to the
-main waterfall and commit queue:
-
-* all the code for this configuration must be in Chromium's public
- repository or brought in through src/DEPS
-* setting up the build should be straightforward for a Chromium
- developer familiar with existing configurations
-* tests should use the existing test harnesses
-* it should be possible for any committer to replicate any testing
- run; i.e. tests and their data must be in the public repository
-* cycle time needs to be under 40 minutes for trybots
-
-In addition to the above requirements, configurations need to catch enough
-failures to be worth adding to the commit queue, because running builds on every
-CL is expensive. If a configuration only fails once every couple of weeks on the
-waterfalls, it's probably not worth it to add it to the commit queue.
-
-If a configuration has tests that depend on code in other repositories, then it
-could have its own LUCI project. The team responsible for a separate
-configuration would sheriff that separate tree. Teams would generally find it
-more maintainable to have a configuration on the main Chromium tree that
-observes the above guidelines, even if it only contains a subset of the full
-code and tests. Whenever a regression is found that only reproduces on the
-separate team's LUCI project, the separate team's goal should be to write a
-regression test that runs on the main Chromium waterfall to catch those failures
-in Chromium, too.
-
-Please email dpranke@chromium.org to sign off on new build configurations.
-
-When adding new tests for existing build configs, see [Adding new tests to the
-Main Waterfall](/developers/testing/adding-tests-to-the-main-waterfall).
-
-## Builder setup
-
-For some builders, there exist no trybots. In order to debug compile failures,
-you need to setup a similar compile environment locally:
-
-* [Linux Builder (dbg-shlib)](/system/errors/NodeNotFound)
-
-## Other views
-
-The [console view](http://build.chromium.org/p/chromium) is the default one.
-Marc-Antoine is also looking for people willing to use the [json
-interface](http://build.chromium.org/p/chromium/json/help) to create a cool live
-interface in Javascript. Contact him for more details.
-
-## Glossary
-
-It's important to use the right words so here are the official definitions:
-
-* **builder**: a column in the waterfall or console view, doing a
- series of build steps. The build steps involve compiling and/or
- running tests.
-* **bot**: an actual machine (often a VM) connected to a builder. In
- the case of the [try server](/developers/testing/try-server-usage),
- multiple bots are connected to one builder. In general there is a
- 1:1 mapping between a bot and a builder so they can usually be used
- interchangeably.
-* **build step**: a shell invocation like *compile* or *update
- sources*. Each builder has a determined series of build steps that
- are executed on the bot.
-* **"a tester"**: a builder that only runs tests, it gets its binaries
- from the extract step.
-* **"a builder"**: a builder has a double-meaning, it can be any
- builder but also only builder that compiles code but does not run
- tests.
-* **"an incremental builder"**: a builder that does incremental
- compiles.
-* **"a full builder"**: a builder that does full compiles, it does a
- clobber on every compile (deleting all build products), starting
- fresh.
-* **clobber**: the act of doing a full builder, versus an incremental
- build. E.g.: rm -rf out; make \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/waterfall.png.sha1 b/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/waterfall.png.sha1
deleted file mode 100644
index 491c8653916..00000000000
--- a/chromium/docs/website/site/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/waterfall.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f5ca18aea27092fa676e51cacc007e5e8a73fb88 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/commit-queue/chromium_trybot-json/index.md b/chromium/docs/website/site/developers/testing/commit-queue/chromium_trybot-json/index.md
deleted file mode 100644
index 5e9618c233d..00000000000
--- a/chromium/docs/website/site/developers/testing/commit-queue/chromium_trybot-json/index.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/commit-queue
- - Chromium Commit Queue
-page_name: chromium_trybot-json
-title: Analyze step(s)
----
-
-The analyze step is used to determine if a compile is necessary for the current
-platform and if a compile is necessary the set of targets (tests) to execute. By
-default all try bots run the analyze step. To make a bot not run the analyze
-step add the name of the bot to the non_filter_builders key (non_filter_builders
-is expected to be an array of strings) in the corresponding trybot file. For
-example, to opt out the trybot win_chromium_rel_swarming add
-win_chromium_rel_swarming to the key non_filter_builders in the file
-[chromium_trybot.json](http://src.chromium.org/viewvc/chrome/trunk/src/testing/buildbot/chromium_trybot.json).
-
-The analyze step does it work by running a custom gyp generator. In order for
-the analyze step to produce reliable results all dependencies need to be
-correctly listed. This currently isn't the case for a set of files. For example,
-data files for tests are not listed as dependencies. Such dependencies are
-handled by adding them to the exclusions list of the file
-[trybot_analyze_config.json](http://src.chromium.org/viewvc/chrome/trunk/src/testing/buildbot/trybot_analyze_config.json)
-.
-
-Bots that further filter out the set of tests to run based on the changed files
-is currently opt in. Opt in is done by adding the name of the bot to
-filter_tests_builders in the appropriate config file for the bot. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/commit-queue/design/index.md b/chromium/docs/website/site/developers/testing/commit-queue/design/index.md
deleted file mode 100644
index 8271638d125..00000000000
--- a/chromium/docs/website/site/developers/testing/commit-queue/design/index.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/commit-queue
- - Chromium Commit Queue
-page_name: design
-title: 'Design doc: Chromium Commit queue'
----
-
-## Objective
-
-Have a formal way for developers to ensure their patch won't break the
-Continuous Integration checks with a relatively high confidence level.
-
-## Background
-
-Before the Chromium Commit Queue, it's on each developer's shoulder to manually
-run multiple try jobs on the [Try Server](/system/errors/NodeNotFound) and check
-their results before committing.
-
-This is "brain wasted time" as this can be completely automated. The Commit
-Queue aims at automating this manual verification so the developer can start
-right away working on the next patch. This is necessary to scale at a sustained
-~100 commits/day.
-
-## Overview
-
-The CQ polls rietveld for CLs that are ready to be committed. The Chromium's
-fork of Rietveld has a 'Commit' checkbox. When the author or the reviewer checks
-it, it will be included in the next poll. Once the CQ learns about the CL, it
-verifies the author or one of the reviewers approving this CL is a full
-committer, then runs the presubmit checks, then runs try jobs and then commit
-the patch on the behalf of the author, faking its credential. The whole project
-is written in python.
-
-## Infrastructure
-
-It runs as a single-thread process. The infrastructure is really minimal since
-it's just a logic layer above the current infrastructures to automate something
-that was done manually by the developers. In particular, the CQ reuses:
-
-* the [try server](/system/errors/NodeNotFound)
-* chromium's branch of [rietveld](http://code.google.com/p/rietveld/)
-* [presubmit
- scripts](/developers/how-tos/depottools/presubmit-scripts) included
- in [depot_tools](/developers/how-tos/depottools)
-
-## Detailed Design
-
-Runs the following loop:
-
-1. Polls <http://codereview.chromium.org/search?closed=3&commit=2> to
- find new issues to attempt to commit.
-2. For each issue found,
- 1. Runs preliminary checks,
- 1. Make sure someone is a full committer
- 2. Make sure there's a LGTM or the CL is TBR'ed.
- 2. Runs presubmit checks, including OWNERS check.
- 3. Sends new try jobs with -r HEAD.
- 1. They are publicly visible at
- <http://build.chromium.org/p/tryserver.chromium/waterfall?committer=commit-bot@chromium.org>.
- 2. Astute users will see that it runs a subset of the tests.
- Please contribute to Flaky tests fight so more tests can be
- used.
- 3. If ToT is broken, the commit queue will retry your patch on
- an older revision automatically.
- 4. Makes sure no new comments were added to the issue.
- 5. If everything passes, once the tree is open;
- 1. Commits the change on the behalf of the issue owner, even if
- the owner is not a Chromium commiter.
- 6. If one of the steps fails, the 'commit' checkbox is cleared and
- the issue is removed from the queue.
- 1. However, they author or a reviewer can re-check the box and
- the CQ will try again.
-
-Issues are processed asynchronously so whatever faster try job completes first
-wins. This is important as a flaky CL won't bottleneck the remaining one. This
-is mainly because the number of commit per hour is disproportionate to the try
-server latency, e.g. the full build and test cycle time for all the platforms.
-
-### Faking author in subversion
-
-To commit on the behalf of the author, an unconventional technique is used in
-subversion with a server-side pre-commit hook. The code is at:
-<http://src.chromium.org/viewvc/chrome/trunk/tools/depot_tools/tests/sample_pre_commit_hook?view=markup>
-
-The control flow is:
-
-1. On the client side, with a checkout with a special committer
- credential;
- 1. svn commit --with-revprop realauthor=&lt;author to attribute the
- commit to&gt;
-2. On the server side;
- 1. A pre_commit_hook intercepts the commits
- 2. It opens &lt;repo&gt;/db/transactions/&lt;tx&gt;.txn/props and
- parses its data
- 3. If the realauthor svn property if found,
- 1. It verifies svn:author is a special committer
- 2. It does simple sanity checks
- 3. It replaces svn:author with realauthor's value
- 4. It sets the commit-bot svn property to know this revision
- was committed by the CQ.
- 4. The updated data is saved in the transaction file.
-
-This works much better than using svn propset --revprop since there is no race
-condition and the revision property modifications are done *during* the commit.
-This technique can only be used when it is possible to set a server side hook so
-for example, it can't be used with projects hosted on code.google.com.
-
-## Project Information
-
-* maruel@ wrote it and dpranke@ did the code reviews.
-* Code:
- <http://src.chromium.org/viewvc/chrome/trunk/tools/commit-queue/>
-
-## Caveats
-
-The main problem is test flakiness. The CQ works around this problem partially
-by retrying failed tests a second time. It retries compile failure with a full
-rebuild, versus an incremental build normal, to work around cases of broken
-incremental compiles, which does happen relatively frequently. Fixing these two
-problems is outside the scope of the CQ project.
-
-Rietveld doesn't enforce a coherent svn url mapping on its CLs, causing CLs to
-be ignored by the CQ.
-
-## Latency
-
-The CQ is very slow at the moment. This is why the [test
-isolation](/system/errors/NodeNotFound) effort was started. The CQ is bound by:
-
-* Rietveld polling, which is at best 10 seconds.
-* Synchronous presubmit check execution, which is synchronous and
- single threaded, but with a timeout.
-* Try job execution, including automatic retries.
-* Waiting for the tree to open.
-* The actual commit, which is fairly fast.
-
-## Scalability
-
-The main scalability issue is running the presubmit checks and sending the try
-jobs. Many of the presubmit checks assume they are not running concurrently on
-the system and running them in parallel on one VM could cause random problems.
-If the CQ used a more decentralized approach, it would scale much better for
-that.
-
-## Redundancy and Reliability
-
-There are multiple single points of failure;
-
-* The CQ itself, running on a single process.
-* The try server, which is itself not redundant.
-
-## Security Considerations
-
-The commit queue require a full committer involvement, either to be the author
-of the CL or to be a reviewer giving approval. The security depends on Rietveld
-assumptions about its meta data:
-
-* A rietveld issue cannot change of owner.
-* A rietveld comment cannot be faked by a third party.
-
-All communications happens over https.
-
-## Testing Plan
-
-Comprehensive set of unit tests was written. The code itself sends stack traces
-in case of exception for monitoring purposes. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/commit-queue/index.md b/chromium/docs/website/site/developers/testing/commit-queue/index.md
deleted file mode 100644
index 454666be78f..00000000000
--- a/chromium/docs/website/site/developers/testing/commit-queue/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: commit-queue
-title: Chromium Commit Queue
----
-
-[TOC]
-
-This page has moved to
-[//docs/infra/cq.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/infra/cq.md)
-
-See also: [Chromium OS Commit Queue](/system/errors/NodeNotFound). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/commit-queue/integration-with-rietveld/index.md b/chromium/docs/website/site/developers/testing/commit-queue/integration-with-rietveld/index.md
deleted file mode 100644
index 157c38e6864..00000000000
--- a/chromium/docs/website/site/developers/testing/commit-queue/integration-with-rietveld/index.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/commit-queue
- - Chromium Commit Queue
-page_name: integration-with-rietveld
-title: 'Design: 3-way Integration with Rietveld and the Try Server'
----
-
-[TOC]
-
-## Objective
-
-Drastically reduce the *perceived time* (wall-clock time) from asking the
-infrastructure to commit a change list (CL) to the time it is committed. This
-reduces the time a developer has to care about a particular CL, by getting it in
-or refusing it as fast as possible.
-
-## Background
-
-The Chromium team uses the [Commit
-Queue](/developers/testing/commit-queue/design), which in turn uses the [Try
-Server](/system/errors/NodeNotFound), to perform automated testing of their
-pending CL on multiple platforms in multiple configurations.
-[Rietveld](http://code.google.com/p/rietveld/) is used for code reviews and the
-Chromium team uses a [slightly forked
-version](http://code.google.com/p/rietveld/source/browse/?name=chromium) to
-better integrate it with the rest of the Chromium infrastructure.
-
-Before the integration, the Commit Queue is awaken as soon as the CL author, or
-one of his reviewer, checks the infamous *Commit checkbox* on Rietveld. The
-Commit Queue polls updates from Rietveld at a rate of 0.1hz to get new CLs to
-test.
-
-This means that pre-commit verifications, which include code styling, OWNERS
-check, a proper LGTM from at least one Chromium Committer, properly testing the
-patches on the Try Server, only starts at the moment the checkbox is set. This
-means a maximal time is spent between the moment the checkbox is checked and the
-change is committed.
-
-Also, before the integration, because of the way try jobs are triggered, the
-Commit Queue cannot trust the try jobs triggered by anyone but itself. The
-"previous way" of triggering try jobs is to commit a raw diff into subversion.
-Let's just say that it is *suboptimal*.
-
-## Overview
-
-This project is about implementing techniques in the integration so the Commit
-Queue can efficiently run presubmit checks and Try Jobs on the Try Server before
-the CL author request the commit to be merged into the source tree;
-
-The Commit Queue is also trusting the try jobs triggered by others than itself.
-The new way involves the Try Server polling Rietveld directly to fetch the diff
-*directly* from the code review. This is the reason the try jobs can be
-"trusted".
-
-Rietveld acts as a datastore to map a Verification steps to a Patchset.
-
-## Infrastructure
-
-The infrastructure consist of:
-
-1. Rietveld is running on AppEngine, using AppEngine's supplied GAIA
- account management.
- 1. It becomes the primary database for the try job results.
-2. The Commit Queue process, which is a stand alone process.
-3. The Try Server, which is an infrastructure itself.
-
-## Detailed Design
-
-### 1. Trusting try jobs
-
-The first task is to make sure Try Jobs results on Rietveld can be trusted. This
-is done by differentiating try jobs triggered directly from Rietveld from any
-other try jobs. The polling code is in
-[try_job_rietveld.py](http://src.chromium.org/viewvc/chrome/trunk/tools/build/scripts/master/try_job_rietveld.py?view=markup)
-and sets the build property `try_job_key` that is then used to certify this try
-jobs was indeed triggered from Rietveld in
-[view_chromium.py](http://code.google.com/p/rietveld/source/browse/codereview/views_chromium.py?name=chromium).
-The json packets are pushed via Buildbot's [HttpStatusPush
-implementation](http://src.chromium.org/viewvc/chrome/trunk/tools/build/third_party/buildbot_8_4p1/buildbot/status/status_push.py?view=markup)
-from the Try Server back into Rietveld's /status_listener URL as HTTP POST
-requests.
-
-### 2. Polling for pending CLs
-
-Rietveld already has a mechanism to search for issues with specific criteria.
-For example,
-
-<https://codereview.chromium.org/search?closed=3&commit=3&modified_after=2012-09-18&format=json&limit=10>
-
-While polling it really not optimal, it permits reusing the current API. The
-`/search` interface supports specifying an opaque datastore `cursor` so only new
-issues are returned. The cursor to use on the next request is returned inside
-the json data.
-
-### 3. Reacting to CL modifications
-
-For each new CL modified, the CQ must decide if it reacts to the CL. To enable
-preemptive CL verification, the following steps are used on each new CL;
-
-1. Determine if the CL author is a trusted author, e.g. a [Chromium
- Committer](/getting-involved/become-a-committer).
- 1. If it is and the user asked for review, initiate checks.
- 2. If not, wait for a LGTM from a trusted reviewer. Note that it's
- not waiting for the Commit checkbox to be checked.
-2. Keep track of the previous checks for the last patchset, discarding
- data as new patchsets are uploaded.
-3. Add a note on the issue if a check failure occurs.
-
-Then for commit time;
-
-1. Upon Commit checkbox signal, only re-run the Secure Checks and
- commit.
- 1. Secure checks include things that must not change; the CL
- description must have stayed the same, the tree is open, etc.
-
-## Project Information
-
-This project is driven primary by rogerta@ and maruel@. It benefits immediately
-from Try Server enhancement projects like the [Swarm integration
-project](/system/errors/NodeNotFound) but it is still designed to work without
-Try Server performance boost and work around its general sluggishness.
-
-## Caveats
-
-1. Presubmit checks are not yet run on the Try Server but are run
- locally instead. This needs to be changed to accelerate the CQ and
- keep its integrity.
-2. This significantly increases the Try Server utilization. Without the
- [Swarm integration project](/system/errors/NodeNotFound), this would
- likely overload the Try Server.
-
-## Latency
-
-The whole purpose of this project is to reduce the latency of the pre-commit
-checks. The latency will boils down to
-
-1. Poll rate.
-2. Pre-commit forced checks.
-
-At that point, we are not aiming at optimizing the commit delay below 30
-seconds, lower than that is a nice to have.
-
-## Scalability
-
-The Commit Queue is a single threaded process. As such, it is bound by its
-slowest operations. This currently include the PRESUBMIT checks and
-applying/commiting CLs. The goal is to make checks happen earlier and reuse the
-results from previous checks whenever they are trusted, not to make the checks
-faster.
-
-## Redundancy and Reliability
-
-There are multiple single points of failure;
-
-1. Rietveld on AppEngine. If AppEngine blows up, we're screwed.
-2. The Try Server, which is a single-threaded process. Restarting it,
- in case of hard failure, is only lossy for the jobs in progress at
- the time of shutdown. In case of catastrophic failure, all the
- previous try jobs would need to be re-run. This already happened in
- the past and can be handled relatively fast, within an hour or so.
-3. The Commit Queue process itself is also single-threaded and
- single-homed. It is designed to be mostly lossless when restarted or
- if an exception occurs. The Try Jobs database can be reconstructed
- from the information stored on Rietveld.
-
-## Security Consideration
-
-The security is using the following assumptions;
-
-1. Rietveld administrators are not rogue.
-2. Rietveld does not permit a CL author to fake its identity and the
- patchsets, once created, are immutable.
- 1. The commit queue ensures the CL description is not modified
- between the moment it is running its presubmit check and the
- moment it is committing.
-3. The Commit Queue is doing proper verification w.r.t. which is a
- trusted committer.
- 1. In the end, the Commit Queue process is the one deciding if a
- commit gets in or not and doing it.
-4. The committer are trusted. They already can commit anything they
- want. It is an non-goal to restrict what committers can commit.
-
-## Testing Plan
-
-The integration itself, being an integration project, is mostly tested directly
-"on prod". While there are a few unit tests to check basic functionality, most
-of the bugs are at integration points. This being a productivity tool for
-developers, it is expected that they have some clue about what's going wrong. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/contacting-a-trooper/index.md b/chromium/docs/website/site/developers/testing/contacting-a-trooper/index.md
deleted file mode 100644
index cb73fc015f1..00000000000
--- a/chromium/docs/website/site/developers/testing/contacting-a-trooper/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: contacting-a-trooper
-title: Contacting a Trooper
----
-
-**Page has moved to
-[markdown](https://chromium.googlesource.com/infra/infra/+/HEAD/doc/users/contacting_troopers.md).**
diff --git a/chromium/docs/website/site/developers/testing/control-flow-integrity/index.md b/chromium/docs/website/site/developers/testing/control-flow-integrity/index.md
deleted file mode 100644
index 067e7dc5cb9..00000000000
--- a/chromium/docs/website/site/developers/testing/control-flow-integrity/index.md
+++ /dev/null
@@ -1,209 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: control-flow-integrity
-title: Control Flow Integrity
----
-
-We are planning to deploy Clang's [control flow
-integrity](http://clang.llvm.org/docs/ControlFlowIntegrity.html) mechanisms in
-Chrome.
-
-The current status:
-
-* CFI for virtual calls is enabled for the official Chrome on Linux
- x86-64 (M54 and newer).
-* CFI for indirect (C-style) calls is enabled for the official Chrome
- on Linux x86-64 (M68 and newer).
-* Chrome is bad-cast clean, and we have a
- [bot](https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Linux%20CFI)
- on chromium.memory that keeps it that way
-* We're working on additional compiler improvements to allow deploying
- CFI on more platforms.
-
-To build Chrome with control flow integrity for virtual calls, indirect calls,
-and bad casts (Linux x86_64 only):
-
-gn gen out/cfi '--args=is_debug=false is_cfi=true use_cfi_icall=true
-use_cfi_cast=true use_thin_lto=true' --check**
-
-**ninja -C out/cfi chrome # Chrome will take 6 minutes or so to link.**
-
-Building with additional diagnostics:
-
-**gn gen out/cfi-diag '--args=is_debug=false is_cfi=true use_cfi_icall=true
-use_cfi_cast=true use_cfi_diag=true use_thin_lto=true' --check**
-
-**ninja -C out/cfi-diag chrome # Chrome will take 6 minutes or so to link.**
-
-The deployment is being tracked here:
-
-Meta bug: [crbug.com/701937](http://crbug.com/701937)
-
-Linux: [crbug.com/464797](http://crbug.com/464797)
-
-Android: [crbug.com/469376](http://crbug.com/469376)
-
-ChromeOS: [crbug.com/537386](http://crbug.com/537386)
-
-## Diagnosing problems with the CFI instrumentation
-
-By default, a program compiled with CFI will crash with SIGILL if it detects a
-CFI violation.
-
-For better error messages (but not for production use) add **use_cfi_diag=true**
-to your **args.gn**
-
-## Indirect call failures
-
-CFI indirect call (cfi-icall) failures are primarily caused by either bad
-functions casts or dynamically resolved function pointers:
-
-* CFI-icall checks that a function pointer points to a function
- matching the function pointer type. Casting function pointers breaks
- that check and such function pointer casts should be eliminated.
- Third party libraries that make significant use of such casts to
- change pointer types may potentially be resolved using [type
- generalization](https://clang.llvm.org/docs/ControlFlowIntegrity.html#fsanitize-cfi-icall-generalize-pointers),
- like
- [so](https://chromium-review.googlesource.com/c/chromium/src/+/938494).
-* CFI-icall function pointer checks are optimized to execute quickly
- at the expense of not being able to check dynamically resolved
- function pointers, e.g. pointers resolved through the use of dlsym()
- or GetProcAddress(). In order to provide a security guarantee
- similar to CFI-icall for dynamically resolved function pointers,
- e.g. that the pointer can not be maliciously modified to an
- arbitrary pointer, the pointer can be placed in read-only memory
- (base::ProtectedMemory) and be called without cfi-icall checking
- (base::UnsanitizedCfiCall), like
- [so](https://chromium-review.googlesource.com/c/chromium/src/+/1000426).
-
-## Overhead (only tested on x64)
-
-- CPU overhead is &lt; 1%
-
-- Code size overhead is 5%-9%
-
-- RAM overhead is a small constant (read-only tables inside the binary shared
-between all chrome processes)
-
-## Trophies (bugs found or prevented)
-
-- <https://crbug.com/658955> - invalid cast in
-ProcessManagerBrowserTest.NestedURLNavigationsToAppBlocked
-
-- <https://crbug.com/646615> - invalid cast in
-blink::BytesConsumerTestUtil::TwoPhaseReader
-
-- <https://crbug.com/605337> - invalid cast in SkTArray.h
-
-- <https://crbug.com/600808> - invalid cast in
-PaymentRequestTest.NullShippingOptionWhenNoOptionsAvailable
-
-- <https://crbug.com/601193> - HeapVector::operator= is deleting garbage
-collected elements
-
-- <https://crbug.com/577972> - improper deserialization of
-cc::HeadsUpDisplayLayer
-
-- <https://crbug.com/569102> - invalid cast in AutofillDialogControllerTest
-
-- <https://crbug.com/568738> - invalid cast in
-CachingCorrectnessTest.ReuseImageExpiredFromExpires
-
-- <https://crbug.com/568736> - invalid cast in
-AnimationTranslationUtilTest.filtersWork
-
-- <https://crbug.com/568407> - invalid cast in TileManagerPerfTest.PrepareTiles
-
-- <https://crbug.com/565515> - invalid cast in tile_manager_unittest.cc
-
-- <https://crbug.com/557969> - invalid cast in cdm_wrapper
-
-- <https://crbug.com/557802> - Bad-cast to blink::HTMLOptionElement from
-blink::HTMLOptGroupElement
-
-- <https://crbug.com/552699> - Bad-cast to webrtc::ProcessThreadImpl from
-invalid vptr;process_thread_impl.cc
-
-- <https://crbug.com/551611> - invalid cast in
-SafeBrowsingService::GetProtocolManagerDelegate
-
-- <https://crbug.com/569108> - invalid cast in browser_plugin_guest
-
-- <https://crbug.com/524194> - invalid cast in AutofillDialogControllerTest
-
-- <https://crbug.com/541708> - invalid cast in
-net/http/http_proxy_client_socket_pool_unittest.cc
-
-- <https://crbug.com/520760> - invalid cast in
-ppapi/proxy/nacl_message_scanner.cc
-
-- <https://crbug.com/538952> - Bad-cast to Profile from invalid
-vptr;chrome_extensions_network_delegate.cc
-
-- <https://crbug.com/538754> - invalid cast in SkTextBlobBuilder::build
-
-- <https://crbug.com/517959> - invalid cast in sfntly/port/refcount.h
-
-- <https://crbug.com/568891> - invalid cast in
-HeapTest.VectorDestructorsWithVtable
-
-- <https://crbug.com/537398> - invalid cast in blink::LifecycleNotifier
-
-- <https://crbug.com/531664> - invalid cast in list_container.h
-
-- <https://crbug.com/528799> - Bad-cast to icu_54::UnicodeSet from
-icu_54::Quantifier
-
-- <https://crbug.com/528798> - Bad-cast to blink::ScriptWrappable from
-blink::WebGLRenderingContextBase::TypedExtensionTracker&lt;blink::ANGLEInstancedArrays&gt;
-- <https://crbug.com/526339> - invalid cast in RenderFrameHostManagerTest
-
-- <https://crbug.com/524194> - invalid cast in AutofillDialogControllerTest
-
-- <https://crbug.com/520760> - Invalid cast in
-ppapi/proxy/nacl_message_scanner.cc
-
-- <https://crbug.com/520732> - Invalid cast in message_loop.cc / ToPumpIO
-
-- <https://crbug.com/520699> - Invalid static_cast in ThreadLocalPointer::Get
-
-- <https://crbug.com/516538> - invalid cast in ChromeLauncherControllerTest
-
-- <https://crbug.com/516528> - invalid cast in
-content::TestWebContents::GetMainFrame
-
-- <https://crbug.com/516523> - invalid cast in
-NavigatorTestWithBrowserSideNavigation
-
-- <https://crbug.com/516513> - Invalid cast in AppCacheHost::AddUpdateObserver
-
-- <https://crbug.com/515973> - Invalid cast in SkTArray.h
-
-- <https://crbug.com/515679> - invalid cast in GrTRecorder.h
-
-- <https://crbug.com/515215> - Invalid cast in
-v8::internal::compiler::Typer::Visitor::Reduce
-- <https://crbug.com/514817> - Invalid cast in SocketsTcpUnitTest
-
-- <https://crbug.com/513953> - Invalid cast in FeedbackUploaderTest
-
-- <https://crbug.com/513816> - Bad cast in KeyedServiceBaseFactory
-
-- <https://crbug.com/513425> - Invalid cast Event -&gt; CancelModeEvent for
-NonCancelableEvent
-
-- <https://crbug.com/513021> - Invalid cast Task -&gt; RasterTask in
-gpu_tile_task_worker_pool.cc
-
-- <https://crbug.com/531057> - Bad-cast to blink::ScriptWrappable from
-blink::WorkerWebSocketChannel;DOMWrapperMap.h
-
-- <https://crbug.com/530432> - CHECK failed:
-io_thread_.StartWithOptions(thread_options) in child_process.cc
-
-- <https://crbug.com/586639> - Invalid cast in TabDesktopMediaListTest \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/control-flow-integrity/overhead/index.md b/chromium/docs/website/site/developers/testing/control-flow-integrity/overhead/index.md
deleted file mode 100644
index 3e7f8a703d2..00000000000
--- a/chromium/docs/website/site/developers/testing/control-flow-integrity/overhead/index.md
+++ /dev/null
@@ -1,139 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/control-flow-integrity
- - Control Flow Integrity
-page_name: overhead
-title: Overhead
----
-
-## Code Size
-
-As of June 23 2016, code size overhead for official Chrome is about 5% for calls
-and 7.5% for calls and casts. The following is the binary size of official
-Chrome built in various configurations:
-
-* Without CFI: 104398832 bytes
-* With CFI for virtual calls only: 109502448 bytes
-* With CFI for virtual calls and casts: 112021488 bytes
-
-## Performance
-
-Measured performance overhead for various benchmark suites in the CFI for
-virtual calls only configuration:
-
-* blink_perf.layout: min -1.71%, median 2.81%, max 12.23%
-* smoothness.top_25_smooth: cannot measure due to noise
-
-## Reproducing
-
-The above figures were derived from official builds of r401651 of Chromium by
-following these instructions.
-
-1. Build r273760 of LLVM
-2. Fetch r401651 of Chromium and apply
- <https://codereview.chromium.org/2099003002> to it
-3. Build three Chromium GN trees as shown below:
-
- **$ gn args out_gn/ra_official**
-
- **$ gn args out_gn/ra_official_cfi_callonly****
-
- **$ gn args out_gn/ra_official_cfi****
-
- ****$ cat out_gn/ra_official/args.gn******
-
- is_official_build = true**
-
- is_chrome_branded = true**
-
- is_debug = false**
-
- clang_use_chrome_plugins = false**
-
- clang_base_path = "/path/to/llvm/build"**
-
- ****$ cat out_gn/ra_official_cfi_callonly/args.gn******
-
- **is_official_build = true****
-
- **is_chrome_branded = true****
-
- **is_debug = false****
-
- **clang_use_chrome_plugins = false****
-
- **clang_base_path = "/path/to/llvm/build"****
-
- **is_cfi = true****
-
- ****use_cfi_cast = false******
-
- ******$ cat out_gn/ra_official_cfi/args.gn********
-
- is_official_build = true**
-
- is_chrome_branded = true**
-
- is_debug = false**
-
- clang_use_chrome_plugins = false**
-
- clang_base_path = "/path/to/llvm/build"**
-
- is_cfi = true**
-
- ****$ ninja -C out_gn/ra_official chrome******
-
- ****$ ninja -C out_gn/ra_official_cfi_callonly chrome******
-
- ****$ ninja -C out_gn/ra_official_cfi chrome******
-
- ********$ strip -o /tmp/chrome1********
-
- ********out_gn/ra_official/chrome************
-
- **$ stri****
-
- p -o /tmp/chrome2 out_gn/ra_official_cfi_callonly/chrome**
-
- **$ strip -o /tmp/chrome3 out_gn/ra_official_cfi/chrome****
-
- ******$ ls -l /tmp/chrome\[123\]********
-
-4. Run the following shell script from the chromium/src directory to
- obtain performance numbers:
-
-**#!/bin/bash**
-
-**for i in smoothness.top_25_smooth blink_perf.layout blink_perf.svg
-blink_perf.css blink_perf.dom blink_perf.paint blink_perf.canvas
-blink_perf.events blink_perf.parser blink_perf.bindings blink_perf.mutation
-blink_perf.animation blink_perf.shadow_dom blink_perf.interactive
-blink_perf.pywebsocket blink_perf.xml_http_request blink_perf.mutation.reference
-blink_perf.interactive.reference speedometer dromaeo.domcoreattr
-dromaeo.domcorequery dromaeo.domcoremodify dromaeo.cssqueryjquery
-dromaeo.jslibattrjquery dromaeo.domcoretraverse dromaeo.jslibeventjquery
-dromaeo.jslibstylejquery dromaeo.jslibmodifyjquery dromaeo.jslibattrprototype
-dromaeo.jslibeventprototype dromaeo.jslibstyleprototype
-dromaeo.jslibtraversejquery dromaeo.jslibmodifyprototype
-dromaeo.jslibtraverseprototype browsermark octane ; do**
-
-**xvfb-run -s "-screen 0 1024x768x24" ./tools/perf/run_benchmark --browser=exact
---browser-executable=out_gn/ra_official/chrome --results-label=lto
---pageset-repeat=50 $i**
-
-**xvfb-run -s "-screen 0 1024x768x24" ./tools/perf/run_benchmark --browser=exact
---browser-executable=out_gn/ra_official_cfi_callonly/chrome
---results-label=ltocficall --pageset-repeat=50 $i**
-
-**xvfb-run -s "-screen 0 1024x768x24" ./tools/perf/run_benchmark --browser=exact
---browser-executable=out_gn/ra_official_cfi/chrome --results-label=ltocfi
---pageset-repeat=50 $i**
-
-**mv tools/perf/results.html bm-devirt6/$i.html**
-
-**done** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/dr-fuzz/index.md b/chromium/docs/website/site/developers/testing/dr-fuzz/index.md
deleted file mode 100644
index f51ed096bad..00000000000
--- a/chromium/docs/website/site/developers/testing/dr-fuzz/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: dr-fuzz
-title: Dr. Fuzz
----
-
-**Dr. Fuzz** is no longer supported. It depended on Dr. Memory, which we stopped
-supporting in <https://crbug.com/655521>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/fake-bidi/index.md b/chromium/docs/website/site/developers/testing/fake-bidi/index.md
deleted file mode 100644
index d9f526be0ae..00000000000
--- a/chromium/docs/website/site/developers/testing/fake-bidi/index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: fake-bidi
-title: Fake Bidi
----
-
-**Motivation**
-
-Fixing right-to-left \[RTL\] bugs in languages such as Hebrew and Arabic can be
-challenging if you don't speak an RTL language.
-
-Fake BiDi introduces the concept of a "fake" locale \[one that doesn't
-correspond to a real language and isn't incorporated into the binary\] which
-displays reversed English words in an RTL context. This allows any developer who
-understands English to reason about RTL issues and UI.
-
-Example: the English string "Hello World!" becomes "!dlroW olleH" under Fake
-Bidi.
-
-Another important advantage of having a Fake BiDi locale is that it allows
-running tests that depend on RTL language strings without actually having those
-strings translated. This means that we can use automated testing tools (such as
-[BiDiChecker](/system/errors/NodeNotFound)) on UI where either the strings have
-been updated and need re-translation or there exist new strings which haven't
-been translated yet.
-
-For additional information about fake bidi and pseudo locales, check out
-<http://code.google.com/p/chromium/issues/detail?id=73052>
-
-**==Using Fake Bidi==The following directions are obsolete. Support for the --locale_pak flag was removed in https://codereview.chromium.org/291913003/. (The fake-bidi.pak file is still being generated, however, and BidiChecker browser tests still exist.)**During the build process, ==a== *==fake-bidi.pak==* ==is generated next to the Chrome executable==, in a directory called *pseudo_locales*. I.e., if your build uses make, it will be in out/Debug/pseudo_locales.**==~~Mac:~~==**==~~To launch Chrome with Fake Bidi, pass the following arguments:~~~~*--locale_pak=/path/to/pseudo_locales/fake-bidi.pak -AppleLanguages "(he)"*~~~~(Note that you may pass any (RTL) language code to -AppleLanguages in order to simulate any language you need.)~~~~Known Issue: On launch, chrome will attempt to navigate to "(he)". Just close this tab and move on.~~
-**==~~Linux / Windows:~~==**==~~To launch Chrome with Fake Bidi, pass the
-following arguments:~~~~*--locale_pak=/path/to/pseudo_locales/fake-bidi.pak
---lang=he*~~~~(Note that you may pass any (RTL) language code to --lang in order
-to simulate any language you need.)~~==
-**==Automated tests using Fake Bidi==**BidiChecker is currently being run both
-in English and in Fake Bidi from the *browser_tests* executable. Check out the
-page about [BidiChecker](/system/errors/NodeNotFound) for more info. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky.jpg.sha1 b/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky.jpg.sha1
deleted file mode 100644
index 9b947d92a82..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01f110d566807f842bc53ecea2995edcbc8ab5c4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky2.jpg.sha1 b/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky2.jpg.sha1
deleted file mode 100644
index e40b05a35f4..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky2.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-660bc635886112bda474ce508f4d4df296d29504 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky3.jpg.sha1 b/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky3.jpg.sha1
deleted file mode 100644
index e40b05a35f4..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/flaky3.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-660bc635886112bda474ce508f4d4df296d29504 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/index.md b/chromium/docs/website/site/developers/testing/flakiness-dashboard/index.md
deleted file mode 100644
index b871658ffc0..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/index.md
+++ /dev/null
@@ -1,167 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: flakiness-dashboard
-title: Flakiness Dashboard HOWTO
----
-
-## Use the Flake Portal Instead
-
-The Flakiness dashboard is unmaintained. Please try the [Flake
-Portal](https://chromium.googlesource.com/infra/infra/+/HEAD/appengine/findit/docs/flake_portal.md)
-instead.
-
-## Where do I find it?
-
-<http://test-results.appspot.com/dashboards/flakiness_dashboard.html> (**NOTE**:
-unmaintained! Try the [Flake
-Portal](https://chromium.googlesource.com/infra/infra/+/HEAD/appengine/findit/docs/flake_portal.md)
-instead.)
-
-## What does it help do?
-
-* Identify tests that are flaky on the builders
- * behavior on trybots is sometimes a little different, use
- <http://chromium-try-flakes.appspot.com> for insight into trybot
- flakiness
-* Identify incorrect (missing or extra) entries in test_expectations
- (tests no longer failing, or failing differently, or newly failing)
-* Compare test expectations and results across platforms, including
- upstream webkit.org to help you identify if you should rebaseline a
- test
-* Identify when a test started failing
-
-## How do I use it?
-
-1. Pick the test type you are interested in from the "test results"
- dropdown
- ([layout_test_results](http://test-results.appspot.com/dashboards/flakiness_dashboard.html),
- [ui_tests](http://test-results.appspot.com/dashboards/flakiness_dashboard.html#testType=ui_tests),
- etc).
- * Advanced usage: append #testType=ui_tests to the url
-2. Pick the builder type. This depends on the test type. For example,
- for layout_tests this is the platform: Webkit, Webkit Linux, Webkit
- Mac10.5, Webkit (dbg)(1), etc.
- * Advanced: append #builder=Webkit%20(dbg)(1) to the url
- * For layout_test_results, you can also pick which set of bots you
- care about from the top-right.
- * [Main
- builders](http://test-results.appspot.com/dashboards/flakiness_dashboard.html)
- are the WebKit bots on the main waterfall at
- build.chromium.org. These test Chromium at head and WebKit
- at the revision in DEPS with test_shell.
- * [WebKit.org
- Canary](http://test-results.appspot.com/dashboards/flakiness_dashboard.html#useWebKitCanary=true)
- are the WebKit bots on the fyi waterfall at
- build.chromium.org. These test Chromium at head and WebKit
- at head with test_shell.
- * [Upstream](http://test-results.appspot.com/dashboards/flakiness_dashboard.html#upstreamWebKit=true)
- are the Chromium WebKit bots at build.webkit.org. These run
- Chrome's layout tests with DRT --chrome instead of
- test_shell.
-3. Now, it depends what you want to do. Here are some examples:
- 1. **Identify flaky tests:**
- This is the default behavior of the dashboard. Just load the page, and
- all tests listed are flaky. For each test, you can see what % of the
- time it fails, and a visual depiction of its pass/fail history. The runs
- are listed newest--&gt;oldest from left to right.
-
- [<img alt="image"
- src="/developers/testing/flakiness-dashboard/flaky3.jpg">](/developers/testing/flakiness-dashboard/flaky3.jpg)
-
- 2. **Identify incorrect entries in test_expectations:**
-
- **[<img alt="image"
- src="/developers/testing/flakiness-dashboard/missingorextra.jpg">](/developers/testing/flakiness-dashboard/missingorextra.jpg)**
-
- 1. **For any given test type, click on "Show tests with wrong
- expectations" (or append #showWrongExpectations=true to
- url).**
- 2. **Examine the "missing" or "extra" columns. The missing
- column contains entries that should be added to
- test_expectations and the extra column contains entries that
- should be removed from test_expectations.**
- 3. **Make sure to look at the actual test results and history
- to verify that adding/removing expectations is correct.
- There could always be a bug in the dashboard, or something
- simple like a revert that the dashboard misses.**
- 3. **Identify when a test started failing**
-
- **[<img alt="image"
- src="/developers/testing/flakiness-dashboard/newFailingTest.jpg">](/developers/testing/flakiness-dashboard/newFailingTest.jpg)**
-
- 1. Enter the test name in the input field (or append
- #tests=testname.html to url).
- 2. You can hit ? to see the legend to the test results color
- coding.
- 3. Look at the visual results. Find the leftmost green entry.
- The entry to the left of it will be the first time it
- failed. Click on that box. Here you can see the webkit
- revision and the chromium blamelist.
- 4. **Compare test expectations and results**
-
- **[<img alt="image"
- src="/developers/testing/flakiness-dashboard/seeResults2.jpg">](/developers/testing/flakiness-dashboard/seeResults2.jpg)**
-
- 1. This is where the dashboard gets really powerful! Enter a
- test name in the input field (or append #tests=testname.html
- to url).
- 2. Click "Show results" (or append &showExpectations=true to
- url). To see bigger results click "Show large thumbnails or
- append &showLargeExpectations=true).
- * For the chromium bots, it shows the most recent failure
- for each bot for each failure type. For example, it may
- show a crash stack and a text diff for the same bot.
- That's the crash stack the last time the test crashed
- and the text diff the last time it failed text diff.
- * For the upstream bots, it only shows results for a
- single revision. It defaults to the most recent revision
- on each bot, but you can click on any of the colored
- entries and click "Show results for WebKit rXXXXX" to
- show results for that failure (or append #revision=XXXXX
- for a given WebKit revision).
- 3. Here you will see
- * The test itself
- * The expected results (you can hit ? to see the fallback
- order for test_expectations). For each expected result,
- the upper right hand corner lists the platforms it is
- used for (MAC, LINUX, etc).
- * The last failing results for each platform, stacktraces
- (if they exist), diffs of expected vs actual results.
-
-**## Updating test_expectations.txt**
-
-**There is a mode that the flakiness dashboard can operate in that suggests
-changes to test_expectations.txt automatically. Users indicate which changes to
-include in a JSON report which can be input into a script to update
-test_expectations.txt.**
-
-**## **Where is it****
-
-**<http://test-results.appspot.com/dashboards/flakiness_dashboard.html#expectationsUpdate=true>**
-
-**## **How do I use it****
-
-**This page displays the results for a single test at a time. For each test the
-user has four options, presented as buttons:**
-
-****include selected** - Include the changes indicated by the checkboxes below
-in the report to be generated.**
-
-****previous / next** - Navigate through the list of tests determined to have
-incorrect expectations.**
-
-****done** - Generate a JSON report that specifies the changes to
-test_expectations.txt.**
-
-**Once the JSON report is generated, copy it to a file on your local disk and
-run the
-src/webkit/tools/layout_tests/webkitpy/layout_tests/update_expectations_from_dashboard.py
-script on it.**
-
-**Note: the script doesn't currently support adding new lines to
-test_expectations.txt. There is a patch out for review for this and it should be
-submitted soon.** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/missingorextra.jpg.sha1 b/chromium/docs/website/site/developers/testing/flakiness-dashboard/missingorextra.jpg.sha1
deleted file mode 100644
index 796ad5259c3..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/missingorextra.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f1a0cac98d39a583f1ac9f48095a34e11ebd5fca \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/newFailingTest.jpg.sha1 b/chromium/docs/website/site/developers/testing/flakiness-dashboard/newFailingTest.jpg.sha1
deleted file mode 100644
index 9c68ee09994..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/newFailingTest.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9a7acfd909605e7d3ddac3ee8b5f0f320bbcdf6d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults.jpg.sha1 b/chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults.jpg.sha1
deleted file mode 100644
index 3652e51d531..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eb1e07aba3ba976420ace4065cd9d934d51f1917 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults2.jpg.sha1 b/chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults2.jpg.sha1
deleted file mode 100644
index 8aafe44954c..00000000000
--- a/chromium/docs/website/site/developers/testing/flakiness-dashboard/seeResults2.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d0628994ab3007ff06ac5346bcf16c2ab348aa2b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/frame-rate-test/index.md b/chromium/docs/website/site/developers/testing/frame-rate-test/index.md
deleted file mode 100644
index 6e0fa1cce22..00000000000
--- a/chromium/docs/website/site/developers/testing/frame-rate-test/index.md
+++ /dev/null
@@ -1,172 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: frame-rate-test
-title: Frame Rate Test
----
-
-An effort to capture frame rate performance on various gestures and content.
-
-[TOC]
-
-## Relevant files
-
-The frame rate test is broken up into two three logical pieces:
-
-1. Test controller:
- `src/chrome/test/perf/frame_rate/frame_rate_tests.cc`
-2. JS test harness:
- `src/chrome/test/data/perf/frame_rate/head.js`
-3. Test content:
- `src/chrome/test/data/perf/frame_rate/content/ `(controlled via DEPS from
- svn/trunk/deps/frame_rate_content)
-
-## To checkout the content, add theses lines to your .gclient
-
-> Deps
-> {
-> "name" : "frame_rate_content",
-> "url" : "svn://chrome-svn/chrome/trunk/deps/frame_rate/content",
-> },
-
-## How to Run the Tests
-
-1. Build the `performance_ui_tests` binary.
-2. Tests come in two varieties: GPU-only or GPU-neutral.
- * Run tests that are GPU neutral: `performance_ui_tests
- --gtest_filter=FrameRateTest*`.
- * Run tests that are GPU accelerated: performance_ui_tests
- --gtest_filter=FrameRateTest\* --enable-gpu
-
-## How It Works
-
-> frame_rate_tests.cc:
-
-> * Contains the list of tests to run: look for FRAME_RATE_TEST
- macros.
-> * Foreach test:
-> * Starts up a standalone chrome, loads the page-under-test
-> * Waits for head.js to indicate that the test has run
-> * Reads performance results from the page, shoves them out in a
- way that Chrome dashboard code can understand
-
-> head.js
-
-> * Registers (and constantly re-registers) a requestAnimationFrame
- callback and derives frame rate from that callback frequency.
-> * If requested, will scroll the page to trigger page updating.
- Useful for web content, less useful for WebGL or Canvas apps.
-
-## Adding New Test Content
-
-Scrolling test content, e.g. content that needs to be scrolled part of the test:
-
-* Add the content to a new directory &lt;dirname&gt; in
- src/chrome/test/data/perf/frame_rate/content/. Put the top-level
- html inside that directory as test.html
-* Add the following to test.html:
- `<script src="../../head.js"></script>`
-* **Note** that this is an svn managed directory, so once you have
- committed that change,
- bump src/DEPS "frame_rate/content" rev to committed revision.
-* Add a FRAME_RATE_TEST macro to frame_rate_tests.cc for the new
- directory, e.g FRAME_RATE_TEST(&lt;dirname&gt;)
-
-Self-rendering content, e.g. WebGL apps, or content that needs no external
-stimulation in order to render:
-
-* Same steps as scrolling tests, but your customization to the html
- should read:
- `<script src="../../head.js"></script>`
- `<script>`
- `__gestures = {`
- ` stationary: [`
- ` {"time_ms":1, "y":0},`
- ` {"time_ms":5000, "y":0}`
- ` ]`
- `};`
- `</script>`
-
-To debug the test outside of the test harness, open test.html and type
-`__start('stationary')` in the javascript console. Once the test runs, type
-__calc_results() to see the measured frame rate.
-
-Content additions require codereview, using the standard [contributing
-code](/developers/contributing-code) process. Consider nduca@chromium.org and
-junov@chromium.org as reviewers.
-
-## Results
-
-### Frame rate tests run on the [GPU waterfall](http://chromegw.corp.google.com/i/chromium.gpu/waterfall).
-
-They also run on the [Perf
-waterfall](http://build.chromium.org/p/chromium.perf/waterfall), but they are
-not hardware-accelerated there.
-
- 1. [XP Interactive
- Perf](http://build.chromium.org/p/chromium.perf/builders/XP%20Interactive%20Perf)
- 2. [Mac10.5
- Perf(3)](http://build.chromium.org/p/chromium.perf/builders/Mac10.5%20Perf%283%29)
- 3. [Mac10.6
- Perf(3)](http://build.chromium.org/p/chromium.perf/builders/Mac10.6%20Perf%283%29)
- 4. [Old Mac10.6
- Perf(3)](http://build.chromium.org/p/chromium.perf/builders/Old%20Mac10.6%20Perf%283%29)
- 5. [Linux Perf
- (2)](http://build.chromium.org/p/chromium.perf/builders/Linux%20Perf%20%282%29)
- 6. [Linux Perf
- (lowmem)](http://build.chromium.org/p/chromium.perf/builders/Linux%20Perf%20%28lowmem%29)
- > **([View all six
- > here](http://build.chromium.org/p/chromium.perf/waterfall?branch=&builder=XP+Interactive+Perf&builder=Mac10.5+Perf%283%29&builder=Mac10.6+Perf%283%29&builder=Old+Mac10.6+Perf%283%29&builder=Linux+Perf+%282%29&builder=Linux+Perf+%28lowmem%29&reload=none))**
-
-### You can track the software rendered performance graphically using the [performance dashboard](http://build.chromium.org/f/chromium/perf/dashboard/overview.html). You may also click **\[**results**\]** from the [perf waterfall](http://build.chromium.org/p/chromium.perf/waterfall) to view the graph.
-
-* Every tab displays results for different content.
-* The trace values, fps and fps_ref, represent the average of all
- gesture results.
-* Click on the graph to see revision information.
- * **Click "Data" to see results for individual gestures.**
-
-## Gestures
-
-Gestures are simply keyframe animations that are applied to the document scroll.
-The animations and their keyframes are stored in the `__gestures` object in
-[head.js](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/data/perf/frame_rate/head.js?view=markup):
-
-```none
-var __gestures = {
-  steady: [
-    {"time_ms":1, "y":0},
-    {"time_ms":5, "y":10}
-  ],
-  reading: [
-    {"time_ms":1, "y":0},
-    {"time_ms":842, "y":40},
-    ...
-    {"time_ms":1170, "y":2373}
-  ],
-  mouse_wheel: [
-    {"time_ms":1, "y":0},
-    {"time_ms":164, "y":53},
-    ...
-    {"time_ms":421, "y":693}
-  ],
-  ...
-};
-```
-
-You can either add keyframed animations to this list, or ask head.js to record a
-new gesture for you:
-
-1. Open a webpage to record from (must include
- [head.js](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/data/perf/frame_rate/head.js?view=markup)).
-2. Type `__start_recording()` in the javascript console.
-3. Perform any gestures you wish to record.
-4. Type `__stop()` in the javascript console.
-5. Copy the output from `JSON.stringify(__recording)` in the console.
-6. Paste the output in
- [head.js](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/data/perf/frame_rate/head.js?view=markup)
- as a new member of `__gestures`.
-7. Copy the formatting from other gestures. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/gpu-testing/gpu-bot-details/index.md b/chromium/docs/website/site/developers/testing/gpu-testing/gpu-bot-details/index.md
deleted file mode 100644
index 7fdd009168a..00000000000
--- a/chromium/docs/website/site/developers/testing/gpu-testing/gpu-bot-details/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/gpu-testing
- - GPU Testing
-page_name: gpu-bot-details
-title: GPU Bot Details
----
-
-This page has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gpu/gpu_testing_bot_details.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/gpu-testing/index.md b/chromium/docs/website/site/developers/testing/gpu-testing/index.md
deleted file mode 100644
index aee16ae3146..00000000000
--- a/chromium/docs/website/site/developers/testing/gpu-testing/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: gpu-testing
-title: GPU Testing
----
-
-This page has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gpu/gpu_testing.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/index.md b/chromium/docs/website/site/developers/testing/index.md
deleted file mode 100644
index 877657b28fc..00000000000
--- a/chromium/docs/website/site/developers/testing/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: testing
-title: Testing and infrastructure
----
-
-# [TOC]
-
-## Highlighted Child pages
-
-* [Running tests at home](/developers/testing/running-tests)
-* [Chromium build
- infrastructure](/developers/testing/chromium-build-infrastructure)
-* [Blink Web Tests](/developers/testing/webkit-layout-tests)
-* [Try Server usage](/developers/testing/try-server-usage)
-* [Commit Queue](/developers/testing/commit-queue)
-* [Isolated testing](/developers/testing/isolated-testing) and
- Swarming
-* ==[GPU Testing](/developers/testing/gpu-testing)==
-* [WebGL Conformance
- Tests](/developers/testing/webgl-conformance-tests)
-* [Builder Annotations](/system/errors/NodeNotFound)
-* [WebUI browser tests](/Home/domui-testing/webui-browser_tests)
-* [chrome.test.\* APIs](/developers/testing/chrome-test-apis)
-
-## Overview
-
-Chromium development is heavily test driven. In order to maintain a rapid rate
-of development across multiple platforms and an ever increasing set of features,
-it is imperative that test suites be updated, maintained, executed, and evolved.
-Any new features should have test coverage and in addition most changes should
-have test coverage. As a contributor to Chrome you are expected to write quality
-tests that provide ample code coverage. As a reviewer you are expected to ask
-for tests. **The** [**Chromium Continuous Integration
-system**](/developers/testing/chromium-build-infrastructure) **is employed to
-run these tests 24x7**.
-
-## Expectations
-
-Developers contributing code are expected to run all tests. This is not
-typically feasible on a single workstation, so [try
-servers](/developers/testing/try-server-usage) are used. When contributing code,
-consider whether your change has enough testing. If it is a new feature or
-module, it should almost certainly be accompanied by tests.
-
-## Test Development Infrastructure
-
-To assist with building tests, several pieces of infrastructure exist. Here are
-some tools you might find useful:
-
-* chrome/test/automation - Chromium includes a mechanism for driving
- the browser through automation. This is primarily used with the UI
- tests.
-* [gtest](http://code.google.com/p/googletest/) - Google Test is
- Chromium's C++ test harness.
-* **image_diff** - A mechanism for comparing bitmaps.
-
-## Inducing a crash
-
-This can be useful to test breakpad:
-
-* about:crash - will cause a renderer crash.
-* about:inducebrowsercrashforrealz - will cause a browser crash.
-
-## Subpages
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/developers/testing/instrumented-libraries-for-dynamic-tools/index.md b/chromium/docs/website/site/developers/testing/instrumented-libraries-for-dynamic-tools/index.md
deleted file mode 100644
index bbc70bbfe23..00000000000
--- a/chromium/docs/website/site/developers/testing/instrumented-libraries-for-dynamic-tools/index.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: instrumented-libraries-for-dynamic-tools
-title: Instrumented libraries for dynamic tools
----
-
-Instrumented libraries are a part of Chromium's development infrastructure. They
-are intended to complement sanitizer tools
-([AddressSanitizer](/developers/testing/addresssanitizer),
-[MemorySanitizer](/developers/testing/memorysanitizer),
-[ThreadSanitizer](/developers/testing/threadsanitizer-tsan-v2)).
-
-Only Ubuntu Trusty x86_64 is supported at this time.
-
-## Overview
-
-Sanitizer tools rely on compile-time instrumentation. However, Chromium code may
-call into system-installed third-party shared libraries, which were not built
-with the appropriate instrumentation. This is a problem:
-
-* bugs in third-party libraries, which may affect Chromium, go
- undetected,
-* certain Chromium bugs may go undetected (e.g. passing an invalid
- buffer to third-party code),
-* MemorySanitizer generates lots of bogus reports, which makes it
- unusable. This happens because MSan doesn't recognize any memory
- initialization which happens in uninstrumented code.
-
-To avoid this issue, we've made it possible to make Chromium use
-sanitizer-instrumented versions of third-party DSOs. By setting a GYP flag, you
-can either have them built from source during Chromium build, or download
-pre-built binaries from Google Storage. The list contains ~50 third-party
-packages, which should cover most of the DSO dependencies of Chrome and tests
-(enough at least to run MSan without bogus reports).
-
-## Using pre-built binaries
-
-Follow the MemorySanitizer [instructions](/developers/testing/memorysanitizer).
-
-Note that we don't provide pre-built binaries for every configuration. At this
-point in time only MSan is supported, with `msan_track_origins` either 0 or 2.
-
-## Building from source
-
-First you need to install build dependencies:
-
-```none
-sudo third_party/instrumented_libraries/scripts/install-build-deps.sh
-```
-
-Additionally, if you have gccgo installed, you probably want to remove it with:
-
-```none
-sudo apt-get remove --purge gccgo-4.9
-```
-
-With this package installed, running clang++ gives the error cannot find
--lstdc++.
-
-To build instrumented libraries from source, add
-`use_locally_built_instrumented_libraries=true` to `args.gn`. This will add ~50
-extra steps to the build. Each step runs a script which does the following:
-
-* checks out a specific package with `apt-get source`,
-* maybe applies a Chromium-specific patch,
-* builds the package using `./configure` + `make`,
-* installs the shared libraries into
- `$OUTPUT_DIR/instrumented_libraries/<sanitizer_name>/lib/`,
-* copies the source archives to
- `$OUTPUT_DIR/instrumented_libraries/sources/`.
-
-GOMA is supported (just add `use_goma=1`).
-
-## Adding new packages
-
-You'll need to ping earthdok@ or glider@ to do this. The information below is
-for reference.
-
-To add a new package, you need to do the following:
-
-* get OSS compliance approval,
-* add a new target to `third_party/instrumented_libraries/BUILD.gn`,
-* add the package to
- `third_party/instrumented_libraries/scripts/install-build-deps.sh`,
-* make sure it builds and works on Trusty (i.e. where applicable),
-* update the pre-built binaries.
-
-Usually you want to use the same configure flags that `debian/rules` uses.
-
-To rebuild the binaries, run:
-
-```none
-third_party/instrumented_libraries/scripts/build_and_package.py all
-```
-
-The entire process will take several hours. For that reason, it is recommended
-to use --parallel to build all configs concurrently, and -j96 (or whatever value
-you prefer) to build multiple packages concurrently.
-
-It's a good idea to not do this on Goobuntu. We have a couple GCE instances
-configured for this. You can also build in an Ubuntu VM.
-
-After uploading the archives to GCS as the script instructs, you'll get several
-`.sha1` files. You should commit those under
-`third_party/instrumented_libraries/binaries/`. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/isolated-testing/deterministic-builds/index.md b/chromium/docs/website/site/developers/testing/isolated-testing/deterministic-builds/index.md
deleted file mode 100644
index 0285e7a5b4e..00000000000
--- a/chromium/docs/website/site/developers/testing/isolated-testing/deterministic-builds/index.md
+++ /dev/null
@@ -1,188 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/isolated-testing
- - Isolated Testing
-page_name: deterministic-builds
-title: Deterministic builds
----
-
-[TOC]
-
-## Summary
-
-Make Chromium's build process to deterministic. Tracking issue:
-[crbug.com/314403](http://crbug.com/314403)
-
-**Handling failures on the deterministic bots**
-
-See
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/deterministic_builds.md#handling-failures-on-the-deterministic-bots>
-
-## Goal
-
-*Improve cycle time and reduce infrastructure utilization with redundant tasks.*
-
-### Sub goals
-
-1. Reduce I/O load on the Isolate Server by having deterministic
- binaries.
- * Binaries do not need to be archived if they are already in the
- Isolate Server cache; if the build is deterministic, this
- happens frequently.
-2. Take advantage of native's [Swarming task
- deduplication](https://code.google.com/p/swarming/wiki/SwarmingDetailedDesign#Task_deduplication)
- by skipping redundant test executables.
- * If an .isolated task was already run on Swarming with the exact
- same SHA-1 and it succeeded, [Swarming returns the cached
- results
- immediately](https://code.google.com/p/swarming/wiki/SwarmingUserGuide#Task_idempotency).
-
-So it's actually a 2x multiplier here for each target that becomes deterministic
-and runs on Swarming. Benefits are both **monetary** (less hardware is required)
-and **developer time** (reduced latency by having less work to do on the TS and
-CI).
-
-We estimate **we'd save around &gt;20% of the current testing load.** This will
-result in faster test cycles on the Try Server (TS) and the Continuous
-Integration (CI) infrastructure. **Swarming already dedupe 1~7% of the tasks
-runtime** simply due to incremental builds.
-
-## Background
-
-*Test isolation* is an on-going effort to generate an exact list of the files
-needed by a given unit test at runtime. It enables 3 benefits:
-
-* Horizontal scaling by splitting a slow test into multiple shards run
- concurrently.
-* Horizontal scaling by running multiple tests concurrently on
- multiple bots.
-* Multi-OS testing of the same binaries. For example, build once, test
- on XP, Vista, Win7, Win8, Win10.
-
-Tracking issue: [crbug.com/98637](http://crbug.com/98637)
-
-*Swarming* is the task distributor that leverage Test isolation to run tests
-simultaneously to reduce latency in getting test results.
-
-Normal projects do not have deterministic builds and chromium is one example. *A
-deterministic build is not something that happens naturally*. It needs to be
-done. *Swarming knows the relationship between an isolated test and the result
-when run on a bot with specific features.* The specific features are determined
-by the requests. For example the request may specify bot OS specific version,
-bitness, metadata like the video card, etc.
-
-Google internally uses many tricks to achieve similar performance improves at
-extremely high cache rates:
-\[[link](http://google-engtools.blogspot.com/2011/08/build-in-cloud-how-build-system-works.html)\]
-
-> *Building the whole action graph would be wasteful (...), so we will skip
-> executing an action unless one or more of its input files change compared to
-> the previous build. In order to do that we keep track of the content digest of
-> each input file whenever we execute an action. As we mentioned in the previous
-> blog post, we keep track of the content digest of source files and we use the
-> same content digest to track changes to files.*
-
-## Non Goals
-
-Making the build deterministic is not a goal in these conditions:
-
-* Content-addressed build. A CAB can be built out of a deterministic
- build but this is not what this effort is about.
-* Making the build deterministic on official builds; at least not in
- the short term. Reproducible builds do have security benefits so it
- can be considered an eventual extension of the project.
-
-## Testing plan
-
-Enforced by bots on the public waterfall on Android, Linux, and Windows; FYI
-bots on Mac. See also
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/deterministic_builds.md>.
-
-## Method
-
-## Documented at <http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html>
-
-## OS Specific Challenges
-
-Each toolset is non-deterministic in different ways so the work has to be redone
-on each platform.
-
-### Windows
-
-Tracking issue: <https://crbug.com/330260>
-
-Builder:
-<https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Windows%20deterministic>
-
-* Mostly done. See bug for status.
-
-### macOS
-
-Tracking issue: [crbug.com/330262](http://crbug.com/330262)
-
-Builder:
-<https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Mac%20deterministic>
-
-* Mostly done. See bug for status.
-
-### Linux
-
-Tracking issue: [crbug.com/330263](http://crbug.com/330263)
-
-Builder:
-
-<https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Deterministic%20Linux>
-
-<https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Deterministic%20Linux%20%28dbg%29>
-
-* Linux is DONE!
-
-### Android
-
-Tracking issue: [crbug.com/383340](http://crbug.com/383340)
-
-Builder:
-
-<https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Deterministic%20Android>
-
-<https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Deterministic%20Android%20%28dbg%29>
-
-* Android is DONE!
-
-### iOS
-
-Tracking issue: [crbug.com/383364](http://crbug.com/383364)
-
-Builder:
-<http://build.chromium.org/p/chromium.swarm/waterfall?builder=IOS%20deterministic%20build>
-
-* Not investigated yet.
-
-## Example workflow on Windows
-
-```none
-# Do a whitespace change foo.cc to force a compilation.
-echo "" >> foo_main.cc
-# It recreates the same foo.obj than before since the code didn't change.
-compile foo_main.cc -> foo_main.obj
-# This step could be saved by a content-addressed build system, see "extension of the project" below.
-link foo_main.obj -> bar_test.exe
-# The binary didn't change, it is not uploaded again, saving both I/O and latency.
-isolate bar_test.exe -> isolateserver
-# Swarming immediately return results of the last green build, saving both utilization and latency.
-swarming.py run <sha1 of bar_test.isolated>
-```
-
-## Extension of the project
-
-Getting the build system to be content addressed as described in the Google
-reference above. This is a secondary task. It is out of scope for this project
-but is a natural extension. This saves on the build process itself at the cost
-of calculating hashes for each intermediary files. This will be piling on the
-fact that the build is itself deterministic. This is not worth doing before the
-build is itself deterministic and this property is enforced. This will save
-significantly on the build time itself on the build machines. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/isolated-testing/for-swes/index.md b/chromium/docs/website/site/developers/testing/isolated-testing/for-swes/index.md
deleted file mode 100644
index 06f9e9fe5eb..00000000000
--- a/chromium/docs/website/site/developers/testing/isolated-testing/for-swes/index.md
+++ /dev/null
@@ -1,224 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/isolated-testing
- - Isolated Testing
-page_name: for-swes
-title: Isolated Testing for SWEs
----
-
-[TOC]
-
-## Overview
-
-**Also See:**
-[//docs/workflow/debugging-with-swarming.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/workflow/debugging-with-swarming.md)
-
-This page explains how to convert a googletest executable into a fully isolated
-test. This is done by describing *runtime dependencies* for a test.
-
-For information about the infrastructure itself and the roadmap, see [Isolated
-Testing Infrastructure](/developers/testing/isolated-testing/infrastructure).
-
-Note: If you're a Googler who needs to perform a manual test on a platform for
-which you cannot readily build (e.g. Windows Developer with no development
-environment on your Mac book), follow [these instructions to get the build from
-a try run](https://goto.google.com/runtrybuiltbits).
-
-### What's "Isolate"?
-
-#### **Goal: describe the exact list of files needed to run a executable.**
-
-The isolate project is all the file formats, tools and server code to make this
-work **fast** and efficiently. Every test executable list the data files it
-depends on, which allows the testers bots to only download the files they need
-instead of the whole Chromium source tree.
-
-They are described in [BUILD.gn files](/developers/gn-build-configuration).
-
-### What's "Swarming"?
-
-**Goal: distribute tasks fast and efficiently in an heterogeneous fleet of
-bots.**
-
-The swarming project is all the tools, server and bot code to run a step (like a
-unit test) on a remote bot and get results back. It has native google-test
-sharding capability.
-
-### What are the advantages?
-
-By reducing the amount of data that we need to transfer to the tester machines,
-it becomes much easier to increase the number of tester bots that we have using
-Swarming (part of [LUCI](https://github.com/luci/)).
-
-## Adding a new test
-
-* Make sure the test exist in a BUILD.gn file.
-* Add missing items to the "data" section until the test runs locally
- isolated via mb.py run.
-* Add the test to the corresponding json file in //testing/buildbot/.
-* All the required data files, executables started by the test
- executable\* required by the test to succeed are listed as a
- dependency.
- * For example, `browser_tests.exe` needs `chrome.exe`, which needs
- `resources.pak`, etc.
-
-Expectations of the tests:
-
-* Must **not** do directory walking or otherwise try to guess what
- should be tested.
-* Must **not** edit any input file.
-* Must **not** write at all in the current directory. It must only use
- the temporary directory for temporary files.
-
-## HowTos
-
-### Download binaries from a try job
-
-* Visit the try job build, e.g. from <https://ci.chromium.org/>.
-* Search for \[trigger\] my_test and click Swarming task "shard #0"
- link
-* Scroll down a bit, follow the instructions in the **Reproducing this
- Task Locally** section
-
-### Run a test isolated locally
-
-```none
-echo gn > out/Release/mb_type  # Must be done once to avoid mb.py from performing a clobber
-tools/mb/mb.py run //out/Release base_unittests  # Builds, generates .isolate (via gn desc runtime_deps), and runs (via "isolate.py run")
-```
-
-### Run a test built locally on Swarming
-
-#### 1. Eligibility and login
-
-Right now, only users Chromium team members can use the infrastructure directly.
-Note that the whole [Swarming infrastructure is open
-source](https://github.com/luci/luci-py) so if any other company would help to
-recreate the same infrastructure internally, send us a note at
-[infra-dev@chromium.org](https://groups.google.com/a/chromium.org/g/infra-dev)
-
-By login first, you have access tokens so that the following commands do not
-have to constantly prompt for your identity. You only need to do this once:
-
-```none
-python tools/swarming_client/auth.py login --service=https://isolateserver.appspot.com 
-python tools/swarming_client/auth.py login --service=https://chromium-swarm.appspot.com 
-```
-
-If you are running through a text only session on a remote machine, append
-argument `--auth-no-local-webserver`
-
-#### 2. Build & Generate .isolate file
-
-The isolate file describes what are the files that needs to be mapped on the
-Swarming bot. It is generated via GN "data" and "data_deps" statements, and is
-processed by mb.py:
-
-```none
-ninja -C out/Release base_unittests
-echo gn > out/Release/mb_type  # Must be done once to avoid mb.py from performing a clobber
-python tools/mb/mb.py isolate //out/Release base_unittests # Creates out/Release/base_unittests.isolate
-```
-
-#### 3. Compute .isolated file and upload it
-
-The isolated file contains the SHA-1 of each input files. It is archives along
-all the inputs to the Isolate server. Since the isolate server is a
-content-addressed cache, only the ones missing from the cache are uploaded.
-Depending on your connection speed and the size of the executable, it may take
-up to a minute:
-
-```none
-python tools/swarming_client/isolate.py archive \
-    -I https://isolateserver.appspot.com \
-    -i out/Debug/base_unittests.isolate \
-    -s out/Debug/base_unittests.isolated
-```
-
-#### 4. Trigger the task
-
-That's where a task is requested, specifying the isolated (tree of SHA-1 of
-files to map in):
-
-```none
-python tools/swarming_client/swarming.py trigger \
-    -S chromium-swarm.appspot.com \
-    -I isolateserver.appspot.com \
-    -d os Android \
-    -d pool Chrome \
-    -d gpu none \
-    -s <hash printed at step 3>
-```
-
-Wait for results. OS currently available:
-
-* Windows-7-SP1 (64 bits)
-* Windows-8.1-SP0
-* Windows-2008ServerR2-SP1 (64 bits)
-* Windows-10-15063 (64 bits)
-* Ubuntu-14.04 and Ubuntu-16.04 (64 bits)
-* Mac-10.9 to Mac-10.13
-
-For other available --dimension values, look at Swarming bots e.g.:
-<https://chromium-swarm.appspot.com/botlist>.
-
-That's it. Feel free to contact the team at
-[infra-dev@chromium.org](https://groups.google.com/a/chromium.org/g/infra-dev)
-for any chromium open source specific questions.
-
-**Notes:**
-
-* `-d pool Chrome` is needed!
-* -d cpu x86-64 is useful to prevent your 64 bit build from being run
- on 32-bit Windows trybots.
-
-### Additional Notes
-
-* Running an executable on a swarming bot is documented at in the
- [user
- guide](https://chromium.googlesource.com/infra/luci/luci-py.git/+/HEAD/appengine/swarming/doc/User-Guide.md).
-* Monitor the running tasks by visiting
- [chromium-swarm.appspot.com](https://chromium-swarm.appspot.com).
-
-## FAQ
-
-### I run a task on Swarming and it hangs there
-
-It is possible that all the bots are currently fully utilized. In this case, the
-task is in PENDING state.
-
-### It seems tedious to list each test data file individually, can I just list src/ ?
-
-In theory yes, in practice please don't and keep the list to the strict minimum.
-The goal is not to run the tests more slowly and having the bots download 20 gb
-of data. Reasons includes:
-
-1. Isolate Server is optimized for &lt; 50000 files scenario. There's a
- 2ms/file cost per cache hit. So for example, layout tests are
- currently out of the use case since there's &gt; 80000 files.
-2. It's always possible to go coarser but it's much harder to get back
- stricter.
-
-### Where can I find the .isolated file?
-
-The .isolated files are generated when you build the isolation specific version
-of a target, e.g. out/Debug or out/Release. The isolation target name is just
-the normal target name with a _run added to the end.
-
-### I have an error, is it related to .isolate files?
-
-If you have a test that passes locally and fails on some trybots, then it could
-be related.
-
-This error can be seen when a browser test js file is not found:
-
-TypeError: Cannot read property 'testCaseBodies' of undefined
-
-### Where should I file bugs?
-
-Swarming specific bugs can be filed on at <http://crbug.com> in [component
-Infra&gt;LUCI&gt;TaskDistribution](https://bugs.chromium.org/p/chromium/issues/list?q=component%3AInfra%3ELUCI%3ETaskDistribution). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/isolated-testing/index.md b/chromium/docs/website/site/developers/testing/isolated-testing/index.md
deleted file mode 100644
index 0fe971e04ae..00000000000
--- a/chromium/docs/website/site/developers/testing/isolated-testing/index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: isolated-testing
-title: Isolated Testing
----
-
-[TOC]
-
-## What's happening
-
-The Chrome team is in the process of retro-fitting the ability of running tests
-outside a checkout to scale out testing so the tests results are returned
-faster.
-
-## Design documents
-
-The whole LUCI/Swarming/Isolate project lives in its own project at
-[github.com/luci](https://github.com/luci). The [design docs on the
-wiki](https://github.com/luci/luci-py/wiki) are a recommended reading since it
-gives background about the rationale why is it done in the first place.
-
-## User guide
-
-[I want to convert my test or use the
-infrastructure](/developers/testing/isolated-testing/for-swes) &lt;- most likely
-this one.
-
-## End goal
-
-[Deduplicate test execution via deterministic
-builds](/developers/testing/isolated-testing/deterministic-builds) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/isolated-testing/infrastructure/index.md b/chromium/docs/website/site/developers/testing/isolated-testing/infrastructure/index.md
deleted file mode 100644
index b47c7d9dd47..00000000000
--- a/chromium/docs/website/site/developers/testing/isolated-testing/infrastructure/index.md
+++ /dev/null
@@ -1,204 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/isolated-testing
- - Isolated Testing
-page_name: infrastructure
-title: Isolated Testing Infrastructure
----
-
-[TOC]
-
-## This page is obsolete, need to be migrated to markdown (https://crbug.com/1246778)
-
-## Objective
-
-"*Build and test at scale*". The goal is to drastically reduce whole test cycle
-time by scaling building and test sharding across multiple bots seamlessly. It
-does so by integrating Swarming within the Try Server and the Continuous
-Integration system.
-
-This page is about the Chromium specific Swarming infrastructure. For the
-general Swarming Design, see [its
-documentation](https://chromium.googlesource.com/infra/luci/luci-py/+/HEAD/appengine/swarming/doc/Design.md).
-
-## Background
-
-* The Chromium waterfall used to use completely manual test sharding.
- A "builder" compiles and creates a .zip of the build output. Then
- "testers" download the zip, checkout the sources, unpack the zip
- inside the source checkout and run a few tests.
-* While we can continue throwing more faster hardware at the problem,
- the fundamental issue remains; as tests gets larger and slower, the
- end-to-end test latency will continue to increase, slowing down
- developer productivity.
-* This is a natural extension of the Chromium Try Server (initiated
- and written by maruel@ in 2008) that scaled up through the years and
- the Commit Queue (initiated and written by maruel@ in 2011).
-* Before the [Try Server](/system/errors/NodeNotFound), team members
- were not testing on other platforms than the one they were
- developing on, causing constant breakage. This helped getting at 50
- commits/day.
-* Before the [Commit Queue](/developers/testing/commit-queue/design),
- the overhead of manually triggered proper tests on all the important
- configuration was becoming increasingly cumbersome. This could be
- automated and was done. This helped sustain 200 commits/day.
-
-But these are not sufficient to scale the team velocity at hundreds of commits
-per day. Big design flaws remain in the way the team is working. In particular,
-to scale the Chromium team productivity, significant changes in the
-infrastructure need to happen. In particular, the latency of the testing across
-platforms need to be drastically reduced. That requires getting the test result
-in O(1) time, independent of:
-
-1. Number of platforms to test on.
-2. Number of test executables.
-3. Number of test cases.
-4. Duration of each test cases, especially in the worse case.
-5. Size of the data required to run the test.
-6. Size of the checkout.
-
-To achieve this, sharding a test must be a constant cost. This is what the
-Swarming integration is about.
-
-## Overview
-
-Using Swarming works around [Buildbot](http://buildbot.net/)'s limitations and
-permits sharding automatically and in an unlimited way. For example, it permits
-sharding the test cases on a large smoke test across multiple bots to reduce the
-latency of running it. Buildbot on the other hand requires manual configuration
-to shard the tests and is not very efficient at large scale.
-
-By reusing the Isolated testing effort, we're going to be able to shard
-efficiently the Swarming bots. By integrating Swarming infrastructure inside
-[Buildbot](http://buildbot.net/), we worked around the manual sharding that
-buildbot requires.
-
-To recapitulate the Isolated design doc, `isolateserver.py` is used to archive
-all the run time dependencies of a unit tests on the "builder" to Isolate
-Server. Since the content store is content-addressed by the SHA-1 of the
-content, only new contents are archived. Then only the SHA-1 of the manifest
-describing the whole dependency is sent to the Swarming bots, with an index of
-the shards that it needs to run. That is, **40 bytes for the hash plus 2
-integers** is all that is required to know what OS is needed and what files are
-needed to run a shard of test cases along `run_isolated.py`.
-
-## How the infrastructure works
-
-For each buildbot worker using Swarming:
-
-1. Checks out sources.
-2. Compile
-3. Runs 'isolate tests'. This archives the builds on
- <https://isolateserver.appspot.com>.
-4. Triggers Swarming tasks.
-5. Runs anything that needs to run locally.
-6. Collects Swarming tasks results.
-
-The Commit Queue uses Swarming indirectly via the Try Server.
-
-So there is really 2 layers of control involved. The first being **the LUCI
-scheduler** which controls the overall "build", which includes syncing the
-sources, compiling, requesting the test to be run on Swarming and asking it to
-report success or failure. The second layer is the **Swarming server** itself
-which "micro-distribute" test shards. Each test shard is actually a subset of
-the test cases for a single unit test executable. All the unit tests are run
-concurrently. So for example for a Try Job that requests `base_unittests`,
-`net_unittests`, `unit_tests` and `browser_tests` to be run, they are all run
-simultaneously on different Swarming bot, and slow tests, like browser_tests,
-are further sharded across multiple bots, all simultaneously.
-
-## Diagrams
-
-How the Try Server is using Swarming:
-
-#### Chromium Try Server Swarming Infrastructure
-
-How using Swarming directly looks like
-
-#### Using Swarming directly
-
-## Project information
-
-* This project is an integral part of the Chromium Continuous
- Integration infrastructure and the Chromium Try Server.
-* While this project will greatly improve the Chromium Commit Queue
- performance, it has no direct relationship and the performance
- improvement, while we're aiming for it, is totally a side-effect of
- the reduced Try Server testing latency.
-* Code: <https://chromium.googlesource.com/infra/luci/luci-py.git>.
-
-### Appengine Servers
-
-* [chromium-swarm.appspot.com](https://chromium-swarm.appspot.com):
- manages task execution
-* [isolateserver.appspot.com](https://isolateserver.appspot.com/):
- build output cache
-
-### Canary Setup
-
-* [chromium-swarm-dev.appspot.com](https://chromium-swarm-dev.appspot.com)
-* [isolateserver-dev.appspot.com](https://isolateserver-dev.appspot.com)
-
-## Latency
-
-This project is primarily aimed at reducing the overall latency from "ask for
-green light signal for a CL" to getting the signal. The CL can be "not committed
-yet" or "just committed", the former being the Try Server, the later the
-Continuous Integration servers. The latency is reduced by enabling a higher of
-parallel shard execution and removing the constant costs of syncing the sources
-and zipping the test executables, both which are extremely slow, in the orders
-of minutes.
-Other latencies includes;
-
-1. Time to archive the dependencies to the Isolate Server.
-2. Time to trigger a Swarming run.
-3. Time for the workers to react to a Swarming run request.
-4. Time for the workers to fetch the dependencies, map them in a
- temporary directory.
-5. Time for the workers to cleanup the temporary directory and report
- back stdout/stderr to the Swarming master.
-6. Time for the Swaming master to react and return the information to
- the Swarming client running on the buildbot worker.
-
-## Scalability
-
-All servers run on AppEngine. It scales just fine.
-
-## Redundancy and Reliability
-
-There are multiple single points of failures
-
-1. The Isolate Server which is hosted on AppEngine.
-2. The Swarming master, which is also hosted on AppEngine.
-
-The swarming bots are intrinsically redundant. The Isolate Server data store
-isn't redundant or reliable, it can be rebuilt from sources if needed. If it
-fails, it will block the infrastructure.
-
-## Security Consideration
-
-Since the whole infrastructure is visible from the internet, like this design
-doc, proper DACL need to be used. Both the Swarming and the Isolate servers
-require valid Google accounts. The credential verification is completely managed
-by
-[auth_service](https://github.com/luci/luci-py/tree/master/appengine/auth_service).
-
-## Testing Plan
-
-All the code (Swarming master, Isolate Server and swarming_client code) are
-tested in canary before being rolled out to prod. See the Canary Setup above.
-
-## FAQ
-
-### Why not a faulty file system like FUSE?
-
-Faulty file systems are inherently slow: every time a file is missing, the whole
-process hangs, the FUSE adapter downloads the file synchronously, then the
-process resume. Multiply 8000x; that's what browser_tests lists. With a
-pre-loaded content-addressed file-system, all the files can be cached safely
-locally and be downloaded simultaneously. The saving and speed improvement is
-enormous. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/leaksanitizer/index.md b/chromium/docs/website/site/developers/testing/leaksanitizer/index.md
deleted file mode 100644
index 6bec2d97358..00000000000
--- a/chromium/docs/website/site/developers/testing/leaksanitizer/index.md
+++ /dev/null
@@ -1,160 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: leaksanitizer
-title: LeakSanitizer
----
-
-LeakSanitizer (LSan) is a heap leak detector similar to
-[HeapLeakChecker](/system/errors/NodeNotFound) or to the leak checker in
-[Valgrind/Memcheck](/system/errors/NodeNotFound). LSan can be run on top of
-[AddressSanitizer](/developers/testing/addresssanitizer) with no additional
-slowdown compared to plain ASan.
-
-See <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
-for more information.
-
-## LeakSanitizer bots
-
-LeakSanitizer is enabled on the ASan bots on
-[chromium.memory](http://build.chromium.org/p/chromium.memory/console) (both
-Linux and ChromeOS, with the exception of the "sandboxed" bot). All ASan trybots
-also have LSan enabled.
-
-### My CL has benign (test-only, intentional etc) leaks, how do I suppress them?
-
-You should fix the CL instead. The leaks may be harmless, but letting them
-accumulate over time has a negative impact on the stability of our bots. If you
-leak memory intentionally, use an in-code annotation instead (see
-`base/debug/leak_annotations.h`).
-
-Ideally, you should only land suppressions for leaks in third-party code that
-you have no control over. If that is the case, take a look at
-build/sanitizers/lsan_suppressions.cc. The syntax is as follows:
-
-`leak:<wildcard>`
-
-The wildcard will be matched against the function/module/source file name of
-each frame in the stack trace. Supported special characters are `*`, `^`
-(beginning of string) and `$` (end of string).
-
-Please be careful not to make the wildcard too generic. The [TSan
-v2](/developers/testing/threadsanitizer-tsan-v2) page has some examples of good
-and bad suppressions.
-
-You can supply additional suppressions by adding
-`suppressions=/path/to/suppressions.txt` to `LSAN_OPTIONS`.
-
-## Using LeakSanitizer
-
-If you don't want to run LeakSanitizer locally, you can skip this section.
-
-### Building Chromium with ASan + LeakSanitizer
-
-LeakSanitizer is supported on x86_64 Linux only. To build, follow the
-[ASan](/developers/testing/addresssanitizer) build instructions and add a
-reference to is_lsan. Leak detection must not be enabled at build time, or LSan
-will find leaks during the build process and fail. Make sure `ASAN_OPTIONS` is
-not set when you build.
-
-In GN, set up an "lsan" build directory (the directory naming is up to you):
-
-> gn args out/lsan
-
-Add the args to the resulting editor:
-
-> is_asan = true
-
-> is_lsan = true
-
-> is_debug = false # Release build.
-
-> enable_nacl = false # Not necessary, but makes things faster.
-
-And then build:
-
-> ninja -C out/lsan base_unittests
-
-### Using LeakSanitizer on top of ASan
-
-At run-time, add `detect_leaks=1` to ASAN_OPTIONS. You will also need to enable
-symbolization, which is required for suppressions to work:
-
-ASAN_OPTIONS="detect_leaks=1 symbolize=1
-external_symbolizer_path=$SRC/third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer"
-out/Release/base_unittests
-
-A typical LSan report looks like this:
-
-`=================================================================`
-
-`==18109==ERROR: LeakSanitizer: detected memory leaks`
-
-`Direct leak of 1024 byte(s) in 1 object(s) allocated from:`
-
-` #0 0x430205 in _Znam _asan_rtl_`
-
-` #1 0xfc0edd in TestBody base/tools_sanity_unittest.cc:83`
-
-` #2 0x10eeef7 in Run testing/gtest/src/gtest.cc:2067`
-
-` #3 0x10f04e1 in Run testing/gtest/src/gtest.cc:2244`
-
-` #4 0x10f1357 in Run testing/gtest/src/gtest.cc:2351`
-
-` #5 0x10fe7b2 in RunAllTests testing/gtest/src/gtest.cc:4177`
-
-` #6 0x10fdcbc in impl testing/gtest/src/gtest.cc:2051`
-
-` #7 0x12b5d16 in Run base/test/test_suite.cc:167`
-
-` #8 0x128eaf6 in main base/test/run_all_unittests.cc:8`
-
-` #9 0x7f18a1dc576c in __libc_start_main
-/build/buildd/eglibc-2.15/csu/libc-start.c:226`
-
-` #10 0x444a6c in _start ??:0`
-
-`SUMMARY: LeakSanitizer: 1024 byte(s) leaked in 1 allocation(s).`
-
-Note that LeakSanitizer is incompatible with the sandbox. You must pass
-`--no-sandbox` if you want to run browser tests/Chrome with LSan.
-
-#### Using debug versions of shared libraries
-
-(NOTE: the libstdc++ part is no longer required for Chromium, where we now use a
-custom libc++ binary for ASan builds.)
-
-Be aware that ASan's fast stack unwinder depends on frame pointers, which are
-often missing in release versions of shared libraries. If you want to use the
-fast unwinder (enabled by default), you should at least install a debug version
-of libstdc++. This worked for us on Ubuntu:
-
-`sudo apt-get install libstdc++6-4.6-dbg`
-
-`LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu/debug" ASAN_OPTIONS="detect_leaks=1
-`strict_memcmp=0" out/Release/base_unittests
-
-If you still see incomplete stack traces, you can disable the fast unwinder by
-adding `fast_unwind_on_malloc=0` to `ASAN_OPTIONS`.
-
-#### GLib
-
-GLib may not play well with leak detection tools in the default mode. We
-recommend to pass `G_SLICE=always-malloc`, especially if you're trying to
-reproduce a GLib-related leak.
-
-### Using LeakSanitizer without ASan
-
-LSan can also be used without ASan instrumentation. In the build flags above,
-omit the is_asan reference and specify only s_lsan. At runtime, use
-`LSAN_OPTIONS` instead of `ASAN_OPTIONS`. Disabling ASan instrumentation can
-bring a performance advantage, but be aware that this mode is not as well tested
-as the LSan+ASan mode.
-
-In this mode leak detection is enabled by default. When building, you must
-explicitly set `LSAN_OPTIONS="detect_leaks=0"` to prevent build errors (see
-above). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/libfuzzer/index.md b/chromium/docs/website/site/developers/testing/libfuzzer/index.md
deleted file mode 100644
index e6e575ada79..00000000000
--- a/chromium/docs/website/site/developers/testing/libfuzzer/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: libfuzzer
-title: LibFuzzer
----
-
-## Moved to [here](https://chromium.googlesource.com/chromium/src/+/HEAD/testing/libfuzzer/README.md). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/memorysanitizer/index.md b/chromium/docs/website/site/developers/testing/memorysanitizer/index.md
deleted file mode 100644
index 5913532add6..00000000000
--- a/chromium/docs/website/site/developers/testing/memorysanitizer/index.md
+++ /dev/null
@@ -1,267 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: memorysanitizer
-title: MemorySanitizer (MSan)
----
-
-MemorySanitizer (MSan) is a tool that detects use of uninitialized memory.
-
-MSan is supported on x86_64 Linux. Additional info on the tool is available at
-<http://clang.llvm.org/docs/MemorySanitizer.html>.
-
-MSan in Chromium is unlikely to be usable on systems other than Ubuntu
-Precise/Trusty - please see the note on instrumented libraries below.
-
-MSan bots are running on
-[chromium.memory.fyi](http://build.chromium.org/p/chromium.memory.fyi/waterfall?builder=Chromium+Linux+MSan+Builder&builder=Linux+MSan+Tests&builder=Chromium+Linux+ChromeOS+MSan+Builder&builder=Linux+ChromeOS+MSan+Tests&reload=none),
-[client.webrtc](http://build.chromium.org/p/client.webrtc/builders/Linux%20MSan)
-and
-[chromium.webkit](http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20MSAN).
-There are also two LKGR builders for ClusterFuzz: [no
-origins](http://build.chromium.org/p/chromium.lkgr/builders/MSAN%20Release%20(no%20origins)),
-[chained
-origins](http://build.chromium.org/p/chromium.lkgr/builders/MSAN%20Release%20(chained%20origins))
-(see below for explanation). V8 deployment is ongoing.
-
-Trybots:
-[linux_chromium_msan_rel_ng](http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_msan_rel_ng/),
-[linux_chromium_chromeos_msan_rel_ng](http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_chromeos_msan_rel_ng/).
-
-[TOC]
-
-## Pre-built Chrome binaries
-
-You can grab fresh Chrome binaries for Linux built with MSan
-[here](http://commondatastorage.googleapis.com/chromium-browser-msan/index.html).
-
-## How to build and run
-
-To set up an MSan build in GN:
-
-```none
-gclient runhooks
-gn args out/msan
-```
-
-In the resulting editor, set the build variables:
-
-> is_msan = true
-
-> is_debug = false # Release build.
-
-(Note: if you intend to run the Blink web tests with the MSan-instrumented
-content_shell binary, you must use out/Release instead of out/msan, because
-otherwise the test expectations will not apply correctly.)
-
-(In older versions of Chromium you also had to explicitly set
-"use_prebuilt_instrumented_libraries = true". This is now the default if is_msan
-is set and can no longer be overridden.)
-
-MSan requires using Instrumented system libraries. Note that instrumented
-libraries are supported on Ubuntu Precise/Trusty only. More information:
-[instrumented-libraries-for-dynamic-tools](/developers/testing/instrumented-libraries-for-dynamic-tools).
-
-The following flags are implied by is_`msan=true` (i.e. you don't have to set
-them explicitly):
-
-* `v8_target_arch=arm64`: JavaScript code will be compiled for ARM64
- and run on an ARM64 simulator. This allows MSan to instrument JS
- code. Without this flag there will be false reports.
-
-Some common flags may break a MSAN build. For example, don't set
-"dcheck_always_on = true" when using MSAN.
-
-If you are trying to reproduce a test run from the [Linux ChromiumOS MSan
-Tests](https://ci.chromium.org/p/chromium/builders/ci/Linux%20ChromiumOS%20MSan%20Tests)
-build, other GN args may also be needed.
-You can look for them via your test run page, under the section "lookup builder
-GN args". Add all of them, except the goma_dir.
-
-**Running on gLinux locally**
-
-testing/xvfb.py out/msan/unit_tests --gtest_filter="&lt;your test filter&gt;"
-**Running on Ubuntu Trusty**
-
-Run the resulting binaries as usual. Pipe both stderr and stdout through
-`tools/valgrind/asan/asan_symbolize.py` to get symbolized reports:
-
-```none
-./out/msan/browser_tests |& tools/valgrind/asan/asan_symbolize.py
-```
-
-### **Running on other distros using Docker**
-
-If you're a Googler, you can install Docker by following the instructions at
-go/installdocker.
-
-A Trusty docker image for running MSan instrumented binaries can be built:
-
-```none
-docker build -t trusty-chromium third_party/instrumented_libraries/docker
-third_party/instrumented_libraries/scripts/run_docker.sh out/msan/browser_tests |& tools/valgrind/asan/asan_symbolize.py
-```
-
-If you need to run a binary against some test input, you need to place the input
-somewhere in your chromium src directory (as it's mounted into the docker
-container by run_docker.sh).
-
-e.g. you can place the input in chromium/src/testcases/testcase.html and run:
-
-```none
-third_party/instrumented_libraries/scripts/run_docker.sh out/msan/chrome --use-gl=swiftshader testcases/testcase.html
-```
-
-The CWD in the docker container is your chromium src directory, so you can pass
-paths relative to that.
-
-Note that this image may have to be rebuilt from time to time if new
-dependencies are added to install-build-deps.sh. To do a rebuild, pass
---no-cache to the docker build command:
-
-```none
-docker build --no-cache -t trusty-chromium third_party/instrumented_libraries/docker
-```
-
-### **Disable OpenGL**
-
-Chrome must not use hardware OpenGL when running under MSan. This is because
-libgl.so is not instrumented and will crash the GPU process. SwiftShader can be
-used as a software OpenGL implementation, although it is extremely slow. There
-are several ways to proceed:
-
-* --disable-gpu: This forces Chrome to use the software path for
- compositing and raster. WebGL will still work using SwiftShader GL.
-* `--use-gl=swiftshader: This switches Chrome to use SwiftShader GL
- for compositing, (maybe) raster and WebGL.`
-* `--use-gl=swiftshader --disable-gl-drawing-for-tests`: Use this if
- you don't care about the actual pixel output. This exercises the
- default code paths, however expensive SwiftShader calls are replaced
- with stubs (i.e. nothing actually gets drawn to the screen).
-
-If neither flag is specified, Chrome will fall back to the first option after
-the GPU process crashes with an MSan report.
-
-### Origin tracking
-
-MSan allows the user to trade off execution speed for the amount of information
-provided in reports. This is controlled by the GN/GYP flag `msan_track_origins`:
-
-* `msan_track_origins=0`: MSan will tell you where the uninitialized
- value was used, but not where it came from. This is the fastest
- mode.
-* `msan_track_origins=1` (deprecated): MSan will also tell you where
- the uninitialized value was originally allocated (e.g. which
- malloc() call, or which local variable). This mode is not
- significantly faster than `msan_track_origins=2`, and its use is
- discouraged. We do not provide pre-built instrumented libraries for
- this mode.
-* `msan_track_origins=2` (default): MSan will also report the chain of
- stores that copied the uninitialized value to its final location. If
- there are more than 7 stores in the chain, only the first 7 will be
- reported. Note that compilation time may increase in this mode.
-
-### Suppressions
-
-MSan does not support suppressions. This is an intentional design choice.
-
-We have a [blocklist
-file](https://code.google.com/p/chromium/codesearch/#chromium/src/tools/msan/blacklist.txt)
-which is applied at compile time, and is used mainly to compensate for tool
-issues. Blocklist rules do not work the way suppression rules do - rather than
-suppressing reports with matching stack traces, they change the way MSan
-instrumentation is applied to the matched function. In addition, blocklist
-changes require a full clobber to take efffect. Please refrain from making
-changes to the blocklist file unless you know what you are doing.
-
-Note also that instrumented libraries use separate blocklist files.
-
-## Debugging MSan reports
-
-Important caveats:
-
-* Please keep in mind that simply reading/copying uninitialized memory
- will not cause an MSan report. Even simple arithmetic computations
- will work. To produce a report, the code has to do something
- significant with the uninitialized value, e.g. branch on it, pass it
- to a libc function or use it to index an array.
-* When you examine a stack trace in an MSan report, all third-party
- libraries you see in it (with the exception of libc and its
- components) should reside under
- `out/Release/instrumented_libraries`. If you see a DSO under a
- system-wide directory (e.g. /`lib/`), then the report is likely
- bogus and should be fixed by simply adding that DSO to the list of
- instrumented libraries (please file a bug under
- `Stability-Memory-MemorySanitizer` and/or ping eugenis@).
-* Inline assembly is also likely to cause bogus reports. Consequently,
- assembly-optimized third-party code (such as libjpeg_turbo, libvpx,
- libyuv, ffmpeg) will have those optimizations disabled in MSan
- builds.
-* If you're trying to debug a V8-related issue, please keep in mind
- that MSan builds run V8 in ARM64 mode, as explained below.
-
-MSan reserves a separate memory region ("shadow memory") in which it tracks the
-status of application memory. The correspondence between the two is bit-to-bit:
-if the shadow bit is set to 1, the corresponding bit in the application memory
-is considered "poisoned" (i.e. uninitialized). The header file
-`<sanitizer/msan_interface.h>` declares interface functions which can be used to
-examine and manipulate the shadow state without changing the application memory,
-which comes in handy when debugging MSan reports.
-
-Print the complete shadow state of a range of application memory, including the
-origins of all uninitialized values, if any. (Note: though initializedness is
-tracked on bit level, origins have 4-byte granularity.)
-
-```none
-void __msan_print_shadow(const volatile void *x, size_t size);
-```
-
-The following prints a more minimalistic report which shows only the shadow
-memory:
-
-```none
-void __msan_dump_shadow(const volatile void *x, size_t size);
-```
-
-To mark a memory range as fully uninitialized/initialized:
-
-```none
-void __msan_poison(const volatile void *a, size_t size);
-void __msan_unpoison(const volatile void *a, size_t size);
-void __msan_unpoison_string(const volatile char *a);
-```
-
-The following forces an MSan check, i.e. if any bits in the memory range are
-uninitialized the call will crash with an MSan report.
-
-```none
-void __msan_check_mem_is_initialized(const volatile void *x, size_t size);
-```
-
-This milder check returns the offset of the first (at least partially) poisoned
-byte in the range, or -1 if the whole range is good:
-
-```none
-intptr_t __msan_test_shadow(const volatile void *x, size_t size);
-```
-
-Hint: sometimes to reduce log spam it makes sense to query
-`__msan_test_shadow()` before calling `__msan_print_shadow()`.
-
-The complete interface can be found in
-`src/third_party/llvm-build/Release+Asserts/lib/clang/3.6.0/include/sanitizer/msan_interface.h`.
-Functions such as `__msan_unpoison()` can also be used to permanently annotate
-your code for MSan, but please CC eugenis@ if you intend to do so.
-
-## Reproducing ClusterFuzz Bugs
-
-Because MSan only supports Ubuntu Precise/Trusty and not Rodete, the
-[ClusterFuzz reproduce tool](https://github.com/google/clusterfuzz-tools) cannot
-reproduce bugs found using MSan (on Rodete).
-
-If you are on Rodete, you can try to reproduce them manually using docker to run
-MSan by following [these
-instructions](/developers/testing/memorysanitizer#TOC-Running-on-other-distros-using-Docker). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/multi-process-ram-usage-analysis-on-android/index.md b/chromium/docs/website/site/developers/testing/multi-process-ram-usage-analysis-on-android/index.md
deleted file mode 100644
index 3460e1b5d01..00000000000
--- a/chromium/docs/website/site/developers/testing/multi-process-ram-usage-analysis-on-android/index.md
+++ /dev/null
@@ -1,141 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: multi-process-ram-usage-analysis-on-android
-title: Multi-Process RAM usage analysis on Android
----
-
-## Overview
-
-Measuring RAM usage of a program should take in account not only memory heap,
-but also other memory, such as memory-mapped files or memory shared among the
-processes. There is a built-in Android debug tool **procrank** that displays one
-useful number for a process: "Uss" (Unique Set Size), rough amount of *private*
-memory (such as C++/V8/Dalvik heaps). Procrank also reports "Pss" (Proportional
-Set Size) that takes into account shared memory, but it is hard to make any
-conclusions based on this number. Chrome on Android is a multi-process
-application where browser process shares quite a lot of memory with the renderer
-processes (for example, read-only code).
-
-The new set of tools in the chromium tree estimate the overall RAM usage of all
-processes (browser and renderers), as well as provides more fine-grained
-analysis for the running browser by type or memory mapping: private, shared
-read-only, shared read-write, etc. The HOWTO below briefly describes the steps
-to use the tools.
-
-## HOWTO
-
-**Step 1:** build the memdump tool and deploy it on the device. The tools will
-be used to analyse memory mappings by looking at /proc/PID/pagemap,
-/proc/PID/maps for given process IDs, and also /proc/kpagecount.
-
-<pre><code>
-adb remount
-adb root
-ninja -C out/Release <b>memdump</b>
-adb push out/Release/memdump /data/local/tmp/
-</code></pre>
-
-**Step 2:** Build the browser with the 'dlmalloc hack'
-(<https://codereview.chromium.org/16514009>). It is the allocator used in
-Android by default, except it is modified to perform all internal mappings using
-ashmem, which makes it easier to distinguish the heap memory from other
-mappings.
-
-Given a checkout of chromium sources patch them with the hack, enable the build
-flag and build the browser:
-
-<pre><code>
-git cl patch 16514009
-GYP_DEFINES="<b>android_use_dlmalloc=1</b> $GYP_DEFINES" gclient runhooks
-# Build and deploy the browser apk as usual.
-</code></pre>
-
-Steps 1 and 2 should be performed only once for a browser build.
-
-**Step 3:** when the browser is started, use a little shell scripting to select
-the PIDs of all processes belonging to the browser (kill all other browser
-instances prior to this step), feed the memdump report to the analyser:
-
-```none
-adb shell /data/local/tmp/memdump $(adb shell ps | grep chrome | awk '{ print $2; }') | python tools/android/memdump/memreport.py
-```
-
-An example output it produces:
-
-<pre><code>
-,Process 1,private,shared_app,shared_other,
-,Total,91.7734375,54.71875,46.06640625,
-,Read-only,2.94140625,1.13671875,9.36328125,
-,Read-write,84.80078125,45.58203125,31.984375,
-,Executable,4.03125,8.0,4.71875,
-,File read-write,78.28125,45.58203125,31.21875,
-,Anonymous read-write,6.47265625,0.0,0.76171875,
-,File executable,4.03125,8.0,4.71875,
-,Anonymous executable (JIT'ed code),0,0,0,
-,chromium mmap,0,0,0,
-,chromium TransferBuffer,0,0,0,
-,Galaxy Nexus GL driver,65.73828125,0.0,20.05859375,
-,Dalvik,5.67578125,0.0,10.84375,
-,Dalvik heap,3.55078125,0.0,8.0625,
-,Native heap (jemalloc),0,0,0,
-,Native heap (dlmalloc),<b>4.50390625</b>,0.0,0.0,
-,System heap,0,0,0,
-,Ashmem,2.01171875,45.58203125,0.0,
-,libchromeview.so total,5.234375,7.9453125,0.0,
-,libchromeview.so read-only,1.2421875,0.0,0.0,
-,libchromeview.so read-write,0.14453125,0.0,0.0,
-,libchromeview.so executable,3.84765625,7.9453125,0.0,
-,Process 2,private,shared_app,shared_other,
-,Total,20.5859375,54.71875,21.16796875,
-,Read-only,1.3125,1.13671875,5.71484375,
-,Read-write,11.6796875,45.58203125,13.1640625,
-,Executable,7.59375,8.0,2.2890625,
-,File read-write,8.45703125,45.58203125,12.140625,
-,Anonymous read-write,3.83203125,0.0,1.0078125,
-,File executable,6.9765625,8.0,2.2890625,
-,Anonymous executable (JIT'ed code),0.6171875,0.0,0.0,
-,chromium mmap,0,0,0,
-,chromium TransferBuffer,0,0,0,
-,Galaxy Nexus GL driver,0,0,0,
-,Dalvik,1.5,0.0,11.7734375,
-,Dalvik heap,0.64453125,0.0,8.41796875,
-,Native heap (jemalloc),0,0,0,
-,Native heap (dlmalloc),6.76171875,0.0,0.0,
-,System heap,0,0,0,
-,Ashmem,0.0,45.58203125,0.0,
-,libchromeview.so total,8.35546875,7.9453125,0.0,
-,libchromeview.so read-only,1.2421875,0.0,0.0,
-,libchromeview.so read-write,0.14453125,0.0,0.0,
-,libchromeview.so executable,6.96875,7.9453125,0.0,
-,Total,167.078125,
-,Read-only,5.390625,
-,Read-write,142.0625,
-,Executable,19.625,
-,File read-write,132.3203125,
-,Anonymous read-write,10.3046875,
-,File executable,19.0078125,
-,Anonymous executable (JIT'ed code),0.6171875,
-,chromium mmap,0,0
-,chromium TransferBuffer,0,0
-,Galaxy Nexus GL driver,65.73828125,
-,Dalvik,7.17578125,
-,Dalvik heap,4.1953125,
-,Native heap (jemalloc),0,0
-,Native heap (dlmalloc),11.265625,
-,System heap,0,0
-,Ashmem,47.59375,
-,libchromeview.so total,21.53515625,
-,libchromeview.so read-only,2.484375,
-,libchromeview.so read-write,0.2890625,
-,libchromeview.so executable,18.76171875,
-</code></pre>
-
-Only information about the **pages resident in memory** is printed. The "Process
-1" is typically the browser process, others are renderer processes. For example,
-the value in bold shows that the browser process has allocated ~4.5 MB heap
-memory. The browser also has loaded almost 4MB of executable code during
-execution. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/no-compile-tests/index.md b/chromium/docs/website/site/developers/testing/no-compile-tests/index.md
deleted file mode 100644
index 2af211d5bf3..00000000000
--- a/chromium/docs/website/site/developers/testing/no-compile-tests/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: no-compile-tests
-title: No-compile Tests
----
-
-No Compile Tests are used to verify that certain coding constructs will fail to
-compile. These were developed to test the base/callback.h and base/bind.h
-constructs which need to ban certain types of assignments in order to preserve
-type safety. The tests however can be used to enforce any sort of compile-time
-check, such as static_assert.
-
-**Why do we want to assert failure in compilation?**
-
-Most of the time you don't want to do this. However, with template code, you are
-playing with the type system. In particular with callbacks, it's possibly to
-accidentally write code that allows unsafe type conversion leading to a code
-execution. Here's a specific example:
-
-int func(double f) {
-
-printf("woohoo! Called with %lf!\\n", f);
-
-}
-
-Callback&lt;int(void)&gt; c = Bind(&func, 1);
-
-If you look carefully at the types, Callback&lt;int(void)&gt; has no concept of
-how many arguments func originally needed, or what types they were. Somewhere
-between the call to Bind() and the assignment, the type of func:int(int), and
-the type of 1:int was captured and erased so that it could be assigned into a
-Callback that only knew the resulting function was int(void). To do this, there
-is some casting happening that can break type safety. In the Bind()
-implementation, the code has been constructed carefully to fail at compile time
-if you were to try and do something like:
-
-Callback&lt;void(void)&gt; c = Bind(&func, 1);
-
-However, the system is complicated and regressions can occur. In fact, they
-already snuck in once. To ensure we do not regress in behavior and allow a
-dangerous type safety violation, we need a set of "no compile tests" that assert
-that known dangerous constructs will not silently compile. This makes it much
-safer to modify the Bind() implementation.
-
-Though this uses the Callback/Bind system as an example, any code that ends up
-needing to ensure a certain set of compile time constraints aren't violated can
-benefit from these kinds of tests.
-
-**How to write:**
-
-1. Create a ".nc" source file.
-2. Import build/nocompile.gni
-3. Include the ".nc" source file into a sources section of a
- nocompile_test target (eg., base_nocompile_tests).
-
-The nocompile.gni import adds a template target that will process the .nc files
-and produce a .cc file that represents the test results. On a failed no-compile
-test (aka success compilation), the generated .cc file will consist of a set of
-#error lines holding the compiler output. This will cause the unittest to fail
-to build. If all tests succeed, then the .cc file will contain a set of
-unittests representing each no-compile test which trivially succeed. This lets
-you know that the tests were at least run.
-
-The comment at the top of build/nocompile.gni has most of the documentation for
-how to use this system. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/page-heap-for-chrome/index.md b/chromium/docs/website/site/developers/testing/page-heap-for-chrome/index.md
deleted file mode 100644
index fec17dedca9..00000000000
--- a/chromium/docs/website/site/developers/testing/page-heap-for-chrome/index.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: page-heap-for-chrome
-title: Page Heap for Chromium
----
-
-Page Heap is a Windows mode to help identify memory errors, including those in
-third-party or OS supplied code. Application Verifier is a Windows mode that
-enables Page Heap and can also detect additional programming errors.
-
-When using Application Verifier on official builds of Chrome you need to add
-`--disable-features=RendererCodeIntegrity` to avoid sandbox crashes in renderer
-processes. See [crbug.com/1004989](https://crbug.com/1004989) for details.
-Application Verifier can be used on non-official developer builds, but you
-should probably close stable Chrome to avoid having it crash. See also [this
-page](/developers/how-tos/debugging-on-windows) for information on Application
-Verifier.
-
-### Enabling Page Heap
-
-1. One way of enabling page heap is using [Application
-Verifier](https://randomascii.wordpress.com/2011/12/07/increased-reliability-through-more-crashes/)
-(comes with the Windows Platform SDK, use X64 or WOW versions), which enables
-full page heap and also enables other checks. If you run Application Verifier
-you can enable the checks for chrome by using File-&gt; Add Application to add
-chrome.exe. Then open the Basics section and uncheck *Leak* and *SRWLock*, to
-avoid known failures that do not indicate real problems (see crbug.com/807500
-for details). You may also need to disable *Handles* and *Locks* depending on
-your graphics driver.
-
-For some builds (debug builds for sure) it is necessary to disable Basics-&gt;
-TLS due to aggressive TLS index range-checking done by v8.
-
-After adjusting these settings be sure to hit Save. Note that all chrome.exe
-process launches will be affected so you may want to shut down stable Chrome
-while testing to avoid confusing problems. You should make sure that Chrome has
-fully shut down.
-
-Page heap should always be used with a 64-bit version of Chrome to avoid address
-space exhaustion - every allocation takes a minimum of 4 KB of memory and at
-least 8 KB of address space.
-
-2. Another way to turn on page heap is using gflags, which is included in
-Windows Debugging Tools.It comes with the Debuggers package in the Windows SDK.
-If you're a Googler and use the depot_tools toolchain, there's a version in
-"depot_tools\\win_toolchain\\vs_files\\&lt;hash&gt;\\win_sdk\\Debuggers\\x64".
-
-Or add the SDK's Windows Debugging Tools to your path: "c:\\Program Files
-(x86)\\Windows Kits\\10\\Debuggers\\x64"
-
-3. Enable full page heap for a particular executable with this command:
-
-gflags.exe /p /enable chrome.exe /full
-
-This method doesn't seem to work anymore - it just says "No application has page
-heap enabled." and does nothing, so run gflags.exe and let the UI come up. Or
-use Application Verifier.
-
-If chrome gets too slow with full page heap turned on, you can enable it with
-normal page heap:
-
-gflags.exe /p /enable chrome.exe
-
-Tip: since you need to run this as administrator, it might be easiest if you
-right-click on your console program and select Run as administrator so that all
-operations in that shell are already privileged.
-
-See Background section for more information on page heap and gflags.
-
-### Disabling Page Heap
-
-To disable page heap when you're done, run:
-
-gflags.exe /p /disable chrome.exe
-
-### Background
-
-1. Page heap is Window built-in support for heap verification. There are two
-modes:
-
-- Full-Page heap places a non-accessible page at the end of the allocation.
-Full-page heap has high memory requirements. Its advantage is that a process
-will access violate (AV) exactly at the point of illegal memory operation.
-
-- Normal page heap checks fill patterns when the block gets freed. Normal page
-heap can be used for testing large-scale process without the high memory
-consumption overhead of full-page heap. However, normal page heap delays
-detection until the blocks are freed - thus failures are more difficult to
-debug.
-
-When an application foo.exe is launched, Windows looks up in
-"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution
-Options\\foo.exe" for page heap and other settings of the executable and acts
-accordingly.
-
-2. To turn on page heap for an executable, one just needs to modify the settings
-in registry. Gflags is a utility downloadable from Microsoft to edit settings
-under "Image File Execution Options".
-
-### Troubleshooting
-
-* Are you sure you're using the 32-bit version of gflags? If you use
- the 64-bit version, you won't get any error messages, but nothing
- will happen.
-* Are you sure you're using a 64-bit build of Chrome? The 32-bit
- version will run out of address space and spuriously fail with full
- page heap.
-* Are you debugging browser_tests? You might want to enable page heap
- for both browser_tests.exe and chrome.exe, or try running
- browser_tests with the --single-process flag. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/running-tests/index.md b/chromium/docs/website/site/developers/testing/running-tests/index.md
deleted file mode 100644
index 4d5a2f0bf1a..00000000000
--- a/chromium/docs/website/site/developers/testing/running-tests/index.md
+++ /dev/null
@@ -1,141 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: running-tests
-title: Running tests locally
----
-
-[TOC]
-
-## Running basic tests (gtest binaries)
-
-### Windows
-
-1. [Build](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/windows_build_instructions.md)
-2. Set the test as the startup project and press F5 to compile it.
-3. Or in a cmd window, run the test of interest in `src\chrome\Debug`,
- e.g. `src\chrome\Debug\base_unittests.exe`
-
-### Linux
-
-1. `cd` `src/`
-2. [Build](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/build_instructions.md)
-3. `Run the test of interest, e.g. ./out/Debug/base_unittests`
-
-Many unit tests create a chromium UI, which means they need the ability to
-create a visible window. To run these tests remotely in a terminal, or to keep
-them from opening windows in your current desktop session, you can run tests
-inside Xvfb. See "Running in headless mode" below.
-
-### **Chromium OS**
-
-You can't run browser tests or unit tests on actual Chrome OS devices or from
-within the cros chrome-sdk shell; instead, run them on a Linux system using a
-build directory with target_os="chromeos".
-
-1. gn gen out/Debug_chromeos/ -args='is_debug=true
- target_os="chromeos"'
-2. autoninja -C out/Debug_chromeos/&lt;test target&gt; (for instance,
- &lt;test target&gt; might be extensions_browsertests or
- base_unittests)
-3. out/Debug_chromeos/&lt;test target&gt; (for instance,
- out/Debug_chromeos/extensions_browsertests)
-
-### Mac
-
-1. [Build](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/mac_build_instructions.md)
- the tests: **ninja -C out/{Debug,Release} {test_target}**
-2. Run the appropriate test target:
- **./out/{Debug,Release}/{test_target}**
-
-## Running a particular subtest
-
-The above test executables are built with gtest, so they accept command line
-arguments to filter which sub-tests to run. For instance, `base_unittests
---gtest_filter=FileUtilTest.*`
-
-## Making tests show visible output
-
-Tests that create a visible window do not draw anything into the window by
-default, in order to run the test faster (with exception of tests that verify
-pixel output). To force tests to draw visible pixels for debugging, you can use
-the --enable-pixel-output-in-tests command-line flag. This can be used for both
-unit tests and browser tests.
-
-## Web tests
-
-Blink has a large suite of tests that typically verify a page is laid out
-properly. We use them to verify much of the code that runs within a Chromium
-renderer.
-To run these tests, build the blink_tests target and then run
-third_party/blink/tools/run_web_tests.py --debug .
-
-More information about running web tests or fixing web tests can be found on the
-[**Web Tests
-page**](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_tests.md).
-
-## **Unit tests and Browser tests**
-
-Most top-level directories of src/ have a unit test build target, such as
-`content_unittests` for `content/`, `cc_unittests` for `cc/`, and
-`components_unittests` for `components/`
-
-There is also the fallback `unit_tests` target for unit tests built on top of
-the full chrome stack.
-
-Unit tests verify some part of the chromium code base in an isolated test
-environment, and are usually found in files with a `_unittest.cc` suffix.
-Browser tests run a full browser, and then execute a test inside the browser
-instance, and are usually found in files with a `_browsertest.cc` suffix. There
-is more information on browser tests [here](/developers/testing/browser-tests).
-To add a new test, you will generally find a similar test and clone it. If you
-can, strongly prefer writing a unit test over a browser test as they are
-generally faster and more reliable.
-
-## Get dumps for Chromium crashes on Windows
-
-Before running the tests, make sure to run `crash_service.exe`. We use this
-program to intercept crashes in chromium and write a crash dump in the Crash
-Reports folder under the User Data directory of your chromium profile.
-
-If you also want `crash_service.exe` to intercept crashes for your normal Google
-Chrome or Chromium build, add the flag `--noerrdialogs`.
-
-You can also use the flag `--enable-dcheck` to get assertion errors in release
-mode.
-
-## Running in headless mode with `--ozone-platform` or xvfb
-
-When ssh-ed in to a machine, you don't have a display connected, which means
-that you normally can't run tests. Some tests don't need to draw to the screen,
-and for them you can simply add `--ozone-platform=headless` to your command
-line. For the others, you can run tests in headless mode with xvfb (X Virtual
-Frame Buffer). There are multiple ways to run tests with xvfb!
-
-Example with unittests and testing/xvfb.py (note: you will need to install
-xcompmgr, although this is done as part of install-build-deps.py)
-
-testing/xvfb.py out/Default/component_unittests
-
-Example with browser tests and running Xvfb and setting the DISPLAY env
-variable.
-
-Xvfb.py :100 -screen 0 1600x1200x24 &
-DISPLAY=localhost:100 out/Default/browser_tests
-
-Third example, with xvfb-run:
-
-xvfb-run -s "-screen 0 1024x768x24" out/Default/content_unittests
-
-## **Run tests 5x faster on gLinux**
-
-Browser tests on gLinux start up extremely slowly due to idiosyncratic NSS
-configurations. If you need to regularly run browser tests on gLinux, consider
-using the run_with_dummy_home.py helper script:
-
-testing/run_with_dummy_home.py testing/xvfb.py out/Default/browser_tests
-
-This can speed tests up by 5x or more. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/threadsanitizer-tsan-v2/index.md b/chromium/docs/website/site/developers/testing/threadsanitizer-tsan-v2/index.md
deleted file mode 100644
index aa7625e3fa5..00000000000
--- a/chromium/docs/website/site/developers/testing/threadsanitizer-tsan-v2/index.md
+++ /dev/null
@@ -1,233 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: threadsanitizer-tsan-v2
-title: ThreadSanitizer (TSan) v. 2
----
-
-ThreadSanitizer v2 is a synchronization error detector based on compiler
-instrumentation. It is also capable of detecting other threading errors like
-deadlocks, unjoined threads, destroying locked mutexes, use of async-signal
-unsafe code in signal handlers, and others.
-
-You may have heard of the old Valgrind-based version of ThreadSanitizer, but
-TSan v2 has a brand new state machine and has nothing to do with Valgrind. The
-old ThreadSanitizer is deprecated in Chromium.
-
-ThreadSanitizer v2 is only supported on Linux so far.
-
-### Building Chromium with ThreadSanitizer
-
-Set up a GN build by typing gn gen out/tsan && gn args out/tsan (use a directory
-name of your choice). Enter these variables in the resulting editor:
-
-> is_tsan = true
-
-> enable_nacl = false
-
-> is_debug = false
-
-Then build like normal with ninja -C out/tsan base_unittests
-
-In GYP:
-
-> `GYP_GENERATORS=ninja GYP_DEFINES='tsan=1 disable_nacl=1 use_goma=1' gclient
-> runhooks`
-
-> `ninja -C out/Release base_unittests`
-
-**Note:** TSan builds with libc++ by default (the `use_custom_libcxx=1` GYP
-flag). If your tests fail under TSan, make sure you're not relying on some
-unspecified libstdc++ behavior.
-
-export
-TSAN_OPTIONS="external_symbolizer_path=third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer"
-
-out/Release/base_unittests --no-sandbox 2&gt;&1 | tee log
-
-Running Chrome may require additional options:
-
-`TSAN_OPTIONS="atexit_sleep_ms=200 flush_memory_ms=2000 $TSAN_OPTIONS"
-out/Release/chrome --no-sandbox` 2&gt;&1 | tee log
-
-atexit_sleep_ms is 1 second by default. Some tests waiting for child processes
-may fail with such a big timeout.
-
-Tests with big memory footprint may hang your machine, so you need to flush
-periodically (flush_memory_ms) and skip heavy tests (like OOM)
-
-flush_memory_ms may lead to false negatives, thus the flushing period should be
-chosen carefully.
-
-If TSan fails to restore one of the stacks, try adding history_size=7 to
-TSAN_OPTIONS (the amount of memory reserved for the stacks is proportional to
-2^history_size, 7 is the maximum value).
-
-**Note:** --no-sandbox is essential if you're running Chrome or tests that
-invoke Chrome (browser_tests, content_browsertests etc.).
-
-**Note 2:** due to <http://crbug.com/341805> you may need to run Chrome with
---disable-gpu or use xvfb-run.
-
-**Note 3:** running the test multiple times in a row (--gtest_repeat=5) may
-increase the reproducibility of the races.
-
-**Note 4:** the following env variables control the behavior of libnss and
-libglib. Setting them is optional in most cases, but may help if you're seeing
-strange reports in the library code:
-
-export G_SLICE=always-malloc
-
-export NSS_DISABLE_ARENA_FREE_LIST=1
-
-export NSS_DISABLE_UNLOAD=1
-
-**Note 5:** As of November 2018, the commands above don't symbolize the stack
-trace. Pipe the output through the ASAN symbolize script, e.g.:
-
-out/Release/base_unittests --no-sandbox 2&gt;&1 |
-tools/valgrind/asan/asan_symbolize.py
-
-### Disabling tests
-
-Unlike Valgrind, ThreadSanitizer v2 doesn't support gtest filter files. Instead
-of adding a test name to a blocklist you should disable the test in the code
-under #if defined(THREAD_SANITIZER).
-
-### Suppressing race reports
-
-The default ThreadSanitizer v2 suppressions reside in
-build/sanitizers/tsan_suppressions.cc and are automatically linked to every
-executable in Chromium.
-
-You can supply additional suppressions by adding
-`suppressions=/path/to/suppressions.txt` to `TSAN_OPTIONS`.
-
-The examples below refer to plain-text suppressions files, the format of
-`tsan_suppressions.cc` is almost the same.
-
-ThreadSanitizer data race report contains two or more stack traces of
-conflicting memory accesses (the topmost access is the last one) together with
-the thread IDs and the acquired mutexes.
-
-For a global variable involved its name is printed, stack or heap memory
-locations are described using the allocation stack trace.
-
-When applicable, the stack traces of thread creations and mutex acquisitions are
-also listed.
-
-```none
-WARNING: ThreadSanitizer: data race (pid=22215)
-  Write of size 4 at 0x7f8a8f1d99ec by thread T11:
-    #0 New v8/src/zone-inl.h:66 (content_browsertests+0x000001568815)
-    #1 zone v8/src/zone-inl.h:98 (content_browsertests+0x000001568815)
-    #2 v8::internal::Parser::ParseLazy(v8::internal::Utf16CharacterStream*, v8::internal::ZoneScope*) v8/src/parser.cc:743 (content_browsertests+0x000001568815)
-  Previous write of size 4 at 0x7f8a8f1d99ec by thread T8:
-    #0 New v8/src/zone-inl.h:66 (content_browsertests+0x0000013e5568)
-    #1 zone v8/src/zone-inl.h:98 (content_browsertests+0x0000013e5568)
-    #2 v8::internal::HGraphBuilder::CreateGraph() v8/src/hydrogen.cc:951 (content_browsertests+0x0000013e5568)
-    #3 DoGenerateCode<v8::internal::FastCloneShallowArrayStub> v8/src/code-stubs-hydrogen.cc:288 (content_browsertests+0x0000012cb218)
-    #4 v8::internal::FastCloneShallowArrayStub::GenerateCode() v8/src/code-stubs-hydrogen.cc:355
-
-  Location is global 'v8::internal::Zone::allocation_size_' of size 4 at 7f8a8f1d99ec (content_browsertests+0x0000063c69ec)
-```
-
-Each suppression is a one line of the form "suppression_type:pattern". The most
-common suppression type is "race", see
-<https://github.com/google/sanitizers/wiki/ThreadSanitizerSuppressions> for
-other suppression types.
-
-The pattern is matched against:
-
-* function name/file name/module of each frame in the stack trace of
- each conflicting memory access
-* global variable name (if present)
-
-The pattern may contain the wildcard ('\*') symbol which matches any substring.
-'\*' is automatically prepended to each pattern unless it starts with '^'.
-'\*' is automatically appended to each pattern unless it ends with '$'.
-
-Good suppressions match a single race report (or a number of reports with a
-common root cause), but are unlikely to mask further races in other components.
-
-A suppression must be preceded by a comment (started with a "#") with a crbug
-link.
-
-Examples of good suppressions for the above race report:
-
-```none
-# Suppresses other races in zone-inl.h as well.
-race:v8/src/zone-inl.h
-# Effectively the same as "v8/src/zone", but more verbose.
-race:v8/src/zone*
-# You can also suppress globals.
-race:v8::internal::Zone::allocation_size_
-# Ok, but won't match calls to zone() from other places.
-race:FastCloneShallowArrayStub::GenerateCode
-```
-
-Examples of bad suppressions:
-
-```none
-# Watch out - may match other functions called "New".
-race:^New$
-# Function arguments may change over time, better omit them.
-race:v8::internal::Parser::ParseLazy(v8::internal::Utf16CharacterStream*, v8::internal::ZoneScope*)
-# Same as "*New*", which will match a ton of other functions.
-race:New
-# Will suppress everything in content_browsertests.
-race:content_browsertests
-# Too generic.
-race:base::MessageLoop::Run
-```
-
-More info on the suppressions format is available at
-<https://code.google.com/p/thread-sanitizer/wiki/Suppressions>.
-
-The possible suppression prefixes are: "race:" (for data races and
-use-after-free reports), "thread:" (for thread leaks), "mutex:", "signal:",
-"deadlock:" (for lock-order-inversion reports).
-
-You can also disable interceptors in a particular library using the
-"called_from_lib:libfoo.so" suppression prefix.
-
-### Reproducing race reports in tests
-
-Before trying to reproduce a race report in a Chromium test, make sure they are
-not suppressed or ignored.
-
-**Suppressions** from build/sanitizers/tsan_suppressions.cc (as well as those
-passed via TSAN_OPTIONS) are applied at program runtime. If the race report
-matches a line in the suppressions file, TSan does not print that report.
-
-**Ignores** from tools/memory/tsan_v2/ignores.txt are applied at compile time.
-If the function name matches a "fun:" line in the ignores file, TSan does not
-instrument that function, effectively ignoring all memory accesses (but not
-synchronization) in that function. If the source file name matches an "src:"
-line, every function in that file is ignored. Note that the tests do not depend
-on ignores.txt, so you need to touch all the affected source files manually
-before rebuilding (or make a clean build) after any change to `ignores.txt`.
-
-### Debugging with GDB
-
-You can't execute an instrumented binary from GDB, because it maps something in
-the place where TSan needs to map its shadow:
-
-```none
-FATAL: ThreadSanitizer can not mmap the shadow memory (something is mapped at 0x555555554000 < 0x7cf000000000)
-```
-
-However you can attach GDB to a running TSan process. If you have troubles
-catching a particular process, try to run with `TSAN_OPTIONS=stop_on_start=1`.
-
-Every subprocess will print the following line:
-
-```none
-ThreadSanitizer is suspended at startup (pid 20492). Call __tsan_resume().
-```
-
-In order to proceed, you'll have to run `gdb -p 20492` and type `call
-__tsan_resume()`. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/time-complexity-tests/index.md b/chromium/docs/website/site/developers/testing/time-complexity-tests/index.md
deleted file mode 100644
index ac88b27a16a..00000000000
--- a/chromium/docs/website/site/developers/testing/time-complexity-tests/index.md
+++ /dev/null
@@ -1,384 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: time-complexity-tests
-title: Time Complexity Tests
----
-
-[TOC]
-
-**HISTORICAL (documentation)**
-
-**Removed in [crrev.com/1149253002](http://crrev.com/1149253002)
-([crbug.com/488986](http://crbug.com/488986)).**
-
-Time complexity tests verify the order of growth of time complexity *T*(*n*) for
-various operations, generally verifying that this is *O*(1) or *O*(*n*), rather
-than *O*(*n*2), say.
-
-These are a form of performance test (see [Adding Performance
-Tests](/developers/testing/adding-performance-tests)), but since they have a
-binary answer (satisfies the bound or doesn't), and we are concerned with the
-overall growth, not the absolute speed, they are instead technically in the
-Blink [Layout Tests](/developers/testing/webkit-layout-tests), and produce
-PASS/FAIL.
-
-These are **potentially flaky,** and layout test failures **break the CQ,** so
-*please take extra care in testing and committing these.*
-
-Tests consist of:
-
-* Description of what you are testing, and relevant bug or bugs.
-* Function whose runtime you are testing.
-* Test parameters for what range you assert the growth rate holds, and
- with what tolerance.
-
-### Test format
-
-These tests are written in JavaScript, and stored in the `LayoutTests/perf`
-directory in the Blink tree (as of 2013-April). The library that these tests use
-is
-`[LayoutTests/resources/magnitude-perf.js](http://src.chromium.org/viewvc/blink/trunk/LayoutTests/resources/magnitude-perf.js)`.
-
-Tests take this form:
-
-```none
-<!DOCTYPE html>
-<script src="../resources/magnitude-perf.js"></script>
-<script>
-if (window.testRunner)
-    testRunner.dumpAsText();
-function setupFoo(magnitude)
-{
-    // ...
-}
-function testFoo(magnitude)
-{
-    // ...
-}
-Magnitude.description('Verifies that fooing is linear in the number of bars. See http://crbug.com/42');
-Magnitude.initialExponent = 0;
-Magnitude.numPoints = 10;
-Magnitude.trim = 1;
-Magnitude.tolerance = 0.10;
-Magnitude.run(setupFoo, testFoo, Magnitude.LINEAR);
-</script>
-```
-
-You can have several tests in the same file (they should be related); simply
-have several `run` commands, each of which can have different parameters.
-[`class-list-remove.html`](http://src.chromium.org/viewvc/blink/trunk/LayoutTests/perf/class-list-remove.html)
-is a good example with two tests in one file.
-
-### Test parameters
-
-You can set some test parameters, specifying what range of magnitudes to test
-and how strict the tests should be. This is optional, but generally necessary.
-This is because the tests default to quite strict tolerances, and start testing
-from *n* = 1, which is usually too low, since constant terms often dominate for
-low *n*.
-
-The design reason for requiring parameters is to make the data of "over what
-range and to what tolerance the growth rate holds" an intrinsic part of the
-test: by specifying these parameters, someone reading the test file can see at a
-glance how big input needs to be to be "close enough to infinity", and how noisy
-the data is.
-
-You can also specify more trials, or a different cutoff for overall success, but
-this is generally not necessary.
-
-#### Calibration procedure
-
-To set the parameters:
-
-* figure out size – over what range is the growth rate valid: from 20
- to 210? 28 to 212?
-* figure out noisiness and tolerance – how many outliers are trimmed
- before computing the statistic (`trim`), and what percent deviation
- from a perfect fit is allowed (`tolerance`)?
-* test locally and on [try bots](/developers/testing/try-server-usage)
-* revise parameters
-* test again
-* You're shooting for parameters that are lax enough to never fail
- with current code and bots, but that will fail if code regresses
-
-When committing, safest is to:
-
-* Initially list the test in TestExpectations as flaky (even after
- using your best guesses for parameters; can use bug number for which
- you are writing the test in below):
-
-```none
-crbug.com/123 [ Release ] perf/foo.html [ Pass Failure ]
-```
-
-* ...then keep an eye on it in the [flakiness
- dashboard](/developers/testing/flakiness-dashboard) (specifically,
- filter by
- [^perf/](http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=%5Eperf%2F),
- or more narrowly your specific test) for a few days after
- committing.
-* If there are flaky failures, post a follow-up patch updating
- parameters.
-* Once reliably passes, post a final patch removing the line from
- TestExpectations, turning on the test for real.
-
-It is ok, and often a good idea, to add a bit of a margin of error (or extra
-test runs) if you're concerned about false alarms, but be careful to not make
-the test so lax that it always passes. The test should fail if something changes
-for the worse; that's what it's there for.
-
-#### Common parameters
-
-You will primarily vary the parameters `initialExponent, numPoints, trim,` and
-`tolerance.` For example:
-
-```none
-Magnitude.initialExponent = 0;
-Magnitude.numPoints = 10;
-Magnitude.trim = 1;
-Magnitude.tolerance = 0.10;
-```
-
-This means:
-
-* start with **initial** *n* = 20;
-* run for 10 **points** (magnitudes), so up to *n* = 20 + (10 − 1) =
- 29;
-* **trim** off the 1 most extreme value (we use [trimmed
- estimators](http://en.wikipedia.org/wiki/Trimmed_estimator), meaning
- "discard some outliers", to deal with noise);
-* succeed if data is within 10% **tolerance** of perfect fit.
-
-#### Full list
-
-The parameters are as follows:
-
-*Range of magnitudes*
-
-* `Magnitude.initialExponent` – start at *n* = 2*k* (initialExponent)
-* `Magnitude.numPoints` – run for 2*k*, 2*k* +1, 2*k* + 2, ... 2*k* +
- (numPoints − 1)
-
-*You will usually need to modify these, as for low magnitudes low order terms
-(especially constants) often dominate, obscuring the high order terms (linear,
-quadratic, exponential) that we're interested in, but we don't want to test for
-220 to 230, say, both because this is slow, and has noise from memory management
-once you get this big. Usually around 28 to 215 is a good range, but it varies.*
-
-*Overall success*
-
-* `Magnitude.numTrials` – run test (for whole range of magnitudes)
- numTrial times
-* `Magnitude.successThreshold` – percentage of trials that must
- succeed for overall test to succeed
-
-Usually leaving these at defaults (3 trials, 50% success threshold) is fine, and
-instead modify statistical parameters (trim and tolerance).
-
-You generally want an odd number of trials, so you can use majority rule:
-
-> "Never go to sea with two chronometers; take one or three."
-
-> > (quoted in Fredrick Brooks, *The Mythical Man-Month*, p. 64),
-
-and 3 trials is usually enough.
-
-50% (majority rule) optimizes the overall trade-off between [sensitivity and
-specificity](http://en.wikipedia.org/wiki/Sensitivity_and_specificity) (true
-positive rate and true negative rate). If you have the same rate for both, the
-complimentary rates (false negative rate and false positive rate) are attenuated
-linearly (as powers, i.e., on the log scale) in number of trials needed for
-success/failure. By "linear attenuation" we mean like "decreasing decibels of
-noise": if false negative rate is *α* and false positive rate is *β,* then
-requiring *j* successes for overall success or *k* = (*n* − *j*) + 1 failures
-for overall failure makes the false negative rate approximately (ignoring
-constant factor) *αj* and false positive rate approximately *βk*, which in log
-terms is *j* log *α* and *k* log *β*. For *n* = 3 and requiring 2 successes for
-overall success (hence 2 failures for overall failure), this doubles the
-attenuation of the false negative and false positive rate, which is usually
-enough.
-
-In rare circumstances you may want to change these:
-
-* Increase numTrials to increase power if either high false negative
- rate or high false positive rate;
-* decrease successThreshold if very noisy test (lacks specificity), so
- 2 successes out of 5 trials enough, say;
-* increase successThreshold if test not sensitive enough but very
- reliable, so 4 out of 5 trials needed, say.
-
-It's ok to use an even number of trials if you change the success threshold,
-since you no longer want the same trade-off between sensitivity and specificity.
-
-*Run time*
-
-* `Magnitude.millisecondsPerRun` – how long each run (at a specific
- magnitude *n*) runs
-
-At each magnitude, the test is run until this time is used up, then averaged.
-You can increase this if you have a slow test, or at running at high magnitudes
-where you're not getting enough iterations to get a good average. Consider if
-you can instead decrease the maximum magnitude.
-
-*Statistical parameters*
-
-* `Magnitude.trim` – number of extreme values to trim ([trimmed
- estimator](http://en.wikipedia.org/wiki/Trimmed_estimator))
-* `Magnitude.tolerance` – succeed if data is within this percentage of
- model (perfect fit); formally, if maximum deviation is less than
- this threshold.
-
-Given the times for all magnitudes, the test statistic (see below) is computed
-by first trimming the most extreme values (basically outliers in the times,
-actually derived values like ratio between successive times), then computed and
-checked against the tolerance. These default to quite strict values – no trim
-and 5% tolerance – which are quite safe, but usually too strict. You will thus
-need to relax them and specify how far from model the actual data is. Common
-reasonable values include:
-
-```none
-trim = 1; tolerance = 0.10;
-trim = 2; tolerance = 0.20;
-```
-
-Beware of trimming too much, as you're effectively reducing `numPoints`!
-
-Larger tolerances are ok when testing for *O*(1) – even values of 100% or more
-are ok if you're only interested in checking that it's not linear or worse
-(rather than not log) – but if you start getting to 50% (at which point you're
-not rejecting *O*(log *n*)), you have very noisy data.
-
-### Interpreting output
-
-For linear and polynomial tests – *O*(*n*) and *O*(*n*2) – the key numbers to
-look at are the log-ratios (base 2), which are effectively the exponent of the
-order of growth at that step. Thus for linear growth this should be almost 1,
-while for quadratic or greater growth it should be 2 or more.
-
-For example, given the following data:
-
-```none
-log-ratios (base 2):
-0.44961898695576596,1.4623608881897614,2.432344314952156,2.5037162001090283,1.9487150784480256,1.2812301235421082
-Maximum Absolute Deviation: 1.5037162001090283
-```
-
-...rounding yields:
-
-```none
-log-ratios (base 2):
-0.45,1.46,2.43,2.50,1.95,1.28
-Maximum Absolute Deviation: 1.50
-```
-
-...so we see that at first it grows slowly (.45), then super-linearly (1.46),
-then superquadratically (2.43, 2.50, 1.95 is close), then slows down but still
-superlinear (1.28), and overall it deviates substantially from linear (2.50
-differs from ideal of 1.00 by 1.50, which is the Maximum Absolute Deviation).
-This is an extreme case (normally there'll be a trend), but shows that this
-growth isn't linear over this range of inputs.
-
-### Testing procedure
-
-The code at
-`[magnitude-perf.js](http://src.chromium.org/viewvc/blink/trunk/LayoutTests/resources/magnitude-perf.js)`
-is of course the ultimate reference.
-
-You can get very detailed diagnostics and intermediate calculations by running
-in the TestRunner (?), or setting an invalid expectation (e.g., expecting
-CONSTANT for data you expect to be LINEAR).
-
-In outline, testing proceeds as follows.
-
-We time the run time of the tested function at exponentially spaced magnitudes,
-e.g., 20, 21, 22, 23, ....
-
-We then verify if these times look like the time complexity we're expecting
-(constant, linear, or polynomial (quadratic or greater)).
-
-Tests are [robust](https://en.wikipedia.org/wiki/Robust_statistics),
-[non-parametric](https://en.wikipedia.org/wiki/Non-parametric_statistics)
-statistical tests, since timing is noisy (so need to be robust), and noise can
-take various forms (so non-parametric, since no particular model of noise).
-
-In more detail:
-
-* Perform the test (across all magnitudes) numTrials number of times.
-* During each trial, for each magnitude, compute the run time.
-* To compute the run time, run the test function repeatedly, until
- millisecondsPerRun is up, then divide total run time by number of
- iterations completed.
-* Check that we haven't hit a delay at the end of the test run (if
- overrun allotted time by more than a full run time), and if so,
- retry a few times to reduce noise (if possible)
-* Given the data, perform a statistical test (see below), returning
- either success or failure.
-* After all trials are done, check if ratio of successes meets
- successThreshold, and return overall PASS or FAIL.
-
-#### Statistical tests
-
-Tests are all of the form: "use
-[trimmed](http://en.wikipedia.org/wiki/Trimmed_estimator) [maximum absolute
-deviation](http://en.wikipedia.org/wiki/Maximum_absolute_deviation) (from model)
-as [test statistic](http://en.wikipedia.org/wiki/Test_statistic)", meaning
-"compare this value against tolerance, and succeed if error doesn't exceed
-tolerance". In detail:
-
-* Compute absolute deviations from model (e.g., for constant, compare
- each time against the median; ideally these would all be equal) –
- this is the first non-parametric part
-* Trim: discard `trim` number of extreme values – this is the robust
- part
-* Compare max of remaining to `tolerance` – this is the second
- non-parametric part – and pass if and only if within tolerance.
-
-For constant, this compares each value against the median.
-
-(If deviation from median is only 20% or 30% as you vary *n* from 1 to 1,024,
-any linear or higher term is very small.)
-
-For linear and polynomial (quadratic or more), at each step, check what doubling
-the input does to the time – for linear it should double it, while for
-polynomial it should quadruple it or more. Taking log (base 2), this says the
-log of ratios of successive times (equivalently, difference of successive logs)
-should be 1 (linear) or more than 2 (quadratic or more).
-
-This is effectively looking at slope of successive steps on the [log-log
-scale](http://en.wikipedia.org/wiki/Log-log_plot), as the slope of a monomial on
-the log-log scale is its exponent.
-
-These are simple tests, not sophisticated ones (we're not doing robust
-non-parametric linear regressions on the log-log scale, say), but they are thus
-transparent, and should be sufficient. More sophisticated tests that are still
-easily implemented include doing Ordinary Least Squares (OLS) on the log-log
-scale, and doing this iteratively (discarding point with greatest residual and
-repeating).
-
-### Caveats
-
-When writing tests, watch out for:
-
-* **too strict** parameters – yields false positives, setting off
- false alarms and breaking the commit queue
-* **too lax** parameters – yields false negatives, missing regressions
-* **slow tests** – these tests are inevitably somewhat slow, because
- they're asymptotic behavior (hence large values of input); avoid
- *unnecessary* slowness (can you test up to a smaller maximum value?)
-* **slow setup** – beyond the test itself, the setup can cause
- overhead. E.g., when testing for *O*(*n*) growth, it's easy to do
- *O*(*n*) work *n* times during setup, which yields a test with
- *O*(*n*2) startup time!
-* **large magnitudes** – at large magnitudes (often around 215 or
- 220), memory management starts to add measurable noise, specifically
- V8 garbage collection. This is often small relative to linear growth
- though, but can be significant when checking for constant growth.
-* **noisy tests** – some functions are simply noisy; if noise is
- constant or small relative to time of test, signal-to-noise
- increases and noise is small at large magnitudes. However, when
- checking for *O*(1) performance, noise isn't offset by growing
- signal and may even increase with increasing magnitude. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/try-server-usage/index.md b/chromium/docs/website/site/developers/testing/try-server-usage/index.md
deleted file mode 100644
index 6036e5c6111..00000000000
--- a/chromium/docs/website/site/developers/testing/try-server-usage/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: try-server-usage
-title: Try Server usage
----
-
-[This page has
-moved.](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/infra/trybot_usage.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/undefinedbehaviorsanitizer/index.md b/chromium/docs/website/site/developers/testing/undefinedbehaviorsanitizer/index.md
deleted file mode 100644
index 46a9baa78b6..00000000000
--- a/chromium/docs/website/site/developers/testing/undefinedbehaviorsanitizer/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: undefinedbehaviorsanitizer
-title: UndefinedBehaviorSanitizer (UBSan)
----
-
-UndefinedBehaviorSanitizer (UBSan) is a fast undefined behavior detector
-implemented in Clang and Compiler-rt. Various computations will be instrumented
-to detect undefined behavior at runtime.
-
-For now, only 64-bit Linux platform is tested. Various compile flags to use
-UBSan is available at
-<http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation>.
-
-### Building Chromium with UBSan
-
-UBSan builds are experimentally supported by Chromium, and can be built as
-below. is_ubsan=true automatically enforces to use Clang as a build compiler.
-Please note that is_ubsan=true excludes -fsanitize=vptr, which is also part of
-the undefined behavior sanitizer.
-
-```none
-gn args out/ubsan
-# set is_ubsan = true
-# set is_debug = false
-ninja -C out/ubsan chrome
-```
-
-To use -fsanitize=vptr, the is_ubsan_vptr options can be used. is_ubsan_vptr
-loads the blocklist from src/tools/ubsan_vptr/ignorelist.txt.
-
-```none
-gn args out/ubsan
-# set is_ubsan_vptr = true
-ninja -C out/ubsan chrome
-```
-
-Pre-built Chrome binaries are available at
-http://commondatastorage.googleapis.com/chromium-browser-ubsan/index.html?prefix=linux-release-vptr/
-
-### Runtime Flags
-
-UBSan also supports common runtime flags with UBSAN_OPTIONS like other
-sanitizers. Followings are UBSan specific runtime flags.
-
-* print_stacktrace : print the stacktrace when UBSan reports an error.
-* suppressions : suppress an error report at runtime. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/webgl-conformance-tests/index.md b/chromium/docs/website/site/developers/testing/webgl-conformance-tests/index.md
deleted file mode 100644
index 0497be01c71..00000000000
--- a/chromium/docs/website/site/developers/testing/webgl-conformance-tests/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: webgl-conformance-tests
-title: WebGL Conformance Tests
----
-
-Chromium's physical GPU bots run [Khronos' WebGL conformance
-tests](https://github.com/KhronosGroup/WebGL) as part of all continuous and
-pre-integration testing for the browser. Instructions previously hosted here
-became obsolete, so please consult the following two sections for details on
-these tests:
-
-[Reproducing WebGL conformance test failures
-locally](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gpu/pixel_wrangling.md#Reproducing-WebGL-conformance-test-failures-locally)
-
-[Running the GPU Tests
-Locally](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gpu/gpu_testing.md#Running-the-GPU-Tests-Locally) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/webkit-layout-tests/content-shell/index.md b/chromium/docs/website/site/developers/testing/webkit-layout-tests/content-shell/index.md
deleted file mode 100644
index 9e19ecfccf8..00000000000
--- a/chromium/docs/website/site/developers/testing/webkit-layout-tests/content-shell/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/webkit-layout-tests
- - Web Tests
-page_name: content-shell
-title: Running web tests using the content shell
----
-
-This content now lives at
-[docs/testing/web_tests_in_content_shell.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_tests_in_content_shell.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/webkit-layout-tests/identifying-tests-that-depend-on-order/index.md b/chromium/docs/website/site/developers/testing/webkit-layout-tests/identifying-tests-that-depend-on-order/index.md
deleted file mode 100644
index 93a8d0dbb09..00000000000
--- a/chromium/docs/website/site/developers/testing/webkit-layout-tests/identifying-tests-that-depend-on-order/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/webkit-layout-tests
- - Web Tests
-page_name: identifying-tests-that-depend-on-order
-title: Fixing web test flakiness
----
-
-This content now lives at
-[docs/testing/identifying_tests_that_depend_on_order.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/identifying_tests_that_depend_on_order.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/webkit-layout-tests/index.md b/chromium/docs/website/site/developers/testing/webkit-layout-tests/index.md
deleted file mode 100644
index 7b457597318..00000000000
--- a/chromium/docs/website/site/developers/testing/webkit-layout-tests/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: webkit-layout-tests
-title: Web Tests
----
-
-This content now lives at
-[docs/testing/web_tests.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_tests.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/webkit-layout-tests/testexpectations/index.md b/chromium/docs/website/site/developers/testing/webkit-layout-tests/testexpectations/index.md
deleted file mode 100644
index 185b731dc25..00000000000
--- a/chromium/docs/website/site/developers/testing/webkit-layout-tests/testexpectations/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/webkit-layout-tests
- - Web Tests
-page_name: testexpectations
-title: Web Test Expectations and Baselines
----
-
-This content now lives at
-[docs/testing/web_test_expectations.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_test_expectations.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/webkit-layout-tests/using-breakpad-with-content-shell/index.md b/chromium/docs/website/site/developers/testing/webkit-layout-tests/using-breakpad-with-content-shell/index.md
deleted file mode 100644
index ada81b452c1..00000000000
--- a/chromium/docs/website/site/developers/testing/webkit-layout-tests/using-breakpad-with-content-shell/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-- - /developers/testing/webkit-layout-tests
- - Web Tests
-page_name: using-breakpad-with-content-shell
-title: Using breakpad with content shell
----
-
-This content now lives at
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/using_breakpad_with_content_shell.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/testing/windows-installer-tests/index.md b/chromium/docs/website/site/developers/testing/windows-installer-tests/index.md
deleted file mode 100644
index 6323774d611..00000000000
--- a/chromium/docs/website/site/developers/testing/windows-installer-tests/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/testing
- - Testing and infrastructure
-page_name: windows-installer-tests
-title: Windows Installer Tests
----
-
-## About
-
-The mini_installer_tests build step is a full lifecycle test of Chrome's Windows
-installer. The test does variations along the following theme:
-
-* Ensure the machine is in a sufficiently clean state such that Chrome
- can be installed.
-* Install Chrome.
-* Verify various state on the machine to validate that the installer
- succeeded.
-* Launch Chrome.
-* Verify that something resembling a browser window opens.
-* Quit Chrome.
-* Verify that all Chrome processes go away.
-* Uninstall Chrome.
-* Verify that various state on the machine is no longer present.
-
-## Diagnosing Failures
-
-The task output should show detailed installer and Chrome logs in case of
-failure.
-
-## Running the Tests Locally
-
-First build the mini_installer_tests target. The simplest way to run the test
-suite (from an elevated cmd prompt) is to first cd into your build output
-directory and then run the tests like so:
-
-vpython ..\\..\\chrome\\test\\mini_installer\\run_mini_installer_tests.py
-\[test_name\]
-
-Specify individual test names as, for example:
-installer_test.InstallerTest.test_ChromeUserLevel.
-
-Run it with --help for more options. Note that you should use the vpython that
-comes with [depot_tools](/developers/how-tos/install-depot-tools) as other
-versions might not work.
-
-## Questions
-
-Contact grt at chromium dot org. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/the-json-test-results-format/index.md b/chromium/docs/website/site/developers/the-json-test-results-format/index.md
deleted file mode 100644
index 9ca92653940..00000000000
--- a/chromium/docs/website/site/developers/the-json-test-results-format/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: the-json-test-results-format
-title: The JSON Test Results Format
----
-
-This has been moved to
-[//docs/testing/json_test_results_format.md](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/json_test_results_format.md) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/the-rendering-critical-path/index.md b/chromium/docs/website/site/developers/the-rendering-critical-path/index.md
deleted file mode 100644
index 25def78e21f..00000000000
--- a/chromium/docs/website/site/developers/the-rendering-critical-path/index.md
+++ /dev/null
@@ -1,273 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: the-rendering-critical-path
-title: The Rendering Critical Path
----
-
-author: wiltzius@
-
-[TOC]
-
-### Rendering Architecture in Brief
-
-To understand the symptoms and potential causes of jank, it's important to have
-a basic understanding of the browser's rendering pipeline. This article will
-briefly describe that pipeline assuming knowledge of the web platform but no
-knowledge of how the rendering engine works, with links to relevant design docs
-for more info.
-
-This article is adapted from a similar section in [Using Frame Viewer to Bust
-Jank](/developers/how-tos/trace-event-profiling-tool/using-frameviewer). It goes
-into greater detail, but doesn't cover any examples. See that document for a
-more illustrated version of this process, which annotates a trace of an example
-style modification.
-
-We'll focus on how the page is rendered *after* page load -- that is, how the
-browser handles screen updates in response to user input and JavaScript changes
-to the DOM. Rendering when loading a page is slightly different, as compromises
-to visual completeness are often made in order to get some content to appear
-faster; this is out of scope for this document which will focus on *interactive*
-rendering performance.
-
-Much more detail about the specifics of how rendering inside of Blink works
-(i.e. the style, layout, and Blink paint systems), as well as a (somewhat dated)
-discussion of how it might evolve, can be found in the [Rendering Pipeline
-doc](https://docs.google.com/a/chromium.org/document/d/1wYNK2q_8vQuhVSWyUHZMVPGELzI0CYJ07gTPWP1V1us/edit#heading=h.6cdy1o585rsa).
-This document is intended to be more descriptive, higher-level, and include the
-related input and compositing systems.
-
-### The Critical Rendering Path
-
-After loading, the page changes in response to two inputs: user interaction
-mediated by the user agent (default pressed button styles, scrolling,
-pinch/zooming, etc) and updates to the DOM made by JavaScript. From there, a
-cascade of effects through several rendering sub-systems eventually produces new
-pixels on the user’s screen.
-
-The main subsystems are:
-
- Input handling \[technically not related to graphics per se, but
- nevertheless critical for many interactions\]
-
- Parsing, which turns a chunk of HTML into DOM nodes
-
- Style, which resolves CSS onto the DOM
-
- Layout, which figures out where DOM elements end up relative to one another
-
- Paint setup, sometimes referred to as recording, which converts styled DOM
- elements into a display list (SkPicture) of drawing commands to paint later,
- on a per-layer basis
-
- Painting, which converts the SkPicture of drawing commands into pixels in a
- bitmap somewhere (either in system memory or on the GPU if using Ganesh)
-
- Compositing, which assembles all layers into a final screen image
-
- and, less obviously, the presentation infrastructure responsible for
- actually pushing a new frame to the OS (i.e. the browser UI and its
- compositor, the GPU process which actually communicates with the GL driver,
- etc).
-
-As an example, updating the innerHTML of a DOM element that’s visible on-screen
-will trigger work in every one of the systems above. In bad cases any one of
-them can cost tens of milliseconds (or more), meaning every one of them can be
-considered a liability for staying within frame budget -- that is, any one of
-these stages can be responsible for dropping frames and causing jank.
-
-### Browser Thread Architecture
-
-The browser has multiple threads, and because of the dependencies implied in the
-above pipeline which thread an operation runs on matters a lot when it comes to
-identifying performance bottlenecks. Style, layout, and some paint setup
-operations run on the renderer’s main thread, which is the same place that
-JavaScript runs. Parsing of new HTML from the network gets in own thread (in
-most cases), as does compositing and painting; however parsing of e.g. innerHTML
-is currently performed synchronously on the main thread.
-
-Keep in mind that JavaScript is single threaded and does not yield by default,
-which means that JavaScript events, style, and layout operations will block one
-another. That means if e.g. the style system is running, Javascript can’t
-receive new events. More obviously, it also means that other JavaScript events
-(such as a timer firing, or an XHR success callback, etc) will block JS events
-that may be very timely -- like touch events. NB this essentially means
-applications responding to touch input must consider the JavaScript main thread
-the application’s UI thread, and not block it for more than a few milliseconds.
-
-The ordering of these events is often unfortunate, since currently Blink has a
-simple FIFO queue for all event types. The [Blink Scheduler
-project](https://docs.google.com/a/chromium.org/document/d/11N2WTV3M0IkZ-kQlKWlBcwkOkKTCuLXGVNylK5E2zvc/edit)
-is seeking to add a better notion of priorities to this event queue. The
-scheduler will never be able to actually shorten non-yielding events, though, so
-is only part of the solution.
-
-It's worth noting here that scrolling is “special” in that it happens outside of
-the main JavaScript context, and scroll positions are asynchronously reported
-back to the main thread and updated in the DOM. This prevents janky scrolling
-even if the page executes a lot of JavaScript, but it can get in the way if the
-page is well-behaved and wants to respond to scrolling.
-
-It's also worth noting that the pipeline above isn’t strictly hierarchically
-ordered -- that is, sometimes you can update style without needing to re-lay-out
-anything and without needing to repaint anything. A key example is CSS
-transforms, which don’t alter layout and hence can skip directly from style
-resolution (e.g. changing the transform offset) to compositing if the necessary
-content is already painted. The below sections note which stages are optional.
-Different types of screen updates require exercising different stages in the
-pipeline. One way to keep animations inexpensive is to avoid stages of this
-pipeline altogether. The following sections cover a few common examples.
-
-Lastly, note that user interactions that the browser handles, rather than the
-application, are largely unexceptional: clicking a button changes its style
-(adding pseudo-classes) and those style changes need to be resolved and later
-stages of the pipeline run (e.g. the depressed button state needs to be painted,
-and then the page needs to be re-composited with that new painted content).
-
-### Scrolling
-
-Updating the viewport's scroll position has been designed to be as cheap as
-possible, relying heavily on the compositing step and its associated GPU
-machinery.
-
-In the simple case, when the user tries to scroll a page events flow through the
-browser as follows:
-
-1. Input events are delivered to the browser process's UI thread
-2. The browser's gesture detector processing the input stream decides
- that the user is attempting to scroll the page content
-3. Input events are sent directly from the browser UI thread to the
- compositor thread in the Renderer process (notably bypassing the
- Renderer's main thread, where JavaScript and Blink live)
- 1. Optionally, if there are touch event or mousewheel handlers
- registered on the part of the page being scrolled these events
- are added to Blink's event queue and the compositor will block
- further work on this frame until it receives an acknowledgment
- that those events have run and have not been preventDefault'd
-4. The compositor updates layer positions relative to the viewport
- 1. Optionally, if newly exposed parts of the page have not been
- painted in previous frames, the compositor paints them.
- 1. Optionally, if newly exposed parts of the page have not been
- *recorded* in previous frames, the compositor asks Blink to
- record new sections of DOM
-5. The compositor issues GL commands to the GPU process to recomposite
- painted textures on the GPU with the updated layer positions in step
- 4
-6. The compositor asynchronously sends a message to the Renderer's main
- thread with updated scroll position information.
- 1. Optionally at this point updated JavaScript onScroll events can
- be fired by Blink
-
-This flow skips a lot of detail, which is covered in the [Accelerated
-Compositing design
-doc](/developers/design-documents/gpu-accelerated-compositing-in-chrome) if
-you're curious.
-
-Important notes:
-
-* In the common case, only compositing and the GPU infrastructure are
- exercised in producing a new frame during scrolling; all other steps
- are skipped.
-* Registering touch event handlers (see step 3.1) add those JavaScript
- touch event handlers as a synchronous step on the critical scrolling
- path.
-* The compositor will almost always still produce frames even if its
- waiting on Blink for new content (e.g. for touch event handler
- acknowledgments in step 3.1, or for new recordings of DOM content in
- 4.1.1). Instead of the content it's trying to produce, it'll put up
- either old content that's already been painted in previous frames
- *or* if there's no such content available it'll put up a
- checkerboard pattern.
-
-### Modifying Style of Existing DOM
-
-Modifying the style of existing DOM elements from JavaScript (whether in
-response to input or not) will exercise most of the rendering pipeline, although
-it'll skip parsing. Depending on the styles modified, it may also skip layout
-and painting. Paul Irish and Paul Lewis have written a [good article on
-html5rocks](http://www.html5rocks.com/en/tutorials/speed/high-performance-animations/)
-covering which styles affect which pipeline stages.
-
-Here's an outline of how modifying style propagates through the browser:
-
-1. JavaScript runs, modifying some style (setting inline style,
- modifying a class list, etc). This may happen in a
- requestAnimationFrame callback, in an input event, in a timer
- callback, or anywhere else.
-2. When the compositor next asks Blink to paint part of the document,
- Blink will optionally recalculate style on any part of the DOM that
- it may need to paint.
- * This style recalculation is theoretically scoped to only the
- part of the DOM tree whose style is dirty, but in practice often
- includes the entire document (the Dev Tools timeline will show
- how many DOM nodes were operated on in each recalc style event).
-3. Optionally, if the style recalculation has dirtied the layout of any
- elements that may need to be painted, layout is run on the relevant
- DOM subtree(s).
- * Notice the "may" in that sentence, since before layout is run
- and final element positions are known it isn't possible to tell
- what will be where. In practice, layouts often occur on the
- entire document. The Dev Tools timeline will show the root of
- the tree under operation for each layout event.
-4. Optionally, if any composited layer properties have changed (new
- composited layers, or new transforms or opacity of existing
- composited layers) the main-thread copy of the compositor layer tree
- is updated.
-5. Now whatever part of the document the compositor requested be
- painted can actually be painted, but note that this doesn't actually
- fill in pixels -- Blink here paints into a display list (currently
- an SkPicture).
- * This is step 6 in the overview of main subsystems above, often
- called SkPicture recording.
-6. New SkPictures and the updated compositor layer tree are transferred
- from the main thread to the compositor thread (the so-called
- "commit")
-7. The compositor prioritizes all content tiles and decides if any
- tiles need to be re-rastered (i.e. actually painted) to put up this
- new content
-8. The compositor then paints these tiles
- 1. With software painting, this is done on a software raster worker
- thread
- 2. With Ganesh aka GPU rasterization, this is done on the
- compositor thread itself, converting the display list into GL
- commands
-9. The compositor then generates the GL commands to produce a new frame
- and hands this frame's information to its parent compositor in the
- browser
-10. The browser compositor issues the GL commands for a new frame
- including the browser UI and the child compositor's content
-
-Important notes:
-
-* It's possible to trigger style recalculation or layout outside of
- the rendering pipeline by reading back CSS properties that are
- lazily computed. In the worst case script can enter a write / read
- loop where it sets a style, reads a property that forces synchronous
- layout or style recalculation, and then repeats this process. We
- call this layout thrashing; Wilson Page has written a [good article
- on the
- subject](http://wilsonpage.co.uk/preventing-layout-thrashing/).
-
-This flow summarizes a lot of detail, again covered in the [Accelerated
-Compositing design
-doc](/developers/design-documents/gpu-accelerated-compositing-in-chrome).
-
-### Adding new DOM
-
-Adding new DOM or replacing a DOM subtree requires parsing the new DOM. Whether
-this parsing happens synchronously on the main thread or asynchronously
-off-thread depends on how the DOM is inserted. An incomplete listing:
-
-* XHR responses are currently processed on the main thread;
- crbug.com/402261 tracks work to make it asynchronous
-* Setting the srcdoc of an iframe is asynchronous, see
- crbug.com/308321 for the work that made this possible
-* data: URLs are always asynchronously parsed;
- https://codereview.chromium.org/210253003 for the work that made
- this possible
-* During page load, most parsing is done asynchronously using the
- threaded parser
-
-After parsing, rendering proceeds roughly as above in "modifying style of
-existing DOM" \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/threaded-task-tracking/index.md b/chromium/docs/website/site/developers/threaded-task-tracking/index.md
deleted file mode 100644
index a7460036051..00000000000
--- a/chromium/docs/website/site/developers/threaded-task-tracking/index.md
+++ /dev/null
@@ -1,654 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: threaded-task-tracking
-title: Thread and Task Profiling and Tracking
----
-
-**Introduction**
-
-Within Chromium, tasks are regularly dispatched between various threads, by
-"posting a task," or between processes, by receiving an IPC directive. This code
-structure can make it difficult for a standard instruction profiler to
-understandably attribute execution costs. It also makes it difficult to follow
-the flow of code in a debugger.
-
-At the about:profiler internal URL, Chromium provides a profiling and debugging
-infrastructure: It provides answers to questions such as: What tasks are taking
-a "long" time? What tasks are called "too often?" What tasks are suffering
-"significant" queueing delay? How busy is each thread? etc.
-
-This document describes some of the features supported by the about:profiler
-infrastructure.
-
-**Overview**
-
-The infrastructure described has three basic uses:
-
-1. performance profiling (to identify potential performance and jank
- optimizations);
-2. learning about the codebase (see what tasks run, and when);
-3. debugging (checking to see task are called the correct number of
- times).
-
-Posted-tasks and IPC tasks are tracked, along with their performance
-characteristics, across the life-cycle of each task. Information is maintained
-about where each task was constructed/posted (function name, file and line
-number), along with the thread that was active when the task created. After each
-task has been executed, information about the run of the task is tallied.
-Information includes where it executed (thread, process, etc.), as well as
-counts and durations (time, queueing time, etc.) All that information is
-compactly accumulated in real time, while Chromium is running.
-
-The accumulated performance characteristics are all available during a any
-session. Additional reference snapshots can be taken at any time during the
-execution of the browser. The results, as well as deltas between snapshots, can
-be viewed, sorted, aggregated, and filtered, all within the about:profiler page.
-
-For learning about the codebase, is is very educational to perform some browsing
-actions, and then look and see what collection of chromium tasks were fired on
-various threads. Rather than pouring over the codebase, it is often more
-educational to look at these lists of tasks. The
-[about:tracing](/developers/how-tos/trace-event-profiling-tool) support is also
-extremely useful for more detailed investigation in this regard.
-
-**Common Profiling Activities When Trying to Identify Performance Issues**
-
-**Overall Performance: Task Execution Counts**
-
-The easiest way to improve performance is to do less work. If you wish to
-identify tasks that are running "too often," you should bring up the
-about:profiler page, which will by default sort all entry by the number of times
-each task was performed (its "count"). The page will have a header above a table
-that looks like:
-
-<table>
-<tr>
-<td>36,224,621</td>
-<td>13,772,110</td>
-<td>0</td>
-<td>98,449</td>
-<td>1</td>
-<td>29,947</td>
-<td>16 unique</td>
-<td>17 unique</td>
-<td>2 unique</td>
-<td>19 unique</td>
-<td>682 unique</td>
-<td>702 unique</td>
-</tr>
-<tr>
-Count\*\* Total run time Avg run time Max run time Avg queue time Max queue time Birth thread Exec thread Process type PID Function name Source location </tr>
-<tr>
-</tr>
-</table>
-
-The red asterisks in the column heading "Count" indicate that the results are
-sorted by that column. The row above the column headings provides an aggregate
-view of the table that appears below the he
-
-Keep in mind that although high-frequency tasks (tasks with high "Counts") may
-have a short run times, the overhead for such tasks is not included in their run
-times. Overhead includes construction, posting to a queue (via locks), getting
-time slices that other tasks could have enjoyed, cleaning up after a task is
-executed, etc. As a result, reduction in the number of tasks, for ***very***
-high frequency tasks may be very beneficial to performance.
-
-**CPU Utilization: Where Is The Time Spent?**
-
-If you wish to look for hot spots, or tasks that are using up a lot of the CPU
-time, click on the "Total Run Time" column heading to sort on that column. All
-times shown are in milliseconds.
-
-The sorted table will highlight tasks which have total execution time that is
-large. That statistic means that the product of the number of executions, and
-the execution per run, was high. If that task can be made more efficient, it may
-have a positive impact on overall CPU utilization. Caveat: by default, Execution
-Time is measured with a wall clock, not based on activity of the CPU on the
-thread. Beware of tasks that block, such as waiting for a DNS resolution.
-
-**Memory usage and Churn**
-
-As of M58, if chrome is launched with the flag
-"--enable-heap-profiling=task-profiler", allocation metrics are captured and
-aggregated to tasks. This adds a few new colums to the table.
-
-<table>
-<tr>
-<td>7,888,368</td>
-<td>1,084,910</td>
-<td>0</td>
-<td>4,635</td>
-<td>44</td>
-<td>600,000</td>
-<td>30</td>
-<td>30</td>
-<td>218</td>
-<td>76,455,816</td>
-<td>46 unique</td>
-<td>45 unique</td>
-<td>4 unique</td>
-<td>27 unique</td>
-<td>1544 unique</td>
-<td>1833 unique</td>
-</tr>
-<tr>
-Count\*\*Total run timeAvg run timeMax run timeAvg queue timeMax queue timeAvg AllocationsAvg FreesAvg Net BytesMax allocated (outstanding) bytesBirth threadExec threadProcess typePIDFunction nameSource location</tr>
-<tr>
-</tr>
-</table>
-
-Of note here are the "Avg Allocations/Avg Frees", which relate the average
-number of allocations/frees per task invocation. "Avg Net Bytes" reports the
-average memory consumption of that individual task. Note that this can be a
-positive or a negative number, as one task may allocate memory that's freed by
-another, in which case the former is net positive, while the latter is net
-negative. The "Max allocated (outstanding) bytes" reports the high watermark of
-bytes allocated during any run of the task.
-
-A few additional columns can be enabled by clicking on the \[columns\] link.
-
-<table>
-<tr>
-<td>30</td>
-<td>30</td>
-<td>218</td>
-<td>76,455,816</td>
-<td>237,354,786</td>
-<td>239,888,572</td>
-<td>78,462,758,217</td>
-<td>76,746,509,241</td>
-<td>1,951,755,449</td>
-</tr>
-<tr>
-Avg Allocations\*\*Avg FreesAvg Net BytesMax allocated (outstanding) bytesAllocation countFree CountAllocated bytesFreed bytesOverhead bytes</tr>
-<tr>
-</tr>
-</table>
-
-The "Allocation Count/Free Count" report the number of alloc/free operations
-across all task invocations, and the "Allocated Bytes/Freed bytes" likewise
-report the number of bytes allocated/freed across all invocations.
-
-The "Overhead bytes" column, provided your allocator supports it, reports a
-lower-bound estimate of the number of overhead bytes that go to heap metadata
-and slack space in allocated blocks (due to allocation granularity). The
-fraction "Overhead bytes/Allocated bytes" is a decent guesstimate for how
-efficiently the task is using heap allocations - fewer, larger allocations have
-lower overhead.
-
-**Major Jank or Delay In Responsiveness**
-
-When the browser is not responsive, the most common cause is that a task is
-running too long, and has blocked the ability of some critical thread to
-respond. Most obviously, this can happen on the CrBrowserMain (i.e., the UI
-thread in the browser process). It is also common to see this caused by a slow
-task on the Chrome_IOThread (i.e., the thread used for IPC communications with
-the renderer). At times, some threads send messages to other threads to get work
-results, and may be waiting (without officially "blocking") for a posted
-response, so almost any blocked thread \*might\* be able to cause jank, but the
-Chrome_FileThread (i.e., the thread that reads and writes from disk) is a most
-common culprit.
-
-To see what tasks have taken an unusually long time to execute, click to sort on
-the "Max Run Time" column.
-
-It is often helpful to view the results on various processes separately, as Jank
-tends to be caused by delays in the Browser process. To separate out the
-results, by process, find the drop-down box labeled "Group By" at the top of the
-page. Select "Process Type" to cause the browser process to be isolated in its
-own table. Once you select that, a second drop down will appear to the immediate
-right of the first. You should then select "Exec Thread" in that pull-down. The
-top of the page will then look like:
-
-**Group by:** --- Process type PID Birth thread Exec thread Function name Source
-location File name Line number --- Process type PID Birth thread Exec thread
-Function name Source location File name Line number --- Process type PID Birth
-thread Exec thread Function name Source location File name Line number
-
-Separate tables will now be visible to make it more visible, for each thread,
-what tasks is taking a "long time." You'll also notice that since each table
-only list a single process type and a single execution thread, that the
-corresponding columns are no longer shown in each table.
-
-After you have identified a thread that appears to have abnormally slow
-processes (that might cause jank), it is often helpful to see what tasks were
-delayed (an that thread!) by such excesses.
-
-To see what tasks have been forced to wait, click to sort on the Max Queue Time.
-Assuming the observed execution time was long, you'll tyically see a number of
-tasks that have a commensurate queuing delay.
-
-**Quickly Drill Down**
-
-If you know what you wan to look at (example: a specific file; a specific thead;
-etc), you can instantly filter all your results to only show rows that contain
-an arbitrary string. The text box at the top-right of the about:profiler page
-provides automatic case-insensitive filtering.
-
-For example, if you wanted to only see results that contain the word "browser"
-(perhaps, items running on the "browser" thread), simply enter the text
-"browser" (without the quotes) into the box at the top right. Similary, the box
-could be used to illuminate only lines that contain "sync," or lines that
-contain only "AnimationContainer::SetMinTimerInterval".
-
-**Understanding Profiler Results from** about:profiler
-
-When you visit the URL about:profiler, you'll get a set of lines which might
-begin with the following (entry and select boxes don't seem to appear in this
-documentation):
-
-<table>
-<tr>
-<td><b>Group by: </b> --- Process type PID Birth thread Exec thread Function name Source location File name Line number <b>Sort by: </b> --- Count Total run time Avg run time Max run time Total queue time Avg queue time Max queue time Birth thread Exec thread Process type PID Function name Source location File name Line number Count (DESC) Total run time (DESC) Avg run time (DESC) Max run time (DESC) Total queue time (DESC) Avg queue time (DESC) Max queue time (DESC) Birth thread (DESC) Exec thread (DESC) Process type (DESC) PID (DESC) Function name (DESC) Source location (DESC) File name (DESC) Line number (DESC) --- Count Total run time Avg run time Max run time Total queue time Avg queue time Max queue time Birth thread Exec thread Process type PID Function name Source location File name Line number Count (DESC) Total run time (DESC) Avg run time (DESC) Max run time (DESC) Total queue time (DESC) Avg queue time (DESC) Max queue time (DESC) Birth thread (DESC) Exec thread (DESC) Process type (DESC) PID (DESC) Function name (DESC) Source location (DESC) File name (DESC) Line number (DESC) </td>
-<td>\[snapshots\] \[columns\] </td>
-</tr>
-</table>
-
----
-
-<table>
-<tr>
-<td>19,402</td>
-<td>187,008</td>
-<td>10</td>
-<td>9,338</td>
-<td>217</td>
-<td>9,932</td>
-<td>15 unique</td>
-<td>17 unique</td>
-<td>2 unique</td>
-<td>18 unique</td>
-<td>415 unique</td>
-<td>430 unique</td>
-</tr>
-<tr>
-Count\*\* Total run time Avg run time Max run time Avg queue time Max queue time Birth thread Exec thread Process type PID Function name Source location </tr>
-<tr>
-<td>990</td>
-<td>249</td>
-<td>0</td>
-<td>28</td>
-<td>7</td>
-<td>363</td>
-<td>Chrome_CacheThread</td>
-<td>Chrome_IOThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>disk_cache::InFlightIO::OnIOComplete</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cdisk_cache%5Cin_flight_io.cc&line=62">in_flight_io.cc \[62\]</a></td>
-</tr>
-<tr>
-<td>990</td>
-<td>4,675</td>
-<td>5</td>
-<td>255</td>
-<td>23</td>
-<td>276</td>
-<td>Chrome_IOThread</td>
-<td>Chrome_CacheThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>disk_cache::InFlightBackendIO::PostOperation</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cdisk_cache%5Cin_flight_backend_io.cc&line=472">in_flight_backend_io.cc \[472\]</a></td>
-</tr>
-<tr>
-<td>961</td>
-<td>249</td>
-<td>0</td>
-<td>203</td>
-<td>0</td>
-<td>14</td>
-<td>Chrome_IOThread</td>
-<td>Chrome_IOThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>net::SpdySession::ReadSocket</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cspdy%5Cspdy_session.cc&line=773">spdy_session.cc \[773\]</a></td>
-</tr>
-<tr>
-<td>831</td>
-<td>4</td>
-<td>0</td>
-<td>1</td>
-<td>18</td>
-<td>282</td>
-<td>CrBrowserMain</td>
-<td>Chrome_IOThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>IPC::ChannelProxy::Send</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cipc_channel_proxy.cc&line=357">ipc_channel_proxy.cc \[357\]</a></td>
-</tr>
-<tr>
-<td>561</td>
-<td>1</td>
-<td>0</td>
-<td>1</td>
-<td>42</td>
-<td>278</td>
-<td>CrBrowserMain</td>
-<td>Chrome_IOThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>IPC::ChannelProxy::Context::AddFilter</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cipc_channel_proxy.cc&line=236">ipc_channel_proxy.cc \[236\]</a></td>
-</tr>
-<tr>
-<td>470</td>
-<td>3,480</td>
-<td>7</td>
-<td>1,286</td>
-<td>986</td>
-<td>2,960</td>
-<td>Chrome_IOThread</td>
-<td>CrBrowserMain</td>
-<td>Browser</td>
-<td>3036</td>
-<td>IPC::ChannelProxy::Context::OnMessageReceivedNoFilter</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cipc_channel_proxy.cc&line=116">ipc_channel_proxy.cc \[116\]</a></td>
-</tr>
-<tr>
-<td>405</td>
-<td>297</td>
-<td>1</td>
-<td>30</td>
-<td>6</td>
-<td>363</td>
-<td>WorkerThread-\*</td>
-<td>Chrome_IOThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>base::win::ObjectWatcher::DoneWaiting</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cwin%5Cobject_watcher.cc&line=130">object_watcher.cc \[130\]</a></td>
-</tr>
-<tr>
-<td>404</td>
-<td>0</td>
-<td>0</td>
-<td>0</td>
-<td>0</td>
-<td>0</td>
-<td>Chrome_IOThread</td>
-<td>Chrome_IOThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>_IpcMessageHandlerClass::OnDataReceivedACK</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cbrowser%5Crenderer_host%5Cresource_dispatcher_host.cc&line=408">resource_dispatcher_host.cc \[408\]</a></td>
-</tr>
-<tr>
-<td>379</td>
-<td>43</td>
-<td>0</td>
-<td>2</td>
-<td>703</td>
-<td>2,684</td>
-<td>Chrome_IOThread</td>
-<td>CrBrowserMain</td>
-<td>Browser</td>
-<td>3036</td>
-<td>\`anonymous-namespace'::ChromeCookieMonsterDelegate::OnCookieChanged</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cbrowser%5Cprofiles%5Cprofile_io_data.cc&line=95">profile_io_data.cc \[95\]</a></td>
-</tr>
-<tr>
-<td>362</td>
-<td>0</td>
-<td>0</td>
-<td>0</td>
-<td>1,275</td>
-<td>2,962</td>
-<td>Chrome_IOThread</td>
-<td>CrBrowserMain</td>
-<td>Browser</td>
-<td>3036</td>
-<td>TaskManagerModel::NotifyBytesRead</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cbrowser%5Ctask_manager%5Ctask_manager.cc&line=971">task_manager.cc \[971\]</a></td>
-</tr>
-<tr>
-<td colspan=12>1194 rows (1184 hidden) Show noneShow moreShow all</td>
-</tr>
-</table>
-
-\[Reset tracking data\]
-
-Before describing the top line, it is significant to clarify what each of the
-columns presented in any table are. The columns are:
-
-1. Count:: The number of times this task was observed to have run. If
- the execution thread is "Still running," then it has not completed,
- and the actual execution thread is unknown (it might not even have
- started!).
-2. Total run time: The sum of the run times for all tasks listed on
- this row.
-3. Avg run time: The quotient of the Total run time column divided the
- Count column.
-4. Max run time: The largest single Run time for the task in this row.
-5. Avg queue time: The average, over all runs of this task, of the
- queuing delay the task encountered. If this was an ordinary task,
- the queuing delay is measured from the birth (construction) of the
- task, until the task began. If this was a PostDelayedTask, then the
- delay is measured from when the task was asked to run, until it
- actually ran. For IPC tasks, the queuin delay is always listed as
- zero (TBD: make this measure interprocess latency).
-6. Max queue time: The largest singular queuing delay observed for this
- row.
-7. Birth thread: The thread on which this task was constucted.
-8. Exec Thread: The thread on which this task ran.
-9. Process type: An enumerated list of process types, currently
- including "Browser" and "Tab" (meaning Renderer). It will soon
- include GPU, Plugin, etc.).
-10. PID: The operating system Process ID associated with the process.
- This can be used to (for example) distinguish various renderer
- processes.
-11. Function Name: Usually the name of function where the task was
- constructed (not actually the top level function name for the task
- in this row). If this is an IP task, then it is the name of the IPC
- routine that handled the incoming request. On some compilers, this
- will templete parameters (if applicable), while on other compilers
- (gcc?), it will only include the name of the templete. In such
- cases, there may be indistinguishable rows in the profile.
-12. Source location: The file and line number for the function where
- this task was created. Clicking on the link in this column will open
- a new window, displaynig the actual source code specified.
-
-**Top Line Elements**
-
-The first line provides pull down boxes to organize and filter what appears in
-the table(s). There are currently 4 parts on this headline, such as the
-following (pulldown and text entry boxes do not appear in this documentation :-(
-):
-
-<table>
-<tr>
-<td><b> Group by: </b> <b>Sort by: </b></td>
-<td>\[snapshots\] \[columns\] </td>
-</tr>
-</table>
-
-. The parts are:
-
-1. Pulldown box (labeled **Group by**) to select presentation of
- multiple tables, rather than one table. If an option is selected
- (such "Exec" thread) then a separate table is presented for each
- distinct value of the selected option. When an option is selected,
- then an additional pulldown is provided, to select funther
- partitioning of the tables.
-2. Pulldown box (labeled **Sort by**) to select the sort order.
- Generally, is it easier to click on the column headings to change
- the sort order, but these pulldown can be used when several levels
- of sorting are requested. For instance, you can select a primare
- sort on Count, and a secondary sort on Total Execution time.
-3. A link to enable/disable Snapshot mode. When this mode is enabled,
- additional snapshots of data can be obtained, and a delta between
- any two snapshots can be selected for examination.
-4. A link to show a more complete list of columns and options. You can
- select this, and then alter whether some columns are shown or not
- (to make the tables less wide??), or to merge similar rows (example:
- Merge all similar rows in the same browser type by not distingushing
- based on PID). By default, merging of Worker Threads and PAC (Proxy
- Auto Config) threads is performed, based on the the "merge similar
- threads" checkbox.
-5. An instant filter box. Any text typed into this box will be matched
- (case insensitive) against all the information known about the row
- (i.e., threads, function, location, etc). Only matching rows will be
- shown in the table(s).
-
-**Table Elements**
-
-Each table consists of 4 groups of rows. In addition, if multiple tables are
-presented, after a "Group by" pulldown is selected, there may be a title for the
-table. The title for table indicates what rows have been selected for
-presentation in the table. For example, a selection to Group by "Exec thread"
-was selected, then one possible title is "Exec thread = CrBrowserMain".
-
-The following are the 4 groups of rows in each table (with sample lines taken
-from the table shown above):
-
-<table>
-<tr>
-<td>19,402</td>
-<td>187,008</td>
-<td>10</td>
-<td>9,338</td>
-<td>217</td>
-<td>9,932</td>
-<td>15 unique</td>
-<td>17 unique</td>
-<td>2 unique</td>
-<td>18 unique</td>
-<td>415 unique</td>
-<td>430 unique</td>
-</tr>
-<tr>
-</tr>
-</table>
-
-> 1. Summary row: This singular row presents the aggregate results for all rows
-> present in the table. For example, it' Count column contains sums the Count
-> column in each row, while its Max exec time columns contains the maixum of all
-> Mac exec time columns in each row.
-
-<table>
-<tr>
-Count\*\*Total run timeAvg run timeMax run timeAvg queue timeMax queue timeBirth threadExec threadProcess typePIDFunction nameSource location</tr>
-<tr>
-</tr>
-</table>
-
-> 2. Header Row: This singular row contains the column headings for the table.
-> Headings are only shown for columns that are presented in the table, and tihs
-> list my be varied by selecting various elemens of the Top Line described
-> earlier. Clicking on any elemet of this row will cause the table to be sorted
-> based on that row. A second click will cause a reverse sort.
-
-<table>
-<tr>
-<td>990</td>
-<td>249</td>
-<td>0</td>
-<td>28</td>
-<td>7</td>
-<td>363</td>
-<td>Chrome_CacheThread</td>
-<td>Chrome_IOThread</td>
-<td>Browser</td>
-<td>3036</td>
-<td>disk_cache::InFlightIO::OnIOComplete</td>
-<td><a href="http://chromesrc.appspot.com/?path=.%5Cdisk_cache%5Cin_flight_io.cc&line=62">in_flight_io.cc \[62\]</a></td>
-</tr>
-</table>
-
-> 3. Data Rows: This section may contain 0 or more rows of data, each
-> corresponding to a collection of runs of tasks. The final cell is clickable,
-> and provides quick access to a recent copy of the source code, at the point of
-> interest.
-
-1194 rows (1184 hidden) Show none Show more Show all
-
-> 4..Display Control Row: This singular final row can be used to select, a view
-> of additional or fewer rows of the Data Row section. It contains buttons to
-> request viewing of additional lines, or to reduce viewed lines. It also shows
-> how many lines a table has. By default, only the first 30 rows of a single
-> table are visible. When multiple tables are presented, then a smaller initial
-> number of rows are present.
-
-**Final Link: Reset Tracking data**
-
-At the very bottom of the about:profile page is a link for Reseting Tracking
-data. This link sulfaces a useful hack until snapshot functionality can provide
-the maximum value between two snapshots. The link can be used to force all data
-entries in all rows of the browser to zero. The next snapshot (or page reload)
-will show all new data, an dwill, as a result, show the max value since the last
-reset. The reset is done using various hackery, and minor miscounts are
-possible. As a result, this is really a hack. Once the snapshot facility better
-supports max, this link will be removed from the UI.
-
-**FAQ**
-
-**How is this implemented?**
-
-If you're a Google employee, check out [this
-techtalk](https://goto.google.com/chrome-profiler-internals-techtalk-video).
-Otherwise [check out the
-code](https://cs.chromium.org/search/?q=tracked_objects).
-
-**I'd like to see just the tasks that appear between two distinct points in
-time. How do I avoid seeing all the other data?**
-
-On the top line, select the Snapshot link. When that is selected you will see
-the data and time of each data collection effort. Instead of hitting reload, you
-can click the snapshot button, and acquire another image of the profiler state
-of the browser. If you click on any two lines, then you will see the changes
-that have taken place between those two snapshots. When you click on only one
-line, then you'll see the data from startup through that point in time.
-
-note: Max is not currently supported in the delta between two points. That
-feature will be supported RSN.
-
-**How much does this profiling and analysis impact performance?**
-
-There is very little measurable performance impact. If you'd like to disable the
-tracking, use the command line switch --enable-tracking=0
-
-The implementation attempts to gather all this information across all threads
-with asymptotically zero locking, zero atomic operations, and a very small
-amount of memory (that does not grow after all birth locations and associated
-destruction threads have been observed at least once). The details of how this
-achieved is provided in a long comment atop the file src/base/tracked_objects.h,
-as well as a forth-coming video and associated slide presentation.
-
-**Basic Debugging Assistance: How did \*this\* task get posted?**
-
-When a breakpoint is hit in a debugger on a given thread, the stack often starts
-with a message loop running a task, and there is very little information about
-what part of the codebase truly caused that task to be run. When a newbie
-developer is trying to follow the flow of events in Chromium, it is often
-difficult to understand the connection between (for example) the IO Thread, the
-File Thread, and the Main UI Thread. The infrastructure for task tracking
-provides basic information to see through these posted task transitions.
-
-Assuming you've reached a breakpoint of interest, but the top of the call stack
-shows a message loop, and the calling of a Run() method, then you are perfectly
-set up to see the source of any task. Most debuggers will traverse to the
-following base class of interest seamlessly, but here is the more complete
-description of where to look to find the answer (a specific file and line
-number).
-
-1. Find the level of the stack that has the Run() method (typically in
- the message_loop.cc file), and look at the Task instance that is
- calling Run().
-2. The Task instance has a base class
- [TrackingInfo](https://code.google.com/p/chromium/codesearch#chromium/src/base/tracking_info.h&q=TrackingInfo&sq=package:chromium&type=cs).
-3. The TrackingInfo base class has an member birth_tally of type
- [Births](https://code.google.com/p/chromium/codesearch#chromium/src/base/tracked_objects.h&q=Births&sq=package:chromium&type=cs&l=234).
-4. That Births instance in turn has a base class BirthOnThread, which
- has a member location_ of type Location.
-5. Finally, the Location instance will contain the function_name_, the
- file_name_, and the line_number_ indicating where the task was
- posted (typically just after construction).
-
----
-
-Please address comments and suggestions to Jim Roskind a.k.a., jar at
-chromium.org. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/ticket-milestone-punting/index.md b/chromium/docs/website/site/developers/ticket-milestone-punting/index.md
deleted file mode 100644
index 300ad258d2e..00000000000
--- a/chromium/docs/website/site/developers/ticket-milestone-punting/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: ticket-milestone-punting
-title: Ticket Milestone Punting
----
-
-# Overview
-
-Chromium issue tickets get labelled for the earliest Chrome milestone they can
-get a fix into (or hope to get a fix into). Eg: label "M-41". However, once the
-target milestone reaches its branch date leading up to Beta Channel release
-(splits off from trunk), the gateway for getting changes into the milestone
-branch becomes much more controlled. This is an important part of the process to
-get the branch stabilized before it hits Stable Channel.
-
-As a result of this milestone branch state, we start to automatically push
-(punt) open tickets that are marked for this milestone into the next one. We do
-this automatically based on the labels that have been applied to the ticket.
-
-The purpose of this page is to document the punting label logic, which defines
-whether an issue fix meets priority requirements to still potentially make it
-into the branched milestone.
-
-**It is very important that we work together to keep post-branch changes/merges
-to a minimum. We need to do the best job possible to stabilize the milestone
-branches before they hit our users on stable channel. Please do not introduce
-unnecessary change and risk by inaccurately labeling your tickets, in the hopes
-of getting a merge.**
-
-**Labels that will NOT get auto punted from the post-branch milestone**
-
-* Pri=0
-* Type=Bug-Regression
-* Type=Bug-Security
-* Type=PrivacyReview
-* Type=SecurityReview
-* Type=Launch-Accessibility
-* Type=Launch-Experiment
-* Type=Launch,Launch-OWP
-* Merge=Approved,Requested,Merged
-* label:merge-merged *(leave tickets that have already been merged to
- a branch "merge-merged-X")*
-* has:ReleaseBlock *(leave tickets that have any "ReleaseBlock-X"
- label)*
-* label:Blocks *(leave tickets that have a ChromeOS "Blocks-X" label)*
-* Review=Security,Privacy
-* iOS=Merge-Approved,Merge-Requested
-
-(Note: tickets could still be manually rejected.) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-design-overview/index.md b/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-design-overview/index.md
deleted file mode 100644
index bb66f0efe0a..00000000000
--- a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-design-overview/index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tools-we-use-in-chromium
- - Tools we use in Chromium
-- - /developers/tools-we-use-in-chromium/grit
- - GRIT
-page_name: grit-design-overview
-title: GRIT Design Overview
----
-
-# Introduction
-
-This document is intended as a rough overview of the design of GRIT.
-
-Before reading this, you should probably read the [GRIT user's
-guide](/developers/tools-we-use-in-chromium/grit/grit-users-guide) for
-background.
-
-# Design Overview
-
-The source of truth in GRIT is the .grd file (an XML formatted file). This file
-format is only an input format for GRIT; it is not a resource format in and of
-itself. For some good examples of what .grd files look like, see the [various
-such
-files](https://cs.chromium.org/search/?q=file:%5C.grd&sq=package:chromium&type=cs)
-in the Chromium project.
-
-The structure and semantics of the .grd file are encoded in the various
-sub-classes of grit.node.Base.
-
-From the .grd file and various files it may reference, GRIT builds up an
-in-memory representation of all of the "source" resources, most often the
-resources as they are designed in English, although a different source language
-than English may be specified.
-
-Through the &lt;outputs&gt; section, the .grd file also specifies which
-languages to output, and in which formats.
-
-GRIT uses the idea that identical messages (translation units) should receive
-identical translations, to avoid translators having to translate the same
-message multiple times. To enable multiple identical messages to have different
-meanings (e.g. "open" as a noun vs. "open" as a verb) GRIT adds the ability to
-specify a *meaning* attribute that allows the messages to be translated
-differently.
-
-The .grd file may contain various types of resources:
-
-* Non-translatable resources such as images, that should get output by
- GRIT to whatever resource format is being used. This is what the
- &lt;include&gt; node is for.
-* Single mesages (translation units) using the &lt;message&gt; node.
- Non-translatable parts of messages may be demarcated with &lt;ph&gt;
- nodes (short for "placeholder").
-* Structured resource formats, that GRIT can break down into multiple
- messages. Examples are HTML files and things such as dialog box or
- menu definitions from Windows .rc files. The &lt;structure&gt; node
- is used to reference these formats, and always points to a file
- external to the .grd file.
-
-A *formatter* is something that knows how to take a .grd file and turn it into
-the resource format (e.g. Windows .rc files, Chromium .pak files, Android
-resource files, etc.) in each of the different languages specified in the
-&lt;outputs&gt; section.
-
-The various formatters available are in the grit.format package.
-
-A *gatherer* is something that knows how to break a structured resource
-(&lt;structure&gt; node) into messages, and how to create a translated version
-of the structured resource file.
-
-The various gatherers available are in the grit.gather package.
-
-A *tool* is something you invoke from the command line. Tools live in the
-grit.tool package and are invoked as grit xyz where xyz is the name of the tool,
-and the binding from name to package is specified in the grit.grit_runner
-module.
-
-GRIT is meant as a tool that, given a set of input files in the source language,
-and a set of translations, can produce resource files in all target languages
-(by default, using pseudo-translations for messages that do not have available
-translations). It has basic features for packaging messages for delivery to
-translators, and for receiving translations back from translators. Its formats
-for this are the .xmb format (generated by the grit xmb tool) and the .xtb
-format (referenced by the &lt;translation&gt; node in the .grd file). These are
-very basic formats that contain the messages, with placeholders and with any
-descriptions provided to give the translators context. The assumption is that
-there is some other system that reads the .xmb format, provides translators with
-another format or a UI that lets them translate more easily, then takes what it
-receives back from translators and packages it back up into the .xtb format. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan/index.md b/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan/index.md
deleted file mode 100644
index 2964c7a935f..00000000000
--- a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tools-we-use-in-chromium
- - Tools we use in Chromium
-- - /developers/tools-we-use-in-chromium/grit
- - GRIT
-page_name: grit-regression-test-plan
-title: GRIT Regression Test Plan
----
-
-Multiple projects use GRIT. This document details the regression testing plan
-employed by the GRIT project to ensure compatibility with all of the projects
-using it.
-
-The plan is fairly straight forward:
-
-1. Each change must pass grit.py unit with no errors before being
- checked in. Ideally, the command should be tested on both Linux and
- Windows, since some behavior may break on case-insensitive platforms
- and other behavior may break on case-sensitive platforms, or may
- break due to different path separator characters.
-2. Projects using GRIT should proactively contribute unit tests and
- regression tests that will be run as part of [grit.py unit
- ](https://code.google.com/p/grit-i18n/wiki/RegressionTestPlan)to
- ensure any functionality they require does not get modified by
- accident.
-3. When a project reports that a new version of GRIT has broken
- functionality for that project, the GRIT team and folks on the
- project should work together to get a regression test added.
-
-Individual projects, of course, may put in place extensive tests in their own
-repository that further help to ensure that a new revision of GRIT does not
-break them. For example, when the revision of GRIT used is changed in the
-[Chromium project](http://www.chromium.org/), the change would normally pass
-through that project's [try
-servers](http://www.chromium.org/developers/testing/try-server-usage) or [commit
-queue](/developers/testing/commit-queue) which would help catch any new behavior
-of GRIT breaking the project's test suite. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-users-guide/index.md b/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-users-guide/index.md
deleted file mode 100644
index d4d24e3308b..00000000000
--- a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/grit-users-guide/index.md
+++ /dev/null
@@ -1,651 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tools-we-use-in-chromium
- - Tools we use in Chromium
-- - /developers/tools-we-use-in-chromium/grit
- - GRIT
-page_name: grit-users-guide
-title: GRIT User's Guide
----
-
-[TOC]
-
-# Getting Started
-
-Your chromium checkout contains GRIT. Run ./tools/grit/grit.py for help. GRIT
-integrates easily with [GYP](http://code.google.com/p/gyp/), see
-[examples](https://code.google.com/p/chromium/codesearch#search/&q=grit%20file:%5C.gyp&sq=package:chromium&type=cs).
-
-It's a good idea to run GRIT's unit tests to check that your installation is OK.
-Run grit unit, which should print the result of the tests, ending with OK.
-
-## Creating a Blank .grd File
-
-You can run grit newgrd to create a new .grd file with no content but a skeleton
-to start you off with.
-
-If you're looking to convert an existing .rc file to the .grd format, see the
-section "Converting Your RC File to GRIT Format" below.
-
-# Adding Resources
-
-## Includes (e.g. GIF, BMP, ICO etc.)
-
-Here are the steps to add an included resource, e.g. a GIF or BMP. Note that
-this does not include HTML templates, those are considered "structures" (see
-section below).
-
-1. Open your project's .grd file.
-2. Find the latest &lt;release&gt; element (the one with the highest
- number in the 'seq' attribute). These elements group together
- resources that are part of the same public release. Note that some
- projects always use just a single &lt;release&gt; element.
-3. Under that &lt;release&gt; element, find an &lt;includes&gt;
- element.
-4. Add an &lt;include&gt; element to the end of that &lt;includes&gt;
- element. The &lt;include&gt; element has the following attributes,
- and no body:
- * type: This goes into the RC file verbatim, so it is the resource
- type string you want to use for this include, e.g. 'GIF'
- * name: This is the textual ID of this resource. GRIT will
- generate a #define in the resource header file for this textual
- ID, so you can use it in your code as long as you include the
- resource header file.
- * file: This is the path to the file to include, **relative to the
- .grd file**
-
-## i18n Messages
-
-***Note: readers are here advised to also read [UI Localization (aka
-Translations)](/developers/design-documents/ui-localization).***
-
-Similarly for includes (above), find the latest &lt;release&gt; element, then
-find a &lt;messages&gt; node under that. Add an i18n &lt;message&gt; node under
-it. i18n &lt;message&gt; nodes have the following attributes:
-
-* *name*: The textual ID of the message.
-* *desc*: A description of the message giving enough context to the
- translator to translate the message correctly (e.g. the message
- "Shut" might be a description of an action you need to take or the
- description of the status of something, so a description like e.g.
- "Shut the current dialog; button label" would help translators do
- the right thing).
-* *meaning*: You can use this field to ensure that two messages that
- have the same text will not necessarily share the same translation.
- This can provide a bit of context to the translators along with the
- 'desc' attribute.
-* *internal_comment*: If you want to add a comment for use internally
- (by the developers) this is the place to put it.
-
-The body of the &lt;message&gt; element is the text of the message. Inline in
-the text, you should use &lt;ph&gt; elements to indicate *non-translatable*
-sections (human or automatic translators will leave the &lt;ph&gt; element
-content alone - they will not try to translate it).
-
-The &lt;ph&gt; element has a single attribute, '*name*', which you use to give
-the placeholder a name (which must be uppercase and should usually be
-descriptive, e.g. USER_NAME or TIME_REMAINING). Apart from the
-*non-translatable* text, the &lt;ph&gt; element can contain a single&lt;ex&gt;
-element containing an example of what the placeholder could be replaced with.
-This is shown to the translators, and could be e.g. "Jói" for a placeholder with
-a name of USER_NAME.
-
-For example:
-
-&lt;message name="ID_OF_MESSAGE"&gt;
-Hello &lt;ph name="USER_NAME"&gt;%s&lt;ex&gt;Joi&lt;/ex&gt;&lt;/ph&gt;, how are
-you today?
-&lt;/message&gt;
-
-GRIT allows you to use messages that begin or end with whitespace. You need to
-put ''' (that's three single quotes, like Python's triple quotes) before leading
-whitespace and after trailing whitespace, because the default is to strip
-leading and trailing whitespace from messages.
-
-### Example
-
-Given a message that looked like the following in the RC file:
-
-IDS_EMAIL_ESTIMATE "%d of about %d emails - "
-
-This should be represented as the following in the .grd file:
-
-&lt;message name="IDS_EMAIL_ESTIMATE"
-internal_comment="TODO make the placeholders reorderable so the translators can
-rearrange things"
-desc="Shown at top of results page"&gt;
-&lt;ph name="ITEM"&gt;%d&lt;ex&gt;1&lt;/ex&gt;&lt;/ph&gt; of about &lt;ph
-name="ESTIMATED_TOTAL"&gt;%d&lt;ex&gt;130&lt;/ex&gt;&lt;/ph&gt; emails - '''
-&lt;/message&gt;
-
-Let's walk through what's going on here:
-
-* The '*name*' attribute of the message element is the symbolic ID of
- the message, that you use to refer to the message in e.g. your C++
- code. GRIT generates a numeric ID for the message which goes into
- the resource.h file
-* The '*desc*' attribute is a description of the message which should
- give the translators enough context to translate it properly. This
- is especially important for short messages such as a single word,
- where you have to at least disambiguate whether the word is a noun,
- verb, adjective, and whether it's used in a singular or plural
- context.
-* The '*internal_comment*' attribute is for any comments related to
- this message that the translator should not see (e.g. TODO comments,
- comments on how to use in code, etc.)
-* We change the two %d format specifiers into "placeholders," which
- are represented by the &lt;ph&gt; element. Everything that should
- not be translated by the translators needs to be changed into a
- placeholder.
-* The '*name*' attribute of the placeholder must be composed of the
- capital letters A-Z, numbers 0-9 and the underscore character. It
- should describe the placeholder succinctly. The placeholder names
- are used to provide the translator with translatable text, in this
- case "ITEM of about ESTIMATED_TOTAL emails - ".
-* The contents of the &lt;ph&gt; element should be what you want your
- program to see, i.e. what goes into the compiled RC. Basically this
- is the original text.
-* You can (and should) add a single &lt;ex&gt; node as a child of the
- &lt;ph&gt; node. The contents of the &lt;ex&gt; node will be used to
- create an example of a "final" message to help the translators. This
- shows what the message might look like once all format specifiers
- have been filled in, in this case "1 of about 130 emails - "
-* Because the message ends in a space character, and you don't want to
- lose that space character, you need to add a triple quote, ''',
- after the end of the message. This prevents GRIT from stripping the
- trailing whitespace. The triple quote does not become part of the
- message.
-
-## Structures (menus, dialogs, HTML templates, etc.)
-
-Any resource that is not a simple message and contains one or more translateable
-parts needs to be defined as a &lt;structure&gt; element. Similar to includes
-and messages (see above), you find the latest &lt;release&gt; element, find a
-&lt;structures&gt; node under that, and add a&lt;structure&gt; node to it.
-&lt;structure&gt; nodes have the following attributes:
-
-* *name*: The textual ID of the structure. For menus, dialogs and
- VERSIONINFO resources, this must match the ID used in the .rc file
- the structure is kept in.
-* *type*: The type of structure. This can be 'menu', 'dialog',
- 'version', 'rcdata', 'tr_html', 'txt' or 'admin_template'. The first
- four indicate a MENU, DIALOG (or DIALOGEX), VERSIONINFO or RCDATA
- resource in a .rc file. 'tr_html' indicates an HTML template,
- 'admin_template' indicates an .adm file (used for enterprise
- features on Windows) and 'txt' indicates a plain text file that
- needs to be translated for different languages.
-* *file*: The file, **relative to the .grd file** that the structure
- is kept in. If it is a structure type taken from an .rc file, the
- structure resides in the file along with possibly lots of other
- structures, and is looked up by its textual ID (the 'name'
- attribute). Otherwise it takes up the whole file (i.e. the whole
- contents of the file are the contents of the &lt;structure&gt;
- element).
-
-Note that GRIT only has support for symbolic resource IDs (IDs that are
-preprocessor defines that are given a numeric value) and not for string literal
-resource IDs. The latter are suboptimal, since they increase the size of the
-resources. If the .rc file you point to uses string literal resource IDs, you
-will have to #define those string literals manually to use those resources. The
-recommended approach is to only use symbolic resource IDs.
-
-## Splitting Resources into Multiple Files
-
-It is possible to have 'sub' grd files, the ones with .grdp extension.
-
-They can be include in .grd files using the &lt;part&gt; element. See [this
-example](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/app/bookmarks_strings.grdp&sq=package:chromium&type=cs).
-
-# Outputs and Translations
-
-By calling grit build you make GRIT build RC files and resource header files
-from a .grd file. This section details how to specify which files to output, how
-to specify the translation files to use, and how to use conditional output of
-resources.
-
-## Specifying Output Files and Translation Files
-
-The way you specify which files grit build should output is using an
-&lt;outputs&gt; section in the .grd file. NOTE: The &lt;outputs&gt; section
-should be put at the top of the .grd file, as this can speed up GRIT when used
-with build systems that scan the .grd file for dependencies.
-
-To specify the translation files to use, you use a &lt;translations&gt; section
-that points to each of the .xtb (translation bundle) files containing the
-translations.
-
-The top of your .grd file, including the &lt;outputs&gt; and
-&lt;translations&gt; sections might look like this:
-
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;grit latest_public_release="0" source_lang_id="en" current_release="1"
-base_dir="../.." enc_check="möl"&gt;
-&lt;outputs&gt;
-&lt;output filename="resource.h" type="rc_header" /&gt;
-&lt;output filename="en/generated_resources_en.rc" type="rc_all" lang="en" /&gt;
-&lt;output filename="fr/generated_resources_fr.rc" type="rc_all" lang="fr" /&gt;
-&lt;output filename="ja/generated_resources_ja.rc" type="rc_all" lang="ja" /&gt;
-&lt;/outputs&gt;
-&lt;translations&gt;
-&lt;file path="$TRANSLATIONS_FOLDER/fr.xtb" lang="fr" /&gt;
-&lt;file path="$TRANSLATIONS_FOLDER/ja.xtb" lang="ja" /&gt;
-&lt;/translations&gt;
-&lt;!-- Remainder of .grd file --&gt;
-&lt;/grit&gt;
-
-Something to note here: The language code is included in the filename of each of
-the generated .rc files, even though it is already a component of the files'
-paths. This is recommended to ensure that the .res intermediary files which are
-generated by the RC compiler from the .rc files and then linked into the
-executable do not share the same filename (as they may all be built into one
-directory even if the GRIT output files are in separate directories).
-
-## Conditional Output of Resources
-
-In an .rc file, it's common to use C preprocessor commands to control which
-parts of the file get output given the existence or values of C preprocessor
-defines. GRIT has this same capability, in addition to allowing output of
-resources to be conditional on which language is being output.
-
-To use conditional output of resources, simply enclose some of your
-&lt;message&gt;, &lt;structure&gt; or &lt;include&gt; elements in an &lt;if&gt;
-element. The 'if' element has a single attribute 'expr', the contents of which
-are evaluated as a Python expression, and the resources within the 'if' element
-are only output if the result of that expression is true. Your Python expression
-has access to the following objects and functions:
-
-* lang is the language code ([IETF language
- tag](http://en.wikipedia.org/wiki/IETF_language_tag)) being output,
- taken directly from the 'lang' attribute of the &lt;output&gt; node
- currently controlling the output.
-* defs is a map of C preprocessor defines to their values, e.g. {
- 'SHIPPING' : True, '_DEBUG' : False }. Note that preprocessor
- defines with values 1 and 0 get changed so their values are True and
- False, respectively.
-* pp_ifdef(name) behaves just like an #ifdef statement in the C
- preprocessor, i.e. it returns True if name is defined (exists as a
- key in defs).
-* pp_if(name) behaves just like an #if statement in the C
- preprocessor, i.e. it returns True if and only if name is defined
- and its value is true.
-
-Note that conditional output of resources only affects those output files of
-GRIT that determine which resources get linked into your executable, i.e.
-currently only the .rc files output. It has no effect on resource header files,
-or translation interchange files like .xmb files. This is desirable for several
-reasons, e.g. resource IDs stay the same regardless of conditional output, all
-messages always go to translation, etc.
-
-## Avoid unnecessary header includes
-
-GRIT by default includes some header files (for example: atlres.h). In order to
-avoid these includes you can use the &lt;emit&gt; tag as a child
-of&lt;output&gt;. Doing this would replace all the includes with your customized
-includes. Including an empty &lt;emit&gt; tag makes GRIT include no header files
-in the generated resource file.
-
-&lt;output filename="resource.grh" type="rc_header"&gt;
-&lt;emit&gt;#include "foo/bar.h"&lt;/emit&gt;
-&lt;/output&gt;
-
-# GRIT Cookbook
-
-This section documents some common "recipes" for getting things done using GRIT.
-
-## Getting Ready for Release
-
-When you are about to release, you will probably want to make sure none of your
-messages get automatically pseudotranslated, i.e. you want to have 'grit build'
-fail if there are some missing translations. To achieve this goal, you simply
-add a allow_pseudo="false" attribute to your&lt;release&gt; node (this attribute
-is true by default), e.g.
-
-&lt;release seq="1" allow_pseudo="false"&gt;
-&lt;!--
-If GRIT finds a missing translation for any message or any part
-of any structure within this element, it will fail rather than
-create an automatic pseudotranslation.
---&gt;
-&lt;messages&gt;
-...
-&lt;/messages&gt;
-&lt;structures&gt;
-...
-&lt;/structures&gt;
-&lt;/release&gt;
-
-When you start working on your next release, **leave everything inside that
-&lt;release&gt; element alone** (or at least don't modify or add to it - OK to
-remove from it). Instead, create a new &lt;release&gt; element and put the
-resources you add to your new release inside that element. If you need to modify
-one of the existing resources, move it from the old release to the new release,
-and modify it within the new release.
-
-## Language-Specific Graphics (or Other Included Resources)
-
-There is often a need to localize graphics, e.g. logos that have text on them.
-It's easy to tell GRIT to use different logos for different languages:
-
-&lt;!-- Other parts of .grd file snipped --&gt;
-&lt;includes first_id="2048"&gt;
-&lt;if expr="lang in \['de', 'en', 'es', 'fr', 'it'\]"&gt;
-&lt;include type="GIF" name="IDR_LOGO" file="logo.gif" /&gt;
-&lt;/if&gt;
-&lt;if expr="lang == 'ja'"&gt;
-&lt;include type="GIF" name="IDR_LOGO" file="ja_logo.gif" /&gt;
-&lt;/if&gt;
-&lt;if expr="lang == 'zh_cn'"&gt;
-&lt;include type="GIF" name="IDR_LOGO" file="zh_cn_logo.gif" /&gt;
-&lt;/if&gt;
-&lt;/includes&gt;
-&lt;!-- Other parts of .grd file snipped --&gt;
-
-Here we use the same logo for English and FIGS languages, and different logos
-for Japanese and Simplified Chinese.
-
-## Language-Specific Layout of Dialog Boxes
-
-It's common for dialog boxes to require a different layout for languages other
-than English, as most languages are much more verbose than English (30-40% on
-average). Of course the best way to handle this is to make the dialog boxes for
-English roomy enough to account for all languages, but this is not always
-possible due to aesthetics or project constraints. Likewise, other structured
-resources, such as HTML templates, sometimes need to have locale-specific
-versions.
-
-Although you *could* use a few &lt;if&gt; nodes to achieve something close to
-what you want, this would mean each of your different structured resource
-variants would need to be in English. It would be much more convenient to be
-able to have your variants in the target language (so that you can easily size
-e.g. the dialog correctly) yet pick up the source messages from the original
-structured resource. This is what the &lt;skeleton&gt;node is for.
-
-Here's how you would use it:
-
-&lt;!-- Other parts of .grd file snipped --&gt;
-&lt;structures first_id="4096"&gt;
-&lt;!-- The file specified in the &lt;structure&gt; node is used except when one
-of the expressions
-in &lt;skeleton&gt; nodes is true. --&gt;
-&lt;structure type="dialog" name="IDD_DIALOG" file="structured_resources.rc"&gt;
-&lt;!-- The variant_of_revision attribute is mandatory and intended to specify
-which source
-control revision number this skeleton variant is a variant of. Useful so that
-GRIT can
-automatically detect if you may need to update your skeleton (not implemented
-yet). --&gt;
-&lt;skeleton expr="lang == 'ja'" file="ja\\IDD_DIALOG\\IDD_DIALOG.rc"
-variant_of_revision="3" /&gt;
-&lt;/structure&gt;
-&lt;/structures&gt;
-&lt;!-- Other parts of .grd file snipped --&gt;
-
-To help you work with variant skeletons, there is a tool grit resize that will
-output a Microsoft Visual Studio project file and an .rc file containing the
-dialogs you request in the language you request. See grit help resize for more
-details.
-
-NOTE: The &lt;skeleton&gt; node currently only works for structures with
-*type="dialog"*. Support for it can be added to other structure types but
-usually what you want for e.g. HTML structures can usually be accomplished more
-easily by using separate files and selecting between them with &lt;if&gt; nodes
-(see the above section).
-
-## Language-Specific Messages
-
-Occasionally, there is a need for a message to have a different meaning in one
-language than it does in another. An example of this is that a Terms of Use
-document might have to have different clauses for the U.S. than it does for
-Germany. It's easy to give GRIT different variants of the same message to use
-for different languages:
-
-&lt;!-- Other parts of .grd file snipped --&gt;
-&lt;messages first_id="10240"&gt;
-&lt;if expr="lang != 'de'"&gt;
-&lt;message name="IDM_TERMS_OF_USE" desc="Do not translate this message into
-German"&gt;
-Use this product at your own risk.
-&lt;/message&gt;
-&lt;/if&gt;
-&lt;if expr="lang == 'de'"&gt;
-&lt;message name="IDM_TERMS_OF_USE" desc="This message only needs to be
-translated into German"&gt;
-Use this product at your own risk, except as limited by German law.
-&lt;/message&gt;
-&lt;/if&gt;
-&lt;/messages&gt;
-&lt;!-- Other parts of .grd file snipped --&gt;
-
-There are a couple of things to note here:
-
-* It's a good idea to use the 'desc' field (as done in the example
- above) to let the translators know if a message only needs to be
- translated into a particular language, or into all languages except
- some particular language(s).
-* You are providing a different **English** message to use for a
- particular language (German in this case) but what actually gets
- output to the German RC file is the German translation of that
- English message.
-
-## Getting Translations of Strings in Images
-
-You may have a bunch of images that contain some text, and wouldn't it be nice
-to be able to get that text translated along with everything else? You can do
-this by following this recipe:
-
-&lt;!-- ... --&gt;
-&lt;includes first_id="1024"&gt;
-&lt;!-- ... --&gt;
-&lt;include type="GIF" name="IDR_SUBMIT_BUTTON" file="submit_btn.gif" /&gt;
-&lt;/includes&gt;
-&lt;!-- ... --&gt;
-&lt;messages&gt;
-&lt;!-- ... --&gt;
-&lt;if expr="False"&gt;
-&lt;message name="IDM_MESSAGE_FOR_PICTURE_IDR_SUBMIT_BUTTON"&gt;
-Submit
-&lt;/message&gt;
-&lt;/if&gt;
-&lt;/messages&gt;
-&lt;!-- ... --&gt;
-
-The trick here is to match the message with the include by using a simple naming
-convention (the message node's 'name' is the include node's 'name' with
-"IDM_MESSAGE_FOR_PICTURE*" prefixed), and to prevent the message from getting
-included in your executable by putting it into an &lt;if expr="False"&gt; block
-(keep in mind that &lt;if&gt; blocks only affect output of resources to .rc
-files, and not to .xmb files or other translation interchange formats GRIT may
-support in the future).*
-
-After the translators have finished their job, you'll be able to find your
-image's translated text in the .xtb file for the language(s) in question.
-
-## Translate by Example
-
-In some cases, we have resources that difficult for a non-programmer to
-translate. An example is a date picture string, which might look like "M'/'d
-YYYY". A useful thing to do here is to get the translator to translate an
-example of what the result of applying that format string might look like. Then
-as a programmer you can take the translated example and translate it back into a
-picture string. The recipe for this would be:
-
-&lt;!-- ... --&gt;
-&lt;messages first_id="1024"&gt;
-&lt;!-- ... --&gt;
-&lt;if expr="False"&gt;
-&lt;message name="IDM_DATE_FORMAT_EXAMPLE_TO_TRANSLATE"&gt;
-6/6 2005
-&lt;/message&gt;
-&lt;/if&gt;
-&lt;message translateable="false" name="IDM_DATE_FORMAT"&gt;
-M'/'d YYYY
-&lt;/message&gt;
-&lt;/messages&gt;
-&lt;!-- ... --&gt;
-
-Here we add a message IDM_DATE_FORMAT_EXAMPLE_TO_TRANSLATE that gets sent for
-translation, but not added to your executable (because it's enclosed in an
-if-false block). The real resource is marked non-translatable, so it doesn't get
-sent for translation. Once the translators are done, you look for the message in
-the .xtb file, interpret the examples back into picture strings, and add them to
-your .grd file using conditional output to control which one gets used for which
-language:
-
-&lt;!-- ... --&gt;
-&lt;messages first_id="1024"&gt;
-&lt;!-- ... --&gt;
-&lt;if expr="False"&gt;
-&lt;message name="IDM_DATE_FORMAT_EXAMPLE_TO_TRANSLATE"&gt;
-9/23 2005
-&lt;/message&gt;
-&lt;/if&gt;
-&lt;if expr="lang == 'en'"&gt;
-&lt;message translateable="false" name="IDM_DATE_FORMAT"&gt;
-M'/'d YYYY
-&lt;/message&gt;
-&lt;/if&gt;
-&lt;if expr="lang == 'fr'"&gt;
-&lt;message translateable="false" name="IDM_DATE_FORMAT"
-internal_comment="Translation of example was '23/09 2005'"&gt;
-dd'/'MM YYYY
-&lt;/message&gt;
-&lt;/if&gt;
-&lt;/messages&gt;
-&lt;!-- ... --&gt;
-
-# Miscellaneous GRIT extensions and tips
-
-GRIT has several other features you can use to help with localization.
-
-## Using expandable variable to localize the link in html files
-
-In html files, it is common that the ref link needs to point to the localized
-page, for example,
-
-http://www.example.com/support/myproduct?lang={language}
-
-In order for the link to point to the correct language, when GRIT is generating
-the localized html files from the html template, we set the langparameter to an
-expandable GRIT variable
-GRITLANGCODE[?](https://code.google.com/p/grit-i18n/w/edit/GRITLANGCODE), so
-that it will be expanded to the correct langauge code.
-
-In a struct node, enable the HTML template to use expandable variable by setting
-expand_variables attribute to "true". Here is an example.
-
-&lt;structure name="AFINTRO.HTML" encoding="utf-8" file="afintro.html"
-type="tr_html" generateid="false" expand_variables="true"/&gt;
-
-In the html template, set the lang parameter of the link to
-GRITLANGCODE[?](https://code.google.com/p/grit-i18n/w/edit/GRITLANGCODE). Here
-is an example.
-
-&lt;a href="http://www.example.com/support/myproduct?lang=\[GRITLANGCODE\]"
-target="_blank"&gt;Go to site&lt;/a&gt;
-
-## Using expandable variable to generate HTML files for RTL languages
-
-To enable GRIT to generate right-to-left (RTL) layout HTML files for RTL
-languages, we can use the special expandable variable
-GRITDIR[?](https://code.google.com/p/grit-i18n/w/edit/GRITDIR).
-
-In struct node, enable the HTML template to use expandable variables by setting
-the expand_variables attribute to "true".
-
-&lt;structure name="AFINTRO.HTML" encoding="utf-8" file="afintro.html"
-type="tr_html" generateid="false" expand_variables="true"/&gt;
-
-In the HTML template, embed
-GRITDIR[?](https://code.google.com/p/grit-i18n/w/edit/GRITDIR) variable in the
-&lt;html&gt; tag, here is an example.
-
-&lt;html style="width:29em; height:24em"
-XMLNS:t="urn:schemas-microsoft-com:time" \[GRITDIR\]&gt;
-
-## Using expandable variable to set the language attribute in product version information correctly in VS_VERSION_INFO of rc file
-
-In order to have Language attribute of product version information show the
-correct language information for client application, the VS_VERSION_INFO section
-has to set the attributes using correct LCID and charset code. Again, we can use
-grit expandable variables to make life easier. Here is an example.
-
-VS_VERSION_INFO VERSIONINFO
-...
-BEGIN
-BLOCK "StringFileInfo"
-BEGIN
-BLOCK "\[GRITVERLANGCHARSETHEX\]"
-BEGIN
-...
-END
-END
-BLOCK "VarFileInfo"
-BEGIN
-VALUE "Translation", \[GRITVERLANGID\], \[GRITVERCHARSETID\]
-END
-END
-
-## Running processing after translation of structures
-
-Sometimes, it may be necessary to run additional processing of a translated file
-(structure) after translation has occurred. To do this, use therun_command
-attribute on the structure element. To add the filename to the command, use
-%(filename)s. For instance, to run type on a file after it's been processed by
-grit, do:
-
-&lt;structure name="AFINTRO.HTML" encoding="utf-8" file="afintro.html"
-type="tr_html" run_command="type %(filename)s"/&gt;
-
-# Migrating Your Project
-
-## Converting Your RC File to GRIT Format
-
-The grit rc2grd tool takes an existing RC file, which should be the RC file for
-the source language, and converts it into a .grd file.
-
-Because of the way grit rc2grd works, a bit of preparation of the original RC
-file is required.
-
-* grit rc2grd takes any existing comments on your string table
- messages and uses them as the description field for the message.
- * The description field for a message is output as a 'description'
- attribute to the .xmb file for your project, so that it can be
- shown to translators when they are translating the message.
- There is a separate field in .grd files, internal_comment, that
- can be used for comments about messages that are intended only
- for programmers, not for translators.
- * Comments belonging to a message are identified as all comments
- above that message after the last message parsed. This means if
- you use a commenting style where comments are immediately behind
- the message, you need to move them up above the message.
- * In your .rc file, you might have used a single comment for a
- whole block of messages. If you want this comment to be seen by
- translators when they edit any of these messages, you need to
- duplicate it to each of the messages instead of having it only
- at the start of the block.
-
-When you open up the .grd file, you will notice that some of your stringtable
-messages have been changed so that HTML code and printf orFormatMessage format
-specifiers have been replaced with placeholders (&lt;ph&gt; nodes). For all
-placeholders that were put in place of printf andFormatMessage format
-specifiers, the placeholder name starts as TODO_XXXX and the example is set to
-TODO. This allows you to go through the generated .grd file and replace the
-TODO_XXXX placeholder names with sensible names (ones that will help the
-translators) and the example text with an actual example of what might be put in
-place of this placeholder (for instance if the placeholder name is NUMBER then
-the example might just be "5").
-
-The .grd file that gets generated will refer to your original .rc file for any
-menus, dialogs and version information resources. You can continue using e.g.
-the VisualStudio[?](https://code.google.com/p/grit-i18n/w/edit/VisualStudio)
-resource editor to edit these resources in the original .rc file. However, once
-you've started building your project using the .rc file generated from the .grd
-file by grit build, you should delete stringtables and "includes" from your
-original .rc file as these should now be in the .grd file and you don't want
-people to get confused and edit them in the old location.
-
-Note that the grit rc2grd tool only supports symbolic resource IDs and will not
-transfer resources that are identified by string literals over to the .grd file.
-It is recommended not to use string literals as resource IDs. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/how-to-contribute-to-grit/index.md b/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/how-to-contribute-to-grit/index.md
deleted file mode 100644
index 9a61540db96..00000000000
--- a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/how-to-contribute-to-grit/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tools-we-use-in-chromium
- - Tools we use in Chromium
-- - /developers/tools-we-use-in-chromium/grit
- - GRIT
-page_name: how-to-contribute-to-grit
-title: How to contribute to GRIT
----
-
-Please feel free to contribute patches to GRIT. If you have a new project using
-GRIT, please let us know by sending a message to the developer group
-(<http://groups.google.com/group/grit-developer>), and join the user group
-(<http://groups.google.com/group/grit-users>). Also, note the [regression test
-plan](/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan) that
-describes how we ensure GRIT stays compatible with your project.
-
-Those who send the occasional patch should ask one of the project committers
-(one of {benrg, brettw, flackr, gfeher, joaodasilva, joi, mal, markusheintz,
-mnissler, newt, pastarmovj, sergeyu, thakis, thestig, tony}@chromium.org) to
-land their patch for them after review. Please read the following section on
-preparing patches for review.
-
-Preparing Patches
-
-You should read the [user's
-guide](/developers/tools-we-use-in-chromium/grit/grit-users-guide) and the
-[design
-overview](/developers/tools-we-use-in-chromium/grit/grit-design-overview) for
-background on the intended usage and design of GRIT. For more details or for
-help with how to design your patch, ask one of the project committers.
-
-We use the Chromium depot_tools to upload patches to the Rietveld review tool.
-Please [install the tools](/developers/how-tos/install-depot-tools) and then use
-git cl upload to upload a patch before you send it for review.
-
-Before sending patches for review, make sure grit.py unit runs without warnings.
-
-For large patches, it is advisable to discuss with committers on the project
-first, either by mailing a specific committer you think knows the code you are
-changing, or by mailing the developer list. It is also advisable to test large
-patches with Chromium before sending it for review, as it is the largest known
-open-source project using GRIT, so it exercises many features. To do this:
-
-* Follow the [Chromium instructions for setting up a
- checkout](/developers/how-tos), and make sure you are able to fetch
- and build the Chromium code.
-* Go to the local GRIT checkout at src/tools/grit and move to a new
- branch (e.g. git co -b my_grit_wip_branch)
-* Get the latest version of the repo by running git pull master
-* You can now add your changes, build Chromium, check that the build
- succeeds, check that gclient runhooks succeeds, etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/index.md b/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/index.md
deleted file mode 100644
index 447bb2a890f..00000000000
--- a/chromium/docs/website/site/developers/tools-we-use-in-chromium/grit/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tools-we-use-in-chromium
- - Tools we use in Chromium
-page_name: grit
-title: GRIT
----
-
-GRIT is the internationalization tool used by the
-[Chromium](http://www.chromium.org/) projects (the foundation for the [Google
-Chrome](http://www.google.com/chrome) browser) and for several internal projects
-at Google.
-
-GRIT is designed to be flexible and extensible enough to use for various
-different types of projects, although to date it has primarily been used for
-client-side software projects targeting Windows, Mac and Unix platforms.
-
-GRIT requires Python 2.6 or later.
-
-Further resources:
-
-* [User's
- Guide](/developers/tools-we-use-in-chromium/grit/grit-users-guide)
-* [Design
- Overview](/developers/tools-we-use-in-chromium/grit/grit-design-overview)
-* [Regression Test
- Plan](/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan)
-* [How to contribute to
- GRIT](/developers/tools-we-use-in-chromium/grit/how-to-contribute-to-grit) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tools-we-use-in-chromium/index.md b/chromium/docs/website/site/developers/tools-we-use-in-chromium/index.md
deleted file mode 100644
index 3763a15e9e0..00000000000
--- a/chromium/docs/website/site/developers/tools-we-use-in-chromium/index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: tools-we-use-in-chromium
-title: Tools we use in Chromium
----
-
-**Ninja - This is a command line build system which is much faster than building
-from IDEs such as MSVS or Xcode.**
-
-**gclient - This is a wrapper which lets us act on all the various projects as
-one - for instance, we use “gclient sync” and “gclient runhooks” often.**
-
-**GN - This generates our project files to use with Ninja, MSVS, and/or Xcode.
-It is run by gclient, we don’t normally call it directly. .gn files take the
-place of makefiles or build files from other projects.**
-
-**[GRIT](/developers/tools-we-use-in-chromium/grit)** - Short for "Google
-Resource and Internationalization Tool," this is a Google-created tool used by
-Chromium and usable by other projects.
-
-**Git - The base repository is using git hosted at
-<https://chromium.googlesource.com>.**
-
-**DiffMerge - A graphical tool to view diffs graphically on your own machine
-before commiting to your local branch. This can be hooked up to Git and
-Subversion (search for instructions on the web). There are other graphical diff
-viewers that we use, but this one will work on all main supported platforms
-(Win, Mac, Linux)**
-
-**Editor extensions - Emacs has some custom extensions to make chromium
-development easier -
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/emacs.md> (TODO:
-as we find others for other editors, add them here!)** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/chrome-in-chromeos-gardening/index.md b/chromium/docs/website/site/developers/tree-sheriffs/chrome-in-chromeos-gardening/index.md
deleted file mode 100644
index 9f711769cf4..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/chrome-in-chromeos-gardening/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: chrome-in-chromeos-gardening
-title: Chrome on Chrome OS Gardening
----
-
-There is a rotation of people who are tasked with helping maintain a healthy
-flow of versions of Chrome/Chromium into Chrome OS/Chromium OS.
-Chrome on Chrome OS Gardening Duties:
-1. Shadow Chromium sheriffs for Chromium OS-specific configurations.
-2. Keep Chrome OS UI BVTs green.
-
-3. Help fix the crashes labeled [TreeCloser on the Chromium
-waterfall.](https://code.google.com/p/chromium/issues/list?can=2&q=label%3ATreeCloser)
-
-Chrome on Chrome OS [gardening
-documentation](https://docs.google.com/document/d/13zse2T7S-rMaFEvd0HhFvF95GWJWbuwY-QfeWUlOwbg/edit#) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/handling-a-failing-test/index.md b/chromium/docs/website/site/developers/tree-sheriffs/handling-a-failing-test/index.md
deleted file mode 100644
index c0d7fdf8146..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/handling-a-failing-test/index.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: handling-a-failing-test
-title: Handling a failing test
----
-
-[TOC]
-
-**File a bug:**
-
-At [crbug.com](http://crbug.com) and leave as much context about the problem in
-the bug report. At least make sure to include the following in the bug report:
-
-* **Copy+paste the relevant parts of the log into the bug report** --
- it is not sufficient to give a URL to the bot log, as the logs
- eventually get deleted.
-* Comment detailing the action you took (disabled, on what platform).
-* Indicate if the test is Flaky (intermittently failing), constantly
- failing, timing out, crashing, etc.
-* Use Component Tests-Disabled.
-* Link to build logs for that test:
- <http://chromium-build-logs.appspot.com/>
-* Wherever possible, assign an owner who will actively look into it.
-* Wherever possible, add any applicable feature components, and use
- OWNERS or git log for that test file to assign an owner or cc
- someone who can actively look into it.
-* Handy shortlink for filing this type of bug:
- <http://bit.ly/disabled-test-tracker>
-
-[An example bug](http://crbug.com/130358) (Comment #0 demonstrates how to file
-the tracker, comment #1 shows the CL to disable the test)
-
-The document outlining the disabled tests process is
-[here](http://bit.ly/chrome-disabled-tests).
-
-### Disable the test:
-
-Prefix DISABLED_ to the name of the crashing/timing out test.
-
-```none
-TEST(ExampleTest, CrashingTest) {
-```
-
-becomes
-
-```none
-// Crashes on all platforms.  <http://crbug.com/1234>
-TEST(ExampleTest, DISABLED_CrashingTest) {
-```
-
-If the test is crashing/timing out on a proper subset of the major platforms
-(some, but not all), use an #ifdef to only disable the test for those platforms.
-
-```none
-// Crashes on Mac/Win only.  <http://crbug.com/2345>
-#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
-#define MAYBE_CrashingTest DISABLED_CrashingTest
-#else
-#define MAYBE_CrashingTest CrashingTest
-#endif
-TEST(ExampleTest, MAYBE_CrashingTest) {
-```
-
-Notice the use of the MAYBE_ moniker: it's possible that the name of the test is
-an identifier in the testing code, e.g., the name of the test is the same name
-as the method being tested in the test.
-
-If the test is failing only on non-CQ, FYI bots (e.g. only when a specific WIP
-feature is enabled), then consider disabling the test using a filter file placed
-under //testing/buildbot/filters (and referring to the filter file in bot
-configuration using --test-launcher-filter-file).
-
-### FAILS_ and FLAKY_ are no longer used:
-
-Previously FAILS_ and FLAKY_ prefixes were used to continue running tests and
-collecting results. Due to build bot slowdowns and false failures for developers
-we no longer do so. This was discussed in the Feb 2012 [Disabling Flaky Tests
-thread](https://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/fcec09fc659f39a6/ef71cbf47185c095#).
-
-FAILS_ and FLAKY_ are ignored by the builders and not run at all. To collect
-data for potential flaky tests, just enable them as normal, the builder will
-automatically retry any tests 3 tests, so the flakiness shouldn't cause any tree
-closures (but the flakiness dashboard will still be told of those flakes).
-
-#### When you see "Running TestCase" in a browser_tests test:
-
-Follow the appropriate step above, wrapping C++ lines with `GEN('');` See [WebUI
-browser_tests - conditionally run a
-test...](/Home/domui-testing/webui-browser_tests#TOC-Conditionally-run-a-test-using-gene)
-
-**Disabling Java Tests:**
-
-Add @DisabledTest or @FlakyTest as explained in [Android
-Tests](/developers/testing/android-tests). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/index.md b/chromium/docs/website/site/developers/tree-sheriffs/index.md
deleted file mode 100644
index 55ff6448c58..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: tree-sheriffs
-title: Tree Sheriffs
----
-
-#### For Chromium OS Sheriffing see [Sheriff FAQ: Chromium OS](/developers/tree-sheriffs/sheriff-details-chromium-os)
-
-## Contacting Sheriffs
-
-The currently oncall sheriffs can be viewed in the top-left corner of the [Chromium Main Console](https://ci.chromium.org/p/chromium/g/main/console). You can also get in touch with sheriffs using the [#sheriffing Slack channel](https://chromium.slack.com/messages/CGJ5WKRUH/).
-
-### What is a sheriff?
-
-A sheriff's responsibility is to keep the Chromium main and branches green (tests are passing on all platforms) and open (changes can land). If a failure occurs, sheriffs will communicate, track down the cause of the breakage and the people responsible as possible. Chrome sheriffs are staffed by Chrome committers. For information on managing Chrome Sheriff rotations and How-Tos, see [Chrome Sheriffing](http://goto.google.com/chrome-sheriffing).
-
-**First time sheriff?** Learn more about our Sheriffing Philosophy, please read [How to be a Sheriff](https://goto.google.com/chrome-sheriffing-how-to).
-
-### Available Sheriff Rotations
-
-* [Chromium Trunk
- Sheriffs](https://goto.google.com/chrome-trunk-sheriffing)
-* [Chrome Branch
- Sheriffs](https://goto.google.com/chrome-branch-sheriffing)
-* [Chrome on Android Build
- Sheriffs](https://goto.google.com/chrome-android-sheriffing)
-* [Chrome on iOS
- Sheriffs](http://goto.google.com/chrome-ios-sheriffing)
-* [GPU Pixel Wranglers](http://goto.google.com/gpu-pixel-wrangler)
-* [Performance Regression
- Sheriffs](http://goto.google.com/chrome-perf-regression-sheriffing)
-* [Perfbot Health
- Sheriffs](http://goto.google.com/perf-bot-health-sheriffs)
-* [Security
- Sheriffs](http://goto.google.com/chrome-security-sheriff-doc)
-
-### **Chrome OS Sheriffs**
-
-* ## [Chrome OS Sheriffs](http://goto.google.com/cros-sheriffing)
-
-### Joining a sheriff rotation
-
-The Chrome team runs a variety of sheriff rotations, and the process for joining them varies:
-
-* To join, leave, or request other membership modifications to a sheriff rotation, file a bug [here](https://bugs.chromium.org/p/chromium/issues/entry?summary=Sheriff+rotation%3A+%24ADD_OR_REMOVE_USER&comment=What+modifications+to+a+sheriff+rotation+would+you+like+made%3F%0D%0A%0D%0AWhich+sheriff+rotation%3F&labels=Restrict-View-Google%2CPri-2%2CSheriff-Rotation-Chromium%2CLT-Trooper&cc=benhenry%40chromium.org%2Cefoo%40chromium.org&status=Untriaged&components=Infra%3ESheriffing%3ERotations).
-* Specify the Sheriff rotation you would like to join in thedescription of the bug filed.
-
-Some rotations might be timezone specific (Branch rotation is only monitored by PT sheriffs) while others (i.e. trunk sheriff rotation) are spread across multiple timezones across the world. You should be joining a rotation with an existing shifts during your local timezone.
-
-Once you join a sheriff rotation, get started by reading [How to be a Sheriff](https://goto.google.com/chrome-sheriffing-how-to). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-04-23 at 8.04.15 AM.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-04-23 at 8.04.15 AM.png.sha1
deleted file mode 100644
index 4f1d393bdc3..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-04-23 at 8.04.15 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-26dd6dcb1f684e328d9f352949ab9bcf3bdf6a14 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.23.35 AM.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.23.35 AM.png.sha1
deleted file mode 100644
index 08ad898fea1..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.23.35 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f753317ccdb2b4bd3872dfc81522c64084afd242 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.29.17 AM.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.29.17 AM.png.sha1
deleted file mode 100644
index 5a58f56aaf6..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.29.17 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-75412bece0e4a8807ecd3f1a45b4b0215548635a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.33.54 AM.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.33.54 AM.png.sha1
deleted file mode 100644
index 784b9e95a2e..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.33.54 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-80dd13378148aa36dc57c4ce124caaa0499d1568 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.39.38 AM.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.39.38 AM.png.sha1
deleted file mode 100644
index 96a894144a3..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.39.38 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7c1f4c8e8126e468be85de8208e8a5cefab38c9e \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.50.40 AM.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.50.40 AM.png.sha1
deleted file mode 100644
index a12b4aa2ece..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/Screen Shot 2013-10-27 at 10.50.40 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8d168f62f68f4e2ed01daffc795a67ec9630f3bc \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/SheriffBadge2.jpg.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/SheriffBadge2.jpg.sha1
deleted file mode 100644
index e0d5f0f9547..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/SheriffBadge2.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3c6acdabd0f614b2366ca0af1b6b0c27f5c72e55 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screen Shot 2013-05-28 at 6.18.39 PM.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screen Shot 2013-05-28 at 6.18.39 PM.png.sha1
deleted file mode 100644
index f838a235bbc..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screen Shot 2013-05-28 at 6.18.39 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-243c7b9a448ed3a82ce15cb0fa4cda18b676bb14 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screenshot from 2013-08-20 09_14_59.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screenshot from 2013-08-20 09_14_59.png.sha1
deleted file mode 100644
index 2e66e9c254c..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/Screenshot from 2013-08-20 09_14_59.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce590750ded44e0768e3f98091a4667c672309ec \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/index.md b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/index.md
deleted file mode 100644
index cbb53934346..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-- - /developers/tree-sheriffs/perf-sheriffs
- - Perf Sheriffing
-page_name: bisecting-performance-regressions
-title: Bisecting Performance Regressions
----
-
-Latest docs are at:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed/bisects.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/index.md b/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/index.md
deleted file mode 100644
index b65b8b5c478..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/perf-sheriffs/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: perf-sheriffs
-title: Perf Sheriffing
----
-
-Perf sheriffing has now been split into two separate rotations:
-
-* [**Performance Regression
- Sheriffing**](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/speed/perf_regression_sheriffing.md)
- ([internal
- doc](http://goto.google.com/chrome-perf-regression-sheriffing))
-* [**Perfbot Health
- Sheriffing**](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed/bot_health_sheriffing/main.md)
- ([internal doc](http://goto.google.com/perf-bot-health-sheriffs)) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Builders.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Builders.png.sha1
deleted file mode 100644
index 0a26502c4af..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Builders.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f851bad7a204d1d86e210d22b4c21132a880840b \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/ChromeOS Parallel CQ - Linear view of CLs.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/ChromeOS Parallel CQ - Linear view of CLs.png.sha1
deleted file mode 100644
index dd0a22dd9e4..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/ChromeOS Parallel CQ - Linear view of CLs.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d4a302ea0d0f101ea19fe951b6e8709a3f39e68a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Screenshot.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Screenshot.png.sha1
deleted file mode 100644
index 6adf65b3091..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Screenshot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-92d6e69b472b6773ce703a8f6db726aad3e8c20d \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Test Orchestrator.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Test Orchestrator.png.sha1
deleted file mode 100644
index a71a7cf078e..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/Test Orchestrator.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-939cf97aaaf2dd1e4342f3dbaffa855e2170b8ad \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/cloud-storage.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/cloud-storage.png.sha1
deleted file mode 100644
index f2b5c779172..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/cloud-storage.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-46a93ec66ef6641ff0c6f336e4c5730d72fa3712 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/crash-example.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/crash-example.png.sha1
deleted file mode 100644
index 8cf77eb5a9a..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/crash-example.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0ec25cc137acff35e0d9bf22f35c9ce78da7097a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/index.md b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/index.md
deleted file mode 100644
index 6ddae04a305..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium-os/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: sheriff-details-chromium-os
-title: 'Sheriff FAQ: Chromium OS'
----
-
-Chrome OS sheriffing is to keep developers happy by keeping the tree green.
-
-### Responsibilities
-
-These threefold purposes apply to sheriffs:
-
-* Make sure tip-of-tree (ToT) breakages are identified and addressed
- in a timely fashion.
-* Manually watch over our build system in ways automation
- doesn‘t/can’t do.
- * Post-submit builders
- * *NEW* Release builders
-
-For more information on how to be a Chrome OS Sheriff, see [Chrome OS Sheriffing
-Guide](https://goto.google.com/cros-sheriff-ref). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/Waterfall.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/Waterfall.png.sha1
deleted file mode 100644
index bb0ce1dce05..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/Waterfall.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7df4540b33a741b0bf3f40605eacd8661449e368 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/index.md b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/index.md
deleted file mode 100644
index 3aa8c147543..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: sheriff-details-chromium
-title: 'Sheriff Details: Chromium'
----
-
-This page has been moved under [Chromium Trunk
-Sheriffing](http://goto.google.com/chrome-trunk-sheriffing) and [Chrome
-Sheriffing How-To](http://goto.google.com/chrome-sheriffing-how-to).
-
-Contacting Sheriffs
-
-The currently oncall sheriffs can be viewed in the top-left corner of the
-[Chromium Main Console](https://ci.chromium.org/p/chromium/g/main/console). You
-can also get in touch with sheriffs using the [#sheriffing Slack
-channel](https://chromium.slack.com/messages/CGJ5WKRUH/). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/tree_status.png.sha1 b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/tree_status.png.sha1
deleted file mode 100644
index d1fa98b50e7..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-details-chromium/tree_status.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8c935aa0d10bb8b6af6c766ea152698452ef02a4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-o-matic/index.md b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-o-matic/index.md
deleted file mode 100644
index 174b4e88b2a..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-o-matic/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: sheriff-o-matic
-title: Sheriff-O-Matic
----
-
-[**sheriff-o-matic.appspot.com**](https://sheriff-o-matic.appspot.com/)
-
-Sheriff-O-Matic only shows you things that are failing right now. It tries to
-group failures for you that have the same regression range and show you the most
-important problems at the top.
-
-## Additional information on Sheriff-O-Matics has moved to [Chrome Sheriffing Tooling](http://goto.google.com/chrome-sheriffing-tooling). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-philosophy/index.md b/chromium/docs/website/site/developers/tree-sheriffs/sheriff-philosophy/index.md
deleted file mode 100644
index ce6128d0ec9..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriff-philosophy/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: sheriff-philosophy
-title: Sheriff Philosophy
----
-
-Sheriffs have one overarching role: to ensure that the Chromium build
-infrastructure is doing its job of helping developers deliver good software.
-Every other sheriff responsibility flows from that one. In priority order,
-sheriffs need to ensure that:
-
-1. **The tree is open**, because when the tree is closed nobody can
- make progress;
-2. **New test failures are not introduced**, because they weaken our
- assurance that we're shipping good code;
-3. **Existing test failures are repaired**, for the same reason
-
-The file is continued under [Chrome Sheriffing How
-To - Internal Only](http://goto.google.com/chrome-sheriffing-how-to). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/tree-sheriffs/sheriffing-bug-queues/index.md b/chromium/docs/website/site/developers/tree-sheriffs/sheriffing-bug-queues/index.md
deleted file mode 100644
index fd390e66232..00000000000
--- a/chromium/docs/website/site/developers/tree-sheriffs/sheriffing-bug-queues/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/tree-sheriffs
- - Tree Sheriffs
-page_name: sheriffing-bug-queues
-title: Sheriffing Bug Queues
----
-
-This file has moved to [Chrome Sheriffing How
-To](http://goto.google.com/chrome-sheriffing-how-to) and information on
-Sheriff-O-Matics to [Chrome Sheriffing
-Tooling](http://goto.google.com/chrome-sheriffing-tooling). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/triggered-reset-api/index.md b/chromium/docs/website/site/developers/triggered-reset-api/index.md
deleted file mode 100644
index 77db7606ca5..00000000000
--- a/chromium/docs/website/site/developers/triggered-reset-api/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: triggered-reset-api
-title: Chromium Triggered Reset API (Windows-only)
----
-
-## **Chromium (and Google Chrome) on Windows provide a way for third parties to trigger a reset flow the next time a Chromium profile is opened by the user.**
-
-## **The reset flow will prompt the user to reset their settings to the built-in default state of the browser when it was first installed on the system.**
-
-## **This mechanism is intended to be used by third parties implementing clean up tools who wish to provide a way to prompt a user to clean their settings. If the user accepts the prompt, then their homepage, new tab page and search engine will be set back to factory defaults, all of their extensions will be disabled (though not removed) and all pinned tabs will be unpinned.**
-
-## **The prompt the user receives will look like this:**
-
-## **<img alt="image" src="https://lh3.googleusercontent.com/rtQtZI_dBoD6D6tP8PkDQBw5SCDpUCQoEbzD01nT_ekbpgfalNlnfugK2GcogB6NA3yfFFqGvQh9OI3e37uFcRpzfqNF6Fiae0WxNCoypPbySshE2STyT4wFjAQupMOyGIHlaU8p" height=415 width=619>**
-
-## How to use it
-
-## **Chromium on Windows exposes the triggered profile reset API through the registry, a place that is easy and convenient for a third party Windows tool to write to.**
-
-## **To use the triggered reset flow, the third party tool will :**
-
- ## **Create (or open) the registry key
- HCKU\\Software\\Chromium\\TriggeredReset or
- HCKU\\Software\\Google\\Chrome\\TriggeredReset, depending which distribution
- you are targeting.**
-
- ## **Set a REG_SZ value called "ToolName" to the name of the tool. This
- string will be displayed in a notification UI. The "ToolName" should be just
- the name of the tool, e.g. "AwesomeAV".**
-
- ## **Set a REG_QWORD value called "Timestamp" with the timestamp of the
- reset. This value should be obtained from a call to
- ::GetSystemTimeAsFileTime(). The value will be persisted in a reset profile
- and will be used to avoid multiple resets. The value will not be cleared
- from the registry by Chromium.**
-
-## **The above steps should be performed for the user profile hive (e.g. under HKCU) of all users on the system the tool wishes to reset.**
-
-## **On [Profile](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/profiles/profile.h&l=70) creation, Chromium will inspect the timestamp and if different from the persisted value, it will notify the user and trigger a profile reset flow. This will be done for each profile that is created.**
-
-## **To avoid resetting future new Profiles, when a Profile is first created any timestamp currently present in the registry will be copied in without a reset.**
-
-## FAQs
-
-### What about users with multiple Chromium/Chrome profiles?
-
-## **The reset UI flow is per-profile, so a user with multiple Chromium/Chrome profiles will see multiple reset prompts.**
-
-### What if a user creates a new profile after I set the appropriate registry values?
-
-## Subsequently created profiles will not experience a reset flow. Only profiles that existed before the registry values are set will be prompted for reset. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/u-boot/index.md b/chromium/docs/website/site/developers/u-boot/index.md
deleted file mode 100644
index acb3cc9b9d3..00000000000
--- a/chromium/docs/website/site/developers/u-boot/index.md
+++ /dev/null
@@ -1,487 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: u-boot
-title: U-Boot
----
-
-[TOC]
-
-### Introduction
-
-Das U-Boot is the boot loader used by Chromium OS on ARM. This page provide some
-basic information about our use of it. See the [official U-Boot
-page](http://www.denx.de/wiki/U-Boot) for more information.
-
-### Variants
-
-Chrome OS uses a single variant of U-Boot for all Tegra2 boards and all
-purposes. The same applies for Exynos, although this is a different image from
-Tegra2. This is a departure from the previous approach of having different
-variants for each purpose (stub, developer, recovery, normal, flasher) and each
-board (Seaboard, Aebl, Kaen).
-Both of these changes are enabled by run-time configuration in U-Boot.
-Traditionally, U-Boot's configuration has been set by `CONFIG_` options. We
-still use `CONFIG_` options to select which functionality / drivers is included
-in an image. However, we avoid using `CONFIG_` options that simply configure
-that functionality. For example, `CONFIG_USB_EHCI` is used to include the EHCI
-functionality for USB, but we do not use `CONFIG_TEGRA2_USB0`to specify the
-physical address of the first USB port.
-We use *flattened device tree* (FDT) to hold this run-time configuration. FDT
-consists of a number of nodes each with a list of properties. It is easy to add
-new nodes and properties, and a **libfdt** library exists for reading and
-writing them. For more information about FDT, [see the specification
-document](https://www.power.org/resources/downloads/Power_ePAPR_APPROVED_v1.0.pdf)
-before you continue reading here. You might also find the U-Boot
-[doc/README.fdt-control](http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=doc/README.fdt-control;h=85bda035043497d8d23aed8a436e24d630c60937;hb=2c734cd932b53b46e9f89e4f5db9360afc459ae6)
-file useful.
-***Note*:** as of March 2012 we still use '**seaboard**' (rather than
-'**generic**') as the name of our generic Tegra2 board. This may change in the
-future.
-
-### FDTs
-
-We have various types of nodes in the **FDT** and they can be categorized as
-follows:
-
-* **SOC peripherals** - describe an SOC peripheral
- * includes its physical address and other properties needed by the
- driver.
- * For example, *usb@0xc5000000* is a USB peripheral located at
- 0xc5000000, which includes a 'host-mode' property indicating
- that this port should be configured to run in host mode.
-* **Board peripherals** - describe a chip on the board, in a similar
- way to an SOC peripheral
- * Normally, these are linked to an SOC peripheral using a phandle.
- * For example, the *lcd* node describes the LCD attached to the
- board (its resolution, pixel clock, timings, backlight GPIO,
- etc.) and then links to the display peripheral (e.g.,
- *display1*).
-* **Aliases** - assign a new name to a peripheral instance
- * Some peripherals have multiple instances. It is often useful to
- assign an order to the instances. This is done by numbering the
- nodes within the aliases section.
- * For example, *usb0* and *usb1* each point to a USB node - this
- tells U-Boot that *usb0* (which might point to */usb@c5008000*)
- is the first USB port, and *usb1* is the second.
- * Another example is the *console* alias which points to the UART
- to be used as the U-Boot console.
-* **config** - generic machine configuration information
- * For example, we use it to hold the Linux machine ID.
-* **chromeos-config** - this is Chrome OS-specific configuration.
- * We store the start address of U-Boot (*textbase*) and the type
- of verified boot we are using (*twostop*).
-
-FDT-based configuration is enabled with the `CONFIG_OF_CONTROL` option. FDT
-files are stored in board/nvidia/dts or board/samsung/dts.
-FDT can be packaged with U-Boot in two ways:
-
-* `CONFIG_OF_EMBED` (only for debugging / development) - it is built
- as an object file and linked to U-Boot
-* `CONFIG_OF_SEPARATE` - it is built separately and then appended to
- the U-boot binary (u-boot.bin) using cat or similar. U-Boot locates
- it at start-up.
-
-We use the second approach for Chrome OS, since it allows cros_bundle_firmware
-to create an image for any board without needing to look around inside U-Boot to
-change the FDT.
-
-### fdtdec
-
-Initially, we used a library called fdt_decode to decode FDT blobs on behalf of
-different classes of drivers. That approach may become partially useful in
-future, but we decided to drop it for upstream. There is a still an fdtdec
-library which helps a lot, but drivers must decode their own nodes.
-
-### Header Files
-
-U-Boot uses header files for configuration. Since the FDT change this has become
-very simple. We have:
-
-* *chromeos_seaboard_config* - top-level file for verified boot. It
- simply includes *seaboard.h* and *chromeos.h*.
-* *chromeos_daisy_config* - equivalent to the above for exynos.
-* *seaboard.h* - Seaboard-specific config, but, in fact, is used for
- all Tegra2 boards which use FDT for config. It includes
- *tegra2-common.h*. Most of this file is hidden behind '`#ifdef
- CONFIG_OF_CONTROL`' since it is not needed with FDT-based
- configuration.
-* *tegra2-common.h* - options common to all Tegra2 boards.
-* *chromeos.h* - options to enable verified boot. In particular
- `CONFIG_CHROMEOS` and `CHROMEOS_BOOTARGS` are defined here.
-
-### Profiles
-
-***TODO***: Add description of cros_choose_profile to a more generic page when
-one is created.
-In order to simplify the handling of different boards and board variants, a
-`cros_choose_profile` tool is used:
-
-```none
-cros_choose_profile --help
-USAGE: /usr/bin/cros_choose_profile [flags] args
-flags:
-  --board:  The name of the board to set up. (default: 'tegra2_seaboard')
-  --build_root:  The root location for board sysroots. (default: '/build')
-  --board_overlay:  Location of the board overlay. (default: '')
-  --variant:  Board variant. (default: '')
-  --profile:  The portage configuration profile to use. (default: '')
-  -h,--[no]help:  show this help (default: false)
-```
-
-The `cros_choose_profile` utility selects which board and profile we are using.
-It is normally run by the `setup_board` script.
-
-### Ebuilds
-
-The main U-Boot-related ebuilds are in
-`src/third_party/chromiumos-overlay/sys-boot`:
-
-* `chromeos-u-boot`
- * Builds all the variants of U-Boot by default. If you only want
- one you can build with a `USE` flag, such as `USE='developer
- emerge-tegra2_seaboard' chromeos-u-boot`.
- * Each variant is built into its own subdirectory in the temporary
- build directory: developer, recovery, etc.
- * The variants are then installed into the
- `chroot/build/${BOARD}/firmware` directory, named
- `u-boot-normal.bin`, `u-boot-developer.bin`, etc. For Seaboard
- this directory is `chroot/build/tegra2_seaboard/`firmware.
- * Also installed is U-Boot's `include/autoconf.mk` and
- `System.map`, but only for the first variant built. These are
- used by `chromeos-bios` (see later).
- * (note that `virtual/u-boot` pulls this ebuild in)
-* `tegra-bct-${BOARD}`
- * *(This is for Tegra only. We would prefer to build these files
- in cros_bundle_firmware instead, as is now done for FDTs.)*
- * There is one of these for each board and they provide the
- `vritual/tegra-bct` package. This ebuild selects configuration
- files for Flash (SPI or NAND) and SDRAM timings as required.
- * Since this ebuild inherits `tegra-bct`, these functions will be
- used for building. See
- `src/overlays/overlay-tegra2/eclass/tegra-bct.eclass`
- * The eclass functions set up a single configuration file
- consisting of the flash and SDRAM settings, then call
- `cbootimage` to turn these into a bct file.
- * This bct file is installed into
- `chroot/build/${BOARD}/u-boot/bct` as `board.bct` and
- `board.cfg`.
-* `chromeos-bootimage`
- * Run `cros_bundle_firmware` to create two firmware images for the
- board. This consists of U-Boot, FDT settings, recovery-mode
- screens and the required keys for performing a verified boot.
-
-### Add New Boards to Ebuilds
-
-The variables `U_BOOT_CONFIG_USE` and `U_BOOT_FDT_USE` are currently used to
-specific the FDT file for U-Boot. These variables are set in the `make.defaults`
-file for the board. For example, for tegra2 boards this is in
-`src/overlays/overlay-tegra2/profiles/base/make.defaults`.
-
-There is now no need to figure out the FDT or config in the ebuild - you can
-just use these variables directly.
-
-To check the settings for your board:
-
-```none
-emerge-tegra2_seaboard --info |tr ' ' '\n' |grep U_BOOT
-```
-
-## Building U-Boot
-
-There are two main U-Boot repositories on the server: the stable `u-boot.git`
-and the unstable `u-boot-next.git`. Normally you will use the stable repo.
-
-### From ebuild
-
-U-Boot is built from an ebuild like this:
-
-```none
-emerge-${BOARD} chromeos-u-boot
-```
-
-For example for the Seaboard:
-
-```none
-emerge-tegra2_seaboard chromeos-u-boot
-```
-
-This builds it from scratch which takes about 40s on a fast machine.
-
-### Incremental build
-
-If you have run `cros_workon start chromeos-u-boot` (followed by `repo sync
-u-boot`) then you can use the incremental build option which takes perhaps 12s.
-
-```none
-bin/cros_workon_make chromeos-u-boot
-```
-
-This is the recommended approach since it sets up the options for your board
-automatically. If you look in the output of this command you should see the make
-command it is using. If you really want to, you can use this command, which
-takes the build time down to around 6s.
-
-### Build script
-
-NOTE: Advanced U-Boot coders only! This can reduce an incremental build to about
-1s on a fast machine (16 core).
-If you are working in `u-boot` and constantly flashing U-Boot for different
-Tegra2 boards then you might find this script useful. Run it within your U-Boot
-source tree. Beware this is not for beginners. Before you use this script, read
-it through and compare it with the U-Boot ebuild. You can select an FDT to use
-to change the board.
-Note: this script could be enhanced to output the resulting u-boot binary to a
-subdirectory with make ...O=&lt;target_dir&gt;.
-
-```none
-#! /bin/sh
-# Script to build U-Boot without an ebuild and with upstream config files,
-# then write it to SPI on your board.
-#
-# It builds for seaboard by default - use -b to change the board.
-# For an incremental board, run with no arguments. To clean out and reconfig,
-# pass the -c flag.
-compiler=armv7a-cros-linux-gnueabi-
-if grep -sq Gentoo /etc/lsb-release; then
-    chroot=y
-    # location of src within chroot
-    SRC_ROOT=~/trunk/src
-    gcc=gcc
-else
-    # Change this to point to your source dir
-    SRC_ROOT=/c/cosarm/src
-    BIN=${SRC_ROOT}/../chroot/usr/bin
-    compiler=${BIN}/${compiler}
-    export PATH=${BIN}:${PATH}
-    gcc=$BIN/gcc
-    echo $PATH
-fi
-. "${SRC_ROOT}/scripts/lib/shflags/shflags"
-DEFINE_boolean config "${FLAGS_FALSE}" "Reconfigure and clean" c
-DEFINE_boolean good "${FLAGS_FALSE}" "Use known-good U-Boot" g
-DEFINE_string board "seaboard" \
-    "Select config: chromeos_tegra2_<board>_<config>_config" b
-DEFINE_boolean separate "${FLAGS_TRUE}" "Separate device tree" s
-DEFINE_boolean verified "${FLAGS_FALSE}" "Enable verified boot" V
-DEFINE_string dt "seaboard" \
-    "Select device tree: seaboard, kaen, aebl" d
-DEFINE_boolean build "${FLAGS_TRUE}" "Build U-Boot" B
-# Parse command line
-FLAGS "$@" || exit 1
-eval set -- "${FLAGS_ARGV}"
-if [ "$FLAGS_build" -eq "${FLAGS_FALSE}" ]; then
-    if [ "$FLAGS_config" -eq "${FLAGS_TRUE}" ]; then
-        FLAGS_config=${FLAGS_FALSE}
-        echo "Warning: disabled -c since -B was given"
-    fi
-fi
-cd $SRC_ROOT/third_party/u-boot/files
-target=all
-if [ -n "${FLAGS_ARGV}" ]; then
-  target=${FLAGS_ARGV}
-fi
-if [ "$FLAGS_config" -eq "${FLAGS_FALSE}" ]; then
-    # Get the correct board for cros_write_firmware
-    board=$(grep BOARD include/config.mk | awk '{print $3}')
-    if [ -z "${FLAGS_board}" -a "$board" != "${FLAGS_board}" ]; then
-        echo "Warning: U-Boot is configured for $board, " \
-            "forcing reconfigure"
-        FLAGS_config=${FLAGS_TRUE}
-    fi
-    FLAGS_board=${board}
-fi
-BASE+="-s "
-BASE+="-j15 "
-BASE+="ARCH=arm CROSS_COMPILE=${compiler} USE_PRIVATE_LIBGCC=yes "
-BASE+="--no-print-directory "
-BASE+="HOSTCC=$gcc HOSTSTRIP=true VBOOT=/build/tegra2_${FLAGS_board}/usr "
-#BASE+="VBOOT_DEBUG=1 "
-if  [ "$FLAGS_separate" -eq "${FLAGS_TRUE}" ]; then
-    BASE+="DEV_TREE_SEPARATE=true "
-fi
-BASE+="DEV_TREE_SRC=tegra2-${FLAGS_dt} "
-board=${FLAGS_board}
-if [ "${FLAGS_verified}" -eq "${FLAGS_TRUE}" ]; then
-        FLAGS_board=chromeos_tegra2_twostop
-fi
-# echo $BASE
-if [ "$FLAGS_config" -eq "${FLAGS_TRUE}" ]; then
-    make $BASE distclean
-    make $BASE ${FLAGS_board}_config || { echo "Make failed"; exit 1; }
-    make $BASE dep
-fi
-if [ "$FLAGS_good" -eq "${FLAGS_TRUE}" ]; then
-    IMAGE=/build/tegra2_${FLAGS_board}/u-boot/u-boot-developer.bin
-else
-    if [ "$FLAGS_build" -eq "${FLAGS_TRUE}" ]; then
-        make $BASE $target || { echo "Make failed"; exit 1; }
-    fi
-    IMAGE=u-boot.bin
-fi
-if  [ "$FLAGS_separate" -eq "${FLAGS_TRUE}" ]; then
-    cat $IMAGE u-boot.dtb >u-boot.bin.dtb
-    IMAGE=u-boot.bin.dtb
-fi
-bmp="/home/$USER/trunk/src/third_party/chromiumos-overlay/sys-boot/"
-bmp+="chromeos-bootimage/files/default.bmpblk"
-cros_bundle_firmware -w -u u-boot.bin -s -b tegra2_aebl --bootsecure \
-    --bootcmd vboot_twostop --bmpblk ${bmp}
-#--add-config-int silent_console 1
-```
-
-## Flashing U-Boot
-
-The method here depends on the platform you are using. Please see the
-documentation on [cros_bundle_firmware](/chromium-os/firmware-update) also.
-
-### NVidia Tegra2x
-
-There is a firmware writing utility available which can reflash U-Boot on your
-board. For example, for Seaboard you can write the recovery U-Boot with:
-
-```none
-# Connect USB A-A cable to top USB port, reset with recovery button held down
-If you have a T20-seaboard (no camera attachment on top), please build/flash your firmware with:
-USE=tegra20-bct emerge-tegra2_seaboard tegra-bct chromeos-bootimage
-cros_write_firmware -b tegra2_seaboard \
-                    -i /build/tegra2_seaboard/u-boot/legacy_image.bin
-If you have a T25-seaboard (black camera box above the screen), please build/flash your firmware with:
-emerge-tegra2_seaboard tegra-bct chromeos-bootimage
-cros_write_firmware -b tegra2_seaboard \
-                    -i /build/tegra2_seaboard/u-boot/legacy_image.bin
-```
-
-The BCT controls early memory initialization on Tegra2 CPUs. It is something
-that is customized for every variant of every board.
-
-We need a different BCT for T20 and T25 Seaboards. Up until this point we have
-just used an old version of the T20 BCT for both products. This is not such a
-great thing for various reasons, one of which is problems with DVFS. Since we
-are planning to enable DVFS realsoonnow(TM), you will need this change.
-
-One thing to note: you probably shouldn't put "official" builds onto your T20
-Seaboard, since they will (I think) clobber the firmware with the T25 version
-(the default). You've been warned.
-
-## Configuring U-Boot Environment
-
-U-boot accepts user commands to set up its execution environment. The problem
-with the current implementation is that at the default console baud rate of
-115200 u-boot is not running fast enough and the UART gets easily overrun in
-case a user tries pasting text through terminal connected to the console.
-
-The attached `expect` script allows to work around the problem. The script is
-just an example, which can be used it as follows. Start its execution on the
-workstation which has a USB port connected to the target console
-
-```none
-./ttyusb <file with u-boot script>
-```
-
-and then hit reset on the target (if it is not already in u-boot console mode).
-`<file with u-boot script>` is a text file including a set of u-boot commands,
-one per line. Lines starting with # are ignored. `ttyusb` will send the commands
-to the console, character by character, making sure that all characters are
-echoed and the `CrOS> `prompt is returned after each command.
-Once all commands are executed, the terminal session becomes the console
-terminal for the target. To exit the console session type `^a`.
-The serial port device is hardcoded in the script to `/dev/ttyUSB1,` edit your
-copy of to get a different tty device used, if necessary.
-
-## Memory Map
-
-### Tegra 2x
-
-Current (as of 2011-09-13):
-
-We have 0x4000 0000 (1GB) of memory in our machines. RAM starts at physical
-address 0x0.
-
-<table>
-<tr>
-<td><b> Address 0x</b></td>
-<td><b> Approx.</b></td>
-<td><b> Size</b></td>
-<td><b> Defined where</b></td>
-<td><b> Notes</b></td>
-</tr>
-<tr>
-<td> 0000 0100</td>
-<td> 0.25KB</td>
-<td> 1KB</td>
-<td>gd-&gt;bd-&gt;bi_boot_params (TODO: used booting non-FIT images?)</td>
-<td>Kernel boot parameters area (ATAGs)</td>
-</tr>
-<tr>
-<td> 0000 8000</td>
-<td> 32KB</td>
-<td> 4MB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel.git;a=blob;f=arch/arm/mach-tegra/Makefile.boot;hb=chromeos-2.6.38">zreladdr</a></td>
-<td>Not used by u-boot, but good to keep in mind that this is the location the kernel will eventually decompress / relocate itself to (TODO: will it put any initramdisk here too?). It's important there's room so the decompressed kernel won't clobber the FDT.</td>
-</tr>
-<tr>
-<td> 0010 0000</td>
-<td> 1MB</td>
-<td> 8MB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=include/configs/chromeos.h;hb=chromeos-v2011.06">CHROMEOS_KERNEL_LOADADDR</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=include/configs/chromeos.h;hb=chromeos-v2011.06">CHROMEOS_KERNEL_BUFSIZE</a></td>
-<td>vboot loads the FIT image here; FDT and zImage will then be relocated elsewhere</td>
-</tr>
-<tr>
-<td> 0040 8000</td>
-<td> 4MB + 32KB</td>
-<td> 4MB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=include/configs/tegra2-common.h;hb=chromeos-v2011.06">CONFIG_LOADADDR</a></td>
-<td>Area to load scripts or kernel uImage (prior to decompression); used by legacy u-boot. TODO: Why not use 0x00100000?</td>
-</tr>
-<tr>
-<td> 00e0 8000</td>
-<td> 14MB + 32KB</td>
-<td> 1MB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=include/configs/tegra2-common.h;hb=chromeos-v2011.06">TEXT_BASE</a></td>
-<td>Start of U-Boot code region. Data appears immediately after</td>
-</tr>
-<tr>
-<td> 01ff c000</td>
-<td> 32MB - 16KB</td>
-<td> 16KB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=include/configs/tegra2-common.h;hb=chromeos-v2011.06">CONFIG_SYS_BOOTMAPSZ</a> appears to control the 32MB (can be overridden by environment variables).</td>
-<td>The 16KB comes from the padded size of the kernel's FDT (as the FDT grows, this should move).</td>
-<td>U-boot ends up relocating the kernel's copy of the FDT to here.</td>
-</tr>
-<tr>
-<td> 0200 0000</td>
-<td> 32MB</td>
-<td> 512KB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel.git;a=blob;f=chromeos/config/armel/config.common.armel;hb=chromeos-2.6.38">CONFIG_CHROMEOS_RAMOOPS_RAM_START</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel.git;a=blob;f=chromeos/config/config.common.chromeos;hb=chromeos-2.6.38">CONFIG_CHROMEOS_RAMOOPS_RAM_SIZE</a></td>
-<td>Kernel preserved area (kcrashmem). This is preserved_start in the kernel, or kcrashmem= environment variable in U-Boot.</td>
-</tr>
-<tr>
-<td> 0300 0000</td>
-<td> 48MB</td>
-<td> ?MB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/overlays/chromiumos-overlay.git;a=blob;f=sys-kernel/chromeos-kernel/files/kernel_fdt.its">kernel_fdt.its</a></td>
-<td>Image is copied here by u-boot before jumping to.</td>
-</tr>
-<tr>
-<td> 1c40 6000</td>
-<td> 512MB - </td>
-<td> 192MB + </td>
-<td> 4MB + </td>
-<td> 24KB</td>
-<td> 8KB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=include/configs/tegra2-common.h;hb=chromeos-v2011.06">TEGRA_LP0_ADDR</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=include/configs/tegra2-common.h;hb=chromeos-v2011.06">TEGRA_LP0_SIZE</a></td>
-<td>Used in suspend / resume.</td>
-</tr>
-<tr>
-<td> 3768 0000</td>
-<td> 1GB - ~144MB</td>
-<td> varies; ~2MB</td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=board/nvidia/seaboard/tegra2-seaboard.dts;hb=chromeos-v2011.06">frame-buffer</a></td>
-<td><a href="http://git.chromium.org/gitweb/?p=chromiumos/third_party/u-boot.git;a=blob;f=common/lcd.c;hb=chromeos-v2011.06">lcd_get_size()</a></td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/u-boot/ttyusb b/chromium/docs/website/site/developers/u-boot/ttyusb
deleted file mode 100644
index 29743ad2d4c..00000000000
--- a/chromium/docs/website/site/developers/u-boot/ttyusb
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/expect
-#
-# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-
-set prompt "CrOS>"
-set device "/dev/ttyUSB1"
-set timeout -1
-
-proc do_line { text } {
- global prompt
- set chars [split $text ""]
-
- if { [lindex $chars 0] == "#" } { return }
-
- for {set index 0} {$index < [llength $chars]} {incr index 1} {
- set char [lindex $chars $index]
- send -- $char
- expect {
- -ex $char {}
- timeout { abort }
- }
- }
- send "\r"
- expect {
- "$prompt" {}
- timeout { abort }
- }
-}
-
-send_user "SPAWNING /dev/ttyUSB CONSOLE SESSION....\n"
-set port [open $device "r+"]
-spawn -open $port
-fconfigure $port -mode 115200,n,8,1
-send "\r"
-
-expect {
- "Hit any key to stop autoboot:" {
- send "\r"
- expect "$prompt" {}
- }
- "$prompt" {}
-}
-set text_file [lindex $argv 0]
-set data_source [open $text_file "r"]
-
-set timeout 1
-while {[gets $data_source line] != -1} {
- do_line $line
-}
-
-interact {
- \001 exit
-}
-send_user "\r"
diff --git a/chromium/docs/website/site/developers/updating-webui-for-material-design/index.md b/chromium/docs/website/site/developers/updating-webui-for-material-design/index.md
deleted file mode 100644
index 687ee8a0054..00000000000
--- a/chromium/docs/website/site/developers/updating-webui-for-material-design/index.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: updating-webui-for-material-design
-title: Updating WebUI for Material Design
----
-
-We intend to migrate the WebUI in Chromium to implement the [material
-design](http://www.google.com/design/spec/material-design/introduction.html)
-spec. This document explains the technical aspects of our approach and serves as
-a landing page for resources used by developers working on this migration.
-Questions can be submitted to the
-[chromium-polymer](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-polymer)
-Google group, but general Polymer questions are better answered at
-[polymer-dev@googlegroups.com](https://groups.google.com/forum/#!forum/polymer-dev).
-
-[This CL](https://codereview.chromium.org/1223793018/) demonstrates the addition
-of a new WebUI page that uses Polymer components.
-
-## Working with Polymer elements
-
-### Importing new Polymer elements
-
-In order to make use of Polymer elements in WebUI, they must first be added to
-Chromium.
-
-To add a Polymer component not already in Chromium:
-
-1. Add the element to `third_party/polymer/v1_0/bower.json`:
-
- ```none
- "iron-icon": "PolymerElements/iron-icon#~1.0.0"
- ```
-
- Also add all of the component's dependencies (listed in its `bower.json`. We
- list all dependencies explicitly to prevent accidental additions of other
- third-party libraries.
-2. From `third_party/polymer/v1_0`, run `reproduce.sh`. See the README
- for more details.
-3. If the element needs to be built into Chrome (as opposed to elements
- only used for demos), use tools/polymer to add the necessary `.css`,
- `.extracted-js` and `.html` files to
- `ui/webui/resources/polymer_resources.grdp`:
-
- ```none
- tools/polymer/polymer_grdp_to_txt.py ui/webui/resources/polymer_resources.grdp > polymer.txt
- vim polymer.txt # add iron-icon/iron-icon.html, etc.
- tools/polymer/txt_to_polymer_grdp.py polymer.txt > ui/webui/resources/polymer_resources.grdp
- git diff ui/webui/resources/polymer_resources.grdp # verify changes
- ```
-
-Once the resources are added to Chrome, they can be included from another HTML
-page via `chrome://resources:`
-
-> `<link rel="import"
-> href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">`
-
-### Adding custom elements
-
-Find the appropriate place for the new element. For example, elements within the
-"settings" namespace use `chrome/browser/resources/settings`.
-
-Separate HTML and JS into their own files instead of using inline scripts to
-ensure elements will work under
-[CSP](https://developer.chrome.com/extensions/contentSecurityPolicy).
-
-Add the element's resources to the appropriate `.grd` file. Do not include demo
-files.
-
-### Sharing Polymer elements
-
-Polymer elements intended to be shared across WebUI reside in
-src/ui/webui/resources/cr_elements.
-
-New WebUI pages implementing material design should make use of these elements
-when convenient.
-
-## Localization
-
-## Prefer C++-side $i18n{key} templating. When necessary, use `I18nBehavior` to
-dynamically translate strings in JS.
-
-## Accessibility
-
-Polymer elements provide their own ARIA roles and labels, and a11y support
-should be improving soon in Polymer 1.0. Custom elements can also provide their
-own ARIA roles and labels when necessary.
-
-Shadow DOM is already supported in some screen readers, such as OS X's VoiceOver
-and Chrome OS's [ChromeVox Next](/developers/accessibility/chromevox).
-
-As with light DOM, the shadow DOM tree can be explored from
-chrome://accessibility.
-
-## Compilation
-
-[Using the Closure
-Compiler](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/closure_compilation.md)
-to typecheck your code is strongly recommended. This requires [annotating your
-JavaScript with JSDoc
-tags](https://developers.google.com/closure/compiler/docs/js-for-compiler) and
-paying attention to types. [Closure's Polymer
-pass](https://github.com/google/closure-compiler/wiki/Polymer-Pass) allows for
-annotation of Polymer-specific constructs.
-
-## Testing
-
-See [Testing WebUI with
-Mocha](/developers/updating-webui-for-material-design/testing-webui-with-mocha).
-
-We also want to be able to perform visual testing to check for regressions in
-element layout and looks.
-
-## Clients
-
-WebUI pages implementing material design:
-
-* [Settings](/developers/updating-webui-for-material-design/settings-material-design)
-* Extensions
-* [Media Router](/developers/design-documents/media-router)
-* History
-* PDF viewer
-* Downloads (complete) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/updating-webui-for-material-design/settings-material-design/index.md b/chromium/docs/website/site/developers/updating-webui-for-material-design/settings-material-design/index.md
deleted file mode 100644
index f03cec3521a..00000000000
--- a/chromium/docs/website/site/developers/updating-webui-for-material-design/settings-material-design/index.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/updating-webui-for-material-design
- - Updating WebUI for Material Design
-page_name: settings-material-design
-title: 'Settings: Material Design'
----
-
-**Eng**: dbeam@, dpapad@, dschuyler@, hcarmona@, michaelpg@, stevenjb@,
-tommycli@
-
-**PM**: tbuckley@
-
-**UX**: bettes@
-
-**Code Location**: chrome/browser/resources/settings,
-chrome/browser/ui/webui/settings
-
-## Objective
-
-To create a new Settings experience for Chromium/Chromium OS which will
-implement the material design spec, using web components as a maintainable and
-modular implementation.
-
-## Using
-
-Visit chrome://md-settings, or use #enable-md-settings in chrome://flags. This
-is still a work in progress; do not expect all settings to work until launch.
-
-## Model
-
-The Settings UI is composed of many Polymer elements, which use two-way data
-binding to update a local prefs model. A Polymer element observing this prefs
-model persists changes back to the pref store via a set of granular JS APIs.
-
-**Design Documents**
-
-Design documents can be found
-[here](https://drive.google.com/open?id=0B6VE9j_QZJCrfnZhLUNWeTlIX1JKdEJEWkoweC1sNzlKbG9MTmUyX2t1akVPenQ4UFVRWGc&authuser=2).
-The following are a few major docs:
-
-* [Chrome Settings API
- Wrapper](https://docs.google.com/a/chromium.org/document/d/1PnGKrP6_dXS3L1h36buxHPW3zSWup5FaTaGthed3CUc/edit#heading=h.xgjl2srtytjt)
- - describes interaction between Chrome Settings page UI elements and
- underlying Chrome APIs.
-* [chrome.settingsPrivate
- API](https://docs.google.com/a/chromium.org/document/d/1PCQltNDdyZyuPHUdqYIjeObRrVOhf8WTr6BLfuTQ4ew/edit?pli=1#heading=h.adz03dmup02t)
- - describes the new extension API used to interact with the pref
- store from JS.
-* [i18n Design
- Document](https://docs.google.com/document/d/12hK4HEKOo4w9L5DT34hlTKX32SpeNepD7FoZTXRCJQY/edit#)
- - describes C++ i18n templates.
-* [Settings Routing and
- Navigation](https://docs.google.com/document/d/1VUbDrsJ4eAOAEODeegjwGNeT3iHCKWu46kJAW4gX1WM/edit)
- - describes the new routing approach.
-
-## Individual settings pages
-
-Each category of settings will now reside in its own page. Each page will be
-represented by its own custom element, to be encapsulated within a variant of
-&lt;neon-animated-pages&gt;. We split the HTML and JS such that the HTML for a
-given page only contains the layout, and the JS defines the
-&lt;settings-*foo*-page&gt; element.
-
-Also, each individual page element will have a reference to a shared prefs
-property. This prefs property will contain the shared model for all settings,
-which in turn will be kept in sync with the Chrome pref store.
-
-Example page code:
-
-> **a11y_page.html:**
-
-> `<dom-module id="settings-a11y-page">`
-> ` <template>`
-> ` <div class="layout vertical">`
-> `` ` <settings-checkbox checked="{{prefs.settings.a11y.highContrastEnabled}}">` ``
-> `` `` ` $i18n{a11yHighContrastMode}` `` ``
-> `` ` </settings-checkbox>` ``
-> `` ` <settings-checkbox checked="{{prefs.settings.a11y.screenMagnifierEnabled}}">` ``
-> ` $i18n{a11yScreenMagnifier}`
-> `` ` </settings-checkbox>` ``
-> ` </div>`
-> ` </template>`
-> ` <script src="a11y_page.js"></script>`
-> `</dom-module>`
-
-> **a11y_page.js:**
-
-> `Polymer({`
-
-> ` is: `'settings-a11y-page',
-
-> ` properties: {`
-
-> /\*\*
-
-> ` * Preferences state.`
-
-> \*/
-
-> ` prefs: {`
-
-> ` type: Object,`
-
-> ` notify: true,`
-
-> ` }`
-
-> ` }`
-
-> `});` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/updating-webui-for-material-design/testing-asynchronous-ui/index.md b/chromium/docs/website/site/developers/updating-webui-for-material-design/testing-asynchronous-ui/index.md
deleted file mode 100644
index 616dae6d284..00000000000
--- a/chromium/docs/website/site/developers/updating-webui-for-material-design/testing-asynchronous-ui/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/updating-webui-for-material-design
- - Updating WebUI for Material Design
-page_name: testing-asynchronous-ui
-title: Testing asynchronous UI
----
-
-If the UI under test initializes asynchronously, or a method you're testing
-finishes asynchronously, your test must also be asynchronous.
-
-One way to ensure a test runs at the appropriate time is to provide a Promise
-the test can hook onto, e.g.
-[`CrSettingsPrefs.initialized`](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/resources/settings/prefs/prefs_types.js&q=%22CrSettingsPrefsInternal.initialized%22&sq=package:chromium&type=cs).
-
-Otherwise, pay attention to the flavor of asynchronicity involved. If you're
-using mocha, you can combine these techniques with [the done() callback or
-returning a Promise from a
-test](/developers/updating-webui-for-material-design/testing-webui-with-mocha#sites-canvas-main-content).
-
-### Macrotask timing
-
-Tasks scheduled for the next event loop:
-[`setTimeout`/`setInterval`](https://html.spec.whatwg.org/multipage/webappapis.html#timer-initialisation-steps),
-user interaction.
-
-**Testing:** call `setTimeout` and test UI in the callback.
-
-### Microtask timing
-
-Tasks scheduled for the end of the current event loop:
-
-* [`Promise.prototype.then`/`catch`](http://www.ecma-international.org/ecma-262/6.0/#sec-performpromisethen)
-* [`MutationObserver`](https://dom.spec.whatwg.org/#queue-a-mutation-record)
-
-Newly queued microtasks are processed in the current event loop. E.g., Promises
-will call chained resolve/reject handlers before a setTimeout callback, even if
-setTimeout was called before the chain of Promises was created.
-
-**Testing:** create a Promise (or call `setTimeout`) and test the UI in the
-callback. Return a Promise from mocha tests.
-
-### Polymer microtask timing
-
-#### Microtasks generated by Polymer are special\*, and can be executed immediately via `Polymer.dom.flush()`. This is a useful alternative to nesting setTimeouts in tests to ensure the DOM under test is up to date.
-
-* #### Templates: `dom-if`, and `sort`/`filter` on `dom-repeat`
-* #### Some elements, including: iron-list, paper-slider, paper-tabs,
- paper-slider, paper-slider
-* #### Animations, focus, tab order, some key bindings
-* #### `[myElement.async](http://polymer.github.io/polymer/#methods)`
-* #### [myElement.debounce](http://polymer.github.io/polymer/#methods)
-* ####
- `[Polymer.dom(el).observeNodes](https://www.polymer-project.org/1.0/docs/devguide/local-dom.html#observe-nodes)`
-
-#### Testing: prefer Polymer.dom.flush() over asynchronous callbacks.
-
-#### \*Polymer queues would-be microtasks and schedules them at the last
-possible moment. Flushing this queue runs the tasks. If the queue is not
-flushed, the microtasks are scheduled (strangely, via a `MutationObserver`).
-
-### Synchronous
-
-Some Polymer methods are explicitly synchronous:
-
-* #### Lifecycle callbacks. `created` and `ready` are called
- immediately when creating the element, and `attached` is called
- immediately after the element is added to the DOM.
-* #### Events dispatched dynamically. `el.fire('click')`,
- `MockInteractions.tap(el)` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/updating-webui-for-material-design/testing-webui-with-mocha/index.md b/chromium/docs/website/site/developers/updating-webui-for-material-design/testing-webui-with-mocha/index.md
deleted file mode 100644
index 56bb1069dd6..00000000000
--- a/chromium/docs/website/site/developers/updating-webui-for-material-design/testing-webui-with-mocha/index.md
+++ /dev/null
@@ -1,219 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/updating-webui-for-material-design
- - Updating WebUI for Material Design
-page_name: testing-webui-with-mocha
-title: Testing WebUI with Mocha
----
-
-As Chromium focuses on building modular WebUI using web components and
-well-defined API calls, we aim to phase out and ultimately replace
-[WebUIBrowserTest](/Home/domui-testing/webui-browser_tests) with a mocha-based
-alternative. [Mocha](http://mochajs.org) is a flexible, lightweight test
-framework with strong async support. With mocha, we can write small unit tests
-for individual features of components instead of grouping everything into a
-monolithic browser test.
-
-Advantages of using mocha over vanilla browser tests include:
-
-* Allowing multiple test definitions within one browser test,
- amortizing the browser spin-up cost over several tests
-* Pinpointing failure locations, even when several tests fail within
- one browser test or when assertions fail inside in helper functions
-* Associating uncaught exceptions with the correct test
-* Reporting test durations and flagging slow tests
-* Fast test iteration -- changes to tests may not require recompiling
-
-This framework is a work in progress; its first consumers are Polymer projects
-in Chromium.
-
-### Adding the BrowserTest
-
-Polymer tests should use `PolymerTest` from polymer_browser_test_base.js as
-their prototype. The following test will set the command-line args
---my-switch=my-value and navigate to chrome://my-webui/.
-
-```none
-// Polymer BrowserTest fixture.
-GEN_INCLUDE(['//chrome/test/data/webui/polymer_browser_test_base.js']);
-/**
- * Test fixture for FooBar element.
- * @constructor
- * @extends {PolymerTest}
- */
-function FooBarBrowserTest() {}
-FooBarBrowserTest.prototype = {
-  __proto__: PolymerTest.prototype,
-  /**
-   * Override browsePreload like this if you need to navigate to a particular WebUI.
-   * @override
-   */
-  browsePreload: 'chrome://my-webui',
-  /**
-   * Set any command line switches needed by your features.
-   */
-  commandLineSwitches: [{
-    switchName: 'my-switch',
-    switchValue: 'my-value'  // omit switchValue for boolean switches
-  }],
-  /**
-   * Override extraLibraries to include extra files when the test runs.
-   * @override
-   */ 
-  extraLibraries: PolymerTest.getLibraries(ROOT_PATH).concat([
-    'some_file.js',  // Loads ./some_file.js (relative to source root).
-    '//ui/webui/resources/js/some_file.js',  // Path must be included in browser_tests.isolate.
-  ]);
-};
-```
-
-Then, create one or more `TEST_F` functions. Each should register some number of
-tests with mocha:
-
-```none
-TEST_F('FooBarBrowserTest', 'FooBarTest', function() {
-  suite('FooBar', function() {
-    var fooBar;
-    // Import foo_bar.html before running suite.
-    suiteSetup(function() {
-      // Returns a promise, ensuring mocha waits until the resource loads.
-      return PolymerTest.importHtml('chrome://resources/foo_bar.html');
-    });
-    // Create and initialize a FooBar before each test.
-    setup(function() {
-      PolymerTest.clearBody();
-      fooBar = document.createElement('foo-bar');  // Immediately calls created() and ready().
-      document.body.appendChild(fooBar);  // Immediately calls attached().
-    });
-    test('is a FooBar', function() {
-      assertEquals('FOO-BAR', fooBar.tagName);
-      // ... more work and assertions
-    });
-    // ... more synchronous and asynchronous tests
-  });
-  // ... more test suites
-  // Run all the above tests.
-  mocha.run();
-});
-```
-
-Should you write a large number of tests (woohoo!), it may help to break tests
-into separate files. For example, if you have foo_bar_tests.js:
-
-```none
-cr.define('foo_bar', function() {
-  function registerTests() {
-    suite('FooBar', function() { /* ... */ });
-  }
-  return {registerTests: registerTests};
-});
-```
-
-You can then include these tests in your main foo_bar_browsertest.js by adding
-the file to `FooBarBrowserTest.prototype.extraLibraries`. Then, in your
-`TEST_F`, simply call `foo_bar.registerTests()` before the `mocha.run()` call.
-
-<table>
-<tr>
-
-<td>#### <b>Including JS files in tests</b></td>
-
-<td>Files imported via extraLibraries are read when the test runs. In isolated
-testing, only certain files are copied to the bots. Files in chrome/test/data
-are always copied over, but <b>if your test requires files in other directories,
-be sure the file or some parent directory is included in
-</b><b>chrome/browser_tests.isolate</b><b>.</b></td>
-
-<td> Explanation: js2gtest allows #include-style imports of JavaScript using `GEN_INCLUDE` and the `extraLibraries` property of the test fixture prototype. These should be relative to the file defining your test fixture.</td>
-<td> Use `GEN_INCLUDE` when the file needs to be included before the rest of the script is run. This will also result in the code being eval'd during the js2gtest step.</td>
-<td> Use the `extraLibraries` property of your test fixture's prototype when the file is only needed within your tests. The content of these files, along with any `GEN_INCLUDE`d files, are added to each GTest body before each test is run.</td>
-<td> Because these files are read at runtime, they must be present when running the browser_tests binary. This is only a concern in <a href="/developers/testing/isolated-testing/for-swes">isolated testing</a>, and placing included files in chrome/test/data should always work.</td>
-</tr>
-</table>
-
-### Running the tests
-
-### Just [build and run like any other
-browser_tests](/developers/testing/browser-tests). You may filter tests by class
-or test name (the arguments to TEST_F) via gtest_filter.
-
-### `ninja -C out/Release browser_tests`
-
-### `./out/Release/browser_tests --gtest_filter=FooBarBrowserTest.Foo*`
-
-### Tests and suites
-
-### With mocha, we can define any number of **suites**; each suite can consist
-of any number of **tests**. Top-level tests are in the global suite, but it is
-recommended to always create an outer suite for your tests. Each **suite** and
-**test** call takes a name and a function.
-
-We can also define a **suiteSetup** to run at the beginning of a suite, a
-**setup** to run before each test in a suite, a **teardown** to run after each
-test in a suite, and a **suiteTeardown** to run once a suite is completed.
-
-Suites can be nested; each **setup** and **teardown** also applies to all tests
-in nested suites.
-
-By default, hooks and tests are synchronous. Any of the functions used in these
-calls can take a `done` callback as a parameter, causing mocha to wait until the
-`done` parameter is called before moving to the next test or hook. **The `done`
-callback must be called with an `Error` on failure, or no arguments on
-success.**
-
-```none
-suite('Outer suite', function() {
-  suiteSetup(function() {
-    // Function to run at the beginning of this suite.
-  });
-  setup(function() {
-    // Function to run before each test within this suite.
-  });
-  test(function() {
-    // A test that runs after setup is called.
-  });
-  test(function(done) {
-    // An asynchronous test that runs after setup is called again.
-    setTimeout(done, 1000);
-  });
-  teardown(function() {
-    // Function to run after each test in this suite.
-  });
-  suiteTeardown(function() {
-    // Function to run at the very end of this suite.
-  });
-  suite('Inner suite', function() {
-    // Another suite. We can define separate suiteSetup and setup functions here that only run within this suite.
-  });
-});
-```
-
-**Instead of taking a `done` parameter, an asynchronous hook or test can return
-a `Promise`.** The test succeeds or fails once the promise is resolved or
-rejected.
-
-```none
-// Notice no done callback is taken.
-suiteSetup(function() {
-  return new Promise(function(resolve, reject) {
-    window.addEventListener('thingCreated', resolve);
-    createThingAsync();
-  });
-});
-test('Something doesn\'t happen', function() {
-  return new Promise(function(resolve, reject) {
-    // Ensure no event fires.
-    window.addEventListener('change', reject);
-    setTimeout(resolve, 1000);
-    somethingShouldNotChange();
-  });
-});
-```
-
-### More features
-
-For more mocha features, see [the documentation](http://mochajs.org/). The API
-is well documented [within the
-source](https://github.com/mochajs/mocha/blob/master/lib/mocha.js). \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/updating-webui-for-material-design/using-polymer-icons/index.md b/chromium/docs/website/site/developers/updating-webui-for-material-design/using-polymer-icons/index.md
deleted file mode 100644
index fb8012a4e52..00000000000
--- a/chromium/docs/website/site/developers/updating-webui-for-material-design/using-polymer-icons/index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/updating-webui-for-material-design
- - Updating WebUI for Material Design
-page_name: using-polymer-icons
-title: Adding SVG icons
----
-
-SVG icons should be added to a common iconset, or an iconset for your WebUI.
-These can be custom SVG icons or copies of Polymer's
-`[iron-icons](https://github.com/PolymerElements/iron-icons)`.
-
-## Creating an iconset
-
-To create the iconset your WebUI will use, copy the format of an existing icons
-file (e.g.,
-[cr_elements/icons.html](https://source.chromium.org/chromium/chromium/src/+/HEAD:ui/webui/resources/cr_elements/icons.html)).
-Change the name of the `iron-iconset-svg` for your WebUI, and add the SVGs you
-need (see below). Example:
-
-```none
-<iron-iconset-svg name="downloads" size="24">
-  <svg>
-    <defs>
-      <g id="foo">...</g>
-      ...
-    </defs>
-  </svg>
-</iron-iconset-svg>
-```
-
-## Adding icon definitions
-
-### For Polymer icons from iron-icons:
-
-* Find the SVG `<g>` icon definitions you need in
- [PolymerElements/iron-icons](https://github.com/PolymerElements/iron-icons).
-* Copy the SVG definitions.
-* Insert each line (alphabetically) into the appropriate `icons.html`
- file for your WebUI. (For commonly used icons, use
- `cr_elements/icons.html`.)
-
-### For custom icons:
-
-You can include custom icons or [Google Material
-icons](https://design.google.com/icons/) in the same iconset, but mention their
-source in a comment. Icons exported from GUI tools often are messy; please
-**minify custom icons** by flattening transforms, removing meta tags like
-`<title>`, and rounding weird numbers like 30.0002118. The [SVGOMG
-optimizer](https://jakearchibald.github.io/svgomg/) does most of this for you;
-use it.
-
-If the icon is not the same size as the iconset, either scale it to size, or
-ensure the `<g id="foo">` tag includes the `viewBox` attribute with the original
-dimensions. Some code (settings) has multiple iconsets (e.g. "cr" vs. "cr20")
-depending on the export size. You can skip the viewBox if you put the icon in
-the right set.
-
-Unless color is important (e.g. a Chromium logo), **remove hard-coded colors**
-(e.g. `fill="#000"`) so our WebUI can specify colors in CSS.
-
-## Using icons
-
-Import the relevant `icons.html` from your UI **instead of** importing Polymer's
-`iron-icons.html` (which would load almost a thousand SVGs).
-
-Use the icon in your UI with your custom iconset name prefix wherever you need
-an icon name (`iron-icon`, `paper-icon-button`, etc.):
-
-```none
-<link rel="import" href="chrome://downloads/icons.html">
-<iron-icon icon="downloads:warning"></iron-icon>
-```
-
-## Common icons
-
-A few icons are used in many pages. These can be found in
-`[cr_elements/icons.html](https://code.google.com/p/chromium/codesearch#chromium/src/ui/webui/resources/cr_elements/icons.html&q=file:cr_elements/icons%5C.html&sq=package:chromium&type=cs&l=1)`
-under the iconset name "`cr`". Having frequently-used icons here prevents
-excessive duplication of SVG definitions while keeping imports small across all
-pages.
-
-To use these icons, simply import `cr_elements/icons.html` and use the `cr`
-prefix:
-
-```none
-<link rel="import" href="chrome://resources/cr_elements/icons.html">
-<iron-icon icon="cr:cancel"></iron-icon>
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/useful-extensions/index.md b/chromium/docs/website/site/developers/useful-extensions/index.md
deleted file mode 100644
index 91c9dc26ec0..00000000000
--- a/chromium/docs/website/site/developers/useful-extensions/index.md
+++ /dev/null
@@ -1,155 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: useful-extensions
-title: Useful extensions for developers
----
-
-## Chromium
-
-## [Chromite Butler](https://chrome.google.com/webstore/detail/chromite-butler/bhcnanendmgjjeghamaccjnochlnhcgj)
-
-Gerrit:
-\* Shows which file has been LGTMed by owners, which files are missing owner
-reviews etc.
-\* Suggests a list of reviewers for files that still don't have an owner as a
-reviewer.
-\* Allow adding OWNERS to the reviewer list.
-LUCI:
-\* Shows the blame-list, and the list of failures for a particular bot.
-\* Links to the changed files from for a particular run in a buildbot.
-
-**[Flake linker](https://chrome.google.com/webstore/detail/flake-linker/boamnmbgmfnobomddmenbaicodgglkhc)**
-
-* Links to Chromium flakiness dashboard from build result pages, so
- you can see all failures for a single test across the fleet.
-* Automatically hides green build steps so you can see the failure
- immediately.
-* Turns build log links into deep links directly to the failure line
- in the log.
-
-**[Chromium Buildbot
-Monitor](https://chrome.google.com/webstore/detail/chromium-buildbot-monitor/oafaagfgbdpldilgjjfjocjglfbolmac)**
-
-Displays your CL's status of the Chromium buildbot in the toolbar. Click to see
-more detailed status in a popup.
-As the old waterfall is no longer used, update the waterfall link:
-https://cros-goldeneye.corp.google.com/chromeos/legoland/builderSummary?builderGroups=cq&limit=2&buildBranch=master
-
-**[Highlight Me in
-Buildbot](https://chrome.google.com/webstore/detail/fkkgaddlippjidimcfbpllllclgnikdb)**
-
-Highlight your commits on buildbot pages.
-
-**[Version number helper for issue tracker](https://chrome.google.com/extensions/detail/hlibpmhacdkjajhplieepfmpagfaepem)**
-Makes mouse-over-ing a version number in the chromium bug tracker show you what
-release it is.
-
-**[Source Quicklinks](https://chrome.google.com/extensions/detail/ncjnjlfeffaclcioiphpaofhkebnmknj)**
-Adds a page action to quickly jump between [Code
-Search](http://www.google.com/codesearch?vert=chromium), Trac, ViewVC, and
-Gitweb.
-
-**[Hide chromium code search banner](https://chrome.google.com/webstore/detail/hide-chromium-code-search/podmafjjpjkcjldlhcigjmelmdpignni)**
-Saves wasted screen space by removing banner on code search.
-
-[Chromium CodeSearch
-Theme](https://chrome.google.com/webstore/detail/chromium-codesearch-theme/bncjaoffkbldggnfkakmnbgfpnikielm)
-
-Displays the [Code Search](http://code.google.com/p/chromium/codesearch) pages
-in customized themes and colored syntax highlighting. Contribute with new themes
-via [github](https://github.com/kristijanburnik/codesearch-theme).
-
-**[Colorize raw diffs on codereview.chromium.org](http://code.google.com/p/codereview-color-diffs/)**
-Adds git diff-style colors to "raw patch sets" on the code review site.
-
-**[Googler-specific extensions](http://goto.google.com/kjnqp)**
-Note: must be on google network to load this link.
-
-[**Reload build.chromium.org at a given
-interval**](https://gist.github.com/danbeam/99e7c5d4e8182ff3762e)
-Append ?reload=## to make build.chromium.org automatically reload itself every
-so often.
-
-**[Higher contrast buildbot
-colors](https://gist.github.com/danbeam/ffb719d5c2922bdeffc4)**
-Makes build.chromium.org easier to read for colorblind people (more contrast).
-
-[**Crbug.com attachment
-reminder**](https://gist.github.com/danbeam/55c45021e1ce268edfaf)
-Prevents those embarrassing "screenshot attached" comments on bugs without
-actually attaching something.
-
-[**Crbug-Tree**](https://chrome.google.com/webstore/detail/crbug-tree/cjcdnhafnkeikpigldhhclhjnemlfehe)
-Show a tree of dependent bugs in crbug.com.
-
-**[Rietveld Usability
-Toolkit](https://chrome.google.com/webstore/detail/rietveld-usability-toolki/nmljjlfbnbekmadhbpfpkcminoejelga)**
-Various Rietveld tweaks (inline diffs, syntax highlighting, etc).
-
-**[OmniChromium](https://chrome.google.com/webstore/detail/omnichromium/ainboabogofdlcfeciphjjmmicblabml?hl=en)**
-Adds Chromium search+autocomplete tools to the Omnibox: codesearch, commits by
-author, bugs, revisions.
-
-**[Recent CrBugs](https://chrome.google.com/webstore/detail/recent-crbugs/bhddcpbcpjgehcdanidfppngfcjnpodi/related)**
-Quickly access crbugs you have recently viewed.
-
-[**TryBot
-Re-Runner**](https://chrome.google.com/webstore/detail/trybot-re-runner/hidamppghiegbmolihgabohmibkmkgpn?hl=en-US)
-Easily select failed trybots for re-running.
-
-[**Open My
-Editor**](https://chrome.google.com/webstore/detail/ome/ddmghiaepldohkneojcfejekplkakgjg)
-OME gives you a context menu for opening files in your editor on Chromium Code
-Search, Chromium Code Review, Chromium Build and Gerrit Code Review.
-
-**[Stijl](https://chrome.google.com/webstore/detail/stijl/cpbiadoobgnpcacjecphfeoonpfccagk)**
-Dashboard showing all your code reviews at Gerrit/Rietveld in a single page.
-Also there is [a Googler-only version](http://go/stijl) with some internal
-presets.
-
-[**Gerrit
-Monitor**](https://chrome.google.com/webstore/detail/gerrit-monitor/leakcdjcdifiihdgalplgkghidmfafoh)
-Monitor multiple Gerrit instances for CLs requiring attention.
-
-#### **Obsolete**
-
-==~~**[UTC to 12h local time converter](https://gist.github.com/danbeam/545b33c9ff3140c3678b)**~~==
-==~~Convert UTC times to local (12h) times on chromium-status.appspot.com (the
-tree status).~~==
-
-~~**[Autocomplete for bugs.webkit.org](https://chrome.google.com/extensions/detail/olaabhcgdogcbcoiolomlcodkngnemfb)**~~
-Adds autocomplete to email boxes on bugs.webkit.org.~~ Now
-[built-in](https://lists.webkit.org/pipermail/webkit-dev/2010-September/014361.html)
-to bugs.webkit.org.
-
-~~**[WebKit Buildbot monitor](https://chrome.google.com/extensions/detail/dfomjpbnljkkohdofbhnphphdkaojklg)**~~
-~~Displays the status of the WebKit buildbot in the toolbar. Click to see more
-detailed status in a popup.~~ Not useful after Blink fork.
-
-~~**[Google Code enhancements for Chromium](http://code.google.com/p/chromium/downloads/detail?name=codesite.crx&can=2&q=)**~~
-~~Inlined images and fix svn path in issues.~~ svn path is now handled by
-crrev.com
-
-~~[**Chromium CodeSearch**](https://chrome.google.com/webstore/detail/chromium-codesearch/igneackgkaaadndcfnacohbbmibnjkli)~~
-~~Searches for selected text in Chromium [Code
-Search](http://code.google.com/p/chromium/codesearch) ([github
-code](https://github.com/miguelao/chromium_codesearch_extension)).~~
-
-==~~**[BuildBot Error](https://chrome.google.com/extensions/detail/iehocdgbbocmkdidlbnnfbmbinnahbae)**~~==
-==~~Helps find the error messages amidst all the stdio output on
-build.chromium.org bots. Highly recommended for any committer.~~==
-
-## Chromium OS
-
-[**Wicked Good
-Unarchiver**](https://chrome.google.com/webstore/detail/mljpablpddhocfbnokacjggdbmafjnon)
-Open standard \*nix archive formats (e.g. tar.gz) using the Files app.
-
-**[Tree
-Status](https://chrome.google.com/webstore/detail/chrome-os-tree-status/ebdinlbmpcdebianielhijhbalinlahg)**
-Displays the openness / closedness of the Chrome OS build tree.
-
-~~[**Iteration Viewer**](https://chrome.google.com/webstore/detail/chromium-os-iteration-vie/gnpbpbbdcikepgimaaflpdobempiegcp)~~
-~~Shows the current Chromium OS Iteration when looking at the issue tracker.~~ \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/using-atom-as-your-ide/index.md b/chromium/docs/website/site/developers/using-atom-as-your-ide/index.md
deleted file mode 100644
index 166ce9daa9e..00000000000
--- a/chromium/docs/website/site/developers/using-atom-as-your-ide/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: using-atom-as-your-ide
-title: Using Atom as your IDE
----
-
-This content has moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/atom.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/using-eclipse-with-chromium/index.md b/chromium/docs/website/site/developers/using-eclipse-with-chromium/index.md
deleted file mode 100644
index ddd9898be43..00000000000
--- a/chromium/docs/website/site/developers/using-eclipse-with-chromium/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: using-eclipse-with-chromium
-title: Using Eclipse with Chromium
----
-
-* Linux:
- <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_eclipse_dev.md>
-* Android:
- <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/eclipse.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/version-numbers/index.md b/chromium/docs/website/site/developers/version-numbers/index.md
deleted file mode 100644
index e74ce449fa3..00000000000
--- a/chromium/docs/website/site/developers/version-numbers/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: version-numbers
-title: Version Numbers
----
-
-## Chromium
-
-Chromium version numbers consist of 4 parts: MAJOR.MINOR.BUILD.PATCH.
-
-* MAJOR and MINOR **may** get updated with any significant Google
- Chrome release (Beta or Stable update). MAJOR **must** get updated
- for any backwards incompatible user data change (since this data
- survives updates).
-* BUILD **must** get updated whenever a release candidate is built
- from the current trunk (at least weekly for Dev channel release
- candidates). The BUILD number is an ever-increasing number
- representing a point in time of the Chromium trunk.
-* PATCH **must** get updated whenever a release candidate is built
- from the BUILD branch.
-
-MAJOR and MINOR track updates to the Google Chrome stable channel. In this
-sense, they reflect a scheduling or marketing decision rather than anything
-about the code itself. These numbers are generally only significant for tracking
-milestones. In the event that we get a significant release vehicle for Chromium
-code **other** than Google Chrome, we can revisit the versioning scheme.
-
-**The BUILD and PATCH numbers together are the canonical representation of what
-code is in a given release.** The BUILD number is always increasing as the
-source code trunk advances, so build 180 is always newer code than build 177.
-The PATCH number is always increasing for a given BUILD. Developers and testers
-generally refer to an instance of the product (Chromium or Google Chrome) as
-BUILD.PATCH. It is the shortest unambiguous name for a build.
-
-For example, the 154 branch was originally released as 0.3.154.9, but now stands
-at 1.0.154.65. It's the same basic code with a lot of bug fixes applied. The
-fact that it went from a Beta release to several 1.0 stable releases just
-reflects the decision to call some version (1.0.154.36) 'out of Beta'.
-
-## Chromium OS
-
-Starting with the R16 release, we standardized on the following: \[Chrome
-Version.\]&lt;TIP_BUILD&gt;.&lt;BRANCH_BUILD&gt;.&lt;BRANCH_BRANCH_BUILD&gt;
-
-* The Chromium version is implicit. On the R25 branch, Chromium OS
- will be using Chromium version 25.
-* TIP_BUILD will be updated every time the canaries run on the tip of
- tree (trunk/master in various VCS schemas). This is typically done
- every 6 hours. The number increases monotonically.
-* BRANCH_BUILD will be updated every time a new build is started on a
- branch. This happens whenever a commit is made to the branch.
-* BRANCH_BRANCH_BUILD is used when a branch of a branch is made. This
- is a bit uncommon, but has happened. It follows the same rules as
- BRANCH_BUILD.
-
-An example Chromium OS version string:
-
-* Version 25.0.1364.126
- * This is the Chromium version (see previous section for details)
-* Platform 3428.193.0 (Official Build) stable-channel stumpy
- * This was branched from the tip of tree (ToT) when it was at
- 3428.0.0. It is the 193rd build on that branch.
-
-### Coordinating Versions
-
-#### Chromium & Chromium OS
-
-All releases of Chromium OS are tagged in the
-[chromiumos/manifest-versions.git](https://chromium.googlesource.com/chromiumos/manifest-versions/+/HEAD/paladin/buildspecs/)
-repository. You can look up a Chromium version by doing:
-
-* find the buildspec for the specific version you're interested in
- * e.g. 5636.0.0-rc1.xml
-* look up the git sha1 for the chromiumos-overlay repo in it
- * e.g. 4670dbea357617d1fc09db88829b71d8eb1f82e2
-* look at the chromeos-base/chromeos-chrome/ subdir of that repo at
- that revision
- * e.g.
- [chromeos-base/chromeos-chrome](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/4670dbea357617d1fc09db88829b71d8eb1f82e2/chromeos-base/chromeos-chrome/)
- contains version 35.0.1891.2
- * e.g. git ls-files 4670dbea357617d1fc09db88829b71d8eb1f82e2
- chromeos-base/chromeos-chrome/
-
-#### Chrome & Chrome OS
-
-You can use the online [CrOS-OmahaProxy](http://cros-omahaproxy.appspot.com/)
-app engine to see what versions of Chrome shipped in which versions of Chrome
-OS.
-
-Alternatively, all releases of Chrome are tagged in the
-[chromeos/manifest-versions.git](https://chrome-internal.googlesource.com/chromeos/manifest-versions/+/HEAD/buildspecs/)
-repository. Follow the same steps as above w/Chromium.
diff --git a/chromium/docs/website/site/developers/web-development-style-guide/index.md b/chromium/docs/website/site/developers/web-development-style-guide/index.md
deleted file mode 100644
index 05ec4cb461f..00000000000
--- a/chromium/docs/website/site/developers/web-development-style-guide/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: web-development-style-guide
-title: Web Development Style Guide
----
-
-has moved to here:
-<https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/web/web.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-idl-interfaces/index.md b/chromium/docs/website/site/developers/web-idl-interfaces/index.md
deleted file mode 100644
index 32c13f7515f..00000000000
--- a/chromium/docs/website/site/developers/web-idl-interfaces/index.md
+++ /dev/null
@@ -1,485 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: web-idl-interfaces
-title: Web IDL interfaces
----
-
-[TOC]
-
-Web interfaces – exposed as JavaScript objects – are generally specified in [Web
-IDL](http://heycam.github.io/webidl/) (Interface Definition Language), a
-declarative language (sometimes written without the space as WebIDL). This is
-the language used in standard specifications, and Blink uses IDL files to
-specify the interface and generate JavaScript bindings (formally, C++ code that
-the V8 JavaScript virtual machine uses to call Blink itself). [Web IDL in
-Blink](/blink/webidl) is close to the standard, and the resulting bindings use
-standard conventions to call Blink code, but there are additional features to
-specify implementation details, primarily [Blink IDL extended
-attributes](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/bindings/IDLExtendedAttributes.md).
-
-To implement a new Web IDL interface in Blink:
-
-* **Interface:** write an IDL file: `foo.idl`
-* **Implementation:** write a C++ file and header: `foo.cc, foo.h`
-* **Build:** add files to the build: edit
- [idl_in_core.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/idl_in_core.gni)/[idl_in_modules.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/idl_in_modules.gni)
- and
- [generated_in_core.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/generated_in_core.gni)/[generated_in_modules.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/generated_in_modules.gni)
- (for the old bindings generator, edit also
- [core_idl_files.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/core/core_idl_files.gni)/[modules_idl_files.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/modules/modules_idl_files.gni)
- and
- [third_party/blink/renderer/bindings/core/v8/generated.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/core/v8/generated.gni)/[third_party/blink/renderer/bindings/modules/v8/generated.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/modules/v8/generated.gni)
- if necessary.)
-* **Tests:** write unit tests ([web
- tests](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_tests.md))
- in
- [web_tests](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/web_tests/)
-
-The bulk of the work is the implementation, secondarily tests. Writing an IDL
-file should require minimal work (ideally just copy-and-paste the spec),
-assuming nothing unusual is being done, and the build can be forgotten about
-once you've set it up. Details follow.
-
-If you do not intend to expose the IDL to mobile platforms e.g. android you
-can exclude the source files and the idl files by checking for the `target_os` buildflag.
-Example [idl_in_modules.gni](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/bindings/idl_in_modules.gni;drc=105716ef02f9e386c61848f649664d2d0f59ad52;l=1171).
-
-If excluding Android, also update [not-webview-exposed.txt](https://source.chromium.org/chromium/chromium/src/+/main:android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt) with the excluded IDLs.
-
-## Web IDL
-
-* Find spec
-* Create a new file called foo.idl in the same directory as you will
- implement the interface, generally
- third_party/blink/renderer/core/\* or
- third_party/blink/renderer/modules/\*
-
-The initial IDL file should contain:
-
-* License header
-* Link to the spec
-* Link to tracking bug for implementing the interface
-* IDL "fragment" copied from the spec
-
-See [Blink IDL: Style](/blink/webidl#TOC-Style) for style guide.
-
-IDL files contain two types of data:
-
-* Blink *interface* – behavior; ideally should agree with spec, but
- differences from spec should be reflected in the IDL itself
-* Blink *implementation* – internal-use data, like function names or
- implementation-specific flags, like memory management.
-
-Note that if Blink behavior differs from the spec, the Blink IDL file should
-reflect *Blink* behavior. This makes interface differences visible, rather than
-hiding them in the C++ implementation or bindings generator.
-
-Also as a rule, nop data should *not* be included: if Blink (bindings generator)
-ignores an IDL keyword or extended attribute, do not include it, as it suggests
-a difference in behavior when there is none. If this results in a difference
-from the spec, this is *good*, as it makes the difference in behavior visible.
-
-Initially you likely want to comment out all attributes and operations,
-uncommenting them as you implement them.
-
-### Nulls and non-finite numbers
-
-Two points to be careful of, and which are often incorrect in specs,
-particularly older specs, are *nullability* and *non-finite* values (infinities
-and NaN). These are both to ensure correct type checking. If these are incorrect
-in the spec – for example, a prose specifying behavior on non-finite values, but
-the IDL not reflecting this – please file a spec bug upstream, and link to it in
-the IDL file.
-
-If null values are valid (for attributes, argument types, or method return
-values), the type MUST be marked with a ? to indicate nullable, as in `attribute
-Foo? foo;`
-
-Similarly, IEEE floating point allows non-finite numbers (infinities and NaN);
-if these are valid, the floating point type – `float` or `double` – MUST be
-marked as `unrestricted` as in `unrestricted float` or `unrestricted double` –
-the bare `float` or `double` means *finite* floating point.
-
-Ref: [double](http://heycam.github.io/webidl/#idl-double), [unrestricted
-double](http://heycam.github.io/webidl/#idl-unrestricted-double), [Type mapping:
-double](http://heycam.github.io/webidl/#es-double), [Type mapping: unrestricted
-double](http://heycam.github.io/webidl/#es-unrestricted-double)
-
-### Union types
-
-Many older specs use overloading when a union type argument would be clearer.
-Please match spec, but file a spec bug for these and link to it. For example:
-
-```none
-// FIXME: should be void bar((long or Foo) foo); https://www.w3.org/Bugs/Public/show_bug.cgi?id=123
-void bar(long foo);
-void bar(Foo foo);
-```
-
-Also, beware that you can't have multiple nullable arguments in the
-distinguishing position in an overload, as these are not distinguishing (what
-does `null` resolve to?). This is best resolved by using a union type if
-possible; otherwise make sure to mark only one overload as having a nullable
-argument in that position.
-
-Don't do this:
-
-```none
-void zork(Foo? x);
-void zork(Bar? x); // What does zork(null) resolve to?
-```
-
-Instead do this:
-
-```none
-void zork(Foo? x);
-void zork(Bar x);
-```
-
-...but preferably this:
-
-```none
-void zork((Foo or Bar)? x);
-```
-
-### Extended attributes
-
-You will often need to add Blink-specific extended attributes to specify
-implementation details.
-
-**Please comment extended attributes – *why* do you need special behavior?**
-
-### Bindings
-
-See [Web IDL in Blink](/blink/webidl).
-
-## C++
-
-Bindings code assumes that a C++ class exists for each interface, with methods
-for each attribute or operation (with some exceptions). Attributes are
-implemented as
-[properties](http://en.wikipedia.org/wiki/Property_(programming)), meaning that
-while in the JavaScript interface these are read and written as attributes, in
-C++ these are read and written by getter and setter methods.
-
-### Names
-
-The class and methods have default names, which can be overridden by the
-`[ImplementedAs]` extended attribute; this is **strongly discouraged,** and
-method names should align with the spec unless there is very good reason for
-them to differ (this is sometimes necessary when there is a conflict, say when
-inheriting another interface).
-
-Given an IDL file foo.idl:
-
-```none
-interface Foo {
-    attribute long a;
-    attribute DOMString cssText;
-    void f();
-    void f(long arg);
-    void g(optional long arg);
-};
-```
-
-...a minimal header file foo.h illustrating this is:
-
-```none
-class Foo {
- public:
-  int32_t a();
-  void setA(int32_t value);
-  String cssText();
-  void setCSSText(const String&);
-  void f();
-  void f(int32_t arg);
-  void g();
-  void g(int32_t arg);
-};
-```
-
-* IDL interfaces assume a class of the same name: `class Foo`.
-* IDL attributes call a getter of the same name, and setter with set
- prepended and capitalization fixed: `a()` and `setA()`. This
- correctly capitalizes acronyms, so the setter for cssText is
- `setCSSText()`.
-* IDL operations call a C++ method of the same name: `f()`.
-* Web IDL overloading and IDL optional arguments *without* default
- values map directly to C++ overloading (optional arguments *without*
- default values correspond to an overload either including or
- excluding the argument).
-* IDL optional arguments *with* default values map to C++ calls with
- these values filled in, and thus do not require C++ overloading.
- * C++ default values SHOULD NOT be used unless necessary.
- * There are various complicated corner cases, like non-trailing
- optional arguments without defaults, like
- * `foo(optional long x, optional long y = 0);`
-
-### Type information ("ScriptWrappable")
-
-Blink objects that are visible in JavaScript need type information,
-fundamentally because JavaScript is [dynamically
-typed](http://en.wikipedia.org/wiki/Dynamic_typing) (so *values* have type),
-concretely because the bindings code uses [type
-introspection](http://en.wikipedia.org/wiki/Type_introspection) for [dynamic
-dispatch](http://en.wikipedia.org/wiki/Dynamic_dispatch) (function resolution of
-bindings functions): given a C++ object (representing the implementation of a
-JavaScript object), accessing it from V8 requires calling the correct C++
-binding methods, which requires knowing its JavaScript type (i.e., the IDL
-interface type).
-
-Blink does not use C++ [run-time type
-information](http://en.wikipedia.org/wiki/Run-time_type_information) (RTTI), and
-thus the type information must be stored separately.
-
-There are various ways this is done, most simply (for Blink developers) by the
-C++ class inheriting `ScriptWrappable` and placing `DEFINE_WRAPPERTYPEINFO` in
-the class declaration. Stylistically `ScriptWrappable` or its inheritance MUST
-be the first class.
-
-Explicitly:
-
-foo.h:
-
-```none
-#ifndef third_party_blink_renderer_core_foo_foo_h
-#define third_party_blink_renderer_core_foo_foo_h
-#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
-namespace blink {
-class Foo : public ScriptWrappable /* maybe others */ {
-  DEFINE_WRAPPERTYPEINFO();
- public:
-  // ...
-};
-} // namespace blink
-#endif third_party_blink_renderer_core_foo_foo_h
-```
-
-### Garbage Collection
-
-## See [Blink GC API
-reference](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/heap/BlinkGCAPIReference.md)
-
-## Build
-
-You need to list the `.idl` file and `.h/.cc` files in the correct GN variable
-so that they will be built (bindings generated, Blink code compiled.)
-
-**Now we are replacing bindings code generators from version 1 to 2, and thus
-you have to work for both generators.**
-
-There are 3 dichotomies in these `.idl` files, which affect where you list them
-in the build:
-
-* core vs. modules – which component they are in
-* main interface vs. dependency – partial interfaces and interface
- mixins do not have individual bindings (`.h/.cc`) generated
-* testing or not – testing interfaces do not appear in the aggregate
- bindings
-
-For the code generator v1, see comments in
-[core_idl_files.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/core/core_idl_files.gni)
-and/or
-[modules_idl_files.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/modules/modules_idl_files.gni)
-in which GN variable your IDL file should be listed. And if your IDL file
-defines a callback function or a new union type, see [generated.gni for core
-component](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/core/v8/generated.gni)
-or [generated.gni for modules
-component](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/modules/v8/generated.gni)
-in which GN variable generated files should be listed.
-
-For the code generator v2, see
-[idl_in_core.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/idl_in_core.gni)
-or
-[idl_in_modules.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/idl_in_modules.gni)
-for IDL files, and
-[generated_in_core.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/generated_in_core.gni)
-or
-[generated_in_modules.gni](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/bindings/generated_in_modules.gni)
-for generated files.
-
-## Tests
-
-Make sure to test:
-
-* default objects – create a new object and pass as argument or assign
- to an attribute
-* `undefined/null` – if passed to nullable arguments or set to
- nullable attributes, should not throw; if passed to non-nullable
- arguments or set to non-nullable attributes, should throw but not
- crash
-
-## Subtyping
-
-There are three mechanisms for subtyping in IDL:
-
-* inheritance: `interface A : B { ... };`
-* [includes
- statements](https://heycam.github.io/webidl/#includes-statement): `A
- includes B;`
-* partial interface: `partial interface A { ... };`
-
-The corresponding C++ implementations are as follows, here illustrated for
-`attribute T foo;`
-
-* inheritance: handled by JavaScript, but often have corresponding C++
- inheritance; one of:
- * `class A { ... };`
- * `class A : B { ... };`
-* includes: C++ class must implement methods, either itself or via
- inheritance; one of:
- * `class A { public: T foo(); void setFoo(...); ... };`
- * `class A : B { ... };`
-* partial interface: implemented as static member functions in an
- unrelated class:
- * `class B { static T foo(A& a); static void setFoo(A& a, ...);
- ... };`
-
-IDL files SHOULD agree with spec, and almost always MUST do so. It is not ok to
-change the kind of subtyping or move members between interfaces, and violations
-SHOULD or MUST be fixed:
-
-* Inheritance is visible to JavaScript (in the prototype chain), so it
- MUST be correct (it is NOT ok to have non-spec inheritance
- relationships).
-* The distinction between "member of (main) interface definition,
- member of included interface mixin, member of partial interface" is
- not visible in JavaScript (these are all just properties of the
- prototype object), so while this SHOULD agree with spec (so Blink
- IDL agrees with IDL in the spec), this is not strictly required.
-* The distinction between "member of (child) interface" and "member of
- parent interface" is visible in JavaScript (as property on prototype
- object corresponding to (child) interface vs. property on prototype
- object corresponding to parent interface), and thus MUST be correct
- (it is NOT ok to move members between an interface and a parent if
- this disagrees with spec).
-
-#### Technical details
-
-While members of an interface definition, members of interface mixin, and
-members of partial interfaces are identical for JavaScript, partial interface
-members – and members of certain interface mixin, namely those with the
-`[TreatAsPartial]` extended attribute – are treated differently internally in
-Blink (see below).
-
-Inheritance and implements are both *interface inheritance*. JavaScript has
-single inheritance, and IDL inheritance corresponds to JavaScript inheritance,
-while IDL `includes` provides multiple inheritance in IDL, which does not
-correspond to inheritance in JavaScript.
-
-In both cases, by spec, members of the inherited interface or interface mixin
-must be implemented on the JavaScript object implementing the interface.
-Concretely, members of inherited interfaces are implemented as properties on the
-prototype object of the parent interface, while members of interface mixins are
-implemented as properties of the implementing interface.
-
-In C++, members of an interface definition and members of implemented interfaces
-are implemented on the C++ object (referred to as the parameter or variable
-`impl`) implementing the JavaScript object. Specifically this is done in the
-Blink class corresponding to the IDL interface *or a base class* – the C++
-hierarchy is invisible to both JavaScript and the bindings.
-
-Implementation-wise, inheritance and implements differ in two ways:
-
-* Inheritance sets the prototype object (this is visible in JavaScript
- via `getPrototypeOf`); `implements` does not.
-* Bindings are not generated for inherited members (JavaScript
- dispatches these to the parent prototype), but *are* generated for
- implemented members.
-
-For simplicity, in the wrapper (used by V8 to call Blink) the bindings just
-treat members of implemented interfaces and partial interfaces as if they were
-part of the main interface: there is no multiple inheritance in the bindings
-implementation.
-
-If (IDL) interface A inherits from interface B, then usually (C++) class A
-inherits from class B, meaning that:
-
-```none
-interface A : B { /* ... */ };
-```
-
-is *usually* implemented as:
-
-```none
-class A : B { /* ... */ };
-```
-
-...or perhaps:
-
-```none
-class A : C { /* ... */ };
-class C : B { /* ... */ };
-```
-
-However, the bindings are agnostic about this, and simply set the prototype in
-the wrapper object to be the inherited interface (concretely, sets the
-parentClass attribute in the WrapperTypeInfo of the class's bindings). Dispatch
-is thus done in JavaScript.
-
-"A includes B;" should mean that members declared in (IDL) interface mixin B are
-members of (C++) classes implementing A.
-
-Partial interfaces formally are type extension (*external* type extension, since
-specified in a separate place from the original definition), and in principle
-are simply part of the interface, just defined separately, as a convenience for
-spec authors. However in practice, members of partial interfaces are *not*
-assumed to be implemented on the C++ object (`impl`), and are not defined in the
-Blink class implementing the interface. Instead, they are implemented as static
-members of a separate class, which take `impl` as their first argument. This is
-done because in practice, partial interfaces are type extensions, which often
-only used in subtypes or are deactivated (via conditionals or as [runtime
-enabled features](/blink/runtime-enabled-features)), and we do not want to bloat
-the main Blink class to include these.
-
-Further, in some cases we must use type extension (static methods) for
-implemented interfaces as well. This is due to componentization in Blink (see
-[Browser
-Components](http://www.chromium.org/developers/design-documents/browser-components)),
-currently `core` versus `modules.` Code in `core` cannot inherit from code in
-`modules,` and thus if an interface in `core` implements an interface in
-`modules,` this must be implemented via type extension (static methods in
-`modules`). This is an exceptional case, and indicates that Blink's internal
-layering (componentization) disagrees with the layering implied by the IDL
-specs, and formally should be resolved by moving the relevant interface from
-`modules` to `core.` This is not always possible or desirable (for internal
-implementation reasons), and thus static methods can be specified via the
-`[TreatAsPartial]` extended attribute on the implemented interface.
-
-## Inheritance and code reuse
-
-IDL has single inheritance, which maps directly to JavaScript inheritance
-(prototype chain). C++ has multiple inheritance, and the two hierarchies need
-not be related.
-
-IDL has 3 mechanisms for combining interfaces:
-
-* (Single) inheritance
-* implements
-* partial interface
-
-## See also
-
-Other Blink interfaces, not standard Web IDL interfaces:
-
-* [Public C++ API](/blink/public-c-api): C++ API used by C++ programs
- embedding Blink (not JavaScript), including the (C++) "web API"
-* [Implementing a new extension
- API](/developers/design-documents/extensions/proposed-changes/creating-new-apis):
- Chrome extensions (JavaScript interfaces used by extensions), also
- use a dialect of Web IDL for describing interfaces
-
-## External links
-
-For reference, documentation by other projects.
-
-* Mozilla Developer Network (MDN)
- * [Web API
- reference](https://developer.mozilla.org/en-US/docs/Web/Reference/API)
- * [WebIDL
- bindings](https://developer.mozilla.org/en-US/docs/Mozilla/WebIDL_bindings)
- * [IDL interface
- rules](https://developer.mozilla.org/en-US/docs/Developer_Guide/Interface_development_guide/IDL_interface_rules)
-* W3C Wiki: [Web IDL](http://www.w3.org/wiki/Web_IDL) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-09 at 7.43.31 PM.png.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-09 at 7.43.31 PM.png.sha1
deleted file mode 100644
index 9216636f237..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-09 at 7.43.31 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dd5def7fbdd38e07bf93fd83bdb0da19dc4c29cb \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 11.59.08 PM.png.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 11.59.08 PM.png.sha1
deleted file mode 100644
index ddf05f9fe4f..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 11.59.08 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e473be751467e705fdb5fc753d5e8c7530943c9a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 12.40.51 AM.png.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 12.40.51 AM.png.sha1
deleted file mode 100644
index 1682956f190..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-10 at 12.40.51 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5df3ab8d7cf71078fa2530fa54936c9701cd1837 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.00.09 AM.png.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.00.09 AM.png.sha1
deleted file mode 100644
index ca0abfa561c..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.00.09 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-94c1adf59bd65d65f58cd1d9a757ea20c6ec8566 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.02.41 AM.png.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.02.41 AM.png.sha1
deleted file mode 100644
index 2376682a3a8..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-11 at 12.02.41 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-87b76199e3e1a18abed84daff6d9f25e96268df4 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.48.28 PM.png.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.48.28 PM.png.sha1
deleted file mode 100644
index a5a45cdaf34..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.48.28 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8d8718bd85ce4e6a461b136ea2bb3a402fb4c773 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.56.03 PM.png.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.56.03 PM.png.sha1
deleted file mode 100644
index 44667a94a0e..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/Screen shot 2012-05-14 at 4.56.03 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d4cbfaf3f8d67345405e2f30615bbd9fbf08253a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/index.md b/chromium/docs/website/site/developers/web-intents-in-chrome/index.md
deleted file mode 100644
index 34ea5e5b920..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/index.md
+++ /dev/null
@@ -1,633 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: web-intents-in-chrome
-title: Web Intents in Chrome
----
-
-**# [TOC]**
-
-**# Introduction to Web Intents**
-
-**First, what is web intents? Imagine you're building a web app and you want to allow users to edit pictures. You could write that functionality yourself, but it will require a huge amount of work and likely won't be nearly as good as other existing photo web apps. You could hard-code integration with a collection of existing photo editing web apps, but that can lead to a cluttered interface and requires manual intervention later to integrate with new photo editing apps that may emerge. Worse, it forces your chosen integrations upon your end users. One of the greatest strengths of the web is that the the ease of linking allows innovative new apps to succeed without asking anyone else's permission--but up until now that hasn't applied to integrations between web apps.**
-**Web Intents is an emerging [W3C
-specification](http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html)
-inspired by Android's [Intents
-system](http://developer.android.com/guide/topics/intents/intents-filters.html)
-that aims to solve that problem. Web apps can register as a service that
-provides specific types of functionality. Later, other client web apps can
-request that type of functionality, and the browser will mediate the connection,
-allowing the user to pick which application to service the request--or easily
-discover compatible applications from the Chrome Web Store. The apps don't need
-to know anything about one another. This video gives a quick overview:**
-
-**Web Intents makes web developers' lives easier--for client web apps using web services, it means you have to do less work to include functionality that others have already built, and for service web apps providing those services it means your app can succeed on its quality alone--not which hardcoded integrations you happen to have negotiated.**
-**But the real benefit comes for users, who get to use the apps they choose themselves from among a richer ecosystem of powerful, interconnected apps.**
-
-**# Status of the API**
-
-**Web Intents is enabled as an experimental API starting in Chrome 19 in order to gather feedback from web developers to shape the future of the API. In particular, this experimental version is prefixed and only allows applications to register as services in their Chrome Web Store app manifest.**
-**This is an experimental API that will change over time with feedback from real world usage, potentially in backwards-incompatible ways. If you choose to experiment with Web Intents, be sure to follow the[ Web Intents Google + page](https://plus.google.com/116171619992010691739/posts), where we'll announce any impending breaking changes in Chrome's implementation based on the feedback we receive from this experimental release. You can provide feedback on the API or ask questions on the [Web Intents discussion list](https://groups.google.com/forum/?fromgroups#!forum/web-intents-discuss).**
-
-**# Walkthrough of an example**
-
-**See the [reference](/developers/web-intents-in-chrome#TOC-Reference) section for low-level API documentation.**
-**[Imagemator.com](http://www.imagemator.com/) is a simple image workbench app
-that uses Web Intents for most of its functionality.**
-
-**[<img alt="image"
-src="/developers/web-intents-in-chrome/Screen%20shot%202012-05-09%20at%207.43.31%20PM.png">](/developers/web-intents-in-chrome/Screen%20shot%202012-05-09%20at%207.43.31%20PM.png)**
-
-It does not host any complex functionality, instead it orchestrates the use of the features of other apps to provide a rich user experience.**
-The user will need to pick an image to start, once selected the user will be presented with a Choice of service to use that support the “[pick](http://webintents.org/pick) image” intent, the user will choose their preferred service to select the image of their choice.**
-If the user doesn't have any apps installed that can handle the intent, they'll
-see a list of suggested apps that they can install with one click.**
-
-[<img alt="image"
-src="/developers/web-intents-in-chrome/noinstalls.PNG">](/developers/web-intents-in-chrome/noinstalls.PNG)
-
-**If, however, the user already has apps installed that can handle the intent,
-they'll see a list like this:**
-
-[<img alt="image"
-src="/developers/web-intents-in-chrome/with.PNG">](/developers/web-intents-in-chrome/with.PNG)
-
-**In our case, the user might choose CloudFilePicker.**
-
-[<img alt="image"
-src="/developers/web-intents-in-chrome/Screen%20shot%202012-05-11%20at%2012.02.41%20AM.png">](/developers/web-intents-in-chrome/Screen%20shot%202012-05-11%20at%2012.02.41%20AM.png)
-
-**The user selects the file and is returned back to the original application
-with the data.**
-
-[<img alt="image"
-src="/developers/web-intents-in-chrome/Screen%20shot%202012-05-14%20at%204.48.28%20PM.png">](/developers/web-intents-in-chrome/Screen%20shot%202012-05-14%20at%204.48.28%20PM.png)
-
-**The user can now choose three options: [Edit](http://webintents.org/edit),
-[Save](http://webintents.org/save) or [Share](http://webintents.org/share). It
-is likely that the user will want to edit the image before sharing it to their
-friends. When the user clicks “Edit” the browser will resolve all the services
-that support “image editing” and offer them the choice of their preferred
-service. When the service has been chosen the browser packages up all the data
-from imagemator.com and passes it to the service app (in this case
-<http://mememator.com>)**
-
-[<img alt="image"
-src="/developers/web-intents-in-chrome/Screen%20shot%202012-05-14%20at%204.56.03%20PM.png">](/developers/web-intents-in-chrome/Screen%20shot%202012-05-14%20at%204.56.03%20PM.png)
-
-**A lot has happened in this workflow, luckily the code is pretty simple. Let’s dive into the code that made this all possible.**
-**The user can't do much without an image, but Imagemator doesn't have built in functionality to choose an image--so it will fire a pick intent. The code for this is as follows:**
-
-**var choose = document.getElementById('choose')**
-
-**choose.addEventListener('click', function(e) {**
-
-**var params = {**
-
-**'action': '<http://webintents.org/pick>',**
-
-**'type': 'image/\*'**
-
-**};**
-
-**var intent = new WebKitIntent(params);**
-
-**window.navigator.webkitStartActivity(intent, function(data) {**
-**loadImage(data);**
-**});**
-**}, false);**
-
-**Lets break down the code:**
-
-1. **Create an intent object. The intent object describes the data that
- will be used by the browser to resolve the list of services that the
- user can use.**
-
-**To do this, we create a “parameters” dictionary. The dictionary contains a bag of parameters that are used by the browser to determine the services to present to the user.**
-
-**var params = {**
-
-**'action': '<http://webintents.org/pick>',**
-
-**'type': 'image/\*'**
-
-**};**
-
-**var intent = new WebKitIntent(params);**
-
-**In this example we are telling the browser to find a list of services that support the “pick” (action) intent and also support that operation on “images” (type). The type argument is constructed as a MIME type: image/png represents png’s, video/webm represents web videos and so on. The type argument can also be a wildcard substitution where “image/\*” is shorthand for every image type.**
-
-1. **Now that the intent object has been created we need to ask the
- browser to find the services to use to satisfy the request. This can
- be achieved using the following code:**
-
-**var onSuccess = function(data) {**
-
-**loadImage(data);**
-
-**};**
-
-**var onFailure = function() {**
-
-**// perform error logic**
-
-**}**
-
-**window.navigator.webkitStartActivity(intent, onSuccess, onFailure);**
-
-**startActivity takes three parameters: the intent, the success callback and the failure callback.**
-
-**The success callback receives one parameter “data”. This is the data that is returned from the service the user chose. Once we have that data we can do anything we want with it - in our case loading it into an image object.**
-
-**The failure callback receives no data, but can be used to provide feedback to the user that they might need to try and re-perform the action. Failures occur when the user cancels the action in the webpage or there is an error such as Authentication issues that the service app wants to let the calling app know something is wrong. In the future there may be more reasons why the error handler is called; this is an active area of exploration in the specification.**
-
-**For an application to be available in this list it has to first be in the Chrome Web Store with an intents declaration as follows:**
-
-**{**
-
-**"name": "Cloud File Picker",**
-
-**"version": "1.0.0.6",**
-
-**"icons" : {**
-
-**"128" : "128.png"**
-
-**},**
-
-**"app" : {**
-
-**"urls" : \["http://www.cloudfilepicker.com/"\],**
-
-**"launch" : {**
-
-**"web_url" : "http://www.cloudfilepicker.com/"**
-
-**}**
-
-**},**
-
-**"intents": {**
-
-**"http://webintents.org/pick" : \[{**
-
-**"type" : \["image/png", "image/jpg", "image/jpeg", "image/bmp"\],**
-
-**"href" : "<http://www.cloudfilepicker.com/index.html>",**
-
-**"disposition" : "window",**
-
-**"title" : "Pick file from CloudFilePicker.com"**
-
-**}\]**
-
-**}**
-
-**}**
-
-**This small piece of JSON in the manifest is a dictionary that describes the services your applications offer. In this case, we are telling Chrome that our app supports the [pick intent](http://webintents.org/pick). Each intent declaration is an array of objects that contain the types (“type”) of data our app can work on, what to launch (“href”) and the title to present to the user in the service picker.**
-**More information about the manifest declaration can be found on [code.google.com](http://code.google.com/chrome/extensions/beta/manifest.html#intents). Once you have this in your manifest you are ready to roll.**
-**The data will be available on window.webkitIntent. Because we are handling the pick intent, we don’t need to access any of the data on the intent, but rather send the selected data back to the user. Other intent types may have different rules.**
-
-**var select = document.getElementById('select')**
-
-**select.addEventListener('click', function(e) {**
-
-**var intent = window.webkitIntent;**
-
-**var blob = /\* construct a blob of the image \*/**
-
-**intent.postResult(blob);**
-
-**}, false);**
-
-**This is all that needs to be done. We find the intent object that has been passed in to the client and call “postResult” to return the data back to the calling app.**
-**To be able to edit the image that the user has selected, you can invoke the “[edit](http://webintents.org/edit)” intent as follows:**
-
-**var edit = document.getElementById('edit')**
-
-**edit.addEventListener('click', function(e) {**
-
-**var params = {**
-
-**'action': '<http://webintents.org/edit>',**
-
-**'type': 'image/\*',**
-
-**'data': toBlob(img) // convert dataURI to Blob**
-
-**};**
-
-**var intent = new WebKitIntent(params);**
-
-**var onSuccess = function(data) {**
-
-**loadImage(data);**
-
-**};**
-
-**var onFailure = function() {**
-
-**// perform error logic**
-
-**}**
-
-**window.navigator.webkitStartActivity(intent, onSuccess, onFailure);**
-
-**}, false);**
-
-**The code for “edit” is very similar to “pick”, and this is the point of Web Intents. Apps now only need to care about how to create the data to send between apps and not how to send the data or discover the services to integrate with.**
-**The demo so far has only ever opened applications in a new window. Applications can however, be opened in two modes: new window context and inline. The new window context, the default, will open up a brand new tab and direct the user’s focus to this experience; the inline context allows the user to keep the existing task in focus whilst presenting the new app in a small region over the content.**
-**Currently inline intents will show up in a fixed window size (300px by 300px),
-but in the future the inline intents window will expand to fit the contents of
-the service.**
-
-[<img alt="image"
-src="/developers/web-intents-in-chrome/Screen%20shot%202012-05-10%20at%2012.40.51%20AM.png">](/developers/web-intents-in-chrome/Screen%20shot%202012-05-10%20at%2012.40.51%20AM.png)
-
-**Web intents is a powerful model with many available actions ([share](http://webintents.org/share), [edit](http://webintents.org/edit), [save](http://webintents.org/save), [pick](http://webintents.org/pick)) allowing us to build eco-systems of functionality that developers can take advantage of to deliver great apps. By opening your existing application up via the intents system you are enabling a new set of client applications and users to discover, install and use your applications in ways that you might not have imagined.**
-
-**# FAQ**
-
-**## What's the support like in other browsers?**
-
-**Web Intents is an emerging specification that at the moment is only supported in Chrome (starting in version 19). Other browsers have expressed interest in the concept, but haven't announced formal plans at this time. Limited [shims exist](http://webintents.org/#javascriptshim), but we recommend feature detection to support browsers that don't have Web Intents support.**
-
-**## How can I influence the API's development?**
-
-**First and foremost, by using it! It's impossible to design APIs in a vacuum, especially for ones as potentially complex as Web Intents. Make sure you're subscribed to the [Web Intents discussion list](https://groups.google.com/forum/?fromgroups#!forum/web-intents-discuss), and send any comments, questions, or suggestions you have. If you're interested in directly influencing the specification, we encourage you to participate in the [W3C mailing list](http://lists.w3.org/Archives/Public/public-web-intents/).**
-
-**## What types of changes are expected in the future?**
-
-**Web Intents is an evolving specification, and it's impossible to know with certainty how it will develop in the future. However, here are some features that may be added in the future:**
-
-* **Explicit intents: allows the client app developer to specify the
- exact service to use without showing the picker.**
-* **Embedded intents: an extension of explicit intents which allows
- the client to connect to a client-supplied iframe embedded in the
- client page.**
-* **Intent suggestions: allows the client app developers to specify a
- list of potential services that the user can use.**
-* **URL filtering: analogous to Androids URL filtering. By letting the
- developer define a URL pattern that encompasses the scope of the
- app.**
-* **User-configured default services**
-* **Protocol registration: enabling intents to be able to register
- handlers for mailto etc**
-
-**## Why is this an "experimental" API?**
-
-**Although the Web Intents specification has been developed in the open with the input of many people, it's still difficult to predict exactly how it will be used in practice. Web Intents is an experimental API because we want to incorporate feedback from real web developers to ensure the feature is as useful as it can be.**
-**This means that in the future there may be backwards-incompatible changes. To be alerted of breaking changes in upcoming versions of Chrome, follow our [Google + page](https://plus.google.com/116171619992010691739/posts). We'll also send announcements to the discussion list.**
-
-**## I'm having trouble getting it working. Where can I go for help?**
-
-**Send any comments, questions, or suggestions to the [Web Intents discussion list](https://groups.google.com/forum/?fromgroups#!forum/web-intents-discuss).**
-
-**## How will breaking changes be communicated?**
-
-**We'll give advance warning of breaking changes on our [Google + page](https://plus.google.com/116171619992010691739/posts). We'll also send announcements to the discussion list.**
-
-**## What intents are available now?**
-
-**There are several defined at <http://webintents.org/>**
-
-* **<http://webintents.org/share> - Share - when the user wants to
- share**
-* **<http://webintents.org/view> - View - when the user wants to open
- a file or data in another application**
-* **<http://webintents.org/edit> - Edit - when the user wants to edit
- data in another application**
-* **<http://webintents.org/save> - Save - when the user needs to save
- data to another app**
-* **<http://webintents.org/pick> - Pick - when the user needs to
- retrieve data from another app**
-* **<http://webintents.org/subscribe> - Subscribe - when the user
- wants to subscribe to a resource such as an RSS feed**
-
-**## Can we define our own intents?**
-
-**Yes. The “action” verb is a string so you have the ability to define your own actions.**
-**We are using URI’s to define actions. URIs allows us to namespace the action verb to avoid conflicts and it also gives us the ability to provide a place for the developer to go to read the documentation, although there is nothing special about "webintents.org".**
-
-**## Should we define our own intents?**
-
-**Try to see if your action will fit into an existing scheme. This will allow you to take advantage of existing app ecosystems that use that. If there is no verb that matches then create a new action.**
-
-**# Staying in the loop**
-
-**Remember that this is an experimental API that is evolving rapidly. In the future we may make breaking changes to the API. Only use the API if you can commit to staying current with any changes that may occur.**
-**To be alerted of breaking changes in upcoming versions of Chrome, follow our [Google + page](https://plus.google.com/116171619992010691739/posts). We'll also send announcements to the discussion list.**
-**To ask for help, talk about the implementation in Chrome, float informal ideas, or general discussion, use the [Web Intents discussion list](https://groups.google.com/forum/?fromgroups#!forum/web-intents-discuss).**
-**To participate in formal discussions about evolving the specification,
-participate in the [W3C mailing
-list](http://lists.w3.org/Archives/Public/public-web-intents/).**
-
----
-
-**## Reference**
-
-**Web Intents allows your application to quickly communicate with other applications on the user’s system and inside their browser. Your application can register to handle specific user actions such as “Editing” “Images” via the manifest.json; your application can also invoke actions to be handled by other applications.**
-
-**## Configuring Intents**
-
-**### Register to handle an action**
-
-**The [Web Intents specification](http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html) describes a mechanism to register your applications abilities with the browser via a special &lt;intent&gt; HTML tag.**
-**In Chrome M19, to register the ability for your application to be able to handle specific actions you are required to host your application in the Chrome Web Store AND to add an [intent section](http://code.google.com/chrome/extensions/beta/manifest.html#intents) to your [manifest](http://code.google.com/chrome/extensions/beta/manifest.html) that describes the actions your app supports.**
-
-**#### Example**
-
-**"intents":{**
-**"http://webintents.org/edit" : \[{**
-**"title" : "Best Image editing app",**
-**"type" : \["image/\*"\],**
-**"href" : "/index.html"**
-**}\]**
-**}**
-
-**### Handling just Content-types**
-
-**Your application can be the user’s preferred choice for handling a file type. For example, your application could handling viewing images or viewing pdfs.**
-**As of Chrome version 19, only the following content-types may be registered:**
-**All Operating Systems**
-
-* **"application/rss+xml"**
-* **"application/atom+xml"**
-
-**ChromeOS-only**
-
-* **"application/msword"**
-* **"application/vnd.ms-powerpoint"**
-* **"application/vnd.ms-excel"**
-* **"application/vnd.openxmlformats-officedocument.wordprocessingml.document"**
-* **"application/vnd.openxmlformats-officedocument.presentationml.presentation"**
-* **"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"**
-
-**Over time we may add more content-types to the list.**
-
-**#### Required Manifest Items**
-
-**You must supply the intent in the manifest and use the “<http://webintents.org/view>” action**
-
-**#### Example**
-
-**"intents": {**
-**"http://webintents.org/view" : \[{**
-**"title" : "RSS Feed Reader",**
-**"type" : \["application/atom+xml", "application/rss+xml"\],**
-**"href" : "/index.html"**
-**}\]**
-**}**
-
-**### Controlling how your app is opened**
-
-**You can control how your app is opened by users by defining a “disposition”. You currently have two options: open in a new window specified by the disposition “window”, and open in the intent picker specified by the disposition “inline”.**
-
-**#### Required Manifest Items**
-
-**You must supply the intent in the manifest and you can optionally add in a “disposition”, by default it is “window”.**
-
-**#### New Window Example**
-
-**"intents":{**
-**"http://webintents.org/edit" : \[{**
-**"title" : "Best Image editing app",**
-**"type" : \["image/\*"\],**
-**"href" : "/index.html",**
-**"disposition" : "window"**
-**}\]**
-**}**
-**<img alt="image" src="https://lh4.googleusercontent.com/OYOr5ooakp79Q0N6XcQ2CVcpE9KPwENmW0sv4NavGlrq4-B_2yrWAGDmwR1TZtSHXdC5BdD10boOPrZFVtGVoJh6rJBRsz6BiQNAEmLb4Nw5SOYebEY" height=318px; width=493px;>**
-
-**#### Inline Example**
-
-**"intents": {**
-**"http://webintents.org/edit" : \[{**
-**"title" : "Best Image editing app",**
-**"type" : \["image/\*"\],**
-**"href" : "/index.html",**
-**"disposition" : "inline"**
-**}\]**
-**}**
-**<img alt="image" src="https://lh3.googleusercontent.com/rKFBstgk0oxp9UuMYjtXB068n1isi_lpqOoYXwPeljy3hwyjfpGttn4iR-j9bcx3n3Eu8f0sK3oJBaO2DDOVbNk4Vpa1poYh1_hN9xq8tLEjDF9bb3k" height=324px; width=476px;>**
-
-**### Localizing your app title**
-
-**If your application or extension is localalized as per the guidelines in[ http://code.google.com/chrome/extensions/i18n.html](http://code.google.com/chrome/extensions/i18n.html) you will find it possible to also localize the title of your intent in the picker using the exact same infrastructure.**
-**"intents": {**
-**"http://webintents.org/edit" : \[{**
-**"title" : "__MSG_intent_title__",**
-**"type" : \["image/\*"\],**
-**"href" : "/index.html",**
-**"disposition" : "inline"**
-**}\]**
-**}**
-
-**## Invoking Intents**
-
-**### Invoking an action**
-
-**If your application needs to be able to use the functionality of another application it can simply ask the browser for it. For example to ask for an application that supports image editing it is a as simple as:**
-**var intent = new WebKitIntent("http://webintents.org/edit", "image/png", "dataUri://");**
-**var onSuccess = function(data) { /\* process remote data \*/ };**
-**var onFailure = function() { /\* handle the error \*/ };**
-**window.navigator.webkitStartActivity(intent, onSuccess, onFailure);**
-
-**### Handling data returned to the calling application**
-
-**A lot of applications want to cooperate with the app that invoked them. It is easy to send data back to the calling client by using \`intent.postResult\`:**
-**var intent = new WebKitIntent("http://webintents.org/edit", "image/png", "dataUri://");**
-**var onSuccess = function(data) {**
-**// Load the data that was edited into an image.**
-**if(data instanceof Blob) {**
-**img.src = window.URL.createObjectURL(data)**
-**}**
-**else {**
-**img.src = data;**
-**}**
-**};**
-**var onFailure = function() { /\* handle the error \*/ };**
-**window.navigator.webkitStartActivity(intent, onSuccess, onFailure);**
-
-**### Handling Errors and Exceptions**
-
-**If a service application has signalled to the client application that an un-recoverable error has occurred then your onError callback will be invoked .**
-**var intent = new WebKitIntent("http://webintents.org/edit", "image/png", "dataUri://");**
-**var onSuccess = function(data) {};**
-**var onFailure = function() {**
-**console.log(“an error has occurred with: ” + intent.action);**
-**// Update the UI to ask the user to re-choose their action.**
-**};**
-**window.navigator.webkitStartActivity(intent, onSuccess, onFailure);**
-
-**## Handling Intents (Service)**
-
-**### Reading the data sent in to your application**
-
-**Once you have registered your application to be able to handle intents, you will find that the window.intent object is populated when your application loads. The specific data that is populated will depend on the calling conventions for the intent you are using. You can find out more about the calling conventions for various intents at <http://webintents.org>.**
-**document.addEventListener("load", function() {**
-**if(!!window.webkitIntent) {**
-**var action = window.webkitIntent.action;**
-**var data = window.webkitIntent.data;**
-**var type = window.webkitIntent.type;**
-**// Do something magical.**
-**}**
-**}, false);**
-
-**### Returning data to the calling application**
-
-**A lot of applications want to cooperate with the app that invoked them. It is easy to send data back to the calling client by using \`intent.postResult\`:**
-**document.addEventListener("load", function() {**
-**if(!!window.webkitIntent) {**
-**var data = window.webkitIntent.data;**
-**// Send the same data back to the client.**
-**window.webkitIntent.postResult(data);**
-**}**
-**}, false);**
-
-**### Handling Errors and Exceptions**
-
-**If your service application needs to signal to the client application that an un-recoverable error has occurred then your application will need to call \`postFailure\` on the intent object. This will signal to the client’s onError callback that something has gone wrong.**
-**document.addEventListener("load", function() {**
-**if(!!window.webkitIntent) {**
-**// Something has gone Wrong! Abort!**
-**window.webkitIntent.postFailure();**
-**}**
-**}, false);**
-
-**# Code Examples of Common Actions**
-
-**## Share a link**
-
-**### Client**
-
-**var intent = new WebKitIntent("http://webintents.org/share", "text/uri-list", location.href);**
-**var onSuccess = function(data) { /\* woot \*/ };**
-**var onError = function(data) { /\* boooo \*/ };**
-**window.navigator.webkitStartActivity(intent, onSuccess, onError);**
-
-**### Service**
-
-**document.addEventListener("load", function() {**
-**if(!!window.webkitIntent) {**
-**var data = window.webkitIntent.data;**
-**// Add the url to the UI**
-**window.webkitIntent.postResult(data);**
-**}**
-**}, false);**
-
-**## Share an Image link**
-
-**### Client**
-
-**var imageUrl = document.getElementById("main-image").src;**
-**var intent = new WebKitIntent("http://webintents.org/share", "image/\*", imageUrl);**
-**var onSuccess = function(data) { /\* woot \*/ };**
-**var onError = function(data) { /\* boooo \*/ };**
-**window.navigator.webkitStartActivity(intent, onSuccess, onError);**
-
-**### Service**
-
-**document.addEventListener("load", function() {**
-**if(!!window.webkitIntent) {**
-**var data = window.webkitIntent.data;**
-**// Add the url to the UI, or proxy the request so we can load it in a canvas**
-**window.webkitIntent.postResult(data);**
-**}**
-**}, false);**
-
-**## Subscribe to an RSS feed**
-
-**### Client**
-
-**var intent = new WebKitIntent("http://webintents.org/subscribe", "application/rss+xml", "http://paul.kinlan.me/rss.xml");**
-**var onSuccess = function(data) { /\* woot \*/ };**
-**var onError = function(data) { /\* boooo \*/ };**
-**window.navigator.webkitStartActivity(intent, onSuccess, onError);**
-
-**### Service**
-
-**document.addEventListener("load", function() {**
-**if(!!window.webkitIntent) {**
-**var data = window.webkitIntent.data;**
-**// Add the url to the UI**
-**window.webkitIntent.postResult(data);**
-**}**
-**}, false);**
-
-**# Examples**
-
-**To show you Web Intents in action we have build a series of demos. These demos show you how client applications can invoke intents and how service applications can be opened and receive data.**
-**To run these examples you currently need Chrome M19 and an internet connection to visit the live client apps.**
-The code for all of these examples can be found on our [Github project
-page](http://github.com/PaulKinlan/webintents) including:
-[Extensions](https://github.com/PaulKinlan/WebIntents/tree/master/tools/chrome/extensions),
-[Hosted
-Apps](https://github.com/PaulKinlan/WebIntents/tree/master/tools/chrome/apps/hosted)
-and [Packaged
-Apps](https://github.com/PaulKinlan/WebIntents/tree/master/tools/chrome/apps/packaged)
-that we have put in the Chrome Web Store.
-
-## Client Apps
-
-Clients are applications that fire intents to ask for additional functionality.
-Client applications don’t need to be installed.
-
-* Imagemator - <http://www.imagemator.com> - An image work bench
-* Mememator - <http://www.mememator.com> - Add funny captions to
- interesting pictures
-* Inspirationmator - <http://www.inspirationmator.com> - Add
- motivational quotes to pictures
-* QuickSnapr - <http://www.quicksnapr.com> - Take a picture of
- yourself
-
-## Services
-
-Services are applications that accept intents and provide additional
-functionality. You shouldn’t need to install any of these directly as you will
-be asked to choose one the first time your client application fires an intent.
-
-### Picking
-
-The following example lets you pick files from your cloud storage solutions
-
-* **CloudFilePicker <http://www.cloudfilepicker.com>**
-
-### Sharing
-
-The following examples let you share links to many popular social networks and
-email clients.
-
-* **Gmail
- <https://chrome.google.com/webstore/detail/hekfknefmaehloiloponcondjheopola>**
-* **Blogger
- <https://chrome.google.com/webstore/detail/lcmfhgcdahdihmmccinakboobnkijkng>**
-* **Twitter
- <https://chrome.google.com/webstore/detail/hgkghfefpdaflmkeelgkkpbpljggidoh>**
-* **LinkedIn
- <https://chrome.google.com/webstore/detail/jilmplpacdgkpfchbgiojhgmbgohcnaj>**
-* **Digg
- <https://chrome.google.com/webstore/detail/ffhijmiaebdachkmgflbbmlceejnhbkn>**
-* **Delicious
- <https://chrome.google.com/webstore/detail/cdhmgngofcgdannheihgihdhlnogjfpc>**
-
-### Saving
-
-The following examples let you save links, pages and images to cloud storage
-solutions.
-
-* **Instapaper
- <https://chrome.google.com/webstore/detail/nlaaimjmkjiggpbplaeolciiopmohoag>**
-* **Read It Later
- <https://chrome.google.com/webstore/detail/lcmbpenbacgfpknjpibidbmcejekigke>**
-* **Box.net
- <https://chrome.google.com/webstore/detail/kabfhdbpgilinjkhfefkjhiijmambpim>**
-
-### Shortening
-
-The following examples let you shorten links using popular URL shortening API’s.
-
-* **Goo.gl
- <https://chrome.google.com/webstore/detail/ngkcdmekigeplbgofmgljdjccdpmhikp>** \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/noinstalls.PNG.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/noinstalls.PNG.sha1
deleted file mode 100644
index b3a84689d9b..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/noinstalls.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6a6a35d9db6279e49f2f4baa40ea4d01451f7a6a \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-intents-in-chrome/with.PNG.sha1 b/chromium/docs/website/site/developers/web-intents-in-chrome/with.PNG.sha1
deleted file mode 100644
index 4d423183a27..00000000000
--- a/chromium/docs/website/site/developers/web-intents-in-chrome/with.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b00b70c952668f2aa034039ba4c950de4089c620 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-platform-status/forms/index.md b/chromium/docs/website/site/developers/web-platform-status/forms/index.md
deleted file mode 100644
index 4debd1da520..00000000000
--- a/chromium/docs/website/site/developers/web-platform-status/forms/index.md
+++ /dev/null
@@ -1,266 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/web-platform-status
- - Web Platform Status
-page_name: forms
-title: HTML5 Forms Status
----
-
-Dev Contact: tkent@
-
-Updated: October 4, 2013
-
-Note that this page doesn't cover iOS version of Google Chrome because it uses
-WebKit shipped in iOS.
-
-## On stable release
-
-\[M5\] indicates a feature which is available since Milestone 5, a.k.a. Google
-Chrome 5.0. \[M6\] for Google Chrome 6.0.
-
-### Common features
-
-* autofocus attribute (autofocus property) of
- input/textarea/select/keygen elements
-* labels property of form control elements \[M6\]
-* willValidate property
-* validity property
- * typeMismatch for &lt;input type=email&gt; and &lt;input
- type=url&gt;
- * valueMissing and required attribute (required property)
- * patternMismatch and pattern attribute (pattern property)
- * tooLong
- * tooLong behavior was updated in \[M13\]. Values set by a
- script won't be too long.
- * rangeOverflow and max attribute (max property) \[M5\]
- * rangeUnderflow and min attribute (min property) \[M5\]
- * stepMismatch and step attribute (step property) \[M5\]
- * badInput support for number, date, datetime-local, month, time,
- week. \[M25\]
- * valid as a combination of the above
-* checkValidity() and 'invalid' event
-* validationMessage property \[M10\]
-* :default, :valid, :invalid, :optional, and :required CSS selectors
- * form element doesn't support :valid and :invalid yet.
-* form, formaction, formenctype, formmethod, formtarget attributes and
- the corresponding properties \[M9\]
- Note: form property has been supported for a long time though form attribute
- was not supported.
- * formMethod / formEnctype properties of input element, and
- formMethod / formEnctype properties of button element correctly
- return normalized values. \[M16\]
- * formMethod property returns empty string if formmethod attribute
- value is missing. \[M26\]
- * formEnctype property returns empty string if formenctype
- attribute value is missing. \[M26\]
-
-* 'formchange' and 'forminput' events were introduce in \[M10\], and
- removed since \[M12\].
-
-### Form element
-
-* Interactive validation \[M5\]
- Invalid form controls prevent the form submission, and show a validation
- message.
- formnovalidate attribute (formNoValidate property) of submit button is
- supported.
- Note: In Google Chrome 6, the interactive validation feature worked only for
- documents with &lt;!DOCTYPE html&gt;. \[M6\]
- Note: In Google Chrome 7, the interactive validation feature was disabled.
- \[M7\]
- Note: In Google Chrome 10, the interactive validation feature was enabled
- with a bubble UI. \[M10\]
-* enctype="text/plain" support \[M17\]
-* method / enctype properties correctly return normalized values.
- \[M16\]
-* RadioNodeList support in HTMLFormElement::elements \[M21\]
-
-### Fieldset element
-
-* name and type properties \[M19\]
-* disabled attribute (disabled property) \[M20\]
-* elements property \[M21\]
-
-### Label element
-
-* control property of label element \[M6\]
-* form attribute \[M19\]
-
-### Input element
-
-* multiple attribute (multiple DOM property) of &lt;input
- type=file&gt; and &lt;input type=email&gt;
- * &lt;input type=email multiple&gt; allows whitespace around ','
- since \[M14\]
-* placeholder attribute (placeholder property)
- * The behavior of placeholder attribute was changed since \[M17\].
- Placeholder text is shown until a user enters the first letter.
-* accept attribute for &lt;input type=file&gt; \[M8\]
- * File name suffix support \[M21\]
-* files property
- * files property is writable. \[M21\]
-* dirname attribute of input element \[M17\]
-* Support for &lt;input type=hidden name=_charset_&gt; \[M17\]
-* Dedicated UI for &lt;input type=search&gt;
-* Dedicated UI for &lt;input type=range&gt; (only horizontal)
-* type attribute (type property) recognizes email, tel, and url
- * The UI is same as type=text.
-* &lt;input type=number&gt; with spin-button UI \[M6\]
- * Supports wheel events \[M7\]
- * Supports auto-repeat by mouse press since \[M7\]
- * Localization of &lt;input type=number&gt; \[M11\]
- * Inserting thousand-separator such as ',' in &lt;input
- type=number&gt; was disabled since \[M14\]
- * The default width of a number type field with finite
- min/max/step values is fit to possible maximum digits. \[M15\]
-* &lt;input type=color&gt; for Windows, OS X, and Linux \[M20\]
- * ChromeOS \[M22\]
-* &lt;input type=date&gt; for Windows, OS X, Linux, and Chrome OS
- \[M20\]
- ~~Down arrow key to open the calendar popup.~~
- Keyboard bindings in the calendar popup:
- <table>
- <tr>
- m <td>Next month</td>
- </tr>
- <tr>
- Shift + m <td>Previous month</td>
- </tr>
- <tr>
- y <td>Next year</td>
- </tr>
- <tr>
- Shift + y <td>Previous year</td>
- </tr>
- <tr>
- d <td>10 years later</td>
- </tr>
- <tr>
- Shift + d <td>10 years past</td>
- </tr>
- <tr>
- Enter <td>Set the selected date to the field, and close the popup </td>
- </tr>
- <tr>
- t <td>Select today</td>
- </tr>
- <tr>
- ESC <td>Close the popup</td>
- </tr>
- </table>
- * Update &lt;input type=date&gt; UI for non-Android \[M24\]
- It contains multiple editable fields and a spin button.
- Key binding to open a calendar picker was changed: down arrow → Alt
- (option) + down arrow
- * Android supports it since \[M18\]
- * Major calendar UI update \[M27\]
-* &lt;input type=time&gt; \[M23\]
- * Android supports it since \[M18\]
-* &lt;input type=month&gt; \[M25\]
- * Android supports it since \[M18\]
-* &lt;input type=week&gt; for non-Android \[M25\]
-* &lt;input type=datetime-local&gt; \[M25\]
- * Android supports it since \[M18\]
-* list attribute, and list property
- * text, search, url, tel, and number types. \[M20\]
- * datalist element support for &lt;input type=email&gt; \[M21\]
- * datalist element support for &lt;input type=range&gt; \[M22\]
- * Specified values are shown as tick marks, and the slider
- thumb snaps on them.
- * datalist element support for &lt;input type=color&gt; \[M22\]
- * datalist support for date, and time \[M24\]
- * datalist support for datetime-local, month, and week \[M25\]
- * For unsupported input types, list property returns null.
- * Chrome for Android doesn't support list attribute for all input
- types.
-* min/max/step/value attribute values for numeric types accepts number
- strings starting decimal points since \[M17\]
- * ".25" was an invalid number string until \[M16\], and it's valid
- since \[M17\].
-* stepUp() and stepDown() \[M5\]
-* valueAsDate property \[M5\]
-* valueAsNumber property \[M5\]
-* Removed labels property support of &lt;input type=hidden&gt; \[M19\]
-* Indeterminate checkbox \[M6\]
-* :out-of-range and :in-range CSS selectors \[M10\]
-* height and width properties of input element \[M21\]
-* setRangeText() \[M24\]
-
-* type attribute of input element recognized date, datetime,
- datetime-local, month, time, and week during \[M5\] to \[M15\]
- They were disabled since \[M16\] because of their incompleteness and UI
- development
-
-### Button element
-
-* type property is writable. \[M21\]
-
-### Select element
-
-* validity.valueMissing and required attribute (required property)
- \[M10\]
-* selectedOptions property \[M22\]
-
-### Datalist element
-
-* Introduced in \[M20\] with &lt;input list=id&gt; support
-
-### Textarea element
-
-* wrap property \[M16\]
-* placeholder attribute (placeholder property)
- * The behavior of placeholder attribute was changed since \[M17\].
- Placeholder text is shown until a user enters the first letter.
-* maxlength attribute (maxLength property)
-* setRangeText() \[M24\]
-
-### Output element
-
-* Introduced in \[M9\]
-* labels property \[M19\]
-
-### Progress element
-
-* Introduced in \[M6\]
-* Removed form property \[M19\]
-
-### Meter element
-
-* Horizontal meter element was introduced in \[M6\]
-* Removed form property \[M19\]
-
----
-
-## Milestone 29
-
-* IDN support for type=email
-* &lt;input type=color&gt; for Android
-
-## Milestone 30
-
-* &lt;input type=week&gt; for Android
-* Buttons, input\[type=range\], checkboxes, and radio buttons get
- focus by mouse press.
-
-## Milestone 33
-
-* Step base detection takes account of value attribute value.
-
-## Not available yet
-
-* datalist support for Android \[in-progress\]
-* inputmode attribute for input and textarea elements \[in-progress\]
-* Dedicated UIs for datetime type with datalist support
-* type=number value range update (float → double)
-* New behavior of stepUp() and stepDown()
-* Newlines for textarea placeholder
-* reportValidity()
-* minlength and validity.tooShort
-* New behavior of min &gt; max case for type=time
-* :valid and :invalid CSS selectors for form and fieldset element
-* Automatic switching to vertical range, progress, and meter.
-* Form controls in vertical writing mode
-* CSS Selectors4: :user-error pseudo class
-* :indeterminate pseudo class for radio buttons \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/web-platform-status/index.md b/chromium/docs/website/site/developers/web-platform-status/index.md
deleted file mode 100644
index 7b7a6bc2b41..00000000000
--- a/chromium/docs/website/site/developers/web-platform-status/index.md
+++ /dev/null
@@ -1,1419 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: web-platform-status
-title: Web Platform Status
----
-
-THIS PAGE HAS BEEN DEPRECATED! PLEASE SEE
-[CHROMESTATUS.COM](http://CHROMESTATUS.COM) FOR THE LATEST DATA.
-
-Last updated: March 6, 2013
-
-DevRel Contact: Eric Bidelman (ericbidelman), Paul Irish (paulirish)
-
-This page captures the implementation status of HTML5 feature support in Chrome
-(desktop) and Chrome for Android. The current release of Chrome for Android
-matches m25, any exceptions to this will be indicated below.
-
-You have a few ways to watch these features more closely:
-
-* ☆ the Chromium bug tickets or add yourself to the CC of WebKit
- tickets.
-* Watch the [Last Week in
- WebKit/Chromium](http://peter.sh/category/last-week/) series for
- weekly updates
-* Subscribe to the [chromium-html5 discussion
- group](https://groups.google.com/a/chromium.org/group/chromium-html5/topics)
-
-Many of these features have their own jumpoff point on
-[html5rocks.com](http://html5rocks.com/), with links to solid tutorials and
-resources.
-
-The near-daily-updated [Chrome Canary](http://tools.google.com/dlpage/chromesxs)
-lands these features much sooner than the stable or beta releases. (Though it's
-pre-alpha, so expect bugs!)
-
-Note: In this page there are many references to "m6" and such. This refers to
-the stable Chrome release of that version.
-
-[TOC]
-
-## File APIs
-
-Handle file uploads and file manipulation.
-
-Availability: Basic File API support in m5.
-
-Spec: [w3c spec](http://dev.w3.org/2006/webapi/FileAPI/)
-
-Notes: Limited form of drag-and-drop available in Firefox 3.6
-
-#### File System
-
-Availability: started to land in m8, but only available for apps & extensions.
-Synchronous APIs are in m9 for web workers.
-`[window.resolveLocalFileSystemURL()](http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#solveLocalFileSystemURL)`
-and
-`[Entry.toURL()](http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#widl-Entry-toURL)`
-were added in m11. Stable release for web pages \[not apps/extensions\] was m13.
-
-Spec: [w3c spec](http://dev.w3.org/2009/dap/file-system/file-dir-sys.html)
-
-Notes: [devtools
-support](https://bug-45982-attachments.webkit.org/attachment.cgi?id=70320)
-coming. Needs flag `--allow-file-access-from-files` for testing from file://
-URLs.
-
-Demos:
-[layouttests](http://trac.webkit.org/browser/trunk/LayoutTests/fast/filesystem)
-
-Dev Contact: Eric Uhrhane (ericu)
-
-> **Drag and Drop Directories**
-
-> Allows dragging and dropping entire folders using HTML5 Drag and Drop. Extends
-> the DataTransferItem with a method to get a FileEntry/DirectoryEntry.
-
-> (`var entry = DataTransferItem.webkitGetAsEntry()`)
-
-> Availability: M21
-
-> Spec: <http://wiki.whatwg.org/wiki/DragAndDropEntries>
-
-> Dev Contact: Kinuko Yasuda (kinuko)
-
-> **HTMLInputElement.webkitEntries**
-
-> Get FileSystem API entries representing user selected files from an `<input
-> type="file" multiple>`.
-
-> Availability: M22
-
-> Spec: <http://wiki.whatwg.org/wiki/DragAndDropEntries>
-
-> Dev Contact: Kinuko Yasuda (kinuko)
-
-#### FileWriter
-
-Availability: basic in m8, sync api in m9 for web workers
-
-Spec: [w3c spec](http://www.w3.org/TR/file-writer-api/)
-
-Tickets: [webk.it/44358](https://bugs.webkit.org/show_bug.cgi?id=44358)
-
-Dev Contact: Eric Uhrhane (ericu)
-
-#### FileReader
-
-Can read local and parse local files.
-
-Availability: m7.
-
-Spec: [w3c spec](http://dev.w3.org/2006/webapi/FileAPI/#dfn-filereader)
-
-Demo: [demo](http://slides.html5rocks.com/#drag-in)
-
-Dev Contact: Jian Li (jianli)
-
-#### BlobBuilder
-
-Build blobs (files).
-
-Availability: m8. As of m20, this API is deprecated. Use Blob() constructor
-instead (see below).
-
-Demo:
-[demo](http://html5-demos.appspot.com/static/html5storage/index.html#slide51)
-
-Spec: [w3c
-spec](http://dev.w3.org/2009/dap/file-system/file-writer.html#idl-def-BlobBuilder)
-
-Notes: `window.createBlobURL()` changed to new spec's `window.createObjectURL()`
-somewhere around m8. As of M10, the call is prefixed under
-`window.webkitURL.createObjectURL()`. Chrome 23 unprefixes `window.URL`.
-
-#### Blob() constructor
-
-Removes the need for BlobBuilder API. Allows you to construct Blobs directly
-(`var blob = new Blob(["1234"], {type: 'text/plain'})`)
-
-Availability: M20
-
-Spec: [w3c spec](http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob)
-
-> #### Blob() constructor ArrayBufferView support
-
-> Blob() constructor takes ArrayBufferView directly rather than constructing a
-> blob with ArrayBuffer.
-
-> Availability: M21
-
-#### Unprefixed Blob.slice() support
-
-Blob.slice() is un-prefixed (from webkitSlice()) in M21.
-
-Availability: M22
-
-#### Typed Arrays
-
-Buffers for holding binary data and working with WebGL & Audio API:
-`ArrayBuffer`, `Float32Array` , `Int16Array`, `Uint8Array`, etc.)
-
-Availability: m7 for most. `DataView` is m9. `Float64Array` in m13.
-
-Spec:
-[Khronos](https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html)
-
-Notes: `worker.postMessage(TypedArray|ArrayBuffer)` landed in m13 using
-structured cloning. `postMesage(Object|Array)` (e.g. any type) landed in M23.
-
-**a\[download\] attribute**
-
-When used on an &lt;a&gt;, this attribute signifies that the resource it points
-to should be downloaded by the browser rather than navigating to it.
-
-See [update.html5rocks.com
-post](http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download).
-
-Availability: M14
-
-Spec: [whatwg](http://developers.whatwg.org/links.html#downloading-resources)
-
-Demo: [demo](http://html5-demos.appspot.com/static/a.download.html)
-
-## **Offline and XHR**
-
-**App Cache**
-
-### Enables web pages to work without the user being connected to the internet
-
-### Notes: Chrome's implementation is maxed at 260MB. Individual files max out at 32MB (260MB/8)
-### Availability: m5. Dev tools support added in m6
-### Dev Contact: Michael Nordman (michaeln)
-
-**XHR supports xhr.send(ArrayBuffer)**
-
-#### Allows for sending a binary byte array using xhr.
-
-#### Availability: targeting m9
-
-#### Dev Contact: Jian Li (jianli)
-
-#### Spec: [w3
-draft](http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#dom-xmlhttprequest-send)
-
-#### XHR supports xhr.send(Blob|File)
-
-Allows for sending a Blob or File using xhr.
-
-Availability: m7
-
-Spec: [w3
-draft](http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#dom-xmlhttprequest-send)
-
-Dev Contact: Eric Uhrhane (ericu)
-
-Tickets: [crbug.com/51267](http://crbug.com/51267)
-
-#### XHR supports xhr.send(FormData)
-
-Availability: landed m6
-
-Demo: [demo on jsfiddle](http://jsfiddle.net/rUyVq/1/)
-
-#### XHR supports xhr.send(ArrayBufferView)
-
-Allows for sending a typed array directly rather than sending just its
-ArrayBuffer.
-
-Availability: m22
-
-**XHR.response, XHR.responseType**
-
-#### Allows reading an xhr response as a blob/arraybuffer (`xhr.responseType = 'arraybuffer'`,` xhr.responseType = 'blob'`)
-
-Availability: m10. m18 adds `xhr.responseType = 'document'` (see [HTML in
-XMLHttpRequest](https://developer.mozilla.org/en/HTML_in_XMLHttpRequest)) and
-
-restricts the usage of synchronous XHRs (`xhr.open(..., false);`) by throwing an
-error when `.responseType` is set.
-
-Spec: [w3 draft](http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#xmlhttprequest)
-
-Tickets: [crbug.com/52486](http://crbug.com/52486) (arraybuffer works, blob does
-not)
-
-Dev Contact: Michael Nordman (michaeln)
-
-#### XMLHttpRequestProgressEvent
-
-Availability: m7
-
-Spec: [w3 draft](http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#xmlhttprequest)
-
-#### navigator.connection
-
-Access the underlying network information (connection info) of the device.
-
-Availability: target unknown
-
-Spec: [w3 draft](http://dev.w3.org/2009/dap/netinfo/)
-
-Tickets: [webk.it/73528](http://webk.it/73528)
-
-Notes: In Android since 2.2, but not implemented yet desktop browsers.
-
-Dev Contact: -
-
-#### navigator.onLine
-
-Allows an application to check if the user has an active internet connection.
-Also can register 'online' and 'offline' event handlers.
-
-Availability: m14
-
-Tickets: [~~crbug.com/7469~~](http://crbug.com/7469)
-
-Notes: <https://developer.mozilla.org/en/Online_and_offline_events>
-
-Demo: <http://kinlan-presentations.appspot.com/bleeding-berlin/index.html#16>
-
-Dev Contact: adamk
-
-#### navigator.registerProtocolHandler()
-
-Allow web applications to handle URL protocols like mailto:.
-Availability: m13
-Tickets:
-[~~crbug.com/11359~~](http://code.google.com/p/chromium/issues/detail?id=11359)
-
-Notes: Protocol list: "mailto", "mms", "nntp", "rtsp", "webcal". Custom
-protocols require "web+" prefix (e.g. "web+myScheme").
-
-There are no plans to implement registerContentHandler.
-
-Dev Contact: koz
-
-#### Directory upload
-
-Allow specifying a directory to upload (`<input type="file" multiple
-webkitdirectory />`), which is just be an extension of existing form
-mime-multipart file upload.
-
-Availability: m8. m21 [landed](http://crbug.com/58977) dragging and dropping a
-folder onto an &lt;input type="file" webkidirectory&gt; element).
-
-Demo:
-[demo](http://html5-demos.appspot.com/static/html5storage/index.html#slide47)
-
-#### Websockets
-
-* TBD: The return type of send() will be changed to void
-* m16: Update to conform to [RFC 6455 (aka HyBi 13
- version)](http://tools.ietf.org/html/rfc6455) (a few minor changes
- in handshake from [HyBi 08
- version](http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10).
- See also [HTML5 Rocks
- post](http://updates.html5rocks.com/2011/10/WebSockets-updated-to-latest-version-in-Chrome-Canary))
-* m15: Binary message API (Blob and ArrayBuffer). Added close code and
- reason to close() and CloseEvent
-* m14: New handshake and framing introduced at [HyBi 08
- version](http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10)
- excluding binary message API and extension support
-* (m6: New handshake ([Hixie 76
- version](http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76)),
- m5: WebSocket in workers, m4: [Hixie 75
- version](http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75))
-* m23: ArrayBufferView support
-
-Spec: [W3C editor's draft](http://dev.w3.org/html5/websockets/)
-
-Protocol Spec: [RFC 6455](http://tools.ietf.org/html/rfc6455) +
-x-webkit-deflate-frame
-
-Demo: [demo](http://slides.html5rocks.com/#web-sockets)
-
-Tickets: [WebKit protocol ticket](https://bugs.webkit.org/show_bug.cgi?id=50099)
-
-Planned: Implement permessage-compress extension and mux extension
-
-Dev Contact: tyoshino
-
-#### Strict Transport Security
-
-Header to inform the browser to always request a given domain over SSL, reducing
-MITM attack surface area.
-
-Availability: m4
-
-Spec: [ietf spec](http://tools.ietf.org/html/draft-hodges-strict-transport-sec)
-
-Notes: [details on STS on chromium.org](/sts)
-
-#### a\[ping\] attribute.
-
-Notify resource on link click.
-
-Availability: Chrome 7.
-
-Spec: [html5 spec](http://developers.whatwg.org/links.html#ping)
-
-Notes: [webkit changeset](http://trac.webkit.org/changeset/68166). Can be
-disabled through a command line flag or in about:flags
-
-## Storage
-
-#### **Web SQL Database**
-
-API exposing an SQLite database
-
-Availability: m4.
-
-Notes: No spec progress or other implementations (outside of Webkit/Opera)
-expected.
-
-Demo: [demo](http://slides.html5rocks.com/#web-sql-db)
-
-Dev Contact: Dumitru Daniliuc (dumi)
-
-#### Database access from workers
-
-Spec: <http://dev.w3.org/html5/webdatabase/#synchronous-database-api>
-
-Availability: Indeterminate status
-
-#### Indexed Database API
-
-Availability: Landed in m11. (Prefixed as `webkitIndexedDB `pre M24.)
-
-Spec: [Draft w3c
-spec](http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html)
-Notes: formerly called WebSimpleDB.
-
-Demo:
-[Demo](http://html5-demos.appspot.com/static/html5storage/index.html#slide34),
-[LayoutTest IndexedDB tutorial &
-demo](http://trac.webkit.org/export/70913/trunk/LayoutTests/storage/indexeddb/tutorial.html)
-
-Dev Contacts: dgrogan, jsbell, alecflett
-
-Cross-Browser Status:
-
-* Firefox: FF16+ enabled (through 4beta9 as `moz_indexedDB`; through
- FF15 as `mozIndexedDB)`
-* IE: IE10+ (IE10 Platform Preview through 5 as msIndexedDB)
- * IE10 will not support Array key paths
-* Opera implementation is in progress
-
-Known differences between Chrome (as of M25) and the draft specification (as of
-July 16, 2012):
-
-* a "`blocked`" event will fire against a request created by an
- `open(name, version)`, a `setVersion(version)` or
- `deleteDatabase(name)` call even if all other connections are closed
- in response to a "`versionchange`" event
-* "`blocked`" events may also fire multiple times against the same
- deleteDatabase(name) request
-* Blobs, Files, and FileLists in values are not supported*.*
-* The Sync API is not supported - but neither IE nor Firefox support
- this either; it is marked as "At Risk" in the spec
-
-Updates in M23 (from M22)
-
-* The new-style `open(name, version).onupgradeneeded` API is now
- supported; the old `open(name)` followed by `setVersion(version)`
- API may still be used for now, but web applications should migrate
- as soon as possible.
-
-Updates in M22 (from M21)
-
-* `deleteDatabase()` and `webkitGetDatabaseNames()` can now be called
- from Workers
-* `IDBKeyRange.upperOpen`/`lowerOpen` flags are now reported correctly
- when `lowerBound()`/`upperBound() `used
-* Empty arrays are no longer valid key paths
-* Requests can no longer be issued against transactions when not
- active (i.e. outside of creation context or callbacks, e.g. from a
- timeout or non-IDB event)
-* "`versionchange`" events are no longer fired against connections
- that are closing
-* Multi-entry indexes with invalid/duplicate subkeys now populated per
- spec
-
-Updates in M21 (from M20)
-
-* Exceptions are now raised when methods are called on deleted objects
-* [Creating a transaction from within a transaction callback now
- fails](https://groups.google.com/a/chromium.org/forum/?fromgroups#!topic/chromium-html5/VlWI87JFKMk)
-* Cursor value modifications are now preserved until cursor iterates
-* Error codes should now match the latest spec
-* Nonstandard enumeration API has now been renamed to
- `IDBFactory.webkitGetDatabaseNames()`
-* `IDBTransaction.error` and `IDBRequest.error` are now implemented
-* Support for Array key paths has been implemented
-* Invalid index keys no longer cause `add()`/`put() `calls to fail -
- indexes are skipped
-* The `IDBObjectStore.autoIncrement` property is now available
-* [`transaction()`, `openCursor()` and `openKeyCursor()` have been
- updated to take strings instead of numbers for enum
- values](https://groups.google.com/a/chromium.org/forum/?fromgroups#!topic/chromium-html5/OhsoAQLj7kc)
-
-#### Web Storage
-
-Availability: localStorage in m4, sessionStorage in m5
-
-Notes: localStorage serves basic use cases. For more comprehensive storage
-solution, consider IndexedDB. While the spec indicates anything that structured
-clone algorithm can clone can be stored, all browser implementations currently
-allow only strings. Chrome's [storage capacity is currently
-2.5mb](http://dev-test.nemikor.com/web-storage/support-test/).
-
-Tickets: [webk.it/41645](https://bugs.webkit.org/show_bug.cgi?id=41645)
-Dev Contact: Jeremy Orlow (jorlow) -&gt; Michael Nordman (michaeln)
-
-**Quota Management API**
-
-This API can be used to check how much quota an app/origin is using.
-
-Availability: m13: FileSystem (TEMPORARY & PERSISTENT) and WebSQL (temp only).
-m14 : AppCache and IndexedDB were added (TEMP only)
-
-Docs: <http://code.google.com/chrome/whitepapers/storage.html>
-
-Dev Contact: Kinuko Yasuda (kinuko)
-
-## **CSS & Presentation**
-
-#### CSS3 3D Transforms
-
-Availability: m12
-
-Spec: [w3 spec](http://www.w3.org/TR/css3-3d-transforms/)
-
-Notes: Associated GPU rendering quirkiness actively being worked on in prep for
-beta channel release.
-
-Demo: [poster circle
-demo](http://webkit.org/blog-files/3d-transforms/poster-circle.html)
-
-#### new semantic sectioning elements
-
-section, article, aside, nav, header, and `footer` elements
-
-Availability: m5
-
-#### &lt;progress&gt; and &lt;meter&gt; elements
-
-Offer a visual display of progress.
-
-Availability: m6
-
-Spec: [whatwg
-spec](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-progress-element)
-
-Demo: [demo of elements in
-action](http://peter.sh/examples/?/html/meter-progress.html)
-
-#### Ruby
-
-Ruby annotations are short runs of text presented alongside base text, primarily
-used in East Asian typography as a guide for pronunciation or to include other
-annotations
-Availability: m4
-
-Spec: [whatwg html5
-spec](http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-ruby-element)
-
-Notes: [description &
-demo](http://blog.whatwg.org/implementation-progress-on-the-html5-ruby-element)
-on whatwg blog
-
-#### @font-face webfonts
-
-Availability: OTF/TTF support in m4. WOFF in m6.
-
-Spec: [w3c editor's draft](http://dev.w3.org/csswg/css3-fonts/)
-
-Notes: [unicode-range
-support](http://dev.w3.org/csswg/css3-fonts/#unicode-range-desc) planned.
-Improved handling of text while font asset is being downloaded, also planned.
-
-#### **Gradients**
-
-Availability: w3c [linear-gradient()
-syntax](http://webkit.org/blog/1424/css3-gradients/) as of m10. [original webkit
--gradient() syntax](http://webkit.org/blog/175/introducing-css-gradients/) as of
-m3.
-
-Spec: [w3c image values](http://dev.w3.org/csswg/css3-images/#gradients)
-
-Notes: The legacy syntax will be retained for the foreseeable future.
-
-#### Background printing
-
-Opt-in ability to specify a background should be printed
-
-Availability: landing in m16 with prefix:` -webkit-print-background`
-
-Discussions: [thread feb
-2011](http://lists.w3.org/Archives/Public/www-style/2011Feb/0626.html), [csswg
-minutes
-august](http://lists.w3.org/Archives/Public/www-style/2011Aug/0645.html),
-[thread august
-2011](http://lists.w3.org/Archives/Public/www-style/2011Aug/0436.html), [wiki
-page](http://wiki.csswg.org/ideas/print-backgrounds)
-
-**Scoped style sheets**
-
-Boolean attribute for the &lt;style&gt; element (&lt;style scoped&gt;). When
-present, its styles only apply to the parent element.
-
-Availability: m20 (enable webkit experimental feature in about:flags)
-
-Spec:
-[whatwg](http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#attr-style-scoped)
-
-Demo: [jsbin](http://jsbin.com/ozerih/edit#html,live)
-
-#### CSS3 Filters
-
-Apply (SVG-like) filter effects to arbitrary DOM elements.
-
-Availability: m19
-
-Spec: [w3 spec](https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html)
-
-Info:
-<http://updates.html5rocks.com/2011/12/CSS-Filter-Effects-Landing-in-WebKit>
-
-#### #### CSS Shaders
-
-#### Apply OpenGL shaders to arbitrary DOM elements.
-
-#### Availability: m24, enabled via about:flags.
-
-#### Spec: [w3
-spec](https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html)
-
-#### Info: <http://www.adobe.com/devnet/html5/articles/css-shaders.html>
-
-#### Demos: <http://adobe.github.com/web-platform/samples/css-customfilters/>
-
-#### CSS3 Grid Layout
-
-Availability: work is just started behind a flag. No way to enable it.
-
-Spec: [w3c](http://dev.w3.org/csswg/css3-grid-layout/)
-
-Tickets: [webk.it/60731](http://webk.it/60731)
-
-Dev Contact: Tony Chang (tony@chromium), Ojan Vafai (ojan@chromium)
-
-#### CSS3 Flexbox Model (the new one)
-
-Note: The old box model (display: -webkit-box) and spec has been replaced by a
-new one (display: -webkit-flex).
-
-For now, chrome supports both. But you should use the new one!
-
-Availability: started landing in m18. m21 has the latest and full implementation
-with a bunch of properties renamed.
-
-Spec: [w3 spec](http://www.w3.org/TR/css3-flexbox/)
-
-Tickets: [webk.it/62048](https://bugs.webkit.org/show_bug.cgi?id=62048)
-
-Demo: <http://html5-demos.appspot.com/static/css/flexbox/index.html>
-
-Docs: <https://developer.mozilla.org/en/Using_flexbox>
-
-Dev Contact: Ojan Vafai (ojan)
-
-#### CSS3 Regions
-
-Magazine-like content flow into specified regions.
-
-Availability: Partial support in m19 (enable webkit experimental feature in
-about:flags)
-
-Spec: [w3c](http://dev.w3.org/csswg/css3-regions/)
-
-Tickets: [webk.it/57312](https://bugs.webkit.org/show_bug.cgi?id=57312)
-
-#### position: sticky
-
-`position: sticky` is a new way to position elements and is conceptually similar
-to position: fixed. The difference is that a stickily positioned element behaves
-like position: relative within its parent, until a given offset threshold is
-met.
-
-Availability: M23 (enable webkit experimental feature in about:flags)
-
-Proposal:
-[www-style](http://lists.w3.org/Archives/Public/www-style/2012Jun/0627.html)
-
-Demo: <http://html5-demos.appspot.com/static/css/sticky.html>
-
-#### #### CSS Intrinsic Sizing
-
-#### `width: fill-available`,` width: min-content`, `width: max-content`, etc.
-
-#### Availability: ~M22 (vendor prefixed)
-
-#### Spec: [w3c](http://dev.w3.org/csswg/css3-writing-modes/#intrinsic-sizing)
-
-#### MDN: <https://developer.mozilla.org/en-US/docs/CSS/width>
-
-#### Other CSS3
-
-**box-shadow**: inset keyword and spread value supported since m4, went
-unprefixed in m10
-
-**border-radius:** went unprefixed in m4
-
-**cross-fade():** landing with prefix (-webkit-cross-fade) in m17.
-[demo](http://peter.sh/files/examples/cross-fading.html)
-
-**image-resolution()**: [landed](http://trac.webkit.org/changeset/119984) for
-m21 [spec](http://www.w3.org/TR/2012/CR-css3-images-20120417/#image-resolution)
-
-**clip-path:**
-[landed](https://plus.google.com/118075919496626375791/posts/2n8PTisLztW) for
-m24. Prefixed -webkit-clip-path.
-[spec](http://dvcs.w3.org/hg/FXTF/raw-file/tip/masking/index.html#the-clip-path)
-
-**@viewport**: [spec](http://dev.w3.org/csswg/css-device-adapt/), bug
-
-**@supports:** [spec](http://www.w3.org/TR/css3-conditional/#at-supports), bug,
-
-**CSS viewport % lengths (vw, vh, vmin, vmax):**
-[spec](http://www.w3.org/TR/css3-values/), Availability: m20
-
-## Graphics
-
-#### Canvas
-
-Provides an API to draw 2D graphics
-
-Availability: m1, Safari, Firefox, Opera, IE9
-
-Notes: Accelerated 2D canvas [targeting](http://crbug.com/61526) m14 for
-windows/linux; perhaps m15 for mac. Currently, available in about:flags.
-
-webp format: `canvas.toDataURL("image/webp")`
-[added](http://code.google.com/p/chromium/issues/detail?id=63221) in m17 (WebKit
-535), but m18 on Mac.
-
-In M20, `canvas.getImageData(...).data` returns a `Uint8ClampedArray` instead of
-a `CanvasPixelArray`.
-
-Spec: [W3C Last Call Working draft](http://dev.w3.org/html5/2dcontext/)
-
-#### WebGL **(Canvas 3D)**
-
-3D rendering via the &lt;canvas&gt; element.
-
-Availability: m9
-
-Android Availability: TBD.
-
-Spec: [kronos/apple
-spec](https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/WebGL-spec.html)
-
-Notes: Originally project developed by Mozilla as a JavaScript API to make
-OpenGL calls - [WebGL Wiki](http://khronos.org/webgl/wiki/Main_Page)
-
-Dev Contact: Vangelis Kokevis (vangelis), Ken Russell (kbr)
-
-#### requestAnimationFrame
-
-Offload animation repainting to browser for optimized performance.
-
-Spec: [webkit draft spec](http://webstuff.nfshost.com/anim-timing/Overview.html)
-
-Availability: m10 , currently prefixed as `window.webkitRequestAnimationFrame`
-
-Notes: As of FF4, Mozilla's implementation differs and offers lower framerates,
-but it will be addressed. This method should be used for WebGL, Canvas 2D, and
-DOM/CSS animation.
-
-Dev Contact: jamesr
-
-#### Accelerated Video: m10
-#### WebP image format support: m9. alpha and lossless added to m22.
-
-## Multimedia
-
-#### **Video and Audio**
-
-Natively play video and audio in the browser
-Provides API and built-in playback controls
-Availability: m3. Also Safari 4, Firefox 3.5
-Codecs: mp4, ogv, and webm ship with Chrome. webm shipped in m6.
-Dev Contact: Andrew Scherkus (scherkus)
-
-mediaElem.webkitAudioDecodedByteCount - m11
-
-mediaElem.webkitVideoDecodedByteCount - m11
-
-videoElem.webkitDecodedFrameCount - m11
-
-videoElem.webkitDroppedFrameCount - m11
-
-#### Web Audio API
-
-Availability: dev channel since m12. stable channel in m14. m24 adds the ability
-for [live mic
-input](http://updates.html5rocks.com/2012/09/Live-Web-Audio-Input-Enabled)
-(enable in about:flags). m25 [updated API
-calls](https://code.google.com/p/chromium/issues/detail?id=160176) to the latest
-spec.
-
-Android availability: TBD ([issue 166003](http://crbug.com/166003))
-
-Spec: [W3C Audio Incubator Group
-Proposal](http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html)
-
-Notes: enable via about:flags. Also, Mozilla has an alternative [Audio Data
-API](https://wiki.mozilla.org/Audio_Data_API) proposal. M20 included
-
-support for oscillator nodes.
-
-Demo: [spec
-samples](http://chromium.googlecode.com/svn/trunk/samples/audio/index.html)
-
-Dev Contact: Chris Rogers (crogers)
-
-#### Media Source API
-
-Allows appending data to an &lt;audio&gt;/&lt;video&gt; element.
-
-Availability: dev channel m23
-
-Spec: [w3c
-spec](http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html)
-
-Notes: enable via about:flags or run with `--enable-media-source` flag.
-
-Demo: <http://html5-demos.appspot.com/static/media-source.html>
-
-Dev Contact: Aaron Colwell (acolwell)
-
-#### WebRTC
-
-Real time communication in the browser. (Note that many online resources refer
-to 'WebRTC' but just mean getUserMedia!)
-
-Combines the following APIs:
-
-- navigator.getUserMedia (aka MediaStream, cross-browser demo:
-[simpl.info/gum](http://simpl.info/gum))
-
-- RTCPeerConnection (demos: [apprtc.appspot.com](http://apprtc.appspot.com),
-[simpl.info/pc](http://simpl.info/pc))
-
-- RTCDataChannel (demo [simpl.info/dc](http://simpl.info/dc))
-
-Availability:
-
-- M21 for getUserMedia (prefixed),
-
-- M23 for RTCPeerConnection (prefixed and flagless from M23)
-
-- M26 for RTCDataChannel (prefixed, flagless), requires an RTCPeerConnection {
-optional:\[ { RtpDataChannels: true } \]} constraint and only supports
-unreliable data channels and text messages.
-
-Spec: [w3c spec](http://dev.w3.org/2011/webrtc/editor/webrtc.html)
-
-Docs: [webrtc.org](http://webrtc.org/)
-
-Google group:
-<https://groups.google.com/forum/?fromgroups#!forum/discuss-webrtc>
-
-Notes:
-
-- webkitRTCPeerConnection is the name for RTCPeerConnection implementation
-currently in Chrome: other names/implementations are obsolete; prefix will be
-removed when APIs stabilise
-
-- for the permission dialog: Chrome only show the "Always allow" for sites using
-https, for increased security
-
-- getUserMedia is implemented in Opera and Firefox Stable (video only), and
-Chrome and Firefox Nightly/Aurora (audio and video);
-
-- RTCPeerConnection and RTCDataChannel are implemented in Firefox Aurora/Nightly
-
-- getUserMedia can be used as input to Web Audio
-([demo](http://webaudiodemos.appspot.com/input/index.html), the implementation
-can be enabled in about:flags)
-
-- Chrome &lt;=&gt; Firefox RTCPeerConnection interop demo
-([blog](http://blog.chromium.org/2013/02/hello-firefox-this-is-chrome-calling.html))
-
-- [Firefox/Chrome/W3C Standard API differences](http://www.webrtc.org/interop)
-
-**Resolution Constraints** are enabled as of M24:
-
-- [spec and
-examples](http://tools.ietf.org/html/draft-alvestrand-constraints-resolution-00#page-4)
-
-- [demo](http://simpl.info/getusermedia/constraints)
-
-**Tab Capture** (i.e. ability to get stream of 'screencast') currently available
-in Chrome Dev channel:
-
--
-[proposal](http://www.chromium.org/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture)
-
-- [documentation for
-chrome.tabCapture](http://developer.chrome.com/trunk/extensions/tabCapture.html)
-
-**Screen Capture** (i.e. ability to capture the contents of the screen)
-currently available in Chrome 26.0.1410.0:
-
-More info: <https://plus.google.com/118075919496626375791/posts/7U9fkCRM4SM>
-
-[Demo](https://html5-demos.appspot.com/static/getusermedia/screenshare.html)
-
-Demos: [Testing WebRTC on
-Chrome](http://www.webrtc.org/running-the-demos#TOC-Demos)
-
-Code samples: [web-rtc
-samples](http://code.google.com/p/webrtc-samples/source/browse/#svn%2Ftrunk) on
-code.google.com
-
-Dev contact: Serge Lachapelle (sergel)
-
-#### Track element
-
-Add subtitles, captions, screen reader descriptions, chapters and other types of
-timed metadata to video and audio. Chrome currently supports the WebVTT format
-for track data.
-
-Availability: m23
-
-Specs:
-[WHATWG](http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#the-track-element),
-[W3C](http://dev.w3.org/html5/spec/Overview.html#the-track-element),
-[WebVTT](http://dev.w3.org/html5/webvtt/#webvtt-cue-timings)
-
-Notes: Rendering does not yet include CSS pseudo elements.
-
-Demos: [HTML5 Rocks
-article](http://www.html5rocks.com/en/tutorials/track/basics/)
-
-Dev Contact: Andrew Scherkus (scherkus), Silvia Pfeiffer (silviapf)
-
-#### Encrypted Media Extensions
-
-Enables playback of encrypted streams in an &lt;audio&gt;/&lt;video&gt;
-elements.
-
-Availability: m25: [WebM
-Encryption](http://wiki.webmproject.org/encryption/webm-encryption-rfc) & ISO
-BMFF Common Encryption (CENC)
-
-Spec: W3C Editor's Draft:
-[v0.1b](http://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1b/encrypted-media/encrypted-media.html)
-(m22 and later);
-[latest](http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html)
-(object-oriented version not yet implemented)
-
-Notes: In m25, enable via about:flags or run with `--enable-encrypted-media`
-flag. (Enabled by default in m26 and later on desktop and Chrome OS.)
-
-Demo:
-<http://downloads.webmproject.org/adaptive-encrypted-demo/adaptive/index.html>
-
-Dev Contact: David Dorwin (ddorwin)
-
-**JS Web Speech API**
-
-Enables web developers to incorporate speech recognition and synthesis into
-their web pages.
-
-Availability: m25
-
-Spec: [w3c](http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html)
-
-Info:
-<http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API>
-
-Dev Contact: gshires
-
-## Web Components
-
-#### Shadow DOM
-
-Availability: m18 exposed `WebKitShadowRoot().`Enable Shadow DOM in about:flags.
-DevTools support is in m20, behind the DevTools Experiments flag (and setting).
-m25 removes constructor and exposes `element.webkitCreateShadowRoot() `by
-default.
-
-Notes: As of m13, elements internally ported to the shadow dom:
-&lt;progress&gt;, &lt;meter&gt;, &lt;video&gt;, &lt;input type=range&gt;,
-&lt;keygen&gt;.
-
-Tickets: [webkit shadow dom
-tickets](https://bugs.webkit.org/buglist.cgi?query_format=advanced&short_desc_type=substring&short_desc=shadow+dom&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=)
-
-Notes: More details at [What the heck is a Shadow
-DOM?](http://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/), [+Component
-Model](https://plus.google.com/103330502635338602217/posts)
-
-Dev Contact: dglazkov
-
-&lt;template&gt;
-
-HTML template element to allow creating fragment of inert HTML as a prototype
-for stamping out DOM.
-
-Spec:
-[w3c](http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html)
-
-Availability: targeting m26
-
-Info: <http://html5-demos.appspot.com/static/webcomponents/index.html#16>
-
-Dev Contact: rafaelw
-
-**document.register()**
-
-Method for registering (creating) custom elements in script.
-
-Availability: [bug](https://bugs.webkit.org/show_bug.cgi?id=100229)
-
-**CSS @host at-rule**
-
-Allows styling of the element hosting shadow dom.
-
-Spec:
-[spec](http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#host-at-rule)
-
-Demo: [demo](http://html5-demos.appspot.com/static/webcomponents/index.html#32)
-
-Availability: m25
-
-**CSS ::distributed() pseudo element**
-
-Allows styling of nodes distributed into an insertion point.
-
-Spec:
-[spec](https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#selecting-nodes-distributed-to-insertion-points)
-
-Demo: [demo](http://jsbin.com/acapeh/1/edit)
-
-Availability: m26
-
-## Other Open Web Platform features
-
-#### Desktop notifications
-
-Availability: m5
-
-Spec: [w3 draft
-spec](http://dvcs.w3.org/hg/notifications/raw-file/tip/Overview.html), [design
-document](/developers/design-documents/desktop-notifications/)
-
-Notes: Additional functionality added in m6: in-place replacement of
-notifications, BiDi support, Worker support, and UI improvement.
-
-In M22, `createHTMLNotification()` was removed because of spec compliance. See
-[this
-post](https://plus.google.com/u/0/102860501900098846931/posts/8vWo8hq4pDm).
-Dev Contact: John Gregg (johnnyg)
-
-#### &lt;details&gt;/&lt;summary&gt;
-
-Interactive widget to show/hide content.
-
-Spec:
-[WHATWG](http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html)
-
-Availability: m12
-
-Demo: <http://kinlan-presentations.appspot.com/>
-
-#### &lt;datalist&gt;
-
-Predefined data/options for controls
-
-Spec: [W3C](http://www.w3.org/TR/html-markup/datalist.html)
-
-Availability: m20. See [html5rocks.com
-update](http://updates.html5rocks.com/2012/04/datalist-landed-in-Chrome-Canary)
-for mor info.
-
-Demo: <http://updates.html5rocks.com/2012/04/datalist-landed-in-Chrome-Canary>
-
-#### #### &lt;dialog&gt;
-
-#### The dialog element represents a part of an application that a user
-interacts with to perform a task, for example a dialog box, inspector, or
-window.
-
-#### Spec:
-[WHATWG](http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#the-dialog-element)
-
-#### Bug:
-[webk.it/](goog_742956014)[84635](https://bugs.webkit.org/show_bug.cgi?id=84635)
-
-#### Availability: Behind a flag in m25. Enable "Experimental WebKit Features"
-in about:flags.
-
-#### Dev contact: falken
-
-#### #### Device Orientation
-
-#### Enables real-time events about the 3 dimensional orientation of the
-device/laptop
-
-#### Availability: m7, in Intel-based Apple portables ([apple.com
-kb](http://support.apple.com/kb/HT1935)), [iOS
-4.2](https://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html)+
-
-#### Spec: [w3c editors
-draft](http://dev.w3.org/geo/api/spec-source-orientation.html)
-
-#### Demo: [demo](http://slides.html5rocks.com/#slide-orientation)
-
-#### #### EventSource
-
-#### Also called Server-sent Events, these are push notifications from the
-server received as DOM events.
-
-#### Availability: m6
-
-#### Demo: [html5rocks
-article](http://www.html5rocks.com/tutorials/eventsource/basics/), [code and
-demos](http://weblog.bocoup.com/chrome-6-server-sent-events-with-new-eventsource)
-
-**Fullscreen API**
-
-Programmatically instruct content on the page to be presented in the browser's
-full screen (kiosk) mode.
-
-Availability: m15
-
-Spec: [w3c spec](http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html)
-
-Demo: [html5rocks
-update](http://updates.html5rocks.com/2011/10/Let-Your-Content-Do-the-Talking-Fullscreen-API),
-[demo](http://html5-demos.appspot.com/static/fullscreen.html)
-
-Dev contact: jeremya
-
-#### history.pushState
-
-The [pushState, replaceState, and
-clearState](http://dev.w3.org/html5/spec-author-view/history.html#dom-history-pushstate)
-methods provide applications with programmatic control over session history.
-
-Availability: m5. `history.state` was implemented in m18. popstate firing after
-page load: [crbug.com/63040](http://crbug.com/63040)
-
-Documentation:
-[MDN](https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history)
-
-#### Geolocation
-
-Enables websites to get geolocation information from browsers
-
-Availability: m5, also Firefox 3.5
-
-Dev Contact: Andrei Popescu (andreip)
-
-#### GamePad API
-
-Gives JS access to a game controller via USB.
-
-Availability: targeting m18
-
-Spec: [W3C Editor's
-draft](http://dvcs.w3.org/hg/webevents/raw-file/default/gamepad.html)
-Dev contact: scottmg
-
-Notes: [Chromium tracking issue](http://crbug.com/72754). Enabled in about:flags
-
-#### Battery Status
-
-Allows access to see the battery level of the device's battery
-
-Availability: unknown
-
-Spec: [w3c editor's
-draft](http://dev.w3.org/2009/dap/system-info/battery-status.html)
-
-Bugs: [webk.it/62698](http://webk.it/62698)
-
-Demo: [here](http://www.smartjava.org/examples/webapi-battery/)
-
-#### #### DOM MutationObservers
-
-#### Provides notifications when DOM nodes are rearranged or modified.
-
-#### Availability: m18, prefixed as WebKitMutationObserver; unprefixed in
-current Firefox
-
-#### Spec: [part of dom4
-(w3c)](http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#mutation-observers)
-
-#### Related links:
-[developer.mozilla.org](https://developer.mozilla.org/en/DOM/DOM_Mutation_Observers)
-
-#### Useful library: [Mutation
-Summary](http://code.google.com/p/mutation-summary/)
-
-#### Dev Contact: rafaelw
-
-**&lt;iframe&gt; attributes**
-
-> [MDN docs](https://developer.mozilla.org/en/HTML/Element/iframe)
-
-> **seamless**
-
-> The seamless attribute is used to embed and &lt;iframe&gt; in the calling page
-> without scrollbars or borders (e.g. seamlessly). In m26, seamless iframes
-> inherit styles from their embedding parent page.
-
-> Availability: m20
-
-> Spec:
-> [whatwg](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-seamless)
-
-> Info: <http://benvinegar.github.com/seamless-talk/>
-
-> **srcdoc**
-
-> Gives the content of an iframe as a src context to embed (e.g. `<iframe
-> seamless srcdoc="<b>Hello World</b>"></iframe>`).
-
-> Note: If both src and srcdoc are set, the latter takes precedence.
-
-> Availability: m20
-
-> Spec:
-> [whatwg](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-srcdoc)
-
-> **sandbox**
-
-> Method of running external site pages with reduced privileges (i.e. no
-> JavaScript) in iframes (`<iframe sandbox="allow-same-origin allow-forms"
-> src="..."></iframe>`)
-
-> Availability: m19
-
-> Spec:
-> [whatwg](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox)
-
-#### #### matchMedia()
-
-#### API for testing if a given media query will apply.
-
-#### Availability: m9
-
-#### Spec: [w3c cssom
-spec](http://dev.w3.org/csswg/cssom-view/#dom-window-matchmedia)
-
-#### Notes: [webkit changeset](http://trac.webkit.org/changeset/72552)
-
-#### Pointer Lock (TAPIFKA Mouse Lock)
-
-Gives access to raw mouse movement, locks the target of mouse events to a single
-element, eliminates limits of how far mouse movement can go in a single
-direction, and removes the cursor from view. Obvious use cases are for first
-person or real time strategy games.
-Availability: m18 behind flag. On be default in m22 with a refined API similar
-to requestFullScreen.
-
-Spec: [W3C Editor's
-draft](http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html)
-
-Documentation: [HTML5
-Rocks](http://updates.html5rocks.com/2012/02/Pointer-Lock-API-Brings-FPS-Games-to-the-Browser)
-
-Notes: [Chromium tracking
-issue](http://code.google.com/p/chromium/issues/detail?id=72754)
-
-Dev contact: scheib
-
-Note, late breaking changes:
-
-Pointer lock can only work within one document. If you lock in one iframe, you
-can not have another iframe try to lock and transfer the target... it will error
-instead. The first iframe has to unlock, then the second iframe can lock.
-
-Also, iframes work by default, but sandboxed iframes block pointer lock. Landed
-recently into WebKit the ability to use &lt;iframe
-sandbox="allow-pointer-lock"&gt;, but that will not percolate into Chrome until
-23.
-
-#### Page Visibility
-
-Provides an API to ask whether the current tab is visibile or not. If you, you
-might want to throttle back action or set an idle state.
-
-Availability: m13, prefixed as `document.webkitHidden`
-
-Notes: Relatedly, setTimeout/Interval are clamped to 1000ms when in a background
-tab as of [m11](http://code.google.com/p/chromium/issues/detail?id=66078).
-Firefox 5 has the
-[same](https://developer.mozilla.org/en/DOM/window.setTimeout#Minimum_delay_and_timeout_nesting)
-behavior.
-
-Spec: [w3c draft
-spec](http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html)
-
-Demo: [samdutton.com/pageVisibility](http://samdutton.com/pageVisibility)
-
-Dev Contact: shishir
-
-#### Workers
-
-Provides a threading API
-
-Availability: Chrome 3, Safari 4, Firefox 3.5. Shared workers available in m4.
-
-Android Availability: Dedicated workers in m16 (0.16). No shared workers, yet.
-
-Spec: [WHATWG](http://www.whatwg.org/specs/web-workers/current-work/)
-
-Notes: Pre-M15, there was a limit to the number of workers that each page can
-start, as well as the number of workers that can be running globally across all
-pages. This was because a new process was started for each worker. As of M15,
-workers are started in-process, meaning less memory footprint and faster
-messaging. Transferrable objects landed in m17 (see next)
-
-Dev Contact: Dmitry Lomov (dslomov), Drew Wilson (atwilson)
-
-#### Transferable Object messaging passing
-
-With transferable objects/data, ownership is transferred from one context to
-another. It is zero-copy, which vastly improves the performance of sending data
-to a Worker or another window.
-
-Availability: m17
-
-Spec: [w3c
-spec](http://dev.w3.org/html5/spec/common-dom-interfaces.html#transferable-objects)
-
-Notes: landed as prefixed. Unprefixed in M24.
-
-```none
-worker.postMessage(arrayBuffer, [arrayBuffer])
-window.postMessage(arrayBuffer, targetOrigin, [arrayBuffer])
-```
-
-See: [html5rocks
-update](http://updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast),
-[demo](http://html5-demos.appspot.com/static/workers/transferables/index.html)
-
-#### &lt;link&gt; load/error events
-
-Specify and onload or onerror event for a stylesheet to load.
-
-Availability: m19?
-
-Spec: [W3C](http://www.w3.org/TR/html5/the-link-element.html#the-link-element)
-
-#### Touch Events
-
-Android Availability: m16 (0.16)
-
-**MathML**
-
-Availability: m24
-
-Spec: [w3c spec](http://www.w3.org/TR/MathML3/)
-
-**JS Internationalization API**
-
-Allows collation (string comparison), number formatting, and date and time
-formatting for JavaScript applications. More info
-[here](http://norbertlindenberg.com/2012/10/ecmascript-internationalization-api/index.html).
-
-Availability: m24
-
-Spec:
-[here](http://www.ecma-international.org/publications/standards/Ecma-402.htm)
-
-**Resource Timing API**
-
-Availability: m25
-
-Spec: [w3c](http://www.w3.org/TR/2011/WD-resource-timing-20110524/)
-
-**User Timing API**
-
-Availability: m25
-
-Spec: [w3c](http://w3c-test.org/webperf/specs/UserTiming/)
-
-**Object.observe()**
-
-Way to observe changes to JS objects.
-
-Availability: m25 (behind Enable Experimental JS Features in about:flags)
-
-Info:
-<http://updates.html5rocks.com/2012/11/Respond-to-change-with-Object-observe>
-
-## Webforms
-
-Availability: **See [HTML5 Forms
-Status](http://www.chromium.org/developers/web-platform-status/forms) for all
-details.** (Updated as recently as Nov 28th, 2012).
-
-Includes details in input types (like date and color), input attributes,
-datalist and more.
-
-#### Autocomplete
-
-Provides hints to the autofill implementation to allow Chrome to better provide
-suggested values to the user.
-
-Availability: The `x-autocompletetype` attribute was implemented in Chrome 15.
-It used [token values that are documented
-here](http://wiki.whatwg.org/wiki/Autocomplete_Types#Experimental_Implementation_in_Chrome),
-but later revised. Chrome 24 features an implementation of the `autocomplete`
-attribute that [matches the HTML
-spec](http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofilling-form-controls:-the-autocomplete-attribute).
-
-## DOM APIs
-
-[Element.matchesSelector](http://www.w3.org/TR/selectors-api2/#matchtesting) -
-m4
-
-Element.outerHTML - m1
-
-Element.textContent (faster than innerHTML for plain text) - m1
-
-[Element.classList](http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#dom-classlist)
-(classList.add/remove methods) - m8
-
-[Element.dataset](http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
-(Provides easy access to `data-*` attribute values) - m8
-
-window.onerror event - [m10](http://trac.webkit.org/changeset/76216)
-
-crypto.getRandomValues() - m11
-
-selectionchange event - [m11](http://trac.webkit.org/changeset/79208)
-
-## Chrome Extensions
-
-[View the changelog of features landing in Chrome
-extensions.](http://code.google.com/chrome/extensions/trunk/whats_new.html)
-
-More resources for going deep with HTML5:
-
-* [HTML5 Rocks](http://html5rocks.com/)
-* [Mozilla Developer
- Network](https://developer.mozilla.org/en/HTML/HTML5)
-* [StackOverflow:
- html5](http://stackoverflow.com/questions/tagged/html5)
-* [#html5](http://webchat.freenode.net/?channels=html5) on freenode
diff --git a/chromium/docs/website/site/developers/webkit-core-projects/index.md b/chromium/docs/website/site/developers/webkit-core-projects/index.md
deleted file mode 100644
index c2aa1d86ca5..00000000000
--- a/chromium/docs/website/site/developers/webkit-core-projects/index.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: webkit-core-projects
-title: Blink Core Projects
----
-
-**This list is for Blink work that is about improving performance, infrastructure and/or the maintainability of the codebase. This is a list of high-priority projects that have minimal dependence on web standards bodies.**
-**If you decide to take on one of these projects put your name at the beginning like \[ ojan \]. Some of the bigger projects could use multiple people working on them.**
-**Talk to Ojan if you have questions about any of these or want to add more things to this list. If you discover other new projects that would fit well here we should add them!
-
-## blink/core projects
-
-* **Please see the [Project Warden
- list](https://code.google.com/p/chromium/issues/list?can=2&q=label%3AProject-Warden&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&cells=tiles)
- for more maintainability tasks.**
-* Identify and fix scrolling performance problems on this page:
- <http://crbug.com/157016>
-* Moving widget-loading (iframes/plugins) out of the rendering tree
- [wkb.ug/45049](http://wkb.ug/45049)
-* Add more invariants during layout to ensure proper behavior (see
- <https://bugs.webkit.org/show_bug.cgi?id=49019> and
- <https://bugs.webkit.org/show_bug.cgi?id=64222>)
-
-## Performance
-
-* \[META\] RoboHornet (and RoboHornet Pro) related performance issues:
- <https://bugs.webkit.org/show_bug.cgi?id=98798>
- * - tag-based collections are invalidated on every add/remove of
- an element (25%+ win for RoboHornetPro)
- [wkb.ug/98823](http://wkb.ug/98823)
-* Improve performance of Dromaeo and dom_perf bencharks. For example,
- &lt;<https://bugs.webkit.org/show_bug.cgi?id=99197>&gt; makes JSC go
- 40% faster on dom-traverse. Can we do something similar for V8?
-* Should report private memory on the perf bots:
- <http://crbug.com/163280>
-* Improve memory usage of the following benchmarks:
- * <http://build.chromium.org/f/chromium/perf/xp-release-dual-core/memory/report.html?history=50&rev=-1&graph=commit_charge>
- * <http://build.chromium.org/f/chromium/perf/xp-release-dual-core/moz/report.html?history=50&rev=-1>
- * <http://build.chromium.org/f/chromium/perf/xp-release-dual-core/intl1/report.html?history=50&rev=-1>
- * <http://build.chromium.org/f/chromium/perf/xp-release-dual-core/intl2/report.html?history=50&rev=-1>
- * <http://build.chromium.org/f/chromium/perf/xp-release-dual-core/bloat-http/report.html?history=50&rev=-1>
-* Create (and then optimize) benchmarks that accurately represent
- memory usage in gmail, docs, etc.
-* Improve performance test suites:
- * first and second tabs of dromaeo benchmarks show the same data:
- <http://crbug.com/160321>
- * page cyclers should have subgraphs for each individual site:
- <http://crbug.com/161837>
- * add performance trybots: <http://crbug.com/120380>
- * Linux lowmem perf bot exhibits bimodal behavior:
- <http://crbug.com/159077>
- * explore ways to reduce performance test variance:
- <http://crbug.com/161844>
-
-## Infrastructure
-
-* rebaselining with virtual test suites involved gets confused:
- [crbug.com/237701](http://crbug.com/237701)
-* Switch chromium windows bots back to using Apache:
- <https://bugs.webkit.org/show_bug.cgi?id=101373>
-* Improve garden-o-matic:
- * let you minimize failures so they're not in your face:[
- https://bugs.webkit.org/show_bug.cgi?id=97949](https://bugs.webkit.org/show_bug.cgi?id=97949)
- * show the last revision process by every layout test bot and the
- last by every non-layout test bot:[
- https://bugs.webkit.org/show_bug.cgi?id=98088](https://bugs.webkit.org/show_bug.cgi?id=98088)
- * garden-o-matic should run even if you don't have the server
- running locally: [crbug.com/241506](http://crbug.com/241506)
-
-* **Add a tool to garden-o-matic/flakiness dashboard/code review tool
- to make it possible to easily view the diff of an expected result to
- another platform's expected file (e.g. diff between
- platform/chromium/foo-expected.txt and
- platform/mac/foo-expected.txt).**
-* Rebaseline tests from the results.html page:[
- https://bugs.webkit.org/show_bug.cgi?id=86797](https://bugs.webkit.org/show_bug.cgi?id=86797)
-
-* ****Flakiness dashboard****
- * gtests should output the same JSON format as run-webkit-tests:
- [crbug.com/247192](http://crbug.com/247192)
- * flakiness dashboard links on the waterfall point to the wrong
- data: [crbug.com/246849](http://crbug.com/246849)
- * Annotate the failing test results shown in the flakiness
- dashboard with the revision it last failed at. Something like:
- r12345
- * Audio failures don't show up correctly on the flakiness
- dashboard: <https://bugs.webkit.org/show_bug.cgi?id=104632>
-
-## LayoutTests
-
-* Create infrastructure for red-green layout tests. They have no
- expected result. If the bitmap has only green and white pixels, it
- passes, otherwise it fails.
-* Make the text caret not blink in tests:[
- https://bugs.webkit.org/show_bug.cgi?id=97558](https://bugs.webkit.org/show_bug.cgi?id=97558)
-* using js-test-pre.js should only require a DOCTYPE and
- js-test-pre.js:[
- https://bugs.webkit.org/show_bug.cgi?id=48344](https://bugs.webkit.org/show_bug.cgi?id=48344)
-* Hundreds of mac failures are due to a slightly different color
- repaint background: <https://bugs.webkit.org/show_bug.cgi?id=83400>
-* Hundreds of MountainLion-only reftest failures:
- [crbug.com/238093](http://crbug.com/238093)
-* checkLayout() should error out if no data-expected\* attributes were
- found: [crbug.com/233956](http://crbug.com/233956)
-* Inspector tests are crazy slow in debug:
- [crbug.com/238095](http://crbug.com/238095) \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/webui/index.md b/chromium/docs/website/site/developers/webui/index.md
deleted file mode 100644
index d7e85d9260b..00000000000
--- a/chromium/docs/website/site/developers/webui/index.md
+++ /dev/null
@@ -1,453 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: webui
-title: Creating Chrome WebUI Interfaces
----
-
-If you are building a WebUI interface under components/ then see [Creating WebUI
-Interfaces in
-components/](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/webui_in_components.md)
-
-Creating a Chrome WebUI interface is simple yet involves changing a number of
-files. This guide briefly steps over the process. For brevity, copyright notices
-are not placed at the beginning of the new files but in practice do not forget
-to add these.
-
-### Creating the WebUI page
-
-WebUI resources are located in the resources folder,
-`src/chrome/browser/resources`. When creating WebUI resources, follow the [Web
-Development Style Guide](/developers/web-development-style-guide). For a sample
-WebUI page you could start with the following files:
-
-src/chrome/browser/resources/hello_world.html:
-
-```none
-<!DOCTYPE HTML>
-<html i18n-values="dir:textdirection">
-<head>
-  <meta charset="utf-8">
-  <title i18n-content="helloWorldTitle"></title>
-  <link rel="stylesheet" href="hello_world.css">
- <script src="chrome://resources/js/cr.js"></script>
- <script src="chrome://resources/js/load_time_data.js"></script>
- <script src="chrome://resources/js/util.js"></script>
-  <script src="strings.js"></script>
-  <script src="hello_world.js"></script>
-</head>
-<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
-  <h1 i18n-content="helloWorldTitle"></h1>
-  <p id="welcome-message"></p>
- <script src="chrome://resources/js/i18n_template.js"></script>
-</body>
-</html>
-```
-
-src/chrome/browser/resources/hello_world.css:
-
-```none
-p {
-  white-space: pre-wrap;
-}
-```
-
-src/chrome/browser/resources/hello_world.js:
-
-```none
-cr.define('hello_world', function() {
-  'use strict';
-  /**
-   * Be polite and insert translated hello world strings for the user on loading.
-   */
-  function initialize() {
-    $('welcome-message').textContent = loadTimeData.getStringF('welcomeMessage',
-        loadTimeData.getString('userName'));
-  }
-  // Return an object with all of the exports.
-  return {
-    initialize: initialize,
-  };
-});
-document.addEventListener('DOMContentLoaded', hello_world.initialize);
-```
-
-### Adding the resources to Chrome
-
-Resources files are added to Chrome using the
-`src/chrome/browser/browser_resources.grd` file. The following additions add our
-hello_world files:
-
-src/chrome/browser/browser_resources.grd:
-
-```none
-+ <include name="IDR_HELLO_WORLD_HTML" file="resources\hello_world.html" type="BINDATA" />
-+ <include name="IDR_HELLO_WORLD_CSS" file="resources\hello_world.css" type="BINDATA" />
-+ <include name="IDR_HELLO_WORLD_JS" file="resources\hello_world.js" type="BINDATA" />
-```
-
-Adding URL constants for new chrome URL
-
-URL constants are stored in the files `src/chrome/common/webui_url_constants.*`.
-This is where you will add the URL or URL's which will be directed to your new
-resources.
-
-src/chrome/common/webui_url_constants.h:
-
-```none
-+ extern const char kChromeUIHelloWorldURL[];
-...
-+ extern const char kChromeUIHelloWorldHost[];
-```
-
-src/chrome/common/webui_url_constants.cc:
-
-```none
-+ const char kChromeUIHelloWorldURL[] = "chrome://hello-world/";
-...
-+ const char kChromeUIHelloWorldHost[] = "hello-world";
-```
-
-Adding localized strings
-
-We need a few string resources for translated strings to work on the new
-resource. The welcome message contains a variable with a sample value so that it
-can be accurately translated.
-
-src/chrome/app/generated_resources.grd:
-
-```none
-+ <message name="IDS_HELLO_WORLD_TITLE" desc="A happy message saying hello to the world">
-+   Hello World!
-+ </message>
-+ <message name="IDS_HELLO_WORLD_WELCOME_TEXT" desc="Message welcoming the user to the hello world page">
-+   Welcome to this fancy Hello World page <ph name="WELCOME_NAME">$1<ex>Chromium User</ex></ph>!
-+ </message>
-```
-
-Adding a WebUI class for handling requests to the chrome://hello-world/ URL
-
-Next we need a class to handle requests to this new resource URL. Typically this
-will subclass ChromeWebUI (but WebUI dialogs should subclass HtmlDialogUI
-instead).
-
-src/chrome/browser/ui/webui/hello_world_ui.h:
-
-```none
-#ifndef CHROME_BROWSER_UI_WEBUI_HELLO_WORLD_UI_H_
-#define CHROME_BROWSER_UI_WEBUI_HELLO_WORLD_UI_H_
-#pragma once
-#include "base/macros.h"
-#include "content/public/browser/web_ui_controller.h"
-// The WebUI for chrome://hello-world
-class HelloWorldUI : public content::WebUIController {
- public:
-  explicit HelloWorldUI(content::WebUI* web_ui);
-  ~HelloWorldUI() override;
- private: 
-  DISALLOW_COPY_AND_ASSIGN(HelloWorldUI);
-};
-#endif  // CHROME_BROWSER_UI_WEBUI_HELLO_WORLD_UI_H_
-```
-
-src/chrome/browser/ui/webui/hello_world_ui.cc:
-
-```none
-#include "chrome/browser/ui/webui/hello_world_ui.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/grit/browser_resources.h"
-#include "chrome/grit/generated_resources.h"
-#include "content/public/browser/web_ui_data_source.h"
-HelloWorldUI::HelloWorldUI(content::WebUI* web_ui)
-    : content::WebUIController(web_ui) {
-  // Set up the chrome://hello-world source.
-  content::WebUIDataSource* html_source =
-      content::WebUIDataSource::Create(chrome::kChromeUIHelloWorldHost);
-  // Localized strings.
-  html_source->AddLocalizedString("helloWorldTitle", IDS_HELLO_WORLD_TITLE);
-  html_source->AddLocalizedString("welcomeMessage", IDS_HELLO_WORLD_WELCOME_TEXT);
-  // As a demonstration of passing a variable for JS to use we pass in the name "Bob".
-  html_source->AddString("userName", "Bob");
-  html_source->UseStringsJs();
-  // Add required resources.
-  html_source->AddResourcePath("hello_world.css", IDR_HELLO_WORLD_CSS);
-  html_source->AddResourcePath("hello_world.js", IDR_HELLO_WORLD_JS);
-  html_source->SetDefaultResource(IDR_HELLO_WORLD_HTML);
-  Profile* profile = Profile::FromWebUI(web_ui);
-  content::WebUIDataSource::Add(profile, html_source);
-}
-HelloWorldUI::~HelloWorldUI() {
-}
-```
-
-Adding new sources to Chrome
-
-In order for your new class to be built and linked in it needs to be added to
-the project gypi file.
-
-src/chrome/browser/ui/BUILD.gn:
-
-```none
-sources = [
-...
-+   "webui/hello_world_ui.cc",
-+   "webui/hello_world_ui.h",
-```
-
-Adding your WebUI request handler to the Chrome WebUI factory
-
-The Chrome WebUI factory is where you setup your new request handler.
-
-src/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc:
-
-```none
-+ #include "chrome/browser/ui/webui/hello_world_ui.h"
-...
-+ if (url.host() == chrome::kChromeUIHelloWorldHost)
-+   return &NewWebUI<HelloWorldUI>;
-```
-
-Testing
-
-You're done! Assuming no errors (because everyone gets their code perfect the
-first time) you should be able to compile and run chrome and navigate to
-chrome://hello-world/ and see your nifty welcome text!
-
-### Adding a callback handler
-
-You probably want your new WebUI page to be able to do something or get
-information from the C++ world. For this, we use message callback handlers.
-Let's say that we don't trust the Javascript engine to be able to add two
-integers together (since we know that it uses floating point values internally).
-We could add a callback handler to perform integer arithmetic for us.
-
-src/chrome/browser/ui/webui/hello_world_ui.h:
-
-```none
-#include "chrome/browser/ui/webui/chrome_web_ui.h"
-+
-+ namespace base {
-+   class ListValue;
-+ }  // namespace base
-// The WebUI for chrome://hello-world
-...
-    // Set up the chrome://hello-world source.
-    ChromeWebUIDataSource* html_source =
-        new ChromeWebUIDataSource(chrome::kChromeUIHelloWorldHost);
-+
-+   // Register callback handler.
-+   RegisterMessageCallback("addNumbers",
-+       base::Bind(&HelloWorldUI::AddNumbers,
-+                  base::Unretained(this)));
-    // Localized strings.
-...
-    virtual ~HelloWorldUI();
-+
-+  private:
-+   // Add two numbers together using integer arithmetic.
-+   void AddNumbers(const base::ListValue* args);
-    DISALLOW_COPY_AND_ASSIGN(HelloWorldUI);
-  };
-```
-
-src/chrome/browser/ui/webui/hello_world_ui.cc:
-
-```none
-  #include "chrome/browser/ui/webui/hello_world_ui.h"
-+
-+ #include "base/values.h"
-  #include "chrome/browser/profiles/profile.h"
-...
-  HelloWorldUI::~HelloWorldUI() {
-  }
-+
-+ void HelloWorldUI::AddNumbers(const base::ListValue* args) {
-+   int term1, term2;
-+   if (!args->GetInteger(0, &term1) || !args->GetInteger(1, &term2))
-+     return;
-+   base::FundamentalValue result(term1 + term2);
-+   CallJavascriptFunction("hello_world.addResult", result);
-+ }
-```
-
-src/chrome/browser/resources/hello_world.js:
-
-```none
-    function initialize() {
-+     chrome.send('addNumbers', [2, 2]);
-    }
-+
-+   function addResult(result) {
-+     alert('The result of our C++ arithmetic: 2 + 2 = ' + result);
-+   }
-    return {
-+     addResult: addResult,
-      initialize: initialize,
-    };
-```
-
-You'll notice that the call is asynchronous. We must wait for the C++ side to
-call our Javascript function to get the result.
-
-## Creating a WebUI Dialog
-
-Once you've created a WebUI resource following the above instructions, there are
-two changes necessary to make it a dialog. You must subclass the HtmlDialogUI
-class instead of ChromeWebUI and create an HtmlDialogUIDelegate class which will
-be responsible for running the dialog.
-
-1. Instead of subclassing the ChromeWebUI class as above you will need an
-instance of HtmlDialogUI.
-
-src/chrome/browser/ui/webui/hello_world_ui.h:
-
-```none
-- #include "#chrome/browser/ui/webui/chrome_web_ui.h"
-+ #include "#chrome/browser/ui/webui/html_dialog_ui.h"
-- class HelloWorldUI : public ChromeWebUI {
-+ class HelloWorldUI : public HtmlDialogUI {
-```
-
-2. Create an HtmlDialogUIDelegate class which is used to instantiate the dialog.
-For brevity each of these functions are stubbed out with the minimal code
-possible.
-
-src/chrome/browser/ui/webui/hello_world.h
-
-```none
-#ifndef CHROME_BROWSER_UI_WEBUI_HELLO_WORLD_H_
-#define CHROME_BROWSER_UI_WEBUI_HELLO_WORLD_H_
-#pragma once
-#include "chrome/browser/ui/webui/html_dialog_ui.h"
-class HelloWorldDialog : private HtmlDialogUIDelegate {
- public:
-  // Shows the Hello World dialog.
-  static void ShowDialog();
-  virtual ~HelloWorldDialog();
- private:
-  // Construct a Hello World dialog
-  explicit HelloWorldDialog();
-  // Overridden from HtmlDialogUI::Delegate:
-  virtual bool IsDialogModal() const OVERRIDE;
-  virtual string16 GetDialogTitle() const OVERRIDE;
-  virtual GURL GetDialogContentURL() const OVERRIDE;
-  virtual void GetWebUIMessageHandlers(
-      std::vector<WebUIMessageHandler*>* handlers) const OVERRIDE;
-  virtual void GetDialogSize(gfx::Size* size) const OVERRIDE;
-  virtual std::string GetDialogArgs() const OVERRIDE;
-  virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE;
-  virtual void OnCloseContents(
-      TabContents* source, bool* out_close_dialog) OVERRIDE;
-  virtual bool ShouldShowDialogTitle() const OVERRIDE;
-  DISALLOW_COPY_AND_ASSIGN(HelloWorldDialog);
-};
-#endif  // CHROME_BROWSER_UI_WEBUI_HELLO_WORLD_H_
-```
-
-src/chrome/browser/ui/webui/hello_world.cc
-
-```none
-#include "base/utf_string_conversions.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/webui/hello_world.h"
-#include "chrome/common/url_constants.h"
-void HelloWorldDialog::ShowDialog() {
-  Browser* browser = BrowserList::GetLastActive();
-  DCHECK(browser);
-  browser->BrowserShowHtmlDialog(new HelloWorldDialog(), NULL);
-}
-HelloWorldDialog::HelloWorldDialog() {
-}
-HelloWorldDialog::~HelloWorldDialog() {
-}
-bool HelloWorldDialog::IsDialogModal() {
-  return false;
-}
-string16 HelloWorldDialog::GetDialogTitle() {
-  return UTF8ToUTF16("Hello World");
-}
-GURL HelloWorldDialog::GetDialogContentURL() const {
-  return GURL(chrome::kChromeUIHelloWorldURL);
-}
-void HelloWorldDialog::GetWebUIMessageHandlers(
-    std::vector<WebUIMessageHandler*>* handlers) const {
-}
-void HelloWorldDialog::GetDialogSize(gfx::Size* size) const {
-  size->SetSize(600, 400);
-}
-std::string HelloWorldDialog::GetDialogArgs() const {
-  return std::string();
-}
-void HelloWorldDialog::OnDialogClosed(const std::string& json_retval) {
-  delete this;
-}
-void HelloWorldDialog::OnCloseContents(TabContents* source,
-    bool* out_close_dialog) {
-  if (out_close_dialog)
-    *out_close_dialog = true;
-}
-bool HelloWorldDialog::ShouldShowDialogTitle() const {
-  return true;
-}
-```
-
-You can invoke this new dialog by calling HelloWorldDialog::ShowDialog().
-
-### Passing arguments to the WebUI
-
-As you may have guessed, the HtmlDialogUIDelegate::GetDialogArgs() function call
-is used for passing arguments to a dialog page. For example, if we wanted to
-have a custom message displayed to the user depending on some argument known
-only at dialog creation we could pass that argument in during construction,
-return it from GetDialogArgs, and access it in Javascript from
-chrome.dialogArguments as follows:
-
-src/chrome/browser/ui/webui/hello_world.h
-
-```none
--   static void ShowDialog();
-+   static void ShowDialog(std::string message);
-+   // The message to be displayed to the user.
-+   std::string message_;
-+
-    DISALLOW_COPY_AND_ASSIGN(HelloWorldDialog);
-  };
-```
-
-src/chrome/browser/ui/webui/hello_world.cc
-
-```none
-- HelloWorldDialog::HelloWorldDialog() {
-+ HelloWorldDialog::HelloWorldDialog(std::string message)
-+     : message_(message) {
-  }
-  std::string HelloWorldDialog::GetDialogArgs() const {
--   return std::string();
-+   return message_;
-  }
-```
-
-src/chrome/browser/resources/hello_world.js:
-
-```none
-    function initialize() {
-+     document.getElementsByTagName('p')[0].textContent = chrome.dialogArguments;
-    }
-```
-
-In practice you will probably be passing structured data to your WebUI for which
-you can use the class base::JSONWriter to produce a JSON string which can be
-parsed in javascript using JSON.parse(chrome.dialogArguments). TODO: Provide
-example of this.
-
-### Adding dialog callback handlers
-
-Sometimes there are resources or objects that you have available at the time of
-dialog creation which will not be available from the context of the HtmlDialogUI
-class. You can add callbacks to your HtmlDialogUIDelegate class which Javascript
-can then call directly. This is done from the overridden
-HtmlDialogUIDelegate::GetWebUIMessageHandlers. The actual handlers are then
-written the same as for regular WebUI. TODO: Provide example. \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/webview-changes/index.md b/chromium/docs/website/site/developers/webview-changes/index.md
deleted file mode 100644
index afa0439d4fc..00000000000
--- a/chromium/docs/website/site/developers/webview-changes/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: webview-changes
-title: Shipping changes that are webview-friendly
----
-
-Shipping changes to Android WebView requires some extra due-diligence.
-Changing features on the web platform should always be done with care, but
-here are a few ways WebView is special:
-
-* Native apps are often built on this technology, and are less likely to use the
- WebView beta program. In general, they may pay less attention to the web
- platform than they do to the Android platform, which has a less frequent and
- different API update & deprecation mechanism.
-
-* Analytics are more difficult to get - UKM is not present, and UMA may be less
- complete as some apps opt-out.
-
-* A/B experiments are less effective, for similar reasons.
-
-* There is less engineering effort on this platform, and it is often not top of
- mind for Chromium developers.
-
-The kinds of changes that substantially affect WebView are usually the
-same kinds that substantially affect other platforms, but in some cases there
-may be more risk to WebView, especially if it involves places where the WebView
-architecture [differs significantly](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/web-platform-compatibility.md)
-from other platform. In addition, just as with
-[enterprise changes](https://www.chromium.org/developers/enterprise-changes),
-some APIs may be more prevalant on that platform than others.
-
-A change to Android WebView is *potentially high risk* if one of the following hold:
-* Theh change removes an API or changes its behavior such that app code that calls the API may start throwing an exception or otherwise hard-crash
-* The change has significant impact on the architecture of the Android WebView platform as it differs from other platforms
-
-A change to Android WebView is likely not *potentially high risk* if one of the following hold:
-* The change is to ship a new API
-* The possible app impact of the change is cosmetic or non-fatal (e.g. a CSS property changing behavior)
-* Data analysis shows that affected apps are very rare
-
diff --git a/chromium/docs/website/site/developers/whistling.jpg.sha1 b/chromium/docs/website/site/developers/whistling.jpg.sha1
deleted file mode 100644
index b7839f56715..00000000000
--- a/chromium/docs/website/site/developers/whistling.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7417811aca161e718a97a6198b3273dc1647df18 \ No newline at end of file
diff --git a/chromium/docs/website/site/developers/windows-binary-sizes/index.md b/chromium/docs/website/site/developers/windows-binary-sizes/index.md
deleted file mode 100644
index 2110485b689..00000000000
--- a/chromium/docs/website/site/developers/windows-binary-sizes/index.md
+++ /dev/null
@@ -1,286 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-page_name: windows-binary-sizes
-title: Windows Binary Sizes
----
-
-Chrome binaries sometimes increase in size for unclear reasons and investigating
-these regressions can be quite tricky. There are a a few tools that help with
-investigating these regressions or just looking for wasted bytes in DLLs or
-EXEs. The tools are:
-
-* New in 2021:
- [SizeBench](https://devblogs.microsoft.com/performance-diagnostics/sizebench-a-new-tool-for-analyzing-windows-binary-size/)
- is a Microsoft tool that does some sophisticated analysis of binary
- size. [More information can be found
- here.](https://devblogs.microsoft.com/performance-diagnostics/sizebench-a-new-tool-for-analyzing-windows-binary-size/)
- If you can't download it from the store then you can clone
- <https://github.com/MattiasC85/Scripts> and then use "powershell
- OSD\\Download-AppxFromStore.ps1 -storeurl
- https://www.microsoft.com/en-us/p/sizebench/9ndf4n1wg7d6" to
- download the files, and then run the SizeBench .appx file to install
- SizeBench. Note that SizeBench is incompatible with lld-link so you
- have to build chrome with "use_lld = false", and so far has not
- worked at all.
-* [tools\\win\\ShowGlobals](https://source.chromium.org/chromium/chromium/src/+/main:tools/win/ShowGlobals/)
- - this executable (must be built from a VS solution) uses DIA2 (and
- is based off of the dia2dump sample whose source comes with Visual
- Studio) to print all ‘interesting’ global variables. Just pass the
- path to a PDB file and details about any large or redundant global
- variables will be printed. Large global variables are simple enough
- to understand. Redundant or repeated global variables are when the
- same global ends up in the binary multiple times - sometimes dozens
- or hundreds of times. This happens when a non-integral global
- variable (typically a struct, array, float, or double, or an
- integral type with a non-trivial constructor) is defined as static
- or const in a header file, causing it to be instantiated in multiple
- translation units. The constants kWastageThreshold and
- kBigSizeThreshold can be used to configure how much information
- ShowGlobals reports. Making these command-line parameters is left as
- an exercise for the reader.
-* [tools\\win\\pdb_compare_globals.py](https://source.chromium.org/chromium/chromium/src/+/main:tools/win/pdb_compare_globals.py)
- - this uses ShowGlobals.exe to get the interesting global variables
- from two PE files and then print what has changed, either different
- sizes or different interesting globals. This is designed for
- understanding size regressions, since binary size regressions, even
- when they are mostly due to code size, often have a correlated
- effect on global variables
-* [tools\\win\\pe_summarize.py](https://source.chromium.org/chromium/chromium/src/+/main:tools/win/pe_summarize.py)
- - this displays a summary of the size of the sections in the DLLs or
- EXEs whose paths are passed to it. If two copies of the same DLL/EXE
- are passed to it then the size differences are printed as a summary,
- to make regressions and improvements easier to see. This is most
- often used for measuring progress or seeing what section has grown.
-* [tools\\win\\linker_verbose_tracking.py](https://source.chromium.org/chromium/chromium/src/+/main:tools/win/linker_verbose_tracking.py)
- - this scans the output of "link /verbose" in order to see why a
- particular object file was linked in. This can either be because it
- was listed on the command line (perhaps it was in a source set) or
- because it was referenced (often indirectly) by an object file that
- was listed on the command line.
-* SymbolSort - this is a third party tool [available on
- github](https://github.com/adrianstone55/SymbolSort/) that generates
- various reports, including a sorted-by-size list of all symbols,
- including functions. The -diff option to SymbolSort is particularly
- useful for identifying where a change in size is coming from,
- grouped in various ways. Usage: SymbolSort -in new\\chrome.dll.pdb
- -diff old\\chrome.dll.pdb -out change.txt
-* SymbolSort data can be visualized using webtreemap - see
- <https://github.com/rongjiecomputer/bloat-win> for an example
-* Static initializers waste code size and create process-private data.
- The source to a static_initializers tool that will look for symbol
- names associated with static initializers is in the Chromium repo in
- tools\\win\\static_initializers.
-
-Details of how and when to use these tools are shown below.
-
-If looking for size saving opportunities then “ShowGlobals.exe file.pdb” can be
-used to find duplicated or large global variables that may be unnecessary.
-Typical (shortened for this document) results look like this - the first set of
-entries are duplicated globals, the second set of entries are large globals:
-
-```
-#Dups DupSize Size Section Symbol-name
- 805 805 std::piecewise_construct
- 3 204 rgb_red
- 3 204 rgb_green
- 3 204 rgb_blue
- 187 187 WTF::in_place
- 4 160 extensions::api::g_factory
- ...
- 122784 2 kBrotliDictionary
- 65536 2 jpeg_nbits_table
- 57080 2 propsVectorsTrie_index
- 53064 3 unigram_table
- 50364 2 kNetworkingPrivate
- 47152 3 device::UsbIds::vendors_
- ...
-```
-
-The actual output is tab separated and can be most easily visualized by pasting
-into a spreadsheet to ensure that the columns line up.
-
-Some fixed issues include:
-
-* webrtc regression was analyzed to find a fix - see[
- https://bugs.chromium.org/p/chromium/issues/detail?id=734631#c14](https://bugs.chromium.org/p/chromium/issues/detail?id=734631#c14)
- for the many steps, and
- [crrev.com/c/567030](https://chromium-review.googlesource.com/c/567030/)
-* We have 216 functions instances of color_xform_RGBA&lt;T&gt;
- totaling 68,184 bytes, down from 300 instances totaling 146496 bytes
- (crbug.com/677450 and crbug.com/680973). This waste was found by
- using SymbolSort's -diff option to investigate a sizes regression.
-* A regression in chrome_watcher.dll was methodically analyzed to
- understand precisely where the size was coming from - see the steps
- listed out starting at [this bug
- comment](https://bugs.chromium.org/p/chromium/issues/detail?id=717103#c24).
-
-The most egregious problems shown by these reports have been fixed but some
-remaining issues include:
-
-* Four copies of 68 byte rgb_red, rgb_green, rgb_blue, rgb_pixelsize
- arrays in chrome.dll and chrome_child.dll -
- https://github.com/libjpeg-turbo/libjpeg-turbo/issues/114
- (unfixable)
-* ~800 copies of std::piecewise_construct -
- <https://connect.microsoft.com/VisualStudio/feedback/details/1059462>
- (next version of VC++?)
-
-The large kBrotliDictionary and jpeg_nbits_table arrays can be seen, but those
-are used and are in the read-only section, so there is nothing to be done.
-
-When investigating a regression pdb_compare_globals.py can be used to find out
-what large or duplicated global variables have showed up between two builds.
-Just pass both PDBs and a summary of the changes will be printed. This uses
-ShowGlobals.exe to generate the list of interesting global variables and then
-prints a diff.
-
-When investigating a regression (or testing a fix) it can be useful to use
-pe_summarize.py to print the size of all of the sections with a PE, or to
-compare to PE files (two versions of chrome.dll, for instance). This is the
-ultimate measure of success for a change - has it made the binary smaller or
-larger, and if so where?
-
-If an unwanted global variable is being linked in then
-linker_verbose_tracking.py can be used to help answer the question of “why?”
-First you need to find out what object file defines the variable. For instance,
-ff_cos_131072 and the other ff_\* globals are defined in rdft.c. When rdft.obj
-is pulled in then Chrome gets significantly bigger. Some of this is discussed in
-comments #25 to #27 here:
-<https://bugs.chromium.org/p/chromium/issues/detail?id=624274#c27.>
-
-In order to get verbose linker output you need to modify the appropriate
-BUILD.gn file to add the /verbose linker flag. For chrome.dll I make the
-following modification:
-
-```
-diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
-index 58586fc..c15d463 100644
---- a/chrome/BUILD.gn
-+++ b/chrome/BUILD.gn
-@@ -354,6 +354,7 @@ if (is_win) {
-"/DELAYLOAD:winspool.drv",
-"/DELAYLOAD:ws2_32.dll",
-"/DELAYLOAD:wsock32.dll",
-+ "/verbose",
-\]
-if (!is_component_build) {
-```
-
-Then build chrome.dll, redirecting the verbose output to a text file:
-
-```
-> ninja -C out\release chrome.dll >verbose.txt
-```
-
-Alternately you can use the techniques discussed in the [The Chromium Chronicle:
-Preprocessing
-Source](https://developers.google.com/web/updates/2019/10/chromium-chronicle-7)
-to get the linker command and then manually re-run that command with /verbose
-appended, redirecting to a text file.
-
-Then linker_verbose_tracking.py is used to find why a particular object file is
-being pulled in, in this case mime_util.obj:
-
-```
-> python linker_verbose_tracking.py verbose.txt mime_util.obj
-```
-
-Because there are multiple object files called mime_util.obj the script will be
-searching for for all of them, as shown in the first line of output:
-
-```
-> python linker_verbose_tracking.py verbose.txt mime_util.obj
- Searching for \[u'net.lib(mime_util.obj)', u'base.lib(mime_util.obj)'\]
-```
-
-You can specify which version you want to search for by including the .lib name
-in your command-line search parameter, which is just used for sub-string
-matching:
-
-```
-> python linker_verbose_tracking.py verbose.txt base.lib(mime_util.obj)
-```
-
-Typical output looks like this:
-
-```
-> python tools\win\linker_verbose_tracking.py verbose08.txt drop_data.obj
- Database loaded - 3844 xrefs found
- Searching for common_sources.lib(drop_data.obj)
- common_sources.lib(drop_data.obj).obj pulled in for symbol Metadata::Metadata...
- common.lib(content_message_generator.obj)
-
- common.lib(content_message_generator.obj).obj pulled in for symbol ...
- Command-line obj file: url_loader.mojom.obj
-```
-
-In this case this tells us that drop_data.obj is being pulled in indirectly
-through a chain of references that starts with url_loader.mojom.obj.
-url_loader.mojom.obj is in a source_set which means that it is on the
-command-line. I then change the source_set to a static_library and redo the
-steps. If all goes well then the unwanted .obj file will eventually stop being
-pulled in and I can use pe_summarize.py to measure the savings, and ShowGlobals
-to look for the next large global variable.
-
-Sometimes this technique - of changing source_set to static_library - doesn’t
-help. In those case it can be important to figure out follow the chain of
-symbols and see if it can be broken. In one case
-([crrev.com/2559063002](https://codereview.chromium.org/2559063002))
-SkGeometry.obj (skia) was pulling in PeriodicWave.obj (Blink) because of log2f.
-Investigation showed that SkGeometry.obj referenced the math.h function log2f,
-while PeriodicWave.obj defined it as an inline function. The chain was broken by
-not defining log2f as an inline function (letting math.h do that) and a
-significant amount of code size was saved.
-
-Note that some size regressions only happen with certain build configurations.
-Ideally all testing would be done with PGO builds, but that is unwieldy, so
-release (non-component?) builds are probably the best starting point. If a size
-regression reproes on this configuration then investigate there and fix it. But,
-it is advisable to verify the fix on a full official build - with both
-is_official_build and full_wpo_on_official set to true. Failing to do this test
-can lead to a fix that doesn’t actually help on the builds that we ship to
-customers, and this can go unnoticed for months.
-
-See crrev.com/2556603002 for an example of using this technique. In this case it
-was sufficient to change a single source_set to a static_library. The size
-savings of 900 KB was verified using:
-
-```
-> python pe_summarize.py out\release\chrome.dll
-Size of out\release\chrome.dll is 42.127872 MB
- name: mem size , disk size
- .text: 33.900375 MB
- .rdata: 6.325718 MB
- .data: 0.718696 MB, 0.274944 MB
- .tls: 0.000025 MB
- CPADinfo: 0.000036 MB
- .rodata: 0.003216 MB
- .crthunk: 0.000064 MB
- .gfids: 0.001052 MB
- _RDATA: 0.000288 MB
- .rsrc: 0.175088 MB
- .reloc: 1.443124 MB
-
-Size of size_reduction\chrome.dll is 41.211392 MB
- name: mem size , disk size
- .text: 33.188599 MB
- .rdata: 6.164966 MB
- .data: 0.707848 MB, 0.264704 MB
- .tls: 0.000025 MB
- CPADinfo: 0.000036 MB
- .rodata: 0.003216 MB
- .crthunk: 0.000064 MB
- .gfids: 0.001052 MB
- _RDATA: 0.000288 MB
- .rsrc: 0.175088 MB
- .reloc: 1.409388 MB
-
-Change from out\release\chrome.dll to size_reduction\chrome.dll
- .text: -711776 bytes change
- .rdata: -160752 bytes change
- .data: -10848 bytes change
- .reloc: -33736 bytes change
-Total change: -917112 bytes
-```
diff --git a/chromium/docs/website/site/devtools/announcements/index.md b/chromium/docs/website/site/devtools/announcements/index.md
deleted file mode 100644
index f3a9ba9faac..00000000000
--- a/chromium/docs/website/site/devtools/announcements/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs:
-- - /devtools
- - Google Chrome Developer Tools
-page_name: announcements
-title: Announcements
----
-
diff --git a/chromium/docs/website/site/devtools/breakpoints-tutorial/index.md b/chromium/docs/website/site/devtools/breakpoints-tutorial/index.md
deleted file mode 100644
index fdc62ba3211..00000000000
--- a/chromium/docs/website/site/devtools/breakpoints-tutorial/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /devtools
- - Google Chrome Developer Tools
-page_name: breakpoints-tutorial
-title: breakpoints-tutorial
----
-
-This page has moved to <http://code.google.com/chrome/devtools>.
-
-You will be automatically redirected there in 10 seconds.
-
-<img alt="image"
-src="http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D299'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Url+Redirector+Modified%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D300'%3D97'dim'%5C%3D10'%3D10'%3D300'%3D97'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&sig=JNQvJfl50ag_X5BTxM2IMuBZovk"
-height=100 width=300> \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/capturing-a-timeline-trace/index.md b/chromium/docs/website/site/devtools/capturing-a-timeline-trace/index.md
deleted file mode 100644
index 5d2a56bb38f..00000000000
--- a/chromium/docs/website/site/devtools/capturing-a-timeline-trace/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-breadcrumbs:
-- - /devtools
- - Google Chrome Developer Tools
-page_name: capturing-a-timeline-trace
-title: Capturing a Timeline Trace
----
-
-### Prereqs if recording from Android:
-
-* Use an up-to-date [Chrome Dev Channel on
- android](https://play.google.com/store/apps/details?id=com.chrome.dev&hl=en).
-* [Connect to the device with remote
- debugging](https://developers.google.com/web/tools/chrome-devtools/debug/remote-debugging/remote-debugging)
-
-## Steps:
-
-1. Inspect the tab w/ devtools, open Timeline panel.
-2. The only checkbox checked should be JS Profile.
-3. Hit record.
-4. Do whatever action is slow. (reload, tapping an icon, scrolling).
-5. End the recording
-6. If that looks like it captured the right stuff, right-click and save
- it.
- * [<img alt="image"
- src="/devtools/capturing-a-timeline-trace/save%20timeline.png">](/devtools/capturing-a-timeline-trace/save%20timeline.png)
-7. Zip the file if you can. It'll compress a 40MB file to about 4MB.
-8. Now you can share it: attaching it to a bug, emailing it, or sharing
- via dropbox/etc. \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/capturing-a-timeline-trace/save timeline.png.sha1 b/chromium/docs/website/site/devtools/capturing-a-timeline-trace/save timeline.png.sha1
deleted file mode 100644
index 549de7a4079..00000000000
--- a/chromium/docs/website/site/devtools/capturing-a-timeline-trace/save timeline.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8e0c50f4d3abf6b3d6cfdba3a00b8bb90602ef05 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/feed-icon16x16.png.sha1 b/chromium/docs/website/site/devtools/feed-icon16x16.png.sha1
deleted file mode 100644
index e79b2b606a4..00000000000
--- a/chromium/docs/website/site/devtools/feed-icon16x16.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-34be4a62b34fbf651ed4be850cd10e43dafc9327 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/arrow.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/arrow.png.sha1
deleted file mode 100644
index 4f0f9d497e0..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/arrow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-de345d9460a457f455dbdb9bd61bf834879f5c48 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console.png.sha1
deleted file mode 100644
index 332772b0077..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-777e48f032802409d4b46fd6491ec6e7068b94ab \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_1.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_1.png.sha1
deleted file mode 100644
index 332772b0077..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-777e48f032802409d4b46fd6491ec6e7068b94ab \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dir.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dir.png.sha1
deleted file mode 100644
index 9e406c617f6..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dir.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-48e6d13ed00a30d92ef83128ebb7804e551d4e87 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dirxml.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dirxml.png.sha1
deleted file mode 100644
index 7397ed5824c..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dirxml.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-584f12ed6e9df951184e2ebae172b29ee9bc8b0f \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_one.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_one.png.sha1
deleted file mode 100644
index 4853a70de05..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_one.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d10fbc6b7dcedde556cf907b7309dd02a69fd088 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_zero.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_zero.png.sha1
deleted file mode 100644
index e7969bd81a9..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_dollar_zero.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-879512c841b62ee71b5e0f5c8209f7732859cb12 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_id.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_id.png.sha1
deleted file mode 100644
index 0f071c9feb3..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_id.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c4e2db037e09ed7b42ac0855559719f38578b698 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_inspect.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_inspect.png.sha1
deleted file mode 100644
index d58d9b372fb..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/console_inspect.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-59e344dff4c365985df75f1d8aa4b00773af0507 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_bottom.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_bottom.png.sha1
deleted file mode 100644
index 11c44f95b81..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_bottom.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e047b02a1118958570f6de5dceeb50b3cde02759 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_top.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_top.png.sha1
deleted file mode 100644
index ab64794dae1..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/dev_tools_window_top.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0822fd06c88271d35852dc2220e62c4f33efd1d0 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_css_syntax_highlighting.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_css_syntax_highlighting.png.sha1
deleted file mode 100644
index 5b4873da24f..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_css_syntax_highlighting.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9dd08639e8906d691ede67fc432217e7815b4804 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_event_listeners_gear.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_event_listeners_gear.png.sha1
deleted file mode 100644
index 0928f3f4ef4..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_event_listeners_gear.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d115489444abf062b610f62f658cc1d7c24d6424 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_hover.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_hover.png.sha1
deleted file mode 100644
index 256c9beeaca..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_hover.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f24fec23d8887fecb0e3dc1ee9b1974f7c69f353 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_metrics.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_metrics.png.sha1
deleted file mode 100644
index 30c51c82d17..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_metrics.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-acf5205f6bd070cf26ef2daf345ef92beaf47328 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_p.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_p.png.sha1
deleted file mode 100644
index 1ed851f09f8..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_p.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e03a1e55c45057d39c510c9cab891f6dcf80b5f7 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_panel.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_panel.png.sha1
deleted file mode 100644
index 3f895da1a49..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_panel.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-99d5a0d91b5ffbcd4274d1c1dd1075f7602f8e1b \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_properties_paner.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_properties_paner.png.sha1
deleted file mode 100644
index 742025cf3bf..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_properties_paner.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6142eed7def5ff4243996256a77f470403c7a95a \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_search.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_search.png.sha1
deleted file mode 100644
index 0a2a040c811..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_search.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6d0df4e3c5163b23727769012c52207a71136e42 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_checkboxes.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_checkboxes.png.sha1
deleted file mode 100644
index c1afacf13ec..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_checkboxes.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c7aade221ad5a09f7f3c7974a69c044b6930dcc9 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_edit.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_edit.png.sha1
deleted file mode 100644
index 760304baa48..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/elements_style_edit.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce8a6147ae495a03c4ce6fcf2954fd139a71b071 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/exclude_selected_function.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/exclude_selected_function.png.sha1
deleted file mode 100644
index eb3704471eb..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/exclude_selected_function.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-92392a10f667a2340d6e2bdbfc3690f6cec07120 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/focus_selected_function.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/focus_selected_function.png.sha1
deleted file mode 100644
index 2f7cfd578d7..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/focus_selected_function.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2ecf84a239e24527e7e924191c6a5e20a6cb3cda \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot.png.sha1
deleted file mode 100644
index b5374597eb4..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-95b27b9b12f02311947a1e852ad0b0bf3ad8f779 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_compare.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_compare.png.sha1
deleted file mode 100644
index d53412a0bd4..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_compare.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c68703382a63cfe105b2e7a7500e95d6fc2c0301 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_drill_down.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_drill_down.png.sha1
deleted file mode 100644
index abec490482b..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/heap_snapshot_drill_down.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2320c29ed794b368587efd1d6e93206f7ddd274f \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/index.md b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/index.md
deleted file mode 100644
index d7d6f282516..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /devtools
- - Google Chrome Developer Tools
-page_name: google-chrome-developer-tools-tutorial
-title: Google Chrome Developer Tools Tutorial
----
-
-This page has moved to <https://devtools.chrome.com> \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/page_menu.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/page_menu.png.sha1
deleted file mode 100644
index 7de197b3f6f..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/page_menu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cee468eda220fc78a07eadbf80a98508b9e11fd7 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiles_panel_1.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiles_panel_1.png.sha1
deleted file mode 100644
index d0d038211a7..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiles_panel_1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d7076b22521754d85da29e6badfb788253cc100a \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_cpu_1.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_cpu_1.png.sha1
deleted file mode 100644
index 724a1cd8acb..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_cpu_1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c0d9524fd337e8a22aea0da748179245b3a3b4ae \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_search.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_search.png.sha1
deleted file mode 100644
index eac59e3a0f6..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/profiling_search.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce86d4b9bedfed38167e8f1684abb602f48bfb2b \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_click_sidebar.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_click_sidebar.png.sha1
deleted file mode 100644
index fcf0f493d84..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_click_sidebar.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2e9d0368f5444cf67112a3cb8781d910a667e755 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_drag_drop.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_drag_drop.png.sha1
deleted file mode 100644
index a4886ae3b28..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_drag_drop.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eba3416655381f6eb970f7d15c84843c12f9c01b \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_enable_window.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_enable_window.png.sha1
deleted file mode 100644
index f46d7c9e7f4..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_enable_window.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7b8f8f4e5c7f0beb71eaacfb52106ef47fd59039 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_panel.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_panel.png.sha1
deleted file mode 100644
index 7d6ebecbe4d..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_panel.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-356dfe67fed93fe7d206edcff3aecbf036f00027 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_size.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_size.png.sha1
deleted file mode 100644
index 9f52fad1fef..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_size.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-edd30c0ef76cc337ad115647f734b44a513312e3 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_sort_by.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_sort_by.png.sha1
deleted file mode 100644
index f706dcbda03..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/resources_sort_by.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4a01948e90754e3c8c6588c77b5488cd5a968101 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints.png.sha1
deleted file mode 100644
index e22df77781d..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b0e94531beda874736311ebcebb2e987f89b8329 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints_2.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints_2.png.sha1
deleted file mode 100644
index 12c324619ac..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_breakpoints_2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-17df97a1e5f76bfbd4ce0b13c1040fecfe3cde99 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel.png.sha1
deleted file mode 100644
index e5611b1c28a..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-70b0490785011f240393d66215fc6eb5dfe6aced \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel_2.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel_2.png.sha1
deleted file mode 100644
index ec3863aa7a0..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_panel_2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a7a093029a06048c64cc64ed01508ed1e355c543 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_paused.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_paused.png.sha1
deleted file mode 100644
index 169d4b459c1..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/scripts_paused.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5d9791ea949063d7e8b35c0a14109cac371eef7d \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_cookie.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_cookie.png.sha1
deleted file mode 100644
index b542b8f4572..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_cookie.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-92e6bf0665134f9f02bffc47f157cc9cb38aa903 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel.png.sha1
deleted file mode 100644
index c41c7d86b9c..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-34f08b39b9460b52da40d9dea20d0536d959f9ba \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_database.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_database.png.sha1
deleted file mode 100644
index 4a7e960872a..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_database.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-42c8d49571fcee2d5ff91103a0e6d0d3ff845ac4 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_sql_query.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_sql_query.png.sha1
deleted file mode 100644
index 198912871bf..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_panel_sql_query.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-90fd60e4195595263a49a382c426d25868449644 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_sticky_note.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_sticky_note.png.sha1
deleted file mode 100644
index c7830d36710..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/storage_sticky_note.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c9318eca7e0bfe5aac751a87993fe663270170e1 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_panel.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_panel.png.sha1
deleted file mode 100644
index f2e232a4215..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_panel.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-16acbc0d78d48ddcf62c4ed5f52ef4d90acccb00 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_records.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_records.png.sha1
deleted file mode 100644
index ccb0ce2b695..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_records.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-05611570c68eb7a81654497a94c93f5c8b6b45ef \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_slider_right.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_slider_right.png.sha1
deleted file mode 100644
index 188ff01239f..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/timeline_slider_right.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-de3fd9981e97cee3ac984bf4a39bb497fc29d7b4 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/top_tool_bar_w_console.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/top_tool_bar_w_console.png.sha1
deleted file mode 100644
index 08ec020712d..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/top_tool_bar_w_console.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ca717c5cae93946b8b97c1f932daba7cdd7f4c57 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/two_profiles.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/two_profiles.png.sha1
deleted file mode 100644
index a2c5fd73270..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/two_profiles.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-903baebd66766b915814e4f0d27f40578b4cd052 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench-icon.jpg.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench-icon.jpg.sha1
deleted file mode 100644
index 1a556721cde..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench-icon.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8a9310c4fb3ab7e16f28947a129dc7864d958a75 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench.png.sha1 b/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench.png.sha1
deleted file mode 100644
index 6d495f12f52..00000000000
--- a/chromium/docs/website/site/devtools/google-chrome-developer-tools-tutorial/wrench.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fca7a974d8e6226db068ef030fa8ebb1e42cd93d \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/index.md b/chromium/docs/website/site/devtools/index.md
deleted file mode 100644
index d561adcbcf4..00000000000
--- a/chromium/docs/website/site/devtools/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs: []
-page_name: devtools
-title: Google Chrome Developer Tools
----
-
-The docs for [Google Chrome Developer
-Tools](https://developers.google.com/web/tools/chrome-devtools/) has moved.
-
-* [How to contribute to the
- DevTools](https://goo.gle/devtools-contribution-guide)
-* [Capturing a Timeline Trace](/devtools/capturing-a-timeline-trace) \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/page_menu.png.sha1 b/chromium/docs/website/site/devtools/page_menu.png.sha1
deleted file mode 100644
index 7de197b3f6f..00000000000
--- a/chromium/docs/website/site/devtools/page_menu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cee468eda220fc78a07eadbf80a98508b9e11fd7 \ No newline at end of file
diff --git a/chromium/docs/website/site/devtools/wrench-icon.jpg.sha1 b/chromium/docs/website/site/devtools/wrench-icon.jpg.sha1
deleted file mode 100644
index cc8fe345010..00000000000
--- a/chromium/docs/website/site/devtools/wrench-icon.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8938988d522c0ace623045166b47288309ab34f5 \ No newline at end of file
diff --git a/chromium/docs/website/site/embeddedsearch/index.md b/chromium/docs/website/site/embeddedsearch/index.md
deleted file mode 100644
index e1e44521a4e..00000000000
--- a/chromium/docs/website/site/embeddedsearch/index.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-breadcrumbs: []
-page_name: embeddedsearch
-title: Embedded Search API
----
-
-**This document describes a replacement for the [SearchBox API](/searchbox)
-designed for search providers included with Chromium to allow them to integrate
-more tightly with Chrome’s Omnibox and New Tab Page. This document will be kept
-up to date with the changes in trunk Chromium and is to be considered the
-authoritative reference on this new API.**
-
-**Overview**
-**The Embedded Search API provides a point of integration for a default search
-provider:** The provider is responsible for rendering the New Tab Page (NTP).
-
-**Search providers who wish to try EmbeddedSearch NewTabPage API can do so by
-modifying the TemplateURL data for their provider (in
-[src/components/search_engines/prepopulated_engines.json](https://code.google.com/p/chromium/codesearch#chromium/src/components/search_engines/prepopulated_engines.json))
-to add a "new_tab_url" field pointing to an URL that will render the NTP.
-Implementers can find an example in the chromium sources at
-[src/chrome/browser/resources/local_ntp/local_ntp.js](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/resources/local_ntp/local_ntp.js).**
-
-**Reference**
-
-**// This interface is exposed as window.chrome.embeddedSearch to the embedded search page.**
-**interface EmbeddedSearch {**
-
-**// Interface to allow the embedded search page to interact with and control the**
-**// navigator searchbox. Exposed as window.chrome.embeddedSearch.searchBox.**
-**interface SearchBox {**
-
-// Indicates whether the browser is rendering its UI in rigth-to-left mode.
-
-readonly attribute unsigned boolean rtl;
-
-// Requests the searchbox to enter (or exit) a mode where it is not visibly
-focused
-
-**// but if the user presses a key will capture it and focus itself. Conceptually**
-**// similar to an invisible focus() call.**
-**void startCapturingKeyStrokes();**
-**void stopCapturingKeyStrokes();**
-
-**// Attribute and listener to detect if the searchbox is currently capturing user key**
-**// strokes.**
-readonly attribute boolean isFocused;
-**readonly attribute boolean isKeyCaptureEnabled;**
-attribute Function onfocuschange;
-**attribute Function onkeycapturechange;**
-**}; // interface Searchbox**
-**// Interface to allow the embedded search page to interact with and control
-the**
-
-**// New Tab Page. Exposed as window.chrome.embeddedSearch.newTabPage.**
-**interface NewTabPage {**
-
-// Attribute and listeners that indicate to the new tab page whether user input
-
-// is in progress in the omnibox.
-
-readonly attribute boolean **isInputInProgress**;
-
-attribute Function **oninputstart**;
-
-attribute Function **oninputcancel**;
-
-// List of user's most visited items.
-
-readonly attribute Array&lt;MostVisitedItem&gt; **mostVisited**;
-
-attribute Function **onmostvisitedchange**;
-
-// Deletes the most visited item corresponding to |restrictedID|.
-
-function **deleteMostVisitedItem(**restrictedID**)**;
-
-// Undoes the deletion of the item for |restrictedID|.
-
-function **undoMostVisitedDeletion(**restrictedID**)**;
-
-// Undoes the deletion of all most visited items.
-
-function **undoAllMostVisitedDeletions()**;
-
-// Information necessary to render the user's theme background on the NTP.
-
-**readonly attribute ThemeBackgroundInfo themeBackgroundInfo;**
-
-attribute Function **onthemechange**;
-
-**}; // interface NewTabPage**
-**};**
-// Format for a most visited object supplied by the browser.
-
-//
-
-// Most visited items are represented by an opaque identifier, the "rid". After
-M72, Chrome
-
-// provides one special URL that the page can render as &lt;iframe&gt;s to
-display
-
-// most visited data:
-
-//
-
-// chrome-search://most-visited/title.html?rid=&lt;RID&gt;
-
-//
-
-// Prior to M72, Chrome also provided a second URL which has now been
-deprecated:
-
-//
-
-// \[deprecated\] chrome-search://most-visited/thumbnail.html?rid=&lt;RID&gt;
-
-//
-
-// The URL also accepts the following query parameters to modify the style of
-the
-
-// content inside the iframe:
-
-//
-
-// 'c' : Color of the text in the iframe.
-
-// 'f' : Font family for the text in the iframe.
-
-// 'fs' : Font size for the text in the iframe.
-
-// 'pos' : The position of the iframe in the UI.
-
-//
-
-// For example, the page could create the following iframe
-
-//
-
-// &lt;iframe
-src="chrome-search://most-visited/title.html?rid=5&c=777777&f=arial%2C%20sans-serif&fs=11&pos=0"&gt;
-
-//
-
-// to render the title for the first most visited item.
-
-MostVisitedItem {
-
-// The restricted ID (an opaque identifier) to refer to this item.
-
-readonly attribute unsigned long rid;
-
-// URL to load the favicon for the most visited item as an image.
-
-//
-
-// NOTE: the URL is particular to the current instance of the New Tab page and
-
-// cannot be reused.
-
-readonly attribute string faviconUrl;
-
-}
-
-**// Format of the ThemeBackgroundInfo object which indicates information about the user's**
-**// chosen custom UI theme necessary for correct rendering of the new tab page.**
-**ThemeBackgroundInfo {**
-
-// NOTE: The following fields are always present.
-
-// True if the default theme is selected.
-
-readonly attribute boolean **usingDefaultTheme**;
-
-// Theme background color in RGBA format.
-
-readonly attribute Array backgroundColorRgba;
-
-// Theme text color in RGBA format.
-
-readonly attribute Array **textColorRgba**;
-
-// Theme text color light in RGBA format.
-
-readonly attribute Array **textColorLightRgba**;
-
-// True if the theme has an alternate logo.
-
-readonly attribute boolean **logoAlternate**;
-
-**// NOTE: The following fields are all optional.**
-
-**// Theme background-position x component.**
-**readonly attribute String imageHorizontalAlignment;**
-**// Theme background-position y component.**
-**readonly attribute String imageVerticalAlignment;**
-**// Theme background-repeat.**
-**readonly attribute String imageTiling;**
-
-// True if the theme has an attribution logo.
-
-readonly attribute boolean **hasAttribution**;
-
-**};**
-
-Last edited: Wednesday, November 12, 2018, 10:45 PM PST \ No newline at end of file
diff --git a/chromium/docs/website/site/events/blinkon-14/index.md b/chromium/docs/website/site/events/blinkon-14/index.md
deleted file mode 100644
index a3fedd17d22..00000000000
--- a/chromium/docs/website/site/events/blinkon-14/index.md
+++ /dev/null
@@ -1,213 +0,0 @@
----
-breadcrumbs:
-- - /events
- - Chromium project related events
-page_name: blinkon-14
-title: BlinkOn 14
----
-
-**Schedule:** [bit.ly/blinkon-14-schedule](http://bit.ly/blinkon-14-schedule)
-
-**Slack:**
-<https://join.slack.com/t/chromium/shared_invite/zt-7760queu-bzAFvtstmnQxpYAgpYFIsg>
-
-[TOC]
-
-## **Introduction & Registration**
-
-Welcome to BlinkOn 14 - we're looking forward to hosting you soon!
-
-If you haven't already done so, please [register
-now](https://docs.google.com/forms/d/e/1FAIpQLSc1r9roNnTNDygOYptafgEIc1QkNyV65I0ZW5ySImfwpyVg_w/viewform?usp=sf_link).
-Registration will remain open until May 12th JST / May 11th PST, but we
-encourage you to register ASAP so that you can stay up to date with the latest
-information.
-
-## **Logistics**
-
-* Date: May 12-14, 2021 JST / May 11-13, 2021 PST
-* Time: 7:30am-11am JST / 3:30pm-7pm PST
-* Location: Virtual
-* How: Combination of live and recorded sessions, including keynotes,
- lightning talks, breakout talks, and social events
-
-We acknowledge and apologize that APAC time zones are not convenient for
-everyone, especially in the context of additional responsibilities brought on by
-COVID-19. To make this event as accessible as possible, we'll record and
-immediately publish all publicly available talks. We'll also continue to shift
-future BlinkOns to more fairly distribute the burden of meeting at challenging
-times.
-
-## **Call for Content (Breakout Talks)**
-
-The breakout talk sign up closed on May 11th JST / May 10th PST. If you signed
-up to host a breakout talk, please your add a link to your slides or
-pre-recorded talk to Column F in [this
-sheet](https://docs.google.com/spreadsheets/d/1XkgjTXOPVQd8GzJJafG2QSCUm9c-FZvIztgpygAsFvs/edit?usp=sharing).
-
-## **Call for Content (Lightning Talks)**
-
-The lightning talk sign up closed on April 13th JST / April 12th PST.
-
-## **Schedule**
-
-View the full schedule of events at
-[bit.ly/blinkon-14-schedule](http://bit.ly/blinkon-14-schedule).
-
-## Sessions
-
-All sessions will be conducted over Google Meet. To join a session, click the
-"Join by GVC" links in the schedule. You can also add the sessions that you're
-interested in attending directly to your Google Calendar by clicking the "Add to
-Calendar" links.
-
-## **Virtual Breakout Talk Best Practices - Google Meet**
-
-We understand that there's a lot to consider when presenting and attending
-virtual breakout talks. That's why we've curated the following best practices
-for Google Meet.
-
-### *Presenter Steps*
-
-Before your breakout talk, please:
-
-* Ensure your backup presenter is available
-
- [Present your slides or pre-recorded
- talk](https://support.google.com/a/users/answer/9848723?hl=en&ref_topic=9545472)
-
- On the bottom, select Present now
-
- Select "Your entire screen," "A window," or "A tab"
-
- "A tab" is best for video and animation
-
- Select "Share"
-
- You (or your backup presenter) are responsible for presenting your
- slides or pre-recorded talk
-
- If applicable, [remove
- participants](https://support.google.com/meet/answer/7501121?hl=en&ref_topic=7290350#)
-
- \[External Attendees\] ask a Google participant to remove participants
-
- \[Internal Attendees\] select "Remove from meeting" in a participant's
- thumbnail image
-
-During your breakout talk, you can moderate questions using any of the following
-features
-
-* [Chat](https://support.google.com/meet/answer/9308979?hl=en&co=GENIE.Platform=Desktop)
- - ask participants to:
- * On the top right, select "Chat"
- * Enter their question and then select "Send"
-* [Raise
- hand](https://support.google.com/meet/answer/10159750?hl=en&ref_topic=7290350)
- - ask participants to:
- * On the bottom right, select "Raise Hand"
-* [Q&A](https://support.google.com/meet/answer/10146000?hl=en&ref_topic=7290350)
- - ask participants to:
- * On the top right, select "Activities" and then "Q&A"
- * Select "Ask a question"
- * Enter their question and then click "Post"
-
-### *Technical Considerations*
-
- [Turn on
- captions](https://support.google.com/meet/answer/9300310?hl=en&ref_topic=7290350)
-
- On the bottom, select "Turn on captions"
-
- [Change the number of participants you see on your
- screen](https://support.google.com/meet/answer/9292748?hl=en)
-
- On the bottom, select "More options" and then "Change layout"
-
- [Mute or pin
- participants](https://support.google.com/meet/answer/7501121?hl=en&ref_topic=7290350#)
-
- Select "Mute" or "Pin" in a participant's thumbnail image
-
- \[Internal Attendees\] [Toggle noise cancellation
- on](https://support.google.com/meet/answer/9919960?hl=en)
-
- On the bottom, select "More options"
-
- Select "Settings" and then "Audio"
-
- If you experience quality issues, [change your send and receive resolutions
- to
- 360p](https://support.google.com/a/users/answer/9848870?hl=en&co=GENIE.Platform=Desktop)
-
- On the bottom, select "More options"
-
- Select "Settings" and then "Video"
-
- If you experience any other troubleshoot issues, visit [troubleshoot issues
- with Google Meet](https://support.google.com/meet/answer/7380413?hl=en)
-
-## Chromium on Slack
-
-We'll be using Slack to communicate throughout this event. Please join Chromium
-on Slack
-[here](https://join.slack.com/t/chromium/shared_invite/zt-7760queu-bzAFvtstmnQxpYAgpYFIsg),
-and add the following channels:
-
-* #blinkon
-* #blinkon-room-1
-* #blinkon-room-2
-* #blinkon-room-3
-* #blinkon-helpdesk
-
-## Ad-hoc Discussions
-
-If the above channels become too busy (which we hope they do!), we invite you to
-create your own channels in Slack or calls in Google Meet.
-
-### *Slack*
-
-* Select the + icon next to "Channels"
-* Select "Create a channel"
-* In the dialog box, type your channel name starting with
- "blinkon-discuss-" (e.g., blinkon-discuss-foobar), and then Select
- "Create"
-* After the channel is created, you will be able to invite
- participants to it, and it will be discoverable from the channel
- list in Slack
-
-### *Google Meet*
-
-* Go to
- [meet.google.com](https://www.google.com/url?q=http://meet.google.com&sa=D&source=editors&ust=1620403221523000&usg=AOvVaw05AjwDCdLqExMuippU1zNV)
-* Select "New meeting" and then "Start an instant meeting"
-* After you join the meeting, you will be given a URL to share with
- participants
-
-## **Code of Conduct**
-
-All attendees, speakers, sponsors, and volunteers at BlinkOn 14 are required to
-agree with the following Code of Conduct. Organizers will enforce this code
-throughout BlinkOn 14 to help ensure a safe environment for all attendees. As
-developers and community organizers, we all pledge to respect everyone who
-attends BlinkOn 14. We do not tolerate harassment of conference participants in
-any form. Sexual language and imagery is not appropriate for any conference
-venue, including talks, workshops, parties, Twitter, and other online media.
-Communication must be constructive and never resort to personal attacks,
-harassment, insults, or other unprofessional conduct. We promise to extend
-courtesy and respect to all attendees regardless of gender, gender identity,
-sexual orientation, disability, age, race, ethnicity, religion, or level of
-experience. We expect all attendees to do the same. If any member of the
-community violates this code of conduct, they may be sanctioned or expelled from
-BlinkOn 14. If you are subject to or witness unacceptable behavior, or have any
-other concerns, please contact an organizer asap.
-
-## **Organizer Contact Information**
-
-* Planning committee: (e) blinkon@chromium.org
-* Penny McLachlan: (e) pjmclachlan@google.com
-* Ashley Haman: (Slack) ashleyhaman@chromium.org (e)
- ashleyhaman@google.com
-* Shauna Mendelow: (Slack) smendelow@chromium.org (e)
- smendelow@google.com
-* Rick Byers: (Slack) rbyers@chromium.org \ No newline at end of file
diff --git a/chromium/docs/website/site/events/blinkon-15/index.md b/chromium/docs/website/site/events/blinkon-15/index.md
deleted file mode 100644
index f8268d04089..00000000000
--- a/chromium/docs/website/site/events/blinkon-15/index.md
+++ /dev/null
@@ -1,116 +0,0 @@
----
-breadcrumbs:
-- - /events
- - Chromium project related events
-page_name: blinkon-15
-title: BlinkOn 15
----
-
-**Welcome to BlinkOn 15!** We have received a lot of feedback that after 1.6
-years of working from home due to the pandemic, folks are feeling screen fatigue
-from online meetings and events. Given this, we have adjusted our event down to
-two days, Nov 16 & 17th. We are changing things up a bit and will host our event
-on hopin, you can register [**here**](https://hopin.com/events/blinkon-15). We
-will have the same format, however we will not have our Slack channels as all
-networking can be done on the platform. You can also [download the hopin mobile
-app](https://hopin.zendesk.com/hc/en-us/sections/360012637371--Mobile-App) on
-your device.
-
-## Recordings and Presentations
-
-* [YouTube Playlist](https://www.youtube.com/playlist?list=PL9ioqAuyl6UL_1DiG1tPRHbGJlGQ_gQJW)
-* [Breakout Talks](https://docs.google.com/spreadsheets/d/1x2MXoLaYENQg7WKHWspzwAuttDB38T5pc74ZHRYEKgo/edit#gid=0)
-* [Lightning Talks](https://docs.google.com/spreadsheets/d/1pNTdc5CfJ_86FhKhThr-L0E6ptxVA8VuG-Y1LDkbaME/edit#gid=0)
-
-## **Logistics**
-
-* **To enter the BlinkOn event, starting at 8a PT Nov 16th, click
- [HERE](https://app.hopin.com/events/blinkon-15/reception)**
-* **\[NEW\]** Dates: Nov 16-17, 2021 PST 9a - 12p PST
- * Programming will start @ 9am PST each day, however you are
- welcome to join up to an hour earlier to find folks in chat, 1:1
- meetings and join our networking on the platform.
-* Location: Virtual
-
-**Before & During the event**
-
-To ensure you can access the hopin platform, please check your [Networking
-Connectivity
-Settings](https://hopin.zendesk.com/hc/en-us/articles/360056528911-Network-Connectivity-Settings)
-& [Browser Compatibility
-](https://hopin.zendesk.com/hc/en-us/articles/360056078872-Browser-Compatibility-for-online-events-on-Hopin).
-Please see helpful links below.
-
-## [Hopin Resources](https://docs.google.com/document/d/1SNTmngdbfc1OuxCOaw231guH53p8ks4-YnjecB6CtGk/edit#)
-
-* [How to access an event as an
- attendee](https://assets-global.website-files.com/5fb2950be125da5aa25af58e/60b95a6bcaf8722b6b83752c_How%20to%20Access%20an%20Event%20as%20an%20Attendee%20(1).pdf)
-* [Being a speaker at a Hopin
- Event](https://assets-global.website-files.com/5fb2950be125da5aa25af58e/60b95bbb779c0790ddf0ae27_Best%20Practices%20for%20Speakers.pdf)
-* [How to use the Backstage as a
- speaker](https://hopin.zendesk.com/hc/en-us/articles/360056078472-How-to-use-the-Backstage-as-a-speaker)
-* [Screensharing on
- backstage](https://hopin.zendesk.com/hc/en-us/articles/360056078412-How-to-present-slides-on-the-Hopin-Backstage)
-* [Sharing your
- PowerPoint](https://hopin.zendesk.com/hc/en-us/articles/360056527631-Sharing-your-Powerpoint)
-* [Speaker
- instructions](https://hopin.zendesk.com/hc/en-us/articles/360056078432-Speaker-Instructions)
-* [Tips for Speaking in and Moderating
- Sessions](https://hopin.zendesk.com/hc/en-us/articles/4402442259220-Tips-for-Speaking-in-and-Moderating-Sessions)
-
-**BlinkOn Future-looking**
-
-We continue to shift our BlinkOn events to more fairly distribute the burden of
-meeting at challenging times. Next time we will prioritize the EMEA region. We
-apologize this timing is not convenient for everyone, and to make this event as
-accessible as possible, we'll publish all publicly available talks on our
-[BlinkOn YouTube channel](https://www.youtube.com/user/blinkontalks) and within
-the event under "Recordings" as soon as we are able. We hope that you understand
-our decision and will join us live, or enjoy recordings on our BlinkOn Channel
-when they become available.
-
-## **Registration**
-
-Save the **\[NEW\]** dates and [REGISTER
-NOW](https://hopin.com/events/blinkon-15) for BlinkOn 15! We'll confirm all
-registrants and communicate more information about the agenda.
-
-## Lightning Talks
-
-We have reached our limit and no longer accepting talks.
-
-For our lightning talk speakers, thank you very much for signing up for our
-BlinkOn 15 lightning talks and loading your talks into our sheet!
-
-## Breakout Talks
-
-## We have reached our limit and no longer accepting talks. Thank you to everyone who will be doing a breakout talk. Please add your public accessible link [to this sheet](https://docs.google.com/spreadsheets/d/1x2MXoLaYENQg7WKHWspzwAuttDB38T5pc74ZHRYEKgo/edit#gid=0) prior to your session.
-
-## Schedule
-
-## **<img alt="image" src="http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D475'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Include+gadget+(iframe)%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D476'%3D697'dim'%5C%3D10'%3D10'%3D476'%3D697'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&sig=fLkW1Kkvb6mVxNQcAOw6Rge97c8" height=700 width=475>**
-
-## **Code of Conduct**
-
-All attendees, speakers, sponsors, and volunteers at BlinkOn 15 are required to
-agree with the following Code of Conduct. Organizers will enforce this code
-throughout BlinkOn 15 to help ensure a safe environment for all attendees.
-
-**As developers and community organizers, we all pledge to respect everyone who
-attends BlinkOn 15. We do not tolerate harassment of conference participants in
-any form. Sexual language and imagery is not appropriate for any conference
-venue, including talks, workshops, parties, Twitter, and other online media.
-Communication must be constructive and never resort to personal attacks,
-harassment, insults, or other unprofessional conduct. We promise to extend
-courtesy and respect to all attendees regardless of gender, gender identity,
-sexual orientation, disability, age, race, ethnicity, religion, or level of
-experience. We expect all attendees to do the same. If any member of the
-community violates this code of conduct, they may be sanctioned or expelled from
-BlinkOn 15 and future BlinkOn events. If you are subject to or witness
-unacceptable behavior, or have any other concerns, please email us at
-[blinkon@chromium.org](mailto:blinkon@chromium.org) asap.**
-
-## **Organizer Information**
-
-* Planning committee:
- [blinkon@chromium.org](mailto:blinkon@chromium.org) \ No newline at end of file
diff --git a/chromium/docs/website/site/events/blinkon-16/index.md b/chromium/docs/website/site/events/blinkon-16/index.md
deleted file mode 100644
index 7e3a1729f35..00000000000
--- a/chromium/docs/website/site/events/blinkon-16/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /events
- - Chromium project related events
-page_name: blinkon-16
-title: BlinkOn 16
----
-
-**Welcome to BlinkOn 16!**
-
-
-## **Registration**
-
-[Register now](https://hopin.com/events/blinkon-16/registration) and
-join us for BlinkOn 16 in 1H 2022!
-
-Registration will remain open until the start of this event. However,
-we encourage you to register ASAP so that you can stay up to date with
-all the latest information.
-
-
-## **Logistics**
-
-
-
-* When: May 18-19, 2022 from 2pm-6pm GMT / 7am-11am PDT
-* Where: Virtually on [Hopin](https://app.hopin.com/events/blinkon-16/reception)
-* What: Combination of live and recorded sessions, including keynotes, lightning talks, breakout talks, and social events
-
-## Call for Content (Lightning & Breakout Talks)
-
-* Lightning Talks - If you'd like to host a 3-minute lightning talk, **[sign up here](https://docs.google.com/spreadsheets/d/1krAIrq6crZ7M07Uy4FLY-MAiontOecPMjeWrvCWr2m0/edit?usp=sharing) by Wednesday, April 20th**
-* Breakout Talks - If you'd like to host a 25-minute breakout talk (presentation, discussion, etc.), **[sign up here](https://docs.google.com/forms/d/e/1FAIpQLSdkWcf95qOqIBtw97BCyYi3_515ZGb-fPeTCiP72GnnNkCrEw/viewform?resourcekey=0-PT5CAkaLNOmeD8Iz4y5paw) by Wednesday, May 4th**
-
-
-## **Code of Conduct**
-
-All attendees, speakers, sponsors, and volunteers at BlinkOn 16 are
-required to agree with the following Code of Conduct. Organizers will
-enforce this code throughout BlinkOn 16 to help ensure a safe
-environment for everyone.
-
-As developers and community organizers, we all pledge to respect
-everyone who attends BlinkOn 16.
-
-We do not tolerate harassment of conference participants in any
-form. Sexual language and imagery is not appropriate for any
-conference venue, including talks, workshops, parties, Twitter, and
-other online media. Communication must be constructive and never
-resort to personal attacks, harassment, insults, or other
-unprofessional conduct.
-
-We promise to extend courtesy and respect to all attendees regardless
-of gender, gender identity, sexual orientation, disability, age, race,
-ethnicity, religion, or level of experience. We expect all attendees
-to do the same.
-
-If any member of the community violates this code of conduct, they may
-be sanctioned or expelled from BlinkOn 16 and future BlinkOn events.
-
-If you are subject to or witness unacceptable behavior, or have any
-other concerns, please email us at
-[blinkon@chromium.org](mailto:blinkon@chromium.org) ASAP.
-
-
-## **Organizer Contact Information**
-
-
-
-* _Planning committee:_ (e) [blinkon@chromium.org](mailto:blinkon@chromium.org)
-* _Ashley Haman:_ (Slack) [ashleyhaman@chromium.org](https://app.slack.com/client/T039UTRBS/D017Q43JXGT/user_profile/U017NGH61KP) (e) [ashleyhaman@google.com](mailto:ashleyhaman@google.com)
-* _Shauna Mendelow:_ (Slack) [smendelow@chromium.org](mailto:smendelow@chromium.org) (e) [smendelow@google.com](mailto:smendelow@google.com)
-* _Johnny Stenback:_ (Slack) [jstenback@chromium.org](mailto:jstenback@chromium.org) (e) [jstenback@google.com](mailto:jstenback@google.com)
-* _Lutz Vahl:_ (Slack) [vahl@chromium.org](mailto:vahl@chromium.org) (e) [vahl@google.com](mailto:vahl@google.com)
diff --git a/chromium/docs/website/site/events/blinkon-resources/index.md b/chromium/docs/website/site/events/blinkon-resources/index.md
deleted file mode 100644
index dba0689e2b3..00000000000
--- a/chromium/docs/website/site/events/blinkon-resources/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs:
-- - /events
- - Chromium project related events.
-page_name: blinkon-resources
-title: BlinkOn resources
----
-
-This page contains public resources to help plan future BlinkOns. If you're
-looking for pages about current or past BlnkOns, see [here](/events).
-
-<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3290484">Scripts to analyze recent commits</a>. These were used for BlinkOn 14 and 15.
-
-Output from those scripts for BlinkOn 15: <a href="https://docs.google.com/spreadsheets/d/1_SncWBdKI3JWzwR5TAxygdNk4i5zosHDJQVyQnU8RUA/edit#gid=2073061540">commits since May 21 2021</a>,
-<a href="https://docs.google.com/spreadsheets/d/1fyZZ-L5cMglGxX18XJoI39dwjed_KKCxFUZdOw1mutE/edit?resourcekey=0-yghH6-YNy018oly9q-RsKg#gid=1042484745">commits per year by org</a>.
diff --git a/chromium/docs/website/site/events/index.md b/chromium/docs/website/site/events/index.md
deleted file mode 100644
index 3392461fec8..00000000000
--- a/chromium/docs/website/site/events/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-breadcrumbs: []
-page_name: events
-title: Chromium project related events.
----
-
-* [BlinkOn 16](/events/blinkon-16) (May 18-19, 2022 PDT)
-
-Past events
-
-* [BlinkOn 15](/events/blinkon-15) (Nov 16-17, 2021 PST)
-* [BlinkOn 14](/events/blinkon-14) (May 12-14, 2021 JST / May 11-13,
- 2021 PST)
-
-[Resources for future BlinkOns](/events/blinkon-resources) \ No newline at end of file
diff --git a/chromium/docs/website/site/favicon.ico.sha1 b/chromium/docs/website/site/favicon.ico.sha1
deleted file mode 100644
index 4bc198644cd..00000000000
--- a/chromium/docs/website/site/favicon.ico.sha1
+++ /dev/null
@@ -1 +0,0 @@
-61ef0ad39a93d9693ed29a0a00d311ac59e5245d \ No newline at end of file
diff --git a/chromium/docs/website/site/flag-ownership/index.md b/chromium/docs/website/site/flag-ownership/index.md
deleted file mode 100644
index 24c7dcefdf3..00000000000
--- a/chromium/docs/website/site/flag-ownership/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs: []
-page_name: flag-ownership
-title: flag-ownership
----
-
-Moved to
-/developers/contributing/[flag-ownership](/developers/contributing-code/flag-ownership)! \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/deprecating-wildcards/index.md b/chromium/docs/website/site/flash-roadmap/deprecating-wildcards/index.md
deleted file mode 100644
index 10b31601058..00000000000
--- a/chromium/docs/website/site/flash-roadmap/deprecating-wildcards/index.md
+++ /dev/null
@@ -1,289 +0,0 @@
----
-breadcrumbs:
-- - /flash-roadmap
- - Flash Roadmap
-page_name: deprecating-wildcards
-title: Deprecating wildcards
----
-
-### Wildcard base and edge cases
-
-Through enterprise policies:
-
-Notes:
-
-Currently, a wildcard port is
-[serialized](https://source.chromium.org/chromium/chromium/src/+/HEAD:components/content_settings/core/common/content_settings_pattern_parser.cc;l=234-237;drc=456596a0b27623349d38e49d0e9812b24d47d5d8?originalUrl=https:%2F%2Fcs.chromium.org%2F)
-as an empty port into prefs. Changing the semantics would require migration.
-
-<table>
-<tr>
-
-<td>Pattern</td>
-
-<td>Expected</td>
-<td>behavior</td>
-
-<td>Implemented behavior</td>
-
-<td>Reason for implemented behavior</td>
-
-</tr>
-<tr>
-
-<td>http://foo.com:80/</td>
-<td>https://bar.com:443/</td>
-<td>https://bar.com:8081/</td>
-
-<td>Allowed</td>
-
-<td>Allowed</td>
-
-<td>Everything specified.</td>
-
-</tr>
-<tr>
-
-<td>http://foo.com/</td>
-<td>https://bar.com/</td>
-
-<td>Allowed</td>
-
-<td>Allowed</td>
-
-<td>Concrete scheme, concrete host, empty path, unspecified port (implicit wildcard). Matches origins with any port.</td>
-
-</tr>
-<tr>
-
-<td>http://www.foo.com:\*</td>
-<td>https://www.foo.com:\*</td>
-
-<td>Allowed</td>
-
-<td>Allowed</td>
-
-<td>Concrete scheme, concrete host, empty path, explicit wildcard port. Matches origins with any port.</td>
-
-</tr>
-<tr>
-
-<td>www.foo.com:80</td>
-<td>\*:www.foo.com:80</td>
-
-<td>Allowed</td>
-
-<td>Allowed</td>
-
-<td>Wildcard or unspecified (=implicit wildcard) schemes are permitted</td>
-
-</tr>
-<tr>
-
-<td>\*://www.foo.com</td>
-<td>www.foo.com:\*</td>
-
-<td>Allowed</td>
-
-<td>Allowed</td>
-
-<td>Unspecified/wildcarded ports and schemes are permitted.</td>
-
-</tr>
-<tr>
-
-<td>https://www.foo.com:443/\*</td>
-
-<td>Allowed</td>
-
-<td>Allowed</td>
-
-<td>Path wildcards are allowed. They are meaningless, as the pattern is always matched against an origin.</td>
-
-</tr>
-<tr>
-
-<td>https://\[\*.\]foo.com:443</td>
-<td>\[\*.\]foo.com</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed because of subdomain wildcard in host.</td>
-
-</tr>
-<tr>
-
-<td>https://\*:443</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed because of a full wildcard in host.</td>
-
-</tr>
-<tr>
-
-<td>\*</td>
-<td>\*:\*</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed</td>
-
-<td>Scheme host port path all wildcard. Disallowed because of the host wildcard. Scheme/path/port wildcard would be fine.</td>
-
-</tr>
-<tr>
-
-<td>https://\*</td>
-<td>https://\*:\*</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed</td>
-
-<td>Concrete scheme, but host port path all wildcard. Disallowed because of the host wildcard.</td>
-
-</tr>
-</table>
-
-Through extensions
-([format](https://developer.chrome.com/extensions/match_patterns), note that
-port cannot be specified, but path must be specified):
-
-Notes:
-
- The omitted port maps to the default port (80 and 443), not the wildcard.
-
- The port can be optionally specified, and can be specified as “\*”, which
- then maps to the wildcard.
-
- The only allowed path for http/https is “/\*”, and that maps to the empty
- path, not a wildcard.
-
-<table>
-<tr>
-
-<td>Pattern</td>
-
-<td>Expected</td>
-
-<td>behavior</td>
-
-<td>Implemented behavior</td>
-
-<td>Reason for implemented behavior</td>
-
-</tr>
-<tr>
-
-<td>http://foo.com/\*</td>
-<td>https://bar.com/\*</td>
-
-<td>http://foo.com:80/\*</td>
-
-<td>https://foo.com:80/\*</td>
-
-<td>Allowed</td>
-
-<td>Allowed.</td>
-
-<td>The omitted port is assumed to be the default port, and /\* maps to the empty path.</td>
-
-</tr>
-<tr>
-
-<td>https://foo.com:\*/\*</td>
-
-<td>Allowed</td>
-
-<td>Allowed.</td>
-
-<td>Concrete scheme, host, empty path, wildcard port.</td>
-
-</tr>
-<tr>
-
-<td>\*://www.foo.com/\*</td>
-
-<td>Allowed</td>
-
-<td>Allowed</td>
-
-<td>Wildcard scheme is permitted.</td>
-
-</tr>
-<tr>
-
-<td>&lt;all_urls&gt;</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed</td>
-
-<td>All-wildcard.</td>
-
-</tr>
-<tr>
-
-<td>https://\*.foo.com/\*</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed</td>
-
-<td>Subdomain wildcard.</td>
-
-</tr>
-<tr>
-
-<td><a href="javascript:void(0);">https://\*/\*</a></td>
-<td>\*://\*/\*</td>
-
-<td>Disallowed</td>
-
-<td>Disallowed</td>
-
-<td>Domain wildcard.</td>
-
-</tr>
-<tr>
-
-<td>www.foo.com/\*</td>
-<td>\*.foo.com/\*</td>
-
-<td>Invalid</td>
-
-<td>Invalid (The scheme must be present)</td>
-
-</tr>
-<tr>
-
-<td>http://foo.com/path\*</td>
-
-<td>www.foo.com/index.html</td>
-
-<td>http://www.google.com/</td>
-
-<td>http://www.google.com</td>
-
-<td>Invalid</td>
-
-<td>The only allowed path for http/https is “/\*”, and that maps to the empty path, not a wildcard.</td>
-
-</tr>
-<tr>
-
-<td>http://\*foo/bar/\*</td>
-<td>http://foo.\*.bar/baz/\*</td>
-<td>https://\[\*.\]foo.com:443/\*</td>
-
-<td>Invalid</td>
-
-<td>Invalid ('\*' in the host can only be the first character and must be followed by ‘.’, and subdomain wildcards are not supported)</td>
-
-</tr>
-</table>
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 15.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 15.png.sha1
deleted file mode 100644
index 3665c0dab21..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 15.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-107db83decdf6e9a375317d668d5bab6b039b1b3 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 27.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 27.png.sha1
deleted file mode 100644
index 15ea05b9efe..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Apr 27.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-40580fc2721b8a4708bcaeeb6b5c00498610ef0f \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Aug 10.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Aug 10.png.sha1
deleted file mode 100644
index 1256f8ffb73..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update Aug 10.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-34fbec39470b7dff1de9fece9e5b32254b3fce76 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 6.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 6.png.sha1
deleted file mode 100644
index da52fe4815c..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 6.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9ace518e2428a2c8ac7c000cbf3a21ed0b5691b5 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 9.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 9.png.sha1
deleted file mode 100644
index fc1475855f9..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update July 9.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9d18d68401015ebe12f3f97c846f1e53087d8a6a \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update May 24.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update May 24.png.sha1
deleted file mode 100644
index 57379f7cab6..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Daily Actives - Update May 24.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a74f4bac0dbea89d905f03eb92fe1e7aa0d0a770 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Daily Actives - Oct 13, 2017.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Daily Actives - Oct 13, 2017.png.sha1
deleted file mode 100644
index a0a3a281805..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Daily Actives - Oct 13, 2017.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7f7946a0faf051ec18ef1b31714522998bd09d1d \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact - Usage.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact - Usage.png.sha1
deleted file mode 100644
index 48e7e5ca540..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact - Usage.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-95c790ccae34eadcc57bbe9c3b03f56225df1c87 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact.png.sha1
deleted file mode 100644
index b47c368d3e3..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impact.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c4915d5ca3f09f9a03fd8ccf9f7ae2f921844e2a \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impressions - Oct 13, 2017.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impressions - Oct 13, 2017.png.sha1
deleted file mode 100644
index 97369c2bf96..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Impressions - Oct 13, 2017.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-79842f1e033bc266f361388d30633bb175b6ab42 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Usage Trend - Jan 25th, 2017.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Usage Trend - Jan 25th, 2017.png.sha1
deleted file mode 100644
index a1d7705998b..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Usage Trend - Jan 25th, 2017.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-08340d45c0695ba747c1420030652cffd6e0f239 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 15.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 15.png.sha1
deleted file mode 100644
index 03686864765..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 15.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ca1bbe467f2f4492214b92ea38bf72c7a651f73c \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 27.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 27.png.sha1
deleted file mode 100644
index 627d37779f3..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Apr 27.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6928b1f6fbfc0c7c3a111507e7a60c14fec3ed75 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Aug 10.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Aug 10.png.sha1
deleted file mode 100644
index 834bca6482a..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update Aug 10.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-188c7ada5809e856c77f692499832a4c1527812c \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 6.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 6.png.sha1
deleted file mode 100644
index 836d7aafae9..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 6.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e3a4de44db607e032fe43429c66f9c3865ab857c \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 9.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 9.png.sha1
deleted file mode 100644
index 7e4ef356a21..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update July 9.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a96bf07fd6174437dcf71c409bf61c3aa5be69b6 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update May 24.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update May 24.png.sha1
deleted file mode 100644
index dbdf8180be2..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/Flash Volume - Update May 24.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9fd1dd245c49c8f80bb9242b1f8e832efc6ee880 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after (Updated).png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after (Updated).png.sha1
deleted file mode 100644
index a6b19dd49a1..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after (Updated).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b1d1c1b2fc96802b04fbc28b766a7dba44837052 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after.jpg.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after.jpg.sha1
deleted file mode 100644
index 020b28f88d7..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 after.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a425b51c60b24b2b71caf5cbcd960726b13bc074 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 before.png.sha1 b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 before.png.sha1
deleted file mode 100644
index ffc27fe8705..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/PPS Tiny - 0x0 before.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-00d9e8b2bef2a7fa5bf9787772544bf67bb20127 \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/index.md b/chromium/docs/website/site/flash-roadmap/flash-usage-trends/index.md
deleted file mode 100644
index 37e943965d5..00000000000
--- a/chromium/docs/website/site/flash-roadmap/flash-usage-trends/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-breadcrumbs:
-- - /flash-roadmap
- - Flash Roadmap
-page_name: flash-usage-trends
-title: Flash Usage Trends
----
-
-[TOC]
-
-## Volume
-
-## [<img alt="image"
-src="/flash-roadmap/flash-usage-trends/Flash%20Volume%20-%20Update%20July%209.png">](/flash-roadmap/flash-usage-trends/Flash%20Volume%20-%20Update%20July%209.png)
-
-Absolute volume of Flash Impressions (on Chrome Stable for Windows and MacOS)
-
-## Percent of Daily Actives
-
-Percent of users who have encountered at least one page w/ Flash Player content
-in a day (on Chrome Stable for Windows and MacOS)
-
-[<img alt="image"
-src="/flash-roadmap/flash-usage-trends/Daily%20Actives%20-%20Update%20July%209.png">](/flash-roadmap/flash-usage-trends/Daily%20Actives%20-%20Update%20July%209.png)
-
-## External Sites
-
-* [w3techs.com](https://w3techs.com/) - Flash Trends
- [Yearly](https://w3techs.com/technologies/history_overview/client_side_language/all/y)
- |
- [Quarterly](https://w3techs.com/technologies/history_overview/client_side_language/all/q)
- |
- [Monthly](https://w3techs.com/technologies/history_overview/client_side_language/all) \ No newline at end of file
diff --git a/chromium/docs/website/site/flash-roadmap/index.md b/chromium/docs/website/site/flash-roadmap/index.md
deleted file mode 100644
index f065bf530d7..00000000000
--- a/chromium/docs/website/site/flash-roadmap/index.md
+++ /dev/null
@@ -1,607 +0,0 @@
----
-breadcrumbs: []
-page_name: flash-roadmap
-title: Flash Roadmap
----
-
-[TOC]
-
-## Upcoming Changes
-
-### Flash Support Removed from Chromium (Target: Chrome 88+ - Jan 2021)
-
-#### Summary
-
-Flash support/ capability will be complete removed from Chromium. It will no
-longer be possible to enable Flash Player with Enterprise policy in Chrome 88+.
-
-#### **Rationale**
-
-Align with Adobe's [announced
-plan](https://blog.adobe.com/en/publish/2017/07/25/adobe-flash-update.html#gs.mglfvc)
-to end support.
-
-#### Announcements/ Artifacts
-
-* Tracking [issue](http://crbug.com/1064647) for the removal of Flash
- Player support.
-
-#### **Notes for Administrators**
-
-* [How to audit existing Flash
- usage](https://cloud.google.com/blog/products/chrome-enterprise/preparing-your-enterprise-for-flash-deprecation)
-* HARMAN offers a number of commercial [support
- options](https://services.harman.com/partners/adobe) for Flash
- Player beyond 2020. These can be used in complement with Chrome's
- [Legacy Browser Support
- (LBS)](https://support.google.com/chrome/a/answer/9270076?hl=en),
- allowing for both to remain secure and up to date.
-
-### Support for AllowOutdatedPlugins disabled (Target: All Chrome versions - Sept 2021)
-
-#### Summary
-
-It will no longer be possible to enable Flash Player, via Enterprise policy
-([AllowOutdatedPlugins](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=AllowOutdatedPlugins)),
-in versions of Chrome before Chrome 88 on Windows, Mac, and Linux. ChromeOS will
-continue to allow the use of the
-[AllowOutdatedPlugins](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=AllowOutdatedPlugins)
-policy.
-
-#### Rationale
-
-We strongly encourage Enterprises to migrate away from Flash Player or explore
-solutions that leverage LBS to remain on a modern, updated, and secure version
-of Chrome.
-
-#### Announcements/ Artifacts
-
-* [1064657](https://bugs.chromium.org/p/chromium/issues/detail?id=1064657)
- : Update Plugin Meta Data to block Flash Player
-
-#### Notes for Administrators
-
-* [How to audit existing Flash
- usage](https://cloud.google.com/blog/products/chrome-enterprise/preparing-your-enterprise-for-flash-deprecation)
-* HARMAN offers a number of commercial [support
- options](https://services.harman.com/partners/adobe) for Flash
- Player beyond 2020. These can be used in complement with Chrome's
- [Legacy Browser Support
- (LBS)](https://support.google.com/chrome/a/answer/9270076?hl=en),
- allowing for both to remain secure and up to date.
-
----
-
-## Shipped Changes
-
-### Plugin Power Savings Mode (Shipped: Chrome 42 - Sept 2015)
-
-#### Summary
-
-Chrome pauses non-essential(1) Flash Content, by replacing the plugin content
-with a static image preview and a play button overlayed. Users can re-enable
-this content by clicking play.
-
-(1) - Non-essential content being smaller than 300x400 pixels or smaller than
-5x5 pixels.
-
-#### Rationale
-
-Limit Flash Playbacks to visible main body content (e.g. video, games, etc...)
-and still permit streaming audio services to function.
-
-#### Announcements/ Artifacts
-
-* [Design
- Doc](https://docs.google.com/document/d/1r4xFSsR4gtjBf1gOP4zHGWIFBV7WWZMgCiAHeepoHVw/edit#%5C)
-
-### Plugin Power Savings Mode - Tiny (Shipped: Chrome 53 - Sept 2016)
-
-#### Summary
-
-A further restriction to Plugin Power Savings Mode that removes the ability to
-run 5x5 or smaller content, from a different origin.
-
-#### Rationale
-
-Much of this content (5x5 below) was used for viewability detection (i.e. to see
-if an ad was on that page), requiring Chrome to spin up a relatively expensive
-(in terms of performance) Flash process in order for the site to infer
-viewability.
-
-With the introduction of Intersection Observer in Chrome 51, which added
-platform support for this use case, there was no longer a need to continue
-granting this exception.
-
-We left an exception for "same origin" 5x5 Flash content, to give smaller sites
-(e.g. using things like clipboard access) time to migrate.
-
-#### Announcement/ Artifacts
-
-* [Intent to
- Implement](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/QL2K4yFVg_U)
-
-### YouTube Embed Re-Writer (Shipped: Chrome 54 - Oct 2016)
-
-#### Summary
-
-Chrome to automatically use the HTML5 content of a YouTube embed when the Flash
-one is used.
-
-#### Rationale
-
-This will allow the long tail of websites that never updated to the HTML5 embeds
-to no longer require Flash for Chrome users, thus reducing overall usage of
-Flash in Chrome.
-
-#### Announcement/ Artifacts
-
-* [Intent to
- Implement](https://groups.google.com/a/chromium.org/forum/#!msg/chromium-dev/BW8g1iB0jLs/OeWeRCTuBAAJ)
-* [Design
- Doc](https://docs.google.com/document/d/1xHBaX2WhfZVmfeWyLNOX76l9cPiXrQNXqRrUMtlvfks/edit)
-
-### De-couple Flash Player (Shipped: Chrome 54 - Oct 2016)
-
-#### Summary
-
-Chrome to exclusively use the component updater to distribute Flash Player, and
-separating it from Chrome's default distribution bundle.
-
-#### Rationale
-
-Enable Chrome to rapidly distribute Flash Player updates, without re-building
-the core product, making it easier to match Adobe's monthly release cadence.
-
-This feature was fundamentally technology gated, requiring development of
-in-line on-demand Flash component installs, differential component updates, and
-building out special serving infrastructure.
-
-#### Announcement/ Artifacts
-
-N/A
-
-### HTML5 By Default (Target: Chrome 55+ - Dec 2016)
-
-#### Summary
-
-Navigator.Plugins() and Navigator.MimeTypes() will only report the presence of
-Flash Player if the user has indicated that the domain should execute Flash. If
-a site offers an HTML5 experience, this change will make that the primary
-experience. We will continue to ship Flash Player with Chrome, and if a site
-truly requires Flash, a prompt will appear at the top of the page when the user
-first visits that site, giving them the option of allowing it to run for that
-site (see the
-[proposal](https://docs.google.com/presentation/d/106_KLNJfwb9L-1hVVa4i29aw1YXUy9qFX-Ye4kvJj-4/edit#slide=id.p)
-for the mock-ups).
-
-#### Announcements/ Artifacts
-
-* [Proposal](https://docs.google.com/presentation/d/106_KLNJfwb9L-1hVVa4i29aw1YXUy9qFX-Ye4kvJj-4/edit#slide=id.p)
-* [Design
- Doc](https://docs.google.com/a/chromium.org/document/d/1QD3HQdkBgJea_92f5rars06Bd_SJz5IXjuNHhBuWCcg/edit?usp=sharing)
-* [Intent to
- Implement](https://groups.google.com/a/chromium.org/forum/#!searchin/chromium-dev/HTML5$20by$20default/chromium-dev/0wWoRRhTA_E/__E3jf40OAAJ)
-* [Site Engagement
- Scoring](/developers/design-documents/site-engagement)
-* [Updated Intent to Implement (using Site Engagement
- scoring)](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/ad7Posd6cdI/5EEOduWiCwAJ)
-
-#### Status
-
-HTML5 by default has shipped and we are currently in the process of ramping up
-the SEI threshold, per the schedule below.
-
-Currently 87.5% of population have an SEI threshold score of 4 and 12.5% has a
-threshold score of 8 (we do this to measure the impact of the threshold change).
-By the end of the month we will progress on to the next phase on the ramp and
-everyone will be at least at 8.
-
-#### Shipping Schedule
-
-HTML5 by Default was initially rolled out to 1% of Chrome 55 Stable users
-(December), followed by a full deployment (i.e. to 100% of users) in Chrome 56
-Stable (February).
-
-Flash prompting will only be enabled for sites whose [Site Engagement
-Index](/developers/design-documents/site-engagement) (SEI) is below a certain
-threshold. For Chrome 55, starting in January 2017 prompts will only appear for
-sites where the user’s SEI is less than 1. That threshold will increase to 100
-through October 2017, when all Flash sites will require an initial prompt. As a
-reminder, users will only be prompted once per site.
-
-Here’s a summary of thresholds and % of users:
-
-<table>
-<tr>
-
-<td>Site Engagement Threshold</td>
-
-<td>User % Enabled</td>
-
-</tr>
-<tr>
-
-<td>January 2017</td>
-
-<td>1 (Stable 55)</td>
-
-<td>1% (Stable 55), 50% (Beta 56)</td>
-
-</tr>
-<tr>
-
-<td>February 2017</td>
-
-<td>2</td>
-
-<td>100% (Stable 56)</td>
-
-</tr>
-<tr>
-
-<td>March 2017</td>
-
-<td>4</td>
-
-<td>100%</td>
-
-</tr>
-<tr>
-
-<td>April 2017</td>
-
-<td>8</td>
-
-<td>100%</td>
-
-</tr>
-<tr>
-
-<td>May 2017</td>
-
-<td>16</td>
-
-<td>100%</td>
-
-</tr>
-<tr>
-
-<td>June 2017</td>
-
-<td>32</td>
-
-<td>100%</td>
-
-</tr>
-<tr>
-
-<td>July 2017</td>
-
-<td>32</td>
-
-<td>100%</td>
-
-</tr>
-<tr>
-
-<td>August 2017</td>
-
-<td>32</td>
-
-<td>100%</td>
-
-</tr>
-<tr>
-
-<td>September 2017</td>
-
-<td>64</td>
-
-<td>100%</td>
-
-</tr>
-<tr>
-
-<td>October 2017</td>
-
-<td>100</td>
-
-<td>100%</td>
-
-</tr>
-</table>
-
-#### Developer Recommendations
-
-Ultimately we recommend migrating towards HTML5 content, however for sites that
-still require Flash Player in the interim we recommend presenting users with a
-link/ image to "Enable" Flash Player that points to
-"<https://get.adobe.com/flashplayer/>." When users click on that link Chrome
-will present the necessary UI to enable Flash Player for the site. It will look
-something like
-[this](https://docs.google.com/presentation/d/106_KLNJfwb9L-1hVVa4i29aw1YXUy9qFX-Ye4kvJj-4/edit#slide=id.g1270f83468_0_12).
-
-> `<a href="https://get.adobe.com/flashplayer">Enable Flash</a>`
-
-> `<a href="https://get.adobe.com/flashplayer"><img border="0" alt="Enable
-> Flash" src="enable_flash.gif"/></a>`
-
-### PPS Tiny - Remove Un-sized (0x0 or hidden) content Exceptions (Target: Chrome 59 - June 2017)
-
-#### Summary
-
-We are removing the exception for 0x0 (unsized/hidden) content from Plugin Power
-Savings Mode.
-
-#### Rationale
-
-We originally intended on blocking this type of content in the PPS Tiny launch,
-however due to a technical oversight we unintentionally left the exception in.
-This change brings the implementation in line with what we originally
-communicated and intended.
-
-#### Announcements/ Artifacts
-
-N/A
-
-### PPS Tiny - No Same Origin Exceptions (Target: Chrome 60 - Aug 2017)
-
-#### Summary
-
-We are removing the final exception for Plugin Power Savings Mode, which
-permitted small (5x5) content, hosted on the same origin, to run.
-
-#### Rationale
-
-The exception was meant to be a temporary relief for smaller developers, for
-features that are well now very supported by the web platform (e.g. clipboard
-access, audio streams, etc...).
-
-#### Announcements/ Artifacts
-
-* [Intent to
- Implement](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/Elg7Vhpeb38/zQCvXQ_vAAAJ)
-
-### Remove "Prefer HTML over Flash" from chrome://flags (Target: Chrome 61 - Sept 2017)
-
-#### Summary
-
-Remove the unsupported experimental flag "Prefer HTML over Flash."
-
-#### Rationale
-
-We typically remove feature flags once a feature has launched. However, for this
-case, given the impact of the change, we left the flag in for an extended period
-to assist developers with debugging the change in behavior. This change will
-also help remove the number of similar (but somewhat distinct) control points
-for Flash Player and reduce the overall complexity of configuration, leading up
-to the settings simplification in the following release.
-
-#### Announcements/ Artifacts
-
-* Tracking
- [issue](https://bugs.chromium.org/p/chromium/issues/detail?id=709550)
-
-### Unify Flash Settings (Target: Chrome 62 - Oct 2017)
-
-#### Summary
-
-Transition the current Flash settings to a single On/Off toggle. If On, Chrome
-run consistently with HTML5 by Default (i.e. prompting users to enable Flash
-Player on a per site basis), if Off Flash Player will be blocked. In effect,
-this change is removing a UI option to always allow Flash Player to run without
-prompting. Users will still be able to manually add wildcard exceptions, which
-afford similar capabilities as always allow (albeit in a way that's less obvious
-to configure).
-
-Existing users who have set "Always Allow" and Ask (HTML5 by Default) will get
-migrated to On. Chrome will not automatically create any wildcard exceptions in
-the transition.
-
-#### Rationale
-
-The intent is to simplify the user choice down to a single option, enable Flash
-Player (default == enabled), that is easier for users to understand. Power users
-will be able to add exceptions (including those with wildcards) explicitly Allow
-Flash to run.
-
-#### Announcements/ Artifacts
-
-* TBD
-
-### Non-Persisted HTML5 by Default (Target: Chrome 69 - September 2018)
-
-#### Summary
-
-Sites using Flash will require explicit permission to run, every time the user
-restarts the browser.
-
-#### Rationale
-
-Require affirmative user choice to run Flash Player content, without that choice
-persisting across multiple sessions.
-
-#### Announcements/ Artifacts
-
-TBD
-
-### Flash Disabled by Default (Target: Chrome 76+ - July 2019)
-
-#### Summary
-
-Flash will be disabled by default, but can be enabled in Settings at which point
-explicit permission is still required for each site when the browser is
-restarted.
-**Rationale**
-
-Require affirmative user choice to run Flash Player.
-
-#### Announcements/ Artifacts
-
-* [Flash Deprecation Infobar
- Warning](https://docs.google.com/document/d/1AmICiNrG2Cp2vCuu80Sqqz1EDKlKGgn2m2PUGzdZ6i0/edit)
- - [918428](https://crbug.com/918428)
-
-### Additional warning on Flash Player activation prompt (Target: Chrome 83 - May 2020)
-
-#### Summary
-
-When users go to active Flash Player for an origin/ session we will show an
-additional line of text "Flash Player will no longer be supported after December
-2020." in the activation prompt. The dialog will also include a (?) icon that
-links to blog post, giving additional background and context.
-
-#### Rationale
-
-This change will make the deprecation timing more prominent, particularly in
-settings where the Infobar on startup warning might not appear (i.e., policy
-configurations that enable Flash Player).
-
-#### Announcements/ Artifacts
-
-* TBD
-
-### Remove Support for Hostname Wildcards for PluginsAllowedForUrls (Target: Chrome 85 - Aug 2020)
-
-#### Summary
-
-Remove the ability to define Flash Player content settings that use wildcards in
-the hostname (e.g., “https://\*” or “https://\[\*.\]mysite.foo”).
-
-#### Rationale
-
-The change requires that administrators to audit their Flash usage and
-explicitly add urls that they want to automatically enable Flash Player support
-for.
-
-#### Announcements/ Artifacts
-
-TBD
-
-### Remove the Ability for Extensions to Inject Flash Content Settings (Target: Chrome 86 - Oct 2020)
-
-#### Summary
-
-Remove the ability for extensions to inject Flash Player content settings.
-
-#### Rationale
-
-Ensure that all non-policy enabled Flash content requires per session
-activation, which coupled with the warning in the activation prompt should help
-to increase awareness of the impending change in support.
-
-#### Announcements/ Artifacts
-
-TBD
-
-### Flash Player blocked as "out of date" (Target: All Chrome versions - Jan 2021)
-
-#### Summary
-
-Flash Player will be marked as out of date and will be blocked from loading.
-
-#### Rationale
-
-Align with Adobe's [announced
-plan](https://blog.adobe.com/en/publish/2017/07/25/adobe-flash-update.html#gs.mglfvc)
-to end support.
-
-#### Announcements/ Artifacts
-
-TBD
-
-### ---
-
-## Relevant Links
-
-### Adobe
-
-* [Update for Enterprise Customers using Adobe Flash
- Player](https://theblog.adobe.com/update-for-enterprise-adobe-flash-player/)
- (Apr 2020)
-* [Adobe Flash Player EOL General Information
- Page](https://www.adobe.com/products/flashplayer/end-of-life.html)
- (Apr 2020)
-* [Adobe Flash Player EOL Enterprise Information
- Page](https://www.adobe.com/products/flashplayer/enterprise-end-of-life.html)
- (Apr 2020)
-* [Adobe Flash
- Update](https://blog.adobe.com/en/publish/2017/07/25/adobe-flash-update.html#gs.mglfvc)
- (July 2017)
-* [Flash, HTML5 and Open Web
- Standards](https://blogs.adobe.com/conversations/2015/11/flash-html5-and-open-web-standards.html)
- (November 2015)
-
-### Apple
-
-* [Adobe Announces Flash Distribution and Updates to
- End](https://webkit.org/blog/7839/adobe-announces-flash-distribution-and-updates-to-end/)
- (July 2017)
-* [Next Steps for Legacy
- Plug-ins](https://webkit.org/blog/6589/next-steps-for-legacy-plug-ins/)
- (June 2016)
-
-### Facebook
-
-* [Flash End of Life Approaching - Options for
- Developers](https://www.facebook.com/fbgaminghome/blog/flash-end-of-life-approaching-options-for-developers)
- (June 2020)
-* [Important Changes to Gameroom and Web Games on
- Facebook](https://www.theverge.com/2020/9/28/21459607/original-farmville-facebook-shut-down-flash-zynga)
- (July 2020)
-* [Migrating Games from Flash to Open Web Standards on
- Facebook](https://developers.facebook.com/blog/post/2017/07/25/Games-Migration-to-Open-Web-Standards/)
- (July 2017)
-
-### Google
-
-* [Saying goodbye to Flash in
- Chrome](https://www.blog.google/products/chrome/saying-goodbye-flash-chrome/)
- (July 2017)
-* [So long, and thanks for all the
- Flash](https://blog.chromium.org/2017/07/so-long-and-thanks-for-all-flash.html)
- (July 2017)
-* [Admin Essentials: Preparing your enterprise for Flash
- deprecation](https://cloud.google.com/blog/products/chrome-enterprise/preparing-your-enterprise-for-flash-deprecation)
- (May 2020)
-
-### Microsoft
-
-* [Update on Adobe Flash Player End of
- Support](https://blogs.windows.com/msedgedev/2020/09/04/update-adobe-flash-end-support/)
- (September 4, 2020)
-* [Flash on Windows
- Timeline](https://blogs.windows.com/msedgedev/2017/07/25/flash-on-windows-timeline/)
- (July 2017)
-* [Putting Users in Control of
- Flash](https://blogs.windows.com/msedgedev/2016/04/07/putting-users-in-control-of-flash/)
- (April 2016)
-* [Extending User Control of Flash with
- Click-to-Run](https://blogs.windows.com/msedgedev/2016/12/14/edge-flash-click-run/)
- (December 2016)
-
-### Mozilla
-
-* [Firefox Roadmap for Flash End of
- Life](https://blog.mozilla.org/futurereleases/2017/07/25/firefox-roadmap-for-flash-end-of-life/)
- (July 2017)
-* [Mozilla Flash
- Roadmap](https://developer.mozilla.org/en-US/docs/Plugins/Roadmap)
-* [NPAPI Plugins in
- Firefox](https://blog.mozilla.org/futurereleases/2015/10/08/npapi-plugins-in-firefox/)
- (October 2015)
-* [Reducing Adobe Flash Usage in
- Firefox](https://blog.mozilla.org/futurereleases/2016/07/20/reducing-adobe-flash-usage-in-firefox/)
- (July 2016)
-
-**NCSC**
-
-* [Enterprise patching in a post-Flash
- world](https://www.ncsc.gov.uk/blog-post/enterprise-patching-in-a-post-flash-world)
- (Sept 2020)
-
-**Unity**
-
-* [Unity and creating content in a Post-Flash
- World](https://blogs.unity3d.com/?p=52557) (July 2017) \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/chromium-bug-labels/index.md b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/chromium-bug-labels/index.md
deleted file mode 100644
index b8c6b2d4882..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/chromium-bug-labels/index.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/bug-reporting-guidelines
- - Bug Life Cycle and Reporting Guidelines
-page_name: chromium-bug-labels
-title: Chromium Bug Labels
----
-
-<table>
-<tr>
-Label Allowed values Description </tr>
-<tr>
-<td>Type-*value*</td>
-
-* <td>`Bug`</td>
-* <td>`Bug-Regression`</td>
-* <td>`Bug-Security`</td>
-* <td>`Compat`</td>
-* <td>`Feature`</td>
-* <td>`Launch`</td>
-
-<td>The issue type. An issue can only have one type.</td>
-</tr>
-<tr>
-
-<td>Pri-*value*</td>
-
-* <td>`0 to 3`</td>
-
-<td>The priority. An issue can only have one priority value. `0` is most urgent; `3` is least urgent. </td>
-</tr>
-<tr>
-<td>OS-*value*</td>
-
-* <td>`All`</td>
-* <td>`Chrome`</td>
-* <td>`Linux`</td>
-* <td>`Mac`</td>
-* <td>`Windows`</td>
-
-<td>The operating system(s) on which the bug occurs. </td>
-</tr>
-<tr>
-<td>M-*value*</td>
-
-* <td>`27, 28, 29`</td>
-
-<td>A release milestone before which we want to resolve the issue. An issue can only be assigned to one milestone† . `Mstone-X` is 'no milestone' (doesn't apply or not blocking any milestone).</td>
-<td>† Except for security bugs. For those, the additional milestones denote branches that the bug should be merged to once fixed. See the <a href="/developers/severity-guidelines">severity guidelines</a>.</td>
-</tr>
-<tr>
-<td>Cr-*value*</td>
-
-* <td>Blink</td>
-* <td>Internals</td>
-* <td>Platform</td>
-* <td>UI-Shell</td>
-* <td>UI-Browser == Browser</td>
-* <td>Cr-OS-Hardware</td>
-* <td>Cr-OS-Kernel</td>
-* <td>Cr-OS-Systems</td>
-
-<td>The product category to which an issue belongs. A bug can belong to multiple categories. </td>
-<td> <table></td>
-<td> <tr></td>
-<td> <td> Cr-Blink</td></td>
-<td> <td> HTML, CSS, Javascript, and HTML5 features</td></td>
-<td> </tr></td>
-<td> <tr></td>
-<td> <td> Cr-Internals</td></td>
-<td> <td> Ugly guts, networking, IPC, storage backend, installer, etc</td></td>
-<td> </tr></td>
-<td> <tr></td>
-<td> <td> Cr-Platform</td></td>
-<td> <td> Developer Platform and Tools (Ext, AppsV2, NaCl, DevTools)</td></td>
-<td> </tr></td>
-<td> <tr></td>
-<td> <td> Cr-UI-Shell</td></td>
-<td> <td> Chrome OS Shell & Window Manager</td></td>
-<td> </tr></td>
-<td> <tr></td>
-<td> <td> Cr-UI-Browser</td></td>
-<td> <td> Browser related features (e.g. bookmarks, omnibox, etc...)</td></td>
-<td> </tr></td>
-<td> <tr></td>
-<td> <td> Cr-OS-Hardware</td></td>
-<td> <td> Chrome OS hardware related issues</td></td>
-<td> </tr></td>
-<td><tr></td>
-<td><td> Cr-OS-Kernel</td></td>
-<td><td> Chrome OS kernel level issues</td></td>
-<td></tr></td>
-<td><tr></td>
-<td><td> Cr-OS-Systems</td></td>
-<td><td> Chrome OS system level issues </td></td>
-<td></tr></td>
-<td> </table></td>
-</tr>
-<tr>
-<td>Restrict-View-EditIssue</td>
-<td>-</td>
-<td>Used for security bugs to make a bug visible only to project members and the reporter. </td>
-</tr>
-</table>
-
-Some other labels include:
-
-* Needs-Reduction: this bug requires a reduced test case. See
- <http://www.chromium.org/for-testers/backend-testing/website-compatibility/reduced-test-cases>.
-* Cr-UI-Internationalization: Internationalization issues (font
- selection and fallback, right-to-left display issues, IME, etc.)
-* Cr-UI-Localization: Translation issues
-* Type-Bug-Regression: Features that worked in prior releases and are
- now broken. These should be Pri-1.
-
-Component and Labels are created in the system via
-<https://www.chromium.org/issue-tracking/requesting-a-component-or-label >
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/crash-with-gdb b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/crash-with-gdb
deleted file mode 100644
index 4b3f4713002..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/crash-with-gdb
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-if [[ $# -ne 1 ]]; then
- echo "Usage:" `basename $0` "pid"
- echo "Kill pid, provoking a crash dump."
- exit 0
-fi
-
-echo 'p (int)printf(NULL)' | gdb --pid=$1
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/index.md b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/index.md
deleted file mode 100644
index 6b9131aab90..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/hanging-tabs/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/bug-reporting-guidelines
- - Bug Life Cycle and Reporting Guidelines
-page_name: hanging-tabs
-title: Reporting a Hang Bug
----
-
-To investigate problems when Chrome is frozen/locked-up/unresponsive, we
-generally need a dump of the affected processes.
-
-Exactly how to do this depends on your operating system:
-
-## Windows
-
-1. [Download Process Explorer from
- Microsoft](http://technet.microsoft.com/en-us/sysinternals/bb896653).
- (This tool is like a more advanced version of the Task Manager; we
- will use it to create minidumps).
-2. Extract and launch Process Explorer
-3. Right click on the hung Chrome process, and choose "Create Dump"
- --&gt; "Create Minidump..." (If you aren't sure which one is
- misbehaving, repeat this step for each Chrome process)
-4. Attach the minidump file(s) to your bug report
-
-Please note that minidump files can contain some information about your
-computer, including the path to where Chrome is installed.
-
-## Mac
-
-1. Verify you've turned crash reporting on. Go to the page
- chrome://settings/advanced using the address bar. Then verify that
- **Automatically send usage statistics and crash reports to Google**
- is checked.
-2. Open the Task Manager under the **Wrench menu &gt; Tools &gt; Task
- Manager**.
-3. If the columns at the top of the Task Manager window do not include
- "Process ID", then right-click on the table header and check the
- "Process ID" box.
-4. Note the process ID of the hung tab.
-5. Kill the process in a way that causes it to print a crash dump:
-
-* Open a terminal window and `kill -ABRT *<ProcessID>*` where
- `*<ProcessID>*` is the one you noted above. Copy and paste the crash
- ID dumped to the console into your bug:
- * You can additionally find the crash dump in
- ~/Library/Application Support/Google/Chrome/Crash Reports/
-
-## Linux
-
-1. Depending on your sandboxing configuration and Chrome version, you
- may need to pass "--allow-sandbox-debugging" when starting Chrome
- (see [this bug](http://crbug.com/169369)).
-2. Verify you've turned crash reporting on. Go to the page
- chrome://settings/advanced using the address bar. Then verify that
- **Automatically send usage statistics and crash reports to Google**
- is checked.
-3. Open the Task Manager under the **Wrench menu &gt; Tools &gt; Task
- Manager**.
-4. If the columns at the top of the Task Manager window do not include
- "Process ID", then right-click on the window and check the "Process
- ID" box.
-5. Note the process ID of the hung tab.
-6. Kill the process in a way that causes it to print a crash dump:
-
-* Open a terminal window and `kill -SEGV *<ProcessID>*` where
- `*<ProcessID>*` is the one you noted above. Copy and paste the crash
- ID dumped to the console into your bug:
- * You can find the crash dump in your `~/.xsession-errors` file
- (assuming you didn't launch Chromium from a terminal yourself) \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/index.md b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/index.md
deleted file mode 100644
index edc0ae96581..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/index.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: bug-reporting-guidelines
-title: Bug Life Cycle and Reporting Guidelines
----
-
-[TOC]
-
-## Important links
-
-### Chromium (the web browser)
-
-* Report bugs at <https://crbug.com/wizard>
-* Specifically:
- * [Bug Reporting Guidelines for the Mac & Linux
- builds](/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds)
- (with links to known issues pages)
- * [Instructions for reporting
- crashes](/for-testers/bug-reporting-guidelines/reporting-crash-bug).
-* View existing bugs at
- <https://bugs.chromium.org/p/chromium/issues/list>
-
-### Chromium OS (the operating system)
-
-* Report bugs at
- <https://code.google.com/p/chromium/issues/entry?template=Defect%20on%20Chrome%20OS>
-* View existing bugs at [Chromium OS
- issues](https://code.google.com/p/chromium/issues/list?can=2&q=os%3Dchrome)
-
-You need a [Google Account](https://www.google.com/accounts/NewAccount)
-associated with your email address in order to use the bug system.
-
-## Bug reporting guidelines
-
-* If you're a web developer, see [How to file a good
- bug](https://developers.google.com/web/feedback/file-a-bug)
-* Make sure the bug is verified with the latest Chromium (or Chrome
- canary) build.
-* If it's one of the following bug types, please provide some further
- information:
- * **Web site compatibility problem:** Please provide a URL to
- replicate the issue.
- * **Hanging tab: See [Reporting hanging tab
- bugs](/for-testers/bug-reporting-guidelines/hanging-tabs).**
- * **Crash: See [Reporting crash
- bugs](/for-testers/bug-reporting-guidelines/reporting-crash-bug).**
-* Provide a high-level problem description.
-* Mention detailed steps to replicate the issue.
-* Include the expected behavior.
-* Verify the bug in other browsers and provide the information.
-* Include screenshots, if they might help.
-* If a bug can be [reduced to a simplified
- test](/system/errors/NodeNotFound), then create a simplified test
- and attach it to the bug.
-* Additional [Bug Reporting Guidlines for the Mac & Linux
- builds](/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds).
-* Additional Guidelines for [Reporting Security
- Bugs](/Home/chromium-security/reporting-security-bugs).
-
-## Release block guidelines
-
-* [Release Block Guidelines](/issue-tracking/release-block-guidelines)
-
-## Triage guidelines
-
-* [Triage Best
- Practices](/for-testers/bug-reporting-guidelines/triage-best-practices)
-
-## Labels
-
-Labels are used to help the engineering team categorize and prioritize the bug
-reports that are coming in. Each report can (and should) have multiple labels.
-
-For details on labels used by the Chromium project, see [Chromium Bug
-Labels](/for-testers/bug-reporting-guidelines/chromium-bug-labels).
-
-## Status
-
-### Open bugs
-
-<table>
-<tr>
-Status value Description </tr>
-<tr>
-<td>Unconfirmed</td>
-<td>The default for public bugs. Waiting for someone to validate, reproduce, or otherwise confirm that this is a bug. </td>
-</tr>
-<tr>
-<td>Untriaged</td>
-<td>A confirmed bug that has not been reviewed for priority or assignment. This is the default for project members' new bugs. </td>
-</tr>
-<tr>
-<td>Available</td>
-<td>Confirmed and triaged, but not assigned. Feel free to take these bugs! </td>
-</tr>
-<tr>
-<td>Assigned</td>
-<td>In someone's work queue. </td>
-</tr>
-<tr>
-<td>Started</td>
-<td>Actively being worked on. </td>
-</tr>
-</table>
-
-### Closed bugs
-
-<table>
-<tr>
-Status value Description </tr>
-<tr>
-<td>Fixed</td>
-<td>Fixed.</td>
-</tr>
-<tr>
-<td>Verified</td>
-<td>The fix has been verified by test or by the original reporter.</td>
-</tr>
-<tr>
-<td>Duplicate</td>
-
-<td>This issue has been reported in another bug, or shares the same root cause as another bug. When Duplicate is selected, a field will appear for the ID of the other bug --- be sure to fill this in.</td>
-
-<td>Mark the bug with less information/discussion in it as the Duplicate.</td>
-
-</tr>
-<tr>
-<td>WontFix</td>
-<td>Covers all the reasons we chose to close the bug without taking action (can't repro, working as intended, obsolete).</td>
-</tr>
-<tr>
-<td>ExternalDependency</td>
-<td>Bugs that turn out to be in another project's code and that we've filed with that other project. Useful for tracking known issues that manifest themselves in our product, but that need to be fixed elsewhere (such as WebKit and V8 issues).</td>
-</tr>
-<tr>
-<td>FixUnreleased</td>
-<td>A special state for security hotfixes to mark bugs that are fixed, but not yet delivered to users. Bugs with this status will be visible only to project members and the original reporter.</td>
-</tr>
-<tr>
-<td>Invalid</td>
-<td>Illegible, spam, etc.</td>
-</tr>
-</table>
-
-## Bug life cycle
-
-* When a bug is first logged, it is given **Unconfirmed** status.
-* The status is changed from unconfirmed to Untriaged once it has been
- verified as a Chromium bug.
-* Once a bug has been picked up by a developer, it is marked as
- Assigned.
-* A status of **Started** means a fix is being worked on.
-* A status of **Fixed** means that the bug has been fixed, and
- **Verified** means that the fix has been tested and confirmed.
- Please note that it will take some time for the "fix" to make it
- into the various channels (canary, beta, release) - pay attention to
- the milestone attached to the bug, and compare it to
- chrome://version.
-
-## Deciding where to submit your bug
-
-Usually, Chromium-related bugs should be filed under one of the following
-projects:
-
-* [chromium](http://code.google.com/p/chromium/issues/entry)
-* [blink](http://crbug.com/) and add component "Blink"
-
-## Helping with bug triage
-
-Read <http://www.chromium.org/getting-involved/bug-triage> if you're interested
-in helping with bug triage.
-
-Infrastructure and build tools
-
-If you find an issue with our infrastructure or build tools, please file the
-ticket using the Build Infrastructure template:
-
-* <https://code.google.com/p/chromium/issues/entry?template=Build%20Infrastructure> \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/reporting-crash-bug/index.md b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/reporting-crash-bug/index.md
deleted file mode 100644
index 514108c2d01..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/reporting-crash-bug/index.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/bug-reporting-guidelines
- - Bug Life Cycle and Reporting Guidelines
-page_name: reporting-crash-bug
-title: Reporting a Crash Bug
----
-
-If you are planning to report a crash bug, please make sure you include enough
-information for debugging purpose.
-
-* Make sure you have the latest Chrome version (on Windows go to
- Chrome Options-&gt;About Google Chrome)
-* Make sure you have [crash reporting
- enabled](https://support.google.com/chrome/answer/96817).
-* Try to get exact reproducible steps for the crash, if possible.
-* Try to also provide more debugging info by either: .
- * **Reporting the crash directly**: If possible, and you are using
- Google Chrome, enable crash reporting in Google Chrome's
- settings: go to chrome://chrome/settings, click "Show advanced
- settings..." and in the Privacy section select select
- "Automatically send usage statistics and crash reports to
- Google", then see the instructions below for getting a crash ID.
- (Note that if this setting was not already enabled, you'll need
- to reproduce the crash first.)
- * **Collecting crash data**: Otherwise, see the instructions for
- collecting crash data.
-
-### Getting a Crash ID
-
-If crash reporting is enabled, you should provide the crash ID in your bug
-report, or your client ID if the crash ID isn't available. **Go to
-`chrome://crashes` and see if your crash is listed**. If so, copy and paste the
-crash ID into your bug report.
-
-Otherwise, copy and paste the line containing "client_id" in your `Local State`
-file from your profile into the bug report. The location of the profile depends
-on your platform:
-
-* #### Windows:
- * #### Vista and higher: `%LOCALAPPDATA%\Google\Chrome\User Data`
- * #### `XP: %USERPROFILE%\Local Settings\Application
- Data\Google\Chrome\User Data` on Windows XP
-* #### Linux: `~/.config/google-chrome`
-* #### Mac: `~/Library/Application Support/Google/Chrome`
-
-### Collecting Crash Data
-
-If crash reporting is not enabled, or no crash ID is available, you can collect
-raw crash data.
-
-#### Windows
-
-* Windows can be configured to log crash reports to
- %localappdata%\\crashdumps, by using *regedit* to create the key
- (registry folder)
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\Windows Error
- Reporting\\LocalDumps". For details see this [Microsoft
- article](https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx).
- You can see the recorded crash dumps by pasting
- %localappdata%\\crashdumps into Windows Explorer or the search area
- in the start menu. Look for a chrome.exe.123.dmp file from the time
- of your crash, and if there is one, attach it to your bug.
-* You can capture a minidump file using windbg.exe:
- * If you do not already have `windbg.exe`, download it from
- Microsoft
- [website](http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx)
- * Run WinDbg with this command - `windbg.exe -o <full path to
- chrome.exe>`
- * Keep hitting F5 until you hit an exception (Access violation or
- some other error) or until Chrome window comes up
- * If Chrome Window opens successfully, try to reproduce the crash.
- When crash happens you should see an exception reported in
- WinDbg (Access violation or some other error)
- * After the exception has been reported save the dump file by
- typing this exact command in WinDbg command: `.dump
- C:\chrome.dmp` (do not forget '`.`' at the beginning)
- * Once the dump file has been successfully saved, compress this
- dump file, upload it somewhere and post the link to the file
- along with the bug description.
-
-#### Linux
-
-* If you are using Chromium follow
- [these](https://wiki.ubuntu.com/Chromium/Debugging) instructions on
- how to get additional details about the Chromium crash on Ubuntu.
-
-#### Mac
-
-* System crash reports are logged to `~/Library/Logs/CrashReporter`,
- so check there for a crash file from the time of your crash, and if
- there is one, attach it to your bug.
-
-**Android**
-
-* System crash reports are logged to `/data/data/$PACKAGE/cache/Crash\
- Reports/`, where `$PACKAGE` depends on which app (chrome, content
- test shell, etc..), as defined
- [here](https://cs.chromium.org/chromium/src/third_party/catapult/devil/devil/android/constants/chrome.py?l=11).
-* Sometimes the crash will also be printed to the "logcat" and/or as a
- tombstone file. More info
- [here](/developers/how-tos/debugging-on-android#TOC-Symbolizing-Crashstacks-Tombstones)
- on how to obtain and symbolize it.
-* Alternatively, use "`adb shell bugreport`" to collect system-wide
- information. \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/triage-best-practices/index.md b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/triage-best-practices/index.md
deleted file mode 100644
index eec704a08f1..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/triage-best-practices/index.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/bug-reporting-guidelines
- - Bug Life Cycle and Reporting Guidelines
-page_name: triage-best-practices
-title: Triage Best Practices
----
-
-## [TOC]
-
-## **What is Triage?**
-
-* A process (often taking the form of a regular meeting) for *making
- decisions about the need, priority, timing, and assignment of work
- requests*.
-
-* ### Triage boils down to Three Questions:
-
- 1. Do we want to do this work?
- * **Pro Tip:** Be definitive. If the work isn't something that
- we intend on doing (or isn't something we're able to confirm
- is a real issue), then close the issue out and provide
- honest and ***courteous*** feedback. It's always best to
- keep your backlog reflective of the work that you intend on
- doing.
- 2. How important is it to us (Priority) and when do we want it done
- (Schedule/Milestone)?
- * **Note:** In the standard Chromium.org workflow Priority and
- Schedule are very closely related concepts (please see the
- background on priority below).
- 3. Who should own it?
- * **Pro Tip:** People can only do a finite amount of work,
- adding more work to someone's pile won't get it done faster.
- * **Pro Tip:** It's perfectly fine to mark something as
- Status:Available (i.e. no Owner), if the work doesn't need
- to be scheduled immediately, but please make sure that the
- work has a specific categorization label (e.g.
- Component=UI&gt;Browser&gt;Foo), so that it's clear which
- team(s) are accountable for it's priority.
-
-## How to Think about Priorities
-
-* P0 - **Emergency**
- * Requires immediate resolution
-* P1 - **Needed** for current milestone
- * Teams should use best discretion here, but this bucket should
- generally represent high user impact issues and quality issues
- (e.g. regressions, crashers, security issues, feature
- completeness, etc...).
- * The test: "Would someone notice (in a bad way) if this issue
- were present in the release?"
-* P2 - **Wanted** for current milestone
- * Low/ No user impact, can safely be punted from a release.
- * Most in-development work should have this priority.
-* P3 - **Not time sensitive**
- * Can be completed at any time, no release targeting required.
-
-## **Recommended Processing Order for Triage Practice**
-
-* Start by checking your team's load balance.
- * Using your standard triage query, pull up the
- "[Grid](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=&colspec=ID+Pri+M+Stars+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&groupby=&sort=&x=m&y=releaseblock&cells=tiles&mode=grid)"
- view. Set ***Rows*** to be "Owner," ***Columns*** to be "None,"
- and ***Cells*** to be "Counts"
- * Get a rough sense for everyone's issue distribution.
- * **Pro Tip:** Keep that page opened in the background, as a
- reference for when you are assigning issues.
-* Assign unassigned (-has:owner) Release Blockers + P0 & P1 issues.
- * These are important to start with first, since these issues are
- likely time sensitive (notice Blockers, which actively hold back
- releases, are prioritized first).
- * **Pro Tip:** It's OK to change the Blocking status or Priority,
- but please be clear about why (e.g. "this isn't a release block
- stable because ....")
-* Untriaged (status=untriaged and status=unconfirmed) issues next,
- ordering by age (i.e. try and process the requests that have been in
- the queue longest)
- * The point here is really to answer the 3 questions (i.e. "Is
- this something we want to do?," "How important is it?," "Who
- should do it?")
- * Please ensure that all P1+ issues are assigned an owner.
- * **Pro Tip:** Ideally you'll budget enough time to get through
- everything, but if your list is too large to process in a single
- triage session, ==prioritize looking at Type-Bug-Regression==
- (i.e. they are the most likely to be P1+ issues).
-* Once you've triaged the most important issues, sanity check your
- team's load balance (to make sure that you haven't overloaded
- anyone).
-* Review / Assign unassigned P2 & P3 issue, as well as any open
- Available issues.
-
-## More Pro Tips
-
-* Set aside a regular time (and place) to Triage.
-* Give yourself enough time to handle your incoming stream of issues
- and make progress on (or at least review) your backlog.
-* Setup a rotation w/ your team members, to share the load. Though
- they are a little more burdensome to administer, they tend to be the
- most sustainable triage efforts, help prevent people from burning
- out, and ensure that the process doesn't break when people take a
- vacation.
-* Wade into and clean-up your backlog. New team members will often
- start from this pool of issues, please be kind and make sure that
- they start by working on valid/ relevant issues.
-* Make sure that things are properly categorized, especially as
- Available issues, so that they are discoverable.
-
-* **Spend most of your time on issues opened in the last year.**
- * **Most issues have a half-life.** Issue reports are a static
- reflection of what was... not necessarily what is. That is...
- due to a variety of factors (e.g. code churn, environment
- changes, etc...) as issues age it becomes increasingly likely
- that they will become less reflective of the current state of
- the product.
- * **People will re-file (and often duplicate) important issues.**
- Many of the old issues that linger often have not been properly
- duped, because the person who fixed the issue wasn't aware of
- the other issue's existence. \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/blockthirdpartycookies.png.sha1 b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/blockthirdpartycookies.png.sha1
deleted file mode 100644
index 320406633aa..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/blockthirdpartycookies.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ccb2cca772ee142669afd59c97b9debeb849a3b1 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/index.md b/chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/index.md
deleted file mode 100644
index 63d5958002c..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/bug-reporting-guidelines
- - Bug Life Cycle and Reporting Guidelines
-page_name: uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document
-title: 'Uncaught SecurityError: Failed to read the ''localStorage'' property from
- ''Window'': Access is denied for this document.'
----
-
-This exception is thrown when the "Block third-party cookies and site data"
-checkbox is set in Content Settings.
-
-To find the setting, open Chrome settings, type "third" in the search box, click
-the Content Settings button, and view the fourth item under Cookies.
-
-[<img alt="image"
-src="/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/blockthirdpartycookies.png"
-width=600>](/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document/blockthirdpartycookies.png)
-
-If this setting is checked, third-party scripts cookies are disallowed and
-access to localStorage may result in thrown SecurityError exceptions. \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds/index.md b/chromium/docs/website/site/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds/index.md
deleted file mode 100644
index bd69c85f33d..00000000000
--- a/chromium/docs/website/site/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds/index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: bug-reporting-guidlines-for-the-mac-linux-builds
-title: Bug Reporting Guidlines for the Mac & Linux builds
----
-
-**IMPORTANT:**
-
-In order for the bug reports we receive to be most effective, we need to be able
-to go through them in a timely manner. That means keeping the number manageable.
-The primary enemy of this effort is duplicate bugs which waste everyone's time
-and clog up the system. Unlike some other public bug systems, we do not consider
-the number of duplicates as an indicator of priority, demand, or seriousness. As
-a result, there is little to be gained from filing a duplicate bug besides
-slowing down our ability to produce a great piece of software.
-
-Before you file any bug, search the bug tracker to see if your problem is a
-known issues ([Mac
-query](http://code.google.com/p/chromium/issues/list?can=2&q=os:mac&sort=-stars),
-[Linux
-query](http://code.google.com/p/chromium/issues/list?can=2&q=os:linux&sort=-stars)).
-You can safely assume that huge holes in functionality (such as fullscreen not
-working) are well known and there's no need to file a bug. If you find the bug
-is already there, feel free to star it so you can find it later and indicate to
-us another person is interested in its resolution. If and only if you can't find
-the bug in the database should you consider filing a new one.
-
-If you have any questions about whether or not you should file your bug, feel
-free to visit #chromium on irc.freenode.net and ask the community. We'll be more
-than willing to help you out.
-
-**Steps to take before filing a bug:**
-
-1. Try searching for the bug on the [Chromium bug tracker](http://crbug.com),
-someone may already have reported it.
-
-2. Try to formulate a reduction, i.e. the minimal set of steps to reproduce the
-problem.
-
-**Example of a good bug report:**
-
-Chrome Version : 2.180.0.0 URLs : http://www.someurl.com Other browsers tested:
-Safari 4: OK Firefox 3.x: OK IE 7: OK IE 8: OK
-
-Chromium : FAIL What steps will reproduce the problem? 1. Launch Chrome 2. Load
-http://www.someurl.com 3. Click on the picture of the elephant in the top right
-corner.
-
-4. All buttons in the Chrome UI turn pink. What is the expected result?
-
-Color of Chrome UI shouldn't change. What happens instead?
-
-My UI Turns Pink. Please provide any additional information below. Attach a
-screenshot if possible.
-
-System Configuration: Mac OS X 10.5.6 on a PowerMac with 4 gigs of RAM; I use
-the Swedish-language UI.
-
-Console Output:
-
-5/22/09 2:13:02 PM \[0x0-0x12c92c8\].com.google.Chrome\[67080\] LEAK: 27
-CachedResource
-
-5/22/09 2:13:02 PM \[0x0-0x12c92c8\].com.google.Chrome\[67080\] LEAK: 287
-WebCoreNode
-
-5/22/09 2:13:02 PM \[0x0-0x12c92c8\].com.google.Chrome\[67080\] Leak 1 JS
-wrappers.
-
-5/22/09 2:13:03 PM \[0x0-0x12c92c8\].com.google.Chrome\[67080\]
-\[67080:19971:1315528366186335:ERROR:
-/Users/Shared/foo/chrome/src/chrome/src/chrome/plugin/plugin_thread.cc(166)\]
-Not implemented reached in bool
-
-Screenshot attached.
-
-**Walkthrough - What's good about the above bug report:**
-
-1. It contains a clear detailed description of the steps needed to reproduce the
-bug from scratch, including URLs where appropriate. Be as specific as you can.
-Saying to "click the link in the page" when there are fifty links is unhelpful.
-When filing bugs about non-English sites, don't assume the developer understands
-the language of the webpage.
-
-2. Results in other browsers are noted.
-
-3. It explains what you saw happen and what you where expecting to see.
-
-4. Console output and system configuration are included, Console output in
-particular can be extremely helpful diagnosing an issue! (on OS X you can see
-the console output by opening /Applications/Utilities/Console.app).
-
-5. A screenshot is attached showing the bug.
-
-**Other Important stuff:**
-
-On OSX, If you've opted into stats reporting Crash dumps will be saved in
-`~/Library/Application Support/Chromium/Crash Reports/` please attach the files
-in this directory when filing reports for crashing bugs they can really help us
-in tracking down issues.
-
-I can't write code, how can I help?:
-
-One of the best ways people can contribute to an open source project is not by
-writing code but by helping manage bugs in the bug database. There are many
-activities that help immensely:
-
-* Finding and marking duplicate bugs that have already been filed.
-* Providing reduced test-cases (HTML, JavaScript, etc) for web site
- bugs on complex pages
-* Confirming or denying that a bug has been fixed. (Though if a bug
- has previously been reported and not yet marked fixed, saying "STILL
- NOT FIXED" doesn't add anything except some irritation for the poor
- people CCed on the bug. If it had been fixed, the fixer probably
- would have marked it as such, no? Don't add useless comments.)
-* Confirming or denying that a bug is valid or has enough information
- to be reproducible.
-
-You don't need a PhD in computer science to do any of these, and they make a
-huge difference to both engineering and QAs ability to effectively triage bugs. \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/command-line-flags/index.md b/chromium/docs/website/site/for-testers/command-line-flags/index.md
deleted file mode 100644
index 106d6747557..00000000000
--- a/chromium/docs/website/site/for-testers/command-line-flags/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: command-line-flags
-title: How to specify command line flags
----
-
-This page has been merged into the more complete:
-
-<https://www.chromium.org/developers/how-tos/run-chromium-with-flags>
diff --git a/chromium/docs/website/site/for-testers/enable-logging/configure providers.png.sha1 b/chromium/docs/website/site/for-testers/enable-logging/configure providers.png.sha1
deleted file mode 100644
index 6cd81164a81..00000000000
--- a/chromium/docs/website/site/for-testers/enable-logging/configure providers.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0c7a2c4161ce29fb5ee15d98938819c79e9d21ba \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/enable-logging/index.md b/chromium/docs/website/site/for-testers/enable-logging/index.md
deleted file mode 100644
index a335d26bd0b..00000000000
--- a/chromium/docs/website/site/for-testers/enable-logging/index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: enable-logging
-title: How to enable logging
----
-
-To enable logging, launch Chrome with these command line flags:
-
-`--enable-logging=stderr --v=1 # Output will be printed to standard error (eg.
-printed in the console) and to the debugger`
-
---enable-logging=stderr --v=1 &gt; log.txt 2&gt;&1 # Capture stderr and stdout
-to a log file
-
-* This will turn on full logging support (INFO, WARNING, ERROR, and
- VERBOSE0 for &gt;=M9).
-* --enable-logging=stderr enables both logging to stderr and using
- OutputDebugStringA on Windows. Note that the sandbox prevents either
- form of this logging from renderers being visible unless you attach
- a debugger to the renderer to see the OutputDebugStringA output.
-* See newer instructions for Linux [at
- docs/linux/debugging.md](https://chromium.googlesource.com/chromium/src/+/lkgr/docs/linux/debugging.md#logging)
-* If you are debugging renderer startup on Windows, we recommend you
- enable histogram logging for additional debugging by using the extra
- command line --vmodule=metrics=2
-* Verbose logging shows up with their own VERBOSEn label.
- * `--vmodule` enables verbose logging on a per module basis.
- Details in
- [base/logging.h](https://chromium.googlesource.com/chromium/src/+/HEAD/base/logging.h).
- Add --v=-3 at the end to suppress all other logging.
-* Any page load (even the new tab page) will print messages tagged
- with VERBOSE1; for example:
-* \[28304:28320:265508881314:VERBOSE1:chrome/browser/renderer_host/resource_dispatcher_host.cc(1098)\]
- OnResponseStarted: chrome://newtab/
-* The output will be saved to the file `chrome_debug.log` in [Chrome's
- user data directory](/user-experience/user-data-directory)
- * Release builds: The parent directory of Default/.
- * Debug builds: The binary build folder (e.g. out\\Debug).
- * Chrome OS
- * Open file:///var/log/messages
- * `/var/log/chrome` at the login screen.
- * Files within the `log` subdirectory under the logged-in
- user's encrypted home directory, which resides under
- `/home/chronos`.
-* Logs are overwritten each time you restart chrome.
-* To enable logging from the render processes on Windows you also need
- the `--no-sandbox `command line flag.
-
-* To see WTF_LOG, use `--blink-platform-log-channels`
-
-Note that:
-
-* If the environment variable CHROME_LOG_FILE is set, Chrome will
- write its debug log to its specified location. Example: Setting
- CHROME_LOG_FILE to "chrome_debug.log" will cause the log file to be
- written to the Chrome process's current working directory while
- setting it to "D:\\chrome_debug.log" will write the log to the root
- of your computer's D: drive.
-* To override the log file path in a test harness that runs Chrome,
- use this pattern:
-
- ```none
- #include "chrome/common/env_vars.h"
- ...
- // Set the log file path in the environment for the test browser.
- std::wstring log_file_path = ...;
- SetEnvironmentVariable(env_vars::kLogFileName, log_file_path.c_str());
- ```
-
-### How do I specify the command line flags?
-
-See [command line flags](/developers/how-tos/run-chromium-with-flags) page.
-
-### What personal information does the log file contain?
-
-Before attaching your chrome_debug.log to a bug report, be aware that it can
-contain some personal information, such as URLs opened during that session of
-chrome.
-
-Since the debug log is a human-readable text file, you can open it up with a
-text editor (notepad, vim, etc..) and review the information it contains, and
-erase anything you don't want the bug investigators to see.
-
-The boilerplate values enclosed by brackets on each line are in the format:
-
-\[process_id:thread_id:ticks_in_microseconds:log_level:file_name(line_number)\]
-
-### Sawbuck
-
-Alternatively to the above, you can use the Sawbuck utility (for Windows) to
-view, filter and search the logs in realtime, in a handy-dandy GUI.
-
-[<img alt="image"
-src="https://sawbuck.googlecode.com/files/Sawbuck_screenshot.png">](https://sawbuck.googlecode.com/files/Sawbuck_screenshot.png)
-
-First download and install the latest version of
-[Sawbuck](https://github.com/google/sawbuck/releases/latest), launch it, then
-select "Configure Providers.." form the "Log" menu.
-
-This will bring up a dialog that looks something like this:
-
-[<img alt="image" src="/for-testers/enable-logging/configure%20providers.png">
-](/for-testers/enable-logging/configure%20providers.png)
-
-Set the log level for Chrome, Chrome Frame, and/or the Setup program to whatever
-suits you, and click "OK". You can revisit this dialog at any time to increase
-or decrease the log verbosity.
-
-Now select "Capture" from the "Log" menu, and you should start seeing Chrome's
-log messages.
-
-Note that Sawbuck has a feature that allows you to view the call trace for each
-log message, which can come in handy when you're trying to home in on a
-particular problem.
-
-**Note for 64-bit Chrome:** Reporting of callstacks, source file, and line info
-does not currently work when originating from 64-bit Chrome, and log messages
-will be garbage by default (<https://crbug.com/456884>). Change the "Enable
-Mask" for the Chrome and Chrome Setup providers so that "Text Only" is the only
-option selected to have non-garbaled log messages. \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/FAFT (1).jpg.sha1 b/chromium/docs/website/site/for-testers/faft/FAFT (1).jpg.sha1
deleted file mode 100644
index 93b81c90be7..00000000000
--- a/chromium/docs/website/site/for-testers/faft/FAFT (1).jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c8fe6865fc340387bb5d76ba05730857ae22754c \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/FAFT Hardware Setup Layout.png.sha1 b/chromium/docs/website/site/for-testers/faft/FAFT Hardware Setup Layout.png.sha1
deleted file mode 100644
index 1a21c32ab11..00000000000
--- a/chromium/docs/website/site/for-testers/faft/FAFT Hardware Setup Layout.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7bebdfb2570336d670a297d441a3c782db5d9989 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/Servo2_with_labels.jpg.sha1 b/chromium/docs/website/site/for-testers/faft/Servo2_with_labels.jpg.sha1
deleted file mode 100644
index 148a4dc20e8..00000000000
--- a/chromium/docs/website/site/for-testers/faft/Servo2_with_labels.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-31e36fbdaa628641c4e773437043276db09ea271 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/ServoV4-typeC-micro.png.sha1 b/chromium/docs/website/site/for-testers/faft/ServoV4-typeC-micro.png.sha1
deleted file mode 100644
index 156bc3975a9..00000000000
--- a/chromium/docs/website/site/for-testers/faft/ServoV4-typeC-micro.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-529654b20e9a4e8b4999779b7e78e8bf7594b121 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/ServoV4.png.sha1 b/chromium/docs/website/site/for-testers/faft/ServoV4.png.sha1
deleted file mode 100644
index f24f9151c61..00000000000
--- a/chromium/docs/website/site/for-testers/faft/ServoV4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-32a9a4c5fc8b2aa68ebe585aebcaf0c0cbc4cd3b \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/index.md b/chromium/docs/website/site/for-testers/faft/index.md
deleted file mode 100644
index b0d2a095e8d..00000000000
--- a/chromium/docs/website/site/for-testers/faft/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: faft
-title: FAFT
----
-
-Migrated to
-<https://chromium.googlesource.com/chromiumos/third_party/autotest/+/HEAD/docs/faft-how-to-run-doc.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/pd_typeC.png.sha1 b/chromium/docs/website/site/for-testers/faft/pd_typeC.png.sha1
deleted file mode 100644
index c3ba8be6cf5..00000000000
--- a/chromium/docs/website/site/for-testers/faft/pd_typeC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8ab9bc4abc920d0a8ae6efd7f102b587b88a3a6a \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/rc_typeA.png.sha1 b/chromium/docs/website/site/for-testers/faft/rc_typeA.png.sha1
deleted file mode 100644
index eef52135aea..00000000000
--- a/chromium/docs/website/site/for-testers/faft/rc_typeA.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3766b9b67c01e22a1247fa5dfc07a9b62bc89eab \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/rc_typec.png.sha1 b/chromium/docs/website/site/for-testers/faft/rc_typec.png.sha1
deleted file mode 100644
index 1f9be924baf..00000000000
--- a/chromium/docs/website/site/for-testers/faft/rc_typec.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5582da41271b2cc6e9acfd4756be6bfba7bd3008 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/rc_typec_official.png.sha1 b/chromium/docs/website/site/for-testers/faft/rc_typec_official.png.sha1
deleted file mode 100644
index 12c54110477..00000000000
--- a/chromium/docs/website/site/for-testers/faft/rc_typec_official.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d8a60ae80b668a9d85f63cff2a40abf82e0e3d6a \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/faft/servo_v4.png.sha1 b/chromium/docs/website/site/for-testers/faft/servo_v4.png.sha1
deleted file mode 100644
index 9598a70b787..00000000000
--- a/chromium/docs/website/site/for-testers/faft/servo_v4.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-388f4dd483aaee4419de0609b64d45f9fd853720 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing/index.md b/chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing/index.md
deleted file mode 100644
index 14eb8788617..00000000000
--- a/chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/frontend-testing
- - Frontend testing
-- - /for-testers/frontend-testing/constrained-windows
- - Constrained Windows (test plan)
-page_name: constrained-windows--basic-testing
-title: 'Constrained Windows: Basic Testing'
----
-
-## Testcases
-
-<table>
-<tr>
-Test case Steps Expected Result </tr>
-<tr>
-<td>Simple test: constrained window</td>
-
-1. <td>Log in to <a
- href="http://mail.google.com">http://mail.google.com</a>.</td>
-2. <td>Google Talk in Gmail will load on left side. Click on any
- contact to open a chat window </td>
-3. <td>Pop-out the chat window.</td>
-
-<td>Chat window will open as a constrained window on the left side of the page ; title bar : default icon and title "name - chat - Google Chrome"</td>
-</tr>
-<tr>
-<td>Pop-up displayed in constrained window</td>
-
-1. <td>Visit any website which opens a pop-up</td>
-
-<td>If your settings are checked for : Options&gt; Under the hood&gt; Web Content : Notify me when a pop-up is blocked then blocked pop-up will be notified at bottom right side of the page with title bar : "Blocked pop-up"</td>
-<td>On clicking blocked pop-up, title bar will change to "default icon and title - Google Chrome". If no title then "default icon and Google Chrome"</td>
-</tr>
-<tr>
-<td>Play video in constrained window</td>
-
-1. <td>Visit any website which plays video in constrained window</td>
-
-<td>A constrained window will launch for the video link ; title bar : "default icon and title - google chrome"</td>
-</tr>
-<tr>
-<td>Constrained window - launch with window.open() and close with window.close()</td>
-
-1. <td>Visit <a
- href="http://html.tests.googlepages.com/example1.html">http://html.tests.googlepages.com/example1.html</a>
- </td>
-2. <td>Click <b>Open window</b>.</td>
-3. <td>Click <b>Close window</b>. </td>
-
-<td>After Step 2: A constrained window with height=200px and width=300px will be launched.</td>
-<td> After Step 3: The constrained window will be closed.</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/index.md b/chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/index.md
deleted file mode 100644
index 4c0bb159e10..00000000000
--- a/chromium/docs/website/site/for-testers/frontend-testing/constrained-windows/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/frontend-testing
- - Frontend testing
-page_name: constrained-windows
-title: Constrained Windows (test plan)
----
-
-[TOC]
-
-## Testing strategy
-
-The Primary Focus will be on verifying whether constrained windows are working
-as per the design on different operating systems (Windows XP and Vista). More
-information about constrained windows is available from the [design
-doc](/developers/design-documents/constrained-popup-windows).
-
-## What needs to be tested
-
-* [Basic
- testing](/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing)
-
-## Testing environment
-
-* **Operating systems**: Windows Vista SP1, Windows XP SP2 and SP3
-* **Above configurations with antivirus/antispyware**: Norton 2008,
- McAfee, Symantec, Sophos AV, TrendMicro, PC Tools Spyware Doctor,
- Lavasoft Ad-ware, Webroot Spy Sweeper, Zone Alarm Internet Security
- Suite, Windows Live one Care, Kaspersky Internet Security 7.0,
- BitDefender Total Security 2008, Panda: Internet Security
-* **Operating system languages**: Arabic, Bulgarian, Catalan, Chinese
- (Simplified), Chinese (Traditional), Croatian, Czech, Danish, Dutch,
- English-UK, English-US, Estonian, Filipino, Finnish, French, German,
- Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese,
- Korean, Latvian, Lithuanian, Norwegian, Polish, Portuguese
- (Portugal), Portuguese (Brazil), Romanian, Russian, Serbian, Slovak,
- Slovenian, Spanish, Spanish (Latin America), Swedish, Thai, Turkish,
- Ukrainian, Vietnamese
-
-## Report a bug
-
-* [Chromium bug
- system](http://code.google.com/p/chromium/issues/entry) \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/frontend-testing/index.md b/chromium/docs/website/site/for-testers/frontend-testing/index.md
deleted file mode 100644
index fc017a73b8d..00000000000
--- a/chromium/docs/website/site/for-testers/frontend-testing/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: frontend-testing
-title: Frontend testing
----
-
-Note: these pages describe the testing plan for Google Chrome. Some of it only
-applies to Google Chrome, but much of it also applies to Chromium, which is why
-it's included here.
-
-* [Spell Check](/for-testers/frontend-testing/spell-check)
-* [Constrained
- Windows](/for-testers/frontend-testing/constrained-windows)
-* [Windows-specific interoperability
- issues](/for-testers/frontend-testing/windows-specific-interoperability-issues) \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/frontend-testing/spell-check/index.md b/chromium/docs/website/site/for-testers/frontend-testing/spell-check/index.md
deleted file mode 100644
index 05e0c8c0059..00000000000
--- a/chromium/docs/website/site/for-testers/frontend-testing/spell-check/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/frontend-testing
- - Frontend testing
-page_name: spell-check
-title: Spell Check (test plan)
----
-
-[TOC]
-
-## Testing strategy
-
-The Primary Focus will be on verifying spell check behavior in Chromium.
-
-## What needs to be tested
-
-* [Basic
- testing](/for-testers/frontend-testing/spell-check/spell-check--basic-testing)
-
-## Testing environment
-
-* **Operating systems**: Windows Vista SP1, Windows XP SP2 and SP3
-* **Above configurations with antivirus/antispyware**: Norton 2008,
- McAfee, Symantec, Sophos AV, TrendMicro, PC Tools Spyware Doctor,
- Lavasoft Ad-ware, Webroot Spy Sweeper, Zone Alarm Internet Security
- Suite, Windows Live one Care, Kaspersky Internet Security 7.0,
- BitDefender Total Security 2008, Panda: Internet Security
-* **Operating system languages**: Arabic, Bulgarian, Catalan, Chinese
- (Simplified), Chinese (Traditional), Croatian, Czech, Danish, Dutch,
- English-UK, English-US, Estonian, Filipino, Finnish, French, German,
- Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese,
- Korean, Latvian, Lithuanian, Norwegian, Polish, Portuguese
- (Portugal), Portuguese (Brazil), Romanian, Russian, Serbian, Slovak,
- Slovenian, Spanish, Spanish (Latin America), Swedish, Thai, Turkish,
- Ukrainian, Vietnamese
-
-## Report a bug
-
-* [Chromium bug
- system](http://code.google.com/p/chromium/issues/entry) \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/frontend-testing/spell-check/spell-check--basic-testing/index.md b/chromium/docs/website/site/for-testers/frontend-testing/spell-check/spell-check--basic-testing/index.md
deleted file mode 100644
index 4fe49dd1a86..00000000000
--- a/chromium/docs/website/site/for-testers/frontend-testing/spell-check/spell-check--basic-testing/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/frontend-testing
- - Frontend testing
-- - /for-testers/frontend-testing/spell-check
- - Spell Check (test plan)
-page_name: spell-check--basic-testing
-title: 'Spell Check: Basic Testing'
----
-
-## Testcases
-
-<table>
-<tr>
-Test case Steps Expected Result </tr>
-<tr>
-<td>Red underline for spelling errors</td>
-
-1. <td>Launch Chromium.</td>
-2. <td>Navigate to <a
- href="http://mail.google.com">http://mail.google.com</a>.</td>
-3. <td>Sign in to your account.</td>
-4. <td>Click <b>Compose Mail</b>.</td>
-5. <td>Enter <b>gogl</b> plus a space in the message field.</td>
-
-<td><b>gogle</b> will be underlined in red.</td>
-</tr>
-<tr>
-<td>Login form: username will not be red underlined</td>
-
-1. <td>Launch Chromium.</td>
-2. <td>Visit <a
- href="http://mail.google.com">http://mail.google.com</a> (if signed
- in, sign out to see the login page)</td>
-3. <td>Enter any text in the <b>Username</b> field.</td>
-
-<td>Username will not be underlined in red.</td>
-</tr>
-<tr>
-
-<td>Mis-spelled text that is copied and pasted will be underlined in red</td>
-
-1. <td>Launch Chromium.</td>
-2. <td>Navigate to <a
- href="http://mail.google.com">http://mail.google.com</a>.</td>
-3. <td>Sign in to your account.</td>
-4. <td>Click <b>Compose Mail</b></td>
-5. <td>Copy and paste any mis-spelled text into the message field.</td>
-
-<td>Mis-spelled text will be underlined in red.</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/index.md b/chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/index.md
deleted file mode 100644
index 50155a420db..00000000000
--- a/chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/frontend-testing
- - Frontend testing
-page_name: windows-specific-interoperability-issues
-title: Windows-specific interoperability issues
----
-
-When users face crash on start or other odd behavior, one helpful thing to do is
-to gather the list of dlls currently loaded in the chrome.exe processes whenever
-possible. You can execute the script in
-[list_chrome.zip](/for-testers/frontend-testing/windows-specific-interoperability-issues/list_chrome.zip)
-which will generate a file named results.txt. The user can then send the content
-of this file by email for further analysis. \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/list_chrome.zip.sha1 b/chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/list_chrome.zip.sha1
deleted file mode 100644
index ed16f65c1c6..00000000000
--- a/chromium/docs/website/site/for-testers/frontend-testing/windows-specific-interoperability-issues/list_chrome.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8960eb43c938f289dbfb6908437a8ac6e5395d31 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/index.md b/chromium/docs/website/site/for-testers/index.md
deleted file mode 100644
index 0cb242fc0f5..00000000000
--- a/chromium/docs/website/site/for-testers/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs: []
-page_name: for-testers
-title: For Testers
----
-
-## Reporting Bugs
-
-* [Bug reporting guidelines and how to report
- bugs](/for-testers/bug-reporting-guidelines)
-* [Glossary](/glossary)
-* [Enable logging](/for-testers/enable-logging)
-* [Recording
- traces](/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs)
-
-## Contributing
-
-* [Find duplicate bugs](http://code.google.com/p/chromium/issues/list)
-* [Confirm unconfirmed
- bugs](http://code.google.com/p/chromium/issues/list?q=status:Unconfirmed)
-* [Confirm unconfirmed Mac
- bugs](http://code.google.com/p/chromium/issues/list?can=2&q=+os:mac+status:unconfirmed&colspec=ID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS&cells=tiles)
-* [Confirm unconfirmed Linux
- bugs](http://code.google.com/p/chromium/issues/list?can=2&q=os:Linux+status:unconfirmed&colspec=ID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS&x=mstone&y=area&cells=tiles)
-* [Verify Mac fixed
- bugs](http://code.google.com/p/chromium/issues/list?can=1&q=os:mac+status:fixed&colspec=ID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS&x=mstone&y=area&cells=tiles)
-* [Verify Linux fixed
- bugs](http://code.google.com/p/chromium/issues/list?can=1&q=os:Linux+status:fixed&colspec=ID+Stars+Pri+Area+Type+Status+Summary+Modified+Owner+Mstone+OS&x=mstone&y=area&cells=tiles)
-* [Frontend testing](/for-testers/frontend-testing)
-* [Firmware testing](/for-testers/faft)
-* [Installer](/for-testers/installer)
diff --git a/chromium/docs/website/site/for-testers/installer/index.md b/chromium/docs/website/site/for-testers/installer/index.md
deleted file mode 100644
index a61ba9b6a95..00000000000
--- a/chromium/docs/website/site/for-testers/installer/index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: installer
-title: Installer (test plan)
----
-
-[TOC]
-
-## Testing strategy
-
-The Primary Focus will be on testing the installer for fresh installs and
-upgrades on various operating systems, with different anti-virus and language
-configurations.
-
-## Test scenarios
-
-* [Basic testing](/for-testers/installer/installer--basic-testing)
-
-## Testing environment
-
-* **Operating systems**: Windows Vista SP1, Windows XP SP2 and SP3
-* **Above configurations with antivirus/antispyware**: Norton 2008,
- McAfee, Symantec, Sophos AV, TrendMicro, PC Tools Spyware Doctor,
- Lavasoft Ad-ware, Webroot Spy Sweeper, Zone Alarm Internet Security
- Suite, Windows Live one Care, Kaspersky Internet Security 7.0,
- BitDefender Total Security 2008, Panda: Internet Security
-* **Operating system languages**: Arabic, Bulgarian, Catalan, Chinese
- (Simplified), Chinese (Traditional), Croatian, Czech, Danish, Dutch,
- English-UK, English-US, Estonian, Filipino, Finnish, French, German,
- Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese,
- Korean, Latvian, Lithuanian, Norwegian, Polish, Portuguese
- (Portugal), Portuguese (Brazil), Romanian, Russian, Serbian, Slovak,
- Slovenian, Spanish, Spanish (Latin America), Swedish, Thai, Turkish,
- Ukrainian, Vietnamese
-
-## Report a bug
-
-* [Chromium bug
- system](http://code.google.com/p/chromium/issues/entry) \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/installer/installer--basic-testing/index.md b/chromium/docs/website/site/for-testers/installer/installer--basic-testing/index.md
deleted file mode 100644
index baf44cb0b90..00000000000
--- a/chromium/docs/website/site/for-testers/installer/installer--basic-testing/index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-- - /for-testers/installer
- - Installer (test plan)
-page_name: installer--basic-testing
-title: 'Installer: Basic Testing'
----
-
-[TOC]
-
-## Test cases
-
-### Install
-
-<table>
-<tr>
-Test case Steps Expected Result </tr>
-<tr>
-<td>Fresh Install</td>
-<td>Install latest build of Google Chrome.</td>
-
-* <td>On completion of installation, First Run UI dialog will be
- launched with no other alert prompts </td>
-* <td>First Run UI dialog: Shortcuts will be created according to the
- user's choice. Bookmarks, passwords, and other settings will be
- imported/not imported from IE/FF as per user's choice. </td>
-* <td>A new folder will be created:</td>
- <td><b>XP</b>: C:\\Documents and Settings\\username\\Local
- Settings\\Application Data\\Google\\Google Chrome\\Application</td>
- <td><b>Vista</b>: C:\\Users\\username\\AppData\\Local\\Google\\Google
- Chrome\\Application</td>
-* <td>Google Chrome can be launched from shortcuts and the Add/Remove
- panel (XP) / Programs and Features (Vista)</td>
-
-</tr>
-<tr>
-<td>Recovery </td>
-
-<td>If Google Chrome files are accidentally deleted and Google Chrome cannot be launched, run the installer again.</td>
-
-* <td>On completion of installation, Google Chrome can be launched
- from shortcuts, Add/Remove panel (XP) / Programs and Features
- (Vista)</td>
-
-</tr>
-</table>
-
-### Overinstall
-
-<table>
-<tr>
-Test case Steps Expected Result </tr>
-<tr>
-<td>Overinstall</td>
-<td>Overinstall latest build of Google Chrome </td>
-
-* <td>On launching Google Chrome, <b>about:version</b> should show the
- latest build number.</td>
-* <td>Google Chrome can be launched from shortcuts, Add/Remove panel
- (XP) / Programs and Features (Vista)</td>
-
-</tr>
-</table>
-
-### First Run UI
-
-<table>
-<tr>
-Test case Steps Expected Result </tr>
-<tr>
-<td>First Run UI dialog launch</td>
-<td>Do a fresh install of Google Chrome. (Note: First Run UI will not be launched if it is not a fresh install)</td>
-
-* <td>On completion of installation, First Run UI dialog will be
- launched giving the user choice to customize the settings.</td>
-* <td>A file called <b>First Run</b> will be created under:</td>
- <td><b>XP</b>: C:\\Documents and Settings\\username\\Local
- Settings\\Application Data\\Google\\Google Chrome\\Application</td>
- <td><b>Vista</b>: C:\\Users\\username\\AppData\\Local\\Google\\Google
- Chrome\\Application</td>
-
-</tr>
-<tr>
-<td>First Run UI file not found </td>
-<td>Delete First Run file.</td>
-
-* <td>On Google Chrome launch, First Run UI dialog will be launched
- </td>
-
-</tr>
-</table>
-
-### Uninstall
-
-<table>
-<tr>
-Test case Steps Expected Result </tr>
-<tr>
-<td>Uninstall Google Chrome </td>
-<td>Click <b>Start > All Programs > Google Chrome</b> and select <b>Uninstall</b></td>
-<td>or</td>
-<td>Windows XP: From the <b>Add/Remove Programs</b> dialog, uninstall Google Chrome.</td>
-<td>Windows Vista: From the <b>Programs and Features</b> window, uninstall Google Chrome.</td>
-
-<td>Verify the following on your local machine:</td>
-
-* <td>Google Chrome is uninstalled with no issues. </td>
-* <td>The Google Chrome folder is removed from:</td>
- <td><b>XP</b>: C:\\Documents and Settings\\user\\Local Settings\\Application
- Data\\Google\\Google Chrome\\Application\\</td>
- <td><b>Vista</b>: C:\\Users\\username\\AppData\\Local\\Google\\Google
- Chrome\\Application</td>
-* <td>Google Chrome will not appear in the <b>Add/Remove</b> panel on
- XP, or the <b>Programs and Features</b> window in Vista.</td>
-* <td>Shortcuts are deleted.</td>
-
-</tr>
-<tr>
-<td>Uninstall Google Chrome while Google Chrome is running </td>
-
-1. <td>Launch Google Chrome. </td>
-2. <td>Try to uninstall Google Chrome. </td>
-
-<td>The following message will appear:</td>
-
-<td><b>Please close all Google Chrome windows and try again</b></td>
-
-<td>Google Chrome will not be uninstalled. </td>
-
-<td>On closing Google Chrome and uninstalling, Google Chrome will uninstall with no issues.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-memory-details/index.md b/chromium/docs/website/site/for-testers/providing-memory-details/index.md
deleted file mode 100644
index d85e8355057..00000000000
--- a/chromium/docs/website/site/for-testers/providing-memory-details/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: providing-memory-details
-title: Reporting memory bloat/leak issues
----
-
-<table>
-<tr>
-
-<td>## How to file a bug for memory bloat/leak issues:</td>
-
- <td>Use <a
- href="https://code.google.com/p/chromium/issues/entry?template=Memory%20usage">this
- template</a> when filing a bug for memory bloat/leak issues.</td>
-
- <td>See <a
- href="https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory/filing_memory_bugs.md">instructions
- here</a>.</td>
-
-<td>## How to take a snapshot of memory usage:</td>
-
-* <td>See <a
- href="https://chromium.googlesource.com/chromium/src/+/HEAD/docs/memory/debugging_memory_issues.md#taking-a-heap-dump">instructions
- here</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/Screen Shot 2017-04-26 at 11.18.49 AM.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/Screen Shot 2017-04-26 at 11.18.49 AM.png.sha1
deleted file mode 100644
index 87543b79298..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/Screen Shot 2017-04-26 at 11.18.49 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-46cd09362008f05ffe41c0792f9aac9c69dcf97e \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/capture-bytes.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/capture-bytes.png.sha1
deleted file mode 100644
index 2735015a6fe..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/capture-bytes.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-58ebb3fefef00bfc2fb41c4c75812503c34349da \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/inclue-bytes-mobile.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/inclue-bytes-mobile.png.sha1
deleted file mode 100644
index 04b55bd6537..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/inclue-bytes-mobile.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-feb7a1766cd0a07f6bb8d97da7f1787de063caa9 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/index.md b/chromium/docs/website/site/for-testers/providing-network-details/index.md
deleted file mode 100644
index aff6dc7beba..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/index.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: providing-network-details
-title: How to capture a NetLog dump
----
-
-A *NetLog dump* is a log file of the browser's network-level events and state.
-You may be asked to provide this log when experiencing page load or performance
-problems.
-
-***Note:** if you want to take a netlog for **Android WebView**, [read this
-guide](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-debugging.md)
-instead.*
-
-To create a *NetLog dump*, open a new tab and navigate to:
-
-> chrome://net-export/
-
-[<img alt="image" src="/for-testers/providing-network-details/net-export-61.png"
-height=321 width=400>](/for-testers/providing-network-details/net-export-61.png)
-
-You can then follow the instructions on that page.
-
-**Step-by-step guide**
-
-1. Open a new tab and go to chrome://net-export/
-2. Click the **Start Logging To Disk** button.
-3. Reproduce the network problem **in a different tab** (the
- chrome://net-export/ tab needs to stay open or logging will
- automatically stop.)
-4. Click **Stop Logging** button.
-5. Provide the resulting log file to the bug investigator.
- * Either attach the file to your existing or [new bug
- report](https://crbug.com/new), or send email to the bug
- investigator.
- * Provide the **entire** log file. Snippets are rarely sufficient
- to diagnose problems.
- * **Include any relevant URLs or details to focus on.**
-
-> **PRIVACY**: When attaching log files to bug reports, note that Chrome bug
-> reports are **publicly visible** by default. If you would prefer it be only
-> visible to Google employees, mention this on the bug and wait for a Google
-> engineer to restrict visibility of the bug before you attach the file.
-
-**Advanced: Byte-level captures**
-
-By default, NetLog dumps do not include all of the raw bytes (encrypted or
-otherwise) that were transmitted over the network.
-
-To include this data in the log file, select the **Include raw bytes** option at
-the bottom of the chrome://net-export/ page:
-
-> **PRIVACY:** Captures with this level of detail may include personal
-> information and should generally be emailed rather than posted on public
-> forums or public bugs.
-
-[<img alt="image"
-src="/for-testers/providing-network-details/net-export-raw-bytes-61.png"
-height=108
-width=400>](/for-testers/providing-network-details/net-export-raw-bytes-61.png)
-
-**Advanced: Logging on startup**
-
-If the problem that you want to log happens very early and you cannot start
-chrome://net-export in time, you can add a command line argument to Chrome that
-will start logging to a file from startup:
-
-> --log-net-log=C:\\some_path\\some_file_name.json
-
-If a granularity for capture other than the default of "Strip private
-information" is needed, one of the following flags can be used:
-
-* --net-log-capture-mode=IncludeSensitive
-* --net-log-capture-mode=Everything
-
-For info about adding command line options, see
-[command-line-flags](/developers/how-tos/run-chromium-with-flags).
-
-**Advanced: Viewing the NetLog dump file**
-
-The log file can be loaded using the
-[netlog_viewer](https://chromium.googlesource.com/catapult/+/HEAD/netlog_viewer/). \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/net-export-61.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/net-export-61.png.sha1
deleted file mode 100644
index 360dcf1e4fc..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/net-export-61.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e7f9761d778f19e8d3c66858c4c4d00d1155015b \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/net-export-raw-bytes-61.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/net-export-raw-bytes-61.png.sha1
deleted file mode 100644
index e2bcbb6aaaa..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/net-export-raw-bytes-61.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8d8e6f8b17b36974974b33d022cd2d8e62da99ff \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/net-internals.PNG.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/net-internals.PNG.sha1
deleted file mode 100644
index 10d3ed8bd46..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/net-internals.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0ca83a9824d1ff5471cf41435d11bb3fcf60c4b4 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/netexport.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/netexport.png.sha1
deleted file mode 100644
index d921e1e26d5..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/netexport.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce3bf30b0954d19e8cd1e844202a7380d7ecbe96 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/netinternals_export.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/netinternals_export.png.sha1
deleted file mode 100644
index 322b7cc46ec..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/netinternals_export.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-69108bb89586728956c5038244eb565e56dffea8 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/save-to-file.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/save-to-file.png.sha1
deleted file mode 100644
index 6e3a2000139..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/save-to-file.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a70c14978cdba6cdd8c2199b5f637daa85a08d37 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/providing-network-details/start-logging-to-disk.png.sha1 b/chromium/docs/website/site/for-testers/providing-network-details/start-logging-to-disk.png.sha1
deleted file mode 100644
index bbd4220615e..00000000000
--- a/chromium/docs/website/site/for-testers/providing-network-details/start-logging-to-disk.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e9dfb1661a3f5a5b845aded116cfc3180c74e3f9 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/saft/index.md b/chromium/docs/website/site/for-testers/saft/index.md
deleted file mode 100644
index 4108ab63b66..00000000000
--- a/chromium/docs/website/site/for-testers/saft/index.md
+++ /dev/null
@@ -1,222 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: saft
-title: SAFT
----
-
-[TOC]
-
-### Theory of operation
-
-SAFT stands for Semi Automated Firmware Test. It is a Python and BASH based
-Linux application enabled in the [ChromeOS](/chromium-os) test distribution. On
-the target system SAFT code is placed in `/usr/sbin/firmware/saft. The source
-code is controlled by a separate [git](goog_880557684)`
-`[repository](http://gerrit.chromium.org/gerrit/gitweb?p=chromiumos%2Fplatform%2Fsaft.git;a=shortlog;h=HEAD).
-`
-
-SAFT is designed to verify BIOS functionality, including different aspects of
-[Verified Boot](/chromium-os/chromiumos-design-docs/verified-boot) and [Google
-Chrome OS Firmware - High Level
-Specification](https://docs.google.com/a/google.com/Doc?docid=0AbUTgMyqR_XeZGRuaDd4OXdfODJkbTRjZzJjdA&hl=en).
-To test this thoroughly multiple system restarts are needed, some including
-booting in recovery mode. This is why **SAFT requires the flash drive to be
-present on the system under test**, both to keep state between reboots and to
-provide recovery mode boot medium. Recovery mode boot requires operator
-involvement (unplugging and plugging in the flash drive), which makes SAFT a
-'semi automated' test. SAFT is meant to be run by the firmware vendors, and is
-required to be easy to set up and run. This is why it is not using the autotest
-framework, all what's needed is a target netbook and a flash memory stick.
-
-The Chrome OS root file system is immutable, so there is a need to enable or
-disable SAFT execution without modifying the root fs contents. The SAFT
-[upstart](http://upstart.ubuntu.com/getting-started.html) script
-`/etc/init/saft.conf` is executed on every reboot. It checks if the flash drive
-is present, and a "follow up" script `/var/saft.sh` exists on it. If the follow
-up script does not exist, SAFT execution terminates, if it does exist, the
-follow up script is invoked. This allows to enable/disable SAFT execution
-without modifying the root file system.
-
-When SAFT is not running, the upstart script terminates after logging the state
-in `/tmp/saft.conf`:
-
-```none
-localhost ~ # cat /tmp/saft.log
-Found sdc after 0 seconds
-No SAFT in progress
-```
-
-To enable SAFT execution on a system, the 'follow up' script is created and the
-system is reset. On the next and all following startups until the 'follow up'
-script is deleted, SAFT application is invoked.
-
-SAFT needs some means of representing the target boot state (what firmware and
-kernel were used, what was the reason for reboot, where the root file system is
-hosted, etc.). A so called boot state vector is used for that, which is a string
-described as follows in the source code:
-
-```none
-The string has a form of x:x:x:<removable>:<partition_number>, where x' represent contents of the appropriate BINF files as reported by ACPI, <removable> is set to 1 or 0 depending if the root device is removable or not, and <partition number> is the last element of the root device name, designating the partition where the root fs is mounted. 
-This vector fully describes the way the system came up.
-```
-
-When executed on start up, the 'follow up' script creates the necessary
-environment and starts the actual SAFT Python application located in` <flash
-drive mount point>/usr/sbin/firmware/saft/saft_utility.py`. This application is
-a state machine, where each state introduces a unique defect in the system
-(corrupted firmware or kernel, different CGPT attributes, etc., etc.).
-
-In each step the application checks if the current boot state vector matches the
-expected state, and if so corrects the previously introduced defect, introduces
-the next one and reboots again. This continues until all steps are passed,
-provided every state is processed properly. If SAFT application detects that the
-target state vector does not match the expected state, it terminates
-immediately. The sequence of defect introducing actions is stored in the
-`saft_utility.py:TEST_STATE_SEQUENCE` table.
-
-On termination the SAFT application removes the 'follow up' script and copies
-the SAFT log into the `/var/fw_test_log.txt`, which allows the operator to
-examine the test results.
-
-### Running SAFT
-
-Two important conditions have to be met before SAFT can run properly:
-
-* both kernels/root fs pairs need to be populated on the main storage
- device
-* the flash device needs to be configured not to use verified root fs,
- because it gets mounted in course of SAFT execution, which causes
- verified root fs control structures to go out of sync.
-
-Neither of these conditions are met by default in the recent ChromeOS
-distributions, so before SAFT can run, they need to be taken care of. The SAFT
-wrapper script` /usr/sbin/firmware/saft/runtests.sh` does that. The wrapper
-script checks if both partiton pairs exist, and if not - it duplicates the firs
-pair on the second pair's devices (`/dev/sda2` gets copied to `/dev/sda4` and
-`/dev/sda3` gets copied to `/dev/sda5`) and checks the command line of the flash
-device hosted recovery kernel. If it is configured to run with verified root fs,
-the kernel command line is edited to bring the recovery image up without
-verified root fs protection.
-
-So, a typical procedure to invoke SAFT is as follows:
-
-* download ChromeOS test distribution and put it on the flash drive
-* install ChromeOS on the target using the flash drive
-* reboot the target, enter the shell dialog and type
-
-```none
-sudo /usr/sbin/firmware/saft/runtests.sh [<BIOS image to test>]
-```
-
-If `runtests.sh` is invoked without any parameters, it just verifies the
-environment (modifies it as described above, if required), copies SAFT code into
-the removable device (into` <flash drive mount point>/usr/sbin/firmware/saft)`
-and runs SAFT unit tests. The actual SAFT starts if `runtests.sh` is invoked
-with a command line parameter, the name of the file containing the firmware
-image to test.
-
-It is presumed that the flash device (carrying the recovery image from which the
-system has been installed) is plugged in into the target and gets instantiated
-as `/dev/sdb`. If the flash device is plugged in into a USB hub or is
-instantiated as a different device for some other reason, the environment
-variable `FLASH_DEVICE `can be used to communicate it to the script, for
-instance:
-
-```none
-FLASH_DEVICE=sdc /usr/sbin/firmware/saft/runtests.sh [<BIOS image to test>]
-```
-
-When invoked with the BIOS image file name, it is verified that the image has
-proper keys in it and would be able to bring up the existing kernels. If
-verification succeeds, SAFT gets under way, rebooting the target a few times (as
-many times as there are steps in `saft_utility.py:TEST_STATE_SEQUENCE).`
-
-Certain steps take a long time between restarts (for instance, when a step
-involves reprogramming of the flashrom). It is easy to tell if SAFT is completed
-or not by examining the SAFT temp file in `/tmp/saft.log`. When SAFT completes,
-this file would have either an error message or the phrase 'we are done' in the
-end. This file includes only messages generated since the most recent startup.
-The full SAFT log can be found in `/var/fw_test.log.txt **after** the test
-completes.`
-
-### `Tests implemented so` far
-
-The following tests are implemented as of commit `6cabd80 Introduce gpt tests in
-SAFT`. (make sure to update this string when editing this section).
-
-<table>
-<tr>
-<td> Test</td>
-<td colspan=3> System state after reboot</td>
-</tr>
-<tr>
-<td> Firmware</td>
-<td> Kernel</td>
-<td> GPT attributes</td>
-</tr>
-<tr>
-<td> Set 'try FW B' in NV ram</td>
-<td> B</td>
-<td> A </td>
-</tr>
-<tr>
-<td> Corrupt FW A</td>
-<td> B</td>
-<td> A</td>
-</tr>
-<tr>
-<td> Restore FW A</td>
-<td> A</td>
-<td> A</td>
-</tr>
-<tr>
-<td> Corrupt both FW A and B</td>
-<td> Recovery</td>
-<td>Recovery</td>
-</tr>
-<tr>
-<td> Restore FW A and B</td>
-<td>A</td>
-<td> A</td>
-</tr>
-<tr>
-<td> Corrupt kernel A</td>
-<td> A </td>
-<td> B</td>
-</tr>
-<tr>
-<td> Corrupt kernel B</td>
-<td> Recovery</td>
-<td>Recovery</td>
-</tr>
-<tr>
-<td> Restore kernels A and B</td>
-<td> A</td>
-<td> A</td>
-</tr>
-<tr>
-<td> Set GPT A\[S:0 T:15 P:10\] B\[S:0 T=15 P=9\]</td>
-<td> A</td>
-<td> A</td>
-<td>A\[S:0 T:14 P:10\] B\[S:0 T=15 P=9\] </td>
-</tr>
-</table>
-
-### Enhancing SAFT
-
-It is easy to add new steps to SAFT by extending
-`saft_utility.py:TEST_STATE_SEQUENCE` table with new steps. The format of the
-table is simple, each line is a tri-tuple of
-
-```none
-(<boot_state_vector>, <function>, <argument>),
-```
-
-where `boot_state_vector` is the expected boot state after the previous step,
-and `function` with argument `argument` will implement the new step of SAFT.
-
-### Interpreting SAFT errors
-
-One of the common SAFT errors is 'wrong boot vector' \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/test-cases/index.md b/chromium/docs/website/site/for-testers/test-cases/index.md
deleted file mode 100644
index 5686b49f49c..00000000000
--- a/chromium/docs/website/site/for-testers/test-cases/index.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: test-cases
-title: Test Cases
----
-
-<div class="two-column-container">
-<div class="column">
-
-### Guidelines
-
-1. Please make sure that you are on the dev channel. We have recently
- refreshed the dev channel, so you will have to sign up for the dev
- channel once again. Instructions for joining the dev channel are
- here: <http://www.chromium.org/getting-involved/dev-channel/>.
-2. Make sure you are running the latest version. You can find
- information about Google Chrome versions here:
- <http://www.chromium.org/getting-involved/dev-channel/release-notes>.
-3. IMPORTANT: Before you begin testing, please [set up a new
- profile](/developers/creating-and-using-profiles). We strongly
- suggest that you use a separate profile folder for testing purposes
- so that the testing does not tamper with your existing profile and
- also to ensure all the volunteers are starting with a similar setup.
- 1. You can clear the profile between tests, as described in the
- [profile page](/developers/creating-and-using-profiles).
- 2. When you are done testing, you can edit the shortcut again to go
- back to your original profile.
-4. Please go through as many test cases as possible. Detailed
- description about the test cases is provided in the column on the
- left. Each test case should be answered with a 'Pass' or 'Fail'
-5. Please try and associate a failing test case with a bug. It could be
- an existing bug or a new issue. Please refer to bug reporting
- guidelines here:
- <http://www.chromium.org/for-testers/bug-reporting-guidelines>. Use
- the 'Other' response field in the test cases to include the bug
- numbers.
-6. Please do not use this form to send us feature requests or
- information about unrelated crashes or bugs. Please file them
- directly on <http://crbug.com> where they will be looked at along
- with other bugs.
-
-### Test cases
-
-### Test case: Default Browser (admin user)
-
-* Pre-conditions/setup: Make sure you are logged in with
- administrative privileges and Google Chrome is not your default
- browser.
-* Go to Chrome Menu -&gt; Options -&gt; Basic and click on 'Make
- Google Chrome my default browser'.
-* Verification: Go to Start -&gt; Run and type and valid URL like
- 'http://www.google.com' in the run dialog. When you hit enter, it
- should be opened in a new Google Chrome window.
-
-#### Test case: Default Browser (non-admin user)
-
-* Pre-conditions/setup: Make sure you are logged in without
- administrative privileges (limited user) and Google Chrome is not
- your default browser.
-* Go to Chrome Menu -&gt; Options -&gt; Basic and click on 'Make
- Google Chrome my default browser'.
-* Verification: Go to Start -&gt; Run and type and valid URL like
- 'http://www.google.com' in the run dialog. When you hit enter, it
- should be opened in a new Google Chrome window.
-
-#### Test case: Clear Browsing Data (time range 1-day)
-
-* Pre-conditons/setup: Start with a fresh Chrome profile. Browse to a
- few websites. Log on to your email account and choose to save
- passwords. Download a few files. This will help populate your cache,
- cookies, download history, etc.
-* Go to Chrome Menu -&gt; Options -&gt; Clear browsing data. Select
- all check boxes on the dialog, leave the time period as 'Last day'
- and click on 'Clear browsing data'.
-* Verification: All your recent browsing history should be cleared.
- Your history (Ctrl + H) and downloads (Ctrl + J) pages should not
- show up any entries for the current day. Your saved passwords under
- Chrome Menu -&gt; Options -&gt; Minor Tweaks -&gt; Show saved
- passwords should be empty. There should be no cookies present under
- Chrome Menu -&gt; Options -&gt; Under the Hood -&gt; Show cookies.
-
-#### Test case: Clear Browsing Data (specific data types - cookies)
-
-* Pre-conditions/setup: Start with a fresh Chrome profile. Visit some
- websites such as http://www.nytimes.com, http://www.cnn.com, etc.
- Log on to an email account (e.g. your GMail account). Go to Chrome
- Menu -&gt; Options -&gt; Under the Hood -&gt; Show cookies and
- verify that cookies have been stored.
-* Go to Chrome Menu -&gt; Options -&gt; Clear browsing data. Select
- only the checkbox labeled cookies and click on 'Clear browsing
- data'.
-* Verification: There should be no cookies present under Chrome Menu
- -&gt; Options -&gt; Under the Hood -&gt; Show cookies.
-
-#### Test case: Find in Page (matches inside html pages, edit boxes, unicode text)
-
-* Pre-conditions/setup: None.
-* Navigate to a simple page such as <http://www.chromium.org/>. Hit
- 'Ctrl + F' Search for the word 'chromium'.
-* Next, go to a website that has a text edit boxes (e.g. compose a
- message in GMail). Type the following text in that box: 'the quick
- brown fox quickly jumps over the lazy dog'. Hit Ctrl + F and enter
- the search text 'QUICK'.
-* Finally go to http://news.sina.com. Bring up the find in page dialog
- and search for: 北美首頁.
-* Verification: In each of the cases mentioned above, the search
- should highlight every single occurrence of the search term in
- Yellow. The search box should show a count of the occurrences as
- well as the the occurrence it has currently focused on which is
- highlighted in Orange. You should be able to toggle between each of
- the highlighted search terms by clicking on the arrow icons in the
- find dialog or by using the keyboard (F3 and Shift+F3).
-
-#### Test case: Tab dragging (screen edges)
-
-* Pre-conditions/setup: None.
-* When you drag a tab to certain positions on the monitor, a docking
- icon will appear. Release the mouse over the docking icon to have
- the tab snap to the docking position instead of being dropped at the
- same size as the original window.
-* Verification:
- * Monitor top: make the dropped tab maximized.
- * Monitor left/right: make the dropped tab full-height and
- half-width, aligned with the monitor edge.
- * Monitor bottom: make the dropped tab full-width and half-height,
- aligned with the bottom of the monitor.
- * Browser-window left/right: fit the browser window and the
- dropped tab side-by-side across the screen.
- * Browser-window bottom: fit the browser window and the dropped
- tab top-to-bottom across the screen.
-
-#### Test case: Profiles (open a tab in new profile, create a new profile)
-
-* Pre-conditions/setup: Start with a clean profile. Browse to a few
- websites. Log on to your email account and choose to save passwords.
- Download a few files. This will help populate your cache, cookies,
- download history, etc in your current profile.
-* Go to Chrome Menu -&gt; Options -&gt; New window in profile -&gt;
- &lt;New Profile&gt;. Create a new profile and name it (e.g. 'work').
- Leave the 'Create desktop shortcut...' box checked.
-* Verification: There should be a new shortcut on your desktop called
- 'Google Chrome for work' (or whatever profile name you choose). If
- you double click on that shortcut, it should launch a new instance
- of Google Chrome. This new instance should have an empty new tab
- page. The history should be empty and there should be no cookies
- present.
-
-#### Test case: Auto scroll
-
-* Pre-conditions/setup: None.
-* Verification: On pages that have vertical and/or horizontal scroll
- bars, if you press the mouse scroll wheel (middle-click) auto-scroll
- should be enabled and the webpage should scroll as you move your
- mouse.
-
-#### Test case: Downloads (download various types of file)
-
-* Pre-condition/setup: Start with a clean profile.
-* Download different types of files (various types of file formats and
- sizes). Note: please download files only from sources you trust.
-* Verification: The files should get successfully downloaded to the
- download location, which by default should be My
- Documents\\Downloads. The download history page (Ctrl + J) should
- list all the downloads.
-
-#### Test case: Downloads (change download location)
-
-* Pre-condition/setup: Start with a clean profile.
-* Go to Chrome Menu -&gt; Options -&gt; Minor Tweaks and change the
- download location to some other folder on your computer.
-* Verification: All subsequent downloads should get downloaded to the
- new download location.
-
-</div>
-<div class="column">
-
-</div>
-</div>
diff --git a/chromium/docs/website/site/for-testers/touch-firmware-tests/TouchFWTests.png.sha1 b/chromium/docs/website/site/for-testers/touch-firmware-tests/TouchFWTests.png.sha1
deleted file mode 100644
index 384629b566d..00000000000
--- a/chromium/docs/website/site/for-testers/touch-firmware-tests/TouchFWTests.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-984d016397e0850f640082607769485e3056e092 \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/touch-firmware-tests/index.md b/chromium/docs/website/site/for-testers/touch-firmware-tests/index.md
deleted file mode 100644
index 86016d8a723..00000000000
--- a/chromium/docs/website/site/for-testers/touch-firmware-tests/index.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: touch-firmware-tests
-title: Touch Firmware Tests
----
-
-[[TOC]](/for-testers/touch-firmware-tests/TouchFWTests.png)
-
-[ <img alt="image" src="/for-testers/touch-firmware-tests/TouchFWTests.png"
-height=94 width=400>](/for-testers/touch-firmware-tests/TouchFWTests.png)
-
-## Preparing the Testing Host
-
-These instructions describe how to set up the code and its dependencies on the
-host, the workstation you will actually be running the tests *from*. Usually the
-host is a normal development machine. It is not the device under test (DUT).
-
-### Initial setup
-
-The first time you configure the host to run touch firmware tests, the following
-steps are required:
-
-1. Clone the git repo that contains the test scripts. It is possible to
- clone the repo without a full Chrome OS checkout, by running the
- following: `git clone
- <https://chromium.googlesource.com/chromiumos/platform/touch_firmware_test.git>`
- This command creates a new `touch_firmware_test` directory in your
- working directory, containing a number of Python scripts.
-2. Install the [PyQtGraph](http://www.pyqtgraph.org/) plotting library,
- which is a dependency for the touch firmware tests. Use the provided
- installers for Ubuntu and Windows and follow the instructions on
- [www.pyqtgraph.org](http://www.pyqtgraph.org) to install this
- library.
-
-### Updating to the Latest Version
-
-If you have previously checked out the test source code, simply pull the latest
-patches from the git server by navigating to the `touch_firmware_test` directory
-and running the `git pull` command.
-
-## Preparing the DUT
-
-The firmware test works for both Android and Chrome devices. However,
-configuration steps vary according to the type of DUT you are testing.
-
-### Android Devices
-
-1. Verify `adb` is installed on the testing host. You can follow the
- steps [described on this
- page](https://docs.google.com/document/d/1nRsKr6wZi5sWmdgzCy9Cx7yPykcuxu9gFccXroRLxBI)
- or use a different procedure that works for your environment.
-2. Connect your Android device to the testing host.On the host, you
- must be able to connect to the DUT via `adb`. In the simple case the
- DUT is physically connected to the host via USB. Other
- configurations, such as adb-over-wifi, are also possible, as long as
- `adb` can communicate with the DUT.
-3. Enable USB Debugging on the DUT. Using [these
- instructions](http://www.greenbot.com/article/2457986/how-to-enable-developer-options-on-your-android-phone-or-tablet.html)
- or similar steps, enable Developer options on the Android device. In
- the Developer options panel, select USB debugging. The exact
- procedure depends on the device. If you cannot locate these features
- on your device, search the Internet for “USB debugging
- &lt;*your-device-type*&gt;”.
-4. Verify the configuration of your DUT and testing host by running
- `adb shell` in a terminal window on the host. It should open a
- terminal connection to the DUT with a command prompt.
-
-### Chrome Devices
-
-1. Install a Chrome OS test image on the DUT. A test image is required
- (versus a normal Chrome OS image) to allow the firmware test to use
- ssh, evtest, and other testing utilities not included in release
- images. To get a test image, from within your chroot run the
- following:
-
-> `cd ~/trunk/scripts ./build_packages --board=$BOARD ./buildimage --board=$BOARD --noenable_rootfs_verification test `
-> where `BOARD` is the board name used in the Chrome device (also the name of
-> the private overlay). Install the resulting image on the DUT.
-
-1. Connect the DUT to a network the testing host can access. A
- USB-Ethernet adapter connected to a LAN is recommended, to minimize
- lag and dropped connections. It is also feasible to use a wireless
- connection.
-2. Verify the configuration of your DUT and testing host by running the
- command `ssh root@$DUT_IP` to connect to the DUT via SSH. If
- prompted for a password, use `test0000`. A connection to the DUT
- should be established.
-
-## Running the Test
-
-1. On the testing host, navigate to the `touch_firmware_test` directory
- and run either:
-
-> `python main.py -t chromeos -a $IP_ADDRESS `
-
-> for Chrome devices, or:
-
-> `python main.py -t android [-a $DEVICE_STRING] `
-
-> for Android devices. To display additional command line parameters that
-> configure the way the test runs, run `python main.py --help` .
-
-1. Follow the screen prompts and perform the gestures indicated on the
- touchpad or touchscreen of the DUT.
-2. When all the tests have run, a file named `report.html` is
- generated. Open this file in a browser to view the results. \ No newline at end of file
diff --git a/chromium/docs/website/site/for-testers/unhealthy-tests-report/index.md b/chromium/docs/website/site/for-testers/unhealthy-tests-report/index.md
deleted file mode 100644
index 58298c4eacf..00000000000
--- a/chromium/docs/website/site/for-testers/unhealthy-tests-report/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs:
-- - /for-testers
- - For Testers
-page_name: unhealthy-tests-report
-title: Unhealthy tests report
----
-
diff --git a/chromium/docs/website/site/geforce-now-on-chromebooks/index.md b/chromium/docs/website/site/geforce-now-on-chromebooks/index.md
deleted file mode 100644
index 603ecfc4914..00000000000
--- a/chromium/docs/website/site/geforce-now-on-chromebooks/index.md
+++ /dev/null
@@ -1,297 +0,0 @@
----
-breadcrumbs: []
-page_name: geforce-now-on-chromebooks
-title: NVIDIA GeForce NOW on Chromebooks
----
-
-Chromebooks launched after June 2017 are eligible for 3 additional months of the
-NVIDIA GeForce NOW founders membership. Here is a list of Chromebooks launched
-before June 2017.
-
-<table>
-<tr>
-
-<td>Devices released before June 2017</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB3-531)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB3-532)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 13 (CB5-311, C810)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook R11 (CB5-132T, C738T)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 14 (CB3-431)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C730E)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 14 for Work (CP5-471)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C740)</td>
-
-</tr>
-<tr>
-
-<td>Acer C7 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 11 (C720, C720P)</td>
-
-</tr>
-<tr>
-
-<td>Acer Chromebook 15 (CB5-571, C910)</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook Flip C302</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C300</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C200</td>
-
-</tr>
-<tr>
-
-<td>ASUS Chromebook C202SA</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 13 (3380)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11 (3120)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11 (3180)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 13 (7310)</td>
-
-</tr>
-<tr>
-
-<td>Dell Chromebook 11</td>
-
-</tr>
-<tr>
-
-<td>Google Chromebook Pixel</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 14 G3</td>
-
-</tr>
-<tr>
-
-<td>HP Pavilion Chromebook 14</td>
-
-</tr>
-<tr>
-
-<td>Haier Chromebook 11 G2</td>
-
-</tr>
-<tr>
-
-<td>CTL J5 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 14</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 2100-2199</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G3</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 13 G1</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G2</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G1</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook 11 G5</td>
-
-</tr>
-<tr>
-
-<td>HP Chromebook x360 11 G1 EE</td>
-
-</tr>
-<tr>
-
-<td>ASI Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Bobicus Chromebook 11</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Chromebook N23 Yoga</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 11e 4th Gen Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo N20 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 11e Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo 100S Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Chromebook N23</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 13 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Lenovo Thinkpad X131e Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Plus</td>
-
-</tr>
-<tr>
-
-<td>Lenovo ThinkPad 11e 3rd Gen Chromebook</td>
-
-</tr>
-<tr>
-
-<td>CTL NL61 Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Pro</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 3</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook Series 5 550</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 13"</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 11"</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook - XE303</td>
-
-</tr>
-<tr>
-
-<td>Samsung Chromebook 2 11" - XE500C12</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook 2 (2015 Edition)</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook</td>
-
-</tr>
-<tr>
-
-<td>Toshiba Chromebook 2</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/getting-involved/become-a-committer/index.md b/chromium/docs/website/site/getting-involved/become-a-committer/index.md
deleted file mode 100644
index a7f07ea4cdf..00000000000
--- a/chromium/docs/website/site/getting-involved/become-a-committer/index.md
+++ /dev/null
@@ -1,199 +0,0 @@
----
-breadcrumbs:
-- - /getting-involved
- - Getting Involved
-page_name: become-a-committer
-title: Become a Committer
----
-
-## [TOC]
-
-## What is a committer?
-
-Technically, a committer is someone who has write access to the Chromium src Git
-repository. A committer can submit their own patches or patches from others.
-
-This privilege is granted with some expectation of responsibility: committers
-are people who care about the Chromium projects and want to help them meet their
-goals. A committer is not just someone who can make changes, but someone who has
-demonstrated their ability to collaborate with the team, get the most
-knowledgeable people to review code, contribute high-quality code, and follow
-through to fix issues (in code or tests).
-
-A committer is a contributor to the Chromium projects' success and a citizen
-helping the projects succeed. See [Committer's
-responsibility](/developers/committers-responsibility).
-
-What is written below applies to the main Chromium source repos; see the note at
-the bottom for ChromiumOS, which has different policies. For some other Chromium
-repos (e.g., the infra repos), we follow the same policies as the main Chromium
-repos, but have different lists of actual committers. Certain other repos may
-have different policies altogether. When in doubt, ask one of the OWNERS of the
-repo in question.
-
-## Becoming a committer
-
-In a nutshell, contribute 10-20 non-trivial patches in the [Chromium
-src](https://chromium.googlesource.com/chromium/src/) Git repository, and get at
-least three different people to review them (you'll need three people to support
-you). Then ask someone to nominate you. You're basically demonstrating your
-
-* commitment to the project (10+ good patches requires a lot of your
- valuable time),
-* ability to collaborate with the team,
-* understanding of how the team works (policies, processes for testing
- and code review,
- [OWNERS](http://www.chromium.org/developers/owners-files) files,
- etc),
-* understanding of the projects' code base and coding style, and
-* ability to write good code (last but certainly not least)
-
-A current committer nominates you by sending email to committers@chromium.org
-containing the following information. Please do not CC the nominee on the
-nomination email.
-
-* your first and last name
-* your email address. You can also ask to get an @chromium.org email
- address at this time, if you don't already have one (see below).
-* an explanation of why you should be a committer,
-* embedded list of links to revisions (about top 10) containing your
- patches
-
-Two other committers need to second your nomination. If no one objects in 5
-working days (U.S.), you're a committer. If anyone objects or wants more
-information, the committers discuss and usually come to a consensus (within the
-5 working days). If issues can't be resolved, there's a vote among current
-committers.
-
-That's it! There is no further action you need to take on your part. The
-committers will get back to you once they make a decision.
-
-In the worst case, this can drag out for two weeks. Keep writing patches! Even
-in the rare cases where a nomination fails, the objection is usually something
-easy to address like "more patches" or "not enough people are familiar with this
-person's work."
-
-Once you get approval from the existing committers, we'll send you instructions
-for write access to Git. You'll also be added to committers@chromium.org. If you
-work for Google, you are expected to [become a
-sheriff](/developers/tree-sheriffs) at this point as well (see the internal
-instructions for how to add yourself to the rotations).
-
-Historically, most committers have worked at least partially on the Chromium
-core product and thus demonstrated C++ coding ability in their CLs, but this is
-not required. It is possible to be a committer if you only work on other parts
-of the code base (e.g., build and test scripts in Python), but you still have to
-demonstrate that you understand the processes of the project with a list of CLs
-that you've landed. Committership is primarily a mark of trust, and we expect
-committers to only submit or approve changes that they are qualified to review.
-Failure to do so may result in your committership being revoked (also see below
-for other reasons that you might get your committership revoked).
-
-## Other statuses
-
-If you just want to edit bugs, see: [Get Bug-Editing
-Privileges](/getting-involved/get-bug-editing-privileges).
-
-### Getting a @chromium.org email address
-
-Many contributors to chromium have @chromium.org email addresses. These days, we
-tend to discourage people from getting them, as creating them creates some
-additional administrative overhead for the project and have some minor security
-implications, but they are available for folks who want or need them.
-
-At this time there are only a few fairly rare cases where you really need one:
-
-* If you are an employee of a company that will not let you create
- public Google Docs, and you wish to do so (e.g., to share public
- design specs). Often you can work around this by having someone with
- an account create the document for you and give you editing
- privileges on it.
-* If you need to do Chromium/ChromiumOS-related work on mailing lists
- that for some reason tend to mark email addresses from your normal
- email address as spam and you can't fix that (some mail servers are
- known to have problems with DMARC, for example).
-
-It is also fine to get a @chromium.org address if you simply don't want your
-primary email addresses to be public. Be aware, however, that if you're being
-paid to contribute to Chromium your employer may wish you to use a specific
-email address to reflect that.
-
-You can get a @chromium.org email address by getting an existing contributor to
-ask for one for you; normally it's a good idea to do this as part of being
-nominated to be a committer. Include in your request what account name you'd
-like and what secondary email we can use to associate it with (and what company
-you are affiliated with, if you wish to make that clear; we track this
-affiliating internally but it isn't publicly visible). People tend to match
-usernames (for example, someone who usually uses email@example.com would ask for
-email@chromium.org) to minimize confusion, but you are not required to do so and
-some people do not.
-
-### Try job access
-
-If you are contributing patches but not (yet) a committer, you may wish to be
-able to run jobs on the [try servers](/developers/testing/try-server-usage)
-directly rather than asking a committer or reviewer to do so for you. There are
-two potential scenarios:
-
-You have an @chromium.org email address and wish to use it for your account:
-
-* If you have an @chromium.org email address, you most likely already
- have try job access. If for some reason you do not, please send an
- email to accounts@chromium.org with a brief explanation of why you'd
- like access.
-
-You do not have an @chromium.org email address, or wish to use a different email
-address. If this is your situation, the process to obtain try job access is the
-following:
-
-* Ask someone you're working with (a frequent reviewer, for example)
- to send email to accounts@chromium.org nominating you for try job
- access.
-* You must provide an email address and at least a brief explanation
- of why you'd like access.
-* It is helpful to provide a name and company affiliation (if any) as
- well.
-* It is very helpful to have already had some patches landed, but is
- not absolutely necessary.
-
-If no one objects within two (U.S.) working days, you will be approved for
-access. It may take an additional few days for the grant to propagate to all of
-the systems (e.g., Rietveld) and for you to be notified that you're all set.
-
-Googlers can look up the committers list
-[here](https://goto.google.com/chromium-committers).
-
-## Maintaining committer status
-
-A community of committers working together to move the Chromium projects forward
-is essential to creating successful projects that are rewarding to work on. If
-there are problems or disagreements within the community, they can usually be
-solved through open discussion and debate.
-
-In the unhappy event that a committer continues to disregard good citizenship
-(or actively disrupts the project), we may need to revoke that person's status.
-The process is the same as for nominating a new committer: someone suggests the
-revocation with a good reason, two people second the motion, and a vote may be
-called if consensus cannot be reached. I hope that's simple enough, and that we
-never have to test it in practice.
-
-In addition, as a security measure, if you are inactive on Gerrit for more than
-a year, we may revoke your committer privileges and remove your email
-address(es) from any OWNERS files. This is not meant as a punishment, so if you
-wish to resume contributing after that, contact accounts@ to ask that it be
-restored, and we will normally do so. This does not mean that we will shut off
-your @chromium.org address, if you have one; that should continue to work.
-
-If you have questions about your committer status, overall, please contact
-accounts@chromium.org.
-
-\[Props: Much of this was inspired by/copied from the committer policies of
-[WebKit](http://www.google.com/url?q=http%3A%2F%2Fwebkit.org%2Fcoding%2Fcommit-review-policy.html&sa=D&sntz=1&usg=AFrqEze4W4Lvbhue4Bywqgbv-N5J66kQgA)
-and
-[Mozilla](http://www.google.com/url?q=http%3A%2F%2Fwww.mozilla.org%2Fhacking%2Fcommitter%2F&sa=D&sntz=1&usg=AFrqEzecK7iiXqV30jKibNmmMtzHwtYRTg).\]
-
-## Chromium OS Commit Access (Code-Review +2)
-
-Note that any registered user can do Code-Review +1. Only access to Code-Review
-+2 in Chromium OS repos is restricted to Googlers and managed by team lead
-[nominations](http://go/new-cros-committer-nomination). \ No newline at end of file
diff --git a/chromium/docs/website/site/getting-involved/bug-triage/index.md b/chromium/docs/website/site/getting-involved/bug-triage/index.md
deleted file mode 100644
index e56566e075d..00000000000
--- a/chromium/docs/website/site/getting-involved/bug-triage/index.md
+++ /dev/null
@@ -1,183 +0,0 @@
----
-breadcrumbs:
-- - /getting-involved
- - Getting Involved
-page_name: bug-triage
-title: Triaging Bugs
----
-
-You don’t have to be a programmer to contribute to the Chromium project. There
-are always new bugs coming in, and those bugs need to be clarified, confirmed,
-and routed to the right people before process of getting them fixed can even
-begin.
-If you are interested in helping with this important part of the project, here
-are a few ways you can get started. Everything listed here except the parts in
-italics and the "Categorizing bugs" section is something anyone can jump in and
-start doing. Once you have been triaging for a while, you may want to consider
-[getting permissions to edit bugs](/getting-involved/get-bug-editing-privileges)
-so that you can do even more.
-
-[TOC]
-
-## Finding duplicates
-
-Many of the bugs that are filed are duplicates of existing bugs. Look through
-the [unconfirmed
-bugs](http://code.google.com/p/chromium/issues/list?can=2&q=status:unconfirmed&sort=-id&colspec=ID%20Stars%20Area%20Feature%20Status%20Summary%20Modified%20OS)
-for any that are already filed.
-
-* If you can edit bugs: Close the new bug as a duplicate of the
- existing bug. If there are several new duplicates of each other with
- no established bug, use the one with the most information.
-* If you can’t edit bugs, leave a comment with the number of the bug
- it’s a duplicate of. Be sure to say “bug 12345” or “issue 12345”
- instead of just the number, so the bug system will make it a link.
-
-The more you triage bugs, the more duplicates you will recognize immediately. If
-you suspect something might be a duplicate but aren’t sure (such as with a
-feature request that seems likely to have been made before), search for as many
-of the variants of the key words in the bug as you can think of. Be sure to
-search “All issues”, not the default of “Open issues” so that you can find
-WontFixed bugs and other duplicates.
-
-## Clarifying and/or reproducing bugs
-
-Knowing how to reproduce a bug is the first step toward fixing it. The bug
-template encourages people to provide steps to reproduce a bug, but sometimes
-the steps are missing, unclear, or just don’t work for everyone. Note that if
-something is clearly a feature request, rather than a bug report, you should
-skip this step.
-
-Look through the [unconfirmed
-bugs](http://code.google.com/p/chromium/issues/list?can=2&q=status:unconfirmed&sort=-id&colspec=ID%20Stars%20Area%20Feature%20Status%20Summary%20Modified%20OS)
-for reports that nobody has tried to reproduce.
-
-* If you can reproduce the bug:
- * Leave a comment saying so, and include your Chromium version and
- OS.
- * If the steps were unclear, it’s helpful to leave more detailed
- steps.
- * If you weren’t testing with the latest version of Chromium, try
- there, and see if it’s still reproducible, and add that
- information to your comment as well.
- * If the bug is with web content, and you have access to browsers
- that the reporter didn’t test, try with those browsers and
- report your results.
- * If you can edit bugs, and have tried to make sure that it’s not
- a duplicate, change it from Unconfirmed to Untriaged.
-* If you feel that the steps were clear but you couldn’t reproduce the
- bug:
- * Leave a comment saying that you couldn’t reproduce it, including
- your Chromium version and OS.
- * **Note:** If you are using an older version of Chromium than
- the reporter, you should do this only if you **can**
- reproduce it with a newer version (indicating a regression).
- * If you were using a different version of Chromium, and have
- access to the version it was reported with, try with that
- version.
- * If the reporter doesn’t say what version they are using, ask for
- that information. If the bug is related to OS-specific code
- (browser chrome, plugins, etc.), ask for their OS if it’s not in
- the report.
- * If there is any other clarifying information that you think
- would help, ask for that.
-* If the steps and/or results are missing or unclear, so that you
- can’t tell either what the bug is, or how to reproduce it:
- * Ask for details. Be specific about what you need to know, as
- people often leave out steps without realizing it because
- something is obvious to them.
- * If it would be helpful, ask for a screenshot of the bug.
- * If you can edit bugs: Add the Needs-Feedback label.
-
-## Cleaning up old bugs
-
-While it’s most important to get new bugs triaged, as they are most likely to be
-relevant, there are also a number of old bugs that nobody has had time to follow
-up on. It can be helpful to go through old unconfirmed bugs to weed out the ones
-that aren’t relevant any more. All the advice above applies, but there are a few
-extra things to consider with old bugs:
-
-* If you can’t reproduce the bug, ask the user if they can still
- reproduce the bug with a current version of Chromium.
-* For feature requests, if the request is about feature that has
- changed enough that the request no longer applies, add a comment
- saying so.
- * If you can edit bugs: Close the bug as WontFix (which we use for
- obsolete bugs)
-* If the bug doesn’t contain enough information to be confirmed and
- someone has asked for clarifying information that was never
- provided, politely ask again for that information.
- * If you can edit bugs:
- * If the bug has been waiting for information for over a
- month, and there has already been at least one reminder, add
- a comment saying that the bug is being closed due to lack of
- response and that a new bug should be filed with the
- requested information if it’s still reproducible, then close
- the bug as WontFix.
- * Otherwise, add the Needs-Feedback label if it’s not already
- there.
-
-## Creating reduced test cases
-
-For bugs that are about compatibility with specific sites, creating a reduced
-test case is extremely helpful. If you are familiar with HTML, CSS, and/or
-Javascript, this is a great way to use your skills to help improve Chromium.
-
-Look through the
-[Compat](http://code.google.com/p/chromium/issues/list?can=2&q=area:compat&sort=-id&colspec=ID%20Stars%20Pri%20Area%20Feature%20Type%20Status%20Summary%20Modified%20Owner%20Mstone%20OS)
-bugs for issues that haven’t already been tracked down to a specific problem—the
-Needs-Reduction label is helpful in finding these, but it doesn’t always get
-added. Once you can reproduce a problem, [try to
-isolate](/system/errors/NodeNotFound) exactly what in the
-HTML/CSS/JavaScript/etc. is responsible for the failure.
-
-* If the problem is that the site is doing something wrong:
- * Explain in detail what is causing the problem.
- * Suggest that the bug reporter contact the site to let them know
- about the problem.
- * If you can edit bugs: Add the **Needs-**Evangelism label.
-* If the problem is due to a bug in Chromium:
- * Explain in detail what is isn’t working right.
- * If possible, attach a minimal test case that demonstrates the
- underlying bug.
- * If possible, test with Safari as well to see if the bug happens
- there, and report your results
- * If you can edit bugs: change the component field to Blink. If
- its status is Unconfirmed, change it to Untriaged.
-
-## Categorizing bugs
-
-Once you can [edit bugs](/getting-involved/get-bug-editing-privileges), giving
-bugs the correct labels helps them move through the triage process faster. There
-are a lot of labels, here are the most important for incoming bugs:
-
-* If the bug has no Components, please assign it to a bucket:
- * Blink == Web Content
- * Internals == Internals (Network stack, plugins, etc...)
- * Platform == Chrome's Developer Platform and Tools (Ext, AppsV2,
- NaCl, DevTools)
- * UI&gt;Shell == ChromeOS Shell/ Window Manager
- * UI&gt;Browser == Browser
- * OS&gt;Hardware
- * OS&gt;Kernel
- * OS&gt;Systems
- * If the bug/feature is about specific web technology, add the
- appropriate Blink&gt;\* sub component instead.
- * If the bug is about a web site not working correctly, and hasn’t
- been narrowed down to a specific cause, use Type-Compat, and add
- **Needs-Reduction**.
- * Try to find the best match; if it’s borderline, use your best
- guess.
-* If the bug is about a crash or hang, add the **Stability-**Crash or
- **Stability-Hang** label.
-* If the bug is about a language translation, add the
- **UI&gt;Localization** component.
-* If the bug is in an area that tends to be OS-specific (browser
- chrome, plugins), and the report includes the OS (or you can tell
- from a screenshot), add the appropriate OS-\* label. If there’s no
- reason to believe the bug is OS-specific, or if it’s a feature
- request, it’s best not to add an OS label.
-
-Most of the remaining labels are very specialized, and it’s best not to use them
-unless you know otherwise. Never add or change ReleaseBlock-\* or Milestone-\*
-labels. \ No newline at end of file
diff --git a/chromium/docs/website/site/getting-involved/dev-channel/index.md b/chromium/docs/website/site/getting-involved/dev-channel/index.md
deleted file mode 100644
index a5549ef0bd9..00000000000
--- a/chromium/docs/website/site/getting-involved/dev-channel/index.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-breadcrumbs:
-- - /getting-involved
- - Getting Involved
-page_name: dev-channel
-title: Chrome Release Channels
----
-
-[TOC]
-
-Chrome supports a number of different release channels. We use these channels to
-slowly roll out updates to users, starting with our close to daily Canary
-channel builds, all the way up to our Stable channel releases that happen every
-6 weeks roughly.
-
-### Channels
-
-#### Windows 64-bit
-
-All channels may be run in parallel -- they install into distinct directories
-and use dedicated User Data directories.
-
-* [Stable channel for Windows
- (64-bit)](https://www.google.com/chrome/browser/?platform=win64)
-* [Beta channel for Windows
- (64-bit)](https://www.google.com/chrome/browser/beta.html?platform=win64)
-* [Dev channel for Windows
- (64-bit)](https://www.google.com/chrome/browser/index.html?extra=devchannel&platform=win64)
-* [Canary build for Windows
- (64-bit)](https://www.google.com/chrome/browser/canary.html?platform=win64)
-
-#### Windows 32-bit
-
-All channels may be run in parallel -- they install into distinct directories
-and use dedicated User Data directories.
-
-* [Stable channel for Windows
- (32-bit)](https://www.google.com/chrome/browser/?platform=win)
-* [Beta channel for Windows
- (32-bit)](https://www.google.com/chrome/browser/beta.html?platform=win)
-* [Dev channel for Windows
- (32-bit)](https://www.google.com/chrome/browser/index.html?extra=devchannel&platform=win)
-* [Canary build for Windows
- (32-bit)](https://www.google.com/chrome/browser/canary.html?platform=win)
-
-#### Mac
-
-All channels may be run in parallel -- they install into distinct directories
-and use dedicated User Data directories.
-
-* [Stable channel for
- Mac](https://www.google.com/chrome/browser/?platform=mac)
-* [Beta channel for
- Mac](https://www.google.com/chrome/browser/beta.html?platform=mac&extra=betachannel)
-* [Dev channel for
- Mac](https://www.google.com/chrome/browser/?platform=mac&extra=devchannel)
-* [Canary build for
- Mac](https://www.google.com/chrome/browser/canary.html?platform=mac)
-
-#### Android
-
-* [Stable channel for
- Android](https://play.google.com/store/apps/details?id=com.android.chrome)
-* [Beta channel for
- Android](https://play.google.com/store/apps/details?id=com.chrome.beta)
-* [Dev channel for
- Android](https://play.google.com/store/apps/details?id=com.chrome.dev)
-* [Canary channel for
- Android](https://play.google.com/store/apps/details?id=com.chrome.canary)
-
-#### iOS
-
-* [Stable channel for
- iOS](https://itunes.apple.com/us/app/chrome-web-browser-by-google/id535886823?mt=8)
-* [Beta channel for iOS](https://testflight.apple.com/join/LPQmtkUs)
-
-#### Linux
-
-* [Stable
- channel](https://www.google.com/chrome/browser/?platform=linux)
-* [Beta
- channel](https://www.google.com/chrome/browser/beta.html?platform=linux)
-* [Dev
- channel](https://www.google.com/chrome/browser/?platform=linux&extra=devchannel)
-
-### How do I choose which channel to use?
-
-The release channels for chrome range from the most stable and tested (Stable
-channel) to completely untested and likely least stable (Canary channel). You
-can run all channels alongside all others, as they do not share profiles with
-one another. This allows you to play with our latest code, while still keeping a
-tested version of Chrome around.
-
-* **Stable channel:** This channel has gotten the full testing and
- blessing of the Chrome test team, and is the best bet to avoid
- crashes and other issues. It's updated roughly every two-three weeks
- for minor releases, and every 6 weeks for major releases.
-* **Beta channel:** If you are interested in seeing what's next, with
- minimal risk, Beta channel is the place to be. It's updated every
- week roughly, with major updates coming every six weeks, more than a
- month before the Stable channel will get them.
-* **Dev channel:** If you want to see what's happening quickly, then
- you want the Dev channel. The Dev channel gets updated once or twice
- weekly, and it shows what we're working on right now. There's no lag
- between major versions, whatever code we've got, you will get. While
- this build does get tested, it is still subject to bugs, as we want
- people to see what's new as soon as possible.
-* **Canary build:** Canary builds are the bleeding edge. Released
- daily, this build has not been tested or used, it's released as soon
- as it's built.
-* **Other builds:** If you're extra brave, you can download the latest
- working (and that's a very loose definition of working) build from
- [download-chromium.appspot.com](https://download-chromium.appspot.com/).
- You can also look for a more specific recent build by going to [the
- Chromium continuous build waterfall](http://build.chromium.org),
- looking at the number near the top under "LKGR", and then going to
- [this Google Storage
- bucket](http://commondatastorage.googleapis.com/chromium-browser-continuous/index.html)
- and downloading the corresponding build.
-
-**Note**: Early access releases (Canary builds and Dev and Beta channels) will
-be only partly translated into languages other than English. Text related to new
-features may not get translated into all languages until the feature is released
-in the Stable channel.
-
-### What should I do before I change my channel?
-
-#### Back up your data!
-
-Before you switch, you should make a backup of your profile (bookmarks, most
-visited pages, history, cookies, etc). If you ever want to switch back to a more
-stable channel, your updated profile data might not be compatible with the older
-version.
-Make a copy of the User Data\\Default directory (for example, copy it to
-'Default Backup' in the same location). The location depends on your operating
-system:
-> Windows XP:
-
-> * Stable, beta, and dev channels: \\Documents and
- Settings\\%USERNAME%\\Local Settings\\Application
- Data\\Google\\Chrome\\User Data\\Default
-> * Canary builds: \\Documents and Settings\\%USERNAME%\\Local
- Settings\\Application Data\\Google\\Chrome SxS\\User Data\\Default
-
-> Windows Vista, 7, 8 or 10:
-
-> * Stable channel:
- \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome\\User
- Data\\Default
-> * Beta channel: \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome
- Beta\\User Data\\Default
-> * Dev channel: \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome
- Dev\\User Data\\Default
-> * Canary builds: \\Users\\%USERNAME%\\AppData\\Local\\Google\\Chrome
- SxS\\User Data\\Default
-
-> Mac OS X:
-
-> * Stable channels, as well as older beta and dev channels:
- ~/Library/Application Support/Google/Chrome/Default
-> * Beta channel: ~/Library/Application Support/Google/Chrome
- Beta/Default
-> * Dev channel: ~/Library/Application Support/Google/Chrome
- Dev/Default
-> * Canary builds: ~/Library/Application Support/Google/Chrome
- Canary/Default
-
-> Linux:
-
-> * ~/.config/google-chrome/Default
-
-Note:If you're using Explorer to find the folder, you might need to set **Show
-hidden files and folders** in **Tools &gt; Folder Options... &gt; View**.
-
-### Reporting Dev channel and Canary build problems
-
-Remember, Dev channel browsers and Canary builds may still crash frequently.
-Before reporting bugs, consult the following pages:
-
-* [Bug Life Cycle and Reporting
- Guidelines](/for-testers/bug-reporting-guidelines)
-* See [
- bug-reporting-guidlines-for-the-mac-linux-builds](/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds)
- before reporting problems in Mac or Linux Dev channel builds
-
-<https://crbug.com/new> If after reading the above, you think you have a real bug, file it -
-
-### Going back to a more stable channel
-
-* If you decide to switch from Dev to Beta or from Beta to Stable, the
- new channel will be on an earlier version of Google Chrome. You
- won't get automatic updates on that channel until it reaches a
- version later than what you're already running.
-* You can uninstall Google Chrome and re-install from
- <https://www.google.com/chrome> to go back to an earlier version.
-* If you re-install an older version, you might find that your profile
- is not compatible (because the data formats changed in the newer
- version you had been running). You'll have to delete your profile
- data. Delete the User Data\\Default folder (see the Before You
- Change Channels section above for the location). If you made a back
- up of your Default directory, you can then rename it to Default so
- that you at least restore some of your previous bookmarks, most
- visited pages, etc.
-* If the installer fails when you attempt to install an older version
- with a message indicating that your computer already has a more
- recent version of Chrome or Chrome Frame, you must also uninstall
- Chrome Frame. After doing so, the older version of Chrome should
- install without difficulty. \ No newline at end of file
diff --git a/chromium/docs/website/site/getting-involved/dev-channel/wrench.png.sha1 b/chromium/docs/website/site/getting-involved/dev-channel/wrench.png.sha1
deleted file mode 100644
index 77108455354..00000000000
--- a/chromium/docs/website/site/getting-involved/dev-channel/wrench.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f942169edbc2fa5b5ad0ac0893195ae74c81ca48 \ No newline at end of file
diff --git a/chromium/docs/website/site/getting-involved/download-chromium/index.md b/chromium/docs/website/site/getting-involved/download-chromium/index.md
deleted file mode 100644
index 9106230bee3..00000000000
--- a/chromium/docs/website/site/getting-involved/download-chromium/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /getting-involved
- - Getting Involved
-page_name: download-chromium
-title: Download Chromium
----
-
-You can test Chrome builds or Chromium builds. Chrome builds have the most
-infrastructure for analyzing crashes and reporting bugs. They also auto-update
-as new releases occur, which makes them a good choice for most uses. [Chrome
-Canary](https://tools.google.com/dlpage/chromesxs) is available for Windows and
-Mac and autoupdates daily. [Other channels](/getting-involved/dev-channel/) (dev
-and beta) are available.
-
-Chromium builds do not auto-update, and do not have symbols. This makes them
-most useful for checking whether a claimed fix actually works. Use the following
-instructions to find builds:
-
-### Easy Point and Click for latest build:
-
-> Open up <https://download-chromium.appspot.com>
-
-### Easy Script to download and run latest Linux build:
-
-* <https://github.com/scheib/chromium-latest-linux>
-
-### Not-as-easy steps:
-
-1. Head to
- <https://commondatastorage.googleapis.com/chromium-browser-snapshots/>
-2. Choose your platform: Mac, Win, Linux, ChromiumOS
-3. Pick the Chromium build number you'd like to use
- 1. The latest one is mentioned in the `LAST_CHANGE` file
-4. Download the zip file containing Chromium
-5. There is a binary executable within to run
-
-### Please [file bugs](https://crbug.com/new) as appropriate.
-
-## Downloading old builds of Chrome / Chromium
-
-Let's say you want a build of Chrome 44 for debugging purposes. Google does not
-offer old builds as they do not have up-to-date security fixes.
-
-However, you can get a build of Chromium 44.x which should mostly match the
-stable release.
-
-Here's how you find it:
-
-1. Look in
- <https://googlechromereleases.blogspot.com/search/label/Stable%20updates>
- for the last time "44." was mentioned.
-2. Loop up that version history ("44.0.2403.157") in the [Position
- Lookup](https://omahaproxy.appspot.com/)
-3. In this case it returns a base position of "330231". This is the
- commit of where the 44 release was branched, back in May 2015.\*
-4. Open the [continuous builds
- archive](https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html)
-5. Click through on your platform (Linux/Mac/Win)
-6. Paste "330231" into the filter field at the top and wait for all the
- results to XHR in.
-7. Eventually I get a perfect hit:
- <https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Mac/330231/>
- 1. Sometimes you may have to decrement the commit number until you
- find one.
-8. Download and run!
-
-\* As this build was made at 44 branch point, it does not have any commits
-merged in while in beta.
-
-Typically that's OK, but if you need a true build of "44.0.*2403*.x" then you'll
-need to build Chromium from the *2403* branch. Some
-PortableApps/PortableChromium sites offer binaries like this, due to security
-concerns, the Chrome team does not recommend running them. \ No newline at end of file
diff --git a/chromium/docs/website/site/getting-involved/get-bug-editing-privileges/index.md b/chromium/docs/website/site/getting-involved/get-bug-editing-privileges/index.md
deleted file mode 100644
index 57e79a34bbf..00000000000
--- a/chromium/docs/website/site/getting-involved/get-bug-editing-privileges/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /getting-involved
- - Getting Involved
-page_name: get-bug-editing-privileges
-title: Get Bug-Editing Privileges
----
-
-#### [TOC]
-
-## What are bug-editing privileges?
-
-Anyone can file bugs and add comments to bugs, but some things—adding labels,
-marking duplicates, changes status—require extra permissions.
-There’s [plenty you can do to help with triage](/getting-involved/bug-triage)
-without any extra permissions, but if you are doing a lot of triage you can be
-even more effective if you can edit bugs. Just as with [becoming a
-committer](/getting-involved/become-a-committer), however, these extra
-permissions comes with an expectation of responsibility.
-
-## How do I get bug-editing privileges?
-
-***Note:** The instructions below are for someone who is getting involved
-specifically through triage. If you need bug editing permissions for some other
-reason, and someone on the Chromium team can vouch for you, that person should
-nominate you directly via the committers@chromium.org list.*
-
-First, spend at least a few weeks triaging bugs as described in the [triage
-guidelines](/getting-involved/bug-triage), doing the parts that don't require
-extra permissions and aiming to make significant contributions to at least 20-30
-bugs. This is to demonstrate that you are committed to helping triage bugs, that
-you understand the triage process, and that you can work with the rest of the
-Chromium community.
-Once you’ve done that, email a Chromium contributor who is familiar with your
-triage work (for instance, a developer who has worked with some of the bugs you
-have triaged) and ask them to review your triage contributions; include a
-reference to this page since they may not be familiar with the process. They
-should either provide feedback, or start the formal nomination process with the
-committers list (if they aren't sure how to evaluate, or nominate, they can
-email accounts@ to ask for help). As with becoming a committer, the final
-decision will be made by the committers@chromium.org list.
-A few things to keep in mind while you are getting started with triage, which
-will help ensure that the nomination process goes smoothly:
-
-* Be polite in bugs. When you triage bugs, your comments will often be
- seen by bug reporters as representing the Chromium project.
-* Be professional. Again, your comments will be viewed in a different
- light when you have more privileges in the bug system. Don’t make
- disparaging comments about specific sites, browsers, people, etc.
-* Keep triaging separate from opinion. You may not agree with a
- feature request or a claim that a certain behavior is a bug, but as
- a triager your job is to get that bug routed to the right people to
- evaluate it, not to make a decision about whether it should be
- implemented.
-
-Once your nomination is approved, you will receive a follow-up email with
-instructions for enabling your new permissions.
-
-**Googler?** You can request a Chromium account or join the
-*chromium-bug-access* group. \ No newline at end of file
diff --git a/chromium/docs/website/site/getting-involved/index.md b/chromium/docs/website/site/getting-involved/index.md
deleted file mode 100644
index 3ca39bfd299..00000000000
--- a/chromium/docs/website/site/getting-involved/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs: []
-page_name: getting-involved
-title: Getting Involved
----
-
-Here are some ways you can get involved with Chromium:
-
-* Join some of our [developer discussion groups](/developers/discussion-groups)
-* Visit the [Help
- Center](https://productforums.google.com/forum/#!forum/chrome) and
- answer users' questions
-* Help with [Testing](/for-testers)
- * Provide [reduced test cases](/system/errors/NodeNotFound) to
- help improve web compatibility
- * Get on the [Beta or Dev channel](/getting-involved/dev-channel)
- or grab the [latest trunk build of
- Chromium](/getting-involved/download-chromium)
- * [File bugs](http://code.google.com/p/chromium/issues/entry)
- * [Triage bugs](/getting-involved/bug-triage) to make existing bug
- reports more useful
- * [Report
- translation](http://code.google.com/p/chromium/issues/entry?template=Translation%20Issue)
- issues
-* Develop Chromium
- * See the pages for [Developers](/developers)
- * Read the [Life of a Chromium
- Developer](https://docs.google.com/presentation/d/1abnqM9j6zFodPHA38JG1061rG2iGj_GABxEDgZsdbJg)
- introduction and the [Contributing](/developers/contributing-code) page
- * Adopt a bug that's marked
- [GoodFirstBug](http://code.google.com/p/chromium/issues/list?q=Hotlist:GoodFirstBug&can=2)
- * Submit [patches](/developers/contributing-code) (submit enough
- and you can [become a committer](/getting-involved/become-a-committer)!)
- * Optionally apply for a Chromium account by emailing
- [accounts@chromium.org](mailto:accounts@chromium.org) (Note: you
- must already be approved as a committer) (if you're a Googler,
- click [here](https://docs.google.com/forms/d/e/1FAIpQLSfihgUcSmNz3g1iGIyHX-n9NWUi2oCuMh8JtKJGR2gPZiQnKw/viewform)
- instead)
diff --git a/chromium/docs/website/site/getting-involved/summerofcode2013/index.md b/chromium/docs/website/site/getting-involved/summerofcode2013/index.md
deleted file mode 100644
index 0992175dce6..00000000000
--- a/chromium/docs/website/site/getting-involved/summerofcode2013/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-breadcrumbs:
-- - /getting-involved
- - Getting Involved
-page_name: summerofcode2013
-title: SummerOfCode2013
----
-
-**Mentors**
-
-Add your ideas below with your name as a possible mentor. [Register with GSOC as
-a
-mentor](https://google-melange.appspot.com/gsoc/profile/mentor/google/gsoc2013?org=chromium)
-using your chromium.org account.
-
-**Students**
-
-Since Chromium is a huge project and Summer of Code is in just a few months, you
-will be a lot more successful tackling these projects if you contributed patches
-to Chromium before.
-
-The [For Developers page](/developers) contains information on how to check out
-the source code and build Chromium.
-
-Here are a few project ideas you might want to work on:
-
-**Improvements to flakiness dashboard**
-
-Possible mentors: Ojan Vafai
-
-Chromium has a dashboard for flaky tests. If many tests fail in one run,
-appengine times out during results upload. This should be fixed.
-
-<http://crbug.com/224008>
-
-**De-flake Instant Extended browser tests, write unit tests**
-
-Possible mentors: ?
-
-The new Instant Extended feature has some browser tests that are flaky, and
-could also use unit tests.
-
-**Debug disabled tests**
-
-Possible mentors: ?
-
-Many of our tests are marked as DISABLED_. Debug the ones that fail reliably,
-fix whatever bugs you uncover, and enable the test again.
-
-**Improvements to the Dr. Memory memory debugging tool**
-
-Possible mentors: Derek Bruening, Qin Zhao
-
-Dr. Memory finds memory-based errors (buffer overflows, use-after-free, etc.) in
-Chromium code on Windows. The tool needs additional work in order to find
-uninitialized reads on graphical Chromium tests and running the full browser
-without false positives. See [further information and a list of Dr.
-Memory-specific projects](http://code.google.com/p/drmemory/wiki/Projects).
-
-**SPDY compliance tests**
-
-Possible mentors: Fred Akalin
-
-It would be really useful to have a suite of tests to validate that a SPDY
-client or server conforms to the spec. httpbis (the next version of HTTP) will
-be based on SPDY, so this work could dovetail into compliance tests for httpbis
-also. The best language for the tests is probably Python.
-
-**Your own idea!**
-
-If you have an idea you would like to propose, email
-[chromium-dev](https://groups.google.com/a/chromium.org/group/chromium-dev/topics?pli=1)
-with the following:
-
-* Your name
-* What school you go to / what year of school / what degree
-* One/two line proposal summary
-* Details
-* Possible mentors, if any \ No newline at end of file
diff --git a/chromium/docs/website/site/glossary/index.md b/chromium/docs/website/site/glossary/index.md
deleted file mode 100644
index 636c556dedd..00000000000
--- a/chromium/docs/website/site/glossary/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs: []
-page_name: glossary
-title: GLOSSARY
----
-
-Moved to
-<https://chromium.googlesource.com/chromiumos/docs/+/HEAD/glossary.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/hsts/email.png.sha1 b/chromium/docs/website/site/hsts/email.png.sha1
deleted file mode 100644
index 0afcb7647ad..00000000000
--- a/chromium/docs/website/site/hsts/email.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fbebb4217fd2484826df2459aa83583a4b77a598 \ No newline at end of file
diff --git a/chromium/docs/website/site/hsts/index.md b/chromium/docs/website/site/hsts/index.md
deleted file mode 100644
index 3a3511fd8ba..00000000000
--- a/chromium/docs/website/site/hsts/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs: []
-page_name: hsts
-title: HTTP Strict Transport Security
----
-
-[HTTP Strict Transport Security](https://tools.ietf.org/html/rfc6797) allows a
-site to request that it always be contacted over HTTPS. HSTS is supported in
-Google Chrome,
-[Firefox](https://blog.mozilla.org/security/2012/11/01/preloading-hsts/),
-Safari, Opera, Edge and
-[IE](https://web.archive.org/web/20150217020413/https://blogs.msdn.com/b/ie/archive/2015/02/16/http-strict-transport-security-comes-to-internet-explorer.aspx)
-(caniuse.com has a [compatibility
-matrix](https://caniuse.com/#feat=stricttransportsecurity)).
-
-The issue that HSTS addresses is that users tend to type `http://` at best, and
-omit the scheme entirely most of the time. In the latter case, browsers will
-insert `http://` for them.
-
-However, HTTP is insecure. An attacker can grab that connection, manipulate it
-and only the most eagle eyed users might notice that it redirected to
-`https://www.bank0famerica.com` or some such. From then on, the user is under the
-control of the attacker, who can intercept passwords, etc at will.
-
-An HSTS enabled server can include the following header in an HTTPS reply:
-
-```
-Strict-Transport-Security: max-age=16070400; includeSubDomains
-```
-
-When the browser sees this, it will remember, for the given number of seconds,
-that the current domain should only be contacted over HTTPS. In the future, if
-the user types `http://` or omits the scheme, HTTPS is the default. In fact, all
-requests for URLs in the current domain will be redirected to HTTPS. (So you
-have to make sure that you can serve them all!).
-
-For more details, see the [specification](https://tools.ietf.org/html/rfc6797).
-
-Preloaded HSTS sites
-
-There is still a window where a user who has a fresh install, or who wipes out
-their local state, is vulnerable. Because of that, Chrome maintains an "HSTS
-Preload List" (and other browsers maintain lists based on the Chrome list).
-These domains will be configured with HSTS out of the box.
-
-If you own a site that you would like to see included in the preloaded HSTS list
-you can submit it at <https://hstspreload.org>.
-
-Examining the HSTS list within the browser
-
-You can see the current HSTS Rules -- both dynamic (set by a response header)
-and static (preloaded) using a tool on the `about://net-internals#hsts` page.
-
-Check the source for the [full
-list](https://cs.chromium.org/chromium/src/net/http/transport_security_state_static.json).
-
-(To see the version of the list in a particular version of Chrome, visit [this
-URL](https://chromium.googlesource.com/chromium/src/+/__branch_commit__/net/http/transport_security_state_static.json)
-with `__branch_commit__` replaced by the hash of the relevant build from
-[here](https://omahaproxy.appspot.com/).) \ No newline at end of file
diff --git a/chromium/docs/website/site/index.md b/chromium/docs/website/site/index.md
deleted file mode 100644
index 32cf5f75405..00000000000
--- a/chromium/docs/website/site/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-redirect: /chromium-projects
----
diff --git a/chromium/docs/website/site/infra/index.md b/chromium/docs/website/site/infra/index.md
deleted file mode 100644
index 018842ee45d..00000000000
--- a/chromium/docs/website/site/infra/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-breadcrumbs: []
-page_name: infra
-title: Infra
----
-
-Infrastructure ('infra') refers to all of the servers and tools which the
-Chromium project depends on for development.
-
-Most of these are maintained at Google by a dedicated team, but (almost) all of
-these are modifiable by anyone in the Chromium project.
-
-To check out (most) of the Chromium Infra code use:
-
-```none
-fetch infra
-```
-
-Join [infra-dev@chromium.org](mailto:infra-dev@chromium.org) for discussion of
-Chromium infrastructure related issues.
-
-Most of the documentation is now at:
-<https://chromium.googlesource.com/infra/infra/+/HEAD/doc/index.md>.
-
-Google employees can also find more information at the [internal Chrome
-Infrastructure](https://sites.google.com/a/google.com/chrome-infrastructure/)
-site. \ No newline at end of file
diff --git a/chromium/docs/website/site/irc-support-faq/index.md b/chromium/docs/website/site/irc-support-faq/index.md
deleted file mode 100644
index cf137f057f9..00000000000
--- a/chromium/docs/website/site/irc-support-faq/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-breadcrumbs: []
-page_name: irc-support-faq
-title: IRC Support FAQ
----
-
-## What's the latest version?
-
-You can find out from <https://omahaproxy.appspot.com/viewer>, which displays
-the latest versions of each channel for each platform directly from the
-autoupdate service.
-
-## Where can I find old Chrome binaries?
-
-Chrome binaries are only available through the installer (available from
-<https://www.google.com/chrome>) and the autoupdate system. There is no official
-source of Chrome binaries older than the current stable channel, because:
-
-1. There are frequently unpatched security bugs in older versions,
- since patches are only backported to current stable/beta/dev at the
- time of patching.
-2. The support burden of supporting older channels, which often have
- bugs that are fixed in later channels, is very heavy.
-
-If you are a developer looking to build an old version to bisect a bug of check
-for a regression, please see the [developers
-page](http://www.chromium.org/developers). \ No newline at end of file
diff --git a/chromium/docs/website/site/irc/index.md b/chromium/docs/website/site/irc/index.md
deleted file mode 100644
index d4cc947f925..00000000000
--- a/chromium/docs/website/site/irc/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs: []
-page_name: irc
-title: irc
----
-
-As of 2021-06-16, the Chromium project has [formally moved off
-IRC](https://groups.google.com/a/chromium.org/g/chromium-dev/c/y9i16lBQ5bY) and
-will no longer maintain official IRC channels on Freenode or any other network.
-Developer conversations have moved to [Slack](/developers/slack); user
-conversations have moved to mailing lists; issue reports should go to the bug
-tracker. \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/autotriage/index.md b/chromium/docs/website/site/issue-tracking/autotriage/index.md
deleted file mode 100644
index a80cc68f8d8..00000000000
--- a/chromium/docs/website/site/issue-tracking/autotriage/index.md
+++ /dev/null
@@ -1,176 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: autotriage
-title: 'Sheriffbot: Auto-triage Rules for Bugs'
----
-
-[TOC]
-
-Bug reporting, triage and fixing are essential parts of the software development
-process. In large software projects such as Chromium, the bug tracking system is
-the central hub for coordination that collects informal comments about bug
-reports and development issues. Hundreds of bug reports are submitted every day,
-and the triage process is often error prone, tedious, and time consuming. In
-order to make triage more efficient, we automate certain tasks.
-
-Googlers can view sheriffbot's source at
-[go/sheriffbot-source](https://goto.google.com/sheriffbot-source). Please file
-issues with Sheriffbot
-[here](https://bugs.chromium.org/p/chromium/issues/entry?components=Tools%3EStability%3ESheriffbot).
-
-### Unconfirmed bugs which are not updated for a year
-
-* Purpose: Bugs often slip through the cracks. If they've gone
- unconfirmed for over a year, it is unlikely that any progress
- will be made.
-* Action: Set the status to **Archived**.
-
-### Available bugs which have no associated component and have not been modified for a year
-
-* Purpose: Clear out bug backlog by archiving bugs which are
- unlikely to receive attention and let reporters know that they
- should re-file if they still care about the issue.
-* Action: Add a comment and change the status to **Archived**.
-
-### Available bugs with an associated component and are not modified for a year
-
-* Purpose: Recirculate stale bugs in case they were mistriaged
- initially.
-* Action: Add a comment, apply the tracking label
- **Hotlist-Recharge-Cold** and change the status to
- **Untriaged**. The **Hotlist-Recharge-Cold** label is applied
- for tracking purposes, and should not be removed after
- re-triaging the issue.
-
-### Launch bug for experimental features - update and clean up
-
-* Launch bugs that are at least 3 milestones older than current
- stable:
- * Purpose: In this case, we assume that the launch bug has
- been forgotten and that the feature has already shipped.
- * Action: Add a warning message asking for review. If no
- action is taken after 30 days, set the status to
- **Archived**.
-* Launch bugs with no milestone and are not modified in the last
- 90 days:
- * Purpose: Launch bugs should always be targeted for a
- specific milestone, so something has gone wrong if a bug is
- in this state.
- * Action: Add a comment requesting that an appropriate
- milestone is applied to the issue.
-
-### Needs-Feedback bugs, which received feedback.
-
-* Purpose: Developers often request feedback, but don't
- follow-up after it is received.
-* Action: If a reporter has provided feedback, remove the
- **Needs-Feedback** label, and add the feedback requester to the
- bug cc'list.
-
-### Needs-Feedback bugs where feedback is not received for more than 30 days
-
-* Purpose: If required feedback is not received, it is unlikely
- that any progress can be made on the issue.
-* Action: Add a comment and set the status to **Archived**.
-
-### P0 bug reminders
-
-* Purpose: P0 bugs are critical bugs which require immediate
- action.
-* Action: If the bug is open for more than 3 days, we leave a
- comment as a reminder. Note that a maximum of 2 nags will be
- applied to the issue.
-
-### TE-Verified bugs which are not modified for 90 days *(This rule has been removed as of 08/04/16. Reference bug: 630626)*
-
-* Purpose: Developers often forget to close bugs out after they've
- been verified.
-* Action: Set the status to **Archived**.
-
-### Medium+ severity security bug nags on issues not updated by their owners in the last 14 days
-
-* Purpose: Security vulnerabilities are serious threats to our
- users that require developer attention.
-* Action: Leave a comment asking for a status update. Note that a
- maximum of 2 nags will be applied to the issue.
-
-### Merge-Approval clean up
-
-* Purpose: Developers often forget to remove **Merge-Approved-MX**
- label after merging change to specific branch.
-* Action: If the bug is not updated in specific milestone branch
- cycle (42 days), remove all label that starts with
- **Merge-Approved-MX** label and add a comment asking developers
- to re-request a merge if needed.
-
-### Milestone punting
-
-* Purpose: Update issues with latest milestone after branch point.
-* Action: Replace milestone label with latest milestone for
- milestones that have passed their branch point. Certain issues,
- such as Launch bugs, Pri-0 issues, Release blockers, and issues
- where merges have been requested or approved are excluded.
-
-### Open bugs with CL landed which are not modified for 6 months *(This rule has been disabled as of 07/22/16, pending furthur discussion. Reference bug: 629092)*
-
-* Purpose: Developers often forget to close the bugs after landing
- CLs.
-* Action:
- * Send a reminder by adding **Hotlist-OpenBugWithCL** label asking Developers to either:
- * Close bug if all neccessary CLs have landed and no furthur work is needed OR
- * Remove **Hotlist-OpenBugWithCL** label if more changes are needed.
- * If no action is taken in 30 days, set the status to **Archived**.
-
-### Bugs with no stars, no owners and not modified for an year *(This rule has been disabled as of 08/12/16. Reference bug: 637278)*
-
-* Purpose: Issues with no owners, no stars are unlikely to receive
- any attention, so clear-out these issues and let reporters know
- that they should re-file if they still care about the issue.
-* Action: Add a comment and change the status to **Archived.**
-
-### Set for re-triage, the issues with bouncing owners.
-
-* Purpose: Issues with owners who cannot be contacted (bouncing
- owners) is unlikely to get resolved by the owner, so clear out
- these issues by sending for re-triaging again.
-* Action: Remove the bounced owner, add comment, apply the
- tracking label **Hotlist-Recharge-BouncingOwner** and change the
- status to **Untriaged**.
-
-### Cleanup any auto-generated issues with no owners and are inactive for more than 90 days.
-
-* Purpose: Auto-generated issues with no owners and more than 90
- days of inactivity is unlikely to be viewed and resolved, so
- clean up these issues by archiving them.
-* Action: Add comment and set the status to **Archived**.
-
-### Reminder for release blocking issues with no milestone and OS labels.
-
-* Purpose: All release blocking bugs should have milestone and OS
- label associated with it in order to release the fixes promptly.
-* Action: Leave a comment asking to add milestone and OS
- labels and cc the release block label adder to the issue. Note
- that a maximum of 2 nags will be applied to the issue.
-
-### Add label (Merge-TBD) to track any blocking issues where a merge may be required
-
-* Purpose: We need to ensure all blockers that are fixed
- post-branch have the relevant CLs merged back to the release
- branch; otherwise, regressions will escape to stable.
-* Action: Add the label "Merge-TBD" when issues marked as
- blocking (ReleaseBlock=Dev,Beta,Stable) targeting a milestone
- (via M-XX or Target-XX) that is past branch point (via
- [schedule](https://chromiumdash.appspot.com/schedule)) are
- marked as fixed.
-
-### Increase priority of issues tagged with ReleaseBlock labels
-
-* Release Blockers will be escalated to P0 if they
- * are tagged to block Beta or Stable releases within 10 days
- of the target milestone's promotion date.
- * are tagged to block a Dev release for any milestone.
-* Release Blockers will be escalated to P1 if they
- * are tagged to block Beta or Stable releases prior to 10 days
- of the target milestone's promotion date. \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/creating-a-bug-template-url/index.md b/chromium/docs/website/site/issue-tracking/creating-a-bug-template-url/index.md
deleted file mode 100644
index 26ed61ab330..00000000000
--- a/chromium/docs/website/site/issue-tracking/creating-a-bug-template-url/index.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: creating-a-bug-template-url
-title: Creating a Bug Template Url
----
-
-The following fields can be pre-populated with a value supplied in the URL.
-Using links with these query parameters present allows you to guide end-users to
-enter an issue that is tailored to a specific need. Usually defining a template
-and specifying just a template value is better than specifying other values in a
-URL. The user must still review, edit, and submit the form.
-
-<table>
-<tr>
-<td> Form field</td>
-<td> URL query parameter</td>
-<td> Values</td>
-</tr>
-<tr>
-<td> Template</td>
-<td> template</td>
-<td> Name of a defined template in this project</td>
-</tr>
-<tr>
-<td> Summary</td>
-<td> summary</td>
-<td> Initial summary string</td>
-</tr>
-<tr>
-<td> Description</td>
-<td> comment</td>
-<td> Prompt text to show in issue description area</td>
-</tr>
-<tr>
-<td> Status</td>
-<td> status</td>
-<td> Initial status value</td>
-</tr>
-<tr>
-<td> Owner</td>
-<td> owner</td>
-<td> Username of initial issue owner</td>
-</tr>
-<tr>
-<td> CC</td>
-<td> cc</td>
-<td> List of users to CC</td>
-</tr>
-<tr>
-<td> Components</td>
-<td> components</td>
-<td> Comma-separated list of initial component values</td>
-</tr>
-<tr>
-<td> Labels</td>
-<td> labels</td>
-<td> Comma-separated list of initial label values</td>
-</tr>
-</table>
-
-**Constructing your URL:**
-
-* Start w/ the base url -
- https://bugs.chromium.org/p/**&lt;project_name&gt;**/issues/entry
- * Example: https://bugs.chromium.org/p/chromium/issues/entry
-* Add your query parameters
- * Example (using the "Defect from user" template) -
- https://bugs.chromium.org/p/chromium/issues/entry***?template=Defect%20report%20from%20user***
- * [Wiki](https://en.wikipedia.org/wiki/Query_string#Web_forms) -
- How url parameters work.
-* Publish as a quick link (<https://goo.gl/> works well).
-
-**Tips and Tricks:**
-
-* For descriptions you'll need to url encode the text. Here's a
- [site](http://meyerweb.com/eric/tools/dencoder/) to help you. \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/editing-components/Component Edit View.png.sha1 b/chromium/docs/website/site/issue-tracking/editing-components/Component Edit View.png.sha1
deleted file mode 100644
index c1abb68e506..00000000000
--- a/chromium/docs/website/site/issue-tracking/editing-components/Component Edit View.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b970d31f19c498dbfe06201387e0c0f762bd8456 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/editing-components/Component List.png.sha1 b/chromium/docs/website/site/issue-tracking/editing-components/Component List.png.sha1
deleted file mode 100644
index 5fb66d2942d..00000000000
--- a/chromium/docs/website/site/issue-tracking/editing-components/Component List.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1031f6449086ec47974004f4966b59c089ff5c8e \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/editing-components/Components.png.sha1 b/chromium/docs/website/site/issue-tracking/editing-components/Components.png.sha1
deleted file mode 100644
index acfe9f2d776..00000000000
--- a/chromium/docs/website/site/issue-tracking/editing-components/Components.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-864aa2a2bf8f898735539b8684473b3b06213ec6 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/editing-components/Development Process.png.sha1 b/chromium/docs/website/site/issue-tracking/editing-components/Development Process.png.sha1
deleted file mode 100644
index 031791f6fad..00000000000
--- a/chromium/docs/website/site/issue-tracking/editing-components/Development Process.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-45f7a0cce05fe032dc5dbf8447f601947cd33e6d \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/editing-components/index.md b/chromium/docs/website/site/issue-tracking/editing-components/index.md
deleted file mode 100644
index 51c402e0518..00000000000
--- a/chromium/docs/website/site/issue-tracking/editing-components/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: editing-components
-title: Editing Components
----
-
-Have you ever wanted to edit a component's description, add cc-es, automatically
-set labels, or even retire (deprecate) them? It's actually pretty simple, if you
-know where to look.
-
-1. Once you load up the issue tracker, click on the "Development process" link
-on the top most menu.
-
-[<img alt="image"
-src="/issue-tracking/editing-components/Development%20Process.png">](/issue-tracking/editing-components/Development%20Process.png)
-
-2. Select "Components" from the sub-menu that appears.
-
-[<img alt="image"
-src="/issue-tracking/editing-components/Components.png">](/issue-tracking/editing-components/Components.png)
-
-3. Find your component from the current set of "Active components" (Pro tip:
-There are a lot, so Ctrl+F is helpful).
-
-[<img alt="image"
-src="/issue-tracking/editing-components/Component%20List.png">](/issue-tracking/editing-components/Component%20List.png)
-
-4. Edit the component.
-
-**Pro Tip:** "Deprecated" versus "Delete component". Both will remove the
-component from auto-complete, however Delete will remove all references to the
-component from any existing issues that might have it (e.g. if one were to
-forget to query for "All issues" to migrate over fixed issues). Delete basically
-has no "undo," in case a mistake is made. Given that errors happen, it's best
-practice to use "Deprecated" over delete to afford a measure of recovery.
-
-[<img alt="image"
-src="/issue-tracking/editing-components/Component%20Edit%20View.png">](/issue-tracking/editing-components/Component%20Edit%20View.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Confirm.png.sha1 b/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Confirm.png.sha1
deleted file mode 100644
index 60b76529c36..00000000000
--- a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Confirm.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d120390351b348f61dfb71e0046cdb8ed0a0109b \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Worked.png.sha1 b/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Worked.png.sha1
deleted file mode 100644
index 0bdd265b42b..00000000000
--- a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit - Worked.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dc50f6b2b7788a938c90a86361453e0801e98898 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit.png.sha1 b/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit.png.sha1
deleted file mode 100644
index 8ccf05d9e50..00000000000
--- a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/Bulk Edit.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e6a91941d893f482a329438df05dbe7f38624112 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/index.md b/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/index.md
deleted file mode 100644
index 86d2eaf064d..00000000000
--- a/chromium/docs/website/site/issue-tracking/how-to-bulk-edit/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: how-to-bulk-edit
-title: How to Bulk Edit
----
-
-Did you know that Monorail has a super powerful bulk editor built-in? If not,
-then let me tell you more... or better yet show you demo (I promise, it's really
-straight forward).
-
-1. **Search for the issues that you want to bulk edit**, using the correct
-"bucket" (e.g. "Open Issues", "All Issues", etc...).
-
-* *Pro Tip*: Depending on what you are doing (e.g. moving issues between
-components), it may be advisable to change the default search from "Open Issues"
-to "All Issues" to ensure that future queries continue to work.
-
-2. **Pick the issues that you want to bulk edit** or click on the (Select) All"
-issues link.
-
-3. **From the "Actions..." drop down, select "Bulk edit..."**
-
-[<img alt="image"
-src="/issue-tracking/how-to-bulk-edit/Bulk%20Edit.png">](/issue-tracking/how-to-bulk-edit/Bulk%20Edit.png)
-
-4. **Edit away.** To remove values (e.g. Components, Owners, Labels, etc...) you
-simply have to select either ("Append +=" or "Remove -="). Click on the "Update Issues," and watch it work...magic.
-
-* *Pro Tip 0:* It's good practice, when making a bulk edit to add a comment!
-* *Pro Tip 1:* To move a component or label w/ a single edit... use the "Append
-+=" mode, start w/ the component that you want to add, and then starting with as
-dash "-" add the second component that you want to remove (e.g.
-"Blink&gt;GetUserMedia, -Blink&gt;Webrtc&gt;GetUserMedia" would add the
-Blink&gt;GetUserMedia and remove Blink&gt;Webrtc&gt;GetUserMedia"*
-* *Pro Tip 2:* If you are moving a lot of things, it maybe worthwhile to
-uncheck "Send email"*
-
-[<img alt="image"
-src="/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Confirm.png">](/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Confirm.png)
-
-5. **You're done.**
-
-[<img alt="image"
-src="/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Worked.png">](/issue-tracking/how-to-bulk-edit/Bulk%20Edit%20-%20Worked.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/index.md b/chromium/docs/website/site/issue-tracking/index.md
deleted file mode 100644
index deef229354c..00000000000
--- a/chromium/docs/website/site/issue-tracking/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-breadcrumbs: []
-page_name: issue-tracking
-title: Issue Tracking
----
-
-Building this section back out, pulling in and re-writing all the existing bug
-related documentation under here.
-
-Topics
-
-* [Auto-triage Rules for Bugs](/issue-tracking/autotriage)
-* [Creating a Bug Template
- URL](/issue-tracking/creating-a-bug-template-url)
-* [Requesting a Component or
- Label](/issue-tracking/requesting-a-component-or-label)
-* [Triage Best
- Practices](/for-testers/bug-reporting-guidelines/triage-best-practices)
-* [How to Bulk Edit](/issue-tracking/how-to-bulk-edit)
-* [Editing Components](/issue-tracking/editing-components)
-* [Migrating Issue
- Components](/issue-tracking/migrating-issue-components)
-* [Monorail (Issue Tracker)
- API](https://chromium.googlesource.com/infra/infra/+/HEAD/appengine/monorail/doc/api.md)
-* [Tips and Tricks](/issue-tracking/tips-and-tricks)
-
-Process
-
-* [Release Block Guidelines](/issue-tracking/release-block-guidelines) \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/Conceptual Model.png.sha1 b/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/Conceptual Model.png.sha1
deleted file mode 100644
index 4ed02d36076..00000000000
--- a/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/Conceptual Model.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c8b2a48efece3d83d2dc178352979fcf06ec15be \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/State Diagram.jpg.sha1 b/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/State Diagram.jpg.sha1
deleted file mode 100644
index 00d84d8b666..00000000000
--- a/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/State Diagram.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-00d782d24fc9733789ef31d217590817c852f2f7 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/index.md b/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/index.md
deleted file mode 100644
index 605bdcdbdb5..00000000000
--- a/chromium/docs/website/site/issue-tracking/issue-tracking-lifecycle/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: issue-tracking-lifecycle
-title: Issue Tracking Lifecycle
----
-
-[TOC]
-
-## The Four Phases
-
-![](/issue-tracking/issue-tracking-lifecycle/Conceptual%20Model.png)
-
-## Status
-
-![](/issue-tracking/issue-tracking-lifecycle/State%20Diagram.jpg) \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit - Confirm.png.sha1 b/chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit - Confirm.png.sha1
deleted file mode 100644
index 60b76529c36..00000000000
--- a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit - Confirm.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d120390351b348f61dfb71e0046cdb8ed0a0109b \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit.png.sha1 b/chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit.png.sha1
deleted file mode 100644
index 8ccf05d9e50..00000000000
--- a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Bulk Edit.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e6a91941d893f482a329438df05dbe7f38624112 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Component List.png.sha1 b/chromium/docs/website/site/issue-tracking/migrating-issue-components/Component List.png.sha1
deleted file mode 100644
index 5fb66d2942d..00000000000
--- a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Component List.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1031f6449086ec47974004f4966b59c089ff5c8e \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Components.png.sha1 b/chromium/docs/website/site/issue-tracking/migrating-issue-components/Components.png.sha1
deleted file mode 100644
index acfe9f2d776..00000000000
--- a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Components.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-864aa2a2bf8f898735539b8684473b3b06213ec6 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Depercate Component.png.sha1 b/chromium/docs/website/site/issue-tracking/migrating-issue-components/Depercate Component.png.sha1
deleted file mode 100644
index bf3d8211b6f..00000000000
--- a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Depercate Component.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ec8bf4062da8483c5bdfa98505c4f846d62093d9 \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Development Process.png.sha1 b/chromium/docs/website/site/issue-tracking/migrating-issue-components/Development Process.png.sha1
deleted file mode 100644
index 031791f6fad..00000000000
--- a/chromium/docs/website/site/issue-tracking/migrating-issue-components/Development Process.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-45f7a0cce05fe032dc5dbf8447f601947cd33e6d \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/migrating-issue-components/index.md b/chromium/docs/website/site/issue-tracking/migrating-issue-components/index.md
deleted file mode 100644
index e35abac462f..00000000000
--- a/chromium/docs/website/site/issue-tracking/migrating-issue-components/index.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: migrating-issue-components
-title: Migrating Issue Components
----
-
-Basically it's a two step process 1.) [Bulk
-edit](/issue-tracking/how-to-bulk-edit) 2.) [Edit the
-component](/issue-tracking/editing-components), marking it as "Deprecated".
-
-Let's go through an example, migrating issues from
-"Blink&gt;Webrtc&gt;GetUserMedia" to "Blink&gt;GetUserMedia".
-
-## Step 1 - Bulk Edit
-
-1. Search "All issues" for the component that you want to deprecate (e.g.
-Blink&gt;&gt;Webrtc&gt;GetUserMedia). Once the results list appears, Select
-"All," go to the "Actions..." drop down and select "Bulk edit...".
-
-[<img alt="image"
-src="/issue-tracking/migrating-issue-components/Bulk%20Edit.png">](/issue-tracking/migrating-issue-components/Bulk%20Edit.png)
-
-​
-
-2. In the Components field (w/ Append += set), add the replacement component
-(e.g. Blink&gt;GetUserMedia), followed by the component that you want to remove/
-deprecate starting with a minus ("-"). In this example
-("-Blink&gt;Webrtc&gt;GetUserMedia). Click the "Update ## Issues" button.
-
-**Pro tip:** Uncheck the Send email box.
-
-[<img alt="image"
-src="/issue-tracking/migrating-issue-components/Bulk%20Edit%20-%20Confirm.png">](/issue-tracking/migrating-issue-components/Bulk%20Edit%20-%20Confirm.png)
-
-## Step 2 - Deprecate the component (to keep it out of Auto-complete)
-
-1. Once you load up the issue tracker, click on the "Development process" link
-on the top most menu.
-
-[<img alt="image"
-src="/issue-tracking/migrating-issue-components/Development%20Process.png">](/issue-tracking/migrating-issue-components/Development%20Process.png)
-
-2. Select "Components" from the sub-menu that appears.
-
-[<img alt="image"
-src="/issue-tracking/migrating-issue-components/Components.png">](/issue-tracking/migrating-issue-components/Components.png)
-
-3. Find your component from the current set of "Active components" (Pro tip:
-There are a lot, so ctrl+F is helpful).
-
-[<img alt="image"
-src="/issue-tracking/migrating-issue-components/Component%20List.png">](/issue-tracking/migrating-issue-components/Component%20List.png)
-
-4. Check "Deprecated" and click on "Submit changes."
-
-**Pro Tip:** "Deprecated" versus "Delete component". Both will remove the
-component from auto-complete, however Delete will remove all references to the
-component from any existing issues that might have it (e.g. if one were to
-forget to query for "All issues" to migrate over fixed issues). Delete basically
-has no "undo," in case a mistake is made. Given that errors happen, it's best
-practice to use "Deprecated" over delete to afford a measure of recovery.
-
-[<img alt="image"
-src="/issue-tracking/migrating-issue-components/Depercate%20Component.png">](/issue-tracking/migrating-issue-components/Depercate%20Component.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/release-block-guidelines/index.md b/chromium/docs/website/site/issue-tracking/release-block-guidelines/index.md
deleted file mode 100644
index fd95cff76e4..00000000000
--- a/chromium/docs/website/site/issue-tracking/release-block-guidelines/index.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: release-block-guidelines
-title: Release Block Guidelines
----
-
-**See also [this more recent document](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/process/release_blockers.md).**
-
-**What are the intents of ReleaseBlock?**
-
-ReleaseBlock issues are immediately gating the release of the branch (Dev, Beta,
-Stable). These issues require the highest priority of attention from the
-engineers assigned (since they are directly on the critical path). They are
-meant to be used as a tool for program managers to focus engineers to get a
-Chrome release launched with high standard of quality (e.g. absent critical
-regressions, stability, build issues, etc...).
-
-**What aren’t the intents?**
-
-ReleaseBlock issues **are not** meant to be a scoping or prioritization tool (we
-have specific labels and normal processes for each of those, respectively
-mstone- and pri-). If an issue isn’t getting sufficient attention, it should be
-escalated to a TPM and/or the priority adjusted accordingly. Making arbitrary
-issues ReleaseBlockers, when mstone and proper prioritization would otherwise
-suffice, makes it very hard to see the true critical path of our release cycle.
-
-**Best Practices:**
-
-* Nominate blockers liberally, it’s better to catch someone’s
- attention than to ignore an issue.
- * That said, expect TPMs to say no sometimes.
-* Ask yourself if you would really block a release for this issue, if
- the answer if no, the next best option is to make sure the priority
- is set correctly, the issue is assigned, and an mstone label is set.
-* All ReleaseBlock bugs should have owners
-* If you have a request for an out of band (i.e. non-releaseblock)
- merge, add a Merge-Requested flag and the TPM responsible for the
- branch will take a look.
-
-**Signals of Poor Practices:**
-
-* Assigned a P2/P3 issue as a ReleaseBlocker
- * ***Explanation:***
- * P2/P3 are generally considered nice to have merges
-* Setting a ReleaseBlock label 6 weeks in advance of a branch point.
- * ***Explanation:***
- * It suggests that normal processes for prioritization/
- scoping aren’t being followed. In cases where issues are not
- imminently blocking a release (i.e. 3-6 weeks in advance),
- such practices dilute the intent of a releaseblock, which
- literally means, drop what you are doing and work on nothing
- else. Such calls may be overly disruptive to engineers, and
- may not be the correct priority call if the issue in
- question does not need immediate attention.
-* Setting a ReleaseBlock issue w/ out an owner or marking it as
- Available
- * ***Explanation:***
- * If an issue is really critically urgent it should be
- assigned right away, we should not wait around for normal
- triage to determine an owner (i.e. we should not be sitting
- on these issues). \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/requesting-a-component-or-label/index.md b/chromium/docs/website/site/issue-tracking/requesting-a-component-or-label/index.md
deleted file mode 100644
index bf488ef88ad..00000000000
--- a/chromium/docs/website/site/issue-tracking/requesting-a-component-or-label/index.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: requesting-a-component-or-label
-title: Requesting a Component or Label
----
-
-[TOC]
-
-## Requesting a Component or Label
-
-Project members can request the creation of new components or labels by simply
-filing an issue:
-
-* [Component
- Request](https://bugs.chromium.org/p/chromium/issues/entry?template=Component%20Request)
- (Template)
-* [Label
- Request](https://bugs.chromium.org/p/chromium/issues/entry?template=Label%20Request)
- (Template)
-
-## Component versus Label
-
-* Components are meant to track work on a specific feature/ function.
-* Labels generally are meant to track effort that cuts across multiple
- components (e.g. Proj(ects), Hotlist(s), etc...)
-
-## Component Guidelines
-
-* Guideline 1 (Clarity): Component name should be descriptive beyond
- the core project team (i.e. please avoid using non-industry standard
- abbreviations, code words,project names, etc...)
-* Guideline 2 (Permanence): Component names should describe
- features/functions and not team names, code locations, etc..., which
- are more subject to change and make the hierarchy less predictable
- for people triaging issues.
-* Guideline 3 (Specific): Components are meant to explicitly track
- functional work areas. If you are trying to track a Proj(ect) or an
- on-going effort (e.g. Hotlist-Conops), please instead request a
- label for a (Proj- or Hotlist-)
-* Guideline 4 (Discoverable/ Predictable): Components should be
- parented where people would logically expect to find them (i.e.
- follow product decomposition when naming versus team decomposition).
-
-## Label Guidelines
-
-* Guideline 1: Unless a hierarchy of labels is needed, please avoid
- creating new root parents.
-* Guideline 2: Proj(ects) labels should be used for efforts that have
- a clear start/ end
-* Guideline 3: Hotlist labels should be used for tracking on-going
- efforts across multiple components (e.g. Hotlist-GoodFirstBug)
-
-### Description Best Practices (for components and labels):
-
-* Monorail supports scanning the descriptions of components and labels
- during auto-complete. This has some important implications.
- * (Best practice) Adding abbreviations (e.g. JS, GC, I18N, L10N,
- WASM, etc...) into the description of your components will give
- you and your users a nice shorthand.
- * (Best practice) If there are synonyms not currently in your
- description, please consider adding them.
- * (Best practice) Avoid using negative descriptions (e.g. "Not
- foo") as they will appear in auto-complete for the subject being
- avoided (e.g. "foo"). \ No newline at end of file
diff --git a/chromium/docs/website/site/issue-tracking/tips-and-tricks/index.md b/chromium/docs/website/site/issue-tracking/tips-and-tricks/index.md
deleted file mode 100644
index 5b0c4b90006..00000000000
--- a/chromium/docs/website/site/issue-tracking/tips-and-tricks/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-breadcrumbs:
-- - /issue-tracking
- - Issue Tracking
-page_name: tips-and-tricks
-title: Tips and Tricks
----
-
-[TOC]
-
-## Tip 1: It's important to learn your query operators ":" and "="
-
-Components and labels can both be searched for using either ":" or "="
-operators. The "=" operator looks for exact matches. The ":" operator for
-components looks for the specified component or any subcomponent. The ":" for
-labels (and most of fields) looks for words anywhere in the string.
-
-Mastering these queries will allow you to find all issues under a parent
-component.
-
-Example 1.1: Querying all Blink issues
-([component:Blink](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink)),
-from Blink to Blink&gt;WebRTC&gt;Audio etc...
-
-Example 1.1: Querying only issues explicitly w/ the Blink label
-([component=Blink](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3DBlink))
-
-## Tip 2: Hit the "?" key to see a list of keyboard shortcuts.
-
-Spoiler alert:
-
-Issue list: J and K for previous and next issue, X to check a checkbox.
-
-Issue detail page: J and K for previous and next issue, U to go up to list, R to select the comment field on the issue detail page.
-
-Anywhere: / to select the search box.
-
-## Tip 3: To get a clean link to an issue, click on the issue number in the header.
-
-That gives you a simple URL that you can share with others.
-
-## Tip 4: Add monorail issue search as a Search Engine in the Chrome Omnibar.
-
-Just pop up a menu on your chrome browsers location bar and choose "Edit Search Engines...". E.g., I have the shortcut "mm" search for issues in /p/monorail. Typing "mm 12345" takes me directly to that issue. You can also treat the issue entry page as a search engine, e.g., I have "mnew" mapped to "https://bugs.chromium.org/p/monorail/issues/entry?summary=%s" \ No newline at end of file
diff --git a/chromium/docs/website/site/july-2021---new-features-fixit-stability-security-fixes-interop-fixes-and-more/index.md b/chromium/docs/website/site/july-2021---new-features-fixit-stability-security-fixes-interop-fixes-and-more/index.md
deleted file mode 100644
index 5da33782b76..00000000000
--- a/chromium/docs/website/site/july-2021---new-features-fixit-stability-security-fixes-interop-fixes-and-more/index.md
+++ /dev/null
@@ -1,268 +0,0 @@
----
-breadcrumbs: []
-page_name: july-2021---new-features-fixit-stability-security-fixes-interop-fixes-and-more
-title: July 2021 - New features, fixit, stability/security fixes, interop fixes and
- more!
----
-
-<table>
-<tr>
-
-<td>July 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Composite multiple transformations</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/EQb-Syn7LREAM34ygxbX7L1pyekr1XQeqvfoCv0Poe8jHCTs2dHv9mOzYksuZnT2iALiRptpqTxNAm_4BoeMVSYmzOyQlxpgYNdBA0IrPPG--eKJ4HDVl1TrWAshwt8eCdA1fQP57w" height=165 width=283></td></td>
-
-<td><td>kevers@ landed a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3016295">CL</a> to composite multiple transformations.</td></td>
-
-<td><td>Background</td></td>
-
- <td><td>CSS has 4 transformation properties: translate, scale, rotate and
- transform.</td></td>
-
- <td><td>Previously, we could only composite a single
- transformation.</td></td>
-
-<td><td>Challenges</td></td>
-
- <td><td>Compositor only know about transform, and the others were
- converted.</td></td>
-
- <td><td>Ordering is important</td></td>
-
- <td><td>WorkletAnimations tick later than the rest to allow time for worklet
- code to run.</td></td>
-
-<td><td>Solution</td></td>
-
- <td><td>Expand set of target properties in CC</td></td>
-
- <td><td>ScopedCompoundTransformResolver</td></td>
-
-<td><td>Capability Delegation</td></td>
-
-<td><td>mustaq@ finalized <a href="https://docs.google.com/document/d/1L66B1QtqHCzAKlLQXdtv-YCmlXrJhi2Je2Vo91XWMsQ/edit?usp=sharing">Q3-Q4 shipping plan</a>:</td></td>
-
- <td><td>origin trial at M94</td></td>
-
- <td><td>ship at M96 without PaymentRequest changes, and</td></td>
-
- <td><td>ship PaymentRequest changes after holidays.</td></td>
-
- <td><td>We considered possible <a
- href="https://github.com/w3ctag/design-reviews/issues/655">TAG</a> delays,
- no-breakage during holiday shopping, and motivating Stripe changes. Thanks
- to smcgruer@ and jyasskin@.</td></td>
-
-<td><td>Android Elastic Overscroll</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/WsDKsJilisvGaVwqumYvYi0GpamD51sqGPFMoRAE9VMNw-rw73rnzHlA225AUGnkK8yPsvOCK7KO_GeAqfD5SWEkAsyKLhCE-cNiJEgMZzGHL2Kqd3yfMFQzgJ3OJY3A_xx0tnqYuA" height=284 width=134> <img alt="image" src="https://lh5.googleusercontent.com/FRDw2s9Fo_jgXugwAG_xmw4TiAGL62LmQDjVLyo2ZWa5Z5XxZfGqTofo0NYPmKDQmSDupTmkNt58QbnpZeBNYF3nVQiOb68XUK-LNq6iCjIm3Ab2-hZTMPYv-2fS05T-tqaqqo5uOQ" height=283 width=134></td></td>
-
-<td><td>flackr@ has landed all patches for elastic overscroll, which includes:</td></td>
-
- <td><td>Transform overscroll stretch</td></td>
-
- <td><td>Pixel shader stretch</td></td>
-
- <td><td>Disable glow when stretch is enabled</td></td>
-
- <td><td>Disable stretch on webview when native stretch is used</td></td>
-
- <td><td>Disable stretch in non-scrollable directions</td></td>
-
- <td><td>Only enable stretch on Android 12 or later</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/05E_HxvKHpAv6SpaGfMb_HYRcgow4USMOtoMnLe8-bn6K9TlBnpZBbwhpw4R_wZFZg_HI9iArKEvMAeeuqpI8NC7XdxCRfRdodF-BLnEduUv636G9nZYCPiCqxjkddQUQLbnYaTsSg" height=60 width=135><img alt="image" src="https://lh3.googleusercontent.com/0scdtf1EyP1uWp8seL2Y3fYmoUTAgrGdZUwyY9UWqflcC2O1BUAkZt0uKZ0L5Mk08oThn8CgYrZJOtsQaeduhapwBuBNFUbQHriV1OsvWu1H8aTP6KVu24XNRGYMe8ig3SKBNJyp2Q" height=64 width=138></td></td>
-
-<td><td>Memory.GPU.PrivateMemoryFootprint and Memory.GPU.PeakMemoryUsage2.Scroll</td></td>
-
-<td><td>The preliminary finch result for “Android Elastic Overscroll” is shown above. The only substantial difference seemed to be GPU memory usage:</td></td>
-
- <td><td>Roughly 10% increase in Memory.GPU.PeakMemoryUsage2.Scroll</td></td>
-
- <td><td>Slightly increase in Memory.Gpu.PrivateMemoryFootprint</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Fixit</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Fix a float-cast-overflow</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/taf18yv_lIiyJDR7c2R24z21SlOOeuwcJtiToZj3u3ZHYtyfVy39kRXRfGJBf3Te_D0Xvz-asqkNXs4TPbvEP6pFbR20HMdQgwdIvHeM3c_RYb_qPoF5DiQImlk3XrYfeAihgK4PAQ" height=61 width=283></td></td>
-
-<td><td>xidachen@ fixed a float-cast-overflow bug. There is no local repro, and a speculative <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3010014">fix</a> actually fixed the problem.</td></td>
-
-<td><td>Fix a float-cast-overflow</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/SVQqB5L19CNwvVZIMEnLZn2wgTyNlWlMOvqChcgw9_nM0eKkddYYasmUnWfua-N5DvfwH8HFKH1vsV4x6dcLwUzEpbV06X5TRyx5mt8RCXIpQHPyblwzpwf2b3xToqWq4GYEc2uirA" height=356 width=283></td></td>
-
-<td><td>xidachen@ added more documentation in the csspaint/ folder to explain the workflow of the paint worklet.</td></td>
-
-<td><td>Fix a flaky animations layout test</td></td>
-
-<td><td>This layout test is one of the top flakes under the Blink&gt;Animation category. The root cause seems to be a precision issue with animation time comparison, which is addressed in this <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3027227">CL</a>.</td></td>
-
-<td><td>Fix a few PointerLock crashes</td></td>
-
-<td><td>mustaq@ fixed a 9-year-old <a href="https://crbug.com/143780">exit instruction bug</a> between fullscreen and repeated lock-unlock requests, by untangling exit instruction confusion between browser-vs-content fullscreen exit instructions to keep the “nested fullscreening” case clear to users.</td></td>
-
-<td><td>Also fixed a <a href="http://crbug.com/1213769">crash</a> with repeated locks around a removed element.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Stability/security fixes</td></td>
-
-<td><td><table></td></td>
-<td><td><tr></td></td>
-
-<td><td><td>Chrome_Android: Crash report</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh4.googleusercontent.com/-sEsKdESILmJBjSwoPSxnfYIh7MT-duKyYLxXLdJ-MoGXeVN0OmKyNzDsrc47eJKg7so5pVmNDAgN4JLuegp6n388dSBfPfAx_ITfqhx3VSB0JB-40mklhDWvLpFL3OYtRFAwDdzhg" height=47 width=277></td></td></td>
-
-<td><td><td>flackr@ fixed a <a href="https://crbug.com/1228047">crash</a> on chrome android. The fix is that the overscroll stretch effect node needed an output clip set (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3027140">CL</a>). </td></td></td>
-
-<td><td><td>Prevent script execution during lifecycle update</td></td></td>
-
-<td><td><td>flackr@ landed a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2815619">fix</a> that prevents further security bugs resulting from accidentally running script during the lifecycle. Specific exceptions made for cases where script execution is known to be safe or handled:</td></td></td>
-
- <td><td><td>ResizeObserver</td></td></td>
-
- <td><td><td>IntersectionObserver</td></td></td>
-
- <td><td><td>PaintWorklet::Paint</td></td></td>
-
- <td><td><td>LayoutWorklet</td></td></td>
-
- <td><td><td>Plugin::Dispose\*</td></td></td>
-
-<td><td><td>Crashed hittesting with “uneditable” editable elements</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh6.googleusercontent.com/79QhFw8veAOa5QuPOd526oGT8RMnbdrC92KsMj0M1eVDPPxkq2oLAazEAHrbCQbcLs77tQ15B87YU9FmvTDcoarlqngKkuDVrvJlGfjX0AHI47LfHq3vflDsjgweFIKzz8DZsG49ow" height=11 width=277></td></td></td>
-
-<td><td><td>mustaq@ fixed a crash <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1196872">bug</a>. The root cause is simply that hittest code is unaware that the contenteditable element is not editable (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3006934">CL</a>).</td></td></td>
-
-<td><td><td>Binary size increase</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh4.googleusercontent.com/-aonhm4OSowxVTec2CwsQtYUymc7eYGOUaq0JfDAw64zTSXv8nZcux24FLSxWn86NJv7Yn7g5dMpy3SJcw5dIolEBnJB2IVQfS0psqddF0GdSP6YBpu5na0NjnctDO1Xm43G89Uokw" height=540 width=123></td></td></td>
-
-<td><td><td>flackr@ investigated a binary size increase <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1226170">bug</a> on Android, where Android stretch shader adds a large (~6KB) shader string (shown above).</td></td></td>
-
- <td><td><td>Short term, only include shader string on Android (<a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/3016756">CL</a>).</td></td></td>
-
- <td><td><td>Long term, find a way to <a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1227747">compress
- string</a>.</td></td></td>
-
-<td><td></tr></td></td>
-<td><td></table></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Chapter IV: Interop fixes</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Simplify pointer-events spec tracking of changed targets</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/P-HzHNNtlp05ptKnPf_8_jqGCpOv98oHus5DwDLOuTsn9Lv4GNgX_uoeYgOMhQ5psX9ESERKMVsbRQttED2FCxXsu-gT4rBGcjmpocn2pnhYaVRgvIiyO36RHUNsxXrA7VV0ShfgXA" height=176 width=237></td></td>
-
-<td><td>flackr@ simplifies pointer-events spec. Previously the spec had a dirty flag which lazily updated the targets of coalesced/predicted events.</td></td>
-
- <td><td>Leaks implementation details into the spec</td></td>
-
-<td><td>Updated this to immediately update the dependent lists</td></td>
-
- <td><td>Remove dirty flag</td></td>
-
- <td><td>Well-known when targets change.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: à la carte</td></td>
-
-<td><td><table></td></td>
-<td><td><tr></td></td>
-
-<td><td><td>Refactor native paintworklet</td></td></td>
-
-<td><td><td>xidachen@ proposed a refactor to the native paintworklet code. Detailed doc is <a href="https://docs.google.com/document/d/12g1OLIxZk9ayLNbOI87ru_yoUUWdxcKewDLRR4tqzi8/edit#heading=h.nu1jp6hyj0mz">here</a>, the first <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3016115">CL</a> has landed. </td></td></td>
-
-<td><td><td>Scroll Unification - Google Docs jumpy scrollbar drags</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh3.googleusercontent.com/H3RZ16cqhZwwNG8O_ea_qJsLmxaiZLSeduLfiRnetgWljFW6x3Fvca8uzLrQD__RY42Lv-Zx5NaFTQmCprz95vdlNrIva0T-3aaIqCS0arWFcg0xyn_Y6HkV4a_eELFzd6cRAo-fKQ" height=113 width=277></td></td></td>
-
-<td><td><td>skobes@ landed a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3002029">CL</a> that fixes a jumpy scrollbar <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1175210">bug</a>.</td></td></td>
-
-<td><td></tr></td></td>
-<td><td></table></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter VI: Bug Updates</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/xVq-pGe3-RAvFhB6HoAb1qGwQavMEbRBNFZczC2FgQ0GgqnxHP3tddLvuzMZJ2Y9wWXrRLF1NH8PsPJNJMiJr6GN6RDrJ1mzG5upm4oXbbh_FIPT-Cq6_RIRPA2jWlr2bQ7C-tSbsg" height=158 width=284> <img alt="image" src="https://lh4.googleusercontent.com/CzOEl3V5_tEZsAi8uhknTkhUzWJ2aNZvVEDrIbyXkBwIPa_4mGbojhLftwa9C3KmS2GJU91bXyDxO7nd5aYCL__etSHMH6NtORK5Pl6tUFlxJHOdFw7iVMOzA_NAAk6mgOd-OOkqjg" height=161 width=288></td></td>
-
-<td><td>The increase in P1 bugs appears to be linked to influx of fixit-2021-testing-flaky bugs. Some efforts is required to properly triage them.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | July 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/layout-test-contest/index.md b/chromium/docs/website/site/layout-test-contest/index.md
deleted file mode 100644
index c49d7431c66..00000000000
--- a/chromium/docs/website/site/layout-test-contest/index.md
+++ /dev/null
@@ -1,293 +0,0 @@
----
-breadcrumbs: []
-page_name: layout-test-contest
-title: Layout Test Contest
----
-
-## Why? Fix all test ordering issues so we can enable --order=random-seeded by default. Drive number of lines in test_expectations to 0 so it is easier to maintain. Win fame and prizes!
-
-### Who? Everyone! Yes, you can participate even if you've never contributed to Blink before! In fact, this is the perfect way to get some Blink commits under your belt! You don't need to be a Google employee either.
-
-### Dates: The contest will begin on 9/30 ~~and end on 10/20 at 11:59pm PST~~ extended to 10/27 at 11:59pm PST!!! All code must be submitted for review during these dates to be eligible.
-
-### Scoring: Points will be awarded based on the tasks completed. Point values for each task are explained below. Each participant's score will be the sum of his or her points. See the [leaderboard](/layout-test-contest/layout-test-contest-leaderboard)!
-
-### Winners & Prizes:
-
-There are many chances to win! In addition to standard 1st, 2nd, 3rd Place,
-there are additional prizes:
-
-* Cheetah: First person to 250 points. Start off the contest with a
- bang!
-* Top Reviewer: Awarded to the participant with the highest number of
- points from code reviews only. Show off your code review skillz!
-* Best Yak Shave: Awarded to the participant with the most ridiculous
- patch, or series of patches, required to solve a "simple" problem.
- Show your perseverance!
-* Top Slacker: Awarded to the participant with the highest number of
- points gained, who starts AFTER October 14, 11:59pm PST.
-
-Winners will select a prize from a prize category. Any prize can be exchanged
-for a **"Get out of gardening free pass!" - Priceless!**
-
-#### 1st Prize: Awarded to the participant with the highest number of points.
-
-**Your choice of:**
-
-Indoor Sky Diving Party
-for 12
-<img alt="Vegas Indoor Skydiving Elvis"
-src="http://media-cdn.tripadvisor.com/media/photo-s/01/ca/ea/7a/vegas-indoor-skydiving.jpg"
-height=133 width=200>
-
-[Kitchit Dinner
-Party](http://www.kitchit.com/listings/late-summer-farmers-market-dinner)
-for 8
-
-[<img alt="image"
-src="https://kitchit-static01.insnw.net/images/4453/Large/6215_1160623569817_1054627764_484055_6067109_n.jpg"
-height=133
-width=200>](https://kitchit-static01.insnw.net/images/4453/Large/6215_1160623569817_1054627764_484055_6067109_n.jpg)
-
-Sennheiser HD 650 Headphones
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/81zggHtrqML._SY300_.jpg" height=200
-width=142>
-
-iRobot Roomba or Scooba
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/41kXrlCafUL._SX450_.jpg" height=140
-width=200>
-
-LG Electronics 50LN5400 50-Inch 1080p 120Hz LED-LCD HDTV with Smart Share
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/81M29eUuQgL._SX300_.jpg" height=175
-width=200>
-
-1982 Port Ellen 30yr Scotch
-<img alt="1982 Port Ellen 30 Year Old "K&L Exclusive" Sovereign Single Barrel
-Cask Strength Single Malt Whisky 750ml"
-src="http://www.klwines.com/images/skus/1117203l.jpg" height=200 width=83>
-
-#### 2nd Prize: Awarded to the participant with the second highest number of points.
-
-**Your choice of:**
-
-Indoor Sky Diving Party
-for 5
-<img alt="Vegas Indoor Skydiving Elvis"
-src="http://media-cdn.tripadvisor.com/media/photo-s/01/ca/ea/7a/vegas-indoor-skydiving.jpg"
-height=133 width=200>
-
-[Kitchit Dinner
-Party](http://www.kitchit.com/listings/late-summer-farmers-market-dinner)
-for 4
-<img alt="image"
-src="https://kitchit-static01.insnw.net/images/4453/Large/6215_1160623569817_1054627764_484055_6067109_n.jpg"
-height=133 width=200>
-
-Nexus 7 32G
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/71mCTJlJwGL._SY679_.jpg" height=200
-width=140>
-
-Sonos Play 3
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/81VEXB6fJwL._SX522_.jpg" height=185
-width=200>
-
-Breville Smart Oven Convection Toaster Oven with Element IQ
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/41W8PMvH9FL._SX450_.jpg" height=120
-width=200>
-
-1996 Opus One Napa Valley Proprietary Red
-<img alt="1996 Opus One Napa Valley Proprietary Red"
-src="http://www.klwines.com/images/skus/301229l.jpg" height=200 width=83>
-
-#### 3rd Prize: Awarded to the participant with the third highest number of points.
-
-#### Cheetah: First person to 250 points. Start off the contest with a bang!
-
-#### Top Reviewer: Awarded to the participant with the highest number of points from code reviews only. Show off your code review skillz!
-
-**Top Slacker: Awarded to the participant with the highest number of points
-gained, who starts AFTER October 14, 11:59pm PST.**
-
-**Your choice of:**
-
-[Kitchit Dinner
-Party](http://www.google.com/url?q=http%3A%2F%2Fwww.kitchit.com%2Flistings%2Flate-summer-farmers-market-dinner&sa=D&sntz=1&usg=AFrqEzeeon2ePMRBRFaHc6luP02HSn0e3w)
-for 2
-<img alt="image"
-src="https://kitchit-static01.insnw.net/images/4453/Large/6215_1160623569817_1054627764_484055_6067109_n.jpg"
-height=133 width=200>
-
-SodaStream Pure w/ Soda Starter Kit
-<table>
-<tr>
-<td><img alt="Pure - Soda Starter Kit " src="http://www.sodastreamusa.com/Assets/ProductImages/pure_soda_starter_black.jpg" height=200 width=200></td>
-</tr>
-</table>
-
-Sennheiser HD 558 Headphones
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/41ljcZIdgGL._SY300_.jpg" height=200
-width=153>
-
-Kindle Paperwhite, 3G
-<img alt="image"
-src="http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/technical._V376689304_.jpg"
-height=200 width=189>
-
-Breville Compact Smart Oven Toaster Oven with Element IQ
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/41AU85%2BnMFL._SX450_.jpg" height=128
-width=200>
-
-Macallan 18 year old Single Malt
-<img alt="Macallan 18 year old Single Malt Whisky 750ml"
-src="http://www.klwines.com/images/skus/620010l.jpg" height=200 width=83>
-
-#### Best [Yak Shave](http://en.wiktionary.org/wiki/yak_shaving): Awarded to the participant with the most ridiculous patch, or series of patches, required to solve a "simple" problem.
-
-**Your very own Shaving Yak Action Figure!**
-
-<img alt="image"
-src="http://ecx.images-amazon.com/images/I/41K5N9X899L._SX385_.jpg" height=200
-width=180> +
-
-#### **Your choice of:**
-
-**Indoor Sky Diving**
-**for 2**
-**<img alt="Vegas Indoor Skydiving Elvis"
-src="http://media-cdn.tripadvisor.com/media/photo-s/01/ca/ea/7a/vegas-indoor-skydiving.jpg"
-height=133 width=200>**
-
-**SodaStream Genesis w/ Soda Starter Kit**
-**<table>**
-**<tr>**
-
-**<td><img alt="Genesis - Soda Starter Kit "
-src="http://www.sodastreamusa.com/Assets/ProductImages/genesis_soda_starter_black.jpg"
-height=200 width=200></td>**
-
-**</tr>**
-**</table>**
-
-**Sennheiser HD-280 PRO Headphones**
-**<img alt="image"
-src="http://ecx.images-amazon.com/images/I/413dm8SG1nL._SY300_.jpg" height=200
-width=153>**
-
-**Kindle Paperwhite, Wi-Fi**
-**<img alt="image"
-src="http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/technical._V376689304_.jpg"
-height=200 width=189>**
-
-**AeroGarden Classic 7-Pod with Gourmet Herb Seed Kit**
-**<img alt="image"
-src="http://ecx.images-amazon.com/images/I/51nhCytPscL._SY450_.jpg" height=200
-width=184>**
-
-**2003 Dom Perignon**
-**<img alt="2003 Moet & Chandon "Dom Pérignon" Brut Champagne"
-src="http://www.klwines.com/images/skus/1089853l.jpg" height=200 width=83>**
-
-#### \*For non-MTV based winners, suitable equivalent prizes will be awarded if necessary.
-
-### How to Participate
-
-1. Complete any of the tasks below.
-2. For each task, submit your participation info using [this
- form](https://docs.google.com/a/chromium.org/forms/d/1MHJ_WC-niQkhvnyofWkEl-zaRUZpz7fxrLkllDKR-p8/viewform).
- Sorry, any task completed, but not submitted in this manner, will
- not be eligible.
-3. Profit!
-
-## Points
-
-Points are not additive. Each patch can only apply to one category.
-
-#### C++ or Python change fix to endemic test flakiness
-
-* Points: 50
-* Examples: reset some state between test runs or fix a race condition
- in run-webkit-tests.
-
-#### Fix a line or flaky test in TestExpectations that crashes
-
-* Points: 5/line
-* Includes \[ Pass Crash \] lines.
-
-**Fix a line or flaky test in TestExpectations that doesn't crash**
-
-* Points: 3/line
-
-#### Remove a line from TestExpectations (with no other changes, whitespace and comment lines do \*not\* count)
-
-* Points: 1/line
-* This is for TestExpectations-only changes. If you made a
- non-TestExpectations-only change that fixed more tests than you
- realized, you can still submit a TestExpectations-only change for 3
- points per line.
-
-#### Code review a C++/Python change
-
-* Points: 3
-* Again, pure TestExpectations-only changes don't count.
-* It's the reviewer's responsibility to fill out the form above.
-
-## How To
-
-Here are some ideas for ways to identify test flakiness/ordering issues.
-
-### 1. Fix filed test ordering bugs (good way to find C++ endemic flakiness issues!!)
-
-<https://code.google.com/p/chromium/issues/list?q=label:LayoutTestOrdering>
-
-### 2. Run tests in a random order and diagnose failures
-
-1. Run "run-webkit-tests --order=random --no-retry".
-2. Run "./Tools/Scripts/print-test-ordering" and save the output to a
- file. This outputs the tests run in the order they were run on each
- content_shell instance.
-3. For each test that fails:
- 1. Find which worker it ran on.
- 2. Create a file that contains only the tests run on that worker in
- the same order as in your saved output file.
- 3. run-webkit-tests --child-processes=1 --order=none
- --test-list=path/to/file/from/previous/step
- 4. If the test doesn't fail here, then the test itself is probably
- just flaky. If it does, remove some lines from the file created
- in step 2.2 and repeat step 3. Continue repeating until you've
- found the dependency. If the test fails when run by itself, but
- passes on the bots, that means that it depends on another test
- to pass. In this case, you need to generate the list of tests
- run by "run-webkit-tests --order=natural" and repeat this
- process to find which test causes the test in question to
- \*pass\* (e.g. [crbug.com/262793](http://crbug.com/262793)).
- 5. File a bug and give it the LayoutTestOrdering label, e.g.
- [crbug.com/262787](http://crbug.com/262787) or
- [crbug.com/262791](http://crbug.com/262791)
-
-### 3. Run tests in isolation
-
-Run "run-webkit-tests --batch-size 1 --no-retry". This starts up a new
-content_shell instance for each test. Tests that fail when run in isolation but
-pass when run as part of the full test suite represent some state that we're not
-properly resetting between test runs or some state that we're not properly
-setting when starting up content_shell. You might want to run with
---timeout-ms=60000 to weed out tests that timeout due to waiting on
-content_shell startup time.
-
-### 4. Diagnose especially flaky tests
-
-1. Load the[ flakiness
- dashboard](http://test-results.appspot.com/dashboards/overview.html#group=%40ToT%20Blink&flipCount=12)
-2. Tweak the flakiness threshold to the desired level of flakiness.
-3. Click on "layout-tests" to get that list of flaky tests.
-4. Diagnose the source of flakiness for that test.
-
-### 5. Fix any line in TestExpectations
diff --git a/chromium/docs/website/site/layout-test-contest/layout-test-contest-leaderboard/index.md b/chromium/docs/website/site/layout-test-contest/layout-test-contest-leaderboard/index.md
deleted file mode 100644
index 2598ea3324a..00000000000
--- a/chromium/docs/website/site/layout-test-contest/layout-test-contest-leaderboard/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs:
-- - /layout-test-contest
- - Layout Test Contest
-page_name: layout-test-contest-leaderboard
-title: layout-test-contest-leaderboard
----
-
diff --git a/chromium/docs/website/site/nativeclient/day-to-day/codereview/index.md b/chromium/docs/website/site/nativeclient/day-to-day/codereview/index.md
deleted file mode 100644
index 265b8703cd4..00000000000
--- a/chromium/docs/website/site/nativeclient/day-to-day/codereview/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/day-to-day
- - '6: Day-to-Day Engineering'
-page_name: codereview
-title: Native Client Code Review and Check-in Process
----
-
-# Subteams
-
-1) Designate owners for that subteam.
-2) Set policies for who can give LGTM for the modules owned by that subteam.
-3) Once OWNERS is implemented, there may be an approval step required in
-addition to (2).
-
-## Authors
-
-0) Read the [coding style document](/nativeclient/styleguide).
-1) Run cpplint.py, pylint, tidy, etc., as appropriate.
-2) The change list comment should describe the change and whether it is a
-cosmetic change, a bug fix, or a new feature.
-3) Make sure the CL is passing trybots before sending out for review.
-4) Pick reviewers that are familiar with the code in question.
-
-a) Pick more than one reviewer if the CL spans more than one module.
-
-b) One LGTM per module touched is required.
-
-c) (Multiple reviewer details to be worked out.)
-
-5) All review requests should be sent to native-client-reviews@googlegroups.com.
-6) All “significant” CLs have a BUG= line and an entry in the issue tracker.
-
-e.g., CLs that fix misspellings in comments or improve coding convention
-conformance are not bug-worthy, while fixing a crasher or adding a new PPAPI
-interface is.
-
-7) All new code CLs have a TEST= line and one or more tests that exercise the
-new code.
-e.g., Changing comments does not require a test, while adding a new system call
-does.
-The test should be specific enough that the reviewer can reproduce it.
-8) Don’t re-upload the CL until addressing all of the reviewers’ comments from
-an iteration.
-Explicitly reply to comments in Rietveld.
-
-(Rietveld makes it difficult to ensure all the comments were addressed.)
-
-## Code reviewers
-
-Ensure
-1) The CL conforms to the [NaCl coding
-conventions](http://www.chromium.org/nativeclient/styleguide).
-2) The CL passed the trybots.
-3) The CL follows the designated author tasks above.
-4) You understand what the CL is doing and believe it is doing it correctly.
-5) Review iterations are completed within one business day or referred to
-another reviewer.
-
-a) Repeated issues may be elided and another iteration required.
-
-b) Large CLs may be broken into sub-reviews.
-
-c) We encourage sending comments or feedback early so as to pipeline the fixes.
-
-The reviewer may summarily reject the CL if it doesn’t follow (2-3).
-If you LGTM a CL that breaks the build, you share responsibility for the break.
-
-## Sheriffs
-
-1) The first responsibility at all times is to keep the tree open. Even if that
-means going back to the last known good revision.
-2) Can summarily revoke CLs, and ask author or a reviewer(s) to do revocation.
-3) For more details, see <http://www.chromium.org/developers/tree-sheriffs> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/day-to-day/index.md b/chromium/docs/website/site/nativeclient/day-to-day/index.md
deleted file mode 100644
index 34df14eac1b..00000000000
--- a/chromium/docs/website/site/nativeclient/day-to-day/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: day-to-day
-title: '6: Day-to-Day Engineering'
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/day-to-day/infrastructure-faq/index.md b/chromium/docs/website/site/nativeclient/day-to-day/infrastructure-faq/index.md
deleted file mode 100644
index b92dc005978..00000000000
--- a/chromium/docs/website/site/nativeclient/day-to-day/infrastructure-faq/index.md
+++ /dev/null
@@ -1,219 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/day-to-day
- - '6: Day-to-Day Engineering'
-page_name: infrastructure-faq
-title: Infrastructure FAQ
----
-
-**[TOC]**
-
-### **Why do some DEPS / .gclient URLs use http://, https://, svn:// ?**
-
-We would like .gclient files to function correctly for users both inside and
-outside Google.
-
-In order to facilitate this, whenever a DEPS file lists repositories, read-only
-publicly accessible URLs are preferred.
-
-These typically being with http://
-
-For example:
-
-http://src.chromium.org/chrome/trunk/base - *read-only URL for base from
-chromium.*
-
-http://nativeclient.googlecode.com/svn/trunk/src/native_client - read-only nacl
-main repo
-
-Sometimes svn:// and https:// URLs are used.
-
-There are two main reasons:
-
-* To specify checking out a writable svn client ==inside a .gclient
- file==
-* To pull in an internal only writable repository inside a DEPS file
- (since it's internal you can assume it can always be checked out
- writable).
-
-Google Code (nativeclient, naclport, etc) only supports http:// and https://.
-
-Chromium's primary svn mirror (src.chromium.org) does http:// only.
-
-Chromium's svn servers (svn.chromium.org, chrome-svn) support only svn://.
-
-### **How do I make changes outside src/native_client?**
-
-If the repository is internal only, make changes as usual, use gcl in each
-repository.
-
-You can use ==svn info== to get information about the repository you're
-currently in.
-
-For public repositories, you may need to make sure you've got a writable client.
-
-(gclient can use svn switch to switch from read-only to writable in most cases
-preserving patches).
-
-To make a particular repository checkout writable, add a section like the
-following to you .gclient file:
-
-"custom_deps" : {
-
-"native_client/third_party/foo":
-"https://nativeclient.googlecode.com/svn/trunk/deps/third_party/foo",
-
-},
-
-This overrides the URL specified for foo in native_client/DEPS
-
-### **How can I make gclient not check everything out?**
-
-Modify your .gclient file to add a custom_deps section, listing None for the
-paths to exclude:
-
-"custom_deps" : {
-
-"src/data/esctf": None,
-
-"src/data/mozilla_js_tests": None,
-
-"src/data/page_cycler": None,
-
-"src/data/tab_switching": None,
-
-"src/data/saved_caches": None,
-
-"src/data/selenium_core": None,
-
-"src/tools/grit/grit/test/data": None,
-
-}
-
-**Note:** the above instruction is not useful because most of the checkout time
-is consumed by downloading all the necessary toolchains and unpacking them. To
-manually disable one of the toolchains from downloading, first download all of
-them in the initial checkout.
-
-```none
-shell$ ls native_client/toolchain
-linux_arm-trusted
-linux_x86
-linux_x86_newlib
-pnacl_linux_x86_64
-pnacl_linux_x86_64_glibc
-pnacl_linux_x86_64_newlib
-pnacl_translator
-```
-
-To disable updating one of them, for example, pnacl_linux_x86_64, change the
-test in file:
-
-```none
-shell$ echo manual > native_client/toolchain/pnacl_linux_x86_64/SOURCE_URL
-```
-
-All subsequent gclient syncs would (hopefully) assume that this toolchain is
-up-to-date.
-
-### **I keep getting patch failure on the trybots, what do I do?**
-
-Patches typically fail on the trybots because of version mismatch between what
-is in the patch and the revision that the trybot wants to patch against.
-
-If your client is really old, do a gclient update before submitting try jobs to
-bring it in sync.
-
-The trybot uses http://nativeclient-status.appspot.com/lkgr (last known good
-revision), to decide what to patch against.
-
-This is intended to allow you to submit try jobs, even when the tree is red.
-
-If you ever need to apply a patch which does not work against the default on the
-try bot, you can add various flags to gcl try:
-
-* -r REV# -- patch against a specific revision
-* -r HEAD -- patch against tip of trunk
-* -c -- clobber the build before applying the patch (of limited use
- for nacl, but useful for chromium)
-
-### **I get strange error messages when compiling on Windows, what do I do?**
-
-Be sure to install all the service packs listed for chromium:
-
-http://www.chromium.org/developers/how-tos/build-instructions-windows
-
-### **The toolchain in native_client appears to be out of date. How do I safely update it?**
-
-If you make changes to the untrusted or shared code, you need to update the
-toolchain revision(s) after your change is committed and the toolchain build is
-green. (If the toolchain build is red, you will need to check in a fix right
-away or simply rollback your change).
-For example, we updated the ppapi revision in DEPS, which required updates to
-the code under src/shared. This needs a toolchain revision update. So we have:
-PPAPI DEPS revision:
-<http://src.chromium.org/viewvc/native_client?view=rev&revision=3418>
-Follow-up fix revision:
-<http://src.chromium.org/viewvc/native_client?view=rev&revision=3421>
-There are two families of toolchains that generally need to be updated in
-nactive_client/DEPS: `arm_toolchain_version` and `x86_toolchain_version`. It is
-recommended to update them both to the same revision at a time.
-To perform this straightforward toolchain revision update:
-
-* go to <http://build.chromium.org/p/client.nacl.toolchain/console>
- (linked under "Toolchain" header on
- <http://build.chromium.org/p/client.nacl/console>):
-* find the latest green row and let `$REV` to be the corresponding SVN
- revision to that row
-* check for toolchain tarballs availability:
-
- ```none
- shell> cd native_client/
- shell> python build/find_toolchain_revisions.py -s $REV
- ```
-
-* if all tarballs are available, you will get the output:
-
- ```none
- Searching for available toolchains...
- checking r$REV: x86: OK, arm: OK
- ```
-
-* The script will go and check the older revisions, interrupt it as
- soon as you do not need more results
-* This revision `$REV` can now be used in `native_client/DEPS` for
- both toolchain versions.
-* If some tarballs are not available, the output would be something
- like:
-
- ```none
- checking r$REV: x86: missing win_x86, arm: missing pnacl_linux_x86_64_newlib
- ```
-
-* When found a revision with all toolchains available, do not forget
- to check that all builds in the "Toolchain" builder console are
- green for that row. Sometimes they can be red for reasons irrelevant
- to toolchain correctness, you may try those if you are brave.
-
-To perform toolchain revision update for only one family (i.e.
-`arm_toolchain_version` or `x86_toolchain_version`) you will need only the 'OK'
-for that family in toolchain tarballs availability and buildber green status
-only of a subset of the rows (subject to frequent change):
-
-* arm_toolchain_version
- * linux-pnacl-x86_64
- * linux-armtools-x86_32
- * linux-pnacl-x86_32
- * mac-pnacl-x86_32
-* x86_toolchain_version
- * win7-toolchain_x86
- * mac-toolchain_x86
- * lucid64-toolchain_x86
- * win7-glibc
- * mac-glibc
- * lucid64-glibc
-
-TODO: describe the update procedure for NaCl SDK (requires updating toolchain
-DEPS in the Chrome tree, pushing the new manifest).
diff --git a/chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/index.md b/chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/index.md
deleted file mode 100644
index 588a360aee2..00000000000
--- a/chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/index.md
+++ /dev/null
@@ -1,244 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/getting-started
- - '1: Getting Started'
-page_name: getting-started-background-and-basics
-title: 'Getting Started: Background and Basics'
----
-
-This document gives a broad high-level overview of what Native Client is and how
-it fits into the world of web browsers and plugins (Chrome in particular). It is
-intended for anybody who wants to learn about the background and concepts behind
-Native Client, from browser technology fans, to pontential project contributors,
-to NaCl module developers.
-
-### [TOC]
-
-### Chrome
-
-Chrome is a
-[multi-process](http://www.chromium.org/developers/design-documents/multi-process-architecture)
-browser. It uses multiple processes to provide increased security comparing to
-other single-process browsers like Firefox.
-The main process is called "browser". It runs the UI (including the
-[Omnibox](/user-experience/omnibox)) and manages tabs and plugin processes. It
-has full permissions of the current user for accessing resources (files,
-network, etc) and can fork-exec other processes.
-Tabs are allocated into separate processes, typically shared per domain. These
-are called “renderer” processes. Renderer interprets the HTML layout and handles
-the bitmap for displaying the page. It runs in a sandbox (known as Chrome or
-outer sandbox) and has limited access permissions. It cannot open files or
-network connections and can only respond to communication requests by the
-browser. Communication is done via a combination of
-[IPC](http://www.chromium.org/developers/design-documents/inter-process-communication)
-techniques. Using sandboxed renderers ensures that if one tab misbehaves or
-crashes, the rest of the tabs and the browser are isolated. It also limits the
-ability of malicious software running in one tab from accessing activity in
-another tab or interacting with the rest of the system.
-
-### Plugins
-
-[Plugins](http://en.wikipedia.org/wiki/Plug-in_%28computing%29) are external
-binaries that add new capabilities to a web browser and are loaded when content
-of the type they declare is embedded into a page. They either come bundled with
-the browser or get downloaded and installed by the user. The most common plugins
-are [Adobe Flash](http://en.wikipedia.org/wiki/Adobe_flash), [Adobe
-Reader](http://en.wikipedia.org/wiki/Acrobat_reader) and
-[Java](http://en.wikipedia.org/wiki/Java_plugin).
-In general, existing plugins cannot be sandboxed like the render process because
-they rely on file system and network access as well as use of native fonts.
-Therefore, Chrome supports [out of process
-plugins](http://www.chromium.org/developers/design-documents/plugin-architecture)
-that run in a separate process with full privileges (i.e. no sandbox) and
-communicate with the renderer and browser via
-[IPC](http://www.chromium.org/developers/design-documents/inter-process-communication).
-Chrome also supports [in process
-plugins](http://www.chromium.org/developers/design-documents/plugin-architecture).
-They run within a render process and can use faster direct access for
-communication. They have also been used as an integration mechanism for adding
-new statically linked functionality to the browser.
-
-### Netscape Plugin API (NPAPI) (No longer used by Native Client)
-
-[NPAPI](https://wiki.mozilla.org/NPAPI) is a common cross-browser plugin
-framework used by plugins for exchanging data with the browser. It is
-implemented by Chrome, Firefox and most other web browsers, excluding MS
-Internet Explorer, which stopped supporting it in favor of
-[ActiveX](http://en.wikipedia.org/wiki/ActiveX_control).
-Contrary to other single-process browsers, Chrome
-[supports](http://code.google.com/chrome/extensions/npapi.html) NPAPI plugins
-out of process.
-While this improves stability, security is still an issue - even in Chrome,
-NPAPI plugins have full permissions of the current user to access resources and
-fork-exec new processes.
-Although NPAPI is intended to be platform independent, in reality it is not
-fully so. NPAPI is a weak "standard", and every browser implements it somewhat
-differently. Moreover, NPAPI plugins end up relying on OS and browser specifics
-for certain capabilities, such as 2D or 3D graphics events. Even keyboard and
-mouse events typically use the native OS implementation. It can also be
-difficult to achieve similar rendering of the plugin area within a page across
-different systems.
-
-### Pepper Plugin API (PPAPI)
-
-[Pepper](https://wiki.mozilla.org/NPAPI:Pepper) started at Google as a way to
-address portability and performance issues with NPAPI, particularly for out of
-process plugins. The initial focused efforts eventually expanded to include
-capabilities such as generic 2D and 3D graphics and audio.
-The first Pepper API designs were created to minimize the changes from legacy
-NPAPI, hoping to ease adoption by browser vendors and plugin developers. This
-design was implemented and is available to NaCl modules in Chrome 5. The Pepper
-APIs were redesigned subsequent to the initial design, deviating more
-substantially from legacy NPAPI while, hopefully, also improving the interfaces.
-The [revised interfaces](http://code.google.com/p/ppapi/w/list) are sometimes
-referred to as “PPAPI” or “Pepper2” and should be available in Chrome 6.
-
-Although traditional NPAPI plugins in Chrome run only out of process, Chrome 5
-supports Pepper plugins only in process. Being a somewhat experimental feature,
-the only way to load trusted Pepper plugins is through the browser command-line
-options. In the future, Pepper plugins will only be supported within Native
-Client.
-
-### Native Client (NaCl)
-
-[Native Client ](http://code.google.com/p/nativeclient/)is a sandboxing
-technology for safe execution of platform-independent untrusted native code in a
-web browser. It allows real-time web applications that are compute-intensive
-and/or interactive (e.g. games, media, large data analysis, visualizations) to
-leverage the resources of a client's machine and avoid costly network access
-while running in a secure environment with restricted access to the host.
-[Native Client SDK](http://gonacl.com) is a software development kit for
-creating Native Client executables (abbreviated as nexe) from scratch or from
-the existing platform-specific web-based native applications. It consists of a
-[GNU](http://en.wikipedia.org/wiki/GNU_Project)-based toolchain with customized
-versions of [gcc](http://en.wikipedia.org/wiki/GNU_Compiler_Collection),
-[binutils](http://en.wikipedia.org/wiki/Binutils) and
-[gdb](http://en.wikipedia.org/wiki/Gdb) (32-bit x86 only), precompiled API
-libraries and various examples and how-tos. The two usage models include porting
-desktop apps and extending web apps with fast native code.
-[Naclports](http://code.google.com/p/naclports/) is a collection of ports of
-various open-sourced projects (like [zlib](http://en.wikipedia.org/wiki/zlib))
-to Native Client for gradual up-streaming. It is still in early stages of
-development and is intended to be modeled after
-[Macports](http://www.macports.org/).
-NaCl started as a downloadable NPAPI plugin for multiple browsers, including
-Firefox, Safari, Opera and Chrome and was designed to transparently load and run
-other NPAPI plugins compiled as nexes and embedded into the page as a source
-file of an [plugin
-element](https://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Plug-in_Basics#Using_HTML_to_Display_Plug-ins)
-with “application/x-nacl-srpc” type.
-NaCl includes a "service runtime" subsystem that provides a reduced system call
-interface and resource abstractions to isolate nexes from the host. It provides
-a [POSIX](http://en.wikipedia.org/wiki/Posix)-like environment for nexe
-execution and is used by nexes to communicate with each other and the browser.
-The nexes are run using a loader program, sel_ldr (secure
-[ELF](http://en.wikipedia.org/wiki/Executable_and_Linkable_Format) loader),
-which is launched as a separate process. The sel_ldr process communicates with
-the NaCl plugin via [SRPC](/system/errors/NodeNotFound) over IMC \[citation
-needed\].
-NaCl was [integrated](/system/errors/NodeNotFound) into Chrome 5 as an
-in-process Pepper plugin. The NaCl modules that it runs can utilize the Pepper
-API for browser interaction. Part of the integration was to add special support
-to Chrome to allow sandboxed plugins to launch the sel_ldr process. NaCl can be
-enabled in Chrome 5 and later with the --enable-nacl command-line flag at
-browser start-up by developers who want to develop Native Client modules. From
-Chrome 14 and onwards Native Client is on by default and can be used in [Chrome
-Web Store](https://chrome.google.com/webstore) apps. For development purposes
-Native Client is also available to [unpacked
-extensions](http://code.google.com/chrome/extensions/getstarted.html). Once we
-launch Portable Native Client (PNaCl)
-([PDF](http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf)), we plan to
-enable Native Client for web pages in general (i.e., not limited to Chrome Web
-Store apps).
-
-### Trusted vs Untrusted
-
-In the presence of a sandbox environment, trusted code runs outside of the
-sandbox and can perform privileged operations while untrusted code is prohibited
-from doing so by the enclosing sandbox, which isolates potentially misbehaving
-or malicious software from the rest of the system.
-Within the scope of Native Client, whether code is untrusted or trusted depends
-on whether it will run inside of a NaCl sandbox (regardless of any outer
-sandbox). The code that implements the sandbox abstraction is trusted. The code
-that the sandbox hosts is untrusted. Untrusted code is built using NaCl SDK or
-any other compiler that outputs binaries that honor alignment and instruction
-restrictions and can be validated by NaCl. NaCl will statically verify that
-nexes do not attempt privileged operations and therefore do not need to be
-trusted.
-To summarize, the traditional NPAPI plugins running out of process and outside
-of any sandbox are considered trusted. The in process Pepper plugins running
-within the Chrome sandbox are trusted with respect to NaCl. And the out of
-process plugins (that must run inside Native Client) are untrusted. NaCl's
-sel_ldr process is trusted and can do Chrome sandbox system calls on behalf of
-the untrusted nexes running within it.
-
-### Diagram
-
-![](/nativeclient/getting-started/getting-started-background-and-basics/nacl_diagram.png)
-
-### Related Documentation
-
-Chrome
-
-<http://www.chromium.org/developers/design-documents/multi-process-architecture>
-
-<http://www.chromium.org/developers/design-documents/inter-process-communication>
-
-<http://www.chromium.org/developers/design-documents/plugin-architecture>
-
-<http://code.google.com/chrome/extensions/npapi.html>
-
-Plugins
-
-<https://developer.mozilla.org/en/Plugins>
-
-<https://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Scripting_plugins>
-
-<https://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Plug-in_Basics>
-
-<https://wiki.mozilla.org/NPAPI>
-
-<https://wiki.mozilla.org/NPAPI:Pepper>
-
-NaCl
-
-<http://code.google.com/p/nativeclient/wiki/Papers>
-
-<http://code.google.com/p/nativeclient/>
-
-==<http://GoNaCl.com>==
-
-<http://code.google.com/p/naclports/>
-
-<http://www.chromium.org/nativeclient/simple-rpc>
-
-[Native Client integration with Chrome](/system/errors/NodeNotFound)
-
-### Articles and Blog Posts
-
-*Important: this section is kept for historic purposes, but is no longer being
-updated. For news and announcements see the SDK site at
-[GoNaCl.com](http://GoNaCl.com) and the [announcements
-list](https://groups.google.com/group/native-client-announce).*
-
-Google
-
-12/08
-<http://googlecode.blogspot.com/2008/12/native-client-technology-for-running.html>
-
-12/08
-<http://googleonlinesecurity.blogspot.com/2008/12/native-client-technology-for-running.html>
-
-Other
-
-01/09
-<http://blog.taragana.com/index.php/archive/google-native-client-a-detailed-discussion/>
-
-06/09 <http://lwn.net/Articles/335974/>
-
-03/10
-<http://arstechnica.com/.../google-bakes-flash-into-chrome-hopes-to-improve-plugin-api.ars>
-
-04/10 <http://news.cnet.com/8301-30685_3-20003527-264.html>
diff --git a/chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/nacl_diagram.png.sha1 b/chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/nacl_diagram.png.sha1
deleted file mode 100644
index b409eb820e2..00000000000
--- a/chromium/docs/website/site/nativeclient/getting-started/getting-started-background-and-basics/nacl_diagram.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cc1475da9fe8056c163026823faac9eb9ab8a991 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/getting-started/index.md b/chromium/docs/website/site/nativeclient/getting-started/index.md
deleted file mode 100644
index da9b24edd60..00000000000
--- a/chromium/docs/website/site/nativeclient/getting-started/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: getting-started
-title: '1: Getting Started'
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md b/chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md
deleted file mode 100644
index 8e3ae771ead..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: 3d-tips-and-best-practices
-title: 3D Tips and Best Practices
----
-
-# Pepper 3D on Chrome provides a secure implementation of OpenGL ES 2.0. Here are some tips for getting maximum performance.
-
-## Don’t update indices
-
-For security all indices must be validated. If you change them we have to
-validate them again. Therefore structure your code so indices are not updated
-often.
-
-## Don’t use client side buffers
-
-In OpenGL ES 2.0 you can use client side data with glVertexAttribPointer and
-glDrawElements. It’s REALLY SLOW! Don’t use them. Instead, whenever possible use
-VBOs (Vertex Buffer Objects). Side-note: Client side buffers have been removed
-from OpenGL 4.0.
-
-## Don’t mix vertex data with index data.
-
-Actually this is off by default. In real OpenGL ES 2.0 you can create a single
-buffer and bind it to both GL_ARRAY_BUFFER and GL_ELEMENT_ARRAY_BUFFER. In
-Pepper 3D, by default, you can only bind buffers to 1 bind point. There is the
-option to enable binding buffers to both points. Doing so requires expensive
-work so don’t do it.
-
-## For dynamic textures (ie, video) or dynamic vertex data (skinning / particles) consider using CHROMIUM_map_sub
-
-<http://src.chromium.org/viewvc/chrome/trunk/src/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_map_sub.txt>
-
-## Don’t call glGetXXX or glCheckXXX during rendering.
-
-Calling either of those stalls our multi-process pipeline. This is normal advice
-for OpenGL programs but is particularly important for 3D on Chrome. This
-includes glGetError – avoid calling it in release builds.
-
-## Make sure to enable Attrib 0.
-
-In OpenGL you MUST enable Attrib 0. In OpenGL ES 2.0 you don’t have to enable
-Attrib 0. What that means is that in order to emulate OpenGL ES 2.0 on top of
-OpenGL we have to do some expensive work.
-In practice most programs don’t have an issue here but just in case, the most
-obvious way this might bite you is if you bind your own locations and don’t
-start with 0. Example: Imagine you have a vertex shader with 2 attributes
-“positions” and “normals”
-
-> glBindAttribLocation(program, “positions”, 1);
-
-> glBindAttribLocation(program, “normals”, 2);
-
-Those 2 functions would make make your shader NOT use attrib 0 in which case
-we’d have to do some expensive work internally
-
-## Minimize the use of glFlush and avoid using glFinish
-
-It is generally good practice to minimize explicit calls to glFlush and avoid
-using glFinish. Particularly so on Native Client where they incur additional
-overhead.
-
-## Avoid reading back output from the GPU to the client
-
-In other words, don't call glReadPixels. This is slow.
-
-**When benchmarking, avoid comparing results where one system is limited by
-vsync and another is not.**
-
-## Don’t use GL_FIXED
-
-It’s not supported in OpenGL and so emulation for OpenGL ES 2.0 is slow. By
-default GL_FIXED support is turned off Pepper 3D. There is the option to turn it
-on. Don’t do it.
-
-## Use a smaller plugin and let CSS scale it.
-
-The size your plugin renders and the size it displays in the page are set
-separately. CSS controls the size your plugin displays where as the width and
-height attribute of your &lt;embed&gt; element control the size your plugin
-renders.
-
-## Use HTML where approriate
-
-If you’re used to making native games you’re probably used to rendering
-everything yourself. The browser though can already render text and UI very well
-and it will composite that HTML with your plugin using all the standard HTML5
-and CSS methods available.
-
-**Avoid updating a small portion of a large buffer**
-
-This is especially an issue in Windows where we emulate OpenGL ES 2.0 on top of
-DirectX. In the current implementation, updating a portion of a buffer requires
-re-processing the entire buffer. In other words if you make a buffer
-(glBufferData) of 10000 bytes and then later call glSubBufferData to update just
-3 of those bytes, all 10000 bytes will have to be re-converted. (Yea, I know,
-lame)
-
-2 suggestions:
-
-1. Separate static vertex data from dynamic. In other words, put your
- static data in 1 buffer and dynamic data in a different buffer. That
- way your static data won't have to be re-converted.
-2. Volunteer to fix the perf issues
- <http://angleproject.googlecode.com>
-
-# General OpenGL advice
-
-## Interleaved data is faster to render than non-interleaved
-
-3 buffers of \[position,position,position\], \[normal,normal,normal\],
-\[texcoord,texcoord,texcoord\] is slower than 1 buffer of
-\[position,normal,texcoord,position,normal,texcoord,position,normal,texcoord\].
-
-## Separate dynamic data from static
-
-Assume you have positions, normals and texcoords. Further assume you update
-positions every frame. It would be best to put positions in 1 buffer and normals
-+ texcoords in a separate buffer. That way, you can call glBufferData or
-glBufferSubData on a smaller range of data.
-
-## glBindBuffer is expensive
-
-Consider putting multiple meshes in a single buffer and using offsets (as long
-as the buffers are static, see above)
-
-## Check your extensions and max GL features
-
-Not every GPU supports every extension nor has the same amount of textures
-units, vertex attributes, etc. Make sure you check for the features you need.
-For example, if you are using non power of 2 texture with mips make sure
-GL_OES_texture_npot exists. If you are using floating point textures make sure
-GL_OES_texture_float exists. If you are using DXT1, DXT3 or DXT5 texture make
-sure GL_ETC_texture_compression_dxt1, GL_CHROMIUM_texture_compression_dxt3 and
-GL_CHROMIUM_texture_compression_dxt5 exist.
-If you are using textures in vertex shaders make sure
-glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, …) returns a value greater than
-0.
-If you are using more than 8 textures in a single shader make sure
-glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, …) returns a value greater than or
-equal to the number of simulatious textures you need.
-etc... \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md b/chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md
deleted file mode 100644
index 3c3096382d7..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md
+++ /dev/null
@@ -1,287 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: build-tcb
-title: Building and Testing the Native Client Trusted Code Base
----
-
-[TOC]
-
-## What build system(s) is Native Client using?
-
-The primary build system used by Native Client is [SCons](http://www.scons.org).
-For historical reasons we are not using plain [SCons](http://www.scons.org/) but
-an extension call Hammer.
-
-The parts of the system shared with Chrome are also built using Chrome's build
-system, GN.
-
-We also have some Makefiles and some shell scripts for certain build tasks.
-
-## Why is this such a complex mess?
-
-The usual excuses:
-
-* Inherent complexity.
-* Historical reasons.
-* Entropy requires no maintenance.
-* ...
-
-## Which files contain build system information?
-
-For [SCons](http://www.scons.org/) it is: SConstruct, \*\*/build.scons,
-\*\*/nacl.scons There are also relevant configuration files in
-site_scons/site_tools/\*, and random Python scripts located here and there.
-
-For GN it is: \*\*/BUILD.gn and \*\*/config.gni
-
-## What is the difference between trusted and untrusted code?
-
-"Trusted code" encompasses components like:
-
-* the browser plugin
-* service runtime (sel_ldr)
-
-It is compiled using regular compilers. Bugs in trusted code can compromise
-system security, hence the name. As far as the build system is concerned trusted
-code is described in \*\*/build.scons files. Trusted code lives in
-src/trusted/\*\*
-
-"Untrusted code" encompasses components like:
-
-* quake and other examples of Native Client executables
-* libraries necessary to build those executables
-* The IRT
-
-It is compiled using special sandboxing compilers. As far as the build system is
-concerned, untrusted code is described in \*\*/nacl.scons files. Untrusted code
-lives in src/untrusted/\*\* and also in tests/\*\*
-
-Some code can be compiled either as trusted or shared code, e.g. libraries that
-facilitate communication between trusted and untrusted code. Such code typically
-lives in src/shared/\*\* and has both build.scons and nacl.scons files.
-
-## How do you use the MODE= setting when invoking SCons?
-
-The MODE= setting or its equivalent --mode is used to select whether you want to
-compile trusted or untrusted code or both and how. Examples:
-
-MODE=nacl
-
-* just build untrusted code
-* note that this doesn't build all of the untrusted code. If you don't
- specify a trusted platform (e.g. MODE=opt-linux,nacl) most of the
- tests will not be built.
-
-MODE=opt-linux
-
-* just build (optimized) trusted code - you must be on a Linux system
-
-MODE=nacl,dbg-win
-
-* build both (trusted code will be unoptimized) - you must be on a
- Windows system
-
-NOTE: if you do not specify MODE, "opt-*&lt;your-system-os&gt;"* will be
-assumed.
-
-NOTE: if you want to run integration tests, you need to build both trusted and
-untrusted code simultaneously, because those tests involve running untrusted
-code under the control of trusted code.
-
-What is the meaning of BUILD_ARCH, TARGET_ARCH, etc. ?
-
-Just like any cross compilation environment, there are some hairy configuration
-issues which are controlled by BUILD_ARCH, TARGET_ARCH, etc. to force
-conditional compilation and linkage.
-
-It helps to revisit the
-[terminology](http://www.airs.com/ian/configure/configure_5.html) used by cross
-compilers to better understand Native Client:
-
-> BUILD_SYSTEM: The system on which the tools will be built (initially) is
-> called the build system.
-
-> HOST_SYSTEM: The system on which the tools will run is called the host system.
-
-> TARGET_SYSTEM: The system for which the tools generate code is called the
-> target system.
-
-For [NaCl](/p/nativeclient/wiki/NaCl) we only have **two** of these, sadly they
-have confusing names:
-
-> BUILD_PLATFORM: The system on which the trusted code runs.
-
-> TARGET_PLATFORM: The sandbox system that is being enforced by the trusted
-> code.
-
-The BUILD_PLATFORM is closest in nature to the HOST_SYSTEM, the TARGET_PLATFORM
-is closest to the TARGET_SYSTEM. We do not have an equivalent to BUILD_SYSTEM
-since we just assume the build system is x86 (either a 32- or 64-bit system).
-
-## What kind of BUILD_PLATFORM/TARGET_PLATFORM configurations are supported?
-
-Conceptually we have
-
-> BUILD_PLATFORM = (BUILD_ARCH, BUILD_SUBARCH, BUILD_OS)
-
-and
-
-> TARGET_PLATFORM = (TARGET_ARCH. TARGET_SUBARCH)
-
-NOTE:
-
-There is no TARGET_OS, since Native Client executables are OS independent.
-
-The BUILD_OS is usually tested for using [SCons](http://www.scons.org/)
-expressions like "env.Bit('windows')". You cannot really control it as it is
-inherited from the system you are building on, the BUILD_SYSTEM in cross
-compiler speak.
-
-Enumeration of all BUILD_PLATFORMs:
-
-(x86, 32, linux) (x86, 32, windows) (x86, 32, mac) (arm, 32, linux) // the 32 is
-implicit as there is no 64bit arm
-
-(x86, 64, linux) (x86, 64, windows)
-
-***Special note for Windows users:** The Windows command-line build currently
-relies on vcvarsXX.bat being called to set up the environment. The compiler's
-target subarchitecture (32,64) is selected by the version of vcvars that you
-called (vcvars32/vcvars64). If you call vcvars32 and then build with
-platform=x86-64, you will get "target mismatch" errors.*
-
-Enumeration of all TARGET_PLATFORMs: (x86, 32) (x86, 64) (arm, 32) // the 32 is
-implicit as there is no 64bit arm
-
-Usually BUILD_ARCH == TARGET_ARCH and BUILD_SUBARCH == TARGET_SUBARCH
-
-There is ONLY ONE exception, you can build the ARM validator like so:
-
-> BUILD_ARCH = x86, BUILD_SUBARCH=**, TARGET_ARCH=arm TARGET_SUBARCH=32**
-
-**In particular it is NOT possible to use different SUBARCHs for BUILD and
-TARGET.**
-
-## What is the relationship between TARGET_PLATFORM and untrusted code?
-
-The flavor of the untrusted code is derived from the TARGET_PLATFORM
-
-## Why are *BUILD and ARCH* used inconsistently?
-
-Usually BUILD_ARCH == TARGET_ARCH and BUILD_SUBARCH == TARGET_SUBARCH so
-mistakes have no consequences.
-
-## So how do I build something? (Finally!)
-
-\[Note: scons --download has been deprecated as of Aug 17, 2010\]
-
-The first time you build, you will need to get the latest toolchain build. Do
-this using gclient hooks:
-
-```none
-fetch nacl
-gclient sync
-cd native_client
-```
-
-~~The first time you build something, you use the --download switch to download
-the platform's toolchain.~~
-
- ~~./scons --download MODE=opt-linux,nacl~~
-
- ~~./scons --download MODE=opt-mac,nacl~~
-
- ~~.\\scons --download MODE=opt-win,nacl~~
-
-~~Subsequent builds can omit the --download option. You should use --download
-anytime you want to update your toolchain.~~
-
-The default value for MODE is dbg-*&lt;your-system-os&gt;* so these two commands
-are identical
-
-* ./scons MODE=dbg-*&lt;your-system-os&gt;*
-* ./scons
-
-## How do I run the unittests after the build completes?
-
-To run all unittests:
-
- ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl run_all_tests
-
-To run specific sets of tests:
-
- ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl small_tests
-
- ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl medium_tests
-
- ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl large_tests
-
- ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl browser_tests
-
-To run a single test:
-
-* A trusted test
- * ./scons MODE=opt-*&lt;your-system-os&gt;* run_format_string_test
- * run_format_string_test is defined in
- src/trusted/service-runtime/build.scons
- * Other trusted unittest targets exist in other build.scons
- files
- * Note that you do not need to specify nacl as a mode for a
- trusted test
-* An untrusted test
- * ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl run_thread_test
- * run_thread_test is defined in tests/threads/nacl.scons
- * Other untrusted unittest targets exist in other nacl.scons
- files
-
-## Are there any other cool Scons options?
-
-There are some other scons options which are useful. Note the confusing syntax
-differences for option words (platform=), single minus options (-c), and double
-minus options (--clang). Sorry.
-
-* --clang
- * Use the Clang toolchain downloaded by the DEPS hooks instead of
- gcc on Linux. Probably should be the default.
-* -c
- * clean before building
-* -jN
- * Split the build into N processes. A good choice for N is often
- the number of processors on the machine doing the build
-* MODE=*&lt;build-mode-list&gt;* (or its equivalent
- --mode=*&lt;build-mode-list&gt;*)
- * choices are opt-linux, dbg-linux, opt-mac, dbg-mac, opt-win, and
- dbg-win (for the type of trusted code to build) and nacl (to
- build untrusted code)
- * Usually the *&lt;build-mode-list&gt;* will contain one trusted
- code choice and the untrusted code name, like: opt-linux,nacl
-* platform=TARGET_ARCH
- * Cross-compile for TARGET_ARCH
- * platform=x86-64 is required in order to build for 64-bit
-* sdl=none
- * Do not use SDL
-
-## What about 64-bit?
-
-The build defaults to a 32-bit build even if the machine running the build is a
-64-bit machine. To build for 64-bit:
-
-* add: platform=x86-64
-
-*Also see the **Special note for Windows users** in the **What kind of
-BUILD_PLATFORM/TARGET_PLATFORM configurations are supported?** section above.*
-
-## Where is the source code?
-
-The source code is divided into these main areas:
-
-* src/trusted: Code that runs only as part of the trusted portion of
- Native Client
-* src/untrusted: Code that runs only as part of a user-created Native
- Client program
-* src/shared: Code that can be used in both the trusted portion and
- the user-created portion of Native Client \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md b/chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md
deleted file mode 100644
index 05924246f18..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md
+++ /dev/null
@@ -1,155 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: building-and-testing-gcc-and-gnu-binutils
-title: Building and Testing GCC and GNU binutils
----
-
-[TOC]
-
-## Introduction
-
-This page describes the structure of source code of the GCC-based Native Client
-toolchain. The sources are based on stable releases of external packages:
-[Binutils](http://git.chromium.org/gitweb/?p=nacl-binutils.git;a=summary),
-[GCC](http://git.chromium.org/gitweb/?p=nacl-gcc.git;a=summary),
-[Newlib](http://git.chromium.org/gitweb/?p=nacl-newlib.git;a=summary),
-[GDB](http://git.chromium.org/gitweb/?p=nacl-gdb.git;a=summary),
-[GlibC](http://git.chromium.org/gitweb/?p=nacl-glibc.git;a=summary) plus a
-subset of [linux kernel
-headers](http://git.chromium.org/gitweb/?p=linux-headers-for-nacl.git;a=summary).
-The rest of the page addresses the structure of the source repositories, the
-ways to synchronize patches across them and the build script.
-
-## Prerequisites
-
-We recommend hacking the toolchain on Linux. After each commit the toolchain
-tarballs are built on [builders](https://ci.chromium.org/p/nacl/g/main/console).
-Using Windows is difficult since Chromium no longer supports Cygwin, and it's
-too slow to be practical anyway (mostly due to the poor performance of fork()).
-
-### Installing packages on your system
-
-* Refer to
- [HowToBuildPorts](http://code.google.com/p/nativeclient/wiki/HowToBuildPorts)
- for setting up the build environment.
-* optional: Git and Subversion (useful for development)
-
- ```none
- sudo apt-get install gitk subversion
- ```
-
-Native Client Source is also required to build the toolchain (specifically,
-libraries). Follow the instructions on the [Native Client
-Source](http://code.google.com/p/nativeclient/wiki/Source) page to fetch the
-sources.
-
-### Setting up environment variables for Git
-
-If you are going to contribute to the toolchain, you will need to use the Git
-repository. Add similar lines to your .bashrc or a shell login script:
-
-```none
-export GIT_COMMITTER_NAME="John Doe"
-export GIT_COMMITTER_EMAIL="doe@example.com"
-export GIT_AUTHOR_NAME="Mary Major"
-export GIT_AUTHOR_EMAIL="mary@example.com"
-```
-
-In the most common case author and committer strings should be equal.
-
-## Obtaining the toolchain sources
-
-```none
-cd native_client/tools
-make sync  # For more options about syncing and building read the topmost comment in the Makefile.
-```
-
-### Building the toolchain
-
-Option 1: Build a *newlib*-based toolchain
-
-```none
-make clean build-with-newlib -j16
-```
-
-Option2:Build a *GlibC*-based toolchain.
-
-```none
-make clean build-with-glibc -j16
-```
-
-The toolchain binaries get installed to native_client/tools/out by default, you
-bay override it by providing *TOOLCHAINLOC=&lt;path&gt; in make invocation.*
-
-*note:* Although the build script is written as a Makefile, it does not support
-incremental rebuilds (though it supports parallel builds).
-
-*note*: To build in a 100% clean way, the TOOLCHAINLOC directory must be empty.
-
-## Structure of the Git repositories
-
-The Git repositories are hosted at [chromium git
-repositories](http://git.chromium.org/). NaCl development happens in branch
-master in each repository.
-
-### Branches
-
-The branch vendor-src keeps the sources from the original tarball unchanged.
-From time to time the master branch should be **rebased** on top of newer
-revisions of the vendor-src branch. Once the **master** branch is rebased, the
-old branch should be kept from garbage collection so that old commits can be
-found by hashes (required to be able to reproduce old builds).
-
-## Code reviews
-
-Follow the [Git Cookbook](http://code.google.com/p/chromium/wiki/GitCookbook)
-for sending your commit for review. Recommendations: Method #1 is the easiest.
-Instead of "git cl" you can use git-cl from **depot_tools**. In the simplest
-case you may:
-
-```none
-git checkout -b my_hack origin/master # make your branch
-# hack hack hack
-git add your/file1 your/file2
-git commit -m "do my hack with GCC"
-git-cl upload --send-mail -r reviewer@chromium.org
-# fix stuff during review
-git commit --amend your/fixed/file1
-git-cl upload
-# you've got an LGTM
-git-cl push
-```
-
-## Testing the toolchain (the GCC testsuite)
-
-#### Currently it is only easy to run the tests in x86-64 mode, x86-32 testing is broken. To run all tests:
-
-```none
-make -j4 check SDKLOC=/path/to/your/location
-```
-
-To run one of the three testsuites (c++ testsuite in this case):
-
-```none
-make DEJAGNU=/your/native_client/tools/dejagnu/site.exp check-c++ RUNTESTFLAGS="SIM=/your/sel_ldr --target_board=nacl --outdir=your-directory-for-reports"
-```
-
-To run a subset of a testsuite governed by some '.exp' config file just add the
-name of the file (without path to it) as additional parameter to runtest:
-
-<pre><code>
-cd your-native-client/native_client/tools/BUILD/build-gcc-nacl64/gcc
-DEJAGNU=your-dejagnu/site.exp <b>runtest</b> --tool gcc --target_board=nacl --outdir=/tmp/your-temp-dir SIM=/your/sel_ldr builtins.exp
-</code></pre>
-
-You may limit running tests to a single file. Again, the file name should omit
-the path part:
-
-<pre><code>
-cd your-native-client/native_client/tools/BUILD/build-gcc-nacl64/gcc
-DEJAGNU=your-dejagnu/site.exp <b>runtest</b> --tool gcc --target_board=nacl --outdir=/tmp/your-temp-dir SIM=/your/sel_ldr builtins.exp<b>=strncat-chk.c</b>
-</code></pre> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md
deleted file mode 100644
index 8605f2222e7..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-- - /nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin
- - Debugging a Trusted Plugin
-page_name: debugging-a-trusted-plugin-on-linux
-title: Debugging a Trusted Plugin on Linux
----
-
-1. Get a Chromium check-out. You can usually use the revision from the
- nacl-sdk DEPS file.
-2. You don’t need to build all of chromium, just pepper.
- 1. Go to the src/ directory in your check-out
- 2. type: ‘make ppapi_tests’ to build the pepper tests as well as
- any libraries they depend on. You’ll end up with libppapi_cpp.a
- and libppapi_cpp_object.a.
-3. Build trusted version of the code
- 1. For a C plugin you don’t have to link against anything. ppapi C
- is all headers.
- 2. For C++, you need libppapi_cpp.a and libppapi_cpp_objects.a.
- Link against ppapi_cpp_objects and ppapi_cpp from chrome.
- 1. link order matters: ppapi_cpp_objects has to come before
- ppapi_cpp
- 3. Be sure to specify -fno-rtti and -fPIC since chrome does not
- build run-time type information by default, and you’ll be
- generating a shared library as your plugin.
- 4. For the linking step, be sure to specify -shared
-4. To load your plugin, your application will need an embed tag. For
- trusted plugins this should not have a “nacl” but a regular “type”
- attribute, for example: type="application/x-hello-world"
-5. Unlike with an untrusted plugin, instead of handling a onload event
- in the EMBED tag, you have to call moduleDidLoad() directly after
- the EMBED tag.
-6. To debug, you have to use Chromium - best is to get a waterfall for
- your platform build from
- http://build.chromium.org/f/chromium/snapshots/ You can also finish
- the chromium build you checked out but be prepared to wait a while.
- This style of debugging is not supported with Google Chrome Dev
- Channel
-7. In a shell, launch chrome with the following arguments:
- 1. --user-data-dir=/tmp/nacl_debugging_chrome_profile
- 2. --register-pepper-plugins="location/of/your/plugin.so;application/x-hello-world"
- 3. --single-process
- 4. file://location/of/your/web_page.html
-8. In Chrome, create a new tab and visit about:memory, this will list
- the pid of the plugin tab.
-9. You can now use gdb to attach to the pid and debug your plugin \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md
deleted file mode 100644
index 7c6ecdab808..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-- - /nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin
- - Debugging a Trusted Plugin
-page_name: debugging-trusted-plugin-on-windows
-title: Debugging a Trusted Plugin on Windows
----
-
-1. Get VS2008
-2. Set up the project/Solution using the wizard: make a Win32 Console
- app, and then click through the wizard to modify the project to be a
- Win32 DLL, that exports symbols. Visit here for more info:
- <http://msdn.microsoft.com/en-us/library/ms235636(v=vs.80).aspx>
-3. In the project properties, turn off precompiled headers. Do this so
- you can use the same #include stack in your sources to build both
- untrusted and trusted.
-4. Note: I ran into problems using the ppapi headers that come with
- NaCl:
- 1. 1&gt;d:\\native_client_sdk\\toolchain\\win_x86\\nacl64\\include\\machine\\_types.h(19)
- : fatal error C1083: Cannot open include file:
- 'native_client/src/include/portability.h': No such file or
- directory
- 2. I tried -D__native_client__, but this produced even more errors.
- 3. To resolve this, I copied toolchain/win_x86/nacl64/include/ppapi
- to sit at the same level as examples
-5. In the project properties, add &lt;native_client_sdk&gt; to the
- header search paths.
-6. After copying the ppapi headers, the project still won't build
- because I need to copy in the ppapi C++ sources and build them too.
- I DEPSed in the ppapi sources from nacl/ppapi and added all the
- files in ppapi/cpp/\*.cc to the VS project.
-7. I had to change some source files. When you build under nacl-gcc,
- things like inttypes.h (and stdint.h) are automagically part of the
- #include chain. This is not so when building trusted. In this case,
- I added #include &lt;ppapi/c/pp_stdtype.h&gt; to the files that
- needed it. (Note that on Windows, there does not seem to be a
- &lt;stdint.h&gt; or &lt;inttypes.h&gt;).
-8. Edit hello_world/hello_world.html so that the embed tag has
- type="application/x-hello-world" and no nacl= attribute.
-9. Instead of handling a onload event in the EMBED tag, you have to
- call moduleDidLoad() directly after the EMBED tag.
-10. Run the local HTTP server in examples.
-11. Once the DLL is built, run chrome
- --register-pepper-plugins="d:\\native_client_sdk\\examples\\NaClExamples\\HelloWorld\\Debug\\HelloWorld.dll;application/x-hello-world"
- --user-data-dir=d:\\trusted-debug-profile
- --wait-for-debugger-children
-12. Visit localhost:5103 and run the hello_world example.
-13. To debug the DLL you have to attach to the right process. It isn't
- clear how you find this, other than by guessing. I had limited
- success in pulling up the Debug -&gt; Attach... panel, then
- launching chrome and visiting
- localhost:5103/hello_world/hello_world.html, then hitting Refresh on
- the Attach panel and attaching the the new "chrome.exe" process. I
- have not been able to figure out how to debug startup issues. There
- are some extra debugging hints here:
- <http://www.chromium.org/developers/how-tos/debugging>
-
-Implications:
-
-1. The SDK will have to DEPS in and bundle src/ppapi from the chromium
- project.
-2. When building a trusted plugin, you have to use the chromium ppapi
- headers and build the .cc files, then switch over to different
- headers and link with libppapi_cpp.a to build a .nexe. We could
- automate some of this by adding a build step in the SDK to build
- libppapi_cpp.a and bundling that library.
-3. **Potential show-stopper**: on Windows, there is no built-in
- pthreads library. This means the pi_generator example will not
- build, nor will any other app that uses pthread, unless we can find
- a pthreads lib that we can re-distribute.
-4. **Potential show-stopper**: None of this work allows for .dso's,
- which are ELF. These will not load on Windows. Not sure if it's
- possible to make .dso's into DLLs and mimic the dynamic loading
- process. dlopen() will not work for the same reason that pthreads
- don't work (no Windows support). \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md
deleted file mode 100644
index 36f6cfd7c34..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-page_name: debugging-a-trusted-plugin
-title: Debugging a Trusted Plugin
----
-
-In some cases it can be useful to develop/port your Native Client module using a
-two-step process, first as a non-portable trusted Pepper plugin for Windows,
-Mac, or Linux, then porting to Native Client. In particular this approach allows
-you to use the standard debuggers and tools from your preferred desktop
-operating system during trusted plugin development.
-
-Developers should be mindful of the following potential issues when planning
-this course of development:
-
-* Some libraries commonly used with Native Client will not build
- easily on all operating systems.
-* Threading models differ between trusted Pepper and untrusted Pepper
- implementations.
-* Extra effort may be required to get source to compile with multiple
- different compilers, for example GCC vs. MS Visual Studio.
-* Certain operations such as platform-specific library calls and
- system calls may succeed during trusted development but fail in
- Native Client.
-
-With this in mind, these sub-pages provide some tips on working with trusted
-Pepper plugins on Windows, Mac and Linux. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md
deleted file mode 100644
index a6508f76533..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-- - /nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin
- - Debugging a Trusted Plugin
-page_name: trusted-debugging-on-mac
-title: Debugging a Trusted Plugin on Mac
----
-
-<table>
-<tr>
-
-1. <td>Make an new Xcode project, use the GUI to make a Bundle project
- that uses Core Foundation.</td>
-2. <td>Add existing NaCl sources</td>
-3. <td>DEPS in ppapi from chromium, add the C++ sources - create a
- Group and add the ppapi files directly. Adding ppapi as a folder
- reference doesn't work.</td>
-4. <td>Set "Header search paths" to point to the chromium ppapi headers
- (|SDK_root|/third_party), NOT the built-in NaCl headers.</td>
-5. <td>Add the SDK root to "Header Search Paths"</td>
-6. <td>Build the plugin.</td>
-7. <td>Edit hello_world/hello_world.html so that the embed tag has
- type="application/x-hello-world" and no nacl= attribute.</td>
-8. <td>Instead of handling a onload event in the EMBED tag, you have to
- call moduleDidLoad() directly after the EMBED tag.</td>
-9. <td>Make sure to uncheck "Load Symbols Lazily" in the Debugging
- panel of Xcode preferences.</td>
-10. <td>To debug, you have to use Chromium - best is to get a waterfall
- build from http://build.chromium.org/f/chromium/snapshots/Mac/. This
- style of debugging is not supported with Google Chrome Dev
- Channel</td>
- 1. <td>In Xcode, ctrl-click on "Executables" and select "Add Custom
- Executable…".</td>
- 2. <td>Call the new custom exec, say, "Chromium Dev"</td>
- 3. <td>Point it at the .app wrapper for Chromium that you got from
- the waterfall, e.g. ~/Downloads/chrome-mac/Chromium.app.</td>
- 4. <td>Add these arguments in the Arguments tab:</td>
- 1. <td>--user-data-dir=/tmp/nacl-debug-profile</td>
- 2. <td>--register-pepper-plugins="$HOME/Source/nacl-sdk/src/examples/hello_world/HelloWorld/build/Debug/HelloWorld.bundle;application/x-hello-world"</td>
- 3. <td>--single-process</td>
- 4. <td>file://$HOME/Source/nacl-sdk/src/examples/hello_world/hello_world.html</td>
-11. <td>It is possible to debug a plugin using Chrome Dev channel, but
- it's a little more raw:</td>
- 1. <td>In a shell, run Chrome like this: Google\\
- Chrome.app/Contents/MacOS/Google\\ Chrome
- --user-data-dir=/tmp/nacl-debug-profile
- --register-pepper-plugins="$HOME/Source/nacl-sdk/src/examples/hello_world/HelloWorld/build/Debug/HelloWorld.bundle;application/x-hello-world"
- file://$HOME/Source/nacl-sdk/src/examples/hello_world/hello_world.html</td>
- 2. <td>In Chrome, create a new tab and visit about:memory, this
- will list the PID of the plugin tab.</td>
- 3. <td>In Xcode, Run -&gt; Attach To Process, then pick the
- appropriate PID.</td>
- 1. <td>Note: if you get various errors about formatting, just
- click "Continue"</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md
deleted file mode 100644
index 8c7afa9da77..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-- - /nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended
- - Debugging with debug stub (recommended)
-page_name: debugging-nacl-apps-in-chrome-os
-title: Debugging NaCl apps in Chrome OS
----
-
-It is not possible to run debugger on Chrome OS without using dev mode. Luckily,
-debugger uses network connection to communicate with the NaCl debug stub. This
-makes remote debugging possible with debugger running on a remote machine and
-NaCl application running on Chrome OS machine.
-
-## Prepare Chrome OS for NaCl debugging
-
-On chrome://flags page there are two flags related to NaCl debugging. We need to
-enable "Native Client GDB-based debugging" flag and switch "Restrict Native
-Client GDB-based debugging by pattern" to "Debug everything except secure shell"
-or "Debug only if URL manifest ends with debug.nmf" value. Changes on
-chrome://flags page require browser restart to take effect. Log out, close and
-open the lid to restart the browser. If they are set properly, secure shell
-extension should work, but NaCl application we are trying to debug should hang
-waiting for debugger to connect.
-
-## Tunneling debugger connection
-
-Once you launch your NaCl application now, the NaCl debug stub opens 4014 port
-on Chrome OS machine. This port is not accessible from outside, so we need to
-tunnel it through ssh connection to remote machine. There are two ways to do
-this.
-
-The first way is to open new secure shell tab or window and add "-R
-port-number:localhost:4014" to "SSH Arguments" field before connecting to remote
-computer. Then you can use secure shell to launch NaCl debugger on that machine
-where you should use "target remote :port-number" command to connect to debug
-stub running on Chrome OS.
-
-The second way is to use an existing secure shell tab or window. Press enter, ~,
-shift+c. This combination opens ssh-prompt where you can enter "-R
-port-number:localhost:4014" command. Pressing enter returns control to normal
-shell where you can launch NaCl debugger and use "target remote :port-number"
-command to connect to debug stub running on Chrome OS.
-
-In both cases the port number can be any free port number on the remote machine
-above 1024 including 4014. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha1
deleted file mode 100644
index 10b369ee135..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ca64943da2b5ad39c4b082ce05ef6bc5d50f6ba3 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha1
deleted file mode 100644
index 688b4cf55de..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b65fdac12539c396a69eb5a8bcac50b08d977508 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha1
deleted file mode 100644
index e05359bfe83..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0217e502261b5990339938cf0e151cc6475d041a \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha1
deleted file mode 100644
index 5934dc4f52d..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7ec46055e3a1f1d8f67e0523e8680d114cb4ca88 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha1
deleted file mode 100644
index 8b2b25aa248..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7055e7c625e190952b97e8f8af0b40dba722cb16 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha1
deleted file mode 100644
index d107fc5d32e..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9066bfef70126de352541877343b8bf0a891143b \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha1
deleted file mode 100644
index d931d716598..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bec5808b06a22da25deff8483263b7cec981d28a \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha1
deleted file mode 100644
index cf82235a046..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e78f102d96325e58310fac701e30f94c55f44810 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha1
deleted file mode 100644
index 17d7d7c0301..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0e046c14ee92b0f939ff9b0ea62977dd00e03813 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha1
deleted file mode 100644
index e3c1788a897..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f1c519aa044c7c7ae4bdb59031bd51b635fb8d26 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha1
deleted file mode 100644
index c92c53401a0..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c120f1938f8513eaa852f63ede2126c777938081 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha1
deleted file mode 100644
index 8584eafa229..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0d9788d92532b0ee7fba7ce0b93f4d0ad6c778cd \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha1
deleted file mode 100644
index 3f888727957..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-79f88416480f41213ce2b4ac87710d2efbd47fff \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha1
deleted file mode 100644
index 72068aeb700..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0c98492e6c4bed40599fc61dbfe44711eb7b0576 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha1
deleted file mode 100644
index 9c2c4345d88..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ea173ca1523505dbe55d04b37411809a23766643 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha1
deleted file mode 100644
index 8d578dd84db..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5ff7261a75a702d6ee9606570c16565c57520b75 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha1
deleted file mode 100644
index 49a9695a226..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f565b31f9413db44cbba83a9a8685cf05fe56109 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha1
deleted file mode 100644
index 97a4d9d2353..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9d14e3854ff56820abbdc18f0bd10b880fa6d1a0 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha1
deleted file mode 100644
index 6ca1151e012..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e186a744d20b1ef135dff670ad94f6870c93aa05 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha1
deleted file mode 100644
index 5f6a8b60c64..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-03a39fa04ee83dcc4d323a70df939a1cdddd9c27 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha1
deleted file mode 100644
index 66ada924981..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-599c895aebaec53f8775d0ba12af5385101b7dea \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha1
deleted file mode 100644
index 50c5c875e6d..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f288a4e038d156f78555c26ea6703f67b5ff582e \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha1
deleted file mode 100644
index 77e740b7734..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8c91e6461916b23f0478ecd94f15a6a12d9573f4 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha1
deleted file mode 100644
index 76191ae9887..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f539c3ce5f461bad6b652e8efd05f18e13ce85e9 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha1
deleted file mode 100644
index ba080511cfc..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1424cd15ac7fdaee490cd965e023001a17a729bb \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md
deleted file mode 100644
index 6014b39c661..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md
+++ /dev/null
@@ -1,222 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-- - /nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended
- - Debugging with debug stub (recommended)
-page_name: debugging-nacl-apps-in-eclipse-cdt
-title: Debugging NaCl apps in Eclipse CDT
----
-
-Eclipse CDT plugin is designed for development with GNU tools. Its flexibility
-allows to configure it for developing NaCl applications without using any
-additional plugins. The cost of this flexibility is that a lot of advanced
-features are not available. The following instructions are written for Windows
-but they can be used on any OS if you replace Windows paths to paths on your OS.
-
-## Creating NaCl project
-
-Create NaCl Project directory inside Eclipse workspace
-(C:\\Users\\username\\workspace by default). Copy all files from
-nacl_sdk\\pepper_22\\examples\\hello_world except hello_world.c to this
-directory. Create src subdirectory and copy hello_world.c file there. Placing
-source files in the src directory makes cleaner project structure. Now go to
-File-&gt;New-&gt;Makefile Project with Existing Code menu in Eclipse. Choose
-project name, enter project folder location and select Cross GCC toolchain.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20project.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20project.png)
-
-Your new project will look like this.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20project%20view.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20project%20view.png)
-
-## Building NaCl project
-
-Open Makefile in the editor. Comment out lines
-ALL_TARGETS+=win/Debug/hello_world.nmf and
-ALL_TARGETS+=win/Release/hello_world.nmf and replace hello_world.c with
-src/hello_world.c (Edit-&gt;Find/Replace... in the menu or Ctrl+F with default
-key bindings). Then right click on the project and choose Preferences in the
-popup menu. Go to C/C++ Build-&gt;Build Variables page and add NACL_SDK_ROOT
-variable. Point the variable to the pepper version you want to build with. If
-you downloaded NaCl SDK to c:\\nacl_sdk directory and want to use 22 pepper, set
-it to c:\\nacl_sdk\\pepper_22.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20build%20variable.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20build%20variable.png)
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20variables.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20variables.png)
-
-Now we can use this variable to set build command on C/C++ Build page to
-${NACL_SDK_ROOT}/tools/make NACL_SDK_ROOT=${NACL_SDK_ROOT}. On Linux and Mac use
-make NACL_SDK_ROOT=${NACL_SDK_ROOT}.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build.png)
-
-Enable parallel build on Behaviour tab.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20behaviour%20tab.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20behaviour%20tab.png)
-
-Press OK in properties window. You can now build the project by right clicking
-on it and selecting Build Project in the popup menu or by pressing hammer icon
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hammer%20icon.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hammer%20icon.png)
-in the toolbar. Make build log will be shown in console view.
-
-## Set up eclipse indexer
-
-Eclipse indexer doesn't use external compiler and so it should be configured
-separately. Open project properties and go to C/C++ General-&gt;Paths and
-Symbols page. Open Source Location tab, add src folder using Add Folder...
-button and remove root of the project using Delete button.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20source%20location.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20source%20location.png)
-
-Then go to Output Location path, add glibc and newlib folders there and remove
-root of the project.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20output%20location.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20output%20location.png)
-
-Now let us setup include paths. Go to Includes tab and press Add... button.
-Enter ${NACL_SDK_ROOT}/include in the directory field and select Add to all
-configurations and Add to all languages checkboxes.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%201.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%201.png)
-
-Then press Add... button again and add
-${NACL_SDK_ROOT}/toolchain/win_x86_glibc/x86_64-nacl/include directory (replace
-win_x86_glibc with linux_x86_glibc or mac_x86_glibc if you use Linux or Mac OS X
-accordingly).
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%202.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%202.png)
-
-Press OK button in properties window and open hello_world.c. There should not be
-any compile errors now.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20with%20indexer%20enabled.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20with%20indexer%20enabled.png)
-
-## Debug NaCl newlib application
-
-Launching and debugging applications in Eclipse is done via running and
-debugging configurations. Usually they are created automatically. Unfortunately,
-NaCl debugging is done using remote debugging protocol. Setting up remote
-connection requires parameters that can't be determined automatically. So we
-have to create debugging configuration by hand. Go to Run-&gt;Debug
-Configurations... menu or press on debug icon arrow [<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20icon.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20icon.png)
-in toolbar and choose Debug Configurations... in the popup menu. Select C/C++
-Remote Application in Debug Configurations windows and press new button [<img
-alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20debug%20configuration%20icon.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20debug%20configuration%20icon.png)
-above filter text field or choose New in the popup menu.
-
-Change configuration name to NaCl Project newlib and fill C/C++ Application
-field with ${workspace_loc}\\NaCl
-Project\\newlib\\Debug\\hello_world_x86_64.nexe. We use ${workspace_loc} instead
-of ${project_loc} since the later depends on currently selected project.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20main.png)
-
-Now press Select other link at the bottom of the window. If you don't see the
-link, skip this step. Select Use configuration specific settings checkbox and
-choose GDB (DSF) Manual Remote Debugging Launcher in the list.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20select%20preferred%20launcher.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20select%20preferred%20launcher.png)
-
-Press OK and go to the debugger tab. Change Stop on startup at field to
-Instance_DidCreate or deselect the Stop on startup checkbox. On Main tab in
-Debugger Options set GDB debugger field to
-c:\\nacl_sdk\\pepper_canary\\toolchain\\win_x86_glibc\\bin\\x86_64-nacl-gdb.exe.
-Ensure that Non-stop mode checkbox is not selected since nacl-gdb doesn't
-support this mode.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Main.png)
-
-Set port number to 4014 in Gdbserver Settings tab.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Gdbserver%20Settings.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Gdbserver%20Settings.png)
-
-Save debug configuration by clicking Apply button.
-
-Now you need to launch chrome with --no-sandbox and --enable-nacl-debug flags
-and run your NaCl application. NaCl debug stub will stop application at first
-instruction. Then you need to open Debug Configuration window, select our debug
-configuration and press Debug button. Next time, you can launch it by pressing
-debug icon arrow that shows 10 last debug configurations.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20last%20debug%20configurations.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20last%20debug%20configurations.png)
-
-When program will stop on the start breakpoint or breakpoint you set in project,
-Eclipse will switch to debug perspective.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hit%20breakpoint.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hit%20breakpoint.png)
-
-## Debugging NaCl glibc application
-
-Create gdb_init.txt file and add line nacl-manifest
-"c:\\\\Users\\\\username\\\\workspace\\\\NaCl
-Project\\\\glibc\\\\Debug\\\\hello_world.nmf". If you use debugger from
-pepper_29+, you don't need to double slashes.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20gdb_init%20file.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20gdb_init%20file.png)
-
-Go to Run-&gt;Debug configuration... menu and duplicate newlib debug
-configuration using Duplicate item in popup menu. Change new configuration name
-to NaCl Project glibc and C/C++ Application field to ${workspace_loc}\\NaCl
-Project\\glibc\\Debug\\lib64\\runnable-ld.so.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20main.png)
-
-Then go to Debugger tab and change GDB command file on Main subtab to
-c:\\Users\\username\\workspace\\NaCl Project\\gdb_init.txt. Ensure that Non-stop
-mode checkbox is not selected.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20Debugger%20Main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20Debugger%20Main.png)
-
-Press Apply button and close the window. Now you need to run your NaCl
-application in chrome with --enable-nacl-debug and --no-sandbox flags, select
-this debug configuration in Debug Configurations window and press Debug button.
-You may see some error messages like
-
-```none
-No source file named hello_world.c.
-warning: Could not load shared library symbols for runnable-ld.so.
-Do you need "set solib-search-path" or "set sysroot"?
-```
-
-You should ignore them.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20glibc%20hit%20breakpoint.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20glibc%20hit%20breakpoint.png)
-
-## Troubleshooting
-
-If something goes wrong, you can look on gdb input and output. Press on the
-arrow of console icon in Console view to show "NaCl Project glibc \[C/C++ Remote
-Application\] gdb traces" console.
-
-[<img alt="image"
-src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20consoles.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20consoles.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md
deleted file mode 100644
index 5ceee4ee604..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-- - /nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended
- - Debugging with debug stub (recommended)
-page_name: getting-started-with-debug-stub
-title: Getting started with debug stub
----
-
-### Introduction
-
-New versions of chrome include NaCl with debug stub support. If
---enable-nacl-debug switch is passed to chrome or -g switch is passed to
-sel_ldr, all NaCl applications start with the debug stub enabled. The debug stub
-stops untrusted code at the first instruction inside the IRT and listens on a
-TCP port of localhost network interface (4014 currently) for incoming connection
-from nacl-gdb. When nacl-gdb connects to the debug stub, they talk with each
-other using RSP protocol. Since remote debugging does not need to use
-OS-specific debugging functions, we need only one version of nacl-gdb for both
-32 and 64-bit debugging. Moreover, if one forwards port to a remote machine, it
-is possible to use nacl-gdb for one OS to debug NaCl application on a different
-OS. All the differences between OSes are abstracted away by debug stub.
-
-## Get the debugger
-
-The debugger is included in the latest version of NaCl SDK. It is located in
-nacl_sdk/pepper_canary/toolchain/linux_x86_glibc/bin/x86_64-nacl-gdb on Linux,
-nacl_sdk/pepper_canary/toolchain/win_x86_glibc/bin/x86_64-nacl-gdb.exe on
-Windows, etc. Debuggers in \*_x86_glibc and \*_x86_newlib directories are
-exactly the same. You can use either one on them. Moreover, unlike the rest of
-SDK, you can copy debugger to a different folder.
-
-Regarding the pepper and chrome versions, the latest debugger should work with
-the previous versions of chrome/sel_ldr but new functionality may be missing.
-
-## Debugging NaCl applications in Chrome
-
-NaCl applications can be launched using two ways in Chrome. You can load
-unpacked extension on [chrome://chrome/extensions/](javascript:void(0);) page
-(switch on developers mode) and open it. Alternative way is to launch a web
-server and either launch chrome with --enable-nacl switch or enable NaCl
-applications outside of Chrome Web Store or
-[chrome://flags/](javascript:void(0);) page (you need to relaunch chrome after
-that). In order to switch on debug stub support, you need to pass
---enable-nacl-debug and --no-sandbox switches to chrome. Create a shell script
-that launches chrome with these flags. You can also add
---user-data-dir=some-path to use a separate profile.
-
-### Debugging newlib applications
-
-In order to debug NaCl application, you need to launch Chrome and open NaCl
-application there first. Then run x86_64-nacl-gdb. Enter following commands
-there. If you have spaces in paths, use quotes and double all slashes (or use
-backslashes). For pepper29+ debugger you should use quotes without doubling
-slashes.
-
-```none
-(gdb) file c:\nacl_sdk\pepper_canary\examples\hello_world\newlib\Debug\hello_world_x86_64.nexe
-(gdb) target remote :4014
-```
-
-Point file command to 64-bit nexe on 64-bit platforms and to 32-bit nexe on
-32-bit platforms. Then you can use all normal gdb commands.
-
-### Debugging glibc applications
-
-Debugging glibc applications is harder. You need to use following commands.
-
-```none
-(gdb) nacl-manifest c:\nacl_sdk\pepper_canary\examples\hello_world\glibc\Debug\hello_world.nmf
-(gdb) target remote :4014
-```
-
-If you launched NaCl as unpacked chrome extension or from local http server, you
-already have the NaCl manifest file which you should use here. If you launched
-NaCl from an external http server, you need to download \*.nmf, \*.nexe and
-\*.so files of the NaCl application and place them in the same directory
-structure that is used on the server (\*.nmf file uses relative paths to
-reference main executable and libraries). Then point nacl-manifest command to
-the downloaded \*.nmf file.
-
-### Debugging with IRT symbols
-
-You can additionally load IRT symbols. This helps to understand what application
-is doing when it is stopped inside NaCl syscall.
-
-```none
-nacl-irt c:\Users\username\AppData\Local\Google\Chrome SxS\Application\23.0.x.x\nacl_irt_x86_64.nexe
-```
-
-### Automatic debugger launching
-
-Chrome can be configured to launch debugger automatically. Use additional
-command-line option --nacl-gdb="path-to-nacl-gdb" on Windows or
---nacl-gdb="command line to launch nacl-gdb in the new shell" on Linux. You can
-use --nacl-gdb-script="path-to-gdb-script" to execute your gdb script at start
-up. Chrome will autodetect its IRT location and execute nacl-irt command.
-Additionally, if NaCl application is in a chrome extension, nacl-manifest
-command is executed automatically. Example chrome command lines are shown below.
-
-```none
-chrome.exe --enable-nacl-debug --no-sandbox "--nacl-gdb=c:\nacl_sdk\pepper_canary\toolchain\win_x86_glibc\bin\x86_64-nacl-gdb" "--nacl-gdb-script=c:\Users\User Name\Documents\script.gdb"
-```
-
-```none
-./chrome --enable-nacl-debug --no-sandbox "--nacl-gdb=xterm /home/user_name/nacl_sdk/pepper_canary/toolchain/linux_x86_glibc/bin/x86_64-nacl-gdb" --nacl-gdb-script=/home/user_name/script.gdb
-```
-
-## Debugging NaCl applications in sel_ldr
-
-Debugging command line NaCl applications is enabled by passing -g switch to
-sel_ldr. Newlib debugging is the same, glibc debugging requires creating an
-artificial manifest. You need to reference runnable-ld.so, main executable and
-all \*.so libraries using relative paths from manifest file. If you want to load
-IRT symbols, use nacl-irt command with the same IRT that is passed to sel_ldr
-using -B switch. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md
deleted file mode 100644
index 9a836944c1a..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-- - /nativeclient/how-tos/debugging-documentation
- - Debugging Documentation
-page_name: debugging-with-debug-stub-recommended
-title: Debugging with debug stub (recommended)
----
-
-Debug stub is a new way to debug NaCl applications. If --enable-nacl-debug and
---no-sandbox switches are passed to chrome or -g switch is passed to sel_ldr, a
-local TCP port is opened that accepts incoming TCP connections from a debugger
-via RSP protocol. This port is opened on localhost network interface, so one
-need to forward this port to debug NaCl application from remote computer. This
-method of debugging is preferred since debug stub inside NaCl process have an
-intimate knowledge about NaCl application. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md
deleted file mode 100644
index 041a7914015..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: debugging-documentation
-title: Debugging Documentation
----
-
-**The Basics**
-
-The NaCl team is hard at work developing an integrated debugging solution(1).
-But before this feature is available, developers must resort to alternative
-debugging techniques. These techniques are described here (with reservation!)
-First, Native Client applications can be debugged the old school way: with
-printf() and logging. Second, to a limited degree, Native Client can be debugged
-with the host's GDB, but using normal GDB will have problems resolving addresses
--- some manual tweaking needs to be done to map NaCl addresses into the global
-address space GDB is using. Third, there are some experimental patches to
-customize GDB which enable various degrees of debugging untrusted code.
-
-First, we recommend debugging as much as possible compiled as a normal trusted
-plugin/executable outside of Native Client, which of course will allow full use
-of debuggers such as GDB, MSVC, and WinDebug. Native Client most resembles
-Linux, so using GCC and POSIX will be the closest match to the NaCl runtime
-environment.
-
-For untrusted Native Client applications, we again recommend debugging on a
-Linux based host, and launching a debug build of Chrome from a terminal window.
-A Native Client application can use printf() which will output messages to the
-terminal window from which Chrome was launched.
-
-Native Client's Service Runtime can output debug messages to the terminal
-window. The level of detail in these logging messages can be controlled via the
-environment variable NACLVERBOSITY
-
-For example:
-
-developer@host:/home/developer/chrome/src/out/Debug$ export NACLVERBOSITY=3
-
-developer@host:/home/developer/chrome/src/out/Debug$ ./chrome –enable-nacl
-
-Additional messages from the plug-in can be separately enabled via
-NACL_SRPC_DEBUG environment variable.
-
-To capture log output to file “outfile” use:
-
-developer@host:/home/developer/chrome/src/out/Debug$ ./chrome –enable-nacl
-&&gt;outfile
-
-To get logs in Windows, you must instead run chrome with the environment
-variable NACLLOG=&lt;absolute path to log file / path relative to
-chrome.exe&gt;. This requires running Chrome with the --no-sandbox flag.
-
-**Getting the output from the Native Client Program on Windows:**
-
-On Linux and OSX, the Native Cilent application inherits standard output and
-standard error from Chrome, so though cumbersome, printf-style debugging is
-feasible. On Windows, like any non-console application, standard output and
-standard error outputs are thrown into the bit bucket. To get the Native Client
-application's output on Windows, set the NACL_EXE_STDOUT and NACL_EXE_STDERR
-environment variables to be the absolute path to files, and then start Chrome
-with the --no-sandbox flag. Output written to standard output and standard error
-will then be written to the specified files.
-
-**Getting the Process ID (PID) of the Native Client Program from Chrome:**
-
-Chrome -&gt; Developer-&gt;Task Manager, right-click process table header,
-toggle on "Process ID". The PID can be used to attach GDB to running Native
-Client processes. Or click on a new tab and type "about:memory" into the URL
-address bar. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md b/chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md
deleted file mode 100644
index a0d49016546..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: exception-handling-interface
-title: Exception Handling Interface
----
-
-## Introduction
-
-Hardware exceptions (invalid memory accesses, division by zero and etc) can not
-be caught in the standard C/C++. Different OS provide different mechanisms to
-catch hardware exception. POSIX standardizes hardware exception handling via
-signals. Native Client doesn't support signals but it provides somewhat similar
-interface. The main difference is that Native Client doesn't allow to resume
-execution from the failed instruction. Note, that exception handling is disabled
-for PNaCl because exception handling interface uses platform-dependent register
-context.
-
-## Retrieving Hardware Exception Handling Interface
-
-#include &lt;irt.h&gt;
-
-struct nacl_irt_exception_handling exception_handling_interface;
-
-size_t interface_size = nacl_interface_query(
-
-NACL_IRT_EXCEPTION_HANDLING_v0_1,
-
-&exception_handling_interface,
-
-sizeof(exception_handling_interface));
-
-if (interface_size != sizeof(exception_handling_interface)) {
-
-/\* error \*/
-
-}
-
-## Using nacl_exception Library
-
-An alternative way to access hardware exception handling interface is via
-nacl_exception library (it is part of libc). Add -lnacl_exception flag and use
-functions from `nacl/nacl_exception.h` header. They have the same parameters and
-their names are just prefixed with `nacl_exception`.
-
-## Handling Hardware Exceptions
-
-Hardware exception handlers are declared as
-
-`typedef void (*NaClExceptionHandler)(struct NaClExceptionContext *context);`
-
-in irt.h. They receive platform-dependent hardware exception context which
-contains the register state. This function should not return since there is
-nowhere to return to. Once exception handler is called, the exception handling
-is disabled on this thread. You must call
-
-`int exception_clear_flag(void);`
-
-if you need to reenable it (you want to handle hardware exceptions inside
-hardware exception handler for example). This function returns 0 on success and
-error code on error (exception handling is disabled). If hardware exception
-happens on a thread where exception handling is disabled, the whole NaCl process
-is terminated.
-
-The definition of `NaClExceptionContext` can be found in `nacl/nacl_exception.h`
-header.
-
-NaCl supports only one exception handler per process. The exception handler is
-set with
-
-`int exception_handler(NaClExceptionHandler handler,`
-
-` NaClExceptionHandler *old_handler);`
-
-This function returns 0 on success, or error code on error (exception handling
-is disabled, handler is not aligned to the bundle size or outside of code
-region, exception handler thread is failed to start). Old exception handler is
-returned via old_handler parameter. In order to disable exception handling, pass
-`NULL` exception handler.
-
-Exception handler is called on current thread stack by default. If you want to
-set alternative stack (to handle stack overflows for example) for exception
-handler, use
-
-`int exception_stack(void *stack, size_t size);`
-
-The alternative stack is set per thread. The function returns 0 on success and
-error code on error (stack location is outside of NaCl address space). If you
-want to disable alternative stack, call this function with `NULL` stack pointer
-and zero size. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md b/chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md
deleted file mode 100644
index 071caa29eea..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md
+++ /dev/null
@@ -1,194 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: how-to-use-git-svn-with-native-client
-title: Developing Native Client
----
-
-**Setup from scratch**
-
-Native Client code depends on some external code that is not present in its own
-repository. These dependencies (aka DEPS) are managed by a tool called gclient
-that is part of Chromium's depot_tools package. Get depot_tools
-[here](/developers/how-tos/install-depot-tools) and put the directory (we'll
-call it $DEPOT_TOOLS) in your PATH.
-
-Then create a directory to hold Native Client and all its deps (We'll call it
-$NACL_DIR) and cd into it.
-
-```none
-cd $NACL_DIR
-```
-
-Then fetch the source code.
-
-```none
-fetch nacl
-```
-
-This command sets up a .gclient config file, fetches the Native Client sources
-from git, then reads the DEPS file checked into native client's git repository,
-and fetches the dependencies from their git repos.
-If you will be committing, you will also want to set up 'git cl', the
-depot_tools code review and commit tool.
-
-```none
-cd $DEPOT_TOOLS
-git cl config # just hit return at all the prompts
-```
-
-If you want to build 32 bit nacl on a x86_64 system, you also need to:
-
-```none
-cd $NACL_DIR
-sudo native_client/tools/linux.x86_64.prep.sh
-```
-
-Your workflow might be like the following:
-
-**Update your master branch**
-
-```none
-cd $NACL_DIR
-cd native_client
-git checkout master
-git pull
-gclient sync
-```
-
-The the 'git pull' command updates your origin/master branch to match the server
-and merges it into your local checked-out master branch. The 'gclient sync'
-command will pull down the dependencies specified in the DEPS file. If you use a
-local master branch in this way, you should not make local commits to it, or
-'git pull' will complain about non-fast-forward merges.
-
-**Create a new branch for a new CL**
-
-```none
-git checkout -b my_feature origin/master
-```
-
-(This is equivalent to git branch my_feature origin/master; git checkout
-my_feature)
-
-**Hack away, committing to git whenever you like**
-
-```none
-emacs $file
-git commit -a (roughly equivalent to git add $file; git commit)
-emacs $file
-git commit -a
-./scons $tests
-```
-
-I like to at least have a commit for every time I run a test (or try job) that
-takes sufficiently long that I won't sit and wait for it. That way when I come
-back and look at the results, I'm sure to have a snapshot of my code that was
-tested, even if I make new edits while the test is running.
-
-**Send a try job**
-
-```none
-git try
-```
-
-The 'git try' command will try whatever state you have committed in your local
-git repo (it will complain if you have uncommitted changes).
-
-If you use 'git cl try' it will try whatever patchset you have currently
-uploaded to Rietveld (see 'git cl upload' below).
-
-**Send out for code review**
-
-```none
-  git cl upload
-```
-
-This creates a new CL and associates it with the current branch (all commits on
-this branch are now assumed to be part of this CL). It then uploads it to the
-code review server. git cl upload also supports the -m option for the patch
-message, -r for reviewers, --cc for extra people to CC in the email, and a few
-others. If you commit a new change and run 'git cl upload' again, it will upload
-a new patchset to the existing CL.
-
-**Wait for the review to come back.**
-
-In the meantime, you can switch to another branch and work on something else.
-
-```none
-git fetch origin
-git checkout -b my_next_feature origin/master
-```
-
-The above sequence will base your next CL off of the current master.
-Alternatively you can base your new CL on your first one by omitting the last
-argument to 'git checkout'.
-
-**That mean reviewer wanted changes!**
-
-Edit based on results of review, then re-upload for more review
-
-```none
-git checkout my_feature
-emacs $file
-git commit -a
-git cl upload
-```
-
-**Got LGTM!**
-
-We are almost ready to commit to the server. However, while you were waiting,
-there were other commits to the master, so we need to rebase my_feature against
-the new HEAD and make sure everything still works. First, update the local
-master:
-
-```none
-git checkout master
-git pull
-gclient sync
-```
-
-Then, rebase your local changes off the new master:
-
-```none
-git checkout my_feature
-git rebase origin/master
-```
-
-Test, try and update as needed:
-
-```none
-./scons <tests>
-git try
-```
-
-Everything works! Commit it:
-
-```none
-git cl land
-```
-
-'git cl land' squashes all the changes you made on your branch into a single
-diff and commits them to the master branch in a single commit.
-
-Now you can update your local master again (to include the change you just
-committed) and start a new branch for your next CL.
-
-```none
-git checkout master
-git pull
-gclient sync
-git checkout -b my_even_newer_feature origin/master
-```
-
-If you have a CL already in flight (especially one that was branched off of your
-previous feature branch rather than master), you will probably want to rebase it
-against master now. After you have updated your master branch as above,
-
-```none
-git checkout my_next_feature
-git rebase origin/master
-``` \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md b/chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md
deleted file mode 100644
index b3f35c86131..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md
+++ /dev/null
@@ -1,339 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: how-to-write-assembler-for-x86-nacl-platform
-title: How to write assembler for x86 NaCl platform.
----
-
-Before we'll go any further let me remid you that NaCl is OS-independent but
-CPU-dependent technology while pNaCl is both OS-independent and CPU-independent
-technology. Assembler is, of course, CPU-dependent and as such is not suitable
-for pNaCl.
-
-Ok. So we are dealing with NaCl and want to write some kind of assembler
-program.
-
-First of all, I don't plan to explain here how to write your program entirley in
-assembler languge.
-
-It's doable, but quite hard and rarely needed. I'll concentrate on a case of
-C/C++ program “with some assebler on the side”.
-
-Ok, so we want to call some assembler instruction not available via intrinsic.
-Let's use cpuid for our simple example.
-
-$ cat cpuid.c
-
-#include &lt;stdint.h&gt;
-
-#include &lt;stdio.h&gt;
-
-int main() {
-
-volatile uint32_t reg\[4\];
-
-__asm__ __volatile__(
-
-"cpuid"
-
-: "=a"(reg\[3\]), "=b"(reg\[0\]), "=c"(reg\[2\]), "=d"(reg\[1\])
-
-: "a"(0)
-
-: "cc");
-
-printf("%s\\n", (char \*)reg);
-
-}
-
-$ pepper_33/toolchain/linux_x86_newlib/bin/i686-nacl-gcc cpuid.c -o
-cpuid-32.nexe
-
-$ pepper_33/toolchain/linux_x86_newlib/bin/x86_64-nacl-gcc cpuid.c -o
-cpuid-64.nexe
-
-$ pepper_33/tools/sel_ldr.py cpuid-32.nexe
-
-DEBUG MODE ENABLED (bypass acl)
-
-GenuineIntel
-
-$ pepper_33/tools/sel_ldr.py cpuid-64.nexe
-
-DEBUG MODE ENABLED (bypass acl)
-
-GenuineIntel
-
-Looks like we can easily call cpuid from our NaCl program. How cool is that?
-Well, cool enough to write some simple program. In 32 bit mode. If you are
-lucky. In 64 bit mode. If you **very** lucky.
-
-Why? It's easy: only provably safe code can be executed on NaCl platform. And
-sooner or later you'll write code which will be declared UNSAFE by NaCl and
-it'll refuse to run it. In particular NaCl does not allow you to use arbitrary
-instructions in your code. Only “safe” instructions are allowed.
-
-Where is the list of safe instructions? [Here it
-is.](https://codereview.chromium.org/49183002/patch/2530001/2540004) This file
-is created automatically and lists all single instructions allowed in x86 32 bit
-NaCl mode. If you use instructions from it - you are golden, if you use
-instructions not mentioned there then validator will reject your code.
-
-There are a lot of instructions in this list and you can do a lot of things
-using them, but couple of instructions are suspiciously missing: call and ret.
-Well, call is there but only as call %eip (which basically means “call with any
-32bit offset” since script used to generate said list always uses offset equal
-to zero for the simplification), but ret is not present at all—and this **not**
-an error in script!
-
-Why would you need a call without ret? How could you return from function? And
-can you ever call function indirecly? Contemporary technologies use function
-pointers (in different forms) quite extensively. The answer to this question
-brings us to a *superinstruction* notion.
-
-In 32 bit case there are exactly two *superinstructions*: naclcall and nacljmp.
-They can be used with any 32 bit general purpose register (and only register,
-never memory!) to do an indirect jump. And i686-nacl-as also gives you the
-naclret macro which simply calls pop %ecx and then nacljmp %ecx (%ecx is picked
-because it's neither caller-saved register not callee-saved register in x86 ELF
-ABI).
-
-There are nothing magical in naclret, but naclcall and nacljmp **are** magical.
-How come? Let's see:
-
-$ cat nacljmp.s
-
-nacljmp %eax
-
-$ pepper_33/toolchain/linux_x86_newlib/bin/i686-nacl-as nacljmp.s -o nacljmp.o
-
-$ pepper_33/toolchain/linux_x86_newlib/bin/i686-nacl-objdump -d nacljmp.o
-
-nacljmp.o: file format elf32-i386-nacl
-
-Disassembly of section .text:
-
-00000000 &lt;.text&gt;:
-
-0: 83 e0 e0 and $0xffffffe0,%eax
-
-3: ff e0 jmp \*%eax
-
-As you can see this *superinstruction* actually combines two different
-instructions: and and jmp. This combination guarantees that target address for
-nacljmp is always aligned: you can not use nacljmp (or naclcall) to jump in the
-middle of 32-byte *bundle*. And i686-nacl-as guarantees that instructions in
-your code will never straggle boundary of such *bundle*. These two facts
-combined mean that code can be **statically** disassebled and verified. Which in
-turn means that NaCl validator does not effect performance of your code at all:
-it does it's work once, and then your code is executed by CPU directly without
-additional overhead (bundles and lack of ret will create some small overhead, of
-course, but it's very small). That's really, really cool. There is one tiny
-problem though: what happens if address which you are using as a target is not
-actually aligned? IOW: how can call work in this scheme. The answer is simple:
-call is magical in i686-nacl-as, too (and naclcall is doubly magical):
-i686-nacl-as always moves it to the end of bundle which means that address in
-stack is properly aligned.
-
-And now our description of 32 bit nacl assembler is essentially complete. You
-have the list of safe instructions, you use naclcall, nacljmp and naclret where
-needed and that's it.
-
-Now we are switching to 64 bit case. Before we'll discuss it we need to think a
-bit. All our manipulations work if **all** the code in your process adheres to
-the NaCl rules… but not all code in NaCl process image are like that! NaCl
-loaders include bunch of code compiled with a normal (non-NaCl) compiler and,
-more importantly, it's linked with system libraries which most definitely can
-not be recompiled with NaCl compiler (well… under Linux they could, but this
-approach will not work with MacOS or Windows). One jump to stray aligned ret—and
-the whole system is compromised. How **that** problem is solved? In 32 bit case
-the answer is simple: ***segment registers***! *Segment registers* are used to
-limit the reach of your code and that means that *untrusted code*, indeed, can
-not call *trusted code* (at least directly). There are some tiny pieces of
-*trusted code* injected in *untrusted zone* (*trampolines* and *springboards*)
-which are used to manage communication between trusted code and untrusted code
-but you never deal with these directly.
-
-But in 64 bit case this plan will not work! There are no segments in 64 bit
-mode!
-
-Right - and this is why 64 bit mode is significantly more involved and
-complicated. [Here is the list of safe
-instructions](https://codereview.chromium.org/49183002/patch/2530001/2540005).
-Let's take a look on a simple mov instruction. In 32 bit mode it was described
-as
-
-Instruction: 89 XX mov \[%eax..%edi\],\[%eax..%edi or memory\]
-
-Very simple instruction straight from Intel's (or AMD) manual. Any 32 bit
-general-purpose register can be moved to general-purpose register or memory. In
-64 bit case the same instruction is described quite differently:
-
-Instruction: \[REX:40..47\]? 89 XX mov \[%eax..%r15d\],\[%eax..%ebx|%esi..%r14d
-or memory\]
-
-That is: any 32 bit register can be moved to any 32bit register… except for
-%rbp, %rsp and %r15. Uhm... Why? What makes these registers special? Answer:
-they point to the *untrusted zone*. %r15 always points to the beginning of the
-untrusted zone (and can not be changed) while %rbp and %rsp can point to
-arbitrary point in the *untrusted zone*—but can only be changed by a limited set
-of instructions.
-
-Why do we do that? How can it limit memory accesses and make sure they never
-reach out of the *unstrusted zone*? Does at mean that you can only access memory
-placed on a fixed distance from %r15, %rbp, or %rsp? It'll be quite inefficient!
-
-Yes, it'll be inefficiant and that's why we introduce yet another concept:
-concept of restricted register. Conceptually restricted register is just a
-register which is guaranteed to be in the interval from 0 to 4'294'967'295. But,
-again, we don't try to create complex data models at the validation time.
-Instead we have a very simple rule: one instruction can produce restricted
-register while another one can consume restricted register—and these two
-instructions must be *immediately adjacent in the same bundle*. Here we use the
-interesting property of x86-64 ISA: any instruction which stores to 32bit
-register automatically cleans up top half of the corresponding 64bit register.
-That's what notes input_rr=… and output_rr=… mean in the safe list. They show
-which instruction produce restricted register and which instructions consume
-restricted register. Note that while many instructions can produce %rbp and/or
-%rsp as restricted register only few instruction accept %rbp and/or %rsp as
-restricted register. Which means that most %rbp and/or %rsp modifications are
-done as two-step operation: first you are doing something with %**e**bp or
-%**e**sp, then you immediatery add %**r**15 to %**r**bp or %**r**sp using lea or
-add.
-
-This is all well and good, but here we have a complication: validator knows that
-such tightly tied instructions must reside in a single bundle, but
-x86_64-nacl-as does not know that! It will happily place these two instructions
-into a different bundles and then code will be rejected by validator.
-
-How can we solve that problem? This is done with human's assistance. If you want
-to “glue two instruction together” you need to use the following construct:
-
-.bundle_lock
-
-lea (%rax,%rbx),%ecx
-
-mov (%rbp,%rcx),%edx
-
-mov (%r15,%rdx),%rax
-
-.bundle_unlock
-
-There are couple of interesting things to note here:
-
-* lea with 32 bit address registers is forbidden, use 64 bit version
- with 32 bit register as destination—it's shorter and is just as
- effective.
-* you can chain more than two instructions together—but you can not
- reuse restricted register again. This sequence will be rejected:
-
- .bundle_lock
-
- lea (%rax,%rbx),%ecx
-
- mov (%rbp,%rcx),%edx
-
- mov (%r15,%rcx),%rax
-
- .bundle_unlock
-
-This is all well and good but how can you do that in the inline assembler when
-you refer the arguments? When you use %0 will give you either 32 bit register or
-64 bit register (depending on what size argument was supplied to asm directive)
-and here we often need to deal with 32 bit registers and their 64 bit siblings!
-
-Actually GCC always had the appropriate mechanism, it's not NaCl-specific at
-all, it's just such mix of sizes is not common in “normal” programs. Consider:
-
-$ cat sizes_test.c
-
-int foo() {
-
-int i;
-
-long long ll;
-
-asm("mov %q0,%0"::"r"(i));
-
-asm("mov %q0,%0"::"r"(ll));
-
-asm("mov %k0,%0"::"r"(i));
-
-asm("mov %k0,%0"::"r"(ll));
-
-}
-
-$ gcc -S -O2 sizes_test.c -o-
-
-…
-
-foo:
-
-.LFB0:
-
-.cfi_startproc
-
-movl $1, %eax
-
-#APP
-
-# 4 "sizes_test.c" 1
-
-mov %rax,%eax
-
-# 0 "" 2
-
-#NO_APP
-
-movl $1, %eax
-
-#APP
-
-# 5 "sizes_test.c" 1
-
-mov %rax,%rax
-
-# 0 "" 2
-
-# 6 "sizes_test.c" 1
-
-mov %eax,%eax
-
-# 0 "" 2
-
-#NO_APP
-
-movl $1, %eax
-
-#APP
-
-# 7 "sizes_test.c" 1
-
-mov %eax,%rax
-
-# 0 "" 2
-
-#NO_APP
-
-ret
-
-.cfi_endproc
-
-…
-
-As you can see it's not hard to ask assembler to produce 32 bit or 64 bit
-registers on demand. Just keep in mind that NaCl used ILP32 model which means
-that by default it'll produce 32 bit registers there! Which probably means that
-you'll use q modifier significanly more often then k modifier.
-
-Note that .bundle_lock/.bundle_unlock machinery is only available in NaCl SDK
-starting from PPAPI 33. Before that you were forced to use %nacl pseudo-prefix
-and and bunch of special instructions to produce validateable code [as explaines
-in the SFI
-document](http://www.chromium.org/nativeclient/design-documents/nacl-sfi-model-on-x86-64-systems).
-This approach was slower (because it was impossible to combine address
-calculation with register restriction) and more cryptic, but if you need to deal
-with PPAPI 32 or below then it's your only choice. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/index.md b/chromium/docs/website/site/nativeclient/how-tos/index.md
deleted file mode 100644
index 68fe1e61c73..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: how-tos
-title: '2: How Tos'
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md b/chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md
deleted file mode 100644
index 5b381209dde..00000000000
--- a/chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/how-tos
- - '2: How Tos'
-page_name: working-on-the-git-toolchain-repos
-title: Working on the git toolchain repos
----
-
-Everybody who might ever need to touch the repositories that were formerly
-
-at git.chromium.org should start by doing the account setup that Anush
-
-posted about: http://www.chromium.org/chromium-os/developer-guide/gerrit-guide
-
-You can use your existing SSH key you were using with git.chromium.org
-
-(that's what I did) or generate a fresh one if you prefer. Then you
-
-should put this bit into your ~/.ssh/config:
-
-Host gerrit.chromium.org
-
-Port 29418
-
-User &lt;your-gerrit-username&gt;
-
-IdentityFile %d/.ssh/chromium
-
-For sanity's sake, your gerrit username will be the same as your
-
-chromium.org username which will be the same as your google.com username.
-
-I did it that way even though I don't like my google.com username much
-
-(and even though I am insane).
-
-This config assumes that you are using your SSH key from before and/or that
-
-you generated it with "ssh-keygen -f ~/.ssh/chromium". Adjust file names
-
-to taste if you are nonconformist. Make sure that the bit you paste into
-
-the account setup web form for your SSH key is instead the contents of
-
-~/.ssh/chromium.pub (your public key, not your private key).
-
-Once you have done the account setup, then you can ask someone to add you
-
-to the nacl-toolchain-committers group. For the moment, you can ask me.
-
-When other more adminy people get their gerrit accounts set up so I can
-
-add them to the nacl-admin group, you should ask them instead of me.
-
-The content for our repos has been migrated over from the
-
-gitrw.chromium.org server, and nobody can push there anymore. Note that
-
-the read-only http://git.chromium.org mirrors are still stale (lacking
-
-two commits I pushed yesterday), and will probably never be updated again.
-
-But that's OK!
-
-The new repos are live. The read-only URLs are:
-
-http://gerrit.chromium.org/gerrit/p/native_client/nacl-glibc.git
-
-http://gerrit.chromium.org/gerrit/p/native_client/nacl-binutils.git
-
-http://gerrit.chromium.org/gerrit/p/native_client/nacl-gcc.git
-
-http://gerrit.chromium.org/gerrit/p/native_client/nacl-newlib.git
-
-I will look into changing the toolchain builder crapola to pull from those.
-
-The URLs for writing are:
-
-ssh://gerrit.chromium.org/native_client/nacl-glibc.git
-
-ssh://gerrit.chromium.org/native_client/nacl-binutils.git
-
-ssh://gerrit.chromium.org/native_client/nacl-gcc.git
-
-ssh://gerrit.chromium.org/native_client/nacl-newlib.git
-
-To keep life simple, you can just do a fresh 'git clone' from one of the
-
-ssh URLs. (You only need a gerrit account and not committer privs to be
-
-able to clone that way.) It's also possible to set things up to pull from
-
-http:// urls but push to ssh:// urls, but that is stranger and I don't
-
-really know why you'd bother with it.
-
-If you have an existing git checkout, you can fix the URLs just by changing
-
-them in the .git/config file in each checkout. There is a way to do this
-
-with the 'git config' command, but really I'd just edit the file. It ain't
-
-rocket science. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/index.md b/chromium/docs/website/site/nativeclient/index.md
deleted file mode 100644
index bfdb7b7f1c7..00000000000
--- a/chromium/docs/website/site/nativeclient/index.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-breadcrumbs: []
-page_name: nativeclient
-title: Native Client
----
-
-If you want to write Native Client modules (because you want to put C or C++
-code in your web app), get the SDK:
-
-> [**Native Client Developer Site**](http://gonacl.com)
-
-If you're interested in the implementation of Native Client, you're in the right
-place. We're moving our implementation information to subpages of this one, but
-some information exists in other websites (such as the [nativeclient
-project](http://code.google.com/p/nativeclient/), which has a
-[wiki](http://code.google.com/p/nativeclient/wiki/) that was used for some
-documentation previously). The following search field covers all these websites
-plus groups.
-
-<img alt="image"
-src="http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D499'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D500'%3D47'dim'%5C%3D10'%3D10'%3D500'%3D47'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&sig=euCRKri7t9BYkRq20_OPFS3LDdo"
-height=50 width=500>
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/life-of-sel_ldr/index.md b/chromium/docs/website/site/nativeclient/life-of-sel_ldr/index.md
deleted file mode 100644
index 75ee69c8916..00000000000
--- a/chromium/docs/website/site/nativeclient/life-of-sel_ldr/index.md
+++ /dev/null
@@ -1,256 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: life-of-sel_ldr
-title: The life of sel_ldr
----
-
-sel_ldr stands for Secure ELF Loader and is the heart of Native Client. The
-plugin (or other supervisor) starts sel_ldr, loads nacl module, opens SRPC
-channels, communicates and terminates sel_ldr at the end.
-
-**Starting sel_ldr**
-
-In order to start sel_ldr, we need to create a socketpair(AF_UNIX, SOCK_DGRAM,
-0, fds) and pass the one side of it to sel_ldr.
-
-The minimal set of sel_ldr arguments is:
-
-sel_ldr -i D:5 -X 5 -- nacl_module &lt;nacl_module_args&gt;
-
-where D=fds\[0\] is the file descriptor of the above socketpair half. This
-socketpair is the service socket which will be used to obtain some descriptors
-from sel_ldr.
-
-**Receiving a bound socket**
-
-The first action we need to do is to receive a bound socket that will be used to
-open SRPC channels. It's very simple, we need just to call recvmsg on the
-plugin's half of the above socketpair. The simplification of
-src/nonnacl_util/sel_ldr_launcher.cc::GetSockAddr method:
-
-int\* control = (int\*)calloc(100, sizeof(int));
-
-struct iovec iov;
-
-iov.iov_base = calloc(100, 1);
-
-iov.iov_len = 100;
-
-struct msghdr msg;
-
-msg.msg_name = NULL;
-
-msg.msg_namelen = 0;
-
-msg.msg_iov = &iov;
-
-msg.msg_iovlen = 1;
-
-msg.msg_control = control;
-
-msg.msg_controllen = 100 \* sizeof(int);
-
-msg.msg_flags = 0;
-
-recvmsg(fds\[1\], &msg, 0)
-
-int bound_socket = control\[4\]; // This is the socket we wanted to receive
-
-// NOTE: this is a hacky code, it does not check for errors, so it should not be
-used in production.
-
-See man recvmsg for more details.
-
-Also, you can look into [fuse
-tutorial](http://ptspts.blogspot.com/2009/11/fuse-protocol-tutorial-for-linux-26.html).
-They also start fusermount with a socketpair like above and receive the file
-descriptor to communicate with the kernel. That documentation could be a good
-explanation why does it work this way.
-
-**Opening SRPC channels**
-
-The plugin opens 2 SRPC channels: trusted_command, and untrusted. The first one
-is used to pass commands to the trusted part of sel_ldr. It is opened first and
-we need to do the following:
-
-1. Create a DGRAM socket pair like we did in the first paragraph
-
-2. Send a half of the socket pair to bound_socket via sendmsg (see below for a
-code snippet)
-
-3. Use the other half of the socket pair as the descriptor for SRPC channel
-
-Sending a file descriptor is very similar to receiving:
-
-int srpc_fds\[2\];
-
-socketpair(AF_UNIX, SOCK_DGRAM, 0, srpc_fds)
-
-int\* control = (int\*)calloc(100, sizeof(int));
-
-control\[0\] = 20;
-
-control\[1\] = 0;
-
-control\[2\] = 1;
-
-control\[3\] = 1;
-
-control\[4\] = srpc_fds\[0\]; // Sending the half of the socket pair
-
-struct iovec iov;
-
-char\* base = (char\*) calloc(100, 1);
-
-base\[0\] = 'c';
-
-iov.iov_base = base
-
-iov.iov_len = 1;
-
-struct msghdr msg;
-
-msg.msg_name = NULL;
-
-msg.msg_namelen = 0;
-
-msg.msg_iov = &iov;
-
-msg.msg_iovlen = 1;
-
-msg.msg_control = control;
-
-msg.msg_controllen = 20;
-
-msg.msg_flags = 0;
-
-sendmsg(bound_socket, &msg, 0)
-
-// srpc_fds\[1\] is the fd to use for SRPC communication
-
-So, the first SRPC channel is opened and we will call it trusted_command
-channel. The first what we should do with it is to call SRPC method
-service_discovery::C to get the list of available SRPC methods for this channel.
-service_discovery method always has index 0, so we can do it w/o the knowledge
-of the available methods.
-
-To read about SRPC, go to [Using Simple RPC to Implement Native Client
-Services](/system/errors/NodeNotFound), the
-[reference](http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/scons-out/doc/html/group___s_r_p_c.html)
-or native_client/src/shared/srpc in the Native Client sources. Take a look into
-native_client/src/shared/srpc/rpc_serialize.c to get understanding of SRPC
-marshalling.
-
-To call SRPC method we need to sendmsg with the serialized SRPC call and after
-that recvmsg to get the answer. In the simplest case of service_discovery::C we
-need to send the following:
-
-iov = \[{"\\1\\336\\300\\323\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0", 16},
-{"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\0C\\240\\17\\0\\0",
-30}\]
-
-The first string is an SRPC banner that is constant.
-
-The second string has the following format (according to
-native_client/src/shared/srpc/rpc_serialize.c):
-
-/\*
-
-\* Message formats:
-
-\* SRPC communicates using two main message types, requests and responses.
-
-\* Both are communicated with an rpc (header) prepended.
-
-\*
-
-\* rpc:
-
-\* protocol - (uint32_t) 4 bytes
-
-\* message id - (uint64_t) 8 bytes
-
-\* request/response - (uint8_t) 1 byte
-
-\* rpc method index - (uint32_t) 4 bytes
-
-\* return code - (uint32_t) 4 bytes (only sent for responses)
-
-\*
-
-\* request:
-
-\* #args - (uint32_t) 4 bytes
-
-\* #args \* (arg value) - varying size defined by interface below
-
-\* #rets - (uint32_t) 4 bytes
-
-\* #rets \* (arg template) - varying size defined by interface below
-
-\*
-
-\* response:
-
-\* #rets - (uint32_t) 4 bytes
-
-\* #rets \* (arg value) - varying size defined by interface below
-
-\*
-
-\*/
-
-When we sent service_discover::C message, sel_ldr will reply with something
-like:
-
-msg_iov(2)=\[
-
-{"\\1\\336\\300\\323\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0", 16},
-
-{"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\1\\0\\0\\0CM\\0\\0\\0service_discovery::C\\nhard_shutdown::\\nstart_module::i\\nlog:is:\\nload_module:h:\\n\\0",
-107}
-
-\]
-
-As we can see, the first 16 bytes are still the SRPC banner. The second string
-contains the list of methods:
-
-service_discovery::C
-
-hard_shutdown::
-
-start_module::i
-
-log:is:
-
-load_module:h:
-
-Before we can open the untrusted SRPC channel, we need to start a NaCl module.
-Currently, sel_ldr has been validated and initialized nacl_module but not
-started it.
-
-As we can see, start_module has the index 2, so the corresponding message
-(omitting the banner) is:
-"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\1\\2\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\0i"
-
-Sel_ldr will reply with:
-
-"\\2\\0\\332\\300\\0\\0\\0\\0\\0\\0\\0\\0\\0\\2\\0\\0\\0\\0\\1\\0\\0\\1\\0\\0\\0i\\0\\0\\0\\0"
-
-Now we can open the untrusted SRPC channel. It's completely the same procedure
-as opening the trusted_command channel: make a socket pair, sent it to the bound
-socket, obtain the list of methods via service_discovery::C. When it's done,
-everything is initialized. NaCl module has been started to work and sel_ldr will
-be alive until the termination of untrusted program (represented by a NaCl
-module) or until the supervisor (e.g. the plugin) tells to sel_ldr that it needs
-to shutdown.
-
-Hopefully, this information will be needed to just a few developers which are
-working on implementing alternative plugins for Native Client or other
-sandboxing libraries (for example, for server-side NaCl).
-
-Note, that this is a low level information which were obtained with strace. All
-the process could be changed over time and there were the changes last three
-months. So, it's more likely an overview of what's happening, nothing more. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/nameservice/index.md b/chromium/docs/website/site/nativeclient/nameservice/index.md
deleted file mode 100644
index c8f74e777b1..00000000000
--- a/chromium/docs/website/site/nativeclient/nameservice/index.md
+++ /dev/null
@@ -1,170 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: nameservice
-title: nameservice
----
-
-**NAME**
-
-> NaClNameServiceGetRoot, NaClNameServiceChannel, NaClNameServiceResolve -- look
-> up names in namespaces
-
-**SYNOPSIS**
-
-> #include &lt;stdint.h&gt;
-
-> #include &lt;fcntl.h&gt;
-
-> #include &lt;nacl/nameservice.h&gt;
-
-> int32_t NaClNameServiceGetRoot(void);
-
-> void NaClNameServiceClose(int32_t service);
-
-> int32_t NaClNameServiceChannel(int32_t service);
-
-> void NaClNameServiceChannelClose(int32_t channel);
-
-> int32_t NaClNameServiceResolve(int32_t channel, char const \*name, int32_t
-> flags, int32_t mode);
-
-> size_t NaClNameServiceEnumerate(int32_t channel, char \*buffer, size_t
-> nbytes);
-
-> void NaClNameServiceChannelAsyncThread(int32_t channel);
-
-> int32_t NaClNameServiceResolveAsync(int32_t channel, char const \*name,
-> int32_t flags, int32_t mode, void (\*callback)(void \*state, int32_t desc,
-> int32_t errno), void \*state);
-
-> int32_t NaClNameServiceEnumerateAsync(int32_t channel, char \*buffer, size_t
-> nbytes, void (\*callback)(void \*state, size_t written), void \*state);
-
-**DESCRIPTION**
-
-> The name service interface provides a general mechanism to resolve names,
-> mapping a NUL-terminated character string to an I/O descriptor. Resolution may
-> result in descriptors that represent files, name resolvers for lower-level
-> namespaces, and, in the future, device interfaces such as video cameras or
-> joysticks. Initial namespaces that can be reached from the "root" namespaces
-> are manifest files, WebFS persistent files, WebFS temporary files, and files
-> included with the standard Native Client runtime.
-
-> NaClNameServiceGetRoot() returns a "root" name service which every Native
-> Client module is created with. This name service identity is used to create
-> name service channels using which name resolution can occur, using
-> NaClNameServiceChannel(). Each Native Client module may create multiple name
-> service channels, e.g., one per thread or to form a channel pool that grows as
-> needed. Each channel may be used for only one synchronous resolution operation
-> at a time, and it is up to the Native Client module to ensure that this holds.
-
-> As an alternative to using the synchronous API, NaClNameServiceResolveAsync
-> may be used instead. Before NaClNameServiceResolveAsync is used, the caller
-> must spawn a thread and invoke NaClNameServiceChannelAsyncThread, which will
-> only return when the channel is closed. Here, the name service will invoke
-> callback with the result desc -- which, on an error, will be -1, so the
-> callback is guaranteed to be called exactly once -- once a result is
-> available. The callback/state functor will be invoked on a separate thread,
-> and it is the responsibility of the NaCl module provided callback functor to
-> process the result in a thread-safe manner. Multiple
-> NaClNameServiceResolveAsync may be invoked on the same channel. However, the
-> maximum number of NaClNameServiceResolveAsync operations actually allowed in
-> flight is not specified, and the order of callbacks may occur in any order. If
-> the callback is invoked with the desc argument equal to -1, the errno argument
-> will have a meaningful value. If the maximum number of in-flight asynchronous
-> name resolutions is exceeded, NaClNameServiceResolveAsync returns -1, and the
-> caller may retry later, e.g., when a callback is invoked; otherwise
-> NaClNameServiceResolveAsync returns 0 to indicate that the callback will fire,
-> or may have fired.
-
-> The name, flags, and mode arguments for NaClNameServiceResolve and
-> NaClNameServiceResolveAsync are essentially that of the familiar POSIX open(2)
-> call, with the following differences: flags may contain, instead of the usual
-> O_RDONLY, O_RDWR, etc, values defined in fcntl.h, O_NAMESERVICE. When
-> resolving a name with O_NAMESERVICE, the mode argument is ignored. If the
-> resolution succeeds, the return value is a name service, which may in turn be
-> used with NaClNameServiceChannel. If the resolution fails,
-> NaClNameServiceResolve returns -1 and the thread-local variable errno is set
-> to indicate the reason for failure.
-
-> To enumerate all names at a name service, use NaClNameServiceEnumerate or
-> NaClNameServiceEnumerateAsync. The supplied buffer is overwritten with at most
-> nbytes of NUL-terminate string names, and the actual number of bytes written
-> is returned, in the case of NaClNameServiceEnumerate; or is supplied as the
-> written input argument of the completion callback functor callback/state, in
-> the case of NaClNameServiceEnumerateAsync. NB: If written &lt; nbytes, then
-> all names in the namespace were returned. Some name services, e.g., those
-> associated with file systems, may permit the opening of directories as name
-> services.
-
-> All I/O operations using I/O descriptors returned by name services will cause
-> the caller to block until the operation succeeds, unless the NaCl thread
-> synchronous I/O restriction is in force; in this case, the I/O restricted
-> thread(s) will not be able to perform I/O operations unless explicitly
-> enabled: such operations will result in EWOULDBLOCK.
-
-> Do not use both the asynchronous and synchronous resolution interfaces, even
-> in a temporally disjoint manner.
-
-**EXAMPLES**
-
-> int32_t root_nameservice = NaClNameServiceGetRoot();
-
-> int32_t root_ns_channel = NaClNameServiceChannel(root_nameservice);
-
-> int32_t web_fs_nameservice = NaClNameServiceResolve(root_ns_channel,
-> "WebFsPersistentStore", O_NAMESERVICE, 0);
-
-> int32_t manifest_nameservice = NaClNameServiceResolve(root_ns_channel,
-> "ManifestFiles", O_NAMESERVICE, 0);
-
-> int32_t fd = NaClNameServiceResolve(manifest_nameservice, "libsdl.so",
-> O_RDONLY, 0);
-
-> void \*ResolverThread(void \*state) {
-
-> NaClNameServiceAsyncThread((int32_t) (intptr_t) state);
-
-> return NULL;
-
-> }
-
-> void ResolverCallback(void \*state, int32_t desc, int32_t errno) {
-
-> /\* grab a lock, save desc somewhere, and signal a condvar \*/
-
-> struct ResolverCallbackState \*info = (struct ResolverCallbackState \*) state;
-
-> pthread_mutex_lock(&info-&gt;mu);
-
-> info-&gt;desc = desc; info-&gt;errno = errno;
-
-> pthread_cond_broadcast(&info-&gt;cv);
-
-> pthread_mutex_unlock(&info-&gt;mu);
-
-> }
-
-> pthread_t tid;
-
-> struct ResolverCallbackState \*info = ...;
-
-> pthread_create(&tid, (pthread_attr_t) NULL, ResolverThread,
-> web_fs_nameservice);
-
-> if (0 != NaClNameServiceResolveAsync(web_fs_nameservice, "/Nexuiz/SavedGame",
-> O_RDWR, 0, ResolverCallback, info)) {
-
-> /\* failed \*/
-
-> }
-
-**SEE ALSO**
-
-> open, close, read, write, fstat, iorestrict
-
-**BUGS**
-
-> stat-like call is missing; TBD. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/nameservice/naming-issues----rationale/index.md b/chromium/docs/website/site/nativeclient/nameservice/naming-issues----rationale/index.md
deleted file mode 100644
index c2c954ed225..00000000000
--- a/chromium/docs/website/site/nativeclient/nameservice/naming-issues----rationale/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/nameservice
- - nameservice
-page_name: naming-issues----rationale
-title: 'naming: issues and use cases'
----
-
-Naming is important for many reasons, among which are being able to precisely
-and unambiguously refer to an object, being able to flexibly add new objects to
-name spaces without causing problems, etc. This document enumerates a few
-scenarios from DSO support that should be supported for NaCl application
-authors.
-
-First, let us specify what (sub-) namespaces exist. "Shared object names" or
-sonames are used by ld.so to refer to shared objects to be loaded, and the
-manifest file provides a mapping from short sonames to longer, less ambiguous
-names. But what might application authors want to be able to refer to? One class
-of file-like objects are web-hosted data. The long name might be an URL or URI
-that resolves -- via HTTP -- to a sequence of bytes that happen to be a NaCl
-shared object. Another class of file-like objects are pre-supplied shared
-libraries that are shipped with the NaCl distribution, e.g. libc.so. A third
-class are files in WebFS -- perhaps the application downloaded and installed
-into WebFS persistent storage shared libraries that represent code used for
-certain game levels, say.
-
-Suppose an application needs to use libpng.so, which depends on libc.so.
-Initially, the NaCl distribution may not provide a libpng.so and only libc.so,
-and libpng.so might be mapped to a web-hosted file that would be handled by the
-app cache. The following scenarios may occur:
-
-1. The NaCl distribution add commonly-used libraries to reduce startup
- time. Since a bundled version of libpng.so showed up in a new Chrome
- NaCl runtime release, the application author may decide to switch to
- the bundled version. There should be a way to fall back, in case the
- application is running on an as-yet not updated version of Chrome
- NaCl runtime where the new bundled version of libpng is not
- available.
-2. The application author finds a bug or performance issue in the
- bundled version of libc, and substitutes a different version, so
- both libc.so and libpng.so are provided by a web-based resource or
- by WebFS persistent store.
-3. The application author provides his/her own version of libc, but
- decides to use the bundled version of libpng.
-4. The application also depends on and supplies as a web-hosted
- resource libpng_basics, and relies on the bundled version of libpng.
- Later the NaCl distribution splits the bundled version of libpng
- into libpng and libpng_basics, where libpng depends on
- libpng_basics. The two identically named libpng_basics.so are
- completely different libraries and are not compatible. (This may be
- insoluble since the same soname is used.)
-5. The application relies on the bundled version of libc.so, which
- (transparently) depends on libnacl.so. The application author builds
- a new, web-hosted library also named libnacl.so, creating a name
- conflct with the bundled library. This is likely to be discovered in
- testing, unlike the libpng_basics scenario above; this is here for
- completeness: there might not be a way to transparently load
- internal libraries, since the sonames form a global name space.
-
-These use cases should be supported. They might be automatic, or might require a
-manifest file change. For the scenario of bundling commonly-used libraries, it
-is probably safe to assume that new versions can be safely added, and old
-version might either never be removed or be retired only after a long grace
-period.
-
-Some goals:
-
-1. Adding bundled libraries should not break existing code.
-2. Application authors should be able to precisely name the libraries
- to use, so that there is a precise testing target.
-3. Application authors should be able to optionally allow their
- applications to use newer, ABI-compatible releases of a (bundled)
- library.
-
-Some non-goals:
-
-* Provide a per-library soname resolution order.
-
-Potential solutions / solution components:
-
-* Extend URL syntax so that a private protospec can be used to refer
- to bundled files, webfs files, etc. This does not solve the
- sonames-are-a-global-namespace issue (4, 5).
-* Provide a library search path, so that the versioning fallback issue
- from (1) is avoided. This should be done with care, since as noted
- in
- <http://code.google.com/p/nativeclient/wiki/NameResolutionForDynamicLibraries>
- improper use of this can result in excess network traffic /
- roundtrips.
-* Encode in sonames whether an object is bundled version of a library,
- a WebFS-persistent store copy, or a manifest-mapped version. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/Fragment padding.png.1355408184699.png.sha1 b/chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/Fragment padding.png.1355408184699.png.sha1
deleted file mode 100644
index d71d76e8357..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/Fragment padding.png.1355408184699.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b123761edcd6e9e33c0dce1ec34e943437b73404 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/index.md b/chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/index.md
deleted file mode 100644
index 4c5c8e6c258..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/aligned-bundling-support-in-llvm/index.md
+++ /dev/null
@@ -1,303 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: aligned-bundling-support-in-llvm
-title: Aligned bundling support in LLVM
----
-
-This document describes the proposal to add aligned instruction bundle support
-(in short - "bundling") in LLVM and its implementation in the MC module.
-
-[TOC]
-
-## Specification
-
-For the purpose of supporting the Software Fault Isolation (SFI) mechanisms
-required by Native Client, the following directives are added to the LLVM
-assembler:
-
-```none
-.bundle_align_mode <num>
-```
-
-```none
-.bundle_lock <option>
-```
-
-```none
-.bundle_unlock
-```
-
-With the following semantics:
-
-When aligned instruction bundle mode ("bundling" in short) is enabled
-(`.bundle_align_mode` was encountered with an argument &gt; 0, which is the
-power of 2 to which the bundle size is equal), single instructions and groups of
-instructions between `.bundle_lock` and `.bundle_unlock` directives cannot cross
-a bundle boundary.
-
-Furthermore, the `.bundle_lock` directive supports the `align_to_end `option,
-which means that the group has to end at a bundle boundary.
-
-For example, consider the following:
-
-```none
-.bundle_align_mode 4
-mov1
-mov2
-mov3
-```
-
-Assuming that each of the `mov` instructions is 7 bytes long and `mov1` is
-aligned to a 16-byte boundary, two bytes of NOP padding will be inserted between
-`mov2` and `mov3` to make sure that `mov3` does not cross a 16-byte bundle
-boundary.
-
-A slightly modified example:
-
-```none
-.bundle_align_mode 4
-mov1
-.bundle_lock
-mov2
-mov3
-.bundle_unlock
-```
-
-Here, since the bundle-locked sequence `mov2 mov3` cannot cross a bundle
-boundary, 9 bytes of NOP padding will be inserted between `mov1` and `mov2`.
-An example to demonstrate the `align_to_end` option:
-
-```none
-.bundle_align_mode 4
-mov1
-mov2
-.bundle_lock align_to_end
-mov3
-mov4
-.bundle_unlock
-```
-
-Normally, only two bytes of NOP padding would be required between `mov2` and
-`mov3` to ensure that bundle-locked sequence does not cross a bundle boundary.
-However, since `align_to_end` was provided, an additional two bytes of NOP
-padding will be inserted so that the sequence ends at a boundary.
-
-For information on how this ability is used for software fault isolation by
-Native Client, see the following resources:
-
-* <http://src.chromium.org/viewvc/native_client/data/site/NaCl_SFI.pdf>
- \[PDF link\]
-* <http://www.chromium.org/nativeclient/reference/arm-overview#TOC-The-Native-Client-Solution:-Bundles->
-* Other papers listed at[
- http://www.chromium.org/nativeclient/reference/research-papers](http://www.chromium.org/nativeclient/reference/research-papers)
-
-## Implementation in LLVM MC
-
-As proposed, bundling is a feature of the assembler. Therefore, it is
-implemented in the MC module of LLVM. Specifically, the following parts are
-affected:
-
-* The assembler parser is modified to parse the new directives and
- emit appropriate commands to streamers.
-* The assembly streamer (used for printing out disassembly) is
- modified to emit textual directives back from streamer commands.
-* The object streamers are modified to act upon the bundling commands
- to affect the assembly process.
- * Note: at this point support has only been added to the ELF
- object streamer. This is done to answer the immediate needs of
- NaCl and to reduce the complexity of the initial patch. At a
- later point, bundling support can also be added to the MachO and
- COFF streamers, if someone is interested.
-* The main assembler logic is modified to support bundling.
-
-The following description will focus on the path: *Text assembly -&gt; ELF
-object streamer -&gt; Assembly -&gt; Object file emission*. This path can be
-roughly divided to three stages:
-
-1. Parse bundling directives and emit a sequence of sections
- (`MCSectionData`) and fragments (`MCFragment` derivatives) that
- represent the input.
-2. Perform layout of the fragments to be valid w.r.t. relaxation and
- bundling.
-3. Write the output object.
-
-### Parsing and emitting sections and fragments
-
-In order to implement bundling, we use the existing assembly parsing facilities
-in MC, adding support for the new directives. The existing section and fragment
-abstractions are used, with some flags added to keep the state of the bundling
-directives encountered. Specifically:
-
-* A `BundleAlignSize` field is added to `MCAssembler`. When the`
- .bundle_align_mode` directive is parsed, this field is populated
- with the bundle alignment size (2 to the power of the argument of
- `.bundle_align_mode`). Setting this field is currently allowed once
- per assembly file. Subsequent `.bundle_align_mode` directives will
- be rejected as errors.
-* The following state fields are added to MCSectionData and managed by
- the code parsing `.bundle_lock` and `.bundle_unlock`:
- * `BundleLockState`: keeps track of whether the currently parsed
- code is in a bundle-locked group (between` .bundle_lock` and`
- .bundle_unlock` directives) and whether the group has to be
- aligned to bundle end.
- * `BundleGroupBeforeFirstInst`: keeps track of whether the next
- instruction parsed will be the first in a bundle-locked group.
- * Turned on when `.bundle_lock` is encountered
- * Turned off when an instruction is emitted in the streamer
-
-When bundling mode is turned on in the assembler (`BundleAlignSize` &gt; 0), the
-following rules apply to emitting fragments:
-
-* All instructions are emitted into separate fragments (either data or
- instruction fragments, depending on whether they are candidates for
- relaxation). This is essential because each instruction may
- potentially need to be padded to obey bundling rules when layout is
- performed (details below). Bundling does not apply to
- non-instructions like data, alignment directives, etc.
-* Instructions in bundle-locked groups get emitted into the same data
- fragment, since they are all part of the same group which has to be
- moved and padded together.
- * To make this possible, all potentially relaxable instructions
- inside bundle-locked groups are relaxed before emission, so that
- they won't need relaxation in the future.
- * While in theory the above means the code can become larger than
- necessary, in practice instructions actually requiring
- relaxation won't usually appear in bundle-locked groups, so the
- practical cost is very low. The gain is a significant
- simplification of the implementation.
-
-### Laying out fragments
-
-Bundling blends well into the existing layout mechanism in the MC assembler,
-since its effects are somewhat similar to relaxation. Some fragments may need to
-grow due to padding, which may require re-layout of subsequent fragments and
-recomputation of fixups. Therefore, the MC assembler employs an iterative layout
-algorithm. The following diagram will help explain the layout of fragments
-w.r.t. bundling:
-
-[<img alt="image"
-src="/nativeclient/pnacl/aligned-bundling-support-in-llvm/Fragment%20padding.png.1355408184699.png">](/nativeclient/pnacl/aligned-bundling-support-in-llvm/Fragment%20padding.png.1355408184699.png)
-
-* When layout on a fragment is performed, the fragment's offset and
- size are computed.
-* The following steps apply only if:
- * Bundling is enabled
- * The fragment contains instructions (we don't pad data and
- alignment fragments)
- * For this purpose, a boolean predicate `hasInstructions` is
- added to `MCFragment`
-* If it's determined that the fragment will cross a bundle boundary,
- padding is required.
- * The required amount of padding is computed and stored in the
- `BundlePudding` field of the fragment.
- This field is restricted to `uint8_t`, in order to save space in the
- mainstream case (bundling disabled). In practice, fragments of larger
- size will not be encountered (bundling is done at most on small groups
- of a few instructions).
- * The fragment offset is set to point after the padding, at the
- start of the actual fragment. This way the following invariant
- still holds:
- `fragment offset + fragment size = offset of next fragment`
-* Padding is also required if the `align_to_end` option is provided to
- a bundle-locked group.
-
-Note that since we create a single data fragment for a bundle-locked group, the
-above applies to such groups as well as single instructions.
-
-### Writing fragments to the object file
-
-*Note: the write target of the assembler is abstracted into a stream object,
-which can also write into memory. "Object file" here implies this stream.*
-
-In the last step, the assembler writes the list of fragments into sections
-according to their layout order. In this step, the `BundlePadding` field created
-during layout is used to add NOP padding (by calling `writeNopData` on the
-target-specific assembler backend) of appropriate size before fragments that
-require it.
-
-## Performance impacts
-
-It's interesting to study the performance impact of adding the bundling feature
-on MC's assembler normal operation (without actual bundling directives).
-
-### Memory consumption of fragment objects
-
-Amount of bytes needed for the various MCFragment objects on x86-64:
-
-<table>
-<tr>
-<td> <b>Fragment type</b></td>
-<td><b> Without bundling</b></td>
-<td><b> With bundling</b></td>
-</tr>
-<tr>
-<td>`MCFragment`</td>
-<td>` 64`</td>
-<td>` 64`</td>
-</tr>
-<tr>
-<td>`MCRelaxableFragment`</td>
-<td>` 320`</td>
-<td>` 320`</td>
-</tr>
-<tr>
-<td>`MCDataFragment`</td>
-<td>` 240`</td>
-<td>` 240`</td>
-</tr>
-</table>
-
-Explanation: the single-byte` BundlePadding` field in `MCEncodedFragment` was
-placed in space reserved for alignment earlier. The same was done for the
-boolean `HasInstructions` in `MCDataFragment`.
-
-### Assembler runtime
-
-`llvm-mc` was run on a large assembly file (produced by compiling gcc 3.5 into a
-single assembly file) as follows:
-
-```none
-sudo nice -n -20 perf stat -r 10 llvm-mc -filetype=obj gcc.s -o gcc.o
-```
-
-There were no noticeable difference in the runtime of `llvm-mc` with and without
-the bundling patch.
-
-**Alternative implementation**
-
-Bundling is similar to relaxation in many aspects which simplifies the
-implementation. While the performance impact of bundling is negligible as shown,
-the interaction of these two mechanisms can have a negative effect on memory
-consumption. When bundling is used, most instructions need to be put in their
-own fragment. That's because before we have decided the sizes of jumps, we don’t
-know the relative positions of other instructions, as we might need to insert
-bundle padding NOPs between them. The only exception are bundle-locked
-superinstruction sequences which can be stored in a single fragment.
-
-Since there's a memory overhead for storing a fragment, the use of bundling with
-relaxation significantly increases memory overhead. When translating pexe,
-pnacl-llc uses *K \* nexe size* memory. The experimental results show that the
-value of K is ~17 with the fixed cost of ~50MB. Given that, with the maximum
-*pexe* size limited currently to 64MB, pnacl-llc would need over 1.1GB of
-address space which is significantly more than 768MB that will be available when
-pnacl-llc starts using IRT.
-
-Therefore, one way to reduce the memory consumption is to disable jump
-relaxation. In that case, we know that size of all instructions from the
-beginning and we can write the bundle padding NOPs directly into the fragments
-while emitting the instructions, thus reducing the number of fragments needed.
-
-### Emitting instructions
-
-We have implemented the alternative bundle padding scheme in LLVM MC. Currently,
-this implementation is only being used when the -mc-relax-all flag is used. The
-large bulk of implementation is in the MCELFStreamer::mergeFragment method. We
-reuse the existing code and emit instructions into their own fragment. We also
-reuse the existing logic for calculating bundle boundaries and necessary bundle
-padding. However, when the jump relaxation is disabled, instead of adding each
-fragment into the list of fragments held by MCSectionData, we merge it with the
-current fragment. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/bitcode-abi/index.md b/chromium/docs/website/site/nativeclient/pnacl/bitcode-abi/index.md
deleted file mode 100644
index 9303319d1ed..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/bitcode-abi/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: bitcode-abi
-title: PNaCl Bitcode Reference Manual
----
-
-See
-<https://developers.google.com/native-client/dev/reference/pnacl-bitcode-abi> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers/index.md b/chromium/docs/website/site/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers/index.md
deleted file mode 100644
index 2091e214765..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers/index.md
+++ /dev/null
@@ -1,145 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: building-pnacl-components-for-distribution-packagers
-title: Building and using PNaCl components for Chromium distribution packagers
----
-
-## Overview
-
-Chromium's support for NaCl includes a runtime component called the IRT
-(integrated runtime) that is built as untrusted NaCl code with a NaCl compiler.
-Currently the PNaCl compiler is required for building this component on x86-64,
-and is used on other architectures as well for consistency.
-
-Chromium's automated builders download binary tarballs of the NaCl compilers, to
-avoid having to rebuild them on every run. However distributors of Chromium may
-be unwilling to do this and wish to build the toolchain from source (and
-possibly even package the toolchain itself). Also, the toolchain binary is built
-for the x86_64 architecture and won't run on systems with i686 kernels.
-
-So this document describes how to build the PNaCl toolchain from source, (for
-someone who doesn't necessarily want to modify it) and build Chromium using a
-locally-built toolchain.
-
-PNaCl toolchains are built using a set of scripts in the Native Client
-repository, whose entry point is `toolchain_build/toolchain_build_pnacl.py`
-
-This script is mostly optimized for use for day-to-day toolchain development and
-for our automated builders, so some non-default flags are needed.
-
-For now this script must also be used to fetch the PNaCl toolchain sources. In
-the future we hope to provide source tarballs and/or patches against upstream
-sources.
-
-To see a full list of supported flags, use the -h flag. The toolchain consists
-of many "packages" for different components such as the host LLVM and binutils
-binaries, PNaCl driver scripts, and target libraries for each supported target.
-
-TL;DR: You can build all of the required components from a checkout of the
-native_client source tree (which could be the one DEPSed in by Chromium)
-
-```none
-$ toolchain_build/toolchain_build_pnacl.py --verbose --sync --clobber --gcc [--no-nacl-gcc] --no-use-cached-results --no-use-remote-cache --disable-git-cache --build-sbtc
-$ build/package_version/package_version.py --packages pnacl_newlib --tar-dir toolchain_build/out/packages --dest-dir toolchain/ extract --skip-missing
-$ build/package_version/package_version.py --packages pnacl_translator --tar-dir toolchain_build/out/packages --dest-dir toolchain/ extract --skip-missing
-```
-
-When you run Chromium's gyp to configure the build, add the following to your
-gyp defines:
-
-```none
-pnacl_newlib_toolchain=</path/to/native_client>/toolchain/linux_x86/pnacl_newlib
-pnacl_translator_dir=</path/to/native_client>/toolchain/linux_x86/pnacl_translator
-```
-
-When the gyp-generated ninja build prepares the toolchain to build the IRT, it
-will copy the specified directory rather than extracting the binary tarballs.
-
-## Explanation
-
-The first command builds the host toolchain components. It fetches the sources
-(--sync) into the toolchain_build/src directory without relying on tools
-specific to Chromium's depot_tools package (--disable-git-cache). It clobbers
-any existing build working directories (--clobber), builds the PNaCl host
-toolchain using the system compiler (--gcc) and does not use our automated build
-infrastructure for caching build artifacts
-(--no-cache-results,--no-use-cached-results). Its output is an install directory
-for each package in `toolchain_build/out/{packagename}_install`, a set of
-tarballs in `toolchain_build/out/cache` and a set of JSON files that describe
-the packages and their contents in `toolchain_build/out/packages`.
-
-The contents of these install directories can be copied (or the tarballs can be
-extracted together) into any directory, and the toolchain can be used from that
-directory. This is what the second command does: it takes the JSON file
-describing the pnacl_newlib package and extracts its tarballs into the
-`toolchain/linux_x86/pnacl_newlib` directory.
-
-One caveat is that nacl-clang uses gcc's exception handling runtime (libgcc_eh)
-on x86 architectures. This in turn requires {i686,x86_64}-nacl-gcc to build.
-This toolchain has a separate build script see (tools/Makefile) or can be
-installed as a binary in the same way that the PNaCl compilers can.
-Alternatively the --no-nacl-gcc flag can be used when building the PNaCl, which
-will allow the build to complete but will result in a non-functional C++
-exception handling runtime (this EH runtime is not needed to build any Chrome
-components, so you'd only need to build it if you want to also create a NaCl SDK
-for developers to use).
-
-## PNaCl in-browser translator
-
-If you want to enable PNaCl as well as NaCl in Chromium, the last component that
-needs to be built is the in-browser PNaCl translator component. The third
-command does that, and leaves its output in
-`toolchain/linux_x86/pnacl_translator`. It consists of 2 NaCl modules and a few
-NaCl object/archive files (per supported architecture), and these are packaged
-(munging the filenames) into a directory called `pnacl` in Chromium's build
-output directory by a python script that runs as part of Chromium's build (e.g.
-in `/path/to/chromium/src/out/Release/pnacl/pnacl_public_foo`). For desktop
-Google Chrome official builds, these artifacts are not packaged with Chrome's
-installer, and are instead delivered after install by the component updater
-code. However for locally-built Chromium binaries, distribution packages, and
-ChromeOS (where the entire OS image is updated at once) the PNaCl translator in
-this directory is used.
-
-If you also want to avoid using the `package_version.py` tool after running
-`toolchain_build_pnacl.py` you can manually copy the contents of all of the
-`toolchain_build/out/<packagename>_install` directories into a location of your
-choosing, and make the `pnacl_newlib_toolchain` gyp variable point to that
-directory. If you do so, you will also have to create a stamp file in that
-directory; by default it is called `pnacl_newlib.json` but that name can be
-overridden with the `pnacl_newlib_stamp` gyp variable. Only the modified time of
-the stamp file matters, not the content; if you change the contents of the
-toolchain directory and want to rebuild Chromium, you will need to touch the
-stamp file.
-
-## Network Access
-
-Sometimes distributions want to be able to build from locally-available sources
-without requiring network access during the build. Ideally we would have source
-tarballs or patches against upstream sources available for this purpose, but
-today we do not. However the sources can be fetched separately from the build:
-the `--sync-only` flag for `toolchain_build_pnacl.py` causes the sources to be
-fetched into the `toolchain_build/src` directory without building anything. Then
-the build can be done later by a separate invocation which does not require
-network access.
-
-```none
-$ toolchain_build/toolchain_build_pnacl.py --verbose --sync --sync-only --disable-git-cache
-$ toolchain_build/toolchain_build_pnacl.py --verbose --clobber --gcc --no-use-cached-results --no-use-remote-cache 
-```
-
-## Other flags
-
-A listing of all the available package names and the supported flags for
-`toolchain_build_pnacl.py` can be seen by using the `--help` flag. Other flags
-that may be of interest in this context include `--output=`, `--source=`, and
-`--cache=` which allow changing the default directories for the fetched sources
-and build artifacts.
-
-## More information
-
-There is a tracking bug for work to help enable this use case at
-<https://code.google.com/p/nativeclient/issues/detail?id=3954> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/developing-pnacl/index.md b/chromium/docs/website/site/nativeclient/pnacl/developing-pnacl/index.md
deleted file mode 100644
index a4e4fdc9596..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/developing-pnacl/index.md
+++ /dev/null
@@ -1,503 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: developing-pnacl
-title: Developing PNaCl
----
-
-[TOC]
-
-**This page is intended for developers making changes to the PNaCl tools. If you
-just want to build PNaCl-based applications, see the [Native Client developer
-documentation](https://developers.google.com/native-client/dev/overview). If you
-just want to build the toolchain, e.g. to package PNaCl or Chromium with NaCl
-support, see the shorter document on
-[building](/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers).**
-
-## Prerequisites
-
-In addition to what is needed to \[build nacl\], several packages may need to be
-installed on your system. For Ubuntu systems, e.g.:
-
-```none
-sudo apt-get install git cmake texinfo flex bison ccache g++ g++-multilib gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
-```
-
-```none
-test -e /usr/include/asm || sudo ln -s /usr/include/asm-generic /usr/include/asm
-```
-
-## Get the Native Client Source
-
-To build the PNaCl toolchain, you will need to check out the entire native
-client project [with
-git](http://www.chromium.org/nativeclient/how-tos/how-to-use-git-svn-with-native-client).
-After that:
-
-```none
-cd $NACL_DIR/native_client
-```
-
-Once you have the native client project checked out, you can [check out the
-PNaCl
-sources](/nativeclient/pnacl/developing-pnacl#TOC-TL-DR-for-checking-out-PNaCl-sources-building-and-testing).
-
-## Prebuilt binaries
-
-Pre-built binaries for PNaCl are downloaded from the DEPS file by gclient, and
-are located in one of these directories, depending upon your architecture and
-operating system.
-
-```none
-toolchain/linux_x86/pnacl_newlib_raw
-toolchain/mac_x86/pnacl_newlib_raw
-toolchain/win_x86/pnacl_newlib_raw
-```
-
-If you want to use these binaries outside of Scons, you must build and install
-the SDK libraries. This installs the libraries such as libnacl from the NaCl
-repo that go into the SDK and are needed to link programs without any special
-flags. (Note that this does not install the Pepper libraries, as those come from
-the Chromium repository):
-
-```none
-pnacl/build.sh sdk
-```
-
-## Sanity Check: Compiling a test program with the prebuilt toolchain
-
-At this point, you probably want to test if the pre-built toolchain works. Let's
-start by creating a "hello world" program:
-
-```none
-#include <stdio.h>
-int main(int argc, const char *argv[]) {
-  printf("Hello World!\n");
-  return 0;
-}
-```
-
-Add the PNaCl toolchain to your path for convenience, if desired:
-
-```none
-PATH=${PATH}:toolchain/linux_x86/pnacl_newlib/bin    # Adjust the name for your system  
-```
-
-Now compile hello.c:
-
-```none
-pnacl-clang hello.c -o hello.nonfinal.pexe
-pnacl-finalize hello.nonfinal.pexe -o hello.pexe
-```
-
-(NOTE: If you get an error about missing crt1.o or -lnacl, you must run the SDK
-install step. See the installation instructions in the previous section.)
-
-You have now produced a "pexe", a PNaCl bitcode application. To run this pexe,
-it must be first translated to native code. Let's translate it to X86-32, X86-64
-and ARM.
-
-```none
-pnacl-translate -arch x86-32 hello.pexe -o hello_x86_32.nexe
-pnacl-translate -arch x86-64 hello.pexe -o hello_x86_64.nexe
-pnacl-translate -arch arm    hello.pexe -o hello_arm.nexe
-```
-
-Now you have 3 native executables, one for each architecture. To run them inside
-of `sel_ldr`, use the helper script, `native_client/run.py`:
-
-```none
-./run.py hello_x86_32.nexe
-./run.py hello_x86_64.nexe
-./run.py hello_arm.nexe     # By default it will look for qemu to run the ARM nexe.
-```
-
-## Testing a PNaCl toolchain with SCons
-
-To use the PNaCl toolchain with the native client scons tests, just specify
-"bitcode=1" on the command-line.
-
-Some sample command lines:
-
-```none
-./scons platform=arm bitcode=1                   # build everything
-./scons platform=arm bitcode=1  smoke_tests      # run smoke_tests
-./scons platform=x86-32 bitcode=1                # build everything
-./scons platform=x86-32 bitcode=1  smoke_tests   # run smoke_tests
-./scons platform=x86-64 bitcode=1                # build everything
-./scons platform=x86-64 bitcode=1  smoke_tests   # run smoke_tests
-./scons -j32 -k --verbose ...                    # parallelize, don't abort on first error, verbose output
-./scons platform=... bitcode=1 use_sz=1 ...      # run using pnacl-sz instead of pnacl-llc
-```
-
-The scons tests are more conveniently wrapped in a testing script:
-
-```none
-pnacl/test.sh test-x86-32      # Runs the smoke tests as above, plus nonpexe_tests
-pnacl/test.sh test-x86-64
-pnacl/test.sh test-arm
-pnacl/test.sh test-x86-32-sbtc # Runs the same tests, but with the sandboxed translator
-pnacl/test.sh test-x86-64-sbtc
-pnacl/test.sh test-arm-sbtc
-```
-
-## Other Compiler Tests
-
-### LLVM regression tests
-
-These tests can be run directly by running 'make check' in the build directory
-(pnacl/build/llvm_x86_64). There are currently a few known failures which are
-not marked as XFAIL in the usual LLVM way, so instead the regression tests can
-also be run in the following way, which will ignore the known failures. (This
-only works after you have built the PNaCl LLVM and have the build directory
-available).
-
-```none
-pnacl/scripts/llvm-test.py --llvm-regression
-```
-
-The LLVM regression tests run quickly and should be run before every LLVM
-commit, along with the scons tests.
-
-The following tests take longer and are generally not run by the developers on
-every commit, but they should be run for large changes, and are run on the
-toolchain testing bots on every commit.
-
-### GCC Torture tests
-
-To run the gcc torture test suite against PNaCl, do the following:
-
-```none
-tools/toolchain_tester/torture_test.py pnacl x86-64 --concurrency=12
-```
-
-Other options are documented in torture_test.py and
-tools/toolchain_tester/toolchain_tester.py
-
-### LLVM Test Suite
-
-To run the LLVM test suite against PNaCl, do
-
-```none
-pnacl/scripts/llvm-test.py --testsuite-all --arch x86-64
-```
-
-This is equivalent to
-
-```none
-pnacl/scripts/llvm-test.py --testsuite-prereq --arch x86-64
-pnacl/scripts/llvm-test.py --testsuite-clean
-pnacl/scripts/llvm-test.py --testsuite-configure
-pnacl/scripts/llvm-test.py --testsuite-run --arch x86-64
-pnacl/scripts/llvm-test.py --testsuite-report --arch x86-64
-```
-
-The test suite needs to be cleaned and re-configured each time you switch
-architectures, but the results files persist after cleaning, so testsuite-report
-will give the result from the last run for that architecture. Because there is
-no good way to filter the set of tests that are actually run and there are a lot
-of known failures (e.g. tests that have not been ported to use newlib), this
-test suite takes a long time to run.
-
-You need to set LD_LIBRARY_PATH before running the test suite, otherwise the
-native build of each test, whose output the PNaCl build is validated against,
-will fail to run. It's also helpful to set PNACL_CONCURRENCY.
-
-```none
-LD_LIBRARY_PATH=$NACL_DIR/native_client/toolchain/linux_x86/pnacl_newlib/lib PNACL_CONCURRENCY=12 pnacl/scripts/llvm-test.py --testsuite-all --arch x86-64
-```
-
-### Spec2k
-
-If you have access to the spec2k benchmark suite you can use the harness in
-tests/spec2k/ to run some more extensive tests.
-
-If SPEC_DIR is the directory containing the benchmark code/data, run:
-
-```none
-pnacl/test.sh test-spec <SPEC_DIR> SetupPnaclX8664Opt
-```
-
-test.sh is a convenience script and clobbers old results, etc. The actual steps
-are:
-
-```none
-pushd tests/spec2k
-./run_all.sh CleanBenchmarks
-./run_all.sh PopulateFromSpecHarness <SPEC_DIR>
-./run_all.sh TimedBuildAndRunBenchmarks SETUP
-popd
-```
-
-where SETUP is for example "SetupPnaclArmOpt". See "run_all.sh" for a full list
-of setups.
-
-### Subzero standalone tests
-
-These tests depend on having built PNaCl's branch of LLVM from source (uses some
-of the headers, etc.). See "checking out PNaCl sources, building and testing"
-below.
-
-In general look at the Makefile.standalone file for various targets and options.
-E.g., you can compile with DEBUG=1 while debugging, so that variables aren't
-optimized-out and functions aren't so inlined, etc.
-
-```none
-cd toolchain_build/src/subzero
-make -j32 -f Makefile.standalone check
-```
-
-## Toolchain Development
-
-### TL;DR for checking out PNaCl sources, building and testing
-
-If you are using Chromium's build of clang to build PNaCl (the default) and you
-have never done so, you need to install it.
-
-From the native_client/ directory:
-
-```none
-../tools/clang/scripts/update.py
-```
-
-From now on, when you run 'gclient sync' clang will also be updated if needed.
-
-Now you can build the PNaCl toolchain:
-
-```none
-toolchain_build/toolchain_build_pnacl.py --verbose --sync --clobber --install toolchain/linux_x86/pnacl_newlib_raw
-rm -rf toolchain/linux_x86/pnacl_newlib
-ln -s pnacl_newlib_raw toolchain/linux_x86/pnacl_newlib
-# syncs the sources and builds the developer toolchain
-# Add the --build-sbtc flag to also build the sandboxed translator
-```
-
-If everything built correctly, run the scons tests as described above.
-
-### Important Scripts
-
-Most tasks related to the toolchains are focused a few scripts.
-
-* the driver scripts in the directory: `pnacl/driver/`
-* the toolchain builder and helper script:
- `toolchain_build/toolchain_build_pnacl.py`
-* the old toolchain build script, still used for the sandboxed
- translator: pnacl/build.sh
-
-#### toolchain_build/toolchain_build_pnacl.py
-
-This script checks out and builds the complete PNaCl toolchain. Run with the -h
-flag for a full list of flags and build targets. Here are the most important
-flags:
-
-```none
-optional arguments:
---build-sbtc          Build the sandboxed translators
-...
-Usage: toolchain_build_pnacl.py [options] [targets...]
-...
-Options:
-  -h, --help            show this help message and exit
-  -v, --verbose         Produce more output.
-  -c, --clobber         Clobber working directories before building.
-  -y, --sync            Run source target commands [i.e. sync the targets' sources before building them]
-  -i, --ignore-dependencies
-                        Ignore target dependencies and build only the
-                        specified target.
-  --install=INSTALL     After building, copy contents of build packages to the
-                        specified directory
-```
-
-#### Sandboxed translator build
-
-The build.sh script is now only used to build the sandboxed translator. It has 2
-relevant arguments:
-
-* **translator-all**: builds the sandboxed translator nexes (not
- included in 'build-all' or 'all')
-* **clean**: cleans the build files
-
-However, it is called from toolchain_build_pnacl.py for the bots, and it expects
-to use the toolchain built by the translator_compiler target of
-toolchain_build_pnacl.py. Use the --build-sbtc flag of toolchain_build_pnacl.py
-and build everything (or just the sandboxed_translators target and its
-dependencies) for that.
-
-#### pnacl/test.sh
-
-> This script runs toolchain tests. It deletes old testing artifacts before
-> running. The main invocation is test-all.
-
-#### pnacl/driver/\*
-
-> This directory contains the compiler drivers, which are in Python. If you
-> change them, run e.g. "toolchain_build/toolchain_build_pnacl.py --install
-> toolchain/linux_x86/pnacl_newlib driver_i686_linux" to install them.
-
-Git Repositories
-
-Most of the code required to build the PNaCl toolchain lives in git repositories
-hosted on chromium.googlesource.com. The build.sh script will automatically
-check out and update these repositories. The checked-out code is placed in
-toolchain_build/src.
-
-Relevant Directories
-
-<table>
-<tr>
-<td> toolchain_build/src</td>
-<td> holds all the git checkouts managed by toolchain_build_pnacl.py</td>
-</tr>
-<tr>
-<td> toolchain/${os}_x86/pnacl_newlib</td>
-<td> root of PNaCl toolchain installed by package_version.py</td>
-</tr>
-<tr>
-<td> toolchain_build/out </td>
-<td> holds build directories for the pnacl toolchain</td>
-</tr>
-<tr>
-<td> toolchain_build/out/toolchain_build.log </td>
-<td> holds the logs of the builds</td>
-</tr>
-</table>
-
-## Process for making changes to the PNaCl toolchain
-
-If you've made changes to PNaCl toolchain, either to the driver or git
-repositories, you can rebuild PNaCl by doing:
-
-```none
-toolchain_build/toolchain_build_pnacl.py -v --install toolchain/linux_x86/pnacl_newlib_raw     # Incrementally build and reinstall
-pnacl/test.sh test-all      # Run the scons tests
-```
-
-## How to send out reviews for git repos
-
-To send out reviews for the git repos, you must have [depot
-tools](/developers/how-tos/install-depot-tools). Code reviews are sent using the
-git cl script in depot_tools.
-
-**If you are going to commit**, you will need to have a credential in your
-`~/.netrc` file:
-
-1. Go to <https://chromium.googlesource.com/new-password>
-2. Login with your @chromium.org account.
-3. Follow the instructions in the "Staying Authenticated" section.
-
-The first time you set up code review you'll need to let `git cl` do some setup:
-
-**```none
-cd toolchain_build/src/llvm
-git cl config
-```**
-
-Just press Enter at the prompts.
-
-To do local development, create a new branch:
-
-**```none
-git checkout -b mybranch origin/master
-```**
-
-**The last argument to git checkout (the start point) is important because if
-your local branch does not track the remote master branch, then `git cl land`
-will not work)**
-
-Edit your code, and commit as many times as you want:
-
-**```none
-git commit -a -m “comment describing changes”
-```**
-
-**Then use git-cl to upload to the code review site:**
-
-**```none
-git cl upload
-```**
-
-You'll need to authenticate to codereview.chromium.org also. Most likely this
-will be your ldap email. This will upload the review, and give you an issue
-number, e.g. http://codereview.chromium.org/1557002. Go to the issue webpage,
-and edit the change summary, add reviewers, then hit send mail. Command line
-options from gcl such as reviewers ("-r") and send mail ("--send_mail") are also
-available with git cl.
-
-Git cl associates each branch with a review issue ID. So you if you `git cl
-upload` again from the same branch, it will upload a new patch set to the same
-issue.
-
-When you get the LGTM, you can push the changes.
-
-```none
-git cl land
-```
-
-If there have been changes on the master branch since you forked your local
-branch, git cl may complain, in which case you should rebase it against the new
-HEAD before you push:
-
-```none
-git fetch origin
-git rebase origin/master
-```
-
-#### Update stable revisions in the pnacl COMPONENT_REVISIONS, test, review and submit
-
-At this point the official **toolchain builder** is still not incorporating your
-changes as it builds off of specific commit IDs in the external repo.
-
-To fix this modify **native_client/pnacl/COMPONENT_REVISIONS** to point at your
-new commit ID which look like
-
-```none
-llvm=efa7b3d5c85f0242787eb091dadedc2727215df4
-```
-
-You can then make a standard native_client change list and test the CL with
-trybots (CLs affecting pnacl/ will end up selecting pnacl trybots). Upload,
-trybot, get an LGTM, then commit. You can also test locally by cleaning the
-toolchain directory, rebuilding, and testing as described earlier.
-
-Or, you can automatically update the file using a script: pnacl/deps_update.py
-
-### **Change the native client pnacl_newlib.json file, test, review and submit**
-
-**Finally, to allow users to download the new revision built by the toolchain
-builder, look in the** toolchain_revisions/pnacl_newlib.json file. The current
-revision is in a line near the end:
-
-```none
-"revision": 13392,
-```
-
-Update this to an svn revision number that is new enough to include your
-COMPONENT_REVISIONS change by running:
-
-```none
-build/package_version/package_version.py setrevision --revision-package pnacl_newlib --revision 12345
-```
-
-Now create a CL and test it with some try jobs (e.g., `git cl try my_cl_name`).
-NOTE: You will need to wait for a toolchain to be built ([see the
-waterfall](http://build.chromium.org/p/client.nacl.toolchain/waterfall)) before
-this change actually works (downloads a toolchain tarball). Also see
-build/update_pnacl_tool_revisions.py to automate this process.
-
-### Misc Notes
-
-Building Validators
-
-In the case that you want to run the native client validators on your nexes,
-build the validators like so:
-
-```none
-./scons targetplatform=arm sdl=none arm-ncval-core
-./scons platform=x86-32 sdl=none ncval
-./scons platform=x86-64 sdl=none ncval
-```
-
-The validators will be placed in scons-out/{host}-{platform}/staging/. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/experimenting-with-generated-bitcode/index.md b/chromium/docs/website/site/nativeclient/pnacl/experimenting-with-generated-bitcode/index.md
deleted file mode 100644
index 88e56d16bc3..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/experimenting-with-generated-bitcode/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: experimenting-with-generated-bitcode
-title: Experimenting with generated bitcode
----
-
-Sample code (note the `noinline` attribute - makes it simpler to locate the
-code, otherwise it will get inlined all the way into `_start`):
-
-```none
-int __attribute__((noinline)) simple_loop(int *a, int n) {
-  int sum = 0;
-  for (int i = 0; i < n; ++i) {
-    sum += a[i];
-  }
-  return sum;
-}
-int main(int argc, char** argv) {
-  return simple_loop((int*)argv[0], argc);
-}
-```
-
-Will be using the canary SDK here, so set `NACL_SDK_ROOT` to point to an install
-of the NaCl SDK` /pepper_canary` directory.
-
-Run the compiler to produce optimized bitcode:
-
-```none
-$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-clang ~/Downloads/loop.c -O2 -o loop.o2.bc
-```
-
-Note: this is LLVM bitcode:
-
-```none
-$ $NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-dis --file-type loop.o2.bc 
-loop.o2.bc: LLVM bitcode
-```
-
-We'll keep it in LLVM bitcode format, because the NaCl bitcode writer/reader
-can't handle some of the types removed by stripping. So fully finalizing (into a
-stable pexe) a non-stripped file doesn't currently work.
-
-```none
-$ $NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-dis loop.o2.bc |grep -A20 "define internal i32 @simple_loop"
-define internal i32 @simple_loop(i32 %a, i32 %n) {
-entry:
-  %cmp4 = icmp sgt i32 %n, 0
-  br i1 %cmp4, label %for.body, label %for.end
-for.body:                                         ; preds = %for.body, %entry
-  %i.06 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
-  %sum.05 = phi i32 [ %add, %for.body ], [ 0, %entry ]
-  %gep_array = mul i32 %i.06, 4
-  %gep = add i32 %a, %gep_array
-  %gep.asptr = inttoptr i32 %gep to i32*
-  %0 = load i32* %gep.asptr, align 1
-  %add = add i32 %0, %sum.05
-  %inc = add i32 %i.06, 1
-  %cmp = icmp slt i32 %inc, %n
-  br i1 %cmp, label %for.body, label %for.end
-for.end:                                          ; preds = %for.body, %entry
-  %sum.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]
-  ret i32 %sum.0.lcssa
-}
-```
-
-Finally, translate that into a .nexe in -O0 mode, asking `pnacl-translate` to
-accept LLVM bitcode explicitly (will be refused otherwise):
-
-```none
-$ $NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-translate loop.o2.bc -o loop.x64.nexe -arch x86-64 -O0 --allow-llvm-bitcode-input
-```
-
-Use `objdump` to examine the produced nexe. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/index.md b/chromium/docs/website/site/nativeclient/pnacl/index.md
deleted file mode 100644
index d986601ed28..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: pnacl
-title: PNaCl
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/pnacl/introduction-to-portable-native-client/index.md b/chromium/docs/website/site/nativeclient/pnacl/introduction-to-portable-native-client/index.md
deleted file mode 100644
index 17f1965b561..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/introduction-to-portable-native-client/index.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: introduction-to-portable-native-client
-title: Introduction to Portable Native Client
----
-
-## Public Documentation
-
-If you want to build a PNaCl application for Chrome, start with the [Native
-Client developer documentation](https://developers.google.com/native-client/)
-
-## Introduction
-
-Native Client ([NaCl](https://developers.google.com/native-client/overview)) is
-a secure sandbox for running untrusted native machine code in the Chrome
-browser. NaCl programs have special restrictions on the generated code, which
-are implemented by the compiler toolchain and statically verified at runtime by
-the trusted NaCl loader. Chrome apps can embed NaCl modules into their pages,
-which can perform computations and interact with the embedding page and the
-system (e.g. to communicate with Javascript or render with OpenGL) via an API
-called Pepper. Portable Native Client (PNaCl) defines a low-level stable
-portable intermediate representation (based on the IR used by the open-source
-LLVM compiler project) which is used as the wire format instead of x86 or ARM
-machine code. PNaCl consists of a developer toolchain, a specification of the
-stable portable IR format (along with compiler passes to transform ordinary LLVM
-IR to the stable form), and a browser component (itself implemented as as NaCl
-module) which translates the IR into x86-32, x86-64, or ARM machine code.
-
-The developer toolchain compiles C and C++ applications to a subset of LLVM
-bitcode.
-
-These bitcode files (known as "portable executables", or "pexe" files) represent
-an Native Client application
-
-in a high-level format, which can be translated to native code for execution on
-any processor supported
-
-by NaCl.
-
-The PNaCl toolchain is currently available for Windows, Mac, and Linux.
-
-PNaCl currently supports code generation on 4 architectures:
-
-* X86-32
-* X86-64
-* ARM
-* MIPS32
-
-## **How does PNaCl work?**
-
-PNaCl is a cross-compiling toolchain, where the target architecture is bitcode.
-PNaCl recognizes three types of bitcode files:
-
-> .bc - LLVM Bitcode object file. (Analogous to an ELF object file)
-
-> .a - Archive of LLVM bitcode objects. (Analogous to a static library archive)
-
-> .pexe - LLVM or PNaCl Bitcode executable. (Analogous to an executable file)
-
-PNaCl provides the standard tools:
-
-```none
-  pnacl-clang
-  pnacl-clang++
-  pnacl-finalize
-  pnacl-ld
-  pnacl-ar
-  pnacl-nm
-  pnacl-ranlib
-  pnacl-strip
-  pnacl-as
-```
-
-The pnacl-clang and pnacl-clang++ tools produce LLVM bc files. The pnacl-ld
-linker tool produces a statically linked LLVM pexe. The pnacl-finalize tool
-converts an LLVM pexe to a frozen PNaCl bitcode pexe. Chrome only runs the
-frozen PNaCl bitcode format, not the standard LLVM bitcode pexe.
-
-While chrome can load and translate a frozen pexe directly, there is an
-additional tool `pnacl-translate `for generating native code from either LLVM or
-PNaCl bitcode. That is useful for debugging (see the Debugging section below).
-
-Installing the PNaCl Toolchain and Building Examples
-
-### PNaCl is now available in the naclsdk updater (<https://developers.google.com/native-client/sdk/download>). It is available in pepper_30 and higher.
-
-1. Download the naclsdk updater, and run "naclsdk.bat update pepper_XX"
- (e.g., pepper_canary).
-2. Once downloaded, you can set your NACL_SDK_ROOT directory to
- pepper_XX.
-
- See pepper_canary/examples/ for various examples. The makefiles in each
- example directory should be configured to build pnacl pexes and generate
- manifest files for those pexes. Just set the "TOOLCHAIN" environment
- variable to be "pnacl". E.g.,
-
- "(cd pepper_canary/examples/hello_world; TOOLCHAIN=pnacl CONFIG=Release
- make)".
-
- With the PNaCl sdk, you can also try compiling some of the
- [naclports](http://code.google.com/p/naclports/) examples. Once you have set
- the NACL_SDK_ROOT environment variable to point at the pepper directory with
- pnacl installed, you can run "make" to build a naclports target by setting
- the environment variable NACL_ARCH to "pnacl". E.g., to build dosbox, run
-
- "NACL_ARCH=pnacl make dosbox".
-
- That will build the required libraries (e.g., SDL), and build dosbox as a
- pexe. Libraries will be installed directly into your SDK and the resulting
- application (pexe) will be published under out/publish/dosbox.
-
-How to Run Examples in Chrome 31+
-
-1. Check chrome://nacl to see if the PNaCl Translator is already
- installed. The ~3-4MB download and install happens in the
- background.
- 1. If not already installed, it will be installed on-demand the
- first time you start a PNaCl application. A good example
- application is the "load progress" example [included
- here](https://chrome.google.com/webstore/detail/pnacl-examples/mblemkccghnfkjignlmgngmopopifacf).
- 2. An alternative is to go to chrome://components and click "Check
- for update".
- 3. For Chrome 31, the on-demand install can sometimes still fail.
- Restart the browser and try again if that happens.
-2. Once installed, visit a webpage with a [PNaCl
- NMF](/system/errors/NodeNotFound) file that points at your pexe
- application (the SDK has a create_nmf.py tool that will help you
- create one). For example, try loading the samples here:
- <http://gonativeclient.appspot.com/demo>.
-3. NOTE: In contrast to a NaCl application, the mime type must be
- application/x-pnacl (not application/x-nacl).
-
-If you are having problems check the Chrome JavaScript console and see if there
-are any error messages.
-
-How to report bugs / feedback for PNaCl
-
-1. Go to <http://code.google.com/p/nativeclient/issues/list> and file a
- New Issue.
-2. Describe the issue.
-3. Tag the issue as Component-PNaCl, and Arch-All (or a specific Arch
- if turns out that it is arch-specific)
-
-## PNaCl Developers
-
-The section on developing PNaCl itself has moved to
-<https://www.chromium.org/nativeclient/pnacl/developing-pnacl>
diff --git a/chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/StabilityofthePNaClbitcodeABI.pdf.sha1 b/chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/StabilityofthePNaClbitcodeABI.pdf.sha1
deleted file mode 100644
index 53bd061f4cd..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/StabilityofthePNaClbitcodeABI.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2f50a70a6b0b4bdb23607ee7e4e68c3e2f338315 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/index.md b/chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/index.md
deleted file mode 100644
index 57e51e19835..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi/index.md
+++ /dev/null
@@ -1,1118 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: stability-of-the-pnacl-bitcode-abi
-title: Stability of the PNaCl bitcode ABI
----
-
-More up to date documentation is available at:
-<http://developer.chrome.com/native-client/overview>
-
-Stability of the PNaCl bitcode ABI
-
-Document version: 0.1 (June 17th, 2013)
-
-Introduction
-
-What is meant by ABI stability
-
-The scope of this document
-
-PNaCl changes not related to bitcode stability
-
-Goals
-
-Challenges for bitcode ABI stability
-
-Approaches to maintaining backwards compatibility of bitcode
-
-Approach #1: a single supported bitcode version
-
-Approach #2: evolving the stable bitcode over time, while maintaining backwards
-compatibility
-
-Approach #3: hybrid between #1 and #2
-
-Steps towards a stable bitcode ABI
-
-Stripping LLVM metadata
-
-Rewriting vararg calls
-
-Expanding constant expressions
-
-Strip fastcc-related attributes
-
-Strip system-specific function attributes
-
-Disallow inline assembly
-
-Only allow certain intrinsics and external symbols
-
-Restrict integer arguments and return values to at least i32
-
-Fixed TLS layout for PNaCl
-
-Restrict usage of structs, arrays and pointers in the stable bitcode
-
-Concrete proposal details
-
-Handling getelementptr
-
-Handling global initializers
-
-Define __{init|fini}_array_{start|end} at bitcode creation time
-
-C++ exception handling ABI
-
-Untrusted Fault Handling
-
-Memory Model, Atomics, Fences
-
-Syscalls
-
-C11/C++11
-
-Memory Ordering
-
-Volatile
-
-Undefined Behavior
-
-Specification
-
-Introduction
-
-The goal of this document is to define the PNaCl stable bitcode ABI for the
-first release of Chrome in which PNaCl is enabled for the open web. This will be
-the first release in which PNaCl starts guaranteeing ABI stability.
-
-What is meant by ABI stability
-
-ABI stability for PNaCl bitcode means the guarantee of backwards compatibility -
-described by the following scenario:
-
-1. A developer creates a PNaCl application and places it online. The application
-is a .pexe generated with the toolchain of Chrome release M.
-
-2. At some point in the future, a user wants to run the .pexe with Chrome
-release N (with N &gt;= M).
-
-3. Even though the PNaCl translator distributed with Chrome has likely changed
-between releases M and N, we guarantee that the .pexe continues working in the
-new release.
-
-Conversely, the related issue of forward compatibility is avoided by explicitly
-refusing to load newer bitcode versions in older Chrome translators, as follows:
-
-1. As before, a user generates a .pexe with Chrome release M and places it
-online.
-
-2. A user tries to run the .pexe with Chrome release K with K &lt; M. Note that
-this only happens if the user didn’t update Chrome, which is unlikely.
-
-3. The PNaCl translator reads the bitcode version from the .pexe and sees it’s a
-newer version than it supports. The translator refuses to load the .pexe and
-emits an error message.
-
-The scope of this document
-
-This document aims to define the requirement for PNaCl bitcode ABI
-compatibility, and lay out the steps we plan to undertake to reach a stable ABI.
-The goal here is not to provide a reference documentation of the ABI, but rather
-to facilitate discussion within the team and write down our collective thoughts
-on the subject.
-
-________________
-
-PNaCl changes not related to bitcode stability
-
-PNaCl also has differences from standard LLVM targets which are unrelated to
-bitcode stability. These are generally beyond the scope of this document, but to
-summarize, they fall into 2 categories: 1) those related to portability across
-architectures, and 2) those related to Native Client and its security sandboxing
-model.
-
-For example, the architecture is defined as “le32” indicating that the
-architecture is a generic little-endian machine with 32-bit pointers. The target
-triple is le32-unknown-nacl, and the compiler #defines __pnacl__ when the
-architecture is le32 and __native_client__ when the OS is NaCl. The data model
-is ILP32, which means that ints, pointers, and longs are all 32 bits wide.
-
-Additionally, clang’s ABI lowering for calling conventions is different from
-that used by hardware architectures (because they are different from each other,
-even for the same C types). There are a few additional restrictions on PNaCl
-programs such as that they may only use IEEE floating-point types.
-
-The use of Native Client to securely sandbox PNaCl code also imposes some
-restrictions on programs: however the details of the sandbox implementation are
-subject to change and should not generally be exposed to developers.
-
-________________
-
-Goals
-
-The main and obvious goal of PNaCl bitcode ABI stability is to support backwards
-compatibility of PNaCl bitcode. As the section above describes, it’s essential
-to allow existing bitcode placed online to run on newer versions of Chrome. This
-is similar to any standard-abiding web platform application (HTML+CSS+JS) that
-is expected to keep working in newer browsers.
-
-An additional goal is to define a smaller and simpler subset of the LLVM IR for
-PNaCl bitcode. A smaller and simpler subset is easier to test and validate.
-Furthermore, if an alternative fast code generator for PNaCl is ever considered,
-such a subset will be easier to implement.
-
-Initially, the goal of this document is to help deciding which subset of the
-LLVM IR will be part of the PNaCl bitcode ABI in the first public release.
-
-Challenges for bitcode ABI stability
-
-As the introduction above explains, we aim to define a stable ABI that will
-enable a “new” translator to read “old” bitcode successfully and compile it to
-native code that is validated and executed on the user’s machine. Further, we
-want to benefit from advances in LLVM technology and use progressively newer
-LLVM releases for future versions of the PNaCl translator.
-
-On the other hand, our usage of LLVM IR as the portable representation for PNaCl
-implies that we’re dealing with a changing compiler IR that doesn’t have
-stability as one of its declared goals.
-
-As a more concrete example: assuming we “freeze” the bitcode ABI on LLVM release
-3.3 (which is due sometime in June 2013), in a future PNaCl translator release
-we’ll want to use the up-to-date LLVM, say 4.0. There’s a very high probability
-that LLVM IR will change between 3.3 and 4.0 to the extent that a bitcode reader
-from LLVM 4.0 won’t be able to read IR generated by the front-end of LLVM 3.3.
-
-This incompatibility in IR between LLVM releases manifests in three ways:
-
-1. Semantic changes in IR. For example: type system rewrite in 3.0, attribute
-changes in 3.3, possible future removal of IR instructions.
-
-2. Changes in binary LLVM bitcode encoding.
-
-3. “Silent” change in bitcode usage between passes that occur before and after
-pexe creation. As PNaCl uses a newer LLVM, the pexe will have been created with
-an older version which might emit bitcode that now looks odd to newer LLVM,
-hindering optimizations or exposing bugs that do not exist in upstream LLVM
-(where the bitcode never goes out of sync).
-
-Approaches to maintaining backwards compatibility of bitcode
-
-This discussion knowingly ignores the option where we fork LLVM from some given
-version and maintain our own “stable” version of it for PNaCl. In other words,
-it’s assumed that the LLVM backend (code generation and emission) keeps evolving
-in the PNaCl translator.
-
-Approach #1: a single supported bitcode version
-
-We define a stable bitcode in the first public release of PNaCl. This is the
-bitcode that all subsequent releases will generate.
-
-Pros:
-
-1. Only a single version of the bitcode reader is required. Each version of the
-translator will have to convert this stable bitcode to its up-to-date in-memory
-representation for consumption in the backend.
-
-2. Provides forward-compatibility to some extent. Since future PNaCl front-ends
-will continue generating the stable bitcode, older translators will be able to
-read them as well.
-
-Cons:
-
-1. If future versions of LLVM add new features to the IR that we want to provide
-as part of PNaCl, we will have to backport upstream’s
-BitcodeReader/BitcodeWriter changes to PNaCl’s copy of the bitcode
-reader/writer. This might get harder if upstream’s bitcode reader/writer
-diverges.
-
-2. Requires more maintenance of the PNaCl frontend, assuming that we want to
-keep following the advances in bug fixes in Clang. Newer versions of Clang will
-generate newer IR, which we’ll have to “cut down” to the stable subset. Note
-that some changes (such as rewrites or removal of instructions) may be
-non-trivial.
-
-________________
-
-Approach #2: evolving the stable bitcode over time, while maintaining backwards
-compatibility
-
-As with approach #1, we define a stable bitcode in the first public release of
-PNaCl. However, in future releases we may change the bitcode ABI, as long as we
-ensure that newer translators can still read older bitcode formats.
-
-Pros:
-
-1. We can enjoy advances in LLVM in the future. For example, new features that
-get added to the IR and aid optimizations.
-
-2. Easier to follow upstream Clang in the PNaCl front-end. If Clang changes the
-bitcode it generates in significant ways, we can incorporate these changes into
-the new stable bitcode ABI.
-
-Cons:
-
-1. This approach requires maintaining N bitcode readers: one per supported
-bitcode version. The translator will have to recognize the bitcode version and
-apply the appropriate reader that knows how to translate that version of the
-bitcode into the new translator in-memory structures.
-
-1. We will have to maintain N readers. If LLVM’s C++ API for building in-memory
-IR changes, we will have to backport upstream changes to N bitcode readers.
-
-2. This will increase the size of the PNaCl translator.
-
-1. Forward compatibility is impossible in this approach since older translators
-won’t be able to read new .pexes. This isn’t a big issue if we assume PNaCl
-auto-updates like Chrome does. This can be mitigated with an SDK option to
-target older PNaCl versions.
-
-Approach #3: hybrid between #1 and #2
-
-Since there is currently a large unknown with regards to the changes LLVM and
-Clang may undergo in the near and far future, it may make sense to start with
-approach #1, keeping the option to switch to #2 at some point.
-
-It’s crucial that we guarantee backwards compatibility by always being able to
-read and translate the bitcode generated by the first public release of PNaCl.
-Whether we’ll allow newer versions of this bitcode to also be generated and read
-by future toolchains is an implementation detail that should be transparent to
-developers and users.
-
-________________
-
-Steps towards a stable bitcode ABI
-
-The PNaCl portable bitcode is based on LLVM IR. For the sake of defining a
-stable bitcode ABI, a number of simplifications and restrictions have to be
-applied to LLVM IR in order to synthesize a subset that can remain stable over
-time.
-
-The optimizers will generally work best if they are allowed to operate on the
-current version of the IR in its full generality; therefore the general plan is
-to run Clang and the target-independent optimizations first, and then transform
-their output into the stable subset in a final phase called ABI legalization.
-
-On the translator side, a step called “ABI verification” is performed. This
-verifies that the downloaded .pexe conforms to the PNaCl bitcode ABI. The
-verifier is the “ultimate source of truth” for what is and what isn’t part of
-the bitcode ABI. A snapshot of its current implementation is available
-online:<http://git.chromium.org/gitweb/?p=native_client/pnacl-llvm.git;a=tree;f=lib/Analysis/NaCl>
-
-The following sections describe the concrete ABI legalization steps we are
-considering. It also attempts to provide reasons in favor and against these
-transformations. An implicit argument against all transformations is the
-engineering effort required to implement and maintain them (which includes
-reviewing and testing with each LLVM merge). On the other hand, an implicit
-argument in favor of any simplification is reduced exposure to changes in the
-bitcode semantics upstream; only changes in parts of the IR that are accepted as
-stable would require using one of the backward compatibility approaches above.
-The other benefit of simpler IR is that it may allow simplification of the
-translator. This could allow the translator to be smaller and/or faster, and
-also have a reduced testing and attack surface. Even though we validate and run
-the translator itself in a NaCl sandbox, fewer supported IR features means fewer
-potentially exploitable bugs that may break one of the security layers.
-
-Note: regarding Challenges for bitcode ABI stability, this section will focus on
-the semantic aspects of LLVM IR, ignoring the issue of binary encoding.
-
-________________
-
-Stripping LLVM metadata
-
-Description: LLVM metadata describes constructs like debug information and
-optimization hints (for example TBAA and branch weights). By design, metadata is
-inherently unstable and has undergone considerable semantic and structural
-changes in the past. Metadata should be stripped from .pexes and not be part of
-the stable ABI.
-
-Note: we may consider adding back specific kinds of metadata in the future in
-order to support some forms of debug information (especially to reconstruct
-stack traces to give developers better user crash dumps) and/or aid certain
-optimizations.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3348>
-
-Pros:
-
-1. The inherent instability of metadata makes it a very improbable candidate for
-inclusion into the stable ABI.
-
-2. Reduction of .pexe size.
-
-3. Reduction of the test surface of the translator - we can avoid testing its
-handling of metadata.
-
-Cons:
-
-1. For debug metadata, this forces a slightly more complex flow of development.
-We want debug metadata to be stripped from .pexes by default, even if the
-developer initially compiled his C/C++ code with -g.
-
-2. For optimization hints, this may cause the translator to miss some
-optimizations. This is, however, questionable: IR-level optimizations are done
-before the .pexe is generated, and in practice we didn’t observe difference in
-the translation result with and without TBAA metadata.
-
-3. No stack traces on crash.
-
-4. Developer-side incompatibilities are still a problem (may need to do clean
-rebuilds after toolchain switch, and there is no clear error message when there
-are incompatibilities).
-
-________________
-
-Rewriting vararg calls
-
-Description: Functions that accept variable arguments and calls to them should
-be replaced with a scheme where the arguments are explicitly packed in a buffer
-(allocated by the caller). A pointer to this buffer will be passed into the
-function instead of the variable argument list. va_\* instructions and
-intrinsics within the function will be rewritten to read the arguments from the
-explicit buffer.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3338>
-
-Pros:
-
-1. vararg calls are tricky to implement and aren’t fully supported by the LLVM
-backend for all architectures.
-
-2. This transformation simplifies the ABI while being safe because there are no
-vararg calls from PNaCl bitcode to native code.
-
-3. This could provide some performance improvements:
-
-1. “opt” can sometimes better optimise explicit buffer-passing than varargs
-calls.
-
-2. On x86-64, a varargs function no longer has to spill all arguments to the
-stack.
-
-Cons:
-
-1. Produced bitcode will be larger due to the explicit argument packing and
-unpacking. However, the effect isn’t likely to be large due to the low number of
-vararg functions and calls in typical code.
-
-2. Calling a varargs function without it being declared with a C function
-prototype will produce code that doesn’t work.
-
-________________
-
-Expanding constant expressions
-
-Description: LLVM supports the concept of constant expressions (expressions
-involving other constants) that can be used as arguments to instructions.
-Constant expressions should be expanded to an explicit sequence of equivalent
-LLVM instructions.
-
-For handling of constexprs in the context of global initializers, see Restrict
-usage of structs, arrays and pointers in the stable bitcode.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3337>
-
-Pros:
-
-1. Simplifies the bitcode.
-
-1. Each LLVM instruction will represent a small unit of computation, rather than
-the arbitrarily many computations that are introduced by nested constant
-expressions.
-
-Cons:
-
-1. Increased bitcode size. Initial measurements show that this change has
-slightly increased the size of gzipped bitcode. See the issue for more details.
-
-2. Impact on performance: we haven’t noticed a measurable impact on performance.
-
-________________
-
-Strip fastcc-related attributes
-
-Description: the fastcc calling convention in LLVM is target-dependent, devised
-to speed up internal function calls by passing arguments in registers even on
-architectures where the standard calling convention does not do so (e.g. 32-bit
-x86). Calling convention specifications (and a related inreg parameter
-attribute) should be stripped from the bitcode.
-
-Instead, we can mark all compatible internal functions fastcc explicitly in the
-translator for x86-32.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=2346>
-
-Pros:
-
-1. We don’t gain from having this hint applied in the front-end. We can simplify
-the ABI by not supporting it, and instead mark the calling convention internally
-for architectures where it makes sense (x86-32 in this case).
-
-Strip system-specific function attributes
-
-Description: strip some system-specific function attributes, like naked and
-alignstack.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3415>
-
-Pros:
-
-1. Such attributes don’t make sense in a stable platform-independent ABI.
-
-Disallow inline assembly
-
-Description: Since inline assembly is inherently non-portable, we should reject
-bitcode with inline assembly in it. It will not be part of the stable ABI.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3126>,
-<https://code.google.com/p/nativeclient/issues/detail?id=2345>
-
-Pros:
-
-1. Inline assembly is non-portable.
-
-Cons:
-
-1. No inline assembly, even if the original code has preprocessor macros for
-many target platforms.
-
-Only allow certain intrinsics and external symbols
-
-Description: Only intrinsic functions that are known to exist (and correctly
-implemented by the backend) across all platforms should be callable from
-bitcode. Also, only external symbols that we know are provided by the NaCl
-runtime should be allowed.
-
-Initial allowed list of intrinsics:
-
-1. [llvm.nacl.read.tp](http://llvm.nacl.read.tp/) for thread pointer.
-
-2. llvm.memcpy.\*.\*, llvm.memset.\*.\*, llvm.memmove.\*.\* (but need an
-implementation for it and need to stop exporting them).
-
-3. llvm.trap
-
-4. llvm.bswap.{i16,i32,i64}
-
-5. llvm.sqrt.{f32,f64} (errno checking done by library, domain assumed good).
-
-Initial allowed list of external symbols:
-
-1. _start
-
-2. setjmp, longjmp. Will use specially named intrinsics that get translated to
-native implementations by the translator.
-
-3. __sync_\* for atomics. This is still being experimented with, see Memory
-Model, Atomics, Fences. The main issue is that not all platforms necessarily
-provide atomic versions of all of these, but in practice they may all be lowered
-into single instructions by specific backends.
-
-Intrinsics disallowed:
-
-1. llvm.eh.\*
-
-2. llvm.vacopy, llvm.vaend, llvm.vastart
-
-3. llvm.returnaddress, llvm.frameaddress
-
-1. Transcendentals: llvm.sin.\*, llvm.cos.\*, llvm.log\*, llvm.exp\*, llvm.pow\*
-
-1. Disallow for now, and rely on consistent library implementation. Explore
-later with fast-math flags.
-
-1. llvm.flt.rounds: Disallow for now and expand to “1”. Enable in the future
-after adding an llvm.flt.set.rounds intrinsic.
-
-2. llvm.expect: Disallow for now. Have frontend normalize these to branch weight
-metadata. Optimize the IR using branch weight metadata, then strip the metadata.
-
-3. Many others.
-
-Intrinsics, which seem harmless TBD:
-
-1. Other gcc __builtin_\* intrinsics:
-
-1. llvm.prefetch
-
-2. llvm.ctlz.i32, llvm.cttz.i32, llvm.ctpop.i32
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3378>
-
-Pros:
-
-1. For a stable ABI it’s important to define exactly what external symbols are
-allowed to appear in the bitcode. These symbols will have to be provided by
-future releases of the runtime, or lowered in the translator; therefore, they
-must be carefully restricted.
-
-2. This allows us to strictly provide only those intrinsics that are supported
-in a cross-platform way by the translator.
-
-Restrict bitcode integer and floating-point types
-
-Description: Restrict the bitcode integer types supported by the stable ABI to
-i1, i8, i16, i32 and i64. Also, restrict the floating-point types to f32, f64.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3360>
-
-Pros:
-
-1. Simplifies the scope of bitcode ABI. Since our current aim is for C and C++
-on mainstream 32 or 64-bit CPUs, these sizes seem to be sufficient.
-
-2. Can have a positive effect on translation time. For the CPUs we target, type
-legalization that runs during instruction selection would have to reduce types
-to the ones mentioned above anyway.
-
-Cons:
-
-1. Produced code may be potentially slower due to missing an optimization.
-However, this is questionable since we haven’t yet seen an example of it
-happening.
-
-Restrict integer arguments and return values to at least i32
-
-Description: LLVM currently allows function return types such as zeroext i8 and
-signext i8. This complicates the language the PNaCl translator has to handle. We
-should expand such arguments and return values to always be i32, and handle the
-sign/zero extensions explicitly in IR code.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3342>
-
-Pros:
-
-1. Simplifies the scope of bitcode ABI.
-
-2. Removes potential non-portable behaviour, to prevent a pexe from accidentally
-behaving differently on x86-32 and x86-64 (for example).
-
-________________
-
-Fixed TLS layout for PNaCl
-
-Description: Currently, TLS variables are part of the bitcode ABI. The backend
-computes the actual layout of TLS variables, which is target dependent. We can
-compute the TLS layout in advance and encode it in the bitcode. This will leave
-only the intrinsic that obtains the thread pointer in the ABI.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=2837>
-
-Pros:
-
-1. Simplifies the ABI.
-
-2. Avoids a target dependency and thus simplifies the user threading library
-(removing the need to support multiple TLS variable layouts).
-
-3. Removes the need for an ELF linker to allocate TLS variable layout.
-
-4. Allows the code generator to use shorter instruction sequences for accessing
-thread-local variables, because thread pointer offsets are known at code gen
-time.
-
-Cons:
-
-1. Limits interoperability with TLS-using native code that’s not built with
-PNaCl, but this is currently out of scope.
-
-________________
-
-Restrict usage of structs, arrays and pointers in the stable bitcode
-
-Description: Struct types add expressiveness to LLVM IR and aid in compiling
-from C/C++, but play no important role in code generation (after all the
-mid-level IR passes have run). Since structs can be arbitrarily nested and
-complex, removing them from the stable bitcode ABI can help simplify it. Similar
-simplification can be applied to other derived types like arrays and pointers.
-This also allows to remove the getelementptr instruction from the stable
-bitcode.
-
-Issues:
-
-1. <https://code.google.com/p/nativeclient/issues/detail?id=3343>
-
-2. <https://code.google.com/p/nativeclient/issues/detail?id=3113> (handling of
-global initializers)
-
-Concrete proposal details
-
-Struct types and arrays are removed from the stable bitcode ABI. They will
-instead be represented by pointers. Structs in registers and usages of
-extractvalue/insertvalue will be expanded to be alloca’d instead, and can then
-be replaced by pointers. Efficient copies of structs can be replaced by
-llvm.memcpy calls.
-
-Pointers are replaced by i32 (valid for PNaCl which explicitly sets pointer size
-to 32 bits in the ABI). Some restricted uses of pointers will be allowed in
-order to preserve existing semantics of LLVM instructions. For example:
-
-1. alloca instructions return pointers
-
-2. load and store instructions require pointers
-
-3. llvm.memcpy intrinsics require pointers
-
-The ptrtoint and inttoptr instructions will be employed at conversion points to
-bridge between addresses contained in i32 values and pointers for the
-instructions/intrinsics listed above.
-
-Handling getelementptr
-
-getelementptr will be expanded to a sequence of equivalent arithmetic
-instructions acting on i32 instead of pointers. getelementptr is a complex
-instruction and it’s worthwhile excluding it from the stable bitcode ABI.
-
-Note: some measurements indicate that programs compiled with fast isel on x86-64
-have performance regressions after GEP removal. This is in accordance to
-expectations, since fast isel has a special optimization for folding GEPs into
-addressing modes.
-
-Handling global initializers
-
-A problem with removing the derived types like structs and arrays is handling
-global initializers, which can’t be easily expanded into code.
-
-For example, this C code:
-
-struct S {
-
-struct Pair {
-
-char c1;
-
-char c2;
-
-} p;
-
-int \*ptr;
-
-};
-
-extern int global;
-
-struct S x\[\] = { { { 1, 2, }, &global },
-
-{ { 3, 4, }, &global + 1 } };
-
-In LLVM this currently gets represented as:
-
-@x = global \[2 x %struct.S\]
-
-\[%struct.S { %struct.Pair { i8 1, i8 2 }, i32\* @global },
-
-%struct.S { %struct.Pair { i8 3, i8 4 },
-
-i32\* getelementptr (i32\* @global, i64 1) }\], align 16
-
-There are two problems here:
-
-1. We want to get rid of arbitrarily nested derived types like struct.S
-
-2. The reference to global within the initializer of x requires a non-trivial
-constant expression, which we’re also interested in expanding out
-
-The currently leading proposal is to get rid of such initializers in the stable
-bitcode (wire format) while still using a restricted form of structures and
-pointers in the bitcode reader and writer in order to keep inter-operating with
-the existing LLVM backend facilities.
-
-In the bitcode the above initializer will be encoded as two arrays:
-
-1. An array of bytes
-
-2. An array of 32-bit “relocations” to globals; a relocation is a pair
-(offest_into_bytearray, global_var).
-
-For the example above, this is:
-
-Byte array:
-
-\[1, 2, 0, 0, // c1, c2, padding
-
-0, 0, 0, 0, // addend 0: @global's address will be added
-
-3, 4, 0, 0, // c1, c2, padding
-
-4, 0, 0, 0\] // addend 4: @global's address with be added
-
-Relocations:
-
-\[(4, @global),
-
-(12, @global)\]
-
-The LLVM IR that will be produced by bitcode reader for this encoded data is:
-
-%flattened_data = type &lt;{ \[4 x i8\], i32, \[4 x i8\], i32 }&gt;
-
-@x_flattened_as_struct = global %flattened_data &lt;{
-
-\[4 x i8\] c"\\01\\02\\00\\00",
-
-i32 ptrtoint (i32\* @global to i32),
-
-\[4 x i8\] c"\\03\\04\\00\\00",
-
-i32 add (i32 ptrtoint (i32\* @global to i32), i32 4)
-
-}&gt;
-
-This re-introduces structs and a restricted usage of constant expressions into
-LLVM IR, but we are not concerned about IR inside the backend. The goal is to
-not have these constructs “on the wire”.
-
-For producing such initializers, the PNaCl front-end will include a pass that
-rewrites global initializers into the “flattened” form shown above, and the
-bitcode writer will translate it to the byte array + relocations form.
-
-________________
-
-Define __{init|fini}_array_{start|end} at bitcode creation time
-
-Description: LLVM defines the special global variables llvm.global_ctors and
-llvm.global_dtors to list global constructors and destructors. On the binary
-executable level, the special symbols __init_array_start/end and
-__fini_array_start/end are expected instead by the runtime. We should convert
-the former to the latter during linking instead of in the translator, so that
-the special globals variables don’t make it part of the ABI.
-
-Issue: <https://code.google.com/p/nativeclient/issues/detail?id=3018>
-
-Pros:
-
-1. Smaller scope of stable bitcode ABI.
-
-2. It is an obstacle to removing the translator's use of the binutils linker
-(ld).
-
-________________
-
-C++ exception handling ABI
-
-Not supported in first release. We’ll require code compiled with
--fno-exceptions. ABI checker makes sure that landingpad and invoke instructions
-are not being used in the bitcode.
-
-This issue tracks disallowing invoke/landingpad:
-
-<https://code.google.com/p/nativeclient/issues/detail?id=3377>
-
-Issues for adding exception handling in a later release:
-
-<https://code.google.com/p/nativeclient/issues/detail?id=3118>
-
-<https://code.google.com/p/nativeclient/issues/detail?id=2798>
-
-Untrusted Fault Handling
-
-Not supported in first release.
-
-________________
-
-Memory Model, Atomics, Fences
-
-Syscalls
-
-One option for atomic and fences is to expose all primitives through NaCl
-syscalls. The below solution can still generate code that goes through syscalls
-if needed, but is cleaner in that it doesn’t expose this implementation detail
-in the pexe. Simply using syscalls also doesn’t specify a memory model for
-pexes.
-
-C11/C++11
-
-We can reuse a subset of the C11/C++11 memory model, atomics and fences, as
-represented in LLVM’s IR. Our goal is for PNaCl to provide a portable memory
-model and atomic operations for a single program and its threads. This implies
-that we don’t need to support device memory or cross-program communications
-through these primitives. In the future, supporting other languages or
-architectures where either C++’s or LLVM’s representation are insufficient may
-involve adding more intrinsics or external functions to what we expose.
-
-One point to note is that C++11 also defines limited threads, if we use its
-memory model and atomics then we should also allow users to use its thread
-library. There will be some work in supporting the latest runtime libraries to
-make this happen. For now we expose pthreads, but a future release will support
-full C11/C++11 runtime.
-
-<http://clang.llvm.org/docs/LanguageExtensions.html#c11-atomic-builtins>
-
-<http://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary>
-
-LLVM and GCC also support instructions that aren’t strictly in the standard
-(nand, min, max, ...) as well as sizes which PNaCl doesn’t support (128-bit
-integral values). We’ll avoid supporting these for the first release: the
-representation we choose for C11/C++11 primitives is likely to evolve portably
-with LLVM releases, but non-standard features may not be as forward-compatible.
-
-Memory Ordering
-
-C11/C++11 offer 6 different memory orderings, and it’s unclear if LLVM’s
-implementation is correct for all backends of interest, and if user code will
-exhibit portable behavior (e.g. it may work on x86 but be incorrect on ARM). One
-option for a first release would be to change all orderings to sequential
-consistency in the .pexe, and consider relaxing this requirement in future
-releases. This would allow code to compile properly, leave older .pexes in a
-stable state, and allow us to broaden what’s accepted in a later release.
-
-Memory accesses which aren’t explicitly marked as atomic may be reordered,
-split, fused, or elided. They are emitted by the target machine as-if they were
-executing on a single thread, unobservable by other threads. This is a source of
-undefined behavior.
-
-Volatile
-
-The standard mandates that volatile accesses execute in program order (but are
-not fences, so other memory operations can reorder around them), are not
-necessarily atomic, and can’t be elided/fused. Everything else is very
-target-specific.
-
-The C++ standards committee had a paper about volatile, and decided to leave it
-unspecified for reasons that PNaCl doesn’t encounter:
-
-<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2016.html>
-
-For PNaCl, we can therefore let the optimizer have its way with volatiles on the
-developer’s machine, but change all volatile accesses to intrinsics/external
-functions with a specified memory ordering at .pexe creation time. This would
-isolate a .pexe from future changes in the translator. We could use relaxed
-ordering (which has stronger semantics than the standard mandates), though the
-more conservative approach may be to transform all of them to sequentially
-consistent (even stronger). This eases our support of legacy code, and combined
-with builtin fences these programs can do meaningful cross-thread communication
-without changing code.
-
-Pros:
-
-1. “Porting” to PNaCl means using C11/C++11 or the __sync_\* primitives, which
-is not wasted work. It’s therefore easier to adopt PNaCl, and a lot of existing
-code will “just work”.
-
-2. The generated code will be faster than going through NaCl mutex syscalls.
-
-3. Regular NaCl has access to these atomic instructions, PNaCl doesn’t.
-
-4. volatile in code “just works” on all target platforms.
-
-Cons:
-
-1. 64-bit atomics support may have degraded performance on some MIPS targets
-(pre-MIPS3?), compared to x86-32, x86-64 and ARMv7. This means that on some
-platforms where there is no instruction then the implementation must use a lock
-instead.
-
-2. The above restriction means that atomics may perform much slower on different
-platforms. This is really a limitation of platforms, not PNaCl, but it means
-that timing can be very different from one platform to another, leaking some of
-the platform-independent abstraction.
-
-3. Accessing the same memory location without atomics can still have potentially
-racy behavior, which is also part of the C11/C++11 standard (all such accesses
-must be through an atomic variable, anything else is undefined).
-
-4. Atomic accesses are only guaranteed to work on aligned addresses. This is as
-specified by the C11/C++11 standard, and is often a limitation of the platform
-too. We could mitigate this with tools like LLVM’s sanitizers.
-
-5. Ignores multi-program communication as well as devices. So do NaCl and
-C11/C++11.
-
-6. The “fast” variants of C++11’s atomics don’t really make sense in the context
-of PNaCl because their size must be chosen before the target platform is known.
-
-________________
-
-Undefined Behavior
-
-C and C++ undefined behavior allows efficient mapping of the source language
-onto hardware, but leads to different behavior on different platforms.
-
-PNaCl exposes undefined behavior in the following ways:
-
-1. The Clang front-end and optimizations that occur on the developer’s machine
-determine what behavior will occur, and it will be specified deterministically
-in the pexe. All targets will observe the same behavior. In some cases,
-recompiling with a newer PNaCl SDK version will either:
-
-1. Reliably emit the same behavior in the resulting pexe.
-
-2. Change the behavior that gets specified in the pexe.
-
-1. The behavior specified in the pexe relies on IR, runtime or CPU architecture
-vagaries.
-
-1. In some cases, the behavior using the same PNaCl translator version on
-different architectures will produce different behavior.
-
-2. Sometimes runtime parameters determine the behavior, e.g. memory allocation
-determines which out-of-bounds accesses crash versus returning garbage.
-
-3. In some cases, different versions of the PNaCl translator (i.e. after a
-Chrome update) will compile the code differently and cause different behavior.
-
-Specification
-
-Our goal is that a single pexe should work reliably in the same manner on all
-architectures, irrespective of runtime parameters and through Chrome updates. We
-don’t believe that this goal is fully attainable for a first release, we’ve
-therefore specified as much as we could and will continue improving the
-situation in subsequent releases.
-
-One interesting solution could be to offer good support for LLVM’s sanitizer
-tools (including UBSan) at development time, so that developers can test their
-code against undefined behavior. Shipping code would then still get good
-performance, and diverging behavior would be rare.
-
-Note that none of these issues are vulnerabilities in PNaCl and Chrome: the NaCl
-sandboxing still constrains the code through Software Fault Isolation.
-
-Well defined for PNaCl bitcode:
-
-1. Dynamic initialization order dependencies → the order is deterministic in the
-pexe.
-
-1. Bool which isn’t 0/1 → the IR instruction sequence is deterministic in the
-pexe.
-
-2. Out-of-range enum → the backing integer type and IR instruction sequence is
-deterministic in the pexe.
-
-3. Reaching end-of-value-returning-function without returning a value → reduces
-to “ret i32 undef” in IR.
-
-4. Aggressive optimizations based on type-based alias analysis → TBAA
-optimizations are done before stable bitcode is generated and their metadata is
-stripped from the pexe, behavior is therefore deterministic in the pexe.
-
-5. Operator and subexpression evaluation order in the same expression (e.g.
-function parameter passing, or pre-increment) → the order is defined in the
-pexe.
-
-6. Signed integer overflow → two’s complement integer arithmetic is assumed.
-
-7. Atomic access to a non-atomic memory location (not declared as std::atomic) →
-atomics all lower to the same compatible intrinsics or external functions, the
-behavior is therefore deterministic in the pexe.
-
-8. Integer divide by zero → always raises a fault (through hardware on x86, and
-through integer divide emulation routine or explicit checks on ARM).
-
-Will not fix:
-
-1. Null pointer/reference has behavior determined by the NaCl sandbox:
-
-1. Raises a segmentation fault in the bottom 64KiB bytes on all platforms, and
-on some sandboxes there are further non-writable pages after the initial 64KiB.
-
-2. Negative offsets aren’t handled consistently on all platforms: x86-64 and ARM
-will wrap around to the stack (because they mask the address), whereas x86-32
-will fault (because of segmentation).
-
-1. Accessing uninitialized/free’d memory (including out-of-bounds array access):
-
-1. Might cause a segmentation fault or not, depending on where memory is
-allocated and how it gets reclaimed.
-
-2. Added complexity because of the NaCl sandboxing: some of the load/stores
-might be forced back into sandbox range, or eliminated entirely if they fall out
-of the sandbox.
-
-1. Executing non-program data (jumping to an address obtained from a
-non-function pointer is undefined, can only do void(\*)() → intptr_t →
-void(\*)().
-
-1. Just-In-Time code generation is supported by NaCl, but will not be supported
-by PNaCl’s first release. It will not be possible to mark code as executable in
-the first release.
-
-2. Offering full JIT capabilities would reduce PNaCl’s ability to change the
-sandboxing model. It would also require a “jump to JIT code” syscall (to
-guarantee a calling convention), and means that JITs aren’t portable.
-
-3. PNaCl could offer “portable” JIT capabilities where the code hands PNaCl some
-form of LLVM IR, which PNaCl then JITs.
-
-1. Out-of-scope variable usage → will produce unknown data, mostly dependent on
-stack and memory allocation.
-
-2. Data races: any two operations that conflict (target overlapping memory), at
-least one of which is a store or atomic read-modify-write, and at least one of
-which is not atomic → this will be very dependent on processor and execution
-sequence.
-
-Potentially can fix:
-
-1. Shift by greater-than-or-equal to left-hand-side’s bit-width or negative.
-
-1. Some of the behavior will be specified in the pexe depending on constant
-propagation and integer type of variables.
-
-2. There is still some architecture specific behavior.
-
-3. PNaCl could force-mask the right-hand-side to bitwidth-1, which could become
-a no-op on some architectures while ensuring all architectures behave similarly.
-Regular optimizations could also be applied, removing redundant masks.
-
-1. Using a virtual pointer of the wrong type, or of an unallocated object.
-
-1. Will produce wrong results which will depend on what data is treated as a
-vftable.
-
-2. We could add runtime checks for this, and elide them when types are provably
-correct.
-
-1. Some unaligned load/store (also, see atomics above) → could force everything
-to align 1, performance cost should be measured. The frontend could also be more
-pessimistic when it sees dubious casts.
-
-2. Reaching “unreachable” code.
-
-1. LLVM provides an IR instruction called “unreachable” whose effect will be
-undefined. We could change this to always trap, as the llvm.trap intrinsic does.
-
-1. Zero or negative-sized variable-length array (and alloca) → can insert checks
-with -fsanitize=vla-bound.
-
-Floating point \[Unsorted, will not all be resolved for first launch\]:
-
-1. Partial IEEE754 implementation:
-
-1. Float cast overflow.
-
-2. Float divide by zero.
-
-3. Different rounding modes.
-
-1. Could support switching modes (the 4 modes exposed by C99 FLT_ROUNDS macros).
-
-1. Default denormal behavior → we could mandate flush-to-zero, and give an API
-to enable denormals in a future release.
-
-2. Fast-math optimizations:
-
-1. We’ll strip fast-math from the pexe for now, but could enable it at a later
-date, potentially at a perf-function granularity.
-
-2. Flush-to-zero → on or off by default? Provide an API?
-
-3. Canonical NaN, if any → probably hard to guarantee.
-
-4. Ignore NaN to commute operands → only valid with fast-math.
-
-5. NaN signaling → fault.
-
-6. Passing NaNs to STL functions (the math is defined, but the function
-implementation isn’t, e.g. std::min/std::max) → will be well-defined in the
-pexe.
-
-7. Fused-multiply-add have higher precision and often execute faster → we could
-disallow them in the pexe, and only generate them in the backend if fast-math
-was specified.
-
-8. Transcendentals → we could ship with emulation routines whose behavior is
-well-known, and use the hardware if fast-math is provided. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/pnacl/subzero/index.md b/chromium/docs/website/site/nativeclient/pnacl/subzero/index.md
deleted file mode 100644
index 48e3d251098..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/subzero/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-page_name: subzero
-title: Subzero
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/pnacl/subzero/simple-loop-example/index.md b/chromium/docs/website/site/nativeclient/pnacl/subzero/simple-loop-example/index.md
deleted file mode 100644
index 1822bfc5e55..00000000000
--- a/chromium/docs/website/site/nativeclient/pnacl/subzero/simple-loop-example/index.md
+++ /dev/null
@@ -1,373 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/pnacl
- - PNaCl
-- - /nativeclient/pnacl/subzero
- - Subzero
-page_name: simple-loop-example
-title: Simple loop example
----
-
-Here we show the steps that Subzero takes in translating a simple loop example.
-
-For translating this example to native code, we assume a fairly constrained
-platform: x86-32 with only 3 registers (eax, ecx, edx) available for local
-register allocation, and no global register allocation.
-
-Start with the following C example, which computes the reduction of an integer
-array.
-
-```none
-int simple_loop(int *a, int n) {
-  int sum = 0;
-  for (int i = 0; i < n; ++i) {
-    sum += a[i];
-  }
-  return sum;
-}
-```
-
-The corresponding PNaCl bitcode after compiling with `pnacl-clang -O2` is the
-following:
-
-```none
-define internal i32 @simple_loop(i32 %a, i32 %n) {
-entry:
-  %cmp4 = icmp sgt i32 %n, 0
-  br i1 %cmp4, label %for.body, label %for.end
-for.body:                                         ; preds = %for.body, %entry
-  %i.06 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
-  %sum.05 = phi i32 [ %add, %for.body ], [ 0, %entry ]
-  %gep_array = mul i32 %i.06, 4
-  %gep = add i32 %a, %gep_array
-  %gep.asptr = inttoptr i32 %gep to i32*
-  %0 = load i32* %gep.asptr, align 1
-  %add = add i32 %0, %sum.05
-  %inc = add i32 %i.06, 1
-  %cmp = icmp slt i32 %inc, %n
-  br i1 %cmp, label %for.body, label %for.end
-for.end:                                          ; preds = %for.body, %entry
-  %sum.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]
-  ret i32 %sum.0.lcssa
-}
-```
-
-Generate high-level Vanilla ICE, including lowering phi instructions. Where
-possible, v_\*_phi assignments are pushed up to just past their last use in the
-basic block, and past a compare/branch that ends the basic block.
-
-```none
-simple_loop(v_a, v_n):
-l_entry:
-  v_i_phi = 0
-  v_sum_phi = 0
-  v_sum2_phi = 0
-  v_c = icmp sgt v_n, 0
-  br v_c, l_body, l_end
-l_body:
-  //v_i = phi [v_inc, l_body], [0, l_entry]
-  v_i = v_i_phi
-  //v_sum = phi [v_add, l_body], [0, l_entry]
-  v_sum = v_sum_phi
-  v_t1 = mul v_i, 4
-  v_t2 = add v_a, v_t1
-  v_elt = load v_t2
-  v_add = add v_elt, v_sum
-  v_sum_phi = v_add
-  v_sum2_phi = v_add
-  v_inc = add v_i, 1
-  v_i_phi = v_inc
-  v_c2 = icmp slt v_inc, v_n
-  br v_c2, l_body, l_end
-l_end:
-  //v_sum2 = phi [0, l_entry], [v_add, l_body]
-  v_sum2 = v_sum2_phi
-  ret v_sum2
-```
-
-Liveness analysis determines which source operands in each instruction are the
-end of the operand's live range. As a bonus, it also determines the set of live
-operands at the beginning of each basic block. If liveness analysis is omitted,
-we assume all operands are live at the beginning of every basic block, and no
-operands' live ranges end in any instruction. The results are the `LIVE`
-annotations at the start of each basic block, and the `LIVEEND` annotations on
-each instruction.
-
-```none
-simple_loop(v_a, v_n):
-l_entry: // LIVE={v_a,v_n}
-  v_i_phi = 0
-  v_sum_phi = 0
-  v_sum2_phi = 0;
-  v_c = icmp sgt v_n, 0
-  br v_c, l_body, l_end // LIVEEND={v_c}
-l_body: // LIVE={v_i_phi,v_sum_phi,v_a,v_n}
-  v_i = v_i_phi              // LIVEEND={v_i_phi}
-  v_sum = v_sum_phi          // LIVEEND={v_sum_phi}
-  v_t1 = mul v_i, 4
-  v_t2 = add v_a, v_t1       // LIVEEND={v_t1}
-  v_elt = load v_t2          // LIVEEND={v_t2}
-  v_add = add v_elt, v_sum   // LIVEEND={v_elt,v_sum}
-  v_sum_phi = v_add
-  v_sum2_phi = v_add         // LIVEEND={v_add}
-  v_inc = add v_i, 1         // LIVEEND={v_i}
-  v_i_phi = v_inc
-  v_c2 = icmp slt v_inc, v_n // LIVEEND={v_inc}
-  br v_c2, l_body, l_end     // LIVEEND={v_c2}
-l_end: // LIVE={v_sum2_phi}
-  v_sum2 = v_sum2_phi // LIVEEND={v_sum2_phi}
-  ret v_sum2          // LIVEEND={v_sum2}
-```
-
-Addressing mode inference (x86 only) identifies operands that pattern-match to
-an expression suitable to the special x86 addressing modes. The results are an
-annotation on the use of the calculated address, as well as annotations on the
-uses of the core operands as the subexpressions are built up into the calculated
-address. These annotations are labeled `ADDROPT` and `ADDR`, respectively. The
-code selector makes use of the `ADDROPT` annotation, and the local register
-manager takes the `ADDR` annotations into account when assigning registers.
-
-```none
-simple_loop(v_a, v_n):
-l_entry: // LIVE={v_a,v_n}
-  v_i_phi = 0
-  v_sum_phi = 0
-  v_sum2_phi = 0
-  v_c = icmp sgt v_n, 0
-  br v_c, l_body, l_end // LIVEEND={v_c}
-l_body: // LIVE={v_i_phi, v_sum_phi, v_a, v_n}
-  v_i = v_i_phi              // LIVEEND={v_i_phi}
-  v_sum = v_sum_phi          // LIVEEND={v_sum_phi}
-  v_t1 = mul v_i, 4          // ADDR={v_i}
-  v_t2 = add v_a, v_t1       // LIVEEND={v_t1}, ADDR={v_a}
-  v_elt = load v_t2          // LIVEEND={v_t2}, ADDROPT=v_a+4*v_i+0
-  v_add = add v_elt, v_sum   // LIVEEND={v_elt, v_sum}
-  v_sum_phi = v_add
-  v_sum2_phi = v_add         // LIVEEND={v_add}
-  v_inc = add v_i, 1         // LIVEEND={v_i}
-  v_i_phi = v_inc
-  v_c2 = icmp slt v_inc, v_n // LIVEEND={v_inc}
-  br v_c2, l_body, l_end     // LIVEEND={v_c2}
-l_end: // LIVE={v_sum2_phi}
-  v_sum2 = v_sum2_phi // LIVEEND={v_sum2_phi}
-  ret v_sum2          // LIVEEND={v_sum2}
-```
-
-Instruction selection includes local register allocation, using 3 registers but
-calling them `r1`, `r2`, and `r3` so that the specific mappings to `eax`, `ecx`,
-and `edx` can be deferred. In the code below, for each instruction, we retain
-the originating Vanilla ICE instruction in a comment for clarity, and each
-low-level ICE instruction is annotated with the local register manager state.
-This state includes the LRU order (the first register listed is the next
-register to be given out), and the set of operands and constants available in
-each register. When the instruction selection code works with the local register
-manager, the selector may take advantage of operator commutativity to minimize
-the instruction expansion (see the highlighted instruction).
-
-```none
-simple_loop(v_a, v_n):
-l_entry: // LIVE={v_a,v_n}, r1={}, r2={}, r3={}
-  // v_i_phi = 0
-  mov r1, 0
-  mov v_i_phi, r1 // r2={}, r3={}, r1={0,v_i_phi}
-  // v_sum_phi = 0
-  mov r2, r1
-  mov v_sum_phi, r2 // r3={}, r1={0,v_i_phi}, r2={0,v_sum_phi}
-  // v_sum2_phi = 0
-  mov r3, r1
-  mov v_sum2_phi, r3 // r1={0,v_i_phi}, r2={0,v_sum_phi}, r3={0,v_sum2_phi}
-  cmp v_n, 0
-  ble l_end
-  br l_body
-l_body: // LIVE={v_i_phi, v_sum_phi, v_a, v_n}, r1={}, r2={}, r3={}
-  //v_i = v_i_phi // LIVEEND={v_i_phi}
-  mov r1, v_i_phi // r2={}, r3={}, r1={v_i_phi}
-  mov v_i, r1 // r2={}, r3={}, r1={v_i}
-  //v_sum = v_sum_phi // LIVEEND={v_sum_phi}
-  mov r2, v_sum_phi // r3={}, r1={v_i}, r2={v_sum_phi}
-  mov v_sum, r2 // r3={}, r1={v_i}, r2={v_sum}
-  //v_t1 = mul v_i, 4 // ADDR={v_i}
-  mov r3, r1
-  shl r3, 2
-  mov v_t1, r3 // r2={v_sum}, r3={v_t1}, r1={v_i}
-  //v_t2 = add v_a, v_t1 // LIVEEND={v_t1}, ADDR={v_a}
-  mov r2, v_a // r3={v_t1}, r1={v_i}, r2={v_a}
-  add r3, r2
-  mov v_t2, r3 // r3={v_t2}, r1={v_i}, r2={v_a}
-  //v_elt = load v_t2 // LIVEEND={v_t2}, ADDROPT=v_a+4*v_i+0
-  mov r3, [r2+4*r1]
-  mov v_elt, r3 // r1={v_i}, r2={v_a}, r3={v_elt}
-  //v_add = add v_elt, v_sum // LIVEEND={v_elt, v_sum}
-  add r3, v_sum
-  mov v_add, r3 // r1={v_i}, r2={v_a}, r3={v_add}
-  //v_sum_phi = v_add // PHI
-  mov v_sum_phi, r3 // r1={v_i}, r2={v_a}, r3={v_add,v_sum_phi}
-  //v_sum2_phi = v_add // PHI, LIVEEND={v_add}
-  mov v_sum2_phi, r3 // r1={v_i}, r2={v_a}, r3={v_add,v_sum_phi,v_sum2_phi}
-  //v_inc = add v_i, 1 // LIVEEND={v_i}
-  add r1, 1
-  mov v_inc, r1 // r2={v_a}, r3={v_add,v_sum_phi,v_sum2_phi}, r1={v_inc}
-  //v_i_phi = v_inc // PHI
-  mv v_i_phi, r1 // r2={v_a}, r3={v_add,v_sum_phi,v_sum2_phi}, r1={v_inc,v_i_phi}
-  //v_c2 = icmp slt v_inc, v_n // LIVEEND={v_inc}
-  cmp r1, v_n
-  //br v_c2, l_body, l_end // LIVEEND={v_c2}
-  blt l_body
-  br l_end
-l_end: // LIVE={v_sum2_phi}, r1={}, r2={}, r3={}
-  //v_sum2 = v_sum2_phi // LIVEEND={v_sum2_phi}
-  mov r1, v_sum2_phi
-  mov v_sum2, r1 // r1={v_sum2_phi,v_sum2}
-  //ret v_sum2 // LIVEEND={v_sum2}
-  mov eax, r1
-  ret
-```
-
-Multiblock register allocation starts by identifying register/operand candidates
-(`CAND`) for each basic block in which the operand is live on entry and is the
-first value assigned to the register in the basic block. These candidates are
-used in conjunction with physical register preferences to decide on mappings
-between `r1/r2/r3` and `eax/ecx/edx` in each basic block. For example, `mov eax,
-r1` creates a preference for `r1` to be `eax` in the last basic block, and that
-preference propagates when possible to the predecessor basic blocks. Edges may
-need to be split to add compensation code when the preferences are
-overconstrained.
-
-```none
-simple_loop(v_a, v_n):
-l_entry: // LIVE={v_a,v_n}, r1={}, r2={}, r3={}
-// CAND={}
-// REG={r3:eax, r1:ecx,r2:edx}
-  mov r1, 0
-  mov v_i_phi, r1 // r2={}, r3={}, r1={0,v_i_phi}
-  mov r2, r1
-  mov v_sum_phi, r2 // r3={}, r1={0,v_i_phi}, r2={0,v_sum_phi}
-  mov r3, r1
-  mov v_sum2_phi, r3 // r1={0,v_i_phi}, r2={0,v_sum_phi}, r3={0,v_sum2_phi}
-  cmp v_n, 0
-  ble l_end
-  br l_body
-l_body_split1:
-  mov edx, eax // mov r2:v_sum_phi, r3:v_sum_phi
-l_body: // LIVE={v_i_phi, v_sum_phi, v_a, v_n}, r1={}, r2={}, r3={}
-// CAND={v_i_phi:r1,v_sum_phi:r2}
-// REG={r3:eax, r1:ecx,r2:edx}
-  ////mov r1, v_i_phi // r2={}, r3={}, r1={v_i_phi}
-  mov v_i, r1 // r2={}, r3={}, r1={v_i}
-  ////mov r2, v_sum_phi // r3={}, r1={v_i}, r2={v_sum_phi}
-  mov v_sum, r2 // r3={}, r1={v_i}, r2={v_sum}
-  mov r3, r1
-  shl r3, 2
-  mov v_t1, r3 // r2={v_sum}, r3={v_t1}, r1={v_i}
-  mov r2, v_a // r3={v_t1}, r1={v_i}, r2={v_a}
-  add r3, r2
-  mov v_t2, r3 // r3={v_t2}, r1={v_i}, r2={v_a}
-  mov r3, [r2+4*r1]
-  mov v_elt, r3 // r1={v_i}, r2={v_a}, r3={v_elt}
-  add r3, v_sum
-  mov v_add, r3 // r1={v_i}, r2={v_a}, r3={v_add}
-  mov v_sum_phi, r3 // r1={v_i}, r2={v_a}, r3={v_add,v_sum_phi}
-  mov v_sum2_phi, r3 // r1={v_i}, r2={v_a}, r3={v_add,v_sum_phi,v_sum2_phi}
-  add r1, 1
-  mov v_inc, r1 // r2={v_a}, r3={v_add,v_sum_phi,v_sum2_phi}, r1={v_inc}
-  mov v_i_phi, r1 // r2={v_a}, r3={v_add,v_sum_phi,v_sum2_phi}, r1={v_inc,v_i_phi}
-  cmp r1, v_n
-  blt l_body_split1
-  br l_end
-l_end: // LIVE={v_sum2_phi}, r1={}, r2={}, r3={}
-// CAND={v_sum2_phi:r1}
-// REG={r1:eax, r2:ecx,r3:edx}
-  ////mov r1, v_sum2_phi
-  mov v_sum2, r1 // r1={v_sum2_phi,v_sum2}
-  mov eax, r1
-  ret
-```
-
-After physical register substitution:
-
-```none
-simple_loop(v_a, v_n):
-l_entry: // LIVE={v_a,v_n}, r1={}, r2={}, r3={}
-// CAND={}
-// REG={r3:eax, r1:ecx,r2:edx}
-  mov ecx, 0
-  mov v_i_phi, ecx // edx={}, eax={}, ecx={0,v_i_phi}
-  mov edx, ecx
-  mov v_sum_phi, edx // eax={}, ecx={0,v_i_phi}, edx={0,v_sum_phi}
-  mov eax, ecx
-  mov v_sum2_phi, eax // ecx={0,v_i_phi}, edx={0,v_sum_phi}, eax={0,v_sum2_phi}
-  cmp v_n, 0
-  ble l_end
-  br l_body
-l_body_split1:
-  mov edx, eax
-l_body: // LIVE={v_i_phi, v_sum_phi, v_a, v_n}, r1={}, r2={}, r3={}
-// CAND={v_i_phi:r1,v_sum_phi:r2}
-// REG={r3:eax, r1:ecx,r2:edx}
-  mov v_i, ecx // edx={}, eax={}, ecx={v_i}
-  mov v_sum, edx // eax={}, ecx={v_i}, edx={v_sum}
-  mov eax, ecx
-  shl eax, 2
-  mov v_t1, eax // edx={v_sum}, eax={v_t1}, ecx={v_i}
-  mov edx, v_a // eax={v_t1}, ecx={v_i}, edx={v_a}
-  add eax, edx
-  mov v_t2, eax // eax={v_t2}, ecx={v_i}, edx={v_a}
-  mov eax, [edx+4*ecx]
-  mov v_elt, eax // ecx={v_i}, edx={v_a}, eax={v_elt}
-  add eax, v_sum
-  mov v_add, eax // ecx={v_i}, edx={v_a}, eax={v_add}
-  mov v_sum_phi, eax // ecx={v_i}, edx={v_a}, eax={v_add,v_sum_phi}
-  mov v_sum2_phi, eax // ecx={v_i}, edx={v_a}, eax={v_add,v_sum_phi,v_sum2_phi}
-  add ecx, 1
-  mov v_inc, ecx // edx={v_a}, eax={v_add,v_sum_phi,v_sum2_phi}, ecx={v_inc}
-  mov v_i_phi, ecx // edx={v_a}, eax={v_add,v_sum_phi,v_sum2_phi}, ecx={v_inc,v_i_phi}
-  cmp ecx, v_n
-  blt l_body_split1
-l_end: // LIVE={v_sum2_phi}, r1={}, r2={}, r3={}
-// CAND={v_sum2_phi:r1}
-// REG={r1:eax, r2:ecx,r3:edx}
-  mov v_sum2, eax // eax={v_sum2_phi,v_sum2}
-  mov eax, eax
-  ret
-```
-
-Dead instruction elimination cleans up dead stores and no-longer-necessary
-calculations of intermediate components of addressing modes.
-
-```none
-simple_loop(v_a, v_n):
-l_entry:
-  mov ecx, 0
-  mov edx, ecx
-  mov eax, ecx
-  cmp v_n, 0
-  ble l_end
-  br l_body
-l_body_split1:
-  mov edx, eax
-l_body:
-  mov v_sum, edx
-  mov edx, v_a
-  mov eax, [edx+4*ecx]
-  add eax, v_sum
-  add ecx, 1
-  cmp ecx, v_n
-  blt l_body_split1
-l_end:
-  ret
-```
-
-In this example, there are no clear peephole optimizations available, and since
-only one stack operand is left, there is no need for local variable coalescing.
-Thus the difference between the code above and the actual code emitted would
-involve:
-
-* Frame setup in the prolog
-* Frame destruction in the epilog
-* Substituting stack frame addressing modes where generic stack
- operands appear
-* Loop alignment as desired
-* SFI sequences
-* Bundling \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart.png.sha1 b/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart.png.sha1
deleted file mode 100644
index 1db36e5af38..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-441ed27232e0ae528a69e45fd79d77ddbf2458a2 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png.sha1 b/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png.sha1
deleted file mode 100644
index 1db36e5af38..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-441ed27232e0ae528a69e45fd79d77ddbf2458a2 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/index.md b/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/index.md
deleted file mode 100644
index f091fa153b9..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/anatomy-of-a-sys/index.md
+++ /dev/null
@@ -1,161 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/reference
- - '4: Reference'
-page_name: anatomy-of-a-sys
-title: Anatomy of a Syscall
----
-
-NaCl syscalls are the interface between untrusted code and the trusted codebase.
-They are the means by which a NaCl process can execute code outside the inner
-sandbox. This is kind of a big deal, because the entire point of NaCl is to
-prevent untrusted code from getting out of the inner sandbox. Accordingly, the
-design and implementation of the syscall interface is a crucial part of the NaCl
-system.
-
-The purpose of a syscall is to transfer control from an untrusted execution
-context to a trusted one, so that the thread can execute trusted code. The
-details of this implementation vary from platform to platform, but the general
-flow is the same. This figure shows the flow of control:
-
-[<img alt="image"
-src="/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png"
-height=291
-width=320>](/nativeclient/reference/anatomy-of-a-sys/NaClSyscallFlowchart2.png)
-
-The syscall starts as a call from untrusted code to a trampoline, which is a
-tiny bit of code (less than one NaCl bundle) that resides at the bottom of the
-untrusted address space. Each syscall has its own trampoline, but all
-trampolines are identical--in fact, they're all generated by the loader from a
-simple template. The trampoline does at most two things:
-
-1. Exits the hardware sandbox (on non-SFI implementations) by restoring
- the original system value of %ds.
-2. Calls the untrusted-to-trusted context switch function
- (NaClSyscallSeg)
-
-The call to the context switch function does not return. Instead, when the
-syscall is finished, the flow of control is transferred directly back to the
-code that called the trampoline. The return address is still pushed on the stack
-as part of the call instruction, though. This value is used by the dispatcher to
-identify which trampoline initiated the syscall.
-
-### Context Switch
-
-The next step is to switch the execution context. Each thread in the NaCl
-process owns a trusted context as well as an untrusted context. Untrusted code
-cannot read the trusted stack, and trusted code can't use the untrusted stack,
-so nothing that uses the stack can run until the context switch takes place. For
-this reason, the context switch must be the first thing to run when execution
-enters trusted code, and the last thing to run before execution leaves trusted
-code.
-
-The context switch function performs the following functions:
-
-1. Read TLS to find the index in the saved context array that belongs
- to the current thread
-2. Save the current context into the untrusted context array
- (nacl_user)
-3. Load the trusted context from the trusted context array (nacl_sys)
-4. Move arguments from the untrusted stack into registers (x86-64 only)
-5. Call the syscall dispatcher function
-
-Switching between the two contexts is similar to a thread or fiber switch: the
-current register set is saved, and a new set of registers is loaded. The set of
-registers is slightly different from a traditional thread switch. The program
-counter doesn't need to be saved, but the segment registers (on non-SFI systems)
-do. The contexts themselves are saved in a location pointed to by thread local
-storage. This requires some platform-dependent work, because TLS implementations
-differ--the Windows implementation in particular is unusually complex.
-
-The x86-64 ABI expects some parameters to be loaded into registers; these
-parameters need to be moved from the untrusted context into the trusted context.
-The current implementation loads these values from the untrusted stack.
-
-The last thing the context switch function does is transfer the flow of control
-to the syscall dispatcher. This function call does not return. Instead, the
-switch back to the untrusted function is handled by a different function
-(NaClSwitch(), currently).
-
-### Dispatcher
-
-Once the context switch succeeds, the code becomes a lot more straightforward.
-The dispatcher does the following:
-
-1. Determine which syscall was called based on the address of the
- trampoline
-2. Fix ABI mismatches on the stack
-3. Look up the syscall implementation in the dispatch table
-4. Call the syscall
-5. Sandbox the return address
-6. Initiate the switch back to untrusted code
-
-The dispatcher determines which syscall was called by reading the trampoline
-return address from the untrusted stack. Since the trampolines are evenly spaced
-in memory, the return address can be used to determine the ordinal position of
-the trampoline that initiated the syscall. The ordinal position is then used as
-a lookup into a dispatch table.
-
-The context switch function also needs to ensure that the stack is laid out in
-the way that the trusted codebase expects. This can be tricky, because while the
-untrusted code is compiled with a standard unix-style toolchain, the trusted
-code is compiled with the native platform compilers and follows the native ABI.
-For example, the Windows x86-64 calling convention is very different from the
-Linux x86-64 convention. The dispatch function is responsible for fixing the
-stack to comply with the target platform's alignment and padding rules.
-
-Once the stack has been fixed, the dispatcher calls the syscall function pointer
-that it retrieved from the dispatch table. This call returns normally. The last
-thing the dispatcher does is mask the user return pointer and call the
-trusted-to-untrusted context switch function. That call does not return.
-
-Validation and Implementation
-
-Now the syscall is almost ready to execute. The last thing that needs to be done
-is to unpack the parameters and validate them. The syscall parameters are
-stored, along with other useful data, in a NaClAppThread structure which is
-passed to the syscall function. Most of the NaCl syscall implementations are
-wrapped within functions that decode and validate the parameters before calling
-the internal implementation.
-
-The wrappers also call NaClSysCommonThreadSyscallEnter() before calling the
-internal implementation, and NaClSysCommonThreadSyscallLeave() after the
-internal implementation completes. The primary responsibility of this pair of
-functions is to acquire and release a mutex that prevents concurrent access to
-the trusted codebase. This helps eliminate possible race condition exploits.
-
-Leaving the Syscall
-
-When the syscall returns, the dispatcher function sandboxes the return address
-and calls a function to switch back to untrusted code. That function
-(NaClSwitchToApp) does the following:
-
-1. Writes the user return address into the untrusted context; this will
- become the new untrusted program counter
-2. Calls the trusted-to-untrusted context switch function
-
-The trusted-to-untrusted context switch function does the following:
-
-1. Restores the untrusted context
-2. Jumps to the return address (SFI) or the springboard (non-SFI)
-
-### Springboard
-
-On SFI systems, the trusted-to-untrusted context switch returns directly to
-untrusted code. On non-SFI systems, however, one more function is needed. This
-function is the mirror image of the trampoline function that was called when the
-syscall was initiated. It also lives at the bottom of the trusted address space
-and is automatically written by the loader. To differentiate this incoming
-function from the outgoing trampoline, the incoming function is called the
-springboard.
-
-The springboard does the following:
-
-1. Loads the syscall return value into a register
-2. Restores the untrusted stack pointer and data segment register
-3. Jumps to the syscall return address
-
-Once the springboard function is finished, untrusted code continues normal
-execution. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/reference/arm-overview/index.md b/chromium/docs/website/site/nativeclient/reference/arm-overview/index.md
deleted file mode 100644
index bf1ce875bf4..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/arm-overview/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/reference
- - '4: Reference'
-page_name: arm-overview
-title: Overview of Native Client for ARM
----
-
-This page has moved to the [Native Client ARM 32-bit
-Sandbox](http://developer.chrome.com/native-client/reference/sandbox_internals/arm-32-bit-sandbox). \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/reference/external-resource-directory/index.md b/chromium/docs/website/site/nativeclient/reference/external-resource-directory/index.md
deleted file mode 100644
index 758be8ca966..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/external-resource-directory/index.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/reference
- - '4: Reference'
-page_name: external-resource-directory
-title: External Resource Directory
----
-
-This page provides a directory of useful resources related or relevant to the
-Google Native Client project. Keeping this page up-to-date is hard! If you find
-bugs or would like to suggest additions please contact
-native-client-discuss@googlegroups.com.
-
-**Open-Source Projects**
-
-These projects have active Native Client support or porting efforts.
-
-* Mono (<http://www.mono-project.com>), a cross-platform, open source
- .NET development framework.
-* naclports (<http://code.google.com/p/naclports>): A repository of
- example programs and library patches. Includes libSDL, Mesa,
- OpenSceneGraph, ImageMagick, cairo, boost, libvorbis and others.
-* NaTcl (<http://wiki.tcl.tk/28211>): A native client port of the
- popular TCL programming language.
-* OCaml: <http://code.google.com/p/nacl-ocaml/>, a compiler that
- converts Objective Caml source code in to Native Client compliant
- machine code.
-* One Laptop Per Child Sugar/GTK on Native Cilent: See
- <http://cananian.livejournal.com/tag/nativeclient>
-* Qt
- (<http://developer.qt.nokia.com/wiki/Qt_for_Google_Native_Client>).
- A port of the popular application infrastructure to Native Client.
-* Wesnoth on Native Client:
- <https://github.com/eugenis/wesnoth-nacl-build>
-* http://nacl-quake.appspot.com
-
-**Mailing Lists:**
-
-* [native-client-discuss@googlegroups.com](http://groups.google.com/group/native-client-discuss):
- General email discussions about Native Client.
-* [native-client-announce@googlegroups.com](http://groups.google.com/group/native-client-announce):
- Announcements about Native Client from Google.
-* [native-client-reviews@googlegroups.com](http://groups.google.com/group/native-client-reviews):
- Code review traffic for the [Native
- Client](http://code.google.com/p/nativeclient) and [Native Client
- SDK](http://code.google.com/p/nativeclient-sdk) projects.
-
-Other Products and Projects
-
-* The Unity Game Engine has been ported to Native Client:
- <http://unity3d.com>
-* Google Excacycle uses Native Client to run scientific research
- computing jobs in Google datacenters.
- <http://googleresearch.blogspot.com/2011/04/1-billion-core-hours-of-computational.html>
-* A (growing) collection of games that have been ported to Native
- Client: <http://nacl-gallery.appspot.com/games>
-* http://www.naclbox.com
-
-**Research Projects**
-
-This list is limited to external research projects that we know are using or
-working on Native Client. For a list of papers that cite Google Native Client
-publications see <http://scholar.google.com>. For a list of Google publications
-on Native Client see [this page](/nativeclient/reference/research-papers).
-
-* Extending Google's Native Client with Information Flow Control.
- <http://forum.stanford.edu/events/andreabittauinfo.php>
-* GoNative: Safe Execution of Native Code.
- <http://sos.cse.lehigh.edu/gonative/index.html>
-* Formal correctness proof for Native Client inner sandbox model.
- <https://github.com/pilki/FPdNaCl> (see also <http://coq.inria.fr>)
-* Lind: Secure Lightweight Cloud Computing:
- <https://seattle.cs.washington.edu/wiki/Lind> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/reference/index.md b/chromium/docs/website/site/nativeclient/reference/index.md
deleted file mode 100644
index 3e276b95972..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: reference
-title: '4: Reference'
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/reference/research-papers/index.md b/chromium/docs/website/site/nativeclient/reference/research-papers/index.md
deleted file mode 100644
index 2fc6750a037..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/research-papers/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-- - /nativeclient/reference
- - '4: Reference'
-page_name: research-papers
-title: Research Papers
----
-
-Google's Native Client engineering team has published the following papers about
-Native Client technology:
-
-* [Native Client: A Sandbox for Portable, Untrusted x86 Native
- Code](http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/pubs/archive/34913.pdf),
- Appeared in the 2009 IEEE Symposium on Security and Privacy
- (<http://oakland09.cs.virginia.edu>), May 2009
-* [Adapting Software Fault Isolation to Contemporary CPU
- Architectures](http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/pubs/archive/35649.pdf).
- Appeared in the 19th USENIX Security Symposium
- (<http://www.usenix.org/events/sec10/index.html>), August 2010;
- originally posted February 2010, revised June 2010
-* [PNaCl: Portable Native Client
- Executables](https://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRldnxneDo3ZmQ2NjI2NjFkM2EzYjFl),
- white paper, February 2010
-* [Language-Independent Sandboxing of Just-In-Time Compilation and
- Self-Modifying
- Code](http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/pubs/archive/37204.pdf),
- Appear in the 2011 Conference on Programming Language Design and
- Implementation (<http://pldi11.cs.utah.edu>) June 2011. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/reference/research-papers/pnacl.pdf.sha1 b/chromium/docs/website/site/nativeclient/reference/research-papers/pnacl.pdf.sha1
deleted file mode 100644
index 085b6faf135..00000000000
--- a/chromium/docs/website/site/nativeclient/reference/research-papers/pnacl.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cea8f7d923ea3ee28d6ee9ae4669224f51819aa2 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/styleguide/index.md b/chromium/docs/website/site/nativeclient/styleguide/index.md
deleted file mode 100644
index c2983f57c9d..00000000000
--- a/chromium/docs/website/site/nativeclient/styleguide/index.md
+++ /dev/null
@@ -1,322 +0,0 @@
----
-breadcrumbs:
-- - /nativeclient
- - Native Client
-page_name: styleguide
-title: Native Client Coding Style Guidelines
----
-
-The purpose of this document is to codify our existing coding style guidelines
-for new Native Client project members, including external committers. Some of
-the recommendations address security concerns, e.g., making the code easier to
-audit. A core principle is that our coding style should encourage writing
-correct code. Moreover, it should encourage writing obviously correct, easily
-audited code.
-
-Generally, we follow the published Google Coding Style guidelines. However,
-those guidelines were written primarily for C++ and python code, and a portion
-of NaCl code is in C (esp kernel-like code); furthermore, we use
-scons/gyp/subversion rather than gconfig/perforce, so build system issues are
-also addressed. Additionally, we incorporate/use bodies of third party code or
-their interfaces, most obvious of which is NPAPI, and stylistic differences
-occur, especially among major modules. In such cases, it is generally a good
-idea to adhere to the existing style -- for example, the Google Coding Style
-expressly does not endorse one position of the space in declarations such as
-char \*p; versus char\* p; over another -- and in such cases maintaining
-consistency with the prevalent style in the module would enhance readability.
-
-The Google C++ coding style guide can be found here:
-<http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml>; the python
-version can be found here:
-<http://google-styleguide.googlecode.com/svn/trunk/pyguide.html>.
-
-**C/C++/Build Style Rules**
-
-* In a file that implements an interface declared in a header file,
- always include that header file. Rationale: this prevents interface
- / implementation mismatches, since C does not do C++ style name
- mangling to encode the parameter types in the linker-level name.
- Even in C++, since the return type is not part of the type
- signature, return type mismatches would not get detected as a
- side-effect of name mangling.
-* Header files have guards against multiple inclusion. Rationale:
- unlike traditional Unix system header file style, the user of a
- header file is not responsible for knowing what type declarations
- etc that the header file may transitively require and to put include
- directives for transitively dependent header files in the C/C++ file
- ahead of the desired header file. Instead, the Google style is that
- if a header file A depends on something in header file B, then A
- should include B. If a source file also needs something from B, it
- will explicitly include B again. Do *not* depend on knowledge about
- A's implementation -- i.e., that it would include B -- in the source
- file, since that's an implementation detail that may change. Always
- directly include all header files that are needed by a file, but do
- not "look inside" files that you include: do not depend on
- transitive inclusions.
-* At the same time try to reduce the number of other header files your
- header depends on. If you only use a class/struct via
- pointers/references a simple forward declaration will do. Similarly
- you may want think twice before making a class contain another class
- as a member. Often using a pointer/reference will provide better
- information hiding at the price of an extra indirection (along with
- memory allocation and associated error handling).
-* Don't turn off compiler warning flags. If you have to, e.g., because
- we absolutely have to include a third party file, clone the scons
- build environment and remove the compiler warning flag only for that
- cloned environment, and use that cloned environment only for those
- files that includes the third party header file. Be judicious and
- limit the amount of taint as much as possible.
-* When importing third party code, rather than turning off warnings
- broadly (e.g., removing -pedantic or -Wall), try to turn off only
- the warning that the third party code triggers, e.g.,
- -Wno-long-long. Limit the scope.
-* Do not declare function prototypes in .c or .cc files -- include the
- corresponding header file.
-
-**C Style Rules**
-
-* We implement objects in C via explicit ctor and virtual function
- tables. Unlike C++, the ctor function returns an int -- conceptually
- a bool -- indicating success with a non-zero value. In C++ this
- would be split into a simple ctor that fills in fields with default
- values so dtor cleanup can happen, and an explicit Init function
- that handles the more complex initialization that may return an
- error.
-* In ctors, we always start by setting the vtbl pointer to NULL. This
- is a defense-in-depth mechanism. Only when the ctor is about to
- return success is the vtbl pointer set to point at a valid virtual
- function table. This means that should the caller forget to check
- the return value of the ctor, the next use of a virtual function
- will cause the program to abort due to the NULL pointer
- de-reference. In C++ code this would have to be emulated with a
- boolean flag that is set only when the Init member function returns
- success, and where every virtual function explicitly checks the flag
- upon entry. We generally use placement-new style ctors, where the
- caller allocates the memory (either stack or heap) and pass the
- memory to the ctor. Note that in ctors of derived classes, we may
- have to explicitly reset vtbl pointers if the ctor of the base class
- succeeds but later initialization of (new) members fail -- in order
- for the derived class ctor to fail cleanly, it should destroy any
- already initialized new members, then call the base class dtor --
- which should reset the vtbl pointer anyway -- as the last operation
- before returning failure (0).
-* In base class dtors, we always end with setting the vtbl pointer to
- NULL. It doesn't hurt to also explicitly set them to NULL as the
- last operation in derived class dtors either; depending on the
- frequency of object construction/destruction, it may even make sense
- to explicitly clear the entire object's memory. Rationale: this
- prevents uses -- via virtual functions -- of objects that have been
- deleted (object reuse).
-* Use standard safety idioms. The principle here is that it should be
- obvious that the code is correct. A code auditor/reviewer should not
- have to hunt far away for type declarations or for constants to
- determine the correctness of the code. Sometimes it's better to have
- redundant checks, i.e., integer overflow checks just above the
- allocation, even though the value was checked earlier against
- another value so that the earlier check's post-condition would
- entail that the overflow check is unnecessary.
- * Integer overflow checks: use SIZE_T_MAX, which is (~((size_t)
- 0)), to verify that allocating several objects will not cause an
- overflow:
-
-> > > /\* num_elt is untrusted \*/
-
-> > > if (num_elt &gt; SIZE_T_MAX / sizeof \*ptr) {
-
-> > > /\* error handling / abort \*/
-
-> > > }
-
-> > > ptr = malloc(num_elt \* sizeof \*ptr);
-
-> > > if (NULL == ptr) {
-
-> > > /\* error handling \*/
-
-> > > }
-
-> > similarly, even assignments can cause problems:
-
-> > > int32_t len = strlen(some_c_str); /\* on 64-bit systems, a problem also
-> > > with int64_t \*/
-
-> > here, since strlen returns a value of type size_t, it may be a value that
-> > cannot be represented as an int32_t -- according to the C (and C++)
-> > standard, when such an assignment occurs and the expression value is not
-> > representable in the destination type, the result is implementation
-> > dependent. And when this occurs, compilers are free to generate code that
-> > delete all of the users' files (though we know of no such compiler!).
-> > Instead, check:
-
-> > > size_t len_sz = strlen(some_c_str);
-
-> > > if (len_sz &gt; INT32_MAX) { /\* from stdint.h \*/
-
-> > > /\* error handling \*/
-
-> > > }
-
-> > > len = (int32_t) len_sz; /\* len_sz unused henceforth, so this is just
-> > > renaming a register / memory location \*/
-
-> > to ensure that overflows won't cause problems. Similarly, even additions can
-> > overflow:
-
-> > > int32_t foo;
-> > > int32_t bar;
-> > > ...
-> > > foo = bar + 1;
-
-> > should be
-
-> > > int32_t foo;
-
-> > > int32_t bar;
-
-> > > ...
-
-> > > if (bar &gt; INT32_MAX - 1) {
-
-> > > /\* error handling \*/
-
-> > > }
-
-> > > foo = bar + 1;
-
- * See the malloc idiom above. The amount of memory to be allocated
- should always use a dereference of the left-hand-side of the
- assignment, since the lhs must be of the right type. Rationale:
- if for some reason we later change the type of a variable, there
- is no need to track down occurrences of sizeof(Typename)
- elsewhere, since the use of the lhs in the sizeof will make it
- automatically correct.
-
-> > Comparisons involving a constant should keep the constant on the lhs of the
-> > comparison operator. This avoids accidents like
-
-> > > if (ptr = NULL) {
-
-> > > /\* oops \*/
-
-> > > }
-
-> > where a comparison gets turned into an assignment (followed by implicit
-> > comparison to 0) due to a typographical error, changing the meaning of the
-> > code. Instead, use the idom from the larger code snippet above. Since the
-> > lhs is not an lvalue, this cannot be accidentally turned into an assignment.
-> > While not a strict requirement, constants should be used on the lhs even for
-> > inequality tests, since in the future somebody else might change things
-> > around and turn it (or via cut-n-paste) into an intended equality test.
-
-> > Once we have a test to ensure that we do not accidentally turn off
-> > compiler-specific flags that warn when constructs like if (lvalue =
-> > expression) is used in code, we can relax this rule.
-
- * Rather than refering to a distantly defined value/variable such
- as a constant defined in a header or the top of the file
-
-> > > #define BUFFER_SIZE 1000
-
-> > > /\* ... \*/
-
-> > > char buffer\[BUFFER_SIZE\];
-
-> > > /\* ... \*/
-
-> > > memset(buffer, 0, BUFFER_SIZE); /\* bad \*/
-
-> > instead, do
-
-> > > memset(buffer, 0, sizeof buffer); /\* better (Yes, the parentheses are not
-> > > required around buffer here. It surprised cbiffle and sehr too.) \*/
-
-> > The latter is more obviously correct. (But not if buffer is actually a char
-> > \* to malloc'd memory, so auditors still have to do some looking around.)
-
- * add more lines...
-* add more lines...
-
-### **C++ Style Rules**
-
-* We generally match the Google style rules. Differences are generally
- due to our code not being standard Google C++ code and not running
- in the production environment found in Google datacenters.
-* Exceptions:
- * Note that Chromium's default gyp file setup compiles with
- -fno-exceptions so catch statements have no effect -- the catch
- block is just dead code, and the C++ runtime provided top-level
- exception handler will be the only exception handler that's
- active.
- * If for some reason we must use exceptions or deal with
- exceptions (e.g., because we are building a library/module that
- will be generally useful and is not NaCl specific or must use an
- underlying library that throws exceptions as part of its API),
- do not throw exceptions across API boundaries (except for fatal
- errors). The library/module *must* be compiled with exceptions
- enabled, but the relying code might not, and we should not, in
- general, force relying code to enable exceptions. This usually
- means that the library must catch all (non-fatal) exceptions at
- API boundaries and convert them into error codes. Use idioms
- that encourage exception safety, particularly when interacting
- with STL. See Effective C++ item #29.
- * Remember that new can throw. You must either (1) assume that an
- exception can cause a jump at any invocation of new -- and cause
- the application to abort -- or (2) use new(std::nothrow) and
- check its result! Unlike production code where failing fast is
- generally a good idea to either failover to another machine or
- to restart the local server process, this is sometimes not
- appropriate in client-side code.
- * Note that neither of these is inherently safer than the
- other. While nothrow may seem safer because of the lack of
- surprise control flow, at least an exception causes
- destructors in the current scope to be run, while failing to
- check for a null pointer will simply segfault down the line
- (at best).
- * When allocating a series of objects in the heap, use
- scoped_ptr or auto_ptr to cleanly deallocate them if one new
- or constructor throws. This is also good RAII practice.
-* If a data structure's size may be determined by a malicious author —
- say, a set describing all the validation errors encountered in a
- NaCl module — expect exceptions like bad_alloc that indicate you are
- being DoS'd. To avoid having to reason about exception safety and
- failure modes in these cases, consider capping the size of such
- structures.
-* Beware of integral type conversions, especially when dealing with
- inputs from external sources that might be under an attacker's
- control. Use assert_cast&lt;T&gt;(expr) and
- saturate_cast&lt;T&gt;(expr) from
- native_client/src/include/check_cast.h when appropriate. For
- example:
-
-> > bool SanityCheckerApi(SomeType obj, char\* data, int32_t nbytes);
-
-> > bool SomeClass::SomeMethod(std::string s) {
-
-> > if (SanityCheckerApi(obj_, s.c_str(), static_cast&lt;int32_t&gt;(s.size())))
-> > {
-
-> > // Compilers correctly warn that precision is lost without a cast,
-
-> > // since std::string::size() is size_t, and on a 64-bit machine is
-
-> > // large than int32_t. However, just using a static_cast&lt;int32_t&gt; to
-
-> > // get rid of the compiler warning messages is wrong.
-
-> > return false; // error
-
-> > }
-
-> > /\* Use all of s \*/
-
-> > return true;
-
-> > }
-
-> > can cause a security problem: if the caller-supplied data s is under the
-> > adversary's control and could be more than 4GB in size, then
-> > SanityCheckerApi will only check the first s.size() mod 2\*\*32 bytes of
-> > data, and the use of s after the check will (presumably) consume all of s
-> > and do the wrong thing.
-
-* add more here... \ No newline at end of file
diff --git a/chromium/docs/website/site/network-speed-experiments/index.md b/chromium/docs/website/site/network-speed-experiments/index.md
deleted file mode 100644
index 329f0f876c7..00000000000
--- a/chromium/docs/website/site/network-speed-experiments/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-breadcrumbs: []
-page_name: network-speed-experiments
-title: Network Speed Experiments
----
-
-We're currently experimenting with improving the way clients and servers
-communicate. Our primary goal is to reduce page load time for end users. This
-page contains information about some of those experiments.
-
-**Notes**
-
-* The web has evolved almost entirely out of experiments. The
- experiments that worked have stuck. For example, did you know that
- while the web globally in use by 1994, yet HTTP as a protocol was
- not formally standardized until 1996? Chromium network experiments
- are intended to follow a similar pattern. Start with designs that
- make sense, measure prototypes in the lab, measure prototypes in the
- real world, and iterate. Only if the experiment works will we
- continue with that work.
-* Our experiments will always be open source.
-* We will always work with standards bodies where appropriate.
-* All experiments are designed to benefit the web at large, never for
- a single vendor or site.
-
-**Experiments**
-
-* [SPDY - a low-latency protocol for the web.](/spdy) \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/HQP Search.jpg.sha1 b/chromium/docs/website/site/omnibox-history-provider/HQP Search.jpg.sha1
deleted file mode 100644
index 6c78853ac41..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/HQP Search.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3e18ee2cb3a809879a067591513231bcca53035d \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/HQP.jpg.sha1 b/chromium/docs/website/site/omnibox-history-provider/HQP.jpg.sha1
deleted file mode 100644
index 847a669b26c..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/HQP.jpg.sha1
+++ /dev/null
@@ -1 +0,0 @@
-99c483c7f99cdef54e3365b497a457c4715384d1 \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/HQP.tiff.sha1 b/chromium/docs/website/site/omnibox-history-provider/HQP.tiff.sha1
deleted file mode 100644
index cc0d4b35a5b..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/HQP.tiff.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9e67b17363693d9fc37879e9db3831181b63dd5d \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 2.59.44 PM.png.sha1 b/chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 2.59.44 PM.png.sha1
deleted file mode 100644
index 00b6a752e5b..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 2.59.44 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-39f5f1b74af7088379d7ec2fbee30515ef69a4dc \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 3.16.49 PM.png.sha1 b/chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 3.16.49 PM.png.sha1
deleted file mode 100644
index 14fc466f68d..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/Screen shot 2011-02-16 at 3.16.49 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a45c2f587ccd6cef771d876fb81bf542fa7fc7b2 \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/caching/Initialization.png.sha1 b/chromium/docs/website/site/omnibox-history-provider/caching/Initialization.png.sha1
deleted file mode 100644
index 0cb11152b67..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/caching/Initialization.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c60efb7d6a9195d7c08d60e34726d9df9b29133c \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/caching/Shutdown.png.sha1 b/chromium/docs/website/site/omnibox-history-provider/caching/Shutdown.png.sha1
deleted file mode 100644
index b275d3946f0..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/caching/Shutdown.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d56531f7377caa0c30009e1164f9da7b58431359 \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/caching/ShutdownDetail.png.sha1 b/chromium/docs/website/site/omnibox-history-provider/caching/ShutdownDetail.png.sha1
deleted file mode 100644
index ef8f2e90e49..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/caching/ShutdownDetail.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1f3addd08d1ec3ca433beebd7196775efa715339 \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/caching/Startup.png.sha1 b/chromium/docs/website/site/omnibox-history-provider/caching/Startup.png.sha1
deleted file mode 100644
index 5f3f5a44483..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/caching/Startup.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fc9e6d43c1f307c2f8d957740d6ed6ed8494a33c \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/caching/StartupDetail.png.sha1 b/chromium/docs/website/site/omnibox-history-provider/caching/StartupDetail.png.sha1
deleted file mode 100644
index 74088ffd4e7..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/caching/StartupDetail.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5f599b76271921d0366399e47b9bb5ce538c1d91 \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/caching/index.md b/chromium/docs/website/site/omnibox-history-provider/caching/index.md
deleted file mode 100644
index e772b0980c6..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/caching/index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-breadcrumbs:
-- - /omnibox-history-provider
- - 'Omnibox: History Provider'
-page_name: caching
-title: Omnibox History Quick Provider Index Caching
----
-
-## **Why Caching is Important in this Case**
-
-The internal indexes for the HQP can take some time to build from scratch. This
-is done by querying all records in the the URL visit history database. Instances
-of this database have grown to have tens of thousands of entries reaching over
-100 MB in size. Building the HQP indexes at startup from such a large database
-would delay the availability of this feature noticeably and would have a
-noticeable impact on the responsiveness of the browser.
-
-The objective then is to eliminate having to rebuild the internal indexes used
-by the HQP. Once that index data has been built, the HQP saves it into a
-profile-specific cache file. (The name of this file is 'History Provider
-Cache'.) At profile startup, this cache file is read and used to repopulate the
-HQP index data. At profile shutdown the HQP index data is written to the cache
-file.
-
-Initially, Pickle was being used as the binary encoding mechanism for recording
-the cache file and the transaction file. During subsequent discussions, some
-discomfort was expressed with Pickle as its primary client is IPC, not large
-file encoding. As a result, the encoding mechanism was changed to Protocol
-Buffers which is where the implementation stands today. There are drawbacks to
-both Pickle and Protocol Buffers as the cache is only updated at browser
-shutdown.
-
-A snapshot-based approach, as currently used, would benefit from having a
-transaction journal file into which new, changed and deleted visits would be
-record. This transaction file would be kept constantly updated and then used at
-profile startup to make adjustments to the HQP index as restored from the most
-recent cache file snapshot. A new snapshot would then be recorded for the next
-profile startup.
-
-Before the transaction journal approach was begun, however, it was decided that
-moving to a SQLite-based caching mechanism would be prudent. Doing so would
-eliminate the need for a transaction journal inasmuch as the SQLite-based cache
-would *always* be up-to-date. Effort to implement the SQLite caching has been
-ongoing but has not yet incorporated into the HQP.
-
-The current implementation **does not** employ a transaction journal, thus there
-is some risk that historical information about site visits subsequent to profile
-startup could be lost if the application crashes.
-
-### **The Situation Today**
-
-Currently, all cache file operations are performed on the main thread. This
-could slowdown startup though no noticeable impact has been reported by users.
-Nevertheless, it is important to move all file operations off of the main
-thread. This leads us to...
-
-#### **The Properly Threaded Solution**
-
-Modifications to the HQP index caching code are underway such that all cache
-file and database operations will be performed on the appropriate thread.
-
-==Startup/Restoring==<img alt="image"
-src="/omnibox-history-provider/caching/Startup.png" height=320 width=307>
-
-The illustration to the right shows the threading model for profile
-initialization. For a larger image [click
-here](/omnibox-history-provider/caching/Startup.png).
-
-Three threads are involved: the main (or UI) thread, the FILE thread, and the
-History Database thread.
-
-If there is a HQP cache file and that file can be successfully read then the
-internal index data for the HQP is reconstituted from the contents of that cache
-file and swapped into the HQP. The file reading and internal index data
-reconstitution is performed on the FILE thread; swapping in the new index data
-is performed on the main thread. Swapping of the index data on the main thread
-is safe since all other accesses to the HQP's internal data occurs on the main
-thread.
-
-If there is no HQP cache file or that file is unreadable for some reason then
-the history database (The database file itself is named 'History'.) is queried
-on the history thread
-and the internal index data for the HQP is reconstituted using the records from
-that database. Once this operation has completed the HQP index data is swapped
-in on the main thread. Note that if there is no history database, the database
-is corrupt, there are no qualifying records in the database, or any other error
-occurs that a new but empty HQP index data is swapped in.
-
-The observer, if any, is notified on the main thread. (Currently, the only
-observer is in unit_tests.)
-
-==Shutdown/Saving==
-
-<img alt="image" src="/omnibox-history-provider/caching/Shutdown.png" height=140
-width=320>The illustration to the left shows the threading model for shutdown.
-For a larger image [click here](/omnibox-history-provider/caching/Shutdown.png).
-
-When the profile is shutdown, a copy of the HQP's index data is made on the main
-thread and then written to the cache file on the FILE thread. Once again, making
-the copy of the index data on the main thread affords safety as all other
-accesses to that index data are performed on the main thread.
-
-The observer, if any, is notified on the FILE thread. (Currently, the only
-observer is in unit_tests.)
-
-The history database thread is not involved in shutdown.
-
-## Excruciating Detail
-
-The illustration below gives a detailed image showing all classes and functions
-involved in the profile startup/cache restoral operation. For a larger image
-[click here](/omnibox-history-provider/caching/StartupDetail.png).
-
-[<img alt="image" src="/omnibox-history-provider/caching/StartupDetail.png"
-height=370 width=400>](/omnibox-history-provider/caching/StartupDetail.png)
-
-The illustration below a detailed image showing all classes and functions
-involved in the profile shutdown/cache saving operation. For a larger image
-[click here](/omnibox-history-provider/caching/ShutdownDetail.png).
-
-[<img alt="image" src="/omnibox-history-provider/caching/ShutdownDetail.png"
-height=300 width=400>](/omnibox-history-provider/caching/ShutdownDetail.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/omnibox-history-provider/index.md b/chromium/docs/website/site/omnibox-history-provider/index.md
deleted file mode 100644
index 7d299f1103a..00000000000
--- a/chromium/docs/website/site/omnibox-history-provider/index.md
+++ /dev/null
@@ -1,222 +0,0 @@
----
-breadcrumbs: []
-page_name: omnibox-history-provider
-title: 'Omnibox: History Provider'
----
-
-One of the autocomplete providers for the omnibox (the HistoryQuickProvider, HQP
-for short) serves up autocomplete candidates from the profile's history
-database. As the user starts typing into the omnibox, the HQP performs a search
-in its index of significant historical visits for the term or terms which have
-
-[<img alt="image"
-src="/omnibox-history-provider/Screen%20shot%202011-02-16%20at%202.59.44%20PM.png"
-height=142
-width=320>](/omnibox-history-provider/Screen%20shot%202011-02-16%20at%202.59.44%20PM.png)
-
-been typed. The resulting candidates are scored and a limited number of only the
-most relevant matching URLs visited are presented to the user. For example,
-imagine the user has visited drudgereport.com frequently and has started to type
-'**dru**' in the omnibox. They will be presented with autocomplete suggestions
-as shown in the screenshot to the right.
-Substring matching is also performed. The drudgereport.com suggestion will also
-be made if the user types '**rep**', though the
-
-[<img alt="image"
-src="/omnibox-history-provider/Screen%20shot%202011-02-16%20at%203.16.49%20PM.png"
-height=137
-width=320>](/omnibox-history-provider/Screen%20shot%202011-02-16%20at%203.16.49%20PM.png)
-
-result will not be scored as highly and is likely not to be the top-most
-suggestion, as shown in the screenshot on the left.
-Multiple terms also work. drudgereport.com will be one of the top suggestions,
-in this example, when the user types '**dr re**', '**re dr**', and similar
-partial words.
-The URL of the visited page is indexed and searched. As of Chrome 15, the page
-title is also indexed and searched.
-
-## Objectives
-
-The HQP is intended to very quickly provide scored autocomplete suggestions from
-a limited subset of all known historical URL visits. The specific objectives
-are:
-
-1. Provide results in 20 ms or less.
-2. Provide the top 3 best matches for the terms typed by the user.
-3. Provide results as each character in the terms has been typed.
-4. Accommodate all browser supported languages.
-5. Consider only URLs:
- * for which the URL was specifically typed into the omnibox OR
- * which has been visited at least at least 4 times OR
- * has been visited within the last 72 hours.
-6. Match against the URL and/or the page title.
-7. Match against partial strings.
-8. Match against one or more terms.
-9. Match against internal substrings (i.e. do not limit matches to
- start-of-string).
-10. Provide results immediately upon browser startup.
-11. Do not degrade startup and shutdown times.
-12. Require reasonable memory resources.
-
-## Approaches Considered
-
-Three primary alternatives were considered:
-
-1. Perform queries against the history database as the user types
- search terms.
-2. Create a custom in-memory subset of the history database and perform
- queries against this custom database as the user types search terms.
-3. Create a custom in-memory index of the history database and perform
- queries against this index as the user types search terms.
-
-Option #1 is far too slow and does not satisfy other requirements such as
-partial string matches. Also, properly handling word-breaks for all languages is
-extremely difficult.
-Option #2 is much faster but still does not satisfy the language and partial
-string match requirements.
-Option #3 is more complex to implement but satisfies all requirements. Caching
-of the in-memory data structures is required in order to meet startup/shutdown
-requirements. Further, in order to minimize an impact from writing the cache at
-shutdown and whenever updates to the index meant refreshing the cache a
-simple-minded transaction log is required.
-Within Option #3 are other considerations specifically as they relate to the
-cache:
-
-1. During startup, the index must be built as quickly as possible (see
- Objectives 9 and 10). A cache helps satisfy these objectives.
- Unfortunately, in the absence of a cache a complete query of the
- history database must be performed in order to rebuild the IMUI;
- that database can be quite large, reaching tens of thousands of URL
- visits. Fortunately, a rebuild of the IMUI should rarely be
- necessary. The bulk of the pressure during startup will be the speed
- of loading the cache and repopulating the IMUI data structures.
-2. During shutdown, the IMUI must be cached as quickly as possible. On
- desktop systems, users are intolerant of an application taking more
- than a few milliseconds to shut down and get out of the way. A
- complete write of the IMUI data to the cache at shutdown may be
- quick enough to meet shutdown time requirements. If those
- requirement cannot be met, then an approach where the cache is
- constantly kept up-to-date may be required.
-3. During operation, it's important to keep the on-disk cache
- up-to-date in case the browser unexpectedly shuts down.
-
-In summary, a cache will be required as well as some mechanism for keeping that
-cache up-to-date as the user visits sites and as old, stale visits are removed
-from the index.
-For a detailed discussion of the HQP caching implementation please see
-[Caching](/omnibox-history-provider/caching).
-
-## Components
-
-There are two primary components to the history autocomplete provider: the
-HistoryQuickProvider (HQP) and the InMemoryURLIndex (IMUI).
-
-### HistoryQuickProvider
-
-The HistoryQuickProvider, an AutocompleteProvider, is a client of the
-InMemoryURLIndex. HQP, when asked for autocomplete candidates, marshalls the
-search term (or terms) and asks the IMUI to provide scored and sorted matches
-for that term (or terms). HQP then composes a list of AutocompleteMatches from
-the IMUI results and notifies the autocomplete system that results are
-available.
-The design of the HQP follows the typical AutocompleteProvider pattern and is
-not further discussed here.
-
-### InMemoryURLIndex
-
-All of the interesting stuff is in the IMUI. In essence, the text of the URL and
-the page title for all qualified history items (URL visits from the history
-database) are broken down into individual words and characters and inserted into
-in-memory data structures with a reference to the original history item. Here is
-a diagram of these data structures:
-
-[<img alt="image" src="/omnibox-history-provider/HQP.jpg" height=266
-width=320>](/omnibox-history-provider/HQP.jpg)
-
-#### Indexing
-
-During a build of the index, and whenever the user visits a site, the URL and
-the page title for that visit are added to the index. Here's how it works:
-
-For this example, let's use "http://www.americanentertainer.com/xj20gg1Z.html"
-with a page title of "Recent Movies".
-
-For each qualifying URL visit:
-
-1. Insert an entry into the **history_info_map_** for the **HistoryID**
- of the URL visit.
-2. The URL and page title are broken down into individual words:
- * http www americanentertainer xj 20 gg 1 Z html recent movies
-3. For each word:
- 1. Append the word to the **word_list_** with the insertion index
- serving as the **WordID**.
- 2. Insert the word into the **word_map_** with its **WordID**.
- 3. Add the **HistoryID** for the URL visit to the **HistoryIDSet**
- of the **word_id_history_map_** item corresponding to the
- **WordID**, adding a new map entry if necessary.
- 4. Break the word down into a set of unique, individual characters.
- 5. For each character:
- 1. Add the **WordID** for the word containing the character to
- the **WordIDSet** of the **char_word_map_** item
- corresponding to the character, adding a new map entry if
- necessary.
-
-The **available_words_** list contains the **WordID**s for entries in the
-**word_list_** which are no longer in use. This occurs when URL visits no longer
-qualify for use by the HQP and one or more words of the URL or its page title
-are no longer referenced by any of the indexed URL visits. Maintaining this list
-prevents an ever growing **word_list_** (a poor-man's garbage collection).
-
-#### Searching
-
-The following diagram demonstrates what occurs in the HQP as the user types into
-the omnibox. In this case, the user has type the four characters: **d r u d**.
-
-[<img alt="image" src="/omnibox-history-provider/HQP%20Search.jpg" height=320
-width=256>](/omnibox-history-provider/HQP%20Search.jpg)
-
-Whatever the user types may constitute multiple search terms, either
-deliberately or not. The following are examples of multiple search terms:
-<table>
-<tr>
-<td><b>what's in the omnibox</b></td>
-<td><b>how it's broken down</b></td>
-</tr>
-<tr>
-<td> fox542steal</td>
-<td> fox 542 steal</td>
-</tr>
-<tr>
-<td> amer spec</td>
-<td> amer spec</td>
-</tr>
-<tr>
-<td> google.com/search?source=ig&hl=en</td>
-<td> google com source ig hl en</td>
-</tr>
-</table>
-When multiple terms are present, each term is evaluated separately by the HQP
-and the result sets are intersected immediately after the final union step shown
-in the illustration. In order to meet omnibox typing responsiveness objectives,
-should there be more than 500 result candidates at this point the scoring
-operation is terminated and no results are suggested by the HQP. This is likely
-to happen for very short search strings (i.e. for a search string of 'w' as that
-will occur in most URLs being candidates). The results of that intersection are
-then scored, reduced and sorted.
-
-## To Do
-
-#### Immediately
-
-* Update the threading model for cache file reading
-* Use SQLite as the caching mechanism.
-
-#### Future
-
-* Record HQP statistics (qualifying visit count, size of cache and
- transaction files, etc.).
-* Validate the scoring algorithm through user feedback.
-* See if there is a way to offer in-line autocomplete results for
- multiple-term searches.
-* Determine if the full cache ought to be occasionally written,
- clearing the transaction file. \ No newline at end of file
diff --git a/chromium/docs/website/site/pages.json b/chromium/docs/website/site/pages.json
deleted file mode 100644
index db97b9a4594..00000000000
--- a/chromium/docs/website/site/pages.json
+++ /dev/null
@@ -1,1439 +0,0 @@
-[
- "/Home",
- "/Home/chromecompatfaq",
- "/Home/chromium-clobber-landmines",
- "/Home/chromium-privacy",
- "/Home/chromium-privacy/privacy-sandbox",
- "/Home/chromium-privacy/privacy-sandbox/covert-tracking",
- "/Home/chromium-privacy/privacy-sandbox/floc",
- "/Home/chromium-security",
- "/Home/chromium-security/adding-permissions",
- "/Home/chromium-security/articles",
- "/Home/chromium-security/articles/chrome-sandbox-diagnostics-for-windows",
- "/Home/chromium-security/articles/gwp-asan",
- "/Home/chromium-security/binding-integrity",
- "/Home/chromium-security/boringssl",
- "/Home/chromium-security/boringssl/contributing",
- "/Home/chromium-security/brag-sheet",
- "/Home/chromium-security/bugs",
- "/Home/chromium-security/bugs/automated-triage",
- "/Home/chromium-security/bugs/automatic-filing",
- "/Home/chromium-security/bugs/developing-fuzzers-for-clusterfuzz",
- "/Home/chromium-security/bugs/reproducing-clusterfuzz-bugs",
- "/Home/chromium-security/bugs/using-clusterfuzz",
- "/Home/chromium-security/certificate-transparency",
- "/Home/chromium-security/certificate-transparency/log-policy",
- "/Home/chromium-security/chromium-and-emet",
- "/Home/chromium-security/clean-software-alliance",
- "/Home/chromium-security/client-identification-mechanisms",
- "/Home/chromium-security/corb-for-developers",
- "/Home/chromium-security/core-principles",
- "/Home/chromium-security/crlsets",
- "/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes",
- "/Home/chromium-security/deprecating-powerful-features-on-insecure-origins",
- "/Home/chromium-security/education",
- "/Home/chromium-security/education/security-tips-for-crx-and-apps",
- "/Home/chromium-security/education/security-tips-for-ipc",
- "/Home/chromium-security/education/tls",
- "/Home/chromium-security/education/tls/sha-1",
- "/Home/chromium-security/enamel",
- "/Home/chromium-security/enamel/goals-for-the-origin-info-bubble",
- "/Home/chromium-security/enamel/permissions",
- "/Home/chromium-security/enamel/restricting-iframe-permissions",
- "/Home/chromium-security/extension-content-script-fetches",
- "/Home/chromium-security/guts",
- "/Home/chromium-security/hall-of-fame",
- "/Home/chromium-security/ipc-security-reviews",
- "/Home/chromium-security/malicious-extensions-protection",
- "/Home/chromium-security/marking-http-as-non-secure",
- "/Home/chromium-security/mds",
- "/Home/chromium-security/memory-safety",
- "/Home/chromium-security/memory-safety/rust-and-c-interoperability",
- "/Home/chromium-security/owp",
- "/Home/chromium-security/owp/web-platform-security-backlog",
- "/Home/chromium-security/pdfium-security",
- "/Home/chromium-security/pgp-key",
- "/Home/chromium-security/prefer-secure-origins-for-powerful-new-features",
- "/Home/chromium-security/pwnium-2",
- "/Home/chromium-security/pwnium-3",
- "/Home/chromium-security/pwnium-4",
- "/Home/chromium-security/quarterly-updates",
- "/Home/chromium-security/reporting-security-bugs",
- "/Home/chromium-security/reviews-and-consulting",
- "/Home/chromium-security/root-ca-policy",
- "/Home/chromium-security/security-bug-lifecycle",
- "/Home/chromium-security/security-faq",
- "/Home/chromium-security/security-faq/service-worker-security-faq",
- "/Home/chromium-security/security-labels",
- "/Home/chromium-security/security-release-management",
- "/Home/chromium-security/security-reviews",
- "/Home/chromium-security/security-sheriff",
- "/Home/chromium-security/site-isolation",
- "/Home/chromium-security/ssca",
- "/Home/chromium-security/strict-origin-isolation-trial",
- "/Home/chromium-security/symantec-legacy-pki",
- "/Home/chromium-security/vulnerability-rewards-program",
- "/Home/debugging-on-webview",
- "/Home/domui-testing",
- "/Home/domui-testing/webui-browser_tests",
- "/Home/domui-testing/webui-browser_tests/webui-accessibility-audit",
- "/Home/ice-cream-sandwich-support-deprecation-faq",
- "/Home/loading",
- "/Home/loading/clovis",
- "/Home/loading/oor-cors",
- "/Home/memory",
- "/Home/third-party-developers",
- "/Home/tls13",
- "/administrators",
- "/administrators/advanced-integration-for-saml-sso-on-chrome-devices",
- "/administrators/certificate-management-extension-api-on-chrome-os",
- "/administrators/common-problems-and-solutions",
- "/administrators/complex-policies-on-windows",
- "/administrators/configuring-other-preferences",
- "/administrators/configuring-policy-for-extensions",
- "/administrators/diagnostic-mode",
- "/administrators/err_eset_anti_virus_ssl_interception",
- "/administrators/err_ssl_weak_server_ephemeral_dh_key",
- "/administrators/frequently-asked-questions",
- "/administrators/guide-for-chrome-os-saml-sso-smart-card-integration",
- "/administrators/installation",
- "/administrators/ios-mdm-policy-format",
- "/administrators/linux-quick-start",
- "/administrators/log-messages",
- "/administrators/mac-quick-start",
- "/administrators/policy-list-3",
- "/administrators/policy-list-3/atomic_groups",
- "/administrators/policy-list-3/cookie-legacy-samesite-policies",
- "/administrators/policy-list-3/deprecated-policies",
- "/administrators/policy-list-3/extension-settings-full",
- "/administrators/policy-list-3/user-data-directory-variables",
- "/administrators/policy-templates",
- "/administrators/pre-installed-extensions",
- "/administrators/turning-off-auto-updates",
- "/administrators/url-blacklist-filter-format",
- "/administrators/url-blocklist-filter-format",
- "/administrators/windows-quick-start",
- "/android",
- "/android/contributing-to-drm_hwcomposer",
- "/android/drm_hwcomposer-overview",
- "/audio-video",
- "/audio-video/autoplay",
- "/audio-video/autoplay/autoplay-policy-design-rationale",
- "/audio-video/autoplay/autoplay-pre-seeding-in-chrome",
- "/audio-video/media-internals",
- "/blink",
- "/blink/activedomobject",
- "/blink/blink-api-owners-requirements",
- "/blink/blink-gardening",
- "/blink/blink-gc",
- "/blink/blink-in-js",
- "/blink/blink-network-stack",
- "/blink/blink-post-merge-faq",
- "/blink/blink-testing-and-the-w3c",
- "/blink/blink-triaging",
- "/blink/coding-style",
- "/blink/coding-style/layout-test-style-guidelines",
- "/blink/deprecating-features",
- "/blink/developer-faq",
- "/blink/directory-dependency-in-blink",
- "/blink/dom-exceptions",
- "/blink/getting-started-with-blink-debugging",
- "/blink/guidelines",
- "/blink/guidelines/api-owners",
- "/blink/guidelines/api-owners/procedures",
- "/blink/guidelines/api-owners/requirements",
- "/blink/guidelines/blink-api-owners-requirements",
- "/blink/guidelines/values",
- "/blink/guidelines/web-exposed",
- "/blink/guidelines/web-platform-changes-guidelines",
- "/blink/guidelines/web-platform-changes-process",
- "/blink/how-repaint-works",
- "/blink/importing-the-w3c-tests",
- "/blink/intent-security-triage",
- "/blink/launching-features",
- "/blink/launching-features/how-chrome-status-communicates",
- "/blink/launching-features/let-developers-know",
- "/blink/launching-features/old-process",
- "/blink/layoutng",
- "/blink/memory-team",
- "/blink/origin-trials",
- "/blink/origin-trials/portals",
- "/blink/origin-trials/running-an-origin-trial",
- "/blink/platform-predictability",
- "/blink/platform-predictability/compat-tools",
- "/blink/platform-predictability/objectives",
- "/blink/public-c-api",
- "/blink/removing-features",
- "/blink/runtime-enabled-features",
- "/blink/serviceworker",
- "/blink/serviceworker/getting-started",
- "/blink/serviceworker/service-worker-faq",
- "/blink/serviceworker/testing",
- "/blink/sheriffing",
- "/blink/sheriffing/triaging-gasper-alerts",
- "/blink/slimming-paint",
- "/blink/slimming-paint/historical-documents",
- "/blink/spec-mentors",
- "/blink/unittesting",
- "/blink/v8-bindings",
- "/blink/web-workers",
- "/blink/webcrypto",
- "/blink/webidl",
- "/blink/webidl/blink-idl-extended-attributes",
- "/blink/when-will-a-fix-ship-in-chrome-stable-or-canary",
- "/careers",
- "/cecpq2",
- "/chrome-apps",
- "/chrome-os-devices-and-kernel-versions",
- "/chrome-release-channels",
- "/chromium-os",
- "/chromium-os/2014-firmware-summit",
- "/chromium-os/android-apps",
- "/chromium-os/bias-on-chromium-os",
- "/chromium-os/bluetooth-pairing-method-confusion-on-chrome-os",
- "/chromium-os/build",
- "/chromium-os/build/bypassing-tests-on-a-per-project-basis",
- "/chromium-os/build/c-exception-support",
- "/chromium-os/build/chromite-parallel",
- "/chromium-os/build/chroot_version_hooks",
- "/chromium-os/build/cros-deploy",
- "/chromium-os/build/cros-flash",
- "/chromium-os/build/faq",
- "/chromium-os/build/local-trybot-documentation",
- "/chromium-os/build/sdk-creation",
- "/chromium-os/build/tour-of-the-chromiumos-buildbot",
- "/chromium-os/build/using-remote-trybots",
- "/chromium-os/cable-and-adapter-tips-and-tricks",
- "/chromium-os/ccd",
- "/chromium-os/chrome-os-systems-supporting-adb-debugging-over-usb",
- "/chromium-os/chrome-os-systems-supporting-android-apps",
- "/chromium-os/chrome-os-systems-supporting-instant-tethering",
- "/chromium-os/chrome-os-systems-supporting-linux",
- "/chromium-os/chromeos-graphics-reading-list",
- "/chromium-os/chromium-os-faq",
- "/chromium-os/chromiumos-design-docs",
- "/chromium-os/chromiumos-design-docs/autoupdate-details",
- "/chromium-os/chromiumos-design-docs/boot-design",
- "/chromium-os/chromiumos-design-docs/cbi-cros-board-info",
- "/chromium-os/chromiumos-design-docs/chrome-os-battery-life-overview",
- "/chromium-os/chromiumos-design-docs/chrome-os-performance-overview",
- "/chromium-os/chromiumos-design-docs/chrome-os-volume-keys",
- "/chromium-os/chromiumos-design-docs/chromium-os-cgroups",
- "/chromium-os/chromiumos-design-docs/chromium-os-kernel",
- "/chromium-os/chromiumos-design-docs/chromium-os-kernel/dco",
- "/chromium-os/chromiumos-design-docs/chromium-os-kernel/submitting-patches",
- "/chromium-os/chromiumos-design-docs/chromium-os-libcros",
- "/chromium-os/chromiumos-design-docs/chromium-os-printing-design",
- "/chromium-os/chromiumos-design-docs/cras-chromeos-audio-server",
- "/chromium-os/chromiumos-design-docs/cros-network",
- "/chromium-os/chromiumos-design-docs/cros-network/cellular-activation",
- "/chromium-os/chromiumos-design-docs/cros-network/chrome-network-debugging",
- "/chromium-os/chromiumos-design-docs/cros-network/fake-cromo",
- "/chromium-os/chromiumos-design-docs/cros-network/fake-gsm-modem",
- "/chromium-os/chromiumos-design-docs/cros-network/fakemodem",
- "/chromium-os/chromiumos-design-docs/developer-mode",
- "/chromium-os/chromiumos-design-docs/developer-shell-access",
- "/chromium-os/chromiumos-design-docs/disk-format",
- "/chromium-os/chromiumos-design-docs/ec-3po",
- "/chromium-os/chromiumos-design-docs/filesystem-autoupdate",
- "/chromium-os/chromiumos-design-docs/filesystem-autoupdate-supplements",
- "/chromium-os/chromiumos-design-docs/firmware-boot-and-recovery",
- "/chromium-os/chromiumos-design-docs/firmware-updates",
- "/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data",
- "/chromium-os/chromiumos-design-docs/keyboard-controlled-reset-circuit",
- "/chromium-os/chromiumos-design-docs/library-optimization",
- "/chromium-os/chromiumos-design-docs/login",
- "/chromium-os/chromiumos-design-docs/lucid-sleep",
- "/chromium-os/chromiumos-design-docs/network-portal-detection",
- "/chromium-os/chromiumos-design-docs/onc",
- "/chromium-os/chromiumos-design-docs/open-network-configuration",
- "/chromium-os/chromiumos-design-docs/out-of-memory-handling",
- "/chromium-os/chromiumos-design-docs/partition-resizing",
- "/chromium-os/chromiumos-design-docs/powerwash",
- "/chromium-os/chromiumos-design-docs/protecting-cached-user-data",
- "/chromium-os/chromiumos-design-docs/recovery-mode",
- "/chromium-os/chromiumos-design-docs/security-overview",
- "/chromium-os/chromiumos-design-docs/software-architecture",
- "/chromium-os/chromiumos-design-docs/source-code-management",
- "/chromium-os/chromiumos-design-docs/system-hardening",
- "/chromium-os/chromiumos-design-docs/system-notifications",
- "/chromium-os/chromiumos-design-docs/tab-discarding-and-reloading",
- "/chromium-os/chromiumos-design-docs/text-input",
- "/chromium-os/chromiumos-design-docs/text-input/syncing-input-methods",
- "/chromium-os/chromiumos-design-docs/touch-firmware-updater",
- "/chromium-os/chromiumos-design-docs/upstream-first",
- "/chromium-os/chromiumos-design-docs/user-accounts-and-management",
- "/chromium-os/chromiumos-design-docs/userland-boot",
- "/chromium-os/chromiumos-design-docs/verified-boot",
- "/chromium-os/chromiumos-design-docs/verified-boot-crypto",
- "/chromium-os/chromiumos-design-docs/verified-boot-data-structures",
- "/chromium-os/chromiumos-design-docs/verify-prebuilts-using-content-hashing",
- "/chromium-os/containers-update",
- "/chromium-os/developer-guide",
- "/chromium-os/developer-guide/beaglebone",
- "/chromium-os/developer-guide/chromium-os-sandboxing",
- "/chromium-os/developer-guide/developer-workflow",
- "/chromium-os/developer-guide/directory-structure",
- "/chromium-os/developer-guide/disk-layout-format",
- "/chromium-os/developer-guide/gerrit-guide",
- "/chromium-os/developer-guide/go-in-chromium-os",
- "/chromium-os/developer-guide/upstreaming-drm-patches",
- "/chromium-os/developer-guide/using-serial-tty",
- "/chromium-os/developer-information-for-chrome-os-devices",
- "/chromium-os/developer-information-for-chrome-os-devices/acer-ac700-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/acer-c670-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/acer-c7-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/acer-c910-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/acer-cb5-311-chromebook-13",
- "/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox",
- "/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel",
- "/chromium-os/developer-information-for-chrome-os-devices/chromebook-pixel-2015",
- "/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information",
- "/chromium-os/developer-information-for-chrome-os-devices/cr-48-chrome-notebook-developer-information/how-to-boot-ubuntu-on-a-cr-48",
- "/chromium-os/developer-information-for-chrome-os-devices/custom-firmware",
- "/chromium-os/developer-information-for-chrome-os-devices/dell-chromebook-11",
- "/chromium-os/developer-information-for-chrome-os-devices/generic",
- "/chromium-os/developer-information-for-chrome-os-devices/h2c-firmware",
- "/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-11",
- "/chromium-os/developer-information-for-chrome-os-devices/hp-chromebook-14",
- "/chromium-os/developer-information-for-chrome-os-devices/hp-chromebox",
- "/chromium-os/developer-information-for-chrome-os-devices/hp-pavilion-14-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-11",
- "/chromium-os/developer-information-for-chrome-os-devices/lenovo-chromebook-n20",
- "/chromium-os/developer-information-for-chrome-os-devices/lenovo-thinkpad-x131e-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/lg-chromebase-22cv241-w",
- "/chromium-os/developer-information-for-chrome-os-devices/running-virtual-machines-on-your-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/samsung-chromebook-2",
- "/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge",
- "/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge/coreboot-vmx-hack",
- "/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/toshiba-cb30-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/tp-link-onhub-tgr1900",
- "/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook",
- "/chromium-os/developer-information-for-chrome-os-devices/workaround-for-battery-discharge-in-dev-mode",
- "/chromium-os/developing-apps-on-your-chromium-os-device",
- "/chromium-os/dingdong",
- "/chromium-os/donnettes",
- "/chromium-os/ec-development",
- "/chromium-os/ec-development/ap-ec-communication",
- "/chromium-os/ec-development/charge-manager",
- "/chromium-os/ec-development/ec-3po",
- "/chromium-os/ec-development/ec-image-geometry-spec",
- "/chromium-os/ec-development/getting-started-building-ec-images-quickly",
- "/chromium-os/ec-development/stack-size-analyzer",
- "/chromium-os/ec-development/usb-low-power-boot",
- "/chromium-os/external-bsp-hosting",
- "/chromium-os/extracting-a-recovery-kernel-from-a-recovery-image",
- "/chromium-os/firmware-porting-guide",
- "/chromium-os/firmware-porting-guide/1-overview",
- "/chromium-os/firmware-porting-guide/1-overview/the-crosfw-script",
- "/chromium-os/firmware-porting-guide/2-concepts",
- "/chromium-os/firmware-porting-guide/firmware-ec-write-protection",
- "/chromium-os/firmware-porting-guide/fmap",
- "/chromium-os/firmware-porting-guide/u-boot-drivers",
- "/chromium-os/firmware-summit",
- "/chromium-os/firmware-update",
- "/chromium-os/forced-re-enrollment",
- "/chromium-os/fwmp",
- "/chromium-os/gentoo-package-upgrade-process",
- "/chromium-os/getting-dev-hardware",
- "/chromium-os/getting-dev-hardware/dev-hardware-list",
- "/chromium-os/getting-started-with-glmark2",
- "/chromium-os/getting-started-with-platform2",
- "/chromium-os/gfx-test-notes",
- "/chromium-os/glitch-vulnerability-status",
- "/chromium-os/hoho",
- "/chromium-os/how-tos-and-troubleshooting",
- "/chromium-os/how-tos-and-troubleshooting/a-brief-perf-how-to",
- "/chromium-os/how-tos-and-troubleshooting/add-a-new-package",
- "/chromium-os/how-tos-and-troubleshooting/boot-mainline-kernel-on-veyron-jaq",
- "/chromium-os/how-tos-and-troubleshooting/building-chromium-browser",
- "/chromium-os/how-tos-and-troubleshooting/building-chromium-browser/chrome-api-keys-in-the-chroot",
- "/chromium-os/how-tos-and-troubleshooting/building-factory-test-images",
- "/chromium-os/how-tos-and-troubleshooting/chrome-with-libcras-on-gprecise",
- "/chromium-os/how-tos-and-troubleshooting/chromiumos-architecture-porting-guide",
- "/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide",
- "/chromium-os/how-tos-and-troubleshooting/chromiumos-board-porting-guide/private-boards",
- "/chromium-os/how-tos-and-troubleshooting/create-a-cl",
- "/chromium-os/how-tos-and-troubleshooting/creating-local-mirrors",
- "/chromium-os/how-tos-and-troubleshooting/debugging-3g",
- "/chromium-os/how-tos-and-troubleshooting/debugging-3g/manual-e362-setup",
- "/chromium-os/how-tos-and-troubleshooting/debugging-3g/modem-debugging-with-mmcli",
- "/chromium-os/how-tos-and-troubleshooting/debugging-features",
- "/chromium-os/how-tos-and-troubleshooting/debugging-hangs",
- "/chromium-os/how-tos-and-troubleshooting/debugging-tips",
- "/chromium-os/how-tos-and-troubleshooting/debugging-tips/host-file-access",
- "/chromium-os/how-tos-and-troubleshooting/debugging-tips/setting-up-tcpdump",
- "/chromium-os/how-tos-and-troubleshooting/debugging-tips/target-serial-access",
- "/chromium-os/how-tos-and-troubleshooting/developer-faq",
- "/chromium-os/how-tos-and-troubleshooting/extension-support-for-app-webviews",
- "/chromium-os/how-tos-and-troubleshooting/force-out-of-box-experience-oobe",
- "/chromium-os/how-tos-and-troubleshooting/get-a-3g-modem-running",
- "/chromium-os/how-tos-and-troubleshooting/git-helpers",
- "/chromium-os/how-tos-and-troubleshooting/git-server-side-information",
- "/chromium-os/how-tos-and-troubleshooting/git-troubleshooting",
- "/chromium-os/how-tos-and-troubleshooting/helper-scripts",
- "/chromium-os/how-tos-and-troubleshooting/install-software-on-base-images",
- "/chromium-os/how-tos-and-troubleshooting/kernel-configuration",
- "/chromium-os/how-tos-and-troubleshooting/kernel-faq",
- "/chromium-os/how-tos-and-troubleshooting/kernel-rebase-notes",
- "/chromium-os/how-tos-and-troubleshooting/llvm-clang-build",
- "/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus",
- "/chromium-os/how-tos-and-troubleshooting/mainline-kernel-on-kevin-chromebook-plus/chrome-os-mainline-kernel-on-kevin-chromebook-plus",
- "/chromium-os/how-tos-and-troubleshooting/measuring-boot-time-performance",
- "/chromium-os/how-tos-and-troubleshooting/modemmanager",
- "/chromium-os/how-tos-and-troubleshooting/network-based-development",
- "/chromium-os/how-tos-and-troubleshooting/nfs-quickstart",
- "/chromium-os/how-tos-and-troubleshooting/openvpn-manual-setup",
- "/chromium-os/how-tos-and-troubleshooting/portage-build-faq",
- "/chromium-os/how-tos-and-troubleshooting/remote-debugging",
- "/chromium-os/how-tos-and-troubleshooting/running-chromeos-image-under-virtual-machines",
- "/chromium-os/how-tos-and-troubleshooting/serial-debugging-howto",
- "/chromium-os/how-tos-and-troubleshooting/tsc-resynchronization",
- "/chromium-os/how-tos-and-troubleshooting/upgrade-ebuild-eapis",
- "/chromium-os/how-tos-and-troubleshooting/using-an-upstream-kernel-on-snow",
- "/chromium-os/how-tos-and-troubleshooting/using-the-dev-server",
- "/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/xbuddy-for-devserver",
- "/chromium-os/how-tos-and-troubleshooting/visualizing-the-rootfs",
- "/chromium-os/how-tos-and-troubleshooting/working-on-a-branch",
- "/chromium-os/how-tos-and-troubleshooting/working-with-your-overlay-faq",
- "/chromium-os/lazy-fp-restore-vulnerability-status",
- "/chromium-os/licensing",
- "/chromium-os/licensing/building-a-distro",
- "/chromium-os/licensing/licensing-for-chromiumos-developers",
- "/chromium-os/licensing/licensing-for-chromiumos-package-owners",
- "/chromium-os/mds-on-chromeos",
- "/chromium-os/meltdown-spectre-vulnerability-status",
- "/chromium-os/minimuffin",
- "/chromium-os/obsolete",
- "/chromium-os/obsolete/energy-aware-scheduling",
- "/chromium-os/obsolete/monitoring-tools",
- "/chromium-os/obsolete/portage-package-status",
- "/chromium-os/obsolete/quiche-notes",
- "/chromium-os/obsolete/recall",
- "/chromium-os/obsolete/using-eclipse-to-debug-chrome-on-chrome-os",
- "/chromium-os/obsolete/using-sdk-standalone",
- "/chromium-os/packages",
- "/chromium-os/packages/biod",
- "/chromium-os/packages/crash-reporting",
- "/chromium-os/packages/crash-reporting/debugging-a-minidump",
- "/chromium-os/packages/crash-reporting/faq",
- "/chromium-os/packages/crash-reporting/stack-traces-from-chrome-os-crash-dumps",
- "/chromium-os/packages/cros-flashrom",
- "/chromium-os/packages/implicit-system",
- "/chromium-os/packages/libchrome",
- "/chromium-os/packages/libchromeos",
- "/chromium-os/packages/portage",
- "/chromium-os/packages/power_manager",
- "/chromium-os/packages/power_manager/battery-notifications",
- "/chromium-os/packages/power_manager/inactivity-delays",
- "/chromium-os/packages/power_manager/input",
- "/chromium-os/packages/power_manager/keyboard-backlight",
- "/chromium-os/packages/power_manager/screen-brightness",
- "/chromium-os/packages/power_manager/suspend-and-resume",
- "/chromium-os/packages/pydevi2c",
- "/chromium-os/plankton",
- "/chromium-os/platform",
- "/chromium-os/poking-around-your-chrome-os-device",
- "/chromium-os/profiling-in-chromeos",
- "/chromium-os/python-mock",
- "/chromium-os/python-style-guidelines",
- "/chromium-os/quick-start-guide",
- "/chromium-os/security-advisories",
- "/chromium-os/servo",
- "/chromium-os/servo/servo-v2",
- "/chromium-os/servo/servomicro",
- "/chromium-os/servo/servov4",
- "/chromium-os/shell-style-guidelines",
- "/chromium-os/sideload-android-apps-on-chromebook",
- "/chromium-os/stadia-on-chromebooks",
- "/chromium-os/testing",
- "/chromium-os/testing/adding-unit-tests-to-the-build",
- "/chromium-os/testing/afe-rpc-infrastructure",
- "/chromium-os/testing/anatomy-of-test-test",
- "/chromium-os/testing/arcplusplus-testing",
- "/chromium-os/testing/autoserv-packaging",
- "/chromium-os/testing/autotest-and-ebuilds",
- "/chromium-os/testing/autotest-design-patterns",
- "/chromium-os/testing/autotest-developer-faq",
- "/chromium-os/testing/autotest-developer-faq/autotest-server-usage",
- "/chromium-os/testing/autotest-developer-faq/setup-autotest-server",
- "/chromium-os/testing/autotest-graphics-documentation",
- "/chromium-os/testing/autotest-keyvals",
- "/chromium-os/testing/autotest-keyvals/perf-keyvals",
- "/chromium-os/testing/autotest-user-doc",
- "/chromium-os/testing/building-and-running-tests",
- "/chromium-os/testing/cellular-testing",
- "/chromium-os/testing/chamelium",
- "/chromium-os/testing/chamelium-audio-board",
- "/chromium-os/testing/chamelium-audio-streaming",
- "/chromium-os/testing/chamelium-usb-audio",
- "/chromium-os/testing/collecting-stats-for-graphite",
- "/chromium-os/testing/common-testing-workflows",
- "/chromium-os/testing/cros-autotest",
- "/chromium-os/testing/dynamic-suites",
- "/chromium-os/testing/dynamic-suites/dynamic-test-suites",
- "/chromium-os/testing/dynamic-suites/test-dependencies-in-dynamic-suites",
- "/chromium-os/testing/dynamic-test-suites",
- "/chromium-os/testing/existing-autotest-utilities",
- "/chromium-os/testing/gs-offloader",
- "/chromium-os/testing/hardware_qualification",
- "/chromium-os/testing/infrastructure-components",
- "/chromium-os/testing/infrastructure-components/keyvals",
- "/chromium-os/testing/moblab",
- "/chromium-os/testing/moblab-faq",
- "/chromium-os/testing/moblab/cpcon-release-notes",
- "/chromium-os/testing/moblab/faft-testing-with-moblab",
- "/chromium-os/testing/moblab/mob-monitor",
- "/chromium-os/testing/moblab/overview-of-moblab",
- "/chromium-os/testing/moblab/pre-requirements-of-issue-creation",
- "/chromium-os/testing/moblab/releasenotes",
- "/chromium-os/testing/moblab/setup",
- "/chromium-os/testing/moblab/user-manual",
- "/chromium-os/testing/moblab/usingmoblab",
- "/chromium-os/testing/moblab/view-test-result-vis-wmatrix",
- "/chromium-os/testing/perf-data",
- "/chromium-os/testing/perf-regression-detection",
- "/chromium-os/testing/power-testing",
- "/chromium-os/testing/power-testing/pltp",
- "/chromium-os/testing/qemu-unittests",
- "/chromium-os/testing/running-smoke-suite-on-a-vm-image",
- "/chromium-os/testing/running-unit-tests-on-the-target",
- "/chromium-os/testing/specific-test-documentation",
- "/chromium-os/testing/suite_scheduler",
- "/chromium-os/testing/suite_scheduler-1",
- "/chromium-os/testing/test-code-labs",
- "/chromium-os/testing/test-code-labs/autotest-client-tests",
- "/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-client-helper-libraries",
- "/chromium-os/testing/test-code-labs/autotest-client-tests/autotest-results-logs",
- "/chromium-os/testing/test-code-labs/autotest-client-tests/basic-ebuild-troubleshooting",
- "/chromium-os/testing/test-code-labs/dynamic-suite-codelab",
- "/chromium-os/testing/test-code-labs/server-side-test",
- "/chromium-os/testing/test-dependencies-in-dynamic-suites",
- "/chromium-os/testing/test-lab-setup",
- "/chromium-os/testing/test-suites",
- "/chromium-os/testing/writing-and-developing-tests",
- "/chromium-os/testing/writing-and-developing-tests/test-deps-faq",
- "/chromium-os/testing/writing-and-developing-tests/testing-your-changes-faq",
- "/chromium-os/testing/writing-and-developing-tests/writing-tests-faq",
- "/chromium-os/tips-and-tricks-for-chromium-os-developers",
- "/chromium-os/tpm_firmware_update",
- "/chromium-os/twinkie",
- "/chromium-os/twinkie/build-sigrok-and-pulseview-from-sources",
- "/chromium-os/twinkie/older-sigrok-packages",
- "/chromium-os/type-c-on-rk3399-chromebooks",
- "/chromium-os/u2f-ecdsa-vulnerability",
- "/chromium-os/unchecked_tpm_reset",
- "/chromium-os/user-experience",
- "/chromium-os/user-experience/access-points",
- "/chromium-os/user-experience/content-browser",
- "/chromium-os/user-experience/form-factors",
- "/chromium-os/user-experience/form-factors/tablet",
- "/chromium-os/user-experience/opensave-dialogs",
- "/chromium-os/user-experience/panels",
- "/chromium-os/user-experience/settings",
- "/chromium-os/user-experience/shelf",
- "/chromium-os/user-experience/system-status-icons",
- "/chromium-os/user-experience/tab-ui",
- "/chromium-os/user-experience/window-management",
- "/chromium-os/user-experience/window-ui",
- "/chromium-os/usi-enabled-devices",
- "/chromium-os/works-with-chromebook-certified",
- "/chromium-projects",
- "/conduct",
- "/contact",
- "/developers",
- "/developers/Web-page-views",
- "/developers/about-signin-internals",
- "/developers/accessibility",
- "/developers/accessibility/chromevox",
- "/developers/accessibility/chromevox-on-desktop-linux",
- "/developers/accessibility/html-accessibility",
- "/developers/accessibility/linux-accessibility",
- "/developers/accessibility/mac-accessibility",
- "/developers/accessibility/testing",
- "/developers/accessibility/testing/automated-testing",
- "/developers/accessibility/testing/automated-testing/ax-inspect",
- "/developers/accessibility/testing/axe-core",
- "/developers/accessibility/views-accessibility",
- "/developers/accessibility/webkit-accessibility",
- "/developers/accessibility/webui-accessibility-audit",
- "/developers/accessibility/windows-accessibility",
- "/developers/adding-3rd-party-libraries",
- "/developers/android-eclipse-dev",
- "/developers/androidwebview",
- "/developers/androidwebview/android-webview-beta",
- "/developers/androidwebview/webview-ct-bug",
- "/developers/applescript",
- "/developers/bisect-builds-py",
- "/developers/blink-gc-plugin-errors",
- "/developers/calendar",
- "/developers/change-logs",
- "/developers/checkstyle",
- "/developers/chromium-string-usage",
- "/developers/clang-mac",
- "/developers/class-diagram-webkit-webcore-to-chrome-browser",
- "/developers/cluster-telemetry",
- "/developers/code-browsing-in-chromium",
- "/developers/code-coverage",
- "/developers/coding-style",
- "/developers/coding-style/chromium-style-checker-errors",
- "/developers/coding-style/cocoa-dos-and-donts",
- "/developers/coding-style/cpp-dos-and-donts",
- "/developers/coding-style/important-abstractions-and-data-structures",
- "/developers/coding-style/java",
- "/developers/committers-responsibility",
- "/developers/common-terms--techno-babble",
- "/developers/content-module",
- "/developers/content-module/content-api",
- "/developers/contributing-code",
- "/developers/contributing-code/-bug-syntax",
- "/developers/contributing-code/direct-commit",
- "/developers/contributing-code/external-contributor-checklist",
- "/developers/contributing-code/flag-ownership",
- "/developers/contributing-code/minimizing-review-lag-across-time-zones",
- "/developers/contributing-code/watchlists",
- "/developers/core-principles",
- "/developers/core-principles/no-hidden-preferences",
- "/developers/cpp-in-chromium-101-codelab",
- "/developers/crash-reports",
- "/developers/crash-reports/crash-with-invalid-handle",
- "/developers/crash-reports/handle-file-upload-scheme",
- "/developers/creating-and-using-profiles",
- "/developers/creating-v8-profiling-timeline-plots",
- "/developers/debugging-with-crash-keys",
- "/developers/decoding-crash-dumps",
- "/developers/deep-memory-profiler",
- "/developers/deep-memory-profiler/cpp-object-type-identifier",
- "/developers/design-documents",
- "/developers/design-documents/64-bit-support",
- "/developers/design-documents/about-conflicts",
- "/developers/design-documents/accessibility",
- "/developers/design-documents/accessibility/tracker",
- "/developers/design-documents/advancedspellchecker",
- "/developers/design-documents/android-jni",
- "/developers/design-documents/applescript",
- "/developers/design-documents/appmode-mac",
- "/developers/design-documents/aura",
- "/developers/design-documents/aura-desktop-window-manager",
- "/developers/design-documents/aura/ash-color-chooser",
- "/developers/design-documents/aura/aura-and-shell-dependencies",
- "/developers/design-documents/aura/aura-overview",
- "/developers/design-documents/aura/client-api",
- "/developers/design-documents/aura/event-handling",
- "/developers/design-documents/aura/focus-and-activation",
- "/developers/design-documents/aura/gesture-recognizer",
- "/developers/design-documents/aura/gesture-recognizer/gesture-recognizer-tests",
- "/developers/design-documents/aura/graphics-architecture",
- "/developers/design-documents/aura/layout-managers",
- "/developers/design-documents/aura/multi-desktop",
- "/developers/design-documents/aura/system-tray",
- "/developers/design-documents/aura/views",
- "/developers/design-documents/auto-throttled-screen-capture-and-mirroring",
- "/developers/design-documents/automaticspellingcorrection",
- "/developers/design-documents/blink-coordinate-spaces",
- "/developers/design-documents/blink-scrollbarthemes",
- "/developers/design-documents/blocking-cross-site-documents",
- "/developers/design-documents/bluetooth-design-docs",
- "/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram",
- "/developers/design-documents/browser-components",
- "/developers/design-documents/browser-components/cookbook",
- "/developers/design-documents/browser-window",
- "/developers/design-documents/chaps-technical-design",
- "/developers/design-documents/chromeviews",
- "/developers/design-documents/chromium-graphics",
- "/developers/design-documents/chromium-graphics/debugging-with-nsight",
- "/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization",
- "/developers/design-documents/chromium-graphics/mac-delegated-rendering",
- "/developers/design-documents/chromium-graphics/mac-impl-events",
- "/developers/design-documents/chromium-graphics/surfaces",
- "/developers/design-documents/command-dispatch-mac",
- "/developers/design-documents/compositor-hit-testing",
- "/developers/design-documents/compositor-thread-architecture",
- "/developers/design-documents/confirm-to-quit-experiment",
- "/developers/design-documents/constrained-popup-windows",
- "/developers/design-documents/conventions-and-patterns-for-multi-platform-development",
- "/developers/design-documents/cookbook",
- "/developers/design-documents/cookie-prompt-replacement",
- "/developers/design-documents/cookie-split-loading",
- "/developers/design-documents/cookies-and-prerender",
- "/developers/design-documents/create-amazing-password-forms",
- "/developers/design-documents/crypto",
- "/developers/design-documents/dependency-management",
- "/developers/design-documents/desktop-notifications",
- "/developers/design-documents/desktop-notifications/api-specification",
- "/developers/design-documents/directwrite-font-cache",
- "/developers/design-documents/directwrite-font-proxy",
- "/developers/design-documents/displaying-a-web-page-in-chrome",
- "/developers/design-documents/dns-prefetching",
- "/developers/design-documents/download",
- "/developers/design-documents/downloadmanagersequences",
- "/developers/design-documents/embedding-flash-fullscreen-in-the-browser-window",
- "/developers/design-documents/encrypted-partition-recovery",
- "/developers/design-documents/experiments",
- "/developers/design-documents/extensions",
- "/developers/design-documents/extensions/how-the-extension-system-works",
- "/developers/design-documents/extensions/how-the-extension-system-works/accessibility",
- "/developers/design-documents/extensions/how-the-extension-system-works/api-pattern-design-doc",
- "/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension",
- "/developers/design-documents/extensions/how-the-extension-system-works/default-apps",
- "/developers/design-documents/extensions/how-the-extension-system-works/docs",
- "/developers/design-documents/extensions/how-the-extension-system-works/docs/how-docs-are-served",
- "/developers/design-documents/extensions/how-the-extension-system-works/docs/how-to-update-the-release-notes",
- "/developers/design-documents/extensions/how-the-extension-system-works/extension-manifesto",
- "/developers/design-documents/extensions/how-the-extension-system-works/i18n",
- "/developers/design-documents/extensions/proposed-changes",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/auto-install-of-android-companion-extensions",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/bluetooth-extension-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/browser-keys",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/clear",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/context-menu-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/desktop-notification-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/downloads-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/executecontentscript-proposal",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/font-settings",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/get-extension-views-by-type-proposal",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/gleam-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/history-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/i18n-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/input-method-editor",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/instructions-for-api-shepherds",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/language-detection",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/managed-storage-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/media-gallery",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/notifications-of-web-request-and-navigation",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/offscreen-tabs",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/omnibox-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/panels",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/power-management-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/preference-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/privacy",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/processes-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/profile-extension-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/proposal-chrome-extensions-cookies-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/push-messaging",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/rlz-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/settings",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/settings_pages",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/system-indicator-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/systeminfo",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/text-translate-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/usb-api",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/webnavigation-v2",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture",
- "/developers/design-documents/extensions/proposed-changes/apis-under-development/window-management",
- "/developers/design-documents/extensions/proposed-changes/apiwishlist",
- "/developers/design-documents/extensions/proposed-changes/creating-new-apis",
- "/developers/design-documents/extensions/proposed-changes/extension-system-changes",
- "/developers/design-documents/extensions/proposed-changes/extension-system-changes/breaking-changes",
- "/developers/design-documents/extensions/proposed-changes/extension-system-changes/install-dialog-2",
- "/developers/design-documents/extensions/proposed-changes/spellcheck-api",
- "/developers/design-documents/find-bar",
- "/developers/design-documents/first-run-customizations",
- "/developers/design-documents/focus-and-activation-in-views-and-aura",
- "/developers/design-documents/form-autofill",
- "/developers/design-documents/form-autofill/internationalization-of-autofill",
- "/developers/design-documents/form-styles-that-chromium-understands",
- "/developers/design-documents/fullscreen-mac",
- "/developers/design-documents/generic-sensor",
- "/developers/design-documents/generic-theme-for-test-shell",
- "/developers/design-documents/google-cloud-print-proxy-design",
- "/developers/design-documents/gpu-accelerated-compositing-in-chrome",
- "/developers/design-documents/gpu-accelerated-compositing-in-chrome/gpu-architecture-roadmap",
- "/developers/design-documents/gpu-command-buffer",
- "/developers/design-documents/gpu-memory-buffer",
- "/developers/design-documents/graphics-and-skia",
- "/developers/design-documents/greasemonkey",
- "/developers/design-documents/high-dpi-resources",
- "/developers/design-documents/http-authentication",
- "/developers/design-documents/http-authentication/writing-a-spnego-authenticator-for-chrome-on-android",
- "/developers/design-documents/idealized-mediastream-design",
- "/developers/design-documents/idl-build",
- "/developers/design-documents/idl-compiler",
- "/developers/design-documents/idn-in-google-chrome",
- "/developers/design-documents/image-filters",
- "/developers/design-documents/immersive-fullscreen",
- "/developers/design-documents/impl-side-painting",
- "/developers/design-documents/indexeddb",
- "/developers/design-documents/indexeddb/indexeddbbackup",
- "/developers/design-documents/info-bars",
- "/developers/design-documents/instant",
- "/developers/design-documents/instant/instant-support",
- "/developers/design-documents/inter-process-communication",
- "/developers/design-documents/iosurface-meeting-notes",
- "/developers/design-documents/isolated-sites",
- "/developers/design-documents/java-resources-on-android",
- "/developers/design-documents/layered-components-design",
- "/developers/design-documents/layered-components-technical-approach",
- "/developers/design-documents/layered-components-technical-approach/making-autofill-into-a-layered-component",
- "/developers/design-documents/layout-tests-results-dashboard",
- "/developers/design-documents/linuxresourcesandlocalizedstrings",
- "/developers/design-documents/mac-occlusion",
- "/developers/design-documents/mac-plugins",
- "/developers/design-documents/mac-xib-files",
- "/developers/design-documents/making-chrome-independent-of-extensions",
- "/developers/design-documents/media-router",
- "/developers/design-documents/mouse-lock",
- "/developers/design-documents/multi-column-layout",
- "/developers/design-documents/multi-process-architecture",
- "/developers/design-documents/multi-process-architecture/how-to-add-new-features",
- "/developers/design-documents/multi-process-resource-loading",
- "/developers/design-documents/native-controls",
- "/developers/design-documents/network-settings",
- "/developers/design-documents/network-stack",
- "/developers/design-documents/network-stack/cookiemonster",
- "/developers/design-documents/network-stack/debugging-net-proxy",
- "/developers/design-documents/network-stack/disk-cache",
- "/developers/design-documents/network-stack/disk-cache/disk-cache-benchmarking",
- "/developers/design-documents/network-stack/disk-cache/disk-cache-v3",
- "/developers/design-documents/network-stack/disk-cache/very-simple-backend",
- "/developers/design-documents/network-stack/http-authentication-throttling",
- "/developers/design-documents/network-stack/http-cache",
- "/developers/design-documents/network-stack/http-pipelining",
- "/developers/design-documents/network-stack/netlog",
- "/developers/design-documents/network-stack/network-bug-triage",
- "/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage",
- "/developers/design-documents/network-stack/network-bug-triage/downloads-bug-triage/salient-bug-list",
- "/developers/design-documents/network-stack/network-stack-objectives",
- "/developers/design-documents/network-stack/network-stack-use-in-chromium",
- "/developers/design-documents/network-stack/preconnect",
- "/developers/design-documents/network-stack/proxy-settings-fallback",
- "/developers/design-documents/network-stack/socks-proxy",
- "/developers/design-documents/omnibox-ime-coordination",
- "/developers/design-documents/omnibox-prefetch-for-default-search-engines",
- "/developers/design-documents/oop-iframes",
- "/developers/design-documents/oop-iframes/framehandle",
- "/developers/design-documents/oop-iframes/oop-iframes-rendering",
- "/developers/design-documents/os-x-interprocess-communication",
- "/developers/design-documents/os-x-password-manager-keychain-integration",
- "/developers/design-documents/password-generation",
- "/developers/design-documents/pepper-plugin-implementation",
- "/developers/design-documents/per-page-suborigins",
- "/developers/design-documents/plugin-architecture",
- "/developers/design-documents/preferences",
- "/developers/design-documents/prerender",
- "/developers/design-documents/print-preview",
- "/developers/design-documents/printing",
- "/developers/design-documents/process-models",
- "/developers/design-documents/profile-architecture",
- "/developers/design-documents/profile-chooser-menu",
- "/developers/design-documents/rappor",
- "/developers/design-documents/rendering-architecture-diagrams",
- "/developers/design-documents/rendering-benchmarks",
- "/developers/design-documents/rendertext",
- "/developers/design-documents/safebrowsing",
- "/developers/design-documents/safesearch",
- "/developers/design-documents/sandbox",
- "/developers/design-documents/sandbox/Sandbox-FAQ",
- "/developers/design-documents/sandbox/osx-sandboxing-design",
- "/developers/design-documents/sane-time",
- "/developers/design-documents/secure-web-proxy",
- "/developers/design-documents/service-processes",
- "/developers/design-documents/site-engagement",
- "/developers/design-documents/site-isolation",
- "/developers/design-documents/software-updates-courgette",
- "/developers/design-documents/startup",
- "/developers/design-documents/structure-of-layered-components-within-the-chromium-codebase",
- "/developers/design-documents/sync",
- "/developers/design-documents/sync/embassy",
- "/developers/design-documents/sync/sync-data-best-practices",
- "/developers/design-documents/sync/syncable-service-api",
- "/developers/design-documents/sync/unified-sync-and-storage-overview",
- "/developers/design-documents/system-dictionary-pop-up-architecture",
- "/developers/design-documents/tab-strip-mac",
- "/developers/design-documents/tabtastic-2-requirements",
- "/developers/design-documents/themes",
- "/developers/design-documents/threading",
- "/developers/design-documents/threading/suble-threading-bugs-and-patterns-to-avoid-them",
- "/developers/design-documents/time-safety-and-readability",
- "/developers/design-documents/time-sources",
- "/developers/design-documents/tpm-usage",
- "/developers/design-documents/translate",
- "/developers/design-documents/ui-development-practices",
- "/developers/design-documents/ui-localization",
- "/developers/design-documents/ui-localization/mac-notes",
- "/developers/design-documents/ui-mirroring-infrastructure",
- "/developers/design-documents/user-scripts",
- "/developers/design-documents/video",
- "/developers/design-documents/video-capture",
- "/developers/design-documents/video-playback-and-compositor",
- "/developers/design-documents/views-rect-based-targeting",
- "/developers/design-documents/views-windowing",
- "/developers/design-documents/web-midi",
- "/developers/design-documents/web-nfc",
- "/developers/design-documents/webnavigation-api-internals",
- "/developers/design-documents/widget-refactor",
- "/developers/design-documents/wrench-menu-mac",
- "/developers/design-documents/xss-auditor",
- "/developers/diagnostics",
- "/developers/diagnostics/gcf_troubleshooting",
- "/developers/diagnostics/installer-error-strings",
- "/developers/discussion-groups",
- "/developers/dns-over-https",
- "/developers/enterprise-changes",
- "/developers/experimental-branches",
- "/developers/extensions-deployment-faq",
- "/developers/f-script-anywhere",
- "/developers/fast-intro-to-git-internals",
- "/developers/finding-somebody-who-knows-how-a-piece-of-code-works",
- "/developers/generated-files",
- "/developers/gerrit-guide",
- "/developers/git-cache",
- "/developers/github-collaboration",
- "/developers/gn-build-configuration",
- "/developers/gyp-environment-variables",
- "/developers/how-tos",
- "/developers/how-tos/-quickly-building-for-cros-arm-x64",
- "/developers/how-tos/android-build-instructions",
- "/developers/how-tos/angle-infra",
- "/developers/how-tos/angle-wrangling",
- "/developers/how-tos/api-keys",
- "/developers/how-tos/build-instructions-android-webview",
- "/developers/how-tos/build-instructions-cast",
- "/developers/how-tos/build-instructions-chromeos",
- "/developers/how-tos/build-instructions-windows",
- "/developers/how-tos/chrome-frame-cfinstall",
- "/developers/how-tos/chrome-frame-getting-started",
- "/developers/how-tos/chromium-modularization",
- "/developers/how-tos/closure-compilation",
- "/developers/how-tos/component-build",
- "/developers/how-tos/cscope-emacs-example-linux-setup",
- "/developers/how-tos/debugging-gpu-related-code",
- "/developers/how-tos/debugging-on-android",
- "/developers/how-tos/debugging-on-os-x",
- "/developers/how-tos/debugging-on-os-x/building-with-ninja-debugging-with-xcode",
- "/developers/how-tos/debugging-on-windows",
- "/developers/how-tos/debugging-on-windows/example-of-working-with-a-dump",
- "/developers/how-tos/debugging-on-windows/graphics-debugging-in-visual-studio-2013",
- "/developers/how-tos/debugging-on-windows/windbg-help",
- "/developers/how-tos/depottools",
- "/developers/how-tos/depottools/gclient",
- "/developers/how-tos/depottools/presubmit-scripts",
- "/developers/how-tos/drover",
- "/developers/how-tos/editing-the-spell-checking-dictionaries",
- "/developers/how-tos/enterprise",
- "/developers/how-tos/enterprise/adding-new-policies",
- "/developers/how-tos/enterprise/protobuf-encoded-policy-blobs",
- "/developers/how-tos/enterprise/running-the-cloud-policy-test-server",
- "/developers/how-tos/file-web-bluetooth-bugs",
- "/developers/how-tos/get-the-code",
- "/developers/how-tos/get-the-code-v2",
- "/developers/how-tos/get-the-code/gclient-managed-mode",
- "/developers/how-tos/get-the-code/multiple-working-directories",
- "/developers/how-tos/get-the-code/working-with-branches",
- "/developers/how-tos/get-the-code/working-with-nested-repos",
- "/developers/how-tos/get-the-code/working-with-release-branches",
- "/developers/how-tos/getting-around-the-chrome-source-code",
- "/developers/how-tos/gpu-gardening",
- "/developers/how-tos/gpu-overdraw-debugging-tool",
- "/developers/how-tos/gpu-wrangling",
- "/developers/how-tos/gpu-wrangling/check_gpu_bots-script",
- "/developers/how-tos/how-to-set-up-visual-studio-debugger-visualizers",
- "/developers/how-tos/inspecting-ash",
- "/developers/how-tos/install-depot-tools",
- "/developers/how-tos/leak-gdi-object-in-windows",
- "/developers/how-tos/mac-development",
- "/developers/how-tos/make-a-web-standards-proposal",
- "/developers/how-tos/old-get-the-code",
- "/developers/how-tos/order-file-development-guide",
- "/developers/how-tos/retrieving-crash-reports-on-ios",
- "/developers/how-tos/run-chromium-with-flags",
- "/developers/how-tos/run-mojo-shell",
- "/developers/how-tos/scopedlogger",
- "/developers/how-tos/submitting-a-performance-bug",
- "/developers/how-tos/trace-event-profiling-tool",
- "/developers/how-tos/trace-event-profiling-tool/anatomy-of-jank",
- "/developers/how-tos/trace-event-profiling-tool/frame-viewer",
- "/developers/how-tos/trace-event-profiling-tool/memory",
- "/developers/how-tos/trace-event-profiling-tool/memory/gpu-memory",
- "/developers/how-tos/trace-event-profiling-tool/memory/heap-profiling-with-memory-infra",
- "/developers/how-tos/trace-event-profiling-tool/memory/howto-adding-memory-infra-tracing-to-a-component",
- "/developers/how-tos/trace-event-profiling-tool/memory/startup-tracing-with-memory-profiling",
- "/developers/how-tos/trace-event-profiling-tool/recording-tracing-runs",
- "/developers/how-tos/trace-event-profiling-tool/saving-skp-s-from-chromium",
- "/developers/how-tos/trace-event-profiling-tool/trace-event-reading",
- "/developers/how-tos/trace-event-profiling-tool/tracing-event-instrumentation",
- "/developers/how-tos/trace-event-profiling-tool/using-frameviewer",
- "/developers/how-tos/using-drmemory",
- "/developers/how-tos/using-r-to-reduce-page-cycler-regressions",
- "/developers/how-tos/vectorized-icons-in-native-chrome-ui",
- "/developers/how-tos/visualstudio-tricks",
- "/developers/how-tos/webkit-gardening",
- "/developers/installer",
- "/developers/irc",
- "/developers/javascript-unittests",
- "/developers/jinja",
- "/developers/leak-detection",
- "/developers/learning-your-way-around-the-code",
- "/developers/libraries-guide",
- "/developers/linux-technical-faq",
- "/developers/lock-and-condition-variable",
- "/developers/mandoline",
- "/developers/mandoline/build",
- "/developers/markdown-documentation",
- "/developers/md5-certificate-statistics",
- "/developers/meet-the-web-platform-companion",
- "/developers/memory",
- "/developers/memory-bloat",
- "/developers/memory-usage-backgrounder",
- "/developers/memory_watcher",
- "/developers/mus-ash",
- "/developers/new-features",
- "/developers/npapi-deprecation",
- "/developers/os-x-keyboard-handling",
- "/developers/owners-files",
- "/developers/page-sets-and-benchmarks",
- "/developers/pepper-api-best-practices",
- "/developers/polymer-0-8",
- "/developers/polymer-1-0",
- "/developers/postmortems",
- "/developers/profiling-chromium-and-webkit",
- "/developers/profiling-flame-graphs",
- "/developers/public-calendar-for-meetings-discussing-new-ideas",
- "/developers/quarantined-pages",
- "/developers/quarantined-pages/meeting-notes",
- "/developers/quick-reference",
- "/developers/recent-changes-credential-management-api",
- "/developers/rendering-performance-case-study-1",
- "/developers/rtl-in-webkit",
- "/developers/severity-guidelines",
- "/developers/shutdown",
- "/developers/slack",
- "/developers/slickedit-editor-notes",
- "/developers/smart-pointer-guidelines",
- "/developers/speed-hall-of-fame",
- "/developers/speed-infra",
- "/developers/speed-infra/perf-bug-faq",
- "/developers/status-update-email-best-practices",
- "/developers/sublime-text",
- "/developers/sync-diagnostics",
- "/developers/tech-talk-videos",
- "/developers/tech-talk-videos/release-process",
- "/developers/technical-discussion-groups",
- "/developers/telemetry",
- "/developers/telemetry/add_a_measurement",
- "/developers/telemetry/diagnosing-test-failures",
- "/developers/telemetry/performance-try-bots",
- "/developers/telemetry/profiling",
- "/developers/telemetry/record_a_page_set",
- "/developers/telemetry/run_locally",
- "/developers/telemetry/running-telemetry-on-chrome-os",
- "/developers/telemetry/telemetry-feature-guidelines",
- "/developers/telemetry/telemetry-mac-keychain-setup",
- "/developers/telemetry/telemetry-profile-generation",
- "/developers/telemetry/telemetry-unittests",
- "/developers/telemetry/upload_to_cloud_storage",
- "/developers/testing",
- "/developers/testing/adding-performance-tests",
- "/developers/testing/adding-tests-to-the-main-waterfall",
- "/developers/testing/addresssanitizer",
- "/developers/testing/android-tests",
- "/developers/testing/android-tests/android-webview-tests",
- "/developers/testing/android-tests/testing-android-code-that-crosses-the-c-java-boundary",
- "/developers/testing/browser-tests",
- "/developers/testing/changedashboard",
- "/developers/testing/chrome-test-apis",
- "/developers/testing/chromium-build-infrastructure",
- "/developers/testing/chromium-build-infrastructure/performance-test-plots",
- "/developers/testing/chromium-build-infrastructure/repro-a-build",
- "/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot",
- "/developers/testing/commit-queue",
- "/developers/testing/commit-queue/chromium_trybot-json",
- "/developers/testing/commit-queue/design",
- "/developers/testing/commit-queue/integration-with-rietveld",
- "/developers/testing/contacting-a-trooper",
- "/developers/testing/control-flow-integrity",
- "/developers/testing/control-flow-integrity/overhead",
- "/developers/testing/dr-fuzz",
- "/developers/testing/fake-bidi",
- "/developers/testing/flakiness-dashboard",
- "/developers/testing/frame-rate-test",
- "/developers/testing/fuzzers",
- "/developers/testing/gpu-testing",
- "/developers/testing/gpu-testing/gpu-bot-details",
- "/developers/testing/instrumented-libraries-for-dynamic-tools",
- "/developers/testing/isolated-testing",
- "/developers/testing/isolated-testing/deterministic-builds",
- "/developers/testing/isolated-testing/for-swes",
- "/developers/testing/isolated-testing/infrastructure",
- "/developers/testing/leaksanitizer",
- "/developers/testing/libfuzzer",
- "/developers/testing/memorysanitizer",
- "/developers/testing/multi-process-ram-usage-analysis-on-android",
- "/developers/testing/no-compile-tests",
- "/developers/testing/page-heap-for-chrome",
- "/developers/testing/running-tests",
- "/developers/testing/threadsanitizer-tsan-v2",
- "/developers/testing/time-complexity-tests",
- "/developers/testing/try-server-usage",
- "/developers/testing/undefinedbehaviorsanitizer",
- "/developers/testing/webgl-conformance-tests",
- "/developers/testing/webkit-layout-tests",
- "/developers/testing/webkit-layout-tests/content-shell",
- "/developers/testing/webkit-layout-tests/identifying-tests-that-depend-on-order",
- "/developers/testing/webkit-layout-tests/testexpectations",
- "/developers/testing/webkit-layout-tests/using-breakpad-with-content-shell",
- "/developers/testing/windows-installer-tests",
- "/developers/the-json-test-results-format",
- "/developers/the-rendering-critical-path",
- "/developers/threaded-task-tracking",
- "/developers/ticket-milestone-punting",
- "/developers/tools-we-use-in-chromium",
- "/developers/tools-we-use-in-chromium/grit",
- "/developers/tools-we-use-in-chromium/grit/grit-design-overview",
- "/developers/tools-we-use-in-chromium/grit/grit-regression-test-plan",
- "/developers/tools-we-use-in-chromium/grit/grit-users-guide",
- "/developers/tools-we-use-in-chromium/grit/how-to-contribute-to-grit",
- "/developers/tree-sheriffs",
- "/developers/tree-sheriffs/chrome-in-chromeos-gardening",
- "/developers/tree-sheriffs/handling-a-failing-test",
- "/developers/tree-sheriffs/perf-sheriffs",
- "/developers/tree-sheriffs/perf-sheriffs/bisecting-performance-regressions",
- "/developers/tree-sheriffs/sheriff-details-chromium",
- "/developers/tree-sheriffs/sheriff-details-chromium-os",
- "/developers/tree-sheriffs/sheriff-o-matic",
- "/developers/tree-sheriffs/sheriff-philosophy",
- "/developers/tree-sheriffs/sheriffing-bug-queues",
- "/developers/triggered-reset-api",
- "/developers/u-boot",
- "/developers/updating-webui-for-material-design",
- "/developers/updating-webui-for-material-design/settings-material-design",
- "/developers/updating-webui-for-material-design/testing-asynchronous-ui",
- "/developers/updating-webui-for-material-design/testing-webui-with-mocha",
- "/developers/updating-webui-for-material-design/using-polymer-icons",
- "/developers/useful-extensions",
- "/developers/using-atom-as-your-ide",
- "/developers/using-eclipse-with-chromium",
- "/developers/using-requestautocomplete",
- "/developers/version-numbers",
- "/developers/web-development-style-guide",
- "/developers/web-idl-interfaces",
- "/developers/web-intents-in-chrome",
- "/developers/web-platform-status",
- "/developers/web-platform-status/forms",
- "/developers/webkit-core-projects",
- "/developers/webui",
- "/developers/windows-binary-sizes",
- "/devtools",
- "/devtools/announcements",
- "/devtools/breakpoints-tutorial",
- "/devtools/capturing-a-timeline-trace",
- "/devtools/google-chrome-developer-tools-tutorial",
- "/embeddedsearch",
- "/events",
- "/events/blinkon-14",
- "/events/blinkon-15",
- "/events/blinkon-resources",
- "/flag-ownership",
- "/flash-roadmap",
- "/flash-roadmap/deprecating-wildcards",
- "/flash-roadmap/flash-usage-trends",
- "/for-testers",
- "/for-testers/bug-reporting-guidelines",
- "/for-testers/bug-reporting-guidelines/chromium-bug-labels",
- "/for-testers/bug-reporting-guidelines/hanging-tabs",
- "/for-testers/bug-reporting-guidelines/reporting-crash-bug",
- "/for-testers/bug-reporting-guidelines/triage-best-practices",
- "/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document",
- "/for-testers/bug-reporting-guidlines-for-the-mac-linux-builds",
- "/for-testers/command-line-flags",
- "/for-testers/enable-logging",
- "/for-testers/faft",
- "/for-testers/frontend-testing",
- "/for-testers/frontend-testing/constrained-windows",
- "/for-testers/frontend-testing/constrained-windows/constrained-windows--basic-testing",
- "/for-testers/frontend-testing/spell-check",
- "/for-testers/frontend-testing/spell-check/spell-check--basic-testing",
- "/for-testers/frontend-testing/windows-specific-interoperability-issues",
- "/for-testers/installer",
- "/for-testers/installer/installer--basic-testing",
- "/for-testers/providing-memory-details",
- "/for-testers/providing-network-details",
- "/for-testers/saft",
- "/for-testers/test-cases",
- "/for-testers/touch-firmware-tests",
- "/for-testers/unhealthy-tests-report",
- "/geforce-now-on-chromebooks",
- "/getting-involved",
- "/getting-involved/become-a-committer",
- "/getting-involved/bug-triage",
- "/getting-involved/dev-channel",
- "/getting-involved/download-chromium",
- "/getting-involved/get-bug-editing-privileges",
- "/getting-involved/summerofcode2013",
- "/glossary",
- "/hsts",
- "/infra",
- "/irc",
- "/irc-support-faq",
- "/issue-tracking",
- "/issue-tracking/autotriage",
- "/issue-tracking/creating-a-bug-template-url",
- "/issue-tracking/editing-components",
- "/issue-tracking/how-to-bulk-edit",
- "/issue-tracking/issue-tracking-lifecycle",
- "/issue-tracking/label-and-component-naming-style-guide",
- "/issue-tracking/migrating-issue-components",
- "/issue-tracking/release-block-guidelines",
- "/issue-tracking/requesting-a-component-or-label",
- "/issue-tracking/tips-and-tricks",
- "/july-2021---new-features-fixit-stability-security-fixes-interop-fixes-and-more",
- "/layout-test-contest",
- "/layout-test-contest/layout-test-contest-leaderboard",
- "/nativeclient",
- "/nativeclient/day-to-day",
- "/nativeclient/day-to-day/codereview",
- "/nativeclient/day-to-day/infrastructure-faq",
- "/nativeclient/getting-started",
- "/nativeclient/getting-started/getting-started-background-and-basics",
- "/nativeclient/how-tos",
- "/nativeclient/how-tos/3d-tips-and-best-practices",
- "/nativeclient/how-tos/build-tcb",
- "/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils",
- "/nativeclient/how-tos/debugging-documentation",
- "/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin",
- "/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux",
- "/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows",
- "/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac",
- "/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended",
- "/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os",
- "/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt",
- "/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub",
- "/nativeclient/how-tos/exception-handling-interface",
- "/nativeclient/how-tos/how-to-use-git-svn-with-native-client",
- "/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform",
- "/nativeclient/how-tos/working-on-the-git-toolchain-repos",
- "/nativeclient/life-of-sel_ldr",
- "/nativeclient/nameservice",
- "/nativeclient/nameservice/naming-issues----rationale",
- "/nativeclient/pnacl",
- "/nativeclient/pnacl/aligned-bundling-support-in-llvm",
- "/nativeclient/pnacl/bitcode-abi",
- "/nativeclient/pnacl/building-pnacl-components-for-distribution-packagers",
- "/nativeclient/pnacl/developing-pnacl",
- "/nativeclient/pnacl/experimenting-with-generated-bitcode",
- "/nativeclient/pnacl/introduction-to-portable-native-client",
- "/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi",
- "/nativeclient/pnacl/subzero",
- "/nativeclient/pnacl/subzero/simple-loop-example",
- "/nativeclient/reference",
- "/nativeclient/reference/anatomy-of-a-sys",
- "/nativeclient/reference/arm-overview",
- "/nativeclient/reference/external-resource-directory",
- "/nativeclient/reference/research-papers",
- "/nativeclient/styleguide",
- "/network-speed-experiments",
- "/omnibox-history-provider",
- "/omnibox-history-provider/caching",
- "/platform-privacy",
- "/quic",
- "/quic/parse-client-hello",
- "/quic/playing-with-quic",
- "/quic/quic-faq",
- "/rvalue-references",
- "/searchbox",
- "/security-keys",
- "/servicification",
- "/spdy",
- "/spdy/http2",
- "/spdy/link-headers-and-server-hint",
- "/spdy/link-headers-and-server-hint/link-rel-subresource",
- "/spdy/spdy-authentication",
- "/spdy/spdy-best-practices",
- "/spdy/spdy-data",
- "/spdy/spdy-protocol",
- "/spdy/spdy-protocol/spdy-protocol-draft1",
- "/spdy/spdy-protocol/spdy-protocol-draft1/controlframetypes",
- "/spdy/spdy-protocol/spdy-protocol-draft2",
- "/spdy/spdy-protocol/spdy-protocol-draft3",
- "/spdy/spdy-protocol/spdy-protocol-draft3-1",
- "/spdy/spdy-protocol/spdy-protocol-draft3-2",
- "/spdy/spdy-protocol/spdyprotocol-xml",
- "/spdy/spdy-tools-and-debugging",
- "/spdy/spdy-whitepaper",
- "/sts",
- "/tab-to-search",
- "/teams",
- "/teams/animations",
- "/teams/animations/animation-objectives",
- "/teams/animations/animation-worklet",
- "/teams/animations/highlights-archive",
- "/teams/animations/highlights-archive/animations-documentation-throughput-metrics-code-health-capability-delegation-user-input-security-and-more",
- "/teams/animations/highlights-archive/april-2019",
- "/teams/animations/highlights-archive/april-2019-volume-ii",
- "/teams/animations/highlights-archive/april-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more",
- "/teams/animations/highlights-archive/april-2021---new-features-testing-stability-fixes-interop-fixes-metrics-and-more",
- "/teams/animations/highlights-archive/april-2021-vol-2---new-features-testing-stability-fixes-interop-fixes-and-more",
- "/teams/animations/highlights-archive/august-2019",
- "/teams/animations/highlights-archive/august-2020---code-health-animations-context-menu-and-more",
- "/teams/animations/highlights-archive/august-2021---new-features-fixit-testing-code-health-and-more",
- "/teams/animations/highlights-archive/august-2021-vol-2---new-features-code-health-stability-security-fixes",
- "/teams/animations/highlights-archive/february-2021-new-features-testing-stability-fixes-code-health-and-more",
- "/teams/animations/highlights-archive/january-2020---off-thread-paintworklet-web-animation-scrolltimeline-virtual-scroller-scrollsnap-and-more",
- "/teams/animations/highlights-archive/january-2021---code-health-new-features-testing-and-stability-fixes",
- "/teams/animations/highlights-archive/july-2019",
- "/teams/animations/highlights-archive/june-2019",
- "/teams/animations/highlights-archive/june-2019-volume-ii",
- "/teams/animations/highlights-archive/june-2020---web-animations-scroll-linked-animations-throughput-metrics-scroll-unification-webdriver-pointer-events-and-more",
- "/teams/animations/highlights-archive/june-2021---new-features-stability-fixes-interop-fixes-and-more",
- "/teams/animations/highlights-archive/june-2021-vol-2---new-features-stability-fixes-interop-fixes-and-more",
- "/teams/animations/highlights-archive/march-2019",
- "/teams/animations/highlights-archive/march-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more",
- "/teams/animations/highlights-archive/march-2021---fixit-week-new-features-testing-interop-metrics-and-more",
- "/teams/animations/highlights-archive/may-2019",
- "/teams/animations/highlights-archive/may-2021---new-features-testing-stability-fixes-interop-fixes-and-more",
- "/teams/animations/highlights-archive/nov-dec-2019---blinkon-scrollsnap-lottie-hittesting-virtualscroller-websharedlibrary-wpt-and-more",
- "/teams/animations/highlights-archive/october-2019",
- "/teams/animations/highlights-archive/october-2020---code-health-scroll-timelines-synthetic-user-activation-scroll-unification-and-more",
- "/teams/animations/highlights-archive/october-2021---2-sprints-worth-of-highlights",
- "/teams/animations/highlights-archive/september-2020---code-heath-animation-timelines-smoothness-metrics-animation-event-handlers-and-more",
- "/teams/animations/highlights-archive/september-2020-vol-2---code-health-logical-property-animation-off-thread-paintworklet-capability-delegation-and-more",
- "/teams/animations/highlights-archive/september-2021---new-features-testing-code-health-interop-fixes-and-more",
- "/teams/animations/highlights-archive/september-update",
- "/teams/animations/highlights-archive/web-animation-scroll-linked-animation-snap-after-layout-throughput-metrics-and-more",
- "/teams/animations/paint-worklet",
- "/teams/binding-team",
- "/teams/device-team",
- "/teams/devtools",
- "/teams/dom-team",
- "/teams/ecosystem-infra",
- "/teams/input-dev",
- "/teams/input-dev/input-objectives",
- "/teams/input-dev/input-objectives/2015-okrs",
- "/teams/input-dev/input-objectives/2016-okrs",
- "/teams/input-dev/input-objectives/2017-okrs",
- "/teams/input-dev/input-objectives/2018-okrs",
- "/teams/layout-team",
- "/teams/layout-team/bug-triage",
- "/teams/layout-team/eliminating-simple-text",
- "/teams/layout-team/meeting-notes",
- "/teams/layout-team/meeting-notes/20141209",
- "/teams/layout-team/meeting-notes/20150107",
- "/teams/layout-team/meeting-notes/friday-october-2-2015",
- "/teams/layout-team/meeting-notes/march-2-2015",
- "/teams/layout-team/meeting-notes/may-28-2015",
- "/teams/layout-team/meeting-notes/monday-april-11-2016",
- "/teams/layout-team/meeting-notes/monday-april-13-2015",
- "/teams/layout-team/meeting-notes/monday-april-20-2015",
- "/teams/layout-team/meeting-notes/monday-april-25-2016",
- "/teams/layout-team/meeting-notes/monday-april-27-2015",
- "/teams/layout-team/meeting-notes/monday-april-4-2016",
- "/teams/layout-team/meeting-notes/monday-april-6-2015",
- "/teams/layout-team/meeting-notes/monday-august-10-2015",
- "/teams/layout-team/meeting-notes/monday-august-17-2015",
- "/teams/layout-team/meeting-notes/monday-august-24-2015",
- "/teams/layout-team/meeting-notes/monday-august-29-2016",
- "/teams/layout-team/meeting-notes/monday-august-3-2015",
- "/teams/layout-team/meeting-notes/monday-august-31-2015",
- "/teams/layout-team/meeting-notes/monday-february-1-2016",
- "/teams/layout-team/meeting-notes/monday-february-2",
- "/teams/layout-team/meeting-notes/monday-february-21-2016",
- "/teams/layout-team/meeting-notes/monday-february-22-2016",
- "/teams/layout-team/meeting-notes/monday-february-23-2015",
- "/teams/layout-team/meeting-notes/monday-february-28-2016",
- "/teams/layout-team/meeting-notes/monday-february-29-2016",
- "/teams/layout-team/meeting-notes/monday-february-8-2016",
- "/teams/layout-team/meeting-notes/monday-february-9",
- "/teams/layout-team/meeting-notes/monday-january-11-2016",
- "/teams/layout-team/meeting-notes/monday-january-4-2016",
- "/teams/layout-team/meeting-notes/monday-july-13-2015",
- "/teams/layout-team/meeting-notes/monday-july-18-2016",
- "/teams/layout-team/meeting-notes/monday-july-20-2015",
- "/teams/layout-team/meeting-notes/monday-june-1-2015",
- "/teams/layout-team/meeting-notes/monday-june-22-2015",
- "/teams/layout-team/meeting-notes/monday-june-27-2016",
- "/teams/layout-team/meeting-notes/monday-june-6-2016",
- "/teams/layout-team/meeting-notes/monday-june-8-2015",
- "/teams/layout-team/meeting-notes/monday-march-16-2015",
- "/teams/layout-team/meeting-notes/monday-march-23-2015",
- "/teams/layout-team/meeting-notes/monday-march-30-2015",
- "/teams/layout-team/meeting-notes/monday-march-7-2016",
- "/teams/layout-team/meeting-notes/monday-march-9-2015",
- "/teams/layout-team/meeting-notes/monday-may-16-2016",
- "/teams/layout-team/meeting-notes/monday-may-4-2015",
- "/teams/layout-team/meeting-notes/monday-november-23-2015",
- "/teams/layout-team/meeting-notes/monday-november-30-2015",
- "/teams/layout-team/meeting-notes/monday-october-12-2015",
- "/teams/layout-team/meeting-notes/monday-october-19-2015",
- "/teams/layout-team/meeting-notes/monday-october-5-2015",
- "/teams/layout-team/meeting-notes/monday-september-14-2015",
- "/teams/layout-team/meeting-notes/monday-september-28-2015",
- "/teams/layout-team/meeting-notes/thursday-april-2-2015",
- "/teams/layout-team/meeting-notes/thursday-june-4-2015",
- "/teams/layout-team/meeting-notes/tuesday-february-16-2016",
- "/teams/layout-team/meeting-notes/tuesday-june-16-2015",
- "/teams/layout-team/meeting-notes/tuesday-march-15-2016",
- "/teams/layout-team/meeting-notes/tuesday-may-26-2015",
- "/teams/layout-team/meeting-notes/wednesday-february-18",
- "/teams/layout-team/okrs",
- "/teams/layout-team/okrs/2015q1",
- "/teams/layout-team/okrs/2015q2",
- "/teams/layout-team/okrs/2015q3",
- "/teams/layout-team/okrs/2015q4",
- "/teams/layout-team/okrs/2016q1",
- "/teams/layout-team/potential-projects",
- "/teams/paint-team",
- "/teams/paint-team/canvas-okrs",
- "/teams/paint-team/okrs",
- "/teams/paint-team/paint-team-members",
- "/teams/rendering",
- "/teams/rendering/okrs",
- "/teams/rendering/okrs/2020-q1",
- "/teams/rendering/okrs/2020-q2",
- "/teams/speed-metrics-team",
- "/teams/style-team",
- "/teams/web-capabilities-fugu",
- "/teams/worker-team",
- "/testing-chrome-ad-filtering",
- "/throttling",
- "/throttling/anti-ddos-http-throttling-in-older-versions-of-chrome",
- "/updates",
- "/updates/first-party-sets",
- "/updates/same-site",
- "/updates/same-site/faq",
- "/updates/same-site/incompatible-clients",
- "/updates/same-site/test-debug",
- "/updates/schemeful-same-site",
- "/updates/schemeful-same-site/schemeful-same-site-devtools-issues",
- "/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site",
- "/updates/trust-token",
- "/updates/ua-ch",
- "/updates/ua-reduction",
- "/user-experience",
- "/user-experience/assistive-technology-support",
- "/user-experience/bookmarklets",
- "/user-experience/bookmarks",
- "/user-experience/downloads",
- "/user-experience/downloads-1",
- "/user-experience/feed-subscriptions",
- "/user-experience/find-in-page",
- "/user-experience/history",
- "/user-experience/incognito",
- "/user-experience/infobars",
- "/user-experience/infobars/geolocation",
- "/user-experience/keyboard-access",
- "/user-experience/low-vision-support",
- "/user-experience/multi-profiles",
- "/user-experience/multitouch",
- "/user-experience/new-tab-page",
- "/user-experience/notifications",
- "/user-experience/omnibox",
- "/user-experience/omnibox/omnibox-bug-triage-process",
- "/user-experience/options",
- "/user-experience/resolution-independence",
- "/user-experience/screen-reader-support",
- "/user-experience/status-bubble",
- "/user-experience/tabs",
- "/user-experience/tabs/throbber",
- "/user-experience/toolbar",
- "/user-experience/touch-access",
- "/user-experience/ui-strings",
- "/user-experience/user-data-directory",
- "/user-experience/visual-design",
- "/user-experience/window-frame",
- "/x-subresources",
- "/x-subresources/x-subresources-1"
-]
diff --git a/chromium/docs/website/site/platform-privacy/index.md b/chromium/docs/website/site/platform-privacy/index.md
deleted file mode 100644
index c03684f9f66..00000000000
--- a/chromium/docs/website/site/platform-privacy/index.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-breadcrumbs: []
-page_name: platform-privacy
-title: Platform Privacy
----
-
-*For information on privacy efforts within the Chrome/Chromium browsers, see
-[chromium-privacy](/).*
-
-Improving the privacy of the web includes proposing, discussing and implementing
-changes to the web platform to preserve the health of the web ecosystem while
-protecting users and their data. The Chromium team participates in open
-discussions with other browser vendors, publishers, and ecosystem participants
-on a variety of topics including privacy.
-
-The following proposals on web platform privacy have been published by the
-Chromium team:
-
-* [Conversion
- Measurement](https://github.com/csharrison/conversion-measurement-api)
-
-This list will be updated as new proposals are published. \ No newline at end of file
diff --git a/chromium/docs/website/site/quic/index.md b/chromium/docs/website/site/quic/index.md
deleted file mode 100644
index ca239dec69f..00000000000
--- a/chromium/docs/website/site/quic/index.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-breadcrumbs: []
-page_name: quic
-title: QUIC, a multiplexed transport over UDP
----
-
-QUIC is a new multiplexed transport built on top of UDP. HTTP/3 is designed to
-take advantage of QUIC's features, including lack of Head-Of-Line blocking
-between streams.
-
-The QUIC project started as an alternative to TCP+TLS+HTTP/2, with the goal of
-improving user experience, particularly page load times. The [QUIC working
-group](https://datatracker.ietf.org/wg/quic/about/) at the IETF defined a clear
-boundary between the
-transport([QUIC](https://datatracker.ietf.org/doc/html/rfc9000)) and
-application(HTTP/3) layers, as well as migrating from QUIC Crypto to [TLS
-1.3](https://datatracker.ietf.org/doc/html/rfc8446).
-
-Because TCP is implemented in operating system kernels and middleboxes, widely
-deploying significant changes to TCP is next to impossible. However, since QUIC
-is built on top of UDP and the transport functionality is encrypted, it suffers
-from no such limitations.
-
-**Key features of QUIC and HTTP/3 over TCP+TLS and HTTP/2 include**
-
-* Reduced connection establishment time - 0 round trips in the common
- case
-* Improved congestion control feedback
-* Multiplexing without head of line blocking
-* Connection migration
-* Transport extensibility
-* Optional unreliable delivery
-
-**IETF documents**
-
-* Version-Independent Properties of QUIC -
- [RFC8999](https://datatracker.ietf.org/doc/html/rfc8999)
-* QUIC: A UDP-Based Multiplexed and Secure Transport -
- [RFC9000](https://datatracker.ietf.org/doc/html/rfc9000)
-* Using TLS to Secure QUIC -
- [RFC9001](https://datatracker.ietf.org/doc/html/rfc9001)
-* Congestion Control and Loss Detection -
- [RFC9002](https://datatracker.ietf.org/doc/html/rfc9002)
-* HTTP/3 - IESG approved
- [draft](https://datatracker.ietf.org/doc/html/draft-ietf-quic-http)
-* QPACK - IESG approved
- [draft](https://datatracker.ietf.org/doc/html/draft-ietf-quic-qpack)
-
-**Documentation**
-
-* [SIGCOMM 2017 Paper](https://research.google/pubs/pub46403/)
-* [QUIC
- overview](https://docs.google.com/document/d/1gY9-YNDNAB1eip-RTPbqphgySwSNSDHLq9D5Bty4FSU/edit?usp=sharing)
-* [QUIC FAQ](/quic/quic-faq)
-* [A Guide to Parsing QUIC Client Hellos for Network Middlebox
- Vendors](https://docs.google.com/document/d/1GV2j-PGl7YGFqmWbYvzu7-UNVIpFdbprtmN9tt6USG8/preview)
-* [Legacy QUIC wire specification (versions up to and including
- Q043)](https://docs.google.com/document/d/1WJvyZflAO2pq77yOLbp9NsGjC1CHetAXV8I0fQe-B_U/edit?usp=sharing)
-* [Legacy QUIC wire specification (versions from Q044 to Q048
- inclusive)](https://docs.google.com/document/d/1FcpCJGTDEMblAs-Bm5TYuqhHyUqeWpqrItw2vkMFsdY/edit?usp=sharing)
-* [Cleartext QUIC wire specification (versions Q049 and
- above)](https://tools.ietf.org/html/draft-ietf-quic-invariants-07)
-* [QUIC crypto design
- doc](https://docs.google.com/document/d/1g5nIXAIkN_Y-7XJW5K45IblHd_L2f5LTaDUDwvZ5L6g/edit?usp=sharing)
-* [Getting started with the QUIC toy client and
- server](/quic/playing-with-quic)
-* [QUIC tech talk](https://www.youtube.com/watch?v=hQZ-0mXFmk8)
-* [QUIC
- Discovery](https://docs.google.com/document/d/1i4m7DbrWGgXafHxwl8SwIusY2ELUe8WX258xt2LFxPM/edit?usp=sharing)
-* [QUIC FEC v1
- (deprecated)](https://docs.google.com/document/d/1Hg1SaLEl6T4rEU9j-isovCo8VEjjnuCPTcLNJewj7Nk/edit?usp=sharing)
-* [QUIC flow
- control](https://docs.google.com/document/d/1F2YfdDXKpy20WVKJueEf4abn_LVZHhMUMS5gX6Pgjl4/edit?usp=sharing)
-
-**Pre-Working Group IETF Material**
-
-* Presentations from the IETF-96 (Berlin) BoF on QUIC
- * [Introduction](https://datatracker.ietf.org/meeting/96/materials/slides-96-quic-0)
- * [QUIC Protocol
- Overview](https://www.ietf.org/proceedings/96/slides/slides-96-quic-5.pdf)
-* Presentations from the IETF-93 (Prague) BarBoF on QUIC
- ([Video](http://recordings.conf.meetecho.com/Playout/watch.jsp?recording=IETF93_QUIC&chapter=BAR_BOF))
- * [Introduction](https://docs.google.com/presentation/d/15bnWhEBVRVZDO5up7UTpZU-o6jPOfGU4fT5JlBZ7-Cs/edit?usp=sharing)
- * [QUIC Protocol
- Overview](https://docs.google.com/presentation/d/15e1bLKYeN56GL1oTJSF9OZiUsI-rcxisLo9dEyDkWQs/edit?usp=sharing)
- * [Implementing QUIC For Fun And
- Learning](https://docs.google.com/presentation/d/1BjPUowoOoG0ywmq5r8QNqnC9JPELUe02jvgyoOW3HFw/edit?usp=sharing)
- (Christian Huitema, Microsoft)
- * [QUIC Congestion Control and Loss
- Recovery](https://docs.google.com/presentation/d/1T9GtMz1CvPpZtmF8g-W7j9XHZBOCp9cu1fW0sMsmpoo/edit?usp=sharing)
-* Initial Presentation at IETF-88
- ([Slides](https://www.ietf.org/proceedings/88/slides/slides-88-tsvarea-10.pdf))
-
-Video
-
-* [QUIC Connection Migration
- demo](https://drive.google.com/file/d/1DlMI_3MOxnWarvEVfzKxFqmD7c-u1cYG/view?usp=sharing)
-
-Code
-
-* [Chrome
- implementation](https://chromium.googlesource.com/chromium/src/+/HEAD/net/quic/)
-* [Standalone test server and
- client](https://chromium.googlesource.com/chromium/src/+/HEAD/net/tools/quic/)
-
-**Mailing lists**
-
-* [proto-quic@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/proto-quic)
- - QUIC mailing list specific to Chromium
-* [quic@ietf.org](https://mailarchive.ietf.org/arch/browse/quic/) -
- QUIC working group mailing list \ No newline at end of file
diff --git a/chromium/docs/website/site/quic/parse-client-hello/index.md b/chromium/docs/website/site/quic/parse-client-hello/index.md
deleted file mode 100644
index 78812ecea45..00000000000
--- a/chromium/docs/website/site/quic/parse-client-hello/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /quic
- - QUIC, a multiplexed transport over UDP
-page_name: parse-client-hello
-title: Parsing QUIC Client Hellos
----
-
-This document is available here: [A Guide to Parsing QUIC Client Hellos for
-Network Middlebox
-Vendors](https://docs.google.com/document/d/1GV2j-PGl7YGFqmWbYvzu7-UNVIpFdbprtmN9tt6USG8/preview) \ No newline at end of file
diff --git a/chromium/docs/website/site/quic/playing-with-quic/index.md b/chromium/docs/website/site/quic/playing-with-quic/index.md
deleted file mode 100644
index a115bc30920..00000000000
--- a/chromium/docs/website/site/quic/playing-with-quic/index.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-breadcrumbs:
-- - /quic
- - QUIC, a multiplexed transport over UDP
-page_name: playing-with-quic
-title: Playing with QUIC
----
-
-### **Build the QUIC client and server**
-
-A sample server and client implementation are provided in Chromium. To use these
-you should first have [checked out the Chromium
-source](/developers/how-tos/get-the-code), and then build the binaries:
-
-```none
-ninja -C out/Debug quic_server quic_client
-```
-
-### **Prep test data from www.example.org**
-
-Download a copy of www.example.org, which we will serve locally using the
-quic_server binary:
-
-```none
-mkdir /tmp/quic-data
-cd /tmp/quic-data
-wget -p --save-headers https://www.example.org
-```
-
-Manually edit index.html and adjust the headers:
-
- * **Remove (if it exists):** "Transfer-Encoding: chunked"
- * **Remove (if it exists):** "Alternate-Protocol: ..."
- * **Add:** X-Original-Url: https://www.example.org/
-
-### Generate certificates
-
-In order to run the server, you will need a valid certificate, and a private key
-in pkcs8 format. If you don't have one, there are scripts you can use to
-generate them:
-
-```none
-cd net/tools/quic/certs
-./generate-certs.sh
-cd -
-```
-
-In addition to the server's certificate and public key, this script will also
-generate a CA certificate (`net/tools/quic/certs/out/2048-sha256-root.pem`)
-which you will need to add to your OS's root certificate store in order for it
-to be trusted during certificate validation. For doing this on Linux, please see
-[these
-instructions](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux/cert_management.md).
-This will allow quic_client to verify the certificate correctly. However, note
-that Chrome/Chromium (the browser) does not allow custom CAs for QUIC, so you'll
-also need to pass in --ignore-certificate-errors-spki-list with the
-certificate's spki to allow Chrome/Chromium to accept your custom certificate as
-valid.
-
-### Run the QUIC server and client
-
-Run the quic_server:
-
-```none
-./out/Debug/quic_server \
-  --quic_response_cache_dir=/tmp/quic-data/www.example.org \
-  --certificate_file=net/tools/quic/certs/out/leaf_cert.pem \
-  --key_file=net/tools/quic/certs/out/leaf_cert.pkcs8
-```
-
-And you should be able to successfully request the file over QUIC using
-quic_client:
-
-```none
-./out/Debug/quic_client --host=127.0.0.1 --port=6121 https://www.example.org/
-```
-
-Note that if you let the server's port default to 6121, you must specify the
-client port because it defaults to 80.
-
-Moreover, if your local machine has multiple loopback addresses (as it would if
-using both IPv4 and IPv6), you have to pick a specific address.
-
-It remains to be determined whether the latter shortcoming is a bug.
-
-If the server you are connecting to does not have a trusted certificate, use the
-`--disable_certificate_verification` flag on the client to disable certificate
-verification. If the server's certificate is trusted but chains to a user
-installed CA (e.g. a CA generated by the script mentioned above), use the
-`--allow_unknown_root_cert` flag on the client to allow connections where the
-cert chains to a user installed CA.
-
-**note: both the client and server are meant mainly for integration testing:
-neither is performant at scale!**
-
-To test the same download using chrome,
-
-```none
-chrome \
-  --user-data-dir=/tmp/chrome-profile \
-  --no-proxy-server \
-  --enable-quic \
-  --origin-to-force-quic-on=www.example.org:443 \
-  --host-resolver-rules='MAP www.example.org:443 127.0.0.1:6121' \
-  https://www.example.org
-```
-
-Note that the server's certificate must be trusted by a default CA for
-Chrome/Chromium to accept it for QUIC. If you are using a self-signed
-certificate or a certificate that is signed by a custom CA, you need to use the
-`--ignore-certificate-errors-spki-list` command line flag to trust an individual
-certificate based on its spki.
-
-### **Troubleshooting**
-
-If you run into troubles, try running the server or client with --v=1. It will
-increase the logging verbosity and the additional logs will often help expose
-the underlying problem. \ No newline at end of file
diff --git a/chromium/docs/website/site/quic/quic-faq/index.md b/chromium/docs/website/site/quic/quic-faq/index.md
deleted file mode 100644
index 6325f0bc7de..00000000000
--- a/chromium/docs/website/site/quic/quic-faq/index.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-breadcrumbs:
-- - /quic
- - QUIC, a multiplexed transport over UDP
-page_name: quic-faq
-title: QUIC FAQ
----
-
-[TOC]
-
-#### What versions of QUIC does Chromium support?
-
-In June of 2021, Chromium defaults to supporting IETF QUIC draft29 and gQUIC
-Q050.
-
-#### Are there any documents about how QUIC performs?
-
-In 2017, we published a [SIGCOMM
-paper](https://dl.acm.org/doi/10.1145/3098822.3098842) which detailed QUIC's
-performance.
-
-**Are there other implementations of QUIC?**
-
-Yes, there are a number of other independent implementations. See the IETF Wiki
-for a [full list](https://github.com/quicwg/base-drafts/wiki/Implementations).
-
-#### Can I build the toy client and server without building all of chrome?
-
-Yes, the quic_server target can be built without building the rest of Chrome.
-You can follow these [instructions to build and run the stand-alone QUIC client
-and server](/quic/playing-with-quic).
-
-#### **How do I aim Chrome at the test server?**
-
-If you have an HTTP server, you'll need it to emit a response header that looks
-like:
-
-> `Alternate-Protocol: quic:<QUIC server port>`
-
-Then you can just run chrome as usual and it will automatically start using
-QUIC.
-
-If you're testing only with the toy quic server, you can do something like:
-
-> `% chrome --disable-setuid-sandbox --enable-quic
-> --origin-to-force-quic-on=localhost:6121
-> `[`http://localhost:6121/`](http://localhost:6121/)
-
-If you need help troubleshooting, try running the QUIC server with --v=1 or
-check out [playing-with-quic](/quic/playing-with-quic)
-
-#### **Why is the transport layer encrypted?**
-
-The transport information for QUIC (congestion related information) is encrypted
-mainly to guarantee the transport can always evolve. If the acks were in the
-clear, or even checksummed, the concern is that eventually middle boxes would
-start parsing the congestion information and would break with any forward
-changes. This is currently a problem for TCP; the wire format allows for
-negotiated options and flexible features which are practically unusable because
-of the expectations of current hardware on the internet.
-
-The down side, of course, is that hiding these details from middle boxes also
-means QUIC flows are hard to analyze if you don't control an endpoint. The
-tcpdump tool can let one visualize the rate of packets, and the gaps in packets,
-but it's unclear which packets contain payload, which have congestion
-information, which have retransmits etc. Both client and server side code are
-architected to have hooks to easily dump this information during userspace
-processing. Such logs can are more data rich than tcpdumps and can be tied
-together with kernel level packet traces to get a better idea of latency across
-the whole system. \ No newline at end of file
diff --git a/chromium/docs/website/site/rvalue-references/index.md b/chromium/docs/website/site/rvalue-references/index.md
deleted file mode 100644
index 8a7edb7a58b..00000000000
--- a/chromium/docs/website/site/rvalue-references/index.md
+++ /dev/null
@@ -1,625 +0,0 @@
----
-breadcrumbs: []
-page_name: rvalue-references
-title: Rvalue references in Chromium
----
-
-Now that C++11 support is available in our standard library (libc++), we should
-be able to make use of standard container types in more places, and to use
-containers and standard types more efficiently. In order to do that we need to
-understand and make use of std::move() and rvalue references.
-
-We hope that the information here will be enough for you to start using these
-C++11 features safely in Chromium. (Some of the information here may
-purposefully gloss over details or edge cases.)
-
-[TOC]
-
-## Rvalue references and std::move()
-
-The [google style
-guide](https://google.github.io/styleguide/cppguide.html#Rvalue_references)
-allows the following: Use rvalue references only to define move constructors and
-move assignment operators, or for perfect forwarding. Here we talk about the
-first type of use, and follow up about the second later.
-
-Many of the ideas here come from a talk given by Scott Meyers that is [available
-on
-MSDN](https://channel9.msdn.com/Events/GoingNative/2013/An-Effective-Cpp11-14-Sampler).
-The video is really excellent and worth watching.
-
-There are links to full example code with each of the examples. You can try them
-out locally, or drop them into an [online
-compiler](http://coliru.stacked-crooked.com/).
-
-### 1. What makes rvalues.
-
-You know that you have an rvalue when the object has no name. Typically rvalues
-are temporary objects that exist on the stack as the result of a function call
-or other operation.
-
-- Returning a value from a function will turn that value into an rvalue. Once
-you call return on an object, the name of the object does not exist anymore (it
-goes out of scope), so it becomes an rvalue.
-
-- Similarly, calling a function will give back an rvalue. The return value of a
-function has no name.
-
-MyType MakeMyType() {
-MyType type;
-return type;
-}
-
-int main(int argc, char \*\*argv) {
-// MakeMyType returns an rvalue MyType.
-MyType type = MakeMyType();
-ProcessMyType(MakeMyType());
-}
-
-<http://pastebin.com/raw.php?i=ki3q2Gbi>
-
-### 2. Move constructor is used with rvalues.
-
-Move constructors are similar to copy constructors. They construct an object out
-of another object of the same type. The signature of the method changes in order
-for it to accept rvalues only.
-
-Here’s an example of a class with a move constructor. It will cause the compiler
-to not generate an implicit copy constructor, making this class move-only.
-
-class MyType {
-public:
-MyType() {}
-MyType(MyType&& other) { fprintf(stderr, "move ctor\\n"); }
-// Copy constructor is implicitly deleted.
-// MyType(const MyType& other) = delete;
-};
-
-MyType MakeMyType(int a) {
-// This is here to circumvent some compiler optimizations,
-// to ensure that we will actually call a move constructor.
-if (a % 2) {
-MyType type;
-return type;
-}
-MyType type;
-return type;
-}
-
-int main(int argc, char \*\*argv) {
-// MakeMyType returns an rvalue MyType.
-// Both lines below call our move constructor.
-MyType type = MakeMyType(2);
-ProcessMyType(MakeMyType(2));
-}
-
-<http://pastebin.com/raw.php?i=tjxdwQuL>
-
-The argument of the move constructor is a MyType&& which is a reference (like a
-MyType&) except that it will only bind to an rvalue. That means the following
-won’t compile, since it tries to construct a new MyType without an rvalue.
-
-class MyType {
-public:
-MyType() {}
-MyType(MyType&& other) { fprintf(stderr, "move ctor\\n"); }
-// Copy constructor is implicitly deleted.
-// MyType(const MyType& other) = delete;
-};
-int main(int argc, char\*\* argv) {
-MyType type;
-// |type| is an lvalue, so this will not compile because move
-
-// constructor's argument will only bind to rvalues.
-MyType other_type = type;
-}
-
-<http://pastebin.com/raw.php?i=9bjPNiWY>
-
-### 3. Move constructor does a shallow copy.
-
-A move constructor (like a copy constructor) works by copying the members of
-another object into itself. The differences of a move constructor are the
-following:
-
-- The move constructor can be destructive. Since the argument is a non-const
-reference, it may modify the object passed to it. This is okay since the
-argument is an rvalue, so the caller does not hold onto a name for the original
-object, and won’t make use of it (note that its destructor will happen though).
-
-- The move constructor only needs to shallow copy. For example if the object
-holds a pointer, it doesn’t need to deref the pointer and copy its contents. The
-move constructor can just copy the pointer’s address. This is where the
-performance benefits of move constructors happen.
-
-class MyType {
-public:
-MyType() {
-pointer_ = new int;
-\*pointer_ = 1;
-memset(array_, 0, sizeof(array_));
-vector_.push_back(3.14);
-}
-MyType(MyType&& other) {
-fprintf(stderr, "move ctor\\n");
-// Steal the memory, null out |other|.
-pointer_ = other.pointer_;
-other.pointer_ = nullptr;
-// Copy the contents of the array.
-memcpy(array_, other.array_, sizeof(array_));
-// Swap with our (empty) vector.
-vector_.swap(other.vector_);
-}
-~MyType() {
-delete pointer_;
-}
-private:
-int\* pointer_;
-char array_\[42\];
-std::vector&lt;float&gt; vector_;
-};
-
-int main(int argc, char \*\*argv) {
-// MakeMyType returns an rvalue MyType.
-// Both lines below call our move constructor.
-MyType type = MakeMyType(2);
-ProcessMyType(MakeMyType(2));
-}
-
-<http://pastebin.com/raw.php?i=TXZB61Sg>
-
-### 4. std::move() will cast a variable to an rvalue.
-
-If you want to construct a new object from a variable, you can still use the
-move constructor to do so.
-[std::move()](http://en.cppreference.com/w/cpp/utility/move) will cast your
-variable to an rvalue, allowing it to bind to a move constructor.
-
-int main(int argc, char \*\*argv) {
-MyType type;
-// MyType other_type = type; won't work, since there is no copy ctor.
-// std::move casts |type| to an rvalue, so it uses the move
-
-// constructor.
-MyType other_type = std::move(type);
-}
-
-<http://pastebin.com/raw.php?i=DzNMxt5j>
-
-This also means that you can pass an rvalue to a function that uses
-pass-by-value.
-
-int main(int argc, char \*\*argv) {
-MyType type;
-
-// The return value of MakeMyType is an rvalue, so the move constructor
-
-// is used.
-
-ProcessMyType(MakeMyType(2));
-
-// Error: |type| is an lvalue, and is not copyable.
-
-ProcessMyType(type);
-
-// But std::move() turns lvalues into rvalues, so the move constructor
-
-// is used again.
-
-ProcessMyType(std::move(type));
-
-}
-
-<http://pastebin.com/raw.php?i=P7prZEur>
-
-However..
-
-### 5. You must not use a variable after calling std::move() on it.
-
-Since you have casted your variable to an rvalue, functions that receive rvalues
-may act destructively on your variable, so using the variable’s contents
-afterward may result in undefined behaviour. The only valid things you may do
-after calling std::move() on a variable are:
-
-- Destroy it
-
-- Assign to it (ie. replace its contents)
-
-This applies to member variables too, don't leave your class in an undefined
-state when leaving a method.
-
-### 6. std::move() does not move, it casts.
-
-You may think of std::move&lt;T&gt;() as instead rvalue_cast&lt;T&gt;(). It does
-not perform any action of its own on the value passed to it, only changing what
-methods you can pass it to.
-
-So the following does nothing:
-
-MyType t;
-
-std::move(t); // Casts it but it’s unused.
-
-Just the same as:
-
-char t;
-
-reinterpret_cast&lt;unsigned char&gt;(t); // Cast it but it’s unused.
-
-In fact, the actual implementation of std::move() is done with static_cast. It
-is simply a cast from MyType to MyType&& (a reference to an rvalue of MyType):
-
-return static_cast&lt;typename std::remove_reference&lt;T&gt;::type&&&gt;(t);
-
-### 7. Copy constructors can also bind to rvalues (with lower priority).
-
-Never read std::move() on an unfamiliar type and assume anything about what is
-going to happen!
-
-If you see code that calls std::move() it looks like it should be calling a move
-constructor, but you could be wrong.
-
-When a move constructor on the type being cast to an rvalue does not exist, the
-compiler will fall back to binding the rvalue as a const-reference. This means
-the copy-constructor would be used instead.
-
-class MyType {
-public:
-MyType() {
-pointer_ = new int;
-\*pointer_ = 1;
-memset(array_, 0, sizeof(array_));
-vector_.push_back(3.14);
-}
-MyType(const MyType& other) {
-fprintf(stderr, "copy ctor\\n");
-// Copy memory.
-pointer_ = new int;
-\*pointer_ = \*other.pointer_;
-// Copy the contents of the array.
-memcpy(array_, other.array_, sizeof(array_));
-// More copies.
-vector_ = other.vector_;
-}
-~MyType() {
-delete pointer_;
-}
-private:
-int\* pointer_;
-char array_\[42\];
-std::vector&lt;float&gt; vector_;
-};
-
-int main(int argc, char\*\* argv) {
-{
-MyType type;
-// MyType other_type = type; works the same way here.
-// std::move casts |type| to an rvalue, but since there is no move
-// constructor, the copy constructor is used.
-MyType other_type = std::move(type);
-}
-{
-MyType type;
-// MakeMyType returns an rvalue, but since there is no move
-
-// constructor, the copy constructor is used.
-ProcessMyType(MakeMyType(2));
-// ProcessMyType(type); works the same way here.
-// std::move casts |type| to an rvalue, but since there is no move
-// constructor, the copy constructor is used.
-ProcessMyType(std::move(type));
-}
-}
-<http://pastebin.com/raw.php?i=p5ciyVVk>
-
-So do not assume anything from reading std::move(). You need to understand the
-class being moved to know what will happen.
-
-### 8. Move constructors will only bind to non-const rvalues.
-
-Beware of const! Const variables can not be moved from, since move constructors
-take a non-const (rvalue) reference. However the compiler will silently
-fall-back to the copy constructor.
-
-int main(int argc, char\*\* argv) {
-const MyType type = MakeMyType(2);
-// std::move casts to an rvalue, but since this is const, it becomes an
-
-// rvalue to const, which uses the copy constructor, not the move
-
-// constructor.
-ProcessMyType(std::move(type));
-}
-
-<http://pastebin.com/raw.php?i=5aVRz5SQ>
-
-This type of error can only be caught by code inspection (and performance
-testing). Always look at the type of the variable on which you call move().
-
-This won’t bite you with function return rvalues, but requires caution when
-using std::move().
-
-### 9. Move constructors should be accompanied by move-assignment operators.
-
-Just as a copy constructor MyType(const MyType& t) should be accompanied by a
-copy-assignment operator operator=(const MyType& t), so should a move
-constructor.
-
-Move-assignment operators work and look the same as a Move constructor. Most
-things we’ve discussed about move constructors (behaviour and performance) will
-apply in all the same ways to move-assignment.
-
-In following example, the class defines its move constructor in terms of
-operator=, using a move assignment to construct itself.
-
-class MyType {
-public:
-MyType() {
-pointer_ = new int;
-\*pointer_ = 1;
-memset(array_, 0, sizeof(array_));
-vector_.push_back(3.14);
-}
-MyType(MyType&& other) : pointer_(nullptr) {
-
-// Note that although the type of |other| is an rvalue reference,
-
-// |other| itself is an lvalue, since it is a named object. In order
-
-// to ensure that the move assignment is used, we have to explicitly
-
-// specify std::move(other).
-\*this = std::move(other);
-}
-~MyType() {
-delete pointer_;
-}
-
-MyType& operator=(MyType&& other) {
-// Steal the memory, null out |other|.
-
-delete pointer_;
-
-pointer_ = other.pointer_;
-other.pointer_ = nullptr;
-
-// Copy the contents of the array.
-memcpy(array_, other.array_, sizeof(array_));
-
-// Swap with our vector. Leaves the old contents in |other|.
-
-// We could destroy the old content instead, but this is equally
-
-// valid.
-vector_.swap(other.vector_);
-return \*this;
-}
-private:
-int\* pointer_;
-char array_\[42\];
-std::vector&lt;float&gt; vector_;
-};
-
-<http://pastebin.com/raw.php?i=WMZg2y3C>
-
-### 10. Don’t go cray cray with move semantics.
-
-Move-constructing is always as cheap or cheaper than copy-constructing. So you
-could use it in every situation possible. But it may be adding very little value
-(or making code misleading).
-
-Almost always, just use a copy constructor. For example gfx::Point is 2
-integers, a move constructor would do nothing different than a copy constructor.
-There’s no reason to write a move constructor for this class, or to use
-std::move() when using Points.
-
-class Point {
-
-int x_;
-
-int y_;
-
-...
-
-Point(const Point& p) { x_ = p.x_; y_ = p.y_; }
-
-Point(Point&& p) { x_ = p.x_; y_ = p.y_; }
-
-};
-
-Move constructors are especially valuable for types that hold a pointer to
-something large, since moving a pointer is much cheaper than copying everything
-it points to. Other scenarios benefit less or not at all.
-
-### 11. Don’t return references. Don’t use std::move() on rvalues.
-
-Functions return an rvalue without you doing anything, they already do this (see
-point #1). So you don’t need to do anything to make this happen. You should not
-see functions that return a MyType&&. Simply return MyType.
-
-MyType&& MakeMyType() { // This is WRONG. The return type should not be
-
-// a reference.
-
-MyType type;
-
-return std::move(type); // This is usually WRONG. Returning will
-
-// already make it an rvalue.
-}
-
-Just as returning a MyType& would be wrong (returning a reference to a temporary
-object), returning a MyType&& is wrong for the same reasons.
-
-Putting std::move() on the return call actually makes things less efficient, it
-interferes with the compiler doing RVO (Return Value Optimization). You can read
-a previous chromium-dev thread about this in the context of scoped_ptr:
-[link](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/ICA3hiR4Z3A/Bi_ec46cAQAJ).
-
-However, if the types of the variable and the return type do not match exactly,
-then you will have to use std::move() in order to convert without creating an
-extra temporary.
-
-std::unique_ptr&lt;MyType&gt; MakeMyType()
-
-{
-
-std::unique_ptr&lt;ChildClassOfMyType&gt; ptr;
-
-// This call to std::move() is needed to convert from a pointer-to-the
-
-// child class to a pointer-to-the parent.
-
-return std::move(ptr);
-}
-
-Similarly do not use move() on the return value from calling a function. You
-already have an rvalue, so casting it there adds no value, only noise.
-
-// This is WRONG. It is casting an rvalue to an rvalue, which is not
-
-// needed.
-
-ProcessMyType(std::move(MakeMyType()));
-
-### 12. std::move() is the same thing as our familiar Pass() function.
-
-For some time, scoped_ptr::Pass() has been implemented as being the same thing
-as std::move().
-
-Places that previously called a.Pass() can be changed to call std::move(a)
-instead, and they will be changed in the near future. It may help you to
-consider this, if you are already familiar with Pass().
-
-Using std::unique_ptr instead of scoped_ptr will require the use of std::move()
-instead, as Pass() does not exist there (and is not needed). So code will be
-change from:
-
-scoped_ptr&lt;MyType&gt; t = ...;
-
-CallFunction(t.Pass());
-
-To instead be:
-
-std::unique_ptr&lt;MyType&gt; t = ...;
-
-CallFunction(std::move(t));
-
-## Perfect forwarding
-
-The [google style
-guide](https://google.github.io/styleguide/cppguide.html#Rvalue_references)
-allows the following: Use rvalue references only to define move constructors and
-move assignment operators, or for perfect forwarding. We’ll talk about the
-latter here.
-
-So far, we’ve seen that we can write an rvalue reference in a move constructor,
-or a move-assignment operator:
-
-MyType(MyType&& type); // Move constructor
-
-operator=(MyType&& type); // Move-assignment operator
-
-In both of these cases, the type MyType is fixed, so we know that we have a
-reference to something that is definitely an rvalue. However when writing a
-templated method, we may want to support an unknown type instead, at which point
-we don’t know if it is an rvalue.
-
-template&lt;typename T&gt;
-void ProcessAndStore(T&& var) { ... }
-
-Here the argument type may have been one of two things:
-
-- Passed by move (rvalue reference) if you had an rvalue: MyType&&
-
-- Passed by reference (aka lvalue reference) otherwise: MyType&
-
-(You can read more about [reference
-collapsing](http://stackoverflow.com/questions/13725747/concise-explanation-of-reference-collapsing-rules-requested-1-a-a-2)
-if you want more details about how these are the only two possibilities.)
-
-Arguments in templates can be written this way to implement perfect forwarding.
-This allows for arguments to be passed through the template to another method
-without introducing any additional copies of the object (ie no copy or move
-constructors occur inside the template):
-
-- If we had written the template as taking a parameter T, then a new variable
-would have to be constructed inside the templated method. This could be done
-with a copy constructor, or a move constructor (using std::move() inside the
-template method), but it would require some extra work (which is why we normally
-don’t pass-by-value of course).
-
-- If we had written it instead as taking a const T&, then no copy takes place
-entering the method, which is great. But when passing the variable to another
-method, if it takes the argument by value, a copy occurs.
-
-- Lastly, if we had written T&, then an rvalue would not bind to it, causing a
-compiler error.
-
-The most generally correct way to implement this is with
-[std::forward()](http://en.cppreference.com/w/cpp/utility/forward), which will
-always do the right thing for you.
-
-template&lt;typename T&gt;
-void ProcessAndStore(T&& var) {
-// Process
-// ...
-// The type of |var| could be an rvalue reference, which means we
-
-// should pass an rvalue to Store. However, it could also be an lvalue
-
-// reference, which means we should pass an lvalue.
-// Note that just doing Store(var); will always pass an lvalue and
-
-// doing Store(std::move(var)) will always pass an rvalue. Forward does
-
-// the right thing by casting to rvalue only if var is an rvalue
-
-// reference.
-Store(std::forward&lt;T&gt;(var));
-}
-
-<http://pastebin.com/raw.php?i=rVRebELt>
-
-### std::forward() is a conditional cast to an rvalue.
-
-This sounds lot like std::move(), which also casts to an rvalue. But
-std::forward() will avoid casting to an rvalue if the argument is an lvalue
-reference. It’s implementation is conceptually something like:
-
-if (is_lvalue_reference&lt;T&gt;::value)
-
-return t;
-
-return std::move(t);
-
-That is, it preserves lvalue references. Why?
-
-Because doing std::move() on an lvalue reference is bad! Code producing an
-lvalue reference expects the object to remain valid. But code receiving an
-rvalue reference expects to be able to steal from it. This leaves you with a
-reference pointing to a potentially-invalid object.
-
-// Although Chromium disallows non-const lvalue references, this
-
-// situation is still possible in templates.
-void Oops(MyType& type) {
-// Move is destructive. It can change |type| which is an lvalue
-
-// reference.
-MyType local_type = std::move(type);
-// Work with local_type.
-// ...
-}
-int main(int argc, char \*\*argv) {
-MyType type;
-// Don't move type, just pass it.
-Oops(type);
-// Oops, this is a null pointer dereference.
-\*type.pointer = 314;
-}
-
-<http://pastebin.com/raw.php?i=cPrYgGhr>
-
-For perfect forwarding in templates (ie arguments of type T&&), use
-std::forward() instead of std::move(). \ No newline at end of file
diff --git a/chromium/docs/website/site/searchbox/index.md b/chromium/docs/website/site/searchbox/index.md
deleted file mode 100644
index 9f2c60a5530..00000000000
--- a/chromium/docs/website/site/searchbox/index.md
+++ /dev/null
@@ -1,218 +0,0 @@
----
-breadcrumbs: []
-page_name: searchbox
-title: SearchBox API
----
-
-**OBSOLETE** - replaced by the [Embedded Search API](/embeddedsearch).In
-addition to [OpenSearch](http://www.opensearch.org/) compliance, Chromium also
-provides an experimental JavaScript API that enables the default search provider
-to interact with the [Omnibox](/user-experience/omnibox). This allows the search
-page to instantly respond to user interaction without reloading the page. It
-also allows the search page to communicate autocompletion suggestions. This page
-provides the technical specification for the SearchBox API. **Status of this
-document:** Editor's Draft March 19, 2011.This is a **work in progress** and may
-change without any notices. This API has been [proposed to the
-WHATWG](http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-October/028818.html)
-and we are eager to formally standardize it as it stabilizes. Please send
-comments to tonyg at chromium dot org.
-
-### 1. WebIDL interfaces
-
-**Note** that this entire interface is only available to the page the user has
-selected as the default search provider. The searchBox object is not exposed to
-general pages. See section 1.2.1 for details.
-
-#### 1.1 SearchBox interface
-
-<pre><code>interface <b>SearchBox</b> { readonly attribute DOMString value; readonly attribute boolean verbatim; readonly attribute unsigned long selectionStart; readonly attribute unsigned long selectionEnd; readonly attribute unsigned long x; readonly attribute unsigned long y; readonly attribute unsigned long width; readonly attribute unsigned long height; void setSuggestions(in Object suggestions);          attribute Function onchange;          attribute Function onsubmit;          attribute Function oncancel;          attribute Function onresize;};
-</code></pre>
-
-#### 1.1.1 Attributes
-
-These attributes describe the state of the user agent's search box to the search
-page. All attributes must be "live" and valid throughout the lifetime of the
-page.
-
-**value** of type DOMString
-
-> This attribute must return the text that has been entered into the search box.
-
-**verbatim** of type boolean
-
-> This attribute must return true if and only if the user agent suggests that
-> the search page treat value as a verbatim search query (as opposed to a
-> partially typed search query). Otherwise this attribute must return false. It
-> is recommended that the user agent return true in the following circumstances:
-
-> * The user presses the forward delete key at the end of an input.
-> * The user highlights an option in the search box's dropdown and
- value is updated to reflect the option.
-> * The user agent in any way overridden the value entered by the
- user.
-
-**selectionStart** of type unsigned long
-
-> This attribute must return the offset (in logical order) to the character that
-> immediately follows the start of the selection in the search box. If there is
-> no selection, then it must return the offset (in logical order) to the
-> character that immediately follows the text entry cursor. *Note that in the
-> case there is no explicit text entry cursor, the cursor is implicitly at the
-> end of the input.*
-
-**selectionEnd** of type unsigned long
-
-> This attribute must return the offset (in logical order) to the character that
-> immediately follows the end of the selection in the search box. If there is no
-> selection, then it must return the offset (in logical order) to the character
-> that immediately follows the text entry cursor. *Note that in the case there
-> is no explicit text entry cursor, the cursor is implicitly at the end of the
-> input.*
-
-**x** of type unsigned long
-
-> This attribute must return the horizontal offset (in pixels relative to the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window)'s origin) of the
-> portion of the search box that overlaps with the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window) (i.e. the search
-> box's drop down menu). If the search box does not overlap the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window), this attribute
-> must return zero.
-
-**y** of type unsigned long
-
-> This attribute must return the vertical offset (in pixels relative to the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window)'s origin) of the
-> portion of the search box that overlaps with the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window) (i.e. the search
-> box's drop down menu). If the search box does not overlap the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window), this attribute
-> must return zero.
-
-**width** of type unsigned long
-
-> This attribute must return the horizontal width in pixels of the portion of
-> the search box that overlaps with the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window) (i.e. the search
-> box's drop down menu). If the search box does not overlap the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window), this attribute
-> must return zero.
-
-**height** of type unsigned long
-
-> This attribute must return the vertical height in pixels of the portion of the
-> search box that overlaps with the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window) (i.e. the search
-> box's drop down menu). If the search box does not overlap the
-> [window](http://dev.w3.org/html5/spec/Overview.html#window), this attribute
-> must return zero.
-
-**1.2.2 Methods**
-
-This method allows the search page to control the state of the user agent's
-search box.
-
-**setSuggestions**
-
-> This method accepts one argument, an object in [JavaScript Object
-> Notation](http://www.json.org/) form. It must adhere to the following JSON
-> specification.
-
-> { suggestions: \[ { value: "..." }, { value: "..." } \] }
-
-> **suggestions** of type array - An ordered array of suggestions to be
-> displayed. *Note that calling this method with an empty suggestions array
-> effectively clears search-page-provided-suggestions.*
-
-> **value** of type string - The string completion for this suggestion.
-
-> The user agent must process suggestions as follows:
-
-> 1. Let search-page-provided-suggestions be an initially empty array
- of strings.
-> 2. Upon invoking setSuggestions, atomically replace all items in
- search-page-provided-suggestions with the value of each object in
- the suggestions array.
-
-> If the first search-page-provided-suggestions starts with the current search
-> box value, it is recommended that the user agent display it as an inline
-> autocomplete option. It is recommended that the user agent display the
-> remaining N search-page-provided-suggestions as autocomplete options in a drop
-> down menu below the search box input.
-
-**1.2.3 Event handlers**
-
-These event handlers allow the search page to register to receive notifications
-of changes in the search box attributes.
-
-**onchange**
-
-> If the value of this attribute is a Function, that function must be called
-> when the value of any of the value, verbatim, selectionStart or selectionEnd
-> attributes is changed.
-
-**onsubmit**
-
-> If the value of this attribute is a Function, that function must be called
-> when the user commits the search query. It is recommended that the user agent
-> consider the search query committed when the user presses enter/return.
-
-**oncancel**
-
-> If the value of this attribute is a Function, that function must be called
-> when the user cancels the search query. It is recommended that the user agent
-> consider the search query cancelled when the search box loses focus.
-
-**onresize**
-
-> If the value of this attribute is a Function, that function must be called
-> when the value of any of the x, y, width, or height attributes is changed.
-
-#### 1.2 Navigator interface
-
-NOTE: Because the SearchBox interface is still under development, the Chromium
-implementation exposes it under window.chrome instead of window.navigator. Some
-form of vendor prefixing is typical before new interfaces are standardized.
-
-<pre><code>[Supplemental]interface <b>Navigator</b> { readonly attribute SearchBox searchBox;};
-</code></pre>
-
-**1.2.1 Attributes** **searchBox**
-> **Upon creation of a new [browsing
-> context](http://dev.w3.org/html5/spec/browsers.html#browsing-context), if the
-> location indicates that the page is the user's default search provider, a new
-> SearchBox instance must be created.** If there is a SearchBox instance for the
-> current browser context (the page is the default search provider), this
-> attribute must return the current SearchBox instance. Otherwise this attribute
-> must not be exposed to the DOM.
-
-### 2. Example usage
-
-This trivial example demonstrates how a default search provider may obtain a
-reference to the SearchBox instance, register for events, read state and set
-state.
-
-```none
-var searchBox = window.navigator.searchBox;searchBox.onchange = function() {  if (this.selectionStart == this.selectionEnd &&      this.selectionStart == this.value.length)    alert('Cursor is at end of input');  alert('Setting suggestions for: ' + this.value);  this.setSuggestions({ suggestions: [ { value: "one" }, { value: "two" } ] });}searchBox.onsubmit = function() {  alert('User searched for: ' + this.value);}searchBox.oncancel = function() {  alert('Query when user cancelled: ' + this.value);}searchBox.onresize = function() {  alert('Resized to: ' +        [this.x,         this.y,         this.width,         this.height].join(','));}
-```
-
-### 3. Change log
-
-<table>
-<tr>
-<td> <b>Date</b></td>
-<td><b> Description</b></td>
-</tr>
-<tr>
-<td> Jan 4, 2011</td>
-<td> Change setSuggestions from array of strings to JSON.</td>
-</tr>
-<tr>
-<td> Jan 7, 2011</td>
-<td> Remove "query" from setSuggestions JSON. Update processing model for setSuggestions.</td>
-</tr>
-<tr>
-<td> March 19, 2011</td>
-<td> Change chrome.searchBox to navigator.searchBox.</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/security-keys/index.md b/chromium/docs/website/site/security-keys/index.md
deleted file mode 100644
index fbf7302557f..00000000000
--- a/chromium/docs/website/site/security-keys/index.md
+++ /dev/null
@@ -1,217 +0,0 @@
----
-breadcrumbs: []
-page_name: security-keys
-title: Security Keys
----
-
-Security Keys Policy
-
-This section documents Chrome's policy around Security Keys. Questions may be
-directed to security@chromium.org.
-
-**Registration and authentication attempts by sites**
-
-Web sites can attempt to register or authenticate Security Keys at any time.
-This ability should not be used in an abusive manner, in a way designed to
-compromise the privacy of the user, or in a way that triggers excessive
-notifications in Chrome or by the devices themselves.
-
-If Chrome becomes aware of abuses of this ability we may withdraw Security Key
-privileges from certain websites, or alter our behaviour in other ways to
-ameliorate the problem.
-
-**Site attestation requirements**
-
-Chrome’s users have an interest in ensuring a healthy and interoperable
-ecosystem of Security Keys. To this end, public websites that restrict the set
-of allowed Security Keys should do so based on articulable, technical
-considerations. They should regularly update their set of trusted attestation
-roots that meet their policies (for example, from the FIDO Metadata Service) to
-ensure that new Security Keys that meet their requirements will function.
-
-Chrome expects Security Key manufacturers who have passed FIDO certification to
-keep their attestation metadata updated in the FIDO Metadata Service.
-
-If Chrome becomes aware that websites are not meeting these expectations, we may
-withdraw Security Key privileges from those sites. If Chrome becomes aware that
-manufacturers are not maintaining their attestation metadata we may choose to
-disable attestation for those devices in order to ensure a healthy ecosystem.
-
-**Attestation Batches**
-
-Security Keys are able to present an attestation certificate when registering
-with websites. These attestation certificates are intended to provide assurance
-to the site about the level of protection provided by the Security Key. However,
-they are also a privacy concern if the certificate is unique to a small number
-of Security Keys.
-
-Google Chrome expects Security Keys to meet or exceed the FIDO guidance in this
-respect and thus have attestation certificates that cover at least 100,000
-devices. When starting a new batch, manufacturers may temporarily have fewer
-than 100,000 devices using a given certificate. But, in the long run, Chrome
-expects at least 100,000 to share a certificate. However, Chrome expects at
-least 100,000 devices to share each new certificate before a new batch is begun.
-
-If Chrome becomes aware that certain Security Keys are not meeting these
-requirements we may choose to disable attestation for those devices in order to
-protect the privacy expectations of our users.
-
-(This does not apply to registrations where Chrome has signaled to a Security
-Key that it is operating in an enterprise context as detailed above—certificates
-may be individually identifying in this case.)
-
-If Chrome becomes aware that devices are overly identifiable via other aspects
-of the protocol we may choose to cease allowing registrations, or to cease all
-interoperation with these devices for the same reason.
-
-**User presence tests**
-
-Some Security Keys are required to confirm user presence before performing
-certain operations. This is expected to prevent silent registration and silent
-authentication, both of which could violate our users’ privacy expectations.
-Chrome requires Security Keys to conform to the relevant specifications and to
-effectively implement these checks when required.
-
-If Chrome becomes aware that certain Security Keys can be abused to allow silent
-registration or silent authentication we may choose to cease interoperating with
-these devices in order to protect the privacy expectations of our users.
-
-**User verification tests**
-
-Some Security Keys are capable of verifying the presence of a specific person,
-for example with a fingerprint sensor or PIN entry. Chrome expects these
-Security Keys to effectively protect this personal information.
-
-If Chrome becomes aware that certain Security Keys are disclosing personal
-information, such as PINs or fingerprint hashes, then we may choose to cease
-interoperating with these devices in order to protect user privacy.
-
-Attestation Behavior
-
-Chrome supports two APIs for interacting with Security Keys: U2F (based on the
-[FIDO U2F
-API](https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html),
-but supported via postMessage and an extension) and
-[webauthn](https://github.com/w3c/webauthn). (The latter may need to be enabled
-with [a flag](javascript:void(0);).)
-
-Prior to Chrome 66, the U2F API always returned attestation information directly
-from security keys without obtaining user consent, while the webauthn API was
-unavailable.
-
-Starting with Chrome 66, the U2F API has been altered to align it with webauthn:
-an additional member of the
-[RegisterRequest](https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html#dictionary-registerrequest-members)
-object is supported that mirrors
-[AttestationConveyancePreference](https://w3c.github.io/webauthn/#attestation-convey)
-from webauthn. Sites that have been using the U2F API will experience a change
-in behavior as the default will no longer cause the device's attestation
-information to be returned. To get the old behavior, sites should add an
-"attestation" member to the
-[RegisterRequest](https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html#dictionary-registerrequest-members)
-object with the value "direct". However, they should note that this will trigger
-a permission prompt.
-
-Additionally, the attestation behavior is affected by the
-[SecurityKeyPermitAttestation](/administrators/policy-list-3#SecurityKeyPermitAttestation)
-enterprise policy. This list can contain either U2F AppIDs (which are full URLs)
-or webauthn RP IDs (which are domains). Its affect on attestation is detailed in
-the following tables:
-
-**U2F**
-
-<table>
-<tr>
-<td><b>"attestation" value</b></td>
-<td><b>AppID not listed in policy</b></td>
-<td><b>AppID listed in policy</b></td>
-</tr>
-<tr>
-<td>"none" / not given</td>
-<td>Fresh, self-signed certificate returned</td>
-<td>Fresh, self-signed certificate returned</td>
-</tr>
-<tr>
-<td>"indirect" / "direct"</td>
-<td>User prompted for consent. If granted, attestation from device is returned. Otherwise, fresh, self-signed certificate is returned.</td>
-<td>Attestation from device is returned (with "individual attestation" hint sent to the device).</td>
-</tr>
-</table>
-
-**webauthn**
-
-**<table>**
-**<tr>**
-**<td>"attestation" value</td>**
-**<td>RP ID not listed in policy</td>**
-**<td>RP ID listed in policy</td>**
-**</tr>**
-**<tr>**
-**<td>"none" / not given</td>**
-**<td>Empty, "none" attestation returned</td>**
-**<td>Empty, "none" attestation returned</td>**
-**</tr>**
-**<tr>**
-**<td>"indirect" / "direct"</td>**
-**<td>User prompted for consent. If granted, attestation from device is returned. Otherwise a permission error is generated.</td>**
-**<td>Attestation from device is returned.</td>**
-**</tr>**
-**<tr>**
-**<td>"enterprise"</td>**
-**<td>Same as for "direct".</td>**
-**<td>Attestation from device is returned (with "individual attestation" hint sent to the device).</td>**
-**</tr>**
-**</table>**
-
-(The behavior of "indirect" attestation in webauthn may change in the future
-but, for now, it is identical to "direct".)
-
-Individual Attestation
-
-Security Keys are required to batch attestation information across at least
-100 000 devices to preserve privacy (see below). However, in some enterprise
-contexts it is desirable to be able to track individual security keys. To enable
-this the
-[SecurityKeyPermitAttestation](/administrators/policy-list-3#SecurityKeyPermitAttestation)
-enterprise policy can cause a signal to be sent to security keys to indicate
-that an individual attestation certificate may be returned for some
-registrations.
-
-For U2F, the most-significant bit of the P1 byte in a
-[U2F_REGISTER](https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.html#command-and-parameter-values)
-message will be set when an AppID is listed in the policy. It is up to the
-Security Key to act on this if it wishes.
-
-For webauthn, that bit will be set if the RP ID is listed in the policy and
-"enterprise" attestation was requested. This is because RP IDs are coarser than
-AppIDs and so enumeration in the policy may not offer enough control.
-
-Inadequately batched attestation certificates
-
-Some security keys have been found to contain attestation certificates that do
-not meet the 100 000-batch requirement. Specifically, older models of the
-following products contain individually unique certificates:
-
-* KEY-ID FIDO U2F security key
-* HyperFIDO K5
-* HyperFIDO Mini
-
-Because of this, attestation certificates with an issuer of "FT FIDO 0100" will
-be considered to be individually identifying certificates in Google Chrome 67
-and later. Such certificates will be replaced with a fresh, self-signed
-certificate in U2F and will result in an empty, "none" attestation in
-webauthn—even when direct attestation is requested.
-
-This measure is expected to also affect the following products, which we suspect
-have the same issue but which are not clearly commercially available and thus we
-have not tested:
-
-* Feitian ePass FIDO USB
-
-Users of all these products could, potentially, find that they are unable to
-register these security keys when using Chrome 67 or later. However, at the time
-of writing, testing shows no impact in practice.
-
-The SecurityKeyPermitAttestation enterprise policy will override this behaviour
-and cause the individually identifying certificates to be returned for the
-enumerated AppIDs and RP IDs. (See Individual Attestation, above.) \ No newline at end of file
diff --git a/chromium/docs/website/site/servicification/index.md b/chromium/docs/website/site/servicification/index.md
deleted file mode 100644
index 573908c6d7c..00000000000
--- a/chromium/docs/website/site/servicification/index.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-breadcrumbs: []
-page_name: servicification
-title: Servicification
----
-
-## Summary
-
-The Chromium codebase now supports many platforms and use cases. In response, we
-need to migrate the code base to a more modular, service-oriented architecture.
-This will produce reusable and decoupled components while also reducing
-duplication. It also allows the Chrome team and other groups to experiment with
-new features without needing to modify Chrome.
-
-**Contact**
-
-mailing list:
-[services-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/services-dev)
-
-## Background
-
-* [design
- doc](https://docs.google.com/document/d/15I7sQyQo6zsqXVNAlVd520tdGaS8FCicZHrN0yRu-oU/edit#)
-* [presentation](https://drive.google.com/file/d/0BwPS_JpKyELWN3BHSFRicEJ0SDg/view)
- & [slide deck](http://go/servicification-presentation) (both
- internal only)
-* [how to create a
- service](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/servicification.md)
-* [Mandoline](https://docs.google.com/document/d/1AjTsDoY6ugaykfqGLyOHYfp67hMp0tMjDbZcJ5EH9fw/edit#heading=h.otewm6d8oykp):
- experimental browser that we prototyped these ideas in
-
-## Major projects
-
-As part of this effort, we are refactoring existing components of Chromium into
-isolated services. Here are some of the major projects underway:
-
-**UI Service**
-
-[UI ](/developers/mus-ash)(aka MUS)
-
-mailing list:
-[mustash-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/mustash-dev)
-
-**Network Service**
-
-[Network](https://docs.google.com/document/d/1wAHLw9h7gGuqJNCgG1mP1BmLtCGfZ2pys-PdZQ1vg7M/edit)
-
-mailing list:
-[network-service-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/network-service-dev)
-[sherifing
-notes](https://docs.google.com/document/d/1xjFD9yJVuUtekJe3a9rpBmYqTOvRuGwML3BP2SBvC3s/edit#heading=h.nyhdzanbjl3i)
-[conversion cheat
-sheet](https://docs.google.com/document/d/1OyBYvN0dwvpqfSZBdsfZ29iTFqGnVS2sdiPV14Z-Fto/edit?usp=sharing)
-[bug triaging
-instructions](https://docs.google.com/document/d/1hMav0DUXW5ZF67L_g5B92VR-hYEgfUchhU9oHBByeJA/edit?usp=sharing)
-
-**Device Service˜**
-
-[Device](https://bugs.chromium.org/p/chromium/issues/detail?id=612328)
-
-**Identity Service**
-
-[Identity](https://docs.google.com/document/d/1gbS6QjjobxwSyl1FUv-4wct7q4YdLE2KjFF433uPvqI/edit#heading=h.c3qzrjr1sqn7)
-
-[Conversion cheat
-sheet](https://docs.google.com/document/d/14f3qqkDM9IE4Ff_l6wuXvCMeHfSC9TxKezXTCyeaPUY/edit)
-
-mailing list:[
-identity-service-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/identity-service-dev)
-
-**Past Projects**
-
-* [Prefs](https://docs.google.com/document/d/1JU8QUWxMEXWMqgkvFUumKSxr7Z-nfq0YvreSJTkMVmU/edit?usp=sharing)
-* [Process/Sandbox](https://bugs.chromium.org/p/chromium/issues/detail?id=654986)
-
-A prioritized list of projects that still need to be done is
-[available](https://docs.google.com/document/d/1VB0v_xwd7TqBLEF-5sFsC-zwqveEMS3EgJCtS_enzz8/edit?usp=sharing).
-
-## Code Location
-
-[src/services/](https://chromium.googlesource.com/chromium/src/+/HEAD/services/) \ No newline at end of file
diff --git a/chromium/docs/website/site/site.json b/chromium/docs/website/site/site.json
deleted file mode 100644
index fa7907b59ab..00000000000
--- a/chromium/docs/website/site/site.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "layout": "page.njk"
-}
diff --git a/chromium/docs/website/site/spdy/An_Argument_For_Changing_TCP_Slow_Start.pdf.sha1 b/chromium/docs/website/site/spdy/An_Argument_For_Changing_TCP_Slow_Start.pdf.sha1
deleted file mode 100644
index 6402c08b8cc..00000000000
--- a/chromium/docs/website/site/spdy/An_Argument_For_Changing_TCP_Slow_Start.pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-77d1d91e87c24b9159d616c4a647ebdcb36861f4 \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/More_Bandwidth_Doesn_t_Matter_2_(2).pdf.sha1 b/chromium/docs/website/site/spdy/More_Bandwidth_Doesn_t_Matter_2_(2).pdf.sha1
deleted file mode 100644
index f09237ba312..00000000000
--- a/chromium/docs/website/site/spdy/More_Bandwidth_Doesn_t_Matter_2_(2).pdf.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2b2de79b2ca5ea3dd3b6ada3d22578a4d5da537a \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/effect_of_initial_cwnd_on_plt(1).png.sha1 b/chromium/docs/website/site/spdy/effect_of_initial_cwnd_on_plt(1).png.sha1
deleted file mode 100644
index 21719fc391d..00000000000
--- a/chromium/docs/website/site/spdy/effect_of_initial_cwnd_on_plt(1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7a6815bbb83faa1c87fb88b7b7a9f09d21d56c1e \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/http2/index.md b/chromium/docs/website/site/spdy/http2/index.md
deleted file mode 100644
index 04c50e8f1fa..00000000000
--- a/chromium/docs/website/site/spdy/http2/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: http2
-title: HTTP/2
----
-
-## Instructions
-
- Get and build the latest Chromium source:
- <https://code.google.com/p/chromium/wiki/UsingGit>, **OR** join the [Chrome
- Canary](https://www.google.com/intl/en/chrome/browser/canary.html) channel.
-
- Run Chrome with the "--enable-spdy4" command-line flag (an internal name for
- HTTP/2).
-
- Enjoy!
-
- Contact [Bence Béky](mailto:bnc@chromium.org) if you have questions. \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/index.md b/chromium/docs/website/site/spdy/index.md
deleted file mode 100644
index 160c39c110c..00000000000
--- a/chromium/docs/website/site/spdy/index.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-breadcrumbs: []
-page_name: spdy
-title: SPDY
----
-
-**SPDY is deprecated. This page is out of date.**
-
-SPDY was an experimental protocol for the web with the primary goal to reduce
-latency of web pages. Its successor is
-[HTTP/2](http://httpwg.org/specs/rfc7540.html).
-
-* Documentation
- * [SPDY: An experimental protocol for a faster
- web](/spdy/spdy-whitepaper)
- * [SPDY protocol specification](/spdy/spdy-protocol)
- * [Server Push and Server
- Hint](/spdy/link-headers-and-server-hint)
- * Research
- * [An Argument For Changing TCP Slow
- Start](/spdy/An_Argument_For_Changing_TCP_Slow_Start.pdf) -
- Mike Belshe 01/11/10
- * [More Bandwidth Doesn't Matter
- (much)](http://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRldnxneDoxMzcyOWI1N2I4YzI3NzE2)
- - Mike Belshe 04/08/10
- * Standards Work
- * [SSL Next-Protocol-Negotiation Extension
- ](http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-00.html)-
- Adam Langley 01/20/10
- * [TLS False
- Start](https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00)
- - Langley, Modadugu, Mueller 06/2010
- * [TLS Snap
- Start](http://tools.ietf.org/html/draft-agl-tls-snapstart-00)
- - Adam Langley 06/18/2010
- * [SPDY Server and Proxy
- Authentication](/spdy/spdy-authentication)
-* Code
- * Chromium client implementation:
- <https://cs.chromium.org/chromium/src/net/spdy/>
-* Discuss
- * <http://groups.google.com/group/spdy-dev>
-* External work
- * Servers
- * Jetty Web Server:
- <http://wiki.eclipse.org/Jetty/Feature/SPDY>
- * Apache module for SPDY: <http://code.google.com/p/mod-spdy/>
- * Python implementation of a SPDY server:
- <http://github.com/mnot/nbhttp/tree/spdy>
- * Ruby SPDY: <https://github.com/igrigorik/spdy>
- * node.js SPDY: <https://github.com/indutny/node-spdy>
- * Libraries
- * Netty SPDY (Java library):
- <http://netty.io/blog/2012/02/04/>
- * Ruby wrapper around Chromium SPDY framer:
- <https://github.com/romanbsd/spdy>
- * Go SPDY: <http://godoc.org/code.google.com/p/go.net/spdy>
- * Erlang SPDY: <https://github.com/RJ/erlang-spdy>
- * Java SPDY:
- <http://svn.apache.org/repos/asf/tomcat/trunk/modules/tomcat-lite>
- * C SPDY (libspdy): <http://libspdy.org/index.html> (to be
- used by libcurl:
- <http://daniel.haxx.se/blog/2011/10/18/libspdy/>)
- * C SPDY (spindly): <https://github.com/bagder/spindly>
- * C SPDY (spdylay): <https://github.com/tatsuhiro-t/spdylay>
- * iPhone SPDY: <https://github.com/sorced-jim/SPDY-for-iPhone>
- * Browsers
- * Google Chrome
- * Mozilla Firefox
-* Tools
- * [Summary of SPDY tools](/spdy/spdy-tools-and-debugging)
- * [Chrome page benchmarking
- tool](/developers/design-documents/extensions/how-the-extension-system-works/chrome-benchmarking-extension) \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/link-headers-and-server-hint/index.md b/chromium/docs/website/site/spdy/link-headers-and-server-hint/index.md
deleted file mode 100644
index a2937a4809f..00000000000
--- a/chromium/docs/website/site/spdy/link-headers-and-server-hint/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: link-headers-and-server-hint
-title: Server Push and Server Hints
----
-
-In order to deliver resources to browsers more quickly, SPDY employs two
-mechanisms, Server Push and Server Hint.
-
-### Server Push
-
-Server Push is where the server pushes a resource directly to the client without
-the client asking for the resource. The server is making an assumption here that
-pushing the resource is desirable. Pushing a cacheable resource can be risky, as
-the browser might already have the resource and the push can be redundant.
-
-Specifications:
-
-* [SPDY Specification](/spdy/spdy-protocol)
-
-Server Hint
-
-Server Hint is a mechanism where the server can notify the client of a resource
-that will be needed before the client can discover it. The server does not send
-the entire contents of the resource, but rather just the URL as an early part of
-a response. The client can then validate its cache (potentially even eliminating
-the need for a GET-if-modified-since), and will formally request the resource
-only if needed.
-
-Server Hint is implemented using the LINK header with HTTP, and overlaps with
-existing link prefetching semantics.
-
-Specifications:
-
-* [LINK rel=prefetch from
- Mozilla](https://developer.mozilla.org/en/Link_prefetching_FAQ)
-* [LINK
- rel=subresource](/spdy/link-headers-and-server-hint/link-rel-subresource)
-
-### Comparison of Server Push and Server Hint
-
-<table>
-<tr>
-<td> Pro</td>
-<td> Con</td>
-</tr>
-<tr>
-<td>Server Push</td>
-
-* <td> Lowest Latency Delivery Mechanism</td>
- * <td>Saves 1 round-trip</td>
-
-* <td>If the client already has the resource cache, the load is
- wasteful</td>
-* <td>The Application must decide if it should push the resource, the
- protocol cannot know whether the client has a resource</td>
-
-</tr>
-<tr>
-<td> Server Hint</td>
-
-* <td>Provides early discovery of critical resources</td>
-* <td>Can include etag or last-modified information to avoid
- over-the-network cache validation checks</td>
-* <td>Allows the client to participate in cache validation before
- sending the resource</td>
-
-* <td>Still requires a round-trip between the client and server to
- fetch the resource.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/link-headers-and-server-hint/link-rel-subresource/index.md b/chromium/docs/website/site/spdy/link-headers-and-server-hint/link-rel-subresource/index.md
deleted file mode 100644
index 1c47dd081c3..00000000000
--- a/chromium/docs/website/site/spdy/link-headers-and-server-hint/link-rel-subresource/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/link-headers-and-server-hint
- - Server Push and Server Hints
-page_name: link-rel-subresource
-title: LINK rel=subresource
----
-
-### This feature [has been deprecated](https://groups.google.com/a/chromium.org/d/msg/blink-dev/Y_2eFRh9BOs/gULYapoRBwAJ). Web developers should use the new [Preload API](http://w3c.github.io/preload/). \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-authentication/index.md b/chromium/docs/website/site/spdy/spdy-authentication/index.md
deleted file mode 100644
index fd3e474bf0f..00000000000
--- a/chromium/docs/website/site/spdy/spdy-authentication/index.md
+++ /dev/null
@@ -1,173 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: spdy-authentication
-title: SPDY Server and Proxy Authentication
----
-
-Support for Server and Proxy Authentication in SPDY is very similar to Server
-and Proxy Authentication in HTTP.
-
-## Server Authentication
-
-When a client sends a request to an origin server that requires authentication,
-the server can reply with a `401 Unauthorized`" response, and a
-`WWW-Authenticate` header that defines the authentication scheme to be used. The
-client then retries the request with an `Authorization` header appropriate to
-the specified authentication scheme.
-
-There are four options for sever authentication, Basic, Digest, NTLM and
-Negotiate (SPNEGO). The first two options were defined in [RFC
-2617](http://www.ietf.org/rfc/rfc2617.txt), and are stateless. The second two
-options were developed by Microsoft and specified in [RFC
-4559](http://www.ietf.org/rfc/rfc4559.txt), and are stateful; otherwise known as
-multi-round authentication, or connection authentication.
-
-### Stateless Authentication
-
-Both Basic and Digest Server Authentication are stateless. These schemes define
-ways for the browser to encode a username and password in the HTTP request which
-the server can verify. In the case of Basic Auth, the client simply base64
-encodes the password. In the case of Digest, the client hashes the username,
-password, and a variety of other attributes together. Once a server requests
-Basic or Digest Authentication, the client is able to generate a correct
-`Authorization` header for any subsequent request to the same server.
-
-Basic and Digest authentication is handled in SPDY in much the same way as with
-HTTP. Here is a sample SPDY session using Basic authentication:
-
-```none
- Client                        Server
- ------                        ------
- *** Client makes initial, unauthenticated request to the server.
-   |------------------------------>|
-   | 1) SYN_STREAM                 |
-   |    stream_id = 1              |
-   |    url = http://example.com/a |
-   |                               |
-   |<------------------------------|
-   | 2) SYN_REPLY                  |
-   |    stream_id = 1              |
-   |    status = 401               |
-   |    www-authenticate = Basic   |
-   |                               |
- *** Client retries request with authorization header.
-   |------------------------------>|
-   | 3) SYN_STREAM                 |
-   |    stream_id = 3              |
-   |    url = http://example.com/a |
-   |    authorization = Basic XXX  |
-   |<------------------------------|
-   | 4) SYN_REPLY                  |
-   |    stream_id = 3              |
-   |    status = 200               |
-   |                               |
- *** Client request next resource with authorization header.
-   |------------------------------>|
-   | 5) SYN_STREAM                 |
-   |    stream_id = 5              |
-   |    url = http://example.com/b |
-   |    authorization = Basic XXX  |
-   |<------------------------------|
-   | 4) SYN_REPLY                  |
-   |    stream_id = 5              |
-   |    status = 200               |
-   |                               |
-```
-
-### Stateful Authentication
-
-### The NTLM and Negotiate Authentication scheme are more complicated. Instead of enabling the browser to generate an `Authorization` header which can be used for subsequent requests to the server, these schemes attempt to authenticate the connection. After the authentication is complete, the server marks the connection as authorized, and the client sends subsequent requests without any `Authorization` header.
-
-Multi-round authentication is handled in SPDY in much the same way as with HTTP.
-A new stream is created for each round in the process, corresponding to a
-request/response pair in the HTTP process.
-
-```none
- Client                        Server
- ------                        ------
- *** Client makes initial, unauthenticated request to the server.
-   |---------------------------------->|
-   | 1) SYN_STREAM                     |
-   |    stream_id = 1                  |
-   |    url = http://example.com/a     |
-   |                                   |
-   |<----------------------------------|
-   | 2) SYN_REPLY                      |
-   |    stream_id = 1                  |
-   |    status = 401                   |
-   |    www-authenticate = Negotiate   |
-   |                                   |
- *** Client retries request with authorization header.
-   |---------------------------------->|
-   | 3) SYN_STREAM                     |
-   |    stream_id = 3                  |
-   |    url = http://example.com/a     |
-   |    authorization = Negotiate AA   |
-   |<----------------------------------|
-   | 4) SYN_REPLY                      |
-   |    stream_id = 3                  |
-   |    status = 401                   |
-   |    www-authenticate = Negotiate BB|
-   |                                   |
- *** Client retries request with authorization header.
-   |---------------------------------->|
-   | 3) SYN_STREAM                     |
-   |    stream_id = 3                  |
-   |    url = http://example.com/a     |
-   |    authorization = Negotiate CC   |
-   |<----------------------------------|
-   | 4) SYN_REPLY                      |
-   |    stream_id = 3                  |
-   |    status = 200                   |
-   |    www-authenticate = Negotiate DD|
-   |                                   |
- *** Client request next resource without authorization header.
-   |---------------------------------->|
-   | 5) SYN_STREAM                     |
-   |    stream_id = 5                  |
-   |    url = http://example.com/b     |
-   |                                   |
-   |<----------------------------------|
-   | 4) SYN_REPLY                      |
-   |    stream_id = 5                  |
-   |    status = 200                   |
-   |                                   |
-```
-
-However, one difference in how stateful authentication is handled between HTTP
-and SPDY results from the multiplexed nature of SPDY sessions. With a single
-SPDY session, a client can sent multiple requests in parallel before receiving
-the first response. This complicates the stateful authentication schemes which
-are attempting to perform a single authentication of the **connection**. If the
-server receives two requests (streams 1 and 3) on an unauthenticated session, it
-will reply 401 Unauthorized to each stream. However, it is not entirely clear
-how the authentication should continue.
-
-One option would be for the client to complete the authentication on the first
-unauthorized stream and then assume that the connection will then be
-authenticated and continue issuing requests without authorization headers.
-However, it is possible for different resources on the same server to require
-different authentication. These resources would need to specify different
-"realms" when requesting authentication. When the client receives a 401, it
-would need to be aware of any outstanding authentication transaction for that
-same realm, and wait for it to complete.
-
-An alternative option would be for the client to complete the authentication for
-both unauthorized streams. However, as currently specified, there is no obvious
-way to distinguish the 2nd attempt to request the first resource from the 2nd
-attempt to request the second resource. It is possible the the URL in the
-headers might be identical. It would seem to require that the client pass a
-`X-Associated-Stream, or X-Authorization-Context` header in each subsequent
-authentication request so the server is able to correctly understand the context
-of the request.
-
-## Proxy Authentication
-
-When a client sends a request to a proxy server that requires authentication,
-the same basic protocol is used. Instead of a 401 Unauthorized response, the
-proxy can reply with a `407 Proxy Authentication Required` response, and a
-`Proxy-Authenticate` header instead of an Authenticate. The client then retries
-the request with a `Proxy-Authorization` header in place of an Authorization
-header. \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-best-practices/index.md b/chromium/docs/website/site/spdy/spdy-best-practices/index.md
deleted file mode 100644
index f8b89417b9c..00000000000
--- a/chromium/docs/website/site/spdy/spdy-best-practices/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: spdy-best-practices
-title: SPDY Best Practices
----
-
-Application level
-
-Use a single connection - it’s better for SPDY performance and for the internet
-to use as few connections as possible. For SPDY, this will result in better
-packing of data into packets, better header compression, less connection state,
-fewer handshakes, etc. It improves TCP behavior across the internet and reduces
-bufferbloat. Interacts better with NATs as well as it requires less state.
-
-Don’t shard hostnames - This is a hack used by web apps to work around browser
-parallelism limits. For all the reasons that we suggest using a single
-connection, hostname sharding is suboptimal when you can use SPDY instead.
-Furthermore, hostname sharding requires extra DNS queries and complicates web
-apps due to using multiple origins.
-Use server push instead of inlining - This is a hack used by web apps to reduce
-RTTs. Inlining reduces the cacheability of web pages and may increase web page
-sizes due to base64 encoding. Instead, the server can just push the content.
-Use request prioritization - Clients can advise the server on relative
-priorities for resources. Some basic heuristics which clients should all do
-generally is to make sure that html &gt; js, css &gt; \*.
-Use reasonable SPDY frame sizes - Although the spec allows for large frames, it
-is often desirable to use smaller frames, because this allows for better
-interleaving of frames from different streams.
-*Don't use CSS sprites with external stylesheets* - Resources in external
-stylesheets are obviously only discovered after the external stylesheet has been
-downloaded, and only once the rule matches an element. The advantage they
-provide of reducing HTTP requests is unnecessary with SPDY due to its
-multiplexing. Therefore, CSS sprites just make it slower.
-SSL
-Use smaller, but complete, certificate chains - The size of certificate chains
-can substantially affect connection startup performance due to increased
-serialization latency and using up precious bytes in the initcwnd, costing extra
-RTTs. Also, when the server does not present the full certificate chain, then
-clients have to fetch intermediate certificates, adding yet more roundtrips
-before the connection becomes usable by the application.
-Use wildcard certs - SPDY allows for connection sharing, which helps reduce the
-number of connections, which is beneficial for all the reasons already stated.
-Don’t use overly large SSL write buffers - Large TLS application records will
-span multiple packets. Since applications must process complete TLS application
-records, this may add latency. Google servers use 2k buffers.
-TCP
-Servers should ensure initcwnd is at least 10 - initcwnd is a major bottleneck
-that impacts initial page load times. HTTP works around this by opening multiple
-connections simultaneously, essentially achieving n \* initcwnd initial
-congestion window sizes.
-Turn off tcp_slow_start_after_idle - Linux by default will have
-tcp_slow_start_after_idle set to 1. This drops cwnd back down to initcwnd and
-goes back to slow start after the connection has been “idle” (defined as the
-RTO). This kills persistent single connection performance and should be turned
-off.
-Persist cwnd - SPDY provides a SETTINGS frame to allow for persisting settings
-across connections. Clients can use this information to remember their previous
-stable cwnd level and replay that to the server. Servers can use kernel
-modifications to set the cwnd for the connection. \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-data/index.md b/chromium/docs/website/site/spdy/spdy-data/index.md
deleted file mode 100644
index 8533b41e0ab..00000000000
--- a/chromium/docs/website/site/spdy/spdy-data/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: spdy-data
-title: SPDY data
----
-
-Overall network efficiency of SPDY compared to HTTP. A lot of the speed benefits
-of flip come from simply using the network more efficiently. Using fewer
-connections means fewer packets. Using more compression, means fewer bytes. Due
-to multiplexing, SPDY turns HTTPs many virtually half-duplex channels into a
-single, full duplex channel.
-
-When used loading our top-25 web pages, SPDY sent 40% fewer packets and 15%
-fewer bytes than the same pages loaded over HTTP.
-
-[<img alt="image"
-src="/spdy/spdy-data/spdy-bytes.png">](/spdy/spdy-data/spdy-bytes.png)
-
-Here is a graph of SPDY and HTTP, measuring the top-25 web pages as the packet
-loss rate varies. Packet loss is an area ripe for more research; generally we
-believe global worldwide packet loss is ~1 to 1.5%. Some areas are better, and
-some areas are worse.
-
-[<img alt="image"
-src="/spdy/spdy-data/spdy-pktloss.png">](/spdy/spdy-data/spdy-pktloss.png)
-
-Here is a graph of SPDY and HTTP average page load times as the RTT (round-trip
-time) varies. RTT can be as low as 5-10ms for high speed networks, or 500ms for
-some mobile or distant networks. Satellite links, known for their high
-throughput, still have high latency, and can have RTTs of 150ms or more.
-Generally, a 20ms RTT is great, 50ms RTT is not too shabby, and a 115ms RTT is
-about average.
-
-[<img alt="image"
-src="/spdy/spdy-data/spdy-rtt2.png">](/spdy/spdy-data/spdy-rtt2.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-data/spdy-bytes.png.sha1 b/chromium/docs/website/site/spdy/spdy-data/spdy-bytes.png.sha1
deleted file mode 100644
index e51ee1cf6f0..00000000000
--- a/chromium/docs/website/site/spdy/spdy-data/spdy-bytes.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-27abf9e28f1e74ce13a1cda3a94772ac414a062f \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-data/spdy-pktloss.png.sha1 b/chromium/docs/website/site/spdy/spdy-data/spdy-pktloss.png.sha1
deleted file mode 100644
index 41f8c59e20d..00000000000
--- a/chromium/docs/website/site/spdy/spdy-data/spdy-pktloss.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8897f7a926d456d9b3099bffc1f65989d4b30af6 \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-data/spdy-rtt.png.sha1 b/chromium/docs/website/site/spdy/spdy-data/spdy-rtt.png.sha1
deleted file mode 100644
index 7b530383409..00000000000
--- a/chromium/docs/website/site/spdy/spdy-data/spdy-rtt.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1cb15eb0cb400148d1ff67510966a1dccb6f1fa1 \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-data/spdy-rtt2.png.sha1 b/chromium/docs/website/site/spdy/spdy-data/spdy-rtt2.png.sha1
deleted file mode 100644
index 7b530383409..00000000000
--- a/chromium/docs/website/site/spdy/spdy-data/spdy-rtt2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1cb15eb0cb400148d1ff67510966a1dccb6f1fa1 \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/index.md b/chromium/docs/website/site/spdy/spdy-protocol/index.md
deleted file mode 100644
index fa4b289f0b4..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/index.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: spdy-protocol
-title: SPDY Protocol
----
-
-* [Draft 4](http://mbelshe.github.com/SPDY-Specification/)
- * This is a placeholder. Not spec'd or implemented yet. Expected
- changes:
- * Server push of DNS records & certificates for better
- connection sharing
- * Better compression
- * Better prioritization
- * Better flow control mechanisms
-* [Draft 3.1](/spdy/spdy-protocol/spdy-protocol-draft3-1)
- Adds session-layer flow control.
-* [Draft 3](/spdy/spdy-protocol/spdy-protocol-draft3)
- Adds flow control.
-* [Draft 2](/spdy/spdy-protocol/spdy-protocol-draft2)
- Clarifies Server Push & improves stream cancellation semantics.
-* [Draft 1](/spdy/spdy-protocol/spdy-protocol-draft1)
- Originally published Nov 11, 2009. \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/controlframetypes/index.md b/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/controlframetypes/index.md
deleted file mode 100644
index 1f071737916..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/controlframetypes/index.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/spdy-protocol
- - SPDY Protocol
-- - /spdy/spdy-protocol/spdy-protocol-draft1
- - SPDY Protocol - Draft 1
-page_name: controlframetypes
-title: ControlFrameTypes
----
-
-<table>
-<tr>
-<td><b>Control Frame</b></td>
-<td> <b>Numeric Id</b></td>
-</tr>
-<tr>
-<td> SYN_STREAM</td>
-<td>1 </td>
-</tr>
-<tr>
-<td> SYN_REPLY</td>
-<td>2</td>
-</tr>
-<tr>
-<td> FIN_STREAM</td>
-<td>3 </td>
-</tr>
-<tr>
-</tr>
-<tr>
-<td> NOOP</td>
-<td>5 </td>
-</tr>
-<tr>
-<td> PING</td>
-<td>6</td>
-</tr>
-<tr>
-<td> GOAWAY</td>
-<td>7</td>
-</tr>
-<tr>
-<td> SUBRESOURCE</td>
-<td> 8</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/index.md b/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/index.md
deleted file mode 100644
index 723eac0fc0e..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft1/index.md
+++ /dev/null
@@ -1,921 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/spdy-protocol
- - SPDY Protocol
-page_name: spdy-protocol-draft1
-title: SPDY Protocol - Draft 1
----
-
-<table>
-<tr>
-
-<td>Mike Belshe (mbelshe at google.com) & Roberto Peon (fenix at
-google.com)</td>
-
-<td>*DRAFT*</td>
-
-<td>## Overview</td>
-
-<td>One of the bottlenecks of current HTTP is that it relies solely on multiple
-connections for concurrency. This causes several problems, including additional
-round trips for connection setup, slow-start delays, and a constant rationing by
-the client where it tries to avoid opening too many connections to a single
-server. HTTP "pipelining" doesn't help, as each connection may be blocked on the
-request at the head of the line; in addition, many proxies apparently have poor
-support for pipelining. Applications, in their desire to create many
-connections, create many sub-domains to work around browser per-domain
-connection throttling.</td>
-
-<td>SPDY aims to address this and other application-layer problems associated
-with modern web applications, while requiring little or no change from the
-perspective of web application writers.</td>
-
-<td>In a nutshell, SPDY adds a framing layer for multiplexing multiple,
-concurrent streams across a single TCP connection. The framing layer is
-optimized for HTTP-like request-response streams.</td>
-
-<td>The SPDY session offers three basic improvements over HTTP:</td>
-
-* <td>Multiplexed requests. There is no limit to the number of
- requests that can be issued concurrently over a single SPDY
- connection. Because requests are interleaved on a single channel,
- the efficiency of TCP is much higher.</td>
-
-* <td>Prioritized requests. Clients can request certain resources to
- be delivered first. This avoids the problem of congesting the
- network channel with non-critical resources when a high-priority
- request is pending.</td>
-
-* <td>Compressed headers. Clients today send a significant amount of
- redundant data in the form of HTTP headers. Because a single web
- page may require 50 or 100 subrequests, this data is significant.
- Compressing the headers saves a significant amount of latency and
- bandwidth compared to HTTP.</td>
-
-<td>Note that for the most part, SPDY attempts to preserve the existing
-semantics of HTTP features. All features such as cookies, etags, vary headers,
-content-encoding negotiations, etc work exactly as they do with HTTP; SPDY only
-replaces the way the data is written to the network.</td>
-
-<td>## Definitions</td>
-
-* <td>*connection*: A TCP-level connection between two endpoints.</td>
-* <td>*endpoint*: Either the client or server of a connection.</td>
-* <td>*session*: A framed sequence of data chunks. Frames are defined
- as SPDY frames; see <a
- href="/spdy/spdy-protocol/spdy-protocol-draft1#framing">Framing</a>
- below.</td>
-* <td>*stream*: A bi-directional flow of bytes across a virtual
- channel within a SPDY session.</td>
-
-<td>## Main differences from HTTP</td>
-
-<td>SPDY is intended to be as compatible as possible with current web-based
-applications. This means that, from the perspective of the server business logic
-or application API, nothing has changed. To achieve this, all of the application
-request and response header semantics are preserved. SPDY introduces a "session"
-which resides between the HTTP application layer and the TCP transport to
-regulate the flow of data. This "session" is akin to an HTTP request-response
-pair. The following changes represent the differences between SPDY and
-HTTP:</td>
-
-<td>#### The request</td>
-
-<td>#### To initiate a new request, clients first create a new SPDY session. Once the session is created, the client can create a new SPDY stream to carry the request. Part of creating the stream is sending the HTTP header block. The HTTP header block in SPDY is almost unchanged from today's HTTP header block, with the following differences:</td>
-
-* <td>The first line of the request is unfolded into name/value pairs
- like other HTTP headers. The names of the first line fields are
- `method`, `url`, and `version`. These keys are required to be
- present. The 'url' is the fully-qualified URL, containing protocol,
- host, port, and path.</td>
-* <td>Duplicate header names are not allowed.</td>
-* <td>Header names are all lowercase.</td>
-* <td>The `Connection` and `Keep-Alive` headers are no longer valid
- and are ignored if present.</td>
-* <td>Clients are assumed to support `Accept-Encoding: gzip`. Clients
- that do not specify any body encodings receive gzip-encoded data
- from the server.</td>
-* <td>HTTP request headers are compressed. This is accomplished by
- compressing all data sent by the client with gzip encoding.</td>
-* <td>The "host" header is ignored. The host:port portion of the HTTP
- URL is the definitive host.</td>
-* <td>User-agents are expected to support gzip and deflate
- compression. Regardless of the Accept-Encoding sent by the
- user-agent, the server may select gzip or deflate encoding at any
- time.</td>
-* <td>POST-specific changes:</td>
- * <td>POST requests are expected to contain a data stream as part
- of the post; see <a
- href="/spdy/spdy-protocol/spdy-protocol-draft1#dataflow">Data
- flow</a> below.</td>
- * <td>`Content-length` is only advisory for length (so that
- progress meters can work).</td>
- * <td>Chunked encoding is no longer valid.</td>
- * <td>The POST data stream is terminated by a zero-length data
- frame.</td>
-
-<td>#### The response</td>
-
-<td>#### When responding to a HTTP request, servers will send data frames using the SPDY stream created by the client. The response is similar to HTTP/1.1 in that it consists of a header block followed by a body. However, there are a few notable changes:</td>
-
-* <td>The response status line is unfolded into name/value pairs like
- other HTTP headers. The names of the status line are `status `and
- `version`. These keys are required to be present</td>
-* <td>If the SPDY reply happens before a SYN_STREAM, then it includes
- parameters that inform the client regarding the request that would
- have been made to receive this response, by including `url `and
- `method` keys. </td>
-* <td>All header names must be lowercase.</td>
-* <td>The `Connection` and `Keep-alive` response headers are no longer
- valid.</td>
-* <td>`Content-length` is only advisory for length.</td>
-* <td>Chunked encoding is no longer valid.</td>
-* <td>Duplicate header names are not allowed.</td>
-
-<td>## Connections</td>
-
-<td>The first implementation of the SPDY session runs atop TCP, similarly to how
-HTTP works today. The client is expected to be the TCP connection initiator.
-Because it runs on TCP, we have a reliable transport. Unlike HTTP, all
-connections with SPDY are persistent connections. The HTTP connection header
-does not apply.</td>
-
-<td>For best performance, it is expected that clients will not close open
-connections until the user navigates away from all web pages referencing a
-connection, or until the server closes the connection. Servers are encouraged to
-leave connections open for as long as possible, but can terminate idle
-connections after some amount of inactivity if necessary.</td>
-
-<td>## Framing</td>
-
-<td>Once the TCP connection is established, clients and servers exchange framed
-messages. There are two types of frames: control frames and data frames. Frames
-always have a common header which is 8 bytes.</td>
-
-<td>The first bit is a control bit indicating whether a frame is a control frame
-or data frame. Control frames carry a version number, a frame type, flags, and a
-length. Data frames contain the stream ID, flags, and the length for the payload
-carried after the common header. The simple header is designed to make reading
-and writing of frames easy.</td>
-
-<td>All integer values, included length, version, and type, are in network byte
-order. SPDY does not enforce alignment of types in dynamically sized
-frames.</td>
-
-<td>### Control frames</td>
-
-<td> +----------------------------------+</td>
-
-<td> |C| Version(15bits) | Type(16bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Data |</td>
-
-<td> +----------------------------------+</td>
-
-<td> Control frame fields:</td>
-<td> Control bit: The 'C' bit is a single bit indicating that this is a control
-message. For control frames this value is always 1. </td>
-<td> Version: The version number of the session protocol (currently 1).</td>
-<td> Type: The type of control frame. Control frames are SYN_STREAM, SYN_REPLY,
-etc. </td>
-
-<td>Flags: Flags related to this frame. Flags for control frames and data frames
-are different.</td>
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. </td>
-
-<td>Data: data associated with this control frame. The format and length of this
-data is controlled by the control frame type.</td>
-
-<td>Data frames</td>
-
-<td> +----------------------------------+</td>
-
-<td> |C| Stream-ID (31bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) | </td>
-
-<td> +----------------------------------+</td>
-
-<td> | Data |</td>
-
-<td> +----------------------------------+</td>
-
-<td>Data frame fields:</td>
-<td> Control bit: For data frames this value is always 0.</td>
-<td> Stream-ID: A 31-bit value identifying the stream.</td>
-<td> Flags: Flags related to this frame. Valid flags are:</td>
-
-* <td>0x01 = FLAG_FIN - signifies that this frame represents the
- half-close of this stream. See <a
- href="/spdy/spdy-protocol/spdy-protocol-draft1#streamhalfclose">Stream
- half-close</a> below.</td>
-
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a data frame is 8 bytes + length. It is valid to
-have a zero-length data frame.</td>
-<td> Data: A variable-length field containing the number of bytes in the
-payload. </td>
-
-<td>## ### Hello message</td>
-
-<td>After the connection has been established, SPDY employs an asynchronous
-Hello sequence where each side informs the other about the communication details
-it knows about. Unlike most protocols, this Hello sequence is optional and fully
-asynchronous. Because it is asynchronous, it does not add a round-trip latency
-to the connection startup. But because it is asynchronous and optional, both
-sides must be prepared for this message to arrive at any time or not at
-all.</td>
-
-<td>To initiate a Hello sequence, either side can send a HELLO control frame.
-The Hello frame is optional, but if it is to be sent, it must be the first frame
-sent. When a Hello message is received, the receiver is not obligated to reply
-with a Hello message in return. The message is therefore completely
-informational.</td>
-
-<td>HELLO control message:</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 1 | 4 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) | </td>
-
-<td> +----------------------------------+</td>
-
-<td> | Unused |Number of entries |</td>
-
-<td> +----------------------------------|</td>
-<td> | ID/Value Pairs |</td>
-<td> | ... |</td>
-
-<td> HELLO message fields:</td>
-<td> Control bit: The control bit is always 1 for this message.</td>
-<td> Version: The SPDY version number.</td>
-<td> Type: The message type for a HELLO message is 4.</td>
-
-<td>Unused: 16 bits of unused space, reserved for future use.</td>
-
-<td> Number of entries: A 16-bit value representing the number of ID/value pairs
-in this message.</td>
-<td> ID: A 32-bit ID number. The following IDs are valid:</td>
-
-* <td> 1 - HELLO_BANDWIDTH_TO_YOU allows the sender to send its
- expected upload bandwidth on this channel. This number is an
- estimate. The value should be the integral number of kilobytes per
- second that the sender predicts as an expected maximum upload
- channel capacity.</td>
-* <td> 2 - HELLO_BANDWIDTH_FROM_YOU allows the sender to send its
- expected download bandwidth on this channel. This number is an
- estimate. The value should be the integral number of kilobytes per
- second that the sender predicts as an expected maximum download
- channel capacity.</td>
-* <td>3 - HELLO_ROUND_TRIP_TIME allows the sender to send its expected
- round-trip-time on this channel. The round trip time is defined as
- the minimum amount of time to send a control frame from this client
- to the remote and receive a response. The value is represented in
- milliseconds.</td>
-* <td> 4 - HELLO_MAX_CONCURRENT_STREAMS allows the sender to inform
- the remote endpoint the maximum number of concurrent streams which
- it will allow. By default there is no limit. For implementors it is
- recommended that this value be no smaller than 100. </td>
-
-<td> Value: A 32-bit value.</td>
-
-<td> The message is intentionally expandable for future information which may
-improve client-server communications. The sender does not need to send every
-type of ID/value. It must only send those for which it has accurate values to
-convey. When multiple ID/value pairs are sent, they should be sent in order of
-lowest id to highest id.</td>
-
-<td>## Streams</td>
-
-<td>Streams are independent sequences of bi-directional data cut into frames.
-Streams can be created either by the client or the server, can concurrently send
-data interleaved with other streams, and can be cancelled. The usage of streams
-with HTTP is such that a single HTTP request/response occupies a single stream,
-and the stream is not reused for a second request. This is because streams can
-be independently created without incurring a round-trip.</td>
-
-<td>Upon stream initiation, streams allow for each side to transmit a
-fixed-length list of name/value pairs to the other endpoint.</td>
-
-<td>### Stream creation</td>
-
-<td>A stream is created by sending a control packet with the type set to
-SYN_STREAM(1). If the server is initiating the stream, the Stream-ID must be
-even. If the client is initiating the stream, the Stream-ID must be odd. 0 is
-not a valid Stream-ID. Stream-IDs from each side of the connection must increase
-monotonically as new streams are created. E.g. Stream 2 may be created after
-stream 3, but stream 7 must not be created after stream 9.</td>
-
-<td>Upon receipt of a SYN_STREAM frame, the server replies with a SYN_REPLY
-frame. The client does not need to wait for a SYN_REPLY before sending any data
-frames.</td>
-
-<td>If the endpoint receiving a SYN_STREAM does not want to accept the new
-stream, it can immediately respond with a FIN_STREAM control frame. Note,
-however, that the initiating endpoint may have already sent data on the stream
-as well; this data must be ignored.</td>
-
-<td> SYN_STREAM control message: </td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 1 | 1 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> |X| Stream-ID (31bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Pri | Unused | NV Entries |</td>
-
-<td> +----------------------------------|</td>
-<td> | Name/value header block |</td>
-<td> | ... |</td>
-
-<td>SYN_STREAM message fields:</td>
-<td> Flags: Flags related to this frame. Valid flags are:</td>
-
-* <td>0x01 = FLAG_FIN - signifies that this frame represents the
- half-close of this stream. When set, it indicates that the sender
- will not produce any more data frames in this stream. </td>
-
-<td>Length: An unsigned 24 bit value representing the number of bytes after the
-length field. The total size of a SYN_STREAM frame is 8 bytes + length. The
-length for this frame must be greater than or equal to 8.</td>
-<td> Priority: A 2-bit priority field. If an endpoint has initiated multiple
-streams, the priority field represents which streams should be given first
-precidence. Servers are not required to strictly enforce the priority field,
-although best-effort is assumed. 0 represents the lowest priority and 3
-represents the highest priority. The highest-priority data is that which is most
-desired by the client.</td>
-<td> Unused: 14 bits of unused space, reserved for future use.</td>
-<td> NV entries: (16 bits) The number of name/value pairs that follow.</td>
-
-<td>The <a
-href="/spdy/spdy-protocol/spdy-protocol-draft1#nameheaderblock">Name/value
-block</a> is described below.</td>
-
-<td>SYN_REPLY control message:</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 1 | 2 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> |X| Stream-ID (31bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Unused | NV entries |</td>
-
-<td> +----------------------------------|</td>
-<td> | Name/value header block |</td>
-<td> | ... |</td>
-
-<td> SYN_REPLY message fields:</td>
-<td> Flags: Flags related to this frame. Valid flags are:</td>
-<td> 0x01 = FLAG_FIN - signifies that this frame represents the half-close of
-this stream. When set, it indicates that the sender will not produce any more
-data frames in this stream..</td>
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a SYN_STREAM frame is 8 bytes + length. The
-length for this frame must be greater than or equal to 8.</td>
-<td> Unused: 16 bits of unused space, reserved for future use.</td>
-<td> NV entries: (16 bits) The number of name/value pairs that follow. </td>
-
-<td>The <a href="/spdy/spdy-protoco#nameheaderblock">Name/value block</a> is
-described below.</td>
-
-<td>### Name/value header block format</td>
-
-<td>Both the SYN_STREAM and SYN_REPLY frames contain a Name/value header block.
-The header block used by both the request and the response is the same. It is
-designed so that headers can be easily appended to the end of a list and also so
-that it can be easily parsed by receivers. Each numeric value is 2 bytes.</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Length of name (int16) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Name (string) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Length of value (int16) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Value (string) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | (repeats) |</td>
-
-<td>Each header name must have at least one value. The length of each name and
-value must be greater than zero. Although sending of names or values of zero
-length is invalid, receivers of zero-length name or zero-length values must
-ignore the pair and continue.</td>
-
-<td>Duplicate header names are not allowed. To send two identically named
-headers, send a header with two values, where the values are separated by a
-single NUL (0) byte. Senders must not send multiple, in-sequence NUL characters.
-Receivers of multiple, in-sequence NUL characters must ignore the name/value
-pair.</td>
-
-<td>Strings are utf8 encoded and are not NUL terminated.</td>
-
-<td>The entire contents of the name/value header block is compressed using zlib
-deflate. There is a single zlib stream (context) for all name value pairs in one
-direction on a connection. SPDY uses a SYNC_FLUSH between frame which uses
-compression. The stream is initialized with the following dictionary (without
-line breaks, NULL terminated):</td>
-
-<td>optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-</td>
-<td>languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi</td>
-<td>f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser</td>
-<td>-agent10010120020120220320420520630030130230330430530630740040140240340440</td>
-<td>5406407408409410411412413414415416417500501502503504505accept-rangesageeta</td>
-<td>glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic</td>
-<td>ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran</td>
-<td>sfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati</td>
-<td>oncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo</td>
-<td>ndayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe</td>
-<td>pOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic</td>
-<td>ation/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1</td>
-<td>.1statusversionurl</td>
-
-<td>TODO(mbelshe): Remove the NULL termination on the dictionary; not useful.
-(thanks CostinM)</td>
-
-<td>TODO(mbelshe): Remove the empty block (4 bytes) inserted in the stream after
-a SYNC_FLUSH. (thanks, CostinM)</td>
-
-<td>## Stream data exchange</td>
-
-<td>Once a stream is created, it is used to send arbitrary amounts of data in
-either direction. When either side has finished sending data it can send a frame
-with the FIN_FLAG set. (See "TCP connection teardown" below.)</td>
-
-<td>### Stream half-close</td>
-
-<td> When one side of the stream sends a control or data frame with the FLAG_FIN
-flag set, the stream is considered to be half-closed from that side. The sender
-of the FLAG_FIN is indicating that no further data will be sent from the sender
-on this stream. When both sides have half-closed, the stream is considered to be
-closed. </td>
-
-<td>### Stream close</td>
-
-<td>There are 3 ways that streams can be terminated: normal termination, abrupt
-termination, and TCP connection teardown.</td>
-
-<td>#### Normal termination</td>
-
-<td>Normal stream termination occurs when both sides of the stream have
-half-closed the stream.</td>
-
-<td>#### Abrupt termination</td>
-
-<td>Either the client or server can send a FIN_STREAM control packet at any
-time. Upon receipt of the FIN_STREAM, both sides must ignore further data
-received on the stream and both sides must stop transmitting to the stream. The
-FIN_STREAM is intended for abnormal stopping of a stream.</td>
-
-<td>FIN_STREAM control frame:</td>
-
-<td> +-------------------------------+</td>
-
-<td> |1| 1 | 3 |</td>
-
-<td> +-------------------------------+</td>
-
-<td> | Flags (8) | 8 |</td>
-
-<td> +-------------------------------+</td>
-
-<td> |X| Stream-ID (31bits) |</td>
-
-<td> +-------------------------------+</td>
-
-<td> | Status code | </td>
-
-<td> +-------------------------------+</td>
-
-<td> FIN_STREAM message fields:</td>
-<td> Flags: Flags related to this frame. Valid flags are:</td>
-
-* <td>0x01 = FLAG_FIN - When set, it indicates that the sender will
- not produce any more data frames in this stream. See "Stream
- half-close" above.</td>
-
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. For FIN_STREAM control frames, this value is always 8.</td>
-<td> Status code: (32 bits) An indicator for why the stream is being
-terminated.The following status codes are defined:</td>
-
-* <td>1 - PROTOCOL_ERROR. This is a generic error, and should only be
- used if a more specific error is not available. The receiver of this
- error will likely abort the entire session and possibly return an
- error to the user.</td>
-* <td>2 - INVALID_STREAM should be returned when a frame is received
- for a stream which is not active. The receiver of this error will
- likely log a communications error.</td>
-* <td>3 - REFUSED_STREAM. This is error indicates that the stream was
- refused before any processing has been done on the stream. For
- non-indepotent methods this means that request can be retried.</td>
-
-<td>Note: 0 is not a valid status code for a FIN_STREAM.</td>
-
-<td>TODO - Define more specific errors.</td>
-
-<td>#### TCP connection teardown</td>
-
-<td>If the TCP connection is torn down while unterminated streams are active (no
-FIN_STREAM frames have been sent or received for the stream), then the endpoint
-must assume that the stream was abnormally interrupted and may be
-incomplete.</td>
-
-<td>If a client or server receives data on a stream which has already been torn
-down, it must ignore the data received after the teardown.</td>
-
-<td>## Data flow</td>
-
-<td> Because TCP provides a single stream of data on which SPDY multiplexes
-multiple logical streams, it is important for clients and servers to interleave
-data messages for concurrent sessions.</td>
-
-<td>Implementors should note that sending data in smallish chunks will result in
-lower end-user latency for a page as this allows the browser to begin parsing
-metadata early, and, in turn, to finalize the page layout. Sending large chunks
-yields a small increase in bandwidth efficiency at the cost of slowing down the
-user experience on pages with many resources.</td>
-
-<td>## Other control frames</td>
-
-<td>### <b>NOOP</b></td>
-
-<td>The NOOP control frame is a no-operation frame. It can be sent from the
-client or the server. Receivers of a NO-OP frame should simply ignore it.</td>
-
-<td>NOTE: This control frame may ultimately be removed. It has been implemented
-for experimentation purposes.</td>
-
-<td>NOOP control message:</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 1 | 5 |</td>
-<td> +----------------------------------+</td>
-<td> | 0 (Flags) | 0 (Length) |</td>
-
-<td> +----------------------------------+</td>
-
-<td><b> Control-bit: The control bit is always 1 for this message.</b></td>
-<td><b> Version: The SPDY version number.</b></td>
-<td><b> Type: The message type for a NOOP message is 5.</b></td>
-<td><b> Length: This frame carries no data, so the length is always 0.</b></td>
-
-<td><b>### <b>PING</b></b></td>
-
-<td><b>The PING control frame is a mechanism for measuring a minimal round-trip
-time from the sender. It can be sent from the client or the server. Receivers of
-a PING frame should send an identical frame to the sender as soon as possible
-(if there is other pending data waiting to be sent, PING should take highest
-priority). Each ping sent by a sender should use a unique ID.</b></td>
-
-<td><b>NOTE: This control frame may ultimately be removed. It has been
-implemented for experimentation purposes.</b></td>
-
-<td><b>PING control message:</b></td>
-
-<td><b> +----------------------------------+</b></td>
-
-<td><b> |1| 1 | 6 |</b></td>
-
-<td><b> +----------------------------------+</b></td>
-
-<td><b> | 0 (flags) | 4 (length) |</b></td>
-
-<td><b> +----------------------------------|</b></td>
-
-<td><b> | 32-bit ID |</b></td>
-
-<td><b> +----------------------------------|</b></td>
-
-<td><b> Control bit: The control bit is always 1 for this message.</b></td>
-<td><b> Version: The SPDY version number.</b></td>
-<td><b> Type: The message type for a PING message is 6.</b></td>
-<td><b> Length: This frame is always 4 bytes long.</b></td>
-<td><b> ID: A unique ID for this ping.</b></td>
-<td><b> Note: If a sender uses all possible PING ids (e.g. has sent all 2^32
-possible IDs), it can "wrap" and start re-using IDs.</b></td>
-
-<td>### <b>GOAWAY</b></td>
-
-<td>The GOAWAY control frame is a mechanism to tell the remote side of the
-connection that it should no longer use this session for further requests. It
-can be sent from the client or the server. Once sent, the sender agrees not to
-initiate any new streams on this session. Receivers of a GOAWAY frame must not
-send additional requests on this session, although a new session can be
-established for new requests. The purpose of this message is to allow the server
-to gracefully stop accepting new requests (perhaps for a reboot or maintenance),
-while still finishing processing of previously established requests.</td>
-
-<td>There is an inherent race condition between a client sending requests and
-the server sending a GOAWAY message. To deal with this case, the GOAWAY message
-contains a last-stream identifier indicating the last stream which was accepted
-in this session. If the client issued requests for sessions after this
-stream-id, they were not accepted by the server and should be re-issued later at
-the client's discretion.</td>
-
-<td>NOTE: This control frame may ultimately be removed. It has been implemented
-for experimentation purposes.</td>
-
-<td>NOTE: (mnot@mnot.org suggests that mandatory GOAWAY could be useful to
-ensure graceful closure of sessions. This would help if the last request on a
-session was a POST, and the server closes, the client can't know whether the
-request was sent or not. Requiring a GOAWAY before closing would notify the
-client exactly which requests had been processed and which had not.)</td>
-
-<td>GOAWAY control message:</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 1 | 7 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | 0 (flags) | 4 (length) |</td>
-
-<td> +----------------------------------|</td>
-
-<td> | Last-good-stream-ID |</td>
-
-<td> +----------------------------------|</td>
-
-<td> Control bit: The control bit is always 1 for this message.</td>
-<td> Version: The SPDY version number.</td>
-<td> Type: The message type for a GOAWAY message is 7.</td>
-<td> Length: This frame is always 4 bytes long.</td>
-<td> Last-good-stream-Id: The last stream id which was accepted by the sender of
-the GOAWAY message.</td>
-<td><b>SUBRESOURCE</b></td>
-<td>The subresource control frame is an optional control frame to advise the
-receiver of resources that will be needed. If the url and method in the name
-value pairs do not match those that are associated with the stream id then this
-control message must be ignored.</td>
-<td>Control frame</td>
-
-<td> +----------------------------------+</td>
-
-<td> |C| Version(15bits) | 8 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-<td> |0| Stream id (31 bits) |</td>
-<td> |----------------------------------|</td>
-<td> | Unused (16 bits) | NV Entries |</td>
-<td> |----------------------------------|</td>
-
-<td> | Key value pairs |</td>
-
-<td> +----------------------------------+</td>
-
-<td>Length: An unsigned 24 bit value representing the number of bytes after the
-length field. The total size of a SUBRESOURCE frame is 8 bytes + length. The
-length for this frame must be greater than or equal to 8.</td>
-<td>Stream-id is the stream-id for the stream that the subresources are
-associated with</td>
-
-<td>NV entries: The number of name/value pairs that follow.</td>
-
-<td>The <a href="/spdy/spdy-protoco#nameheaderblock">Name/value block</a> is the
-same as a SYN_REPLY, but url and method are mandatory fields.</td>
-
-<td>If a sender is using the SUBRESOURCE control frame to inform the client of
-streams that the will be created (X-Associated-Content)</td>
-
-<td> (e.g. a server creating a stream to send an image used on a webpage) then
-the SUBRESOURCE message must be sent before the data frame where the receiver
-could discover the additional resource.</td>
-
-<td>## Server Push</td>
-
-<td>This section needs much work; it currently documents the prototyped
-protocol, but is not ready for broad implementation.</td>
-
-<td>Because SPDY enables both clients and servers to create streams, a server
-may decide to initiate a stream to the client. Generally, this should be done if
-the server has knowledge that the client will need a resource before the client
-has requested it. Servers should use this feature with care, because if the
-resource is cacheable, and the client already has a cached copy of the resource,
-this stream may be wasteful. Further, servers should inform clients of the
-pending pushed resource as early as possible to avoid races between the server
-pushing the stream and the client requesting it (based on having discovered need
-for the resource from other downloaded content). Not all content is push-able
-from the server. Only resources fetched via the HTTP GET method can be
-server-pushed.</td>
-
-<td>Note: Race conditions can only be avoided with the client if the client uses
-a single SPDY session to the server.</td>
-
-<td><b>Server Implementation</b></td>
-
-<td>When the server intends to push resources to the client, it should append a
-header, "X-Associated-Content" to the SYN_REPLY for the resource which will also
-contain pushed content. This SYN_REPLY MUST be sent prior to initiating the
-server-pushed streams.</td>
-
-<td>For each pushed resource listed in the X-Associated-Content header, the
-server may create streams by sending a SYN_STREAM frame. This is the same as
-client-side stream initiation, except for that the server will append a header
-called "Path" which contains the path of the resource requested.</td>
-
-<td><b>Client Implementation</b></td>
-
-<td>When fetching a resource the client has 3 possibilities:</td>
-
-1. <td>the resource is not being pushed</td>
-2. <td>the resource is being pushed, but the data has not yet
- arrived</td>
-3. <td>the resource is being pushed, and the data has started to
- arrive</td>
-
-<td>When a SYN_REPLY frame which contains a X-Associated-Content header is
-received, the client MUST NOT issue GET requests for those resources and instead
-wait for the pushed content from the server. Similarly, if the client would have
-made a request for a resource but a X-Associated-Content header has been
-received for that resource, and yet the pushed stream has not arrived, the
-client MUST wait for the data to be pushed.</td>
-
-<td>When a SYN frame is received which contains a path previously specified in
-an X-Associated-Content header, the client SHOULD buffer the received data from
-the stream as is appropriate for the client.</td>
-
-<td><b>Flaws in this specification:</b></td>
-
-* <td>The syntax of the X-Associated-Content header needs to be
- redone.</td>
-* <td>Incorporate the SUBRESOURCE control frame into this
- specification.</td>
-* <td>The "Path" header in the SYN_STREAM should be changed to "Url"
- and be a fully qualified path.</td>
-* <td>Need to implement flow control on pushes</td>
-* <td>Need to specify error case when the client cannot buffer.</td>
-
-<td>## Future work/experiments</td>
-
-<td> The following are thoughts/brainstorms for future work and
-experiments.</td>
-
-* <td>Caching</td>
- <td> Since we're proposing to do almost everything over an encrypted
- channel, we're making caching either difficult or impossible.</td>
- <td> We've had some discussions about having a non-secure, static-only
- content channel (where the resources are signed, or cryptographic hashes of
- the insecure content are sent over a secure link), but have made no headway
- yet...</td>
-* <td>DoS potential</td>
-
-<td>The potential for DoS of the server (by increasing the amount of state) is
-no worse than it would be for TCP connections. In fact, since more of the state
-is managed in userspace, it is easier to detect and react to increases in
-resource utilization. The client side, however, does have a potential for DoS
-since the server may now attempt to use client resources which would not
-normally be considered to be large per stream state.</td>
-
-<td>More investigation needs to be done about attack modes and remediation
-responses.</td>
-
-* <td>Stream capacity.</td>
-
-<td>Today, HTTP has no knowledge of approximate client bandwidth, and TCP only
-slowly and indirectly discovers it as a connection warms up. However, by the
-time TCP has warmed up, the page is often already completely loaded. To ensure
-that bandwidth is utilized efficiently, SPDY allows the client to tell the
-server its approximate bandwidth. The HELLO message is part of this, but
-measurement, reporting and all of the other infrastructure and behavioral
-modifications are lacking.</td>
-
-* <td>Server-controlled connection parameters.</td>
-
-<td>The "server" -- since either side may be considered a "server" in SPDY,
-"server" refers here to the side which receives requests for new sessions -- can
-inform the other side of reasonable connection or stream limits which should be
-respected. As with stream capacity, the HELLO message provides a container for
-signaling this, but no work has yet been done to figure out what values should
-be set, when, and what behavioral changes should be expected when the value does
-change.</td>
-
- <td>Prefetching/server push</td>
-
-> <td>If the client can inform the server (or vice versa) how much bandwidth it
-> is willing to allocate to various activities, then the server can push or
-> prefetch resources without a) impacting the activities that the user wants to
-> perform; or b) being too inefficient. While this approach still has
-> inefficiencies (the server still send sparts of resources that the client
-> already has before the client gets around to sending a FIN to the server), it
-> doesn't seem to be grossly inefficient when coupled with the client telling
-> the server how much slack (bandwidth) it is is willing to give to the server.
-> However, this means that the client must be able to dynamically adjust the
-> slack that it provides for server push or prefetching, for example, if it sees
-> an increase in PING time.</td>
-
- <td>Re-prioritization of streams</td>
-
-> <td>Users often switch between multiple tabs in the browser. When the user
-> switches tasks, the protocol should allow for a change in priority as the user
-> now wants different data at a higher priority. This would likely involve
-> creating priority groups so that the relative priority of resources for a tab
-> can be managed all at once instead of having to make a number of changes
-> proportional to the number of requests (which is 100% likely to be the same or
-> larger!)</td>
-
-* <td>Uni-directional (but associated) streams</td>
-
-<td>It may be a mistake to make a connection-analogue in the stream. It is
-perhaps better to allow each side to make a unidirectional stream, and provide
-data about which stream it may be associated with. This offers a much
-easier-to-comprehend association mechanism for server push.</td>
-
-* <td>Flow control</td>
-
-<td>Each side can announce how much data or bandwidth it will accept for each
-class of streams. If this is done, then speculative operations such as server
-push can soak up a limited amount of the pipe (especially important if the pipe
-is long and thin). This may allow for the elimination of more complex "is this
-already in the cache" or "announce what I have in my cache" schemes which are
-likely costly and complex.</td>
-
-* <td>Use of gzip compression</td>
-
-<td>The use of gzip compression should be stateful only across headers in the
-channel. Essentially, separate gzip contexts should be maintained for headers
-versus data.</td>
-
-* <td>DNS data</td>
-
-<td>It is suboptimal that the browser must discover new hostnames and then look
-them up in cases where it is fetching new resources controlled by the same
-entity. For example, there shouldn't be a need to do another DNS lookup for a
-resource from static.foo.com. when the browser has already resolved xxx.foo.com.
-In these cases, it would seemingly make sense to send (over the SPDY channel)
-the DNS data (signed in such a way that the user-agent can verify that it is
-authoritative).</td>
-
-* <td>Redirect to a different IP while retaining the HOST header</td>
-
-<td>For large sites or caches, it may be advantageous to supplement DNS frontend
-load balancing with the ability to send the user to a sibling that is less
-loaded, but also able to serve the request. This is not possible today with
-HTTP, as redirects must point to a different name (or use an IP, which amounts
-to the same thing), so that cookies, etc. are treated differently. This feature
-would likely be tied to the DNS data feature, or a more interesting verification
-mechanism would need to exist.</td>
-
-* <td>New headers</td>
- * <td>Request headers:</td>
- * <td>Never been to this site before header. When the server
- receives this header, it is used as permission to open
- multiple, server-initiated streams carrying subresource
- content. If sent, then the server can freely push all the
- resources necessary for the page.</td>
- * <td>Response</td>
- * <td>Subresource headers</td>
-* <td>Mark Nottingham notes that having the method/uri/version in
- separate headers, rather than at the front of the block, may make it
- harder for servers to quickly access this information. Being
- compressed hurts too.</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft2/index.md b/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft2/index.md
deleted file mode 100644
index 060ad3b96c9..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft2/index.md
+++ /dev/null
@@ -1,1250 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/spdy-protocol
- - SPDY Protocol
-page_name: spdy-protocol-draft2
-title: SPDY Protocol - Draft 2
----
-
-<table>
-<tr>
-
-<td>*DRAFT*</td>
-
-<td>[TOC]</td>
-
-<td>## Overview</td>
-
-<td>One of the bottlenecks of current HTTP implementations is that HTTP relies
-solely on multiple connections for concurrency. This causes several problems,
-including additional round trips for connection setup, slow-start delays, and a
-constant rationing by the client where it tries to avoid opening too many
-connections to a single server. HTTP "pipelining" doesn't help, as each
-connection may be blocked on the request at the <a
-href="http://en.wikipedia.org/wiki/Head-of-line_blocking">head of the line</a>;
-in addition, many proxies have poor support for pipelining. Web applications, in
-their desire to create many connections, create many sub-domains to work around
-browser per-domain connection throttling.</td>
-
-<td>SPDY aims to address these and other application-layer problems associated
-with modern web applications, while requiring little or no change from the
-perspective of web application writers.</td>
-
-<td>In a nutshell, SPDY adds a framing layer for multiplexing multiple,
-concurrent streams across a single TCP connection (or any reliable transport
-stream). The framing layer is optimized for HTTP-like request-response
-streams.</td>
-
-<td>The SPDY session offers three basic improvements over HTTP:</td>
-
-* <td>Multiplexed requests. There is no limit to the number of
- requests that can be issued concurrently over a single SPDY
- connection. Because requests are interleaved on a single channel,
- the protocol is more efficient over TCP.</td>
-
-* <td>Prioritized requests. Clients can request certain resources to
- be delivered first. This avoids the problem of congesting the
- network channel with non-critical resources when a high-priority
- request is pending.</td>
-
-* <td>Compressed headers. Clients today send a significant amount of
- redundant data in the form of HTTP headers. Because a single web
- page may require 50 or 100 subrequests, this data is significant.
- Compressing the headers saves a significant amount of latency and
- bandwidth compared to HTTP.</td>
-* <td>Server pushed streams. This enables content to be pushed from
- servers to clients without a request.</td>
-
-<td>Note that for the most part, SPDY attempts to preserve the existing
-semantics of HTTP. All features such as cookies, etags, vary headers,
-content-encoding negotiations, etc work as they do with HTTP; SPDY only replaces
-the way the data is written to the network.</td>
-
-<td>### Document Organization</td>
-
-<td>The SPDY Specification is split into two parts: <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Framing-Layer">a framing
-layer</a>, which multiplexes a TCP connection into independent, length-prefixed
-frames, and <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-HTTP-Layering-over-SPDY">an
-HTTP layer</a>, which specifies the mechanism for overlaying HTTP
-request/response pairs on top of the framing layer. While some of the framing
-layer concepts are isolated from the HTTP layer, building a generic framing
-layer has not been a goal. The framing layer is tailored to the needs of the
-HTTP protocol and server push. </td>
-
-<td>### Definitions</td>
-
-* <td>*client*: The endpoint initiating the SPDY session. </td>
-* <td>*connection*: A TCP-level connection between two endpoints.
- </td>
-* <td>*endpoint*: Either the client or server of a connection. </td>
-* <td>*frame*: A header-prefixed sequence of bytes sent over a SPDY
- session.</td>
-* <td>*server*: The endpoint not initiating the SPDY session.</td>
-* <td>*session*: A sequence of frames sent over a single connection.
- This is the same as the "framing layer". </td>
-* <td>*stream*: A bi-directional flow of bytes across a virtual
- channel within a SPDY session. </td>
-
-<td>## Framing Layer</td>
-
-<td>### Connections</td>
-
-<td>The SPDY framing layer (or "session") runs atop TCP, similarly to how HTTP
-works today. The client is expected to be the TCP connection initiator. Because
-it runs on TCP, we have a reliable transport. Unlike HTTP, all connections with
-SPDY are persistent connections. The HTTP connection header does not apply.</td>
-
-<td>For best performance, it is expected that clients will not close open
-connections until the user navigates away from all web pages referencing a
-connection, or until the server closes the connection. Servers are encouraged to
-leave connections open for as long as possible, but can terminate idle
-connections after some amount of inactivity if necessary. When either side
-closes the TCP connection, it should first send a <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-GOAWAY">GOAWAY</a> frame so
-that the endpoints can more reliably determine if requests finished before the
-closure.</td>
-
-<td>### Framing</td>
-
-<td>Once the connection is established, clients and servers exchange framed messages. There are two types of frames: <a href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Control-frames">control frames</a> and <a href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Data-frames">data frames</a>. Frames always have a common header which is 8 bytes.</td>
-
-<td>The first bit is a control bit indicating whether a frame is a control frame or data frame. Control frames carry a version number, a frame type, flags, and a length. Data frames contain the stream ID, flags, and the length for the payload carried after the common header. The simple header is designed to make reading and writing of frames easy.</td>
-
-<td>All integer values, including length, version, and type, are in network byte order. SPDY does not enforce alignment of types in dynamically sized frames.</td>
-
-<td>#### Protocol versioning</td>
-
-<td>SPDY does lazy version checking on receipt of any control frame, and does version enforcement only on SYN_STREAM frames. If an endpoint receives a SYN_STREAM frame with an unsupported version, the endpoint must return a RST_STREAM frame with the status code UNSUPPORTED_VERSION. For any other type of control frame, the frame must be ignored.</td>
-
-<td>### Control frames</td>
-
-<td> +----------------------------------+</td>
-
-<td> |C| Version(15bits) | Type(16bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Data |</td>
-
-<td> +----------------------------------+</td>
-
-<td> Control bit: The 'C' bit is a single bit indicating that this is a control message. For control frames this value is always 1. </td>
-<td> Version: The version number of the session protocol (currently 2).</td>
-<td> Type: The type of control frame. See <a href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Control-frames">Control Frames</a> for the complete list of control frames. </td>
-
-<td>Flags: Flags related to this frame. Flags for control frames and data frames
-are different.</td>
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. </td>
-
-<td>Data: data associated with this control frame. The format and length of this
-data is controlled by the control frame type.</td>
-
-<td>Control frame processing requirements:</td>
-
-<td>If an endpoint receives a control frame for a type it does not recognize, it
-must ignore the frame.</td>
-
-<td>### Data frames</td>
-
-<td> +----------------------------------+</td>
-
-<td> |C| Stream-ID (31bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) | </td>
-
-<td> +----------------------------------+</td>
-
-<td> | Data |</td>
-
-<td> +----------------------------------+</td>
-
-<td>Control bit: For data frames this value is always 0.</td>
-<td> Stream-ID: A 31-bit value identifying the stream.</td>
-<td> Flags: Flags related to this frame. Valid flags are:</td>
-
-* <td>0x01 = FLAG_FIN - signifies that this frame represents the last
- frame to be transmitted on this stream. See <a
- href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Stream-close">Stream
- Closure</a> below.</td>
-
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a data frame is 8 bytes + length. It is valid to
-have a zero-length data frame.</td>
-<td> Data: The variable-length data payload; the length was defined in the
-length field.</td>
-
-<td>Data frame processing requirements:</td>
-
-<td>If an endpoint receives a data frame for a stream-id which does not exist,
-it must return a <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-RST_STREAM">RST_STREAM</a>
-with error code INVALID_STREAM for the stream-id.</td>
-
-<td>If the endpoint which created the stream receives a data frame before
-receiving a SYN_REPLY on that stream, it is a protocol error, and the receiver
-should close the connection immediately.</td>
-
-<td>Implementors note: If an endpoint receives multiple data frames for invalid
-stream-ids, it may terminate the session.</td>
-
-<td>### Streams</td>
-
-<td>Streams are independent sequences of bi-directional data cut into frames.
-Streams can be created either by the client or the server, can concurrently send
-data interleaved with other streams, and can be cancelled. The usage of streams
-with HTTP is such that a single HTTP request/response occupies a single stream,
-and the stream is not reused for a second request. This is because streams can
-be independently created without incurring a round-trip. See the <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-HTTP-Layering-over-SPDY">HTTP
-layering</a> section for details.</td>
-
-<td>Upon stream initiation, streams allow for each side to transmit a list of
-name/value pairs (headers) to the other endpoint.</td>
-
-<td>#### Stream creation</td>
-
-<td>A stream is created by sending a control frame with the type set to <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SYN_STREAM">SYN_STREAM</a>.
-If the server is initiating the stream, the Stream-ID must be even. If the
-client is initiating the stream, the Stream-ID must be odd. 0 is not a valid
-Stream-ID. Stream-IDs from each side of the connection must increase
-monotonically as new streams are created. E.g. Stream 2 may be created after
-stream 3, but stream 7 must not be created after stream 9.</td>
-
-<td>Streams are bi-directional. However, the stream creator can optionally set
-the UNIDIRECTIONAL flag as part of the SYN_STREAM to indicate to the receiver
-that the receiver cannot reply on the stream.</td>
-
-<td>Upon receipt of a SYN_STREAM frame, if the UNIDIRECTIONAL flag is not set,
-the receiver replies with a <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SYN_REPLY">SYN_REPLY</a>
-frame. Note that the stream initiator (sending the SYN_STREAM) does not need to
-wait for a SYN_REPLY before sending any data frames.</td>
-
-<td>If the endpoint receiving a SYN_STREAM does not want to accept the new
-stream, it can immediately respond with a RST_STREAM control frame. Note,
-however, that the initiating endpoint may have already sent data on the stream
-as well; this data must be ignored.</td>
-
-<td>#### Stream data exchange</td>
-
-<td>Once a stream is created, it can be used to send arbitrary amounts of data.
-Generally this means that a series of data frames will be sent on the stream
-until a frame containing the FLAG_FIN flag is set. The FLAG_FIN can be set on a
-SYN_STREAM, SYN_REPLY, or a DATA frame. Once the FLAG_FIN has been sent, the
-stream is considered to be half-closed. (See <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Stream-half-close">Stream
-half-close</a>)</td>
-
-<td>#### Stream half-close</td>
-
-<td>When one side of the stream sends a control or data frame with the FLAG_FIN
-flag set, the stream is considered to be half-closed from that side. The sender
-of the FLAG_FIN is indicating that no further data will be sent from the sender
-on this stream. When both sides have half-closed, the stream is considered to be
-closed. (See <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Stream-close">Stream
-close</a>)</td>
-
-<td>#### Stream close</td>
-
-<td>There are 3 ways that streams can be terminated:</td>
-
-1. <td>Normal termination</td>
- <td> Normal stream termination occurs when both sender and receiver have
- half-closed the stream by sending a FLAG_FIN.</td>
-2. <td>Abrupt termination</td>
- <td> Either the client or server can send a RST_STREAM control frame at any
- time. A RST_STREAM contains an error code to indicate the reason for
- failure. When a RST_STREAM is sent from the stream originator, it indicates
- a failure to complete the stream and that no further data will be sent on
- the stream. When a RST_STREAM is sent from the stream receiver, the sender,
- upon receipt, should stop sending any data on the stream. The stream
- receiver should be aware that there is a race between data already in
- transit from the sender and the time the RST_STREAM is received.</td>
-3. <td><b>TCP connection teardown</b></td>
- <td><b> If the TCP connection is torn down while unterminated streams are
- active (no RST_STREAM frames have been sent or received for the stream),
- then the endpoint must assume that the stream was abnormally interrupted and
- may be incomplete.</b></td>
-
-<td>If a client or server receives data on a stream which has already been torn
-down, it must ignore the data received after the teardown.</td>
-
-<td>TODO(mbelshe): Reference how UNIDIRECTIONAL works here.</td>
-
-<td>### Data flow</td>
-
-<td> Because TCP provides a single stream of data on which SPDY multiplexes
-multiple logical streams, it is important for clients and servers to interleave
-data messages for concurrent sessions.</td>
-
-<td>Implementors should note that sending data in smallish chunks will result in
-lower end-user latency for a page as this allows the browser to begin parsing
-metadata early, and, in turn, to finalize the page layout. Sending large chunks
-yields a small increase in bandwidth efficiency at the cost of slowing down the
-user experience on pages with many resources.</td>
-
-<td>### Control frames</td>
-
-<td>#### SYN_STREAM</td>
-
-<td>The SYN_STREAM control frame allows the sender to create a stream between
-the sender and receiver with zero negotiation from the receiver. The stream can
-be used to send metadata and data from the sender to the receiver.</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 2 | 1 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> |X| Stream-ID (31bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> |X|Associated-To-Stream-ID (31bits)|</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Pri | Unused | |</td>
-
-<td> +------------------ |</td>
-<td> | Name/value header block |</td>
-<td> | ... |</td>
-
-<td>Flags: Flags related to this frame. Valid flags are:</td>
-
-* <td>0x01 = FLAG_FIN - signifies that this frame represents the last
- frame to be transmitted on this stream</td>
-* <td>0x02 = FLAG_UNIDIRECTIONAL - a stream created with this flag is
- already considered to be half closed to the receiver.</td>
-
-<td>Length: An unsigned 24 bit value representing the number of bytes after the
-length field. The total size of a SYN_STREAM frame is 8 bytes + length. The
-length for this frame must be greater than or equal to 12.</td>
-
-<td>Stream-ID: The 31-bit identifier for this stream. This stream-id will be
-used in a frames which are part of this stream.</td>
-
-<td>Associated-To-Stream-ID: The 31-bit identifier for a stream which this
-stream is associated to. If this stream is independent of all other streams, it
-should be 0.</td>
-
-<td>Priority: A 2-bit priority field. If an endpoint has initiated multiple
-streams, the priority field represents which streams should be given first
-precidence. Servers are not required to strictly enforce the priority field,
-although best-effort is assumed. 0 represents the lowest priority and 3
-represents the highest priority. The highest-priority data is that which is most
-desired by the client.</td>
-
-<td> Unused: 14 bits of unused space, reserved for future use.</td>
-<td> NV entries: (16 bits) The number of name/value pairs that follow. Note:
-</td>
-
-<td>The <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Name-Value-header-block-format">Name/Value
-block</a> is described below.</td>
-
-<td>If an endpoint receives multiple SYN_STREAM frames for the same active
-stream ID, it must drop the stream, and send a RST_STREAM for the stream with
-the error PROTOCOL_ERROR.</td>
-
-<td>#### SYN_REPLY</td>
-
-<td>SYN_REPLY provides the acceptance of a stream creation by the receiver of a
-SYN_STREAM frame.</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 2 | 2 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> |X| Stream-ID (31bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Unused | |</td>
-
-<td> +---------------- |</td>
-<td> | Name/value header block |</td>
-<td> | ... |</td>
-
-<td> Flags: Flags related to this frame. Valid flags are:</td>
-
-* <td>0x01 = FLAG_FIN - signifies that this frame represents the
- half-close of this stream. When set, it indicates that the sender
- will not produce any more data frames in this stream..</td>
-
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a SYN_STREAM frame is 8 bytes + length. The
-length for this frame must be greater than or equal to 8.</td>
-
-<td>Stream-ID: The 31-bit identifier for this stream. This stream-id will be
-used in a frames which are part of this stream.</td>
-
-<td>Unused: 16 bits of unused space, reserved for future use.</td>
-<td> NV entries: (16 bits) The number of name/value pairs that follow. </td>
-
-<td>The <a
-href="http://www.chromium.org/spdy-protocol/spdy-protocol-draft2#TOC-Name-Value-header-block-format">Name/Value
-block</a> is described below.</td>
-
-<td>If an endpoint receives multiple SYN_REPLY frames for the same active stream
-ID, it must drop the stream, and send a RST_STREAM for the stream with the error
-PROTOCOL_ERROR.</td>
-
-<td>#### RST_STREAM</td>
-
-<td>The RST_STREAM frame allows for abnormal termination of a stream. When sent
-by the creator of a stream, it indicates the creator wishes to cancel the
-stream. When sent by the receiver of a stream, it indicates an error or that the
-receiver did not want to accept the stream, so the stream should be closed.</td>
-
-<td> +-------------------------------+</td>
-
-<td> |1| 2 | 3 |</td>
-
-<td> +-------------------------------+</td>
-
-<td> | Flags (8) | 8 |</td>
-
-<td> +-------------------------------+</td>
-
-<td> |X| Stream-ID (31bits) |</td>
-
-<td> +-------------------------------+</td>
-
-<td> | Status code | </td>
-
-<td> +-------------------------------+</td>
-
-<td> Flags: Flags related to this frame. RST_STREAM does not define any flags.
-This value must be 0.</td>
-
-<td> Length: An unsigned 24-bit value representing the number of bytes after the
-length field. For RST_STREAM control frames, this value is always 8.</td>
-<td> Status code: (32 bits) An indicator for why the stream is being
-terminated.The following status codes are defined:</td>
-
-* <td>1 - PROTOCOL_ERROR. This is a generic error, and should only be
- used if a more specific error is not available. The receiver of this
- error will likely abort the entire session and possibly return an
- error to the user.</td>
-* <td>2 - INVALID_STREAM should be returned when a frame is received
- for a stream which is not active. The receiver of this error will
- likely log a communications error.</td>
-* <td>3 - REFUSED_STREAM. This is error indicates that the stream was
- refused before any processing has been done on the stream. This
- means that request can be safely retried.</td>
-* <td>4 - UNSUPPORTED_VERSION. Indicates that the receiver of a stream
- does not support the SPDY version requested.</td>
-* <td>5 - CANCEL. Used by the creator of a stream to indicate that the
- stream is no longer needed.</td>
-* <td>6 - INTERNAL_ERROR. The endpoint processing the stream has
- encountered an error.</td>
-* <td>7 - FLOW_CONTROL_ERROR. The endpoint detected that its peer
- violated the flow control protocol.</td>
-
-<td>Note: 0 is not a valid status code for a RST_STREAM.</td>
-
-<td>After receiving a RST_STREAM on a stream, the receiver must not send
-additional frames for that stream.</td>
-
-<td>#### SETTINGS</td>
-
-<td>*Note: In earlier drafts, this frame was called a "HELLO" frame.*</td>
-
-<td>A SETTINGS frame contains a set of id/value pairs for communicating
-configuration data about how the two endpoints may communicate. SETTINGS frames
-can be sent at any time by either endpoint, are optionally sent, and fully
-asynchronous. Further, when the server is the sender, the sender can request
-that configuration data be persisted by the client across SPDY sessions and
-returned to the server in future communications.</td>
-
-<td>Persistence of SETTINGS ID/Value pairs is done on a per domain/IP pair. That
-is, when a client connects to a server, and the server persists settings within
-the client, the client MUST only return the persisted settings on future
-connections to the same domain AND IP address and TCP port. Clients MUST NOT
-request servers to use the persistence features of the SETTINGS frames, and
-servers MUST ignore persistence related flags sent by a client.</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 2 | 4 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) | </td>
-
-<td> +----------------------------------+</td>
-
-<td> | Number of entries |</td>
-
-<td> +----------------------------------+</td>
-<td> | ID/Value Pairs |</td>
-<td> | ... |</td>
-
-<td> Control bit: The control bit is always 1 for this message.</td>
-<td> Version: The SPDY version number.</td>
-<td> Type: The message type for a SETTINGS message is 4.</td>
-
-<td>Flags: FLAG_SETTINGS_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS (0x1): When set,
-the client should clear any previously persisted SETTINGS ID/Value pairs. If
-this frame contains ID/Value pairs with the FLAG_SETTINGS_PERSIST_VALUE set,
-then the client will first clear its existing, persisted settings, and then
-persist the values with the flag set which are contained within this frame.
-Because persistence is only implemented on the client, this flag can only be
-used when the sender is the server.</td>
-
-<td>Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a SETTINGS frame is 8 bytes + length.</td>
-
-<td>Number of entries: A 32-bit value representing the number of ID/value pairs
-in this message.</td>
-
-<td>Each ID/value pair is as follows:</td>
-
-<td> +----------------------------------+</td>
-
-<td> | ID (24 bits) | ID_Flags (8) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Value (32 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td>ID: 24-bits in <b>little-endian</b> byte order. This is inconsistent with
-other values in SPDY and is the result of a bug in the initial v2
-implementation. Defined IDs:</td>
-
-* <td>1 - SETTINGS_UPLOAD_BANDWIDTH - allows the sender to send its
- expected upload bandwidth on this channel. This number is an
- estimate. The value should be the integral number of kilobytes per
- second that the sender predicts as an expected maximum upload
- channel capacity.</td>
-* <td>2 - SETTINGS_DOWNLOAD_BANDWIDTH - allows the sender to send its
- expected download bandwidth on this channel. This number is an
- estimate. The value should be the integral number of kilobytes per
- second that the sender predicts as an expected maximum download
- channel capacity.</td>
-* <td>3 - SETTINGS_ROUND_TRIP_TIME - allows the sender to send its
- expected round-trip-time on this channel. The round trip time is
- defined as the minimum amount of time to send a control frame from
- this client to the remote and receive a response. The value is
- represented in milliseconds.</td>
-* <td>4 - SETTINGS_MAX_CONCURRENT_STREAMS allows the sender to inform
- the remote endpoint the maximum number of concurrent streams which
- it will allow. By default there is no limit. For implementors it is
- recommended that this value be no smaller than 100.</td>
-* <td>5 - SETTINGS_CURRENT_CWND allows the sender to inform the remote
- endpoint of the current CWND value. This value is currently
- interpreted as packets.</td>
-* <td>6 - SETTINGS_DOWNLOAD_RETRANS_RATE - downstream byte
- retransmission rate in percentage</td>
-* <td>7 - SETTINGS_INITIAL_WINDOW_SIZE - initial window size in
- bytes</td>
-
-<td>Flags: 8 bits. Defined Flags:</td>
-
-<td> FLAG_SETTINGS_PERSIST_VALUE (0x1): When set, the sender of this SETTINGS
-frame is requesting that the receiver persist the ID/Value and return it in
-future SETTINGS frames sent from the sender to this receiver. Because
-persistence is only implemented on the client, this flag is only sent by the
-server.</td>
-
-<td> FLAG_SETTINGS_PERSISTED (0x2): When set, the sender is notifying the
-receiver that this ID/Value pair was previously sent to the sender by the
-receiver with the FLAG_SETTINGS_PERSIST_VALUE, and the sender is returning it.
-Because persistence is only implemented on the client, this flag is only sent by
-the client.</td>
-
-<td>Value: A 32-bit value in network byte order</td>
-
-<td> The message is intentionally extensible for future information which may
-improve client-server communications. The sender does not need to send every
-type of ID/value. It must only send those for which it has accurate values to
-convey. When multiple ID/value pairs are sent, they should be sent in order of
-lowest id to highest id. A single SETTINGS frame MUST not contain multiple
-values for the same ID. If the receiver of a SETTINGS frame discovers multiple
-values for the same ID, it MUST ignore all values except the first one.</td>
-
-<td>Implementation Notes: Persisted storage from the SETTINGS is similar to a
-cookie, in that it is persisted state. It differs from HTTP cookies in that it
-applies at the session layer rather than at the HTTP layer. When SPDY is used in
-conjunction with HTTP, browser implementors should be careful that any persisted
-SETTINGS information follows similar handling to HTTP cookies, and that a
-mechanism for clearing data is provided to the user. Servers MUST NOT attempt to
-use SETTINGS as a mechanism for storing arbitrary data on the client. </td>
-
-<td>Note also that a server may send multiple SETTINGS frames containing
-different ID/Value pairs. When the same ID/Value is sent twice, the most recent
-value overrides any previously sent values. If the server sends IDs 1, 2, and 3
-with the FLAG_SETTINGS_PERSIST_VALUE in a first SETTINGS frame, and then sends
-IDs 4 and 5 with the FLAG_SETTINGS_PERSIST_VALUE, when the client returns the
-persisted state on its next SETTINGS frame, it SHOULD send all 5 settings (1, 2,
-3, 4, and 5 in this example) to the server.</td>
-
-<td>#### NOOP</td>
-
-<td>The NOOP control frame is a no-operation frame. It can be sent from the
-client or the server. Receivers of a NO-OP frame should simply ignore it.</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 2 | 5 |</td>
-<td> +----------------------------------+</td>
-<td> | 0 (Flags) | 0 (Length) |</td>
-
-<td> +----------------------------------+</td>
-
-<td><b> Control-bit: The control bit is always 1 for this message.</b></td>
-<td><b> Version: The SPDY version number.</b></td>
-<td><b> Type: The message type for a NOOP message is 5.</b></td>
-<td><b> Length: This frame carries no data, so the length is always 0.</b></td>
-
-<td><b>#### PING</b></td>
-
-<td><b>The PING control frame is a mechanism for measuring a minimal round-trip
-time from the sender. It can be sent from the client or the server. Receivers of
-a PING frame should send an identical frame to the sender as soon as possible
-(if there is other pending data waiting to be sent, PING should take highest
-priority). Each ping sent by a sender should use a unique ID.</b></td>
-
-<td><b><b> +----------------------------------+</b></b></td>
-
-<td><b> |1| 2 | 6 |</b></td>
-
-<td><b> +----------------------------------+</b></td>
-
-<td><b> | 0 (flags) | 4 (length) |</b></td>
-
-<td><b> +----------------------------------|</b></td>
-
-<td><b> | 32-bit ID |</b></td>
-
-<td><b> +----------------------------------+</b></td>
-
-<td><b> Control bit: The control bit is always 1 for this message.</b></td>
-<td><b> Version: The SPDY version number.</b></td>
-<td><b> Type: The message type for a PING message is 6.</b></td>
-<td><b> Length: This frame is always 4 bytes long.</b></td>
-<td><b> ID: A unique ID for this ping. When the client initiates a ping, it must
-use an odd numbered ID. When the server initiates a ping, it must use an even
-numbered ping. Use of odd/even IDs is required in order to avoid accidental
-looping on PINGs (where each side initiates an identical PING at the same
-time).</b></td>
-<td><b> Note: If a sender uses all possible PING ids (e.g. has sent all 2^31
-possible IDs), it can wrap and start re-using IDs.</b></td>
-
-<td><b>If a server receives an even numbered PING which it did not initiate, it
-must ignore the PING.</b></td>
-
-<td><b>If a client receives an odd numbered PING which it did not initiate, it
-must ignore the PING.</b></td>
-
-<td>#### GOAWAY</td>
-
-<td>The GOAWAY control frame is a mechanism to tell the remote side of the
-connection that it should no longer use this session for further requests. It
-can be sent from the client or the server. Once sent, the sender agrees not to
-initiate any new streams on this session. Receivers of a GOAWAY frame must not
-send additional requests on this session, although a new session (connection)
-can be established for new requests. The purpose of this message is to allow an
-endpoint to gracefully stop accepting new requests (perhaps for a reboot or
-maintenance), while still finishing processing of previously established
-streams.</td>
-
-<td>There is an inherent race condition between a client sending requests and
-the server sending a GOAWAY message. To deal with this case, the GOAWAY message
-contains a last-stream identifier indicating the last stream which was accepted
-in this session. If the client issued requests for sessions after this
-stream-id, they were not accepted by the server and should be re-issued later at
-the client's discretion.</td>
-
-<td>Endpoints should always send a GOAWAY message before closing a connection so
-that the remote can know whether a request has been partially processed or not.
-(For example, if the client sends a POST at the same time that a server closes a
-connection, the client cannot know if the server started to process that POST
-request if the server does not send a GOAWAY frame to indicate where it stopped
-working)</td>
-
-<td>After sending a GOAWAY message, the sender must ignore all SYN_STREAM frames
-for new streams.</td>
-
-<td> +----------------------------------+</td>
-
-<td> |1| 2 | 7 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | 0 (flags) | 4 (length) |</td>
-
-<td> +----------------------------------|</td>
-
-<td> |X| Last-good-stream-ID (31 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> Control bit: The control bit is always 1 for this message.</td>
-<td> Version: The SPDY version number.</td>
-<td> Type: The message type for a GOAWAY message is 7.</td>
-<td> Length: This frame is always 4 bytes long.</td>
-<td> Last-good-stream-Id: The last stream id which was accepted by the sender of
-the GOAWAY message. If no streams were accepted, this value must be 0.</td>
-
-<td>#### HEADERS</td>
-
-<td> This frame augments a stream with additional headers. It may be optionally
-sent on an existing stream at any time. Specific application of the headers (and
-dealing with duplicates) in this frame is application-dependent.</td>
-
-<td> +----------------------------------+</td>
-
-<td> |C| 2 | 8 |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Flags (8) | Length (24 bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> |X| Stream-ID (31bits) |</td>
-
-<td> +----------------------------------+</td>
-
-<td> | Unused (16 bits) | |</td>
-<td> |-------------------- |</td>
-
-<td> | Name/value header block |</td>
-
-<td> +----------------------------------+</td>
-
-<td> Length: An unsigned 24 bit value representing the number of bytes after the
-length field. The total size of a HEADERS frame is 8 bytes + length. The length
-for this frame must be greater than or equal to 8. The minimum length of the
-length field is 4 (when the number of name value pairs is 0).</td>
-
-<td>NV entries: The number of name/value pairs that follow.</td>
-
-<td>The <a
-href="/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Name-Value-header-block-format">Name/Value
-block</a> is the same as a SYN_REPLY.</td>
-
-<td>Name/Value header block format</td>
-
-<td>The SYN_STREAM, SYN_REPLY, and HEADERS frames contain a Name/value header
-block. The header block used by both the request and the response is the same.
-It is designed so that headers can be easily appended to the end of a list and
-also so that it can be easily parsed by receivers. Each numeric value is 2
-bytes.</td>
-
-<td> +------------------------------------+</td>
-
-<td> | Number of Name/Value pairs (int16) |</td>
-
-<td> +------------------------------------+</td>
-
-<td> | Length of name (int16) |</td>
-
-<td> +------------------------------------+</td>
-
-<td> | Name (string) |</td>
-
-<td> +------------------------------------+</td>
-
-<td> | Length of value (int16) |</td>
-
-<td> +------------------------------------+</td>
-
-<td> | Value (string) |</td>
-
-<td> +------------------------------------+</td>
-
-<td> | (repeats) |</td>
-
-<td>Each header name must have at least one value. Header names must be all
-lower case. The length of each name and value must be greater than zero. A
-receiver of a zero-length name or value must send a RST_STREAM with code
-PROTOCOL error. </td>
-
-<td>TODO(mbelshe): Verify that the 64KB limits are sufficient. JoeyH notes that
-it is possible to send 50 4KB cookies over HTTP today, and that would not work
-in this model.</td>
-
-<td>Duplicate header names are not allowed. To send two identically named
-headers, send a header with two values, where the values are separated by a
-single NUL (0) byte. Senders must not send multiple, in-sequence NUL characters.
-Receivers of multiple, in-sequence NUL characters must send a RST_STREAM with
-code PROTOCOL_ERROR on the stream.</td>
-
-<td>Strings are utf8 encoded and are not NUL terminated.</td>
-
-<td>The entire contents of the name/value header block is compressed using zlib
-deflate. There is a single zlib stream (context) for all name value pairs in one
-direction on a connection. SPDY uses a SYNC_FLUSH between frame which uses
-compression. The stream is initialized with the following dictionary (without
-line breaks and IS null-terminated):</td>
-
-<td>optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-</td>
-<td>
-languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi</td>
-<td>
-f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser</td>
-<td>
--agent10010120020120220320420520630030130230330430530630740040140240340440</td>
-<td>
-5406407408409410411412413414415416417500501502503504505accept-rangesageeta</td>
-<td>
-glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic</td>
-<td>
-ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran</td>
-<td>
-sfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati</td>
-<td>
-oncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo</td>
-<td>
-ndayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe</td>
-<td>
-pOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic</td>
-<td>
-ation/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1</td>
-<td> .1statusversionurl</td>
-
-<td>TODO(mbelshe): Add Brian O's compression data and notes.</td>
-
-<td>#### WINDOW_UPDATE</td>
-
-<td>Although WINDOW_UPDATE was originally defined in DRAFT 2, it was never
-implemented. The specification for this frame is thus removed, and this note
-exists for those who might remember its existence.</td>
-
-<td>Please look at DRAFT 3 for flow-control related definitions.</td>
-
-<td>---</td>
-
-<td>## HTTP Layering over SPDY</td>
-
-<td>SPDY is intended to be as compatible as possible with current web-based
-applications. This means that, from the perspective of the server business logic
-or application API, the features of HTTP must not change. To achieve this, all
-of the application request and response header semantics are preserved, although
-the syntax of conveying those semantics has changed. Thus, the rules from the <a
-href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">HTTP/1.1 specification
-in RFC 2616</a> apply with the changes in the sections below.</td>
-
-<td>Standard Transactions</td>
-
-<td>HTTP request/responses will generally be mapped as one request/response to
-one stream. Multiple requests can be issued in parallel, with each request
-issued on an independent stream.</td>
-
-<td>Request</td>
-
-<td>The client initiates a request by sending a SYN_STREAM frame. For requests
-which do not contain a body, the SYN_STREAM must set the FIN_FLAG, indicating
-that the client intends to send no further data on this stream. For requests
-which do contain a body, the SYN_STREAM will not contain the FIN_FLAG, and the
-body will follow the SYN_STREAM in a series of DATA frames. The last DATA frame
-will set the FIN_FLAG to indicate the end of the body.</td>
-
-<td>The SYN_STREAM Name/Value section will contain all of the HTTP headers which
-are associated with an HTTP request. The HTTP header block in SPDY is mostly
-unchanged from today's HTTP header block, with the following differences:</td>
-
-* <td>The first line of the request is unfolded into name/value pairs
- like other HTTP headers and must be present:</td>
- * <td>"method" - the HTTP method for this request (e.g. "GET",
- "POST", "HEAD", etc)</td>
- * <td>"scheme" - the scheme portion of the URL for this request
- (e.g. "https")</td>
- * <td>"url" - the absolute path for this request (e.g.
- "/foo/bar.html")</td>
- * <td>"version" - the HTTP version of this request (e.g.
- "HTTP/1.1")</td>
-* <td>Duplicate header names are not allowed.</td>
-* <td>Header names are all lowercase.</td>
-* <td>The Connection and Keep-Alive headers are no longer valid and
- are ignored if present.</td>
-* <td>HTTP request headers are compressed. This is accomplished by
- compressing all data sent by the client with gzip encoding.</td>
-* <td>The "host" header is ignored. The host:port portion of the HTTP
- URL is the definitive host.</td>
-* <td>User-agents are expected to support gzip and deflate
- compression. Regardless of the Accept-Encoding sent by the
- user-agent, the server may select gzip or deflate encoding at any
- time.</td>
-* <td>POST-specific changes:</td>
- * <td>POST requests are expected to contain a data stream as part
- of the post; see Data flow below.</td>
- * <td>Content-length</td>
- * <td>Chunked encoding is no longer valid.</td>
-
-<td> The browser is free to prioritize requests as it sees fit. If the browser
-cannot make progress without receiving a resource, it should attempt to raise
-the priority of that resource. Resources such as images, should use the lowest
-priority whenever possible.</td>
-
-<td>If a client sends a SYN_STREAM without all of the method, url, and version
-headers, the server must reply with a HTTP 400 BAD REQUEST reply.</td>
-
-<td>Implementors Note: Section 5.1 of the HTTP/1.1 specification specifies that
-HTTP/1.1 compliant servers MUST support absolute URIs in the request line. SPDY
-is using absolute URIs only, instead of relative URIs + Host headers. From
-practical experience, we have noticed that many HTTP/1.1 servers do not support
-absolute URIs and are in violation of the HTTP/1.1 standard. As a result, any
-implementors of SPDY -&gt; HTTP proxies may wish to translate from SPDY's
-absolute URIs into relative URI + Host headers to maximize compatibility with
-existing HTTP/1.1 servers.</td>
-
-<td>#### Response</td>
-
-<td> The server responds to a client request with a SYN_REPLY frame. The
-Name/Value section of the frame contains the HTTP response headers. Symmetric to
-the client's upload stream, the server will follow the SYN_REPLY with a series
-of DATA frames, and the last data frame will contain the FLAG_FIN to indicate
-successful end-of-stream.</td>
-
-* <td>The response status line is unfolded into name/value pairs like
- other HTTP headers and must be present:</td>
- * <td>"status" - The HTTP response status code (e.g. "200" or "200
- OK")</td>
- * <td>"version" - The HTTP response version (e.g. "HTTP/1.1")</td>
-* <td>If the SPDY reply happens before a SYN_STREAM, then it includes
- parameters that inform the client regarding the request that would
- have been made to receive this response, by including url and method
- keys. </td>
-* <td>All header names must be lowercase.</td>
-* <td>The Connection and Keep-alive response headers are no longer
- valid.</td>
-* <td>Content-length is only advisory for length.</td>
-* <td>Chunked encoding is no longer valid.</td>
-* <td>Duplicate header names are not allowed.</td>
-
-<td>If a client receives a SYN_REPLY without a status or without a version
-header, the client must reply with a RST_STREAM frame indicating a PROTOCOL
-ERROR.</td>
-
-<td>TODO(mbelshe): Describe use of GOAWAY.</td>
-
-<td>### Server Push Transactions</td>
-
-<td> SPDY enables a server to send multiple replies to a client for a single
-request. The rationale for this feature is that sometimes a server knows that it
-will need to send multiple resources in response to a single request. Without
-server push features, the client must first download the primary resource, then
-discover the secondary resource(s), and request them. Pushing of resources
-avoids this delay, but also creates a potential race where a server can be
-pushing content which a browser is in the process of requesting. The following
-mechanics attempt to prevent the race condition while enabling the performance
-benefit. </td>
-
-<td>#### Server Implementation</td>
-
-<td>When the server intends to push a resource to the client, it opens a new
-stream by sending a unidirectional SYN_STREAM. The SYN_STREAM must include an
-Associated-To-Stream-ID. The SYN_STREAM must also include a header for "url"
-which contains the full URL for the resource being pushed. The purpose of the
-association is to differentiate which request induced the pushed stream; without
-it, if the browser had two tabs open to the same page, each pushing unique
-content under a fixed URL, the browser would not be able to differentiate the
-requests. Server pushed streams are unidirectional, and must set the
-FLAG_UNIDIRECTIONAL flag in the SYN_STREAM.</td>
-
-<td>The Associated-To-Stream-ID must be the ID of an existing, open stream with
-the client. The reason for this restriction is to have a clear endpoint for
-pushed content. If the client requested a resource on stream 11, the server
-replies on stream 11. It can push any number of additional streams to the client
-before it issues a FLAG_FIN on stream 11. However, once the originating stream
-is closed no further push streams may be created. The pushed streams do not need
-to be closed (FIN set) before the originating stream is closed, they only need
-to be created before the originating stream closes.</td>
-
-<td>It is illegal for a server to push a resource with the
-Associated-To-Stream-ID of 0.</td>
-
-<td>To avoid race conditions with the client, the SYN_STREAM for the pushed
-resources must be sent prior to sending any content which could allow the client
-to discover the pushed resource and request it.</td>
-
-<td>The server must only push resources which would have been returned from a
-GET request.</td>
-
-<td>Note: If the server does not have all of the Name/Value Response headers
-available at the time it issues the SYN_STREAM for the pushed resource, it may
-later use a HEADER frame to augment the name/value pairs to be associated with
-the pushed stream. The HEADER frame must not contain a header for 'url' (e.g.
-the server can't change the identity of the resource to be pushed). If the
-HEADERS frame must not contain duplicate headers with a previously sent
-SYN_STREAM or HEADERS frame. The server must send a HEADERS before sending any
-data frames on the stream.</td>
-
-<td>TODO(mbelshe): Consider Set-Cookie effects on push streams.</td>
-
-<td>#### Client Implementation</td>
-
-<td>When fetching a resource the client has 3 possibilities:</td>
-
-1. <td>the resource is not being pushed</td>
-2. <td>the resource is being pushed, but the data has not yet
- arrived</td>
-3. <td>the resource is being pushed, and the data has started to
- arrive</td>
-
-<td>When a SYN_STREAM frame which contains an Associated-To-Stream-ID is
-received, the client must not issue GET requests for the URL in the pushed
-stream, and instead wait for the pushed stream to arrive. </td>
-
-<td>When a client receives a SYN_STREAM from the server with an
-Associated-To-Stream-ID of 0, it must reply with a RST_STREAM with error code
-INVALID_STREAM.</td>
-
-<td>When a client receives a SYN_STREAM from the server without an 'url' in the
-Name/Value section, it must reply with a RST_STREAM with error code
-PROTOCOL_ERROR.</td>
-
-<td>To cancel server push streams, the client can use a RST_STREAM on an
-individual pushed stream with error code CANCEL. Upon receipt, the server will
-stop sending on this stream immediately (this is an Abrupt termination). Note
-that there may be data already in transit for this stream.</td>
-
-<td>To cancel all server push streams related to a request, the client can use a
-RST_STREAM on the original stream with error code CANCEL. By closing that
-stream, the server will no longer be able to push any streams with
-in-association-to for the original stream.</td>
-
-<td>If the server sends a HEADER frame containing duplicate headers with a
-previous SYN_STREAM or HEADERS frame for the same stream, the client must reply
-with a RST_STREAM with error code PROTOCOL ERROR.</td>
-
-<td>If the server sends a HEADER frame after sending a data frame for the same
-stream, the client must ignore the HEADERS frame. TODO(mbelshe): This is really
-undesirable for server-push. We want the push notifications to be able to flow
-asynchronously in the stream.</td>
-
-<td>TODO(mbelshe): Define how HTTP Trailers should work: "For HTTP, the rules
-for http trailers apply, as specified in: <a
-href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.40">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.40</a>"</td>
-
-<td>### Deployment</td>
-
-<td>Since SPDY does provide faster access to resources, it should be used in
-preference to HTTP/HTTPS. To facilitate this, clients and servers are encouraged
-to employ these features.</td>
-
-<td>#### Server Advertisement of SPDY through the HTTP Alternate-Protocol header</td>
-
-<td>When a server receives a non-SPDY request which could have been served via
-SPDY, it should append a Alternate-Protocol header into the response stream.
-Note that it is valid to have multiple Alternate-Protocols headers. The
-field-value can also be specified as a comma-separated list, as per RFC2616
-section 4.2.</td>
-
-<td>Syntax:</td>
-
-> <td>Alternate-Protocol: &lt;port&gt;:&lt;protocol&gt;</td>
-
-<td> To specify SPDY as an alternate protocol available on port 123, use:</td>
-> <td>Alternate-Protocol: 123:spdy/2</td>
-
-<td> To specify SPDY via TLS/NPN as an alternate protocol available on port 443, use:</td>
-> <td>Alternate-Protocol: 443:npn-spdy/2</td>
-
-<td>To specify support for SPDY versions 1 and 2 (currently non-existent) via
-TLS/NPN as alternate protocols available on port 443, use:</td>
-
-> <td>Alternate-Protocol: 443:npn-spdy/2,443:npn-spdy/2</td>
-
-<td>When a client receives a Alternate-Protocol header, it should attempt to
-piggyback future http requests over SPDY by using the specified port. Note that
-the server may reply with multiple field values or a comma-separated field value
-for Alternate-Protocol (and in this manner indicate the various SPDY versions it
-supports). The client may select any protocol it supports and attempt to use
-that. If it cannot establish a SPDY connection on that port, it should fallback
-to standard HTTP and persist the failure for the browser session so that it
-doesn't re-attempt in the near future.</td>
-
-<td>#### Server Advertisement of SPDY through TLS NPN extension</td>
-
-<td>When a server receives a connection to its HTTPS port that includes the TLS
-NPN extension (<a
-href="http://www.ietf.org/id/draft-agl-tls-nextprotoneg-00.txt">http://www.ietf.org/id/draft-agl-tls-nextprotoneg-00.txt</a>),
-it should respond with all the SPDY versions that it supports. Currently, the
-only valid string is "spdy/2" (spdy/1 isn't implemented anywhere anymore). The
-client can thereby choose which SPDY version it supports and proceed from
-there.</td>
-
-<td>#### Piggybacking HTTP requests over SPDY sessions</td>
-
-<td>SPDY does not introduce a new protocol scheme specific to SPDY. However, all
-HTTP requests can "piggyback" on an existing SPDY session. So, if a client has
-successfully negotiated any SPDY session to a port that the server has indicated
-(via Alternate-Protocol) is an acceptable alternate protocol for the HTTP host
-port pair, all future http requests to that host port pair should use the SPDY
-session rather than opening a new HTTP connection.</td>
-
-<td>Note: If your site does load balancing in such a way that http content would
-not be available over the SPDY session, your site may not be able to use
-SPDY.</td>
-
-<td>## Incompatibilities with SPDY Draft #1</td>
-
-* <td>Renamed the FIN_STREAM to RST_STREAM</td>
-* <td>Added the FLAG_UNIDIRECTIONAL to the SYN_STREAM</td>
-* <td>Defined behavior of SPDY-protocol version checking</td>
-* <td>Made GOAWAY message stronger - it should always be sent before
- closing a connection.</td>
-* <td>Added Associated-To-Stream-ID into the SYN_STREAM, allowing for
- a stream to declare its relationship to an existing stream.</td>
-* <td>Reworked the SUBRESOURCE frame. Instead of first declaring a
- SUBRESOURCE, with an associated stream, the SYN_REPLY can be used.
- Added a HEADERS frame for late-bound headers to be added to a
- stream.</td>
-* <td>Reworked the Server Push mechanism.</td>
-* <td>Added flow control: new WINDOW_UPDATE frame, new status code in
- RST_STREAM, added new field to SETTINGS for initial window size, and
- made SETTINGS always the first frame of the connection (still
- optional and asynchronous).</td>
-* <td>Updated HELLO frame format and renamed to SETTINGS.</td>
-
-<td>## Future work/experiments</td>
-
-<td> The following are thoughts/brainstorms for future work and
-experiments.</td>
-
-* <td>Caching</td>
- <td> Since we're proposing to do almost everything over an encrypted
- channel, we're making caching either difficult or impossible.</td>
- <td> We've had some discussions about having a non-secure, static-only
- content channel (where the resources are signed, or cryptographic hashes of
- the insecure content are sent over a secure link), but have made no headway
- yet...</td>
-* <td>DoS potential</td>
-
-<td>The potential for DoS of the server (by increasing the amount of state) is
-no worse than it would be for TCP connections. In fact, since more of the state
-is managed in userspace, it is easier to detect and react to increases in
-resource utilization. The client side, however, does have a potential for DoS
-since the server may now attempt to use client resources which would not
-normally be considered to be large per stream state.</td>
-
-<td>More investigation needs to be done about attack modes and remediation
-responses.</td>
-
-* <td>Stream capacity.</td>
-
-<td>Today, HTTP has no knowledge of approximate client bandwidth, and TCP only
-slowly and indirectly discovers it as a connection warms up. However, by the
-time TCP has warmed up, the page is often already completely loaded. To ensure
-that bandwidth is utilized efficiently, SPDY allows the client to tell the
-server its approximate bandwidth. The SETTINGS message is part of this, but
-measurement, reporting and all of the other infrastructure and behavioral
-modifications are lacking.</td>
-
-* <td>Server-controlled connection parameters.</td>
-
-<td>The "server" -- since either side may be considered a "server" in SPDY,
-"server" refers here to the side which receives requests for new sessions -- can
-inform the other side of reasonable connection or stream limits which should be
-respected. As with stream capacity, the SETTINGS message provides a container
-for signaling this, but no work has yet been done to figure out what values
-should be set, when, and what behavioral changes should be expected when the
-value does change.</td>
-
- <td>Prefetching/server push</td>
-
-> <td>If the client can inform the server (or vice versa) how much bandwidth it
-> is willing to allocate to various activities, then the server can push or
-> prefetch resources without a) impacting the activities that the user wants to
-> perform; or b) being too inefficient. While this approach still has
-> inefficiencies (the server still send sparts of resources that the client
-> already has before the client gets around to sending a FIN to the server), it
-> doesn't seem to be grossly inefficient when coupled with the client telling
-> the server how much slack (bandwidth) it is is willing to give to the server.
-> However, this means that the client must be able to dynamically adjust the
-> slack that it provides for server push or prefetching, for example, if it sees
-> an increase in PING time.</td>
-
- <td>Re-prioritization of streams</td>
-
-> <td>Users often switch between multiple tabs in the browser. When the user
-> switches tasks, the protocol should allow for a change in priority as the user
-> now wants different data at a higher priority. This would likely involve
-> creating priority groups so that the relative priority of resources for a tab
-> can be managed all at once instead of having to make a number of changes
-> proportional to the number of requests (which is 100% likely to be the same or
-> larger!)</td>
-
-* <td>Flow control</td>
-
-<td>Each side can announce how much data or bandwidth it will accept for each
-class of streams. If this is done, then speculative operations such as server
-push can soak up a limited amount of the pipe (especially important if the pipe
-is long and thin). This may allow for the elimination of more complex "is this
-already in the cache" or "announce what I have in my cache" schemes which are
-likely costly and complex.</td>
-
-* <td>DNS data</td>
-
-<td>It is suboptimal that the browser must discover new hostnames and then look
-them up in cases where it is fetching new resources controlled by the same
-entity. For example, there shouldn't be a need to do another DNS lookup for a
-resource from static.foo.com. when the browser has already resolved xxx.foo.com.
-In these cases, it would seemingly make sense to send (over the SPDY channel)
-the DNS data (signed in such a way that the user-agent can verify that it is
-authoritative).</td>
-
-* <td>Redirect to a different IP while retaining the HOST header</td>
-
-<td>For large sites or caches, it may be advantageous to supplement DNS frontend
-load balancing with the ability to send the user to a sibling that is less
-loaded, but also able to serve the request. This is not possible today with
-HTTP, as redirects must point to a different name (or use an IP, which amounts
-to the same thing), so that cookies, etc. are treated differently. This feature
-would likely be tied to the DNS data feature, or a more interesting verification
-mechanism would need to exist.</td>
-
-* <td>New headers</td>
- * <td>Request headers:</td>
- * <td>Never been to this site before header. When the server
- receives this header, it is used as permission to open
- multiple, server-initiated streams carrying subresource
- content. If sent, then the server can freely push all the
- resources necessary for the page.</td>
- * <td>Response</td>
- * <td>Subresource headers</td>
-* <td>Mark Nottingham notes that having the method/uri/version in
- separate headers, rather than at the front of the block, may make it
- harder for servers to quickly access this information. Being
- compressed hurts too.</td>
-
-<td>## Contributors</td>
-
-<td>Thank you to all those who read, commented, and contributed to this
-work:</td>
-<td> Mike Belshe, Roberto Peon, Adam Langley, Jim Morrison, Mark Nottingham,
-Alyssa Wilk, Costin Manolache, William Chan, Vitaliy Lvin, Joe Chan</td>
-
-</tr>
-</table>
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-1/index.md b/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-1/index.md
deleted file mode 100644
index 5f9a4f02c51..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-1/index.md
+++ /dev/null
@@ -1,1653 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/spdy-protocol
- - SPDY Protocol
-page_name: spdy-protocol-draft3-1
-title: SPDY Protocol - Draft 3.1
----
-
-[TOC]
-
-# 1. Overview
-
-One of the bottlenecks of HTTP implementations is that HTTP relies on multiple
-connections for concurrency. This causes several problems, including additional
-round trips for connection setup, slow-start delays, and connection rationing by
-the client, where it tries to avoid opening too many connections to any single
-server. HTTP pipelining helps some, but only achieves partial multiplexing. In
-addition, pipelining has proven non-deployable in existing browsers due to
-intermediary interference.
-
-SPDY adds a framing layer for multiplexing multiple, concurrent streams across a
-single TCP connection (or any reliable transport stream). The framing layer is
-optimized for HTTP-like request-response streams, such that applications which
-run over HTTP today can work over SPDY with little or no change on behalf of the
-web application writer.
-
-The SPDY session offers four improvements over HTTP:
-
-* Multiplexed requests: There is no limit to the number of requests
- that can be issued concurrently over a single SPDY connection.
-* Prioritized requests: Clients can request certain resources to be
- delivered first. This avoids the problem of congesting the network
- channel with non-critical resources when a high-priority request is
- pending.
-* Compressed headers: Clients today send a significant amount of
- redundant data in the form of HTTP headers. Because a single web
- page may require 50 or 100 subrequests, this data is significant.
-* Server pushed streams: Server Push enables content to be pushed from
- servers to clients without a request.
-
-SPDY attempts to preserve the existing semantics of HTTP. All features such as
-cookies, ETags, Vary headers, Content-Encoding negotiations, etc work as they do
-with HTTP; SPDY only replaces the way the data is written to the network.
-
-## 1.1 Document Organization
-
-The SPDY Specification is split into two parts: a framing layer (Section 2),
-which multiplexes a TCP connection into independent, length-prefixed frames, and
-an HTTP layer (Section 3), which specifies the mechanism for overlaying HTTP
-request/response pairs on top of the framing layer. While some of the framing
-layer concepts are isolated from the HTTP layer, building a generic framing
-layer has not been a goal. The framing layer is tailored to the needs of the
-HTTP protocol and server push.
-
-## 1.2 Definitions
-
-* client: The endpoint initiating the SPDY session.
-* connection: A transport-level connection between two endpoints.
-* endpoint: Either the client or server of a connection.
-* frame: A header-prefixed sequence of bytes sent over a SPDY session.
-* server: The endpoint which did not initiate the SPDY session.
-* session: A synonym for a connection.
-* session error: An error on the SPDY session.
-* stream: A bi-directional flow of bytes across a virtual channel
- within a SPDY session.
-* stream error: An error on an individual SPDY stream.
-
----
-
-# 2. SPDY Framing Layer
-
-## 2.1 Session (Connections)
-
-The SPDY framing layer (or "session") runs atop a reliable transport layer such
-as TCP. The client is the TCP connection initiator. SPDY connections are
-persistent connections.
-
-For best performance, it is expected that clients will not close open
-connections until the user navigates away from all web pages referencing a
-connection, or until the server closes the connection. Servers are encouraged to
-leave connections open for as long as possible, but can terminate idle
-connections if necessary. When either endpoint closes the transport-level
-connection, it MUST first send a GOAWAY (Section 2.6.6) frame so that the
-endpoints can reliably determine if requests finished before the close.
-
-## 2.2 Framing
-
-Once the connection is established, clients and servers exchange framed
-messages. There are two types of frames: control frames (Section 2.2.1) and data
-frames (Section 2.2.2). Frames always have a common header which is 8 bytes in
-length.
-
-The first bit is a control bit indicating whether a frame is a control frame or
-data frame. Control frames carry a version number, a frame type, flags, and a
-length. Data frames contain the stream ID, flags, and the length for the payload
-carried after the common header. The simple header is designed to make reading
-and writing of frames easy.
-
-All integer values, including length, version, and type, are in network byte
-order. SPDY does not enforce alignment of types in dynamically sized frames.
-
-### 2.2.1 Control frames
-
-+----------------------------------+ |C| Version(15bits) | Type(16bits) |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Data |
-+----------------------------------+
-
-Control bit: The 'C' bit is a single bit indicating if this is a control
-message. For control frames this value is always 1.
-
-Version: The version number of the SPDY protocol. This document describes SPDY
-version 3.1, which is represented as version 3.
-
-Type: The type of control frame. See Control Frames (Section 2.6) for the
-complete list of control frames.
-
-Flags: Flags related to this frame. Flags for control frames and data frames are
-different.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field.
-
-Data: data associated with this control frame. The format and length of this
-data is controlled by the control frame type.
-
-Control frame processing requirements:
-
-* Note that full length control frames (16MB) can be large for
- implementations running on resource-limited hardware. In such cases,
- implementations MAY limit the maximum length frame supported.
- However, all implementations MUST be able to receive control frames
- of at least 8192 octets in length.
-
-### 2.2.2 Data frames
-
-+----------------------------------+ |C| Stream-ID (31bits) |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Data |
-+----------------------------------+
-
-Control bit: For data frames this value is always 0.
-
-Stream-ID: A 31-bit value identifying the stream.
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - signifies that this frame represents the last
- frame to be transmitted on this stream. See Stream Close (Section
- 2.3.7) below.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a data frame is 8 bytes + length. It is valid to
-have a zero-length data frame.
-
-Data: The variable-length data payload; the length was defined in the length
-field.
-
-Data frame processing requirements:
-
-* If an endpoint receives a data frame for a stream-id which is not
- open and the endpoint has not sent a GOAWAY (Section 2.6.6) frame,
- it MUST issue a stream error (Section 2.4.2) with the error code
- INVALID_STREAM for the stream-id.
-* If the endpoint which created the stream receives a data frame
- before receiving a SYN_REPLY on that stream, it is a protocol error,
- and the recipient MUST issue a stream error (Section 2.4.2) with the
- status code PROTOCOL_ERROR for the stream-id.
-* Implementors note: If an endpoint receives multiple data frames for
- invalid stream-ids, it MAY close the session.
-
-## 2.3 Streams
-
-Streams are independent sequences of bi-directional data divided into frames
-with several properties:
-
-* Streams may be created by either the client or server.
-* Streams optionally carry a set of name/value header pairs.
-* Streams can concurrently send data interleaved with other streams.
-* Streams may be cancelled.
-
-### 2.3.1 Stream frames
-
-SPDY defines 3 control frames to manage the lifecycle of a stream:
-
-* SYN_STREAM - Open a new stream
-* SYN_REPLY - Remote acknowledgement of a new, open stream
-* RST_STREAM - Close a stream
-
-### 2.3.2 Stream creation
-
-A stream is created by sending a control frame with the type set to SYN_STREAM
-(Section 2.6.1). If the server is initiating the stream, the Stream-ID must be
-even. If the client is initiating the stream, the Stream-ID must be odd. 0 is
-not a valid Stream-ID. Stream-IDs from each side of the connection must increase
-monotonically as new streams are created. E.g. Stream 2 may be created after
-stream 3, but stream 7 must not be created after stream 9. Stream IDs do not
-wrap: when a client or server cannot create a new stream id without exceeding a
-31 bit value, it MUST NOT create a new stream.
-
-The stream-id MUST increase with each new stream. If an endpoint receives a
-SYN_STREAM with a stream id which is less than any previously received
-SYN_STREAM, it MUST issue a session error (Section 2.4.1) with the status
-PROTOCOL_ERROR.
-
-It is a protocol error to send two SYN_STREAMs with the same stream-id. If a
-recipient receives a second SYN_STREAM for the same stream, it MUST issue a
-stream error Section (2.4.2) with the status code PROTOCOL_ERROR.
-
-Upon receipt of a SYN_STREAM, the recipient can reject the stream by sending a
-stream error (Section 2.4.2) with the error code REFUSED_STREAM. Note, however,
-that the creating endpoint may have already sent additional frames for that
-stream which cannot be immediately stopped.
-
-Once the stream is created, the creator may immediately send HEADERS or DATA
-frames for that stream, without needing to wait for the recipient to
-acknowledge.
-
-#### 2.3.2.1 Unidirectional streams
-
-When an endpoint creates a stream with the FLAG_UNIDIRECTIONAL flag set, it
-creates a unidirectional stream which the creating endpoint can use to send
-frames, but the receiving endpoint cannot. The receiving endpoint is implicitly
-already in the half-closed (Section 2.3.6) state.
-
-#### 2.3.2.2 Bidirectional streams
-
-SYN_STREAM frames which do not use the FLAG_UNIDIRECTIONAL flag are
-bidirectional streams. Both endpoints can send data on a bi-directional stream.
-
-### 2.3.3 Stream priority
-
-The creator of a stream assigns a priority for that stream. Priority is
-represented as an integer from 0 to 7. 0 represents the highest priority and 7
-represents the lowest priority.
-
-The sender and recipient SHOULD use best-effort to process streams in the order
-of highest priority to lowest priority.
-
-### 2.3.4 Stream headers
-
-Streams carry optional sets of name/value pair headers which carry metadata
-about the stream. After the stream has been created, and as long as the sender
-is not closed (Section 2.3.7) or half-closed (Section 2.3.6), each side may send
-HEADERS frame(s) containing the header data. Header data can be sent in multiple
-HEADERS frames, and HEADERS frames may be interleaved with data frames.
-
-### 2.3.5 Stream data exchange
-
-Once a stream is created, it can be used to send arbitrary amounts of data.
-Generally this means that a series of data frames will be sent on the stream
-until a frame containing the FLAG_FIN flag is set. The FLAG_FIN can be set on a
-SYN_STREAM (Section 2.6.1), SYN_REPLY (Section 2.6.2), HEADERS (Section 2.6.7)
-or a DATA (Section 2.2.2) frame. Once the FLAG_FIN has been sent, the stream is
-considered to be half-closed.
-
-### 2.3.6 Stream half-close
-
-When one side of the stream sends a frame with the FLAG_FIN flag set, the stream
-is half-closed from that endpoint. The sender of the FLAG_FIN MUST NOT send
-further frames on that stream. When both sides have half-closed, the stream is
-closed. Note that WINDOW_UPDATE is metadata about a stream, and is not part of
-any stream, and as such is still allowed when a stream is half-closed.
-
-If an endpoint receives a data frame after the stream is half-closed from the
-sender (e.g. the endpoint has already received a prior frame for the stream with
-the FIN flag set), it MUST send a RST_STREAM to the sender with the status
-STREAM_ALREADY_CLOSED.
-
-### 2.3.7 Stream close
-
-There are 3 ways that streams can be terminated:
-
-* Normal termination: Normal stream termination occurs when both
- sender and recipient have half-closed the stream by sending a
- FLAG_FIN.
-* Abrupt termination: Either the client or server can send a
- RST_STREAM control frame at any time. A RST_STREAM contains an error
- code to indicate the reason for failure. When a RST_STREAM is sent
- from the stream originator, it indicates a failure to complete the
- stream and that no further data will be sent on the stream. When a
- RST_STREAM is sent from the stream recipient, the sender, upon
- receipt, should stop sending any data on the stream. The stream
- recipient should be aware that there is a race between data already
- in transit from the sender and the time the RST_STREAM is received.
- See Stream Error Handling (Section 2.4.2)
-* TCP connection teardown: If the TCP connection is torn down while
- un-closed streams exist, then the endpoint must assume that the
- stream was abnormally interrupted and may be incomplete.
-
-If an endpoint receives a data frame after the stream is closed, it must send a
-RST_STREAM to the sender with the status PROTOCOL_ERROR.
-
-## 2.4 Error Handling
-
-The SPDY framing layer has only two types of errors, and they are always handled
-consistently. Any reference in this specification to "issue a session error"
-refers to Section 2.4.1. Any reference to "issue a stream error" refers to
-Section 2.4.2.
-
-### 2.4.1 Session Error Handling
-
-A session error is any error which prevents further processing of the framing
-layer or which corrupts the session compression state. When a session error
-occurs, the endpoint encountering the error MUST first send a GOAWAY (Section
-2.6.6) frame with the stream id of most recently received stream from the remote
-endpoint, and the error code for why the session is terminating. After sending
-the GOAWAY frame, the endpoint MUST close the TCP connection.
-
-Note that the session compression state is dependent upon both endpoints always
-processing all compressed data. If an endpoint partially processes a frame
-containing compressed data without updating compression state properly, future
-control frames which use compression will be always be errored. Implementations
-SHOULD always try to process compressed data so that errors which could be
-handled as stream errors do not become session errors.
-
-Note that because this GOAWAY is sent during a session error case, it is
-possible that the GOAWAY will not be reliably received by the receiving
-endpoint. It is a best-effort attempt to communicate with the remote about why
-the session is going down.
-
-### 2.4.2 Stream Error Handling
-
-A stream error is an error related to a specific stream-id which does not affect
-processing of other streams at the framing layer. Upon a stream error, the
-endpoint MUST send a RST_STREAM (Section 2.6.3) frame which contains the stream
-id of the stream where the error occurred and the error status which caused the
-error. After sending the RST_STREAM, the stream is closed to the sending
-endpoint. After sending the RST_STREAM, if the sender receives any frames other
-than a RST_STREAM for that stream id, it will result in sending additional
-RST_STREAM frames. An endpoint MUST NOT send a RST_STREAM in response to an
-RST_STREAM, as doing so would lead to RST_STREAM loops. Sending a RST_STREAM
-does not cause the SPDY session to be closed.
-
-If an endpoint has multiple RST_STREAM frames to send in succession for the same
-stream-id and the same error code, it MAY coalesce them into a single RST_STREAM
-frame. (This can happen if a stream is closed, but the remote sends multiple
-data frames. There is no reason to send a RST_STREAM for each frame in
-succession).
-
-## 2.5 Data flow
-
-Because TCP provides a single stream of data on which SPDY multiplexes multiple
-logical streams, clients and servers must intelligently interleave data messages
-for concurrent sessions.
-
-## 2.6 Control frame types
-
-### 2.6.1 SYN_STREAM
-
-The SYN_STREAM control frame allows the sender to asynchronously create a stream
-between the endpoints. See Stream Creation (section 2.3.2)
-
-+------------------------------------+ |1| version | 1 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ |X| Associated-To-Stream-ID (31bits) |
-+------------------------------------+ | Pri|Unused | Slot | |
-+-------------------+ | | Number of Name/Value pairs (int32) | &lt;+
-+------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- (Section 2.3.6) state.
-* 0x02 = FLAG_UNIDIRECTIONAL - a stream created with this flag puts
- the recipient in the half-closed (Section 2.3.6) state.
-
-Length: The length is the number of bytes which follow the length field in the
-frame. For SYN_STREAM frames, this is 10 bytes plus the length of the compressed
-Name/Value block.
-
-Stream-ID: The 31-bit identifier for this stream. This stream-id will be used in
-frames which are part of this stream.
-
-Associated-To-Stream-ID: The 31-bit identifier for a stream which this stream is
-associated to. If this stream is independent of all other streams, it should be
-0.
-
-Priority: A 3-bit priority (Section 2.3.3) field.
-
-Unused: 5 bits of unused space, reserved for future use.
-
-Slot: 8 bits of unused space, reserved for future use. Name/Value Header Block:
-A set of name/value pairs carried as part of the SYN_STREAM. see Name/Value
-Header Block (Section 2.6.10).
-
-If an endpoint receives a SYN_STREAM which is larger than the implementation
-supports, it MAY send a RST_STREAM with error code FRAME_TOO_LARGE. All
-implementations MUST support the minimum size limits defined in the Control
-Frames section
-([S](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.1-Control-frames)ection
-2.2.1).
-
-### 2.6.2 SYN_REPLY
-
-SYN_REPLY indicates the acceptance of a stream creation by the recipient of a
-SYN_STREAM frame.
-
-+------------------------------------+ |1| version | 2 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-&lt;+ +------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- (Section 2.3.6) state.
-
-Length: The length is the number of bytes which follow the length field in the
-frame. For SYN_REPLY frames, this is 4 bytes plus the length of the compressed
-Name/Value block.
-
-Stream-ID: The 31-bit identifier for this stream.
-
-If an endpoint receives multiple SYN_REPLY frames for the same active stream ID,
-it MUST issue a stream error (Section 2.4.2) with the error code STREAM_IN_USE.
-
-Name/Value Header Block: A set of name/value pairs carried as part of the
-SYN_STREAM. see Name/Value Header Block (Section 2.6.10).
-
-If an endpoint receives a SYN_REPLY which is larger than the implementation
-supports, it MAY send a RST_STREAM with error code FRAME_TOO_LARGE. All
-implementations MUST support the minimum size limits defined in the Control
-Frames section
-([S](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.1-Control-frames)ection
-2.2.1).
-
-### 2.6.3 RST_STREAM
-
-The RST_STREAM frame allows for abnormal termination of a stream. When sent by
-the creator of a stream, it indicates the creator wishes to cancel the stream.
-When sent by the recipient of a stream, it indicates an error or that the
-recipient did not want to accept the stream, so the stream should be closed.
-
-+----------------------------------+ |1| version | 3 |
-+----------------------------------+ | Flags (8) | 8 |
-+----------------------------------+ |X| Stream-ID (31bits) |
-+----------------------------------+ | Status code |
-+----------------------------------+
-
-Flags: Flags related to this frame. RST_STREAM does not define any flags. This
-value must be 0.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. For RST_STREAM control frames, this value is always 8.
-
-Stream-ID: The 31-bit identifier for this stream.
-
-Status code: (32 bits) An indicator for why the stream is being terminated.The
-following status codes are defined:
-
-* 1 - PROTOCOL_ERROR. This is a generic error, and should only be used
- if a more specific error is not available.
-* 2 - INVALID_STREAM. This is returned when a frame is received for a
- stream which is not active.
-* 3 - REFUSED_STREAM. Indicates that the stream was refused before any
- processing has been done on the stream.
-* 4 - UNSUPPORTED_VERSION. Indicates that the recipient of a stream
- does not support the SPDY version requested.
-* 5 - CANCEL. Used by the creator of a stream to indicate that the
- stream is no longer needed.
-* 6 - INTERNAL_ERROR. This is a generic error which can be used when
- the implementation has internally failed, not due to anything in the
- protocol.
-* 7 - FLOW_CONTROL_ERROR. The endpoint detected that its peer violated
- the flow control protocol.
-* 8 - STREAM_IN_USE. The endpoint received a SYN_REPLY for a stream
- already open.
-* 9 - STREAM_ALREADY_CLOSED. The endpoint received a data or SYN_REPLY
- frame for a stream which is half closed.
-* 10 - deprecated/unused.
-* 11 - FRAME_TOO_LARGE. The endpoint received a frame which this
- implementation could not support. If FRAME_TOO_LARGE is sent for a
- SYN_STREAM, HEADERS, or SYN_REPLY frame without fully processing the
- compressed portion of those frames, then the compression state will
- be out-of-sync with the other endpoint. In this case, senders of
- FRAME_TOO_LARGE MUST close the session.
-* Note: 0 is not a valid status code for a RST_STREAM.
-
-After receiving a RST_STREAM on a stream, the recipient must not send additional
-frames for that stream, and the stream moves into the closed state.
-
-### 2.6.4 SETTINGS
-
-A SETTINGS frame contains a set of id/value pairs for communicating
-configuration data about how the two endpoints may communicate. SETTINGS frames
-can be sent at any time by either endpoint, are optionally sent, and are fully
-asynchronous. When the server is the sender, the sender can request that
-configuration data be persisted by the client across SPDY sessions and returned
-to the server in future communications.
-
-Persistence of SETTINGS ID/Value pairs is done on a per origin/IP pair (the
-"origin" is the set of scheme, host, and port from the URI. See RFC6454). That
-is, when a client connects to a server, and the server persists settings within
-the client, the client SHOULD return the persisted settings on future
-connections to the same origin AND IP address and TCP port. Clients MUST NOT
-request servers to use the persistence features of the SETTINGS frames, and
-servers MUST ignore persistence related flags sent by a client.
-
-+----------------------------------+ |1| version | 4 |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Number of entries |
-+----------------------------------+ | ID/Value Pairs | | ... |
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a SETTINGS message is 4.
-
-Flags: FLAG_SETTINGS_CLEAR_SETTINGS (0x1): When set, the client should clear any
-previously persisted SETTINGS ID/Value pairs. If this frame contains ID/Value
-pairs with the FLAG_SETTINGS_PERSIST_VALUE set, then the client will first clear
-its existing, persisted settings, and then persist the values with the flag set
-which are contained within this frame. Because persistence is only implemented
-on the client, this flag can only be used when the sender is the server.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a SETTINGS frame is 8 bytes + length.
-
-Number of entries: A 32-bit value representing the number of ID/value pairs in
-this message.
-
-Each ID/value pair is as follows:
-
-+----------------------------------+ | Flags(8) | ID (24 bits) |
-+----------------------------------+ | Value (32 bits) |
-+----------------------------------+
-
-Flags: An 8 bit value. Defined Flags:
-
-* FLAG_SETTINGS_PERSIST_VALUE (0x1): When set, the sender of this
- SETTINGS frame is requesting that the recipient persist the ID/Value
- and return it in future SETTINGS frames sent from the sender to this
- recipient. Because persistence is only implemented on the client,
- this flag is only sent by the server.
-* FLAG_SETTINGS_PERSISTED (0x2): When set, the sender is notifying the
- recipient that this ID/Value pair was previously sent to the sender
- by the recipient with the FLAG_SETTINGS_PERSIST_VALUE, and the
- sender is returning it. Because persistence is only implemented on
- the client, this flag is only sent by the client.
-
-ID: 24-bits in network byte order. Defined IDs:
-
-* 1 - SETTINGS_UPLOAD_BANDWIDTH allows the sender to send its expected
- upload bandwidth on this channel. This number is an estimate. The
- value should be the integral number of kilobytes per second that the
- sender predicts as an expected maximum upload channel capacity.
-* 2 - SETTINGS_DOWNLOAD_BANDWIDTH allows the sender to send its
- expected download bandwidth on this channel. This number is an
- estimate. The value should be the integral number of kilobytes per
- second that the sender predicts as an expected maximum download
- channel capacity.
-* 3 - SETTINGS_ROUND_TRIP_TIME allows the sender to send its expected
- round-trip-time on this channel. The round trip time is defined as
- the minimum amount of time to send a control frame from this client
- to the remote and receive a response. The value is represented in
- milliseconds.
-* 4 - SETTINGS_MAX_CONCURRENT_STREAMS allows the sender to inform the
- remote endpoint the maximum number of remote-initiated concurrent
- streams which it will allow. By default there is no limit. For
- implementors it is recommended that this value be no smaller than
- 100.
-* 5 - SETTINGS_CURRENT_CWND allows the sender to inform the remote
- endpoint of the current TCP CWND value.
-* 6 - SETTINGS_DOWNLOAD_RETRANS_RATE allows the sender to inform the
- remote endpoint the retransmission rate (bytes retransmitted / total
- bytes transmitted).
-* 7 - SETTINGS_INITIAL_WINDOW_SIZE allows the sender to inform the
- remote endpoint the initial window size (in bytes) for new streams.
-* 8 - SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE allows the server to
- inform the client if the new size of the client certificate vector.
-
-Value: A 32-bit value.
-
-The message is intentionally extensible for future information which may improve
-client-server communications. The sender does not need to send every type of
-ID/value. It must only send those for which it has accurate values to convey.
-When multiple ID/value pairs are sent, they should be sent in order of lowest id
-to highest id. A single SETTINGS frame MUST not contain multiple values for the
-same ID. If the recipient of a SETTINGS frame discovers multiple values for the
-same ID, it MUST ignore all values except the first one.
-
-A server may send multiple SETTINGS frames containing different ID/Value pairs.
-When the same ID/Value is sent twice, the most recent value overrides any
-previously sent values. If the server sends IDs 1, 2, and 3 with the
-FLAG_SETTINGS_PERSIST_VALUE in a first SETTINGS frame, and then sends IDs 4 and
-5 with the FLAG_SETTINGS_PERSIST_VALUE, when the client returns the persisted
-state on its next SETTINGS frame, it SHOULD send all 5 settings (1, 2, 3, 4, and
-5 in this example) to the server.
-
-### 2.6.5 PING
-
-The PING control frame is a mechanism for measuring a minimal round-trip time
-from the sender. It can be sent from the client or the server. Recipients of a
-PING frame should send an identical frame to the sender as soon as possible (if
-there is other pending data waiting to be sent, PING should take highest
-priority). Each ping sent by a sender should use a unique ID.
-
-+----------------------------------+ |1| version | 6 |
-+----------------------------------+ | 0 (flags) | 4 (length) |
-+----------------------------------| | 32-bit ID |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a PING message is 6.
-
-Length: This frame is always 4 bytes long.
-
-ID: A unique ID for this ping, represented as an unsigned 32 bit value. When the
-client initiates a ping, it must use an odd numbered ID. When the server
-initiates a ping, it must use an even numbered ping. Use of odd/even IDs is
-required in order to avoid accidental looping on PINGs (where each side
-initiates an identical PING at the same time).
-
-Note: If a sender uses all possible PING ids (e.g. has sent all 2^31 possible
-IDs), it can wrap and start re-using IDs.
-
-If a server receives an even numbered PING which it did not initiate, it must
-ignore the PING. If a client receives an odd numbered PING which it did not
-initiate, it must ignore the PING.
-
-### 2.6.6 GOAWAY
-
-The GOAWAY control frame is a mechanism to tell the remote side of the
-connection to stop creating streams on this session. It can be sent from the
-client or the server. Once sent, the sender will not respond to any new
-SYN_STREAMs on this session. Recipients of a GOAWAY frame must not send
-additional streams on this session, although a new session can be established
-for new streams. The purpose of this message is to allow an endpoint to
-gracefully stop accepting new streams (perhaps for a reboot or maintenance),
-while still finishing processing of previously established streams.
-
-There is an inherent race condition between an endpoint sending SYN_STREAMs and
-the remote sending a GOAWAY message. To deal with this case, the GOAWAY contains
-a last-stream-id indicating the stream-id of the last stream which was created
-on the sending endpoint in this session. If the receiver of the GOAWAY sent new
-SYN_STREAMs for sessions after this last-stream-id, they were not processed by
-the server and the receiver may treat the stream as though it had never been
-created at all (hence the receiver may want to re-create the stream later on a
-new session).
-
-Endpoints should always send a GOAWAY message before closing a connection so
-that the remote can know whether a stream has been partially processed or not.
-(For example, if an HTTP client sends a POST at the same time that a server
-closes a connection, the client cannot know if the server started to process
-that POST request if the server does not send a GOAWAY frame to indicate where
-it stopped working).
-
-After sending a GOAWAY message, the sender must ignore all SYN_STREAM frames for
-new streams, and MUST NOT create any new streams.
-
-+----------------------------------+ |1| version | 7 |
-+----------------------------------+ | 0 (flags) | 8 (length) |
-+----------------------------------| |X| Last-good-stream-ID (31 bits) |
-+----------------------------------+ | Status code |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a GOAWAY message is 7.
-
-Length: This frame is always 8 bytes long.
-
-Last-good-stream-Id: The last stream id which was accepted by the sender of the
-GOAWAY message. If no streams were replied to, this value MUST be 0.
-
-Status: The reason for closing the session.
-
-* 0 - OK. This is a normal session teardown.
-* 1 - PROTOCOL_ERROR. This is a generic error, and should only be used
- if a more specific error is not available.
-* 2 - INTERNAL_ERROR. This is a generic error which can be used when
- the implementation has internally failed, not due to anything in the
- protocol.
-
-### 2.6.7 HEADERS
-
-The HEADERS frame augments a stream with additional headers. It may be
-optionally sent on an existing stream at any time. Specific application of the
-headers in this frame is application-dependent. The name/value header block
-within this frame is compressed.
-
-+------------------------------------+ |1| version | 8 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-&lt;+ +------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- (Section 2.3.6) state.
-
-Length: An unsigned 24 bit value representing the number of bytes after the
-length field. The minimum length of the length field is 4 (when the number of
-name value pairs is 0).
-
-Stream-ID: The stream this HEADERS block is associated with.
-
-Name/Value Header Block: A set of name/value pairs carried as part of the
-SYN_STREAM. see Name/Value Header Block (Section 2.6.10).
-
-### 2.6.8 WINDOW_UPDATE
-
-The WINDOW_UPDATE frame is used to implement flow control.
-
-Flow control operates at two levels: on each individual stream and on the entire
-connection.
-
-Both types of flow control are hop by hop; that is, only between the two
-endpoints. Intermediaries do not forward WINDOW_UPDATE frames between dependent
-connections. However, throttling of data transfer by any receiver can indirectly
-cause the propagation of flow control information toward the original sender.
-
-Flow control only applies to frames that are identified as being subject to flow
-control. Of the frame types defined in this document, this includes only DATA
-frame. Frames that are exempt from flow control MUST be accepted and processed,
-unless the receiver is unable to assign resources to handling the frame. A
-receiver MAY respond with a stream error (Section 2.4.2) or session error
-(Section 2.4.1) of type FLOW_CONTROL_ERROR if it is unable accept a frame.
-
-+----------------------------------+ |1| version | 9 |
-+----------------------------------+ | 0 (flags) | 8 (length) |
-+----------------------------------+ |X| Stream-ID (31-bits) |
-+----------------------------------+ |X| Delta-Window-Size (31-bits) |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Flags: The flags field is always zero.
-
-Type: The message type for a WINDOW_UPDATE message is 9.
-
-Length: The length field is always 8 for this frame (there are always 8 bytes
-after the length field).
-
-Stream-ID: The stream ID for which this WINDOW_UPDATE control frame applies to,
-or 0 if applied to connection-level flow control.
-
-Delta-Window-Size: The additional number of bytes that the sender can transmit
-in addition to existing remaining window size. The legal range for this field is
-1 to 2^31 - 1 (0x7fffffff) bytes.
-
-A receiver that receives a flow controlled frame MUST always account for its
-contribution against the connection flow control window, unless the receiver
-treats this as a session error (Section 2.4.1). This is necessary even if the
-frame is in error. Since the sender counts the frame toward the flow control
-window, if the receiver does not, the flow control window at sender and receiver
-can become different.
-
-#### The Flow Control Window
-
-Flow control in SPDY 3.1 is implemented using a window kept by each sender on
-every stream. The flow control window is a simple integer value that indicates
-how many bytes of data the sender is permitted to transmit; as such, its size is
-a measure of the buffering capability of the receiver.
-
-Two flow control windows are applicable: the stream flow control window and the
-connection flow control window. The sender MUST NOT send a flow controlled frame
-with a length that exceeds the space available in either of the flow control
-windows advertised by the receiver. Frames with zero length with the END_STREAM
-flag set (for example, an empty data frame) MAY be sent if there is no available
-space in either flow control window.
-
-For flow control calculations, the 8 byte frame header is not counted.
-
-After sending a flow controlled frame, the sender reduces the space available in
-both windows by the length of the transmitted frame.
-
-The receiver of a frame sends a WINDOW_UPDATE frame as it consumes data and
-frees up space in flow control windows. Separate WINDOW_UPDATE frames are sent
-for the stream and connection level flow control windows.
-
-A sender that receives a WINDOW_UPDATE frame updates the corresponding window by
-the amount specified in the frame.
-
-A sender MUST NOT allow a flow control window to exceed 2^31 - 1 bytes. If a
-sender receives a WINDOW_UPDATE that causes a flow control window to exceed this
-maximum it MUST terminate either the stream or the connection, as appropriate.
-For streams, the sender sends a RST_STREAM with the error code of
-FLOW_CONTROL_ERROR code; for the connection, a GOAWAY frame with a
-FLOW_CONTROL_ERROR code.
-
-Flow controlled frames from the sender and WINDOW_UPDATE frames from the
-receiver are completely asynchronous with respect to each other. This property
-allows a receiver to aggressively update the window size kept by the sender to
-prevent streams from stalling.
-
-#### Initial Flow Control Window Size
-
-When a SPDY/3.1 connection is first established, new streams are created with an
-initial flow control window size of 64KB. The connection flow control window is
-64KB bytes. Both endpoints can adjust the initial window size for new streams by
-including a value for SETTINGS_INITIAL_WINDOW_SIZE in the SETTINGS frame that
-forms part of the connection header.
-
-Prior to receiving a SETTINGS frame that sets a value for
-SETTINGS_INITIAL_WINDOW_SIZE, an endpoint can only use the default initial
-window size when sending flow controlled frames. Similarly, the connection flow
-control window is set to the default initial window size until a WINDOW_UPDATE
-frame is received.
-
-A SETTINGS frame can alter the initial flow control window size for all current
-streams. When the value of SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver MUST
-adjust the size of all stream flow control windows that it maintains by the
-difference between the new value and the old value. A SETTINGS frame cannot
-alter the connection flow control window.
-
-A change to SETTINGS_INITIAL_WINDOW_SIZE could cause the available space in a
-flow control window to become negative. A sender MUST track the negative flow
-control window, and MUST NOT send new flow controlled frames until it receives
-WINDOW_UPDATE frames that cause the flow control window to become positive.
-
-For example, if the client sends 60KB immediately on connection establishment,
-and the server sets the initial window size to be 16KB, the client will
-recalculate the available flow control window to be -44KB on receipt of the
-SETTINGS frame. The client retains a negative flow control window until
-WINDOW_UPDATE frames restore the window to being positive, after which the
-client can resume sending.
-
-#### Reducing the Stream Window Size
-
-A receiver that wishes to use a smaller flow control window than the current
-size can send a new SETTINGS frame. However, the receiver MUST be prepared to
-receive data that exceeds this window size, since the sender might send data
-that exceeds the lower limit prior to processing the SETTINGS frame.
-
-A receiver has two options for handling streams that exceed flow control limits:
-
-1. The receiver can immediately send RST_STREAM with FLOW_CONTROL_ERROR
- error code for the affected streams.
-2. The receiver can accept the streams and tolerate the resulting head
- of line blocking, sending WINDOW_UPDATE frames as it consumes data.
-
-If a receiver decides to accept streams, both sides MUST recompute the available
-flow control window based on the initial window size sent in the SETTINGS.
-
-### 2.6.9 CREDENTIAL
-
-DEPRECATED.
-
-### 2.6.10 Name/Value Header Block
-
-The Name/Value Header Block is found in the SYN_STREAM, SYN_REPLY and HEADERS
-control frames, and shares a common format:
-
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-+------------------------------------+ | Length of name (int32) |
-+------------------------------------+ | Name (string) |
-+------------------------------------+ | Length of value (int32) |
-+------------------------------------+ | Value (string) |
-+------------------------------------+ | (repeats) |
-
-Number of Name/Value pairs: The number of repeating name/value pairs following
-this field.
-
-List of Name/Value pairs:
-
-* Length of Name: a 32-bit value containing the number of octets in
- the name field. Note that in practice, this length must not exceed
- 2^24, as that is the maximum size of a SPDY frame.
-* Name: 0 or more octets, 8-bit sequences of data, excluding 0.
-* Length of Value: a 32-bit value containing the number of octets in
- the value field. Note that in practice, this length must not exceed
- 2^24, as that is the maximum size of a SPDY frame.
-* Value: 0 or more octets, 8-bit sequences of data, excluding 0.
-
-Each header name must have at least one value. Header names are encoded using
-the [US-ASCII character
-set](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#ASCII)
-\[ASCII\] and must be all lower case. The length of each name must be greater
-than zero. A recipient of a zero-length name MUST issue a stream error (Section
-2.4.2) with the status code PROTOCOL_ERROR for the stream-id.
-
-Duplicate header names are not allowed. To send two identically named headers,
-send a header with two values, where the values are separated by a single NUL
-(0) byte. A header value can either be empty (e.g. the length is zero) or it can
-contain multiple, NUL-separated values, each with length greater than zero. The
-value never starts nor ends with a NUL character. Recipients of illegal value
-fields MUST issue a stream error (Section 2.4.2) with the status code
-PROTOCOL_ERROR for the stream-id.
-
-#### 2.6.10.1 Compression
-
-The Name/Value Header Block is a section of the SYN_STREAM, SYN_REPLY, and
-HEADERS frames used to carry header meta-data. This block is always compressed
-using zlib compression. Within this specification, any reference to 'zlib' is
-referring to the [ZLIB Compressed Data Format Specification Version 3.3 as part
-of
-RFC1950.](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC1950)
-
-For each HEADERS compression instance, the initial state is initialized using
-the following
-[dictionary](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#UDELCOMPRESSION)
-\[UDELCOMPRESSION\]:
-
-const unsigned char SPDY_dictionary_txt\[\] = { 0x00, 0x00, 0x00, 0x07,
-0x6f, 0x70, 0x74, 0x69, \\\\ - - - - o p t i 0x6f, 0x6e, 0x73, 0x00, 0x00,
-0x00, 0x04, 0x68, \\\\ o n s - - - - h 0x65, 0x61, 0x64, 0x00, 0x00, 0x00,
-0x04, 0x70, \\\\ e a d - - - - p 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03,
-0x70, \\\\ o s t - - - - p 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65,
-\\\\ u t - - - - d e 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05, \\\\ l e
-t e - - - - 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00, \\\\ t r a c e -
-- - 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00, \\\\ - a c c e p t -
-0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, \\\\ - - - a c c e p 0x74,
-0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, \\\\ t - c h a r s e 0x74, 0x00,
-0x00, 0x00, 0x0f, 0x61, 0x63, 0x63, \\\\ t - - - - a c c 0x65, 0x70, 0x74,
-0x2d, 0x65, 0x6e, 0x63, 0x6f, \\\\ e p t - e n c o 0x64, 0x69, 0x6e, 0x67,
-0x00, 0x00, 0x00, 0x0f, \\\\ d i n g - - - - 0x61, 0x63, 0x63, 0x65, 0x70,
-0x74, 0x2d, 0x6c, \\\\ a c c e p t - l 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
-0x65, 0x00, \\\\ a n g u a g e - 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65,
-0x70, \\\\ - - - a c c e p 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73,
-\\\\ t - r a n g e s 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00, \\\\ - -
-- - a g e - 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, \\\\ - - - a l l
-o w 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68, \\\\ - - - - a u t h
-0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, \\\\ o r i z a t i o 0x6e,
-0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63, \\\\ n - - - - c a c 0x68, 0x65,
-0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, \\\\ h e - c o n t r 0x6f, 0x6c, 0x00,
-0x00, 0x00, 0x0a, 0x63, 0x6f, \\\\ o l - - - - c o 0x6e, 0x6e, 0x65, 0x63,
-0x74, 0x69, 0x6f, 0x6e, \\\\ n n e c t i o n 0x00, 0x00, 0x00, 0x0c, 0x63,
-0x6f, 0x6e, 0x74, \\\\ - - - - c o n t 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61,
-0x73, 0x65, \\\\ e n t - b a s e 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e,
-0x74, \\\\ - - - - c o n t 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f,
-\\\\ e n t - e n c o 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, \\\\ d i
-n g - - - - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, \\\\ c o n t e n
-t - 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, \\\\ l a n g u a g e
-0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74, \\\\ - - - - c o n t 0x65,
-0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, \\\\ e n t - l e n g 0x74, 0x68,
-0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, \\\\ t h - - - - c o 0x6e, 0x74, 0x65,
-0x6e, 0x74, 0x2d, 0x6c, 0x6f, \\\\ n t e n t - l o 0x63, 0x61, 0x74, 0x69,
-0x6f, 0x6e, 0x00, 0x00, \\\\ c a t i o n - - 0x00, 0x0b, 0x63, 0x6f, 0x6e,
-0x74, 0x65, 0x6e, \\\\ - - c o n t e n 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00,
-0x00, 0x00, \\\\ t - m d 5 - - - 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
-0x74, \\\\ - c o n t e n t 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00,
-\\\\ - r a n g e - - 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, \\\\ - -
-c o n t e n 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, \\\\ t - t y p e
-- - 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00, \\\\ - - d a t e - -
-0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00, \\\\ - - e t a g - - 0x00,
-0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, \\\\ - - e x p e c t 0x00, 0x00,
-0x00, 0x07, 0x65, 0x78, 0x70, 0x69, \\\\ - - - - e x p i 0x72, 0x65, 0x73,
-0x00, 0x00, 0x00, 0x04, 0x66, \\\\ r e s - - - - f 0x72, 0x6f, 0x6d, 0x00,
-0x00, 0x00, 0x04, 0x68, \\\\ r o m - - - - h 0x6f, 0x73, 0x74, 0x00, 0x00,
-0x00, 0x08, 0x69, \\\\ o s t - - - - i 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63,
-0x68, 0x00, \\\\ f - m a t c h - 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d,
-0x6f, \\\\ - - - i f - m o 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73,
-\\\\ d i f i e d - s 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d, \\\\ i n
-c e - - - - 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, \\\\ i f - n o n
-e - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00, \\\\ m a t c h - - -
-0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67, \\\\ - i f - r a n g 0x65,
-0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d, \\\\ e - - - - i f - 0x75, 0x6e,
-0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, \\\\ u n m o d i f i 0x65, 0x64, 0x2d,
-0x73, 0x69, 0x6e, 0x63, 0x65, \\\\ e d - s i n c e 0x00, 0x00, 0x00, 0x0d,
-0x6c, 0x61, 0x73, 0x74, \\\\ - - - - l a s t 0x2d, 0x6d, 0x6f, 0x64, 0x69,
-0x66, 0x69, 0x65, \\\\ - m o d i f i e 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c,
-0x6f, 0x63, \\\\ d - - - - l o c 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00,
-0x00, \\\\ a t i o n - - - 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72,
-\\\\ - m a x - f o r 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00, \\\\ w a
-r d s - - - 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00, \\\\ - p r a g m
-a - 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79, \\\\ - - - p r o x y
-0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, \\\\ - a u t h e n t 0x69,
-0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, \\\\ i c a t e - - - 0x13, 0x70,
-0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, \\\\ - p r o x y - a 0x75, 0x74, 0x68,
-0x6f, 0x72, 0x69, 0x7a, 0x61, \\\\ u t h o r i z a 0x74, 0x69, 0x6f, 0x6e,
-0x00, 0x00, 0x00, 0x05, \\\\ t i o n - - - - 0x72, 0x61, 0x6e, 0x67, 0x65,
-0x00, 0x00, 0x00, \\\\ r a n g e - - - 0x07, 0x72, 0x65, 0x66, 0x65, 0x72,
-0x65, 0x72, \\\\ - r e f e r e r 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74,
-0x72, \\\\ - - - - r e t r 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00,
-\\\\ y - a f t e r - 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, \\\\ - -
-- s e r v e 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00, \\\\ r - - - - t
-e - 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, \\\\ - - - t r a i l
-0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72, \\\\ e r - - - - t r 0x61,
-0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, \\\\ a n s f e r - e 0x6e, 0x63,
-0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00, \\\\ n c o d i n g - 0x00, 0x00, 0x07,
-0x75, 0x70, 0x67, 0x72, 0x61, \\\\ - - - u p g r a 0x64, 0x65, 0x00, 0x00,
-0x00, 0x0a, 0x75, 0x73, \\\\ d e - - - - u s 0x65, 0x72, 0x2d, 0x61, 0x67,
-0x65, 0x6e, 0x74, \\\\ e r - a g e n t 0x00, 0x00, 0x00, 0x04, 0x76, 0x61,
-0x72, 0x79, \\\\ - - - - v a r y 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61,
-0x00, \\\\ - - - - v i a - 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69,
-\\\\ - - - w a r n i 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77, \\\\ n g
-- - - - w w 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, \\\\ w - a u t h
-e n 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, \\\\ t i c a t e - -
-0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, \\\\ - - m e t h o d 0x00,
-0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, \\\\ - - - - g e t - 0x00, 0x00,
-0x06, 0x73, 0x74, 0x61, 0x74, 0x75, \\\\ - - - s t a t u 0x73, 0x00, 0x00,
-0x00, 0x06, 0x32, 0x30, 0x30, \\\\ s - - - - 2 0 0 0x20, 0x4f, 0x4b, 0x00,
-0x00, 0x00, 0x07, 0x76, \\\\ - O K - - - - v 0x65, 0x72, 0x73, 0x69, 0x6f,
-0x6e, 0x00, 0x00, \\\\ e r s i o n - - 0x00, 0x08, 0x48, 0x54, 0x54, 0x50,
-0x2f, 0x31, \\\\ - - H T T P - 1 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75,
-0x72, \\\\ - 1 - - - - u r 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62,
-\\\\ l - - - - p u b 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73, \\\\ l i
-c - - - - s 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69, \\\\ e t - c o o
-k i 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65, \\\\ e - - - - k e e
-0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00, \\\\ p - a l i v e - 0x00,
-0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, \\\\ - - - o r i g i 0x6e, 0x31,
-0x30, 0x30, 0x31, 0x30, 0x31, 0x32, \\\\ n 1 0 0 1 0 1 2 0x30, 0x31, 0x32,
-0x30, 0x32, 0x32, 0x30, 0x35, \\\\ 0 1 2 0 2 2 0 5 0x32, 0x30, 0x36, 0x33,
-0x30, 0x30, 0x33, 0x30, \\\\ 2 0 6 3 0 0 3 0 0x32, 0x33, 0x30, 0x33, 0x33,
-0x30, 0x34, 0x33, \\\\ 2 3 0 3 3 0 4 3 0x30, 0x35, 0x33, 0x30, 0x36, 0x33,
-0x30, 0x37, \\\\ 0 5 3 0 6 3 0 7 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34,
-0x30, \\\\ 4 0 2 4 0 5 4 0 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34,
-\\\\ 6 4 0 7 4 0 8 4 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31, \\\\ 0 9
-4 1 0 4 1 1 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31, \\\\ 4 1 2 4 1 3
-4 1 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34, \\\\ 4 4 1 5 4 1 6 4
-0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34, \\\\ 1 7 5 0 2 5 0 4 0x35,
-0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e, \\\\ 5 0 5 2 0 3 - N 0x6f, 0x6e,
-0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, \\\\ o n - A u t h o 0x72, 0x69, 0x74,
-0x61, 0x74, 0x69, 0x76, 0x65, \\\\ r i t a t i v e 0x20, 0x49, 0x6e, 0x66,
-0x6f, 0x72, 0x6d, 0x61, \\\\ - I n f o r m a 0x74, 0x69, 0x6f, 0x6e, 0x32,
-0x30, 0x34, 0x20, \\\\ t i o n 2 0 4 - 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e,
-0x74, 0x65, \\\\ N o - C o n t e 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d,
-0x6f, \\\\ n t 3 0 1 - M o 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d,
-\\\\ v e d - P e r m 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34, \\\\ a n
-e n t l y 4 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, \\\\ 0 0 - B a d
-- R 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30, \\\\ e q u e s t 4 0
-0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, \\\\ 1 - U n a u t h 0x6f,
-0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30, \\\\ o r i z e d 4 0 0x33, 0x20,
-0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, \\\\ 3 - F o r b i d 0x64, 0x65, 0x6e,
-0x34, 0x30, 0x34, 0x20, 0x4e, \\\\ d e n 4 0 4 - N 0x6f, 0x74, 0x20, 0x46,
-0x6f, 0x75, 0x6e, 0x64, \\\\ o t - F o u n d 0x35, 0x30, 0x30, 0x20, 0x49,
-0x6e, 0x74, 0x65, \\\\ 5 0 0 - I n t e 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53,
-0x65, 0x72, \\\\ r n a l - S e r 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72,
-0x6f, \\\\ v e r - E r r o 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74,
-\\\\ r 5 0 1 - N o t 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, \\\\ - I
-m p l e m e 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20, \\\\ n t e d 5 0
-3 - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, \\\\ S e r v i c e -
-0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, \\\\ U n a v a i l a 0x62,
-0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46, \\\\ b l e J a n - F 0x65, 0x62,
-0x20, 0x4d, 0x61, 0x72, 0x20, 0x41, \\\\ e b - M a r - A 0x70, 0x72, 0x20,
-0x4d, 0x61, 0x79, 0x20, 0x4a, \\\\ p r - M a y - J 0x75, 0x6e, 0x20, 0x4a,
-0x75, 0x6c, 0x20, 0x41, \\\\ u n - J u l - A 0x75, 0x67, 0x20, 0x53, 0x65,
-0x70, 0x74, 0x20, \\\\ u g - S e p t - 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f,
-0x76, 0x20, \\\\ O c t - N o v - 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a,
-0x30, \\\\ D e c - 0 0 - 0 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e,
-\\\\ 0 - 0 0 - M o n 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, \\\\ - -
-T u e - - W 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c, \\\\ e d - - T h
-u - 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, \\\\ - F r i - - S a
-0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, \\\\ t - - S u n - - 0x47,
-0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b, \\\\ G M T c h u n k 0x65, 0x64,
-0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, \\\\ e d - t e x t - 0x68, 0x74, 0x6d,
-0x6c, 0x2c, 0x69, 0x6d, 0x61, \\\\ h t m l - i m a 0x67, 0x65, 0x2f, 0x70,
-0x6e, 0x67, 0x2c, 0x69, \\\\ g e - p n g - i 0x6d, 0x61, 0x67, 0x65, 0x2f,
-0x6a, 0x70, 0x67, \\\\ m a g e - j p g 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65,
-0x2f, 0x67, \\\\ - i m a g e - g 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c,
-0x69, \\\\ i f - a p p l i 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78,
-\\\\ c a t i o n - x 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, \\\\ m l
-- a p p l i 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, \\\\ c a t i o n
-- x 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c, \\\\ h t m l - x m l
-0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, \\\\ - t e x t - p l 0x61,
-0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74, \\\\ a i n - t e x t 0x2f, 0x6a,
-0x61, 0x76, 0x61, 0x73, 0x63, 0x72, \\\\ - j a v a s c r 0x69, 0x70, 0x74,
-0x2c, 0x70, 0x75, 0x62, 0x6c, \\\\ i p t - p u b l 0x69, 0x63, 0x70, 0x72,
-0x69, 0x76, 0x61, 0x74, \\\\ i c p r i v a t 0x65, 0x6d, 0x61, 0x78, 0x2d,
-0x61, 0x67, 0x65, \\\\ e m a x - a g e 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c,
-0x64, 0x65, \\\\ - g z i p - d e 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73,
-0x64, \\\\ f l a t e - s d 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65,
-\\\\ c h c h a r s e 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63, \\\\ t -
-u t f - 8 c 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69, \\\\ h a r s e t
-- i 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, \\\\ s o - 8 8 5 9 -
-0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a, \\\\ 1 - u t f - - - 0x2c,
-0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e \\\\ - e n q - 0 - };
-
-The entire contents of the name/value header block is compressed using zlib.
-There is a single zlib stream for all name value pairs in one direction on a
-connection. SPDY uses a SYNC_FLUSH between each compressed frame.
-
-Implementation notes: the compression engine can be tuned to favor speed or
-size. Optimizing for size increases memory use and CPU consumption. Because
-header blocks are generally small, implementors may want to reduce the
-window-size of the compression engine from the default 15bits (a 32KB window) to
-more like 11bits (a 2KB window). The exact setting is chosen by the compressor,
-the decompressor will work with any setting.
-
----
-
-# 3. HTTP Layering over SPDY
-
-SPDY is intended to be as compatible as possible with current web-based
-applications. This means that, from the perspective of the server business logic
-or application API, the features of HTTP are unchanged. To achieve this, all of
-the application request and response header semantics are preserved, although
-the syntax of conveying those semantics has changed. Thus, the rules from the
-[HTTP/1.1 specification in
-RFC2616](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2616)
-apply with the changes in the sections below.
-
-## 3.1 Connection Management
-
-Clients SHOULD NOT open more than one SPDY session to a given
-[origin](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-concurrently.
-
-Note that it is possible for one SPDY session to be finishing (e.g. a GOAWAY
-message has been sent, but not all streams have finished), while another SPDY
-session is starting.
-
-### 3.1.1 Use of GOAWAY
-
-SPDY provides a GOAWAY message which can be used when closing a connection from
-either the client or server. Without a server GOAWAY message, HTTP has a race
-condition where the client sends a request (a new SYN_STREAM) just as the server
-is closing the connection, and the client cannot know if the server received the
-stream or not. By using the last-stream-id in the GOAWAY, servers can indicate
-to the client if a request was processed or not.
-
-Note that some servers will choose to send the GOAWAY and immediately terminate
-the connection without waiting for active streams to finish. The client will be
-able to determine this because SPDY streams are determinstically closed. This
-abrupt termination will force the client to heuristically decide whether to
-retry the pending requests. Clients always need to be capable of dealing with
-this case because they must deal with accidental connection termination cases,
-which are the same as the server never having sent a GOAWAY.
-
-More sophisticated servers will use GOAWAY to implement a graceful teardown.
-They will send the GOAWAY and provide some time for the active streams to finish
-before terminating the connection.
-
-If a SPDY client closes the connection, it should also send a GOAWAY message.
-This allows the server to know if any server-push streams were received by the
-client.
-
-If the endpoint closing the connection has not received any SYN_STREAMs from the
-remote, the GOAWAY will contain a last-stream-id of 0.
-
-## 3.2 HTTP Request/Response
-
-### 3.2.1 Request
-
-The client initiates a request by sending a SYN_STREAM frame. For requests which
-do not contain a body, the SYN_STREAM frame MUST set the FLAG_FIN, indicating
-that the client intends to send no further data on this stream. For requests
-which do contain a body, the SYN_STREAM will not contain the FLAG_FIN, and the
-body will follow the SYN_STREAM in a series of DATA frames. The last DATA frame
-will set the FLAG_FIN to indicate the end of the body.
-
-The SYN_STREAM Name/Value section will contain all of the HTTP headers which are
-associated with an HTTP request. The header block in SPDY is mostly unchanged
-from today's HTTP header block, with the following differences:
-
-* The first line of the request is unfolded into name/value pairs like
- other HTTP headers and MUST be present:
- * ":method" - the HTTP method for this request (e.g. "GET",
- "POST", "HEAD", etc)
- * ":path" - the url-path for this url with "/" prefixed. (See
- [RFC3986](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC3986)).
- For example, for "http://www.google.com/search?q=dogs" the path
- would be "/search?q=dogs".
- * ":version" - the HTTP version of this request (e.g. "HTTP/1.1")
-* In addition, the following two name/value pairs must also be present
- in every request:
- * ":host" - the hostport (See
- [RFC1738](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC1738))
- portion of the URL for this request (e.g.
- "www.google.com:1234"). This header is the same as the HTTP
- 'Host' header.
- * ":scheme" - the scheme portion of the URL for this request (e.g.
- "https"))
-* Header names are all lowercase.
-* The Connection, Host, Keep-Alive, Proxy-Connection, and
- Transfer-Encoding headers are not valid and MUST not be sent.
-* User-agents MUST support gzip compression. Regardless of the
- Accept-Encoding sent by the user-agent, the server may always send
- content encoded with gzip or deflate encoding.
-* If a server receives a request where the sum of the data frame
- payload lengths does not equal the size of the Content-Length
- header, the server MUST return a 400 (Bad Request) error.
-* POST-specific changes:
- * Although POSTs are inherently chunked, POST requests SHOULD also
- be accompanied by a Content-Length header. There are two reasons
- for this: First, it assists with upload progress meters for an
- improved user experience. But second, we know from early
- versions of SPDY that failure to send a content length header is
- incompatible with many existing HTTP server implementations.
- Existing user-agents do not omit the Content-Length header, and
- server implementations have come to depend upon this.
-
-The user-agent is free to prioritize requests as it sees fit. If the user-agent
-cannot make progress without receiving a resource, it should attempt to raise
-the priority of that resource. Resources such as images, SHOULD generally use
-the lowest priority.
-
-If a client sends a SYN_STREAM without all of the method, host, path, scheme,
-and version headers, the server MUST reply with a HTTP 400 Bad Request reply.
-
-### 3.2.2 Response
-
-The server responds to a client request with a SYN_REPLY frame. Symmetric to the
-client's upload stream, server will send data after the SYN_REPLY frame via a
-series of DATA frames, and the last data frame will contain the FLAG_FIN to
-indicate successful end-of-stream. If a response (like a 202 or 204 response)
-contains no body, the SYN_REPLY frame may contain the FLAG_FIN flag to indicate
-no further data will be sent on the stream.
-
-* The response status line is unfolded into name/value pairs like
- other HTTP headers and must be present:
- * ":status" - The HTTP response status code (e.g. "200" or "200
- OK")
- * ":version" - The HTTP response version (e.g. "HTTP/1.1")
-* All header names must be lowercase.
-* The Connection, Keep-Alive, Proxy-Connection, and Transfer-Encoding
- headers are not valid and MUST not be sent.
-* Responses MAY be accompanied by a Content-Length header for advisory
- purposes. (e.g. for UI progress meters)
-* If a client receives a response where the sum of the data frame
- payload lengths does not equal the size of the Content-Length
- header, the client MUST ignore the content length header.
-
-If a client receives a SYN_REPLY without a status or without a version header,
-the client must reply with a RST_STREAM frame indicating a PROTOCOL ERROR.
-
-### 3.2.3 Authentication
-
-When a client sends a request to an origin server that requires authentication,
-the server can reply with a "401 Unauthorized" response, and include a
-WWW-Authenticate challenge header that defines the authentication scheme to be
-used. The client then retries the request with an Authorization header
-appropriate to the specified authentication scheme.
-
-There are four options for proxy authentication, Basic, Digest, NTLM and
-Negotiate (SPNEGO). The first two options were defined in
-[RFC2617](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2617),
-and are stateless. The second two options were developed by Microsoft and
-specified in
-[RFC4559](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC4559),
-and are stateful; otherwise known as multi-round authentication, or connection
-authentication.
-
-#### 3.2.3.1 Stateless Authentication
-
-Stateless Authentication over SPDY is identical to how it is performed over
-HTTP. If multiple SPDY streams are concurrently sent to a single server, each
-will authenticate independently, similar to how two HTTP connections would
-independently authenticate to a proxy server.
-
-#### 3.2.3.2 Stateful Authentication
-
-Unfortunately, the stateful authentication mechanisms were implemented and
-defined in a such a way that directly violates RFC2617 - they do not include a
-"realm" as part of the request. This is problematic in SPDY because it makes it
-impossible for a client to disambiguate two concurrent server authentication
-challenges.
-
-To deal with this case, SPDY servers using Stateful Authentication MUST
-implement one of two changes:
-
-* Servers can add a "realm=&lt;desired realm&gt;" header so that the
- two authentication requests can be disambiguated and run
- concurrently. Unfortunately, given how these mechanisms work, this
- is probably not practical.
-* Upon sending the first stateful challenge response, the server MUST
- buffer and defer all further frames which are not part of completing
- the challenge until the challenge has completed. Completing the
- authentication challenge may take multiple round trips. Once the
- client receives a "401 Authenticate" response for a stateful
- authentication type, it MUST stop sending new requests to the server
- until the authentication has completed by receiving a non-401
- response on at least one stream.
-
-## 3.3 Server Push Transactions
-
-SPDY enables a server to send multiple replies to a client for a single request.
-The rationale for this feature is that sometimes a server knows that it will
-need to send multiple resources in response to a single request. Without server
-push features, the client must first download the primary resource, then
-discover the secondary resource(s), and request them. Pushing of resources
-avoids the round-trip delay, but also creates a potential race where a server
-can be pushing content which a user-agent is in the process of requesting. The
-following mechanics attempt to prevent the race condition while enabling the
-performance benefit.
-
-Browsers receiving a pushed response MUST validate that the server is authorized
-to push the URL using the [browser
-same-origin](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-policy. For example, a SPDY connection to www.foo.com is generally not permitted
-to push a response for www.evil.com.
-
-If the browser accepts a pushed response (e.g. it does not send a RST_STREAM),
-the browser MUST attempt to cache the pushed response in same way that it would
-cache any other response. This means validating the response headers and
-inserting into the cache.
-
-Because pushed responses have no request, they have no request headers
-associated with them. At the framing layer, SPDY pushed streams contain an
-"associated-stream-id" which indicates the requested stream for which the pushed
-stream is related. The pushed stream inherits all of the headers from the
-associated-stream-id with the exception of ":host", ":scheme", and ":path",
-which are provided as part of the pushed response stream headers. The browser
-MUST store these inherited and implied request headers with the cached resource.
-
-Implementation note: With server push, it is theoretically possible for servers
-to push unreasonable amounts of content or resources to the user-agent. Browsers
-MUST implement throttles to protect against unreasonable push attacks.
-
-### 3.3.1 Server implementation
-
-When the server intends to push a resource to the user-agent, it opens a new
-stream by sending a unidirectional SYN_STREAM. The SYN_STREAM MUST include an
-Associated-To-Stream-ID, and MUST set the FLAG_UNIDIRECTIONAL flag. The
-SYN_STREAM MUST include headers for ":scheme", ":host", ":path", which represent
-the URL for the resource being pushed. Subsequent headers may follow in HEADERS
-frames. The purpose of the association is so that the user-agent can
-differentiate which request induced the pushed stream; without it, if the
-user-agent had two tabs open to the same page, each pushing unique content under
-a fixed URL, the user-agent would not be able to differentiate the requests.
-
-The Associated-To-Stream-ID must be the ID of an existing, open stream. The
-reason for this restriction is to have a clear endpoint for pushed content. If
-the user-agent requested a resource on stream 11, the server replies on stream
-11. It can push any number of additional streams to the client before sending a
-FLAG_FIN on stream 11. However, once the originating stream is closed no further
-push streams may be associated with it. The pushed streams do not need to be
-closed (FIN set) before the originating stream is closed, they only need to be
-created before the originating stream closes.
-
-It is illegal for a server to push a resource with the Associated-To-Stream-ID
-of 0.
-
-To minimize race conditions with the client, the SYN_STREAM for the pushed
-resources MUST be sent prior to sending any content which could allow the client
-to discover the pushed resource and request it.
-
-The server MUST only push resources which would have been returned from a GET
-request.
-
-Note: If the server does not have all of the Name/Value Response headers
-available at the time it issues the HEADERS frame for the pushed resource, it
-may later use an additional HEADERS frame to augment the name/value pairs to be
-associated with the pushed stream. The subsequent HEADERS frame(s) must not
-contain a header for ':host', ':scheme', or ':path' (e.g. the server can't
-change the identity of the resource to be pushed). The HEADERS frame must not
-contain duplicate headers with a previously sent HEADERS frame. The server must
-send a HEADERS frame including the scheme/host/port headers before sending any
-data frames on the stream.
-
-### 3.3.2 Client implementation
-
-When fetching a resource the client has 3 possibilities:
-
-* the resource is not being pushed
-* the resource is being pushed, but the data has not yet arrived
-* the resource is being pushed, and the data has started to arrive
-
-When a SYN_STREAM and HEADERS frame which contains an Associated-To-Stream-ID is
-received, the client must not issue GET requests for the resource in the pushed
-stream, and instead wait for the pushed stream to arrive.
-
-If a client receives a server push stream with stream-id 0, it MUST issue a
-session error (Section 2.4.2) with the status code PROTOCOL_ERROR.
-
-When a client receives a SYN_STREAM from the server without a the ':host',
-':scheme', and ':path' headers in the Name/Value section, it MUST reply with a
-RST_STREAM with error code HTTP_PROTOCOL_ERROR.
-
-To cancel individual server push streams, the client can issue a stream error
-(Section 2.4.2) with error code CANCEL. Upon receipt, the server MUST stop
-sending on this stream immediately (this is an Abrupt termination).
-
-To cancel all server push streams related to a request, the client may issue a
-stream error (Section 2.4.2) with error code CANCEL on the associated-stream-id.
-By cancelling that stream, the server MUST immediately stop sending frames for
-any streams with in-association-to for the original stream.
-
-If the server sends a HEADER frame containing duplicate headers with a previous
-HEADERS frame for the same stream, the client must issue a stream error (Section
-2.4.2) with error code PROTOCOL ERROR.
-
-If the server sends a HEADERS frame after sending a data frame for the same
-stream, the client MAY ignore the HEADERS frame. Ignoring the HEADERS frame
-after a data frame prevents handling of HTTP's trailing headers
-(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.40).
-
----
-
-# 4. Design Rationale and Notes
-
-Authors' notes: The notes in this section have no bearing on the SPDY protocol
-as specified within this document, and none of these notes should be considered
-authoritative about how the protocol works. However, these notes may prove
-useful in future debates about how to resolve protocol ambiguities or how to
-evolve the protocol going forward. They may be removed before the final draft.
-
-## 4.1 Separation of Framing Layer and Application Layer
-
-Readers may note that this specification sometimes blends the framing layer
-(Section 2) with requirements of a specific application - HTTP (Section 3). This
-is reflected in the request/response nature of the streams, the definition of
-the HEADERS and compression contexts which are very similar to HTTP, and other
-areas as well.
-
-This blending is intentional - the primary goal of this protocol is to create a
-low-latency protocol for use with HTTP. Isolating the two layers is convenient
-for description of the protocol and how it relates to existing HTTP
-implementations. However, the ability to reuse the SPDY framing layer is a non
-goal.
-
-## 4.2 Error handling - Framing Layer
-
-Error handling at the SPDY layer splits errors into two groups: Those that
-affect an individual SPDY stream, and those that do not.
-
-When an error is confined to a single stream, but general framing is in tact,
-SPDY attempts to use the RST_STREAM as a mechanism to invalidate the stream but
-move forward without aborting the connection altogether.
-
-For errors occuring outside of a single stream context, SPDY assumes the entire
-session is hosed. In this case, the endpoint detecting the error should initiate
-a connection close.
-
-## 4.3 One Connection Per Domain
-
-SPDY attempts to use fewer connections than other protocols have traditionally
-used. The rationale for this behavior is because it is very difficult to provide
-a consistent level of service (e.g. TCP slow-start), prioritization, or optimal
-compression when the client is connecting to the server through multiple
-channels.
-
-Through lab measurements, we have seen consistent latency benefits by using
-fewer connections from the client. The overall number of packets sent by SPDY
-can be as much as 40% less than HTTP. Handling large numbers of concurrent
-connections on the server also does become a scalability problem, and SPDY
-reduces this load.
-
-The use of multiple connections is not without benefit, however. Because SPDY
-multiplexes multiple, independent streams onto a single stream, it creates a
-potential for head-of-line blocking problems at the transport level. In tests so
-far, the negative effects of head-of-line blocking (especially in the presence
-of packet loss) is outweighed by the benefits of compression and prioritization.
-
-## 4.4 Fixed vs Variable Length Fields
-
-SPDY favors use of fixed length 32bit fields in cases where smaller, variable
-length encodings could have been used. To some, this seems like a tragic waste
-of bandwidth. SPDY choses the simple encoding for speed and simplicity.
-
-The goal of SPDY is to reduce latency on the network. The overhead of SPDY
-frames is generally quite low. Each data frame is only an 8 byte overhead for a
-1452 byte payload (~0.6%). At the time of this writing, bandwidth is already
-plentiful, and there is a strong trend indicating that bandwidth will continue
-to increase. With an average worldwide bandwidth of 1Mbps, and assuming that a
-variable length encoding could reduce the overhead by 50%, the latency saved by
-using a variable length encoding would be less than 100 nanoseconds. More
-interesting are the effects when the larger encodings force a packet boundary,
-in which case a round-trip could be induced. However, by addressing other
-aspects of SPDY and TCP interactions, we believe this is completely mitigated.
-
-## 4.5 Compression Context(s)
-
-When isolating the compression contexts used for communicating with multiple
-origins, we had a few choices to make. We could have maintained a map (or list)
-of compression contexts usable for each origin. The basic case is easy - each
-HEADERS frame would need to identify the context to use for that frame. However,
-compression contexts are not cheap, so the lifecycle of each context would need
-to be bounded. For proxy servers, where we could churn through many contexts,
-this would be a concern. We considered using a static set of contexts, say 16 of
-them, which would bound the memory use. We also considered dynamic contexts,
-which could be created on the fly, and would need to be subsequently destroyed.
-All of these are complicated, and ultimately we decided that such a mechanism
-creates too many problems to solve.
-
-Alternatively, we've chosen the simple approach, which is to simply provide a
-flag for resetting the compression context. For the common case (no proxy), this
-fine because most requests are to the same origin and we never need to reset the
-context. For cases where we are using two different origins over a single SPDY
-session, we simply reset the compression state between each transition.
-
-## 4.6 Unidirectional streams
-
-Many readers notice that unidirectional streams are both a bit confusing in
-concept and also somewhat redundant. If the recipient of a stream doesn't wish
-to send data on a stream, it could simply send a SYN_REPLY with the FLAG_FIN bit
-set. The FLAG_UNIDIRECTIONAL is, therefore, not necessary.
-
-It is true that we don't need the UNIDIRECTIONAL markings. It is added because
-it avoids the recipient of pushed streams from needing to send a set of empty
-frames (e.g. the SYN_STREAM w/ FLAG_FIN) which otherwise serve no purpose.
-
-## 4.7 Data Compression
-
-Generic compression of data portion of the streams (as opposed to compression of
-the headers) without knowing the content of the stream is redundant. There is no
-value in compressing a stream which is already compressed. Because of this, SPDY
-initially allowed data compression to be optional. We included it because study
-of existing websites shows that many sites are not using compression as they
-should, and users suffer because of it. We wanted a mechanism where, at the SPDY
-layer, site administrators could simply force compression - it is better to
-compress twice than to not compress.
-
-Overall, however, with this feature being optional and sometimes redundant, it
-was unclear if it was useful at all. We removed it from the specification.
-
-## 4.8 Server Push
-
-A subtle but important point is that server push streams must be declared before
-the associated stream is closed. The reason for this is so that proxies have a
-lifetime for which they can discard information about previous streams. If a
-pushed stream could associate itself with an already-closed stream, then
-endpoints would not have a specific lifecycle for when they could disavow
-knowledge of the streams which went before.
-
----
-
-# 5. Security Considerations
-
-## 5.1 Use of Same-origin constraints
-
-This specification uses the [same-origin
-policy](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-in all cases where verification of content is required.
-
-## 5.2 HTTP Headers and SPDY Headers
-
-At the application level, HTTP uses name/value pairs in its headers. Because
-SPDY merges the existing HTTP headers with SPDY headers, there is a possibility
-that some HTTP applications already use a particular header name. To avoid any
-conflicts, all headers introduced for layering HTTP over SPDY are prefixed with
-":". ":" is not a valid sequence in HTTP header naming, preventing any possible
-conflict.
-
-## 5.3 Cross-Protocol Attacks
-
-By utilizing TLS, we believe that SPDY introduces no new cross-protocol attacks.
-TLS encrypts the contents of all transmission (except the handshake itself),
-making it difficult for attackers to control the data which could be used in a
-cross-protocol attack.
-
-## 5.4 Server Push Implicit Headers
-
-Pushed resources do not have an associated request. In order for existing HTTP
-cache control validations (such as the Vary header) to work, however, all cached
-resources must have a set of request headers. For this reason, browsers MUST be
-careful to inherit request headers from the associated stream for the push. This
-includes the 'Cookie' header.
-
----
-
-# 6. Privacy Considerations
-
-## 6.1 Long Lived Connections
-
-SPDY aims to keep connections open longer between clients and servers in order
-to reduce the latency when a user makes a request. The maintenance of these
-connections over time could be used to expose private information. For example,
-a user using a browser hours after the previous user stopped using that browser
-may be able to learn about what the previous user was doing. This is a problem
-with HTTP in its current form as well, however the short lived connections make
-it less of a risk.
-
-## 6.2 SETTINGS frame
-
-The SPDY SETTINGS frame allows servers to store out-of-band transmitted
-information about the communication between client and server on the client.
-Although this is intended only to be used to reduce latency, renegade servers
-could use it as a mechanism to store identifying information about the client in
-future requests.
-
-Clients implementing privacy modes, such as Google Chrome's "incognito mode",
-may wish to disable client-persisted SETTINGS storage.
-
-Clients MUST clear persisted SETTINGS information when clearing the cookies.
-
-TODO: Put range maximums on each type of setting to limit inappropriate uses.
-
----
-
-# 7. Incompatibilities with SPDY draft #3
-
-Here is a list of the major changes between this draft and draft #3.
-
-* Revision of flow control to include session-level flow control.
-* Removal of CREDENTIAL frame and associated error codes.
-* GOAWAY clarified to ensure that SETTINGS and GOAWAY remain
- orthogonal.
-
----
-
-# 8. Requirements Notation
-
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
-"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
-interpreted as described in [RFC
-2119](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2119).
-
----
-
-# 9. Acknowledgements
-
-Many individuals have contributed to the design and evolution of SPDY: Adam
-Langley, Wan-Teh Chang, Jim Morrison, Mark Nottingham, Alyssa Wilk, Costin
-Manolache, William Chan, Vitaliy Lvin, Joe Chan, Adam Barth, Ryan Hamilton,
-Gavin Peters, Kent Alstad, Kevin Lindsay, Paul Amer, Fan Yang, Jonathan
-Leighton, Hasan Khalil, Ryan
-
----
-
-# 10. Normative References
-
-<table>
-<tr>
-<td><b>[TLSNPN]</b></td>
-<td>Langley, A., “<a href="http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01">TLS Next Protocol Negotiation</a>”, &lt;<a href="http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01">http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01</a>&gt;.</td>
-</tr>
-<tr>
-<td><b>[ASCII]</b></td>
-<td>“US-ASCII. Coded Character Set - 7-Bit American Standard Code for Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986.”.</td>
-</tr>
-<tr>
-<td><b>[UDELCOMPRESSION]</b></td>
-<td>Yang, F., Amer, P., and J. Leighton, “<a href="http://www.eecis.udel.edu/~amer/PEL/poc/pdf/SPDY-Fan.pdf">A Methodology to Derive SPDY’s Initial Dictionary for Zlib Compression</a>”, &lt;<a href="http://www.eecis.udel.edu/~amer/PEL/poc/pdf/SPDY-Fan.pdf">http://www.eecis.udel.edu/~amer/PEL/poc/pdf/SPDY-Fan.pdf</a>&gt;.</td>
-</tr>
-</table>
-
----
-
-# 11. Errata
-
-1. Section 2.6.6 originally listed INTERNAL_ERROR as status code 11.
-
----
-
-# Authors' Addresses
-
-Mike Belshe Twist EMail:
-[mbelshe@chromium.org](mailto:mbelshe@chromium.org)Roberto Peon Google, Inc
-EMail: [fenix@google.com](mailto:fenix@google.com) \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-2/index.md b/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-2/index.md
deleted file mode 100644
index fbefb669937..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3-2/index.md
+++ /dev/null
@@ -1,1711 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/spdy-protocol
- - SPDY Protocol
-page_name: spdy-protocol-draft3-2
-title: SPDY Protocol - Draft 3.2
----
-
-[TOC]
-
-# 1. Overview
-
-One of the bottlenecks of HTTP implementations is that HTTP relies on multiple
-connections for concurrency. This causes several problems, including additional
-round trips for connection setup, slow-start delays, and connection rationing by
-the client, where it tries to avoid opening too many connections to any single
-server. HTTP pipelining helps some, but only achieves partial multiplexing. In
-addition, pipelining has proven non-deployable in existing browsers due to
-intermediary interference.
-
-SPDY adds a framing layer for multiplexing multiple, concurrent streams across a
-single TCP connection (or any reliable transport stream). The framing layer is
-optimized for HTTP-like request-response streams, such that applications which
-run over HTTP today can work over SPDY with little or no change on behalf of the
-web application writer.
-
-The SPDY session offers four improvements over HTTP:
-
-* Multiplexed requests: There is no limit to the number of requests
- that can be issued concurrently over a single SPDY connection.
-* Prioritized requests: Clients can request certain resources to be
- delivered first. This avoids the problem of congesting the network
- channel with non-critical resources when a high-priority request is
- pending.
-* Compressed headers: Clients today send a significant amount of
- redundant data in the form of HTTP headers. Because a single web
- page may require 50 or 100 subrequests, this data is significant.
-* Server pushed streams: Server Push enables content to be pushed from
- servers to clients without a request.
-
-SPDY attempts to preserve the existing semantics of HTTP. All features such as
-cookies, ETags, Vary headers, Content-Encoding negotiations, etc work as they do
-with HTTP; SPDY only replaces the way the data is written to the network.
-
-## 1.1 Document Organization
-
-The SPDY Specification is split into two parts: a framing layer (Section 2),
-which multiplexes a TCP connection into independent, length-prefixed frames, and
-an HTTP layer (Section 3), which specifies the mechanism for overlaying HTTP
-request/response pairs on top of the framing layer. While some of the framing
-layer concepts are isolated from the HTTP layer, building a generic framing
-layer has not been a goal. The framing layer is tailored to the needs of the
-HTTP protocol and server push.
-
-## 1.2 Definitions
-
-* client: The endpoint initiating the SPDY session.
-* connection: A transport-level connection between two endpoints.
-* endpoint: Either the client or server of a connection.
-* frame: A header-prefixed sequence of bytes sent over a SPDY session.
-* server: The endpoint which did not initiate the SPDY session.
-* session: A synonym for a connection.
-* session error: An error on the SPDY session.
-* stream: A bi-directional flow of bytes across a virtual channel
- within a SPDY session.
-* stream error: An error on an individual SPDY stream.
-
----
-
-# 2. SPDY Framing Layer
-
-## 2.1 Session (Connections)
-
-The SPDY framing layer (or "session") runs atop a reliable transport layer such
-as TCP. The client is the TCP connection initiator. SPDY connections are
-persistent connections.
-
-For best performance, it is expected that clients will not close open
-connections until the user navigates away from all web pages referencing a
-connection, or until the server closes the connection. Servers are encouraged to
-leave connections open for as long as possible, but can terminate idle
-connections if necessary. When either endpoint closes the transport-level
-connection, it MUST first send a GOAWAY (Section 2.6.6) frame so that the
-endpoints can reliably determine if requests finished before the close.
-
-## 2.2 Framing
-
-Once the connection is established, clients and servers exchange framed
-messages. There are two types of frames: control frames (Section 2.2.1) and data
-frames (Section 2.2.2). Frames always have a common header which is 8 bytes in
-length.
-
-The first bit is a control bit indicating whether a frame is a control frame or
-data frame. Control frames carry a version number, a frame type, flags, and a
-length. Data frames contain the stream ID, flags, and the length for the payload
-carried after the common header. The simple header is designed to make reading
-and writing of frames easy.
-
-All integer values, including length, version, and type, are in network byte
-order. SPDY does not enforce alignment of types in dynamically sized frames.
-
-### 2.2.1 Control frames
-
-+----------------------------------+ |C| Version(15bits) | Type(16bits) |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Data |
-+----------------------------------+
-
-Control bit: The 'C' bit is a single bit indicating if this is a control
-message. For control frames this value is always 1.
-
-Version: The version number of the SPDY protocol. This document describes SPDY
-version 3.1, which is represented as version 3.
-
-Type: The type of control frame. See Control Frames (Section 2.6) for the
-complete list of control frames.
-
-Flags: Flags related to this frame. Flags for control frames and data frames are
-different.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field.
-
-Data: data associated with this control frame. The format and length of this
-data is controlled by the control frame type.
-
-Control frame processing requirements:
-
-* Note that full length control frames (16MB) can be large for
- implementations running on resource-limited hardware. In such cases,
- implementations MAY limit the maximum length frame supported.
- However, all implementations MUST be able to receive control frames
- of at least 8192 octets in length.
-
-### 2.2.2 Data frames
-
-+-------------------------------------+ |C| Stream-ID (31bits) |
-+-------------------------------------+ | Flags (8) | Length (24 bits) |
-+-------------------------------------+ |\[Pad High (8)\]|\[Pad Low (8)\]|Data
-(\*)| +-------------------------------------+ | Data (\*) |
-+-------------------------------------+ | Padding (\*) |
-+-------------------------------------+
-
-Control bit: For data frames this value is always 0.
-
-Stream-ID: A 31-bit value identifying the stream.
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - signifies that this frame represents the last
- frame to be transmitted on this stream. See Stream Close (Section
- 2.3.7) below.
-* 0x04 = PAD_LOW - bit 3 being set indicates that the Pad Low field is
- present.
-* 0x08 = PAD_HIGH - bit 4 being set indicates that the Pad High field
- is present. This bit MUST NOT be set unless the PAD_LOW flag is also
- set.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a data frame is 8 bytes + length. It is valid to
-have a zero-length data frame.
-
-Pad High: An 8-bit field containing an amount of padding in units of 256 octets.
-This field is optional and is only present if the PAD_HIGH flag is set. This
-field, in combination with Pad Low, determines how much padding there is on a
-frame.
-
-Pad Low: An 8-bit field containing an amount of padding in units of single
-octets. This field is optional and is only present if the PAD_LOW flag is set.
-This field, in combination with Pad High, determines how much padding there is
-on a frame.
-
-Data: The variable-length data payload; the length was defined in the length
-field.
-
-Padding: Padding octets that contain no application semantic value. Padding
-octets MUST be set to zero when sending and ignored when receiving.
-
-Data frame processing requirements:
-
-* If an endpoint receives a data frame for a stream-id which is not
- open and the endpoint has not sent a GOAWAY (Section 2.6.6) frame,
- it MUST issue a stream error (Section 2.4.2) with the error code
- INVALID_STREAM for the stream-id.
-* If the endpoint which created the stream receives a data frame
- before receiving a SYN_REPLY on that stream, it is a protocol error,
- and the recipient MUST issue a stream error (Section 2.4.2) with the
- status code PROTOCOL_ERROR for the stream-id.
-* Implementors note: If an endpoint receives multiple data frames for
- invalid stream-ids, it MAY close the session.
-* Padding is not excluded from flow control.
-* The total number of padding octets is determined by multiplying the
- value of the Pad High field by 256 and adding the value of the Pad
- Low field. Both Pad High and Pad Low fields assume a value of zero
- if absent. If the length of the padding is greater than the length
- of the remainder of the frame payload, the recipient MUST treat this
- as a session error of type PROTOCOL_ERROR.
-* Note: A frame can be increased in size by one octet by including a
- Pad Low field with a value of zero.
-* Use of padding is a security feature; as such, its use demands some
- care, see Section 5.5.
-
-## 2.3 Streams
-
-Streams are independent sequences of bi-directional data divided into frames
-with several properties:
-
-* Streams may be created by either the client or server.
-* Streams optionally carry a set of name/value header pairs.
-* Streams can concurrently send data interleaved with other streams.
-* Streams may be cancelled.
-
-### 2.3.1 Stream frames
-
-SPDY defines 3 control frames to manage the lifecycle of a stream:
-
-* SYN_STREAM - Open a new stream
-* SYN_REPLY - Remote acknowledgement of a new, open stream
-* RST_STREAM - Close a stream
-
-### 2.3.2 Stream creation
-
-A stream is created by sending a control frame with the type set to SYN_STREAM
-(Section 2.6.1). If the server is initiating the stream, the Stream-ID must be
-even. If the client is initiating the stream, the Stream-ID must be odd. 0 is
-not a valid Stream-ID. Stream-IDs from each side of the connection must increase
-monotonically as new streams are created. E.g. Stream 2 may be created after
-stream 3, but stream 7 must not be created after stream 9. Stream IDs do not
-wrap: when a client or server cannot create a new stream id without exceeding a
-31 bit value, it MUST NOT create a new stream.
-
-The stream-id MUST increase with each new stream. If an endpoint receives a
-SYN_STREAM with a stream id which is less than any previously received
-SYN_STREAM, it MUST issue a session error (Section 2.4.1) with the status
-PROTOCOL_ERROR.
-
-It is a protocol error to send two SYN_STREAMs with the same stream-id. If a
-recipient receives a second SYN_STREAM for the same stream, it MUST issue a
-stream error Section (2.4.2) with the status code PROTOCOL_ERROR.
-
-Upon receipt of a SYN_STREAM, the recipient can reject the stream by sending a
-stream error (Section 2.4.2) with the error code REFUSED_STREAM. Note, however,
-that the creating endpoint may have already sent additional frames for that
-stream which cannot be immediately stopped.
-
-Once the stream is created, the creator may immediately send HEADERS or DATA
-frames for that stream, without needing to wait for the recipient to
-acknowledge.
-
-#### 2.3.2.1 Unidirectional streams
-
-When an endpoint creates a stream with the FLAG_UNIDIRECTIONAL flag set, it
-creates a unidirectional stream which the creating endpoint can use to send
-frames, but the receiving endpoint cannot. The receiving endpoint is implicitly
-already in the half-closed (Section 2.3.6) state.
-
-#### 2.3.2.2 Bidirectional streams
-
-SYN_STREAM frames which do not use the FLAG_UNIDIRECTIONAL flag are
-bidirectional streams. Both endpoints can send data on a bi-directional stream.
-
-### 2.3.3 Stream priority
-
-The creator of a stream assigns a priority for that stream. Priority is
-represented as an integer from 0 to 7. 0 represents the highest priority and 7
-represents the lowest priority.
-
-The sender and recipient SHOULD use best-effort to process streams in the order
-of highest priority to lowest priority.
-
-### 2.3.4 Stream headers
-
-Streams carry optional sets of name/value pair headers which carry metadata
-about the stream. After the stream has been created, and as long as the sender
-is not closed (Section 2.3.7) or half-closed (Section 2.3.6), each side may send
-HEADERS frame(s) containing the header data. Header data can be sent in multiple
-HEADERS frames, and HEADERS frames may be interleaved with data frames.
-
-### 2.3.5 Stream data exchange
-
-Once a stream is created, it can be used to send arbitrary amounts of data.
-Generally this means that a series of data frames will be sent on the stream
-until a frame containing the FLAG_FIN flag is set. The FLAG_FIN can be set on a
-SYN_STREAM (Section 2.6.1), SYN_REPLY (Section 2.6.2), HEADERS (Section 2.6.7)
-or a DATA (Section 2.2.2) frame. Once the FLAG_FIN has been sent, the stream is
-considered to be half-closed.
-
-### 2.3.6 Stream half-close
-
-When one side of the stream sends a frame with the FLAG_FIN flag set, the stream
-is half-closed from that endpoint. The sender of the FLAG_FIN MUST NOT send
-further frames on that stream. When both sides have half-closed, the stream is
-closed. Note that WINDOW_UPDATE is metadata about a stream, and is not part of
-any stream, and as such is still allowed when a stream is half-closed.
-
-If an endpoint receives a data frame after the stream is half-closed from the
-sender (e.g. the endpoint has already received a prior frame for the stream with
-the FIN flag set), it MUST send a RST_STREAM to the sender with the status
-STREAM_ALREADY_CLOSED.
-
-### 2.3.7 Stream close
-
-There are 3 ways that streams can be terminated:
-
-* Normal termination: Normal stream termination occurs when both
- sender and recipient have half-closed the stream by sending a
- FLAG_FIN.
-* Abrupt termination: Either the client or server can send a
- RST_STREAM control frame at any time. A RST_STREAM contains an error
- code to indicate the reason for failure. When a RST_STREAM is sent
- from the stream originator, it indicates a failure to complete the
- stream and that no further data will be sent on the stream. When a
- RST_STREAM is sent from the stream recipient, the sender, upon
- receipt, should stop sending any data on the stream. The stream
- recipient should be aware that there is a race between data already
- in transit from the sender and the time the RST_STREAM is received.
- See Stream Error Handling (Section 2.4.2)
-* TCP connection teardown: If the TCP connection is torn down while
- un-closed streams exist, then the endpoint must assume that the
- stream was abnormally interrupted and may be incomplete.
-
-If an endpoint receives a data frame after the stream is closed, it must send a
-RST_STREAM to the sender with the status PROTOCOL_ERROR.
-
-## 2.4 Error Handling
-
-The SPDY framing layer has only two types of errors, and they are always handled
-consistently. Any reference in this specification to "issue a session error"
-refers to Section 2.4.1. Any reference to "issue a stream error" refers to
-Section 2.4.2.
-
-### 2.4.1 Session Error Handling
-
-A session error is any error which prevents further processing of the framing
-layer or which corrupts the session compression state. When a session error
-occurs, the endpoint encountering the error MUST first send a GOAWAY (Section
-2.6.6) frame with the stream id of most recently received stream from the remote
-endpoint, and the error code for why the session is terminating. After sending
-the GOAWAY frame, the endpoint MUST close the TCP connection.
-
-Note that the session compression state is dependent upon both endpoints always
-processing all compressed data. If an endpoint partially processes a frame
-containing compressed data without updating compression state properly, future
-control frames which use compression will be always be errored. Implementations
-SHOULD always try to process compressed data so that errors which could be
-handled as stream errors do not become session errors.
-
-Note that because this GOAWAY is sent during a session error case, it is
-possible that the GOAWAY will not be reliably received by the receiving
-endpoint. It is a best-effort attempt to communicate with the remote about why
-the session is going down.
-
-### 2.4.2 Stream Error Handling
-
-A stream error is an error related to a specific stream-id which does not affect
-processing of other streams at the framing layer. Upon a stream error, the
-endpoint MUST send a RST_STREAM (Section 2.6.3) frame which contains the stream
-id of the stream where the error occurred and the error status which caused the
-error. After sending the RST_STREAM, the stream is closed to the sending
-endpoint. After sending the RST_STREAM, if the sender receives any frames other
-than a RST_STREAM for that stream id, it will result in sending additional
-RST_STREAM frames. An endpoint MUST NOT send a RST_STREAM in response to an
-RST_STREAM, as doing so would lead to RST_STREAM loops. Sending a RST_STREAM
-does not cause the SPDY session to be closed.
-
-If an endpoint has multiple RST_STREAM frames to send in succession for the same
-stream-id and the same error code, it MAY coalesce them into a single RST_STREAM
-frame. (This can happen if a stream is closed, but the remote sends multiple
-data frames. There is no reason to send a RST_STREAM for each frame in
-succession).
-
-## 2.5 Data flow
-
-Because TCP provides a single stream of data on which SPDY multiplexes multiple
-logical streams, clients and servers must intelligently interleave data messages
-for concurrent sessions.
-
-## 2.6 Control frame types
-
-### 2.6.1 SYN_STREAM
-
-The SYN_STREAM control frame allows the sender to asynchronously create a stream
-between the endpoints. See Stream Creation (section 2.3.2)
-
-+------------------------------------+ |1| version | 1 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ |X| Associated-To-Stream-ID (31bits) |
-+------------------------------------+ | Pri|Unused | Slot | |
-+-------------------+ | | Number of Name/Value pairs (int32) | &lt;+
-+------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- (Section 2.3.6) state.
-* 0x02 = FLAG_UNIDIRECTIONAL - a stream created with this flag puts
- the recipient in the half-closed (Section 2.3.6) state.
-
-Length: The length is the number of bytes which follow the length field in the
-frame. For SYN_STREAM frames, this is 10 bytes plus the length of the compressed
-Name/Value block.
-
-Stream-ID: The 31-bit identifier for this stream. This stream-id will be used in
-frames which are part of this stream.
-
-Associated-To-Stream-ID: The 31-bit identifier for a stream which this stream is
-associated to. If this stream is independent of all other streams, it should be
-0.
-
-Priority: A 3-bit priority (Section 2.3.3) field.
-
-Unused: 5 bits of unused space, reserved for future use.
-
-Slot: 8 bits of unused space, reserved for future use. Name/Value Header Block:
-A set of name/value pairs carried as part of the SYN_STREAM. see Name/Value
-Header Block (Section 2.6.10).
-
-If an endpoint receives a SYN_STREAM which is larger than the implementation
-supports, it MAY send a RST_STREAM with error code FRAME_TOO_LARGE. All
-implementations MUST support the minimum size limits defined in the Control
-Frames section
-([S](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.1-Control-frames)ection
-2.2.1).
-
-### 2.6.2 SYN_REPLY
-
-SYN_REPLY indicates the acceptance of a stream creation by the recipient of a
-SYN_STREAM frame.
-
-+------------------------------------+ |1| version | 2 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-&lt;+ +------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- (Section 2.3.6) state.
-
-Length: The length is the number of bytes which follow the length field in the
-frame. For SYN_REPLY frames, this is 4 bytes plus the length of the compressed
-Name/Value block.
-
-Stream-ID: The 31-bit identifier for this stream.
-
-If an endpoint receives multiple SYN_REPLY frames for the same active stream ID,
-it MUST issue a stream error (Section 2.4.2) with the error code STREAM_IN_USE.
-
-Name/Value Header Block: A set of name/value pairs carried as part of the
-SYN_STREAM. see Name/Value Header Block (Section 2.6.10).
-
-If an endpoint receives a SYN_REPLY which is larger than the implementation
-supports, it MAY send a RST_STREAM with error code FRAME_TOO_LARGE. All
-implementations MUST support the minimum size limits defined in the Control
-Frames section
-([S](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.1-Control-frames)ection
-2.2.1).
-
-### 2.6.3 RST_STREAM
-
-The RST_STREAM frame allows for abnormal termination of a stream. When sent by
-the creator of a stream, it indicates the creator wishes to cancel the stream.
-When sent by the recipient of a stream, it indicates an error or that the
-recipient did not want to accept the stream, so the stream should be closed.
-
-+----------------------------------+ |1| version | 3 |
-+----------------------------------+ | Flags (8) | 8 |
-+----------------------------------+ |X| Stream-ID (31bits) |
-+----------------------------------+ | Status code |
-+----------------------------------+
-
-Flags: Flags related to this frame. RST_STREAM does not define any flags. This
-value must be 0.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. For RST_STREAM control frames, this value is always 8.
-
-Stream-ID: The 31-bit identifier for this stream.
-
-Status code: (32 bits) An indicator for why the stream is being terminated.The
-following status codes are defined:
-
-* 1 - PROTOCOL_ERROR. This is a generic error, and should only be used
- if a more specific error is not available.
-* 2 - INVALID_STREAM. This is returned when a frame is received for a
- stream which is not active.
-* 3 - REFUSED_STREAM. Indicates that the stream was refused before any
- processing has been done on the stream.
-* 4 - UNSUPPORTED_VERSION. Indicates that the recipient of a stream
- does not support the SPDY version requested.
-* 5 - CANCEL. Used by the creator of a stream to indicate that the
- stream is no longer needed.
-* 6 - INTERNAL_ERROR. This is a generic error which can be used when
- the implementation has internally failed, not due to anything in the
- protocol.
-* 7 - FLOW_CONTROL_ERROR. The endpoint detected that its peer violated
- the flow control protocol.
-* 8 - STREAM_IN_USE. The endpoint received a SYN_REPLY for a stream
- already open.
-* 9 - STREAM_ALREADY_CLOSED. The endpoint received a data or SYN_REPLY
- frame for a stream which is half closed.
-* 10 - deprecated/unused.
-* 11 - FRAME_TOO_LARGE. The endpoint received a frame which this
- implementation could not support. If FRAME_TOO_LARGE is sent for a
- SYN_STREAM, HEADERS, or SYN_REPLY frame without fully processing the
- compressed portion of those frames, then the compression state will
- be out-of-sync with the other endpoint. In this case, senders of
- FRAME_TOO_LARGE MUST close the session.
-* Note: 0 is not a valid status code for a RST_STREAM.
-
-After receiving a RST_STREAM on a stream, the recipient must not send additional
-frames for that stream, and the stream moves into the closed state.
-
-### 2.6.4 SETTINGS
-
-A SETTINGS frame contains a set of id/value pairs for communicating
-configuration data about how the two endpoints may communicate. SETTINGS frames
-can be sent at any time by either endpoint, are optionally sent, and are fully
-asynchronous. When the server is the sender, the sender can request that
-configuration data be persisted by the client across SPDY sessions and returned
-to the server in future communications.
-
-Persistence of SETTINGS ID/Value pairs is done on a per origin/IP pair (the
-"origin" is the set of scheme, host, and port from the URI. See RFC6454). That
-is, when a client connects to a server, and the server persists settings within
-the client, the client SHOULD return the persisted settings on future
-connections to the same origin AND IP address and TCP port. Clients MUST NOT
-request servers to use the persistence features of the SETTINGS frames, and
-servers MUST ignore persistence related flags sent by a client.
-
-+----------------------------------+ |1| version | 4 |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Number of entries |
-+----------------------------------+ | ID/Value Pairs | | ... |
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a SETTINGS message is 4.
-
-Flags: FLAG_SETTINGS_CLEAR_SETTINGS (0x1): When set, the client should clear any
-previously persisted SETTINGS ID/Value pairs. If this frame contains ID/Value
-pairs with the FLAG_SETTINGS_PERSIST_VALUE set, then the client will first clear
-its existing, persisted settings, and then persist the values with the flag set
-which are contained within this frame. Because persistence is only implemented
-on the client, this flag can only be used when the sender is the server.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a SETTINGS frame is 8 bytes + length.
-
-Number of entries: A 32-bit value representing the number of ID/value pairs in
-this message.
-
-Each ID/value pair is as follows:
-
-+----------------------------------+ | Flags(8) | ID (24 bits) |
-+----------------------------------+ | Value (32 bits) |
-+----------------------------------+
-
-Flags: An 8 bit value. Defined Flags:
-
-* FLAG_SETTINGS_PERSIST_VALUE (0x1): When set, the sender of this
- SETTINGS frame is requesting that the recipient persist the ID/Value
- and return it in future SETTINGS frames sent from the sender to this
- recipient. Because persistence is only implemented on the client,
- this flag is only sent by the server.
-* FLAG_SETTINGS_PERSISTED (0x2): When set, the sender is notifying the
- recipient that this ID/Value pair was previously sent to the sender
- by the recipient with the FLAG_SETTINGS_PERSIST_VALUE, and the
- sender is returning it. Because persistence is only implemented on
- the client, this flag is only sent by the client.
-
-ID: 24-bits in network byte order. Defined IDs:
-
-* 1 - SETTINGS_UPLOAD_BANDWIDTH allows the sender to send its expected
- upload bandwidth on this channel. This number is an estimate. The
- value should be the integral number of kilobytes per second that the
- sender predicts as an expected maximum upload channel capacity.
-* 2 - SETTINGS_DOWNLOAD_BANDWIDTH allows the sender to send its
- expected download bandwidth on this channel. This number is an
- estimate. The value should be the integral number of kilobytes per
- second that the sender predicts as an expected maximum download
- channel capacity.
-* 3 - SETTINGS_ROUND_TRIP_TIME allows the sender to send its expected
- round-trip-time on this channel. The round trip time is defined as
- the minimum amount of time to send a control frame from this client
- to the remote and receive a response. The value is represented in
- milliseconds.
-* 4 - SETTINGS_MAX_CONCURRENT_STREAMS allows the sender to inform the
- remote endpoint the maximum number of remote-initiated concurrent
- streams which it will allow. By default there is no limit. For
- implementors it is recommended that this value be no smaller than
- 100.
-* 5 - SETTINGS_CURRENT_CWND allows the sender to inform the remote
- endpoint of the current TCP CWND value.
-* 6 - SETTINGS_DOWNLOAD_RETRANS_RATE allows the sender to inform the
- remote endpoint the retransmission rate (bytes retransmitted / total
- bytes transmitted).
-* 7 - SETTINGS_INITIAL_WINDOW_SIZE allows the sender to inform the
- remote endpoint the initial window size (in bytes) for new streams.
-* 8 - SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE allows the server to
- inform the client if the new size of the client certificate vector.
-
-Value: A 32-bit value.
-
-The message is intentionally extensible for future information which may improve
-client-server communications. The sender does not need to send every type of
-ID/value. It must only send those for which it has accurate values to convey.
-When multiple ID/value pairs are sent, they should be sent in order of lowest id
-to highest id. A single SETTINGS frame MUST not contain multiple values for the
-same ID. If the recipient of a SETTINGS frame discovers multiple values for the
-same ID, it MUST ignore all values except the first one.
-
-A server may send multiple SETTINGS frames containing different ID/Value pairs.
-When the same ID/Value is sent twice, the most recent value overrides any
-previously sent values. If the server sends IDs 1, 2, and 3 with the
-FLAG_SETTINGS_PERSIST_VALUE in a first SETTINGS frame, and then sends IDs 4 and
-5 with the FLAG_SETTINGS_PERSIST_VALUE, when the client returns the persisted
-state on its next SETTINGS frame, it SHOULD send all 5 settings (1, 2, 3, 4, and
-5 in this example) to the server.
-
-### 2.6.5 PING
-
-The PING control frame is a mechanism for measuring a minimal round-trip time
-from the sender. It can be sent from the client or the server. Recipients of a
-PING frame should send an identical frame to the sender as soon as possible (if
-there is other pending data waiting to be sent, PING should take highest
-priority). Each ping sent by a sender should use a unique ID.
-
-+----------------------------------+ |1| version | 6 |
-+----------------------------------+ | 0 (flags) | 4 (length) |
-+----------------------------------| | 32-bit ID |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a PING message is 6.
-
-Length: This frame is always 4 bytes long.
-
-ID: A unique ID for this ping, represented as an unsigned 32 bit value. When the
-client initiates a ping, it must use an odd numbered ID. When the server
-initiates a ping, it must use an even numbered ping. Use of odd/even IDs is
-required in order to avoid accidental looping on PINGs (where each side
-initiates an identical PING at the same time).
-
-Note: If a sender uses all possible PING ids (e.g. has sent all 2^31 possible
-IDs), it can wrap and start re-using IDs.
-
-If a server receives an even numbered PING which it did not initiate, it must
-ignore the PING. If a client receives an odd numbered PING which it did not
-initiate, it must ignore the PING.
-
-### 2.6.6 GOAWAY
-
-The GOAWAY control frame is a mechanism to tell the remote side of the
-connection to stop creating streams on this session. It can be sent from the
-client or the server. Once sent, the sender will not respond to any new
-SYN_STREAMs on this session. Recipients of a GOAWAY frame must not send
-additional streams on this session, although a new session can be established
-for new streams. The purpose of this message is to allow an endpoint to
-gracefully stop accepting new streams (perhaps for a reboot or maintenance),
-while still finishing processing of previously established streams.
-
-There is an inherent race condition between an endpoint sending SYN_STREAMs and
-the remote sending a GOAWAY message. To deal with this case, the GOAWAY contains
-a last-stream-id indicating the stream-id of the last stream which was created
-on the sending endpoint in this session. If the receiver of the GOAWAY sent new
-SYN_STREAMs for sessions after this last-stream-id, they were not processed by
-the server and the receiver may treat the stream as though it had never been
-created at all (hence the receiver may want to re-create the stream later on a
-new session).
-
-Endpoints should always send a GOAWAY message before closing a connection so
-that the remote can know whether a stream has been partially processed or not.
-(For example, if an HTTP client sends a POST at the same time that a server
-closes a connection, the client cannot know if the server started to process
-that POST request if the server does not send a GOAWAY frame to indicate where
-it stopped working).
-
-After sending a GOAWAY message, the sender must ignore all SYN_STREAM frames for
-new streams, and MUST NOT create any new streams.
-
-+----------------------------------+ |1| version | 7 |
-+----------------------------------+ | 0 (flags) | 8 (length) |
-+----------------------------------| |X| Last-good-stream-ID (31 bits) |
-+----------------------------------+ | Status code |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a GOAWAY message is 7.
-
-Length: This frame is always 8 bytes long.
-
-Last-good-stream-Id: The last stream id which was accepted by the sender of the
-GOAWAY message. If no streams were replied to, this value MUST be 0.
-
-Status: The reason for closing the session.
-
-* 0 - OK. This is a normal session teardown.
-* 1 - PROTOCOL_ERROR. This is a generic error, and should only be used
- if a more specific error is not available.
-* 2 - INTERNAL_ERROR. This is a generic error which can be used when
- the implementation has internally failed, not due to anything in the
- protocol.
-
-### 2.6.7 HEADERS
-
-The HEADERS frame augments a stream with additional headers. It may be
-optionally sent on an existing stream at any time. Specific application of the
-headers in this frame is application-dependent. The name/value header block
-within this frame is compressed.
-
-+------------------------------------+ |1| version | 8 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-&lt;+ +------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- (Section 2.3.6) state.
-
-Length: An unsigned 24 bit value representing the number of bytes after the
-length field. The minimum length of the length field is 4 (when the number of
-name value pairs is 0).
-
-Stream-ID: The stream this HEADERS block is associated with.
-
-Name/Value Header Block: A set of name/value pairs carried as part of the
-SYN_STREAM. see Name/Value Header Block (Section 2.6.10).
-
-### 2.6.8 WINDOW_UPDATE
-
-The WINDOW_UPDATE frame is used to implement flow control.
-
-Flow control operates at two levels: on each individual stream and on the entire
-connection.
-
-Both types of flow control are hop by hop; that is, only between the two
-endpoints. Intermediaries do not forward WINDOW_UPDATE frames between dependent
-connections. However, throttling of data transfer by any receiver can indirectly
-cause the propagation of flow control information toward the original sender.
-
-Flow control only applies to frames that are identified as being subject to flow
-control. Of the frame types defined in this document, this includes only DATA
-frame. Frames that are exempt from flow control MUST be accepted and processed,
-unless the receiver is unable to assign resources to handling the frame. A
-receiver MAY respond with a stream error (Section 2.4.2) or session error
-(Section 2.4.1) of type FLOW_CONTROL_ERROR if it is unable accept a frame.
-
-+----------------------------------+ |1| version | 9 |
-+----------------------------------+ | 0 (flags) | 8 (length) |
-+----------------------------------+ |X| Stream-ID (31-bits) |
-+----------------------------------+ |X| Delta-Window-Size (31-bits) |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Flags: The flags field is always zero.
-
-Type: The message type for a WINDOW_UPDATE message is 9.
-
-Length: The length field is always 8 for this frame (there are always 8 bytes
-after the length field).
-
-Stream-ID: The stream ID for which this WINDOW_UPDATE control frame applies to,
-or 0 if applied to connection-level flow control.
-
-Delta-Window-Size: The additional number of bytes that the sender can transmit
-in addition to existing remaining window size. The legal range for this field is
-1 to 2^31 - 1 (0x7fffffff) bytes.
-
-A receiver that receives a flow controlled frame MUST always account for its
-contribution against the connection flow control window, unless the receiver
-treats this as a session error (Section 2.4.1). This is necessary even if the
-frame is in error. Since the sender counts the frame toward the flow control
-window, if the receiver does not, the flow control window at sender and receiver
-can become different.
-
-#### The Flow Control Window
-
-Flow control in SPDY 3.1 is implemented using a window kept by each sender on
-every stream. The flow control window is a simple integer value that indicates
-how many bytes of data the sender is permitted to transmit; as such, its size is
-a measure of the buffering capability of the receiver.
-
-Two flow control windows are applicable: the stream flow control window and the
-connection flow control window. The sender MUST NOT send a flow controlled frame
-with a length that exceeds the space available in either of the flow control
-windows advertised by the receiver. Frames with zero length with the END_STREAM
-flag set (for example, an empty data frame) MAY be sent if there is no available
-space in either flow control window.
-
-For flow control calculations, the 8 byte frame header is not counted.
-
-After sending a flow controlled frame, the sender reduces the space available in
-both windows by the length of the transmitted frame.
-
-The receiver of a frame sends a WINDOW_UPDATE frame as it consumes data and
-frees up space in flow control windows. Separate WINDOW_UPDATE frames are sent
-for the stream and connection level flow control windows.
-
-A sender that receives a WINDOW_UPDATE frame updates the corresponding window by
-the amount specified in the frame.
-
-A sender MUST NOT allow a flow control window to exceed 2^31 - 1 bytes. If a
-sender receives a WINDOW_UPDATE that causes a flow control window to exceed this
-maximum it MUST terminate either the stream or the connection, as appropriate.
-For streams, the sender sends a RST_STREAM with the error code of
-FLOW_CONTROL_ERROR code; for the connection, a GOAWAY frame with a
-FLOW_CONTROL_ERROR code.
-
-Flow controlled frames from the sender and WINDOW_UPDATE frames from the
-receiver are completely asynchronous with respect to each other. This property
-allows a receiver to aggressively update the window size kept by the sender to
-prevent streams from stalling.
-
-#### Initial Flow Control Window Size
-
-When a SPDY/3.1 connection is first established, new streams are created with an
-initial flow control window size of 64KB. The connection flow control window is
-64KB bytes. Both endpoints can adjust the initial window size for new streams by
-including a value for SETTINGS_INITIAL_WINDOW_SIZE in the SETTINGS frame that
-forms part of the connection header.
-
-Prior to receiving a SETTINGS frame that sets a value for
-SETTINGS_INITIAL_WINDOW_SIZE, an endpoint can only use the default initial
-window size when sending flow controlled frames. Similarly, the connection flow
-control window is set to the default initial window size until a WINDOW_UPDATE
-frame is received.
-
-A SETTINGS frame can alter the initial flow control window size for all current
-streams. When the value of SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver MUST
-adjust the size of all stream flow control windows that it maintains by the
-difference between the new value and the old value. A SETTINGS frame cannot
-alter the connection flow control window.
-
-A change to SETTINGS_INITIAL_WINDOW_SIZE could cause the available space in a
-flow control window to become negative. A sender MUST track the negative flow
-control window, and MUST NOT send new flow controlled frames until it receives
-WINDOW_UPDATE frames that cause the flow control window to become positive.
-
-For example, if the client sends 60KB immediately on connection establishment,
-and the server sets the initial window size to be 16KB, the client will
-recalculate the available flow control window to be -44KB on receipt of the
-SETTINGS frame. The client retains a negative flow control window until
-WINDOW_UPDATE frames restore the window to being positive, after which the
-client can resume sending.
-
-#### Reducing the Stream Window Size
-
-A receiver that wishes to use a smaller flow control window than the current
-size can send a new SETTINGS frame. However, the receiver MUST be prepared to
-receive data that exceeds this window size, since the sender might send data
-that exceeds the lower limit prior to processing the SETTINGS frame.
-
-A receiver has two options for handling streams that exceed flow control limits:
-
-1. The receiver can immediately send RST_STREAM with FLOW_CONTROL_ERROR
- error code for the affected streams.
-2. The receiver can accept the streams and tolerate the resulting head
- of line blocking, sending WINDOW_UPDATE frames as it consumes data.
-
-If a receiver decides to accept streams, both sides MUST recompute the available
-flow control window based on the initial window size sent in the SETTINGS.
-
-### 2.6.9 CREDENTIAL
-
-DEPRECATED.
-
-### 2.6.10 Name/Value Header Block
-
-The Name/Value Header Block is found in the SYN_STREAM, SYN_REPLY and HEADERS
-control frames, and shares a common format:
-
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-+------------------------------------+ | Length of name (int32) |
-+------------------------------------+ | Name (string) |
-+------------------------------------+ | Length of value (int32) |
-+------------------------------------+ | Value (string) |
-+------------------------------------+ | (repeats) |
-
-Number of Name/Value pairs: The number of repeating name/value pairs following
-this field.
-
-List of Name/Value pairs:
-
-* Length of Name: a 32-bit value containing the number of octets in
- the name field. Note that in practice, this length must not exceed
- 2^24, as that is the maximum size of a SPDY frame.
-* Name: 0 or more octets, 8-bit sequences of data, excluding 0.
-* Length of Value: a 32-bit value containing the number of octets in
- the value field. Note that in practice, this length must not exceed
- 2^24, as that is the maximum size of a SPDY frame.
-* Value: 0 or more octets, 8-bit sequences of data, excluding 0.
-
-Each header name must have at least one value. Header names are encoded using
-the [US-ASCII character
-set](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#ASCII)
-\[ASCII\] and must be all lower case. The length of each name must be greater
-than zero. A recipient of a zero-length name MUST issue a stream error (Section
-2.4.2) with the status code PROTOCOL_ERROR for the stream-id.
-
-Duplicate header names are not allowed. To send two identically named headers,
-send a header with two values, where the values are separated by a single NUL
-(0) byte. A header value can either be empty (e.g. the length is zero) or it can
-contain multiple, NUL-separated values, each with length greater than zero. The
-value never starts nor ends with a NUL character. Recipients of illegal value
-fields MUST issue a stream error (Section 2.4.2) with the status code
-PROTOCOL_ERROR for the stream-id.
-
-#### 2.6.10.1 Compression
-
-The Name/Value Header Block is a section of the SYN_STREAM, SYN_REPLY, and
-HEADERS frames used to carry header meta-data. This block is always compressed
-using zlib compression. Within this specification, any reference to 'zlib' is
-referring to the [ZLIB Compressed Data Format Specification Version 3.3 as part
-of
-RFC1950.](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC1950)
-
-For each HEADERS compression instance, the initial state is initialized using
-the following
-[dictionary](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#UDELCOMPRESSION)
-\[UDELCOMPRESSION\]:
-
-const unsigned char SPDY_dictionary_txt\[\] = { 0x00, 0x00, 0x00, 0x07,
-0x6f, 0x70, 0x74, 0x69, \\\\ - - - - o p t i 0x6f, 0x6e, 0x73, 0x00, 0x00,
-0x00, 0x04, 0x68, \\\\ o n s - - - - h 0x65, 0x61, 0x64, 0x00, 0x00, 0x00,
-0x04, 0x70, \\\\ e a d - - - - p 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03,
-0x70, \\\\ o s t - - - - p 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65,
-\\\\ u t - - - - d e 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05, \\\\ l e
-t e - - - - 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00, \\\\ t r a c e -
-- - 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00, \\\\ - a c c e p t -
-0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, \\\\ - - - a c c e p 0x74,
-0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, \\\\ t - c h a r s e 0x74, 0x00,
-0x00, 0x00, 0x0f, 0x61, 0x63, 0x63, \\\\ t - - - - a c c 0x65, 0x70, 0x74,
-0x2d, 0x65, 0x6e, 0x63, 0x6f, \\\\ e p t - e n c o 0x64, 0x69, 0x6e, 0x67,
-0x00, 0x00, 0x00, 0x0f, \\\\ d i n g - - - - 0x61, 0x63, 0x63, 0x65, 0x70,
-0x74, 0x2d, 0x6c, \\\\ a c c e p t - l 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
-0x65, 0x00, \\\\ a n g u a g e - 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65,
-0x70, \\\\ - - - a c c e p 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73,
-\\\\ t - r a n g e s 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00, \\\\ - -
-- - a g e - 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, \\\\ - - - a l l
-o w 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68, \\\\ - - - - a u t h
-0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, \\\\ o r i z a t i o 0x6e,
-0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63, \\\\ n - - - - c a c 0x68, 0x65,
-0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, \\\\ h e - c o n t r 0x6f, 0x6c, 0x00,
-0x00, 0x00, 0x0a, 0x63, 0x6f, \\\\ o l - - - - c o 0x6e, 0x6e, 0x65, 0x63,
-0x74, 0x69, 0x6f, 0x6e, \\\\ n n e c t i o n 0x00, 0x00, 0x00, 0x0c, 0x63,
-0x6f, 0x6e, 0x74, \\\\ - - - - c o n t 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61,
-0x73, 0x65, \\\\ e n t - b a s e 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e,
-0x74, \\\\ - - - - c o n t 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f,
-\\\\ e n t - e n c o 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, \\\\ d i
-n g - - - - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, \\\\ c o n t e n
-t - 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, \\\\ l a n g u a g e
-0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74, \\\\ - - - - c o n t 0x65,
-0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, \\\\ e n t - l e n g 0x74, 0x68,
-0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, \\\\ t h - - - - c o 0x6e, 0x74, 0x65,
-0x6e, 0x74, 0x2d, 0x6c, 0x6f, \\\\ n t e n t - l o 0x63, 0x61, 0x74, 0x69,
-0x6f, 0x6e, 0x00, 0x00, \\\\ c a t i o n - - 0x00, 0x0b, 0x63, 0x6f, 0x6e,
-0x74, 0x65, 0x6e, \\\\ - - c o n t e n 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00,
-0x00, 0x00, \\\\ t - m d 5 - - - 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
-0x74, \\\\ - c o n t e n t 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00,
-\\\\ - r a n g e - - 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, \\\\ - -
-c o n t e n 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, \\\\ t - t y p e
-- - 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00, \\\\ - - d a t e - -
-0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00, \\\\ - - e t a g - - 0x00,
-0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, \\\\ - - e x p e c t 0x00, 0x00,
-0x00, 0x07, 0x65, 0x78, 0x70, 0x69, \\\\ - - - - e x p i 0x72, 0x65, 0x73,
-0x00, 0x00, 0x00, 0x04, 0x66, \\\\ r e s - - - - f 0x72, 0x6f, 0x6d, 0x00,
-0x00, 0x00, 0x04, 0x68, \\\\ r o m - - - - h 0x6f, 0x73, 0x74, 0x00, 0x00,
-0x00, 0x08, 0x69, \\\\ o s t - - - - i 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63,
-0x68, 0x00, \\\\ f - m a t c h - 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d,
-0x6f, \\\\ - - - i f - m o 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73,
-\\\\ d i f i e d - s 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d, \\\\ i n
-c e - - - - 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, \\\\ i f - n o n
-e - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00, \\\\ m a t c h - - -
-0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67, \\\\ - i f - r a n g 0x65,
-0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d, \\\\ e - - - - i f - 0x75, 0x6e,
-0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, \\\\ u n m o d i f i 0x65, 0x64, 0x2d,
-0x73, 0x69, 0x6e, 0x63, 0x65, \\\\ e d - s i n c e 0x00, 0x00, 0x00, 0x0d,
-0x6c, 0x61, 0x73, 0x74, \\\\ - - - - l a s t 0x2d, 0x6d, 0x6f, 0x64, 0x69,
-0x66, 0x69, 0x65, \\\\ - m o d i f i e 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c,
-0x6f, 0x63, \\\\ d - - - - l o c 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00,
-0x00, \\\\ a t i o n - - - 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72,
-\\\\ - m a x - f o r 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00, \\\\ w a
-r d s - - - 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00, \\\\ - p r a g m
-a - 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79, \\\\ - - - p r o x y
-0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, \\\\ - a u t h e n t 0x69,
-0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, \\\\ i c a t e - - - 0x13, 0x70,
-0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, \\\\ - p r o x y - a 0x75, 0x74, 0x68,
-0x6f, 0x72, 0x69, 0x7a, 0x61, \\\\ u t h o r i z a 0x74, 0x69, 0x6f, 0x6e,
-0x00, 0x00, 0x00, 0x05, \\\\ t i o n - - - - 0x72, 0x61, 0x6e, 0x67, 0x65,
-0x00, 0x00, 0x00, \\\\ r a n g e - - - 0x07, 0x72, 0x65, 0x66, 0x65, 0x72,
-0x65, 0x72, \\\\ - r e f e r e r 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74,
-0x72, \\\\ - - - - r e t r 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00,
-\\\\ y - a f t e r - 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, \\\\ - -
-- s e r v e 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00, \\\\ r - - - - t
-e - 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, \\\\ - - - t r a i l
-0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72, \\\\ e r - - - - t r 0x61,
-0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, \\\\ a n s f e r - e 0x6e, 0x63,
-0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00, \\\\ n c o d i n g - 0x00, 0x00, 0x07,
-0x75, 0x70, 0x67, 0x72, 0x61, \\\\ - - - u p g r a 0x64, 0x65, 0x00, 0x00,
-0x00, 0x0a, 0x75, 0x73, \\\\ d e - - - - u s 0x65, 0x72, 0x2d, 0x61, 0x67,
-0x65, 0x6e, 0x74, \\\\ e r - a g e n t 0x00, 0x00, 0x00, 0x04, 0x76, 0x61,
-0x72, 0x79, \\\\ - - - - v a r y 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61,
-0x00, \\\\ - - - - v i a - 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69,
-\\\\ - - - w a r n i 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77, \\\\ n g
-- - - - w w 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, \\\\ w - a u t h
-e n 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, \\\\ t i c a t e - -
-0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, \\\\ - - m e t h o d 0x00,
-0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, \\\\ - - - - g e t - 0x00, 0x00,
-0x06, 0x73, 0x74, 0x61, 0x74, 0x75, \\\\ - - - s t a t u 0x73, 0x00, 0x00,
-0x00, 0x06, 0x32, 0x30, 0x30, \\\\ s - - - - 2 0 0 0x20, 0x4f, 0x4b, 0x00,
-0x00, 0x00, 0x07, 0x76, \\\\ - O K - - - - v 0x65, 0x72, 0x73, 0x69, 0x6f,
-0x6e, 0x00, 0x00, \\\\ e r s i o n - - 0x00, 0x08, 0x48, 0x54, 0x54, 0x50,
-0x2f, 0x31, \\\\ - - H T T P - 1 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75,
-0x72, \\\\ - 1 - - - - u r 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62,
-\\\\ l - - - - p u b 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73, \\\\ l i
-c - - - - s 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69, \\\\ e t - c o o
-k i 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65, \\\\ e - - - - k e e
-0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00, \\\\ p - a l i v e - 0x00,
-0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, \\\\ - - - o r i g i 0x6e, 0x31,
-0x30, 0x30, 0x31, 0x30, 0x31, 0x32, \\\\ n 1 0 0 1 0 1 2 0x30, 0x31, 0x32,
-0x30, 0x32, 0x32, 0x30, 0x35, \\\\ 0 1 2 0 2 2 0 5 0x32, 0x30, 0x36, 0x33,
-0x30, 0x30, 0x33, 0x30, \\\\ 2 0 6 3 0 0 3 0 0x32, 0x33, 0x30, 0x33, 0x33,
-0x30, 0x34, 0x33, \\\\ 2 3 0 3 3 0 4 3 0x30, 0x35, 0x33, 0x30, 0x36, 0x33,
-0x30, 0x37, \\\\ 0 5 3 0 6 3 0 7 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34,
-0x30, \\\\ 4 0 2 4 0 5 4 0 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34,
-\\\\ 6 4 0 7 4 0 8 4 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31, \\\\ 0 9
-4 1 0 4 1 1 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31, \\\\ 4 1 2 4 1 3
-4 1 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34, \\\\ 4 4 1 5 4 1 6 4
-0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34, \\\\ 1 7 5 0 2 5 0 4 0x35,
-0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e, \\\\ 5 0 5 2 0 3 - N 0x6f, 0x6e,
-0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, \\\\ o n - A u t h o 0x72, 0x69, 0x74,
-0x61, 0x74, 0x69, 0x76, 0x65, \\\\ r i t a t i v e 0x20, 0x49, 0x6e, 0x66,
-0x6f, 0x72, 0x6d, 0x61, \\\\ - I n f o r m a 0x74, 0x69, 0x6f, 0x6e, 0x32,
-0x30, 0x34, 0x20, \\\\ t i o n 2 0 4 - 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e,
-0x74, 0x65, \\\\ N o - C o n t e 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d,
-0x6f, \\\\ n t 3 0 1 - M o 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d,
-\\\\ v e d - P e r m 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34, \\\\ a n
-e n t l y 4 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, \\\\ 0 0 - B a d
-- R 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30, \\\\ e q u e s t 4 0
-0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, \\\\ 1 - U n a u t h 0x6f,
-0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30, \\\\ o r i z e d 4 0 0x33, 0x20,
-0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, \\\\ 3 - F o r b i d 0x64, 0x65, 0x6e,
-0x34, 0x30, 0x34, 0x20, 0x4e, \\\\ d e n 4 0 4 - N 0x6f, 0x74, 0x20, 0x46,
-0x6f, 0x75, 0x6e, 0x64, \\\\ o t - F o u n d 0x35, 0x30, 0x30, 0x20, 0x49,
-0x6e, 0x74, 0x65, \\\\ 5 0 0 - I n t e 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53,
-0x65, 0x72, \\\\ r n a l - S e r 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72,
-0x6f, \\\\ v e r - E r r o 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74,
-\\\\ r 5 0 1 - N o t 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, \\\\ - I
-m p l e m e 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20, \\\\ n t e d 5 0
-3 - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, \\\\ S e r v i c e -
-0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, \\\\ U n a v a i l a 0x62,
-0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46, \\\\ b l e J a n - F 0x65, 0x62,
-0x20, 0x4d, 0x61, 0x72, 0x20, 0x41, \\\\ e b - M a r - A 0x70, 0x72, 0x20,
-0x4d, 0x61, 0x79, 0x20, 0x4a, \\\\ p r - M a y - J 0x75, 0x6e, 0x20, 0x4a,
-0x75, 0x6c, 0x20, 0x41, \\\\ u n - J u l - A 0x75, 0x67, 0x20, 0x53, 0x65,
-0x70, 0x74, 0x20, \\\\ u g - S e p t - 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f,
-0x76, 0x20, \\\\ O c t - N o v - 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a,
-0x30, \\\\ D e c - 0 0 - 0 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e,
-\\\\ 0 - 0 0 - M o n 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, \\\\ - -
-T u e - - W 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c, \\\\ e d - - T h
-u - 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, \\\\ - F r i - - S a
-0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, \\\\ t - - S u n - - 0x47,
-0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b, \\\\ G M T c h u n k 0x65, 0x64,
-0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, \\\\ e d - t e x t - 0x68, 0x74, 0x6d,
-0x6c, 0x2c, 0x69, 0x6d, 0x61, \\\\ h t m l - i m a 0x67, 0x65, 0x2f, 0x70,
-0x6e, 0x67, 0x2c, 0x69, \\\\ g e - p n g - i 0x6d, 0x61, 0x67, 0x65, 0x2f,
-0x6a, 0x70, 0x67, \\\\ m a g e - j p g 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65,
-0x2f, 0x67, \\\\ - i m a g e - g 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c,
-0x69, \\\\ i f - a p p l i 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78,
-\\\\ c a t i o n - x 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, \\\\ m l
-- a p p l i 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, \\\\ c a t i o n
-- x 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c, \\\\ h t m l - x m l
-0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, \\\\ - t e x t - p l 0x61,
-0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74, \\\\ a i n - t e x t 0x2f, 0x6a,
-0x61, 0x76, 0x61, 0x73, 0x63, 0x72, \\\\ - j a v a s c r 0x69, 0x70, 0x74,
-0x2c, 0x70, 0x75, 0x62, 0x6c, \\\\ i p t - p u b l 0x69, 0x63, 0x70, 0x72,
-0x69, 0x76, 0x61, 0x74, \\\\ i c p r i v a t 0x65, 0x6d, 0x61, 0x78, 0x2d,
-0x61, 0x67, 0x65, \\\\ e m a x - a g e 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c,
-0x64, 0x65, \\\\ - g z i p - d e 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73,
-0x64, \\\\ f l a t e - s d 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65,
-\\\\ c h c h a r s e 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63, \\\\ t -
-u t f - 8 c 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69, \\\\ h a r s e t
-- i 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, \\\\ s o - 8 8 5 9 -
-0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a, \\\\ 1 - u t f - - - 0x2c,
-0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e \\\\ - e n q - 0 - };
-
-The entire contents of the name/value header block is compressed using zlib.
-There is a single zlib stream for all name value pairs in one direction on a
-connection. SPDY uses a SYNC_FLUSH between each compressed frame.
-
-Implementation notes: the compression engine can be tuned to favor speed or
-size. Optimizing for size increases memory use and CPU consumption. Because
-header blocks are generally small, implementors may want to reduce the
-window-size of the compression engine from the default 15bits (a 32KB window) to
-more like 11bits (a 2KB window). The exact setting is chosen by the compressor,
-the decompressor will work with any setting.
-
----
-
-# 3. HTTP Layering over SPDY
-
-SPDY is intended to be as compatible as possible with current web-based
-applications. This means that, from the perspective of the server business logic
-or application API, the features of HTTP are unchanged. To achieve this, all of
-the application request and response header semantics are preserved, although
-the syntax of conveying those semantics has changed. Thus, the rules from the
-[HTTP/1.1 specification in
-RFC2616](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2616)
-apply with the changes in the sections below.
-
-## 3.1 Connection Management
-
-Clients SHOULD NOT open more than one SPDY session to a given
-[origin](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-concurrently.
-
-Note that it is possible for one SPDY session to be finishing (e.g. a GOAWAY
-message has been sent, but not all streams have finished), while another SPDY
-session is starting.
-
-### 3.1.1 Use of GOAWAY
-
-SPDY provides a GOAWAY message which can be used when closing a connection from
-either the client or server. Without a server GOAWAY message, HTTP has a race
-condition where the client sends a request (a new SYN_STREAM) just as the server
-is closing the connection, and the client cannot know if the server received the
-stream or not. By using the last-stream-id in the GOAWAY, servers can indicate
-to the client if a request was processed or not.
-
-Note that some servers will choose to send the GOAWAY and immediately terminate
-the connection without waiting for active streams to finish. The client will be
-able to determine this because SPDY streams are determinstically closed. This
-abrupt termination will force the client to heuristically decide whether to
-retry the pending requests. Clients always need to be capable of dealing with
-this case because they must deal with accidental connection termination cases,
-which are the same as the server never having sent a GOAWAY.
-
-More sophisticated servers will use GOAWAY to implement a graceful teardown.
-They will send the GOAWAY and provide some time for the active streams to finish
-before terminating the connection.
-
-If a SPDY client closes the connection, it should also send a GOAWAY message.
-This allows the server to know if any server-push streams were received by the
-client.
-
-If the endpoint closing the connection has not received any SYN_STREAMs from the
-remote, the GOAWAY will contain a last-stream-id of 0.
-
-## 3.2 HTTP Request/Response
-
-### 3.2.1 Request
-
-The client initiates a request by sending a SYN_STREAM frame. For requests which
-do not contain a body, the SYN_STREAM frame MUST set the FLAG_FIN, indicating
-that the client intends to send no further data on this stream. For requests
-which do contain a body, the SYN_STREAM will not contain the FLAG_FIN, and the
-body will follow the SYN_STREAM in a series of DATA frames. The last DATA frame
-will set the FLAG_FIN to indicate the end of the body.
-
-The SYN_STREAM Name/Value section will contain all of the HTTP headers which are
-associated with an HTTP request. The header block in SPDY is mostly unchanged
-from today's HTTP header block, with the following differences:
-
-* The first line of the request is unfolded into name/value pairs like
- other HTTP headers and MUST be present:
- * ":method" - the HTTP method for this request (e.g. "GET",
- "POST", "HEAD", etc)
- * ":path" - the url-path for this url with "/" prefixed. (See
- [RFC3986](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC3986)).
- For example, for "http://www.google.com/search?q=dogs" the path
- would be "/search?q=dogs".
- * ":version" - the HTTP version of this request (e.g. "HTTP/1.1")
-* In addition, the following two name/value pairs must also be present
- in every request:
- * ":host" - the hostport (See
- [RFC1738](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC1738))
- portion of the URL for this request (e.g.
- "www.google.com:1234"). This header is the same as the HTTP
- 'Host' header.
- * ":scheme" - the scheme portion of the URL for this request (e.g.
- "https"))
-* Header names are all lowercase.
-* The Connection, Host, Keep-Alive, Proxy-Connection, and
- Transfer-Encoding headers are not valid and MUST not be sent.
-* User-agents MUST support gzip compression. Regardless of the
- Accept-Encoding sent by the user-agent, the server may always send
- content encoded with gzip or deflate encoding.
-* If a server receives a request where the sum of the data frame
- payload lengths does not equal the size of the Content-Length
- header, the server MUST return a 400 (Bad Request) error.
-* POST-specific changes:
- * Although POSTs are inherently chunked, POST requests SHOULD also
- be accompanied by a Content-Length header. There are two reasons
- for this: First, it assists with upload progress meters for an
- improved user experience. But second, we know from early
- versions of SPDY that failure to send a content length header is
- incompatible with many existing HTTP server implementations.
- Existing user-agents do not omit the Content-Length header, and
- server implementations have come to depend upon this.
-
-The user-agent is free to prioritize requests as it sees fit. If the user-agent
-cannot make progress without receiving a resource, it should attempt to raise
-the priority of that resource. Resources such as images, SHOULD generally use
-the lowest priority.
-
-If a client sends a SYN_STREAM without all of the method, host, path, scheme,
-and version headers, the server MUST reply with a HTTP 400 Bad Request reply.
-
-### 3.2.2 Response
-
-The server responds to a client request with a SYN_REPLY frame. Symmetric to the
-client's upload stream, server will send data after the SYN_REPLY frame via a
-series of DATA frames, and the last data frame will contain the FLAG_FIN to
-indicate successful end-of-stream. If a response (like a 202 or 204 response)
-contains no body, the SYN_REPLY frame may contain the FLAG_FIN flag to indicate
-no further data will be sent on the stream.
-
-* The response status line is unfolded into name/value pairs like
- other HTTP headers and must be present:
- * ":status" - The HTTP response status code (e.g. "200" or "200
- OK")
- * ":version" - The HTTP response version (e.g. "HTTP/1.1")
-* All header names must be lowercase.
-* The Connection, Keep-Alive, Proxy-Connection, and Transfer-Encoding
- headers are not valid and MUST not be sent.
-* Responses MAY be accompanied by a Content-Length header for advisory
- purposes. (e.g. for UI progress meters)
-* If a client receives a response where the sum of the data frame
- payload lengths does not equal the size of the Content-Length
- header, the client MUST ignore the content length header.
-
-If a client receives a SYN_REPLY without a status or without a version header,
-the client must reply with a RST_STREAM frame indicating a PROTOCOL ERROR.
-
-### 3.2.3 Authentication
-
-When a client sends a request to an origin server that requires authentication,
-the server can reply with a "401 Unauthorized" response, and include a
-WWW-Authenticate challenge header that defines the authentication scheme to be
-used. The client then retries the request with an Authorization header
-appropriate to the specified authentication scheme.
-
-There are four options for proxy authentication, Basic, Digest, NTLM and
-Negotiate (SPNEGO). The first two options were defined in
-[RFC2617](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2617),
-and are stateless. The second two options were developed by Microsoft and
-specified in
-[RFC4559](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC4559),
-and are stateful; otherwise known as multi-round authentication, or connection
-authentication.
-
-#### 3.2.3.1 Stateless Authentication
-
-Stateless Authentication over SPDY is identical to how it is performed over
-HTTP. If multiple SPDY streams are concurrently sent to a single server, each
-will authenticate independently, similar to how two HTTP connections would
-independently authenticate to a proxy server.
-
-#### 3.2.3.2 Stateful Authentication
-
-Unfortunately, the stateful authentication mechanisms were implemented and
-defined in a such a way that directly violates RFC2617 - they do not include a
-"realm" as part of the request. This is problematic in SPDY because it makes it
-impossible for a client to disambiguate two concurrent server authentication
-challenges.
-
-To deal with this case, SPDY servers using Stateful Authentication MUST
-implement one of two changes:
-
-* Servers can add a "realm=&lt;desired realm&gt;" header so that the
- two authentication requests can be disambiguated and run
- concurrently. Unfortunately, given how these mechanisms work, this
- is probably not practical.
-* Upon sending the first stateful challenge response, the server MUST
- buffer and defer all further frames which are not part of completing
- the challenge until the challenge has completed. Completing the
- authentication challenge may take multiple round trips. Once the
- client receives a "401 Authenticate" response for a stateful
- authentication type, it MUST stop sending new requests to the server
- until the authentication has completed by receiving a non-401
- response on at least one stream.
-
-## 3.3 Server Push Transactions
-
-SPDY enables a server to send multiple replies to a client for a single request.
-The rationale for this feature is that sometimes a server knows that it will
-need to send multiple resources in response to a single request. Without server
-push features, the client must first download the primary resource, then
-discover the secondary resource(s), and request them. Pushing of resources
-avoids the round-trip delay, but also creates a potential race where a server
-can be pushing content which a user-agent is in the process of requesting. The
-following mechanics attempt to prevent the race condition while enabling the
-performance benefit.
-
-Browsers receiving a pushed response MUST validate that the server is authorized
-to push the URL using the [browser
-same-origin](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-policy. For example, a SPDY connection to www.foo.com is generally not permitted
-to push a response for www.evil.com.
-
-If the browser accepts a pushed response (e.g. it does not send a RST_STREAM),
-the browser MUST attempt to cache the pushed response in same way that it would
-cache any other response. This means validating the response headers and
-inserting into the cache.
-
-Because pushed responses have no request, they have no request headers
-associated with them. At the framing layer, SPDY pushed streams contain an
-"associated-stream-id" which indicates the requested stream for which the pushed
-stream is related. The pushed stream inherits all of the headers from the
-associated-stream-id with the exception of ":host", ":scheme", and ":path",
-which are provided as part of the pushed response stream headers. The browser
-MUST store these inherited and implied request headers with the cached resource.
-
-Implementation note: With server push, it is theoretically possible for servers
-to push unreasonable amounts of content or resources to the user-agent. Browsers
-MUST implement throttles to protect against unreasonable push attacks.
-
-### 3.3.1 Server implementation
-
-When the server intends to push a resource to the user-agent, it opens a new
-stream by sending a unidirectional SYN_STREAM. The SYN_STREAM MUST include an
-Associated-To-Stream-ID, and MUST set the FLAG_UNIDIRECTIONAL flag. The
-SYN_STREAM MUST include headers for ":scheme", ":host", ":path", which represent
-the URL for the resource being pushed. Subsequent headers may follow in HEADERS
-frames. The purpose of the association is so that the user-agent can
-differentiate which request induced the pushed stream; without it, if the
-user-agent had two tabs open to the same page, each pushing unique content under
-a fixed URL, the user-agent would not be able to differentiate the requests.
-
-The Associated-To-Stream-ID must be the ID of an existing, open stream. The
-reason for this restriction is to have a clear endpoint for pushed content. If
-the user-agent requested a resource on stream 11, the server replies on stream
-11. It can push any number of additional streams to the client before sending a
-FLAG_FIN on stream 11. However, once the originating stream is closed no further
-push streams may be associated with it. The pushed streams do not need to be
-closed (FIN set) before the originating stream is closed, they only need to be
-created before the originating stream closes.
-
-It is illegal for a server to push a resource with the Associated-To-Stream-ID
-of 0.
-
-To minimize race conditions with the client, the SYN_STREAM for the pushed
-resources MUST be sent prior to sending any content which could allow the client
-to discover the pushed resource and request it.
-
-The server MUST only push resources which would have been returned from a GET
-request.
-
-Note: If the server does not have all of the Name/Value Response headers
-available at the time it issues the HEADERS frame for the pushed resource, it
-may later use an additional HEADERS frame to augment the name/value pairs to be
-associated with the pushed stream. The subsequent HEADERS frame(s) must not
-contain a header for ':host', ':scheme', or ':path' (e.g. the server can't
-change the identity of the resource to be pushed). The HEADERS frame must not
-contain duplicate headers with a previously sent HEADERS frame. The server must
-send a HEADERS frame including the scheme/host/port headers before sending any
-data frames on the stream.
-
-### 3.3.2 Client implementation
-
-When fetching a resource the client has 3 possibilities:
-
-* the resource is not being pushed
-* the resource is being pushed, but the data has not yet arrived
-* the resource is being pushed, and the data has started to arrive
-
-When a SYN_STREAM and HEADERS frame which contains an Associated-To-Stream-ID is
-received, the client must not issue GET requests for the resource in the pushed
-stream, and instead wait for the pushed stream to arrive.
-
-If a client receives a server push stream with stream-id 0, it MUST issue a
-session error (Section 2.4.2) with the status code PROTOCOL_ERROR.
-
-When a client receives a SYN_STREAM from the server without a the ':host',
-':scheme', and ':path' headers in the Name/Value section, it MUST reply with a
-RST_STREAM with error code HTTP_PROTOCOL_ERROR.
-
-To cancel individual server push streams, the client can issue a stream error
-(Section 2.4.2) with error code CANCEL. Upon receipt, the server MUST stop
-sending on this stream immediately (this is an Abrupt termination).
-
-To cancel all server push streams related to a request, the client may issue a
-stream error (Section 2.4.2) with error code CANCEL on the associated-stream-id.
-By cancelling that stream, the server MUST immediately stop sending frames for
-any streams with in-association-to for the original stream.
-
-If the server sends a HEADER frame containing duplicate headers with a previous
-HEADERS frame for the same stream, the client must issue a stream error (Section
-2.4.2) with error code PROTOCOL ERROR.
-
-If the server sends a HEADERS frame after sending a data frame for the same
-stream, the client MAY ignore the HEADERS frame. Ignoring the HEADERS frame
-after a data frame prevents handling of HTTP's trailing headers
-(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.40).
-
----
-
-# 4. Design Rationale and Notes
-
-Authors' notes: The notes in this section have no bearing on the SPDY protocol
-as specified within this document, and none of these notes should be considered
-authoritative about how the protocol works. However, these notes may prove
-useful in future debates about how to resolve protocol ambiguities or how to
-evolve the protocol going forward. They may be removed before the final draft.
-
-## 4.1 Separation of Framing Layer and Application Layer
-
-Readers may note that this specification sometimes blends the framing layer
-(Section 2) with requirements of a specific application - HTTP (Section 3). This
-is reflected in the request/response nature of the streams, the definition of
-the HEADERS and compression contexts which are very similar to HTTP, and other
-areas as well.
-
-This blending is intentional - the primary goal of this protocol is to create a
-low-latency protocol for use with HTTP. Isolating the two layers is convenient
-for description of the protocol and how it relates to existing HTTP
-implementations. However, the ability to reuse the SPDY framing layer is a non
-goal.
-
-## 4.2 Error handling - Framing Layer
-
-Error handling at the SPDY layer splits errors into two groups: Those that
-affect an individual SPDY stream, and those that do not.
-
-When an error is confined to a single stream, but general framing is in tact,
-SPDY attempts to use the RST_STREAM as a mechanism to invalidate the stream but
-move forward without aborting the connection altogether.
-
-For errors occuring outside of a single stream context, SPDY assumes the entire
-session is hosed. In this case, the endpoint detecting the error should initiate
-a connection close.
-
-## 4.3 One Connection Per Domain
-
-SPDY attempts to use fewer connections than other protocols have traditionally
-used. The rationale for this behavior is because it is very difficult to provide
-a consistent level of service (e.g. TCP slow-start), prioritization, or optimal
-compression when the client is connecting to the server through multiple
-channels.
-
-Through lab measurements, we have seen consistent latency benefits by using
-fewer connections from the client. The overall number of packets sent by SPDY
-can be as much as 40% less than HTTP. Handling large numbers of concurrent
-connections on the server also does become a scalability problem, and SPDY
-reduces this load.
-
-The use of multiple connections is not without benefit, however. Because SPDY
-multiplexes multiple, independent streams onto a single stream, it creates a
-potential for head-of-line blocking problems at the transport level. In tests so
-far, the negative effects of head-of-line blocking (especially in the presence
-of packet loss) is outweighed by the benefits of compression and prioritization.
-
-## 4.4 Fixed vs Variable Length Fields
-
-SPDY favors use of fixed length 32bit fields in cases where smaller, variable
-length encodings could have been used. To some, this seems like a tragic waste
-of bandwidth. SPDY choses the simple encoding for speed and simplicity.
-
-The goal of SPDY is to reduce latency on the network. The overhead of SPDY
-frames is generally quite low. Each data frame is only an 8 byte overhead for a
-1452 byte payload (~0.6%). At the time of this writing, bandwidth is already
-plentiful, and there is a strong trend indicating that bandwidth will continue
-to increase. With an average worldwide bandwidth of 1Mbps, and assuming that a
-variable length encoding could reduce the overhead by 50%, the latency saved by
-using a variable length encoding would be less than 100 nanoseconds. More
-interesting are the effects when the larger encodings force a packet boundary,
-in which case a round-trip could be induced. However, by addressing other
-aspects of SPDY and TCP interactions, we believe this is completely mitigated.
-
-## 4.5 Compression Context(s)
-
-When isolating the compression contexts used for communicating with multiple
-origins, we had a few choices to make. We could have maintained a map (or list)
-of compression contexts usable for each origin. The basic case is easy - each
-HEADERS frame would need to identify the context to use for that frame. However,
-compression contexts are not cheap, so the lifecycle of each context would need
-to be bounded. For proxy servers, where we could churn through many contexts,
-this would be a concern. We considered using a static set of contexts, say 16 of
-them, which would bound the memory use. We also considered dynamic contexts,
-which could be created on the fly, and would need to be subsequently destroyed.
-All of these are complicated, and ultimately we decided that such a mechanism
-creates too many problems to solve.
-
-Alternatively, we've chosen the simple approach, which is to simply provide a
-flag for resetting the compression context. For the common case (no proxy), this
-fine because most requests are to the same origin and we never need to reset the
-context. For cases where we are using two different origins over a single SPDY
-session, we simply reset the compression state between each transition.
-
-## 4.6 Unidirectional streams
-
-Many readers notice that unidirectional streams are both a bit confusing in
-concept and also somewhat redundant. If the recipient of a stream doesn't wish
-to send data on a stream, it could simply send a SYN_REPLY with the FLAG_FIN bit
-set. The FLAG_UNIDIRECTIONAL is, therefore, not necessary.
-
-It is true that we don't need the UNIDIRECTIONAL markings. It is added because
-it avoids the recipient of pushed streams from needing to send a set of empty
-frames (e.g. the SYN_STREAM w/ FLAG_FIN) which otherwise serve no purpose.
-
-## 4.7 Data Compression
-
-Generic compression of data portion of the streams (as opposed to compression of
-the headers) without knowing the content of the stream is redundant. There is no
-value in compressing a stream which is already compressed. Because of this, SPDY
-initially allowed data compression to be optional. We included it because study
-of existing websites shows that many sites are not using compression as they
-should, and users suffer because of it. We wanted a mechanism where, at the SPDY
-layer, site administrators could simply force compression - it is better to
-compress twice than to not compress.
-
-Overall, however, with this feature being optional and sometimes redundant, it
-was unclear if it was useful at all. We removed it from the specification.
-
-## 4.8 Server Push
-
-A subtle but important point is that server push streams must be declared before
-the associated stream is closed. The reason for this is so that proxies have a
-lifetime for which they can discard information about previous streams. If a
-pushed stream could associate itself with an already-closed stream, then
-endpoints would not have a specific lifecycle for when they could disavow
-knowledge of the streams which went before.
-
----
-
-# 5. Security Considerations
-
-## 5.1 Use of Same-origin constraints
-
-This specification uses the [same-origin
-policy](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-in all cases where verification of content is required.
-
-## 5.2 HTTP Headers and SPDY Headers
-
-At the application level, HTTP uses name/value pairs in its headers. Because
-SPDY merges the existing HTTP headers with SPDY headers, there is a possibility
-that some HTTP applications already use a particular header name. To avoid any
-conflicts, all headers introduced for layering HTTP over SPDY are prefixed with
-":". ":" is not a valid sequence in HTTP header naming, preventing any possible
-conflict.
-
-## 5.3 Cross-Protocol Attacks
-
-By utilizing TLS, we believe that SPDY introduces no new cross-protocol attacks.
-TLS encrypts the contents of all transmission (except the handshake itself),
-making it difficult for attackers to control the data which could be used in a
-cross-protocol attack.
-
-## 5.4 Server Push Implicit Headers
-
-Pushed resources do not have an associated request. In order for existing HTTP
-cache control validations (such as the Vary header) to work, however, all cached
-resources must have a set of request headers. For this reason, browsers MUST be
-careful to inherit request headers from the associated stream for the push. This
-includes the 'Cookie' header.
-
-## 5.5 Use of Padding
-
-Padding within SPDY is not intended as a replacement for general purpose
-padding, such as might be provided by TLS. Redundant padding could even be
-counterproductive.
-
-Padding can be used to hide the exact size of frame content. Padding is provided
-to mitigate specific attacks within HTTP. For example, attacks where compressed
-content includes both attacker-controlled plaintext and secret data (see for
-example,
-[BREACH](http://breachattack.com/resources/BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf)).
-
-Use of padding can result in less protection than might seem immediately
-obvious. In particular, randomized amounts of padding only increase the number
-of frames that an attacker has to observe to recover the length. Padding to a
-constant size is preferable, since that reveals minimal size information. For
-attacks based on compression, disabling compression might be preferable to use
-of padding.
-
-Intermediaries SHOULD NOT remove padding; though an intermediary could remove
-padding and add differing amounts if the intent is to improve the protections
-padding affords.
-
----
-
-# 6. Privacy Considerations
-
-## 6.1 Long Lived Connections
-
-SPDY aims to keep connections open longer between clients and servers in order
-to reduce the latency when a user makes a request. The maintenance of these
-connections over time could be used to expose private information. For example,
-a user using a browser hours after the previous user stopped using that browser
-may be able to learn about what the previous user was doing. This is a problem
-with HTTP in its current form as well, however the short lived connections make
-it less of a risk.
-
-## 6.2 SETTINGS frame
-
-The SPDY SETTINGS frame allows servers to store out-of-band transmitted
-information about the communication between client and server on the client.
-Although this is intended only to be used to reduce latency, renegade servers
-could use it as a mechanism to store identifying information about the client in
-future requests.
-
-Clients implementing privacy modes, such as Google Chrome's "incognito mode",
-may wish to disable client-persisted SETTINGS storage.
-
-Clients MUST clear persisted SETTINGS information when clearing the cookies.
-
-TODO: Put range maximums on each type of setting to limit inappropriate uses.
-
----
-
-# 7. Incompatibilities with SPDY draft 3
-
-Here is a list of the major changes between draft 3.1 and draft 3.
-
-* Revision of flow control to include session-level flow control.
-* Removal of CREDENTIAL frame and associated error codes.
-* GOAWAY clarified to ensure that SETTINGS and GOAWAY remain
- orthogonal.
-
-Here is a list of the major changes between draft 3.2 and draft 3.1
-
-* Added DATA frame padding
-
----
-
-# 8. Requirements Notation
-
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
-"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
-interpreted as described in [RFC
-2119](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2119).
-
----
-
-# 9. Acknowledgements
-
-Many individuals have contributed to the design and evolution of SPDY: Adam
-Langley, Wan-Teh Chang, Jim Morrison, Mark Nottingham, Alyssa Wilk, Costin
-Manolache, William Chan, Vitaliy Lvin, Joe Chan, Adam Barth, Ryan Hamilton,
-Gavin Peters, Kent Alstad, Kevin Lindsay, Paul Amer, Fan Yang, Jonathan
-Leighton, Hasan Khalil, Ryan
-
----
-
-# 10. Normative References
-
-<table>
-<tr>
-<td><b>[TLSNPN]</b></td>
-<td>Langley, A., “<a href="http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01">TLS Next Protocol Negotiation</a>”, &lt;<a href="http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01">http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01</a>&gt;.</td>
-</tr>
-<tr>
-<td><b>[ASCII]</b></td>
-<td>“US-ASCII. Coded Character Set - 7-Bit American Standard Code for Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986.”.</td>
-</tr>
-<tr>
-<td><b>[UDELCOMPRESSION]</b></td>
-<td>Yang, F., Amer, P., and J. Leighton, “<a href="http://www.eecis.udel.edu/~amer/PEL/poc/pdf/SPDY-Fan.pdf">A Methodology to Derive SPDY’s Initial Dictionary for Zlib Compression</a>”, &lt;<a href="http://www.eecis.udel.edu/~amer/PEL/poc/pdf/SPDY-Fan.pdf">http://www.eecis.udel.edu/~amer/PEL/poc/pdf/SPDY-Fan.pdf</a>&gt;.</td>
-</tr>
-</table>
-
----
-
-# 11. Errata
-
-1. Section 2.6.6 originally listed INTERNAL_ERROR as status code 11.
-
----
-
-# Authors' Addresses
-
-Mike Belshe Twist EMail:
-[mbelshe@chromium.org](mailto:mbelshe@chromium.org)Roberto Peon Google, Inc
-EMail: [fenix@google.com](mailto:fenix@google.com) \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3/index.md b/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3/index.md
deleted file mode 100644
index f39573c28fa..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/spdy-protocol-draft3/index.md
+++ /dev/null
@@ -1,1754 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/spdy-protocol
- - SPDY Protocol
-page_name: spdy-protocol-draft3
-title: SPDY Protocol - Draft 3
----
-
-[TOC]
-
-# 1. Overview
-
-One of the bottlenecks of HTTP implementations is that HTTP relies on multiple
-connections for concurrency. This causes several problems, including additional
-round trips for connection setup, slow-start delays, and connection rationing by
-the client, where it tries to avoid opening too many connections to any single
-server. HTTP pipelining helps some, but only achieves partial multiplexing. In
-addition, pipelining has proven non-deployable in existing browsers due to
-intermediary interference.
-
-SPDY adds a framing layer for multiplexing multiple, concurrent streams across a
-single TCP connection (or any reliable transport stream). The framing layer is
-optimized for HTTP-like request-response streams, such that applications which
-run over HTTP today can work over SPDY with little or no change on behalf of the
-web application writer.
-
-The SPDY session offers four improvements over HTTP:
-
-* Multiplexed requests: There is no limit to the number of requests
- that can be issued concurrently over a single SPDY connection.
-* Prioritized requests: Clients can request certain resources to be
- delivered first. This avoids the problem of congesting the network
- channel with non-critical resources when a high-priority request is
- pending.
-* Compressed headers: Clients today send a significant amount of
- redundant data in the form of HTTP headers. Because a single web
- page may require 50 or 100 subrequests, this data is significant.
-* Server pushed streams: Server Push enables content to be pushed from
- servers to clients without a request.
-
-SPDY attempts to preserve the existing semantics of HTTP. All features such as
-cookies, ETags, Vary headers, Content-Encoding negotiations, etc work as they do
-with HTTP; SPDY only replaces the way the data is written to the network.
-
-## 1.1 Document Organization
-
-The SPDY Specification is split into two parts: a framing layer ([Section
-2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.-SPDY-Framing-Layer)), which
-multiplexes a TCP connection into independent, length-prefixed frames, and an
-HTTP layer ([Section
-3](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-3.-HTTP-Layering-over-SPDY)),
-which specifies the mechanism for overlaying HTTP request/response pairs on top
-of the framing layer. While some of the framing layer concepts are isolated from
-the HTTP layer, building a generic framing layer has not been a goal. The
-framing layer is tailored to the needs of the HTTP protocol and server push.
-
-## 1.2 Definitions
-
-* client: The endpoint initiating the SPDY session.
-* connection: A transport-level connection between two endpoints.
-* endpoint: Either the client or server of a connection.
-* frame: A header-prefixed sequence of bytes sent over a SPDY session.
-* server: The endpoint which did not initiate the SPDY session.
-* session: A synonym for a connection.
-* session error: An error on the SPDY session.
-* stream: A bi-directional flow of bytes across a virtual channel
- within a SPDY session.
-* stream error: An error on an individual SPDY stream.
-
----
-
-# 2. SPDY Framing Layer
-
-## 2.1 Session (Connections)
-
-The SPDY framing layer (or "session") runs atop a reliable transport layer such
-as TCP. The client is the TCP connection initiator. SPDY connections are
-persistent connections.
-
-For best performance, it is expected that clients will not close open
-connections until the user navigates away from all web pages referencing a
-connection, or until the server closes the connection. Servers are encouraged to
-leave connections open for as long as possible, but can terminate idle
-connections if necessary. When either endpoint closes the transport-level
-connection, it MUST first send a GOAWAY ([Section
-2.6.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.6-GOAWAY)) frame so that
-the endpoints can reliably determine if requests finished before the close.
-
-## 2.2 Framing
-
-Once the connection is established, clients and servers exchange framed
-messages. There are two types of frames: control frames ([Section
-2.2.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.1-Control-frames)) and
-data frames ([Section
-2.2.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.2-Data-frames)). Frames
-always have a common header which is 8 bytes in length.
-
-The first bit is a control bit indicating whether a frame is a control frame or
-data frame. Control frames carry a version number, a frame type, flags, and a
-length. Data frames contain the stream ID, flags, and the length for the payload
-carried after the common header. The simple header is designed to make reading
-and writing of frames easy.
-
-All integer values, including length, version, and type, are in network byte
-order. SPDY does not enforce alignment of types in dynamically sized frames.
-
-### 2.2.1 Control frames
-
-+----------------------------------+ |C| Version(15bits) | Type(16bits) |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Data |
-+----------------------------------+
-
-Control bit: The 'C' bit is a single bit indicating if this is a control
-message. For control frames this value is always 1.
-
-Version: The version number of the SPDY protocol. This document describes SPDY
-version 3.
-
-Type: The type of control frame. See Control Frames ([Section
-2.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6-Control-frame-types)) for
-the complete list of control frames.
-
-Flags: Flags related to this frame. Flags for control frames and data frames are
-different.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field.
-
-Data: data associated with this control frame. The format and length of this
-data is controlled by the control frame type.
-
-Control frame processing requirements:
-
-* Note that full length control frames (16MB) can be large for
- implementations running on resource-limited hardware. In such cases,
- implementations MAY limit the maximum length frame supported.
- However, all implementations MUST be able to receive control frames
- of at least 8192 octets in length.
-
-### 2.2.2 Data frames
-
-+----------------------------------+ |C| Stream-ID (31bits) |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Data |
-+----------------------------------+
-
-Control bit: For data frames this value is always 0.
-
-Stream-ID: A 31-bit value identifying the stream.
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - signifies that this frame represents the last
- frame to be transmitted on this stream. See Stream Close ([Section
- 2.3.7](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.7-Stream-close))
- below.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a data frame is 8 bytes + length. It is valid to
-have a zero-length data frame.
-
-Data: The variable-length data payload; the length was defined in the length
-field.
-
-Data frame processing requirements:
-
-* If an endpoint receives a data frame for a stream-id which is not
- open and the endpoint has not sent a GOAWAY ([Section
- 2.6.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.6-GOAWAY))
- frame, it MUST issue a stream error ([Section
- 2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
- with the error code INVALID_STREAM for the stream-id.
-* If the endpoint which created the stream receives a data frame
- before receiving a SYN_REPLY on that stream, it is a protocol error,
- and the recipient MUST issue a stream error ([Section
- 2.4.2](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#StreamErrorHandler))
- with the status code PROTOCOL_ERROR for the stream-id.
-* Implementors note: If an endpoint receives multiple data frames for
- invalid stream-ids, it MAY close the session.
-
-## 2.3 Streams
-
-Streams are independent sequences of bi-directional data divided into frames
-with several properties:
-
-* Streams may be created by either the client or server.
-* Streams optionally carry a set of name/value header pairs.
-* Streams can concurrently send data interleaved with other streams.
-* Streams may be cancelled.
-
-### 2.3.1 Stream frames
-
-SPDY defines 3 control frames to manage the lifecycle of a stream:
-
-* SYN_STREAM - Open a new stream
-* SYN_REPLY - Remote acknowledgement of a new, open stream
-* RST_STREAM - Close a stream
-
-### 2.3.2 Stream creation
-
-A stream is created by sending a control frame with the type set to SYN_STREAM
-([Section
-2.6.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.1-SYN_STREAM)). If the
-server is initiating the stream, the Stream-ID must be even. If the client is
-initiating the stream, the Stream-ID must be odd. 0 is not a valid Stream-ID.
-Stream-IDs from each side of the connection must increase monotonically as new
-streams are created. E.g. Stream 2 may be created after stream 3, but stream 7
-must not be created after stream 9. Stream IDs do not wrap: when a client or
-server cannot create a new stream id without exceeding a 31 bit value, it MUST
-NOT create a new stream.
-
-The stream-id MUST increase with each new stream. If an endpoint receives a
-SYN_STREAM with a stream id which is less than any previously received
-SYN_STREAM, it MUST issue a session error ([Section
-2.4.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.1-Session-Error-Handling))
-with the status PROTOCOL_ERROR.
-
-It is a protocol error to send two SYN_STREAMs with the same stream-id. If a
-recipient receives a second SYN_STREAM for the same stream, it MUST issue a
-stream error ([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with the status code PROTOCOL_ERROR.
-
-Upon receipt of a SYN_STREAM, the recipient can reject the stream by sending a
-stream error ([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with the error code REFUSED_STREAM. Note, however, that the creating endpoint
-may have already sent additional frames for that stream which cannot be
-immediately stopped.
-
-Once the stream is created, the creator may immediately send HEADERS or DATA
-frames for that stream, without needing to wait for the recipient to
-acknowledge.
-
-#### 2.3.2.1 Unidirectional streams
-
-When an endpoint creates a stream with the FLAG_UNIDIRECTIONAL flag set, it
-creates a unidirectional stream which the creating endpoint can use to send
-frames, but the receiving endpoint cannot. The receiving endpoint is implicitly
-already in the half-closed ([Section
-2.3.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.6-Stream-half-close))
-state.
-
-#### 2.3.2.2 Bidirectional streams
-
-SYN_STREAM frames which do not use the FLAG_UNIDIRECTIONAL flag are
-bidirectional streams. Both endpoints can send data on a bi-directional stream.
-
-### 2.3.3 Stream priority
-
-The creator of a stream assigns a priority for that stream. Priority is
-represented as an integer from 0 to 7. 0 represents the highest priority and 7
-represents the lowest priority.
-
-The sender and recipient SHOULD use best-effort to process streams in the order
-of highest priority to lowest priority.
-
-### 2.3.4 Stream headers
-
-Streams carry optional sets of name/value pair headers which carry metadata
-about the stream. After the stream has been created, and as long as the sender
-is not closed ([Section
-2.3.7](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.7-Stream-close)) or
-half-closed ([Section
-2.3.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.6-Stream-half-close)),
-each side may send HEADERS frame(s) containing the header data. Header data can
-be sent in multiple HEADERS frames, and HEADERS frames may be interleaved with
-data frames.
-
-### 2.3.5 Stream data exchange
-
-Once a stream is created, it can be used to send arbitrary amounts of data.
-Generally this means that a series of data frames will be sent on the stream
-until a frame containing the FLAG_FIN flag is set. The FLAG_FIN can be set on a
-SYN_STREAM ([Section
-2.6.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.1-SYN_STREAM)),
-SYN_REPLY ([Section
-2.6.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.2-SYN_REPLY)), HEADERS
-([Section 2.6.7](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.7-HEADERS)) or
-a DATA ([Section
-2.2.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.2-Data-frames)) frame.
-Once the FLAG_FIN has been sent, the stream is considered to be half-closed.
-
-### 2.3.6 Stream half-close
-
-When one side of the stream sends a frame with the FLAG_FIN flag set, the stream
-is half-closed from that endpoint. The sender of the FLAG_FIN MUST NOT send
-further frames on that stream. When both sides have half-closed, the stream is
-closed.
-
-If an endpoint receives a data frame after the stream is half-closed from the
-sender (e.g. the endpoint has already received a prior frame for the stream with
-the FIN flag set), it MUST send a RST_STREAM to the sender with the status
-STREAM_ALREADY_CLOSED.
-
-### 2.3.7 Stream close
-
-There are 3 ways that streams can be terminated:
-
-* Normal termination: Normal stream termination occurs when both
- sender and recipient have half-closed the stream by sending a
- FLAG_FIN.
-* Abrupt termination: Either the client or server can send a
- RST_STREAM control frame at any time. A RST_STREAM contains an error
- code to indicate the reason for failure. When a RST_STREAM is sent
- from the stream originator, it indicates a failure to complete the
- stream and that no further data will be sent on the stream. When a
- RST_STREAM is sent from the stream recipient, the sender, upon
- receipt, should stop sending any data on the stream. The stream
- recipient should be aware that there is a race between data already
- in transit from the sender and the time the RST_STREAM is received.
- See Stream Error Handling ([Section
- 2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-* TCP connection teardown: If the TCP connection is torn down while
- un-closed streams exist, then the endpoint must assume that the
- stream was abnormally interrupted and may be incomplete.
-
-If an endpoint receives a data frame after the stream is closed, it must send a
-RST_STREAM to the sender with the status PROTOCOL_ERROR.
-
-## 2.4 Error Handling
-
-The SPDY framing layer has only two types of errors, and they are always handled
-consistently. Any reference in this specification to "issue a session error"
-refers to [Section
-2.4.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.1-Session-Error-Handling).
-Any reference to "issue a stream error" refers to [Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling).
-
-### 2.4.1 Session Error Handling
-
-A session error is any error which prevents further processing of the framing
-layer or which corrupts the session compression state. When a session error
-occurs, the endpoint encountering the error MUST first send a GOAWAY ([Section
-2.6.6](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#GOAWAY))
-frame with the stream id of most recently received stream from the remote
-endpoint, and the error code for why the session is terminating. After sending
-the GOAWAY frame, the endpoint MUST close the TCP connection.
-
-Note that the session compression state is dependent upon both endpoints always
-processing all compressed data. If an endpoint partially processes a frame
-containing compressed data without updating compression state properly, future
-control frames which use compression will be always be errored. Implementations
-SHOULD always try to process compressed data so that errors which could be
-handled as stream errors do not become session errors.
-
-Note that because this GOAWAY is sent during a session error case, it is
-possible that the GOAWAY will not be reliably received by the receiving
-endpoint. It is a best-effort attempt to communicate with the remote about why
-the session is going down.
-
-### 2.4.2 Stream Error Handling
-
-A stream error is an error related to a specific stream-id which does not affect
-processing of other streams at the framing layer. Upon a stream error, the
-endpoint MUST send a RST_STREAM ([Section
-2.6.3](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.3-RST_STREAM)) frame
-which contains the stream id of the stream where the error occurred and the
-error status which caused the error. After sending the RST_STREAM, the stream is
-closed to the sending endpoint. After sending the RST_STREAM, if the sender
-receives any frames other than a RST_STREAM for that stream id, it will result
-in sending additional RST_STREAM frames. An endpoint MUST NOT send a RST_STREAM
-in response to an RST_STREAM, as doing so would lead to RST_STREAM loops.
-Sending a RST_STREAM does not cause the SPDY session to be closed.
-
-If an endpoint has multiple RST_STREAM frames to send in succession for the same
-stream-id and the same error code, it MAY coalesce them into a single RST_STREAM
-frame. (This can happen if a stream is closed, but the remote sends multiple
-data frames. There is no reason to send a RST_STREAM for each frame in
-succession).
-
-## 2.5 Data flow
-
-Because TCP provides a single stream of data on which SPDY multiplexes multiple
-logical streams, clients and servers must intelligently interleave data messages
-for concurrent sessions.
-
-## 2.6 Control frame types
-
-### 2.6.1 SYN_STREAM
-
-The SYN_STREAM control frame allows the sender to asynchronously create a stream
-between the endpoints. See Stream Creation ([Section
-2.3.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.2-Stream-creation))
-
-+------------------------------------+ |1| version | 1 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ |X| Associated-To-Stream-ID (31bits) |
-+------------------------------------+ | Pri|Unused | Slot | |
-+-------------------+ | | Number of Name/Value pairs (int32) | &lt;+
-+------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- ([Section
- 2.3.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.6-Stream-half-close))
- state.
-* 0x02 = FLAG_UNIDIRECTIONAL - a stream created with this flag puts
- the recipient in the half-closed ([Section
- 2.3.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.6-Stream-half-close))
- state.
-
-Length: The length is the number of bytes which follow the length field in the
-frame. For SYN_STREAM frames, this is 10 bytes plus the length of the compressed
-Name/Value block.
-
-Stream-ID: The 31-bit identifier for this stream. This stream-id will be used in
-frames which are part of this stream.
-
-Associated-To-Stream-ID: The 31-bit identifier for a stream which this stream is
-associated to. If this stream is independent of all other streams, it should be
-0.
-
-Priority: A 3-bit priority ([Section
-2.3.3](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.3-Stream-priority))
-field.
-
-Unused: 5 bits of unused space, reserved for future use.
-
-Slot: An 8 bit unsigned integer specifying the index in the server's CREDENTIAL
-vector of the client certificate to be used for this request. see CREDENTIAL
-frame ([Section
-2.6.9](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.9-CREDENTIAL)). The
-value 0 means no client certificate should be associated with this stream.
-
-Name/Value Header Block: A set of name/value pairs carried as part of the
-SYN_STREAM. see Name/Value Header Block ([Section
-2.6.10](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.10-Name-Value-Header-Block)).
-
-If an endpoint receives a SYN_STREAM which is larger than the implementation
-supports, it MAY send a RST_STREAM with error code FRAME_TOO_LARGE. All
-implementations MUST support the minimum size limits defined in the Control
-Frames section ([Section
-2.2.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.1-Control-frames)).
-
-### 2.6.2 SYN_REPLY
-
-SYN_REPLY indicates the acceptance of a stream creation by the recipient of a
-SYN_STREAM frame.
-
-+------------------------------------+ |1| version | 2 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-&lt;+ +------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- ([Section
- 2.3.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.6-Stream-half-close))
- state.
-
-Length: The length is the number of bytes which follow the length field in the
-frame. For SYN_REPLY frames, this is 4 bytes plus the length of the compressed
-Name/Value block.
-
-Stream-ID: The 31-bit identifier for this stream.
-
-If an endpoint receives multiple SYN_REPLY frames for the same active stream ID,
-it MUST issue a stream error ([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with the error code STREAM_IN_USE.
-
-Name/Value Header Block: A set of name/value pairs carried as part of the
-SYN_STREAM. see Name/Value Header Block ([Section
-2.6.10](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.10-Name-Value-Header-Block)).
-
-If an endpoint receives a SYN_REPLY which is larger than the implementation
-supports, it MAY send a RST_STREAM with error code FRAME_TOO_LARGE. All
-implementations MUST support the minimum size limits defined in the Control
-Frames section ([Section
-2.2.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.2.1-Control-frames)).
-
-### 2.6.3 RST_STREAM
-
-The RST_STREAM frame allows for abnormal termination of a stream. When sent by
-the creator of a stream, it indicates the creator wishes to cancel the stream.
-When sent by the recipient of a stream, it indicates an error or that the
-recipient did not want to accept the stream, so the stream should be closed.
-
-+----------------------------------+ |1| version | 3 |
-+----------------------------------+ | Flags (8) | 8 |
-+----------------------------------+ |X| Stream-ID (31bits) |
-+----------------------------------+ | Status code |
-+----------------------------------+
-
-Flags: Flags related to this frame. RST_STREAM does not define any flags. This
-value must be 0.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. For RST_STREAM control frames, this value is always 8.
-
-Stream-ID: The 31-bit identifier for this stream.
-
-Status code: (32 bits) An indicator for why the stream is being terminated.The
-following status codes are defined:
-
-* 1 - PROTOCOL_ERROR. This is a generic error, and should only be used
- if a more specific error is not available.
-* 2 - INVALID_STREAM. This is returned when a frame is received for a
- stream which is not active.
-* 3 - REFUSED_STREAM. Indicates that the stream was refused before any
- processing has been done on the stream.
-* 4 - UNSUPPORTED_VERSION. Indicates that the recipient of a stream
- does not support the SPDY version requested.
-* 5 - CANCEL. Used by the creator of a stream to indicate that the
- stream is no longer needed.
-* 6 - INTERNAL_ERROR. This is a generic error which can be used when
- the implementation has internally failed, not due to anything in the
- protocol.
-* 7 - FLOW_CONTROL_ERROR. The endpoint detected that its peer violated
- the flow control protocol.
-* 8 - STREAM_IN_USE. The endpoint received a SYN_REPLY for a stream
- already open.
-* 9 - STREAM_ALREADY_CLOSED. The endpoint received a data or SYN_REPLY
- frame for a stream which is half closed.
-* 10 - INVALID_CREDENTIALS. The server received a request for a
- resource whose origin does not have valid credentials in the client
- certificate vector.
-* 11 - FRAME_TOO_LARGE. The endpoint received a frame which this
- implementation could not support. If FRAME_TOO_LARGE is sent for a
- SYN_STREAM, HEADERS, or SYN_REPLY frame without fully processing the
- compressed portion of those frames, then the compression state will
- be out-of-sync with the other endpoint. In this case, senders of
- FRAME_TOO_LARGE MUST close the session.
-* Note: 0 is not a valid status code for a RST_STREAM.
-
-After receiving a RST_STREAM on a stream, the recipient must not send additional
-frames for that stream, and the stream moves into the closed state.
-
-### 2.6.4 SETTINGS
-
-A SETTINGS frame contains a set of id/value pairs for communicating
-configuration data about how the two endpoints may communicate. SETTINGS frames
-can be sent at any time by either endpoint, are optionally sent, and are fully
-asynchronous. When the server is the sender, the sender can request that
-configuration data be persisted by the client across SPDY sessions and returned
-to the server in future communications.
-
-Persistence of SETTINGS ID/Value pairs is done on a per origin/IP pair (the
-"origin" is the set of scheme, host, and port from the URI. See RFC6454). That
-is, when a client connects to a server, and the server persists settings within
-the client, the client SHOULD return the persisted settings on future
-connections to the same origin AND IP address and TCP port. Clients MUST NOT
-request servers to use the persistence features of the SETTINGS frames, and
-servers MUST ignore persistence related flags sent by a client.
-
-+----------------------------------+ |1| version | 4 |
-+----------------------------------+ | Flags (8) | Length (24 bits) |
-+----------------------------------+ | Number of entries |
-+----------------------------------+ | ID/Value Pairs | | ... |
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a SETTINGS message is 4.
-
-Flags: FLAG_SETTINGS_CLEAR_SETTINGS (0x1): When set, the client should clear any
-previously persisted SETTINGS ID/Value pairs. If this frame contains ID/Value
-pairs with the FLAG_SETTINGS_PERSIST_VALUE set, then the client will first clear
-its existing, persisted settings, and then persist the values with the flag set
-which are contained within this frame. Because persistence is only implemented
-on the client, this flag can only be used when the sender is the server.
-
-Length: An unsigned 24-bit value representing the number of bytes after the
-length field. The total size of a SETTINGS frame is 8 bytes + length.
-
-Number of entries: A 32-bit value representing the number of ID/value pairs in
-this message.
-
-Each ID/value pair is as follows:
-
-+----------------------------------+ | Flags(8) | ID (24 bits) |
-+----------------------------------+ | Value (32 bits) |
-+----------------------------------+
-
-Flags: An 8 bit value. Defined Flags:
-
-* FLAG_SETTINGS_PERSIST_VALUE (0x1): When set, the sender of this
- SETTINGS frame is requesting that the recipient persist the ID/Value
- and return it in future SETTINGS frames sent from the sender to this
- recipient. Because persistence is only implemented on the client,
- this flag is only sent by the server.
-* FLAG_SETTINGS_PERSISTED (0x2): When set, the sender is notifying the
- recipient that this ID/Value pair was previously sent to the sender
- by the recipient with the FLAG_SETTINGS_PERSIST_VALUE, and the
- sender is returning it. Because persistence is only implemented on
- the client, this flag is only sent by the client.
-
-ID: 24-bits in network byte order. Defined IDs:
-
-* 1 - SETTINGS_UPLOAD_BANDWIDTH allows the sender to send its expected
- upload bandwidth on this channel. This number is an estimate. The
- value should be the integral number of kilobytes per second that the
- sender predicts as an expected maximum upload channel capacity.
-* 2 - SETTINGS_DOWNLOAD_BANDWIDTH allows the sender to send its
- expected download bandwidth on this channel. This number is an
- estimate. The value should be the integral number of kilobytes per
- second that the sender predicts as an expected maximum download
- channel capacity.
-* 3 - SETTINGS_ROUND_TRIP_TIME allows the sender to send its expected
- round-trip-time on this channel. The round trip time is defined as
- the minimum amount of time to send a control frame from this client
- to the remote and receive a response. The value is represented in
- milliseconds.
-* 4 - SETTINGS_MAX_CONCURRENT_STREAMS allows the sender to inform the
- remote endpoint the maximum number of concurrent streams which it
- will allow. By default there is no limit. For implementors it is
- recommended that this value be no smaller than 100.
-* 5 - SETTINGS_CURRENT_CWND allows the sender to inform the remote
- endpoint of the current TCP CWND value.
-* 6 - SETTINGS_DOWNLOAD_RETRANS_RATE allows the sender to inform the
- remote endpoint the retransmission rate (bytes retransmitted / total
- bytes transmitted).
-* 7 - SETTINGS_INITIAL_WINDOW_SIZE allows the sender to inform the
- remote endpoint the initial window size (in bytes) for new streams.
-* 8 - SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE allows the server to
- inform the client if the new size of the client certificate vector.
-
-Value: A 32-bit value.
-
-The message is intentionally extensible for future information which may improve
-client-server communications. The sender does not need to send every type of
-ID/value. It must only send those for which it has accurate values to convey.
-When multiple ID/value pairs are sent, they should be sent in order of lowest id
-to highest id. A single SETTINGS frame MUST not contain multiple values for the
-same ID. If the recipient of a SETTINGS frame discovers multiple values for the
-same ID, it MUST ignore all values except the first one.
-
-A server may send multiple SETTINGS frames containing different ID/Value pairs.
-When the same ID/Value is sent twice, the most recent value overrides any
-previously sent values. If the server sends IDs 1, 2, and 3 with the
-FLAG_SETTINGS_PERSIST_VALUE in a first SETTINGS frame, and then sends IDs 4 and
-5 with the FLAG_SETTINGS_PERSIST_VALUE, when the client returns the persisted
-state on its next SETTINGS frame, it SHOULD send all 5 settings (1, 2, 3, 4, and
-5 in this example) to the server.
-
-### 2.6.5 PING
-
-The PING control frame is a mechanism for measuring a minimal round-trip time
-from the sender. It can be sent from the client or the server. Recipients of a
-PING frame should send an identical frame to the sender as soon as possible (if
-there is other pending data waiting to be sent, PING should take highest
-priority). Each ping sent by a sender should use a unique ID.
-
-+----------------------------------+ |1| version | 6 |
-+----------------------------------+ | 0 (flags) | 4 (length) |
-+----------------------------------| | 32-bit ID |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a PING message is 6.
-
-Length: This frame is always 4 bytes long.
-
-ID: A unique ID for this ping, represented as an unsigned 32 bit value. When the
-client initiates a ping, it must use an odd numbered ID. When the server
-initiates a ping, it must use an even numbered ping. Use of odd/even IDs is
-required in order to avoid accidental looping on PINGs (where each side
-initiates an identical PING at the same time).
-
-Note: If a sender uses all possible PING ids (e.g. has sent all 2^31 possible
-IDs), it can wrap and start re-using IDs.
-
-If a server receives an even numbered PING which it did not initiate, it must
-ignore the PING. If a client receives an odd numbered PING which it did not
-initiate, it must ignore the PING.
-
-### 2.6.6 GOAWAY
-
-The GOAWAY control frame is a mechanism to tell the remote side of the
-connection to stop creating streams on this session. It can be sent from the
-client or the server. Once sent, the sender will not respond to any new
-SYN_STREAMs on this session. Recipients of a GOAWAY frame must not send
-additional streams on this session, although a new session can be established
-for new streams. The purpose of this message is to allow an endpoint to
-gracefully stop accepting new streams (perhaps for a reboot or maintenance),
-while still finishing processing of previously established streams.
-
-There is an inherent race condition between an endpoint sending SYN_STREAMs and
-the remote sending a GOAWAY message. To deal with this case, the GOAWAY contains
-a last-stream-id indicating the stream-id of the last stream which was created
-on the sending endpoint in this session. If the receiver of the GOAWAY sent new
-SYN_STREAMs for sessions after this last-stream-id, they were not processed by
-the server and the receiver may treat the stream as though it had never been
-created at all (hence the receiver may want to re-create the stream later on a
-new session).
-
-Endpoints should always send a GOAWAY message before closing a connection so
-that the remote can know whether a stream has been partially processed or not.
-(For example, if an HTTP client sends a POST at the same time that a server
-closes a connection, the client cannot know if the server started to process
-that POST request if the server does not send a GOAWAY frame to indicate where
-it stopped working).
-
-After sending a GOAWAY message, the sender must ignore all SYN_STREAM frames for
-new streams.
-
-+----------------------------------+ |1| version | 7 |
-+----------------------------------+ | 0 (flags) | 8 (length) |
-+----------------------------------| |X| Last-good-stream-ID (31 bits) |
-+----------------------------------+ | Status code |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a GOAWAY message is 7.
-
-Length: This frame is always 8 bytes long.
-
-Last-good-stream-Id: The last stream id which was accepted by the sender of the
-GOAWAY message. If no streams were replied to, this value MUST be 0.
-
-Status: The reason for closing the session.
-
-* 0 - OK. This is a normal session teardown.
-* 1 - PROTOCOL_ERROR. This is a generic error, and should only be used
- if a more specific error is not available.
-* 2 - INTERNAL_ERROR. This is a generic error which can be used when
- the implementation has internally failed, not due to anything in the
- protocol.
-
-### 2.6.7 HEADERS
-
-The HEADERS frame augments a stream with additional headers. It may be
-optionally sent on an existing stream at any time. Specific application of the
-headers in this frame is application-dependent. The name/value header block
-within this frame is compressed.
-
-+------------------------------------+ |1| version | 8 |
-+------------------------------------+ | Flags (8) | Length (24 bits) |
-+------------------------------------+ |X| Stream-ID (31bits) |
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-&lt;+ +------------------------------------+ | | Length of name (int32) | | This
-section is the "Name/Value +------------------------------------+ | Header
-Block", and is compressed. | Name (string) | |
-+------------------------------------+ | | Length of value (int32) | |
-+------------------------------------+ | | Value (string) | |
-+------------------------------------+ | | (repeats) | &lt;+
-
-Flags: Flags related to this frame. Valid flags are:
-
-* 0x01 = FLAG_FIN - marks this frame as the last frame to be
- transmitted on this stream and puts the sender in the half-closed
- ([Section
- 2.3.6](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.3.6-Stream-half-close))
- state.
-
-Length: An unsigned 24 bit value representing the number of bytes after the
-length field. The minimum length of the length field is 4 (when the number of
-name value pairs is 0).
-
-Stream-ID: The stream this HEADERS block is associated with.
-
-Name/Value Header Block: A set of name/value pairs carried as part of the
-SYN_STREAM. see Name/Value Header Block ([Section
-2.6.10](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.6.10-Name-Value-Header-Block)).
-
-### 2.6.8 WINDOW_UPDATE
-
-The WINDOW_UPDATE control frame is used to implement per stream flow control in
-SPDY. Flow control in SPDY is per hop, that is, only between the two endpoints
-of a SPDY connection. If there are one or more intermediaries between the client
-and the origin server, flow control signals are not explicitly forwarded by the
-intermediaries. (However, throttling of data transfer by any recipient may have
-the effect of indirectly propagating flow control information upstream back to
-the original sender.) Flow control only applies to the data portion of data
-frames. Recipients must buffer all control frames. If a recipient fails to
-buffer an entire control frame, it MUST issue a stream error ([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with the status code FLOW_CONTROL_ERROR for the stream.
-
-Flow control in SPDY is implemented by a data transfer window kept by the sender
-of each stream. The data transfer window is a simple uint32 that indicates how
-many bytes of data the sender can transmit. After a stream is created, but
-before any data frames have been transmitted, the sender begins with the initial
-window size. This window size is a measure of the buffering capability of the
-recipient. The sender must not send a data frame with data length greater than
-the transfer window size. After sending each data frame, the sender decrements
-its transfer window size by the amount of data transmitted. When the window size
-becomes less than or equal to 0, the sender must pause transmitting data frames.
-At the other end of the stream, the recipient sends a WINDOW_UPDATE control back
-to notify the sender that it has consumed some data and freed up buffer space to
-receive more data.
-
-+----------------------------------+ |1| version | 9 |
-+----------------------------------+ | 0 (flags) | 8 (length) |
-+----------------------------------+ |X| Stream-ID (31-bits) |
-+----------------------------------+ |X| Delta-Window-Size (31-bits) |
-+----------------------------------+
-
-Control bit: The control bit is always 1 for this message.
-
-Version: The SPDY version number.
-
-Type: The message type for a WINDOW_UPDATE message is 9.
-
-Length: The length field is always 8 for this frame (there are 8 bytes after the
-length field).
-
-Stream-ID: The stream ID that this WINDOW_UPDATE control frame is for.
-
-Delta-Window-Size: The additional number of bytes that the sender can transmit
-in addition to existing remaining window size. The legal range for this field is
-1 to 2^31 - 1 (0x7fffffff) bytes.
-
-The window size as kept by the sender must never exceed 2^31 (although it can
-become negative in one special case). If a sender receives a WINDOW_UPDATE that
-causes the its window size to exceed this limit, it must send RST_STREAM with
-status code FLOW_CONTROL_ERROR to terminate the stream.
-
-When a SPDY connection is first established, the default initial window size for
-all streams is 64KB. An endpoint can use the SETTINGS control frame to adjust
-the initial window size for the connection. That is, its peer can start out
-using the 64KB default initial window size when sending data frames before
-receiving the SETTINGS. Because SETTINGS is asynchronous, there may be a race
-condition if the recipient wants to decrease the initial window size, but its
-peer immediately sends 64KB on the creation of a new connection, before waiting
-for the SETTINGS to arrive. This is one case where the window size kept by the
-sender will become negative. Once the sender detects this condition, it must
-stop sending data frames and wait for the recipient to catch up. The recipient
-has two choices:
-
-* immediately send RST_STREAM with FLOW_CONTROL_ERROR status code.
-* allow the head of line blocking (as there is only one stream for the
- session and the amount of data in flight is bounded by the default
- initial window size), and send WINDOW_UPDATE as it consumes data.
-
-In the case of option 2, both sides must compute the window size based on the
-initial window size in the SETTINGS. For example, if the recipient sets the
-initial window size to be 16KB, and the sender sends 64KB immediately on
-connection establishment, the sender will discover its window size is -48KB on
-receipt of the SETTINGS. As the recipient consumes the first 16KB, it must send
-a WINDOW_UPDATE of 16KB back to the sender. This interaction continues until the
-sender's window size becomes positive again, and it can resume transmitting data
-frames.
-
-After the recipient reads in a data frame with FLAG_FIN that marks the end of
-the data stream, it should not send WINDOW_UPDATE frames as it consumes the last
-data frame. A sender should ignore all the WINDOW_UPDATE frames associated with
-the stream after it send the last frame for the stream.
-
-The data frames from the sender and the WINDOW_UPDATE frames from the recipient
-are completely asynchronous with respect to each other. This property allows a
-recipient to aggressively update the window size kept by the sender to prevent
-the stream from stalling.
-
-### 2.6.9 CREDENTIAL
-
-The CREDENTIAL control frame is used by the client to send additional client
-certificates to the server. A SPDY client may decide to send requests for
-resources from different origins on the same SPDY session if it decides that
-that server handles both origins. For example if the IP address associated with
-both hostnames matches and the SSL server certificate presented in the initial
-handshake is valid for both hostnames. However, because the SSL connection can
-contain at most one client certificate, the client needs a mechanism to send
-additional client certificates to the server.
-
-The server is required to maintain a vector of client certificates associated
-with a SPDY session. When the client needs to send a client certificate to the
-server, it will send a CREDENTIAL frame that specifies the index of the slot in
-which to store the certificate as well as proof that the client posesses the
-corresponding private key. The initial size of this vector must be 8. If the
-client provides a client certificate during the first TLS handshake, the
-contents of this certificate must be copied into the first slot (index 1) in the
-CREDENTIAL vector, though it may be overwritten by subsequent CREDENTIAL frames.
-The server must exclusively use the CREDENTIAL vector when evaluating the client
-certificates associated with an origin. The server may change the size of this
-vector by sending a SETTINGS frame with the setting
-SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE value specified. In the event that the
-new size is smaller than the current size, truncation occurs preserving
-lower-index slots as possible.
-
-TLS renegotiation with client authentication is incompatible with SPDY given the
-multiplexed nature of SPDY. Specifically, imagine that the client has 2 requests
-outstanding to the server for two different pages (in different tabs). When the
-renegotiation + client certificate request comes in, the browser is unable to
-determine which resource triggered the client certificate request, in order to
-prompt the user accordingly.
-
-+----------------------------------+ |1|000000000000011|0000000000001010|
-+----------------------------------+ | flags (8) | Length (24 bits) |
-+----------------------------------+ | Slot (16 bits) | | +-----------------+ |
-| Proof Length (32 bits) | +----------------------------------+ | Proof |
-+----------------------------------+ &lt;+ | Certificate Length (32 bits) | |
-+----------------------------------+ | Repeated until end of frame | Certificate
-| | +----------------------------------+ &lt;+
-
-Slot: The index in the server's client certificate vector where this certificate
-should be stored. If there is already a certificate stored at this index, it
-will be overwritten. The index is one based, not zero based; zero is an invalid
-slot index.
-
-Proof: Cryptographic proof that the client has possession of the private key
-associated with the certificate. The format is a TLS digitally-signed element
-(http://tools.ietf.org/html/rfc5246#section-4.7). The signature algorithm must
-be the same as that used in the CertificateVerify message. However, since the
-MD5+SHA1 signature type used in TLS 1.0 connections can not be correctly encoded
-in a digitally-signed element, SHA1 must be used when MD5+SHA1 was used in the
-SSL connection. The signature is calculated over a 32 byte TLS extractor value
-(http://tools.ietf.org/html/rfc5705) with a label of "EXPORTER SPDY certificate
-proof" using the empty string as context. ForRSA certificates the signature
-would be a PKCS#1 v1.5 signature. For ECDSA, it would be an ECDSA-Sig-Value
-(http://tools.ietf.org/html/rfc5480#appendix-A). For a 1024-bit RSA key, the
-CREDENTIAL message would be ~500 bytes.
-
-Certificate: The certificate chain, starting with the leaf certificate. Each
-certificate must be encoded as a 32 bit length, followed by a DER encoded
-certificate. The certificate must be of the same type (RSA, ECDSA, etc) as the
-client certificate associated with the SSL connection.
-
-If the server receives a request for a resource with unacceptable credential
-(either missing or invalid), it must reply with a RST_STREAM frame with the
-status code INVALID_CREDENTIALS. Upon receipt of a RST_STREAM frame with
-INVALID_CREDENTIALS, the client should initiate a new stream directly to the
-requested origin and resend the request. Note, SPDY does not allow the server to
-request different client authentication for different resources in the same
-origin.
-
-If the server receives an invalid CREDENTIAL frame, it MUST respond with a
-GOAWAY frame and shutdown the session.
-
-### 2.6.10 Name/Value Header Block
-
-The Name/Value Header Block is found in the SYN_STREAM, SYN_REPLY and HEADERS
-control frames, and shares a common format:
-
-+------------------------------------+ | Number of Name/Value pairs (int32) |
-+------------------------------------+ | Length of name (int32) |
-+------------------------------------+ | Name (string) |
-+------------------------------------+ | Length of value (int32) |
-+------------------------------------+ | Value (string) |
-+------------------------------------+ | (repeats) |
-
-Number of Name/Value pairs: The number of repeating name/value pairs following
-this field.
-
-List of Name/Value pairs:
-
-* Length of Name: a 32-bit value containing the number of octets in
- the name field. Note that in practice, this length must not exceed
- 2^24, as that is the maximum size of a SPDY frame.
-* Name: 0 or more octets, 8-bit sequences of data, excluding 0.
-* Length of Value: a 32-bit value containing the number of octets in
- the value field. Note that in practice, this length must not exceed
- 2^24, as that is the maximum size of a SPDY frame.
-* Value: 0 or more octets, 8-bit sequences of data, excluding 0.
-
-Each header name must have at least one value. Header names are encoded using
-the [US-ASCII character
-set](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#ASCII)
-\[ASCII\] and must be all lower case. The length of each name must be greater
-than zero. A recipient of a zero-length name MUST issue a stream error ([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with the status code PROTOCOL_ERROR for the stream-id.
-
-Duplicate header names are not allowed. To send two identically named headers,
-send a header with two values, where the values are separated by a single NUL
-(0) byte. A header value can either be empty (e.g. the length is zero) or it can
-contain multiple, NUL-separated values, each with length greater than zero. The
-value never starts nor ends with a NUL character. Recipients of illegal value
-fields MUST issue a stream error ([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with the status code PROTOCOL_ERROR for the stream-id.
-
-#### 2.6.10.1 Compression
-
-The Name/Value Header Block is a section of the SYN_STREAM, SYN_REPLY, and
-HEADERS frames used to carry header meta-data. This block is always compressed
-using zlib compression. Within this specification, any reference to 'zlib' is
-referring to the [ZLIB Compressed Data Format Specification Version 3.3 as part
-of
-RFC1950.](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC1950)
-
-For each HEADERS compression instance, the initial state is initialized using
-the following
-[dictionary](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#UDELCOMPRESSION)
-\[UDELCOMPRESSION\]:
-
-const unsigned char SPDY_dictionary_txt\[\] = { 0x00, 0x00, 0x00, 0x07,
-0x6f, 0x70, 0x74, 0x69, \\\\ - - - - o p t i 0x6f, 0x6e, 0x73, 0x00, 0x00,
-0x00, 0x04, 0x68, \\\\ o n s - - - - h 0x65, 0x61, 0x64, 0x00, 0x00, 0x00,
-0x04, 0x70, \\\\ e a d - - - - p 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03,
-0x70, \\\\ o s t - - - - p 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65,
-\\\\ u t - - - - d e 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05, \\\\ l e
-t e - - - - 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00, \\\\ t r a c e -
-- - 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00, \\\\ - a c c e p t -
-0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, \\\\ - - - a c c e p 0x74,
-0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, \\\\ t - c h a r s e 0x74, 0x00,
-0x00, 0x00, 0x0f, 0x61, 0x63, 0x63, \\\\ t - - - - a c c 0x65, 0x70, 0x74,
-0x2d, 0x65, 0x6e, 0x63, 0x6f, \\\\ e p t - e n c o 0x64, 0x69, 0x6e, 0x67,
-0x00, 0x00, 0x00, 0x0f, \\\\ d i n g - - - - 0x61, 0x63, 0x63, 0x65, 0x70,
-0x74, 0x2d, 0x6c, \\\\ a c c e p t - l 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
-0x65, 0x00, \\\\ a n g u a g e - 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65,
-0x70, \\\\ - - - a c c e p 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73,
-\\\\ t - r a n g e s 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00, \\\\ - -
-- - a g e - 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, \\\\ - - - a l l
-o w 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68, \\\\ - - - - a u t h
-0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, \\\\ o r i z a t i o 0x6e,
-0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63, \\\\ n - - - - c a c 0x68, 0x65,
-0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, \\\\ h e - c o n t r 0x6f, 0x6c, 0x00,
-0x00, 0x00, 0x0a, 0x63, 0x6f, \\\\ o l - - - - c o 0x6e, 0x6e, 0x65, 0x63,
-0x74, 0x69, 0x6f, 0x6e, \\\\ n n e c t i o n 0x00, 0x00, 0x00, 0x0c, 0x63,
-0x6f, 0x6e, 0x74, \\\\ - - - - c o n t 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61,
-0x73, 0x65, \\\\ e n t - b a s e 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e,
-0x74, \\\\ - - - - c o n t 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f,
-\\\\ e n t - e n c o 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, \\\\ d i
-n g - - - - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, \\\\ c o n t e n
-t - 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, \\\\ l a n g u a g e
-0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74, \\\\ - - - - c o n t 0x65,
-0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, \\\\ e n t - l e n g 0x74, 0x68,
-0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, \\\\ t h - - - - c o 0x6e, 0x74, 0x65,
-0x6e, 0x74, 0x2d, 0x6c, 0x6f, \\\\ n t e n t - l o 0x63, 0x61, 0x74, 0x69,
-0x6f, 0x6e, 0x00, 0x00, \\\\ c a t i o n - - 0x00, 0x0b, 0x63, 0x6f, 0x6e,
-0x74, 0x65, 0x6e, \\\\ - - c o n t e n 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00,
-0x00, 0x00, \\\\ t - m d 5 - - - 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
-0x74, \\\\ - c o n t e n t 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00,
-\\\\ - r a n g e - - 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, \\\\ - -
-c o n t e n 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, \\\\ t - t y p e
-- - 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00, \\\\ - - d a t e - -
-0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00, \\\\ - - e t a g - - 0x00,
-0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, \\\\ - - e x p e c t 0x00, 0x00,
-0x00, 0x07, 0x65, 0x78, 0x70, 0x69, \\\\ - - - - e x p i 0x72, 0x65, 0x73,
-0x00, 0x00, 0x00, 0x04, 0x66, \\\\ r e s - - - - f 0x72, 0x6f, 0x6d, 0x00,
-0x00, 0x00, 0x04, 0x68, \\\\ r o m - - - - h 0x6f, 0x73, 0x74, 0x00, 0x00,
-0x00, 0x08, 0x69, \\\\ o s t - - - - i 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63,
-0x68, 0x00, \\\\ f - m a t c h - 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d,
-0x6f, \\\\ - - - i f - m o 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73,
-\\\\ d i f i e d - s 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d, \\\\ i n
-c e - - - - 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, \\\\ i f - n o n
-e - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00, \\\\ m a t c h - - -
-0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67, \\\\ - i f - r a n g 0x65,
-0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d, \\\\ e - - - - i f - 0x75, 0x6e,
-0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, \\\\ u n m o d i f i 0x65, 0x64, 0x2d,
-0x73, 0x69, 0x6e, 0x63, 0x65, \\\\ e d - s i n c e 0x00, 0x00, 0x00, 0x0d,
-0x6c, 0x61, 0x73, 0x74, \\\\ - - - - l a s t 0x2d, 0x6d, 0x6f, 0x64, 0x69,
-0x66, 0x69, 0x65, \\\\ - m o d i f i e 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c,
-0x6f, 0x63, \\\\ d - - - - l o c 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00,
-0x00, \\\\ a t i o n - - - 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72,
-\\\\ - m a x - f o r 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00, \\\\ w a
-r d s - - - 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00, \\\\ - p r a g m
-a - 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79, \\\\ - - - p r o x y
-0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, \\\\ - a u t h e n t 0x69,
-0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, \\\\ i c a t e - - - 0x13, 0x70,
-0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, \\\\ - p r o x y - a 0x75, 0x74, 0x68,
-0x6f, 0x72, 0x69, 0x7a, 0x61, \\\\ u t h o r i z a 0x74, 0x69, 0x6f, 0x6e,
-0x00, 0x00, 0x00, 0x05, \\\\ t i o n - - - - 0x72, 0x61, 0x6e, 0x67, 0x65,
-0x00, 0x00, 0x00, \\\\ r a n g e - - - 0x07, 0x72, 0x65, 0x66, 0x65, 0x72,
-0x65, 0x72, \\\\ - r e f e r e r 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74,
-0x72, \\\\ - - - - r e t r 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00,
-\\\\ y - a f t e r - 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, \\\\ - -
-- s e r v e 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00, \\\\ r - - - - t
-e - 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, \\\\ - - - t r a i l
-0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72, \\\\ e r - - - - t r 0x61,
-0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, \\\\ a n s f e r - e 0x6e, 0x63,
-0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00, \\\\ n c o d i n g - 0x00, 0x00, 0x07,
-0x75, 0x70, 0x67, 0x72, 0x61, \\\\ - - - u p g r a 0x64, 0x65, 0x00, 0x00,
-0x00, 0x0a, 0x75, 0x73, \\\\ d e - - - - u s 0x65, 0x72, 0x2d, 0x61, 0x67,
-0x65, 0x6e, 0x74, \\\\ e r - a g e n t 0x00, 0x00, 0x00, 0x04, 0x76, 0x61,
-0x72, 0x79, \\\\ - - - - v a r y 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61,
-0x00, \\\\ - - - - v i a - 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69,
-\\\\ - - - w a r n i 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77, \\\\ n g
-- - - - w w 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, \\\\ w - a u t h
-e n 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, \\\\ t i c a t e - -
-0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, \\\\ - - m e t h o d 0x00,
-0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, \\\\ - - - - g e t - 0x00, 0x00,
-0x06, 0x73, 0x74, 0x61, 0x74, 0x75, \\\\ - - - s t a t u 0x73, 0x00, 0x00,
-0x00, 0x06, 0x32, 0x30, 0x30, \\\\ s - - - - 2 0 0 0x20, 0x4f, 0x4b, 0x00,
-0x00, 0x00, 0x07, 0x76, \\\\ - O K - - - - v 0x65, 0x72, 0x73, 0x69, 0x6f,
-0x6e, 0x00, 0x00, \\\\ e r s i o n - - 0x00, 0x08, 0x48, 0x54, 0x54, 0x50,
-0x2f, 0x31, \\\\ - - H T T P - 1 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75,
-0x72, \\\\ - 1 - - - - u r 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62,
-\\\\ l - - - - p u b 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73, \\\\ l i
-c - - - - s 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69, \\\\ e t - c o o
-k i 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65, \\\\ e - - - - k e e
-0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00, \\\\ p - a l i v e - 0x00,
-0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, \\\\ - - - o r i g i 0x6e, 0x31,
-0x30, 0x30, 0x31, 0x30, 0x31, 0x32, \\\\ n 1 0 0 1 0 1 2 0x30, 0x31, 0x32,
-0x30, 0x32, 0x32, 0x30, 0x35, \\\\ 0 1 2 0 2 2 0 5 0x32, 0x30, 0x36, 0x33,
-0x30, 0x30, 0x33, 0x30, \\\\ 2 0 6 3 0 0 3 0 0x32, 0x33, 0x30, 0x33, 0x33,
-0x30, 0x34, 0x33, \\\\ 2 3 0 3 3 0 4 3 0x30, 0x35, 0x33, 0x30, 0x36, 0x33,
-0x30, 0x37, \\\\ 0 5 3 0 6 3 0 7 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34,
-0x30, \\\\ 4 0 2 4 0 5 4 0 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34,
-\\\\ 6 4 0 7 4 0 8 4 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31, \\\\ 0 9
-4 1 0 4 1 1 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31, \\\\ 4 1 2 4 1 3
-4 1 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34, \\\\ 4 4 1 5 4 1 6 4
-0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34, \\\\ 1 7 5 0 2 5 0 4 0x35,
-0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e, \\\\ 5 0 5 2 0 3 - N 0x6f, 0x6e,
-0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, \\\\ o n - A u t h o 0x72, 0x69, 0x74,
-0x61, 0x74, 0x69, 0x76, 0x65, \\\\ r i t a t i v e 0x20, 0x49, 0x6e, 0x66,
-0x6f, 0x72, 0x6d, 0x61, \\\\ - I n f o r m a 0x74, 0x69, 0x6f, 0x6e, 0x32,
-0x30, 0x34, 0x20, \\\\ t i o n 2 0 4 - 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e,
-0x74, 0x65, \\\\ N o - C o n t e 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d,
-0x6f, \\\\ n t 3 0 1 - M o 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d,
-\\\\ v e d - P e r m 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34, \\\\ a n
-e n t l y 4 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, \\\\ 0 0 - B a d
-- R 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30, \\\\ e q u e s t 4 0
-0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, \\\\ 1 - U n a u t h 0x6f,
-0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30, \\\\ o r i z e d 4 0 0x33, 0x20,
-0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, \\\\ 3 - F o r b i d 0x64, 0x65, 0x6e,
-0x34, 0x30, 0x34, 0x20, 0x4e, \\\\ d e n 4 0 4 - N 0x6f, 0x74, 0x20, 0x46,
-0x6f, 0x75, 0x6e, 0x64, \\\\ o t - F o u n d 0x35, 0x30, 0x30, 0x20, 0x49,
-0x6e, 0x74, 0x65, \\\\ 5 0 0 - I n t e 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53,
-0x65, 0x72, \\\\ r n a l - S e r 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72,
-0x6f, \\\\ v e r - E r r o 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74,
-\\\\ r 5 0 1 - N o t 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, \\\\ - I
-m p l e m e 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20, \\\\ n t e d 5 0
-3 - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, \\\\ S e r v i c e -
-0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, \\\\ U n a v a i l a 0x62,
-0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46, \\\\ b l e J a n - F 0x65, 0x62,
-0x20, 0x4d, 0x61, 0x72, 0x20, 0x41, \\\\ e b - M a r - A 0x70, 0x72, 0x20,
-0x4d, 0x61, 0x79, 0x20, 0x4a, \\\\ p r - M a y - J 0x75, 0x6e, 0x20, 0x4a,
-0x75, 0x6c, 0x20, 0x41, \\\\ u n - J u l - A 0x75, 0x67, 0x20, 0x53, 0x65,
-0x70, 0x74, 0x20, \\\\ u g - S e p t - 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f,
-0x76, 0x20, \\\\ O c t - N o v - 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a,
-0x30, \\\\ D e c - 0 0 - 0 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e,
-\\\\ 0 - 0 0 - M o n 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, \\\\ - -
-T u e - - W 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c, \\\\ e d - - T h
-u - 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, \\\\ - F r i - - S a
-0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, \\\\ t - - S u n - - 0x47,
-0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b, \\\\ G M T c h u n k 0x65, 0x64,
-0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, \\\\ e d - t e x t - 0x68, 0x74, 0x6d,
-0x6c, 0x2c, 0x69, 0x6d, 0x61, \\\\ h t m l - i m a 0x67, 0x65, 0x2f, 0x70,
-0x6e, 0x67, 0x2c, 0x69, \\\\ g e - p n g - i 0x6d, 0x61, 0x67, 0x65, 0x2f,
-0x6a, 0x70, 0x67, \\\\ m a g e - j p g 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65,
-0x2f, 0x67, \\\\ - i m a g e - g 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c,
-0x69, \\\\ i f - a p p l i 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78,
-\\\\ c a t i o n - x 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, \\\\ m l
-- a p p l i 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, \\\\ c a t i o n
-- x 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c, \\\\ h t m l - x m l
-0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, \\\\ - t e x t - p l 0x61,
-0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74, \\\\ a i n - t e x t 0x2f, 0x6a,
-0x61, 0x76, 0x61, 0x73, 0x63, 0x72, \\\\ - j a v a s c r 0x69, 0x70, 0x74,
-0x2c, 0x70, 0x75, 0x62, 0x6c, \\\\ i p t - p u b l 0x69, 0x63, 0x70, 0x72,
-0x69, 0x76, 0x61, 0x74, \\\\ i c p r i v a t 0x65, 0x6d, 0x61, 0x78, 0x2d,
-0x61, 0x67, 0x65, \\\\ e m a x - a g e 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c,
-0x64, 0x65, \\\\ - g z i p - d e 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73,
-0x64, \\\\ f l a t e - s d 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65,
-\\\\ c h c h a r s e 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63, \\\\ t -
-u t f - 8 c 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69, \\\\ h a r s e t
-- i 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, \\\\ s o - 8 8 5 9 -
-0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a, \\\\ 1 - u t f - - - 0x2c,
-0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e \\\\ - e n q - 0 - };
-
-The entire contents of the name/value header block is compressed using zlib.
-There is a single zlib stream for all name value pairs in one direction on a
-connection. SPDY uses a SYNC_FLUSH between each compressed frame.
-
-Implementation notes: the compression engine can be tuned to favor speed or
-size. Optimizing for size increases memory use and CPU consumption. Because
-header blocks are generally small, implementors may want to reduce the
-window-size of the compression engine from the default 15bits (a 32KB window) to
-more like 11bits (a 2KB window). The exact setting is chosen by the compressor,
-the decompressor will work with any setting.
-
----
-
-# 3. HTTP Layering over SPDY
-
-SPDY is intended to be as compatible as possible with current web-based
-applications. This means that, from the perspective of the server business logic
-or application API, the features of HTTP are unchanged. To achieve this, all of
-the application request and response header semantics are preserved, although
-the syntax of conveying those semantics has changed. Thus, the rules from the
-[HTTP/1.1 specification in
-RFC2616](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2616)
-apply with the changes in the sections below.
-
-## 3.1 Connection Management
-
-Clients SHOULD NOT open more than one SPDY session to a given
-[origin](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-concurrently.
-
-Note that it is possible for one SPDY session to be finishing (e.g. a GOAWAY
-message has been sent, but not all streams have finished), while another SPDY
-session is starting.
-
-### 3.1.1 Use of GOAWAY
-
-SPDY provides a GOAWAY message which can be used when closing a connection from
-either the client or server. Without a server GOAWAY message, HTTP has a race
-condition where the client sends a request (a new SYN_STREAM) just as the server
-is closing the connection, and the client cannot know if the server received the
-stream or not. By using the last-stream-id in the GOAWAY, servers can indicate
-to the client if a request was processed or not.
-
-Note that some servers will choose to send the GOAWAY and immediately terminate
-the connection without waiting for active streams to finish. The client will be
-able to determine this because SPDY streams are determinstically closed. This
-abrupt termination will force the client to heuristically decide whether to
-retry the pending requests. Clients always need to be capable of dealing with
-this case because they must deal with accidental connection termination cases,
-which are the same as the server never having sent a GOAWAY.
-
-More sophisticated servers will use GOAWAY to implement a graceful teardown.
-They will send the GOAWAY and provide some time for the active streams to finish
-before terminating the connection.
-
-If a SPDY client closes the connection, it should also send a GOAWAY message.
-This allows the server to know if any server-push streams were received by the
-client.
-
-If the endpoint closing the connection has not received any SYN_STREAMs from the
-remote, the GOAWAY will contain a last-stream-id of 0.
-
-## 3.2 HTTP Request/Response
-
-### 3.2.1 Request
-
-The client initiates a request by sending a SYN_STREAM frame. For requests which
-do not contain a body, the SYN_STREAM frame MUST set the FLAG_FIN, indicating
-that the client intends to send no further data on this stream. For requests
-which do contain a body, the SYN_STREAM will not contain the FLAG_FIN, and the
-body will follow the SYN_STREAM in a series of DATA frames. The last DATA frame
-will set the FLAG_FIN to indicate the end of the body.
-
-The SYN_STREAM Name/Value section will contain all of the HTTP headers which are
-associated with an HTTP request. The header block in SPDY is mostly unchanged
-from today's HTTP header block, with the following differences:
-
-* The first line of the request is unfolded into name/value pairs like
- other HTTP headers and MUST be present:
- * ":method" - the HTTP method for this request (e.g. "GET",
- "POST", "HEAD", etc)
- * ":path" - the url-path for this url with "/" prefixed. (See
- [RFC3986](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC3986)).
- For example, for "http://www.google.com/search?q=dogs" the path
- would be "/search?q=dogs".
- * ":version" - the HTTP version of this request (e.g. "HTTP/1.1")
-* In addition, the following two name/value pairs must also be present
- in every request:
- * ":host" - the hostport (See
- [RFC1738](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC1738))
- portion of the URL for this request (e.g.
- "www.google.com:1234"). This header is the same as the HTTP
- 'Host' header.
- * ":scheme" - the scheme portion of the URL for this request (e.g.
- "https"))
-* Header names are all lowercase.
-* The Connection, Host, Keep-Alive, Proxy-Connection, and
- Transfer-Encoding headers are not valid and MUST not be sent.
-* User-agents MUST support gzip compression. Regardless of the
- Accept-Encoding sent by the user-agent, the server may always send
- content encoded with gzip or deflate encoding.
-* If a server receives a request where the sum of the data frame
- payload lengths does not equal the size of the Content-Length
- header, the server MUST return a 400 (Bad Request) error.
-* POST-specific changes:
- * Although POSTs are inherently chunked, POST requests SHOULD also
- be accompanied by a Content-Length header. There are two reasons
- for this: First, it assists with upload progress meters for an
- improved user experience. But second, we know from early
- versions of SPDY that failure to send a content length header is
- incompatible with many existing HTTP server implementations.
- Existing user-agents do not omit the Content-Length header, and
- server implementations have come to depend upon this.
-
-The user-agent is free to prioritize requests as it sees fit. If the user-agent
-cannot make progress without receiving a resource, it should attempt to raise
-the priority of that resource. Resources such as images, SHOULD generally use
-the lowest priority.
-
-If a client sends a SYN_STREAM without all of the method, host, path, scheme,
-and version headers, the server MUST reply with a HTTP 400 Bad Request reply.
-
-### 3.2.2 Response
-
-The server responds to a client request with a SYN_REPLY frame. Symmetric to the
-client's upload stream, server will send data after the SYN_REPLY frame via a
-series of DATA frames, and the last data frame will contain the FLAG_FIN to
-indicate successful end-of-stream. If a response (like a 202 or 204 response)
-contains no body, the SYN_REPLY frame may contain the FLAG_FIN flag to indicate
-no further data will be sent on the stream.
-
-* The response status line is unfolded into name/value pairs like
- other HTTP headers and must be present:
- * ":status" - The HTTP response status code (e.g. "200" or "200
- OK")
- * ":version" - The HTTP response version (e.g. "HTTP/1.1")
-* All header names must be lowercase.
-* The Connection, Keep-Alive, Proxy-Connection, and Transfer-Encoding
- headers are not valid and MUST not be sent.
-* Responses MAY be accompanied by a Content-Length header for advisory
- purposes. (e.g. for UI progress meters)
-* If a client receives a response where the sum of the data frame
- payload lengths does not equal the size of the Content-Length
- header, the client MUST ignore the content length header.
-
-If a client receives a SYN_REPLY without a status or without a version header,
-the client must reply with a RST_STREAM frame indicating a PROTOCOL ERROR.
-
-### 3.2.3 Authentication
-
-When a client sends a request to an origin server that requires authentication,
-the server can reply with a "401 Unauthorized" response, and include a
-WWW-Authenticate challenge header that defines the authentication scheme to be
-used. The client then retries the request with an Authorization header
-appropriate to the specified authentication scheme.
-
-There are four options for proxy authentication, Basic, Digest, NTLM and
-Negotiate (SPNEGO). The first two options were defined in
-[RFC2617](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2617),
-and are stateless. The second two options were developed by Microsoft and
-specified in
-[RFC4559](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC4559),
-and are stateful; otherwise known as multi-round authentication, or connection
-authentication.
-
-#### 3.2.3.1 Stateless Authentication
-
-Stateless Authentication over SPDY is identical to how it is performed over
-HTTP. If multiple SPDY streams are concurrently sent to a single server, each
-will authenticate independently, similar to how two HTTP connections would
-independently authenticate to a proxy server.
-
-#### 3.2.3.2 Stateful Authentication
-
-Unfortunately, the stateful authentication mechanisms were implemented and
-defined in a such a way that directly violates RFC2617 - they do not include a
-"realm" as part of the request. This is problematic in SPDY because it makes it
-impossible for a client to disambiguate two concurrent server authentication
-challenges.
-
-To deal with this case, SPDY servers using Stateful Authentication MUST
-implement one of two changes:
-
-* Servers can add a "realm=&lt;desired realm&gt;" header so that the
- two authentication requests can be disambiguated and run
- concurrently. Unfortunately, given how these mechanisms work, this
- is probably not practical.
-* Upon sending the first stateful challenge response, the server MUST
- buffer and defer all further frames which are not part of completing
- the challenge until the challenge has completed. Completing the
- authentication challenge may take multiple round trips. Once the
- client receives a "401 Authenticate" response for a stateful
- authentication type, it MUST stop sending new requests to the server
- until the authentication has completed by receiving a non-401
- response on at least one stream.
-
-## 3.3 Server Push Transactions
-
-SPDY enables a server to send multiple replies to a client for a single request.
-The rationale for this feature is that sometimes a server knows that it will
-need to send multiple resources in response to a single request. Without server
-push features, the client must first download the primary resource, then
-discover the secondary resource(s), and request them. Pushing of resources
-avoids the round-trip delay, but also creates a potential race where a server
-can be pushing content which a user-agent is in the process of requesting. The
-following mechanics attempt to prevent the race condition while enabling the
-performance benefit.
-
-Browsers receiving a pushed response MUST validate that the server is authorized
-to push the URL using the [browser
-same-origin](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-policy. For example, a SPDY connection to www.foo.com is generally not permitted
-to push a response for www.evil.com.
-
-If the browser accepts a pushed response (e.g. it does not send a RST_STREAM),
-the browser MUST attempt to cache the pushed response in same way that it would
-cache any other response. This means validating the response headers and
-inserting into the cache.
-
-Because pushed responses have no request, they have no request headers
-associated with them. At the framing layer, SPDY pushed streams contain an
-"associated-stream-id" which indicates the requested stream for which the pushed
-stream is related. The pushed stream inherits all of the headers from the
-associated-stream-id with the exception of ":host", ":scheme", and ":path",
-which are provided as part of the pushed response stream headers. The browser
-MUST store these inherited and implied request headers with the cached resource.
-
-Implementation note: With server push, it is theoretically possible for servers
-to push unreasonable amounts of content or resources to the user-agent. Browsers
-MUST implement throttles to protect against unreasonable push attacks.
-
-### 3.3.1 Server implementation
-
-When the server intends to push a resource to the user-agent, it opens a new
-stream by sending a unidirectional SYN_STREAM. The SYN_STREAM MUST include an
-Associated-To-Stream-ID, and MUST set the FLAG_UNIDIRECTIONAL flag. The
-SYN_STREAM MUST include headers for ":scheme", ":host", ":path", which represent
-the URL for the resource being pushed. Subsequent headers may follow in HEADERS
-frames. The purpose of the association is so that the user-agent can
-differentiate which request induced the pushed stream; without it, if the
-user-agent had two tabs open to the same page, each pushing unique content under
-a fixed URL, the user-agent would not be able to differentiate the requests.
-
-The Associated-To-Stream-ID must be the ID of an existing, open stream. The
-reason for this restriction is to have a clear endpoint for pushed content. If
-the user-agent requested a resource on stream 11, the server replies on stream
-11. It can push any number of additional streams to the client before sending a
-FLAG_FIN on stream 11. However, once the originating stream is closed no further
-push streams may be associated with it. The pushed streams do not need to be
-closed (FIN set) before the originating stream is closed, they only need to be
-created before the originating stream closes.
-
-It is illegal for a server to push a resource with the Associated-To-Stream-ID
-of 0.
-
-To minimize race conditions with the client, the SYN_STREAM for the pushed
-resources MUST be sent prior to sending any content which could allow the client
-to discover the pushed resource and request it.
-
-The server MUST only push resources which would have been returned from a GET
-request.
-
-Note: If the server does not have all of the Name/Value Response headers
-available at the time it issues the HEADERS frame for the pushed resource, it
-may later use an additional HEADERS frame to augment the name/value pairs to be
-associated with the pushed stream. The subsequent HEADERS frame(s) must not
-contain a header for ':host', ':scheme', or ':path' (e.g. the server can't
-change the identity of the resource to be pushed). The HEADERS frame must not
-contain duplicate headers with a previously sent HEADERS frame. The server must
-send a HEADERS frame including the scheme/host/port headers before sending any
-data frames on the stream.
-
-### 3.3.2 Client implementation
-
-When fetching a resource the client has 3 possibilities:
-
-* the resource is not being pushed
-* the resource is being pushed, but the data has not yet arrived
-* the resource is being pushed, and the data has started to arrive
-
-When a SYN_STREAM and HEADERS frame which contains an Associated-To-Stream-ID is
-received, the client must not issue GET requests for the resource in the pushed
-stream, and instead wait for the pushed stream to arrive.
-
-If a client receives a server push stream with stream-id 0, it MUST issue a
-session error ([Section
-2.4.1](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.1-Session-Error-Handling))
-with the status code PROTOCOL_ERROR.
-
-When a client receives a SYN_STREAM from the server without a the ':host',
-':scheme', and ':path' headers in the Name/Value section, it MUST reply with a
-RST_STREAM with error code HTTP_PROTOCOL_ERROR.
-
-To cancel individual server push streams, the client can issue a stream error
-([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with error code CANCEL. Upon receipt, the server MUST stop sending on this
-stream immediately (this is an Abrupt termination).
-
-To cancel all server push streams related to a request, the client may issue a
-stream error ([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with error code CANCEL on the associated-stream-id. By cancelling that stream,
-the server MUST immediately stop sending frames for any streams with
-in-association-to for the original stream.
-
-If the server sends a HEADER frame containing duplicate headers with a previous
-HEADERS frame for the same stream, the client must issue a stream error
-([Section
-2.4.2](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-2.4.2-Stream-Error-Handling))
-with error code PROTOCOL ERROR.
-
-If the server sends a HEADERS frame after sending a data frame for the same
-stream, the client MAY ignore the HEADERS frame. Ignoring the HEADERS frame
-after a data frame prevents handling of HTTP's trailing headers
-(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.40).
-
----
-
-# 4. Design Rationale and Notes
-
-Authors' notes: The notes in this section have no bearing on the SPDY protocol
-as specified within this document, and none of these notes should be considered
-authoritative about how the protocol works. However, these notes may prove
-useful in future debates about how to resolve protocol ambiguities or how to
-evolve the protocol going forward. They may be removed before the final draft.
-
-## 4.1 Separation of Framing Layer and Application Layer
-
-Readers may note that this specification sometimes blends the framing layer
-([Section
-2](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#FramingLayer))
-with requirements of a specific application - HTTP ([Section
-3](/spdy/spdy-protocol/spdy-protocol-draft3#TOC-3.-HTTP-Layering-over-SPDY)).
-This is reflected in the request/response nature of the streams, the definition
-of the HEADERS and compression contexts which are very similar to HTTP, and
-other areas as well.
-
-This blending is intentional - the primary goal of this protocol is to create a
-low-latency protocol for use with HTTP. Isolating the two layers is convenient
-for description of the protocol and how it relates to existing HTTP
-implementations. However, the ability to reuse the SPDY framing layer is a non
-goal.
-
-## 4.2 Error handling - Framing Layer
-
-Error handling at the SPDY layer splits errors into two groups: Those that
-affect an individual SPDY stream, and those that do not.
-
-When an error is confined to a single stream, but general framing is in tact,
-SPDY attempts to use the RST_STREAM as a mechanism to invalidate the stream but
-move forward without aborting the connection altogether.
-
-For errors occuring outside of a single stream context, SPDY assumes the entire
-session is hosed. In this case, the endpoint detecting the error should initiate
-a connection close.
-
-## 4.3 One Connection Per Domain
-
-SPDY attempts to use fewer connections than other protocols have traditionally
-used. The rationale for this behavior is because it is very difficult to provide
-a consistent level of service (e.g. TCP slow-start), prioritization, or optimal
-compression when the client is connecting to the server through multiple
-channels.
-
-Through lab measurements, we have seen consistent latency benefits by using
-fewer connections from the client. The overall number of packets sent by SPDY
-can be as much as 40% less than HTTP. Handling large numbers of concurrent
-connections on the server also does become a scalability problem, and SPDY
-reduces this load.
-
-The use of multiple connections is not without benefit, however. Because SPDY
-multiplexes multiple, independent streams onto a single stream, it creates a
-potential for head-of-line blocking problems at the transport level. In tests so
-far, the negative effects of head-of-line blocking (especially in the presence
-of packet loss) is outweighed by the benefits of compression and prioritization.
-
-## 4.4 Fixed vs Variable Length Fields
-
-SPDY favors use of fixed length 32bit fields in cases where smaller, variable
-length encodings could have been used. To some, this seems like a tragic waste
-of bandwidth. SPDY choses the simple encoding for speed and simplicity.
-
-The goal of SPDY is to reduce latency on the network. The overhead of SPDY
-frames is generally quite low. Each data frame is only an 8 byte overhead for a
-1452 byte payload (~0.6%). At the time of this writing, bandwidth is already
-plentiful, and there is a strong trend indicating that bandwidth will continue
-to increase. With an average worldwide bandwidth of 1Mbps, and assuming that a
-variable length encoding could reduce the overhead by 50%, the latency saved by
-using a variable length encoding would be less than 100 nanoseconds. More
-interesting are the effects when the larger encodings force a packet boundary,
-in which case a round-trip could be induced. However, by addressing other
-aspects of SPDY and TCP interactions, we believe this is completely mitigated.
-
-## 4.5 Compression Context(s)
-
-When isolating the compression contexts used for communicating with multiple
-origins, we had a few choices to make. We could have maintained a map (or list)
-of compression contexts usable for each origin. The basic case is easy - each
-HEADERS frame would need to identify the context to use for that frame. However,
-compression contexts are not cheap, so the lifecycle of each context would need
-to be bounded. For proxy servers, where we could churn through many contexts,
-this would be a concern. We considered using a static set of contexts, say 16 of
-them, which would bound the memory use. We also considered dynamic contexts,
-which could be created on the fly, and would need to be subsequently destroyed.
-All of these are complicated, and ultimately we decided that such a mechanism
-creates too many problems to solve.
-
-Alternatively, we've chosen the simple approach, which is to simply provide a
-flag for resetting the compression context. For the common case (no proxy), this
-fine because most requests are to the same origin and we never need to reset the
-context. For cases where we are using two different origins over a single SPDY
-session, we simply reset the compression state between each transition.
-
-## 4.6 Unidirectional streams
-
-Many readers notice that unidirectional streams are both a bit confusing in
-concept and also somewhat redundant. If the recipient of a stream doesn't wish
-to send data on a stream, it could simply send a SYN_REPLY with the FLAG_FIN bit
-set. The FLAG_UNIDIRECTIONAL is, therefore, not necessary.
-
-It is true that we don't need the UNIDIRECTIONAL markings. It is added because
-it avoids the recipient of pushed streams from needing to send a set of empty
-frames (e.g. the SYN_STREAM w/ FLAG_FIN) which otherwise serve no purpose.
-
-## 4.7 Data Compression
-
-Generic compression of data portion of the streams (as opposed to compression of
-the headers) without knowing the content of the stream is redundant. There is no
-value in compressing a stream which is already compressed. Because of this, SPDY
-initially allowed data compression to be optional. We included it because study
-of existing websites shows that many sites are not using compression as they
-should, and users suffer because of it. We wanted a mechanism where, at the SPDY
-layer, site administrators could simply force compression - it is better to
-compress twice than to not compress.
-
-Overall, however, with this feature being optional and sometimes redundant, it
-was unclear if it was useful at all. We removed it from the specification.
-
-## 4.8 Server Push
-
-A subtle but important point is that server push streams must be declared before
-the associated stream is closed. The reason for this is so that proxies have a
-lifetime for which they can discard information about previous streams. If a
-pushed stream could associate itself with an already-closed stream, then
-endpoints would not have a specific lifecycle for when they could disavow
-knowledge of the streams which went before.
-
----
-
-# 5. Security Considerations
-
-## 5.1 Use of Same-origin constraints
-
-This specification uses the [same-origin
-policy](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC6454)
-in all cases where verification of content is required.
-
-## 5.2 HTTP Headers and SPDY Headers
-
-At the application level, HTTP uses name/value pairs in its headers. Because
-SPDY merges the existing HTTP headers with SPDY headers, there is a possibility
-that some HTTP applications already use a particular header name. To avoid any
-conflicts, all headers introduced for layering HTTP over SPDY are prefixed with
-":". ":" is not a valid sequence in HTTP header naming, preventing any possible
-conflict.
-
-## 5.3 Cross-Protocol Attacks
-
-By utilizing TLS, we believe that SPDY introduces no new cross-protocol attacks.
-TLS encrypts the contents of all transmission (except the handshake itself),
-making it difficult for attackers to control the data which could be used in a
-cross-protocol attack.
-
-## 5.4 Server Push Implicit Headers
-
-Pushed resources do not have an associated request. In order for existing HTTP
-cache control validations (such as the Vary header) to work, however, all cached
-resources must have a set of request headers. For this reason, browsers MUST be
-careful to inherit request headers from the associated stream for the push. This
-includes the 'Cookie' header.
-
----
-
-# 6. Privacy Considerations
-
-## 6.1 Long Lived Connections
-
-SPDY aims to keep connections open longer between clients and servers in order
-to reduce the latency when a user makes a request. The maintenance of these
-connections over time could be used to expose private information. For example,
-a user using a browser hours after the previous user stopped using that browser
-may be able to learn about what the previous user was doing. This is a problem
-with HTTP in its current form as well, however the short lived connections make
-it less of a risk.
-
-## 6.2 SETTINGS frame
-
-The SPDY SETTINGS frame allows servers to store out-of-band transmitted
-information about the communication between client and server on the client.
-Although this is intended only to be used to reduce latency, renegade servers
-could use it as a mechanism to store identifying information about the client in
-future requests.
-
-Clients implementing privacy modes, such as Google Chrome's "incognito mode",
-may wish to disable client-persisted SETTINGS storage.
-
-Clients MUST clear persisted SETTINGS information when clearing the cookies.
-
-TODO: Put range maximums on each type of setting to limit inappropriate uses.
-
----
-
-# 7. Incompatibilities with SPDY draft #2
-
-Here is a list of the major changes between this draft and draft #2.
-
-* Addition of flow control
-* Increased 16 bit length fields in SYN_STREAM and SYN_REPLY to 32
- bits.
-* Changed definition of compression for DATA frames
-* Updated compression dictionary
-* Fixed off-by-one on the compression dictionary for headers
-* Increased priority field from 2bits to 3bits.
-* Removed NOOP frame
-* Split the request "url" into "scheme", "host", and "path"
-* Added the requirement that POSTs contain content-length.
-* Removed wasted 16bits of unused space from the end of the SYN_REPLY
- and HEADERS frames.
-* Fixed bug: Priorities were described backward (0 was lowest instead
- of highest).
-* Fixed bug: Name/Value header counts were duplicated in both the Name
- Value header block and also the containing frame.
-* Fixed endianness issues with SETTINGS ids (which were little
- endian). Now everything is big endian.
-* Header values can now be empty.
-
----
-
-# 8. Requirements Notation
-
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
-"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
-interpreted as described in [RFC
-2119](http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#RFC2119).
-
----
-
-# 9. Acknowledgements
-
-Many individuals have contributed to the design and evolution of SPDY: Adam
-Langley, Wan-Teh Chang, Jim Morrison, Mark Nottingham, Alyssa Wilk, Costin
-Manolache, William Chan, Vitaliy Lvin, Joe Chan, Adam Barth, Ryan Hamilton,
-Gavin Peters, Kent Alstad, Kevin Lindsay, Paul Amer, Fan Yang, Jonathan Leighton
-
----
-
-# 10. Normative References
-
-<table>
-<tr>
-<td><b>[TLSNPN]</b></td>
-<td>Langley, A., “<a href="http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01">TLS Next Protocol Negotiation</a>”, &lt;<a href="http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01">http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-01</a>&gt;.</td>
-</tr>
-<tr>
-<td><b>[ASCII]</b></td>
-<td>“US-ASCII. Coded Character Set - 7-Bit American Standard Code for Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986.”.</td>
-</tr>
-<tr>
-<td><b>[UDELCOMPRESSION]</b></td>
-<td>Yang, F., Amer, P., and J. Leighton, “<a href="http://www.eecis.udel.edu/%7Eamer/PEL/poc/pdf/SPDY-Fan.pdf">A Methodology to Derive SPDY’s Initial Dictionary for Zlib Compression</a>”, &lt;<a href="http://www.eecis.udel.edu/%7Eamer/PEL/poc/pdf/SPDY-Fan.pdf">http://www.eecis.udel.edu/~amer/PEL/poc/pdf/SPDY-Fan.pdf</a>&gt;.</td>
-</tr>
-</table>
-
----
-
-# 11. Errata
-
-1. Section 2.6.6 originally listed INTERNAL_ERROR as status code 11.
-
----
-
-# Authors' Addresses
-
-Mike Belshe Twist EMail: [mbelshe@chromium.org](mailto:mbelshe@chromium.org)
-Roberto Peon Google, Inc EMail: [fenix@google.com](mailto:fenix@google.com) \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-protocol/spdyprotocol-xml/index.md b/chromium/docs/website/site/spdy/spdy-protocol/spdyprotocol-xml/index.md
deleted file mode 100644
index 193ab95742b..00000000000
--- a/chromium/docs/website/site/spdy/spdy-protocol/spdyprotocol-xml/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-- - /spdy/spdy-protocol
- - SPDY Protocol
-page_name: spdyprotocol-xml
-title: SPDYProtocol.xml
----
-
diff --git a/chromium/docs/website/site/spdy/spdy-tools-and-debugging/index.md b/chromium/docs/website/site/spdy/spdy-tools-and-debugging/index.md
deleted file mode 100644
index d9a31e203a5..00000000000
--- a/chromium/docs/website/site/spdy/spdy-tools-and-debugging/index.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: spdy-tools-and-debugging
-title: SPDY Tools and Debugging
----
-
-With a new protocol, tools and debugging aids are always in short supply. If you
-have time to help build additional tools, please do so and feel free to post
-them here!
-
-Debugging tools:
-
-* Chrome
- * about:net-internals
- This URL is a magic URL in Chrome which provides data about the chrome
- network stack. It has been fully updated to enumerate SPDY frames and
- status.
- * Events Tab: This tab shows network events. Look for
- SPDY_SESSSION events and you can see every SPDY frame sent
- or received by Chrome.
- * SPDY Tab (Chrome 9+): This tab shows the current state of
- existing, active SPDY sessions
- * command line flags
- Chrome has lots of command line flags to assist with altering SPDY
- behavior:
- * --use-spdy=ssl
- Forces Chrome to always use SPDY, even if not negotiated over SSL
- * --use-spdy=no-ssl
- Forces Chrome to always use SPDY, but without SSL
- * --host-resolver-rules="MAP \* myspdyserver:8000"
- If you've got a server running SPDY, and you want content to be
- fetched from it, even if it doesn't match the URL you are requesting
- (e.g. you've cached a site and want to play it back to the browser
- without hitting the real-world site), this rule with alter host
- resolution for a set of URLs to be your simulated server.
- * Chrome Inspector
- * The existing chrome tools for testing HTTP also work with
- SPDY.
-* Speed Tracer
- Speed Tracer is an extension for profiling browser internal events, network
- events and CPU usage.
- <https://chrome.google.com/extensions/detail/ognampngfcbddbfemdapefohjiobgbdl>
-* Chromium page benchmarker
- The page benchmarker can test HTTP and SPDY urls through chrome.
- <https://www.chromium.org/chrome-benchmarking-extension>
-* Flip-in-mem-edsm-server
- The flip server is a fully implemented SPDY server or SPDY-to-HTTP gateway.
- Full source is available in the chromium tree at net/tools/flip_server. You
- can read more about it here:
- <http://www.chromium.org/spdy/running_flipinmemserver>
-* Wireshark SPDY extension
- The wireshark extension needs some love. You'll find it checked into the
- chromium source tree under net/tools.
diff --git a/chromium/docs/website/site/spdy/spdy-whitepaper/index.md b/chromium/docs/website/site/spdy/spdy-whitepaper/index.md
deleted file mode 100644
index 6c3c99cfbb7..00000000000
--- a/chromium/docs/website/site/spdy/spdy-whitepaper/index.md
+++ /dev/null
@@ -1,541 +0,0 @@
----
-breadcrumbs:
-- - /spdy
- - SPDY
-page_name: spdy-whitepaper
-title: 'SPDY: An experimental protocol for a faster web'
----
-
-## Executive summary
-
-As part of the ["Let's make the web faster"](http://code.google.com/speed/)
-initiative, we are experimenting with alternative protocols to help reduce the
-latency of web pages. One of these experiments is SPDY (pronounced "SPeeDY"), an
-application-layer protocol for transporting content over the web, designed
-specifically for minimal latency. In addition to a specification of the
-protocol, we have developed a SPDY-enabled Google Chrome browser and open-source
-web server. In lab tests, we have compared the performance of these applications
-over HTTP and SPDY, and have observed up to 64% reductions in page load times in
-SPDY. We hope to engage the open source community to contribute ideas, feedback,
-code, and test results, to make SPDY the next-generation application protocol
-for a faster web.
-
-## Background: web protocols and web latency
-
-Today, HTTP and TCP are the protocols of the web. TCP is the generic, reliable
-transport protocol, providing guaranteed delivery, duplicate suppression,
-in-order delivery, flow control, congestion avoidance and other transport
-features. HTTP is the application level protocol providing basic
-request/response semantics. While we believe that there may be opportunities to
-improve latency at the transport layer, our initial investigations have focussed
-on the application layer, HTTP.
-
-Unfortunately, HTTP was not particularly designed for latency. Furthermore, the
-web pages transmitted today are significantly different from web pages 10 years
-ago and demand improvements to HTTP that could not have been anticipated when
-HTTP was developed. The following are some of the features of HTTP that inhibit
-optimal performance:
-
-* Single request per connection. Because HTTP can only fetch one
- resource at a time (HTTP pipelining helps, but still enforces only a
- FIFO queue), a server delay of 500 ms prevents reuse of the TCP
- channel for additional requests. Browsers work around this problem
- by using multiple connections. Since 2008, most browsers have
- finally moved from 2 connections per domain to 6.
-* Exclusively client-initiated requests. In HTTP, only the client can
- initiate a request. Even if the server knows the client needs a
- resource, it has no mechanism to inform the client and must instead
- wait to receive a request for the resource from the client.
-* Uncompressed request and response headers. Request headers today
- vary in size from ~200 bytes to over 2KB. As applications use more
- cookies and user agents expand features, typical header sizes of
- 700-800 bytes is common. For modems or ADSL connections, in which
- the uplink bandwidth is fairly low, this latency can be significant.
- Reducing the data in headers could directly improve the
- serialization latency to send requests.
-* Redundant headers. In addition, several headers are repeatedly sent
- across requests on the same channel. However, headers such as the
- User-Agent, Host, and Accept\* are generally static and do not need
- to be resent.
-* Optional data compression. HTTP uses optional compression encodings
- for data. Content should always be sent in a compressed format.
-
-### Previous approaches
-
-SPDY is not the only research to make HTTP faster. There have been other
-proposed solutions to web latency, mostly at the level of the transport or
-session layer:
-
-* [Stream Control Transmission Protocol](http://www.sctp.org/) (SCTP)
- -- a transport-layer protocol to replace TCP, which provides
- multiplexed streams and stream-aware congestion control.
-* [HTTP over
- SCTP](http://tools.ietf.org/html/draft-natarajan-http-over-sctp-00)
- -- a proposal for running HTTP over SCTP. [Comparison of HTTP Over
- SCTP and TCP in High Delay
- Networks](http://www.cis.udel.edu/%7Eleighton/) describes a research
- study comparing the performance over both transport protocols.
-* [Structured Stream Transport](http://pdos.csail.mit.edu/uia/sst/)
- (SST) -- a protocol which invents "structured streams": lightweight,
- independent streams to be carried over a common transport. It
- replaces TCP or runs on top of UDP.
-* [MUX](http://www.w3.org/Protocols/MUX/) and
- [SMUX](http://www.w3.org/TR/WD-mux) -- intermediate-layer protocols
- (in between the transport and application layers) that provide
- multiplexing of streams. They were proposed years ago at the same
- time as HTTP/1.1.
-
-These proposals offer solutions to some of the web's latency problems, but not
-all. The problems inherent in HTTP (compression, prioritization, etc.) should
-still be fixed, regardless of the underlying transport protocol. In any case, in
-practical terms, changing the transport is very difficult to deploy. Instead, we
-believe that there is much low-hanging fruit to be gotten by addressing the
-shortcomings at the application layer. Such an approach requires minimal changes
-to existing infrastructure, and (we think) can yield significant performance
-gains.
-
-## Goals for SPDY
-
-The SPDY project defines and implements an application-layer protocol for the
-web which greatly reduces latency. The high-level goals for SPDY are:
-
-* To target a 50% reduction in page load time. Our preliminary results
- have come close to this target (see below).
-* To minimize deployment complexity. SPDY uses TCP as the underlying
- transport layer, so requires no changes to existing networking
- infrastructure.
-* To avoid the need for any changes to content by website authors. The
- only changes required to support SPDY are in the client user agent
- and web server applications.
-* To bring together like-minded parties interested in exploring
- protocols as a way of solving the latency problem. We hope to
- develop this new protocol in partnership with the open-source
- community and industry specialists.
-
-Some specific technical goals are:
-
- To allow many concurrent HTTP requests to run across a single TCP session.
-
- To reduce the bandwidth currently used by HTTP by compressing headers and
- eliminating unnecessary headers.
-
- To define a protocol that is easy to implement and server-efficient. We hope
- to reduce the complexity of HTTP by cutting down on edge cases and defining
- easily parsed message formats.
-
-* To make SSL the underlying transport protocol, for better security
- and compatibility with existing network infrastructure. Although SSL
- does introduce a latency penalty, we believe that the long-term
- future of the web depends on a secure network connection. In
- addition, the use of SSL is necessary to ensure that communication
- across existing proxies is not broken.
-* To enable the server to initiate communications with the client and
- push data to the client whenever possible.
-
-**SPDY design and features**
-
-SPDY adds a session layer atop of SSL that allows for multiple concurrent,
-interleaved streams over a single TCP connection.
-
-The usual HTTP GET and POST message formats remain the same; however, SPDY
-specifies a new framing format for encoding and transmitting the data over the
-wire.
-
-[<img alt="image"
-src="/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png">](/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png)
-
-Streams are bi-directional, i.e. can be initiated by the client and server.
-
-SPDY aims to achieve lower latency through basic (always enabled) and advanced
-(optionally enabled) features.
-
-### Basic features
-
-* ***Multiplexed streams***
-
-> SPDY allows for unlimited concurrent streams over a single TCP connection.
-> Because requests are interleaved on a single channel, the efficiency of TCP is
-> much higher: fewer network connections need to be made, and fewer, but more
-> densely packed, packets are issued.
-
- ***Request prioritization***
-
- Although unlimited parallel streams solve the serialization problem, they
- introduce another one: if bandwidth on the channel is constrained, the
- client may block requests for fear of clogging the channel. To overcome this
- problem, SPDY implements request priorities: the client can request as many
- items as it wants from the server, and assign a priority to each request.
- This prevents the network channel from being congested with non-critical
- resources when a high priority request is pending.
-
-* ***HTTP header compression***
-
-> SPDY compresses request and response HTTP headers, resulting in fewer packets
-> and fewer bytes transmitted.
-
-### Advanced features
-
-In addition, SPDY provides an advanced feature, *server-initiated streams*.
-Server-initiated streams can be used to deliver content to the client without
-the client needing to ask for it. This option is configurable by the web
-developer in two ways:
-
-* ***Server push*****.**
-
-> SPDY experiments with an option for servers to push data to clients via the
-> X-Associated-Content header. This header informs the client that the server is
-> pushing a resource to the client before the client has asked for it. For
-> initial-page downloads (e.g. the first time a user visits a site), this can
-> vastly enhance the user experience.
-
-* ***Server hint***.
-
-> Rather than automatically pushing resources to the client, the server uses the
-> X-Subresources header to *suggest* to the client that it should ask for
-> specific resources, in cases where the server knows in advance of the client
-> that those resources will be needed. However, the server will still wait for
-> the client request before sending the content. Over slow links, this option
-> can reduce the time it takes for a client to discover it needs a resource by
-> hundreds of milliseconds, and may be better for non-initial page loads.
-
-For technical details, see the [SPDY draft protocol
-specification](/spdy/spdy-protocol/spdy-protocol-draft1).
-
-## SPDY implementation: what we've built
-
-This is what we have built:
-
- A high-speed, in-memory server which can serve both HTTP and SPDY responses
- efficiently, over TCP and SSL. We will be releasing this code as open source
- in the near future.
-
- A modified Google Chrome client which can use HTTP or SPDY, over TCP and
- SSL. The source code is at
- <http://src.chromium.org/viewvc/chrome/trunk/src/net/spdy/>. (Note that code
- currently uses the internal code name of "flip"; this will change in the
- near future.)
-
- A testing and benchmarking infrastructure that verifies pages are replicated
- with high fidelity. In particular, we ensure that SPDY preserves origin
- server headers, content encodings, URLs, etc. We will be releasing our
- testing tools, and instructions for reproducing our results, in the near
- future.
-
-### Preliminary results
-
-With the prototype Google Chrome client and web server that we developed, we ran
-a number of lab tests to benchmark SPDY performance against that of HTTP.
-We downloaded 25 of the "top 100" websites over simulated home network
-connections, with 1% packet loss. We ran the downloads 10 times for each site,
-and calculated the average page load time for each site, and across all sites.
-The results show a speedup over HTTP of 27% - 60% in page load time over plain
-TCP (without SSL), and 39% - 55% over SSL.
-
-*Table 1: Average page load times for top 25 websites*
-
-<table>
-<tr>
-<td colspan=2>DSL 2 Mbps downlink, 375 kbps uplink</td>
-<td colspan=2>Cable 4 Mbps downlink, 1 Mbps uplink</td>
-</tr>
-<tr>
-<td><b>A</b><b>verage ms</b></td>
-<td><b>Speedup</b></td>
-<td><b>Average ms</b></td>
-<td><b>Speedup</b></td>
-</tr>
-<tr>
-<td>HTTP</td>
-<td>3111.916</td>
-<td>2348.188</td>
-</tr>
-<tr>
-<td>SPDY basic multi-domain\* connection / TCP</td>
-<td>2242.756</td>
-<td>27.93%</td>
-<td>1325.46</td>
-<td>43.55%</td>
-</tr>
-<tr>
-<td>SPDY basic single-domain\* connection / TCP</td>
-<td>1695.72</td>
-<td>45.51%</td>
-<td>933.836</td>
-<td>60.23%</td>
-</tr>
-<tr>
-<td>SPDY single-domain + server push / TCP</td>
-<td>1671.28</td>
-<td>46.29%</td>
-<td>950.764</td>
-<td>59.51%</td>
-</tr>
-<tr>
-<td>SPDY single-domain + server hint / TCP</td>
-<td>1608.928</td>
-<td>48.30%</td>
-<td>856.356</td>
-<td>63.53%</td>
-</tr>
-<tr>
-<td>SPDY basic single-domain / SSL</td>
-<td>1899.744</td>
-<td>38.95%</td>
-<td>1099.444</td>
-<td>53.18</td>
-</tr>
-<tr>
-<td>SPDY single-domain + client prefetch / SSL</td>
-<td>1781.864</td>
-<td>42.74%</td>
-<td>1047.308</td>
-<td>55.40%</td>
-</tr>
-</table>
-
-\* In many cases, SPDY can stream all requests over a single connection,
-regardless of the number of different domains from which requested resources
-originate. This allows for full parallelization of all downloads. However, in
-some cases, it is not possible to collapse all domains into a single domain. In
-this case, SPDY must still open a connection for each domain, incurring some
-initial RTT overhead for each new connection setup. We ran the tests in both
-modes: collapsing all domains into a single domain (i.e. one TCP connection);
-and respecting the actual partitioning of the resources according to the
-original multiple domains (= one TCP connection per domain). We include the
-results for both the strict "single-domain" and "multi-domain" tests; we expect
-real-world results to lie somewhere in the middle.
-
-#### The role of header compression
-
-Header compression resulted in an ~88% reduction in the size of request headers
-and an ~85% reduction in the size of response headers. On the lower-bandwidth
-DSL link, in which the upload link is only 375 Kbps, request header compression
-in particular, led to significant page load time improvements for certain sites
-(i.e. those that issued large number of resource requests). We found a reduction
-of 45 - 1142 ms in page load time simply due to header compression.
-
-#### The role of packet loss and round-trip time (RTT)
-
-We did a second test run to determine if packet loss rates and round-trip times
-(RTTs) had an effect on the results. For these tests, we measured only the cable
-link, but simulated variances in packet loss and RTT.
-
-We discovered that SPDY's latency savings increased proportionally with
-increases in packet loss rates, up to a 48% speedup at 2%. (The increases
-tapered off above the 2% loss rate, and completely disappeared above 2.5%. In
-the real world, packets loss rates are typically 1-2%, and RTTs average 50-100
-ms in the U.S.) The reasons that SPDY does better as packet loss rates increase
-are several:
-
-* SPDY sends ~40% fewer packets than HTTP, which means fewer packets
- affected by loss.
-* SPDY uses fewer TCP connections, which means fewer chances to lose
- the SYN packet. In many TCP implementations, this delay is
- disproportionately expensive (up to 3 s).
-* SPDY's more efficient use of TCP usually triggers TCP's fast
- retransmit instead of using retransmit timers.
-
-We discovered that SPDY's latency savings also increased proportionally with
-increases in RTTs, up to a 27% speedup at 200 ms. The The reason that SPDY does
-better as RTT goes up is because SPDY fetches all requests in parallel. If an
-HTTP client has 4 connections per domain, and 20 resources to fetch, it would
-take roughly 5 RTs to fetch all 20 items. SPDY fetches all 20 resources in one
-RT.
-*Table 2: Average page load times for top 25 websites by packet loss rate*
-
-<table>
-<tr>
-<td colspan=2>Average ms</td>
-<td>Speedup</td>
-</tr>
-<tr>
-<td>Packet loss rate</td>
-<td>HTTP</td>
-<td>SPDY basic (TCP)</td>
-</tr>
-<tr>
-<td>0%</td>
-<td>1152</td>
-<td>1016</td>
-<td>11.81%</td>
-</tr>
-<tr>
-<td>0.5%</td>
-<td>1638</td>
-<td>1105</td>
-<td>32.54%</td>
-</tr>
-<tr>
-<td>1%</td>
-<td>2060</td>
-<td>1200</td>
-<td>41.75%</td>
-</tr>
-<tr>
-<td>1.5%</td>
-<td>2372</td>
-<td>1394</td>
-<td>41.23%</td>
-</tr>
-<tr>
-<td>2%</td>
-<td>2904</td>
-<td>1537</td>
-<td>47.7%</td>
-</tr>
-<tr>
-<td>2.5%</td>
-<td>3028</td>
-<td>1707</td>
-<td>43.63%</td>
-</tr>
-</table>
-
-*Table 3: Average page load times for top 25 websites by RTT*
-
-<table>
-<tr>
-<td colspan=2><b>Average ms</b></td>
-<td><b>Speedup</b></td>
-</tr>
-<tr>
-<td><b>RTT in ms</b></td>
-<td><b>HTTP</b></td>
-<td><b>SPDY basic (TCP)</b></td>
-</tr>
-<tr>
-<td>20</td>
-<td>1240</td>
-<td>1087</td>
-<td>12.34%</td>
-</tr>
-<tr>
-<td>40</td>
-<td>1571</td>
-<td>1279</td>
-<td>18.59%</td>
-</tr>
-<tr>
-<td>60</td>
-<td>1909</td>
-<td>1526</td>
-<td>20.06%</td>
-</tr>
-<tr>
-<td>80</td>
-<td>2268</td>
-<td>1727</td>
-<td>23.85%</td>
-</tr>
-<tr>
-<td>120</td>
-<td>2927</td>
-<td>2240</td>
-<td>23.47%</td>
-</tr>
-<tr>
-<td>160</td>
-<td>3650</td>
-<td>2772</td>
-<td>24.05%</td>
-</tr>
-<tr>
-<td>200</td>
-<td>4498</td>
-<td>3293</td>
-<td>26.79%</td>
-</tr>
-</table>
-
-## SPDY next steps: how you can help
-
-Our initial results are promising, but we don't know how well they represent the
-real world. In addition, there are still areas in which SPDY could improve. In
-particular:
-
-* Bandwidth efficiency is still low. Although dialup bandwidth
- efficiency rate is close to 90%, for high-speed connections
- efficiency is only about ~32%.
-* SSL poses other latency and deployment challenges. Among these are:
- the additional RTTs for the SSL handshake; encryption; difficulty of
- caching for some proxies. We need to do more SSL tuning.
-* Our packet loss results are not conclusive. Although much research
- on packet-loss has been done, we don't have enough data to build a
- realistic model model for packet loss on the Web. We need to gather
- this data to be able to provide more accurate packet loss
- simulations.
-* SPDY single connection loss recovery sometimes underperforms
- multiple connections. That is, opening multiple connections is still
- faster than losing a single connection when the RTT is very high. We
- need to figure out when it is appropriate for the SPDY client to
- make a new connection or close an old connection and what effect
- this may have on servers.
-* The server can implement more intelligence than we have built in so
- far. We need more research in the areas of server-initiated streams,
- obtaining client network information for prefetching suggestions,
- and so on.
-
-To help with these challenges, we encourage you to get involved:
-
-* Send feedback, comments, suggestions, ideas to the [chromium-discuss
- discussion
- group](http://groups.google.com/group/chromium-discuss?pli=1).
-* Download, build, run, and test the [Google Chrome client
- code](http://src.chromium.org/viewvc/chrome/trunk/src/net/spdy/).
-* Contribute improvements to the code base.
-
-## SPDY frequently asked questions
-
-**Q: Doesn't HTTP pipelining already solve the latency problem?**
-
-A: No. While pipelining does allow for multiple requests to be sent in parallel
-over a single TCP stream, it is still but a single stream. Any delays in the
-processing of anything in the stream (either a long request at the head-of-line
-or packet loss) will delay the entire stream. Pipelining has proven difficult to
-deploy, and because of this remains disabled by default in all of the major
-browsers.
-
-**Q: Is SPDY a replacement for HTTP?**
-
-**A: No. SPDY replaces some parts of HTTP, but mostly augments it. At the highest level of the application layer, the request-response protocol remains the same. SPDY still uses HTTP methods, headers, and other semantics. But SPDY overrides other parts of the protocol, such as connection management and data transfer formats.**
-
-**Q: Why did you choose this name?**
-
-A: We wanted a name that captures speed. SPDY, pronounced "SPeeDY", captures
-this and also shows how compression can help improve speed.
-
-**Q: Should SPDY change the transport layer?**
-
-A: More research should be done to determine if an alternate transport could
-reduce latency. However, replacing the transport is a complicated endeavor, and
-if we can overcome the inefficiencies of TCP and HTTP at the application layer,
-it is simpler to deploy.
-
-**Q: TCP has been time-tested to avoid congestion and network collapse. Will SPDY break the Internet?**
-
-A: No. SPDY runs atop TCP, and benefits from all of TCP's congestion control
-algorithms. Further, HTTP has already changed the way congestion control works
-on the Internet. For example, HTTP clients today open up to 6 concurrent
-connections to a single server; at the same time, some HTTP servers have
-increased the initial congestion window to 4 packets. Because TCP independently
-throttles each connection, servers are effectively sending up to 24 packets in
-an initial burst. The multiple connections side-step TCP's slow-start. SPDY, by
-contrast, implements multiple streams over a single connection.
-
-**Q: What about SCTP?**
-
-A: SCTP is an interesting potential alternate transport, which offers multiple
-streams over a single connection. However, again, it requires changing the
-transport stack, which will make it very difficult to deploy across existing
-home routers. Also, SCTP alone isn't the silver bullet; application-layer
-changes still need to be made to efficiently use the channel between the server
-and client.
-
-**Q: What about BEEP?**
-
-A: While BEEP is an interesting protocol which offers a similar grab-bag of
-features, it doesn't focus on reducing the page load time. It is missing a few
-features that make this possible. Additionally, it uses text-based framing for
-parts of the protocol instead of binary framing. This is wonderful for a
-protocol which strives to be as extensible as possible, but offers some
-interesting security problems as it is more difficult to parse correctly. \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png.sha1 b/chromium/docs/website/site/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png.sha1
deleted file mode 100644
index 767a63fc1be..00000000000
--- a/chromium/docs/website/site/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1025428b685015672799757d3d3daf54d32d4d63 \ No newline at end of file
diff --git a/chromium/docs/website/site/spdy/spdy-whitepaper/spdy_design_and_features_layers.png.sha1 b/chromium/docs/website/site/spdy/spdy-whitepaper/spdy_design_and_features_layers.png.sha1
deleted file mode 100644
index 1ae49b4a657..00000000000
--- a/chromium/docs/website/site/spdy/spdy-whitepaper/spdy_design_and_features_layers.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c892742001f21909565dd3831c9117e90d9bbb87 \ No newline at end of file
diff --git a/chromium/docs/website/site/sts/index.md b/chromium/docs/website/site/sts/index.md
deleted file mode 100644
index 96cd543a704..00000000000
--- a/chromium/docs/website/site/sts/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs: []
-page_name: sts
-title: HSTS
----
-
-See [chromium.org/hsts](/hsts/)
-
-<img alt="image"
-src="http://www.google.com/chart?chc=sites&cht=d&chdp=sites&chl=%5B%5BGoogle+Gadget'%3D20'f%5Cv'a%5C%3D0'10'%3D499'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Page+Redirect%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D500'%3D197'dim'%5C%3D10'%3D10'%3D500'%3D197'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&sig=RmVa16ZL_UQQmL8IDyOROP2fErI"
-height=200 width=500> \ No newline at end of file
diff --git a/chromium/docs/website/site/sts/redirect.xml b/chromium/docs/website/site/sts/redirect.xml
deleted file mode 100644
index 8b6492d8aaa..00000000000
--- a/chromium/docs/website/site/sts/redirect.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<Module>
- <ModulePrefs title="Page Redirect"/>
- <Content type="html">
- <![CDATA[
- <div>
- </div>
- <script>top.location = "https://www.chromium.org/hsts"</script>
- <script>window.location = "https://www.chromium.org/hsts"</script>
- ]]>
- </Content>
-</Module>
diff --git a/chromium/docs/website/site/tab-to-search/index.md b/chromium/docs/website/site/tab-to-search/index.md
deleted file mode 100644
index a413f34d500..00000000000
--- a/chromium/docs/website/site/tab-to-search/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs: []
-page_name: tab-to-search
-title: Tab to Search
----
-
-Among the many features Chromium's Omnibox offers is the ability to search a
-site without navigating to the sites homepage. Once Chromium has determined it
-can search a site, any time the user types the URL of the site into the Omnibox
-the user is offered the ability to search the site. Once the user presses tab,
-then types in a string and presses the enter, the site is searched and the
-results shown to the user. It's important to note the search is done by the site
-itself, not Google or Chromium.
-Chromium provides two heuristics that automatically add a site to the list of
-searchable sites. The following describes these heuristics:
-1. On your site's homepage provide a link to an [OpenSearch description
-document](http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document).
-The link to the OSDD is placed in the head of the html file. For example:
-&lt;head&gt; &lt;link type="application/opensearchdescription+xml" rel="search"
-href="url_of_osdd_file"/&gt; &lt;/head&gt; The important part of this document
-is the URL used to search your site. The following is an example that contains
-the bare minimum needed, see the [OpenSearch description document
-specification](http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document)
-for the list of values you can specify. &lt;?xml version="1.0"?&gt;
-&lt;OpenSearchDescription xmlns="<http://a9.com/-/spec/opensearch/1.1/>"&gt;
-&lt;ShortName&gt;Search My Site&lt;/ShortName&gt; &lt;Description&gt;Search My
-Site&lt;/Description&gt; &lt;Url type="text/html" method="get"
-template="<http://my_site/{searchTerms}>"/&gt; &lt;/OpenSearchDescription&gt;
-When the user presses enter in the Omnibox the string {searchTerms} in the url
-is replaced with the string the user typed.
-
-You can also include a suggestion service by adding another URL element with
-rel="suggestions" such as:
-
-&lt;Url type="application/json" rel="suggestions"
-template="http://my_site/suggest?q={searchTerms}" /&gt;
-
-If you include this, the omnibox will use your suggestion service to provide
-query suggestions based on the user's partial query.
-
-2. If the site does not provide a link to an OpenSearch description document but
-the user submits a form, then Chrome automatically adds the site to the list of
-searchable sites. There are a number of restrictions with this approach though.
-In particular the form must generate a GET, must result in a HTTP url, and the
-form must not have OnSubmit script. Additionally there must be only one input
-element of type text, no passwords, files or text areas and all other input
-elements must be in their default state.
-For 1 and 2 Chromium only adds sites that the user navigated to without a path.
-For example <http://mysite.com>, but not <http://mysite.com/foo>. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/OWNERS b/chromium/docs/website/site/teams/animations/OWNERS
deleted file mode 100644
index a6e70177e10..00000000000
--- a/chromium/docs/website/site/teams/animations/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-flackr@chromium.org
-kevers@chromium.org
diff --git a/chromium/docs/website/site/teams/animations/animation-objectives/index.md b/chromium/docs/website/site/teams/animations/animation-objectives/index.md
deleted file mode 100644
index e9818140fab..00000000000
--- a/chromium/docs/website/site/teams/animations/animation-objectives/index.md
+++ /dev/null
@@ -1,261 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-page_name: animation-objectives
-title: Animation Objectives
----
-
-We define and track progress against our goals using
-["OKRs"](https://www.gv.com/lib/how-google-sets-goals-objectives-and-key-results-okrs)
-(Objectives and Key Results). Here are most of the OKRs for the animations team.
-Note that these are **intentionally aspirational** and so we will be happy if we
-deliver 60%-70% of them.
-
-OKRs are given priority orderings, where P0 is the highest priority and P4 is
-the lowest. Normally (for our team) OKRs exists between P1 and P3.
-
-If you have any questions about our OKRs, please email our [mailing
-list](/teams/animations).
-
-**2020 Q1**
-
-Modernize animations programming by shipping Web Animations v1 in M82
-*#Implement*
-
-P1 - Sign off on spec and I2S
-
-P1 - Close all P1 Blockers
-
-P2 - Triage and address P2’s
-
-P2 - Address WPT gaps to improve interop *#Velocity*
-
-Enable richer, jank-free web experiences *#Optimize*
-
-P1 - Ship Off-Thread Paint Worklet
-
-P2 - Validate and Promote PaintWorklet
-
-P2 - Drive consensus on GroupEffect standardization *#Next*
-
-Improve the scrolling experience *#Next*
-
-P1 - Scroll Timeline: Implement and prep for Q2 Origin Trial
-
-P2 - Launch Virtual Scroller and supporting primitives
-
-Team Velocity *#Velocity*
-
-P1 - Reduce [bug count](https://bit.ly/2RbjS1C) by 15%
-
-\[Measure is: 1 - (bugs_at_end_of_quarter / (bugs_at_start_of_quarter +
-bugs_opened_during_quarter))\]
-
-P1 - Iterate on improving throughput metric
-
-**2019 Q4**
-
-Implement the existing standards 0.75
-
-P1 - Implement Web Animations v1 in Q1 (M82) 0.6
-
-P2 - Stabilize Scroll Snap 0.9
-
-Explore and define the next generation of animation 0.75
-
-P1 - Animation Worklet: Ship updated AW in M81 0.4
-
-P1 - Scroll Timeline: Validate Spec through Origin Trial 0.5
-
-P2 - Investigate Virtual Scroller, with community+partners 1.0
-
-P2 - Drive consensus on GroupEffect standardization 1.0
-
-Optimize Animations 0.85
-
-P1 - Ship Viz Hit Testing V2 1.0
-
-P1 - Ship Off-Thread Paint Worklet 0.7
-
-P2 - Validate and Promote PaintWorklet 0.0
-
-Team Velocity 0.3
-
-P1 - Reduce [bug count](https://bit.ly/2RbjS1C) by 25% 0.2
-
-Measure is: 1 - (bugs_at_end_of_quarter / (bugs_at_start_of_quarter +
-bugs_opened_during_quarter))
-
-P1 - Land “Throughput” metric, and validate w community 0.4
-
-**2019 Q3**
-
-**Implement the existing standards 0.71**
-
-P1 - Implement Web Animations v1 by M79 0.7
-
-P2 - (Prepare to) Land Web Animations v1 0.7
-
-P2 - Hand Off Scroll Snap 0.75
-
-P2 - Improve WPT Compliance (fix the tests) 0.7
-
-**Explore and define the next generation of animation** 0.51
-
-P1 - Animation Worklet: Spec Approved (and shipped!) 0.3
-
-P2 - Scroll Timeline: Specification+Feedback 0.3
-
-P2 - Input For Workers/Worklets - design use case for input to animation
-worklets 0.5
-
-P2 - Group Effect: Publish Explainer 1.0
-
-**Optimize Animations 0.75**
-
-P1 - Land Viz Hit Testing 0.8
-
-P1 - Off-Thread Paint Worklet: enable custom property animation 0.7
-
-**Team Velocity 0.75**
-
-P1 - Reduce [bug count](https://bit.ly/2RbjS1C) 25% 1.0
-
-*Measure is: 1 - (bugs_at_end_of_quarter / (bugs_at_start_of_quarter + bugs_opened_during_quarter)).*
-
-P1 - Land top-level/user-facing metric for animation performance 0.7
-
-P2 - End to end cc/integration testing 0.0
-
-P2 - Animations Tracing - Define plan for exposing the complexity of animation
-via dev tools or tracing 0.0
-
-P2 - Animations Metrics Design Doc published, reviewed 0.7
-
-**2019 Q2**
-
-**Implement the existing standards 0.7**
-
-P1 - Implement key missing parts of the Web Animations standard. 0.5
-
-P1 - Ensure spec conformance and interoperability by driving down WPT test
-failures 1.0
-
-P2 - Land Scroll Snap 0.7
-
-P2 - PaintWorklet: Implement Lottie (as a demo) off-thread using paintworklet.
-0.6
-
-P2 - PaintWorklet: Enable worklets on cc 0.6
-
-**Explore and define the next generation of animation** 0.78
-
-P1 - Ship Animation Worklet 0.8
-
-P2 - Invest in partnerships/relationships with standards and browser partners
-0.9
-
-P2 - Continue to invest in adding value to Animation Worklet 0.8
-
-**Optimize Animations** 0.38
-
-P1 - Enable Viz layer based hit testing 0.3
-
-P1 - Measure animations performance 0.7
-
-P2 - Remove additional property nodes / compositing overhead due to animation
-ElementId tracking 0.2
-
-**Team Velocity** 0.63
-
-P1 - Reduce [bug count](https://bit.ly/2RbjS1C) 25% 1.0
-
-*Measure is: 1 - (bugs_at_end_of_quarter / (bugs_at_start_of_quarter + bugs_opened_during_quarter)).*
-
-*End of quarter result: (134 / (128 + 55)) ~= 27%*
-
-P1 - BGPT causes no P1 animation regressions 1.0
-
-P1 - Animations Metrics Design Doc published, reviewed 0.4
-
-P2 - Start animations based on ElementId existence 0.1
-
-P3 - End to end threaded rendering unit test support 0.0
-
-**2019 Q1**
-
-**Correct animations and effects** 1.00
-
-P1 - Reduce [bug count](https://bit.ly/2RbjS1C) 15% 1.0
-
-*Measure is: 1 - (bugs_at_end_of_quarter / (bugs_at_start_of_quarter + bugs_opened_during_quarter)).*
-*End of quarter result: (128 / (134 + 49)) ~= 30%*
-
-P1 - Fix 5 of the top 20 animations [interop issues](https://bit.ly/2sFImqb) 1.0
-
-*End of quarter result: Closed 16 Hotlist-Interop bugs incl shipping
-prefers-reduced-motion + CSS transition events.*
-
-**Improve animations code health** 0.2
-
-P1 - Begin consolidation of
-[blink::WorkletAnimation](https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/animationworklet/worklet_animation.h?l=37&rcl=a4f73cdaeddaee4969614ce2832ea8b997514242)
-and
-[blink::Animation](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/animation/animation.h?l=64&rcl=a4f73cdaeddaee4969614ce2832ea8b997514242).
-0.1
-
-P2 - Make a blink driven cc integration/unit test possible. 0.0
-
-P2 - Consolidate transform interpolation between blink and cc. 0.5
-
-*End of quarter result: Feasibility investigated + prototype attempted, but
-sidelined in favour of AnimationWorklet work.*
-
-P2 - Refactor code around [p](goog_624119910)[er-property
-cc::Animations](http://crbug.com/900241). 0.3
-
-**Smooth scrolling on all (i.e. incl/ low end) devices** 0.82
-
-P1 - Ship Compositor Touch Action 1.0
-
-*End of quarter result: Shipped in M75!*
-
-P1 - Viz Hit Testing - continue to scale up Finch trial 0.9
-
-*End of quarter result: 100% on canary/dev, 50% Finch trial on beta,
-improvements in performance + correctness*
-
-P2 - Implement paint-calculated Non-Fast Scrollable Regions 0.3
-
-**Richer animation effects competitive with native experiences** 0.50
-
-P1 - Ship first version of AnimationWorklet 0.8
-
-*End of quarter result: almost all MVP features landed, TAG review requested,
-not published as FPWD yet.*
-
-P1 - Ship ScrollTimeline for AnimationWorklet 0.3
-
-P1 - Improve overscroll-behavior implementation 0.3
-
-P1 - [Off-Thread Paint Worklet](/teams/animations/paint-worklet): basic version
-behind flag in tip-of-tree 0.8
-
-*End of quarter result: Two CLs still in flight, but with those in a (partially)
-working prototype exists behind --enable-blink-features=OffMainThreadCSSPaint*
-
-P2 - Drive AnimationWorklet adoption 0.0
-
-P2 - GroupEffect Implementation 0.0
-
-P2 - Support snap points 0.8
-
-*End of quarter result: scroll-snap-stop implemented to support AMP, some bugs
-remain*
-
-**Easier performant effects** 0.00
-
-P3 - Educate developers on when their animations are slow and why 0.0 \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/animation-worklet/index.md b/chromium/docs/website/site/teams/animations/animation-worklet/index.md
deleted file mode 100644
index 4e168500f8e..00000000000
--- a/chromium/docs/website/site/teams/animations/animation-worklet/index.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-page_name: animation-worklet
-title: Animation Worklet
----
-
-Animation Worklet is a new primitive that provides extensibility for web
-animations and enables high performance scripted animations that can run on
-dedicated thread. The feature is developed as part of the [CSS Houdini task
-force](https://github.com/w3c/css-houdini-drafts/wiki).
-
-The Animation Worklet API provides a method to create scripted animations that
-control a set of animation effects. These animations are executed inside an
-isolated execution environment, *worklet* which makes it possible for browser to
-run such animations in their own dedicated thread to provide a degree of
-performance isolation from main thread. Worklet animations may be created and
-controlled via Web Animations API. Animation Worklet combined with other new
-features such as [ScrollTimeline](https://wicg.github.io/scroll-animations/),
-[Input in
-Worklets](https://github.com/w3c/css-houdini-drafts/issues/834#issuecomment-470579488),
-can allow many currently interactive main-thread rAF-based animations to move
-off main thread which improve smoothness.
-
- [Specification](https://drafts.css-houdini.org/css-animationworklet/)
-
- [Explainer](https://github.com/w3c/css-houdini-drafts/blob/master/css-animationworklet/README.md)
-
- [Design Principles and
- Goals](https://github.com/w3c/css-houdini-drafts/blob/master/css-animationworklet/principles.md)
-
- Tests:
- <https://github.com/web-platform-tests/wpt/tree/master/animation-worklet>
-
- Example codes [1](https://googlechromelabs.github.io/houdini-samples/),
- [2](https://aw-playground.glitch.me/),
- [3](https://houdini.glitch.me/animation)
-
- [Blink Design
- Document](https://docs.google.com/document/d/1MdpvGtnK_A2kTzLeTd07NUevMON2WBRn5wirxWEFd2w/edit?usp=sharing)
-
-Current Status
-
-<table>
-<tr>
-<td><b> Milestone</b></td>
-<td><b> Status </b></td>
-<td><b> Key features</b></td>
-</tr>
-<tr>
-<td> Animation Worklet Prototype</td>
-<td>Done</td>
-<td> Scripted custom animation, single effect, only fast properties, off main-thread (using compositor thread).</td>
-</tr>
-<tr>
-<td> Animation Worklet <a href="https://developers.google.com/web/updates/2018/10/animation-worklet">Origin Trial</a></td>
-<td>In progress (<a href="https://docs.google.com/forms/d/e/1FAIpQLSfO0_ptFl8r8G0UFhT0xhV17eabG-erUWBDiKSRDTqEZ_9ULQ/viewform">signup</a>)</td>
-<td> Scroll input (via ScrollTimeline), basic web-animation controls (play/cancel), move to dedicated thread, optimized performance.</td>
-</tr>
-<tr>
-<td> Animation Worklet V1 - MVP</td>
-<td>Scheduled for M75</td>
-<td> Animate all properties (slow path ones runs in sync with main thread), sophisticated scheduling so we do not block compositor thread, improved scroll timeline integration. </td>
-</tr>
-<tr>
-<td>Animation Worklet V2 </td>
-<td>TBD</td>
-<td> Pointer input via Events, multi-input animation, support GroupEffects, improved integration with Paint Worklet.</td>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/animations-documentation-throughput-metrics-code-health-capability-delegation-user-input-security-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/animations-documentation-throughput-metrics-code-health-capability-delegation-user-input-security-and-more/index.md
deleted file mode 100644
index ef4265de10c..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/animations-documentation-throughput-metrics-code-health-capability-delegation-user-input-security-and-more/index.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: animations-documentation-throughput-metrics-code-health-capability-delegation-user-input-security-and-more
-title: Animations Documentation, Throughput Metrics, Code Health, Capability Delegation,
- User Input Security and more!
----
-
-<table>
-<tr>
-
-<td>July 2020</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/WRVW9VUhxNCsev-DZjUkmjGKVA5J4bJnm3JRhenzeZq7Pgfod74bwJpYLHF68ZuglJn38aoXqe2r-mkLdxk0y196l2NCsIfKIwRDhorwPGv5YbU5ZJgyQgGcup7X84_9vIx3yeQ8lA" height=432 width=561.3834586466165></td></td>
-
-<td><td>Animations Documentation</td></td>
-
-<td><td>kevers@ has made a lot of progress updating documentations in <a href="https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/animation/README.md">README.md</a>. Specifically,</td></td>
-
- <td><td>Landed 5 CLs with roughly 1300 lines of documentation
- added.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/c25Dc0nGruNseouHuux9h-1LZiVy0K2G8cGHUGscwbC_7pz3bbvFIqu6k03395tpNJ35MsSg9ppQyA6UNCrptuzTg7v6HcHMmMqAdx9hOZKu3fCyxukWibg19WENJUms0CwlxcKosQ" height=175 width=282></td></td>
-
-<td><td>Throughput Metrics</td></td>
-
-<td><td>xidachen@ started discussion on adjusting throughput reporting interval. They collected data with different reporting intervals and shown in the above graph.</td></td>
-
- <td><td>A lot of details are missed when the interval is large such as 5
- seconds</td></td>
-
- <td><td>The graph can be very noisy if the interval is too small such as 0.2
- second.</td></td>
-
- <td><td>A 1-second interval is likely a good choice.</td></td>
-
-<td><td>Bug Triage</td></td>
-
-<td><td>Our entire team has been working to formalize the bug triaging process. We now have a great <a href="https://docs.google.com/document/d/1II4W6ymxKNc8mxBAxwHjWIhzL5PPO4AtSrorzgiU3tM/edit#heading=h.3ma2fxg0g60f">doc</a> that describes the triage process and our un-triaged bug is coming to 0.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Capability Delegation</td></td>
-
-<td><td>mustaq@ has completed the first draft of <a href="https://docs.google.com/document/d/1IYN0mVy7yi4Afnm2Y0uda0JH8L2KwLgaBqsMVLMYXtk/edit">Capability Delegation API</a>, and restarted the <a href="https://github.com/w3c/payment-request/issues/917">payment spec issue</a> discussion.</td></td>
-
-<td><td>User Input Security</td></td>
-
-<td><td>liviutinta@ started finch experiments for Browser Verified <a href="https://critique-ng.corp.google.com/cl/324039223">Keyboard</a>/<a href="https://critique-ng.corp.google.com/cl/324039272">Mouse</a> Activation Trigger.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Scroll Unification</td></td>
-
-<td><td>lanwei@ improved many web tests by replacing eventsender with gpuBenchmarking.smoothScrollByXY. Currently there are 2 out of 42 remaining.</td></td>
-
-<td><td>WebDriver Actions API Spec</td></td>
-
-<td><td>lanwei@ added webdriver <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2316405">wpt tests</a>, and <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2324972">implemented</a> the wheel input source in Chromedriver.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Code Health</td></td>
-
-<td><td>During the no-meetings week, our team made a lot of contributions to code health.</td></td>
-
- <td><td>The team landed 52 CLs and started a design doc (summary <a
- href="https://docs.google.com/document/d/1hk5N4NH-kYhEqyz1glnVGvWgT9NEMlMtaC4AJWE5CfA/edit#heading=h.lowhafniytq6">here</a>).</td></td>
-
- <td><td>lanwei@ removed experimental delegation code for user
- activation.</td></td>
-
- <td><td>kevers@ landed <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2313157">patch</a>
- to fix flaky layout tests.</td></td>
-
- <td><td>kevers@ also <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2310969">addressed</a>
- animation/style regressions due to recent refactoring.</td></td>
-
- <td><td>liviutinta@ fixed a <a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1076078">bug</a>
- to ensure that when right clicking on a mis-spelled word and contextmenu
- event prevented, the mis-spelled word should not be highlighted.</td></td>
-
- <td><td>liviutinta@ also <a
- href="https://critique-ng.corp.google.com/cl/323644938">started</a>
- experimenta with Click as Pointer Event.</td></td>
-
- <td><td>Everybody joined in to create <a
- href="https://docs.google.com/document/d/1PCz35DkhYHT8zXJoKQl--WhQZpimJRyNlfEWSSjpUJ0/edit#">Interactions
- RTF</a> (Read this first)</td></td>
-
-<td><td>Azimuth/Altitude for Pointer Events</td></td>
-
-<td><td><a href="https://patrickhlauke.github.io/touch/pen-tracker/index.html?azimuth"><img alt="image" src="https://lh5.googleusercontent.com/4UlT7gRKaxiEjFSMUNpgY83bcFVmaS2YqhPN2mnU5RxMJ2hSrjwi8Ky1ZKJLa5iVm2h8cvVbaLT9vI8WgL9Mw3PWQ_6NqFVL9O_HkKQZlzlNDffgv8kGPUDzmcuxI3ehHhuIoyKguw" height=155 width=282></a></td></td>
-
-<td><td>liviutinta@ has <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2165457">implemented</a> this feature.</td></td>
-
- <td><td>Sent <a
- href="https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/ZRI-7X_4GwM">Intent
- to Ship</a>.</td></td>
-
- <td><td>Sent request for official position to <a
- href="https://github.com/mozilla/standards-positions/issues/411">Gecko</a>
- and <a
- href="https://lists.webkit.org/pipermail/webkit-dev/2020-July/031313.html">WebKit</a>.</td></td>
-
- <td><td>Sent <a
- href="https://github.com/w3ctag/design-reviews/issues/537">TAG Review</a>
- request.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | July 2020</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/april-2019-volume-ii/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/april-2019-volume-ii/index.md
deleted file mode 100644
index 053aa48468f..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/april-2019-volume-ii/index.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: april-2019-volume-ii
-title: April 2019, Volume II
----
-
-<table>
-<tr>
-
-<td>April 2019, Volume II</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh3.googleusercontent.com/ijzv1FoeaoQqmakoVD-22LcixO6d-o_mKKFTGwYa3JKIFBecPJtDZjHLnSTEBFBCVdcQxHg2PUAToBolahoOUz0-DmLVOi1rZjT_mksxuZA20sPrkULJVO7H3SeYSyRxA_4uIt2x" height=367 width=596></td>
-
-<td>One DIV, "7 lines" of script. Done! (Animation from LottieFiles: <a href="https://lottiefiles.com/433-checked-done">https://lottiefiles.com/433-checked-done</a>)</td>
-
-<td>Lottie in a PaintWorklet</td>
-
-<td><a href="https://airbnb.design/lottie/">Lottie</a> is a popular framework from AirBnB that renders After Effects animations, allowing designers to create rich complex animations. Its <a href="https://github.com/airbnb/lottie-web">web implementation</a>, however, is not very performant. This sprint, Rob Flack (flackr@) prototyped a port of the Lottie renderer to a PaintWorklet - driven by a standard Web Animation for input progress. Not only does this bring richer devtools integration, but with the ongoing <a href="https://docs.google.com/document/d/1USTH2Vd4D2tALsvZvy4B2aWotKWjkCYP5m0g7b90RAU/edit?ts=5bb772e1#heading=h.2zu1g67jbavu">Off-Thread PaintWorklet</a> effort we will soon be able to render Lottie animations performance-isolated from the main thread!</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/U9zrtaB0y4-AB2jh3ZIpZBM4h6Syh5L4ZqasUgSLmdez7iBL0r4TkUvBJczJGh7usdsZaoxdrPtLE2jMuYDa-c103TacHIZ2ghex6xyAaF9dhkTCX8dIsjTQu2iYdtcc1wD6Uivp" height=128 width=283></td></td>
-
-<td><td>Viz Hit-Testing - Linux Performance</td></td>
-
-<td><td>Xianda (sunxd@) sadly left the team this sprint, but not before he followed through on</td></td>
-<td><td>his promise to bring the fast-path rate on Linux up to the same standard as other platforms.</td></td>
-<td><td>The goal was to have 80% of hittests use the</td></td>
-<td><td>fast path - Xianda overdelivered as usual with a fantastic 93% fast-path rate!</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/DYE-WxgyKi-r-aZ-7PNd8z9cWxufESkHmzVcqugM-wHBKU5pUjXqz2aT4v7XHQaDWXiRa6ZK0eqJKsQXkhskzkksQGQZ-yR_mmVnVFHU2IjEGiAqt-N9TrVpcL-8sZWFtxjmneD6" height=128 width=283></td></td>
-
-<td><td>Stateful Animation Worklet</td></td>
-
-<td><td><a href="https://drafts.css-houdini.org/css-animationworklet-1/#stateful-animator-desc">Stateful Animators</a> enable developers to keep local state in their Animation Worklet to perform richer effects (e.g. velocity based animations). Yi (yigu@) has lead the spec work on these, and this sprint he landed the corresponding code.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>BlinkOn has come - and gone!</td></td>
-
-<td><td>Two thirds of the Animations team decamped to Toronto for BlinkOn, spending two days listening to (and giving) talks, syncing with colleagues from around the world, and getting to know some of our new collaborators from Microsoft. Both Stephen's <a href="https://docs.google.com/presentation/u/1/d/1WrzDN_PiKBfOVUrrbOV8gHQO-ODN0gdCpWE4xMYv29c/edit?usp=drive_web&ouid=105513761242358226829">Off Main Thread CSS Paint</a> and Majid's <a href="https://docs.google.com/presentation/d/1BCEbLCg-o_Ko65byel5QGnO7Cwf5aPZPjqnnMNbbA5E/edit">Event Delegation to Worker and Worklets</a> talks were well attended and well received.</td></td>
-
-<td><td>Web Animations - Moar Interop</td></td>
-
-<td><td>Kevin (kevers@) has been hard at work fixing bugs in our Web Animations implementation - over 50% of the <a href="http://crbug.com/772407">known WPT failures</a> are now fixed! This sprint has seen a focus on timing issues, with plenty of nasty floating-point boundary case bugs to squish!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><img alt="image" src="https://lh3.googleusercontent.com/5vUZFWkmaAi__ErtI9EwMBbnBx7aRTDa74k33Ya0BQ6hLcTQU5TGX4nB6OzlJWXcdY17QGEiZi8ADo5xXF5o0EtnCxx_Naw9Fj0dGMIT8GUvCwoM3G7DLMpvzOA_7XuBnYX_NgJz" height=286 width=353></td>
-
-<td>Scroll Snap - supporting AMP</td>
-
-<td>AMP team are excited to use scroll snap for their image carousel, but need paginated behavior. We previously implemented the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-stop">scroll-snap-stop</a> feature to enable this. This sprint they <a href="http://crbug.com/823998#c15">reported a bug</a> where they were able to 'break' the snapping and cause their content to go flying! Majid leapt into action: <a href="https://drive.google.com/file/d/1Jlb1IlQ66-JbCi1lBn-L0zhDBoiZF_Qb/view">reproducing</a>, diagnosing, and <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1572286">fixing</a> the bug. This should clear the way for AMP to roll out scroll snap, and we are excitedly <a href="https://www.chromestatus.com/metrics/css/timeline/popularity/499">watching our metrics</a>.</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | April 2019, Volume II</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/april-2019/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/april-2019/index.md
deleted file mode 100644
index ccbc4187e16..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/april-2019/index.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: april-2019
-title: April 2019
----
-
-<table>
-<tr>
-
-<td>APRIL 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh4.googleusercontent.com/e4d0yeYg2osuLzXs4PZ-Mocx7ILQEqgXJKvI2K5Lopqki3LxuCKFywsPcH-9JDiVOYCB4kF2I_zqkY3mGDDjBrPibOst19SBWkmVM3a0DagRZYZgm6UB5jz0k-PujynP5S8w1YS1" height=359 width=462></td>
-
-<td>It looks the same as you would see in Chrome Stable, but it's totally running off-thread. We promise!</td>
-
-<td>Off-Main Paint Worklet</td>
-
-<td>Work continues on our efforts to take Paint Worklets off the main thread and run them from the compositor. With the <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1525160">blink → cc communication</a> and the worklet thread<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1531153"> dispatching logic</a> landed, we are able to render a Paint Worklet off the main thread for the first time! There's still some way to go, but this is a vital step towards smoothly animating Paint Worklets.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/P0KFfWlfC7wj43S6F4IlkfQ5poIbTEFbtIxQWxRT-CEpYFR-0A-JfdpZzkE01Qw3I_TiiNB8KngKzhPQM-DCzweaW-escsvEDD3PMXnUFJxnQXv-a3ajsMTP1nDv0BukWpkEufeL" height=166 width=227></td></td>
-
-<td><td>Scroll Snap</td></td>
-
-<td><td>With sunyunjia@ sadly leaving the team, girard@ took over finishing up the work on scroll snap. Initial ramp-up went well; discovered <a href="http://crbug.com/944184">an issue</a> with scrollbar arrow buttons and scroll snap, file a <a href="https://github.com/w3c/csswg-drafts/issues/3752">spec bug</a> and <a href="https://github.com/w3c/csswg-drafts/commit/09e040f05e12bb4c303d5839e0ceee3f6bf58c67">patched the spec</a>, and Gene is now working on <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1534988">a fix</a> for the Chrome implementation.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/qTkpiW1DKDbFNM12EZdAmQ7OgdOCE8ZQPZtvqIb6Za4WC-mWlNDCmaQ3zc5Bdd1R2uEaD-dvClmRRVblyw5ChI_lRLJ3uLR6GhDp-wAYSc48ziHdOSY8F5MqRzFAF2njgYJycyle" height=172 width=172></td></td>
-
-<td><td>Shipping more of Web Animations!</td></td>
-
-<td><td>Long overdue, some more parts of the Web Animations API are going to be shipping soon - <a href="https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/1EQKF7il48U">AnimationEffect and (some of) KeyframeEffect</a>, and the <a href="https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/UMxgGkxhdCo">Animation constructor</a>. </td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>BlinkOn is coming!</td></td>
-
-<td><td>Our team has two presentations planned for BlinkOn 10. We also have planned a collaboration session with Microsoft engineers around animations and related topics.</td></td>
-
-<td><td>BlinkGenPropertyTrees</td></td>
-
-<td><td>We continue to support the paint-team's project to move property tree generation to Blink instead of the compositor. This has required significant changes in how element ids are treated in composited animations, and has taught us about where our tests fail to catch regressions.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><img alt="image" src="https://lh4.googleusercontent.com/SMf7AoFH-HS2DqUKTgH4zFTnynOaoDXioRMPyeFiO-I5bJFrT2X1NiaB6YeetcUQ0BOtLeIjwNGOWF9EkzBliu4oY1Nc6C3jZdY6XN_gVMQHA9JK9SJ3u_c375BOAZPzXimTsJKn" height=92 width=596></td>
-
-<td>Viz Hit-Testing Surface Layer</td>
-
-<td>Tackling blocking issues preventing promotion of new version to 100% of Beta users. LTHI::BuildHitTestData was reduced from ~400ms to 0.3ms in a pathological case (6000+ layers on a page), and a BlinkGenPropertyTrees masking bug was resolved. Working on tackling low fast-path rate on Linux; multiple fixes in progress which are expected to bring it in line with other platforms.</td>
-
-<td><img alt="image" src="https://lh5.googleusercontent.com/BGpN4LK3CTdcACVHZk4Obno9IbfAq1oSy2a3-f-uUuEwkn0_6bmAigxmZgukpJtcPPZvPI2EnKSdcgBiV4yxBhKyCwvVpw0vkhJI8An_fLZS89nZfktPFRl2DErvnik2NGYucPPZ" height=127 width=283></td>
-
-<td>Animation Worklet - the road to shipping</td>
-
-<td>Animation Worklet continues to make progress on its road to shipping. Notable features this sprint included finally making fully-asynchronous Animation Worklets as <a href="https://drive.google.com/file/d/1jF3bQlFKkbv4Sz7Q6r2rPDGxewXdw0Zl/view">buttery smooth and jank free</a> as they deserve to be (multiple weeks of work, well done kevers@ and flackr@!), <a href="https://crrev.com/386583bbe5a57761ff36bf925066f281b57d9d26">proper i18 support</a> for naming worklets, and progressing on <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1488312">support for stateful animations</a>. The Animation Worklet Origin Trial has been <a href="https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/AZ-PYPMS7EA/Fo76_FuFBAAJ">extended until M75</a> to gather more data as AMP rolls out its AnimationWorklet-based solution to all users!</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | April 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/april-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/april-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md
deleted file mode 100644
index 945e77c675f..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/april-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: april-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more
-title: April 2020 - Web Animations, Scroll-linked Animations, Throughput Metrics,
- Performant Meet, Hackathon and more!
----
-
-<table>
-<tr>
-
-<td>April 2020</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh5.googleusercontent.com/Asd0BAjki50O1Jd36jqK8YY87ftxZs4-UTyjagI2h_J-YXt_TCDKwOVcib-lSWoPZzyqhL9DmvaipvwzNVLkpwxr3acGYHXxUbY2m3xeNtuBRmz70cD3ii11lX7NceLqahtL_5Uf" height=244 width=317></td>
-
-<td>Celebrate shipping Web Animation API<a href="https://jsbin.com/weqamosare/1/edit?js,output"> using the API</a></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td colspan=2>Complete Web Animation API in M84!</td></td>
-
-<td><td colspan=2>The <a href="https://drafts.csswg.org/web-animations-1/">API</a> provides developers with a powerful way to create and control animations on the web including existing CSS Animations and Transitions. After years of effort by the Animation team, Kevin (kevers@) sent out the final <a href="https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/Wu4yPMznUw0">Intent to Ship</a> and turned on the feature <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2161345">by default</a> in M84! Here is a <a href="https://docs.google.com/document/d/1sWAEytrZDxQWnnqozMSzI2lHvIJ0kF3dzgy9Q1PbYjE/edit">showcase</a> of all the new features. This was a collaborative effort with other browsers which is why the same rich API would be available in <a href="https://webkit.org/blog/10266/web-animations-in-safari-13-1/">Safari</a> and <a href="https://hacks.mozilla.org/2020/04/firefox-75-ambitions-for-april/">Firefox</a> as well. There is still <a href="https://github.com/w3c/csswg-drafts/labels/web-animations-2">room for improvement</a> but let’s take some time to celebrate this big milestone in animations! Thanks to the dozens of developers across five+ organizations (Chrome, Microsoft, Firefox, Igalia, Opera etc.) who have contributed to this! </td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh5.googleusercontent.com/LqXcIohcW0fR8okipubge1E96AcHRzz3xbiq4OubalRtluI5uHTUXSmkFMPNNqy2tLIkW4sRA2sVT8Ugg_wxNNCxvLXMc7wVyhWzcv0tlcNba_EhRbQJKJlTMj_iGoeBzR0z28Ac" height=230 width=459></td></td>
-
-<td><td colspan=2>A long journey of shipping Web Animation API</td></td>
-
-<td></tr></td>
-<td><tr></td>
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/YcuCWIgXIi7sSxu3o_nP5sEfCPm9JC3eFAe4-xHZ3KC3UXV5FkXsOZJqUUdZo7X9M8TcWU_CIC-ZhOZZjxiIgvZqI0jA6deOklMCJ3BgMLKhB7HBS0rw5g-aSp0Hj3_mWR6INTTp" height=40 width=273></td></td>
-
-<td><td>Green Volume Meter</td></td>
-
-<td><td>Google Meet usage has surged significantly, <a href="https://www.theverge.com/2020/4/28/21240434/google-meet-three-million-users-per-day-pichai-earnings">adding 3M users per day</a>. We’ve noticed that the green volume meter was unexpectedly re-rastered during animation, causing significant CPU usage. Rob (flackr@) came to the rescue and <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1074055">fixed</a> the issue by preserving the raster scale for animations with will-change: transform. This avoids unnecessary and expensive rasterization, and should greatly reduce CPU/power usage. </td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/xs4GcGU_ey6XxTBPJndhQgyTwZTMiNFuTX3bOTnxgImBUZGsXFIvlhTMbv-x28U93zhNiZP3TC168i_8MloXC2zT3iZxd-zWw6CLHSVYfijGqMQCHLqAwo5fNp6bT2sJes9VsL6o" height=152 width=280></td></td>
-
-<td><td>Better Frame Throughput Metrics</td></td>
-
-<td><td>Frame Throughput is severely impacted during initial page load, often dominating the metric. Xida (xidachen@) modified the sampling logic to measure from 5s to 10s, resulting in more accurate and meaningful values. One site’s dropped frames moved from 84% to 15% at 50th percentile and 99% to 75% at the 95th percentile.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Scroll-linked Animations</td></td>
-
-<td><td colspan=2>It’s been a productive month for scroll-linked animations. Majid (majidvp@) and Yi (yigu@) wrote a full-fledged <a href="https://github.com/w3c/csswg-drafts/blob/master/scroll-animations-1/EXPLAINER.md">explainer</a> for scroll timeline discussing many of the design trade-offs and showcasing multiple examples. Olga (<a href="mailto:gerchiko@microsoft.com">gerchiko@microsoft.com</a>) landed the spec change and implementation for using “zero” as initial start time for scroll-linked animation. Majid landed implementation for <a href="https://github.com/w3c/csswg-drafts/issues/4337">element-based scroll offset</a> and Yi added full support for running scroll-linked animations on the compositor. We now have enough implemented to see the <a href="https://majido.github.io/scroll-timeline/demo/parallax/">demo</a> we built using polyfill now works natively in Chrome Canary with the flag enable-experimental-web-platform-features.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/DrrQOx_U_ImfrYijLwAGdIm_khjezvah8V_DwBsvjgErlu-JBozu03cJ4oBy2k3yoGby56gfExyyGK210bfPnF5gMshGzXO4TuWhJ46fgW6N_GCAdG1oJ83s9JbXtDRLSkWRymYM" height=330 width=257></td></td>
-
-<td><td>The timeline start/end offsets are computed based on position of element on the page. When we increase the margin of the element the offsets get updated which affects currentTime and subsequently the animation output.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/7yFkBLxKEQnOW-Sdk10vdZluDxgGPQthrGPZG247xYSdHJiTDpmwuxk1mm9jNKFAR1orKDHaFO9abHThe-cdtZd20DjlRb4hdC0085ODhLqnzabP9PkpvtuiC5sYslmxtj5SFilB" height=329 width=254></td></td>
-
-<td><td>Scroll-linked animations show up in devtools and can be scrubbed on-demand!</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Animations Team Hackathon</td></td>
-
-<td><td colspan=2>To better understand the Web Animation APIs we’re using and experience the awesome ergonomics of them, and/or pain points, Gene (girard@) initiated the first ever Animations team 1-day hackathon. We created lots of fun experiments that exercise the new APIs: <a href="https://majido.github.io/animation_jam/app/index.html">interactive animation editor</a>, <a href="https://codepen.io/shengha2/pen/NWGWLvq">tetris</a>, <a href="https://codepen.io/yigu/pen/dyYPoLY">ping pong</a>, <a href="https://codepen.io/george-steel/pen/zYvYWxO">got it game</a>, <a href="https://jsbin.com/tanuzonixo/1/edit?html,css,js,output">pendulum </a>(<a href="https://docs.google.com/document/d/1VImYZIzh6mSRwBhSgwiUsB8Mj9NCASqMYzXEa4JXXk4/edit?usp=sharing">explainer).</a></td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh4.googleusercontent.com/T_bcxoaClVBZ9n8k-zQlEaI9eMHlIamrMH4ydr7WSvu0hmvTec4RwW9ZsjCEc42w1VrhCY6QHwNXRFnUDmSkjHGvNBAKNXEb_x0C5qF2KegFbmFY2j01q_r4sBIbQnOVYdw66L4b" height=241 width=245></td></td>
-
-<td><td colspan=2>Constructing the perfect pendulum: an exercise in using the web-animations API</td></td>
-
-<td></tr></td>
-<td><tr></td>
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | April 2020</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/april-2021---new-features-testing-stability-fixes-interop-fixes-metrics-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/april-2021---new-features-testing-stability-fixes-interop-fixes-metrics-and-more/index.md
deleted file mode 100644
index d07f5bf22cd..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/april-2021---new-features-testing-stability-fixes-interop-fixes-metrics-and-more/index.md
+++ /dev/null
@@ -1,298 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: april-2021---new-features-testing-stability-fixes-interop-fixes-metrics-and-more
-title: April 2021 - New features, Testing, Stability fixes, Interop fixes, Metrics
- and more!
----
-
-<table>
-<tr>
-
-<td>April 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Composite background-color animation</td></td>
-
-<td><td>xidachen@ has been working on this feature aiming to relaunch the finch experiment. There are a few problems fixed during this sprint.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/F7Gd8acS30ufVNV31rACPtetP79aWl1e7A_6-egImHkIvP0HkTw8JezzJ9sGWDaTq90ESIT-AD2GzFziWEWT22vS8jQWypRx6XGa5jh1PhpJOqwv_e_l23yaTbPfPv7xIJzLY2ndjTOWTfw8mKN0kM5Utu3_KDwC3YtMCRXUdPwSR8VE" height=236 width=283></td></td>
-
-<td><td>The first one is decouple paint and compositing, which is shown in the above diagram. Before, we call “CheckCanStartAnimationOnCompositor” during the paint stage to determine whether the element should be painted off the main thread or not. Then at the compositing stage, we call the function again to determine whether or not the animation can run on the compositor thread. This causes problems because the property tree node can change during the paint and compositing. The problem is now fixed in this <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2740697">CL</a>, by not calling the above function during the paint stage, which requires us to implement a paint worklet code path to paint the element off the main thread.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/uMKCYFltvvzDFGgiOR0YM4RJAxCcXs2v1-CB6NjDKik24WSMmQ4l7QENYqmVBrwJXK_iYU-twKbkwe3qdmxuN4EhiUlAe-VzEbf3XzIQzcjdQAr2dF9fcDasCv9NrbXsOkwxvFDgd_G3PkzWVhUZFLJZpKkocEsCzFemLRAPJXyMr6c4" height=156.15577889447238 width=160.92156862745097><img alt="image" src="https://lh4.googleusercontent.com/mApGNxMJzTxfJyspM3dC2hDD5PxZPI0IbHlJXiUBojIatvcvUKruCfZ1dUaHo9oClrZybovSobha5abys1xu7JcVsoLuqVEnryeXE8O97ERzAPzQj5q_c3hfyxODc3alzEnHI9fSq6QtvcViSgCPrt1au2FDar9Yqf6hjyU7G3S6khE-" height=102 width=158></td></td>
-
-<td><td>The second problem is missing repaint in a few cases, which is tracked in this <a href="http://crbug.com/1184832">bug</a>. During this sprint we have fixed most of them.</td></td>
-
- <td><td>The first case is missing repaint when the background is transparent
- during the animation. It is fixed in this <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2739318">CL</a>.
- The animated gif on the left shows a background-color animation runs
- correctly with the first frame being transparent.</td></td>
-
- <td><td>The second case is background-color animation on table row or table
- col, whose background is painted into its table cell. In this case, we let
- the animation fall back to the main thread. This is fixed by this <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2774182">CL</a>.</td></td>
-
- <td><td>The third case is background-color animation on the body animation,
- while the view is responsible to paint its background. It is fixed by this
- <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2779551">CL</a>,
- which lets the animation run on the main thread.</td></td>
-
-<td><td>Experimental: native paint worklet</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/u4OXEWMRPI3jWZR3_7-yw4U3MTZzhp0HWcChG2GQzAplntSgS630soR4OHdF5FRPXDkcH7SBj2VLeubgwnZXuw5a2NbofZ5oLc_XC8DJtsB9DDmlo5WoSII-Ycf9sF9uSjis53JpIbp1CYXgoC1LR0CdJdR01p5Lc-eHpGfYPVoMxUSD" height=115 width=156><img alt="image" src="https://lh5.googleusercontent.com/LF-91rvLBmPzQjggeMwXQvees1eS98AvSlHfVn4zHgGdU-x2XVxiA9FOP3wfl2PGn_KACQX_Sl3nxmb2ve4xDOyLEohQ8TB0Nbt9NUh69KX4qok_Y8m6JT6fticXtTzNMTb0GRTKOc_FxERI9MKAcJiV_VILCai3Ip_iFD44VPgK6b9t" height=155.50314465408803 width=159.22981366459626></td></td>
-
-<td><td>Our team is partnering with the skia team, to develop a variant of CSS paint worklet (a native paint worklet), to paint the background faster using native code.</td></td>
-
-<td><td>The picture on the left shows example usage (full <a href="https://jsbin.com/foxasib/10/edit?html,css,js">JSBin</a> example). In the example, we don’t need to use the traditional CSS paint APIs such as “addModule” or “registerPaint”. Rather we use the “skottie” as the name to identify that this is native paint worklet.</td></td>
-
-<td><td>The change is in a work-in-progress <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2776692">CL</a>, currently the animation is running on the main thread, we need some more work to move it off the main thread.</td></td>
-
-<td><td>Declarative show-hide explainer</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/GBgzBa5UiaD5eZJ8uQvoFS6XgwJLNzTJXNxrAfI7YVCf1xXRAB_60I4NWtH6wq-0Hyu-CIIZfixOSVpjwGl4f084v0fUa2DX2UWifvj8i22ige0EO9VuvUDXKdamGPV72_e-DrmhwDxqb31lo6H1mlzbINbXAcxAg3cejGkZU4bpwYzY" height=181 width=283></td></td>
-
-<td><td>flackr@ published an explainer for the plethora of options to implement tabs.</td></td>
-
-<td><td>It has received early feedback from Brian Kardell regarding additional constraints and other options.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Testing</td></td>
-
-<td><td>liviutinta@ fixed flaky test pointer_event_pointercapture_in_frame in this <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2745276">CL</a>. Specifically, the issues found are:</td></td>
-
- <td><td>Successive test_driver.Actions().pointerMove might lead to coalesced
- pointermove events.</td></td>
-
- <td><td>test_driver.Actions().send() is asynchronous, the test assumed that
- it was synchronous.</td></td>
-
- <td><td>Differences between the test_driver.Actions() event streams between
- Windows/Linux.</td></td>
-
- <td><td>Order of pointerup/lostpointercapture when pointer travels across
- frames not well defined. Opened <a
- href="https://github.com/w3c/pointerevents/issues/355">PEWG</a> issue. This
- still leads to rare flaky runs.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Stability fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>CHECK failure during cc animation timing calculation</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/I6C6OMx1NCkE_II9gODyBjZWWhx5p3W5EP1eu9QYQ67bqgqud2m57pDBpCIjCTdU5W_UVj0ttJ926PJAUFi94fpXp_gFb2NcMzrkiFnZaSF2j7029gYhIZp6rd82bikH3O59P5zMboIwE1PrKfpfKt1Dz5xQjddJsCPcnp_3QOO6UW37" height=133 width=283></td></td>
-
-<td><td>kevers@ worked on the problem where cc does timing calculations a bit differently from WAAPI with respect to animations. The problem is shown in the above code snippets. We verified the timing conversion as part of the check for eligibility to run on the compositor, but we didn’t consider time_offset when making the determination. The solution is to include time_offset in the calculation.</td></td>
-
-<td><td>Crash GestureNavSimple::OnOverscrollModeChange</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/esadj0fzfzQpcgNrzGxyJ_syNrllUSVLwrHXAJv_OCtJn6hHlnI3pe0Hg7DbE6G92o7-7S5sUrqYDAta_U2MKB_UOtr8p6Xm5myTsS2j_viQ4ZP_jNghQwYv3nJbCCe0BiHzUnXG9hrpPnGY4bQdzBqfy08kllRyV4tyks-2_FrQakoq" height=59 width=111><img alt="image" src="https://lh6.googleusercontent.com/xGKhq1xxbus-Etdfb4zkdnRLnUntPYGC8TSsG-pdoi1Za2hlfrNOvoPfHAwiRf-BcEJRJfkMI8pfWlpt9QOyXP5cEtYhLRU6kxLtpbTOTtKu139Jkt4t-NK1DXrM27SWOR9bmqQ6x-CejXQQ_KUV31DjCQ5Q6mNAPaWvKiPu7JnEfbu2" height=50 width=160></td></td>
-
-<td><td>flackr@ <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2791883">fixed</a> a crash that is due to object lifetime issue. The problem is that an unowned pointer was given to the RenderWidgetHostViewAura’s OverscrollController delegate, when the view did not guarantee that the delegate stayed alive. In some cases the web contents (and delegate) could be destroyed before the view resulting in using the deleted delegate.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Browser-verified user activation shows misleading data!</td></td>
-
-<td><td>mustaq@ worked on the finch experiment on browser-verified user activation. Currently the finch data suggests verification failure rate is about 0.7%.</td></td>
-
- <td><td>Similar failures even in the Control groups where the feature is
- disabled.</td></td>
-
- <td><td>The Control group is consistently better/worse than the Enabled
- groups.</td></td>
-
- <td><td>This is the <a
- href="https://docs.google.com/document/d/1_4Tg9Bt1OXO6mjAF3a-gaH07G-siGKeSkj13GQnOmjo/edit#bookmark=id.qztvoysscbtv">report</a>
- for the finch.</td></td>
-
-<td><td>The only explanation is maybe extension messaging <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=957553">clobbering</a> user activation again. </td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Mac crash blink::Scrollbar::SetNeedsPaintInvaliation</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/sVOLsU_m4QNyn5mYqClGfgBsCZW3e1ys7TI4OvXfsRN1GzmvXVlCMxpP-rS4tLhnzfTWG-dBOwXiSM-nvHq50uJTDahsBCMfOWL2m8FgR16jVOjzVbpduB2E67yyTUiwggkNj5RxYpArtk4jh0FIk5wXfJU5m-AoXfWegbEGQ6IeMLvb" height=108 width=139></td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/P2M4ziyZ_7xRlM5REV6gCNre90jI8MGnM0wPP1Tsz5cDmmCOS8-CxzwZVix1UvwO_OoM0vKFxKfYylxt4N0aUEDMiCvP_mKXovThUMrkQaKV2unX3V1wkg_6z33x_oTJf0zpkFljE89WuswLLelb079kVXKwkPeL0WmEYmte7lxhNrK0" height=63 width=135><img alt="image" src="https://lh6.googleusercontent.com/WYXgzyOiSZdyTOQXAMJHKLg5Yceo01s6NAzNrkeO5i_xJMPj-r9ohXH2UCj8yVMZizs9BFbKtdxKV1Dr1VBvz5d6vakEddv-skoYOF-DlmhjXSWDYAJ3VjfUALC8krWRz5WHEiwX560Zj2zg57vfY5tcmt6pU2BzSQgJ8Wf_q_EiGNFg" height=64 width=138></td></td>
-
-<td><td>liviutinta@ fixed a crash related to scrollbar on mac.</td></td>
-
- <td><td>At first it looked like Scrollbar is used after free.</td></td>
-
- <td><td>In reality, in some cases animation_ is released/deallocated in the
- middle of the call to setCurrentProgress.</td></td>
-
- <td><td>The solution was to keep animation alive during setCurrentProgress
- by using Objective C retain/release.</td></td>
-
- <td><td>This is the top 7th renderer crash on latest beta on mac. It is
- responsible for 4 bugs (2 <a
- href="https://bugs.chromium.org/p/chromium/issues/list?q=id%3A1183276%2C1189926%2C&can=1">P1</a>
- release blockers, 2 <a
- href="https://bugs.chromium.org/p/chromium/issues/list?q=id%3A1194276%2C1193025%2C&can=1">P2s</a>).</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Interop fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Created sticky demo for web.dev interop article</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/mbLti-1KairtHNLRhylAT2mv25lCbch_Io8o0tZr-K8Rpve-Mh_AQD221he3KB0b8SLzKv2iZ5VWToKlBXN0bZhj9OWJR1epEGleEwA5iHC7WvAv-6UDjJZM7XWwpfDiLSuD2iktSB1qV-ziDBEvrOUs9o62O_UwlAm4k7GMoEa-VuH4" height=231 width=283></td></td>
-
-<td><td>flackr@ created a demo of one of the common remaining position sticky interop issues for the web.dev article <a href="https://web.dev/compact2021/">https://web.dev/compact2021/</a> which was published this sprint.</td></td>
-
-<td><td>Scroll-snap support for writing modes</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/GFUNUuZfoyToayBRC3SSWP7IphGoj22B-uK2MI6w_I6-1JtZRro9P9nAkTOEesL5x2mFSNpJupHzLMUACAijmKdKCzzfsDS-RiFYUfh0dfzJLFGKG2lohrqF4Yk8MQuQRd0ajDXD1YiyppnmXH0Sx_uXMNppwU92ya6FyHo4re7x62X7" height=94 width=134><img alt="image" src="https://lh3.googleusercontent.com/OHW5kXcg6uHP0ISGXjpN70Xv5R_pWv074djPWXZhWHlTCoRJCUepJecn0pdOMLx_uaQlqibW4a5Ck9tRyFNof02BWjS0B0Y_OQoGqPgOqeN6atzqWEeqpq-uLyZPKlGZIwOTHGMlpzLYmOVefrIZPJO7jatDhyf7FsmvLiRI4VT_9b5A" height=91 width=137></td></td>
-
-<td><td> Old New</td></td>
-
-<td><td>kevers@ worked on scroll-snap to enable support for writing modes.</td></td>
-
- <td><td>The image on the left-hand side shows the old behavior where some of
- the writing modes aren’t supported.</td></td>
-
- <td><td>The image on the right-hand side shows that we now support all the
- writing modes.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Scroll-snap outside of scroll corridors</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/nbVYNy4089lUbQyUYlN0tceM9q7lgvjWwnyoBPEL_EzqB1gwtDQDOkkF5G5kOnUUKoW7ArYZyZOtkD_BxoFLxfV2Xr8n7j0oPOcOR3guzmksRFD6QIK1CPXYrM90TNWYBQupSn1CJtKBWoq-YSpqkoKPxym0rCELfP8qLIi_gQsanV4Z" height=95 width=284></td></td>
-
-<td><td> Old</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/rsWuZoc7YVjlNpE7wREzQc0RTkv9pZw8F-bkZj3TLFvKNtogc6x9jab1cmBSv_XCoSgAxcgJwRpe-_mjoYmHtxeItWjfLja5UnvUoTqw5TOpqM-OEm8gS4etqmfmNUPKsaXmAR3ZVjDAANclCHOazcLl73SIs9gE25SMWm9VFSqHVF-n" height=95 width=283></td></td>
-
-<td><td> New</td></td>
-
-<td><td>The missing block was offscreen in both x and y direction. Missed as a candidate search position when combining independent x & y searches.</td></td>
-
-<td><td>Fixed tests in css/css-scroll-snap</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/l9uxIeMwmRJdi2FjqcXUx3KYyqDwvM5YFvNQVSEaCrRzV7fQYVxQiB6ngmfhW780IaHHUz1WbDlcqIyRPAYbWRgDvdbgPYyYZN1RhfMok6hJ4CF1jwzMzHAEdG4gurz-n38Ao0gI7idIK5BGTqc2tRmlw3eS7EZ9MLDUgIPk3-0oa1mm" height=97 width=283></td></td>
-
-<td><td>With the scroll-snap now support for writing mode and for snaps outside of the scroll corridor, a few tests has been fixed as shown in the above table.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Metrics</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>go/composite-relative-transform-finch</td></td>
-
-<td><td>kevers@ worked on a document highlighting finch results for internal use only, the efforts includes</td></td>
-
- <td><td>Communicated highlights in finch tracker bug with confidential bits
- removed.</td></td>
-
- <td><td>Two cleanup CLs: one to remove the GCL for experiment, and one to
- remove the web feature flag.</td></td>
-
-<td><td>Histograms for finger/pen drag distance</td></td>
-
-<td><td>We need data for the ChromeOS proposal to allow bigger slop for pen taps.</td></td>
-
- <td><td>The existing Event.TouchMaxDistance won’t work for us. Because it is
- touch-only data, no data beyond slop rectangle.</td></td>
-
- <td><td><a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2779754">Added</a>
- new histograms that splits distance-data into pointer-types. Specifically,
- the histograms are Event.MaxDragDistance.{ERASER, FINGER, STYLUS}</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter VI: Bug Updates</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/Z-g42rQ4ADjdsT_O_WaXL9uVbo-Cp7XWcC3wUaUyzb_n_sLC_kxtVvS6HIUmX3vFkWv9xDXlZ-3eigN7eyJ47GzDU8-W4b3Nvv1k5d_k6svPePvj-Az6a4P0nHLwPq03aufydp4s9KJsjB69ReM5ZbwjsvrkHv3oD1W_MlqM4q1bp751" height=150 width=273> <img alt="image" src="https://lh6.googleusercontent.com/lXMwy691OYhQjVo0UFkzcmVZq7P_QCCZeJjqC_C0_4Nt2LQXIVy8F4Q0bQYOLJZ0YBnQVHiM58ut2jBYn4dJGelO60TSiRxbCqYzkdGh7x4aN5hob-OFE1RIFBXAo-a5zxM8p8Gz85P4uKpdhONqppEp7-h5rBOkuwVyIB-GvKC13XQT" height=152 width=278></td></td>
-
-<td><td>Our team is seeing a recent spike in P1s, and we are working on addressing the issues.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | April 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/april-2021-vol-2---new-features-testing-stability-fixes-interop-fixes-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/april-2021-vol-2---new-features-testing-stability-fixes-interop-fixes-and-more/index.md
deleted file mode 100644
index ba242dd951f..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/april-2021-vol-2---new-features-testing-stability-fixes-interop-fixes-and-more/index.md
+++ /dev/null
@@ -1,257 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: april-2021-vol-2---new-features-testing-stability-fixes-interop-fixes-and-more
-title: April 2021 (Vol. 2) - New features, Testing, Stability fixes, Interop fixes
- and more!
----
-
-<table>
-<tr>
-
-<td>April 2021 (Vol. 2)</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Composite background-color animation</td></td>
-
-<td><td>xidachen@ resolved a few issues during this sprint.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/B_AGNBt9KFFBrKGrVF50Jlp1PqtXjwxYm2lsSP0YLcbaizx5xERcSuwz5phRvMf_HaqYCeTEAsmiZJb193hdCrcnfooYqfgwuVhtVi_--i51Q1mhIDMzaZR_iLU-lQcl9YX97BmB5g" height=92 width=283></td></td>
-
-<td><td>The first one is completely decouple paint and compositing, which is shown in the above diagram. Specifically, we were passing a boolean from paint to the compositing stage and that could introduce technical debt in the future. Now we no longer require that boolean.</td></td>
-
-<td><td>The second issue is to handle non-visible animations, which can happen in many cases such as an animation on a zero-sized element. There are a lot of discussions <a href="https://docs.google.com/document/d/1HtnP6oNFvcYIn91tHPhQR5n_8zhWLHfG_eXi4HG8Pzc/edit">here</a>, and we eventually decided that it is OK to composite these no-op background-color animations. The problem is fixed by this <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2795243">CL</a>. Fixing this issue also helped resolving an existing CSS paint worklet <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2841783">bug</a> which no-op animation.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/Tl9i_d3F9PEiHRIPX4S_AirQlASHhy2-iRGCZMZTadEGsvNlC_58ko-6By-j7oFG4TAIM0gQ_BGkwaix3uWCaYK9iT7VOtRy1nDUNVBpAInsugo534oM0uLatt9K4iMN9KIgInQX0Q" height=64 width=283></td></td>
-
-<td><td>The third issue is handling non-replace keyframes. As shown in the above code snippets, we should not look at the composite mode of the animation, but rather look at the composite mode of each keyframe. This is resolved by this <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2836907">CL</a>.</td></td>
-
-<td><td>Capability Delegation moved to WICG</td></td>
-
-<td><td>mustaq@ made awesome progress during this sprint, which includes</td></td>
-
- <td><td>Finalized <a
- href="https://docs.google.com/document/d/1VQiJBo_hBfgKfHN3lZnhHbs9ws74TCu5i-__y8_mdBU/edit?usp=sharing">Q2
- action plans</a> with Payments team (thanks to smcgruer@).</td></td>
-
- <td><td>Secured public approval from <a
- href="https://discourse.wicg.io/t/capability-delegation/4821/3">Stripe</a>,
- and thumbs-up from <a
- href="https://github.com/w3c/mediacapture-screen-share/issues/167#issuecomment-821290060">Mozilla</a>.</td></td>
-
- <td><td>Moved the proposal to <a
- href="https://github.com/WICG/capability-delegation">WICG/capability-delegation</a>.</td></td>
-
- <td><td>Updated/deprecated all related public threads/docs: HTML <a
- href="https://github.com/whatwg/html/pull/4369">#4369</a>, <a
- href="https://github.com/whatwg/html/issues/4364">#4364</a>. Crbugs: <a
- href="https://crbug.com/928838">928838</a>, <a
- href="https://crbug.com/925331">9253331</a>, <a
- href="https://crbug.com/931966">931966</a>. Docs and repos: <a
- href="https://github.com/mustaqahmed/user-activation-delegation">repository</a>,
- <a
- href="https://docs.google.com/document/d/1NKLJ2MBa9lA_FKRgD2ZIO7vIftOJ_YiXXMYfRMdlV-s/edit?usp=sharing">design
- doc</a>, <a
- href="https://github.com/mustaqahmed/autoplay-delegation/">follow-up attempt
- repo</a></td></td>
-
-<td><td>Click as PointerEvent</td></td>
-
-<td><td>liviutinta@ and mustaq@ collaborated on this work.</td></td>
-
- <td><td>Identified a regression in older <a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1192449#c31">Esri
- software and APIs</a> which is widely used related to fractional coordinates
- for click.</td></td>
-
- <td><td>Disabled the <a
- href="https://critique-ng.corp.google.com/cl/369699904">Finch
- experiment</a>. Kept <a href="https://crbug.com/1192449">engaged</a> with
- developers until the problem is fully resolved.</td></td>
-
- <td><td>Reached the <a
- href="https://groups.google.com/a/chromium.org/g/blink-dev/c/bta50W_Hg24/m/YAYeAzCZAAAJ">final
- decision</a> about what to ship: click/auxclick/contextmenu as pointer
- events but with integer coordinates.</td></td>
-
- <td><td>Closed a 5-yr old debate in the <a
- href="https://github.com/w3c/pointerevents/issues/100">Pointerevents
- spec</a>.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Testing</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll-snap: Deflake tests</td></td>
-
-<td><td>kevers@ deflakes a few scroll-snap tests:</td></td>
-
- <td><td>The first set is snaps-after-scrollbar-scrolling-\*. The problem is
- rare TIMEOUTs. The solution is to accelerate animation timing. Fixes main
- thread testings only.</td></td>
-
- <td><td>The second is scrollend-event-fired-after-snap. The test fails due
- to incorrect event ordering. The solution is to reset to prevent scroll end
- during test reset from being triggered as an end before scroll is
- finished.</td></td>
-
-<td><td>Mousewheel: Deflake tests</td></td>
-
-<td><td>kevers@ also deflakes a few mousewheel tests. There are a few problems with the tests:</td></td>
-
- <td><td>Several mouse wheel tests are flaking.</td></td>
-
- <td><td>Focused on <a
- href="https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/web_tests/fast/scrolling/percentage-mousewheel-scroll.html;l=1;drc=e51dd5c377fd47393a171f6bdcd7c1a6a9a609c5?q=percentage-mousewheel-scroll&sq=&ss=chromium%2Fchromium%2Fsrc">percentage-mousewheel-scroll</a>
- which has highest scroll on flake dashboard.</td></td>
-
- <td><td>Scroll and wheel events getting dropped.</td></td>
-
- <td><td>Not differentiating between missed wheel event and incorrect
- result.</td></td>
-
- <td><td>Missing test cleanup.</td></td>
-
-<td><td>The solutions to the above problems are:</td></td>
-
- <td><td>Set mouse position before triggering synthetic wheel
- event.</td></td>
-
- <td><td>Ensure that scroll event is received.</td></td>
-
- <td><td>Ensure wheel event is received.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Stability fixes</td></td>
-
-<td><td>Fixed UAF due to promise resolution timing</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/K3v4CmTZiknQj2hNvwbhnT-A7daryFxJOBV_Oc8rF41LmZf6f_ngngIbjIySHjPtfJJVQKC3p57kQ8tba0WgoyckbH9iciVOGEvm-JRjFkCKVcY4eI4HcyIva3BYjvb1FVwejKJnKQ" height=207 width=262></td></td>
-
-<td><td>flackr@ fixed a UAF problem. Specifically, we were synchronously resolving ready promise during <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1196781#c10">RunPaintLifecyclePhase</a>. Since promise resolution already <a href="https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/core/animation/animation.cc;l=2382;drc=c86618b300799fd70be83a72afbe7e15f124493d?q=Animation::CommitPendingPause">handles forbidden script context by posting a task</a> so the solution was to wrap UpdateAnimations call in ScriptForbiddenScope. We move ScriptForbiddenScope to entire lifecycle with explicit exceptions for locations where we expect/handle script execution.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Interop fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll-snap: Resnap to focused element after layout</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/pUAg3nUiQw_QiWhDPwX_-zf4Y5wK-iz41FcUKRHSaraaujjDbrsoftqCX0gQ2vFiWsOZofPDYeVbxSlhI6xkBagvhACUJsNTq57M2X8hsAK5ZBU_27reWwfoQPMIdNjsoYRNDC8bCg" height=127 width=283></td></td>
-
-<td><td>The problem is that when snapping, multiple candidates can be equal distance from the origin of the snapport. If one of these candidates is focused, it should be snapped after a relayout.</td></td>
-
-<td><td>The solution is to make whether the element is focused a tiebreaker when selecting a snap target.</td></td>
-
-<td><td>Scroll-snap: mousewheel scrolls skipped snap positions</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/wcoZ25PYAKWFr9ldrG3JhCVq15c_0fEQwWt193N-MvDHsrMOY5Jm7nnzASz3h1sEXgnJ84gqbRAs0gpwR0IUKdu6XgqPBY6hBdQUyLUMcGYG22T75aeWqjbH2_Vyd_BIwbWNgmZcMQ" height=193 width=283>.</td></td>
-
-<td><td>Here are the problems:</td></td>
-
- <td><td>Scroll snap called when a scroll animation ends and on a gesture
- scroll end.</td></td>
-
- <td><td>Gesture scroll end delayed in anticipation of additional mousewheel
- ticks.</td></td>
-
- <td><td>Results in two directional scrolls, skipping over the nearest snap
- position.</td></td>
-
-<td><td>The solution is to snap only on animation end. The next steps are initiate snap at gesture scroll begin for mousewheel scrolls.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Bug Updates</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/asi8pz5cPdAdbRaT-2QaBXhimLiPNYUwLMuUWIN4eWnVg0wwsGzgKLpsrcnQMKLu1Z02oiSTuUoFz7_XAzp83nOPSUzagwURcAHpuvFTRPnHSmTUa3-Yc_ipIPZr7Wbi2YZ4OvYyzg" height=157 width=283> <img alt="image" src="https://lh4.googleusercontent.com/OdAwuP64GqE3kURtMFPLaBSsitA3sy6MKWaGib6vkg2Tn-1NvkJkKDgHOaooynN4ENovUyFfP5Z0UzHrGEyy3jZYThYEyEefnpqt1peP0aCyB5IDsC2Xz3UmM-nXTZbCs4A3Mf8YlA" height=154 width=276></td></td>
-
-<td><td>Our team had a sizable influx at the start of this sprint. Great efforts were made to stabilize the amount of bugs and even keep P1 bug number drop.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/_abXC_M3LqFDCPe31DLX4hv01AyN19LMYlV3UDx7fPGchqAutCc9tGLKuDaM51LBUKc6SBcVYiQRjJCaznQzw16sJD8xir4Mqyq1RuBfJtk05ganqrhVTSqdVv0QKdCTkkmSGUCwSQ" height=196 width=318> <img alt="image" src="https://lh3.googleusercontent.com/iYcG2KtoT0Mt7qB3T7P-PzUhH-A6HYmLG5gw28veSDEhvvxp_O0DQ18EeJwRXqB4mqaclC1PJ6WZW1T0YrMiU7AAlHLUzLbDRCA721-B2d54YoNlo1TlsNWx83zDgrDjSqODzTG8kA" height=198 width=234></td></td>
-
-<td><td>skobes@ fixed a scroll unification bug (<a href="http://crbug.com/1155655">crbug.com/1155655</a>).</td></td>
-
-<td><td>Symptom: can't scroll sub-scroller in iframe. Root cause: compositor thread hit testing had an early exit if it saw no scrolling layers, which did not check for slow-scroll regions. Extra challenges:</td></td>
-
- <td><td>Couldn't repro locally until realizing bug was OOPIF-correlated
- (hint: rainbow layer border)</td></td>
-
- <td><td>Slow-scrollers can contain or be inside non-scrolling layer-promoted
- elements. Therefore, we need to check slow-scroll region on EVERY layer that
- is hit, not just the one in front.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | April 2021 (Vol. 2)</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table>
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/august-2019/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/august-2019/index.md
deleted file mode 100644
index e1a0a4274af..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/august-2019/index.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: august-2019
-title: August 2019
----
-
-<table>
-<tr>
-
-<td>August 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh4.googleusercontent.com/oITVrglJINBJXDLj60V-z4SMEW9MG6rx2JrEdK6SyHqpBrYlhTL2l8LaJlvJh2jpm1XIXfjt788fB0wNN2xzzaDC1sy5tQ9jLTL-kFadhFnPNQdGNnB_vWtZHqp6QY9S4j02jkHR" height=267 width=596></td>
-
-<td>The opening slide from smcgruer@'s <a href="https://docs.google.com/presentation/d/1qSNpFJaCvuqibe0iPc1tBSwAPp1LSXFqPIKun-_Pj_U/edit#slide=id.g5f8061889d_0_0">presentation</a>. Fun fact: Google Slides is convinced 'casually' is not a word.</td>
-
-<td>Investing in knowledge</td>
-
-<td>To borrow a quote that was (maybe) said by Benjamin Franklin: "An investment in knowledge pays the best interest". Stephen (smcgruer@) embodied Franklin this sprint as - faced with <a href="https://crbug.com/979952">a bug</a> that he could not understand - he went back to basics and taught himself the Blink Animations interpolation stack from the ground up. His investment paid off. Stephen was not only able to fix the original bug, but he also discovered and fixed <a href="https://crbug.com/992378">another bug</a>, and gave <a href="https://docs.google.com/presentation/d/1qSNpFJaCvuqibe0iPc1tBSwAPp1LSXFqPIKun-_Pj_U/">a presentation</a> to the rest of the team sharing what he had learnt. The S&P 500 would be jealous of that <a href="https://www.investopedia.com/terms/r/rateofreturn.asp">RoR</a>.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/z53pe_NaaKwQUwC7wEzpQwDm0SgTT8WqRF91CAbqIKQ_pmh8HP_ZkhaUFx4kepVUD8QA09z961YZIfgy3OVEPy9D3oaj41aErpS_e-gypoow_vzRXtxiZKgsen6COqvZTQe_U3fn" height=171 width=281></td></td>
-
-<td><td>Constantly in style</td></td>
-
-<td><td>The interaction between Animations and Style is a subtle and sometimes fragile one. Animated objects are always changing, but we try to avoid causing full CSS style updates because those are expensive. Sometimes, however, we miss cases. This sprint, Rob (flackr@) discovered that pseudo-elements could <a href="https://crbug.com/988834#c9">override our no-change detection</a> code and cause unnecessary main frames! Thankfully our friends from the Style team were able to put together <a href="https://chromium.googlesource.com/chromium/src/+/b1cadc00d4f06846f7c426f66ee4a49e6a543177">a fix</a> and give our users back some frames.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/ScnUy4fn8zMfH0LcXR9ggqqatjErYxfCtLmcWEGgG06MI16f4PZWkHluvlzbAApSo0hE7BXCDDMSz5l8NBl6CJ2ncMTimLiaISR5eY954baOZHR3Hii6a_o8D7IxJ3XAXp7GP10q" height=227 width=115> <img alt="image" src="https://lh4.googleusercontent.com/lkKYKI9N9e8vb0OxTHmKn9UFUQcRb1JKezJUy9iDMY3anAvzIxMAGXB2VfOs03tiSfDcZKpmevU9DRz860L_O7pD6sdYUS90lfsXbcKAWKLQlSw3GS0DiL4mJTbwEvlSM3JhA9-a" height=227 width=115></td></td>
-
-<td><td>Smooth Paint Worklet animations</td></td>
-
-<td><td>An important goal of the <a href="https://docs.google.com/document/d/1USTH2Vd4D2tALsvZvy4B2aWotKWjkCYP5m0g7b90RAU/edit?ts=5bb772e1#heading=h.2zu1g67jbavu">Off-thread PaintWorklet</a> project is being able to animate Paint Worklets on the compositor thread. This keeps them smooth even if the main thread is busy. As of our most recent sprint, this is now working (behind a flag) in the latest Chromium code! The example above shows that the animation is smooth (left-hand side) with the flag turned on, and less smooth (right-hand side) with the flag off.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Timing is everything</td></td>
-
-<td><td>Kevin (kevers@) has been celebrating the summer months by tackling an ambitious code health project - bringing blink::Animation in line with the web-animations spec. Thanks to Kevin's hard work (and a steady supply of strong coffee), our implementation is slowly but surely converging with the web-animations spec. This not only makes it much easier to understand, but a healthy number of web platform test failures based on tricky timing issues have been squashed. Fantastic work by Kevin!</td></td>
-
-<td><td>Countable CSS</td></td>
-
-<td><td>Taking a brief break from direct Animations work, Majid (majidvp@) discovered some <a href="https://crbug.com/993039">problems</a> with how CSS UseCounters are created this sprint. The manual (!) process was complex, missing a step in it could cause cascading failures for later-added CSS properties, and there were no automatic checks at all that it was all correct. No longer, thanks to Majid - he managed to <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1752503">remove one step</a> from the manual process and also added a set of <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1755413">automated presubmit checks</a> so nobody else will have to go through the pain he did!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><a href="https://www.lucidchart.com/documents/edit/069541b2-a5d7-4b5f-89f3-56455afac3f3/0?callback=close&name=docs&callback_type=back&v=972&s=660"><img alt="image" src="https://lh5.googleusercontent.com/h1XoTiLsay-bJT3_4WgJYlI7xCNMbSjeppOoc04D-JAZ-d3JInkO3NQcRt13bDSifCULj3olIczD_QH9d9XEg29oG6TlP285eaX8ebrPOJeXhoGKAxG5egQ6VJ9G9Upg1wgAqiGJ" height=394.6268181818181 width=511></a></td>
-
-<td>Figure that shows how the verification of hit test result works and how it does not work</td>
-
-<td>False positives + mismatches == matches…?</td>
-
-<td>Viz hit testing v2 is heading to stable (yay!). This sprint Yi (yigu@) investigated the remaining cases where the v2 result does not match what Blink comes up with. In a moment of serendipity, it turns out that half of the mismatches were false positives due to an imperfect verification path. When iframes are slow to load, there were <a href="https://docs.google.com/document/d/1AlDyVvKtZ_SZZey_76srFqaTM-QPor0pKc6VXE7lEMU/edit">three points in time</a> where Viz and Blink used different hit test data for the verification - which lead to mismatched results being reported. With this bug fixed, the mismatch rate dropped from 0.04% to 0.02%.</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | August 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/august-2020---code-health-animations-context-menu-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/august-2020---code-health-animations-context-menu-and-more/index.md
deleted file mode 100644
index 9123ad5d3fd..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/august-2020---code-health-animations-context-menu-and-more/index.md
+++ /dev/null
@@ -1,175 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: august-2020---code-health-animations-context-menu-and-more
-title: August 2020 - Code Health, Animations, Context Menu and more!
----
-
-<table>
-<tr>
-
-<td>August 2020</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Code Health</td></td>
-
-<td><td>Our team had an awesome sprint on bug fixing.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/owiAyDpZzfTYW5rAik3nJan9W6E4DsI0s127oetssl1Zpt1CrnI3BFqNW_HoOR3IRQFga05EQ1eiobzNGqISyuo4jxVC6H8eGZyxNXd_uGdBAVUImHk-koHYjRv4E26J-BPZ-7h9QA" height=168 width=307></td></td>
-
-<td><td>Thanks to kevers@, we now have a bug dashboard (<a href="http://goto.google.com/interactions-dashboard">go/interactions-dashboard</a>). The above graph shows opened vs closed bugs during this sprint. The dashboard also includes:</td></td>
-
- <td><td>Breakdown of cumulative issues opened and closed by
- component</td></td>
-
- <td><td>Total number of open issues by component</td></td>
-
- <td><td>Breakdown of closed issues by reason</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/v5UeZaDBwG0E8xifSNGs1zWxbO1IrJjsnUf1CXk-Urydx7EyS6ooei0deoEbs5Zxn2p9FvWQq4XeLlnaRMnY8lgGND36PfW6qnDmRWKVcqzaDuUg3lpezDfWp5g0iKll5StZi2xG7Q" height=158 width=492></td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/tyCAkYty-BGkwHg3GgW3MJwsn17hn1f6OmLDsZ03KTF6EdRRbYxvo2NkYmnipCd8-FmCIlNjy8P6wogQz9n0y6ArNgEXT6PQqFAGjutSPARPCT_rry5ERxuWaYkgjxCem5iPYZHgow" height=164 width=500></td></td>
-
-<td><td>flackr@ fixed <a href="https://crbug.com/1116020">flicker when setting style in finish callback</a> (<a href="https://output.jsbin.com/darepen">demo</a>)</td></td>
-
- <td><td>The top demo is broken, and the bottom one is fixed.</td></td>
-
-<td><td>liviutinta@ fixed several bugs:</td></td>
-
- <td><td>A Pointer Events tiltY reversed on Mac bug (<a
- href="http://crbug.com/1111347">1111347</a>).</td></td>
-
- <td><td>Fixed flaky test where pointermove on chorded mouse buttons when
- pointer is locked (<a href="http://crbug.com/1025944">1025944</a> <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2360494">CL</a>)</td></td>
-
- <td><td>Fixed 3 failing browser tests for Unified Scrolling: <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2364055">CL</a></td></td>
-
-<td><td>gtsteel@ made great contributions to bug fixing.</td></td>
-
- <td><td>Fixed crash in run_web_tests caused by increased number of X11
- connections used: <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2368420">CL</a>.</td></td>
-
- <td><td>Fixed AnimatedCSSProperties metric to count properties when animated
- (by anything which uses a KeyframeEffect) (<a
- href="https://crbug.com/992430">Bug</a>)</td></td>
-
- <td><td>Started UMA study towards fixing transition cancelling when
- resetting style (<a href="https://crbug.com/934700">Bug</a>)</td></td>
-
- <td><td>Relanded patch adding ontransition\* event handlers: <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2258467">CL</a>.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/hvsHNNrrxW1mAKU5UZUYURv7Man5793AmBYMJKxYNpazzfTZNao081OYbnQXawm_DaQC8mU9TcmEqfv1OoJBozBgQ5mFfUWptIfor2IkQq3hC9L5XKdms_CGuLy1YoNIjPOG21J6Ng" height=146 width=273></td></td>
-
- <td><td>Top animation is composited</td></td>
- <td><td>Bottom animation is main thread</td></td>
-
- <td><td>After the fix, the composited animation aligns with the main thread
- animation and there is no jump on reversal.</td></td>
-
-<td><td>Animations</td></td>
-
-<td><td>kevers@ fixed a weird reversal of composited animations with start-delay.</td></td>
-
- <td><td>The problem is that the process of converting timing properties to
- time offset for the compositor assumes the animation is running in the
- forward direction. The time offset is incorrect if playing in the reverse
- direction and there is a start delay (<a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1095813">1095813</a>).</td></td>
-
- <td><td>The solution is to Include the tweak for start delay only if the
- playback rate is positive. (<a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2339712">CL</a>).</td></td>
-
-<td><td>kevers@ Fixed 5 WPT test flakes and one non-WPT test flake for animations. (<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1093451">1093451</a>,<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1092177"> 1092177</a>,<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1092141"> 1092141</a>, <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1064065">1064065</a>, <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1085564">1085564</a>, <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=623434">623434</a>)</td></td>
-
-<td><td>WebDriver Actions API Spec</td></td>
-
-<td><td>lanwei@ finished the implementation in Chromedriver and Webdriver (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/2324972">CL</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2316405">CL</a>)</td></td>
-
-<td><td>Azimuth/Altitude for Pointer Events</td></td>
-
-<td><td>liviutinta@ shipped the Azimuth and Altitude.</td></td>
-
- <td><td>Received 3 LGTMs on <a
- href="https://groups.google.com/a/chromium.org/forum/?utm_medium=email&utm_source=footer#!msg/blink-dev/ZRI-7X_4GwM/Sp1ZMIw5AgAJ">Intent
- to Ship</a></td></td>
-
- <td><td>Landed <a href="http://crrev.com/c/2343385">CL</a> to enable the
- feature flag by default</td></td>
-
- <td><td>No feedback yet from <a
- href="https://github.com/w3ctag/design-reviews/issues/537">TAG
- Review</a></td></td>
-
- <td><td>Positive signal from Webkit, no signal from Gecko.</td></td>
-
-<td><td>Context Menu with Touch-Drag</td></td>
-
-<td><td>mustaq@ Added context menu support to draggable elements: behind a flag, show Window native draggable behavior of showing context menu on drag end (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/2340287">CL</a>).</td></td>
-
- <td><td>Before: draggable divs can’t show context menu because a touch
- interaction has to choose between dragging vs context-menu. We have links
- and images always non-draggable for this reason. (Hi-res video <a
- href="https://drive.google.com/file/d/1W2zX7_SdCVVoV0yh9nwK6SY7X29ozOII/view?usp=sharing">here</a>).</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/mI0QBIs9oloJh6Foi_XwnQJzfH4VwmPZejBZkcPwmMOEjj2k4R9l-ledgLWkVXpVONHg6sHtsZU1JhlPqWkoz5RZqbv8MoMBmkjcL70QaqXT9n9fvov5ltkyj_5xqNOF_dDNh1jbZQ" height=200 width=280></td></td>
-
- <td><td>After: draggable elements shows context menu on drag-end, like
- Windows desktop icons. Context menu depends on where the element is dropped.
- Works on divs, links and images. (Hi-res video <a
- href="https://drive.google.com/file/d/1MkUOjoi6qJnUl_XFphFzqonVQjg9XyO5/view?usp=sharing">here</a>.)</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/Y4BB2dlHUTM3gmFARKxmlPRJ0WWZhSLkaCwNr_r7LrbsRPBBqaoY6sSvKYgEe13wMVEmZFWsUI4bTnTSHnZnewJiJWDqjhChVNLLbkOZqw_klQOQ1ZusQw8cvyAApXSkCLFRDuM3Rg" height=200 width=280></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Throughput Metrics</td></td>
-
-<td><td>xidachen@ fixed wrong reporting in video frame sequence length (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/2342247">CL</a>), where 50% had length of 0 frames.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | August 2020</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/august-2021---new-features-fixit-testing-code-health-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/august-2021---new-features-fixit-testing-code-health-and-more/index.md
deleted file mode 100644
index d31cb9f84f8..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/august-2021---new-features-fixit-testing-code-health-and-more/index.md
+++ /dev/null
@@ -1,361 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: august-2021---new-features-fixit-testing-code-health-and-more
-title: August 2021 - New features, Fixit, Testing, Code health and more!
----
-
-<table>
-<tr>
-
-<td>August 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll timeline spec</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/m5zIa5C1ZvdM09GFsx1cTUAA5aMCjRCMYDm5hT5ug7WGQqca86W_kSBc2bYuyFEc1y3cB7bDBg8RBBCX2RE_P--GbZUX0NxR4yG_d9tn0NryDCOmMYzutUnC6tpydCMaIfz06BHxxA" height=145 width=283></td></td>
-
-<td><td>kevers@ changed the spec for the “setting the timeline of an animation” part.</td></td>
-
-<td><td>Problem</td></td>
-
- <td><td>Scroll-timelines are now progress based and not time based. Two
- cases where we need to preserve the “progress”:</td></td>
-
- <td><td>Switching to a scroll timeline while paused</td></td>
-
- <td><td>Switching from a scroll timeline.</td></td>
-
-<td><td>Solution</td></td>
-
- <td><td>Augment procedure to include calculation of previous
- progress</td></td>
-
- <td><td>Preserve position.</td></td>
-
-<td><td>kevers@ is also changing the CSSNumberish current and start times. CSSNumberish is a double or CSSNumericValue, where CSSNumericValue has a value and a unit.</td></td>
-
- <td><td>The problem with current & start times remaining as doubles is that
- it requires inferring a different unit depending on the timeline. Animations
- associated with a scroll timeline are progress based and not time
- based.</td></td>
-
- <td><td>This would allow:</td></td>
-
- <td><td>scrollAnimation.currentTime = CSS.percent(30);</td></td>
-
- <td><td>timeAnimation.startTime =
- CSSNumericValue.parse(‘-30ms’)</td></td>
-
-<td><td>Composite BG-color animation</td></td>
-
-<td><td> <img alt="image" src="https://lh6.googleusercontent.com/YwLTJWcJyqJCA3Qp3Udo7jVtFHSpaW_DltCWoYfwHucQ5S6TsUlcI1s-OOCVq-EnGpuStDav3F26tpwZYB4lUXtkEa-_fJ6QTfX8nCmzr3t6-HuFSIDNMxVJQnjyI8FnosUWhwlRqg" height=124 width=283></td></td>
-
-<td><td>xidachen@ launched the finch study for composite bgcolor animation. The preliminary <a href="https://uma.googleplex.com/p/chrome/variations?sid=9249d9466a749268e49631a32938b1bb">result</a> looks very positive.</td></td>
-
- <td><td>The above table shows the summary of the result with all platforms
- combined, canary + dev channels.</td></td>
-
- <td><td>Note that the blue ones show significant difference, the black ones
- are “not significant”.</td></td>
-
-<td><td>Given the positive finch result, we will ship this in M94.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Fixit</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
- <td><td>FixIt organizers are awarding skobes@ with a <a
- href="https://docs.google.com/presentation/d/1ahjM6k4TjGw6Pf_DGg1d7b30xROnav-7vV9ec-6CI1U/edit#slide=id.ge570983615_0_2467">High
- Achievement award</a> for fixing the <a
- href="https://crbug.com/43170">oldest bug</a>.</td></td>
-
- <td><td>We closed <a
- href="https://bugs.chromium.org/p/chromium/issues/list?sort=Pri%20-Stars&x=Status&y=Owner&cells=counts&q=label%3Achrome-fixit-2021%20owner%3Aflackr%2Cgirard%2Ckevers%2Cmustaq%2Cskobes%2Cxidachen%20status%3Afixed%2Cverified%2Cwontfix%2Cduplicate&can=1&colspec=ID%2BPri%2BStars%2BType%2BComponent%2BStatus%2BSummary%2BOwner%2BModified%2BOpened">15
- bugs</a> in total:</td></td>
-
- <td><td>Got rid of bugs with <a href="https://crbug.com/716694">52</a>,
- <a href="https://crbug.com/1148143">37</a>, <a
- href="https://crbug.com/43170">27</a> and <a
- href="https://crbug.com/61574">12</a> stars.</td></td>
-
- <td><td>Landed code to fix <a
- href="https://bugs.chromium.org/p/chromium/issues/list?sort=Pri%20-Stars&colspec=ID%20Pri%20Stars%20Type%20Component%20Status%20Summary%20Owner%20Modified%20Opened&x=Status&y=Owner&cells=counts&q=label%3Achrome-fixit-2021%20owner%3Aflackr%2Cgirard%2Ckevers%2Cmustaq%2Cskobes%2Cxidachen%20status%3Afixed%2Cverified&can=1">7</a>
- of bugs.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Testing</td></td>
-
-<td><td><table></td></td>
-<td><td><tr></td></td>
-
-<td><td><td>Deflake scrolling tests</td></td></td>
-
-<td><td><td>kevers@ fixed quite a few flaky scrolling tests.</td></td></td>
-
-<td><td><td>mouse-autoscrolling-on-deleted-scrollbar:</td></td></td>
-
- <td><td><td>Timeout: fixed by deferring start until ready</td></td></td>
-
- <td><td><td>Position mismatch: fixed by waiting for scroll event before
- checking position</td></td></td>
-
-<td><td><td>wheel-scroll-latching-on-scrollbar</td></td></td>
-
- <td><td><td>Timeout: fixed by deferring start until after
- onload</td></td></td>
-
- <td><td><td>Position mismatch: fixed by allowing for fractional
- offset.</td></td></td>
-
- <td><td><td>Note this was the top Blink&gt;Scroll flake!</td></td></td>
-
-<td><td><td>mouse-scrolling-over-standard-scrollbar</td></td></td>
-
- <td><td><td>Position mismatch: fixed by using established way of determining
- scroll thumb position and waiting on scroll event.</td></td></td>
-
-<td><td><td>Deflake an animation layout test</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh5.googleusercontent.com/QPnqYwNJLp7eAqU1gLSfLhImusPZX2D2kIs1E0j_IglvO4r7DOSfHCIVBfyA5mV3pNcH5O5i_WfhegxFsuuoaBqfZXUO0L7HmmXnbiD7tQm-omNhSlSx-47ZUCCQIASa-fHRGS-hCA" height=39 width=277></td></td></td>
-
-<td><td><td>xidachen@ fixed a top Blink&gt;Animation flake. The root cause is that we do “A==B” when we compare two AnimationTimeDelta, and that the precision issue caused flakiness.</td></td></td>
-
-<td><td><td>The fix is shown above, which is by introducing an epsilon when comparing two AnimationTimeDelta.</td></td></td>
-
-<td><td></tr></td></td>
-<td><td></table></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Chapter IV: Code Health</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><table></td></td>
-<td><td><tr></td></td>
-
-<td><td><td>Remove use of DeprecatedAtOrEmptyValue in animations</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh4.googleusercontent.com/ui6bPPR-paFdFEVPGiMhTMZFVQbPfxyYsjpq3EElvbp7Z3EfAZZ8SawdFzxoyn5B25f-eEN4QumftjcjYPjtGQUrSZJcYgSq7hB-T42eTh1OjVkamB8HxpuP-x-Av1Uxj44uJ95sQA" height=21 width=277></td></td></td>
-
-<td><td><td>kevers@ removed the usage of DeprecatedAtOrEmptyValue in the animations code base.</td></td></td>
-
- <td><td><td>Here is the <a
- href="https://docs.google.com/document/d/18JIiajErikZaBzCtZvl-wwAJShqZsg0jT9wVyPBhSdU/edit">design
- doc</a> for WTF::HashMap&lt;&gt;::at() refactor.</td></td></td>
-
-<td><td><td>Cleanup of CompositorKeyframeModel constructors</td></td></td>
-
-<td><td><td>kevers@ cleaned up the CompositorKeyframeModel constructors.</td></td></td>
-
-<td><td><td>The issues are:</td></td></td>
-
- <td><td><td>3 public and 1 private constructor. All public versions end up
- calling the private constructor</td></td></td>
-
- <td><td><td>Unnecessary if-else construct</td></td></td>
-
- <td><td><td>Opportunity to improve efficiency with move-value
- semantics</td></td></td>
-
-<td><td><td>Resolution:</td></td></td>
-
- <td><td><td>Single constructor that takes a KeyframeModel::PropertyId
- argument</td></td></td>
-
- <td><td><td>Add move constructor and move assignment operator to
- TargetPropertyId</td></td></td>
-
- <td><td><td><a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/3060658">Negative
- line count CL</a>.</td></td></td>
-
-<td><td><td>Refactor Native PaintWorklet</td></td></td>
-
-<td><td><td>xidachen@ refactor the native paintworklet code.</td></td></td>
-
- <td><td><td>Detailed design <a
- href="https://docs.google.com/document/d/12g1OLIxZk9ayLNbOI87ru_yoUUWdxcKewDLRR4tqzi8/edit#">doc</a>
- here.</td></td></td>
-
- <td><td><td>The refactor reduced a middle layer, and made the entire
- workflow simpler.</td></td></td>
-
- <td><td><td>Landed 3 CLs. (<a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/3016115">Part1</a>,
- <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/3044499">Part2</a>,
- <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/3067315">Part3</a>)</td></td></td>
-
-<td><td><td>Magic behind move-value</td></td></td>
-
-<td><td><td>kevers@ learned something about std::move.</td></td></td>
-
-<td><td><td>Move constructor</td></td></td>
-
- <td><td><td>Foo::Foo(Foo&& other): other is a temporary object that may have
- its contents reset as a result of the move. Note the r-value ref cannot be
- const.</td></td></td>
-
-<td><td><td>Move assignment:</td></td></td>
-
- <td><td><td>Foo::operator=(Foo&& other): same thing. Other is temporary and
- may be reset.</td></td></td>
-
-<td><td><td>Foo foo = CreateExpensiveObject(...)</td></td></td>
-
-<td><td><td>In this case, no std::move is required since RHS is already an r-value.</td></td></td>
-
-<td><td><td>Foo expensive_foo_instance = TakeOwnership(std::move(expensive_foo_instance));</td></td></td>
-
-<td><td><td>std::move is required to take advantage of move-value semantics since expensive_foo_instance is an l-value. Adding std::move converts to an R-value reference.</td></td></td>
-
-<td><td><td>Useful instead of const & when not able to share an instance but can pass ownership. <a href="http://thbecker.net/articles/rvalue_references/section_01.html">Further reading</a>. See also <a href="https://docs.google.com/spreadsheets/d/1U8byWhb9_vGWVzYtnh8UoH0Xv0vpEyfumUnh2GpOruw/edit#gid=0">pkastings C++ 201 talks</a>.</td></td></td>
-
-<td><td></tr></td></td>
-<td><td></table></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Stability/security fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Fake user activation from Extension Messaging</td></td>
-
-<td><td>Interactions team and Extension team together made a concrete plan about an old P1 security issue with fake user activation (<a href="https://crbug.com/957553">Issue 957553</a>).</td></td>
-
-<td><td>Here is a brief history to see why this is important:</td></td>
-
- <td><td>The problem was known 3+ years ago, and we got the security bug 2+
- years ago.</td></td>
-
- <td><td>We posted solution ideas but compat risks held us back. Our <a
- href="https://docs.google.com/document/d/1TKjjwFlQGh2LLm0_mOW6FJdmmwyOBMj_fdWJyAJ_Q50/edit?usp=sharing">design
- doc</a> in early 2020 didn’t get enough traction for the same
- reason.</td></td>
-
- <td><td>We added UMA in late 2020 to slice the problem but got <a
- href="https://docs.google.com/presentation/d/1xyyeMLNFFPNlMkulSb_nVvmpOZJ6OpYyE1TNsZvFyZQ/edit#slide=id.ga4b082cc16_1_0">confusing
- results</a>.</td></td>
-
- <td><td>We committed to look again in Q3 this year, and coincidentally got
- an <a href="http://crbug.com/1233544">escalation</a> from fbeaufort@ and the
- Media team just in time!</td></td>
-
- <td><td>Brainstorming in early Q3 by mustaq@, flackr@ and rdcronin@ led us
- to a solid plan, finally!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter VI: à la carte</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>\[Scroll Unification\] Scheduling investigation</td></td>
-
-<td><td>skobes@ investigated on the scheduling improvements for scroll unification.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/KzoJ1wz9JNBOE4niu0yJi1m8kRTEnT7NbNJXLJnJIaZuOrjCTmHd15yxkvHBf8AVDg-S2shF3__QGBN-4Gp0N5DUot3_M3VXppGLPGpZjQ0AF911GQJZ89ZybDi3yNZWb5cgD4NZqA" height=119 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/nE2WWtZkK69TinInED4oHRiMojIbDnoQucrmY9F3qRVTfZLC9XIg4z78xCQDfyQQlKv1z-gP6vnodL4jXpwNRARabUEeQNkRXKbrenRd4mZ3Exdy8ttXEyn6UBNcPBR4_510lAWVow" height=112 width=283></td></td>
-
-<td><td>Less motion, plz!</td></td>
-
-<td><td>Remove animations option in settings disables a lot of system animations including stretch overscroll.</td></td>
-
-<td><td>In Chrome, remove animations sets prefers-reduce-motion:</td></td>
-
- <td><td>This <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/3046841">CL</a>
- plumbed prefers-reduced-motion from blink to compositor and wired it up to
- input_proxy_client.cc to disable elastic overscroll (on Android
- only)</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter VII: Bug Updates</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/yx34TxFllV0ep-DPg1EYjWu52FJDaFuXyFk5bjznHkSCdSVfVWputqfO3rJkZau0pzpeiexbNcpgd3QbpqNG-i-Mr9TSpOKJEv8uJk8UwvgRUMSMqdqqr3JFxcvPLzNYYzgMY42a-g" height=156 width=287> <img alt="image" src="https://lh6.googleusercontent.com/7asOshHrb-Mi9gCdsGobedpUlzBQgvlWAsLj4BSr8VDN6tZ9FuMrH4Zy2eL2vmH-IcUMXGDTYf8py1pFocLtCPnul_Ljgg-HWToEjP5V-a9VUrWKmbHm9T94Z8hrtsF7fl1yRaRuuA" height=157 width=285></td></td>
-
-<td><td>Our team lost a bit of ground in P2s && P3s, but kept the P1s in check.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | August 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/august-2021-vol-2---new-features-code-health-stability-security-fixes/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/august-2021-vol-2---new-features-code-health-stability-security-fixes/index.md
deleted file mode 100644
index 0a80929af99..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/august-2021-vol-2---new-features-code-health-stability-security-fixes/index.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: august-2021-vol-2---new-features-code-health-stability-security-fixes
-title: August 2021 (Vol.2) - New features, Code health, Stability/security fixes
----
-
-<table>
-<tr>
-
-<td>August 2021 (Vol. 2)</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Composite BG-color animation</td></td>
-
-<td><td>xidachen@ resolved a few problems and this feature is now close to finch on Beta. Specifically we have enabled field trial testing (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3085961">CL</a>) so all perf bots can run tests with this feature. All regressions and improvements are summarized <a href="https://docs.google.com/document/d/1Fkp7udbCgYqVtNf4gn-NXGVYamPrd_n0qKqalruTq6E/edit#heading=h.6genmqxclwba">here</a>.</td></td>
-
-<td><td>We have resolved the memory increase (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3088776">CL</a>). Here is an <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1238995">example</a> where a perf test used to crash due to OOM now works fine.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/BlgpoWYHjGO-GwxXaaDY5Bx0AFAp6cww8WbcxkZecQRKvkvY5tIw60xzDE6XiWEbGIzGoH7f9deTeZKU_0QNoQkLwKJzl9PGfYVYW_SI3iFnwP-9j3zQ2EWUpytmUK4qtebbkwU6_w=s0" height=47 width=283></td></td>
-
-<td><td>There is a performance regression (<a href="http://crbug.com/1238554">crbug.com/1238554</a>) that has been addressed as well. It was fixed by this <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3099785">CL</a> where we found that we were doing a lot of un-necessary work which slows it down.</td></td>
-
-<td><td>Note that the above curve has improved, but didn’t go back to the original level. With further investigation, we found that the root cause is because the tests aren’t well written. Specifically, the tests contains background-color animation on a solid-color layer, and our system has optimizations towards solid-color layer which is not implemented in CompositeBGColorAnimation yet.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/No7kJ2RfnZ3hpi1d_b0LDRdEFLDcUr-vyYLSOJode6Ie9Hz1lc5Eb1tE_seIIroBsuH0th5CDWb5D3h4DGzXOBFDYIxBzmQAyCvhEi0zdnuV5hUfXjcTm7agkTIxhL4znpgP4biLzQ=s0" height=111 width=283></td></td>
-
-<td><td>A <a href="https://pinpoint-dot-chromeperf.appspot.com/job/16e27f8d320000">pinpoint job</a> was started where the layer made to be not long solid-color and the above shows the result. The right column is with CompositeBGColorAnimation and we can see that it actually made a performance improvement.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/_h4jB7RpT2aAS7wMfWe_gT486MtA5VxCbyNwkZT9JN3Z4GP8bMaWrucDgES4rAxjw-SQcdoJUSgrJ7DMixmtbIc9kVCaDPGWSZ2iFK9ExmHguggBqnFXEuzggI1040MFLAKwO7AueQ=s0" height=239 width=283></td></td>
-
-<td><td>mehdika@ modified Element Fragment code (that already exists) to work for any other element.</td></td>
-
- <td><td>For now we just scroll to the element, later we will add more
- features like highlight the element, etc.</td></td>
-
- <td><td>We use the <a
- href="https://github.com/WICG/scroll-to-text-fragment/blob/main/EXTENSIONS.md#proposed-solution">following
- syntax</a> and find the element with the help of QuerySelector().</td></td>
-
- <td><td>https://example.org#:~:selector(type=CssSelector,value=img\[src$="example.org"\])</td></td>
-
-<td><td>Elastic overscroll</td></td>
-
-<td><td> flackr@ fixed two problems in elastic overscroll.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/f60VPX4rF8xa05SmWJoUaHAyIB6tYNNOsJiT6bDIH68vIkGxrFu6P80qxYfSkQgkCxN1KavWA1Nl6-i79f-LrePYMQ1diCPvWemIgasnclYNVnqmES49Vb3OXAXruuDkhYNoxCCO6A=s0" height=271 width=140></td></td>
-
-<td><td>The first problem is the <a href="https://crbug.com/1241128">subtle shift in content</a> during overscroll bounce. The fix is to use ScrollTree::container_bounds which includes container_bounds_delta.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/luovHFpiZXnYWJflHP4bK1bmtxsX3if5-7Wb1n9bRMnptIcAWRvBr4bjsAjpQtM1K3JEApvhm8rZ_xBvepJsBvv_hftRmUhJUZsvhqHIHm_OVkkEMLen2WWZ6lkoyaMLSdwtalM5BA=s0" height=304 width=144></td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/S-vMAJInKPvA5rr9AV0AYucyWnksNnOyqjFuvQbDy7dXrl7Kl34d7ZEwu5h5EcVbqoGORR25GkHp3quncnezDchwCW90pLQ_RYg70bDBioUBYyqWL1zpbTuZu8c8ZoLSSrszZ0jhXg=s0" height=120 width=283></td></td>
-
-<td><td>Another fix is to reduce elastic overscroll stretch. Particularly, we have updated parameters in ElasticOverscrollControllerExponential to more closely match native overscroll.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Code health</td></td>
-
-<td><td>Native paint worklet</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/9afv77mmImR7H4z7fyr8ZS-XToIG4RhBMkejhY3AOIQUKMXWlA_ySV-EVb-NMYPjga5O-022spge9UB5YYU9CNEOY0Oec9VAL2qqmnRIDm_bTFBoprjXri3myxnLJR-gMvL-Q473BA=s0" height=166 width=267></td></td>
-
-<td><td>xidachen@ moved some common variables && APIs among different native paint definitions to their super class, which results in a negative line count <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3107065">CL</a>.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Stability/security fixes</td></td>
-
-<td><td>Elastic overscroll crash</td></td>
-
-<td><td>flackr@ fixed a crash in blink::ElasticOverscrollController::ObserveGestureEventAndResult.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/jzBDWMpXaZA89CHIfAgkHHbtj7ZUhGSTXZKdgHtXbrWMBeg5qnpQNg-W8tJo-ZJ1PFVVJwEF1spteUiqZZAU916zfZGTQkitaBZKNJeDnG33GUDr0_u2yZH0tWB87DvIJmbeN68bMg=s0" height=113 width=281> <img alt="image" src="https://lh6.googleusercontent.com/l1LVluQlx5yCSgI90jRXu7kapwviFAWiwQ6LLmuf49essWuTiHcwWtgLrBLAjSMxHZzzLHbHCd2UN0jlCkXQvfS6TBVeEzsEUCdDtX3GZ6gBZ1nUwXNhYHNDlMQVHJJ_vcGJ9lVUGg=s0" height=91 width=289></td></td>
-
-<td><td>The above shows the stack trace, which indicates that ObserveGestureEventAndResult is called on nullptr ElasticOverscrollController.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/cNwoM-2-Z2HdN09LJm6TuAH9Rr79DKL_UmMgnLhe4O0pXArSweGnVnflrGUHKj6JeckhafOcK5-YIDsiFah6HinZqgc31dCj4N9ef5GlQNEpVNxyQvRiJXqEm-Vxet4T5Aq0lNXXMA=s0" height=94 width=303> <img alt="image" src="https://lh5.googleusercontent.com/FHMh0qf5yC9jQ3ur_xkp88Gu0beOaqKMd4W8Pj9igoOa2kRaoBVANIhouGa-EKmOsU75nVrdW3yeBH5aDi6GQtz8q5mwNdrXovTda4qGKGxuxPAxgdZUxY_OFLbOrFK1YLgHQJmlRA=s0" height=101 width=261></td></td>
-
-<td><td>It looks like we have added check, as shown in the above. But why didn’t it crash before? It appears that the crash is from the posted task.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/baTU4Jeg3NHXIYO6WXzlHVNOW2Z0qFZ3A-zQ7Wj-osP-2nk2FG1QuLk1bf6VqOuy4QsziT0yXkLpwNpPZvf3YBRjYUodulN5EpQ2e38l0256PTmNr1kaQg2jlQF5xYlHZOJ-3f9N9Q=s0" height=177 width=367></td></td>
-
-<td><td>Further investigation shows that the ElasticOverscroll is now controlled dynamically by prefers-reduced-motion, so the fix is to check that too.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Interop fixes</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/hcw7zn56d5_NPAcmaJy1PaiMmtLKJul2Ze_tfE610DNIQs-wca7nZtOxOtXW-_v2i4IlpP-wyb4_zpJRm2uL2KPlUEGdciq-POm2T7UwR4dcwUyuFeOtLPomHUtDd8TvyNXOqHC1lA=s0" height=236 width=264></td></td>
-
-<td><td>skobes@ fixed a <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1114794">bug</a> where scrollTo doesn’t abort mouse wheel scroll animation. The solution is to cancel impl-side scroll animation when we get a programmatic scroll. This also fixed a bug in scroll unification.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | August 2021 (Vol. 2)</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/february-2021-new-features-testing-stability-fixes-code-health-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/february-2021-new-features-testing-stability-fixes-code-health-and-more/index.md
deleted file mode 100644
index 4793c050ece..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/february-2021-new-features-testing-stability-fixes-code-health-and-more/index.md
+++ /dev/null
@@ -1,255 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: february-2021-new-features-testing-stability-fixes-code-health-and-more
-title: 'February 2021: New Features, Testing, Stability Fixes, Code Health and more!'
----
-
-<table>
-<tr>
-
-<td>February 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New Features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Content-visible CSS animations & transitions</td></td>
-
-<td><td>kevers@ has been working on this feature and fixed some problems.</td></td>
-
-<td><td>Problem 1: Wasteful to run animations on hidden content (content-visibility hidden or auto + offscreen). </td></td>
-
-<td><td>Problem 2: Wasteful to check each frame if the conditions apply.</td></td>
-
-<td><td>Solution:</td></td>
-
- <td><td>Document has some global state for display locks.</td></td>
-
- <td><td>Added time of last lock update</td></td>
-
- <td><td>Use time of last lock update to determine if locally cached lock
- state is stale.</td></td>
-
- <td><td>Unblocks remaining steps in developing the feature. (<a
- href="https://docs.google.com/document/d/1Enj8nD-y2vgCp2A6-M2QFoUKf1-nxMX023ervOoXi50/edit?usp=sharing">Design
- doc</a>)</td></td>
-
-<td><td>Composite background-color animation</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/T329-TOc6C-VtU5u5Dry6zo-250r722wLDaPyE7QrioBJWEzmLezgu9OpHZP3X7Us9GSJc-0L2bcU2IABFNziUPI-wl19ECPiL0rcAHy1CSMFKq0vArDbw4qlOG8Q_amwpp9JFUXfN1CK0ibHfhXywQO6xl-YjWk7q99dff4MSE34Y9R" height=203.57052631578944 width=217.23208556149734></td></td>
-
-<td><td>xidachen@ landed some CLs to complete the implementation for this feature, and then started a finch experiment.</td></td>
-
- <td><td>The first finch study had a lot of crashes, xidachen@ <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2675160">landed</a>
- fix for that.</td></td>
-
- <td><td>The second finch try crashed a small number of users, xidachen@ <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2692609">landed</a>
- fix.</td></td>
-
- <td><td>Currently, there are two known problems, and we are actively working
- to resolve them.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Animation Validation</td></td>
-
-<td><td>xidachen@ worked on validating main-thread animation detection logic, as part of the core web-vitals effort.</td></td>
-
- <td><td>Here is a <a
- href="https://docs.google.com/document/d/1iz0YdNKHpcObTe3UrM7uY6fsGv8xOlwY35m5dZzIoR8/edit">doc</a>
- that describes how to detect different types of main-thread animations from
- traces. And here is a sample <a
- href="https://drive.google.com/file/d/1IdObZMCYRMraUIYcM5RSQo2L9u2Uhqw9/view?usp=sharing&resourcekey=0-rTeQ2zu0ajWxMtGGhFAKng">video</a>
- of output.</td></td>
-
-<td><td>Impulse animations</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/28lZWBVSb1BQHulAMjKveaDG9I3uaNXJzPzD5ZdwTS2KhNWn85CZdnDZL-e_f2P6BT1PLiIYvCw6nzpmFsCmiKtJsEwBWBJhxctZDOb4-U16TuvW6j5ursJPg7H0T5EEiGztd1LShDKjzfIs02ulLhPAVhJAV_Ydrsj1lSQzPV7KB5VO" height=92 width=134> <img alt="image" src="https://lh4.googleusercontent.com/3SRHx6N3NrBhVlYRrGv_d70qwqH_zQyQL_0PXr2D3HI4tTRXYr8RzirbqcOKtBj6Xg4TPfWZtwwUfSk8nNekZ8Yi5CSkiqDta1-I3bpSBpn0MRo8OYXnQPrWbXp8cCK6NSULireHlRgvC-7ji80BER6HBB12jqNgaVproz-4RXMykV7Z" height=90 width=133></td></td>
-
-<td><td>flackr@ supported <a href="mailto:arakeri@microsoft.com">arakeri@microsoft.com</a> to implement this feature, which has a faster initial impulse when scrolling. This is shipped in M90.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Click/Auxclick as pointer event</td></td>
-
-<td><td>liviutinta@ made some great progress in this sprint.</td></td>
-
- <td><td>Bug hunting - no bugs identified.</td></td>
-
- <td><td>Expanded finch experiment to 10% stable.</td></td>
-
- <td><td>Landed Accessibility click <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2679278">CL</a>,
- part of which was relevant to Click as pointer event.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Testing</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Deflaking tests</td></td>
-
-<td><td>In order to fix some flaky tests, kevers@ made some changes to gesture_utils.js. Work was already underway to replace use of waitForAnimationEnd with waitForAnimationEndTimeBased. </td></td>
-
-<td><td>The problem with the former method is that the timeout is expressed in animation frames and for our fast tests these trigger every 1ms instead of the usual 16ms. </td></td>
-
-<td><td>The later method is a step in the right direction, but tends to flake when test machines are under load. The reason for this is that the timing starts when the gesture event is queued and not when scrolling begins. Also, since we snap after the initial scroll completes, we are queued up a second smooth scroll, which can timeout while queued. </td></td>
-
-<td><td>A third approach, waitForScrollEnd, is being introduced to address these problems. This method can also deprecate the waitFor method (same timeout issue as waitForAnimationEnd). By using scroll events, we avoid flakes due to queuing delays and handle chaining of scroll events better, while at the same time tests complete faster by avoiding unnecessary waits once the target position has been reached. </td></td>
-
-<td><td>TestDriver Action API</td></td>
-
-<td><td>lanwei@ kept improving the TestDriver action API and made more WPT tests automatic.</td></td>
-
-<td><td>The following two pictures show the wpt dashboard for the TestDriver action API.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/N4_vKH1JiDu3pf13Ng6QfmjemCO1fSzV_QyfO6vHmB_AnaWTK8SPDoiLYag3lmb5FfmQfbW_4rdzbZiccNbQlv1j-JKigVmajoNNXbNciRwh1isPOfOTDfanvP6vcaHCq9VBtFWGMe-1l7CsDqDQuk4jWp_ROYO2R5Ah1u3sxcpLJcVK" height=102 width=140> <img alt="image" src="https://lh6.googleusercontent.com/vH3v_xKD--xwrrRcy4UosP2hEkBrVoK9WXRRZ5rAqIhi8vzlhN9COtKbNXeOkcXk5BvTNELRXJQlxVmk0rOlcDlvOkO2y_zN7AJZ3hiJBimD7R--jjIx9x1D9B7YMrHp32x4VY966SH9cKbaFhZOgeRYn3gXMPlyQBc8d5Q85ie5FQm5" height=71 width=135></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Stability Fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Fixed crash in set current time</td></td>
-
-<td><td>xidachen@ fixed a crash when the timeline time is Infinity or -Infinity and that timeline is attached to an animation. The solution is to special case when the current time is Infinity or -Infinity.</td></td>
-
-<td><td>Fixed crash in null animation timeline</td></td>
-
-<td><td>The problem occurs when we set an animation timeline where its previous timeline is null. xidachen@ resolved this by loosing the condition of some DCHECKs to ensure that we can handle the case where the previous timeline is null.</td></td>
-
-<td><td>Prevent user from exiting fullscreen</td></td>
-
-<td><td>mustaq@ fixed this issue which has complicated initial repro and that misguided our initial investigation. mustaq@ spent hours to narrow down the root cause, and it is due to the print dialog on another tab halts the main thread. Moreover, now we have a minimal repro of 12 lines of HTML + JS.</td></td>
-
-<td><td>Fixed crash length interpolation</td></td>
-
-<td><td>The crash happens when the “from” and “to” value of the interpolation is interpreted as Infinity. xidachen@ fixed it by only DCHECKing when the interpreted value is finite.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Code Health</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/jyVUQx4WQb7YDctRAjafGXZE-w7qxcUmoGFWxzW_ujPxx7YlWgKFZiF_Y982jngBopZsRX-hW70W5fDTdXcAhFwTWa15TZ8Tq-29VLl2PmiCu1FQE1DnoXfcatmbzlq1c_YqpaKuOf2gV2UeZ2MkJ47vkjPsi3xKxRAMjC7YZPJkG869" height=152 width=282> <img alt="image" src="https://lh3.googleusercontent.com/wEPBpfUYaObQqvjrBwCsfE7sIQ0bSJTIUS0345K6O9QICMbn1PPbIQdu0d8ApDFGSqUWPgPt43sJ8EweAgRR2o1Wt9OZWSOK5bO5uWMkyfu8njZ5nFa_DK5VLudJBfcSffh8AW2oYLJ2_RExeqCndVT4yyhNfwWGnqRxKRqwXNrGEvK5" height=152 width=278></td></td>
-
-<td><td>Our team holds ground on P1 bugs. In terms of bug tracking, we switched the y axis from “issues” to “bugs”, which more accurately reflects goals to improve product excellence.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Miscellaneous</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Tabs</td></td>
-
-<td><td>girard@ started this Tabs <a href="https://docs.google.com/document/u/0/d/18C_W5SRsuPfCyyXbEsCjiHOGc8OWJXRlKvKKN-rlYsQ/edit">One-Pager</a>, and a lot of people are contributing to it now.</td></td>
-
-<td><td>flackr@ and nsull@ took a first pass at an <a href="https://docs.google.com/document/d/1HcQ75iRhO-dT7EHB6JrjmMATa9XlSCYZKWrXbzakexQ/edit?resourcekey=0-kYHpL3r3jY3Q8wtTaOa6aA">explainer</a>.</td></td>
-
-<td><td>Disable double tap to zoom for mobile viewport</td></td>
-
-<td><td>liuviutinta@ has a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2679278">CL</a> in review, and still working on writing tests for Andriod.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Accessibility click indistinguishable from real click</td></td>
-
-<td><td>liviutinta@ landed a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2679278">CL</a> to fix this <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1150979">bug</a>. The fix included:</td></td>
-
- <td><td>Added pointer events up/down.</td></td>
-
- <td><td>Populated mouse events coordinates appropriately.</td></td>
-
- <td><td>Cleaned up the code by using SimulatedClickCreationScope as argument
- for <a
- href="https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/core/dom/element.h;drc=763c071aa91f87c5e404edff98bc5bac8075d4a1;l=600">Element::AccessKeyAction</a>
- instead of bool send_mouse_events to clarify where the simulated click
- originates from</td></td>
-
- <td><td>Added wpt tests for clicks from accesskey and clicks from
- enter/space keys to ensure interop</td></td>
-
-<td><td>Pointer lock: pointerrawupdate coordinate jumps </td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/5O-XkmmvjyGYYQDme-3cP1Jgn2AjV2DE7szj47ylMZKvthruyejkLyCsC5XlO_CafCOkJVrVrD1dkPGjXfrxgZ7JigZFxv4A_su8UR_EldHtTJQ5fdDWJv2t8bhe5WYWeBMIymwE7cmXdr23S_Xtvyl1xon4aJEVoPOV5xTvPXd1RrA6" height=224 width=247></td></td>
-
-<td><td>musta@ discovered a regression due to a code “improvement”.</td></td>
-
- <td><td>In the code shown above, the Create() function does more than what
- the name applies!</td></td>
-
- <td><td>Regression has been fixed, a test has been added.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | February 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/index.md
deleted file mode 100644
index 8c71dba5c6f..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/index.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-page_name: highlights-archive
-title: Highlights Archive
----
-
-This page contains an archive of previous Chromium Animations team highlights.
-
-[February 2022
-highlights!](https://docs.google.com/document/d/1l_zGo07HRoj1ffvrc4VQKh4q1oI-qx6N1jnuc_abIXY/edit?usp=sharing&resourcekey=0-u6ySQmvFaOB3vs9nHtA3Fg)
-
-[January 2022
-highlights!](https://docs.google.com/document/d/1LGl_0kpUKsvX17sJOn-0hXuVDGZRpxit481FpkCIXS0/edit?usp=sharing)
-
-[November 2021
-highlights!](https://docs.google.com/document/d/1s1gbZ_2LZEM_-HJtv8W_15hzWzuVVMlSMdli5JKW8yI/edit?usp=sharing&resourcekey=0-o0n9VKkG9jC_WsFGx0GDaA)
-
-[October 2021 - 2 sprint's worth of
-highlights!](https://docs.google.com/document/d/14hFArq_0KHZ9HncBpiMR8RF_a7wEl-hvWob5DIgWqvc/edit?usp=sharing)
-
-[September 2021 - New features, testing, code health, interop fixes and
-more!](/teams/animations/highlights-archive/september-2021---new-features-testing-code-health-interop-fixes-and-more)
-
-[August 2021 (Vol. 2) - New features, Code health, Stability/security
-fixes!](/teams/animations/highlights-archive/august-2021-vol-2---new-features-code-health-stability-security-fixes)
-
-[August 2021 - New features, fixit, testing, code health and
-more!](/teams/animations/highlights-archive/august-2021---new-features-fixit-testing-code-health-and-more)
-
-[July 2021 - New features, fixit, stability/security fixes, interop fixes and
-more!](/july-2021---new-features-fixit-stability-security-fixes-interop-fixes-and-more)
-
-[June 2021 (Vol 2) - New features, stability fixes, Interop fixes and
-more!](/teams/animations/highlights-archive/june-2021-vol-2---new-features-stability-fixes-interop-fixes-and-more)
-
-[June 2021 - New features, stability fixes, Interop fixes and
-more!](/teams/animations/highlights-archive/june-2021---new-features-stability-fixes-interop-fixes-and-more)
-
-[May 2021 - New features, Testing, stability fixes, Interop fixes and
-more!](/teams/animations/highlights-archive/may-2021---new-features-testing-stability-fixes-interop-fixes-and-more)
-
-[April 2021 (Vol. 2) - New features, Testing, Stability fixes, Interop fixes and
-more!](/teams/animations/highlights-archive/april-2021-vol-2---new-features-testing-stability-fixes-interop-fixes-and-more)
-
-[April 2021 - New features, Testing, Stability fixes, Interop fixes, Metrics and
-more!](/teams/animations/highlights-archive/april-2021---new-features-testing-stability-fixes-interop-fixes-metrics-and-more)
-
-[March 2021 - Fixit week, New features, Testing, Interop, Metrics and
-more!](/teams/animations/highlights-archive/march-2021---fixit-week-new-features-testing-interop-metrics-and-more)
-
-[Feburary 2021 - New Features, Testing, Stability Fixes, Code Health and
-more!](/teams/animations/highlights-archive/february-2021-new-features-testing-stability-fixes-code-health-and-more)
-
-[January 2021 - New Features, Testing, Stability Fixes and Code
-Health!](/teams/animations/highlights-archive/january-2021---code-health-new-features-testing-and-stability-fixes)
-
-[October 2020 - Code Health, Scroll Timeline, Synthetic User Activation, Scroll
-Unification and
-more!](/teams/animations/highlights-archive/october-2020---code-health-scroll-timelines-synthetic-user-activation-scroll-unification-and-more)
-
-[September 2020 (Vol. 2) - Code Health, Logical Property Animation, Off-thread
-PaintWorklet, Capability Delegation and
-more!](/teams/animations/highlights-archive/september-2020-vol-2---code-health-logical-property-animation-off-thread-paintworklet-capability-delegation-and-more)
-
-[September 2020 - Code Health, Animation Timelines, Smoothness Metrics,
-Animation event handlers and
-more!](/teams/animations/highlights-archive/september-2020---code-heath-animation-timelines-smoothness-metrics-animation-event-handlers-and-more)
-
-[August 2020 - Code Heath, Animations, Context Menu and
-more!](/teams/animations/highlights-archive/august-2020---code-health-animations-context-menu-and-more)
-
-[July 2020 - Animations Documentation, Throughput Metrics, Code Health,
-Capability Delegation, User Input Security and
-more!](/teams/animations/highlights-archive/animations-documentation-throughput-metrics-code-health-capability-delegation-user-input-security-and-more)
-
-[June 2020 - Web Animations, Scroll-linked Animations, Throughput Metrics,
-Scroll unification, WebDriver, Pointer Events and
-more!](/teams/animations/highlights-archive/june-2020---web-animations-scroll-linked-animations-throughput-metrics-scroll-unification-webdriver-pointer-events-and-more)
-
-[April 2020 - Web Animations, Scroll-linked Animations, Throughput Metrics,
-Performant Meet, Hackathon and
-more!](/teams/animations/highlights-archive/april-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more)
-
-[March 2020 - Web Animations, Scroll-linked Animations, Throughput Metrics and
-more!](/teams/animations/highlights-archive/march-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more)
-
-[February 2020 - Web Animation, Scroll-linked Animation, Snap after layout,
-Throughput metrics and
-more!](/teams/animations/highlights-archive/web-animation-scroll-linked-animation-snap-after-layout-throughput-metrics-and-more)
-
-[January 2020 - Off-thread PaintWorklet, Web Animation, ScrollTimeline, Virtual
-Scroller, ScrollSnap and
-more!](/teams/animations/highlights-archive/january-2020---off-thread-paintworklet-web-animation-scrolltimeline-virtual-scroller-scrollsnap-and-more)
-
-[Nov & Dec 2019 - BlinkOn, ScrollSnap, Lottie, HitTesting, VirtualScroller,
-WebSharedLibrary, WPT and
-more!](/teams/animations/highlights-archive/nov-dec-2019---blinkon-scrollsnap-lottie-hittesting-virtualscroller-websharedlibrary-wpt-and-more)
-
-[October 2019 - Microtasking WebAnimations, Frame Throughput metrics, Group
-Effect polyfill and more!](/teams/animations/highlights-archive/october-2019)
-
-[September 2019 - TPAC 2019, Scroll Timeline polyfill, Paint Worklet launch,
-team changes, and more!](/teams/animations/highlights-archive/september-update)
-
-[August 2019 - Viz hit-testing false positives, code-health projects, counting
-CSS properties, and more!](/teams/animations/highlights-archive/august-2019)
-
-[July 2019 - GroupEffect, color interpolation, Viz V2 hit-testing heading to
-stable, and more!](/teams/animations/highlights-archive/july-2019)
-
-[June 2019, Volume II - Spooky bugs, prototyping ScrollTimeline, better bezier
-curves, and more!](/teams/animations/highlights-archive/june-2019-volume-ii)
-
-[June 2019 - Lottie renderer, jump timing functions, scroll-snap-stop and
-more!](/teams/animations/highlights-archive/june-2019)
-
-[May 2019 - shipping more of Web Animations, jank-free PaintWorklet animations,
-and more!](/teams/animations/highlights-archive/may-2019)
-
-[April 2019, Volume II - Lottie animations, stateful Animation Worklets, and
-more!](/teams/animations/highlights-archive/april-2019-volume-ii)
-
-[April 2019 - an update on PaintWorklet, performance improvements in Viz V2
-hit-testing, and more! ](/teams/animations/highlights-archive/april-2019)
-
-[March 2019 - better transform animations, AMP origin trial updates, and
-more!](/teams/animations/highlights-archive/march-2019) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/january-2020---off-thread-paintworklet-web-animation-scrolltimeline-virtual-scroller-scrollsnap-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/january-2020---off-thread-paintworklet-web-animation-scrolltimeline-virtual-scroller-scrollsnap-and-more/index.md
deleted file mode 100644
index 2cc22e02d4a..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/january-2020---off-thread-paintworklet-web-animation-scrolltimeline-virtual-scroller-scrollsnap-and-more/index.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: january-2020---off-thread-paintworklet-web-animation-scrolltimeline-virtual-scroller-scrollsnap-and-more
-title: January 2020
----
-
-<table>
-<tr>
-
-<td>January 2020</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh3.googleusercontent.com/YUOJZ1fWnO_xlHUDQwtYmpu-WxSH85_WGBxALF-sBbEKcuUmU9kYfM4n0HgfL9dLAQh9rm8CniR3f8MN1zSSq26Q-PQ1J2bur6eQSOWYbGIMri6MpQzwUutY8bN9tvF-fmYqG_fm" height=254 width=579></td>
-
-<td>Off-thread PaintWorklet shipped!</td>
-
-<td><a href="https://developers.google.com/web/updates/2018/01/paintapi">PaintWorklet</a> is a great example of Houdini's value offering, allowing developers to build complex yet compartmentalized controls like <a href="https://googlechromelabs.github.io/houdini-samples/paint-worklet/qr-code/">QR code generators</a>, <a href="https://googlechromelabs.github.io/houdini-samples/paint-worklet/ripple/">Ripple effects</a>, <a href="https://googlechromelabs.github.io/houdini-samples/paint-worklet/circle/">Custom</a> <a href="https://googlechromelabs.github.io/houdini-samples/paint-worklet/parameter-checkerboard/">background</a>, <a href="https://googlechromelabs.github.io/houdini-samples/paint-worklet/diamond-shape/">custom shape elements</a>, <a href="https://googlechromelabs.github.io/houdini-samples/paint-worklet/border-radius-reverse/">custom border effects</a>, etc. Off-thread PaintWorklet moves these effects off of the main thread, ensuring jank-free performance even under load. After a year of effort, Xida (xidachen@) proudly drove the feature to completion and turned it on by default in M81 on behalf of Rob (flackr@), Stephen (smcgruer@), Ian (ikilpatrick@) and the Animations team. The <a href="https://twitter.com/slightlylate/status/1225102256053182464">gif above</a> shows how the popular Lottie animation library is adapted to use PaintWorklet. Do pay extra attention to what happens when we inject artificial jank! There are a few caveats which will be addressed soon: it currently <a href="http://crbug.com/1046039">requires</a> will-change: transform etc to force a compositing layer and the animation <a href="http://crbug.com/1049143">must</a> start after the PaintWorklet is registered.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/NvUQu5IYtvdtY7R45QmkSgu3nQeN-09U0OevkZGYHxYzevW-kSTXG9OWwvm5l_F6YIHpmeEvfRrhjjlyUSObcRycnh6E8ujOPZxY6aSXV65PUj8PkIqaz_0Q1HkEmlK-O2Cj-WP0" height=166 width=292></td></td>
-
-<td><td>new animation created every mousemove</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/GvvT0tEqot8b8GNtWYK1gT4WAMuj2CInVNIoIKDYPYj0Y6W8Vrlj77L6vDKJ2As-oYs0NzTKc5BIAjU7bE3qR2zf9DdqoErxUPJvT3a0jnNyrOZM9cgNXqkR1ZIZpDE7CP3FySRb" height=166 width=265></td></td>
-
-<td><td>finished animations automatically replace older ones</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Support replaceable animations</td>
-
-<td>When a fill forward animation finishes, it remains in effect. If enough of these animations build up, they can negatively impact performance and leak memory. e.g. with the following code snippet we would create one animation per mouse move over and over until the memory runs out (left gif).</td>
-
-<td>document.body.addEventListener('mousemove', evt =&gt; {</td>
-
-<td> const animation = circle.animate(</td>
-
-<td> \[ { transform: \`translate(${evt.clientX}px, ${evt.clientY}px)\` } \],</td>
-
-<td> { duration: 500, fill: 'forwards' }</td>
-
-<td> );</td>
-
-<td>});</td>
-
-<td>Our team has worked closely to introduces a <a href="https://drafts.csswg.org/web-animations/#replacing-animations">solution</a> for this in the specification in the form of replaceable animations. This sprint Kevin (kevers@) implemented replaceable animations to tackle the issue. With this effort, animations that no longer contribute to the effect stack will be removed once they are finished (right gif). No more memory leak and performance degradation. YaY! See the <a href="https://www.chromestatus.com/feature/5127767286874112">I2P</a> for more details.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/4qcWWtrg9phgX7dhxKdmlxP3U954Xmql0JSasLQXOyQIMhPCu7S-JFaJoJNsJJucARKfOZxd6wXs45LxzPdQw70EiT_Om0Y6MXhMeBwjjr8xPVCppUvkpgteZUsB02lq2M4fgVNy" height=157 width=290></td></td>
-
-<td><td>--wpt_failure</td></td>
-
-<td><td>Kevin, Hao (haozhes@) and George (gtsteel@) made awesome progress towards shipping Web Animation this sprint. 78 previously failed tests now pass.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/Uyg0fdPdGq6ODnXLgjZGnmNCFS5pO9P1ddwD01GGPmarYHpy_e84ZPhlbtVRtWC7LpelF30LzhyQU_-kTye4-vaiAAQ-yGrYnxBV_5GLRKWC7y4GABOXm9HvhTndtw1eM-GqawOt" height=163 width=292></td></td>
-
-<td><td>Throughput metrics</td></td>
-
-<td><td>Frame throughput is designed to measure the smoothness of Chrome renderer, which reflects the performance. In the past weeks, Xida, Rob and Sadrul fixed a bug where a large number (~20%) of Canary users reported 0% throughput. The fix was landed right before M82, and now the number has dropped to ~1.6%. As a result, the 20% users with the worst throughput now report ~23% in M82 (green curve) compared to ~0.95% in M81 (red curve).</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/9PzpLhk5NoA-WWwcSA57_H8WhpxEcniJ2gBW2tScCrN5W3wNJDcuRMkRBANs4zxTCEd7HNYlfjlBsCF8Np7lWldJzxPus9LxZRbbYSyuqKN7QjpzFDirgGFZ9f_SzlydnxHhmolG" height=144 width=137><img alt="image" src="https://lh4.googleusercontent.com/Lrl4uTP7YZpFBi4-ni3PQBrE59h_4a3d05jelqPXpmLBPLg2CCvAwvXYGb9r4azaCvrRU9SgCR1gaQrj8sQxyZcoJo32WfYdQkj45nnSA58IjkmvoLwvrCfebksvFAuYmb1ykRAb" height=141 width=135></td></td>
-
-<td><td>++scroll_snap_after_layout_robustness</td></td>
-
-<td><td><a href="https://docs.google.com/presentation/d/1WUa6nFfkzXm2O1V70hr49vPFP4TOAbUh2q8fppkybJs/edit#slide=id.g6c0755777a_4_441">Scroll snap after layout</a> frees developers from forcing a re-snap after layout changes with JavaScript. Yi (yigu@) fixed a ship-blocker this sprint, i.e. transform inducing resnap, and turned the feature on by default in M81!</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/nap0TfLZVJKZObpmhgBK24I9qfmyZz9SI4qKnGtFidKd0xQqOs025U1QPHJNazzGMWNnb-eK0iMFkAx82mFuETIEj7IQISFkoPoPCcO-DydKrwAXVQY_DGhB2PgpEGUp1t6yOiAr" height=135 width=124><img alt="image" src="https://lh3.googleusercontent.com/8I7tcRP5Nc4yU9FX1zwGwzjmTN67a7oCVh9VZkzT6sMUTtsaAc3fDlj5wuBFntOnn6X6b84H9XZqfmH47bQDtML1njBCKZkpCCTUeSARKAgTF2yRj44VSaCOScdFADHqfxDn1p0q" height=161 width=145></td></td>
-
-<td><td>Free animations from pending state</td></td>
-
-<td><td>When there are composited animations in the process of being started, we used to defer the start of main thread animations in order to synchronize the start times. This process could lead to main thread animations getting stranded in the pending state if composited animations are being continuously generated (left “gif”). With Kevin’s excellent work, main thread animations queued up in a previous frame no longer get blocked waiting to synchronize with fresh composited animations (right gif).</td></td>
-
-<td></tr></td>
-<td><tr></td>
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Virtual Scroller</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh6.googleusercontent.com/4V1EVsDDGrmPaAcKIvuQU3aCOU-3uycfFi91_Zso6_sMqJ5tfnoeoiCpXaXAAe9kuHa-xITdMgGR9Q9VjVIIlP-OC35-nGF1itJPN4bE05vlDpLVMMDSaC9rlcRTJSn846di0PI9" height=216 width=276><img alt="image" src="https://lh3.googleusercontent.com/rP5n2ImsLCT49zKMIU8Z_oqbyj9QbHqn3roRV94A0Kgi1_3y3V3PhOlwKugvbpfASuL8RGt-yktBhma9YVl1sxJBCTkRz7Mq6gMuBdvIo7nYD1aO3rGFaB_4oH28MYDQU9hqpMVX" height=216 width=280></td></td>
-
-<td><td colspan=2>Rob worked with Vlad’s (vmpstr@) viewport activation, created a simple version of virtual scroller which exposed a <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1043674">scrollbar drag instability bug</a> (left). This was initially an open design problem - changed content sizes changes the scroll bar position and track length. While scroll anchoring keeps the current content visible the next drag tries to go back to the absolute position on the scrollbar. Rob applied a simple solution (right) - consistent with scrollers which load more content - treating scrollbar dragging as a delta from current position. To find a general solution, he started a <a href="https://github.com/WICG/display-locking/issues/109">discussion</a> and came to a tentative idea of locking the scrollbar area when drag starts.</td></td>
-
-<td><td colspan=2>Scroll-linked animations</td></td>
-
-<td><td colspan=2>The Animations team has been collaborating with Microsoft engineers towards shipping scroll-linked animations . This sprint we made solid progress on both standardization and implement work. Olga (<a href="mailto:gerchiko@microsoft.com">gerchiko@microsoft.com</a>) drove a <a href="https://github.com/w3c/csswg-drafts/issues/2066#issuecomment-568565738">discussion</a> with spec owners to settle some key concepts w.r.t. inactive timeline. She also made ScrollTimeline a first class citizen in AnimationTimeline. i.e. we now schedule frames for scroll linked animations only when scrolling changes instead of ticking them on every frame regardless. Yi did some fundamental refactor work on cc side and prepared to integrate ScrollTimeline with cc::Animation.</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh3.googleusercontent.com/wjWoc8_v9g3xloeJG_hM20QMJTS7O0Ge5wwCu8z1hsbHQJPRs-aHcRzNuLIsm6aXO66S9BReqtvmsrc2O9xauzcPQ0ThsstMKabq-GS3Eq99cNQswP-JwW_n_UOwO_UogX1m9Ml7" height=389 width=580></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | January 2020</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/january-2021---code-health-new-features-testing-and-stability-fixes/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/january-2021---code-health-new-features-testing-and-stability-fixes/index.md
deleted file mode 100644
index 39463ad6b33..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/january-2021---code-health-new-features-testing-and-stability-fixes/index.md
+++ /dev/null
@@ -1,304 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: january-2021---code-health-new-features-testing-and-stability-fixes
-title: January 2021 - Code Health, New Features, Testing and Stability Fixes
----
-
-<table>
-<tr>
-
-<td>January 2020</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New Features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll timeline polyfill</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/wDUAhebw0vhXO9C35VZA1VuJY-pNYDGPaurAXLhap5vN_7mmeaAKs1Bv1feGheZzowhF0Q8pJAb0gBZq5pC7V9msHgBd4Xww5X6xOMjgvPOon7w_fCLXfyNDK5anNuG63XGj3jCg0g" height=175 width=280></td></td>
-
-<td><td>Both kevers@ and flackr@ have been working extensively on this feature.</td></td>
-
- <td><td>Over 93% pass rate on the scroll timeline tests.</td></td>
-
- <td><td>Over 350 passing tests.</td></td>
-
- <td><td>Recent areas of development:</td></td>
-
- <td><td>Extended the scope of the polyfill:</td></td>
-
- <td><td>EventTarget</td></td>
-
- <td><td>Promises</td></td>
-
- <td><td>Tasks</td></td>
-
- <td><td>Support writing modes</td></td>
-
-<td><td>Compositing percentage based transforms</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/s0yra2ZzXVDUViwMExbnMhRNT-wV5_1XN3BjCLKg8CahRv4X29TbHcZBvZ7hWBBEH-Bv31nuoQtG6Hj685Lxe8xNljDtpH-vB-C4Y07nh2v_T1nsUEqX-ZOb5MxJNmWY1MqQ6l9vVg" height=172 width=225></td></td>
-
-<td><td>menu.hidden { transform: translateX(-100%) }</td></td>
-
-<td><td>kevers@ re-enabled this feature in M89:</td></td>
-
- <td><td>The challenge is that size dependency could change while the
- animation is running. And we need to catch the change and restart the
- composited animation.</td></td>
-
- <td><td>The feature is in common use. One can write CSS only animations
- without the need to resort to JS for size calculation, such as the above
- demo.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Aspect ratio interpolation</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/J2Ao_wP4zetydT84MzFOI9sBrfbjXjfYsIwOwspHUn-66j0reQlqj_8CnMYqoJpYsU7sc4Gpmsi1PpDmdXhcsjE20NzhYkpDs1vcCLkEhc13WG27wY9ThX3B36qJ0Af3Yvh32foVGw" height=111 width=132> <img alt="image" src="https://lh4.googleusercontent.com/Jk1F0TdSK1OjQuphK-Z-h8sE-mB2beGCnzTRCU8VHcIkHwkqn7G_vps1dj4JPAgMR1M0FDGYEUvjrTAdu5c8vB5mf1hLCshite8C66pKVJNF0cVqHWvDJTdQfK3oy5So2iheBH1erw" height=110 width=141></td></td>
-
-<td><td> <a href="https://output.jsbin.com/niyuref/quiet">Demo</a> Before <a href="https://output.jsbin.com/niyuref/quiet">Demo</a> After</td></td>
-
-<td><td>flackr@ implemented aspect ratio interpolation, and enabled it by default in M90.</td></td>
-
- <td><td>Recent spec <a
- href="https://github.com/w3c/csswg-drafts/issues/4953">discussion</a>
- decided that aspect ratios should be interpolated by the log of their value,
- to preserve the same visual speed whether they are wide or narrow.</td></td>
-
-<td><td>Composite background-color animation</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/Cr89iFEq8k2axei93_YW0wmhvqmaiXE4XaIF50OVncHHUZqcDP23r2TeDsnSP_2nzuqP4_1N0gUqTIBoRPW0cS_ccxgsE5f3pY3wHJ2_0bWDDANBgbfsm4RBfZjLY-pnX9X3JnKGaQ" height=203.57052631578944 width=217.23208556149734></td></td>
-
-<td><td>The above background-color animation <a href="https://output.jsbin.com/xocoroh">demo</a> runs on the compositor thread with the experimental flag. xidachen@ has made great progress on this feature, including:</td></td>
-
- <td><td>Setup infra for animating on the compositor thread.</td></td>
-
- <td><td>Implement the interpolation logic.</td></td>
-
- <td><td>Handle transition keyframes.</td></td>
-
- <td><td>Handle multiple offsets in keyframes.</td></td>
-
- <td><td>Implement main-thread fallback logic.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Click/Auxclick as pointer event</td></td>
-
-<td><td>liviutinta@ and mustaq@ co-worked on this feature and shipped it to stable. Here is the major work:</td></td>
-
- <td><td>Finch experiment: 50% on canary + dev + beta.</td></td>
-
- <td><td><a
- href="https://groups.google.com/u/1/a/chromium.org/g/blink-dev/c/bta50W_Hg24">Intent
- to ship</a> has been approved with 3 LGTMs.</td></td>
-
- <td><td>Enabled for stable at 1% starting with M88.</td></td>
-
- <td><td>Improvement of the feature is still on-going, such as the <a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1150979">simulated
- clicks</a>.</td></td>
-
-<td><td>Capability delegation with payment request</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/5MDu8JUMJOsu95kCUwcMhSlfw5kd8uU6vwXSDPG_ycd6mSBoDWnU-EfRY9ssODQuDPXG3C076zhHaO_OrmqKJK-uwzAG41pCoLJJ-1SGmahYvrK_v0JbkUm4-1zVRiqFtEUOrOghyg" height=194 width=256></td></td>
-
-<td><td>mustaq@ built an initial prototype that allows PaymentRequest in subframe provided a token is passed into it. The PaymentRequest now consumes user activation.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Scroll unification</td></td>
-
-<td><td>liviutinta@ kept working on this feature, and has made progress.</td></td>
-
- <td><td>Landed <a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1113863">scrolling
- the &lt;select&gt; popup</a>.</td></td>
-
- <td><td>Designed <a
- href="https://docs.google.com/document/d/1w_Pr4sKPXfHz03ZUxVSZL23xjQy-TiKAKf8rmbcW1Fc/edit#">metrics</a>
- for scroll unification and LGTMed by the metrics team.</td></td>
-
- <td><td>Landed scroll bubbling from OOPIFs to ancestor frame</td></td>
-
- <td><td>Schedule frames for popup widgets in tests using compositor
- thread.</td></td>
-
-<td><td>Scroll to images (and videos)</td></td>
-
-<td><td>flackr@ has created and uploaded the <a href="https://github.com/WICG/scroll-to-text-fragment/blob/master/EXTENSIONS.md">explainer</a> for this feature.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Testing</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Deflaking tests</td></td>
-
-<td><td>kevers@ addressed some test flakes in animations and scroll-snap. These flakes were largely triggered due to common gotchas like antialiasing, floating point precision, or test timing. </td></td>
-
-<td><td>Animation timing checks have been updated to accommodate 1 microsecond accuracy. This fix was not a pure test change as there was a lurking issue with numerical precision and setting the finished state of an animation. It is not just strict equality checks that are problematic when working with floating point numbers.</td></td>
-
-<td><td>Several layout tests in animations make use of an internal pause for testing API, which predates and is largely deprecated by the web animations API (WAAPI). One test flake was addressed simply by switching over to WAAPI. </td></td>
-
-<td><td>Several timing flakes were fixed in scroll-snap tests, by injecting a listener for scroll events. Unlike web animations, scroll animations do not fire an event to indicate completion of the scroll operation, and the end is inferred based on an absence of position updates over time. Unfortunately, this can lead to flakes when testing machines get bogged down and tests start running slower than expected. Simply waiting on an initial scroll event before starting the countdown, largely addresses this type of flake in scroll-snap tests. Once scrolling starts, the number of animation frames (rAFs) required to complete the scroll has a strict upper bound.</td></td>
-
-<td><td>xidachen@ also fixed quite a few paint worklet flaky tests by using the standard animation API. </td></td>
-
-<td><td>Before: we are taking a screenshot at rAF, which doesn’t guarantee the start of the animation.</td></td>
-
-<td><td>Now: with the animation ready API, we take a screenshot when the animation has started which prevents the flakiness.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/Dx0Odk5DcCkNfcAetXSysZmPSIIcC198hA3S56TcCbGBm2hLF1Tn-gBC4fuzitR4kSWVmBzblZcL5g9Pwq1XHcJ3pZhcho-i99oSHnJ5NRSbJnw79M6TgXSoZzfisUJnm6AgeLyWcg" height=72 width=283></td></td>
-
-<td><td>Before</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/FDMhgeEl1cuWOajwHO1P7dzgH09IAE06j0e_vGeUbyAXBa3jOc7xvfLBmcYwSsnNZUb9r0vjQhSn_m4VQGStucPhTcpxNHYeJxR1cuoBwyTxTSnqZLI8ob80dqnr56gKf7u8hEYeZw" height=71 width=283></td></td>
-
-<td><td>After</td></td>
-
-<td><td>WPT test coverage</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/rdOjKXaS2ht4sGwGCgrOuB1JQFVuOqvNiFumSW_zh89KsUBu1PenVeuy1oN3HJwAwF5bsTNUscPo_pLKIqgcHzWvYaKWyPRG1KnF-XcoQgxRtBpctW-TtxAiWv83RatSHvAxQ6EHvw" height=55 width=283></td></td>
-
-<td><td>kevers@ and girard@ <a href="https://docs.google.com/spreadsheets/d/1aUnU5Igiescq93oY01bBPJ77TBb3oy5Y-jvUf7u_600/edit#gid=15396280">measured</a> test coverage in WPT for input/scroll/animation. The data can help us understand which category of tests needs more attention.</td></td>
-
-<td><td>TestDriver Action API</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/rcHUPkETRQuNvGLbl_2x0o9KA2PhTUnHISjRsr0Oon68LKo9LtgnUynF997aTlPbj18znph4sfrEeZhNzyPlUA7oINLMWQT_oyemx_m_oCRxjzvUqZKkbXpIK1eUYT0torK1rqRiEg" height=178 width=237></td></td>
-
-<td><td>lanwei@ kept improving the TestDriver action API and made more WPT tests automatic.</td></td>
-
-<td><td>The following two pictures show the wpt dashboard for the TestDriver action API.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/VZ_e8LDAUVDSGmSXU8OcOjoqUtEQdpk2Xm9wbtCohj3nk2Dc-cVxFvyrg4hMQxwME1gRVzdlnOAiVs_qRkNqpvSqreNLBW7-U3xjXbUj-jHeF2BkbFjnAzC2UGbzaMZdiCouHcO8Rw" height=101 width=144> <img alt="image" src="https://lh6.googleusercontent.com/uCRgxqbX_Vp5mUsc3z0umBfFrdZtMBYySftCvpx8vQCy81r8Ljgftfw594GnAipZBazHUK7D59iNF5s2BGSTiZBK3vVrmZFM2ZdaB245E7Qb-vj294VLRF7MR3jwxTpf1Qg4ZDYZHA" height=108 width=127></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Stability Fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Animation security fix: use after poison</td></td>
-
-<td><td>kevers@ fixed a crash in Animatable::Animation. The problem is that running user code (JS) can result in the destruction of an execution context. We cannot simply check and forget about the execution context. The solution is to double check if the context is used downstream of script execution.</td></td>
-
-<td><td>Float-cast-overflow in MouseEvent::PageX</td></td>
-
-<td><td>liviutinta@ fixes a float-cast-overflow bug that is caused by static_cast&lt;int&gt;(double value) when the value is out of range. The solution is to usd std::trunc and clampToInt instead.</td></td>
-
-<td><td>Paint worklet regression</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/LRW7Vq-NI5lusgpbWRv6HVUKTn0mZQztrsHkqtw9Yh-AtGXPD5pKQPJNtIY_0BcSEdKnBykk2KoZ_afKqK17-PbFJDWUfV91I0tzte96FktV2V67DsPIPTrsRD0UchD0uYyExNKkYA" height=222.4665071770335 width=284.0179856115108> <img alt="image" src="https://lh4.googleusercontent.com/PRq4eiC7ydMEjQ3gF6CKwFT_AdhAYjsxJ9vODczpmLtVRwjToS0UdnaJ5thn0jnKuzqTh7TqtJt_cSGd8IfurJ4DJp7eETLIRHVhBogoKEcJINDTwxFX-0fMARFxj8krVA2iINYVFQ" height=223.95238690885697 width=281.9892857142857></td></td>
-
-<td><td> Stable Canary</td></td>
-
-<td><td>xidachen@ fixed a regression due to a misuse of hashmap. In the above demo, the same animation is applied to both elements. In other words, the animations of the two elements should be in sync. However, the stable version is wrong. The canary version has the fix in it, and it is correct. </td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Crash in PointerEventFactory</td></td>
-
-<td><td>mustaq@ untangled a mixed-up <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1164347#c4">crash report</a> that becomes release-blocker-stable at the last moment. The effort of fixing the crash includes:</td></td>
-
- <td><td>Determine the root cause, landed the <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2488181">fix</a>
- on ToT.</td></td>
-
- <td><td>Merged the fix back to M88 and M89.</td></td>
-
-<td><td>Paint worklet crash</td></td>
-
-<td><td>xidachen@ fixed a crash where the root cause is that our code path hits a DCHECK that is no longer applicable. The solution is to remove the outdated DCHECK.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Code Health</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/ewdZ0ZzCsU5ix0iB-HZ3b9Rd_D2cpoVJTrlRAMh9lgyhQ96jCl2qEG2PLS_He6sp2Og_8BVheiG83LFJqDG1Bf4XwSyb1NxlJ_fEbzXlNV3hD-jsYHOdgSJkdIIa3WEeK9UQcpNprA" height=162 width=292></td></td>
-
-<td><td>Our team had a great start to the year by closing over 70 bugs in this sprint:</td></td>
-
- <td><td>Specifically, we closed more bugs than opened in P1 and P2
- categories.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/-hszaQS6D49VBAmVoXwrtim2_Z_vFlVFNJH4L0YtdLHFo_4kQPX9dmwBrW3kQPpHv1nQOceCi6QWOGQtyq3HLpBysTtD57n2zUbsU9fM3_br_re6EfeEqGbe1VptGOzNdv0GUUYHuQ" height=136 width=217> <img alt="image" src="https://lh3.googleusercontent.com/h8ggB6_4DB7Mov_O0H4AJhF7gxhzAjxbo7Abgjz-6dzH9bVz1-mnXG7leBnPB0CF2fQb_kPIezzcEartcLY4TV9HG8OCHLFsZSxfvq35pAk389xH3Oa95Yg_4LWXUbyc8RNe5WEA5A" height=140 width=227></td></td>
-
-<td><td>girard@ collected our team bug data and generated graphs to visualize it.</td></td>
-
- <td><td>Our P1 and P2 bugs are less than 40% of total bugs.</td></td>
-
- <td><td>~40% bugs have owners assigned.</td></td>
-
-<td><td>girard@ re-enabled “<a href="https://chromium-review.googlesource.com/c/chromium/src/+/2643444">MissedTOUCHEVENTF_UP</a>” which tracks a hack in windows touch. We would like to <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=811273">tear out the hack/workaround</a> once usage drops.</td></td>
-
-<td><td>liviutinta@ removed the <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2595636">AzimuthAltitude flag</a> since it has been turned on by default since M86.</td></td>
-
-<td><td>lanwei@ and liviutinta@ fixed input failing tests on the new WPT bots.</td></td>
-
-<td><td>mustaq@ landed Mouse/PointerEvent related code cleanup.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | January 2020</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/july-2019/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/july-2019/index.md
deleted file mode 100644
index 0a11c9470a9..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/july-2019/index.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: july-2019
-title: July 2019
----
-
-<table>
-<tr>
-
-<td>July 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh3.googleusercontent.com/w9kTMoKBL0rbJTFvKmkNWwY3xG4Z3UqhW7iLHeK9aV4YsUitV1OdoR1WEsmHnz4jiwphbWtGyO31tp_j6lxpnlmRYvfAjdVTB5vJA_vDgjqAagHNh7Zb7kATsCecD8lVfYMmiqlj" height=283 width=565></td>
-
-<td>One of three example effects that yigu@ created to show the potential of Group Effect. I'm staggered, really.</td>
-
-<td>GroupEffect - Showing a need</td>
-
-<td>When exploring new potential features, it is important to understand what usecases they enable and how ergonomic they would be for web developers to use. This sprint, Yi (yigu@) spent some time exploring the <a href="https://github.com/yi-gu/group_effect">proposed GroupEffect</a> concept. After <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1710156">building a prototype</a>, Yi created demos for three types of linked effects, such as the 'stagger' effect above. This work helps us understand the potential impact of GroupEffect, and also see how easy the proposed APIs would be to use.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/TweoRh0njZWyEESeBZAjj8CRazxBzSQYhiB3k72KH0tPLQRJMRdXx56EpBceCuuLHgExjuK_Vp7BrtfL6j2fH1Jg8eGNVcIsmnFYM7gIBtv4pckxtNZKzvFz8GJBxqqBKlLPakrP" height=184 width=271></td></td>
-
-<td><td>Web Animations - towards an I2S</td></td>
-
-<td><td><a href="https://drafts.csswg.org/web-animations-1">Web Animations</a> is a big focus for the team currently, and we continue to move towards our goal of being able to ship the full API.</td></td>
-<td><td>This sprint included fixes for getAnimations (majidvp@, smcgruer@), AnimationClock (flackr@), animation events (kevers@), and CSS property serialization (gtsteel@) - resulting in 50 newly passing WPT tests!</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/4zapRR1JUKCEExT9Dy78adDfv0BZVOEics7z7LoQfb2gCZ6JRwukYMkSyCibRxMB8fjEfSw20riiW9mJkbKHPqa_B16Uso8QdhVJnNP29M3f9c5P3i812LKoxlqyCNaAPZFSs_Au" height=208 width=253></td></td>
-
-<td><td>Viz hit testing V2 - heading to stable</td></td>
-
-<td><td>Yi (yigu@) set his sights on Viz hit testing this sprint, with sensational results. He was able to close 12 hit-testing related bugs, including all known bugs blocking the 'V2' launch. As a result this new, faster hit testing model is now re-enabled for the M77 release and should be rolling out to stable sometime later this quarter.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/k4oS7E04Mz46HL5n13FzLh2ev0LCQNuNvg2VYkrzLEC807Bxurf32asE05BcHMaca1lPqr9zgIYEHWWKm6V_PT8c0DRUqhzeHBVqgGaP3nmsZNq1-Lo4mFsLOHxBbGj0HiHLnA4R" height=113 width=281></td></td>
-
-<td><td>Complex Crash Bugs</td></td>
-
-<td><td>Chromium is a big codebase, and sometimes simple looking crash bugs can turn out to have complex causes. Thankfully these bugs are no match for Rob (flackr@) and guest star Dana (danakj@) who tackled <a href="http://crbug.com/974218">such a bug</a> this sprint.</td></td>
-<td><td>After multiple weeks of effort they tracked the crash to an old scheduler experiment which was unexpectedly re-ordering IPC calls! <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1692577">Disable the experiment</a>, and the crash was fixed. Magic, or perhaps just <a href="https://en.wikipedia.org/wiki/Clarke%27s_three_laws">sufficiently advanced debugging</a>.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/_d5BW7phRaKRlndSuxtEz8gidiwiNmYZ8NzvSpX5Iv9FplDwBinrCUcp1SgTKN1oazrAqRZYAvm3E68YfGx08KfLUEATZgD4wvIyuRd2LTGxTvOc21iS9aQIxwW-YQwC3oZmao53" height=121 width=286></td></td>
-
-<td><td>Scroll Snap Interop</td></td>
-
-<td><td>Blink's viewport style propagation for scroll snap was incorrect based on the latest <a href="https://github.com/w3c/csswg-drafts/issues/3740">spec changes</a>. Majid (majidvp@) dived in to fix this issue before Firefox's implementation ships, to ensure that the interop issue is addressed before usage grows and makes it more difficult to backtrack. </td></td>
-
-<td><td>Since this is a breaking change, we needed to understand its impact on the web. To do so Majid performed an <a href="https://docs.google.com/document/d/1DxVjr3m02cPE81UrDMT_SN36bFDg5f4K3wESSwMOqck/edit#heading=h.a1k7isoapl5s">analysis</a> using <a href="https://docs.google.com/document/d/1FSzJm2L2ow6pZTM_CuyHNJecXuX7Mx3XmBzL4SFHyLA/edit">cluster telemetry</a> in conjunction with <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1715906">use counters</a> to confirm his findings - all clear, thankfully!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><img alt="image" src="https://lh3.googleusercontent.com/K6hFM4soJErRvy01DD6mh_CQBnhGKbyWG-ymrlIptHnSNUVT1A53TNDoE2zr7YSBkIsDxFd9sjymzqQQzof2xw86kL-Z8uwXlj_KSbiWRP1xzArmob40InxUv4wFvDPsYsEeJfqZ" height=207 width=596></td>
-
-<td>Thanks to this demo by gtsteel@, it is easy to see why animating in the RGB color space is preferable to sRGB.</td>
-
-<td>It's a colorful world</td>
-
-<td>While discussing a <a href="http://crbug.com/981326">color interpolation bug</a> that Xida (xidachen@) was working on, he and George (gtsteel@) realized that by spec colors interpolate in the sRGB colorspace. This is unfortunate as sRGB is a non-linear space which results in less natural looking animations than the linear RGB space. George began investigating the possibility of adding RGB interpolation support to the various animation specs, however luckily we discovered that the <a href="https://www.w3.org/TR/css-color-4">css-color-4</a> spec is working on allowing web developers to <a href="https://www.w3.org/TR/css-color-4/#working-color-space">change the page's color space</a> which should also fix animations for developers who opt in.</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | July 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/june-2019-volume-ii/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/june-2019-volume-ii/index.md
deleted file mode 100644
index 93c2f47a6eb..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/june-2019-volume-ii/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: june-2019-volume-ii
-title: June 2019, Volume II
----
-
-<table>
-<tr>
-
-<td>June 2019, Volume II</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh4.googleusercontent.com/et9ryoulZxztot-SLE6W1uC3kLdirsX9ha2wyFDxr7nGs0gAH_64JV5xiHk97i4w-urHvJpsmbzHGwdHtOgwBPdEuQTyw_nvlmguJ4eH27gSTADAB7QjeIdEjSoua_BoDKNL4uNs" height=334.29598821989526 width=593></td>
-
-<td>Is there a poltergeist trapped inside Chromium? Not any more, thanks to flackr@.</td>
-
-<td>Gmail, possessed?</td>
-
-<td>A spooky bug floated our way this sprint as users began reporting that their gmail and twitter pages were <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=962346">scrolling without any user input</a>! After initial analysis from the input team (great work by bokan@!) identified it as a BlinkGenPropertyTrees-related Animations bug, Rob (flackr@) spent days teasing out first a reproduction, then a diagnosis (surprise, <a href="http://crbug.com/962346">it was complicated</a>), and finally landing <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1256422">a fix</a> that took care of this ghostly occurrence. Who you gonna call? Rob Flack, apparently.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/dG77X96y5b6huezy55beT998DAxMlJb5Bv_bI9d2WFqcyiJS0Fgx9K8JHcZIaRVEn-ljQusGlsLThtcV54ChP-tZx4mgIgdNmzie2pMDvcBT4fBUbzg1_zlbNfFvR9Ev5ywFVVXm" height=179 width=251></td></td>
-
-<td><td>Animation Worklet - it's (more) official!</td></td>
-
-<td><td>Animation Worklet took not one, but two big steps forward this sprint. We sent our official <a href="https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/aRKT0BkrF-8/discussion">Intent to Ship</a> to blink-dev@, reflecting our opinion that the first version of Animation Worklet has reached maturity and is ready for real users. Coincidentally - and nearly simultaneously - the spec was also <a href="https://www.w3.org/blog/news/archives/7830">promoted to First Public Working Draft</a> during this sprint.</td></td>
-
-<td><td>Congrats to all the people who have and continue to work on Animation Worklet!</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/6640vwTykAzTgcwoKk0u4ZqXpZioR6PYeo48yUPWIb9S4jaLgOc-kfxXGrGvTscFRVW51tJVpdt0bUiD0VhYZhhNbRrEhgiAZC2vrT6-uZgjHVaPDIeUpOAHAd9Shz8Jknd38Xef" height=179 width=277></td></td>
-
-<td><td>ScrollTimeline prototype lands</td></td>
-
-<td><td>Browser support for scroll-linked animations is a common request from web developers, as JS based solutions suffer badly when the page janks. We took one step closer to fulfilling such requests this sprint with Olga (<a href="mailto:gerchiko@microsoft.com">gerchiko@microsoft.com</a>) landing a (main-thread only) prototype of <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1597286">ScrollTimeline for Web Animations</a>. </td></td>
-
-<td><td>Interested developers can now run Chrome with --enable-blink-features=ScrollTimeline to play with the prototype - but be warned, this is still very early stage!</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/RSKmCRIPTTUphzkYEdus7axPNzy7YgZaToyRaJ2gSvyS4RECsUSwcBvKOqXBxHJ63uoZFLFCJOAzm2lEq5KBKmVo8vL5Qs149NrizzxlPxqY-Xx5ZC4_IpTwwBEQ7eBnm_hvTEXu" height=164 width=283></td></td>
-
-<td><td>Exploring the Animations space</td></td>
-
-<td><td>It can be easy when working in the browser space to lose sight of what our corner of the web platform is actually like for web developers. This sprint Gene (girard@) put together and published <a href="https://docs.google.com/document/d/1hPfNx9aM7KHRO7DZDTvrBAQUbTdYIap9U__uqp_-EQo/edit?usp=sharing">an overview</a> of the tools and processes web developers are using to create and deliver animations on the web. This form of insight is vital to better understand what features we should be prioritizing, and to deliver a better web for everyone.</td></td>
-<td><td>(Chart above uses data originally from <a href="https://trends.builtwith.com/">https://trends.builtwith.com</a>.)</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/8HBpbkDCHE7aPyKADf56885lm6O9DjjjxZ4PEpqWoW2oc0n89WUMnJK6ySLkUMH7afHHKB5U7CP-fggLDrFcHD0uYKOHTZbb3JPk8gha16UvPrpMQVp-2HWvkb7eHNt6I2ImCoX8" height=173 width=283></td></td>
-
-<td><td>PaintWorklet HiDPI bug squashing</td></td>
-
-<td><td>When developing his PaintWorklet-based Lottie renderer <a href="/teams/animations/highlights-archive/june-2019">last sprint</a>, Rob discovered a few rendering bugs relating to PaintWorklet on Mac HiDPI devices - such as the unexpectedly cropped image above. Thankfully such bugs are no more, as Xida (xidachen@) spent time this sprint hunting down multiple zoom and HiDPI related PaintWorklet bugs and fixing them.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><img alt="image" src="https://lh4.googleusercontent.com/5698PMmqluSrFNc6Ejfmw43rLCwUvxnbGistZt8RddT1RsxFRiHQdBm5P2RbliVc3cr77vgp0PS8Vou8XaLGFmLd4MsBQn5pJbKstBDX4u3o-T58FCv5_mmwOgk3pdAFTitVJODA" height=413 width=418></td>
-
-<td>Do you understand this? Yeah, me neither. But kevers@ does!</td>
-
-<td>Better Beziers</td>
-
-<td>Sometimes, you just have to get down into the weeds to improve browser interop. This sprint Kevin (kevers@) did exactly that as he tackled the hairy problem of bezier curves - namely, why does Chromium's implementation produce different values than other browsers? Details of Kevin's explorations could probably fill a small maths textbook, but in the end he was able to <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1643973">land a new approach for Bezier estimation</a> that took half the time of the old method, made Chromium pass almost 20 previously-failing WPT tests, fix two Chrome bugs (issues <a href="http://crbug.com/591607">591607</a> and <a href="http://crbug.com/827560">827560</a>), and exposed a <a href="https://github.com/w3c/csswg-drafts/issues/4046">hole in the spec</a>. We think Monsieur Bézier would have been proud. </td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | June 2019, Volume II</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/june-2019/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/june-2019/index.md
deleted file mode 100644
index 72ffa4c4561..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/june-2019/index.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: june-2019
-title: June 2019
----
-
-<table>
-<tr>
-
-<td>June 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh6.googleusercontent.com/m4coonQxOBK51yMEp5SzIVklqRrtqAYwfdXWZXoXSu3aes8t_mLkYnflh0fKVs4EXQPNeRLttrdBjC8R6GcDHMlc6YwMYc1ps2eKlq6H-RAMX6-rSukfKe23fQfzux059NrGHe28" height=151.34334224680958 width=593></td>
-
-<td>Lottie Paint Worklet Renderer</td>
-
-<td><a href="https://airbnb.design/lottie/">Lottie</a> is a popular framework from AirBnB that renders After Effects animations, allowing designers to create rich complex animations. Following up from the <a href="/teams/animations/highlights-archive/april-2019-volume-ii">previous proof of concept</a>, Rob (flackr@) <a href="https://github.com/flackr/lottie-web/tree/paint-worklet">created a proper renderer</a> preparing to send a PR to land the code upstream. The <a href="https://twitter.com/flackrw/status/1135714462546182144">response on twitter has been very positive</a> and with the demo <a href="https://flackr.github.io/lottie-web/demo/bodymovin/">publicly accessible</a> we have seen an <a href="https://chromestatus.com/metrics/feature/timeline/popularity/2385">increase in the usage of Paint Worklet</a>.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/bQ1CSbp3EmX4fKEjkXY1dlKZ8MRvdtfBR4eoQt57owRNba-xw00y_2hGh90_o0LoSWECa5BT_ip3kJh0K988KWFfgKF1L_SzSQo3h-VutcgqTAY0sgFam3ndvD_OIsIf0oijOywi" height=121 width=198.1957328066892></td></td>
-
-<td><td>Jump timing functions</td></td>
-
-<td><td><a href="https://drafts.csswg.org/css-easing-1/#step-easing-functions">Jump timing functions</a> allow developers to choose the starting / ending behavior of the steps timing function. Thanks to Kevin’s (kevers@) <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1634722">hard work</a> chromium has <a href="https://groups.google.com/a/chromium.org/forum/?utm_medium=email&utm_source=footer#!msg/blink-dev/u65DesVOzmY/htUnPfFcBgAJ">shipped these functions in M77</a>!</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/BHmrokKErIb7eNeCsjGw4Ae6c-PDYX3YCjfB8ENHs70ELIQLDuL2nwSOza0XygjTYFQ5ZMKh8vmY11gBqmRZRv9FBbrh0aOmzD3dZcAhkIS9yYNZStUQle-EIFrjIKbhBM1x06eN" height=121 width=291.65571205007825></td></td>
-
-<td><td>Scroll snap … stop!</td></td>
-
-<td><td>A common use case for scroll snap is a paginated UI. Often, developers want users to be able to easily swipe to the next page. Thanks to Majid’s (majidvp@) efforts scroll snap stop has now <a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/bkUwigYHJDM/Bzvm8tkHAgAJ">officially shipped</a> in <a href="https://www.chromestatus.com/features/5439846480871424">M75</a> and used by <a href="https://drive.google.com/file/d/1D-xXO6wstu0HJJXvvwFjNpa2R1gzwuhG/view?usp=sharing">AirBnb</a>.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Houdini Face-to-face</td></td>
-
-<td><td>Majid and Rob attended the <a href="https://wiki.csswg.org/planning/toronto-2019">CSS working group</a> to advance <a href="https://github.com/w3c/css-houdini-drafts/wiki/Toronto-F2F-June-2019">several Houdini spec issues</a>. Notable topics discussed include: <a href="https://github.com/w3c/css-houdini-drafts/issues/869">StyleMaps for Animation Worklet</a>, <a href="https://github.com/w3c/css-houdini-drafts/issues/877">cycle detection for Paint Worklet</a>, and <a href="https://github.com/w3c/css-houdini-drafts/issues/872">cheaply passing large data in the typed OM</a>.</td></td>
-
-<td><td>Off-thread Paint Worklet</td></td>
-
-<td><td>Support for running paint worklet is steadily approaching completion with Stephen (smcgruer@) adding <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1639079">asynchronous paint dispatch</a>, Xida (xidachen@) is designing <a href="https://docs.google.com/document/d/1a7gO6cBxsJhn53akuJuieUiXvB74vvEmFDyKww8NKdw/edit">animation integration</a>, and Adam (asraine@) <a href="https://crbug.com/948761">added fallback</a> for the cases we can’t support.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/r6Wkle2R-fnxzk4IwP-s_ssaMFE3-kmJP1FO20H9N2eJezr6Kc8yKo8JleHnY1czBkbVEhw-FKNAcb344bvyyntsfoiFH74OV5I37bmEM4wYQ1rBVHW6-zCHbPuz2DQFvJdaTr34" height=121 width=188.74074074074065></td></td>
-
-<td><td>Group Effects</td></td>
-
-<td><td>Majid and Yi (yigu@) have put together a new <a href="https://github.com/yi-gu/group_effects/blob/master/README.md">explainer</a> for Group Effect proposing changes to the existing draft design to make if more customizable and <a href="https://github.com/w3c/csswg-drafts/issues/4008">restarting</a> the effort to standardize the feature as part of WebAnimations level 2.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/cdBRl4mdiK_TkHcothUZSYhUXGbZ-NKD13Kx3P2-tcq_VjatfaOTov0Sd5AxGzPdr0ogyHw77mNKdZqfVh6_rRlVspirZmjkwB7LFuoZVJ_gXudDAgShHBRcR_QpL6aGqZLJ7ym5" height=126.00000000000023 width=202.27926371149522></td></td>
-
-<td><td>Bugs, bugs and less bugs</td></td>
-
-<td><td>We’ve continued our effort to stay on top of incoming animation bugs. Over the 3 week period 13 animation related bugs were closed, however 11 new ones were opened in that same time.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | June 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/june-2020---web-animations-scroll-linked-animations-throughput-metrics-scroll-unification-webdriver-pointer-events-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/june-2020---web-animations-scroll-linked-animations-throughput-metrics-scroll-unification-webdriver-pointer-events-and-more/index.md
deleted file mode 100644
index 7f999422825..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/june-2020---web-animations-scroll-linked-animations-throughput-metrics-scroll-unification-webdriver-pointer-events-and-more/index.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: june-2020---web-animations-scroll-linked-animations-throughput-metrics-scroll-unification-webdriver-pointer-events-and-more
-title: June 2020 - Web Animations, Scroll-linked Animations, Throughput Metrics, Scroll
- unification, WebDriver, Pointer Events and more!
----
-
-<table>
-<tr>
-
-<td>June 2020</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh5.googleusercontent.com/qa4CnhPdM0cesetEwVq7R6MRWTpi_RtZkOAI2uteVUXnr4cSA_eUp7CW5wrayRElFCzMiko7wLECykKFllzcU0WWIcilwBWTyFro4uRcHxcVd3AMpHQfv4_FYkZDFrCz4fGH0o9fLw" height=343 width=406></td>
-
-<td>Fix transition retargeting</td>
-
-<td>The CSS transition property is used to create a smooth transition of a CSS property on a style change. If the property is currently being animated (via an existing transition or other animations), this needs to be accounted for when calculating the starting point of the transition to avoid abrupt jumps in the value of the transitioned property. This process is called transition retargeting. We currently set the starting point based on the computed value from the last frame.</td>
-
-<td>Our team members (kevers@ and gtsteel@) have made significant progress on this issue. Per spec, we need a base computed style (without animations) and then apply active animations on top of the base style to get the before style change for retargeting. Fortunately, the style resolver already tracks the base computed style (conditionally) in order to accelerate style recalculations that are driven purely by animation ticks.</td>
-
- <td><a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2185509">Step
- 1</a>: Add test cases for reversing modified transitions to WPT.</td>
-
- <td><a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2252642">Step
- 2</a>: Always cache the base computed style in the style resolver, tracking
- when it can be used for style recalc. Highlights:</td>
-
- <td>Fewer flags to track</td>
-
- <td>Fix storing the cached style on the first frame of an
- animation.</td>
-
- <td>Reusable for transition retargeting</td>
-
- <td><a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2220263">Step
- 3</a>: Compute the “before change” style by playing active animations on top
- of the base computed style.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td colspan=2>A better fps meter</td></td>
-
-<td><td colspan=2>xidachen@ has been working on measuring renderer’s smoothness and developed <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2244002">a better fps meter</a> that reflects smoothness. This new-looking fps meter is available on canary.</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh4.googleusercontent.com/7X6mpuYlg8ai4-U3yphi45I7mEFYKW74K27X_2ekbw-_TXxaY51pIQ9elyjSu2tIzFlTmo8KFdIXrv56tTq_XS1US1Dl7_SUMK9U3PYFxA8X43nsq5vdmMLq4Xshjxd4rAqJ0OleEw" height=439 width=580></td></td>
-
-<td><td colspan=2>Improved throughput UKM</td></td>
-
-<td><td colspan=2>In the last sprint, we <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2112953">changed</a> the UKM reporting logic such that we report the median throughput of a page, which better reflects users’ browsing experience. Following graph shows the UKM curve where the red arrow points to the date when our change is landed.</td></td>
-
-<td><td colspan=2><img alt="image" src="https://docs.google.com/drawings/u/0/d/sy-viUUomGinfT8KjKYZiDQ/image?w=270&h=335&rev=15&ac=1&parent=14Nvi8kAwj_lSQYSf2z6Ywhvz7TD4B8S9Z-LViAhB5LI" height=335 width=270></td></td>
-
-<td><td colspan=2>Scroll-linked animations</td></td>
-
-<td><td colspan=2>flackr@ made a lot of progress and discussions on <a href="https://github.com/w3c/csswg-drafts/pull/4890">progress-based animations</a>, particularly focused on procedure for converting time based animations. With this, developers won’t need to specify an arbitrary time duration for the animation:</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh5.googleusercontent.com/pexwnQ-nbMSOhhDhEjfSJKinMbjJxbW3lLZWHk2DN4dl5vAJMEyZriNbYgFjAZ4lEMFXXZrXdTmHO6nkTYLwtn9aqws7V_yKfxYllK500DtZCB6kQJUVyK-7IpJ9RKP-xEhL8TspMw" height=124 width=408></td></td>
-
-<td><td colspan=2>Scroll unification</td></td>
-
-<td><td colspan=2>lanwei@ <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2171955">replaced</a> eventsender with gpuBenchmarking.smoothScrollByXY (<a href="https://docs.google.com/spreadsheets/d/17NdL_750nAk51FN-dUprUNpBsp0_QCZZwKFJGENMXPE/">test list</a> 12/62 remaining)</td></td>
-
- <td><td colspan=2>Unblocks scroll unification, because after we finish the
- scroll unification, the scrolls happens mainly on the compositor thread, and
- the scroll code in the main thread will be</td></td>
-
-<td><td colspan=2>removed. eventSender sends the scroll events to the main thread, so it would not work after the scroll unification. (<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1047176">Issue</a>)</td></td>
-
- <td><td colspan=2>Tests full event delivery path</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>WebDriver Actions Spec</td>
-
-<td>lanwei@ is adding wheel source type to the spec and associated WebDriver tests. In particular, the spec change pull request is <a href="https://github.com/w3c/webdriver/pull/1522">here</a> and <a href="https://docs.google.com/document/d/1DdoNXbGspv4H5rmeCTgoiNPN5JGCitYbzVFd8FjSJiU/">design doc</a>.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>{"actions": \[</td></td>
-
-<td><td> {"type": "wheel",</td></td>
-
-<td><td> "actions": \[ {</td></td>
-
-<td><td> "type": "scroll",</td></td>
-
-<td><td> "x": 0,</td></td>
-
-<td><td> "y": 0,</td></td>
-
-<td><td> "origin": element,</td></td>
-
-<td><td> "delta": 30,</td></td>
-
-<td><td> "direction": "y"} \] \] }</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Pointer Events altitude/azimuth attributes</td>
-
-<td>liviutinta@ sent a Pointer Events pull request to fix <a href="https://github.com/w3c/pointerevents/pull/323">problems with default values</a> for altitude/azimuth/tiltX/tiltY attributes. The associated <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2165457">CL</a> by liviutinta@ is under review too. mustaq@ sent a follow-up pull request to fix <a href="https://github.com/w3c/pointerevents/pull/324">boundary value conversion errors</a>.</td>
-
-<td>The first <a href="https://github.com/w3c/pointerevents/pull/323">pull request</a> above adds important missing details to existing azimuth and altitude attributes: </td>
-
- <td>Support C++ code generation from pointer_event.idl and
- pointer_event_init.idl files. This was a blocker for C++ implementation in
- this <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2165457">CL</a>.
- As a result the default values for tiltX, tiltY, azimuthAngle, altitudeAngle
- were removed from pointer_event_init.idl. This change allows one of the
- angle pairs to be specified in the PointerEvent constructor and the other
- pair will be automatically calculated by the user agent. </td>
-
- <td>Change the default value for altitudeAngle from 0 to /2 to better align
- with default values for tiltX and tiltY.</td>
-
- <td>Specify the rounding method when computing tiltX, tiltY from
- azimuthAngle, altitudeAngle </td>
-
- <td>Specify what happens when only some of the angle values are provided for
- untrusted pointer events: the user agent will never overwrite a value
- provided by the author even if the values are wrong. If the values provided
- for tiltX, tiltY, azimuthAngle, altitudeAngle are not consistent, it will be
- considered an authoring issue.</td>
-
- <td>Specify that for trusted pointer events the user agent will populate
- both sets of angles. </td>
-
-<td>Example specifying tiltX, tiltY in PointerEvent constructor and being able to use altitudeAngle, azimuthAngle afterwards.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>var event = new PointerEvent("pointerdown", {tiltX:0, tiltY:45});</td></td>
-
-<td><td>console.log(event.azimuthAngle); // will print the value Math.PI/2</td></td>
-
-<td><td>console.log(event.altitudeAngle); // will print the value Math.PI/4</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Example specifying azimuthAngle, altitudeAngle in PointerEvent constructor and being able to use tiltX, tiltY afterwards.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>var event = new PointerEvent("pointerdown", {azimuthAngle:Math.PI, altitudeAngle:Math.PI/4});</td></td>
-
-<td><td>console.log(event.tiltX); // will print the value -45</td></td>
-
-<td><td>console.log(event.tiltY); // will print the value 0</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Visual representation of azimuth and altitude for a pen <a href="https://www.raywenderlich.com/1407-apple-pencil-tutorial-getting-started#toc-anchor-006">here</a>.</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | June 2020</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/june-2021---new-features-stability-fixes-interop-fixes-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/june-2021---new-features-stability-fixes-interop-fixes-and-more/index.md
deleted file mode 100644
index 998568e9c98..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/june-2021---new-features-stability-fixes-interop-fixes-and-more/index.md
+++ /dev/null
@@ -1,255 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: june-2021---new-features-stability-fixes-interop-fixes-and-more
-title: June 2021 - New features, stability fixes, Interop fixes and more!
----
-
-<table>
-<tr>
-
-<td>June 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Composite background-color animation</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/rHya85oxF853pbXs1D5q8q9SV2xekZtWIWWGcmYQ4s6DlvXcyGeuS_9Zk9Vb5qk73JxTEjFTzLQHUxj8laup5dbCOZ4vXP0fXUL_xtd-WNFlLQn6El0whQwe5Do1V192eHW1hJrzKA" height=19 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/RNatxDtrJzdHYIC5oHcgxL7ajcpK2Iv2l2-_ShR6Idv0KXInV0qYhlB-Bh9n7Ft7UW70gucCbUWJAw0bBwMP-taUrZUjttltaiFpnzfw6Yugeniws_M4LjMjajXuT628gNL1cKRKKA" height=19 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/IJMi8TbxUl9qriGc6ChrTf74Z7Bhz0Cv3kJ31Ja-JSoR4c-HKqULxw2yBiC7JZzHbExW3uuug6BEcxqyfpZCWXOh3hFEg9Njp4eALgbJLCPtJi7JZwttbKeUZqOZJIzV-BVbOlhUAQ" height=19 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/hlpW92nOALGoQeoWIryCOpkDHyUL7jSqn5k41puVwjNqgz2JZNUmY5lPlHNu2udqf1xarZjBsvaeIaInsD-2Vrh4lEeGLMvg7HvKxWCEM90y_EkbUjWZcUKQ9mfT2kPs1p2b68X-mg" height=16 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/Lmtm-9xfWUAEkzirIRr0U0UyWXKpC21Po57pjhX3P_Zx6_97j_yToFzmmXvL373Z2pMZs_ihciB-8qnPbqPDlzB_xXizKfkt1aiL4ynidq2PXRmOZNMawljumRcslU3kG5KmuKyT-A" height=59 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/Rs6HguE0Zjz-SYNiIOZ83SbSe3Mdfb0ogO8T14iY7WAp2DOr96Jbn5HVUnjKui8AApsIToC1WJQzwPfXU6aSJh3IW_-ZjZssMtjWn9uHmwjPVSw1up81oN2B211uLI9OLLkvEkve8w" height=21 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/scZffxszmv6AWdv6iaxx2_56xvqqTe6bBLPlV8hMp3SVoDKEOmFms5N48S0KIjVMteqCeu5ZWiuv93U0AdZmQhVyN6ubSRPANxtJZc6wCEywMlqNs0uTFdkFvqtNrDiGAyHIKwV4rQ" height=40 width=283></td></td>
-
-<td><td>xidachen@ launched finch study for this feature and this <a href="https://docs.google.com/document/d/1Fkp7udbCgYqVtNf4gn-NXGVYamPrd_n0qKqalruTq6E/edit#">doc</a> summarizes its result. Here are some high-level points:</td></td>
-
- <td><td>We are seeing more animations being composited.</td></td>
-
- <td><td>Unfortunately we don’t see improvement in the “PercentDroppedFrame”,
- which reflects the smoothness of the animations overall. One possible reason
- is that background-color animation is mostly applied on small buttons and it
- is not the dominant factor of dropped animation frames.</td></td>
-
- <td><td>We are seeing memory regression and this is tracked by <a
- href="http://crbug.com/1210221">crbug.com/1210221</a>.</td></td>
-
-<td><td>Moreover, this feature is now experimental, which means one can enable it by enabling “Experimental Web Platform features” in chrome://flags.</td></td>
-
-<td><td>Capability Delegation Spec</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/QZpkzz-EcZyPGYxfeNVDeC5oyrwyLaDXLDJDPXlZXIouySfVIVqPvOWJPliQFiOlc2EbyU467uu5dVFd9exgj2aYo5kg6-rg59ma-zb_Yxp7jmQdyNJb3GbX3K7t2ppDOh_tDUOD8w" height=88 width=283></td></td>
-
-<td><td>mustaq@ finished the draft spec (<a href="https://wicg.github.io/capability-delegation/spec.html">link</a>) and it is ready for review.</td></td>
-
-<td><td>Android 12 Overscroll</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/0h7u2zpQbuiN4fQIIkFzibmx86KdLvK5X-P-vFKr1bGrj5AhP5FV5_ZMHQ6_YnWA-a24li0BjD2_JMwr5vC4FHCIunYc9StHR8m4MLuViGUoYS8xQewQYJIVIQ9nY1vTN70pCqRHzw" height=507 width=240></td></td>
-
-<td><td>flackr@ has finished the initial version of working overscroll.</td></td>
-
- <td><td>It re-uses elastic overscroll physics from Mac overscroll.</td></td>
-
- <td><td>Instead of translating, it applies overscroll stretch on the
- transform node.</td></td>
-
- <td><td>There are lots of follow-on work including:</td></td>
-
- <td><td><a
- href="http://crbug.com/1213217">crbug.com/1213217</a></td></td>
-
- <td><td><a
- href="http://crbug.com/1213248">crbug.com/1213248</a></td></td>
-
- <td><td><a
- href="http://crbug.com/1213252">crbug.com/1213252</a></td></td>
-
- <td><td>Enable only on Android-S</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Stability fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Fix privacy leak of visited links</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/U7PEC5Lsr_AZGA2ft-FNFL1QB__w3tp_c5JqGfL20L0qnE_MSu6L3U62BNNoSEAt3GO_dAmvcgkMac1Ue0xGHp0tfU7xK0h1eK2XLksH5vlhTbAqCaNoo_8n6akgSW-6dATvDJIWrw" height=119 width=283></td></td>
-
-<td><td>kevers@ fixed a privacy leak issue of visited links. A repro case is shown above. The fix to the issue is:</td></td>
-
- <td><td>Extract the visited style even if link is unvisited during style
- resolution.</td></td>
-
- <td><td>Generate a transition if either the visited or unvisited style
- changed.</td></td>
-
- <td><td>animation.effect.getKeyframes reports unvisited style regardless of
- whether visited.</td></td>
-
- <td><td>Visually render with the correct style. This is possible since the
- interpolation code retains a pair of colors to interpolate corresponding to
- the visited and unvisited style.</td></td>
-
-<td><td>Fix a crash in Mac IME fix</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/dpHdLwkQP2mvEqUTWU9WqebZlmcMHpkvca2sQQ_PDj6vI0xu_U5Gfuj2nZtp_1qr0sPM9ii3oWPPjHzGoT8yXVrrgF8Zoa48yDC5IrR91f9oJHF9nEqPZ63rcY_B3wkVntyVeRBHsQ" height=112 width=283></td></td>
-
-<td><td>flackr@ fixed a crash by performing a null check.</td></td>
-
-<td><td>Removed one fake user activation</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/UFQIE4kr5dmWZAXVGBKCYupnAMRfM5mnJOZzxQV5hNium6j1f8EZNgiiYpTU3ANfDA86IdaiwzE6A5ROxhkidFQSZ6c_41ESS9MmG-4TaIUx6Qva4YSktkMXi7RzNesE_lsQ6kTVaw" height=40 width=283></td></td>
-
-<td><td>mustaq@ fixed a fake activation issue as a suspect for <a href="http://crbug.com/1201355">a navigation problem</a>.</td></td>
-
- <td><td>UMA investigation revealed <a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1082258#c7">&lt;0.005%</a>
- page loads could be affected.</td></td>
-
- <td><td>Tentatively removed the fake user activation notification from JS
- play() and everything seems good as before!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Interop fixes</td></td>
-
-<td><td>Overscroll-behavior</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/S2OGqJ8UBP5vXu-AHhhmG08aQ8vAqNZiIfalExhOPEMLceQvuMFl46LyzwWSQ8z7GuIAN72tD8D1ggtAWgoxMyyMu3fT_mq_a7C8pEzfn6AJGJQpdqNOC9TBCy0ETSsiXw1rFtJ7Pw" height=249 width=219></td></td>
-
-<td><td>xidachen@ kept working on the <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=954423">bug</a>, where chrome propagates overscroll-behavior from the &lt;body&gt; element, while by spec it should be from the &lt;html&gt; element.</td></td>
-
- <td><td>A detailed <a
- href="https://docs.google.com/document/d/1-pqljDgzzgRVve2oWUq237JPgtT12wcoctxbtBaHZdU/edit?ts=609ec0c2#heading=h.1xrzhx8chbuz">doc</a>
- describing the problem.</td></td>
-
- <td><td>Break the feature counter into two cases. (<a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2896470">CL</a>)</td></td>
-
- <td><td>Querying UKM table shows that google.com is the major site that have
- this problem.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: à la carte</td></td>
-
-<td><td>Bisecting on Android</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/m4--LoEEaNPk4c_0-r7W7qUQT-Mt9LxW1868uj1C_nkaaI0eRXELyBdeKBxezMPUxQOOYdeVdDp49kFfesUTzjUcnIH0LbsriCUxgNahkomeazrCDesL0A3wSlGxxz09goTyRACTzQ" height=197 width=283></td></td>
-
-<td><td>skobes@ found that it is quite annoying to bisect on Android, but it is possible, and also that the tool could be improved.</td></td>
-
- <td><td><a
- href="https://docs.google.com/document/d/1e6IXv9hZQKeOsBx5ywjsBnqS0ZLW9kY2kald_RErJ0w/edit">go/chrome-android-bisect</a>
- contains all the details on how to bisect on Android.</td></td>
-
- <td><td>skobes@ used that for two recent top-controls regressions</td></td>
-
- <td><td><a
- href="http://crbug.com/1167400">crbug.com/1167400</a></td></td>
-
- <td><td><a
- href="http://crbug.com/1207888">crbug.com/1207888</a></td></td>
-
-<td><td>AtomicString for PointerEvent type</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/-60-y1VG2NM4PHDvKf5ZjwIymMNYmYsGdxDZXwvQurFZFpIpsgzJ3VtVNqtOCofZHu0HEd8rPwAk6Wx89o2n4AhjHqLYtZL-fWGiwZuf5SIcEUDafQaa8NpUqOPuPFGQPw6uZ5vQ2A" height=222 width=283> <img alt="image" src="https://lh4.googleusercontent.com/FaaGEYPh_5yWVoGm20LLQ6CEutr55-nK29wKIhTRLLqcZ-4_oyH4A5NDAEcfVmcusUa04evUcPSucEzzCnDcnqcAU9PgdRL_vCikZY3xrpuE-EilMwRQZ4pB7YkE65zZx6r9O3qVdw" height=216 width=280></td></td>
-
-<td><td>flackr@ <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2878101">replaced char\* with AtomicString</a> for PointerEvent type. Why?</td></td>
-
- <td><td>The returned string is passed to PointerEventInit::setPointerType
- implicitly cast to a WTF::string for the rest of its existence. What’s the
- problem?</td></td>
-
- <td><td>First, we take the strlen of the string, which is O(n)
- operation.</td></td>
-
- <td><td>Then, we allocate storage space and copy the string constant, which
- is O(n) time + space.</td></td>
-
- <td><td>If we instead construct a String from another String, then it just
- adds a ref to the StringImpl, and that’s O(1). Refer to the screenshot on
- the left hand side for details.</td></td>
-
-<td><td>Now the String is constructed, are we done? Well, not yet, we have to compare two strings.</td></td>
-
- <td><td>Comparing two arbitrary Strings is O(n), see EqualStringView
- implementation.</td></td>
-
- <td><td>But, comparing two AtomicStrings is O(1)! Refer to the screenshot on
- the right hand side for details.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Bug Updates</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/9pOwepddVaq1FOyV6gnlnpNiwcjT7bJTpRPEsbmAF4_pHGvoXvHSXPVJT3564WtjQMcPaf2kBxdO8LI3PYbh6UAuL4knuYVgCgQK6hR3OdHwCATe4UcB1-B8z_I02CMj6XCpIBSbcA" height=155 width=280> <img alt="image" src="https://lh3.googleusercontent.com/DQwfAQnP-zJ455WAFGOv6VvpLyKTwXBlBTnDiz9EopH_xeLuGmQVvFH-OqjbEqjBczQfcHPpe-lW4yxg7v5iQ5P09SRMiVUXYdRMriK-oNKkfctmtimxAfJEaVsLIPTwTFN7ZMgEMg" height=153 width=278></td></td>
-
-<td><td>Our team kept on top of bugs. We closed almost the same amount of P1 bugs vs opened P1 bugs.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | June 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/june-2021-vol-2---new-features-stability-fixes-interop-fixes-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/june-2021-vol-2---new-features-stability-fixes-interop-fixes-and-more/index.md
deleted file mode 100644
index 1f6097c43ff..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/june-2021-vol-2---new-features-stability-fixes-interop-fixes-and-more/index.md
+++ /dev/null
@@ -1,240 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: june-2021-vol-2---new-features-stability-fixes-interop-fixes-and-more
-title: June 2021 (Vol 2) - New features, stability fixes, Interop fixes and more!
----
-
-<table>
-<tr>
-
-<td>June 2021 (Vol 2)</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll Unification: fix autoscroll crash</td></td>
-
-<td><td>kevers@ fixed an autoscroll crash. There are few problems including:</td></td>
-
- <td><td>WeakPtrs to the same object were dereferenced on different
- threads.</td></td>
-
- <td><td>Waiting for input to be processed on main</td></td>
-
- <td><td>Waiting for a main thread hit test on the compositor</td></td>
-
-<td><td>Here are the fixes:</td></td>
-
- <td><td>WidgetInputHandlerManager is now ref counted.</td></td>
-
- <td><td>Safe to pass around the “this” pointer for callbacks that will run
- on the compositor.</td></td>
-
- <td><td>Use AsWeakPtr only for callbacks that will be run on the main
- thread.</td></td>
-
- <td><td>Fixes 5 crashing tests!</td></td>
-
-<td><td>Scroll Unification: untangling iframe issues</td></td>
-
-<td><td><img alt="chain.png" src="https://lh6.googleusercontent.com/GF5f11bWr7884waypGiE3bi4y-AEY-OWfnVskKZlpAfGuLvFak_GwhKYVOfaJMocFKSX6zEsg7ytdkkqej1kRACQO_oIeAcS7O-Og690MGOnW2gZ_T6LxG9h17QxAaikOAAMVLA7ZJlmSOF6E481OYnLBiSzkCoe7DF0yxBvOf0gKafc" height=190 width=279></td></td>
-
-<td><td>skobes@ landed the <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2983821">CL</a> to handle the case when a scroll hits an iframe that isn’t scrollable for some reason. In this case, we need to look for scrollable container in the parent frame.</td></td>
-
-<td><td>Composite BG-color animation</td></td>
-
-<td><td>xidachen@ fixed two crash cases.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/lIiIaL2x898PdeBhWHW8u22XUNxlSPfhGHbIRsbbVcLhWEq7ornl3q_7rqwz85Eqt2wOmtrue4nsh4Jr0rVb9-JqMtVBum-9M0y_W05tuPEaWwJbfwIh-Mqd5WQRvfmcQLBmCPoVlGkSsc0pw4774yejCh96gNjknKZIWCyq--RxPayt" height=76 width=283></td></td>
-
-<td><td>The first case is shown above where the frame is detached during animation. The fix landed <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2951382">here</a>.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/_yovKVwj7Cc83Md-0ngT8poGR47TZ24Xs5qvWizKG_aWszkI_gKZwblELJCEksA8_JGcHB___vtzdsHpvSUEJTtByTLafZFbrqdRTEU0Lyv8ttXBhfYiEiGLNjBIozw90YO26V6mzdYCOa_HoJxYx8CnFP4Pj5QsRUyDRgMqxZ4Y6-kN" height=157 width=141></td></td>
-
-<td><td>The second case is shown above, and the crash is due to antialiasing that changes the draw operation bounds. This is the <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2954479">fix</a>.</td></td>
-
-<td><td>Progress based timelines/Scroll Timelines</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/sXJITc1_VocnlLddIAps2gR_spLrMg3hNfh1OfeKOdMn8S0WSTEoIqcBTat3D_6PJEn94VejqwJVbDJrBi72Q401j9syWMLmmwnNGCEo-fouH0tC8VVdr9sjpHneH24A6PFe9kjugsJXltHSN8iN7DYRFtL53G4fPc5wAOFZZLwSJ-bv" height=200 width=283></td></td>
-
-<td><td>kevers@ made a lot of progress on <a href="https://drafts.csswg.org/web-animations-2">specs</a>. </td></td>
-
-<td><td>Highlights:</td></td>
-
- <td><td>No longer need time-range for a scroll timeline; Times are converted
- to percentages. (<a
- href="https://github.com/w3c/csswg-drafts/pull/6410">patch</a>)</td></td>
-
- <td><td>Support duration = ‘auto’ (<a
- href="https://github.com/w3c/csswg-drafts/pull/6337/">patch</a>)</td></td>
-
-<td><td>Here’s an example of un-timed timelines:</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/-pz0DHZNano7yrdoIHbn_3L08AT_InCiZDZ7A8uvHkgf1csjMi-2M1PJV6YnGb5Sjqyk1ozrW3TvmhIr0AucjD8FTfWpSm1qUX7atIsK2NUePkd48J1gp4HLBzrbMABQ6seLIRdAy6io1qeUvy6MadntwNpOw12W4dCdx9Ta-8ah0hro" height=124 width=283></td></td>
-
-<td><td>Another example of empowering progress based animations</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/sOOLJ5DSjTrxW8oYTqIHccfgzcUvqe2c8Z70ao3NeQH7rtIDIwLu6dvtH3GeHTKOPAjdWm9kIwixT6ZbQdUvHgdFKRAdDZ3_2ewjncEoeZkodfSUw8BqK5tEG2EC-8CJwY7WlpXy8vUJ9be6EJdHF89jsajz_dmehjYkiy75rRMc0DJe" height=155 width=215></td></td>
-
- <td><td>Normalization procedure to convert time-based animations to
- progress-based.</td></td>
-
- <td><td>Animations are scaled to 100% with iteration and delays adjusted
- accordingly.</td></td>
-
- <td><td>Smooth integration with web-animations API</td></td>
-
-<td><td>Capability Delegation is ready for TAG review</td></td>
-
- <td><td>mustaq@ <a
- href="https://github.com/w3ctag/design-reviews/issues/655">kicked off</a> a
- TAG review for the <a
- href="https://wicg.github.io/capability-delegation/">explainer</a> and the
- <a href="https://wicg.github.io/capability-delegation/spec.html">draft
- spec</a>.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/DTQM0AAbpo4H-S7bcy9udCr-jtZ4QenLeuLj6qu_C-HloTqU51QYym46H5gYpYoGN8TQBCqPRt_J91bfgicQfD1706FD7n2eHxcXzhbJTxqw19M9XJy-oVpZOLnebaoqy3PCFSSjIABAAAd61QwsZN8h8Sl74mghfvGMKZbMwEOzBXyj" height=83 width=256></td></td>
-
- <td><td>Also investigated possible shipping options and finalized <a
- href="https://docs.google.com/document/d/1L66B1QtqHCzAKlLQXdtv-YCmlXrJhi2Je2Vo91XWMsQ/edit?usp=sharing">a
- plan</a> working with smcgruer@ (Web Payments) and jyasskin@ (Web
- Standards).</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Stability fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>DCHECK in ConvertTimingForCompositor</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/eyBq9_FmfclUlfQjaMQmR5adk-l1XtWKism64bdBFe0qbCFnFEiCztGpEhF5olqDkZNr-ggEO28XfJ9t2MGgILKt6a-890Vvsz9mWiS5cYTNNIMAXgsStdc55cjCYdO9ZOIjhiDfjQpER8Njl16ghE6oEKQ8Cdlt8G2XzDXVEQwU1BbU" height=163 width=283></td></td>
-
-<td><td>This function did a bunch of math to check whether the result is finite or not, then either abort or carry on. But what if the intermediate result is indeterminate?</td></td>
-
-<td><td>To solve that, we check intermediate results if there is any risk of the following in subsequent calculations:</td></td>
-
- <td><td>infinity - infinity</td></td>
-
- <td><td>0 / 0</td></td>
-
- <td><td>infinity / infinity</td></td>
-
- <td><td>Division by zero</td></td>
-
-<td><td>FullscreenControllerInteractiveTest flaky fix</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/ATmakcwLRkU0fhQgB3lhLXeJry1hUqEuSkZ9OB_Y6HXVuTsg0Q4kDYWlzGUg6la_dmmlxhtO5CuA0M7ToABMYZXutB04sXdz5SaseLymhW45u0-nWRu5VnVeMNIq_ohJlI1pa1AoJ0z3E_2KhMp924z0ryu-4oGHAICgPTP_O6A7tWxM" height=44 width=283> </td></td>
-
-<td><td>mustaq@ found an issue that might cause flakiness in a large suite of tests: an <a href="https://source.chromium.org/chromium/chromium/src/+/main:net/test/embedded_test_server/embedded_test_server.h;drc=172a2a554e8b556203c962152d3b19d55240725d;l=341">initialization problem</a> with EmbeddedTestServer could be causing flakiness in all FullscreenControllerInteractiveTests! A <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2969924">fix</a> has been landed, and we’re hopeful that flakiness will be greatly reduced moving forward.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Interop fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Fix interpolation of integers</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/dwWcE_WQ7lAnDlzDHXYS4PX74JG45uW1NkiqcVk_jHGHWcftBOl9VGSk8HgiGNQ4FqxAkKEDpaSaS2a185e2i3jqNrUVjra8HJFGsYvafm3QfjVApujEw_OgnLB-abUQIMVbSsQo_D4wz-3YINcUx5px_w77bzy8cLZ-AcJUSXNoDgNv" height=268 width=283></td></td>
-
-<td><td>The test case above demonstrates a bug: the 8 digit CSS number was serialized to 6 significant digits, and the out-of-bounds treatment turned it into a 0..</td></td>
-
-<td><td>Below is the fix to the problem.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/7VFctlPazHy6OcCxSRmLho80W_1aRSct288IUC88n4aA-mlgpWy7OGMJLnRqcl-9y4gZ04A8h9qCI5i9i-j1dXZhvcl9NFwDx6JXTh_VnOWn3djnBh0taY3ichwvnmSlIMHTcKDDPE1TYSDUiq2QIS4lQvdv_h2qdmlrLThih4j8UZg3" height=47 width=283></td></td>
-
-<td><td>overscroll-behavior</td></td>
-
-<td><td>Our ongoing effort to reduce mis-usage of overscroll-behavior (<a href="https://docs.google.com/document/d/1-pqljDgzzgRVve2oWUq237JPgtT12wcoctxbtBaHZdU/edit#heading=h.1xrzhx8chbuz">details</a> here) moved forward with a fix landing on Google Search.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/AbvzIFWaIWqOw7OrIaCNCm-UlAonjWT78-em1KgWUDV4cDzbEPzdgFSlRhemYow7gzCrffeb7nMrj7c72IkFAAQdN9ZT9-XmzEjPDHMudAU52i_PAUcU8QaS_oEayjSLxvrOM7Z5n9ae_z6-0qbC1d92JeU-kFD2ELY3lRswb8q9zGbv" height=59 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/pzrNAt-Kl8VKbRTrvOvrtQLcFb7im-nW5--4Wx_BNkOCa-ZL3MIOWXyzbrPRz_PR8A6dyCoUHITbPe-6PjOYvDy4Vt7b4G-xQ4PSq95b7gPqUTbpyDkcyHpuKyBwD_6YWIG_jfjHMRoaKYoSv4PXtdi7RKXltISb0zih3FeC5vG29dCi" height=105 width=283></td></td>
-
-<td><td>The first graph shows the usage on Google, and the second graph shows the usage of all page load, which is about 0.3%.</td></td>
-
-<td><td>There are two ways to move this forward:</td></td>
-
- <td><td>Through devrel outreach (<a
- href="https://docs.google.com/document/d/1-pqljDgzzgRVve2oWUq237JPgtT12wcoctxbtBaHZdU/edit#heading=h.1xrzhx8chbuz">doc</a>)</td></td>
-
- <td><td>Push a spec change (<a
- href="https://github.com/w3c/csswg-drafts/issues/6406">proposal</a>)</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Position: sticky 100% pass rate on chrome!</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/eNLvAI5MdHjZRW1284KVgALG5aQcZUluy3twk8P9GsZyr6XsfvXlTb0s3ZBjx_C8nGiy7F2LNFVsnlXIHT8Rr4ofTVtuhDxA2OaXu0BpLokp99uOff3GpAIM05Y24HtZCNE54glfHGM6kZX2HSzobneiU-46_SMZA-dZjohBHddExuM9" height=135 width=283></td></td>
-
-<td><td>flackr@ wrapped up one of our team’s key product excellence/interop OKRs by fixing all WPT tests for position:sticky. Thanks to all the folks on the DOM team that contributed. (<a href="https://wpt.fyi/compat2021?feature=position-sticky">link</a>)</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Bug Updates</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/DgKWR43wOdhft-vh_ub8eFt_JbD7XgQ4r4mFRz1DRPLdLvd2RmZI4rnzkPmD1nnkYPYXPXGYB1QglE3LFnB2FFW-oZ_O4CBqgwLn16DG9YlutSRXV2-xDU6SQ2B8HjG93Jl2OSwxO3lpHqVPlVk_tf7IrmXl7Xsh4ukG0KcyQl5i9aBo" height=159 width=288> <img alt="image" src="https://lh4.googleusercontent.com/x5OkzI6ZArtT0yPVOCJoEmt_fxe7tCcE_L5pq5eZ_4uns0qpnNfmQErEXdu3iq9mCaVBgg3jxjIqH-OqRRbGQueSwqi8NJN91sRc8xVcw_YBGAntWLmXtQblkkYtrl3dzT6me0wNvIyfr_8dqiK6UudVqcXv4vPbveQ6gOx1rsMF44ZS" height=158 width=284></td></td>
-
-<td><td>Our team made great progress on fixing P1&P2 bugs and the numbers are going down!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | June 2021 (Vol 2)</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/march-2019/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/march-2019/index.md
deleted file mode 100644
index 88e23a54225..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/march-2019/index.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: march-2019
-title: March 2019
----
-
-<table>
-<tr>
-
-<td>MARCH 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/bT81a8VO0AgQk_m0F1KqBnoC5oYBcHNHpgknmtbpr3qLjsrHM3F0GE3K20VzUDlXjx47SUe7K1oV0GLC7Xcs1hEfMOc3hKuMCIbwR2XR1hrRBTMB8Q8pTK4EOp5YPIK3e0H6Qh21" height=181 width=185></td></td>
-
-<td><td>Degenerate case in computing sign of quaternions. </td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/dvKfGyIqut3spwESpQ5gUXzdfMs8FvL5OndVdmtFSd9tynbci3E1z3xCO3G3lZA2Y2mq9Ypu1dU9SX_3yUjicYe0lGHi5iFKX8FPyVLNyVKARi0xqB0OBofd1vUlusUVi_ZuFrIF" height=181 width=185></td></td>
-
-<td><td>Step 1: Fix quaternion calculations. Avoid degenerate edge cases.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/MYDxbzoQPU76BSHi8UQawTmlX9eDDWuEBD7kyjtvQUQv8Gy5_RCbaem7xEdbNAukqTiuyNWRvTJNG4RXp9KQgu_xphSZLuwaHU22Deo6e3T5879Rj-x9Jz8SXuCgl_DNesljbp8o" height=181 width=185></td></td>
-
-<td><td>Step 2: Support 2D matrix decomposition.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Improved 3D and 2D transform animations</td>
-
-<td>We have continued to address 2D and 3D matrix decomposition issues that were causing transform animation and interop bugs. Above is one example but 16 more wpt tests are now passing in Chrome. The fact that there are two implementations (in Blink and Skia) of the same matrix operations is not helpful and we are considering options to consolidate them.</td>
-
-<td>This work help identify inconsistencies and inaccuracies in the css-transform specification for which issues have been filed: <a href="https://github.com/w3c/csswg-drafts/issues/3709">1</a>, <a href="https://github.com/w3c/csswg-drafts/issues/3710">2</a>, <a href="https://github.com/w3c/csswg-drafts/issues/3711">3</a>, <a href="https://github.com/w3c/csswg-drafts/issues/3712">4</a>, <a href="https://github.com/w3c/csswg-drafts/issues/3713">5</a>.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/BQeMOUyYU4rbjq7gr7IOZD-LfcTsBwYbnPWF5yfh-rAex7JNjMTeVC8hNQxrsl3Pawcx1y6TOutPkgG2jS5RRYFbI1-_8Du9YqX0uw-V3xpwcBG6sYw6D20VUCjN4POBqf2LdpV3" height=291 width=164></td></td>
-
-<td><td>Existing implementation using scroll events.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/qP-hDF8ZwIY3DLAxCX4pXhO4Qc3OVVEHHcSnzsjJUP6LgBdCwWG1Kq6yZsNkXRulL8QkYhHoI-WQtl3aEOV4xUeapzwmxxKd7YvyB9PWmPdB2Suo91aD3H69x6X1F_pl133XX8Bm" height=286 width=160></td></td>
-
-<td><td>New “Buttery Smooth” impl using Animation Worklet and Scroll Timeline.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>AMP Origin Trial Updates</td>
-
-<td>AMP animation team has a near complete<a href="https://github.com/ampproject/amphtml/blob/master/extensions/amp-animation/0.1/runners/scrolltimeline-worklet-runner.js"> re-implementation</a> of their<a href="https://ampbyexample.com/visual_effects/basics_of_scrollbound_effects/"> scrollbound effect</a> system using Scroll Timeline and Animation Worklet. They have identified<a href="https://docs.google.com/document/d/1TZBb88apJ41Ibi3mued5ZB0Z9YY7h83UjAi2Q9b1fQM/edit#heading=h.eb8fxcagf7ig"> gaps</a> in the API which we collaborated on an<a href="https://docs.google.com/document/d/1XFPgy3g57njeesgJdbVSc2x8vZJQFAJBxUwuHLc3VXs/edit?usp=sharing"> action plan</a> to address (mainly by proposing changes to Scroll Timeline API). It was also decided to<a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/AZ-PYPMS7EA/kffOspnyBwAJ"> extend</a> the origin trial to allow AMP's new implementation to be gradually turned on for real users - which also helps us learn more about the performance of these features at scale.</td>
-
-<td>Here is a<a href="https://drive.google.com/open?id=1WqNNyJC1r9yUoYTgATlRX4mYIPo8R3yU"> recording</a> of the<a href="https://amp-article.herokuapp.com/"> demo</a>. (To run locally enable experimental web platform feature flag and enable relevant AMP experiment using \`AMP.toggleExperiment('chrome-animation-worklet')\` in devtools console)</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/OyXkbEam5SYQ1dD04AR3HrX-hQ6z2fklO7BTRRPy5ZYFqVPwctNRQbXTcp4JgxA95sPL99cQUfixsSOWmr4g8mdbONwlKX2iN9oMBxAPPGD9Qlc4pkIKxXuYGhh70Pqk2vDaGWL9" height=125 width=283></td></td>
-
-<td><td>Viz Hit-Testing Surface Layer</td></td>
-
-<td><td>Finch trial is showing improvement over previous Draw Quad version. We are seeing 14%/8%/5% improvements in hit test requests answered in the fast path on <a href="https://uma.googleplex.com/p/chrome/variations/?sid=7bf43df040ce9f90cbea1e762c5c03d5">Windows</a>/<a href="https://uma.googleplex.com/p/chrome/variations/?sid=035b5f6d5f7ca030b7887f5b4e7f6b07">MacOS</a>/<a href="https://uma.googleplex.com/p/chrome/variations/?sid=e16a589895889a2310b4bc5f4387b43c">Android</a>, with 8% regressions on <a href="https://uma.googleplex.com/p/chrome/variations/?sid=2ffbcd8b59f4a74e05490d98f34cb579">Linux</a> (under investigation). Across all platforms, <a href="https://uma.googleplex.com/p/chrome/variations/?sid=5a3437665f748a4b4bcc679013900143">hit testing error rates</a> are lower than 0.05%.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/PdcNk4yzu3sVovMt1mQcuDwfoinb7N2EwvpdAgdC16SVQbeJOY-9snyuxO48NMCN2K0QrWH3S7uw7VJG-dWxEMJO_7b6Qpl6rrULnaV-garO2ER_s6st0NgQp01PECa9Yc3-HViY" height=123 width=283></td></td>
-
-<td><td>Compositor Touch Action</td></td>
-
-<td><td>Finch trial is showing promising <a href="https://uma.googleplex.com/p/chrome/variations?sid=4d04b0905ac90bafd4b63b39754ae20e">early results</a>. ScrollBegin latency improves 5% @50pct and 13% @99pct. ScrollUpdate latency improves 1% @50pct and 3% @99pct.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Off-Main Paint Worklet</td>
-
-<td>We made good progress by completing implementation of multiple sub-components: <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1426015">rasterization</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1479658">raster-caching logic</a> and <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1497032">lookup</a>. Work is in progress for <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1495445">dispatch logic</a>, and a new approach to share data between blink and cc for paint info (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1497217">1</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1504229">2</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1506653">3</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1506818">4</a>). </td>
-
-<td>Animation Worklet</td>
-
-<td>Animation Worklet is now fully <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=791280">asynchronous</a> in CC with proper scheduling in place. With <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=915352">help</a> from Microsoft engineers our tests have been upstreamed to <a href="https://wpt.fyi/results/animation-worklet?label=master&product=chrome%5Bexperimental%5D&product=edge&product=firefox%5Bexperimental%5D&product=safari%5Bexperimental%5D&aligned&q=animation-worklet">web-platform-tests</a> and most critical flakiness issues are resolved. Specification has been updated (<a href="https://github.com/w3c/css-houdini-drafts/commit/3c1cd1b3babc49a92d7a5079f9de77df67d06775#diff-6547a8c38ca0bdc51fd63edeaa4b66b3">1</a>, <a href="https://github.com/w3c/css-houdini-drafts/commit/93ab72f8abee1ac008eb4b5292265633387381fc#diff-6547a8c38ca0bdc51fd63edeaa4b66b3">2</a>, <a href="https://github.com/w3c/css-houdini-drafts/commit/cf1a69a4c9dd165f53df7ba7d68c329287ab2659#diff-6547a8c38ca0bdc51fd63edeaa4b66b3">3</a>) and <a href="https://github.com/w3ctag/design-reviews/issues/349">TAG review</a> requested. Aiming to ship without Scroll Timeline in M75.</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Updates | March 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/march-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/march-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md
deleted file mode 100644
index ca10364d93c..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/march-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more/index.md
+++ /dev/null
@@ -1,222 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: march-2020---web-animations-scroll-linked-animations-throughput-metrics-and-more
-title: March 2020 - Web Animations, Scroll-linked Animations, Throughput Metrics and
- more!
----
-
-<table>
-<tr>
-
-<td>March 2020</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>The Animation Festival</td>
-
-<td>The team made solid progress towards moving Web-Animations forward, as you can see in these demos from Kevin (kevers@) and Hao (haozhes@)!</td>
-
-<td>A kinder gentler cancel - add support for animationcancel</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/n-dDYATk36izRhk8Cz3rT5xe0LszrOxy-N912z4UE_mNyXXye1zW1yeEqfyi9Ab74tZkNrOPLhkeSXIsMMx5is5yKSy9LxB47Gf2yyNG7dqqCKzS0KNPbGqsVeWaKK3U0VZcDArE" height=132 width=272></td></td>
-
-<td><td>This example illustrates using a combination of CSS animations and CSS transitions, getAnimations, commitStyles and animationcancel to smoothly reset the state of a cancelled CSS animation.</td></td>
-
-<td><td>Performing a commit style prior to cancelling the animation prevents the animation from snapping back to the start position.</td></td>
-
-<td><td>Within the animationcancel listener we can smoothly transition back to the starting point by triggering a CSS transition.</td></td>
-
-<td><td>#box {</td></td>
-
-<td><td> transition: transform 0.5s ease-in-out;</td></td>
-
-<td><td>}</td></td>
-
-<td><td>.slide {</td></td>
-
-<td><td> animation: ...</td></td>
-
-<td><td>}</td></td>
-
-<td><td>document.addEventListener(</td></td>
-
-<td><td> 'animationcancel', (evt) =&gt; {</td></td>
-
-<td><td> if(evt.target != box) return;</td></td>
-
-<td><td> // Smoothly transition back to</td></td>
-
-<td><td> // starting point.</td></td>
-
-<td><td> box.style.transform = 'none';</td></td>
-
-<td><td>});</td></td>
-
-<td><td>function slide() {</td></td>
-
-<td><td> box.classList.add('slide');</td></td>
-
-<td><td>}</td></td>
-
-<td><td>function reset() {</td></td>
-
-<td><td> document.getAnimations().</td></td>
-
-<td><td> forEach(animation =&gt; {</td></td>
-
-<td><td> animation.commitStyles();</td></td>
-
-<td><td> animation.event.target.</td></td>
-
-<td><td> classList.remove('slide');</td></td>
-
-<td><td> });</td></td>
-
-<td><td>}</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Taking the scenic route - fix CSS transition events after updating the effect</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/h4X1AOZRN5TrzSKcCke98ILTBrzYtCcgQR2XwnDubxcZModEokR37BGkqacpWaFoPNSt7TdWsiDA25l8RgSVEYQsR4_ynoNVOsHPnb4dV3jh4JlywYBgArRAYwju_3xHNqJ8N5ib" height=61 width=265></td></td>
-
-<td><td>This example demonstrates a means of customizing the path of a transition by replacing the keyframe effect.</td></td>
-
-<td><td>After changing the effect, events still need to be directed to the original target. Previously, changing the effect resulted in dropping the transitionend or tansitioncancel event, which in turn broke the chain of transitions.</td></td>
-
-<td><td>document.addEventListener(</td></td>
-
-<td><td> 'transitionrun', (evt) =&gt; {</td></td>
-
-<td><td> if (evt.propertyName !=='transform')</td></td>
-
-<td><td> return; </td></td>
-
-<td><td> const animation = circle.getAniamtions()</td></td>
-
-<td><td> .find(anim =&gt;</td></td>
-
-<td><td> anim.transitionProperty ===</td></td>
-
-<td><td> 'transform');</td></td>
-
-<td><td> animation.effect =</td></td>
-
-<td><td> new KeyframeEffect(circle,</td></td>
-
-<td><td> keyframes,</td></td>
-
-<td><td> options);</td></td>
-
-<td><td>});</td></td>
-
-<td><td>document.addEventListener(</td></td>
-
-<td><td> 'transitionend', (evt) =&gt; {</td></td>
-
-<td><td> circle.style.opacity = 0;</td></td>
-
-<td><td>});</td></td>
-
-<td><td>// … wait until rendered … </td></td>
-
-<td><td>circle.style.transform =</td></td>
-
-<td><td> 'translateX(200px)';</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Playing nicely together - CSS Animation / Web Animation API interactions</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh5.googleusercontent.com/AgXlDRi8AKQKKAxYgJ2SdFhDjIvVYtKe2d00lYtqS88DvxrkUUOP-rq7_X0dU9R6cSKKMgkQxiLA8JypElSTPRY5n35KlS5vP-UeTBEDOeksnGufimjfVM0G0fsMWQUfYybDnOLw" height=119 width=580></td></td>
-
-<td><td colspan=2>This demo illustrates how AnimationEvent.updateTiming overrides properties set via CSS properties. The updateTiming API may be used to set/override one or more animation properties. A subsequent change via CSS animation properties must not replace values set via the API call. The override behavior is on a per-property basis.</td></td>
-
-<td><td colspan=2>Resolve animation ordering issues with free vs markup bound animations</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh4.googleusercontent.com/HNr4kbgj998Pe7W1MmP8PM7JvWnPhmOaezC3q4F8WJ7oX7F9LjJw2wm_6JCj3L4SNSWEMaipsGlOClXVyIapJJpv35kX8-zPpTuNiaNwScjH-jHxN0SnKbLrOuytmZrtuHadNNzv" height=249 width=453></td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>This example illustrates effect ordering and composite: add. Each rectangle starts with a pair of animations: a web animation (scale), and a CSS animation (rotation). As the CSS Animation has lower composite ordering, the resultant animation is “rotate then scale” which indicates the expected result from before. In the left rectangle, we grab a reference to the CSS Animation before cancelling (clearing the animation property). When the rotate animation is replayed, it is now a “free” animation and the ordering flips to be creation order: i.e. “scale then rotate”. Since scale and rotate operations are not commutative, we can find the end results are different from the left to right.</td></td>
-
-<td><td colspan=2>--- To be continued ---</td></td>
-
-<td><td colspan=2>Special thanks to Rob (flackr@) and Majid (majidvp@) who reviewed 40+ non-trivial patches for the excellent work.</td></td>
-
-<td><td colspan=2>Scroll-linked Animations</td></td>
-
-<td><td colspan=2>On the standardization front, Majid triaged all outstanding specification issues and identified <a href="https://github.com/w3c/csswg-drafts/milestone/6">12 of them</a> as P1 for the First Public Working Draft (FPWD). Rob proposed <a href="https://github.com/w3c/csswg-drafts/issues/4862">progress-based animations</a> for cleaner developer ergonomic (<a href="https://github.com/w3c/csswg-drafts/pull/4890">pull request</a>) getting rid of the arbitrary duration that is currently needed. And Olga (gerchiko@microsoft.com) drove the discussion on the inactive timeline spec <a href="https://github.com/w3c/csswg-drafts/issues/2066">issue</a> and proposed the timeline state <a href="https://edotor.net/?engine=dot#digraph%20G%20%7B%0A%20%20node%20%5Bfontsize%3D8%5D%3B%0A%20%20%2F%2F%20States%0A%20%20%22Idle%22%20%5Blabel%3D%22Idle%5CnST%20%3D%20null%5CnHT%20%3D%20null%5CnTask%20%3D%20none%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dunresolved%5Cnplay_state%3Didle%22%5D%0A%20%20%20%20subgraph%20cluster_0%20%7B%0A%20%20%20%20%20%20%20%20style%3Dfilled%3B%0A%20%20%20%20%20%20%20%20color%3Dlightgrey%3B%0A%20%20%20%20%20%20%20%20node%20%5Bstyle%3Dfilled%2Ccolor%3Dwhite%5D%3B%0A%20%20%20%20%20%20%20%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20%5Blabel%3D%22Play-pending%20HT%5CnST%20%3D%20null%5CnHT%20%3D%20resolved%5CnTask%20%3D%20play%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Drunning%22%2C%20color%3Dyellow%5D%0A%20%20%20%20%20%20%20%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20%5Blabel%3D%22Play-pending%20ST%5CnST%20%3D%20resolved%5CnHT%20%3D%20null%5CnTask%20%3D%20play%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dnull%5Cnplay_state%3Drunning%22%2C%20color%3Dlightyellow1%5D%0A%20%20%20%20%20%20%20%20%22Pause-pending%20(HT%2C%20TL%20Inactive)%22%20%5Blabel%3D%22Pause-pending%20HT%5CnST%20%3D%20null%5CnHT%20%3D%20resolved%5CnTask%20%3D%20pause%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Dpaused%22%2C%20color%3Dlightskyblue1%5D%0A%20%20%20%20%20%20%20%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20%5Blabel%3D%22Pause-pending%20ST%5CnST%20%3D%20resolved%5CnHT%20%3D%20null%5CnTask%20%3D%20pause%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dnull%5Cnplay_state%3Dpaused%22%2C%20color%3Daquamarine2%5D%0A%20%20%20%20%20%20%20%20%22Running%20(TL%20Inactive)%22%20%5Blabel%3D%22Running%5CnST%20%3D%20resolved%5CnHT%20%3D%20null%5CnTask%20%3D%20none%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dnull%5Cnplay_state%3Drunning%22%2C%20color%3Dlemonchiffon2%5D%0A%20%20%20%20%20%20%20%20%22Paused%20(TL%20Inactive)%22%20%5Blabel%3D%22Paused%5CnST%20%3D%20null%5CnHT%20%3D%20resolved%5CnTask%20%3D%20none%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Dpaused%22%2C%20color%3Dgold1%5D%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20label%20%3D%20%22Timeline%20Inactive%22%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20subgraph%20cluster_1%20%7B%0A%20%20%20%20%20%20%20%20node%20%5Bstyle%3Dfilled%20fontsize%3D8%5D%3B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20label%20%3D%20%22Timeline%20Active%22%3B%0A%20%20%20%20%20%20%20%20color%3Dblue%0A%20%20%20%20%20%20%20%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20%5Blabel%3D%22Play-pending%20HT%5CnST%20%3D%20null%5CnHT%20%3D%20resolved%5CnTask%20%3D%20play%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Drunning%22%2C%20color%3Dyellow%5D%0A%20%20%20%20%20%20%20%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20%5Blabel%3D%22Play-pending%20ST%5CnST%20%3D%20resolved%5CnHT%20%3D%20null%5CnTask%20%3D%20play%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Drunning%22%2C%20color%3Dlightyellow1%5D%0A%20%20%20%20%20%20%20%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20%5Blabel%3D%22Pause-pending%20HT%5CnST%20%3D%20null%5CnHT%20%3D%20resolved%5CnTask%20%3D%20pause%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Dpaused%22%2C%20color%3Dlightskyblue1%5D%0A%20%20%20%20%20%20%20%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20%5Blabel%3D%22Pause-pending%20ST%5CnST%20%3D%20resolved%5CnHT%20%3D%20null%5CnTask%20%3D%20pause%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Dpaused%22%2C%20color%3Daquamarine2%5D%0A%20%20%20%20%20%20%20%20%22Running%20(TL%20Active)%22%20%5Blabel%3D%22Running%5CnST%20%3D%20resolved%5CnHT%20%3D%20null%5CnTask%20%3D%20none%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Drunning%22%2C%20color%3Dlemonchiffon2%5D%0A%20%20%20%20%20%20%20%20%22Paused%20(TL%20Active)%22%20%5Blabel%3D%22Paused%5CnST%20%3D%20null%5CnHT%20%3D%20resolved%5CnTask%20%3D%20none%5Cn%3D%3D%3D%3D%3D%3D%3D%5Cncurrent_time%3Dresolved%5Cnplay_state%3Dpaused%22%2C%20color%3Dgold1%5D%0A%0A%20%20%20%20%7D%0A%20%20%0A%20%20%0A%20%20%2F%2F%20Idle%20state%0A%20%20%22Idle%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Idle%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Idle%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Idle%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%0A%20%20%2F%2F%20Play-pending%20(HT%2C%20TL%20Active)%20state%0A%20%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Running%20(TL%20Active)%22%20%5B%20label%3D%22ready%22%20style%3Ddashed%20%5D%0A%20%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20%5B%20label%3D%22Inactive%22%20color%3D%22gray%22%20%5D%0A%0A%20%20%2F%2F%20Play-pending%20state%20(ST%2C%20TL%20Active)%0A%20%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Running%20(TL%20Active)%22%20%5B%20label%3D%22ready%22%20style%3Ddashed%20%5D%0A%20%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22Inactive%22%20color%3D%22gray%22%20%5D%0A%0A%20%20%2F%2F%20Pause-pending%20(HT%2C%20TL%20Active)%20state%0A%20%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Paused%20(TL%20Active)%22%20%5B%20label%3D%22ready%22%20style%3Ddashed%20%5D%0A%20%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20-%3E%20%22Pause-pending%20(HT%2C%20TL%20Inactive)%22%20%5B%20label%3D%22Inactive%22%20color%3D%22gray%22%20%5D%0A%0A%20%20%2F%2F%20Pause-pending%20(ST%2C%20TL%20Active)%20state%0A%20%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Paused%20(TL%20Active)%22%20%5B%20label%3D%22ready%22%20style%3Ddashed%20%5D%0A%20%20%2F%2F%20(Following%20is%20the%20aborted%20paused%20behavior)%0A%20%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22Inactive%22%20color%3D%22gray%22%20%5D%0A%0A%20%20%2F%2F%20Running%20state%0A%20%20%22Running%20(TL%20Active)%22%20-%3E%20%22Running%20(TL%20Active)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Running%20(TL%20Active)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Running%20(TL%20Active)%22%20-%3E%20%22Running%20(TL%20Inactive)%22%20%5B%20label%3D%22Inactive%22%20color%3D%22gray%22%20%5D%0A%0A%20%20%2F%2F%20Paused%20state%0A%20%20%22Paused%20(TL%20Active)%22%20-%3E%20%22Paused%20(TL%20Active)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Paused%20(TL%20Active)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Paused%20(TL%20Active)%22%20-%3E%20%22Paused%20(TL%20Inactive)%22%20%5B%20label%3D%22Inactive%22%20color%3D%22gray%22%20%5D%0A%20%20%0A%20%20%2F%2FPlay-pending%20(HT%2C%20TL%20Inactive)%20state%0A%20%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20-%3E%20%22Pause-pending%20(HT%2C%20TL%20Inactive)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Active)%22%20%5B%20label%3D%22Active%22%20color%3D%22black%22%20%5D%0A%20%20%0A%20%20%2F%2FPlay-pending%20(ST%2C%20TL%20Inactive)%0A%20%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22Active%22%20color%3D%22black%22%20%5D%0A%20%20%0A%20%20%2F%2FPause-pending%20(HT%2C%20TL%20Inactive)%0A%20%20%22Pause-pending%20(HT%2C%20TL%20Inactive)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Pause-pending%20(HT%2C%20TL%20Inactive)%22%20-%3E%20%22Pause-pending%20(HT%2C%20TL%20Inactive)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Pause-pending%20(HT%2C%20TL%20Inactive)%22%20-%3E%20%22Pause-pending%20(HT%2C%20TL%20Active)%22%20%5B%20label%3D%22Active%22%20color%3D%22black%22%20%5D%0A%20%20%0A%20%20%2F%2FPause-pending%20(ST%2C%20TL%20Inactive)%0A%20%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20-%3E%20%22Play-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Active)%22%20%5B%20label%3D%22Active%22%20color%3D%22black%22%20%5D%0A%20%20%0A%20%20%2F%2FTL%20Inactive%0A%20%20%22Running%20(TL%20Inactive)%22%20-%3E%20%22Running%20(TL%20Inactive)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Running%20(TL%20Inactive)%22%20-%3E%20%22Pause-pending%20(ST%2C%20TL%20Inactive)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Running%20(TL%20Inactive)%22%20-%3E%20%22Running%20(TL%20Active)%22%20%5B%20label%3D%22Active%22%20color%3D%22black%22%20%5D%0A%20%20%0A%20%20%2F%2FPaused%20(TL%20Inactive)%0A%20%20%22Paused%20(TL%20Inactive)%22%20-%3E%20%22Paused%20(TL%20Inactive)%22%20%5B%20label%3D%22pause()%22%20color%3D%22green%22%20%5D%0A%20%20%22Paused%20(TL%20Inactive)%22%20-%3E%20%22Play-pending%20(HT%2C%20TL%20Inactive)%22%20%5B%20label%3D%22play()%22%20color%3D%22red%22%20%5D%0A%20%20%22Paused%20(TL%20Inactive)%22%20-%3E%20%22Paused%20(TL%20Active)%22%20%5B%20label%3D%22Active%22%20color%3D%22black%22%20%5D%0A%7D%0A">chart</a>.</td></td>
-
-<td><td colspan=2>On the implementation side, this sprint Yi (yigu@) added support for running scroll-linked animations on the compositor to free them from the <a href="https://codepen.io/yigu/full/ExjJVQr">busy main thread</a>, Majid <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2070673">landed</a> the initial patch IDL changes to support <a href="https://github.com/w3c/csswg-drafts/issues/4337">element-based scroll offset, and</a> Jordan (jortaylo@microsoft.com) added ScrollTimeline.phase which will be used specially to replace the fill mode.</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh3.googleusercontent.com/1W1LxJTG6s7Znk7NhC_evWlDBQcxcSC9rAnT3iVPhyMDdFbte5t95MFGv5mjeeYcDgGpmKI40RVm370kDHCKlCKOYfXxtfiiSE5a5umWNf18l88HNyH5x0YvDSXJbww0hb_Jz1Oe" height=258 width=281><img alt="image" src="https://lh4.googleusercontent.com/Xj2XRYqsx2AL-quX7e2OYg3JmhJzzvONhBsZEPSImL_3HnP42tmS1hUn96J1RW1vi8wpDu-IfqAend__rYuE6Ulo1yYKrH0wc5RixwQ8t2USAzj6A3I4iHeyaSDkS4VyX4LfgSMQ" height=259 width=282></td></td>
-
-<td><td colspan=2>Left: the animation becomes janky after adding artificial jank on the main thread.</td></td>
-
-<td><td colspan=2>Right: the animation is composited therefore it’s still smooth with artificial jank.</td></td>
-
-<td><td colspan=2>Finally after sprints of hard work on the rather complex problem, Olga landed the scroll snapshotting <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2005629">work</a> to make the timeline invalidation correct and avoid<a href="https://docs.google.com/presentation/d/12UNGCTJybiL5gEMAGY2f-05WxXARvNz4k-RS02qgNuU/edit#slide=id.g740960215a_1_0"> potential layout cycles</a>. This was a ship-blocker! \\ o /</td></td>
-
-<td><td colspan=2>Frame Throughput Metrics</td></td>
-
-<td><td colspan=2>Xida (xidachen@) made solid progress on refining high-level metrics to measure renderer performance this sprint.</td></td>
-
-<td><td colspan=2>Thread throughput unification</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/C-IASVz_2FBnKTJAeqH9H1PNUdfRq8RQ2QOr_pA0cYTFOcR7lH8-voMoVsXMMVHTsLHyHI32FUJgNHXNpqOS6cUbDJQPfbymI9nkTUBOFz3P7t9HUspopVAOLvUIGYGsHXm0bG_K" height=112 width=187></td></td>
-
-<td><td>Top: width animation runs on the main thread</td></td>
-
-<td><td>Bottom: transform animation runs on compositor</td></td>
-
-<td><td>When we have animations running on both main thread and compositor we used to report the one with worse throughput regardless. e.g. the transform animation’s throughput is ~98%; the width animation starts 3 seconds after and its throughput is ~10%. In the past we reported 10%. Now when we are not expecting to produce a main frame such as the first 3 seconds, we take the compositor throughput therefore the reported throughput is ~65%.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Tracking the last frame</td></td>
-
-<td><td colspan=2>It’s possible that after a BeginImpl\[Main\]Frame is reported, the tracker is scheduled to terminate. e.g. an impl-frame could have started right before a sequence stops such as the end of a touch scroll. We will completely lose track of it under such circumstances. With Xida’s <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2079134">work</a>, we can now track the last BeginImplFrame and soon the last BeginMainFrame. </td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | March 2020</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/march-2021---fixit-week-new-features-testing-interop-metrics-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/march-2021---fixit-week-new-features-testing-interop-metrics-and-more/index.md
deleted file mode 100644
index d953102c434..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/march-2021---fixit-week-new-features-testing-interop-metrics-and-more/index.md
+++ /dev/null
@@ -1,440 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: march-2021---fixit-week-new-features-testing-interop-metrics-and-more
-title: March 2021 - Fixit week, New features, Testing, Interop, Metrics and more!
----
-
-<table>
-<tr>
-
-<td>March 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: Updates</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>News and headlines</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/8Rx9baQSC1D5OKFFterOr8Ep4YoxqFThALN73pUPewvq4fUaFUVlOksg2JThWYNqD2QU0BRVezKD9fDNXj0MxRN_zt-N7G4vHYsyjkqd35ob51icSH-87sJV-20hBNTPOAPYrrD2w0Ggrg7eVUtIUmR1reIvSKYemlzjfdfzvl4nysCh" height=140 width=139><img alt="image" src="https://lh4.googleusercontent.com/M_WQs-eMjr2z7Vo1B5MnwO02b2XhJRNzBPsaLddW8yBxbwu7AFSBm-tTfR-T1MBMMsT7gy6SQX95J8YEB_IMV3TJobogfhmBZpmgZS19VQ4UwO1Kr2y0pS162qw9jLAiuMnRdNwqV-8OQfbaXlL5jaue5_GBlUhvfyox1n9X-FQUF3Xg" height=153 width=124></td></td>
-
-<td><td>The above pictures show:</td></td>
-
- <td><td>Una’s Chrome blog post: “<a
- href="https://developer.chrome.com/blog/hardware-accelerated-animations/">Updates
- in hardware-accelerated animation capabilities</a>”</td></td>
-
- <td><td><a
- href="https://twitter.com/ChromiumDev/status/1366422289441566736">Tweet</a>
- on Scroll-To...</td></td>
-
-<td><td>Bug status update</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/baJ0Vl-hujPKzdTypC9eeqvk7ifk30XYovJ4uKFZkJakYRVVlj6OKrwwwWKebHate9YPgSail2_yQQla7zP0lkNl0f9uAALZYQGJpDtD0C0iu6rKr6Dd7wsbnIFj8c1VzybSQThgKefFBNFXRcXStkEohFZvUeCdMipFfADVUw7bT97y" height=77 width=140><img alt="image" src="https://lh5.googleusercontent.com/0nTwbFbyafdWtsV8h2di3l5lOqebkNcmCG6OfwwQi6SLLEsSA3dJCt-l3D_KqAn6cUbawHVyx77DHwvlpuzr7MGfv6ZsSiUR41JUbYVS9R5VRzaetVQ3JatAn-jgUfRRzYk91bQYptKWiD6_CC62pzqT-oF2VEvhy4Nmnq3XuIRMQrpy" height=76 width=140></td></td>
-
-<td><td>Our team did an awesome work on bug fixing this sprint...and during perf too!</td></td>
-
-<td><td>This is likely due to our fixit week effort which is proudly introduced in the next chapter...</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Fixit Week!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><a href="http://go/interactions-fixit-2021q1">Overall stats</a></td></td>
-
-<td><td>Our team had a fixit week during Mar 1~5, and the team made tremendous progress!</td></td>
-
-<td><td>Bugs we closed: <a href="https://bugs.chromium.org/u/2341872843/hotlists/Interactions-FixIt-2021Q1?can=1">40</a> including:</td></td>
-
- <td><td>P1s fixed: 4</td></td>
-
- <td><td>P2s fixed: 11</td></td>
-
- <td><td>P3s fixed: 7</td></td>
-
- <td><td>Others (WAIs, dups): 18</td></td>
-
-<td><td>Bugs re-triaged: <a href="https://bugs.chromium.org/u/flackr@chromium.org/hotlists/Interactions-2021-Retriage?can=1">19</a> including:</td></td>
-
- <td><td>Fixed: 2</td></td>
-
- <td><td>Closed: 6</td></td>
-
- <td><td>Assigned to another team: 1</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>De-flake scroll snap tests</td></td>
-
-<td><td>kevers@ focused on deflaking scroll snap tests during fix it week. Here are some common causes of flakes:</td></td>
-
- <td><td>Files containing too many subtests triggering timeouts. We cannot
- always accelerate the scroll timing. The tests have a 6s budget and can take
- 3x longer than expected when machines are under load.</td></td>
-
- <td><td>Incorrectly detecting the end of an animation. Waits on a gesture or
- key event resolve when queued and not when handled. This can result on the
- scroll end being detected before it has even started! To address, we now
- wait for scroll events.</td></td>
-
-<td><td>Outcome:</td></td>
-
- <td><td>Landed 7 CLs</td></td>
-
- <td><td>Removed 14 lines from test expectations.</td></td>
-
- <td><td>Fixed 10 test files</td></td>
-
- <td><td>Closed 8 bugs</td></td>
-
-<td><td>Fix pointer events flaky tests</td></td>
-
-<td><td>liviutinta@’s focused on pointer events tests marked in TestExpectations file:</td></td>
-
- <td><td>Using sendkeys instead of keyDown, keyUp</td></td>
-
- <td><td>Landed 1 <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2737916">CL</a>
- that fixed 4 tests.</td></td>
-
- <td><td>Marked in TestExpectations:</td></td>
-
- <td><td>For <a href="http://crbug.com/893480">crbug.com/893480</a> the
- remaining 8 tests in Test Expectations need implementation keyUp/keyDown
- as it allows for multiple keys pressed at once</td></td>
-
- <td><td>For <a href="http://crbug.com/1140611">crbug.com/1140611</a>
- there’s “Element click intercepted error” thrown from test driver (2
- tests)</td></td>
-
- <td><td>Few web tests flaky because pointermove coalescing was not taken
- into account (1 WIP <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2745276">CL</a>,
- 2 tests, 5 related issues)</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Fixing clusterfuzz crashes</td></td>
-
-<td><td>xidachen@ worked on fixing clusterfuzz crashes:</td></td>
-
- <td><td>They usually have a minimal test case, easy to diagnose</td></td>
-
- <td><td>These are crashes can happen in the real world</td></td>
-
- <td><td>Often times it is due to our coding missing edge cases</td></td>
-
-<td><td>Outcome: Landed 2 CLs and fixed 2 bugs. In additional to that, xidachen@ also closed a few touch-action related bugs.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Animations in display locked subtrees</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/gXn-G235ngNBZqnmVTdwJK5JsmZSu8eeCwhoRJs4TZQoAwU-F2PgGaOZb_uU8zV18Nifvs8SAWH96eny1NaJPWzhoAl3L2SjJ6kXcV9ZHr-OPGNsroy4-2v1UzenxwYZfrAQ0wBI9GGj2VxR-3oiab8F5vtaM0hd0Psp7ll7fWD0RcbW" height=239 width=283></td></td>
-
-<td><td>kevers@ is working on this performance optimization, which effectively “pause” CSS animations/transitions that are not rendered due to content-visibility, while direct queries must still produce correct results.</td></td>
-
-<td><td>The above demo shows that animation events stop firing while content is hidden, which is a direct consequence of not updating hidden animations due to the normal passage of time. Calculations requiring a fresh style update are correctly resolved on demand.</td></td>
-
-<td><td>Composite background-color animation</td></td>
-
-<td><td>xidachen@ fixed a crash which is due to missing repaint. He is also working on two known problems in order to restart finch experiment.</td></td>
-
-<td><td>Scroll to element</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/py8m0A7cqlby60QF-ayhnnAx0D5qNgt5tXjcZch6XaSmea-TKeG4tEscN66ShBCpdiacNSN-mK93HZ0kJEvC4EWD-gPBSd49UjBWh4QkwPkYzK6pQcGXtCZHzNK5ZlvtSGeismWyBhfb4Iy3CDNG3IEk0TFVyqBEGOv6ApprIstxIxp_" height=159 width=283></td></td>
-
-<td><td>flackr@ developed a <a href="https://chrome.google.com/webstore/detail/scroll-to/hjaaolhckkhdkamciipnogbbiafgbcil">scroll-to extension</a></td></td>
-
- <td><td><a href="https://github.com/flackr/scroll-to-extension">Source</a>
- code is available</td></td>
-
- <td><td>Scrolls to selected element</td></td>
-
- <td><td>Rejects <a
- href="https://github.com/WICG/scroll-to-text-fragment/blob/main/EXTENSIONS.md#css-selector-restrictions">restricted
- CSS selectors</a></td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Google Meet FPS optimization</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/lSNmrAN5LzgMhOS2CppDDmbPza5nWwaPmqI0fgEBEblh7q2FbNV5iij-Kt_UkKQp2qOjt3xqEl5NH_rKGePmxJdxYC7jLFxxRZAqfZ2zmK6QxLjhYyHnpQ8QMSIE__2Ywnn1emJB_RXDBZeEHdw82iS2SCogBXfgZH2GR-qWcE9Ep2Qq" height=405 width=283></td></td>
-
-<td><td>zmo@ plumbed minimum tick interval of animations, which requires</td></td>
-
- <td><td><a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2716656">Calculate
- minimum tick interval</a></td></td>
-
- <td><td><a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/2730045">Used
- in tick rate heuristic</a></td></td>
-
-<td><td>After the above change, flackr@ found that meet still wasn’t showing 60fps. More investigation shows that meet had incorrect animation. Specifically 0.6s 3 keyframe animation with steps(18) should be 30fps, but 18 animation-timing-function steps is applied between each pair of keyframes. flackr@ is currently working with meet team to further optimize this.</td></td>
-
-<td><td>Penetrating context menu image selection</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/3WSJTjHaw94sUraj0T8JhdTWDJwtGtJpEijrluAiFSX1fsZCK4RwhgbVYnTxO5sxJu4oRogVdOo-Q9JDnQoM9Zt_taRYYXV2YBK-WUUcDIDiSbmszSq5EY3AGY4r2-zHhqx5VbT3Z8YwinxWir0Rofi5oDy1QUmsdKYe37T2EsI2yEY5" height=215 width=283></td></td>
-
-<td><td>The feature is implemented by benwgold@ where flackr@ is an active reviewer. Specifically, this feature allows right click / long press to find images below targeted element.</td></td>
-
-<td><td>In this <a href="https://output.jsbin.com/rucoyak">demo</a>, an image label element completely covers the image. Without penetrating image selection, one could not save the image without inspecting the page.</td></td>
-
-<td><td>Disable double tap to zoom</td></td>
-
-<td><td>liviutinta@ landed <a href="https://chromium-review.googlesource.com/q/bug:1108987">CLs</a> disabling DTZ for meta viewport tags such as:</td></td>
-
- <td><td>&lt;meta name=”viewport” content=”device-width”&gt;</td></td>
-
- <td><td>&lt;meta name=”viewport” content=”initial-scale=1”&gt; , for any
- initial-scale &gt;=1 we’ll disable DTZ</td></td>
-
- <td><td>&lt;meta name=”viewport” content=”minimum-scale=1”&gt;,
- minimum-scale &gt;=1 implies initial-scale &gt;= 1</td></td>
-
- <td><td>Combinations of the above</td></td>
-
-<td><td>The <a href="https://groups.google.com/a/chromium.org/g/blink-dev/c/dXztlK096rs/m/6DKc6nhcCQAJ">I2S</a> API owners approved, and we have started finch experiment for 50% canary.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Testing</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Move virtual scroll-snap tests</td></td>
-
-<td><td>The problem with virtual/threaded is that it doesn’t guarantee that scroll snap tests run on the compositor. Thus kevers@ moved the tests to threaded-prefer-compositing, which ensures that the composited path is being used. This change exposed that we had limited testing of scroll snap with composited scrolling and temporarily introduced 7 new entries in the TestExpectations file. These failures have now been addressed.</td></td>
-
-<td><td>Automate WPT test using testdriver action API</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/y5VfiIiUaDOm-G9ldk2gNytVwyx9DgTmvVSZZKzqvdkUBQ5JEV5z40t9YfledkhNAgqYpbskH9vTP5VCnryyOJMIRzz0ak45JZmMW29ZedQQGpVYzR7cg8NHxYQfHtJM3J6-C4o9ePXJBXFBszOwpeUxUfvoJh6mH49V_uQwhdBM5Jpe" height=185 width=283></td></td>
-
-<td><td>lanwei@ kept working on automate WPT test and making good progress.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Stability fixes</td></td>
-
-<td><td>kevers@ fixed a problem when running user code (Javascript) that can result in the destruction of an execution context. The solution is to double check if the context is used downstream of script execution.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter VI: Interop fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Sticky interop investigation</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/xCplj7tBIokIzfY3bN1pO4H07CEWAZq9qG8C9p8DmlfYfor-6CGO4h9OdyDZsR03gCf5esw4S1xIsIvYiyLRBcxvS1C7k6zIDFvS_111zX_QJjBHotjN4mBbY_Gj7VMV51LgF9b9OkIw1SU2Tld6sb6IpufwOub1V2YeJK-ShNRd0XPB" height=167 width=283></td></td>
-
-<td><td>flackr@ created <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1185163">meta tracking bug</a> for this. During this sprint, <a href="https://bugs.chromium.org/p/chromium/issues/list?q=commentby%3Aflackr%40chromium.org%20sticky%20closed%3E2021-2-22%20closed%3C2021-3-12&can=1">3 issues</a> were closed. Moreover, a <a href="https://wpt.fyi/results/css/css-position/sticky/position-sticky-scrollIntoView.html?label=experimental&label=master&aligned">WPT test</a> has been landed to track new spec scrollIntoView behavior.</td></td>
-
-<td><td>Fixed falsely overconstrained stick positioning</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/xtsXFqA5IqyV2xz6JWUDk25Ee5dkse6mUKh_5FTcPYpISbkPWErpJR5k3fMnUMI9qnyzgLJSziuxiFSOPImhoGdqX-fZ4NWry2y1Jivg6v_KZ5E75YtqmMTl-vw8OVl7xAa8VJmY7dVCm6VwrsrmLkbG3vK_A-VH1453sQTMChlYha0U" height=137 width=137><img alt="image" src="https://lh4.googleusercontent.com/BG8InXEt7-3mnsMMdOjt8vPJ_Ff8aexfkJ2xiBSV3JryUb501rzf6JUkU2ELO8H0bUHzSU5zYg_gS8FeLzm0DQsjWUr_WlMZKvOJtfhK4O3KmArm4vROemwz6axHO3l66GcIXtbzKtAA_WHOJZYEPPvUQE-BcoIlh7yun3UZUoXyrMbj" height=136 width=136></td></td>
-
-<td><td>flackr@ fixed a stick position <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=841432">bug</a>. In the above demo:</td></td>
-
- <td><td>The left one is the wrong behavior where the bottom constraint is
- ignored.</td></td>
-
- <td><td>The right one shows the correct behavior. Both bottom and top
- constraints are used creating reveal and collapse effect.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Overscroll-behavior propagation</td></td>
-
-<td><td>xidachen@ made some progress towards fixing this <a href="http://crbug.com/954423">bug</a>, which includes</td></td>
-
- <td><td>Found ~15 google internal sites that might break by the incoming
- fix</td></td>
-
- <td><td>Started this <a
- href="https://docs.google.com/document/d/1PGBW3PDWTenS8i6-k6Xsv1_MuKxqEfX8o1jVGmxxnFk/edit#">doc</a>,
- which provided guidance on how to change their sites to avoid
- breakage.</td></td>
-
- <td><td>All google internal sites listed in the doc have made
- changes.</td></td>
-
- <td><td>Unfortunately the percentage of sites that might break is not going
- down (<a
- href="https://uma.googleplex.com/p/chrome/timeline_v2/?sid=29901cc34c7b4b624f5a759bda0b5a34">Beta</a>:
- ~2.2%, <a
- href="https://uma.googleplex.com/p/chrome/timeline_v2/?sid=706cc2310b84fa2bdb3e87b52b1c052b">Stable</a>:
- ~0.5% of page loads)</td></td>
-
-<td><td>Scroll snap behavior with scrollbar arrow keys</td></td>
-
-<td><td>Resolved the scroll snap behavior for interactions with the scrollbar arrow keys during the last sprint cycle for main thread scrolling. Fixed for composited scrolling this sprint.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/VJhePxtBeo6Irdt8t9FxdTl8hvkvHcAAGVyxvmtUeehNqlThCATmCB3WWuLXGGfOP-7rg-4uihVZN1VoosN0Tpbq8Iekx1J55WTrQqZp8J-TeZxDq0U6-Iqo2PcM8zT-EudBCQpYRkjXdqlv78FjI_GilXNHHyy1Iu2yen5ZOhsgoywR" height=97 width=283></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter VII: Metrics</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Finch study: Composite relative keyframes</td></td>
-
-<td><td>kevers@ launched this finch study and collected some meaningful results.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/uyULOys9B0l5Qkk1G8ZDUoqr-ps8pQ1ZpPMkJO4T0S9ipY6aLjCX6IMcuCfceaxBS98cfu3o-Q6OBUUZ0A_owKwozS_ctf0gbXEtUoi3Xru7ghDxCOE4uTYu26aFmclzqbnoh7aLZNAjc-q-kObkIGNXqhTKzRyUyVA1WctLKb8ZPQB0" height=123 width=283></td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/xoghGSmjwTGotF0VxXGa_XGkMHaKNQvIOvSx4CRqVpN900oCWoCYZwmMxbaz7IptN0gLl00CrW0XRgwSbhuOB3PZEjC4n1eDX3OqRybkLOhor4IUKXrFVqsTTyJNjMJmtfPHjIlYGAEtJdgIdluiKurKJJV6DahQdzEaNNQdvAwR1rgl" height=117 width=283></td></td>
-
-<td><td>Finch study: <a href="https://uma.googleplex.com/p/chrome/variations?sid=950bc8883d9b9c8ce6469b5592a5e81a">Scroll prediction</a></td></td>
-
-<td><td>flackr@ is launching this finch study on behave of a Microsoft engineer.</td></td>
-
-<td><td>VisualJitter</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/mT74G-gB6SrpkOE9Psf3G700HUcy0Shav9Q-Z1dFcxJ8XTthGh8iB4p1MWRrcM3KVVG6zm_mEKBR4vMPej_vqBcnp_Qb4RDw9TkRYxLrdNi2yFbva-qai4RJWpwLc9KqVwjee-7UBB06Z7VmNYVo01pASlLvSHqEOKkXkW6feRDIAbtD" height=113 width=283></td></td>
-
-<td><td>AverageLagPresentation</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/lcCu72bAUBMq3KtAO5_46zwl8GDtC5R9RjnOypXBrRzH-c5iQWzrSbnCnBC9EL-rM4JT02kNe_cCzWOlAHTPiJ2CIM4sbq0XTCzwanEt5PjQjXTndj89sdexYXYLd1I4-EwXg6UVbzlLyD3CO-ksuVCDLhfLvCU7QSodgt4ZSm4O18BV" height=113 width=283></td></td>
-
-<td><td>Legend (f=# frames): -5ms 0.375f 0.5f 0.625f 1.217ms 3.3ms 5.383ms</td></td>
-
-<td><td>The data of “VisualJitter” suggests that more prediction means more jitter. The data of “AverageLagPresentation” suggests more prediction increases lag.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Smoothness Metric</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/MKJsf1GYBhT0doAMEpwkenRs76RjwpmXg7qR50gqFH7ntVCI6OUJ3qLoVl_oLfpZ-kl9nN3gMprxubQ4GWQHSvfg_wCAAZ-l8Vfb_Np9HcdrEXuKa-WhcDmyxEy1Gm71f-gGyIvZV6xOFfB1jSrHXeHRxQX8fhlpGN6miqwvOrAqw2fc" height=143 width=283></td></td>
-
-<td><td>lanwei@ explored in the smoothness metric field and did some data analysis.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter VIII: à la carte</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>PointerEvent spec reviews</td></td>
-
-<td><td>mustaq@ has almost done reviewing two significant changes from the external spec editor:</td></td>
-
- <td><td><a
- href="https://github.com/w3c/pointerevents/pull/349">Reword/expand
- touch-action definition</a></td></td>
-
- <td><td>Added direct suggestions to clarify that “touch-action:
- manipulation” excludes double-tap zoom.</td></td>
-
- <td><td><a href="https://github.com/w3c/pointerevents/pull/350">Major
- refactoring: refer to “direct manipulation” rather than
- “touch”</a></td></td>
-
- <td><td>A long and tricky edit to officially include (some) pen pointers
- in touch-action.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | March 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/may-2019/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/may-2019/index.md
deleted file mode 100644
index bbd6cc932b8..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/may-2019/index.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: may-2019
-title: May 2019
----
-
-<table>
-<tr>
-
-<td>May 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-<td><img alt="image" src="https://lh5.googleusercontent.com/y55oEKmeWfBAk_jdj6Q_izzXpBOZT6wuau4DNg6VPlbK-sThHRNyJx-OLWmLi11KVTyFORLWHzUEFaMdOEizHaMLLCyEd60zW6RyGpQP56AVWVuvWjkRQJk6_yvWAC_LMfmW84mr" height=308 width=532></td>
-
-<td>The slight decrease in 'interface' from Chrome 75 to 76 is due to newly added tests</td>
-
-<td>Web Animations, road to shipping</td>
-
-<td>Our investment in interop work for Web Animations continues to produce good results, largely thanks to hard work by Kevin (kevers@). Over the last two Chrome versions our pass rate for the <a href="https://github.com/web-platform-tests/wpt/tree/master/web-animations">Web Platform Tests</a> has increased by 45% (absolute) for the timing-model tests and a massive 70% (absolute) for the interface tests! Improvements like these allow us to continue to ship more of Web Animations - recently we shipped <a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/lTYK1HT47Qk/hmwmGm1ZBAAJ">Animation.updatePlaybackRate</a> and <a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/Gstf0GA7cbg/711ymCKKAAAJ">Animation.pending</a>.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Code Health</td></td>
-
-<td><td>Rob (flackr@) has been focused on improving the composited animations code in the new <a href="http://crbug.com/836884">post-BGPT world</a>. This sprint he landed a series of patches (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1611762">1</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1609672">2</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1610304">3</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1461341">4</a>) to eliminate animation specific ElementId tracking in LayerTree. This simplification makes the architecture easier to understand, improves CPU usage and reduces memory usage - a triple win!</td></td>
-
-<td><td>Scroll Snap</td></td>
-
-<td><td>Scroll Snap is continuing to gain traction, with AirBnB being the latest partner to <a href="http://crbug.com/920482#c9">start using the feature</a> and Firefox <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1312165#c6">continuing to implement</a> the new spec. On our side we have shifted into supporting the product: Majid (majidvp@) has been busy triaging bugs, addressing partner requests, and polishing the code.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><a href="https://uma.googleplex.com/p/chrome/histograms?endDate=20190515&dayCount=7&histograms=Blink.Animation.CompositedAnimationFailureReason&fixupData=true&showMax=true&filters=isofficial%2CEQ%2CTrue&implicitFilters=isofficial"><img alt="image" src="https://lh6.googleusercontent.com/IUKoi9dwyyJhEUdaoyDeGdtFoKLI_WO1j-Bkzk1s7RxSaP9ZZYTk6ugL1KHylCTX2IE5K6Vc8zvKUpKocBFDwF48OQJatYnjlXsJSSukICRCRvLKb6q2vVaHw_SM40RBFyXQDBtm" height=113.00000000000003 width=283></a></td></td>
-
-<td><td>Understanding performance better</td></td>
-
-<td><td>Stephen (smcgruer@) landed a new <a href="https://uma.googleplex.com/p/chrome/histograms/?endDate=20190519&dayCount=7&histograms=Blink.Animation.CompositedAnimationFailureReason&fixupData=true&showMax=true&filters=isofficial%2CEQ%2CTrue&implicitFilters=isofficial">UMA metric</a> this sprint to track why animations fail to run on the fast path. This allows the team to better understand where effort is needed to speed up existing animations on the web - vital for smoother user experiences.</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/z-ajU372TxKnGgMOwOSQa30PmFdlpv-ZAWn_gZBkcvv91oDDyy9-Bl3W3t3Wz76F7OXc-VG3wxCP9PjyxClhdVKJ_fju9h25ymlvF0X3iSQxTQNEvzGHRYOqClEi9F-tWHW2zBrp" height=237 width=203></td></td>
-
-<td><td>Smoothly animating Paint Worklets</td></td>
-
-<td><td>One of the key goals of the <a href="https://docs.google.com/document/d/1USTH2Vd4D2tALsvZvy4B2aWotKWjkCYP5m0g7b90RAU/edit?ts=5bb772e1#heading=h.2zu1g67jbavu">Off-Thread PaintWorklet</a> project is to enable smoothly animating Paint Worklets even when the main thread is busy. Xida (xidachen@) has been working on a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1601334">prototype</a> of the Animation integration and this sprint was able to show smoothly animating, raster inducing (!) Paint Worklets even as the main thread janked.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><img alt="image" src="https://lh6.googleusercontent.com/sRxCDjOAzL3r8SXmttXLNpN6Qv2eHz7ELPwsaSWGcNBfhPr-lYE0vfmMGuUSQh2O6l4vCBAPSKukS8vr5ErGy8AdZLMFNnBmBDhDUHyAXNQCa6ct9JHPukEztHaoy-SOjHR4uFRU" height=389 width=570></td>
-
-<td>Animation Worklet - Pointer Events proof of concept</td>
-
-<td>This sprint, Majid (majidvp@) created <a href="https://majido.github.io/houdini-samples/animation-worklet/touch-input/drag.html">a prototype demo</a> showing the power of off-thread input events combined with Animation Worklet. The ability to produce rich interactive effects which can be performance isolated from the main thread is very exciting, and we are continuing to invest in producing a spec for <a href="https://discourse.wicg.io/t/proposal-exposing-input-events-to-worker-threads">event delegation to workers/worklets</a>.</td>
-
-<td>In other AnimationWorklet news, this sprint Jordan (jortaylo@microsoft.com) began <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1568315">landing support</a> to expose the full <a href="https://drafts.csswg.org/web-animations-1/#the-animationeffect-interface">AnimationEffect</a> interface inside the worklet. This is exciting both in terms of giving developers more power as well as welcoming a new contributor to the team!</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | May 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/may-2021---new-features-testing-stability-fixes-interop-fixes-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/may-2021---new-features-testing-stability-fixes-interop-fixes-and-more/index.md
deleted file mode 100644
index 61173c84c30..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/may-2021---new-features-testing-stability-fixes-interop-fixes-and-more/index.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: may-2021---new-features-testing-stability-fixes-interop-fixes-and-more
-title: May 2021 - New features, Testing, Stability fixes, Interop fixes and more!
----
-
-<table>
-<tr>
-
-<td>May 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll Timeline Documentation</td></td>
-
-<td><td>kevers@ started a <a href="https://docs.google.com/document/d/1AyhFFWKuevKfKQU9uRKMMVMbCKdAwuEPmSBBghbhLFE/edit">doc</a> for I2S and devrel. The doc provides skeleton examples that highlights the use cases of scroll timelines and demonstrate the API.</td></td>
-
- <td><td>Parallax scrolling (from polyfill demo)</td></td>
-
- <td><td>Animating elements as they transition into or out of the viewport
- (from CSSWG issue)</td></td>
-
- <td><td>Auto-resizing header (bram.us)</td></td>
-
- <td><td>Scrollable picture story, which makes use of paint
- worklets.</td></td>
-
-<td><td>Populating Touch click/contextmenu pointer id and pointer type</td></td>
-
-<td><td>liviutinta@: click/contextmenu event from touch is triggered from GestureManager and there was no way to map a GestureEvents sequence to the corresponding PointerEvents sequence in order to obtain the pointerId associated to the PointerEvents sequence. The solution was to populate the unique touch event id of the first gesture in the GestureEvents sequence as the primary unique touch event id for all the GestureEvents in the sequence. This primary unique touch event id is then mapped to the unique touch event id of the pointerdown pointer event. When handling pointerdown, PointerEventManager would notify GestureManager about pointerdown’s unique touch event id and its pointer id, and in turn GestureManager would keep track of the association until the corresponding GestureEvent (for click or contextmenu) would be handled in order to populate the pointerId of the triggered click/contextmenu event.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Testing</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll-snap: Deflake tests</td></td>
-
-<td><td>kevers@ deflakes a set of scroll-snap tests:</td></td>
-
- <td><td>touch-scrolling-on-root-scrollbar-thumb: The problem is scroll
- gesture before ready and assert right after gesture. The solution is to use
- waitForCompositorCommit and scroll promise.</td></td>
-
- <td><td>scrollend-event-fired-to-\*: The problems with these tests are
- scroll gesture before ready, no cleanup and logic errors in listeners. The
- fix is to use waitForCompositorCommit, add cleanup and use scroll
- promise.</td></td>
-
- <td><td>fractional-scroll-height-chaining: The problem here is scroll
- gesture before ready, non-deterministic mouse position and rAF based wait.
- The solution is to use waitForCompositorCommit, mouseClickOn and
- waitForScrollEnd.</td></td>
-
- <td><td>mousewheel-scroll: The problem is non-deterministic mouse position
- and rAF based wait. The solution is to use mouseMove and
- waitForScrollEnd.</td></td>
-
-<td><td>Fix scroll-unification tests</td></td>
-
-<td><td>kevers@ also fixes some tests with scroll-unification enabled.</td></td>
-
- <td><td>scrollbar-drag-thumb-with-large-content: the problem is scroll
- gesture before ready, and the solution is to use
- waitForCompositorCommit.</td></td>
-
- <td><td>scrollbar-added-during-drag: The problem is scroll gesture before
- ready and single rAF before asserts. The solution is to use
- waitForCompositorCommit and scroll promise.</td></td>
-
-<td><td>Fix single-thread mode with scroll-unification</td></td>
-
-<td><td>skobes@ fixed scheduling in single-thread mode, which is the default mode for web tests.</td></td>
-
- <td><td>SetNeedsAnimationInput wasn't actually scheduling the animation,
- which caused tests with scroll gestures and scroll animations to
- hang</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter III: Stability fixes</td></td>
-
-<td><td><table></td></td>
-<td><td><tr></td></td>
-
-<td><td><td>Fix numeric overflow in CompositorKeyframeModel</td></td></td>
-
-<td><td><td>kevers@ fixes a numeric overflow problem. The root cause is that AnimationTimeDelta is backed by a double whereas TimeDelta backed by 64-bit signed int. Using unsafe conversion from AnimationTimeDelta to TimeDelta, which can result in a numeric overflow.</td></td></td>
-
-<td><td><td>The solution is to Update CheckCanStartAnimationOnCompositor to reject compositing an animation if currentTime is too large. Advancing current time by a few hundred years is just fine though.</td></td></td>
-
-<td><td><td>SVG smil animation in throughput metrics</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh6.googleusercontent.com/iZk5QFsOzBhO9kf5qQwxRDo_4OgpecDuod7BwMzWZQ5pwFiu9z9n1ef-O8W-7WhKOeHE2iT6tjGsidtKQ3XZ68D4TnTWojdQBZgIijpbIWMrQLuLninU8DQjaL7aoeDifRekLVeHgQ" height=158 width=276></td></td></td>
-
-<td><td><td>Before</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh4.googleusercontent.com/gMEwHQQ97x0Jlsqwi66w_eF7AeU0yUjaSZrXPwrdZsYVYOdZ7nx2-98l2WxoWgAr1hJu5B4DCcz8-c7X2-kRJ7caeUbe1-GYGtJ0JTfAC-xOZOJMwskGygBK3VXSVV9kntF-O8lkSw" height=156 width=277></td></td></td>
-
-<td><td><td>After</td></td></td>
-
-<td><td><td>xidachen@ <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2863204">fixed</a> an issue where SVG smil animation is not counted as main thread animation in the throughput metrics.</td></td></td>
-
-<td><td><td>The above demo shows that before the fix, there is no sample detected in Graphics.Smoothness.PercentDroppedFrames.MainThreadAnimations, while it is detected after the fix.</td></td></td>
-
-<td><td></tr></td></td>
-<td><td></table></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Interop fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>flackr@ <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2892623">fixed</a> the metrics for counting overscroll-behavior potential breakage.</td></td>
-
- <td><td>Before: we will hit a UMA recording whenever the overscroll-behavior
- property is different comparing the html and body element.</td></td>
-
- <td><td>After: we’d hit a UMA recording only if the body is the viewport
- defining element, and that the overscroll-behavior property is different
- comparing the html and body element.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Bug Updates</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/MHKcz_eBTvaoEMvqtpGDxweELZwCGAEm7xdV4D89dz-1T_asGIKvFg2CL6O7ILhfZ_g6I4KFxpy-nes3cVhiFfAKGgxiQNsPF6lXQ8NOAGO9JjUrGSnuKigT25helY0xJ-PJSA3S-g" height=150 width=273> <img alt="image" src="https://lh6.googleusercontent.com/I7aNfDvFvhYarIPRGEYMVMSkFFNB8yPVjHStk4q9AeYvyrh6TolUXxSAAFZPsYrqHEtwBNvMRwk7a_sbFpg8ky_gGcaUn8jKxymnneXvxmi5UGPZCxSBh_ealFjDY-73bE5RXlb6mA" height=150 width=270></td></td>
-
-<td><td>Our team closed fewer bugs this sprint, but we did get a <a href="https://youtu.be/m0JrspsaVDk?t=1779">chance</a> to <a href="https://youtu.be/VrEP7SPfQVM?list=PL9ioqAuyl6ULbse3njxmvJgJArp_-pKxY&t=3208">have</a> a <a href="https://youtu.be/VrEP7SPfQVM?list=PL9ioqAuyl6ULbse3njxmvJgJArp_-pKxY&t=3370">bunch</a> of <a href="https://youtu.be/m0JrspsaVDk?t=78">great</a> <a href="https://youtu.be/m0JrspsaVDk?t=201">conversations</a> at Blinkon... The rate of incoming bugs was relatively consistent.</td></td>
-
- <td><td>Xida Chen <a
- href="https://youtu.be/VrEP7SPfQVM?list=PL9ioqAuyl6ULbse3njxmvJgJArp_-pKxY&t=3208">Composite
- background-color animation</a></td></td>
-
- <td><td>Jordan Taylor: <a
- href="https://youtu.be/VrEP7SPfQVM?list=PL9ioqAuyl6ULbse3njxmvJgJArp_-pKxY&t=3370">Scroll
- Timelines</a></td></td>
-
- <td><td>Liviu Tinta: <a href="https://youtu.be/m0JrspsaVDk?t=78">Disable
- Double Tap to Zoom</a></td></td>
-
- <td><td>Rob Flack: <a href="https://youtu.be/m0JrspsaVDk?t=201">Scroll To
- \*</a></td></td>
-
- <td><td>Liviu Tinta: <a
- href="https://youtu.be/m0JrspsaVDk?t=1779">click/auxclick/contextmentu as
- PointerEvents</a></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | May 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/nov-dec-2019---blinkon-scrollsnap-lottie-hittesting-virtualscroller-websharedlibrary-wpt-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/nov-dec-2019---blinkon-scrollsnap-lottie-hittesting-virtualscroller-websharedlibrary-wpt-and-more/index.md
deleted file mode 100644
index 6988127edfd..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/nov-dec-2019---blinkon-scrollsnap-lottie-hittesting-virtualscroller-websharedlibrary-wpt-and-more/index.md
+++ /dev/null
@@ -1,116 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: nov-dec-2019---blinkon-scrollsnap-lottie-hittesting-virtualscroller-websharedlibrary-wpt-and-more
-title: Nov & Dec 2019
----
-
-<table>
-<tr>
-
-<td>Nov & Dec 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh4.googleusercontent.com/DWJAD7EpLKH2Ac19IePi2JmkPHgV1fsYia0LGCZ3mxpEGU6fJCY2k-1XInFTZj0Whh032Fdw-dIoCDEV0EDs45kwIWlsc2jsfZwt8LXPrRfFMfQZMs_oN6pw5TmeAfou7y53qGgS" height=253 width=270><img alt="image" src="https://lh6.googleusercontent.com/vK6GwgfvzXmjGedJa8KQ6pEW_UmVi7hYNjsk5h1ndge7kIp_oUwZhktXsLxjAtfGL2bpSWdhzSvQBeOgc6vs7Z92V0GqpEdF8zsaSZzVWaY8mumxS9Ldh48MgP_iRhMnHkCiBVAv" height=255 width=312></td>
-
-<td>Left: the snapped element (white cat) is not preserved after layout changes.</td>
-
-<td>Right: the resizing triggers re-snap to preserve the snapped element.</td>
-
-<td>The Pursuit of Snappyness</td>
-
-<td>Kaan(alsan@), our fantastic intern, made the web more appealing with the “snap after relayout” <a href="https://docs.google.com/presentation/d/1WUa6nFfkzXm2O1V70hr49vPFP4TOAbUh2q8fppkybJs/edit?usp=sharing">project</a>. Previously content or layout changes (e.g. adding, moving, deleting, resizing) did not pay attention to the content’s snap setting. With Kaan’s <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=866127">changes</a> landing in Chrome 81, scroll positions automatically update to keep snapped objects in the correct position. Galleries of kittens never looked so good!</td>
-
-<td>Another cool use case unlocked by this work is the “Scroll By Clicking” effect shown below:</td>
-
-<td><img alt="image" src="https://lh6.googleusercontent.com/fRyKl_faF-Bgdceo3OYErRenGuZzKBBs2n2xMKss4-7vRnDP5wvm7Gae0DmktSqdbx5fGwUT_j-ltLPIBeFtDu2NqsN4qr4Ns8p6QI0bhzHND0tFkR7n91LC-Al27tl4J-W96en7" height=233 width=297><img alt="image" src="https://lh3.googleusercontent.com/1nPkrBOk1Dm9i5mkPLt_jEk6uTF7Jhuo_7qKj1cRWZe8xpc9IPTmN8bXuzhSzGUubGyV3QhHTM-UY6-71fRyZnc_MY63zZjkwEdmhX72tBlB1eP6B1rC168XLrdwDA0cuhOxdMm8" height=237 width=280></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/PZ4-_ZrbNzstAkLHnjWZPkwXGl4b0FZthhuQ8dgR0DVzOdfmXxez2SF3m4GLNN1S_Q2Latry8UZouikJFv3ZW9PUbJQXWjdK0TlbWyNJ3bfC3RvnocOZx3GffHgz44fjh43Esxyj" height=72 width=280></td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/S-nAodiRsv_xyxIngFbN86HJR-7JaCZdX7wzG1olre_TUBLKjKk5np7aJYfrwIltVXB7H8LcLVw1Z7rWEwuzSpKNeHX7C1yHoUqIXNe0MoUVnxmCllgfVHLiAnASux1dNQx89iRp" height=83 width=280></td></td>
-
-<td><td>Lottie Demo - now more robust</td></td>
-
-<td><td>Rob’s lottie demo exposed a number of PaintWorklet bugs, such as flashing at the end of the animation, incorrect background color, and flaws in high-dpi rendering (top gif). This month Rob (flackr@) and Xida(xidachen@) fixed some issues (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1841530">high-dpi</a>, <a href="https://github.com/flackr/lottie-web/commit/8cea6ff27b03e6125c00e85d6ff15abff15c6e75">clipping</a>, <a href="https://github.com/flackr/lottie-web/commit/2aee64a69fb74c3c26f7435db9e0a804608e77ae">flashing</a>) in both the demo and the implementation to make it more appealing (bottom gif)!</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/SLQW5VgfbkGLfzMohnaHu0O_51WGPoMDlpIoX-Kzlw0e3kxairHQgkfLkwVtk0w7j6KW9ifGGc3WptW8b328XDsFwou9bWwOKMzbjbetT3OR5ofIG7MGjiQUunL2xPJmuHEQ0ZPD" height=176 width=278></td></td>
-
-<td><td>Multi-Process Hit Testing Complete</td></td>
-
-<td><td>Yi (yigu@) drove the viz hit testing v2 project to completion this month. It is now fully launched on all platforms! The new event targeting correctly targets events up to 6 times faster for site isolated configurations on <a href="https://docs.google.com/document/d/1AE02TKBg7NG63SiUbU-EiqlHgqsZY1tb3-Z4L0AZCSk/edit">Windows</a> thanks to the 32% more synchronous event targeting. </td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/NngtlrupseOCRsIOOr-Nn-UZbMX-MIdSiTk_Agpt7cFv-Qd5ieUwlIJXuZ482e_SOeWPip3uFwx6J-WIJ0XStDp4IQXxUhLZ9O6D59k2Q0oFphXTkbGV8AH5-TbAw0Xy2IHnV6jN" height=281 width=280></td></td>
-
-<td><td>Virtual Scroller</td></td>
-
-<td><td>Rob made solid progress on the exploration for the new web platform feature - virtual scroller control. He moved chromium virtual-scroller to github <a href="https://github.com/flackr/virtual-scroller">library</a>, added display: none fallback when rendersubtree is not supported and created a nice <a href="https://flackr.github.io/virtual-scroller/demo/">demo</a> with synthetic content and <a href="https://flackr.github.io/virtual-scroller/demo/?test=true">test</a> use cases.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/etS54zUr6juIFudSJaZ_4J0Tlp6Y9qxps7IENSmYxBBNx-5vCFMh9UugkPd9OZFpbvVMNM3seoFxoXe-JUoXQDpO_xfKT-Mu9Cw6FbNgCcBeFm9cpS4w2wqMme6pvg89s92sxvrJ" height=299 width=278></td></td>
-
-<td><td>Port interpolation test to WPT</td></td>
-
-<td><td>Our test suite for interpolated values does not work in other browsers. Since we deeply care about interop issues, we have ported as many tests as possible (<a href="https://docs.google.com/spreadsheets/d/1EtUV2IycJTgQSrtxfH0uQ8aUUbhz41-zhYj0tdCrT6A/edit#gid=0">121</a> to be exact!) to wpt. This work helped us to identify 17 new interop bugs in Chrome and Firefox. Thanks to Stephen (smcgruer@), Xida and Hao (haozhes@) for their effort to make this happen! </td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Animations team at BlinkOn 11</td></td>
-
-<td><td colspan=2>The animations team presented 3 breakout sessions and 4 lighting talks at BlinkOn 11. See below for details.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/mBS6Z_-mXCbDu_mhXaB-ZVvoi3yODetHPxtuNJmgXZrhohvNHMXdqK7rqAUNk9k3cUH0j7dQ7cW_IBrcwhE-A--NIIExJHzFEs0dlqrbCyW3OzUAu_Wk4o0tjb6_qKWURl8kQOvj" height=145 width=280></td></td>
-
-<td><td>Web Shared Library</td></td>
-
-<td><td>Web Shared Libraries attempts to improve website loading by sharing cache across sites. Rob’s presentation (<a href="https://docs.google.com/presentation/d/1CTC_BLpBqLf7B82b1ytIm0l84SjK45bk7UaCyRpyu5A/edit#slide=id.p">slides</a>, <a href="https://www.youtube.com/watch?v=cBY3ZcHifXw&list=PL9ioqAuyl6UI6MmaMnRWHl2jHzflPcmA6&index=23&t=0s">video</a>) at BlinkOn, kicked off a lot of constructive feedback. Gene (girard@) and Rob wrote up a <a href="https://docs.google.com/document/d/1lQykm9HgzkPlaKXwpQ9vNc3m2Eq2hF4TY-Vup5wg4qg/edit#heading=h.83t0eq3angjs">discussion pape</a>r capturing the opportunities and challenges involved, along with techniques to address the various concerns and metrics to evaluate impact.</td></td>
-
-<td><td> <img alt="image" src="https://lh6.googleusercontent.com/1CFPALcatns9GWaoO89Tu2dvl1FraGY1RckXruqf3CaHW8AdyQUqsl47f7I3qWY3h2skZLRZxP2-HE0fiUUrlAgxt34acepBhzpW_yHvstWrlWR1QVChkfp5HuXUUr3PrmAKeKcU" height=200 width=262></td></td>
-
-<td><td>Scroll-linked Animation</td></td>
-
-<td><td>Yi and Majid (majidvp@) presented (<a href="https://docs.google.com/presentation/d/12UNGCTJybiL5gEMAGY2f-05WxXARvNz4k-RS02qgNuU/edit?usp=sharing">slides</a>, <a href="https://www.youtube.com/watch?v=nolDnHb_Sjo&list=PL9ioqAuyl6UI6MmaMnRWHl2jHzflPcmA6&index=4">video</a>) the current design for Scroll-linked Animation at BlinkOn. The updated design incorporates feedback on our origin trial from the AMP team. There was a F2F sync between Microsoft and Google to <a href="https://docs.google.com/spreadsheets/d/1tGJeicFqgRXK8MMIqscdwEiIPQN--1aQJ5EwQZ2nXzE/edit?usp=sharing">coordinate</a> future work and find solutions for outstanding spec <a href="https://github.com/w3c/csswg-drafts/issues/2066#issuecomment-557630869">issues</a>.</td></td>
-
-<td><td>Rob also attached Scroll Timeline into the Paint Worklet Lottie demo for a cool lighting talk (<a href="https://docs.google.com/presentation/d/124zcoxveCQyXVB4-HWCXhQptrnaHDE9JIXyQ8B1N4ig/edit#slide=id.g742aacb70c_9_789">slides</a>, <a href="https://youtu.be/dJmWLQn9g2A?list=PL9ioqAuyl6UI6MmaMnRWHl2jHzflPcmA6&t=423">video</a>)!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Last but not least</td>
-
-<td>There were several other topics that the animations team presented at BlinkOn. Rob drove a discussion about measuring real world throughput and latency. The team gave several project updates during the Lighting Talks session including Off-thread PaintWorklet (<a href="https://docs.google.com/presentation/d/124zcoxveCQyXVB4-HWCXhQptrnaHDE9JIXyQ8B1N4ig/edit#slide=id.g70a5f3c77e_102_92">slides</a>, <a href="https://youtu.be/FOCHCuGA_MA?list=PL9ioqAuyl6UI6MmaMnRWHl2jHzflPcmA6&t=886">video</a>), Contribute to WPT (<a href="https://docs.google.com/presentation/d/124zcoxveCQyXVB4-HWCXhQptrnaHDE9JIXyQ8B1N4ig/edit#slide=id.g70a5f3c77e_102_0">slides</a>, <a href="https://youtu.be/FOCHCuGA_MA?list=PL9ioqAuyl6UI6MmaMnRWHl2jHzflPcmA6&t=1021">video</a>), Throughput Metrics (<a href="https://docs.google.com/presentation/d/124zcoxveCQyXVB4-HWCXhQptrnaHDE9JIXyQ8B1N4ig/edit#slide=id.g742aacb70c_289_204">slides</a>, <a href="https://youtu.be/FOCHCuGA_MA?list=PL9ioqAuyl6UI6MmaMnRWHl2jHzflPcmA6&t=1442">video</a>) and GroupEffect (<a href="https://docs.google.com/presentation/d/124zcoxveCQyXVB4-HWCXhQptrnaHDE9JIXyQ8B1N4ig/edit#slide=id.g742aacb70c_9_417">slides</a>, <a href="https://www.youtube.com/watch?v=z3EjkpvEWC4&feature=youtu.be&list=PL9ioqAuyl6UI6MmaMnRWHl2jHzflPcmA6&t=1455">video</a>).</td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | Nov & Dec 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/november-2021-highlights/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/november-2021-highlights/index.md
deleted file mode 100644
index 1c87b4a6d7a..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/november-2021-highlights/index.md
+++ /dev/null
@@ -1,150 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: november-2021-highlights
-title: November 2021 highlights
----
-
-<table>
-<tr>
-
-<td>November 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td colspan=2>Resolved major spec issues with user activation</td></td>
-
-<td><td colspan=2>The HTML definition for “activation triggering events” has been incomplete since its inception, and that led to <a href="https://docs.google.com/spreadsheets/d/1DGXjhQ6D3yZXIePOMo0dsd2agz0t5W7rYH1NwJ-QGJo/edit?usp=sharing">significant inconsistencies</a> between browsers and redundancies in other specs that relied on HTML’s wording (e.g. in <a href="https://github.com/w3c/pointerlock/pull/70">PointerLock</a>).</td></td>
-
-<td><td colspan=2>mustaq@ recently resolved the long-standing <a href="https://github.com/whatwg/html/issues/3849">HTML issue</a> by securing consensus on removing high-level events, adding missing keyboard events, and fine-tuning all low-level events.</td></td>
-
-<td><td colspan=2><table></td></td>
-<td><td colspan=2><tr></td></td>
-
-<td><td colspan=2><td> Before</td></td></td>
-
-<td><td colspan=2><td>After</td></td></td>
-
-<td><td colspan=2></tr></td></td>
-<td><td colspan=2><tr></td></td>
-
-<td><td colspan=2><td><img alt="image" src="https://lh6.googleusercontent.com/9_UKpmUyXhKiMJNiMe1lmziVqYp1nMnyR3KdQI0e_d6Tj0eVKxD_fl6A8cIqVEUwADu8HatizK53sRGk865RY7YfjVtzBesDDZrhhIWlUiwHq5vDRrdFNriqz8wTV5RapstzSiXkk0rnINrw6aGXyov4KcwTOtFC7cVdCSskzy-BX6da" height=185 width=234></td></td></td>
-
-<td><td colspan=2><td><img alt="image" src="https://lh3.googleusercontent.com/7QumKLInjQCBAW1rqLpYRWK3qmqNYlZoshE9QdoB-ngXO3npKJFmSP8VchRBcnLZURYCytTtX2EQWil3Gurp7M3TGhtJ1QdI3wZNYiZNu4E9oXlaPWEb-qaZEv9_EnSxoDUXqtL4s7_hmzGSUdAIj8Ei_hNtWYbq1PNCNvp5FA0YSU_H" height=118 width=324.82328482328484></td></td></td>
-
-<td><td colspan=2></tr></td></td>
-<td><td colspan=2></table></td></td>
-
-<td><td colspan=2>The HTML spec is now clear and precise, and it is supported by 5 automated web-platform-tests (html/user-activation/<a href="https://github.com/web-platform-tests/wpt/tree/master/html/user-activation">activation-trigger-\*</a>). </td></td>
-
-<td><td colspan=2>This HTML update immediately led to a <a href="https://github.com/w3c/pointerlock/pull/76">cleanup</a> in the PointerLock spec. Any other spec that had to patch over the past HTML gaps can now be fixed too.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Scripted smooth scroll adjustments</td></td>
-
-<td><td colspan=2>skobes@ has landed a patch that fixes scripted smooth scroll adjustments. A user smooth scroll now continues with adjustment when interrupted by an instant programmatic scroll. <a href="https://crbug.com/1264266">crbug/1264266</a></td></td>
-
-<td><td colspan=2><table></td></td>
-<td><td colspan=2><tr></td></td>
-
-<td><td colspan=2><td>Before (Text is jumpy) </td></td></td>
-
-<td><td colspan=2><td>After (Text scrolls smoothly)</td></td></td>
-
-<td><td colspan=2></tr></td></td>
-<td><td colspan=2><tr></td></td>
-
-<td><td colspan=2><td><img alt="image" src="https://lh3.googleusercontent.com/142qKkDoajLbtfL7yzPbGqEZN8pAlIWWepdc8Qqf1c208pStk9I_1T45qniqs5FQOgBVhKSqxC_b9PLLW1GZIwmFijBGNIgCNc4POaH46e3wNBoeZaXu7PXnUlB1i3RtSCvxfUVxKOUhGiKk0Gb019QxHLBarfq0BQh5DtJsgaWaN9Ky" height=257 width=274></td></td></td>
-
-<td><td colspan=2><td><img alt="image" src="https://lh6.googleusercontent.com/3fc4T-On-cu71DKzwB7nhKkEKv13d3KauaMyZ6u87W85J0vihxiYTasCBUY_tJJzyjvIjQyruC4hW4DU4phu93HEHYNFHaxgYYmebC0JDHxgnLMmlXEubR_yhLyjkyhymob2h8n6CbY-YMM4da4N7SomFBEXiCItXoceFsk30WUECQt7" height=257 width=274></td></td></td>
-
-<td><td colspan=2></tr></td></td>
-<td><td colspan=2></table></td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Main thread scrolling reasons</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh3.googleusercontent.com/eQgY9T3BlD0XhA5IFVBydHJTeyPH_KGqkUDgk0OM0wJzgwMZ1F95a5vxvqKep4XCZX3Me0Ttl1ADeo-PAvrVMfiSREfDPFtbb-PjPPSSX8fy56kPS5-LcWnbsN97Y_JwKGh27FjNuK4PnlZ1Y83myXTdkTYueB005g07du6VYfKCagVx" height=287 width=576></td></td>
-
-<td><td colspan=2>skobes@ has landed a patch that changes reporting "main thread scrolling reasons" in a way that makes sense post <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=476553">Scroll Unification</a>. <a href="http://crbug.com/1082590">crbug/1082590</a></td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td rowspan=2>Fix Flaky animation tests</td></td>
-
-<td><td rowspan=2>Kevers addressed a number of flaky animation tests. In one batch of tests, the underlying problem was actually an infrastructure failure since results from one test were being compared with expectations for a different test. Nonetheless, some of these non-WPT tests lacked equivalent test coverage in WPT, and the failures presented a golden opportunity to migrate them to WPT. As part of the migration effort, tests were updated to make full use of the web-animations API.</td></td>
-
-<td><td rowspan=2><a href="https://chromium-review.googlesource.com/c/chromium/src/+/3269980">CL 1</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3270068">CL 2</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3272694">CL 3</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3273014">CL 4</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3275545">CL 5</a></td></td>
-
-<td><td rowspan=2>Numerical precision reared its ugly head again. </td></td>
-
-<td><td rowspan=2><img alt="image" src="https://lh5.googleusercontent.com/_IwuC55nDhhuQW4SRNqh14TCkIAWlReVyej8SdzZkjy3w4yGXSCtgnFKSv0v3KW8aBY9sEuN2mGfkCbRc2nNt_bkipKrsEahHare2VVHPr-17y1BPBmKdQjwbWfiCNEFUvJLGb0dFfqLJq-c859RNCYaJzd1zt6Hiuli604Rz0oHCb7I" height=17 width=279></td></td>
-
-<td><td rowspan=2>Fortunately, the web-animations-1 spec is clear on the required precision for animation timing, and this was an easy fix by simply changing to the already supported assert_times_equal, which has the specced 1 microsecond of slack (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3270992">CL</a>).</td></td>
-
-<td><td>Animation Construction</td></td>
-
-<td><td>Kevers resolved a crash on Android that was triggered by calling an animation constructor with a missing or destroyed execution context. It should be perfectly fine to trigger an animation in such cases. We simply can’t run script (e.g. event handlers or promise resolution code). The issue was fixed by conditionally setting the execution context (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3278735">CL</a>).</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>ScrollTimeline</td></td>
-
-<td><td>Kevers added support for progress based animations in our ScrollTimeline Polyfill (<a href="https://github.com/flackr/scroll-timeline/pull/37">PR</a>). Doing so required adding a polyfill for several sub-components since in the web-animations-1 spec, all timing is in ms, whereas in web-animations-2 timing may be in ms or expressed as a percentage. Polyfills to AnimationEffect and AnimationPlaybackEvent now support percentages. With the fix, the WPT tests now have a 94% pass rate!!</td></td>
-
-<td><td>The Blink implementation of ScrollTimeline was out of sync with the spec in regard to one of the timeline property names. The deprecated property scrollSource was replaced with the updated property name, source (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3261899">CL</a>). Though largely a mechanical change, it required updating 41 WPT tests. Landed this change unblocked a third party contributor from landing the equivalent fix to the Polyfill (<a href="https://github.com/flackr/scroll-timeline/pull/35">PR</a>). Thanks Bramus for diving in and contributing.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>CSS Selector Fragments</td></td>
-
-<td><td colspan=2>mehdika@ has landed a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3172857">CL</a> that implements <a href="https://github.com/WICG/scroll-to-text-fragment/blob/main/EXTENSIONS.md#proposed-solution">CSS Selector fragments</a> behind this flag blink::features::kCssSelectorFragmentAnchor.</td></td>
-
-<td><td colspan=2><a href="https://en.wikipedia.org/wiki/Cat#:~:selector(type=CssSelector,value=img%5Bsrc$=%E2%80%9Dwhiskers_cat.jpg%E2%80%9D%5D)">https://en.wikipedia.org/wiki/Cat#:~:selector(type=CssSelector,value=img\[src$=”whiskers_cat.jpg”\])</a></td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh6.googleusercontent.com/M5w0K4JhTXJPKC5sjZgDSmT-wQUEKXadYT4_pGWiTepxGhSnHsWdWFqI4r7u4m99W8pQVWucGAyccRXyS8Ul0_VgJYNdR4VMcVGiAgqEddlc2gmAjjaMcbcwkFWUjmkWXvMsTNePIrHBTUkqRWktJuMKviTmTDTOFrdhBGDCi-DBklm_" height=225 width=447></td></td>
-
-<td><td colspan=2>At this point the element is scrolled into the middle of the viewport. In the next step the element will be highlighted as well.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Bug Status Update</td>
-
-<td><img alt="image" src="https://lh6.googleusercontent.com/yK_7AqZ_uk5AjVjn86eSaBZ04rGF7E6ZN50DubuNIkOatP7y0CyDmliuJeYIgaJyLMYWrInbCXOQ2SPXo-GxCsudLGxuIPil8BjmL5jASvbVTMs-77EpXUBKTG3jbVlDjSP37vI1jF6rh5dXCBhM1-MpYktBoMpxjRNB5XQy8awrInN_" height=279 width=505></td>
-
-<td><img alt="image" src="https://lh5.googleusercontent.com/8nkguJhKYxlkdIAAZo2yRzwDbvv4t8GEn5DGLwECoSD-TXqSwfXy268QOc0Sr7Vj5rlv5bpJgDnW_VTtyPDqf1QhBjYW91TUJQRR6PR5M7urHt6mKLitYzuXX2qBkWfh4MO0fCpANCYejBMRm7zYXtYUfeChGXw7wu5glhR7p4wzBzCr" height=264 width=479></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | November 2021</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/october-2019/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/october-2019/index.md
deleted file mode 100644
index 5acdbe02ab0..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/october-2019/index.md
+++ /dev/null
@@ -1,128 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: october-2019
-title: October 2019
----
-
-<table>
-<tr>
-
-<td>Oct 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Before</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/t8_ODuCgZ_gNvLhDkOp43QFiXky2FxOciZsXyORhVlUvvrv1fpoM33qc_89HOeHGuKx0-7rNd2zcHT8nM5AqUuL9bOenugdtekgjic5HeY4zcCGHWzjwkuATrUQHn83MWrvhYMr6" height=120 width=582></td></td>
-
-<td><td>October Update</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/yfD26OsVLnxH-_ToJy499nhllsQK1mdpYjQLFSugK2i3WxdL6c4X6hzZtstBE4L4hax21uM0wULmw39zdiWRjQ3dB9WNnwjs6S5Isxz1ye4Ap56Z9ft2SV1AvAVtLai5c58bm2Nn" height=108 width=582></td></td>
-
-<td><td>Goal</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/Vbaqe3mFSBV7_VEY0g0v0WI7Ah2xafMSGGsK3CvOr3G9vYpk500fPNpqBRLq-E2K8C1RTB2Oaf6mG-a0_gFseXL3c9U-Z5uqSPIegh4Rmj96RqKVyjABnQ9tqU1YFeO7dMyo6nzl" height=123 width=582></td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/BpYL2k0L7gpATooCPKgGPelqLnVlj6LEsY1lGXz0tgvjmN1n3zFuUTWdy-Z45B4-3UDUhoT-bF8gWysNjlSDnGkjxZXgW5s98KQFM_NDth-_lPzxCY7VVZhCG9PHtSNg6FYaD11l" height=20 width=208></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td> Figure. Refactoring Blink animation logic to align with specification model.</td>
-
-<td>Web Animations Microtasking</td>
-
-<td>Kevin (kevers@) has made lots of progress in landing a major refactor of Blink animation logic to match the web-animation processing model. Main changes include:</td>
-
- <td>Now using microtasks for finished promises / events.</td>
-
- <td>No more lazy update of variables affecting current time.</td>
-
- <td>Improved handling of edge cases (e.g. zero playback rate).</td>
-
- <td>Lots of changes in the works to align with the spec.</td>
-
-<td>Stephen (smcgruer@) <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=788440">implemented</a> accumulate composite for <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1829355">transform</a> and <a href="https://chromium.googlesource.com/chromium/src.git/+/cc208c1adc376fa59aaa07897ed0555cebece58e">filter</a> properties bringing us one step closer to feature parity with Gecko.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/IzZLxwrwIoPRBF9ygS4puJajKlGLO9P7BX0Y5TSvcQw-DKVye-NF3V28hLL1Fob9EBldzn3ierpk5elJYbFe5rjgmjwjBu96bvvdFmrViEpjaok-QoehyxOehllq5OIvEtHbGyOj" height=141 width=282></td></td>
-
-<td><td>Frame Throughput Metric</td></td>
-
-<td><td>The initial version of the <a href="https://uma.googleplex.com/p/chrome/histograms?sid=85974f925706cadddcae47f545d649f7">Frame Throughput</a> metric has landed. We have already made a few rounds of bug fixing and corrections.</td></td>
-
-<td><td>Gene (girard@) and Xida (xidachen@) have been <a href="https://docs.google.com/spreadsheets/d/1-KJDVN60XQNrMtMRTv_9GldGMEwMkCpdlBfWyqgdtOQ/edit#gid=0">evaluating</a> the metric to guide such refinements. </td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/2xiBdb-GDi7wBgSupyAy5TbFazbC4jt9a9Sm-Uviorw2PczfEA-gdObOhsM82bt_5biaQ__py9lhwpa3yCqnegvFAkIWiv4R301k7CzcWrpJ2WLm1PvFVS1liH3ogRLIXWdYLRqp" height=140 width=291>Group Effect Polyfilled</td></td>
-
-<td><td><a href="https://yi-gu.github.io/group_effect/">Group Effect</a> proposal has now a new functional<a href="https://yi-gu.github.io/group_effect/polyfill/"> polyfill</a> thanks to Yi (yigu@). He has been using this polyfill to experiments with richer API for stagger effects (e.g., 2d staggering and delay easing) and creating cool demos.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Scroll Timeline & Animation Worklet</td></td>
-
-<td><td>We (Majid, Yi from Chrome with Olga, Jordan from Edge team) have completed the <a href="https://docs.google.com/document/d/1laATsw0V4bibsADvps5vV2oVEyZgjXzs_LLxo7pzn00/edit?usp=sharing">design document</a> for the Scroll Timeline. We also worked on preparing a <a href="https://docs.google.com/presentation/d/12UNGCTJybiL5gEMAGY2f-05WxXARvNz4k-RS02qgNuU/edit">presentation</a> on it for BlinkOn to share its current status.</td></td>
-
-<td><td>Majid continued on improving Animation Worklet specifications (<a href="https://github.com/w3c/css-houdini-drafts/commit/ed84d19b90c459cf405bfb0fc98e6bbfe9ee5ea8">1</a>, <a href="https://github.com/w3c/css-houdini-drafts/commit/69d3ab9f72b76b5517227d8dd859efbea057f510">2</a>, <a href="https://github.com/w3c/css-houdini-drafts/commit/8448e9812d93c959b26f73197d91c7295f6bbad7">3</a>).</td></td>
-
-<td><td>Investing in Code Health</td></td>
-
-<td><td>George (gtsteel@) made progress toward removing the <a href="https://docs.google.com/document/d/1khxyBn8PIhDWZUen3GIH0sW-qTeyKB8qHO-bJZdAGOs/edit#heading=h.z1k0oapk1qmm">CSSPseudo element</a> which is also important for launching web-animations.</td></td>
-
-<td><td>Yi (yigu@) fixed an issue so we <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1825720">no longer</a> auto-composite scroll-linked animations.</td></td>
-
-<td><td>Majid (majidvp@) worked on <a href="https://docs.google.com/document/d/1isnrFwAqTjBYi5YnHI_GbQ33Q79Kq6nwae-9HJoBUyc/edit">figuring out</a> why scroll animations takeover logic got broken without us finding out and proposed a fix.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Snap, Harder Better Faster Stronger</td></td>
-
-<td><td>Kaan (alsan@) has been making many improvements (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1865048">1</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1865048">2</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1865048">3</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1902008">4</a>) to our scroll snap code resulting in fixes of long-standing bugs and enables landing additional features. He also implemented <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1845673">tracking snapped elements</a> which is the first part of snap-after-layout.</td></td>
-
-<td><td>Majid has reached out to our contact at Safari to help improve Scroll Snap interop. He worked to improve our wpt tests: upstreaming input driven scroll snap tests to wpt (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1893142">keyboard</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1922950">touch</a>), <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1003055">fixing</a> an issue to have 8 tests pass on Chrome.</td></td>
-
-<td><td>OT Paint Worklets Launch-ish </td></td>
-
-<td><td>This cycle Paint Worklet was launched briefly but had to be reverted due to <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1020238">unforeseen interactions</a> with OOP-R. In preparation for this launch Xida added necessary <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1827246">metrics</a> and improved stability (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1838674">\[1\]</a> <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1789828">\[2\]</a>). We are now working to fix the newly discovered issue, improve test coverage, and relaunch.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | Oct 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/october-2020---code-health-scroll-timelines-synthetic-user-activation-scroll-unification-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/october-2020---code-health-scroll-timelines-synthetic-user-activation-scroll-unification-and-more/index.md
deleted file mode 100644
index ecef49e12ee..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/october-2020---code-health-scroll-timelines-synthetic-user-activation-scroll-unification-and-more/index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: october-2020---code-health-scroll-timelines-synthetic-user-activation-scroll-unification-and-more
-title: October 2020 - Code Health, Scroll Timelines, Synthetic User Activation, Scroll
- Unification and more!
----
-
-<table>
-<tr>
-
-<td>October 2020</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Code health</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/xJwdlxgVeI_5sRA_9M84xtpBFGxhvbM3k5rh8WkY1amz0En2FzMyDTzkbees703Q1p3NI8CCXvPeZKa3d6sws_iBMp_ghQCabFfO8UNZhaAIbfy0RyaOyHAdm24N6UZInFfdN-d4Xw" height=156 width=280></td></td>
-
-<td><td>The graph shows our latest bug fixing efforts in this sprint:</td></td>
-
- <td><td>We made steady progress on bug fixes.</td></td>
-
- <td><td>We held steady on P0s and P1s.</td></td>
-
- <td><td>Nearly held steady on P2s, which is awesome!</td></td>
-
-<td><td>Scroll timeline</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/ZbP3FFl7dRFLp2GGpe3p8KczY5F8HvAf8MZ1u3Qtg6WCfEUFazVxKtu1Gx3eD549C0XrFdj56u0_-JMEieRwgxJ03l7FgQc20XXdQ91LQYCJ6WI5ienDXocT5akvryNMG9r6ZKnnhA" height=173 width=280></td></td>
-
-<td><td>flackr@ made tremendous progress on scroll timeline polyfill:</td></td>
-
- <td><td>Landed 13 patches.</td></td>
-
- <td><td>Discovered two bugs.</td></td>
-
- <td><td><a
- href="https://bugs.chromium.org/p/chromium/issues/detail?id=1136516">Wrong
- error thrown</a>.</td></td>
-
- <td><td><a
- href="https://github.com/w3c/csswg-drafts/issues/5599">rootMargin
- missing in spec</a>.</td></td>
-
- <td><td>215 new passing tests out of 354 total tests. The above graph shows
- the number of passing tests when each patch landed.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Synthetic user activation</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/c6IkBfhps0LESw400Jqxdjjpj7XsHgR2b6t-XUN9lfxnFPr90s_6w52JVkEwfmDhXopgnIkZr_7e8oog5hKmSNCSNxxuZ2LOtQZjpfsQzCZZT5DbbIyDk47-tCqnTwjRy6nFdSG8fg" height=61 width=280></td></td>
-
-<td><td>TriggerForConsuming</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/JjVgSv_R4_qqTxquFfOongu6_TRaLH6OFw5UMoL7mORq0-dTwwQgdk9rct47sueeDvMVmO9xuXPCfRDc_td0pjyhGgEpYGScfCY6L12DwPKLnw-TPfNfzonohCE378LwS9AEWv0gzA" height=73 width=280></td></td>
-
-<td><td>TriggerForTrasient</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/sh5326ffsVwtpQokg4bUu_7WDewdbY7pGXuf_KmzMREI4LJSqSbCWzGy4Zh4mtiYzaQaYp18zmM_JNWYOjagj8uRfAu-Fxr3c_5ObfCVeMhjiYHT7W4z4KweHJxSevTeWuvGcI9YDg" height=73 width=280></td></td>
-
-<td><td>TriggerForSticky</td></td>
-
-<td><td>mustaq@ has done with UMA for synthetic triggers.</td></td>
-
- <td><td>Seeing expected results for non-extensions, but not expected for
- extensions!</td></td>
-
-<td><td>Scroll unification</td></td>
-
-<td><td>liviutinta@ organized the remaining work on scroll unification, and splits the work between Q4 2020 and Q1 2021. This <a href="https://docs.google.com/document/d/1O4vOub0CuXSbO-wAmDU1qe9D0wbdKT0y6sXIWTV67kY/edit">doc</a> captures the work nicely.</td></td>
-
-<td><td>Click/Auxclick as pointer event</td></td>
-
-<td><td>mustaq@ is working on a finch experiment on this feature..</td></td>
-
- <td><td>Ran finch experiment at 25% on Canary and Dev channels.</td></td>
-
- <td><td>Expanded finch experiment to 50% Canary and Dev
- (08-Oct-2020)</td></td>
-
- <td><td>Currently in progress of moving to 50% on Canary, Dev and Beta
- channels.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Composite transform animations containing percents</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/nQK5QSx3LIfliPdWvIqzLwi6DnDQfUoeKfI1WhQVbbsrxkk1ia7ArlTZJv4gTLWRWOkmcJgfEHYBu_i3RTYsBxVEm7boLhw_uMefaacgKyx9Nbdpgv4_FRD3-xwrLYIywp6GxOWhUg" height=152 width=280></td></td>
-
-<td><td>gtsteel@ has landed a complete implementation for animations targeting CSS boxes. The above <a href="https://codepen.io/george-steel/pen/PozWObd">demo</a> shows the difference of running the animation on the main vs the compositor thread (with artificial jank).</td></td>
-
- <td><td>This makes ~10% of transform animations potentially less
- janky.</td></td>
-
-<td><td>Devtool input protocol</td></td>
-
-<td><td>lanwei@ has merged the spec change of adding pointerevent’s additional properties to Webdriver Action API and added these properties to Devtool Input Protocol.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/RQny9ZhNN2UyqoAqjiwuXqdTyl37qRD1F-nz_QzO0Ek9C8SfAi0NDPVJ2u98y_4sOnKitQoTKZLgNhavYFMXEltcjdwWsZlFSoECxfDXjNvfdpYja9lEUuIuUuT7o8xRO5aKKU3D8w" height=138 width=131><img alt="image" src="https://lh4.googleusercontent.com/kHpOsjzL05GfwKCnwHLX2ADNBpz5Cd4KiARdKGms-JT1T6ZTfgMcjet25TebhGV1D4w6gSH7wClwo9ZhvVhkpr0MbgYhbSc1WXfu1ZBITGep1yYN1X3_lMNlMHUOgbpFFHWwLbAYmA" height=132 width=144></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | October 2020</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/october-2021---2-sprints-worth-of-highlights/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/october-2021---2-sprints-worth-of-highlights/index.md
deleted file mode 100644
index c6a11d79139..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/october-2021---2-sprints-worth-of-highlights/index.md
+++ /dev/null
@@ -1,162 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: october-2021---2-sprints-worth-of-highlights
-title: October 2021 - 2 sprint's worth of highlights
----
-
-<table>
-<tr>
-
-<td>October 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>CompositeBGColorAnimation finch </td></td>
-
-<td><td>xidachen@ launched finch on the stable channel for 1% of the population (detailed <a href="https://docs.google.com/document/d/1Fkp7udbCgYqVtNf4gn-NXGVYamPrd_n0qKqalruTq6E/edit#heading=h.u1s0gwal1np6">result</a>). Overall, we got very good results on throughput metrics, but slightly more memory consumption on Windows (~1.5%). The increase in memory is explained by how garbage collection is scheduled. Most importantly, there was no regression on the first or large contentful paint.</td></td>
-
-<td><td>A crash was discovered owing to the fact that not all colors are handled the same way. System colors behave more like references. For example, the “Field” color refers to the default background color for an input field. The correct color is resolved later in the pipeline, and cannot presently be used with a composited background color animation. These animations are now deferred to the main thread (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3216109">link</a>).</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/HHMbn-fB8tWKPra3VxfAvEBGErp-QAtbBAmzeyoyRMtvaB_5Ga_Tlz0ncKLQR5LTZYE7OnyH8zUTpyWlL-aKxrPJvMZtuZjVLLkrSh9j6fGyvcDzjh_9eoOV93pzuO5yVGIdVX3WKg" height=83 width=283></td></td>
-
-<td><td>With this final known issue fixed, we’re ready to review performance metrics for launch.</td></td>
-
-<td><td>Scroll timeline</td></td>
-
-<td><td>kevers@ landed a number of spec changes to <a href="https://drafts4.csswg.org/web-animations-2/">web-animations-2</a> in support of <a href="https://css-tricks.com/practical-use-cases-for-scroll-linked-animations-in-css-with-scroll-timelines/">scroll-linked animations</a>. These spec changes largely address issues with timing in the API. Previously all timing was recorded in milliseconds. With progress-based animations, times are reported as CSSNumericValue percentages. The spec changes also address some edge cases for scroll-linked animations that are in the paused state as well as the effect phase when at limits of the scroll range.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/JacSGMav-KYulzw-o2qSwjnhif87ENbCnnElh-BoGEiXTArgrBbnlOaqgMOTfL0OLaCLcx46xUG0WqIU2Q4OGu2WAcl5sX1Gt6VuLD5kosGyilUdvC-EkzaLpk750h0LRMhdOizI3g" height=80 width=251></td></td>
-<td><td>Pull request links: <a href="https://github.com/w3c/csswg-drafts/pull/6656">PR6656</a>, <a href="https://github.com/w3c/csswg-drafts/pull/6655">PR6655</a>, <a href="https://github.com/w3c/csswg-drafts/pull/6508">PR6508</a>, <a href="https://github.com/w3c/csswg-drafts/pull/6479">PR6479</a>. <a href="https://github.com/w3c/csswg-drafts/pull/6702">PR6702</a>, <a href="https://github.com/w3c/csswg-drafts/pull/6712">PR6712</a>.</td></td>
-
-<td><td>kevers@ fixed some flaky scroll animation tests (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3169158">link</a>). One source of flakes was caused by slight platform dependencies combined with floating point rounding errors. By tweaking the tests to not depend on scrollbar width and to have nice integer expected values, these tests no longer flake. The flakiness was discovered while working on a <a href="https://github.com/flackr/scroll-timeline">polyfill</a> implementation of scroll timelines. Another source of flakes was due to improper assumptions when making a style change before an animation frame (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3226725">link</a>).</td></td>
-
-<td><td>kevers@ fixed 2 clusterfuzz failures. Both were caused by unexpected input: malformed scrollOffsets (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3244932">link</a>), and unsupported effect delays (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3245202">link</a>).</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>\[Scroll Unification\] Web test burn-down</td></td>
-
-<td><td>Scroll unification is an important code health project to streamline the scrolling process. Currently, there are multiple code paths, which need to be considered when addressing a bug or updating scroll behavior. This cycle, skobes@ has focused on burning down the number of test failures.</td></td>
-
- <td><td>lock-renderer-for-middle-click-autoscroll.html (<a
- href="http://crrev.com/925854">r925854</a>)</td></td>
-
- <td><td>scrollbar-double-click.html (<a
- href="http://crrev.com/925896">r925896</a>)</td></td>
- <td><td>background-attachment-local-scrolling.htm</td></td>
- <td><td>plugin-overlay-scrollbar-mouse-capture.html</td></td>
-
- <td><td>reset-scroll-in-onscroll.html (<a
- href="http://crrev.com/927008">r927008</a>)</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td> This reduced the number of outstanding web test regressions by 16%.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Responsive composited animations</td></td>
-
-<td><td>kevers@ fixed the responsiveness of composited animations to changes in the animation environment (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/3205715">link</a>). For main thread animations, ConversionCheckers detect changes that would affect interpolations of properties during an animation. These changes now trigger an invalidation of the compositor keyframe snapshots. Some further tweaks were required to defer updating the compositor snapshots until after the ConversionCheckers have run.</td></td>
-
-<td><td><table></td></td>
-<td><td><tr></td></td>
-
-<td><td><td>@keyframes spin {</td></td></td>
-<td><td><td> 0% { transform:</td></td></td>
-<td><td><td> scaleX(var(--scale))</td></td></td>
-<td><td><td> rotate(0deg); </td></td></td>
-<td><td><td> }</td></td></td>
-<td><td><td> 100% { transform:</td></td></td>
-<td><td><td> scaleX(var(--scale))</td></td></td>
-<td><td><td> rotate(180deg); </td></td></td>
-<td><td><td> }</td></td></td>
-<td><td><td>}</td></td></td>
-
-<td><td><td><img alt="image" src="https://lh6.googleusercontent.com/kInX8dX9QmbDrsLHGKAq0YXiT0CHnAr5ts0ud3AGUmYFsZsGsnCN3-9YzX353drQBISBBdkLQi8KcHb528Fi6frBU9uP_PiO_McqXVB6qMeV0iZlc_suQ1_C6MzmWHCv_JsnSPr4sQ" height=181 width=123></td></td></td>
-
-<td><td></tr></td></td>
-<td><td></table></td></td>
-
-<td><td>Infinite user activation by extensions (mustaq@)</td></td>
-
-<td><td>Extension messaging API needs to trigger an artificial <a href="https://html.spec.whatwg.org/multipage/interaction.html#tracking-user-activation">user activation</a> in background scripts to allow access to user-activation-gated APIs like Permissions and popup. This trigger caused a challenging <a href="https://crbug.com/957553">P1 security bug</a> reported by a user 2+ years ago (internally we knew it even before that).</td></td>
-
-<td><td>The problem here is that a malicious site or extension can craft a delayed message-reply sequence to effectively extend the lifespan of the original user activation, and even repeat the sequence indefinitely to secure a “forever-active” state. That means, a single user click in one webpage could allow infinite popups from any tabs!</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/l0vhMbMctf57poYsl-uh5sgv7seC1o8DYejptY9Br5oTMupHsqEDh9DC7D-pKwr4USj280259hc2LKLByAhs2ZKnuex3hx1Qy4O7-Ueq1slSvvpjtbxdQ-dXGlhJTR9ByR1FcQ54zQ" height=220 width=208></td></td>
-
-<td><td>In addition to being a challenging problem by itself, the bug “worsened” two other security bugs (on leaking autofill <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=966562">966562</a> and bypassing sandbox restriction <a href="https://crbug.com/1035315">1035315</a>) in the last two years!</td></td>
-
-<td><td>After a long brainstorming through unactionable whiteboard drawings, <a href="https://uma.googleplex.com/p/chrome/histograms?sid=c4e21a8aa954807b89df16f4d2d8e9be">misleading UMA</a> discovery and stalled <a href="https://docs.google.com/document/d/1TKjjwFlQGh2LLm0_mOW6FJdmmwyOBMj_fdWJyAJ_Q50/edit?usp=sharing">design discussion</a>, we were able to find and <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3154195">land</a> a fix in Q3, yayy!</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Fixed overscroll glow position (flackr@)</td></td>
-
-<td><td>Overscroll glow on android <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1253617">could appear in the wrong position</a>.</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/eoyR3w60Cqa8PVbrNBA_9-jTOKg4on6uc6MSmCn4lAxrDCNlyY1H4Z59BVPs_fEwg6m7vJMCmylEAq3CF6UVFuxvOQQH-_4Lb5zis14Ox1erYLJLiP0gUd0G3Jx_44DhKMIVdRwO8g" height=153 width=283></td></td>
-
-<td><td>The scrollable viewport bounds didn’t include the current bounds delta from active touch dragging. Fixed <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3188708">using ScrollTree::container_bounds</a>.</td></td>
-
-<td><td>Smooth scroll vs. JS scroll (skobes@)</td></td>
-
-<td><td>Achievements: Learned a lot about how to handle JS scrolls in the middle of a user-triggered smooth scroll (wheel, keyboard). Both the main thread and the compositor thread were handling this improperly in different ways. A <a href="http://crbug.com/1264266">new proposal</a> enables "adjustment" behavior in virtual scrollers.</td></td>
-
-<td><td><img alt="easeinout.png" src="https://lh4.googleusercontent.com/yGrqbqHLvUia7IuId5eOlAJfQBx_nDnxaIoHd3zkYY81tyIbm70sr05msy4z1E1VKMayvR5eN_AK49mDMAfUfmlpLmHKlgqOCYiNpw9GoSwuUkq6hmFltMGkvFXk4ybC-MZphtoMMA" height=145 width=148></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Bug status update</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/cvdKwm9SlfBYA9JJ7ZCu8HW2mH09w6K4DA8E0G-dSw8KEZyzgZv3n7BYQcJ-Aw1RRTxbI4NyFCmhlqQa7_IbwDMZFVCBjYTgPTYbTOAm3KWGwJSiRpIxKiRoeDdD8DTvQBHzSnnJ8Q" height=283 width=582></td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/E4JvRCP-MkjTLdZviSF1JP0GoQKf6eOo-EcjNwffwl9vb2xC1vurMJlK5P_xKXDSm21Act6-psqYt5c-R75tUc52VFLpa3OMvI9F18-OVU1md4y51HlQ5AhVdqbF17xYGf7KNn4O8Q" height=283 width=582></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | October 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/september-2020---code-heath-animation-timelines-smoothness-metrics-animation-event-handlers-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/september-2020---code-heath-animation-timelines-smoothness-metrics-animation-event-handlers-and-more/index.md
deleted file mode 100644
index 08f4a72cb27..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/september-2020---code-heath-animation-timelines-smoothness-metrics-animation-event-handlers-and-more/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: september-2020---code-heath-animation-timelines-smoothness-metrics-animation-event-handlers-and-more
-title: September 2020 - Code Heath, Animation Timelines, Smoothness Metrics, Animation
- event handlers and more!
----
-
-<table>
-<tr>
-
-<td>September 2020</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Code health</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/0HrjwnQsCSygr54-qmbiNzfVBw1RqBieD343JVyXPbrhYBqGlnv50ir3q4le1GU1buG2e-8iKD_UaD3I3Te7_4eIjCvj-1I9mtl7KRt453N_CEkU9jP7E6yT9v-DTuebsgckqmSJHQ" height=153 width=280></td></td>
-
-<td><td>kevers@ presented a graph to show the progress of bug fixing.</td></td>
-
- <td><td>In this sprint we closed a lot of bugs, but more were opened than
- closed.</td></td>
-
- <td><td>We now have breakdowns by priority. Nice to see that we did not lose
- ground on P0s or P1s.</td></td>
-
-<td><td>xidachen@ removed the usage of setTimeout in animations layout test, and replaced them with rAF.</td></td>
-
- <td><td>setTimeout can easily cause flakiness, especially on debug
- bots.</td></td>
-
- <td><td>Animations are driven by animation frames, using rAF leads to more
- robust tests.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/02ubEg_i85VG8_GcBTpvZdboNqtTJc85Q0f-ZaSo5QFTjU7_PEGRpiYSKHQ7XnZ1cr3ioGu3F87MfJWBh3NYtfF9zonWHQfhQ0OMxTyuyo4JK6byuDzTPP3B2wUuFTgh4zNKtnmeug" height=224 width=280></td></td>
-
-<td><td>Mutable timelines</td></td>
-
-<td><td>kevers@ has been working on scroll timelines and the above <a href="https://codepen.io/kevers-google/pen/VweomWY">demo</a> showcases mutable timelines, which are required for supporting css animation-timeline.</td></td>
-
- <td><td>The demo illustrates updating the animation timeline via the
- web-animation API.</td></td>
-
- <td><td>Presently it is behind the scroll-timeline feature flag.</td></td>
-
-<td><td>kevers@ showed another fun <a href="https://codepen.io/kevers-google/full/YzqaLKQ">demo</a> for scroll timelines, which uses scroll position to drive a paint worklet animation..</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/XdD8nBBUsBXIe8J93a7ntjcLK2u30rEa-HahPlPUqLJoa30tSCebdA5oisoQCfrF4E7xkkqn7epvzJfX66TSyC9jPmq9AexhaIjBt7FWhKLEAo3HzfCbTHKA8DN9wedehK1sq_Vogg" height=133 width=280></td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Smoothness metrics</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/UOyYLsJ4A5m-FFWw5T2q6owRPLZloZXc-WO9zGJvAZ-RUXhQp5zj8rvZ5O7caDnbScfIIgHkEoHfj9n_7Ct9jVzjlvqk5apzJzV6_KhLmu5yBndzQR2VdzINsEgJjXT32c9VpvPfGg" height=217 width=280></td></td>
-
-<td><td>xidachen@ improved fps meter by making it account for page loading.</td></td>
-
- <td><td>The fps meter will reset itself at first contentful paint (which is
- regarded as loading completed).</td></td>
-
- <td><td>The stats before first contentful paint will be discarded when we
- report to UMA.</td></td>
-
-<td><td>Animation event handlers</td></td>
-
-<td><td>gtsteel@ landed the implementation for ontrasition\* event handler properties. Along with that, gtsteel@ also fixed animationcancel event so that it doesn’t fire after animationend.</td></td>
-
-<td><td>Zooming no longer breaks transitions</td></td>
-
-<td><td>gtsteel@ fixed a bug where zooming would cause transition event listeners to fire.</td></td>
-
- <td><td>Previously, we compared zoomed values when starting transitions,
- then transitionend based on computed value.</td></td>
-
- <td><td>Now we calculate and compare computed values (as per spec) if zoom
- changed.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Web tests ⇒ WPT</td></td>
-
-<td><td>liviutinta@ shared a <a href="https://docs.google.com/spreadsheets/d/1WCg_odYm124kf4Se5SLYq0nCk4yRQU3O6aFV7cWi2DI/edit#gid=0">sheet</a> that lists input related layout tests that we would like to move to wpt/. The spreadsheet also tracks the progress. </td></td>
-
-<td><td>WebDriver Actions API Spec</td></td>
-
-<td><td>lanwei@ has landed <a href="https://github.com/w3c/webdriver/pull/1522">spec change</a> that adds wheel input to the webdriver action API.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | September 2020</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/september-2020-vol-2---code-health-logical-property-animation-off-thread-paintworklet-capability-delegation-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/september-2020-vol-2---code-health-logical-property-animation-off-thread-paintworklet-capability-delegation-and-more/index.md
deleted file mode 100644
index 0bd935d59c4..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/september-2020-vol-2---code-health-logical-property-animation-off-thread-paintworklet-capability-delegation-and-more/index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: september-2020-vol-2---code-health-logical-property-animation-off-thread-paintworklet-capability-delegation-and-more
-title: September 2020 (Vol. 2) - Code Health, Logical Property Animation, Off-thread
- PaintWorklet, Capability Delegation and more!
----
-
-<table>
-<tr>
-
-<td>September 2020 (Vol 2)</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Code health</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/Ux83vqp9MnKpYUaJ908wGb3hTCOBEja8SrjjHF6iWiUkrPoB4VN24rnjkJH95Did60R5tZch82shQjpZOCiq2Q1yGjzK7f-7Ndes6IB0R_GdWeO3RJhoNg3r0iAAnARjJxiaidFWZQ" height=156 width=280></td></td>
-
-<td><td>kevers@ presented our bug fixing effort for the sprint. We closed a fairly large number of bugs and kept the number of P1 bugs fairly steady. Overall the number of bugs has increased.</td></td>
-
-<td><td rowspan=2>Logic clearly dictates…<img alt="image" src="https://lh6.googleusercontent.com/jJoZEGRrSbXcZ-3L4zcBHdorNiKa7ubKF14bTirLSh4vjhqZS16DOkKRue12sCHBVds5tpeJILUDWT_XkH703_TGCE0M_doid4HTeXbH6VVIinP8dj6ln4CmHWkSYRIbX0ZH-dBRbQ" height=228 width=217></td></td>
-
-<td><td rowspan=2>kevers@ implemented support for animating logical properties in CSS and programmatic animations. Logical properties depend on the writing mode and text direction. As these animation types have different rules for keyframe construction and reporting, resolving property values when there are potential collisions in longhand property names presented some interesting challenges. </td></td>
-
-<td><td rowspan=2>As a bonus, CSS animations now report computed values when fetching keyframes, fixing an issue with the resolution of variable references.</td></td>
-
-<td><td rowspan=2>The above <a href="https://codepen.io/kevers-google/full/wvGNBoL">demo</a> programmatically creates an animated overlay on the insert-inline-start property, which in turn maps to the physical property left, top or right depending on the writing system. Upwards of 60 logical properties can now be animated. </td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Off-thread PaintWorklet</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/Tz4cZdN5QEhQBj5vVeVoiHliFj9_8G2Sw7VqlOT6i_Nd-_Y_ZWRHcKZ-AvP38LygMWT6Iyl_vvndRt1To3_XJOpJ9Z3yg_w1HDqSAuZBPAPUmZ8NO0CRcAoCv28Tm4Odox7bwbOTIA" height=127 width=280></td></td>
-
-<td><td>xidachen@ has been improving the off-thread paint worklet.</td></td>
-
- <td><td>Previously, it was required to have ‘will-change: transform’ to
- composite a paint worklet animation.</td></td>
-
- <td><td>With this improvement, that requirement is no longer needed and we
- save some memory because there is no longer any composited layer for running
- the paint worklet animation.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/ORNcx8zCjjHrDtuq4C2KwtJyV1AhaWjpkDAWUG54x7ubD1y8c2BWFQPqz2YgeQkehuonh5m3-fRePBQyU98lskx3TZ2uzKlN6ArNRRoPtAGE8_UhLVeqqZxlmof4giGq3BNcaZOYkw" height=156 width=280></td></td>
-
-<td><td>Wheel WPT infrastructure tests</td></td>
-
-<td><td>lanwei@ has been working on adding the Wheel input to the Webdriver Action API, writing a WPT infrastructure test and making some wheel WPT tests running automatically on WPT dashboard.</td></td>
-
-<td><td>Capability delegation</td></td>
-
-<td><td>mustaq@ now has an <a href="https://github.com/mustaqahmed/capability-delegation">explainer</a> and a WICG <a href="https://discourse.wicg.io/t/capability-delegation/4821">discussion</a> thread ready for wider review.</td></td>
-
-<td><td>Scroll unification</td></td>
-
-<td><td>liviutinta@ communicated with bokan@ on the scroll unification project, and</td></td>
-
- <td><td>Started this <a
- href="https://docs.google.com/document/d/1O4vOub0CuXSbO-wAmDU1qe9D0wbdKT0y6sXIWTV67kY/edit">doc</a>
- that captures the remaining work on scroll unification.</td></td>
-
- <td><td>Added a virtual test suite for scroll unification.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | Sept. 2020 (Vol 2)</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/september-2021---new-features-testing-code-health-interop-fixes-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/september-2021---new-features-testing-code-health-interop-fixes-and-more/index.md
deleted file mode 100644
index 097da59c3b0..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/september-2021---new-features-testing-code-health-interop-fixes-and-more/index.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: september-2021---new-features-testing-code-health-interop-fixes-and-more
-title: September 2021 - New features, testing, code health, interop fixes and more!
----
-
-<table>
-<tr>
-
-<td>September 2021</td>
-
-<td>Chrome Interactions Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/interactions-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter I: New features</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Capability Delegation</td></td>
-
-<td><td><img alt="image" src="https://lh3.googleusercontent.com/MG0xgExux0IXLJhml1xYx4KnCibC4LI9_Q9qW04jIjlFaEkh7MKOdMe49olq5XfTKyiYwb8rEeOE6n-Y8G0LXu-6T_42-4vnwi4aRXHtxGyJKJCV_CImQrLO9C-fdDg3g0RuPSnQog=s0" height=221.4676 width=124.0124> <img alt="image" src="https://lh6.googleusercontent.com/0HyrhEBh-ZWRaAxhrkkA5U4LFwor0Zsy7J1U4MpsXJv3GLxZgDSOtThkHBPlAQvvQQDZmZ9-nTX3O_2eLElAIq0hlRS9mG1sS3FvlyiBO-Sv_EsITp7NfaRqOrVzV4tNq64F40EeVg=s0" height=126 width=126></td></td>
-
-<td><td>mustaq@ has been working on the spec proposal for the capability delegation.</td></td>
-
- <td><td>We got official signal from Mozilla (annevk@): <a
- href="https://github.com/mozilla/standards-positions/issues/565#issuecomment-918137857">useful/reasonable</a>.</td></td>
-
- <td><td>Mozilla also <a
- href="https://github.com/WICG/capability-delegation/issues?q=is%3Aissue+author%3Aannevk+">started
- bugs & enhancements</a> discussions.</td></td>
-
-<td><td>For payment capability delegation, the origin trial is now <a href="https://developer.chrome.com/origintrials/#/view_trial/640637046993453057">ready</a> for partners.</td></td>
-
-<td><td>Composite BG-color animation</td></td>
-
-<td><td>xidachen@ <a href="https://critique-ng.corp.google.com/cl/395582428">launched</a> the finch study for the feature CompositeBGColorAnimation on Beta channel, with 50% control vs 50% enabled. The preliminary <a href="https://uma.googleplex.com/p/chrome/variations?sid=15e5e4da675df567f60a113eb822ccde">result</a> looks very positive (Note that currently we have &lt; 7 days of data). Here are some highlights of the result:</td></td>
-
- <td><td>We do see performance improvement on Animations Smoothness
- metrics.</td></td>
-
- <td><td>There is no memory regression on Android</td></td>
-
- <td><td>There is no regression on FirstContentfulPaint and
- LargestContenfulPaint.</td></td>
-
-<td><td>Elastic Overscroll</td></td>
-
-<td><td>flackr@ made great progress on launching elastic overscroll.</td></td>
-
- <td><td>The feature is now <a
- href="https://chromium-review.googlesource.com/c/chromium/src/+/3150217">on
- by default on tip of tree</a>.</td></td>
-
- <td><td>Merged <a href="https://crbug.com/1240789">reduce stretch amount</a>
- and <a href="https://crbug.com/1232154">prefers-reduce-motion</a> behavior
- back to M93.</td></td>
-
- <td><td>Finch <a href="https://critique-ng.corp.google.com/cl/396373932">min
- version updated</a> to include two recent merges and <a
- href="https://critique-ng.corp.google.com/cl/396395915">launched to 1%
- stable</a>.</td></td>
-
- <td><td>Launch to 100% <a
- href="https://critique-ng.corp.google.com/cl/396900469">out for
- review</a>.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter II: Testing</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Composite BG-color animation</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/yxjOLd0Oe3UdEwcVc0hKOxt85oJgTV_DpzaLzp910D8YinzafDO8M4I_O4Ju7mr2j2vxAryh6lGXu1qSqog61i6D3_LlmxsT0dlvEM20IoOZqORNugQEOgHin-EHoaqKb9NC_MsZFw=s0" height=49 width=283></td></td>
-
-<td><td>xidachen@ fixed some very flaky paint worklet tests.</td></td>
-
- <td><td>Given that these are flaky tests, the auto bisect tool doesn’t work.
- We have to manually bisect it to find out that it is due to the launch of <a
- href="http://navigationthreadingoptimizations">this new feature</a> that
- makes navigation faster.</td></td>
-
- <td><td>With many times of try and error, it seems that the combination of
- paint worklet test + a simple div in ref.html somehow caused the crash. The
- root cause is unknown yet.</td></td>
-
-<td><td>Cross-platform scroll-timeline tests</td></td>
-
-<td><td>kevers@fixed some scroll-timeline tests. The issues are:</td></td>
-
- <td><td>Error tolerances were too tight.</td></td>
-
- <td><td>Sensitive to scrollbar width (platform specific)</td></td>
-
- <td><td>Magic numbers in tests (tough to infer correctness at a
- glance)</td></td>
-
- <td><td>Misleading calculations (e.g. scrollheight - clientHeight to compute
- scroll range in both directions)</td></td>
-
- <td><td>Mixup of logical units in RTL tests.</td></td>
-
-<td><td>The issues were discovered when testing via polyfill implementation. A significant number of near misses in test failures.</td></td>
-
-<td><td>The solutions are:</td></td>
-
- <td><td>Compute error tolerance for percentage calculations based on a half
- pixel error in the scroll position.</td></td>
-
- <td><td>Hide scrollbars to ensure that scroll-range is consistent across
- platforms.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td>Chapter III: Code Health</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Triage scroll unification failing web tests</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/84j_rIrI0nOqe3JLW1dWNKILLWEg5r8mwaWkxzSwjW5VkZihaJQFPCDfnU0VK1_eyYQ_mQ26CGWRmiSTDE8FW6LqoAKWV3in60STJOVorEcjsDJrjG-bzWrYw-y-WpS8_PA0o9gi1w=s0" height=231 width=582></td></td>
-
-<td><td>skobes@ triaged failing web tests for scroll unification and the details are captured <a href="http://go/su-web-tests">here</a>. At this moment, there are 30 failing tests</td></td>
-
- <td><td>13 failures from 4 functional regressions (3 P1s, 1 P2), bugs
- filed</td></td>
-
- <td><td>Cannot touch-drag custom scrollbars, resize corners</td></td>
-
- <td><td>Re-latch when scroller removed from DOM</td></td>
-
- <td><td>Scollbar arrow click scrolls by only 1px</td></td>
-
- <td><td>12 failures from bad test (waitForCompositorCommit, rebaseline,
- etc)</td></td>
-
- <td><td>5 requiring more investigation (3 plugin related)</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter IV: Interop fixes</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll-timeline polyfill</td></td>
-
-<td><td>kevers@ made more progress on scroll-timeline polyfill.</td></td>
-
- <td><td>Proxied AnimationEffect to override timing calculations</td></td>
-
- <td><td>Custom AnimationPlaybackEvents to report percentage based
- times</td></td>
-
- <td><td>Removed time-range from scroll timeline proxy</td></td>
-
- <td><td>Conversion between percents for API and times for internal
- use</td></td>
-
-<td><td>Two problematic tests remain with high failure rates, reminder average over 90% pass rate.</td></td>
-
-<td><td>The remaining work includes update timing and event phase.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Chapter V: Bug Updates</td></td>
-
-<td><td><img alt="image" src="https://lh5.googleusercontent.com/O41TurQq6k183Wi1Bg7WiqMm86Zyryrh2N4SBe26qOI9tehJiGOXVrrYn0OhPZWadxhcnCfjoAhVAFFsa9SKIz1Kj0o_63_YoYv3yK2An9kUMzhUUHkUY4-jqP6HRq49mtpro0N6QA=s0" height=153 width=275><img alt="image" src="https://lh4.googleusercontent.com/AiPQ4O6ynfCIoBuYCEXeEWtQ9bQIKTE25lLZ9ilCJZ3wsgcDb4qFIHvMrRJyxwBxL6iL83ROQUgrREMKi3I7SRDcDH4f2AknTHPEpU1w9bLmOTrzabJDweeJK4bMwumGcJUOk-qbdQ=s0" height=152 width=279></td></td>
-
-<td><td>Our team lost a bit of ground in P2s && P3s, but kept the P1s in check.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Interactions Highlights | September 2021</td>
-
-<td><a href="http://go/interactions-team">go/interactions-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/september-update/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/september-update/index.md
deleted file mode 100644
index 07a8706195e..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/september-update/index.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: september-update
-title: September 2019
----
-
-<table>
-<tr>
-
-<td>September 2019</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh6.googleusercontent.com/sXy9qEAKUpZOSAjFMLPicre5Zj4uUdiukK-uBgf7lHbvH3comIpZuE30nOlH3Mmga03rJGC6Ctcjbg6K0KTjrrV37ALqs3-Cf0wnh0Sr9JuLwxPKaF_hChJuLsUJ--x95zyU725_" height=245 width=596></td>
-
-<td>TPAC - Technical Plenary And Cookies</td>
-
-<td>Several members of the team attended TPAC to make progress on key specifications. We did <a href="https://docs.google.com/document/d/1-y6rEBbOi3jXUtiuBW2ecmQSBKatCQu_ZC_N8yLY3DI/edit">pre-planning</a> ensuring key issues are filed and discussed with the right people. Full trip-report is <a href="https://docs.google.com/document/d/1S49ZrTaCV1KMkFK4hdtMwheM9Sjdd_eiyDqH0A-3q48/edit?usp=sharing">here</a> but some highlights from TPAC are:</td>
-
- <td>Agreements on deferring some small features (<a
- href="https://github.com/w3c/csswg-drafts/issues/4300">1</a>, <a
- href="https://github.com/w3c/csswg-drafts/issues/4299">2</a>, <a
- href="https://github.com/w3c/csswg-drafts/issues/4301">3</a>) to web
- animations level 2 paving the path for shipping level 1.</td>
-
- <td>Moving ScrollTimeline out of incubation with <a
- href="https://github.com/w3c/csswg-drafts/issues/4337#issuecomment-532120609">agreements</a>
- on remaining key issues.</td>
-
- <td>Progress on issues related to Group Effect and Matrix transforms.</td>
-
- <td>Kevin (kevers@) learned a lot about WPT and how we can use it more
- effectively which he <a
- href="https://docs.google.com/presentation/d/1hlweg5L2V6gyxtXnj6MeCTXqNHRMnvAILNDIPS8dnOc/edit?usp=sharing">shared</a>
- with the team.</td>
-
-<td>All of these were a result of constructive discussions with collaborators from Microsoft, Mozilla and Apple.</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>Scroll Timeline Polyfilled</td></td>
-
-<td><td>As part of TPAC preparation Majid (majidvp@) proposed <a href="https://github.com/w3c/csswg-drafts/issues/4337">element-based targeting</a> for ScrollTimeline. Rob (flackr@) wrote a full fidelity polyfill for ScrollTimeline which implements the proposal. He used the polyfill to create a compelling <a href="https://flackr.github.io/scroll-timeline/demo/parallax/">demo</a> of key usecases. The demo clearly shows the improved ergonomics which greatly helped in <a href="https://github.com/w3c/csswg-drafts/issues/4334">convincing</a> CSSWG on merits of the proposal. It also helped us validate the proposal and find several awkward parts of the current API <a href="https://github.com/w3c/csswg-drafts/issues/4324">\[1\]</a> <a href="https://github.com/w3c/csswg-drafts/issues/4325">\[2\]</a> <a href="https://github.com/w3c/csswg-drafts/issues/4327">\[3\]</a> <a href="https://github.com/w3c/csswg-drafts/issues/4336">\[4\]</a> <a href="https://github.com/w3c/csswg-drafts/issues/4323">\[5\]</a>.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/LSLhqQDlrowYd1CDTj-9Yy_6eCEW3TaIVeb_RnZb_5EnHqK09s6jVoIALIqsDPjMA7RsRQ7MCckZylwQ_vZd8wkV9wS_0UUoGx6bRQPANzz9culKlBGkKYBzJIaTCRDVPezZnXD8" height=504 width=283></td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Excellent Scroll Snap</td></td>
-
-<td><td>We continue to invest in making scroll snapping excellent. Kaan (alsan@) has made sure more wpt test pass in chrome <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1799387">\[1\]</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1799387">\[2\]</a> and pay some <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1801745">technical debts</a> while Majid worked on improving wheel scroll snapping <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1835012">\[1\]</a> <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1769044">\[2\]</a>. We also triaged and prioritized our bugs around interop after discussions with other browser vendors. </td></td>
-
-<td><td>Web Animation Progress</td></td>
-
-<td><td>Stephen (smcgruer@) spend time to <a href="https://docs.google.com/document/d/1YPgb85q9w3HGKuMb4YCgTNaUTcF9mkjcMmfb2AeD64I/edit#heading=h.luhqvvzi99ac">categorize</a> and file bugs for all remaining failures. Stephen also made <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=788440#c9">progress</a> on implementation of ‘composite: accumulate’ and several timing bugs <a href="https://chromium.googlesource.com/chromium/src.git/+/c004564dcd80e078136866d21ab942e78a93753a">\[1\]</a>, <a href="https://chromium.googlesource.com/chromium/src.git/+/73b9e0f4905111da5034767d7956eca0940aaac0">\[2\]</a>, <a href="https://chromium.googlesource.com/chromium/src.git/+/108ec45b194b5e9a16d91e1ef0cd4dd145b00ae6">\[3\]</a>.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/F6s9bCRSGPI3ox1LoaVo_us5MdXRLJ5gCkqrzeF20F_go4G9UT5eZonbRBwF1y0gE9MLmVF2jv1O25KOU24O9HJnq4JjRZdVJn8G09zur5yGrefzXV4GQy4oraN7LHK4Xht_yoHc" height=143 width=283></td></td>
-
-<td><td>Off-Thread Paint Worklet 3..2..1..🚀</td></td>
-
-<td><td>"If the intersection between weird and usable is your thing, you’ll feel right at home with paint worklets!" </td></td>
-
-<td><td>This is a quote from the <a href="http://cssconfbp.rocks/speakers/jeremy/">Paint Worklet presentation</a> in CSSConf Budapest which comes with some neat <a href="https://paintlets.herokuapp.com">demos</a>. All the demos works flawlessly off the main thread (with --enable-blink-features=OffMainThreadCSSPaint). This sprint Xida (xidachen@) ensured Off-thread Paint Worklet has a <a href="https://docs.google.com/document/d/1XzfgvEE7B-RZId7vKPO3a7jzcCYqoc_0D80ggotAiQo/edit#">launch plan</a> as we get very close on enabling it on ToT. He also landed <a href="https://chromium.googlesource.com/chromium/src.git/+/80da06275c6afa7b54e8bac39e138b823538c7a1">metrics</a> and fixed multiple crashes <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1828063">\[1\]</a> <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1831790">\[2\]</a> <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1789828">\[3\]</a>.</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/64I_PDKy4pCiACJrwKM_0GJSrxwaH3brwuyujUBCIajbcEoxb765OQ-8AG99o-7-d51IKaIVnPS85H5uPOnl289GVIehkgk09fsXebobI6s9KGOU-8IxTHt3UeK4kzGH5O0euSju" height=139 width=283></td></td>
-
-<td><td>Viz-HitTesting launched 1% on Stable</td></td>
-
-<td><td>This sprint Viz hit-testing V2 was launched 1% on Stable for non-CrOS. This was a boring launch thanks to many bug-fixes landed beforehand. On <a href="https://docs.google.com/document/d/1BJK_lcOnY6W5_Gjex44dVxc-sKDBpw4YU0zJlKQlkao/edit#heading=h.1ba74q72laoc">Windows</a> it shows that we are 32% better than the existing behavior on how many hit tests are handled synchronously.</td></td>
-
-<td><td>The performance on CrOS in 78 beta is fascinating. <a href="https://docs.google.com/document/d/1YZ6NsxiiC3g6D6TTBcoKlCAgttoH2TA2PNX9R_Cxrkw/edit#heading=h.vlq2ywuvza4d">96%</a> hit tests are synchronous. \\o/</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td>Code Health and Interop</td></td>
-
-<td><td>Stephen (smcgruer@) worked on improving web interoperability and compatibility by <a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/dxDGBFKvO3A/A2gajDMjAwAJ">shipping</a> ontransition event handlers. He spent time understanding webkit-prefixed versions usage and devised a plan for removal or standardization (<a href="https://github.com/whatwg/compat/issues/118">whatwg</a>, <a href="https://chromium.googlesource.com/chromium/src.git/+/85c09dce313fac83a250fd035b85fa7606f8b080">code</a>). George (gtsteel@) <a href="https://github.com/w3c/csswg-drafts/pull/4306">improved</a> css transitions specification and added new and cleaned up existing relevant tests <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1807297">\[1\]</a>, <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1809508">\[2\]</a>. Yi (yigu@) <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1825720">removed</a> special compositing logic for ScrollTimeline making it simpler and more general.</td></td>
-
-<td><td>Team Changes</td></td>
-
-<td><td>Sadly our amazing Stephen (smcgruer@) is leaving the Animations team to join Ecosystem infrastructure team. While we are sad to see him leaving our team, we are happy that his passion, skills and leadership are going to have a large impact on the Web making it more interoperable. To ensure a smooth transition we have marked all bugs assigned to him as Hotlist-Interop ;). On the good news front, we have a new intern Kaan (alsan@) who is going to make Scroll Snapping more excellent, and noogler Haozhe (haozhes@) joining the team.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | September 2019</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/highlights-archive/web-animation-scroll-linked-animation-snap-after-layout-throughput-metrics-and-more/index.md b/chromium/docs/website/site/teams/animations/highlights-archive/web-animation-scroll-linked-animation-snap-after-layout-throughput-metrics-and-more/index.md
deleted file mode 100644
index 8c9f9251edb..00000000000
--- a/chromium/docs/website/site/teams/animations/highlights-archive/web-animation-scroll-linked-animation-snap-after-layout-throughput-metrics-and-more/index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-- - /teams/animations/highlights-archive
- - Highlights Archive
-page_name: web-animation-scroll-linked-animation-snap-after-layout-throughput-metrics-and-more
-title: Web Animation, Scroll-linked Animation, Snap after layout, throughput metrics
- and more!
----
-
-<table>
-<tr>
-
-<td>February 2020</td>
-
-<td>Chrome Animations Highlights</td>
-
-<td>Archives: <a href="http://go/animations-team-highlights">go/animations-team-highlights</a></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td><img alt="image" src="https://lh6.googleusercontent.com/Duuu09yTSsJWnz8tD3LTf_8Efkat2mPX-57vvznGOi2ztEqT4jaREe0m6l_HTxhef-ztUn4IM2QsVA5VRpqu1DAQuJF2IMnuzkgnY1pXx5UneEIkdF88GxKN6LhRkMB1_9WfN48Q" height=360 width=254><img alt="image" src="https://lh5.googleusercontent.com/Pq6YWdKed4hu4OrROqEtMyda4ULyRcRr_Vvf6OAs2OMibUkmCQrZ7khiug4QjV2pEEAwpmaKAMQjdUQLaNrKvHS3z5VvNQ0s0s-KbOTJ9Ww1FwFlcK1-RY_ff41-jU-zirkVrgWD" height=359 width=329></td>
-
-<td>A further step of scroll-snap after layout</td>
-
-<td>In January we turned on the feature by default in Chrome 81. To better communicate with developers to deliver the feature to users, Yi (yigu@) worked with Adam (argyle@) and Kayce (kayce@) from the Web DevRel team and published a <a href="https://web.dev/snap-after-layout/">blog post</a> on <a href="http://web.dev">web.dev</a> with fresh demos. As Rick (rbyers@) <a href="https://twitter.com/RickByers/status/1235318530565984257">pointed out</a>, for years web developers have been asking how to keep the scroller from a chat app reliably stuck at the bottom. With scroll-snap after layout, developers can easily implement it with pure CSS (left gif). Moreover, they no longer need to add event listeners to force resnapping after layout changes such as rotating a device or resizing a window (right gif)!</td>
-
-<td><table></td>
-<td><tr></td>
-
-<td><td>function flip() {</td></td>
-
-<td><td> anim.playbackRate = -anim.playbackRate;</td></td>
-
-<td><td>}</td></td>
-
-<td><td>Updating playbackRate caused unwanted jumping back and forwards, as an animation was not marked as outdated when resuming from a finished state.</td></td>
-
-<td><td><img alt="image" src="https://lh4.googleusercontent.com/qwecDRWN-ff5APjwvnBG-lmKnBTblQKFibqIJ5yQYJHSSRfZ63ccR-CfQqoLbl65JRktpUKHNl56OtALLB5C7vaGrRKnfotZxaxwCPpfe58vxam0XFKjTDCiKlBz1gXOjMWWbnuO" height=147 width=265></td></td>
-
-<td></tr></td>
-<td></table></td>
-
-<td><table></td>
-<td><tr></td>
-
-<td></tr></td>
-<td><tr></td>
-<td></tr></td>
-<td><tr></td>
-
-<td><td>document.body.addEventListener(</td></td>
-
-<td><td> 'mousemove', evt =&gt; {</td></td>
-
-<td><td> const animation = circle.animate(</td></td>
-
-<td><td> { transform : 'translate(...)' },</td></td>
-
-<td><td> { duration: 500, fill: 'forwards' }</td></td>
-
-<td><td> );</td></td>
-
-<td><td> animation.finished.then(() =&gt; {</td></td>
-
-<td><td> animation.commitStyles();</td></td>
-
-<td><td> animation.cancel();</td></td>
-
-<td><td> });</td></td>
-
-<td><td>});</td></td>
-
-<td><td><img alt="image" src="https://lh6.googleusercontent.com/z5MCQctf8obsWW1sjlgqFKVR3vS4cvO9hnmJ3ORHu-uxuQ4gNeW7zFmIcMfLcXDUrERJdXJRn6ZWz7sO8rB7dGd_7R1qqRcLVnh4jSyYikPLrFqVHMsbVL3r_28KYcHMpCJuPiJv" height=133 width=248></td></td>
-
-<td><td>Require layout object when resolving style since style could be box size dependent.</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2># Animation.commitStyles did not correctly handle transforms</td></td>
-
-<td></tr></td>
-<td><tr></td>
-
-<td><td colspan=2>Web Animation on the way</td></td>
-
-<td><td colspan=2>The team has made solid progress on new features and bug fixes. Kevin fixed the two regressions above. George (gtsteel@) completed the work on pseudo-element animations on both <a href="https://github.com/w3c/csswg-drafts/pull/4616">specification</a> and <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2031986">implementation</a> sides. As usual, Hao (haozhes@) made our implementation more interoperable by passing more wpt tests!</td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh4.googleusercontent.com/qUQHx8YY3PrU0F3X-9OfErZR9IwlHsKsCElzfR8h0v9xGR824m708ECrqY_z6gvJHTRSIQWJH1pol7Sshj9rd2BkRqU0Q3jH8H8RSXVTZcXyO5NgXO4zigsDSUzncj_vUbXVvJAj" height=248 width=555></td></td>
-
-<td><td colspan=2><img alt="image" src="https://lh4.googleusercontent.com/tg1Bvj-WJkkw_QW8zVhsgu5AEO-blW-gYIZZL_l-nqcDPxQO89L0l3JIREtJ0-XMhXmEMIy-xDC36QbWsi-LsbHRpy8-7p57ppOCoyI922ZnUvkn64INt1hyGlg_J9HbZzCkov1a" height=251 width=555></td></td>
-
-<td><td colspan=2>A new path of throughput metrics</td></td>
-
-<td><td colspan=2>Frame throughput measures the smoothness of Chrome renderer. i.e. higher is better. However, it makes the UMA timeline hard to read. e.g. usually 90th percentile represents the 90% users with better results but it’s opposite in the throughput metrics. To better align with the UMA timeline, Xida (xidachen@) inverted the metrics Throughput with PercentDroppedFrames which still measures the performance but in a more readable way. For example, the graph in the above shows that at 90th percentile we have ~80% frames dropped.</td></td>
-
-<td><td colspan=2>Scroll-linked animations</td></td>
-
-<td><td colspan=2>We have been collaborating with Microsoft engineers towards shipping scroll-linked animations. Both Majid (majidvp@) and Olga (<a href="mailto:gerchiko@microsoft.com">gerchiko@microsoft.com</a>) became the <a href="https://drafts.csswg.org/scroll-animations/">specification editors</a> which helps with driving specification discussions and updates. This month, Majid wrote a <a href="https://github.com/w3c/csswg-drafts/pull/4751">PR</a> for css syntax and reviewed <a href="https://github.com/w3c/csswg-drafts/pull/4750">PR</a> to remove ScrollTimeline.fill. Gene (girard@) and Rob (flackr@) helped with reviewing all the outstanding spec issues and prioritized them. On the implementation side, Olga made solid progress on implementing scroll offset <a href="https://wicg.github.io/scroll-animations/#avoiding-cycles">snapshotting</a>; Majid started to prototype <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2070673">element based scroll offset</a> and Yi started to add support for <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2084088">composited scroll-linked animations</a>.</td></td>
-
-<td></tr></td>
-<td></table></td>
-
-</tr>
-</table>
-
-<table>
-<tr>
-
-<td>Chrome Animations Highlights | February 2020</td>
-
-<td><a href="http://go/animations-team">go/animations-team</a></td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/index.md b/chromium/docs/website/site/teams/animations/index.md
deleted file mode 100644
index 7a09e18f89e..00000000000
--- a/chromium/docs/website/site/teams/animations/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: animations
-title: Animations Team
----
-
-The animations team is an engineering team that aims to enable web developers to
-deliver a smoother more responsive web.
-
-The team is responsible for maintaining and improving the animations
-infrastructure, correctly effecting threaded scrolling and related effects
-(fixed/sticky position, scroll snapping, etc) in the composited property trees,
-and ensuring that sufficient targeting and hit testing information is generated
-from Blink.
-
-See also our concrete [quarterly
-objectives](/teams/animations/animation-objectives).
-
-## Goals
-
-* Performance - Smooth user interaction and animations (reliable 60fps
- on today's hardware, 120 fps on tomorrow's)
-* Predictability - Interoperable animations APIs on the 4 major
- browser engines.
-* Capabilities - Enable rich scroll and input linked effects popular
- on mobile applications.
-
-## Activities
-
-The animations team is driving several ongoing efforts.
-
-* Houdini
- * [Animation Worklet](/teams/animations/animation-worklet)
- * [Paint Worklet](/teams/animations/paint-worklet)
-* Optimized hit testing
-* CSS Scroll Snap
-* Web Animations
-* [Scroll-linked Animations (Scroll
- Timeline)](https://drafts.csswg.org/scroll-animations)
-
-We send out an ~monthly newsletter with our activities; feel free to [check out
-our archives](/teams/animations/highlights-archive).
-
-## Organization
-
-### Mailing lists
-
-The team uses a public mailing list for technical discussions, questions, and
-announcements.
-
-Email address: [animations-dev@chromium.org](mailto:animations-dev@chromium.org)
-
-Web archives:
-[animations-dev](https://groups.google.com/a/chromium.org/forum/#!forum/animations-dev)
-
-We are also available in #animations on the [Chromium
-Slack](https://docs.google.com/document/d/1nCqDQEF2pW5cUMNBBZPP20DZ7TVCu58ylhCk_Q8LqU4/edit).
-
-### Weekly Meeting
-
-There are two tri-weekly (once every three weeks) meeting held over video
-conference on Tuesdays and another on Fridays for planning and going over
-results. If you're interested in participating please reach out on the mailing
-list or slack and we can share instructions.
-
-The meetings follow the following schedule:
-
-* Week 1: Planning meeting on Tuesday 2:30pm EST, [meeting
- notes](http://bit.ly/animations-team-planning)
-* Week 3: Demo meeting on Friday 11:00am EST, [meeting
- notes](https://docs.google.com/document/d/15SH-FgMd0jPtUcPs_3A_JI9sOwmA1JrEZOHvIM8wIm0/edit?usp=sharing)
-
-Highlights from the demo meetings are shared in our ~monthly newsletter, see
-Activities above.
-
-## Bug Triage
-
-The animations team is responsible for bugs filed in the
-[Blink&gt;Animation](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink%3EAnimation+&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids),
-[Internals&gt;Compositing&gt;Animation](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3AInternals%3ECompositing%3EAnimation&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids),
-[Internals&gt;Compositing&gt;Scroll](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3AInternals%3ECompositing%3EScroll&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids)
-components.
-
-The team has a daily triage to confirm, triage, and categorize incoming bugs in
-these components.
-
-## Related teams
-
-[Input](/teams/input-dev)
-
-[Rendering](/teams/rendering) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/animations/paint-worklet/index.md b/chromium/docs/website/site/teams/animations/paint-worklet/index.md
deleted file mode 100644
index 30006a4d825..00000000000
--- a/chromium/docs/website/site/teams/animations/paint-worklet/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/animations
- - Animations Team
-page_name: paint-worklet
-title: Paint Worklet
----
-
-Paint Worklet, also known as the [CSS Paint
-API](https://developers.google.com/web/updates/2018/01/paintapi), is an effort
-to enable web developers deeper control of how elements on their page are
-painted. More details can be found in the
-[spec](https://www.w3.org/TR/css-paint-api-1/), but in short the API allows
-developers to specify a custom JavaScript function for any CSS attribute that
-can take a CSS
-[&lt;image&gt;](https://developer.mozilla.org/en-US/docs/Web/CSS/image) type.
-When the particular part needs to be painted, the JavaScript function is called
-with a
-[PaintRenderingContext2D](https://www.w3.org/TR/css-paint-api-1/#paintrenderingcontext2d)
-that can be drawn into:
-
-paint(ctx, size) { ctx.fillStyle = 'green'; ctx.fillRect(0, 0, size.width,
-size.height); }
-
-This functionality first shipped in [Chrome
-M65](https://developers.google.com/web/updates/2018/03/nic65).
-
-Off-Thread Paint Worklet
-
-Off-Thread Paint Worklet ([design
-doc](https://docs.google.com/document/d/1USTH2Vd4D2tALsvZvy4B2aWotKWjkCYP5m0g7b90RAU/edit?ts=5bb772e1#heading=h.2zu1g67jbavu))
-is an ongoing effort (as of 2019/01) to run the developer-provided paint
-functions on a different thread than the main rendering loop, and asynchronously
-from the standard document lifecycle. The goal is performance isolation, to
-allow smooth animation of Paint Worklet-painted elements even when the main
-thread is busy. This is considered an architectural improvement project and
-should not be visible to web developers (other than in improved performance of
-pages that use Paint Worklets). \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/binding-team/index.md b/chromium/docs/website/site/teams/binding-team/index.md
deleted file mode 100644
index 258b7e160e9..00000000000
--- a/chromium/docs/website/site/teams/binding-team/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: binding-team
-title: Binding Team
----
-
-## Goals
-
-* [Binding team
- OKRs](https://easyokrs.googleplex.com/edit/binding-dev/)
- (Google-internal only)
-
-## Projects
-
- Make Window objects interoperable
- ([Overview](https://docs.google.com/presentation/d/18Ap_EKEBu7nzDrlFM7FbCR4EgrNd3ryLabJUh-YvEwM/edit?disco=AAAAARwFnJ0&pli=1#slide=id.g2480feb0_1_0))
-
- Script-disabled rendering
- ([Overview](https://docs.google.com/document/d/1p0yHAhx_DLOlP94LzcuGcr5KS0rGBEPhyLeVa6KZs7k/edit))
-
-We're sending weekly snippets to
-[blink-dev@](https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev)
-(Search "binding team snippet").
-
-## Members
-
-haraken@chromium.org (TL)
-
-yukishiino@chromium.org
-
-bashi@chromium.org (mostly spending time on memory team)
-
-tasak@chromium.org (mostly spending time on memory team)
-
-jl@opera.com (mostly spending time on other stuff)
-
-Contact blink-reviews-bindings@chromium.org if you have any feedback or
-questions. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/device-team/index.md b/chromium/docs/website/site/teams/device-team/index.md
deleted file mode 100644
index 8c157e13bec..00000000000
--- a/chromium/docs/website/site/teams/device-team/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: device-team
-title: Device Team
----
-
-The device team works on increasing Web App capabilities by exposing device
-features.
-
-Components:
-
-* Blink&gt;Bluetooth
-* Blink&gt;HID
-* Blink&gt;GamepadAPI
-* Blink&gt;Geolocation
-* Blink&gt;NFC
-* Blink&gt;Sensor
-* Blink&gt;Serial
-* Blink&gt;USB
-* Blink&gt;WakeLock
-* IO&gt;Bluetooth
-* IO&gt;HID
-* IO&gt;Gamepad
-* IO&gt;USB
-
-## Communication
-
-* device-dev@chromium.org [email
- group](https://groups.google.com/a/chromium.org/forum/#!forum/device-dev).
-* [#fugu channel on Chromium
- Slack](https://app.slack.com/client/T039UTRBS/CGJU5JZAS) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/devtools/index.md b/chromium/docs/website/site/teams/devtools/index.md
deleted file mode 100644
index b45f18125fd..00000000000
--- a/chromium/docs/website/site/teams/devtools/index.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: devtools
-title: DevTools
----
-
-The DevTools team mission is to
-
-> Make Chrome DevTools the web development tool of choice,
-
-> and help web developers adopt web platform’s best
-
-> features and practices in support of their success.
-
-Please also see our concrete [Chrome DevTools team
-OKRs](https://easyokrs.googleplex.com/view/chrome-devtools) (Google-internal
-only).
-
-**Design Documents**
-
-For proposing contributions, please refer to our [design
-guidelines](https://chromium.googlesource.com/devtools/devtools-frontend/+/HEAD/docs/design_guidelines.md).
-
-**Contact**
-
-The team uses a public mailing list for technical discussions, questions, and
-announcements.
-
-Email address: [devtools-dev@chromium.org](mailto:devtools-dev@chromium.org)
-
-Web archives:
-[devtools-dev](https://groups.google.com/a/chromium.org/forum/#!forum/devtools-dev)
-
-**Bug Triage**
-
-The DevTools team is responsible for bugs filed for the
-[Platform&gt;DevTools](https://bugs.chromium.org/p/chromium/issues/list?q=component%3APlatform%3EDevTools)
-component.
-
-**Members**
-
-* yangguo@chromium.org (EngM)
-* hablich@chromium.org (TPM)
-* bmeurer@chromium.org (TL)
-* sawallner@chromium.org (PM)
-* petermueller@chromium.org (UX)
-* jec@chromium.org (DevRel)
-* aerotwist@chromium.org
-* alexrudenko@chromium.org
-* andoli@chromium.org
-* changhaohan@chromium.org
-* jacktfranklin@chromium.org
-* janscheffler@chromium.org
-* kimanh@chromium.org
-* leese@chromium.org
-* mathias@chromium.org
-* petermarshall@chromium.org
-* pfaffe@chromium.org
-* sadym@chromium.org
-* sigurds@chromium.org
-* szuend@chromium.org
-* tvanderlippe@chromium.org
-* wolfi@chromium.org \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/dom-team/index.md b/chromium/docs/website/site/teams/dom-team/index.md
deleted file mode 100644
index 94b0cb07500..00000000000
--- a/chromium/docs/website/site/teams/dom-team/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: dom-team
-title: DOM Team
----
-
-The DOM team is (as of spring 2019) now part of the
-[rendering](/teams/rendering) super-team. More information will be added here
-soon.
-
-**Contact:**
-
-* dom-dev@chromium.org
-* masonfreed@chromium.org
-* yuzhehan@chromium.org
-* jarhar@chromium.org \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/ecosystem-infra/index.md b/chromium/docs/website/site/teams/ecosystem-infra/index.md
deleted file mode 100644
index 23f11bd2038..00000000000
--- a/chromium/docs/website/site/teams/ecosystem-infra/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: ecosystem-infra
-title: Ecosystem infra
----
-
-*Last updated: July 2019*
-
-"Establish the infrastructure and culture of testing for the web ecosystem to
-ensure a predictable experience."
-
-Our vision is for the web platform to be engineered as a single, cohesive
-product. As a natural outcome of our engineering practices and norms, a change
-to any one part of the ecosystem reliably propagates to all others, with minimal
-friction. The top priority is real-world interoperability of implementations;
-standards and tests are important means to that end.
-
-[Team Charter](https://bit.ly/ecosystem-infra) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/index.md b/chromium/docs/website/site/teams/index.md
deleted file mode 100644
index c9d1061e99e..00000000000
--- a/chromium/docs/website/site/teams/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-breadcrumbs: []
-page_name: teams
-title: Teams
----
-
-{% subpages collections.all %}
diff --git a/chromium/docs/website/site/teams/input-dev/index.md b/chromium/docs/website/site/teams/input-dev/index.md
deleted file mode 100644
index 428d6a95f54..00000000000
--- a/chromium/docs/website/site/teams/input-dev/index.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: input-dev
-title: Input Team
----
-
-*The Chromium Input team (aka input-dev)* is a web platform team focused on
-making touch (P1) and other forms of input (P2) awesome on the web. High-level
-goals:
-
-* Measure & improve input-to-paint latency. Web pages should stick to
- your finger!
-* Reduce web-developer pain points around input and scrolling,
- including improving interoperability between browser engines,
- predictability, simplicity and consistency between chromium
- platforms.
-* Enable high-performance rich touch interactions (such as
- pull-to-refresh) on the web.
-* Ensure Chrome UI features driven by input over the contents area
- provide a great experience to both end-users and web developers.
-* Enable the productivity of any chromium developer working with
- input-related code through effective code ownership and code health
- initiatives.
-
-See also our concrete [quarterly objectives](/teams/input-dev/input-objectives).
-
-**Contacts**
-
-[input-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/input-dev)
-is our mailing list, and we also use the #input-dev channel on [Chromium
-Slack](https://chromium.slack.com).
-
-**Useful bug queries**
-
-* [Blink&gt;input,
- Blink&gt;scroll](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink%3EInput%2CBlink%3EScroll&sort=-id+-modified+-opened&colspec=ID+Pri+Summary+Modified+Opened&x=m&y=releaseblock&cells=ids)
- - all (or most) bugs we're tracking
-* We triage the bugs almost daily with [this
- process](https://docs.google.com/document/d/1IDjoUbe8_1lbhM10EVHwvMi0g9EUXImy0ufxtfvJqe0/edit).
-* [Available
- bugs](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink%3EInput%2CBlink%3EScroll+status%3AAvailable+&sort=-id+-modified+-opened&colspec=ID+Pri+Summary+Modified+Opened&x=m&y=releaseblock&cells=ids)
-* [Code cleanup
- ideas](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3ABlink%3EInput%2CBlink%3EScroll+Hotlist%3DCodeHealth+&sort=-id+-modified+-opened&colspec=ID+Pri+Summary+Modified+Opened&x=m&y=releaseblock&cells=ids)
-
-**Related specifications & Working Groups**
-
-If you want to get involved with any of the specifications or just get all the
-updates make sure to join their public mailing lists as well.
-
-* [W3C UI Events](https://w3c.github.io/uievents/)
-* [W3C Pointer Events](https://w3c.github.io/pointerevents/)
-* [W3C Pointer Lock](https://w3c.github.io/pointerlock/)
-* [W3C Touch Events](https://w3c.github.io/touch-events/)
-* [W3C CSS](https://drafts.csswg.org/)
-* [WHATWG DOM](https://dom.spec.whatwg.org/)
-* [WHATWG HTML](https://html.spec.whatwg.org/)
-
-**Presentations & Talks**
-
-* [Overscroll
- Customization](https://www.youtube.com/watch?v=sp1R-0dd7qg&t=18m54s)
- lightning talk
-* [Scroll into
- text](https://www.youtube.com/watch?v=sp1R-0dd7qg&t=15m50s)
- lightning talk
-* [Event Delegation to
- Workers](https://docs.google.com/presentation/d/1BCEbLCg-o_Ko65byel5QGnO7Cwf5aPZPjqnnMNbbA5E/edit#slide=id.g5636de1525_0_0)
-* [Fling On
- Browser](https://docs.google.com/presentation/d/1miFAvKuz7tRT4IX_nCwZshFkUDX8bDYqfPlTOm2LS8U/)
-* [Scroll & Input
- Prediction](https://docs.google.com/presentation/d/18Dv2KBJxHnNezrTCzz29IyczhJwSIs8kTzwl2FuvGq0/edit#slide=id.p)
-* [WPT
- Automation](https://drive.google.com/file/d/1eBa7OvO6O9UefK-AYkclFz46ArGZ5iyH/view)
-* [Browserside User
- Activation](https://docs.google.com/presentation/d/1sEBwQZJ8w47OC7m2LexiJor8nUWPhqDaXqP5aWhYK60/)
-* [Root
- Scroller](https://docs.google.com/presentation/d/1nfM4jjQt9pijIThK8KSwavdZtWgifDjo6odHNg-ThvM/)
-* Extensible Scrolling - BlinkOn 3 (Nov 2014):
- [slides](https://docs.google.com/a/chromium.org/presentation/d/1P5LYe-jqC0mSFJoBDz8gfJZMDwj6aGeFYLx_AD6LHVU/edit#slide=id.p),
- [video](https://www.youtube.com/watch?v=L8aTuoQWI8A)
-* [Smooth to the touch: chromium's challenges in input on
- mobile](https://docs.google.com/a/chromium.org/presentation/d/1VYfCKye4TM-QiR_hiLvwYxhci_xc5YcA4oZxtrp2qes/edit#slide=id.p)
- - BlinkOn 2 (May 2014)
-* [Input - BlinkOn
- 1](https://docs.google.com/a/chromium.org/presentation/d/1J1jG0XF6k42PA4s-otHFXZxrou7aKwYKYF90xPOe9bQ/edit#slide=id.p)
- (Sept 2013)
-* [Point, click, tap, touch - Building multi-device web
- interfaces](https://developers.google.com/events/io/sessions/361772634)
- - Google I/O 2013
-
-**Design Docs**
-
-* [Scroll
- Unification](https://docs.google.com/document/d/1op5USoxDnN6yxB8EiFHYcGHacrZZRVKVqu4mSXFd6Ns/edit)
-* [Chromium input latency
- tracking](https://docs.google.com/a/chromium.org/document/d/1NUYMVyUJSU2NYrpGhKNfjSmmVZyPYoqbrPs7tbdY9PY/edit)
-* [Scroll-blocks-on: scrolling performance vs. richness
- tradeoff](https://docs.google.com/a/chromium.org/document/d/1aOQRw76C0enLBd0mCG_-IM6bso7DxXwvqTiRWgNdTn8/edit)
-* [Chromium throttled async touchmove
- scrolling](https://docs.google.com/a/chromium.org/document/d/1sfUup3nsJG3zJTf0YR0s2C5vgFTYEmfEqZs01VVj8tE/edit)
-* [Gesture
- Recognition](http://www.chromium.org/developers/design-documents/aura/gesture-recognizer)
-* [Vsync-aligned buffered
- input](https://docs.google.com/document/d/1L2JTgYMksmXgujKxxhyV45xL8jNhbCh60NQHoueKyS4/edit?usp=sharing)
-* [Touchpad and Wheel
- Latching](https://docs.google.com/document/d/1BizkQyW_FDU98sGxbHOZsAQWGYIA3xxXoFQZ3_XNo1o/edit)
-* [Touchpad pinch
- zoom](https://docs.google.com/document/d/1cYdt9r9stHLA2lbJ2I-Ucl_djhdSyngYFbmufZaLRHE/edit?usp=sharing)
-* User Activation v2
- * [How Chrome uses user
- gestures](https://docs.google.com/document/d/1mcxB5J_u370juJhSsmK0XQONG2CIE3mvu827O-Knw_Y/edit?usp=sharing)
- (May 2017)
- * [Case study: Popup with user-activation across
- browsers](https://docs.google.com/document/d/1hYRTEkfWDl-KO4Y6cG469FBC3nyBy9_SYItZ1EEsXUA/edit?usp=sharing)
- (May 2017)
- * [User Activation v2: Main
- design](https://docs.google.com/document/d/1erpl1yqJlc1pH0QvVVmi1s3WzqQLsEXTLLh6VuYp228/edit?usp=sharing)
- (May 2017)
- * [User Activation v2 with site
- isolation](https://docs.google.com/document/d/1XL3vCedkqL65ueaGVD-kfB5RnnrnTaxLc7kmU91oerg/edit?usp=sharing)
- (May 2018)
-* Input for Worker:
- * Initial design discussion: [Low-latency Event Handling in
- Worker](https://docs.google.com/document/d/165f85uAKlknlQHwPkmpqLVq0O50XVkxzgTkO4utAsds/edit?usp=sharing)
- (July 2017)
- * JS API proposals for [Routing Worker Events through the
- Compositor
- Thread](https://docs.google.com/a/chromium.org/document/d/1Ah3-O7Emp7cURyh-TINME0fId9laU0ctMCwjmlArgqU/edit?usp=sharing)
- (July 2017)
-* [Plumbing mouse as mouse on
- Android](https://docs.google.com/document/d/1mpBR7J7kgTXvp0QACVjhxtwNJ7bgGoTMmxfxN2dupGg/edit?usp=sharing)
- (October 2016)
-* [Coalesced
- Events](https://docs.google.com/document/d/1x-e8fH3I0DBrmrNufPQwRJHMYnW5q9CYZVEHe7BsfpI/edit?usp=sharing)
- (October 2016)
-
-# **Learning Resources**
-
-* [Chromium touch pipeline
- overview](https://docs.google.com/a/chromium.org/presentation/d/10oIOTWFKIHArnfk8ZZx-9evvDpWC9EwRjDrZIz83Dz0/edit)
-* [Scrolling in blink](http://bit.ly/blink-scrolling)
-* [Android tracing cheat
- sheet](https://docs.google.com/presentation/u/1/d/1poMF7AEu5vd21BzUTIYfm2SXurEMlv2OVDlzs6JNRfg/edit?usp=sharing)
-* [Blink coordinate
- spaces](/developers/design-documents/blink-coordinate-spaces)
-* [Touch event behavior details across
- browsers](https://docs.google.com/a/chromium.org/document/d/12k_LL_Ot9GjF8zGWP9eI_3IMbSizD72susba0frg44Y/edit#heading=h.nxfgrfmqhzn7)
-* [Issues with touch
- events](https://docs.google.com/a/chromium.org/document/d/12-HPlSIF7-ISY8TQHtuQ3IqDi-isZVI0Yzv5zwl90VU/edit#heading=h.spopy4jje82p)
-* [Debugging common website touch
- issues](https://docs.google.com/a/chromium.org/document/d/1iQtI4f47_gBTCDRALcA4l9HL_h-yZLOdvWLUi2xqJXQ/edit) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/input-dev/input-objectives/2015-okrs/index.md b/chromium/docs/website/site/teams/input-dev/input-objectives/2015-okrs/index.md
deleted file mode 100644
index 853a090eeb9..00000000000
--- a/chromium/docs/website/site/teams/input-dev/input-objectives/2015-okrs/index.md
+++ /dev/null
@@ -1,428 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/input-dev
- - Input Team
-- - /teams/input-dev/input-objectives
- - Input Objectives
-page_name: 2015-okrs
-title: 2015 OKRs
----
-
-## 2015 Q4 0.54
-
-### Improve input latency and smoothness 0.40
-
-## Ensure mean_input_event_latency time remains under 12ms on N5/One for 90% of
-key_mobile_sites_smooth at least 90% of the time P2 1.00
-
-## Get EventListenerOptions into official DOM event spec P1 0.70
-
-## Implement and ship EventListenerOptions to support registering passive event
-listeners. P1 0.30
-
-## Ship UX (hung renderer dialog) for unresponsive sites on Android P4 0.00
-
-## VSync-aligned touch input working with unified BeginFrame on Aura P4 0.00
-
-## Reduce smoothness.pathological_mobile_sites.first_gesture_scroll_update on
-the Nexus 5 by 20% P4 0.00
-
-## Impl side hit-testing against property-tree and display lists. P4 0.00
-
-### Improve understanding of real-world input performance 0.40
-
-## Expose hardware input timestamps to the web P1 0.95
-
-## Implement experimental input latency web API in M49 P1 0.00
-
-## Expose scroll latency in DevTools somehow P1 0.30
-
-## Concrete scroll latency API presented to web-perf WG at TPAC P1 0.10
-
-## All touch latency UMA regressions have appropriate owners within 3 weeks. P3
-1.00
-
-## Add UMA metrics for determining potential benefit of passive event listeners
-P2 1.00
-
-## Add touch latency metric measuring until estimated vsync time. P2 0.00
-
-## Better measure blink hit-test performance P4 0.00
-
-## Use input-related perf insights data to drive performance investigations, 12
-associated Hotlist-Jank bugs P4 0.10
-
-### Eliminate key developer pain points around input 0.56
-
-## Fix at least 150 Hotlist-Input-Dev bugs P1 0.60
-
-## Implement root-layer-replacement mechanism for fullscreen and non-body root
-scrollers P1 0.30
-
-## Ship more rational mode of top control resizes P1 0.60
-
-## Triage any new Blink-Input, Blink-Scroll bug within 7 days P1 1.00
-
-## Spec and land API to control Chrome pull-to-refresh nav gesture behind a flag
-P2 0.10
-
-## Drive adoption of history Scroll Restoration API P2 1.00
-
-## Implement unified OSK viewport behavior between Android and CrOS for M49
-behind a flag P3 0.50
-
-## \[STRETCH\] Allow "non-scrolling" apps to interact well with top controls
-(behind a flag) P4 0.00
-
-## \[STRETCH\] Implement new input modality media queries P4 0.00
-
-## \[STRETCH\] Implement position: device-fixed behind a flag P4 0.00
-
-### Improve interoperability between major browser engines 0.55
-
-## Enable automated input testing on Chrome for W3C web-platform-tests P1 0.50
-
-## Ship spec-correct body scroll API behavior P1 0.20
-
-## Make all position-related APIs relative to Layout Viewport P1 1.00
-
-## Make Chromium reliably send MouseLeave events to blink P1 0.60
-
-## Ship KeyboardEvent.key in M48 P1 0.20
-
-## Identify and fix 3 interop bugs with mouse events. P1 1.00
-
-## Triage all Hotlist-Interop bugs and find appropriate owners every week P2
-0.60
-
-## Fix international keyboard events P3 0.20
-
-## Ship HTMLSelect.open API P3 0.00
-
-### Enable rich scroll effects 0.45
-
-## Prototype snap-points implementation in M47 P1 0.40
-
-## Enable scroll customization on UIWorker thread P1 0.50
-
-## Ship scroll latching for touchpad behind a flag for one platform P4 0.10
-
-## Smooth scrolling for wheel and keyboard scrolls in Win/Linux enabled on trunk
-P2 0.90
-
-## STRETCH: Ship scroll latching for touchpad on all platforms P4 0.00
-
-## Prototype sticky implementation in M48 P1 0.40
-
-### Continue PointerEvent API implementation 0.73
-
-## Fire pointer events for all mouse events P1 1.00
-
-## Add chorded button transformation to mouse-&gt;pointer event generation logic
-P1 1.00
-
-## Update MouseEvent (and so PointerEvent) to support fractional co-ordinates P3
-0.20
-
-## Extend WebMouseEvent to become a pointer event API P3 0.00
-
-## Implement pointer-id ranges for all pointer types P2 1.00
-
-## Make PointerEvents work for stylus in CrOS & Android. P2 0.70
-
-## Force pointercancel firing with mouse off the page. P3 0.00
-
-## Add pointer event handler tracking P3 0.00
-
-## STRETCH: Explore design choices for explicit pointer capture support P4
-
-### Evolve touch platform UI 0.56
-
-## Ship unified touch text selection for native Aura UI P1 0.10
-
-## Make check boxes and radio buttons touch friendly without depending on touch
-adjustment P1 0.60
-
-## Support trackpad pinch-zoom on CrOS P2 0.80
-
-## Show touch selection handles when scrolling on CrOS P3 0.00
-
-## Close 10 text selection bugs P1 1.00
-
-### Improve UI Events spec and tests 0.69
-
-## Migrate UIEvent (and old Dom3Event) issues from Bugzilla to github P1 1.00
-
-## Reduce spec issue count down to less than 10 P1 0.40
-
-## Implement basic keyboard and mouse event tests in UIEvent repo P1 1.00
-
-## Merge UIEvent tests into main W3C tests P2 0.00
-
-### Improve code health
-
-## \[Stretch\] Plan for reducing at least one abstraction layer from input
-events P4 0.10
-
-## 2015 Q3 0.63
-
-### Improve input latency and smoothness 0.55
-
-## Ensure mean_input_event_latency time is under 12ms on Nexus 4 for 90% of
-key_mobile_sites at least 90% of the time P1 0.80
-
-## Get consensus on non-blocking event listener API P1 0.70
-
-## Implement non-blocking event listener API behind a flag in M46 P1 0.10
-
-## Approved UX design for unresponsive sites P1 0.60
-
-## Ship hit-test-cache eliminating redundant hit tests in GestureTap and PEP
-shadow DOM P1 1.00
-
-## Drive investigation of regressions in touch latency UMA data P1 0.80
-
-## File 30 concrete Hotlist-Jank bugs (eg. from "perf parties") P1 0.30
-
-## Concrete plan for forced non-blocking event listeners P2 0.20
-
-## Better measure and improve blink hit-test performance P2 0.20
-
-## Reduce smoothness.pathological_mobile_sites.first_gesture_scroll_update on
-the Nexus 4 by 25% P2 0.60
-
-## STRETCH: Ship experiment for validity-rect based hit-test caching P3 0.00
-
-## Expose hardware input timestamps to the web 0.85
-
-## Concrete plan for input latency API on the web 0.30
-
-### Improve interoperability between major browser engines 0.63
-
-## Enable automated input testing on Chrome for W3C web-platform-tests P1 0.70
-
-## Ship Event.isTrusted P1 1.00
-
-## Ship viewport scroll behavior matching IE in M46 P1 0.90
-
-## Ship spec-correct body scroll API behavior in M46 P1 0.40
-
-## Share interoperability tracking plan with blink-dev and other vendors P1 0.60
-
-## Triage all Hotlist-Interop bugs and find appropriate owners every week P1
-0.40
-
-## Ship interoperable mouse-drag behavior across iframes P2 0.10
-
-## Make Chromium reliably send MouseLeave events to blink P2 0.40
-
-## Ship KeyboardEvent.code in M47 0.90
-
-## Finish implementing KeyboardEvent.key behind a flag 0.75
-
-### Eliminate key developer pain points around input 0.68
-
-## Fix at least 100 Hotlist-Input-Dev bugs P1 1.00
-
-## Ship history scroll state customization API in m46 P1 1.00
-
-## Ship InputDevice and sourceDevice API in M46 P1 0.90
-
-## Implement top-control hiding for full-page scrollable divs behind a flag P1
-0.20
-
-## Reduce untriaged Cr-Blink-Input and Cr-Blink-Scroll bugs to ~0 P2 0.90
-
-## File and investigate concrete bugs for accessibility issues around full-page
-scrollable divs P4
-
-## Allow "non-scrolling" apps to interact well with top controls (behind a flag)
-P2 0.20
-
-## Full-featured mouse support on Android (text selection, context menu's,
-etc...) P2
-
-## STRETCH: Dynamic support for interaction media queries P4 0.00
-
-## STRETCH: Implement unified OSK viewport behavior between Android and CrOS for
-M46 behind a flag P4 0.00
-
-### Evolve touch platform UI 0.79
-
-## Ship remaining M input features (stylus zoom, floating toolbars, perf test
-for smart select) P1 1.00
-
-## Ship unified touch text selection in M46 for web contents in Aura P1 1.00
-
-## Ship unified touch text selection for native Aura UI P3 0.10
-
-## Make check boxes and radio buttons touch friendly without depending on touch
-adjustment P2 0.75
-
-## (STRETCH) Fix cross-site navigation GestureNav issue P4 0.00
-
-## Support trackpad pinch-zoom on CrOS P2 0.70
-
-## (STRETCH) Show touch selection handles when scrolling on CrOS P4 0.00
-
-### Continue PointerEvent API implementation 0.67
-
-## Measure multi-touch pointer event dispatch overhead P1 0.90
-
-## Fire pointer events for all mouse events P1 0.65
-
-## Update MouseEvent (and so PointerEvent) to support fractional co-ordinates P2
-0.20
-
-## Add chorded button transformation to mouse-&gt;pointer event generation logic
-P2 0.20
-
-## Start extending WebMouseEvent to become a pointer event API P1 0.70
-
-## Add stylus support for Android P2 0.75
-
-## Finish pointercancel support for touch P2 1.00
-
-### Enable rich scroll effects 0.65
-
-## Prototype snap-points implementation in M46 P1 0.50
-
-## Enable scroll customization on UIWorker thread P1 0.50
-
-## Enable main-thread scroll customization driven by touch input - behind a flag
-P2 0.90
-
-## Ship scroll latching for touch in M47 P2 1.00
-
-## 2015 Q2 0.53
-
-### Improve focus on reducing user pain around input on the web 0.60
-
-## Reduce untriaged Cr-Blink-Input and Cr-Blink-Scroll bugs to 0 0.20
-
-## Fix at least 80 Hotlist-Input-Dev bugs 1.00
-
-### Improve touch web platform rationality 0.64
-
-## Ship history scroll state customization API in m44 P1 0.60
-
-## Implement sourceDevice.firesTouchevents for MouseEvent and TouchEvent behind
-a flag in M44 P1 0.85
-
-## Ship spec-correct body scroll API behavior in M45 P1 0.50
-
-## Get consensus in w3c on InputDevice api spec P1 0.60
-
-## Enable (and fix) mouseenter / mouseleave behavior for touch in M44 P1 1.00
-
-## Ship async touchmove event coalescing in M44 P1 0.90
-
-## Full-featured mouse support on Android (text selection, context menu's,
-etc..., potentially behind a flag) P2 0.20
-
-## Finish implementing UIEvent.sourceDevice for all scenarios in M45 (behind a
-flag) P1 0.50
-
-## Enable dynamic support for interaction media queries in X11 and Android in
-M45 P3 0.00
-
-## STRETCH: Ship InputDevice and sourceDevice API in M45 P4 0.00
-
-### Rationalize viewport behvior 0.50
-
-## Mature Virtual Viewport 0.80
-
-## Ship viewport scroll behavior matching IE in M44. 0.60
-
-## Allow "non-scrolling" apps to interact well with top controls (behind a flag)
-0.00
-
-## Implement unified OSK viewport behavior between Android and CrOS for M45
-behind a flag 0.00
-
-### Improve input latency and smoothness 0.65
-
-## Ensure mean_input_event_latency time is under 12ms on Nexus 4 for 80% of
-key_mobile_sites at least 80% of the time P1 0.80
-
-## Avoid sending touchmove's to Blink when unnecessary, with associated metrics
-to track efficacy P3 0.20
-
-## Reduce mean_input_event_latency on Nexus 4 for
-sync_scroll.key_mobile_sites_smooth by 10%, with blame analysis for current
-pathological cases P2 0.60
-
-## VSync-aligned touch input behind a flag for Aura P3 0.20
-
-## Drive investigation of regressions in touch latency UMA data P2 0.70
-
-## Ship hit-test-cache in M45 eliminating redundant hit tests in GestureTap and
-PEP shadow DOM scenarios P2 0.40
-
-## Stop sending mousemove events during scroll on desktop and add relevant perf
-tests in M44 P1 0.85
-
-### Enable scroll-synchronized effects (behind a flag) 0.20
-
-## Approved design for unified scrolling, with prototype for compositor
-scrolling P1 0.30
-
-## Implement scroll-snap-points for impl-thread scrolling behind a flag in M45
-P1 0.30
-
-## Consensus within chrome team on initial design for sync-scroll jank
-mitigation P1 0.20
-
-## sync-scroll fully implemented (with jank mitigation on Android) behind a flag
-in M45 P2 0.00
-
-## Ship main-thread fractional scrolling in M44 P2 0.00
-
-### Enable scroll customization (main thread only, behind a flag) 0.45
-
-## Enable main-thread scroll customization driven by touch input - behind a flag
-in M44 0.50
-
-## Enable main-thread scroll customization driven by JS triggered scrolls - ship
-behind a flag in M45 0.00
-
-## Publish high quality demos, add telemetry perf tests 0.40
-
-## STRETCH: Enable scroll customization on UIWorker thread 0.10
-
-## STRETCH: Enable scroll customization driven by all input modalities - ship
-behind a flag in M4? 0.00
-
-### Begin Implementing pointer events API 0.60
-
-## Fire pointer events for all touch input 1.00
-
-## Add telemetry tests for multi-touch pointer event dispatch 0.00
-
-## WG consensus on concrete plans for avoiding hit tests 0.00
-
-## Support sending pointercancel on touch scroll/pinch 0.70
-
-## Add devtools support for pointer event types 1.00
-
-## Spec and implement new touch-action options behind a flag in M45 1.00
-
-## (STRETCH) Fire pointer events for all mouse events 0.00
-
-### Evolve touch platform UI 0.52
-
-## Ship Android M text selection features (smart select, long press and drag,
-floating action bar) P1 0.90
-
-## Ship unified touch text selection in M44 for web contents in Aura P1 0.60
-
-## Ship unified touch text selection in M45 for native Aura UI P2 0.10
-
-## Make check boxes and radio buttons touch friendly without depending on touch
-adjustment P2 0.00
-
-## (STRETCH) Fix cross-site navigation GestureNav issue P4
-
-## (STRETCH) Support trackpad pinch-zoom on CrOS P4 \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/input-dev/input-objectives/2016-okrs/index.md b/chromium/docs/website/site/teams/input-dev/input-objectives/2016-okrs/index.md
deleted file mode 100644
index d1730480c42..00000000000
--- a/chromium/docs/website/site/teams/input-dev/input-objectives/2016-okrs/index.md
+++ /dev/null
@@ -1,603 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/input-dev
- - Input Team
-- - /teams/input-dev/input-objectives
- - Input Objectives
-page_name: 2016-okrs
-title: 2016 OKRs
----
-
-## 2016 Q4 0.57
-
-### Improve Input Performance 0.46
-
-## Hold the line on input performance P1 0.70
-
-## Intervene on the user’s behalf to improve scrolling performance
-#wp-interventions P1 0.45
-
-## Drive adoption of passive event listeners P2 0.20
-
-## Improve Wheel Scroll Performance P2 0.40
-
-## Improve timing of Event Signaling P3 0.50
-
-## Find and Fix Low-Hanging Performance Issues P3 0.10
-
-### Improve understanding of real-world input performance 0.21
-
-## Prototype Input Progressive Web Metrics P1 0.20
-
-## Improve automated input performance testing infrastructure P2 0.00
-
-## Use RAPPOR to collect realtime input performance based on websites P2 0.50
-
-## Measure Impact of Extensions on Input Performance P4 0.00
-
-### Eliminate key developer pain points around input 0.56
-
-## Layout-inert URL bar P1 1.00
-
-## Provide the tools for it to be easier to deal with keyboard input P1 0.50
-
-## Ship ViewportAPI P4 0.00
-
-## Ship CSSOM Smooth Scroll P2 0.30
-
-## document.rootScroller P2 0.50
-
-## Implement overscroll-action API P2 0.80
-
-## Implement ScrollCustomization API P2 0.30
-
-## Drive the Adoption of history.scrollRestoration P4 0.00
-
-## Touch Adjustment - Investigate and propose a solution P4 0.00
-
-### Improve Interoperability of Input Events amongst major browser engines 0.86
-
-## PointerEvents: Successful launch in M55 stable. P1 1.00
-
-## PointerEvents: W3C Spec & Tests P2 1.00
-
-## Test and address interoperability issues in the UI Event Spec P2 0.50
-
-## Historical Points API P3 0.60
-
-## Successfuly Ship auxclick in M55 P3 1.00
-
-### Product Excellence 0.72
-
-## Ship Material Design “overlay” scrollbars P1 0.70
-
-## Be responsive to our users concerns P1 0.90
-
-## Ship Scroll anchoring P1 1.00
-
-## Enable input automation of individual pointers P1 0.70
-
-## Using WebDriver for automated testing with input P1 0.30
-
-## Quantify causes of Hung Renderer Crashes when it is completely idle P1 1.00
-
-## Ignore clicks on recently-moved iframes (crbug.com/603193) P2 0.40
-
-## PointerEvents: Reduce bug backlog for mouse & touch P2 0.85
-
-## PointerEvents: Improve stylus support P2 0.50
-
-## Ship unified OSK viewport behavior between Android and CrOS P4 0.00
-
-### Improve Input Code Health 0.29
-
-## Remove Artificial Layering in the Input Pipeline P2 0.60
-
-## Consolidate pointer-type events in Chromium P2 0.00
-
-## Overhaul Chrome Autoscroll P2 0.00
-
-## Mojoifcation Architecture (Salamander) P3 0.00
-
-## Make Keyboard scroll events to be gesture based events P4 0.00
-
-## Use Proper Time Types for Events P2 0.80
-
-## 2016 Q3 0.65
-
-### Improve input performance 0.74
-
-## No regressions in key metrics that last more than a single milestone P1 0.80
-
-## Force touchstart event listeners to be passive during fling by M54 (behind
-finch trial) P1 1.00
-
-## Launch root scroller intervention behind a finch trial in M54 P1 1.00
-
-## Ratchet up root scroller intervention to 100% before end of quarter P4 0.20
-
-## Add intervention forcing event listeners to be passive for unresponsive main
-thread (Finch trial in M54) P2 0.40
-
-## Eliminate multiple queuing points for mouse and touch events and deliver most
-up to date information P1 1.00
-
-## Implement RAF aligned input on the main thread as an runtime enabled feature
-P2 1.00
-
-## Draft design doc for VSync aligned compositor input handling P1 1.00
-
-## Implement VSync aligned input for compositor gesture scroll and pinch behind
-finch trial P1 0.50
-
-## Analyze VSync aligned compositor input performance metrics from finch trial
-data P2 0.00
-
-## Reduce the 99'th percentile of first gesture scroll update latency on Nexus 5
-by 30% on the best finch trial P2 1.00
-
-## Find owners for 5 issues discovered through current input latency perf report
-P3 0.00
-
-## Ship scroll latching for touchpad behind a flag on all platforms P1 0.40
-
-### Improve understanding of real-world input performance 0.63
-
-## Author document precisely describing Progressive Web Metric for estimated
-input latency P1 0.70
-
-## Progressive Web Metric for estimated input latency landed in at least 1 form.
-P2 0.80
-
-## Share data on the realism / reproducibility tradeoff in telemetry input
-tests. P2 0.00
-
-## Run all of the current touch event latency reports on Chrome Trace Processor
-P3 0.00
-
-## Implement TBMv2 versions of touch input telemetry metrics P3 0.80
-
-## Get touchpad scroll latency regressions as actionable as touch scroll
-regressions P3 1.00
-
-## Progressive Web Metric for time to interactive landed in at least 1 form. P2
-1.00
-
-### Eliminate key developer pain points around input 0.45
-
-## Complete Root Scrollers implementation behind a flag in M54 P1 0.80
-
-## Create compelling demo showing benefit of RootScroller API and publish it
-with devrel P3 0.50
-
-## Ship API to expose visual viewport information to developers in M54 P1 0.60
-
-## Investigate touch adjustment and find a solution to coordinate touch events
-and click event P2 0.00
-
-## Implement position:device-fixed behind a flag for M55 P4 0.00
-
-## Ship non-layout affecting URL bar in M55 P2 0.00
-
-## Draft spec on method for developers to control which virtual keyboard is
-shown P2 0.70
-
-## Ship API to control Chrome pull-to-refresh nav gesture behind a flag in M55
-P2 0.30
-
-## \[Stretch\] Contribute history.scrollRestoration patch to Webkit P4 0.00
-
-### Improve Interoperability of Input Events amongst major browser engines 0.78
-
-## Ship non-primary button click event in M54 P2 0.90
-
-## Update InputEvent implementation and design doc based on the currently
-published specification by M54 P2 0.80
-
-## Continue implementing the simple rich text editor using ContentEditable and
-InputEvent P2 0.80
-
-## Remove keyIdentifier from Blink in M54 P2 1.00
-
-## Remove coordinates from TouchEvent \[WebKit\] P3 0.00
-
-### Product Excellence 0.76
-
-## Maintain Burndown of Hotlist-Input-Dev by closing 15 more issues than were
-incoming rate P1 0.90
-
-## End quarter with no P0,P1 issues that we started the quarter with P1 1.00
-
-## Input-Dev PE FixIt Week in August P2 1.00
-
-## Triage all new Blink&gt;Input, Blink&gt;Scroll issues within 7 days P1 1.00
-
-## Scroll anchoring - shippable prototype and WICG spec with initial round of
-feedback P1 0.65
-
-## Conduct analysis and add necessary information to drive resolution to
-Renderer Hung Crashes P1 0.40
-
-## Improve touchpad user experience on Windows devices P3 0.00
-
-## Ship unified OSK viewport behavior between Android and CrOS for M55 P2 0.60
-
-### Improve Input Code Health 0.55
-
-## Combine PlatformEvent and WebInputEvent P2 0.30
-
-## WebMouseEvent becoming a pointer event API: design doc on an incremental impl
-plan, land initial patches P3 1.00
-
-## Improve TouchEventQueue sync with renderer P4 0.00
-
-## Create & minimally plumb PlatformPointerEvent P4 0.20
-
-## Refactor mouse code out of EventHandler & its submodules into
-MouseEventManager P3 1.00
-
-## Make PointerEvents the driver for mouse code in EventHandler P3 0.90
-
-## Use better types for time for Events in blink P4 0.00
-
-### PointerEvent API is ready to ship 0.91
-
-## Analyze compatibility with Edge for 25 sites using pointer events 1.00
-
-## Run a Finch trial with PointerEvents enabled P1 1.00
-
-## Hackathon@MS P1 1.00
-
-## Share implicit pointer capture compat data and our proposed plan with PEWG P1
-1.00
-
-## Consensus in PEWG on the precise design Chrome should try shipping (covered
-by open PRs) P2 1.00
-
-## Drive committing fixes for 20 PEWG spec issues via participation in github
-and regular calls P2 1.00
-
-## Resolve all P0 and P1 launch blocking bugs P2 1.00
-
-## W3C PointerEvent Tests: Complete automation through script injection P1 1.00
-
-## W3C PointerEvent Tests: Run on all platforms with all pointer types, report
-the outcome to PEWG P2 0.99
-
-## W3C PointerEvent Tests: land 10 pull requests in github to improve test
-coverage/quality P3 1.00
-
-## PointerEvents fully automatable without the use of event sender P1 0.90
-
-## Support fractional co-ordinates in PointerEvents, update Blink MouseEvent as
-needed P3 0.10
-
-## Stylus low level events: all events received in Blink for Mac, Windows and
-CrOS P2 0.20
-
-## Stylus properties: complete plumbing of tilt & pressure for Windows, CrOS,
-Android and Mac P3 0.60
-
-## Create a doc on consistent stylus interactions P4 0.00
-
-## STRETCH: Turn pointer events on by default on trunk P4 1.00
-
-### Drive adoption of passive event listeners 0.36
-
-## Reduce fraction of touch events unnecessarily blocking scroll from 43% to 35%
-P1 0.00
-
-## Add ability to discover scroll blocking event handlers easy in devtools P2
-0.00
-
-## 2016 Q2 0.66
-
-### Improve scroll latency and smoothness 0.50
-
-## No regressions in key metrics that last more than a single milestone P1 1.00
-
-## Reach (data-driven) consensus on plan for touch scrolling intervention
-(replacing touch ACK timeout) P1 0.70
-
-## Ship initial conservative touch scrolling intervention via Finch by M53 P1
-0.20
-
-## Make touchstart events during fling nonblocking by M53 (behind finch trial)
-P2 0.00
-
-## Reduce the 99'th percentile of first gesture scroll update latency on Nexus 5
-by 30% P2 0.20
-
-## Add DevTools Support for Passive Event Listeners by M53 P2 0.90
-
-## Fix 3 smooth scroll performance bugs by M53 P2 0.70
-
-## Implement vsync aligned gestures in M53 P2 0.00
-
-## Implement vsync aligned touch input in M53 \[Stretch\] P4 0.00
-
-### Improve understanding of real-world input performance 0.73
-
-## Measure efficiency gain and breakage caused by 5 possible touch scrolling
-intervention approaches. P1 0.65
-
-## Expose touch scroll latency information through devtools by M53 P1 1.00
-
-## Add non-scrolling input performance metrics by M53 P2 1.00
-
-## Improve on the current touch event latency reports P2 0.80
-
-## Evaluate and Implement strategy for not calculating event path, and
-dispatching event if no listeners P2 0.00
-
-### Eliminate key developer pain points around input 0.35
-
-## non-Document root scrollers implementation complete (behind a flag) in M52 P1
-0.30
-
-## Ship non-layout-affecting top control resizes in M53 P3 0.00
-
-## Ship API to expose visual viewport information to developers in M52 P2 0.70
-
-## Ship unified OSK viewport behavior between Android and CrOS for M53 P3 0.00
-
-## Draft spec on method for developers to control which virtual keyboard is
-shown P2 0.00
-
-## Design for ignoring clicks on iframes that have moved recently P2 0.60
-
-## Implement position:device-fixed (behind a flag) as a way to attach elements
-to the visual viewport P3 0.00
-
-## Draft spec an API to control Chrome pull-to-refresh nav gesture behind a flag
-P2 0.80
-
-## Contribute history.scrollRestoration patch to Webkit P4 0.00
-
-### Improve Interoperability of Input Events amongst major browser engines 0.81
-
-## Implement InputEvent beforeinput (behind a flag) based on the provisional
-specification in M52 P1 0.90
-
-## Implement InputEvent input (behind a flag) based on the provisional
-specification in M53 P1 0.80
-
-## Make pointer event tests automatically run on Chrome on all platforms P1 0.80
-
-## Add low level touch event API to Chromedriver in M53 P2 0.70
-
-## Fix 8 Keyboard related interop bugs in backlog P2 0.60
-
-## Make sure the order of composition events and input events matches spec in
-M52 P2 0.90
-
-## Contribute WebPlatform Tests for Editing beforeinput/input and composition
-events P2 0.80
-
-## Implement HTMLSelect ability to programmatically open in M52 behind a flag P4
-0.00
-
-## Enable non-manual uievents and domevents webplatform tests P2 1.00
-
-## Investigate in re-using Touch instances as Safari does P3 1.00
-
-## Deprecate executing default action on Untrusted events P2 1.00
-
-## Implement a simple rich text editor using ContentEditable and InputEvent P2
-0.60
-
-### Product Excellence 0.85
-
-## End quarter with no P0,P1's older than 90 days P1 0.80
-
-## Triage all new Blink-Input, Blink-Scroll bugs within 7 days P1 1.00
-
-## Scroll anchoring - shippable prototype and WICG spec with initial round of
-feedback P1 0.50
-
-## Increase burndown of issues. Close 10 more hotlist input dev bugs than the
-incoming rate. P1 1.00
-
-## Ship stricter user gestures for touch intervention in M52 P1 0.90
-
-## All Hotlist=Input-Dev bugs with &gt;= 15 stars have an OWNER P1 0.90
-
-### Improve Input Code Health 0.55
-
-## Refactor EditorCommand to use an enum class in M52 P2 1.00
-
-## Propose and Implement removal of WebInputEvent &lt;--&gt; PlaformEvent
-conversion P2 0.30
-
-## Refactor IME keyboard event generation code to be common across all platforms
-P4 0.00
-
-## Improve situation around Blink scroll offset type P4 0.00
-
-## Refactor main thread touch and wheel scrolling paths to use scroll
-customization machinery P2 1.00
-
-## Improve usage of time unit types for event timestamp P2 1.00
-
-## Consensus on a plan for WebMouseEvent to become a pointer event API. P2 0.00
-
-## Improve TouchEventQueue sync with renderer P2 0.00
-
-## Design a modular EventHandler P2 1.00
-
-## Update MouseEvent (and so PointerEvent) to support fractional co-ordinates.
-P3 0.25
-
-### PointerEvent API is feature-complete with major developers' concerns addressed. 0.80
-
-## Fix redundant pointercancel bug with touch-action in M51. P0 0.90
-
-## Enable developers’ testing of PointerEvent in M52, address community
-feedback. P0 1.00
-
-## Fix interaction issues between PE's explicit capture & TE's implicit capture.
-P1 1.00
-
-## Analyze compatibility with Edge for top 20 sites using pointer events P1 0.80
-
-## Drive the open PEWG spec issues down from 21 to 10 via participation in
-github and regular calls. P2 0.70
-
-## Share implicit pointer capture compat data and our proposed plan with WG. P2
-0.25
-
-## Improve test infrastructure & coverage P2 0.60
-
-## Create a doc on consistent stylus interactions. P2 0.20
-
-## Blink is receiving all stylus events on 2 platforms by EOQ P3 0.40
-
-### Drive adoption of passive event listeners 0.51
-
-## Reduce fraction of touch events unnecessarily blocking scroll from 47% to 30%
-P0 0.15
-
-## Publish usage guidance with assistance from DevRel in time for M51 stable
-release P1 1.00
-
-## Get 4 major partners to make their touch listeners passive P0 0.20
-
-## Land the EventListenerOptions feature detect in Modernizr P2 1.00
-
-## Passive touch listeners are promoted at Google I/O P2 1.00
-
-## Add chrome://flags entry forcing all touch listeners (or all page-wide touch
-listeners) to be passive P2 1.00
-
-## Publish comparison of real world scroll start performance with passive
-listeners and blocking listeners P3 1.00
-
-## 2016 Q1 0.60
-
-### Improve scroll latency and smoothness 0.65
-
-## Ship Passive Event Listeners in M50 P0 0.90
-
-## Land passive event listener interop tests in web-platform-test P2 0.00
-
-## 4 important external partners actively experimenting with passive event
-listeners P2 0.20
-
-## Reach (data-driven) consensus on plan for touch scrolling intervention
-(replacing touch ACK timeout) P2 0.20
-
-## Get consensus on TouchEvents spec change for async touchmove and passive
-listeners P2 1.00
-
-## Land performance optimization for passive wheel listeners P3 1.00
-
-### Improve understanding of real-world input performance 0.62
-
-## Add non-scrolling input performance metrics P1 0.60
-
-## Use slow reports to measure efficiency gain and breakage caused by possible
-touch ack timeout approaches. P1 0.20
-
-## Expose touch scroll latency information through devtools P1 0.20
-
-## Quantify our objective of fixing scroll blocking P1 1.00
-
-## Expose hardware input timestamps to the web P1 1.00
-
-## Use slow reports to generate initial breakdown of where input handling logic
-spends time P2 1.00
-
-## Add touch scroll latency metric measuring until estimated vsync time
-(STRETCH) P4 0.00
-
-### Eliminate key developer pain points around input 0.61
-
-## Fix at least 100 Hotlist-InputDev bugs P1 1.00
-
-## Triage any new Blink-Input, Blink-Scroll bug within 7 days P1 1.00
-
-## Solution to non-document root scroller problem landed behind a flag in M51 P1
-0.25
-
-## Implement unified OSK viewport behavior between Android and CrOS for M50
-behind a flag P2 0.80
-
-## Provide a way for developers to attach elements to the visual viewport P2
-0.20
-
-## Land change to top control resizes to be more user friendly and Safari
-compatible in M50 P2 0.25
-
-## \[STRETCH\] Spec an API to control Chrome pull-to-refresh nav gesture behind
-a flag P4 0.00
-
-## Spec an API to expose visual viewport information to developers P2 0.50
-
-### Improve input interoperability between major browser engines 0.65
-
-## Enable automated input testing on Chrome for W3C web-platform-tests P1 0.35
-
-## Ship KeyboardEvent.key P1 1.00
-
-## Reduce UI Events spec bug count to under 25 P2
-
-## Reach consensus across vendors on an updated plan for ScrollTopLeftInterop P4
-0.00
-
-## Triage all Hotlist-Interop bugs and find appropriate owners every week P2
-0.70
-
-## Land scroll restoration interop tests in web-platform-test P2 1.00
-
-## Update HTMLSelectElement.open proposal and get buy in from other vendors. P3
-0.00
-
-### PointerEvent API implementation is feature-complete 0.53
-
-## Fix redundant pointercancel bug with touch-action. P1 0.65
-
-## Enable developers’ testing of PointerEvent, address community feedback. P2
-0.20
-
-## Implement explicit pointer capture support. P1 0.75
-
-## Report to WG the outcome of all w3c tests except the ones for pointer
-capture. P2 0.80
-
-## Measure compatibility with Edge for top 20 sites using pointer events P2 0.10
-
-## Share implicit pointer capture compat data and our proposed plan with WG. P3
-0.20
-
-## Update MouseEvent (and so PointerEvent) to support fractional co-ordinates P3
-0.00
-
-## Add pointer event handler tracking P3 1.00
-
-### Improve support for text input via IMEs 0.40
-
-## Implement and ship InputEvent P2 0.60
-
-## Complete specification for input and beforeinput events P2
-
-## Implement beforeInput (behind a flag) for Linux P2 0.30
-
-## Contribute WebPlatform Tests for Editing beforeinput/input and composition
-events P2 0.30
-
-### Improve input code health 0.50
-
-## Refactor MouseWheel scroll events to be gesture based events P2 1.00
-
-## Extend WebMouseEvent to become a pointer event API P2 0.00
-
-## Remove logic for touch scroll chaining P3 0.20
-
-## Complete both outstanding viewport refactorings P3 0.00
-
-## Refactor necessary code for input to actually send InputEvent from Editing
-specification P2 0.40
-
-## Refactor Event.dispatchEvent to return an enumeration P2 1.00 \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/input-dev/input-objectives/2017-okrs/index.md b/chromium/docs/website/site/teams/input-dev/input-objectives/2017-okrs/index.md
deleted file mode 100644
index 0dcfc74a077..00000000000
--- a/chromium/docs/website/site/teams/input-dev/input-objectives/2017-okrs/index.md
+++ /dev/null
@@ -1,965 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/input-dev
- - Input Team
-- - /teams/input-dev/input-objectives
- - Input Objectives
-page_name: 2017-okrs
-title: 2017 OKRS
----
-
-## ==2017 Q4==
-
-**Eventing Sub-team**
-
-### Improve Smoothness and Predictability of Events 0.25
-
-### Resampled Events P1 0.30
-
-### Early ACK touch events when we have a touch-action but all passive event
-listeners P3 0.20
-
-### Predictive Points P3 0.10
-
-### Add Richness to Web Platform 0.63
-
-### Low latency input mode for main screen canvas P1 1.00
-
-### Prototype input events dispatched to Worker P1 0.15
-
-### Spec for input for Workers P4 0.00
-
-### Finalize Simple User Activation model P1 0.50
-
-### Expose fractional coordinates for mouse P1 1.00
-
-### Ship scroll options in focus P2 1.00
-
-### Input Mode P2 0.75
-
-### Pointerevent Spec V2: pass 10 failing tests P4 0.00
-
-### InputDeviceCapabilities is Chrome-only P3 0.50
-
-### Autofill focus spec P3 0.10
-
-### Mouse Events forward/back buttons P3 0.80
-
-### Get drag and drop on Android to work within a page P3 0.60
-
-### Clarify screenX/Y and movementX/Y definitions P4 0.00
-
-### Performance 0.86
-
-### Hold the line on Input Performance P1 1.00
-
-### Push other parties to fix the performance bugs P1 0.70
-
-### Updating the existing metrics in UKM P2 1.00
-
-### UKM Dashboard for input metrics or equivalent P2 1.00
-
-### Rappor analysis and scripts P4 0.00
-
-### Product Excellence 0.65
-
-### Be responsive to our users P1 0.50
-
-### Fix 8 regression bugs in Blink&gt;Input P2 1.00
-
-### Fix 6 starred &gt; 10 bugs P2 1.00
-
-### Touch Adjustment crbug.com/625198 P3 0.40
-
-### Fix ARC++ trackpad events for the web. P3 0.50
-
-### Remove legacy Touch detection P3 0.50
-
-### Fix ordering of focus events P4 0.10
-
-### Code Health 0.78
-
-### Mojo Input P1 0.80
-
-### Transform all WebTouchEvents to WebPointerEvent in Blink P2 0.90
-
-### Support mus team in shiping new input routing mechanism. P2 1.00
-
-### Latency info cleanup P2 0.40
-
-### Nuke EventDispatchMediator P3 1.00
-
-### Get rid of null initialization of UGIs P4 0.00
-
-### Remove Legacy Touch Event Queue P4 1.00
-
-## Scrolling Sub-team
-
-### Performance 0.87
-
-Wheel scroll latching and async wheel events P1 0.80
-
-Implement phase information from ChromeOS P2 1.00
-
-### Improve Interop 1.00
-
-Publish “spec” how viewports and APIs work/should work 1.00
-
-### Add Richness to Web Platform 0.51
-
-Plan a path to shipping for document.rootScroller P1 0.70
-
-Produce a draft spec for document.rootScroller P4 0.00
-
-Make document.rootScroller work with OOPIF P3 0.40
-
-Propose “resize-mode” API for OSK P4 0.00
-
-Scroll Customization P3 0.35
-
-### Code Health 0.60
-
-Remove duplication between frame and layer scrolling P1 0.70
-
-Browser side fling P2 0.40
-
-Use scroll gestures for keyboard scrolling P2 0.20
-
-Correct telemetry gestures P2 1.00
-
-### Product Excellence 0.48
-
-Windows precision trackpad implemented behind a flag P1 0.40
-
-Enable subpixel precision scrolling in Blink P4 0.00
-
-Scroll boundary behaviour P2 1.00
-
-Close out remaining overlay scrollbar polish issues P3 0.30
-
-Fix important/curated bugs P3 0.20
-
-## ==2017 Q3==
-
-**Eventing Sub-team**
-
-### Improve Smoothness and Predictability of Events 0.63
-
-### Align Events with Appropriate Lifecycle P2 0.80
-
-### Resample input events on main thread and compositor P2 0.20
-
-### Dispatch Mouse Events when hover changes due to DOM modifications P2 1.00
-
-### Predicted points P3 0.20
-
-### Make hover states and boundary events consistent across all the cases P4
-1.00
-
-### Add Richness to Web Platform 0.40
-
-### Implement a simple user activation model that is good for cross-browser
-implementation P1 0.45
-
-### Define input events for Workers P1 0.40
-
-### Support low latency stylus P1 0.20
-
-### Move Pointer Event spec to CR P3 0.60
-
-### Add Richness to Editing events P3 0.70
-
-### Enable Input Automation in WPT P4 0.50
-
-### Performance 0.86
-
-### Hold the line on Input Performance P1 1.00
-
-### Rappor and UKM metrics P1 0.50
-
-### Ship Direct Manipulation Stylus on Windows P1 1.00
-
-### Analyze 120Hz Hardware P2 1.00
-
-### Product Excellence 0.52
-
-### Be Responsive to our Users P1 0.80
-
-### Solve non-consistent target issues with Touch Adjustment P1 0.20
-
-### Take over ownership of Blink&gt;Input&gt;PointerLock issues P2 0.60
-
-### Mus Input Routing P2 0.50
-
-### Code Health 0.37
-
-### Complete mojofication of input pipeline P1 0.70
-
-### Complete switch to pointer events input flow in Blink Code P1 0.20
-
-### Latency Info Cleanup P2 0.20
-
-### Fix 5 low-hanging input-dev issues with Hotlist-CodeHealth P3 0.10
-
-### Fractional Mouse Coordinates P3 0.60
-
-## Scrolling Sub-team
-
-### Add Richness to Web Platform 0.63
-
-Smooth ViewportAPI/Inert Viewport Launch P1 0.90
-
-Prepare rootScroller for standardization P1 0.30
-
-Unify ChromeOS and Android On-Screen Keyboard P2 0.00
-
-Ship ScrollBoundaryBehavior P2 1.00
-
-Ensure ScrollLeft/Top interop launch is a success P2 1.00
-
-### Performance 0.60
-
-Wheel scroll latching and async wheel events P1 0.60
-
-### Improve Scrolling UX 0.60
-
-Windows Precision Touchpad Support P1 0.40
-
-Support Overlay Scrollbar Launch P1 0.80
-
-### Improve Product Polish 0.40
-
-Fix 6 important/long-standing user or developer-facing bugs P3 0.40
-
-### Improve Code-Health 0.22
-
-Progress Scroll Unification P2 0.00
-
-Fling on Browser Side P2 0.50
-
-Keyboard Gesture Scrolling \[stretch\] P4 0.00
-
-**Threaded Rendering Sub-team**
-
-### Enable rich custom effects 0.49
-
-Finish implementation of PaintWorklet on main thread P1 0.90
-
-Finish implementation of Snap Points P1 0.10
-
-Start a origin trial Main-Thread Scroll Customization P3 0.40
-
-### Make compositing excellent 0.53
-
-Promote opaque fixed/sticky position elements into composited layers.
-#wp-performance P1 0.00
-
-Finish touch action implementation && measure performance impact P1 0.50
-
-Close 25 non-feature bugs. P2 1.00
-
-Finish the experiment of not compositing small scrollers P2 1.00
-
-Analyze main thread scrolling reasons P4 0.00
-
-Finish upstreaming position:sticky tests to WPT P2 0.80
-
-Wheel listener rects P4 0.00
-
-Reduce number of composited layers created for correctness. P1 0.60
-
-### Improve metrics and code health 0.61
-
-Fix regression bugs caused by composited border-radius scrolling P1 0.90
-
-Identify / define metrics to monitor continued threaded rendering performance
-excellence. P4 0.00
-
-Improve documentation of the animation code P2 1.00
-
-Measure metrics without compositing thread. P4 0.00
-
-Remove all uses of layer ids or layer references in cc/animations P1 0.50
-
-Progress or regression of bug open/close rate is visible to the team. P2 0.00
-
-New issues are triaged within seven days. P3 0.90
-
-### Enable performance isolated effects on the web 0.44
-
-Animation Worklet - Draft specification for API #wp-ergonomics P1 0.70
-
-AnimationWorklet - Land Milestone 1 P1 0.80
-
-Prototype raster-inducing scroll (https://crbug.com/715106) P1 0.20
-
-AnimationWorklet - Land Milestone 2 P2 0.20
-
-Animation Worklet - Schedule and give animations a deadline to avoid janking
-compositor thread. #wp-ergonomics #wp-performance P2 0.10
-
-\[stretch\] Ship Animation Worklet origin trial P4 0.00
-
-\[stretch\] Ship PaintWorklet off thread P4 0.00
-
-## ==2017 Q2==
-
-## Eventing Related 0.52
-
-### Improve Smoothness and Predictability of Events 0.38
-
-## Align Events with Appropriate Lifecycle P1 0.65\[0.3\] Ship rAF aligned mouse
-events \[0.4\] Address regressions with vsync aligned gestures 100 \[0.3\] Ship
-Vsync aligned gestures 100
-
-## Teach scheduler about non-blocking input events P1 0.10\[0.5\] Simplify
-notification of input events to render scheduler \[0.5\] Notify scheduler to
-adjust user model based on non-blocking event
-
-## \[Punted\] Resample input events on main thread and compositor P2 eirage@
-will take over. \[0.3\] Draft design doc for resampling algorithm and matrix
-\[0.3\] Implement resampling behind a flag \[0.2\] Launch Finch Trial and
-analysis data \[0.2\] Ship input resampling
-
-### Product Excellence 0.67
-
-## Be Responsive to our Users P1 0.85\[0.5\] Triage all new issues within 7 days
-\[0.2\] Triage all open issues that have not been modified in 180 days \[0.3\]
-Fix 7 top starred &gt; 10 stars issues
-
-## Drive down regression bugs P1 0.70Close 33% (9 bugs) of our open regressions.
-
-## Solve non-consistent target issues with Touch Adjustment P1 0.40\[0.1\] Write
-touch/pointer tests to expose interop issues \[0.3\] Propose a solution and
-draft design doc \[0.4\] Implement behind a flag \[0.2\] Ship new Touch
-Adjustment <https://crbug.com/625198>
-
-## Take over ownership of IO&gt;PointerLock issues P2 0.50\[0.5\] Fix 5
-IO&gt;PointerLock issues \[0.5\] Triage and prioritize all issues.
-
-## Study & design a sensible hover/active solution for touch+mouse P2
-1.00\[0.4\] Write a doc describing and comparing hover behavior on major
-browsers. \[0.4\] Propose a design based on (possibly) decoupled active & hover
-states (no new APIs) \[0.2\] Implement a prototype based on the design
-
-## Fix Chrome’s non-standard/interop APIs related to input. P2
-0.60<https://bugs.chromium.org/p/chromium/issues/list?can=1&q=summary%3Astandardize%2Cremove+Hotlist%3DInput-Dev+opened&lt;2017-03-31+modified&gt;2017-03-31+reporter%3Afoolip%2Clunalu>
-\[1.0\] Finalize standardize/remove decision for 5 non-standard web APIs.
-
-### Add Richness to Web Platform 0.42
-
-## Experiment with a simple user activation indicator that is good for
-cross-browser implementation P1 0.50\[0.3\] Prototype a simple bit-per-frame
-user activation and perform lab-test.
-[crbug.com/696617](http://crbug.com/696617) \[0.2\] Propose a detailed design
-for implementation. \[0.3\] Implement the design behind a flag, covering all
-user activation clients. \[0.2\] Experimentally switch away from current
-UserGestureIndicator in M59/60 beta. \[stretch\] \[PUNTED\] Publish a report on
-observed regressions and next steps.
-
-## Define input events for animation worklet P1 0.20\[0.3\] Create a
-polyfill-based touch-drag prototype to aid design discussion. \[0.4\] Design doc
-on event model for animation worklet, reach consensus on final design goals.
-\[0.3\] \[PUNTED\] Complete an experimental plumbing to route input events to a
-worker thread.
-
-## Enable Input Automation APIs in WPT P1 0.20\[0.3\] \[PUNTED\] Add key
-injection APIs in GPU Benchmarking (blocked on
-[crbug.com/722921](http://crbug.com/722921)) \[0.3\] Add input injecting input
-API with consensus from other vendors \[0.2\] Plumb the input injecting API to
-enable the manual tests to run on Chrome bots \[0.2\] Update at least 3 manual
-tests to use the new input injection API
-
-## Expose fractional co-ordinates for PointerEvents of mouse type P2 0.00\[0.2\]
-Plumb fractional mouse co-ordinates in Windows (browser side) \[0.1\] Plumb
-fractional mouse co-ordinates in Android (browser side) \[0.1\] Plumb fractional
-mouse co-ordinates in Mac (browser side) \[0.2\] Plumb fractional mouse
-co-ordinates in Linux and ChromeOS (browser side) \[0.3\] Remove WebMouseEvent
-coord truncation, fix regressions. \[0.1\] Expose fractional coordinates for
-PointerEvents of mouse type (blink side)
-
-## Make Pointer Events spec & tests ready for L2 P2 0.70\[0.3\] Drive solving
-all of the 4 current L2 Blocking issues. \[0.7\] Resolve all of the current 29
-tests with less than 2 passing browsers from failure list.
-
-## Champion Auxclick P3 0.80\[0.7\] Merge auxclick spec into UI Event spec
-\[0.3\] Get at least Edge or Safari to implement auxclick
-
-## Predicted points API P3 1.00\[0.7\] Put together challenges and different
-solutions we had for this API in a doc \[0.3\] \[PUNTED\] Put a prototype
-together in Chrome to demonstrate this feature
-
-## Drive TouchEvents-to-PointerEvents switchover for Google apps P3
-1.00#internal \[0.5\] \[PUNTED\] Support Google Maps API switchover to
-PointerEvents. \[0.5\] Make Google Maps usable with Android mouse.
-
-## Keyboard Input Mode Consensus P4 \[0.5\] Continue with driving consensus in a
-design internally \[0.5\] Publish design externally
-
-## Add Richness to Editing events P3 0.60\[0.3\] Make sure InputEvent was
-shipped without substantial issue \[0.4\] Rewrite all layout tests into WPT
-through Input Automation API \[0.3\] Follow and fix incoming bugs
-
-## \[PUNTED\] Synthetic pointer actions in WebDriver P4 \[0.3\] Design doc for
-exposing the synthetic pointer actions in webdriver \[0.4\] Implementation of
-the synthetic pointer actions in webdriver \[0.3\] Exposing the functionality in
-WebDriver Js
-
-### Code Health 0.71
-
-## Target input events to either the RenderFrame or RenderView not both P1
-1.00Make input event targeting on Chrome IPC consistent. 21 messages are sent to
-the RenderFrame, and the remaining goto the RenderView on two different IPC
-channel identifiers.
-
-## Point person for MUS hit test API P1 0.70\[0.4\] Propose and agree on Mojo
-Interface \[0.6\] Implementing the interface
-
-## Move input messages to be mojo based P2 0.70\[0.4\] Define a mojo
-InputHandler interface to the compositor thread and convert existing messages
-\[0.4\] Define a mojo InputHandlerHost interface and convert existing messages
-\[0.2\] Cleanup existing layering not necessary
-
-## Complete switch to pointer events input flow in Blink code P2 0.45\[0.4\]
-Replace all occurrences of WebTouchEvent in Blink with unpacked WebPointerEvent.
-\[0.3\] Move grouping of touch events to the end of pipeline using raf signal
-\[0.2\] Align WebMouseEvent attributes with WebPointerEvent \[0.1\] Merge
-WebMouseEvent into WebPointerEvent
-
-## Using WM_POINTER for all input types on Windows 8+ P2 0.40\[0.5\] Listen to
-WM_POINTER to handle all mouse events to replace WM_MOUSE on Windows 8+ \[0.5\]
-Listen to WM_POINTER to handle all touch events to replace WM_TOUCH on Windows
-8+
-
-### Performance 0.42
-
-## Hold the line on input performance P1 0.50No regressions in key metrics that
-last a milestone and monitor usage of touch-action
-
-## Add richer set of metrics to input pipeline P1 0.30\[0.3\] Add
-Event.Latency.Scroll(Begin|Update).(Touch|Wheel).TimeToScrollUpdateSwapBegin2 to
-UKM \[0.2\] Do the initial round of analysis on RAPPOR data gathered last
-quarter for input metrics and file at least 2 bugs for slow sites found via
-RAPPOR \[0.2\] Prepare a document explaining a flow for analyzing UKM data from
-dashboard or raw data \[0.3\] Compare the Rappor and UKM and decide what we will
-be doing with RAPPOR metrics \[Towards the end of the quarter gathered data was
-deleted due to mistakenly gathering some reports in incognito mode. We will have
-more data next quarter for analyzing.)
-
-## Quantify accuracy of Expected Queueing Time metric P2 0.50Measure how closely
-actual queueing time correlates to expected queueing time. End-of-quarter update
-- patch up here: <https://codereview.chromium.org/2954473002/>.
-
-## \[PUNTED\] EGL frame timestamps for input latency metrics P4 \[0.7\] Utilize
-Android O frame-timing data \[0.3\] Compare the new metric with the old
-TimeToScrollUpdateSwapBegin2 metrics and write a doc explaining the results
-
-## Scrolling Related 0.58
-
-### Add Richness to Web Platform 0.60
-
-## document.rootScroller P1 0.50https://crbug.com/505516 \[0.5\] Finish an
-implementation that’s usable for AMP case \[0.2\] Preliminary spec describing
-the new implementation \[0.2\] \[PUNTED to 61\] Ship origin trial in M60 \[0.1\]
-Create example demos
-
-## scroll-boundary-behavior P1 0.50\[0.4\] Implement scroll-boundary-behavior
-for viewport (i.e. to prevent navigation) in M60 behind a flag \[0.4\] Implement
-scroll-boundary-behavior for inner scrollers (i.e., chaining) on both cc and
-main thread \[0.2\] Ship the final API in M61
-
-## \[PUNTED\] Unify On-Screen Keyboard Resize Behavior \[Stretch\] P4
-https://crbug.com/404315 \[0.2\] Determine if existing implementation is
-sufficiently flexible to support app-like scenarios \[0.3\] Propose any missing
-APIs needed for PWA like scenarios \[0.3\] Create GitHub explainer and demos
-(similar to URL bar resizing) \[0.2\] Fully implemented by M61 feature freeze
-
-## Rationalize viewport coordinates on the web P2 1.00Note: Added at mid quarter
-check-in \[0.3\] Create WPT suite for visual viewport API \[0.2\] Ship
-ViewportAPI in M61 (<https://www.chromestatus.com/feature/5737866978131968>)
-\[0.5\] Ship inert visual viewport in M61
-
-### Improve Scrolling UX 0.74
-
-## Ensure Overlay Scrollbar launch is Successful P1
-0.90<https://crbug.com/307091> \[0.3\] Land in M59 \[0.4\] Address all P0/P1
-implementation issues \[0.3\] All polish items in the spreadsheet are addressed
-
-## Supoort Windows precision touchpad P3 0.10\[0.6\] Use Windows API to mark
-events coming from a precision touchpad \[0.4\] Support gesture navigation on
-windows touchpad crbug.com/647140
-
-### Performance 0.60
-
-## Touchpad Scroll latching P1 0.60<https://crbug.com/526463> \[0.3\] Latching
-logic should work for OOPIFs \[0.3\] Improve test coverage: unittests of all the
-classes with the flag must cover both latching and propagation cases, and no
-flaky layouttests \[0.2\] Enable the flag on the waterfall by default and
-address any regression bugs. \[0.2\] \[Punted to 61\] Ship a finch trial in M60
-
-## Async wheel events P1 0.60<https://crbug.com/706175> #WP-Alignment \[0.3\]
-\[Punted to 61\] Finish the implementation behind a flag in M60 \[0.2\] Design
-doc for wheel scroll latching and async wheel events \[0.3\] Enable the flag on
-the waterfall by default and address any regression bugs. \[0.2\] Ship a finch
-trial by EOQ
-
-## \[Punted\] MouseWheel listeners on scrollers out of the scroll chain
-shouldn’t block scrolling P4 <https://crbug.com/700075> \[0.2\] Add metrics to
-have an approximation of cases that scrolls are blocked on listeners that are
-not part of the scroll chain. \[0.6\] Implement tracking the wheel event per
-individual scroller by EOQ \[0.2\] Ship a finch trial
-
-### Improve Code Health 0.38
-
-## Unify main and compositor scrolling paths P2 0.90<https://crbug.com/476553>
-\[0.4\] Create design doc outlining a path to scroll unification between main
-and impl threads \[0.2\] Create detailed implementation plan/design doc for
-reraster-on-scroll \[0.4\] Share with relevant teams, iterate and come to
-consensus shared vision
-
-## Use scroll gestures for all user scrolls P2 0.00\[0.5\] \[Punted\] Keyboard
-Gesture Scrolling \[0.2\] Autoscroll \[0.3\] Scrollbar Gesture Scrolling
-
-## Unify Mac scrollbars P3 0.00\[0.4\] Remove scrollbar paint timer \[0.4\]
-Decouple ScrollAnimatorMac from painting \[0.2\] \[Stretch\] Paint Mac
-Scrollbars from WebThemeEngine
-
-## Decouple Scrollbars from ScrollableAreas in Blink P3
-0.50<https://crbug.com/661236> \[0.6\] Move all scrollbar generation/management
-code out of ScrollableArea \[0.2\] Move scrollbar creation for main frame to
-happen in RootFrameViewport \[0.2\] Fix blocked issues
-<https://crbug.com/456861>, <https://crbug.com/531603>
-
-### Improve threaded rendering code health
-
-## \[Punted\] LTHI Scroll logic refactoring P2 \[0.75\] Design doc \[Punted\]
-\[0.25\] An internal scroll manager that isolates scrolling logics in LTHI
-\[Punted\] Bokan@ has a new idea, so the unifying work does not make sense
-anymore.
-
-## Threaded Rendering Related 0.53
-
-### Enable rich scroll effects 0.60
-
-## Finish position:sticky P1 0.80#wp-ergonomics #wp-predictability \[0.6\] fix
-all current P2+ bugs (5 bugs) \[0.4\] Upstream web platform tests for spec’d
-testable exposed behavior
-
-## Scroll Snap Points P1 0.20Land the spec-matching version (behind flag)
-
-## CSS OM Smooth Scroll P2 1.00Ship CSSOM View smooth scroll API (enabled by
-default)
-
-## \[Punted\] Scroll-linked animations polyfill P3 #wp-ergonomics wait for the
-existing (external) editors to have something ready for review, then look at an
-implementation and/or polyfill strategy at that point \[0.6\] Implement JS
-polyfill \[0.3\] Implement CSS polyfill \[0.1\] Publish on shared team github
-\[PUNTED\]. Waiting for Mozilla people to push this.
-
-### Enable performance isolated effects on the web (AnimationWorklet) 0.46
-
-## Implement AnimationWorklet M1 features behind flag P1 0.50\[0.2\] Implement
-blink::WorkletAnimation (single timeline, multiple effects) \[0.2\] Implement
-Animator and Animator definition in Worklet scope \[0.2\] Implement
-cc::WorkletAnimationPlayer \[0.1\] Plumb mutation signal and current time to
-worklet \[0.1\] Plumb WorkletAnimation blink =&gt; compositor =&gt; worklet
-\[0.1\] Proxy Keyframe effects in Worklet scope and plumb local times worklet
-=&gt; compositor \[0.1\] Get required changes to web-animation spec upstreamed
-\[stretch\] Implement ScrollTimeline in blink \[stretch\] Run animation worklet
-on dedicated thread Result: progress made on first 4 items. Will continue
-working on in Q3.
-
-## \[Punted\] Schedule animation calls at commit deadline P2 This needs to be
-rolled into the animation worklet plan as the new API and integration with
-animations will change how we schedule updates.
-
-## \[Stretch\] Ship origin trial P3 0.30- amp or fb as potential clients Result:
-flackr@ implemented a polyfil that can be used to experiment with API while
-implementation is not complete. Blocked on majidvp@ updating the documentation
-and making contacts.
-
-### Make compositing excellent 0.58
-
-## Resolve at least as many Hotlist-ThreadedRendering bugs as incoming P1 1.00
-
-## Promotion of opaque fixed (and sticky) position elements P1 0.20\[0.6\]
-Resolve consistent scroll position between composited and non composited
-elements \[0.4\] Enable by default, 4% more composited scrolls
-
-## Enable compositing border-radius with tiled masks P1 0.90\[0.2\] Investigate
-if mask tiling can be disabled on AA bugs - Done \[0.5\] Implement demoting
-logic - Done \[0.2\] Disable mask tiling on bugs and rare cases (AA, filters) -
-Done \[0.1\] Stretch - Antialising bug (both RPDQ and content quads, but on RPDQ
-it’ll be a regression) - not urgent if tiling is disabled. - Done Discuss with
-paint team on whether blocked by a pre-existing paint bug. - Done Landing CLs
-that enable the flag. - Reverted due to regression.
-
-## Draft plan shared with team for raster inducing animations P2 Punted for now.
-
-## Prototype compositor side hit testing (shared with paint team) P2
-0.70Documented plan for touch action. Needs more work on browser side when
-handling the white-listed touch actions.
-
-## Triage - track incoming vs redirected / fixed / closed P2 0.00The app-engine
-tool path looks a lot longer than it should.
-
-## Enable reporting subpixel scroll offsets back to blink P3 0.00- Fix issue
-456622 - bokan@ can provide consulting
-
-### Identify opportunities / improve understanding of threaded rendering limitations in the wild 0.46
-
-## Metrics about interactions with scrollers P2 0.80\[0.5\] Land UMA metrics
-regarding size of scroller on page load and on scroll \[0.3\] Use results from
-the metrics to launch a Finch trial to see the differences w, w/o compositing
-small scrollers \[0.2\] Document and plan for the next step
-
-## Analyze CPU/GPU cost due to layer explosion P3 0.50\[0.3\] Use current UMA
-metrics to analyze CPU cost \[0.4\] Land new metrics regarding GPU memory cost
-due to layer creation \[0.3\] Analyze GPU cost
-
-## Analyze main thread scrolling reasons; from uma data added in previous
-quarter P3 0.20\[0.2\] Resume the non composited main thread scrolling reasons
-recording \[0.4\] Identify and resolve top remaining reason after opaque fixed /
-sticky promotion. \[0.2\] Work on the case that transform with non-integer
-offset cases \[0.2\] Work on the case that translucent element without text
-
-## Save composited filter result (18% pages have filter according to CSS
-popularity) P3 0.30\[0.4\] How often do we have a composited filter, land UMA
-metrics \[0.3\] Timing metrics \[0.3\] Stretch - Figure out a way to apply the
-animated-blur machinery in chromium to improve the perf
-
-## Perf party P3 0.60\[0.4\] File 3 bugs. \[0.4\] Identify resolution of those
-bugs. \[0.2\] Fix them.
-
-## Publish three UI pattern blog posts P3 0.00\[0.25\] animated blur \[0.25\]
-directional shadow \[0.5\] hero transition in scrolling content (google music)
-
-### Improve threaded rendering code health
-
-## \[Punted\] LTHI Scroll logic refactoring P2 \[0.75\] Design doc \[Punted\]
-\[0.25\] An internal scroll manager that isolates scrolling logics in LTHI
-\[Punted\] Bokan@ has a new idea, so the unifying work does not make sense
-anymore.
-
-## ==2017 Q1==
-
-## Eventing Related 0.70
-
-### Improve Smoothness and Predictability of Input Events 0.65
-
-Align Events with Appropriate Lifecycle P1 0.50#wp-performance 0.3 Interpolate
-touchmove events on the main thread 0.2 Analyze rAF Aligned Touch finch trial
-data 0.2 Ship rAF Aligned Touch Input 0.3 Compositor vsync aligned input finch
-trial
-
-Intervene to improve scroll performance P2 1.00#wp-alignment #wp-performance 0.2
-- Decrease fraction of page views which prevent default touch events without
-having a touch-action from 0.66 to 0.57% 0.8 - \[PUNTED\] Land and evaluate
-finch trial forcing event listeners to be passive if the main thread is
-unresponsive. (<https://crbug.com/599609>)
-
-Hold the line on input performance P2 0.85#wp-performance 0.7 No regressions in
-key metrics that last a milestone 0.3 Monitor usage of touch-action
-
-Measure Latency of Keyboard Input P2 0.50Report Latency of Keyboard Input via
-UMA Did a bunch of cleanup making this easier. Patch in progress here:
-https://codereview.chromium.org/2756893002/
-
-Handle Input Events as soon as possible P3 0.50#wp-performance 0.5 Place all non
-event based IPC messages in the main thread event queue so we don’t have to rely
-on message pumps to process input events 0.5 Coordinate with the blink scheduler
-so it can ask the main thread event queue if it has work to do.
-
-### Add Richness to Web Platform 0.78
-
-Ship Coalesced Points API P1 1.00#wp-ergonomics 0.5 Ship Coalesced Points API in
-M58 0.5 Adding at least 3 tests in WPT for different aspect of the feature
-
-Drive Pointer Events L2 to Recommendation P1 0.80#wp-ergonomics 0.3/0.5 Drive
-solving all the new L2 Blocking issues; end quarter with zero issues 0.5/0.5
-Prepare the full test result for all vendors and the explainer doc for the
-failures
-
-Make mouse a first-class event in Android P1 0.750.1/0.1 Address major user
-concerns around mouse rerouting by M56 release. <https://crbug.com/675339>
-0.3/0.3 Fix text selection triggering with mouse. <https://crbug.com/666060>
-0.0/0.2 Enable page zoom through mouse. <https://crbug.com/681578> 0.2/0.2
-Update old-style mouse click code. <https://crbug.com/669115> ---/0.2 \[PUNTED\]
-Unify mouse & gesture triggered text selection in Android.
-
-Input Automation for testing P2 0.40#wp-predictability 0.5 Get consensus on
-input automation APIs 0.3 Implement the plumbing to use the input automation in
-wpt serve 0.2 Make all Pointer Event tests to make use of this API
-
-Round out stylus support on all platforms P2 0.900.3 Ship PointerEvent.twist and
-.tangential on Mac <https://crbug.com/679794> 0.1 Complete Wacom Intuos Pro
-support for Mac <https://crbug.com/649520> 0.4 Switch Windows (&gt;= 8)
-low-level path to use WM_POINTER <https://crbug.com/367113> 0.2 Add missing
-plumbing for stylus properties in Windows <https://crbug.com/526153>
-
-Add Richness to Editing events P2 0.70#wp-ergonomics 0.3 Get a consensus
-internally how to ship beforeinput/input 0.4 Finish cleanup and remaining bugs
-0.3 Intent to Ship
-
-Drive Adoption of auxclick P3 1.00#wp-predictability 0.5 Auxclick is implemented
-by at least one other vendor 0.5 Click event is no longer fired for middle
-button by at least one other vendor
-
-Consensus on inputmode design P3 0.30#wp-fizz 0.5 Write up options and
-distribute and build consensus 0.5 Build consensus in external WICG;
-<https://crbug.com/248482>
-
-### Product Excellence 0.78
-
-Be responsive to our users P1 0.90Triage all new Input, Scroll issues within 7
-days Triage all Hotlist-Input-Dev &gt; 10 starred issues every 90 days to ensure
-we drive resolutions. Fix 5 top starred issues <https://goo.gl/fMt74P>
-specifically <https://crbug.com/161464>, <https://crbug.com/25503>,
-
-Fix touch interactions hiccups with PointerEvent P1 1.000.5/0.5 Fix multi-finger
-panning with touch-action <https://crbug.com/632525> 0.4/0.4 Disable touch slop
-suppression for touch-action:none. <https://crbug.com/593061> 0.1/0.1 Fix CrOS
-device issues with touch-like stylus. <https://crbug.com/682144>,
-<https://crbug.com/691310>
-
-Address misc implementation issues with PointerEvents P2 1.000.3/0.3 Video
-default event handler problem with PointerEvents. <https://crbug.com/677900>
-0.3/0.3 PointerEvent should set movementX & movementY.
-<https://crbug.com/678258> 0.4/0.4 Fix 5 other chromium bugs with PointerEvents.
-
-Ignore clicks on recently-moved iframes (crbug.com/603193) P2 0.000.4 Add tests
-and fix bugs in prototype 0.4 Land prototype behind a flag 0.2 Extend prototype
-to handle OOPIF
-
-Address long standing mouse event quirks P3 0.60#wp-predictability 0.5
-Consistent behavior of zero-movement mousemoves plus hover states.
-<https://crbug.com/488886> 0.5 MouseLeave on all platforms working correctly.
-<https://crbug.com/450631>
-
-### Code Health and Future Design 0.47
-
-Simplify event processing P2 0.20#wp-architecture 0.5 Remove touchmove
-throttling in the touch event queue 0.5 Remove fling curve generation from the
-main thread
-
-Continue removing artificial layering in event pipeline P2 0.80#wp-architecture
-0.6 Remove PlatformMouseEvent and PlatformTouchEvent 0.4 Cleanup
-PageWidgetEventDelegate
-
-Improve Blink event bookkeeping P2 0.500.0/0.4 Event-handling states on frame vs
-page. <https://crbug.com/449649> 0.3/0.3 InputRouter event queue cleanup:
-<https://crbug.com/600773>, <https://crbug.com/601068> 0.2/0.3 Design doc on
-PointerEvent driven event handling in Blink: <https://crbug.com/625841>
-
-Make coordinates consistent for all Web pointer-type events P3 0.700.3/0.4 Make
-WebMouseEvent coordinates fractional <https://crbug.com/456625>. 0.4/0.4 Remove
-refs to deprecated location data in WebMouseEvent <https://crbug.com/507787>.
-0.0/0.2 Normalize coordinate systems between WebMouseEvent and WebTouchPoint.
-
-Update pointer/hover media query API & internal usage P3 1.000.5/0.5 Collect
-data & possibly drop support for hover:on-demand. <https://crbug.com/654861>
-0.5/0.5 Update mouse/touch detection code to use media queries.
-<https://crbug.com/441813>
-
-MUS Main Thread Hit Testing P3 0.00Support MUS team by providing API for hit
-testing against the blink tree.
-
-Touch-action hit testing P3 0.00#wp-architecture, #wp-performance Have a
-concrete design of how SPV2 will information necessary for touch-action hit
-testing on the compositor. EOQ update: no design doc in place.
-
-## Scrolling Related 0.58
-
-### Eliminate key developer pain points 0.44
-
-Polish document.rootScroller design P1 0.40#wp-fizz \[0.5\] Ship
-document.rootScroller origin trial in M57 \[0.2\] Provide demos and motivating
-cases on how to use document.rootScroller \[0.2\] Create WICG repo to host
-standardization process and engage with other vendors \[0.1\] Publicize the
-experiment via developer outreach channels #wp-devx
-
-Fix layout vs visual viewport discrepancy in window APIs P2 0.20Description:
-#wp-predictability \[0.2\] Publish doc describing the issue and summarizing the
-current situation \[0.4\] Get feedback from a senior Safari engineer on whether
-they’re likely to change their viewport model and if they like the “inert”
-viewport mode. \[0.4\] Ship either “inert visual viewport” or change “client”
-coordinates to be visual in M58
-
-Ship Overscroll​ ​Action​ ​API P1 0.60\[0.4\] Land drafted overscroll-action API
-in M58 behind a flag \[0.2\] Get consensus for new scroll-boundary API \[0.3\]
-Implement new scroll-boundary API \[0.1\] Ship a final API in M58.
-
-Ship unified OSK model on Android in M58 P3 0.40\[0.2\] Document behavior of
-other browsers \[0.3\] Verify interactions with fullscreen, orientation, split
-screen, web app mode. Fix bugs and write web-platform style tests. \[0.5\] Ship
-in M58
-
-### Improve wheel scroll performance 0.63
-
-Support of touchpad scroll latching on all platforms behind a flag. P1
-0.70#wp-performance \[0.5\] Implement touchpad latching behind a flag on all
-platforms in M58 \[0.5\] Ship a finch trial by EOQ (not a finch trial?)
-
-Support of async wheel events with only the first event cancellable behind a
-flag. P2 0.30#wp-performance \[0.7\] Implement async wheel events behind a flag
-in M58 \[0.3\] Ship a finch trial by EOQ
-
-### Code Health 0.00
-
-Remove scrollbar code duplication P3 0.00#wp-architecture \[0.5\] Mac Scrollbars
-painted in same paths as Aura/Android (<https://crbug.com/682209>) \[0.5\] Move
-scrollbars out of ScrollableArea (<https://crbug.com/682206>)
-
-### Understand how users scroll 0.55
-
-Collect UMA stats for how users scroll P1 1.00\[0.5\] Measure how often users
-scroll with scrollbars in M57. \[0.3\] Measure how often users scroll using
-keyboard, wheel, touch in M58. \[0.2\] Measure how often users scroll with auto
-scroll in M58.
-
-Process is in place to analyze Rappor metric results for scroll latency P1
-0.10#wp-performance \[0.4\] Get Rappor metric data analyzed and aggregated in
-UMA or some other database \[0.4\] Generating appropriate charts in the Rappor
-dashboard or Locally \[0.2\] Use Rappor data to investigate at least one related
-issue if anything comes up
-
-### Reliable Web Platform Scrolling 0.40
-
-End quarter with 5 fewer Pri=0,1,2 scrolling bugs P2 0.40#wp-predictability
-Currently at 99, query: http://go/input-dev-scrolling-bugs
-
-### Implement Aura Overlay Scrollbars 0.95
-
-Turn on Overlay Scrollbars in CrOS in M59 by default P1 1.00
-
-Prioritise and fix all polish related issues P2 0.80Issues tracked in
-<https://docs.google.com/spreadsheets/d/13pt4tM4Prm7WSVL_bAtdGN6XKHPhvEYoYSvjwH-CGTU/edit#gid=0>
-
-Be responsive in working with PMs and UI review team 1.00
-
-## Threaded Rendering Related0.45
-
-### Accelerate more CSS animations 0.15
-
-Accelerate transform animations containing percentages P2
-0.10<http://crbug.com/389359> MQU: Discussed with Paint team, no potential
-problems found. Otherwise, no progress EOQ: No further progress
-
-Accelerate independent transform properties P2 0.20MQU: Investigation done,
-seems good to go. Needs design doc, no implementation yet. We now support the
-value 'none', and updated spec and Blink (main-thread) for smooth animation
-to/from none. EOQ: No further progress.
-
-Accelerate background-position P3
-
-### Enable more rich scroll effects 0.47
-
-Polish position sticky P1 0.700.7 - all P1 bugs older than 30 days fixed in M58
-\[100\] 0.3 - shared test suite uploaded to csswg-tests \[50\]
-
-Implement Scroll Snap Points for composited scrolling in M58 behind a flag P2
-0.400.2 - design what information needs to be sent to CC 0.2 - match the new CSS
-properties and box alignment model 0.2 - Implement snap info on main and send to
-CC 0.4 - Implement snapping for touch scrolling on compositor
-
-Scroll-linked animation polyfill P2 0.50Polyfill of proposed API written to
-support / inform the spec. A demonstrating demo. Polyfill WIP.
-
-Support main thread scroll customization P3 0.00Implement declarative API to
-allow main thread scroll customization without affecting all scrolling. This is
-required for an original trial experiment. \[PUNTED\]
-
-Implement CSSOM Smooth Scroll P2 0.80Implement CSSOM Smooth Scroll and collect
-UMA metrics along with implementation
-
-### Improve performance-isolation on the web. 0.36
-
-Fix known bugs in existing AnimationWorklet / Compositor Worker implementation
-P1 0.25Fix any remaining bugs and polish the interface and performance: -
-document.scrollingElement is not working (<https://crbug.com/645493>) -
-occassional renderer freeze (<http://crbug.com/647035>)
-
-Batch property updates to compositor proxies enabling running on a different
-thread. P1 0.40
-
-Fix known bugs in AnimationWorklet spec P1 0.50We have a number of ship-blocking
-issues outstanding. Drive resolution to have an MVP animation worklet draft spec
-by EOQ
-
-Implement new AnimationWorklet API P3 0.00This is gated on resolving
-specification issues and is therefore marked as stretch (we can use the polyfill
-in the interim).
-
-\[stretch\] Document / share plan for receiving input in animation worklet P4
-0.50With plans for how this will work in Salamander. A plan was shared at
-blinkon to no objections for a rudimentary WIP API but objections have been
-raised regarding sharing this more broadly at houdini f2f. Need more feedback
-externally.
-
-### Improve Threaded Rendering Code Health 0.10
-
-Factor cc scrolling logic out of LTHI P3 0.00It should be possible to factor
-scrolling logic out of LTHI 0.5 Write design doc and create consensus around
-doing this clean up 0.5 Implement ScrollingHost to be responsible for scrolling
-logic in LTHI
-
-Investigate flakiness in threaded-rendering tests P3 0.40We have heard from
-animation team that some test are failing when used with threaded compositing.
-We need to investigate why and decide if it is worth more effort and formulate a
-solution
-
-Refactor AnimationWorklet plumbing to use animation machinery 0.00Adapt existing
-machinery for web-animation where appropriate reaching stage #3 as described in
-this initial design doc:
-https://docs.google.com/document/d/1q8ubhpeOvDOQk-BwthZzOcaZOvhWj7D-dTVYxPOvHYM/edit
-
-### Make compositing excellent 0.51
-
-Fix 16 open Hotlist-Threaded-Rendering bugs P1 0.80
-
-Track whether we're closing more Hotlist-Threaded-Rendering bugs than are opened
-P1 0.00
-
-Scroll on compositor thread more frequently on desktop. P1 0.60Increase the
-percentage of scrolls on the compositor thread by 5%. Ideas include making it
-possible to promote opaque fixed position elements, non text containing elements
-, border-radius (without memory hit, 80% completed). Blocking bug for mixing
-composited and non composited content was not resolved.
-
-Experiment not compositing small scrollers P2 0.74We have seen during perf
-parties that small composited scrollers can cause layer explosion. We should
-launch a Finch trial tracking memory and performance tradeoff.
-
-### Identify / demonstrate best performance web practices 0.67
-
-Implement and publish 2 new UI patterns P1 1.00Expect to get ~40k views per
-post. #wp-devx
-
-Identify effects used in 5 native applications which should be web apps P3 0.00
-
-Analyze one existing framework and identify potential pitfalls / improvements
-\[stretch\] P3 0.00
-
-### Improve understanding of the limitations and tradeoffs of threaded rendering in the wild. 0.38
-
-Analyze CPU costs as layer count increases based on UMA data P2 0.20
-
-Fix metric measuring difference between compositor frame rate and main thread
-frame rate P2 0.20tdresser@ found that
-scheduling.browser.mainandimplframetimedelta2 was not accurate. We should fix
-this so we can accurately track the upper bound on slippage. tdresser
-investigating whether rAF aligned input fixes this. We found particular
-instances of slippage in a trace which reported no slippage, but code looks like
-it should be correct. Needs further debugging.
-
-Measure time to move compositor frame from renderer to display compositor P2
-0.80- Did measurement on Daisy CrOS and local machine. - Added Microbenchmark. -
-Added UMA for aggregation and draw frame in display compositor.
-
-Perf Party: compositing edition P2 0.40Case study specific to GPU/compositing w/
-write-up and action items. 2 this quarter.
-
-Measure additional GPU cost due to layer promotion P3 0.20Ensure we can track
-regressions due to layer explosion. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/input-dev/input-objectives/2018-okrs/index.md b/chromium/docs/website/site/teams/input-dev/input-objectives/2018-okrs/index.md
deleted file mode 100644
index 0af829fe668..00000000000
--- a/chromium/docs/website/site/teams/input-dev/input-objectives/2018-okrs/index.md
+++ /dev/null
@@ -1,343 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/input-dev
- - Input Team
-- - /teams/input-dev/input-objectives
- - Input Objectives
-page_name: 2018-okrs
-title: 2018 OKRs
----
-
-## 2018 Q4
-
-## **Eventing Sub-team**
-
-### Add Richness to Web Platform 0.67
-
-Worker input event routing P1 0.50
-
-Ship predicted points API P1 0.50
-
-Ship User Activation v2 P1 1.00
-
-Resolve all User Activation v2 test regressions by M72 P2 0.80
-
-Ship pointerrawmove P2 0.80
-
-Harden User Activation code against untrusted renderer (crbug.com/848778) P3
-0.20
-
-### Product Excellence 0.58
-
-Synthetic pointer events automation 0.70
-
-Be responsive to our users P1 1.00
-
-Fix impactful bugs P1 0.60
-
-Fix prominent input interaction bugs P1 0.55
-
-Improved key inputs on Windows P1 0.30
-
-GPU Benchmarking enhancements P2 0.00
-
-PointerLock & MovementX/Y P2 0.50
-
-Unified Pointer Capture in Blink P3 0.40
-
-### Code Health 1.00
-
---use-zoom-for-dsf in Android 1.00
-
-Land 8 code-cleanup CLs. P2 1.00
-
-## Scrolling Sub-team
-
-### Add Richness to Web Platform 0.70
-
-Enable pull to refresh on the web P1 0.60
-
-Ship Implicit RootScroller P1 0.80
-
-### Improve Performance 0.60
-
-Hold the line on Input Performance 0.80
-
-Passive root wheel event listener intervention (crbug.com/125223) P1 0.80
-
-Prediction framework experiments for scrolling P1 0.50
-
-Improve scrolling smoothness in high-latency mode P3 0.00
-
-Remove timer to update hover state P3 0.30
-
-### Code Health 0.50
-
-Ship Blink-Gen-Property-Trees P1 0.80
-
-Threaded and OOPIF scroll tests coverage P2 0.00
-
-De-flake Scrolling Tests P2 0.60
-
-Scroll Unification P2 0.80
-
-Fix scroll restoration issue on youtube P3 0.50
-
-## 2018 Q3
-
-### **Eventing Sub-team**
-
-### Add Richness to Web Platform 0.58
-
-Fix remaining User Activation v2 test failures P1 0.50
-
-Ship User Activation v2 P1 0.60
-
-Worker input event routing P3 0.10
-
-Harden User Activation code against untrusted renderer P2 1.00
-
-Ship predicted points API P2 0.60
-
-Move Pointerlock spec v2 to recommendation P4 0.20
-
-### Product Excellence 0.70
-
-Be responsive to our users P1 0.50
-
-Fix impactful bugs P1 0.70
-
-Move movementXY calculation to Blink P4 0.10
-
-Direct manipulation stylus across all platforms P1 1.00
-
-Yeti team support P1 1.00
-
-Prediction framework experiments P2 0.40
-
-Noisy mouseleave events on Windows (crbug.com/798535) P2 0.40
-
-Automate pointerevent tests in wpt.fyi P4 0.20
-
-Enhance GPU benchmarking API surface P2 1.00
-
-Make GPU synthetic pointer action calls consistent with test driver calls P4
-0.00
-
-### Code Health 0.72
-
-Enabling --use-zoom-for-dsf in Android P1 0.90
-
-Use TSF instead of IMM32 on the latest Windows edition P2 0.60
-
-Cleanup User Activation v2 interface at Web layer (crbug.com/803203) P3 0.60
-
-Switch |WebInputEvent::Modifiers| to an enum class P4 0.00
-
-## Scrolling Sub-team
-
-### Improve Performance 0.78
-
-Hold the line on Input Performance P1 1.00
-
-Make document-level wheel listeners passive by default (crbug.com/626196) P1
-0.80
-
-Async touchpad pinch zoom (crbug.com/565980) P2 0.90
-
-Keyboard threaded scrolling (crbug.com/125223) P4 0.00
-
-Make new chrome metric dashboard P4 0.00
-
-UKM in-depth analysis P4 0.00
-
-### Add Richness to Web Platform 0.80
-
-Ship Implicit RootScroller P1 0.80
-
-### Improve Code Health 0.69
-
-Blink Generated Property Trees P1 0.90
-
-Create concrete plan for scroll unification P2 0.30
-
-Drive down layout test flakiness P3 0.60
-
-### Product Excellence 0.53
-
-Fix bugs related to “scrolling does not work” P1 0.50
-
-Fix bugs related to fling and autoscroll fling P2 0.60
-
-Fix bugs related to scroll restoration P3 0.50
-
-## 2018 Q2
-
-**Eventing Sub-team**
-
-### Add Richness to Web Platform (#blink-eco-standards) 0.53
-
-Resample input events on main thread and compositor P1 0.50
-
-User Activation v2 test failures P1 0.75
-
-User Activation v2 core implementation P1 0.45
-
-Browser-side triggering of User Activation P2 0.70
-
-Predicted Points P3 0.20
-
-Resume prototyping Worker input event routing (#blink-prim-workers) P4 0.10
-
-PointerLock v2 (#blink-eco-wpt) P4 0.00
-
-### Product Excellence (#blink-pe) 0.71
-
-Be responsive to our users (#blink-pe-bugs) P1 0.50
-
-Fix 10 regression bugs (#blink-pe-bugs) P1 1.00
-
-Fix 8 bugs with &gt;10 stars (#blink-pe-bugs) P1 0.90
-
-Move movementXY calculation to Blink (#blink-pe-bugs) P2 0.40
-
-Rational gesture token handling in Blink (crbug.com/789643) P4 0.50
-
-Automate pointerevent tests in wpt.fyi (#blink-eco-wpt) P4 0.10
-
-### Code Health (#blink-pe-code-health) 0.57
-
-Enabling --use-zoom-for-dsf in Android P2 0.70
-
-Cleanup User Activation v2 interface at Web layer (crbug.com/803203) P3 0.10
-
-Fix WebFrameClient vs WebRemoteFrameClient naming problem (crbug.com/846405) P3
-1.00
-
-Use WebPointerEvent instead of WebMouseEvent Blink (#blink-pe-oopif) P4 0.10
-
-## Scrolling Sub-team
-
-### Code Health (#blink-pe-code-health) 0.70
-
-Flings generated in the browser process P1 0.90
-
-\[SPv2\] Implement scrollbars for SPv2 P2 0.40
-
-\[SPv2\] Implement ScrollTree/Layer construction in PaintArtifactCompositor P2
-0.60
-
-\[SPv2\] Implement visual viewport for SPv2 P3 0.70
-
-### Performance (#blink-opti-scheduling) 0.81
-
-Improve understanding of real-world scrolling performance P1 0.70
-
-Hold the line on Input Performance P1 1.00
-
-Publish Integrated UMA/UKM dashboard P4 0.20
-
-### Product Excellence (#blink-pe) 0.58
-
-Window Touchpad P1 1.00
-
-Implicit root scroller (#blink-pe-bugs) P1 0.40
-
-Improve Wheel Scrolling Code (#blink-pe-bugs) P2 0.40
-
-Improve ChromeOS Scrollbar Experience P3 0.00
-
-## 2018 Q1
-
-**Eventing Sub-team**
-
-### Improve Smoothness and Predictability of Input Events 0.33
-
-### Resampling input events at rAF P1 0.50
-
-### Predictive Points P2 0.00
-
-### Add Richness to Web Platform 0.57
-
-### User Activation v2 (Simple User Activation) P1 0.70
-
-### Ship InputMode P1 1.00
-
-### PointerEvent spec - Close out V2, start on V3 P1 0.70
-
-### Continue prototype for Worker input event routing P2 0.00
-
-### Spec for input for Workers P2 0.00
-
-### Improve Android Drag & Drop (crbug.com/156390) P2 0.50
-
-### Spec and Ship InputModeAction P3 0.50
-
-### Clarify screenX/Y and movementX/Y definitions P4 0.20
-
-### Performance 0.82
-
-### Hold the line on Input Performance P1 0.70
-
-### UKM dashboard P1 1.00
-
-### Clean up input metrics P2 0.70
-
-### Product Excellence 0.75
-
-### Be responsive to our users P1 1.00
-
-### Touch Adjustment (crbug.com/625198) P1 0.80
-
-### Fix 8 regressions bugs P2 1.00
-
-### Fix 6 bugs with &gt;10 stars P2 1.00
-
-### Interoperable mouse user gestures (crbug.com/769796) P2 0.00
-
-### Rational gesture token handling in Blink (crbug.com/789643) P3 0.00
-
-## Scrolling Sub-team
-
-### Great Windows 10 Experience 0.74
-
-### Windows 10 Precision Touchpad basic support P1 0.80
-
-### Windows 10 Precision Touchpad support gesture based navigation P3 0.50
-
-### Product Excellence 0.57
-
-### Fix impactful bugs P2 0.71
-
-### \[Stretch\] Subpixel precision scrolling on main thread P4 0.00
-
-### Improved Code Health 0.71
-
-### Flings generated in the browser process P1 0.60
-
-### Frame and Element Scrolling Unified P1 1.00
-
-### Keyboard scrolls using gesture events P3 0.00
-
-### Improve Viewport Interoperability 0.07
-
-### Describe visual/layout viewport in an official spec P2 0.00
-
-### Settle on an interoperable and compatible way to size the layout viewport P3
-0.00
-
-### Fix interop issues related to how pages load initially P3 0.20
-
-### Add Richness to Web Platform 0.21
-
-### Web Apps can compose in views P1 0.20
-
-### Ship Scroll Customization Origin Trial P4 0.30
-
-### Performance 0.71
-
-### Improve Wheel Scrolling Performance P1 0.80
-
-### Improve understanding of real-world wheel scrolling performance. P4 0.00 \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/input-dev/input-objectives/index.md b/chromium/docs/website/site/teams/input-dev/input-objectives/index.md
deleted file mode 100644
index 3e7f193e102..00000000000
--- a/chromium/docs/website/site/teams/input-dev/input-objectives/index.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/input-dev
- - Input Team
-page_name: input-objectives
-title: Input Objectives
----
-
-At Google we define and track progress against our goals using
-["OKRs"](https://www.gv.com/lib/how-google-sets-goals-objectives-and-key-results-okrs)
-(Objectives and Key Results). Here are most of the OKRs for the input-dev team
-(a couple minor KRs relating to internal projects such as future Android
-releases have been omitted for confidentiality reasons). Note that these are
-**intentionally aggressive** and so we will be happy if we deliver 60%-70% of
-them.
-
-## 2019 Q1
-
-**Eventing Sub-team**
-
-### Add Richness to Web Platform (#AppGap)
-
-Ship predicted points API P1
-
-Off-Main-Thread Input Event Delegation P1
-
-Pointerevents V3 extension P2
-
-Ship pointerrawmove P2
-
-Virtual Keyboard API P2
-
-Activation delegation API P2
-
-HTML spec for UAv2 P2
-
-### Product Excellence (#ProductExcellence)
-
-Enable TSF by default
-
-Handle UAv2 post-launch regressions
-
-Be responsive to our users P1
-
-Fix impactful bugs P1
-
-Disable platform inputs in testing mode P1
-
-Synthetic pointer events automation (#HappyPath) P1
-
-Trusted Activation Triggers P1
-
-PointerLock coordinates: make the coordinate space well-defined. P2
-
-GPU Benchmarking enhancements (#HappyPath) P2
-
-Fix Android startup delay caused by slow hardware updates P2
-
-Resolve mouse interop issues P2
-
-### Code Health (#TechnicalExcellence)
-
-Pen input with Palm rejection (crbug.com/852022)
-
-Unified Pointer Capture in Blink P3
-
-PointerLock coordinates: consolidate calculation of movementX/Y P4
-
-## Scrolling Sub-team
-
-### Add Richness to Web Platform (#AppGap)
-
-Enable pull to refresh on the web
-
-Scroll to text fragment P1
-
-### Improve Performance (#FluidUI)
-
-Hold the line on Input Performance P1
-
-Improve scroll prediction with other predictors P1
-
-Compositor touch action P2
-
-Keyboard threaded scrolling P3
-
-### Code Health (#TechnicalExcellence)
-
-Non-Flaky Tests P3
-
-Scroll Unification P4
-
-## Historical Objectives and Results
-
-## [2018 OKRs](/teams/input-dev/input-objectives/2018-okrs)
-
-## [2017 OKRs](/teams/input-dev/input-objectives/2017-okrs)
-
-## [2016 OKRs](/teams/input-dev/input-objectives/2016-okrs)
-
-## [2015 OKRs](/teams/input-dev/input-objectives/2015-okrs) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/bug-triage/index.md b/chromium/docs/website/site/teams/layout-team/bug-triage/index.md
deleted file mode 100644
index 1297558fe95..00000000000
--- a/chromium/docs/website/site/teams/layout-team/bug-triage/index.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-page_name: bug-triage
-title: Bug Triage Instructions
----
-
-The layout team has a bug triage rotation where for a week at a time a member of
-the team is responsible for triaging bugs associated with parts of the code that
-the team is responsible for. This document outlines the policy and suggestions
-surrounding bug triage.
-
-Our SLA is to triage all incoming bugs within one week and to fix all P1
-regressions within one release.
-
-## Suggested workflow:
-
-1. Every other day check the list of [Untriaged
- bugs](https://bugs.chromium.org/p/chromium/issues/list?can=37830509&sort=-id&colspec=ID+Pri+M+Status+Owner+Summary+Modified)
- with the aim to reduce the number to zero.
- For each bug, check whether the issue can be reproduced.
- * If not either mark as WontFix or add the "Needs-Feedback" label
- and ask for follow up information.
- * If it can be reproduced, determine if it's a valid bug. Check
- behavior in other browsers and the relevant specifications.
- * If it is a valid bug determine whether it is a regression or
- not. Set type to Bug-Regression if it is and determine [when it
- broke](/developers/bisect-builds-py). Set relevant sub category
- and assign to the person that introduced the regression.
- * If valid and not a regression determine severity. For P0 and P1
- assign to owner for specific area. For P2 set status to
- Available.
-2. At least once a week check the list of regressions
- ([P0/P1](https://bugs.chromium.org/p/chromium/issues/list?can=37830592&q=Pri%3D0%2C1&sort=-id&colspec=ID+Pri+M+Status+Owner+Summary+Modified),
- [P2/P3](https://bugs.chromium.org/p/chromium/issues/list?can=37830592&q=-Pri%3D0%2C1&sort=-id&colspec=ID+Pri+M+Status+Owner+Summary+Modified)).
- For each P0 or P1 regression, check if it can still be reproduced.
- * If not mark as Fixed and add comment to CL that fixed it.
- * If the issue persists ping the owner or assign one as needed.
- Continue with P2 and P3 regressions as time allows. Don't spend more than
- ~1h/week on regression triage.
-
-## Relevant Links
-
-* [Untriaged
- bugs](https://bugs.chromium.org/p/chromium/issues/list?can=37830509&sort=-id&colspec=ID+Pri+M+Status+Owner+Summary+Modified)
-* [P0 and P1
- regressions](https://bugs.chromium.org/p/chromium/issues/list?can=37830592&q=Pri%3D0%2C1&sort=-id&colspec=ID+Pri+M+Status+Owner+Summary+Modified)
-* [P2 and P3
- regressions](https://bugs.chromium.org/p/chromium/issues/list?can=37830592&q=-Pri%3D0%2C1&sort=-id&colspec=ID+Pri+M+Status+Owner+Summary+Modified)
-* [Bisecting builds](/developers/bisect-builds-py) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/eliminating-simple-text/index.md b/chromium/docs/website/site/teams/layout-team/eliminating-simple-text/index.md
deleted file mode 100644
index 25e8a21e7ac..00000000000
--- a/chromium/docs/website/site/teams/layout-team/eliminating-simple-text/index.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-page_name: eliminating-simple-text
-title: Eliminating Simple Text
----
-
-[eae](mailto:eae@chromium.org), [drott](mailto:drott@chromium.org),
-[behdad](mailto:behdad@chromium.org), [kojii](mailto:kojii@chromium.org)
-April 2, 2015
-
-Blink currently has two separate text paths, the simple path and the complex
-path. The simple path is an optimization and is used for a handful of scripts,
-most notably latin-1, when no advanced typesetting features are used.
-
-## Complex Text Performance
-
-We'd like to eliminate the simple text path and have all text use the current
-complex text path. Doing so would allow us to support kerning and ligatures
-everywhere, have similar performance regardless of script and, more importantly,
-greatly reduce code complexity and reduce bugs resulting from differences in the
-two code paths.
-
-In order to do that though we must first improve the performance of the complex
-path to match, or exceed, the performance of the simple path. Early measurements
-here or here suggests that hb_shape() itself is not anything nearly the
-bottleneck at all, and a lot of churn happens in HarfBuzzShaper, which can and
-should be streamlined.
-
-### Ideas for improving complex text performance:
-
-* Replace current (broken) run cache with a word cache (see below for
- more ideas on how to cache width info), ala Firefox.
-* Normalize text directly on harfbuzz buffer, avoiding extra copy of
- string.
-* Add support for latin-1 text to shaper, avoiding upconverting
- latin-1 text to utf-16.
-* Remove overhead of deciding which code path to use.
-* Do not repeatedly setFontFeatures on each shaper construction
-* Do not create list of HarfBuzzRun’s, etc, just to free them after
- iterating over them once. Copy to output buffer directly from
- hb_buffer().
-* Switch to HarfBuzz-based itemization; this, if done properly, will
- result in improved performance; but is mainly a correctness feature.
-* Keep information about HarfBuzzRun segmentation in a parallel data
- structure, see below.
-
-## Details
-
-### Keeping Word Length Measurements / Thoughts on Caching
-
-Word length measurements are a function of a styled font instance, language
-information, script information, and a string of text and it’s surrounding text
-or context.
-
-length = f(font, language, script, text, context)
-
-Instead of continuously calling constructTextRun and textWidth during layout,
-then doing this all over again for selections, dirty rectangles and so on, we
-can perhaps keep a separate text tree that contains the information required for
-length measurements and the strings. Then RenderObjects would just reference
-portions of this text tree, and can directly derive width information.
-
-Instead of a “singleton word cache” somewhere with only an eviction heuristic or
-a fixed size, we could have stricter lifecycle control over the objects in such
-a tree - they would stay in sync with the RenderObjects that reference them.
-When more text containing nodes are added to the DOM, new objects in the text
-tree are created. When DOM Nodes are deleted, we no longer need portions of the
-text tree.
-
-Note that the size of a word is not always easy to define for languages that do
-not necessarily use an explicit word separator such as a space character.
-
-### HarfBuzzRun Segmentation
-
-The parallel data structure as outlined above, should also keep information
-about shaping run segmentation, and - if needed - recompute that on a finer
-granularity, if text changes.
-
-### Optimize hb_shape()
-
-HarfBuzz’s OpenType processing is much faster than alternatives we have
-measured. Still, the kerning feature in Roboto takes half of the shaping time.
-That’s way too excessive. In general, comparing hb-shape’s performance with
---shaper=ot against --shaper=fallback shows how far off we are from a barebone
-fastpath. Currently this number stands at about 10x, depending on what font and
-what font_funcs implementation. More measurement and optimizations here are
-possible.
-
-### Benchmarks
-
-We should restructure our telemetry benchmarks specifically for text measurement
-performance, perhaps have a separate group of tests besides blink_perf.Layout.
-
-In addition to that, we need to develop new test cases, to better cover real
-world text-performance heavy use cases.
-
-Out of that effort we could develop a publicly available text layout benchmark,
-to compare Blink performance against other engines. The Sunspider, Kraken of
-text layout.
-
-### Unit Testing
-
-We should create a native test harness for the Font.cpp and HarfBuzzShaper.cpp
-logic.
-
-In order to improve our shaping correctness and perhaps do performance tests on
-a level that cuts out blink layout etc. we should try to create a test harness
-for Font.cpp where we can instantiate fonts by name, size and font features.
-Then we can test for how runs are formed, shaping results, etc.
-
-## Eliminating Simple Text
-
-Once the complex text path is as fast (or nearly as fast) as the current simple
-text path we should force all text down the complex text path and (eventually)
-eliminate the simple text path entirely. This will give us an extra performance
-win as it allows all text path branching to be removed, including costly string
-scans. It would also allow us to enable typesetting features, such as kerning
-and ligatures, for all text. More importantly though it would allow us to have a
-single unified text layout path which in turn would reduce complexity and
-maintenance costs as well as as ensure consistent performance regardless of
-script. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/index.md b/chromium/docs/website/site/teams/layout-team/index.md
deleted file mode 100644
index 591474b9aa0..00000000000
--- a/chromium/docs/website/site/teams/layout-team/index.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: layout-team
-title: Layout Team
----
-
-The layout team has been subsumed into the new [rendering
-core](//chromium.org/teams/rendering) team. Please see the rendering core page
-for details about ongoing style and layout work.
-This page is preserved for posterity and will no longer be updated.
-
-The layout team is a long-term engineering team tasked with maintaining,
-supporting, and improving the layout capabilities of the Chromium Blink
-rendering engine. This includes line layout, block layout, text, fonts, and
-high-dpi support. It is distinct from [style](/teams/style-team) and
-[paint](/teams/paint-team), both of which are handled by their respective teams.
-
-## Team Charter
-
-Our overarching goal is to **improve the experience for end users and platform
-developers alike**.
-
-* By offering fast, correct, and compatible layout features supporting
- the majority of writing systems and scripts.
-* By providing layered and powerful APIs for developers.
-* By driving the layout capabilities of the web forward through
- collaboration with web developers, other browser vendors, and
- standard bodies.
-* And finally, by intervening when required. Thereby allowing a better
- user experience for existing and legacy content.
-
-## Big ticket items for 2017
-
-* Schedulable, interruptible engine
- * LayoutNG can render ~50% of web content.
-* Give framework authors the ability to extend the rendering engine
- * Ship at least one CSS Houdini API.
-* High quality predictable platform
- * Maintain bug SLA
- * Full test and design doc coverage.
- * Ship CSS Grid.
- * Unify scrolling implementation (root layer scrolling).
- * Ship OpenType variation support.
- * Intersection Observer v2.
-* Improve rendering performance
- * Improve line layout performance by 20%
-
-A large number of other individuals not listed above routinely contribute to our
-layout code and their impact and contributions should in no way be downplayed.
-This merely lists the people that formally make up the layout team or have
-committed to a certain task or project.
-
-If you are looking for someone to review a change to the layout code anyone on
-the list above should be able to help or connect you with the right person. For
-questions about the design or implementation of a certain layout sub-system or
-about layout in general the entire team may be reached through the
-[layout-dev](mailto:layout-dev@chromium.org) mailing list.
-
-For higher level questions or if you are interested in joining the team, please
-reach out to [Emil](mailto:eae@chromium.org).
-
-## Design Documents
-
-* [LayoutUnit & Subpixel
- Layout](https://trac.webkit.org/wiki/LayoutUnit) (2012)
-* [Line Box float -&gt; LayoutUnit transition
- plan](https://docs.google.com/a/chromium.org/document/d/1fro9Drq78rYBwr6K9CPK-y0TDSVxlBuXl6A54XnKAyE/edit)
- (2014)
-* [Blink Coordinate
- Spaces](/developers/design-documents/blink-coordinate-spaces) (2015)
-* [Eliminating Simple
- Text](/teams/layout-team/eliminating-simple-text) (2015)
-* [LayoutObject Tree API
- Proposal](https://docs.google.com/document/d/1qc5Ni-TfCyvTi6DWBQQ_S_MWJlViJ-ikMEr1FSL0hRc/edit)
- (2015)
-* [Using Zoom to Implement Device Scale
- Factor](https://docs.google.com/document/d/1CZSCPzOYujdUMyChocwzOBPKxYAoTsEoezMye30Hdcs/)
- (2015)
-* [Scroll Anchoring](http:////bit.ly/scroll-anchoring) (2016)
-* [Shaper Driven Line
- Breaking](https://docs.google.com/document/d/1eMTBKTnWEMDu00uS2p8Xj-l9Pk7Kf0q5y3FbcCrWYjU/edit?usp=sharing)
- (2016)
-* [Root Layer
- Scrolling](https://docs.google.com/document/d/137p-8FcnRh3C3KXi_x4-fK-SOgj5qOMgarjsqQOn5QQ/)
- (2017)
-
-**Documentation**
-
-* [Out of flow
- positioning](https://docs.google.com/document/d/1Qbgfx7vh2CTxa8CsYVS25tQWtkGdrN-D6TzPmYGZNtc/edit#heading=h.ndf3qdi6efu4)
-
-## Links
-
-* [Readmap & Potential
- Projects](/teams/layout-team/potential-projects)
-* [Team mailing
- list](https://groups.google.com/a/chromium.org/forum/#!forum/layout-dev)
-* [Profiling Blink using Flame
- Graphs](/developers/profiling-flame-graphs)
-* [Skia telemetry try
- bot](http://skia-tree-status.appspot.com/skia-telemetry/chromium_try) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/20141209/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/20141209/index.md
deleted file mode 100644
index 95559141d4f..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/20141209/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: '20141209'
-title: Tuesday, December 9, 2014
----
-
-Attendees: benjhayden, cbiesinger, dsinclair, dglazkov, eae, jchaffraix, nduca,
-szager, skobes
-Introductions, quick updates:
-eae: In SFO, currently working on text and line layout cleanup/performance
-szager: In SFO, recently transferred to blink from chrome infrastructure.
-dan: In WAT, working on paint invalidation and not mutating the render tree
-during layout
-cbiesinger: In NYC, working on all sorts of things, mostly cleanup at the
-moment.
-jchaffraix: In MTV, working on rendering and project warden
-skobes: In MTV, scrolling cleanup, warden
-benjhayden: In MTV, recently transferred to blink to work on layout performance.
-Project Warden update from Dan:
-Warden is a project to clean up long standing issues, mostly in the
-layout/rendering space, including:
-- widget tree hierarchy
-- asserts, clusterfuzz
-- fixing full screen to work correctly
-- avoiding render tree mutations during layout
-- move line layout to layout unit
-- unify scrolling paths
-- type system for blink (screen vs layout coordinates)
-
-Project warden is a project under the layout team and will continue as is. With
-the additional resources of the entire layout team we can now take on additional
-tasks. Performance is a key goal but we are currently suffering from reliable
-metrics and limitations when it comes to performance testing.
-
-Legacy webkit performance tests are non-ideal in that they are sampling based
-and do properly account for scheduled cpu time. Modern telemetry tests account
-for scheduling and measures time on a low, fine grained level resulting in more
-reliable metrics. We should investigate converting existing tests to
-telemetry-style or creating new layout performance tests to guide our work. We
-also need to profile the layout code based on these tests and real world
-websites to determine performance bottlenecks and hot code paths.
-
-Overhead:
-- Weekly stand-up meetings?
-- Re-purpose the existing project warden meetings (Mondays at 11am PST)
-- Bi-quarterly OKR meetings (beginning of quarter to grade last quarters OKRs
-and set new objectives, mid-quarter check-in).
-- Set up team mailing list? Decided not to and use blink-dev for the time being.
-- Set up team web site? Yes.
-OKR candidates:
-- position sticky?
-- measurement api
-- better perf tets
-- report on whats slow
-- performance work
-- layout hooks (from glitter)
-- natural animations
-- subpixel when animating
-Action items:
-- Add all layout team members to weekly stand-up \[dsinclair\]
-- Schedule OKR meeting for \[eae\]
-- Come up with short list of proposed OKRs in preparation for next meeting
-\[eae, jchaffraix\]
-- Set up web site for team \[eae\]
-- Discuss performance testing strategies \[benjhayden, nduca, eae\]
-- Explain team role in overall blink \[deferred until after OKR meeting\] \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/20150107/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/20150107/index.md
deleted file mode 100644
index b20aee82e9e..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/20150107/index.md
+++ /dev/null
@@ -1,221 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: '20150107'
-title: Q1 OKRs - Wednesday, January 7, 2015
----
-
-Attendees: benjhayden, cbiesinger, dsinclair, eae, jchaffraix, nduca, szager,
-skobes
-
-... Pleasantries, going over the list of proposed OKRs ...
-
-\[ Discussing the proposed "Have ten layout benchmarks with less than 1%
-variation between runs" OKR \]
-
-&lt;benjhayden&gt; For the benchmark OKR are you referring to to descriptive
-benchmarks?
-
-&lt;eae&gt; Not necessarily, the goal is to have reliable benchmarks to guide
-our work. Short term that likely means silk-style measuring layout times.
-
-&lt;jchaffraix&gt; We do want to move to descriptive benchmarks (new type of
-benchmark using recipes) eventually.
-
-\[ Discussing the proposed "Improve two benchmarks by 10%" OKR \]
-
-&lt;cbiesinger&gt; How will we choose which tests to improve by 10%?
-
-&lt;jchaffraix&gt; Any of the tests really.
-
-&lt;eae&gt; Will be guided by our findings when adding benchmarks and doing
-profiling.
-
-&lt;cbiesinger&gt; We should make the objective more precise, what kind of
-benchmark?
-
-&lt;nduca&gt; Make it two key_silk cases
-
-\[ Discussing the proposed "Support subpixel layout during animation" OKR \]
-
-&lt;skobes&gt; What is involved with subpixel layout during animation?
-
-&lt;eae&gt; Today we snap to CSS pixels during layout, which ensures crisp
-rendering, but during animations this causes animations to move on full pixel
-boundaries which isn't ideal.
-
-&lt;nduca&gt; It's all about enabling natural animations.. without that layout
-animations looks bad.
-
-&lt;eae&gt; ...really bad.
-
-&lt;dsinclair&gt; Do we have any idea how hard it will be?
-
-&lt;eae&gt; Technically all we need to do is not pixel-snap during animations
-but doing that without complicating the code and introducing a separate code
-path for animations could be tricky.
-
-&lt;dsinclair&gt; We don't want to add "if (animation)" checks everywhere.
-
-\[ Discussing the proposed "Move line layout to LayoutUnits" OKR \]
-
-&lt;eae&gt; How is the work to move line layout to LayoutUnits coming along, is
-finishing it in Q1 a realistic goal?
-
-&lt;benjhayden&gt; Should be doable, making good progress. Stefan has started
-helping out.
-
-&lt;dsinclair&gt; A lot of it is figuring out rounding errors and burning down
-the list of issues.
-
-\[ Discussing the proposed "Prototype and propose Measure API" OKR \]
-
-&lt;nduca&gt; Is the Measure API OKR about Element.measure
-
-&lt;eae&gt; It is really too early to tell. We don't know Element.measure is the
-right API yet, hence the need for a prototype.
-
-&lt;jchaffraix&gt; The idea is to create a prototype, possibly based on
-Element.measure, implement it and see if it solves the problem.
-
-&lt;nduca&gt; So basically talk to Tab, spec the API and send out an "Intent to
-Implement"? It doesn't have to be faster, it just needs to be separate from
-layout.
-
-&lt;eae&gt; An intent to implement might be premature, we need to figure out if
-we can support the proposed API first and if it actually works as expected.
-
-&lt;nduca&gt; We have a lot of requests for this and it is really important.
-Nothing is sure or has been decided but we need to do something in the space.
-
-&lt;eae&gt; Julien and I talked about it earlier and think it is important to
-have a prototype and have someone from Docs or another client experiment with it
-to make sure it fits their use cases.
-
-&lt;nduca&gt; This isn't for Docs or desktop apps, they already have working
-solutions and use native apps on android. It is more about animations between
-layout states.
-
-&lt;nduca&gt; Check with \[ internal team, redacted \]
-
-&lt;nduca&gt; This is important for people doing transition animations from one
-layout to another. They have to do the new layout and measure it, doing that
-today requires jiggling and hacks when all they need to know is the final state.
-We don't have to make it faster, just needs to support doing the measurements
-without invalidating the universe.
-
-\[ internal discussion, redacted \]
-
-&lt;eae&gt; If that is the end goal there are other ways we could approach it.
-
-&lt;jchaffraix&gt; Let's change the OKR to "Create a prototype and write-up of
-lessons learned"
-
-\[ Discussing the proposed "Finish root layer scrolling" OKR \]
-
-&lt;eae&gt; Is finishing root layer scrolling this quarter a realistic goal?
-
-&lt;skobes&gt; Making good progress, should be able to finish this quarter.
-
-\[ Discussing the proposed ClusterFuzz OKRs \]
-
-&lt;skobes&gt; How many clusterfizz asserts are you seeing now?
-
-&lt;cbiesinger&gt; About 4 pages, burning down, not sure if more will surface.
-Some are on the chrome side and out of scope but there are a good number of
-them.
-
-&lt;cbiesinger&gt; Actually, make that 18 pages, 10 per page...
-
-&lt;eae&gt; The OKR might be a bit too optimistic then, just triaging that many
-will take quite a while.
-
-&lt;dsinclair&gt; Triage and fix 50%?
-
-&lt;cbiesinger&gt; More reasonable.
-
-&lt;dsinclair&gt; Can we do the auto triage?
-
-&lt;cbiesinger&gt; Abhishek said the ClusterFuzz team would help with that.
-
-&lt;jchaffraix&gt; How about team warden specific OKRs?
-
-&lt;eae&gt; We have 'scrolling' and 'line layout'. Do we need more?
-
-&lt;julien&gt; Ok. What other warden tasks are ongoing?
-
-&lt;dsinclair&gt; Fullscreen and single item list selectbox (also on android)
-are ongoing tasks in that realm.
-
-&lt;nduca&gt; Should we have a code health objective that captures what you are
-doing Dan?
-
-&lt;nduca&gt; Next quarter the the boundary between layout and style needs to be
-better defined, we should help with that.
-
-&lt;julien&gt; By defining an API?
-
-&lt;nduca&gt; Code health and new features are separate concerns. We can make
-our lives and the life of the style team easier by being healthier, paying down
-technical debt. Making people faster is good investment.
-
-&lt;dsinclair&gt; Agreed.
-
-\[ Discussing position sticky \]
-
-&lt;eae&gt; Gmail, docs doesn't see it as top priority.
-
-&lt;nduca&gt; Mobile first matters for this, apps do not... ads, mobile apps
-matters.
-
-&lt;eae&gt; Seems to have fizzled out from a year ago, is it still relevant? Do
-we have anyone asking for it?
-
-&lt;nduca&gt; We can likely punt it for bit longer but it will come up. We might
-have to bite the bullet and do it eventually.
-
-&lt;nduca&gt; The extensible web approach (layout hooks) might be better.
-
-\[ internal discussion, redacted \]
-
-&lt;eae&gt; Agree that solving the larger problem would be better. Let's revisit
-position sticky in Q2.
-
-&lt;dsinclair&gt; Wouldn't layout hooks disable the compositor?
-
-&lt;nduca&gt; By delegating to js we would lose compositor hotness.
-
-&lt;skobes&gt; Already moving in that direction with delayed scrolling, other
-concepts. Certain features disables the compositor wins. Trade-offs.
-
-\[ Discussing the proposed "Improve two tests by 10%" OKR \]
-
-&lt;skobes&gt; Who would be responsible for the 10% perf wins?
-
-&lt;benjhayden&gt; Would be everyone? I have some things that would imrpove
-performance. I think Emil can deliver some wins though the text optimization
-work. Text shows up prominently in profiling runs.
-
-&lt;skobes&gt; Is that simple vs complex text?
-
-&lt;eae&gt; not really, in the short term. Long term there are a lot of things
-we can do to speed up complex text and (eventually) move to one text path. In
-the short term there is a lot of room for improvement by simplifying things and
-avoiding unnecessary work.
-
-&lt;eae&gt; Some of Ben's work, like short-circuiting the float handling in
-layout, could have a big perf impact.
-
-&lt;nduca&gt; Everyone should try.
-
-&lt;eae&gt; Agreed, with new the new tests it is easier to track.
-
-&lt;nduca&gt; How about having a weekly meeting to keep on track?
-
-&lt;dsinclair&gt; We have one already, Mondays at 11. Re-purposed the Team
-Warden stand-up. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/friday-october-2-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/friday-october-2-2015/index.md
deleted file mode 100644
index 453191189a5..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/friday-october-2-2015/index.md
+++ /dev/null
@@ -1,822 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: friday-october-2-2015
-title: Friday, October 2, 2015 (Q3/Q4 OKRs)
----
-
-Attendees: eae, cbiesinger, jchaffraix, leviw, ojan, skobes, and
-
-szager (with ikilpatrick, drott, and kojii giving updates offline)
-
-&lt;eae&gt; Good morning everyone. I know it feels like just yesterday we
-
-set our Q3 OKRs but the quarter has already come to an end. Let's
-
-spend the next 20 minutes going though our KRs and see how we did and
-
-then use the rest of the time to discuss Q4.
-
-\[ Discussing "Update flexbox implementation to match latest version of
-
-specification" \]
-
-&lt;eae&gt; Christian, this one falls on you. Would you mind giving an update?
-
-&lt;cbiesinger&gt; I've updated some aspects of it to match the latest
-
-specification and sent numerous "Intent to Ship" announcements to
-
-blink-dev. For one of the biggest changes I added a use counter to
-
-ensure that we don't break too many websites, now waiting for it to
-
-reach a stable release to get numbers. As for the second big change I
-
-didn't do a very good job prioritizing and all of a sudden it was
-
-mid-October. Will carry over into Q4.
-
-&lt;cbiesinger&gt; Spent a lot of time on importing css test suites which
-
-wasn't captured in OKRs.
-
-&lt;eae&gt; Sounds like a 0.5?
-
-&lt;cbiesinger&gt; Agreed.
-
-\[ Discussing "Remove page zoom" \]
-
-&lt;eae&gt; This one falls on me, shared with the style team. We determined
-
-to be feasible, vast majority of usage in the wild is for "zoom: 1",
-
-i.e. a no-op used to trigger "has layout" in older version of IE. No
-
-progress on implementation. Wasn’t a priority for either the style nor
-
-the layout team. It's used extensively by layout tests so requires
-
-quite a few tests to be updated before we can remove it.
-
-&lt;eae&gt; Score: 0.0
-
-\[ Discussing "Updated Unicode Bidirectional Algorithm" \]
-
-&lt;kojii&gt; Had some progress on investigations, but not enough to write
-
-up. Propose score 0.2?
-
-&lt;eae&gt; Sounds reasonable.
-
-\[ Discussing "Unprefix CSS Writing modes" \]
-
-&lt;kojii&gt; All spec issues and critical code issues were resolved, design
-
-doc and consensus to ship in blink-dev and in CSS WG done. Patches
-
-are WIP.
-
-&lt;eae&gt; Spec issues and intent to unprefix took longer than expected, not
-
-due to any fault of ours. Let's call it 0.8.
-
-&lt;kojii&gt; Good. Should ship in early Q4.
-
-\[ Discussing "Improve font fallback" \]
-
-&lt;eae&gt; Drott couldn't make this meeting but reported the following earlier.
-
-&lt;drott&gt; Issue breaks down into better CSS font matching, better shaper
-
-integration, and better usage of user preference and system fallback
-
-APIs. Precondition, better CSS font matching done. Font fallback APIs
-
-on all platforms surveyed, shaper integration see below. After shaper
-
-integration is done, we can move to making better use of preference
-
-font, perhaps add per-script fallback fonts and make better use of
-
-system fallback APIs/Lists.
-
-&lt;eae&gt; Was a bit more work than anticipated, making solid progress.
-
-Will carry forward into Q4.
-
-&lt;eae&gt; Score: 0.5
-
-\[ Discussing "Spec work for houdini block & line custom layout" \]
-
-&lt; ikilpatrick&gt; Mainly concentrated on the other aspects of Houdini
-
-this quarter being custom paint and related specs. Groundwork is being
-
-done for layout w.r.t. Isolated Workers & CSSOM 2.0.
-
-&lt;ikilpatrick &gt; Had some more discussions with other browser vendors
-
-w.r.t. what this API would actually look like. Expect that more spec
-
-work will be done for layout in Q1/2 next year.
-
-&lt;ikilpatrick&gt; 0.1?
-
-\[ Discussing "Have all calls into block layout go through well defined API" \]
-
-&lt;eae&gt; This one was shared between Levi and Ian K. Could you give an
-
-update here Levi?
-
-&lt;leviw&gt; So, we got line layout almost entirely buffered form block
-
-layout. But we didn't get anywhere to style, editing or dom. I didn't
-
-expect us to get to all of that but we're still making solid progress.
-
-Have haven't started on the other vectors.
-
-&lt;eae&gt; Should we continue full steam ahead or stop and evaluate the
-
-line layout API before continuing?
-
-&lt;leviw&gt; I think there is value in doing that once we've completely
-
-finished the line layout API work, which we're close to, and have
-
-include guards in place. Then we should spend a few days to see how
-
-much we can do to clean up the API before going forward and maybe, if
-
-it seems really difficult, we could take a step back. That's my take
-
-on it.
-
-&lt;leviw&gt; This ended up being a bigger API that I was hoping for. On the
-
-other hand there are places where we can simplify it, a lot.
-
-&lt;ojan&gt; I also think line layout is the chattiest one, right?
-
-&lt;leviw&gt; Right, the other ones should be simpler. So, to answerer your
-
-question, I think we should continue full steam ahead.
-
-&lt;eae&gt; Great. How does 0.7 sound for a score?
-
-&lt;leviw&gt; Sounds about right.
-
-\[ Discussing "Have a clear understanding of the cost/complexity of
-
-custom layout." \]
-
-&lt;leviw&gt; We should continue. A lot of understanding the cost will be
-
-figuring out what the API will be like. That's why we're planning to
-
-sit down with the IE Edge team to help clarify the API. The ultimate
-
-cost and complexity of getting it into our engine is entirely
-
-dependent on what the API ends up being. So it's hard to say right
-
-now.
-
-&lt;eae&gt; Would it be fair to say that our plan is to continue our work on
-
-a layout API boundary and have discussions with other browser vendors
-
-to help steer and influence the custom layout APIs?
-
-&lt;leviw&gt; Getting agreement and knowing the scope, yes. Beyond the work
-
-we are doing with the API it's hard to get further ahead without broad
-
-agreement,.
-
-&lt;eae&gt; Are we doing everything we can to help this?
-
-&lt;leviw&gt; The most important thing we can do is to engage other vendors.
-
-We could always do more but we're in a good place.
-
-&lt;eae&gt; So, it sounds like we've done all we can here even though we
-
-don't yet have a clear understanding. 0.6?
-
-&lt;leviw&gt; I'd say 0.5, just because the ultimate goal was only inched
-
-towards, though we know the path to get there it has a lot of external
-
-dependencies.
-
-&lt;leviw&gt; All we can do is try and drive it as much as possible.
-
-&lt;eae&gt; 0.5 it is.
-
-\[ Discussing "Finish root layer scrolling" \]
-
-&lt;skobes&gt; So we landed a bunch of stuff here, the two I'm most excited
-
-about would be that it now works for inner and outer viewports on
-
-Android. The second one being coordinates scrollbars which is pretty
-
-awesome. So it's not done yet but made solid progress.
-
-&lt;skobes&gt; Still a bit worried about a tree walk for overflow scroll. We
-
-walk the entire deprecated paint tree underneath scrollable area for
-
-overflow scroll. Tried to get rid of it but it's complicated.
-
-&lt;skobes&gt; Would give a score of 0.7.
-
-&lt;eae&gt; Sounds fair.
-
-\[ Discussing "Remove simple text code path" \]
-
-&lt;eae&gt; The performance of complex path now exceeds that of simple path
-
-and all remaining functionality blockers have been resolved. All that
-
-is left to do is flip the switch. Sadly that will involve updating
-
-about 50 tests and rebaselining _all_ of our layout tests. So, we did
-
-all of the hard work, what remains is easy but labor intensive.
-
-&lt;eae&gt; Score 0.4?
-
-\[ Discussing "Improve integration between Blink and Harfbuzz" \]
-
-&lt;drott&gt; Implementation done, an issue with (anyway broken) small caps
-
-and an edge case with ZWJ and ZWNJs for Arabic and AAT font remains so
-
-far. Needs code cleanup, and performance evaluation, but functions
-
-well. Then should be ready for landing in steps.
-
-&lt;drott&gt; Perhaps 0.8-0.9?
-
-&lt;eae&gt; Let's say 0.8.
-
-\[ Discussing "Triage all incoming layout bugs within one week" \]
-
-&lt;eae&gt; Next up, the first of our goals around bug health.
-
-&lt;eae&gt; We have procedures are in place to triage all incoming bugs
-
-within a week. Mostly a manual process for now due to lack of better
-
-tooling but is working fine. For the latter part of the quarter we’ve
-
-manage to adhere to the SLA and triage all bugs within five to six
-
-days. Takes me about two hours a week which isn't too bad.
-
-&lt;eae&gt; Score: 1.0
-
-\[ Discussing "Reduce bug count by 30%" \]
-
-&lt;eae&gt; So, this one was definitively more ambitious....
-
-&lt;ojan&gt; How did we do? 3%?
-
-&lt;leviw&gt; 2%?
-
-&lt;eae&gt; We actually did a lot better than I feared. We reduced the total
-
-bug count by 16%, just over half of our goal. We did much better for
-
-high-priority bugs where the count was reduced by over 75%.
-
-Total: From 2742 down to 2301, a reduction of 441, ~16%
-
-Untriaged: From 860 down to 479, a reduction of 381, ~44%
-
-P0/P1: From: 247 down to 56, a reduction of 191, ~77%
-
-&lt;ojan&gt; That's really impressive.
-
-&lt;leviw&gt; Reduction of over 400? Nice!
-
-&lt; jchaffraix &gt; The fact that we still have over 50 P0/P1 bugs is
-
-pretty telling though, probably means we're using the priority labels
-
-wrong.
-
-&lt;eae&gt; We have a bunch of larger blink team level goals around bugs in
-
-Q4, we'll come back to that in a bit.
-
-&lt;eae&gt; Does a score of 0.6 sound reasonable? We did a little over half
-
-of as well as we set out but better for the bugs where it really
-
-matters.
-
-&lt;leviw&gt; Sounds about right.
-
-\[ Discussing "Reduce unnecessarily forced layouts" \]
-
-&lt;eae&gt; This was overly vague and we didn't really make any progress
-
-here. Plan to work with dev-rel to get a couple of examples of
-
-concrete cases where this is a problem on real world web sites and
-
-then make specific goals around that.
-
-&lt;ojan&gt; The goals should probably be around either reducing or making
-
-the layouts cheaper.
-
-&lt;eae&gt; That's a very good point, if we cannot avoid it than making it
-
-cheaper/more predictable is certainly a worthy goal.
-
-&lt;eae&gt; I'd score this as a solid 0.0.
-
-\[ Discussing "Add UMA tracking & monitoring for different types of layout" \]
-
-&lt;eae&gt; This is the work than Ben started before he left the team.
-
-Dominik had signed up to take it on but he was oversubscribed last
-
-quarter and this was deemed the lowest priority. Will carry over and
-
-could use a new owner.
-
-&lt;eae&gt; Score: 0.0
-
-\[ Discussing "Brainstorm/plan devtools/rail score/layout integration" \]
-
-&lt;eae&gt; We have some ideas here but implementation is blocked on the
-
-actual rail integration into dev tools. This goal was about coming up
-
-with ideas and thinking about what we might want to include, things
-
-like forced layouts, layout costs etc.
-
-&lt;eae&gt; Score 0.4
-
-\[ Discussing "Trace layout on some popular websites in US, Europe,
-
-Brazil, India" \]
-
-&lt;eae&gt; We held a number of rather productive tracing parties in MTV,
-
-SFO and WAT. Very useful and something we should continue doing.
-
-&lt;eae&gt; Score 0.8.
-
-\[ Discussing "Spin up effort around spatial" \]
-
-&lt;ojan&gt; We spun up an effort. Most of the work is pretty low priority.
-
-Have roadmap but it hasn't been staffed as it isn't considered to be
-
-super high priority at the moment. We don't want to starve other
-
-efforts.
-
-&lt;ojan&gt; There is a set of use cases about where things are on a page,
-
-mostly about delay loading things not on the screen. Other things on
-
-the list include the CSS contain property, Will sent out a list. There
-
-are a few smaller things.
-
-&lt;ojan&gt; Mostly a bunch of P2 work, nothing that we HAVE to do next
-
-quarter but if we don't do any then next year we'll be in a really sad
-
-state.
-
-&lt;eae&gt; Spun up, 1.0.
-
-&lt;eae&gt; Thanks everyone. Before we start talking about Q4 goals let's
-
-take a moment to think about things we did particularly well or
-
-particularly bad.
-
-\* silence \*
-
-&lt;eae&gt; Please, don't all speak at once.
-
-\* further silence \*
-
-&lt;ojan&gt; I think that the steady progress we made on reducing the bug
-
-count and fixing important bugs was great.
-
-&lt;szager&gt; I like that we keep our weekly meetings short and to the
-
-point. Is around 15 minutes which is about perfect.
-
-&lt;szager&gt; It's been nice having people from other offices come up to SF
-
-every now and then. Would be great if we could coordinate that better.
-
-&lt;leviw&gt; We have BlinkOn coming which is a great excuse for everyone to
-
-hang out here for a few days.
-
-&lt;skobes&gt; Is that in SF?
-
-&lt;leviw&gt; Yes, it was just announced.
-
-&lt;eae&gt; Christian will be in SF for the full week of BlinkOn, as will
-
-Dominik. He'll also be there the week before. Not sure about Koji yet.
-
-Always great to have everyone in the same room. Especially given how
-
-distributed we are.
-
-\[ Discussing "Q4 OKR Ideas & Suggestions" \]
-
-&lt;eae&gt; Let's move on. It sounds like we want to continue the flexbox
-
-work, right Christian?
-
-&lt;cbiesinger&gt; Yes.
-
-&lt;eae&gt; And continue on fullscreen, bokan has recently signed up to take
-
-that over.
-
-&lt;jchaffraix&gt; Right, he'll take it over from Dan. Dan is about to land
-
-his big fullscreen fix which is really exciting.
-
-&lt;eae&gt; We should have an item about houdini.
-
-&lt;leviw&gt; I put a tentative okr in there, should get Ian in on that
-
-conversation. Will follow up.
-
-&lt;eae&gt; Stefan, do you still want to drive the hyphenation work? We've
-
-had a couple of meetings with the Android team and it looks like we'll
-
-do a push to add hyphenation support and better line breaking in Q1.
-
-Q4 is too much of a push. We'll still need to do some design work and
-
-work with the Android text team in Q4 however.
-
-&lt;szager&gt; Sounds sane, hyphenation is the number one user request in
-
-Germany. Q1 sounds good, I'm fine with doing the required design work
-
-in Q4.
-
-&lt;skobes&gt; How about other browsers, do they all support hyphenation?
-
-&lt;leviw&gt; All other browsers support it. We had some support but ripped
-
-it out after the fork from WebKit.
-
-&lt;eae&gt; Finish root layer scrolling?
-
-&lt;skobes&gt; Yup.
-
-&lt;eae&gt; Do you think we could finish it in Q4 or will it carry over into Q1?
-
-&lt;skobes&gt; Think so.
-
-&lt;eae&gt; Another idea we've been toying with is reimplementing ruby on
-
-top of custom layout.
-
-&lt;jchaffraix&gt; Isn't that blocked on implementing custom layout?
-
-&lt;eae&gt; The idea is to use the internal API we've been working on and
-
-then develop it in conjunction with the API. That way we ensure the
-
-validity of the API.
-
-&lt;eae&gt; To be clear, this goal is not about _shipping_ a custom layout
-
-based ruby implementation. It's about seeing if it is feasible to use
-
-some of the custom layout APIs to implement it internally and then, if
-
-it is a successes, we'll see about shipping it. Would be nice if we
-
-could as the current ruby implementation is a bit of a mess and isn't
-
-complete. If we need to reimplement it I'd rather do it in a
-
-extensible way. Having a custom for custom layout would be nice.
-
-&lt;eae&gt; Next up, remove simple text. It's all about the rebaselines.
-
-&lt;eae&gt; Font fallback, continue shaper integration and pref fonts and
-
-system fallback improvements. Falls on Dominik and he wants to
-
-continue this work.
-
-&lt;eae&gt; As for bug health we've had a number of discussions in the
-
-larger blink team and we've agreed to some common goals. What it comes
-
-down to for us is the following:
-
-- Continue to triage all bugs within one week
-
-- Fix all (new) P0/P1 within one release
-
-- Reduce untriaged bug count by 50%
-
-- Reduce total bug backlog by 15%
-
-&lt;eae&gt; The two last goals are ambitious but doable.
-
-&lt;jchaffraix&gt; I'll be helping with bug triage in addition to documentation.
-
-&lt;eae&gt; Thanks Julien! We should also make sure to have a goal around
-
-documentation.
-
-&lt;jchaffraix&gt; For those that haven't been following along, I've been
-
-adding google style class level comments documenting the design and
-
-implementation details for many of our core classes.
-
-&lt;leiw&gt; I have a very long bug list, if we triage by just assigning
-
-them I'll have an even longer list. That's not very helpful. Might
-
-make more sense to have a bucket or label of sorts rather than
-
-assigning more bugs?
-
-&lt;ojan&gt; Does triage imply assignment?
-
-&lt;eae&gt; No
-
-&lt;ojan&gt; The way it used to work is that assigned means it's something
-
-you will work on in the next week or so. Used to be standard practice
-
-on Chrome, not any more. We should move back to it.
-
-&lt;leviw&gt; I don't mind having them assigned, for these specific bugs I'm
-
-a good fit and the right person to work on it.
-
-&lt;ojan&gt; cc:ing would be fine for that, no?
-
-&lt;leviw&gt; Yeah, should be fine. Hard to prioritize, I work off things
-
-that are assigned to me.
-
-&lt;szager&gt; I also think that, we use bug tracker for work items, bugs
-
-and feature requests are intermingled.
-
-&lt;ojan&gt; Sorry to derail the discussion, we could talk about this offline.
-
-&lt;eae&gt; Not at all, this is super useful. We need to understand what
-
-triage means and come up with a way to handle the backlog.
-
-&lt;ojan&gt; How about we add a set of hot-lists or labels to help with this
-
-without giving an illusion of forward progress?
-
-&lt;leviw&gt; Would make me feel less like I'm drowning in bugs. Would be
-helpful.
-
-&lt;skobes&gt; I have the same problem with text auto size bugs, mix of
-
-assigned and watching label. There are too many for me to look at,
-
-need way to filter.
-
-&lt;ojan&gt; How about you use a label for this? like
-"important-text-autosizing".
-
-&lt;skobes&gt; How about two separate triage passes, one to delegate and one
-
-to set priority?
-
-&lt;eae&gt; As for priority we need to have a team wide definition of what
-
-P1 vs P2 vs P3 means, today P1 is essentially for blockers, P2 for
-
-everything else and P3 means it'll never be looked at. Dru is driving
-
-an effort to define the priorities.
-
-&lt;eae&gt; We should continue this discussion and see what we can do to
-
-make this work better.
-
-&lt;ojan&gt; Who should drive this?
-
-&lt;eae&gt; any volunteers?
-
-\* crickets \*
-
-&lt; jchaffraix&gt; I'm fine volunteering a little but seems to big for one
-person.
-
-&lt;ojan&gt; Might not need a formal owner.
-
-&lt;leviw&gt; Let's try a few things and sync back in a month.
-
-&lt;ojan&gt; Great, once we have something that works we can expand to
-
-larger blink team. This is a team-wide problem but fixing it probably
-
-needs to start in the sub-teams. Grassroots.
-
-&lt;eae&gt; Let's talk about RAIL and the work we'd like to do in that space.
-
-&lt;eae&gt; Implement CSS containment from Ojans spatial list seems like a
-
-good candidate. Question is how to prioritize. Do you want to give a
-
-sixty second summary Ojan?
-
-&lt;ojan&gt; Sure, it's a feature where you can say contains: and a bunch of
-
-values. Specifies that a div fully contains all of its children. No
-
-position absolute can escape, no overflow outside the div. Also
-
-doesn't auto-size. What this allows us to do is when you hit a contain
-
-thing, if it's outside the screen, you can completely ignore doing
-
-layout on the children. Might not even need style recald and certainly
-
-no layout.
-
-&lt;ojan&gt; Today you cannot do that without detailed knowledge of the
-
-children. It's our proposal, it's has gone through the working group
-
-and is ready to implement. Mozilla is about to start implementing it.
-
-&lt;ojan&gt; Skipping style recalc work is tricky but possible. Skipping
-
-layout is easy.
-
-&lt;ojan&gt; V1 would not do the majority of optimizations, would implement
-
-the correct behavior (no auto-size, reset list numbering, clip
-
-content), Super easy. Small amount of work. The only optimization
-
-would be the subtree layout root. Plugging in to existing system.
-
-Easy. Get performance benefit form that. In future quarters we could
-
-plug in more performance work. As web devs get aboard we get more
-
-value from doing the performance work.
-
-&lt;ojan&gt; Useful for delayed loading, infinitive list etc. Also useful
-
-for things like text editors where typing in a text box doesn't
-
-trigger layout for the full page. Only the text area.
-
-&lt;skobes&gt; Positioned content?
-
-&lt;ojan&gt; Changes behavior. Performance wise, nothing bad will happen.
-
-&lt;skobes&gt; What if we have a lot of subree layout roots?
-
-&lt;ojan&gt; Might require some fixes on our side, i.e. not having a flat
-
-structure. Work should be guided by usage. Also, as you cannot have
-
-inlines or auto sizer for this it naturally limits the places it can
-
-be used.
-
-&lt;ojan&gt; Not a p1, new feature. Helps in short term in building
-
-libraries. Long game.
-
-&lt;eae&gt; Also not much work, would be good to get started given the long
-
-term goals and benefits.
-
-&lt;ojan&gt; It's the one big thing I want to do from spatial in Q4.
-
-&lt;eae&gt; Do you want to talk about smooth scrolling Steve?
-
-&lt;skobes&gt; This is one of chromes oldest bug, issue 575, every other
-
-browser has had this for a long time.
-
-&lt;eae&gt; Do we have the pieces? Can we do this?
-
-&lt;skobes&gt; All pieces are in place, doable in Q4.
-
-&lt;eae&gt; Let's do it!
-
-&lt;eae&gt; Finally, we should have a goal around forced layouts. Will
-
-discuss specifics with devrel and come up with a set of concrete goals
-
-that we can iterate on. Paul mentioned requesting window size as one
-
-candidate.
-
-\[ Wrapping up \]
-
-&lt;eae&gt; Anything on this list you think we should _NOT_ be doing?
-
-&lt;szager&gt; Maybe the rail work should be prioritized. Was mentioned last
-
-but seems like the most important.
-
-&lt;eae&gt; Ordering not indicative of priority, agree that it's one of the
-
-top priorities.
-
-&lt;eae&gt; How about the other way around, anything we should be doing that
-
-we haven't talked about?
-
-&lt;wkorman&gt; Flipped box writing mode that Levi and Ojan talked about?
-
-&lt;wkorman&gt; The proposal to unprefixing vertical writing mode triggered
-
-a discussion where some of the paint folks where saddened by the
-
-complexity of vertical wiring mode combined with RTL combined with
-
-flipped blocks. Could we simplify this around a sane path. Starting
-
-thinking about it.
-
-&lt;eae&gt; RTL isn't too bad but the others are a bit of a mess, also a
-
-combinatorial explosion.
-
-&lt;leviw&gt; Can't do much about RTL due to UBA, flipped blocks and
-
-vertical writing mode shouldn't be as much overhead though.
-
-&lt;leviw&gt; I think for somebody that would be a fun project to re-think.
-
-&lt;wkorman&gt; Flipped blocks and vertical writing mode.
-
-&lt;leviw&gt; Make it not suck.
-
-&lt;ojan&gt; Please include me in the discussion.
-
-&lt;wkroman&gt; How about document life cycle?
-
-&lt;leviw&gt; I don't think anyone has worked on that in a long time.
-
-&lt;ojan&gt; Mostly blocked on paint team, mostly compositor related.
-
-Slimming paint v2.
-
-&lt;wkorman&gt; There are some comments along we can come back to this node
-
-multiple times, surprising but ok. We should fix these things and
-
-enforce lifecycle. Editing code in particular is really quite bad.
-
-Fixing might invoke adding another phase to the life cycle.
-
-&lt;leviw&gt; Not a new phase, push computing rect until end of operation.
-
-Could potentially do less work.
-
-&lt;wkorman&gt; What about your high dpi work?
-
-&lt;eae&gt; Captured in the windows teams OKRs, my involvement is mostly
-
-advisory at this point now that we've decided on the design and
-
-integration. Implementation is handled by the windows team.
-
-&lt;eae&gt; Thanks everyone. I'll be following up with each one of you
-
-offline over the next week or two. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/index.md
deleted file mode 100644
index aaeb7fa5d05..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-page_name: meeting-notes
-title: Layout Team Meeting Notes
----
-
-Meeting notes in reverse chronological order:
-
-* [Monday, August 29,
- 2016](/teams/layout-team/meeting-notes/monday-august-29-2016)
-* [Monday, July 18,
- 2016](/teams/layout-team/meeting-notes/monday-july-18-2016)
-* [Monday, June 27,
- 2016](/teams/layout-team/meeting-notes/monday-june-27-2016)
-* [Monday, June 6,
- 2016](/teams/layout-team/meeting-notes/monday-june-6-2016)
-* [Monday, May 16,
- 2016](/teams/layout-team/meeting-notes/monday-may-16-2016)
-* [Monday, April 25,
- 2016](/teams/layout-team/meeting-notes/monday-april-25-2016)
-* [Monday, April 11,
- 2016](/teams/layout-team/meeting-notes/monday-april-11-2016)
-* [Monday, April 4,
- 2016](/teams/layout-team/meeting-notes/monday-april-4-2016)
-* [Monday, March 28,
- 2016](/teams/layout-team/meeting-notes/monday-february-28-2016)
-* [Monday, March 21,
- 2016](/teams/layout-team/meeting-notes/monday-february-21-2016)
-* [Tuesday, March 15,
- 2016](/teams/layout-team/meeting-notes/tuesday-march-15-2016)
-* [Monday, March 7,
- 2016](/teams/layout-team/meeting-notes/monday-march-7-2016)
-* [Monday, February 29,
- 2016](/teams/layout-team/meeting-notes/monday-february-29-2016)
-* [Monday, February 22,
- 2016](/teams/layout-team/meeting-notes/monday-february-22-2016)
-* [Tuesday, February 16,
- 2016](/teams/layout-team/meeting-notes/tuesday-february-16-2016)
-* [Monday, February 8,
- 2016](/teams/layout-team/meeting-notes/monday-february-8-2016)
-* [Monday, February 1,
- 2016](/teams/layout-team/meeting-notes/monday-february-1-2016)
-* [Monday, January 11,
- 2016](/teams/layout-team/meeting-notes/monday-january-11-2016)
-* [Monday, January 4,
- 2016](/teams/layout-team/meeting-notes/monday-january-4-2016)
-* [Monday, November 30,
- 2015](/teams/layout-team/meeting-notes/monday-november-30-2015)
-* [Monday, November 23,
- 2015](/teams/layout-team/meeting-notes/monday-november-23-2015)
-* [Monday, October 19,
- 2015](/teams/layout-team/meeting-notes/monday-october-19-2015)
-* [Monday, October 12,
- 2015](/teams/layout-team/meeting-notes/monday-october-12-2015)
-* [Monday, October 5,
- 2015](/teams/layout-team/meeting-notes/monday-october-5-2015)
-* [Friday, October 2,
- 2015](/teams/layout-team/meeting-notes/friday-october-2-2015) (Q3/Q4
- OKRs)
-* [Monday, September 28,
- 2015](/teams/layout-team/meeting-notes/monday-september-28-2015)
-* [Monday, September 14,
- 2015](/teams/layout-team/meeting-notes/monday-september-14-2015)
-* [Monday, August 31,
- 2015](/teams/layout-team/meeting-notes/monday-august-31-2015)
-* [Monday, August 24,
- 2015](/teams/layout-team/meeting-notes/monday-august-24-2015)
-* [Monday, August 17,
- 2015](/teams/layout-team/meeting-notes/monday-august-17-2015)
-* [Monday, August 10,
- 2015](/teams/layout-team/meeting-notes/monday-august-10-2015)
-* [Monday, August 3,
- 2015](/teams/layout-team/meeting-notes/monday-august-3-2015)
-* [Monday, July 20,
- 2015](/teams/layout-team/meeting-notes/monday-july-20-2015)
-* [Monday, July 13,
- 2015](/teams/layout-team/meeting-notes/monday-july-13-2015)
-* [Monday, June 22,
- 2015](/teams/layout-team/meeting-notes/monday-june-22-2015)
-* [Tuesday, June 16,
- 2015](/teams/layout-team/meeting-notes/tuesday-june-16-2015)
-* [Monday, June 8,
- 2015](/teams/layout-team/meeting-notes/monday-june-8-2015)
-* [Thursday, June 4,
- 2015](/teams/layout-team/meeting-notes/thursday-june-4-2015) (Q2 OKR
- mid-quarter check-in)
-* [Monday, June 1,
- 2015](/teams/layout-team/meeting-notes/monday-june-1-2015)
-* [Thursday, May 28,
- 2015](/teams/layout-team/meeting-notes/may-28-2015) (Layout Moose
- post BlinkOn Sync Up)
-* [Tuesday, May 26,
- 2015](/teams/layout-team/meeting-notes/tuesday-may-26-2015)
-* [Monday, May 4,
- 2015](/teams/layout-team/meeting-notes/monday-may-4-2015)
-* [Monday, April 27,
- 2015](/teams/layout-team/meeting-notes/monday-april-27-2015)
-* [Monday, April 20,
- 2015](/teams/layout-team/meeting-notes/monday-april-20-2015)
-* [Monday, April 13,
- 2015](/teams/layout-team/meeting-notes/monday-april-13-2015)
-* [Monday, April 6,
- 2015](/teams/layout-team/meeting-notes/monday-april-6-2015)
-* [Thursday, April 2,
- 2015](/teams/layout-team/meeting-notes/thursday-april-2-2015) (Q1/Q2
- OKRs)
-* [Monday, March 30,
- 2015](/teams/layout-team/meeting-notes/monday-march-30-2015)
-* [Monday, March 23,
- 2015](/teams/layout-team/meeting-notes/monday-march-23-2015)
-* [Monday, March 9,
- 2015](/teams/layout-team/meeting-notes/monday-march-9-2015)
-* [Monday, March 16,
- 2015](/teams/layout-team/meeting-notes/monday-march-16-2015)
-* [Monday, March 9,
- 2015](/teams/layout-team/meeting-notes/monday-march-9-2015)
-* [Monday, March 2,
- 2015](/teams/layout-team/meeting-notes/march-2-2015)
-* [Monday, February 23,
- 2015](/teams/layout-team/meeting-notes/monday-february-23-2015)
-* [Wednesday, February 18,
- 2015](/teams/layout-team/meeting-notes/wednesday-february-18) (Q1
- OKR mid-quarter check-in)
-* [Monday, February 9,
- 2015](/teams/layout-team/meeting-notes/monday-february-9)
-* [Monday, February 2,
- 2015](/teams/layout-team/meeting-notes/monday-february-2)
-* [Wednesday, January 7,
- 2015](/teams/layout-team/meeting-notes/20150107) (Q1 OKRs)
-* [Tuesday, December 9,
- 2014](/teams/layout-team/meeting-notes/20141209) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/march-2-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/march-2-2015/index.md
deleted file mode 100644
index bfc04e53d86..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/march-2-2015/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: march-2-2015
-title: Monday, March 2, 2015
----
-
-We had three new people joining the meeting this week:
-- Mark Pilgrim (pilgrim)
-- Works on Blink in Chapel Hill. Much of his recent work falls under
-code-health and Project Warden.
-- Nate Chapin (japhet)
-- Works on Blink in Mountain View. Working on low-level blink platform
-code cleanup and resource handling.
-- Walter Korman (wkorman@google.com)
-- New to the Blink team in SF, transfer from Glass. Getting up to
-speed on Blink. Not sure which sub-team he'll end up on yet.
-Updates since last meeting (on Monday, February 23rd):
-Performance Tracking (benjhayden)
-- Working ob exporting diagnostic information for performance tracking.
-Scrolling (skobes) \[crbug.com/417782\]
-- Mostly understand the issues around fixed position.
-
-- Dealing with layout tests failures and fallout.
-Rename Rendering -&gt; Layout (dsinclair) \[crbug.com/450612\]
-- Massive RendereBlock to LayoutBlock change landed, touched 50k+ files!
-- Plan to move RenderLayer and Renderer this week.
-Measure API (jchaffraix)
-- Addressed comments and concerns in Measure API proposal, started
-circulating and soliciting feedback.
-- Working on typing information and fragments this week.
-Line Boxes (hartmanng, szager) \[crbug.com/321237\]
-- Back to work on layout unit conversion, working on text rendering and
-going through test failures fixing poorly written tests and getting
-rid of float imprecision type failures.
-Flexbox (cbiesinger) \[crbug.com/426898\]
-- Working on updating flexbox implementation to match latest spec
-revision. One of the changes involves rolling out a two year old CL
-that removed a feature that has since been re-added to the spec.
-- Estimate another two weeks of work.
-Isolate core/fetch (japhet) \[crbug.com/458222\]
-- Working on isolating core/fetch from the rest of core. Currently
-touches frame and document which it probably shouldn't.
-Blink componentization (pilgrim) \[crbug.com/428284\]
-- Moving things from core to modules; core/storage and core/timing.
-Text (kojii, wjmaclean, eae)
-- Started looking into text iteration code in detail, discovered that
-BitStack has been incorrect since day one. (wjmaclean)
-- Cleaning up text iteration code. (wjmaclean)
-- Continued work on HarfBuzz normalization performance improvements,
-CL ready but blocked on perf numbers.
-- Performance work for complex path with eae and Dominik. (kojii)
-- 5-9% gain for CJK text landed.
-- 3-4x gain for all languages close to land. With this we should be
-pretty close to match the performance of the simple text path for
-vertical text.
-- Exploring a few more ideas.
-- Added shared shaper base class to ease the transition to the complex
-path. (kojii)
-Page scale handling (bokan) \[crbug.com/459591\]
-- Auditing window vs frame coordinates.
-Assertions/Regressions/blocking bugs
-- Working through list of ClusterFuzz assertions (cbiesinger).
-- Dealing with Mac core text crashers/blockers. (eae)
-- Help with git repository merge work. (szager)
-- Looking at regression relating to document life-cycle. (walterkroman)
-Misc
-- Dealing with fallout from --dump-render-tree rename, heated discussion
-following deprecation CL, will send out mail to blink-dev and
-coordinate with eae. (paulmeyer)
-- Helping philipj at Opera with syncing IDLs. (jsbell) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/may-28-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/may-28-2015/index.md
deleted file mode 100644
index 915515c1143..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/may-28-2015/index.md
+++ /dev/null
@@ -1,201 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: may-28-2015
-title: 'Thursday, May 28, 2015: Layout Moose post BlinkOn Sync Up'
----
-
-a.k.a. the project formerly known as "the grand layout re-factoring" and briefly
-as "layout slimming"
-
-Attendees: eae, leviw, esprehn, jchaffraix, ojan, cbiesinger, dsinclair
-
-&lt;eae&gt; Thanks for organzing Levi, I'd like to get a quick update, hear
-concerns and discuss logistics.
-
-&lt;jchaffraix&gt; I'm concerned about a lack of transparency, meeting notes not
-getting out and key people being excluded from meetings.
-
-&lt;ojan&gt; Been meaning to send out notes from BlinkOn sessions, oversight
-that they weren’t. Not intentioanlly exlcuding anyone.
-
-&lt;ojan&gt; How do we ensure everyone’s on board?
-
-&lt;eae&gt; I’ve stayed out of the technical part of the discussion to avoid
-having yet another cook in the kitchen. Now I want to make sure we have a plan,
-circulate it, and ensure we’re moving forward.
-
-&lt;jchaffraix&gt; We need to ensure we have a concrete roster and include all
-steakholders.
-
-&lt;eae&gt; We have that.
-
-&lt;ojan&gt; We just didn’t have a chance post-BlinkON to send out the notes. We
-weren’t trying to be exclusive.
-
-&lt;ojan&gt; Dan, it sounded like maybe you wanted to be included too?
-
-&lt;dsinclair&gt; I’m interested because it seems like the future, but couldn’t
-go to the meetings because of timezones.
-
-&lt;ojan&gt; Sydney + Waterloo is hard.
-
-&lt;esprehn&gt; Ian K will be moving here so we won’t have to keep having Sydney
-time zone involved.
-
-&lt;ojan&gt; For future reference voice if you want to be involved. I’ll try to
-keep sending emails to layout-dev to tell people ahead of time when there will
-be meetings.
-
-&lt;eae&gt; Things will be easier when discussion go from being predementantly
-brainstorming and turn into more of a concrete plan. Circulating an actual
-design will help guide the discussion.
-
-&lt;ojan&gt; Let me summarize our discussions and current thinking:
-
-- There are a certain set of features we want to achieve (measure, fragments,
-async append).
-
-- All these have require things that are hard to do in the current codebase
-
-- We also want more sanity and understanding in the codebase.
-
-- We took our brainstorm and turned it into a slightly more concrete set of
-proposals (v1, v2, etc.)
-
-- Added psuedocode
-
-- Result proves some of our ideas, but not necessarily the feasibility of the
-approach.
-
-- Doc still isn’t really ready for external consumption
-
-- Next step is to put current box layout code behind an API, then there’s the
-controversial step of re-implementing that api behind a flag.
-
-- Unsure of the sense of time required here (somewhere between 3 months and 3
-years).
-
-- Important to see the API requirements ahead of time to understand.
-
-&lt;esprehn&gt; Implementing the various box layout algorithms is a relatively
-easy exercise.
-
-&lt;ojan&gt; We all agree what the first step is an API. We should do that then
-see about next steps.
-
-&lt;jchafrraix&gt; We don’t \*need\* that API.
-
-&lt;eae&gt; We don't but I think we want it regardless.
-
-&lt;jchaffraix&gt; Do we really want to put this in the critical path since
-we’re now gating everything on this?
-
-&lt;eae&gt; It fits with our overall goals of a layered platform and it isn't
-necesarrily gating other work. Other than opertunity cost of work we could be
-doing instead.
-
-&lt;esprehn&gt; This will allow us to enforce sanity.
-
-&lt;jchaffraix&gt; You don’t need to sell me on the API. My point is whether or
-not this should be the priority.
-
-&lt;eae&gt; That is a discussion for our OKR meetings. We don't need to resolve
-that here today.
-
-&lt;ojan&gt; What happened in Sydney was that we had had a hackathon meeting
-where we started working on a Line Layout API. It’s possible that we’ll get
-1/3rd the way through this and decide that it doesn't work and have to start
-over. We ended up with a patch that moves a handful of Line Layout accessors
-into the box tree into an API.
-
-&lt;esprehn&gt; We should do Paint next.
-
-&lt;ojan&gt; My perspective is the next step is to get someone to own the line
-layout api patch and get it landed.
-
-&lt;jchaffraix&gt; It seems odd we’re not designing this api, but just grabbing
-the things we’re using.
-
-&lt;leviw&gt; Designing it is step 2.
-
-&lt;ojan&gt; We didn’t know exactly what methods are currently in use. The next
-step is refactor how the API is used and make it sane.
-
-&lt;eae&gt; Next thing I'd like to see is a 1-pager of our plan, shared with
-layout-dev, and a high level overview of what we want in terms of an evental
-API.
-
-&lt;ojan&gt; That’s hard to plan ahead of time, we don't know what the API is
-going to look like it.
-
-&lt;eae&gt; This could be a living document, maybe that section is blank to
-start. Having a document would be super useful as would having an owner.
-
-&lt;ojan&gt; Someone should draft this document and share it around.
-
-\* ojan stares at levi \*
-
-\* levi is volunteered \*
-
-&lt;eae&gt; Assuming this is something we want to work on in Q3, we should have
-this document ready in the next couple weeks. It would also be useful to have
-something like this for the “v2 rewrite the world” approach.
-
-&lt;ojan&gt; On my todo list is to take the doc we have today and turn it into
-something an outsider can read.
-
-&lt;eae&gt; Great! Current doc unreadable unless you where in all the meetings.
-Would be useful to have something more concise.
-
-&lt;ojan&gt; Seperate tasks (from nduca); taking all our layout-related
-rendering leads items and drawing a chart that tells us what we need to do to
-implement all of them. Here’s this proposal that let’s us do them, here’s what
-it would take to do it incrementally and how long, etc.
-
-&lt;eae&gt; I agree but having the API doc is the highest properity for me.
-
-&lt;esprehn&gt; Boundaries would exist between layout, paint, dom, editing APIs.
-Woudln’t be super disruptive. Then we’d have a real list of where we’re actually
-interacting with the layout tree.
-
-&lt;dsinclair&gt; Sounds like someone else will own all clusterfuzz bugs --
-hooray!
-
-\* everyone hooray! We haz plan! \*
-
-&lt;eae&gt; As for the API document, I'd really like to see it ready for
-circulation in the next week or two to allow it to be circulated and reasoned
-about in time for setting the Q3 OKRs.
-
-\* eae looks at Levi \*
-
-&lt;leviw&gt; This shouldn’t block anything.
-
-&lt;ojan&gt; Mark pilgrim would be a good guy to run with the layout stuff once
-it’s started.
-
-&lt;ojan&gt; I keep hearing people say “Should I not do this because Moose” and
-I say Noooooooooooo.
-
-&lt;leviw&gt; Ties in with much of our, and Dans, previous work. Should not
-block.
-
-&lt;dsinclair&gt; Do we know what all our API boundaries are?
-
-&lt;ojan&gt; We know the big ones. We don’t necessarily need to know \*all\* of
-them. (line, paint, dom, editing)
-
-&lt;esprehn&gt; Chris says they’re aiming for 45-46 to rip out paint stuff. Is
-optimistic. Hope that by December we should be able to take out tons of
-compositor-related stuff. Shouldn’t focus on that api surface. Editing will be
-so gross we’ll have plenty to do without the compositor.
-
-\* levi makes moose noise \*
-
-&lt;eae&gt; That’s a wrap! \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-11-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-11-2016/index.md
deleted file mode 100644
index 356c4185d97..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-11-2016/index.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-april-11-2016
-title: Monday, April 11, 2016
----
-
-Updates since last meeting (on Monday, April 4, 2016):
-Scrolling
-- Focus on root layer scrolling for now. The top most element, the
-layout view, (frame view contains layout view, both are scrollable
-areas. Frame view has special magic, plan is to have LayoutView handle
-scrolls using the standard ScrollableContainer logic. Been ongoing for
-awhile, skobes has done most of the work but has been pulled into
-other things. (szager)
-CSS Flexbox (cbiesinger)
-- Spent way too much time on scrolling and will have to spent more time
-on scrolling. Still haven't found a good solution, trying to move
-scroll clamping to after the layout phase.
-- Landed a few cleanup patches.
-- Focus on other flexbox issues this week.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Fixed multicol assertion failures. (mstensho)
-- Improved the forced fragmentainer break implementation: Only allow
-those at class A break points. (mstensho)
-<https://drafts.csswg.org/css-break/#possible-breaks>
-CSS Houdini
-- Last week got custom paint end to end working, out for review.
-(ikilpatrick)
-- Working on style invalidation this week. (ikilpatrick)
-- Next up, spec stuff for houdini. (ikilpatrick)
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- As promised, spent last week working on layout view. Migrated callers
-to use the new block layout API (LayoutViewItem). (pilgrim)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- mstensho getting up to speed.
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- No updates since last week -
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Intersection observer on by default in M51. Yay! (szager)
-Text (eae, drott, kojii)
-- Attended Edge Summit, interesting discussion on potential underlying
-issue with system font cache. (drott)
-- Submitted Conference Abstract to 40th Unicode Conference. (drott)
-- Worked with dpranke@ to get hb-ot-font linkage issue out of the way,
-and landed hb-ot-font change. (drott)
-- Continued work on Small Caps Implementation. (drott)
-- Started looking into hyphenation support and sent out a outline for
-a implementation proposal. (kojii)
-- Added comma and dot segmentation for shaping cache in order to fix
-a perf regression for minimized js in devtools. (eae)
-Logistics:
-- skobes out until end of the month.
-- leviw leaving the team and Blink in a month. Will be trying to offload
-knowledge and transfer ownership. Get your questions and code reviews
-in while you can! \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-13-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-13-2015/index.md
deleted file mode 100644
index 9f00a52caac..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-13-2015/index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-april-13-2015
-title: Monday, April 13, 2015
----
-
-Performance Tracking (benjhayden)
-
-- LayoutAnalyzer-based UMA histograms.
-
-- Benchmark metric work.
-
-- Made progress understanding bug 369123 (Absolute position and display:
-
-inline-block are order-dependant)
-
-- Experimenting with data-mining traces
-
-First letter refactoring (dsinclair)
-\[[crbug.com/391288](http://crbug.com/391288)\]
-
-- Fixed bug where a block and an inline both used first-letter.
-
-- Fixed bug where changing the text content didn't updated the layout
-
-resulting in the first-letter disappearing.
-
-- Broke first-letter hit testing while trying to fix the same. Added a
-
-bunch of new tests for hit testing pseudo classes.
-
-Measure API (jchaffraix)
-
-- Working on proposal/brainstorming document for layout refactoring.
-
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Added check to ensure that min-size cannot be negative.
-
-- Changes to bring min-width auto up to spec in review.
-
-- Working on positioning of position: absolute elements.
-
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-
-- Eliminating wrapper classes helped improve performance but there is
-
-still a performance regression.
-
-- Trying to figure out the right place to draw the line between floats
-
-and layout units. Text metrics still uses (and will continue to use)
-
-floats, box layout uses (and will continue to use) layout units.
-
-Doing most text metric in floats and converting at the boundary
-
-between the block and inline trees might make sense.
-
-Isolate core/fetch (japhet) \[[crbug.com/458222](http://crbug.com/458222)\]
-
-- Continuing work to isolate core/fetch from the rest of core.
-
-RenderObject cleanup (pilgrim) \[[crbug.com/436473](http://crbug.com/436473)\]
-
-- Continuing to pull things out of RenderObject.
-
-Text (kojii, eae)
-
-- Started work to improve caching for complex text shaping results.
-
-(eae)
-
-- Running/writing tests to check where we are; in some cases complex
-
-text is already faster than simple text. In others it is up to 5x
-
-slower. (eae)
-
-- Worked on CSS Writing Mode test suites with contributors. (kojii)
-
-Misc Warden
-
-- Cleaning up bindings, replacing custom bindings with auto-generated.
-
-(jsbell)
-
-- Started to plan storage type cleanup. (jsbell, pilgrim) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-20-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-20-2015/index.md
deleted file mode 100644
index 9ec50661498..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-20-2015/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-april-20-2015
-title: Monday, April 20, 2015
----
-
-Performance Tracking (benjhayden)
-- Audit trace view for layout analyzer.
-- Split LayoutAnalyzer::LayoutBlockRectangleChanged into X/Y/Width/
-HeightChanged.
-- LayoutTreeAsText as JSON.
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Crashing bugs, fixed use after free in FrameView.
-- Issue with the interaction between painting the viewport and view
-scrolling.
-- Don't force layout for scrollTo(0, 0). (rune)
-List marker refactoring (dsinclair)
-\[[crbug.com/370461](http://crbug.com/370461)\]
-- List element pseudo elements, marker inside wasn't getting the
-correct side for the parent container, need to notify parent.
-- Found issue where if you modify the subtree you may need to reinsert
-the elements as it needs to be in a specific place of the tree, i.e.
-inside a form element.
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Landed min-width auto, handful of regressions as expected, burning
-down one by one.
-- Identified a performance regression, computeLogicalWidthUsing is
-slow, caused a 25% slowdown for flexbox as it calls the compute
-method more frequently. Have a fix that should be landed by now.
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-- Going after perf regressions. Got a CPU profile and did some work to
-allow perf tools to run on render process only in multi process
-chrome.
-- Have made progress on performance, still some regressions for floats.
-Blink componentization (pilgrim) \[[crbug.com/428284](http://crbug.com/428284)\]
-- Slimming down render object (aka layout object), expect to continue
-this week.
-Text (eae, rune)
-- Started work on implementing a word-cache for complex text shaper,
-first step is to add unit tests for existing and desired behavior.
-(eae)
-- Don't clear FontFaceCache if no @font-face were removed. (rune)
-Style resolution (rune)
-- Various selector matching issues.
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- New multi-col implementation was reverted due to clusterfuzz issues,
-working on identifying and fixing the potential problems. Aim to
-re-land before the end of the week.
-Layout refactoring
-- jchaffraix, esprehn, ojan working on coming up with concrete proposals
-for changes to how we do layout based on ideas and concepts from the
-last few weeks of discussions on the topic. Will be shared with wider
-blink team. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-25-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-25-2016/index.md
deleted file mode 100644
index 01fd098edde..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-25-2016/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-april-25-2016
-title: Monday, April 25, 2016
----
-
-Updates since last meeting (on Monday, April 11, 2016):
-CSS Flexbox (cbiesinger)
-- Flexbox bug triage and bug fixes. Unrelated to scrolling for a change
-(bug 576202, bug 341310, bug 375693).
-- Ramping back up on scrolling, trying to help cbiesinger with flexbox
-overflow:auto heartache. Lots of fun. (szager)
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- Reviewing CSS Grid specification. (cbiesinger)
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Continuing to focus on multi-col and fragmentation.
-- Orphans and widows, need to clean up this code, to support
-break-before & break-after.
-CSS Houdini
-- Waiting on codereivews for CSS Paint API. (ikilpatrick)
-- Begun work on spec stuff, cleaning up paint, worklets. Starting to
-work more on CSS Layout API. (ikilpatrick)
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Migrated most references of Document::layoutView() to Document::
-layoutViewItem() in preparation for removing Document::layoutView()
-and routing everything through the block layout API. (pilgrim)
-- Migrating references to the layoutBlockView on document, and move to
-item. (pilgrim)
-- Start the LineLayoutAPI document with leviw. pilgrim, dgrogan to
-clustering all the API methods into groups, figuring out we want
-to rationalize these roots. (dgrogan)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- No updates since last week -
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Sent out Intent to Ship. (eae)
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Wrapped up most Intersection Observer work, merged a patch into
-M51. (szager)
-Tables (dgrogan)
-- Table layout refactor, putting out fires with patch going to stable.
-- Working through list of highly starred table bugs.
-- Much digging into tables for <https://crbug.com/427994> and
-<https://crbug.com/178369> which are different but related issues.
-mstensho has been consulting.
-Text (eae, drott, kojii)
-- Continued to work on font-variant-caps, blocked on rebaseline bot
-being offline. (drott)
-- font-variant property into a shorthand, CL up for review. (drott)
-- Contributed to Koji's document on implementation/shipping plan for
-hyphenation. (drott)
-- Implemented font-variant property parsed as CSS shorthand (as opposed
-to being a CSSPrimitive Value before), working well. Font-variant now
-accepts font-variant-ligatures and font-variant-caps values, and
-combines synthetic small caps with ligatures \\o/. Up for review.
-(drott)
-- Fixed bug where we sometimes omitted tab characters to due incorrect
-rounding in LineWidth::snapUncommittedWidth. (eae)
-- Fixed crash in Font::computeCanShapeWordByWord. (eae)
-- Fixed handling of very large transforms in ContainerNode::boundingBox.
-(eae)
-Logistics:
-- cbiesinger is now a core OWNER, congratulations!
-- skobes out until end of the month.
-- eae in Tokyo until end of week, Zurich next week.
-- drott in Zurich next week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-27-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-27-2015/index.md
deleted file mode 100644
index 0df760d7c75..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-27-2015/index.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-april-27-2015
-title: Monday, April 27, 2015
----
-
-Performance Tracking (benjhayden)
-
-- Preliminary LayoutAnalyzer-powered UMA findings. A few surprises
-
-already, lots of opportunity for further analysis and more data.
-
-- Working on LayoutTree trace object snapshots and various
-
-LayoutAnalyzer improvements.
-
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Reviewed bokan's RootFrameViewport change, and investigated a
-
-background painting issue with root layer scrolling + slimming paint
-
-(trchen is now working on a fix).
-
-- Plan to work on testing root layer scrolling on Android this week.
-
-Looking at failing layout tests related to fractional scroll offsets.
-
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-
-- Continued work on line layout LayoutUnit conversions. Have a patch
-
-that sets the barrier between float and LayoutUnit at the InlineBox
-
-level, which seems like the sensible place.
-
-- There is still a performance regression that I haven't been able to
-
-eliminate. Was able to get some small performance wins by looking at
-
-profiling data, but I've hit a wall with that approach. Will discuss
-
-next steps and come up with a plan this week.
-
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- More flexbox updates.
-
-- Trying to get answers to flexbox spec questions, was promised answers
-
-this week.
-
-List marker refactoring (dsinclair)
-\[[crbug.com/370461](http://crbug.com/370461)\]
-
-- Working on performance of list marker code. New version is slower
-
-then old version. html5-full-render on ToT was ~16.5 seconds for me,
-
-with ListMarkerPseudoElement is ~17.5 seconds.
-
-- Discussions this week on how to proceed with ListMarkerPseudoElement.
-
-Misc Warden (dsinclair, pilgrim)
-
-- Finishing work on decoratedName split, all annotations are moved
-
-over, just finishing off rebaselines. (dsinclair)
-
-- More renderer to layoutObject renames. (dsinclair)
-
-- Wrapped up selection gap clipping rework. (wkorman)
-
-- Working on slimming LayoutObject and pushing bits down to
-
-descendants. (pilgrim)
-
-Text (eae)
-
-- Added unit tests for complex text shaping (eae)
-
-Style resolution (rune)
-
-- Working on type selectors for SVG in HTML documents and picking up
-
-componentized style resolver work again. There is some question
-
-about whether the SVG bug is worth fixing.
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- Found a new crash. Maybe something changed on trunk. Will fix then
-
-reenable multi-col.
-
-Layout refactoring
-
-- esprehn, ikilpatrick, cbiesinger, ojan, leviw working on coming up
-
-with concrete proposals. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-4-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-4-2016/index.md
deleted file mode 100644
index 816e576cd4c..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-4-2016/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-april-4-2016
-title: Monday, April 4, 2016
----
-
-Updates since last meeting (on Monday, March 28, 2016):
-Short update this week as a lot of people are due to Edge conf.
-Scrolling (skobes)
-- Restored ScopedLogger.
-- Continued to work on on getting ScrollAnchor to work during smooth
-scroll animation. (skobes)
-CSS Flexbox (cbiesinger)
-- Fixed a scrolling bug, caused a small regression, looking into it now.
-- Landed a work-around to allow DI into branch, have a better patch
-that I'll keep working on this week. Currently breaks one of our
-tests.
-- Might be helpful to have scroll behavior better defined in spec.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No updates since last week -
-CSS Houdini
-- No updates since last week -
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Bunch of progress on layout view item, working on getting rid of
-anything that touches LocalFrame and LayoutObject. Moving to new
-shiny LayoutItem. (pilgrim)
-- Have about ten files left, some pending review. (pilgrim)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- Sent out hackathon report for initial review. (leviw)
-- Started working on design doc. (eae)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- No updates since last week -
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Getting back into Intersection observer, dotting the i's and crossing
-the t's before branch point on Friday, Have one significant patch to
-land, today, hopefully. (szager)
-- Figure out behavioral difference between actual implementation and
-polyfill. (szager)
-- Prep work for shipping. (szager)
-Text (eae, drott, kojii)
-- Looking into android memory regression with mixed success, getting the
-tests working locally have proven to be quite challenging. Working
-with the Chrome Android team to resolve. (eae, drott)
-Misc
-- Fixed crash in localCaretRectForEmptyElement. (eae)
-Logisitcs:
-- skobes out until end of the month.
-- eae out Wed-Fri.
-- drott, leviw, ikilpatrick at edge conf Mod-Tue. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-6-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-6-2015/index.md
deleted file mode 100644
index 41b62c650d8..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-april-6-2015/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-april-6-2015
-title: Monday, April 6, 2015
----
-
-Most offices had the day off due to Easter so this update is limited
-
-to the SFO, MTV and NYC offices.
-
-Updates since last meeting (on Monday, March 30th):
-
-Performance Tracking (benjhayden)
-
-- About to land a LayoutMetric rewrite that should give more details.
-
-- Started working on LayoutAnalyzer UMA histograms after discussion
-
-with chrishtr.
-
-Scrolling (skobes) \[crbug.com/417782\]
-
-- Fixed a positioning bug affecting scrollToAnchor.
-
-Measure API (jchaffraix)
-
-- Started thinking about the grand block layout refactoring and smaller
-
-cleanup tasks that can be done in parallel.
-
-Flexbox (cbiesinger) \[crbug.com/426898\]
-
-- Working on positioning of position: absolute elements.
-
-- Working on importing w3c test suite for flexbox.
-
-Blink componentization (pilgrim) \[crbug.com/428284\]
-
-- Started working on moving clipboard from core to modules.
-
-Text (kojii, wjmaclean, eae, rune)
-
-- Removed incorrect optimization for fixed-pitch fonts. (eae)
-
-- Renamed SurrogatePairAwareTextIterator to UTF16TextIterator and added
-
-support for multi character glyphs which was previously handled separately.
-(eae)
-
-Cleanup/code health
-
-- Removed canHaveGeneratedChildren from RenderObject and turned it into
-
-a static function. (pilgrim) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-10-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-10-2015/index.md
deleted file mode 100644
index a8179f40eb9..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-10-2015/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-august-10-2015
-title: Monday, August 10, 2015
----
-
-Updates since last meeting (on Monday, August 3rd):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Fixed setPageSclaeFactor and anchor root layer scrolling. (skobes)
-- Turned on scroll restoration tests for root layer scrolling. These
-tests ensure that scroll positions are correctly restored on history
-navigation. (skobes)
-- A Samsung contributor has agreed to help with custom scrollbar work.
-- Containing work cleaning up DepricatedPaintLayerScrollableArea in an
-effort to have sane scroll bounds for the root layer. (szager)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Helped szager with a flexbox scrollbar bug that triggered unspeced and
-untested behavior.
-- Sent intent to ship and intent two unprefix and will follow up on
-those this week. The intent to unprefix looks ready to go ahead with.
-- Had meeting with tabatkins about absolute position for flex items.
-- Flexbox bug triage.
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-- Fixed bug where grid containers reported the wrong preferred width.
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- First patch for nested multicol is just around the corner.
-- Blocked on reviews for multicol improvements.
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Successfully posted several API patches after help from Levi. Converted
-several more bits of line box and descendants to use the new line
-layout API. Nothing broken. yay! (pilgrim)
-- Some weird edge cases and debugging code that relies on printing out
-layout objects. Ongoing discussion. (pilgrim)
-Text (eae, drott, kojii)
-- Follow up from text workshop in Helsinki, Behdad and Drott working on
-optimizing the Blink/HarfBuzz integration.
-- Fixed space normalization bug where cr/lf characters where incorrectly
-collapsed. (eae)
-- Debugging several crashers in line layout. (eae)
-Logistics:
-- drott on vacation until Friday. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-17-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-17-2015/index.md
deleted file mode 100644
index 7e40f264dff..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-17-2015/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-august-17-2015
-title: Monday, August 17, 2015
----
-
-Updates since last meeting (on Monday, August 10th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Moved scrolled-by-user flag out of FrameView. (skobes)
-- Custom scrollbars are now working with root layer scrolling. (skobes)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Got go-ahead to unprefix intrinsic sizing keywords (min-content,
-max-content, fill and, fit-content). Will go ahead and unprefix all
-but fill (currently -webkit-fill-available) as there is still some
-open questions around it and the CSS working group doesn't quite think
-it's ready for prime time yet.
-- Added use counter for prefixed intrinsic size keywords.
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-- Working on refactoring min/max ContentForChild calls to share more
-code and logic.
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- Landed initial support for nested multicol layout. Column balancing
-still needs work but the most common use cases work.
-- Plan to hook up printing code once I'm more confident about the
-implementation. Will finally enable multicol for printing for the
-first time ever in Blink. :) (mstensho)
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Landed several API patches and finishing up API conversion for box
-model object. Estimate about a weeks worth of work remains. (pilgrim)
-Text (eae, drott, kojii)
-- Debugging font matching issue on windows, looks like Skia is not
-returning the full font name. (drott)
-- Implemented tab characters for complex path, one of the blockers to
-unify simple path to complex path. (kojii)
-- Landed font fallback cleanup to fix a crash bug with support from the
-memory team. (kojii)
-- Enabled Unicode Variation Selector for Chrome OS. (kojii)
-- Eliminated the last remaining direct caller to HarfBuzzShaper for
-better layering. (kojii)
-- Fixed handling of invalid and unmatched UTF-16 surrogate pairs, we now
-replace invalid pairs with a replacement glyph and keep processing the
-rest of the text node while before we would abort after the first
-invalid character and not paint the remaining text. (eae)
-- Fixed handling of tabs in complex path in cases where tabs are not
-supported. (eae)
-Misc:
-- Cleaned up PageBoundaryRule and nextPageLogicalTop. (mstensho)
-- Fixed issue with auto-height table cells and percentage heights that
-broke a couple of popular legacy websites. (mstensho)
-- Issue with win10 bots where hundreds of tests where failing and tools
-not yet updated to support win8 or win10 specific results, since
-resolved. (cbiesinger)
-- Got go-ahead to upstream layout tests to W3C. (cbiesinger)
-- Discussion around layout test standards and guidelines, jsbell gave
-update on plan to support web platform tests and will send out further
-information when ready.
-- Wrapping up custom properties. (leviw)
-Logistics:
-- cbiesinger gardening last week (Thu-Fri).
-- leviw gardening this week (Mon-Tue).
-- Pre-CSS F2F meeting in SF on Tuesday. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-24-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-24-2015/index.md
deleted file mode 100644
index 3d414cf7d5e..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-24-2015/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-august-24-2015
-title: Monday, August 24, 2015
----
-
-Updates since last meeting (on Monday, August 17th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Working on an issue where Element.clientWidth and clientHeight are not
-excluding the width/height of scrollbars as expected. (skobes)
-- There is logic for coordinates scrollbars in the compositor that has a
-check in scrolling coordinator that only applies to the main frame on
-some platforms. Needs investigation as we'd like this to apply for
-root layer scrolling on all platforms. (skobes)
-- Trying to land a fix for scroll bounds but encountered a couple of
-test failures that only occur on Mac and Windows. Do not have access
-to either platform at the moment (working remotely). Looks like off-by
--one errors. Will work with skobes to track it down. (szager)
-- Have been continuing to struggle with flexbox scrollbar change. Had
-perf regression that prevented landing it. Fixed regression mostly,
-is close but is a great deal of variance in inspector tests between
-runs. Working on getting tracing information from running layout
-tests. Will reach out to tracing-team. (szager)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Added use counters for flexbox intrinsic size change and for the
-prefixed intrinsic size keywords.
-- Unprefixed the intrinsic size keywords, with the exception of fill.
-Will be in M 46.
-- Looked into deprecating the old prefixed intrinsic size keywords,
-only supported by us and webkit, fairly low usage.
-- fill-avalible will be kept as prefixed, pending spec changes to
-unprefix. Oddly seems to be the most used one.
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week.
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- Refactoring the multicol balancing implementation. It currently
-assumes that the layout engine feeds the balancer with accurate data
-(space shortage and explicit breaks) for each layout object once and
-only once for each layout pass. This is an incorrect assumption,
-because sometimes we relayout a subtree (typically because the initial
-logical top estimate was wrong) (in which case what the balancer got
-during the first pass is most likely wrong). Sometimes we also just
-skip an entire subtree as an optimization (which may mean that the
-balancer doesn't get all the data it's supposed to get). Trying to
-change it to performing everything related to column balancing after
-layout of a flow thread, instead of partially during layout and
-partially after layout.
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Landed several API patches. Estimate a couple of days worth of work
-remains. (pilgrim)
-Text (eae, drott, kojii)
-- Landed font-stretch and better matching for font-style, had some
-issues that delayed landing it but it's in now and we have great test
-coverage for it. (drott)
-- Discussed font mathcing tests with adobe. (drott)
-- Will continue work on font fallback this week. (drott)
-- Encountered a skia bug where the full font name wasn't returned as
-expected on windows, was quickly fixed by bungeman, thank you!
-- Working on blink/harfbuzz integration, plan is to have harfbuzz do the
-font fallback instead of doing it prior to shaping. That way combining
-marks, among other things, can be better supported and we avoid having
-to reinvent the wheel given that harfbuzz already has support for font
-fallback. Long process and complicated dependencies. Will require
-changes to how we handle variance (like small caps and emphasis marks)
-as our current implementation cannot be supported and will need to be
-updated. Should also result in cleaner code. (drott)
-- Fixed handling of CSS word-spacing for non-breaking spaces. (eae)
-- Investigating test changes required for enabling complex text
-everywhere. Might be able to disable kerning and ligatures for some
-scripts temporarily to avoid having to rebaseline all tests and to
-make the change in two stages; (1) enable complex text everywhere,
-(2) enable kerning & ligatures. Not sure it's worth the effort. (eae)
-- Working on blockers for unifying simple path and complex path. (kojii)
-- Enabled Unicode Variation Selector in ChromeOS/Linux. (kojii)
-- Fix line breaking issue around ruby. (kojii)
-- Working on CSS Writing Modes issues. (kojii)
-Misc:
-- Subpixel bugs. (leviw)
-- Burning down Mac OS 10.10 test expectations, down 900 lines last week
-alone! (leviw)
-Logistics:
-- leviw goes on vacation (that thing in the desert) on Wed + two weeks.
-- skobes goes on vacation on Thu + one week.
-- szager on vacation Wed and Fri. Back in SF on Mon.
-- esprehn, ojan, ikilpatrick in Paris for CSS F2F meeting this week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-29-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-29-2016/index.md
deleted file mode 100644
index 263352edfee..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-29-2016/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-august-29-2016
-title: Monday, August 29, 2016
----
-
-Updates since last meeting (on Monday, August 22, 2016):
-Scrolling
-- Work on root layer scrolling continues. (szager)
-Scroll Anchoring \[[crbug.com/558575](http://crbug.com/558575)\]
-- Support for SANACLAP (Suppress if Anchor Node Ancestor Changed Layout-
-Affecting Property) landed. Should help reduce the number of hacks
-required to support the feature. \[<http://bit.ly/sanaclap>\] (skobes)
-- Aim this week is to get it (SANACLAP) into canary to gather data.
-- Dealing with a devtools scroll anchoring bug.
-CSS Flexbox
-- Incoming bug rate for flexbox is going down, most issues have been
-fixed and we aren't detecting many new ones. Yay. (cbiesinger)
-- Some lingering reports and concerns about the abs-pos change that
-will require outreach/evangelism. Not nearly as much as previously
-thought though. Microsoft paved the way and did a really good job of
-reaching out to web authors. (cbiesinger)
-CSS Grid Layout \[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week. See tracking bug for status.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Still working on paint layer issues triggered by an investigation into
-incorrect behavior for getClientRects. Issues mostly around writing
-mode and paint layer interaction. Paint layer is a mess when it comes
-to coordinate spaces. (mstensho)
-CSS Houdini
-- Lots of work around Worklets for Web Audio and Web Animations in
-preparation for TPAC last week. (ikilpatrick)
-- Plan to spend more time preparing the Worklets and CSS Custom Layout
-specs for TPAC this week. (ikilpatrick)
-- Working on event loop spec. (glebl)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- Converted every backing fragment and constraint space to physical
-coordinates instead of logical. (ikilpatrick)
-- Might attempt to add initial support for floats this week.
-(ikilpatrick)
-- Started on inline layout support. (eae)
-- Initial layout opportunities implementation. (eae)
-- Implemented state machine for async layout. (cbiesinger)
-- Added fragment builder class to help with fragment construction.
-(cbiesinger)
-- Start working on margin collapse. (glebl)
-Resize Observer (atotic)
-- Finally landed and is looking good for M54. (atotic)
-Tables (dgrogan)
-- Continuing work on fixing high priority table bugs. (dgrogan)
-Text (eae, drott, kojii)
-- Complex text on Android is looking good and is on track for M54.
-(drott)
-- Investigated a shaping regression on old OS X versions. Due to a few
-previous shaping fixes we now crash in certain cases due to the font
-fallback cascade on old versions of OSX. Looking into options. (drott)
-- We don't support type1 (bitmap) fonts on Linux however they show up
-in the font selection UI. Fixed this and in doing so also broke the
-dependency on Pango. (drott)
-- Made a change to skia to avoid picking type1 fonts during fallback,
-thereby reducing the number of attempts thus improving performance.
-(drott)
-- Preparing for ATypI. (drott)
-Interventions
-- Iterated on data collection methodology for a potential third party
-iframe intervention. Missed the branch point but got a patch that
-I'm happy with. (dgrogan)
-Misc:
-- Helping Physical Web team with Google infrastructure integration.
-(glebl) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-3-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-3-2015/index.md
deleted file mode 100644
index 1d2a3c6d27a..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-3-2015/index.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-august-3-2015
-title: Monday, August 3, 2015
----
-
-Thanks for running the show last week jsbell. Now back to our regularly
-
-scheduled programming.
-
-Updates since last meeting (on Monday, July 27th):
-
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Fixed under-painting issue on android. (skobes)
-
-- Fixed a regression causing double scrollbars caused a previous bug
-
-fix. (skobes)
-
-- Identified that scrollable elements with animated gifs will do a
-
-full re-layout even if it's composited. (skobes)
-
-- Fixed a hairy flexbox scrollbar bug where the size of the scrollbar
-
-wasn't taken into account when computing the flexed size. (szager)
-
-- Containing work cleaning up DepricatedPaintLayerScrollableArea in an
-
-effort to have sane scroll bounds for the root layer. (szager)
-
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Had a meeting with CSS flexbox spec authors last week and leared that
-
-some areas of the spec that I've been working on implementing might
-
-change further. Will follow up this week.
-
-- Triaged a bunch of flexbox bugs.
-
-- Up-streaming flexbox tests have proven harder than expected, might
-
-take a week or two to resolve.
-
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-
-- cbiesinger have been helping with reviews.
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- Doing a lot of cleanup and bug fixing work.
-
-- Containing working on support for nested columns, progressing nicely
-
-but nothing landed yet.
-
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-
-- Working on moving layout box and descendants over to use the API.
-
-(pilgrim)
-
-Isolate core/fetch (japhet) \[crbug.com/458222\]
-
-- No update.
-
-Text (eae, drott, kojii)
-
-- Text workshop in Helsinki, Behdad and Drott working on optimizing the
-
-Blink/HarfBuzz integration.
-
-- Completed tests for styling and selection, found a few issues as a
-
-result and have been working on fixing those. (drott)
-
-- Unicode range matching is next. (drott)
-
-Misc:
-
-- Continuing to talk to people about position observer, got lots of
-
-feedback, mostly positive. (slighgtlyoff)
-
-Logistics:
-
-- kojii on vacation this week.
-
-- drott on vacation this Wednesday until next Friday.
-
-- cbiesinger in SF this week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-31-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-31-2015/index.md
deleted file mode 100644
index 974a2c72a84..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-august-31-2015/index.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-august-31-2015
-title: Monday, August 31, 2015
----
-
-Updates since last meeting (on Monday, August 24th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Tracked down issue with scroll bounds change and determined that the
-failing tests where due to a bug in the old implementation. New test
-results are correct. Will require a rebaseline. (szager)
-- Still having some problems with the flexbox scollbar change, need to
-figure out why the fix is causing a perf regression. Happy with code
-change and convinced the fix is correct and that the new behavior is
-better. (szager)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Unprefixed sizing keywords.
-- Continuing work to bring implementation up to spec.
-- Various bug fixes.
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week.
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- Continuing work on multicol balancing and nesting.
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Landed several API patches. Estimate a couple of days worth of work
-remains. (pilgrim)
-Text (eae, drott, kojii)
-- Working on CJK fonts pri 1 issues. (kojii)
-- Working on complex path blockers and recent regressions. (kojii)
-- Resolved all open spec issues in Writing Modes in CSS F2F. (kojii)
-- Investigating unprefix planning for Writing Modes. (kojii)
-- Continued on shaper driven segmentation work. Have working prototype.
-Quite a bit of work remains to handle all edge cases, vertical text
-and emphasis marks. (drott)
-- Various Windows font fallback fixes. (eae)
-Misc:
-- Ripping out linebox contain implementation following last weeks intent
-to deprecate and remove. (wkorman)
-- Misc bug fixes, mostly related to rounding and line boxes. (szager)
-- Plugin persistance was re-landed last week, this allows plugin state
-to persist across reattach and is a big win. (dsinclair)
-Logistics:
-- leviw on vacation (that thing in the desert) this week and next.
-- skobes on vacation this week.
-- szager back from Seattle.
-- esprehn, ojan, ikilpatrick in Paris for CSS F2F meeting until mid week.
-- cbiesinger out until Wednesday. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-1-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-1-2016/index.md
deleted file mode 100644
index ce3f191a5c8..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-1-2016/index.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-1-2016
-title: Monday, February 1, 2016
----
-
-Updates since last meeting (on Monday, January 25th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Prototyping scroll anchoring and added a flag for enabling it,
---enable-scroll-anchoring. Working on a basic implementation. Current
-design looks solid and well encapsulated. Still needs testing in the
-real world but looks promising. (skobes)
-- Changed LayoutRoots to avoid making scrollbars trigger relayout.
-(leviw)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Fixed a number of flexbox regressions last week. As of now all known
-regressions in 49 and 50 have been resolved. Most 48 regression have
-been addressed, merged a last fix this morning.
-- Flexbox interop work continues, including a follow up to a temporary
-fix for a regression.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last meeting.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Intent to unprefix multicol as is turned out not to be too popular.
-Gated on generic breaking properties. Will send out a separate intent
-for that. Breaking properties are generic and apply to all paginated
-(and in theory region based) content. Not simply an alias for -webkit
-prefixed properties as the values differ.
-- Fixed a number of multi-col bugs.
-CSS Houdini (ikilpatrick)
-- Presented custom paint, custom properties and custom layout at CSS
-working group meeitng in Sydney. (ikilpatrick)
-- Updated custom paint, custom properties and custom layout specifications.
-(ikilpatrick)
-- Barista for the houdini working group, exceeding expectations.
-(ikilpatrick)
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Moved resolvedColor to use line layout api, had a lot of cascading
-effects that allows for simplifications in TextPainter and further
-allows the API to be used in unit tests. Nice properties and
-simplification ensued. (pilgrim)
-- Multiple line layout patches includes a potential large change to the
-API that was discussed last week. Fully up to speed on api work and
-have a few layout patches pending. (dgrogan)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Discussed CSS containment at CSS working group meeting, positive signals
-from working group and other implementors. (leviw)
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Added optimization to skip render-throttled iframes during hit
-testing. (szager)
-Text (eae, drott, kojii)
-- Presented CSS Writing Modes, CSS Text Decorations, and Snap at CSS
-Working Group meeting in Sydney. (kojii)
-- Emoji segmentation, tests on all platforms. Some blockers on Android
-due to lack of capabilities with regard to font family based font
-selection for fallback. (drott)
-- Enabling open type features through CSS keywords. (kojii)
-- Dealing with regressions and fallout following font fallback overhaul.
-(drott)
-HTML Tables (dgrogan)
-- Misc table interop fixes relating to percentage height resolution.
-(dgrogan)
-- Working on a table regression dating back to the WebKit days, will
-send out to Morten for review later today. (dgrogan)
-Misc
-- Made int to layout unit conversion explicit to avoid unnecessary
-round-trips and v8 problems during style conversion. (leviw)
-Logistics:
-- ikilpatrick, leviw, kojii, and eae in Sydney for Houdini and CSS WG
-meetings. <https://wiki.csswg.org/planning/sydney-2016>
-- drott, behdad, kojii in Tokyo for Text workshop February 19-28. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-2/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-2/index.md
deleted file mode 100644
index 5f0f6cea96c..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-2/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-2
-title: Monday, February 2, 2015
----
-
-Performance Tracking (benjhayden)
-- Running perf tests on Android, have preliminary data.
-- Loading fonts takes up a lot of time for some specific tests, these
-tests have very simple layout though so font-loading is the only
-"slow" thing.
-- Most test have a more even distribution that looks very similar to
-linux.
-- Added histogram for layout times to collect user data. Might add more
-detailed ones (text layout vs block layout etc) later.
-Rename Rendering -&gt; Layout \[[crbug.com/450612](http://crbug.com/450612)\]
-(dsinclair, bsittler,
-jchaffraix, eae)
-- Moving rendering to layout. Using spreadsheet to coordinate.
-- Moved hit testing last week, moving compositing now (dsinclair)
-First-letter (dsinclair)
-- More Clusterfuzz issues.
-Line Boxes (hartmanng, szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-- Continuing on float to layout unit conversion. Looks like a few more
-classes will need to move to layout unit.
-- hartmanng and szager to sync up on status and strategy.
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Started working on updating flexbox implementation to match latest
-spec revision.
-- Coordinating with the firefox and IE teams to ensure compatibility.
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Background painting bug has been fixed (yay!)
-- window.scrollTo wired up for root layer scrolling.
-- Working on issues with position: fixed.
-Text (eae)
-- Held text workshop with android and i18n teams last week. Will try to
-share hyphenation implementation (or at the very least dictionaries)
-with android. szager volunteered to lead this form the blink side,
-likely in Q2.
-- Looks like the i18n team has dictionaries with compatible licenses
-for at least a handful of languages.
-- WIP patch that removes an extra copy of the text and avoids
-unnecessary work for 8bit. Needs a new version of harfbuzz which is
-problematic.
-Logistics
-- hartmanng is perf sheriff last week.
-- jchaffraix and eae in Sydney for planning meeting.
-- szager out much of last week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-21-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-21-2016/index.md
deleted file mode 100644
index 61da2ebb411..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-21-2016/index.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-21-2016
-title: Monday, March 21, 2016
----
-
-Updates since last meeting (on Tuesday, March 15, 2016):
-Scrolling (skobes)
-- Working on patch to fix absolute positoined scroll anchors within
-static positioned scrollers which is an interesting edge case.
-- Smooth scrolling and scroll anchoring interaction is a bit problematic
-and needs some work given the absolute scroll offsets that update
-immediately.
-- Work on speeding up smooth scrolling in response to user feedback.
-CSS Flexbox (cbiesinger)
-- Fixed percentage sizing, the last remaining major task.
-- Almost all of the scrolling regressions (again!) still one case
-remaining that needs more investigation.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- eae/svillar trying to figure out what would be required to ship CSS Grid.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- The past weeks I've been working on the break-{after,before,inside}
-properties. Mostly some preparatory patches so far, while I've kept
-the beefy parts to myself for now.
-- Also: continued cleaning up and untangled multicol stuff in
-mapLocalToAncestor() and friends, which made it super-easy to fix some
-a hot PaintLayer clipping bug afterwards.
-CSS Houdini
-- Hooking up script support for the CSS Paint API this week.
-(ikilpatrick)
-- Next up is generating new CSS images for the paint API. (ikilpatrick)
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Working on getting all of the LayoutView references over to the new
-block layout API, will be one of the largest leaf nodes ion the new
-layout API. (pilgrim)
-- Will try to add precoomit hook to enforce the line layout API.
-(dgrogan)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- LayoutNG hackathon last week. It happened and was glorious. We got of
-to a better start than expected, got very simple layout working day
-one. I think we're convinced that it's a tenable design, deciding on
-next steps. (leviw, ikilpatrick, dgrogan)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- No update since last week -
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Assortment of patches for intersection observer, including all release
-blockers that I'm trying tom land this week before vacation. Gated on
-reviewers. (szager)
-Text (eae, drott, kojii)
-- Landing fix for shaping fonts across unicode ranges, now all ranges
-are all shaped together in one go. Also fixes a bug reported by
-typekit, made adobe happy. (drott)
-- Resume work on small-caps font variant. (drott)
-- Investigating line breaking performance. (eae)
-HTML Tables (dgrogan)
-- Dealing with a table bug fix from a few weeks ago, breaking some
-chrome-only sites relying on the old incorrect behavior.
-Misc
-- Rebaseline bot is now actually running on the builder, no longer on
-my workstation. Exciting times. (wkorman)
-- More detailed research on writing modes, continues this week and
-next. (wkorman)
-Logistics
-- cbiesinger in SF week of March 28.
-- drott in SF week of March 28.
-- szager on vacation starting week of March 28. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-22-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-22-2016/index.md
deleted file mode 100644
index 8ef344e0144..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-22-2016/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-22-2016
-title: Monday, February 22, 2016
----
-
-Updates since last meeting (on Tuesday, February 16th):
-Scrolling (skobes)
-- Fixed crashes caused by stale LayoutObject pointers in scroll anchor.
-- Fixed an old bug in coordinated scrollbar where we hold stale
-scrollbar pointers.
-- Simplifications in paint layer scrollable area.
-- Playing around with scroll anchoring on real world web sites.
-- Discovered a new smooth scroll regression.
-CSS Flexbox (cbiesinger)
-- Finished up the scrolling fixes last week, at least I thought I did.
-szager found another issue relating to nested flexboxes. Not quite
-sure what the correct fix is, will require further work.
-- More flexbox release blockers relating to overflow: auto.
-- Imported Mozilla flexbox tests, pass the vast majority. One failure is
-paint related and will probably fixed by slimming paint v2 (the
-fundamental composting bug), a few fail due to lack of visibility
-collapse support.
-- Struggle with upstreaming tests to w3c continues, synced up with
-fantasi and have a plan to move forward.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Multi column properties unprefixed! Congrats!
-\[[crrev.com/376249](http://crrev.com/376249)\]
-- Added partial support for modern breaking properties. Work on these
-continues.
-CSS Houdini (ikilpatrick)
-- Successes in splitting up RenderingContext2d, patch out that has an
-LGTM already. Should be ready to land today.
-- Started adding dev-tool support to worklets, plan to have it hooked up
-and working at the end of this week.
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Working on removing the default operator for the Line Layout API.
-Covering gaps in the API where we are relying on implicit conversion.
-(pilgrim)
-- Started working on the Block Layout API. Trying to figure out the
-hierarchy, still up in the air. (pilgrim)
-- Hope to finish up Line Layout API and add include guard by the end of
-the week. A bit hairier than expected but cautiously optimistic.
-(dgrogan)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- No update since last week.
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Spent most of last week doing spec work for IntersectionObserver.
-\[szager\]
-- This week, I have a few code changes to make so our Intersection
-Observer implementation matches the latest version of the spec.
-After that plan to ramp down work on IO for the time being. \[szager\]
-Text (eae, drott, kojii)
-- kojii/drott/behdad doing a text workshop in Tokyo, dealing with text
-shaping and font fallback issues.
-HTML Tables (dgrogan)
-- No update since last week.
-Misc
-- Fixed getBoundingClientRect for collapsed ranges. (eae)
-- Removed mac specific backspace handling in editing. (eae)
-- Fixed a number of release blockers. (leviw)
-Logistics
-- ikilpatrick in Waterloo, Canada next Week.
-- leviw out Monday (today).
-- dgrogan out Friday and next Monday.
-- behdad/drott in Tokyo all week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-23-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-23-2015/index.md
deleted file mode 100644
index 44785ef67aa..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-23-2015/index.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-23-2015
-title: Monday, February 23, 2015
----
-
-We had two new people joining the meeting this week:
-
-- Joshua Bell (jsbell)
-
-- Works on Storage APIs (TL) and ServiceWorker.
-
-- Interested in some of the non-layout Warden tasks.
-
-- Alex Russell (slightlyoff)
-
-- TL for Fizz. Available to consult on API questions and JS interaction.
-
-Updates since last meeting (on [Wednesday, February
-18th](/teams/layout-team/meeting-notes/wednesday-february-18)):
-
-Performance Tracking (benjhayden)
-
-- Looking at perf regressions on a webkit performance test.
-
-Scrolling (skobes) \[crbug.com/417782\]
-
-- Fixed Mac smooth scrolling regression.
-
-- Working on fixed position elements this week.
-
-Rename Rendering -&gt; Layout \[crbug.com/450612\] (dsinclair)
-
-- Trying to rename RendereBlock to LayoutBlock. Will have to land
-
-outside of office hours and/or close the tree. Will coordinate with
-
-the infra team.
-
-Measure API (jchaffraix)
-
-- Synced up with slightlyoff on API surface and implementation.
-
-- Continuing work on prototype and write-up.
-
-Line Boxes (hartmanng, szager) \[crbug.com/321237\]
-
-- No real progress last week. Plan to resume this week.
-
-Flexbox (cbiesinger) \[crbug.com/426898\]
-
-- Working on updating flexbox implementation to match latest spec
-
-revision.
-
-Text (kojii, wjmaclean, eae)
-
-- Vertical flow performance test is up and running. (kojii)
-
-- Temporary reverted vertical flow to simple path for the branch cut.
-
-(kojii)
-
-- Studying line breaker and exploring ideas:
-
-- Optimize width() when the length is one character.
-
-- Line breaker to use heuristic to start from likely break
-
-opportunities. (kojii)
-
-- Studying text iteration code, making it easier to follow. (wjmaclean)
-
-- Investigated Mac test regressions. (eae)
-
-- Plan to ressume work on complex text performance work, avoiding an
-
-extra copy of the string and unnecessary normalization. Requires an
-
-updated version of HarfBuzz which is tricky on Linux as we use the
-
-system version. Have some ideas. (eae)
-
-Misc
-
-- Finished blink starter bugs (svg image cache), image resourcem,
-
-Landed and done. (paulmeyer)
-
-- Renamed --dump-render-tree to --run-layout-tests. Done but documentation
-
-needs updating. Old flag deprecated but still there for now.
-
-Assertions/Regressions/blocking bugs
-
-- Working through list of ClusterFuzz assertions (cbiesinger).
-
-- Fixed a CluserFuzz selection range bug and got "rewarded" by being
-
-assigned another one. (szager) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-28-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-28-2016/index.md
deleted file mode 100644
index c1bbb870981..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-28-2016/index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-28-2016
-title: Monday, March 28, 2016
----
-
-Updates since last meeting (on Monday, March 21, 2016):
-Scrolling (skobes)
-- Fixed ScrollAnchor handling of position:absolute. (skobes)
-- 35 tests currently fail with scroll anchoring, digging into those.
-(skobes)
-- Working on getting ScrollAnchor to work during smooth scroll
-animation. (skobes)
-- ScopedLogger got removed, I am trying to get it back in. (skobes)
-CSS Flexbox (cbiesinger)
-- No updates since last week -
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No updates since last week -
-CSS Houdini
-- Wrote up a giant patch for CSS paint. Plan to split it up into to, fix
-bugs and add tests this week before landing. (ikilpatrick)
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Converting layout view to api. (pilgrim)
-- Added an include guard for the line layout api and fixed the few small
-API gaps it exposed. (dgrogan)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- Finishing up document reporing the outcome from the LayoutNG
-hackathon. (leviw, eae)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Some CSS Containment discussions. Current options are layout, paint,
-style, and strict. Adding one more, bike-shedding on name.
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- szager on vacation this week, eae will try to land a couple of
-outstanding changes in his absence. (eae)
-Text (eae, drott, kojii)
-- Fixed a text wrapping bug where a fast-path incorrectly applied to LTR
-content in a RTL container. (eae)
-- Finished line breaking investigation and wrote up a design document
-outlining my proposed new approach, using shaper information. (eae)
-<https://docs.google.com/document/d/1eMTBKTnWEMDu00uS2p8Xj-l9Pk7Kf0q5y3FbcCrWYjU/>
-- Started looking into a number of white-space: pre bugs. (eae)
-- Fixed the invalid unicode codepoint issue that pdr@ had pointed us
-to; Ugly integer truncation issue. (drott)
-- Continued the work on small caps, implementation is coming along quite
-well, the opentype feature itself works, but the synthesis needs more
-tweaking. (drott)
-- Started looking into the confused glyphs issue on Mac. (drott)
-HTML Tables (dgrogan)
-- Looked into a few table bugs but haven't yet made demonstrable
-progress. (dgrogan)
-Misc
-- Have a full page of notes that are useful to me on writing mode, was
-derailed due to paint perf work, expect to get to spend a few days
-this week on it. (wkorman)
-Logistics
-- cbiesinger in SF week of March 28.
-- drott in SF week of March 28.
-- szager on vacation starting week of March 28. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-29-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-29-2016/index.md
deleted file mode 100644
index 737831fd8a7..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-29-2016/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-29-2016
-title: Monday, February 29, 2016
----
-
-The layout team is a long-term team that owns the layout code in blink.
-See <https://www.chromium.org/blink/layout-team> for more information.
-Updates since last meeting (on Tuesday, February 22nd):
-Scrolling (skobes)
-- Last week, figured out that scroll anchoring is super broken. Working
-on fixing that. We're not intercepting frameview scrolls correctly.
-(skobes)
-- Three new smooth scrolling regressions reported last week, working on
-fixing those. (skobes)
-- Aim to get back to helping out with scrolling work next week.
-(szager)
-CSS Flexbox (cbiesinger)
-- Fixed all the scrolling bugs! Much rejoicing! Sadly the fix has been
-reverted to due causing a crash in FrameView.
-- Upstreaming flexbox tests to w3c.
-- Started working on percentage sizing of children of flex items. A lot
-of user requests and required by the updated spec.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No update since last week -
-CSS Houdini (ikilpatrick)
-- Last week, landed PaintRenderingContext2d changes. Fun times with a ms
-compiler bug.
-- Got debugging for worklets working locally, coordinating with devtools
-team about ways to integrate it into devtools.
-- This week, talking to compositor worker team about API things.
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Have been filling out the new block layout API class hierarchy, should
-be done creating all the necessary classes this week at which point I
-can report back on how much work each one of the will be. (pilgrim)
-- Chased down some remaining gaps in the line layout API but didn't
-finish. (dgrogan)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- Started working on the scafolding for LayoutNG. (leviw)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- No update since last week -
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Working on a few coding issue around intersection observers, keeping
-up with spec changes. (szager)
-- More or less wrapped up on heavy duty part of that, converting some
-tests to w3c style. (szager)
-- We should do some perf testing, we don't really know how fast or slow
-our implementation is. (szager)
-- Also signed up to run an experiment where we use intersection observer
-to see how frequently we encounter iframes that load but are never
-viewed. Gather date to inform possible interventions down the line.
-(szager)
-Text (eae, drott, kojii)
-- Cleaned up platform specific FontCache code. (eae)
-- Updated windows font fallback logic for win 7, 8, 8.1 and 10. (eae)
-- Added support for Glagolitic script. (eae)
-- Started looking into antialiasing toggling on windows and a better way
-to query the system for font preferences that works without punching
-holes through the sandbox. (eae)
-HTML Tables (dgrogan)
-- No update since last week.
-Misc
-- Have no more release blockers, yay! After battling trying to figure
-out root cause for no 1 crasher for days, finally found repro. Tracked
-down to "remove plugin size hack" change, reverting that fixed it.
-Still some issues with regard to life cycle state but it's within
-tolerance. Frames and widgets are handled differently. Specifically
-from the parent frame (main frame) we have multiple loops where we go
-into our child frames and tell them to move their life cycle along,
-but we don't do that for widgets. When a frame within a widget (web
-view plugin) we special case that causing all sorts of unpredictable
-behavior. Should be fixed at some point but not a priority at the
-moment. (leviw)
-- Have begun the code research phase for the exploratory flipped blocks
-work. at a minimum we'll learn things. (wkorman)
-- Pretended it was 1997 and fixed full-page-zoom for frames (as in
-frameset). (eae) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-8-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-8-2016/index.md
deleted file mode 100644
index f28a87e5107..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-8-2016/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-8-2016
-title: Monday, February 8, 2016
----
-
-Updates since last meeting (on Monday, February 1st):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Basic implementation of scroll anchoring landed behind the
---enable-blink-features=ScrollAnchoring flag. (skobes)
-- Working on adding more test cases for scroll anchoring. (skobes)
-- Adding about:flags entry so folks can try on mobile canary. (skobes)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Continued triage.
-- Fixed main size calculation for overflow:auto.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-(since last grid update in late December)
-- Fix auto track sizing with min-size:auto (svillar)
-- Add support for repeat(auto-fill|auto-fit,) (svillar)
-- Support for implicit grid before explicit grid (rego)
-- Fix unknown named lines resolution (rego)
-- Investigating issues with positioned items and RTL (rego)
-- Layout tests refactoring (jfernandez)
-- Investigating issues in orthogonal grids (jfernandez)
-- Add "normal" for content alignment (jfernandez)
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Working on cleaning up mapLocalToAncestor() in order to make it easier
-and cleaner to fix a multicol bug.
-- Intent to ship discussions continues, we might be able to unprefix
-multicol real soon after all!
-- Some work on the break-after, break-before and break-inside
-properties. More or less ready to file a CL, once the intentery gets
-resolved.
-CSS Houdini (ikilpatrick)
-- Stay tuned for a separate blonk-wide update on Houdini progress.
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Converted BlockPainter to new line layout API. (pilgrim)
-- Convert last use of RootInlineBox to the API. (dgrogan)
-- Shim AXLayoutObject uses of InlineBox-&gt;layoutObject(). (dgrogan)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Discussions about containment at CSS Working Group meeting with
-standard body and other browser vendors. (leviw)
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Fixed handling of zero-sized target elements for observations.
-(szager)
-- Fixed handling of cross-origin observations. (szager)
-- Changed observers to use DOMHighResTimeStamp for notification time.
-(szager)
-Text (eae, drott, kojii)
-- Meeting with the Android fonts team to discuss needs and possible
-integration going forward. (drott)1
-- Working on resolving emoji and multi-locale issues on Android, some
-parts are tricky, some parts are easier. Will continue to work with a
-android fonts team after the Tokyo workshop. (drott)
-- landing the remaining parts of SymbolsIterator/EmojiSegmentation,
-until now where I am hitting this issue of having to address graphemes
-as a unit of fallback with Behdad first - as per my comment on the
-last CL in the series. (drott)
-- Working on font fallback for symbol/emoji fonts on Android with
-bungman on the Skia team. (drott)
-HTML Tables (dgrogan)
-- No updates since last week.
-Misc
-- Finished work to make LayoutUnit construction explicit. (leviw)
-- Fixed weird broken zooming logic in offsetTop/Left calls. (leviw) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-9/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-9/index.md
deleted file mode 100644
index fe1f08084bf..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-february-9/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-february-9
-title: Monday, February 9, 2015
----
-
-\[ eae gave high level update on planning meeting; separate
-announcement on that to follow \]
-We added three new team members to this week which is very exciting!
-Welcome aboard, we're glad yo have you!
-- James Maclean (wjmaclean) in WAT, new to project warden.
-- Paul Meyer (paulmeyer) in WAT, new to blink and warden.
-- Koji Ishii (kojii) in TOK, new to the team but has already been helping
-out with text rendering performance for awhile.
-Performance Tracking (benjhayden)
-- Refined android profiling pipeline, similar to existing linux one.
-- Results match that of linux with a few exceptions, more time spent in
-powf() and loading fonts. Almost 3% of total layout time is spent in
-
-powf() translating color spaces for fonts.
-- Started to look into FontCache on android which doesn't seem as
-effective as on other platforms.
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Smooth scrolling now works the same for overflow divs as for frames.
-win_blink flakiness (dsinclair)
-- Worked to reduce win_blink flakiness by triaging flakiness and
-timeouts.
-- Flakiness went from 40% -&gt; 10% (!), it is now one of the faster bots.
-- Much of remaining flakiness due to font antialiasing/subpixel
-rendering differences.
-Rename Rendering -&gt; Layout \[[crbug.com/450612](http://crbug.com/450612)\]
-(dsinclair, bsittler,
-eae, hartmanng)
-- All non-prefixed files renamed. 188 prefixes files remaining.
-(dsinclair)
-- Most of the linbox tree has been moved. (hartmanng)
-List markers (dsinclair)
-- Trying to figure out how to deal with an ancestor being moved. Opera
-has some ideas and there might be multi-col logic that can be reused.
-Text (kojii, eae)
-- Make RenderCombinedText less obstructive to the line breaker and
-paint code. Mostly [donecrbug.com/433176](http://donecrbug.com/433176),
-selection paint issue
-[crbug.com/438852](http://crbug.com/438852) and a bit more cleanup still
-remains. (kojii)
-- Complex path perf issue that had been stalled due to the slow legal
-permission is finally clear now, hope to re-start with Dominik this
-week. (kojii)
-- Folded line_break into TextBreakIteratod, removed unused logic and
-de-templetized a bunch of functions. (eae)
-- Difference in preferred width between text and containing element
-caused regression on Facebook due to strict overflow handling.
-Has fix but writing layout test is difficult due to simplified
-text-rendering pipeline for tests. (szager)
-- Fixed ZWJ handling on simple text path on Mac. (eae) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-11-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-11-2016/index.md
deleted file mode 100644
index 1d423b6d334..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-11-2016/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-january-11-2016
-title: Monday, January 11, 2016
----
-
-The layout team is a long-term team that owns the layout code in blink.
-
-See https://www.chromium.org/blink/layout-team for more information.
-Updates since last meeting (on Monday, January 4th):
-Scrolling (skobes, szager) \[crbug.com/417782\]
-- Launched smooth scrolling! Top user request for year and one of our
-oldest open feature requests. Congratulations! \[skobes\]
-- Swamped with smooth scrolling issues. \[skobes\]
-- Biggest issue is we can't tell wheel scrolling form trackpad scrolling
-on windows, might end up enabling smooth scrolling for trackpads
-too. \[skobes\]
-CSS Flexbox (cbiesinger) \[crbug.com/426898\]
-- The behavior changes in December caused a number of problems on high
-profile websites. A lot of triage and bug fixing to follow.
-CSS Multi-column (mstensho) \[crbug.com/334335\]
-- Bug fixing for nested multicol and print support.
-CSS Houdini (ikilpatrick)
-- Plan to send intent to implement for CSS Paint this week.
-- Spec work; draft of css custom layout api in time for houdini meeting
-in Sydney at the end of the month.
-- Meeting with MS and Apple in Seattle last week, very productive in
-terms of getting on the same page with regards to custom layout and
-suggesting something that all rendering engines can support.
-Add API for layout (leviw, pilgrim, ojan) \[crbug.com/495288\]
-- Wrapping up API around inline layout.
-Intersection Observer (szager, mpb) \[crbug.com/540528\]
-- Enabled on trunk, work continues.
-Text (eae, drott, kojii)
-- Tracking down AAT font slowness on mac. Looks like we have a great
-patch that will improve it by at least an order of magnitude. We had
-a couple of issues with 16s rendering for a simple page. Due to AAT
-artificial fallback slowness, going through the fallback path up to five
-times unnecessarily. (drott)
-- Emoji segmentation, assisting fallback for emoji and punctuation.
-Initial approach didn't quite work as expected due to complex cases,
-have a new implementation that looks better and solves all the
-known cases. (drott)
-HTML Tables (dgrogan)
-- We had an artificial limit for row-span, increased it to match the FF
-artificial limit in response to developer bug reports.
-Logistics:
-- This is the last layout team meeting for jchaffraix as he is leaving
-the team and blink as of the end of this week. Thanks for all your
-work on Blink over the years Julien and best of luck on your next
-projects.
-- cbiesinger in Tokyo until Jan 20.
-
-- eae, leviw in Tokyo next week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-4-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-4-2016/index.md
deleted file mode 100644
index dc50b317ebe..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-january-4-2016/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-january-4-2016
-title: Monday, January 4, 2016
----
-
-Welcome back every, I hope you all had a good holiday break.
-With a new year comes new goals. Before we can set the high-level 2016
-goals and Q1 OKRs though we should reflect on where we are and evaluate
-our Q4 progress.
-I'll reach out to everyone individually over the next week or so to
-start the OKR process and will schedule a team-wide OKR meeting in a
-week or two. In the mean time please try to summarize and score your Q4
-OKRs and start thinking about what you want to work on in Q1 and beyond.
-Updates since last meeting (on Monday, November 30th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Landed fix for smooth scrolling target updates. (skobes)
-- Sizing main graphics layer for root layer scrolling. (skobes)
-- Updated scroll anchoring design doc and plan start to implementing
-it this week. (skobes)
-- Ready to turn onm smooth scrolling! Patch is ready and plan is to flip
-the switch this week (skobes)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- No updates since last meeting, cbiesinger still out -
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last meeting.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Managed to add support for printing. Involved solving the nested mult
-column use case which was tricky. Once that was in place printing
-support wasn't too much work.
-- Considering unprefixing, seems reasonable.
-- Fixing random multicol bugs.
-CSS Houdini (ikilpatrick)
-- Started to implement worklets, have patch out. Implementing all the
-basic stuff for that.
-- Also this week updating the CSS custom paint API.
-- Intent to implement for custom paint this week or next.
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Finishing up line layout text this week, part of the line layout api.
-- Final patches to implement box which will be ready for review shortly.
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Plan to send Intent to Implement this week.
-- Have pending spec patch that needs to be upstreamed.
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Trying to land Intersection Observer patch, not having much success.
-(szager)
-Text (eae, drott, kojii)
-- Fixed a number of issues around complex text. (eae)
-- Code cleanup following the move to always use complex text. (eae)
-- Got simple text removal patch ready to go. Primed and ready to land as
-soon as 49 branches. (drott)
-- Zurich meeting with behdad and i18n, discuss improved fullback for
-punctuation and symbols. Needs some manual tweaking. Need better
-handling for color emoji and emoji combinations. Might need a symbol
-iterator and then explicit font selection. (drott)
-HTML Tables (dgrogan, jchaffraix)
-- No update since last meeting.
-Bug Health
-- We managed to exceed our ambitious bug health goals by quite a bit
-for Q4:
-- Reduced untriaged bugs by over 70%, far exceeding goal of 50%.
-Down to 180 unconfirmed/untriaged from 690 at the start of Q4.
-- Reduced total open bug count by over 25%, exceeding goal of 15%.
-Down to 1688 open bugs from 2310 at the start of Q4.
-- A lot of hard work by the entire team, thank you everyone!
-- Plan to institute a triage rotation in Q1, will be ~30 min a week for
-one person (rotating). Details to follow.
-Misc
-- Stabalizing the rebaseline bot, is stable now, some open issues.
-Looking at moving it to the build bot, blocked on infra issue that has
-since been resolved. (wkorman)
-- Fixed one layout blocker bug, felt good and nice to get a break from
-trying to land intersection observer. More of the same this week.
-(szager)
-- Gave talk on layout at web engine hack fest in Spain. (drott)
-Logistics:
-- drott out Wednesday,m public holiday.
-- eae, ikilpatrick, ojan in Seattle Thu-Fri for CSS Houdini meeting
-with Microsoft. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-13-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-13-2015/index.md
deleted file mode 100644
index fe51e635a95..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-13-2015/index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-july-13-2015
-title: Monday, July 13, 2015
----
-
-Updates since last meeting (on Monday, June 22nd):
-
-Scrolling (skobes, szager) \[crbug.com/417782\]
-
-- Working on pinch viewport. (skobes)
-
-- Has fix for double scrollbar issue and potential fix for under-
-
-pinch. (skobes)
-
-- Helping out with scrolling, trying to figure out how to set, identify,
-
-and honor scroll bounds for the root layer. (szager)
-
-CSS Flexbox (cbiesinger) \[crbug.com/426898\]
-
-- No update, cbiesinger on vacation.
-
-CSS Grid Layout (svillar) \[crbug.com/79180\]
-
-- Updated auto tracks to use automatic minimums. (svillar)
-
-- Added support for infinitely growable tracks. (svillar)
-
-Region-based multi-column support (mstensho) \[crbug.com/334335\]
-
-- Looking into nested multicol, which is required for printing. Hope to
-
-move on to writing code for it soon. (mstensho)
-
-- Made a couple of changes to how we handle overflow at column
-
-boundaries that fixed Wikipedia but broke Google Plus. Should be
-
-possible to have both working at the same time. (mstensho)
-
-Add API for layout (leviw, pilgrim) \[crbug.com/495288\]
-
-- First part of the layout API landed and did not result in any
-
-performance regression. (pilgrim)
-
-Isolate core/fetch (japhet) \[crbug.com/458222\]
-
-- Working on refactoring how Blink revalidates cached results. (japhet)
-
-- Looking into a top user complaint; sometimes we show a blank page
-
-without any error message or indication that it went wrong. (japhet)
-
-CSS Test Suites (jsbell, kojii)
-
-- Continued work to import more w3c tests, now works with the w3c test
-
-server so that they won't require modifications any more. Looking for
-
-volunteers to help run and validate them. (jsbell)
-
-- Will unblocks tkent and kojii importing tests for their respective
-
-feature work. (jsbell)
-
-Text (eae, drott, kojii)
-
-- Looking into font fallback and trying to understand GlyphPageTreeNode;
-
-it serves a lot of different uses cases and we need to understand
-
-exactly what it does and why. (drott)
-
-- WebKit has made large changes to fallback and GlyphPageTreeNode since
-
-the fork.
-
-- Will write up a quick doc on fallback and then decide if we want to do
-
-a set of quick fixes or do a larger overhaul of how we do font
-
-fallback. (drott)
-
-- Finally got around to finish my revamp of the complex text code and
-
-the results are in, a 3.5x - 28x speedup across all platforms. With
-
-the slower platforms improving the most. The results are from a micro
-
-benchmark but given the amount of time spent in text layout on real
-
-world websites it should have a very noticeable impact. (eae)
-
-- Looking into what features we need to add to the complex text path in
-
-order to remove the simple path entierly. So far it looks like adding
-
-support for tab characters is the only major things missing. (eae)
-
-Misc
-
-- Profiling with perf on Android appears to be broken, working on fixing
-
-the run-benchmark-scripts. (wkorman)
-
-- Bringing up the Mac 10.10 bots. (joelo).
-
-Logistics
-
-- pilgrim on vacation this week.
-
-- cbiesinger on vacation this week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-18-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-18-2016/index.md
deleted file mode 100644
index e577398974c..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-18-2016/index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-july-18-2016
-title: Monday, July 18, 2016
----
-
-Updates since last meeting (on Monday, June 27, 2016):
-
-Back to our regularly scheduled programming after the chrome team wide
-two no-meeting period.
-Scrolling
-- Work on root layer scrolling continues, will carry over into Q3.
-(szager)
-Scroll Anchoring \[[crbug.com/558575](http://crbug.com/558575)\]
-- We now have a real spec for scroll anchoring \[1\]. (skobes)
-- Sent Intent to Implement \[2\] to blink-dev. (skobes)
-- Added support for the css overflow anchor property. (skobes)
-- Plan to continue bug triage work this week.
-CSS Flexbox
-- Flexbox bug triage and bug fixes. (cbiesinger)
-- Two known remaining issues for flexbox:
-- Min-size auto for nested column flexboxes.
-- Getting better metrics for new intristic size to see if it can
-potentially be enabled by default.
-(cbiesinger)
-CSS Grid Layout \[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week. See tracking bug for status.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No updates since last week. Morten out for the next few weeks.
-CSS Houdini
-- Pretty large update to the Houdini layout API spec, got into some
-really gnarly issues like out of positions floats in the middle of
-words and how to make the constraint space API sane for developers.
-Check it out \[3\], comments welcome! (ikilpatrick)
-- Going through and seeing what worklet stuff needs to be done for web
-audio, been meeting with the TOK team for worklets and will continue
-that this week. (ikilpatrick)
-- Fixed zoom in CSS paint worklets. (glebl)
-- Fixed a small regression with select elements complicated by a lack
-of tests. (glebl)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- The design doc for LayoutNG has been updated and the feedback from the
-layout team incorporated. Thanks for your help and input everyone!
-It's all but finished and I plan to circulate among the wider blink
-team later this week. (eae, ikilpatrick)
-CSS Containment \[[crbug.com/312978](http://crbug.com/312978)\]
-- Shiped in M52. No further updates will be provided. (eae)
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Shiped in M51 with the last few fixes and improvements shipping in 52.
-No further updates expected for the time being. (szager)
-Resize Observer (atotic)
-- Got LGTM from szager, other reviewers posetive but suggested splitting
-implementation into multiple patches. Working ongoing. (atotic)
-- Hope to land initial Resize Observer implementation this week.
-(atotic)
-- Set goals around event loop targets for Q3. (atotic)
-Tables (dgrogan)
-- Fixing a class of bugs around table borders. (dgrogan)
-- Plan to work with the Sydney-based style team with a couple of table
-issues blocking the work to separate style resolution from layout tree
-construction. (dgrogan)
-- Next up is adding support for visibility: collapse to table rows and
-columns. (dgrogan)
-Text (eae, drott, kojii)
-- Complex text enabled by default on Android again (yay!), there are a
-number of small regressions with regard to both performance and memory
-but nothing like the big regressions we've seen in the past. Still
-deciding on strategy. (drott)
-- Merged font manager change corresponding regression fix to M53.
-(drott)
-- Next, planning to go back to looking at the glyphToBoundsMap removal -
-there were still regressions in SVG tests that I need to figure out.
-(drott)
-- Meeting with Docs team tomorrow to discuss what could be done in
-Chrome to improve Docs. (drott)
-- Fixed a couple of crashes involving LayoutTextControl. (eae)
-Misc:
-- Fixed SVGLength crash. (eae)
-- Up until now eae has been doing all bug triage for the layout team.
-Now that the triage backlog is zero it's time to start a rotation
-among all team members. Expect it to start next week and to involve
-one week long stint as a triager every two months. (eae)
-- Wrote up instructions for bug triage \[4\]. (eae)
-Logistics:
-- szager out for the next two weeks.
-- mstensho out for the next month.
-1:
-<https://www.google.com/url?q=https%3A%2F%2Fcdn.rawgit.com%2Fymalik%2Finterventions%2Fmaster%2Fscroll-anchoring%2Fspec.html&sa=D&sntz=1&usg=AFQjCNGmw2oJ64KP0QB3z2UM2UBvX0kCdg>
-2:
-<https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/TbuxbOtyZvk>
-3: <https://drafts.css-houdini.org/css-layout-api/>
-4: <https://www.chromium.org/blink/layout-team/bug-triage> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-20-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-20-2015/index.md
deleted file mode 100644
index 5cb52ee73bd..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-july-20-2015/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-july-20-2015
-title: Monday, July 20, 2015
----
-
-Updates since last meeting (on Monday, July 13th):
-
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Continuing root layer scrolling conversion. Judging progress is hard
-
-and we don't necessarily know how much work remains, plan is to turn
-
-on root layer scrolling unconditionally and then run all he tests in
-
-order to see how many test failures we have and then use that as a
-
-burn-down list. Obviously progress isn't linear with the number of
-
-test failures but should give us a rough idea and a way to track
-
-progerss. (szager)
-
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Back from vacation, resuming flexbox work.
-
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-
-- No update.
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- No update, mstensho on vacation.
-
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-
-- Landed a couple of line-layout API patches. (ojan)
-
-Isolate core/fetch (japhet) \[[crbug.com/458222](http://crbug.com/458222)\]
-
-- No update.
-
-CSS Test Suites (jsbell, kojii)
-
-- No update.
-
-Text (eae, drott, kojii)
-
-- Dealing with fallout from complex text refactoring/optimization. (eae)
-
-- Adding support for tab characters to complex text path, which in turn
-
-will unblock work to enable the complex path by default. (kojii)
-
-- Continuing work on rationalizing the font fallback implementation and
-
-logic. Have a good understanding of the system and working on adding
-
-tests to ensure that we do not regress and that our system has good
-
-test coverage. (drott)
-
-- Our font selection implementation is not necessarily spec compliant
-
-at the moment, looking into why and working on improving our
-
-font selection tests. (drott)
-
-Misc:
-
-- Triaging and updating baselines for the Mac 10.10 bots. (joelo, leviw)
-
-- Helping windows team with win 10 changes/tests. (eae)
-
-Logistics:
-
-- mstensho on vacation this week.
-
-- skobes on vacation this week.
-
-- pilgrim on vacation today, back tomorrow.
-
-- cbiesinger planning trip to SF on Aug 3rd \[tentative\]. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-1-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-1-2015/index.md
deleted file mode 100644
index c1bdc0a5f32..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-1-2015/index.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-june-1-2015
-title: Monday, June 1, 2015
----
-
-Updates since last meeting (on Tuesday, May 25th):
-
-Performance Tracking (benjhayden)
-
-- Continuing to focus on trace viewer overall rather than limited to
-
-layout performance.
-
-- Visualizing layout in trace viewer.
-
-- Interaction records.
-
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Figured out a way to run the WebFrameTest unit tests with booth root
-
-level scrolling turned on and off. Going through tests to catch
-
-regressions.
-
-- Learned more about page scale factor, turns out that the initial scale
-
-factor cause the FrameView to be a different size.
-
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-
-- Landed over the weekend, re-baselines almost done. Yay!
-
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Updated min-size handling to match latest version of spec.
-
-- Sycned up with Microsoft and Mozilla about their flexbox plans to
-
-ensure compatibility across browsers.
-
-Menu list refactoring (dsinclair)
-\[[crbug.com/370462](http://crbug.com/370462)\]
-
-- Done!
-
-Fullscreen (dsinclair) \[[crbug.com/370459](http://crbug.com/370459)\]
-
-- Landed fix to persist plugins over re-attach. Subsequently reverted
-
-due to browser_test failures. Looking into failures and plan to
-
-re-land this week.
-
-Misc Warden (dsinclair, pilgrim)
-
-- Containing work to slim-dopwn LayoutObject. (pilgrim)
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- Will start to delete the old multicol code this week. It's no longer
-
-possible to enable it and no major regressions have been found.
-
-Text
-
-- Continuing work on complex text performance. (eae)
-
-- Experimenting with only inheriting inheritable properties into text
-
-nodes, not yet convinced that it affects performance noticeably, but
-
-it WILL increase memory usage, since we create a new ComputedStyle
-
-object for each text node (instead of sharing with the parent).
-
-Each text node that has the same parent could easily share the same
-
-ComputedStyle object, though, but we'd still be going to increase
-
-memory usage. (mstensho)
-
-- Fixed justification crash issue. (kojii)
-
-- Investigating orthogonal writing modes issues. (kojii)
-
-- Unicode variation selectors support in progress. (kojii)
-
-Importing Test Suites
-
-- Working on importing CSS Writing Modes test suites. (kojii)
-
-- Imported HTML tests. (tkent)
-
-Removing DeprecatedPaintLayer \[[crbug.com/260898](http://crbug.com/260898)\]
-(chadarmstrong)
-
-- Started looking at moving hit testing from DeprecatedPaintLayer to
-
-Box model object.
-
-- jchaffraix helping chadarmstrong get up to speed.
-
-Add API for layout \[[crbug.com/495288](http://crbug.com/495288)\] (leviw)
-
-- Meeting last where where the plans for the grand layout refactoring
-
-was discussed. We agreed that the first step is to define (and over
-
-time refine) an API for interacting with layout. Meeting notes at
-
-https://www.chromium.org/blink/layout-team/meeting-notes/may-28-2015
-
-- Wrote up a document outlining the plan, sent out to blink-dev.
-
-https://docs.google.com/document/d/1qc5Ni-TfCyvTi6DWBQQ_S_MWJlViJ-ikMEr1FSL0hRc
-
-Multipart images \[[crbug.com/308999](http://crbug.com/308999)\] (japhet)
-
-- Implemented support for multipart image documents.
-
-Misc Performance
-
-- Looked into SVG spinner performance and found layout bug where SVG
-
-paths where regenerated unnecessarily. Fixing the bug should give us
-
-at least a 50% perf improvement. (esprehn)
-
-Logistics
-
-- cbiesinger gardener Friday/Monday.
-
-- Mid quarter OKR check-in on Thursday at 10am PST. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-22-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-22-2015/index.md
deleted file mode 100644
index 028b9584a4b..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-22-2015/index.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-june-22-2015
-title: Monday, June 22, 2015
----
-
-Updates since last meeting (on Tuesday, June 16th):
-
-Scrolling (skobes, szager) \[crbug.com/417782\]
-
-- Fixed handling of overflow clip for root layer.
-
-CSS Flexbox (cbiesinger) \[crbug.com/426898\]
-
-- Working on intrinsic sizes, found a problem with the spec that needs
-
-investigation. Handling of form controls (like calendar picker) is
-
-problematic.
-
-- Hope to finish up absolut positioning handling this week.
-
-CSS Grid Layout (svillar) \[crbug.com/79180\]
-
-- Blocked on code reviews. (svillar)
-
-- Performance optimizations for alignment. (jfernandez, svillar)
-
-- cbiesinger to help with reviews. (cbiesinger)
-
-Region-based multi-column support (mstensho) \[crbug.com/334335\]
-
-- Still stabilizing multicol.
-
-- Intend to start working on nested multicol soon, so that we can
-
-print.
-
-Add API for layout (leviw, pilgrim) \[crbug.com/495288\]
-
-- Continuing work on adding API around block layout. Managed to track
-
-down and solve the performance problems assoscaited with it (turns
-
-out it was caused by the overhead of extra non-inlined constructors/
-
-deconstructors). (pilgrim)
-
-Isolate core/fetch (japhet) \[crbug.com/458222\]
-
-- Continued work to separate core/fetch from core and considering finer
-
-grained separation per resource type. I.e css resource handling
-
-specific logic could be moved to the css directory.
-
-Text (eae, drott, kojii)
-
-- Removing dependency on glyph page tree node from complex path to allow
-
-it to be removed entierly once the simple path is removed. Trying to
-
-figure out exactly how it is used and where in order to break the
-
-dependency. (drott)
-
-- Unicode variation selectors support fixed for Win/Mac. Linux needs our
-
-harfbuzz in unofficial builds. (kojii)
-
-- Investigating bundling our harfbuzz for unofficial Linux. (kojii)
-
-- Investigating abspos issues in vertical flow. (kojii)
-
-- CL adding support for word-by-word shaping up for review, performance
-
-looks very good, will try to land this week. (eae)
-
-Layout Bugs:
-
-We currently have 1581 open bugs for the Cr-Layout label, down from 1592
-
-last week.
-
-- Untriaged: 468 (-7)
-
-- Priority 0: 0
-
-- Priority 1: 134 (-1)
-
-- Priority 2: 957 (-1)
-
-- Priority 3: 19
-
-We need to get the number of bugs down so from now on each weekly update
-
-will include the number of bugs for each category and the delta from the
-
-week before.
-
-Logistics:
-
-- szager OOO all week.
-
-- eae gardener Wed-Thu.
-
-- OKR meeting on Thursday. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-27-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-27-2016/index.md
deleted file mode 100644
index b2f507c3561..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-27-2016/index.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-june-27-2016
-title: Monday, June 27, 2016
----
-
-Updates since last meeting (on Monday, June 6, 2016):
-Scrolling
-- Dealing with a scroll related performance regression: when you change
-the existence off scrollbars on a box it goes and sets a flag that
-invalidates the width available for children which forces a re-layout
-for all children. This happens even if the content width didn't
-change. Landed a patch to fix that; it may not be perfect yet but it's
-close, needs a few tweaks. (szager)
-- Assisted ymalik in investigating smooth scroll jank issues. (skobes)
-\[[crbug.com/616995](http://crbug.com/616995)\]
-- Working on a fix for incorrect repainting of negative z-index children
-on scroll. (skobes) \[[crbug.com/596060](http://crbug.com/596060)\]
-Scroll Anchoring \[[crbug.com/558575](http://crbug.com/558575)\]
-- Thinking about the scroll anchoring cycle problem
-\[[crbug.com/601906](http://crbug.com/601906)\],
-will likely add a limit on number of adjustments between user scrolls
-per Kenji's suggestion. (skobes)
-CSS Flexbox
-- Fixing flexbox regressions. Number of open flexbox regression bugs is
-steadily decreasing. No new major issues detected or reported latelty.
-(cbiesinger)
-- Refactored flexbox layout algorithm to make it easier to understand
-and maintain. (cbiesinger)
-CSS Grid Layout \[[crbug.com/79180](http://crbug.com/79180)\]
-- Fixed some small layout bugs related to intrinsic sizes and border/
-padding. (jfernandez)
-- Working on grid orthogonal flows. (jfernandez)
-- Working on new CSS alignment parsing logic. (jfernandez)
-- Get rid of LayoutBox::hasDefiniteLogicalWidth|Height(). (rego)
-- Fixed issues with height percentages on grid items. (rego)
-- Gave CSS Grid update talk at BlinkOn 6 in Munich. (rego)
-- Implemented repeat (auto-fit). (svillar)
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No updates since last week. Morten out for the next two months.
-CSS Houdini
-- Added support for prefixed properties to the CSS Paint API. (glebl)
-- Renamed Geometry to PaintSize for the CSS Paint API to match latest
-spec update. \[[crbug.com/578252](http://crbug.com/578252)\] (glebl)
-- Enabled worklets and the CSS Paint API as experimental web platform
-features. (ikilpatrick)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- Working on design doc, will be ready for circulation among the team
-post BlinkOn. (eae, ikilpatrick)
-CSS Containment \[[crbug.com/312978](http://crbug.com/312978)\]
-- No updates since last week.
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Misc minor intersection observer fixes. (szager)
-- OOPIF will need to support intersection observer, unclear what
-priority or who should own the work. Complicated as it needs to walk
-through the frame tree, if a frame is in another process you cannot do
-that so some architecture changes are needed to have each process
-compute intersections at frame time and have the browser process
-process the intermediate results. (szager)
-Resize Observer (atotic)
-- No updates since last week.
-Tables (dgrogan)
-- No updates since last week.
-Text (eae, drott, kojii)
-- Made changes to the font cache to use ref counting which should allow
-for better cache invalidation. (drott)
-- Found a way to get zero-copy access to the font data tables from skia,
-avoiding an extra copy per FontPlatformData. This is potentially a
-very big win! (drott)
-Misc:
-- Rebaseline bot update: wangxianzhu did some excellent work, it should
-be operating correctly now. Was previously potentially rebaselining
-with stale result as it didn't wait for all bots to cycle before
-triggering. One should still closely monitor baselines but it should
-be working correctly now. (wkorman)
-- Fixing some bugs around paint invalidation rects,
-mapToVisualRectandAncestor. Bugs with flipped blocks and relative
-position specifically. Likely to also affect intersection observer.
-(wkorman)
-- Rolled back dropdown change where we reserved extra space as it broke
-a number of sites. Trying a new approach that better matches other
-browsers. (glebl) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-6-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-6-2016/index.md
deleted file mode 100644
index 4640dda12df..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-6-2016/index.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-june-6-2016
-title: Monday, June 6, 2016
----
-
-Updates since last meeting (on Monday, May 23, 2016):
-Scrolling
-- Landed all of the scrollbar fixes! Finally bringing sanity and good
-test coverage to the scrollbar space. (szager)
-- Scrollbar regression in web inspector, looks like an incorrect
-workaround in client code. Needs further investigation. (szager)
-- Found and fixed regression in google spreadsheets, due to js trying
-to compensate for scrollbars. (szager)
-- All regressions identified thus far have been due to client side js
-working around or trying to compensate for scrollbars. Long tail but
-new behavior is "better" and we're now more consistent with IE/Edge.
-(szager)
-Scroll Anchoring \[[crbug.com/558575](http://crbug.com/558575)\]
-- No updates since last week.
-CSS Flexbox
-- Back from vacation, dealing with a couple of regressions including a
-release blocker. (cbiesinger)
-CSS Grid Layout \[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week.
-- Grid talk scheduled for BlinkOn 6 in Munich.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No updates since last week. Morten out for the next two months.
-CSS Houdini
-- Helping audio folks with worklets, they're in a good space design
-wise. Got something that'll work and that we're happy with.
-(ikilpatrick)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- Working on design doc, will be ready for circulation among the team
-post BlinkOn. (eae, ikilpatrick)
-CSS Containment \[[crbug.com/312978](http://crbug.com/312978)\]
-- Identified a couple of security bugs involving containment and
-tables. (eae, dgrogan)
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Changed dispatch to make the order of notifications deterministic.
-(szager)
-Resize Observer (atotic)
-- Initial implementation up for review. It's looking pretty good. We
-have a spec we're happy with and that we're implementing. (atotic)
-- Two remaining issues to match spec, don't quite know how to expose
-that as a part of the API. Plan is to check in what we have behind
-a flag and to iterate. (atotic)
-Tables (dgrogan)
-- Change invalidation logic for border width changes for rows, fixing
-a bug with floats. (dgrogan)
-Text (eae, drott, kojii)
-- More FontCache analysis and looking at lifecycle of FontPlatformData
-objects. Goal is to reduce complex path font memory consumption and
-achieve enabling complex by default on Android. (drott)
-- We're basically leaking FontPlatformData objects and hb_blob_t with
-font table information over the lifetime of a renderer. This is
-especially bad for single process. (drott)
-- Identified a RefPtr cycle issue. (drott)
-- Identified an issue of storing full FontPlatformData objects as key
-in FontDataCache. (drott)
-- Plan to experiment with an LFU eviction plus threshold approach.
-(drott)
-- Fixed a couple of line brekaing bugs involving element boundaries due
-to diffrences in rounding between prefered width calculations and
-line breaking. (eae)
-Misc:
-- Fixed an interop issue wrt list-style inside. We now match the spec
-and the Mozilla/Edge behavior. (glebl)
-- We now support color fonts, including color emoji, on Windows 8.1
-and later. (kulshin) \[[crbug.com/333011](http://crbug.com/333011)\]
-- Using page zoom for device scaling enabled by default on ChromeOS.
-(oshima) \[[crbug.com/485650](http://crbug.com/485650)\] \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-8-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-8-2015/index.md
deleted file mode 100644
index 42c0c8185e0..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-june-8-2015/index.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-june-8-2015
-title: Monday, June 8, 2015
----
-
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Ran into problem with hit testing absolutely positioned objects within
-a scrollable element. Hit testing code thinks the element is in front
-of the scrollbar. (skobes)
-- Plan to get back to viewport issue next, once the abs hit testing
-issue has been resolved.
-- szager getting ramped up on scrolling.
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-- Done and seems to be sticking, some cleanup/monitoring left but no new
-major issues encountered.
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Continuing to update to match spec, progress according to plan.
-Misc Warden (dsinclair, pilgrim)
-- Containing work to slim-dopwn LayoutObject. (pilgrim)
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- Removed old multicol code, yay! (mstensho)
-- Fixed multicol fuzzers, and also a completely unrelated fuzzer in the
-CSS counters code. (mstensho)
-Removing DeprecatedPaintLayer (chadarmstrong)
-\[[crbug.com/260898](http://crbug.com/260898)\]
-- Current plan is to move hit testing code to stacking node instead of
-box model object. This prompted a discussion about the reason behind
-the change and the relative merits of retaining the stacking context
-concept vs moving hit testing to be self contained and on box model
-object. chadarmstrong/jchaffraix/ojan to follow up offline.
-Text
-- Imported CSS Writing Modes test suites, minor fixes and feedback of
-our run results to CSS WG continues. (kojii)
-- Unicode variation selectors support in progress, close to complete the
-basic support. (kojii)
-- Investigating orthogonal writing modes issues. (kojii)
-- Investigating abspos issues in vertical flow. (kojii)
-Add API for layout (leviw, pilgrim)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- pilgrim and ikilpatrick working on getting initial API definition
-landed.
-Logistics
-- dsinclair GPU sheriff (pixel wrangler) this week.
-- Planning meeting for Moose on Wednesday, notes will be sent out to
-layout-dev, talk to eae if you want to be included. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-16-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-16-2015/index.md
deleted file mode 100644
index 21bf2b8a603..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-16-2015/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-march-16-2015
-title: Monday, March 16, 2015
----
-
-eae OOO, jsbell taking notes (poorly - apologies for mangling your words and
-leaving out any important bits)
-
-Measure API (jchaffraix)
-
-- still working on proposal for measure
-
-- finished layer refactor/renaming
-
-Flexbox (cbiesinger)
-
-- almost done w/ first part of flexbox spec change
-
-- tests missing, importing w3c tests
-
-Isolate core/fetch (japhet)
-
-- big class responsible for most violations is mostly done
-
-- lots of smaller classes to tackle next
-
-Scrolling (skobes)
-
-- position fixed works w/ root layer scrolling
-
-- looking at layout test failures
-
-Performance Tracking (benjhayden)
-
-- adding pages to key silk pages benchmarks
-
-Rename Rendering -&gt; Layout (dsinclair)
-
-- splitting layout name out into decorated name \[jsbell: didn't catch all of
-this\]
-
-- updating lots of layout tests to have more correct results
-
-- renderer -&gt; layout object renaming
-
-- fun content shell resize issue causing subsequent tests to fail, trying to
-track it down
-
-Line Boxes(hartmanng, szager)
-
-- working through float to layout unit test failures
-
-- hartmanng: windows - tons of failures, but everything so far looks like it can
-rebased, but only a few dozen out of a few hundred reviewed so far
-
-- szager: made it through nearly all tests on mac, two real regressions - line
-wrapping, svg and platform specific layout; digging into those
-
-Misc:
-
-- jchaffraix: now working on a release blocker
-
-- szager: helping out jochen with repo merge
-
-- wkorman: still ramping up; tell me about merging to release branches...?
-
-- japhet: other half of time spent on site isolation stuff
-
-- jsbell: nothing warden-related this week (other than these notes) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-23-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-23-2015/index.md
deleted file mode 100644
index c1f0bd2533a..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-23-2015/index.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-march-23-2015
-title: Monday, March 23, 2015
----
-
-Performance Tracking (benjhayden)
-
-- Added a couple new pages to the key_silk_cases benchmark suite.
-
-- Continuing counter work.
-
-- What further pages should be added? jchaffraix has a list.
-
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Fixed a flaky test but turns out it is still flaky on one of the
-
-oilpan bots. Not sure why. Will coordinate with oilpan team to try to
-
-track down the issue.
-
-Rename Rendering -&gt; Layout (dsinclair)
-\[[crbug.com/450612](http://crbug.com/450612)\]
-
-- Renamed renderer in layout/svg.
-
-- Renamed Renderer to LayoutObject in ImageResource and
-
-LayoutTreeBuilder.
-
-- Renamed \*styleForRenderer to \*styleForLayoutObject.
-
-Measure API (jchaffraix)
-
-- Collected use cases and have enough to justify continued work on
-
-prototype.
-
-- Out-of-tree measurements will be tricker than expected, a lot
-
-trickier. Might be a problem that affects more than measure.
-
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Continuing on flexbox work. Progress is slower than expected as
-
-updating tests takes a lot of time.
-
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-
-- Found root cause for a significant chunk of layout test failures,
-
-including incorrect wrapping in buttons. Turns out leading whitespace
-
-is to blame. We subtract the width of a space character using a
-
-floating point representation of the width, introducing imprecision.
-
-- Hopeful that this'll be the last code change before landing. (szager)
-
-Isolate core/fetch (japhet) \[[crbug.com/458222](http://crbug.com/458222)\]
-
-- Continued quested to isolate fetch directory from the rest of core.
-
-Mostly there.
-
-- Changed DEPS rule to enforce core/fetch isolation, white listed
-
-existing bad includes (down to 7).
-
-Page scale handling (bokan) \[[crbug.com/459591](http://crbug.com/459591)\]
-
-- Coordinate transformation cleanup in FrameView.
-
-- Added documentation for coordinate spaces, see
-
-<https://www.chromium.org/developers/design-documents/blink-coordinate-spaces>
-
-Text (kojii, wjmaclean, eae)
-
-- ​Reviewing test results for bidi and vertical flow in W3C test suites
-
-with W3C contributors. (kojii)
-
-- Fixed vertical alignment in vertical flow, one of the biggest failures
-
-in the W3C test suites. (kojii)
-
-- Getting back to text iterator work. (wjmaclean)
-
-- Fixed top Mac crasher, caused by incorrect assumption in HarfBuzz
-
-CoreText shaper. (eae)
-
-- Backported fix for reverse_range tab-crash to M41 after it getting
-
-some media attention. (eae)
-
-ClusterFuzz
-
-- Various ClusterFuzz bugs (wjmaclean, jchaffraix, szager)
-
-- Working on a table layout crash bug, have repro but not sure of cause
-
-yet, will coordinate with wjmaclean as needed. (wkorman)
-
-Misc
-
-- Helped with repository merge issues (szager)
-
-- Remove old ICU hacks/code from wtf/text now that we control the
-
-version of ICU used. (jsbell)
-
-Logistics:
-
-- hartmanng switching to another chrome team, dsinclair will take over
-
-in-progress work. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-30-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-30-2015/index.md
deleted file mode 100644
index 58585787997..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-30-2015/index.md
+++ /dev/null
@@ -1,216 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-march-30-2015
-title: Monday, March 30, 2015
----
-
-We had Rune Lillesveen (rune) and David Vest (davve) from Opera join the
-
-meeting this week in an effort to better coordinate our work. We also had
-
-Ian Killpatrick (ikilpatrick) from the Chrome Sydney team join us.
-
-The massive Rendering -&gt; Layout rename project is done, thanks to
-
-everyone who helped out and to Dan in particular who did most of the
-
-heavy lifting!
-
-The new multi-column implementation was enabled for tests and exposed as
-
-an experimental web platform feature on Friday! Congrats Morten!
-
-Updates since last meeting (on Monday, March 23rd):
-
-Performance Tracking (benjhayden)
-
-- Continuing work on LayoutAnalyzer and counters. Counters will be
-
-exposed via trace events allowing us to see the number of layouts on a
-
-per element type basis.
-
-- Working on adding a command line flag for android to allow metrics to
-
-be collected on an attached phone.
-
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Fixed the scroll animation test that was failing on the leak bots.
-
-- Fixed a bug with scrolling to fixed-position #anchor targets.
-
-- Still tests failing that I need to dig into, and I need to add more
-
-virtual test suites as right now it is only running fast/scrolling.
-
-Rename Rendering -&gt; Layout (dsinclair)
-\[[crbug.com/450612](http://crbug.com/450612)\]
-
-- Done. All files have been moved and renamed. The rendering/ directory
-
-is gone!
-
-First letter refactoring (dsinclair)
-\[[crbug.com/391288](http://crbug.com/391288)\]
-
-- Fixed first-letter hit testing, discovered a couple of new bugs.
-
-List marker refactoring \[[crbug.com/370461](http://crbug.com/370461)\]
-
-- Getting back to list-marker work, will turn the marker into a ::marker
-
-psedo element. \[crbug.com/457718\]
-
-Measure API (jchaffraix)
-
-- Been thinking about supporting measure out-of-tree and trying to come
-
-up with a good strategy. So far none of the approaches tried have
-
-panned out. Will continue to experiment and evaluate ideas to guide
-
-future work.
-
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Finished implementing spec changes for min-width auto.
-
-- Started working on positioning of position: absolute elements.
-
-- Working on importing w3c test suite for flexbox.
-
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-
-- Finished going through the layout test failures for Glenn's patch, and
-
-landed a few patches to fix tests. All of the remaining test failures
-
-are OK to rebaseline.
-
-- Ran the patch through the perf bots, and the results were not as I had
-
-hoped. There appeared to be significant performance regressions in the
-
-blink_perf.layout test suite.
-
-- Working on eliminating wrapper classes (FloatWillBeLayoutUnit) to test
-
-theory that they explain at least part of the regression.
-
-- Found a number of places where we use the wrong unit, we need to
-
-decide exactly where to draw the line between LayoutUnit and float.
-
-Isolate core/fetch (japhet) \[[crbug.com/458222](http://crbug.com/458222)\]
-
-- Continuing work to isolate core/fetch from the rest of core.
-
-Page scale handling (bokan) \[[crbug.com/459591](http://crbug.com/459591)\]
-
-- Remove old pinch-zoom paths from Blink.
-
-Blink componentization (pilgrim) \[[crbug.com/428284](http://crbug.com/428284)\]
-
-- Moving things from core to modules; core/storage and core/timing.
-
-Text (kojii, wjmaclean, eae, rune)
-
-- Continued work on text iterator cleanup, fixed naming to be more
-
-descriptive. (wjmaclean)
-
-- Working on a change that pulls out the part of TextIterator that
-
-handles text from the part that handles traversing. (wjmaclean)
-
-- Profiling line breaking. (eae)
-
-- Started working on design doc for removing simple text. (eae)
-
-- Fixed text overflow box bug that blocked the Slimming Paint work.
-
-(eae)
-
-- Fixed an assertion problem with baseLayoutStyle which lead to
-
-finding/reporting a problem causing unnecessary layouts.
-
-\[[crbug.com/471079](http://crbug.com/471079)\] (rune)
-
-- Fix vertical flow regression when a major web font site provides
-
-broken tables. (kojii)
-
-- Default to complex path more cases in vertical flow. (kojii)
-
-- Working with W3C and internal experts for bi-di and vertical flow
-
-issues. (kojii)
-
-Style resolution (rune)
-
-- Cache element indices for :nth-child and :nth-last-child selectors.
-
-Content sizing (davve)
-
-- Working on content sizing/intrinsic size for HTML and SVG.
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- New multi-column implementation enabled as experimental web platform
-
-feature!
-
-Standards (ikilpatrick, slightlyoff)
-
-- Pushing the layout portion of w3c houdini forward in preparation for
-
-the next meeting by prototyping. (ikilpatrick)
-
-ClusterFuzz
-
-- Trying to reduce an obscure clusterfuzz crasher in RenderBlockFlow.
-
-(wkorman)
-
-Discussions:
-
-\[ cbiesinger's work to import the w3c test suite prompted a discussion
-
-about w3c tests. \]
-
-&lt;slightlyoff&gt; Are we mostly writing blink specific layout tests or w3c
-
-web platform tests today?
-
-&lt;eae&gt; For regression and performance work we use blink specific layout
-
-tests pretty much exclusively. For feature work we're trying to move to
-
-a world where we use web platform tests tests but we're not there yet.
-
-&lt;jsbell&gt; Dirk (dpranke) started work in tooling to support w3c web
-
-platform tests, I have headcount for an engineer to take this over and
-
-work on improving the tooling.
-
-&lt;jsbell&gt; Once better tooling and procedures are in place we should start
-
-"strongly encouraging" people to write web platform tests for new
-
-features.
-
-&lt;slightlyoff&gt; Can we do that today?
-
-&lt;jsbell&gt; It is too too painful to do today, tooling needs to be improved
-
-first. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-7-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-7-2016/index.md
deleted file mode 100644
index db50c677d54..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-7-2016/index.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-march-7-2016
-title: Monday, March 7, 2016
----
-
-Updates since last meeting (on Monday, February 29):
-We had a new person join the meeting for the first time this morning,
-Aleks Totic (atotic). He join Google about two months ago and his
-starter project is Resize Observer. Welcome Aleks!
-Scrolling (skobes)
-- Have a change in review that fixes a bunch of things with scroll
-anchoring, with this change it is pretty close to usable on real-
-world websites. (skobes)
-- Smooth scrolling bugs (have four of them now, yay). (skobes)
-- Reacquainted myself with scrolling stuff, was looking into a scroll
-related bug that skobes volunteered to take on. (szager)
-CSS Flexbox (cbiesinger)
-- Worked on flexbox percentage sizing, going well. Will continue this
-week.
-- Last week, re-landed the fix for scrolling that fixes everything after
-a fix by kojii that caused a revert (layout scheduling at a stage
-where one should not happen).
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No update since last week -
-CSS Houdini (ikilpatrick)
-- Kast week in Waterloo with compositor worker folks, had fun getting
-compositor worker to work with worklets (that's a lot of work\* words!)
-and with a cleaner API. Have a new API version, will try to move into
-trunk sometime later this month.
-- About to commit a small change for main frame worklets API.
-- Want to get paint rendering context 2d check-in this week.
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Continued making progress on the box layout api, have sense of size of
-problem. Basically every element will have to have a layout item
-instead. About ~40% of them have their own element specific things
-which means that we'll need element specific block element API.
-Working through that list and figuring out the hierarchy. Projecting
-how large of a project it is. (pilgrim)
-- So far most element specific APIs have been pretty small with only a
-method or two, on the leaf node level. a lot of the higher level
-elements (like layout image, layout media, layout box etc) have more
-complicated APIs that will take more time. (pilgrim)
-- Spent much of last week burning down the list of tasks for the Line
-Layout API. Only size invalid calls left, hopeful then we can change
-the constructors and add include guards this week then call the Line
-Layout API done. (dgrogan)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- No update since last week -
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Landed Layout Containment! <https://codereview.chromium.org/1530303003>
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Landed a couple of intersection observer changes last week, have a few
-more coming but no longer a full-time endeavor. (szager)
-- Focus on bugs this week. (szager)
-Text (eae, drott, kojii)
-- Coming back from tok, working on remaining on emoji font fallback.
-After coordinating with android team changed how we get the fallback
-font. When android releases the SDK preview for N then we can activate
-fitzpatrick modifiers. Required further segmentation fixes. (drott)
-- Fixed line-breaking issues with emjoi combiners. Not yet in ICU,
-implemented on top of it for now. Will move to ICU over time. (drott)
-- This week, plan to add unit tests for line breaking and then land and
-coordinate with Android team. (drott)
-- Fixed how we query the operating system for font settings relating to
-font smoothing and LCD subpixel rendering on Windows. Previously we
-tried to read the registry values from the rendering which wouldn't
-work with the sandbox lockdown, changed it to query the OS from the
-browser process and pass it down to the renderer. Fixes issues where
-we don't respect the users font settings and also ensures consistency
-across chrome and blink. (eae)
-- Discovered a pretty bad perf regression for break-all. Our performance
-has always been bad but got worse with complex text. Investigating and
-have some ideas as to how it can be fixed. (eae)
-HTML Tables (dgrogan)
-- No update since last week -
-Misc
-- Started working on how we render table backgrounds with collapsed
-borders, pulled a thread and the whole thing started to unravel.
-Discovered out that collapsed borders are painted in a crazy way,
-trying to clean up. (atotic)
-- Spent a full day helping wkorman with the rebaseline bot, makes me
-realize how happy I am that I left infra and moved to blink where
-things are sane and predictable. (szager)
-- Still dong analysis work for writing modes. (wkorman) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-9-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-9-2015/index.md
deleted file mode 100644
index c48411c68aa..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-march-9-2015/index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-march-9-2015
-title: Monday, March 9, 2015
----
-
-Performance Tracking (benjhayden)
-
-- Continuing work on exporting counters.
-
-- Adding layout metrics to the blink performance tests.
-
-- Working on simplifying the layout metrics implementation.
-
-Scrolling (skobes) \[crbug.com/417782\]
-
-- Ran into an issue with paint invalidation rects that block the later
-
-scroll implementation.
-
-Rename Rendering -&gt; Layout (dsinclair) \[crbug.com/450612\]
-
-- Renamed RenderTreeBuilder to LayoutTreeBuilder.
-
-- Renamed various methods; renderer() to layoutObject(), rendererIs\* to
-
-layoutObjectIs\*, and createRenderer\* to createLayoutObject\*.
-
-Measure API (jchaffraix)
-
-- Spent much of last week discussing the measurement API with
-
-stakeholders.
-
-- Trying to determine whether there is a use case for the measure API in
-
-isolation or if it only makes sense as part of as part of custom
-
-layout. If you have a use case reach out to jchaffraix.
-
-- No doubt that there is need for a text metrics API.
-
-Line Boxes (hartmanng, szager) \[crbug.com/321237\]
-
-- Dealing with layout test failures, five-ish tests needs debugging on
-
-linux, looking into windows at the moment. Mostly false positives,
-
-some actual failures. (hartmanng)
-
-- Dealing with layout test failures on Mac. (szager)
-
-- Spent a lot of time fixing broken tests, eae argued this might not be
-
-the best use of my time. Will mark broken tests as broken going
-
-forward to unblock the conversion work. (szager)
-
-Flexbox (cbiesinger) \[crbug.com/426898\]
-
-- Flexbox work is taking a bit longer than expected, the win-width auto
-
-change took all of last week. Still dealing with test failures.
-
-- Two week estimate was a bit too optimistic.
-
-Isolate core/fetch (japhet) \[crbug.com/458222\]
-
-- Continuing on isolating the fetch directory from the rest of core.
-
-Blink componentization (pilgrim) \[crbug.com/428284\]
-
-- Working on modularizing various things in core, storage is now
-
-modules/storage.
-
-- Next up is (blocking on fetch) is core/xml.
-
-Text (kojii, wjmaclean, eae)
-
-- Continuing work on text iterator. Trying to modularize it to make it
-
-easier to understand. Many misnamed and confusing methods, tyring to
-
-rationalize that. (wjmaclean)
-
-- Line breaker optimizations based on profiling data resulted in ~10%
-
-speedup for line-layout and text perf tests. (eae)
-
-- FontMetrics::ascent(), descent(), and height() optimizations resulted
-
-in up to 15% speedup for complex text perf tests, ~3-5% for simple
-
-text. (kojii)
-
-Misc
-
-- Helping jochen on git repository merge. Their strategy is sound and
-
-they are doing the right thing. Will help with infra work as needed.
-
-(szager)
-
-- Created minimized tests case and tracked down root cause for starter
-
-bug, was an invalidation bug. (wkroman)
-
-Logistics
-
-- cbiesinger in SF next week.
-
-- eae out Tue-Thu this week and Mon-Tue next week.
-
-- wjmaclean out Thu-Fri this week and all next week.
-
-- paulmeyer won't be working on layout for the next couple of weeks. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-16-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-16-2016/index.md
deleted file mode 100644
index 5cba2271f7e..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-16-2016/index.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-may-16-2016
-title: Monday, May 16, 2016
----
-
-Updates since last meeting (on Monday, April 25, 2016):
-Scrolling
-- Wrapping up overflow: auto work. Split up into three separate patches,
-first one landed last week and fixes scrollbars in general in the
-presence of "interesting" flex direction, writing mode and text
-direction combinations. \[[crrev.com/392981](http://crrev.com/392981)\] (szager)
-- The second patch (wip) overhauls how the flex algorithm handles
-overflow: auto scrollbars. It basically makes it much clearer and
-reduces unnecessary work that flex algorithm has to do to handle the
-presence of scrollbars. Shouldn't have any visible changes. (szager)
-- The third patch changes how intrinsic width is calculated in the
-presence of scrollbars. It's a major change that will improve how
-things look and will fix some incorrect coordinates that are reported
-back. Right now, for instance, a zero width box width vertical
-overflow will report a clientWidth of -15px. Relatively small change
-but I think it'll be nice and improve things. Some fun interactions
-between layout and paint clipping. (szager)
-- Added a new ref test that tests all combinations and it'll keep us
-honest going forward. Looking into up-streaming it. (szager)
-Scroll Anchoring \[[crbug.com/558575](http://crbug.com/558575)\]
-- Fixed a scroll anchoring subpixel positioning bug, was very annoying
-as text kept flickering during load when anchored. (skobes)
-- Have a solution for interaction between scroll event handlers and
-scroll anchoring. Detects when it's bouncing between two locations and
-prevents it. (skobes)
-CSS Flexbox
-- Flexbox specification discussions at the CSS Working group face-to-
-face last week, made progress on intrinsic width calculations among
-other things. (ikilpatrick)
-CSS Grid Layout \[[crbug.com/79180](http://crbug.com/79180)\]
-- Floated grid containers in Blink (rego)
-- Fix computed style with distribution offsets (rego)
-- Place positioned items with vertical writing modes (rego)
-- Grid layout reviews (svillar)
-- Position resolution with auto-repeat tracks (svillar)
-- Auto-repeat tracks computation (svillar)
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Multicol / fragmentation is in a known good state. (mstensho)
-CSS Houdini
-- Last week was the Houdini face-to-face meeting. We didn't talk much
-about the CSS Paint API, it's reasonably stable. We did, however,
-spent about four hours talking about the CSS Layout API.
-(ikilpatrick)
-- Moving in a pretty good direction. The other vendors seemed pretty
-happy with the overall shape of the API. Plan to update the spec
-proposal in time for TPAC. (ikilpatrick)
-- Plan to work on the worklets spec this week, mainly on the security
-APIs. (ikilpatrick)
-- Start design doc for off-main-thread worklets. (ikilpatrick, flackr)
-Add API for layout \[[crbug.com/495288](http://crbug.com/495288)\]
-- Finishing up report on line layout API. (dgrogan)
-- Continued LayoutView/FrameView conversion. (pilgrim)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- Started working on design doc. Will share draft with team in a few
-weeks. (eae)
-CSS Containment \[[crbug.com/312978](http://crbug.com/312978)\]
-- One remaining issue arund interaction between contain: paint and will-
-change: transform. Will try to track down the root cause this week in
-preparation for shipping by default. (eae)
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Shipping in M51.
-Resize Observer (atotic)
-- Spent a day in SF selling Resize Observer to Mozilla, IE/Edge, and
-Safari. They seemed to like it, no major problems. Mozilla already
-filed a tracking bug. Plan to send out an Intent-to-Implement later
-this week. (aleks)
-- Have a pending implementation, working with szager to get memory
-management right with regards to lifetime and the oilpan GC. (aleks)
-Tables (dgrogan)
-- Microsoft working on updated CSS Table compatibility specification.
-- Made progress on a couple of table bugs, have a good handle on the
-root cause and will resume work this week. (dgrogan)
-Text (eae, drott, kojii)
-- Looked at an issue where we need to upconvert to the complex path on
-Android for small-caps font font-variant-numeric. (drott)
-- Continued android memory regression, trying to figure out where the
-extra memory is spent and why it only affects Android. Independently
-found the same issue that tzik and kojii identified where glyphs are
-double cached. (drott)
-- Added instrumentation for the glyph bounds cache. (drott)
-- small-caps and font-variant-numeric will ship in M52! (drott)
-- Resumed work on change to render unicode control characters in
-accordance to spec. (eae)
-Misc:
-- Discussed test strategy for blink wrt w3c and web-platform-tests.
-Learned about gecko process for keeping tests in sync. (jsbell)
-- Spent the last two weeks doing general block layout clean up and
-refactorings. Moving code and logic to where it makes more sense.
-(mstensho) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-4-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-4-2015/index.md
deleted file mode 100644
index fcaf58fcb33..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-may-4-2015/index.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-may-4-2015
-title: Monday, May 4, 2015
----
-
-Performance Tracking (benjhayden)
-
-- Trace viewer/rail perf work.
-
-- Layout Analyzer powered by UMA.
-
-Scrolling (skobes) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Improved unite tests for scrolling.
-
-- Removed m_inProgrammaticScroll scroll flag from FrameView.
-
-- Removed m_viewportLayoutObject from FrameView.
-
-Line Boxes (szager) \[[crbug.com/321237](http://crbug.com/321237)\]
-
-- Performance data looks a lot better, some micro benchmarks still show
-
-a slight regression but within error margin. Plan is to try to land
-
-this week.
-
-Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Discussions around absolut positioning within flexbox.
-
-- Updated handling of min-width/min-height.
-
-List marker refactoring (dsinclair)
-\[[crbug.com/370461](http://crbug.com/370461)\]
-
-- Found solution for subtree modification problem, CL up for review.
-
-(dsinclair)
-
-- Change to move layout tree modification from layout walk to
-
-NotifyChange. (dsinclair)
-
-Misc Warden (dsinclair, pilgrim)
-
-- Moved mustInvalidateBackgroundOrBorderPaintOnHeightChange from
-
-LayoutObject to LayoutBox and made it private. (pilgrim)
-
-- Made updateShapeImage, updateFillImages private. (pilgrim)
-
-- Renderer to LayoutObject rename almost done, only editing and paint
-
-remain. Yay! (dsinclair)
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- All known fuzzers fixed.
-
-- New multicol implementation landed today (r194883).
-
-Layout refactoring (esprehn, ikilpatrick, cbiesinger, ojan, leviw)
-
-- Meetings and discussion contined last week and this week. Plan is to
-
-have one or more concrete proposals by the end of BlinkOn.
-
-Logistics
-
-- Most of the team in Sydney next week for BlinkOn 4, many travel down
-
-this week.
-
-- No meeting next week (due to BlinkOn), send updates (if any) to eae. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-23-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-23-2015/index.md
deleted file mode 100644
index dc46b7add06..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-23-2015/index.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-november-23-2015
-title: Monday, November 23, 2015
----
-
-Big update this weeks as we didn't have a meeting during BlinkOn and I
-apparently forgot to send out notes for last weeks meeting.
-Updates since last meeting (on Monday, November 2nd):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Unified animation curves across Blink and CC. They now share the same
-curve. (skobes)
-- Looking into RTL scrollbar placement for root layer scrolling.
-(skobes)
-- Re-started work on root layer scrolling after focusing on smooth
-scrolling and bugs for a few weeks. (skobes)
-- Landed fix for scrollbar clipping, basically scroll containers should
-clip their scrollers but they don't. Chocking they didn't but now
-works as expected. (skobes)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Fixed a number of regressions relating to recent changes in behavior.
-(cbiesinger)
-- Spent some time not fixing a flexbox bug for a change, had to do with
-flexbox and scrollbars. cbiesinger came in and stole my thunder.
-Thank you :) (szager)
-- Fixed the release blocker szager was working on. Was investigating a
-different bug that turned out to be the same. (cbiesinger)
-- Fixed another release blocker, affecting google translate.
-(cbiesinger)
-- Moar release blocking bugs! (cbiesinger)
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- Simplified interface of GridResolvedPosition. (sergio)
-- Grid sizing under min|max constraints with implicit sizes. (sergio)
-- Added support for implicit grid before explicit grid. (rego)
-- Absolutely positioned items inside grid adjustments. (rego)
-- Landed a small refactoring of grid layout code. (rego)
-- Gave talk at BlinkOn 5 about recent work on grid layout and what the
-future holds. (javif)
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Bombing Levi with multicol patches as usual, and he's an unstoppable
-reviewing machine.
-- The way it looks now, we're one patch away from being ready to
-introduce multicol for printing. Hopefully, I'll file that patch today
-or tomorrow, and then add support for printing later this week. But
-we'll see...
-CSS Houdini (ikilpatrick)
-- Writing design doc for worklets, will circulate for feedback at EoW.
-- Custom line layout discussions and hack-a-thon in Tokyo two weeks ago,
-we came up with two proposals that we're refining and will prototype.
-(eae, shans)
-- Planning to re-implement ruby support on top of said API, got input
-from kojii and started experimenting. (eae)
-Standards work
-- Published 2nd CR of CSS Writing Modes Level 3. (kojii)
-- Published UTR#50 Unicode Vertical Text Layout revision 15, supporting
-Unicode 8.0. (kojii)
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Line layout, last patch got rid of it in LineText delayed due to
-conflicting advice and opinions. (pilgrim)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Plan to send Intent to Implement this week.
-- Have pending spec patch that needs to be upstreamed.
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Everyone understands how it should work but managing the lifetime of
-the objects are extremely hard is it involves relationships between
-two objects with very different documents and lifetimes. Makes it very
-tricky. You'd think oilpan would make it easier but so far it seems
-that the opposite is true. There is an obvious leak and it's not clear
-how to resolve that without having to do a lot of manual bookkeeping.
-Trying to figure out a way to make it work in an oilpan world, still
-not clear if that is even possible. Working with adamk to try to
-figure it out, getting closer but haven't nailed it yet. Similar to
-mutation observer in that it is really difficult not to leak. (szager)
-- Once lifetime management has been resolved the plan is to get it into
-the code base behind a flag. Then to have people give it a try and
-kick the tires while, at the same time, continue to spec work and then
-ship (unflag) early next year in beta, assuming spec work isn't
-delayed. (szager)
-Text (eae, drott, kojii)
-- Spent time helping drott investigate an emoji joiner issue on android.
-(workman)
-- Fixed emoji joiners on Windows. (drott)
-- Worked on regression due to the new shaping code where a secondary
-font wasn't loaded correctly. Turns out to be a copyright protection
-strategy used by some fonts. Used on
-[virginamerica.com](http://virginamerica.com/) and a few other
-high profile sites. (drott)
-- Wrote and test emoji complex path on Webview_shell, merged to M47 and
-M48 (Thanks to wkorman@ for sharing Android tricks and test phone),
-reached out to WebView TL in LON regarding final verification on the
-Beta build. (drott)
-- Investigated T-crossbar issue: woff2 or freetype hinting issue,
-[crbug.com/550523](http://crbug.com/550523). (drott)
-- Prepared CL for font code memory infra instrumentation, instrumenting
-word cache done, but larger remaining issue with tracking web font
-blobs down to SkTypeface. (drott)
-- Discussed deduplicating fallback font streams on linux with skia
-folks, fmalita@ added API to SkFontconfigInterface, which on closer
-inspection unblocks as, we can implement deduplication on Blink side
-[crbug.com/524578](http://crbug.com/524578). (drott)
-- Prepared harfbuzz roll, failed building on Mac, filed issue, fixed by
-behdad, new release expected. (drott)
-- Investigating Houdini custom line layout and ruby on top of it.
-(drott)
-- Investigating bidi-isolate by default for elements with dir attributes,
-working with WebKit, Gecko, Edge, and W3C I18N WG. (drott)
-- A few issues in bidi-isolate were found, working on them. (drott)
-- Changed the life time of ShapeCache instances and the logic for cache
-invalidation. Resulted in a massive layout speed up, more than
-offsetting the regression we saw on a few micro benchmarks following
-the switch to always use the complex text path. Unblocks the effort to
-ship complex-by-default. (eae)
-- Started looking into further tweaks to ShapeCache lifetime and
-invalidation, more work to be done. Should reduce memory usage. (eae)
-HTML Tables (dgrogan, jchaffraix)
-- Investigating table bugs with jchaffraix. Looking into an issue where
-there there are too many borders on our tables due to a bug in border
-collapsing. (dgrogan)
-- Helping dgrogan ramp up on tables. Here every Monday for that reason.
-He has one patch up, looking good! (jchaffraix)
-Bug Health
-- Both eae and jchaffraix spent a lot of time last week doing bug triage
-as per usual. Another two weeks or so should see our untriaged backlog
-go town to zero! Yay!
-- Total bug backlog, down by ~18%. If we keep this level of effort up we
-should be able to hit our goal of a 20% reduction by EoQ. (eae)
-Misc
-- skobes, drott, ikilpatrick, and javif presented at BlinkOn. All their
-sessions where well attended and very well received. Thank you!
-Videos should be available within a week or two. (eae)
-- Windows FixIt last week. (wkorman)
-- Presented at QConf and Chrome Dev Summit. (ikilpatrick)
-- Plan to get back to rebaseline bot on the bot this week. Looked into
-file-locked bug where we cannot delete files due to them being locked.
-Fun time untangling all the threads. (wkorman)
-- Start flipped blocks work as per outlined earlier! (wkorman)
-- Spent time last week working on a background image spriting bug that
-we've had forever. We didn't get around to fix it back when we
-implemented subpixel layout. Apple finally fixed it, in a way that's
-very different from how we're approaching it. Taking a lot of time to
-get things exactly right because we decide on the exact box to take
-before making a final snapping decision during layout. Have patch that
-is mostly ready, should be able to finish it this week. (leviw)
-- Looking at a crashing big in frame loader. (skobes)
-Logistic
-- Looks like a quite week with everyone back in their home office.
-- Short week in the US due to Thanksgiving (Thu-Fri off). \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-30-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-30-2015/index.md
deleted file mode 100644
index 43295238917..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-november-30-2015/index.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-november-30-2015
-title: Monday, November 30, 2015
----
-
-Updates since last meeting (on Monday, November 23rd):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Flag specific expectations for root layer scrolling landed. (skobes)
-- Have patch for RTL scrollbar placement, investigating custom scrollbar
-test failures. (skobes)
-- Smooth scrolling; working on main thread toggled, compositors driven
-animations, a little complicated but have a prototype. On track to hit
-OKR. (skobes)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Still problems with flexbox/scrollbars (need to add height of
-scrollbar to flex basis). Beed to sync with cbiesinger, original
-problem with devtools still exists. Need to figure out how to test and
-how to proceed. (szager)
-- Release blockers and misc flexbox bugs. (cbiesinger)
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Found out that support for column-span:all is really broken in nested
-fragmentation contexts. So that's what I'm currently working on. If I
-find nothing else after this, I'll then be ready to file the patch
-that adds support for printing multicol.
-CSS Houdini (ikilpatrick)
-- Working on design doc for worklets, will finish today and circulate.
-- Plan to finish up the worklet spec this week and started feeling out
-the, as of yet unnamed, new canvas spec (splitting RenderContext2D
-into discrete parts).
-- Start writing patches for worklets.
-Standards work
-- Preparing to upstream flexbox tests, we now have a version of check-
-layout that runs on top of testharness. (cbiesinger)
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- No update since last week.
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Plan to send Intent to Implement this week.
-- Have pending spec patch that needs to be upstreamed.
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- The memory model for intersection observer is really complicated,
-especially when multiple documents are involved. Still not sure about
-how it fits in with oilpan. Making solid progress but getting the
-memory model right is tricky and time consuming. (szager)
-Text (eae, drott, kojii)
-- Updated memory infra CL (tracking font related memory usage), had
-discussion with memory team. We might want to move some allocation to
-use partition alloc. (drott)
-- Verified ZWJ emoji android fix. (drott)
-- Started proparing cl for removing simple text, there are a few
-dependencies left, addressed two but still a few left. One on svg
-that might have perf impact. (drott)
-- HarfBuzz roll to 1.10, might want to backport to m48. (drott)
-- Improved cache key and invalidation logic for shape cache, should
-lead to reduced memory usage. (eae)
-- Fixed a bunch of text related ASSERT. (eae)
-- Always use complex text enabled on trunk. (eae)
-HTML Tables (dgrogan, jchaffraix)
-- Brain dump from jchaffraix to dgrogan continues.
-- Trying to figure out the madness that is border collapsing and come up
-with a plan. (dgrogan, jchaffraix)
-Bug Health
-- On track to not only meet but exceed bug health OKRs:
-- Reduced unconfirmed/untriaged bug count by 60% (690 down to 377),
-OKR is 50%.
-- Reduced total bug backlog by 16% (2310 down to 1927), OKR is 15%.
-- A lot of hard work by the entire team, thank you everyone! Let's
-keep this up!
-Misc
-- Worked on checked-layout.js that works with test harness, allows for
-upstreamable layout tests. (jsbell)
-- Added support for flag specific test expectations, will greatly aid in
-doing feature work and large refactorings going forward. (skobes)
-- Fixed CounterNode crasher. (eae) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-12-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-12-2015/index.md
deleted file mode 100644
index f4f3c68b120..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-12-2015/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-october-12-2015
-title: Monday, October 12, 2015
----
-
-Updates since last meeting (on Monday, October 5th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Misc root layer scrolling fixes. (skobes)
-- Plan to start working on smooth scrolling this week. (skobes)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Fixed height calculation to consider tallest column.
-- FIxed handling of minimum for fill available.
-CSS Grid Layout (svillar, jfernandez, rego)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week.
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- Reworked column rebalancing.
-- Fix handling for block pagination struts.
-- Changes to break handling.
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- API fixes fot SVG text chunk handling. (pilgrim)
-Text (eae, drott, kojii)
-- Fixed further selection painting bugs. (eae)
-- Fixed measurement for RTL list-markers where we reversed the
-text twice causing incorrect ordering and metrics. (eae)
-- Continued work on shaper driven segmentation, will start to
-land patches upstream this week. (drott)
-- Unprefixed CSS Writing Modes landed, working on some follow up
-fixes. (kojii)
-- Trying to better integrate CSS text code path with SVG text code
-path for vertical flow. (kojii)
-- Cleaning up tests in CSS WG and specs for coming CR. (kojii)
-Misc:
-- drougan started on his first bug, getting familiar with the
-Blink code base.
-- drott hit size and encoding limits in Skia test infra, working
-with them to resolve it.
-- Change in review for list marker spacing. (wkorman)
-- Lots of tracing, test case fiddling, and reading of code for
-WebViewImpl::layout xploring whether there are further layout/paint
-optimizations we can make. (wkorman)
-- Continuing work on documentation (deep dived into reflection to
-understand the design - <https://codereview.chromium.org/1391943005> +
-more PaintLayer documentation). (jchaffraix)
-- Mostly done documenting important objects (hopefully I could finish
-these this week), after that is deep diving into features (transform,
-paint invalidation, baselines...). (jchaffraix)
-Logistics:
-- eae & leviw in Helsinki to work with drott until Thursday.
-- cbisinger on vacation this Monday.
-- drougan back from recruiting trip. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-19-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-19-2015/index.md
deleted file mode 100644
index 202ad6a86ff..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-19-2015/index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-october-19-2015
-title: Monday, October 19, 2015
----
-
-Updates since last meeting (on Monday, October 12th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Fixed a regression from coordinated scrollbars. (skobes)
-- Made progress on getting RTL working with root layer
-scrolling (but still broken for various reasons). (skobes)
-- Fixed an issue where elements become unscrollable
-after an animation. (skobes)
-- Discovered the cc side of smooth scrolling has been totally
-broken for a while due to inner/outer viewport issues; ymalik
-has a fix pending. (skobes)
-- Working on getting unit tests passing with root layer scrolling
-turned on, long slog. Making progress. (szager)
-- Got the RTL issue (where the initial position of the scrollbar
-was incorrect for RTL frames) all about figured out, on to the
-next one. (szager)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Spent some time last week going through flexbox bugs, doing
-bug triage and fixing issues.
-- Discovered a couple of new fun bugs involving negative margins
-where the resulting flexbox could end up getting a negative size.
-Turns out the spec isn't clear on the correct behavior, working with
-tab and fantasi on getting it clarified.
-CSS Grid Layout (svillar, jfernandez, rego)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No updates since last week.
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- Working on the usual suspects; nested multicol, get it good enough for
-printing, and so on.
-- Also working on fixing a blocker regression pertaining to printing an
-overflowing flexbox inside a bottom-aligned fixed positioned box
-(in the Chrome UI). The fix is straight-forward (believe it or not), but
-I'm struggling with coming up with a LayoutTest. Looks like I'll have
-to fix the printing test framework first (or possibly even the engine itself).
-CSS Houdini (ikilpatrick)
-- Last week, working on the isolated worker spec which is a spec
-about a separate js exec context for all custom houdin stuff.
-- Focusing on the CSS Paint API spec this week.
-- Preparing for TPAC, will be there for the entire event. Will gladly
-bring up issues or concerns on behalf of others.
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Still working on the line layout api, going thgough layout svg,
-converting calls to go through the API. (pilgrim)
-- Got a couple of smaller patches in last week, working on a
-larger one this week. Probably about another two weeks of
-SVG api work remaining. (pilgrim)
-Text (eae, drott, kojii)
-- Share more code between SVG text and CSS text. (kojii)
-- Fixed fonts when lang attribute is set, investigation continues. (kojii)
-- Investigate inheritance of anonymous inline and partial fix. (kojii)
-- Pushing Writing Modes Level 3 to CR. (kojii)
-- Proposed Update of Unicode Vertical Text Layout (UTR#50)
-to publish soon. (kojii)
-- Working on line break spec issues with CSS WG and Unicode. (kojii)
-- Enabled complex text as experimental web platform feature, this
-results in _all_ text going down the complex text path. If it sticks the
-plan is to enable it for stable and then (eventually) delete the simple
-text code path (yay!). Required 90% of all layout tests to be
-rebaselined, due to problems with our tooling this mostly had to be
-done manually. (eae)
-- Fixed a bunch of ref-tests to make them more resilient against
-minute text rendering differences. (eae)
-- Speculative fix for a top windows crasher where fontMetrics is
-null during line height computation. (eae)
-- Working on getting shaper-drive-segmentation landed, very close
-now but a few issues remaining. Should land this week! (drott)
-Misc:
-- Have a batch of bugs around lists, selection gaps, and caret. (wkorman)
-- Meeting with joel about pick up running rebaseline bot. Will
-run it on interim basis. (wkorman)
-- Paint performance optimizations for slimming paint v2 where the
-compositor side of things wants to make use of rtrees, needs
-bounds of display items. Will change to accumulate during paint,
-should lead to a nice performance win. (wkorman).
-- We'll likely need to pull someone off their current project to help out
-with intersection observer, it's a top blink-level priority for the quarter
-and we need to make sure we make progress on it. (eae)
-Logistics:
-- jsbell gardening this week and helping out with cr-blink triage. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-5-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-5-2015/index.md
deleted file mode 100644
index de9cb11fbfc..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-october-5-2015/index.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-october-5-2015
-title: Monday, October 5, 2015
----
-
-Updates since last meeting (on Monday, October 5th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Landed change that enables coordinated scrollbars everywhere. (skobes)
-- Landed unit test fixes for root layer scrolling. (szager)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Worked on the flexbox layout tests, in the W3C repository. The W3C
-repository is the source of truth that we pull in periodically.
-- Misc flexbox bug fixes.
-CSS Grid Layout (svillar, jfernandez, rego)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- Reviewed several grid layout patches. (svillar)
-- Working on grid container height sizing when there are min|max
-content constraints and min|max height restrictions. The CL is
-ready for review after revamping the original design. (svillar)
-- min-width|height: auto fixes for vertical writing modes. (svillar)
-- Working on definite size detection for abspos items. (rego)
-- Fixed abspos items behavior with implicit lines and unknown named
-lines. (rego)
-- Content and self alignment fixes for spanning items. (jfernandez)
-- Implemented auto margin alignment for grid items. (jfernandez)
-- Added 0fr support for track sizes. (jfernandez)
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- Fixed pagination strut propagation for blocks.
-- Removed unused clearPaginationInformation from LayoutState.
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Landed two layout API changes that added a couple of methods missing
-form the API around scaling. (pilgrim)
-- Converted inline text box painters to not use the line layout api but
-also not call any methods on inline text box. (pilgrim)
-- Houdini spec preparation work, supporting style team. (leviw)
-Text (eae, drott, kojii)
-- Fixed selection painting on high-DPI where before we would clip the
-selection rect incorrectly causing thin white lines between certain
-words due to rounding. Removed clipping entirely as it is no longer
-needed in a post selection-gap-painting world. (eae)
-- Continued on layout tests failures for shaper driven segmentation,
-found issue in HarfBuzz relating to end of run handling for webfonts.
-Working with behdad to resolve it. (drott)
-- Discussion on blink-dev around custom text rendering by exposing
-access to fonts. (drott)
-- Will continue working on remaining issues for shaper driven
-segmentation this week. Outstanding questions around small caps
-handling. (drott)
-- Selection highlighting in vertical writing mode (ltr) relating to
-selection gap painting removal. (wkorman)
-Misc:
-- Fixed float stable blocker. (szager)
-- drougan looking for good starter bugs.
-- Working on test infrastructure for runtime enabled features to ensure
-that features are reset between test runs by auto generating the js
-hooks rather than having everyone roll their own. (wkorman)
-- Misc stable & beta blocker bugs. (leviw)
-Logistics:
-- eae & leviw in Oslo this week, visiting Opera and then head to
-Helsinki to work with drott early next week.
-- pilgrim on vacation Wed-Fri.
-- cbisinger on vacation next Monday.
-- drougan on recruiting trip rest of week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-14-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-14-2015/index.md
deleted file mode 100644
index 6bc0325ef22..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-14-2015/index.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-september-14-2015
-title: Monday, September 14, 2015
----
-
-Updates since last meeting (on Monday, August 31st):
-
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Landed flexbox change for overflow auto, it's causing a regression
-
-on Mac only in how scrollbars are pained. Hope to sync up with skobes
-
-about that today and resolve it. Other than that no problems and looks
-
-like it'll stick. (szager)
-
-- Landed change running a comb through the scorll bounds code. Should
-
-be pretty reliable for getting minimum and maximum scoll positions
-
-now, while it wasn't before. Likely to have fixed a bunch of off-by-
-
-one scroll bound bugs. (szager).
-
-- Intent to fix regreision and talk about next step for root layer
-
-scrolling with skobes this week. (szager)
-
-- sataya.m from Samsung has fixed almost all of the scrollbar tests,
-
-these are mostly related to custom scrollbars. (skobes)
-
-- Trying to figure out coordinated scrollbars this weeks, turn on for
-
-just the main frame and only for certain platforms. Would be nice to
-
-use this more broadly. (skobes)
-
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Need to re-think approach to deprecating sizing keywords due to leaks
-
-in CSS parser which resulted in the patch to be reverted.
-
-- Will sycn up with ojan re f2f. (cbiesinger)
-
-- At CSS face-to-face it was decided to standardize on chrome-impl of
-
-table fixup (i.e. not do it) which will save us some work. (ojan)
-
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-
-- No update since last week.
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- Fixed handling for unbreakable blocks at top of a column/page.
-
-- Updated handling of style changes to ensure they happen in tree order
-
-for multicol.
-
-- Fixed min-height to not have an effect if content is taller than
-
-multicol and height is set to auto.
-
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-
-- Still working on line layout api, down to some asserts and debug only
-
-code before we can get rid of the LayoutObject in InlineBox. (pilgrim)
-
-- API is as broad as it needs to be, has all the relevant methods,
-
-thinking about next steps. (pilgrim)
-
-Text (eae, drott, kojii)
-
-- Continued work on shaper driven segmentation: (drott)
-
-- Implemented an iterative approach so that for each font we can
-
-collect all segment supported by the font.
-
-- Started to work on system font fallback, with the font fallback
-
-iterator now also able to collect and fallback on system fonts.
-
-- Sent out mail about approach to modernazing system font fallback,
-
-on Windows 8.1+ and Mac there are sane fallback APS we could use.
-
-Android has a fallback XML file that is resonable and on linux
-
-fontconfig provides the necesarry information but returns way
-
-too many fonts. (drott)
-
-- Thinking about vertical text, needs reimplementaiton. One idea is to
-
-merge script iteartion with orientation. Trying to implement run
-
-segmenator which uses the script iteator and an orientation iteratior.
-
-Will continue workin on it this week. (drott)
-
-- Working on complex path blockers and recent regressions. (kojii)
-
-- Working on CJK font fallback issues. (kojii)
-
-- Updating CSS Writing Modes spec for resolutions from F2F. (kojii)
-
-- Investigating unprefix planning for Writing Modes. (kojii)
-
-- Writing Modes spec issues/edits, unprefix planning, and tests. (kojii)
-
-- Discussing with drott@ on run segmentation for vertical flow. (kojii)
-
-- Looking into high-priority fonts issues. (kojii)
-
-Misc:
-
-- Removed webkit linebox contained. (wkorman)
-
-- Happy about juliens documentation improvements. (wkorman)
-
-- Reverted patch to remove old containg block logic as it turns out it
-
-was still needed. Will revisit and try again with tests. (ojan)
-
-- Fixed handling of floats for blocks that establishes a new formatting
-
-context. (mstensho)
-
-- Fixed float margin logic to not collapse margins on page or column
-
-boundaries. (mstensho)
-
-Logistics:
-
-- leviw in Amsterdam for a Polymer summit, back on Thursday. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-28-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-28-2015/index.md
deleted file mode 100644
index 5d4bfbd48c4..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/monday-september-28-2015/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: monday-september-28-2015
-title: Monday, September 28, 2015
----
-
-Updates since last meeting (on Monday, September 14th):
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-- Getting closer to enabling coordinated scrollbars everywhere. Currently
-enabled everywhere on Mac and Android but only for the main frame on
-Windows and Linux. With these changes the main frame will no longer be
-a special case and will instead use the overflow scroll
-implementation. (skobes)
-- Have two patches out for review that change how we paint scroll
-arrows. Once those have landed we can turn on coordinated scrollbars
-on all platforms. (skobes)
-- Will spent some time doing bug triage this week. (skobes)
-- Looking to land patch to web scrollbar theme painter, starting to have
-a lot of dependent bugs, lots of of duplicate bug reports. (szager)
-- Leading space char clusterfuzz bugs. (szager)
-- Pushing forward to enable root layer scrolling for layout tests and
-starting to triage failures. (szager)
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-- Adding a use-counter for deprecated intrinsic sizing.
-- Fixing up css working group test suite for flebox, hope patches will
-be accepted/merged soon.
-- Import css test suite into layout test. Plan is that the css working
-group repository is the source of truth that we mirror periodically.
-- Plan to upstream some more of our tests.
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week.
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-- Multicol balancing refactoring (do it after layout). The multicol part
-of it has been ready for weeks, but before landing it, some changes to
-strut handling in the LayoutBlockFlow neighborhood are required. I've
-landed some simplification, clean-up and bugfixing CLs in the area on
-my way. Hopefully it's soon sensible enough to hold my changes without
-breaking under its own weight. (mstensho)
-- Still working on pagination strut rewrite. Want to get it right and as
-pretty as possible first before landing. (mstensho)
-Add API for layout (leviw, pilgrim, ojan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Landed several large line layout patches, after one that is pending
-review we will have gotten rid of all LayoutObject references in
-InlineTextBox, i.e. we'll use go through the API for all layout calls.
-(pilgrim)
-- Working our way up the hierarchy to get rid of the remaining calls not
-using the API in InlineBox. (pilgrim)
-Text (eae, drott, kojii)
-- Meeting with Docs team to discuss text metrics, line layout needs.
-(eae)
-- Working on fix for selection painting on high-DPI devices. (eae)
-- Meeting with Android team to discuss sharing text layout
-implementation or parts thereof. (eae)
-Misc:
-- Fixed a bug where the scrollWidth and scrollHeight where snapped
-differently than clientWidth and clientHeight. (leviw)
-- Working with Windows team on re-implementing our high-DPI support to
-use our full-page-zoom logic instead of specialized code in the
-compositor. Will allow for much better support for non-integer
-device scale factors, reduce code complexity and (finally!) allow us
-to snap to device pixels instead of CSS pixels. (eae)
-- Supporting houdini hackathon last week. (leviw)
-- Houdini/custom layout discussions. (shans, eae, leviw, kojii)
-- Landed change to disable selection gap painting! (wkorman)
-- Mac 10.10 baselines. (leviw)
-- Supporting work to enable color emoji on Windows. (eae)
-Logistics:
-- eae in NYC Wed-Sat. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-april-2-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-april-2-2015/index.md
deleted file mode 100644
index 79605f73813..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-april-2-2015/index.md
+++ /dev/null
@@ -1,327 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: thursday-april-2-2015
-title: 'Thursday, April 2, 2015: Q1/Q2 OKRs'
----
-
-Attendees: eae, slightlyoff, benjhayden, bnutter, cbiesinger,
-dsinclair, dglazkov, jchaffraixm, kojiim, nduca, skobes
-Graded Q1 OKRs: <http://www.chromium.org/blink/layout-team/okrs/2015q1>
-Q2 OKRs: <http://www.chromium.org/blink/layout-team/okrs/2015q2>
-Q1 Evaluation
--------------------
-\* eae presents draft document \*
-&lt;eae&gt; Let's go through our Q1 OKRs and see how we did and what we can
-learn.
-\[ Have telemetry benchmark suite running key_silk_cases monitoring
-layout times with less than 1% variation between runs \]
-&lt;eae&gt; Variation between runs is about 3% with the new layout_avg
-telemetry metric, down from about 10% for existing webkit performance
-tests. Scored at 0.6.
-&lt;benjhayden&gt; A way to reduce variance further would be to boost the
-signal ratio by doing a lot more layout. Not sure if that is the right
-thing to focus on. Perhaps we should focus on real world use cases
-instead. This might be as good as we can get the tolerance with the
-current setup.
-&lt;benjhayden&gt; Have started rewriting metrics to expose more
-information, this work will carry forward into Q2.
-\[ Add 3 real-world pages with lots of layout to key_silk_cases. At
-least two of which are mobile oriented \]
-&lt;eae&gt; Ben added two new, real world, tests. Score 0.7.
-&lt;benjhayden&gt; Perhaps we could add more polymer tests?
-&lt;eae&gt; The Polymer Topeka tests is great as it is representative of a
-real world app. Adding more like that could be useful but for now
-we're pretty good.
-\[ Speed up some key_silk_cases tests \]
-&lt;eae&gt; We speed up a couple of webkit performance tests by over 10%,
-most notably chapter-reflow and line-layout. We didn't manage to speed
-up layout in any of the key_silk_cases tests though. Score 0.0.
-&lt;jchaffraix&gt; No one owned the task, no one felt responsible and that
-might be way.
-&lt;benjhayden&gt; layout is already pretty fast
-&lt;dsinclair&gt; need to pick specific tests and have actionable goals
-&lt;jchaffraix&gt; lets talk about that for Q2 goals
-\[ Create a Measure API prototype and write-up of lessons learned \]
-&lt;eae&gt; We split this into text and element measure and have write-ups
-for both. Score 1.0.
-&lt;jchaffraix&gt; We probably scoped this too narrowly and achieved a 1.0.
-Should we have been a bit more ambitious?
-&lt;cbiesinger&gt; Could you add links to the write-up doc(s)?
-&lt;julien&gt; Will do.
-Note: Linked from graded Q1 OKR document;
-http://www.chromium.org/blink/layout-team/okrs/2015q1
-\[ Support natural layout animations (subpixel layout during animation) \]
-&lt;eae&gt; Work was abandoned and depriotitized. Score 0.0.
-&lt;jchaffraix&gt; Could you add some background as tho why it was
-depriotitized?
-&lt;eae&gt; Sure. It didn't seem worthwhile without perf guarantees from
-something like layout boundaries. Focused on work to improve line
-layout performance instead.
-\[ Finish root layer scrolling \]
-&lt;eae&gt; Steve made great progress here but didn't quite get to finish it
-at all. Score 0.5
-&lt;skobes&gt; Somethings worked, others didn't... Need another quarter to
-finish.
-\[ Move line layout to LayoutUnit \]
-&lt;dsinclair&gt; We're getting close, but haven't made the switch yet. We
-still need to look through all the test changes on Windows and see if
-there are problems or if we just need to rebaseline. Score 0.7.
-&lt;eae&gt; What about the performance problems Stefan found? Do we think it
-mostly from the convenience wrappers used to make the transition?
-&lt;dsincliar&gt; Not sure, Stefan has been focusing on that. I've been
-putting out other fires.
-&lt;eae&gt; Will follow up with Stefan (szager).
-\[ Triage all clusterfuzz asserts and fix 50% of them \]
-&lt;cbiesinger&gt; We didn't do a very good job on scoping, the goal was too
-ambitious. Score 0.2
-&lt;cbiesinger&gt; I switched focus to flexbox work half way through the
-quarter. Doing both in parallel might have been better.
-\[ Have bugs automatically filed for new clusterfuzz asserts \]
-&lt;cbiesinger&gt; Auto-filing doesn't make sense without triaging. Score 0.0
-&lt;cbiesinger&gt; All work is done, just needs to flip a switch.
-\[ Render tree modifications during layout \]
-&lt;dsinclair&gt; Looked at list markers specifically this quarter. Fixed
-all of the crashers just ran into one issue where moving a renderer
-further down tree causes issues. Score 0.7
-&lt;dsinclair&gt; Think I know the way forward, just need to do it. List
-marker work is close to done.
-&lt;dsinclair&gt; There are other parts that we haven't started looking at,
-like menus with only one item in them being a special case.
-&lt;dsinclair&gt; Menus on mac/linux/windows special case when there is only
-one item, has a single renderer. Android is different.
-&lt;dsinclair&gt; Next up, full screen. Julien was looking at it for awhile.
-&lt;eae&gt; Julien, do you want to give a quick update on full screen?
-&lt;jchaffraix&gt; I wrongly though someone has fixed a prerequisite bug for
-full screen. I spent some time doing tons of testing/rebaselining with
-the assumption we could land the change. Realized that we couldn't as
-the prerequisite bug wasn't fixed.
-&lt;jchaffraix&gt; Blocked on complex problem around re-attach. When
-toggling fullscreen you change state of render requiring re-attach
-which is problematic.
-&lt;jchaffraix&gt; Presto did work to save state when re-attaching to avoid
-restarting plugins when re-attaching. Presto re-attaches more than
-blink which prompted this.
-\[ Speed up complex text by a factor of 2 \]
-&lt;eae&gt; New goal added mid-quarter. We managed to speed up complex text
-by a minimum of over 2 and up to 40x in some cases. Score 1.0
-&lt;eae&gt; We might have been a bit too conservative here, we'll correct that
-for Q2!
-Non-OKR tasks
------------------------
-&lt;eae&gt; Let's talk about tasks we spent significant amounts of time on
-that was not covered by our OKRs.
-From draft doc:
-- rendering/ -&gt; layout/ move and renaming
-- bidi bugs
-- mac text rendering follow up
-- security bugs
-- updating flexbox to latest version of spec
-- import w3c flexbox tests
-- css writing mode tests
-- win_blink_rel deflaking
-&lt;eae&gt; A few of those, like the rendering -&gt; layout rename and the
-win_blink_rel work should probably have been added to the OKRs mid
-quarter.
-&lt;eae&gt; We cannot plan for the unexpected but if we have unforeseen work
-that we expect to continue we should consider adding it mid-quarter to
-the list.
-&lt;jchaffraix&gt; Did we miss anything?
-\* silence \*
-&lt;eae&gt; I guess the silence means we have agreement, let's move on.
-Q2 OKR Planning
-------------------------
-\[ O: Gain insight into real world layout performance. \]
-\[ KR: Have a report characterizing layout performance for all layout
-scenarios. - benjhayden \]
-&lt;eae&gt; Could you explain what we mean by layout scenarios?
-&lt;benjhayden&gt; That is part of the goal, we know load layout is
-different from animation layout and incremental layout. Yet both can
-do a lot of the same work. We're still trying to figure out what it
-means.
-&lt;jchaffraix&gt; Is this layout classes? Load vs animation?
-&lt;benjhayden&gt; There are different types of animation layout, think
-moves vs gets taller. Most layouts are a mix of many types, there is a
-lot to figure out. It is a bit ill-defined at the moment.
-&lt;dsinclar&gt; Could you add some words to make that more clear? Wasn't
-obvious what it meant, I thought it was layout classes.
-&lt;benjhayden&gt; That is part of it, we need to know what is text layout
-vs block, load vs incremental etc. Lots of work to define.
-&lt;jchaffraix&gt; This needs better wording.
-&lt;dsinclar&gt; Should we split it into two KRs? One for moving on page,
-other for what we call layout classes in blink?
-&lt;jchaffraix&gt; We don't know the granularity.
-&lt;eae&gt; Having a report split on a couple of different axis would be
-useful, we don't know what the axis are yet though so being more
-specific is hard.
-&lt;benjhayden&gt; Having a report is a good key result, figuring out how to
-present the data is part of the objective.
-\[ O: Improve high-level layout design. \]
-\[ KR: Have design document for grand node measure refactoring. \]
-\[ - jchaffraix \]
-\[ KR: List markers not modifying layout tree during layout (in dev). \]
-\[ - dsinclair \]
-\[ KR: Initial implementation of menu item not modifying layout tree
-during layout (in canary). -dsinclair \]
-&lt;jchaffraix&gt; For those that haven't been following along, we've
-started talking about element measure and display outside/inside. Both
-requires changes to how we handle the tree during layout in
-significant ways. Wondering if we have to do this work up front to
-support other goals or we can make the architecture better as we go
-along.
-&lt;eae&gt; This unblocks further work down the road, things in pipeline now
-and things we want to do in the future.
-&lt;jchaffraix&gt; Still early on, we're coming up with a broad proposal.
-&lt;dsinclar&gt; I'd like to better understand the use cases for people that
-ask about containment vs measure.
-&lt;jchaffraix&gt; I'll share a document with use cases.
-&lt;jchaffraix&gt; The KR here is to come up with a design document, guided
-by the vision that we're still trying to define.
-&lt;jchaffraix&gt; It might require that we remove all of the instances
-where me modify the tree during layout.
-&lt;bnutter&gt; This KR has a lot of owners, each one should have a single
-person responsible for keeping track/be in charge.
-&lt;eae&gt; Good point, first one listed is in charge.
-&lt;jchaffraix&gt; I'm in charge of the design document one.
-\[ O: Support standards efforts. \]
-\[ KR: Ensure that custom layout spec is compatible with our vision. \]
-\[ - jchaffraix, eae \]
-\[ KR: Ensure that text measurement spec is compatible with our vision. \]
-\[ - eae \]
-&lt;eae&gt; These KRs are poorly worded, are about staying involved in the
-process and making sure that the spec stays compatible with our goals
-and that we can/want to implement them.
-&lt;slightlyoff&gt; Who is in charge for the text measurement one? You Emil?
-&lt;eae&gt; Yeah, text is on me.
-&lt;slightlyoff&gt; Great, then I'm not worried.
-&lt;bnutter&gt; This isn't really measurable.
-&lt;slightlyoff&gt; Having a public github repo and discussion with other
-vendors might be a better goal?
-&lt;eae&gt; Makes sense to me.
-&lt;slightlyoff&gt; Will be a demonstration.
-&lt;dgalzkov&gt; As I understand it this is about us trying to be good
-sports, clearing the way for houdini spec work.
-&lt;eae&gt; Right, it is a bit hard to define what false on us vs houdini
-and the other teams though.
-&lt;bnutter&gt; I'm not concerned about who owns it. It doesn't have to be
-an OKR, not all work you do needs to be. Writing a spec would be a
-good goal but that doesn't seem to be what this is about.
-&lt;eae&gt; Some very good points, this might not make sense as a set of
-explicit goals. Let's talk about it offline and move along.
-\[ O: Improve capabilities of the web platform.
-\[ KR: Have an experimental out-of-tree node measure API. - jchaffraix \]
-&lt;eae&gt; This might be a little bit too ambitious, might be blocked by
-the high-level design re-architecture work.
-&lt;jchaffraix&gt; The Q1 goals where scoped too narrow in this regard, I
-think it is doable and want us to have stretch goals.
-\[ O: Rationalize text rendering. \]
-\[ KR: Make complex text as fast as simple text. - eae, szager, kojii \]
-\[ KR: Remove the simple text code path. - eae, szager, kojii \]
-&lt;eae&gt; Now this is a very ambitious set of goals, complex text is about
-seven (7) times slower than complex at the moment.
-&lt;eae&gt; Go big or go home, right?
-&lt;cbiesinger&gt; Is this about making Arabic as fast as English?
-&lt;eae&gt; No, it is about making English text going down the complex path
-as fast as the same English text going down the simple path.
-&lt;cbiesinger&gt; Ok, sounds more doable.
-&lt;eae&gt; Still a ton of work and in practice this will significantly
-narrow, if not completely close, the gap between scripts. Performance
-will be more about whether ligatures are used or not. English can use
-ligatures.
-\[ O: Improve code health. \]
-\[ KR: Move line layout to LayoutUnit. - szager, dsinclair \]
-\[ KR: Finish root layer scrolling. - skobes \]
-\[ KR: Fix 30% of clusterfuzz asserts. - cbiesinger \]
-\[ KR: Ensure that bugs get automatically filed for clusterfuzz
-asserts. - cbiesinger \]
-&lt;eae&gt; Dan, do you want to take this one?
-&lt;dsinclair&gt; Sure. As for line layout this KR is about finishing the
-work we are doing now - carrying the Q1 goal forward.
-&lt;skobes&gt; For root layer scrolling it is mostly things we are already
-doing.
-&lt;jchaffraix&gt; Sounds good. Moving on to clusterfuzz, is this work we
-want to be doing? Should we continue with it?
-&lt;eae&gt; I'm not sure.
-&lt;cbiesinger&gt; Are you talking about stopping the work to fix asserts?
-&lt;jchaffraix&gt; Is this work something we as a team thing is really
-important? If not we should focus on broader team goals. Perf,
-developer productivity and code health.
-&lt;cbiesinger&gt; Debug builds are unusable due to assertions, hampers
-developer productivity. Many of the asserts might be real bugs that we
-don't know about.
-&lt;jchaffraix&gt; We might have bigger fish to fry?
-&lt;christan&gt; I want to keep doing it and think it is important. Perhaps
-not at the highest priority?
-&lt;dsinclair&gt; How about we drop fix 30% goal and file bugs for asserts
-then fix them ad-hoc?
-&lt;christan&gt; Good idea.
-&lt;eae&gt; Sounds reasonable, I agree with Christian that it is important
-and work we should be doing. Having Christian do all the work himself
-and in bulk is not a good use of his time though.
-\[ O: Improve web compatibility.
-\[ KR: Update flexbox implementation to match latest version of
-specification. - cbiesinger \]
-&lt;dglazkov&gt; We should think about interoperability as function of
-productivity, we need to thing about how much time a developer spends
-on something like flexbox interoperability between implementations.
-&lt;jchaffraix&gt; I raised the same problem, web compat can or cannot be
-out of scope depending on impact on developer productivity. How do we
-prioritize web compat vs other things we want to do.
-&lt;cbiesinger&gt; I want to continue with flexbox spec changes, think they
-are important. Firefox and IE are mostyl compatible now, we're very
-different.
-&lt;eae&gt; The other vendors are compatible, we are not. This makes life
-hard for developers. I think this is really important, especially
-since flexbox is one of the flagship layout primitives that we're
-trying to push developers towards.
-&lt;jchaffraix&gt; Sounds reasonable, just wanted to have the discussion.
-&lt;eae&gt; I'm glad you bought it up, that is one of the key reasons we're
-having these meetings.
-\[ KR: Import w3c test suites. - cbiesinger \]
-&lt;jchaffraix&gt; Could you explain this one Christian?
-&lt;cbiesinger&gt; Relatively easy to do right now, we have a script that
-does it. Need to figure out what to do about failing tests.
-&lt;cbiesinger&gt; Perhaps we should just import with failures and add to
-TestExpectations?
-&lt;eae&gt; Josh might work on this so it could be out of scope for us. We
-should sync up with him and his team.
-\[ KR: Improve CJK vertical text support - kojii \]
-\[ internal discussion, redacted \]
-\[ KR: Raise the “Passed” rate of CSS Writing Modes Level 3 - kojii \]
-&lt;eae&gt; Do you want to talk about writing mode as well?
-&lt;kojii&gt; We do worse than most browsers, see
-http://test.csswg.org/harness/results/css-writing-modes-3_dev/grouped/
-- webkit is 82%
-&lt;cbiesinger&gt; Is WebKit Blink?
-&lt;kojii&gt; We've asked the working group to split it, for now the WebKit
-number mostly means Blink.
-&lt;jchaffraix&gt; What would this work entail? We need something we could
-measure.
-&lt;kojii&gt; Firfox is behind a flag, should launch soon. IE we have not tested
-much.
-&lt;eae&gt; Do we want to support all? What would be a good goal to aim for
-here? Specific properties we want to support? Increase the number by a
-couple of percentage points?
-&lt;jchaffraix&gt; Is unclear. How much are we passing right now?
-&lt;jchaffraix&gt; Never mind, found it. We're at 80.
-&lt;kojii&gt; We used to be at 60, in Q1 i raised it to 80.
-&lt;jchaffraix&gt; Should we aim for 100?
-&lt;kojii&gt; Coverage goes down as tests gets add. Is 85% too conservative?
-\[ internal discussion, redacted \]
-&lt;eae&gt; Makes sense. Let's aim for 85.
-\[ KR: Build the plan to support updated Unicode Bidirectional \]
-\[ Algorithm - kojii \]
-&lt;eae&gt; Updating the UBA is something that we've been punting for years,
-the i18n team is really pushing for it.
-&lt;kojii&gt; Top priority for BIDI team.
-&lt;eae&gt; Will be a lot of work given that we have a custom version for
-speed. Whether we update our custom one or improve the performance of
-the new one it'll be a lot of work.
-&lt;kojii&gt; Need to investigate, goal is to have a plan.
-&lt;julien&gt; So the deliverable is to have a plan, not to do the work?
-&lt;eae&gt; Yes. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-june-4-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-june-4-2015/index.md
deleted file mode 100644
index 22b8424bb84..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/thursday-june-4-2015/index.md
+++ /dev/null
@@ -1,265 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: thursday-june-4-2015
-title: 'Thursday, June 4, 2015: Mid-Q2 OKR Check-in'
----
-
-Attendees: eae, cbiesinger, dsinclair, jchaffraix, nduca, skobes, szager
-
-Q2 OKRs: <https://www.chromium.org/blink/layout-team/okrs/2015q2> (updated
-
-with latest status, as is overview at team landing page
-
-<https://www.chromium.org/blink/layout-team/>)
-
-Q2 Mid-quarter check-in
-
------------------------
-
-&lt;eae&gt; Good morning/day/afternoon everyone. We're half way through the
-
-quarter so I figured a check-in was in order to see where we
-
-stand.
-
-&lt;eae&gt; Let's go through our list of key-results and see whether we're on
-
-track to achieve them by the end of the quarter.
-
-\[ Have a report characterizing layout performance for all layout \]
-
-\[ scenarios \]
-
-&lt;eae&gt; Ben isn't here this morning, I'll follow up with him offline.
-
-\[ Have design document for grand node measure refactoring \]
-
-&lt;jchaffraix&gt; So the grand node refactoring has been superseded by Moose.
-
-Moose has some design to it but not a finished design doc.
-
-&lt;jchaffraix&gt; I don't really know how we want to scope that. Or if we
-
-should just ignore it.
-
-&lt;eae&gt; I think it's fair to say that the grand refactoring has been
-
-superseded by Moose. At the same time the scope has also increased
-
-dramatically.
-
-&lt;jchaffraix&gt; We have early design ideas for Moose. Need to split it up
-
-into concrete proposals and sync up with esprehn and ojan. They took
-
-over the project when I went of vacation and ran with it, need to
-
-reclaim it and come up with a plan.
-
-&lt;eae&gt; The first phase of the moose work, to create an API, is
-
-relatively well defined, uncontroversial and limited in scope.
-
-&lt;jchaffraix&gt; The whole idea behind doing the API first is to avoid the
-
-hard questions about differences of opinion relating to the strategy.
-
-&lt;eae&gt; Yes. We need to figure that out but this is not the time nor the
-
-venue. We need to discuss this, with all stakeholders, prior to setting
-
-the Q3 OKRs.
-
-&lt;nduca&gt; Everyone should be there when we talk about it.
-
-&lt;jchaffraix&gt; Moose is more than required, lets continue this discussion
-
-offline and with all the relevant people.
-
-\[ List markers not modifying layout tree during layout (in dev). \]
-
-&lt;dsinclair&gt; Done!
-
-&lt;eae&gt; Awesome!
-
-&lt;dsinclair&gt; It's in beta even.
-
-&lt;dsinclair&gt; Turns out it _just_ missed beta, it's in dev though.
-
-&lt;eae&gt; That was the goal though, you're golden.
-
-\[ Initial implementation of menu item not modifying layout tree during \]
-
-\[ layout (in canary) \]
-
-&lt;dsinclair&gt; Done, also in dev.
-
-&lt;eae&gt; You're on fire! What are you going to do the rest of the quarter?
-
-&lt;dsinclair&gt; Code reviews. Tons of code reviews.
-
-\[ Have an experimental out-of-tree node measure API. \]
-
-&lt;jchaffraix&gt; This is from before I left on vacation. We want to push it
-
-out of the roster, not a priority any more. Gated on refactoring work.
-
-&lt;jchaffraix&gt; We have a prototype and a design but stopped working on it
-
-to focus on refactoring work.
-
-&lt;eae&gt; So we decided to focus on the broader scope refactoring work
-
-instead of the limited out-of-tree measure implementation?
-
-&lt;jchaffraix&gt; Yes, there where also concerns about supporting the API in
-
-the future given the narrow use cases for it. Not necessarily worth the
-
-complexity.
-
-&lt;eae&gt; Let's revisit this at the end of the quarter.
-
-&lt;jchaffraix&gt; Ok.
-
-\[ Update flexbox implementation to match latest version of \]
-
-\[ specification \]
-
-&lt;cbiesinger&gt; Some parts done, some parts to be done.
-
-&lt;eae&gt; On track?
-
-&lt;cbiesinger&gt; Should be possible to finish before EoQ.
-
-&lt;ndcua&gt; Did we make any progress on debugging?
-
-&lt;cbiesinger&gt; Haven't heard anything about it.
-
-&lt;nduca&gt; Can you follow up, the new behavior is really hard to debug (for
-
-web developers).
-
-&lt;cbiesinger&gt; I'm not quite sure how to shove it into the inspector.
-
-&lt;nduca&gt; Not super important but a nice side narrative and it might be a
-
-fun project. Would be be great for users.
-
-&lt;cbiesinger&gt; Agreed, not sure where to start though.
-
-&lt;nduca&gt; Only if you want to. Entirely up to you. Work with dev tools
-
-team and nudge them in right direction. No need to do any UI work.
-
-&lt;cbiesinger&gt; I'll put it on my todo list to reach out to the dev-tools
-
-team and expose the information.
-
-\[ Improve CJK vertical text support \]
-
-&lt;eae&gt; kojii isn't here which is understandable given that it's 2am in
-
-Tokyo at the moment. I'll follow up with him this afternoon.
-
-\[ Make complex text as fast as simple text \]
-
-&lt;eae&gt; So this is on me. I have a plan and have started working on it.
-
-Still think I'll be able to get the complex path to be at least as fast
-
-as the simple one by the end of the quarter, will by close though.
-
-Involves changing how we cache things are reducing repetitive and
-
-redundant work.
-
-\[ Remove the simple text code path \]
-
-&lt;eae&gt; This is obviously gated on the previous goal of getting complex
-
-text to be as fast as simple text. We're quickly running out of time
-
-this quarter so this is at risk of slipping. We should be able to at
-
-least have a flag to disable it but removing it entirely seems a bit
-
-optimistic at this point.
-
-\[ Build the plan to support updated Unicode Bidirectional Algorithm \]
-
-&lt;eae&gt; Also on kojii, will fallow up online.
-
-\[ Raise the “Passed” rate of CSS Writing Modes Level 3 to 85% \]
-
-\[ including new tests. \]
-
-&lt;eae&gt; Also on kojii, will fallow up online.
-
-\[ Move line layout to LayoutUnit \]
-
-&lt;szager&gt; Done!
-
-&lt;eae&gt; Want to expand on that?
-
-&lt;sazager&gt; No. It's in dev and so far it looks good.
-
-&lt;eae&gt; Congratulations and well done!
-
-\[ Finish root layer scrolling \]
-
-&lt;skobes&gt; Making good progress, with sazager helping out it should be
-
-possible to get pretty close to finish it this month.
-
-&lt;eae&gt; Any new unforeseen problems? It's grown in scope quite a bit since
-
-it started.
-
-&lt;skobes&gt; Nothing too major, just a lot of work.
-
-\[ Ensure that bugs get automatically filed for clusterfuzz asserts \]
-
-&lt;cbiesinger&gt; Done.
-
-&lt;eae&gt; Awesome.
-
-Wrapping up
-
------------------------
-
-&lt;eae&gt; Looks like we're on track or even ahead of the curve for the
-
-majority of our objectives. Well done everyone! Perhaps we need to have
-
-a bit more ambitious goals for Q3?
-
-&lt;eae&gt; Speaking of which, it would be great if everyone could start
-
-thinking about what they want to do next and what you want to work on
-
-for the next quarter or two.
-
-&lt;eae&gt; We have a big list of our backlog and potential projects at
-
-<https://www.chromium.org/blink/layout-team/potential-projects>, please
-
-add projects and tasks you think are missing and see what you think we
-
-should focus on next.
-
-&lt;eae&gt; We'll have a Q3 planning discussion in a few weeks.
-
-&lt;eae&gt; Any questions about our OKRs or concerns that we need to talk
-
-about?
-
-\* silence \*
-
-&lt;eae&gt; Thanks everyone! \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-february-16-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-february-16-2016/index.md
deleted file mode 100644
index a4b662e9be4..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-february-16-2016/index.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: tuesday-february-16-2016
-title: Tuesday, February 16, 2016
----
-
-Updates since last meeting (on Monday, February 8th):
-Scrolling (skobes, szager)
-- Working on scroll anchoring, investigating a crash where it looks
-we're holding stale pointers. (skobes)
-\[[crbug.com/558575](http://crbug.com/558575)\]
-- Smooth scrolling is under control one outstanding bug where
-we're not handling the interaction between man and cc correctly. (skobes)
-- Started looking at a scrollbar-renders-weirdly
-bug, most likely it's the compositor pointing to a stale Scrollbar,
-no fix yet. (szager) \[[crbug.com/553860](http://crbug.com/553860)\]
-CSS Flexbox (cbiesinger)
-- Have quite a few release blockers. All the same issue, related to
-autoflow auto. Finally figured it all out. Stefan made a change to delay
-overflow calculation to fix a scrollbar bug awhile ago. It turns out the
-fix wasn't quite correct in regards to flexbox Working on a better
-implementation of. Going to make a patch to do that and then to clear
-the flexbox main cache which should be the right approach.
-Specifically, flexbox has code, actually in LayoutBlock used for
-flexbox, that handles overfow auto is after layout, called something
-like updateOverflorAfterLayout. That then checks if we overflow and if
-auto then adds scrollbars and triggers another layout. But if flexbox
-we don't do it for every flexbox change as that wouldn't work for
-nested flexboxes, we delay until after last flex. The new fix is to
-do relayout without updating the cache for the flebox.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- No update since last week -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No update since last week -
-CSS Houdini (ikilpatrick)
-- Last week was working on Worklet stuff, working with AudioWG to see
-how it interacts with audioWorklet and their needs.
-- This week will start on PaintRenderingContext2d, which is the subset
-of canvas for custom paint.
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Removed remaining uses of deprecated InlineBox::layoutObject()
-accessor and made it private. (dgrogan)
-- Had to add many methods to the API. (dgrogan) :(
-- Started removing uses of shim-like LayoutObject\* LineLayoutItem::
-operator(). (dgrogan)
-- Started working on next part of api work, have a little like starter
-patch out, just need to hit CQ button. (leviw)
-- Going to work on a poof of concept work to see if we can build
-LayoutNG and have it co-exitst with and interact with our current
-layout code. Will do work on branch but in public. (leviw)
-- Have a patch out for for LineLayoutTextSVG class. Dave identified as
-necessary, working through Levi's feedback. (pilgrim)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- Style containment landed this morning, yay!
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Trying to get the spec solid so we can get feedback from other
-browser vendors. Getting other browsers on board is going to be the
-long pole in shipping. (szager)
-- Probably not going to make M50. Spec work needs to occur. Not getting
-reviews as quickly as I'd like. (szager)
-Text (eae, drott, kojii)
-- Fixed orthogonal writing mode issue, working on following fixes.
-(kojii)
-- Support accept-language in font fallback for Windows and Android.
-(kojii)
-- Investigating snap-height property. (kojii)
-- Investigated Chrome's coverage of font-variant-\* sub properties. Only
-font-variant-ligatures supported, the rest rather looks like CSS 2.1.
-Filed bugs about font-variant being in a state of a very old version
-of the spec. (drott)
-- Experimented and started a true small-caps implementation (non-
-synthesized), checked for AAT small-caps feature in fonts on Mac.
-(drott)
-- Sent Intend to Implement for font-variant-caps. (drott)
-- Review of Koji's multi-locale font-fallback Android CL. (drott)
-- Working on an issue involving the handling of combining emoji (two or
-more emoji joined together with a zero with joiner) where the metrics
-cache has incorrect measurements causing extra line wrapping. (eae)
-- Various layout release blockers. (eae)
-HTML Tables (dgrogan)
-- Fixed regression around width:50% handling for tables.
-\[[crbug.com/244182](http://crbug.com/244182)\]
-- Fix incorrect handling of percentage heights inside table cells,
-cased a small issue for hangouts but got them to fix it on their end.
-\[[crbug.com/353580](http://crbug.com/353580)\]
-- Fixed a renderer crash. \[[crbug.com/570139](http://crbug.com/570139)\]
-Misc
-- Next week or two will take stab at flipped blocks approach.
-News at 11! (wkorman)
-- Correctness fix for paint performance with regards to VisibleRect. We
-added VisibleRect which is used for paint performance, not yet live.
-VisibleRect is essentially the CullRect but in the space of the
-backing graphics layer. Needed for CC interaction. It didn't correctly
-handle subpixel accumulation before. (wkorman)
-- Tons of release blockers (leviw), will try to rebalance. (eae)
-- Beginning to look at forced layout, (potentially reducing time spent
-in forced layout / number of forced layouts). (cbiesinger)_
-Logistics
-- drott going to Tokyo on Thursday. drott/kojii/behdad plus people from
-Mozilla meeting for a text workshop. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-june-16-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-june-16-2015/index.md
deleted file mode 100644
index b16aa81888d..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-june-16-2015/index.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: tuesday-june-16-2015
-title: Tuesday, June 16, 2015
----
-
-We had Sergio Villar (svillar@igalia.com) from Igalia join us this week.
-
-Sergio is a long term contributor working primarily on CSS Grid Layout.
-
-Updates since last meeting (on Monday, June 8th):
-
-Scrolling (skobes, szager) \[[crbug.com/417782](http://crbug.com/417782)\]
-
-- Fixed hit testing by making the LayoutView absolute-positioned.
-
-(skobes) \[crbug.com/495856\]
-
-- working on HitTestRequest::IgnoreClipping
-\[[crbug.com/499053](http://crbug.com/499053)\]
-
-and the zoomed-out viewport issue.
-
-CSS Flexbox (cbiesinger) \[[crbug.com/426898](http://crbug.com/426898)\]
-
-- Continuing to update to match spec, progress according to plan.
-
-CSS Grid Layout (svillar) \[[crbug.com/79180](http://crbug.com/79180)\]
-
-- Fixed a regression caused by the recent migration from parenthesis
-
-to brackets.
-
-- Working on adding a new step to the track sizing algorithm.
-
-- We need to find someone to help with grid layout reviews to unblock
-
-further work.
-
-Region-based multi-column support (mstensho)
-\[[crbug.com/334335](http://crbug.com/334335)\]
-
-- Fixing multicol fuzzers. Looks like the fuzzer storm has finally
-
-calmed down this week.
-
-Isolate core/fetch (japhet) \[[crbug.com/458222](http://crbug.com/458222)\]
-
-- Improved API between core/fetch and the rest of core.
-
-- A bunch of small crash/use-after-free fixes.
-
-Text (eae, kojii)
-
-- Fixed a long-standing issue in positioned objects layout ordering.
-
-(kojii)
-
-- Unicode variation selectors support in progress, waiting for reviews.
-
-(kojii)
-
-- Investigating orthogonal writing modes issues. (kojii)
-
-- Investigating abspos issues in vertical flow. (kojii)
-
-- Investigating/triaging failures of imported CSS Writing Modes tests,
-
-also working with external contributors to fix in upstream. (kojii)
-
-- Working on CSS Writing Modes spec issues, primarily to simplify rarely
-
-used features. (kojii)
-
-- Working on shaping word-by-word, initial prototype shows very
-
-promising results. (eae)
-
-Misc
-
-- Added option to dump line box tree when dumping layout tree. (szager)
-
-Layout Bugs:
-
-We currently have 1592 open bugs for the Cr-Layout label.
-
-- Untriaged: 475
-
-- Priority 0: 0
-
-- Priority 1: 135
-
-- Priority 2: 958
-
-- Priority 3: 19
-
-We need to get the number of bugs down so from now on each weekly update
-
-will include the number of bugs for each category and the delta from the
-
-week before.
-
-Logistics:
-
-- skobes OOO 6/17-6/22
-
-- drott getting up to speed.
-
-- szager OOO next week.
-
-- drott OOO Thu-Fri this week.
-
-- eae gardener Wed-Thu next week. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-march-15-2016/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-march-15-2016/index.md
deleted file mode 100644
index a04ae37d593..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-march-15-2016/index.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: tuesday-march-15-2016
-title: Tuesday, March 15, 2016
----
-
-Updates since last meeting (on Monday, March 7):
-Scrolling (skobes)
-- Fixed a smooth scrolling RTL bug and a smooth scroll text selection
-bug.
-- Fixed how we reset state between layout tests.
-- Reached out to conops and came up with a plan to monitor and address
-user feedback and concerns.
-- This week, working through a few minor smooth scrolling bugs.
-- Plan to resume work on scroll anchoring, getting it to work correctly
-with different position attributes.
-CSS Flexbox (cbiesinger)
-- Been working on flexbox, big surprise, turns out that when I through I
-had finally fixed all the scrolling issues I had not, in fact, fixed
-all the scrolling issues. \*collective expression of sadness\*
-There are a number of new regressions and release blockers that I'm
-working to burn down. The bug that keeps on giving.
-- Almost done with percentage children, patch out for review.
-CSS Grid Layout (svillar, jfernandez, rego, javif)
-\[[crbug.com/79180](http://crbug.com/79180)\]
-- See mail to blink-dev for an update on Grid -
-CSS Multi-column (mstensho) \[[crbug.com/334335](http://crbug.com/334335)\]
-- No update since last week -
-CSS Houdini
-- Devtools for main thread worklets. (ikilpatrick)
-- Landed initial paint() function, (this does nothing, just parsing
-code). (ikilpatrick)
-- Plan to finally send out the patch for PaintRenderingContext2D for
-review. (ikilpatrick)
-- Might get to the Paint API class/instance management CL. (ikilpatrick)
-- Started making progress on resize observer. (atotic)
-Add API for layout (leviw, pilgrim, dgrogan)
-\[[crbug.com/495288](http://crbug.com/495288)\]
-- Layout API skeleton is done, looks like a bigger project than we
-thought. LayoutView alone has over 100 references that need
-converting. Have started migrating first HTML element class to serve
-as a template for future work. (pilgrim)
-LayoutNG \[[crbug.com/591099](http://crbug.com/591099)\]
-- We're doing a prototype for layoutNG inside of out current layout
-engine. Part of the motivation here is to address big architectural
-issues in the layout engine itself and part of it is to support the
-houdini effort to implement custom layout. Shoehorning custom layout
-into out existing legacy layout would be very hard and require a lot
-of hacks and isn't really something we want to do. Especially since we
-already know that our layout architecture needs quite a bit of work.
-Essentially we're trying a new approach to achieve many of the goals
-identified during the big layout refactoring discussion (a.k.a. Moose)
-last year.
-What we're trying to see is if embedding layoutNG within the legacy
-system is practical, determining whether we can support both in
-parallel and use the new system for certain sub-trees.
-Made more progress than expected, have a prototype that builds and
-supports very basic block layout and paints. Will keep working for the
-rest of the week, should have data to share by the end of the week.
-Work is on a [chromium.org](http://chromium.org/) experimental branch, see bug
-for URI.
-(leviw, dgrogan, ikilpatrick, shanestephens)
-CSS Containment (leviw) \[[crbug.com/312978](http://crbug.com/312978)\]
-- No update since last week -
-Intersection Observer (szager, mpb)
-\[[crbug.com/540528](http://crbug.com/540528)\]
-- Intersection observer work is dragging on for much longer than
-originally anticipated. Got a bunch of feedback on the intent to ship
-that will be incorporated into the feature before shipping. (szager)
-- Wrap up intersection observer work leading up to the branch point.
-(szager)
-Text (eae, drott, kojii)
-- Landed two emoji fixes for line breaking and for skin tone modifiers,
-these are now enabled and work fine on Android. Works with line
-breaking and shrink-wrapping too. One remaining issue flagged by the
-android team is with backspacing in content-editable where we delete
-character by character rather than glyph by glyph. (drott)
-- Helped out with font regression, tracked down the issue and worked
-with windows team and testers to resolve it. (drott)
-- Resuming work to fixing shaping across unicode ranges, should have
-a patch ready by EoD. (drott)
-- Resume small-caps work. (drott)
-- Looking into line breaking performance, working on an implementation
-that would take advantage of per glyph measurements to find the ideal
-position and then scan backwards for the first preceding breaking
-opportunity. Should performance a lot better than our current
-implementation which always scans from the front of the string and
-considers each break opportunity up until the end of the line.
-Handling of collapsible white-space might be a problem, it's currently
-implemented as a part of both the measure, line break and paint steps
-rather than as a separate stage. (eae)
-HTML Tables (dgrogan)
-- Landed first patch, Table cell background painting. (atotic)
-Misc
-- Asyncathon last week, bringing together all the rendering leads to
-discuss our strategy around async for the next year. See separate
-update from Dru for details. (eae, ikilpatrick)
-- Fixed rebaseline bot and re-worked it to run as a separate service as
-opposed to as a client app on a desktop machine. (wkorman, szager)
-- Helped the pain team diagnose a couple of top crashers. All have now
-been resolved. More lifecycles issues. (leviw)
-- Talked to julien and told him about my work on collapsed borders, he
-liked what I did and agreed to review it. (atotic) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-may-26-2015/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-may-26-2015/index.md
deleted file mode 100644
index 4170ac3a1f9..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/tuesday-may-26-2015/index.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: tuesday-may-26-2015
-title: Tuesday, May 26, 2015
----
-
-Highlights
-
-- New multicol implementation shipped!
-
-- Line layout in layout units landing this week!
-
-Updates since last meeting (on Monday, May 18th):
-
-Performance Tracking (benjhayden)
-
-- Continuing work on trace viewer.
-
-Scrolling (skobes) \[crbug.com/417782\]
-
-- Root layer scrolling broke &lt;body&gt; stretching to viewport in quirks
-
-mode; fix is waiting on code review.
-
-- Page scale factor is a bigger concern: page scaling changes
-
-content size relative to scroll bounds, which doesn't work with root
-
-layer scrolling as currently implemented. Need to teach LayoutView /
-
-DPLScrollableArea how to apply the page scale factor, which could get
-
-messy.
-
-Line Boxes (szager) \[crbug.com/321237\]
-
-- Ready to land, will require a ton of rebaselines.
-
-Flexbox (cbiesinger) \[crbug.com/426898\]
-
-- Discussions around absolut positioning within flexbox.
-
-- Updated handling of min-width/min-height.
-
-List marker refactoring (dsinclair) \[crbug.com/370461\]
-
-- List marker patches in M44 branch. Yay!
-
-Menu list refactoring (dsinclair) \[crbug.com/370462\]
-
-- Menu list changes landed, with hack to use empty text node instead
-
-of BR for line breaks to ensure proper alignment.
-
-Fullscreen (dsinclair) \[crbug.com/370459\]
-
-- Taking over work to update fullscreen implementation to not modify
-
-layout tree during layout. Building on previous work by Julien and
-
-James among others.
-
-Misc Warden (dsinclair, pilgrim)
-
-- Contining work to slim-dopwn LayoutObject. (pilgrim)
-
-- Plan to start helping with WTF to Base conversion this week. (pilgrim)
-
-Region-based multi-column support (mstensho) \[crbug.com/334335\]
-
-- New multicol implementation shipped!
-
-Text
-
-- Working on justification crash issue. (kojii)
-
-- Investigating orthogonal writing modes issues. (kojii)
-
-- Unicode variation selectors support. (kojii)
-
-- Shaping AAT fonts broken on Mac for certain scripts. (eae)
-
-- Continuing work on complex text performance. (eae)
-
-Importing CSS Test Suites (kojii)
-
-- Investigating importing CSS Writing Modes test suites
-
-Removing DeprecatedPaintLayer (chadarmstrong)
-
-- Intern Chad Armstrong started, is going to be working on killing
-
-DeprecatedPaintLayer.
-
-- Design doc:
-https://docs.google.com/document/d/1YApHVA0hJDWeFGxHPpJ6J5JM5Wcz2h3s24KPSFp8VMg/edit?usp=sharing \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/meeting-notes/wednesday-february-18/index.md b/chromium/docs/website/site/teams/layout-team/meeting-notes/wednesday-february-18/index.md
deleted file mode 100644
index 91fbce880e6..00000000000
--- a/chromium/docs/website/site/teams/layout-team/meeting-notes/wednesday-february-18/index.md
+++ /dev/null
@@ -1,246 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/meeting-notes
- - Layout Team Meeting Notes
-page_name: wednesday-february-18
-title: Wednesday, February 18, 2015
----
-
-Attendees: benjhayden, cbiesinger, dsinclair, eae, jchaffraix, nduca, szager,
-skobes, slightlyoff, hartmanng
-
-Status updates:
-
-Performance Tracking (benjhayden)
-
-- Finished profiling most of the key silk test cases on android, added
-
-more graphs and information to the profiling doc.
-
-- Next up, classifying types of layout.
-
-Scrolling (skobes) \[crbug.com/417782\]
-
-- Smooth scrolling enabledd for RenderLayerScrollableArea.
-
-- Fixed position elements.
-
-win_blink flakiness (dsinclair)
-
-- win_blink_rel now among the better bots in terms of flakiness.
-
-- Slowly re-enabling tests, monitoring flakiness.
-
-Rename Rendering -&gt; Layout \[crbug.com/450612\] (dsinclair)
-
-- Trying to rename RendereBlock to LayoutBlock. Involves 30k files which
-
-rietveld does not like. Uploading for reviews cases the upload command
-
-to crash.
-
-List markers (dsinclair)
-
-- Trying to figure out how to deal with an ancestor being moved.
-
-Measure API (jchaffraix)
-
-- Working on a number of prototypes for measure together with Ian
-
-Kilpatrick.
-
-- github repo for prototypes. To allow layout callbacks a script
-
-execution context might be needed. Runs js in snadbox since we cannot
-
-modify the DOM. Would not have even read-only access to the DOM.
-
-Needs to be able to access render tree in a safe way.
-
-- Defining an API for the render tree, houdini style.
-
-- slightlyoff would prefer to not add a new execution context that is
-
-not workers. jchaffraix and slightlyoff to talk offline.
-
-Line Boxes (hartmanng, szager) \[crbug.com/321237\]
-
-- No real progress last week. Blocked on higher priority work to fix
-
-high profile regressions.
-
-Flexbox (cbiesinger) \[crbug.com/426898\]
-
-- Working on updating flexbox implementation to match latest spec
-
-revision.
-
-Text (kojii, eae)
-
-- Made RenderCombinedText less obstructive. 4 if-RenderCombinedText
-
-removed, 1 moved to less frequent path. (kojii)
-
-- Worked with dominik.rottsches to make vertical flow performance
-
-test. (kojii)
-
-- Started analyzing complex path performance. It looks like
-
-characteristics varies by scripts and values of properties. I'll look
-
-into CJK vertical flow first. (kojii)
-
-- Fixed two text regressions on Mac causing incorrect rendering and/or a
-
-render crash (due to an ASSERT). Required a Harfbuzz change and roll.
-
-(eae, behdad)
-
-- Added support for emoticons and emoji on Windows. (eae)
-
-Line layout (szager)
-
-- Fixed bug where shrink-wrapping of some content failed on Facebook,
-
-caused by imprecision in LayoutUnit to floating point conversions.
-
-Writing a test for this was tricky as layout tests run without
-
-subpixel text on most platforms. (szager)
-
-Going over the list of OKRs and discussing each one:
-
-\[ Have telemetry benchmark suite running key_silk_cases monitoring layout times
-with less than 1% variation between runs. \]
-
-\[ Add 3 real-world pages with lots of layout to key_silk_cases. At least two of
-which are mobile oriented. \]
-
-&lt;benjhayden&gt; A couple of cases with large variance, most have low
-variance.
-
-&lt;benjhayden&gt; Layout measurement should fix this in most cases. Some tests
-have a bi-modal behavior, triggering an extra layout in some cases.
-
-&lt;nduca&gt; We want a link on the layout team site to a set of graphs by the
-end of the quarter.
-
-&lt;eae&gt; So we're looking pretty good, do we think we can get there by the
-end of the quarter?
-
-&lt;benjhayden&gt; Yes.
-
-\* on track \*
-
-\[ Speed up some key_silk_cases tests. \]
-
-&lt;eae&gt; We've made a number of small improvements to complex text
-performance and have ongoing work that should result in a 10% improvement.
-
-&lt;eae&gt; Any other ongoing performance work?
-
-\* at risk \*
-
-\[ Create a Measure API prototype and write-up of lessons learned. \]
-
-&lt;jchaffraix&gt; On second or third prototype, have a better understanding
-since the Sydney convergence.
-
-&lt;jchaffraix&gt; Github repo with prototype, working on write-up.
-
-\* on track \*
-
-\[ Support natural layout animations (subpixel layout during animation) \]
-
-&lt;eae&gt; No real progress, have rough proof of concept prototype but nothing
-concrete.
-
-&lt;eae&gt; Might miss.
-
-&lt;nduca&gt; Should be explicit if it wasn't a priority and what we did
-instead.
-
-\* at risk \*
-
-\[ Finish root layer scrolling. \]
-
-&lt;skobes&gt; Making progress, fixing issues as discovered.
-
-&lt;skobes&gt; Handful of hard problems, some risk of slipping into Q2.
-
-\* on track \*
-
-\[ Move line layout to LayoutUnit. \]
-
-&lt;hartmanng&gt; Distracted by P1 bugs, have made some progress.
-
-&lt;hartmanng&gt; Complications with full-page zoom implementation.
-
-&lt;hartmanng&gt; Should be possible if we get time to work on it.
-
-&lt;szager&gt; Agreed.
-
-\* on track \*
-
-\[ Triage all clusterfuzz asserts and fix 50% of them. \[cbiesinger\]
-
-&lt;cbiesinger&gt; Starting to realize that 50% might have been a bit
-optimistic. Not all are reproducible.
-
-&lt;cbiesinger&gt; Without minimized test cases it is really hard, given up on a
-subset of them (without test cases).
-
-&lt;eae&gt; What would a realistic goal be for Q1?
-
-&lt;cbiesinger&gt; Triaging all reproducible ones and fixing the ones with
-minimal test cases would be feasible.
-
-\* at risk \*
-
-\[ Have bugs automatically filed for new clusterfuzz asserts. \]
-
-&lt;cbiesinger&gt; Need to work with someone on the clusterfuzz team, should be
-easy.
-
-\* on-track \*
-
-\[ Render tree modifications during layout. \]
-
-&lt;dsinclair&gt; first-letter is stabilized, list-marker is a lot closer.
-
-&lt;dsinclair&gt; One tricky outstanding issue regarding descendants
-(list-marker).
-
-&lt;jchaffraix&gt; Full screen is a road block. Re-attach destroys renderer,
-restarts plugins. Currently we do no reattach. We need to add a hoisting
-mechanist to make it work. Prototype patch among those lines but it does break
-plugins. Needs more work and is complicated.
-
-&lt;jchaffraix&gt; Have not had time to dig into it, need to fix path.
-
-&lt;dsinclair&gt; single-item-menu won't be done this quarter.
-
-&lt;dsinclair&gt; On track according to plan, decent amount of risk.
-
-\* on track \*
-
-High level discussion:
-
-&lt;dsinclair&gt; Renaming rendering to layout has been sucking up a lot of time
-for everyone.
-
-&lt;eae&gt; As has dealing with regressions and blocking bugs.
-
-&lt;nduca&gt; Are we spending more or less time on work not captured in the OKRs
-than expected?
-
-&lt;eae&gt; Was expecting about a 50%/50% split between OKR work and
-high-priority bug fixes. So for this quarter we've spent a bit more time on
-bugs/regressions than expected.
-
-&lt;nduca&gt; For Q2 OKRs should capture that work. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/okrs/2015q1/index.md b/chromium/docs/website/site/teams/layout-team/okrs/2015q1/index.md
deleted file mode 100644
index 13a9f986311..00000000000
--- a/chromium/docs/website/site/teams/layout-team/okrs/2015q1/index.md
+++ /dev/null
@@ -1,182 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/okrs
- - Objectives and Key Results
-page_name: 2015q1
-title: 2015 Q1
----
-
-List of objectives and key results for the first quarter of 2015.
-
-## Overview
-
-* Key Result Owner(s) Score
-* [Have telemetry benchmark suite running key_silk_cases monitoring
- layout times with less than 1% variation between runs.](#kr0)
- \[benjhayden\] 0.6
-* [Add 3 real-world pages with lots of layout to key_silk_cases. At
- least two of which are mobile oriented.](#kr1) \[benjhayden\] 0.7
-* [Speed up some key_silk_cases tests.](#kr2) \[*everyone*\] 0.0
-* [Create a Measure API prototype and write-up of lessons
- learned.](#kr3) \[jchaffraix, eae\] 1.0
-* [Support natural layout animations (subpixel layout during
- animation).](#kr4) \[eae\] 0.0
-* [Finish root layer scrolling.](#kr5) \[skobes\] 0.5
-* [Move line layout to LayoutUnit.](#kr6) \[hartmanng, szager\] 0.7
-* [Triage all clusterfuzz asserts and fix 50% of them.](#kr7)
- \[cbiesinger\] 0.2
-* [Have bugs automatically filed for new clusterfuzz asserts.](#kr8)
- \[cbiesinger\] 0.0
-* [Render tree modifications during layout.](#kr9) \[dsinclair\] 0.7
-* [Speed up complex text by a factor of 2.](#kr10) \[kojii, eae\] 1.0
-
-## Details
-
-### Have telemetry benchmark suite running key_silk_cases monitoring layout times with less than 1% variation between runs
-
-Owner(s):benjhayden
-Score:0.6
-
-The variation between runs is about 3% overall for tests running with the new
-layout_avg telemetry metric. Down from about 10% for existing webkit performance
-tests.
-
-The variation between runs is about 3% overall, though avg and variation vary
-widely between pages.
-
-It looks like there's a couple hundred ms variation in the average of all pages'
-layout_avg, though I'm not sure what the take-home number should be. The average
-over all the pages' layout_avg is about 5.4ms after I added Masonry, and the
-stddev in that line looks to be about 200ms, which is about 3-4% variation.
-Masonry's layout_avg is usually around 70ms, and the stddev in its layout_avg
-between runs is about 1-2ms, which is about 3% variation. Several pages have a
-layout_avg that is consistently below 1ms, so normal variation can be 100% or
-more.
-
-One way to reduce variation would be to rewrite the pages to perform
-significantly more layout, i.e. boost the signal above the noise.
-
-Perhaps this OKR should have been about making sure that there aren't any
-easily-fixable sources of noise in any page's layout_avg, e.g. non-deterministic
-load order. I fixed one issue of that nature. The noise in most of the rest of
-the pages looks like expected white noise, with a few pages exhibiting rare
-spikes that may warrant further investigation, though nothing as troublesome as
-that non-deterministic load order.
-
-I'm rewriting the LayoutMetric, so these numbers will change and expose more
-detailed information.
-
-### Add 3 real-world pages with lots of layout to key_silk_cases. At least two of which are mobile oriented
-
-Owner(s):benjhayden
-Score:0.7
-
-Added two new tests, Polymer Topeka and Masonry.
-
-### Speed up some key_silk_cases tests
-
-Owner(s):everyone
-Score:0.0
-
-We've speed up quite a few of the blink layout perf tests but seemingly none of
-the silk cases.
-
-It turns out that all the key_silk_cases tests were already pretty fast when it
-comes to layout.
-
-* [chapter-reflow](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release&tests=blink_perf.layout%2Fchapter-reflow&checked=chapter-reflow%2Cchapter-reflow%2Cref%2Cchapter-reflow%2Cref%2Cchapter-reflow%2Cref)
- tests speed up by 5-12% depending on platform.
-* [line-layout](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release&tests=blink_perf.layout%2Fline-layout&checked=line-layout%2Cline-layout%2Cref%2Cline-layout%2Cref%2Cline-layout%2Cref&start_rev=318673&end_rev=322609)
- tests 4-15% depending on platform.
-
-### Create a Measure API prototype and write-up of lessons learned
-
-Owner(s):jchaffraix, eae
-Score:1.0
-
-Split Measure into Element, Text and Custom Layout measure.
-
-* jchaffraix has several prototypes and
- [write-up](https://docs.google.com/a/chromium.org/document/d/1hGuLzcY8uFcP4fQw2HiwnpnI6SmygqErvYQMxkObONs/edit)
- for Element measure, with key conclusions about the API and what
- people expect.
-* eae has a proposal and some write-up for text.
-* jchaffraix was involved in Custom Layout but ikilpatrick is the main
- driver.
-
-### Support natural layout animations (subpixel layout during animation)
-
-Owner(s):eae
-Score:0.0
-
-No real progress, was deprioritized in favor of performance and code health
-work. Questionable whether it makes sense without some sort of layout/style
-containment as we cannot give any performance guarantees without it.
-
-### Finish root layer scrolling
-
-Owner(s):skobes
-Score:0.5
-
-Main-thread, impl-thread, and script-driven frame-level scrolls now work through
-LayerScrollableArea codepath with --root-layer-scrolls. Iframes, position:
-fixed, and scroll animations work. Need to expand test coverage and look at
-potential interactions with other features (pinch viewport, fractional scroll
-offsets, top controls, overhang, slimming paint, scroll customization etc).
-
-### Move line layout to LayoutUnit
-
-Owner(s):hartmanng, szager
-Score:0.7
-
-Great progress but not quite there yet. Need to solve the performance issue.
-Still need to go through all tests on Windows to determine if any of the changes
-are due to regressions or if we just need to rebaseline the tests. Mac and Linux
-both close.
-
-### Triage all clusterfuzz asserts and fix 50% of them
-
-Owner(s):cbiesinger
-Score:0.2
-
-Clusterfuzz now does produce assertion errors. \[restricted link\] If that link
-does not show results, click "Toggle experimental testcases".
-
-Triaged most asserts, but so far only on paper. Not fixed because focused more
-on Flexbox. Need to continue in Q2 with bug filing and fixing.
-
-### Have bugs automatically filed for new clusterfuzz asserts
-
-Owner(s):cbiesinger
-Score:0.0
-
-Not done because not done triaging. However, when it's time to do this it's just
-a matter of asking the clusterfuzz team to do it. All code and logic is already
-in place.
-
-### Render tree modifications during layout
-
-Owner(s):dsinclair
-Score:0.7
-
-Landed first-letter but the list markers change is stuck on finishing the patch,
-especially editing. Dan is pulled in other directions (LayoutObject renaming,
-unflaking win bot etc)
-
-### Speed up complex text by a factor of 2
-
-Owner(s):kojii, eae
-Score:1.0
-
-Speed up by over 2x at a minimum and up to 40x in some cases.
-
-* [ArabicLineLayout](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release&tests=blink_perf.layout%2FArabicLineLayout&checked=ArabicLineLayout%2CArabicLineLayout%2Cref%2CArabicLineLayout%2Cref&start_rev=318673&end_rev=322609)
- 2-2.5x depending on platform.
-* [latin-complex-text](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release&tests=blink_perf.layout%2Flatin-complex-text&checked=latin-complex-text%2Cref%2Clatin-complex-text%2Clatin-complex-text%2Cref%2Clatin-complex-text%2Cref&start_rev=318673&end_rev=322609)
- 8-40x depending on platform.
-* [vertical-japanese-kokoro-insert](https://chromeperf.appspot.com/report?masters=ChromiumPerf&bots=android-nexus7v2%2Cchromium-rel-mac9%2Cchromium-rel-win7-gpu-nvidia%2Clinux-release&tests=blink_perf.layout%2Fvertical-japanese-kokoro-insert&checked=vertical-japanese-kokoro-insert%2Cvertical-japanese-kokoro-insert%2Cref%2Cvertical-japanese-kokoro-insert%2Cref%2Cvertical-japanese-kokoro-insert%2Cref&start_rev=318673&end_rev=322609)
- 2-5x depending on platform. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/okrs/2015q2/index.md b/chromium/docs/website/site/teams/layout-team/okrs/2015q2/index.md
deleted file mode 100644
index 5a89cfcd65b..00000000000
--- a/chromium/docs/website/site/teams/layout-team/okrs/2015q2/index.md
+++ /dev/null
@@ -1,163 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/okrs
- - Objectives and Key Results
-page_name: 2015q2
-title: 2015 Q2
----
-
-List of objectives and key results for the second quarter of 2015.
-
-## Overview
-
-* Objective / Key Result Owner(s) Status
-* Gain insight into real world layout performance
- * [Have a report characterizing layout performance for all layout
- scenarios.](#o0r0) \[benjhayden\] 0.0
-* Improve high-level layout design
- * [Have design document for grand node measure
- refactoring.](#o1r0) \[jchaffraix\] 0.3
- * [List markers not modifying layout tree during layout (in
- dev).](#o1r1) \[dsinclair\] 1.0
- * [Initial implementation of menu item not modifying layout tree
- during layout (in canary).](#o1r2) \[dsinclair\] 1.0
-* Improve capabilities of the web platform
- * [Have an experimental out-of-tree node measure API.](#o2r0)
- \[jchaffraix\] 0.0
- * [Update flexbox implementation to match latest version of
- specification.](#o2r1) \[cbiesinger\] 0.8
- * [Improve CJK vertical text support \[redacted, internal
- metric\].](#o2r2) \[kojii\] 0.9
-* Rationalize text rendering
- * [Make complex text as fast as simple text.](#o3r0) \[eae\] 1.0
- * [Remove the simple text code path.](#o3r1) \[eae\] 0.0
- * [Build the plan to support updated Unicode Bidirectional
- Algorithm.](#o3r2) \[kojii\] 0.2
- * [Raise the “Passed” rate of CSS Writing Modes Level 3 to 85%
- including new tests.](#o3r3) \[kojii\] 1.0
-* Improve code health
- * [Move line layout to LayoutUnit.](#o4r0) \[szager\] 1.0
- * [Finish root layer scrolling.](#o4r1) \[skobes\] 0.7
- * [Ensure that bugs get automatically filed for clusterfuzz
- asserts.](#o4r2) \[cbiesinger\] 1.0
-
-## Details
-
-### Have a report characterizing layout performance for all layout scenarios.
-
-Owner(s):benjhayden
-Status:0.0
-
-Abandoned to focus on telemetry. Ben moved to telemetry team to ensure that the
-larger blink team has access to the performance data we need to ensure that RAIL
-is a success.
-
-### Have design document for grand node measure refactoring.
-
-Owner(s):jchaffraix (dsinclair, cbiesinger, skobes, eae)
-Status:0.3
-
-Superseded by larger layout refactoring proposal (“moose”). Part of the
-refactoring work could still be relevant/applicable in isolation and has been
-broken out into specific design documents; unrooted layout, removing deprecated
-paint layer.
-
-### List markers not modifying layout tree during layout (in dev).
-
-Owner(s):dsinclair
-Status:1.0
-
-Done
-
-### Initial implementation of menu item not modifying layout tree during layout (in canary).
-
-Owner(s):dsinclair
-Status:1.0
-
-Done.
-
-### Have an experimental out-of-tree node measure API.
-
-Owner(s):jchaffraix
-Status:0.0
-
-Abandoned due to the high implementation complexity, high maintenance costs and
-relatively low level of enthusiasms from prospective clients. Does not
-necessarily make sense in isolation and should be considered as a part of a
-bigger layout refactoring or work to support custom layout. Most prospective use
-cases can be satisfied with a text metrics API.
-
-### Update flexbox implementation to match latest version of specification.
-
-Owner(s):cbiesinger
-Status:0.8
-
-Mostly done, will drag into Q3. Initial estimate was a little bit too
-optimistic.
-
-### Improve CJK vertical text support \[redacted, internal metric\].
-
-Owner(s):kojii
-Status:0.9
-
-We unblocked all existing blockers. The metric is stalled for other problems,
-and one topic is still under discussions, but Blink is no longer the blocker at
-this point and the failure to meet the goal is outside the control of the blink
-team.
-
-### Make complex text as fast as simple text.
-
-Owner(s):eae (szager, kojii, behdad)
-Status:1.0
-
-Done. Complex path speed up by between 3.5x and 30x, as fast or faster than
-simple path on benchmarks.
-
-### Remove the simple text code path.
-
-Owner(s):eae
-Status:0.0
-
-Was gated on making complex text as fast as simple. Was a bit too ambitious
-perhaps, should be doable early Q3.
-
-### Build the plan to support updated Unicode Bidirectional Algorithm
-
-Owner(s):kojii
-Status:0.2
-
-Work under way, will carry over into Q3.
-
-### Raise the “Passed” rate of CSS Writing Modes Level 3 to 85% including new tests
-
-Owner(s):kojii
-Status:1.0
-
-86% as of early June.
-
-### Move line layout to LayoutUnit.
-
-Owner(s):szager (dsinclair)
-Status:1.0
-
-Done!
-
-### Finish root layer scrolling.
-
-Owner(s):skobes
-Status:0.7
-
-Fixed various things such as anchor scrolling, quirks mode, hit testing. Partial
-coverage of unit tests with RLS enabled. Some issues remain with pinch viewport,
-custom scrollbars, etc. Aiming to finish in Q3.
-
-### Ensure that bugs get automatically filed for clusterfuzz asserts.
-
-Owner(s):cbiesinger
-Status:1.0
-
-Done! \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/okrs/2015q3/index.md b/chromium/docs/website/site/teams/layout-team/okrs/2015q3/index.md
deleted file mode 100644
index dd07c5d21a6..00000000000
--- a/chromium/docs/website/site/teams/layout-team/okrs/2015q3/index.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/okrs
- - Objectives and Key Results
-page_name: 2015q3
-title: 2015 Q3
----
-
-List of objectives and key results for the third quarter of 2015.
-
-## Overview
-
-* Objective / Key Result Owner(s) Status
-* Interop (Interoperability, Compatibility, Conformance)
- * [Update flexbox implementation to match latest version of
- specification](#o0r0) cbiesinger
- * [Remove page zoom](#o0r1) eae, blink-style
- * [Updated Unicode Bidirectional Algorithm](#o0r2) kojii
- * [Unprefix CSS Writing modes](#o0r3) kojii
- * [Improve font fallback](#o0r4) drott
- * [Spec work for houdini block & line custom layout](#o0r5)
- ikilpatrick
-* Improve code health
- * [Have all calls into block layout go through well defined
- API](#o1r0) leviw
- * [Have a clear understanding of the cost/complexity of custom
- layout.](#o1r1) leviw, ikilpatrick
- * [Finish root layer scrolling](#o1r2) skobes, szager
- * [Remove simple text code path](#o1r3) eae,drott
- * [Improve integration between Blink and Harfbuzz](#o1r4) drott
-* Bug Health
- * [Triage all incoming layout bugs within one week](#o2r0) eae
- * [Reduce bug count by 30%](#o2r1) eae
-* RAIL (Measuring User Experience)
- * [Reduce unnecessarily forced layouts](#o3r0)
- * [Add UMA tracking & monitoring for different types of
- layout](#o3r1)
- * [Brainstorm/plan devtools/rail score/layout integration](#o3r2)
- * [Trace layout on some popular websites in US, Europe, Brazil,
- India](#o3r3)
-* Spin up effort around spatial
- * [Make progress on viewability/measure for the ads use
- case](#o4r0)
-
-## Details
-
-### Update flexbox implementation to match latest version of specification
-
-Owner(s):cbiesinger
-Score:
-
-### Remove page zoom
-
-Owner(s):eae, blink-style
-Score:
-
-(shared with style team)
-
-### Updated Unicode Bidirectional Algorithm
-
-Owner(s):kojii
-Score:
-
-### Unprefix CSS Writing modes
-
-Owner(s):kojii
-Score:
-
-### Improve font fallback
-
-Owner(s):drott
-Score:
-
-### Spec work for houdini block & line custom layout
-
-Owner(s):ikilpatrick
-Score:
-
-### Have all calls into block layout go through well defined API
-
-Owner(s):leviw
-Score:
-
-### Have a clear understanding of the cost/complexity of custom layout.
-
-Owner(s):leviw, ikilpatrick
-Score:
-
-### Finish root layer scrolling
-
-Owner(s):skobes, szager
-Score:
-
-### Remove simple text code path
-
-Owner(s):eae,drott
-Score:
-
-### Improve integration between Blink and Harfbuzz
-
-Owner(s):drott
-Score:
-
-### Triage all incoming layout bugs within one week
-
-Owner(s):eae
-Score:
-
-### Reduce bug count by 30%
-
-Owner(s):eae
-Score:
-
-### Reduce unnecessarily forced layouts
-
-Owner(s):
-Score:
-
-### Add UMA tracking & monitoring for different types of layout
-
-Owner(s):
-Score:
-
-(initial vs lifecycle)
-
-### Brainstorm/plan devtools/rail score/layout integration
-
-Owner(s):
-Score:
-
-### Trace layout on some popular websites in US, Europe, Brazil, India
-
-Owner(s):
-Score:
-
-### Make progress on viewability/measure for the ads use case
-
-Owner(s):
-Score: \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/okrs/2015q4/index.md b/chromium/docs/website/site/teams/layout-team/okrs/2015q4/index.md
deleted file mode 100644
index 4973ea6b1c6..00000000000
--- a/chromium/docs/website/site/teams/layout-team/okrs/2015q4/index.md
+++ /dev/null
@@ -1,250 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/okrs
- - Objectives and Key Results
-page_name: 2015q4
-title: 2015 Q4
----
-
-List of objectives and key results for 2015 Q4.
-
-## Overview
-
-* Objective / Key Result Owner(s) Score
-* RAIL (Measuring User Experience)
- * [Ship CSS containment to beta](#o0r0) leviw 0.60
- * [Smooth scrolling for wheel and keyboard scrolls in Win/Linux
- enabled on trunk](#o0r1) skobes, ymalik 1.00
- * [Intersection observer on trunk](#o0r2) szager 0.95
- * [Integrate font related memory consumption to
- memory-infra](#o0r3) drott 1.00
-* Interop (Interoperability, Compatibility, Conformance)
- * [Have fullscreen implementation not modify layout tree](#o1r0)
- bokan 0.00
- * [Have flexbox match latest version of spec](#o1r1) cbiesinger
- 0.80
- * [Work with other vendors to nail down Custom Layout API](#o1r2)
- ikilpatrick 0.90
- * [Support Blink/Android hyphen design work](#o1r3) szager 1.00
- * [Replace flexbox tests with W3C ones](#o1r4) cbiesinger 1.00
- * [Unprefix CSS Writing modes](#o1r5) kojii 0.70
- * [CSS font-feature-settings](#o1r6) kojii 0.00
-* Code health
- * [Have root layer scrolling pass all unit tests](#o2r0) skobes,
- szager 0.50
- * [Have prototype of ruby on top of custom layout \[kojii,
- houdini-dev\]](#o2r1) blink-houdini, kojii 1.00
- * [Remove simple text](#o2r2) eae, drott 0.90
- * [Ship improved font fallback to stable](#o2r3) drott 0.75
- * [Finish wrapping block layout in an API](#o2r4) leviw, pilgrim
- 0.70
- * [Add class level documentation to all key layout classes](#o2r5)
- jchaffraix 1.00
- * [Feasibility study for replacing flipped flocks writing mode
- implementation](#o2r6) wkorman 0.00
-* Bug Health
- * [Continue to triage all bugs within one week](#o3r0) eae 1.00
- * [Fix all (new) P0/P1 within one release](#o3r1) eae 0.80
- * [Reduce untriaged bug count by 50%](#o3r2) eae, jchaffraix 1.00
- * [Reduce total bug backlog by 15%](#o3r3) eae 1.00
-
-## Details
-
-### Ship CSS containment to beta
-
-Owner(s):leviw
-Score:0.60
-
-Editor’s Draft https://drafts.csswg.org/css-containment/ \[mid quarter\] On
-track, intent to implement has been sent. Patch up for review. \[end of
-quarter\] CSS and Paint containment implemented and available as experimental
-web platform features. We're further along implementation wise than expected
-however behind on shipping as CSS contain has yet to ship to beta.
-
-### Smooth scrolling for wheel and keyboard scrolls in Win/Linux enabled on trunk
-
-Owner(s):skobes, ymalik
-Score:1.00
-
-http://crbug.com/575 \[mid quarter\] On track, looking good. \[end of quarter\]
-Enabled on trunk in time for the M49 branch.
-
-### Intersection observer on trunk
-
-Owner(s):szager
-Score:0.95
-
-\[mid quarter\] On track, harder and more time consuming than estimated. \[end
-of quarter\] More work and much harder than originally estimated. Implementation
-has been ready for over a month but delayed due to difficulties in getting it
-reviewed and difficulties around agreeing on a memory model that'll make sense
-in a post oil-pan world. Work completed about ten days after the end of quarter.
-
-### Integrate font related memory consumption to memory-infra
-
-Owner(s):drott
-Score:1.00
-
-\[mid quarter\] On track. \[end of quarter\] Memory instrumentation added for
-key font metrics.
-
-### Have fullscreen implementation not modify layout tree
-
-Owner(s):bokan
-Score:0.00
-
-\[mid quarter\] De-staffed. At risk. \[end of quarter\] De-staffed as bokan
-wasn't available to layout-dev to work on fullscreen or layout in general. Needs
-new owner.
-
-### Have flexbox match latest version of spec
-
-Owner(s):cbiesinger
-Score:0.80
-
-\[mid quarter\] On track. \[end of quarter\] ?
-
-### Work with other vendors to nail down Custom Layout API
-
-Owner(s):ikilpatrick
-Score:0.90
-
-\[mid quarter\] On track. \[end of quarter\] Several meetings and discussions
-with other vendors., Have broad consensus and expect us to be able to spec it in
-Sydney.
-
-### Support Blink/Android hyphen design work
-
-Owner(s):szager
-Score:1.00
-
-\[mid quarter\] On track. \[end of quarter\] Sufficient support for design work
-provided. drott/szager up to speed.
-
-### Replace flexbox tests with W3C ones
-
-Owner(s):cbiesinger
-Score:1.00
-
-\[mid quarter\] On track. \[end of quarter\] Done?
-
-### Unprefix CSS Writing modes
-
-Owner(s):kojii
-Score:0.70
-
-\[mid quarter\] On track. \[end of quarter\]
-
-### CSS font-feature-settings
-
-Owner(s):kojii
-Score:0.00
-
-\[mid quarter\] At risk. \[end of quarter\] ?
-
-### Have root layer scrolling pass all unit tests
-
-Owner(s):skobes, szager
-Score:0.50
-
-\[mid quarter\] De-emphasized to focus on intersection observer. Still making
-solid progress though. \[end of quarter\] Some progress, but less than expected
-due to Stefan being pulled of to do Intersection Observer. Steve fixed at least
-one of the unit tests and a few of the layout tests, and added infrastructure
-for tracking future progress on the layout tests via flag-specific expectations.
-
-### Have prototype of ruby on top of custom layout \[kojii, houdini-dev\]
-
-Owner(s):blink-houdini, kojii
-Score:1.00
-
-\[mid quarter\] Rough prototype exists, needs further work. \[end of quarter\]
-Two independent prototypes created using slightly different APIs. Successfully
-demonstrated that it is viable to re-implement ruby on top of a custom layout
-API. Neither are production ready and both depend on a polyfil, as planned.
-
-### Remove simple text
-
-Owner(s):eae, drott
-Score:0.90
-
-\[mid quarter\] Always use complex text enabled on trunk. Plan is to remove code
-for M50. \[end of quarter\] Harder than anticipated due to a number of
-compatibility and perf issues, most severe being a perf regression in Mac AAT
-backend due to n squared font fallback which took awhile to resolve. Patch to
-remove simple text uploaded and approved. Will commit as soon as M49 has been
-branched. Missing end of Q4 goal by two weeks.
-
-### Ship improved font fallback to stable
-
-Owner(s):drott
-Score:0.75
-
-\[mid quarter\] Shipped to beta. On track. \[end of quarter\] In 48 which goes
-to stable in Jan 26. Missing end of Q4 goal by one month.
-
-### Finish wrapping block layout in an API
-
-Owner(s):leviw, pilgrim
-Score:0.70
-
-\[mid quarter\] At risk. \[end of quarter\] Still not quite done but getting
-closer.
-
-### Add class level documentation to all key layout classes
-
-Owner(s):jchaffraix
-Score:1.00
-
-\[mid quarter update\] On track. \[end of quarter\] Comprehensive class level
-documentation added as header comments to all key layout classes.
-
-### Feasibility study for replacing flipped flocks writing mode implementation
-
-Owner(s):wkorman
-Score:0.00
-
-http://crbug.com/535637 \[mid quarter\] Delayed to focus on paint performance.
-At risk. \[end of quarter\] De-emphasized to focus on slimming paint which is
-higher performance. Will carry over to Q1.
-
-### Continue to triage all bugs within one week
-
-Owner(s):eae
-Score:1.00
-
-\[mid quarter\] On track \[end of quarter\] All bugs triaged within one week of
-filing (for new bugs) or one week of having the CR-Blink-Layout label added (for
-old bugs, working down the backlog).
-
-### Fix all (new) P0/P1 within one release
-
-Owner(s):eae
-Score:0.80
-
-\[mid quarter\] On track \[end of quarter\] Still some ambiguity aroud the
-definition of a P1 bugs. All P0 and release-blockers fixed within one release.
-75% of all P1s, majority of remaining ones should like have been classified as
-P2.
-
-### Reduce untriaged bug count by 50%
-
-Owner(s):eae, jchaffraix
-Score:1.00
-
-\[mid quarter\] On track to exceed goal. Reduced by 60% thus far. \[end of
-quarter\] Reduced by over 70%, far exceeding goal of 50%. Down to 180
-unconfirmed/untriaged from 690 at the start of the quarter.
-
-### Reduce total bug backlog by 15%
-
-Owner(s):eae
-Score:1.00
-
-\[mid quarter\] On track to exceed goal. Reduced by 16% thus far. \[end of
-quarter\] Reduced total open bug count by over 25%, exceeding goal of 15%. Down
-to 1688 open bugs from 2310 at the start of the quarter. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/okrs/2016q1/index.md b/chromium/docs/website/site/teams/layout-team/okrs/2016q1/index.md
deleted file mode 100644
index 6bcd1ae7195..00000000000
--- a/chromium/docs/website/site/teams/layout-team/okrs/2016q1/index.md
+++ /dev/null
@@ -1,215 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-- - /teams/layout-team/okrs
- - Objectives and Key Results
-page_name: 2016q1
-title: 2016 Q1
----
-
-List of objectives and key results for 2016 Q1.
-
-## Overview
-
-* Objective / Key Result Owner(s) Status
-* Measure and improve performance
- * [Ship CSS Containment as experimental feature to stable.](#o0r0)
- leviw
- * [Gather data on number of third party iframes loaded but never
- viewed.](#o0r1) szager
- * [Collect metrics and do analysis on forced layouts.](#o0r2)
- cbiesinger
- * [Stretch: Reduce number of forced layouts for one common
- trigger.](#o0r3) cbiesinger
- * [Ship intersection observer to stable.](#o0r4) ojan, szager
-* Interop (Interoperability, Compatibility, Conformance)
- * [Spec for custom layout.](#o1r0) blink-houdini, ikilpatrick
- * [Finish up worklet implementation.](#o1r1) blink-houdini,
- ikilpatrick
- * [Socialize resize observers specification.](#o1r2) atotic
- * [Collect data on percentage margin usage.](#o1r3) eae
- * [Ship updated absolute position behavior for flexbox to
- stable.](#o1r4) cbiesinger
- * [Upstream 75% of our flexbox test to w3c.](#o1r5) cbiesinger
- * [Make progress on text autosizing spec](#o1r6) pdr
- * [Evangelize CSS containment and get another browser to commit to
- it.](#o1r7) leviw, shanestephens
-* Code health
- * [Root layer scrolling passing all unit tests.](#o2r0) skobes
- * [Design doc for internal layout api](#o2r1) leviw
- * [Line layout API analysis document](#o2r2) dgrogan, pilgrim
- * [Stretch: Ruby on top of custom layout as experimental web
- platform feature on trunk.](#o2r3) kojii
- * [Ship emoji & punctuation fallback overhaul on all
- platforms.](#o2r4) drott
- * [Feasibility study for replacing flipped blocks writing mode
- implementation.](#o2r5) wkorman
-* Product excellence
- * [Ship improved web typography to beta.](#o3r0) drott
- * [Triage all incoming bug reports within one week and eliminate
- backlog.](#o3r1) eae
- * [Fix all new P1 bug reports within one release.](#o3r2) eae
- * [Start to make vertical rhythm on the web easier.](#o3r3) kojii
- * [Prototype scroll anchoring on layout.](#o3r4) skobes
-
-## Details
-
-### Ship CSS Containment as experimental feature to stable.
-
-Owner(s):leviw
-Score:
-
-### Gather data on number of third party iframes loaded but never viewed.
-
-Owner(s):szager
-Score:
-
-### Collect metrics and do analysis on forced layouts.
-
-Owner(s):cbiesinger
-Score:
-
-### Stretch: Reduce number of forced layouts for one common trigger.
-
-Owner(s):cbiesinger
-Score:
-
-Common triggers include: - I'm an iframe and need to know my size
-(clientHeight/width) - I'm an iframe or component and need to know if i'm
-visible. (scrollTop, etc) - I want to lazyload images or components when the
-user gets closer (scrollTop) - I'm a metrics script and need to report the
-window size (window.clientWidth, etc) - I need to set my dimensions based on the
-computed width/height of something else. (clientHeight/Width) - Need to set
-focus(), because new component is active. (elem.focus()) - I'm jQuery or
-Modernizr and use computed style to identify features or bugs.
-
-### Ship intersection observer to stable.
-
-Owner(s):ojan, szager
-Score:
-
-Stretch: pay down technical depth by moving things to use the intersection
-observer infrastructure, such as: - render throttling for offscreen - video auto
-play
-
-### Spec for custom layout.
-
-Owner(s):blink-houdini, ikilpatrick
-Score:
-
-### Finish up worklet implementation.
-
-Owner(s):blink-houdini, ikilpatrick
-Score:
-
-Help Audio & CW folks transition as needed.
-
-### Socialize resize observers specification.
-
-Owner(s):atotic, blink-houdini
-Score:
-
-### Collect data on percentage margin usage.
-
-Owner(s):eae
-Score:
-
-### Ship updated absolute position behavior for flexbox to stable.
-
-Owner(s):cbiesinger
-Score:
-
-### Upstream 75% of our flexbox test to w3c.
-
-Owner(s):cbiesinger
-Score:
-
-### Make progress on text autosizing spec
-
-Owner(s):pdr
-Score:
-
-(20% project)
-https://docs.google.com/document/d/1hlg1TworBMsvSMdLz4n5DxFr8Bex7S8eB_p0GpFrdVU/edit
-
-### Evangelize CSS containment and get another browser to commit to it.
-
-Owner(s):blink-houdini, leviw, shanestephens
-Score:
-
-### Root layer scrolling passing all unit tests.
-
-Owner(s):skobes
-Score:
-
-### Design doc for internal layout api
-
-Owner(s):leviw
-Score:
-
-Including feasibility study for supporting a custom-layout style API in
-conjunction with our legacy layout implementation.
-
-### Line layout API analysis document
-
-Owner(s):dgrogan, leviw, pilgrim
-Score:
-
-Have an analysis document detailing the current organic API and a plan for
-transitioning towards the API we'd like. Make decision, based on document,
-whether the exercise was useful and if so if we should continue with the rest of
-the layout API.
-
-### Stretch: Ruby on top of custom layout as experimental web platform feature on trunk.
-
-Owner(s):kojii
-Score:
-
-### Ship emoji & punctuation fallback overhaul on all platforms.
-
-Owner(s):drott
-Score:
-
-### Feasibility study for replacing flipped blocks writing mode implementation.
-
-Owner(s):wkorman
-Score:
-
-### Ship improved web typography to beta.
-
-Owner(s):drott
-Score:
-
-- OpenType Enabling - smcp, - Enable all font-feature-settings and
-font-variant-\* CSS - CSS font-synthesis attribute (faux bold & italics control)
-
-### Triage all incoming bug reports within one week and eliminate backlog.
-
-Owner(s):eae
-Score:
-
-### Fix all new P1 bug reports within one release.
-
-Owner(s):eae
-Score:
-
-This is a bit o a stretch given that we don't yet have a team-wide definition of
-a P1 bug but nevertheless it is something we really should try to do!
-
-### Start to make vertical rhythm on the web easier.
-
-Owner(s):kojii
-Score:
-
-https://github.com/kojiishi/snap-height
-
-### Prototype scroll anchoring on layout.
-
-Owner(s):skobes
-Score:
-
-crbug.com/558575 - user facing feature and a prerequisite for many potential
-user agent interventions. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/okrs/index.md b/chromium/docs/website/site/teams/layout-team/okrs/index.md
deleted file mode 100644
index d9c8eb1b82d..00000000000
--- a/chromium/docs/website/site/teams/layout-team/okrs/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-page_name: okrs
-title: Objectives and Key Results
----
-
-This page holds our quarterly objectives and a set of key results for each
-objective. At the beginning of each quarter the OKRs from the preceding quarter
-are evaluated and graded and the ones for the coming quarter are agreed upon.
-
-* [2016 Q1](/teams/layout-team/okrs/2016q1)
-* [2015 Q4](/teams/layout-team/okrs/2015q4)
-* [2015 Q3](/teams/layout-team/okrs/2015q3)
-* [2015 Q2](/teams/layout-team/okrs/2015q2)
-* [2015 Q1](/teams/layout-team/okrs/2015q1) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/layout-team/potential-projects/index.md b/chromium/docs/website/site/teams/layout-team/potential-projects/index.md
deleted file mode 100644
index b32e870e822..00000000000
--- a/chromium/docs/website/site/teams/layout-team/potential-projects/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/layout-team
- - Layout Team
-page_name: potential-projects
-title: Roadmap / Potential Projects
----
-
-List of potential future projects (aka wishlist) for the layout team.
-Relative priority in square brackets, based on impact, cost of implementing and
-feedback from real-world web sites and web app teams.
-
-## In Scope Projects
-
-The backlog is now maintained in monorail, please see the
-[layout-backlog](https://bugs.chromium.org/u/3593919584/hotlists/layout-backlog)
-hotlist.
-
-## Out of Scope
-
-Potential projects that have been considered and rejected as being out-of-scope,
-either due to the projects itself being premature, due to it being better suited
-for a different team, or not considered important enough at the moment.
-
-* Viewporting and Infinite lists
- Too early, silk TLs need to discuss this further.
-* String of HTML into Fragment
- This is job of scheduler team.
-* When layout happens, calcDrawProps and sendInvalidations runs long
- Falls onto the [paint team](/teams/paint-team).
-* Repaint storm elimination & invalidation
- Tackled by [Slimming Paint](/blink/slimming-paint).
-* UIWorker / Animation Proxy
- Too early, silk TLs need to discuss this further.
-* Expose what triggered a layout in devtools
- Show in devtools which line of JS caused a layout, which nodes generated an
- invalidation, why it took as long as it did. Falls on the devtools team.
-* Element
- [onPaint](https://docs.google.com/a/chromium.org/document/d/1BmS4vT5RtTxg_HH_33bU1PNwVZR4ZsNpOagWjEsETA8/edit)
- callback
- Falls on the [paint team](/teams/paint-team).
-* HTML Canvas
- Falls on the GPU or graphics team. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/paint-team/canvas-okrs/index.md b/chromium/docs/website/site/teams/paint-team/canvas-okrs/index.md
deleted file mode 100644
index a4d49fff440..00000000000
--- a/chromium/docs/website/site/teams/paint-team/canvas-okrs/index.md
+++ /dev/null
@@ -1,273 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/paint-team
- - Paint Team (paint-dev)
-page_name: canvas-okrs
-title: Canvas team OKRs
----
-
-## Q4 2016
-
-Ship OffscreenCanvas
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-[#wp-ergonomics](https://easyokrs.googleplex.com/search/?q=wp-ergonomics)
-
-Owners: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/),
-[junov](https://easyokrs.googleplex.com/view/junov/),
-[xidachen](https://easyokrs.googleplex.com/view/xidachen/),
-[xlai](https://easyokrs.googleplex.com/view/xlai/)
-
-* Lead: xlai
-
-* implement convertToBlob
-* Owner: [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Make placeholder canvas elements work as image sources (drawImage,
- toBlob, etc)
-* Owner: [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Ship it in M57
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/),
- [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* This includes achieving full spec conformance.
-* Make a convincing performance demo, and support devrel with launch
- PR
-* Owner: [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Land the specification against whatwg
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Get canvas filters to work in a Worker
-* Owner: [fserb](https://easyokrs.googleplex.com/view/fserb/)
-* Make OffscreenCanvas commit flow works in the Android WebView
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Write tests that verify that it works, fix if necessary.
-
-<img alt="Copy" src="https://easyokrs.googleplex.com/images/copy.svg">[<img
-alt="Link"
-src="https://easyokrs.googleplex.com/images/link.png">](https://easyokrs.googleplex.com/o/2361706/)
-
-OffscreenCanvas testing and tracking
-[#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
-
-Owners: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/),
-[junov](https://easyokrs.googleplex.com/view/junov/),
-[xidachen](https://easyokrs.googleplex.com/view/xidachen/),
-[xlai](https://easyokrs.googleplex.com/view/xlai/)
-
-* Lead: xidachen
-
-* Contribute to web platform tests
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/),
- [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Achieve complete test coverage: Each statement in the spec should be
- covered by tests, with xrefs to the spec.
- Upstream the tests to web platform tests repo, test other implementations
- for conformance
- Main owner/coordinator is xidachen. xlai and junov are contributors.
-* Add telemetry performance tests for OffscreenCanvas
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Must cover commit() and ImageBitmap flows, cover all permutations of
- GPU/CPU rendering and compositing, run on GPU bots.
-* Add usage metrics histograms.
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Must track:
- \* OffscreenCanvas feature usage
- \* mode of operation (commit vs transferToImageBitmap)
- \* commit() code path
- \* CPU run time for each commit() code path (on the thread where commit is
- called)
- \* commit() latency (time elapsed from commit() call to UI compositor
- update)
-* Have the fastest implementation
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/),
- [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Write animometer-style benchmarks for OffscreenCanvas (commit and
- imageBitmap flows, 2D and WebGL). Compare to other implementations.
- Stay on top
- Main owner/coordinator: xidachen. junov and xlai to contribute to fixing
- perf issues.
-
-requestAnimationFrame in Workers
-[#wp-ergonomics](https://easyokrs.googleplex.com/search/?q=wp-ergonomics)
-
-Owners: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/),
-[junov](https://easyokrs.googleplex.com/view/junov/)
-
-* Implement it
-* Spec it
-* Ship it in M57
-
-Product excellence
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-Owners: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/),
-[xidachen](https://easyokrs.googleplex.com/view/xidachen/),
-[xlai](https://easyokrs.googleplex.com/view/xlai/)
-
-* Lead: xidachen
-
-* Weekly product excellence report
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Publish weekly report to chrome-canvas mailing list.
- Bug stats: outstanding bug count (number fixed, number of new bugs), list of
- high-profile outstanding bugs (crashers, security, regressions, highly
- starred, p0-p1), high profile bugs resolved since last report. Keep report
- history in a google doc.
- Delegate reporting when on leave.
-* Performance metrics report
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Twice in the quarter, present to paint team show salient
- fluctuations in key performance metrics.
-* Prevent bug count from creeping up.
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/),
- [xlai](https://easyokrs.googleplex.com/view/xlai/),
- [zakerinasab](https://easyokrs.googleplex.com/view/zakerinasab/)
-* (104 outstanding bugs as of October 5 2016)
-* Refactor Canvas and OffscreenCanvas dependencies on cc
-* Owners: [xidachen](https://easyokrs.googleplex.com/view/xidachen/),
- [xlai](https://easyokrs.googleplex.com/view/xlai/)
-
-Misc canvas features
-[#wp-ergonomics](https://easyokrs.googleplex.com/search/?q=wp-ergonomics)
-
-Owner: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/)
-
-* Make experimental implementation of canvas colorspace work
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [zakerinasab](https://easyokrs.googleplex.com/view/zakerinasab/)
-* Experimental implementation of text rendering in workers (stretch)
-* Owner:
- [zakerinasab](https://easyokrs.googleplex.com/view/zakerinasab/)
-* 0.5 for getting text to render using only the default font.
-* Ship DOMMatrixInit-based canvas APIs (stretch)
-* Owner: [xlai](https://easyokrs.googleplex.com/view/xlai/)
-
-## Q3 2016
-
-OffscreenCanvas feature complete
-[#wp-future](https://easyokrs.googleplex.com/search/?q=wp-future)
-
-Owners: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/),
-[junov](https://easyokrs.googleplex.com/view/junov/),
-[xidachen](https://easyokrs.googleplex.com/view/xidachen/),
-[xlai](https://easyokrs.googleplex.com/view/xlai/)
-
-* 0.80P2commit() flow working for 2D canvas
-* Owner: [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Mid-quarter status: Stalled for about 3 weeks due to dependency on
- mojo improvements. Still on track for EOQ
- EOQ status: Mostly implemented except software compositing cases
-* 0.80P2commit() flow working for WebGL
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Mid-quarter status: Not started, still possible by EOQ.
- EOQ status: Mostly implemented except software compositing cases
-* 1.00P3GPU-accelerated 2D canvas in a worker
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Mid-quarter status: WIP CL almost done. On track.
- EOQ status: done.
-* 0.50P1Finish specification for OffscreenCanvas (rolled over from Q2)
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Mid-quarter status: iterated on proposal some more, still attainable
- by EOQ, moderate risk of slipping.
- EOQ: Draft complete, not yet publicly shared.
-* 0.80P3Canvas readback APIs + tainting for 2D
-* Owner: [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* getImageData + toBlob + toDataURL working on OffscreenCanvas on main
- thread + Workers (stretch)
- Mid-quarter status: WIP, tainting for 2D completed, the rest partially
- implemented, at risk of slipping into Q4
- EOQ status: done, except for toBlob which is not yet implemented
-
-<img alt="Copy" src="https://easyokrs.googleplex.com/images/copy.svg">[<img
-alt="Link"
-src="https://easyokrs.googleplex.com/images/link.png">](https://easyokrs.googleplex.com/o/2239617/)
-
-0.10P3Canvas color space support
-[#wp-future](https://easyokrs.googleplex.com/search/?q=wp-future)
-
-Owners: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/),
-[junov](https://easyokrs.googleplex.com/view/junov/)
-
-* Mid-quarter: Slow progress so far this Q, work on colorspace
- implementation is ramping up with
- [zakerinasab@](https://teams.googleplex.com/zakerinasab)
-
-* 0.00P2Converge spec proposal
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Close all unresolved issues about the proposal on the W3C WICG forum
- Mid-quareter status: No progress. Still attainable this Q
-* 0.00P3Write spec (stretch)
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Commit CanvasColorSpace spec against WHATWG HTML spec.
- Mid-quarter status: No progress, not likely this quarter.
-* 0.30P4Prototype/experimental implementation in Blink
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Mid-qarter status: Partially landed. Experimental API is there,
- color space plumbing in the compositor is there, not functional due
- to several missing pieces in skia, blink and compositor.
-
-0.74P1Product Excellence
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-Owners: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/),
-[junov](https://easyokrs.googleplex.com/view/junov/),
-[xidachen](https://easyokrs.googleplex.com/view/xidachen/),
-[xlai](https://easyokrs.googleplex.com/view/xlai/)
-
-* 0.80P2Reduce bug count
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/),
- [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Go from 121 to under 100 open bugs (Type = Bug + Bug-Regression +
- Bug-Security)
- Mid-quarter status: 106 outstanding bugs. On track!
- EOQ status: 104 bugs.
-* P1Resolve all memory leak-like issues related to canvas
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Mid-quarter status: Out of our hands: dependency on V8 team GC
- triggers.
-* 0.80P12 week SLA on fixing crashers and security bugs
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/),
- [xlai](https://easyokrs.googleplex.com/view/xlai/)
-* Mid-quarter status: On track.
- EOQ status: crasher 624718 is lagging behind. Otherwise we did good.
-* 1.00P21 week SLA on triage
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Mid-quarter status: on track
- EOQ: done.
-* 0.50P3Be the best browser for all canvas-related Animometer
- benchmark scores
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* (Includes work by intern sebastienlc)
- Mid-quarter status: implemented but not enabled. Not on track because no one
- is currently owning follow-up on intern's work. Postponing.
- EOQ status: some heuristic for falling back to SW have been implemented,
- thus preventing critical performance cliffs. Global approach is not ready to
- ship.
-* 0.60P2Fix top starred issues
-* Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* crbug.com/618324 - Experimental \`imageSmoothingQuality\` property
- doesn't provide expected quality
- crbug.com/7508 - We don't anti-alias &lt;canvas&gt; drawImage
- Mid-quarter status: 7508 is fixed, 618324 has been investigated but will
- probably not be fixed this quarter.
- EOQ status: 1/2 bugs fixed + bonus bug 424291
-
-Misc Features [#wp-future](https://easyokrs.googleplex.com/search/?q=wp-future)
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-
-Owner: [chrome-canvas](https://easyokrs.googleplex.com/view/chrome-canvas/)
-
-* 0.70P3Ship ImageBitmap resize
-* Owner: [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Mid-quarter status: on track
- EOQ staus: implementation complete, but not shipped
-* 0.90P2Ship ImageSmoothingQuality
-* Owner: [junov](https://easyokrs.googleplex.com/view/junov/)
-* Mid-quarter status: done, but there are outstanding complaint about
- the quality of the mipmaps used for high quality filtering. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/paint-team/index.md b/chromium/docs/website/site/teams/paint-team/index.md
deleted file mode 100644
index 4ee4b1b63a7..00000000000
--- a/chromium/docs/website/site/teams/paint-team/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: paint-team
-title: Paint Team (paint-dev)
----
-
-The paint team has been subsumed into the new [rendering
-core](//chromium.org/teams/rendering) team. Please see the rendering core page
-for details about ongoing paint and canvas work. \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/paint-team/okrs/index.md b/chromium/docs/website/site/teams/paint-team/okrs/index.md
deleted file mode 100644
index ce09502005f..00000000000
--- a/chromium/docs/website/site/teams/paint-team/okrs/index.md
+++ /dev/null
@@ -1,1217 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/paint-team
- - Paint Team (paint-dev)
-page_name: okrs
-title: Paint team OKRs
----
-
-## Q1 2017
-
-Code health
-[#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
-
-Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* P1# of open bugs did not increase during the quarter
-* Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* Starting point: 1350 on Jan 3, 2017
-* P2Reduce # of failing layout tests, layout test fix SLA
-* Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* Starting point: 58 on Jan 3, 2017
-* P1No regressions reach the M57 or later stable channel
-* Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* Should this be M56 and later, given it has not gone to stable yet?
-
-Improve quality of implementation
-[#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
-[#wp-architecture](https://easyokrs.googleplex.com/search/?q=wp-architecture)
-
-* P2Top-starred bugs fixed
-* Fix at least the following"
- \* White flash: <http://crbug.com/470669> (chrishtr)
- \* Blurry fractional posn text: <http://crbug.com/521364> (trchen)
- \* Jittery images: <http://crbug.com/608874> (schenney)
- \* border-radius children: <http://crbug.com/157218> (schenney)
- \* imageSmoothingQuality not right: <http://crbug.com/618324> (junov)
- \* flickering dithered content: <http://crbug.com/226753> (fmalita)
- \* raster scale heuristics: <http://crbug.com/652448> (chrishtr)
- \* SVGTextContentElement.getSubStringLength(): <http://crbug.com/622336>
- (pdr)
- \* Mac controls painting bugs: 607438, 611753, 158426 (schenney)
-* P2Remove need for FrameView::forceLayoutParentViewIfNeeded in SVG
-* Owner: fs@opera.com
-
-Understand, maintain and improve performance
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-
-Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* P1Measure performance and prevent any performance regressions from
- reaching the stable channel
-* Owner: [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-
-Improve paint/compositing interfaces
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-[#wp-architecture](https://easyokrs.googleplex.com/search/?q=wp-architecture)
-
-Owners: [ajuma](https://easyokrs.googleplex.com/view/ajuma/),
-[chrishtr](https://easyokrs.googleplex.com/view/chrishtr/),
-[paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
-[wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/),
-[wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-
-* P1SPv2 works for all effects, including mask
-* Owner: [trchen](https://easyokrs.googleplex.com/view/trchen/)
-* P1SPv2 works for scrolling and scrollbars
-* Owner: [pdr](https://easyokrs.googleplex.com/view/pdr/)
-* P1SPv2 works for animation metadata and touch event regions
-* Owner: [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* P1PaintArtifactCompositor layerization as good as
- PaintLayerCompositor
-* Owners: [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/),
- [wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-* P1Finish removing target knowledge from clip and transform trees
-* Owners: [ajuma](https://easyokrs.googleplex.com/view/ajuma/),
- [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/)
-* P1Cache dynamically-determined clips
-* Owner: [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/)
-* P1Stop requiring a cc::Layer for any property tree nodes
-* P2Build the RenderSurfaceLayerList from effect trees
-* Owner: [ajuma](https://easyokrs.googleplex.com/view/ajuma/)
-* P1Launch SlimmingPaintInvalidation
-* Owner:
- [wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-* P1Design and prototype implementation of border-radius clipping in
- SPv2
-* Owners: [ajuma](https://easyokrs.googleplex.com/view/ajuma/),
- [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/)
-* Stretch additional goal: implement & land it
-
-Support other teams' work
-
-Owners: [chrome-gpu](https://easyokrs.googleplex.com/view/chrome-gpu/),
-[paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* Promote more opaque scrollers and fixed-position elements in the
- presence of LCD text
-* Owners:
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [threaded-rendering](https://easyokrs.googleplex.com/view/threaded-rendering/)
-* threaded-rendering: implement
- paint-dev: support
- Fix discovered compositing bugs, re-enable fixed position promotion. Promote
- scrollers with border-radius, box shadow, and scrollers/sticky/fixed
- elements containing no text.
-* P1Apply border radius clipping to non-stacking descendants
-* Owners:
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [threaded-rendering](https://easyokrs.googleplex.com/view/threaded-rendering/)
-* crbug.com/157218
- paint-dev: implement feature
- threaded-rendering: implement tiled masks for efficiency
-* P2Implement color correction in blink
-* Owners:
- [chrome-gpu](https://easyokrs.googleplex.com/view/chrome-gpu/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-* ccameron: implementation
- paint-dev: support
-* P3Fully threaded scrolling with touch-action
-* Owners:
- [input-dev-eventing](https://easyokrs.googleplex.com/view/input-dev-eventing/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* paint-dev, input-dev: design for touch-action in SPv2
-* P3Simplify paint usage of Sk\*Shaders
-* Owners:
- [chrome-gpu](https://easyokrs.googleplex.com/view/chrome-gpu/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-* This is to support easier implementation of custom display lists
-
-Code Health and Future Design
-
-Owner:
-[input-dev-eventing](https://easyokrs.googleplex.com/view/input-dev-eventing/)
-
-* P3Touch-action hit testing
-* Owners: [dtapuska](https://easyokrs.googleplex.com/view/dtapuska/),
- [flackr](https://easyokrs.googleplex.com/view/flackr/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* [#wp-architecture](https://easyokrs.googleplex.com/search/?q=wp-architecture),
- [#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
- Have a concrete design of how SPV2 will information necessary for
- touch-action hit testing on the compositor.
-
-Support other teams' work
-
-Owners: [chrome-gpu](https://easyokrs.googleplex.com/view/chrome-gpu/),
-[paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* Promote more opaque scrollers and fixed-position elements in the
- presence of LCD text
-* Owners:
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [threaded-rendering](https://easyokrs.googleplex.com/view/threaded-rendering/)
-* threaded-rendering: implement
- paint-dev: support
- Fix discovered compositing bugs, re-enable fixed position promotion. Promote
- scrollers with border-radius, box shadow, and scrollers/sticky/fixed
- elements containing no text.
-* P1Apply border radius clipping to non-stacking descendants
-* Owners:
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [threaded-rendering](https://easyokrs.googleplex.com/view/threaded-rendering/)
-* crbug.com/157218
- paint-dev: implement feature
- threaded-rendering: implement tiled masks for efficiency
-* P2Implement color correction in blink
-* Owners:
- [chrome-gpu](https://easyokrs.googleplex.com/view/chrome-gpu/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-* ccameron: implementation
- paint-dev: support
-* P3Fully threaded scrolling with touch-action
-* Owners:
- [input-dev-eventing](https://easyokrs.googleplex.com/view/input-dev-eventing/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* paint-dev, input-dev: design for touch-action in SPv2
-* P3Simplify paint usage of Sk\*Shaders
-* Owners:
- [chrome-gpu](https://easyokrs.googleplex.com/view/chrome-gpu/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-* This is to support easier implementation of custom display lists
-
-## Q4 2016
-
-Code health [#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* 1.00P1# of open bugs did not increase during the quarter
-* Owners: [schenney](https://easyokrs.googleplex.com/view/schenney/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* Mid-quarter update: on track. 1383 -&gt; 1385, including addition of
- a new component.
- End of quarter: 1383 on Sept 29, 2016 to 1350 on Jan 3, 2017.
-* 0.70P1No regressions reach the M55 or later stable channel
-* Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* Still on track.
- End of quarter update:
- 2 Regression reached M54, not really part of OKR:
- <https://bugs.chromium.org/p/chromium/issues/detail?id=655941>,
- <https://bugs.chromium.org/p/chromium/issues/detail?id=662378>
- One regressions reached M55 specifically.
- M56 not to stable yet.
-* 0.10P2Reduce # of failing layout tests, layout test fix SLA
-* Owners: [schenney](https://easyokrs.googleplex.com/view/schenney/),
- [xidachen](https://easyokrs.googleplex.com/view/xidachen/)
-* 1. Reduce # of steady-state failing layout tests by 50%
- 2. Fix all new layout test regressions within 2 weeks
- Directories:
- LayoutTests/paint/...
- LayoutTests/compositing/... (except compositing/animations)
- LayoutTests/svg/...
- LayoutTests/hittesting/...
- LayoutTests/fast/images/...
- LayoutTests/css3/images/...
- LayoutTests/canvas/...
- Mid-quarter-update: Negligible overall reduction this quarter.
- TODO(schenney) check lifetime of new regressions
- End of Quarter: No significant reduction, total count increased
- significantly due to random order test flakiness. Regression tracking
- process failed.
- Non-zero score because we did go down except for factors beyond our control.
- 35 -&gt; 34 before random-order jump.
-
-<img alt="History" src="https://easyokrs.googleplex.com/images/history.png"><img
-alt="Copy" src="https://easyokrs.googleplex.com/images/copy.svg">[<img
-alt="Link"
-src="https://easyokrs.googleplex.com/images/link.png">](https://easyokrs.googleplex.com/o/2336130/)
-
-0.56P2Improve quality of implementation
-[#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* 0.56P2Top-starred bugs fixed
-* Owner: [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/)
-* Fix at least these: 521364, 470669, 608874, 157218, 618324, 226753,
- 652448, 468497, 622336
- Mid-quarter update: some progress, but needs work. 468497 is done. Review
- for 470669 currently in review. 521364 still in progress. 157218 in
- progress, close to patches landing. 652448 in progress, vmpstr doing good
- work to support.
- End of quarter:
- \* 521364: CLs in review
- \* 470669 fixed, bug blocked on fix for crbug.com/21798.
- \* 608874 no progress
- \* 157218 landed Dec 12, reverted Dec 13, re-landed January 5, perf issues
- and 2 bugs still open.
- \* 618324 no progress
- \* 226753 investigated, no longer repros on later OS X updates. Probably not
- going to fix.
- \* 652448 prototyped, but concluded design proposal is not feasible in SPv1
- \* 468497 fixed
- \* 622336 no progress
- Fixed/close to fixed: 3
- mostly there: 2
- WontFix: 1
- No progress: 3
- Total score: (1.0\* 3 + 0.75 \* 2 + 0 \* 3) / 8 = 0.56
-* 1.00P2SVG filter hack in FrameView is gone
-* Owner: fs@opera.com
- Mid-quarter: on track! Code in review.
-* 0.00P2Remove need for FrameView::forceLayoutParentViewIfNeeded in
- SVG
-* Owner: fs@opera.com
- Mid-quarter: ?
-* 0.00P2Widget hierarchy is gone
-* Owners: [szager](https://easyokrs.googleplex.com/view/szager/),
- [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* crbug.com/637460
- Mid-quarter: not yet started.
- EOQ: no progress
-
-1.00P1Understand, maintain and improve performance
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-
-Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* 1.00P1Measure performance and prevent any performance regressions
- from reaching the stable channel
-* Owner: [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* Mid-quarter update: on track. Only thing being tracked is the Linux
- regression on M54 stable.
- EOQ: still going well
-* 1.00P1Composited opaque scrolling for low-DPI screens
-* Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* Mid-quarter update: basically done. Launching with M56.
- End of quarter: Landed for M56. Paint update time drops evident in UMA data.
- No outstanding open issues.
-
-0.58P2Improve paint/compositing interfaces
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-[#wp-architecture](https://easyokrs.googleplex.com/search/?q=wp-architecture)
-
-Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* 0.25P1SPv2 works all effects, including mask
-* Owner: [trchen](https://easyokrs.googleplex.com/view/trchen/)
-* Mid-quarter update: needs more work. implemented for filters. Masks
- not done.
- Overall, also blocked on creating render surfaces in SPv2.
- EOQ: some progress, but still a ways to go. Some design thought about masks.
-* 0.00P1SPv2 works for scrolling and scrollbars
-* Owner: [pdr](https://easyokrs.googleplex.com/view/pdr/)
-* Mid-quarter update: needs attention. no progress this quarter.
- EOQ: no progress.
-* 0.50P1SPv2 works for animation metadata and touch event regions
-* Owner: [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* Mid-quarter update: needs attention. no progress this quarter.
- EOQ: design investigation, early implementation.
-* 1.00SPv2 compatible ancestor-dependent and descendant-dependent
- PaintLayer values
-* Owner: [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/)
-* Mid-quarter update: needs attention. no progress this quarter.
- EOQ: done! Design and implementation in place.
-* 0.75P2SPv2 paint invalidation test infrastructure
-* Owner: [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/)
-* Mid-quarter update: landed changes to unify paint invalidation
- output format between SPv1 and SPv2. Tests not converted yet.
- EOQ: done! Design and implementation in place. Tests not converted yet, but
- that wasn't in the KR description.
-* 0.60P1PaintArtifactCompositor property tree optimization
-* Owner: [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/)
-* Passes all compositing tests with equivalently performant
- layerization
- Mid-quarter update: needs attention. no progress this quarter.
- EOQ: designed implemented the optimizations. But not all compositing tests
- passing yet.
-
-0.46P1Finish cc property tree implementation
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-Owners: [ajuma](https://easyokrs.googleplex.com/view/ajuma/),
-[jaydasika](https://easyokrs.googleplex.com/view/jaydasika/),
-[paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
-[sunxd](https://easyokrs.googleplex.com/view/sunxd/)
-
-* 0.75P1Finish removing target knowledge from clip and transform trees
-* Owner: [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/)
-* Mid-quarter update: transforms done! Calculating clips done (behind
- a flag), just needs caching implementation.'
- EOQ: transforms done, clips getting close.
-* 1.00P1Cache dynamically-determined transforms
-* Owners: [ajuma](https://easyokrs.googleplex.com/view/ajuma/),
- [sunxd](https://easyokrs.googleplex.com/view/sunxd/)
-* Mid-quarter update: done! TODO(ajuma): check if property update UMA
- metrics moved due to this.''
- EOQ done.
-* 0.50P1Stop requiring a cc::Layer for any property tree nodes
-* Owners: [ajuma](https://easyokrs.googleplex.com/view/ajuma/),
- [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/)
-* Mid-quarter update: on track. some progress, but work to do.
- EOQ: not done. still several references.
-* 0.00P1Build the RenderSurfaceLayerList from effect trees
-* Owner: [ajuma](https://easyokrs.googleplex.com/view/ajuma/)
-* Mid-quarter update: at risk. no progress yet, still consumed with
- other work.
- EOQ: no progress
-* 0.50Cache dynamically-determined clips
-* Owner: [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/)
-* Mid-quarter update: no progress yet, work starting soon.
- EOQ: implementation getting close
-* 0.00P2Simplify transform property nodes
-* Owner: [ajuma](https://easyokrs.googleplex.com/view/ajuma/)
-* 1. Only one transform per node
- 2. No caching (tracked via "Cache dynamically-determined transforms"
- however)
- Mid-quarter update: no progress.
- EOQ: no progress
-
-P2New features
-
-Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* 0.10P2Drive tentative standards agreement on a raster scale spec
- [#wp-ergonomics](https://easyokrs.googleplex.com/search/?q=wp-ergonomics)
-* Raster scale defines the scale at which to raster composited layers
- Note: crbug.com/652448 tracks doing this automatically for background
- images, and is tracked in another
- KR.
- Mid-quarter update: no progress.
- EOQ: prototyping of automatic version for images didn't work out. Going to
- revert code. No progress
- any standards discussion.
-* 0.00P2Fix all bugs blocking backdrop-filter launch
- [#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
-* Owner: [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/)
-* All dependent bugs of crbug.com/497522 fixed.
- Mid-quarter update: no progress so far.
- EOQ update: no progress.
-
-0.93P1Improve paint invalidation correctness and performance
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-
-Owners: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
-[wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-
-* Mid-quarter update: on track. lots of progress simplifying the code
- and fixing bugs.
-
-* 0.75P1Launch slimmingPaintInvalidation
-* Owner:
- [wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-* Mid-quarter update: on track. Close to a complete implementation.
- EOQ: launched to experimental status
-* 1.00P1Implement incremental paint property tree update
-* Owners: [pdr](https://easyokrs.googleplex.com/view/pdr/),
- [wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-* Mid-quarter update: on track. Code mostly done and design complete.
- EOQ: done!
-* 1.00P1Implement all SPv1 invalidation features in
- slimmingPaintInvalidation mode, or deprecate them if obsolete
-* Owner:
- [wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-* Mid-quarter update: on track. Lots of progress.
- EOQ: done!
-
-## Q3 2016
-
-## Code health [#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-## Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
-[paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
-[schenney](https://easyokrs.googleplex.com/view/schenney/)
-
-* ## 1.00P2# of open bugs did not increase during the quarter
-* ## Owners: [junov](https://easyokrs.googleplex.com/view/junov/),
- [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* ## Baseline starting point: 1323 open bugs as of July 8 2016 for
- these labels:
- ## Blink&gt;Paint, Blink&gt;Paint&gt;Invalidation, Blink&gt;Compositing,
- Blink&gt;SVG, Blink&gt;Canvas, Blink&gt;Image
- ## Mid-quarter update: on track. Bugs down to 1295 (2.1% decrease)
- ## EOQ update: 1311 as of 9/29 (plus 54 for the new HitTesting component)
-* ## 1.00P17-day SLA for triaging all incoming bugs
-* ## Owners:
- [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/),
- [junov](https://easyokrs.googleplex.com/view/junov/),
- [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* ## Another owner: fs@opera.com
- ## Mid-quarter update: on track. Holding around zero.
- ## EOQ update: met goal.
-* ## 0.75P1No regressions reach the M52 or later stable channel.
-* ## Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* ## Definition: bug is a regression that ends up bisected to a commit
- after the M52 branch point, yet made its way
- ## to the stable channel.
- ## Mid-quarter update: at risk. We already have one; crbug.com/635724 might
- leak to M53 stable.
- ## EOQ update: crbug.com/646363 made it to stable M53. crbug.com/637556 made
- it to M52 stable. No bug reached stable due to a triage failure. Problem was
- late reporting of the bug.
-* ## 1.00P3Monitor # of failing layout tests
-* ## Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* ## Directories: fast/repaint/\*, paint/\*, compositing/\*, svg/\*,
- fast/canvas/\*, canvas/\*
- ## Mid-quarter update: on track.
- ## EOQ update: met
-* ## 1.00P2Document an official triage process
-* ## Owners:
- [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/),
- [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* ## Mid-quarter update: on track.
- ## EOQ update: met
-
-## 0.40Improve quality of implementation
-[#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-## Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* ## 0.40P1Top-starred bugs fixed
-* ## Owner:
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-* ## Fix at least these: 521364, 470669, 608874, 157218, 618324,
- 226753, 409868, 470608
- ## Update: at risk. Only one of these bugs is fixed so far.
- ## EOQ update:
- ## - 521364 is close to done
- ## - 470669 unblocked by dependent bug a few days ago
- ## - 608874 no progress
- ## - 157218 has a prototype fix
- ## - 618324 not clear how to fix yet
- ## - 226753 no progress
- ## - 409868 WontFixed
- ## - 470608 Fixed.
- ## Score: 2/8 done, 2/8 close to done, 4/8 not done: 2/8 \* 1 + 2/8 \* 0.75
- = 0.43 ~ 0.4
-* ## 0.60P2SVG filter hack in FrameView is gone
-* ## Owner:
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-* ## Ref: Document::hasSVGFilterElementsRequiringLayerUpdate
- ## Owner: fs@opera.com
- ## Update: at risk. More work upcoming.
- ## EOQ update: patch to finish it coming very soon; some good preparatory
- refactoring done.
-* ## 0.20P2Remove need for FrameView::forceLayoutParentViewIfNeeded in
- SVG
-* ## Owner:
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-* ## Owner: fs@opera.com
- ## Update: at risk. trchen is also helping with this one.
- ## EOQ update: some promising prototyping, but a ways t go.
-* ## 0.40P2Geometry code for layout and paint better-written and
- documented
-* ## Owners:
- [blink-layout](https://easyokrs.googleplex.com/view/blink-layout/),
- [szager](https://easyokrs.googleplex.com/view/szager/),
- [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* ##
- [#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
- [#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
- ## Shared between the paint and layout teams.
- ## Update: at risk. Plan in place for removing the Widget hierarchy, but not
- much progress yet.
- ## EOQ update: reworked flipped-block logic in
- mapToVisualRectInAncestorSpace(); initial exploration to rework
- Widget/FrameView trees; documentation of writing modes in layout/README.md
- in flight.
-
-## 0.97Understand, maintain and improve performance
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-
-## Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* ## 1.00P1Measure performance and prevent any performance regressions
- from reaching the stable channel
-* ## Owner: [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* ## Mid-quarter update: on track.
- ## EOQ: met
-* ## 1.00P2Composited scrolling for low-DPI screens
-* ## Owner: [schenney](https://easyokrs.googleplex.com/view/schenney/)
-* ## Mid-quarter update: on track. Lots of progress. Should be able to
- turn it on for M55.
- ## EOQ: met
-* ## 1.00P1Use compositor RTrees rather than cached SkPictures
-* ## Owner: [wkorman](https://easyokrs.googleplex.com/view/wkorman/)
-* ## Mid-quarter update: done!
- ## EOQ: met
-* ## 0.80Partial repaint telementry test implemented
-* ## Mid-quarter update: at risk. No progress yet, work upcoming this
- quarter.
- ## EOQ: in code review.
-
-## 0.67Improve paint/compositing interfaces
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-## Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* ## 0.40P1New (SPv2) compositing integration works for scrolling and
- non-mask effects
-* ## Owners:
- [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/),
- [pdr](https://easyokrs.googleplex.com/view/pdr/),
- [trchen](https://easyokrs.googleplex.com/view/trchen/)
-* ## All scrolling (assuming root layer scrolls) and compositing tests
- pass up to masking.
- ## Mid-quarter update: on track for scrolling, at risk for effects.
- ## EOQ update: scrolling almost done. No progress yet on effects.
-* ## 1.00P1Paint invalidation tree walk within the pre-paint tree walk
- fully implemented
-* ## Owners:
- [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/),
- [wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-* ## Mid-quarter update: done!
- ## EOQ update: met
-* ## 0.60P1GeometryMapper implements fast paint invalidation, paint
- clip rects, and interest rects.
-* ## Owner: [chrishtr](https://easyokrs.googleplex.com/view/chrishtr/)
-* ## Mid-quarter update: on track. Lots of progress.
- ## EOQ update: done for paint invalidation, CL almost done for paint clip
- rects. Interest rests not yet done.
-
-## 0.58Finish cc property tree implementation
-[#wp-performance](https://easyokrs.googleplex.com/search/?q=wp-performance)
-[#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-## Owner: [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/)
-
-* ## 0.90P1Finish removing target knowledge from clip and transform
- trees
-* ## Owners:
- [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/),
- [weiliangc](https://easyokrs.googleplex.com/view/weiliangc/)
-* ## Mid-quarter update: On track for transforms, at risk for clips.
- Computation of transforms without in-tree target knowledge has been
- implemented behind a flag; for clips, there are unit test failures
- to sort out (where the "correct" answer isn't necessarily what the
- test currently expects), and work is being transitioned to new
- owners.
- ## EOQ update: done for transforms (1.0), nearly done for clips (0.8), so
- 0.9 overall.
-* ## 0.40P1Cache dynamically-determined draw properties
-* ## Owner: [sunxd](https://easyokrs.googleplex.com/view/sunxd/)
-* ## Mid-quarter update: On track for transforms, at risk for clips.
- Currently evaluating performance for transforms, but clips are
- blocked on the previous KR.
- ## EOQ update: nearly done for transforms (0.8) and not started for clips
- (0) so 0.4 overall.
-* ## 0.00P3(stretch) RenderSurface determination on the impl thread
-* ## This depends on the previous two KRs being finished, but is not a
- lot of additional effort.
- ## Mid-quarter update: no progress.
- ## EOQ update: not done
- ## EOQ update: ?
-* ## 0.60P1Stop requiring a cc::Layer for any property tree nodes
-* ## Owners: [ajuma](https://easyokrs.googleplex.com/view/ajuma/),
- [jaydasika](https://easyokrs.googleplex.com/view/jaydasika/)
-* ## Mid-quarter update: On track. Most of the dependencies have been
- removed.
- ## EOQ update: Work for routing animation updates directly to property trees
- is nearly done; most of the direct dependencies of render surfaces on owning
- layers have been removed, but RSLL iteration still needs to be converted to
- use layer lists and effect nodes.
-
-## 1.00New features
-
-* ## 1.00P2Support custom paint
- [#wp-future](https://easyokrs.googleplex.com/search/?q=wp-future)
-* ## Code reviews, design reviews, etc.
- ## Mid-quarter update: on track. (nothing to do)
- ## EOQ update: met
-* ## 1.00P2Unprefix -webkit-clip-path
- [#wp-predictability](https://easyokrs.googleplex.com/search/?q=wp-predictability)
-* ## owner:fs@opera.com
- ## Mid-quarter update: on track, code complete already. Sending an intent to
- ship soon.
- ## EOQ update: met
-
-## Code health [#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
-
-## Owner: [blink-layout](https://easyokrs.googleplex.com/view/blink-layout/)
-
-* ## P2Reduce life cycle violations
-* ## Owners: [atotic](https://easyokrs.googleplex.com/view/atotic/),
- [paint-dev](https://easyokrs.googleplex.com/view/paint-dev/),
- [wangxianzhu](https://easyokrs.googleplex.com/view/wangxianzhu/)
-* ## [#wp-health](https://easyokrs.googleplex.com/search/?q=wp-health)
- ## Reduce life cycle violations in the rendering pipeline.
- ## Shared between the paint and layout teams.
-
-## Q2 2016
-
-Code health
-
-Owner: paint-dev
-
-* 0.50P2Reduce total open bugs by 2%
-* Owners: chrishtr, junov, schenney
-* Mid-quarter update: actual result is up by 1%. Wont Meet.
- EOQ grading notes: actual is up by 1.8%. Score=0.6 for doing ok at fixing
- bugs, but lots more bugs keep coming in via triage from other labels.
-* 0.90P1Triage all legacy bugs, and triage all new bugs within a 1
- week SLA. Enforce priority 1 meaning.
-* Mid-quarter update: triaging SLA is On Track. Priority 1 bug hygiene
- Needs Work.
- EOQ grading notes: we met the SLA almost every week. Blink&gt;Compositing in
- particular slipped a couple of times.
-* 0.70P1Prevent any regressions from reaching the M51 or above stable
- channel
-* Mid-quarter update: M51 just went to stable, so no direct evidence
- yet of success or failure. Therefore On Track.
- EOQ notes: still not sure about M51. needs some bug digging. Tentative score
- of 0.7
-* 0.66P2High-priority / most-starred bugs fixed
-* Fix at least these:
- <http://crbug.com/596382>
- <http://crbug.com/521364>
- <http://crbug.com/470669>
- Mid-quarter update: 596382 is fixed (with followup to re-enable safely). The
- other two bugs have some progress
- but Need Work.
- EOQ update: 596382 is fixed. 521364 is halfway done. 470669 is halfway done.
- Final score: 0.66 (averaging).
-
-0.40P1Measure performance
-
-Owner: paint-dev
-
-* 0.00P1Implement a partial repaint Telemetry test
-* <http://crbug.com/527189>
- Mid-quarter update: no progress. Needs Work.
- EOQ update: nothing done.
-* 0.80P1Monitor UMA stats for paint, raster, paint invalidation and
- compositing. Don't allow regressions into the stable channel.
-* Owner: wkorman
-* Mid-quarter update: monitoring is On Track, not allowing regressions
- Needs Work.
- EOQ update: Stats monitored on regular basis, no currently known stable
- channel regressions M51 (may need more investigation to be 100% sure?)
-
-1.00Performance and complexity improvements
-
-Owner: paint-dev
-
-* 1.00P2Re-implement reflection using filters
-* Owner: jbroman
-* Launch by end of quarter
- Mid-quarter update: implemented and pretty much working. On Track.
- EOQ update: done, in M53. Score 1.0.
-* 0.70P2Composite scrolling on low-DPI screens when possible
-* Owner: schenney
-* Launch by end of quarter. Tracked in crbug.com/381840
- Mid-quarter update: partially implemented. Need to fix bugs in current
- implementation and commit it. Needs Work.
- EOQ update: All the necessary work done to set the layer as composited, and
- resulting Blink bugs fixed, but blocked on enabling background and
- foreground painting into the same composited layer when the background is
- opaque in order to actually get LCD text on the layer.
-* 1.00P1New DOM-order-based paint invalidation tree walk
-* Owner: wangxianzhu
-* Launch by end of quarter
- Mid-quarter update: finished on current PaintInvalidationState. Needs work
- to migrate to PrePaintTreeWalk (PaintPropertyTreeBuilder). On Track.
- EOQ update: Done. Score 1.0.
-
-P1Property trees / SPv2 plumbing
-
-Owners: paint-dev, pdr, trchen
-
-* 0.50P1Property trees in Blink are complete up to the deficiencies of
- the paint artifact compositor.
-* Owners: pdr, trchen
-* Transform trees are complete (including backface visibility,
- flattening, and transform-style).
- Effect trees are complete (including reflection, clip-path, mask).
- Root layer scrolling supported using unittests.
- All of compositing/, fast/, svg/ passing or failing for known&labeled
- reasons like paint artifact compositor deficiencies.
- This includes multicolumn.
- Implement the scroll tree.
- Mid-quarter update: Needs Work. Some progress on transform tree semantics
- and SVG clip paint properties, but a lot more work to do.
- EOQ update: lots of measurable progress was made (transform edge-cases,
- filter tree preparation, html and svg difficult cases) but we still fail a
- significant number of tests (~3100/16728 of fast/ & compositing/ & svg/).
-* 1.00P1All direct dependencies in cc on the cc::LayerImpl tree are
- gone, replaced with property trees
-* Owners: jaydasika, sunxd, vollick
-* Mid-quarter update: On Track. Lots of great progress.
- EOQ update: Done!
-* 0.30P2RenderSurface determination is on the impl thread
-* Owners: vollick, weiliangc
-* Update render target info and draw properties after render surface
- determination.
- Mid-quarter update: Partial work. Rest blocked by target information still
- on clip/transform tree. Wont Meet
- EOQ update: blocked on other KRs, but also not done.
-* 0.60P1Transformed layers can be sent as a layer list with property
- trees, rather than a hierarchical layer tree
-* Owners: ajuma, jbroman
-* Mid-quarter update: progressing, with a partial implementation. On
- Track.
- EOQ update: blink-side: score 0.5 can do trivial translations with a layer
- list (and trivial trees), but I'm still working on building non-trivial
- ones. cc side: 1.0. Total: 0.5 (most work is in Blink)
-* 0.40P2SPv2 paint invalidation is in place and works behind the
- feature flag for SPv2
-* Owner: wangxianzhu
-* Mid-quarter update: no progress yet. Needs Work.
- EOQ update: Plumbed SPv2 paint invalidation onto spv1 paint invalidation and
- it basically works, but it's still far from the goal of spv2 paint
- invalidation.
-* 0.50P1Remove target knowledge from Clip tree and Transform tree
-* Owner: weiliangc
-* Remove target_id and \*_in_target_space in Clip and Transform tree.
- Remove main thread cc's use to to_target transform, use to_screen transform
- instead (including visible rects calculation, sublayer scale, snapping)
- Dynamically calculate draw properties with target info from Effect tree.
- Blocks both Blink/cc API and RenderSurface determination on impl thread.
- Mid-quarter update: Progressing. Needs Work.
- EOQ update: progressing, but still needs plenty of work.
-* 0.20P3Cache dynamically calculated draw properties
-* Owner: weiliangc
-* Blocked by Clip and Transform tree clean up and Render Surface
- determination on impl thread.
- Critical for performance, do not block API implementation.
- Mid-quarter update: Still blocked by dynamic calculation. Wont Meet.
- EOQ update: Only moved a small part of properties.
-
-1.00P2Support goals of other teams
-
-* 1.00Support custom paint
-* Mid-quarter update: On Track. All custom paint patches are
- committed.
- EOQ update: Done. Score 1.0.
-* 1.00Support Blink -&gt; Chromium style change, and Onion Soup
- cleanups
-* Mid-quarter update: On Track. We're reviewing everything coming our
- way.
- EOQ update: Done. Score 1.0.
-
-0.40P1Geometry code improvements for performance, less redundancy, simplicity
-and correctness
-
-Owner: paint-dev
-
-* 0.70P1RTrees used to optimize layer rasterization, instead of
- SkPicture replay
-* Owners: chrishtr, wkorman
-* Mid-quarter update: down to about 12 failing layout tests, plus a
- small unknown regression in raster time. On Track.
- EOQ update: Close to landing for M53, work still underway on &lt; 10 failing
- layout tests.
-* 0.40P2GeometryMapper implemented and used to implement features in
- Blink
-* Owners: chrishtr, wkorman
-* 1. SPv2-compatible
- 2. PaintLayerClipper
- Mid-quarter update: prototype partial implementation of GeometryMapper in
- progress. Needs Work.
- EOQ update: First patch committed. Still plenty to do. Score 0.4.
-* 1.00P1Partial raster for Blink launched
-* Mid-quarter update: done, On Track.
- EOQ update: On track. Score 1.0.
-
-0.30Improve SVG integration into the document lifecycle
-
-* 0.50P2SVG filter hack in FrameView is gone
-* Ref: Document::hasSVGFilterElementsRequiringLayerUpdate
- Owner: fs@opera.com
- Mid-quarter update: some progress. Needs Work.
- EOQ update: some progress, but not quite there.
-* 0.10P2Remove need for FrameView::forceLayoutParentViewIfNeeded in
- SVG
-* Owner: fs@opera.com
- Mid-quarter update: no real progress. Wont Meet.
- EOQ update: some analysis performed, but no work yett
-
-## Q1 2016
-
-Code health
-
-Owner: paint-dev
-
-* Reduce total open bugs by 5%
-* Owners: chrishtr, junov, schenney
-* Document all new features in Markdown and in the code, as we write
- it
-* Implement pixel capture on Cluster Telemetry
-* Owner: pdr
-* crbug.com/536285
-* Triage all legacy bugs, and triage all new bugs within a 1 week SLA
-* Owners: chrishtr, junov, schenney
-
-Measure and improve performance
-
-Owner: paint-dev
-
-* Implement a partial repaint Telemetry test
-* Owner: weiliangc
-* crbug.com/527189
-* Improve performance of paint aggregated across Cluster Telemetry by
- a total of 10%
-* Owner: wangxianzhu
-* Monitor existing UMA stats at the bi-weekly meeting
-* Owner: wkorman
-
-Progress towards Slimming Paint v2
-
-Owner: paint-dev
-
-* Move RenderSurface determination to the impl thread
-* Owner: weiliangc
-* Finish by M51 branch point
-* Replace all direct dependencies in cc on the cc::LayerImpl tree with
- property trees
-* Owners: jaydasika, sunxd
-* Finish by M51
-* Complete implementation of paint property trees
-* Owners: pdr, trchen
-* Passes most compositing/ layout tests.
- Passes multicolumn tests.
- Passes scrolling tests for the root frame.
-* Implement a correct (but not yet performance-optimized) version of a
- new Blink compositing integration
-* Owner: jbroman
-* Passes most compositing/ layout tests.
- Passes multicolumn tests.
- Passes scrolling tests for the root frame.
- Passes video tests.
-* Common implementation of property trees
-* Owner: chrishtr
-* Designdoc completed. Code implemented and working integration with
- cc (may not yet be committed)
-* Make use of RTrees to optimize layer rasterization, instead of
- SkPicture replay
-* Owner: wkorman
-* Implement a SPv2-compatible paint invalidation tree walk
-* (..that is integrated into the paint properties or paint tree walk)
-
-Support goals of other teams
-
-Owner: paint-dev
-
-* Support custom paint implementation
-* Owner: chrishtr
-* Support paint-related loading metrics
-* Owner: chrishtr
-* Investigate OOPIF to see if there are paint-related design problems
- or bugs
-* Owner: pdr
-* Support conversion of Blink to Chromium style
-
-Code quality and cleanup
-
-Owner: paint-dev
-
-* Delete CDP
-* Owner: weiliangc
-* Delete selection gap code
-* Owner: wkorman
-
-## Q4 2015
-
-## Improve bug triage and fix rate (grade: 0.46)
-
-* ## This objective apples to the following labels:
- Cr-Blink-Paint-Invalidation, Cr-Blink-Paint, Cr-Blink-Canvas, and
- Cr-Blink-Compositing.
-
-* ## Reduce open bug count by 10%
-* ## Triage 100% of all new bugs with a 1-week SLA
-* ## Note: this goes along with a web-platform-wide OKR with the same
- goal.
-* ## Triage or re-triage 50% of all bugs filed before Q3 2015
-* ## Note: this goes along with a web-platform-wide OKR with the same
- goal.
-* ## Define and agree upon an ongoing triage process and standards for
- the paint team
-* ## This includes instructions on how to treat priority, Type, Cr
- labels, etc.
-
-## <img alt="Revision History"
-src="https://easyokrs.googleplex.com/images/history.png"><img alt="copy"
-src="https://easyokrs.googleplex.com/images/copy.svg">
-
-## Improve documentation of paint code (grade: 0.13)
-
-* ## Migrate all feature documentation on the sites page to Markdown
- files
-* ## Add Markdown files describing clearly major architectural pieces
- of Paint
-* ## This includes forward-looking documentation of the SPv2
- implementation, and important codebase-wide conventions.
-
-## Launch components of SlimmingPaintV2 (grade: 0.68)
-
-* ## All KRs below are met if they are done and launched in M49.
-
-* ## Launch SlimmingPaintSynchronizedPainting
-* ## Launch SlimmingPaintSubsequenceCaching
-* ## Launch SlimmingPaintOffsetCaching
-* ## Launch compositor thread property trees
-* ## Includes deleting all of CDP
-* ## Launch removal of DisplayItemList-&gt;SkPicture replay
-* ## Launch the cc effect tree
-
-## Implement the new compositing path for Slimming Paint v2 (grade: 0.2)
-
-* ## Implement the paint properties design
-* ## crbug.com/537409
- ## Includes: paint properties tree walk, definition and generating of
- property trees, and homogeneous DisplayItemList with just drawings.
-* ## Implement layer compositing in Blink on top of paint properties
- and paint chunks
-* ## (Stretch) Implement squashing and overlap testing in the
- compositor thread
-
-## canvas.toBlob, callback version of the API (grade: 0.8)
-
-* ## Have an async implementation that has its scheduling controlled
- by Blink
-* ## Refactor the png encoder integration into skia (SkCodec) in a way
- that allows the workload to be divided into small units of work for
- the purpose of Idle scheduling.
-* ## Stress test should show that a long-running png image encode does
- not interfere with a lightweight 60fps animation on a low spec
- device (2 core CPU).
-* ## (Stretch) Refactor JPEG and WebP encoder integrations into skia,
- and pass the same test described above with these encoders.
-* ## (Stretch) Ship it
-
-## ImageBitmap (grade: 0.94)
-
-* ## ImageBitmap is transferable to Workers
-* ## ImageBitmaps can be created on Workers
-* ## Calls to createImageBitmap always &lt; 5ms for 1k-by-1k canvas on
- Android One
-* ## Async response always &lt; 300ms for 1k-by1k canvas with no
- animation running (network delays notwithstanding) on Android One
-* ## (Stretch) Ship it
-
-## Ship Display List 2D canvas everywhere (grade: 0.7)
-
-* ## Use Display lists in cases where GPU-acceleration is available
-* ## Google Sheets triggering display list mode on all platforms
-* ## (Stretch) Google Sheets stays in display list mode while
- scrolling the document
-
-## OffscreenCanvas feature implementation (grade: 0.35)
-
-* ## ImageBitmapRenderingContext capable of displaying an ImageBitmap
- without making a copy of the image data
-* ## OffscreenCanvas can be created
-* ## (Stretch) 2D context can be created on an offscreen canvas
-* ## (Stretch) Functional ImageBitmap flow: OffscreenCanvas on a
- worker can transfer rendered content to an
- ImageBitmapRenderingContext on main thread
-
-## Canvas product stability (grade: 0.40)
-
-* ## Eliminate all OOM crashes caused ImageData APIs
-* ## Reduce by 50% 2D context losses caused by GPU context resets
-
-## Support work to start implementing custom paint (grade: 1.0)
-
-* ## Review code and designs for a new canvas rendering context
- interface for custom paint
-* ## (Stretch) Review code for implementation of custom paint
-* ## The Houdini team does not expect to do any work along these lines
- until December at the earliest.
-
-## Support work to define time-to-first paint (grade: 1.0)
-
-* ## This is an OKR to support work by the loading team to improve
- time-to-first-paint metrics. Tracked in crbug.com/520410
-
-## Improve telemetry testing of paint (grade: 0.0)
-
-* ## Add a telemetry test for incremental paint
-* ## Tracked in crbug.com/527189.
-* ## Add a telemetry benchmark to capture pixels
-* ## This will allow us to run pixel diff tests on the top 10k sites
- in Cluster Telemetry. Tracked in crbug.com/536285.
-
-## Q3 2015
-
-Launch compositor thread property trees (grade: 0.5)
-
-* Tracked in crbug.com/481585
-
-* CalcDrawProps not used at runtime
-* Launch in Chrome &lt;=47
-* Stretch: Delete CalcDrawProps and fix unit test dependencies
-* There is a substantial amount of cleanup here, which we should not
- block launch on.
-
-Major progress finishing implementation of Slimming Paint phase 2 (grade: 0.24)
-
-* Tracked in crbug.com/471333
- Fully achieving this OKR will be a stretch!
-
-* New Blink-&gt;cc API complete
-* Tracked in crbug.com/481592
-* Implementation of basic layerization
-* Tracked in crbug.com/472842
- \*Not\* included: smart code to only re-raster or re-build only the parts of
- the layer tree that are needed.
-* Implement "full" display lists in Blink
-* Tracked in crbug.com/472782. Includes property trees, diff
- representation, pixel refs interest rects and RTrees.
-* LayoutObject-based invalidation
-
-Product excellence: improve bug triage and fix rate (grade: 0.6)
-
-* Triage all paint bugs (with label Cr-Blink-Paint or
- Cr-Blink-Paint-Invalidation or paint-related compositor code)
-* Reduce number of unfixed paint bugs by 10%
-
-Remove selection gap painting (grade: 0.40)
-
-* Implement representation of newlines in selection
-* Tracked in crbug.com/474759
-* Remove selection gap painting, & resulting code cleanup
-
-Support implementation of stopping rAF / lifecycle for non-visible, cross-domain
-iframes (grade: 1.0)
-
-* Tracked in crbug.com/487937. Primary implementation seems likely to
- come from scheduler-dev.
-
-Implement OffscreenCanvas (grade: 0.13)
-
-* Synchronous mode of operation (using ImageBitmap) functional for 2D
- contexts.
-* Ship behind experimental flag in M47
-
-Ship canvas filters (stretch) (grade: 0.38)
-
-* Can be used by Swiffy to improve efficiency of Flash-&gt;JS
- conversion of Flash code that uses filters.
-
-* No longer experimental in M47
-* Optimized to apply filter only on the region of interest, in all
- applicable use cases
-
-Refactor 2D canvas (grade: 0.9)
-
-* Remove &gt;1000 lines of code by eliminating dependency on
- SkDeferredCanvas and simplifying ImageBufferSurface
-* Start using display lists for GPU-accelerated canvases by M47
-
-Ship ImageBitmap (stretch) (grade: 0.15)
-
-* ImageBitmap no longer experimental
-* ImageBitmap is transferable to workers
-* ImageBitmap creation is truly async
-
-Accelerate the use of fonts in 2D canvas (grade: 1.0)
-
-* When font was previously used (cache hit), setting the 'font'
- attribute should take &lt; 1 microsecond on all platforms, for all
- use cases
-
-## Q2 2015
-
-Launch Slimming Paint phase 1 (grade: 0.9)
-
-* Tracked in crbug.com/471332
-
-* Launched on all platforms, with no performance regressions
-* Makes the Chrome 45 cut.
-
-Working implementation of Slimming Paint phase 2 (grade: 0.0)
-
-* Tracked in crbug.com/471333
-
-* Complete implementation of display lists
-* Complete crbug.com/472782 and crbug.com/471264.
-* Implement a working version of layerization in the compositor
-* Complete crbug.com/472842
-* Passing 90% of layout tests
-
-Launch property trees for all cc main-thread computation (grade: 1.0)
-
-* M45 or die
-
-* Launched on all platforms, with no performance regressions
-* Complete crbug.com/386810
-
-Design for Custom Paint (grade: 0.8)
-
-* Produce design document
-* Shared with Paint team
- (<https://easyokrs.googleplex.com/view/paint-dev/2015/q2/>). This
- should specify the API, its integration into Blink, fully worked out
- use cases, and an explanation of how it will benefit performance.
-* Flesh out implementation on a branch
-
-Collaborators: blink-houdini, paint-dev
-
-## Q1 2015
-
-Overall Score
-
-* Solid progress towards a well-implemented Phase 1 launch in Q2.
- Phase 2 deliverables were way too aggressively stated.
-
-0.50Implement DisplayItemList backing of existing cc::layers
-
-* 0.60No performance regressions relative to prior system
-* (Score comment: raster performance appears to match, but recording
- is still 25% slower.)
-* 0.00On by default in the Chrome Canary channel for at least the last
- week of the quarter
-* (Score comment: we didn't get this far.)
-* 0.90Passes all layout tests
-* (Score comment: almost all layout tests actually pass, though we
- don't have all of them enabled yet.)
-
-0.43Use property trees for all cc main-thread computation
-
-* 0.00On by default in the Chrome Canary channel for at least one week
- at the end of the quarter
-* (Score comment: we didn't get there yet.)
-* 0.30Finalized design of integration of property trees into display
- list representation
-* (Score comment: we have a design and partial implementation of
- transform trees.)
-* 1.00Passes all layout tests
-* (Score comment: they all pass!)
-
-0.00Make all composited layer decisions in cc
-
-* Stretch: include DisplayItemList diffs from Blink -&gt; cc
- (Score comment: we didn't get there.)
-
-* 0.00Implement initial design behind a flag
-* We didn't get there.
-* 0.00Pass layout tests in the compositing/ directory
-* We didn't get there.
-
-1.00Consider proposals for paint callbacks and decide whether to support
-implementation
-
-* Paint callbacks are part of the "explain css" proposals that are
- part of Glitter.)
- (Score notes: we discussed with the Houdini team about it, and now have much
- better clarity about its design and justification for ergonomics and
- potential performance, along with a Q2 OKR to create a detailed design
- document for the feature.
-
-0.70DevTools timeline invalidation tracking ready for UI review
-
-* (Score comment: implemented but not yet committed.) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/paint-team/paint-team-members/index.md b/chromium/docs/website/site/teams/paint-team/paint-team-members/index.md
deleted file mode 100644
index 8c484e79c48..00000000000
--- a/chromium/docs/website/site/teams/paint-team/paint-team-members/index.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/paint-team
- - Paint Team (paint-dev)
-page_name: paint-team-members
-title: Paint team members
----
-
-Chris Harrelson (chrishtr@) TL
-
-Philip Rogers (pdr@)
-
-Walter Korman (wkorman@)
-
-Tien-Ren Chen (trchen@)
-
-Xianzhu Wang (wangxianzhu@)
-
-Stephen Chenney (schenney@)
-
-Weiliang Chen (weiliangc@)
-
-Canvas subteam:
-
-Justin Novosad (junov@) TL
-
-Ali Juma (ajuma@)
-
-Olivia Lai (xlai@)
-
-Xida Chen (xidachen@)
-
-Adjuncts:
-
-Fredrik Söderquist (fs@opera.com)
-
-Florin Malita (fmalita@) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/rendering/index.md b/chromium/docs/website/site/teams/rendering/index.md
deleted file mode 100644
index bfd53978cae..00000000000
--- a/chromium/docs/website/site/teams/rendering/index.md
+++ /dev/null
@@ -1,440 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: rendering
-title: Rendering Core
----
-
-The rendering core team is a long-term engineering team that owns the overall
-[rendering pipeline](/developers/the-rendering-critical-path) and most of the
-core rendering stages. Specifically style, layout, compositing, and paint. The
-team is also responsible for text, fonts, editing, canvas, images, hit testing,
-and SVG.
-
-The team is made up of contributors from many different companies and see
-regular contributions from many more as well as from individual contributors.
-
-Last updated: Thu Oct 29, 2019 by [Chris](mailto:chrishr@chromium.org)
-
-## Team Charter
-
-The rendering core team is focused on the architectural principles of
-reliability, performance and extensibility of the core rendering technologies of
-the web: HTML, DOM and CSS. We also make sure to satisfy top requests from
-customers. Our primary customers are web developers and other teams within
-Chrome which build features on top of rendering.
-
-## Priorities
-
-### Scalable Performance
-
-* Rendering update performance is proportional to the amount of
- change, and “amount of change” has an intuitive explanation.
-* Rendering performance of a component need not depend on where it's
- put within a containing document, or the size of that document.
-* Rendering performance of a document need not depend on the size of
- components contained within it.
-* Same goes for encapsulation - a component can be included without
- breaking a containing page, and a containing page cannot break a
- component.
-
-### Reliability
-
-* Rendering features work correctly and have rational, understandable
- definitions.
-* Rendering features work the same on all platforms, and on all
- browsers.
-
-### Extensibility
-
-* Web developers can extend the capabilities of Rendering in novel
- ways without performance or ergonomic penalties.
-* Chromium developers can extend or embed the Rendering code in new
- and novel ways without excessive effort or performance penalties.
-
-## Ongoing Projects
-
-List of ongoing major projects owned by the team or involving multiple team
-members.
-
-* **CSS Containment**
- Ongoing work to optimize performance isolation for CSS containment.
-* **[LayoutNG](/blink/layoutng)**, issue
- [591099](https://bugs.chromium.org/p/chromium/issues/detail?id=591099).
- A new layout system for Blink designed with fragmentation, extensibility and
- interruptibility in mind.
- Phase 1 (block flow) launched in M77.
- Further layout modes (tables, flexbox, grid) and block-fragmentation support
- targeted for 2020.
-* **[Composite After
- Paint](https://docs.google.com/document/d/114ie7KJY3e850ZmGh4YfNq8Vq10jGrunZJpaG6trWsQ/view)**
- (CAP), issue
- [471333](https://bugs.chromium.org/p/chromium/issues/detail?id=471333).
- Previously known as Slimming Paint v2. Project to re-implement the
- Blink&lt;-&gt;CC picture recording API to work in terms of a global display
- list rather than a tree of cc::Layers. It will result in a drastic
- simplification of the way that composited layers are represented in Blink
- and cc, which in turn will yield improved performance, correctness and
- flexibility.
-* **src: local() matching**, issue
- [627143](https://bugs.chromium.org/p/chromium/issues/detail?id=627143).
- Font matching and IPC improvements to allow for spec compliant font matching
- and improved web font performance.
-
-## Organization
-
-Team organization and communication.
-
-### Mailing lists
-
-We use a set of public mailing list for technical discussions, questions, and
-announcements. Access is currently limited to subscribers but anyone may join by
-posting to the relevant list or following the web archives links below. Once
-subscribed the full historic archives are available.
-
-* [rendering-core-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/rendering-core-dev)
- Primary list for the team. Used for non-technical and generic technical
- discussions as well as for announcements.
-* [dom-dev@chromium.org](mailto:dom-dev@chromium.org)
-* DOM team-specific list for technical and standards discussions.
-* [style-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/style-dev)
- Style (CSS) specific list for technical and standards discussions.
-* [layout-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/layout-dev)
- Layout, text, and font specific list for technical and standards
- discussions.
-* [paint-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/paint-dev)
- Paint, Compositing, and SVG specific list for technical and standards
- discussions. Also see [this site](/teams/paint-team).
-
-### Weekly Meeting
-
-There is weekly meeting held over video conference on Mondays open to all team
-members, the meeting notes of which are available below and sent out to the
-public mailing list. If you're interested in participating please talk to
-[Chris](mailto:chrishtr@chromium.org) and he'll share instructions.
-
-**Current schedule:**
-
-* Tuesday 10:00 PDT (13:00 EDT, 18:00 BST, 19:00 CEST; Wednesday 02:00
- JST, 03:00 AEST).
-
-Meeting notes are public and are sent to *rendering-core-dev*, they're also
-available in this document: [Meeting
-notes](https://docs.google.com/document/d/1J1E_cAAPVEuwTOEN7nCs8YcDAWclQboV4bfrMG8wBn4/edit?usp=sharing).
-
-### Slack
-
-There is also a set of dedicated slack channels for the team. For logistical
-reasons these are limited to team members and collaborators. Please talk to one
-of the team members and they'll get you added as needed.
-
-### IRC
-
-Many of the team members may also be found in the #chromium channel on freenode.
-
-## Team Members
-
-**Adenilson Cavalcanti** adenilson.cavalcanti - ARM San Jose - Performance
-
-Aleks Totic atotic - Google Mountain View Layout, Paint
-
-Anders Hartvoll Ruud andruud - Google Oslo - Style, Houdini
-
-Chris Harrelson (lead) chrishtr - Google - San Francisco - All areas
-
-David Baron - dbaron - Google Maryland (Remote) - Paint
-
-David Grogan - dgrogan Google San Francisco Layout, Tables, Flexbox
-
-Dominik Röttsches - drott Google Helsinki - Text, Fonts
-
-Fredrik Söderquist fs - Opera Linköping - SVG
-
-Frédéric Wang - fwang - Igalia Paris - Layout, MathML
-
-Ian Kilpatrick (lead) ikilpatrick - Google Mountain View - Layout
-
-Javier Fernandez jfernandez Igalia - A Coruña - Style, Layout, Grid
-
-Joey Arhar jarhar - Google San Francisco - DOM
-
-Kent Tamura tkent - Google Tokyo - Layout, Form controls
-
-Koji Ishii kojii - Google Tokyo - Layout, Text, Fonts
-
-Manuel Rego rego - Igalia Vigo - Layout, Grid
-
-Mason Freed (lead) masonf - Google San Francisco - DOM
-
-Morten Stenshorne mstensho - Google Oslo - Layout, Fragmentation, MultiCol
-
-Oriol Brufau obrufau - Igalia Barcelona - Style, Layout, Grid
-
-Philip Rogers pdr - Google San Francisco - Paint
-
-Richard Townsend richard.townsend - ARM San Jose - Layout, Performance
-
-Rob Buis rbuis - Igalia Hamburg - Layout, MathML
-
-Rune Lillesveen (lead) futhark - Google Oslo - Style
-
-Stefan Zager szager - Google San Francisco - Paint
-
-Steinar H. Gunderson sesse - Google Oslo - Style
-
-Stephen Chenney schenney - Google Atlanta - Paint
-
-Vladimir Levin vmpstr - Google Waterloo - Async
-
-Xianzhu Wang wangxianzhu - Google Mountain View - Paint
-
-Xiaocheng Hu xiaochengh - Google Mountain View - Style
-
-Yoshifumi Inoue yosin - Google Tokyo - Layout
-
-## Contributing
-
-If you're interested in getting involved and contributing to rendering there are
-many ways you could help and we'd love to have you. These range from filing good
-bug reports to creating test cases, reducing and triaging failures, fixing bugs
-and implementing new functionality.
-
-Please see the chromium [getting involved](/getting-involved) guide for generic
-advice and to help you get set up.
-
-A good way to get started is to fix an existing bug. Bug fixes tend to be
-limited in scope, uncontroversial, and easy to evaluate.
-
-Going through the bug database to find a suitable bug is quite a daunting task
-though. To make it a little easier we try to maintain a list of bugs that we
-think are suitable starter bugs. Those bugs are marked with a *GoodFirstBug*
-label. Use the following queries to see *GoodFirstBug* in the [style &
-layout](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Component%3ABlink%3ECSS%2CBlink%3EFonts%2CBlink%3EFullscreen%2CBlink%3ELayout%2CBlink%3ETextAutosize+Hotlist%3DGoodFirstBug+&colspec=ID+Pri+M+Stars+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-and [paint &
-compositing](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Component%3ABlink%3EPaint%2CBlink%3ECanvas%2CBlink%3ECompositing%2CBlink%3ESVG%2CBlink%3EImage%2CBlink%3EHitTesting%2CBlink%3EGeometry+Hotlist%3DGoodFirstBug+&colspec=ID+Pri+M+Stars+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)
-components respectively.
-If you prefer, the following queries will show all open bugs in the respective
-bucket: [style &
-layout](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Component%3ABlink%3ECSS%2CBlink%3EFonts%2CBlink%3EFullscreen%2CBlink%3ELayout%2CBlink%3ETextAutosize&colspec=ID+Pri+M+Stars+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles),
-[paint &
-compositing](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=Component%3ABlink%3EPaint%2CBlink%3ECanvas%2CBlink%3ECompositing%2CBlink%3ESVG%2CBlink%3EImage%2CBlink%3EHitTesting%2CBlink%3EGeometry&colspec=ID+Pri+M+Stars+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles).
-
-## Documentation
-
-For a high-level overview of the rendering pipeline please see the [Life of a
-Pixel](https://www.youtube.com/watch?v=w8lm4GV7ahg) ([slide
-deck](http://bit.ly/lifeofapixel)) talk that Steve Kobes gave a little while
-ago. It gives a very good overview and explains how the different steps in the
-pipeline work and interact with each other.
-
-For more in-depth documentation about specific rendering stages see the relevant
-markdown files checked into the main source tree. The README.md file in each top
-level directory is a good starting point. Some of the key documents are linked
-below.
-
-* [renderer/core/css/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/css/README.md)
-* [renderer/core/dom/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/dom/README.md)
-* [renderer/core/layout/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/layout/README.md)
-* [renderer/core/layout/ng/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/layout/ng/README.md)
-* [renderer/core/paint/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/paint/README.md)
-* [platform/graphics/paint/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/graphics/paint/README.md)
-* [platform/fonts/README.md](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/platform/fonts/README.md)
-
-[Debugging Blink
-objects](https://docs.google.com/document/d/1vgQY11pxRQUDAufxSsc2xKyQCKGPftZ5wZnjY2El4w8/edit#heading=h.8x8n9x5rkr0)
-
-[Debugging Firefox/Gecko
-objects](https://docs.google.com/document/d/1TMckMPNHk_XGZJUCUQi8IW3rtr03-6LHs_4UGSG4H_M/edit)
-
-## Design Documents
-
-Each new feature and all major projects require a design document before the
-implementation work may commence. These documents are updated during the
-implementation phase and provides a detailed explanation of the feature or
-project as well as the history and the motivation.
-
-Please add new design documents to the bottom of this list. Make sure they're
-world readable and, if possible, grant comment privileges to
-*edit-bug-access@chromium.org* rather than *Anyone with a chromium.org account*
-as not all contributors have *chromium.org* accounts.
-
-* [LayoutUnit & Subpixel
- Layout](https://trac.webkit.org/wiki/LayoutUnit) (2012)
-* [Line Box float -&gt; LayoutUnit transition
- plan](https://docs.google.com/a/chromium.org/document/d/1fro9Drq78rYBwr6K9CPK-y0TDSVxlBuXl6A54XnKAyE/edit)
- (2014)
-* [Blink Coordinate
- Spaces](/developers/design-documents/blink-coordinate-spaces) (2015)
-* [Eliminating Simple
- Text](/teams/layout-team/eliminating-simple-text) (2015)
-* [LayoutObject Tree API
- Proposal](https://docs.google.com/document/d/1qc5Ni-TfCyvTi6DWBQQ_S_MWJlViJ-ikMEr1FSL0hRc/)
- (2015)
-* [Using Zoom to Implement Device Scale
- Factor](https://docs.google.com/document/d/1CZSCPzOYujdUMyChocwzOBPKxYAoTsEoezMye30Hdcs/)
- (2015)
-* [Unprefix CSS Writing
- Modes](https://docs.google.com/document/d/1lGrcTSlKMDeOEKZbHqvdLnW_Soywn7oICci2ApBXB00/edit?usp=sharing)
- (2015)
-* [Slimming Paint](/blink/slimming-paint) (2016)
-* [LayoutNG](https://docs.google.com/document/d/1uxbDh4uONFQOiGuiumlJBLGgO4KDWB8ZEkp7Rd47fw4/)
- (2016)
-* [Scroll Anchoring](http:////bit.ly/scroll-anchoring) (2016)
-* [Shaper Driven Line
- Breaking](https://docs.google.com/document/d/1eMTBKTnWEMDu00uS2p8Xj-l9Pk7Kf0q5y3FbcCrWYjU/)
- (2016)
-* [Hyphenation in
- Blink](https://docs.google.com/document/d/1ZgMnNxYxvPJYMOeyxJs8MsfGMNFiDKrz64AySxlCzpk/edit?usp=sharing)
- (2016)
-* ["system-ui" generic font
- family](https://docs.google.com/document/d/1BI0OiWRUvsBOuPxPlF5J-_xtUZ49eVDUEXZXoF32ZcM/edit?usp=sharing)
- (2016)
-* [Using ICU BiDi in
- LayoutNG](https://docs.google.com/document/d/1GXtjMXE46IFDXUdzyUAY2_yzZ3tJoiuYPV15e5xtGeE/edit?usp=sharing)
- (2016)
-* [Root Layer
- Scrolling](https://docs.google.com/document/d/137p-8FcnRh3C3KXi_x4-fK-SOgj5qOMgarjsqQOn5QQ/)
- (2017)
-* [Baseline in LayoutNG](/) (2017)
-* [Offset Mapping between DOM/Canonical
- Text](https://docs.google.com/document/d/1voI52vA1_UdaDxJ0QNzbXKeu4MQQcsgaCKdWyECvwq8/)
- (2018)
-* [IntersectionObserver](https://docs.google.com/document/d/1MWXTJhtvB7FvF3SrlOD7IwLMVyj5zx_0NLDWNe0qYmI/)
- (2018)
-* [Style Update
- Roots](https://docs.google.com/document/d/1aMwREBUbPr-eE1_M4XuBGWZs3GuFrxWBr8f6o9-HaOs/)
- (2018)
-* [Caret Position Bidi
- Affinity](https://docs.google.com/document/d/1SyryaZ304uxVgwW2Hf3gGnq4_h1QqT3Jz9h-etqud1o/)
- (2018)
-* [Style Memory
- Improvements](https://docs.google.com/document/d/1cgtF8VVNGdXQmCdvOs34vLLA1bFWHPfZRZtm5nEY7bs)
- (2018)
-* [Paint Touch-Action
- Rects](https://docs.google.com/document/d/1ksiqEPkDeDuI_l5HvWlq1MfzFyDxSnsNB8YXIaXa3sE/view)
- (2018)
-* [Blink-generated property trees
- (BlinkGenPropertyTrees)](https://docs.google.com/document/u/1/d/17GKr2uIH2O5GthdTyvJpv1qZjoHYoLgrzvCkbCHoID4/)
- (2019)
-* [Unified ComputedStyle
- Storage](https://docs.google.com/document/d/12c8MKqitZBdhSORSVJuQOrar-XdY8VERthLKAO7muUk/)
- (2019)
-* [Flat Tree Order Style
- Recalc](https://docs.google.com/document/d/1tjKznu6K-B3TfRHxApsPYXYM7FyIXg9Xg2wWcOmStNU)
- (2019)
-* [StyleResolver
- Cascade](https://docs.google.com/document/d/1HrmPmcQBTUMouqQQG3Kww43I5aFW9-Q9tr-DEKZk09I)
- (2019)
-* [Skip Forced Style Update on Parsing
- Finished](https://docs.google.com/document/d/1KdMCXjHP6ynCV2vP84mJIBmnWPS5y99uDq7Fed3ogQA/edit#heading=h.v9as6odlrky3)
- (2019)
-* [Paint Non-fast Scrollable
- Regions](https://docs.google.com/document/d/1IyYJ6bVF7KZq96b_s5NrAzGtVoBXn_LQnya9y4yT3iw/view)
- (2019)
-* [LayoutNG block
- fragmentation](https://docs.google.com/document/d/1EJOdFesZKspvrU7uWtGl-8ab2jIrzRF6NKJhwYOs6hU/)
- (2019)
-* [Moving out from
- NGPaintFragment](https://docs.google.com/document/d/1O6u2BWhvjsT_dkqQZPftmqZ-qgBqxGlA2ZyLh_xBpgQ/edit?usp=sharing)
- (2019)
-* [NGFragmentItem](https://docs.google.com/document/d/10vJ6wdyEdeGkmcotKBZ9h3YtDzw5FIpDksa8rCHVFuM/)
- (2019)
-* [CSS min/max](http://bit.ly/31Yfkm6) (2019)
-* [MathML](https://docs.google.com/document/d/1biGEaWN8ThNTDtAbT1M5GIf6N5uQLWdxh2QhrG9uN5c/edit)
- (2019)
-* [@font-face Loading and Full Document Style
- Invalidation](http://bit.ly/35JjPmq) (2020)
-* [Jankless ‘font-display: optional’](https://bit.ly/36E8UKB) (2020)
-* [Reduce MediaQuery RuleSet
- changes](https://docs.google.com/document/d/1TMqAq4k3aTHNH1m2sYoj-5QAndNmEXLI1QeD-oQ7jWE/edit#heading=h.6kknmf22ixwc)
- (2020)
-* [FastBorderRadius](https://docs.google.com/document/d/1bYuKa_X9faxHTs6B5OjE4n92ytP8CrEToeuBE4Mr7hI/edit)
- (2019/2020)
-* [Improving UKM Client
- Counts](https://docs.google.com/document/d/1P49GrDe3mDDV9Q1yUm27ioWE4m1_Zz1FwRwVwGQh-ZI/edit?usp=sharing)
- (2020)
-* [Ensuring Rendering of Sub-pixel
- Borders](https://docs.google.com/document/d/1fAYkOFxp2Luh6OOoXxtwOehmvNRGNss58ibQtVXL0Tw/edit?usp=sharing)
- (2020)
-* [Metrics for HTML
- Parsing](https://docs.google.com/document/d/1zWlnQELDePFJBz105RgjjgPCkDN7quiVOHSWzNMf-DU/edit?usp=sharing)
- (2020)
-* [Improving Tracking of Web Test
- Changes](https://docs.google.com/document/d/1SCKmT1S7HmoaZFYThqXiqrQJvQPikUfV6mwwXbW7Bk4/edit?usp=sharing)
- (2020)
-* [Dependency-Aware
- MatchedPropertiesCache](https://docs.google.com/document/d/1uJSpTD9mAgFGljMaQzTvjFKzsvAv1yRJ15M0ZPzAVbo)
- (2020)
-* [Tree-scoped names in
- CSS](https://docs.google.com/document/d/1NY1GmSeAhpYMdZ2Jd581aT-Dr3DDIb8-pc5YGiBTm5E/)
- (2020)
-* [Base background for
- color-scheme](https://docs.google.com/document/d/1yTsrWTf5qWS7rVytSunSBEXrVO_j5gYu7xlzFsPENxk/)
- (2020)
-* [Interleaved Style and
- Layout](https://docs.google.com/document/d/1mpN2I0KYVmIoB8LfSV3pzPAoqGBIrubybHPzrhc2dxA)
- (2020)
-* [Resolving Container
- Queries](https://docs.google.com/document/d/17pymtoSq1WIP6mSQj-fSPU_3EdeB0AfjdTq38bYW574)
- (2020)
-* [SVG Text
- NG](https://docs.google.com/document/d/1GOPKXsAMyKBCcTlByEwGHdu6QuG6YTd_mDwOX8z9S2c/edit?usp=sharing)
- (2021)
-
-Presentations
-
-* [Display
- Locking](https://docs.google.com/presentation/d/12IOGoBZS5kSX6CYb01904ZKuMhjKS2Q6O-hx9jTmvA8/edit#slide=id.p)
- (vmpstr, Jan 2020)
-* [Font
- performance](https://docs.google.com/presentation/d/123_mQWrDoNbpMQ4bXiHaJT_lli-Vy2DLY8aRp1aC2jU/edit#slide=id.p)
- (xiaochengh, Feb 2020)
-* [Canvas](https://docs.google.com/presentation/d/12nR0gKSynGIfmeT5iIEU9LOg-4nXe8xgQ9Q8VAFqL8w/edit)
- (fserb, Feb 2020)
-* [Compositing
- memory](https://docs.google.com/presentation/d/1_8PLdXVUPclq7aiWnTU7UES43NMjaUnRBbQYypmqrQQ/edit#slide=id.p)
- (pdr, Feb 2020)
-* [Portals](https://docs.google.com/presentation/d/1UYQe9jOysS2zX1yyiqP-LOxJdo-elC0grP-xUbVBtxY/edit?usp=sharing)
- (lfg, Feb 2020)
-* [FlexNG](https://docs.google.com/presentation/d/10e7bnBrkpNJj8aQXiofCJCslWpPtlxZyt7wZIw9NQrg/edit)
- (dgrogan, Mar 2020)
-* [Scrolling](https://docs.google.com/presentation/d/1cQZLTKzUWD2O0fUQhwaL4DbRckPPNiOjDqwfPYQzoDc/edit?usp=sharing)
- (samfort@microsoft, Mar 2020)
-
-Google-internal design documents (aim is to migrate them to the list above; on
-request we can try to make part/all public)
-
-[Font Matching by Full Font
-Name](https://docs.google.com/document/d/1yCZwVIF39S8WOgCUraT5OuUUaLSqWrxoG3mqdtnHnhs/edit#)
-(2019)
-
-## Bug & Triage Policy
-
-The rendering core team is responsible for all bugs for the components listed
-below, including sub-components . Our policy is that all new bugs are to be
-triaged within a week of being filed and all P-0 and P-1 bugs are to be fixed in
-time for the next release. Failures to meet the policy is tracked in our weekly
-meeting and shared as part of the meeting notes
-
-### Policy
-
-1. Triage all bugs within 7 days.
-2. Fix P0 bugs within 15 days.
-3. Fix P1 regression bugs within 15 days.
-4. Re-triage all bugs every 365 days.
-
-### Links
-
-* [Tracking
- Spreadsheet](https://docs.google.com/spreadsheets/d/1mQ4b1cpy78wFKahKfzJl-4LUYeygAHyGaMGoZKnD_0U/)
-* [Process &
- Metrics](https://docs.google.com/document/d/1KncD2BSs9YnPt90DHSkoxttxyvG3yT79_9MXyMWN1Ok/edit#heading=h.mlb5a7a4vqj0)
-* [Test
- Flakiness](https://test-results.appspot.com/dashboards/flakiness_dashboard.html#testType=webkit_layout_tests)
-* [Working with release branches](/developers/how-tos/drover)
-
-## Related Teams
-
-* [Input](/teams/input-dev)
-* [Animations](/teams/animations) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/rendering/okrs/2020-q1/index.md b/chromium/docs/website/site/teams/rendering/okrs/2020-q1/index.md
deleted file mode 100644
index 4fb26cc0885..00000000000
--- a/chromium/docs/website/site/teams/rendering/okrs/2020-q1/index.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/rendering
- - Rendering Core
-- - /teams/rendering/okrs
- - OKRs
-page_name: 2020-q1
-title: 2020-q1 OKRs
----
-
-* Avoid double rendering and layout shift for ‘font-display:
- optional’. crbug.com/1040632
- * EOQ score: 0.7
-* Reduce style invalidation/recalc on @font-face loading. Ship
- improvements in M82. crbug.com/441925
- * EOQ score: 0.8
-* Fix remaining test failures for BlockHTMLParserOnStyleSheets.
- crbug.com/891767.
- * EOQ score: 0.95
-* Prototype relaxing parser yielding heuristics. crbug.com/1041006
- * EOQ score: 0.95
-* Add UMA metrics for cumulative parsing time, broken down by C++ and
- JS, and cumulative amount of time spent hit testing or
- forced-layout-ing before FCP
- * EOQ score: 0.95
-* Experimentally determine impact of compositing cross-origin iframes.
- Use results to decide next steps for isInputPending and Multiple
- Blink Isolates
- * EOQ score: 0.7
-* Add UMA and UKM for shaper font stack traversal depth.
- crbug.com/1045571
- * EOQ score: 0
-* Decide whether we can ship prefer-compositing-to-lcd-text.
- crbug.com/984346
- * EOQ score: 0.5
-* Support directly composited images with CompositeAfterPaint.
- crbug.com/875110
- * EOQ score: 0.8
-* Ship smarter RuleSet media query invalidation in M83. Fix issues
- 1014920 and 589083
- * EOQ score: 1
-* Fix all remaining test failures when CompositeAfterPaint is on. This
- includes the remaining paint-related. crbug.com/471333
- * EOQ score: 0.7
-* Improve perf of subsequence caching, removing CompositeAfterPaint
- paint regression. crbug.com/917911
- * EOQ score: 0
-* Add support to IntersectionObserver for clipping an explicit root.
- crbug.com/1015183
- * EOQ score: 1
-* Reduce failures to zero for FragmentItem. crbug.com/982194
- * EOQ score: 1
-* Enable LayoutNG for form controls. crbug.com/1040826,
- crbug.com/1040828
- * EOQ score: 0.7
-* Implement and ship PaintArtifactSquashing in M83. Fix
- https://crbug.com/548184.
- * EOQ score: 0.5
-* Ship text-decoration-width & text-underline-offset in M83.
- crbug.com/785230
- * EOQ score: 0.1
-* Remove all DisableCompositingQueryAsserts for CompositeAfterPaint.
- crbug.com/1007989
- * EOQ score: 0.6
-* Compute correct wheel event handler regions for cc.
- crbug.com/841364.
- * EOQ score: 0
-* Fix Mac OS 10.15 system font narrow rendering regression, ship to
- M81. crbug.com/1013130
- * EOQ score: 0.8
-* Reliable layout testing for new Mac OS versions, fonts tests
- rebaselined for 10.14 bot. crbug.com/1028242
- * EOQ score: 1
-* Ship plan to navigate in M82. crbug.com/1013385
- * EOQ score: 0.9
-* Refactor of the line-breaking logic to allow breaking after spaces
-* Change CSS transform implementation and spec to match Firefox's
- implementation. crbug.com/1008483
- * EOQ score: 0.25
-* Spec ink overflow concept for IntersectionObserver.
- crbug.com/1045596
- * EOQ score: 0
-* GridNG: design doc, commits landed. crbug.com/1045599
- * EOQ score: 0.1
-* Ship Root element compositing changes in M81
- * EOQ score: 1
-* Ship Style Cascade project in M82. crbug.com//947004
- * EOQ score: 1
-* Ship color-scheme CSS property and meta tag in M81
- * EOQ score: 1
-* Ship selector() for @supports. crbug.com/979041
- * EOQ score: 1
-* Ship ::marker pseudo element.crbug.com/457718
- * EOQ score: 0.9
-* Implement and ship imperative slotting API in M83. crbug.com/869308
- * EOQ score: 0.
-* Declarative shadow DOM. crbug.com/1042130
- * EOQ score: 0.9
-* Form Controls Refresh
- * EOQ score: 0.75
-* TablesNG. crbug.com/958381
- * EOQ score: 0.75
-* FlexNG. crbug.com/845235
- * EOQ score: 1
-* FragmentationNG. crbug.com/829028
- * EOQ score: 0.7
-* Ship contain-intrinsic-size CSS property in M82. crbug.com/991096
- * EOQ score: 1
-* Ship render-subtree: invisible & render-subtree: invisible
- skip-activation in M82
- * EOQ score: 0.5
-* Origin Trial for render-subtree: skip-viewport-activation and
- activation event in M82
- * EOQ score: 0.5
-* Bug, triage, stars metrics
- * EOQ score: 0.4
-* Ship pixel-snapped ResizeObserver rects for Canvas
- * EOQ score: 0.5
-* Prototype composited clip path animations. crbug.com/686074
- * EOQ score: 0
-* Ship @property in M82. crbug.com/973830
- * EOQ score: 0.1
-* Ship multiple parts in ::part() in M82
- * EOQ score: 1
-* Fix font cache lifecycle, runaway font memory consumption during
- animation, stable variable font animations without OOM in M82.
- crbug.com/1045667
- * EOQ score: 0.8
-* Ship minimal named pages support in M83
- * EOQ score: 0.5
-* Prototype aspect-ratio CSS property. Partner with AMP and
- render-subtree project on use-cases. crbug.com/1045668
- * EOQ score: 0.6
-* Ship CSS filters on SVG. crbug.com/109224
- * EOQ score: 0.6
-* Ship clip-path etc via external SVG resource. crbug.com/109212
- * EOQ score: 0.6
-* Ship ‘revert’ keyword. crbug.com/579788
- * EOQ score: 0.9
-* Incremental progress implementing custom Layout API.
- crbug.com/726125
- * EOQ score: 1
-* Implement flexbox row-gap and column-gap in legacy and NG.
- crbug.com/762679
- * EOQ score: 0.1
-* Investigate possible APIs and solutions to container queries
- * EOQ score: 0.1
-* Implement input.rawValue prototype, and send Intent-to-Prototype.
- crbug.com/1043288
- * EOQ score: 0.75
-* Finish CSS Scoping study. Finish the “problem statement” document,
- the “proposals” document, and gather feedback on both.
- crbug.com/1045645
- * EOQ score: 0.7 \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/rendering/okrs/2020-q2/index.md b/chromium/docs/website/site/teams/rendering/okrs/2020-q2/index.md
deleted file mode 100644
index be5e7cb98eb..00000000000
--- a/chromium/docs/website/site/teams/rendering/okrs/2020-q2/index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/rendering
- - Rendering Core
-- - /teams/rendering/okrs
- - OKRs
-page_name: 2020-q2
-title: 2020-q2 OKRs
----
-
-* Avoid double rendering and layout shift for ‘font-display:
- optional’. crbug.com/1040632
-* Reduce invalidation/recalc on @font-face loading. Ship improvements
- in M83. crbug.com/441925
-* Ship BlockHTMLParserOnStyleSheets. crbug.com/891767
-* Try to relax parser yielding heuristics. crbug.com/1041006
-* Find out why PaintHolding is faster. crbug.com/1069799
-* Add Tests for Input-Suppression. https://crbug.com/1001189, https://
- crbug.com/1014110
-* Align default font timeouts with LCP goal. crbug.com/1065508
-* Optimize stylesheet RuleSet invalidation. crbug.com/1065381
-* Composited clip path animations. crbug.com/686074
-* Remove DisableCompositingQueryAsserts for CompositeAfterPaint.
- crbug.com/1007989
-* Land directly composited images with CompositeAfterPaint.
- crbug.com/875110
-* Decide whether we can ship prefer-compositing-to-lcd-text.
- crbug.com/984346
-* On-track to launch AssumeOverlapAfterFixedOrStickyPosition in M84.
- crbug.com/752756
-* CompositeAfterPaint: fix all remaining test failures.
- crbug.com/471333
-* MatchedPropertiesCache optimizations. crbug.com/1057072
-* Understand post-load friction metrics for style.
-* Independent inheritance for custom properties. crbug.com/1056209
-* Fix font cache lifecycle, runaway font memory consumption during
- animation.
-* Reliable measurement of shaper font stack traversal depth
-* Use experiment to determine impact of compositing cross-origin
- iframes. https://crbug.com/1062432, https://crbug.com/1060452
-* Optimize imperative slot distribution algorithm for adding slots.
- crbug.com/985652
-* Ship FragmentItem. crbug.com/982194
-* Compute correct wheel event handler regions for cc. crbug.com/841364
-* Complete implementation of plan to navigate. crbug.com/1053679
-* Get consensus on unifying &lt;select&gt; popup on Mac and non-Mac.
- crbug.com/1009905, and crbug.com/422960
-* Web Components v0 Removal
-* Get resolution on ::part() and :state() syntax
-* TablesNG. crbug.com/958381
-* Grid refactoring
-* Move 6 cc::Layer setters post-paint. crbug.com/1069546
-* Turn on use-zoom-for-dsf by default on MacOS. crbug.com/716231
-* Spec ink overflow
-* Adopt Gecko semantics for 3D CSS rendering. crbug.cm/1008483.
-* Remove @import support from CSSStyleSheet.replace() and
- replaceSync(). crbug.com/1055943
-* EditingNG. crbug.com/707656
-* FlexNG. crbug.com/845235
-* Fix Mac OS 10.15 system font rendering regression. crbug.com/1057654
-* Ship imperative slotting. crbug.com/869308
-* Declarative shadow DOM. crbug.com/1042130
-* Form Controls Refresh. crbug.com/1042127, crbug.com/1051552
-* Form Controls Refresh Android / Dark Mode. crbug.com/970285
-* Implement and ship beforematch. eventcrbug.com/1055002
-* More stylable form controls
-* Constructable stylesheets
-* AdoptedStyleSheets use ObservableArray
-* Spec and implement cross-tree-scope handling of @-rules.
- https://github.com/w3c/csswg-drafts/issues/1995
-* Ship @property. crbug.com/973830
-* attr(). crbug.com/246571
-* Ship ::marker pseudo element. crbug.com/457718
-* RubyNG. crbug.com/1069817
-* Custom state pseudo class
-* FragmentationNG. crbug.com/829028
-* Ship minimal named pages support, plus page-orientation descriptor.
- crbug.com/1053768
-* Aspect-ratio layout. crbug.com/1045668
-* Review and design collaboration for Font Enumeration and Table
- Access
-* Implement and ship to Beta text-decoration-width &
- text-underline-offset (+ support MVAR variable font underline
- metrics)
-* Prototype usage and content rendering of COLR-gradient font
-* Improve text quality by using more LCD text. crbug.com/642885
-* Ship CSS filters for SVG. crbug.com/109224Ship clip-path, filter,
- mask, etc via external SVG resource. crbug.com/109212
-* Implement ParentNode.prototype.replaceChildren. crbug.com/1067384
-* Other things for frameworks. Re-parenting iframes?
-* Resolve whether to implement or drop input.rawValue.
- crbug.com/1043288
-* Get public feedback on CSS Scoping proposal.
-* Unify StyleForElement and PseudoStyleForElement
-* LayoutNG ratio metrics. crbug.com/1067527
-* Easier usage of Noto Color Emoji on Linux. crbug.com/767754
-* Reduce paint test flakiness by 50% \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/rendering/okrs/index.md b/chromium/docs/website/site/teams/rendering/okrs/index.md
deleted file mode 100644
index 61521e8f115..00000000000
--- a/chromium/docs/website/site/teams/rendering/okrs/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-- - /teams/rendering
- - Rendering Core
-page_name: okrs
-title: OKRs
----
-
-[Q1 2020](/teams/rendering/okrs/2020-q1) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/speed-metrics-team/index.md b/chromium/docs/website/site/teams/speed-metrics-team/index.md
deleted file mode 100644
index 9c8d068f746..00000000000
--- a/chromium/docs/website/site/teams/speed-metrics-team/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: speed-metrics-team
-title: Speed Metrics Team
----
-
-## Our site has moved to <https://chromium.googlesource.com/chromium/src/+/HEAD/docs/speed_metrics/README.md> \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/style-team/index.md b/chromium/docs/website/site/teams/style-team/index.md
deleted file mode 100644
index b42d5a5e36c..00000000000
--- a/chromium/docs/website/site/teams/style-team/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: style-team
-title: Style Team
----
-
-The style team has been subsumed into the new [rendering
-core](//chromium.org/teams/rendering) team. Please see the rendering core page
-for details about ongoing style work.
-This page is preserved for posterity and will no longer be updated.
-
-Primary contacts: meade@chromium.org, suzyh@chromium.org
-
-## Team Charter
-
-The Style team is a group of engineers, working at Google (Sydney and Tokyo),
-Opera (Oslo) and Samsung. We are tasked with improving the style engine in
-Blink. Our responsibility is to maintain and improve style resolution and
-application (core/css/resolver, core/style), as well as the other parts of CSS
-(core/css).
-The Style Team triages bugs with the components Blink&gt;CSS.
-
-## 2017 Goals
-
-* Explore and improve performance predictability
-* Refactor style engine to be more feature oriented
-* Ship CSS Typed OM
-* Improve interoperability of Web Animations with Mozilla
-
-## Eternal goals
-
-* Maintain ‘code health’ by improving and optimizing style components
- (CH).
-* Maintain ‘feature health’ (FH).
- * Interface with the rendering steering team to help decide
- whether to either accept and implement, or reject proposed CSS
- features.
-* Triage CSS issues as they arise (and eliminate the
- [backlog](https://code.google.com/p/chromium/issues/list?can=2&q=Cr%3DBlink-CSS+&colspec=ID+Pri+M+Week+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles)).
-* Maintain existing features as necessary.
-* Improve knowledge of feature usage and deprecate rare and expensive
- feature.
-
-**Team members**
-
-meade@chromium.org, suzyh@chromium.org (TLs and OWNERs)
-alancutter@chromium.org (OWNER)
-
-bugsnash@chromium.org, shend@chromium.org, nainar@chromium.org,
-jiameng@chromium.org, ericwilligers@chromium.org, rjwright@chromium.org
-
-**Links**
-
-[Docs](http://blink.style/docs)
-
-[CL best
-practices](https://docs.google.com/document/d/1Zk3y699NTmH96qEDvofiUHbTckHJbkT8t3vY6ker3z0/edit?ts=590a6e7b#)
-
-Last updated: May 2017 \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/web-capabilities-fugu/index.md b/chromium/docs/website/site/teams/web-capabilities-fugu/index.md
deleted file mode 100644
index fe47edb9a01..00000000000
--- a/chromium/docs/website/site/teams/web-capabilities-fugu/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: web-capabilities-fugu
-title: "Web Capabilities (Project Fugu \U0001F421)"
----
-
-**Overview**
-
-Project Fugu 🐡 is an effort to close gaps in the web's capabilities enabling new
-classes of applications to run on the web. The developer-friendly landing page
-of the project is <https://web.dev/fugu-status/>. The list of in-process APIs is
-available at <https://goo.gle/fugu-api-tracker>.
-APIs that Project Fugu is delivering enable new experiences on the web while
-preserving the web's core benefits of security, low-friction, and cross-platform
-delivery. All Project Fugu API proposals are made in the open and on the
-standards track.
-Fugu is organized as Chromium project, open to all Chromium contributors and
-organizations. Today, that includes Microsoft, Intel, Samsung, and Google (among
-others). Fugu Leads triage incoming requests from partners, determine demand,
-prioritize them, find champions, track development, and help organize the
-release and documentation for the capability.
-
-#### Bridging the native app gap (Chrome Dev Summit 2019)
-
-**Contacts**
-
-Mailing List:
-[fugu-dev@chromium.org](https://groups.google.com/a/chromium.org/forum/#!forum/fugu-dev)
-
-Slack Channel: #fugu on [@chromium](https://chromiumdev.slack.com/)
-
-**Capability Process**
-
-[Guideline and
-template](https://docs.google.com/document/d/1kzNch5P6lLcHm2ER7YOCJQG4OGY4XttJ42FDn-2vdO0/edit#heading=h.hsplb8xxfif5):
-This is the guideline and template to be used by Chrome developers who are about
-to introduce a new capability. It outlines the process and when to reach out to
-specific people.
-
-[DevRel Process for Fugu
-Capabilities](https://docs.google.com/document/d/1qy-XmiCIu6QP1bbEAqfCAZQ65q5F9I6OJKvUgYLQ4GU/edit#):
-A guide on how we will approach Fugu capabilities, including how we gather
-developer demand, externalize our steps, and generate blog posts / tutorials.
-
-[Developer Updates Status
-page](https://developers.google.com/web/updates/capabilities): Public list
-showing the status of current capabilities.
-
-**Specific Capabilities & Prioritization model**
-
-We prioritize capabilities by which partners we enable or improve by a given
-capability.
-
-[Full list of
-capabilities](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=proj-fugu&sort=pri&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids):
-Every capability that is currently considered as part of Fugu
-
-[Bug Tracking
-Process](https://docs.google.com/document/d/1bAcLkqbEQJEphmjvnguB7WxltT_zEEXrUlwawpbrCNQ/edit?usp=sharing):
-Information on how we track bugs & partners through crbug, as well as the
-meaning of different labels
-
-**Monthly Meetings**
-
-To share updates on capabilities work and discuss opportunities and priorities,
-we have monthly video chat meetings. The meetings are open to all Chromium
-contributors working on Fugu capabilities, regardless of affiliation. Note that
-these meetings tend to be high level, and don't dive into technical details. For
-an invite to the meeting ask on the #fugu channel on chromium.slack.com or email
-fugu-dev@chromium.org. Agendas for upcoming meetings and notes for past meetings
-are captured in a shared [Notes
-Doc](https://docs.google.com/document/d/1vC2IRBel2PIahJLE1Mrnd4nm0OMvWDQcKUQSsfxMFBY/edit#) \ No newline at end of file
diff --git a/chromium/docs/website/site/teams/worker-team/index.md b/chromium/docs/website/site/teams/worker-team/index.md
deleted file mode 100644
index 8359b444db2..00000000000
--- a/chromium/docs/website/site/teams/worker-team/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-breadcrumbs:
-- - /teams
- - Teams
-page_name: worker-team
-title: Worker Team
----
-
-The Blink Worker team works on Worker Threads in Blink, including [Service
-Worker](/blink/serviceworker), Shared Worker, and Dedicated Worker.
-
-**Charter**
-
-Our team's responsibility is to own, evolve and maintain
-(Dedicated/Shared/Service)Worker and Worklet infrastructure:
-
-* core/workers/\*
-* modules/serviceworker/\*
-* content/\*/\*worker\*
-
-**Docs**
-
-* [Web Workers in Blink (Google
- Doc)](https://docs.google.com/document/d/1i3IA3TG00rpQ7MKlpNFYUF6EfLcV01_Cv3IYG_DjF7M/edit#heading=h.7smox3ra3f6n)
-* [Service Workers: deep dive (BlinkOn4
- slides)](https://docs.google.com/presentation/d/15bHnAocAoSxYJAsF5JET34zMbzlxkc_NKGmP9BamqsM/edit#slide=id.g9e4def4c1_0_35)
-
-**Mailing list**
-
-worker-dev@chromium.org \ No newline at end of file
diff --git a/chromium/docs/website/site/testing-chrome-ad-filtering/index.md b/chromium/docs/website/site/testing-chrome-ad-filtering/index.md
deleted file mode 100644
index f6eb1df4047..00000000000
--- a/chromium/docs/website/site/testing-chrome-ad-filtering/index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-breadcrumbs: []
-page_name: testing-chrome-ad-filtering
-title: Testing Chrome Ad Filtering
----
-
-## Context
-
-On February 15, 2018, Chrome will [stop showing
-ads](https://blog.chromium.org/2017/06/improving-advertising-on-web.html) on
-websites that are not compliant with the [Better Ads
-Standards](http://betterads.org/standards). In order for site owners to
-understand the impact that this would have on their site, they can test the
-functionality by forcing this filtering to be active while they have Chrome's
-DevTools open. However, this behavior would normally only take effect on sites
-found to be noncompliant with the Standards for more than 30 days.
-
-These instructions apply for Chrome on Windows, Mac, Linux, and Chrome OS.
-
-## Instructions
-
- Open Chrome's DevTools: click the three dots <img alt="image"
- src="https://lh5.googleusercontent.com/S9E6omee_U2PEMfYgQvqjF1t4sTnX8zzqO2BoCJnW1CWR3GUFPKo2l5F-W9DpTzHXJwfgKAgQlpYV8_ZjQI0-IOxfpxZ3FgBaMEgHEFgrxg-MnK_maDuC16P-x2vQcbj1Xr9yKeL"
- height=26 width=20>menu in the upper right corner of Chrome, and select More
- tools -&gt; Developer tools. Alternatively, you can open DevTools by
- pressing Command+Option+I (Mac) or Control+Shift+I (Windows, Linux).
-
- In the new panel that opens, click the three dots <img alt="image"
- src="https://lh5.googleusercontent.com/S9E6omee_U2PEMfYgQvqjF1t4sTnX8zzqO2BoCJnW1CWR3GUFPKo2l5F-W9DpTzHXJwfgKAgQlpYV8_ZjQI0-IOxfpxZ3FgBaMEgHEFgrxg-MnK_maDuC16P-x2vQcbj1Xr9yKeL"
- height=26 width=20>menu and select Settings
-
- Under Network, check Force ad blocking on this site
-
- Try loading pages, leaving the DevTools panel open. If the DevTools panel is
- closed, ad blocking will cease to function. \ No newline at end of file
diff --git a/chromium/docs/website/site/throttling/anti-ddos-http-throttling-in-older-versions-of-chrome/index.md b/chromium/docs/website/site/throttling/anti-ddos-http-throttling-in-older-versions-of-chrome/index.md
deleted file mode 100644
index e069a3e537c..00000000000
--- a/chromium/docs/website/site/throttling/anti-ddos-http-throttling-in-older-versions-of-chrome/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-breadcrumbs:
-- - /throttling
- - Anti-DDoS HTTP Throttling of Extension-Originated Requests
-page_name: anti-ddos-http-throttling-in-older-versions-of-chrome
-title: Anti-DDoS HTTP Throttling in Older Versions of Chrome
----
-
-Chrome 12 through Chrome 19 had anti-DDoS HTTP throttling not only for requests
-originating from extensions, but for normal web page requests as well. To
-disable throttling in versions of Chrome up to 20.0.1115.2: Type
-**chrome://net-internals/#httpThrottling** into the address bar and uncheck the
-checkbox labeled "Throttle HTTP requests if the server has been overloaded or
-encountered an error." \ No newline at end of file
diff --git a/chromium/docs/website/site/throttling/index.md b/chromium/docs/website/site/throttling/index.md
deleted file mode 100644
index abd46d7ed7b..00000000000
--- a/chromium/docs/website/site/throttling/index.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-breadcrumbs: []
-page_name: throttling
-title: Anti-DDoS HTTP Throttling of Extension-Originated Requests
----
-
-Chrome 20 and later implements a mechanism that is intended to prevent
-distributed denial of service (DDoS) attacks from being perpetrated, maliciously
-or accidentally, by extensions running within Chrome. Chrome 12 through 19 had a
-different flavor of this feature, see
-[here](/throttling/anti-ddos-http-throttling-in-older-versions-of-chrome).
-
-To disable the feature, which may be useful for some extension developers: Pass
-the **--disable-extensions-http-throttling** command-line flag when starting
-Chrome.
-
-The way the mechanism works is, once a few server errors (HTTP error codes 500
-and greater) in a row have been detected for a given URL (minus the query
-parameters), Chrome assumes the server is either unavailable or overloaded due
-to a DDoS, and denies requests to the same URL for a short period of time. If,
-after this period of time, requests keep failing, this "back-off interval"
-period is increased using an exponential factor, and so on and so forth until
-the maximum back-off interval is reached. It's important to note that failures
-due to the throttling itself are not counted as failures that cause the back-off
-interval to be increased.
-
-The back-off delay is calculated as follows: delay = initial_backoff \*
-multiply_factor^(effective_failure_count - 1) \* Uniform(1 - jitter_factor, 1\]
-
-For the canonical details on the back-off parameters used, see
-<http://src.chromium.org/viewvc/chrome/trunk/src/net/url_request/url_request_throttler_entry.cc?view=markup>.
-What follows is based on the most recent values for these parameters as of this
-writing:
-
-The back-off parameters used in the formula above will (at maximum values, i.e.
-without the reduction caused by jitter) add 0-41% (distributed uniformly in that
-range) to the "perceived downtime" of the remote server, once exponential
-back-off kicks in and is throttling requests for more than about a second at a
-time. Once the maximum back-off is reached, the added perceived downtime
-decreases rapidly, percentage-wise.
-
-Another way to put it is that the maximum additional perceived downtime with
-these numbers is a couple of seconds shy of 15 minutes, and such a delay would
-not occur until the remote server has been actually unavailable at the end of
-each back-off period for a total of about 48 minutes.
-
-Back-off does not kick in until after the first 4 errors, which helps avoid
-back-off from kicking in on// flaky connections. To simplify life for web
-developers, throttling is never used for URLs that resolve to localhost.
-
-If you believe your extension may be having problems due to HTTP throttling, you
-can try the following:
-
-1. Pass the **--disable-extensions-http-throttling** command-line flag
- when starting Chrome, to see if the problem reproduces with the
- feature turned off.
-2. With exponential back-off throttling of extension requests turned on
- (i.e. **without** the command-line flag above), visit
- [chrome://net-internals/#events](javascript:void(0);) and keep it
- open while you reproduce the problem you were seeing. Diagnostic
- information will be added to the log, which may help you track down
- what is happening. \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/chips/OWNERS b/chromium/docs/website/site/updates/chips/OWNERS
deleted file mode 100644
index 607cd20bd0e..00000000000
--- a/chromium/docs/website/site/updates/chips/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-dylancutler@google.com
-kaustubhag@chromium.org
diff --git a/chromium/docs/website/site/updates/chips/index.md b/chromium/docs/website/site/updates/chips/index.md
deleted file mode 100644
index 9ec241b8cf9..00000000000
--- a/chromium/docs/website/site/updates/chips/index.md
+++ /dev/null
@@ -1,189 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-page_name: chips
-title: Cookies Having Independent Partitioned State (CHIPS)
----
-
-## Motivation
-
-From the [CHIPS explainer](https://github.com/WICG/CHIPS):
-
-In order to increase privacy on the web, browser vendors are either planning or already shipping restrictions on cross-site tracking. This includes [phasing out support for third-party cookies](https://blog.chromium.org/2020/01/building-more-private-web-path-towards.html), cookies sent in requests to sites other than the top-level document's site, since such cookies enable servers to track users' behavior across different top-level sites.
-
-Although third-party cookies can enable third-party sites to track user behavior across different top-level sites, there are some cookie use cases on the web today where cross-domain subresources require some notion of session or persistent state that is scoped to a user's activity on a single top-level site.
-
-## The `Partitioned` Attribute
-
-Partitioned cookies are cross-site cookies which are only available on the top-level site they were created.
-
-Third parties which want to opt into receiving partitioned cookies should include the `Partitioned` attribute in their `Set-Cookie` header:
-
-`Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; `**`Partitioned`**
-
-Partitioned cookies must include the [`__Host-` prefix](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) and cannot have the [`SameParty` attribute](https://developer.chrome.com/blog/first-party-sets-sameparty/).
-Chrome will enforce these rules for cookies set with the `Partitioned` attribute even when cookie partitioning is disabled, but if the feature is disabled the resulting cookie will still be sent to requests to its host on different top-level sites than where it was set.
-
-## Origin Trial
-
-If you are interested in participating in the CHIPS origin trial, then you need to include the `Origin-Trial` header in each HTTP response with a valid token.
-You must also send the `Accept-CH: Sec-CH-Partitioned-Cookies` header in each HTTP response as well.
-
-If you have successfully opted into the origin trial, subsequent requests from the Chrome client will include the `Sec-CH-Partitioned-Cookies: ?1` request header until the current session is ended.
-If you store persistent partitioned cookies then you will receive the `Sec-CH-Partitioned-Cookies: ?0` request header for the first request to the cookies' origin.
-
-**Not all Chrome clients using versions 100-102 will be in the trial.**
-**If the client does not send the Sec-CH-Partitioned-Cookies header, then partitioned cookies are not enabled.**
-
-If you do not respond with a valid token in the `Origin-Trial` header and `Accept-CH: Partitioned-Cookies`, then the partitioned cookies on the machine will be converted to unpartitioned cookies.
-
-You can register your site for the origin trial [here](https://developer.chrome.com/origintrials/#/view_trial/1239615797433729025).
-
-**The origin trial is only available in Chrome versions 100-102.**
-
-### Example usage
-
-When a site wishes to participate in the origin trial, they should include the following headers in their response:
-
-```text
-Origin-Trial: *valid Origin Trial token*
-Accept-CH: Sec-CH-Partitioned-Cookies
-Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;
-```
-
-Remember, in order to keep participating in the trial, you must include these headers in each HTTP response.
-
-If the opt in is successful, Chrome will include the following headers in future requests:
-
-```text
-Sec-CH-Partitioned-Cookies: ?1
-Cookie: __Host-name=value
-```
-
-If your site receives the cookie without this client hint, then this means your site did not opt into the origin trial correctly and the cookie you are receiving is not partitioned.
-
-If the site sets persistent partitioned cookies (e.g. a max age of 1 day):
-
-```text
-Origin-Trial: *valid Origin Trial token*
-Accept-CH: Sec-CH-Partitioned-Cookies
-Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned; Max-Age=86400;
-```
-
-if the user visits the site after the current session has ended, the first request to the site will include the following request headers:
-
-```text
-Sec-CH-Partitioned-Cookies: ?0
-Cookie: __Host-name=value
-```
-
-If the site responds with the `Accept-CH` and `Origin-Trial` headers, Chrome will continue to send partitioned cookies and the `Sec-CH-Partitioned-Cookies: ?1` request header.
-
-If the site does not opt back into the trial, the `__Host-name` cookie will be converted into an unpartitioned cookie.
-This will allow the site to roll back its usage of partitioned cookies in case it causes server breakage.
-
-You can also persist your participation in the origin trial between sessions using the `Critical-CH: Sec-CH-Partitioned-Cookies` response header:
-
-```text
-Origin-Trial: *valid Origin Trial token*
-Accept-CH: Sec-CH-Partitioned-Cookies
-Critical-CH: Sec-CH-Partitioned-Cookies
-```
-
-This will cause Chrome to restart the request and send the `Sec-CH-Partitioned-Cookies: ?1` request header.
-
-### JavaScript
-
-Frames that [opt into the Origin Trial](http://googlechrome.github.io/OriginTrials/developer-guide.html) will have access to reading and writing partitioned cookies via JavaScript APIs such as document.cookie and the CookieStore API.
-Frames that are not in the trial's scripts will neither be able to read nor write partitioned cookies.
-
-The CHIPS Origin Trial will not be supported in service workers.
-
-### Design doc
-
-You can view the more detailed design document of the CHIPS Origin Trial [here](https://docs.google.com/document/d/1EPHnfHpZHpV09vITXu8cEEIMt1DYiRN_pZfeBal8UQw).
-
-### Local testing
-
-If you want to test your changes locally on your machine, you can enable the CHIPS origin trial bypass feature (chrome://flags/#partitioned-cookies-bypass-origin-trial) on your local device to use partitioned cookies on any site without them needing to opt into the trial.
-
-### A/B testing
-
-Sites can use the origin trial for [A/B testing](https://en.wikipedia.org/wiki/A/B_testing) by sending the `Origin-Trial` and `Accept-CH: Sec-CH-Partitioned-Cookies` headers to users in the experiment group and not send those headers to users in the control group.
-However, determining which users should belong to which group is the responsibility of the origin trial participant's servers.
-
-## End-to-End Testing
-
-These instructions describe how a web developer can perform end-to-end testing of Partitioned cookies in Chromium.
-
-Note: these instructions will only work with a Chromium instance M100 or above.
-
-1. Go to chrome://flags/#partitioned-cookies and change the setting to "Enabled".
-
-1. Restart Chromium by clicking the "Relaunch" button in the bottom-right corner, or by navigating to chrome://restart.
-
-## Example Usage
-
-Embeds which want to opt into using partitioned cookies should include the `Partitioned` attribute in their `Set-Cookie` header:
-
-`Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; `**`Partitioned`**
-
-Note that the cookie has the `__Host-` prefix and does not include the `SameParty` attribute.
-
-You can also set a partitioned cookie in JavaScript:
-
-```javascript
-cookieStore.set({
- name: '__Host-name',
- value: 'value',
- secure: true,
- path: '/',
- sameSite: 'none',
- // Set a partitioned cookie using the attribute below.
- partitioned: true,
-});
-```
-
-## Demo
-
-One you have followed the instructions in the [End-to-End Testing](#end-to-end-testing) section, you can use the following instructions to see a demonstration of the Partitioned attribute.
-
-1. Go to chrome://settings/cookies and make sure that the radio button is set to "Allow all cookies" or "Block third-party cookies in Incognito".
-
-1. Open a new tab and navigate to https://cr2.kungfoo.net/cookies/index.php.
-
-1. Click "Set cookie (SameSite=None)" to set an **unpartitioned** SameSite=None cookie named "unpartitioned".
-
-1. Click "Set partitioned cookie (SameSite=None; Partitioned)" to set a partitioned cookie, "__Host-1P_partitioned".
-
-1. Open DevTools to Application > Cookies > https://cr2.kungfoo.net and you should see both the UI display both cookies.
- Note that the partitioned cookie has a "Partition Key", https://kungfoo.net, whereas the unpartitioned cookie does not.
-
-1. Navigate to https://lying-river-tablecloth.glitch.me to see a site which embeds a cross-site iframe whose origin is https://cr2.kungfoo.net.
- As you can see, the unpartitioned SameSite=None cookie is available, but the partitioned cookie is not since we are now on a different top-level site.
-
-1. Click "Set partitioned cookie (SameSite=None; Partitioned)" to set a partitioned cookie, "__Host-3P_partitioned", in a third-party context.
-
-1. Open Application > Cookies > https://cr2.kungfoo.net and you should see both cookies. Note that the new partitioned cookie's "Partition Key" is https://lying-river-tablecloth.glitch.me, the top level site (glitch.me is on the [Public Suffix List](https://publicsuffix.org/)).
-
-1. Go back to the first tab which has the chrome://settings/cookies page open. Change the setting to "Block Third-Party Cookies".
-
-1. Navigate back to the tab navigated to https://lying-river-tablecloth.glitch.me and refresh the page.
- You should see that only the partitioned cookie, "__Host-3P_partitioned", is available.
-
-1. Open DevTools to the "Network" tab and refresh the page. Click on the request to "thirdparty.html" and click on the "Cookies" tab.
- You should see that the unpartitioned cookie was blocked in a third-party context, but the partitioned cookie was allowed.
-
-1. Go back to the tab which has chrome://settings/cookies open. Change the setting back to "Allow all cookies" or "Block third-party cookies in Incognito".
-
-1. Open the tab which has https://lying-river-tablecloth.glitch.me open. You should see that both the "unpartitioned" and "__Host-3P_partitioned" cookies are available again.
-
-1. Click the "Clear cookies" button. This will cause cr2.kungfoo.net to send the `Clear-Site-Data: "cookies"` header. You should see that both the "unpartitioned" and "__Host-3P_partitioned" cookies were removed.
-
-1. Navigate the tab back to https://cr2.kungfoo.net/cookies/index.php. You should see that the "__Host-1P_partitioned" cookie was not removed after cr2.kungfoo.net sent the `Clear-Site-Data` header on a different top-level site.
-
-## Resources
-- [CHIPS explainer](https://github.com/WICG/CHIPS)
-- [CHIPS Chromestatus Page](https://chromestatus.com/feature/5179189105786880)
-- [CHIPS Intent to Prototype](https://groups.google.com/a/chromium.org/g/blink-dev/c/hvMJ33kqHRo/m/3diUOI0uAQAJ)
diff --git a/chromium/docs/website/site/updates/first-party-sets/OWNERS b/chromium/docs/website/site/updates/first-party-sets/OWNERS
deleted file mode 100644
index 3414d2a7944..00000000000
--- a/chromium/docs/website/site/updates/first-party-sets/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-cfredric@chromium.org
-shuuran@chromium.org
-kaustubhag@chromium.org
diff --git a/chromium/docs/website/site/updates/first-party-sets/index.md b/chromium/docs/website/site/updates/first-party-sets/index.md
deleted file mode 100644
index 85541aecf04..00000000000
--- a/chromium/docs/website/site/updates/first-party-sets/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-page_name: first-party-sets
-title: First-Party Sets
----
-
-## First-Party Sets (aka FPS)
-
-## Motivation
-
-Borrowing from the [First-Party Sets explainer](https://github.com/privacycg/first-party-sets): In defining this scope (of ‘first-party’ in privacy models), we must balance two goals: the scope should be small enough to meet the user's privacy expectations, yet large enough to provide the user's desired functionality on the site they are interacting with.
-
-## End-to-End Testing
-
-These instructions describe how a web developer can perform end-to-end testing of their sites in Chromium, while forcing Chromium to treat those sites as members of a First-Party Set, without needing to publicly establish a First-Party Set in Chromium's distribution list.
-
-Note: these instructions will only work with a Chromium instance M89 or above.
-
-1. Navigate to chrome://flags/#use-first-party-set.
-1. Enable the First-Party Set flag. For the flag value, enter a comma-separated list of domains. (Note that all domains must be HTTPS.) E.g.: `https://fps-owner.example,https://fps-member1.example,https://fps-member2.example`. This flag can also be enabled by appending e.g. `--use-first-party-set="https://fps-owner.example,https://fps-member1.example,https://fps-member2.example"` to Chromium's command-line.
-1. \[Optional\]: Navigate to chrome://flags/#sameparty-cookies-considered-first-party, and enable the flag. This flag changes the behavior of the "block third-party cookies" setting, such that `SameParty` cookies are not blocked. (Available in Chromium M93 and later.) This flag can also be enabled by appending `--sameparty-cookies-considered-first-party` to Chromium's command-line.
-1. Restart Chromium by clicking the "Relaunch" button in the bottom-right corner, or by navigating to chrome://restart.
-1. Perform end-to-end testing of the domains that were used in step 2. These sites will now have access to their `SameParty` cookies in same-party contexts.
-1. When ready to revert to "standard" behavior, navigate to chrome://flags, disable the flags that you enabled in previous steps, and restart Chromium.
-
-## Origin Trial
-
-First-Party Sets will begin an origin trial in M89.
-
-The goals of the origin trial are to:
-
-* Test FPS functionality within a limited prototype, including the `SameParty` attribute
-* Build awareness/interest in the FPS feature.
-* Receive set membership requests and determine if FPS policy needs to be adjusted in order to meet privacy norms.
-* Determine if FPS functionality meets needs of common-owned, separate-domain entities (during or post-OT)
-* Test FPS UI options for user visibility and usefulness
-
-## Origin Trial Policy
-
-In order to apply a structured approach to examining user understanding of FPS relationships, the following policy constraints will apply to the First-Party Sets origin trial:
-
-* First-Party Sets during OT will be limited to five registrable domains (plus any TLD variants of those five). This allows for viable testing of FPS functionality, and a small set size to initially gauge user understanding of the feature.
-* An individual domain may only be included in a single Set.
-* First-Party Sets during OT will only be available to common-owned, common-controlled domains. Common ownership and control has been proposed to aid in user understanding of FPS relationships.
-* First-Party Set requests during OT will specify the location of the privacy policy or privacy policies of their proposed set members, and will list any differences in those policies.
-
-## Origin Trial Functionality
-
-The FPS origin trial will be “cosmetic” in that it will not change data sharing capabilities for FPS member domains; therefore, UX treatments will not be required for initial OT. In addition, when the user has third-party cookie blocking enabled, Chrome's normal functionality will persist and cookies will not be shared in cross-domain contexts - even if the domains are part of the First-Party Set OT.
-
-In parallel with the origin trial, we will be conducting user research to better understand user expectations with respect to First-Party Sets. It is expected that this will allow testing of browser user interface options to make First-Party Sets discoverable and transparent for users.
-
-## Joining the Origin Trial
-
-If you are interested in participating in the [origin trial](https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/developer-guide.md) for First-Party Sets and `SameParty`, please follow the below instructions:
-
-1. Identify the members and owner of your organization's First-Party Set.
-1. Identify which of your site(s)'s cookies could benefit from having the `SameParty` attribute set. Modify your site(s) to begin setting the `SameParty` attribute on the appropriate cookies. (Note that this attribute will be ignored by user agents that have not implemented the `SameParty` attribute; plan accordingly, using the SameSite attribute to specify a fallback policy.)
-1. Modify your site(s) to collect appropriate metrics, for you to determine whether the origin trial is a success. E.g., record the contexts in which the `SameParty` cookies get set and sent, and compare the metrics to what you had expected.
-1. Modify each of your sites to serve &lt;site&gt;/.well-known/first-party-set. These files will be used at registration-time to verify opt-in on each site.
- * &lt;owner site&gt;/.well-known/first-party-set should be a JSON file whose content is an object listing the owner and the members. E.g., `{owner: "https://fps-owner.example", members: ["https://fps-member1.example", "https://fps-member2.example"]}`.
- * &lt;member site&gt;/.well-known/first-party-set should be a JSON file whose content is an object listing the owner. E.g., `{owner: "https://fps-owner.example"}`.
- * This is similar to the .well-known machinery described in the First-Party Sets explainer, but does not include assertions or versioning.
-1. Follow the standard origin trial signup process for the experiment here: https://developers.chrome.com/origintrials/#/trials/active.
- * You only need to register a single domain - the "owner domain" of the set.
- * We will use origin trial registrations for feedback and followup as needed (e.g. if performance issues or other unintended consequences arise during the experiment, we may end the experiment and notify participants). We will also use registrations to communicate what percentage of Chrome users will have the origin trial active; this will be important for interpreting your metrics.
- * After signup, you will see origin trial tokens on the registration page, but they do not need to be deployed to your site. The tokens will have no effect on the enabling of the FPS functionality.
- * In case you are already familiar with origin trials, we will not be using the standard origin-trial meta tag and Origin-Trial HTTP header.
-1. Submit your proposed set by creating a bug using [this bug template](https://bugs.chromium.org/p/chromium/issues/entry?template=Defect+report+from+user&summary=%5BFormation%5D%2F%5BDissolution%5D+of+First-Party+Set+membership+in+Origin+Trial&comment=The+purpose+of+this+template+is+to+request+the+formation%2C+or+dissolution%2C+of+a+First-Party+Set.+For+more+details+about+First-Party+Sets%2C+please+see+the+explainer%3A+https%3A%2F%2Fgithub.com%2Fprivacycg%2Ffirst-party-sets%0A%0APlease+fill+in+the+following+items+below+and+your+request+will+be+publicly+visible+and+reviewed+by+the+Chrome+team.+Any+follow-up+questions+will+be+added+to+this+bug.+Once+all+details+are+confirmed+as+adhering+to+the+requirements+for+this+Origin+Trial%2C+your+First-Party+Set+will+be+included+in+a+component+list+of+Chrome.%0A%0A1%29+Webmaster+contact%28s%29+of+domains+in+set%2C+if+different+from+the+user+filing+this+bug%3A%0A+-+%5Bemail+address%5D%0A%0A2a%29+Please+list+the+registrable+domains+%28see+https%3A%2F%2Fpublicsuffix.org%2F+for+definition+of+registrable+domain%29+that+you+would+like+to+be+in+the+First-Party+Set%2C+with+all+desired+TLD+variants.+The+first+listed+domain+should+be+the+%E2%80%9Cowner%E2%80%9D+domain+of+the+set.+Note%3A+For+the+Origin+Trial%2C+we+will+be+using+a+limit+of+5+registrable+domains+%28not+including+ccTLD+variants%29.%0A%5Bowner.example%5D%0A%5Bowner.test%5D%0A%5Bbrand.example%5D%0A%5Bbrand.test%5D%0A%5Bcobrand.example%5D%0A%5Bcobrand.test%5D+...%0A%0A2b%29+%5BOptional%5D+Our+initial+origin+trial+is+limited+to+5+registrable+domains.+If+you+are+interested+in+your+set+containing+additional+domains+beyond+the+5+you+have+listed+above+in+%282a%29%2C+please+feel+free+to+list+them+here%3A%0A%0A%0A3%29+Please+confirm+that+the+domains+listed+above+have+the+same+common+owner+and+controller.+Optional%3A+you+may+add+additional+detail+here+to+help+in+the+verification+of+this.%0A-+%5BYes%2FNo%5D%0A-+%5BOptional+detail%5D+%0A%0A4%29+Please+list+the+URL+of+the+Privacy+Policies+for+each+domain.+If+there+are+known+differences+between+the+privacy+policies%2C+please+summarize+those+differences+as+well.%0A+-+%5BURL%5D+%0A+-+%5BURL%5D++%0A-+%5BSummary+of+differences+in+privacy+policies%5D%0A%0A5%29+Have+you+hosted+%60.well-known%2Ffirst-party-set%60+files+on+all+domains+as+described+in+the+instructions%3F&components=Internals%3ENetwork%3EFirst-Party-Sets&status=Assigned&owner=chrome-first-party-sets%40chromium.org&labels=allpublic,Type-Bug,Pri-2).
- * Bugs (and any resulting comments/questions) will be publicly visible once submitted.
- * Note that for the origin trial, we are not using the Sec-First-Party-Set machinery. Creating the above bug and serving .well-known/first-party-set files are the only steps necessary for declaring your First-Party Set.
-1. After the above bug is marked "Fixed", monitor key metrics to ensure no unexpected breakage occurs on your site(s) during the duration of the trial.
-
-If you have any questions, please reach out to chrome-first-party-sets@chromium.org.
-
-## Update History
-* November 23, 2020: created First-Party Sets page on chromium.org
-* January 5, 2021: expanded details about First-Party Sets and added origin trial information
-* February 2, 2021: added information on end-to-end testing. Expanded signup-instructions for origin trial
-* March 17, 2021: added instructions for serving .well-known/first-party-set file.
-
-## Resources
-* [First-Party Sets explainer](https://github.com/privacycg/first-party-sets)
-* [First-Party Sets Intent-to-Prototype](https://groups.google.com/a/chromium.org/g/blink-dev/c/0EMGi-xbI-8/m/d_UxAJeiBwAJ)
-* [First-Party Sets on ChromeStatus](https://chromestatus.com/feature/5640066519007232)
-* [`SameParty` explainer](https://github.com/cfredric/sameparty)
-* [`SameParty` Intent-to-Prototype](https://groups.google.com/u/1/a/chromium.org/g/blink-dev/c/-unZxHbw8Pc)
-* [`SameParty` on ChromeStatus](https://chromestatus.com/feature/5280634094223360) \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/index.md b/chromium/docs/website/site/updates/index.md
deleted file mode 100644
index 679b1d75abd..00000000000
--- a/chromium/docs/website/site/updates/index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-breadcrumbs: []
-page_name: updates
-title: updates
----
-
diff --git a/chromium/docs/website/site/updates/same-site/faq/index.md b/chromium/docs/website/site/updates/same-site/faq/index.md
deleted file mode 100644
index abe6c401f70..00000000000
--- a/chromium/docs/website/site/updates/same-site/faq/index.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-- - /updates/same-site
- - SameSite Updates
-page_name: faq
-title: SameSite Frequently Asked Questions (FAQ)
----
-
-### Q: What are the new SameSite changes?
-
-Chrome is changing the default behavior for how cookies will be sent in first
-and third party contexts.
-
-* Cookies that do not specify a `SameSite` attribute will be treated
- as if they specified `SameSite=Lax`, i.e. they will be restricted to
- first-party or same-site contexts by default.
-* Cookies that are intended for third-party or cross-site contexts
- must specify `SameSite=None` and `Secure`.
-
-Note: this also means cross-site or third-party cookies are restricted to secure
-/ HTTPS connections only.
-
-### Q: When do the new SameSite changes roll live?
-
-This behavior will become the default during the Chrome 80 rollout.
-
-### Q: How can I test the new SameSite defaults?
-
-In the location bar, enter `chrome://flags` to access the flag configuration.
-Set the following flags to enabled:
-
-* `chrome://flags/#same-site-by-default-cookies`
-* `chrome://flags/#cookies-without-same-site-must-be-secure`
-
-### Q: How can I tell if my cookies are affected?
-
-Chrome is displaying warnings in the Console in DevTools which highlight each
-cross-site request where cookies would be affected by the new `SameSite`
-defaults. The cookies and their respective `SameSite` and Secure attributes are
-also visible in DevTools within the Application tab under Storage → Cookies.
-This same information is also available in the Network Tab for each request.
-
-### Q: What do I need to do to my cookies?
-
-* For cookies that are only required in a first-party context, you
- should ideally set an appropriate `SameSite` value of either `Lax`
- or `Strict` and set `Secure` if your site is only accessed via
- HTTPS.
-* For cookies that are required in a third-party context, you must set
- the `SameSite=None` and `Secure` attributes.
-
-### Q: How do I handle older or incompatible browsers?
-
-Refer to following guidance:
-
-* <https://web.dev/samesite-cookie-recipes/#handling-incompatible-clients>
-* <https://www.chromium.org/updates/same-site/incompatible-clients>
-
-### Q: Are the new defaults applied to Chrome on iOS?
-
-No. Chrome on iOS (as with all other browsers) uses the underlying WebKit engine
-and does not currently enforce the new defaults.
-
-### Q: How can I tell if my browser is applying the new SameSite defaults?
-
-The test site: <https://samesite-sandbox.glitch.me/> will show the presence of a
-variety of cookies in a same-site and cross-site context along with whether
-that’s correct for the new defaults. If all rows show with a green check mark:
-✔️ then the browser is enforcing the new defaults.
-
-### Q: What if I have an HTTP page and need third-party cookies?
-
-Ideally, sites should be upgrading to HTTPS and cross-site cookies will not be
-sent over a plain HTTP connection. However, on an HTTP page with HTTPS resources
-then those secure requests will include cookies that have been marked with
-`SameSite=None; Secure`.
-Sites that rely on services making use of third-party cookies should ensure they
-are including those resources (scripts, iframes, pixels, etc.) via an
-appropriate HTTPS URL. You can see this in action on this test site:
-<http://crosssite-sandbox.glitch.me/>
-
-A reasonable rule is if the connection is an upgrade, i.e. HTTP page with HTTPS
-resources then they can have cookies. However, a downgrade, i.e. an HTTPS page
-with HTTP resources will not get cookies on cross-site HTTP resources and users
-will most probably see mixed content warnings in the browser UI.
-
-In general, make all requests over HTTPS where possible.
-
-### Q: What is the Lax + POST mitigation?
-
-This is a specific exception made to account for existing cookie usage on some
-Single Sign-On implementations where a CSRF token is expected on a cross-site
-POST request. This is purely a temporary solution and will be removed in the
-future. It does not add any new behavior, but instead is just not applying the
-new `SameSite=Lax` default in certain scenarios.
-
-Specifically, a cookie that is at most 2 minutes old will be sent on a top-level
-cross-site POST request. However, if you rely on this behavior, you should
-update these cookies with the `SameSite=None; Secure` attributes to ensure they
-continue to function in the future.
-
-### Q: Why doesn’t my extension work anymore under the new SameSite rules?
-
-Chrome extensions use the `chrome-extension://` URL scheme, which appears as
-cross-site to anything `https://` or `http://`. The fix, which is to
-[treat](https://cs.chromium.org/chromium/src/chrome/renderer/extensions/chrome_extensions_renderer_client.cc?l=327-328&rcl=93f8b74447f261ada0224ae54176fbecdf03a294)
-extension-initiated requests as same-site**\***, is available in Chrome 79 and
-later. Some use cases involving requests made from web frames on extension pages
-may also behave differently in Chrome 80. If you test on newer (80+) versions of
-Chrome and find that your extension is still broken, please file a bug on
-crbug.com using [this template](https://bit.ly/2lJMd5c).
-
-**\***
-[If](https://cs.chromium.org/chromium/src/chrome/renderer/extensions/chrome_extensions_renderer_client.cc?l=86-90&rcl=9235d01ebbb6f18a74b0b99f7922175b4f11e68a)
-the extension has host permissions access to the page.
-
-### Q: Are cookies in WebViews affected by the new default behavior?
-
-\[**UPDATE Jan 8, 2021**: The modern SameSite behavior ([SameSite=Lax by
-default, SameSite=None requires
-Secure](https://web.dev/samesite-cookies-explained/), and [Schemeful
-Same-Site](https://web.dev/schemeful-samesite/)) will be enabled by default for
-Android WebView on apps targeting Android S and newer. Existing apps will not be
-affected until they choose to update to target Android S. Android S has not yet
-been released. Existing apps can be tested with the new modern SameSite behavior
-by toggling the flag webview-enable-modern-cookie-same-site in the [developer
-UI](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/developer-ui.md#Flag-UI).\]
-
-~~The new `SameSite` behavior will not be enforced on Android Webview until
-later,~~ though app developers are advised to declare the appropriate `SameSite`
-cookie settings for Android WebViews based on versions of Chrome that are
-compatible with the None value, both for cookies accessed via HTTP(S) headers
-and via Android WebView's [CookieManager
-API](https://developer.android.com/reference/android/webkit/CookieManager). This
-does not apply to Chrome browser on Android, which will begin to enforce the new
-`SameSite` rules at the same time as the desktop versions of Chrome. \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/same-site/incompatible-clients/index.md b/chromium/docs/website/site/updates/same-site/incompatible-clients/index.md
deleted file mode 100644
index 1394046e2e6..00000000000
--- a/chromium/docs/website/site/updates/same-site/incompatible-clients/index.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-- - /updates/same-site
- - SameSite Updates
-page_name: incompatible-clients
-title: 'SameSite=None: Known Incompatible Clients'
----
-
-Last updated: Nov 18, 2019
-
-Some user agents are known to be incompatible with the \`SameSite=None\`
-attribute.
-
-* Versions of Chrome from Chrome 51 to Chrome 66 (inclusive on both
- ends). These Chrome versions will reject a cookie with
- \`SameSite=None\`. This also affects older versions of
- [Chromium-derived
- browsers](https://en.wikipedia.org/wiki/Chromium_(web_browser)#Browsers_based_on_Chromium),
- as well as Android WebView. This behavior was correct according to
- the version of the cookie specification at that time, but with the
- addition of the new "None" value to the specification, this behavior
- has been updated in Chrome 67 and newer. (Prior to Chrome 51, the
- SameSite attribute was ignored entirely and all cookies were treated
- as if they were \`SameSite=None\`.)
-* Versions of UC Browser on Android prior to version 12.13.2. Older
- versions will reject a cookie with \`SameSite=None\`. This behavior
- was correct according to the version of the cookie specification at
- that time, but with the addition of the new "None" value to the
- specification, this behavior has been updated in newer versions of
- UC Browser.
-* Versions of Safari and embedded browsers on MacOS 10.14 and all
- browsers on iOS 12. These versions will erroneously treat cookies
- marked with \`SameSite=None\` as if they were marked
- \`SameSite=Strict\`. This
- [bug](https://bugs.webkit.org/show_bug.cgi?id=198181) has been fixed
- on newer versions of iOS and MacOS.
-
-Here is a potential approach to working around incompatible clients (in
-pseudocode). If you implement this sample, we highly encourage you to do your
-own testing to ensure that your implementation is working as intended. Note: The
-sample regular expression patterns below may not be perfect, as User-Agent
-strings can vary widely; we encourage you to use a tested User-Agent parsing
-library if possible.
-
-// Copyright 2019 Google LLC. // SPDX-License-Identifier: Apache-2.0 // Don’t
-send \`SameSite=None\` to known incompatible clients. bool
-shouldSendSameSiteNone(string useragent): return
-!isSameSiteNoneIncompatible(useragent) // Classes of browsers known to be
-incompatible. bool isSameSiteNoneIncompatible(string useragent): return
-hasWebKitSameSiteBug(useragent) || dropsUnrecognizedSameSiteCookies(useragent)
-bool hasWebKitSameSiteBug(string useragent): return isIosVersion(major:12,
-useragent) || (isMacosxVersion(major:10, minor:14, useragent) &&
-(isSafari(useragent) || isMacEmbeddedBrowser(useragent))) bool
-dropsUnrecognizedSameSiteCookies(string useragent): if isUcBrowser(useragent):
-return !isUcBrowserVersionAtLeast(major:12, minor:13, build:2, useragent) return
-isChromiumBased(useragent) && isChromiumVersionAtLeast(major:51, useragent) &&
-!isChromiumVersionAtLeast(major:67, useragent) // Regex parsing of User-Agent
-string. (See note above!) bool isIosVersion(int major, string useragent): string
-regex = "\\(iP.+; CPU .\*OS (\\d+)\[_\\d\]\*.\*\\) AppleWebKit\\/" // Extract
-digits from first capturing group. return useragent.regexMatch(regex)\[0\] ==
-intToString(major) bool isMacosxVersion(int major, int minor, string useragent):
-string regex = "\\(Macintosh;.\*Mac OS X (\\d+)_(\\d+)\[_\\d\]\*.\*\\)
-AppleWebKit\\/" // Extract digits from first and second capturing groups. return
-(useragent.regexMatch(regex)\[0\] == intToString(major)) &&
-(useragent.regexMatch(regex)\[1\] == intToString(minor)) bool isSafari(string
-useragent): string safari_regex = "Version\\/.\* Safari\\/" return
-useragent.regexContains(safari_regex) && !isChromiumBased(useragent) bool
-isMacEmbeddedBrowser(string useragent): string regex = "^Mozilla\\/\[\\.\\d\]+
-\\(Macintosh;.\*Mac OS X \[_\\d\]+\\) " + "AppleWebKit\\/\[\\.\\d\]+ \\(KHTML,
-like Gecko\\)$" return useragent.regexContains(regex) bool
-isChromiumBased(string useragent): string regex = "Chrom(e|ium)" return
-useragent.regexContains(regex) bool isChromiumVersionAtLeast(int major, string
-useragent): string regex = "Chrom\[^ \\/\]+\\/(\\d+)\[\\.\\d\]\* " // Extract
-digits from first capturing group. int version =
-stringToInt(useragent.regexMatch(regex)\[0\]) return version &gt;= major bool
-isUcBrowser(string useragent): string regex = "UCBrowser\\/" return
-useragent.regexContains(regex) bool isUcBrowserVersionAtLeast(int major, int
-minor, int build, string useragent): string regex =
-"UCBrowser\\/(\\d+)\\.(\\d+)\\.(\\d+)\[\\.\\d\]\* " // Extract digits from three
-capturing groups. int major_version =
-stringToInt(useragent.regexMatch(regex)\[0\]) int minor_version =
-stringToInt(useragent.regexMatch(regex)\[1\]) int build_version =
-stringToInt(useragent.regexMatch(regex)\[2\]) if major_version != major: return
-major_version &gt; major if minor_version != minor: return minor_version &gt;
-minor return build_version &gt;= build \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/same-site/index.md b/chromium/docs/website/site/updates/same-site/index.md
deleted file mode 100644
index 53fbaa0fbbe..00000000000
--- a/chromium/docs/website/site/updates/same-site/index.md
+++ /dev/null
@@ -1,405 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-page_name: same-site
-title: SameSite Updates
----
-
-* **Confused?** [Start
- here](https://web.dev/samesite-cookies-explained/).
-* **Developers:** Check out our [testing and debugging
- tips](/updates/same-site/test-debug).
-* **Adding \`SameSite=None; Secure\` to your cookies?** Check the list
- of [incompatible
- clients](https://chromium.org/updates/same-site/incompatible-clients)
- here.
-* **Check the list of [Frequently Asked Questions
- (FAQ)](/updates/same-site/faq)** for common scenarios and use cases.
-
-**Launch Timeline**
-
-Last updated Mar 18, 2021.
-
-Latest update:
-
-**Mar 18, 2021:** The flags #same-site-by-default-cookies and
-#cookies-without-same-site-must-be-secure have been removed from chrome://flags
-as of Chrome 91, as the behavior is now enabled by default. In Chrome 94, the
-command-line flag
---disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure
-will be removed.
-
-For the full Chrome release schedule, [see
-here](https://chromiumdash.appspot.com/schedule). For the SameSite-by-default
-and SameSite=None-requires-Secure launch timeline, see below:
-
-* **Early October, 2019**: Experimental
- [SameSite-by-default](https://www.chromestatus.com/feature/5088147346030592)
- and
- [SameSite=None-requires-Secure](https://www.chromestatus.com/feature/5633521622188032)
- behavior launched to 50% of users on Chrome Canary and Dev (Chrome
- Canary and Dev versions 78+). Windows and Mac users on domain-joined
- devices and Chrome OS users on enterprise-registered devices will be
- excluded from the experiment. Chrome 78 Beta users will not receive
- the experimental behavior.
-* **October 31, 2019**: Chrome 79 Beta released. Experiment extended
- to 50% of Chrome 79 Beta users, including domain-joined and
- enterprise-registered devices.
- [Policies](/administrators/policy-list-3/cookie-legacy-samesite-policies)
- to manage the experimental behavior (see below) will be available on
- Chrome 79.
-* **Dec 10, 2019**: Chrome 79 Stable released. Stable users on Chrome
- 79 will NOT receive the new SameSite behavior.
-* **Dec 19, 2019**: Chrome 80 Beta released. Experimental behavior
- still enabled for 50% of Chrome 80 Beta users.
-* **February 4, 2020**: Chrome 80 Stable released. The enablement of
- the SameSite-by-default and SameSite=None-requires-Secure
- enforcement will not be included in this initial Chrome 80 stable
- rollout. Please see the next item for more detailed information on
- the when SameSite enforcement will be enabled for Chrome 80 stable.
-* **February, 2020**: Enforcement rollout for Chrome 80 Stable: The
- SameSite-by-default and SameSite=None-requires-Secure behaviors will
- begin rolling out to Chrome 80 Stable for an initial limited
- population starting the week of February 17, 2020, excluding the US
- President’s Day holiday on Monday. We will be closely monitoring and
- evaluating ecosystem impact from this initial limited phase through
- gradually increasing rollouts.
-* **March 2, 2020**: The enablement of the SameSite enforcements has
- been increased beyond the initial population. However, it is still
- targeting an overall limited global population of users on Chrome 80
- stable and newer. We continue to monitor metrics and ecosystem
- feedback via our [tracking
- bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1052195),
- and other support channels.
-* **March 9, 2020**: The rollout population has been additionally
- increased, although it continues to target a fraction of the overall
- Chrome 80 stable population. We continue to monitor metrics and
- ecosystem feedback via our [tracking
- bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1052195),
- and other support channels.
-* **April 3, 2020**: In light of the extraordinary global
- circumstances due to COVID-19, [we’ve decided to temporarily roll
- back the enforcement of SameSite cookie labeling on Chrome 80
- stable](https://blog.chromium.org/2020/04/temporarily-rolling-back-samesite.html).
- We recognize the efforts of sites and individual developers who
- prepared for this change as part of our ongoing effort to improve
- privacy and security across the web. We appreciate the feedback from
- across the web ecosystem which has helped inform this decision. We
- will provide advance notice on here and the Chromium blog when we
- plan to resume the gradual rollout, which we’re now aiming for over
- the summer. Non-stable Chrome channels (e.g. Dev, Canary, and Beta)
- will continue with 50% enablement in Chrome 80 and later. More
- details on [Chromium
- blog](https://blog.chromium.org/2020/04/temporarily-rolling-back-samesite.html).
-* **May 28, 2020**: We are planning to resume our SameSite cookie
- enforcement coinciding with the stable release of Chrome 84 on July
- 14, with enforcement enabled for Chrome 80+. (In other words,
- starting July 14, Chrome users on the older Stable releases (80, 81,
- and 83 -- for whom we recommend installing the latest update!) as
- well as the newly released Chrome 84 will gradually begin to receive
- the SameSite-by-default behavior.) Read more on our [Chromium blog
- post](https://blog.chromium.org/2020/05/resuming-samesite-cookie-changes-in-july.html).
-* **July 14, 2020**: SameSite cookie enforcement has resumed, with a
- gradual rollout starting today (July 14) and ramping up over the
- next several weeks as we continue to monitor overall ecosystem
- readiness and engage with websites and services to ensure they are
- prepared for the SameSite labeling policy. The SameSite features are
- being enabled for Chrome Stable channel users on versions 80 and 81
- (who should update Chrome!), 83, as well as the newly released 84.
-* **July 28, 2020**: The rollout population has been increased to
- target a fraction of the overall Chrome 80+ stable population. We
- are monitoring metrics and ecosystem feedback on our [tracking
- bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1052195).
-
- **Aug 11, 2020:** The target rollout population has been increased to 100%
- of users on Chrome Stable versions 80 and above, and the actual proportion
- of users with the new behavior enabled is now ramping up to 100% gradually.
- Users will receive the new behavior when they restart Chrome.
-
-~~The new SameSite behavior will not be enforced on Android WebView until
-later,~~ though app developers are advised to declare the appropriate SameSite
-cookie settings for Android WebViews based on versions of Chrome that are
-compatible with the None value, both for cookies accessed via HTTP(S) headers
-and via Android WebView's [CookieManager
-API](https://developer.android.com/reference/android/webkit/CookieManager).
-\[**UPDATE Jan 8, 2021**: The modern SameSite behavior ([SameSite=Lax by
-default, SameSite=None requires
-Secure](https://web.dev/samesite-cookies-explained/), and [Schemeful
-Same-Site](https://web.dev/schemeful-samesite/)) will be enabled by default for
-Android WebView on apps targeting Android 12 and newer. Existing apps will not
-be affected until they choose to update to target Android 12. Android 12 has not
-yet been released. Existing apps can be tested with the new modern SameSite
-behavior by toggling the flag webview-enable-modern-cookie-same-site in the
-[developer
-UI](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/developer-ui.md#Flag-UI).\]
-This does not apply to Chrome browser on Android, which will begin to enforce
-the new SameSite rules at the same time as the desktop versions of Chrome. The
-new SameSite behavior will not affect Chrome on iOS.
-
-**All updates:**
-
-* [Mar 18,
- 2021](https://chromium.org/updates/same-site?pli=1#20210318)
-* [Jan 8, 2021](https://chromium.org/updates/same-site?pli=1#20210108)
-* [Aug 11,
- 2020](https://chromium.org/updates/same-site?pli=1#20200811)
-* [July 28,
- 2020](https://chromium.org/updates/same-site?pli=1#20200728)
-* [July 14,
- 2020](https://chromium.org/updates/same-site?pli=1#20200714)
-* [May 28,
- 2020](https://chromium.org/updates/same-site?pli=1#20200528)
-* [April 3,
- 2020](https://chromium.org/updates/same-site?pli=1#20200403)
-* [Feb 10,
- 2020](https://chromium.org/updates/same-site?pli=1#20200210)
-* [Nov 21,
- 2019](https://chromium.org/updates/same-site?pli=1#20191121)
-* [Nov 1, 2019](https://chromium.org/updates/same-site?pli=1#20191101)
-* [Oct 2, 2019](https://chromium.org/updates/same-site?pli=1#20191002)
-* [Sept 30, 2019](#20190930)
-* [Sept 26,
- 2019](https://chromium.org/updates/same-site?pli=1#20190926)
-
-**Mar 18, 2021**
-
-The flags #same-site-by-default-cookies and
-#cookies-without-same-site-must-be-secure have been removed from chrome://flags
-as of Chrome 91, as the behavior is now enabled by default. In Chrome 94, the
-command-line flag
---disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure
-will be removed.
-
-**Jan 8, 2021**
-
-The modern SameSite behavior ([SameSite=Lax by default, SameSite=None requires
-Secure](https://web.dev/samesite-cookies-explained/), and [Schemeful
-Same-Site](https://web.dev/schemeful-samesite/)) will be enabled by default for
-Android WebView on apps targeting Android 12 (Android S) and newer. Existing
-apps will not be affected until they choose to update to target Android 12.
-Android 12 has not yet been released. Existing apps can be tested with the new
-modern SameSite behavior by toggling the flag
-webview-enable-modern-cookie-same-site in the [developer
-UI](https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/developer-ui.md#Flag-UI).
-
-**Aug 11, 2020**
-
-The target rollout population has been increased to 100% of users on Chrome
-Stable versions 80 and above, and the actual proportion of users with the new
-behavior enabled is now ramping up to 100% gradually. Users will receive the new
-behavior when they restart Chrome.
-
-**July 28, 2020**
-
-The rollout population has been increased to target a fraction of the overall
-Chrome 80+ stable population. We are monitoring metrics and ecosystem feedback
-on our [tracking
-bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1052195).
-
-**July 14, 2020**
-
-SameSite cookie enforcement has resumed, with a gradual rollout starting today
-(July 14) and ramping up over the next several weeks as we continue to monitor
-overall ecosystem readiness and engage with websites and services to ensure they
-are prepared for the SameSite labeling policy. The SameSite features are being
-enabled for Chrome Stable channel users on versions 80 and 81 (who should update
-Chrome!), 83, as well as the newly released 84.
-
-**May 28, 2020**
-
-We are planning to resume our SameSite cookie enforcement coinciding with the
-stable release of Chrome 84 on July 14, with enforcement enabled for Chrome 80+.
-(In other words, starting July 14, Chrome users on the older Stable releases
-(80, 81, and 83 -- for whom we recommend installing the latest update!) as well
-as the newly released Chrome 84 will gradually begin to receive the
-SameSite-by-default behavior.) Read more on our [Chromium blog
-post](https://blog.chromium.org/2020/05/resuming-samesite-cookie-changes-in-july.html).
-
-**April 3, 2020**
-
-[We’ve decided to temporarily roll back the enforcement of SameSite cookie
-labeling on Chrome 80
-Stable](https://blog.chromium.org/2020/04/temporarily-rolling-back-samesite.html)
-and kSameSiteByDefaultCookies is once again set to
-base::FEATURE_DISABLED_BY_DEFAULT in Chromium master.
-
-**Feb 10, 2020**
-
-The Chrome
-[policies](/administrators/policy-list-3/cookie-legacy-samesite-policies)
-LegacySameSiteCookieBehaviorEnabledForDomainList and
-LegacySameSiteCookieBehaviorEnabled which revert to the legacy cookie behavior
-for managed Chrome and ChromeOS instances will be available ~~for at least 12
-months after the release of Chrome 80 stable~~ (**Edit - May 29, 2020**: until
-at least July 14, 2021). We will be monitoring feedback about these policies and
-will provide updates on their lifetime as appropriate.
-
-**Nov 21, 2019**
-
-Starting in Canary version **80.0.3975.0**, the Lax+POST temporary mitigation
-can be disabled for testing purposes using the new flag
---enable-features=SameSiteDefaultChecksMethodRigorously to allow testing of
-sites and services in the eventual end state of the feature where the mitigation
-has been removed. (Note that to enable multiple features, you must append the
-feature name to the comma-separated list of params for the --enable-features
-flag. Do not use multiple separate --enable-features flags.)
-
-In addition, there is [a bug](https://crbug.com/1027318) affecting Chrome 78-79
-which causes spurious SameSite warning messages to be emitted to the console
-when the user has cookies for other domains on the same site as a resource
-fetched in a cross-site context. We apologize for the confusion. This will be
-fixed in Chrome 80.
-
-**Nov 1, 2019**
-
-Clearing up some misconceptions and providing additional information about "Lax
-+ POST" (which is mentioned briefly on the [chromestatus.com
-page](https://www.chromestatus.com/feature/5088147346030592)):
-
-* "Lax + POST" does *not* result in the legacy behavior (i.e. the old
- behavior before the SameSite changes).
-* “Lax + POST” is an intervention for Lax-by-default cookies (cookies
- that don’t specify a \`SameSite\` attribute) which allows these
- cookies to be sent on top-level cross-site POST requests if they are
- at most 2 minutes old. “Normal” Lax cookies are not sent on
- cross-site POST requests (or any other cross-site requests with a
- non-idempotent HTTP method such as PUT). This intervention was put
- in place to mitigate breakage to some POST-based login flows.
-* If “Lax + POST” is affecting the cookies you are testing (i.e. if
- your cookie would have been excluded if not for the "+ POST"
- behavior due to its age), you will see a message in the DevTools
- console about the 2 minute threshold. This can be useful for
- debugging.
-* For integration testing (if your cookie needs to be sent on
- cross-site POST requests), we recommend test cases with cookie age
- both below and above the threshold. For this, there is a
- command-line flag --enable-features=ShortLaxAllowUnsafeThreshold,
- which will lower the 2 minute threshold to 10 seconds, so that your
- test doesn’t have to wait for 2 whole minutes. This flag is
- available in Chrome 79.0.3945.16 and newer. (Note that if you are
- also using other --enable-features flags such as
- --enable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure,
- you must append the feature name to the comma-separated list rather
- than use multiple --enable-features flags.)
-* Note that the 2-minute window for "Lax+POST" is a temporary
- intervention and will be removed at some point in the future (some
- time after the Stable launch of Chrome 80), at which point cookies
- involved in these flows will require \`SameSite=None\` and
- \`Secure\` even if under 2 minutes old.
-
-**Oct 2, 2019**
-
-In response to feedback from users and enterprise customers, we are deferring
-the experimental Beta launch of the "SameSite=Lax by Default" and "SameSite=None
-requires Secure" features from Chrome 78 Beta to Chrome 79 Beta. Users of Chrome
-78 Beta will not experience any change or disruption in cookie behavior.
-
-When the experiment is launched to Chrome 79 Beta users, domain-joined or
-enterprise-registered machines will be included in the experiment. Instead of
-excluding them from the experiment entirely, policies will be made available in
-Chrome 79 to manage the experimental behavior. This will provide extra time for
-administrators to configure and test the policies in advance of the Stable
-launch in Chrome 80.
-
-One policy will allow administrators to specify a list of domains on which
-cookies should be handled according to the legacy behavior
-(LegacySameSiteCookieBehaviorEnabledForDomainList), and a second policy will
-provide the option to set the global default to legacy SameSite behavior for all
-cookies (LegacySameSiteCookieBehaviorEnabled). More details about these policies
-will follow in future enterprise release notes before the Chrome 79 release.
-
-These features will still become the default behavior on Stable starting in
-Chrome 80.
-
-**Sept 30, 2019**
-
-**Note (Jan 30, 2020): Check out our more detailed [tips for testing and
-debugging](/updates/same-site/test-debug).**
-
-To test whether your sites may be affected by the SameSite changes:
-
- Go to chrome://flags and enable #same-site-by-default-cookies and
- #cookies-without-same-site-must-be-secure. Restart the browser for the
- changes to take effect.
-
- Test your sites, with a focus on anything involving federated login flows,
- multiple domains, or cross-site embedded content. Note that, because of the
- 2 minute time threshold for the "Lax+POST" intervention, for any flows
- involving POST requests, you may want to test with and without a long (&gt;
- 2 minute) delay.
-
- If your site stops working:
-
- * Try turning off #cookies-without-same-site-must-be-secure. If
- this fixes the issue, you need to set \`Secure\` on any
- \`SameSite=None\` cookies your site may be relying upon. (This
- may require upgrading HTTP sites to HTTPS.)
- * Try turning off both flags. If this fixes the issue, you need to
- identify the cookies being accessed in a cross-site context and
- apply the attributes \`SameSite=None\` and \`Secure\` to them.
- See ["SameSite cookies
- explained"](https://web.dev/samesite-cookies-explained/) for
- more information. If you are not the developer of the site,
- please reach out to the developer and/or vendor who authored the
- site.
- * For flows involving POST requests, if a short delay (&lt; 2
- minutes) works but a long delay (&gt; 2 minutes) does not work,
- you will also need to add \`SameSite=None\` and \`Secure\` to
- the relevant cookies if the operation in question may take
- longer than 2 minutes. Note that the 2-minute window for
- "Lax+POST" is a temporary intervention and will be removed at
- some point in the future (some time after the Stable launch of
- Chrome 80), at which point cookies involved in these flows will
- require \`SameSite=None\` and \`Secure\` even if under 2
- minutes.
-
-If you are an IT administrator managing a Chrome deployment for your
-organization, policies will temporarily be made available to maintain Chrome's
-existing behavior for your users. This is to give enterprises extra time to roll
-out and test changes. You have two options:
-
-1. (Recommended) Apply the
- LegacySameSiteCookieBehaviorEnabledForDomainList policy to the
- specific domains on which cookies require legacy behavior.
-2. (Less recommended due to security and privacy implications) Apply
- the LegacySameSiteCookieBehaviorEnabled policy to revert all cookies
- to legacy behavior.
-
-These policies will be made available starting in ~~Chrome 80~~. Chrome 79.
-**(See Oct 2, 2019 update.)**
-
-**Sept 26, 2019**
-
-Starting in Chrome 80, cookies that do not specify a SameSite attribute will be
-treated as if they were SameSite=Lax with the additional behavior that they will
-still be included in [POST
-requests](https://www.chromestatus.com/feature/5088147346030592) to ease the
-transition for existing sites. Cookies that still need to be delivered in a
-cross-site context can explicitly request SameSite=None, and must also be marked
-Secure and delivered over HTTPS. We will provide policies if you need to
-configure Chrome Browser to temporarily revert to legacy SameSite behavior.
-
-**This section is obsolete: See Oct 2, 2019 update.**
-
-~~While experiments for this change will be rolling out to Chrome 78 Beta users,
-the Beta SameSite experiment rollout will exclude Windows and Mac devices that
-are joined to a domain and Chrome OS devices that are enterprise-registered.
-Beta users on Linux, iOS, Android, and Android Webview will also not be affected
-by the experiments at this time. For Chrome Beta users unaffected by the
-experiments, there should be no change in behavior to login services or embedded
-content.~~
-
-The new SameSite rules will become the default behavior on Stable in Chrome 80,
-but the changes will be limited to pre-Stable versions of Chrome until then.
-
-Policies to manage this behavior will be made available when it becomes the
-default behavior for Chrome 80. One policy will allow administrators to specify
-a list of domains on which cookies should be handled according to the legacy
-behavior, and second policy will provide the option to set the global default to
-legacy SameSite behavior for all cookies. More details about these policies will
-follow in future enterprise release notes before the Chrome 80 release.
-
-Chrome continues to engage with members of the web community and welcomes input
-on these SameSite changes via our forum:
-<https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev> \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/same-site/test-debug/index.md b/chromium/docs/website/site/updates/same-site/test-debug/index.md
deleted file mode 100644
index 98ceea625d8..00000000000
--- a/chromium/docs/website/site/updates/same-site/test-debug/index.md
+++ /dev/null
@@ -1,379 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-- - /updates/same-site
- - SameSite Updates
-page_name: test-debug
-title: "Tips for testing and debugging SameSite-by-default and \u201CSameSite=None;\
- \ Secure\u201D cookies"
----
-
-*(Last updated: Mar 18, 2021)*
-
-What: An overview of steps you can take to test your site against Chrome’s new
-SameSite-by-default cookie behavior, and tips for debugging cookie issues that
-may be related.
-
-Who: You should read this if your site [provides or depends upon cross-site
-cookies](https://web.dev/samesite-cookie-recipes/#use-cases-for-cross-site-or-third-party-cookies).
-Some of these tips will probably be of limited use unless you feel comfortable
-using [Chrome
-DevTools](https://developers.google.com/web/tools/chrome-devtools), and
-understand what an [HTTP
-request](https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview) is and [how
-cookies are used](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) in
-HTTP requests and responses.
-
-How: Please use **Chrome 84** or newer (Beta included). (Older versions of
-Chrome may implement subtly different SameSite behavior, particularly for Chrome
-extensions, and may not include the debugging tools mentioned below.) You can
-check your version number by going to chrome://version.
-
-[TOC]
-
-## Testing tips
-
-### Enable the new SameSite behavior
-
-To ensure that you are testing against the correct browser behavior, you must
-first ensure that the new SameSite behavior is enabled. As of Chrome 85, the new
-behavior is enabled by default in Chrome, so you only need to make sure that the
-features are not explicitly disabled by your flags settings. (**NOTE**: These
-flags were removed in Chrome 91, as the behavior is enabled by default as of
-Chrome 85. If you are running Chrome 91 or newer, you can skip to step 3.)
-
- Go to chrome://flags and enable (or set to "Default") both
- #same-site-by-default-cookies and #cookies-without-same-site-must-be-secure.
-
- Restart Chrome for the changes to take effect, if you made any changes.
-
- Verify that your browser is applying the correct SameSite behavior by
- visiting [this test site](https://samesite-sandbox.glitch.me/) and checking
- that all rows are green.
-
-Chrome 84 introduces a flag called #enable-experimental-cookie-features, which
-enables a group of new and upcoming cookie features, including
-#same-site-by-default-cookies and #cookies-without-same-site-must-be-secure.
-This flag also removes the 2 minute "Lax+POST" exception for top-level
-cross-site POST requests. This can be a convenient way to preview the future
-behavior of cookies in Chrome, but it may also result in unexpected behavior as
-the set of cookie features enabled by this flag is subject to change.
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/R-aZMg4kE2vPYvQnnDe628l187CfzYTyqKSSPzVktT9LQmylYly7WkT-pb7leK3-b48IsPxBq2XRwdNIrKF9X5pse3n4-86i-EuQm6Wj7mRW9n96ZAOld6Iia2K5bgELsn-Xf-5OPQ"
-height=343 width=624>
-
-### Testing your site
-
-Thoroughly test site functionality, with a focus on anything involving federated
-login flows, online payments, 3-D Secure verification, multiple domains, or
-cross-site embedded content (iframes, images, videos, etc.).
-
-For any flows involving POST requests (such as some login flows), we recommend
-that you test with and without a long (&gt; 2 minute) delay, due to the 2 minute
-threshold for [Lax+POST](/updates/same-site) behavior (see below for more
-Lax+POST tips).
-
-You will know if cookies used on your site will be affected by the new SameSite
-behavior if you see a banner in DevTools about issues detected while testing
-your site, and clicking on the banner takes you to one or more issues related to
-SameSite. Issues can also be viewed directly in the [Issues
-](https://developers.google.com/web/tools/chrome-devtools/issues)tab, found in
-the three-dot menu in DevTools labeled "More tools". From the Issues tab, you
-can view the cookies triggering each warning by clicking on "affected
-resources".
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/dx5UjWtONshjDOB38ocTxi5LCL4l5DLx4itoEvweYERClgyiyDRvC1Xg7D-PHXj4r90nlkNMwP8mrg5GlzGmXFHhp_spDOIWJGvWDbaPRxwQcJ-M3dPjs3pX2cL0W4rwcqELN0JWlw"
-height=343 width=624>
-
-Note that the presence of a cookie in an issue does not necessarily indicate
-that something is broken -- you must test thoroughly and determine that for
-yourself. Some of those blocked cookies may not affect any site functionality.
-Some "legacy" cookies are also intentionally left non-compliant as a
-[workaround](https://web.dev/samesite-cookie-recipes/#handling-incompatible-clients)
-for [incompatible clients](/updates/same-site/incompatible-clients), and will
-continue to appear in the Issues tab despite the site having been updated.
-
-### Testing under Lax+POST
-
-If your site does not use POST requests, you can ignore this section.
-
-Firstly, if you are relying on top-level, cross-site POST requests with cookies
-then these will only be sent if they specify SameSite=None; Secure. Also
-consider the
-[POST/Redirect/GET](https://en.wikipedia.org/wiki/Post/Redirect/Get) pattern as
-a way of removing the need for the cookie on that request. Under the new
-SameSite behavior, any cookie that was not set with a specified SameSite
-attribute value will be treated as SameSite=Lax by default, which will exclude
-cookies from these requests. However there is the
-“[Lax+POST](/updates/same-site)” special exception that Chrome makes for such
-cookies for the first 2 minutes after they are created, which allows them to be
-sent on top-level cross-site POST requests (which normal Lax cookies are
-excluded from). This special exception for fresh cookies will be phased out in
-future Chrome releases.
-
-When testing, you should pay special attention to any requests that require
-cross-site POST requests (such as some login flows). If a cookie was granted
-Lax+POST due to its age (&lt; 2 minutes), but would otherwise be blocked under
-Lax rules, you will most likely see a message in the DevTools console about a
-cookie being allowed on a non-idempotent top-level cross-site request (but in
-some cases you may not -- check the NetLog (see below) for the definitive
-answer). We recommend that you test with both a short (&lt; 2 min) and long
-(&gt; 2 min) delay between setting the cookie and making the POST request.
-
-We also recommend testing with the eventual SameSite behavior (after Lax+POST is
-phased out). To do this, run Chrome from the command line with the additional
-flag --enable-features=SameSiteDefaultChecksMethodRigorously to disable the
-Lax+POST exception. (This is automatically applied if you enabled the SameSite
-behavior via the #enable-experimental-cookie-features flag.)
-
-For automated testing, it may be impractical to wait for 2 minutes to test the
-long-delay behavior. For this purpose, you can use the command line flag
---enable-features=ShortLaxAllowUnsafeThreshold to lower the 2 minute threshold
-to 10 seconds.
-
-### Testing Chrome extensions
-
-Chrome extensions must also abide by the new SameSite cookie behavior. Extension
-pages, which have a chrome-extension:// scheme URL, are generally considered
-cross-site to any web page (https:// or http://). There are certain scenarios
-where an exception is made (this is accurate as of Chrome 80, but behavior may
-change in the future):
-
- If an extension page initiates a request to a web URL, the request is
- considered same-site if the extension has [host
- permission](https://developer.chrome.com/extensions/declare_permissions) for
- the requested URL in the extension’s manifest. This could happen, for
- example, if an extension page has an iframe embedding a site that the
- extension has host permission for.
-
- If the top level frame (i.e. the site shown in the URL bar) is an extension
- page, and the extension has host permission for the requested URL, and the
- requested URL and the initiator of the request are same-site to each other,
- and the extension has host permission for the initiator origin, then the
- request is considered same-site. For example, this could happen if an
- extension has host permission for “\*://\*.site.example/”, and an extension
- page loads a.site.example in an iframe, which then navigates to
- b.site.example.
-
-The [chrome.cookies API](https://developer.chrome.com/extensions/cookies) is
-able to read and set any kind of cookie, including SameSite cookies. However, a
-web page embedded in an extension page is considered to be in a third party
-context for the purposes of document.cookie (JavaScript) accesses. For [content
-scripts](https://developer.chrome.com/extensions/content_scripts), the behavior
-of SameSite cookies is exactly the same as if the request were initiated from
-the page on which the content script is running.
-
-If your extension embeds a web page on an extension page, we recommend testing
-that the necessary cookies are sent on the web request. Blocked cookies should
-emit warning messages in the DevTools console for the extension page. If the
-special exceptions above apply, no message will appear.
-
-## Something is broken! -- Debugging tips
-
-### The basics
-
-You should suspect SameSite as the underlying problem if your site makes
-requests to other domains in embedded contexts (such as embedded
-images/videos/social posts, widgets from other sites, etc.), makes POST requests
-cross-site (such as in some login and payment flows), fetches cross-site
-resources via JavaScript, or otherwise [accesses cookies across
-sites](https://web.dev/samesite-cookie-recipes/#use-cases-for-cross-site-or-third-party-cookies).
-If the issue is primarily a browser or tab crashing or hanging, it is less
-likely to be caused by the new SameSite cookie behavior.
-
-First, check if the problem persists after setting the SameSite flags above to
-“Disabled” (note: setting them to “Default” may or may not disable the
-features). Remember to restart your browser for the changes to take effect. If
-the problem persists, you should suspect a root cause other than the new
-SameSite cookie behavior.
-
-If you have turned on third-party cookie blocking (see
-chrome://settings/cookies), try turning it off. This is particularly relevant
-for Android WebViews, which [block third-party cookies by
-default](https://developer.android.com/reference/kotlin/android/webkit/CookieManager#setacceptthirdpartycookies),
-even if they have SameSite=None and Secure.
-
-If you are testing in Incognito Mode, be aware that the default setting for
-Incognito Mode is to block third-party cookies. This can lead to behavior that
-appears similar to cross-site cookies being blocked due to lack of a SameSite
-attribute. This setting can be changed on Incognito Mode's New Tab Page, or in
-chrome://settings/cookies.
-
-<img alt="image"
-src="https://lh5.googleusercontent.com/pbU44LI9fiUSWR12J1wwc0H8VmgxWBSKmDDoAmmd6iplkAp9Gitgu01twLMie_YI0DHU7IDSLli3g5Aa11zT-4HkwI-aq-gSSuwsMSPqAFERQqyANDkF8o4v8tidfBGdGtpr6ohfjA"
-height=343 width=624>
-
-Try clearing your cache and cookies to see if the problem still reproduces.
-
-Check DevTools for
-[issues](https://developers.google.com/web/tools/chrome-devtools/issues) with
-SameSite cookies. Unfortunately, Chrome can only tell you when there are cookies
-that will behave differently under the new SameSite behavior, but it can’t tell
-you which cookies might be responsible for site breakage. However, if there are
-no issues about SameSite cookies on any important domains, there may be a
-different root cause to the problem.
-
-(Note that prior to Chrome 85, there were messages about non-compliant cookies
-emitted to the JavaScript console in DevTools on each page load. In Chrome 85,
-these messages were removed from the console. The [Issues
-](https://developers.google.com/web/tools/chrome-devtools/issues)tab is now the
-place to look for this information about SameSite cookies, and contains more
-debugging information than the console messages previously did.)
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/dePOTSAUn-mpYj7QuqPW9tRFUPaWjWY8K6iE2eY2nJH_sa6WRGINuAJhpq8HmaLfp7XNsZnqL2KPnIYJ0nu1HTqp05Qq4gfcpcX-fUCQKTjOG85j88UD9znPSh8Uz5wiZwXgCJ5X"
-height=375 width=624>
-
-### Using the DevTools Network panel
-
-Open the Network panel in DevTools and capture the network activity that occurs
-when reproducing the problem. If the expected network activity is absent, reload
-the page by pressing Ctrl+R in DevTools. Find the request or requests that are
-not working properly. This may be a request that returns an error code like 403
-(indicating an authentication problem, possibly caused by missing cookies), it
-may be highlighted in red, etc. It may be helpful to check the cookies listed in
-the Issues tab, as they should link directly to the affected requests (if they
-do not, refresh the page to ensure that the request is captured on the Network
-tab). Another helpful way to filter requests is to click on the "Has blocked
-cookies" checkbox at the rightmost side of the toolbar with the filter box.
-
-Click on the problematic request and go to the Cookies tab (right under the
-timeline, next to Headers, Preview, Response, Timing, etc.). Click on “show
-filtered out request cookies”. All the rows highlighted in yellow are cookies
-that were excluded from the request or rejected from the response for one reason
-or another. If you hover over the info icon on these blocked cookies, a tooltip
-will explain why that cookie was excluded. There may be multiple reasons why a
-cookie was excluded.
-
-[<img alt="image"
-src="/updates/same-site/test-debug/tsyEts8ZOXE.png">](/updates/same-site/test-debug/tsyEts8ZOXE.png)
-
-Look for cookies that were excluded solely for SameSite reasons. If any of these
-cookies are important to site functionality, their absence is likely the cause
-of the problem and they will need to be updated to comply with the new SameSite
-behavior.
-
-### Using Chrome histograms
-
-Chrome records metrics ("histograms") about internal activity as you browse the
-web. These can help diagnose cookie problems.
-
-Go to chrome://histograms and look for the following entries:
-
-* Cookie.SameSiteUnspecifiedEffective: This histogram logs the
- "effective" SameSite mode of every cookie that did not specify a
- SameSite attribute, i.e. what SameSite rules the browser actually
- applied to it. The "0" bucket corresponds to None, the "1" bucket
- corresponds to Lax, and the "3" bucket corresponds to Lax and
- eligible for Lax+POST.
-* Cookie.SameSiteNoneIsSecure: This histogram logs whether a
- SameSite=None cookie was Secure. The "0" bucket means not Secure,
- and the "1" bucket means Secure.
-
-To debug your own site, you can hit "Refresh" at the top of the page to clear
-the previous histogram entries, then check the histogram entries again after
-reproducing the problem.
-
-For the full descriptions of every histogram, see
-[histograms.xml](https://source.chromium.org/chromium/chromium/src/+/HEAD:tools/metrics/histograms/histograms.xml?originalUrl=https:%2F%2Fcs.chromium.org%2F)
-and
-[enums.xml](https://source.chromium.org/chromium/chromium/src/+/HEAD:tools/metrics/histograms/enums.xml?originalUrl=https:%2F%2Fcs.chromium.org%2F)
-(very large files!) in the Chromium source tree.
-
-### Using a NetLog dump
-
-Capture a NetLog dump (a record of all network activity) by following [these
-instructions](/for-testers/providing-network-details). Make sure to select
-“Include cookies and credentials” when you capture the log. (Since such a log
-may contain sensitive information, such as cookies with login information, use
-your judgement when sharing it with others.) Use the [NetLog
-viewer](https://netlog-viewer.appspot.com/#import) to open the captured log.
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/-txdtD5lsWOwrz7oYKDxKE50LqhG1iFa_ksHg7oVjnvPJmiQqd8Z3bfxAP2ELZfNoND5nBU5IhdTG99gQ6WGDRDLmvdNr1Bl4ppeQdDvL-zH4lAWrlSzZud-uTFvfLhxOd_B1DHdhQ"
-height=343 width=624>
-
-Click on Events in the sidebar and enter “type:url_request” in the search bar to
-view all the HTTP(S) requests captured in the log. You can additionally filter
-by requests with cookies blocked due to SameSite by adding “exclude_samesite” to
-the search bar.
-
-If you click on each request, you can look for the following things:
-
- Any COOKIE_INCLUSION_STATUS entry with status
- "EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX,
- WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT" and no other exclusion
- reasons. This will indicate that the cookie was blocked because of the
- SameSite-Lax-by-default rules, but would not have been blocked otherwise.
-
- Statuses with "WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE". This would
- indicate that the cookie would be expected to be blocked under
- Lax-by-default, but is instead allowed due to the 2 minute Lax+POST
- intervention. Such a cookie may not be causing problems now, but will in the
- future when Lax+POST is deprecated. See "Testing under Lax+POST" section
- above for more information.
-
- Statuses with "EXCLUDE_SAMESITE_NONE_INSECURE, WARN_SAMESITE_NONE_INSECURE"
- and no other exclusion reasons. This would indicate that the cookie was
- blocked because of Cookies-without-SameSite-must-be-Secure, but would not
- have been blocked otherwise.
-
- Statuses indicating EXCLUDE_USER_PREFERENCES mean that third-party cookie
- blocking is likely enabled, and the blocked cookie was a third-party cookie,
- or cookies from that site were blocked altogether by the user's settings.
- You can view cookie settings at chrome://settings/cookies.
-
-Both request and response cookies are shown here. If you suspect that your
-server’s Set-Cookie response header is incorrect, you can search for
-“type:cookie_store” and look for a COOKIE_STORE_COOKIE_ADDED entry, which will
-list the properties of the cookie, as interpreted by Chrome.
-
-<img alt="image"
-src="https://lh6.googleusercontent.com/YDowMuhFcJDHTyMVC_MXeybN8ZpiJBoSEzwrV3E1FXoTuxDTgSyFZU3PYRKP43Q2ZR7ttHsYs_9xw9JXVOxbeipK1lsTygRJBwHWodVJxPVgmh4KYn67Rf6hQLd9QGA0XZOpxpHWYg"
-height=343 width=624>
-
-To check whether Chrome considers a request cross-site, you can compare the
-site_for_cookies property of the request (this represents the top-frame origin)
-with the URL of the request. If these have the same registrable domain or
-[eTLD+1](https://stackoverflow.com/a/59773164) (the effective Top Level Domain
--- something like .com or .net or .co.uk -- as well as the label immediately to
-its left) then the request is most likely considered at least Laxly same-site
-(except in some cases with POST requests) and should attach cookies with
-SameSite=Lax or cookies defaulted into Lax mode. If they have different
-registrable domains, or if the site_for_cookies has an empty registrable domain,
-the request is always considered cross-site. The if the initiator property of
-the request is either "not an origin" or also shares the same registrable domain
-as the site_for_cookies and the request URL, then the request should
-additionally attach Strict cookies.
-
-The NetLog only covers cookies accessed over the network via HTTP(S) and does
-not include other methods of cookie access such as document.cookie (JavaScript)
-or chrome.cookies (extensions). For far more information about debugging using
-NetLogs, refer to [this
-document](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/crash-course-in-net-internals.md).
-
-### It was working until M86, now it's broken
-
-There is a known bug with Schemeful Same-Site in which the incorrect issue is
-displayed. Please see [Testing and Debugging Tips for Schemeful
-Same-Site](/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site).
-
-This is fixed in M87.
-
-## I found the problematic cookie(s). Now what?
-
- If the cookie is on a domain you control: You will need to update that
- cookie by setting SameSite=None; Secure on it. See resources
- [here](https://web.dev/samesite-cookie-recipes/) and
- [here](https://github.com/GoogleChromeLabs/samesite-examples).
-
- If the cookie is on a third-party domain: You should reach out to the owner
- of the domain setting that cookie and ask them to update it with
- SameSite=None; Secure.
-
-Still stuck? Post a question with the [“samesite”
-tag](https://stackoverflow.com/questions/tagged/samesite) on Stack Overflow, or
-file a Chrome bug using [this template](https://bit.ly/2lJMd5c).
diff --git a/chromium/docs/website/site/updates/same-site/test-debug/tsyEts8ZOXE.png.sha1 b/chromium/docs/website/site/updates/same-site/test-debug/tsyEts8ZOXE.png.sha1
deleted file mode 100644
index f3ddf986931..00000000000
--- a/chromium/docs/website/site/updates/same-site/test-debug/tsyEts8ZOXE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e3b6c75ed5933fa3a13df4cb2e989e062af36c78 \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/schemeful-same-site/index.md b/chromium/docs/website/site/updates/schemeful-same-site/index.md
deleted file mode 100644
index 82d8dc5bce5..00000000000
--- a/chromium/docs/website/site/updates/schemeful-same-site/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-page_name: schemeful-same-site
-title: Schemeful Same-Site
----
-
diff --git a/chromium/docs/website/site/updates/schemeful-same-site/schemeful-same-site-devtools-issues/index.md b/chromium/docs/website/site/updates/schemeful-same-site/schemeful-same-site-devtools-issues/index.md
deleted file mode 100644
index 157c8d05c5a..00000000000
--- a/chromium/docs/website/site/updates/schemeful-same-site/schemeful-same-site-devtools-issues/index.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-- - /updates/schemeful-same-site
- - Schemeful Same-Site
-page_name: schemeful-same-site-devtools-issues
-title: Schemeful Same-Site DevTools Issues
----
-
-Schemeful Same-Site is a change which further protects your website from CSRF
-attacks by distinguishing between the insecure and secure versions of it.
-Meaning that an attacker which takes control of http://bank.example isn't able
-to trick a user into clicking a link and sending `SameSite=Strict` cookies to
-https://bank.example, potentially logging in and draining the user's account.
-Schemeful Same-Site makes it so that http://bank.example and
-https://bank.example are considered cross-site to each other; just like how
-https://bank.example and https://shopping.example are considered cross-site to
-each other.
-
-To determine which, if any, of your website's cookies are affected you can check
-the [DevTools Issue
-Tab](https://developers.google.com/web/tools/chrome-devtools/issues) for any
-issues that pop up on your site.
-
-If you see any of the following issue titles then that means one of your
-website's cookies is going to be/was blocked. See the relevant section for each
-issue title below to see what could be causing this and the "How to Resolve"
-section how you can resolve it.
-
-## Issue Titles
-
-* Migrate entirely to HTTPS to continue having cookies sent on
- same-site requests
-* Migrate entirely to HTTPS to have cookies sent on same-site requests
-
-If you see either of these titles then this issue is caused by a navigation. See
-the navigation section within "Types of Issues"
-
-* Migrate entirely to HTTPS to continue having cookies sent to
- same-site subresources
-* Migrate entirely to HTTPS to continue allowing cookies to be set by
- same-site subresources
-* Migrate entirely to HTTPS to have cookies sent to same-site
- subresources
-* Migrate entirely to HTTPS to allow cookies to be set by same-site
- subresources
- * In a rare case this may also occur while POSTing a form. See the
- POSTing section within "Types of Issues"
-
-If you see any of these titles then this issue is caused by a subresource. See
-the subresource section within "Types of Issues"
-
-## Types of Issues
-
-Note: Two urls with the same registrable domain but different schemes are termed
-cross-scheme to each other.
-
-### Navigation Issues
-
-## Navigating between cross-scheme versions of a website would previously allow `SameSite=Strict` cookies to be sent. Now this is treated the same as a navigation from an entirely different website which means `SameSite=Strict` cookies will be blocked from being sent.
-
-### Subresource Issues
-
-Loading a cross-scheme subresource on a page would previously allow
-`SameSite=Strict` or `SameSite=Lax` cookies to be sent or set. Now this is
-treated the same way as any other third-party subresource which means that any
-`SameSite=Strict` or `SameSite=Lax` cookies will be blocked.
-
-### POSTing Issue
-
-Posting between cross-scheme versions of a website would previously allow
-cookies set with `SameSite=Strict` or `SameSite=Lax `to be sent. Now this is
-treated the same as a POST from an entirely different website which means only
-`SameSite=None `cookies can be sent.
-
-Because `SameSite=None` require the `Secure` attribute on cookies, this can only
-be done from HTTP to HTTPS. The other way, HTTPS to HTTP, will not work as
-cookies with the Secure attribute cannot be sent to insecure URLs.
-
-## Debugging Tips
-
-Please see [this
-page](/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site)
-for more information on how to debug your site.
-
-## How to Resolve
-
-### Upgrade to HTTPS
-
-The **best way** to resolve these issues is to make sure your entire site is
-upgraded to HTTPS. Once this is the case none of your cookies will be affected
-by Schemeful Same-Site.
-
-### Unable to Upgrade to HTTPS
-
-While we strongly recommend that you upgrade your site entirely to HTTP to
-protect your users, if you’re unable to do so yourself we suggest speaking with
-your hosting provider to see if they can offer that option.
-
-If that’s still not possible then a workaround you can try is relaxing the
-`SameSite` protection on affected cookies.
-
-* In cases where only `SameSite=Strict` cookies are being blocked you
- can lower the protection to `SameSite=Lax`.
-* In cases where both `SameSite=Strict` and `SameSite=Lax` cookies are
- being blocked and your cookies are being sent to (or set from) a
- secure URL you can lower the protections to `SameSite=None`.
- * This workaround will fail if the URL you’re sending cookies to
- (or setting them from) is insecure. This is because
- `SameSite=None` requires the `Secure` attribute on cookies which
- means those cookies may not be sent or set to a insecure URL. In
- this case you will be unable to access that cookie until your
- site is upgraded to HTTPS. \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of Issue.png.sha1 b/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of Issue.png.sha1
deleted file mode 100644
index dbfd4133330..00000000000
--- a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of Issue.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f2a61ec0ad4f974cccf38dc5194cecaaa7cb59e9 \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of flags.png.sha1 b/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of flags.png.sha1
deleted file mode 100644
index b49678887c0..00000000000
--- a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS of flags.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-54f15289e94d3e4d8d32be223d47ef5e96510421 \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/index.md b/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/index.md
deleted file mode 100644
index a2713099f40..00000000000
--- a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/index.md
+++ /dev/null
@@ -1,216 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-- - /updates/schemeful-same-site
- - Schemeful Same-Site
-page_name: testing-and-debugging-tips-for-schemeful-same-site
-title: Testing and Debugging Tips for Schemeful Same-Site
----
-
-*(Last updated: Nov 09, 2020)*
-
-**What**: An overview of steps you can take to test your site against Chrome’s
-new Schemeful Same-Site behavior, and tips for debugging cookie issues that may
-be related.
-**Who**: You should read this if your site has any sort of [mixed
-content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content)
-(Secure to Insecure or vice-versa) or links between secure and insecure pages.
-Some of these tips will probably be of limited use unless you feel comfortable
-using [Chrome
-DevTools](https://developers.google.com/web/tools/chrome-devtools), and
-understand what an [HTTP
-request](https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview) is and [how
-cookies are used](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) in
-HTTP requests and responses.
-**How**: Please use **Chrome 86** or newer (Beta included). You can check your
-version number by going to chrome://version.
-
-[TOC]
-
-## Testing tips
-
-### Enable Schemeful Same-Site & Cookie Deprecation Messages
-
-Make sure you're testing Schemeful Same-Site by enabling the feature directly.
-Note that if you do not explicitly enable or disable (i.e.: leave it in the
-"Default" state) then Chrome may or may not use the feature depending on if your
-browser is part of an experimental group. Similarly for cookie deprecation
-messages.
-
-1. Go to chrome://flags and set both #schemeful-same-site and
- #cookie-deprecation-messages to "Enabled".
-2. Restart Chrome.
-
-<img alt="image"
-src="/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS%20of%20flags.png">
-
-## Testing your Site
-
-Test your site by visiting and interacting with any pages that have [mixed
-content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content)
-and link between secure and insecure pages.
-If you're site doesn't use
-[HSTS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security)
-then try seeing if you can navigate to insecure version of your pages, these can
-be a surprising source of mixed content.
-You will know if any cookies are affected by using the [DevTools Issues
-Tab](https://developers.google.com/web/tools/chrome-devtools/issues) and looking
-for issues with any of these titles
-
-* “Migrate entirely to HTTPS to continue having cookies sent on
- same-site requests”
-* “Migrate entirely to HTTPS to have cookies sent on same-site
- requests”
-* “Migrate entirely to HTTPS to continue having cookies sent to
- same-site subresources”
-* “Migrate entirely to HTTPS to continue allowing cookies to be set by
- same-site subresources”
-* “Migrate entirely to HTTPS to have cookies sent to same-site
- subresources”
-* “Migrate entirely to HTTPS to allow cookies to be set by same-site
- subresources”
-
-<img alt="image"
-src="/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/SS%20of%20Issue.png">
-
-Note that the presence of a cookie within an issue doesn't necessarily indicate
-that something on your site broke, you need test and determine that yourself.
-Some of those blocked cookies may not affect any functionality.
-
-### Why do I see Issues if my cookies don't use SameSite?
-
-[SameSite-by-Default](https://web.dev/samesite-cookies-explained/#changes-to-the-default-behavior-without-samesite)
-now launched and active. This means that any cookies without a SameSite
-attribute are treated as though they have SameSite=Lax and thus can trigger
-warnings for Schemeful Same-Site.
-
-**Known Bug (Fixed in M87)**: In M86 if a cookie without SameSite is blocked due
-to Schemeful Same-Site the correct issues ("Migrate entirely to HTTPS...") will
-not appear. Instead only "Indicate whether to send/set a cookie in a
-cross-site..." will be shown. If you disable chrome://flags#schemeful-same-site
-and the issues go away then you can be confident this is caused by Schemeful
-Same-Site.
-
-## Debugging Tips, or My Site Broke
-
-**Note:** The term cross-scheme is used here to mean the same registrable domain
-but differing schemes. For example, ==http==://example.com and
-==https==://example.com are considered cross-scheme to each other.
-
-### Starting Off
-
-Schemeful Same-Site may the cause of your site's breakage if your site/page
-makes cross-scheme requests. Issues such as browser/tab crashes or hangs are
-unlikely to be caused by Schemeful Same-Site.
-
-Check that the problem persists after setting the Schemeful Same-Site flag to
-"Disabled" (Setting it to "Default" may not disable the feature) and restart
-your browser. If the problem persists than it's unlikely to be caused by
-Schemeful Same-Site.
-
-Try clearing your cache and cookies, are you still able to reproduce the
-problem?
-
-### Using the DevTools Network Panel
-
-Open the Network panel in DevTools and capture the network activity that occurs
-when reproducing the problem. If the expected network activity is absent, reload
-the page by pressing Ctrl+R in DevTools. Find the request or requests that are
-not working properly. This may be a request that returns an error code like 403
-(indicating an authentication problem, possibly caused by missing cookies), it
-may be highlighted in red, etc. It may be helpful to check the cookies listed in
-the Issues tab, as they link directly to the affected requests (if they do not,
-refresh the page to ensure that the request is captured on the Network tab).
-Another helpful way to filter requests is to click on the "Has blocked cookies"
-checkbox at the rightmost side of the toolbar with the filter box.
-
-Click on the problematic request and go to the Cookies tab (right under the
-timeline, next to Headers, Preview, Response, Timing, etc.). Click on “show
-filtered out request cookies”. All the rows highlighted in yellow have cookies
-that were excluded from the request or rejected from the response for one reason
-or another. If you hover over the info icon on these blocked cookies, a tooltip
-will explain why that cookie was excluded. This tooltip currently does not
-specifically mention Schemeful Same-Site but rather a standard SameSite issue;
-if the DevTools issue links to this request or if the problem goes away if you
-disable the Schemeful Same-Site flag then you can be confident that the cookie
-was blocked due to Schemeful Same-Site.
-
-[<img alt="image"
-src="/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/tsyEts8ZOXE.png">](/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/tsyEts8ZOXE.png)
-
-### Using Chrome Histograms
-
-Chrome records metrics ("histograms") about internal activity as you browse the
-web. These can help diagnose cookie problems.
-
-Go to chrome://histograms and look for the following entries:
-
-To debug your own site, you can hit "Refresh" at the top of the page to clear
-the previous histogram entries, then check the histogram entries again after
-reproducing the problem.
-
-* Cookie.SameSiteContextDowngradeRequest: This histograms logs cookies
- which would be sent in a request when Schemeful Same-Site is
- disabled, but would be blocked when Schemeful Same-Site is enabled.
- The "0" and "1" buckets indicate unaffected cookies and can be
- safely ignored. All other buckets indicate some type of blockage
- with each bucket being caused by a specific type of situation. These
- specific buckets may be too technical to be of use to you, but if
- you're interested you can see the histograms.xml and enums.xml for
- more info.
-
-* Cookie.SameSiteContextDowngradeResponse: This histogram is the same
- as the above but for cookies which blocked from being set.
-
-For the full descriptions of every histogram, see
-[histograms.xml](https://source.chromium.org/chromium/chromium/src/+/HEAD:tools/metrics/histograms/histograms_xml/cookie/histograms.xml)
-and
-[enums.xml](https://source.chromium.org/chromium/chromium/src/+/HEAD:tools/metrics/histograms/enums.xml?originalUrl=https:%2F%2Fcs.chromium.org%2F)
-(very large files!) in the Chromium source tree.
-
-### Using a NetLog Dump
-
-Capture a NetLog dump (a record of all network activity) by following [these
-instructions](/for-testers/providing-network-details). Make sure to select
-“Include cookies and credentials” when you capture the log. (Since such a log
-may contain sensitive information, such as cookies with login information, use
-your judgement when sharing it with others.) Use the [NetLog
-viewer](https://netlog-viewer.appspot.com/#import) to open the captured log.
-
-<img alt="image"
-src="https://lh3.googleusercontent.com/-txdtD5lsWOwrz7oYKDxKE50LqhG1iFa_ksHg7oVjnvPJmiQqd8Z3bfxAP2ELZfNoND5nBU5IhdTG99gQ6WGDRDLmvdNr1Bl4ppeQdDvL-zH4lAWrlSzZud-uTFvfLhxOd_B1DHdhQ"
-height=343 width=624>
-
-Click on Events in the sidebar and enter “type:url_request” in the search bar to
-view all the HTTP(S) requests captured in the log. You can additionally filter
-by requests with cookies blocked due to Schemeful Same-Site by adding
-“exclude_samesite” to the search bar.
-
-If you click on each request, you should look for any cookies with any of the
-following:
-
-* WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE
-* WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE
-* WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE
-* WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE
-* WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE
-
-Both request and response cookies are shown here. If you suspect that your
-server’s Set-Cookie response header is incorrect, you can search for
-“type:cookie_store” and look for a COOKIE_STORE_COOKIE_ADDED entry, which will
-list the properties of the cookie, as interpreted by Chrome.
-
-The NetLog only covers cookies accessed over the network via HTTP(S) and does
-not include other methods of cookie access such as document.cookie (JavaScript)
-or chrome.cookies (extensions). For far more information about debugging using
-NetLogs, refer to [this
-document](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/crash-course-in-net-internals.md).
-
-## What do I do now?
-
-Once you've identified the problem cookie(s) you can follow the directions under
-"How to Resolve" on [this
-page](/updates/schemeful-same-site/schemeful-same-site-devtools-issues).
-
-Still have issues? File a bug [here](https://bugs.chromium.org/p/chromium).
diff --git a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/tsyEts8ZOXE.png.sha1 b/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/tsyEts8ZOXE.png.sha1
deleted file mode 100644
index 080bd505ac7..00000000000
--- a/chromium/docs/website/site/updates/schemeful-same-site/testing-and-debugging-tips-for-schemeful-same-site/tsyEts8ZOXE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-088a4708c8d95897f6baf5e8dc9e8bb348bf9e9d \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/trust-token/index.md b/chromium/docs/website/site/updates/trust-token/index.md
deleted file mode 100644
index 5ae58bc06d3..00000000000
--- a/chromium/docs/website/site/updates/trust-token/index.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-page_name: trust-token
-title: Trust Token API
----
-
-* [Getting Started with Trust Tokens](https://web.dev/trust-tokens/) - Developer focused explanation of Trust Token.
-* **[API Explainer](https://github.com/WICG/trust-token-api/blob/master/README.md)** - high-level description of the problem and initial sketch of the interface.
-* [Chrome Trust Token Design Doc](https://docs.google.com/document/d/1TNnya6B8pyomDK2F1R9CL3dY10OAmqWlnCxsWyOBDVQ/edit) - currently the normative source for the HTTP API.
-* [Using the prototype Trust Token API](https://docs.google.com/document/u/1/d/1qUjtKgA7nMv9YGMhi0xWKEojkSITKzGLdIcZgoz6ZkI/edit) - describes the interface as implemented, with examples and error conditions.
-* [Prototype Issuer Library](https://github.com/google/libtrusttoken) - C library for Trust Token (TrustTokenV2+).
-
-**Experimenting**
-
-You can manually enable this feature on your build of Chrome by using the `--enable-features=TrustTokens` command line flag (or setting chrome://flags/#trust-tokens to enabled).
-In order to execute Trust Tokens operations, you'll need an origin trial token present *or* to have provided the additional command-line flag `--enable-blink-features=TrustTokens,TrustTokensAlwaysAllowIssuance`.
-If you are experimenting with a new issuer, you can manually provide the Trust Token key commitments via the `--additional-trust-token-key-commitments='{ "<issuer
-origin>": <key commitment response> }'` flag.
-
-Process for registering as an issuer: <https://docs.google.com/document/d/1cvUdAmcstH6khLL7OrLde4TnaPaMF1qPp3i-2XR46kU/>
-
-If you are trying to register as a developer to use the Trust Token APIs to issue/redeem, please follow the standard Origin Trial registration process: <https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/developer-guide.md>
-
-If you have questions/suggestions related to the web API or protocol that needs clarification, please file an issue at: <https://github.com/WICG/trust-token-api/issues/>
-
-If you have questions/suggestions related to the Chrome origin trial or implementation, please file a bug at: [Chromium Bug Tracker](https://bugs.chromium.org/p/chromium/issues/entry?components=Internals%3ENetwork%3ETrustTokens)
-
-**Launch Timeline**
-
-Last updated January 4, 2022.
-
-The Trust Token API has been running in Origin Trial since Chrome 84, running at 50% on Dev/Canary/Beta and 10% on Stable. It is currently running through to Chrome 101.
-
-Chrome 84-88 supports [TrustTokenV1](https://github.com/WICG/trust-token-api/tree/36da1948de580fa4efb61a3ec324a608edca8c68) which includes verification of the Redemption Record.
-
-Starting in Chrome 88, the Trust Token API in Chrome will will support [TrustTokenV2](https://github.com/WICG/trust-token-api/) which renames a few APIs and no longer verifies the Redemption Record, allowing issuers to use it as a free-form record.
-Additionally, TrustTokenV2 supports two operating modes, a faster variant based on VOPRFs that supports 6 public buckets (using 6 keys in the key commitment) and the slower private metadata variant using PMBTokens that supports 3 public buckets and 1 private bit (using 3 keys in the key commitments).
-
-Key commitments for Chrome 88 onward can omit the 'srrkey' field in the key commitment.
-
-Starting in Chrome 92, the Trust Token API in Chrome will partially support TrustTokenV3 which changes the format of the key commitment to allow for better support across Trust Token versions.
-
-Starting in Chrome 93, the Trust Token API in Chrome will fully support TrustTokenV3 including the switch to using P256 for the signing algorithm.
-
-To support migration between TrustTokenV2 and TrustTokenV3, Chrome's commitment fetcher supported parsing a 'hybrid' commitment format that contains both the V2 and V3 key commitments until Chrome
-92 reached stable:
-
-```
-{
- "TrustTokenV3...": { ... }, // V3 commitment (parsed by Chrome 92 and above)
- // V2 commitment (parsed by Chrome 91 and below)
- "protocol_version": "TrustTokenV2...",
- "id": ...,
- ...
-}
-```
-
-To prevent ecosystem burn-in of the long origin trial, we temporarily disabled the API from November 18th to December 2nd.
-
-For the full Chrome release schedule, [see here](https://chromiumdash.appspot.com/schedule). \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/ua-ch/OWNERS b/chromium/docs/website/site/updates/ua-ch/OWNERS
deleted file mode 100644
index f4f6af63059..00000000000
--- a/chromium/docs/website/site/updates/ua-ch/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-miketaylr@chromium.org
-abeyad@chromium.org
diff --git a/chromium/docs/website/site/updates/ua-ch/index.md b/chromium/docs/website/site/updates/ua-ch/index.md
deleted file mode 100644
index 1c048310e6a..00000000000
--- a/chromium/docs/website/site/updates/ua-ch/index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-page_name: ua-ch
-title: User-Agent Client-Hints
----
-
-# **Overview**
-
-This page provides a central reference point about the User-Agent Client Hints
-(UA-CH) rollout for Chrome 85+ stable. If you’re not familiar with User-Agent
-Client Hints, you can read up on them
-[here](https://web.dev/user-agent-client-hints/).
-
-# **Launch Timeline**
-
-Last updated November 22, 2021
-
-* **March 3, 2021: UA-CH is rolling out to 100% of stable population
- in tandem with version 89**
-* **October 14, 2020:** We've paused increasing the population subset
- of the roll out while we examine ecosystem impact and investigate
- possible issues due to the Structured Headers format.
-* **October 5, 2020:** Gradual roll out continues to a larger subset
- of the population.
-* **September 9, 2020:** UA-CH will begin roll out to an initial small
- percentage of the Chrome 85 stable population.
-* **May, 2020:** UA-CH was rolled out to most of Chrome Canary, Dev
- and Beta populations.
-* **June 10, 2021**: Critical-CH and ACCEPT_CH features were disabled
- due to a potential crash while investigating and implementing fixes.
-* **November 22, 2021**: Intent to Ship: Sec-CH-UA-Full-Version-List
- user-agent client hint.
-
-# **Possible Site Compatibility Issue**
-
-UA-CH is an additive feature, which adds two new request headers that are sent
-by default: \`sec-ch-ua\` and \`sec-ch-ua-mobile\`. Those request headers are
-based off of [Structured Field
-Values](https://httpwg.org/http-extensions/draft-ietf-httpbis-header-structure.html),
-an emerging standard related to HTTP header values. They contain characters
-that, though permitted in the HTTP specification, weren’t previously common in
-request headers, such as double-quotes (“), equal signs (=), forward-slashes
-(/), and question marks (?). Some Web-Application-Firewall (WAF) software, as
-well as backend security measures, may
-[mis-categorize](https://bugs.chromium.org/p/chromium/issues/detail?id=1091285)
-those new characters as “suspicious”, and as such, block those requests.
-
-This typically presents itself as a 4XX HTTP response code (e.g. 400, 404 or
-422), either on any request or on POST requests or API endpoints (which servers
-tend to take special precautions with).
-
-# **How to file bugs**
-
-Here are some basic troubleshooting steps:
-
-* Check `chrome://version` and make sure the version number is at
- least 85. The UA-CH feature is only enabled for Chrome 85+.
-* If the issue is primarily the browser or tab experiencing a crash or
- hang, it is not likely to be a UA-CH related issue.
-* Test again with the \``--disable-features=UserAgentClientHint`\`
- command line flag. You can use the [test
- site](https://user-agent-client-hints.glitch.me/) to verify that the
- feature is indeed off.
-* If the problem persists, the source of the issue is likely to be
- elsewhere.
-* In case the problem went away, that’s a strong indicator that it is
- a UA-CH related issue
-
-If after trying these things, you have determined that it may be a UA-CH issue,
-please [file a CR bug](https://crbug.com/new), including \[UA-CH\] in its title.
-Add a comment about it to the following [tracking
-bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1091285).
-
-# **(Deprecated) How to identify if a user is in the stable experiment**
-
-**Note:** As of Chrome 89, this feature is rolled out to full population.
-
-Go to `chrome://version?show-variations-cmd`. Search for “UserAgentClientHint”
-in the long command string towards the bottom. If they are in the enabled group,
-the `--force-fieldtrials` value will say something like one of the following:
-
-* /\*UserAgentClientHintRollout/Enabled/
-* /\*UserAgentClientHintRollout/Enabled_v2/
-* /\*UserAgentClientHintRollout/Enabled_v3/
-* /\*UserAgentClientHintRollout/Enabled_v4/
-* /\*UserAgentClientHintRollout/Enabled_v5/
-
-If they do not have the features enabled, the string will be absent.
-
-Alternatively, going to this [test
-site](https://user-agent-client-hints.glitch.me/) can confirm the feature is
-enabled - when the feature is enabled \`sec-ch-ua\` and \`sec-ch-ua-mobile\`
-requests will be listed as being sent by the client. \ No newline at end of file
diff --git a/chromium/docs/website/site/updates/ua-reduction/OWNERS b/chromium/docs/website/site/updates/ua-reduction/OWNERS
deleted file mode 100644
index f4f6af63059..00000000000
--- a/chromium/docs/website/site/updates/ua-reduction/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-miketaylr@chromium.org
-abeyad@chromium.org
diff --git a/chromium/docs/website/site/updates/ua-reduction/index.md b/chromium/docs/website/site/updates/ua-reduction/index.md
deleted file mode 100644
index 1493754c920..00000000000
--- a/chromium/docs/website/site/updates/ua-reduction/index.md
+++ /dev/null
@@ -1,454 +0,0 @@
----
-breadcrumbs:
-- - /updates
- - updates
-page_name: ua-reduction
-title: User-Agent Reduction
----
-
-[TOC]
-
-## Updates
-
-April 11, 2022: Add a table to map from UA to UA-CH
-
-March 3, 2022: Added frozen Chrome OS platform version to
-<code>&lt;unifiedPlatform&gt;</code> value
-
-February 18, 2022: Added information on the platforms for which User-Agent
-reduction is applicable, as well as links to resources.
-
-October 12, 2021: Information on using the Origin Trial with third-party embeds
-was add to the [blog
-post](https://developer.chrome.com/blog/user-agent-reduction-origin-trial/).
-
-September 16, 2021: Chrome milestones were added to reflect
-<https://blog.chromium.org/2021/09/user-agent-reduction-origin-trial-and-dates.html>.
-
-May 24, 2021: The chrome://flags#freeze-user-agent flag was renamed to
-chrome://flags/#reduce-user-agent in Chrome 93 and the values were updated to
-align with the plan below (also testable via --enable-features=ReduceUserAgent).
-
-## Proposed Rollout Plan
-
-**Reduction Preparation**
-
-Phase 1: Warn about accessing navigator.userAgent, navigator.appVersion, and
-navigator.platform in DevTools, beginning in M92.
-
-Phase 2: **Chrome 95 to Chrome 100** Launch an Origin Trial for sites to opt
-into the final reduced UA string for testing and feedback, for at least 6
-months.
-
-**Reduction Rollout**
-
-Phase 3: **Chrome 100** Launch a reverse Origin Trial, for instances where a
-site may need more time for migration, for at least 6 months.
-
-Phase 4: **Chrome 101** Ship reduced Chrome MINOR.BUILD.PATCH version numbers
-(“0.0.0”). Once rolled-out, the reduced UA string would apply to all page loads
-on desktop and mobile OSes that do not opt into the reverse Origin Trial.
-
-Phase 5: **Chrome 107** Begin roll-out of reduced Desktop UA string and related
-JS APIs (navigator.userAgent, navigator.appVersion, navigator.platform). Once
-rolled-out, the reduced UA string would apply to all page loads on desktop OSes
-that do not opt into the reverse Origin Trial.
-
-Phase 6: **Chrome 110** Begin roll-out of reduced Android Mobile (and Tablet) UA
-string and related JS APIs. Once rolled-out, the reduced UA string would apply
-to all page loads on Android that do not opt into the reverse Origin Trial.
-
-**Reduction Completion**
-Phase 7: **Chrome 113** reverse Origin Trial ends and all page loads receive the
-reduced UA string and related JS APIs.
-
-## Reduced User Agent String Reference
-
-This reduced format will be available for testing via chrome://flags/#reduce-user-agent in Chrome 93.
-
-### Applicable platforms
-
-User-Agent reduction will be applied to the following platforms: Windows, macOS,
-Linux, Chrome OS, and Chrome on Android. We don't have current plans for
-User-Agent Reduction on iOS and Android WebView at this time.
-
-### Unified Format
-
-The unified format that covers all platforms post-UA Reduction looks like so:
-
-<pre><samp>Mozilla/5.0 (<strong>&lt;unifiedPlatform&gt;</strong>) AppleWebKit/537.36 (KHTML, like Gecko)
-Chrome/<strong>&lt;majorVersion&gt;</strong>.0.0.0 <strong>&lt;deviceCompat&gt;</strong> Safari/537.36
-</samp></pre>
-
-### Desktop
-
-The Chrome Desktop User Agent string currently uses the following format:
-
-<pre><samp>Mozilla/5.0 (<strong>&lt;platform&gt;</strong>; <strong>&lt;oscpu&gt;</strong>) AppleWebKit/537.36 (KHTML, like
-Gecko) Chrome/<strong>&lt;majorVersion&gt;.&lt;minorVersion&gt</strong>; Safari/537.36
-</samp></pre>
-
-Post UA-Reduction, the new format will be:
-
-<pre><samp>Mozilla/5.0 (<strong>&lt;unifiedPlatform&gt;</strong>) AppleWebKit/537.36 (KHTML, like Gecko)
-Chrome/<strong>&lt;majorVersion&gt;</strong>.0.0.0 Safari/537.36
-</samp></pre>
-
-### Mobile and Tablet
-
-The Chrome Mobile and Tablet User Agent strings use the following format:
-
-<pre><samp>Mozilla/5.0 (Linux; Android <strong>&lt;androidVersion&gt;</strong>; <strong>&lt;deviceModel&gt;</strong>)
-AppleWebKit/537.36 (KHTML, like Gecko)
-Chrome/<strong>&lt;majorVersion&gt;.&lt;minorVersion&gt; &lt;deviceCompat&gt;</strong>
-Safari/537.36
-</samp></pre>
-
-Post UA-Reduction, the new format will be:
-
-<pre><samp>Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko)
-Chrome/<strong>&lt;majorVersion&gt;</strong>.0.0.0 <strong>&lt;deviceCompat&gt;</strong> Safari/537.36
-</samp></pre>
-
-## Token Reference
-
-<table>
- <tr>
- <td><strong>Tokens</strong>
- <td><strong>Description</strong>
- <tr>
- <td><samp>&lt;androidVersion&gt;</samp>
- <td>Represents Android major version
- <tr>
- <td><samp>&lt;deviceModel&gt;</samp>
- <td>Represents Android device model.
- <tr>
- <td><samp>&lt;minorVersion&gt;</samp>
- <td>Represents the Chrome MINOR.BUILD.PATCH <a href="/developers/version-numbers">version numbers</a>.
- <tr>
- <td><samp>&lt;oscpu&gt;</samp>
- <td>Represents the device operating system and (optionally) CPU architecture.
- <tr>
- <td><samp>&lt;platform&gt;</samp>
- <td>Represents the underlying device platform.
- <tr>
- <th>Post-Reduction Tokens
- <th>
- <tr>
- <td><samp>&lt;deviceCompat&gt;</samp>
- <td>
- Represents device form-factor.
- <p>The possible values are:
- <ul>
- <li><samp>"Mobile"</samp>
- <li><samp>""</samp> (empty string, used by Tablets and Desktop)
- </ul>
- <tr>
- <td><samp>&lt;majorVersion&gt;</samp>
- <td>Represents the Chrome major version.
- <tr>
- <td><samp>&lt;unifiedPlatform&gt;</samp>
- <td>
- The intersection of <samp>&lt;platform&gt;</samp>,
- <samp>&lt;oscpu&gt;</samp>, <samp>&lt;androidVersion&gt;</samp>,
- and <samp>&lt;deviceModel&gt;</samp>, depending on device.
- <p>The possible desktop values* are:
- <ul>
- <li><samp>Windows NT 10.0; Win64; x64</samp>
- <li><samp>Macintosh; Intel Mac OS X 10_15_7</samp>
- <li><samp>X11; Linux x86_64</samp>
- <li><samp>X11; CrOS x86_64 14541.0.0</samp>
- </ul>
- <p>The possible mobile values* are:
- <ul>
- <li><samp>Linux; Android 10; K</samp>
- </ul>
- <p><em>* Note that these strings are literal values; they will
- not update even if a user is on an updated operating system
- or device.</em></p>
-</table>
-
-## UA Token to UA-CH Mapping
-
-<table>
- <tr>
- <th>UA string token</th>
- <th>
- HTTP UA-CH token
- (<a href="https://wicg.github.io/ua-client-hints/#http-ua-hints">ref</a>)
- </th>
- <th>
- UA-CH JS API
- (<a href="https://wicg.github.io/ua-client-hints/#interface">ref</a>)
- </th>
- </tr>
- <tr>
- <td>&lt;androidVersion&gt;</td>
- <td><code>Sec-CH-UA-Platform-Version</code></td>
- <td><code>UADataValues.platformVersion</code></td>
- </tr>
- <tr>
- <td>&lt;deviceCompat&gt;</td>
- <td><code>Sec-CH-UA-Mobile</code></td>
- <td><code>NavigatorUAData.mobile</code></td>
- </tr>
- <tr>
- <td>&lt;deviceModel&gt;</td>
- <td><code>Sec-CH-UA-Model</code></td>
- <td><code>UADataValues.model</code></td>
- </tr>
- <tr>
- <td>&lt;majorVersion&gt;</td>
- <td><code>Sec-CH-UA</code></td>
- <td><code>NavigatorUAData.brands</code></td>
- </tr>
- <tr>
- <td>&lt;minorVersion&gt;</td>
- <td><code>Sec-CH-UA-Full-Version-List</code></td>
- <td><code>UADataValues.fullVersionList</code></td>
- </tr>
- <tr>
- <td>&lt;oscpu&gt;</td>
- <td>
- Any combination of the following, as relevant:<br>
- <code>Sec-CH-UA-WoW64</code>, <code>Sec-CH-UA-Arch</code>,
- <code>Sec-CH-UA-Bitness</code>
- </td>
- <td>
- Any combination of the following, as relevant:<br>
- <code>UADataValues.wow64</code>, <code>UADataValues.arch</code>,
- <code>UADataValues.bitness</code>
- </td>
- </tr>
- <tr>
- <td>&lt;unifiedPlatform&gt;</td>
- <td>
- <code>Sec-CH-UA-Platform</code> and
- <code>Sec-CH-UA-Platform-Version</code>
- </td>
- <td>
- <code>UADataValues.platform</code> and
- <code>UADataValues.platformVersion</code>
- </td>
- </tr>
-</table>
-
-## Sample UA Strings: Phase 4
-
-In Phase 4 we change the <code>&lt;minorVersion&gt;</code> token to “0.0.0”.
-
-<table>
- <tr>
- <th>
- <th>Desktop (user on Windows 8.1, for example)
- <tr>
- <th>Phase 3 UA
- <td><samp>Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<del>0.1234.56</del> Safari/537.36</samp>
- <tr>
- <th>Phase 4 UA
- <td><samp>Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<ins>0.0.0</ins> Safari/537.36</samp>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Mobile (user on Samsung Galaxy, for example)
- <tr>
- <th>Phase 3 UA
- <td><samp>Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<del>0.1234.56</del> Mobile Safari/537.36</samp>
- <tr>
- <th>Phase 4 UA
- <td><samp>Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<ins>0.0.0</ins> Mobile Safari/537.36</samp>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Tablet (user on Samsung Galaxy, for example)
- <tr>
- <th>Phase 3 UA
- <td><samp>Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<del>0.1234.56</del> Safari/537.36</samp>
- <tr>
- <th>Phase 4 UA
- <td><samp>Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<ins>0.0.0</ins> Safari/537.36</samp>
-</table>
-
-## Sample UA Strings: Phase 5
-
-In Phase 5 we change the <code>&lt;platform&gt;</code> and
-<code>&lt;oscpu&gt;</code> tokens from their
-platform-defined values to the relevant <code>&lt;unifiedPlatform&gt;</code>
-token value (which will never change).
-
-Note: There may not be user-visible changes here, unless the user was on a lower
-version.
-
-Also note that the macOS platform version was already [capped to
-10_15_7](https://bugs.chromium.org/p/chromium/issues/detail?id=1175225) in
-Chrome 90 for site compatibility reasons.
-
-<table>
- <tr>
- <th>
- <th>Desktop (user on Windows 8.1, for example)
- <tr>
- <th>Phase 4 UA
- <td><samp>Mozilla/5.0 (Windows NT <del>6.3</del>; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36</samp>
- <tr>
- <th>Phase 5 UA
- <td><samp>Mozilla/5.0 (Windows NT <ins>10.0</ins>; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36</samp>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Mobile (user on Samsung Galaxy, for example)
- <tr>
- <th>Phase 4 UA
- <td><samp>Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36</samp>
- <tr>
- <th>Phase 5 UA
- <td><em>(No changes for Mobile UAs in Phase 5)</em>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Tablet (user on Samsung Galaxy, for example)
- <tr>
- <th>Phase 4 UA
- <td><samp>Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36</samp>
- <tr>
- <th>Phase 5 UA
- <td><em>(No changes for Tablet UAs in Phase 5)</em>
- </tr>
-</table>
-
-## Sample UA Strings: Phase 6
-
-In Phase 6, we change the <code>&lt;deviceModel&gt;</code> token to “K” and
-change the <code>&lt;androidVersion&gt;</code> token to a static “10” string.
-
-<table>
- <tr>
- <th>
- <th>Desktop (user on Windows 8.1, for example)
- <tr>
- <th>Phase 5 UA
- <td><samp>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36</samp>
- <tr>
- <th>Phase 6 UA
- <td><em>(No changes for Desktop UAs from Phase 5)</em>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Mobile (user on Samsung Galaxy, for example)
- <tr>
- <th>Phase 5 UA
- <td><samp>Mozilla/5.0 (Linux; Android <del>9; SM-A205U</del>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36</samp>
- <tr>
- <th>Phase 6 UA
- <td><samp>Mozilla/5.0 (Linux; Android <ins>10; K</ins>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36</samp>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Tablet (user on Samsung Galaxy, for example)
- </tr>
- <tr>
- <th>Phase 5 UA
- <td><samp>Mozilla/5.0 (Linux; Android <del>9; SM-T810</del>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36</samp>
- <tr>
- <th>Phase 6 UA
- <td><samp>Mozilla/5.0 (Linux; Android <ins>10; K</ins>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36</samp>
-</table>
-
-## Sample UA Strings: Final Reduced State
-
-<table>
- <tr>
- <th>
- <th>Desktop (user on Windows 8.1, for example)
- <tr>
- <th>Old UA
- <td><samp>Mozilla/5.0 (Windows NT <del>6.3</del>; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<del>0.1234.56</del> Safari/537.36</samp>
- <tr>
- <th>Final Reduced UA
- <td><samp>Mozilla/5.0 (Windows NT <del>10.0</del>; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<ins>0.0.0</ins> Safari/537.36</samp>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Mobile (user on Samsung Galaxy, for example)
- <tr>
- <th>Old UA
- <td><samp>Mozilla/5.0 (Linux; Android <del>9; SM-A205U</del>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<del>0.1234.56</del> Mobile Safari/537.36</samp>
- <tr>
- <th>Final Reduced UA
- <td><samp>Mozilla/5.0 (Linux; Android <ins>10; K</ins>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<ins>0.0.0</ins> Mobile Safari/537.36</samp>
-</table>
-
-<table>
- <tr>
- <th>
- <th>Tablet (user on Samsung Galaxy, for example)
- <tr>
- <th>Old UA
- <td><samp>Mozilla/5.0 (Linux; Android <del>9; SM-T810</del>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<del>0.1234.56</del> Safari/537.36</samp>
- <tr>
- <th>Final Reduced UA
- <td><samp>Mozilla/5.0 (Linux; Android <ins>10; K</ins>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.<ins>0.0.0</ins> Safari/537.36</samp>
-</table>
-
-## Reduced navigator.platform values (for all versions)
-
-<table>
- <tr>
- <th>Platform
- <th>Reduced value
- <tr>
- <td>macOS
- <td><samp>MacIntel</samp>
- <tr>
- <td>Windows
- <td><samp>Win32</samp>
- <tr>
- <td>Chrome OS
- <td><samp>Linux x86_64</samp>
- <tr>
- <td>Linux
- <td><samp>Linux x86_64</samp>
- <tr>
- <td>Android
- <td><samp>Linux armv81</samp>
-</table>
-
-## Reduced navigator.appVersion values
-
-<code>navigator.appVersion</code> is effectively an alias of <code>navigator.userAgent</code> (it’s
-[everything after
-“Mozilla/”](https://source.chromium.org/chromium/chromium/src/+/HEAD:third_party/blink/renderer/core/frame/navigator_id.cc;l=56?q=appVersion&ss=chromium)).
-
-## Reduced navigator.userAgent values
-
-To avoid confusion and reduce implementation complexity, we aim to follow the
-same plan for <code>navigator.userAgent</code>.
-
-## Alternative: high entropy client hints
-
-All of the information that was contained in the User-Agent string prior to
-reduction is available through the high entropy client hints, which are available
-by request through the [User-Agent Client Hints](https://github.com/WICG/ua-client-hints)
-request headers, as well as the [navigator.userAgentData.getHighEntropyValues](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData/getHighEntropyValues)
-Javascript API.
-
-## Resources
-
-The following sites show snippets and allow developers to preview what the
-reduced User-Agent string will look like on different platforms:
-- [User-Agent Reduction Snippets](https://developer.chrome.com/docs/privacy-sandbox/user-agent/snippets/)
-- [User-Agent Reduction Interactive Demo](https://reduced-ua.glitch.me/)
diff --git a/chromium/docs/website/site/user-experience/Chrome.png.sha1 b/chromium/docs/website/site/user-experience/Chrome.png.sha1
deleted file mode 100644
index 14a2805bad0..00000000000
--- a/chromium/docs/website/site/user-experience/Chrome.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1032c747319160d39684973e07c32f0985bf4a04 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/ChromeOS.png.sha1 b/chromium/docs/website/site/user-experience/ChromeOS.png.sha1
deleted file mode 100644
index 1dd2483cffb..00000000000
--- a/chromium/docs/website/site/user-experience/ChromeOS.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b22a3154b9f560fca948dcb438441434789ea32c \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/assistive-technology-support/index.md b/chromium/docs/website/site/user-experience/assistive-technology-support/index.md
deleted file mode 100644
index 23634cac793..00000000000
--- a/chromium/docs/website/site/user-experience/assistive-technology-support/index.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: assistive-technology-support
-title: 'Accessibility: Assistive technology support'
----
-
-To discuss the use of Chrome with assistive technology, please join the
-[chromium-accessibility](http://groups.google.com/a/chromium.org/group/chromium-accessibility)
-group.
-
-A *screen reader* is one type of assistive technology used by visually impaired
-users, or users with other disabilities, who need the screen described to them,
-often using synthesized text-to-speech or via a refreshable braille display.
-
-A *magnifier* is another type of assistive technology, for users with
-low-vision. It may magnify the entire screen or only a portion of the screen. It
-might additionally provide extra visual cues to help the user find the cursor
-and the current focused control.
-
-Chrome is compatible with many screen readers and magnifiers.
-
-In addition, Accessibility APIs can be used for automation or testing.
-
-#### **Supported Assistive Technology**
-
-We test Chrome with recent versions of the following assistive technology:
-
-* ####
- [JAWS](http://www.freedomscientific.com/products/fs/jaws-product-page.asp)
- (Windows)
-* #### [NVDA](http://www.nvda-project.org/) (Windows)
-* #### [Dolphin
- Supernova](https://yourdolphin.com/supernova-magnifier-screen-reader)
- (Windows)
-* #### [ZoomText](http://www.aisquared.com/zoomtext) (Windows)
-* #### [VoiceOver](http://www.apple.com/accessibility/voiceover/) (Mac
- OS X)
-
-#### This assistive technology may work:
-
-* [Orca](https://live.gnome.org/Orca) (Linux)
-
-#### **Getting the latest version of Chrome**
-
-#### If you are reporting bugs, please test the "Canary" version of Chrome, which can be installed alongside the standard version you already have installed. It helps a lot to know if the bug reproduces in the latest version or not.
-
-> [Chrome Canary download
-> instructions](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDcQFjAA&url=https%3A%2F%2Fwww.google.com%2Fintl%2Fen%2Fchrome%2Fbrowser%2Fcanary.html&ei=3x52UcGWPMGpiAKZhoBg&usg=AFQjCNEmCd7QnngnWgQiA5M_Vyvwzq71Vw&sig2=lTuBDKvb6i4xs7Ph8fZjGQ&bvm=bv.45580626,d.cGE)
-
-> Please report bugs at [CRBug.com](http://CRBug.com) (redirects to
-> <https://bugs.chromium.org/p/chromium/>)
-
-If you will be trying Chrome with a Windows screen reader, you may want to read
-the page on [Keyboard Access](/user-experience/keyboard-access) first.
-
-#### Other pages on accessibility
-
-* [Accessibility: Keyboard Access](/user-experience/keyboard-access)
-* [Accessibility: Touch Access](/user-experience/touch-access)
-* [Accessibility: Low-Vision
- Support](/user-experience/low-vision-support)
-* [Accessibility Design
- Document](/developers/design-documents/accessibility) (for
- developers) \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarklets/default.png.sha1 b/chromium/docs/website/site/user-experience/bookmarklets/default.png.sha1
deleted file mode 100644
index 7f79a89253d..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarklets/default.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3d50b2fcd92925163ceb744f41c4f027e8c52726 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarklets/index.md b/chromium/docs/website/site/user-experience/bookmarklets/index.md
deleted file mode 100644
index 0e465aeaed6..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarklets/index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: bookmarklets
-title: Bookmarklets
----
-
-Many sites implement sharing/saving features through
-[bookmarklets](http://www.bookmarklets.com/about/). Examples include Delicious,
-Facebook, Digg, and Google Reader. However, bookmarklets are hard to install,
-since they require dragging a link to the bookmarks bar. The following proposal
-builds on bookmarklets to enable simple sharing of pages in Chrome.
-
-## **Basic state**
-
-We move the star to the right-side of the Omnibox, and add a drop-down menu:
-
-[<img alt="image"
-src="/user-experience/bookmarklets/default.png">](/user-experience/bookmarklets/default.png)
-
-... that contains a list of bookmarklets:
-
-[<img alt="image"
-src="/user-experience/bookmarklets/menu.png">](/user-experience/bookmarklets/menu.png)
-
-In this case, the "Email this page" action is basically a mailto: link with the
-subject and content prefilled.
-
-### Installing bookmarklets
-
-Just like in other browsers, users can install a bookmarklet by dragging it onto a drop-target (in this case, the drop-down arrows). This dragging action will be interpreted as an implicit permission to install the bookmarklet, and thus won't require a permissions dialog.
-However, to make it easier to install bookmarklets, developers can also add
-rel="bookmarklet" to their bookmarklet &lt;a&gt; tags. This won't affect their
-behavior in other browsers. However, when the user clicks on such a link in
-Chrome, they will be presented with the following permissions dialog (exact copy
-TBD):
-
-[<img alt="image"
-src="/user-experience/bookmarklets/install_dialog.png">](/user-experience/bookmarklets/install_dialog.png)
-
-### **Managing bookmarklets**
-
-Bookmarklets can be managed by right-clicking on them in the drop-down menu:
-
-[<img alt="image"
-src="/user-experience/bookmarklets/menu_context.png">](/user-experience/bookmarklets/menu_context.png)
-
-We may also provide an option to promote bookmarklets to the top level, in which
-case they will appear next to the star. Only bookmarklets with a favicon can be
-promoted in this way. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarklets/install_dialog.png.sha1 b/chromium/docs/website/site/user-experience/bookmarklets/install_dialog.png.sha1
deleted file mode 100644
index 713a3378e8b..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarklets/install_dialog.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fb0bbc104f14861bba71e51af0b0927038983194 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarklets/menu.png.sha1 b/chromium/docs/website/site/user-experience/bookmarklets/menu.png.sha1
deleted file mode 100644
index 2aa7eea94db..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarklets/menu.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4e328a3ec8d6054f49bd8359cb4864ed4961bb73 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarklets/menu_context.png.sha1 b/chromium/docs/website/site/user-experience/bookmarklets/menu_context.png.sha1
deleted file mode 100644
index f683396a060..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarklets/menu_context.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7a5a5713ba2aff3165f8283d3d3f330f39b9d1ce \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarks/bookmark_add.png.sha1 b/chromium/docs/website/site/user-experience/bookmarks/bookmark_add.png.sha1
deleted file mode 100644
index e25033ed846..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarks/bookmark_add.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0cd3ba3a6c608c20ab95d32d4d42432c4ee18c36 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarks/bookmarks_bar.png.sha1 b/chromium/docs/website/site/user-experience/bookmarks/bookmarks_bar.png.sha1
deleted file mode 100644
index 82164821553..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarks/bookmarks_bar.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-858ab53a30c5f95dc22481a750b65d4ee0be2898 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/bookmarks/index.md b/chromium/docs/website/site/user-experience/bookmarks/index.md
deleted file mode 100644
index 8d54ac6105f..00000000000
--- a/chromium/docs/website/site/user-experience/bookmarks/index.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: bookmarks
-title: Bookmarks
----
-
-[TOC]
-
-## Adding
-
-[<img alt="image"
-src="/user-experience/bookmarks/bookmark_add.png">](/user-experience/bookmarks/bookmark_add.png)
-
-Bookmarks can be added using the star in the location bar. The dialog that
-appears can be dismissed by focusing elsewhere, otherwise user actions take
-place immediately.
-
-The star may also be dragged onto the bookmarks bar in order to add a bookmark
-to a specific location.
-
-Bookmarks Bar
-
-[<img alt="image"
-src="/user-experience/bookmarks/bookmarks_bar.png">](/user-experience/bookmarks/bookmarks_bar.png)
-
-The bookmarks bar is the home of all of the bookmarks the user creates. We
-wished to avoid creating multiple separate locations for bookmarks as each
-additional section is yet another location to lose things in. While this reduces
-the categorization and access options, it covers the most frequent uses of
-bookmarks.
-
-The 'Other Bookmarks' folder is a special, right-aligned always-visible folder
-that is a dumping ground for bookmarks that the user doesn't want to show in
-their prime bookmarks area (the left side).
-The bookmarks bar is not visible by default, but is shown as part of the new tab
-page so that people who dislike the use of real estate can still easily access
-their bookmarks at the start of a navigational task. It can be permanently shown
-by user option, and toggled with Ctrl+B.
-
-## Basic UX Issues
-
-* The toolbar has some interaction quirks:
- * Cannot roll horizontally across menus (this also applies to
- Page/Chromium menus)
- * Cannot open a menu by dragging downwards (we can't let this
- detract from drag to rearrange)
-* History view needs a 'show only starred pages' checkbox. This should
- be a simple fix as the backend supports this.
-* We need better filing controls in the add bookmark case.
-
-## Common Feature Requests
-
-Bookmarks management
-Tagging
-We can implement tagging as a layer on top of folders. More research needs to be
-done here.
-Multiple-location bookmarks
-A consequence of having a 'star' toggle for a given URL is that the bookmark
-location becomes a property of the URL, making it hard to locate a bookmark in
-multiple places - if a bookmark existed in two folders, which folder would you
-see if you went to that page and clicked on the star to edit the bookmark?
-Other browsers have a similar model, with the following approach:
-
-* You can only create duplicate entries by dragging the favicon, or
- CTRL-dragging an existing bookmark.
-* The bookmark bubble only shows the folder of the last-created
- bookmark with the same URL.
-* Editing the name of a bookmark edits the visible entry of that
- bookmark and the name attribute of the bookmark properties, but not
- the visible names of the bookmark in other locations.
-* Creating a new duplicate (by dragging the favicon) will overwrite
- the name attribute, but not the tags and not the toolbar names of
- any bookmark.
-* Clicking **Remove bookmark** in the bookmark bubble removes **all**
- instances of the bookmark from the bookmarking system.
-
-Multiple access points for 'add bookmark' functionality
-We could add **Bookmark this page** to the context and page menus, though it's a
-touchy issue given the extra space required. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/downloads-1/index.md b/chromium/docs/website/site/user-experience/downloads-1/index.md
deleted file mode 100644
index 964e16a236e..00000000000
--- a/chromium/docs/website/site/user-experience/downloads-1/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: downloads-1
-title: Downloads
----
-
-TODO describe shelf, chrome://downloads \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/downloads/Moodstats_1.22.zip.sha1 b/chromium/docs/website/site/user-experience/downloads/Moodstats_1.22.zip.sha1
deleted file mode 100644
index 783918239e8..00000000000
--- a/chromium/docs/website/site/user-experience/downloads/Moodstats_1.22.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b02bdd020a47c0ccd96f1b82a2310de5db684591 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/downloads/download_shelf.png.sha1 b/chromium/docs/website/site/user-experience/downloads/download_shelf.png.sha1
deleted file mode 100644
index 089283f0d8c..00000000000
--- a/chromium/docs/website/site/user-experience/downloads/download_shelf.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-71fdfe536b099d54ebab60b2c6eb57db6b09d8dd \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/downloads/index.md b/chromium/docs/website/site/user-experience/downloads/index.md
deleted file mode 100644
index 8de892414a4..00000000000
--- a/chromium/docs/website/site/user-experience/downloads/index.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: downloads
-title: Downloads
----
-
-[TOC]
-
-## Shelf
-
-[<img alt="image"
-src="/user-experience/downloads/download_shelf.png">](/user-experience/downloads/download_shelf.png)
-
-The download shelf is a tab-parented toolbar that shows the downloads that have
-occurred in its parent tab. The shelf allows us to show download UI without the
-overhead of additional windows. Items in the shelf can be dragged to folders to
-make it easier to organize files post-download; in future they will be able to
-be dragged to upload fields.
-
-## Browse
-
-The user may see a full-sized view of their downloads by viewing the downloads
-page, accessible from the Chromium menu, by pressing **Ctrl+J**, or by clicking
-**Show all downloads** the right edge of a download shelf. This page shows a
-searchable, more detailed list of the user's downloads.
-
-## Future Work
-
-We are considering making the shelf a per-window or global option; both of these
-have problems in multi-window scenarios, however. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/feed-subscriptions/default.png.sha1 b/chromium/docs/website/site/user-experience/feed-subscriptions/default.png.sha1
deleted file mode 100644
index 7f79a89253d..00000000000
--- a/chromium/docs/website/site/user-experience/feed-subscriptions/default.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3d50b2fcd92925163ceb744f41c4f027e8c52726 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/feed-subscriptions/index.md b/chromium/docs/website/site/user-experience/feed-subscriptions/index.md
deleted file mode 100644
index fe66d0c0c17..00000000000
--- a/chromium/docs/website/site/user-experience/feed-subscriptions/index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: feed-subscriptions
-title: Subscribing to feeds
----
-
-This document describes how Chrome will enable users to subscribe to RSS/Atom
-feeds in the feed reader of their choice. It does not cover any feed reading
-capability in Chrome itself.
-
-## **Table of contents**
-
-* Discovery
-* Preview
-* Subscription
-* Adding feed readers
-* Podcasts
-* Tasks to implement
-
-## Discovery
-
-We will autodetect RSS and Atom feeds using the standard [autodiscovery
-tags](http://diveintomark.org/archives/2003/12/19/atom-autodiscovery):
-`<link rel="alternate" type="application/atom+xml"
-href="http://www.example.com/xml/atom.xml">`
-When a feed is available for a page, we will display an rss icon in the address
-bar:
-
-[<img alt="image"
-src="/user-experience/feed-subscriptions/default.png">](/user-experience/feed-subscriptions/default.png)
-
-Clicking on the feed icon will redirect the user to feed, nicely formatted for
-the browser. If the page specifies multiple feed formats, the icon will link to
-the first feed specified. The default formatting for feeds may allow the user to
-access other options (see **Preview** below).
-We should also consider whether we want to detect feed links in the content of
-the page (for pages without auto-discovery). However, given the popularity of
-auto-discovery mechanisms, this probably won't be necessary.
-
-## Preview
-
-When the user follows a link to a feed file, Chrome formats it for display in
-the browser:
-
-[<img alt="image"
-src="/user-experience/feed-subscriptions/rss_preview.png">](/user-experience/feed-subscriptions/rss_preview.png)
-
-**Caveat:** parsing feeds can be tricky, so in the interest of shipping this
-quickly, the initial implementation will likely not include a preview of the
-content.
-
-If the feed is malformed, we would display an error instead of the feed contents
-(rather than including a lot of unnecessary feed parsing code). Users could
-still see the title and suscribe to the feed.
-If the feed specifies custom formatting (such as Feedburner's BrowserFriendly),
-we could use that formatting instead. In that case, we would still display the
-feed icon in the address bar, which would redirect to the Chrome-formatted
-version of the feed.
-If the user access the feed preview page from the rss icon in the address bar,
-and the referring page had multiple autolinked feeds, these could also be chosen
-from the preview page.
-
-## Subscribing
-
-The preview page display includes a large button to subscribe to the feed in the
-feed reader of your choice. Initially, this setting is "choose your feed
-reader". After this, it defaults to the most recently used feed reader.
-By default, we will include a limited number of popular feed readers (list TBD).
-Ideally, we should also detect popular feed-readers installed locally. If
-settings have been imported from Firefox, we should use that list instead
-(including remembering the default setting). Finally, users can also add the
-feed reader of their choice (see **Adding feed readers** below).
-Users can set a preference to bypass the preview page. From then on feeds will
-be redirected to the subscription page for the feed reader of their choice.
-
-## Adding feed readers
-
-Users can add web-based and local feed readers from the feed preview page:
-\[mock that allows to add a web-based or local feed reader\]
-We will also need a way to change your feed reader from the settings dialog, in
-case you have chosen to bypass the feed preview page.
-A newly added feed reader becomes the default selected option the next time a
-feed is previewed.
-Web-based feed readers can also be added through Javascript using the
-[registerContentHandler](https://developer.mozilla.org/en/DOM/window.navigator.registerContentHandler):
-navigator.registerContentHandler("`application/atom+xml`",
-"http://www.theeasyreaderurl.com?feed=%s",
-"Easy Reader");
-
-When this function is called, the following dialog is displayed:
-
-\[mock of permissions to install a feed reader\]
-
-## Podcasts
-
-The feed reader choice for podcasts (i.e. media feeds that contain audio or
-video files) should be stored as a separate setting. The default options should
-also be different (e.g. iTunes, Window Media Player...).
-\[mock of how we handle podcasts in add/manage feeds\]
-Ideally, the formatting for Media RSS feeds should display embedded readers for
-the attached media files.
-
-## **Tasks to implement**
-
-**Minimum**
-
-* Feed autodetect
-* Feed icon in address bar
-* Basic feed preview page (title and subscribe button)
-* Adding/managing feed readers
-* registerContentHandler
-* Import of Firefox feed settings
-* Separate handler support for podcasts
-
-**Nice to have**
-
-* Preview of feed contents
-* Handling of custom formatting
-* Embedded players for podcasts
-* Detection of locally installed feed readers
-* Handling of multiple autolinked feeds \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/feed-subscriptions/rss_preview.png.sha1 b/chromium/docs/website/site/user-experience/feed-subscriptions/rss_preview.png.sha1
deleted file mode 100644
index 9176559be9e..00000000000
--- a/chromium/docs/website/site/user-experience/feed-subscriptions/rss_preview.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3067e35a2f399239da686ed4e28a10ff327e5ea9 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/find-in-page/find_bar.png.sha1 b/chromium/docs/website/site/user-experience/find-in-page/find_bar.png.sha1
deleted file mode 100644
index 2e6893831e1..00000000000
--- a/chromium/docs/website/site/user-experience/find-in-page/find_bar.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-26a13866ddb8a9aa538af526272584b458ee0f4b \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/find-in-page/index.md b/chromium/docs/website/site/user-experience/find-in-page/index.md
deleted file mode 100644
index b24c153d3c9..00000000000
--- a/chromium/docs/website/site/user-experience/find-in-page/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: find-in-page
-title: Find in Page
----
-
-[<img alt="image"
-src="/user-experience/find-in-page/find_bar.png">](/user-experience/find-in-page/find_bar.png)
-
-Chromium's 'Find in Page' bar appears in the top-right of the content area, and
-allows users to find text on the page. The find bar is presented as an overlay
-in order to prevent page relayout when the bar is shown or hidden. If the text
-the user is looking for is under the bar, it will scroll the page, or slide out
-of the way.
-
-There is currently no facility for users to use the find results to perform
-actions on elements within the page. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/history/history_browse.png.sha1 b/chromium/docs/website/site/user-experience/history/history_browse.png.sha1
deleted file mode 100644
index 1ff44c82585..00000000000
--- a/chromium/docs/website/site/user-experience/history/history_browse.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-64cdd66268ea64682af273fbc7ce2c1e8e2b6d53 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/history/history_results.png.sha1 b/chromium/docs/website/site/user-experience/history/history_results.png.sha1
deleted file mode 100644
index 4ea694c05d0..00000000000
--- a/chromium/docs/website/site/user-experience/history/history_results.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-91e1031f033c02cf9e17876bd8b6c632838f7feb \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/history/index.md b/chromium/docs/website/site/user-experience/history/index.md
deleted file mode 100644
index ba51ce1a330..00000000000
--- a/chromium/docs/website/site/user-experience/history/index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: history
-title: History
----
-
-[TOC]
-
-## Overview
-
-Chromium's history system keeps a full text index for each page the user visits,
-making it easy to find pages based on their content, not just title and URL. The
-user's history is exposed through the History page, accessible via the Tools
-menu, or by pressing **Ctrl+H**. A user may also directly search their history
-by typing a search query in the address bar, and selecting the **See all pages
-in history containing \[query\]** item that appears if any results match the
-entered query.
-
-The History page surfaces the user's browsing history in two ways:
-
-## Browse
-
-[<img alt="image"
-src="/user-experience/history/history_browse.png">](/user-experience/history/history_browse.png)
-
-When the user first enters the history page, they are in browse mode - a
-condensed 'time, favicon, and title' view of their browsing history. Breaks are
-inserted whenever there is a break in the user's browsing activity, and at day
-intervals. Bookmarked pages are denoted by the presence of a star at the end of
-the title.
-
-## Search
-
-[<img alt="image"
-src="/user-experience/history/history_results.png">](/user-experience/history/history_results.png)
-
-If the user begins a search, the history view shows a list of search results,
-presented by date, title, text snippet, and a thumbnail. Bookmarked pages are
-listed first. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/incognito/incognito2.png.sha1 b/chromium/docs/website/site/user-experience/incognito/incognito2.png.sha1
deleted file mode 100644
index 70f43d2f362..00000000000
--- a/chromium/docs/website/site/user-experience/incognito/incognito2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-79ea5265a420225cf5d162d864d59a2d1ea43945 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/incognito/index.md b/chromium/docs/website/site/user-experience/incognito/index.md
deleted file mode 100644
index 896354d30d0..00000000000
--- a/chromium/docs/website/site/user-experience/incognito/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: incognito
-title: Incognito
----
-
-[<img alt="image"
-src="/user-experience/incognito/incognito2.png">](/user-experience/incognito/incognito2.png)
-
-Incognito mode is a window-level mode - all pages viewed within this window are
-not persisted to the user's history, and incognito pages use a temporary cookie
-store that is blank at the start of the incognito session.
-Chromium's backend could be made capable of running incognito on a per-tab
-basis, but we keep the mode at the window level to avoid the confusion of having
-a tabstrip of mixed-mode tabs.
-To avoid having to back-delete a page's history, we do not allow dragging
-between incognito and regular-mode windows. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/index.md b/chromium/docs/website/site/user-experience/index.md
deleted file mode 100644
index a1e59b6fc09..00000000000
--- a/chromium/docs/website/site/user-experience/index.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-breadcrumbs: []
-page_name: user-experience
-title: User Experience
----
-
-This section describes the motivations, assumptions, and directions behind
-Chromium and Chromium OS's user interface design.<br>
-Its goal is to explain the current design in a way that further work can be
-developed in-style, or so that our assumptions can be challenged, changed, and
-improved.
-
-<div class="two-column-container">
-<div class="column">
-
-![Chrome](/user-experience/Chrome.png)
-
-## Chrome Features
-
-### Window
-[Window Frame](/user-experience/window-frame) |
-[Tabs](/user-experience/tabs) |
-[Throbber](/user-experience/tabs/throbber) |
-[Toolbar](/user-experience/toolbar) |
-[Omnibox](/user-experience/omnibox)
-
-### Browsing
-[Bookmarks](/user-experience/bookmarks) |
-[History](/user-experience/history) |
-[New Tab Page](/user-experience/new-tab-page)
-
-### Additional UI
-[Downloads](/user-experience/downloads) |
-[Status Bubble](/user-experience/status-bubble) |
-[Find in Page](/user-experience/find-in-page) |
-[Options](/user-experience/options) |
-[Incognito](/user-experience/incognito)
-
-[Notifications](/user-experience/notifications) |
-[Infobars](/user-experience/infobars) |
-[Multiple Chrome Users](/user-experience/multi-profiles)
-
-### Appearance
-[Visual Design](/user-experience/visual-design) |
-[Resolution Independence](/user-experience/resolution-independence) |
-[Themes](https://developer.chrome.com/docs/extensions/mv3/themes/)
-
-### Accessibility
-[Keyboard Access](/user-experience/keyboard-access) |
-[Touch Access](/user-experience/touch-access) |
-[Low-Vision Support](/user-experience/low-vision-support) |
-[Screen reader support](/user-experience/assistive-technology-support)
-
-### UI text
-[Write strings](/user-experience/ui-strings) |
-[Write message descriptions](/developers/design-documents/ui-localization#TOC-Use-message-meanings-to-disambiguate-strings)
-
-## UX themes
-
-### Content not chrome
-
-* In the long term, we think of Chromium as a tabbed window
- manager or shell for the web rather than a browser application. We
- avoid putting things into our UI in the same way you would hope that
- Apple and Microsoft would avoid putting things into the standard
- window frames of applications on their operating systems.
-* The tab is our equivalent of a desktop application's title bar;
- the frame containing the tabs is a convenient mechanism for managing
- groups of those applications. In future, there may be other tab
- types that do not host the normal browser toolbar.
-* Chrome OS: A system UI that uses as little screen space as
- possible by combining apps and standard web pages into a minimal tab
- strip: While existing operating systems have web tabs and native
- applications in two separate strips, Chromium OS combines these,
- giving you access to everything from one strip. The tab is the
- equivalent of a desktop application's title bar; the frame
- containing the tabs is a simple mechanism for managing sets of those
- applications and pages. We are exploring
- [three main variants](/chromium-os/user-experience/window-ui) for
- the window UI. All of them reflect this unified strip.
-* Chrome OS: Reduced window management: No pixel-level window
- positioning, instead operating in a full-screen mode and exploring
- new ways to handle secondary tasks:
- * Panels, floating windows that can dock to the bottom of the
- screen as a means of handling tasks like chat, music players, or
- other accessories.
- * Split screen, for viewing two pieces of content side-by-side.
-
-#### Light, fast, responsive, tactile
-
-* Chromium should feel lightweight (cognitively and physically) and fast.
-
-#### Web applications with the functionality of desktop applications
-
-* Enhanced functionality through HTML 5: offline modes, background
- processing, notifications, and more.
-* Better access points and discovery: On Chromium-based browsers,
- we've addressed the access point issue by allowing applications to
- install shortcuts on your desktop. Similarly, we are using
- [pinned tabs](/chromium-os/user-experience/tab-ui) and
- search as a way to quickly access apps in Chromium OS.
-* While the tab bar is sufficient to access existing tabs, we are
- creating a new primary [access point](/chromium-os/user-experience/access-points)
- that provides a list of frequently used applications and tools.
-
-#### Search as a primary form of navigation
-
-* Chromium's address bar and the Quick Search Box have simplified
- the way you access personal content and the web. In Chromium OS, we
- are unifying the behavior of the two, and exploring how each can be
- used to make navigation faster and more intuitive.
-
-</div>
-<div class="column">
-
-![image](/user-experience/ChromeOS.png)
-
-## Chrome OS Features
-
-Note: UI under development. Designs are subject to change.
-
-### Primary UI
-[Window UI Variations](/chromium-os/user-experience/window-ui) |
-[Window Management](/chromium-os/user-experience/window-management) |
-[Pinned Tabs](/chromium-os/user-experience/tab-ui) |
-[Apps Menu](/chromium-os/user-experience/access-points) |
-[Panels](/chromium-os/user-experience/panels)
-
-[UI Elements](/user-experience/toolbar/#ui-elements) |
-[Gestures](/user-experience/multitouch) |
-[System Status](/chromium-os/user-experience/system-status-icons)
-
-### Core Applications
-[Settings](/chromium-os/user-experience/settings) |
-[Content Browser](/chromium-os/user-experience/content-browser) |
-[Open/Save Dialogs](/chromium-os/user-experience/opensave-dialogs) |
-[Shelf](/chromium-os/user-experience/shelf)
-
-### Devices
-[Form Factors](/chromium-os/user-experience/form-factors) |
-[Resolution Independence](/user-experience/resolution-independence)
-
-## Video and Screenshots
-
-The implementation, the concept video, and the screenshots are presenting
-different UI explorations. Expect to see some variation.
-
-![image](/chromium-os/user-experience/Concept2.jpg)
-
-<p>
-<img alt="image" src="/chromium-os/user-experience/sdres_0000_Basic.png" height=112 width=200>
-<img alt="image" src="/chromium-os/user-experience/sdres_0001_App-Menu.png" height=112 width=200>
-<img alt="image" src="/chromium-os/user-experience/sdres_0002_Panels.png" height=112 width=200>
-</p>
-
-</div>
-</div>
diff --git a/chromium/docs/website/site/user-experience/infobars/blue-gradient.png.sha1 b/chromium/docs/website/site/user-experience/infobars/blue-gradient.png.sha1
deleted file mode 100644
index bd06b07cfeb..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/blue-gradient.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d06d421e88424bdf11652e81970be933db6ef192 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/controls.png.sha1 b/chromium/docs/website/site/user-experience/infobars/controls.png.sha1
deleted file mode 100644
index 9383094734c..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/controls.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1b3057a7093c2d82c89b3bb6a193c58092ec24ab \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/dialog.png.sha1 b/chromium/docs/website/site/user-experience/infobars/dialog.png.sha1
deleted file mode 100644
index 0b51a3e98dc..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/dialog.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-421a3d9ac65d6d3952016fb1f55f629aa52a6e9c \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/example-ext-crash.png.sha1 b/chromium/docs/website/site/user-experience/infobars/example-ext-crash.png.sha1
deleted file mode 100644
index eab4594a7d2..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/example-ext-crash.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8098adee891243698a7c3e9774b29f2c7f319003 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/example-theme.png.sha1 b/chromium/docs/website/site/user-experience/infobars/example-theme.png.sha1
deleted file mode 100644
index 02f61074d87..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/example-theme.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-15eccb49b390da5808473bf6ddec8589cd403eee \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/example-translate-confirm.png.sha1 b/chromium/docs/website/site/user-experience/infobars/example-translate-confirm.png.sha1
deleted file mode 100644
index 13da9a851b0..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/example-translate-confirm.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0140bd3d2bf84cdfc45888e9a48f1424287c861d \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/example-translate.png.sha1 b/chromium/docs/website/site/user-experience/infobars/example-translate.png.sha1
deleted file mode 100644
index 50d23486b18..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/example-translate.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c80db44ffa2ce54ea3ebca9b60a640e119b383c6 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/02_embedded_infobar.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/02_embedded_infobar.png.sha1
deleted file mode 100644
index b9654fc5bcc..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/02_embedded_infobar.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7965dc435ee90d3ef960c640b54f178375b3c938 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/03_contentsettings.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/03_contentsettings.png.sha1
deleted file mode 100644
index fb01666496d..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/03_contentsettings.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4c55e79b8632a8b2ff08399d08ce485b746fc95a \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/04_exceptions.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/04_exceptions.png.sha1
deleted file mode 100644
index 7cdbb1c1caf..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/04_exceptions.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3097883c91662db0766e263d2404446e61e7fe0d \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/05_exceptionsproperties.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/05_exceptionsproperties.png.sha1
deleted file mode 100644
index eef1e08ed0e..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/05_exceptionsproperties.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d0e2436437f83b5700cf22085b1bde2cc0c3634b \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/06_tracking.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/06_tracking.png.sha1
deleted file mode 100644
index 2b71c58a730..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/06_tracking.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3c8cca5c1eb2eee0b9ec9e4ba240b7342aa5904f \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/07_trackingbubble.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/07_trackingbubble.png.sha1
deleted file mode 100644
index afb3b525a00..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/07_trackingbubble.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6f8fb4cf3d5318b51f3c295f1c4b32a0200acb18 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/1.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/1.png.sha1
deleted file mode 100644
index 063a5cb9219..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-42ff3ee8f47a23f096b9ffd07ad21cfe037746f1 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/example-geolocation.png.sha1 b/chromium/docs/website/site/user-experience/infobars/geolocation/example-geolocation.png.sha1
deleted file mode 100644
index e92e82ae71d..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/example-geolocation.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-da6b1e7a9ec43a37c6d26f0a26978db156361241 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/geolocation/index.md b/chromium/docs/website/site/user-experience/infobars/geolocation/index.md
deleted file mode 100644
index be1e36f32ac..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/geolocation/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-- - /user-experience/infobars
- - Infobars
-page_name: geolocation
-title: Geolocation
----
-
-[<img alt="image"
-src="/user-experience/infobars/geolocation/1.png">](/user-experience/infobars/geolocation/1.png)
-
-[<img alt="image"
-src="/user-experience/infobars/geolocation/02_embedded_infobar.png">](/user-experience/infobars/geolocation/02_embedded_infobar.png)
-
-[<img alt="image"
-src="/user-experience/infobars/geolocation/03_contentsettings.png">](/user-experience/infobars/geolocation/03_contentsettings.png)
-
-[<img alt="image"
-src="/user-experience/infobars/geolocation/04_exceptions.png">](/user-experience/infobars/geolocation/04_exceptions.png)
-
-[<img alt="image"
-src="/user-experience/infobars/geolocation/05_exceptionsproperties.png">](/user-experience/infobars/geolocation/05_exceptionsproperties.png)
-
-[<img alt="image"
-src="/user-experience/infobars/geolocation/06_tracking.png">](/user-experience/infobars/geolocation/06_tracking.png)
-
-[<img alt="image"
-src="/user-experience/infobars/geolocation/07_trackingbubble.png">](/user-experience/infobars/geolocation/07_trackingbubble.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/grey-gradient.png.sha1 b/chromium/docs/website/site/user-experience/infobars/grey-gradient.png.sha1
deleted file mode 100644
index 2a11646c2ff..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/grey-gradient.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cac8bd19a407539e7464b1fa88e99d2904e138ff \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/index.md b/chromium/docs/website/site/user-experience/infobars/index.md
deleted file mode 100644
index a7d92558035..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/index.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: infobars
-title: Infobars
----
-
-# **## **## **## **## Infobars are non-modal, informational messages that display as an extension of the chrome. They are displayed when something happens in the Tab that the user should be aware of, e.g. a plugin has crashed, or the user can save a password they just entered. An infobar will push the website down so as to not block any content.Variants********
-
-# **#### **#### **#### **## Usage********
-
-# **## **There are two main scenarios for dispalying an infobar:****
-# **## **1) Page-related actions - to message the user about an action they can take related to the page they are on****
-
-# **## ******## 2) Confirmations / warnings - to provide a notification or alert about a problem or a completed action********
-# **## ******## Infobars should never be purely informational; they should always have an action the user can take. Additionally, actions should be optional. If they are blocking the user from doing something else, a dialog should be used instead.********
-
-# **#### **## Types****
-
-# **## **## 1) Page-related actions****
-
-# **## **## Permissions - getting the user to agree to or permit an action (e.g. sharing their location so it can be used with the site they are on)****
-
-# **## **## **## **## Page action - asking the user if they want to perform an action on a page that the user is currently on (e.g. translating a page)********
-
-# **## **## **## **## **## **## Feature setup - promoting a feature that's related to content on the current page; additionally giving them a way to set it up (e.g. setting up Autofill feature by saving current page's form info)************
-
-# **## **## **## **## 2) Confirmations/Warnings********
-
-# **## **## Confirmation - a success confirmation of action/installation (e.g. confirmation of an extension or theme installation with ability to undo)****
-
-# **## **## Problem - informing the user of a problem that occurred with a way for them to fix/troubleshoot (e.g. notification of extension crashing with option to restore; notification of missing plug-in with a way to install)****
-
-# **## **## #### **## **## When & Where to display********
-
-# **## In most cases, infobars should not be displayed in direct response to a user action (i.e. they should be system-initiated). If a user performs an action that directly responds with a message of the types listed above, a lightweight dialog should be used instead. The exception to this is the confirmation infobar which is usually in direct response to the user choosing to install something.**
-# **## Infobars with page-related actions should only show on the pages to which they are relevant. Confirmation/warning infobars should only show on the page that they first appeared. The infobar can persist on that tab/page as long as it makes sense to stay open or until the user closes it out.**
-
-# ****#### ****Visual********
-
-# ****Colors****
-
-# **From Chrome/3rd party (PC)**
-
-# **[<img alt="image"
-src="/user-experience/infobars/blue-gradient.png">](/user-experience/infobars/blue-gradient.png)**
-
-# **From Chrome/3rd party (Mac)**
-
-# **[<img alt="image"
-src="/user-experience/infobars/grey-gradient.png">](/user-experience/infobars/grey-gradient.png)**
-
-# ****Confirmation/warning****
-
-# ****[<img alt="image"
-src="/user-experience/infobars/yellow-gradient.png">](/user-experience/infobars/yellow-gradient.png)****
-
-# ****Controls****
-
-# ****### [<img alt="image"
-src="/user-experience/infobars/controls.png">](/user-experience/infobars/controls.png)****
-
-# **Note: The Options menu on an infobar only shows the encasing button on hover
-and press, similar to the page and wrench menus in Chrome.**
-
-# ****Spacing****
-
-# **infobar height = 36 px**
-
-# **left and right padding = 6 px**
-
-# **spacing after icon = 6 px**
-
-# **spacing between buttons = 10 px**
-
-# **spacing after message (and before buttons) = 16 px**
-
-# **spacing to left of x button (between x and learn more or Options) = 12 px**
-
-# **### **### **Examples******
-
-# **### ****### ****### **e.g. Page action infobar from************
-
-# **### ****### ****### ****### ****### **Translate********************
-
-# **### ****### ****### ****### ****### ****### **[<img alt="image"
-src="/user-experience/infobars/example-translate.png">](/user-experience/infobars/example-translate.png)************************
-
-# **### **e.g. Confirmation./page action infobar with more options****
-
-# **### **<img alt="image"
-src="/user-experience/infobars/example-translate-confirm.png">****
-
-# **### ****### ****### **e.g. Problem infobar************
-
-# **### ****### ****### ****### **[<img alt="image"
-src="/user-experience/infobars/example-ext-crash.png">](/user-experience/infobars/example-ext-crash.png)****************
-
-# ****#### ****Content********
-
-# ****Font****
-
-# **\[system font\]**
-
-# **(Tahoma 13px shown in mocks)**
-
-# ****Message wording****
-
-# **Infobar messages should be clear and succinct. If possible, the message
-should be able to fit on one line of the infobar and still retain enough space
-for controls, options/learn more and a close button. There may be cases where
-multiple infobars get stacked so messages should always be clear about where
-(which feature/app) the message is coming from.**
-
-# ****Button wording****
-
-# **The button that performs the main action should convey in wording what
-action will take place. The button that declines the action should simply say no
-if the preceding text contains a question. If the infobar message does not
-contain a question, then the button should convey what they are refusing.**
-
-# ****Examples by type:****
-
-# **Permissions/Page Actions - explanation of who/what is asking and what they
-are asking permission for**
-
-> # **e.g. Flickr wishes to use your location. \[Share my location\] \[Don't
-> share\]**
-
-> # **e.g. This page is in French. Would you like to translate it? \[Translate\]
-> \[No thanks\]**
-
-# **Feature setup - explanation of what feature is and/or value + question
-asking if user wants to perform action**
-
-# **e.g. Chrome's Autofill feature can help you fill out web forms faster. Would you like to save this form info? \[Set up Autofill...\] \[Nope\]**
-
-# **Confirmation - confirmation of completed action**
-
-> # **e.g. The "Mappy" extension was successfully installed. \[Undo\]**
-
-> # **e.g. This page has been translated from \[French\] to \[English\]. *Note:
-> The controls are dropdowns in this example.***
-
-# **Problem - explanation of problem**
-
-# **e.g. The "Dictionary" extension crashed. \[Restore\]**
-
-# **### ****Options / Learn more / Help******
-# **### **If an infobar is substantial enough to have an options menu, put the
-Help or Learn more link within that menu. Otherwise, any infobar that can
-provide additional explanation of the feature or message should give more
-information in a "learn more" or "About \[feature name\]" link.****
-
-# **#### ****Persistence and Crossfading******
-
-# ******Persistence******
-
-# ****In general, to avoid the up and down bouncing of new infobar instances,
-infobars related to the same action instance should persist.****
-
-# ****For example, translating a page involves multiple infobars. The first
-allow the user to translate the page, and the second informs the user that the
-page has been translated AND offers the ability to do another translation. When
-the user clicks on the affirmative button in the first infobar, the infobar will
-not bounce up and return with the second infobar. Instead, the infobar will
-persist, and the content on the infobar will change.****
-
-# **In a case where there is a persistent infobar and the color of the infobar
-must change, the first color will crossfade into the second color over 500 ms.**
-
-# **For example, if a user tries to translate a page using the blue translation
-bar and an error occurs, the blue infobar will crossfade into a yellow infobar
-outlining the issue and an ability to try translating again.**
-
-# ****#### ****Dialogs********
-
-# ******A dialog should be used instead of an infobar if...******
-
-# ******1) it will block the user from doing something unless he/she takes
-action******
-
-# **2) it is a direct response to a user action**
-
-# **e.g.**
-
-# **[<img alt="image"
-src="/user-experience/infobars/dialog.png">](/user-experience/infobars/dialog.png)**
-
-# ****#### ****## **Variants**********
-
-# ****## ****## [Geolocation](/user-experience/infobars/geolocation)******** \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/infobars/yellow-gradient.png.sha1 b/chromium/docs/website/site/user-experience/infobars/yellow-gradient.png.sha1
deleted file mode 100644
index 8a1cfb47397..00000000000
--- a/chromium/docs/website/site/user-experience/infobars/yellow-gradient.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eb01f74ccca3471c58cfca60d9e11e324dce4977 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/keyboard-access/index.md b/chromium/docs/website/site/user-experience/keyboard-access/index.md
deleted file mode 100644
index 37d3a830a5e..00000000000
--- a/chromium/docs/website/site/user-experience/keyboard-access/index.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: keyboard-access
-title: 'Accessibility: Keyboard Access'
----
-
-An important design goal is for Chrome to be fully accessible via the keyboard.
-Many users with disabilities may be unable to use a mouse or other pointing
-device, and there are many scenarios where power users prefer keyboard
-shortcuts.
-
-The majority of users use a combination of the keyboard and mouse, and we don't
-think that full keyboard access should make things more cumbersome for users who
-don't need or want every control to be focusable. So, for example, we don't
-think that most toolbar controls should be part of the Tab traversal.
-
-On the other hand, we don't believe that there should be a separate
-"accessibility mode" that enables more keyboard access. We don't believe that
-users should be segregated; rather, we should strive to find a balance where
-most users will only use the keyboard shortcuts they choose to learn, while
-users who rely completely on their keyboard will find the interface easy to
-navigate without memorizing a separate shortcut for every single command.
-
-### Keyboard Navigation and Shortcuts
-
-Here are the keyboard shortcuts that help make Chrome accessible to users who
-need full keyboard access.
-
-First, there are keys to focus each of the toolbars:
-
-* **Shift+Alt+T**: Main Toolbar (contains Back, Forward, Reload, etc)
-* **Shift+Alt+B**: Bookmarks Toolbar
-
-In addition, pressing **F6** or **Shift+F6** now switches to the next pane, with
-the available panes in Chrome being:
-
-* The web content area (which displays the web page itself)
-
- Main Toolbar
-
- Bookmarks Toolbar
-
-Also, pressing **Alt** or **F10** focuses the Chromium menu button in the
-toolbar, since these keys are normally used to focus the menu bar in a typical
-Windows application.
-
-#### Toolbar Navigation
-
-While in a toolbar, you can press **Tab**, **Shift+Tab**, **Home** (move to
-first enabled control) and **End** (move to last enabled control) to navigate to
-different controls in the toolbar. You can also use the **Left Arrow** and
-**Right Arrow** keys, except notably when the Location Bar / Omnibox has focus,
-because then those keys are used for text editing. (This is the same behavior as
-in other Windows applications, like Microsoft Excel.)
-
-Controls can be activated using either **Space** or **Enter** (menu buttons also
-support **Down Arrow** to open menu, **Esc** to close menu). Many controls also
-have a context menu (a right-click menu), which can be activated using the
-**Context Menu** key on your keyboard, or by pressing **Shift+F10**.
-
-There is one aspect of toolbar keyboard navigation that is potentially
-confusing: the Location Bar is normally part of the Tab order, but having focus
-in the Location Bar doesn't necessarily mean that the entire toolbar is the
-active pane. In a sense, the Location Bar is a special control that is part of
-the tab order of several panes. To clarify:
-
-These keystrokes focus the Location Bar (but do not set focus to the Toolbar
-pane):
-
-* Tabbing to the Location Bar from the web content.
-* **Ctrl+L**
-* **Alt+D**
-
-These keystrokes set focus to the Toolbar pane:
-
-* **F6** (focuses the Location Bar)
-* **Alt+Shift+T** (focuses the leftmost enabled control of the Main
- Toolbar)
-* **Alt** (focuses the page menu)
-* **F10** (focuses the page menu)
-
-The reason for this is to create minimal confusion for users who do not need
-keyboard access. Users who primarily use the mouse are very unlikely to use
-**F6**, so it's unlikely they will ever end up focusing various controls in the
-toolbar by accident. On the other hand, users who rely on full keyboard access
-are used to using **F6** to switch between window panes (e.g. in Windows
-Explorer), so this should be a very easy shortcut to remember.
-
-[Chrome extensions](https://chrome.google.com/extensions) can install [Page
-Actions and Browser
-Actions](http://www.google.com/support/chrome/bin/answer.py?answer=154007) in
-the main toolbar. These are all fully accessible using these keystrokes. Don't
-forget to try the **Context Menu** key for Page Actions and Browser Actions.
-
-The following keys can be used to access the menus:
-
-* **Alt** or **F10 or Alt+F** puts focus on the Chromium menu button -
- this corresponds to the key most commonly used to focus the first
- menu in the menu bar in Windows applications.
-
-In addition, the following keys can be used to switch tabs, in addition to the
-shortcuts in the menus:
-
-* **Ctrl+1** through **Ctrl+8** switches to the tab at the specified
- position number on the tab strip.
-* **Ctrl+9** switches to the last tab.
-* **Ctrl+Shift+Tab** or **Ctrl+PgUp** switches to the previous tab.
-* **Ctrl+Tab** or **Ctrl+PgDown** switches to the next tab.
-* **Ctrl+W** or **Ctrl+F4** closes the current tab.
-* **ALT-F4** quits the application.
-
-Want more information? See the [full list of keyboard
-shortcuts](https://support.google.com/chrome/answer/157179?hl=en).
-
-### Other pages on accessibility
-
-* [Accessiblity: Touch Access](/user-experience/touch-access)
-* [Accessibility: Low-Vision
- Support](/user-experience/low-vision-support)
-* [Accessibility: Screen reader
- support](/user-experience/assistive-technology-support)
-* [Accessibility Design
- Document](/developers/design-documents/accessibility) (for
- developers) \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/low-vision-support/index.md b/chromium/docs/website/site/user-experience/low-vision-support/index.md
deleted file mode 100644
index 88ac666780e..00000000000
--- a/chromium/docs/website/site/user-experience/low-vision-support/index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: low-vision-support
-title: 'Accessibility: Low-Vision Support'
----
-
-We believe that Chrome should provide a complete and satisfying experience to
-users who have low vision. Here are three of the most common needs, and how they
-can currently be addressed in Chrome.
-
-[TOC]
-
-### Full Page Zoom
-
-In order to increase or decrease the zoom level of the currently displayed web
-page, you can use either the keyboard shortcuts (see table below) or access
-‘Zoom-&gt;Larger/Normal/Smaller’ in the Chrome Page menu.
-
-[<img alt="image"
-src="/developers/design-documents/accessibility/xoom_menu.png">](/developers/design-documents/accessibility/xoom_menu.png)
-
-Page zoom level will be remembered for *each unique domain*, e.g. if you
-increase zoom for Google Search (http://www.google.com), zoom level will also be
-increased for Google Calendar (http://www.google.com/calendar). However, since
-Gmail (http://mail.google.com) is on a different domain, zoom level will remain
-unchanged in this example.
-
-<table>
-<tr>
-<td> <b>Shortcut </b></td>
-<td><b> Action</b> </td>
-</tr>
-<tr>
-<td> ​Ctrl++</td>
-<td> ​Increase zoom level.</td>
-</tr>
-<tr>
-<td> ​Ctrl+-</td>
-<td> ​Decrease zoom level.</td>
-</tr>
-<tr>
-<td> ​Ctrl+0</td>
-<td> ​Set zoom level to default level.</td>
-</tr>
-</table>
-
-### Adjusting Font Face and Size
-
-There are a number of ways to adjust your font settings. Chrome natively
-supports changing of Fonts and Languages, including setting font face and size
-for:
-
-* Serif Font
-* Sans-Serif Font
-* Fixed-width Font
-
-To access these settings, open the Google Chrome Options, select the Under the
-Hood tab and click the Fonts and Languages button. The dialog that opens allows
-you to adjust your font settings (note: there is an open bug
-([1040](http://crbug.com/1040)) to allow these settings to override fonts
-specified in web pages).
-
-[<img alt="image"
-src="/developers/design-documents/accessibility/chrome_font_and_languages.png">](/developers/design-documents/accessibility/chrome_font_and_languages.png)
-
-In addition, there are a variety of Chrome Extensions that can be used to modify
-various font properties:
-
-* [Change
- Colors](https://chrome.google.com/extensions/detail/jbmkekhehjedonbhoikhhkmlapalklgn)
- * Optional font family and font size configuration
- * Ability to add new custom fonts
-* [Minimum
- Font](https://chrome.google.com/extensions/detail/pofdgleodhojjnibdfnlapkadjepdnka)
- * Allows you to set the minimum font size on all web pages
-* [Zoomy](https://chrome.google.com/extensions/detail/jgfonhdeiaaflpgphemdgfkjimojblie)
- * Changes zoom level according to resolution & browser size.
-
-### High Contrast and Custom Color Support
-
-There are a number of steps you can take to configure Chrome to run with custom
-contrast and colors. Beginning in [Chrome
-73](https://developers.google.com/web/updates/2019/03/nic73), Chrome provides
-partial support for system-level color schemes. Dark mode for Chrome's UI is now
-supported on Mac, and Windows support is on the way.
-
-1. Install a [Chrome
- Extension](http://www.google.com/support/chrome/bin/answer.py?answer=154007)
- which allows you to specify your own custom color combinations, for
- instance the [Change
- Colors](https://chrome.google.com/extensions/detail/jbmkekhehjedonbhoikhhkmlapalklgn)
- extension.
- * Quick page action to apply/remove styling overrides on a per
- page, per domain or global basis (overriding Web page colors)
- * Optional background, text, links and visited links color
- configuration
- * Option for showing/hiding images
- * Option for showing/hiding Flash objects
-2. Use a [Chrome
- Theme](https://tools.google.com/chrome/intl/en/themes/index.html)
- for some control of the color scheme of the Chrome user interface.
- As an example, the [BitNova Dark
- theme](https://chrome.google.com/extensions/detail/okaafmdeogblpdihiidddcnclfhpngcm)
- offers white text on a black background. The [Chrome Extensions
- Gallery](https://chrome.google.com/extensions) offers many other
- themes, with a variety of color combinations.
-
-[<img alt="image"
-src="/developers/design-documents/accessibility/custom_colors.png">](/developers/design-documents/accessibility/custom_colors.png)
-
----
-
-#### Other pages on accessibility
-
-* [Accessibility: Keyboard Access](/user-experience/keyboard-access)
-* [Accessibility: Touch Access](/user-experience/touch-access)
-* [Accessibility: Screen reader
- support](/user-experience/assistive-technology-support)
-* [Accessibility Design
- Document](/developers/design-documents/accessibility) (for
- developers) \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/05_signed_in.png.sha1 b/chromium/docs/website/site/user-experience/multi-profiles/05_signed_in.png.sha1
deleted file mode 100644
index a695f1a945a..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/05_signed_in.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-222409d8fe3120339e83f16886eaae49bd853bd6 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/09_options_not_signed_in.png.sha1 b/chromium/docs/website/site/user-experience/multi-profiles/09_options_not_signed_in.png.sha1
deleted file mode 100644
index f9780d0229f..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/09_options_not_signed_in.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-918cdd63dc9b44300cce6d879fad3bb40042eca9 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2010-11-18 at 2.59.56 PM.png.sha1 b/chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2010-11-18 at 2.59.56 PM.png.sha1
deleted file mode 100644
index 1f01adc0918..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2010-11-18 at 2.59.56 PM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dad623044d2a62b320f753e41dcca99eaf292d1a \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2011-11-01 at 11.21.45 AM.png.sha1 b/chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2011-11-01 at 11.21.45 AM.png.sha1
deleted file mode 100644
index 8e5133d9aa8..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/Screen shot 2011-11-01 at 11.21.45 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-26fd29eb4553a4e98880779095dacde4d1973340 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/cupcake_2.png.sha1 b/chromium/docs/website/site/user-experience/multi-profiles/cupcake_2.png.sha1
deleted file mode 100644
index 307a177b780..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/cupcake_2.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1fe6a18abf2b71f79515e5c7431d478f4fc3f9f9 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/index.md b/chromium/docs/website/site/user-experience/multi-profiles/index.md
deleted file mode 100644
index 486203c4d73..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/index.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: multi-profiles
-title: Multiple Chrome Users
----
-
-**Overview**
-
-The multiple users feature allows the user to associate a set of preferences
-with a specific set of browser windows, rather than with an entire running
-instance of Chrome. Allowing different windows to run as different Chrome
-identities means that a user can have different open windows associated with
-different Google accounts, and correspondingly different sets of preferences,
-apps, bookmarks, and so on -- all those elements which are bound to a specific
-user's identity. Having multiple users in the Chrome browser also makes it easy
-to browse with separate identities without having to log in as separate users at
-the operating system level.
-
-****Sync and Multiple Users****
-
-**Right now, Chrome provides a way of associating a Google account with a Chrome
-profile through the sync mechanism -- if a user "syncs" their browser, the
-user's apps, autofill data, bookmarks, extensions, passwords, preferences, and
-themes will be associated with the logged-in Google account and stored
-off-client, where they become available to the user on any browser on which they
-connect to their synced account. Sync provides the basic mechanism for binding a
-Google account to the state of a Chrome browser, but provides no special
-consideration for different users: the model provides that a browser is either
-synced to an account or not synced, and syncing adds data, instead of modifying
-it. For example, if a user syncs to account A and then logs out and syncs to
-account B, the browser will contain bookmarks from both accounts.**
-
-**In the multiple users model, the idea of syncing will need to adapt to the
-understanding that several distinct users (or, at least, identities) can be
-associated with a single browser instance -- and that creating a personal
-account for the browser need not necessarily establish an off-client repository
-to save its state. There are two main issues here:**
-
-**1. The user will be able to create a local account without enabling sync. This
-model can be seen as something like starting multiple Chrome instances with
-separate user-data-dir directories.**
-
-**2. The user can have a local account with sync enabled; this state replaces the current binary "sync / not synced" model.**
-
-******The act of syncing binds the synced browser window to an identity; thus
-the "sync" state is naturally part of the multi-user model -- indeed, it's the
-fully enabled state, where a user has a local account bound to a synced account
-in the cloud. If a user is running a local account which is not connected with a
-Google account profile and chooses to sync, they will be connected to their sync
-account as their Chrome identity. If they choose to create a local account
-without enabling sync, they will always have the option to enable sync in the
-options menu.******
-
-**The First Account and Adding a New User**
-
-Users can take two actions to bind a browser window with a personalized account:
-
-1. They can add a new user. This creates a separate user account, with
- separate preferences and state.
-2. They can connect (or "sync") any user account to a synced Google
- account. This stores some of a user account's preferences and state
- in the cloud, where it can be synced to accounts on other machines.
-
-**The First User Account:** When users runs Chrome without connecting to their
-Google account, they are using a basic, un-synced browser -- the "normal" mode
-for the vast majority of users now. When the user comes from this state and
-connects to a Google account, the preferences, bookmarks, history, etc. in this
-basic account at the time of creation will populate the initial user data
-directory for the new account. That is, this basic, default account will now be
-connected to the chosen Google account. If the user chooses to create a new
-account, a fresh, empty account will be created. If the user chooses to sync
-this account to an existing Google account, then the user's preferences from the
-chosen account will populate the new account. In either case, the initial
-account will remain accessible to the user from the profile menu as the "first
-user."
-
-\[*Side note*: right now, browser sync works differently from this. If a user
-syncs to identity A, then stops syncing, and then syncs again with identity B,
-the browser will end up with all the bookmarks from both A and B. This reflects
-the basic binary sync model of "sync/don't sync." If instead we have a model of
-multiple identities, following the sync model would mean that each new profile
-created would take bookmarks and settings from whichever identity is currently
-logged in -- leading to bloat, lack of control, and unwanted mixing of
-"personalities."\]
-
-**Sign-in**
-
-The user will be able to add a new Chrome user from from the preferences/options
-dialog:
-
-[<img alt="image"
-src="/user-experience/multi-profiles/signin_1.png">](/user-experience/multi-profiles/signin_1.png)
-
-**Launching New Windows**
-
-New windows will take their identity from the identity of the last active
-window. Active identities persist across sessions; if a user quits Chrome and
-then starts it again, the identity of the windows opened will be taken from the
-last window open when the browser last ran Chrome. Tabs will not be allowed to
-move across account boundaries; that is, one won't be able to drag a window from
-the browser belonging to account Alice to a window belonging to account Bob.
-
-**Incognito Mode**
-
-Every user account will have its own incognito mode. If an incognito window is
-launched, it takes its settings and preferences from the browser window which is
-currently active. We may need a special incognito mode UI to indicate which user
-the window is associated with; on the other hand, despite the fact that each
-incognito mode draws settings from a specific account, displaying the name of an
-account in an incognito browser window may give the wrong impression to users
-that their activities in this secret space are being associated with their
-identities.
-
-**Security**
-
-Because the data for all users which have been used for an instance of Chrome
-are associated with a single operating system identity, there is no expectation
-of special privacy. That is, there is no additional encryption of preferences
-and settings on the local machine other than that which already exists for user
-data directories in Chrome. Obviously, a password is needed to log in to a
-specific Chrome identity on the browser. However, no additional protection for
-the user data directories is planned. On Mac OS X, in fact, because passwords
-are stored in the commonly accessible keychain, it will be possible for a user
-in one account to access the passwords that have been stored on that machine by
-a user with another account.
-
-**Background Apps and Extensions**
-
-In order to properly handle background apps, which can run even after all
-browser windows have closed, Chrome will have to load all extensions for all
-accounts associated with a given Chrome instance when Chrome is launched, and
-launch background apps even if the particular user associated with them is not
-currently loaded. Because background apps will be controllable from the
-operating system, control of these applications can be safely and reasonably
-given to the user at this level, outside of the browser. That is, if a
-background app is loaded for Alice and only Bob is logged in, Bob will be able
-to turn off the settings for this application from the OS, without having to log
-in as Alice in the Chrome browser.
-
-**Browser Window Identity UI**
-
-Each browser window needs some visual tag to indicate that it is associated with
-a particular identity. This is accomplished with a personalizable avatar badge,
-in the spot usually occupied by the incognito spy. Once multiple users are set
-up for an instance of Chrome, the "Users" field in the personal settings menu is
-populated with a list of existing user accounts. Any user can add or delete
-accounts using this interface, and the avatar image and account name can be
-personalized through the settings page belonging to the account being edited.
-
-[<img alt="image"
-src="/user-experience/multi-profiles/cupcake_2.png">](/user-experience/multi-profiles/cupcake_2.png)
-
-**User Launch Menu**
-
-The identity tag on the browser frame provides the option to launch a new window
-connected to an existing user account (any account which has been used in this
-browser will be listed in a dropdown), as well as the option to create a new
-user account. In addition, there will be the option of editing the account
-belonging to this browser (this account will be tagged with a check mark in the
-dropdown menu). If a user is signed in to a syncing Google account, that
-account's name will be displayed in the dropdown menu.
-
-[<img alt="image"
-src="/user-experience/multi-profiles/profile_menu3.png">](/user-experience/multi-profiles/profile_menu3.png)
-
-**Disconnecting**
-Disconnecting from an attached account will not result in any changes to the
-user's immediate browsing experience; the only change will be that alterations
-in the profile will not be synchronized with the profile state stored
-off-client.
-
-For questions or comments, contact mirandac at google dot com. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/profile_menu3.png.sha1 b/chromium/docs/website/site/user-experience/multi-profiles/profile_menu3.png.sha1
deleted file mode 100644
index f8fe6dfbc56..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/profile_menu3.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7ee0b5127ce0a5e3537433ef164387c92d97932c \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multi-profiles/signin_1.png.sha1 b/chromium/docs/website/site/user-experience/multi-profiles/signin_1.png.sha1
deleted file mode 100644
index aba0f7f44ee..00000000000
--- a/chromium/docs/website/site/user-experience/multi-profiles/signin_1.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d005de5b7c81a47a9bfa3d0a18977eb4542e32a1 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multitouch/GesturesImages.png.sha1 b/chromium/docs/website/site/user-experience/multitouch/GesturesImages.png.sha1
deleted file mode 100644
index bb34563508b..00000000000
--- a/chromium/docs/website/site/user-experience/multitouch/GesturesImages.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-49ab466404776afe5e81c09ef65113be62892b21 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multitouch/gestures_concept.mp4.sha1 b/chromium/docs/website/site/user-experience/multitouch/gestures_concept.mp4.sha1
deleted file mode 100644
index 20e5561f5b3..00000000000
--- a/chromium/docs/website/site/user-experience/multitouch/gestures_concept.mp4.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5a50c39a76d354a719198c5ca53578349ffb27b2 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/multitouch/index.md b/chromium/docs/website/site/user-experience/multitouch/index.md
deleted file mode 100644
index 18e9a14e35f..00000000000
--- a/chromium/docs/website/site/user-experience/multitouch/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: multitouch
-title: Multitouch
----
-
-**UI under development. Designs are subject to change.**
-
-[TOC]
-
-## Trackpad Multitouch (Indirect manipulation)
-
-### Gesture Types
-
-> [<img alt="image"
-> src="/user-experience/multitouch/GesturesImages.png">](/user-experience/multitouch/GesturesImages.png)
-
-* 1 finger: traditional pointing
-* 2 finger: traditional scrolling
-* 3 finger horiz.: three fingers in a row (usually ring/middle/index)
-* 4 finger horiz.: four fingers in a row (usually
- pinky/ring/middle/index) - may be hard to disambiguate horizontal
- swipes on small trackpads, so we will overlap many gestures with the
- three finger variants
-* 1 finger edge: one finger moving in and out of the trackpad bounds
- * May require hardware support.
- * Vertical gestures may be problematic because of limited space.
-* 3 finger group: three fingers in a circle (usually
- thumb/middle/index \[or ring\])
- * Due to people resting their thumb on the trackpad, many of these
- gestures are problematic, particularly pinch and rotate
- gestures. Swipe gestures are generally pretty usable.
-* 4 finger group: four fingers in a circle (usually thumb +
- ring/middle/index)
- * Problematic as above. Swipe gestures are acceptable.
-
-### Proposed behaviors
-
-> #### Main view
-
- * **one finger** — cursor
- * **two** fingers — content manipulation
- * Sites can override all two finger gestures passed to the
- content area
- * Pinch - defaults to page zoom
- * Rotate - defaults to nothing
- * Translate - defaults to scroll
- * **three** fingers horizontal
- * tab switch
- * **three** fingers up — into overview
- * **three** fingers down — focus panels
- * **four** fingers up — into overview
- * **four** fingers down — focus panels
- * **four** fingers horizontal — window switching
- * **three** finger group translate — back/forward or tab switch
- (reverse of horizontal's behavior)
- * **three** finger group rotate — problematic because of two
- finger with anchored thumb
- * **one** finger left/right edge in — back/forward
- * **one** finger left/right edge out — forward/back, or sidebar
- reveal
- * **one** finger top edge in — overview
- * **one** finger bottom edge in — panels
-
-> #### Overview
-
- * **two** fingers horizontal — switch tabs
- * **two** fingers up/down? — close tab
- * **three** fingers — switch windows
- * **four** fingers — window switching
- * **three** fingers down — out of overview
- * **four** fingers down — out of overview
- * **three** or **four** fingers up — logout
-
-> #### Panels
-
- * **two** fingers = scroll current panel
- * **three** fingers horizontal = switch panels
- * **three** fingers up = back to main view
-
-## Full Multitouch (Direct manipulation)
-
-* All content area gestures (two and one finger) passed directly to
- web pages
-* Default behaviors for one and two finger gestures as above
-* We may reserve the above 3/4 finger gestures for os needs:
- * three fingers — window movement/resizing
- * four fingers — overview \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/new-tab-page/index.md b/chromium/docs/website/site/user-experience/new-tab-page/index.md
deleted file mode 100644
index f0b9c3a13bd..00000000000
--- a/chromium/docs/website/site/user-experience/new-tab-page/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: new-tab-page
-title: New Tab Page
----
-
-[TOC]
-
-The new tab page is the default starting point for all tabs - it is designed to
-get the user where they want to go, and is not meant to be an information
-resource like the user's home page; that is, the new tab page is not intended to
-be a destination, but rather a jumping-off point to other destinations - we
-strongly want to avoid cognitive load and distractions for the user, especially
-those creating new tabs for other purposes.
-
-## Sections
-
-The new tab page is made up of several sections; these sections will vary in
-size and presentation method as we figure out which sections are and are not
-useful.
-
-* **Most Visited**: A grid of thumbnails showing the user's nine most
- frequently visited sites.
-* **Searches**: Like most visited, the searches section shows your
- most frequent searches. Currently, this is a list of the most
- frequently used keyword searches, but will be expanded to include
- all form-field based searches.
-* **Recent Bookmarks**: A list of the user's nine most recently
- created bookmarks.
-* **Recently Closed Tabs**: A list of up to three tabs that have been
- closed within the last X minutes. Clicking an item here will restore
- the tab to the same state it was in when it was closed.
-
-## Future Work
-
-* Show the end-points of navigations (if you always click on the same
- link after going to a root page, why not show the linked page
- instead).
-* Allow control over the contents of the grid
-* Vary content depending on context (time of day, IP block, etc)
-
-## Experimenting with the New Tab Page
-
-It is relatively easy to make edits to the new tab page as its frontend is
-constructed with HTML.
-
-To edit the HTML, look for browser\\resources\\new_tab.html - the backend for
-this page is defined in browser\\dom_ui\\new_tab_ui.cc. After making HTML
-changes, you'll need to recompile the resources:
-
-> [<img alt="image" src="/user-experience/new-tab-page/new_tab_resources.png"
-> height=420 width=142>](/user-experience/new-tab-page/new_tab_resources.png)
-
-1. Right-click new_tab.html and select **Compile**.
-2. Right-click browser_resources.rc and select **Compile**.
-3. Press F5 to run Chromium.
-
-You must follow this process for all HTML changes. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/new-tab-page/new_tab_resources.png.sha1 b/chromium/docs/website/site/user-experience/new-tab-page/new_tab_resources.png.sha1
deleted file mode 100644
index 2a81241bd04..00000000000
--- a/chromium/docs/website/site/user-experience/new-tab-page/new_tab_resources.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-97548fb8ef7a1b8248389d5189efb0cbc2da304e \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/notifications/Notifications.png.sha1 b/chromium/docs/website/site/user-experience/notifications/Notifications.png.sha1
deleted file mode 100644
index e4e48fcfc1c..00000000000
--- a/chromium/docs/website/site/user-experience/notifications/Notifications.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6877de715cf4c1e41fb04510c61c2960351b796f \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/notifications/index.md b/chromium/docs/website/site/user-experience/notifications/index.md
deleted file mode 100644
index 4ba52668e85..00000000000
--- a/chromium/docs/website/site/user-experience/notifications/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: notifications
-title: Notifications
----
-
-****UI under development. Designs are subject to change.****
-
-**Chrome OS Notifications**
-
-**[<img alt="image"
-src="/user-experience/notifications/Notifications.png">](/user-experience/notifications/Notifications.png)**
-
-**The notifications panel is used for all OS and website notifications**
-
-Functionality:
-
-* Pops up along the bottom for any new notifications
-* Slides down after a delay
-* Can be closed to hide all notifications
-* Can be opened from the apps list
-* Sticky notifications (like the low battery notification) do not
- slide down unless the user clicks on the titlebar
-
-Future goals
-
-* We may eventually anchor this panel in a special location on the
- screen, but for now it behaves as a standard panel, opening to the
- left of any existing panels.
-* Notifications should be able to badge application icons (like
- browser actions).
-* Better support for notification actions (links along the bottom). \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/omnibox/cheese_results.png.sha1 b/chromium/docs/website/site/user-experience/omnibox/cheese_results.png.sha1
deleted file mode 100644
index 89d7b209565..00000000000
--- a/chromium/docs/website/site/user-experience/omnibox/cheese_results.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-03c4d6c0aa5a2dfc24760732fc10c6c3aaf25d35 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/omnibox/index.md b/chromium/docs/website/site/user-experience/omnibox/index.md
deleted file mode 100644
index fa67eacb7b0..00000000000
--- a/chromium/docs/website/site/user-experience/omnibox/index.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: omnibox
-title: Omnibox
----
-
-[TOC]
-
-## Introduction
-
-Most modern browsers are equipped with a toolbar, featuring both a URL and a
-search field. While straightforward, this UI configuration can lead to some
-confusion and a general feeling of unnecessary complexity. The purpose of
-Chromium's omnibox is to merge both location and search fields while offering
-the user some highly relevant suggestions and / or early results.
-There were two trains of thought on what the omnibox should offer. Some
-reviewers felt that current browsers currently try to guess what the user is
-typing and offer suggestions. These reviewers would like some better
-accelerators and some more satisfying shortcuts, these two approaches are
-detailed below:
-
-> Accelerate my typing
-> The omnibox should focus on augmenting the user's commands - all of the tools
-> it provides should be oriented around making the user's input 'better', and
-> sending them to a destination.
-> Show me results
-> If some highly likely results exist for the user action, these results should
-> be visible in the omnibox. For example, we could show very probable results
-> which are coming from web search or history.
-
-Chromium focuses on the 'accelerate my typing' system - while showing results
-was powerful for certain navigational tasks, the designs we tested generally had
-too much cognitive overhead to be useful in normal situations.
-
-Additional details on the philosophy, architecture and implementation details
-[are available
-here](https://docs.google.com/document/d/1Dk_U-zXiMFynKOYYKrS6VKUXrON_ta2mYnAyHa-Uvc0/edit).
-
-## Design Principles
-
-> ### Reduce cognitive overhead
-
-> > An early motivator of combining the search and address bars was a conviction
-> > that, even for users who understood the difference between the two, having
-> > to make a choice of where to input text was a small (generally subconscious)
-> > cognitive load. Combining the two does not just serve novice users, it
-> > reduces cognitive load for more advanced users. Similarly, the rest of the
-> > omnibox design seeks to minimize cognitive load.
-> > One example of this is the graphical design of the dropdown. Items are
-> > displayed very simply, with a minimum of iconography, bright colors, font
-> > changes, and other eye-catching elements. This makes the dropdown less
-> > distracting for cases where users are simply trying to enter text in the
-> > edit field and get where they want to go, at the cost of conveying less
-> > information about each item when users are carefully scanning their various
-> > options. We believe that users ignore the dropdown most of the time, and so
-> > this tradeoff is the right one. Even when users look at the dropdown, this
-> > design makes it simple to rapidly scan the available choices rather than
-> > having to carefully read each one.
-
-> ### Stability and predictability
-
-> > In a control with as many heuristics as the omnibox, users can easily feel
-> > out-of-control. Accordingly, both the edit field and dropdown seek to be as
-> > stable and predictable as possible. Inline autocomplete is designed to
-> > operate synchronously to avoid flickering or race conditions, and triggers
-> > on very simple conditions (for most sites, after typing the hostname once)
-> > so that its behavior doesn't suddenly change after long usage. The
-> > top-ranked item in the dropdown should not change as more results come in.
-> > The dropdown itself is always open while users edit, and always has a
-> > selected entry, so that the action Chromium takes on hitting &lt;enter&gt;
-> > can always be predicted. Asynchronous background queries stop when users
-> > begin arrowing through the dropdown so the results don't change as users
-> > attempt to select desired items. A highlight marks the hovered row as users
-> > mouse over the dropdown so it will be clear which selection will be used if
-> > they click.
-
-## Input Types and Examples
-
-> The biggest challenge faced by the omnibox is figuring out what the user wants
-> - the various input types are detailed below:
-
-> ### Single word
-
-> > Example (Search): cheese
-> > Example (URL): localhost
-> > Single-word searches are hard for us to distinguish from single-word URLs -
-> > previous solutions have relied on synchronous DNS lookups to figure out if a
-> > user was typing a single-word URL, but such lookups add an unreasonable
-> > overhead to the search experience and don't always lead to an expected
-> > result. For example, if you wish to look up what 'localhost' means, but you
-> > have a local webserver running, the result can be infuriating.
-> > In Chromium, we decided that consistency and speed was best, and given that
-> > the range of 'single-word inputs meant as searches' dwarfs the number of
-> > 'single-word inputs meant as URLs', we default to displaying web search
-> > results while doing a background DNS lookup to figure out if a local host
-> > exists - if it does, we display a "Did you mean http://input/" infobar as
-> > show below:
-> > <img alt="image" src="/user-experience/omnibox/cheese_results.png">
-> > If a user accepts the 'did you mean' suggestion, the auto-complete system
-> > will ensure that subsequent entries of the given term will go to that URL.
-> > A user can override the search-first behavior by making the search term look
-> > like a URL fragment - typically adding a slash to the end of the input is
-> > the easiest way of accomplishing this (eg. "cheese/").
-> > If a single-word input is in-progress and matches an URL in the user's
-> > autocomplete database, we may autocomplete to that full URL.
-
-> ### URL (or URL Fragment)
-
-> > Example: www.google.com
-> > Example: www.blues
-> > Example: http://localhost
-> > Example: pie/
-> > Items that look like URLs will be treated as such. There is a range of logic
-> > for determining whether something looks like a URL, as there are cases where
-> > multiple-word input can still be intended as a URL (editing of query
-> > parameters without using '+' or '%20' instead of spaces, for example).
-
-> ### Multiple words
-
-> > Example: where can I buy meat pies?
-> > Example: XKCD meaning
-> > Multiple-word input is generally treated as search input, unless the first
-> > word matches one of the user's keywords.
-
-> ### Search Keyword
-
-> > Example: images.google.com ponies
-> > Example: g fastidious
-> > If a user has search keyword, the default action may be to activate that
-> > keyword using the terms following the keyword as input.
-
-## Tab to Search
-
-> If a user is partway through typing something that auto-completes to a
-> keyword, we allow the user to press **Tab** to jump to the end of the
-> auto-completion and begin their keyword search term input. This is powerful
-> when combined with our automatic keyword creation - a user who does a search
-> on amazon.com in the course of their normal browsing will be presented with
-> the option of pressing **Tab** to do an Amazon search the next time they type
-> something that auto-completes to amazon.com, leading to the ability to type
-> 'ama \[tab to complete\] pies'. We call this functionality 'tab to search'.
-> [<img alt="image"
-> src="/user-experience/omnibox/keyword.png">](/user-experience/omnibox/keyword.png)
-
-## Result Types
-
-> [<img alt="image"
-> src="/user-experience/omnibox/omnibox_results.png">](/user-experience/omnibox/omnibox_results.png)
-
-> ### Search for...
-
-> This searches for the typed query - this will be the topmost and default item
-> if the input looks like a search string.
-
-> ### URL
-
-> If the input (after auto-complete, if applicable) looks like a URL, this will
-> repeat the user's input and be the default, top-most item.
-
-> ### Previous URLs
-
-> If the input matches a previous URL, those URLs will be shown here.
-
-> ### Nav Suggest
-
-> Uses the user's default search provider to suggest URLs based on the user's
-> input.
-
-> ### Search Suggest
-
-> Uses the user's default search provider to suggest search terms based on the
-> user's input.
-
-> ### History Results
-
-> Shows the number of entries in the user's history that match the given input -
-> selecting this item will take the user to the history results page for their
-> given search term. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/omnibox/keyword.png.sha1 b/chromium/docs/website/site/user-experience/omnibox/keyword.png.sha1
deleted file mode 100644
index 95b14003a75..00000000000
--- a/chromium/docs/website/site/user-experience/omnibox/keyword.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-510656736d8b9b78c0f921c1a04166b34e316cba \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/omnibox/omnibox-bug-triage-process/index.md b/chromium/docs/website/site/user-experience/omnibox/omnibox-bug-triage-process/index.md
deleted file mode 100644
index 0cba043e2fb..00000000000
--- a/chromium/docs/website/site/user-experience/omnibox/omnibox-bug-triage-process/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-- - /user-experience/omnibox
- - Omnibox
-page_name: omnibox-bug-triage-process
-title: Omnibox Bug Triage Process
----
-
-The document describing the [omnibox bug triage
-process](https://chromium.googlesource.com/chromium/src.git/+/HEAD/components/omnibox/bug-triage.md)
-lives in the source tree. This page merely exists to aid search and discovery. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/omnibox/omnibox_results.png.sha1 b/chromium/docs/website/site/user-experience/omnibox/omnibox_results.png.sha1
deleted file mode 100644
index 80065d0e3dd..00000000000
--- a/chromium/docs/website/site/user-experience/omnibox/omnibox_results.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-422a875b78d77de1267d8e5536d242ddf8ea49f2 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/options/index.md b/chromium/docs/website/site/user-experience/options/index.md
deleted file mode 100644
index 84d57b0bd1f..00000000000
--- a/chromium/docs/website/site/user-experience/options/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: options
-title: Options
----
-
-[TOC]
-
-## Introduction
-
-By picking intelligent defaults, we hope that users never have to use the
-options screen. In the event that they do, we hope that we have so few options
-that managing and comprehending the whole set is easy. The options design was
-left until late in the process so that the team would have to live with the
-defaults.
-
-[<img alt="image"
-src="/user-experience/options/options_basics.png">](/user-experience/options/options_basics.png)
-
-## Sections
-
-The options dialog is divided into three usage-based tabs - the majority of
-users will only ever need the options in the **Basics** tab, a minority will
-need the items in the **Minor Tweaks** tab, and very few will ever need to
-examine **Under the Hood**. We had initially attempted content-based sections,
-but that lead to confusion over where a given preference should exist, and mixed
-useful and esoteric preferences together.
-
-Over time, we hope to reduce the number of options further. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/options/options_basics.png.sha1 b/chromium/docs/website/site/user-experience/options/options_basics.png.sha1
deleted file mode 100644
index 5be7cb96343..00000000000
--- a/chromium/docs/website/site/user-experience/options/options_basics.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a7bda39e24d78523803e9b2b99fe20cd16ecdd45 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2009-10-14 at 8.47.17 AM.png.sha1 b/chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2009-10-14 at 8.47.17 AM.png.sha1
deleted file mode 100644
index a67cd6af1d8..00000000000
--- a/chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2009-10-14 at 8.47.17 AM.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4e12986a0f5d5627c65731c95ebcdcd66d98520b \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2010-02-02 at 10.51.45 AM.PNG.sha1 b/chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2010-02-02 at 10.51.45 AM.PNG.sha1
deleted file mode 100644
index 1ff7143134b..00000000000
--- a/chromium/docs/website/site/user-experience/resolution-independence/Screen shot 2010-02-02 at 10.51.45 AM.PNG.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b0d8c0512652d5c54acc54dd7ebd017d6a5ec0c0 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/resolution-independence/index.md b/chromium/docs/website/site/user-experience/resolution-independence/index.md
deleted file mode 100644
index de43941e4cc..00000000000
--- a/chromium/docs/website/site/user-experience/resolution-independence/index.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: resolution-independence
-title: Resolution Independence
----
-
-**UI under development. Designs are subject to change.**
-
-We are focusing on two primary resolutions (at 1280@125dpi and 1366@150dpi), but
-should behave well on standard shipping netbooks.
-
-[<img alt="image"
-src="/user-experience/resolution-independence/Screen%20shot%202009-10-14%20at%208.47.17%20AM.png">](/user-experience/resolution-independence/Screen%20shot%202009-10-14%20at%208.47.17%20AM.png)
-
-**Prototype: (Requires a webkit browser)**
-
-****[Chrome dynamic UI
-prototype](http://ux.chromium.org/demos/dynamicui/index.html#).****
-
-<img alt="image"
-src="/user-experience/resolution-independence/Screen%20shot%202010-02-02%20at%2010.51.45%20AM.PNG"
-height=133 width=200>
-
-For different DPIs we would support different multipliers:
-
-* **&lt;150** dpi
- * Use existing assets
- * Tabs are 24px tall with 16px icons
- * Examples
- * 1024x600@10.1 (117dpi)
- * 1280x800@12.1 (125dpi)
- * 1366x768@11.6 (135dpi)
- * Any screens with height &lt;600
-* **150+** dpi
- * Use **1.25** Multiplier assets
- * Tabs are 30px tall with 24px icons
- * Examples:
- * 1366x768@10.1 (150dpi)
-
-* **190+** dpi
- * Use **1.5** Multiplier assets
- * Tabs are 36px tall with 32px icons
- * Examples
- * 1920x1080@11.6 (190dpi Theoretical)
-
-* **&gt;220** dpi (or devices magnified by the user)
- * Use vector based rendering
- * Tabs are **1/5** inches tall
-
-Exceptions:
-
-* Devices seen at greater distances use higher multipliers \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/screen-reader-support/index.md b/chromium/docs/website/site/user-experience/screen-reader-support/index.md
deleted file mode 100644
index 4dfeb1cb209..00000000000
--- a/chromium/docs/website/site/user-experience/screen-reader-support/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: screen-reader-support
-title: Screen Reader Support
----
-
-See [Accessibility: Assistive technology
-support](/user-experience/assistive-technology-support) \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/status-bubble/index.md b/chromium/docs/website/site/user-experience/status-bubble/index.md
deleted file mode 100644
index 55d06dd8b9e..00000000000
--- a/chromium/docs/website/site/user-experience/status-bubble/index.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: status-bubble
-title: Status Bubble
----
-
-[TOC]
-
-## Overview
-
-Chromium does not have a status bar - to show the target of a link or page load
-status, we use a fixed-width bubble that floats over the content when necessary.
-
-[<img alt="image"
-src="/user-experience/status-bubble/status_bubble_hover.png">](/user-experience/status-bubble/status_bubble_hover.png)
-
-## Timing and behavior
-
-The status bubble behavior in the link-hover case is described below.
-
-### Mouseover
-
-1. On mouse over link, begin Timer A.
-2. When Timer A expires, change the bubble text to the link value and
- begin fading in.
-3. If mouse moves out while fading in, begin fading out.
-4. When fade-in completes, show the bubble at full opacity.
-
-### Mouseout
-
-1. On mouseout, begin Timer B.
-2. If the user mouses over another link, change the bubble text to the
- value of the new link instantly. Go to step 4 of **Mouseover**,
- above.
-3. Otherwise, if Timer B expires:
- 1. Begin fading out until fade-out completes.
- 2. Or if mouse over again, change content and resume fade-in.
-
-This ensures that the bubble does not flicker in and out as the user's mouse
-traverses many links, and allows users to see the targets of multiple links
-quickly (compare to a tooltip solution). Timer A should be high enough so that
-if the user's cursor doesn't accidentally trigger the bubble in normal
-navigation, but low enough so that a user who wants to see a link is not kept
-waiting - generally with a slower fade-in, Timer A can be pretty low.
-
-## Size
-
-The status bubble's width is fixed to a percentage of the width of the window -
-while this results in link truncation, it prevents resizing as the user moves
-the mouse over multiple links. We try to keep the bubble under half the width of
-the window so that the bubble feels anchored to a corner, making that corner the
-obvious target for the user's eyes.
-
-## (Lack of) Security
-
-Note that the status bubble is [trivial to
-spoof](https://garron.net/web/spoof-link/) using a little CSS.
-
-In addition, it is also trivial to swap out the link after the user has hovered
-over it and pressed it, but before navigation.
-
-Therefore, the status bubble is just a convenience for users hovering over links
-on well-behaved sites, but it is **not** a security surface. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/status-bubble/status_bubble.png.sha1 b/chromium/docs/website/site/user-experience/status-bubble/status_bubble.png.sha1
deleted file mode 100644
index 105e25e409e..00000000000
--- a/chromium/docs/website/site/user-experience/status-bubble/status_bubble.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3853ae0e080126cb1b54a53ee7fac508b522a64a \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/status-bubble/status_bubble_hover.png.sha1 b/chromium/docs/website/site/user-experience/status-bubble/status_bubble_hover.png.sha1
deleted file mode 100644
index aedd3e1e139..00000000000
--- a/chromium/docs/website/site/user-experience/status-bubble/status_bubble_hover.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6a5b061ec7d37715e733f93b13cfb5a09eee6846 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/status-bubble/status_bubble_whiter.png.sha1 b/chromium/docs/website/site/user-experience/status-bubble/status_bubble_whiter.png.sha1
deleted file mode 100644
index eaf048ce95e..00000000000
--- a/chromium/docs/website/site/user-experience/status-bubble/status_bubble_whiter.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e6cfe64d780975ad1996b3ca4f418f62bd6d9ec0 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/tabs/index.md b/chromium/docs/website/site/user-experience/tabs/index.md
deleted file mode 100644
index 2b7659f00a1..00000000000
--- a/chromium/docs/website/site/user-experience/tabs/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: tabs
-title: Tabs
----
-
-#### [<img alt="image"
-src="/user-experience/tabs/tab.png">](/user-experience/tabs/tab.png)
-
-Tabs are the title bar-like representation of a webpage - like title bars, they
-can be moved independently, but can also be grouped together to form a single
-window of tabs. Chromium's UI is based around the treatment of tabs and their
-content as individual top-level elements rather than as children of a parent
-window.
-
-## Keyboard Switching
-
-Ctrl+Tab, Ctrl+Shift+Tab, Ctrl+PgUp and Ctrl+PgDn can all be used to switch back
-and forth between tabs. While there is great demand for an MRU-ordered switcher,
-we've so far been unable to find an MRU switcher that makes sense beyond the
-first three most recent tabs, or one that works well with background-created
-tabs.
-
-## Overflow
-
-Rather than enforcing a minimum size, tabs continue to shrink as tabs are added
-- this was found to be more satisfying than forcing users to swap to a different
-tab management model at some arbitrary cutoff point. It is also assumed that
-users with a large number of tabs will be more able to manage those tabs, and
-future work (such as a tab switcher overlay) may help address those cases.
-
-## Misc
-
-The tabs are depth ordered from left to right, with the active tab always in
-front - tabs do not maintain any other depth order (changing the depth sort
-based on focus order was more confusing than useful). \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/tabs/tab.png.sha1 b/chromium/docs/website/site/user-experience/tabs/tab.png.sha1
deleted file mode 100644
index 95fff2b54b5..00000000000
--- a/chromium/docs/website/site/user-experience/tabs/tab.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f8f9802a40f2c4edba4b02ac7b191a247f5461e6 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/tabs/throbber/chrome_throbber_64.gif.sha1 b/chromium/docs/website/site/user-experience/tabs/throbber/chrome_throbber_64.gif.sha1
deleted file mode 100644
index be011421f6e..00000000000
--- a/chromium/docs/website/site/user-experience/tabs/throbber/chrome_throbber_64.gif.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1ad3bbaf2398ee6602551259c752dcf89776e518 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/tabs/throbber/index.md b/chromium/docs/website/site/user-experience/tabs/throbber/index.md
deleted file mode 100644
index dbe532d0eb2..00000000000
--- a/chromium/docs/website/site/user-experience/tabs/throbber/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-- - /user-experience/tabs
- - Tabs
-page_name: throbber
-title: Throbber
----
-
-[<img alt="image"
-src="/user-experience/tabs/throbber/throbber.png">](/user-experience/tabs/throbber/throbber.png)
-
-We use throbber in the favicon area of the tab to indicate that a page is
-loading.
-
-A single-state throbber could make Chromium feel slow because it would hide the
-not-our-fault steps in the load process - it would lump DNS wait, server contact
-wait, data transfer, and rendering into one animation blob. Server/network
-slowness would therefore affect perception of Chromium's overall speed. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/tabs/throbber/throbber.png.sha1 b/chromium/docs/website/site/user-experience/tabs/throbber/throbber.png.sha1
deleted file mode 100644
index 378819744f4..00000000000
--- a/chromium/docs/website/site/user-experience/tabs/throbber/throbber.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-908c5b33ef452198bab893a4979eb0289eb97da9 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/toolbar/index.md b/chromium/docs/website/site/user-experience/toolbar/index.md
deleted file mode 100644
index 5790349e5ad..00000000000
--- a/chromium/docs/website/site/user-experience/toolbar/index.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: toolbar
-title: Toolbar
----
-
-A tab's toolbar is designed to show the basic information related to that tab.
-We strongly seek to avoid clutter here, and generally start by assuming that we
-wouldn't include something unless it had a reasonably high usage level.
-
-[TOC]
-
-## UI Elements
-
-### Back / Forward
-
-Standard browser back and forward buttons. You can access session history in
-each direction by clicking and holding or clicking and dragging downwards.
-
-### Reload
-
-A standard reload button. Ctrl and Shift do not modify this button's behavior.
-
-### Home
-
-When a user has enabled the home button, it appears here. The home button does
-not appear by default because in a multi-tab world, we believe that the
-bookmarks bar is a better place for navigational items.
-
-### Bookmark
-
-See [Bookmarks](/user-experience/bookmarks). The star may be dragged as a URL to
-create links to the current page in specific locations (Desktop, Bookmarks Bar).
-
-### Address Bar
-
-See [Omnibox](/user-experience/omnibox).
-
-### Go/Stop
-
-The go and stop buttons are typically not frequently used in browsers. However,
-they are frequently essential (for example, the go button is useful in
-mouse-only situations). These buttons are combined so that while a navigation is
-in progress, the button shows a stop icon, otherwise it shows a go button.
-If the navigation state changes while the user's mouse is over the button and
-the state change is not a result of a user action, the button will not change.
-It also protects against double-clicks.
-
-### Page Menu
-
-This is generally equivalent to "File / Edit / View", and contains things
-contextually related to the current tab.
-
-### Chromium Menu
-
-This is the "Tools / Options" menu, and contains items related to the browser.
-Technically it should be located outside of the tab bounds, but there was no
-satisfying way of doing so.
-
-## Future Work
-
-* Middle or modifier-clicking on UI elements should open the resulting
- page in the appropriate tab or window.
-* Customization
-
-## Visual Design
-
-Chromium's buttons are currently 25 x 27 pixels, so the icon centerline will be
-on a pixel row.
-Typically we've gone for icons that feel engraved into the button - as the
-button itself is already a third level of depth away from the desktop, we didn't
-want to add another.
-We aimed to make our buttons feel like hair-trigger switches, where the pushed
-state felt like it was only a pixel or two away, though never got this feeling
-right (the difference between the pushed and hover states wasn't pronounced
-enough). \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/touch-access/chromeos_touch_accessibility_user_flow.png.sha1 b/chromium/docs/website/site/user-experience/touch-access/chromeos_touch_accessibility_user_flow.png.sha1
deleted file mode 100644
index a748ddde643..00000000000
--- a/chromium/docs/website/site/user-experience/touch-access/chromeos_touch_accessibility_user_flow.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-21d50b4e8422ec31d16ce5a9efe7e0e1722baba5 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/touch-access/index.md b/chromium/docs/website/site/user-experience/touch-access/index.md
deleted file mode 100644
index 539dca0ff60..00000000000
--- a/chromium/docs/website/site/user-experience/touch-access/index.md
+++ /dev/null
@@ -1,322 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: touch-access
-title: 'Accessibility: Touch Access'
----
-
-Now that there are Chromebooks with touch screens, it is important that we have
-an interface for users with disabilities to be able to interact with a touch
-screen. It's based on the same ideas used on [iOS
-VoiceOver](http://axslab.com/articles/ios-voiceover-gestures-and-keyboard-commands.php)
-and [Android
-TalkBack](https://support.google.com/accessibility/android/answer/6006598?hl=en),
-but with a few Chrome-specific differences.
-
-Currently iOS and Android provide mobile touch accessibility by allowing users
-to touch the screen to explore the content currently showing. The user can hear
-spoken feedback about whatever is under their finger. They may then perform
-certain gestures to send a click action to the last explored target. There are
-other gestures to adjust settings such as volume or reading speed, to navigate
-between items on the page, to enter passthrough mode (where touch events are
-sent through directly as if accessibility was off), and to perform many other
-actions.
-
-Touch accessibility on ChromeOS essentially works like this:
-
-Users may use a finger to explore the screen by touch, hearing spoken feedback
-about the item under their finger. They may then perform certain gestures such
-as tapping and swiping to send a click to the last explored target, entering
-passthrough mode (where touch events are sent through directly rather than being
-intercepted by the accessibility system), adjusting volume, changing tabs, or
-scrolling.
-
-The feature turns on when spoken feedback is enabled. Currently there's no way
-to turn touch accessibility on or off independently; for now we're assuming that
-any users who want spoken feedback on probably want this functionality too, but
-we could make it a preference later.
-
-The majority of the code exists in the [touch exploration
-controller](https://code.google.com/p/chromium/codesearch#chromium/src/ui/chromeos/touch_exploration_controller.h).
-When spoken feedback is enabled, an instance of this class is created and all
-touch events inputted by the user are rewritten through RewriteEvent. Sometimes
-these events are discarded, sometimes they are released with a delay, and
-sometimes they change the user's current state (e.g. from single finger pressed
-state to touch exploration state).
-
-[TOC]
-
-**## Navigating the Screen**
-
-### **Touch Exploration**
-
-* When the user is in the touch exploration state, simulated mouse
- moves are dispatched whenever the finger moves. These mouse moves
- causes the screen reader
- ([ChromeVox](http://www.chromevox.com/index.html)) to read the name
- of the object the user is touching.
-* Touch exploration state is entered by holding a finger down for more
- than 300 ms, or by moving a finger on the screen for longer (grace
- period ends) or slower (leave the grace area at a low velocity) than
- it takes to perform a gesture.
-* Once in touch exploration mode, all movements are translated into
- synthesized mouse move events. This causes hover states and events
- to be triggered. (e.g. a menu that opens on a mouse hover would open
- with touch exploration)
- * The last touch exploration location is stored and updated after
- every artificial mouse move.
-* Touch exploration mode is left when the touch exploration finger is
- lifted or when other fingers are added.
-
-### **Clicking Touch Explored Items**
-
-* Currently, there are three different ways of clicking on the item
- that was most recently touched through touch exploration.
-
-#### Single Tap
-
- * If the user is in touch exploration mode, they can click on the
- last touch exploration location by lifting their finger and
- quickly placing it on the screen again within the double tap
- timeout (300 ms).
-
-#### Split Tap
-
- * If the user is in touch exploration mode, they can click without
- lifting their touch exploration finger by tapping anywhere else
- on the screen with a second finger.
-
- * Details:
- * After a successful split tap has been completed, the user
- will be back in touch exploration.
- * If either finger moves too far from its original location,
- no click goes through.
- * If the touch exploration finger is lifted first, a click
- still goes through when the split tap finger (the second
- finger) is lifted.
-
-#### Double Tap
-
- * If the user double-taps, the second tap is translated as a click
- to the location of the last successful touch exploration - that
- allows the user to explore anywhere on the screen, hear its
- description, then double-tap anywhere to activate it.
-
- * Details:
- * The double tap must be completed 300 ms after the touch
- exploration is released or else it is considered to be a
- single tap.
- * In terms of timing, the second tap must also be completed
- within 300 ms of the first tap.
-
-### **Gestures**
-
-* Gestures can be used to send high-level accessibility commands.
-
-> #### Swipe Gestures
-
- * The user can perform swipe gestures in one of the four cardinal
- directions which are then interpreted and used to control the
- UI.
- * A gesture will be registered if:
- * the user places one or more fingers on the screen and moves
- them all in one of the cardinal directions
- * the distance moved is far enough (outside the "slop region")
- to determine that the movement was deliberate
- * all fingers are released after the gesture is performed
- * the entire gesture is performed within the grace period
- (300ms)
- * If the grace period expires before all fingers are lifted:
- * If only a single finger was placed down, then touch
- exploration mode is entered.
- * Otherwise, the system will wait for all fingers to be lifted
- before processing any more touch events.
- * Details:
-
- * One finger swipes are used for navigation on the screen. For
- example, a swipe right would correspond to the keyboard
- shortcut **Shift+Search+Right** (**ChromeVox+Right**).
- * The default for this is **up/down:** go to next/previous
- group, and **left/right**: go to next/previous object
- (for instance, bullet points), but this can be changed
- in ChromeVox settings.
- * Two finger swipes are mapped as:
- * **up**: go to top
- * **down**: read from here
- * **left**: browser back
- * **right**: browser forward
- * Three finger swipes are mapped as:
- * **up**: page down (scroll by a set amount)
- * note that up is page down because with touch it's
- like you're literally dragging the page up - which
- lets you see down the page
- * **down**: page up
- * **left**/**right**: scrolls through the tabs
- * Four finger swipes are mapped as:
- * **up**: home page
- * **down**: refresh
- * **left**/**right**: decrease/increase brightness (for
- low vision users)
- * Note that all of these mappings are not final and will
- probably be shifted to best help users. Ideally there will
- eventually be a menu for users to pick their own mappings
-
-> #### Side Slide Gestures
-
- * Slide gestures performed on the edge of the screen can change
- settings continuously.
- * Currently, sliding a finger along the right side of the will
- change the volume.
- * Volume control along the edge of the screen is directly
- proportional to where the user's finger is located on the
- screen.
- * The top right corner of the screen automatically sets the
- volume to 100% and the bottom right corner of the screen
- automatically sets the volume to 0% once the user has moved
- past slop.
- * This could be applied to other settings in the future
- (brightness, granularity, navigation of headings).
-
- * Details:
- * If the user places a finger on the edge of the screen and
- moves their finger past slop, a slide gesture is performed.
- * The user can then slide one finger along an edge of the
- screen and continuously control a setting.
- * Once the user enters this state, the boundaries that define
- an edge expand so that the user can now adjust the setting
- within a slightly bigger width along the side of the screen.
- * If the user exits this area without lifting their finger,
- they will not be able to perform any actions, however if
- they keep their finger down and return to the "hot edge,"
- then they can still adjust the setting.
- * In order to perform other touch accessibility movements, the
- user must lift their finger.
-
-### **Passthrough**
-
-* Passing finger events as if accessibility is off is useful for
- smooth scrolling, drag and drop, and pinching. There are currently
- two implementations for passthrough.
-* Passing finger events through is also useful for anything which
- implements custom gestures, as mentioned in the "Why A New Set Of
- Features" section.
-* An earcon will always sound when the user enters passthrough mode,
- allowing the user to know that passthrough has begun.
-
-#### Relative Passthrough
-
- * If the user double taps and holds for the passthrough time-out,
- all following events from that finger is passed through until
- the finger is released.
- * This can be useful if a certain element requires a gesture to
- operate, allowing the user to touch explore to that element,
- then perform the gesture without needing to precisely locate the
- element again.
- * Details
-
- * These events are passed through with an offset such that the
- first touch is offset to be at the location of the last
- touch exploration location, and every following event is
- offset by the same amount.
- * If any other fingers are added or removed, they are ignored.
- * Once the passthrough finger is released, passthrough stops
- and the user is reset to no fingers down state.
-
-#### Corner Passthrough
-
- * When a user holds a finger in a bottom corner of the screen, any
- other fingers placed on the screen are passed through.
-
- * Details:
- * The user needs to place their finger on the corner of the
- screen for 700 ms (passthrough time-out) before passthrough
- will begin.
- * An earcon will play to indicate that passthrough has been
- activated.
- * Once activated, all the events from any subsequent fingers
- placed on the screen are passed through as long as the
- finger in the corner stays in the corner and is not
- released.
- * Once the finger in the corner has been released, all the
- following events are ignored until all the fingers have been
- released.
-
-**Other Details:**
-
-* If the user taps and releases their finger, after 300 ms from the
- initial touch, a single mouse move is fired. This can be used to
- explore an item on the screen without entering touch exploration
- state.
-* Earcons (short sound notifications) are fired whenever the user
- comes close to moving off the screen or moves onto the screen from
- the edge. Many touch devices have a smooth bezel around the edge of
- the screen, making it practically impossible to tell where the touch
- screen starts by only touch. This earcon helps the user be more
- aware of whether or not their finger is on the touch part of the
- screen.
-
-## Why A New Set of Features?
-
-To determine what would be the best direction for new ChromeOS touch
-accessibility features, there were a few things we needed to consider. First of
-all, people who were already accustomed to using touch accessibility on mobile
-had opinions on what functions they believed to be the most useful. Second of
-all, ChromeOS accessibility was new and only had a few features implemented when
-we arrived. We surveyed Google employees that used/were interested in
-accessibility features on mobile, and we asked for their preferences and ideas
-for the design for ChromeOS.
-
-What we discovered:
-
-* Most commonly used gestures: read next/previous item, read from
- here, jump to top, scroll by page, go back
-* When scrolling, users tended to prefer to go by a page then to
- scroll smoothly
-* Being able to use multiple fingers for gestures was considered to be
- much simpler and more intuitive than more complicated single finger
- gestures - especially on a bigger laptop screen
-* Passthrough mode was rarely used and users were frustrated by
- Android's emphasis on it, but it was felt to be necessary -
- especially when encountering “web apps in the wild” on a Chromebook
- (apps could be developed needing fancy swipes or multi finger
- touches, and there is no "internet police" to stop them)
-
-note: the sample size was fairly small, and we hope that we'll be able to
-collect more user feedback when the first version is released.
-
-Therefore, we have decided to implement the most useful features borrowed from
-Android and iOS as well as features completely unique to ChromeOS that took
-advantage of its own capabilities. For example, corner passthrough and side
-slide gestures wouldn't have worked as well on a tablet or mobile device, but
-take advantage of the Chromebook's bigger screen to give the user better
-accessibility.
-
-## Implementation**: State Machine**
-
-This is a graph of the possible states the user can be in, and all of the user
-input and timer time-outs that causes the [touch exploration
-controller](https://code.google.com/p/chromium/codesearch#chromium/src/ui/chromeos/touch_exploration_controller.h)
-to change the user's state. Occasionally touch presses and releases are
-dispatched to simulate clicks, and these dispatched events are also shown in
-this chart.
-
-[<img alt="image"
-src="/user-experience/touch-access/chromeos_touch_accessibility_user_flow.png">](/user-experience/touch-access/chromeos_touch_accessibility_user_flow.png)
-
-This chart was generated using https://www.gliffy.com
-
-## Future of Chrome Touch Accessibility
-
-Here are some ideas that didn't make it into version one, but would be awesome
-to implement soon:
-
-* Menu for accessibility settings (detail of navigation by
- word/line/paragraph, rate of speech, pitch of speech, etc.)
-* Drag and drop gesture to move an object or copy/paste while being
- able to navigate the screen between locations to find the drop point
-* Pinch/zoom - for low vision users (currently possible through corner
- passthrough, but perhaps a three finger hold could zoom in)
-* Enabling ChromeVox from anywhere - shortcut gesture recognized with
- ChromeVox turned off
-* Custom gestures - user chooses gesture mappings \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/touch-access/playing_around (2).png.sha1 b/chromium/docs/website/site/user-experience/touch-access/playing_around (2).png.sha1
deleted file mode 100644
index a214426514b..00000000000
--- a/chromium/docs/website/site/user-experience/touch-access/playing_around (2).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fdee1d4e14635bb82d6659b52a94d06ad17779a4 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/ui-strings/index.md b/chromium/docs/website/site/user-experience/ui-strings/index.md
deleted file mode 100644
index 7a548d7766b..00000000000
--- a/chromium/docs/website/site/user-experience/ui-strings/index.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: ui-strings
-title: 10 steps to better user-facing strings
----
-
-**1. Say it, then write it (aka, "Sound like a human")**
-
-Say out loud, to a friend or to yourself, what you want to tell the user. Write
-*that* down: it's going to be much more conversational than your first written
-attempt.
-
-* Before you keep reading, go and actually write it down in a note or
- document.
-* As you read on, edit your string during each step.
-
-**2. Focus on the user**
-
-The user is the star! One way to literally do this when writing is to **set the
-user as the subject** of the string ("You can do this action" instead of "Chrome
-has released this feature").
-
-* **Lead with the goal:** It catches users' eyes and incentivizes them
- to keep reading. Prepositional intro phrases are useful: "*To
- perform your goal,* do this action."
-* **Offer a solution:** Instead of only describing what went wrong,
- explain how to fix it!
-* **Don't go behind the scenes:** Are you describing how a feature
- works? Take it out: users really, really don't care. \[*Exceptions:
- mandatory data transparency & privacy/legal text*\]
-
-**3. Be consistent**
-
-Are there any other pieces of related UI where we want to maintain consistency?
-We have patterns for permissions prompts, settings, etc. Also, consider whether
-there are others in our industry who do it well!
-
-**4. Include everyone**
-
-Use language that’s neutral to different cultures, races, genders, and age
-groups. Avoid colloquialisms and US-centric references.
-
-* **Accessibility:** Does the string rely on color or position to
- identify a component? This won't work for people who are colorblind
- or use screen readers: find a **non-visual way to distinguish**
- components.
-
-**5. Sound human**
-
-User-facing text should be **useful, honest, and conversational**. Look for
-words or phrases that sound formal or technical, and replace them with simple
-words and phrases. [Plain language is for everyone, even
-experts](https://www.nngroup.com/articles/plain-language-experts/), so this
-applies as much as possible to developer-facing spaces as well.
-
-Contractions are encouraged; for example: "Linux won't remember a USB device
-after it's removed."
-
-**6. Speak simply**
-
-Ideally, UI text can be easily understood by a typical 11- or 12-year-old
-student. Some tips:
-
-* Find the longest words in your sentence and swap them out for
- shorter synonyms. Example: "buy" instead of "purchase."
-* Look for conjunctions ("and," "or"): can you split one sentence into
- two sentences?
-* Count the words. Aim for 5-15 words per sentence.
-
-**7. Be positive**
-
-Are you telling a user what can't be done? Try flipping it around and telling
-them what *can* be done, instead. You can describe limits with phrases like "up
-to 25 MB" or "when it's available."
-
-**8. Write globally**
-
-Will the string translate well?
-
-* In some languages, it's hard to localize pronouns like "it" or
- "this." Avoid them when you can; or, at least, make sure they are as
- close as possible to the word they refer to.
-* If you can, avoid gerunds (verbs that act as nouns; end in "-ing").
-* Remove repetition: it's perceived as patronizing and a waste of
- time. For example: don't use the same string for both title & body;
- don't mention the product name multiple times.
-
-**9. Keep it short (aka, "Short beats good")**
-
-Does the string have to fit in a limited space? Keep in mind that English
-strings may increase by at least 30% after translation (test with an [automated
-translation](https://translate.google.com/) in Filipino, Greek, or German). Cut
-everything that isn't *super critical*.
-
-**10. Check the basics**
-
-Here are some answers to common string questions:
-
-* Do we use the [serial
- comma](https://en.wikipedia.org/wiki/Serial_comma)?
- * Yes!
-* Does the string need a period?
- * Apple OSes:
- * Fragments in titles/headings: no period
- * Complete (single or multi) sentences: use periods
- * Google OSes, Win & Linux:
- * Single sentence: no period
- * Multiple sentences: use periods
-* Which words do I capitalize?
- * Apple OSes:
- * Title Case = titles, buttons menus, menu items
- * Sentence case = labels, instructional text
- * Google OSes, Win & Linux:
- * Sentence case = everything (except where strings overlap
- with Apple OSes) \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/user-data-directory/index.md b/chromium/docs/website/site/user-experience/user-data-directory/index.md
deleted file mode 100644
index 4cf8957adfb..00000000000
--- a/chromium/docs/website/site/user-experience/user-data-directory/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: user-data-directory
-title: User Data Directory
----
-
-This content moved to
-<https://chromium.googlesource.com/chromium/src/+/HEAD/docs/user_data_dir.md>. \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/visual-design/chrome_0.2_psd.zip.sha1 b/chromium/docs/website/site/user-experience/visual-design/chrome_0.2_psd.zip.sha1
deleted file mode 100644
index b950c29fa33..00000000000
--- a/chromium/docs/website/site/user-experience/visual-design/chrome_0.2_psd.zip.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a2e8f832a64c7ffff869c00da97dc257cf2c8542 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/visual-design/chrome_colorscheme.png.sha1 b/chromium/docs/website/site/user-experience/visual-design/chrome_colorscheme.png.sha1
deleted file mode 100644
index 2f3085d52f3..00000000000
--- a/chromium/docs/website/site/user-experience/visual-design/chrome_colorscheme.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ca63c1727c1d6e7244b9f5abd0a26a4585729e3f \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/visual-design/index.md b/chromium/docs/website/site/user-experience/visual-design/index.md
deleted file mode 100644
index 179f8c3b184..00000000000
--- a/chromium/docs/website/site/user-experience/visual-design/index.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: visual-design
-title: Visual Design
----
-
-[TOC]
-
-## Design decisions: existing design
-
-### Native style
-
-While we're not a natively-themed application, we do wish to fit within the
-operating system so that our app doesn't look out of place. This affects our
-choices of:
-
-* interface icons (Vista makes frequent use of a certain back/forward
- icon style)
-* color
-* perceived depth, thickness
-* border shape, width and styling
-* font choice
-* blurriness - Windows tends to be more bitmappy than OS X, preferring
- to align everything along pixel boundaries - see the Cleartype vs.
- Quartz wars.
-
-We use a non-native window frame with XP because the existing toolbar did not
-support our tabs-on-top design - its color and gradients did not support the
-overlay of interactive graphics, and it did not have the height we required. We
-use the native frame on Vista, and intend to use the native frame on OS X.
-
-The Windows XP UI consists of three layers - the first two consist of a blue
-rubbery window frame, and a lighter tab frame. The buttons then stick out of
-this frame, forming a third layer of depth. Each of these layers should each
-feel no more than three or four pixels deep. We avoided going totally flat, as
-this clashed with the host operating system and felt wrong - Chromium should
-feel like a tactile object, not an abstract flat piece of software.
-
-The Photoshop file used in the creation of the Chrome design can be found
-attached at the bottom of this page.
-
-#### Mathemagics
-
-[<img alt="image"
-src="/user-experience/visual-design/mathemagics%20%281%29.png">](/user-experience/visual-design/mathemagics%20%281%29.png)
-
-While the following is very rough because of gradual changes over time, rounding
-errors, and because highlights and shadows make it hard to judge perceptual
-distances, our design started based on the golden ratio. In the diagram above:
-C = GR \* B
-B = GR \* A
-As the titlebar fills up with tabs, 'A' becomes the only grabbable area for the
-window. This may prove to be too small for most users (user study results are
-encouraging, however), so this may change.
-
-#### Type
-
-For all Chromium dialogs and toolbars, we use the system default font, which is
-most frequently Tahoma 11px on Windows XP, or Segoe on Vista.
-We make the URL larger (13px) to make it stand out more, and because the omnibox
-is a large part of the product. This means that the baseline of the text in the
-omnibox doesn't line up with the baselines of the text for the menus. Cry.
-
-## Inspiration
-
-While it doesn't show through today, we drew early inspiration from The
-Designers Republic's work on the then-Psygnosis games WipEout and WipEout 2097;
-the focus on blinding speed, and iconography that could be recognized instantly
-even in the depths of your peripheral vision were both key attributes we
-admired.
-
-## Visual tests
-
-All designs should be tested against default desktop backgrounds on XP and Vista
-(with and without the default images), with multiple applications open
-(typically multiple Windows Explorer windows and Office), at different screen
-resolutions.
-
-## Resources
-
-[<img alt="image"
-src="/user-experience/visual-design/chrome_colorscheme.png">](/user-experience/visual-design/chrome_colorscheme.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/visual-design/mathemagics (1).png.sha1 b/chromium/docs/website/site/user-experience/visual-design/mathemagics (1).png.sha1
deleted file mode 100644
index c6da8dd2bda..00000000000
--- a/chromium/docs/website/site/user-experience/visual-design/mathemagics (1).png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3c6d32a9ed2e3e65ac1dd4113cf78443ad2607c5 \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/window-frame/frame_corners.png.sha1 b/chromium/docs/website/site/user-experience/window-frame/frame_corners.png.sha1
deleted file mode 100644
index fab5ae859ed..00000000000
--- a/chromium/docs/website/site/user-experience/window-frame/frame_corners.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-42d38b761a76ea95e879e7834c9b72839c42e41c \ No newline at end of file
diff --git a/chromium/docs/website/site/user-experience/window-frame/index.md b/chromium/docs/website/site/user-experience/window-frame/index.md
deleted file mode 100644
index d5cacffde98..00000000000
--- a/chromium/docs/website/site/user-experience/window-frame/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-breadcrumbs:
-- - /user-experience
- - User Experience
-page_name: window-frame
-title: Window Frame
----
-
-The frame is the area behind the tabs - this is the 'convenient grouping' area
-for our tabs. We wish to avoid including things within the frame (such as
-branding elements) to work away from making the frame feel like a container
-(ideally you'd think of it as 'goo that binds tabs together').
-
-## Window border
-
-Our window border extends five pixels outwards around the left, right, and
-bottom edges of the content - three-pixel edges were too hard to grab. The
-border consists of a one-pixel tab border, three pixels of frame, and one pixel
-of dark frame border. This high-contrast edge ensures that the content (and the
-rest of our UI) doesn't bleed into other applications while allowing the content
-to feel like it is inside the tab. We have experimented with reducing this
-border size by one pixel, but the larger frame was more positively received.
-
-## Frame corners
-
-[<img alt="image"
-src="/user-experience/window-frame/frame_corners.png">](/user-experience/window-frame/frame_corners.png)
-
-Like all Windows apps, we have aliased corners. We originally wanted a square
-frame, but this clashed with other XP desktop software. Instead we have corners
-that are tighter than the default and feel tighter still (compare the shape of
-the light-colored area in the Office 2007 frame with the medium-blue,
-non-highlighted area in the Google Chrome frame).
-We spent a long time playing with the lighter grey pixels on our window border
-to make sure they didn't blend in nasty ways on various backgrounds.
-While it's technically possible to get drop shadows on Windows windows, it comes
-at an unacceptable cost to performance and stability. \ No newline at end of file
diff --git a/chromium/docs/website/site/x-subresources/index.md b/chromium/docs/website/site/x-subresources/index.md
deleted file mode 100644
index dad0d28e876..00000000000
--- a/chromium/docs/website/site/x-subresources/index.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-breadcrumbs: []
-page_name: x-subresources
-title: X-Subresources
----
-
-## Andrew Oates &lt;[aoates@google.com](mailto:aoates@google.com)&gt;, Bryan McQuade &lt;[bmcquade@google.com](mailto:bmcquade@google.com)&gt;, Mike Belshe &lt;[mbelshe@google.com](mailto:mbelshe@google.com)&gt;
-
-## The Problem
-
-A typical modern webpage fetches many external resources. www.cnn.com, for
-example, loads 150+ external resources on a fresh page load. The browser has no
-way of knowing which resources will be required for a page until it reaches the
-tags that reference them, or until a script sends off the request dynamically.
-The more time it takes for the browser to discover that it will need a resource,
-the more time it will take to download the entire page.
-
-In older browsers, this problem was exacerbated by the fact that the browsers
-would block when downloading external JavaScript resources. Blocking on
-JavaScript downloads delayed the time to discover additional subresources needed
-in the page. Recent browsers (IE8+, Safari 4+, Chrome2+, FF3.5+) can download
-scripts in parallel, which mitigates this particular part of the problem.
-
-We've also seen traces from real world web pages, where the top of the page is
-loaded with several kilobytes (even after compression) of inline CSS and
-JavaScript. If you had 20KB of such information at the top of the page, and
-downloaded the page over a slow network (such as a 256Kbps cell phone), it could
-request those resources as much as 600ms earlier than it otherwise could! Now,
-the observant reader may notice that if the network is fully utilized there is
-no point in adding additional resources to the download, as they will compete
-for bandwidth and slow each resource down. However, such networks usually have
-large RTT in addition to low bandwidth. The time to get requests to the server
-can be 200+ms. Although the bandwidth may not be immediately available, getting
-the RTTs started in parallel provides an advantage. Further, servers that use
-this experiment can intelligently schedule the responses (potentially even
-across connections) to avoid such contention issues.
-
-Evidence suggests that we can improve page load times for some sites if the
-server can inform the client of subresources earlier than it does today.
-
-## Challenges
-
-When downloading additional resources sooner, we need to ensure that the
-downloading of those resources does not defer the downloading of primary
-content. For example, the browser may be critically blocked on the downloading
-of the main HTML or the main CSS file. If we inform the client of low-priority
-images earlier, we should make sure that downloading them will not delay the
-higher priority resources.
-
-## The Experiment
-
-If browser's knew what subresources they would need for a given page, they could
-kick off the requests at the start of the page load, and wouldn't have to block
-on fetching javascript files (only on execution). This experiment proposes a new
-HTTP header, "X-Subresources" which can inform the client of subresources that
-may be needed when downloading a resource much earlier than when the client
-would otherwise discover the resource. The browser can optionally use this
-header to download content sooner than it otherwise would have done so.
-
-## Other Solutions
-
-Many alternative approaches to this problem exist. One simple one would be to
-consider putting this information into the HTML content (perhaps as LINK
-headers) as opposed to putting it into the HTTP headers. There are advantages to
-this approach, because having the server know about subresources for a given
-content page can be difficult to discover or manage. This approach would inform
-the browser of the subresources marginally later, but probably not significantly
-later. We haven't rejected this approach, and it may be a good idea to support
-as well. The reason we chose the HTTP header is because we'd like the origin
-server to be able to discover these optimizations on-the-fly without
-intervention from the content author. Content authors often do not know about
-the "tricks" to optimally load a web page, and giving servers the tools so that
-they can perform these changes automatically, we hope this feature is more
-useful. We could, of course, have servers modify the content being issued to the
-client on-the-fly, but this can be more difficult to do efficiently. All in all,
-we hope the solution we've chosen is a good starting point for this experiment.
-
-## Informal Specification
-
-Client-side
-
-If a client wishes to receive subresource notification headers, it should
-include a X-subresource header on the appropriate requests:
-
-X-Subresource: enabled
-
-When a client receives a response with the X-subresource header, it should
-decode the value, and generate requests for the URIs listed in the header. If
-multiple subresources are listed, it should fetch them in the order that is
-listed.
-
-### Server-side
-
-When a server receives a request with an appropriate X-subresource header, it
-may generate a list of subresources to be used by the requested page. It could
-do this by scraping the HTML, consulting a database, etc. It should then return
-this list as a X-subresource header to the client as part of the HTTP response
-header block.
-The server must not use X-Subresource headers for resources which are not
-cacheable, or whose lifetime might expire before the end of the current page
-load.
-
-#### Header Format
-
-The X-subresource header has the following format:
-
-header-value ::= type ; resource \[; type; resource\]
-
-type ::= text
-
-resource ::= URI
-
-Each resource consists of a type and a URI. The type is the mime-type of the
-URI, such as "text/html", "image/gif", etc. The URI is a standard HTTP URI.
-
-For example:
-
-X-subresource: text/css; http://www.foo.com/styles/foo.css;
-image/gif;/images/img1.gif \ No newline at end of file
diff --git a/chromium/docs/website/site/x-subresources/x-subresources-1/index.md b/chromium/docs/website/site/x-subresources/x-subresources-1/index.md
deleted file mode 100644
index 431cdd6bbc7..00000000000
--- a/chromium/docs/website/site/x-subresources/x-subresources-1/index.md
+++ /dev/null
@@ -1,252 +0,0 @@
----
-breadcrumbs:
-- - /x-subresources
- - X-Subresources
-page_name: x-subresources-1
-title: 'X-Subresources: python server experiment'
----
-
-### Experiment #1
-
-Andrew Oates &lt;aoates@google.com&gt;
-
-<table>
-<tr>
-
-<td># Purpose/Description</td>
-
-<td>The purpose of this experiment was to determine if significant gains could
-be had from adding the X-subresource headers to pages. If that was the case,
-further experimentation would be done.</td>
-
-<td>Specifically, I tested the effect of the prefetching on a page with several
-external Javascript resources, which would need to be loaded and run serially by
-the browser.</td>
-
-<td># Setup</td>
-
-<td>The experiment consisted of loading a single test page from a server, and
-timing the page load times under various conditions. There were three
-components: the server, the test files, and the client.</td>
-
-<td>### Server</td>
-
-<td>The server was a small HTTP server written in Python designed to serve
-static content and optionally scan the pages for tags and generate X-subresource
-for any external resources referenced in the document. It can also add an
-artificial latency to simulate adverse network conditions --- in this case, it
-simply waits a certain amount of time after receiving a GET request before
-sending back the response.</td>
-
-<td>TODO(aoates): publish the modified python server.</td>
-
-<td>### Client</td>
-
-<td>The client was a standard build of Firefox 3.0.10 with a custom extension
-installed.</td>
-
-<td>The extension listens for incoming requests, grabs any X-subresource headers
-and initiates prefetch requests for all the referenced resources.</td>
-
-<td>TODO(aoates): publish the firefox extension.</td>
-
-<td>### Test Pages</td>
-
-<td>The test pages consist of two variations on one page. In each case, the page
-loads and executes 10 external Javascript files, and collects timing information
-on how long the page load as well as each external JS load takes. The individual
-Javascript files print out a message to the page, and stall for a small amount
-of time (around 100ms).</td>
-
-<td>In the first variation, `test5.html`, the external Javascript files are
-hosted locally, alongside the page. They are therefore served by the Python
-server, which cannot handle multiple parallel connections. In the second
-variation, `test5_corp.html`, the Javascript files are hosted on a server which
-can handle parallel connections.</td>
-
-<td>TODO(aoates): publish the actual web pages.</td>
-
-<td># Experimental Groups</td>
-
-<td>There were four experimental groups, testing two variables:</td>
-
-* <td>Presence of X-subresource headers in test page headers, and</td>
-* <td>Location of external resources; either locally, served by the
- small Python HTTP server, or on remotely, on `www.corp.google.com`
- and served by Apache.</td>
-
-<td>In each case, the test page itself was served locally by the Python
-webserver (which generated the headers). The server was run with the following
-command:</td>
-
-<td>`./xsubserver.py --latency 300 [--no-xsubresource]`with the last parameter
-varying. This introduced a "latency" of 300ms to all content served by the
-Python web server; the server waited 300ms after receiving the request to send
-back the response. The number 300 was chosen to approximate the latency of
-downloading one of the javascript files from a typical server.</td>
-
-<td># Trials and Results</td>
-
-<td>Each group was run several times, and a representative set of results is
-presented in the table below. For each group, an overall page load time is
-presented, as is the load time of each Javascript `script` element (the time
-taken to load and execute the Javascript file).<table></td>
-<td><tr></td>
-<td></tr></td>
-<td><tr></td>
-<td></tr></td>
-<td><tr></td>
-<td></tr></td>
-<td><tr></td>
-<td><td>*Results of Experiment #1*</td></td>
-<td></tr></td>
-<td><tr></td>
-<td>External Resource Server</tr></td>
-<td><tr></td>
-<td>`xsubserver.py` (local)Apache/2.0.55 (remote)</tr></td>
-<td><tr></td>
-<td>X-subresource</td>
-<td><td>Page Load: *3065 ms*</td>HeadersYes</td>
-<td><td>JS #1 Load: 306 ms</td></td>
-<td><td>JS #2 Load: 301 ms</td></td>
-<td><td>JS #3 Load: 309 ms</td></td>
-<td><td>JS #4 Load: 306 ms</td></td>
-<td><td>JS #5 Load: 301 ms</td></td>
-<td><td>JS #6 Load: 312 ms</td></td>
-<td><td>JS #7 Load: 299 ms</td></td>
-<td><td>JS #8 Load: 303 ms</td></td>
-<td><td>JS #9 Load: 296 ms</td></td>
-<td><td>JS #10 Load: 317 ms</td></td>
-<td><td>Page Load: *1366 ms*</td></td>
-<td><td>JS #1 Load: 379 ms</td></td>
-<td><td>JS #2 Load: 108 ms</td></td>
-<td><td>JS #3 Load: 116 ms</td></td>
-<td><td>JS #4 Load: 106 ms</td></td>
-<td><td>JS #5 Load: 107 ms</td></td>
-<td><td>JS #6 Load: 106 ms</td></td>
-<td><td>JS #7 Load: 107 ms</td></td>
-<td><td>JS #8 Load: 107 ms</td></td>
-<td><td>JS #9 Load: 107 ms</td></td>
-<td><td>JS #10 Load: 106 ms</td></td>
-<td></tr></td>
-<td><tr></td>
-<td><td>Page Load: *4178 ms*</td>No</td>
-<td><td>JS #1 Load: 422 ms</td></td>
-<td><td>JS #2 Load: 415 ms</td></td>
-<td><td>JS #3 Load: 411 ms</td></td>
-<td><td>JS #4 Load: 415 ms</td></td>
-<td><td>JS #5 Load: 415 ms</td></td>
-<td><td>JS #6 Load: 415 ms</td></td>
-<td><td>JS #7 Load: 414 ms</td></td>
-<td><td>JS #8 Load: 417 ms</td></td>
-<td><td>JS #9 Load: 422 ms</td></td>
-<td><td>JS #10 Load: 416 ms</td></td>
-<td><td>Page Load: *3777 ms*</td></td>
-<td><td>JS #1 Load: 487 ms</td></td>
-<td><td>JS #2 Load: 353 ms</td></td>
-<td><td>JS #3 Load: 342 ms</td></td>
-<td><td>JS #4 Load: 342 ms</td></td>
-<td><td>JS #5 Load: 352 ms</td></td>
-<td><td>JS #6 Load: 356 ms</td></td>
-<td><td>JS #7 Load: 352 ms</td></td>
-<td><td>JS #8 Load: 347 ms</td></td>
-<td><td>JS #9 Load: 484 ms</td></td>
-<td><td>JS #10 Load: 351 ms</td></td>
-<td></tr></td>
-<td></table></td>
-
-<td># Discussion</td>
-
-<td>Let's examine each set of results.</td>
-
-<td>### Python/local without prefetching</td>
-
-<td>In this trial, there was an overall page load time (from execution of the
-first script tag to sending the body's `onLoad` event) of 4178 ms, with each
-individual javascript element taking a little over 400 ms to load and execute.
-This is exactly as expected --- with a latency of 300 ms, and an execution
-duration of 100 ms, each javascript element should take around 400ms to execute.
-Multiply that by 10 elements, and we get a ~4000 ms page load time. This is our
-worst-case scenario.</td>
-
-<td>### Apache/remote without prefetching</td>
-
-<td>Assuming we modeled the latency accurately with our local Python webserver
-(which we didn't), these should be about the same as the local results. Each
-Javascript load is 50-60ms faster, however. This can be chalked up to Apache
-being just plain better than our local server.</td>
-
-<td>### Python/local with prefetching</td>
-
-<td>In this case, we shave about 1 second off our overall page load time. By
-examining the server output, it is clear that the page is sending off its
-prefetch requests all at the start of the page load, and the files are
-downloaded in the network thread. However, since the server cannot handle
-parallel connections/requests, the files must be read in serial. In this case,
-it looks like the prefetches are around 100ms ahead of the execution in the UI
-thread. Since we can load and execute at the same time, that 100ms stacks to
-give us a savings of around a second. Pretty good!</td>
-
-<td>### Apache/remote with prefetching</td>
-
-<td>In this case, since Apache can handle multiple concurrent connections, the
-browser can shoot off all its requests at once. Once again, the loading is a
-little behind the execution of the scripts, but since we are downloading them
-all concurrently, we've finished fetching the scripts by the time the second one
-starts executing. Each subsequent script therefore only takes execution time (no
-downloading needed), so we get excellent savings, very close to our optimal page
-load time of ~1200-1300 ms.</td>
-
-<td>### Costs</td>
-
-<td>Adding the X-subresource headers can be costly. In this case, it increased
-the size of the headers on `test5.html` from 166 bytes to 747 bytes. The
-appended headers were:` X-subresource: test5_1.js; type=application/x-javascript
-X-subresource: test5_2.js; type=application/x-javascript X-subresource:
-test5_3.js; type=application/x-javascript X-subresource: test5_4.js;
-type=application/x-javascript X-subresource: test5_5.js;
-type=application/x-javascript X-subresource: test5_6.js;
-type=application/x-javascript X-subresource: test5_7.js;
-type=application/x-javascript X-subresource: test5_8.js;
-type=application/x-javascript X-subresource: test5_9.js;
-type=application/x-javascript X-subresource: test5_10.js;
-type=application/x-javascript ` Note that the current implementation of the
-extension doesn't use any of the metadata included in the header (it just sends
-off a blind request), so that could be eliminated. Additionally, these could be
-concatenated into one large X-subresource header:` X-subresource: test5_1.js,
-test5_2.js, test5_3.js, test5_4.js, test5_5.js, test5_6.js, test5_7.js,
-test5_8.js, test5_9.js, test5_10.js ` This would bring the size of the header
-down to 302 bytes. While much more reasonable, this is not insignificant.
-However, as plaintext, it's a good candidate for an optimization like gzip'd
-headers.</td>
-
-<td># Conclusions</td>
-
-<td>When prefetching is enabled (as in the 1st row of results), the browser
-doesn't have to block network loads on executing javascript. It can read the
-prefetch headers, send off requests, and forget about them --- they'll continue
-in the network thread while work is being done in the UI thread.</td>
-
-<td>The most fruitful type of sub-resource to be prefetched is probably
-Javascript; when the browser encounters an external JS file, it has to block the
-main/UI thread until the file is downloaded and executed. If, however, the file
-has been prefetched, the time taken to download is instant savings on the
-overall load time of the page. In a case like this, with multiple consecutive
-scripts, the difference can be dramatic.</td>
-
-<td># Future Work</td>
-
-<td>Some areas of future work include:</td>
-
-* <td>Testing with a dummynet for varying network bandwidth, RTT, and
- loss rate.</td>
-* <td>Writing an Apache module that generates X-subresource
- headers</td>
-* <td>Re-writing the extension in C++</td>
-* <td>Getting it to work with images and style sheets</td>
-* <td>Making it more robust in the face of strange cache settings (or,
- more generally, knowing when prefetching will make the user
- experience worse)</td>
-
-</tr>
-</table> \ No newline at end of file
diff --git a/chromium/docs/website/third_party/node/linux/node-linux-x64.tar.gz.sha1 b/chromium/docs/website/third_party/node/linux/node-linux-x64.tar.gz.sha1
deleted file mode 100644
index e99bd505fd9..00000000000
--- a/chromium/docs/website/third_party/node/linux/node-linux-x64.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b2e40ddbac04d05baafbb007f203c6663c9d4ca9
diff --git a/chromium/docs/website/third_party/node/mac/node-darwin-x64.tar.gz.sha1 b/chromium/docs/website/third_party/node/mac/node-darwin-x64.tar.gz.sha1
deleted file mode 100644
index aa467ef2593..00000000000
--- a/chromium/docs/website/third_party/node/mac/node-darwin-x64.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-17ba7216e09de1bffb9dc80b7ec617a1cee40330
diff --git a/chromium/docs/website/third_party/node/win/node.exe.sha1 b/chromium/docs/website/third_party/node/win/node.exe.sha1
deleted file mode 100644
index 90d390395b4..00000000000
--- a/chromium/docs/website/third_party/node/win/node.exe.sha1
+++ /dev/null
@@ -1 +0,0 @@
-58bca4fea5196d856e41f928c02f6d6af2421865
diff --git a/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.cc b/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.cc
index 677f609d3fd..055a909d599 100644
--- a/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.cc
+++ b/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.cc
@@ -66,7 +66,7 @@ void JavaScriptDialogHelper::RunJavaScriptDialog(
web_view_permission_helper->RequestPermission(
WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG, request_info,
base::BindOnce(&JavaScriptDialogHelper::OnPermissionResponse,
- base::Unretained(this), std::move(callback)),
+ weak_factory_.GetWeakPtr(), std::move(callback)),
false /* allowed_by_default */);
}
diff --git a/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.h b/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.h
index 53d49b7dc5c..ccd039d86d8 100644
--- a/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.h
+++ b/chromium/extensions/browser/guest_view/web_view/javascript_dialog_helper.h
@@ -6,6 +6,7 @@
#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_
#include "base/memory/raw_ptr.h"
+#include "base/memory/weak_ptr.h"
#include "content/public/browser/javascript_dialog_manager.h"
namespace extensions {
@@ -46,6 +47,8 @@ class JavaScriptDialogHelper : public content::JavaScriptDialogManager {
// Pointer to the webview that is being helped.
const raw_ptr<WebViewGuest> web_view_guest_;
+
+ base::WeakPtrFactory<JavaScriptDialogHelper> weak_factory_{this};
};
} // namespace extensions
diff --git a/chromium/extensions/browser/updater/update_data_provider.cc b/chromium/extensions/browser/updater/update_data_provider.cc
index 8436f5c79a9..4939beae70c 100644
--- a/chromium/extensions/browser/updater/update_data_provider.cc
+++ b/chromium/extensions/browser/updater/update_data_provider.cc
@@ -35,34 +35,17 @@ namespace {
using UpdateClientCallback = UpdateDataProvider::UpdateClientCallback;
-void InstallUpdateCallback(content::BrowserContext* context,
- const std::string& extension_id,
- const std::string& public_key,
- const base::FilePath& unpacked_dir,
- bool install_immediately,
- UpdateClientCallback update_client_callback) {
- // Note that error codes are converted into custom error codes, which are all
- // based on a constant (see ToInstallerResult). This means that custom codes
- // from different embedders may collide. However, for any given extension ID,
- // there should be only one embedder, so this should be OK from Omaha.
- ExtensionSystem::Get(context)->InstallUpdate(
- extension_id, public_key, unpacked_dir, install_immediately,
- base::BindOnce(
- [](UpdateClientCallback callback,
- const absl::optional<CrxInstallError>& error) {
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- update_client::CrxInstaller::Result result(0);
- if (error.has_value()) {
- int detail =
- error->type() ==
- CrxInstallErrorType::SANDBOXED_UNPACKER_FAILURE
- ? static_cast<int>(error->sandbox_failure_detail())
- : static_cast<int>(error->detail());
- result = update_client::ToInstallerResult(error->type(), detail);
- }
- std::move(callback).Run(result);
- },
- std::move(update_client_callback)));
+void PostErrorTasks(const base::FilePath& unpacked_dir,
+ UpdateClientCallback update_client_callback) {
+ base::ThreadPool::PostTask(
+ FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
+ base::BindOnce(base::GetDeletePathRecursivelyCallback(),
+ unpacked_dir));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
+ base::BindOnce(std::move(update_client_callback),
+ update_client::CrxInstaller::Result(
+ update_client::InstallError::GENERIC_ERROR)));
}
} // namespace
@@ -151,22 +134,52 @@ void UpdateDataProvider::RunInstallCallback(
<< public_key;
if (!browser_context_) {
- base::ThreadPool::PostTask(
- FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
- base::BindOnce(base::GetDeletePathRecursivelyCallback(), unpacked_dir));
- content::GetUIThreadTaskRunner({})->PostTask(
- FROM_HERE,
- base::BindOnce(std::move(update_client_callback),
- update_client::CrxInstaller::Result(
- update_client::InstallError::GENERIC_ERROR)));
+ PostErrorTasks(unpacked_dir, std::move(update_client_callback));
return;
}
content::GetUIThreadTaskRunner({})->PostTask(
FROM_HERE,
- base::BindOnce(InstallUpdateCallback, browser_context_, extension_id,
- public_key, unpacked_dir, install_immediately,
- std::move(update_client_callback)));
+ base::BindOnce(&UpdateDataProvider::InstallUpdateCallback, this,
+ extension_id, public_key, unpacked_dir,
+ install_immediately, std::move(update_client_callback)));
+}
+
+void UpdateDataProvider::InstallUpdateCallback(
+ const std::string& extension_id,
+ const std::string& public_key,
+ const base::FilePath& unpacked_dir,
+ bool install_immediately,
+ UpdateClientCallback update_client_callback) {
+ if (!browser_context_) {
+ PostErrorTasks(unpacked_dir, std::move(update_client_callback));
+ return;
+ }
+
+ // Note that error codes are converted into custom error codes, which are all
+ // based on a constant (see ToInstallerResult). This means that custom codes
+ // from different embedders may collide. However, for any given extension ID,
+ // there should be only one embedder, so this should be OK from Omaha.
+ ExtensionSystem::Get(browser_context_)
+ ->InstallUpdate(
+ extension_id, public_key, unpacked_dir, install_immediately,
+ base::BindOnce(
+ [](UpdateClientCallback callback,
+ const absl::optional<CrxInstallError>& error) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ update_client::CrxInstaller::Result result(0);
+ if (error.has_value()) {
+ int detail =
+ error->type() ==
+ CrxInstallErrorType::SANDBOXED_UNPACKER_FAILURE
+ ? static_cast<int>(error->sandbox_failure_detail())
+ : static_cast<int>(error->detail());
+ result =
+ update_client::ToInstallerResult(error->type(), detail);
+ }
+ std::move(callback).Run(result);
+ },
+ std::move(update_client_callback)));
}
} // namespace extensions
diff --git a/chromium/extensions/browser/updater/update_data_provider.h b/chromium/extensions/browser/updater/update_data_provider.h
index 5188bef88d8..c6efefd9969 100644
--- a/chromium/extensions/browser/updater/update_data_provider.h
+++ b/chromium/extensions/browser/updater/update_data_provider.h
@@ -67,6 +67,12 @@ class UpdateDataProvider : public base::RefCounted<UpdateDataProvider> {
bool install_immediately,
UpdateClientCallback update_client_callback);
+ void InstallUpdateCallback(const std::string& extension_id,
+ const std::string& public_key,
+ const base::FilePath& unpacked_dir,
+ bool install_immediately,
+ UpdateClientCallback update_client_callback);
+
raw_ptr<content::BrowserContext> browser_context_;
};
diff --git a/chromium/extensions/strings/extensions_strings_te.xtb b/chromium/extensions/strings/extensions_strings_te.xtb
index d77f9942ba0..906eb64d2ca 100644
--- a/chromium/extensions/strings/extensions_strings_te.xtb
+++ b/chromium/extensions/strings/extensions_strings_te.xtb
@@ -15,7 +15,7 @@
<translation id="2903070246402204397"><ph name="EXTENSION_NAME" /> (ఎక్స్‌టెన్ష‌న్‌ ID "<ph name="EXTENSION_ID" />") నిర్వాహకుల ద్వారా బ్లాక్ చేయబడింది. <ph name="ADMIN_INFO" /></translation>
<translation id="2988488679308982380">ప్యాకేజీని ఇన్‌స్టాల్ చేయడం సాధ్యపడలేదు: '<ph name="ERROR_CODE" />'</translation>
<translation id="3115238746683532089"><ph name="VENDOR_ID" /> విక్రేత నుండి తెలియని ఉత్పత్తి <ph name="PRODUCT_ID" /> (క్రమ సంఖ్య <ph name="SERIAL_NUMBER" />)</translation>
-<translation id="3144135466825225871">crx ఫైల్ భర్తీ విఫలమైంది. ఫైల్ వినియోగంలో ఉందా అని తనిఖీ చేయండి.</translation>
+<translation id="3144135466825225871">crx ఫైల్ భర్తీ విఫలమైంది. ఫైల్ వినియోగంలో ఉందా అని చెక్ చేయండి.</translation>
<translation id="3163201441334626963"><ph name="VENDOR_ID" /> నుండి <ph name="PRODUCT_ID" /> తెలియని ఉత్పత్తి</translation>
<translation id="3302709122321372472">కంటెంట్ స్క్రిప్ట్‌కు css '<ph name="RELATIVE_PATH" />'ను లోడ్ చేయడం సాధ్యపడలేదు.</translation>
<translation id="3369521687965833290">ఎక్స్‌టెన్షన్‌ను అన్‌ప్యాక్ చేయడం సాధ్యపడలేదు. ఒక ఎక్స్‌టెన్షన్‌‌ను సురక్షితంగా అన్‌ప్యాక్ చేయడానికి, మీ ప్రొఫైల్ డైరెక్టరీకి ఒక డ్రైవ్ అక్షరంతో ప్రారంభమయ్యే మరియు జంక్షన్, మౌంట్ పాయింట్ లేదా సింలింక్ ఉండని పాత్ తప్పనిసరిగా ఉండాలి. మీ ప్రొఫైల్‌కు అటువంటి పాత్ లేదు.</translation>
@@ -50,7 +50,7 @@
<translation id="6840444547062817500">ఈ ఎక్స్‌టెన్షన్‌ దానికదే చాలా తరచుగా రీలోడ్ అయ్యింది.</translation>
<translation id="7003844668372540529"><ph name="VENDOR_NAME" /> నుండి తెలియని ఉత్పత్తి <ph name="PRODUCT_ID" /></translation>
<translation id="7068383018033524534">మానిఫెస్ట్ ఫైల్ చెల్లదు</translation>
-<translation id="7217838517480956708">ఈ మెషిన్‌ యొక్క నిర్వాహకుడికి <ph name="EXTENSION_NAME" /> ఇన్‌స్టాల్ చేయబడి ఉండటం అవసరం. దీన్ని తీసివేయడం లేదా సవరించడం సాధ్యపడదు.</translation>
+<translation id="7217838517480956708">ఈ మెషిన్‌ యొక్క నిర్వాహకుడికి <ph name="EXTENSION_NAME" /> ఇన్‌స్టాల్ చేయబడి ఉండటం అవసరం. దీన్ని తీసివేయడం లేదా ఎడిట్ చేయడం సాధ్యపడదు.</translation>
<translation id="7612608473764576263">ప్రైవేట్ కీ కోసం ఇన్‌పుట్ విలువ తప్పనిసరిగా చెల్లుబాటు అయ్యే ఫార్మాట్‌లో ఉండాలి. (PKCS#8-ఫార్మాట్‌లో, PEM-ఎన్‌కోడ్ చేసిన RSA కీ)</translation>
<translation id="7939686037314084444">ఎక్స్‌టెన్షన్ సరిగా లోడ్ అవ్వడంలో విఫలం అయ్యింది. కనుక ఇది నెట్‌వర్క్ రిక్వెస్ట్‌లను అడ్డగించలేకపోవచ్చు.</translation>
<translation id="7972881773422714442">ఎంపికలు: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
diff --git a/chromium/gpu/command_buffer/service/dawn_service_memory_transfer_service.cc b/chromium/gpu/command_buffer/service/dawn_service_memory_transfer_service.cc
index 40a990ce6dc..579cd3cbdfc 100644
--- a/chromium/gpu/command_buffer/service/dawn_service_memory_transfer_service.cc
+++ b/chromium/gpu/command_buffer/service/dawn_service_memory_transfer_service.cc
@@ -30,7 +30,8 @@ class ReadHandleImpl
size_t offset,
size_t size,
void* serializePointer) override {
- DCHECK_LE(size + offset, size_);
+ DCHECK_LE(offset, size_);
+ DCHECK_LE(size, size_ - offset);
// Copy the data into the shared memory allocation.
// In the case of buffer mapping, this is the mapped GPU memory which we
// copy into client-visible shared memory.
@@ -57,10 +58,16 @@ class WriteHandleImpl
size_t size) override {
// Nothing is serialized because we're using shared memory.
DCHECK_EQ(deserialize_size, 0u);
- DCHECK_LE(size + offset, size_);
DCHECK(mTargetData);
DCHECK(ptr_);
+ if (offset > mDataLength || size > mDataLength - offset) {
+ return false;
+ }
+ if (offset > size_ || size > size_ - offset) {
+ return false;
+ }
+
// Copy from shared memory into the target buffer.
// mTargetData will always be the starting address
// of the backing buffer after the dawn side change.
diff --git a/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc b/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc
index 9762f5aeada..949d8fb4379 100644
--- a/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc
+++ b/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc
@@ -1650,7 +1650,6 @@ error::Error WebGPUDecoderImpl::HandleDawnCommands(
"WebGPUDecoderImpl::HandleDawnCommands", "bytes", size);
if (!wire_server_->HandleCommands(shm_commands, size)) {
- NOTREACHED();
return error::kLostContext;
}
diff --git a/chromium/gpu/config/gpu_lists_version.h b/chromium/gpu/config/gpu_lists_version.h
index e99019069a3..cdeacdb710f 100644
--- a/chromium/gpu/config/gpu_lists_version.h
+++ b/chromium/gpu/config/gpu_lists_version.h
@@ -3,6 +3,6 @@
#ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_
#define GPU_CONFIG_GPU_LISTS_VERSION_H_
-#define GPU_LISTS_VERSION "d40c1c345c6c905254498a9622b8cd89297dd0f2"
+#define GPU_LISTS_VERSION "3b4fa75faf59221ce4f363ea7574747b1b7322eb"
#endif // GPU_CONFIG_GPU_LISTS_VERSION_H_
diff --git a/chromium/headless/lib/browser/devtools_api/client_api_generator_unittest.py b/chromium/headless/lib/browser/devtools_api/client_api_generator_unittest.py
index 9e1ca656840..cd49df0209c 100755
--- a/chromium/headless/lib/browser/devtools_api/client_api_generator_unittest.py
+++ b/chromium/headless/lib/browser/devtools_api/client_api_generator_unittest.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -15,7 +15,7 @@ class ClientApiGeneratorTest(unittest.TestCase):
def test_ArgumentParsing(self):
with tempfile.NamedTemporaryFile() as f:
- f.write('{"foo": true}')
+ f.write(b'{"foo": true}')
f.flush()
json_api, output_dir = client_api_generator.ParseArguments([
'--protocol', f.name, '--output_dir', 'out'])
diff --git a/chromium/infra/config/generated/builders/ci/Android Release (Nexus 5X)/properties.json b/chromium/infra/config/generated/builders/ci/Android Release (Nexus 5X)/properties.json
deleted file mode 100644
index eee79ff9995..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android Release (Nexus 5X)/properties.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android Release (Nexus 5X)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android Release (Nexus 5X)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-marshmallow-arm64-rel",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.gpu",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android WebView M (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android WebView M (dbg)/properties.json
deleted file mode 100644
index 95f083404a7..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android WebView M (dbg)/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView M (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android WebView M (dbg)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android WebView N (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android WebView N (dbg)/properties.json
deleted file mode 100644
index fbfb5814c62..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android WebView N (dbg)/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView N (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android WebView N (dbg)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android WebView O (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android WebView O (dbg)/properties.json
deleted file mode 100644
index e6fbf13c819..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android WebView O (dbg)/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView O (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android WebView O (dbg)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android WebView P (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android WebView P (dbg)/properties.json
deleted file mode 100644
index da56ffe9107..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android WebView P (dbg)/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView P (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android WebView P (dbg)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android arm Builder (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android arm Builder (dbg)/properties.json
deleted file mode 100644
index 811913aaae0..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android arm Builder (dbg)/properties.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android arm Builder (dbg)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android_compile_dbg",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android arm64 Builder (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android arm64 Builder (dbg)/properties.json
deleted file mode 100644
index 05127cba9ef..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android arm64 Builder (dbg)/properties.json
+++ /dev/null
@@ -1,414 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView M (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView N (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView O (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android WebView P (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "apply_configs": [
- "remove_all_system_webviews"
- ],
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Marshmallow 64 bit Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_wpr_tests"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Nougat Phone Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Oreo Phone Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-pie-arm64-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Android WebView M (dbg)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Android WebView N (dbg)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Android WebView O (dbg)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Android WebView P (dbg)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Marshmallow 64 bit Tester",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Nougat Phone Tester",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Oreo Phone Tester",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "android-pie-arm64-dbg",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-oreo-arm64-dbg",
- "group": "tryserver.chromium.android"
- },
- {
- "builder": "android-pie-arm64-dbg",
- "group": "tryserver.chromium.android"
- },
- {
- "builder": "try-nougat-phone-tester",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android x64 Builder (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android x64 Builder (dbg)/properties.json
deleted file mode 100644
index 1d2bbad3592..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android x64 Builder (dbg)/properties.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android x64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x64_builder_mb"
- },
- "legacy_chromium_config": {
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android x64 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android_compile_x64_dbg",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Android x86 Builder (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Android x86 Builder (dbg)/properties.json
deleted file mode 100644
index d854fe10f91..00000000000
--- a/chromium/infra/config/generated/builders/ci/Android x86 Builder (dbg)/properties.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android x86 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder_mb"
- },
- "legacy_chromium_config": {
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android x86 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android_compile_x86_dbg",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Cast Android (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Cast Android (dbg)/properties.json
deleted file mode 100644
index 4e97d585f35..00000000000
--- a/chromium/infra/config/generated/builders/ci/Cast Android (dbg)/properties.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Cast Android (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "cast_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Cast Android (dbg)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "cast_shell_android",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Cast Linux Debug/properties.json b/chromium/infra/config/generated/builders/ci/Cast Linux Debug/properties.json
deleted file mode 100644
index 9702adcdec5..00000000000
--- a/chromium/infra/config/generated/builders/ci/Cast Linux Debug/properties.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Cast Linux Debug",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium_clang",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Cast Linux Debug",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "cast_shell_linux_dbg",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Cast Linux/properties.json b/chromium/infra/config/generated/builders/ci/Cast Linux/properties.json
deleted file mode 100644
index 5b7a1071a66..00000000000
--- a/chromium/infra/config/generated/builders/ci/Cast Linux/properties.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Cast Linux",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_clang",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Cast Linux",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "cast_shell_linux",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/properties.json b/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/properties.json
deleted file mode 100644
index 50e5862f9cd..00000000000
--- a/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/properties.json
+++ /dev/null
@@ -1,140 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "run_tests_serially": true
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (Intel HD 630)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "run_tests_serially": true
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (NVIDIA)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "run_tests_serially": true
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (Intel HD 630)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (NVIDIA)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "dawn-linux-x64-deps-rel",
- "group": "tryserver.chromium.dawn"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.dawn",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (Intel HD 630)/properties.json b/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (Intel HD 630)/properties.json
deleted file mode 100644
index 83a0d1ca3e1..00000000000
--- a/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (Intel HD 630)/properties.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "run_tests_serially": true
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (Intel HD 630)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "run_tests_serially": true
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (Intel HD 630)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "dawn-linux-x64-deps-rel",
- "group": "tryserver.chromium.dawn"
- }
- ]
- }
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.dawn",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (NVIDIA)/properties.json b/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (NVIDIA)/properties.json
deleted file mode 100644
index 3381dfa3759..00000000000
--- a/chromium/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (NVIDIA)/properties.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "run_tests_serially": true
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (NVIDIA)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "run_tests_serially": true
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (NVIDIA)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "dawn-linux-x64-deps-rel",
- "group": "tryserver.chromium.dawn"
- }
- ]
- }
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.dawn",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Fuchsia ARM64/properties.json b/chromium/infra/config/generated/builders/ci/Fuchsia ARM64/properties.json
deleted file mode 100644
index e4ccb44411b..00000000000
--- a/chromium/infra/config/generated/builders/ci/Fuchsia ARM64/properties.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Fuchsia ARM64",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_arm64",
- "fuchsia_arm64_host"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Fuchsia ARM64",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "fuchsia_arm64",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 500,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Fuchsia x64/properties.json b/chromium/infra/config/generated/builders/ci/Fuchsia x64/properties.json
deleted file mode 100644
index 4fd974939d9..00000000000
--- a/chromium/infra/config/generated/builders/ci/Fuchsia x64/properties.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Fuchsia x64",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_x64"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Fuchsia x64",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "fuchsia_x64",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 500,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/GPU Linux Builder/properties.json b/chromium/infra/config/generated/builders/ci/GPU Linux Builder/properties.json
deleted file mode 100644
index add43c7dc1d..00000000000
--- a/chromium/infra/config/generated/builders/ci/GPU Linux Builder/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-rel",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.gpu",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json b/chromium/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json
deleted file mode 100644
index d9a6fd92204..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json
+++ /dev/null
@@ -1,133 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan Tests (sandboxed)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Linux ASan Tests (sandboxed)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux_chromium_asan_rel_ng",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.memory",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux ASan LSan Tests (1)/properties.json b/chromium/infra/config/generated/builders/ci/Linux ASan LSan Tests (1)/properties.json
deleted file mode 100644
index bb1b0e17899..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux ASan LSan Tests (1)/properties.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux_chromium_asan_rel_ng",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 500,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.memory",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux ASan Tests (sandboxed)/properties.json b/chromium/infra/config/generated/builders/ci/Linux ASan Tests (sandboxed)/properties.json
deleted file mode 100644
index 79b4e957560..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux ASan Tests (sandboxed)/properties.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan Tests (sandboxed)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux ASan Tests (sandboxed)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 500,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.memory",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux Builder (Wayland)/properties.json b/chromium/infra/config/generated/builders/ci/Linux Builder (Wayland)/properties.json
deleted file mode 100644
index c121343ab1f..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux Builder (Wayland)/properties.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests (Wayland)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Tests (Wayland)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-wayland-rel",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux Builder (dbg)/properties.json b/chromium/infra/config/generated/builders/ci/Linux Builder (dbg)/properties.json
deleted file mode 100644
index d7b2cc8e860..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux Builder (dbg)/properties.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux_chromium_compile_dbg_ng",
- "group": "tryserver.chromium.linux"
- },
- {
- "builder": "linux_chromium_dbg_ng",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux Builder/properties.json b/chromium/infra/config/generated/builders/ci/Linux Builder/properties.json
deleted file mode 100644
index b56f748bbba..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux Builder/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-rel",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux Release (NVIDIA)/properties.json b/chromium/infra/config/generated/builders/ci/Linux Release (NVIDIA)/properties.json
deleted file mode 100644
index 286051c62ad..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux Release (NVIDIA)/properties.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-rel",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.gpu",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux TSan Builder/properties.json b/chromium/infra/config/generated/builders/ci/Linux TSan Builder/properties.json
deleted file mode 100644
index 5575333dc62..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux TSan Builder/properties.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux_chromium_tsan_rel_ng",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.memory",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux TSan Tests/properties.json b/chromium/infra/config/generated/builders/ci/Linux TSan Tests/properties.json
deleted file mode 100644
index 8e6d9928fe7..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux TSan Tests/properties.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux_chromium_tsan_rel_ng",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 80,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.memory",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux Tests (Wayland)/properties.json b/chromium/infra/config/generated/builders/ci/Linux Tests (Wayland)/properties.json
deleted file mode 100644
index ab41bde364d..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux Tests (Wayland)/properties.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests (Wayland)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Tests (Wayland)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-wayland-rel",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux Tests (dbg)(1)/properties.json b/chromium/infra/config/generated/builders/ci/Linux Tests (dbg)(1)/properties.json
deleted file mode 100644
index 5025b9008a4..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux Tests (dbg)(1)/properties.json
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux_chromium_compile_dbg_ng",
- "group": "tryserver.chromium.linux"
- },
- {
- "builder": "linux_chromium_dbg_ng",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Linux Tests/properties.json b/chromium/infra/config/generated/builders/ci/Linux Tests/properties.json
deleted file mode 100644
index e03ef2bae75..00000000000
--- a/chromium/infra/config/generated/builders/ci/Linux Tests/properties.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-rel",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Marshmallow 64 bit Tester/properties.json b/chromium/infra/config/generated/builders/ci/Marshmallow 64 bit Tester/properties.json
deleted file mode 100644
index ca0441d7716..00000000000
--- a/chromium/infra/config/generated/builders/ci/Marshmallow 64 bit Tester/properties.json
+++ /dev/null
@@ -1,103 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Marshmallow 64 bit Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_wpr_tests"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Marshmallow 64 bit Tester",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Nougat Phone Tester/properties.json b/chromium/infra/config/generated/builders/ci/Nougat Phone Tester/properties.json
deleted file mode 100644
index 074f32320c4..00000000000
--- a/chromium/infra/config/generated/builders/ci/Nougat Phone Tester/properties.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Nougat Phone Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Nougat Phone Tester",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "try-nougat-phone-tester",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/Oreo Phone Tester/properties.json b/chromium/infra/config/generated/builders/ci/Oreo Phone Tester/properties.json
deleted file mode 100644
index e5a565dc925..00000000000
--- a/chromium/infra/config/generated/builders/ci/Oreo Phone Tester/properties.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Oreo Phone Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Oreo Phone Tester",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-oreo-arm64-dbg",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/VR Linux/properties.json b/chromium/infra/config/generated/builders/ci/VR Linux/properties.json
deleted file mode 100644
index 864b005c9d4..00000000000
--- a/chromium/infra/config/generated/builders/ci/VR Linux/properties.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "VR Linux",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-fyi-archive",
- "builder_group": "chromium.fyi",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "legacy_test_results_config": {
- "config": "staging_server"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "VR Linux",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux_vr",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.fyi",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-cronet-arm-dbg/properties.json b/chromium/infra/config/generated/builders/ci/android-cronet-arm-dbg/properties.json
deleted file mode 100644
index b380e94c6de..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-cronet-arm-dbg/properties.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-arm-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-cronet-arm-dbg",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-cronet-arm-dbg",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-cronet-arm-rel/properties.json b/chromium/infra/config/generated/builders/ci/android-cronet-arm-rel/properties.json
deleted file mode 100644
index 4c1bee9eeb1..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-cronet-arm-rel/properties.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-arm-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-cronet-arm-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android_cronet",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg-10-tests/properties.json b/chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg-10-tests/properties.json
deleted file mode 100644
index e350d7af42b..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg-10-tests/properties.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg-10-tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg-10-tests",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-cronet-x86-dbg-10-tests",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg/properties.json b/chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg/properties.json
deleted file mode 100644
index bf2e0786303..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-cronet-x86-dbg/properties.json
+++ /dev/null
@@ -1,116 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg-10-tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg-10-tests",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-cronet-x86-dbg-10-tests",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json b/chromium/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json
deleted file mode 100644
index 8c26c3dec3b..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-marshmallow-arm64-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-marshmallow-arm64-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-marshmallow-arm64-rel",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-marshmallow-x86-rel/properties.json b/chromium/infra/config/generated/builders/ci/android-marshmallow-x86-rel/properties.json
deleted file mode 100644
index fba62ed9840..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-marshmallow-x86-rel/properties.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-marshmallow-x86-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_wpr_tests",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-marshmallow-x86-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-marshmallow-x86-rel",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-official/properties.json b/chromium/infra/config/generated/builders/ci/android-official/properties.json
deleted file mode 100644
index 008bb5084fa..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-official/properties.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-pie-arm64-dbg/properties.json b/chromium/infra/config/generated/builders/ci/android-pie-arm64-dbg/properties.json
deleted file mode 100644
index 1aa91704c36..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-pie-arm64-dbg/properties.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-pie-arm64-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-pie-arm64-dbg",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-pie-arm64-dbg",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/android-pie-arm64-rel/properties.json b/chromium/infra/config/generated/builders/ci/android-pie-arm64-rel/properties.json
deleted file mode 100644
index 19f2dfef8df..00000000000
--- a/chromium/infra/config/generated/builders/ci/android-pie-arm64-rel/properties.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-pie-arm64-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-pie-arm64-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "android-pie-arm64-rel",
- "group": "tryserver.chromium.android"
- }
- ]
- }
- },
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 500,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.android",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-dbg/properties.json b/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-dbg/properties.json
deleted file mode 100644
index a927b3b93f9..00000000000
--- a/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-dbg/properties.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "chromeos-amd64-generic-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64,
- "target_cros_boards": [
- "amd64-generic"
- ],
- "target_platform": "chromeos"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "chromeos-amd64-generic-dbg",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "chromeos-amd64-generic-dbg",
- "group": "tryserver.chromium.chromiumos"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-lacros-dbg/properties.json b/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-lacros-dbg/properties.json
deleted file mode 100644
index bd8df4ad2a2..00000000000
--- a/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-lacros-dbg/properties.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "chromeos-amd64-generic-lacros-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64,
- "target_cros_boards": [
- "amd64-generic"
- ],
- "target_platform": "chromeos"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "checkout_lacros_sdk",
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "chromeos-amd64-generic-lacros-dbg",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-rel/properties.json b/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-rel/properties.json
index 24d2d6254d9..cf22d19fbc5 100644
--- a/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-rel/properties.json
+++ b/chromium/infra/config/generated/builders/ci/chromeos-amd64-generic-rel/properties.json
@@ -65,8 +65,5 @@
]
},
"builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
+ "recipe": "chromium"
} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/chromeos-arm-generic-rel/properties.json b/chromium/infra/config/generated/builders/ci/chromeos-arm-generic-rel/properties.json
index 117ee879f9b..ac9be107499 100644
--- a/chromium/infra/config/generated/builders/ci/chromeos-arm-generic-rel/properties.json
+++ b/chromium/infra/config/generated/builders/ci/chromeos-arm-generic-rel/properties.json
@@ -64,8 +64,5 @@
]
},
"builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
+ "recipe": "chromium"
} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/chromeos-arm64-generic-rel/properties.json b/chromium/infra/config/generated/builders/ci/chromeos-arm64-generic-rel/properties.json
index a5eb4e93384..2f46b1037b3 100644
--- a/chromium/infra/config/generated/builders/ci/chromeos-arm64-generic-rel/properties.json
+++ b/chromium/infra/config/generated/builders/ci/chromeos-arm64-generic-rel/properties.json
@@ -64,8 +64,5 @@
]
},
"builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
+ "recipe": "chromium"
} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/chromeos-kevin-rel/properties.json b/chromium/infra/config/generated/builders/ci/chromeos-kevin-rel/properties.json
index 5f2c43c4fd6..ed3488360b7 100644
--- a/chromium/infra/config/generated/builders/ci/chromeos-kevin-rel/properties.json
+++ b/chromium/infra/config/generated/builders/ci/chromeos-kevin-rel/properties.json
@@ -66,8 +66,5 @@
]
},
"builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
+ "recipe": "chromium"
} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/fuchsia-arm64-cast/properties.json b/chromium/infra/config/generated/builders/ci/fuchsia-arm64-cast/properties.json
deleted file mode 100644
index 8bdf11fd3b3..00000000000
--- a/chromium/infra/config/generated/builders/ci/fuchsia-arm64-cast/properties.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "fuchsia-arm64-cast",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_arm64"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "fuchsia-arm64-cast",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "fuchsia-arm64-cast",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 500,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/fuchsia-official/properties.json b/chromium/infra/config/generated/builders/ci/fuchsia-official/properties.json
deleted file mode 100644
index de65243291e..00000000000
--- a/chromium/infra/config/generated/builders/ci/fuchsia-official/properties.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/fuchsia-x64-cast/properties.json b/chromium/infra/config/generated/builders/ci/fuchsia-x64-cast/properties.json
deleted file mode 100644
index 5f25727699b..00000000000
--- a/chromium/infra/config/generated/builders/ci/fuchsia-x64-cast/properties.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "fuchsia-x64-cast",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_x64"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "fuchsia-x64-cast",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "fuchsia-x64-cast",
- "group": "tryserver.chromium.linux"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 500,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.linux",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/ios-simulator-cronet/properties.json b/chromium/infra/config/generated/builders/ci/ios-simulator-cronet/properties.json
deleted file mode 100644
index ea978ed3025..00000000000
--- a/chromium/infra/config/generated/builders/ci/ios-simulator-cronet/properties.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "ios-simulator-cronet",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-fyi-archive",
- "builder_group": "chromium.fyi",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb",
- "mac_toolchain"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "ios"
- },
- "legacy_gclient_config": {
- "config": "ios"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "ios-simulator-cronet",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "ios-simulator-cronet",
- "group": "tryserver.chromium.mac"
- }
- ]
- }
- },
- "$build/goma": {
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.fyi",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ],
- "xcode_build_version": "13c100"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/ios-simulator-full-configs/properties.json b/chromium/infra/config/generated/builders/ci/ios-simulator-full-configs/properties.json
deleted file mode 100644
index 0fd5c540011..00000000000
--- a/chromium/infra/config/generated/builders/ci/ios-simulator-full-configs/properties.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "ios-simulator-full-configs",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-mac-archive",
- "builder_group": "chromium.mac",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb",
- "mac_toolchain"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "ios"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "ios"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "ios-simulator-full-configs",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "ios-simulator-full-configs",
- "group": "tryserver.chromium.mac"
- }
- ]
- }
- },
- "$build/goma": {
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.mac",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ],
- "xcode_build_version": "13c100"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/ios-simulator/properties.json b/chromium/infra/config/generated/builders/ci/ios-simulator/properties.json
deleted file mode 100644
index 0da7f33479c..00000000000
--- a/chromium/infra/config/generated/builders/ci/ios-simulator/properties.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "ios-simulator",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-mac-archive",
- "builder_group": "chromium.mac",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb",
- "mac_toolchain"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "ios"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "ios"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "ios-simulator",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "ios-simulator",
- "group": "tryserver.chromium.mac"
- }
- ]
- }
- },
- "$build/goma": {
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.mac",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ],
- "xcode_build_version": "13c100"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/lacros-amd64-generic-rel/properties.json b/chromium/infra/config/generated/builders/ci/lacros-amd64-generic-rel/properties.json
deleted file mode 100644
index 1a2665c001e..00000000000
--- a/chromium/infra/config/generated/builders/ci/lacros-amd64-generic-rel/properties.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "lacros-amd64-generic-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "cros_boards_with_qemu_images": [
- "amd64-generic"
- ],
- "target_arch": "intel",
- "target_bits": 64,
- "target_cros_boards": [
- "eve"
- ],
- "target_platform": "chromeos"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "checkout_lacros_sdk",
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "lacros-amd64-generic-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "lacros-amd64-generic-rel",
- "group": "tryserver.chromium.chromiumos"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/lacros-arm-generic-rel/properties.json b/chromium/infra/config/generated/builders/ci/lacros-arm-generic-rel/properties.json
deleted file mode 100644
index c169630544a..00000000000
--- a/chromium/infra/config/generated/builders/ci/lacros-arm-generic-rel/properties.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "lacros-arm-generic-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64,
- "target_cros_boards": [
- "arm-generic"
- ],
- "target_platform": "chromeos"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "checkout_lacros_sdk",
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "lacros-arm-generic-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "lacros-arm-generic-rel",
- "group": "tryserver.chromium.chromiumos"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json b/chromium/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json
deleted file mode 100644
index d1be765f7aa..00000000000
--- a/chromium/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.fyi",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/linux-chromeos-dbg/properties.json b/chromium/infra/config/generated/builders/ci/linux-chromeos-dbg/properties.json
deleted file mode 100644
index c9b1f3f8166..00000000000
--- a/chromium/infra/config/generated/builders/ci/linux-chromeos-dbg/properties.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-chromeos-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "linux-chromeos-dbg",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-chromeos-compile-dbg",
- "group": "tryserver.chromium.chromiumos"
- },
- {
- "builder": "linux-chromeos-dbg",
- "group": "tryserver.chromium.chromiumos"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/linux-chromeos-rel/properties.json b/chromium/infra/config/generated/builders/ci/linux-chromeos-rel/properties.json
index 48d85d5651c..14823e178a2 100644
--- a/chromium/infra/config/generated/builders/ci/linux-chromeos-rel/properties.json
+++ b/chromium/infra/config/generated/builders/ci/linux-chromeos-rel/properties.json
@@ -62,8 +62,5 @@
]
},
"builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
+ "recipe": "chromium"
} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/linux-lacros-builder-rel/properties.json b/chromium/infra/config/generated/builders/ci/linux-lacros-builder-rel/properties.json
deleted file mode 100644
index fa81ef43a0a..00000000000
--- a/chromium/infra/config/generated/builders/ci/linux-lacros-builder-rel/properties.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-lacros-tester-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "chromeos"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "linux-lacros-tester-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-lacros-rel",
- "group": "tryserver.chromium.chromiumos"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/linux-lacros-dbg/properties.json b/chromium/infra/config/generated/builders/ci/linux-lacros-dbg/properties.json
deleted file mode 100644
index c302e94085a..00000000000
--- a/chromium/infra/config/generated/builders/ci/linux-lacros-dbg/properties.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-lacros-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "linux-lacros-dbg",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/linux-lacros-tester-rel/properties.json b/chromium/infra/config/generated/builders/ci/linux-lacros-tester-rel/properties.json
deleted file mode 100644
index 51077a87739..00000000000
--- a/chromium/infra/config/generated/builders/ci/linux-lacros-tester-rel/properties.json
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-lacros-tester-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "chromeos"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "linux-lacros-tester-rel",
- "project": "chromium"
- }
- ],
- "mirroring_builder_group_and_names": [
- {
- "builder": "linux-lacros-rel",
- "group": "tryserver.chromium.chromiumos"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium.chromiumos",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/ci/linux-official/properties.json b/chromium/infra/config/generated/builders/ci/linux-official/properties.json
deleted file mode 100644
index 54f2a539fe2..00000000000
--- a/chromium/infra/config/generated/builders/ci/linux-official/properties.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "$build/reclient": {
- "instance": "rbe-chromium-trusted",
- "jobs": 250,
- "metrics_project": "chromium-reclient-metrics"
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "chromium",
- "recipe": "chromium",
- "sheriff_rotations": [
- "chrome_browser_release"
- ]
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-cronet-arm-dbg/properties.json b/chromium/infra/config/generated/builders/try/android-cronet-arm-dbg/properties.json
deleted file mode 100644
index 4f452e1e058..00000000000
--- a/chromium/infra/config/generated/builders/try/android-cronet-arm-dbg/properties.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-arm-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-cronet-arm-dbg",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-cronet-x86-dbg-10-tests/properties.json b/chromium/infra/config/generated/builders/try/android-cronet-x86-dbg-10-tests/properties.json
deleted file mode 100644
index 977dbcacf58..00000000000
--- a/chromium/infra/config/generated/builders/try/android-cronet-x86-dbg-10-tests/properties.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg-10-tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "android-cronet-x86-dbg-10-tests",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json b/chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json
deleted file mode 100644
index ac7d659ff48..00000000000
--- a/chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json
+++ /dev/null
@@ -1,113 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android Release (Nexus 5X)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-marshmallow-arm64-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android Release (Nexus 5X)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "android-marshmallow-arm64-rel",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/code_coverage": {
- "coverage_test_types": [
- "unit",
- "overall"
- ],
- "use_java_coverage": true
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 300,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "orchestrator": {
- "builder_group": "tryserver.chromium.android",
- "builder_name": "android-marshmallow-arm64-rel"
- },
- "recipe": "chromium/compilator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json b/chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json
deleted file mode 100644
index 46e62be432b..00000000000
--- a/chromium/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "$build/chromium_orchestrator": {
- "compilator": "android-marshmallow-arm64-rel-compilator",
- "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
- },
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android Release (Nexus 5X)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-marshmallow-arm64-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android Release (Nexus 5X)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "android-marshmallow-arm64-rel",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/code_coverage": {
- "coverage_test_types": [
- "unit",
- "overall"
- ],
- "use_java_coverage": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium/orchestrator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json b/chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json
deleted file mode 100644
index f13c7fc40e6..00000000000
--- a/chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-marshmallow-x86-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_wpr_tests",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-marshmallow-x86-rel",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/code_coverage": {
- "coverage_test_types": [
- "unit",
- "overall"
- ],
- "use_java_coverage": true
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 300,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "orchestrator": {
- "builder_group": "tryserver.chromium.android",
- "builder_name": "android-marshmallow-x86-rel"
- },
- "recipe": "chromium/compilator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel/properties.json b/chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel/properties.json
deleted file mode 100644
index 16ad27f329d..00000000000
--- a/chromium/infra/config/generated/builders/try/android-marshmallow-x86-rel/properties.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "$build/chromium_orchestrator": {
- "compilator": "android-marshmallow-x86-rel-compilator",
- "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
- },
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-marshmallow-x86-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_wpr_tests",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-marshmallow-x86-rel",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/code_coverage": {
- "coverage_test_types": [
- "unit",
- "overall"
- ],
- "use_java_coverage": true
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium/orchestrator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-official/properties.json b/chromium/infra/config/generated/builders/try/android-official/properties.json
deleted file mode 100644
index 3e59b9a098e..00000000000
--- a/chromium/infra/config/generated/builders/try/android-official/properties.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-oreo-arm64-dbg/properties.json b/chromium/infra/config/generated/builders/try/android-oreo-arm64-dbg/properties.json
deleted file mode 100644
index 36c1927dfae..00000000000
--- a/chromium/infra/config/generated/builders/try/android-oreo-arm64-dbg/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Oreo Phone Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Oreo Phone Tester",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-pie-arm64-dbg/properties.json b/chromium/infra/config/generated/builders/try/android-pie-arm64-dbg/properties.json
deleted file mode 100644
index f0e0dd03533..00000000000
--- a/chromium/infra/config/generated/builders/try/android-pie-arm64-dbg/properties.json
+++ /dev/null
@@ -1,109 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-pie-arm64-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "android-pie-arm64-dbg",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 300,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json b/chromium/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json
deleted file mode 100644
index 357fabada24..00000000000
--- a/chromium/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-pie-arm64-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-pie-arm64-rel",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 300,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "orchestrator": {
- "builder_group": "tryserver.chromium.android",
- "builder_name": "android-pie-arm64-rel"
- },
- "recipe": "chromium/compilator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android-pie-arm64-rel/properties.json b/chromium/infra/config/generated/builders/try/android-pie-arm64-rel/properties.json
deleted file mode 100644
index 3ae606b81f1..00000000000
--- a/chromium/infra/config/generated/builders/try/android-pie-arm64-rel/properties.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "$build/chromium_orchestrator": {
- "compilator": "android-pie-arm64-rel-compilator",
- "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
- },
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-pie-arm64-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-pie-arm64-rel",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium/orchestrator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android_compile_dbg/properties.json b/chromium/infra/config/generated/builders/try/android_compile_dbg/properties.json
deleted file mode 100644
index 97e02ae76ca..00000000000
--- a/chromium/infra/config/generated/builders/try/android_compile_dbg/properties.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android arm Builder (dbg)",
- "project": "chromium"
- }
- ],
- "is_compile_only": true
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android_compile_x64_dbg/properties.json b/chromium/infra/config/generated/builders/try/android_compile_x64_dbg/properties.json
deleted file mode 100644
index 5fd79a27a25..00000000000
--- a/chromium/infra/config/generated/builders/try/android_compile_x64_dbg/properties.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android x64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x64_builder_mb"
- },
- "legacy_chromium_config": {
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android x64 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "is_compile_only": true
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android_compile_x86_dbg/properties.json b/chromium/infra/config/generated/builders/try/android_compile_x86_dbg/properties.json
deleted file mode 100644
index 65aebb38abe..00000000000
--- a/chromium/infra/config/generated/builders/try/android_compile_x86_dbg/properties.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android x86 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "x86_builder_mb"
- },
- "legacy_chromium_config": {
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android x86 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "is_compile_only": true
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android_cronet/properties.json b/chromium/infra/config/generated/builders/try/android_cronet/properties.json
deleted file mode 100644
index 160fc425c26..00000000000
--- a/chromium/infra/config/generated/builders/try/android_cronet/properties.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "android-cronet-arm-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "cronet_builder",
- "mb"
- ],
- "build_config": "Release",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "android-cronet-arm-rel",
- "project": "chromium"
- }
- ],
- "is_compile_only": true
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/android_optional_gpu_tests_rel/properties.json b/chromium/infra/config/generated/builders/try/android_optional_gpu_tests_rel/properties.json
deleted file mode 100644
index 78f10bafb98..00000000000
--- a/chromium/infra/config/generated/builders/try/android_optional_gpu_tests_rel/properties.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "try",
- "builder": "android_optional_gpu_tests_rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-fyi-archive",
- "builder_group": "tryserver.chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder"
- },
- "legacy_chromium_config": {
- "config": "android",
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "try",
- "builder": "android_optional_gpu_tests_rel",
- "project": "chromium"
- }
- ],
- "retry_failed_shards": false
- }
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/cast_shell_android/properties.json b/chromium/infra/config/generated/builders/try/cast_shell_android/properties.json
deleted file mode 100644
index 89a424c07d9..00000000000
--- a/chromium/infra/config/generated/builders/try/cast_shell_android/properties.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Cast Android (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "cast_builder"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 32,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Cast Android (dbg)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/cast_shell_linux/properties.json b/chromium/infra/config/generated/builders/try/cast_shell_linux/properties.json
deleted file mode 100644
index c720bc02e23..00000000000
--- a/chromium/infra/config/generated/builders/try/cast_shell_linux/properties.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Cast Linux",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_clang",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Cast Linux",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/cast_shell_linux_dbg/properties.json b/chromium/infra/config/generated/builders/try/cast_shell_linux_dbg/properties.json
deleted file mode 100644
index 37d151089b9..00000000000
--- a/chromium/infra/config/generated/builders/try/cast_shell_linux_dbg/properties.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Cast Linux Debug",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium_clang",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Cast Linux Debug",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/chromeos-amd64-generic-dbg/properties.json b/chromium/infra/config/generated/builders/try/chromeos-amd64-generic-dbg/properties.json
deleted file mode 100644
index b04aa47bebb..00000000000
--- a/chromium/infra/config/generated/builders/try/chromeos-amd64-generic-dbg/properties.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "chromeos-amd64-generic-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64,
- "target_cros_boards": [
- "amd64-generic"
- ],
- "target_platform": "chromeos"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "chromeos-amd64-generic-dbg",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.chromiumos",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/chromeos-amd64-generic-lacros-dbg/properties.json b/chromium/infra/config/generated/builders/try/chromeos-amd64-generic-lacros-dbg/properties.json
deleted file mode 100644
index 4aada5e2c21..00000000000
--- a/chromium/infra/config/generated/builders/try/chromeos-amd64-generic-lacros-dbg/properties.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.chromiumos",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/properties.json b/chromium/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/properties.json
deleted file mode 100644
index 0c2800ef9ed..00000000000
--- a/chromium/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/properties.json
+++ /dev/null
@@ -1,132 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "run_tests_serially": true
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (Intel HD 630)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "run_tests_serially": true
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (NVIDIA)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-dawn-archive",
- "builder_group": "chromium.dawn",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "linux"
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- },
- "run_tests_serially": true
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (Intel HD 630)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Dawn Linux x64 DEPS Release (NVIDIA)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.dawn",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/fuchsia-arm64-cast/properties.json b/chromium/infra/config/generated/builders/try/fuchsia-arm64-cast/properties.json
deleted file mode 100644
index 9317a132b72..00000000000
--- a/chromium/infra/config/generated/builders/try/fuchsia-arm64-cast/properties.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "fuchsia-arm64-cast",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_arm64"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "fuchsia-arm64-cast",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/fuchsia-official/properties.json b/chromium/infra/config/generated/builders/try/fuchsia-official/properties.json
deleted file mode 100644
index 3e59b9a098e..00000000000
--- a/chromium/infra/config/generated/builders/try/fuchsia-official/properties.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/fuchsia-x64-cast/properties.json b/chromium/infra/config/generated/builders/try/fuchsia-x64-cast/properties.json
deleted file mode 100644
index be58a79c704..00000000000
--- a/chromium/infra/config/generated/builders/try/fuchsia-x64-cast/properties.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "fuchsia-x64-cast",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_x64"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "fuchsia-x64-cast",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/fuchsia_arm64/properties.json b/chromium/infra/config/generated/builders/try/fuchsia_arm64/properties.json
deleted file mode 100644
index 39eaa1c857a..00000000000
--- a/chromium/infra/config/generated/builders/try/fuchsia_arm64/properties.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Fuchsia ARM64",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_arm64",
- "fuchsia_arm64_host"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Fuchsia ARM64",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/fuchsia_x64/properties.json b/chromium/infra/config/generated/builders/try/fuchsia_x64/properties.json
deleted file mode 100644
index 958c2961090..00000000000
--- a/chromium/infra/config/generated/builders/try/fuchsia_x64/properties.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Fuchsia x64",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "fuchsia"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "fuchsia_x64"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Fuchsia x64",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/ios-simulator-cronet/properties.json b/chromium/infra/config/generated/builders/try/ios-simulator-cronet/properties.json
deleted file mode 100644
index 9491a02f767..00000000000
--- a/chromium/infra/config/generated/builders/try/ios-simulator-cronet/properties.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "ios-simulator-cronet",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-fyi-archive",
- "builder_group": "chromium.fyi",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb",
- "mac_toolchain"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "ios"
- },
- "legacy_gclient_config": {
- "config": "ios"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "ios-simulator-cronet",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.mac",
- "recipe": "chromium_trybot",
- "xcode_build_version": "13c100"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/ios-simulator-full-configs/properties.json b/chromium/infra/config/generated/builders/try/ios-simulator-full-configs/properties.json
deleted file mode 100644
index 0f09cc6cdca..00000000000
--- a/chromium/infra/config/generated/builders/try/ios-simulator-full-configs/properties.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "ios-simulator-full-configs",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-mac-archive",
- "builder_group": "chromium.mac",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb",
- "mac_toolchain"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "ios"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "ios"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "ios-simulator-full-configs",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/code_coverage": {
- "coverage_exclude_sources": "ios_test_files_and_test_utils",
- "coverage_test_types": [
- "overall",
- "unit"
- ],
- "use_clang_coverage": true
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.mac",
- "recipe": "chromium_trybot",
- "xcode_build_version": "13c100"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/ios-simulator/properties.json b/chromium/infra/config/generated/builders/try/ios-simulator/properties.json
deleted file mode 100644
index 5137f0962a3..00000000000
--- a/chromium/infra/config/generated/builders/try/ios-simulator/properties.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "ios-simulator",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-mac-archive",
- "builder_group": "chromium.mac",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb",
- "mac_toolchain"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64,
- "target_platform": "ios"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "ios"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "ios-simulator",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/code_coverage": {
- "coverage_exclude_sources": "ios_test_files_and_test_utils",
- "coverage_test_types": [
- "overall",
- "unit"
- ],
- "use_clang_coverage": true
- },
- "$build/flakiness": {
- "check_for_flakiness": true
- },
- "$build/goma": {
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.mac",
- "recipe": "chromium_trybot",
- "xcode_build_version": "13c100"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/lacros-amd64-generic-rel/properties.json b/chromium/infra/config/generated/builders/try/lacros-amd64-generic-rel/properties.json
deleted file mode 100644
index 587c0d51c37..00000000000
--- a/chromium/infra/config/generated/builders/try/lacros-amd64-generic-rel/properties.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "lacros-amd64-generic-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "cros_boards_with_qemu_images": [
- "amd64-generic"
- ],
- "target_arch": "intel",
- "target_bits": 64,
- "target_cros_boards": [
- "eve"
- ],
- "target_platform": "chromeos"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "checkout_lacros_sdk",
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "lacros-amd64-generic-rel",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.chromiumos",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/lacros-arm-generic-rel/properties.json b/chromium/infra/config/generated/builders/try/lacros-arm-generic-rel/properties.json
deleted file mode 100644
index 34c9ff25f91..00000000000
--- a/chromium/infra/config/generated/builders/try/lacros-arm-generic-rel/properties.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "lacros-arm-generic-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64,
- "target_cros_boards": [
- "arm-generic"
- ],
- "target_platform": "chromeos"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "checkout_lacros_sdk",
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "lacros-arm-generic-rel",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.chromiumos",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-blink-rel/properties.json b/chromium/infra/config/generated/builders/try/linux-blink-rel/properties.json
deleted file mode 100644
index 40a9ee4f964..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-blink-rel/properties.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "try",
- "builder": "linux-blink-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "builder_group": "tryserver.blink",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "try",
- "builder": "linux-blink-rel",
- "project": "chromium"
- }
- ],
- "retry_failed_shards": false
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.blink",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-chromeos-compile-dbg/properties.json b/chromium/infra/config/generated/builders/try/linux-chromeos-compile-dbg/properties.json
deleted file mode 100644
index d3d3044be31..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-chromeos-compile-dbg/properties.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-chromeos-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "linux-chromeos-dbg",
- "project": "chromium"
- }
- ],
- "is_compile_only": true
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.chromiumos",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-chromeos-dbg/properties.json b/chromium/infra/config/generated/builders/try/linux-chromeos-dbg/properties.json
deleted file mode 100644
index e36c9578e3b..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-chromeos-dbg/properties.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-chromeos-dbg",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "linux-chromeos-dbg",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.chromiumos",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-lacros-rel/properties.json b/chromium/infra/config/generated/builders/try/linux-lacros-rel/properties.json
deleted file mode 100644
index ba0cc7bbf38..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-lacros-rel/properties.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "chromeos"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "linux-lacros-tester-rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-chromiumos-archive",
- "builder_group": "chromium.chromiumos",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_arch": "intel",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "chromeos"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "linux-lacros-builder-rel",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "linux-lacros-tester-rel",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 300,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.chromiumos",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-official/properties.json b/chromium/infra/config/generated/builders/try/linux-official/properties.json
deleted file mode 100644
index 3e59b9a098e..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-official/properties.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-rel-compilator/properties.json b/chromium/infra/config/generated/builders/try/linux-rel-compilator/properties.json
deleted file mode 100644
index 09dfeb0aeb7..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-rel-compilator/properties.json
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/code_coverage": {
- "coverage_test_types": [
- "unit",
- "overall"
- ],
- "use_clang_coverage": true
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "orchestrator": {
- "builder_group": "tryserver.chromium.linux",
- "builder_name": "linux-rel"
- },
- "recipe": "chromium/compilator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-rel/properties.json b/chromium/infra/config/generated/builders/try/linux-rel/properties.json
deleted file mode 100644
index 534966ca68b..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-rel/properties.json
+++ /dev/null
@@ -1,173 +0,0 @@
-{
- "$build/chromium_orchestrator": {
- "compilator": "linux-rel-compilator",
- "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
- },
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-archive",
- "builder_group": "chromium.gpu",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "GPU Linux Builder",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Linux Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Release (NVIDIA)",
- "project": "chromium"
- },
- {
- "bucket": "ci",
- "builder": "Linux Tests",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/code_coverage": {
- "coverage_test_types": [
- "unit",
- "overall"
- ],
- "use_clang_coverage": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium/orchestrator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux-wayland-rel/properties.json b/chromium/infra/config/generated/builders/try/linux-wayland-rel/properties.json
deleted file mode 100644
index ac3b8a1406c..00000000000
--- a/chromium/infra/config/generated/builders/try/linux-wayland-rel/properties.json
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests (Wayland)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "use_clang_coverage",
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Builder (Wayland)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Tests (Wayland)",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json b/chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
deleted file mode 100644
index 2a6e3fb87bd..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "orchestrator": {
- "builder_group": "tryserver.chromium.linux",
- "builder_name": "linux_chromium_asan_rel_ng"
- },
- "recipe": "chromium/compilator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json b/chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json
deleted file mode 100644
index 9026f92c6a7..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "$build/chromium_orchestrator": {
- "compilator": "linux_chromium_asan_rel_ng-compilator",
- "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
- },
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "lsan",
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_asan",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux ASan LSan Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux ASan LSan Tests (1)",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium/orchestrator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json b/chromium/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json
deleted file mode 100644
index 06007c54892..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- }
- ],
- "is_compile_only": true
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_chromium_dbg_ng/properties.json b/chromium/infra/config/generated/builders/try/linux_chromium_dbg_ng/properties.json
deleted file mode 100644
index ab753f1e614..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_chromium_dbg_ng/properties.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-linux-archive",
- "builder_group": "chromium.linux",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Debug",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux Builder (dbg)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux Tests (dbg)(1)",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json b/chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json
deleted file mode 100644
index 442bfd53e50..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "jobs": 150,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "orchestrator": {
- "builder_group": "tryserver.chromium.linux",
- "builder_name": "linux_chromium_tsan_rel_ng"
- },
- "recipe": "chromium/compilator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/properties.json b/chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/properties.json
deleted file mode 100644
index 8ca01a178a7..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/properties.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "$build/chromium_orchestrator": {
- "compilator": "linux_chromium_tsan_rel_ng-compilator",
- "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
- },
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-memory-archive",
- "builder_group": "chromium.memory",
- "execution_mode": "TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium_tsan2",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Linux TSan Builder",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Linux TSan Tests",
- "project": "chromium"
- }
- ],
- "rts_config": {
- "condition": "QUICK_RUN_ONLY"
- }
- }
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium/orchestrator"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json b/chromium/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json
deleted file mode 100644
index 10a4a429277..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "try",
- "builder": "linux_layout_tests_layout_ng_disabled",
- "project": "chromium"
- },
- "builder_spec": {
- "builder_group": "tryserver.chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "config": "chromium"
- },
- "legacy_test_results_config": {
- "config": "staging_server"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "try",
- "builder": "linux_layout_tests_layout_ng_disabled",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_optional_gpu_tests_rel/properties.json b/chromium/infra/config/generated/builders/try/linux_optional_gpu_tests_rel/properties.json
deleted file mode 100644
index b74f27dcb1b..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_optional_gpu_tests_rel/properties.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "try",
- "builder": "linux_optional_gpu_tests_rel",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-gpu-fyi-archive",
- "builder_group": "tryserver.chromium.linux",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "angle_internal"
- ],
- "config": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "try",
- "builder": "linux_optional_gpu_tests_rel",
- "project": "chromium"
- }
- ],
- "retry_failed_shards": false
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/linux_vr/properties.json b/chromium/infra/config/generated/builders/try/linux_vr/properties.json
deleted file mode 100644
index f37f118d9e6..00000000000
--- a/chromium/infra/config/generated/builders/try/linux_vr/properties.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "VR Linux",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-fyi-archive",
- "builder_group": "chromium.fyi",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_chromium_config": {
- "apply_configs": [
- "mb"
- ],
- "build_config": "Release",
- "config": "chromium",
- "target_bits": 64
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "enable_reclient"
- ],
- "config": "chromium"
- },
- "legacy_test_results_config": {
- "config": "staging_server"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "VR Linux",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.linux",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/builders/try/try-nougat-phone-tester/properties.json b/chromium/infra/config/generated/builders/try/try-nougat-phone-tester/properties.json
deleted file mode 100644
index c3f0a1fd80a..00000000000
--- a/chromium/infra/config/generated/builders/try/try-nougat-phone-tester/properties.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "$build/chromium_tests_builder_config": {
- "builder_config": {
- "builder_db": {
- "entries": [
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "COMPILE_AND_TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android",
- "enable_reclient"
- ],
- "config": "chromium"
- }
- }
- },
- {
- "builder_id": {
- "bucket": "ci",
- "builder": "Nougat Phone Tester",
- "project": "chromium"
- },
- "builder_spec": {
- "build_gs_bucket": "chromium-android-archive",
- "builder_group": "chromium.android",
- "execution_mode": "TEST",
- "legacy_android_config": {
- "config": "main_builder_mb"
- },
- "legacy_chromium_config": {
- "apply_configs": [
- "download_vr_test_apks"
- ],
- "build_config": "Debug",
- "config": "android",
- "target_bits": 64,
- "target_platform": "android"
- },
- "legacy_gclient_config": {
- "apply_configs": [
- "android"
- ],
- "config": "chromium"
- },
- "parent": {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- }
- }
- ]
- },
- "builder_ids": [
- {
- "bucket": "ci",
- "builder": "Android arm64 Builder (dbg)",
- "project": "chromium"
- }
- ],
- "builder_ids_in_scope_for_testing": [
- {
- "bucket": "ci",
- "builder": "Nougat Phone Tester",
- "project": "chromium"
- }
- ]
- }
- },
- "$build/goma": {
- "enable_ats": true,
- "rpc_extra_params": "?prod",
- "server_host": "goma.chromium.org",
- "use_luci_auth": true
- },
- "$recipe_engine/resultdb/test_presentation": {
- "column_keys": [],
- "grouping_keys": [
- "status",
- "v.test_suite"
- ]
- },
- "builder_group": "tryserver.chromium.android",
- "recipe": "chromium_trybot"
-} \ No newline at end of file
diff --git a/chromium/infra/config/generated/cq-usage/default.cfg b/chromium/infra/config/generated/cq-usage/default.cfg
index d0fc3f236b4..69782be797e 100644
--- a/chromium/infra/config/generated/cq-usage/default.cfg
+++ b/chromium/infra/config/generated/cq-usage/default.cfg
@@ -16,30 +16,6 @@ config_groups {
verifiers {
tryjob {
builders {
- name: "chromium-m102/try/android-binary-size"
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-arm64-rel"
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-x86-rel"
- }
- builders {
- name: "chromium-m102/try/android-pie-arm64-rel"
- }
- builders {
- name: "chromium-m102/try/android_compile_dbg"
- }
- builders {
- name: "chromium-m102/try/android_cronet"
- }
- builders {
- name: "chromium-m102/try/cast_shell_android"
- }
- builders {
- name: "chromium-m102/try/cast_shell_linux"
- }
- builders {
name: "chromium-m102/try/chromeos-amd64-generic-rel"
}
builders {
@@ -50,51 +26,9 @@ config_groups {
disable_reuse: true
}
builders {
- name: "chromium-m102/try/fuchsia-x64-cast"
- }
- builders {
- name: "chromium-m102/try/fuchsia_arm64"
- }
- builders {
- name: "chromium-m102/try/fuchsia_x64"
- }
- builders {
- name: "chromium-m102/try/ios-simulator"
- }
- builders {
- name: "chromium-m102/try/lacros-amd64-generic-rel"
- }
- builders {
- name: "chromium-m102/try/lacros-arm-generic-rel"
- }
- builders {
- name: "chromium-m102/try/linux-chromeos-compile-dbg"
- }
- builders {
name: "chromium-m102/try/linux-chromeos-rel"
}
builders {
- name: "chromium-m102/try/linux-lacros-rel"
- }
- builders {
- name: "chromium-m102/try/linux-libfuzzer-asan-rel"
- }
- builders {
- name: "chromium-m102/try/linux-rel"
- }
- builders {
- name: "chromium-m102/try/linux-wayland-rel"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_asan_rel_ng"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_compile_dbg_ng"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_tsan_rel_ng"
- }
- builders {
name: "chromium-m102/try/mac-rel"
}
builders {
diff --git a/chromium/infra/config/generated/cq-usage/full.cfg b/chromium/infra/config/generated/cq-usage/full.cfg
index 71b16347855..52090268a0d 100644
--- a/chromium/infra/config/generated/cq-usage/full.cfg
+++ b/chromium/infra/config/generated/cq-usage/full.cfg
@@ -16,155 +16,6 @@ config_groups {
verifiers {
tryjob {
builders {
- name: "chromium-m102/try/android-binary-size"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-cronet-arm-dbg"
- location_regexp: ".+/[+]/components/cronet/.+"
- location_regexp: ".+/[+]/components/grpc_support/.+"
- location_regexp: ".+/[+]/build/android/.+"
- location_regexp: ".+/[+]/build/config/android/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- location_regexp_exclude: ".+/[+]/components/cronet/ios/.+"
- }
- builders {
- name: "chromium-m102/try/android-cronet-x86-dbg-10-tests"
- location_regexp: ".+/[+]/components/cronet/.+"
- location_regexp: ".+/[+]/components/grpc_support/.+"
- location_regexp: ".+/[+]/build/android/.+"
- location_regexp: ".+/[+]/build/config/android/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- location_regexp_exclude: ".+/[+]/components/cronet/ios/.+"
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-arm64-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-x86-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-pie-arm64-dbg"
- location_regexp: ".+/[+]/chrome/android/features/vr/.+"
- location_regexp: ".+/[+]/chrome/android/java/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/android/javatests/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/android/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/device/vr/android/.+"
- location_regexp: ".+/[+]/third_party/gvr-android-sdk/.+"
- location_regexp: ".+/[+]/third_party/arcore-android-sdk/.+"
- location_regexp: ".+/[+]/third_party/arcore-android-sdk-client/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-pie-arm64-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_compile_dbg"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_compile_x64_dbg"
- location_regexp: ".+/[+]/chrome/android/java/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf-helpers/.+"
- location_regexp: ".+/[+]/sandbox/linux/system_headers/.+"
- location_regexp: ".+/[+]/sandbox/linux/tests/.+"
- location_regexp: ".+/[+]/third_party/gvr-android-sdk/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_compile_x86_dbg"
- location_regexp: ".+/[+]/chrome/android/java/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf-helpers/.+"
- location_regexp: ".+/[+]/sandbox/linux/system_headers/.+"
- location_regexp: ".+/[+]/sandbox/linux/tests/.+"
- location_regexp: ".+/[+]/third_party/gvr-android-sdk/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_cronet"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_optional_gpu_tests_rel"
- location_regexp: ".+/[+]/cc/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/components/viz/.+"
- location_regexp: ".+/[+]/content/test/gpu/.+"
- location_regexp: ".+/[+]/gpu/.+"
- location_regexp: ".+/[+]/media/audio/.+"
- location_regexp: ".+/[+]/media/base/.+"
- location_regexp: ".+/[+]/media/capture/.+"
- location_regexp: ".+/[+]/media/filters/.+"
- location_regexp: ".+/[+]/media/gpu/.+"
- location_regexp: ".+/[+]/media/mojo/.+"
- location_regexp: ".+/[+]/media/renderers/.+"
- location_regexp: ".+/[+]/media/video/.+"
- location_regexp: ".+/[+]/services/viz/.+"
- location_regexp: ".+/[+]/testing/trigger_scripts/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/mediastream/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webcodecs/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webgl/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/gpu/.+"
- location_regexp: ".+/[+]/tools/clang/scripts/update.py"
- location_regexp: ".+/[+]/ui/gl/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/cast_shell_android"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/cast_shell_linux"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/cast_shell_linux_dbg"
- location_regexp: ".+/[+]/chromecast/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/chromeos-amd64-generic-dbg"
- location_regexp: ".+/[+]/content/gpu/.+"
- location_regexp: ".+/[+]/media/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
name: "chromium-m102/try/chromeos-amd64-generic-rel"
location_regexp: ".*"
location_regexp_exclude: ".+/[+]/docs/.+"
@@ -189,22 +40,6 @@ config_groups {
disable_reuse: true
}
builders {
- name: "chromium-m102/try/dawn-linux-x64-deps-rel"
- location_regexp: ".+/[+]/content/test/gpu/.+"
- location_regexp: ".+/[+]/gpu/.+"
- location_regexp: ".+/[+]/testing/buildbot/chromium.dawn.json"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webgpu/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/external/wpt/webgpu/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/wpt_internal/webgpu/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/WebGPUExpectations"
- location_regexp: ".+/[+]/third_party/dawn/.+"
- location_regexp: ".+/[+]/third_party/webgpu-cts/.+"
- location_regexp: ".+/[+]/tools/clang/scripts/update.py"
- location_regexp: ".+/[+]/ui/gl/features.gni"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
name: "chromium-m102/try/dawn-mac-x64-deps-rel"
location_regexp: ".+/[+]/content/test/gpu/.+"
location_regexp: ".+/[+]/gpu/.+"
@@ -253,176 +88,12 @@ config_groups {
location_regexp_exclude: ".+/[+]/infra/config/.+"
}
builders {
- name: "chromium-m102/try/fuchsia-arm64-cast"
- location_regexp: ".+/[+]/chromecast/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/fuchsia-x64-cast"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/fuchsia_arm64"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/fuchsia_x64"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/ios-simulator"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/ios-simulator-cronet"
- location_regexp: ".+/[+]/components/cronet/.+"
- location_regexp: ".+/[+]/components/grpc_support/.+"
- location_regexp: ".+/[+]/ios/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- location_regexp_exclude: ".+/[+]/components/cronet/android/.+"
- }
- builders {
- name: "chromium-m102/try/ios-simulator-full-configs"
- location_regexp: ".+/[+]/ios/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/lacros-amd64-generic-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/lacros-arm-generic-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-blink-rel"
- location_regexp: ".+/[+]/cc/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/paint/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/svg/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-chromeos-compile-dbg"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
name: "chromium-m102/try/linux-chromeos-rel"
location_regexp: ".*"
location_regexp_exclude: ".+/[+]/docs/.+"
location_regexp_exclude: ".+/[+]/infra/config/.+"
}
builders {
- name: "chromium-m102/try/linux-lacros-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-libfuzzer-asan-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-wayland-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_asan_rel_ng"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_compile_dbg_ng"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_dbg_ng"
- location_regexp: ".+/[+]/build/.*check_gn_headers.*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_tsan_rel_ng"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_layout_tests_layout_ng_disabled"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/editing/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/layout/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/paint/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/svg/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/fonts/shaping/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_optional_gpu_tests_rel"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/content/test/gpu/.+"
- location_regexp: ".+/[+]/gpu/.+"
- location_regexp: ".+/[+]/media/audio/.+"
- location_regexp: ".+/[+]/media/base/.+"
- location_regexp: ".+/[+]/media/capture/.+"
- location_regexp: ".+/[+]/media/filters/.+"
- location_regexp: ".+/[+]/media/gpu/.+"
- location_regexp: ".+/[+]/media/mojo/.+"
- location_regexp: ".+/[+]/media/renderers/.+"
- location_regexp: ".+/[+]/media/video/.+"
- location_regexp: ".+/[+]/testing/buildbot/chromium.gpu.fyi.json"
- location_regexp: ".+/[+]/testing/trigger_scripts/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/mediastream/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webcodecs/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webgl/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/gpu/.+"
- location_regexp: ".+/[+]/tools/clang/scripts/update.py"
- location_regexp: ".+/[+]/ui/gl/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_vr"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
name: "chromium-m102/try/mac-rel"
location_regexp: ".*"
location_regexp_exclude: ".+/[+]/docs/.+"
diff --git a/chromium/infra/config/generated/luci/commit-queue.cfg b/chromium/infra/config/generated/luci/commit-queue.cfg
index d3025f807e6..10eb9e3e7f6 100644
--- a/chromium/infra/config/generated/luci/commit-queue.cfg
+++ b/chromium/infra/config/generated/luci/commit-queue.cfg
@@ -27,36 +27,6 @@ config_groups {
}
tryjob {
builders {
- name: "chrome-m102/try/lacros-amd64-generic-chrome-skylab"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
- name: "chrome-m102/try/linux-chrome"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
- name: "chrome-m102/try/linux-chrome-stable"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
- name: "chrome-m102/try/linux-pgo"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
- name: "chrome-m102/try/mac-arm-pgo"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
name: "chrome-m102/try/mac-chrome"
includable_only: true
owner_whitelist_group: "googlers"
@@ -69,12 +39,6 @@ config_groups {
owner_whitelist_group: "project-chromium-robot-committers"
}
builders {
- name: "chrome-m102/try/mac-pgo"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
name: "chrome-m102/try/win-chrome"
includable_only: true
owner_whitelist_group: "googlers"
@@ -87,12 +51,6 @@ config_groups {
owner_whitelist_group: "project-chromium-robot-committers"
}
builders {
- name: "chrome-m102/try/win32-pgo"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
name: "chrome-m102/try/win64-chrome"
includable_only: true
owner_whitelist_group: "googlers"
@@ -105,185 +63,6 @@ config_groups {
owner_whitelist_group: "project-chromium-robot-committers"
}
builders {
- name: "chrome-m102/try/win64-pgo"
- includable_only: true
- owner_whitelist_group: "googlers"
- owner_whitelist_group: "project-chromium-robot-committers"
- }
- builders {
- name: "chromium-m102/try/android-binary-size"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-cronet-arm-dbg"
- location_regexp: ".+/[+]/components/cronet/.+"
- location_regexp: ".+/[+]/components/grpc_support/.+"
- location_regexp: ".+/[+]/build/android/.+"
- location_regexp: ".+/[+]/build/config/android/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- location_regexp_exclude: ".+/[+]/components/cronet/ios/.+"
- }
- builders {
- name: "chromium-m102/try/android-cronet-x86-dbg-10-tests"
- location_regexp: ".+/[+]/components/cronet/.+"
- location_regexp: ".+/[+]/components/grpc_support/.+"
- location_regexp: ".+/[+]/build/android/.+"
- location_regexp: ".+/[+]/build/config/android/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- location_regexp_exclude: ".+/[+]/components/cronet/ios/.+"
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-arm64-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-arm64-rel-compilator"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-x86-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-marshmallow-x86-rel-compilator"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/android-official"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/android-oreo-arm64-dbg"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/android-pie-arm64-dbg"
- location_regexp: ".+/[+]/chrome/android/features/vr/.+"
- location_regexp: ".+/[+]/chrome/android/java/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/android/javatests/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/android/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/device/vr/android/.+"
- location_regexp: ".+/[+]/third_party/gvr-android-sdk/.+"
- location_regexp: ".+/[+]/third_party/arcore-android-sdk/.+"
- location_regexp: ".+/[+]/third_party/arcore-android-sdk-client/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-pie-arm64-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android-pie-arm64-rel-compilator"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/android_compile_dbg"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_compile_x64_dbg"
- location_regexp: ".+/[+]/chrome/android/java/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf-helpers/.+"
- location_regexp: ".+/[+]/sandbox/linux/system_headers/.+"
- location_regexp: ".+/[+]/sandbox/linux/tests/.+"
- location_regexp: ".+/[+]/third_party/gvr-android-sdk/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_compile_x86_dbg"
- location_regexp: ".+/[+]/chrome/android/java/src/org/chromium/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf/.+"
- location_regexp: ".+/[+]/sandbox/linux/seccomp-bpf-helpers/.+"
- location_regexp: ".+/[+]/sandbox/linux/system_headers/.+"
- location_regexp: ".+/[+]/sandbox/linux/tests/.+"
- location_regexp: ".+/[+]/third_party/gvr-android-sdk/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_cronet"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/android_optional_gpu_tests_rel"
- location_regexp: ".+/[+]/cc/.+"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/components/viz/.+"
- location_regexp: ".+/[+]/content/test/gpu/.+"
- location_regexp: ".+/[+]/gpu/.+"
- location_regexp: ".+/[+]/media/audio/.+"
- location_regexp: ".+/[+]/media/base/.+"
- location_regexp: ".+/[+]/media/capture/.+"
- location_regexp: ".+/[+]/media/filters/.+"
- location_regexp: ".+/[+]/media/gpu/.+"
- location_regexp: ".+/[+]/media/mojo/.+"
- location_regexp: ".+/[+]/media/renderers/.+"
- location_regexp: ".+/[+]/media/video/.+"
- location_regexp: ".+/[+]/services/viz/.+"
- location_regexp: ".+/[+]/testing/trigger_scripts/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/mediastream/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webcodecs/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webgl/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/gpu/.+"
- location_regexp: ".+/[+]/tools/clang/scripts/update.py"
- location_regexp: ".+/[+]/ui/gl/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/cast_shell_android"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/cast_shell_linux"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/cast_shell_linux_dbg"
- location_regexp: ".+/[+]/chromecast/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/chromeos-amd64-generic-dbg"
- location_regexp: ".+/[+]/content/gpu/.+"
- location_regexp: ".+/[+]/media/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/chromeos-amd64-generic-lacros-dbg"
- includable_only: true
- }
- builders {
name: "chromium-m102/try/chromeos-amd64-generic-rel"
location_regexp: ".*"
location_regexp_exclude: ".+/[+]/docs/.+"
@@ -316,22 +95,6 @@ config_groups {
disable_reuse: true
}
builders {
- name: "chromium-m102/try/dawn-linux-x64-deps-rel"
- location_regexp: ".+/[+]/content/test/gpu/.+"
- location_regexp: ".+/[+]/gpu/.+"
- location_regexp: ".+/[+]/testing/buildbot/chromium.dawn.json"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webgpu/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/external/wpt/webgpu/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/wpt_internal/webgpu/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/WebGPUExpectations"
- location_regexp: ".+/[+]/third_party/dawn/.+"
- location_regexp: ".+/[+]/third_party/webgpu-cts/.+"
- location_regexp: ".+/[+]/tools/clang/scripts/update.py"
- location_regexp: ".+/[+]/ui/gl/features.gni"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
name: "chromium-m102/try/dawn-mac-x64-deps-rel"
location_regexp: ".+/[+]/content/test/gpu/.+"
location_regexp: ".+/[+]/gpu/.+"
@@ -380,93 +143,6 @@ config_groups {
location_regexp_exclude: ".+/[+]/infra/config/.+"
}
builders {
- name: "chromium-m102/try/fuchsia-arm64-cast"
- location_regexp: ".+/[+]/chromecast/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/fuchsia-binary-size"
- experiment_percentage: 20
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/fuchsia-official"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/fuchsia-x64-cast"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/fuchsia_arm64"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/fuchsia_x64"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/ios-simulator"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/ios-simulator-cronet"
- location_regexp: ".+/[+]/components/cronet/.+"
- location_regexp: ".+/[+]/components/grpc_support/.+"
- location_regexp: ".+/[+]/ios/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- location_regexp_exclude: ".+/[+]/components/cronet/android/.+"
- }
- builders {
- name: "chromium-m102/try/ios-simulator-full-configs"
- location_regexp: ".+/[+]/ios/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/lacros-amd64-generic-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/lacros-arm-generic-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-blink-rel"
- location_regexp: ".+/[+]/cc/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/paint/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/svg/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-chromeos-compile-dbg"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-chromeos-dbg"
- includable_only: true
- }
- builders {
name: "chromium-m102/try/linux-chromeos-rel"
location_regexp: ".*"
location_regexp_exclude: ".+/[+]/docs/.+"
@@ -477,114 +153,6 @@ config_groups {
includable_only: true
}
builders {
- name: "chromium-m102/try/linux-lacros-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-libfuzzer-asan-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-official"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/linux-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux-rel-compilator"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/linux-wayland-rel"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_asan_rel_ng"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_asan_rel_ng-compilator"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/linux_chromium_compile_dbg_ng"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_dbg_ng"
- location_regexp: ".+/[+]/build/.*check_gn_headers.*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_tsan_rel_ng"
- location_regexp: ".*"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_chromium_tsan_rel_ng-compilator"
- includable_only: true
- }
- builders {
- name: "chromium-m102/try/linux_layout_tests_layout_ng_disabled"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/editing/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/layout/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/paint/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/core/svg/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/fonts/shaping/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/.+"
- location_regexp: ".+/[+]/third_party/blink/web_tests/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_optional_gpu_tests_rel"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp: ".+/[+]/content/test/gpu/.+"
- location_regexp: ".+/[+]/gpu/.+"
- location_regexp: ".+/[+]/media/audio/.+"
- location_regexp: ".+/[+]/media/base/.+"
- location_regexp: ".+/[+]/media/capture/.+"
- location_regexp: ".+/[+]/media/filters/.+"
- location_regexp: ".+/[+]/media/gpu/.+"
- location_regexp: ".+/[+]/media/mojo/.+"
- location_regexp: ".+/[+]/media/renderers/.+"
- location_regexp: ".+/[+]/media/video/.+"
- location_regexp: ".+/[+]/testing/buildbot/chromium.gpu.fyi.json"
- location_regexp: ".+/[+]/testing/trigger_scripts/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/mediastream/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webcodecs/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/modules/webgl/.+"
- location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/gpu/.+"
- location_regexp: ".+/[+]/tools/clang/scripts/update.py"
- location_regexp: ".+/[+]/ui/gl/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
- name: "chromium-m102/try/linux_vr"
- location_regexp: ".+/[+]/chrome/browser/vr/.+"
- location_regexp: ".+/[+]/content/browser/xr/.+"
- location_regexp_exclude: ".+/[+]/docs/.+"
- location_regexp_exclude: ".+/[+]/infra/config/.+"
- }
- builders {
name: "chromium-m102/try/mac-official"
includable_only: true
}
@@ -631,10 +199,6 @@ config_groups {
location_regexp_exclude: ".+/[+]/infra/config/.+"
}
builders {
- name: "chromium-m102/try/try-nougat-phone-tester"
- includable_only: true
- }
- builders {
name: "chromium-m102/try/win-libfuzzer-asan-rel"
location_regexp: ".*"
location_regexp_exclude: ".+/[+]/docs/.+"
diff --git a/chromium/infra/config/generated/luci/cr-buildbucket.cfg b/chromium/infra/config/generated/luci/cr-buildbucket.cfg
index 3e6522e93ca..d23ec4fe72b 100644
--- a/chromium/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/chromium/infra/config/generated/luci/cr-buildbucket.cfg
@@ -23,1251 +23,6 @@ buckets {
}
swarming {
builders {
- name: "Android Release (Nexus 5X)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.gpu.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android Release (Nexus 5X)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.gpu",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android WebView M (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android WebView M (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android WebView N (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android WebView N (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android WebView O (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android WebView O (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android WebView P (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android WebView P (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android arm Builder (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android arm Builder (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 14400
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android arm64 Builder (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android arm64 Builder (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 25200
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android x64 Builder (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android x64 Builder (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 25200
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Android x86 Builder (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Android x86 Builder (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 21600
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Cast Android (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Cast Android (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Cast Linux"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Cast Linux/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Cast Linux Debug"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Cast Linux Debug/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Dawn Linux x64 DEPS Builder"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.gpu.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.dawn",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Dawn Linux x64 DEPS Release (Intel HD 630)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:2"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.gpu.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (Intel HD 630)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.dawn",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Dawn Linux x64 DEPS Release (NVIDIA)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:2"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.gpu.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release (NVIDIA)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.dawn",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "Dawn Mac x64 DEPS Builder"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builderless:1"
@@ -2013,255 +768,6 @@ buckets {
}
}
builders {
- name: "Fuchsia ARM64"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Fuchsia ARM64/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Fuchsia x64"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Fuchsia x64/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "GPU Linux Builder"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.gpu.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/GPU Linux Builder/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.gpu",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "GPU Mac Builder"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builderless:1"
@@ -2426,1012 +932,6 @@ buckets {
}
}
builders {
- name: "Linux ASan LSan Builder"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux ASan LSan Builder/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.memory",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux ASan LSan Tests (1)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux ASan LSan Tests (1)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.memory",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux ASan Tests (sandboxed)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux ASan Tests (sandboxed)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.memory",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux Builder"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux Builder/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux Builder (Wayland)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux Builder (Wayland)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux Builder (dbg)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux Builder (dbg)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux Release (NVIDIA)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:2"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.gpu.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux Release (NVIDIA)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.gpu",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux TSan Builder"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux TSan Builder/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.memory",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux TSan Tests"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux TSan Tests/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.memory",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux Tests"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux Tests/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_text_artifacts"
- text_artifacts {
- predicate {
- content_type_regexp: "snippet"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux Tests (Wayland)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux Tests (Wayland)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Linux Tests (dbg)(1)"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Linux Tests (dbg)(1)/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "Mac Builder"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builder:Mac Builder"
@@ -4339,338 +1839,6 @@ buckets {
}
}
builders {
- name: "Marshmallow 64 bit Tester"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Marshmallow 64 bit Tester/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Nougat Phone Tester"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Nougat Phone Tester/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "Oreo Phone Tester"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/Oreo Phone Tester/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "VR Linux"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/VR Linux/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.fyi",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 36000
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "Win 7 Tests x64 (1)"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builderless:1"
@@ -5244,917 +2412,6 @@ buckets {
}
}
builders {
- name: "android-cronet-arm-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-cronet-arm-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-cronet-arm-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-cronet-arm-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-cronet-x86-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-cronet-x86-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-cronet-x86-dbg-10-tests"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-cronet-x86-dbg-10-tests/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-marshmallow-arm64-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 14400
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-marshmallow-x86-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-marshmallow-x86-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-official"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:android-official"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-official/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 25200
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-pie-arm64-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-pie-arm64-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-pie-arm64-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/android-pie-arm64-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 14400
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "chromeos-amd64-generic-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/chromeos-amd64-generic-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "chromeos-amd64-generic-lacros-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/chromeos-amd64-generic-lacros-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "chromeos-amd64-generic-rel"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builderless:1"
@@ -6192,10 +2449,7 @@ buckets {
' },'
' "builder_group": "chromium.chromiumos",'
' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
+ ' "recipe": "chromium"'
'}'
execution_timeout_secs: 10800
build_numbers: YES
@@ -6275,10 +2529,7 @@ buckets {
' },'
' "builder_group": "chromium.chromiumos",'
' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
+ ' "recipe": "chromium"'
'}'
execution_timeout_secs: 10800
build_numbers: YES
@@ -6358,10 +2609,7 @@ buckets {
' },'
' "builder_group": "chromium.chromiumos",'
' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
+ ' "recipe": "chromium"'
'}'
execution_timeout_secs: 10800
build_numbers: YES
@@ -6441,841 +2689,7 @@ buckets {
' },'
' "builder_group": "chromium.chromiumos",'
' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia-arm64-cast"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/fuchsia-arm64-cast/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia-official"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:fuchsia-official"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/fuchsia-official/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 36000
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia-x64-cast"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/fuchsia-x64-cast/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "ios-simulator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:ios-simulator"
- dimensions: "cpu:x86-64"
- dimensions: "os:Mac-11|Mac-12"
- dimensions: "pool:luci.chromium.ci"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/ios-simulator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.mac",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- caches {
- name: "xcode_ios_13c100"
- path: "xcode_ios_13c100.app"
- }
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "ios-simulator-cronet"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:ios-simulator-cronet"
- dimensions: "cpu:x86-64"
- dimensions: "os:Mac-11"
- dimensions: "pool:luci.chromium.ci"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/ios-simulator-cronet/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.fyi",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 36000
- caches {
- name: "xcode_ios_13c100"
- path: "xcode_ios_13c100.app"
- }
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "ios-simulator-full-configs"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:ios-simulator-full-configs"
- dimensions: "cpu:x86-64"
- dimensions: "os:Mac-11|Mac-12"
- dimensions: "pool:luci.chromium.ci"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/ios-simulator-full-configs/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.mac",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- caches {
- name: "xcode_ios_13c100"
- path: "xcode_ios_13c100.app"
- }
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "lacros-amd64-generic-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/lacros-amd64-generic-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "lacros-arm-generic-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/lacros-arm-generic-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-chromeos-annotator-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.fyi",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-chromeos-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/linux-chromeos-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
+ ' "recipe": "chromium"'
'}'
execution_timeout_secs: 10800
build_numbers: YES
@@ -7355,259 +2769,7 @@ buckets {
' },'
' "builder_group": "chromium.chromiumos",'
' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-lacros-builder-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/linux-lacros-builder-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-lacros-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/linux-lacros-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 10800
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-lacros-tester-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "free_space:standard"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/linux-lacros-tester-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
+ ' "recipe": "chromium"'
'}'
execution_timeout_secs: 10800
build_numbers: YES
@@ -7650,87 +2812,6 @@ buckets {
}
}
builders {
- name: "linux-official"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:linux-official"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.ci"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/ci/linux-official/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "chromium",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium",'
- ' "sheriff_rotations": ['
- ' "chrome_browser_release"'
- ' ]'
- '}'
- execution_timeout_secs: 25200
- build_numbers: YES
- service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "ci_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_ci_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "mac-arm64-rel"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builder:mac-arm64-rel"
@@ -8179,1995 +3260,6 @@ buckets {
}
swarming {
builders {
- name: "android-binary-size"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
- cipd_version: "refs/heads/main"
- cmd: "luciexe"
- }
- properties:
- '{'
- ' "$build/binary_size": {'
- ' "analyze_targets": ['
- ' "//chrome/android:monochrome_public_minimal_apks",'
- ' "//chrome/android:trichrome_minimal_apks",'
- ' "//chrome/android:validate_expectations",'
- ' "//tools/binary_size:binary_size_trybot_py"'
- ' ],'
- ' "compile_targets": ['
- ' "monochrome_public_minimal_apks",'
- ' "monochrome_static_initializers",'
- ' "trichrome_minimal_apks",'
- ' "validate_expectations"'
- ' ]'
- ' },'
- ' "$build/goma": {'
- ' "enable_ats": true,'
- ' "jobs": 150,'
- ' "rpc_extra_params": "?prod",'
- ' "server_host": "goma.chromium.org",'
- ' "use_luci_auth": true'
- ' },'
- ' "$recipe_engine/resultdb/test_presentation": {'
- ' "column_keys": [],'
- ' "grouping_keys": ['
- ' "status",'
- ' "v.test_suite"'
- ' ]'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "recipe": "binary_size_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-cronet-arm-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-cronet-arm-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-cronet-x86-dbg-10-tests"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-cronet-x86-dbg-10-tests/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-marshmallow-arm64-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:4"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/orchestrator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/android-marshmallow-arm64-rel-compilator\">android-marshmallow-arm64-rel-compilator</a>."
- }
- builders {
- name: "android-marshmallow-arm64-rel-compilator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/compilator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/android-marshmallow-arm64-rel\">android-marshmallow-arm64-rel</a>."
- }
- builders {
- name: "android-marshmallow-x86-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:4"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-marshmallow-x86-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/orchestrator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/android-marshmallow-x86-rel-compilator\">android-marshmallow-x86-rel-compilator</a>."
- }
- builders {
- name: "android-marshmallow-x86-rel-compilator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/compilator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/android-marshmallow-x86-rel\">android-marshmallow-x86-rel</a>."
- }
- builders {
- name: "android-official"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-official/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-oreo-arm64-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-oreo-arm64-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-pie-arm64-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:android-pie-arm64-dbg"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-pie-arm64-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android-pie-arm64-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:4"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-pie-arm64-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/orchestrator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/android-pie-arm64-rel-compilator\">android-pie-arm64-rel-compilator</a>."
- }
- builders {
- name: "android-pie-arm64-rel-compilator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/compilator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/android-pie-arm64-rel\">android-pie-arm64-rel</a>."
- }
- builders {
- name: "android_compile_dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android_compile_dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android_compile_x64_dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android_compile_x64_dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android_compile_x86_dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android_compile_x86_dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android_cronet"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android_cronet/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "android_optional_gpu_tests_rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:android_optional_gpu_tests_rel"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/android_optional_gpu_tests_rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 21600
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "cast_shell_android"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/cast_shell_android/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "cast_shell_linux"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/cast_shell_linux/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "cast_shell_linux_dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/cast_shell_linux_dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "chromeos-amd64-generic-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/chromeos-amd64-generic-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "chromeos-amd64-generic-lacros-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/chromeos-amd64-generic-lacros-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "chromeos-amd64-generic-rel"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builderless:1"
@@ -10705,94 +3797,6 @@ buckets {
}
}
builders {
- name: "dawn-linux-x64-deps-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:dawn-linux-x64-deps-rel"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/dawn-linux-x64-deps-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.dawn",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "dawn-mac-x64-deps-rel"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builder:dawn-mac-x64-deps-rel"
@@ -11057,1273 +4061,6 @@ buckets {
}
}
builders {
- name: "fuchsia-arm64-cast"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/fuchsia-arm64-cast/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia-binary-size"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
- cipd_version: "refs/heads/main"
- cmd: "luciexe"
- }
- properties:
- '{'
- ' "$build/binary_size": {'
- ' "analyze_targets": ['
- ' "//fuchsia/release:fuchsia_sizes"'
- ' ],'
- ' "compile_targets": ['
- ' "fuchsia_sizes"'
- ' ]'
- ' },'
- ' "$build/goma": {'
- ' "enable_ats": true,'
- ' "rpc_extra_params": "?prod",'
- ' "server_host": "goma.chromium.org",'
- ' "use_luci_auth": true'
- ' },'
- ' "$recipe_engine/resultdb/test_presentation": {'
- ' "column_keys": [],'
- ' "grouping_keys": ['
- ' "status",'
- ' "v.test_suite"'
- ' ]'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "recipe": "binary_size_fuchsia_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia-official"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/fuchsia-official/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia-x64-cast"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/fuchsia-x64-cast/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia_arm64"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/fuchsia_arm64/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "fuchsia_x64"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/fuchsia_x64/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "ios-simulator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:ios-simulator"
- dimensions: "cpu:x86-64"
- dimensions: "os:Mac-11|Mac-12"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/ios-simulator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.mac",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- caches {
- name: "xcode_ios_13c100"
- path: "xcode_ios_13c100.app"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "ios-simulator-cronet"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:ios-simulator-cronet"
- dimensions: "cpu:x86-64"
- dimensions: "os:Mac-11|Mac-12"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/ios-simulator-cronet/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.mac",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- caches {
- name: "xcode_ios_13c100"
- path: "xcode_ios_13c100.app"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "ios-simulator-full-configs"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:ios-simulator-full-configs"
- dimensions: "cpu:x86-64"
- dimensions: "os:Mac-11|Mac-12"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/ios-simulator-full-configs/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.mac",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- caches {
- name: "xcode_ios_13c100"
- path: "xcode_ios_13c100.app"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "lacros-amd64-generic-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/lacros-amd64-generic-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "lacros-arm-generic-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/lacros-arm-generic-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-blink-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-blink-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.blink",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-chromeos-compile-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-chromeos-compile-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-chromeos-dbg"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-chromeos-dbg/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "linux-chromeos-rel"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builderless:1"
@@ -12509,1371 +4246,6 @@ buckets {
description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/linux-chromeos-rel\">linux-chromeos-rel</a>."
}
builders {
- name: "linux-lacros-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-lacros-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.chromiumos",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-libfuzzer-asan-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
- cipd_version: "refs/heads/main"
- cmd: "luciexe"
- }
- properties:
- '{'
- ' "$build/goma": {'
- ' "enable_ats": true,'
- ' "rpc_extra_params": "?prod",'
- ' "server_host": "goma.chromium.org",'
- ' "use_luci_auth": true'
- ' },'
- ' "$recipe_engine/resultdb/test_presentation": {'
- ' "column_keys": [],'
- ' "grouping_keys": ['
- ' "status",'
- ' "v.test_suite"'
- ' ]'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "recipe": "chromium_libfuzzer_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-official"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:32"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-official/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:2"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/orchestrator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- experiments {
- key: "remove_src_checkout_experiment"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/linux-rel-compilator\">linux-rel-compilator</a>."
- }
- builders {
- name: "linux-rel-compilator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-rel-compilator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/compilator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/linux-rel\">linux-rel</a>."
- }
- builders {
- name: "linux-wayland-rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux-wayland-rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux_chromium_asan_rel_ng"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:2"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_chromium_asan_rel_ng/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/orchestrator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- experiments {
- key: "remove_src_checkout_experiment"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/linux_chromium_asan_rel_ng-compilator\">linux_chromium_asan_rel_ng-compilator</a>."
- }
- builders {
- name: "linux_chromium_asan_rel_ng-compilator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/compilator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/linux_chromium_asan_rel_ng\">linux_chromium_asan_rel_ng</a>."
- }
- builders {
- name: "linux_chromium_compile_dbg_ng"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "builder"
- path: "linux_debug"
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux_chromium_dbg_ng"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_chromium_dbg_ng/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "builder"
- path: "linux_debug"
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux_chromium_tsan_rel_ng"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:2"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/orchestrator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- experiments {
- key: "remove_src_checkout_experiment"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/linux_chromium_tsan_rel_ng-compilator\">linux_chromium_tsan_rel_ng-compilator</a>."
- }
- builders {
- name: "linux_chromium_tsan_rel_ng-compilator"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:16"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:1"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium/compilator"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium-m102/builders/try/linux_chromium_tsan_rel_ng\">linux_chromium_tsan_rel_ng</a>."
- }
- builders {
- name: "linux_layout_tests_layout_ng_disabled"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux_optional_gpu_tests_rel"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builder:linux_optional_gpu_tests_rel"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_optional_gpu_tests_rel/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 21600
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
- name: "linux_vr"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/linux_vr/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.linux",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "mac-official"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builderless:1"
@@ -14323,96 +4695,6 @@ buckets {
}
}
builders {
- name: "try-nougat-phone-tester"
- swarming_host: "chromium-swarm.appspot.com"
- dimensions: "builderless:1"
- dimensions: "cores:8"
- dimensions: "cpu:x86-64"
- dimensions: "os:Ubuntu-18.04"
- dimensions: "pool:luci.chromium.try"
- dimensions: "ssd:0"
- exe {
- cipd_package: "infra/chromium/bootstrapper/${platform}"
- cipd_version: "latest"
- cmd: "bootstrapper"
- }
- properties:
- '{'
- ' "$bootstrap/exe": {'
- ' "exe": {'
- ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
- ' "cipd_version": "refs/heads/main",'
- ' "cmd": ['
- ' "luciexe"'
- ' ]'
- ' }'
- ' },'
- ' "$bootstrap/properties": {'
- ' "properties_file": "infra/config/generated/builders/try/try-nougat-phone-tester/properties.json",'
- ' "top_level_project": {'
- ' "ref": "refs/branch-heads/5005",'
- ' "repo": {'
- ' "host": "chromium.googlesource.com",'
- ' "project": "chromium/src"'
- ' }'
- ' }'
- ' },'
- ' "builder_group": "tryserver.chromium.android",'
- ' "led_builder_is_bootstrapped": true,'
- ' "recipe": "chromium_trybot"'
- '}'
- execution_timeout_secs: 14400
- expiration_secs: 7200
- grace_period {
- seconds: 120
- }
- caches {
- name: "win_toolchain"
- path: "win_toolchain"
- }
- build_numbers: YES
- service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
- task_template_canary_percentage {
- value: 5
- }
- experiments {
- key: "luci.recipes.use_python3"
- value: 100
- }
- resultdb {
- enable: true
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "try_test_results"
- test_results {}
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "gpu_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
- }
- }
- }
- bq_exports {
- project: "chrome-luci-data"
- dataset: "chromium"
- table: "blink_web_tests_try_test_results"
- test_results {
- predicate {
- test_id_regexp: "ninja://[^/]*blink_web_tests/.+"
- }
- }
- }
- history_options {
- use_invocation_timestamp: true
- }
- }
- }
- builders {
name: "win-libfuzzer-asan-rel"
swarming_host: "chromium-swarm.appspot.com"
dimensions: "builder:win-libfuzzer-asan-rel"
diff --git a/chromium/infra/config/generated/luci/luci-milo.cfg b/chromium/infra/config/generated/luci/luci-milo.cfg
index c992cfc4d8a..47fad7e148b 100644
--- a/chromium/infra/config/generated/luci/luci-milo.cfg
+++ b/chromium/infra/config/generated/luci/luci-milo.cfg
@@ -11,21 +11,6 @@ consoles {
refs: "regexp:refs/branch-heads/5005"
manifest_name: "REVISION"
builders {
- name: "buildbucket/luci.chromium-m102.ci/android-official"
- category: "chromium|android"
- short_name: "off"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-official"
- category: "chromium|fuchsia"
- short_name: "off"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-official"
- category: "chromium|linux"
- short_name: "off"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/mac-official"
category: "chromium|mac"
short_name: "off"
@@ -121,121 +106,16 @@ consoles {
short_name: "11"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator"
- category: "chromium.mac|ios|default"
- short_name: "sim"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator-full-configs"
- category: "chromium.mac|ios|default"
- short_name: "ful"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/Mac11 Tests"
category: "chromium.mac|mac"
short_name: "11"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder"
- category: "chromium.linux|release"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests"
- category: "chromium.linux|release"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder (Wayland)"
- category: "chromium.linux|release"
- short_name: "bld-wl"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests (Wayland)"
- category: "chromium.linux|release"
- short_name: "tst-wl"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder (dbg)"
- category: "chromium.linux|debug|builder"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests (dbg)(1)"
- category: "chromium.linux|debug|tester"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Linux"
- category: "chromium.linux|cast"
- short_name: "vid"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Linux Debug"
- category: "chromium.linux|cast"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Fuchsia ARM64"
- category: "chromium.linux|fuchsia|a64"
- short_name: "rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-arm64-cast"
- category: "chromium.linux|fuchsia|cast"
- short_name: "a64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-x64-cast"
- category: "chromium.linux|fuchsia|cast"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Fuchsia x64"
- category: "chromium.linux|fuchsia|x64"
- short_name: "rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/linux-chromeos-rel"
category: "chromium.chromiumos|default"
short_name: "rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-chromeos-dbg"
- category: "chromium.chromiumos|default"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-builder-rel"
- category: "chromium.chromiumos|default"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-tester-rel"
- category: "chromium.chromiumos|default"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-dbg"
- category: "chromium.chromiumos|debug"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/lacros-arm-generic-rel"
- category: "chromium.chromiumos|lacros|arm"
- short_name: "arm"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/chromeos-amd64-generic-lacros-dbg"
- category: "chromium.chromiumos|lacros|x64"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/lacros-amd64-generic-rel"
- category: "chromium.chromiumos|lacros|x64"
- short_name: "rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/chromeos-arm64-generic-rel"
category: "chromium.chromiumos|simple|release"
short_name: "a64"
@@ -256,151 +136,6 @@ consoles {
short_name: "rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/chromeos-amd64-generic-dbg"
- category: "chromium.chromiumos|simple|debug|x64"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-arm-dbg"
- category: "chromium.android|cronet|arm"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-arm-rel"
- category: "chromium.android|cronet|arm"
- short_name: "rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-x86-dbg"
- category: "chromium.android|cronet|x86"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-x86-dbg-10-tests"
- category: "chromium.android|cronet|test"
- short_name: "10"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android arm Builder (dbg)"
- category: "chromium.android|builder|arm"
- short_name: "32"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android arm64 Builder (dbg)"
- category: "chromium.android|builder|arm"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android x86 Builder (dbg)"
- category: "chromium.android|builder|x86"
- short_name: "32"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android x64 Builder (dbg)"
- category: "chromium.android|builder|x86"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Marshmallow 64 bit Tester"
- category: "chromium.android|tester|phone"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Nougat Phone Tester"
- category: "chromium.android|tester|phone"
- short_name: "N"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Oreo Phone Tester"
- category: "chromium.android|tester|phone"
- short_name: "O"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-pie-arm64-dbg"
- category: "chromium.android|tester|phone"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView M (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView N (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "N"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView O (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "O"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView P (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-marshmallow-arm64-rel"
- category: "chromium.android|on_cq"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-pie-arm64-rel"
- category: "chromium.android|on_cq"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Android (dbg)"
- category: "chromium.android|on_cq"
- short_name: "cst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-marshmallow-x86-rel"
- category: "chromium.android|on_cq|x86"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux TSan Builder"
- category: "chromium.memory|linux|TSan v2"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux TSan Tests"
- category: "chromium.memory|linux|TSan v2"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan LSan Builder"
- category: "chromium.memory|linux|asan lsan"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan LSan Tests (1)"
- category: "chromium.memory|linux|asan lsan"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan Tests (sandboxed)"
- category: "chromium.memory|linux|asan lsan"
- short_name: "sbx"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Builder"
- category: "chromium.dawn|DEPS|Linux|Builder"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Release (Intel HD 630)"
- category: "chromium.dawn|DEPS|Linux|Intel"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Release (NVIDIA)"
- category: "chromium.dawn|DEPS|Linux|Nvidia"
- short_name: "x64"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/Dawn Mac x64 DEPS Builder"
category: "chromium.dawn|DEPS|Mac|Builder"
short_name: "x64"
@@ -465,32 +200,6 @@ consoles {
name: "buildbucket/luci.chromium-m102.ci/Mac Retina Release (AMD)"
category: "chromium.gpu|Mac"
}
- builders {
- name: "buildbucket/luci.chromium-m102.ci/GPU Linux Builder"
- category: "chromium.gpu|Linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Release (NVIDIA)"
- category: "chromium.gpu|Linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android Release (Nexus 5X)"
- category: "chromium.gpu|Android"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator-cronet"
- category: "chromium.fyi|cronet"
- short_name: "intel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/VR Linux"
- category: "chromium.fyi|linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-chromeos-annotator-rel"
- category: "chromium.fyi|release"
- short_name: "rel"
- }
header {
oncalls {
name: "Chromium Branches"
@@ -502,14 +211,7 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
}
@@ -580,116 +282,11 @@ consoles {
short_name: "11"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator"
- category: "chromium.mac|ios|default"
- short_name: "sim"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator-full-configs"
- category: "chromium.mac|ios|default"
- short_name: "ful"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder"
- category: "chromium.linux|release"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests"
- category: "chromium.linux|release"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder (Wayland)"
- category: "chromium.linux|release"
- short_name: "bld-wl"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests (Wayland)"
- category: "chromium.linux|release"
- short_name: "tst-wl"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder (dbg)"
- category: "chromium.linux|debug|builder"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests (dbg)(1)"
- category: "chromium.linux|debug|tester"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Linux"
- category: "chromium.linux|cast"
- short_name: "vid"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Linux Debug"
- category: "chromium.linux|cast"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Fuchsia ARM64"
- category: "chromium.linux|fuchsia|a64"
- short_name: "rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-arm64-cast"
- category: "chromium.linux|fuchsia|cast"
- short_name: "a64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-x64-cast"
- category: "chromium.linux|fuchsia|cast"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Fuchsia x64"
- category: "chromium.linux|fuchsia|x64"
- short_name: "rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/linux-chromeos-rel"
category: "chromium.chromiumos|default"
short_name: "rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-chromeos-dbg"
- category: "chromium.chromiumos|default"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-builder-rel"
- category: "chromium.chromiumos|default"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-tester-rel"
- category: "chromium.chromiumos|default"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-dbg"
- category: "chromium.chromiumos|debug"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/lacros-arm-generic-rel"
- category: "chromium.chromiumos|lacros|arm"
- short_name: "arm"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/chromeos-amd64-generic-lacros-dbg"
- category: "chromium.chromiumos|lacros|x64"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/lacros-amd64-generic-rel"
- category: "chromium.chromiumos|lacros|x64"
- short_name: "rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/chromeos-arm-generic-rel"
category: "chromium.chromiumos|simple|release"
short_name: "arm"
@@ -700,141 +297,6 @@ consoles {
short_name: "rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/chromeos-amd64-generic-dbg"
- category: "chromium.chromiumos|simple|debug|x64"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-arm-dbg"
- category: "chromium.android|cronet|arm"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-arm-rel"
- category: "chromium.android|cronet|arm"
- short_name: "rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android arm Builder (dbg)"
- category: "chromium.android|builder|arm"
- short_name: "32"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android arm64 Builder (dbg)"
- category: "chromium.android|builder|arm"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android x86 Builder (dbg)"
- category: "chromium.android|builder|x86"
- short_name: "32"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android x64 Builder (dbg)"
- category: "chromium.android|builder|x86"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Marshmallow 64 bit Tester"
- category: "chromium.android|tester|phone"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Nougat Phone Tester"
- category: "chromium.android|tester|phone"
- short_name: "N"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Oreo Phone Tester"
- category: "chromium.android|tester|phone"
- short_name: "O"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-pie-arm64-dbg"
- category: "chromium.android|tester|phone"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView M (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView N (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "N"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView O (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "O"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView P (dbg)"
- category: "chromium.android|tester|webview"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-marshmallow-arm64-rel"
- category: "chromium.android|on_cq"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-pie-arm64-rel"
- category: "chromium.android|on_cq"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Android (dbg)"
- category: "chromium.android|on_cq"
- short_name: "cst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-marshmallow-x86-rel"
- category: "chromium.android|on_cq|x86"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux TSan Builder"
- category: "chromium.memory|linux|TSan v2"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux TSan Tests"
- category: "chromium.memory|linux|TSan v2"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan LSan Builder"
- category: "chromium.memory|linux|asan lsan"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan LSan Tests (1)"
- category: "chromium.memory|linux|asan lsan"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan Tests (sandboxed)"
- category: "chromium.memory|linux|asan lsan"
- short_name: "sbx"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Builder"
- category: "chromium.dawn|DEPS|Linux|Builder"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Release (Intel HD 630)"
- category: "chromium.dawn|DEPS|Linux|Intel"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Release (NVIDIA)"
- category: "chromium.dawn|DEPS|Linux|Nvidia"
- short_name: "x64"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/Dawn Mac x64 DEPS Builder"
category: "chromium.dawn|DEPS|Mac|Builder"
short_name: "x64"
@@ -899,27 +361,6 @@ consoles {
name: "buildbucket/luci.chromium-m102.ci/Mac Retina Release (AMD)"
category: "chromium.gpu|Mac"
}
- builders {
- name: "buildbucket/luci.chromium-m102.ci/GPU Linux Builder"
- category: "chromium.gpu|Linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Release (NVIDIA)"
- category: "chromium.gpu|Linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android Release (Nexus 5X)"
- category: "chromium.gpu|Android"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator-cronet"
- category: "chromium.fyi|cronet"
- short_name: "intel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/VR Linux"
- category: "chromium.fyi|linux"
- }
header {
oncalls {
name: "Chromium Branches"
@@ -931,14 +372,7 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
}
@@ -954,63 +388,6 @@ consoles {
id: "try"
name: "Chromium M102 CQ Console"
builders {
- name: "buildbucket/luci.chromium-m102.try/android-binary-size"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-cronet-arm-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-cronet-x86-dbg-10-tests"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-arm64-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-arm64-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-x86-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-x86-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_x64_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_x86_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_cronet"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_optional_gpu_tests_rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_android"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_linux_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-dbg"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-rel"
}
builders {
@@ -1026,9 +403,6 @@ consoles {
name: "buildbucket/luci.chromium-m102.try/chromium_presubmit"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/dawn-linux-x64-deps-rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/dawn-mac-x64-deps-rel"
}
builders {
@@ -1038,87 +412,12 @@ consoles {
name: "buildbucket/luci.chromium-m102.try/dawn-win10-x86-deps-rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-arm64-cast"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-x64-cast"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia_arm64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia_x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator-cronet"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator-full-configs"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/lacros-amd64-generic-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/lacros-arm-generic-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-blink-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-chromeos-compile-dbg"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/linux-chromeos-rel"
}
builders {
name: "buildbucket/luci.chromium-m102.try/linux-chromeos-rel-compilator"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/linux-lacros-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-libfuzzer-asan-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-wayland-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_asan_rel_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_asan_rel_ng-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_compile_dbg_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_dbg_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_tsan_rel_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_tsan_rel_ng-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_layout_tests_layout_ng_disabled"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_optional_gpu_tests_rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_vr"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/mac-rel"
}
builders {
@@ -1157,21 +456,6 @@ consoles {
refs: "regexp:refs/branch-heads/5005"
manifest_name: "REVISION"
builders {
- name: "buildbucket/luci.chromium-m102.ci/android-official"
- category: "android"
- short_name: "off"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-official"
- category: "fuchsia"
- short_name: "off"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-official"
- category: "linux"
- short_name: "off"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/mac-official"
category: "mac"
short_name: "off"
@@ -1197,147 +481,12 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
include_experimental_builds: true
}
consoles {
- id: "chromium.android"
- name: "chromium.android"
- repo_url: "https://chromium.googlesource.com/chromium/src"
- refs: "regexp:refs/branch-heads/5005"
- manifest_name: "REVISION"
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-arm-dbg"
- category: "cronet|arm"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-arm-rel"
- category: "cronet|arm"
- short_name: "rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-x86-dbg"
- category: "cronet|x86"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-cronet-x86-dbg-10-tests"
- category: "cronet|test"
- short_name: "10"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android arm Builder (dbg)"
- category: "builder|arm"
- short_name: "32"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android arm64 Builder (dbg)"
- category: "builder|arm"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android x86 Builder (dbg)"
- category: "builder|x86"
- short_name: "32"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android x64 Builder (dbg)"
- category: "builder|x86"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Marshmallow 64 bit Tester"
- category: "tester|phone"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Nougat Phone Tester"
- category: "tester|phone"
- short_name: "N"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Oreo Phone Tester"
- category: "tester|phone"
- short_name: "O"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-pie-arm64-dbg"
- category: "tester|phone"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView M (dbg)"
- category: "tester|webview"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView N (dbg)"
- category: "tester|webview"
- short_name: "N"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView O (dbg)"
- category: "tester|webview"
- short_name: "O"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android WebView P (dbg)"
- category: "tester|webview"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-marshmallow-arm64-rel"
- category: "on_cq"
- short_name: "M"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-pie-arm64-rel"
- category: "on_cq"
- short_name: "P"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Android (dbg)"
- category: "on_cq"
- short_name: "cst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/android-marshmallow-x86-rel"
- category: "on_cq|x86"
- short_name: "M"
- }
- header {
- oncalls {
- name: "Chromium Branches"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-branch-sheriff"
- }
- oncalls {
- name: "Trooper"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-ops-client-infra"
- show_primary_secondary_labels: true
- }
- console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
- console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
- }
- }
-}
-consoles {
id: "chromium.chromiumos"
name: "chromium.chromiumos"
repo_url: "https://chromium.googlesource.com/chromium/src"
@@ -1349,41 +498,6 @@ consoles {
short_name: "rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-chromeos-dbg"
- category: "default"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-builder-rel"
- category: "default"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-tester-rel"
- category: "default"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-lacros-dbg"
- category: "debug"
- short_name: "lcr"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/lacros-arm-generic-rel"
- category: "lacros|arm"
- short_name: "arm"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/chromeos-amd64-generic-lacros-dbg"
- category: "lacros|x64"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/lacros-amd64-generic-rel"
- category: "lacros|x64"
- short_name: "rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/chromeos-arm64-generic-rel"
category: "simple|release"
short_name: "a64"
@@ -1403,11 +517,6 @@ consoles {
category: "simple|release|x64"
short_name: "rel"
}
- builders {
- name: "buildbucket/luci.chromium-m102.ci/chromeos-amd64-generic-dbg"
- category: "simple|debug|x64"
- short_name: "dbg"
- }
header {
oncalls {
name: "Chromium Branches"
@@ -1419,14 +528,7 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
}
@@ -1437,21 +539,6 @@ consoles {
refs: "regexp:refs/branch-heads/5005"
manifest_name: "REVISION"
builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Builder"
- category: "DEPS|Linux|Builder"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Release (Intel HD 630)"
- category: "DEPS|Linux|Intel"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Dawn Linux x64 DEPS Release (NVIDIA)"
- category: "DEPS|Linux|Nvidia"
- short_name: "x64"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/Dawn Mac x64 DEPS Builder"
category: "DEPS|Mac|Builder"
short_name: "x64"
@@ -1507,56 +594,7 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
- console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
- }
- }
-}
-consoles {
- id: "chromium.fyi"
- name: "chromium.fyi"
- repo_url: "https://chromium.googlesource.com/chromium/src"
- refs: "regexp:refs/branch-heads/5005"
- manifest_name: "REVISION"
- builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator-cronet"
- category: "cronet"
- short_name: "intel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/VR Linux"
- category: "linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/linux-chromeos-annotator-rel"
- category: "release"
- short_name: "rel"
- }
- header {
- oncalls {
- name: "Chromium Branches"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-branch-sheriff"
- }
- oncalls {
- name: "Trooper"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-ops-client-infra"
- show_primary_secondary_labels: true
- }
- console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
}
@@ -1586,106 +624,6 @@ consoles {
name: "buildbucket/luci.chromium-m102.ci/Mac Retina Release (AMD)"
category: "Mac"
}
- builders {
- name: "buildbucket/luci.chromium-m102.ci/GPU Linux Builder"
- category: "Linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Release (NVIDIA)"
- category: "Linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Android Release (Nexus 5X)"
- category: "Android"
- }
- header {
- oncalls {
- name: "Chromium Branches"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-branch-sheriff"
- }
- oncalls {
- name: "Trooper"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-ops-client-infra"
- show_primary_secondary_labels: true
- }
- console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
- console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
- }
- }
-}
-consoles {
- id: "chromium.linux"
- name: "chromium.linux"
- repo_url: "https://chromium.googlesource.com/chromium/src"
- refs: "regexp:refs/branch-heads/5005"
- manifest_name: "REVISION"
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder"
- category: "release"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests"
- category: "release"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder (Wayland)"
- category: "release"
- short_name: "bld-wl"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests (Wayland)"
- category: "release"
- short_name: "tst-wl"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Builder (dbg)"
- category: "debug|builder"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux Tests (dbg)(1)"
- category: "debug|tester"
- short_name: "64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Linux"
- category: "cast"
- short_name: "vid"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Cast Linux Debug"
- category: "cast"
- short_name: "dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Fuchsia ARM64"
- category: "fuchsia|a64"
- short_name: "rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-arm64-cast"
- category: "fuchsia|cast"
- short_name: "a64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/fuchsia-x64-cast"
- category: "fuchsia|cast"
- short_name: "x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Fuchsia x64"
- category: "fuchsia|x64"
- short_name: "rel"
- }
header {
oncalls {
name: "Chromium Branches"
@@ -1697,14 +635,7 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
}
@@ -1765,16 +696,6 @@ consoles {
short_name: "11"
}
builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator"
- category: "ios|default"
- short_name: "sim"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/ios-simulator-full-configs"
- category: "ios|default"
- short_name: "ful"
- }
- builders {
name: "buildbucket/luci.chromium-m102.ci/Mac11 Tests"
category: "mac"
short_name: "11"
@@ -1790,67 +711,7 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
- console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
- }
- }
-}
-consoles {
- id: "chromium.memory"
- name: "chromium.memory"
- repo_url: "https://chromium.googlesource.com/chromium/src"
- refs: "regexp:refs/branch-heads/5005"
- manifest_name: "REVISION"
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux TSan Builder"
- category: "linux|TSan v2"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux TSan Tests"
- category: "linux|TSan v2"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan LSan Builder"
- category: "linux|asan lsan"
- short_name: "bld"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan LSan Tests (1)"
- category: "linux|asan lsan"
- short_name: "tst"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.ci/Linux ASan Tests (sandboxed)"
- category: "linux|asan lsan"
- short_name: "sbx"
- }
- header {
- oncalls {
- name: "Chromium Branches"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-branch-sheriff"
- }
- oncalls {
- name: "Trooper"
- url: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-ops-client-infra"
- show_primary_secondary_labels: true
- }
- console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
}
@@ -1901,14 +762,7 @@ consoles {
show_primary_secondary_labels: true
}
console_groups {
- console_ids: "chromium-m102/chromium"
- console_ids: "chromium-m102/chromium.win"
- console_ids: "chromium-m102/chromium.mac"
- console_ids: "chromium-m102/chromium.linux"
console_ids: "chromium-m102/chromium.chromiumos"
- console_ids: "chromium-m102/chromium.memory"
- console_ids: "chromium-m102/chromium.gpu"
- console_ids: "chromium-m102/chromium.android"
}
}
}
@@ -1916,72 +770,6 @@ consoles {
id: "luci.chromium.try"
name: "luci.chromium.try"
builders {
- name: "buildbucket/luci.chromium-m102.try/android-binary-size"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-cronet-arm-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-cronet-x86-dbg-10-tests"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-arm64-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-arm64-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-x86-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-x86-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-official"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-oreo-arm64-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_x64_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_x86_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_cronet"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_optional_gpu_tests_rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_android"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_linux_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-lacros-dbg"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-rel"
}
builders {
@@ -2000,9 +788,6 @@ consoles {
name: "buildbucket/luci.chromium-m102.try/chromium_presubmit"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/dawn-linux-x64-deps-rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/dawn-mac-x64-deps-rel"
}
builders {
@@ -2012,99 +797,12 @@ consoles {
name: "buildbucket/luci.chromium-m102.try/dawn-win10-x86-deps-rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-arm64-cast"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-binary-size"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-official"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-x64-cast"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia_arm64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia_x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator-cronet"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator-full-configs"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/lacros-amd64-generic-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/lacros-arm-generic-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-blink-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-chromeos-compile-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-chromeos-dbg"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/linux-chromeos-rel"
}
builders {
name: "buildbucket/luci.chromium-m102.try/linux-chromeos-rel-compilator"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/linux-lacros-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-libfuzzer-asan-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-official"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-wayland-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_asan_rel_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_asan_rel_ng-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_compile_dbg_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_dbg_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_tsan_rel_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_tsan_rel_ng-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_layout_tests_layout_ng_disabled"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_optional_gpu_tests_rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_vr"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/mac-official"
}
builders {
@@ -2120,9 +818,6 @@ consoles {
name: "buildbucket/luci.chromium-m102.try/mac_optional_gpu_tests_rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/try-nougat-phone-tester"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/win-libfuzzer-asan-rel"
}
builders {
@@ -2149,26 +844,9 @@ consoles {
builder_view_only: true
}
consoles {
- id: "tryserver.blink"
- name: "tryserver.blink"
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-blink-rel"
- }
- builder_view_only: true
-}
-consoles {
id: "tryserver.chromium"
name: "tryserver.chromium"
builders {
- name: "buildbucket/luci.chromium-m102.try/android-official"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-official"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-official"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/mac-official"
}
builders {
@@ -2180,74 +858,9 @@ consoles {
builder_view_only: true
}
consoles {
- id: "tryserver.chromium.android"
- name: "tryserver.chromium.android"
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-binary-size"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-cronet-arm-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-cronet-x86-dbg-10-tests"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-arm64-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-arm64-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-x86-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-marshmallow-x86-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-oreo-arm64-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android-pie-arm64-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_x64_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_compile_x86_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_cronet"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/android_optional_gpu_tests_rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_android"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/try-nougat-phone-tester"
- }
- builder_view_only: true
-}
-consoles {
id: "tryserver.chromium.chromiumos"
name: "tryserver.chromium.chromiumos"
builders {
- name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-lacros-dbg"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/chromeos-amd64-generic-rel"
}
builders {
@@ -2263,35 +876,17 @@ consoles {
name: "buildbucket/luci.chromium-m102.try/chromeos-kevin-rel"
}
builders {
- name: "buildbucket/luci.chromium-m102.try/lacros-amd64-generic-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/lacros-arm-generic-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-chromeos-compile-dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-chromeos-dbg"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/linux-chromeos-rel"
}
builders {
name: "buildbucket/luci.chromium-m102.try/linux-chromeos-rel-compilator"
}
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-lacros-rel"
- }
builder_view_only: true
}
consoles {
id: "tryserver.chromium.dawn"
name: "tryserver.chromium.dawn"
builders {
- name: "buildbucket/luci.chromium-m102.try/dawn-linux-x64-deps-rel"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/dawn-mac-x64-deps-rel"
}
builders {
@@ -2305,81 +900,12 @@ consoles {
consoles {
id: "tryserver.chromium.linux"
name: "tryserver.chromium.linux"
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_linux"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/cast_shell_linux_dbg"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-arm64-cast"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-binary-size"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia-x64-cast"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia_arm64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/fuchsia_x64"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-libfuzzer-asan-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-rel-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux-wayland-rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_asan_rel_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_asan_rel_ng-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_compile_dbg_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_dbg_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_tsan_rel_ng"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_chromium_tsan_rel_ng-compilator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_layout_tests_layout_ng_disabled"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_optional_gpu_tests_rel"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/linux_vr"
- }
builder_view_only: true
}
consoles {
id: "tryserver.chromium.mac"
name: "tryserver.chromium.mac"
builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator-cronet"
- }
- builders {
- name: "buildbucket/luci.chromium-m102.try/ios-simulator-full-configs"
- }
- builders {
name: "buildbucket/luci.chromium-m102.try/mac-rel"
}
builders {
diff --git a/chromium/infra/config/generated/luci/luci-notify.cfg b/chromium/infra/config/generated/luci/luci-notify.cfg
index 186ba35e9e0..101b61219b8 100644
--- a/chromium/infra/config/generated/luci/luci-notify.cfg
+++ b/chromium/infra/config/generated/luci/luci-notify.cfg
@@ -16,147 +16,6 @@ notifiers {
}
builders {
bucket: "ci"
- name: "Android Release (Nexus 5X)"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Android arm Builder (dbg)"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Android arm64 Builder (dbg)"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Cast Android (dbg)"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Cast Linux"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Cast Linux Debug"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_change: true
- email {
- recipients: "chrome-fuchsia-gardener@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "Fuchsia ARM64"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_change: true
- email {
- recipients: "chrome-fuchsia-gardener@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "Fuchsia x64"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "GPU Linux Builder"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
name: "GPU Mac Builder"
repository: "https://chromium.googlesource.com/chromium/src"
}
@@ -184,191 +43,6 @@ notifiers {
notifications {
on_new_status: INFRA_FAILURE
}
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux ASan LSan Builder"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux ASan LSan Tests (1)"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux ASan Tests (sandboxed)"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux Builder"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux Builder (Wayland)"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux Builder (dbg)"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux Release (NVIDIA)"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux TSan Builder"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux TSan Tests"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux Tests"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux Tests (Wayland)"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "Linux Tests (dbg)(1)"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
builders {
bucket: "ci"
name: "Mac Builder"
@@ -594,126 +268,6 @@ notifiers {
}
notifiers {
notifications {
- on_occurrence: FAILURE
- on_occurrence: INFRA_FAILURE
- email {
- recipients: "cronet-sheriff@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "android-cronet-arm-dbg"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_occurrence: FAILURE
- on_occurrence: INFRA_FAILURE
- email {
- recipients: "cronet-sheriff@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "android-cronet-arm-rel"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_occurrence: FAILURE
- on_occurrence: INFRA_FAILURE
- email {
- recipients: "cronet-sheriff@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "android-cronet-x86-dbg"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_occurrence: FAILURE
- on_occurrence: INFRA_FAILURE
- email {
- recipients: "cronet-sheriff@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "android-cronet-x86-dbg-10-tests"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "android-marshmallow-arm64-rel"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "android-marshmallow-x86-rel"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "android-pie-arm64-rel"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "chromeos-amd64-generic-dbg"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "chromeos-amd64-generic-lacros-dbg"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
on_new_status: INFRA_FAILURE
}
notifications {
@@ -771,110 +325,6 @@ notifiers {
notifications {
on_new_status: INFRA_FAILURE
}
- notifications {
- on_change: true
- email {
- recipients: "chrome-fuchsia-gardener@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "fuchsia-arm64-cast"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_change: true
- email {
- recipients: "chrome-fuchsia-gardener@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "fuchsia-x64-cast"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "ios-simulator"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_occurrence: FAILURE
- on_occurrence: INFRA_FAILURE
- email {
- recipients: "cronet-sheriff@grotations.appspotmail.com"
- }
- }
- builders {
- bucket: "ci"
- name: "ios-simulator-cronet"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "ios-simulator-full-configs"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "lacros-amd64-generic-rel"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "linux-chromeos-dbg"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
builders {
bucket: "ci"
name: "linux-chromeos-rel"
@@ -890,32 +340,6 @@ notifiers {
}
builders {
bucket: "ci"
- name: "linux-lacros-builder-rel"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
- name: "linux-lacros-dbg"
- repository: "https://chromium.googlesource.com/chromium/src"
- }
-}
-notifiers {
- notifications {
- on_new_status: INFRA_FAILURE
- }
- notifications {
- on_new_status: INFRA_FAILURE
- }
- builders {
- bucket: "ci"
name: "mac-arm64-rel"
repository: "https://chromium.googlesource.com/chromium/src"
}
diff --git a/chromium/infra/config/generated/luci/luci-scheduler.cfg b/chromium/infra/config/generated/luci/luci-scheduler.cfg
index bc522067e23..f8819f31abd 100644
--- a/chromium/infra/config/generated/luci/luci-scheduler.cfg
+++ b/chromium/infra/config/generated/luci/luci-scheduler.cfg
@@ -5,180 +5,6 @@
# https://luci-config.appspot.com/schemas/projects:luci-scheduler.cfg
job {
- id: "Android Release (Nexus 5X)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android Release (Nexus 5X)"
- }
-}
-job {
- id: "Android WebView M (dbg)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android WebView M (dbg)"
- }
-}
-job {
- id: "Android WebView N (dbg)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android WebView N (dbg)"
- }
-}
-job {
- id: "Android WebView O (dbg)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android WebView O (dbg)"
- }
-}
-job {
- id: "Android WebView P (dbg)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android WebView P (dbg)"
- }
-}
-job {
- id: "Android arm Builder (dbg)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android arm Builder (dbg)"
- }
-}
-job {
- id: "Android arm64 Builder (dbg)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android arm64 Builder (dbg)"
- }
-}
-job {
- id: "Android x64 Builder (dbg)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android x64 Builder (dbg)"
- }
-}
-job {
- id: "Android x86 Builder (dbg)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Android x86 Builder (dbg)"
- }
-}
-job {
- id: "Cast Android (dbg)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Cast Android (dbg)"
- }
-}
-job {
- id: "Cast Linux"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Cast Linux"
- }
-}
-job {
- id: "Cast Linux Debug"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Cast Linux Debug"
- }
-}
-job {
- id: "Dawn Linux x64 DEPS Builder"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Dawn Linux x64 DEPS Builder"
- }
-}
-job {
- id: "Dawn Linux x64 DEPS Release (Intel HD 630)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Dawn Linux x64 DEPS Release (Intel HD 630)"
- }
-}
-job {
- id: "Dawn Linux x64 DEPS Release (NVIDIA)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Dawn Linux x64 DEPS Release (NVIDIA)"
- }
-}
-job {
id: "Dawn Mac x64 DEPS Builder"
realm: "ci"
acl_sets: "ci"
@@ -293,36 +119,6 @@ job {
}
}
job {
- id: "Fuchsia ARM64"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Fuchsia ARM64"
- }
-}
-job {
- id: "Fuchsia x64"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Fuchsia x64"
- }
-}
-job {
- id: "GPU Linux Builder"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "GPU Linux Builder"
- }
-}
-job {
id: "GPU Mac Builder"
realm: "ci"
acl_sets: "ci"
@@ -343,154 +139,6 @@ job {
}
}
job {
- id: "Linux ASan LSan Builder"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux ASan LSan Builder"
- }
-}
-job {
- id: "Linux ASan LSan Tests (1)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux ASan LSan Tests (1)"
- }
-}
-job {
- id: "Linux ASan Tests (sandboxed)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux ASan Tests (sandboxed)"
- }
-}
-job {
- id: "Linux Builder"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux Builder"
- }
-}
-job {
- id: "Linux Builder (Wayland)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux Builder (Wayland)"
- }
-}
-job {
- id: "Linux Builder (dbg)"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux Builder (dbg)"
- }
-}
-job {
- id: "Linux Release (NVIDIA)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux Release (NVIDIA)"
- }
-}
-job {
- id: "Linux TSan Builder"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux TSan Builder"
- }
-}
-job {
- id: "Linux TSan Tests"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux TSan Tests"
- }
-}
-job {
- id: "Linux Tests"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux Tests"
- }
-}
-job {
- id: "Linux Tests (Wayland)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux Tests (Wayland)"
- }
-}
-job {
- id: "Linux Tests (dbg)(1)"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Linux Tests (dbg)(1)"
- }
-}
-job {
id: "Mac Builder"
realm: "ci"
acl_sets: "ci"
@@ -637,58 +285,6 @@ job {
}
}
job {
- id: "Marshmallow 64 bit Tester"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Marshmallow 64 bit Tester"
- }
-}
-job {
- id: "Nougat Phone Tester"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Nougat Phone Tester"
- }
-}
-job {
- id: "Oreo Phone Tester"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "Oreo Phone Tester"
- }
-}
-job {
- id: "VR Linux"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "VR Linux"
- }
-}
-job {
id: "Win 7 Tests x64 (1)"
realm: "ci"
acls {
@@ -775,124 +371,6 @@ job {
}
}
job {
- id: "android-cronet-arm-dbg"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-cronet-arm-dbg"
- }
-}
-job {
- id: "android-cronet-arm-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-cronet-arm-rel"
- }
-}
-job {
- id: "android-cronet-x86-dbg"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-cronet-x86-dbg"
- }
-}
-job {
- id: "android-cronet-x86-dbg-10-tests"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-cronet-x86-dbg-10-tests"
- }
-}
-job {
- id: "android-marshmallow-arm64-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-marshmallow-arm64-rel"
- }
-}
-job {
- id: "android-marshmallow-x86-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-marshmallow-x86-rel"
- }
-}
-job {
- id: "android-official"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-official"
- }
-}
-job {
- id: "android-pie-arm64-dbg"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-pie-arm64-dbg"
- }
-}
-job {
- id: "android-pie-arm64-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "android-pie-arm64-rel"
- }
-}
-job {
- id: "chromeos-amd64-generic-dbg"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "chromeos-amd64-generic-dbg"
- }
-}
-job {
- id: "chromeos-amd64-generic-lacros-dbg"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "chromeos-amd64-generic-lacros-dbg"
- }
-}
-job {
id: "chromeos-amd64-generic-rel"
realm: "ci"
acl_sets: "ci"
@@ -933,106 +411,6 @@ job {
}
}
job {
- id: "fuchsia-arm64-cast"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "fuchsia-arm64-cast"
- }
-}
-job {
- id: "fuchsia-official"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "fuchsia-official"
- }
-}
-job {
- id: "fuchsia-x64-cast"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "fuchsia-x64-cast"
- }
-}
-job {
- id: "ios-simulator"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "ios-simulator"
- }
-}
-job {
- id: "ios-simulator-cronet"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "ios-simulator-cronet"
- }
-}
-job {
- id: "ios-simulator-full-configs"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "ios-simulator-full-configs"
- }
-}
-job {
- id: "lacros-amd64-generic-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "lacros-amd64-generic-rel"
- }
-}
-job {
- id: "lacros-arm-generic-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "lacros-arm-generic-rel"
- }
-}
-job {
- id: "linux-chromeos-annotator-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "linux-chromeos-annotator-rel"
- }
-}
-job {
- id: "linux-chromeos-dbg"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "linux-chromeos-dbg"
- }
-}
-job {
id: "linux-chromeos-rel"
realm: "ci"
acl_sets: "ci"
@@ -1043,50 +421,6 @@ job {
}
}
job {
- id: "linux-lacros-builder-rel"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "linux-lacros-builder-rel"
- }
-}
-job {
- id: "linux-lacros-dbg"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "linux-lacros-dbg"
- }
-}
-job {
- id: "linux-lacros-tester-rel"
- realm: "ci"
- acls {
- role: TRIGGERER
- granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
- }
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "linux-lacros-tester-rel"
- }
-}
-job {
- id: "linux-official"
- realm: "ci"
- acl_sets: "ci"
- buildbucket {
- server: "cr-buildbucket.appspot.com"
- bucket: "ci"
- builder: "linux-official"
- }
-}
-job {
id: "mac-arm64-rel"
realm: "ci"
acl_sets: "ci"
@@ -1144,61 +478,21 @@ trigger {
id: "chromium-gitiles-trigger"
realm: "ci"
acl_sets: "ci"
- triggers: "Android Release (Nexus 5X)"
- triggers: "Android arm Builder (dbg)"
- triggers: "Android arm64 Builder (dbg)"
- triggers: "Android x64 Builder (dbg)"
- triggers: "Android x86 Builder (dbg)"
- triggers: "Cast Android (dbg)"
- triggers: "Cast Linux"
- triggers: "Cast Linux Debug"
- triggers: "Dawn Linux x64 DEPS Builder"
triggers: "Dawn Mac x64 DEPS Builder"
triggers: "Dawn Win10 x64 DEPS Builder"
triggers: "Dawn Win10 x86 DEPS Builder"
- triggers: "Fuchsia ARM64"
- triggers: "Fuchsia x64"
- triggers: "GPU Linux Builder"
triggers: "GPU Mac Builder"
triggers: "GPU Win x64 Builder"
- triggers: "Linux ASan LSan Builder"
- triggers: "Linux Builder"
- triggers: "Linux Builder (Wayland)"
- triggers: "Linux Builder (dbg)"
- triggers: "Linux TSan Builder"
triggers: "Mac Builder"
triggers: "Mac Builder (dbg)"
- triggers: "VR Linux"
triggers: "Win Builder"
triggers: "Win Builder (dbg)"
triggers: "Win x64 Builder"
- triggers: "android-cronet-arm-dbg"
- triggers: "android-cronet-arm-rel"
- triggers: "android-cronet-x86-dbg"
- triggers: "android-marshmallow-arm64-rel"
- triggers: "android-marshmallow-x86-rel"
- triggers: "android-official"
- triggers: "android-pie-arm64-rel"
- triggers: "chromeos-amd64-generic-dbg"
- triggers: "chromeos-amd64-generic-lacros-dbg"
triggers: "chromeos-amd64-generic-rel"
triggers: "chromeos-arm-generic-rel"
triggers: "chromeos-arm64-generic-rel"
triggers: "chromeos-kevin-rel"
- triggers: "fuchsia-arm64-cast"
- triggers: "fuchsia-official"
- triggers: "fuchsia-x64-cast"
- triggers: "ios-simulator"
- triggers: "ios-simulator-cronet"
- triggers: "ios-simulator-full-configs"
- triggers: "lacros-amd64-generic-rel"
- triggers: "lacros-arm-generic-rel"
- triggers: "linux-chromeos-annotator-rel"
- triggers: "linux-chromeos-dbg"
triggers: "linux-chromeos-rel"
- triggers: "linux-lacros-builder-rel"
- triggers: "linux-lacros-dbg"
- triggers: "linux-official"
triggers: "mac-arm64-rel"
triggers: "mac-official"
triggers: "win-official"
diff --git a/chromium/infra/config/generated/luci/project.cfg b/chromium/infra/config/generated/luci/project.cfg
index 01fd81e90bc..994f32932db 100644
--- a/chromium/infra/config/generated/luci/project.cfg
+++ b/chromium/infra/config/generated/luci/project.cfg
@@ -7,7 +7,7 @@
name: "chromium-m102"
access: "group:all"
lucicfg {
- version: "1.30.11"
+ version: "1.32.0"
package_dir: "../.."
config_dir: "generated/luci"
entry_point: "main.star"
diff --git a/chromium/infra/config/generated/luci/realms.cfg b/chromium/infra/config/generated/luci/realms.cfg
index 0c24129442a..a0b5a0c9c1c 100644
--- a/chromium/infra/config/generated/luci/realms.cfg
+++ b/chromium/infra/config/generated/luci/realms.cfg
@@ -79,17 +79,6 @@ realms {
conditions {
restrict {
attribute: "scheduler.job.name"
- values: "Android WebView M (dbg)"
- values: "Android WebView N (dbg)"
- values: "Android WebView O (dbg)"
- values: "Android WebView P (dbg)"
- values: "Linux ASan LSan Tests (1)"
- values: "Linux ASan Tests (sandboxed)"
- values: "Linux Release (NVIDIA)"
- values: "Linux TSan Tests"
- values: "Linux Tests"
- values: "Linux Tests (Wayland)"
- values: "Linux Tests (dbg)(1)"
values: "Mac Release (Intel)"
values: "Mac Retina Release (AMD)"
values: "Mac10.11 Tests"
@@ -99,16 +88,10 @@ realms {
values: "Mac10.15 Tests"
values: "Mac11 Tests"
values: "Mac11 Tests (dbg)"
- values: "Marshmallow 64 bit Tester"
- values: "Nougat Phone Tester"
- values: "Oreo Phone Tester"
values: "Win 7 Tests x64 (1)"
values: "Win10 Tests x64"
values: "Win10 x64 Release (NVIDIA)"
values: "Win7 Tests (1)"
- values: "android-cronet-x86-dbg-10-tests"
- values: "android-pie-arm64-dbg"
- values: "linux-lacros-tester-rel"
values: "mac11-arm64-rel-tests"
}
}
@@ -119,8 +102,6 @@ realms {
conditions {
restrict {
attribute: "scheduler.job.name"
- values: "Dawn Linux x64 DEPS Release (Intel HD 630)"
- values: "Dawn Linux x64 DEPS Release (NVIDIA)"
values: "Dawn Mac x64 DEPS Release (AMD)"
values: "Dawn Mac x64 DEPS Release (Intel)"
values: "Dawn Win10 x64 DEPS Release (Intel HD 630)"
diff --git a/chromium/infra/config/lib/builders.star b/chromium/infra/config/lib/builders.star
index 226ed51648b..a7e1028893e 100644
--- a/chromium/infra/config/lib/builders.star
+++ b/chromium/infra/config/lib/builders.star
@@ -135,6 +135,22 @@ goma = struct(
),
)
+reclient = struct(
+ instance = struct(
+ DEFAULT_TRUSTED = "rbe-chromium-trusted",
+ TEST_TRUSTED = "rbe-chromium-trusted-test",
+ DEFAULT_UNTRUSTED = "rbe-chromium-untrusted",
+ TEST_UNTRUSTED = "rbe-chromium-untrusted-test",
+ ),
+ jobs = struct(
+ DEFAULT = 250,
+ LOW_JOBS_FOR_CI = 80,
+ HIGH_JOBS_FOR_CI = 500,
+ LOW_JOBS_FOR_CQ = 80,
+ HIGH_JOBS_FOR_CQ = 500,
+ ),
+)
+
def _rotation(name):
return branches.value({branches.MAIN: [name]})
diff --git a/chromium/infra/config/lib/ci.star b/chromium/infra/config/lib/ci.star
index edc064ddc5b..e2eea505cae 100644
--- a/chromium/infra/config/lib/ci.star
+++ b/chromium/infra/config/lib/ci.star
@@ -300,14 +300,3 @@ ci = struct(
TREE_CLOSING_NOTIFIERS = ["gpu-tree-closer-email"],
),
)
-
-rbe_instance = struct(
- DEFAULT = "rbe-chromium-trusted",
- GVISOR_SHADOW = "rbe-chromium-gvisor-shadow",
-)
-
-rbe_jobs = struct(
- DEFAULT = 250,
- LOW_JOBS_FOR_CI = 80,
- HIGH_JOBS_FOR_CI = 500,
-)
diff --git a/chromium/infra/config/settings.json b/chromium/infra/config/settings.json
index 77b7934aa29..df4371759a0 100644
--- a/chromium/infra/config/settings.json
+++ b/chromium/infra/config/settings.json
@@ -4,6 +4,7 @@
"ref": "refs/branch-heads/5005",
"chrome_project": "chrome-m102",
"branch_types": [
- "standard"
+ "cros-lts",
+ "desktop-extended-stable"
]
}
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.android.fyi.star b/chromium/infra/config/subprojects/chromium/ci/chromium.android.fyi.star
index 47c15f84924..ca9f78a48f7 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.android.fyi.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.android.fyi.star
@@ -4,8 +4,8 @@
"""Definitions of builders in the chromium.android.fyi builder group."""
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "os", "reclient")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -35,7 +35,7 @@ ci.builder(
# Higher build timeout since dbg ASAN builds can take a while on a clobber
# build.
execution_timeout = 4 * time.hour,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_jobs = 150,
schedule = "triggered", # triggered manually via Scheduler UI
)
@@ -47,8 +47,8 @@ ci.builder(
short_name = "p-arm64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -58,8 +58,8 @@ ci.builder(
short_name = "p-x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -79,8 +79,8 @@ ci.builder(
short_name = "p-x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -90,8 +90,8 @@ ci.builder(
short_name = "p-x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -101,8 +101,8 @@ ci.builder(
short_name = "p-x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -112,8 +112,8 @@ ci.builder(
short_name = "x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -123,8 +123,8 @@ ci.builder(
short_name = "M",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
# Set to an empty list to avoid chromium-gitiles-trigger triggering new
# builds. Also we don't set any `schedule` since this builder is for
# reference only and should not run any new builds.
@@ -155,8 +155,8 @@ ci.builder(
),
execution_timeout = 4 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
# TODO(crbug.com/1022533#c40): Remove this builder once there are no associated
@@ -192,8 +192,8 @@ ci.builder(
short_name = "11",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -216,8 +216,8 @@ ci.builder(
),
notifies = ["annotator-rel"],
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -227,8 +227,8 @@ ci.builder(
short_name = "x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
# TODO(crbug.com/1299910): Move to non-FYI once the tester works fine.
@@ -312,6 +312,6 @@ ci.builder(
category = "cronet|asan",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.android.star b/chromium/infra/config/subprojects/chromium/ci/chromium.android.star
index 8905963349c..f6046c173b5 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.android.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.android.star
@@ -5,9 +5,9 @@
load("//lib/args.star", "args")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os", "sheriff_rotations")
+load("//lib/builders.star", "goma", "os", "reclient", "sheriff_rotations")
load("//lib/branches.star", "branches")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -50,8 +50,8 @@ ci.builder(
# build.
execution_timeout = 4 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
tree_closing = True,
)
@@ -231,8 +231,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
execution_timeout = 4 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
tree_closing = True,
)
@@ -268,8 +268,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
execution_timeout = 7 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
tree_closing = True,
)
@@ -302,8 +302,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
execution_timeout = 7 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -335,8 +335,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
execution_timeout = 6 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -371,8 +371,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -387,8 +387,8 @@ ci.builder(
notifies = ["Deterministic Android"],
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -403,8 +403,8 @@ ci.builder(
notifies = ["Deterministic Android"],
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
ssd = True,
)
@@ -551,8 +551,8 @@ ci.builder(
short_name = "10",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -563,8 +563,8 @@ ci.builder(
),
execution_timeout = 6 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -574,8 +574,8 @@ ci.builder(
short_name = "bfc",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -589,8 +589,8 @@ ci.builder(
executable = "recipe:binary_size_generator_tot",
ssd = True,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
ci.builder(
@@ -626,8 +626,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
notifies = ["cronet"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -663,8 +663,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
notifies = ["cronet"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -675,8 +675,8 @@ ci.builder(
),
notifies = ["cronet"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -687,8 +687,8 @@ ci.builder(
),
notifies = ["cronet"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -698,8 +698,8 @@ ci.builder(
),
notifies = ["cronet"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
# Runs on a specific machine with an attached phone
@@ -715,8 +715,8 @@ ci.builder(
notifies = ["cronet"],
os = os.ANDROID,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
ci.builder(
@@ -751,8 +751,8 @@ ci.builder(
),
notifies = ["cronet"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -968,8 +968,8 @@ ci.builder(
),
notifies = ["cronet"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -1015,8 +1015,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
execution_timeout = 4 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
tree_closing = True,
)
@@ -1053,8 +1053,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
tree_closing = True,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -1064,8 +1064,8 @@ ci.builder(
short_name = "M_non-cq",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -1100,8 +1100,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
triggered_by = ["ci/Android arm64 Builder (dbg)"],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
# TODO(crbug/1182468) Remove android coverage bots after coverage is
@@ -1113,8 +1113,8 @@ ci.builder(
short_name = "p-cov",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
sheriff_rotations = args.ignore_default(None),
)
@@ -1151,8 +1151,8 @@ ci.builder(
execution_timeout = 4 * time.hour,
tree_closing = True,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -1162,8 +1162,8 @@ ci.builder(
short_name = "P",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
# TODO(crbug.com/1137474): Update the console view config once on CQ
@@ -1175,8 +1175,8 @@ ci.builder(
),
tree_closing = True,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
@@ -1187,8 +1187,8 @@ ci.builder(
),
execution_timeout = 4 * time.hour,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.builder(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.angle.star b/chromium/infra/config/subprojects/chromium/ci/chromium.angle.star
index 363a107e5fa..feff9e1dbe7 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.angle.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.angle.star
@@ -3,8 +3,8 @@
# found in the LICENSE file.
"""Definitions of builders in the chromium.angle builder group."""
-load("//lib/builders.star", "goma", "xcode")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "reclient", "xcode")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -42,8 +42,8 @@ ci.gpu.linux_builder(
short_name = "arm64",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
ci.thin_tester(
@@ -62,8 +62,8 @@ ci.gpu.linux_builder(
short_name = "arm64",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
ci.thin_tester(
@@ -90,8 +90,8 @@ ci.gpu.linux_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
ci.thin_tester(
@@ -119,8 +119,8 @@ ci.gpu.linux_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
ci.thin_tester(
@@ -192,8 +192,8 @@ ci.gpu.windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.thin_tester(
@@ -238,8 +238,8 @@ ci.gpu.windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.thin_tester(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.chromiumos.star b/chromium/infra/config/subprojects/chromium/ci/chromium.chromiumos.star
index 0168f101d54..998bbfc0119 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.chromiumos.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.chromiumos.star
@@ -6,8 +6,8 @@
load("//lib/args.star", "args")
load("//lib/branches.star", "branches")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os", "sheriff_rotations")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "os", "reclient", "sheriff_rotations")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -125,8 +125,8 @@ ci.builder(
},
},
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
tree_closing = False,
)
@@ -169,8 +169,8 @@ ci.builder(
),
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
tree_closing = False,
)
@@ -247,8 +247,8 @@ ci.builder(
),
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
tree_closing = False,
)
@@ -352,8 +352,8 @@ ci.builder(
),
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
tree_closing = False,
)
@@ -472,8 +472,8 @@ ci.builder(
),
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
tree_closing = False,
)
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.clang.star b/chromium/infra/config/subprojects/chromium/ci/chromium.clang.star
index eb752b162ca..b31b221aa94 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.clang.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.clang.star
@@ -3,9 +3,9 @@
# found in the LICENSE file.
"""Definitions of builders in the chromium.clang builder group."""
-load("//lib/builders.star", "os", "sheriff_rotations", "xcode")
+load("//lib/builders.star", "os", "reclient", "sheriff_rotations", "xcode")
load("//lib/branches.star", "branches")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -102,8 +102,8 @@ ci.builder(
short_name = "CF",
),
notifies = ["CFI Linux"],
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
ci.builder(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.dawn.star b/chromium/infra/config/subprojects/chromium/ci/chromium.dawn.star
index 431a5e9e91b..72bd9ca2d99 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.dawn.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.dawn.star
@@ -5,8 +5,8 @@
load("//lib/branches.star", "branches")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "reclient")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -44,8 +44,8 @@ ci.gpu.linux_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -76,12 +76,12 @@ ci.gpu.linux_builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.thin_tester(
- name = "Dawn Linux x64 DEPS Release (Intel HD 630)",
+ name = "Dawn Linux x64 DEPS Release (Intel UHD 630)",
branch_selector = branches.STANDARD_MILESTONE,
builder_spec = builder_config.builder_spec(
execution_mode = builder_config.execution_mode.TEST,
@@ -137,7 +137,24 @@ ci.thin_tester(
)
ci.thin_tester(
- name = "Dawn Linux x64 Release (Intel HD 630)",
+ name = "Dawn Linux x64 Release (Intel UHD 630)",
+ builder_spec = builder_config.builder_spec(
+ execution_mode = builder_config.execution_mode.TEST,
+ gclient_config = builder_config.gclient_config(
+ config = "chromium",
+ ),
+ chromium_config = builder_config.chromium_config(
+ config = "chromium",
+ apply_configs = [
+ "mb",
+ ],
+ build_config = builder_config.build_config.RELEASE,
+ target_bits = 64,
+ target_platform = builder_config.target_platform.LINUX,
+ ),
+ build_gs_bucket = "chromium-dawn-archive",
+ run_tests_serially = True,
+ ),
console_view_entry = consoles.console_view_entry(
category = "ToT|Linux|Intel",
short_name = "x64",
@@ -292,8 +309,8 @@ ci.gpu.windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
@@ -303,8 +320,8 @@ ci.gpu.windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
@@ -332,8 +349,8 @@ ci.gpu.windows_builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
# Note that the Win testers are all thin Linux VMs, triggering jobs on the
@@ -419,8 +436,8 @@ ci.gpu.windows_builder(
short_name = "x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
@@ -448,8 +465,8 @@ ci.gpu.windows_builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
# Note that the Win testers are all thin Linux VMs, triggering jobs on the
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.fuzz.star b/chromium/infra/config/subprojects/chromium/ci/chromium.fuzz.star
index 6b9db8d9d35..4a5cc5fce88 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.fuzz.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.fuzz.star
@@ -5,8 +5,8 @@
load("//lib/args.star", "args")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os", "xcode")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "os", "reclient", "xcode")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -64,7 +64,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -77,8 +77,8 @@ ci.builder(
max_concurrent_invocations = 4,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -92,7 +92,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -105,8 +105,8 @@ ci.builder(
max_concurrent_invocations = 4,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -120,7 +120,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -134,8 +134,8 @@ ci.builder(
max_concurrent_invocations = 4,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -148,8 +148,8 @@ ci.builder(
max_concurrent_invocations = 4,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -188,8 +188,8 @@ ci.builder(
),
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
notifies = args.ignore_default(None),
)
@@ -204,7 +204,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -218,7 +218,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -260,7 +260,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -274,7 +274,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -288,7 +288,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -302,7 +302,7 @@ ci.builder(
),
goma_backend = None,
reclient_jobs = 250,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -317,8 +317,8 @@ ci.builder(
max_concurrent_invocations = 7,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -333,8 +333,8 @@ ci.builder(
max_concurrent_invocations = 6,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -373,8 +373,8 @@ ci.builder(
max_concurrent_invocations = 5,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -388,8 +388,8 @@ ci.builder(
max_concurrent_invocations = 5,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
execution_timeout = 4 * time.hour,
)
@@ -404,8 +404,8 @@ ci.builder(
max_concurrent_invocations = 5,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -422,8 +422,8 @@ ci.builder(
max_concurrent_invocations = 5,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -437,8 +437,8 @@ ci.builder(
max_concurrent_invocations = 1,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -452,8 +452,8 @@ ci.builder(
max_concurrent_invocations = 1,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -467,8 +467,8 @@ ci.builder(
max_concurrent_invocations = 3,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -482,8 +482,8 @@ ci.builder(
max_concurrent_invocations = 3,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -497,8 +497,8 @@ ci.builder(
max_concurrent_invocations = 1,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -512,8 +512,8 @@ ci.builder(
max_concurrent_invocations = 1,
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.fyi.star b/chromium/infra/config/subprojects/chromium/ci/chromium.fyi.star
index d0ae957ca32..4758098ff8e 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.fyi.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.fyi.star
@@ -5,8 +5,8 @@
load("//lib/branches.star", "branches")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "cpu", "goma", "os", "xcode")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "cpu", "goma", "os", "reclient", "xcode")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -89,8 +89,8 @@ ci.builder(
),
goma_backend = None,
os = os.LINUX_DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -101,8 +101,8 @@ ci.builder(
notifies = ["Site Isolation Android"],
goma_backend = None,
os = os.LINUX_DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -134,8 +134,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -148,8 +148,8 @@ ci.builder(
notifies = ["chrome-memory-safety"],
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -162,8 +162,8 @@ ci.builder(
notifies = ["chrome-memory-safety"],
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -345,8 +345,8 @@ ci.builder(
notifies = ["annotator-rel"],
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -429,8 +429,8 @@ ci.builder(
notifies = ["linux-blink-fyi-bots"],
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -442,8 +442,8 @@ ci.builder(
notifies = ["v8-sandbox-fyi-bots"],
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -455,8 +455,8 @@ ci.builder(
schedule = "with 12h interval",
triggered_by = [],
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -555,8 +555,8 @@ ci.builder(
notifies = ["chrome-memory-safety"],
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -566,8 +566,8 @@ ci.builder(
),
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -578,8 +578,8 @@ ci.builder(
experimental = True,
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -590,8 +590,8 @@ ci.builder(
experimental = True,
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -602,8 +602,8 @@ ci.builder(
experimental = True,
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
# This is launching & collecting entirely isolated tests.
@@ -649,8 +649,8 @@ ci.builder(
notifies = ["headless-owners"],
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -687,8 +687,8 @@ ci.builder(
notifies = ["chrome-memory-safety"],
os = os.WINDOWS_ANY,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -701,8 +701,8 @@ ci.builder(
notifies = ["chrome-memory-safety"],
os = os.WINDOWS_ANY,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -712,8 +712,8 @@ ci.builder(
),
os = os.WINDOWS_10,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -733,8 +733,8 @@ ci.builder(
),
os = os.LINUX_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -761,8 +761,8 @@ ci.builder(
schedule = "with 3h interval",
triggered_by = [],
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -775,7 +775,7 @@ ci.builder(
executable = "recipe:reclient_goma_comparison",
execution_timeout = 10 * time.hour,
reclient_cache_silo = "Comparison Android - cache siloed",
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_jobs = 250,
os = os.LINUX_DEFAULT,
)
@@ -790,7 +790,7 @@ ci.builder(
executable = "recipe:reclient_goma_comparison",
execution_timeout = 6 * time.hour,
reclient_cache_silo = "Comparison Linux - cache siloed",
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_jobs = 250,
os = os.LINUX_DEFAULT,
)
@@ -806,7 +806,7 @@ ci.builder(
goma_jobs = 80,
executable = "recipe:reclient_goma_comparison",
reclient_cache_silo = "Comparison Windows 8 cores - cache siloed",
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_jobs = 80,
os = os.WINDOWS_DEFAULT,
)
@@ -823,7 +823,7 @@ ci.builder(
executable = "recipe:reclient_goma_comparison",
execution_timeout = 6 * time.hour,
reclient_cache_silo = "Comparison Windows - cache siloed",
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_jobs = 250,
os = os.WINDOWS_DEFAULT,
)
@@ -839,7 +839,7 @@ ci.builder(
executable = "recipe:reclient_goma_comparison",
execution_timeout = 10 * time.hour,
reclient_cache_silo = "Comparison Simple Chrome - cache siloed",
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_jobs = 250,
os = os.LINUX_DEFAULT,
)
@@ -854,7 +854,7 @@ ci.builder(
reclient_rewrapper_env = {
"RBE_platform": "container-image=docker://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:b4dad0bfc4951d619229ab15343a311f2415a16ef83bcaa55b44f4e2bf1cf635,pool=linux-e2-custom_0",
},
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_jobs = 500,
os = os.LINUX_DEFAULT,
schedule = "triggered",
@@ -873,7 +873,7 @@ ci.builder(
goma_backend = None,
os = os.LINUX_DEFAULT,
reclient_jobs = 400,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
# End - Reclient migration, phase 2, block 1 shadow builders
@@ -887,7 +887,7 @@ ci.builder(
os = os.WINDOWS_DEFAULT,
goma_backend = None,
reclient_jobs = 80,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -900,7 +900,7 @@ ci.builder(
os = os.WINDOWS_DEFAULT,
goma_backend = None,
reclient_jobs = 80,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -912,7 +912,7 @@ ci.builder(
),
cores = 32,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
os = os.WINDOWS_DEFAULT,
)
@@ -937,7 +937,7 @@ ci.builder(
),
cores = 32,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_rewrapper_env = {"RBE_compare": "true"},
reclient_ensure_verified = True,
description_html = "verify artifacts. should be removed after the migration. crbug.com/1260232",
@@ -953,7 +953,7 @@ ci.builder(
),
cores = 32,
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_profiler_service = "reclient-win",
reclient_publish_trace = True,
os = os.WINDOWS_DEFAULT,
@@ -968,7 +968,7 @@ fyi_mac_builder(
short_name = "re",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
description_html = "experiment reclient on mac. should be removed after the migration. crbug.com/1244441",
)
@@ -981,7 +981,7 @@ fyi_mac_builder(
short_name = "cmp",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
reclient_rewrapper_env = {"RBE_compare": "true"},
reclient_ensure_verified = True,
description_html = "verify artifacts. should be removed after the migration. crbug.com/1260232",
@@ -999,7 +999,7 @@ fyi_mac_builder(
short_name = "re",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
description_html = "experiment reclient on mac-arm. should be removed after the migration. crbug.com/1252626",
)
@@ -1018,7 +1018,7 @@ ci.builder(
category = "cros x64",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
os = os.LINUX_DEFAULT,
reclient_rewrapper_env = {"RBE_cache_silo": "chromeos-amd64-generic-rel (reclient)"},
)
@@ -1031,7 +1031,7 @@ ci.builder(
short_name = "cmp",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
os = os.LINUX_DEFAULT,
reclient_rewrapper_env = {"RBE_compare": "true"},
reclient_ensure_verified = True,
@@ -1053,7 +1053,7 @@ ci.builder(
category = "lacros x64",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
os = os.LINUX_DEFAULT,
reclient_rewrapper_env = {"RBE_cache_silo": "lacros-amd64-generic-rel (reclient)"},
)
@@ -1073,7 +1073,7 @@ ci.builder(
category = "lacros rel",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
os = os.LINUX_DEFAULT,
reclient_rewrapper_env = {"RBE_cache_silo": "linux-lacros-builder-rel (reclient)"},
)
@@ -1086,8 +1086,8 @@ fyi_celab_builder(
schedule = "0 0,6,12,18 * * *",
triggered_by = [],
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
)
fyi_celab_builder(
@@ -1110,8 +1110,8 @@ fyi_coverage_builder(
triggered_by = [],
use_java_coverage = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
fyi_coverage_builder(
@@ -1124,8 +1124,8 @@ fyi_coverage_builder(
use_clang_coverage = True,
coverage_test_types = ["overall", "unit"],
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
fyi_coverage_builder(
@@ -1280,7 +1280,7 @@ fyi_ios_builder(
# GN args to use goma isn't set, so commenting this out to avoid modifying
# the generated config during the freeze.
# goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
description_html = "experiment reclient for ios. remove after the migration. crbug.com/1254986",
)
@@ -1460,8 +1460,8 @@ ci.builder(
os = os.WINDOWS_10,
notifies = ["Win 10 Fast Ring"],
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -1504,7 +1504,7 @@ ci.builder(
os = os.WINDOWS_DEFAULT,
goma_backend = None,
reclient_jobs = 150,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -1518,6 +1518,6 @@ ci.builder(
notifies = ["annotator-rel"],
os = os.WINDOWS_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star b/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star
index 49a93968ac6..3d173769942 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star
@@ -5,8 +5,8 @@
load("//lib/args.star", "args")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "sheriff_rotations")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "reclient", "sheriff_rotations")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -156,8 +156,8 @@ ci.gpu.linux_builder(
),
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
)
@@ -216,8 +216,8 @@ ci.gpu.linux_builder(
),
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
)
@@ -253,8 +253,8 @@ ci.gpu.linux_builder(
short_name = "arm",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -264,8 +264,8 @@ ci.gpu.linux_builder(
short_name = "arm64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -283,8 +283,8 @@ ci.gpu.linux_builder(
short_name = "rel",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.gpu.linux_builder(
@@ -294,8 +294,8 @@ ci.gpu.linux_builder(
short_name = "dbg",
),
goma_backend = None,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
)
ci.gpu.linux_builder(
@@ -305,8 +305,8 @@ ci.gpu.linux_builder(
short_name = "tsn",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.mac_builder(
@@ -369,11 +369,27 @@ ci.thin_tester(
)
ci.thin_tester(
- name = "Linux FYI Experimental Release (Intel HD 630)",
- console_view_entry = consoles.console_view_entry(
- category = "Linux|Intel",
- short_name = "exp",
+ name = "Linux FYI Experimental Release (Intel UHD 630)",
+ builder_spec = builder_config.builder_spec(
+ execution_mode = builder_config.execution_mode.TEST,
+ gclient_config = builder_config.gclient_config(
+ config = "chromium",
+ ),
+ chromium_config = builder_config.chromium_config(
+ config = "chromium",
+ apply_configs = [
+ "mb",
+ ],
+ build_config = builder_config.build_config.RELEASE,
+ target_bits = 64,
+ ),
+ run_tests_serially = True,
),
+ # Uncomment this entry when this experimental tester is actually in use.
+ # console_view_entry = consoles.console_view_entry(
+ # category = "Linux|Intel",
+ # short_name = "exp",
+ # ),
list_view = "chromium.gpu.experimental",
triggered_by = ["GPU FYI Linux Builder"],
)
@@ -408,23 +424,26 @@ ci.thin_tester(
)
ci.thin_tester(
- name = "Linux FYI Release (Intel HD 630)",
- console_view_entry = consoles.console_view_entry(
- category = "Linux|Intel",
- short_name = "rel",
- ),
- triggered_by = ["GPU FYI Linux Builder"],
-)
-
-ci.thin_tester(
name = "Linux FYI Release (Intel UHD 630)",
+ builder_spec = builder_config.builder_spec(
+ execution_mode = builder_config.execution_mode.TEST,
+ gclient_config = builder_config.gclient_config(
+ config = "chromium",
+ ),
+ chromium_config = builder_config.chromium_config(
+ config = "chromium",
+ apply_configs = [
+ "mb",
+ ],
+ build_config = builder_config.build_config.RELEASE,
+ target_bits = 64,
+ ),
+ run_tests_serially = True,
+ ),
console_view_entry = consoles.console_view_entry(
category = "Linux|Intel",
- short_name = "uhd",
+ short_name = "rel",
),
- # TODO(https://crbug.com/986939): Remove this increased timeout once more
- # devices are added.
- execution_timeout = 18 * time.hour,
triggered_by = ["GPU FYI Linux Builder"],
)
@@ -683,8 +702,8 @@ gpu_fyi_windows_builder(
short_name = "x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
gpu_fyi_windows_builder(
@@ -694,8 +713,8 @@ gpu_fyi_windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
gpu_fyi_windows_builder(
@@ -705,8 +724,8 @@ gpu_fyi_windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
gpu_fyi_windows_builder(
@@ -716,8 +735,8 @@ gpu_fyi_windows_builder(
short_name = "rel",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
gpu_fyi_windows_builder(
@@ -727,8 +746,8 @@ gpu_fyi_windows_builder(
short_name = "dbg",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
gpu_fyi_windows_builder(
@@ -738,6 +757,6 @@ gpu_fyi_windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.star b/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.star
index 027cf7cde53..cf0450143f3 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.gpu.star
@@ -6,8 +6,8 @@
load("//lib/args.star", "args")
load("//lib/branches.star", "branches")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "sheriff_rotations")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "reclient", "sheriff_rotations")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -62,8 +62,8 @@ ci.gpu.linux_builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -92,8 +92,8 @@ ci.gpu.linux_builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -103,8 +103,8 @@ ci.gpu.linux_builder(
),
tree_closing = False,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
)
@@ -171,8 +171,8 @@ ci.gpu.windows_builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
@@ -183,8 +183,8 @@ ci.gpu.windows_builder(
sheriff_rotations = args.ignore_default(None),
tree_closing = False,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.thin_tester(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.linux.star b/chromium/infra/config/subprojects/chromium/ci/chromium.linux.star
index 7886856c3f1..c9dfc13ccfc 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.linux.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.linux.star
@@ -5,9 +5,9 @@
load("//lib/args.star", "args")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os", "sheriff_rotations")
+load("//lib/builders.star", "goma", "os", "reclient", "sheriff_rotations")
load("//lib/branches.star", "branches")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -44,8 +44,8 @@ ci.builder(
),
ssd = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -74,8 +74,8 @@ ci.builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -107,8 +107,8 @@ ci.builder(
# TODO(crbug.com/1173333): Make it tree-closing.
tree_closing = False,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -122,8 +122,8 @@ ci.builder(
os = os.LINUX_BIONIC,
tree_closing = False,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -159,8 +159,8 @@ ci.builder(
tree_closing = False,
notifies = ["Deterministic Linux", "close-on-any-step-failure"],
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -173,8 +173,8 @@ ci.builder(
executable = "recipe:swarming/deterministic_build",
execution_timeout = 7 * time.hour,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -263,8 +263,8 @@ ci.builder(
notifies = args.ignore_default([]),
tree_closing = False,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
)
@@ -295,8 +295,8 @@ ci.builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -321,8 +321,8 @@ ci.builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -352,8 +352,8 @@ ci.builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -421,8 +421,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
triggered_by = ["ci/Linux Builder (dbg)"],
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -504,8 +504,8 @@ ci.builder(
short_name = "nsl",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -565,8 +565,8 @@ ci.builder(
],
notifies = ["cr-fuchsia"],
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
builder_spec = builder_config.builder_spec(
gclient_config = builder_config.gclient_config(
config = "chromium",
@@ -595,8 +595,8 @@ ci.builder(
short_name = "bfc",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -606,8 +606,8 @@ ci.builder(
short_name = "trc",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.memory.star b/chromium/infra/config/subprojects/chromium/ci/chromium.memory.star
index 4a520517e76..c7b6841ad0c 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.memory.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.memory.star
@@ -6,8 +6,8 @@
load("//lib/args.star", "args")
load("//lib/branches.star", "branches")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os", "sheriff_rotations")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "os", "reclient", "sheriff_rotations")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -67,8 +67,8 @@ linux_memory_builder(
os = os.LINUX_BIONIC,
ssd = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
linux_memory_builder(
@@ -151,8 +151,8 @@ linux_memory_builder(
),
cq_mirrors_console_view = "mirrors",
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
linux_memory_builder(
@@ -165,8 +165,8 @@ linux_memory_builder(
# TODO(thakis): Remove once https://crbug.com/927738 is resolved.
execution_timeout = 5 * time.hour,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
linux_memory_builder(
@@ -219,8 +219,8 @@ linux_memory_builder(
short_name = "bld",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
linux_memory_builder(
@@ -230,8 +230,8 @@ linux_memory_builder(
short_name = "tst",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
triggered_by = ["Linux MSan Builder"],
)
@@ -279,8 +279,8 @@ linux_memory_builder(
cq_mirrors_console_view = "mirrors",
triggered_by = ["ci/Linux TSan Builder"],
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -302,8 +302,8 @@ ci.builder(
short_name = "asn",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -313,8 +313,8 @@ ci.builder(
short_name = "lk",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -324,8 +324,8 @@ ci.builder(
short_name = "msn",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -338,8 +338,8 @@ ci.builder(
sheriff_rotations = args.ignore_default(None),
tree_closing = False,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -352,8 +352,8 @@ ci.builder(
cores = 32,
tree_closing = False,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -369,6 +369,6 @@ ci.builder(
builderless = True,
os = os.WINDOWS_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.rust.star b/chromium/infra/config/subprojects/chromium/ci/chromium.rust.star
index 94cfdf5d8ef..6ed97b3fa5b 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.rust.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.rust.star
@@ -3,8 +3,8 @@
# found in the LICENSE file.
"""Definitions of builders in the chromium.rust builder group."""
-load("//lib/builders.star", "goma", "os")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "os", "reclient")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -31,8 +31,8 @@ ci.builder(
short_name = "dbg",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -42,8 +42,8 @@ ci.builder(
short_name = "rel",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.star b/chromium/infra/config/subprojects/chromium/ci/chromium.star
index 0bffdb2b231..6144bf1fb1c 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.star
@@ -5,9 +5,9 @@
load("//lib/args.star", "args")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os", "sheriff_rotations")
+load("//lib/builders.star", "goma", "os", "reclient", "sheriff_rotations")
load("//lib/branches.star", "branches")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -50,8 +50,8 @@ ci.builder(
execution_timeout = 4 * time.hour,
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -74,8 +74,8 @@ ci.builder(
},
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -91,8 +91,8 @@ ci.builder(
# needs longer time to complete.
execution_timeout = 7 * time.hour,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
)
@@ -129,8 +129,8 @@ ci.builder(
cores = 8,
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -154,8 +154,8 @@ ci.builder(
},
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -216,8 +216,8 @@ ci.builder(
sheriff_rotations = args.ignore_default(None),
triggered_by = [],
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -231,8 +231,8 @@ ci.builder(
cores = 32,
execution_timeout = 7 * time.hour,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
sheriff_rotations = args.ignore_default(None),
)
@@ -392,8 +392,8 @@ ci.builder(
os = os.WINDOWS_DEFAULT,
sheriff_rotations = args.ignore_default(None),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -417,8 +417,8 @@ ci.builder(
},
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -445,8 +445,8 @@ ci.builder(
sheriff_rotations = args.ignore_default(None),
triggered_by = [],
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -487,8 +487,8 @@ ci.builder(
os = os.WINDOWS_DEFAULT,
sheriff_rotations = args.ignore_default(None),
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -512,8 +512,8 @@ ci.builder(
},
tree_closing = True,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -540,8 +540,8 @@ ci.builder(
sheriff_rotations = args.ignore_default(None),
triggered_by = [],
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.swangle.star b/chromium/infra/config/subprojects/chromium/ci/chromium.swangle.star
index 5ea741dccad..395487088fe 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.swangle.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.swangle.star
@@ -3,8 +3,8 @@
# found in the LICENSE file.
"""Definitions of builders in the chromium.swangle builder group."""
-load("//lib/builders.star", "goma", "sheriff_rotations")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "reclient", "sheriff_rotations")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -43,8 +43,8 @@ ci.gpu.linux_builder(
),
executable = ci.DEFAULT_EXECUTABLE,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -54,8 +54,8 @@ ci.gpu.linux_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -65,8 +65,8 @@ ci.gpu.linux_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.linux_builder(
@@ -77,8 +77,8 @@ ci.gpu.linux_builder(
),
executable = ci.DEFAULT_EXECUTABLE,
goma_backend = None,
- reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.mac_builder(
@@ -99,8 +99,8 @@ ci.gpu.windows_builder(
),
executable = ci.DEFAULT_EXECUTABLE,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
@@ -119,8 +119,8 @@ ci.gpu.windows_builder(
short_name = "x86",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
@@ -130,8 +130,8 @@ ci.gpu.windows_builder(
short_name = "x64",
),
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
@@ -151,8 +151,8 @@ ci.gpu.windows_builder(
),
executable = ci.DEFAULT_EXECUTABLE,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.gpu.windows_builder(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.updater.star b/chromium/infra/config/subprojects/chromium/ci/chromium.updater.star
index d7bc7f65a9b..c9598042abf 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.updater.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.updater.star
@@ -4,8 +4,8 @@
"""Definitions of builders in the chromium.updater builder group."""
load("//lib/branches.star", "branches")
-load("//lib/builders.star", "goma", "os")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "os", "reclient")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -194,8 +194,8 @@ ci.builder(
),
os = os.WINDOWS_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -207,8 +207,8 @@ ci.builder(
),
os = os.WINDOWS_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -220,8 +220,8 @@ ci.builder(
),
os = os.WINDOWS_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -233,8 +233,8 @@ ci.builder(
),
os = os.WINDOWS_DEFAULT,
goma_backend = None,
- reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.thin_tester(
diff --git a/chromium/infra/config/subprojects/chromium/ci/chromium.win.star b/chromium/infra/config/subprojects/chromium/ci/chromium.win.star
index c8ad0cf4de8..713c7066f11 100644
--- a/chromium/infra/config/subprojects/chromium/ci/chromium.win.star
+++ b/chromium/infra/config/subprojects/chromium/ci/chromium.win.star
@@ -6,8 +6,8 @@
load("//lib/args.star", "args")
load("//lib/branches.star", "branches")
load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os", "sheriff_rotations")
-load("//lib/ci.star", "ci", "rbe_instance", "rbe_jobs")
+load("//lib/builders.star", "goma", "os", "reclient", "sheriff_rotations")
+load("//lib/ci.star", "ci")
load("//lib/consoles.star", "consoles")
ci.defaults.set(
@@ -84,8 +84,8 @@ ci.builder(
cores = 32,
os = os.WINDOWS_ANY,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -98,8 +98,8 @@ ci.builder(
cores = 32,
os = os.WINDOWS_ANY,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -221,8 +221,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
os = os.WINDOWS_ANY,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
@@ -254,8 +254,8 @@ ci.builder(
cq_mirrors_console_view = "mirrors",
os = os.WINDOWS_ANY,
goma_backend = None,
- reclient_jobs = rbe_jobs.DEFAULT,
- reclient_instance = rbe_instance.DEFAULT,
+ reclient_jobs = reclient.jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
)
ci.builder(
diff --git a/chromium/infra/config/subprojects/chromium/gpu.try.star b/chromium/infra/config/subprojects/chromium/gpu.try.star
index d239179dbfb..08d19d84ed7 100644
--- a/chromium/infra/config/subprojects/chromium/gpu.try.star
+++ b/chromium/infra/config/subprojects/chromium/gpu.try.star
@@ -152,11 +152,19 @@ gpu_linux_builder(
gpu_linux_builder(
name = "gpu-fyi-try-linux-intel-exp",
+ mirrors = [
+ "ci/GPU FYI Linux Builder",
+ "ci/Linux FYI Experimental Release (Intel UHD 630)",
+ ],
pool = "luci.chromium.gpu.linux.intel.try",
)
gpu_linux_builder(
name = "gpu-fyi-try-linux-intel-rel",
+ mirrors = [
+ "ci/GPU FYI Linux Builder",
+ "ci/Linux FYI Release (Intel UHD 630)",
+ ],
pool = "luci.chromium.gpu.linux.intel.try",
)
diff --git a/chromium/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star b/chromium/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star
index d2b88091e6e..91034962682 100644
--- a/chromium/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star
+++ b/chromium/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star
@@ -29,7 +29,7 @@ try_.builder(
branch_selector = branches.STANDARD_MILESTONE,
mirrors = [
"ci/Dawn Linux x64 DEPS Builder",
- "ci/Dawn Linux x64 DEPS Release (Intel HD 630)",
+ "ci/Dawn Linux x64 DEPS Release (Intel UHD 630)",
"ci/Dawn Linux x64 DEPS Release (NVIDIA)",
],
main_list_view = "try",
@@ -133,6 +133,14 @@ try_.builder(
try_.builder(
name = "linux-dawn-rel",
+ mirrors = [
+ "ci/Dawn Linux x64 Builder",
+ "ci/Dawn Linux x64 Release (Intel UHD 630)",
+ "ci/Dawn Linux x64 Release (NVIDIA)",
+ ],
+ test_presentation = resultdb.test_presentation(
+ grouping_keys = ["status", "v.test_suite", "v.gpu"],
+ ),
)
try_.builder(
diff --git a/chromium/infra/config/subprojects/findit/findit.star b/chromium/infra/config/subprojects/findit/findit.star
index 385c7ba6aca..b7a1063d5e3 100644
--- a/chromium/infra/config/subprojects/findit/findit.star
+++ b/chromium/infra/config/subprojects/findit/findit.star
@@ -2,9 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-load("//lib/builders.star", "builder", "defaults", "goma")
+load("//lib/builders.star", "builder", "defaults", "goma", "reclient")
load("//lib/consoles.star", "consoles")
-load("//lib/ci.star", "rbe_instance", "rbe_jobs")
load("//lib/swarming.star", swarming_lib = "swarming")
luci.bucket(
@@ -62,6 +61,6 @@ builder(
name = "findit-rerun",
executable = "recipe:findit/chromium/single_revision",
goma_backend = goma.backend.RBE_PROD,
- reclient_instance = rbe_instance.DEFAULT,
- reclient_jobs = rbe_jobs.DEFAULT,
+ reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+ reclient_jobs = reclient.jobs.DEFAULT,
)
diff --git a/chromium/infra/orchestrator/BUILD.gn b/chromium/infra/orchestrator/BUILD.gn
index 624de2e75eb..15f791efc85 100644
--- a/chromium/infra/orchestrator/BUILD.gn
+++ b/chromium/infra/orchestrator/BUILD.gn
@@ -14,12 +14,20 @@ group("orchestrator_all") {
# profile information
":code_coverage_merge_results_py",
":code_coverage_merge_steps_py",
+ ":process_perf_results_py",
":standard_gtest_merge_py",
":standard_isolated_script_merge_py",
]
- # Test specs the Orchestrator needs to trigger swarming tests
- data = [ "//testing/buildbot/*.json" ]
+ data = [
+ # Various merge/collect scripts will likely need a venv specified in
+ # the root vpython spec files.
+ "//.vpython",
+ "//.vpython3",
+
+ # Test specs the Orchestrator needs to trigger swarming tests
+ "//testing/buildbot/*.json",
+ ]
# coverage tool for the Orchestrator to merge and output coverage data
if (use_clang_coverage) {
@@ -54,3 +62,16 @@ python_library("code_coverage_merge_results_py") {
python_library("code_coverage_merge_steps_py") {
pydeps_file = "//testing/merge_scripts/code_coverage/merge_steps.pydeps"
}
+
+python_library("process_perf_results_py") {
+ pydeps_file = "//tools/perf/process_perf_results.pydeps"
+
+ # Telemetry fails if catapult's vendored libs aren't present on the
+ # filesystem. But since process_perf_results.py doesn't ever import any of
+ # them, build/print_python_deps.py doesn't detect them. So to appease
+ # telemetry, just add the needed dirs directly.
+ data = [
+ "//third_party/catapult/telemetry/third_party/",
+ "//third_party/catapult/third_party/six/",
+ ]
+}
diff --git a/chromium/mojo/public/cpp/bindings/interface_endpoint_client.h b/chromium/mojo/public/cpp/bindings/interface_endpoint_client.h
index 01cba995429..d3a1ab3a13a 100644
--- a/chromium/mojo/public/cpp/bindings/interface_endpoint_client.h
+++ b/chromium/mojo/public/cpp/bindings/interface_endpoint_client.h
@@ -222,20 +222,32 @@ class COMPONENT_EXPORT(MOJO_CPP_BINDINGS) InterfaceEndpointClient
void ForgetAsyncRequest(uint64_t request_id);
private:
- // Maps from the id of a response to the MessageReceiver that handles the
- // response.
- using AsyncResponderMap =
- std::map<uint64_t, std::unique_ptr<MessageReceiver>>;
+ struct PendingAsyncResponse {
+ public:
+ PendingAsyncResponse(uint32_t request_message_name,
+ std::unique_ptr<MessageReceiver> responder);
+ PendingAsyncResponse(PendingAsyncResponse&&);
+ PendingAsyncResponse(const PendingAsyncResponse&) = delete;
+ PendingAsyncResponse& operator=(PendingAsyncResponse&&);
+ PendingAsyncResponse& operator=(const PendingAsyncResponse&) = delete;
+ ~PendingAsyncResponse();
+
+ uint32_t request_message_name;
+ std::unique_ptr<MessageReceiver> responder;
+ };
+
+ using AsyncResponderMap = std::map<uint64_t, PendingAsyncResponse>;
struct SyncResponseInfo {
public:
- explicit SyncResponseInfo(bool* in_response_received);
+ SyncResponseInfo(uint32_t request_message_name, bool* in_response_received);
SyncResponseInfo(const SyncResponseInfo&) = delete;
SyncResponseInfo& operator=(const SyncResponseInfo&) = delete;
~SyncResponseInfo();
+ uint32_t request_message_name;
Message response;
// Points to a stack-allocated variable.
diff --git a/chromium/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc b/chromium/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
index b9db8f31a42..6e87db197c6 100644
--- a/chromium/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
+++ b/chromium/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
@@ -28,6 +28,7 @@
#include "mojo/public/cpp/bindings/sync_call_restrictions.h"
#include "mojo/public/cpp/bindings/sync_event_watcher.h"
#include "mojo/public/cpp/bindings/thread_safe_proxy.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_mojo_event_info.pbzero.h"
namespace mojo {
@@ -314,9 +315,27 @@ class ResponderThunk : public MessageReceiverWithStatus {
// ----------------------------------------------------------------------------
+InterfaceEndpointClient::PendingAsyncResponse::PendingAsyncResponse(
+ uint32_t request_message_name,
+ std::unique_ptr<MessageReceiver> responder)
+ : request_message_name(request_message_name),
+ responder(std::move(responder)) {}
+
+InterfaceEndpointClient::PendingAsyncResponse::PendingAsyncResponse(
+ PendingAsyncResponse&&) = default;
+
+InterfaceEndpointClient::PendingAsyncResponse&
+InterfaceEndpointClient::PendingAsyncResponse::operator=(
+ PendingAsyncResponse&&) = default;
+
+InterfaceEndpointClient::PendingAsyncResponse::~PendingAsyncResponse() =
+ default;
+
InterfaceEndpointClient::SyncResponseInfo::SyncResponseInfo(
+ uint32_t request_message_name,
bool* in_response_received)
- : response_received(in_response_received) {}
+ : request_message_name(request_message_name),
+ response_received(in_response_received) {}
InterfaceEndpointClient::SyncResponseInfo::~SyncResponseInfo() {}
@@ -604,6 +623,7 @@ bool InterfaceEndpointClient::SendMessageWithResponder(
// message before calling |SendMessage()| below.
#endif
+ const uint32_t message_name = message->name();
const bool is_sync = message->has_flag(Message::kFlagIsSync);
const bool exclusive_wait = message->has_flag(Message::kFlagNoInterrupt);
if (!controller_->SendMessage(message))
@@ -620,7 +640,8 @@ bool InterfaceEndpointClient::SendMessageWithResponder(
controller_->RegisterExternalSyncWaiter(request_id);
}
base::AutoLock lock(async_responders_lock_);
- async_responders_[request_id] = std::move(responder);
+ async_responders_.emplace(
+ request_id, PendingAsyncResponse{message_name, std::move(responder)});
return true;
}
@@ -628,7 +649,8 @@ bool InterfaceEndpointClient::SendMessageWithResponder(
bool response_received = false;
sync_responses_.insert(std::make_pair(
- request_id, std::make_unique<SyncResponseInfo>(&response_received)));
+ request_id,
+ std::make_unique<SyncResponseInfo>(message_name, &response_received)));
base::WeakPtr<InterfaceEndpointClient> weak_self =
weak_ptr_factory_.GetWeakPtr();
@@ -806,13 +828,13 @@ void InterfaceEndpointClient::ResetFromAnotherSequenceUnsafe() {
}
void InterfaceEndpointClient::ForgetAsyncRequest(uint64_t request_id) {
- std::unique_ptr<MessageReceiver> responder;
+ absl::optional<PendingAsyncResponse> response;
{
base::AutoLock lock(async_responders_lock_);
auto it = async_responders_.find(request_id);
if (it == async_responders_.end())
return;
- responder = std::move(it->second);
+ response = std::move(it->second);
async_responders_.erase(it);
}
}
@@ -893,6 +915,10 @@ bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) {
return false;
if (it->second) {
+ if (message->name() != it->second->request_message_name) {
+ return false;
+ }
+
it->second->response = std::move(*message);
*it->second->response_received = true;
return true;
@@ -903,18 +929,22 @@ bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) {
sync_responses_.erase(it);
}
- std::unique_ptr<MessageReceiver> responder;
+ absl::optional<PendingAsyncResponse> pending_response;
{
base::AutoLock lock(async_responders_lock_);
auto it = async_responders_.find(request_id);
if (it == async_responders_.end())
return false;
- responder = std::move(it->second);
+ pending_response = std::move(it->second);
async_responders_.erase(it);
}
+ if (message->name() != pending_response->request_message_name) {
+ return false;
+ }
+
internal::MessageDispatchContext dispatch_context(message);
- return responder->Accept(message);
+ return pending_response->responder->Accept(message);
} else {
if (mojo::internal::ControlMessageHandler::IsControlMessage(message))
return control_message_handler_.Accept(message);
diff --git a/chromium/net/base/features.cc b/chromium/net/base/features.cc
index 20b3b04f50d..e2a91634275 100644
--- a/chromium/net/base/features.cc
+++ b/chromium/net/base/features.cc
@@ -293,5 +293,14 @@ const base::Feature kClampCookieExpiryTo400Days(
"ClampCookieExpiryTo400Days",
base::FEATURE_DISABLED_BY_DEFAULT);
+const base::Feature kAlpsParsing{"AlpsParsing",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
+const base::Feature kAlpsClientHintParsing{"AlpsClientHintParsing",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
+const base::Feature kShouldKillSessionOnAcceptChMalformed{
+ "ShouldKillSessionOnAcceptChMalformed", base::FEATURE_DISABLED_BY_DEFAULT};
+
} // namespace features
} // namespace net
diff --git a/chromium/net/base/features.h b/chromium/net/base/features.h
index ca9fe8f6922..469ffec6760 100644
--- a/chromium/net/base/features.h
+++ b/chromium/net/base/features.h
@@ -430,6 +430,15 @@ NET_EXPORT extern const base::Feature kSandboxHttpCache;
// future.
NET_EXPORT extern const base::Feature kClampCookieExpiryTo400Days;
+// Whether ALPS parsing is on for any type of frame.
+NET_EXPORT extern const base::Feature kAlpsParsing;
+
+// Whether ALPS parsing is on for client hint parsing specifically.
+NET_EXPORT extern const base::Feature kAlpsClientHintParsing;
+
+// Whether to kill the session on Error::kAcceptChMalformed.
+NET_EXPORT extern const base::Feature kShouldKillSessionOnAcceptChMalformed;
+
} // namespace features
} // namespace net
diff --git a/chromium/net/cookies/canonical_cookie.cc b/chromium/net/cookies/canonical_cookie.cc
index 053f760ed76..d0120b13c5c 100644
--- a/chromium/net/cookies/canonical_cookie.cc
+++ b/chromium/net/cookies/canonical_cookie.cc
@@ -56,6 +56,7 @@
#include "base/metrics/histogram_macros.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "net/base/features.h"
@@ -558,6 +559,11 @@ std::unique_ptr<CanonicalCookie> CanonicalCookie::Create(
CookiePrefix prefix = GetCookiePrefix(parsed_cookie.Name());
bool is_cookie_prefix_valid = IsCookiePrefixValid(prefix, url, parsed_cookie);
RecordCookiePrefixMetrics(prefix, is_cookie_prefix_valid);
+
+ if (parsed_cookie.Name() == "") {
+ is_cookie_prefix_valid = !HasHiddenPrefixName(parsed_cookie.Value());
+ }
+
if (!is_cookie_prefix_valid) {
DVLOG(net::cookie_util::kVlogSetCookies)
<< "Create() failed because the cookie violated prefix rules.";
@@ -768,6 +774,11 @@ std::unique_ptr<CanonicalCookie> CanonicalCookie::CreateSanitizedCookie(
net::CookieInclusionStatus::EXCLUDE_INVALID_PREFIX);
}
+ if (name == "" && HasHiddenPrefixName(value)) {
+ status->AddExclusionReason(
+ net::CookieInclusionStatus::EXCLUDE_INVALID_PREFIX);
+ }
+
if (!IsCookieSamePartyValid(same_party, secure, same_site)) {
status->AddExclusionReason(
net::CookieInclusionStatus::EXCLUDE_INVALID_SAMEPARTY);
@@ -1472,6 +1483,9 @@ bool CanonicalCookie::IsCanonicalForFromStorage() const {
return false;
}
+ if (name_ == "" && HasHiddenPrefixName(value_))
+ return false;
+
if (!IsCookieSamePartyValid(same_party_, secure_, same_site_))
return false;
@@ -1594,6 +1608,40 @@ CookieEffectiveSameSite CanonicalCookie::GetEffectiveSameSite(
}
}
+// static
+bool CanonicalCookie::HasHiddenPrefixName(
+ const base::StringPiece cookie_value) {
+ // Skip BWS as defined by HTTPSEM as SP or HTAB (0x20 or 0x9).
+ base::StringPiece value_without_BWS =
+ base::TrimString(cookie_value, " \t", base::TRIM_LEADING);
+
+ const base::StringPiece host_prefix = "__Host-";
+
+ // Compare the value to the host_prefix.
+ if (base::StartsWith(value_without_BWS, host_prefix)) {
+ // The prefix matches, now check if the value string contains a subsequent
+ // '='.
+ if (value_without_BWS.find_first_of('=', host_prefix.size()) !=
+ base::StringPiece::npos) {
+ // This value contains a hidden prefix name.
+ return true;
+ }
+ return false;
+ }
+
+ // Do a similar check for the secure prefix
+ const base::StringPiece secure_prefix = "__Secure-";
+
+ if (base::StartsWith(value_without_BWS, secure_prefix)) {
+ if (value_without_BWS.find_first_of('=', secure_prefix.size()) !=
+ base::StringPiece::npos) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool CanonicalCookie::IsRecentlyCreated(base::TimeDelta age_threshold) const {
return (base::Time::Now() - creation_date_) <= age_threshold;
}
diff --git a/chromium/net/cookies/canonical_cookie.h b/chromium/net/cookies/canonical_cookie.h
index 19acf0a8821..0283553acf8 100644
--- a/chromium/net/cookies/canonical_cookie.h
+++ b/chromium/net/cookies/canonical_cookie.h
@@ -11,6 +11,7 @@
#include <vector>
#include "base/gtest_prod_util.h"
+#include "base/strings/string_piece.h"
#include "base/time/time.h"
#include "net/base/net_export.h"
#include "net/cookies/cookie_access_result.h"
@@ -421,6 +422,7 @@ class NET_EXPORT CanonicalCookie {
private:
FRIEND_TEST_ALL_PREFIXES(CanonicalCookieTest, TestPrefixHistograms);
+ FRIEND_TEST_ALL_PREFIXES(CanonicalCookieTest, TestHasHiddenPrefixName);
// This constructor does not validate or canonicalize their inputs;
// the resulting CanonicalCookies should not be relied on to be canonical
@@ -484,6 +486,9 @@ class NET_EXPORT CanonicalCookie {
CookieEffectiveSameSite GetEffectiveSameSite(
CookieAccessSemantics access_semantics) const;
+ // Checks for values that could be misinterpreted as a cookie name prefix.
+ static bool HasHiddenPrefixName(const base::StringPiece cookie_value);
+
// Returns whether the cookie was created at most |age_threshold| ago.
bool IsRecentlyCreated(base::TimeDelta age_threshold) const;
diff --git a/chromium/net/cookies/canonical_cookie_unittest.cc b/chromium/net/cookies/canonical_cookie_unittest.cc
index 7d8a0151548..da01a7888dc 100644
--- a/chromium/net/cookies/canonical_cookie_unittest.cc
+++ b/chromium/net/cookies/canonical_cookie_unittest.cc
@@ -2348,6 +2348,18 @@ TEST(CanonicalCookieTest, SecureCookiePrefix) {
absl::nullopt /* cookie_partition_key */, &status));
EXPECT_TRUE(status.HasExactlyExclusionReasonsForTesting(
{CookieInclusionStatus::EXCLUDE_INVALID_PREFIX}));
+
+ // Hidden __Secure- prefixes should be rejected.
+ EXPECT_FALSE(CanonicalCookie::Create(
+ https_url, "=__Secure-A=B; Secure", creation_time, server_time,
+ absl::nullopt /* cookie_partition_key */, &status));
+ EXPECT_TRUE(status.HasExactlyExclusionReasonsForTesting(
+ {CookieInclusionStatus::EXCLUDE_INVALID_PREFIX}));
+
+ // While tricky, this isn't considered hidden and is fine.
+ EXPECT_TRUE(CanonicalCookie::Create(
+ https_url, "A=__Secure-A=B; Secure", creation_time, server_time,
+ absl::nullopt /* cookie_partition_key */));
}
TEST(CanonicalCookieTest, HostCookiePrefix) {
@@ -2432,6 +2444,18 @@ TEST(CanonicalCookieTest, HostCookiePrefix) {
EXPECT_TRUE(CanonicalCookie::Create(
https_url, "__HostA=B; Domain=" + domain + "; Secure;", creation_time,
server_time, absl::nullopt /* cookie_partition_key */));
+
+ // Hidden __Host- prefixes should be rejected.
+ EXPECT_FALSE(CanonicalCookie::Create(
+ https_url, "=__Host-A=B; Path=/; Secure;", creation_time, server_time,
+ absl::nullopt /* cookie_partition_key */, &status));
+ EXPECT_TRUE(status.HasExactlyExclusionReasonsForTesting(
+ {CookieInclusionStatus::EXCLUDE_INVALID_PREFIX}));
+
+ // While tricky, this isn't considered hidden and is fine.
+ EXPECT_TRUE(CanonicalCookie::Create(
+ https_url, "A=__Host-A=B; Path=/; Secure;", creation_time, server_time,
+ absl::nullopt /* cookie_partition_key */));
}
TEST(CanonicalCookieTest, CanCreateSecureCookiesFromAnyScheme) {
@@ -2874,6 +2898,31 @@ TEST(CanonicalCookieTest, IsCanonical) {
CookiePartitionKey::FromURLForTesting(
GURL("https://toplevelsite.com")))
->IsCanonical());
+
+ // Hidden cookie prefixes.
+ EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+ "", "__Secure-a=b", "x.y", "/", base::Time(), base::Time(),
+ base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+ COOKIE_PRIORITY_LOW, false)
+ ->IsCanonical());
+
+ EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+ "", "__Host-a=b", "x.y", "/", base::Time(), base::Time(),
+ base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+ COOKIE_PRIORITY_LOW, false)
+ ->IsCanonical());
+
+ EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+ "a", "__Secure-a=b", "x.y", "/", base::Time(), base::Time(),
+ base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+ COOKIE_PRIORITY_LOW, false)
+ ->IsCanonical());
+
+ EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+ "a", "__Host-a=b", "x.y", "/", base::Time(), base::Time(),
+ base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+ COOKIE_PRIORITY_LOW, false)
+ ->IsCanonical());
}
TEST(CanonicalCookieTest, TestSetCreationDate) {
@@ -3525,6 +3574,39 @@ TEST(CanonicalCookieTest, CreateSanitizedCookie_Logic) {
false /*same_party*/, absl::nullopt /*partition_key*/, &status));
EXPECT_TRUE(status.IsInclude());
+ // Cookies with hidden prefixes should be rejected.
+
+ EXPECT_FALSE(CanonicalCookie::CreateSanitizedCookie(
+ GURL("https://www.foo.com"), "", "__Host-A=B", "", "/", two_hours_ago,
+ one_hour_from_now, one_hour_ago, true, false,
+ CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT,
+ false /*same_party*/, absl::nullopt /*partition_key*/, &status));
+ EXPECT_TRUE(status.HasExactlyExclusionReasonsForTesting(
+ {CookieInclusionStatus::EXCLUDE_INVALID_PREFIX}));
+
+ EXPECT_FALSE(CanonicalCookie::CreateSanitizedCookie(
+ GURL("https://www.foo.com"), "", "__Secure-A=B", "", "/", two_hours_ago,
+ one_hour_from_now, one_hour_ago, true, false,
+ CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT,
+ false /*same_party*/, absl::nullopt /*partition_key*/, &status));
+ EXPECT_TRUE(status.HasExactlyExclusionReasonsForTesting(
+ {CookieInclusionStatus::EXCLUDE_INVALID_PREFIX}));
+
+ // While tricky, this aren't considered hidden prefixes and should succeed.
+ EXPECT_TRUE(CanonicalCookie::CreateSanitizedCookie(
+ GURL("https://www.foo.com"), "A", "__Host-A=B", "", "/", two_hours_ago,
+ one_hour_from_now, one_hour_ago, true, false,
+ CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT,
+ false /*same_party*/, absl::nullopt /*partition_key*/, &status));
+ EXPECT_TRUE(status.IsInclude());
+
+ EXPECT_TRUE(CanonicalCookie::CreateSanitizedCookie(
+ GURL("https://www.foo.com"), "A", "__Secure-A=B", "", "/", two_hours_ago,
+ one_hour_from_now, one_hour_ago, true, false,
+ CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT,
+ false /*same_party*/, absl::nullopt /*partition_key*/, &status));
+ EXPECT_TRUE(status.IsInclude());
+
// SameParty attribute requires Secure and forbids SameSite=Strict.
EXPECT_TRUE(CanonicalCookie::CreateSanitizedCookie(
GURL("https://www.foo.com"), "A", "B", ".www.foo.com", "/", two_hours_ago,
@@ -5114,4 +5196,47 @@ TEST(CanonicalCookieTest, TestIsCanonicalWithInvalidSizeHistograms) {
histograms.ExpectBucketCount(kFromStorageWithValidLengthHistogram, kValid, 1);
}
+TEST(CanonicalCookieTest, TestHasHiddenPrefixName) {
+ const struct {
+ const char* value;
+ bool result;
+ } kTestCases[] = {
+ {"", false},
+ {" ", false},
+ {"foobar=", false},
+ {"foo=bar", false},
+ {" \t ", false},
+ {"\t", false},
+ {"__Secure-abc", false},
+ {"__Secur=e-abc", false},
+ {"__Secureabc", false},
+ {"__Host-abc", false},
+ {"__Hos=t-abc", false},
+ {"_Host", false},
+ {" __Secure-abc", false},
+ {"\t__Host-", false},
+ {"a__Host-abc=123", false},
+ {"a__Secure-abc=123", false},
+ {"__Host-abc=", true},
+ {"__Host-abc=123", true},
+ {" __Host-abc=123", true},
+ {" __Host-abc=", true},
+ {"\t\t\t\t\t__Host-abc=123", true},
+ {"\t __Host-abc=", true},
+ {"__Secure-abc=", true},
+ {"__Secure-abc=123", true},
+ {" __Secure-abc=123", true},
+ {" __Secure-abc=", true},
+ {"\t\t\t\t\t__Secure-abc=123", true},
+ {"\t __Secure-abc=", true},
+ {"__Secure-abc=123=d=4=fg=", true},
+ };
+
+ for (auto test_case : kTestCases) {
+ EXPECT_EQ(CanonicalCookie::HasHiddenPrefixName(test_case.value),
+ test_case.result)
+ << test_case.value << " failed check";
+ }
+}
+
} // namespace net
diff --git a/chromium/net/http/transport_security_state_static.json.gz b/chromium/net/http/transport_security_state_static.json.gz
index df8112dc1ce..4aadbc25d28 100644
--- a/chromium/net/http/transport_security_state_static.json.gz
+++ b/chromium/net/http/transport_security_state_static.json.gz
Binary files differ
diff --git a/chromium/net/spdy/alps_decoder.cc b/chromium/net/spdy/alps_decoder.cc
index 69c8b710387..fb43d876a23 100644
--- a/chromium/net/spdy/alps_decoder.cc
+++ b/chromium/net/spdy/alps_decoder.cc
@@ -4,6 +4,10 @@
#include "net/spdy/alps_decoder.h"
+#include "base/feature_list.h"
+#include "base/metrics/histogram_functions.h"
+#include "net/base/features.h"
+
namespace net {
namespace {
@@ -101,23 +105,34 @@ bool AlpsDecoder::AcceptChParser::OnFrameHeader(spdy::SpdyStreamId stream_id,
size_t length,
uint8_t type,
uint8_t flags) {
- if (type != static_cast<uint8_t>(spdy::SpdyFrameType::ACCEPT_CH) ||
- error_ != Error::kNoError) {
- // Ignore every frame except for ACCEPT_CH.
- // Ignore data after an error has occurred.
- // Returning false causes Http2DecoderAdapter not to call OnFramePayload().
- return false;
- }
- if (stream_id != 0) {
- error_ = Error::kAcceptChInvalidStream;
+ // Ignore data after an error has occurred.
+ if (error_ != Error::kNoError)
return false;
- }
- if (flags != 0) {
- error_ = Error::kAcceptChWithFlags;
+ // Stop all alps parsing if it's disabled.
+ if (!base::FeatureList::IsEnabled(features::kAlpsParsing))
return false;
+ // Handle per-type parsing.
+ switch (type) {
+ case static_cast<uint8_t>(spdy::SpdyFrameType::ACCEPT_CH): {
+ // Stop alps client hint parsing if it's disabled.
+ if (!base::FeatureList::IsEnabled(features::kAlpsClientHintParsing))
+ return false;
+ // Check for issues with the frame.
+ if (stream_id != 0) {
+ error_ = Error::kAcceptChInvalidStream;
+ return false;
+ }
+ if (flags != 0) {
+ error_ = Error::kAcceptChWithFlags;
+ return false;
+ }
+ // This frame can be parsed in OnFramePayload.
+ return true;
+ }
+ default:
+ // Ignore all other types.
+ return false;
}
-
- return true;
}
void AlpsDecoder::AcceptChParser::OnFramePayload(const char* data, size_t len) {
@@ -130,8 +145,18 @@ void AlpsDecoder::AcceptChParser::OnFramePayload(const char* data, size_t len) {
base::StringPiece value;
if (!ReadUint16PrefixedStringPiece(&payload, &origin) ||
!ReadUint16PrefixedStringPiece(&payload, &value)) {
- error_ = Error::kAcceptChMalformed;
- return;
+ if (base::FeatureList::IsEnabled(
+ features::kShouldKillSessionOnAcceptChMalformed)) {
+ // This causes a session termination.
+ error_ = Error::kAcceptChMalformed;
+ return;
+ } else {
+ // This logs that a session termination was bypassed.
+ base::UmaHistogramEnumeration(
+ "Net.SpdySession.AlpsDecoderStatus.Bypassed",
+ Error::kAcceptChMalformed);
+ return;
+ }
}
accept_ch_.push_back(
spdy::AcceptChOriginValuePair{std::string(origin), std::string(value)});
diff --git a/chromium/net/spdy/alps_decoder_test.cc b/chromium/net/spdy/alps_decoder_test.cc
index 80c98c3a424..5f155e5c97d 100644
--- a/chromium/net/spdy/alps_decoder_test.cc
+++ b/chromium/net/spdy/alps_decoder_test.cc
@@ -4,6 +4,9 @@
#include "net/spdy/alps_decoder.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
+#include "net/base/features.h"
#include "net/base/hex_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -123,6 +126,58 @@ TEST(AlpsDecoderTest, ParseLargeAcceptChFrame) {
accept_ch_tokens}));
}
+TEST(AlpsDecoderTest, DisableAlpsParsing) {
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndDisableFeature(features::kAlpsParsing);
+ AlpsDecoder decoder;
+ AlpsDecoder::Error error = decoder.Decode(HexDecode(
+ // ACCEPT_CH frame
+ "00003d" // length
+ "89" // type ACCEPT_CH
+ "00" // flags
+ "00000000" // stream ID
+ "0017" // origin length
+ "68747470733a2f2f7777772e" //
+ "6578616d706c652e636f6d" // origin "https://www.example.com"
+ "0003" // value length
+ "666f6f" // value "foo"
+ "0018" // origin length
+ "68747470733a2f2f6d61696c" //
+ "2e6578616d706c652e636f6d" // origin "https://mail.example.com"
+ "0003" // value length
+ "626172" // value "bar"
+ ));
+
+ EXPECT_EQ(AlpsDecoder::Error::kNoError, error);
+ EXPECT_THAT(decoder.GetAcceptCh(), IsEmpty());
+}
+
+TEST(AlpsDecoderTest, DisableAlpsClientHintParsing) {
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndDisableFeature(features::kAlpsClientHintParsing);
+ AlpsDecoder decoder;
+ AlpsDecoder::Error error = decoder.Decode(HexDecode(
+ // ACCEPT_CH frame
+ "00003d" // length
+ "89" // type ACCEPT_CH
+ "00" // flags
+ "00000000" // stream ID
+ "0017" // origin length
+ "68747470733a2f2f7777772e" //
+ "6578616d706c652e636f6d" // origin "https://www.example.com"
+ "0003" // value length
+ "666f6f" // value "foo"
+ "0018" // origin length
+ "68747470733a2f2f6d61696c" //
+ "2e6578616d706c652e636f6d" // origin "https://mail.example.com"
+ "0003" // value length
+ "626172" // value "bar"
+ ));
+
+ EXPECT_EQ(AlpsDecoder::Error::kNoError, error);
+ EXPECT_THAT(decoder.GetAcceptCh(), IsEmpty());
+}
+
TEST(AlpsDecoderTest, IncompleteFrame) {
AlpsDecoder decoder;
AlpsDecoder::Error error =
@@ -262,7 +317,23 @@ TEST(AlpsDecoderTest, UnknownFrame) {
EXPECT_EQ(0, decoder.settings_frame_count());
}
-TEST(AlpsDecoderTest, MalformedAcceptChFrame) {
+class AlpsDecoderTestWithFeature : public ::testing::TestWithParam<bool> {
+ public:
+ bool ShouldKillSessionOnAcceptChMalformed() { return GetParam(); }
+
+ private:
+ void SetUp() override {
+ feature_list_.InitWithFeatureState(
+ features::kShouldKillSessionOnAcceptChMalformed,
+ ShouldKillSessionOnAcceptChMalformed());
+ }
+
+ base::test::ScopedFeatureList feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(All, AlpsDecoderTestWithFeature, testing::Bool());
+
+TEST_P(AlpsDecoderTestWithFeature, MalformedAcceptChFrame) {
// Correct, complete payload.
std::string payload = HexDecode(
"0017" // origin length
@@ -273,6 +344,7 @@ TEST(AlpsDecoderTest, MalformedAcceptChFrame) {
for (uint8_t payload_length = 1; payload_length < payload.length();
payload_length++) {
+ base::HistogramTester histogram_tester;
// First two bytes of length.
std::string frame = HexDecode("0000");
// Last byte of length.
@@ -287,8 +359,16 @@ TEST(AlpsDecoderTest, MalformedAcceptChFrame) {
AlpsDecoder decoder;
AlpsDecoder::Error error = decoder.Decode(frame);
-
- EXPECT_EQ(AlpsDecoder::Error::kAcceptChMalformed, error);
+ if (ShouldKillSessionOnAcceptChMalformed()) {
+ EXPECT_EQ(AlpsDecoder::Error::kAcceptChMalformed, error);
+ histogram_tester.ExpectTotalCount(
+ "Net.SpdySession.AlpsDecoderStatus.Bypassed", 0);
+ } else {
+ EXPECT_EQ(AlpsDecoder::Error::kNoError, error);
+ histogram_tester.ExpectUniqueSample(
+ "Net.SpdySession.AlpsDecoderStatus.Bypassed",
+ static_cast<int>(AlpsDecoder::Error::kAcceptChMalformed), 1);
+ }
}
}
diff --git a/chromium/pdf/pdfium/findtext_unittest.cc b/chromium/pdf/pdfium/findtext_unittest.cc
index 152883f1264..98bf5ba8a0f 100644
--- a/chromium/pdf/pdfium/findtext_unittest.cc
+++ b/chromium/pdf/pdfium/findtext_unittest.cc
@@ -18,7 +18,8 @@ namespace {
class FindTextTestClient : public TestClient {
public:
- FindTextTestClient() = default;
+ explicit FindTextTestClient(bool expected_case_sensitive)
+ : expected_case_sensitive_(expected_case_sensitive) {}
FindTextTestClient(const FindTextTestClient&) = delete;
FindTextTestClient& operator=(const FindTextTestClient&) = delete;
~FindTextTestClient() override = default;
@@ -30,7 +31,7 @@ class FindTextTestClient : public TestClient {
std::vector<SearchStringResult> SearchString(const char16_t* string,
const char16_t* term,
bool case_sensitive) override {
- EXPECT_TRUE(case_sensitive);
+ EXPECT_EQ(case_sensitive, expected_case_sensitive_);
std::u16string haystack = std::u16string(string);
std::u16string needle = std::u16string(term);
@@ -50,6 +51,9 @@ class FindTextTestClient : public TestClient {
}
return results;
}
+
+ private:
+ const bool expected_case_sensitive_;
};
} // namespace
@@ -57,7 +61,7 @@ class FindTextTestClient : public TestClient {
using FindTextTest = PDFiumTestBase;
TEST_F(FindTextTest, FindText) {
- FindTextTestClient client;
+ FindTextTestClient client(/*expected_case_sensitive=*/true);
std::unique_ptr<PDFiumEngine> engine =
InitializeEngine(&client, FILE_PATH_LITERAL("hello_world2.pdf"));
ASSERT_TRUE(engine);
@@ -76,7 +80,7 @@ TEST_F(FindTextTest, FindText) {
}
TEST_F(FindTextTest, FindHyphenatedText) {
- FindTextTestClient client;
+ FindTextTestClient client(/*expected_case_sensitive=*/true);
std::unique_ptr<PDFiumEngine> engine =
InitializeEngine(&client, FILE_PATH_LITERAL("spanner.pdf"));
ASSERT_TRUE(engine);
@@ -95,7 +99,7 @@ TEST_F(FindTextTest, FindHyphenatedText) {
}
TEST_F(FindTextTest, FindLineBreakText) {
- FindTextTestClient client;
+ FindTextTestClient client(/*expected_case_sensitive=*/true);
std::unique_ptr<PDFiumEngine> engine =
InitializeEngine(&client, FILE_PATH_LITERAL("spanner.pdf"));
ASSERT_TRUE(engine);
@@ -112,7 +116,7 @@ TEST_F(FindTextTest, FindLineBreakText) {
}
TEST_F(FindTextTest, FindSimpleQuotationMarkText) {
- FindTextTestClient client;
+ FindTextTestClient client(/*expected_case_sensitive=*/true);
std::unique_ptr<PDFiumEngine> engine =
InitializeEngine(&client, FILE_PATH_LITERAL("bug_142627.pdf"));
ASSERT_TRUE(engine);
@@ -130,7 +134,7 @@ TEST_F(FindTextTest, FindSimpleQuotationMarkText) {
}
TEST_F(FindTextTest, FindFancyQuotationMarkText) {
- FindTextTestClient client;
+ FindTextTestClient client(/*expected_case_sensitive=*/true);
std::unique_ptr<PDFiumEngine> engine =
InitializeEngine(&client, FILE_PATH_LITERAL("bug_142627.pdf"));
ASSERT_TRUE(engine);
diff --git a/chromium/pdf/pdfium/pdfium_engine.cc b/chromium/pdf/pdfium/pdfium_engine.cc
index c015d4b06a4..0afe3c60715 100644
--- a/chromium/pdf/pdfium/pdfium_engine.cc
+++ b/chromium/pdf/pdfium/pdfium_engine.cc
@@ -1971,7 +1971,7 @@ void PDFiumEngine::SearchUsingICU(const std::u16string& term,
}
void PDFiumEngine::AddFindResult(const PDFiumRange& result) {
- bool first_result = find_results_.empty();
+ bool first_result = find_results_.empty() && !resume_find_index_.has_value();
// Figure out where to insert the new location, since we could have
// started searching midway and now we wrapped.
size_t result_index;
@@ -1988,7 +1988,6 @@ void PDFiumEngine::AddFindResult(const PDFiumRange& result) {
UpdateTickMarks();
client_->NotifyNumberOfFindResultsChanged(find_results_.size(), false);
if (first_result) {
- DCHECK(!resume_find_index_);
DCHECK(!current_find_index_);
SelectFindResult(/*forward=*/true);
}
diff --git a/chromium/services/network/network_context.cc b/chromium/services/network/network_context.cc
index ecc38d15845..f25735b9e94 100644
--- a/chromium/services/network/network_context.cc
+++ b/chromium/services/network/network_context.cc
@@ -1549,6 +1549,12 @@ void NetworkContext::MaybeEnqueueSCTReport(
signed_certificate_timestamps);
}
+void NetworkContext::SetCTLogListAlwaysTimelyForTesting() {
+ if (!ct_policy_enforcer_)
+ return;
+ ct_policy_enforcer_->SetCTLogListAlwaysTimelyForTesting(true);
+}
+
void NetworkContext::SetSCTAuditingMode(mojom::SCTAuditingMode mode) {
sct_auditing_handler()->SetMode(mode);
}
diff --git a/chromium/services/network/network_context.h b/chromium/services/network/network_context.h
index 994712b56fb..7452ddfa727 100644
--- a/chromium/services/network/network_context.h
+++ b/chromium/services/network/network_context.h
@@ -323,6 +323,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
const net::X509Certificate* validated_certificate_chain,
const net::SignedCertificateTimestampAndStatusList&
signed_certificate_timestamps);
+ void SetCTLogListAlwaysTimelyForTesting() override;
void SetSCTAuditingMode(mojom::SCTAuditingMode mode) override;
void OnCTLogListUpdated(
const std::vector<network::mojom::CTLogInfoPtr>& log_list,
diff --git a/chromium/services/network/public/mojom/network_context.mojom b/chromium/services/network/public/mojom/network_context.mojom
index b2beaa762bf..467af3615f2 100644
--- a/chromium/services/network/public/mojom/network_context.mojom
+++ b/chromium/services/network/public/mojom/network_context.mojom
@@ -1454,6 +1454,10 @@ interface NetworkContext {
GetOriginPolicyManager(
pending_receiver<OriginPolicyManager> origin_policy_manager);
+ // If called, the CT log list will be considered always timely.
+ [EnableIf=is_ct_supported]
+ SetCTLogListAlwaysTimelyForTesting();
+
// Set the SCT auditing mode for this NetworkContext.
[EnableIf=is_ct_supported]
SetSCTAuditingMode(SCTAuditingMode mode);
diff --git a/chromium/skia/ext/skia_commit_hash.h b/chromium/skia/ext/skia_commit_hash.h
index ae327612289..d8d59f901b4 100644
--- a/chromium/skia/ext/skia_commit_hash.h
+++ b/chromium/skia/ext/skia_commit_hash.h
@@ -3,6 +3,6 @@
#ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_
#define SKIA_EXT_SKIA_COMMIT_HASH_H_
-#define SKIA_COMMIT_HASH "3338e90707323d2cd3a150276acb9f39933deee2"
+#define SKIA_COMMIT_HASH "d4442274e967ec96d89345d2afd2d81f09e416ed"
#endif // SKIA_EXT_SKIA_COMMIT_HASH_H_
diff --git a/chromium/testing/scripts/check_static_initializers.py b/chromium/testing/scripts/check_static_initializers.py
index 3afd112883b..d5351e74925 100755
--- a/chromium/testing/scripts/check_static_initializers.py
+++ b/chromium/testing/scripts/check_static_initializers.py
@@ -64,7 +64,7 @@ COVERAGE_BUILD_FALLBACK_EXPECTED_MAC_SI_COUNT = 4
def run_process(command):
- p = subprocess.Popen(command, stdout=subprocess.PIPE)
+ p = subprocess.Popen(command, stdout=subprocess.PIPE, universal_newlines=True)
stdout = p.communicate()[0]
if p.returncode != 0:
raise Exception(
@@ -205,7 +205,7 @@ def main_run(args):
if sys.platform.startswith('darwin'):
rc = main_mac(src_dir,
allow_coverage_initializer = '--allow-coverage-initializer' in args.args)
- elif sys.platform == 'linux2':
+ elif sys.platform.startswith('linux'):
is_chromeos = 'buildername' in args.properties and \
'chromeos' in args.properties['buildername']
rc = main_linux(src_dir, is_chromeos)
@@ -222,7 +222,7 @@ def main_run(args):
def main_compile_targets(args):
if sys.platform.startswith('darwin'):
compile_targets = ['chrome']
- elif sys.platform == 'linux2':
+ elif sys.platform.startswith('linux'):
compile_targets = ['chrome', 'nacl_helper', 'nacl_helper_bootstrap']
else:
compile_targets = []
diff --git a/chromium/testing/scripts/common.py b/chromium/testing/scripts/common.py
index 4965f8f58ba..995fb9688e8 100644
--- a/chromium/testing/scripts/common.py
+++ b/chromium/testing/scripts/common.py
@@ -208,7 +208,7 @@ def parse_common_test_results(json_results, test_separator='/'):
def convert_trie_to_flat_paths(trie, prefix=None):
# Also see blinkpy.web_tests.layout_package.json_results_generator
result = {}
- for name, data in trie.iteritems():
+ for name, data in trie.items():
if prefix:
name = prefix + test_separator + name
if len(data) and not 'actual' in data and not 'expected' in data:
@@ -232,7 +232,7 @@ def parse_common_test_results(json_results, test_separator='/'):
passing_statuses = ('PASS', 'SLOW', 'NEEDSREBASELINE')
for test, result in convert_trie_to_flat_paths(
- json_results['tests']).iteritems():
+ json_results['tests']).items():
key = 'unexpected_' if result.get('is_unexpected') else ''
data = result['actual']
actual_results = data.split()
@@ -291,7 +291,7 @@ def get_gtest_summary_passes(output):
mapping = {}
for cur_iteration_data in output.get('per_iteration_data', []):
- for test_fullname, results in cur_iteration_data.iteritems():
+ for test_fullname, results in cur_iteration_data.items():
# Results is a list with one entry per test try. Last one is the final
# result.
last_result = results[-1]
diff --git a/chromium/testing/scripts/headless_python_unittests.py b/chromium/testing/scripts/headless_python_unittests.py
index 881cff4a6eb..14a7a427c3f 100755
--- a/chromium/testing/scripts/headless_python_unittests.py
+++ b/chromium/testing/scripts/headless_python_unittests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython3
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -36,7 +36,7 @@ def main_run(args):
valid = bool(rc <= common.MAX_FAILURES_EXIT_STATUS and
((rc == 0) or failures))
common.record_local_script_results(
- 'headless_python_unittests', args.output, failures.keys(), valid)
+ 'headless_python_unittests', args.output, list(failures.keys()), valid)
return rc
diff --git a/chromium/testing/scripts/metrics_python_tests.py b/chromium/testing/scripts/metrics_python_tests.py
index 70770f41b56..41db12a37b1 100755
--- a/chromium/testing/scripts/metrics_python_tests.py
+++ b/chromium/testing/scripts/metrics_python_tests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython3
# Copyright 2021 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -15,7 +15,7 @@ import common
def main_run(args):
with common.temporary_file() as tempfile_path:
- rc = common.run_command(['vpython',
+ rc = common.run_command(['vpython3',
os.path.join(common.SRC_DIR, 'testing', 'test_env.py'),
os.path.join(common.SRC_DIR, 'tools', 'metrics',
'metrics_python_tests.py'),
diff --git a/chromium/third_party/blink/public/strings/translations/blink_accessibility_strings_zh-CN.xtb b/chromium/third_party/blink/public/strings/translations/blink_accessibility_strings_zh-CN.xtb
index d1ca49c96bd..82f8aed9df5 100644
--- a/chromium/third_party/blink/public/strings/translations/blink_accessibility_strings_zh-CN.xtb
+++ b/chromium/third_party/blink/public/strings/translations/blink_accessibility_strings_zh-CN.xtb
@@ -33,7 +33,7 @@
<translation id="3904695548697879411">Twitter 图标</translation>
<translation id="405782047075994056">“向左箭头”图标,可能表示“返回”</translation>
<translation id="4302299849305494927">扬声器图标,可能表示“音量”</translation>
-<translation id="4363712632243441817">“投射”图标,可能表示将视频投射到远程屏幕上</translation>
+<translation id="4363712632243441817">“投放”图标,可能表示将视频投放到远程屏幕上</translation>
<translation id="4384249794467006333">此图片未加标签。打开右上角的“更多选项”菜单即可获取图片说明。</translation>
<translation id="4436211924730548766">“向左 V 形”图标</translation>
<translation id="4444765639179266822">似乎是说:<ph name="OCR_TEXT" /></translation>
diff --git a/chromium/third_party/blink/public/strings/translations/blink_strings_ar.xtb b/chromium/third_party/blink/public/strings/translations/blink_strings_ar.xtb
index cdfa6d3f4ae..a0f6639968a 100644
--- a/chromium/third_party/blink/public/strings/translations/blink_strings_ar.xtb
+++ b/chromium/third_party/blink/public/strings/translations/blink_strings_ar.xtb
@@ -94,7 +94,7 @@
<translation id="5466621249238537318">يُرجى اختيار ملف واحد أو أكثر.</translation>
<translation id="5468998798572797635">إنهاء وضع ملء الشاشة</translation>
<translation id="5516235301412634559">0.75</translation>
-<translation id="5537725057119320332">إرسال</translation>
+<translation id="5537725057119320332">بث</translation>
<translation id="5546461542133609677">إعادة الصوت</translation>
<translation id="5630795885300617244">انقر مرّتين جهة اليمين أو اليسار لتخطي 10 ثوانٍ.</translation>
<translation id="5677946354068040947">خيارات إضافية</translation>
diff --git a/chromium/third_party/blink/public/strings/translations/blink_strings_te.xtb b/chromium/third_party/blink/public/strings/translations/blink_strings_te.xtb
index b0c9b5de125..882d9012199 100644
--- a/chromium/third_party/blink/public/strings/translations/blink_strings_te.xtb
+++ b/chromium/third_party/blink/public/strings/translations/blink_strings_te.xtb
@@ -59,7 +59,7 @@
<translation id="3757388668994797779"><ph name="QUANTITY" /> GB</translation>
<translation id="3822383571486410024">దయచేసి ఈ వచనాన్ని <ph name="MIN_CHARACTERS" /> లేదా అంతకంటే ఎక్కువ అక్షరాలకు పొడిగించండి (ప్రస్తుతం మీరు <ph name="CURRENT_LENGTH" /> అక్షరాలను ఉపయోగిస్తున్నారు).</translation>
<translation id="383465348367842624">'<ph name="ATSIGN" />'కి ముందు ఉన్న భాగంలో '<ph name="INVALIDCHARACTER" />' చిహ్నం ఉండకూడదు.</translation>
-<translation id="3846214748874656680">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించు</translation>
+<translation id="3846214748874656680">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించండి</translation>
<translation id="4103419683916926126">మిల్లీసెకన్లు</translation>
<translation id="4201051445878709314">మునుపటి నెలను చూపుతుంది</translation>
<translation id="4360991593054037559">దయచేసి చెల్లుబాటు అయ్యే విలువను నమోదు చేయండి. <ph name="VALID_VALUE_LOW" /> మరియు <ph name="VALID_VALUE_HIGHER" /> అనేవి రెండు సమీప చెల్లుబాటు విలువలు.</translation>
@@ -91,7 +91,7 @@
<translation id="5378437566635403538">విస్తరించబడింది, డైలాగ్ తెరవబడింది.</translation>
<translation id="5425179576310518467">ప్రస్తుత తేదీ</translation>
<translation id="5466621249238537318">దయచేసి ఒకటి లేదా మరిన్ని ఫైళ్ళను ఎంచుకోండి.</translation>
-<translation id="5468998798572797635">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించు</translation>
+<translation id="5468998798572797635">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించండి</translation>
<translation id="5516235301412634559">0.75</translation>
<translation id="5537725057119320332">Cast</translation>
<translation id="5546461542133609677">అన్‌మ్యూట్ చేయి</translation>
@@ -112,7 +112,7 @@
<translation id="6165053282446038410">విస్తరించబడింది, <ph name="COUNT" /> ఆటోకంప్లీట్ ఆప్షన్‌లు అందుబాటులో ఉన్నాయి.</translation>
<translation id="6212595056017402527">ప్రస్తుత పేజీ</translation>
<translation id="6281588256137006900">కాంట్రాస్ట్</translation>
-<translation id="6310801910862476708">చిత్రంలో చిత్రం మోడ్ నుండి నిష్క్రమించు</translation>
+<translation id="6310801910862476708">చిత్రంలో చిత్రం మోడ్ నుండి నిష్క్రమించండి</translation>
<translation id="6398862346408813489">నెల ఎంపిక ప్యానెల్‌ను చూపుతుంది</translation>
<translation id="6404546809543547843">ఆడియో సమయ స్క్రబ్బర్</translation>
<translation id="6443871981718447451">ఉపశీర్షికల మెనూని చూపు</translation>
@@ -120,7 +120,7 @@
<translation id="6572309429103589720">చెల్లని వ్యాకరణం</translation>
<translation id="658823671542763450">పూర్తి స్క్రీన్‌లోకి ప్రవేశించు</translation>
<translation id="6606094904835912297">సిస్టమ్ రంగులు</translation>
-<translation id="6643016212128521049">క్లియర్ చేయి</translation>
+<translation id="6643016212128521049">క్లియర్ చేయండి</translation>
<translation id="668171684555832681">ఇతర...</translation>
<translation id="6709093583001123835">విలువ ఖచ్చితంగా <ph name="VALUE" /> అయ్యి ఉండాలి.</translation>
<translation id="6709570249143506788">ప్లేబ్యాక్ క్వాలిటీ బాగాలేదు</translation>
diff --git a/chromium/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb b/chromium/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb
index e6e499db66d..5a55e5f2584 100644
--- a/chromium/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb
+++ b/chromium/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb
@@ -93,7 +93,7 @@
<translation id="5466621249238537318">请选择一个或多个文件。</translation>
<translation id="5468998798572797635">退出全屏模式</translation>
<translation id="5516235301412634559">0.75</translation>
-<translation id="5537725057119320332">投射</translation>
+<translation id="5537725057119320332">投放</translation>
<translation id="5546461542133609677">取消静音</translation>
<translation id="5630795885300617244">在左侧或右侧点按两次即可跳过 10 秒</translation>
<translation id="5677946354068040947">更多选项</translation>
@@ -102,7 +102,7 @@
<translation id="5787939484346677755">已展开,有可用的自动补全选项。</translation>
<translation id="5860033963881614850">关闭</translation>
<translation id="588258955323874662">全屏</translation>
-<translation id="5888666972993069672">现正投射至“<ph name="DEVICE_FRIENDLY_NAME" />”</translation>
+<translation id="5888666972993069672">现正投放至“<ph name="DEVICE_FRIENDLY_NAME" />”</translation>
<translation id="5916664084637901428">启用</translation>
<translation id="5939518447894949180">重置</translation>
<translation id="5966707198760109579">周</translation>
@@ -168,7 +168,7 @@
<translation id="8637593834423658414">1.75</translation>
<translation id="8668988909814782445">自动换行</translation>
<translation id="8750798805984357768">请从这些选项中选择一个。</translation>
-<translation id="8845239796550121995">现在正投射到您的电视上</translation>
+<translation id="8845239796550121995">现在正投放到您的电视上</translation>
<translation id="8875657656876809964">视频播放出错</translation>
<translation id="8889402386540077796">色调</translation>
<translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/chromium/third_party/blink/renderer/core/display_lock/display_lock_context.cc b/chromium/third_party/blink/renderer/core/display_lock/display_lock_context.cc
index 918c6b7350d..4114d83a195 100644
--- a/chromium/third_party/blink/renderer/core/display_lock/display_lock_context.cc
+++ b/chromium/third_party/blink/renderer/core/display_lock/display_lock_context.cc
@@ -998,6 +998,9 @@ bool DisplayLockContext::ForceUnlockIfNeeded() {
layout_invalidation_reason::kDisplayLock);
}
}
+ // If we forced unlock, then we need to prevent subsequent calls to
+ // Lock() until the next frame.
+ SetRequestedState(EContentVisibility::kVisible);
}
return true;
}
diff --git a/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc b/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
index 69f6da14d17..d15636e1ea2 100644
--- a/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
+++ b/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
@@ -549,6 +549,9 @@ FontSelector* OffscreenCanvas::GetFontSelector() {
if (auto* window = DynamicTo<LocalDOMWindow>(GetExecutionContext())) {
return window->document()->GetStyleEngine().GetFontSelector();
}
+ // TODO(crbug.com/1334864): Temporary mitigation. Remove the following
+ // CHECK once a more comprehensive solution has been implemented.
+ CHECK(GetExecutionContext()->IsWorkerGlobalScope());
return To<WorkerGlobalScope>(GetExecutionContext())->GetFontSelector();
}
diff --git a/chromium/third_party/blink/renderer/modules/BUILD.gn b/chromium/third_party/blink/renderer/modules/BUILD.gn
index 818e3e38fe4..f9428f65f47 100644
--- a/chromium/third_party/blink/renderer/modules/BUILD.gn
+++ b/chromium/third_party/blink/renderer/modules/BUILD.gn
@@ -663,6 +663,7 @@ source_set("unit_tests") {
"//third_party/blink/renderer/modules/peerconnection:test_support",
"//third_party/blink/renderer/modules/storage:unit_tests",
"//third_party/blink/renderer/modules/webcodecs:unit_tests",
+ "//third_party/blink/renderer/modules/webgpu:unit_tests",
"//third_party/blink/renderer/modules/webtransport:unit_tests",
"//third_party/blink/renderer/platform",
"//third_party/blink/renderer/platform:test_support",
diff --git a/chromium/third_party/blink/renderer/modules/webgpu/BUILD.gn b/chromium/third_party/blink/renderer/modules/webgpu/BUILD.gn
index e7d4345b4a2..87ffc91763d 100644
--- a/chromium/third_party/blink/renderer/modules/webgpu/BUILD.gn
+++ b/chromium/third_party/blink/renderer/modules/webgpu/BUILD.gn
@@ -93,3 +93,17 @@ blink_modules_sources("webgpu") {
"//third_party/dawn/include/dawn:headers",
]
}
+
+source_set("unit_tests") {
+ testonly = true
+ sources = [ "gpu_context_lost_test.cc" ]
+
+ deps = [
+ "//base/test:test_support",
+ "//third_party/blink/renderer/controller:blink_bindings_test_sources",
+ "//third_party/blink/renderer/core",
+ "//third_party/blink/renderer/core:testing",
+ "//third_party/blink/renderer/modules",
+ "//third_party/blink/renderer/platform:test_support",
+ ]
+}
diff --git a/chromium/third_party/blink/renderer/modules/webgpu/DEPS b/chromium/third_party/blink/renderer/modules/webgpu/DEPS
index c7774f8346b..1238fddbe36 100644
--- a/chromium/third_party/blink/renderer/modules/webgpu/DEPS
+++ b/chromium/third_party/blink/renderer/modules/webgpu/DEPS
@@ -9,6 +9,7 @@ include_rules = [
"+gpu/command_buffer/client/raster_interface.h",
"+gpu/command_buffer/client/shared_image_interface.h",
"+gpu/command_buffer/client/webgpu_interface.h",
+ "+gpu/command_buffer/client/webgpu_interface_stub.h",
"+media/base/video_frame.h",
"+media/base/wait_and_replace_sync_token_client.h",
"+media/renderers/paint_canvas_video_renderer.h",
diff --git a/chromium/third_party/blink/renderer/modules/webgpu/gpu.cc b/chromium/third_party/blink/renderer/modules/webgpu/gpu.cc
index faa292a7723..c7516603b90 100644
--- a/chromium/third_party/blink/renderer/modules/webgpu/gpu.cc
+++ b/chromium/third_party/blink/renderer/modules/webgpu/gpu.cc
@@ -288,4 +288,9 @@ void BoxedMappableWGPUBufferHandles::ClearAndDestroyAll(
contents_.clear();
}
+void GPU::SetDawnControlClientHolderForTesting(
+ scoped_refptr<DawnControlClientHolder> dawn_control_client) {
+ dawn_control_client_ = std::move(dawn_control_client);
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/modules/webgpu/gpu.h b/chromium/third_party/blink/renderer/modules/webgpu/gpu.h
index 4477129d951..606a331ad18 100644
--- a/chromium/third_party/blink/renderer/modules/webgpu/gpu.h
+++ b/chromium/third_party/blink/renderer/modules/webgpu/gpu.h
@@ -9,6 +9,7 @@
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h"
#include "third_party/blink/renderer/platform/supplementable.h"
@@ -48,9 +49,9 @@ struct BoxedMappableWGPUBufferHandles
HashSet<void*> contents_;
};
-class GPU final : public ScriptWrappable,
- public Supplement<NavigatorBase>,
- public ExecutionContextLifecycleObserver {
+class MODULES_EXPORT GPU final : public ScriptWrappable,
+ public Supplement<NavigatorBase>,
+ public ExecutionContextLifecycleObserver {
DEFINE_WRAPPERTYPEINFO();
public:
@@ -87,6 +88,9 @@ class GPU final : public ScriptWrappable,
return mappable_buffer_handles_.get();
}
+ void SetDawnControlClientHolderForTesting(
+ scoped_refptr<DawnControlClientHolder> dawn_control_client);
+
private:
void OnRequestAdapterCallback(ScriptState* script_state,
const GPURequestAdapterOptions* options,
diff --git a/chromium/third_party/blink/renderer/modules/webgpu/gpu_context_lost_test.cc b/chromium/third_party/blink/renderer/modules/webgpu/gpu_context_lost_test.cc
new file mode 100644
index 00000000000..1063295a543
--- /dev/null
+++ b/chromium/third_party/blink/renderer/modules/webgpu/gpu_context_lost_test.cc
@@ -0,0 +1,229 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/callback.h"
+#include "base/run_loop.h"
+#include "base/test/mock_callback.h"
+#include "gpu/command_buffer/client/webgpu_interface_stub.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
+#include "third_party/blink/renderer/core/frame/local_dom_window.h"
+#include "third_party/blink/renderer/core/frame/local_frame.h"
+#include "third_party/blink/renderer/core/frame/navigator.h"
+#include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
+#include "third_party/blink/renderer/modules/webgpu/gpu.h"
+#include "third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.h"
+#include "third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h"
+
+namespace blink {
+
+namespace {
+
+class WebGPUContextProviderForTest
+ : public WebGraphicsContext3DProviderForTests {
+ public:
+ explicit WebGPUContextProviderForTest(
+ base::MockCallback<base::OnceClosure>* destruction_callback)
+ : WebGraphicsContext3DProviderForTests(
+ std::make_unique<gpu::webgpu::WebGPUInterfaceStub>()),
+ destruction_callback_(destruction_callback) {}
+ ~WebGPUContextProviderForTest() override {
+ if (destruction_callback_) {
+ destruction_callback_->Run();
+ }
+ }
+
+ static WebGPUContextProviderForTest* From(
+ scoped_refptr<DawnControlClientHolder>& dawn_control_client) {
+ return static_cast<WebGPUContextProviderForTest*>(
+ dawn_control_client->GetContextProviderWeakPtr()->ContextProvider());
+ }
+
+ void ClearDestructionCallback() { destruction_callback_ = nullptr; }
+
+ void SetLostContextCallback(
+ base::RepeatingClosure lost_context_callback) override {
+ lost_context_callback_ = std::move(lost_context_callback);
+ }
+
+ void CallLostContextCallback() { lost_context_callback_.Run(); }
+
+ private:
+ base::MockCallback<base::OnceClosure>* destruction_callback_;
+ base::RepeatingClosure lost_context_callback_;
+};
+
+class WebGPUContextLostTest : public testing::Test {
+ protected:
+ void SetUp() override { page_ = std::make_unique<DummyPageHolder>(); }
+
+ std::tuple<ExecutionContext*, GPU*> SetUpGPU(V8TestingScope* v8_test_scope) {
+ ExecutionContext* execution_context =
+ ExecutionContext::From(v8_test_scope->GetScriptState());
+
+ Navigator* navigator = page_->GetFrame().DomWindow()->navigator();
+ GPU* gpu = MakeGarbageCollected<GPU>(*navigator);
+ return std::make_tuple(execution_context, gpu);
+ }
+
+ std::unique_ptr<DummyPageHolder> page_;
+};
+
+// Test that the context provider is destructed after the last reference to
+// its owning DawnControlClientHolder is dropped.
+TEST_F(WebGPUContextLostTest, DestructedAfterLastRefDropped) {
+ V8TestingScope v8_test_scope;
+ ExecutionContext* execution_context =
+ ExecutionContext::From(v8_test_scope.GetScriptState());
+
+ base::MockCallback<base::OnceClosure> destruction_callback;
+ auto context_provider =
+ std::make_unique<WebGPUContextProviderForTest>(&destruction_callback);
+
+ auto dawn_control_client = DawnControlClientHolder::Create(
+ std::move(context_provider),
+ execution_context->GetTaskRunner(TaskType::kWebGPU));
+
+ // Drop the last reference to the DawnControlClientHolder which will
+ // now destroy the context provider.
+ EXPECT_CALL(destruction_callback, Run()).Times(1);
+ dawn_control_client = nullptr;
+}
+
+// Test that the GPU lost context callback marks the context lost, but does not
+// destruct it.
+TEST_F(WebGPUContextLostTest, GPULostContext) {
+ V8TestingScope v8_test_scope;
+ auto [execution_context, gpu] = SetUpGPU(&v8_test_scope);
+
+ base::MockCallback<base::OnceClosure> destruction_callback;
+ auto context_provider =
+ std::make_unique<WebGPUContextProviderForTest>(&destruction_callback);
+
+ auto dawn_control_client = DawnControlClientHolder::Create(
+ std::move(context_provider),
+ execution_context->GetTaskRunner(TaskType::kWebGPU));
+
+ gpu->SetDawnControlClientHolderForTesting(dawn_control_client);
+
+ // Trigger the lost context callback, but the context should not be destroyed.
+ EXPECT_CALL(destruction_callback, Run()).Times(0);
+ WebGPUContextProviderForTest::From(dawn_control_client)
+ ->CallLostContextCallback();
+ testing::Mock::VerifyAndClear(&destruction_callback);
+
+ // The context should be marked lost.
+ EXPECT_TRUE(dawn_control_client->IsContextLost());
+
+ // The context provider should still be live.
+ auto context_provider_weak_ptr =
+ dawn_control_client->GetContextProviderWeakPtr();
+ EXPECT_NE(context_provider_weak_ptr, nullptr);
+
+ // Clear the destruction callback since it is stack-allocated in this frame.
+ static_cast<WebGPUContextProviderForTest*>(
+ context_provider_weak_ptr->ContextProvider())
+ ->ClearDestructionCallback();
+}
+
+// Test that the GPU lost context callback marks the context lost, and then when
+// the context is recreated, the context still lives until the previous
+// DawnControlClientHolder is destroyed.
+TEST_F(WebGPUContextLostTest, RecreatedAfterGPULostContext) {
+ V8TestingScope v8_test_scope;
+ auto [execution_context, gpu] = SetUpGPU(&v8_test_scope);
+
+ base::MockCallback<base::OnceClosure> destruction_callback;
+ auto context_provider =
+ std::make_unique<WebGPUContextProviderForTest>(&destruction_callback);
+
+ auto dawn_control_client = DawnControlClientHolder::Create(
+ std::move(context_provider),
+ execution_context->GetTaskRunner(TaskType::kWebGPU));
+
+ gpu->SetDawnControlClientHolderForTesting(dawn_control_client);
+
+ // Trigger the lost context callback, but the context should not be destroyed.
+ EXPECT_CALL(destruction_callback, Run()).Times(0);
+ WebGPUContextProviderForTest::From(dawn_control_client)
+ ->CallLostContextCallback();
+ testing::Mock::VerifyAndClear(&destruction_callback);
+
+ // The context should be marked lost.
+ EXPECT_TRUE(dawn_control_client->IsContextLost());
+
+ // The context provider should still be live.
+ auto context_provider_weak_ptr =
+ dawn_control_client->GetContextProviderWeakPtr();
+ EXPECT_NE(context_provider_weak_ptr, nullptr);
+
+ // Make a new context provider and DawnControlClientHolder
+ base::MockCallback<base::OnceClosure> destruction_callback2;
+ auto context_provider2 =
+ std::make_unique<WebGPUContextProviderForTest>(&destruction_callback2);
+
+ auto dawn_control_client2 = DawnControlClientHolder::Create(
+ std::move(context_provider2),
+ execution_context->GetTaskRunner(TaskType::kWebGPU));
+
+ // Set the new context, but the previous context should still not be
+ // destroyed.
+ EXPECT_CALL(destruction_callback, Run()).Times(0);
+ gpu->SetDawnControlClientHolderForTesting(dawn_control_client2);
+ testing::Mock::VerifyAndClear(&destruction_callback);
+
+ // Drop the last reference to the previous DawnControlClientHolder which will
+ // now destroy the previous context provider.
+ EXPECT_CALL(destruction_callback, Run()).Times(1);
+ dawn_control_client = nullptr;
+ testing::Mock::VerifyAndClear(&destruction_callback);
+
+ // Clear the destruction callback since it is stack-allocated in this frame.
+ static_cast<WebGPUContextProviderForTest*>(
+ dawn_control_client2->GetContextProviderWeakPtr()->ContextProvider())
+ ->ClearDestructionCallback();
+}
+
+// Test that ContextDestroyed lifecycle event destructs the context.
+TEST_F(WebGPUContextLostTest, ContextDestroyed) {
+ V8TestingScope v8_test_scope;
+ auto [execution_context, gpu] = SetUpGPU(&v8_test_scope);
+
+ base::MockCallback<base::OnceClosure> destruction_callback;
+ auto context_provider =
+ std::make_unique<WebGPUContextProviderForTest>(&destruction_callback);
+
+ auto dawn_control_client = DawnControlClientHolder::Create(
+ std::move(context_provider),
+ execution_context->GetTaskRunner(TaskType::kWebGPU));
+
+ gpu->SetDawnControlClientHolderForTesting(dawn_control_client);
+
+ // Trigger the context destroyed lifecycle event. The context should not be
+ // destroyed yet.
+ EXPECT_CALL(destruction_callback, Run()).Times(0);
+ gpu->ContextDestroyed();
+ testing::Mock::VerifyAndClear(&destruction_callback);
+
+ // The context should be marked lost.
+ EXPECT_TRUE(dawn_control_client->IsContextLost());
+
+ // Getting the context provider should return null.
+ EXPECT_EQ(dawn_control_client->GetContextProviderWeakPtr(), nullptr);
+
+ // The context is destructed in a posted task with a fresh callstack to avoid
+ // re-entrancy issues. Expectations should resolve by the end of the next
+ // task.
+ EXPECT_CALL(destruction_callback, Run()).Times(1);
+ base::RunLoop loop;
+ execution_context->GetTaskRunner(TaskType::kWebGPU)
+ ->PostTask(FROM_HERE, loop.QuitClosure());
+ loop.Run();
+ testing::Mock::VerifyAndClear(&destruction_callback);
+}
+
+} // namespace
+
+} // namespace blink
diff --git a/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc b/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc
index be5b392fa83..6a6283972e7 100644
--- a/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc
+++ b/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc
@@ -17,9 +17,17 @@ scoped_refptr<DawnControlClientHolder> DawnControlClientHolder::Create(
auto dawn_control_client_holder =
base::MakeRefCounted<DawnControlClientHolder>(std::move(context_provider),
std::move(task_runner));
+ // The context lost callback occurs when the client receives
+ // OnGpuControlLostContext. This can happen on fatal errors when the GPU
+ // channel is disconnected: the GPU process crashes, the GPU process fails to
+ // deserialize a message, etc. We mark the context lost, but NOT destroy the
+ // entire WebGraphicsContext3DProvider as that would free services for mapping
+ // shared memory. There may still be outstanding mapped GPUBuffers pointing to
+ // this memory.
dawn_control_client_holder->context_provider_->ContextProvider()
->SetLostContextCallback(WTF::BindRepeating(
- &DawnControlClientHolder::Destroy, dawn_control_client_holder));
+ &DawnControlClientHolder::MarkContextLost,
+ dawn_control_client_holder->weak_ptr_factory_.GetWeakPtr()));
return dawn_control_client_holder;
}
@@ -38,7 +46,7 @@ DawnControlClientHolder::DawnControlClientHolder(
DawnControlClientHolder::~DawnControlClientHolder() = default;
void DawnControlClientHolder::Destroy() {
- api_channel_->Disconnect();
+ MarkContextLost();
// Destroy the WebGPU context.
// This ensures that GPU resources are eagerly reclaimed.
@@ -68,8 +76,16 @@ DawnControlClientHolder::GetContextProviderWeakPtr() const {
return context_provider_->GetWeakPtr();
}
+void DawnControlClientHolder::MarkContextLost() {
+ if (context_lost_) {
+ return;
+ }
+ api_channel_->Disconnect();
+ context_lost_ = true;
+}
+
bool DawnControlClientHolder::IsContextLost() const {
- return !context_provider_;
+ return context_lost_;
}
std::unique_ptr<RecyclableCanvasResource>
diff --git a/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.h b/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.h
index 550038892c9..9e3c086225a 100644
--- a/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.h
+++ b/chromium/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.h
@@ -47,6 +47,7 @@ class PLATFORM_EXPORT DawnControlClientHolder
base::WeakPtr<WebGraphicsContext3DProviderWrapper> GetContextProviderWeakPtr()
const;
const DawnProcTable& GetProcs() const { return procs_; }
+ void MarkContextLost();
bool IsContextLost() const;
std::unique_ptr<RecyclableCanvasResource> GetOrCreateCanvasResource(
const SkImageInfo& info,
@@ -56,11 +57,14 @@ class PLATFORM_EXPORT DawnControlClientHolder
friend class RefCounted<DawnControlClientHolder>;
~DawnControlClientHolder();
+ bool context_lost_ = false;
std::unique_ptr<WebGraphicsContext3DProviderWrapper> context_provider_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
scoped_refptr<gpu::webgpu::APIChannel> api_channel_;
DawnProcTable procs_;
WebGPURecyclableResourceCache recyclable_resource_cache_;
+
+ base::WeakPtrFactory<DawnControlClientHolder> weak_ptr_factory_{this};
};
} // namespace blink
diff --git a/chromium/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py b/chromium/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py
index 6e202e9ac0b..087f9552a89 100644
--- a/chromium/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py
+++ b/chromium/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py
@@ -67,6 +67,15 @@ class BaselineOptimizerTest(unittest.TestCase):
'port_name': 'linux-trusty',
'specifiers': ['Trusty', 'Release']
},
+ 'Fake Test Linux HighDPI': {
+ 'port_name': 'linux-trusty',
+ 'specifiers': ['Trusty', 'Release'],
+ 'flag_specific': 'highdpi',
+ },
+ 'Fake Test Mac12.0': {
+ 'port_name': 'mac-mac12',
+ 'specifiers': ['Mac12', 'Release'],
+ },
'Fake Test Mac11.0': {
'port_name': 'mac-mac11',
'specifiers': ['Mac11', 'Release']
@@ -93,7 +102,7 @@ class BaselineOptimizerTest(unittest.TestCase):
# tests need to be adjusted accordingly.
self.assertEqual(sorted(self.host.port_factory.all_port_names()), [
'linux-trusty', 'mac-mac10.12', 'mac-mac10.13', 'mac-mac10.14',
- 'mac-mac10.15', 'mac-mac11', 'win-win10.20h2'
+ 'mac-mac10.15', 'mac-mac11', 'mac-mac12', 'win-win10.20h2',
])
def _assert_optimization(self,
diff --git a/chromium/third_party/blink/tools/blinkpy/common/config/builders.json b/chromium/third_party/blink/tools/blinkpy/common/config/builders.json
index 180da1b9f8f..d895568e8de 100644
--- a/chromium/third_party/blink/tools/blinkpy/common/config/builders.json
+++ b/chromium/third_party/blink/tools/blinkpy/common/config/builders.json
@@ -123,6 +123,18 @@
"specifiers": ["Mac11-arm64", "Release"],
"is_try_builder": true
},
+ "mac12.0-blink-rel": {
+ "main": "tryserver.blink",
+ "port_name": "mac-mac12",
+ "specifiers": ["Mac12", "Release"],
+ "is_try_builder": true
+ },
+ "mac12.0.arm64-blink-rel": {
+ "main": "tryserver.blink",
+ "port_name": "mac-mac12-arm64",
+ "specifiers": ["Mac12-arm64", "Release"],
+ "is_try_builder": true
+ },
"win7-blink-rel": {
"master": "tryserver.blink",
"port_name": "win-win7",
diff --git a/chromium/third_party/blink/tools/blinkpy/common/host_mock.py b/chromium/third_party/blink/tools/blinkpy/common/host_mock.py
index e81a7ef7b56..02efe28da58 100644
--- a/chromium/third_party/blink/tools/blinkpy/common/host_mock.py
+++ b/chromium/third_party/blink/tools/blinkpy/common/host_mock.py
@@ -46,12 +46,13 @@ class MockHost(MockSystemHost):
git=None,
os_name=None,
os_version=None,
+ machine=None,
time_return_val=123):
- super(MockHost, self).__init__(
- log_executive=log_executive,
- os_name=os_name,
- os_version=os_version,
- time_return_val=time_return_val)
+ super(MockHost, self).__init__(log_executive=log_executive,
+ os_name=os_name,
+ os_version=os_version,
+ machine=None,
+ time_return_val=time_return_val)
add_unit_tests_to_mock_filesystem(self.filesystem)
self._add_base_manifest_to_mock_filesystem(self.filesystem)
diff --git a/chromium/third_party/blink/tools/blinkpy/common/system/platform_info.py b/chromium/third_party/blink/tools/blinkpy/common/system/platform_info.py
index 447006ebe7d..5536462a7cd 100644
--- a/chromium/third_party/blink/tools/blinkpy/common/system/platform_info.py
+++ b/chromium/third_party/blink/tools/blinkpy/common/system/platform_info.py
@@ -30,6 +30,8 @@ import re
import sys
from six.moves import map
+from blinkpy.common.system.executive import ScriptError
+
class PlatformInfo(object):
"""This class provides a consistent (and mockable) interpretation of
@@ -56,7 +58,7 @@ class PlatformInfo(object):
self.os_version = platform_module.release()
if self.os_name.startswith('mac'):
self.os_version = self._determine_mac_version(
- platform_module.mac_ver()[0])
+ self._raw_mac_version(platform_module))
if self.os_name.startswith('win'):
self.os_version = self._determine_win_version(
self._win_version_tuple())
@@ -162,6 +164,18 @@ class PlatformInfo(object):
return 'unknown'
+ def _raw_mac_version(self, platform_module):
+ """Read this Mac's version string (starts with "<major>.<minor>")."""
+ try:
+ # crbug/1294954: Python's `platform.mac_ver()` can be unreliable.
+ command = ['sw_vers', '-productVersion']
+ output = self._executive.run_command(command).strip()
+ if re.match(r'\d+\.\d+', output):
+ return output
+ except (OSError, SystemError, ScriptError):
+ pass
+ return platform_module.mac_ver()[0]
+
def _determine_os_name(self, sys_platform):
if sys_platform == 'darwin':
return 'mac'
diff --git a/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py b/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py
index c129ee30408..326d8df73ec 100644
--- a/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py
+++ b/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py
@@ -34,13 +34,13 @@ class MockPlatformInfo(object):
linux_distribution=None,
is_highdpi=False,
is_running_rosetta=False,
- machine='x86_64'):
+ machine=None):
self.os_name = os_name
self.os_version = os_version
self._linux_distribution = linux_distribution
self._is_highdpi = is_highdpi
self._is_running_rosetta = is_running_rosetta
- self._machine = machine
+ self._machine = machine or 'x86_64'
def is_mac(self):
return self.os_name == 'mac'
diff --git a/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py b/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py
index 04de9c31771..2ac7d68db23 100644
--- a/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py
+++ b/chromium/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py
@@ -168,6 +168,9 @@ class TestPlatformInfo(unittest.TestCase):
self.assertEqual(
self.make_info(fake_sys('darwin'),
fake_platform('11.0.0')).os_version, 'mac11')
+ self.assertEqual(
+ self.make_info(fake_sys('darwin'),
+ fake_platform('12.0.0')).os_version, 'mac12')
with self.assertRaises(AssertionError):
self.make_info(fake_sys('darwin'), fake_platform('10.20.0'))
diff --git a/chromium/third_party/blink/tools/blinkpy/common/system/system_host_mock.py b/chromium/third_party/blink/tools/blinkpy/common/system/system_host_mock.py
index cc983c0edb1..506a7c4fc63 100644
--- a/chromium/third_party/blink/tools/blinkpy/common/system/system_host_mock.py
+++ b/chromium/third_party/blink/tools/blinkpy/common/system/system_host_mock.py
@@ -39,6 +39,7 @@ class MockSystemHost(object):
log_executive=False,
os_name=None,
os_version=None,
+ machine=None,
executive=None,
filesystem=None,
time_return_val=123):
@@ -46,7 +47,7 @@ class MockSystemHost(object):
self.executive = executive or MockExecutive(should_log=log_executive)
self.filesystem = filesystem or MockFileSystem()
self.user = MockUser()
- self.platform = MockPlatformInfo()
+ self.platform = MockPlatformInfo(machine=machine)
if os_name:
self.platform.os_name = os_name
if os_version:
diff --git a/chromium/third_party/blink/tools/blinkpy/web_tests/port/base.py b/chromium/third_party/blink/tools/blinkpy/web_tests/port/base.py
index 968194c31c4..b5686e9d558 100644
--- a/chromium/third_party/blink/tools/blinkpy/web_tests/port/base.py
+++ b/chromium/third_party/blink/tools/blinkpy/web_tests/port/base.py
@@ -147,6 +147,8 @@ class Port(object):
('mac10.15', 'x86'),
('mac11', 'x86'),
('mac11-arm64', 'arm64'),
+ ('mac12', 'x86_64'),
+ ('mac12-arm64', 'arm64'),
('win7', 'x86'),
('win10.20h2', 'x86'),
('trusty', 'x86_64'),
@@ -156,7 +158,7 @@ class Port(object):
CONFIGURATION_SPECIFIER_MACROS = {
'mac': [
'mac10.12', 'mac10.13', 'mac10.14', 'mac10.15', 'mac11',
- 'mac11-arm64'
+ 'mac11-arm64', 'mac12', 'mac12-arm64'
],
'win': ['win7', 'win10.20h2'],
'linux': ['trusty'],
diff --git a/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac.py b/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac.py
index 624aaaea233..401a442b582 100644
--- a/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac.py
+++ b/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac.py
@@ -36,12 +36,15 @@ _log = logging.getLogger(__name__)
class MacPort(base.Port):
SUPPORTED_VERSIONS = ('mac10.12', 'mac10.13', 'mac10.14', 'mac10.15',
- 'mac11', 'mac11-arm64')
+ 'mac11', 'mac11-arm64', 'mac12', 'mac12-arm64')
port_name = 'mac'
FALLBACK_PATHS = {}
- FALLBACK_PATHS['mac11'] = ['mac']
+ FALLBACK_PATHS['mac12'] = ['mac']
+ FALLBACK_PATHS['mac12-arm64'] = ['mac-mac12-arm64'
+ ] + FALLBACK_PATHS['mac12']
+ FALLBACK_PATHS['mac11'] = ['mac-mac11'] + FALLBACK_PATHS['mac12']
FALLBACK_PATHS['mac11-arm64'] = ['mac-mac11-arm64'
] + FALLBACK_PATHS['mac11']
FALLBACK_PATHS['mac10.15'] = ['mac-mac10.15'] + FALLBACK_PATHS['mac11']
@@ -56,17 +59,11 @@ class MacPort(base.Port):
@classmethod
def determine_full_port_name(cls, host, options, port_name):
if port_name.endswith('mac'):
- # TODO(crbug.com/1253659): verify this under native arm.
- if (host.platform.get_machine() == 'arm64'
- or host.platform.is_running_rosetta()):
- # TODO(crbug.com/1197679): When running under py3, change this
- # to `version = host.platform.os_version + '-arm64'`. This
- # must be done before macOS 12 capability for this script.
- version = 'mac11-arm64'
+ parts = [port_name]
# TODO(crbug.com/1114885): This is to workaround the failure of
# blink_python_tests on mac10.10 and 10.11 waterfall bots. Remove this
# when we remove the step from the bots.
- elif (host.platform.os_version == 'mac10.10'
+ if (host.platform.os_version == 'mac10.10'
or host.platform.os_version == 'mac10.11'):
version = 'mac10.12'
# TODO(crbug.com/1126062): Workaround for Big sur using 10.16 version,
@@ -76,7 +73,15 @@ class MacPort(base.Port):
version = 'mac11'
else:
version = host.platform.os_version
- return port_name + '-' + version
+ parts.append(version)
+ # Maybe add an architecture suffix.
+ # In this context, 'arm64' refers to Apple M1.
+ # No suffix is appended for Intel-based ports.
+ if (host.platform.get_machine() == 'arm64'
+ or host.platform.is_running_rosetta()):
+ # TODO(crbug.com/1253659): verify this under native arm.
+ parts.append('arm64')
+ return '-'.join(parts)
return port_name
def __init__(self, host, port_name, **kwargs):
diff --git a/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py b/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py
index c99069f6b7f..d754896c303 100644
--- a/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py
+++ b/chromium/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py
@@ -39,9 +39,11 @@ class MacPortTest(port_testcase.PortTestCase):
full_port_name = 'mac-mac10.12'
port_maker = mac.MacPort
- def assert_name(self, port_name, os_version_string, expected):
- port = self.make_port(
- os_version=os_version_string, port_name=port_name)
+ def assert_name(self, port_name, os_version_string, expected,
+ machine=None):
+ port = self.make_port(os_version=os_version_string,
+ port_name=port_name,
+ machine=machine)
self.assertEqual(expected, port.name())
def test_operating_system(self):
@@ -52,6 +54,21 @@ class MacPortTest(port_testcase.PortTestCase):
self.assertEqual(port.get_platform_tags(),
{'mac', 'mac10.12', 'x86', 'release'})
+ def test_versions(self):
+ # Workarounds where we need to bump up the version.
+ self.assert_name(None, 'mac10.16', 'mac-mac11')
+ self.assert_name('mac', 'mac10.16', 'mac-mac11')
+
+ self.assert_name(None, 'mac11', 'mac-mac11')
+ self.assert_name(None, 'mac12', 'mac-mac12')
+ self.assert_name('mac', 'mac11', 'mac-mac11')
+ self.assert_name('mac', 'mac12', 'mac-mac12')
+
+ self.assert_name(None, 'mac11', 'mac-mac11-arm64', 'arm64')
+ self.assert_name(None, 'mac12', 'mac-mac12-arm64', 'arm64')
+ self.assert_name('mac', 'mac11', 'mac-mac11-arm64', 'arm64')
+ self.assert_name('mac', 'mac12', 'mac-mac12-arm64', 'arm64')
+
def test_driver_name_option(self):
self.assertTrue(
self.make_port()._path_to_driver().endswith('Content Shell'))
diff --git a/chromium/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py b/chromium/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py
index 7b8cb1dbe85..3241aa76923 100644
--- a/chromium/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py
+++ b/chromium/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py
@@ -59,6 +59,7 @@ class PortTestCase(LoggingTestCase):
# Subclasses override this to point to their Port subclass.
os_name = None
os_version = None
+ machine = None
port_maker = Port
port_name = None
full_port_name = None
@@ -69,10 +70,12 @@ class PortTestCase(LoggingTestCase):
options=None,
os_name=None,
os_version=None,
+ machine=None,
**kwargs):
- host = host or MockSystemHost(
- os_name=(os_name or self.os_name),
- os_version=(os_version or self.os_version))
+ host = host or MockSystemHost(os_name=(os_name or self.os_name),
+ os_version=(os_version
+ or self.os_version),
+ machine=(machine or self.machine))
options = options or optparse.Values({
'configuration': 'Release',
'use_xvfb': True
diff --git a/chromium/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc b/chromium/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc
index 74a21be670c..8b7e3ff15aa 100644
--- a/chromium/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc
+++ b/chromium/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc
@@ -460,19 +460,16 @@ TEST(MachOImageAnnotationsReader, CrashAbort) {
test_mach_o_image_annotations_reader.Run();
}
-#if defined(ADDRESS_SANITIZER)
-// https://crbug.com/844396
-#define MAYBE_CrashModuleInitialization DISABLED_CrashModuleInitialization
-#else
-#define MAYBE_CrashModuleInitialization CrashModuleInitialization
-#endif
-TEST(MachOImageAnnotationsReader, MAYBE_CrashModuleInitialization) {
+// Flaky on ASAN https://crbug.com/844396
+// Flaky in general https://crbug.com/1334418
+TEST(MachOImageAnnotationsReader, DISABLED_CrashModuleInitialization) {
TestMachOImageAnnotationsReader test_mach_o_image_annotations_reader(
TestMachOImageAnnotationsReader::kCrashModuleInitialization);
test_mach_o_image_annotations_reader.Run();
}
-TEST(MachOImageAnnotationsReader, CrashDyld) {
+// Flaky in general https://crbug.com/1334418
+TEST(MachOImageAnnotationsReader, DISABLED_CrashDyld) {
TestMachOImageAnnotationsReader test_mach_o_image_annotations_reader(
TestMachOImageAnnotationsReader::kCrashDyld);
test_mach_o_image_annotations_reader.Run();
diff --git a/chromium/third_party/dawn/webgpu-cts/expectations.txt b/chromium/third_party/dawn/webgpu-cts/expectations.txt
index dcfe6cfa540..30c4fe84c2f 100644
--- a/chromium/third_party/dawn/webgpu-cts/expectations.txt
+++ b/chromium/third_party/dawn/webgpu-cts/expectations.txt
@@ -29,7 +29,7 @@
# arm
# google google-0xffff
# intel intel-0xa2e intel-0xd26 intel-0xa011 intel-0x3e92 intel-0x3e9b
-# intel-0x5912
+# intel-0x5912 intel-0x9bc5
# nvidia nvidia-0xfe9 nvidia-0x1cb3 nvidia-0x2184
# qualcomm ]
# Decoder
@@ -486,6 +486,7 @@ crbug.com/dawn/0000 [ linux ] webgpu:shader,execution,expression,call,builtin,fi
crbug.com/dawn/0000 [ win ] webgpu:shader,execution,expression,call,builtin,insertBits:* [ Failure ]
crbug.com/dawn/0000 [ win ] webgpu:shader,execution,expression,call,builtin,ldexp:* [ Failure ]
crbug.com/tint/1500 [ nvidia release win ] webgpu:shader,execution,shader_io,compute_builtins:inputs:* [ Failure ]
+crbug.com/1342945 [ linux intel-0x9bc5 ] webgpu:shader,execution,expression,call,builtin,float_built_functions:float_builtin_functions* [ Failure ]
################################################################################
# vertex_state failures
@@ -507,6 +508,13 @@ crbug.com/dawn/0000 [ win ] webgpu:api,operation,command_buffer,copyTextureToTex
crbug.com/dawn/1364 webgpu:api,validation,createTexture:texture_usage:* [ Failure ]
################################################################################
+# Failures from upgrading Intel Mac Minis to 12.4
+# KEEP
+################################################################################
+crbug.com/dawn/1461 [ monterey intel ] webgpu:api,operation,command_buffer,copyTextureToTexture:copy_depth_stencil:format="depth24plus" [ Failure ]
+crbug.com/dawn/1461 [ monterey intel ] webgpu:api,operation,command_buffer,copyTextureToTexture:copy_depth_stencil:format="depth24plus-stencil8" [ Failure ]
+
+################################################################################
# untriaged failures
# KEEP
################################################################################
diff --git a/chromium/third_party/icu/README.chromium b/chromium/third_party/icu/README.chromium
index 4e869cec177..7ec151f2b49 100644
--- a/chromium/third_party/icu/README.chromium
+++ b/chromium/third_party/icu/README.chromium
@@ -195,7 +195,7 @@ D. Local Modifications
windowsZones.txt
zoneinfo64.txt
- As of October 6, 2021, the latest version is 2021a1 (a reduced version of 2021b)
+ As of Aug 18, 2022, the latest version is 2022b
and the above files are available at the ICU github repos.
4. Build-related changes
diff --git a/chromium/third_party/icu/common/icudtb.dat b/chromium/third_party/icu/common/icudtb.dat
index 436fd02c6f8..6efd92c16c0 100644
--- a/chromium/third_party/icu/common/icudtb.dat
+++ b/chromium/third_party/icu/common/icudtb.dat
Binary files differ
diff --git a/chromium/third_party/icu/common/icudtl.dat b/chromium/third_party/icu/common/icudtl.dat
index 9255d35860e..907ee4f1a3e 100644
--- a/chromium/third_party/icu/common/icudtl.dat
+++ b/chromium/third_party/icu/common/icudtl.dat
Binary files differ
diff --git a/chromium/third_party/icu/ios/icudtl.dat b/chromium/third_party/icu/ios/icudtl.dat
index b2a99b15a44..01892010a3a 100644
--- a/chromium/third_party/icu/ios/icudtl.dat
+++ b/chromium/third_party/icu/ios/icudtl.dat
Binary files differ
diff --git a/chromium/third_party/icu/source/data/misc/metaZones.txt b/chromium/third_party/icu/source/data/misc/metaZones.txt
index d17ce06b1d5..afb588845cb 100644
--- a/chromium/third_party/icu/source/data/misc/metaZones.txt
+++ b/chromium/third_party/icu/source/data/misc/metaZones.txt
@@ -870,6 +870,7 @@ metaZones:table(nofallback){
wall{"Wallis"}
yaku{"Yakutsk"}
yeka{"Yekaterinburg"}
+ yuko{"Yukon"}
}
metazoneInfo{
"Africa:Abidjan"{
diff --git a/chromium/third_party/icu/source/data/misc/timezoneTypes.txt b/chromium/third_party/icu/source/data/misc/timezoneTypes.txt
index 39873bd933b..d4957cb67b6 100644
--- a/chromium/third_party/icu/source/data/misc/timezoneTypes.txt
+++ b/chromium/third_party/icu/source/data/misc/timezoneTypes.txt
@@ -87,6 +87,7 @@ timezoneTypes:table(nofallback){
"Etc:Universal"{"Etc/UTC"}
"Etc:Zulu"{"Etc/UTC"}
"Europe:Belfast"{"Europe/London"}
+ "Europe:Kyiv"{"Europe/Kiev"}
"Europe:Nicosia"{"Asia/Nicosia"}
"Europe:Tiraspol"{"Europe/Chisinau"}
"Mexico:BajaNorte"{"America/Tijuana"}
diff --git a/chromium/third_party/icu/source/data/misc/zoneinfo64.txt b/chromium/third_party/icu/source/data/misc/zoneinfo64.txt
index 69c9d3fc54c..bb7acc0012c 100644
--- a/chromium/third_party/icu/source/data/misc/zoneinfo64.txt
+++ b/chromium/third_party/icu/source/data/misc/zoneinfo64.txt
@@ -3,17 +3,17 @@
// License & terms of use: http://www.unicode.org/copyright.html
//---------------------------------------------------------
// Build tool: tz2icu
-// Build date: Wed Oct 27 14:01:32 2021
+// Build date: Thu Aug 18 04:47:36 2022
// tz database: ftp://ftp.iana.org/tz/
-// tz version: 2021a3
-// ICU version: 70.1
+// tz version: 2022b
+// ICU version: 72.0.1
//---------------------------------------------------------
// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<
// >> !!! >>> DO NOT EDIT <<< !!! <<
//---------------------------------------------------------
zoneinfo64:table(nofallback) {
- TZVersion { "2021a3" }
+ TZVersion { "2022b" }
Zones:array {
/* ACT */ :int { 356 } //Z#0
/* AET */ :int { 368 } //Z#1
@@ -24,13 +24,9 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1830383032 }
typeOffsets:intvector { -968, 0, 0, 0 }
typeMap:bin { "01" }
- links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 55, 348 }
+ links:intvector { 5, 6, 11, 13, 21, 22, 27, 38, 51, 52, 55, 346, 348, 516 }
} //Z#5
- /* Africa/Accra */ :table {
- trans:intvector { -1709337548, -1581206400, -1577917200, -1556834400, -1546294800, -1525298400, -1514758800, -1493762400, -1483222800, -1462226400, -1451686800, -1430604000, -1420064400, -1399068000, -1388528400, -1367532000, -1356992400, -1335996000, -1325456400, -1304373600, -1293834000, -1272837600, -1262298000, -1241301600, -1230762000, -1209765600, -1199226000, -1178143200, -1167603600, -1146607200, -1136067600, -1115071200, -1104531600, -1083535200, -1072995600, -1051912800, -1041373200, -1020376800, -1009837200, -988840800, -978301200, -957304800, -946765200, -936309600, -915142800, -904773600, -883606800, -880329600, -756952200, -610149600, -599610600, -578613600, -568074600, -546991200, -536452200, -515455200, -504916200, -483919200, -473380200, -452383200, -441844200 }
- typeOffsets:intvector { -52, 0, 0, 0, 0, 1200, 0, 1800, 1800, 0 }
- typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010401030103010301030103010301" }
- } //Z#6
+ /* Africa/Accra */ :int { 5 } //Z#6
/* Africa/Addis_Ababa */ :int { 48 } //Z#7
/* Africa/Algiers */ :table {
transPre32:intvector { -1, 1808374564 }
@@ -137,7 +133,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1946168836, -1309746600, -1261969200, -1041388200, -865305900 }
typeOffsets:intvector { 8836, 0, 9000, 0, 9900, 0, 10800, 0 }
typeMap:bin { "0103010203" }
- links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 397, 516, 520, 525 }
+ links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 397, 517, 521, 526 }
} //Z#48
/* Africa/Ndjamena */ :table {
trans:intvector { -1830387612, 308703600, 321314400 }
@@ -159,7 +155,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000, 1352505600, 1364515200, 1382659200 }
typeOffsets:intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 }
typeMap:bin { "0102010201020103010201020102010201020102010201020103010203010203" }
- links:intvector { 56, 533 }
+ links:intvector { 56, 534 }
} //Z#56
/* Africa/Tunis */ :table {
transPre32:intvector { -1, 1497764852 }
@@ -181,7 +177,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -36000 }
finalYear:int { 2008 }
- links:intvector { 59, 80, 618 }
+ links:intvector { 59, 80, 619 }
} //Z#59
/* America/Anchorage */ :table {
transPre32:intvector { -1, 1069743569, -1, 2106016072 }
@@ -191,10 +187,10 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- links:intvector { 4, 60, 617 }
+ links:intvector { 4, 60, 618 }
} //Z#60
- /* America/Anguilla */ :int { 187 } //Z#61
- /* America/Antigua */ :int { 187 } //Z#62
+ /* America/Anguilla */ :int { 190 } //Z#61
+ /* America/Antigua */ :int { 190 } //Z#62
/* America/Araguaina */ :table {
trans:intvector { -1767214032, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1350788400, 1361066400 }
typeOffsets:intvector { -11568, 0, -10800, 0, -10800, 3600 }
@@ -277,7 +273,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { -16392, 0, -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030204050405040504050405040504030402040504" }
} //Z#76
- /* America/Aruba */ :int { 105 } //Z#77
+ /* America/Aruba */ :int { 190 } //Z#77
/* America/Asuncion */ :table {
trans:intvector { -1206389360, 86760000, 134017200, 181368000, 194497200, 212990400, 226033200, 244526400, 257569200, 276062400, 291783600, 307598400, 323406000, 339220800, 354942000, 370756800, 386478000, 402292800, 418014000, 433828800, 449636400, 465451200, 481172400, 496987200, 512708400, 528523200, 544244400, 560059200, 575866800, 591681600, 607402800, 625032000, 638938800, 654753600, 670474800, 686721600, 699418800, 718257600, 733546800, 749448000, 762318000, 780984000, 793767600, 812520000, 825649200, 844574400, 856666800, 876024000, 888721200, 907473600, 920775600, 938923200, 952225200, 970372800, 983674800, 1002427200, 1018148400, 1030852800, 1049598000, 1062907200, 1081047600, 1097985600, 1110682800, 1129435200, 1142132400, 1160884800, 1173582000, 1192939200, 1205031600, 1224388800, 1236481200, 1255838400, 1270954800, 1286078400, 1302404400, 1317528000, 1333854000, 1349582400, 1364094000, 1381032000 }
typeOffsets:intvector { -13840, 0, -14400, 0, -14400, 3600, -10800, 0 }
@@ -286,12 +282,7 @@ zoneinfo64:table(nofallback) {
finalRaw:int { -14400 }
finalYear:int { 2014 }
} //Z#78
- /* America/Atikokan */ :table {
- transPre32:intvector { -1, 1928234084 }
- trans:intvector { -1632067200, -1615136400, -923248800, -765392400 }
- typeOffsets:intvector { -21988, 0, -21600, 0, -21600, 3600, -18000, 0 }
- typeMap:bin { "0102010203" }
- } //Z#79
+ /* America/Atikokan */ :int { 182 } //Z#79
/* America/Atka */ :int { 59 } //Z#80
/* America/Bahia */ :table {
trans:intvector { -1767216356, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1318734000, 1330221600 }
@@ -321,12 +312,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { -21168, 0, -21600, 0, -21600, 1800, -21600, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020103010301" }
} //Z#85
- /* America/Blanc-Sablon */ :table {
- transPre32:intvector { -1, 1581070604 }
- trans:intvector { -1632074400, -1615143600, -880221600, -765399600 }
- typeOffsets:intvector { -13708, 0, -14400, 0, -14400, 3600 }
- typeMap:bin { "0102010201" }
- } //Z#86
+ /* America/Blanc-Sablon */ :int { 190 } //Z#86
/* America/Boa_Vista */ :table {
trans:intvector { -1767211040, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 938923200, 951620400, 970977600, 971578800 }
typeOffsets:intvector { -14560, 0, -14400, 0, -14400, 3600 }
@@ -386,7 +372,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 98, 382, 620 }
+ links:intvector { 98, 382, 621 }
} //Z#98
/* America/Chihuahua */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 }
@@ -403,23 +389,13 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { -20173, 0, -21600, 0, -21600, 3600 }
typeMap:bin { "010201020102010201" }
} //Z#102
- /* America/Creston */ :table {
- transPre32:intvector { -1, 1581084860 }
- trans:intvector { -1680454800, -1627833600 }
- typeOffsets:intvector { -27964, 0, -28800, 0, -25200, 0 }
- typeMap:bin { "020102" }
- } //Z#103
+ /* America/Creston */ :int { 185 } //Z#103
/* America/Cuiaba */ :table {
trans:intvector { -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1541304000, 1550372400 }
typeOffsets:intvector { -13460, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
} //Z#104
- /* America/Curacao */ :table {
- trans:intvector { -1826738653, -157750200 }
- typeOffsets:intvector { -16547, 0, -16200, 0, -14400, 0 }
- typeMap:bin { "0102" }
- links:intvector { 77, 105, 148, 153 }
- } //Z#105
+ /* America/Curacao */ :int { 190 } //Z#105
/* America/Danmarkshavn */ :table {
trans:intvector { -1686091520, 323845200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 820465200 }
typeOffsets:intvector { -4480, 0, -10800, 0, -10800, 3600, 0, 0 }
@@ -445,7 +421,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- links:intvector { 109, 205, 545, 626 }
+ links:intvector { 109, 205, 546, 627 }
} //Z#109
/* America/Detroit */ :table {
trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, -80506740, -68666400, -52938000, -37216800, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -454,9 +430,9 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 110, 625 }
+ links:intvector { 110, 626 }
} //Z#110
- /* America/Dominica */ :int { 187 } //Z#111
+ /* America/Dominica */ :int { 190 } //Z#111
/* America/Edmonton */ :table {
trans:intvector { -1998663968, -1632063600, -1615132800, -1600614000, -1596816000, -1567954800, -1551628800, -1536505200, -1523203200, -1504450800, -1491753600, -1473001200, -1459699200, -880210800, -765388800, -715791600, -702489600, 73472400, 89193600, 104922000, 120643200, 136371600, 152092800, 167821200, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
typeOffsets:intvector { -27232, 0, -25200, 0, -25200, 3600 }
@@ -516,8 +492,8 @@ zoneinfo64:table(nofallback) {
finalRaw:int { -18000 }
finalYear:int { 2019 }
} //Z#122
- /* America/Grenada */ :int { 187 } //Z#123
- /* America/Guadeloupe */ :int { 187 } //Z#124
+ /* America/Grenada */ :int { 190 } //Z#123
+ /* America/Guadeloupe */ :int { 190 } //Z#124
/* America/Guatemala */ :table {
trans:intvector { -1617040676, 123055200, 130914000, 422344800, 433054800, 669708000, 684219600, 1146376800, 1159678800 }
typeOffsets:intvector { -21724, 0, -21600, 0, -21600, 3600 }
@@ -566,7 +542,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 117, 131, 139, 513, 621 }
+ links:intvector { 117, 131, 139, 514, 622 }
} //Z#131
/* America/Indiana/Knox */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -576,7 +552,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 132, 147, 624 }
+ links:intvector { 132, 147, 625 }
} //Z#132
/* America/Indiana/Marengo */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -653,7 +629,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1827687170, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 }
typeOffsets:intvector { -18430, 0, -18000, 0, -18000, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- links:intvector { 142, 530 }
+ links:intvector { 142, 531 }
} //Z#142
/* America/Jujuy */ :int { 68 } //Z#143
/* America/Juneau */ :table {
@@ -685,7 +661,7 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2008 }
} //Z#146
/* America/Knox_IN */ :int { 132 } //Z#147
- /* America/Kralendijk */ :int { 105 } //Z#148
+ /* America/Kralendijk */ :int { 190 } //Z#148
/* America/La_Paz */ :table {
trans:intvector { -1205954844, -1192307244 }
typeOffsets:intvector { -16356, 0, -16356, 3600, -14400, 0 }
@@ -705,10 +681,10 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 151, 550, 627, 628 }
+ links:intvector { 151, 551, 628, 629 }
} //Z#151
/* America/Louisville */ :int { 145 } //Z#152
- /* America/Lower_Princes */ :int { 105 } //Z#153
+ /* America/Lower_Princes */ :int { 190 } //Z#153
/* America/Maceio */ :table {
trans:intvector { -1767217028, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 813726000, 824004000, 938919600, 951616800, 970974000, 972180000, 1003028400, 1013911200 }
typeOffsets:intvector { -8572, 0, -10800, 0, -10800, 3600 }
@@ -726,7 +702,7 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201" }
links:intvector { 156, 378 }
} //Z#156
- /* America/Marigot */ :int { 187 } //Z#157
+ /* America/Marigot */ :int { 190 } //Z#157
/* America/Martinique */ :table {
trans:intvector { -1851537340, 323841600, 338958000 }
typeOffsets:intvector { -14660, 0, -14400, 0, -14400, 3600 }
@@ -747,7 +723,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -25200 }
finalYear:int { 2003 }
- links:intvector { 160, 539 }
+ links:intvector { 160, 540 }
} //Z#160
/* America/Mendoza */ :int { 70 } //Z#161
/* America/Menominee */ :table {
@@ -783,7 +759,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -21600 }
finalYear:int { 2003 }
- links:intvector { 165, 540 }
+ links:intvector { 165, 541 }
} //Z#165
/* America/Miquelon */ :table {
trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 }
@@ -816,15 +792,8 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "01030203020302030203020302030203020302030203020305040504060406040504060406040705040604060406040604060406040604060406040604060406040604060406040604060406040604060406040604" }
} //Z#169
/* America/Montreal */ :int { 218 } //Z#170
- /* America/Montserrat */ :int { 187 } //Z#171
- /* America/Nassau */ :table {
- trans:intvector { -1825095030, -873140400, -788904000, -786222000, -763848000, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
- typeOffsets:intvector { -18570, 0, -18000, 0, -18000, 3600 }
- typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- finalRule { "US" }
- finalRaw:int { -18000 }
- finalYear:int { 2008 }
- } //Z#172
+ /* America/Montserrat */ :int { 190 } //Z#171
+ /* America/Nassau */ :int { 218 } //Z#172
/* America/New_York */ :table {
transPre32:intvector { -1, 1577316496 }
trans:intvector { -1633280400, -1615140000, -1601830800, -1583690400, -1570381200, -1551636000, -1536512400, -1523210400, -1504458000, -1491760800, -1473008400, -1459706400, -1441558800, -1428256800, -1410109200, -1396807200, -1378659600, -1365357600, -1347210000, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1189357200, -1176055200, -1157302800, -1144605600, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -923248800, -905101200, -891799200, -880218000, -765396000, -747248400, -733946400, -715798800, -702496800, -684349200, -671047200, -652899600, -639597600, -620845200, -608148000, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -833,7 +802,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 173, 622 }
+ links:intvector { 173, 623 }
} //Z#173
/* America/Nipigon */ :table {
transPre32:intvector { -1, 1928233280 }
@@ -908,7 +877,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1946918424 }
typeOffsets:intvector { -19088, 0, -19176, 0, -18000, 0 }
typeMap:bin { "0102" }
- links:intvector { 97, 100, 182 }
+ links:intvector { 79, 97, 100, 182 }
} //Z#182
/* America/Pangnirtung */ :table {
trans:intvector { -1546300800, -880221600, -765399600, -147902400, -131572800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -928,7 +897,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 }
typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 }
typeMap:bin { "0102010201020102010201" }
- links:intvector { 185, 547, 619 }
+ links:intvector { 103, 185, 548, 620 }
} //Z#185
/* America/Port-au-Prince */ :table {
transPre32:intvector { -1, 1770463056 }
@@ -939,12 +908,7 @@ zoneinfo64:table(nofallback) {
finalRaw:int { -18000 }
finalYear:int { 2018 }
} //Z#186
- /* America/Port_of_Spain */ :table {
- trans:intvector { -1825098836 }
- typeOffsets:intvector { -14764, 0, -14400, 0 }
- typeMap:bin { "01" }
- links:intvector { 61, 62, 111, 123, 124, 157, 171, 187, 207, 209, 210, 211, 212, 219, 221 }
- } //Z#187
+ /* America/Port_of_Spain */ :int { 190 } //Z#187
/* America/Porto_Acre */ :int { 197 } //Z#188
/* America/Porto_Velho */ :table {
trans:intvector { -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 }
@@ -956,13 +920,13 @@ zoneinfo64:table(nofallback) {
trans:intvector { -873057600, -765399600 }
typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "010201" }
- links:intvector { 190, 549 }
+ links:intvector { 61, 62, 77, 86, 105, 111, 123, 124, 148, 153, 157, 171, 187, 190, 207, 209, 210, 211, 212, 219, 221, 550 }
} //Z#190
/* America/Punta_Arenas */ :table {
transPre32:intvector { -1, 1770462716 }
- trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
- typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600, -10800, 0 }
- typeMap:bin { "0301030403020102010201020102010401040104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" }
+ trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -736632000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
+ typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16965, 0, -14400, 0, -14400, 3600, -10800, 0 }
+ typeMap:bin { "030103040302010201020102010201040104020104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" }
} //Z#191
/* America/Rainy_River */ :table {
transPre32:intvector { -1, 1928234792 }
@@ -1014,12 +978,12 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" }
} //Z#200
/* America/Santiago */ :table {
- trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
- typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 }
- typeMap:bin { "0100030002010201020102010201030103040301030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
+ trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736635600, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200, 1586055600, 1599364800, 1617505200, 1630814400, 1648954800, 1662868800, 1680404400, 1693713600 }
+ typeOffsets:intvector { -16965, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 }
+ typeMap:bin { "01000300020102010201020102010301030402010304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
finalRule { "Chile" }
finalRaw:int { -14400 }
- finalYear:int { 2020 }
+ finalYear:int { 2024 }
links:intvector { 201, 394 }
} //Z#201
/* America/Santo_Domingo */ :table {
@@ -1052,7 +1016,7 @@ zoneinfo64:table(nofallback) {
finalRaw:int { -32400 }
finalYear:int { 2008 }
} //Z#206
- /* America/St_Barthelemy */ :int { 187 } //Z#207
+ /* America/St_Barthelemy */ :int { 190 } //Z#207
/* America/St_Johns */ :table {
trans:intvector { -1664130548, -1650137348, -1632076148, -1615145348, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060, 1173583860, 1194143460, 1205033460, 1225593060, 1236483060, 1257042660, 1268537460, 1289097060, 1299987060, 1320553800, 1331443800, 1352003400 }
typeOffsets:intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 }
@@ -1062,10 +1026,10 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2013 }
links:intvector { 208, 381, 390 }
} //Z#208
- /* America/St_Kitts */ :int { 187 } //Z#209
- /* America/St_Lucia */ :int { 187 } //Z#210
- /* America/St_Thomas */ :int { 187 } //Z#211
- /* America/St_Vincent */ :int { 187 } //Z#212
+ /* America/St_Kitts */ :int { 190 } //Z#209
+ /* America/St_Lucia */ :int { 190 } //Z#210
+ /* America/St_Thomas */ :int { 190 } //Z#211
+ /* America/St_Vincent */ :int { 190 } //Z#212
/* America/Swift_Current */ :table {
trans:intvector { -2030201320, -1632063600, -1615132800, -880210800, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 }
typeOffsets:intvector { -25880, 0, -25200, 0, -25200, 3600, -21600, 0 }
@@ -1100,7 +1064,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2011 }
- links:intvector { 115, 199, 217, 538 }
+ links:intvector { 115, 199, 217, 539 }
} //Z#217
/* America/Toronto */ :table {
transPre32:intvector { -1, 1928231148 }
@@ -1110,9 +1074,9 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 170, 218, 388 }
+ links:intvector { 170, 172, 218, 388 }
} //Z#218
- /* America/Tortola */ :int { 187 } //Z#219
+ /* America/Tortola */ :int { 190 } //Z#219
/* America/Vancouver */ :table {
transPre32:intvector { -1, 1581086444 }
trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -747237600, -733935600, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
@@ -1123,7 +1087,7 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2008 }
links:intvector { 220, 391 }
} //Z#220
- /* America/Virgin */ :int { 187 } //Z#221
+ /* America/Virgin */ :int { 190 } //Z#221
/* America/Whitehorse */ :table {
transPre32:intvector { -1, 2105969308 }
trans:intvector { -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -765381600, -147884400, -131554800, -81961200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800, 1205056800, 1225616400, 1236506400, 1257066000, 1268560800, 1289120400, 1300010400, 1320570000, 1331460000, 1352019600, 1362909600, 1383469200, 1394359200, 1414918800, 1425808800, 1446368400, 1457863200, 1478422800, 1489312800, 1509872400, 1520762400, 1541322000, 1552212000, 1572771600, 1583661600, 1604214000 }
@@ -1168,11 +1132,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 }
typeMap:bin { "02000201020102" }
} //Z#227
- /* Antarctica/DumontDUrville */ :table {
- trans:intvector { -725846400, -566992800, -415497600 }
- typeOffsets:intvector { 0, 0, 36000, 0 }
- typeMap:bin { "010001" }
- } //Z#228
+ /* Antarctica/DumontDUrville */ :int { 586 } //Z#228
/* Antarctica/Macquarie */ :table {
transPre32:intvector { -1, 2080708096 }
trans:intvector { -1680508800, -1665388800, -1601719200, -687052800, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000, 1238860800, 1254585600, 1301760000, 1317484800 }
@@ -1187,7 +1147,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 0, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0201" }
} //Z#230
- /* Antarctica/McMurdo */ :int { 553 } //Z#231
+ /* Antarctica/McMurdo */ :int { 554 } //Z#231
/* Antarctica/Palmer */ :table {
trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
@@ -1198,12 +1158,8 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 0, 0, -10800, 0 }
typeMap:bin { "01" }
} //Z#233
- /* Antarctica/South_Pole */ :int { 553 } //Z#234
- /* Antarctica/Syowa */ :table {
- trans:intvector { -407808000 }
- typeOffsets:intvector { 0, 0, 10800, 0 }
- typeMap:bin { "01" }
- } //Z#235
+ /* Antarctica/South_Pole */ :int { 554 } //Z#234
+ /* Antarctica/Syowa */ :int { 310 } //Z#235
/* Antarctica/Troll */ :table {
trans:intvector { 1111885200, 1130634000 }
typeOffsets:intvector { 0, 0, 0, 7200 }
@@ -1212,12 +1168,8 @@ zoneinfo64:table(nofallback) {
finalRaw:int { 0 }
finalYear:int { 2006 }
} //Z#236
- /* Antarctica/Vostok */ :table {
- trans:intvector { -380073600 }
- typeOffsets:intvector { 0, 0, 21600, 0 }
- typeMap:bin { "01" }
- } //Z#237
- /* Arctic/Longyearbyen */ :int { 475 } //Z#238
+ /* Antarctica/Vostok */ :int { 330 } //Z#237
+ /* Arctic/Longyearbyen */ :int { 446 } //Z#238
/* Asia/Aden */ :int { 310 } //Z#239
/* Asia/Almaty */ :table {
trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 }
@@ -1275,7 +1227,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1570084924 }
typeOffsets:intvector { 24124, 0, 25200, 0 }
typeMap:bin { "01" }
- links:intvector { 251, 303, 332 }
+ links:intvector { 251, 303, 332, 519 }
} //Z#251
/* Asia/Barnaul */ :table {
trans:intvector { -1579844100, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 801590400, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1459022400 }
@@ -1296,11 +1248,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 17904, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020102010201020102010201020102010201020102010201020102010203" }
} //Z#254
- /* Asia/Brunei */ :table {
- trans:intvector { -1383464380, -1167636600 }
- typeOffsets:intvector { 27580, 0, 27000, 0, 28800, 0 }
- typeMap:bin { "0102" }
- } //Z#255
+ /* Asia/Brunei */ :int { 290 } //Z#255
/* Asia/Calcutta */ :int { 287 } //Z#256
/* Asia/Chita */ :table {
trans:intvector { -1579419232, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800, 1459015200 }
@@ -1345,7 +1293,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1577936472 }
typeOffsets:intvector { 13272, 0, 14400, 0 }
typeMap:bin { "01" }
- links:intvector { 266, 297 }
+ links:intvector { 266, 297, 523, 527 }
} //Z#266
/* Asia/Dushanbe */ :table {
trans:intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 }
@@ -1362,34 +1310,34 @@ zoneinfo64:table(nofallback) {
} //Z#268
/* Asia/Gaza */ :table {
transPre32:intvector { -1, 2109557424 }
- trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400 }
+ trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666908000 }
typeOffsets:intvector { 8272, 0, 7200, 0, 7200, 3600 }
- typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Palestine" }
finalRaw:int { 7200 }
- finalYear:int { 2022 }
+ finalYear:int { 2023 }
} //Z#269
/* Asia/Harbin */ :int { 315 } //Z#270
/* Asia/Hebron */ :table {
transPre32:intvector { -1, 2109557273 }
- trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400 }
+ trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666908000 }
typeOffsets:intvector { 8423, 0, 7200, 0, 7200, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Palestine" }
finalRaw:int { 7200 }
- finalYear:int { 2022 }
+ finalYear:int { 2023 }
} //Z#271
/* Asia/Ho_Chi_Minh */ :table {
- trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 }
- typeOffsets:intvector { 25600, 0, 25200, 0, 25590, 0, 28800, 0, 32400, 0 }
- typeMap:bin { "020103040103010301" }
- links:intvector { 272, 311, 632 }
+ trans:intvector { -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 }
+ typeOffsets:intvector { 25590, 0, 25200, 0, 28800, 0, 32400, 0 }
+ typeMap:bin { "0102030102010201" }
+ links:intvector { 272, 311, 633 }
} //Z#272
/* Asia/Hong_Kong */ :table {
trans:intvector { -2056690800, -900910800, -891579600, -884248200, -761209200, -747907200, -728541000, -717049800, -697091400, -683785800, -668061000, -654755400, -636611400, -623305800, -605161800, -591856200, -573712200, -559801800, -541657800, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 1800, 28800, 3600, 32400, 0 }
typeMap:bin { "010302040103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301" }
- links:intvector { 273, 512 }
+ links:intvector { 273, 513 }
} //Z#273
/* Asia/Hovd */ :table {
trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800, 1458932400, 1474646400 }
@@ -1420,7 +1368,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Zion" }
finalRaw:int { 7200 }
finalYear:int { 2014 }
- links:intvector { 279, 322, 528 }
+ links:intvector { 279, 322, 529 }
} //Z#279
/* Asia/Kabul */ :table {
transPre32:intvector { -1, 1770429088 }
@@ -1437,7 +1385,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1988166492, -862637400, -764145000, -576135000, 1018119600, 1033840800, 1212260400, 1225476000, 1239735600, 1257012000 }
typeOffsets:intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 }
typeMap:bin { "03040301020102010201" }
- links:intvector { 282, 546 }
+ links:intvector { 282, 547 }
} //Z#282
/* Asia/Kashgar */ :int { 330 } //Z#283
/* Asia/Kathmandu */ :table {
@@ -1457,23 +1405,19 @@ zoneinfo64:table(nofallback) {
trans:intvector { -2019705670, -891581400, -872058600, -862637400, -764145000 }
typeOffsets:intvector { 21208, 0, 19270, 0, 19800, 0, 19800, 3600, 21200, 0 }
typeMap:bin { "04010203020302" }
- links:intvector { 256, 287, 514 }
+ links:intvector { 256, 287, 515 }
} //Z#287
/* Asia/Krasnoyarsk */ :table {
trans:intvector { -1577513486, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288465200, 1301166000, 1414260000 }
typeOffsets:intvector { 22286, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600, 28800, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
} //Z#288
- /* Asia/Kuala_Lumpur */ :table {
- transPre32:intvector { -1, 2117490090 }
- trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
- typeOffsets:intvector { 24406, 0, 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
- typeMap:bin { "0102030405070506" }
- } //Z#289
+ /* Asia/Kuala_Lumpur */ :int { 316 } //Z#289
/* Asia/Kuching */ :table {
trans:intvector { -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200 }
typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 }
typeMap:bin { "010203020302030203020302030203020402" }
+ links:intvector { 255, 290 }
} //Z#290
/* Asia/Kuwait */ :int { 310 } //Z#291
/* Asia/Macao */ :int { 293 } //Z#292
@@ -1508,7 +1452,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EUAsia" }
finalRaw:int { 7200 }
finalYear:int { 2000 }
- links:intvector { 298, 474 }
+ links:intvector { 298, 475 }
} //Z#298
/* Asia/Novokuznetsk */ :table {
trans:intvector { -1441259328, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288468800, 1301169600 }
@@ -1562,7 +1506,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -719636812 }
typeOffsets:intvector { 11212, 0, 10800, 0 }
typeMap:bin { "01" }
- links:intvector { 239, 291, 310 }
+ links:intvector { 235, 239, 291, 310 }
} //Z#310
/* Asia/Saigon */ :int { 272 } //Z#311
/* Asia/Sakhalin */ :table {
@@ -1579,20 +1523,20 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1948782472, -1830414600, -681210000, -672228000, -654771600, -640864800, -623408400, -609415200, -588848400, -577965600, -498128400, -462702600, -451733400, -429784200, -418296600, -399544200, -387451800, -368094600, -356002200, -336645000, -324552600, -305195400, -293103000, -264933000, 547578000, 560883600, 579027600, 592333200 }
typeOffsets:intvector { 30472, 0, 30600, 0, 30600, 3600, 32400, 0, 32400, 3600 }
typeMap:bin { "01030403040304030403010201020102010201020102010304030403" }
- links:intvector { 314, 599 }
+ links:intvector { 314, 600 }
} //Z#314
/* Asia/Shanghai */ :table {
transPre32:intvector { -1, 2117485353 }
trans:intvector { -1600675200, -1585904400, -933667200, -922093200, -908870400, -888829200, -881049600, -767869200, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -650019600, 515527200, 527014800, 545162400, 558464400, 577216800, 589914000, 608666400, 621968400, 640116000, 653418000, 671565600, 684867600 }
typeOffsets:intvector { 29143, 0, 28800, 0, 28800, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 259, 260, 270, 315, 384, 548 }
+ links:intvector { 259, 260, 270, 315, 384, 549 }
} //Z#315
/* Asia/Singapore */ :table {
trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
typeOffsets:intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "01020304060405" }
- links:intvector { 316, 601 }
+ links:intvector { 289, 316, 602 }
} //Z#316
/* Asia/Srednekolymsk */ :table {
trans:intvector { -1441188892, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600 }
@@ -1604,7 +1548,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1017820800, -766224000, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 299606400, 307551600 }
typeOffsets:intvector { 29160, 0, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "0103010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 318, 598 }
+ links:intvector { 318, 599 }
} //Z#318
/* Asia/Tashkent */ :table {
trans:intvector { -1441168631, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600 }
@@ -1617,14 +1561,10 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102030403040304030403040304030403040304020103" }
} //Z#320
/* Asia/Tehran */ :table {
- trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800, 2121193800, 2137087800 }
- transPost32:intvector { 0, -2142151096, 0, -2126257096, 0, -2110615096, 0, -2094721096, 0, -2079079096, 0, -2063185096, 0, -2047543096, 0, -2031649096, 0, -2015920696, 0, -2000026696, 0, -1984384696, 0, -1968490696, 0, -1952848696, 0, -1936954696, 0, -1921312696, 0, -1905418696, 0, -1889690296, 0, -1873796296, 0, -1858154296, 0, -1842260296, 0, -1826618296, 0, -1810724296, 0, -1795082296, 0, -1779188296, 0, -1763459896, 0, -1747565896, 0, -1731923896, 0, -1716029896, 0, -1700387896, 0, -1684493896, 0, -1668851896, 0, -1652957896, 0, -1637229496, 0, -1621335496, 0, -1605693496, 0, -1589799496, 0, -1574157496, 0, -1558263496, 0, -1542621496, 0, -1526727496, 0, -1510999096, 0, -1495105096, 0, -1479463096, 0, -1463569096, 0, -1447927096, 0, -1432033096, 0, -1416391096, 0, -1400497096, 0, -1384855096, 0, -1368961096, 0, -1353232696, 0, -1337338696, 0, -1321696696, 0, -1305802696, 0, -1290160696, 0, -1274266696, 0, -1258624696, 0, -1242730696, 0, -1227002296, 0, -1211108296, 0, -1195466296, 0, -1179572296, 0, -1163930296, 0, -1148036296, 0, -1132394296, 0, -1116500296, 0, -1100771896, 0, -1084877896, 0, -1069235896, 0, -1053341896, 0, -1037699896, 0, -1021805896, 0, -1006163896, 0, -990269896, 0, -974541496, 0, -958647496, 0, -943005496, 0, -927111496, 0, -911469496, 0, -895575496, 0, -879933496, 0, -864039496, 0, -848311096, 0, -832417096, 0, -816775096, 0, -800881096, 0, -785239096, 0, -769345096, 0, -753703096, 0, -737809096, 0, -722080696, 0, -706186696, 0, -690544696, 0, -674650696, 0, -659008696, 0, -643114696, 0, -627472696, 0, -611578696, 0, -595850296, 0, -579956296, 0, -564314296, 0, -548420296 }
+ trans:intvector { -1090466744, 227820600, 246223800, 259617600, 271108800, 283982400, 296598600, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600 }
typeOffsets:intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 }
- typeMap:bin { "010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- finalRule { "Iran" }
- finalRaw:int { 12600 }
- finalYear:int { 2089 }
- links:intvector { 321, 527 }
+ typeMap:bin { "01020304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ links:intvector { 321, 528 }
} //Z#321
/* Asia/Tel_Aviv */ :int { 279 } //Z#322
/* Asia/Thimbu */ :int { 324 } //Z#323
@@ -1639,7 +1579,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -683802000, -672310800, -654771600, -640861200, -620298000, -609411600, -588848400, -577962000 }
typeOffsets:intvector { 33539, 0, 32400, 0, 32400, 3600 }
typeMap:bin { "010201020102010201" }
- links:intvector { 325, 529, 531 }
+ links:intvector { 325, 530, 532 }
} //Z#325
/* Asia/Tomsk */ :table {
trans:intvector { -1578807591, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1020193200, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1464465600 }
@@ -1658,7 +1598,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1325483420 }
typeOffsets:intvector { 21020, 0, 21600, 0 }
typeMap:bin { "01" }
- links:intvector { 283, 330 }
+ links:intvector { 237, 283, 330 }
} //Z#330
/* Asia/Ust-Nera */ :table {
trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1315828800, 1414249200 }
@@ -1680,7 +1620,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1577946287, -873268200, -778410000 }
typeOffsets:intvector { 23087, 0, 23400, 0, 32400, 0 }
typeMap:bin { "010201" }
- links:intvector { 309, 335 }
+ links:intvector { 309, 335, 520 }
} //Z#335
/* Asia/Yekaterinburg */ :table {
trans:intvector { -1688270553, -1592610305, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1111870800, 1130619600, 1143320400, 1162069200, 1174770000, 1193518800, 1206824400, 1224968400, 1238274000, 1256418000, 1269723600, 1288472400, 1301173200, 1414267200 }
@@ -1691,7 +1631,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288476000, 1301176800, 1319925600 }
typeOffsets:intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102010203040304030403040304030403040304030403040304030403040304030403" }
- links:intvector { 337, 541 }
+ links:intvector { 337, 542 }
} //Z#337
/* Atlantic/Azores */ :table {
transPre32:intvector { -1, 1581063056 }
@@ -1733,7 +1673,7 @@ zoneinfo64:table(nofallback) {
finalYear:int { 1997 }
links:intvector { 342, 343 }
} //Z#343
- /* Atlantic/Jan_Mayen */ :int { 475 } //Z#344
+ /* Atlantic/Jan_Mayen */ :int { 446 } //Z#344
/* Atlantic/Madeira */ :table {
trans:intvector { -1830380400, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -623278800, -607554000, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 }
@@ -1742,12 +1682,7 @@ zoneinfo64:table(nofallback) {
finalRaw:int { 0 }
finalYear:int { 1997 }
} //Z#345
- /* Atlantic/Reykjavik */ :table {
- trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 }
- typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 346, 515 }
- } //Z#346
+ /* Atlantic/Reykjavik */ :int { 5 } //Z#346
/* Atlantic/South_Georgia */ :table {
transPre32:intvector { -1, 1770454464 }
typeOffsets:intvector { -8768, 0, -7200, 0 }
@@ -1900,10 +1835,10 @@ zoneinfo64:table(nofallback) {
/* Canada/Saskatchewan */ :int { 195 } //Z#392
/* Canada/Yukon */ :int { 222 } //Z#393
/* Chile/Continental */ :int { 201 } //Z#394
- /* Chile/EasterIsland */ :int { 557 } //Z#395
+ /* Chile/EasterIsland */ :int { 558 } //Z#395
/* Cuba */ :int { 129 } //Z#396
/* EAT */ :int { 48 } //Z#397
- /* ECT */ :int { 476 } //Z#398
+ /* ECT */ :int { 477 } //Z#398
/* EET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 7200, 0, 7200, 3600 }
@@ -1927,7 +1862,7 @@ zoneinfo64:table(nofallback) {
/* Eire */ :int { 454 } //Z#403
/* Etc/GMT */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 404, 405, 418, 433, 434, 506, 507, 508, 509, 510 }
+ links:intvector { 404, 405, 418, 433, 434, 507, 508, 509, 510, 511 }
} //Z#404
/* Etc/GMT+0 */ :int { 404 } //Z#405
/* Etc/GMT+1 */ :table {
@@ -2014,21 +1949,14 @@ zoneinfo64:table(nofallback) {
/* Etc/UCT */ :int { 436 } //Z#435
/* Etc/UTC */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 435, 436, 437, 439, 616, 630, 631, 635 }
+ links:intvector { 435, 436, 437, 439, 617, 631, 632, 636 }
} //Z#436
/* Etc/Universal */ :int { 436 } //Z#437
/* Etc/Unknown */ :table {
typeOffsets:intvector { 0, 0 }
} //Z#438
/* Etc/Zulu */ :int { 436 } //Z#439
- /* Europe/Amsterdam */ :table {
- trans:intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 }
- typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001030203020302050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
- finalRule { "EU" }
- finalRaw:int { 3600 }
- finalYear:int { 1997 }
- } //Z#440
+ /* Europe/Amsterdam */ :int { 448 } //Z#440
/* Europe/Andorra */ :table {
transPre32:intvector { -1, 2117514132 }
trans:intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2051,7 +1979,7 @@ zoneinfo64:table(nofallback) {
finalRaw:int { 7200 }
finalYear:int { 1997 }
} //Z#443
- /* Europe/Belfast */ :int { 466 } //Z#444
+ /* Europe/Belfast */ :int { 467 } //Z#444
/* Europe/Belgrade */ :table {
transPre32:intvector { -1, 1581051976 }
trans:intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2060,7 +1988,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 445, 465, 477, 483, 486, 500 }
+ links:intvector { 445, 466, 478, 484, 487, 501 }
} //Z#445
/* Europe/Berlin */ :table {
transPre32:intvector { -1, 1872912888 }
@@ -2070,8 +1998,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
+ links:intvector { 238, 344, 446, 453, 476, 489 }
} //Z#446
- /* Europe/Bratislava */ :int { 478 } //Z#447
+ /* Europe/Bratislava */ :int { 479 } //Z#447
/* Europe/Brussels */ :table {
transPre32:intvector { -1, 1843972096 }
trans:intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2080,6 +2009,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
+ links:intvector { 440, 448, 468 }
} //Z#448
/* Europe/Bucharest */ :table {
trans:intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
@@ -2098,7 +2028,7 @@ zoneinfo64:table(nofallback) {
finalRaw:int { 3600 }
finalYear:int { 1997 }
} //Z#450
- /* Europe/Busingen */ :int { 502 } //Z#451
+ /* Europe/Busingen */ :int { 503 } //Z#451
/* Europe/Chisinau */ :table {
transPre32:intvector { -1, 1454819576 }
trans:intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 641944800, 654652800, 670377600, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859680000, 877824000 }
@@ -2107,22 +2037,13 @@ zoneinfo64:table(nofallback) {
finalRule { "Moldova" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- links:intvector { 452, 491 }
+ links:intvector { 452, 492 }
} //Z#452
- /* Europe/Copenhagen */ :table {
- transPre32:intvector { -1, 1896673076 }
- trans:intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 3020, 0, 3600, 0, 3600, 3600 }
- typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- finalRule { "EU" }
- finalRaw:int { 3600 }
- finalYear:int { 1997 }
- } //Z#453
+ /* Europe/Copenhagen */ :int { 446 } //Z#453
/* Europe/Dublin */ :table {
- transPre32:intvector { -1, 1473317596 }
trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733356000, -719445600, -699487200, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
- typeOffsets:intvector { -1500, 0, -1521, 0, -1521, 3600, 0, 0, 0, 3600, 3600, 0 }
- typeMap:bin { "0102030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030405030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
+ typeOffsets:intvector { -1521, 0, -1521, 3600, 0, 0, 0, 3600, 3600, 0 }
+ typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
@@ -2137,7 +2058,7 @@ zoneinfo64:table(nofallback) {
finalRaw:int { 3600 }
finalYear:int { 1997 }
} //Z#455
- /* Europe/Guernsey */ :int { 466 } //Z#456
+ /* Europe/Guernsey */ :int { 467 } //Z#456
/* Europe/Helsinki */ :table {
trans:intvector { -1535938789, -875671200, -859773600, 354672000, 370396800, 386121600, 401846400, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5989, 0, 7200, 0, 7200, 3600 }
@@ -2145,36 +2066,38 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- links:intvector { 457, 470 }
+ links:intvector { 457, 471 }
} //Z#457
- /* Europe/Isle_of_Man */ :int { 466 } //Z#458
+ /* Europe/Isle_of_Man */ :int { 467 } //Z#458
/* Europe/Istanbul */ :table {
transPre32:intvector { -1, 1454819544 }
trans:intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931053600, -922676400, -917834400, -892436400, -875844000, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -622087200, -606970800, -590032800, -575521200, -235620000, -194842800, -177732000, -165726000, 107910000, 121215600, 133920000, 152665200, 164678400, 184114800, 196214400, 215564400, 228873600, 245804400, 260323200, 267915600, 428454000, 433893600, 468111600, 482799600, 496710000, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764118000, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301274000, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396227600, 1414285200, 1427590800, 1446944400, 1459040400, 1473195600 }
typeOffsets:intvector { 6952, 0, 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030405040203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" }
- links:intvector { 276, 459, 615 }
+ links:intvector { 276, 459, 616 }
} //Z#459
- /* Europe/Jersey */ :int { 466 } //Z#460
+ /* Europe/Jersey */ :int { 467 } //Z#460
/* Europe/Kaliningrad */ :table {
transPre32:intvector { -1, 1872911176 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780372000, -778730400, -762663600, -749095200, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1414278000 }
typeOffsets:intvector { 4920, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "0102010201020102010201020102030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
} //Z#461
- /* Europe/Kiev */ :table {
- trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
- typeMap:bin { "0305020102010506050605060506050605060506050605060506040304030403040304030403" }
- finalRule { "EU" }
- finalRaw:int { 7200 }
- finalYear:int { 1997 }
- } //Z#462
+ /* Europe/Kiev */ :int { 464 } //Z#462
/* Europe/Kirov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" }
} //Z#463
+ /* Europe/Kyiv */ :table {
+ trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 }
+ typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
+ typeMap:bin { "03050201020105060506050605060506050605060506050605060403040304030403040304030403" }
+ finalRule { "EU" }
+ finalRaw:int { 7200 }
+ finalYear:int { 1998 }
+ links:intvector { 462, 464 }
+ } //Z#464
/* Europe/Lisbon */ :table {
trans:intvector { -1830384000, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -623282400, -607557600, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -2205, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
@@ -2182,9 +2105,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 464, 597 }
- } //Z#464
- /* Europe/Ljubljana */ :int { 445 } //Z#465
+ links:intvector { 465, 598 }
+ } //Z#465
+ /* Europe/Ljubljana */ :int { 445 } //Z#466
/* Europe/London */ :table {
transPre32:intvector { -1, 442304971 }
trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
@@ -2193,16 +2116,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 444, 456, 458, 460, 466, 504, 505 }
- } //Z#466
- /* Europe/Luxembourg */ :table {
- trans:intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 1476, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 }
- typeMap:bin { "0304030403040301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
- finalRule { "EU" }
- finalRaw:int { 3600 }
- finalYear:int { 1997 }
+ links:intvector { 444, 456, 458, 460, 467, 505, 506 }
} //Z#467
+ /* Europe/Luxembourg */ :int { 448 } //Z#468
/* Europe/Madrid */ :table {
transPre32:intvector { -1, 2117514496 }
trans:intvector { -1631926800, -1616889600, -1601168400, -1585353600, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -1284339600, -1269820800, -1026954000, -1017619200, -1001898000, -999482400, -986090400, -954115200, -940208400, -873079200, -862621200, -842839200, -828320400, -811389600, -796870800, -779940000, -765421200, -748490400, -733971600, -652327200, -639018000, 135122400, 150246000, 166572000, 181695600, 196812000, 212540400, 228866400, 243990000, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2211,7 +2127,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#468
+ } //Z#469
/* Europe/Malta */ :table {
transPre32:intvector { -1, 1891488612 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812588400, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2220,40 +2136,23 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#469
- /* Europe/Mariehamn */ :int { 457 } //Z#470
+ } //Z#470
+ /* Europe/Mariehamn */ :int { 457 } //Z#471
/* Europe/Minsk */ :table {
transPre32:intvector { -1, 1454819880 }
trans:intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000 }
typeOffsets:intvector { 6616, 0, 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "0304060201020102060706070607060706070607060706070607060504050405040504050405040504050405040504050405040504050405040504050405040504050406" }
- } //Z#471
- /* Europe/Monaco */ :table {
- transPre32:intvector { -1, 1846648724 }
- trans:intvector { -1854403761, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 1772, 0, 0, 0, 0, 3600, 0, 7200, 561, 0, 3600, 0, 3600, 3600 }
- typeMap:bin { "04010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203020302030203020305060506050605060506050605060506050605060506050605060506050605060506050605060506050605" }
- finalRule { "EU" }
- finalRaw:int { 3600 }
- finalYear:int { 1997 }
} //Z#472
+ /* Europe/Monaco */ :int { 477 } //Z#473
/* Europe/Moscow */ :table {
trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593820800, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400, 0 }
typeMap:bin { "0304030504050706070807060106070607060706070607060706070607060706070602010607060706070607060706070607060706070607060706070607060706070607060706070607060906" }
- links:intvector { 473, 633 }
- } //Z#473
- /* Europe/Nicosia */ :int { 298 } //Z#474
- /* Europe/Oslo */ :table {
- transPre32:intvector { -1, 1928209516 }
- trans:intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 2580, 0, 3600, 0, 3600, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- finalRule { "EU" }
- finalRaw:int { 3600 }
- finalYear:int { 1997 }
- links:intvector { 238, 344, 475 }
- } //Z#475
+ links:intvector { 474, 634 }
+ } //Z#474
+ /* Europe/Nicosia */ :int { 298 } //Z#475
+ /* Europe/Oslo */ :int { 446 } //Z#476
/* Europe/Paris */ :table {
trans:intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 561, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
@@ -2261,9 +2160,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 398, 476 }
- } //Z#476
- /* Europe/Podgorica */ :int { 445 } //Z#477
+ links:intvector { 398, 473, 477 }
+ } //Z#477
+ /* Europe/Podgorica */ :int { 445 } //Z#478
/* Europe/Prague */ :table {
transPre32:intvector { -1, 1825565432 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -746578800, -733359600, -728517600, -721260000, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2272,8 +2171,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 447, 478 }
- } //Z#478
+ links:intvector { 447, 479 }
+ } //Z#479
/* Europe/Riga */ :table {
trans:intvector { -1632008194, -1618702594, -1601681794, -1597275394, -1377308194, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 843955200, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 985482000, 1004230800 }
typeOffsets:intvector { 5794, 0, 3600, 0, 3600, 3600, 5794, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2281,7 +2180,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2002 }
- } //Z#479
+ } //Z#480
/* Europe/Rome */ :table {
transPre32:intvector { -1, 1891402096 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 107910000, 118191600, 138754800, 149641200, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2290,27 +2189,27 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 480, 482, 495 }
- } //Z#480
+ links:intvector { 481, 483, 496 }
+ } //Z#481
/* Europe/Samara */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701820000, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288479600, 1301180400 }
typeOffsets:intvector { 12020, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "02040504050405040504050405040504050403020302010204050405040504050405040504050405040504050405040504050405040504050405040504030204" }
- } //Z#481
- /* Europe/San_Marino */ :int { 480 } //Z#482
- /* Europe/Sarajevo */ :int { 445 } //Z#483
+ } //Z#482
+ /* Europe/San_Marino */ :int { 481 } //Z#483
+ /* Europe/Sarajevo */ :int { 445 } //Z#484
/* Europe/Saratov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1480806000 }
typeOffsets:intvector { 11058, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#484
+ } //Z#485
/* Europe/Simferopol */ :table {
transPre32:intvector { -1, 1454818312 }
- trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 }
+ trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701827200, 717552000, 733276800, 749001600, 764726400, 767739600, 780447600, 796172400, 811897200, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 }
typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 }
typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" }
- } //Z#485
- /* Europe/Skopje */ :int { 445 } //Z#486
+ } //Z#486
+ /* Europe/Skopje */ :int { 445 } //Z#487
/* Europe/Sofia */ :table {
transPre32:intvector { -1, 1454820900, -1, 1925440280 }
trans:intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
@@ -2319,16 +2218,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- } //Z#487
- /* Europe/Stockholm */ :table {
- transPre32:intvector { -1, 1423286164, -1, 2085974882 }
- trans:intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 4332, 0, 3600, 0, 3600, 3600, 3614, 0 }
- typeMap:bin { "0301020102010201020102010201020102010201020102010201020102010201020102010201" }
- finalRule { "EU" }
- finalRaw:int { 3600 }
- finalYear:int { 1997 }
} //Z#488
+ /* Europe/Stockholm */ :int { 446 } //Z#489
/* Europe/Tallinn */ :table {
trans:intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909277200, 922582800, 941331600, 1017536400, 1035680400 }
typeOffsets:intvector { 5940, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2336,7 +2227,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2003 }
- } //Z#489
+ } //Z#490
/* Europe/Tirane */ :table {
trans:intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 4760, 0, 3600, 0, 3600, 3600 }
@@ -2344,24 +2235,24 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#490
- /* Europe/Tiraspol */ :int { 452 } //Z#491
+ } //Z#491
+ /* Europe/Tiraspol */ :int { 452 } //Z#492
/* Europe/Ulyanovsk */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 }
typeOffsets:intvector { 11616, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "030506050605060506050605060506050605040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050305" }
- } //Z#492
+ } //Z#493
/* Europe/Uzhgorod */ :table {
transPre32:intvector { -1, 1794027544 }
- trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
+ trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 }
typeOffsets:intvector { 5352, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
- typeMap:bin { "0102010201020105060506050605060506050605060506050605010304030403040304030403" }
+ typeMap:bin { "01020102010201050605060506050605060506050605060506050103040304030403040304030403" }
finalRule { "EU" }
finalRaw:int { 7200 }
- finalYear:int { 1997 }
- } //Z#493
- /* Europe/Vaduz */ :int { 502 } //Z#494
- /* Europe/Vatican */ :int { 480 } //Z#495
+ finalYear:int { 1998 }
+ } //Z#494
+ /* Europe/Vaduz */ :int { 503 } //Z#495
+ /* Europe/Vatican */ :int { 481 } //Z#496
/* Europe/Vienna */ :table {
transPre32:intvector { -1, 1872912175 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -748479600, -733273200, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2370,7 +2261,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#496
+ } //Z#497
/* Europe/Vilnius */ :table {
transPre32:intvector { -1, 1454820420 }
trans:intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891133200, 909277200, 922582800, 941331600, 1048986000, 1067130000 }
@@ -2379,12 +2270,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2004 }
- } //Z#497
+ } //Z#498
/* Europe/Volgograd */ :table {
trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1540681200, 1609020000 }
typeOffsets:intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040302010201020103020102010201020102010201020102010201020102010201020102010201020102010201020103010301" }
- } //Z#498
+ } //Z#499
/* Europe/Warsaw */ :table {
trans:intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5040, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
@@ -2392,18 +2283,18 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 499, 596 }
- } //Z#499
- /* Europe/Zagreb */ :int { 445 } //Z#500
+ links:intvector { 500, 597 }
+ } //Z#500
+ /* Europe/Zagreb */ :int { 445 } //Z#501
/* Europe/Zaporozhye */ :table {
transPre32:intvector { -1, 1454818056 }
- trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
+ trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 }
typeOffsets:intvector { 8440, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8400, 0, 10800, 0, 10800, 3600 }
- typeMap:bin { "05030602010201060706070607060706070607060706070607060706040304030403040304030403" }
+ typeMap:bin { "050306020102010607060706070607060706070607060706070607060403040304030403040304030403" }
finalRule { "EU" }
finalRaw:int { 7200 }
- finalYear:int { 1997 }
- } //Z#501
+ finalYear:int { 1998 }
+ } //Z#502
/* Europe/Zurich */ :table {
transPre32:intvector { -1, 619768448, -1, 1909720710 }
trans:intvector { -904435200, -891129600, -872985600, -859680000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2412,75 +2303,56 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 451, 494, 502 }
- } //Z#502
+ links:intvector { 451, 495, 503 }
+ } //Z#503
/* Factory */ :table {
typeOffsets:intvector { 0, 0 }
- } //Z#503
- /* GB */ :int { 466 } //Z#504
- /* GB-Eire */ :int { 466 } //Z#505
- /* GMT */ :int { 404 } //Z#506
- /* GMT+0 */ :int { 404 } //Z#507
- /* GMT-0 */ :int { 404 } //Z#508
- /* GMT0 */ :int { 404 } //Z#509
- /* Greenwich */ :int { 404 } //Z#510
+ } //Z#504
+ /* GB */ :int { 467 } //Z#505
+ /* GB-Eire */ :int { 467 } //Z#506
+ /* GMT */ :int { 404 } //Z#507
+ /* GMT+0 */ :int { 404 } //Z#508
+ /* GMT-0 */ :int { 404 } //Z#509
+ /* GMT0 */ :int { 404 } //Z#510
+ /* Greenwich */ :int { 404 } //Z#511
/* HST */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#511
- /* Hongkong */ :int { 273 } //Z#512
- /* IET */ :int { 131 } //Z#513
- /* IST */ :int { 287 } //Z#514
- /* Iceland */ :int { 346 } //Z#515
- /* Indian/Antananarivo */ :int { 48 } //Z#516
+ } //Z#512
+ /* Hongkong */ :int { 273 } //Z#513
+ /* IET */ :int { 131 } //Z#514
+ /* IST */ :int { 287 } //Z#515
+ /* Iceland */ :int { 5 } //Z#516
+ /* Indian/Antananarivo */ :int { 48 } //Z#517
/* Indian/Chagos */ :table {
trans:intvector { -1988167780, 820436400 }
typeOffsets:intvector { 17380, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0102" }
- } //Z#517
- /* Indian/Christmas */ :table {
- transPre32:intvector { -1, 1930865124 }
- typeOffsets:intvector { 25372, 0, 25200, 0 }
- typeMap:bin { "01" }
} //Z#518
- /* Indian/Cocos */ :table {
- transPre32:intvector { -1, 2085955236 }
- typeOffsets:intvector { 23260, 0, 23400, 0 }
- typeMap:bin { "01" }
- } //Z#519
- /* Indian/Comoro */ :int { 48 } //Z#520
- /* Indian/Kerguelen */ :table {
- trans:intvector { -631152000 }
- typeOffsets:intvector { 0, 0, 18000, 0 }
- typeMap:bin { "01" }
- } //Z#521
- /* Indian/Mahe */ :table {
- trans:intvector { -1988163708 }
- typeOffsets:intvector { 13308, 0, 14400, 0 }
- typeMap:bin { "01" }
- } //Z#522
+ /* Indian/Christmas */ :int { 251 } //Z#519
+ /* Indian/Cocos */ :int { 335 } //Z#520
+ /* Indian/Comoro */ :int { 48 } //Z#521
+ /* Indian/Kerguelen */ :int { 524 } //Z#522
+ /* Indian/Mahe */ :int { 266 } //Z#523
/* Indian/Maldives */ :table {
trans:intvector { -315636840 }
typeOffsets:intvector { 17640, 0, 18000, 0 }
typeMap:bin { "01" }
- } //Z#523
+ links:intvector { 522, 524 }
+ } //Z#524
/* Indian/Mauritius */ :table {
trans:intvector { -1988164200, 403041600, 417034800, 1224972000, 1238274000 }
typeOffsets:intvector { 13800, 0, 14400, 0, 14400, 3600 }
typeMap:bin { "0102010201" }
- } //Z#524
- /* Indian/Mayotte */ :int { 48 } //Z#525
- /* Indian/Reunion */ :table {
- trans:intvector { -1848886912 }
- typeOffsets:intvector { 13312, 0, 14400, 0 }
- typeMap:bin { "01" }
- } //Z#526
- /* Iran */ :int { 321 } //Z#527
- /* Israel */ :int { 279 } //Z#528
- /* JST */ :int { 325 } //Z#529
- /* Jamaica */ :int { 142 } //Z#530
- /* Japan */ :int { 325 } //Z#531
- /* Kwajalein */ :int { 572 } //Z#532
- /* Libya */ :int { 56 } //Z#533
+ } //Z#525
+ /* Indian/Mayotte */ :int { 48 } //Z#526
+ /* Indian/Reunion */ :int { 266 } //Z#527
+ /* Iran */ :int { 321 } //Z#528
+ /* Israel */ :int { 279 } //Z#529
+ /* JST */ :int { 325 } //Z#530
+ /* Jamaica */ :int { 142 } //Z#531
+ /* Japan */ :int { 325 } //Z#532
+ /* Kwajalein */ :int { 573 } //Z#533
+ /* Libya */ :int { 56 } //Z#534
/* MET */ :table {
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 3600, 0, 3600, 3600 }
@@ -2488,11 +2360,11 @@ zoneinfo64:table(nofallback) {
finalRule { "C-Eur" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#534
- /* MIT */ :int { 552 } //Z#535
+ } //Z#535
+ /* MIT */ :int { 553 } //Z#536
/* MST */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#536
+ } //Z#537
/* MST7MDT */ :table {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
typeOffsets:intvector { -25200, 0, -25200, 3600 }
@@ -2500,20 +2372,20 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- } //Z#537
- /* Mexico/BajaNorte */ :int { 217 } //Z#538
- /* Mexico/BajaSur */ :int { 160 } //Z#539
- /* Mexico/General */ :int { 165 } //Z#540
- /* NET */ :int { 337 } //Z#541
- /* NST */ :int { 553 } //Z#542
- /* NZ */ :int { 553 } //Z#543
- /* NZ-CHAT */ :int { 555 } //Z#544
- /* Navajo */ :int { 109 } //Z#545
- /* PLT */ :int { 282 } //Z#546
- /* PNT */ :int { 185 } //Z#547
- /* PRC */ :int { 315 } //Z#548
- /* PRT */ :int { 190 } //Z#549
- /* PST */ :int { 151 } //Z#550
+ } //Z#538
+ /* Mexico/BajaNorte */ :int { 217 } //Z#539
+ /* Mexico/BajaSur */ :int { 160 } //Z#540
+ /* Mexico/General */ :int { 165 } //Z#541
+ /* NET */ :int { 337 } //Z#542
+ /* NST */ :int { 554 } //Z#543
+ /* NZ */ :int { 554 } //Z#544
+ /* NZ-CHAT */ :int { 556 } //Z#545
+ /* Navajo */ :int { 109 } //Z#546
+ /* PLT */ :int { 282 } //Z#547
+ /* PNT */ :int { 185 } //Z#548
+ /* PRC */ :int { 315 } //Z#549
+ /* PRT */ :int { 190 } //Z#550
+ /* PST */ :int { 151 } //Z#551
/* PST8PDT */ :table {
trans:intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
typeOffsets:intvector { -28800, 0, -28800, 3600 }
@@ -2521,14 +2393,14 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- } //Z#551
+ } //Z#552
/* Pacific/Apia */ :table {
transPre32:intvector { -1, 1849542912 }
trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200, 1365256800, 1380376800, 1396706400, 1411826400, 1428156000, 1443276000, 1459605600, 1474725600, 1491055200, 1506175200, 1522504800, 1538229600, 1554559200, 1569679200, 1586008800, 1601128800, 1617458400 }
typeOffsets:intvector { 45184, 0, -41400, 0, -41216, 0, -39600, 0, -39600, 3600, 46800, 0, 46800, 3600 }
typeMap:bin { "0201030403040605060506050605060506050605060506050605" }
- links:intvector { 535, 552 }
- } //Z#552
+ links:intvector { 536, 553 }
+ } //Z#553
/* Pacific/Auckland */ :table {
transPre32:intvector { -1, 1102531752 }
trans:intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2537,14 +2409,14 @@ zoneinfo64:table(nofallback) {
finalRule { "NZ" }
finalRaw:int { 43200 }
finalYear:int { 2009 }
- links:intvector { 231, 234, 542, 543, 553 }
- } //Z#553
+ links:intvector { 231, 234, 543, 544, 554 }
+ } //Z#554
/* Pacific/Bougainville */ :table {
transPre32:intvector { -1, 1454789160, -1, 1928176784 }
trans:intvector { -868010400, -768906000, 1419696000 }
typeOffsets:intvector { 37336, 0, 32400, 0, 35312, 0, 36000, 0, 39600, 0 }
typeMap:bin { "0203010304" }
- } //Z#554
+ } //Z#555
/* Pacific/Chatham */ :table {
transPre32:intvector { -1, 1102529668 }
trans:intvector { -757426500, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2553,36 +2425,30 @@ zoneinfo64:table(nofallback) {
finalRule { "Chatham" }
finalRaw:int { 45900 }
finalYear:int { 2009 }
- links:intvector { 544, 555 }
- } //Z#555
- /* Pacific/Chuuk */ :table {
- transPre32:intvector { -1, 350338868, -1, 2117478068 }
- trans:intvector { -1743674400, -1606813200, -907408800, -770634000 }
- typeOffsets:intvector { -49972, 0, 32400, 0, 36000, 0, 36428, 0 }
- typeMap:bin { "030201020102" }
- links:intvector { 556, 592, 595 }
+ links:intvector { 545, 556 }
} //Z#556
+ /* Pacific/Chuuk */ :int { 586 } //Z#557
/* Pacific/Easter */ :table {
- trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
+ trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200, 1586055600, 1599364800, 1617505200, 1630814400, 1648954800, 1662868800, 1680404400, 1693713600 }
typeOffsets:intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
- typeMap:bin { "010201020102010201020102010201020102010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
+ typeMap:bin { "0102010201020102010201020102010201020102010201020102010203040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
finalRule { "Chile" }
finalRaw:int { -21600 }
- finalYear:int { 2020 }
- links:intvector { 395, 557 }
- } //Z#557
+ finalYear:int { 2024 }
+ links:intvector { 395, 558 }
+ } //Z#558
/* Pacific/Efate */ :table {
trans:intvector { -1829387596, 125409600, 133876800, 433256400, 448977600, 464706000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 }
typeOffsets:intvector { 40396, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010201" }
- } //Z#558
- /* Pacific/Enderbury */ :int { 569 } //Z#559
+ } //Z#559
+ /* Pacific/Enderbury */ :int { 570 } //Z#560
/* Pacific/Fakaofo */ :table {
transPre32:intvector { -1, 2117555592 }
trans:intvector { 1325242800 }
typeOffsets:intvector { -41096, 0, -39600, 0, 46800, 0 }
typeMap:bin { "0102" }
- } //Z#560
+ } //Z#561
/* Pacific/Fiji */ :table {
trans:intvector { -1709985344, 909842400, 920124000, 941896800, 951573600, 1259416800, 1269698400, 1287842400, 1299333600, 1319292000, 1327154400, 1350741600, 1358604000, 1382796000, 1390050000, 1414850400, 1421503200, 1446300000, 1452952800, 1478354400, 1484402400, 1509804000, 1515852000, 1541253600, 1547301600, 1573308000, 1578751200, 1608386400, 1610805600, 1668261600, 1673704800, 1699711200 }
typeOffsets:intvector { 42944, 0, 43200, 0, 43200, 3600 }
@@ -2590,90 +2456,81 @@ zoneinfo64:table(nofallback) {
finalRule { "Fiji" }
finalRaw:int { 43200 }
finalYear:int { 2024 }
- } //Z#561
- /* Pacific/Funafuti */ :table {
- transPre32:intvector { -1, 2117471484 }
- typeOffsets:intvector { 43012, 0, 43200, 0 }
- typeMap:bin { "01" }
} //Z#562
+ /* Pacific/Funafuti */ :int { 591 } //Z#563
/* Pacific/Galapagos */ :table {
trans:intvector { -1230746496, 504939600, 722930400, 728888400 }
typeOffsets:intvector { -21504, 0, -21600, 0, -21600, 3600, -18000, 0 }
typeMap:bin { "03010201" }
- } //Z#563
+ } //Z#564
/* Pacific/Gambier */ :table {
trans:intvector { -1806678012 }
typeOffsets:intvector { -32388, 0, -32400, 0 }
typeMap:bin { "01" }
- } //Z#564
+ } //Z#565
/* Pacific/Guadalcanal */ :table {
trans:intvector { -1806748788 }
typeOffsets:intvector { 38388, 0, 39600, 0 }
typeMap:bin { "01" }
- links:intvector { 565, 600 }
- } //Z#565
+ links:intvector { 566, 584, 585, 601 }
+ } //Z#566
/* Pacific/Guam */ :table {
transPre32:intvector { -1, 350340556, -1, 2117479756 }
trans:intvector { -885549600, -802256400, -331891200, -281610000, -73728000, -29415540, -16704000, -10659600, 9907200, 21394800, 41356800, 52844400, 124819200, 130863600, 201888000, 209487660, 230659200, 241542000 }
typeOffsets:intvector { -51660, 0, 32400, 0, 34740, 0, 36000, 0, 36000, 3600 }
typeMap:bin { "0203010304030403040304030403040304030403" }
- links:intvector { 566, 587 }
- } //Z#566
+ links:intvector { 567, 588 }
+ } //Z#567
/* Pacific/Honolulu */ :table {
transPre32:intvector { -1, 1960865982 }
trans:intvector { -1157283000, -1155436200, -880198200, -765376200, -712150200 }
typeOffsets:intvector { -37886, 0, -37800, 0, -37800, 3600, -36000, 0 }
typeMap:bin { "010201020103" }
- links:intvector { 567, 568, 623 }
- } //Z#567
- /* Pacific/Johnston */ :int { 567 } //Z#568
+ links:intvector { 568, 569, 624 }
+ } //Z#568
+ /* Pacific/Johnston */ :int { 568 } //Z#569
/* Pacific/Kanton */ :table {
trans:intvector { -1020470400, 307627200, 788871600 }
typeOffsets:intvector { 0, 0, -43200, 0, -39600, 0, 46800, 0 }
typeMap:bin { "010203" }
- links:intvector { 559, 569 }
- } //Z#569
+ links:intvector { 560, 570 }
+ } //Z#570
/* Pacific/Kiritimati */ :table {
transPre32:intvector { -1, 2117552256 }
trans:intvector { 307622400, 788868000 }
typeOffsets:intvector { -37760, 0, -38400, 0, -36000, 0, 50400, 0 }
typeMap:bin { "010203" }
- } //Z#570
+ } //Z#571
/* Pacific/Kosrae */ :table {
transPre32:intvector { -1, 350336180, -1, 2117475380 }
trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000, -7988400, 915105600 }
typeOffsets:intvector { -47284, 0, 32400, 0, 36000, 0, 39116, 0, 39600, 0, 43200, 0 }
typeMap:bin { "030401040201040504" }
- } //Z#571
+ } //Z#572
/* Pacific/Kwajalein */ :table {
transPre32:intvector { -1, 2117474336 }
trans:intvector { -1041418800, -907408800, -817462800, -7988400, 745934400 }
typeOffsets:intvector { 40160, 0, -43200, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 }
typeMap:bin { "040302040105" }
- links:intvector { 532, 572 }
- } //Z#572
- /* Pacific/Majuro */ :table {
- transPre32:intvector { -1, 2117473408 }
- trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -818067600, -7988400 }
- typeOffsets:intvector { 41088, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 }
- typeMap:bin { "03010302010304" }
+ links:intvector { 533, 573 }
} //Z#573
+ /* Pacific/Majuro */ :int { 591 } //Z#574
/* Pacific/Marquesas */ :table {
trans:intvector { -1806676920 }
typeOffsets:intvector { -33480, 0, -34200, 0 }
typeMap:bin { "01" }
- } //Z#574
- /* Pacific/Midway */ :int { 580 } //Z#575
+ } //Z#575
+ /* Pacific/Midway */ :int { 581 } //Z#576
/* Pacific/Nauru */ :table {
trans:intvector { -1545131260, -862918200, -767350800, 287418600 }
typeOffsets:intvector { 40060, 0, 32400, 0, 41400, 0, 43200, 0 }
typeMap:bin { "02010203" }
- } //Z#576
+ } //Z#577
/* Pacific/Niue */ :table {
trans:intvector { -543069620, -173623200 }
typeOffsets:intvector { -40780, 0, -40800, 0, -39600, 0 }
typeMap:bin { "0102" }
- } //Z#577
+ } //Z#578
/* Pacific/Norfolk */ :table {
transPre32:intvector { -1, 2117474184 }
trans:intvector { -599656320, 152029800, 162916200, 1443882600, 1570287600, 1586012400, 1601737200 }
@@ -2682,87 +2539,75 @@ zoneinfo64:table(nofallback) {
finalRule { "AN" }
finalRaw:int { 39600 }
finalYear:int { 2021 }
- } //Z#578
+ } //Z#579
/* Pacific/Noumea */ :table {
trans:intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 }
typeOffsets:intvector { 39948, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "01020102010201" }
- } //Z#579
+ } //Z#580
/* Pacific/Pago_Pago */ :table {
transPre32:intvector { -1, 1849542664 }
trans:intvector { -1861879032 }
typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 }
typeMap:bin { "0102" }
- links:intvector { 575, 580, 588, 629 }
- } //Z#580
+ links:intvector { 576, 581, 589, 630 }
+ } //Z#581
/* Pacific/Palau */ :table {
transPre32:intvector { -1, 350343020, -1, 2117482220 }
typeOffsets:intvector { -54124, 0, 32276, 0, 32400, 0 }
typeMap:bin { "0102" }
- } //Z#581
+ } //Z#582
/* Pacific/Pitcairn */ :table {
transPre32:intvector { -1, 2117545716 }
trans:intvector { 893665800 }
typeOffsets:intvector { -31220, 0, -30600, 0, -28800, 0 }
typeMap:bin { "0102" }
- } //Z#582
- /* Pacific/Pohnpei */ :table {
- transPre32:intvector { -1, 350337324, -1, 2117476524 }
- trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000 }
- typeOffsets:intvector { -48428, 0, 32400, 0, 36000, 0, 37972, 0, 39600, 0 }
- typeMap:bin { "03040104020104" }
- links:intvector { 583, 584 }
} //Z#583
- /* Pacific/Ponape */ :int { 583 } //Z#584
+ /* Pacific/Pohnpei */ :int { 566 } //Z#584
+ /* Pacific/Ponape */ :int { 566 } //Z#585
/* Pacific/Port_Moresby */ :table {
transPre32:intvector { -1, 1454791176, -1, 1928176784 }
typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 }
typeMap:bin { "0102" }
- } //Z#585
+ links:intvector { 228, 557, 586, 593, 596 }
+ } //Z#586
/* Pacific/Rarotonga */ :table {
transPre32:intvector { -1, 2085412040 }
trans:intvector { -543072056, 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 }
typeOffsets:intvector { 48056, 0, -38344, 0, -37800, 0, -36000, 0, -36000, 1800 }
typeMap:bin { "01020403040304030403040304030403040304030403040304030403" }
- } //Z#586
- /* Pacific/Saipan */ :int { 566 } //Z#587
- /* Pacific/Samoa */ :int { 580 } //Z#588
+ } //Z#587
+ /* Pacific/Saipan */ :int { 567 } //Z#588
+ /* Pacific/Samoa */ :int { 581 } //Z#589
/* Pacific/Tahiti */ :table {
trans:intvector { -1806674504 }
typeOffsets:intvector { -35896, 0, -36000, 0 }
typeMap:bin { "01" }
- } //Z#589
+ } //Z#590
/* Pacific/Tarawa */ :table {
transPre32:intvector { -1, 2117472972 }
typeOffsets:intvector { 41524, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#590
+ links:intvector { 563, 574, 591, 594, 595 }
+ } //Z#591
/* Pacific/Tongatapu */ :table {
trans:intvector { -767189952, -284041200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800 }
typeOffsets:intvector { 44352, 0, 44400, 0, 46800, 0, 46800, 3600 }
typeMap:bin { "01020302030203020302" }
- } //Z#591
- /* Pacific/Truk */ :int { 556 } //Z#592
- /* Pacific/Wake */ :table {
- transPre32:intvector { -1, 2117474508 }
- typeOffsets:intvector { 39988, 0, 43200, 0 }
- typeMap:bin { "01" }
- } //Z#593
- /* Pacific/Wallis */ :table {
- transPre32:intvector { -1, 2117470376 }
- typeOffsets:intvector { 44120, 0, 43200, 0 }
- typeMap:bin { "01" }
- } //Z#594
- /* Pacific/Yap */ :int { 556 } //Z#595
- /* Poland */ :int { 499 } //Z#596
- /* Portugal */ :int { 464 } //Z#597
- /* ROC */ :int { 318 } //Z#598
- /* ROK */ :int { 314 } //Z#599
- /* SST */ :int { 565 } //Z#600
- /* Singapore */ :int { 316 } //Z#601
+ } //Z#592
+ /* Pacific/Truk */ :int { 586 } //Z#593
+ /* Pacific/Wake */ :int { 591 } //Z#594
+ /* Pacific/Wallis */ :int { 591 } //Z#595
+ /* Pacific/Yap */ :int { 586 } //Z#596
+ /* Poland */ :int { 500 } //Z#597
+ /* Portugal */ :int { 465 } //Z#598
+ /* ROC */ :int { 318 } //Z#599
+ /* ROK */ :int { 314 } //Z#600
+ /* SST */ :int { 566 } //Z#601
+ /* Singapore */ :int { 316 } //Z#602
/* SystemV/AST4 */ :table {
typeOffsets:intvector { -14400, 0 }
- } //Z#602
+ } //Z#603
/* SystemV/AST4ADT */ :table {
transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 }
trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1567965600, -1551639600, -1536516000, -1520190000, -1504461600, -1488740400, -1473012000, -1457290800, -1441562400, -1425841200, -1410112800, -1394391600, -1378663200, -1362337200, -1347213600, -1330887600, -1315159200, -1299438000, -1283709600, -1267988400, -1252260000, -1236538800, -1220810400, -1205089200, -1189360800, -1173034800, -1157306400, -1141585200, -1125856800, -1110135600, -1094407200, -1078686000, -1062957600, -1047236400, -1031508000, -1015182000, -1000058400, -983732400, -968004000, -952282800, -936554400, -920833200, -905104800, -889383600, -873655200, -857934000, -842205600, -825879600, -810151200, -794430000, -778701600, -762980400, -747252000, -731530800, -715802400, -700081200, -684352800, -668026800, -652903200, -636577200, -620848800, -605127600, -589399200, -573678000, -557949600, -542228400, -526500000, -510778800, -495050400, -478724400, -463600800, -447274800, -431546400, -415825200, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 126684000, 154501200, 162367200, 183531600, 199260000, 215586000 }
@@ -2771,10 +2616,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -14400 }
finalYear:int { 1977 }
- } //Z#603
+ } //Z#604
/* SystemV/CST6 */ :table {
typeOffsets:intvector { -21600, 0 }
- } //Z#604
+ } //Z#605
/* SystemV/CST6CDT */ :table {
transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 }
trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1567958400, -1551632400, -1536508800, -1520182800, -1504454400, -1488733200, -1473004800, -1457283600, -1441555200, -1425834000, -1410105600, -1394384400, -1378656000, -1362330000, -1347206400, -1330880400, -1315152000, -1299430800, -1283702400, -1267981200, -1252252800, -1236531600, -1220803200, -1205082000, -1189353600, -1173027600, -1157299200, -1141578000, -1125849600, -1110128400, -1094400000, -1078678800, -1062950400, -1047229200, -1031500800, -1015174800, -1000051200, -983725200, -967996800, -952275600, -936547200, -920826000, -905097600, -889376400, -873648000, -857926800, -842198400, -825872400, -810144000, -794422800, -778694400, -762973200, -747244800, -731523600, -715795200, -700074000, -684345600, -668019600, -652896000, -636570000, -620841600, -605120400, -589392000, -573670800, -557942400, -542221200, -526492800, -510771600, -495043200, -478717200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 154508400, 162374400, 183538800, 199267200, 215593200 }
@@ -2783,10 +2628,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -21600 }
finalYear:int { 1977 }
- } //Z#605
+ } //Z#606
/* SystemV/EST5 */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#606
+ } //Z#607
/* SystemV/EST5EDT */ :table {
transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 }
trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1567962000, -1551636000, -1536512400, -1520186400, -1504458000, -1488736800, -1473008400, -1457287200, -1441558800, -1425837600, -1410109200, -1394388000, -1378659600, -1362333600, -1347210000, -1330884000, -1315155600, -1299434400, -1283706000, -1267984800, -1252256400, -1236535200, -1220806800, -1205085600, -1189357200, -1173031200, -1157302800, -1141581600, -1125853200, -1110132000, -1094403600, -1078682400, -1062954000, -1047232800, -1031504400, -1015178400, -1000054800, -983728800, -968000400, -952279200, -936550800, -920829600, -905101200, -889380000, -873651600, -857930400, -842202000, -825876000, -810147600, -794426400, -778698000, -762976800, -747248400, -731527200, -715798800, -700077600, -684349200, -668023200, -652899600, -636573600, -620845200, -605124000, -589395600, -573674400, -557946000, -542224800, -526496400, -510775200, -495046800, -478720800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 154504800, 162370800, 183535200, 199263600, 215589600 }
@@ -2795,13 +2640,13 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -18000 }
finalYear:int { 1977 }
- } //Z#607
+ } //Z#608
/* SystemV/HST10 */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#608
+ } //Z#609
/* SystemV/MST7 */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#609
+ } //Z#610
/* SystemV/MST7MDT */ :table {
transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 }
trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1567954800, -1551628800, -1536505200, -1520179200, -1504450800, -1488729600, -1473001200, -1457280000, -1441551600, -1425830400, -1410102000, -1394380800, -1378652400, -1362326400, -1347202800, -1330876800, -1315148400, -1299427200, -1283698800, -1267977600, -1252249200, -1236528000, -1220799600, -1205078400, -1189350000, -1173024000, -1157295600, -1141574400, -1125846000, -1110124800, -1094396400, -1078675200, -1062946800, -1047225600, -1031497200, -1015171200, -1000047600, -983721600, -967993200, -952272000, -936543600, -920822400, -905094000, -889372800, -873644400, -857923200, -842194800, -825868800, -810140400, -794419200, -778690800, -762969600, -747241200, -731520000, -715791600, -700070400, -684342000, -668016000, -652892400, -636566400, -620838000, -605116800, -589388400, -573667200, -557938800, -542217600, -526489200, -510768000, -495039600, -478713600, -463590000, -447264000, -431535600, -415814400, -400086000, -384364800, -368636400, -352915200, -337186800, -321465600, -305737200, -289411200, -273682800, -257961600, -242233200, -226512000, -210783600, -195062400, -179334000, -163612800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 154512000, 162378000, 183542400, 199270800, 215596800 }
@@ -2810,10 +2655,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -25200 }
finalYear:int { 1977 }
- } //Z#610
+ } //Z#611
/* SystemV/PST8 */ :table {
typeOffsets:intvector { -28800, 0 }
- } //Z#611
+ } //Z#612
/* SystemV/PST8PDT */ :table {
transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 }
trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1567951200, -1551625200, -1536501600, -1520175600, -1504447200, -1488726000, -1472997600, -1457276400, -1441548000, -1425826800, -1410098400, -1394377200, -1378648800, -1362322800, -1347199200, -1330873200, -1315144800, -1299423600, -1283695200, -1267974000, -1252245600, -1236524400, -1220796000, -1205074800, -1189346400, -1173020400, -1157292000, -1141570800, -1125842400, -1110121200, -1094392800, -1078671600, -1062943200, -1047222000, -1031493600, -1015167600, -1000044000, -983718000, -967989600, -952268400, -936540000, -920818800, -905090400, -889369200, -873640800, -857919600, -842191200, -825865200, -810136800, -794415600, -778687200, -762966000, -747237600, -731516400, -715788000, -700066800, -684338400, -668012400, -652888800, -636562800, -620834400, -605113200, -589384800, -573663600, -557935200, -542214000, -526485600, -510764400, -495036000, -478710000, -463586400, -447260400, -431532000, -415810800, -400082400, -384361200, -368632800, -352911600, -337183200, -321462000, -305733600, -289407600, -273679200, -257958000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 154515600, 162381600, 183546000, 199274400, 215600400 }
@@ -2822,10 +2667,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -28800 }
finalYear:int { 1977 }
- } //Z#612
+ } //Z#613
/* SystemV/YST9 */ :table {
typeOffsets:intvector { -32400, 0 }
- } //Z#613
+ } //Z#614
/* SystemV/YST9YDT */ :table {
transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 }
trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1567947600, -1551621600, -1536498000, -1520172000, -1504443600, -1488722400, -1472994000, -1457272800, -1441544400, -1425823200, -1410094800, -1394373600, -1378645200, -1362319200, -1347195600, -1330869600, -1315141200, -1299420000, -1283691600, -1267970400, -1252242000, -1236520800, -1220792400, -1205071200, -1189342800, -1173016800, -1157288400, -1141567200, -1125838800, -1110117600, -1094389200, -1078668000, -1062939600, -1047218400, -1031490000, -1015164000, -1000040400, -983714400, -967986000, -952264800, -936536400, -920815200, -905086800, -889365600, -873637200, -857916000, -842187600, -825861600, -810133200, -794412000, -778683600, -762962400, -747234000, -731512800, -715784400, -700063200, -684334800, -668008800, -652885200, -636559200, -620830800, -605109600, -589381200, -573660000, -557931600, -542210400, -526482000, -510760800, -495032400, -478706400, -463582800, -447256800, -431528400, -415807200, -400078800, -384357600, -368629200, -352908000, -337179600, -321458400, -305730000, -289404000, -273675600, -257954400, -242226000, -226504800, -210776400, -195055200, -179326800, -163605600, -147877200, -131551200, -116427600, -100101600, -84373200, -68652000, -52923600, -37202400, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 154519200, 162385200, 183549600, 199278000, 215604000 }
@@ -2834,26 +2679,26 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -32400 }
finalYear:int { 1977 }
- } //Z#614
- /* Turkey */ :int { 459 } //Z#615
- /* UCT */ :int { 436 } //Z#616
- /* US/Alaska */ :int { 60 } //Z#617
- /* US/Aleutian */ :int { 59 } //Z#618
- /* US/Arizona */ :int { 185 } //Z#619
- /* US/Central */ :int { 98 } //Z#620
- /* US/East-Indiana */ :int { 131 } //Z#621
- /* US/Eastern */ :int { 173 } //Z#622
- /* US/Hawaii */ :int { 567 } //Z#623
- /* US/Indiana-Starke */ :int { 132 } //Z#624
- /* US/Michigan */ :int { 110 } //Z#625
- /* US/Mountain */ :int { 109 } //Z#626
- /* US/Pacific */ :int { 151 } //Z#627
- /* US/Pacific-New */ :int { 151 } //Z#628
- /* US/Samoa */ :int { 580 } //Z#629
- /* UTC */ :int { 436 } //Z#630
- /* Universal */ :int { 436 } //Z#631
- /* VST */ :int { 272 } //Z#632
- /* W-SU */ :int { 473 } //Z#633
+ } //Z#615
+ /* Turkey */ :int { 459 } //Z#616
+ /* UCT */ :int { 436 } //Z#617
+ /* US/Alaska */ :int { 60 } //Z#618
+ /* US/Aleutian */ :int { 59 } //Z#619
+ /* US/Arizona */ :int { 185 } //Z#620
+ /* US/Central */ :int { 98 } //Z#621
+ /* US/East-Indiana */ :int { 131 } //Z#622
+ /* US/Eastern */ :int { 173 } //Z#623
+ /* US/Hawaii */ :int { 568 } //Z#624
+ /* US/Indiana-Starke */ :int { 132 } //Z#625
+ /* US/Michigan */ :int { 110 } //Z#626
+ /* US/Mountain */ :int { 109 } //Z#627
+ /* US/Pacific */ :int { 151 } //Z#628
+ /* US/Pacific-New */ :int { 151 } //Z#629
+ /* US/Samoa */ :int { 581 } //Z#630
+ /* UTC */ :int { 436 } //Z#631
+ /* Universal */ :int { 436 } //Z#632
+ /* VST */ :int { 272 } //Z#633
+ /* W-SU */ :int { 474 } //Z#634
/* WET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 0, 0, 0, 3600 }
@@ -2861,8 +2706,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#634
- /* Zulu */ :int { 436 } //Z#635
+ } //Z#635
+ /* Zulu */ :int { 436 } //Z#636
}
Names {
"ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6
@@ -3006,51 +2851,51 @@ zoneinfo64:table(nofallback) {
,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 455
,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 458
,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 461
- ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 465
- ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 468
- ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 472
- ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 476
- ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 480
- ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 483
- ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 486
- ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 489
- ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 492
- ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 495
- ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 498
- ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 501
- ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 507
- ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 513
- ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 517
- ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 520
- ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 523
- ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 526
- ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 532
- ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 538
- ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 543
- ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 551
- ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 554
- ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 557
- ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 560
- ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 563
- ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 566
- ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton" // 569
- ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 572
- ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 575
- ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 579
- ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 582
- ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 585
- ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 588
- ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 591
- ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 595
- ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 601
- ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 605
- ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 609
- ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 612
- ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 617
- ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 621
- ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 625
- ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 629
- ,"UTC","Universal","VST","W-SU","WET","Zulu" // 635
+ ,"Europe/Kiev","Europe/Kirov","Europe/Kyiv","Europe/Lisbon" // 465
+ ,"Europe/Ljubljana","Europe/London","Europe/Luxembourg" // 468
+ ,"Europe/Madrid","Europe/Malta","Europe/Mariehamn" // 471
+ ,"Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia" // 475
+ ,"Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague" // 479
+ ,"Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino" // 483
+ ,"Europe/Sarajevo","Europe/Saratov","Europe/Simferopol" // 486
+ ,"Europe/Skopje","Europe/Sofia","Europe/Stockholm" // 489
+ ,"Europe/Tallinn","Europe/Tirane","Europe/Tiraspol" // 492
+ ,"Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz" // 495
+ ,"Europe/Vatican","Europe/Vienna","Europe/Vilnius" // 498
+ ,"Europe/Volgograd","Europe/Warsaw","Europe/Zagreb" // 501
+ ,"Europe/Zaporozhye","Europe/Zurich","Factory","GB" // 505
+ ,"GB-Eire","GMT","GMT+0","GMT-0","GMT0","Greenwich" // 511
+ ,"HST","Hongkong","IET","IST","Iceland","Indian/Antananarivo" // 517
+ ,"Indian/Chagos","Indian/Christmas","Indian/Cocos" // 520
+ ,"Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 524
+ ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 527
+ ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 533
+ ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 539
+ ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 544
+ ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 552
+ ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 555
+ ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 558
+ ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 561
+ ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 564
+ ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 567
+ ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton" // 570
+ ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 573
+ ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 576
+ ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 580
+ ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 583
+ ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 586
+ ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 589
+ ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 592
+ ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 596
+ ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 602
+ ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 606
+ ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 610
+ ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 613
+ ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 618
+ ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 622
+ ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 626
+ ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 630
+ ,"UTC","Universal","VST","W-SU","WET","Zulu" // 636
}
Rules {
AN:intvector {
@@ -3092,51 +2937,48 @@ zoneinfo64:table(nofallback) {
Haiti:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
} //_#12
- Iran:intvector {
- 2, 20, 0, 86400, 0, 8, 20, 0, 86400, 0, 3600
- } //_#13
Jordan:intvector {
1, -29, -5, 86400, 0, 9, -31, -6, 0, 1, 3600
- } //_#14
+ } //_#13
LH:intvector {
9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800
- } //_#15
+ } //_#14
Lebanon:intvector {
2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600
- } //_#16
+ } //_#15
Mexico:intvector {
3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#17
+ } //_#16
Moldova:intvector {
2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600
- } //_#18
+ } //_#17
NZ:intvector {
8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
- } //_#19
+ } //_#18
Palestine:intvector {
- 2, 24, -7, 0, 0, 9, -31, -6, 3600, 0, 3600
- } //_#20
+ 2, 25, -1, 0, 0, 9, 23, -6, 3600, 0, 3600
+ } //_#19
Para:intvector {
9, 1, -1, 0, 0, 2, 22, -1, 0, 0, 3600
- } //_#21
+ } //_#20
Syria:intvector {
2, -31, -6, 0, 0, 9, -31, -6, 0, 0, 3600
- } //_#22
+ } //_#21
SystemV:intvector {
3, -30, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#23
+ } //_#22
Thule:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
- } //_#24
+ } //_#23
Troll:intvector {
2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 7200
- } //_#25
+ } //_#24
US:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
- } //_#26
+ } //_#25
Zion:intvector {
2, 23, -6, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#27
+ } //_#26
}
Regions:array {
"AU", //Z#0 ACT
@@ -3360,7 +3202,7 @@ zoneinfo64:table(nofallback) {
"CA", //Z#218 America/Toronto
"VG", //Z#219 America/Tortola
"CA", //Z#220 America/Vancouver
- "TT", //Z#221 America/Virgin
+ "VI", //Z#221 America/Virgin
"CA", //Z#222 America/Whitehorse
"CA", //Z#223 America/Winnipeg
"US", //Z#224 America/Yakutat
@@ -3483,7 +3325,7 @@ zoneinfo64:table(nofallback) {
"CV", //Z#341 Atlantic/Cape_Verde
"FO", //Z#342 Atlantic/Faeroe
"FO", //Z#343 Atlantic/Faroe
- "NO", //Z#344 Atlantic/Jan_Mayen
+ "DE", //Z#344 Atlantic/Jan_Mayen
"PT", //Z#345 Atlantic/Madeira
"IS", //Z#346 Atlantic/Reykjavik
"GS", //Z#347 Atlantic/South_Georgia
@@ -3603,177 +3445,178 @@ zoneinfo64:table(nofallback) {
"RU", //Z#461 Europe/Kaliningrad
"UA", //Z#462 Europe/Kiev
"RU", //Z#463 Europe/Kirov
- "PT", //Z#464 Europe/Lisbon
- "SI", //Z#465 Europe/Ljubljana
- "GB", //Z#466 Europe/London
- "LU", //Z#467 Europe/Luxembourg
- "ES", //Z#468 Europe/Madrid
- "MT", //Z#469 Europe/Malta
- "AX", //Z#470 Europe/Mariehamn
- "BY", //Z#471 Europe/Minsk
- "MC", //Z#472 Europe/Monaco
- "RU", //Z#473 Europe/Moscow
- "CY", //Z#474 Europe/Nicosia
- "NO", //Z#475 Europe/Oslo
- "FR", //Z#476 Europe/Paris
- "ME", //Z#477 Europe/Podgorica
- "CZ", //Z#478 Europe/Prague
- "LV", //Z#479 Europe/Riga
- "IT", //Z#480 Europe/Rome
- "RU", //Z#481 Europe/Samara
- "SM", //Z#482 Europe/San_Marino
- "BA", //Z#483 Europe/Sarajevo
- "RU", //Z#484 Europe/Saratov
- "UA", //Z#485 Europe/Simferopol
- "MK", //Z#486 Europe/Skopje
- "BG", //Z#487 Europe/Sofia
- "SE", //Z#488 Europe/Stockholm
- "EE", //Z#489 Europe/Tallinn
- "AL", //Z#490 Europe/Tirane
- "MD", //Z#491 Europe/Tiraspol
- "RU", //Z#492 Europe/Ulyanovsk
- "UA", //Z#493 Europe/Uzhgorod
- "LI", //Z#494 Europe/Vaduz
- "VA", //Z#495 Europe/Vatican
- "AT", //Z#496 Europe/Vienna
- "LT", //Z#497 Europe/Vilnius
- "RU", //Z#498 Europe/Volgograd
- "PL", //Z#499 Europe/Warsaw
- "HR", //Z#500 Europe/Zagreb
- "UA", //Z#501 Europe/Zaporozhye
- "CH", //Z#502 Europe/Zurich
- "001",//Z#503 Factory
- "GB", //Z#504 GB
- "GB", //Z#505 GB-Eire
- "001",//Z#506 GMT
- "001",//Z#507 GMT+0
- "001",//Z#508 GMT-0
- "001",//Z#509 GMT0
- "001",//Z#510 Greenwich
- "001",//Z#511 HST
- "HK", //Z#512 Hongkong
- "US", //Z#513 IET
- "IN", //Z#514 IST
- "IS", //Z#515 Iceland
- "MG", //Z#516 Indian/Antananarivo
- "IO", //Z#517 Indian/Chagos
- "CX", //Z#518 Indian/Christmas
- "CC", //Z#519 Indian/Cocos
- "KM", //Z#520 Indian/Comoro
- "TF", //Z#521 Indian/Kerguelen
- "SC", //Z#522 Indian/Mahe
- "MV", //Z#523 Indian/Maldives
- "MU", //Z#524 Indian/Mauritius
- "YT", //Z#525 Indian/Mayotte
- "RE", //Z#526 Indian/Reunion
- "IR", //Z#527 Iran
- "IL", //Z#528 Israel
- "JP", //Z#529 JST
- "JM", //Z#530 Jamaica
- "JP", //Z#531 Japan
- "MH", //Z#532 Kwajalein
- "LY", //Z#533 Libya
- "001",//Z#534 MET
- "WS", //Z#535 MIT
- "001",//Z#536 MST
- "001",//Z#537 MST7MDT
- "MX", //Z#538 Mexico/BajaNorte
- "MX", //Z#539 Mexico/BajaSur
- "MX", //Z#540 Mexico/General
- "AM", //Z#541 NET
- "NZ", //Z#542 NST
- "NZ", //Z#543 NZ
- "NZ", //Z#544 NZ-CHAT
- "US", //Z#545 Navajo
- "PK", //Z#546 PLT
- "US", //Z#547 PNT
- "CN", //Z#548 PRC
- "PR", //Z#549 PRT
- "US", //Z#550 PST
- "001",//Z#551 PST8PDT
- "WS", //Z#552 Pacific/Apia
- "NZ", //Z#553 Pacific/Auckland
- "PG", //Z#554 Pacific/Bougainville
- "NZ", //Z#555 Pacific/Chatham
- "FM", //Z#556 Pacific/Chuuk
- "CL", //Z#557 Pacific/Easter
- "VU", //Z#558 Pacific/Efate
- "KI", //Z#559 Pacific/Enderbury
- "TK", //Z#560 Pacific/Fakaofo
- "FJ", //Z#561 Pacific/Fiji
- "TV", //Z#562 Pacific/Funafuti
- "EC", //Z#563 Pacific/Galapagos
- "PF", //Z#564 Pacific/Gambier
- "SB", //Z#565 Pacific/Guadalcanal
- "GU", //Z#566 Pacific/Guam
- "US", //Z#567 Pacific/Honolulu
- "UM", //Z#568 Pacific/Johnston
- "KI", //Z#569 Pacific/Kanton
- "KI", //Z#570 Pacific/Kiritimati
- "FM", //Z#571 Pacific/Kosrae
- "MH", //Z#572 Pacific/Kwajalein
- "MH", //Z#573 Pacific/Majuro
- "PF", //Z#574 Pacific/Marquesas
- "UM", //Z#575 Pacific/Midway
- "NR", //Z#576 Pacific/Nauru
- "NU", //Z#577 Pacific/Niue
- "NF", //Z#578 Pacific/Norfolk
- "NC", //Z#579 Pacific/Noumea
- "AS", //Z#580 Pacific/Pago_Pago
- "PW", //Z#581 Pacific/Palau
- "PN", //Z#582 Pacific/Pitcairn
- "FM", //Z#583 Pacific/Pohnpei
- "FM", //Z#584 Pacific/Ponape
- "PG", //Z#585 Pacific/Port_Moresby
- "CK", //Z#586 Pacific/Rarotonga
- "MP", //Z#587 Pacific/Saipan
- "AS", //Z#588 Pacific/Samoa
- "PF", //Z#589 Pacific/Tahiti
- "KI", //Z#590 Pacific/Tarawa
- "TO", //Z#591 Pacific/Tongatapu
- "FM", //Z#592 Pacific/Truk
- "UM", //Z#593 Pacific/Wake
- "WF", //Z#594 Pacific/Wallis
- "FM", //Z#595 Pacific/Yap
- "PL", //Z#596 Poland
- "PT", //Z#597 Portugal
- "TW", //Z#598 ROC
- "KR", //Z#599 ROK
- "SB", //Z#600 SST
- "SG", //Z#601 Singapore
- "001",//Z#602 SystemV/AST4
- "001",//Z#603 SystemV/AST4ADT
- "001",//Z#604 SystemV/CST6
- "001",//Z#605 SystemV/CST6CDT
- "001",//Z#606 SystemV/EST5
- "001",//Z#607 SystemV/EST5EDT
- "001",//Z#608 SystemV/HST10
- "001",//Z#609 SystemV/MST7
- "001",//Z#610 SystemV/MST7MDT
- "001",//Z#611 SystemV/PST8
- "001",//Z#612 SystemV/PST8PDT
- "001",//Z#613 SystemV/YST9
- "001",//Z#614 SystemV/YST9YDT
- "TR", //Z#615 Turkey
- "001",//Z#616 UCT
- "US", //Z#617 US/Alaska
- "US", //Z#618 US/Aleutian
- "US", //Z#619 US/Arizona
- "US", //Z#620 US/Central
- "US", //Z#621 US/East-Indiana
- "US", //Z#622 US/Eastern
- "US", //Z#623 US/Hawaii
- "US", //Z#624 US/Indiana-Starke
- "US", //Z#625 US/Michigan
- "US", //Z#626 US/Mountain
- "US", //Z#627 US/Pacific
- "US", //Z#628 US/Pacific-New
- "AS", //Z#629 US/Samoa
- "001",//Z#630 UTC
- "001",//Z#631 Universal
- "VN", //Z#632 VST
- "RU", //Z#633 W-SU
- "001",//Z#634 WET
- "001",//Z#635 Zulu
+ "UA", //Z#464 Europe/Kyiv
+ "PT", //Z#465 Europe/Lisbon
+ "SI", //Z#466 Europe/Ljubljana
+ "GB", //Z#467 Europe/London
+ "LU", //Z#468 Europe/Luxembourg
+ "ES", //Z#469 Europe/Madrid
+ "MT", //Z#470 Europe/Malta
+ "AX", //Z#471 Europe/Mariehamn
+ "BY", //Z#472 Europe/Minsk
+ "MC", //Z#473 Europe/Monaco
+ "RU", //Z#474 Europe/Moscow
+ "CY", //Z#475 Europe/Nicosia
+ "NO", //Z#476 Europe/Oslo
+ "FR", //Z#477 Europe/Paris
+ "ME", //Z#478 Europe/Podgorica
+ "CZ", //Z#479 Europe/Prague
+ "LV", //Z#480 Europe/Riga
+ "IT", //Z#481 Europe/Rome
+ "RU", //Z#482 Europe/Samara
+ "SM", //Z#483 Europe/San_Marino
+ "BA", //Z#484 Europe/Sarajevo
+ "RU", //Z#485 Europe/Saratov
+ "UA", //Z#486 Europe/Simferopol
+ "MK", //Z#487 Europe/Skopje
+ "BG", //Z#488 Europe/Sofia
+ "SE", //Z#489 Europe/Stockholm
+ "EE", //Z#490 Europe/Tallinn
+ "AL", //Z#491 Europe/Tirane
+ "MD", //Z#492 Europe/Tiraspol
+ "RU", //Z#493 Europe/Ulyanovsk
+ "UA", //Z#494 Europe/Uzhgorod
+ "LI", //Z#495 Europe/Vaduz
+ "VA", //Z#496 Europe/Vatican
+ "AT", //Z#497 Europe/Vienna
+ "LT", //Z#498 Europe/Vilnius
+ "RU", //Z#499 Europe/Volgograd
+ "PL", //Z#500 Europe/Warsaw
+ "HR", //Z#501 Europe/Zagreb
+ "UA", //Z#502 Europe/Zaporozhye
+ "CH", //Z#503 Europe/Zurich
+ "001",//Z#504 Factory
+ "GB", //Z#505 GB
+ "GB", //Z#506 GB-Eire
+ "001",//Z#507 GMT
+ "001",//Z#508 GMT+0
+ "001",//Z#509 GMT-0
+ "001",//Z#510 GMT0
+ "001",//Z#511 Greenwich
+ "001",//Z#512 HST
+ "HK", //Z#513 Hongkong
+ "US", //Z#514 IET
+ "IN", //Z#515 IST
+ "CI", //Z#516 Iceland
+ "MG", //Z#517 Indian/Antananarivo
+ "IO", //Z#518 Indian/Chagos
+ "CX", //Z#519 Indian/Christmas
+ "CC", //Z#520 Indian/Cocos
+ "KM", //Z#521 Indian/Comoro
+ "TF", //Z#522 Indian/Kerguelen
+ "SC", //Z#523 Indian/Mahe
+ "MV", //Z#524 Indian/Maldives
+ "MU", //Z#525 Indian/Mauritius
+ "YT", //Z#526 Indian/Mayotte
+ "RE", //Z#527 Indian/Reunion
+ "IR", //Z#528 Iran
+ "IL", //Z#529 Israel
+ "JP", //Z#530 JST
+ "JM", //Z#531 Jamaica
+ "JP", //Z#532 Japan
+ "MH", //Z#533 Kwajalein
+ "LY", //Z#534 Libya
+ "001",//Z#535 MET
+ "WS", //Z#536 MIT
+ "001",//Z#537 MST
+ "001",//Z#538 MST7MDT
+ "MX", //Z#539 Mexico/BajaNorte
+ "MX", //Z#540 Mexico/BajaSur
+ "MX", //Z#541 Mexico/General
+ "AM", //Z#542 NET
+ "NZ", //Z#543 NST
+ "NZ", //Z#544 NZ
+ "NZ", //Z#545 NZ-CHAT
+ "US", //Z#546 Navajo
+ "PK", //Z#547 PLT
+ "US", //Z#548 PNT
+ "CN", //Z#549 PRC
+ "PR", //Z#550 PRT
+ "US", //Z#551 PST
+ "001",//Z#552 PST8PDT
+ "WS", //Z#553 Pacific/Apia
+ "NZ", //Z#554 Pacific/Auckland
+ "PG", //Z#555 Pacific/Bougainville
+ "NZ", //Z#556 Pacific/Chatham
+ "FM", //Z#557 Pacific/Chuuk
+ "CL", //Z#558 Pacific/Easter
+ "VU", //Z#559 Pacific/Efate
+ "KI", //Z#560 Pacific/Enderbury
+ "TK", //Z#561 Pacific/Fakaofo
+ "FJ", //Z#562 Pacific/Fiji
+ "TV", //Z#563 Pacific/Funafuti
+ "EC", //Z#564 Pacific/Galapagos
+ "PF", //Z#565 Pacific/Gambier
+ "SB", //Z#566 Pacific/Guadalcanal
+ "GU", //Z#567 Pacific/Guam
+ "US", //Z#568 Pacific/Honolulu
+ "UM", //Z#569 Pacific/Johnston
+ "KI", //Z#570 Pacific/Kanton
+ "KI", //Z#571 Pacific/Kiritimati
+ "FM", //Z#572 Pacific/Kosrae
+ "MH", //Z#573 Pacific/Kwajalein
+ "MH", //Z#574 Pacific/Majuro
+ "PF", //Z#575 Pacific/Marquesas
+ "UM", //Z#576 Pacific/Midway
+ "NR", //Z#577 Pacific/Nauru
+ "NU", //Z#578 Pacific/Niue
+ "NF", //Z#579 Pacific/Norfolk
+ "NC", //Z#580 Pacific/Noumea
+ "AS", //Z#581 Pacific/Pago_Pago
+ "PW", //Z#582 Pacific/Palau
+ "PN", //Z#583 Pacific/Pitcairn
+ "FM", //Z#584 Pacific/Pohnpei
+ "SB", //Z#585 Pacific/Ponape
+ "PG", //Z#586 Pacific/Port_Moresby
+ "CK", //Z#587 Pacific/Rarotonga
+ "MP", //Z#588 Pacific/Saipan
+ "AS", //Z#589 Pacific/Samoa
+ "PF", //Z#590 Pacific/Tahiti
+ "KI", //Z#591 Pacific/Tarawa
+ "TO", //Z#592 Pacific/Tongatapu
+ "PG", //Z#593 Pacific/Truk
+ "UM", //Z#594 Pacific/Wake
+ "WF", //Z#595 Pacific/Wallis
+ "PG", //Z#596 Pacific/Yap
+ "PL", //Z#597 Poland
+ "PT", //Z#598 Portugal
+ "TW", //Z#599 ROC
+ "KR", //Z#600 ROK
+ "SB", //Z#601 SST
+ "SG", //Z#602 Singapore
+ "001",//Z#603 SystemV/AST4
+ "001",//Z#604 SystemV/AST4ADT
+ "001",//Z#605 SystemV/CST6
+ "001",//Z#606 SystemV/CST6CDT
+ "001",//Z#607 SystemV/EST5
+ "001",//Z#608 SystemV/EST5EDT
+ "001",//Z#609 SystemV/HST10
+ "001",//Z#610 SystemV/MST7
+ "001",//Z#611 SystemV/MST7MDT
+ "001",//Z#612 SystemV/PST8
+ "001",//Z#613 SystemV/PST8PDT
+ "001",//Z#614 SystemV/YST9
+ "001",//Z#615 SystemV/YST9YDT
+ "TR", //Z#616 Turkey
+ "001",//Z#617 UCT
+ "US", //Z#618 US/Alaska
+ "US", //Z#619 US/Aleutian
+ "US", //Z#620 US/Arizona
+ "US", //Z#621 US/Central
+ "US", //Z#622 US/East-Indiana
+ "US", //Z#623 US/Eastern
+ "US", //Z#624 US/Hawaii
+ "US", //Z#625 US/Indiana-Starke
+ "US", //Z#626 US/Michigan
+ "US", //Z#627 US/Mountain
+ "US", //Z#628 US/Pacific
+ "US", //Z#629 US/Pacific-New
+ "AS", //Z#630 US/Samoa
+ "001",//Z#631 UTC
+ "001",//Z#632 Universal
+ "VN", //Z#633 VST
+ "RU", //Z#634 W-SU
+ "001",//Z#635 WET
+ "001",//Z#636 Zulu
}
}
diff --git a/chromium/third_party/icu/tzres/metaZones.res b/chromium/third_party/icu/tzres/metaZones.res
index fcac28ddbe6..98ee2898125 100644
--- a/chromium/third_party/icu/tzres/metaZones.res
+++ b/chromium/third_party/icu/tzres/metaZones.res
Binary files differ
diff --git a/chromium/third_party/icu/tzres/timezoneTypes.res b/chromium/third_party/icu/tzres/timezoneTypes.res
index a6b576530e8..4928d84a0e0 100644
--- a/chromium/third_party/icu/tzres/timezoneTypes.res
+++ b/chromium/third_party/icu/tzres/timezoneTypes.res
Binary files differ
diff --git a/chromium/third_party/icu/tzres/zoneinfo64.res b/chromium/third_party/icu/tzres/zoneinfo64.res
index 978e00d7759..c0e4305671e 100644
--- a/chromium/third_party/icu/tzres/zoneinfo64.res
+++ b/chromium/third_party/icu/tzres/zoneinfo64.res
Binary files differ
diff --git a/chromium/third_party/node/node_modules.tar.gz.sha1 b/chromium/third_party/node/node_modules.tar.gz.sha1
index 3eb591554f8..66ba7eac52a 100644
--- a/chromium/third_party/node/node_modules.tar.gz.sha1
+++ b/chromium/third_party/node/node_modules.tar.gz.sha1
@@ -1 +1 @@
-691ddf79fa889ba538a8e25f79dde7bc3175e409
+1aac8548d2a6b8c5d32a49be55f4619c2da34403
diff --git a/chromium/third_party/node/node_modules/@babel/code-frame/LICENSE b/chromium/third_party/node/node_modules/@babel/code-frame/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/code-frame/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/code-frame/lib/index.js b/chromium/third_party/node/node_modules/@babel/code-frame/lib/index.js
new file mode 100644
index 00000000000..a32a1e1f392
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/code-frame/lib/index.js
@@ -0,0 +1,163 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.codeFrameColumns = codeFrameColumns;
+exports.default = _default;
+
+var _highlight = require("@babel/highlight");
+
+let deprecationWarningShown = false;
+
+function getDefs(chalk) {
+ return {
+ gutter: chalk.grey,
+ marker: chalk.red.bold,
+ message: chalk.red.bold
+ };
+}
+
+const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
+
+function getMarkerLines(loc, source, opts) {
+ const startLoc = Object.assign({
+ column: 0,
+ line: -1
+ }, loc.start);
+ const endLoc = Object.assign({}, startLoc, loc.end);
+ const {
+ linesAbove = 2,
+ linesBelow = 3
+ } = opts || {};
+ const startLine = startLoc.line;
+ const startColumn = startLoc.column;
+ const endLine = endLoc.line;
+ const endColumn = endLoc.column;
+ let start = Math.max(startLine - (linesAbove + 1), 0);
+ let end = Math.min(source.length, endLine + linesBelow);
+
+ if (startLine === -1) {
+ start = 0;
+ }
+
+ if (endLine === -1) {
+ end = source.length;
+ }
+
+ const lineDiff = endLine - startLine;
+ const markerLines = {};
+
+ if (lineDiff) {
+ for (let i = 0; i <= lineDiff; i++) {
+ const lineNumber = i + startLine;
+
+ if (!startColumn) {
+ markerLines[lineNumber] = true;
+ } else if (i === 0) {
+ const sourceLength = source[lineNumber - 1].length;
+ markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
+ } else if (i === lineDiff) {
+ markerLines[lineNumber] = [0, endColumn];
+ } else {
+ const sourceLength = source[lineNumber - i].length;
+ markerLines[lineNumber] = [0, sourceLength];
+ }
+ }
+ } else {
+ if (startColumn === endColumn) {
+ if (startColumn) {
+ markerLines[startLine] = [startColumn, 0];
+ } else {
+ markerLines[startLine] = true;
+ }
+ } else {
+ markerLines[startLine] = [startColumn, endColumn - startColumn];
+ }
+ }
+
+ return {
+ start,
+ end,
+ markerLines
+ };
+}
+
+function codeFrameColumns(rawLines, loc, opts = {}) {
+ const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts);
+ const chalk = (0, _highlight.getChalk)(opts);
+ const defs = getDefs(chalk);
+
+ const maybeHighlight = (chalkFn, string) => {
+ return highlighted ? chalkFn(string) : string;
+ };
+
+ const lines = rawLines.split(NEWLINE);
+ const {
+ start,
+ end,
+ markerLines
+ } = getMarkerLines(loc, lines, opts);
+ const hasColumns = loc.start && typeof loc.start.column === "number";
+ const numberMaxWidth = String(end).length;
+ const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines;
+ let frame = highlightedLines.split(NEWLINE).slice(start, end).map((line, index) => {
+ const number = start + 1 + index;
+ const paddedNumber = ` ${number}`.slice(-numberMaxWidth);
+ const gutter = ` ${paddedNumber} |`;
+ const hasMarker = markerLines[number];
+ const lastMarkerLine = !markerLines[number + 1];
+
+ if (hasMarker) {
+ let markerLine = "";
+
+ if (Array.isArray(hasMarker)) {
+ const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
+ const numberOfMarkers = hasMarker[1] || 1;
+ markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), " ", markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join("");
+
+ if (lastMarkerLine && opts.message) {
+ markerLine += " " + maybeHighlight(defs.message, opts.message);
+ }
+ }
+
+ return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : "", markerLine].join("");
+ } else {
+ return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : ""}`;
+ }
+ }).join("\n");
+
+ if (opts.message && !hasColumns) {
+ frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
+ }
+
+ if (highlighted) {
+ return chalk.reset(frame);
+ } else {
+ return frame;
+ }
+}
+
+function _default(rawLines, lineNumber, colNumber, opts = {}) {
+ if (!deprecationWarningShown) {
+ deprecationWarningShown = true;
+ const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
+
+ if (process.emitWarning) {
+ process.emitWarning(message, "DeprecationWarning");
+ } else {
+ const deprecationError = new Error(message);
+ deprecationError.name = "DeprecationWarning";
+ console.warn(new Error(message));
+ }
+ }
+
+ colNumber = Math.max(colNumber, 0);
+ const location = {
+ start: {
+ column: colNumber,
+ line: lineNumber
+ }
+ };
+ return codeFrameColumns(rawLines, location, opts);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/code-frame/package.json b/chromium/third_party/node/node_modules/@babel/code-frame/package.json
new file mode 100644
index 00000000000..25f803d24f8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/code-frame/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "@babel/code-frame",
+ "version": "7.14.5",
+ "description": "Generate errors that contain a code frame that point to source locations.",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-code-frame",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-code-frame"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/highlight": "^7.14.5"
+ },
+ "devDependencies": {
+ "@types/chalk": "^2.0.0",
+ "chalk": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/LICENSE b/chromium/third_party/node/node_modules/@babel/generator/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/buffer.js b/chromium/third_party/node/node_modules/@babel/generator/lib/buffer.js
new file mode 100644
index 00000000000..14458139690
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/buffer.js
@@ -0,0 +1,265 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+const SPACES_RE = /^[ \t]+$/;
+
+class Buffer {
+ constructor(map) {
+ this._map = null;
+ this._buf = "";
+ this._last = 0;
+ this._queue = [];
+ this._position = {
+ line: 1,
+ column: 0
+ };
+ this._sourcePosition = {
+ identifierName: null,
+ line: null,
+ column: null,
+ filename: null
+ };
+ this._disallowedPop = null;
+ this._map = map;
+ }
+
+ get() {
+ this._flush();
+
+ const map = this._map;
+ const result = {
+ code: this._buf.trimRight(),
+ map: null,
+ rawMappings: map == null ? void 0 : map.getRawMappings()
+ };
+
+ if (map) {
+ Object.defineProperty(result, "map", {
+ configurable: true,
+ enumerable: true,
+
+ get() {
+ return this.map = map.get();
+ },
+
+ set(value) {
+ Object.defineProperty(this, "map", {
+ value,
+ writable: true
+ });
+ }
+
+ });
+ }
+
+ return result;
+ }
+
+ append(str) {
+ this._flush();
+
+ const {
+ line,
+ column,
+ filename,
+ identifierName,
+ force
+ } = this._sourcePosition;
+
+ this._append(str, line, column, identifierName, filename, force);
+ }
+
+ queue(str) {
+ if (str === "\n") {
+ while (this._queue.length > 0 && SPACES_RE.test(this._queue[0][0])) {
+ this._queue.shift();
+ }
+ }
+
+ const {
+ line,
+ column,
+ filename,
+ identifierName,
+ force
+ } = this._sourcePosition;
+
+ this._queue.unshift([str, line, column, identifierName, filename, force]);
+ }
+
+ _flush() {
+ let item;
+
+ while (item = this._queue.pop()) {
+ this._append(...item);
+ }
+ }
+
+ _append(str, line, column, identifierName, filename, force) {
+ this._buf += str;
+ this._last = str.charCodeAt(str.length - 1);
+ let i = str.indexOf("\n");
+ let last = 0;
+
+ if (i !== 0) {
+ this._mark(line, column, identifierName, filename, force);
+ }
+
+ while (i !== -1) {
+ this._position.line++;
+ this._position.column = 0;
+ last = i + 1;
+
+ if (last < str.length) {
+ this._mark(++line, 0, identifierName, filename, force);
+ }
+
+ i = str.indexOf("\n", last);
+ }
+
+ this._position.column += str.length - last;
+ }
+
+ _mark(line, column, identifierName, filename, force) {
+ var _this$_map;
+
+ (_this$_map = this._map) == null ? void 0 : _this$_map.mark(this._position.line, this._position.column, line, column, identifierName, filename, force);
+ }
+
+ removeTrailingNewline() {
+ if (this._queue.length > 0 && this._queue[0][0] === "\n") {
+ this._queue.shift();
+ }
+ }
+
+ removeLastSemicolon() {
+ if (this._queue.length > 0 && this._queue[0][0] === ";") {
+ this._queue.shift();
+ }
+ }
+
+ getLastChar() {
+ let last;
+
+ if (this._queue.length > 0) {
+ const str = this._queue[0][0];
+ last = str.charCodeAt(0);
+ } else {
+ last = this._last;
+ }
+
+ return last;
+ }
+
+ endsWithCharAndNewline() {
+ const queue = this._queue;
+
+ if (queue.length > 0) {
+ const last = queue[0][0];
+ const lastCp = last.charCodeAt(0);
+ if (lastCp !== 10) return;
+
+ if (queue.length > 1) {
+ const secondLast = queue[1][0];
+ return secondLast.charCodeAt(0);
+ } else {
+ return this._last;
+ }
+ }
+ }
+
+ hasContent() {
+ return this._queue.length > 0 || !!this._last;
+ }
+
+ exactSource(loc, cb) {
+ this.source("start", loc, true);
+ cb();
+ this.source("end", loc);
+
+ this._disallowPop("start", loc);
+ }
+
+ source(prop, loc, force) {
+ if (prop && !loc) return;
+
+ this._normalizePosition(prop, loc, this._sourcePosition, force);
+ }
+
+ withSource(prop, loc, cb) {
+ if (!this._map) return cb();
+ const originalLine = this._sourcePosition.line;
+ const originalColumn = this._sourcePosition.column;
+ const originalFilename = this._sourcePosition.filename;
+ const originalIdentifierName = this._sourcePosition.identifierName;
+ this.source(prop, loc);
+ cb();
+
+ if ((!this._sourcePosition.force || this._sourcePosition.line !== originalLine || this._sourcePosition.column !== originalColumn || this._sourcePosition.filename !== originalFilename) && (!this._disallowedPop || this._disallowedPop.line !== originalLine || this._disallowedPop.column !== originalColumn || this._disallowedPop.filename !== originalFilename)) {
+ this._sourcePosition.line = originalLine;
+ this._sourcePosition.column = originalColumn;
+ this._sourcePosition.filename = originalFilename;
+ this._sourcePosition.identifierName = originalIdentifierName;
+ this._sourcePosition.force = false;
+ this._disallowedPop = null;
+ }
+ }
+
+ _disallowPop(prop, loc) {
+ if (prop && !loc) return;
+ this._disallowedPop = this._normalizePosition(prop, loc);
+ }
+
+ _normalizePosition(prop, loc, targetObj, force) {
+ const pos = loc ? loc[prop] : null;
+
+ if (targetObj === undefined) {
+ targetObj = {
+ identifierName: null,
+ line: null,
+ column: null,
+ filename: null,
+ force: false
+ };
+ }
+
+ const origLine = targetObj.line;
+ const origColumn = targetObj.column;
+ const origFilename = targetObj.filename;
+ targetObj.identifierName = prop === "start" && (loc == null ? void 0 : loc.identifierName) || null;
+ targetObj.line = pos == null ? void 0 : pos.line;
+ targetObj.column = pos == null ? void 0 : pos.column;
+ targetObj.filename = loc == null ? void 0 : loc.filename;
+
+ if (force || targetObj.line !== origLine || targetObj.column !== origColumn || targetObj.filename !== origFilename) {
+ targetObj.force = force;
+ }
+
+ return targetObj;
+ }
+
+ getCurrentColumn() {
+ const extra = this._queue.reduce((acc, item) => item[0] + acc, "");
+
+ const lastIndex = extra.lastIndexOf("\n");
+ return lastIndex === -1 ? this._position.column + extra.length : extra.length - 1 - lastIndex;
+ }
+
+ getCurrentLine() {
+ const extra = this._queue.reduce((acc, item) => item[0] + acc, "");
+
+ let count = 0;
+
+ for (let i = 0; i < extra.length; i++) {
+ if (extra[i] === "\n") count++;
+ }
+
+ return this._position.line + count;
+ }
+
+}
+
+exports.default = Buffer; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/base.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/base.js
new file mode 100644
index 00000000000..222a3c2bb67
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/base.js
@@ -0,0 +1,96 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.File = File;
+exports.Program = Program;
+exports.BlockStatement = BlockStatement;
+exports.Directive = Directive;
+exports.DirectiveLiteral = DirectiveLiteral;
+exports.InterpreterDirective = InterpreterDirective;
+exports.Placeholder = Placeholder;
+
+function File(node) {
+ if (node.program) {
+ this.print(node.program.interpreter, node);
+ }
+
+ this.print(node.program, node);
+}
+
+function Program(node) {
+ this.printInnerComments(node, false);
+ this.printSequence(node.directives, node);
+ if (node.directives && node.directives.length) this.newline();
+ this.printSequence(node.body, node);
+}
+
+function BlockStatement(node) {
+ var _node$directives;
+
+ this.token("{");
+ this.printInnerComments(node);
+ const hasDirectives = (_node$directives = node.directives) == null ? void 0 : _node$directives.length;
+
+ if (node.body.length || hasDirectives) {
+ this.newline();
+ this.printSequence(node.directives, node, {
+ indent: true
+ });
+ if (hasDirectives) this.newline();
+ this.printSequence(node.body, node, {
+ indent: true
+ });
+ this.removeTrailingNewline();
+ this.source("end", node.loc);
+ if (!this.endsWith(10)) this.newline();
+ this.rightBrace();
+ } else {
+ this.source("end", node.loc);
+ this.token("}");
+ }
+}
+
+function Directive(node) {
+ this.print(node.value, node);
+ this.semicolon();
+}
+
+const unescapedSingleQuoteRE = /(?:^|[^\\])(?:\\\\)*'/;
+const unescapedDoubleQuoteRE = /(?:^|[^\\])(?:\\\\)*"/;
+
+function DirectiveLiteral(node) {
+ const raw = this.getPossibleRaw(node);
+
+ if (raw != null) {
+ this.token(raw);
+ return;
+ }
+
+ const {
+ value
+ } = node;
+
+ if (!unescapedDoubleQuoteRE.test(value)) {
+ this.token(`"${value}"`);
+ } else if (!unescapedSingleQuoteRE.test(value)) {
+ this.token(`'${value}'`);
+ } else {
+ throw new Error("Malformed AST: it is not possible to print a directive containing" + " both unescaped single and double quotes.");
+ }
+}
+
+function InterpreterDirective(node) {
+ this.token(`#!${node.value}\n`);
+}
+
+function Placeholder(node) {
+ this.token("%%");
+ this.print(node.name);
+ this.token("%%");
+
+ if (node.expectedNode === "Statement") {
+ this.semicolon();
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/classes.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/classes.js
new file mode 100644
index 00000000000..eae92d43113
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/classes.js
@@ -0,0 +1,173 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ClassExpression = exports.ClassDeclaration = ClassDeclaration;
+exports.ClassBody = ClassBody;
+exports.ClassProperty = ClassProperty;
+exports.ClassPrivateProperty = ClassPrivateProperty;
+exports.ClassMethod = ClassMethod;
+exports.ClassPrivateMethod = ClassPrivateMethod;
+exports._classMethodHead = _classMethodHead;
+exports.StaticBlock = StaticBlock;
+
+var _t = require("@babel/types");
+
+const {
+ isExportDefaultDeclaration,
+ isExportNamedDeclaration
+} = _t;
+
+function ClassDeclaration(node, parent) {
+ if (!this.format.decoratorsBeforeExport || !isExportDefaultDeclaration(parent) && !isExportNamedDeclaration(parent)) {
+ this.printJoin(node.decorators, node);
+ }
+
+ if (node.declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ if (node.abstract) {
+ this.word("abstract");
+ this.space();
+ }
+
+ this.word("class");
+
+ if (node.id) {
+ this.space();
+ this.print(node.id, node);
+ }
+
+ this.print(node.typeParameters, node);
+
+ if (node.superClass) {
+ this.space();
+ this.word("extends");
+ this.space();
+ this.print(node.superClass, node);
+ this.print(node.superTypeParameters, node);
+ }
+
+ if (node.implements) {
+ this.space();
+ this.word("implements");
+ this.space();
+ this.printList(node.implements, node);
+ }
+
+ this.space();
+ this.print(node.body, node);
+}
+
+function ClassBody(node) {
+ this.token("{");
+ this.printInnerComments(node);
+
+ if (node.body.length === 0) {
+ this.token("}");
+ } else {
+ this.newline();
+ this.indent();
+ this.printSequence(node.body, node);
+ this.dedent();
+ if (!this.endsWith(10)) this.newline();
+ this.rightBrace();
+ }
+}
+
+function ClassProperty(node) {
+ this.printJoin(node.decorators, node);
+ this.source("end", node.key.loc);
+ this.tsPrintClassMemberModifiers(node, true);
+
+ if (node.computed) {
+ this.token("[");
+ this.print(node.key, node);
+ this.token("]");
+ } else {
+ this._variance(node);
+
+ this.print(node.key, node);
+ }
+
+ if (node.optional) {
+ this.token("?");
+ }
+
+ if (node.definite) {
+ this.token("!");
+ }
+
+ this.print(node.typeAnnotation, node);
+
+ if (node.value) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.value, node);
+ }
+
+ this.semicolon();
+}
+
+function ClassPrivateProperty(node) {
+ this.printJoin(node.decorators, node);
+
+ if (node.static) {
+ this.word("static");
+ this.space();
+ }
+
+ this.print(node.key, node);
+ this.print(node.typeAnnotation, node);
+
+ if (node.value) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.value, node);
+ }
+
+ this.semicolon();
+}
+
+function ClassMethod(node) {
+ this._classMethodHead(node);
+
+ this.space();
+ this.print(node.body, node);
+}
+
+function ClassPrivateMethod(node) {
+ this._classMethodHead(node);
+
+ this.space();
+ this.print(node.body, node);
+}
+
+function _classMethodHead(node) {
+ this.printJoin(node.decorators, node);
+ this.source("end", node.key.loc);
+ this.tsPrintClassMemberModifiers(node, false);
+
+ this._methodHead(node);
+}
+
+function StaticBlock(node) {
+ this.word("static");
+ this.space();
+ this.token("{");
+
+ if (node.body.length === 0) {
+ this.token("}");
+ } else {
+ this.newline();
+ this.printSequence(node.body, node, {
+ indent: true
+ });
+ this.rightBrace();
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/expressions.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/expressions.js
new file mode 100644
index 00000000000..a0f293fd630
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/expressions.js
@@ -0,0 +1,317 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.UnaryExpression = UnaryExpression;
+exports.DoExpression = DoExpression;
+exports.ParenthesizedExpression = ParenthesizedExpression;
+exports.UpdateExpression = UpdateExpression;
+exports.ConditionalExpression = ConditionalExpression;
+exports.NewExpression = NewExpression;
+exports.SequenceExpression = SequenceExpression;
+exports.ThisExpression = ThisExpression;
+exports.Super = Super;
+exports.Decorator = Decorator;
+exports.OptionalMemberExpression = OptionalMemberExpression;
+exports.OptionalCallExpression = OptionalCallExpression;
+exports.CallExpression = CallExpression;
+exports.Import = Import;
+exports.EmptyStatement = EmptyStatement;
+exports.ExpressionStatement = ExpressionStatement;
+exports.AssignmentPattern = AssignmentPattern;
+exports.LogicalExpression = exports.BinaryExpression = exports.AssignmentExpression = AssignmentExpression;
+exports.BindExpression = BindExpression;
+exports.MemberExpression = MemberExpression;
+exports.MetaProperty = MetaProperty;
+exports.PrivateName = PrivateName;
+exports.V8IntrinsicIdentifier = V8IntrinsicIdentifier;
+exports.ModuleExpression = ModuleExpression;
+exports.AwaitExpression = exports.YieldExpression = void 0;
+
+var _t = require("@babel/types");
+
+var n = require("../node");
+
+const {
+ isCallExpression,
+ isLiteral,
+ isMemberExpression,
+ isNewExpression
+} = _t;
+
+function UnaryExpression(node) {
+ if (node.operator === "void" || node.operator === "delete" || node.operator === "typeof" || node.operator === "throw") {
+ this.word(node.operator);
+ this.space();
+ } else {
+ this.token(node.operator);
+ }
+
+ this.print(node.argument, node);
+}
+
+function DoExpression(node) {
+ if (node.async) {
+ this.word("async");
+ this.space();
+ }
+
+ this.word("do");
+ this.space();
+ this.print(node.body, node);
+}
+
+function ParenthesizedExpression(node) {
+ this.token("(");
+ this.print(node.expression, node);
+ this.token(")");
+}
+
+function UpdateExpression(node) {
+ if (node.prefix) {
+ this.token(node.operator);
+ this.print(node.argument, node);
+ } else {
+ this.startTerminatorless(true);
+ this.print(node.argument, node);
+ this.endTerminatorless();
+ this.token(node.operator);
+ }
+}
+
+function ConditionalExpression(node) {
+ this.print(node.test, node);
+ this.space();
+ this.token("?");
+ this.space();
+ this.print(node.consequent, node);
+ this.space();
+ this.token(":");
+ this.space();
+ this.print(node.alternate, node);
+}
+
+function NewExpression(node, parent) {
+ this.word("new");
+ this.space();
+ this.print(node.callee, node);
+
+ if (this.format.minified && node.arguments.length === 0 && !node.optional && !isCallExpression(parent, {
+ callee: node
+ }) && !isMemberExpression(parent) && !isNewExpression(parent)) {
+ return;
+ }
+
+ this.print(node.typeArguments, node);
+ this.print(node.typeParameters, node);
+
+ if (node.optional) {
+ this.token("?.");
+ }
+
+ this.token("(");
+ this.printList(node.arguments, node);
+ this.token(")");
+}
+
+function SequenceExpression(node) {
+ this.printList(node.expressions, node);
+}
+
+function ThisExpression() {
+ this.word("this");
+}
+
+function Super() {
+ this.word("super");
+}
+
+function Decorator(node) {
+ this.token("@");
+ this.print(node.expression, node);
+ this.newline();
+}
+
+function OptionalMemberExpression(node) {
+ this.print(node.object, node);
+
+ if (!node.computed && isMemberExpression(node.property)) {
+ throw new TypeError("Got a MemberExpression for MemberExpression property");
+ }
+
+ let computed = node.computed;
+
+ if (isLiteral(node.property) && typeof node.property.value === "number") {
+ computed = true;
+ }
+
+ if (node.optional) {
+ this.token("?.");
+ }
+
+ if (computed) {
+ this.token("[");
+ this.print(node.property, node);
+ this.token("]");
+ } else {
+ if (!node.optional) {
+ this.token(".");
+ }
+
+ this.print(node.property, node);
+ }
+}
+
+function OptionalCallExpression(node) {
+ this.print(node.callee, node);
+ this.print(node.typeArguments, node);
+ this.print(node.typeParameters, node);
+
+ if (node.optional) {
+ this.token("?.");
+ }
+
+ this.token("(");
+ this.printList(node.arguments, node);
+ this.token(")");
+}
+
+function CallExpression(node) {
+ this.print(node.callee, node);
+ this.print(node.typeArguments, node);
+ this.print(node.typeParameters, node);
+ this.token("(");
+ this.printList(node.arguments, node);
+ this.token(")");
+}
+
+function Import() {
+ this.word("import");
+}
+
+function buildYieldAwait(keyword) {
+ return function (node) {
+ this.word(keyword);
+
+ if (node.delegate) {
+ this.token("*");
+ }
+
+ if (node.argument) {
+ this.space();
+ const terminatorState = this.startTerminatorless();
+ this.print(node.argument, node);
+ this.endTerminatorless(terminatorState);
+ }
+ };
+}
+
+const YieldExpression = buildYieldAwait("yield");
+exports.YieldExpression = YieldExpression;
+const AwaitExpression = buildYieldAwait("await");
+exports.AwaitExpression = AwaitExpression;
+
+function EmptyStatement() {
+ this.semicolon(true);
+}
+
+function ExpressionStatement(node) {
+ this.print(node.expression, node);
+ this.semicolon();
+}
+
+function AssignmentPattern(node) {
+ this.print(node.left, node);
+ if (node.left.optional) this.token("?");
+ this.print(node.left.typeAnnotation, node);
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.right, node);
+}
+
+function AssignmentExpression(node, parent) {
+ const parens = this.inForStatementInitCounter && node.operator === "in" && !n.needsParens(node, parent);
+
+ if (parens) {
+ this.token("(");
+ }
+
+ this.print(node.left, node);
+ this.space();
+
+ if (node.operator === "in" || node.operator === "instanceof") {
+ this.word(node.operator);
+ } else {
+ this.token(node.operator);
+ }
+
+ this.space();
+ this.print(node.right, node);
+
+ if (parens) {
+ this.token(")");
+ }
+}
+
+function BindExpression(node) {
+ this.print(node.object, node);
+ this.token("::");
+ this.print(node.callee, node);
+}
+
+function MemberExpression(node) {
+ this.print(node.object, node);
+
+ if (!node.computed && isMemberExpression(node.property)) {
+ throw new TypeError("Got a MemberExpression for MemberExpression property");
+ }
+
+ let computed = node.computed;
+
+ if (isLiteral(node.property) && typeof node.property.value === "number") {
+ computed = true;
+ }
+
+ if (computed) {
+ this.token("[");
+ this.print(node.property, node);
+ this.token("]");
+ } else {
+ this.token(".");
+ this.print(node.property, node);
+ }
+}
+
+function MetaProperty(node) {
+ this.print(node.meta, node);
+ this.token(".");
+ this.print(node.property, node);
+}
+
+function PrivateName(node) {
+ this.token("#");
+ this.print(node.id, node);
+}
+
+function V8IntrinsicIdentifier(node) {
+ this.token("%");
+ this.word(node.name);
+}
+
+function ModuleExpression(node) {
+ this.word("module");
+ this.space();
+ this.token("{");
+
+ if (node.body.body.length === 0) {
+ this.token("}");
+ } else {
+ this.newline();
+ this.printSequence(node.body.body, node, {
+ indent: true
+ });
+ this.rightBrace();
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/flow.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/flow.js
new file mode 100644
index 00000000000..b2bce2f0839
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/flow.js
@@ -0,0 +1,795 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.AnyTypeAnnotation = AnyTypeAnnotation;
+exports.ArrayTypeAnnotation = ArrayTypeAnnotation;
+exports.BooleanTypeAnnotation = BooleanTypeAnnotation;
+exports.BooleanLiteralTypeAnnotation = BooleanLiteralTypeAnnotation;
+exports.NullLiteralTypeAnnotation = NullLiteralTypeAnnotation;
+exports.DeclareClass = DeclareClass;
+exports.DeclareFunction = DeclareFunction;
+exports.InferredPredicate = InferredPredicate;
+exports.DeclaredPredicate = DeclaredPredicate;
+exports.DeclareInterface = DeclareInterface;
+exports.DeclareModule = DeclareModule;
+exports.DeclareModuleExports = DeclareModuleExports;
+exports.DeclareTypeAlias = DeclareTypeAlias;
+exports.DeclareOpaqueType = DeclareOpaqueType;
+exports.DeclareVariable = DeclareVariable;
+exports.DeclareExportDeclaration = DeclareExportDeclaration;
+exports.DeclareExportAllDeclaration = DeclareExportAllDeclaration;
+exports.EnumDeclaration = EnumDeclaration;
+exports.EnumBooleanBody = EnumBooleanBody;
+exports.EnumNumberBody = EnumNumberBody;
+exports.EnumStringBody = EnumStringBody;
+exports.EnumSymbolBody = EnumSymbolBody;
+exports.EnumDefaultedMember = EnumDefaultedMember;
+exports.EnumBooleanMember = EnumBooleanMember;
+exports.EnumNumberMember = EnumNumberMember;
+exports.EnumStringMember = EnumStringMember;
+exports.ExistsTypeAnnotation = ExistsTypeAnnotation;
+exports.FunctionTypeAnnotation = FunctionTypeAnnotation;
+exports.FunctionTypeParam = FunctionTypeParam;
+exports.GenericTypeAnnotation = exports.ClassImplements = exports.InterfaceExtends = InterfaceExtends;
+exports._interfaceish = _interfaceish;
+exports._variance = _variance;
+exports.InterfaceDeclaration = InterfaceDeclaration;
+exports.InterfaceTypeAnnotation = InterfaceTypeAnnotation;
+exports.IntersectionTypeAnnotation = IntersectionTypeAnnotation;
+exports.MixedTypeAnnotation = MixedTypeAnnotation;
+exports.EmptyTypeAnnotation = EmptyTypeAnnotation;
+exports.NullableTypeAnnotation = NullableTypeAnnotation;
+exports.NumberTypeAnnotation = NumberTypeAnnotation;
+exports.StringTypeAnnotation = StringTypeAnnotation;
+exports.ThisTypeAnnotation = ThisTypeAnnotation;
+exports.TupleTypeAnnotation = TupleTypeAnnotation;
+exports.TypeofTypeAnnotation = TypeofTypeAnnotation;
+exports.TypeAlias = TypeAlias;
+exports.TypeAnnotation = TypeAnnotation;
+exports.TypeParameterDeclaration = exports.TypeParameterInstantiation = TypeParameterInstantiation;
+exports.TypeParameter = TypeParameter;
+exports.OpaqueType = OpaqueType;
+exports.ObjectTypeAnnotation = ObjectTypeAnnotation;
+exports.ObjectTypeInternalSlot = ObjectTypeInternalSlot;
+exports.ObjectTypeCallProperty = ObjectTypeCallProperty;
+exports.ObjectTypeIndexer = ObjectTypeIndexer;
+exports.ObjectTypeProperty = ObjectTypeProperty;
+exports.ObjectTypeSpreadProperty = ObjectTypeSpreadProperty;
+exports.QualifiedTypeIdentifier = QualifiedTypeIdentifier;
+exports.SymbolTypeAnnotation = SymbolTypeAnnotation;
+exports.UnionTypeAnnotation = UnionTypeAnnotation;
+exports.TypeCastExpression = TypeCastExpression;
+exports.Variance = Variance;
+exports.VoidTypeAnnotation = VoidTypeAnnotation;
+exports.IndexedAccessType = IndexedAccessType;
+exports.OptionalIndexedAccessType = OptionalIndexedAccessType;
+Object.defineProperty(exports, "NumberLiteralTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _types2.NumericLiteral;
+ }
+});
+Object.defineProperty(exports, "StringLiteralTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _types2.StringLiteral;
+ }
+});
+
+var _t = require("@babel/types");
+
+var _modules = require("./modules");
+
+var _types2 = require("./types");
+
+const {
+ isDeclareExportDeclaration,
+ isStatement
+} = _t;
+
+function AnyTypeAnnotation() {
+ this.word("any");
+}
+
+function ArrayTypeAnnotation(node) {
+ this.print(node.elementType, node);
+ this.token("[");
+ this.token("]");
+}
+
+function BooleanTypeAnnotation() {
+ this.word("boolean");
+}
+
+function BooleanLiteralTypeAnnotation(node) {
+ this.word(node.value ? "true" : "false");
+}
+
+function NullLiteralTypeAnnotation() {
+ this.word("null");
+}
+
+function DeclareClass(node, parent) {
+ if (!isDeclareExportDeclaration(parent)) {
+ this.word("declare");
+ this.space();
+ }
+
+ this.word("class");
+ this.space();
+
+ this._interfaceish(node);
+}
+
+function DeclareFunction(node, parent) {
+ if (!isDeclareExportDeclaration(parent)) {
+ this.word("declare");
+ this.space();
+ }
+
+ this.word("function");
+ this.space();
+ this.print(node.id, node);
+ this.print(node.id.typeAnnotation.typeAnnotation, node);
+
+ if (node.predicate) {
+ this.space();
+ this.print(node.predicate, node);
+ }
+
+ this.semicolon();
+}
+
+function InferredPredicate() {
+ this.token("%");
+ this.word("checks");
+}
+
+function DeclaredPredicate(node) {
+ this.token("%");
+ this.word("checks");
+ this.token("(");
+ this.print(node.value, node);
+ this.token(")");
+}
+
+function DeclareInterface(node) {
+ this.word("declare");
+ this.space();
+ this.InterfaceDeclaration(node);
+}
+
+function DeclareModule(node) {
+ this.word("declare");
+ this.space();
+ this.word("module");
+ this.space();
+ this.print(node.id, node);
+ this.space();
+ this.print(node.body, node);
+}
+
+function DeclareModuleExports(node) {
+ this.word("declare");
+ this.space();
+ this.word("module");
+ this.token(".");
+ this.word("exports");
+ this.print(node.typeAnnotation, node);
+}
+
+function DeclareTypeAlias(node) {
+ this.word("declare");
+ this.space();
+ this.TypeAlias(node);
+}
+
+function DeclareOpaqueType(node, parent) {
+ if (!isDeclareExportDeclaration(parent)) {
+ this.word("declare");
+ this.space();
+ }
+
+ this.OpaqueType(node);
+}
+
+function DeclareVariable(node, parent) {
+ if (!isDeclareExportDeclaration(parent)) {
+ this.word("declare");
+ this.space();
+ }
+
+ this.word("var");
+ this.space();
+ this.print(node.id, node);
+ this.print(node.id.typeAnnotation, node);
+ this.semicolon();
+}
+
+function DeclareExportDeclaration(node) {
+ this.word("declare");
+ this.space();
+ this.word("export");
+ this.space();
+
+ if (node.default) {
+ this.word("default");
+ this.space();
+ }
+
+ FlowExportDeclaration.apply(this, arguments);
+}
+
+function DeclareExportAllDeclaration() {
+ this.word("declare");
+ this.space();
+
+ _modules.ExportAllDeclaration.apply(this, arguments);
+}
+
+function EnumDeclaration(node) {
+ const {
+ id,
+ body
+ } = node;
+ this.word("enum");
+ this.space();
+ this.print(id, node);
+ this.print(body, node);
+}
+
+function enumExplicitType(context, name, hasExplicitType) {
+ if (hasExplicitType) {
+ context.space();
+ context.word("of");
+ context.space();
+ context.word(name);
+ }
+
+ context.space();
+}
+
+function enumBody(context, node) {
+ const {
+ members
+ } = node;
+ context.token("{");
+ context.indent();
+ context.newline();
+
+ for (const member of members) {
+ context.print(member, node);
+ context.newline();
+ }
+
+ if (node.hasUnknownMembers) {
+ context.token("...");
+ context.newline();
+ }
+
+ context.dedent();
+ context.token("}");
+}
+
+function EnumBooleanBody(node) {
+ const {
+ explicitType
+ } = node;
+ enumExplicitType(this, "boolean", explicitType);
+ enumBody(this, node);
+}
+
+function EnumNumberBody(node) {
+ const {
+ explicitType
+ } = node;
+ enumExplicitType(this, "number", explicitType);
+ enumBody(this, node);
+}
+
+function EnumStringBody(node) {
+ const {
+ explicitType
+ } = node;
+ enumExplicitType(this, "string", explicitType);
+ enumBody(this, node);
+}
+
+function EnumSymbolBody(node) {
+ enumExplicitType(this, "symbol", true);
+ enumBody(this, node);
+}
+
+function EnumDefaultedMember(node) {
+ const {
+ id
+ } = node;
+ this.print(id, node);
+ this.token(",");
+}
+
+function enumInitializedMember(context, node) {
+ const {
+ id,
+ init
+ } = node;
+ context.print(id, node);
+ context.space();
+ context.token("=");
+ context.space();
+ context.print(init, node);
+ context.token(",");
+}
+
+function EnumBooleanMember(node) {
+ enumInitializedMember(this, node);
+}
+
+function EnumNumberMember(node) {
+ enumInitializedMember(this, node);
+}
+
+function EnumStringMember(node) {
+ enumInitializedMember(this, node);
+}
+
+function FlowExportDeclaration(node) {
+ if (node.declaration) {
+ const declar = node.declaration;
+ this.print(declar, node);
+ if (!isStatement(declar)) this.semicolon();
+ } else {
+ this.token("{");
+
+ if (node.specifiers.length) {
+ this.space();
+ this.printList(node.specifiers, node);
+ this.space();
+ }
+
+ this.token("}");
+
+ if (node.source) {
+ this.space();
+ this.word("from");
+ this.space();
+ this.print(node.source, node);
+ }
+
+ this.semicolon();
+ }
+}
+
+function ExistsTypeAnnotation() {
+ this.token("*");
+}
+
+function FunctionTypeAnnotation(node, parent) {
+ this.print(node.typeParameters, node);
+ this.token("(");
+
+ if (node.this) {
+ this.word("this");
+ this.token(":");
+ this.space();
+ this.print(node.this.typeAnnotation, node);
+
+ if (node.params.length || node.rest) {
+ this.token(",");
+ this.space();
+ }
+ }
+
+ this.printList(node.params, node);
+
+ if (node.rest) {
+ if (node.params.length) {
+ this.token(",");
+ this.space();
+ }
+
+ this.token("...");
+ this.print(node.rest, node);
+ }
+
+ this.token(")");
+
+ if (parent.type === "ObjectTypeCallProperty" || parent.type === "DeclareFunction" || parent.type === "ObjectTypeProperty" && parent.method) {
+ this.token(":");
+ } else {
+ this.space();
+ this.token("=>");
+ }
+
+ this.space();
+ this.print(node.returnType, node);
+}
+
+function FunctionTypeParam(node) {
+ this.print(node.name, node);
+ if (node.optional) this.token("?");
+
+ if (node.name) {
+ this.token(":");
+ this.space();
+ }
+
+ this.print(node.typeAnnotation, node);
+}
+
+function InterfaceExtends(node) {
+ this.print(node.id, node);
+ this.print(node.typeParameters, node);
+}
+
+function _interfaceish(node) {
+ var _node$extends;
+
+ this.print(node.id, node);
+ this.print(node.typeParameters, node);
+
+ if ((_node$extends = node.extends) != null && _node$extends.length) {
+ this.space();
+ this.word("extends");
+ this.space();
+ this.printList(node.extends, node);
+ }
+
+ if (node.mixins && node.mixins.length) {
+ this.space();
+ this.word("mixins");
+ this.space();
+ this.printList(node.mixins, node);
+ }
+
+ if (node.implements && node.implements.length) {
+ this.space();
+ this.word("implements");
+ this.space();
+ this.printList(node.implements, node);
+ }
+
+ this.space();
+ this.print(node.body, node);
+}
+
+function _variance(node) {
+ if (node.variance) {
+ if (node.variance.kind === "plus") {
+ this.token("+");
+ } else if (node.variance.kind === "minus") {
+ this.token("-");
+ }
+ }
+}
+
+function InterfaceDeclaration(node) {
+ this.word("interface");
+ this.space();
+
+ this._interfaceish(node);
+}
+
+function andSeparator() {
+ this.space();
+ this.token("&");
+ this.space();
+}
+
+function InterfaceTypeAnnotation(node) {
+ this.word("interface");
+
+ if (node.extends && node.extends.length) {
+ this.space();
+ this.word("extends");
+ this.space();
+ this.printList(node.extends, node);
+ }
+
+ this.space();
+ this.print(node.body, node);
+}
+
+function IntersectionTypeAnnotation(node) {
+ this.printJoin(node.types, node, {
+ separator: andSeparator
+ });
+}
+
+function MixedTypeAnnotation() {
+ this.word("mixed");
+}
+
+function EmptyTypeAnnotation() {
+ this.word("empty");
+}
+
+function NullableTypeAnnotation(node) {
+ this.token("?");
+ this.print(node.typeAnnotation, node);
+}
+
+function NumberTypeAnnotation() {
+ this.word("number");
+}
+
+function StringTypeAnnotation() {
+ this.word("string");
+}
+
+function ThisTypeAnnotation() {
+ this.word("this");
+}
+
+function TupleTypeAnnotation(node) {
+ this.token("[");
+ this.printList(node.types, node);
+ this.token("]");
+}
+
+function TypeofTypeAnnotation(node) {
+ this.word("typeof");
+ this.space();
+ this.print(node.argument, node);
+}
+
+function TypeAlias(node) {
+ this.word("type");
+ this.space();
+ this.print(node.id, node);
+ this.print(node.typeParameters, node);
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.right, node);
+ this.semicolon();
+}
+
+function TypeAnnotation(node) {
+ this.token(":");
+ this.space();
+ if (node.optional) this.token("?");
+ this.print(node.typeAnnotation, node);
+}
+
+function TypeParameterInstantiation(node) {
+ this.token("<");
+ this.printList(node.params, node, {});
+ this.token(">");
+}
+
+function TypeParameter(node) {
+ this._variance(node);
+
+ this.word(node.name);
+
+ if (node.bound) {
+ this.print(node.bound, node);
+ }
+
+ if (node.default) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.default, node);
+ }
+}
+
+function OpaqueType(node) {
+ this.word("opaque");
+ this.space();
+ this.word("type");
+ this.space();
+ this.print(node.id, node);
+ this.print(node.typeParameters, node);
+
+ if (node.supertype) {
+ this.token(":");
+ this.space();
+ this.print(node.supertype, node);
+ }
+
+ if (node.impltype) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.impltype, node);
+ }
+
+ this.semicolon();
+}
+
+function ObjectTypeAnnotation(node) {
+ if (node.exact) {
+ this.token("{|");
+ } else {
+ this.token("{");
+ }
+
+ const props = [...node.properties, ...(node.callProperties || []), ...(node.indexers || []), ...(node.internalSlots || [])];
+
+ if (props.length) {
+ this.space();
+ this.printJoin(props, node, {
+ addNewlines(leading) {
+ if (leading && !props[0]) return 1;
+ },
+
+ indent: true,
+ statement: true,
+ iterator: () => {
+ if (props.length !== 1 || node.inexact) {
+ this.token(",");
+ this.space();
+ }
+ }
+ });
+ this.space();
+ }
+
+ if (node.inexact) {
+ this.indent();
+ this.token("...");
+
+ if (props.length) {
+ this.newline();
+ }
+
+ this.dedent();
+ }
+
+ if (node.exact) {
+ this.token("|}");
+ } else {
+ this.token("}");
+ }
+}
+
+function ObjectTypeInternalSlot(node) {
+ if (node.static) {
+ this.word("static");
+ this.space();
+ }
+
+ this.token("[");
+ this.token("[");
+ this.print(node.id, node);
+ this.token("]");
+ this.token("]");
+ if (node.optional) this.token("?");
+
+ if (!node.method) {
+ this.token(":");
+ this.space();
+ }
+
+ this.print(node.value, node);
+}
+
+function ObjectTypeCallProperty(node) {
+ if (node.static) {
+ this.word("static");
+ this.space();
+ }
+
+ this.print(node.value, node);
+}
+
+function ObjectTypeIndexer(node) {
+ if (node.static) {
+ this.word("static");
+ this.space();
+ }
+
+ this._variance(node);
+
+ this.token("[");
+
+ if (node.id) {
+ this.print(node.id, node);
+ this.token(":");
+ this.space();
+ }
+
+ this.print(node.key, node);
+ this.token("]");
+ this.token(":");
+ this.space();
+ this.print(node.value, node);
+}
+
+function ObjectTypeProperty(node) {
+ if (node.proto) {
+ this.word("proto");
+ this.space();
+ }
+
+ if (node.static) {
+ this.word("static");
+ this.space();
+ }
+
+ if (node.kind === "get" || node.kind === "set") {
+ this.word(node.kind);
+ this.space();
+ }
+
+ this._variance(node);
+
+ this.print(node.key, node);
+ if (node.optional) this.token("?");
+
+ if (!node.method) {
+ this.token(":");
+ this.space();
+ }
+
+ this.print(node.value, node);
+}
+
+function ObjectTypeSpreadProperty(node) {
+ this.token("...");
+ this.print(node.argument, node);
+}
+
+function QualifiedTypeIdentifier(node) {
+ this.print(node.qualification, node);
+ this.token(".");
+ this.print(node.id, node);
+}
+
+function SymbolTypeAnnotation() {
+ this.word("symbol");
+}
+
+function orSeparator() {
+ this.space();
+ this.token("|");
+ this.space();
+}
+
+function UnionTypeAnnotation(node) {
+ this.printJoin(node.types, node, {
+ separator: orSeparator
+ });
+}
+
+function TypeCastExpression(node) {
+ this.token("(");
+ this.print(node.expression, node);
+ this.print(node.typeAnnotation, node);
+ this.token(")");
+}
+
+function Variance(node) {
+ if (node.kind === "plus") {
+ this.token("+");
+ } else {
+ this.token("-");
+ }
+}
+
+function VoidTypeAnnotation() {
+ this.word("void");
+}
+
+function IndexedAccessType(node) {
+ this.print(node.objectType, node);
+ this.token("[");
+ this.print(node.indexType, node);
+ this.token("]");
+}
+
+function OptionalIndexedAccessType(node) {
+ this.print(node.objectType, node);
+
+ if (node.optional) {
+ this.token("?.");
+ }
+
+ this.token("[");
+ this.print(node.indexType, node);
+ this.token("]");
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/index.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/index.js
new file mode 100644
index 00000000000..8820db09efe
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/index.js
@@ -0,0 +1,148 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _templateLiterals = require("./template-literals");
+
+Object.keys(_templateLiterals).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _templateLiterals[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _templateLiterals[key];
+ }
+ });
+});
+
+var _expressions = require("./expressions");
+
+Object.keys(_expressions).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _expressions[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _expressions[key];
+ }
+ });
+});
+
+var _statements = require("./statements");
+
+Object.keys(_statements).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _statements[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _statements[key];
+ }
+ });
+});
+
+var _classes = require("./classes");
+
+Object.keys(_classes).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _classes[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _classes[key];
+ }
+ });
+});
+
+var _methods = require("./methods");
+
+Object.keys(_methods).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _methods[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _methods[key];
+ }
+ });
+});
+
+var _modules = require("./modules");
+
+Object.keys(_modules).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _modules[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _modules[key];
+ }
+ });
+});
+
+var _types = require("./types");
+
+Object.keys(_types).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _types[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _types[key];
+ }
+ });
+});
+
+var _flow = require("./flow");
+
+Object.keys(_flow).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _flow[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _flow[key];
+ }
+ });
+});
+
+var _base = require("./base");
+
+Object.keys(_base).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _base[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _base[key];
+ }
+ });
+});
+
+var _jsx = require("./jsx");
+
+Object.keys(_jsx).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _jsx[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _jsx[key];
+ }
+ });
+});
+
+var _typescript = require("./typescript");
+
+Object.keys(_typescript).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (key in exports && exports[key] === _typescript[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _typescript[key];
+ }
+ });
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/jsx.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/jsx.js
new file mode 100644
index 00000000000..48509139839
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/jsx.js
@@ -0,0 +1,145 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.JSXAttribute = JSXAttribute;
+exports.JSXIdentifier = JSXIdentifier;
+exports.JSXNamespacedName = JSXNamespacedName;
+exports.JSXMemberExpression = JSXMemberExpression;
+exports.JSXSpreadAttribute = JSXSpreadAttribute;
+exports.JSXExpressionContainer = JSXExpressionContainer;
+exports.JSXSpreadChild = JSXSpreadChild;
+exports.JSXText = JSXText;
+exports.JSXElement = JSXElement;
+exports.JSXOpeningElement = JSXOpeningElement;
+exports.JSXClosingElement = JSXClosingElement;
+exports.JSXEmptyExpression = JSXEmptyExpression;
+exports.JSXFragment = JSXFragment;
+exports.JSXOpeningFragment = JSXOpeningFragment;
+exports.JSXClosingFragment = JSXClosingFragment;
+
+function JSXAttribute(node) {
+ this.print(node.name, node);
+
+ if (node.value) {
+ this.token("=");
+ this.print(node.value, node);
+ }
+}
+
+function JSXIdentifier(node) {
+ this.word(node.name);
+}
+
+function JSXNamespacedName(node) {
+ this.print(node.namespace, node);
+ this.token(":");
+ this.print(node.name, node);
+}
+
+function JSXMemberExpression(node) {
+ this.print(node.object, node);
+ this.token(".");
+ this.print(node.property, node);
+}
+
+function JSXSpreadAttribute(node) {
+ this.token("{");
+ this.token("...");
+ this.print(node.argument, node);
+ this.token("}");
+}
+
+function JSXExpressionContainer(node) {
+ this.token("{");
+ this.print(node.expression, node);
+ this.token("}");
+}
+
+function JSXSpreadChild(node) {
+ this.token("{");
+ this.token("...");
+ this.print(node.expression, node);
+ this.token("}");
+}
+
+function JSXText(node) {
+ const raw = this.getPossibleRaw(node);
+
+ if (raw != null) {
+ this.token(raw);
+ } else {
+ this.token(node.value);
+ }
+}
+
+function JSXElement(node) {
+ const open = node.openingElement;
+ this.print(open, node);
+ if (open.selfClosing) return;
+ this.indent();
+
+ for (const child of node.children) {
+ this.print(child, node);
+ }
+
+ this.dedent();
+ this.print(node.closingElement, node);
+}
+
+function spaceSeparator() {
+ this.space();
+}
+
+function JSXOpeningElement(node) {
+ this.token("<");
+ this.print(node.name, node);
+ this.print(node.typeParameters, node);
+
+ if (node.attributes.length > 0) {
+ this.space();
+ this.printJoin(node.attributes, node, {
+ separator: spaceSeparator
+ });
+ }
+
+ if (node.selfClosing) {
+ this.space();
+ this.token("/>");
+ } else {
+ this.token(">");
+ }
+}
+
+function JSXClosingElement(node) {
+ this.token("</");
+ this.print(node.name, node);
+ this.token(">");
+}
+
+function JSXEmptyExpression(node) {
+ this.printInnerComments(node);
+}
+
+function JSXFragment(node) {
+ this.print(node.openingFragment, node);
+ this.indent();
+
+ for (const child of node.children) {
+ this.print(child, node);
+ }
+
+ this.dedent();
+ this.print(node.closingFragment, node);
+}
+
+function JSXOpeningFragment() {
+ this.token("<");
+ this.token(">");
+}
+
+function JSXClosingFragment() {
+ this.token("</");
+ this.token(">");
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/methods.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/methods.js
new file mode 100644
index 00000000000..417945bf84c
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/methods.js
@@ -0,0 +1,149 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports._params = _params;
+exports._parameters = _parameters;
+exports._param = _param;
+exports._methodHead = _methodHead;
+exports._predicate = _predicate;
+exports._functionHead = _functionHead;
+exports.FunctionDeclaration = exports.FunctionExpression = FunctionExpression;
+exports.ArrowFunctionExpression = ArrowFunctionExpression;
+
+var _t = require("@babel/types");
+
+const {
+ isIdentifier
+} = _t;
+
+function _params(node) {
+ this.print(node.typeParameters, node);
+ this.token("(");
+
+ this._parameters(node.params, node);
+
+ this.token(")");
+ this.print(node.returnType, node);
+}
+
+function _parameters(parameters, parent) {
+ for (let i = 0; i < parameters.length; i++) {
+ this._param(parameters[i], parent);
+
+ if (i < parameters.length - 1) {
+ this.token(",");
+ this.space();
+ }
+ }
+}
+
+function _param(parameter, parent) {
+ this.printJoin(parameter.decorators, parameter);
+ this.print(parameter, parent);
+ if (parameter.optional) this.token("?");
+ this.print(parameter.typeAnnotation, parameter);
+}
+
+function _methodHead(node) {
+ const kind = node.kind;
+ const key = node.key;
+
+ if (kind === "get" || kind === "set") {
+ this.word(kind);
+ this.space();
+ }
+
+ if (node.async) {
+ this._catchUp("start", key.loc);
+
+ this.word("async");
+ this.space();
+ }
+
+ if (kind === "method" || kind === "init") {
+ if (node.generator) {
+ this.token("*");
+ }
+ }
+
+ if (node.computed) {
+ this.token("[");
+ this.print(key, node);
+ this.token("]");
+ } else {
+ this.print(key, node);
+ }
+
+ if (node.optional) {
+ this.token("?");
+ }
+
+ this._params(node);
+}
+
+function _predicate(node) {
+ if (node.predicate) {
+ if (!node.returnType) {
+ this.token(":");
+ }
+
+ this.space();
+ this.print(node.predicate, node);
+ }
+}
+
+function _functionHead(node) {
+ if (node.async) {
+ this.word("async");
+ this.space();
+ }
+
+ this.word("function");
+ if (node.generator) this.token("*");
+ this.space();
+
+ if (node.id) {
+ this.print(node.id, node);
+ }
+
+ this._params(node);
+
+ this._predicate(node);
+}
+
+function FunctionExpression(node) {
+ this._functionHead(node);
+
+ this.space();
+ this.print(node.body, node);
+}
+
+function ArrowFunctionExpression(node) {
+ if (node.async) {
+ this.word("async");
+ this.space();
+ }
+
+ const firstParam = node.params[0];
+
+ if (!this.format.retainLines && !this.format.auxiliaryCommentBefore && !this.format.auxiliaryCommentAfter && node.params.length === 1 && isIdentifier(firstParam) && !hasTypesOrComments(node, firstParam)) {
+ this.print(firstParam, node);
+ } else {
+ this._params(node);
+ }
+
+ this._predicate(node);
+
+ this.space();
+ this.token("=>");
+ this.space();
+ this.print(node.body, node);
+}
+
+function hasTypesOrComments(node, param) {
+ var _param$leadingComment, _param$trailingCommen;
+
+ return !!(node.typeParameters || node.returnType || node.predicate || param.typeAnnotation || param.optional || (_param$leadingComment = param.leadingComments) != null && _param$leadingComment.length || (_param$trailingCommen = param.trailingComments) != null && _param$trailingCommen.length);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/modules.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/modules.js
new file mode 100644
index 00000000000..3259ef11a64
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/modules.js
@@ -0,0 +1,234 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ImportSpecifier = ImportSpecifier;
+exports.ImportDefaultSpecifier = ImportDefaultSpecifier;
+exports.ExportDefaultSpecifier = ExportDefaultSpecifier;
+exports.ExportSpecifier = ExportSpecifier;
+exports.ExportNamespaceSpecifier = ExportNamespaceSpecifier;
+exports.ExportAllDeclaration = ExportAllDeclaration;
+exports.ExportNamedDeclaration = ExportNamedDeclaration;
+exports.ExportDefaultDeclaration = ExportDefaultDeclaration;
+exports.ImportDeclaration = ImportDeclaration;
+exports.ImportAttribute = ImportAttribute;
+exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;
+
+var _t = require("@babel/types");
+
+const {
+ isClassDeclaration,
+ isExportDefaultSpecifier,
+ isExportNamespaceSpecifier,
+ isImportDefaultSpecifier,
+ isImportNamespaceSpecifier,
+ isStatement
+} = _t;
+
+function ImportSpecifier(node) {
+ if (node.importKind === "type" || node.importKind === "typeof") {
+ this.word(node.importKind);
+ this.space();
+ }
+
+ this.print(node.imported, node);
+
+ if (node.local && node.local.name !== node.imported.name) {
+ this.space();
+ this.word("as");
+ this.space();
+ this.print(node.local, node);
+ }
+}
+
+function ImportDefaultSpecifier(node) {
+ this.print(node.local, node);
+}
+
+function ExportDefaultSpecifier(node) {
+ this.print(node.exported, node);
+}
+
+function ExportSpecifier(node) {
+ this.print(node.local, node);
+
+ if (node.exported && node.local.name !== node.exported.name) {
+ this.space();
+ this.word("as");
+ this.space();
+ this.print(node.exported, node);
+ }
+}
+
+function ExportNamespaceSpecifier(node) {
+ this.token("*");
+ this.space();
+ this.word("as");
+ this.space();
+ this.print(node.exported, node);
+}
+
+function ExportAllDeclaration(node) {
+ this.word("export");
+ this.space();
+
+ if (node.exportKind === "type") {
+ this.word("type");
+ this.space();
+ }
+
+ this.token("*");
+ this.space();
+ this.word("from");
+ this.space();
+ this.print(node.source, node);
+ this.printAssertions(node);
+ this.semicolon();
+}
+
+function ExportNamedDeclaration(node) {
+ if (this.format.decoratorsBeforeExport && isClassDeclaration(node.declaration)) {
+ this.printJoin(node.declaration.decorators, node);
+ }
+
+ this.word("export");
+ this.space();
+ ExportDeclaration.apply(this, arguments);
+}
+
+function ExportDefaultDeclaration(node) {
+ if (this.format.decoratorsBeforeExport && isClassDeclaration(node.declaration)) {
+ this.printJoin(node.declaration.decorators, node);
+ }
+
+ this.word("export");
+ this.space();
+ this.word("default");
+ this.space();
+ ExportDeclaration.apply(this, arguments);
+}
+
+function ExportDeclaration(node) {
+ if (node.declaration) {
+ const declar = node.declaration;
+ this.print(declar, node);
+ if (!isStatement(declar)) this.semicolon();
+ } else {
+ if (node.exportKind === "type") {
+ this.word("type");
+ this.space();
+ }
+
+ const specifiers = node.specifiers.slice(0);
+ let hasSpecial = false;
+
+ for (;;) {
+ const first = specifiers[0];
+
+ if (isExportDefaultSpecifier(first) || isExportNamespaceSpecifier(first)) {
+ hasSpecial = true;
+ this.print(specifiers.shift(), node);
+
+ if (specifiers.length) {
+ this.token(",");
+ this.space();
+ }
+ } else {
+ break;
+ }
+ }
+
+ if (specifiers.length || !specifiers.length && !hasSpecial) {
+ this.token("{");
+
+ if (specifiers.length) {
+ this.space();
+ this.printList(specifiers, node);
+ this.space();
+ }
+
+ this.token("}");
+ }
+
+ if (node.source) {
+ this.space();
+ this.word("from");
+ this.space();
+ this.print(node.source, node);
+ this.printAssertions(node);
+ }
+
+ this.semicolon();
+ }
+}
+
+function ImportDeclaration(node) {
+ this.word("import");
+ this.space();
+
+ if (node.importKind === "type" || node.importKind === "typeof") {
+ this.word(node.importKind);
+ this.space();
+ }
+
+ const specifiers = node.specifiers.slice(0);
+
+ if (specifiers != null && specifiers.length) {
+ for (;;) {
+ const first = specifiers[0];
+
+ if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) {
+ this.print(specifiers.shift(), node);
+
+ if (specifiers.length) {
+ this.token(",");
+ this.space();
+ }
+ } else {
+ break;
+ }
+ }
+
+ if (specifiers.length) {
+ this.token("{");
+ this.space();
+ this.printList(specifiers, node);
+ this.space();
+ this.token("}");
+ }
+
+ this.space();
+ this.word("from");
+ this.space();
+ }
+
+ this.print(node.source, node);
+ this.printAssertions(node);
+ {
+ var _node$attributes;
+
+ if ((_node$attributes = node.attributes) != null && _node$attributes.length) {
+ this.space();
+ this.word("with");
+ this.space();
+ this.printList(node.attributes, node);
+ }
+ }
+ this.semicolon();
+}
+
+function ImportAttribute(node) {
+ this.print(node.key);
+ this.token(":");
+ this.space();
+ this.print(node.value);
+}
+
+function ImportNamespaceSpecifier(node) {
+ this.token("*");
+ this.space();
+ this.word("as");
+ this.space();
+ this.print(node.local, node);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/statements.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/statements.js
new file mode 100644
index 00000000000..528013b90de
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/statements.js
@@ -0,0 +1,327 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.WithStatement = WithStatement;
+exports.IfStatement = IfStatement;
+exports.ForStatement = ForStatement;
+exports.WhileStatement = WhileStatement;
+exports.DoWhileStatement = DoWhileStatement;
+exports.LabeledStatement = LabeledStatement;
+exports.TryStatement = TryStatement;
+exports.CatchClause = CatchClause;
+exports.SwitchStatement = SwitchStatement;
+exports.SwitchCase = SwitchCase;
+exports.DebuggerStatement = DebuggerStatement;
+exports.VariableDeclaration = VariableDeclaration;
+exports.VariableDeclarator = VariableDeclarator;
+exports.ThrowStatement = exports.BreakStatement = exports.ReturnStatement = exports.ContinueStatement = exports.ForOfStatement = exports.ForInStatement = void 0;
+
+var _t = require("@babel/types");
+
+const {
+ isFor,
+ isForStatement,
+ isIfStatement,
+ isStatement
+} = _t;
+
+function WithStatement(node) {
+ this.word("with");
+ this.space();
+ this.token("(");
+ this.print(node.object, node);
+ this.token(")");
+ this.printBlock(node);
+}
+
+function IfStatement(node) {
+ this.word("if");
+ this.space();
+ this.token("(");
+ this.print(node.test, node);
+ this.token(")");
+ this.space();
+ const needsBlock = node.alternate && isIfStatement(getLastStatement(node.consequent));
+
+ if (needsBlock) {
+ this.token("{");
+ this.newline();
+ this.indent();
+ }
+
+ this.printAndIndentOnComments(node.consequent, node);
+
+ if (needsBlock) {
+ this.dedent();
+ this.newline();
+ this.token("}");
+ }
+
+ if (node.alternate) {
+ if (this.endsWith(125)) this.space();
+ this.word("else");
+ this.space();
+ this.printAndIndentOnComments(node.alternate, node);
+ }
+}
+
+function getLastStatement(statement) {
+ if (!isStatement(statement.body)) return statement;
+ return getLastStatement(statement.body);
+}
+
+function ForStatement(node) {
+ this.word("for");
+ this.space();
+ this.token("(");
+ this.inForStatementInitCounter++;
+ this.print(node.init, node);
+ this.inForStatementInitCounter--;
+ this.token(";");
+
+ if (node.test) {
+ this.space();
+ this.print(node.test, node);
+ }
+
+ this.token(";");
+
+ if (node.update) {
+ this.space();
+ this.print(node.update, node);
+ }
+
+ this.token(")");
+ this.printBlock(node);
+}
+
+function WhileStatement(node) {
+ this.word("while");
+ this.space();
+ this.token("(");
+ this.print(node.test, node);
+ this.token(")");
+ this.printBlock(node);
+}
+
+const buildForXStatement = function (op) {
+ return function (node) {
+ this.word("for");
+ this.space();
+
+ if (op === "of" && node.await) {
+ this.word("await");
+ this.space();
+ }
+
+ this.token("(");
+ this.print(node.left, node);
+ this.space();
+ this.word(op);
+ this.space();
+ this.print(node.right, node);
+ this.token(")");
+ this.printBlock(node);
+ };
+};
+
+const ForInStatement = buildForXStatement("in");
+exports.ForInStatement = ForInStatement;
+const ForOfStatement = buildForXStatement("of");
+exports.ForOfStatement = ForOfStatement;
+
+function DoWhileStatement(node) {
+ this.word("do");
+ this.space();
+ this.print(node.body, node);
+ this.space();
+ this.word("while");
+ this.space();
+ this.token("(");
+ this.print(node.test, node);
+ this.token(")");
+ this.semicolon();
+}
+
+function buildLabelStatement(prefix, key = "label") {
+ return function (node) {
+ this.word(prefix);
+ const label = node[key];
+
+ if (label) {
+ this.space();
+ const isLabel = key == "label";
+ const terminatorState = this.startTerminatorless(isLabel);
+ this.print(label, node);
+ this.endTerminatorless(terminatorState);
+ }
+
+ this.semicolon();
+ };
+}
+
+const ContinueStatement = buildLabelStatement("continue");
+exports.ContinueStatement = ContinueStatement;
+const ReturnStatement = buildLabelStatement("return", "argument");
+exports.ReturnStatement = ReturnStatement;
+const BreakStatement = buildLabelStatement("break");
+exports.BreakStatement = BreakStatement;
+const ThrowStatement = buildLabelStatement("throw", "argument");
+exports.ThrowStatement = ThrowStatement;
+
+function LabeledStatement(node) {
+ this.print(node.label, node);
+ this.token(":");
+ this.space();
+ this.print(node.body, node);
+}
+
+function TryStatement(node) {
+ this.word("try");
+ this.space();
+ this.print(node.block, node);
+ this.space();
+
+ if (node.handlers) {
+ this.print(node.handlers[0], node);
+ } else {
+ this.print(node.handler, node);
+ }
+
+ if (node.finalizer) {
+ this.space();
+ this.word("finally");
+ this.space();
+ this.print(node.finalizer, node);
+ }
+}
+
+function CatchClause(node) {
+ this.word("catch");
+ this.space();
+
+ if (node.param) {
+ this.token("(");
+ this.print(node.param, node);
+ this.print(node.param.typeAnnotation, node);
+ this.token(")");
+ this.space();
+ }
+
+ this.print(node.body, node);
+}
+
+function SwitchStatement(node) {
+ this.word("switch");
+ this.space();
+ this.token("(");
+ this.print(node.discriminant, node);
+ this.token(")");
+ this.space();
+ this.token("{");
+ this.printSequence(node.cases, node, {
+ indent: true,
+
+ addNewlines(leading, cas) {
+ if (!leading && node.cases[node.cases.length - 1] === cas) return -1;
+ }
+
+ });
+ this.token("}");
+}
+
+function SwitchCase(node) {
+ if (node.test) {
+ this.word("case");
+ this.space();
+ this.print(node.test, node);
+ this.token(":");
+ } else {
+ this.word("default");
+ this.token(":");
+ }
+
+ if (node.consequent.length) {
+ this.newline();
+ this.printSequence(node.consequent, node, {
+ indent: true
+ });
+ }
+}
+
+function DebuggerStatement() {
+ this.word("debugger");
+ this.semicolon();
+}
+
+function variableDeclarationIndent() {
+ this.token(",");
+ this.newline();
+
+ if (this.endsWith(10)) {
+ for (let i = 0; i < 4; i++) this.space(true);
+ }
+}
+
+function constDeclarationIndent() {
+ this.token(",");
+ this.newline();
+
+ if (this.endsWith(10)) {
+ for (let i = 0; i < 6; i++) this.space(true);
+ }
+}
+
+function VariableDeclaration(node, parent) {
+ if (node.declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ this.word(node.kind);
+ this.space();
+ let hasInits = false;
+
+ if (!isFor(parent)) {
+ for (const declar of node.declarations) {
+ if (declar.init) {
+ hasInits = true;
+ }
+ }
+ }
+
+ let separator;
+
+ if (hasInits) {
+ separator = node.kind === "const" ? constDeclarationIndent : variableDeclarationIndent;
+ }
+
+ this.printList(node.declarations, node, {
+ separator
+ });
+
+ if (isFor(parent)) {
+ if (isForStatement(parent)) {
+ if (parent.init === node) return;
+ } else {
+ if (parent.left === node) return;
+ }
+ }
+
+ this.semicolon();
+}
+
+function VariableDeclarator(node) {
+ this.print(node.id, node);
+ if (node.definite) this.token("!");
+ this.print(node.id.typeAnnotation, node);
+
+ if (node.init) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.init, node);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/template-literals.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/template-literals.js
new file mode 100644
index 00000000000..054330362d6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/template-literals.js
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.TaggedTemplateExpression = TaggedTemplateExpression;
+exports.TemplateElement = TemplateElement;
+exports.TemplateLiteral = TemplateLiteral;
+
+function TaggedTemplateExpression(node) {
+ this.print(node.tag, node);
+ this.print(node.typeParameters, node);
+ this.print(node.quasi, node);
+}
+
+function TemplateElement(node, parent) {
+ const isFirst = parent.quasis[0] === node;
+ const isLast = parent.quasis[parent.quasis.length - 1] === node;
+ const value = (isFirst ? "`" : "}") + node.value.raw + (isLast ? "`" : "${");
+ this.token(value);
+}
+
+function TemplateLiteral(node) {
+ const quasis = node.quasis;
+
+ for (let i = 0; i < quasis.length; i++) {
+ this.print(quasis[i], node);
+
+ if (i + 1 < quasis.length) {
+ this.print(node.expressions[i], node);
+ }
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/types.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/types.js
new file mode 100644
index 00000000000..ce8de5f1e2b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/types.js
@@ -0,0 +1,279 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Identifier = Identifier;
+exports.ArgumentPlaceholder = ArgumentPlaceholder;
+exports.SpreadElement = exports.RestElement = RestElement;
+exports.ObjectPattern = exports.ObjectExpression = ObjectExpression;
+exports.ObjectMethod = ObjectMethod;
+exports.ObjectProperty = ObjectProperty;
+exports.ArrayPattern = exports.ArrayExpression = ArrayExpression;
+exports.RecordExpression = RecordExpression;
+exports.TupleExpression = TupleExpression;
+exports.RegExpLiteral = RegExpLiteral;
+exports.BooleanLiteral = BooleanLiteral;
+exports.NullLiteral = NullLiteral;
+exports.NumericLiteral = NumericLiteral;
+exports.StringLiteral = StringLiteral;
+exports.BigIntLiteral = BigIntLiteral;
+exports.DecimalLiteral = DecimalLiteral;
+exports.TopicReference = TopicReference;
+exports.PipelineTopicExpression = PipelineTopicExpression;
+exports.PipelineBareFunction = PipelineBareFunction;
+exports.PipelinePrimaryTopicReference = PipelinePrimaryTopicReference;
+
+var _t = require("@babel/types");
+
+var _jsesc = require("jsesc");
+
+const {
+ isAssignmentPattern,
+ isIdentifier
+} = _t;
+
+function Identifier(node) {
+ this.exactSource(node.loc, () => {
+ this.word(node.name);
+ });
+}
+
+function ArgumentPlaceholder() {
+ this.token("?");
+}
+
+function RestElement(node) {
+ this.token("...");
+ this.print(node.argument, node);
+}
+
+function ObjectExpression(node) {
+ const props = node.properties;
+ this.token("{");
+ this.printInnerComments(node);
+
+ if (props.length) {
+ this.space();
+ this.printList(props, node, {
+ indent: true,
+ statement: true
+ });
+ this.space();
+ }
+
+ this.token("}");
+}
+
+function ObjectMethod(node) {
+ this.printJoin(node.decorators, node);
+
+ this._methodHead(node);
+
+ this.space();
+ this.print(node.body, node);
+}
+
+function ObjectProperty(node) {
+ this.printJoin(node.decorators, node);
+
+ if (node.computed) {
+ this.token("[");
+ this.print(node.key, node);
+ this.token("]");
+ } else {
+ if (isAssignmentPattern(node.value) && isIdentifier(node.key) && node.key.name === node.value.left.name) {
+ this.print(node.value, node);
+ return;
+ }
+
+ this.print(node.key, node);
+
+ if (node.shorthand && isIdentifier(node.key) && isIdentifier(node.value) && node.key.name === node.value.name) {
+ return;
+ }
+ }
+
+ this.token(":");
+ this.space();
+ this.print(node.value, node);
+}
+
+function ArrayExpression(node) {
+ const elems = node.elements;
+ const len = elems.length;
+ this.token("[");
+ this.printInnerComments(node);
+
+ for (let i = 0; i < elems.length; i++) {
+ const elem = elems[i];
+
+ if (elem) {
+ if (i > 0) this.space();
+ this.print(elem, node);
+ if (i < len - 1) this.token(",");
+ } else {
+ this.token(",");
+ }
+ }
+
+ this.token("]");
+}
+
+function RecordExpression(node) {
+ const props = node.properties;
+ let startToken;
+ let endToken;
+
+ if (this.format.recordAndTupleSyntaxType === "bar") {
+ startToken = "{|";
+ endToken = "|}";
+ } else if (this.format.recordAndTupleSyntaxType === "hash") {
+ startToken = "#{";
+ endToken = "}";
+ } else {
+ throw new Error(`The "recordAndTupleSyntaxType" generator option must be "bar" or "hash" (${JSON.stringify(this.format.recordAndTupleSyntaxType)} received).`);
+ }
+
+ this.token(startToken);
+ this.printInnerComments(node);
+
+ if (props.length) {
+ this.space();
+ this.printList(props, node, {
+ indent: true,
+ statement: true
+ });
+ this.space();
+ }
+
+ this.token(endToken);
+}
+
+function TupleExpression(node) {
+ const elems = node.elements;
+ const len = elems.length;
+ let startToken;
+ let endToken;
+
+ if (this.format.recordAndTupleSyntaxType === "bar") {
+ startToken = "[|";
+ endToken = "|]";
+ } else if (this.format.recordAndTupleSyntaxType === "hash") {
+ startToken = "#[";
+ endToken = "]";
+ } else {
+ throw new Error(`${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`);
+ }
+
+ this.token(startToken);
+ this.printInnerComments(node);
+
+ for (let i = 0; i < elems.length; i++) {
+ const elem = elems[i];
+
+ if (elem) {
+ if (i > 0) this.space();
+ this.print(elem, node);
+ if (i < len - 1) this.token(",");
+ }
+ }
+
+ this.token(endToken);
+}
+
+function RegExpLiteral(node) {
+ this.word(`/${node.pattern}/${node.flags}`);
+}
+
+function BooleanLiteral(node) {
+ this.word(node.value ? "true" : "false");
+}
+
+function NullLiteral() {
+ this.word("null");
+}
+
+function NumericLiteral(node) {
+ const raw = this.getPossibleRaw(node);
+ const opts = this.format.jsescOption;
+ const value = node.value + "";
+
+ if (opts.numbers) {
+ this.number(_jsesc(node.value, opts));
+ } else if (raw == null) {
+ this.number(value);
+ } else if (this.format.minified) {
+ this.number(raw.length < value.length ? raw : value);
+ } else {
+ this.number(raw);
+ }
+}
+
+function StringLiteral(node) {
+ const raw = this.getPossibleRaw(node);
+
+ if (!this.format.minified && raw != null) {
+ this.token(raw);
+ return;
+ }
+
+ const val = _jsesc(node.value, Object.assign(this.format.jsescOption, this.format.jsonCompatibleStrings && {
+ json: true
+ }));
+
+ return this.token(val);
+}
+
+function BigIntLiteral(node) {
+ const raw = this.getPossibleRaw(node);
+
+ if (!this.format.minified && raw != null) {
+ this.word(raw);
+ return;
+ }
+
+ this.word(node.value + "n");
+}
+
+function DecimalLiteral(node) {
+ const raw = this.getPossibleRaw(node);
+
+ if (!this.format.minified && raw != null) {
+ this.word(raw);
+ return;
+ }
+
+ this.word(node.value + "m");
+}
+
+function TopicReference() {
+ const {
+ topicToken
+ } = this.format;
+
+ switch (topicToken) {
+ case "#":
+ this.token("#");
+ break;
+
+ default:
+ {
+ const givenTopicTokenJSON = JSON.stringify(topicToken);
+ const message = `The "topicToken" generator option must be "#" (${givenTopicTokenJSON} received instead).`;
+ throw new Error(message);
+ }
+ }
+}
+
+function PipelineTopicExpression(node) {
+ this.print(node.expression, node);
+}
+
+function PipelineBareFunction(node) {
+ this.print(node.callee, node);
+}
+
+function PipelinePrimaryTopicReference() {
+ this.token("#");
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/generators/typescript.js b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/typescript.js
new file mode 100644
index 00000000000..380e40b57e3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/generators/typescript.js
@@ -0,0 +1,806 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.TSTypeAnnotation = TSTypeAnnotation;
+exports.TSTypeParameterDeclaration = exports.TSTypeParameterInstantiation = TSTypeParameterInstantiation;
+exports.TSTypeParameter = TSTypeParameter;
+exports.TSParameterProperty = TSParameterProperty;
+exports.TSDeclareFunction = TSDeclareFunction;
+exports.TSDeclareMethod = TSDeclareMethod;
+exports.TSQualifiedName = TSQualifiedName;
+exports.TSCallSignatureDeclaration = TSCallSignatureDeclaration;
+exports.TSConstructSignatureDeclaration = TSConstructSignatureDeclaration;
+exports.TSPropertySignature = TSPropertySignature;
+exports.tsPrintPropertyOrMethodName = tsPrintPropertyOrMethodName;
+exports.TSMethodSignature = TSMethodSignature;
+exports.TSIndexSignature = TSIndexSignature;
+exports.TSAnyKeyword = TSAnyKeyword;
+exports.TSBigIntKeyword = TSBigIntKeyword;
+exports.TSUnknownKeyword = TSUnknownKeyword;
+exports.TSNumberKeyword = TSNumberKeyword;
+exports.TSObjectKeyword = TSObjectKeyword;
+exports.TSBooleanKeyword = TSBooleanKeyword;
+exports.TSStringKeyword = TSStringKeyword;
+exports.TSSymbolKeyword = TSSymbolKeyword;
+exports.TSVoidKeyword = TSVoidKeyword;
+exports.TSUndefinedKeyword = TSUndefinedKeyword;
+exports.TSNullKeyword = TSNullKeyword;
+exports.TSNeverKeyword = TSNeverKeyword;
+exports.TSIntrinsicKeyword = TSIntrinsicKeyword;
+exports.TSThisType = TSThisType;
+exports.TSFunctionType = TSFunctionType;
+exports.TSConstructorType = TSConstructorType;
+exports.tsPrintFunctionOrConstructorType = tsPrintFunctionOrConstructorType;
+exports.TSTypeReference = TSTypeReference;
+exports.TSTypePredicate = TSTypePredicate;
+exports.TSTypeQuery = TSTypeQuery;
+exports.TSTypeLiteral = TSTypeLiteral;
+exports.tsPrintTypeLiteralOrInterfaceBody = tsPrintTypeLiteralOrInterfaceBody;
+exports.tsPrintBraced = tsPrintBraced;
+exports.TSArrayType = TSArrayType;
+exports.TSTupleType = TSTupleType;
+exports.TSOptionalType = TSOptionalType;
+exports.TSRestType = TSRestType;
+exports.TSNamedTupleMember = TSNamedTupleMember;
+exports.TSUnionType = TSUnionType;
+exports.TSIntersectionType = TSIntersectionType;
+exports.tsPrintUnionOrIntersectionType = tsPrintUnionOrIntersectionType;
+exports.TSConditionalType = TSConditionalType;
+exports.TSInferType = TSInferType;
+exports.TSParenthesizedType = TSParenthesizedType;
+exports.TSTypeOperator = TSTypeOperator;
+exports.TSIndexedAccessType = TSIndexedAccessType;
+exports.TSMappedType = TSMappedType;
+exports.TSLiteralType = TSLiteralType;
+exports.TSExpressionWithTypeArguments = TSExpressionWithTypeArguments;
+exports.TSInterfaceDeclaration = TSInterfaceDeclaration;
+exports.TSInterfaceBody = TSInterfaceBody;
+exports.TSTypeAliasDeclaration = TSTypeAliasDeclaration;
+exports.TSAsExpression = TSAsExpression;
+exports.TSTypeAssertion = TSTypeAssertion;
+exports.TSEnumDeclaration = TSEnumDeclaration;
+exports.TSEnumMember = TSEnumMember;
+exports.TSModuleDeclaration = TSModuleDeclaration;
+exports.TSModuleBlock = TSModuleBlock;
+exports.TSImportType = TSImportType;
+exports.TSImportEqualsDeclaration = TSImportEqualsDeclaration;
+exports.TSExternalModuleReference = TSExternalModuleReference;
+exports.TSNonNullExpression = TSNonNullExpression;
+exports.TSExportAssignment = TSExportAssignment;
+exports.TSNamespaceExportDeclaration = TSNamespaceExportDeclaration;
+exports.tsPrintSignatureDeclarationBase = tsPrintSignatureDeclarationBase;
+exports.tsPrintClassMemberModifiers = tsPrintClassMemberModifiers;
+
+function TSTypeAnnotation(node) {
+ this.token(":");
+ this.space();
+ if (node.optional) this.token("?");
+ this.print(node.typeAnnotation, node);
+}
+
+function TSTypeParameterInstantiation(node) {
+ this.token("<");
+ this.printList(node.params, node, {});
+ this.token(">");
+}
+
+function TSTypeParameter(node) {
+ this.word(node.name);
+
+ if (node.constraint) {
+ this.space();
+ this.word("extends");
+ this.space();
+ this.print(node.constraint, node);
+ }
+
+ if (node.default) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.default, node);
+ }
+}
+
+function TSParameterProperty(node) {
+ if (node.accessibility) {
+ this.word(node.accessibility);
+ this.space();
+ }
+
+ if (node.readonly) {
+ this.word("readonly");
+ this.space();
+ }
+
+ this._param(node.parameter);
+}
+
+function TSDeclareFunction(node) {
+ if (node.declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ this._functionHead(node);
+
+ this.token(";");
+}
+
+function TSDeclareMethod(node) {
+ this._classMethodHead(node);
+
+ this.token(";");
+}
+
+function TSQualifiedName(node) {
+ this.print(node.left, node);
+ this.token(".");
+ this.print(node.right, node);
+}
+
+function TSCallSignatureDeclaration(node) {
+ this.tsPrintSignatureDeclarationBase(node);
+ this.token(";");
+}
+
+function TSConstructSignatureDeclaration(node) {
+ this.word("new");
+ this.space();
+ this.tsPrintSignatureDeclarationBase(node);
+ this.token(";");
+}
+
+function TSPropertySignature(node) {
+ const {
+ readonly,
+ initializer
+ } = node;
+
+ if (readonly) {
+ this.word("readonly");
+ this.space();
+ }
+
+ this.tsPrintPropertyOrMethodName(node);
+ this.print(node.typeAnnotation, node);
+
+ if (initializer) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(initializer, node);
+ }
+
+ this.token(";");
+}
+
+function tsPrintPropertyOrMethodName(node) {
+ if (node.computed) {
+ this.token("[");
+ }
+
+ this.print(node.key, node);
+
+ if (node.computed) {
+ this.token("]");
+ }
+
+ if (node.optional) {
+ this.token("?");
+ }
+}
+
+function TSMethodSignature(node) {
+ const {
+ kind
+ } = node;
+
+ if (kind === "set" || kind === "get") {
+ this.word(kind);
+ this.space();
+ }
+
+ this.tsPrintPropertyOrMethodName(node);
+ this.tsPrintSignatureDeclarationBase(node);
+ this.token(";");
+}
+
+function TSIndexSignature(node) {
+ const {
+ readonly,
+ static: isStatic
+ } = node;
+
+ if (isStatic) {
+ this.word("static");
+ this.space();
+ }
+
+ if (readonly) {
+ this.word("readonly");
+ this.space();
+ }
+
+ this.token("[");
+
+ this._parameters(node.parameters, node);
+
+ this.token("]");
+ this.print(node.typeAnnotation, node);
+ this.token(";");
+}
+
+function TSAnyKeyword() {
+ this.word("any");
+}
+
+function TSBigIntKeyword() {
+ this.word("bigint");
+}
+
+function TSUnknownKeyword() {
+ this.word("unknown");
+}
+
+function TSNumberKeyword() {
+ this.word("number");
+}
+
+function TSObjectKeyword() {
+ this.word("object");
+}
+
+function TSBooleanKeyword() {
+ this.word("boolean");
+}
+
+function TSStringKeyword() {
+ this.word("string");
+}
+
+function TSSymbolKeyword() {
+ this.word("symbol");
+}
+
+function TSVoidKeyword() {
+ this.word("void");
+}
+
+function TSUndefinedKeyword() {
+ this.word("undefined");
+}
+
+function TSNullKeyword() {
+ this.word("null");
+}
+
+function TSNeverKeyword() {
+ this.word("never");
+}
+
+function TSIntrinsicKeyword() {
+ this.word("intrinsic");
+}
+
+function TSThisType() {
+ this.word("this");
+}
+
+function TSFunctionType(node) {
+ this.tsPrintFunctionOrConstructorType(node);
+}
+
+function TSConstructorType(node) {
+ if (node.abstract) {
+ this.word("abstract");
+ this.space();
+ }
+
+ this.word("new");
+ this.space();
+ this.tsPrintFunctionOrConstructorType(node);
+}
+
+function tsPrintFunctionOrConstructorType(node) {
+ const {
+ typeParameters,
+ parameters
+ } = node;
+ this.print(typeParameters, node);
+ this.token("(");
+
+ this._parameters(parameters, node);
+
+ this.token(")");
+ this.space();
+ this.token("=>");
+ this.space();
+ this.print(node.typeAnnotation.typeAnnotation, node);
+}
+
+function TSTypeReference(node) {
+ this.print(node.typeName, node);
+ this.print(node.typeParameters, node);
+}
+
+function TSTypePredicate(node) {
+ if (node.asserts) {
+ this.word("asserts");
+ this.space();
+ }
+
+ this.print(node.parameterName);
+
+ if (node.typeAnnotation) {
+ this.space();
+ this.word("is");
+ this.space();
+ this.print(node.typeAnnotation.typeAnnotation);
+ }
+}
+
+function TSTypeQuery(node) {
+ this.word("typeof");
+ this.space();
+ this.print(node.exprName);
+}
+
+function TSTypeLiteral(node) {
+ this.tsPrintTypeLiteralOrInterfaceBody(node.members, node);
+}
+
+function tsPrintTypeLiteralOrInterfaceBody(members, node) {
+ this.tsPrintBraced(members, node);
+}
+
+function tsPrintBraced(members, node) {
+ this.token("{");
+
+ if (members.length) {
+ this.indent();
+ this.newline();
+
+ for (const member of members) {
+ this.print(member, node);
+ this.newline();
+ }
+
+ this.dedent();
+ this.rightBrace();
+ } else {
+ this.token("}");
+ }
+}
+
+function TSArrayType(node) {
+ this.print(node.elementType, node);
+ this.token("[]");
+}
+
+function TSTupleType(node) {
+ this.token("[");
+ this.printList(node.elementTypes, node);
+ this.token("]");
+}
+
+function TSOptionalType(node) {
+ this.print(node.typeAnnotation, node);
+ this.token("?");
+}
+
+function TSRestType(node) {
+ this.token("...");
+ this.print(node.typeAnnotation, node);
+}
+
+function TSNamedTupleMember(node) {
+ this.print(node.label, node);
+ if (node.optional) this.token("?");
+ this.token(":");
+ this.space();
+ this.print(node.elementType, node);
+}
+
+function TSUnionType(node) {
+ this.tsPrintUnionOrIntersectionType(node, "|");
+}
+
+function TSIntersectionType(node) {
+ this.tsPrintUnionOrIntersectionType(node, "&");
+}
+
+function tsPrintUnionOrIntersectionType(node, sep) {
+ this.printJoin(node.types, node, {
+ separator() {
+ this.space();
+ this.token(sep);
+ this.space();
+ }
+
+ });
+}
+
+function TSConditionalType(node) {
+ this.print(node.checkType);
+ this.space();
+ this.word("extends");
+ this.space();
+ this.print(node.extendsType);
+ this.space();
+ this.token("?");
+ this.space();
+ this.print(node.trueType);
+ this.space();
+ this.token(":");
+ this.space();
+ this.print(node.falseType);
+}
+
+function TSInferType(node) {
+ this.token("infer");
+ this.space();
+ this.print(node.typeParameter);
+}
+
+function TSParenthesizedType(node) {
+ this.token("(");
+ this.print(node.typeAnnotation, node);
+ this.token(")");
+}
+
+function TSTypeOperator(node) {
+ this.word(node.operator);
+ this.space();
+ this.print(node.typeAnnotation, node);
+}
+
+function TSIndexedAccessType(node) {
+ this.print(node.objectType, node);
+ this.token("[");
+ this.print(node.indexType, node);
+ this.token("]");
+}
+
+function TSMappedType(node) {
+ const {
+ nameType,
+ optional,
+ readonly,
+ typeParameter
+ } = node;
+ this.token("{");
+ this.space();
+
+ if (readonly) {
+ tokenIfPlusMinus(this, readonly);
+ this.word("readonly");
+ this.space();
+ }
+
+ this.token("[");
+ this.word(typeParameter.name);
+ this.space();
+ this.word("in");
+ this.space();
+ this.print(typeParameter.constraint, typeParameter);
+
+ if (nameType) {
+ this.space();
+ this.word("as");
+ this.space();
+ this.print(nameType, node);
+ }
+
+ this.token("]");
+
+ if (optional) {
+ tokenIfPlusMinus(this, optional);
+ this.token("?");
+ }
+
+ this.token(":");
+ this.space();
+ this.print(node.typeAnnotation, node);
+ this.space();
+ this.token("}");
+}
+
+function tokenIfPlusMinus(self, tok) {
+ if (tok !== true) {
+ self.token(tok);
+ }
+}
+
+function TSLiteralType(node) {
+ this.print(node.literal, node);
+}
+
+function TSExpressionWithTypeArguments(node) {
+ this.print(node.expression, node);
+ this.print(node.typeParameters, node);
+}
+
+function TSInterfaceDeclaration(node) {
+ const {
+ declare,
+ id,
+ typeParameters,
+ extends: extendz,
+ body
+ } = node;
+
+ if (declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ this.word("interface");
+ this.space();
+ this.print(id, node);
+ this.print(typeParameters, node);
+
+ if (extendz != null && extendz.length) {
+ this.space();
+ this.word("extends");
+ this.space();
+ this.printList(extendz, node);
+ }
+
+ this.space();
+ this.print(body, node);
+}
+
+function TSInterfaceBody(node) {
+ this.tsPrintTypeLiteralOrInterfaceBody(node.body, node);
+}
+
+function TSTypeAliasDeclaration(node) {
+ const {
+ declare,
+ id,
+ typeParameters,
+ typeAnnotation
+ } = node;
+
+ if (declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ this.word("type");
+ this.space();
+ this.print(id, node);
+ this.print(typeParameters, node);
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(typeAnnotation, node);
+ this.token(";");
+}
+
+function TSAsExpression(node) {
+ const {
+ expression,
+ typeAnnotation
+ } = node;
+ this.print(expression, node);
+ this.space();
+ this.word("as");
+ this.space();
+ this.print(typeAnnotation, node);
+}
+
+function TSTypeAssertion(node) {
+ const {
+ typeAnnotation,
+ expression
+ } = node;
+ this.token("<");
+ this.print(typeAnnotation, node);
+ this.token(">");
+ this.space();
+ this.print(expression, node);
+}
+
+function TSEnumDeclaration(node) {
+ const {
+ declare,
+ const: isConst,
+ id,
+ members
+ } = node;
+
+ if (declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ if (isConst) {
+ this.word("const");
+ this.space();
+ }
+
+ this.word("enum");
+ this.space();
+ this.print(id, node);
+ this.space();
+ this.tsPrintBraced(members, node);
+}
+
+function TSEnumMember(node) {
+ const {
+ id,
+ initializer
+ } = node;
+ this.print(id, node);
+
+ if (initializer) {
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(initializer, node);
+ }
+
+ this.token(",");
+}
+
+function TSModuleDeclaration(node) {
+ const {
+ declare,
+ id
+ } = node;
+
+ if (declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ if (!node.global) {
+ this.word(id.type === "Identifier" ? "namespace" : "module");
+ this.space();
+ }
+
+ this.print(id, node);
+
+ if (!node.body) {
+ this.token(";");
+ return;
+ }
+
+ let body = node.body;
+
+ while (body.type === "TSModuleDeclaration") {
+ this.token(".");
+ this.print(body.id, body);
+ body = body.body;
+ }
+
+ this.space();
+ this.print(body, node);
+}
+
+function TSModuleBlock(node) {
+ this.tsPrintBraced(node.body, node);
+}
+
+function TSImportType(node) {
+ const {
+ argument,
+ qualifier,
+ typeParameters
+ } = node;
+ this.word("import");
+ this.token("(");
+ this.print(argument, node);
+ this.token(")");
+
+ if (qualifier) {
+ this.token(".");
+ this.print(qualifier, node);
+ }
+
+ if (typeParameters) {
+ this.print(typeParameters, node);
+ }
+}
+
+function TSImportEqualsDeclaration(node) {
+ const {
+ isExport,
+ id,
+ moduleReference
+ } = node;
+
+ if (isExport) {
+ this.word("export");
+ this.space();
+ }
+
+ this.word("import");
+ this.space();
+ this.print(id, node);
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(moduleReference, node);
+ this.token(";");
+}
+
+function TSExternalModuleReference(node) {
+ this.token("require(");
+ this.print(node.expression, node);
+ this.token(")");
+}
+
+function TSNonNullExpression(node) {
+ this.print(node.expression, node);
+ this.token("!");
+}
+
+function TSExportAssignment(node) {
+ this.word("export");
+ this.space();
+ this.token("=");
+ this.space();
+ this.print(node.expression, node);
+ this.token(";");
+}
+
+function TSNamespaceExportDeclaration(node) {
+ this.word("export");
+ this.space();
+ this.word("as");
+ this.space();
+ this.word("namespace");
+ this.space();
+ this.print(node.id, node);
+}
+
+function tsPrintSignatureDeclarationBase(node) {
+ const {
+ typeParameters,
+ parameters
+ } = node;
+ this.print(typeParameters, node);
+ this.token("(");
+
+ this._parameters(parameters, node);
+
+ this.token(")");
+ this.print(node.typeAnnotation, node);
+}
+
+function tsPrintClassMemberModifiers(node, isField) {
+ if (isField && node.declare) {
+ this.word("declare");
+ this.space();
+ }
+
+ if (node.accessibility) {
+ this.word(node.accessibility);
+ this.space();
+ }
+
+ if (node.static) {
+ this.word("static");
+ this.space();
+ }
+
+ if (node.override) {
+ this.word("override");
+ this.space();
+ }
+
+ if (node.abstract) {
+ this.word("abstract");
+ this.space();
+ }
+
+ if (isField && node.readonly) {
+ this.word("readonly");
+ this.space();
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/index.js b/chromium/third_party/node/node_modules/@babel/generator/lib/index.js
new file mode 100644
index 00000000000..0f4d1363d1c
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/index.js
@@ -0,0 +1,97 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = generate;
+exports.CodeGenerator = void 0;
+
+var _sourceMap = require("./source-map");
+
+var _printer = require("./printer");
+
+class Generator extends _printer.default {
+ constructor(ast, opts = {}, code) {
+ const format = normalizeOptions(code, opts);
+ const map = opts.sourceMaps ? new _sourceMap.default(opts, code) : null;
+ super(format, map);
+ this.ast = void 0;
+ this.ast = ast;
+ }
+
+ generate() {
+ return super.generate(this.ast);
+ }
+
+}
+
+function normalizeOptions(code, opts) {
+ const format = {
+ auxiliaryCommentBefore: opts.auxiliaryCommentBefore,
+ auxiliaryCommentAfter: opts.auxiliaryCommentAfter,
+ shouldPrintComment: opts.shouldPrintComment,
+ retainLines: opts.retainLines,
+ retainFunctionParens: opts.retainFunctionParens,
+ comments: opts.comments == null || opts.comments,
+ compact: opts.compact,
+ minified: opts.minified,
+ concise: opts.concise,
+ indent: {
+ adjustMultilineComment: true,
+ style: " ",
+ base: 0
+ },
+ decoratorsBeforeExport: !!opts.decoratorsBeforeExport,
+ jsescOption: Object.assign({
+ quotes: "double",
+ wrap: true,
+ minimal: false
+ }, opts.jsescOption),
+ recordAndTupleSyntaxType: opts.recordAndTupleSyntaxType,
+ topicToken: opts.topicToken
+ };
+ {
+ format.jsonCompatibleStrings = opts.jsonCompatibleStrings;
+ }
+
+ if (format.minified) {
+ format.compact = true;
+
+ format.shouldPrintComment = format.shouldPrintComment || (() => format.comments);
+ } else {
+ format.shouldPrintComment = format.shouldPrintComment || (value => format.comments || value.indexOf("@license") >= 0 || value.indexOf("@preserve") >= 0);
+ }
+
+ if (format.compact === "auto") {
+ format.compact = code.length > 500000;
+
+ if (format.compact) {
+ console.error("[BABEL] Note: The code generator has deoptimised the styling of " + `${opts.filename} as it exceeds the max of ${"500KB"}.`);
+ }
+ }
+
+ if (format.compact) {
+ format.indent.adjustMultilineComment = false;
+ }
+
+ return format;
+}
+
+class CodeGenerator {
+ constructor(ast, opts, code) {
+ this._generator = void 0;
+ this._generator = new Generator(ast, opts, code);
+ }
+
+ generate() {
+ return this._generator.generate();
+ }
+
+}
+
+exports.CodeGenerator = CodeGenerator;
+
+function generate(ast, opts, code) {
+ const gen = new Generator(ast, opts, code);
+ return gen.generate();
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/node/index.js b/chromium/third_party/node/node_modules/@babel/generator/lib/node/index.js
new file mode 100644
index 00000000000..892498e8662
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/node/index.js
@@ -0,0 +1,111 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.needsWhitespace = needsWhitespace;
+exports.needsWhitespaceBefore = needsWhitespaceBefore;
+exports.needsWhitespaceAfter = needsWhitespaceAfter;
+exports.needsParens = needsParens;
+
+var whitespace = require("./whitespace");
+
+var parens = require("./parentheses");
+
+var _t = require("@babel/types");
+
+const {
+ FLIPPED_ALIAS_KEYS,
+ isCallExpression,
+ isExpressionStatement,
+ isMemberExpression,
+ isNewExpression
+} = _t;
+
+function expandAliases(obj) {
+ const newObj = {};
+
+ function add(type, func) {
+ const fn = newObj[type];
+ newObj[type] = fn ? function (node, parent, stack) {
+ const result = fn(node, parent, stack);
+ return result == null ? func(node, parent, stack) : result;
+ } : func;
+ }
+
+ for (const type of Object.keys(obj)) {
+ const aliases = FLIPPED_ALIAS_KEYS[type];
+
+ if (aliases) {
+ for (const alias of aliases) {
+ add(alias, obj[type]);
+ }
+ } else {
+ add(type, obj[type]);
+ }
+ }
+
+ return newObj;
+}
+
+const expandedParens = expandAliases(parens);
+const expandedWhitespaceNodes = expandAliases(whitespace.nodes);
+const expandedWhitespaceList = expandAliases(whitespace.list);
+
+function find(obj, node, parent, printStack) {
+ const fn = obj[node.type];
+ return fn ? fn(node, parent, printStack) : null;
+}
+
+function isOrHasCallExpression(node) {
+ if (isCallExpression(node)) {
+ return true;
+ }
+
+ return isMemberExpression(node) && isOrHasCallExpression(node.object);
+}
+
+function needsWhitespace(node, parent, type) {
+ if (!node) return 0;
+
+ if (isExpressionStatement(node)) {
+ node = node.expression;
+ }
+
+ let linesInfo = find(expandedWhitespaceNodes, node, parent);
+
+ if (!linesInfo) {
+ const items = find(expandedWhitespaceList, node, parent);
+
+ if (items) {
+ for (let i = 0; i < items.length; i++) {
+ linesInfo = needsWhitespace(items[i], node, type);
+ if (linesInfo) break;
+ }
+ }
+ }
+
+ if (typeof linesInfo === "object" && linesInfo !== null) {
+ return linesInfo[type] || 0;
+ }
+
+ return 0;
+}
+
+function needsWhitespaceBefore(node, parent) {
+ return needsWhitespace(node, parent, "before");
+}
+
+function needsWhitespaceAfter(node, parent) {
+ return needsWhitespace(node, parent, "after");
+}
+
+function needsParens(node, parent, printStack) {
+ if (!parent) return false;
+
+ if (isNewExpression(parent) && parent.callee === node) {
+ if (isOrHasCallExpression(node)) return true;
+ }
+
+ return find(expandedParens, node, parent, printStack);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/node/parentheses.js b/chromium/third_party/node/node_modules/@babel/generator/lib/node/parentheses.js
new file mode 100644
index 00000000000..9a17130208d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/node/parentheses.js
@@ -0,0 +1,342 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.NullableTypeAnnotation = NullableTypeAnnotation;
+exports.FunctionTypeAnnotation = FunctionTypeAnnotation;
+exports.UpdateExpression = UpdateExpression;
+exports.ObjectExpression = ObjectExpression;
+exports.DoExpression = DoExpression;
+exports.Binary = Binary;
+exports.IntersectionTypeAnnotation = exports.UnionTypeAnnotation = UnionTypeAnnotation;
+exports.OptionalIndexedAccessType = OptionalIndexedAccessType;
+exports.TSAsExpression = TSAsExpression;
+exports.TSTypeAssertion = TSTypeAssertion;
+exports.TSIntersectionType = exports.TSUnionType = TSUnionType;
+exports.TSInferType = TSInferType;
+exports.BinaryExpression = BinaryExpression;
+exports.SequenceExpression = SequenceExpression;
+exports.AwaitExpression = exports.YieldExpression = YieldExpression;
+exports.ClassExpression = ClassExpression;
+exports.UnaryLike = UnaryLike;
+exports.FunctionExpression = FunctionExpression;
+exports.ArrowFunctionExpression = ArrowFunctionExpression;
+exports.ConditionalExpression = ConditionalExpression;
+exports.OptionalCallExpression = exports.OptionalMemberExpression = OptionalMemberExpression;
+exports.AssignmentExpression = AssignmentExpression;
+exports.LogicalExpression = LogicalExpression;
+exports.Identifier = Identifier;
+
+var _t = require("@babel/types");
+
+const {
+ isArrayTypeAnnotation,
+ isArrowFunctionExpression,
+ isAssignmentExpression,
+ isAwaitExpression,
+ isBinary,
+ isBinaryExpression,
+ isCallExpression,
+ isClassDeclaration,
+ isClassExpression,
+ isConditional,
+ isConditionalExpression,
+ isExportDeclaration,
+ isExportDefaultDeclaration,
+ isExpressionStatement,
+ isFor,
+ isForInStatement,
+ isForOfStatement,
+ isForStatement,
+ isIfStatement,
+ isIndexedAccessType,
+ isIntersectionTypeAnnotation,
+ isLogicalExpression,
+ isMemberExpression,
+ isNewExpression,
+ isNullableTypeAnnotation,
+ isObjectPattern,
+ isOptionalCallExpression,
+ isOptionalMemberExpression,
+ isReturnStatement,
+ isSequenceExpression,
+ isSwitchStatement,
+ isTSArrayType,
+ isTSAsExpression,
+ isTSIntersectionType,
+ isTSNonNullExpression,
+ isTSOptionalType,
+ isTSRestType,
+ isTSTypeAssertion,
+ isTSUnionType,
+ isTaggedTemplateExpression,
+ isThrowStatement,
+ isTypeAnnotation,
+ isUnaryLike,
+ isUnionTypeAnnotation,
+ isVariableDeclarator,
+ isWhileStatement,
+ isYieldExpression
+} = _t;
+const PRECEDENCE = {
+ "||": 0,
+ "??": 0,
+ "&&": 1,
+ "|": 2,
+ "^": 3,
+ "&": 4,
+ "==": 5,
+ "===": 5,
+ "!=": 5,
+ "!==": 5,
+ "<": 6,
+ ">": 6,
+ "<=": 6,
+ ">=": 6,
+ in: 6,
+ instanceof: 6,
+ ">>": 7,
+ "<<": 7,
+ ">>>": 7,
+ "+": 8,
+ "-": 8,
+ "*": 9,
+ "/": 9,
+ "%": 9,
+ "**": 10
+};
+
+const isClassExtendsClause = (node, parent) => (isClassDeclaration(parent) || isClassExpression(parent)) && parent.superClass === node;
+
+const hasPostfixPart = (node, parent) => (isMemberExpression(parent) || isOptionalMemberExpression(parent)) && parent.object === node || (isCallExpression(parent) || isOptionalCallExpression(parent) || isNewExpression(parent)) && parent.callee === node || isTaggedTemplateExpression(parent) && parent.tag === node || isTSNonNullExpression(parent);
+
+function NullableTypeAnnotation(node, parent) {
+ return isArrayTypeAnnotation(parent);
+}
+
+function FunctionTypeAnnotation(node, parent, printStack) {
+ return isUnionTypeAnnotation(parent) || isIntersectionTypeAnnotation(parent) || isArrayTypeAnnotation(parent) || isTypeAnnotation(parent) && isArrowFunctionExpression(printStack[printStack.length - 3]);
+}
+
+function UpdateExpression(node, parent) {
+ return hasPostfixPart(node, parent) || isClassExtendsClause(node, parent);
+}
+
+function ObjectExpression(node, parent, printStack) {
+ return isFirstInContext(printStack, {
+ expressionStatement: true,
+ arrowBody: true
+ });
+}
+
+function DoExpression(node, parent, printStack) {
+ return !node.async && isFirstInContext(printStack, {
+ expressionStatement: true
+ });
+}
+
+function Binary(node, parent) {
+ if (node.operator === "**" && isBinaryExpression(parent, {
+ operator: "**"
+ })) {
+ return parent.left === node;
+ }
+
+ if (isClassExtendsClause(node, parent)) {
+ return true;
+ }
+
+ if (hasPostfixPart(node, parent) || isUnaryLike(parent) || isAwaitExpression(parent)) {
+ return true;
+ }
+
+ if (isBinary(parent)) {
+ const parentOp = parent.operator;
+ const parentPos = PRECEDENCE[parentOp];
+ const nodeOp = node.operator;
+ const nodePos = PRECEDENCE[nodeOp];
+
+ if (parentPos === nodePos && parent.right === node && !isLogicalExpression(parent) || parentPos > nodePos) {
+ return true;
+ }
+ }
+}
+
+function UnionTypeAnnotation(node, parent) {
+ return isArrayTypeAnnotation(parent) || isNullableTypeAnnotation(parent) || isIntersectionTypeAnnotation(parent) || isUnionTypeAnnotation(parent);
+}
+
+function OptionalIndexedAccessType(node, parent) {
+ return isIndexedAccessType(parent, {
+ objectType: node
+ });
+}
+
+function TSAsExpression() {
+ return true;
+}
+
+function TSTypeAssertion() {
+ return true;
+}
+
+function TSUnionType(node, parent) {
+ return isTSArrayType(parent) || isTSOptionalType(parent) || isTSIntersectionType(parent) || isTSUnionType(parent) || isTSRestType(parent);
+}
+
+function TSInferType(node, parent) {
+ return isTSArrayType(parent) || isTSOptionalType(parent);
+}
+
+function BinaryExpression(node, parent) {
+ return node.operator === "in" && (isVariableDeclarator(parent) || isFor(parent));
+}
+
+function SequenceExpression(node, parent) {
+ if (isForStatement(parent) || isThrowStatement(parent) || isReturnStatement(parent) || isIfStatement(parent) && parent.test === node || isWhileStatement(parent) && parent.test === node || isForInStatement(parent) && parent.right === node || isSwitchStatement(parent) && parent.discriminant === node || isExpressionStatement(parent) && parent.expression === node) {
+ return false;
+ }
+
+ return true;
+}
+
+function YieldExpression(node, parent) {
+ return isBinary(parent) || isUnaryLike(parent) || hasPostfixPart(node, parent) || isAwaitExpression(parent) && isYieldExpression(node) || isConditionalExpression(parent) && node === parent.test || isClassExtendsClause(node, parent);
+}
+
+function ClassExpression(node, parent, printStack) {
+ return isFirstInContext(printStack, {
+ expressionStatement: true,
+ exportDefault: true
+ });
+}
+
+function UnaryLike(node, parent) {
+ return hasPostfixPart(node, parent) || isBinaryExpression(parent, {
+ operator: "**",
+ left: node
+ }) || isClassExtendsClause(node, parent);
+}
+
+function FunctionExpression(node, parent, printStack) {
+ return isFirstInContext(printStack, {
+ expressionStatement: true,
+ exportDefault: true
+ });
+}
+
+function ArrowFunctionExpression(node, parent) {
+ return isExportDeclaration(parent) || ConditionalExpression(node, parent);
+}
+
+function ConditionalExpression(node, parent) {
+ if (isUnaryLike(parent) || isBinary(parent) || isConditionalExpression(parent, {
+ test: node
+ }) || isAwaitExpression(parent) || isTSTypeAssertion(parent) || isTSAsExpression(parent)) {
+ return true;
+ }
+
+ return UnaryLike(node, parent);
+}
+
+function OptionalMemberExpression(node, parent) {
+ return isCallExpression(parent, {
+ callee: node
+ }) || isMemberExpression(parent, {
+ object: node
+ });
+}
+
+function AssignmentExpression(node, parent) {
+ if (isObjectPattern(node.left)) {
+ return true;
+ } else {
+ return ConditionalExpression(node, parent);
+ }
+}
+
+function LogicalExpression(node, parent) {
+ switch (node.operator) {
+ case "||":
+ if (!isLogicalExpression(parent)) return false;
+ return parent.operator === "??" || parent.operator === "&&";
+
+ case "&&":
+ return isLogicalExpression(parent, {
+ operator: "??"
+ });
+
+ case "??":
+ return isLogicalExpression(parent) && parent.operator !== "??";
+ }
+}
+
+function Identifier(node, parent, printStack) {
+ if (node.name === "let") {
+ const isFollowedByBracket = isMemberExpression(parent, {
+ object: node,
+ computed: true
+ }) || isOptionalMemberExpression(parent, {
+ object: node,
+ computed: true,
+ optional: false
+ });
+ return isFirstInContext(printStack, {
+ expressionStatement: isFollowedByBracket,
+ forHead: isFollowedByBracket,
+ forInHead: isFollowedByBracket,
+ forOfHead: true
+ });
+ }
+
+ return node.name === "async" && isForOfStatement(parent) && node === parent.left;
+}
+
+function isFirstInContext(printStack, {
+ expressionStatement = false,
+ arrowBody = false,
+ exportDefault = false,
+ forHead = false,
+ forInHead = false,
+ forOfHead = false
+}) {
+ let i = printStack.length - 1;
+ let node = printStack[i];
+ i--;
+ let parent = printStack[i];
+
+ while (i >= 0) {
+ if (expressionStatement && isExpressionStatement(parent, {
+ expression: node
+ }) || exportDefault && isExportDefaultDeclaration(parent, {
+ declaration: node
+ }) || arrowBody && isArrowFunctionExpression(parent, {
+ body: node
+ }) || forHead && isForStatement(parent, {
+ init: node
+ }) || forInHead && isForInStatement(parent, {
+ left: node
+ }) || forOfHead && isForOfStatement(parent, {
+ left: node
+ })) {
+ return true;
+ }
+
+ if (hasPostfixPart(node, parent) && !isNewExpression(parent) || isSequenceExpression(parent) && parent.expressions[0] === node || isConditional(parent, {
+ test: node
+ }) || isBinary(parent, {
+ left: node
+ }) || isAssignmentExpression(parent, {
+ left: node
+ })) {
+ node = parent;
+ i--;
+ parent = printStack[i];
+ } else {
+ return false;
+ }
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/node/whitespace.js b/chromium/third_party/node/node_modules/@babel/generator/lib/node/whitespace.js
new file mode 100644
index 00000000000..dd149e4ec44
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/node/whitespace.js
@@ -0,0 +1,214 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.list = exports.nodes = void 0;
+
+var _t = require("@babel/types");
+
+const {
+ FLIPPED_ALIAS_KEYS,
+ isArrayExpression,
+ isAssignmentExpression,
+ isBinary,
+ isBlockStatement,
+ isCallExpression,
+ isFunction,
+ isIdentifier,
+ isLiteral,
+ isMemberExpression,
+ isObjectExpression,
+ isOptionalCallExpression,
+ isOptionalMemberExpression,
+ isStringLiteral
+} = _t;
+
+function crawl(node, state = {}) {
+ if (isMemberExpression(node) || isOptionalMemberExpression(node)) {
+ crawl(node.object, state);
+ if (node.computed) crawl(node.property, state);
+ } else if (isBinary(node) || isAssignmentExpression(node)) {
+ crawl(node.left, state);
+ crawl(node.right, state);
+ } else if (isCallExpression(node) || isOptionalCallExpression(node)) {
+ state.hasCall = true;
+ crawl(node.callee, state);
+ } else if (isFunction(node)) {
+ state.hasFunction = true;
+ } else if (isIdentifier(node)) {
+ state.hasHelper = state.hasHelper || isHelper(node.callee);
+ }
+
+ return state;
+}
+
+function isHelper(node) {
+ if (isMemberExpression(node)) {
+ return isHelper(node.object) || isHelper(node.property);
+ } else if (isIdentifier(node)) {
+ return node.name === "require" || node.name[0] === "_";
+ } else if (isCallExpression(node)) {
+ return isHelper(node.callee);
+ } else if (isBinary(node) || isAssignmentExpression(node)) {
+ return isIdentifier(node.left) && isHelper(node.left) || isHelper(node.right);
+ } else {
+ return false;
+ }
+}
+
+function isType(node) {
+ return isLiteral(node) || isObjectExpression(node) || isArrayExpression(node) || isIdentifier(node) || isMemberExpression(node);
+}
+
+const nodes = {
+ AssignmentExpression(node) {
+ const state = crawl(node.right);
+
+ if (state.hasCall && state.hasHelper || state.hasFunction) {
+ return {
+ before: state.hasFunction,
+ after: true
+ };
+ }
+ },
+
+ SwitchCase(node, parent) {
+ return {
+ before: !!node.consequent.length || parent.cases[0] === node,
+ after: !node.consequent.length && parent.cases[parent.cases.length - 1] === node
+ };
+ },
+
+ LogicalExpression(node) {
+ if (isFunction(node.left) || isFunction(node.right)) {
+ return {
+ after: true
+ };
+ }
+ },
+
+ Literal(node) {
+ if (isStringLiteral(node) && node.value === "use strict") {
+ return {
+ after: true
+ };
+ }
+ },
+
+ CallExpression(node) {
+ if (isFunction(node.callee) || isHelper(node)) {
+ return {
+ before: true,
+ after: true
+ };
+ }
+ },
+
+ OptionalCallExpression(node) {
+ if (isFunction(node.callee)) {
+ return {
+ before: true,
+ after: true
+ };
+ }
+ },
+
+ VariableDeclaration(node) {
+ for (let i = 0; i < node.declarations.length; i++) {
+ const declar = node.declarations[i];
+ let enabled = isHelper(declar.id) && !isType(declar.init);
+
+ if (!enabled) {
+ const state = crawl(declar.init);
+ enabled = isHelper(declar.init) && state.hasCall || state.hasFunction;
+ }
+
+ if (enabled) {
+ return {
+ before: true,
+ after: true
+ };
+ }
+ }
+ },
+
+ IfStatement(node) {
+ if (isBlockStatement(node.consequent)) {
+ return {
+ before: true,
+ after: true
+ };
+ }
+ }
+
+};
+exports.nodes = nodes;
+
+nodes.ObjectProperty = nodes.ObjectTypeProperty = nodes.ObjectMethod = function (node, parent) {
+ if (parent.properties[0] === node) {
+ return {
+ before: true
+ };
+ }
+};
+
+nodes.ObjectTypeCallProperty = function (node, parent) {
+ var _parent$properties;
+
+ if (parent.callProperties[0] === node && !((_parent$properties = parent.properties) != null && _parent$properties.length)) {
+ return {
+ before: true
+ };
+ }
+};
+
+nodes.ObjectTypeIndexer = function (node, parent) {
+ var _parent$properties2, _parent$callPropertie;
+
+ if (parent.indexers[0] === node && !((_parent$properties2 = parent.properties) != null && _parent$properties2.length) && !((_parent$callPropertie = parent.callProperties) != null && _parent$callPropertie.length)) {
+ return {
+ before: true
+ };
+ }
+};
+
+nodes.ObjectTypeInternalSlot = function (node, parent) {
+ var _parent$properties3, _parent$callPropertie2, _parent$indexers;
+
+ if (parent.internalSlots[0] === node && !((_parent$properties3 = parent.properties) != null && _parent$properties3.length) && !((_parent$callPropertie2 = parent.callProperties) != null && _parent$callPropertie2.length) && !((_parent$indexers = parent.indexers) != null && _parent$indexers.length)) {
+ return {
+ before: true
+ };
+ }
+};
+
+const list = {
+ VariableDeclaration(node) {
+ return node.declarations.map(decl => decl.init);
+ },
+
+ ArrayExpression(node) {
+ return node.elements;
+ },
+
+ ObjectExpression(node) {
+ return node.properties;
+ }
+
+};
+exports.list = list;
+[["Function", true], ["Class", true], ["Loop", true], ["LabeledStatement", true], ["SwitchStatement", true], ["TryStatement", true]].forEach(function ([type, amounts]) {
+ if (typeof amounts === "boolean") {
+ amounts = {
+ after: amounts,
+ before: amounts
+ };
+ }
+
+ [type].concat(FLIPPED_ALIAS_KEYS[type] || []).forEach(function (type) {
+ nodes[type] = function () {
+ return amounts;
+ };
+ });
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/printer.js b/chromium/third_party/node/node_modules/@babel/generator/lib/printer.js
new file mode 100644
index 00000000000..0decd212cb2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/printer.js
@@ -0,0 +1,540 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _buffer = require("./buffer");
+
+var n = require("./node");
+
+var _t = require("@babel/types");
+
+var generatorFunctions = require("./generators");
+
+const {
+ isProgram,
+ isFile,
+ isEmptyStatement
+} = _t;
+const SCIENTIFIC_NOTATION = /e/i;
+const ZERO_DECIMAL_INTEGER = /\.0+$/;
+const NON_DECIMAL_LITERAL = /^0[box]/;
+const PURE_ANNOTATION_RE = /^\s*[@#]__PURE__\s*$/;
+const {
+ needsParens,
+ needsWhitespaceAfter,
+ needsWhitespaceBefore
+} = n;
+
+class Printer {
+ constructor(format, map) {
+ this.inForStatementInitCounter = 0;
+ this._printStack = [];
+ this._indent = 0;
+ this._insideAux = false;
+ this._parenPushNewlineState = null;
+ this._noLineTerminator = false;
+ this._printAuxAfterOnNextUserNode = false;
+ this._printedComments = new WeakSet();
+ this._endsWithInteger = false;
+ this._endsWithWord = false;
+ this.format = format;
+ this._buf = new _buffer.default(map);
+ }
+
+ generate(ast) {
+ this.print(ast);
+
+ this._maybeAddAuxComment();
+
+ return this._buf.get();
+ }
+
+ indent() {
+ if (this.format.compact || this.format.concise) return;
+ this._indent++;
+ }
+
+ dedent() {
+ if (this.format.compact || this.format.concise) return;
+ this._indent--;
+ }
+
+ semicolon(force = false) {
+ this._maybeAddAuxComment();
+
+ this._append(";", !force);
+ }
+
+ rightBrace() {
+ if (this.format.minified) {
+ this._buf.removeLastSemicolon();
+ }
+
+ this.token("}");
+ }
+
+ space(force = false) {
+ if (this.format.compact) return;
+
+ if (force) {
+ this._space();
+ } else if (this._buf.hasContent()) {
+ const lastCp = this.getLastChar();
+
+ if (lastCp !== 32 && lastCp !== 10) {
+ this._space();
+ }
+ }
+ }
+
+ word(str) {
+ if (this._endsWithWord || this.endsWith(47) && str.charCodeAt(0) === 47) {
+ this._space();
+ }
+
+ this._maybeAddAuxComment();
+
+ this._append(str);
+
+ this._endsWithWord = true;
+ }
+
+ number(str) {
+ this.word(str);
+ this._endsWithInteger = Number.isInteger(+str) && !NON_DECIMAL_LITERAL.test(str) && !SCIENTIFIC_NOTATION.test(str) && !ZERO_DECIMAL_INTEGER.test(str) && str.charCodeAt(str.length - 1) !== 46;
+ }
+
+ token(str) {
+ const lastChar = this.getLastChar();
+ const strFirst = str.charCodeAt(0);
+
+ if (str === "--" && lastChar === 33 || strFirst === 43 && lastChar === 43 || strFirst === 45 && lastChar === 45 || strFirst === 46 && this._endsWithInteger) {
+ this._space();
+ }
+
+ this._maybeAddAuxComment();
+
+ this._append(str);
+ }
+
+ newline(i = 1) {
+ if (this.format.retainLines || this.format.compact) return;
+
+ if (this.format.concise) {
+ this.space();
+ return;
+ }
+
+ const charBeforeNewline = this.endsWithCharAndNewline();
+ if (charBeforeNewline === 10) return;
+
+ if (charBeforeNewline === 123 || charBeforeNewline === 58) {
+ i--;
+ }
+
+ if (i <= 0) return;
+
+ for (let j = 0; j < i; j++) {
+ this._newline();
+ }
+ }
+
+ endsWith(char) {
+ return this.getLastChar() === char;
+ }
+
+ getLastChar() {
+ return this._buf.getLastChar();
+ }
+
+ endsWithCharAndNewline() {
+ return this._buf.endsWithCharAndNewline();
+ }
+
+ removeTrailingNewline() {
+ this._buf.removeTrailingNewline();
+ }
+
+ exactSource(loc, cb) {
+ this._catchUp("start", loc);
+
+ this._buf.exactSource(loc, cb);
+ }
+
+ source(prop, loc) {
+ this._catchUp(prop, loc);
+
+ this._buf.source(prop, loc);
+ }
+
+ withSource(prop, loc, cb) {
+ this._catchUp(prop, loc);
+
+ this._buf.withSource(prop, loc, cb);
+ }
+
+ _space() {
+ this._append(" ", true);
+ }
+
+ _newline() {
+ this._append("\n", true);
+ }
+
+ _append(str, queue = false) {
+ this._maybeAddParen(str);
+
+ this._maybeIndent(str);
+
+ if (queue) this._buf.queue(str);else this._buf.append(str);
+ this._endsWithWord = false;
+ this._endsWithInteger = false;
+ }
+
+ _maybeIndent(str) {
+ if (this._indent && this.endsWith(10) && str.charCodeAt(0) !== 10) {
+ this._buf.queue(this._getIndent());
+ }
+ }
+
+ _maybeAddParen(str) {
+ const parenPushNewlineState = this._parenPushNewlineState;
+ if (!parenPushNewlineState) return;
+ let i;
+
+ for (i = 0; i < str.length && str[i] === " "; i++) continue;
+
+ if (i === str.length) {
+ return;
+ }
+
+ const cha = str[i];
+
+ if (cha !== "\n") {
+ if (cha !== "/" || i + 1 === str.length) {
+ this._parenPushNewlineState = null;
+ return;
+ }
+
+ const chaPost = str[i + 1];
+
+ if (chaPost === "*") {
+ if (PURE_ANNOTATION_RE.test(str.slice(i + 2, str.length - 2))) {
+ return;
+ }
+ } else if (chaPost !== "/") {
+ this._parenPushNewlineState = null;
+ return;
+ }
+ }
+
+ this.token("(");
+ this.indent();
+ parenPushNewlineState.printed = true;
+ }
+
+ _catchUp(prop, loc) {
+ if (!this.format.retainLines) return;
+ const pos = loc ? loc[prop] : null;
+
+ if ((pos == null ? void 0 : pos.line) != null) {
+ const count = pos.line - this._buf.getCurrentLine();
+
+ for (let i = 0; i < count; i++) {
+ this._newline();
+ }
+ }
+ }
+
+ _getIndent() {
+ return this.format.indent.style.repeat(this._indent);
+ }
+
+ startTerminatorless(isLabel = false) {
+ if (isLabel) {
+ this._noLineTerminator = true;
+ return null;
+ } else {
+ return this._parenPushNewlineState = {
+ printed: false
+ };
+ }
+ }
+
+ endTerminatorless(state) {
+ this._noLineTerminator = false;
+
+ if (state != null && state.printed) {
+ this.dedent();
+ this.newline();
+ this.token(")");
+ }
+ }
+
+ print(node, parent) {
+ if (!node) return;
+ const oldConcise = this.format.concise;
+
+ if (node._compact) {
+ this.format.concise = true;
+ }
+
+ const printMethod = this[node.type];
+
+ if (!printMethod) {
+ throw new ReferenceError(`unknown node of type ${JSON.stringify(node.type)} with constructor ${JSON.stringify(node == null ? void 0 : node.constructor.name)}`);
+ }
+
+ this._printStack.push(node);
+
+ const oldInAux = this._insideAux;
+ this._insideAux = !node.loc;
+
+ this._maybeAddAuxComment(this._insideAux && !oldInAux);
+
+ let shouldPrintParens = needsParens(node, parent, this._printStack);
+
+ if (this.format.retainFunctionParens && node.type === "FunctionExpression" && node.extra && node.extra.parenthesized) {
+ shouldPrintParens = true;
+ }
+
+ if (shouldPrintParens) this.token("(");
+
+ this._printLeadingComments(node);
+
+ const loc = isProgram(node) || isFile(node) ? null : node.loc;
+ this.withSource("start", loc, () => {
+ printMethod.call(this, node, parent);
+ });
+
+ this._printTrailingComments(node);
+
+ if (shouldPrintParens) this.token(")");
+
+ this._printStack.pop();
+
+ this.format.concise = oldConcise;
+ this._insideAux = oldInAux;
+ }
+
+ _maybeAddAuxComment(enteredPositionlessNode) {
+ if (enteredPositionlessNode) this._printAuxBeforeComment();
+ if (!this._insideAux) this._printAuxAfterComment();
+ }
+
+ _printAuxBeforeComment() {
+ if (this._printAuxAfterOnNextUserNode) return;
+ this._printAuxAfterOnNextUserNode = true;
+ const comment = this.format.auxiliaryCommentBefore;
+
+ if (comment) {
+ this._printComment({
+ type: "CommentBlock",
+ value: comment
+ });
+ }
+ }
+
+ _printAuxAfterComment() {
+ if (!this._printAuxAfterOnNextUserNode) return;
+ this._printAuxAfterOnNextUserNode = false;
+ const comment = this.format.auxiliaryCommentAfter;
+
+ if (comment) {
+ this._printComment({
+ type: "CommentBlock",
+ value: comment
+ });
+ }
+ }
+
+ getPossibleRaw(node) {
+ const extra = node.extra;
+
+ if (extra && extra.raw != null && extra.rawValue != null && node.value === extra.rawValue) {
+ return extra.raw;
+ }
+ }
+
+ printJoin(nodes, parent, opts = {}) {
+ if (!(nodes != null && nodes.length)) return;
+ if (opts.indent) this.indent();
+ const newlineOpts = {
+ addNewlines: opts.addNewlines
+ };
+
+ for (let i = 0; i < nodes.length; i++) {
+ const node = nodes[i];
+ if (!node) continue;
+ if (opts.statement) this._printNewline(true, node, parent, newlineOpts);
+ this.print(node, parent);
+
+ if (opts.iterator) {
+ opts.iterator(node, i);
+ }
+
+ if (opts.separator && i < nodes.length - 1) {
+ opts.separator.call(this);
+ }
+
+ if (opts.statement) this._printNewline(false, node, parent, newlineOpts);
+ }
+
+ if (opts.indent) this.dedent();
+ }
+
+ printAndIndentOnComments(node, parent) {
+ const indent = node.leadingComments && node.leadingComments.length > 0;
+ if (indent) this.indent();
+ this.print(node, parent);
+ if (indent) this.dedent();
+ }
+
+ printBlock(parent) {
+ const node = parent.body;
+
+ if (!isEmptyStatement(node)) {
+ this.space();
+ }
+
+ this.print(node, parent);
+ }
+
+ _printTrailingComments(node) {
+ this._printComments(this._getComments(false, node));
+ }
+
+ _printLeadingComments(node) {
+ this._printComments(this._getComments(true, node), true);
+ }
+
+ printInnerComments(node, indent = true) {
+ var _node$innerComments;
+
+ if (!((_node$innerComments = node.innerComments) != null && _node$innerComments.length)) return;
+ if (indent) this.indent();
+
+ this._printComments(node.innerComments);
+
+ if (indent) this.dedent();
+ }
+
+ printSequence(nodes, parent, opts = {}) {
+ opts.statement = true;
+ return this.printJoin(nodes, parent, opts);
+ }
+
+ printList(items, parent, opts = {}) {
+ if (opts.separator == null) {
+ opts.separator = commaSeparator;
+ }
+
+ return this.printJoin(items, parent, opts);
+ }
+
+ _printNewline(leading, node, parent, opts) {
+ if (this.format.retainLines || this.format.compact) return;
+
+ if (this.format.concise) {
+ this.space();
+ return;
+ }
+
+ let lines = 0;
+
+ if (this._buf.hasContent()) {
+ if (!leading) lines++;
+ if (opts.addNewlines) lines += opts.addNewlines(leading, node) || 0;
+ const needs = leading ? needsWhitespaceBefore : needsWhitespaceAfter;
+ if (needs(node, parent)) lines++;
+ }
+
+ this.newline(Math.min(2, lines));
+ }
+
+ _getComments(leading, node) {
+ return node && (leading ? node.leadingComments : node.trailingComments) || [];
+ }
+
+ _printComment(comment, skipNewLines) {
+ if (!this.format.shouldPrintComment(comment.value)) return;
+ if (comment.ignore) return;
+ if (this._printedComments.has(comment)) return;
+
+ this._printedComments.add(comment);
+
+ const isBlockComment = comment.type === "CommentBlock";
+ const printNewLines = isBlockComment && !skipNewLines && !this._noLineTerminator;
+ if (printNewLines && this._buf.hasContent()) this.newline(1);
+ const lastCharCode = this.getLastChar();
+
+ if (lastCharCode !== 91 && lastCharCode !== 123) {
+ this.space();
+ }
+
+ let val = !isBlockComment && !this._noLineTerminator ? `//${comment.value}\n` : `/*${comment.value}*/`;
+
+ if (isBlockComment && this.format.indent.adjustMultilineComment) {
+ var _comment$loc;
+
+ const offset = (_comment$loc = comment.loc) == null ? void 0 : _comment$loc.start.column;
+
+ if (offset) {
+ const newlineRegex = new RegExp("\\n\\s{1," + offset + "}", "g");
+ val = val.replace(newlineRegex, "\n");
+ }
+
+ const indentSize = Math.max(this._getIndent().length, this.format.retainLines ? 0 : this._buf.getCurrentColumn());
+ val = val.replace(/\n(?!$)/g, `\n${" ".repeat(indentSize)}`);
+ }
+
+ if (this.endsWith(47)) this._space();
+ this.withSource("start", comment.loc, () => {
+ this._append(val);
+ });
+ if (printNewLines) this.newline(1);
+ }
+
+ _printComments(comments, inlinePureAnnotation) {
+ if (!(comments != null && comments.length)) return;
+
+ if (inlinePureAnnotation && comments.length === 1 && PURE_ANNOTATION_RE.test(comments[0].value)) {
+ this._printComment(comments[0], this._buf.hasContent() && !this.endsWith(10));
+ } else {
+ for (const comment of comments) {
+ this._printComment(comment);
+ }
+ }
+ }
+
+ printAssertions(node) {
+ var _node$assertions;
+
+ if ((_node$assertions = node.assertions) != null && _node$assertions.length) {
+ this.space();
+ this.word("assert");
+ this.space();
+ this.token("{");
+ this.space();
+ this.printList(node.assertions, node);
+ this.space();
+ this.token("}");
+ }
+ }
+
+}
+
+Object.assign(Printer.prototype, generatorFunctions);
+{
+ Printer.prototype.Noop = function Noop() {};
+}
+var _default = Printer;
+exports.default = _default;
+
+function commaSeparator() {
+ this.token(",");
+ this.space();
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/lib/source-map.js b/chromium/third_party/node/node_modules/@babel/generator/lib/source-map.js
new file mode 100644
index 00000000000..99da1defd77
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/lib/source-map.js
@@ -0,0 +1,78 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _sourceMap = require("source-map");
+
+class SourceMap {
+ constructor(opts, code) {
+ this._cachedMap = void 0;
+ this._code = void 0;
+ this._opts = void 0;
+ this._rawMappings = void 0;
+ this._lastGenLine = void 0;
+ this._lastSourceLine = void 0;
+ this._lastSourceColumn = void 0;
+ this._cachedMap = null;
+ this._code = code;
+ this._opts = opts;
+ this._rawMappings = [];
+ }
+
+ get() {
+ if (!this._cachedMap) {
+ const map = this._cachedMap = new _sourceMap.SourceMapGenerator({
+ sourceRoot: this._opts.sourceRoot
+ });
+ const code = this._code;
+
+ if (typeof code === "string") {
+ map.setSourceContent(this._opts.sourceFileName.replace(/\\/g, "/"), code);
+ } else if (typeof code === "object") {
+ Object.keys(code).forEach(sourceFileName => {
+ map.setSourceContent(sourceFileName.replace(/\\/g, "/"), code[sourceFileName]);
+ });
+ }
+
+ this._rawMappings.forEach(mapping => map.addMapping(mapping), map);
+ }
+
+ return this._cachedMap.toJSON();
+ }
+
+ getRawMappings() {
+ return this._rawMappings.slice();
+ }
+
+ mark(generatedLine, generatedColumn, line, column, identifierName, filename, force) {
+ if (this._lastGenLine !== generatedLine && line === null) return;
+
+ if (!force && this._lastGenLine === generatedLine && this._lastSourceLine === line && this._lastSourceColumn === column) {
+ return;
+ }
+
+ this._cachedMap = null;
+ this._lastGenLine = generatedLine;
+ this._lastSourceLine = line;
+ this._lastSourceColumn = column;
+
+ this._rawMappings.push({
+ name: identifierName || undefined,
+ generated: {
+ line: generatedLine,
+ column: generatedColumn
+ },
+ source: line == null ? undefined : (filename || this._opts.sourceFileName).replace(/\\/g, "/"),
+ original: line == null ? undefined : {
+ line: line,
+ column: column
+ }
+ });
+ }
+
+}
+
+exports.default = SourceMap; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/generator/package.json b/chromium/third_party/node/node_modules/@babel/generator/package.json
new file mode 100644
index 00000000000..b5c01ed808c
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/generator/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@babel/generator",
+ "version": "7.15.4",
+ "description": "Turns an AST into code.",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-generator"
+ },
+ "homepage": "https://babel.dev/docs/en/next/babel-generator",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20generator%22+is%3Aopen",
+ "main": "./lib/index.js",
+ "files": [
+ "lib"
+ ],
+ "dependencies": {
+ "@babel/types": "^7.15.4",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ },
+ "devDependencies": {
+ "@babel/helper-fixtures": "7.14.5",
+ "@babel/parser": "7.15.4",
+ "@types/jsesc": "^2.5.0",
+ "@types/source-map": "^0.5.0",
+ "charcodes": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-function-name/LICENSE b/chromium/third_party/node/node_modules/@babel/helper-function-name/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-function-name/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/helper-function-name/lib/index.js b/chromium/third_party/node/node_modules/@babel/helper-function-name/lib/index.js
new file mode 100644
index 00000000000..59e88e9b597
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-function-name/lib/index.js
@@ -0,0 +1,188 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = _default;
+
+var _helperGetFunctionArity = require("@babel/helper-get-function-arity");
+
+var _template = require("@babel/template");
+
+var _t = require("@babel/types");
+
+const {
+ NOT_LOCAL_BINDING,
+ cloneNode,
+ identifier,
+ isAssignmentExpression,
+ isFunction,
+ isIdentifier,
+ isLiteral,
+ isNullLiteral,
+ isObjectMethod,
+ isObjectProperty,
+ isRegExpLiteral,
+ isTemplateLiteral,
+ isVariableDeclarator,
+ toBindingIdentifierName
+} = _t;
+const buildPropertyMethodAssignmentWrapper = (0, _template.default)(`
+ (function (FUNCTION_KEY) {
+ function FUNCTION_ID() {
+ return FUNCTION_KEY.apply(this, arguments);
+ }
+
+ FUNCTION_ID.toString = function () {
+ return FUNCTION_KEY.toString();
+ }
+
+ return FUNCTION_ID;
+ })(FUNCTION)
+`);
+const buildGeneratorPropertyMethodAssignmentWrapper = (0, _template.default)(`
+ (function (FUNCTION_KEY) {
+ function* FUNCTION_ID() {
+ return yield* FUNCTION_KEY.apply(this, arguments);
+ }
+
+ FUNCTION_ID.toString = function () {
+ return FUNCTION_KEY.toString();
+ };
+
+ return FUNCTION_ID;
+ })(FUNCTION)
+`);
+const visitor = {
+ "ReferencedIdentifier|BindingIdentifier"(path, state) {
+ if (path.node.name !== state.name) return;
+ const localDeclar = path.scope.getBindingIdentifier(state.name);
+ if (localDeclar !== state.outerDeclar) return;
+ state.selfReference = true;
+ path.stop();
+ }
+
+};
+
+function getNameFromLiteralId(id) {
+ if (isNullLiteral(id)) {
+ return "null";
+ }
+
+ if (isRegExpLiteral(id)) {
+ return `_${id.pattern}_${id.flags}`;
+ }
+
+ if (isTemplateLiteral(id)) {
+ return id.quasis.map(quasi => quasi.value.raw).join("");
+ }
+
+ if (id.value !== undefined) {
+ return id.value + "";
+ }
+
+ return "";
+}
+
+function wrap(state, method, id, scope) {
+ if (state.selfReference) {
+ if (scope.hasBinding(id.name) && !scope.hasGlobal(id.name)) {
+ scope.rename(id.name);
+ } else {
+ if (!isFunction(method)) return;
+ let build = buildPropertyMethodAssignmentWrapper;
+
+ if (method.generator) {
+ build = buildGeneratorPropertyMethodAssignmentWrapper;
+ }
+
+ const template = build({
+ FUNCTION: method,
+ FUNCTION_ID: id,
+ FUNCTION_KEY: scope.generateUidIdentifier(id.name)
+ }).expression;
+ const params = template.callee.body.body[0].params;
+
+ for (let i = 0, len = (0, _helperGetFunctionArity.default)(method); i < len; i++) {
+ params.push(scope.generateUidIdentifier("x"));
+ }
+
+ return template;
+ }
+ }
+
+ method.id = id;
+ scope.getProgramParent().references[id.name] = true;
+}
+
+function visit(node, name, scope) {
+ const state = {
+ selfAssignment: false,
+ selfReference: false,
+ outerDeclar: scope.getBindingIdentifier(name),
+ references: [],
+ name: name
+ };
+ const binding = scope.getOwnBinding(name);
+
+ if (binding) {
+ if (binding.kind === "param") {
+ state.selfReference = true;
+ } else {}
+ } else if (state.outerDeclar || scope.hasGlobal(name)) {
+ scope.traverse(node, visitor, state);
+ }
+
+ return state;
+}
+
+function _default({
+ node,
+ parent,
+ scope,
+ id
+}, localBinding = false) {
+ if (node.id) return;
+
+ if ((isObjectProperty(parent) || isObjectMethod(parent, {
+ kind: "method"
+ })) && (!parent.computed || isLiteral(parent.key))) {
+ id = parent.key;
+ } else if (isVariableDeclarator(parent)) {
+ id = parent.id;
+
+ if (isIdentifier(id) && !localBinding) {
+ const binding = scope.parent.getBinding(id.name);
+
+ if (binding && binding.constant && scope.getBinding(id.name) === binding) {
+ node.id = cloneNode(id);
+ node.id[NOT_LOCAL_BINDING] = true;
+ return;
+ }
+ }
+ } else if (isAssignmentExpression(parent, {
+ operator: "="
+ })) {
+ id = parent.left;
+ } else if (!id) {
+ return;
+ }
+
+ let name;
+
+ if (id && isLiteral(id)) {
+ name = getNameFromLiteralId(id);
+ } else if (id && isIdentifier(id)) {
+ name = id.name;
+ }
+
+ if (name === undefined) {
+ return;
+ }
+
+ name = toBindingIdentifierName(name);
+ id = identifier(name);
+ id[NOT_LOCAL_BINDING] = true;
+ const state = visit(node, name, scope);
+ return wrap(state, node, id, scope) || node;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-function-name/package.json b/chromium/third_party/node/node_modules/@babel/helper-function-name/package.json
new file mode 100644
index 00000000000..68734a59606
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-function-name/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@babel/helper-function-name",
+ "version": "7.15.4",
+ "description": "Helper function to change the property 'name' of every function",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-helper-function-name"
+ },
+ "homepage": "https://babel.dev/docs/en/next/babel-helper-function-name",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/helper-get-function-arity": "^7.15.4",
+ "@babel/template": "^7.15.4",
+ "@babel/types": "^7.15.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "author": "The Babel Team (https://babel.dev/team)"
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/LICENSE b/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/lib/index.js b/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/lib/index.js
new file mode 100644
index 00000000000..61e22edd292
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/lib/index.js
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = _default;
+
+var _t = require("@babel/types");
+
+const {
+ isAssignmentPattern,
+ isRestElement
+} = _t;
+
+function _default(node) {
+ const params = node.params;
+
+ for (let i = 0; i < params.length; i++) {
+ const param = params[i];
+
+ if (isAssignmentPattern(param) || isRestElement(param)) {
+ return i;
+ }
+ }
+
+ return params.length;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/package.json b/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/package.json
new file mode 100644
index 00000000000..648e82766ad
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-get-function-arity/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "@babel/helper-get-function-arity",
+ "version": "7.15.4",
+ "description": "Helper function to get function arity",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-helper-get-function-arity"
+ },
+ "homepage": "https://babel.dev/docs/en/next/babel-helper-get-function-arity",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/types": "^7.15.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "author": "The Babel Team (https://babel.dev/team)"
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/LICENSE b/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/lib/index.js b/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/lib/index.js
new file mode 100644
index 00000000000..31fb8470e69
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/lib/index.js
@@ -0,0 +1,58 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = hoistVariables;
+
+var _t = require("@babel/types");
+
+const {
+ assignmentExpression,
+ expressionStatement,
+ identifier
+} = _t;
+const visitor = {
+ Scope(path, state) {
+ if (state.kind === "let") path.skip();
+ },
+
+ FunctionParent(path) {
+ path.skip();
+ },
+
+ VariableDeclaration(path, state) {
+ if (state.kind && path.node.kind !== state.kind) return;
+ const nodes = [];
+ const declarations = path.get("declarations");
+ let firstId;
+
+ for (const declar of declarations) {
+ firstId = declar.node.id;
+
+ if (declar.node.init) {
+ nodes.push(expressionStatement(assignmentExpression("=", declar.node.id, declar.node.init)));
+ }
+
+ for (const name of Object.keys(declar.getBindingIdentifiers())) {
+ state.emit(identifier(name), name, declar.node.init !== null);
+ }
+ }
+
+ if (path.parentPath.isFor({
+ left: path.node
+ })) {
+ path.replaceWith(firstId);
+ } else {
+ path.replaceWithMultiple(nodes);
+ }
+ }
+
+};
+
+function hoistVariables(path, emit, kind = "var") {
+ path.traverse(visitor, {
+ kind,
+ emit
+ });
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/package.json b/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/package.json
new file mode 100644
index 00000000000..7621f99a207
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-hoist-variables/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "@babel/helper-hoist-variables",
+ "version": "7.15.4",
+ "description": "Helper function to hoist variables",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-helper-hoist-variables"
+ },
+ "homepage": "https://babel.dev/docs/en/next/babel-helper-hoist-variables",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/types": "^7.15.4"
+ },
+ "TODO": "The @babel/traverse dependency is only needed for the NodePath TS type. We can consider exporting it from @babel/core.",
+ "devDependencies": {
+ "@babel/traverse": "7.15.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "author": "The Babel Team (https://babel.dev/team)"
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/LICENSE b/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/lib/index.js b/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/lib/index.js
new file mode 100644
index 00000000000..6007f89c28d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/lib/index.js
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = splitExportDeclaration;
+
+var _t = require("@babel/types");
+
+const {
+ cloneNode,
+ exportNamedDeclaration,
+ exportSpecifier,
+ identifier,
+ variableDeclaration,
+ variableDeclarator
+} = _t;
+
+function splitExportDeclaration(exportDeclaration) {
+ if (!exportDeclaration.isExportDeclaration()) {
+ throw new Error("Only export declarations can be split.");
+ }
+
+ const isDefault = exportDeclaration.isExportDefaultDeclaration();
+ const declaration = exportDeclaration.get("declaration");
+ const isClassDeclaration = declaration.isClassDeclaration();
+
+ if (isDefault) {
+ const standaloneDeclaration = declaration.isFunctionDeclaration() || isClassDeclaration;
+ const scope = declaration.isScope() ? declaration.scope.parent : declaration.scope;
+ let id = declaration.node.id;
+ let needBindingRegistration = false;
+
+ if (!id) {
+ needBindingRegistration = true;
+ id = scope.generateUidIdentifier("default");
+
+ if (standaloneDeclaration || declaration.isFunctionExpression() || declaration.isClassExpression()) {
+ declaration.node.id = cloneNode(id);
+ }
+ }
+
+ const updatedDeclaration = standaloneDeclaration ? declaration : variableDeclaration("var", [variableDeclarator(cloneNode(id), declaration.node)]);
+ const updatedExportDeclaration = exportNamedDeclaration(null, [exportSpecifier(cloneNode(id), identifier("default"))]);
+ exportDeclaration.insertAfter(updatedExportDeclaration);
+ exportDeclaration.replaceWith(updatedDeclaration);
+
+ if (needBindingRegistration) {
+ scope.registerDeclaration(exportDeclaration);
+ }
+
+ return exportDeclaration;
+ }
+
+ if (exportDeclaration.get("specifiers").length > 0) {
+ throw new Error("It doesn't make sense to split exported specifiers.");
+ }
+
+ const bindingIdentifiers = declaration.getOuterBindingIdentifiers();
+ const specifiers = Object.keys(bindingIdentifiers).map(name => {
+ return exportSpecifier(identifier(name), identifier(name));
+ });
+ const aliasDeclar = exportNamedDeclaration(null, specifiers);
+ exportDeclaration.insertAfter(aliasDeclar);
+ exportDeclaration.replaceWith(declaration.node);
+ return exportDeclaration;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/package.json b/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/package.json
new file mode 100644
index 00000000000..8c32ea4fff2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-split-export-declaration/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "@babel/helper-split-export-declaration",
+ "version": "7.15.4",
+ "description": "",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-helper-split-export-declaration"
+ },
+ "homepage": "https://babel.dev/docs/en/next/babel-helper-split-export-declaration",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/types": "^7.15.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "author": "The Babel Team (https://babel.dev/team)"
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/LICENSE b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/identifier.js b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/identifier.js
new file mode 100644
index 00000000000..b8a5d9a67f7
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/identifier.js
@@ -0,0 +1,84 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isIdentifierStart = isIdentifierStart;
+exports.isIdentifierChar = isIdentifierChar;
+exports.isIdentifierName = isIdentifierName;
+let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
+let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
+const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
+const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
+nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
+const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];
+const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
+
+function isInAstralSet(code, set) {
+ let pos = 0x10000;
+
+ for (let i = 0, length = set.length; i < length; i += 2) {
+ pos += set[i];
+ if (pos > code) return false;
+ pos += set[i + 1];
+ if (pos >= code) return true;
+ }
+
+ return false;
+}
+
+function isIdentifierStart(code) {
+ if (code < 65) return code === 36;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
+ }
+
+ return isInAstralSet(code, astralIdentifierStartCodes);
+}
+
+function isIdentifierChar(code) {
+ if (code < 48) return code === 36;
+ if (code < 58) return true;
+ if (code < 65) return false;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
+ }
+
+ return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
+}
+
+function isIdentifierName(name) {
+ let isFirst = true;
+
+ for (let i = 0; i < name.length; i++) {
+ let cp = name.charCodeAt(i);
+
+ if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
+ const trail = name.charCodeAt(++i);
+
+ if ((trail & 0xfc00) === 0xdc00) {
+ cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
+ }
+ }
+
+ if (isFirst) {
+ isFirst = false;
+
+ if (!isIdentifierStart(cp)) {
+ return false;
+ }
+ } else if (!isIdentifierChar(cp)) {
+ return false;
+ }
+ }
+
+ return !isFirst;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/index.js b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/index.js
new file mode 100644
index 00000000000..7b623c90a6e
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/index.js
@@ -0,0 +1,57 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "isIdentifierName", {
+ enumerable: true,
+ get: function () {
+ return _identifier.isIdentifierName;
+ }
+});
+Object.defineProperty(exports, "isIdentifierChar", {
+ enumerable: true,
+ get: function () {
+ return _identifier.isIdentifierChar;
+ }
+});
+Object.defineProperty(exports, "isIdentifierStart", {
+ enumerable: true,
+ get: function () {
+ return _identifier.isIdentifierStart;
+ }
+});
+Object.defineProperty(exports, "isReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isReservedWord;
+ }
+});
+Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isStrictBindOnlyReservedWord;
+ }
+});
+Object.defineProperty(exports, "isStrictBindReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isStrictBindReservedWord;
+ }
+});
+Object.defineProperty(exports, "isStrictReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isStrictReservedWord;
+ }
+});
+Object.defineProperty(exports, "isKeyword", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isKeyword;
+ }
+});
+
+var _identifier = require("./identifier");
+
+var _keyword = require("./keyword"); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/keyword.js b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/keyword.js
new file mode 100644
index 00000000000..110cee40028
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/lib/keyword.js
@@ -0,0 +1,38 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isReservedWord = isReservedWord;
+exports.isStrictReservedWord = isStrictReservedWord;
+exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
+exports.isStrictBindReservedWord = isStrictBindReservedWord;
+exports.isKeyword = isKeyword;
+const reservedWords = {
+ keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
+ strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
+ strictBind: ["eval", "arguments"]
+};
+const keywords = new Set(reservedWords.keyword);
+const reservedWordsStrictSet = new Set(reservedWords.strict);
+const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
+
+function isReservedWord(word, inModule) {
+ return inModule && word === "await" || word === "enum";
+}
+
+function isStrictReservedWord(word, inModule) {
+ return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
+}
+
+function isStrictBindOnlyReservedWord(word) {
+ return reservedWordsStrictBindSet.has(word);
+}
+
+function isStrictBindReservedWord(word, inModule) {
+ return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
+}
+
+function isKeyword(word) {
+ return keywords.has(word);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/package.json b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/package.json
new file mode 100644
index 00000000000..0efb119c4b5
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "@babel/helper-validator-identifier",
+ "version": "7.15.7",
+ "description": "Validate identifier/keywords name",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-helper-validator-identifier"
+ },
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "./lib/index.js",
+ "exports": "./lib/index.js",
+ "devDependencies": {
+ "@unicode/unicode-14.0.0": "^1.2.1",
+ "charcodes": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "author": "The Babel Team (https://babel.dev/team)"
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js
new file mode 100644
index 00000000000..f644d77df9f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js
@@ -0,0 +1,75 @@
+"use strict";
+
+// Always use the latest available version of Unicode!
+// https://tc39.github.io/ecma262/#sec-conformance
+const version = "14.0.0";
+
+const start = require("@unicode/unicode-" +
+ version +
+ "/Binary_Property/ID_Start/code-points.js").filter(function (ch) {
+ return ch > 0x7f;
+});
+let last = -1;
+const cont = [0x200c, 0x200d].concat(
+ require("@unicode/unicode-" +
+ version +
+ "/Binary_Property/ID_Continue/code-points.js").filter(function (ch) {
+ return ch > 0x7f && search(start, ch, last + 1) == -1;
+ })
+);
+
+function search(arr, ch, starting) {
+ for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) {
+ if (arr[i] === ch) return i;
+ }
+ return -1;
+}
+
+function pad(str, width) {
+ while (str.length < width) str = "0" + str;
+ return str;
+}
+
+function esc(code) {
+ const hex = code.toString(16);
+ if (hex.length <= 2) return "\\x" + pad(hex, 2);
+ else return "\\u" + pad(hex, 4);
+}
+
+function generate(chars) {
+ const astral = [];
+ let re = "";
+ for (let i = 0, at = 0x10000; i < chars.length; i++) {
+ const from = chars[i];
+ let to = from;
+ while (i < chars.length - 1 && chars[i + 1] == to + 1) {
+ i++;
+ to++;
+ }
+ if (to <= 0xffff) {
+ if (from == to) re += esc(from);
+ else if (from + 1 == to) re += esc(from) + esc(to);
+ else re += esc(from) + "-" + esc(to);
+ } else {
+ astral.push(from - at, to - from);
+ at = to;
+ }
+ }
+ return { nonASCII: re, astral: astral };
+}
+
+const startData = generate(start);
+const contData = generate(cont);
+
+console.log("/* prettier-ignore */");
+console.log('let nonASCIIidentifierStartChars = "' + startData.nonASCII + '";');
+console.log("/* prettier-ignore */");
+console.log('let nonASCIIidentifierChars = "' + contData.nonASCII + '";');
+console.log("/* prettier-ignore */");
+console.log(
+ "const astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";"
+);
+console.log("/* prettier-ignore */");
+console.log(
+ "const astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";"
+);
diff --git a/chromium/third_party/node/node_modules/@babel/highlight/LICENSE b/chromium/third_party/node/node_modules/@babel/highlight/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/highlight/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/highlight/lib/index.js b/chromium/third_party/node/node_modules/@babel/highlight/lib/index.js
new file mode 100644
index 00000000000..34e308f4ef9
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/highlight/lib/index.js
@@ -0,0 +1,116 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.shouldHighlight = shouldHighlight;
+exports.getChalk = getChalk;
+exports.default = highlight;
+
+var _jsTokens = require("js-tokens");
+
+var _helperValidatorIdentifier = require("@babel/helper-validator-identifier");
+
+var _chalk = require("chalk");
+
+const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
+
+function getDefs(chalk) {
+ return {
+ keyword: chalk.cyan,
+ capitalized: chalk.yellow,
+ jsxIdentifier: chalk.yellow,
+ punctuator: chalk.yellow,
+ number: chalk.magenta,
+ string: chalk.green,
+ regex: chalk.magenta,
+ comment: chalk.grey,
+ invalid: chalk.white.bgRed.bold
+ };
+}
+
+const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
+const BRACKET = /^[()[\]{}]$/;
+let tokenize;
+{
+ const JSX_TAG = /^[a-z][\w-]*$/i;
+
+ const getTokenType = function (token, offset, text) {
+ if (token.type === "name") {
+ if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) {
+ return "keyword";
+ }
+
+ if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == "</")) {
+ return "jsxIdentifier";
+ }
+
+ if (token.value[0] !== token.value[0].toLowerCase()) {
+ return "capitalized";
+ }
+ }
+
+ if (token.type === "punctuator" && BRACKET.test(token.value)) {
+ return "bracket";
+ }
+
+ if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
+ return "punctuator";
+ }
+
+ return token.type;
+ };
+
+ tokenize = function* (text) {
+ let match;
+
+ while (match = _jsTokens.default.exec(text)) {
+ const token = _jsTokens.matchToToken(match);
+
+ yield {
+ type: getTokenType(token, match.index, text),
+ value: token.value
+ };
+ }
+ };
+}
+
+function highlightTokens(defs, text) {
+ let highlighted = "";
+
+ for (const {
+ type,
+ value
+ } of tokenize(text)) {
+ const colorize = defs[type];
+
+ if (colorize) {
+ highlighted += value.split(NEWLINE).map(str => colorize(str)).join("\n");
+ } else {
+ highlighted += value;
+ }
+ }
+
+ return highlighted;
+}
+
+function shouldHighlight(options) {
+ return !!_chalk.supportsColor || options.forceColor;
+}
+
+function getChalk(options) {
+ return options.forceColor ? new _chalk.constructor({
+ enabled: true,
+ level: 1
+ }) : _chalk;
+}
+
+function highlight(code, options = {}) {
+ if (shouldHighlight(options)) {
+ const chalk = getChalk(options);
+ const defs = getDefs(chalk);
+ return highlightTokens(defs, code);
+ } else {
+ return code;
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/highlight/package.json b/chromium/third_party/node/node_modules/@babel/highlight/package.json
new file mode 100644
index 00000000000..210c22c5110
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/highlight/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "@babel/highlight",
+ "version": "7.14.5",
+ "description": "Syntax highlight JavaScript strings for output in terminals.",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-highlight",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-highlight"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.14.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "devDependencies": {
+ "@types/chalk": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/parser/LICENSE b/chromium/third_party/node/node_modules/@babel/parser/LICENSE
new file mode 100644
index 00000000000..d4c7fc58380
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/parser/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2012-2014 by various contributors (see AUTHORS)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/parser/bin/babel-parser.js b/chromium/third_party/node/node_modules/@babel/parser/bin/babel-parser.js
new file mode 100755
index 00000000000..3aca314533b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/parser/bin/babel-parser.js
@@ -0,0 +1,15 @@
+#!/usr/bin/env node
+/* eslint no-var: 0 */
+
+var parser = require("..");
+var fs = require("fs");
+
+var filename = process.argv[2];
+if (!filename) {
+ console.error("no filename specified");
+} else {
+ var file = fs.readFileSync(filename, "utf8");
+ var ast = parser.parse(file);
+
+ console.log(JSON.stringify(ast, null, " "));
+}
diff --git a/chromium/third_party/node/node_modules/@babel/parser/lib/index.js b/chromium/third_party/node/node_modules/@babel/parser/lib/index.js
new file mode 100644
index 00000000000..c8610f19ec0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/parser/lib/index.js
@@ -0,0 +1,14699 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+const lineBreak = /\r\n?|[\n\u2028\u2029]/;
+const lineBreakG = new RegExp(lineBreak.source, "g");
+function isNewLine(code) {
+ switch (code) {
+ case 10:
+ case 13:
+ case 8232:
+ case 8233:
+ return true;
+
+ default:
+ return false;
+ }
+}
+const skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
+const skipWhiteSpaceInLine = /(?:[^\S\n\r\u2028\u2029]|\/\/.*|\/\*.*?\*\/)*/y;
+const skipWhiteSpaceToLineBreak = new RegExp("(?=(" + skipWhiteSpaceInLine.source + "))\\1" + /(?=[\n\r\u2028\u2029]|\/\*(?!.*?\*\/)|$)/.source, "y");
+function isWhitespace(code) {
+ switch (code) {
+ case 0x0009:
+ case 0x000b:
+ case 0x000c:
+ case 32:
+ case 160:
+ case 5760:
+ case 0x2000:
+ case 0x2001:
+ case 0x2002:
+ case 0x2003:
+ case 0x2004:
+ case 0x2005:
+ case 0x2006:
+ case 0x2007:
+ case 0x2008:
+ case 0x2009:
+ case 0x200a:
+ case 0x202f:
+ case 0x205f:
+ case 0x3000:
+ case 0xfeff:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+class Position {
+ constructor(line, col) {
+ this.line = void 0;
+ this.column = void 0;
+ this.line = line;
+ this.column = col;
+ }
+
+}
+class SourceLocation {
+ constructor(start, end) {
+ this.start = void 0;
+ this.end = void 0;
+ this.filename = void 0;
+ this.identifierName = void 0;
+ this.start = start;
+ this.end = end;
+ }
+
+}
+function getLineInfo(input, offset) {
+ let line = 1;
+ let lineStart = 0;
+ let match;
+ lineBreakG.lastIndex = 0;
+
+ while ((match = lineBreakG.exec(input)) && match.index < offset) {
+ line++;
+ lineStart = lineBreakG.lastIndex;
+ }
+
+ return new Position(line, offset - lineStart);
+}
+
+class BaseParser {
+ constructor() {
+ this.sawUnambiguousESM = false;
+ this.ambiguousScriptDifferentAst = false;
+ }
+
+ hasPlugin(name) {
+ return this.plugins.has(name);
+ }
+
+ getPluginOption(plugin, name) {
+ if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];
+ }
+
+}
+
+function setTrailingComments(node, comments) {
+ if (node.trailingComments === undefined) {
+ node.trailingComments = comments;
+ } else {
+ node.trailingComments.unshift(...comments);
+ }
+}
+
+function setInnerComments(node, comments) {
+ if (node.innerComments === undefined) {
+ node.innerComments = comments;
+ } else if (comments !== undefined) {
+ node.innerComments.unshift(...comments);
+ }
+}
+
+function adjustInnerComments(node, elements, commentWS) {
+ let lastElement = null;
+ let i = elements.length;
+
+ while (lastElement === null && i > 0) {
+ lastElement = elements[--i];
+ }
+
+ if (lastElement === null || lastElement.start > commentWS.start) {
+ setInnerComments(node, commentWS.comments);
+ } else {
+ setTrailingComments(lastElement, commentWS.comments);
+ }
+}
+
+class CommentsParser extends BaseParser {
+ addComment(comment) {
+ if (this.filename) comment.loc.filename = this.filename;
+ this.state.comments.push(comment);
+ }
+
+ processComment(node) {
+ const {
+ commentStack
+ } = this.state;
+ const commentStackLength = commentStack.length;
+ if (commentStackLength === 0) return;
+ let i = commentStackLength - 1;
+ const lastCommentWS = commentStack[i];
+
+ if (lastCommentWS.start === node.end) {
+ lastCommentWS.leadingNode = node;
+ i--;
+ }
+
+ const {
+ start: nodeStart
+ } = node;
+
+ for (; i >= 0; i--) {
+ const commentWS = commentStack[i];
+ const commentEnd = commentWS.end;
+
+ if (commentEnd > nodeStart) {
+ commentWS.containingNode = node;
+ this.finalizeComment(commentWS);
+ commentStack.splice(i, 1);
+ } else {
+ if (commentEnd === nodeStart) {
+ commentWS.trailingNode = node;
+ }
+
+ break;
+ }
+ }
+ }
+
+ finalizeComment(commentWS) {
+ const {
+ comments
+ } = commentWS;
+
+ if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {
+ if (commentWS.leadingNode !== null) {
+ setTrailingComments(commentWS.leadingNode, comments);
+ }
+
+ if (commentWS.trailingNode !== null) {
+ commentWS.trailingNode.leadingComments = comments;
+ }
+ } else {
+ const {
+ containingNode: node,
+ start: commentStart
+ } = commentWS;
+
+ if (this.input.charCodeAt(commentStart - 1) === 44) {
+ switch (node.type) {
+ case "ObjectExpression":
+ case "ObjectPattern":
+ case "RecordExpression":
+ adjustInnerComments(node, node.properties, commentWS);
+ break;
+
+ case "CallExpression":
+ case "OptionalCallExpression":
+ adjustInnerComments(node, node.arguments, commentWS);
+ break;
+
+ case "FunctionDeclaration":
+ case "FunctionExpression":
+ case "ArrowFunctionExpression":
+ case "ObjectMethod":
+ case "ClassMethod":
+ case "ClassPrivateMethod":
+ adjustInnerComments(node, node.params, commentWS);
+ break;
+
+ case "ArrayExpression":
+ case "ArrayPattern":
+ case "TupleExpression":
+ adjustInnerComments(node, node.elements, commentWS);
+ break;
+
+ case "ExportNamedDeclaration":
+ case "ImportDeclaration":
+ adjustInnerComments(node, node.specifiers, commentWS);
+ break;
+
+ default:
+ {
+ setInnerComments(node, comments);
+ }
+ }
+ } else {
+ setInnerComments(node, comments);
+ }
+ }
+ }
+
+ finalizeRemainingComments() {
+ const {
+ commentStack
+ } = this.state;
+
+ for (let i = commentStack.length - 1; i >= 0; i--) {
+ this.finalizeComment(commentStack[i]);
+ }
+
+ this.state.commentStack = [];
+ }
+
+ resetPreviousNodeTrailingComments(node) {
+ const {
+ commentStack
+ } = this.state;
+ const {
+ length
+ } = commentStack;
+ if (length === 0) return;
+ const commentWS = commentStack[length - 1];
+
+ if (commentWS.leadingNode === node) {
+ commentWS.leadingNode = null;
+ }
+ }
+
+}
+
+const ErrorCodes = Object.freeze({
+ SyntaxError: "BABEL_PARSER_SYNTAX_ERROR",
+ SourceTypeModuleError: "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED"
+});
+
+const ErrorMessages = makeErrorTemplates({
+ AccessorIsGenerator: "A %0ter cannot be a generator.",
+ ArgumentsInClass: "'arguments' is only allowed in functions and class methods.",
+ AsyncFunctionInSingleStatementContext: "Async functions can only be declared at the top level or inside a block.",
+ AwaitBindingIdentifier: "Can not use 'await' as identifier inside an async function.",
+ AwaitBindingIdentifierInStaticBlock: "Can not use 'await' as identifier inside a static block.",
+ AwaitExpressionFormalParameter: "'await' is not allowed in async function parameters.",
+ AwaitNotInAsyncContext: "'await' is only allowed within async functions and at the top levels of modules.",
+ AwaitNotInAsyncFunction: "'await' is only allowed within async functions.",
+ BadGetterArity: "A 'get' accesor must not have any formal parameters.",
+ BadSetterArity: "A 'set' accesor must have exactly one formal parameter.",
+ BadSetterRestParameter: "A 'set' accesor function argument must not be a rest parameter.",
+ ConstructorClassField: "Classes may not have a field named 'constructor'.",
+ ConstructorClassPrivateField: "Classes may not have a private field named '#constructor'.",
+ ConstructorIsAccessor: "Class constructor may not be an accessor.",
+ ConstructorIsAsync: "Constructor can't be an async function.",
+ ConstructorIsGenerator: "Constructor can't be a generator.",
+ DeclarationMissingInitializer: "'%0' require an initialization value.",
+ DecoratorBeforeExport: "Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.",
+ DecoratorConstructor: "Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?",
+ DecoratorExportClass: "Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.",
+ DecoratorSemicolon: "Decorators must not be followed by a semicolon.",
+ DecoratorStaticBlock: "Decorators can't be used with a static block.",
+ DeletePrivateField: "Deleting a private field is not allowed.",
+ DestructureNamedImport: "ES2015 named imports do not destructure. Use another statement for destructuring after the import.",
+ DuplicateConstructor: "Duplicate constructor in the same class.",
+ DuplicateDefaultExport: "Only one default export allowed per module.",
+ DuplicateExport: "`%0` has already been exported. Exported identifiers must be unique.",
+ DuplicateProto: "Redefinition of __proto__ property.",
+ DuplicateRegExpFlags: "Duplicate regular expression flag.",
+ ElementAfterRest: "Rest element must be last element.",
+ EscapedCharNotAnIdentifier: "Invalid Unicode escape.",
+ ExportBindingIsString: "A string literal cannot be used as an exported binding without `from`.\n- Did you mean `export { '%0' as '%1' } from 'some-module'`?",
+ ExportDefaultFromAsIdentifier: "'from' is not allowed as an identifier after 'export default'.",
+ ForInOfLoopInitializer: "'%0' loop variable declaration may not have an initializer.",
+ ForOfAsync: "The left-hand side of a for-of loop may not be 'async'.",
+ ForOfLet: "The left-hand side of a for-of loop may not start with 'let'.",
+ GeneratorInSingleStatementContext: "Generators can only be declared at the top level or inside a block.",
+ IllegalBreakContinue: "Unsyntactic %0.",
+ IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list.",
+ IllegalReturn: "'return' outside of function.",
+ ImportBindingIsString: 'A string literal cannot be used as an imported binding.\n- Did you mean `import { "%0" as foo }`?',
+ ImportCallArgumentTrailingComma: "Trailing comma is disallowed inside import(...) arguments.",
+ ImportCallArity: "`import()` requires exactly %0.",
+ ImportCallNotNewExpression: "Cannot use new with import(...).",
+ ImportCallSpreadArgument: "`...` is not allowed in `import()`.",
+ InvalidBigIntLiteral: "Invalid BigIntLiteral.",
+ InvalidCodePoint: "Code point out of bounds.",
+ InvalidDecimal: "Invalid decimal.",
+ InvalidDigit: "Expected number in radix %0.",
+ InvalidEscapeSequence: "Bad character escape sequence.",
+ InvalidEscapeSequenceTemplate: "Invalid escape sequence in template.",
+ InvalidEscapedReservedWord: "Escape sequence in keyword %0.",
+ InvalidIdentifier: "Invalid identifier %0.",
+ InvalidLhs: "Invalid left-hand side in %0.",
+ InvalidLhsBinding: "Binding invalid left-hand side in %0.",
+ InvalidNumber: "Invalid number.",
+ InvalidOrMissingExponent: "Floating-point numbers require a valid exponent after the 'e'.",
+ InvalidOrUnexpectedToken: "Unexpected character '%0'.",
+ InvalidParenthesizedAssignment: "Invalid parenthesized assignment pattern.",
+ InvalidPrivateFieldResolution: "Private name #%0 is not defined.",
+ InvalidPropertyBindingPattern: "Binding member expression.",
+ InvalidRecordProperty: "Only properties and spread elements are allowed in record definitions.",
+ InvalidRestAssignmentPattern: "Invalid rest operator's argument.",
+ LabelRedeclaration: "Label '%0' is already declared.",
+ LetInLexicalBinding: "'let' is not allowed to be used as a name in 'let' or 'const' declarations.",
+ LineTerminatorBeforeArrow: "No line break is allowed before '=>'.",
+ MalformedRegExpFlags: "Invalid regular expression flag.",
+ MissingClassName: "A class name is required.",
+ MissingEqInAssignment: "Only '=' operator can be used for specifying default value.",
+ MissingSemicolon: "Missing semicolon.",
+ MissingUnicodeEscape: "Expecting Unicode escape sequence \\uXXXX.",
+ MixingCoalesceWithLogical: "Nullish coalescing operator(??) requires parens when mixing with logical operators.",
+ ModuleAttributeDifferentFromType: "The only accepted module attribute is `type`.",
+ ModuleAttributeInvalidValue: "Only string literals are allowed as module attribute values.",
+ ModuleAttributesWithDuplicateKeys: 'Duplicate key "%0" is not allowed in module attributes.',
+ ModuleExportNameHasLoneSurrogate: "An export name cannot include a lone surrogate, found '\\u%0'.",
+ ModuleExportUndefined: "Export '%0' is not defined.",
+ MultipleDefaultsInSwitch: "Multiple default clauses.",
+ NewlineAfterThrow: "Illegal newline after throw.",
+ NoCatchOrFinally: "Missing catch or finally clause.",
+ NumberIdentifier: "Identifier directly after number.",
+ NumericSeparatorInEscapeSequence: "Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.",
+ ObsoleteAwaitStar: "'await*' has been removed from the async functions proposal. Use Promise.all() instead.",
+ OptionalChainingNoNew: "Constructors in/after an Optional Chain are not allowed.",
+ OptionalChainingNoTemplate: "Tagged Template Literals are not allowed in optionalChain.",
+ OverrideOnConstructor: "'override' modifier cannot appear on a constructor declaration.",
+ ParamDupe: "Argument name clash.",
+ PatternHasAccessor: "Object pattern can't contain getter or setter.",
+ PatternHasMethod: "Object pattern can't contain methods.",
+ PipeBodyIsTighter: "Unexpected %0 after pipeline body; any %0 expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.",
+ PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.',
+ PipeTopicUnbound: "Topic reference is unbound; it must be inside a pipe body.",
+ PipeTopicUnconfiguredToken: 'Invalid topic token %0. In order to use %0 as a topic reference, the pipelineOperator plugin must be configured with { "proposal": "hack", "topicToken": "%0" }.',
+ PipeTopicUnused: "Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.",
+ PipeUnparenthesizedBody: "Hack-style pipe body cannot be an unparenthesized %0 expression; please wrap it in parentheses.",
+ PipelineBodyNoArrow: 'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.',
+ PipelineBodySequenceExpression: "Pipeline body may not be a comma-separated sequence expression.",
+ PipelineHeadSequenceExpression: "Pipeline head should not be a comma-separated sequence expression.",
+ PipelineTopicUnused: "Pipeline is in topic style but does not use topic reference.",
+ PrimaryTopicNotAllowed: "Topic reference was used in a lexical context without topic binding.",
+ PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.',
+ PrivateInExpectedIn: "Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`).",
+ PrivateNameRedeclaration: "Duplicate private name #%0.",
+ RecordExpressionBarIncorrectEndSyntaxType: "Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ RecordExpressionBarIncorrectStartSyntaxType: "Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ RecordExpressionHashIncorrectStartSyntaxType: "Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
+ RecordNoProto: "'__proto__' is not allowed in Record expressions.",
+ RestTrailingComma: "Unexpected trailing comma after rest element.",
+ SloppyFunction: "In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.",
+ StaticPrototype: "Classes may not have static property named prototype.",
+ StrictDelete: "Deleting local variable in strict mode.",
+ StrictEvalArguments: "Assigning to '%0' in strict mode.",
+ StrictEvalArgumentsBinding: "Binding '%0' in strict mode.",
+ StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block.",
+ StrictNumericEscape: "The only valid numeric escape in strict mode is '\\0'.",
+ StrictOctalLiteral: "Legacy octal literals are not allowed in strict mode.",
+ StrictWith: "'with' in strict mode.",
+ SuperNotAllowed: "`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?",
+ SuperPrivateField: "Private fields can't be accessed on super.",
+ TrailingDecorator: "Decorators must be attached to a class element.",
+ TupleExpressionBarIncorrectEndSyntaxType: "Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ TupleExpressionBarIncorrectStartSyntaxType: "Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ TupleExpressionHashIncorrectStartSyntaxType: "Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
+ UnexpectedArgumentPlaceholder: "Unexpected argument placeholder.",
+ UnexpectedAwaitAfterPipelineBody: 'Unexpected "await" after pipeline body; await must have parentheses in minimal proposal.',
+ UnexpectedDigitAfterHash: "Unexpected digit after hash token.",
+ UnexpectedImportExport: "'import' and 'export' may only appear at the top level.",
+ UnexpectedKeyword: "Unexpected keyword '%0'.",
+ UnexpectedLeadingDecorator: "Leading decorators must be attached to a class declaration.",
+ UnexpectedLexicalDeclaration: "Lexical declaration cannot appear in a single-statement context.",
+ UnexpectedNewTarget: "`new.target` can only be used in functions or class properties.",
+ UnexpectedNumericSeparator: "A numeric separator is only allowed between two digits.",
+ UnexpectedPrivateField: "Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\n or a property of member expression (i.e. this.#p).",
+ UnexpectedReservedWord: "Unexpected reserved word '%0'.",
+ UnexpectedSuper: "'super' is only allowed in object methods and classes.",
+ UnexpectedToken: "Unexpected token '%0'.",
+ UnexpectedTokenUnaryExponentiation: "Illegal expression. Wrap left hand side or entire exponentiation in parentheses.",
+ UnsupportedBind: "Binding should be performed on object property.",
+ UnsupportedDecoratorExport: "A decorated export must export a class declaration.",
+ UnsupportedDefaultExport: "Only expressions, functions or classes are allowed as the `default` export.",
+ UnsupportedImport: "`import` can only be used in `import()` or `import.meta`.",
+ UnsupportedMetaProperty: "The only valid meta property for %0 is %0.%1.",
+ UnsupportedParameterDecorator: "Decorators cannot be used to decorate parameters.",
+ UnsupportedPropertyDecorator: "Decorators cannot be used to decorate object literal properties.",
+ UnsupportedSuper: "'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).",
+ UnterminatedComment: "Unterminated comment.",
+ UnterminatedRegExp: "Unterminated regular expression.",
+ UnterminatedString: "Unterminated string constant.",
+ UnterminatedTemplate: "Unterminated template.",
+ VarRedeclaration: "Identifier '%0' has already been declared.",
+ YieldBindingIdentifier: "Can not use 'yield' as identifier inside a generator.",
+ YieldInParameter: "Yield expression is not allowed in formal parameters.",
+ ZeroDigitNumericSeparator: "Numeric separator can not be used after leading 0."
+}, ErrorCodes.SyntaxError);
+const SourceTypeModuleErrorMessages = makeErrorTemplates({
+ ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: "module"'`,
+ ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: "module"'`
+}, ErrorCodes.SourceTypeModuleError);
+
+function keepReasonCodeCompat(reasonCode, syntaxPlugin) {
+ {
+ if (syntaxPlugin === "flow" && reasonCode === "PatternIsOptional") {
+ return "OptionalBindingPattern";
+ }
+ }
+ return reasonCode;
+}
+
+function makeErrorTemplates(messages, code, syntaxPlugin) {
+ const templates = {};
+ Object.keys(messages).forEach(reasonCode => {
+ templates[reasonCode] = Object.freeze({
+ code,
+ reasonCode: keepReasonCodeCompat(reasonCode, syntaxPlugin),
+ template: messages[reasonCode]
+ });
+ });
+ return Object.freeze(templates);
+}
+class ParserError extends CommentsParser {
+ getLocationForPosition(pos) {
+ let loc;
+ if (pos === this.state.start) loc = this.state.startLoc;else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;else if (pos === this.state.end) loc = this.state.endLoc;else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;else loc = getLineInfo(this.input, pos);
+ return loc;
+ }
+
+ raise(pos, {
+ code,
+ reasonCode,
+ template
+ }, ...params) {
+ return this.raiseWithData(pos, {
+ code,
+ reasonCode
+ }, template, ...params);
+ }
+
+ raiseOverwrite(pos, {
+ code,
+ template
+ }, ...params) {
+ const loc = this.getLocationForPosition(pos);
+ const message = template.replace(/%(\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;
+
+ if (this.options.errorRecovery) {
+ const errors = this.state.errors;
+
+ for (let i = errors.length - 1; i >= 0; i--) {
+ const error = errors[i];
+
+ if (error.pos === pos) {
+ return Object.assign(error, {
+ message
+ });
+ } else if (error.pos < pos) {
+ break;
+ }
+ }
+ }
+
+ return this._raise({
+ code,
+ loc,
+ pos
+ }, message);
+ }
+
+ raiseWithData(pos, data, errorTemplate, ...params) {
+ const loc = this.getLocationForPosition(pos);
+ const message = errorTemplate.replace(/%(\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;
+ return this._raise(Object.assign({
+ loc,
+ pos
+ }, data), message);
+ }
+
+ _raise(errorContext, message) {
+ const err = new SyntaxError(message);
+ Object.assign(err, errorContext);
+
+ if (this.options.errorRecovery) {
+ if (!this.isLookahead) this.state.errors.push(err);
+ return err;
+ } else {
+ throw err;
+ }
+ }
+
+}
+
+var estree = (superClass => class extends superClass {
+ parseRegExpLiteral({
+ pattern,
+ flags
+ }) {
+ let regex = null;
+
+ try {
+ regex = new RegExp(pattern, flags);
+ } catch (e) {}
+
+ const node = this.estreeParseLiteral(regex);
+ node.regex = {
+ pattern,
+ flags
+ };
+ return node;
+ }
+
+ parseBigIntLiteral(value) {
+ let bigInt;
+
+ try {
+ bigInt = BigInt(value);
+ } catch (_unused) {
+ bigInt = null;
+ }
+
+ const node = this.estreeParseLiteral(bigInt);
+ node.bigint = String(node.value || value);
+ return node;
+ }
+
+ parseDecimalLiteral(value) {
+ const decimal = null;
+ const node = this.estreeParseLiteral(decimal);
+ node.decimal = String(node.value || value);
+ return node;
+ }
+
+ estreeParseLiteral(value) {
+ return this.parseLiteral(value, "Literal");
+ }
+
+ parseStringLiteral(value) {
+ return this.estreeParseLiteral(value);
+ }
+
+ parseNumericLiteral(value) {
+ return this.estreeParseLiteral(value);
+ }
+
+ parseNullLiteral() {
+ return this.estreeParseLiteral(null);
+ }
+
+ parseBooleanLiteral(value) {
+ return this.estreeParseLiteral(value);
+ }
+
+ directiveToStmt(directive) {
+ const directiveLiteral = directive.value;
+ const stmt = this.startNodeAt(directive.start, directive.loc.start);
+ const expression = this.startNodeAt(directiveLiteral.start, directiveLiteral.loc.start);
+ expression.value = directiveLiteral.extra.expressionValue;
+ expression.raw = directiveLiteral.extra.raw;
+ stmt.expression = this.finishNodeAt(expression, "Literal", directiveLiteral.end, directiveLiteral.loc.end);
+ stmt.directive = directiveLiteral.extra.raw.slice(1, -1);
+ return this.finishNodeAt(stmt, "ExpressionStatement", directive.end, directive.loc.end);
+ }
+
+ initFunction(node, isAsync) {
+ super.initFunction(node, isAsync);
+ node.expression = false;
+ }
+
+ checkDeclaration(node) {
+ if (node != null && this.isObjectProperty(node)) {
+ this.checkDeclaration(node.value);
+ } else {
+ super.checkDeclaration(node);
+ }
+ }
+
+ getObjectOrClassMethodParams(method) {
+ return method.value.params;
+ }
+
+ isValidDirective(stmt) {
+ var _stmt$expression$extr;
+
+ return stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && typeof stmt.expression.value === "string" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized);
+ }
+
+ stmtToDirective(stmt) {
+ const value = stmt.expression.value;
+ const directive = super.stmtToDirective(stmt);
+ this.addExtra(directive.value, "expressionValue", value);
+ return directive;
+ }
+
+ parseBlockBody(node, ...args) {
+ super.parseBlockBody(node, ...args);
+ const directiveStatements = node.directives.map(d => this.directiveToStmt(d));
+ node.body = directiveStatements.concat(node.body);
+ delete node.directives;
+ }
+
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true);
+
+ if (method.typeParameters) {
+ method.value.typeParameters = method.typeParameters;
+ delete method.typeParameters;
+ }
+
+ classBody.body.push(method);
+ }
+
+ parsePrivateName() {
+ const node = super.parsePrivateName();
+
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return node;
+ }
+
+ return this.convertPrivateNameToPrivateIdentifier(node);
+ }
+
+ convertPrivateNameToPrivateIdentifier(node) {
+ const name = super.getPrivateNameSV(node);
+ node = node;
+ delete node.id;
+ node.name = name;
+ node.type = "PrivateIdentifier";
+ return node;
+ }
+
+ isPrivateName(node) {
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return super.isPrivateName(node);
+ }
+
+ return node.type === "PrivateIdentifier";
+ }
+
+ getPrivateNameSV(node) {
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return super.getPrivateNameSV(node);
+ }
+
+ return node.name;
+ }
+
+ parseLiteral(value, type) {
+ const node = super.parseLiteral(value, type);
+ node.raw = node.extra.raw;
+ delete node.extra;
+ return node;
+ }
+
+ parseFunctionBody(node, allowExpression, isMethod = false) {
+ super.parseFunctionBody(node, allowExpression, isMethod);
+ node.expression = node.body.type !== "BlockStatement";
+ }
+
+ parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {
+ let funcNode = this.startNode();
+ funcNode.kind = node.kind;
+ funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);
+ funcNode.type = "FunctionExpression";
+ delete funcNode.kind;
+ node.value = funcNode;
+
+ if (type === "ClassPrivateMethod") {
+ node.computed = false;
+ }
+
+ type = "MethodDefinition";
+ return this.finishNode(node, type);
+ }
+
+ parseClassProperty(...args) {
+ const propertyNode = super.parseClassProperty(...args);
+
+ if (this.getPluginOption("estree", "classFeatures")) {
+ propertyNode.type = "PropertyDefinition";
+ }
+
+ return propertyNode;
+ }
+
+ parseClassPrivateProperty(...args) {
+ const propertyNode = super.parseClassPrivateProperty(...args);
+
+ if (this.getPluginOption("estree", "classFeatures")) {
+ propertyNode.type = "PropertyDefinition";
+ propertyNode.computed = false;
+ }
+
+ return propertyNode;
+ }
+
+ parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {
+ const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);
+
+ if (node) {
+ node.type = "Property";
+ if (node.kind === "method") node.kind = "init";
+ node.shorthand = false;
+ }
+
+ return node;
+ }
+
+ parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {
+ const node = super.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);
+
+ if (node) {
+ node.kind = "init";
+ node.type = "Property";
+ }
+
+ return node;
+ }
+
+ isAssignable(node, isBinding) {
+ if (node != null && this.isObjectProperty(node)) {
+ return this.isAssignable(node.value, isBinding);
+ }
+
+ return super.isAssignable(node, isBinding);
+ }
+
+ toAssignable(node, isLHS = false) {
+ if (node != null && this.isObjectProperty(node)) {
+ this.toAssignable(node.value, isLHS);
+ return node;
+ }
+
+ return super.toAssignable(node, isLHS);
+ }
+
+ toAssignableObjectExpressionProp(prop, ...args) {
+ if (prop.kind === "get" || prop.kind === "set") {
+ this.raise(prop.key.start, ErrorMessages.PatternHasAccessor);
+ } else if (prop.method) {
+ this.raise(prop.key.start, ErrorMessages.PatternHasMethod);
+ } else {
+ super.toAssignableObjectExpressionProp(prop, ...args);
+ }
+ }
+
+ finishCallExpression(node, optional) {
+ super.finishCallExpression(node, optional);
+
+ if (node.callee.type === "Import") {
+ node.type = "ImportExpression";
+ node.source = node.arguments[0];
+
+ if (this.hasPlugin("importAssertions")) {
+ var _node$arguments$;
+
+ node.attributes = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;
+ }
+
+ delete node.arguments;
+ delete node.callee;
+ }
+
+ return node;
+ }
+
+ toReferencedArguments(node) {
+ if (node.type === "ImportExpression") {
+ return;
+ }
+
+ super.toReferencedArguments(node);
+ }
+
+ parseExport(node) {
+ super.parseExport(node);
+
+ switch (node.type) {
+ case "ExportAllDeclaration":
+ node.exported = null;
+ break;
+
+ case "ExportNamedDeclaration":
+ if (node.specifiers.length === 1 && node.specifiers[0].type === "ExportNamespaceSpecifier") {
+ node.type = "ExportAllDeclaration";
+ node.exported = node.specifiers[0].exported;
+ delete node.specifiers;
+ }
+
+ break;
+ }
+
+ return node;
+ }
+
+ parseSubscript(base, startPos, startLoc, noCalls, state) {
+ const node = super.parseSubscript(base, startPos, startLoc, noCalls, state);
+
+ if (state.optionalChainMember) {
+ if (node.type === "OptionalMemberExpression" || node.type === "OptionalCallExpression") {
+ node.type = node.type.substring(8);
+ }
+
+ if (state.stop) {
+ const chain = this.startNodeAtNode(node);
+ chain.expression = node;
+ return this.finishNode(chain, "ChainExpression");
+ }
+ } else if (node.type === "MemberExpression" || node.type === "CallExpression") {
+ node.optional = false;
+ }
+
+ return node;
+ }
+
+ hasPropertyAsPrivateName(node) {
+ if (node.type === "ChainExpression") {
+ node = node.expression;
+ }
+
+ return super.hasPropertyAsPrivateName(node);
+ }
+
+ isOptionalChain(node) {
+ return node.type === "ChainExpression";
+ }
+
+ isObjectProperty(node) {
+ return node.type === "Property" && node.kind === "init" && !node.method;
+ }
+
+ isObjectMethod(node) {
+ return node.method || node.kind === "get" || node.kind === "set";
+ }
+
+});
+
+class TokContext {
+ constructor(token, preserveSpace) {
+ this.token = void 0;
+ this.preserveSpace = void 0;
+ this.token = token;
+ this.preserveSpace = !!preserveSpace;
+ }
+
+}
+const types = {
+ brace: new TokContext("{"),
+ template: new TokContext("`", true)
+};
+
+const beforeExpr = true;
+const startsExpr = true;
+const isLoop = true;
+const isAssign = true;
+const prefix = true;
+const postfix = true;
+class ExportedTokenType {
+ constructor(label, conf = {}) {
+ this.label = void 0;
+ this.keyword = void 0;
+ this.beforeExpr = void 0;
+ this.startsExpr = void 0;
+ this.rightAssociative = void 0;
+ this.isLoop = void 0;
+ this.isAssign = void 0;
+ this.prefix = void 0;
+ this.postfix = void 0;
+ this.binop = void 0;
+ this.label = label;
+ this.keyword = conf.keyword;
+ this.beforeExpr = !!conf.beforeExpr;
+ this.startsExpr = !!conf.startsExpr;
+ this.rightAssociative = !!conf.rightAssociative;
+ this.isLoop = !!conf.isLoop;
+ this.isAssign = !!conf.isAssign;
+ this.prefix = !!conf.prefix;
+ this.postfix = !!conf.postfix;
+ this.binop = conf.binop != null ? conf.binop : null;
+ {
+ this.updateContext = null;
+ }
+ }
+
+}
+const keywords$1 = new Map();
+
+function createKeyword(name, options = {}) {
+ options.keyword = name;
+ const token = createToken(name, options);
+ keywords$1.set(name, token);
+ return token;
+}
+
+function createBinop(name, binop) {
+ return createToken(name, {
+ beforeExpr,
+ binop
+ });
+}
+
+let tokenTypeCounter = -1;
+const tokenTypes = [];
+const tokenLabels = [];
+const tokenBinops = [];
+const tokenBeforeExprs = [];
+const tokenStartsExprs = [];
+const tokenPrefixes = [];
+
+function createToken(name, options = {}) {
+ var _options$binop, _options$beforeExpr, _options$startsExpr, _options$prefix;
+
+ ++tokenTypeCounter;
+ tokenLabels.push(name);
+ tokenBinops.push((_options$binop = options.binop) != null ? _options$binop : -1);
+ tokenBeforeExprs.push((_options$beforeExpr = options.beforeExpr) != null ? _options$beforeExpr : false);
+ tokenStartsExprs.push((_options$startsExpr = options.startsExpr) != null ? _options$startsExpr : false);
+ tokenPrefixes.push((_options$prefix = options.prefix) != null ? _options$prefix : false);
+ tokenTypes.push(new ExportedTokenType(name, options));
+ return tokenTypeCounter;
+}
+
+const tt = {
+ num: createToken("num", {
+ startsExpr
+ }),
+ bigint: createToken("bigint", {
+ startsExpr
+ }),
+ decimal: createToken("decimal", {
+ startsExpr
+ }),
+ regexp: createToken("regexp", {
+ startsExpr
+ }),
+ string: createToken("string", {
+ startsExpr
+ }),
+ name: createToken("name", {
+ startsExpr
+ }),
+ privateName: createToken("#name", {
+ startsExpr
+ }),
+ eof: createToken("eof"),
+ bracketL: createToken("[", {
+ beforeExpr,
+ startsExpr
+ }),
+ bracketHashL: createToken("#[", {
+ beforeExpr,
+ startsExpr
+ }),
+ bracketBarL: createToken("[|", {
+ beforeExpr,
+ startsExpr
+ }),
+ bracketR: createToken("]"),
+ bracketBarR: createToken("|]"),
+ braceL: createToken("{", {
+ beforeExpr,
+ startsExpr
+ }),
+ braceBarL: createToken("{|", {
+ beforeExpr,
+ startsExpr
+ }),
+ braceHashL: createToken("#{", {
+ beforeExpr,
+ startsExpr
+ }),
+ braceR: createToken("}", {
+ beforeExpr
+ }),
+ braceBarR: createToken("|}"),
+ parenL: createToken("(", {
+ beforeExpr,
+ startsExpr
+ }),
+ parenR: createToken(")"),
+ comma: createToken(",", {
+ beforeExpr
+ }),
+ semi: createToken(";", {
+ beforeExpr
+ }),
+ colon: createToken(":", {
+ beforeExpr
+ }),
+ doubleColon: createToken("::", {
+ beforeExpr
+ }),
+ dot: createToken("."),
+ question: createToken("?", {
+ beforeExpr
+ }),
+ questionDot: createToken("?."),
+ arrow: createToken("=>", {
+ beforeExpr
+ }),
+ template: createToken("template"),
+ ellipsis: createToken("...", {
+ beforeExpr
+ }),
+ backQuote: createToken("`", {
+ startsExpr
+ }),
+ dollarBraceL: createToken("${", {
+ beforeExpr,
+ startsExpr
+ }),
+ at: createToken("@"),
+ hash: createToken("#", {
+ startsExpr
+ }),
+ interpreterDirective: createToken("#!..."),
+ eq: createToken("=", {
+ beforeExpr,
+ isAssign
+ }),
+ assign: createToken("_=", {
+ beforeExpr,
+ isAssign
+ }),
+ slashAssign: createToken("_=", {
+ beforeExpr,
+ isAssign
+ }),
+ moduloAssign: createToken("_=", {
+ beforeExpr,
+ isAssign
+ }),
+ incDec: createToken("++/--", {
+ prefix,
+ postfix,
+ startsExpr
+ }),
+ bang: createToken("!", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ tilde: createToken("~", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ pipeline: createBinop("|>", 0),
+ nullishCoalescing: createBinop("??", 1),
+ logicalOR: createBinop("||", 1),
+ logicalAND: createBinop("&&", 2),
+ bitwiseOR: createBinop("|", 3),
+ bitwiseXOR: createBinop("^", 4),
+ bitwiseAND: createBinop("&", 5),
+ equality: createBinop("==/!=/===/!==", 6),
+ relational: createBinop("</>/<=/>=", 7),
+ bitShift: createBinop("<</>>/>>>", 8),
+ plusMin: createToken("+/-", {
+ beforeExpr,
+ binop: 9,
+ prefix,
+ startsExpr
+ }),
+ modulo: createToken("%", {
+ binop: 10,
+ startsExpr
+ }),
+ star: createToken("*", {
+ binop: 10
+ }),
+ slash: createBinop("/", 10),
+ exponent: createToken("**", {
+ beforeExpr,
+ binop: 11,
+ rightAssociative: true
+ }),
+ _in: createKeyword("in", {
+ beforeExpr,
+ binop: 7
+ }),
+ _instanceof: createKeyword("instanceof", {
+ beforeExpr,
+ binop: 7
+ }),
+ _break: createKeyword("break"),
+ _case: createKeyword("case", {
+ beforeExpr
+ }),
+ _catch: createKeyword("catch"),
+ _continue: createKeyword("continue"),
+ _debugger: createKeyword("debugger"),
+ _default: createKeyword("default", {
+ beforeExpr
+ }),
+ _else: createKeyword("else", {
+ beforeExpr
+ }),
+ _finally: createKeyword("finally"),
+ _function: createKeyword("function", {
+ startsExpr
+ }),
+ _if: createKeyword("if"),
+ _return: createKeyword("return", {
+ beforeExpr
+ }),
+ _switch: createKeyword("switch"),
+ _throw: createKeyword("throw", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _try: createKeyword("try"),
+ _var: createKeyword("var"),
+ _const: createKeyword("const"),
+ _with: createKeyword("with"),
+ _new: createKeyword("new", {
+ beforeExpr,
+ startsExpr
+ }),
+ _this: createKeyword("this", {
+ startsExpr
+ }),
+ _super: createKeyword("super", {
+ startsExpr
+ }),
+ _class: createKeyword("class", {
+ startsExpr
+ }),
+ _extends: createKeyword("extends", {
+ beforeExpr
+ }),
+ _export: createKeyword("export"),
+ _import: createKeyword("import", {
+ startsExpr
+ }),
+ _null: createKeyword("null", {
+ startsExpr
+ }),
+ _true: createKeyword("true", {
+ startsExpr
+ }),
+ _false: createKeyword("false", {
+ startsExpr
+ }),
+ _typeof: createKeyword("typeof", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _void: createKeyword("void", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _delete: createKeyword("delete", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _do: createKeyword("do", {
+ isLoop,
+ beforeExpr
+ }),
+ _for: createKeyword("for", {
+ isLoop
+ }),
+ _while: createKeyword("while", {
+ isLoop
+ }),
+ jsxName: createToken("jsxName"),
+ jsxText: createToken("jsxText", {
+ beforeExpr: true
+ }),
+ jsxTagStart: createToken("jsxTagStart", {
+ startsExpr: true
+ }),
+ jsxTagEnd: createToken("jsxTagEnd"),
+ placeholder: createToken("%%", {
+ startsExpr: true
+ })
+};
+function tokenComesBeforeExpression(token) {
+ return tokenBeforeExprs[token];
+}
+function tokenCanStartExpression(token) {
+ return tokenStartsExprs[token];
+}
+function tokenIsAssignment(token) {
+ return token >= 35 && token <= 38;
+}
+function tokenIsLoop(token) {
+ return token >= 89 && token <= 91;
+}
+function tokenIsKeyword(token) {
+ return token >= 57 && token <= 91;
+}
+function tokenIsOperator(token) {
+ return token >= 42 && token <= 58;
+}
+function tokenIsPostfix(token) {
+ return token === 39;
+}
+function tokenIsPrefix(token) {
+ return tokenPrefixes[token];
+}
+function tokenLabelName(token) {
+ return tokenLabels[token];
+}
+function tokenOperatorPrecedence(token) {
+ return tokenBinops[token];
+}
+function tokenIsRightAssociative(token) {
+ return token === 56;
+}
+function getExportedToken(token) {
+ return tokenTypes[token];
+}
+function isTokenType(obj) {
+ return typeof obj === "number";
+}
+{
+ tokenTypes[16].updateContext = context => {
+ context.pop();
+ };
+
+ tokenTypes[13].updateContext = tokenTypes[15].updateContext = tokenTypes[31].updateContext = context => {
+ context.push(types.brace);
+ };
+
+ tokenTypes[30].updateContext = context => {
+ if (context[context.length - 1] === types.template) {
+ context.pop();
+ } else {
+ context.push(types.template);
+ }
+ };
+
+ tokenTypes[94].updateContext = context => {
+ context.push(types.j_expr, types.j_oTag);
+ };
+}
+
+let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
+let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
+const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
+const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
+nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
+const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];
+const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
+
+function isInAstralSet(code, set) {
+ let pos = 0x10000;
+
+ for (let i = 0, length = set.length; i < length; i += 2) {
+ pos += set[i];
+ if (pos > code) return false;
+ pos += set[i + 1];
+ if (pos >= code) return true;
+ }
+
+ return false;
+}
+
+function isIdentifierStart(code) {
+ if (code < 65) return code === 36;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
+ }
+
+ return isInAstralSet(code, astralIdentifierStartCodes);
+}
+function isIdentifierChar(code) {
+ if (code < 48) return code === 36;
+ if (code < 58) return true;
+ if (code < 65) return false;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
+ }
+
+ return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
+}
+
+const reservedWords = {
+ keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
+ strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
+ strictBind: ["eval", "arguments"]
+};
+const keywords = new Set(reservedWords.keyword);
+const reservedWordsStrictSet = new Set(reservedWords.strict);
+const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
+function isReservedWord(word, inModule) {
+ return inModule && word === "await" || word === "enum";
+}
+function isStrictReservedWord(word, inModule) {
+ return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
+}
+function isStrictBindOnlyReservedWord(word) {
+ return reservedWordsStrictBindSet.has(word);
+}
+function isStrictBindReservedWord(word, inModule) {
+ return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
+}
+function isKeyword(word) {
+ return keywords.has(word);
+}
+
+function isIteratorStart(current, next) {
+ return current === 64 && next === 64;
+}
+const reservedWordLikeSet = new Set(["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete", "implements", "interface", "let", "package", "private", "protected", "public", "static", "yield", "eval", "arguments", "enum", "await"]);
+function canBeReservedWord(word) {
+ return reservedWordLikeSet.has(word);
+}
+
+const SCOPE_OTHER = 0b000000000,
+ SCOPE_PROGRAM = 0b000000001,
+ SCOPE_FUNCTION = 0b000000010,
+ SCOPE_ARROW = 0b000000100,
+ SCOPE_SIMPLE_CATCH = 0b000001000,
+ SCOPE_SUPER = 0b000010000,
+ SCOPE_DIRECT_SUPER = 0b000100000,
+ SCOPE_CLASS = 0b001000000,
+ SCOPE_STATIC_BLOCK = 0b010000000,
+ SCOPE_TS_MODULE = 0b100000000,
+ SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;
+const BIND_KIND_VALUE = 0b000000000001,
+ BIND_KIND_TYPE = 0b000000000010,
+ BIND_SCOPE_VAR = 0b000000000100,
+ BIND_SCOPE_LEXICAL = 0b000000001000,
+ BIND_SCOPE_FUNCTION = 0b000000010000,
+ BIND_FLAGS_NONE = 0b000001000000,
+ BIND_FLAGS_CLASS = 0b000010000000,
+ BIND_FLAGS_TS_ENUM = 0b000100000000,
+ BIND_FLAGS_TS_CONST_ENUM = 0b001000000000,
+ BIND_FLAGS_TS_EXPORT_ONLY = 0b010000000000,
+ BIND_FLAGS_FLOW_DECLARE_FN = 0b100000000000;
+const BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS,
+ BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0,
+ BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0,
+ BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0,
+ BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS,
+ BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0,
+ BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM,
+ BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,
+ BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE,
+ BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE,
+ BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,
+ BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,
+ BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;
+const CLASS_ELEMENT_FLAG_STATIC = 0b100,
+ CLASS_ELEMENT_KIND_GETTER = 0b010,
+ CLASS_ELEMENT_KIND_SETTER = 0b001,
+ CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;
+const CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,
+ CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,
+ CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,
+ CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,
+ CLASS_ELEMENT_OTHER = 0;
+
+class Scope {
+ constructor(flags) {
+ this.var = new Set();
+ this.lexical = new Set();
+ this.functions = new Set();
+ this.flags = flags;
+ }
+
+}
+class ScopeHandler {
+ constructor(raise, inModule) {
+ this.scopeStack = [];
+ this.undefinedExports = new Map();
+ this.undefinedPrivateNames = new Map();
+ this.raise = raise;
+ this.inModule = inModule;
+ }
+
+ get inFunction() {
+ return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;
+ }
+
+ get allowSuper() {
+ return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;
+ }
+
+ get allowDirectSuper() {
+ return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;
+ }
+
+ get inClass() {
+ return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;
+ }
+
+ get inClassAndNotInNonArrowFunction() {
+ const flags = this.currentThisScopeFlags();
+ return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;
+ }
+
+ get inStaticBlock() {
+ for (let i = this.scopeStack.length - 1;; i--) {
+ const {
+ flags
+ } = this.scopeStack[i];
+
+ if (flags & SCOPE_STATIC_BLOCK) {
+ return true;
+ }
+
+ if (flags & (SCOPE_VAR | SCOPE_CLASS)) {
+ return false;
+ }
+ }
+ }
+
+ get inNonArrowFunction() {
+ return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;
+ }
+
+ get treatFunctionsAsVar() {
+ return this.treatFunctionsAsVarInScope(this.currentScope());
+ }
+
+ createScope(flags) {
+ return new Scope(flags);
+ }
+
+ enter(flags) {
+ this.scopeStack.push(this.createScope(flags));
+ }
+
+ exit() {
+ this.scopeStack.pop();
+ }
+
+ treatFunctionsAsVarInScope(scope) {
+ return !!(scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_PROGRAM);
+ }
+
+ declareName(name, bindingType, pos) {
+ let scope = this.currentScope();
+
+ if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {
+ this.checkRedeclarationInScope(scope, name, bindingType, pos);
+
+ if (bindingType & BIND_SCOPE_FUNCTION) {
+ scope.functions.add(name);
+ } else {
+ scope.lexical.add(name);
+ }
+
+ if (bindingType & BIND_SCOPE_LEXICAL) {
+ this.maybeExportDefined(scope, name);
+ }
+ } else if (bindingType & BIND_SCOPE_VAR) {
+ for (let i = this.scopeStack.length - 1; i >= 0; --i) {
+ scope = this.scopeStack[i];
+ this.checkRedeclarationInScope(scope, name, bindingType, pos);
+ scope.var.add(name);
+ this.maybeExportDefined(scope, name);
+ if (scope.flags & SCOPE_VAR) break;
+ }
+ }
+
+ if (this.inModule && scope.flags & SCOPE_PROGRAM) {
+ this.undefinedExports.delete(name);
+ }
+ }
+
+ maybeExportDefined(scope, name) {
+ if (this.inModule && scope.flags & SCOPE_PROGRAM) {
+ this.undefinedExports.delete(name);
+ }
+ }
+
+ checkRedeclarationInScope(scope, name, bindingType, pos) {
+ if (this.isRedeclaredInScope(scope, name, bindingType)) {
+ this.raise(pos, ErrorMessages.VarRedeclaration, name);
+ }
+ }
+
+ isRedeclaredInScope(scope, name, bindingType) {
+ if (!(bindingType & BIND_KIND_VALUE)) return false;
+
+ if (bindingType & BIND_SCOPE_LEXICAL) {
+ return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);
+ }
+
+ if (bindingType & BIND_SCOPE_FUNCTION) {
+ return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);
+ }
+
+ return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);
+ }
+
+ checkLocalExport(id) {
+ const {
+ name
+ } = id;
+ const topLevelScope = this.scopeStack[0];
+
+ if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) {
+ this.undefinedExports.set(name, id.start);
+ }
+ }
+
+ currentScope() {
+ return this.scopeStack[this.scopeStack.length - 1];
+ }
+
+ currentVarScopeFlags() {
+ for (let i = this.scopeStack.length - 1;; i--) {
+ const {
+ flags
+ } = this.scopeStack[i];
+
+ if (flags & SCOPE_VAR) {
+ return flags;
+ }
+ }
+ }
+
+ currentThisScopeFlags() {
+ for (let i = this.scopeStack.length - 1;; i--) {
+ const {
+ flags
+ } = this.scopeStack[i];
+
+ if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {
+ return flags;
+ }
+ }
+ }
+
+}
+
+class FlowScope extends Scope {
+ constructor(...args) {
+ super(...args);
+ this.declareFunctions = new Set();
+ }
+
+}
+
+class FlowScopeHandler extends ScopeHandler {
+ createScope(flags) {
+ return new FlowScope(flags);
+ }
+
+ declareName(name, bindingType, pos) {
+ const scope = this.currentScope();
+
+ if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {
+ this.checkRedeclarationInScope(scope, name, bindingType, pos);
+ this.maybeExportDefined(scope, name);
+ scope.declareFunctions.add(name);
+ return;
+ }
+
+ super.declareName(...arguments);
+ }
+
+ isRedeclaredInScope(scope, name, bindingType) {
+ if (super.isRedeclaredInScope(...arguments)) return true;
+
+ if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {
+ return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name));
+ }
+
+ return false;
+ }
+
+ checkLocalExport(id) {
+ if (!this.scopeStack[0].declareFunctions.has(id.name)) {
+ super.checkLocalExport(id);
+ }
+ }
+
+}
+
+class State {
+ constructor() {
+ this.strict = void 0;
+ this.curLine = void 0;
+ this.startLoc = void 0;
+ this.endLoc = void 0;
+ this.errors = [];
+ this.potentialArrowAt = -1;
+ this.noArrowAt = [];
+ this.noArrowParamsConversionAt = [];
+ this.maybeInArrowParameters = false;
+ this.inType = false;
+ this.noAnonFunctionType = false;
+ this.inPropertyName = false;
+ this.hasFlowComment = false;
+ this.isAmbientContext = false;
+ this.inAbstractClass = false;
+ this.topicContext = {
+ maxNumOfResolvableTopics: 0,
+ maxTopicIndex: null
+ };
+ this.soloAwait = false;
+ this.inFSharpPipelineDirectBody = false;
+ this.labels = [];
+ this.decoratorStack = [[]];
+ this.comments = [];
+ this.commentStack = [];
+ this.pos = 0;
+ this.lineStart = 0;
+ this.type = 7;
+ this.value = null;
+ this.start = 0;
+ this.end = 0;
+ this.lastTokEndLoc = null;
+ this.lastTokStartLoc = null;
+ this.lastTokStart = 0;
+ this.lastTokEnd = 0;
+ this.context = [types.brace];
+ this.exprAllowed = true;
+ this.containsEsc = false;
+ this.strictErrors = new Map();
+ this.tokensLength = 0;
+ }
+
+ init(options) {
+ this.strict = options.strictMode === false ? false : options.strictMode === true ? true : options.sourceType === "module";
+ this.curLine = options.startLine;
+ this.startLoc = this.endLoc = this.curPosition();
+ }
+
+ curPosition() {
+ return new Position(this.curLine, this.pos - this.lineStart);
+ }
+
+ clone(skipArrays) {
+ const state = new State();
+ const keys = Object.keys(this);
+
+ for (let i = 0, length = keys.length; i < length; i++) {
+ const key = keys[i];
+ let val = this[key];
+
+ if (!skipArrays && Array.isArray(val)) {
+ val = val.slice();
+ }
+
+ state[key] = val;
+ }
+
+ return state;
+ }
+
+}
+
+var _isDigit = function isDigit(code) {
+ return code >= 48 && code <= 57;
+};
+const VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100]);
+const forbiddenNumericSeparatorSiblings = {
+ decBinOct: [46, 66, 69, 79, 95, 98, 101, 111],
+ hex: [46, 88, 95, 120]
+};
+const allowedNumericSeparatorSiblings = {};
+allowedNumericSeparatorSiblings.bin = [48, 49];
+allowedNumericSeparatorSiblings.oct = [...allowedNumericSeparatorSiblings.bin, 50, 51, 52, 53, 54, 55];
+allowedNumericSeparatorSiblings.dec = [...allowedNumericSeparatorSiblings.oct, 56, 57];
+allowedNumericSeparatorSiblings.hex = [...allowedNumericSeparatorSiblings.dec, 65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102];
+class Token {
+ constructor(state) {
+ this.type = state.type;
+ this.value = state.value;
+ this.start = state.start;
+ this.end = state.end;
+ this.loc = new SourceLocation(state.startLoc, state.endLoc);
+ }
+
+}
+class Tokenizer extends ParserError {
+ constructor(options, input) {
+ super();
+ this.isLookahead = void 0;
+ this.tokens = [];
+ this.state = new State();
+ this.state.init(options);
+ this.input = input;
+ this.length = input.length;
+ this.isLookahead = false;
+ }
+
+ pushToken(token) {
+ this.tokens.length = this.state.tokensLength;
+ this.tokens.push(token);
+ ++this.state.tokensLength;
+ }
+
+ next() {
+ this.checkKeywordEscapes();
+
+ if (this.options.tokens) {
+ this.pushToken(new Token(this.state));
+ }
+
+ this.state.lastTokEnd = this.state.end;
+ this.state.lastTokStart = this.state.start;
+ this.state.lastTokEndLoc = this.state.endLoc;
+ this.state.lastTokStartLoc = this.state.startLoc;
+ this.nextToken();
+ }
+
+ eat(type) {
+ if (this.match(type)) {
+ this.next();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ match(type) {
+ return this.state.type === type;
+ }
+
+ createLookaheadState(state) {
+ return {
+ pos: state.pos,
+ value: null,
+ type: state.type,
+ start: state.start,
+ end: state.end,
+ lastTokEnd: state.end,
+ context: [this.curContext()],
+ inType: state.inType
+ };
+ }
+
+ lookahead() {
+ const old = this.state;
+ this.state = this.createLookaheadState(old);
+ this.isLookahead = true;
+ this.nextToken();
+ this.isLookahead = false;
+ const curr = this.state;
+ this.state = old;
+ return curr;
+ }
+
+ nextTokenStart() {
+ return this.nextTokenStartSince(this.state.pos);
+ }
+
+ nextTokenStartSince(pos) {
+ skipWhiteSpace.lastIndex = pos;
+ return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;
+ }
+
+ lookaheadCharCode() {
+ return this.input.charCodeAt(this.nextTokenStart());
+ }
+
+ codePointAtPos(pos) {
+ let cp = this.input.charCodeAt(pos);
+
+ if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {
+ const trail = this.input.charCodeAt(pos);
+
+ if ((trail & 0xfc00) === 0xdc00) {
+ cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
+ }
+ }
+
+ return cp;
+ }
+
+ setStrict(strict) {
+ this.state.strict = strict;
+
+ if (strict) {
+ this.state.strictErrors.forEach((message, pos) => this.raise(pos, message));
+ this.state.strictErrors.clear();
+ }
+ }
+
+ curContext() {
+ return this.state.context[this.state.context.length - 1];
+ }
+
+ nextToken() {
+ const curContext = this.curContext();
+ if (!curContext.preserveSpace) this.skipSpace();
+ this.state.start = this.state.pos;
+ if (!this.isLookahead) this.state.startLoc = this.state.curPosition();
+
+ if (this.state.pos >= this.length) {
+ this.finishToken(7);
+ return;
+ }
+
+ if (curContext === types.template) {
+ this.readTmplToken();
+ } else {
+ this.getTokenFromCode(this.codePointAtPos(this.state.pos));
+ }
+ }
+
+ skipBlockComment() {
+ let startLoc;
+ if (!this.isLookahead) startLoc = this.state.curPosition();
+ const start = this.state.pos;
+ const end = this.input.indexOf("*/", start + 2);
+ if (end === -1) throw this.raise(start, ErrorMessages.UnterminatedComment);
+ this.state.pos = end + 2;
+ lineBreakG.lastIndex = start + 2;
+
+ while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {
+ ++this.state.curLine;
+ this.state.lineStart = lineBreakG.lastIndex;
+ }
+
+ if (this.isLookahead) return;
+ const comment = {
+ type: "CommentBlock",
+ value: this.input.slice(start + 2, end),
+ start,
+ end: end + 2,
+ loc: new SourceLocation(startLoc, this.state.curPosition())
+ };
+ if (this.options.tokens) this.pushToken(comment);
+ return comment;
+ }
+
+ skipLineComment(startSkip) {
+ const start = this.state.pos;
+ let startLoc;
+ if (!this.isLookahead) startLoc = this.state.curPosition();
+ let ch = this.input.charCodeAt(this.state.pos += startSkip);
+
+ if (this.state.pos < this.length) {
+ while (!isNewLine(ch) && ++this.state.pos < this.length) {
+ ch = this.input.charCodeAt(this.state.pos);
+ }
+ }
+
+ if (this.isLookahead) return;
+ const end = this.state.pos;
+ const value = this.input.slice(start + startSkip, end);
+ const comment = {
+ type: "CommentLine",
+ value,
+ start,
+ end,
+ loc: new SourceLocation(startLoc, this.state.curPosition())
+ };
+ if (this.options.tokens) this.pushToken(comment);
+ return comment;
+ }
+
+ skipSpace() {
+ const spaceStart = this.state.pos;
+ const comments = [];
+
+ loop: while (this.state.pos < this.length) {
+ const ch = this.input.charCodeAt(this.state.pos);
+
+ switch (ch) {
+ case 32:
+ case 160:
+ case 9:
+ ++this.state.pos;
+ break;
+
+ case 13:
+ if (this.input.charCodeAt(this.state.pos + 1) === 10) {
+ ++this.state.pos;
+ }
+
+ case 10:
+ case 8232:
+ case 8233:
+ ++this.state.pos;
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+ break;
+
+ case 47:
+ switch (this.input.charCodeAt(this.state.pos + 1)) {
+ case 42:
+ {
+ const comment = this.skipBlockComment();
+
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+
+ break;
+ }
+
+ case 47:
+ {
+ const comment = this.skipLineComment(2);
+
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+
+ break;
+ }
+
+ default:
+ break loop;
+ }
+
+ break;
+
+ default:
+ if (isWhitespace(ch)) {
+ ++this.state.pos;
+ } else if (ch === 45 && !this.inModule) {
+ const pos = this.state.pos;
+
+ if (this.input.charCodeAt(pos + 1) === 45 && this.input.charCodeAt(pos + 2) === 62 && (spaceStart === 0 || this.state.lineStart > spaceStart)) {
+ const comment = this.skipLineComment(3);
+
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+ } else {
+ break loop;
+ }
+ } else if (ch === 60 && !this.inModule) {
+ const pos = this.state.pos;
+
+ if (this.input.charCodeAt(pos + 1) === 33 && this.input.charCodeAt(pos + 2) === 45 && this.input.charCodeAt(pos + 3) === 45) {
+ const comment = this.skipLineComment(4);
+
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+ } else {
+ break loop;
+ }
+ } else {
+ break loop;
+ }
+
+ }
+ }
+
+ if (comments.length > 0) {
+ const end = this.state.pos;
+ const CommentWhitespace = {
+ start: spaceStart,
+ end,
+ comments,
+ leadingNode: null,
+ trailingNode: null,
+ containingNode: null
+ };
+ this.state.commentStack.push(CommentWhitespace);
+ }
+ }
+
+ finishToken(type, val) {
+ this.state.end = this.state.pos;
+ const prevType = this.state.type;
+ this.state.type = type;
+ this.state.value = val;
+
+ if (!this.isLookahead) {
+ this.state.endLoc = this.state.curPosition();
+ this.updateContext(prevType);
+ }
+ }
+
+ readToken_numberSign() {
+ if (this.state.pos === 0 && this.readToken_interpreter()) {
+ return;
+ }
+
+ const nextPos = this.state.pos + 1;
+ const next = this.codePointAtPos(nextPos);
+
+ if (next >= 48 && next <= 57) {
+ throw this.raise(this.state.pos, ErrorMessages.UnexpectedDigitAfterHash);
+ }
+
+ if (next === 123 || next === 91 && this.hasPlugin("recordAndTuple")) {
+ this.expectPlugin("recordAndTuple");
+
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "hash") {
+ throw this.raise(this.state.pos, next === 123 ? ErrorMessages.RecordExpressionHashIncorrectStartSyntaxType : ErrorMessages.TupleExpressionHashIncorrectStartSyntaxType);
+ }
+
+ this.state.pos += 2;
+
+ if (next === 123) {
+ this.finishToken(15);
+ } else {
+ this.finishToken(9);
+ }
+ } else if (isIdentifierStart(next)) {
+ ++this.state.pos;
+ this.finishToken(6, this.readWord1(next));
+ } else if (next === 92) {
+ ++this.state.pos;
+ this.finishToken(6, this.readWord1());
+ } else {
+ this.finishOp(33, 1);
+ }
+ }
+
+ readToken_dot() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next >= 48 && next <= 57) {
+ this.readNumber(true);
+ return;
+ }
+
+ if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {
+ this.state.pos += 3;
+ this.finishToken(29);
+ } else {
+ ++this.state.pos;
+ this.finishToken(24);
+ }
+ }
+
+ readToken_slash() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === 61) {
+ this.finishOp(37, 2);
+ } else {
+ this.finishOp(55, 1);
+ }
+ }
+
+ readToken_interpreter() {
+ if (this.state.pos !== 0 || this.length < 2) return false;
+ let ch = this.input.charCodeAt(this.state.pos + 1);
+ if (ch !== 33) return false;
+ const start = this.state.pos;
+ this.state.pos += 1;
+
+ while (!isNewLine(ch) && ++this.state.pos < this.length) {
+ ch = this.input.charCodeAt(this.state.pos);
+ }
+
+ const value = this.input.slice(start + 2, this.state.pos);
+ this.finishToken(34, value);
+ return true;
+ }
+
+ readToken_mult_modulo(code) {
+ let type = code === 42 ? 54 : 53;
+ let width = 1;
+ let next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (code === 42 && next === 42) {
+ width++;
+ next = this.input.charCodeAt(this.state.pos + 2);
+ type = 56;
+ }
+
+ if (next === 61 && !this.state.inType) {
+ width++;
+ type = code === 37 ? 38 : 36;
+ }
+
+ this.finishOp(type, width);
+ }
+
+ readToken_pipe_amp(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === code) {
+ if (this.input.charCodeAt(this.state.pos + 2) === 61) {
+ this.finishOp(36, 3);
+ } else {
+ this.finishOp(code === 124 ? 44 : 45, 2);
+ }
+
+ return;
+ }
+
+ if (code === 124) {
+ if (next === 62) {
+ this.finishOp(42, 2);
+ return;
+ }
+
+ if (this.hasPlugin("recordAndTuple") && next === 125) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectEndSyntaxType);
+ }
+
+ this.state.pos += 2;
+ this.finishToken(17);
+ return;
+ }
+
+ if (this.hasPlugin("recordAndTuple") && next === 93) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectEndSyntaxType);
+ }
+
+ this.state.pos += 2;
+ this.finishToken(12);
+ return;
+ }
+ }
+
+ if (next === 61) {
+ this.finishOp(36, 2);
+ return;
+ }
+
+ this.finishOp(code === 124 ? 46 : 48, 1);
+ }
+
+ readToken_caret() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === 61) {
+ this.finishOp(36, 2);
+ } else {
+ this.finishOp(47, 1);
+ }
+ }
+
+ readToken_plus_min(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === code) {
+ this.finishOp(39, 2);
+ return;
+ }
+
+ if (next === 61) {
+ this.finishOp(36, 2);
+ } else {
+ this.finishOp(52, 1);
+ }
+ }
+
+ readToken_lt_gt(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ let size = 1;
+
+ if (next === code) {
+ size = code === 62 && this.input.charCodeAt(this.state.pos + 2) === 62 ? 3 : 2;
+
+ if (this.input.charCodeAt(this.state.pos + size) === 61) {
+ this.finishOp(36, size + 1);
+ return;
+ }
+
+ this.finishOp(51, size);
+ return;
+ }
+
+ if (next === 61) {
+ size = 2;
+ }
+
+ this.finishOp(50, size);
+ }
+
+ readToken_eq_excl(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === 61) {
+ this.finishOp(49, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);
+ return;
+ }
+
+ if (code === 61 && next === 62) {
+ this.state.pos += 2;
+ this.finishToken(27);
+ return;
+ }
+
+ this.finishOp(code === 61 ? 35 : 40, 1);
+ }
+
+ readToken_question() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ const next2 = this.input.charCodeAt(this.state.pos + 2);
+
+ if (next === 63) {
+ if (next2 === 61) {
+ this.finishOp(36, 3);
+ } else {
+ this.finishOp(43, 2);
+ }
+ } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {
+ this.state.pos += 2;
+ this.finishToken(26);
+ } else {
+ ++this.state.pos;
+ this.finishToken(25);
+ }
+ }
+
+ getTokenFromCode(code) {
+ switch (code) {
+ case 46:
+ this.readToken_dot();
+ return;
+
+ case 40:
+ ++this.state.pos;
+ this.finishToken(18);
+ return;
+
+ case 41:
+ ++this.state.pos;
+ this.finishToken(19);
+ return;
+
+ case 59:
+ ++this.state.pos;
+ this.finishToken(21);
+ return;
+
+ case 44:
+ ++this.state.pos;
+ this.finishToken(20);
+ return;
+
+ case 91:
+ if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectStartSyntaxType);
+ }
+
+ this.state.pos += 2;
+ this.finishToken(10);
+ } else {
+ ++this.state.pos;
+ this.finishToken(8);
+ }
+
+ return;
+
+ case 93:
+ ++this.state.pos;
+ this.finishToken(11);
+ return;
+
+ case 123:
+ if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectStartSyntaxType);
+ }
+
+ this.state.pos += 2;
+ this.finishToken(14);
+ } else {
+ ++this.state.pos;
+ this.finishToken(13);
+ }
+
+ return;
+
+ case 125:
+ ++this.state.pos;
+ this.finishToken(16);
+ return;
+
+ case 58:
+ if (this.hasPlugin("functionBind") && this.input.charCodeAt(this.state.pos + 1) === 58) {
+ this.finishOp(23, 2);
+ } else {
+ ++this.state.pos;
+ this.finishToken(22);
+ }
+
+ return;
+
+ case 63:
+ this.readToken_question();
+ return;
+
+ case 96:
+ ++this.state.pos;
+ this.finishToken(30);
+ return;
+
+ case 48:
+ {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === 120 || next === 88) {
+ this.readRadixNumber(16);
+ return;
+ }
+
+ if (next === 111 || next === 79) {
+ this.readRadixNumber(8);
+ return;
+ }
+
+ if (next === 98 || next === 66) {
+ this.readRadixNumber(2);
+ return;
+ }
+ }
+
+ case 49:
+ case 50:
+ case 51:
+ case 52:
+ case 53:
+ case 54:
+ case 55:
+ case 56:
+ case 57:
+ this.readNumber(false);
+ return;
+
+ case 34:
+ case 39:
+ this.readString(code);
+ return;
+
+ case 47:
+ this.readToken_slash();
+ return;
+
+ case 37:
+ case 42:
+ this.readToken_mult_modulo(code);
+ return;
+
+ case 124:
+ case 38:
+ this.readToken_pipe_amp(code);
+ return;
+
+ case 94:
+ this.readToken_caret();
+ return;
+
+ case 43:
+ case 45:
+ this.readToken_plus_min(code);
+ return;
+
+ case 60:
+ case 62:
+ this.readToken_lt_gt(code);
+ return;
+
+ case 61:
+ case 33:
+ this.readToken_eq_excl(code);
+ return;
+
+ case 126:
+ this.finishOp(41, 1);
+ return;
+
+ case 64:
+ ++this.state.pos;
+ this.finishToken(32);
+ return;
+
+ case 35:
+ this.readToken_numberSign();
+ return;
+
+ case 92:
+ this.readWord();
+ return;
+
+ default:
+ if (isIdentifierStart(code)) {
+ this.readWord(code);
+ return;
+ }
+
+ }
+
+ throw this.raise(this.state.pos, ErrorMessages.InvalidOrUnexpectedToken, String.fromCodePoint(code));
+ }
+
+ finishOp(type, size) {
+ const str = this.input.slice(this.state.pos, this.state.pos + size);
+ this.state.pos += size;
+ this.finishToken(type, str);
+ }
+
+ readRegexp() {
+ const start = this.state.start + 1;
+ let escaped, inClass;
+ let {
+ pos
+ } = this.state;
+
+ for (;; ++pos) {
+ if (pos >= this.length) {
+ throw this.raise(start, ErrorMessages.UnterminatedRegExp);
+ }
+
+ const ch = this.input.charCodeAt(pos);
+
+ if (isNewLine(ch)) {
+ throw this.raise(start, ErrorMessages.UnterminatedRegExp);
+ }
+
+ if (escaped) {
+ escaped = false;
+ } else {
+ if (ch === 91) {
+ inClass = true;
+ } else if (ch === 93 && inClass) {
+ inClass = false;
+ } else if (ch === 47 && !inClass) {
+ break;
+ }
+
+ escaped = ch === 92;
+ }
+ }
+
+ const content = this.input.slice(start, pos);
+ ++pos;
+ let mods = "";
+
+ while (pos < this.length) {
+ const cp = this.codePointAtPos(pos);
+ const char = String.fromCharCode(cp);
+
+ if (VALID_REGEX_FLAGS.has(cp)) {
+ if (mods.includes(char)) {
+ this.raise(pos + 1, ErrorMessages.DuplicateRegExpFlags);
+ }
+ } else if (isIdentifierChar(cp) || cp === 92) {
+ this.raise(pos + 1, ErrorMessages.MalformedRegExpFlags);
+ } else {
+ break;
+ }
+
+ ++pos;
+ mods += char;
+ }
+
+ this.state.pos = pos;
+ this.finishToken(3, {
+ pattern: content,
+ flags: mods
+ });
+ }
+
+ readInt(radix, len, forceLen, allowNumSeparator = true) {
+ const start = this.state.pos;
+ const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;
+ const allowedSiblings = radix === 16 ? allowedNumericSeparatorSiblings.hex : radix === 10 ? allowedNumericSeparatorSiblings.dec : radix === 8 ? allowedNumericSeparatorSiblings.oct : allowedNumericSeparatorSiblings.bin;
+ let invalid = false;
+ let total = 0;
+
+ for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {
+ const code = this.input.charCodeAt(this.state.pos);
+ let val;
+
+ if (code === 95) {
+ const prev = this.input.charCodeAt(this.state.pos - 1);
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (allowedSiblings.indexOf(next) === -1) {
+ this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);
+ } else if (forbiddenSiblings.indexOf(prev) > -1 || forbiddenSiblings.indexOf(next) > -1 || Number.isNaN(next)) {
+ this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);
+ }
+
+ if (!allowNumSeparator) {
+ this.raise(this.state.pos, ErrorMessages.NumericSeparatorInEscapeSequence);
+ }
+
+ ++this.state.pos;
+ continue;
+ }
+
+ if (code >= 97) {
+ val = code - 97 + 10;
+ } else if (code >= 65) {
+ val = code - 65 + 10;
+ } else if (_isDigit(code)) {
+ val = code - 48;
+ } else {
+ val = Infinity;
+ }
+
+ if (val >= radix) {
+ if (this.options.errorRecovery && val <= 9) {
+ val = 0;
+ this.raise(this.state.start + i + 2, ErrorMessages.InvalidDigit, radix);
+ } else if (forceLen) {
+ val = 0;
+ invalid = true;
+ } else {
+ break;
+ }
+ }
+
+ ++this.state.pos;
+ total = total * radix + val;
+ }
+
+ if (this.state.pos === start || len != null && this.state.pos - start !== len || invalid) {
+ return null;
+ }
+
+ return total;
+ }
+
+ readRadixNumber(radix) {
+ const start = this.state.pos;
+ let isBigInt = false;
+ this.state.pos += 2;
+ const val = this.readInt(radix);
+
+ if (val == null) {
+ this.raise(this.state.start + 2, ErrorMessages.InvalidDigit, radix);
+ }
+
+ const next = this.input.charCodeAt(this.state.pos);
+
+ if (next === 110) {
+ ++this.state.pos;
+ isBigInt = true;
+ } else if (next === 109) {
+ throw this.raise(start, ErrorMessages.InvalidDecimal);
+ }
+
+ if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {
+ throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);
+ }
+
+ if (isBigInt) {
+ const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, "");
+ this.finishToken(1, str);
+ return;
+ }
+
+ this.finishToken(0, val);
+ }
+
+ readNumber(startsWithDot) {
+ const start = this.state.pos;
+ let isFloat = false;
+ let isBigInt = false;
+ let isDecimal = false;
+ let hasExponent = false;
+ let isOctal = false;
+
+ if (!startsWithDot && this.readInt(10) === null) {
+ this.raise(start, ErrorMessages.InvalidNumber);
+ }
+
+ const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;
+
+ if (hasLeadingZero) {
+ const integer = this.input.slice(start, this.state.pos);
+ this.recordStrictModeErrors(start, ErrorMessages.StrictOctalLiteral);
+
+ if (!this.state.strict) {
+ const underscorePos = integer.indexOf("_");
+
+ if (underscorePos > 0) {
+ this.raise(underscorePos + start, ErrorMessages.ZeroDigitNumericSeparator);
+ }
+ }
+
+ isOctal = hasLeadingZero && !/[89]/.test(integer);
+ }
+
+ let next = this.input.charCodeAt(this.state.pos);
+
+ if (next === 46 && !isOctal) {
+ ++this.state.pos;
+ this.readInt(10);
+ isFloat = true;
+ next = this.input.charCodeAt(this.state.pos);
+ }
+
+ if ((next === 69 || next === 101) && !isOctal) {
+ next = this.input.charCodeAt(++this.state.pos);
+
+ if (next === 43 || next === 45) {
+ ++this.state.pos;
+ }
+
+ if (this.readInt(10) === null) {
+ this.raise(start, ErrorMessages.InvalidOrMissingExponent);
+ }
+
+ isFloat = true;
+ hasExponent = true;
+ next = this.input.charCodeAt(this.state.pos);
+ }
+
+ if (next === 110) {
+ if (isFloat || hasLeadingZero) {
+ this.raise(start, ErrorMessages.InvalidBigIntLiteral);
+ }
+
+ ++this.state.pos;
+ isBigInt = true;
+ }
+
+ if (next === 109) {
+ this.expectPlugin("decimal", this.state.pos);
+
+ if (hasExponent || hasLeadingZero) {
+ this.raise(start, ErrorMessages.InvalidDecimal);
+ }
+
+ ++this.state.pos;
+ isDecimal = true;
+ }
+
+ if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {
+ throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);
+ }
+
+ const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, "");
+
+ if (isBigInt) {
+ this.finishToken(1, str);
+ return;
+ }
+
+ if (isDecimal) {
+ this.finishToken(2, str);
+ return;
+ }
+
+ const val = isOctal ? parseInt(str, 8) : parseFloat(str);
+ this.finishToken(0, val);
+ }
+
+ readCodePoint(throwOnInvalid) {
+ const ch = this.input.charCodeAt(this.state.pos);
+ let code;
+
+ if (ch === 123) {
+ const codePos = ++this.state.pos;
+ code = this.readHexChar(this.input.indexOf("}", this.state.pos) - this.state.pos, true, throwOnInvalid);
+ ++this.state.pos;
+
+ if (code !== null && code > 0x10ffff) {
+ if (throwOnInvalid) {
+ this.raise(codePos, ErrorMessages.InvalidCodePoint);
+ } else {
+ return null;
+ }
+ }
+ } else {
+ code = this.readHexChar(4, false, throwOnInvalid);
+ }
+
+ return code;
+ }
+
+ readString(quote) {
+ let out = "",
+ chunkStart = ++this.state.pos;
+
+ for (;;) {
+ if (this.state.pos >= this.length) {
+ throw this.raise(this.state.start, ErrorMessages.UnterminatedString);
+ }
+
+ const ch = this.input.charCodeAt(this.state.pos);
+ if (ch === quote) break;
+
+ if (ch === 92) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.readEscapedChar(false);
+ chunkStart = this.state.pos;
+ } else if (ch === 8232 || ch === 8233) {
+ ++this.state.pos;
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+ } else if (isNewLine(ch)) {
+ throw this.raise(this.state.start, ErrorMessages.UnterminatedString);
+ } else {
+ ++this.state.pos;
+ }
+ }
+
+ out += this.input.slice(chunkStart, this.state.pos++);
+ this.finishToken(4, out);
+ }
+
+ readTmplToken() {
+ let out = "",
+ chunkStart = this.state.pos,
+ containsInvalid = false;
+
+ for (;;) {
+ if (this.state.pos >= this.length) {
+ throw this.raise(this.state.start, ErrorMessages.UnterminatedTemplate);
+ }
+
+ const ch = this.input.charCodeAt(this.state.pos);
+
+ if (ch === 96 || ch === 36 && this.input.charCodeAt(this.state.pos + 1) === 123) {
+ if (this.state.pos === this.state.start && this.match(28)) {
+ if (ch === 36) {
+ this.state.pos += 2;
+ this.finishToken(31);
+ return;
+ } else {
+ ++this.state.pos;
+ this.finishToken(30);
+ return;
+ }
+ }
+
+ out += this.input.slice(chunkStart, this.state.pos);
+ this.finishToken(28, containsInvalid ? null : out);
+ return;
+ }
+
+ if (ch === 92) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ const escaped = this.readEscapedChar(true);
+
+ if (escaped === null) {
+ containsInvalid = true;
+ } else {
+ out += escaped;
+ }
+
+ chunkStart = this.state.pos;
+ } else if (isNewLine(ch)) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ ++this.state.pos;
+
+ switch (ch) {
+ case 13:
+ if (this.input.charCodeAt(this.state.pos) === 10) {
+ ++this.state.pos;
+ }
+
+ case 10:
+ out += "\n";
+ break;
+
+ default:
+ out += String.fromCharCode(ch);
+ break;
+ }
+
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+ chunkStart = this.state.pos;
+ } else {
+ ++this.state.pos;
+ }
+ }
+ }
+
+ recordStrictModeErrors(pos, message) {
+ if (this.state.strict && !this.state.strictErrors.has(pos)) {
+ this.raise(pos, message);
+ } else {
+ this.state.strictErrors.set(pos, message);
+ }
+ }
+
+ readEscapedChar(inTemplate) {
+ const throwOnInvalid = !inTemplate;
+ const ch = this.input.charCodeAt(++this.state.pos);
+ ++this.state.pos;
+
+ switch (ch) {
+ case 110:
+ return "\n";
+
+ case 114:
+ return "\r";
+
+ case 120:
+ {
+ const code = this.readHexChar(2, false, throwOnInvalid);
+ return code === null ? null : String.fromCharCode(code);
+ }
+
+ case 117:
+ {
+ const code = this.readCodePoint(throwOnInvalid);
+ return code === null ? null : String.fromCodePoint(code);
+ }
+
+ case 116:
+ return "\t";
+
+ case 98:
+ return "\b";
+
+ case 118:
+ return "\u000b";
+
+ case 102:
+ return "\f";
+
+ case 13:
+ if (this.input.charCodeAt(this.state.pos) === 10) {
+ ++this.state.pos;
+ }
+
+ case 10:
+ this.state.lineStart = this.state.pos;
+ ++this.state.curLine;
+
+ case 8232:
+ case 8233:
+ return "";
+
+ case 56:
+ case 57:
+ if (inTemplate) {
+ return null;
+ } else {
+ this.recordStrictModeErrors(this.state.pos - 1, ErrorMessages.StrictNumericEscape);
+ }
+
+ default:
+ if (ch >= 48 && ch <= 55) {
+ const codePos = this.state.pos - 1;
+ const match = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/);
+ let octalStr = match[0];
+ let octal = parseInt(octalStr, 8);
+
+ if (octal > 255) {
+ octalStr = octalStr.slice(0, -1);
+ octal = parseInt(octalStr, 8);
+ }
+
+ this.state.pos += octalStr.length - 1;
+ const next = this.input.charCodeAt(this.state.pos);
+
+ if (octalStr !== "0" || next === 56 || next === 57) {
+ if (inTemplate) {
+ return null;
+ } else {
+ this.recordStrictModeErrors(codePos, ErrorMessages.StrictNumericEscape);
+ }
+ }
+
+ return String.fromCharCode(octal);
+ }
+
+ return String.fromCharCode(ch);
+ }
+ }
+
+ readHexChar(len, forceLen, throwOnInvalid) {
+ const codePos = this.state.pos;
+ const n = this.readInt(16, len, forceLen, false);
+
+ if (n === null) {
+ if (throwOnInvalid) {
+ this.raise(codePos, ErrorMessages.InvalidEscapeSequence);
+ } else {
+ this.state.pos = codePos - 1;
+ }
+ }
+
+ return n;
+ }
+
+ readWord1(firstCode) {
+ this.state.containsEsc = false;
+ let word = "";
+ const start = this.state.pos;
+ let chunkStart = this.state.pos;
+
+ if (firstCode !== undefined) {
+ this.state.pos += firstCode <= 0xffff ? 1 : 2;
+ }
+
+ while (this.state.pos < this.length) {
+ const ch = this.codePointAtPos(this.state.pos);
+
+ if (isIdentifierChar(ch)) {
+ this.state.pos += ch <= 0xffff ? 1 : 2;
+ } else if (ch === 92) {
+ this.state.containsEsc = true;
+ word += this.input.slice(chunkStart, this.state.pos);
+ const escStart = this.state.pos;
+ const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;
+
+ if (this.input.charCodeAt(++this.state.pos) !== 117) {
+ this.raise(this.state.pos, ErrorMessages.MissingUnicodeEscape);
+ chunkStart = this.state.pos - 1;
+ continue;
+ }
+
+ ++this.state.pos;
+ const esc = this.readCodePoint(true);
+
+ if (esc !== null) {
+ if (!identifierCheck(esc)) {
+ this.raise(escStart, ErrorMessages.EscapedCharNotAnIdentifier);
+ }
+
+ word += String.fromCodePoint(esc);
+ }
+
+ chunkStart = this.state.pos;
+ } else {
+ break;
+ }
+ }
+
+ return word + this.input.slice(chunkStart, this.state.pos);
+ }
+
+ readWord(firstCode) {
+ const word = this.readWord1(firstCode);
+ const type = keywords$1.get(word) || 5;
+ this.finishToken(type, word);
+ }
+
+ checkKeywordEscapes() {
+ const {
+ type
+ } = this.state;
+
+ if (tokenIsKeyword(type) && this.state.containsEsc) {
+ this.raise(this.state.start, ErrorMessages.InvalidEscapedReservedWord, tokenLabelName(type));
+ }
+ }
+
+ updateContext(prevType) {
+ const {
+ context,
+ type
+ } = this.state;
+
+ switch (type) {
+ case 16:
+ context.pop();
+ break;
+
+ case 13:
+ case 15:
+ case 31:
+ context.push(types.brace);
+ break;
+
+ case 30:
+ if (context[context.length - 1] === types.template) {
+ context.pop();
+ } else {
+ context.push(types.template);
+ }
+
+ break;
+ }
+ }
+
+}
+
+class ClassScope {
+ constructor() {
+ this.privateNames = new Set();
+ this.loneAccessors = new Map();
+ this.undefinedPrivateNames = new Map();
+ }
+
+}
+class ClassScopeHandler {
+ constructor(raise) {
+ this.stack = [];
+ this.undefinedPrivateNames = new Map();
+ this.raise = raise;
+ }
+
+ current() {
+ return this.stack[this.stack.length - 1];
+ }
+
+ enter() {
+ this.stack.push(new ClassScope());
+ }
+
+ exit() {
+ const oldClassScope = this.stack.pop();
+ const current = this.current();
+
+ for (const [name, pos] of Array.from(oldClassScope.undefinedPrivateNames)) {
+ if (current) {
+ if (!current.undefinedPrivateNames.has(name)) {
+ current.undefinedPrivateNames.set(name, pos);
+ }
+ } else {
+ this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);
+ }
+ }
+ }
+
+ declarePrivateName(name, elementType, pos) {
+ const classScope = this.current();
+ let redefined = classScope.privateNames.has(name);
+
+ if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {
+ const accessor = redefined && classScope.loneAccessors.get(name);
+
+ if (accessor) {
+ const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;
+ const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;
+ const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;
+ const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;
+ redefined = oldKind === newKind || oldStatic !== newStatic;
+ if (!redefined) classScope.loneAccessors.delete(name);
+ } else if (!redefined) {
+ classScope.loneAccessors.set(name, elementType);
+ }
+ }
+
+ if (redefined) {
+ this.raise(pos, ErrorMessages.PrivateNameRedeclaration, name);
+ }
+
+ classScope.privateNames.add(name);
+ classScope.undefinedPrivateNames.delete(name);
+ }
+
+ usePrivateName(name, pos) {
+ let classScope;
+
+ for (classScope of this.stack) {
+ if (classScope.privateNames.has(name)) return;
+ }
+
+ if (classScope) {
+ classScope.undefinedPrivateNames.set(name, pos);
+ } else {
+ this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);
+ }
+ }
+
+}
+
+const kExpression = 0,
+ kMaybeArrowParameterDeclaration = 1,
+ kMaybeAsyncArrowParameterDeclaration = 2,
+ kParameterDeclaration = 3;
+
+class ExpressionScope {
+ constructor(type = kExpression) {
+ this.type = void 0;
+ this.type = type;
+ }
+
+ canBeArrowParameterDeclaration() {
+ return this.type === kMaybeAsyncArrowParameterDeclaration || this.type === kMaybeArrowParameterDeclaration;
+ }
+
+ isCertainlyParameterDeclaration() {
+ return this.type === kParameterDeclaration;
+ }
+
+}
+
+class ArrowHeadParsingScope extends ExpressionScope {
+ constructor(type) {
+ super(type);
+ this.errors = new Map();
+ }
+
+ recordDeclarationError(pos, template) {
+ this.errors.set(pos, template);
+ }
+
+ clearDeclarationError(pos) {
+ this.errors.delete(pos);
+ }
+
+ iterateErrors(iterator) {
+ this.errors.forEach(iterator);
+ }
+
+}
+
+class ExpressionScopeHandler {
+ constructor(raise) {
+ this.stack = [new ExpressionScope()];
+ this.raise = raise;
+ }
+
+ enter(scope) {
+ this.stack.push(scope);
+ }
+
+ exit() {
+ this.stack.pop();
+ }
+
+ recordParameterInitializerError(pos, template) {
+ const {
+ stack
+ } = this;
+ let i = stack.length - 1;
+ let scope = stack[i];
+
+ while (!scope.isCertainlyParameterDeclaration()) {
+ if (scope.canBeArrowParameterDeclaration()) {
+ scope.recordDeclarationError(pos, template);
+ } else {
+ return;
+ }
+
+ scope = stack[--i];
+ }
+
+ this.raise(pos, template);
+ }
+
+ recordParenthesizedIdentifierError(pos, template) {
+ const {
+ stack
+ } = this;
+ const scope = stack[stack.length - 1];
+
+ if (scope.isCertainlyParameterDeclaration()) {
+ this.raise(pos, template);
+ } else if (scope.canBeArrowParameterDeclaration()) {
+ scope.recordDeclarationError(pos, template);
+ } else {
+ return;
+ }
+ }
+
+ recordAsyncArrowParametersError(pos, template) {
+ const {
+ stack
+ } = this;
+ let i = stack.length - 1;
+ let scope = stack[i];
+
+ while (scope.canBeArrowParameterDeclaration()) {
+ if (scope.type === kMaybeAsyncArrowParameterDeclaration) {
+ scope.recordDeclarationError(pos, template);
+ }
+
+ scope = stack[--i];
+ }
+ }
+
+ validateAsPattern() {
+ const {
+ stack
+ } = this;
+ const currentScope = stack[stack.length - 1];
+ if (!currentScope.canBeArrowParameterDeclaration()) return;
+ currentScope.iterateErrors((template, pos) => {
+ this.raise(pos, template);
+ let i = stack.length - 2;
+ let scope = stack[i];
+
+ while (scope.canBeArrowParameterDeclaration()) {
+ scope.clearDeclarationError(pos);
+ scope = stack[--i];
+ }
+ });
+ }
+
+}
+function newParameterDeclarationScope() {
+ return new ExpressionScope(kParameterDeclaration);
+}
+function newArrowHeadScope() {
+ return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);
+}
+function newAsyncArrowScope() {
+ return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);
+}
+function newExpressionScope() {
+ return new ExpressionScope();
+}
+
+const PARAM = 0b0000,
+ PARAM_YIELD = 0b0001,
+ PARAM_AWAIT = 0b0010,
+ PARAM_RETURN = 0b0100,
+ PARAM_IN = 0b1000;
+class ProductionParameterHandler {
+ constructor() {
+ this.stacks = [];
+ }
+
+ enter(flags) {
+ this.stacks.push(flags);
+ }
+
+ exit() {
+ this.stacks.pop();
+ }
+
+ currentFlags() {
+ return this.stacks[this.stacks.length - 1];
+ }
+
+ get hasAwait() {
+ return (this.currentFlags() & PARAM_AWAIT) > 0;
+ }
+
+ get hasYield() {
+ return (this.currentFlags() & PARAM_YIELD) > 0;
+ }
+
+ get hasReturn() {
+ return (this.currentFlags() & PARAM_RETURN) > 0;
+ }
+
+ get hasIn() {
+ return (this.currentFlags() & PARAM_IN) > 0;
+ }
+
+}
+function functionFlags(isAsync, isGenerator) {
+ return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);
+}
+
+class UtilParser extends Tokenizer {
+ addExtra(node, key, val) {
+ if (!node) return;
+ const extra = node.extra = node.extra || {};
+ extra[key] = val;
+ }
+
+ isRelational(op) {
+ return this.match(50) && this.state.value === op;
+ }
+
+ expectRelational(op) {
+ if (this.isRelational(op)) {
+ this.next();
+ } else {
+ this.unexpected(null, 50);
+ }
+ }
+
+ isContextual(name) {
+ return this.match(5) && this.state.value === name && !this.state.containsEsc;
+ }
+
+ isUnparsedContextual(nameStart, name) {
+ const nameEnd = nameStart + name.length;
+
+ if (this.input.slice(nameStart, nameEnd) === name) {
+ const nextCh = this.input.charCodeAt(nameEnd);
+ return !(isIdentifierChar(nextCh) || (nextCh & 0xfc00) === 0xd800);
+ }
+
+ return false;
+ }
+
+ isLookaheadContextual(name) {
+ const next = this.nextTokenStart();
+ return this.isUnparsedContextual(next, name);
+ }
+
+ eatContextual(name) {
+ return this.isContextual(name) && this.eat(5);
+ }
+
+ expectContextual(name, template) {
+ if (!this.eatContextual(name)) this.unexpected(null, template);
+ }
+
+ canInsertSemicolon() {
+ return this.match(7) || this.match(16) || this.hasPrecedingLineBreak();
+ }
+
+ hasPrecedingLineBreak() {
+ return lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start));
+ }
+
+ hasFollowingLineBreak() {
+ skipWhiteSpaceToLineBreak.lastIndex = this.state.end;
+ return skipWhiteSpaceToLineBreak.test(this.input);
+ }
+
+ isLineTerminator() {
+ return this.eat(21) || this.canInsertSemicolon();
+ }
+
+ semicolon(allowAsi = true) {
+ if (allowAsi ? this.isLineTerminator() : this.eat(21)) return;
+ this.raise(this.state.lastTokEnd, ErrorMessages.MissingSemicolon);
+ }
+
+ expect(type, pos) {
+ this.eat(type) || this.unexpected(pos, type);
+ }
+
+ assertNoSpace(message = "Unexpected space.") {
+ if (this.state.start > this.state.lastTokEnd) {
+ this.raise(this.state.lastTokEnd, {
+ code: ErrorCodes.SyntaxError,
+ reasonCode: "UnexpectedSpace",
+ template: message
+ });
+ }
+ }
+
+ unexpected(pos, messageOrType = {
+ code: ErrorCodes.SyntaxError,
+ reasonCode: "UnexpectedToken",
+ template: "Unexpected token"
+ }) {
+ if (isTokenType(messageOrType)) {
+ messageOrType = {
+ code: ErrorCodes.SyntaxError,
+ reasonCode: "UnexpectedToken",
+ template: `Unexpected token, expected "${tokenLabelName(messageOrType)}"`
+ };
+ }
+
+ throw this.raise(pos != null ? pos : this.state.start, messageOrType);
+ }
+
+ expectPlugin(name, pos) {
+ if (!this.hasPlugin(name)) {
+ throw this.raiseWithData(pos != null ? pos : this.state.start, {
+ missingPlugin: [name]
+ }, `This experimental syntax requires enabling the parser plugin: '${name}'`);
+ }
+
+ return true;
+ }
+
+ expectOnePlugin(names, pos) {
+ if (!names.some(n => this.hasPlugin(n))) {
+ throw this.raiseWithData(pos != null ? pos : this.state.start, {
+ missingPlugin: names
+ }, `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(", ")}'`);
+ }
+ }
+
+ tryParse(fn, oldState = this.state.clone()) {
+ const abortSignal = {
+ node: null
+ };
+
+ try {
+ const node = fn((node = null) => {
+ abortSignal.node = node;
+ throw abortSignal;
+ });
+
+ if (this.state.errors.length > oldState.errors.length) {
+ const failState = this.state;
+ this.state = oldState;
+ this.state.tokensLength = failState.tokensLength;
+ return {
+ node,
+ error: failState.errors[oldState.errors.length],
+ thrown: false,
+ aborted: false,
+ failState
+ };
+ }
+
+ return {
+ node,
+ error: null,
+ thrown: false,
+ aborted: false,
+ failState: null
+ };
+ } catch (error) {
+ const failState = this.state;
+ this.state = oldState;
+
+ if (error instanceof SyntaxError) {
+ return {
+ node: null,
+ error,
+ thrown: true,
+ aborted: false,
+ failState
+ };
+ }
+
+ if (error === abortSignal) {
+ return {
+ node: abortSignal.node,
+ error: null,
+ thrown: false,
+ aborted: true,
+ failState
+ };
+ }
+
+ throw error;
+ }
+ }
+
+ checkExpressionErrors(refExpressionErrors, andThrow) {
+ if (!refExpressionErrors) return false;
+ const {
+ shorthandAssign,
+ doubleProto,
+ optionalParameters
+ } = refExpressionErrors;
+
+ if (!andThrow) {
+ return shorthandAssign >= 0 || doubleProto >= 0 || optionalParameters >= 0;
+ }
+
+ if (shorthandAssign >= 0) {
+ this.unexpected(shorthandAssign);
+ }
+
+ if (doubleProto >= 0) {
+ this.raise(doubleProto, ErrorMessages.DuplicateProto);
+ }
+
+ if (optionalParameters >= 0) {
+ this.unexpected(optionalParameters);
+ }
+ }
+
+ isLiteralPropertyName() {
+ return this.match(5) || tokenIsKeyword(this.state.type) || this.match(4) || this.match(0) || this.match(1) || this.match(2);
+ }
+
+ isPrivateName(node) {
+ return node.type === "PrivateName";
+ }
+
+ getPrivateNameSV(node) {
+ return node.id.name;
+ }
+
+ hasPropertyAsPrivateName(node) {
+ return (node.type === "MemberExpression" || node.type === "OptionalMemberExpression") && this.isPrivateName(node.property);
+ }
+
+ isOptionalChain(node) {
+ return node.type === "OptionalMemberExpression" || node.type === "OptionalCallExpression";
+ }
+
+ isObjectProperty(node) {
+ return node.type === "ObjectProperty";
+ }
+
+ isObjectMethod(node) {
+ return node.type === "ObjectMethod";
+ }
+
+ initializeScopes(inModule = this.options.sourceType === "module") {
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+ const oldExportedIdentifiers = this.exportedIdentifiers;
+ this.exportedIdentifiers = new Set();
+ const oldInModule = this.inModule;
+ this.inModule = inModule;
+ const oldScope = this.scope;
+ const ScopeHandler = this.getScopeHandler();
+ this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);
+ const oldProdParam = this.prodParam;
+ this.prodParam = new ProductionParameterHandler();
+ const oldClassScope = this.classScope;
+ this.classScope = new ClassScopeHandler(this.raise.bind(this));
+ const oldExpressionScope = this.expressionScope;
+ this.expressionScope = new ExpressionScopeHandler(this.raise.bind(this));
+ return () => {
+ this.state.labels = oldLabels;
+ this.exportedIdentifiers = oldExportedIdentifiers;
+ this.inModule = oldInModule;
+ this.scope = oldScope;
+ this.prodParam = oldProdParam;
+ this.classScope = oldClassScope;
+ this.expressionScope = oldExpressionScope;
+ };
+ }
+
+ enterInitialScopes() {
+ let paramFlags = PARAM;
+
+ if (this.inModule) {
+ paramFlags |= PARAM_AWAIT;
+ }
+
+ this.scope.enter(SCOPE_PROGRAM);
+ this.prodParam.enter(paramFlags);
+ }
+
+}
+class ExpressionErrors {
+ constructor() {
+ this.shorthandAssign = -1;
+ this.doubleProto = -1;
+ this.optionalParameters = -1;
+ }
+
+}
+
+class Node {
+ constructor(parser, pos, loc) {
+ this.type = "";
+ this.start = pos;
+ this.end = 0;
+ this.loc = new SourceLocation(loc);
+ if (parser != null && parser.options.ranges) this.range = [pos, 0];
+ if (parser != null && parser.filename) this.loc.filename = parser.filename;
+ }
+
+}
+
+const NodePrototype = Node.prototype;
+{
+ NodePrototype.__clone = function () {
+ const newNode = new Node();
+ const keys = Object.keys(this);
+
+ for (let i = 0, length = keys.length; i < length; i++) {
+ const key = keys[i];
+
+ if (key !== "leadingComments" && key !== "trailingComments" && key !== "innerComments") {
+ newNode[key] = this[key];
+ }
+ }
+
+ return newNode;
+ };
+}
+
+function clonePlaceholder(node) {
+ return cloneIdentifier(node);
+}
+
+function cloneIdentifier(node) {
+ const {
+ type,
+ start,
+ end,
+ loc,
+ range,
+ extra,
+ name
+ } = node;
+ const cloned = Object.create(NodePrototype);
+ cloned.type = type;
+ cloned.start = start;
+ cloned.end = end;
+ cloned.loc = loc;
+ cloned.range = range;
+ cloned.extra = extra;
+ cloned.name = name;
+
+ if (type === "Placeholder") {
+ cloned.expectedNode = node.expectedNode;
+ }
+
+ return cloned;
+}
+function cloneStringLiteral(node) {
+ const {
+ type,
+ start,
+ end,
+ loc,
+ range,
+ extra
+ } = node;
+
+ if (type === "Placeholder") {
+ return clonePlaceholder(node);
+ }
+
+ const cloned = Object.create(NodePrototype);
+ cloned.type = "StringLiteral";
+ cloned.start = start;
+ cloned.end = end;
+ cloned.loc = loc;
+ cloned.range = range;
+ cloned.extra = extra;
+ cloned.value = node.value;
+ return cloned;
+}
+class NodeUtils extends UtilParser {
+ startNode() {
+ return new Node(this, this.state.start, this.state.startLoc);
+ }
+
+ startNodeAt(pos, loc) {
+ return new Node(this, pos, loc);
+ }
+
+ startNodeAtNode(type) {
+ return this.startNodeAt(type.start, type.loc.start);
+ }
+
+ finishNode(node, type) {
+ return this.finishNodeAt(node, type, this.state.lastTokEnd, this.state.lastTokEndLoc);
+ }
+
+ finishNodeAt(node, type, pos, loc) {
+
+ node.type = type;
+ node.end = pos;
+ node.loc.end = loc;
+ if (this.options.ranges) node.range[1] = pos;
+ if (this.options.attachComment) this.processComment(node);
+ return node;
+ }
+
+ resetStartLocation(node, start, startLoc) {
+ node.start = start;
+ node.loc.start = startLoc;
+ if (this.options.ranges) node.range[0] = start;
+ }
+
+ resetEndLocation(node, end = this.state.lastTokEnd, endLoc = this.state.lastTokEndLoc) {
+ node.end = end;
+ node.loc.end = endLoc;
+ if (this.options.ranges) node.range[1] = end;
+ }
+
+ resetStartLocationFromNode(node, locationNode) {
+ this.resetStartLocation(node, locationNode.start, locationNode.loc.start);
+ }
+
+}
+
+const reservedTypes = new Set(["_", "any", "bool", "boolean", "empty", "extends", "false", "interface", "mixed", "null", "number", "static", "string", "true", "typeof", "void"]);
+const FlowErrors = makeErrorTemplates({
+ AmbiguousConditionalArrow: "Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.",
+ AmbiguousDeclareModuleKind: "Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.",
+ AssignReservedType: "Cannot overwrite reserved type %0.",
+ DeclareClassElement: "The `declare` modifier can only appear on class fields.",
+ DeclareClassFieldInitializer: "Initializers are not allowed in fields with the `declare` modifier.",
+ DuplicateDeclareModuleExports: "Duplicate `declare module.exports` statement.",
+ EnumBooleanMemberNotInitialized: "Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.",
+ EnumDuplicateMemberName: "Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.",
+ EnumInconsistentMemberValues: "Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.",
+ EnumInvalidExplicitType: "Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.",
+ EnumInvalidExplicitTypeUnknownSupplied: "Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.",
+ EnumInvalidMemberInitializerPrimaryType: "Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.",
+ EnumInvalidMemberInitializerSymbolType: "Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.",
+ EnumInvalidMemberInitializerUnknownType: "The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.",
+ EnumInvalidMemberName: "Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.",
+ EnumNumberMemberNotInitialized: "Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.",
+ EnumStringMemberInconsistentlyInitailized: "String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.",
+ GetterMayNotHaveThisParam: "A getter cannot have a `this` parameter.",
+ ImportTypeShorthandOnlyInPureImport: "The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.",
+ InexactInsideExact: "Explicit inexact syntax cannot appear inside an explicit exact object type.",
+ InexactInsideNonObject: "Explicit inexact syntax cannot appear in class or interface definitions.",
+ InexactVariance: "Explicit inexact syntax cannot have variance.",
+ InvalidNonTypeImportInDeclareModule: "Imports within a `declare module` body must always be `import type` or `import typeof`.",
+ MissingTypeParamDefault: "Type parameter declaration needs a default, since a preceding type parameter declaration has a default.",
+ NestedDeclareModule: "`declare module` cannot be used inside another `declare module`.",
+ NestedFlowComment: "Cannot have a flow comment inside another flow comment.",
+ PatternIsOptional: "A binding pattern parameter cannot be optional in an implementation signature.",
+ SetterMayNotHaveThisParam: "A setter cannot have a `this` parameter.",
+ SpreadVariance: "Spread properties cannot have variance.",
+ ThisParamAnnotationRequired: "A type annotation is required for the `this` parameter.",
+ ThisParamBannedInConstructor: "Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.",
+ ThisParamMayNotBeOptional: "The `this` parameter cannot be optional.",
+ ThisParamMustBeFirst: "The `this` parameter must be the first function parameter.",
+ ThisParamNoDefault: "The `this` parameter may not have a default value.",
+ TypeBeforeInitializer: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",
+ TypeCastInPattern: "The type cast expression is expected to be wrapped with parenthesis.",
+ UnexpectedExplicitInexactInObject: "Explicit inexact syntax must appear at the end of an inexact object.",
+ UnexpectedReservedType: "Unexpected reserved type %0.",
+ UnexpectedReservedUnderscore: "`_` is only allowed as a type argument to call or new.",
+ UnexpectedSpaceBetweenModuloChecks: "Spaces between `%` and `checks` are not allowed here.",
+ UnexpectedSpreadType: "Spread operator cannot appear in class or interface definitions.",
+ UnexpectedSubtractionOperand: 'Unexpected token, expected "number" or "bigint".',
+ UnexpectedTokenAfterTypeParameter: "Expected an arrow function after this type parameter declaration.",
+ UnexpectedTypeParameterBeforeAsyncArrowFunction: "Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.",
+ UnsupportedDeclareExportKind: "`declare export %0` is not supported. Use `%1` instead.",
+ UnsupportedStatementInDeclareModule: "Only declares and type imports are allowed inside declare module.",
+ UnterminatedFlowComment: "Unterminated flow-comment."
+}, ErrorCodes.SyntaxError, "flow");
+
+function isEsModuleType(bodyElement) {
+ return bodyElement.type === "DeclareExportAllDeclaration" || bodyElement.type === "DeclareExportDeclaration" && (!bodyElement.declaration || bodyElement.declaration.type !== "TypeAlias" && bodyElement.declaration.type !== "InterfaceDeclaration");
+}
+
+function hasTypeImportKind(node) {
+ return node.importKind === "type" || node.importKind === "typeof";
+}
+
+function isMaybeDefaultImport(state) {
+ return (state.type === 5 || tokenIsKeyword(state.type)) && state.value !== "from";
+}
+
+const exportSuggestions = {
+ const: "declare export var",
+ let: "declare export var",
+ type: "export type",
+ interface: "export interface"
+};
+
+function partition(list, test) {
+ const list1 = [];
+ const list2 = [];
+
+ for (let i = 0; i < list.length; i++) {
+ (test(list[i], i, list) ? list1 : list2).push(list[i]);
+ }
+
+ return [list1, list2];
+}
+
+const FLOW_PRAGMA_REGEX = /\*?\s*@((?:no)?flow)\b/;
+var flow = (superClass => class extends superClass {
+ constructor(...args) {
+ super(...args);
+ this.flowPragma = undefined;
+ }
+
+ getScopeHandler() {
+ return FlowScopeHandler;
+ }
+
+ shouldParseTypes() {
+ return this.getPluginOption("flow", "all") || this.flowPragma === "flow";
+ }
+
+ shouldParseEnums() {
+ return !!this.getPluginOption("flow", "enums");
+ }
+
+ finishToken(type, val) {
+ if (type !== 4 && type !== 21 && type !== 34) {
+ if (this.flowPragma === undefined) {
+ this.flowPragma = null;
+ }
+ }
+
+ return super.finishToken(type, val);
+ }
+
+ addComment(comment) {
+ if (this.flowPragma === undefined) {
+ const matches = FLOW_PRAGMA_REGEX.exec(comment.value);
+
+ if (!matches) ; else if (matches[1] === "flow") {
+ this.flowPragma = "flow";
+ } else if (matches[1] === "noflow") {
+ this.flowPragma = "noflow";
+ } else {
+ throw new Error("Unexpected flow pragma");
+ }
+ }
+
+ return super.addComment(comment);
+ }
+
+ flowParseTypeInitialiser(tok) {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ this.expect(tok || 22);
+ const type = this.flowParseType();
+ this.state.inType = oldInType;
+ return type;
+ }
+
+ flowParsePredicate() {
+ const node = this.startNode();
+ const moduloPos = this.state.start;
+ this.next();
+ this.expectContextual("checks");
+
+ if (this.state.lastTokStart > moduloPos + 1) {
+ this.raise(moduloPos, FlowErrors.UnexpectedSpaceBetweenModuloChecks);
+ }
+
+ if (this.eat(18)) {
+ node.value = this.parseExpression();
+ this.expect(19);
+ return this.finishNode(node, "DeclaredPredicate");
+ } else {
+ return this.finishNode(node, "InferredPredicate");
+ }
+ }
+
+ flowParseTypeAndPredicateInitialiser() {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ this.expect(22);
+ let type = null;
+ let predicate = null;
+
+ if (this.match(53)) {
+ this.state.inType = oldInType;
+ predicate = this.flowParsePredicate();
+ } else {
+ type = this.flowParseType();
+ this.state.inType = oldInType;
+
+ if (this.match(53)) {
+ predicate = this.flowParsePredicate();
+ }
+ }
+
+ return [type, predicate];
+ }
+
+ flowParseDeclareClass(node) {
+ this.next();
+ this.flowParseInterfaceish(node, true);
+ return this.finishNode(node, "DeclareClass");
+ }
+
+ flowParseDeclareFunction(node) {
+ this.next();
+ const id = node.id = this.parseIdentifier();
+ const typeNode = this.startNode();
+ const typeContainer = this.startNode();
+
+ if (this.isRelational("<")) {
+ typeNode.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ typeNode.typeParameters = null;
+ }
+
+ this.expect(18);
+ const tmp = this.flowParseFunctionTypeParams();
+ typeNode.params = tmp.params;
+ typeNode.rest = tmp.rest;
+ typeNode.this = tmp._this;
+ this.expect(19);
+ [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();
+ typeContainer.typeAnnotation = this.finishNode(typeNode, "FunctionTypeAnnotation");
+ id.typeAnnotation = this.finishNode(typeContainer, "TypeAnnotation");
+ this.resetEndLocation(id);
+ this.semicolon();
+ this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.start);
+ return this.finishNode(node, "DeclareFunction");
+ }
+
+ flowParseDeclare(node, insideModule) {
+ if (this.match(79)) {
+ return this.flowParseDeclareClass(node);
+ } else if (this.match(67)) {
+ return this.flowParseDeclareFunction(node);
+ } else if (this.match(73)) {
+ return this.flowParseDeclareVariable(node);
+ } else if (this.eatContextual("module")) {
+ if (this.match(24)) {
+ return this.flowParseDeclareModuleExports(node);
+ } else {
+ if (insideModule) {
+ this.raise(this.state.lastTokStart, FlowErrors.NestedDeclareModule);
+ }
+
+ return this.flowParseDeclareModule(node);
+ }
+ } else if (this.isContextual("type")) {
+ return this.flowParseDeclareTypeAlias(node);
+ } else if (this.isContextual("opaque")) {
+ return this.flowParseDeclareOpaqueType(node);
+ } else if (this.isContextual("interface")) {
+ return this.flowParseDeclareInterface(node);
+ } else if (this.match(81)) {
+ return this.flowParseDeclareExportDeclaration(node, insideModule);
+ } else {
+ throw this.unexpected();
+ }
+ }
+
+ flowParseDeclareVariable(node) {
+ this.next();
+ node.id = this.flowParseTypeAnnotatableIdentifier(true);
+ this.scope.declareName(node.id.name, BIND_VAR, node.id.start);
+ this.semicolon();
+ return this.finishNode(node, "DeclareVariable");
+ }
+
+ flowParseDeclareModule(node) {
+ this.scope.enter(SCOPE_OTHER);
+
+ if (this.match(4)) {
+ node.id = this.parseExprAtom();
+ } else {
+ node.id = this.parseIdentifier();
+ }
+
+ const bodyNode = node.body = this.startNode();
+ const body = bodyNode.body = [];
+ this.expect(13);
+
+ while (!this.match(16)) {
+ let bodyNode = this.startNode();
+
+ if (this.match(82)) {
+ this.next();
+
+ if (!this.isContextual("type") && !this.match(86)) {
+ this.raise(this.state.lastTokStart, FlowErrors.InvalidNonTypeImportInDeclareModule);
+ }
+
+ this.parseImport(bodyNode);
+ } else {
+ this.expectContextual("declare", FlowErrors.UnsupportedStatementInDeclareModule);
+ bodyNode = this.flowParseDeclare(bodyNode, true);
+ }
+
+ body.push(bodyNode);
+ }
+
+ this.scope.exit();
+ this.expect(16);
+ this.finishNode(bodyNode, "BlockStatement");
+ let kind = null;
+ let hasModuleExport = false;
+ body.forEach(bodyElement => {
+ if (isEsModuleType(bodyElement)) {
+ if (kind === "CommonJS") {
+ this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);
+ }
+
+ kind = "ES";
+ } else if (bodyElement.type === "DeclareModuleExports") {
+ if (hasModuleExport) {
+ this.raise(bodyElement.start, FlowErrors.DuplicateDeclareModuleExports);
+ }
+
+ if (kind === "ES") {
+ this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);
+ }
+
+ kind = "CommonJS";
+ hasModuleExport = true;
+ }
+ });
+ node.kind = kind || "CommonJS";
+ return this.finishNode(node, "DeclareModule");
+ }
+
+ flowParseDeclareExportDeclaration(node, insideModule) {
+ this.expect(81);
+
+ if (this.eat(64)) {
+ if (this.match(67) || this.match(79)) {
+ node.declaration = this.flowParseDeclare(this.startNode());
+ } else {
+ node.declaration = this.flowParseType();
+ this.semicolon();
+ }
+
+ node.default = true;
+ return this.finishNode(node, "DeclareExportDeclaration");
+ } else {
+ if (this.match(74) || this.isLet() || (this.isContextual("type") || this.isContextual("interface")) && !insideModule) {
+ const label = this.state.value;
+ const suggestion = exportSuggestions[label];
+ throw this.raise(this.state.start, FlowErrors.UnsupportedDeclareExportKind, label, suggestion);
+ }
+
+ if (this.match(73) || this.match(67) || this.match(79) || this.isContextual("opaque")) {
+ node.declaration = this.flowParseDeclare(this.startNode());
+ node.default = false;
+ return this.finishNode(node, "DeclareExportDeclaration");
+ } else if (this.match(54) || this.match(13) || this.isContextual("interface") || this.isContextual("type") || this.isContextual("opaque")) {
+ node = this.parseExport(node);
+
+ if (node.type === "ExportNamedDeclaration") {
+ node.type = "ExportDeclaration";
+ node.default = false;
+ delete node.exportKind;
+ }
+
+ node.type = "Declare" + node.type;
+ return node;
+ }
+ }
+
+ throw this.unexpected();
+ }
+
+ flowParseDeclareModuleExports(node) {
+ this.next();
+ this.expectContextual("exports");
+ node.typeAnnotation = this.flowParseTypeAnnotation();
+ this.semicolon();
+ return this.finishNode(node, "DeclareModuleExports");
+ }
+
+ flowParseDeclareTypeAlias(node) {
+ this.next();
+ this.flowParseTypeAlias(node);
+ node.type = "DeclareTypeAlias";
+ return node;
+ }
+
+ flowParseDeclareOpaqueType(node) {
+ this.next();
+ this.flowParseOpaqueType(node, true);
+ node.type = "DeclareOpaqueType";
+ return node;
+ }
+
+ flowParseDeclareInterface(node) {
+ this.next();
+ this.flowParseInterfaceish(node);
+ return this.finishNode(node, "DeclareInterface");
+ }
+
+ flowParseInterfaceish(node, isClass = false) {
+ node.id = this.flowParseRestrictedIdentifier(!isClass, true);
+ this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.start);
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+
+ node.extends = [];
+ node.implements = [];
+ node.mixins = [];
+
+ if (this.eat(80)) {
+ do {
+ node.extends.push(this.flowParseInterfaceExtends());
+ } while (!isClass && this.eat(20));
+ }
+
+ if (this.isContextual("mixins")) {
+ this.next();
+
+ do {
+ node.mixins.push(this.flowParseInterfaceExtends());
+ } while (this.eat(20));
+ }
+
+ if (this.isContextual("implements")) {
+ this.next();
+
+ do {
+ node.implements.push(this.flowParseInterfaceExtends());
+ } while (this.eat(20));
+ }
+
+ node.body = this.flowParseObjectType({
+ allowStatic: isClass,
+ allowExact: false,
+ allowSpread: false,
+ allowProto: isClass,
+ allowInexact: false
+ });
+ }
+
+ flowParseInterfaceExtends() {
+ const node = this.startNode();
+ node.id = this.flowParseQualifiedTypeIdentifier();
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ } else {
+ node.typeParameters = null;
+ }
+
+ return this.finishNode(node, "InterfaceExtends");
+ }
+
+ flowParseInterface(node) {
+ this.flowParseInterfaceish(node);
+ return this.finishNode(node, "InterfaceDeclaration");
+ }
+
+ checkNotUnderscore(word) {
+ if (word === "_") {
+ this.raise(this.state.start, FlowErrors.UnexpectedReservedUnderscore);
+ }
+ }
+
+ checkReservedType(word, startLoc, declaration) {
+ if (!reservedTypes.has(word)) return;
+ this.raise(startLoc, declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, word);
+ }
+
+ flowParseRestrictedIdentifier(liberal, declaration) {
+ this.checkReservedType(this.state.value, this.state.start, declaration);
+ return this.parseIdentifier(liberal);
+ }
+
+ flowParseTypeAlias(node) {
+ node.id = this.flowParseRestrictedIdentifier(false, true);
+ this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+
+ node.right = this.flowParseTypeInitialiser(35);
+ this.semicolon();
+ return this.finishNode(node, "TypeAlias");
+ }
+
+ flowParseOpaqueType(node, declare) {
+ this.expectContextual("type");
+ node.id = this.flowParseRestrictedIdentifier(true, true);
+ this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+
+ node.supertype = null;
+
+ if (this.match(22)) {
+ node.supertype = this.flowParseTypeInitialiser(22);
+ }
+
+ node.impltype = null;
+
+ if (!declare) {
+ node.impltype = this.flowParseTypeInitialiser(35);
+ }
+
+ this.semicolon();
+ return this.finishNode(node, "OpaqueType");
+ }
+
+ flowParseTypeParameter(requireDefault = false) {
+ const nodeStart = this.state.start;
+ const node = this.startNode();
+ const variance = this.flowParseVariance();
+ const ident = this.flowParseTypeAnnotatableIdentifier();
+ node.name = ident.name;
+ node.variance = variance;
+ node.bound = ident.typeAnnotation;
+
+ if (this.match(35)) {
+ this.eat(35);
+ node.default = this.flowParseType();
+ } else {
+ if (requireDefault) {
+ this.raise(nodeStart, FlowErrors.MissingTypeParamDefault);
+ }
+ }
+
+ return this.finishNode(node, "TypeParameter");
+ }
+
+ flowParseTypeParameterDeclaration() {
+ const oldInType = this.state.inType;
+ const node = this.startNode();
+ node.params = [];
+ this.state.inType = true;
+
+ if (this.isRelational("<") || this.match(94)) {
+ this.next();
+ } else {
+ this.unexpected();
+ }
+
+ let defaultRequired = false;
+
+ do {
+ const typeParameter = this.flowParseTypeParameter(defaultRequired);
+ node.params.push(typeParameter);
+
+ if (typeParameter.default) {
+ defaultRequired = true;
+ }
+
+ if (!this.isRelational(">")) {
+ this.expect(20);
+ }
+ } while (!this.isRelational(">"));
+
+ this.expectRelational(">");
+ this.state.inType = oldInType;
+ return this.finishNode(node, "TypeParameterDeclaration");
+ }
+
+ flowParseTypeParameterInstantiation() {
+ const node = this.startNode();
+ const oldInType = this.state.inType;
+ node.params = [];
+ this.state.inType = true;
+ this.expectRelational("<");
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+ this.state.noAnonFunctionType = false;
+
+ while (!this.isRelational(">")) {
+ node.params.push(this.flowParseType());
+
+ if (!this.isRelational(">")) {
+ this.expect(20);
+ }
+ }
+
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ this.expectRelational(">");
+ this.state.inType = oldInType;
+ return this.finishNode(node, "TypeParameterInstantiation");
+ }
+
+ flowParseTypeParameterInstantiationCallOrNew() {
+ const node = this.startNode();
+ const oldInType = this.state.inType;
+ node.params = [];
+ this.state.inType = true;
+ this.expectRelational("<");
+
+ while (!this.isRelational(">")) {
+ node.params.push(this.flowParseTypeOrImplicitInstantiation());
+
+ if (!this.isRelational(">")) {
+ this.expect(20);
+ }
+ }
+
+ this.expectRelational(">");
+ this.state.inType = oldInType;
+ return this.finishNode(node, "TypeParameterInstantiation");
+ }
+
+ flowParseInterfaceType() {
+ const node = this.startNode();
+ this.expectContextual("interface");
+ node.extends = [];
+
+ if (this.eat(80)) {
+ do {
+ node.extends.push(this.flowParseInterfaceExtends());
+ } while (this.eat(20));
+ }
+
+ node.body = this.flowParseObjectType({
+ allowStatic: false,
+ allowExact: false,
+ allowSpread: false,
+ allowProto: false,
+ allowInexact: false
+ });
+ return this.finishNode(node, "InterfaceTypeAnnotation");
+ }
+
+ flowParseObjectPropertyKey() {
+ return this.match(0) || this.match(4) ? this.parseExprAtom() : this.parseIdentifier(true);
+ }
+
+ flowParseObjectTypeIndexer(node, isStatic, variance) {
+ node.static = isStatic;
+
+ if (this.lookahead().type === 22) {
+ node.id = this.flowParseObjectPropertyKey();
+ node.key = this.flowParseTypeInitialiser();
+ } else {
+ node.id = null;
+ node.key = this.flowParseType();
+ }
+
+ this.expect(11);
+ node.value = this.flowParseTypeInitialiser();
+ node.variance = variance;
+ return this.finishNode(node, "ObjectTypeIndexer");
+ }
+
+ flowParseObjectTypeInternalSlot(node, isStatic) {
+ node.static = isStatic;
+ node.id = this.flowParseObjectPropertyKey();
+ this.expect(11);
+ this.expect(11);
+
+ if (this.isRelational("<") || this.match(18)) {
+ node.method = true;
+ node.optional = false;
+ node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));
+ } else {
+ node.method = false;
+
+ if (this.eat(25)) {
+ node.optional = true;
+ }
+
+ node.value = this.flowParseTypeInitialiser();
+ }
+
+ return this.finishNode(node, "ObjectTypeInternalSlot");
+ }
+
+ flowParseObjectTypeMethodish(node) {
+ node.params = [];
+ node.rest = null;
+ node.typeParameters = null;
+ node.this = null;
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+
+ this.expect(18);
+
+ if (this.match(77)) {
+ node.this = this.flowParseFunctionTypeParam(true);
+ node.this.name = null;
+
+ if (!this.match(19)) {
+ this.expect(20);
+ }
+ }
+
+ while (!this.match(19) && !this.match(29)) {
+ node.params.push(this.flowParseFunctionTypeParam(false));
+
+ if (!this.match(19)) {
+ this.expect(20);
+ }
+ }
+
+ if (this.eat(29)) {
+ node.rest = this.flowParseFunctionTypeParam(false);
+ }
+
+ this.expect(19);
+ node.returnType = this.flowParseTypeInitialiser();
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ }
+
+ flowParseObjectTypeCallProperty(node, isStatic) {
+ const valueNode = this.startNode();
+ node.static = isStatic;
+ node.value = this.flowParseObjectTypeMethodish(valueNode);
+ return this.finishNode(node, "ObjectTypeCallProperty");
+ }
+
+ flowParseObjectType({
+ allowStatic,
+ allowExact,
+ allowSpread,
+ allowProto,
+ allowInexact
+ }) {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ const nodeStart = this.startNode();
+ nodeStart.callProperties = [];
+ nodeStart.properties = [];
+ nodeStart.indexers = [];
+ nodeStart.internalSlots = [];
+ let endDelim;
+ let exact;
+ let inexact = false;
+
+ if (allowExact && this.match(14)) {
+ this.expect(14);
+ endDelim = 17;
+ exact = true;
+ } else {
+ this.expect(13);
+ endDelim = 16;
+ exact = false;
+ }
+
+ nodeStart.exact = exact;
+
+ while (!this.match(endDelim)) {
+ let isStatic = false;
+ let protoStart = null;
+ let inexactStart = null;
+ const node = this.startNode();
+
+ if (allowProto && this.isContextual("proto")) {
+ const lookahead = this.lookahead();
+
+ if (lookahead.type !== 22 && lookahead.type !== 25) {
+ this.next();
+ protoStart = this.state.start;
+ allowStatic = false;
+ }
+ }
+
+ if (allowStatic && this.isContextual("static")) {
+ const lookahead = this.lookahead();
+
+ if (lookahead.type !== 22 && lookahead.type !== 25) {
+ this.next();
+ isStatic = true;
+ }
+ }
+
+ const variance = this.flowParseVariance();
+
+ if (this.eat(8)) {
+ if (protoStart != null) {
+ this.unexpected(protoStart);
+ }
+
+ if (this.eat(8)) {
+ if (variance) {
+ this.unexpected(variance.start);
+ }
+
+ nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));
+ } else {
+ nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));
+ }
+ } else if (this.match(18) || this.isRelational("<")) {
+ if (protoStart != null) {
+ this.unexpected(protoStart);
+ }
+
+ if (variance) {
+ this.unexpected(variance.start);
+ }
+
+ nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));
+ } else {
+ let kind = "init";
+
+ if (this.isContextual("get") || this.isContextual("set")) {
+ const lookahead = this.lookahead();
+
+ if (lookahead.type === 5 || lookahead.type === 4 || lookahead.type === 0) {
+ kind = this.state.value;
+ this.next();
+ }
+ }
+
+ const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);
+
+ if (propOrInexact === null) {
+ inexact = true;
+ inexactStart = this.state.lastTokStart;
+ } else {
+ nodeStart.properties.push(propOrInexact);
+ }
+ }
+
+ this.flowObjectTypeSemicolon();
+
+ if (inexactStart && !this.match(16) && !this.match(17)) {
+ this.raise(inexactStart, FlowErrors.UnexpectedExplicitInexactInObject);
+ }
+ }
+
+ this.expect(endDelim);
+
+ if (allowSpread) {
+ nodeStart.inexact = inexact;
+ }
+
+ const out = this.finishNode(nodeStart, "ObjectTypeAnnotation");
+ this.state.inType = oldInType;
+ return out;
+ }
+
+ flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact) {
+ if (this.eat(29)) {
+ const isInexactToken = this.match(20) || this.match(21) || this.match(16) || this.match(17);
+
+ if (isInexactToken) {
+ if (!allowSpread) {
+ this.raise(this.state.lastTokStart, FlowErrors.InexactInsideNonObject);
+ } else if (!allowInexact) {
+ this.raise(this.state.lastTokStart, FlowErrors.InexactInsideExact);
+ }
+
+ if (variance) {
+ this.raise(variance.start, FlowErrors.InexactVariance);
+ }
+
+ return null;
+ }
+
+ if (!allowSpread) {
+ this.raise(this.state.lastTokStart, FlowErrors.UnexpectedSpreadType);
+ }
+
+ if (protoStart != null) {
+ this.unexpected(protoStart);
+ }
+
+ if (variance) {
+ this.raise(variance.start, FlowErrors.SpreadVariance);
+ }
+
+ node.argument = this.flowParseType();
+ return this.finishNode(node, "ObjectTypeSpreadProperty");
+ } else {
+ node.key = this.flowParseObjectPropertyKey();
+ node.static = isStatic;
+ node.proto = protoStart != null;
+ node.kind = kind;
+ let optional = false;
+
+ if (this.isRelational("<") || this.match(18)) {
+ node.method = true;
+
+ if (protoStart != null) {
+ this.unexpected(protoStart);
+ }
+
+ if (variance) {
+ this.unexpected(variance.start);
+ }
+
+ node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));
+
+ if (kind === "get" || kind === "set") {
+ this.flowCheckGetterSetterParams(node);
+ }
+
+ if (!allowSpread && node.key.name === "constructor" && node.value.this) {
+ this.raise(node.value.this.start, FlowErrors.ThisParamBannedInConstructor);
+ }
+ } else {
+ if (kind !== "init") this.unexpected();
+ node.method = false;
+
+ if (this.eat(25)) {
+ optional = true;
+ }
+
+ node.value = this.flowParseTypeInitialiser();
+ node.variance = variance;
+ }
+
+ node.optional = optional;
+ return this.finishNode(node, "ObjectTypeProperty");
+ }
+ }
+
+ flowCheckGetterSetterParams(property) {
+ const paramCount = property.kind === "get" ? 0 : 1;
+ const start = property.start;
+ const length = property.value.params.length + (property.value.rest ? 1 : 0);
+
+ if (property.value.this) {
+ this.raise(property.value.this.start, property.kind === "get" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam);
+ }
+
+ if (length !== paramCount) {
+ if (property.kind === "get") {
+ this.raise(start, ErrorMessages.BadGetterArity);
+ } else {
+ this.raise(start, ErrorMessages.BadSetterArity);
+ }
+ }
+
+ if (property.kind === "set" && property.value.rest) {
+ this.raise(start, ErrorMessages.BadSetterRestParameter);
+ }
+ }
+
+ flowObjectTypeSemicolon() {
+ if (!this.eat(21) && !this.eat(20) && !this.match(16) && !this.match(17)) {
+ this.unexpected();
+ }
+ }
+
+ flowParseQualifiedTypeIdentifier(startPos, startLoc, id) {
+ startPos = startPos || this.state.start;
+ startLoc = startLoc || this.state.startLoc;
+ let node = id || this.flowParseRestrictedIdentifier(true);
+
+ while (this.eat(24)) {
+ const node2 = this.startNodeAt(startPos, startLoc);
+ node2.qualification = node;
+ node2.id = this.flowParseRestrictedIdentifier(true);
+ node = this.finishNode(node2, "QualifiedTypeIdentifier");
+ }
+
+ return node;
+ }
+
+ flowParseGenericType(startPos, startLoc, id) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.typeParameters = null;
+ node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ }
+
+ return this.finishNode(node, "GenericTypeAnnotation");
+ }
+
+ flowParseTypeofType() {
+ const node = this.startNode();
+ this.expect(86);
+ node.argument = this.flowParsePrimaryType();
+ return this.finishNode(node, "TypeofTypeAnnotation");
+ }
+
+ flowParseTupleType() {
+ const node = this.startNode();
+ node.types = [];
+ this.expect(8);
+
+ while (this.state.pos < this.length && !this.match(11)) {
+ node.types.push(this.flowParseType());
+ if (this.match(11)) break;
+ this.expect(20);
+ }
+
+ this.expect(11);
+ return this.finishNode(node, "TupleTypeAnnotation");
+ }
+
+ flowParseFunctionTypeParam(first) {
+ let name = null;
+ let optional = false;
+ let typeAnnotation = null;
+ const node = this.startNode();
+ const lh = this.lookahead();
+ const isThis = this.state.type === 77;
+
+ if (lh.type === 22 || lh.type === 25) {
+ if (isThis && !first) {
+ this.raise(node.start, FlowErrors.ThisParamMustBeFirst);
+ }
+
+ name = this.parseIdentifier(isThis);
+
+ if (this.eat(25)) {
+ optional = true;
+
+ if (isThis) {
+ this.raise(node.start, FlowErrors.ThisParamMayNotBeOptional);
+ }
+ }
+
+ typeAnnotation = this.flowParseTypeInitialiser();
+ } else {
+ typeAnnotation = this.flowParseType();
+ }
+
+ node.name = name;
+ node.optional = optional;
+ node.typeAnnotation = typeAnnotation;
+ return this.finishNode(node, "FunctionTypeParam");
+ }
+
+ reinterpretTypeAsFunctionTypeParam(type) {
+ const node = this.startNodeAt(type.start, type.loc.start);
+ node.name = null;
+ node.optional = false;
+ node.typeAnnotation = type;
+ return this.finishNode(node, "FunctionTypeParam");
+ }
+
+ flowParseFunctionTypeParams(params = []) {
+ let rest = null;
+ let _this = null;
+
+ if (this.match(77)) {
+ _this = this.flowParseFunctionTypeParam(true);
+ _this.name = null;
+
+ if (!this.match(19)) {
+ this.expect(20);
+ }
+ }
+
+ while (!this.match(19) && !this.match(29)) {
+ params.push(this.flowParseFunctionTypeParam(false));
+
+ if (!this.match(19)) {
+ this.expect(20);
+ }
+ }
+
+ if (this.eat(29)) {
+ rest = this.flowParseFunctionTypeParam(false);
+ }
+
+ return {
+ params,
+ rest,
+ _this
+ };
+ }
+
+ flowIdentToTypeAnnotation(startPos, startLoc, node, id) {
+ switch (id.name) {
+ case "any":
+ return this.finishNode(node, "AnyTypeAnnotation");
+
+ case "bool":
+ case "boolean":
+ return this.finishNode(node, "BooleanTypeAnnotation");
+
+ case "mixed":
+ return this.finishNode(node, "MixedTypeAnnotation");
+
+ case "empty":
+ return this.finishNode(node, "EmptyTypeAnnotation");
+
+ case "number":
+ return this.finishNode(node, "NumberTypeAnnotation");
+
+ case "string":
+ return this.finishNode(node, "StringTypeAnnotation");
+
+ case "symbol":
+ return this.finishNode(node, "SymbolTypeAnnotation");
+
+ default:
+ this.checkNotUnderscore(id.name);
+ return this.flowParseGenericType(startPos, startLoc, id);
+ }
+ }
+
+ flowParsePrimaryType() {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const node = this.startNode();
+ let tmp;
+ let type;
+ let isGroupedType = false;
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+
+ switch (this.state.type) {
+ case 5:
+ if (this.isContextual("interface")) {
+ return this.flowParseInterfaceType();
+ }
+
+ return this.flowIdentToTypeAnnotation(startPos, startLoc, node, this.parseIdentifier());
+
+ case 13:
+ return this.flowParseObjectType({
+ allowStatic: false,
+ allowExact: false,
+ allowSpread: true,
+ allowProto: false,
+ allowInexact: true
+ });
+
+ case 14:
+ return this.flowParseObjectType({
+ allowStatic: false,
+ allowExact: true,
+ allowSpread: true,
+ allowProto: false,
+ allowInexact: false
+ });
+
+ case 8:
+ this.state.noAnonFunctionType = false;
+ type = this.flowParseTupleType();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ return type;
+
+ case 50:
+ if (this.state.value === "<") {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ this.expect(18);
+ tmp = this.flowParseFunctionTypeParams();
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+ node.this = tmp._this;
+ this.expect(19);
+ this.expect(27);
+ node.returnType = this.flowParseType();
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ }
+
+ break;
+
+ case 18:
+ this.next();
+
+ if (!this.match(19) && !this.match(29)) {
+ if (this.match(5) || this.match(77)) {
+ const token = this.lookahead().type;
+ isGroupedType = token !== 25 && token !== 22;
+ } else {
+ isGroupedType = true;
+ }
+ }
+
+ if (isGroupedType) {
+ this.state.noAnonFunctionType = false;
+ type = this.flowParseType();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+
+ if (this.state.noAnonFunctionType || !(this.match(20) || this.match(19) && this.lookahead().type === 27)) {
+ this.expect(19);
+ return type;
+ } else {
+ this.eat(20);
+ }
+ }
+
+ if (type) {
+ tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);
+ } else {
+ tmp = this.flowParseFunctionTypeParams();
+ }
+
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+ node.this = tmp._this;
+ this.expect(19);
+ this.expect(27);
+ node.returnType = this.flowParseType();
+ node.typeParameters = null;
+ return this.finishNode(node, "FunctionTypeAnnotation");
+
+ case 4:
+ return this.parseLiteral(this.state.value, "StringLiteralTypeAnnotation");
+
+ case 84:
+ case 85:
+ node.value = this.match(84);
+ this.next();
+ return this.finishNode(node, "BooleanLiteralTypeAnnotation");
+
+ case 52:
+ if (this.state.value === "-") {
+ this.next();
+
+ if (this.match(0)) {
+ return this.parseLiteralAtNode(-this.state.value, "NumberLiteralTypeAnnotation", node);
+ }
+
+ if (this.match(1)) {
+ return this.parseLiteralAtNode(-this.state.value, "BigIntLiteralTypeAnnotation", node);
+ }
+
+ throw this.raise(this.state.start, FlowErrors.UnexpectedSubtractionOperand);
+ }
+
+ throw this.unexpected();
+
+ case 0:
+ return this.parseLiteral(this.state.value, "NumberLiteralTypeAnnotation");
+
+ case 1:
+ return this.parseLiteral(this.state.value, "BigIntLiteralTypeAnnotation");
+
+ case 87:
+ this.next();
+ return this.finishNode(node, "VoidTypeAnnotation");
+
+ case 83:
+ this.next();
+ return this.finishNode(node, "NullLiteralTypeAnnotation");
+
+ case 77:
+ this.next();
+ return this.finishNode(node, "ThisTypeAnnotation");
+
+ case 54:
+ this.next();
+ return this.finishNode(node, "ExistsTypeAnnotation");
+
+ case 86:
+ return this.flowParseTypeofType();
+
+ default:
+ if (tokenIsKeyword(this.state.type)) {
+ const label = tokenLabelName(this.state.type);
+ this.next();
+ return super.createIdentifier(node, label);
+ }
+
+ }
+
+ throw this.unexpected();
+ }
+
+ flowParsePostfixType() {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ let type = this.flowParsePrimaryType();
+ let seenOptionalIndexedAccess = false;
+
+ while ((this.match(8) || this.match(26)) && !this.canInsertSemicolon()) {
+ const node = this.startNodeAt(startPos, startLoc);
+ const optional = this.eat(26);
+ seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;
+ this.expect(8);
+
+ if (!optional && this.match(11)) {
+ node.elementType = type;
+ this.next();
+ type = this.finishNode(node, "ArrayTypeAnnotation");
+ } else {
+ node.objectType = type;
+ node.indexType = this.flowParseType();
+ this.expect(11);
+
+ if (seenOptionalIndexedAccess) {
+ node.optional = optional;
+ type = this.finishNode(node, "OptionalIndexedAccessType");
+ } else {
+ type = this.finishNode(node, "IndexedAccessType");
+ }
+ }
+ }
+
+ return type;
+ }
+
+ flowParsePrefixType() {
+ const node = this.startNode();
+
+ if (this.eat(25)) {
+ node.typeAnnotation = this.flowParsePrefixType();
+ return this.finishNode(node, "NullableTypeAnnotation");
+ } else {
+ return this.flowParsePostfixType();
+ }
+ }
+
+ flowParseAnonFunctionWithoutParens() {
+ const param = this.flowParsePrefixType();
+
+ if (!this.state.noAnonFunctionType && this.eat(27)) {
+ const node = this.startNodeAt(param.start, param.loc.start);
+ node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];
+ node.rest = null;
+ node.this = null;
+ node.returnType = this.flowParseType();
+ node.typeParameters = null;
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ }
+
+ return param;
+ }
+
+ flowParseIntersectionType() {
+ const node = this.startNode();
+ this.eat(48);
+ const type = this.flowParseAnonFunctionWithoutParens();
+ node.types = [type];
+
+ while (this.eat(48)) {
+ node.types.push(this.flowParseAnonFunctionWithoutParens());
+ }
+
+ return node.types.length === 1 ? type : this.finishNode(node, "IntersectionTypeAnnotation");
+ }
+
+ flowParseUnionType() {
+ const node = this.startNode();
+ this.eat(46);
+ const type = this.flowParseIntersectionType();
+ node.types = [type];
+
+ while (this.eat(46)) {
+ node.types.push(this.flowParseIntersectionType());
+ }
+
+ return node.types.length === 1 ? type : this.finishNode(node, "UnionTypeAnnotation");
+ }
+
+ flowParseType() {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ const type = this.flowParseUnionType();
+ this.state.inType = oldInType;
+ return type;
+ }
+
+ flowParseTypeOrImplicitInstantiation() {
+ if (this.state.type === 5 && this.state.value === "_") {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const node = this.parseIdentifier();
+ return this.flowParseGenericType(startPos, startLoc, node);
+ } else {
+ return this.flowParseType();
+ }
+ }
+
+ flowParseTypeAnnotation() {
+ const node = this.startNode();
+ node.typeAnnotation = this.flowParseTypeInitialiser();
+ return this.finishNode(node, "TypeAnnotation");
+ }
+
+ flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {
+ const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();
+
+ if (this.match(22)) {
+ ident.typeAnnotation = this.flowParseTypeAnnotation();
+ this.resetEndLocation(ident);
+ }
+
+ return ident;
+ }
+
+ typeCastToParameter(node) {
+ node.expression.typeAnnotation = node.typeAnnotation;
+ this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);
+ return node.expression;
+ }
+
+ flowParseVariance() {
+ let variance = null;
+
+ if (this.match(52)) {
+ variance = this.startNode();
+
+ if (this.state.value === "+") {
+ variance.kind = "plus";
+ } else {
+ variance.kind = "minus";
+ }
+
+ this.next();
+ this.finishNode(variance, "Variance");
+ }
+
+ return variance;
+ }
+
+ parseFunctionBody(node, allowExpressionBody, isMethod = false) {
+ if (allowExpressionBody) {
+ return this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));
+ }
+
+ return super.parseFunctionBody(node, false, isMethod);
+ }
+
+ parseFunctionBodyAndFinish(node, type, isMethod = false) {
+ if (this.match(22)) {
+ const typeNode = this.startNode();
+ [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();
+ node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, "TypeAnnotation") : null;
+ }
+
+ super.parseFunctionBodyAndFinish(node, type, isMethod);
+ }
+
+ parseStatement(context, topLevel) {
+ if (this.state.strict && this.match(5) && this.state.value === "interface") {
+ const lookahead = this.lookahead();
+
+ if (lookahead.type === 5 || isKeyword(lookahead.value)) {
+ const node = this.startNode();
+ this.next();
+ return this.flowParseInterface(node);
+ }
+ } else if (this.shouldParseEnums() && this.isContextual("enum")) {
+ const node = this.startNode();
+ this.next();
+ return this.flowParseEnumDeclaration(node);
+ }
+
+ const stmt = super.parseStatement(context, topLevel);
+
+ if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {
+ this.flowPragma = null;
+ }
+
+ return stmt;
+ }
+
+ parseExpressionStatement(node, expr) {
+ if (expr.type === "Identifier") {
+ if (expr.name === "declare") {
+ if (this.match(79) || this.match(5) || this.match(67) || this.match(73) || this.match(81)) {
+ return this.flowParseDeclare(node);
+ }
+ } else if (this.match(5)) {
+ if (expr.name === "interface") {
+ return this.flowParseInterface(node);
+ } else if (expr.name === "type") {
+ return this.flowParseTypeAlias(node);
+ } else if (expr.name === "opaque") {
+ return this.flowParseOpaqueType(node, false);
+ }
+ }
+ }
+
+ return super.parseExpressionStatement(node, expr);
+ }
+
+ shouldParseExportDeclaration() {
+ return this.isContextual("type") || this.isContextual("interface") || this.isContextual("opaque") || this.shouldParseEnums() && this.isContextual("enum") || super.shouldParseExportDeclaration();
+ }
+
+ isExportDefaultSpecifier() {
+ if (this.match(5) && (this.state.value === "type" || this.state.value === "interface" || this.state.value === "opaque" || this.shouldParseEnums() && this.state.value === "enum")) {
+ return false;
+ }
+
+ return super.isExportDefaultSpecifier();
+ }
+
+ parseExportDefaultExpression() {
+ if (this.shouldParseEnums() && this.isContextual("enum")) {
+ const node = this.startNode();
+ this.next();
+ return this.flowParseEnumDeclaration(node);
+ }
+
+ return super.parseExportDefaultExpression();
+ }
+
+ parseConditional(expr, startPos, startLoc, refExpressionErrors) {
+ if (!this.match(25)) return expr;
+
+ if (this.state.maybeInArrowParameters) {
+ const nextCh = this.lookaheadCharCode();
+
+ if (nextCh === 44 || nextCh === 61 || nextCh === 58 || nextCh === 41) {
+ this.setOptionalParametersError(refExpressionErrors);
+ return expr;
+ }
+ }
+
+ this.expect(25);
+ const state = this.state.clone();
+ const originalNoArrowAt = this.state.noArrowAt;
+ const node = this.startNodeAt(startPos, startLoc);
+ let {
+ consequent,
+ failed
+ } = this.tryParseConditionalConsequent();
+ let [valid, invalid] = this.getArrowLikeExpressions(consequent);
+
+ if (failed || invalid.length > 0) {
+ const noArrowAt = [...originalNoArrowAt];
+
+ if (invalid.length > 0) {
+ this.state = state;
+ this.state.noArrowAt = noArrowAt;
+
+ for (let i = 0; i < invalid.length; i++) {
+ noArrowAt.push(invalid[i].start);
+ }
+
+ ({
+ consequent,
+ failed
+ } = this.tryParseConditionalConsequent());
+ [valid, invalid] = this.getArrowLikeExpressions(consequent);
+ }
+
+ if (failed && valid.length > 1) {
+ this.raise(state.start, FlowErrors.AmbiguousConditionalArrow);
+ }
+
+ if (failed && valid.length === 1) {
+ this.state = state;
+ noArrowAt.push(valid[0].start);
+ this.state.noArrowAt = noArrowAt;
+ ({
+ consequent,
+ failed
+ } = this.tryParseConditionalConsequent());
+ }
+ }
+
+ this.getArrowLikeExpressions(consequent, true);
+ this.state.noArrowAt = originalNoArrowAt;
+ this.expect(22);
+ node.test = expr;
+ node.consequent = consequent;
+ node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined));
+ return this.finishNode(node, "ConditionalExpression");
+ }
+
+ tryParseConditionalConsequent() {
+ this.state.noArrowParamsConversionAt.push(this.state.start);
+ const consequent = this.parseMaybeAssignAllowIn();
+ const failed = !this.match(22);
+ this.state.noArrowParamsConversionAt.pop();
+ return {
+ consequent,
+ failed
+ };
+ }
+
+ getArrowLikeExpressions(node, disallowInvalid) {
+ const stack = [node];
+ const arrows = [];
+
+ while (stack.length !== 0) {
+ const node = stack.pop();
+
+ if (node.type === "ArrowFunctionExpression") {
+ if (node.typeParameters || !node.returnType) {
+ this.finishArrowValidation(node);
+ } else {
+ arrows.push(node);
+ }
+
+ stack.push(node.body);
+ } else if (node.type === "ConditionalExpression") {
+ stack.push(node.consequent);
+ stack.push(node.alternate);
+ }
+ }
+
+ if (disallowInvalid) {
+ arrows.forEach(node => this.finishArrowValidation(node));
+ return [arrows, []];
+ }
+
+ return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));
+ }
+
+ finishArrowValidation(node) {
+ var _node$extra;
+
+ this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingComma, false);
+ this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);
+ super.checkParams(node, false, true);
+ this.scope.exit();
+ }
+
+ forwardNoArrowParamsConversionAt(node, parse) {
+ let result;
+
+ if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
+ this.state.noArrowParamsConversionAt.push(this.state.start);
+ result = parse();
+ this.state.noArrowParamsConversionAt.pop();
+ } else {
+ result = parse();
+ }
+
+ return result;
+ }
+
+ parseParenItem(node, startPos, startLoc) {
+ node = super.parseParenItem(node, startPos, startLoc);
+
+ if (this.eat(25)) {
+ node.optional = true;
+ this.resetEndLocation(node);
+ }
+
+ if (this.match(22)) {
+ const typeCastNode = this.startNodeAt(startPos, startLoc);
+ typeCastNode.expression = node;
+ typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();
+ return this.finishNode(typeCastNode, "TypeCastExpression");
+ }
+
+ return node;
+ }
+
+ assertModuleNodeAllowed(node) {
+ if (node.type === "ImportDeclaration" && (node.importKind === "type" || node.importKind === "typeof") || node.type === "ExportNamedDeclaration" && node.exportKind === "type" || node.type === "ExportAllDeclaration" && node.exportKind === "type") {
+ return;
+ }
+
+ super.assertModuleNodeAllowed(node);
+ }
+
+ parseExport(node) {
+ const decl = super.parseExport(node);
+
+ if (decl.type === "ExportNamedDeclaration" || decl.type === "ExportAllDeclaration") {
+ decl.exportKind = decl.exportKind || "value";
+ }
+
+ return decl;
+ }
+
+ parseExportDeclaration(node) {
+ if (this.isContextual("type")) {
+ node.exportKind = "type";
+ const declarationNode = this.startNode();
+ this.next();
+
+ if (this.match(13)) {
+ node.specifiers = this.parseExportSpecifiers();
+ this.parseExportFrom(node);
+ return null;
+ } else {
+ return this.flowParseTypeAlias(declarationNode);
+ }
+ } else if (this.isContextual("opaque")) {
+ node.exportKind = "type";
+ const declarationNode = this.startNode();
+ this.next();
+ return this.flowParseOpaqueType(declarationNode, false);
+ } else if (this.isContextual("interface")) {
+ node.exportKind = "type";
+ const declarationNode = this.startNode();
+ this.next();
+ return this.flowParseInterface(declarationNode);
+ } else if (this.shouldParseEnums() && this.isContextual("enum")) {
+ node.exportKind = "value";
+ const declarationNode = this.startNode();
+ this.next();
+ return this.flowParseEnumDeclaration(declarationNode);
+ } else {
+ return super.parseExportDeclaration(node);
+ }
+ }
+
+ eatExportStar(node) {
+ if (super.eatExportStar(...arguments)) return true;
+
+ if (this.isContextual("type") && this.lookahead().type === 54) {
+ node.exportKind = "type";
+ this.next();
+ this.next();
+ return true;
+ }
+
+ return false;
+ }
+
+ maybeParseExportNamespaceSpecifier(node) {
+ const pos = this.state.start;
+ const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);
+
+ if (hasNamespace && node.exportKind === "type") {
+ this.unexpected(pos);
+ }
+
+ return hasNamespace;
+ }
+
+ parseClassId(node, isStatement, optionalId) {
+ super.parseClassId(node, isStatement, optionalId);
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ }
+
+ parseClassMember(classBody, member, state) {
+ const pos = this.state.start;
+
+ if (this.isContextual("declare")) {
+ if (this.parseClassMemberFromModifier(classBody, member)) {
+ return;
+ }
+
+ member.declare = true;
+ }
+
+ super.parseClassMember(classBody, member, state);
+
+ if (member.declare) {
+ if (member.type !== "ClassProperty" && member.type !== "ClassPrivateProperty" && member.type !== "PropertyDefinition") {
+ this.raise(pos, FlowErrors.DeclareClassElement);
+ } else if (member.value) {
+ this.raise(member.value.start, FlowErrors.DeclareClassFieldInitializer);
+ }
+ }
+ }
+
+ isIterator(word) {
+ return word === "iterator" || word === "asyncIterator";
+ }
+
+ readIterator() {
+ const word = super.readWord1();
+ const fullWord = "@@" + word;
+
+ if (!this.isIterator(word) || !this.state.inType) {
+ this.raise(this.state.pos, ErrorMessages.InvalidIdentifier, fullWord);
+ }
+
+ this.finishToken(5, fullWord);
+ }
+
+ getTokenFromCode(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (code === 123 && next === 124) {
+ return this.finishOp(14, 2);
+ } else if (this.state.inType && (code === 62 || code === 60)) {
+ return this.finishOp(50, 1);
+ } else if (this.state.inType && code === 63) {
+ if (next === 46) {
+ return this.finishOp(26, 2);
+ }
+
+ return this.finishOp(25, 1);
+ } else if (isIteratorStart(code, next)) {
+ this.state.pos += 2;
+ return this.readIterator();
+ } else {
+ return super.getTokenFromCode(code);
+ }
+ }
+
+ isAssignable(node, isBinding) {
+ if (node.type === "TypeCastExpression") {
+ return this.isAssignable(node.expression, isBinding);
+ } else {
+ return super.isAssignable(node, isBinding);
+ }
+ }
+
+ toAssignable(node, isLHS = false) {
+ if (node.type === "TypeCastExpression") {
+ return super.toAssignable(this.typeCastToParameter(node), isLHS);
+ } else {
+ return super.toAssignable(node, isLHS);
+ }
+ }
+
+ toAssignableList(exprList, trailingCommaPos, isLHS) {
+ for (let i = 0; i < exprList.length; i++) {
+ const expr = exprList[i];
+
+ if ((expr == null ? void 0 : expr.type) === "TypeCastExpression") {
+ exprList[i] = this.typeCastToParameter(expr);
+ }
+ }
+
+ return super.toAssignableList(exprList, trailingCommaPos, isLHS);
+ }
+
+ toReferencedList(exprList, isParenthesizedExpr) {
+ for (let i = 0; i < exprList.length; i++) {
+ var _expr$extra;
+
+ const expr = exprList[i];
+
+ if (expr && expr.type === "TypeCastExpression" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {
+ this.raise(expr.typeAnnotation.start, FlowErrors.TypeCastInPattern);
+ }
+ }
+
+ return exprList;
+ }
+
+ parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
+ const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);
+
+ if (canBePattern && !this.state.maybeInArrowParameters) {
+ this.toReferencedList(node.elements);
+ }
+
+ return node;
+ }
+
+ checkLVal(expr, ...args) {
+ if (expr.type !== "TypeCastExpression") {
+ return super.checkLVal(expr, ...args);
+ }
+ }
+
+ parseClassProperty(node) {
+ if (this.match(22)) {
+ node.typeAnnotation = this.flowParseTypeAnnotation();
+ }
+
+ return super.parseClassProperty(node);
+ }
+
+ parseClassPrivateProperty(node) {
+ if (this.match(22)) {
+ node.typeAnnotation = this.flowParseTypeAnnotation();
+ }
+
+ return super.parseClassPrivateProperty(node);
+ }
+
+ isClassMethod() {
+ return this.isRelational("<") || super.isClassMethod();
+ }
+
+ isClassProperty() {
+ return this.match(22) || super.isClassProperty();
+ }
+
+ isNonstaticConstructor(method) {
+ return !this.match(22) && super.isNonstaticConstructor(method);
+ }
+
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ if (method.variance) {
+ this.unexpected(method.variance.start);
+ }
+
+ delete method.variance;
+
+ if (this.isRelational("<")) {
+ method.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+
+ super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);
+
+ if (method.params && isConstructor) {
+ const params = method.params;
+
+ if (params.length > 0 && this.isThisParam(params[0])) {
+ this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);
+ }
+ } else if (method.type === "MethodDefinition" && isConstructor && method.value.params) {
+ const params = method.value.params;
+
+ if (params.length > 0 && this.isThisParam(params[0])) {
+ this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);
+ }
+ }
+ }
+
+ pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
+ if (method.variance) {
+ this.unexpected(method.variance.start);
+ }
+
+ delete method.variance;
+
+ if (this.isRelational("<")) {
+ method.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+
+ super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);
+ }
+
+ parseClassSuper(node) {
+ super.parseClassSuper(node);
+
+ if (node.superClass && this.isRelational("<")) {
+ node.superTypeParameters = this.flowParseTypeParameterInstantiation();
+ }
+
+ if (this.isContextual("implements")) {
+ this.next();
+ const implemented = node.implements = [];
+
+ do {
+ const node = this.startNode();
+ node.id = this.flowParseRestrictedIdentifier(true);
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ } else {
+ node.typeParameters = null;
+ }
+
+ implemented.push(this.finishNode(node, "ClassImplements"));
+ } while (this.eat(20));
+ }
+ }
+
+ checkGetterSetterParams(method) {
+ super.checkGetterSetterParams(method);
+ const params = this.getObjectOrClassMethodParams(method);
+
+ if (params.length > 0) {
+ const param = params[0];
+
+ if (this.isThisParam(param) && method.kind === "get") {
+ this.raise(param.start, FlowErrors.GetterMayNotHaveThisParam);
+ } else if (this.isThisParam(param)) {
+ this.raise(param.start, FlowErrors.SetterMayNotHaveThisParam);
+ }
+ }
+ }
+
+ parsePropertyName(node, isPrivateNameAllowed) {
+ const variance = this.flowParseVariance();
+ const key = super.parsePropertyName(node, isPrivateNameAllowed);
+ node.variance = variance;
+ return key;
+ }
+
+ parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
+ if (prop.variance) {
+ this.unexpected(prop.variance.start);
+ }
+
+ delete prop.variance;
+ let typeParameters;
+
+ if (this.isRelational("<") && !isAccessor) {
+ typeParameters = this.flowParseTypeParameterDeclaration();
+ if (!this.match(18)) this.unexpected();
+ }
+
+ super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);
+
+ if (typeParameters) {
+ (prop.value || prop).typeParameters = typeParameters;
+ }
+ }
+
+ parseAssignableListItemTypes(param) {
+ if (this.eat(25)) {
+ if (param.type !== "Identifier") {
+ this.raise(param.start, FlowErrors.PatternIsOptional);
+ }
+
+ if (this.isThisParam(param)) {
+ this.raise(param.start, FlowErrors.ThisParamMayNotBeOptional);
+ }
+
+ param.optional = true;
+ }
+
+ if (this.match(22)) {
+ param.typeAnnotation = this.flowParseTypeAnnotation();
+ } else if (this.isThisParam(param)) {
+ this.raise(param.start, FlowErrors.ThisParamAnnotationRequired);
+ }
+
+ if (this.match(35) && this.isThisParam(param)) {
+ this.raise(param.start, FlowErrors.ThisParamNoDefault);
+ }
+
+ this.resetEndLocation(param);
+ return param;
+ }
+
+ parseMaybeDefault(startPos, startLoc, left) {
+ const node = super.parseMaybeDefault(startPos, startLoc, left);
+
+ if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {
+ this.raise(node.typeAnnotation.start, FlowErrors.TypeBeforeInitializer);
+ }
+
+ return node;
+ }
+
+ shouldParseDefaultImport(node) {
+ if (!hasTypeImportKind(node)) {
+ return super.shouldParseDefaultImport(node);
+ }
+
+ return isMaybeDefaultImport(this.state);
+ }
+
+ parseImportSpecifierLocal(node, specifier, type, contextDescription) {
+ specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();
+ this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);
+ node.specifiers.push(this.finishNode(specifier, type));
+ }
+
+ maybeParseDefaultImportSpecifier(node) {
+ node.importKind = "value";
+ let kind = null;
+
+ if (this.match(86)) {
+ kind = "typeof";
+ } else if (this.isContextual("type")) {
+ kind = "type";
+ }
+
+ if (kind) {
+ const lh = this.lookahead();
+
+ if (kind === "type" && lh.type === 54) {
+ this.unexpected(lh.start);
+ }
+
+ if (isMaybeDefaultImport(lh) || lh.type === 13 || lh.type === 54) {
+ this.next();
+ node.importKind = kind;
+ }
+ }
+
+ return super.maybeParseDefaultImportSpecifier(node);
+ }
+
+ parseImportSpecifier(node) {
+ const specifier = this.startNode();
+ const firstIdentIsString = this.match(4);
+ const firstIdent = this.parseModuleExportName();
+ let specifierTypeKind = null;
+
+ if (firstIdent.type === "Identifier") {
+ if (firstIdent.name === "type") {
+ specifierTypeKind = "type";
+ } else if (firstIdent.name === "typeof") {
+ specifierTypeKind = "typeof";
+ }
+ }
+
+ let isBinding = false;
+
+ if (this.isContextual("as") && !this.isLookaheadContextual("as")) {
+ const as_ident = this.parseIdentifier(true);
+
+ if (specifierTypeKind !== null && !this.match(5) && !tokenIsKeyword(this.state.type)) {
+ specifier.imported = as_ident;
+ specifier.importKind = specifierTypeKind;
+ specifier.local = cloneIdentifier(as_ident);
+ } else {
+ specifier.imported = firstIdent;
+ specifier.importKind = null;
+ specifier.local = this.parseIdentifier();
+ }
+ } else {
+ if (specifierTypeKind !== null && (this.match(5) || tokenIsKeyword(this.state.type))) {
+ specifier.imported = this.parseIdentifier(true);
+ specifier.importKind = specifierTypeKind;
+ } else {
+ if (firstIdentIsString) {
+ throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, firstIdent.value);
+ }
+
+ specifier.imported = firstIdent;
+ specifier.importKind = null;
+ }
+
+ if (this.eatContextual("as")) {
+ specifier.local = this.parseIdentifier();
+ } else {
+ isBinding = true;
+ specifier.local = cloneIdentifier(specifier.imported);
+ }
+ }
+
+ const nodeIsTypeImport = hasTypeImportKind(node);
+ const specifierIsTypeImport = hasTypeImportKind(specifier);
+
+ if (nodeIsTypeImport && specifierIsTypeImport) {
+ this.raise(specifier.start, FlowErrors.ImportTypeShorthandOnlyInPureImport);
+ }
+
+ if (nodeIsTypeImport || specifierIsTypeImport) {
+ this.checkReservedType(specifier.local.name, specifier.local.start, true);
+ }
+
+ if (isBinding && !nodeIsTypeImport && !specifierIsTypeImport) {
+ this.checkReservedWord(specifier.local.name, specifier.start, true, true);
+ }
+
+ this.checkLVal(specifier.local, "import specifier", BIND_LEXICAL);
+ node.specifiers.push(this.finishNode(specifier, "ImportSpecifier"));
+ }
+
+ parseBindingAtom() {
+ switch (this.state.type) {
+ case 77:
+ return this.parseIdentifier(true);
+
+ default:
+ return super.parseBindingAtom();
+ }
+ }
+
+ parseFunctionParams(node, allowModifiers) {
+ const kind = node.kind;
+
+ if (kind !== "get" && kind !== "set" && this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+
+ super.parseFunctionParams(node, allowModifiers);
+ }
+
+ parseVarId(decl, kind) {
+ super.parseVarId(decl, kind);
+
+ if (this.match(22)) {
+ decl.id.typeAnnotation = this.flowParseTypeAnnotation();
+ this.resetEndLocation(decl.id);
+ }
+ }
+
+ parseAsyncArrowFromCallExpression(node, call) {
+ if (this.match(22)) {
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+ this.state.noAnonFunctionType = true;
+ node.returnType = this.flowParseTypeAnnotation();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ }
+
+ return super.parseAsyncArrowFromCallExpression(node, call);
+ }
+
+ shouldParseAsyncArrow() {
+ return this.match(22) || super.shouldParseAsyncArrow();
+ }
+
+ parseMaybeAssign(refExpressionErrors, afterLeftParse) {
+ var _jsx;
+
+ let state = null;
+ let jsx;
+
+ if (this.hasPlugin("jsx") && (this.match(94) || this.isRelational("<"))) {
+ state = this.state.clone();
+ jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);
+ if (!jsx.error) return jsx.node;
+ const {
+ context
+ } = this.state;
+ const curContext = context[context.length - 1];
+
+ if (curContext === types.j_oTag) {
+ context.length -= 2;
+ } else if (curContext === types.j_expr) {
+ context.length -= 1;
+ }
+ }
+
+ if ((_jsx = jsx) != null && _jsx.error || this.isRelational("<")) {
+ var _jsx2, _jsx3;
+
+ state = state || this.state.clone();
+ let typeParameters;
+ const arrow = this.tryParse(abort => {
+ var _arrowExpression$extr;
+
+ typeParameters = this.flowParseTypeParameterDeclaration();
+ const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {
+ const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
+ this.resetStartLocationFromNode(result, typeParameters);
+ return result;
+ });
+ if ((_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) abort();
+ const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);
+ if (expr.type !== "ArrowFunctionExpression") abort();
+ expr.typeParameters = typeParameters;
+ this.resetStartLocationFromNode(expr, typeParameters);
+ return arrowExpression;
+ }, state);
+ let arrowExpression = null;
+
+ if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === "ArrowFunctionExpression") {
+ if (!arrow.error && !arrow.aborted) {
+ if (arrow.node.async) {
+ this.raise(typeParameters.start, FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction);
+ }
+
+ return arrow.node;
+ }
+
+ arrowExpression = arrow.node;
+ }
+
+ if ((_jsx2 = jsx) != null && _jsx2.node) {
+ this.state = jsx.failState;
+ return jsx.node;
+ }
+
+ if (arrowExpression) {
+ this.state = arrow.failState;
+ return arrowExpression;
+ }
+
+ if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;
+ if (arrow.thrown) throw arrow.error;
+ throw this.raise(typeParameters.start, FlowErrors.UnexpectedTokenAfterTypeParameter);
+ }
+
+ return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
+ }
+
+ parseArrow(node) {
+ if (this.match(22)) {
+ const result = this.tryParse(() => {
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+ this.state.noAnonFunctionType = true;
+ const typeNode = this.startNode();
+ [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ if (this.canInsertSemicolon()) this.unexpected();
+ if (!this.match(27)) this.unexpected();
+ return typeNode;
+ });
+ if (result.thrown) return null;
+ if (result.error) this.state = result.failState;
+ node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, "TypeAnnotation") : null;
+ }
+
+ return super.parseArrow(node);
+ }
+
+ shouldParseArrow(params) {
+ return this.match(22) || super.shouldParseArrow(params);
+ }
+
+ setArrowFunctionParameters(node, params) {
+ if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
+ node.params = params;
+ } else {
+ super.setArrowFunctionParameters(node, params);
+ }
+ }
+
+ checkParams(node, allowDuplicates, isArrowFunction) {
+ if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
+ return;
+ }
+
+ for (let i = 0; i < node.params.length; i++) {
+ if (this.isThisParam(node.params[i]) && i > 0) {
+ this.raise(node.params[i].start, FlowErrors.ThisParamMustBeFirst);
+ }
+ }
+
+ return super.checkParams(...arguments);
+ }
+
+ parseParenAndDistinguishExpression(canBeArrow) {
+ return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);
+ }
+
+ parseSubscripts(base, startPos, startLoc, noCalls) {
+ if (base.type === "Identifier" && base.name === "async" && this.state.noArrowAt.indexOf(startPos) !== -1) {
+ this.next();
+ const node = this.startNodeAt(startPos, startLoc);
+ node.callee = base;
+ node.arguments = this.parseCallExpressionArguments(19, false);
+ base = this.finishNode(node, "CallExpression");
+ } else if (base.type === "Identifier" && base.name === "async" && this.isRelational("<")) {
+ const state = this.state.clone();
+ const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startPos, startLoc) || abort(), state);
+ if (!arrow.error && !arrow.aborted) return arrow.node;
+ const result = this.tryParse(() => super.parseSubscripts(base, startPos, startLoc, noCalls), state);
+ if (result.node && !result.error) return result.node;
+
+ if (arrow.node) {
+ this.state = arrow.failState;
+ return arrow.node;
+ }
+
+ if (result.node) {
+ this.state = result.failState;
+ return result.node;
+ }
+
+ throw arrow.error || result.error;
+ }
+
+ return super.parseSubscripts(base, startPos, startLoc, noCalls);
+ }
+
+ parseSubscript(base, startPos, startLoc, noCalls, subscriptState) {
+ if (this.match(26) && this.isLookaheadToken_lt()) {
+ subscriptState.optionalChainMember = true;
+
+ if (noCalls) {
+ subscriptState.stop = true;
+ return base;
+ }
+
+ this.next();
+ const node = this.startNodeAt(startPos, startLoc);
+ node.callee = base;
+ node.typeArguments = this.flowParseTypeParameterInstantiation();
+ this.expect(18);
+ node.arguments = this.parseCallExpressionArguments(19, false);
+ node.optional = true;
+ return this.finishCallExpression(node, true);
+ } else if (!noCalls && this.shouldParseTypes() && this.isRelational("<")) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.callee = base;
+ const result = this.tryParse(() => {
+ node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();
+ this.expect(18);
+ node.arguments = this.parseCallExpressionArguments(19, false);
+ if (subscriptState.optionalChainMember) node.optional = false;
+ return this.finishCallExpression(node, subscriptState.optionalChainMember);
+ });
+
+ if (result.node) {
+ if (result.error) this.state = result.failState;
+ return result.node;
+ }
+ }
+
+ return super.parseSubscript(base, startPos, startLoc, noCalls, subscriptState);
+ }
+
+ parseNewArguments(node) {
+ let targs = null;
+
+ if (this.shouldParseTypes() && this.isRelational("<")) {
+ targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;
+ }
+
+ node.typeArguments = targs;
+ super.parseNewArguments(node);
+ }
+
+ parseAsyncArrowWithTypeParameters(startPos, startLoc) {
+ const node = this.startNodeAt(startPos, startLoc);
+ this.parseFunctionParams(node);
+ if (!this.parseArrow(node)) return;
+ return this.parseArrowExpression(node, undefined, true);
+ }
+
+ readToken_mult_modulo(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (code === 42 && next === 47 && this.state.hasFlowComment) {
+ this.state.hasFlowComment = false;
+ this.state.pos += 2;
+ this.nextToken();
+ return;
+ }
+
+ super.readToken_mult_modulo(code);
+ }
+
+ readToken_pipe_amp(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (code === 124 && next === 125) {
+ this.finishOp(17, 2);
+ return;
+ }
+
+ super.readToken_pipe_amp(code);
+ }
+
+ parseTopLevel(file, program) {
+ const fileNode = super.parseTopLevel(file, program);
+
+ if (this.state.hasFlowComment) {
+ this.raise(this.state.pos, FlowErrors.UnterminatedFlowComment);
+ }
+
+ return fileNode;
+ }
+
+ skipBlockComment() {
+ if (this.hasPlugin("flowComments") && this.skipFlowComment()) {
+ if (this.state.hasFlowComment) {
+ this.unexpected(null, FlowErrors.NestedFlowComment);
+ }
+
+ this.hasFlowCommentCompletion();
+ this.state.pos += this.skipFlowComment();
+ this.state.hasFlowComment = true;
+ return;
+ }
+
+ if (this.state.hasFlowComment) {
+ const end = this.input.indexOf("*-/", this.state.pos += 2);
+
+ if (end === -1) {
+ throw this.raise(this.state.pos - 2, ErrorMessages.UnterminatedComment);
+ }
+
+ this.state.pos = end + 3;
+ return;
+ }
+
+ return super.skipBlockComment();
+ }
+
+ skipFlowComment() {
+ const {
+ pos
+ } = this.state;
+ let shiftToFirstNonWhiteSpace = 2;
+
+ while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {
+ shiftToFirstNonWhiteSpace++;
+ }
+
+ const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);
+ const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);
+
+ if (ch2 === 58 && ch3 === 58) {
+ return shiftToFirstNonWhiteSpace + 2;
+ }
+
+ if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === "flow-include") {
+ return shiftToFirstNonWhiteSpace + 12;
+ }
+
+ if (ch2 === 58 && ch3 !== 58) {
+ return shiftToFirstNonWhiteSpace;
+ }
+
+ return false;
+ }
+
+ hasFlowCommentCompletion() {
+ const end = this.input.indexOf("*/", this.state.pos);
+
+ if (end === -1) {
+ throw this.raise(this.state.pos, ErrorMessages.UnterminatedComment);
+ }
+ }
+
+ flowEnumErrorBooleanMemberNotInitialized(pos, {
+ enumName,
+ memberName
+ }) {
+ this.raise(pos, FlowErrors.EnumBooleanMemberNotInitialized, memberName, enumName);
+ }
+
+ flowEnumErrorInvalidMemberName(pos, {
+ enumName,
+ memberName
+ }) {
+ const suggestion = memberName[0].toUpperCase() + memberName.slice(1);
+ this.raise(pos, FlowErrors.EnumInvalidMemberName, memberName, suggestion, enumName);
+ }
+
+ flowEnumErrorDuplicateMemberName(pos, {
+ enumName,
+ memberName
+ }) {
+ this.raise(pos, FlowErrors.EnumDuplicateMemberName, memberName, enumName);
+ }
+
+ flowEnumErrorInconsistentMemberValues(pos, {
+ enumName
+ }) {
+ this.raise(pos, FlowErrors.EnumInconsistentMemberValues, enumName);
+ }
+
+ flowEnumErrorInvalidExplicitType(pos, {
+ enumName,
+ suppliedType
+ }) {
+ return this.raise(pos, suppliedType === null ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied : FlowErrors.EnumInvalidExplicitType, enumName, suppliedType);
+ }
+
+ flowEnumErrorInvalidMemberInitializer(pos, {
+ enumName,
+ explicitType,
+ memberName
+ }) {
+ let message = null;
+
+ switch (explicitType) {
+ case "boolean":
+ case "number":
+ case "string":
+ message = FlowErrors.EnumInvalidMemberInitializerPrimaryType;
+ break;
+
+ case "symbol":
+ message = FlowErrors.EnumInvalidMemberInitializerSymbolType;
+ break;
+
+ default:
+ message = FlowErrors.EnumInvalidMemberInitializerUnknownType;
+ }
+
+ return this.raise(pos, message, enumName, memberName, explicitType);
+ }
+
+ flowEnumErrorNumberMemberNotInitialized(pos, {
+ enumName,
+ memberName
+ }) {
+ this.raise(pos, FlowErrors.EnumNumberMemberNotInitialized, enumName, memberName);
+ }
+
+ flowEnumErrorStringMemberInconsistentlyInitailized(pos, {
+ enumName
+ }) {
+ this.raise(pos, FlowErrors.EnumStringMemberInconsistentlyInitailized, enumName);
+ }
+
+ flowEnumMemberInit() {
+ const startPos = this.state.start;
+
+ const endOfInit = () => this.match(20) || this.match(16);
+
+ switch (this.state.type) {
+ case 0:
+ {
+ const literal = this.parseNumericLiteral(this.state.value);
+
+ if (endOfInit()) {
+ return {
+ type: "number",
+ pos: literal.start,
+ value: literal
+ };
+ }
+
+ return {
+ type: "invalid",
+ pos: startPos
+ };
+ }
+
+ case 4:
+ {
+ const literal = this.parseStringLiteral(this.state.value);
+
+ if (endOfInit()) {
+ return {
+ type: "string",
+ pos: literal.start,
+ value: literal
+ };
+ }
+
+ return {
+ type: "invalid",
+ pos: startPos
+ };
+ }
+
+ case 84:
+ case 85:
+ {
+ const literal = this.parseBooleanLiteral(this.match(84));
+
+ if (endOfInit()) {
+ return {
+ type: "boolean",
+ pos: literal.start,
+ value: literal
+ };
+ }
+
+ return {
+ type: "invalid",
+ pos: startPos
+ };
+ }
+
+ default:
+ return {
+ type: "invalid",
+ pos: startPos
+ };
+ }
+ }
+
+ flowEnumMemberRaw() {
+ const pos = this.state.start;
+ const id = this.parseIdentifier(true);
+ const init = this.eat(35) ? this.flowEnumMemberInit() : {
+ type: "none",
+ pos
+ };
+ return {
+ id,
+ init
+ };
+ }
+
+ flowEnumCheckExplicitTypeMismatch(pos, context, expectedType) {
+ const {
+ explicitType
+ } = context;
+
+ if (explicitType === null) {
+ return;
+ }
+
+ if (explicitType !== expectedType) {
+ this.flowEnumErrorInvalidMemberInitializer(pos, context);
+ }
+ }
+
+ flowEnumMembers({
+ enumName,
+ explicitType
+ }) {
+ const seenNames = new Set();
+ const members = {
+ booleanMembers: [],
+ numberMembers: [],
+ stringMembers: [],
+ defaultedMembers: []
+ };
+ let hasUnknownMembers = false;
+
+ while (!this.match(16)) {
+ if (this.eat(29)) {
+ hasUnknownMembers = true;
+ break;
+ }
+
+ const memberNode = this.startNode();
+ const {
+ id,
+ init
+ } = this.flowEnumMemberRaw();
+ const memberName = id.name;
+
+ if (memberName === "") {
+ continue;
+ }
+
+ if (/^[a-z]/.test(memberName)) {
+ this.flowEnumErrorInvalidMemberName(id.start, {
+ enumName,
+ memberName
+ });
+ }
+
+ if (seenNames.has(memberName)) {
+ this.flowEnumErrorDuplicateMemberName(id.start, {
+ enumName,
+ memberName
+ });
+ }
+
+ seenNames.add(memberName);
+ const context = {
+ enumName,
+ explicitType,
+ memberName
+ };
+ memberNode.id = id;
+
+ switch (init.type) {
+ case "boolean":
+ {
+ this.flowEnumCheckExplicitTypeMismatch(init.pos, context, "boolean");
+ memberNode.init = init.value;
+ members.booleanMembers.push(this.finishNode(memberNode, "EnumBooleanMember"));
+ break;
+ }
+
+ case "number":
+ {
+ this.flowEnumCheckExplicitTypeMismatch(init.pos, context, "number");
+ memberNode.init = init.value;
+ members.numberMembers.push(this.finishNode(memberNode, "EnumNumberMember"));
+ break;
+ }
+
+ case "string":
+ {
+ this.flowEnumCheckExplicitTypeMismatch(init.pos, context, "string");
+ memberNode.init = init.value;
+ members.stringMembers.push(this.finishNode(memberNode, "EnumStringMember"));
+ break;
+ }
+
+ case "invalid":
+ {
+ throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);
+ }
+
+ case "none":
+ {
+ switch (explicitType) {
+ case "boolean":
+ this.flowEnumErrorBooleanMemberNotInitialized(init.pos, context);
+ break;
+
+ case "number":
+ this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);
+ break;
+
+ default:
+ members.defaultedMembers.push(this.finishNode(memberNode, "EnumDefaultedMember"));
+ }
+ }
+ }
+
+ if (!this.match(16)) {
+ this.expect(20);
+ }
+ }
+
+ return {
+ members,
+ hasUnknownMembers
+ };
+ }
+
+ flowEnumStringMembers(initializedMembers, defaultedMembers, {
+ enumName
+ }) {
+ if (initializedMembers.length === 0) {
+ return defaultedMembers;
+ } else if (defaultedMembers.length === 0) {
+ return initializedMembers;
+ } else if (defaultedMembers.length > initializedMembers.length) {
+ for (const member of initializedMembers) {
+ this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {
+ enumName
+ });
+ }
+
+ return defaultedMembers;
+ } else {
+ for (const member of defaultedMembers) {
+ this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {
+ enumName
+ });
+ }
+
+ return initializedMembers;
+ }
+ }
+
+ flowEnumParseExplicitType({
+ enumName
+ }) {
+ if (this.eatContextual("of")) {
+ if (!this.match(5)) {
+ throw this.flowEnumErrorInvalidExplicitType(this.state.start, {
+ enumName,
+ suppliedType: null
+ });
+ }
+
+ const {
+ value
+ } = this.state;
+ this.next();
+
+ if (value !== "boolean" && value !== "number" && value !== "string" && value !== "symbol") {
+ this.flowEnumErrorInvalidExplicitType(this.state.start, {
+ enumName,
+ suppliedType: value
+ });
+ }
+
+ return value;
+ }
+
+ return null;
+ }
+
+ flowEnumBody(node, {
+ enumName,
+ nameLoc
+ }) {
+ const explicitType = this.flowEnumParseExplicitType({
+ enumName
+ });
+ this.expect(13);
+ const {
+ members,
+ hasUnknownMembers
+ } = this.flowEnumMembers({
+ enumName,
+ explicitType
+ });
+ node.hasUnknownMembers = hasUnknownMembers;
+
+ switch (explicitType) {
+ case "boolean":
+ node.explicitType = true;
+ node.members = members.booleanMembers;
+ this.expect(16);
+ return this.finishNode(node, "EnumBooleanBody");
+
+ case "number":
+ node.explicitType = true;
+ node.members = members.numberMembers;
+ this.expect(16);
+ return this.finishNode(node, "EnumNumberBody");
+
+ case "string":
+ node.explicitType = true;
+ node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {
+ enumName
+ });
+ this.expect(16);
+ return this.finishNode(node, "EnumStringBody");
+
+ case "symbol":
+ node.members = members.defaultedMembers;
+ this.expect(16);
+ return this.finishNode(node, "EnumSymbolBody");
+
+ default:
+ {
+ const empty = () => {
+ node.members = [];
+ this.expect(16);
+ return this.finishNode(node, "EnumStringBody");
+ };
+
+ node.explicitType = false;
+ const boolsLen = members.booleanMembers.length;
+ const numsLen = members.numberMembers.length;
+ const strsLen = members.stringMembers.length;
+ const defaultedLen = members.defaultedMembers.length;
+
+ if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {
+ return empty();
+ } else if (!boolsLen && !numsLen) {
+ node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {
+ enumName
+ });
+ this.expect(16);
+ return this.finishNode(node, "EnumStringBody");
+ } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {
+ for (const member of members.defaultedMembers) {
+ this.flowEnumErrorBooleanMemberNotInitialized(member.start, {
+ enumName,
+ memberName: member.id.name
+ });
+ }
+
+ node.members = members.booleanMembers;
+ this.expect(16);
+ return this.finishNode(node, "EnumBooleanBody");
+ } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {
+ for (const member of members.defaultedMembers) {
+ this.flowEnumErrorNumberMemberNotInitialized(member.start, {
+ enumName,
+ memberName: member.id.name
+ });
+ }
+
+ node.members = members.numberMembers;
+ this.expect(16);
+ return this.finishNode(node, "EnumNumberBody");
+ } else {
+ this.flowEnumErrorInconsistentMemberValues(nameLoc, {
+ enumName
+ });
+ return empty();
+ }
+ }
+ }
+ }
+
+ flowParseEnumDeclaration(node) {
+ const id = this.parseIdentifier();
+ node.id = id;
+ node.body = this.flowEnumBody(this.startNode(), {
+ enumName: id.name,
+ nameLoc: id.start
+ });
+ return this.finishNode(node, "EnumDeclaration");
+ }
+
+ isLookaheadToken_lt() {
+ const next = this.nextTokenStart();
+
+ if (this.input.charCodeAt(next) === 60) {
+ const afterNext = this.input.charCodeAt(next + 1);
+ return afterNext !== 60 && afterNext !== 61;
+ }
+
+ return false;
+ }
+
+ maybeUnwrapTypeCastExpression(node) {
+ return node.type === "TypeCastExpression" ? node.expression : node;
+ }
+
+});
+
+const entities = {
+ quot: "\u0022",
+ amp: "&",
+ apos: "\u0027",
+ lt: "<",
+ gt: ">",
+ nbsp: "\u00A0",
+ iexcl: "\u00A1",
+ cent: "\u00A2",
+ pound: "\u00A3",
+ curren: "\u00A4",
+ yen: "\u00A5",
+ brvbar: "\u00A6",
+ sect: "\u00A7",
+ uml: "\u00A8",
+ copy: "\u00A9",
+ ordf: "\u00AA",
+ laquo: "\u00AB",
+ not: "\u00AC",
+ shy: "\u00AD",
+ reg: "\u00AE",
+ macr: "\u00AF",
+ deg: "\u00B0",
+ plusmn: "\u00B1",
+ sup2: "\u00B2",
+ sup3: "\u00B3",
+ acute: "\u00B4",
+ micro: "\u00B5",
+ para: "\u00B6",
+ middot: "\u00B7",
+ cedil: "\u00B8",
+ sup1: "\u00B9",
+ ordm: "\u00BA",
+ raquo: "\u00BB",
+ frac14: "\u00BC",
+ frac12: "\u00BD",
+ frac34: "\u00BE",
+ iquest: "\u00BF",
+ Agrave: "\u00C0",
+ Aacute: "\u00C1",
+ Acirc: "\u00C2",
+ Atilde: "\u00C3",
+ Auml: "\u00C4",
+ Aring: "\u00C5",
+ AElig: "\u00C6",
+ Ccedil: "\u00C7",
+ Egrave: "\u00C8",
+ Eacute: "\u00C9",
+ Ecirc: "\u00CA",
+ Euml: "\u00CB",
+ Igrave: "\u00CC",
+ Iacute: "\u00CD",
+ Icirc: "\u00CE",
+ Iuml: "\u00CF",
+ ETH: "\u00D0",
+ Ntilde: "\u00D1",
+ Ograve: "\u00D2",
+ Oacute: "\u00D3",
+ Ocirc: "\u00D4",
+ Otilde: "\u00D5",
+ Ouml: "\u00D6",
+ times: "\u00D7",
+ Oslash: "\u00D8",
+ Ugrave: "\u00D9",
+ Uacute: "\u00DA",
+ Ucirc: "\u00DB",
+ Uuml: "\u00DC",
+ Yacute: "\u00DD",
+ THORN: "\u00DE",
+ szlig: "\u00DF",
+ agrave: "\u00E0",
+ aacute: "\u00E1",
+ acirc: "\u00E2",
+ atilde: "\u00E3",
+ auml: "\u00E4",
+ aring: "\u00E5",
+ aelig: "\u00E6",
+ ccedil: "\u00E7",
+ egrave: "\u00E8",
+ eacute: "\u00E9",
+ ecirc: "\u00EA",
+ euml: "\u00EB",
+ igrave: "\u00EC",
+ iacute: "\u00ED",
+ icirc: "\u00EE",
+ iuml: "\u00EF",
+ eth: "\u00F0",
+ ntilde: "\u00F1",
+ ograve: "\u00F2",
+ oacute: "\u00F3",
+ ocirc: "\u00F4",
+ otilde: "\u00F5",
+ ouml: "\u00F6",
+ divide: "\u00F7",
+ oslash: "\u00F8",
+ ugrave: "\u00F9",
+ uacute: "\u00FA",
+ ucirc: "\u00FB",
+ uuml: "\u00FC",
+ yacute: "\u00FD",
+ thorn: "\u00FE",
+ yuml: "\u00FF",
+ OElig: "\u0152",
+ oelig: "\u0153",
+ Scaron: "\u0160",
+ scaron: "\u0161",
+ Yuml: "\u0178",
+ fnof: "\u0192",
+ circ: "\u02C6",
+ tilde: "\u02DC",
+ Alpha: "\u0391",
+ Beta: "\u0392",
+ Gamma: "\u0393",
+ Delta: "\u0394",
+ Epsilon: "\u0395",
+ Zeta: "\u0396",
+ Eta: "\u0397",
+ Theta: "\u0398",
+ Iota: "\u0399",
+ Kappa: "\u039A",
+ Lambda: "\u039B",
+ Mu: "\u039C",
+ Nu: "\u039D",
+ Xi: "\u039E",
+ Omicron: "\u039F",
+ Pi: "\u03A0",
+ Rho: "\u03A1",
+ Sigma: "\u03A3",
+ Tau: "\u03A4",
+ Upsilon: "\u03A5",
+ Phi: "\u03A6",
+ Chi: "\u03A7",
+ Psi: "\u03A8",
+ Omega: "\u03A9",
+ alpha: "\u03B1",
+ beta: "\u03B2",
+ gamma: "\u03B3",
+ delta: "\u03B4",
+ epsilon: "\u03B5",
+ zeta: "\u03B6",
+ eta: "\u03B7",
+ theta: "\u03B8",
+ iota: "\u03B9",
+ kappa: "\u03BA",
+ lambda: "\u03BB",
+ mu: "\u03BC",
+ nu: "\u03BD",
+ xi: "\u03BE",
+ omicron: "\u03BF",
+ pi: "\u03C0",
+ rho: "\u03C1",
+ sigmaf: "\u03C2",
+ sigma: "\u03C3",
+ tau: "\u03C4",
+ upsilon: "\u03C5",
+ phi: "\u03C6",
+ chi: "\u03C7",
+ psi: "\u03C8",
+ omega: "\u03C9",
+ thetasym: "\u03D1",
+ upsih: "\u03D2",
+ piv: "\u03D6",
+ ensp: "\u2002",
+ emsp: "\u2003",
+ thinsp: "\u2009",
+ zwnj: "\u200C",
+ zwj: "\u200D",
+ lrm: "\u200E",
+ rlm: "\u200F",
+ ndash: "\u2013",
+ mdash: "\u2014",
+ lsquo: "\u2018",
+ rsquo: "\u2019",
+ sbquo: "\u201A",
+ ldquo: "\u201C",
+ rdquo: "\u201D",
+ bdquo: "\u201E",
+ dagger: "\u2020",
+ Dagger: "\u2021",
+ bull: "\u2022",
+ hellip: "\u2026",
+ permil: "\u2030",
+ prime: "\u2032",
+ Prime: "\u2033",
+ lsaquo: "\u2039",
+ rsaquo: "\u203A",
+ oline: "\u203E",
+ frasl: "\u2044",
+ euro: "\u20AC",
+ image: "\u2111",
+ weierp: "\u2118",
+ real: "\u211C",
+ trade: "\u2122",
+ alefsym: "\u2135",
+ larr: "\u2190",
+ uarr: "\u2191",
+ rarr: "\u2192",
+ darr: "\u2193",
+ harr: "\u2194",
+ crarr: "\u21B5",
+ lArr: "\u21D0",
+ uArr: "\u21D1",
+ rArr: "\u21D2",
+ dArr: "\u21D3",
+ hArr: "\u21D4",
+ forall: "\u2200",
+ part: "\u2202",
+ exist: "\u2203",
+ empty: "\u2205",
+ nabla: "\u2207",
+ isin: "\u2208",
+ notin: "\u2209",
+ ni: "\u220B",
+ prod: "\u220F",
+ sum: "\u2211",
+ minus: "\u2212",
+ lowast: "\u2217",
+ radic: "\u221A",
+ prop: "\u221D",
+ infin: "\u221E",
+ ang: "\u2220",
+ and: "\u2227",
+ or: "\u2228",
+ cap: "\u2229",
+ cup: "\u222A",
+ int: "\u222B",
+ there4: "\u2234",
+ sim: "\u223C",
+ cong: "\u2245",
+ asymp: "\u2248",
+ ne: "\u2260",
+ equiv: "\u2261",
+ le: "\u2264",
+ ge: "\u2265",
+ sub: "\u2282",
+ sup: "\u2283",
+ nsub: "\u2284",
+ sube: "\u2286",
+ supe: "\u2287",
+ oplus: "\u2295",
+ otimes: "\u2297",
+ perp: "\u22A5",
+ sdot: "\u22C5",
+ lceil: "\u2308",
+ rceil: "\u2309",
+ lfloor: "\u230A",
+ rfloor: "\u230B",
+ lang: "\u2329",
+ rang: "\u232A",
+ loz: "\u25CA",
+ spades: "\u2660",
+ clubs: "\u2663",
+ hearts: "\u2665",
+ diams: "\u2666"
+};
+
+const HEX_NUMBER = /^[\da-fA-F]+$/;
+const DECIMAL_NUMBER = /^\d+$/;
+const JsxErrors = makeErrorTemplates({
+ AttributeIsEmpty: "JSX attributes must only be assigned a non-empty expression.",
+ MissingClosingTagElement: "Expected corresponding JSX closing tag for <%0>.",
+ MissingClosingTagFragment: "Expected corresponding JSX closing tag for <>.",
+ UnexpectedSequenceExpression: "Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?",
+ UnsupportedJsxValue: "JSX value should be either an expression or a quoted JSX text.",
+ UnterminatedJsxContent: "Unterminated JSX contents.",
+ UnwrappedAdjacentJSXElements: "Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?"
+}, ErrorCodes.SyntaxError, "jsx");
+types.j_oTag = new TokContext("<tag");
+types.j_cTag = new TokContext("</tag");
+types.j_expr = new TokContext("<tag>...</tag>", true);
+
+function isFragment(object) {
+ return object ? object.type === "JSXOpeningFragment" || object.type === "JSXClosingFragment" : false;
+}
+
+function getQualifiedJSXName(object) {
+ if (object.type === "JSXIdentifier") {
+ return object.name;
+ }
+
+ if (object.type === "JSXNamespacedName") {
+ return object.namespace.name + ":" + object.name.name;
+ }
+
+ if (object.type === "JSXMemberExpression") {
+ return getQualifiedJSXName(object.object) + "." + getQualifiedJSXName(object.property);
+ }
+
+ throw new Error("Node had unexpected type: " + object.type);
+}
+
+var jsx = (superClass => class extends superClass {
+ jsxReadToken() {
+ let out = "";
+ let chunkStart = this.state.pos;
+
+ for (;;) {
+ if (this.state.pos >= this.length) {
+ throw this.raise(this.state.start, JsxErrors.UnterminatedJsxContent);
+ }
+
+ const ch = this.input.charCodeAt(this.state.pos);
+
+ switch (ch) {
+ case 60:
+ case 123:
+ if (this.state.pos === this.state.start) {
+ if (ch === 60 && this.state.exprAllowed) {
+ ++this.state.pos;
+ return this.finishToken(94);
+ }
+
+ return super.getTokenFromCode(ch);
+ }
+
+ out += this.input.slice(chunkStart, this.state.pos);
+ return this.finishToken(93, out);
+
+ case 38:
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadEntity();
+ chunkStart = this.state.pos;
+ break;
+
+ case 62:
+ case 125:
+
+ default:
+ if (isNewLine(ch)) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadNewLine(true);
+ chunkStart = this.state.pos;
+ } else {
+ ++this.state.pos;
+ }
+
+ }
+ }
+ }
+
+ jsxReadNewLine(normalizeCRLF) {
+ const ch = this.input.charCodeAt(this.state.pos);
+ let out;
+ ++this.state.pos;
+
+ if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {
+ ++this.state.pos;
+ out = normalizeCRLF ? "\n" : "\r\n";
+ } else {
+ out = String.fromCharCode(ch);
+ }
+
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+ return out;
+ }
+
+ jsxReadString(quote) {
+ let out = "";
+ let chunkStart = ++this.state.pos;
+
+ for (;;) {
+ if (this.state.pos >= this.length) {
+ throw this.raise(this.state.start, ErrorMessages.UnterminatedString);
+ }
+
+ const ch = this.input.charCodeAt(this.state.pos);
+ if (ch === quote) break;
+
+ if (ch === 38) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadEntity();
+ chunkStart = this.state.pos;
+ } else if (isNewLine(ch)) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadNewLine(false);
+ chunkStart = this.state.pos;
+ } else {
+ ++this.state.pos;
+ }
+ }
+
+ out += this.input.slice(chunkStart, this.state.pos++);
+ return this.finishToken(4, out);
+ }
+
+ jsxReadEntity() {
+ let str = "";
+ let count = 0;
+ let entity;
+ let ch = this.input[this.state.pos];
+ const startPos = ++this.state.pos;
+
+ while (this.state.pos < this.length && count++ < 10) {
+ ch = this.input[this.state.pos++];
+
+ if (ch === ";") {
+ if (str[0] === "#") {
+ if (str[1] === "x") {
+ str = str.substr(2);
+
+ if (HEX_NUMBER.test(str)) {
+ entity = String.fromCodePoint(parseInt(str, 16));
+ }
+ } else {
+ str = str.substr(1);
+
+ if (DECIMAL_NUMBER.test(str)) {
+ entity = String.fromCodePoint(parseInt(str, 10));
+ }
+ }
+ } else {
+ entity = entities[str];
+ }
+
+ break;
+ }
+
+ str += ch;
+ }
+
+ if (!entity) {
+ this.state.pos = startPos;
+ return "&";
+ }
+
+ return entity;
+ }
+
+ jsxReadWord() {
+ let ch;
+ const start = this.state.pos;
+
+ do {
+ ch = this.input.charCodeAt(++this.state.pos);
+ } while (isIdentifierChar(ch) || ch === 45);
+
+ return this.finishToken(92, this.input.slice(start, this.state.pos));
+ }
+
+ jsxParseIdentifier() {
+ const node = this.startNode();
+
+ if (this.match(92)) {
+ node.name = this.state.value;
+ } else if (tokenIsKeyword(this.state.type)) {
+ node.name = tokenLabelName(this.state.type);
+ } else {
+ this.unexpected();
+ }
+
+ this.next();
+ return this.finishNode(node, "JSXIdentifier");
+ }
+
+ jsxParseNamespacedName() {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const name = this.jsxParseIdentifier();
+ if (!this.eat(22)) return name;
+ const node = this.startNodeAt(startPos, startLoc);
+ node.namespace = name;
+ node.name = this.jsxParseIdentifier();
+ return this.finishNode(node, "JSXNamespacedName");
+ }
+
+ jsxParseElementName() {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ let node = this.jsxParseNamespacedName();
+
+ if (node.type === "JSXNamespacedName") {
+ return node;
+ }
+
+ while (this.eat(24)) {
+ const newNode = this.startNodeAt(startPos, startLoc);
+ newNode.object = node;
+ newNode.property = this.jsxParseIdentifier();
+ node = this.finishNode(newNode, "JSXMemberExpression");
+ }
+
+ return node;
+ }
+
+ jsxParseAttributeValue() {
+ let node;
+
+ switch (this.state.type) {
+ case 13:
+ node = this.startNode();
+ this.next();
+ node = this.jsxParseExpressionContainer(node);
+
+ if (node.expression.type === "JSXEmptyExpression") {
+ this.raise(node.start, JsxErrors.AttributeIsEmpty);
+ }
+
+ return node;
+
+ case 94:
+ case 4:
+ return this.parseExprAtom();
+
+ default:
+ throw this.raise(this.state.start, JsxErrors.UnsupportedJsxValue);
+ }
+ }
+
+ jsxParseEmptyExpression() {
+ const node = this.startNodeAt(this.state.lastTokEnd, this.state.lastTokEndLoc);
+ return this.finishNodeAt(node, "JSXEmptyExpression", this.state.start, this.state.startLoc);
+ }
+
+ jsxParseSpreadChild(node) {
+ this.next();
+ node.expression = this.parseExpression();
+ this.expect(16);
+ return this.finishNode(node, "JSXSpreadChild");
+ }
+
+ jsxParseExpressionContainer(node) {
+ if (this.match(16)) {
+ node.expression = this.jsxParseEmptyExpression();
+ } else {
+ const expression = this.parseExpression();
+ node.expression = expression;
+ }
+
+ this.expect(16);
+ return this.finishNode(node, "JSXExpressionContainer");
+ }
+
+ jsxParseAttribute() {
+ const node = this.startNode();
+
+ if (this.eat(13)) {
+ this.expect(29);
+ node.argument = this.parseMaybeAssignAllowIn();
+ this.expect(16);
+ return this.finishNode(node, "JSXSpreadAttribute");
+ }
+
+ node.name = this.jsxParseNamespacedName();
+ node.value = this.eat(35) ? this.jsxParseAttributeValue() : null;
+ return this.finishNode(node, "JSXAttribute");
+ }
+
+ jsxParseOpeningElementAt(startPos, startLoc) {
+ const node = this.startNodeAt(startPos, startLoc);
+
+ if (this.match(95)) {
+ this.expect(95);
+ return this.finishNode(node, "JSXOpeningFragment");
+ }
+
+ node.name = this.jsxParseElementName();
+ return this.jsxParseOpeningElementAfterName(node);
+ }
+
+ jsxParseOpeningElementAfterName(node) {
+ const attributes = [];
+
+ while (!this.match(55) && !this.match(95)) {
+ attributes.push(this.jsxParseAttribute());
+ }
+
+ node.attributes = attributes;
+ node.selfClosing = this.eat(55);
+ this.expect(95);
+ return this.finishNode(node, "JSXOpeningElement");
+ }
+
+ jsxParseClosingElementAt(startPos, startLoc) {
+ const node = this.startNodeAt(startPos, startLoc);
+
+ if (this.match(95)) {
+ this.expect(95);
+ return this.finishNode(node, "JSXClosingFragment");
+ }
+
+ node.name = this.jsxParseElementName();
+ this.expect(95);
+ return this.finishNode(node, "JSXClosingElement");
+ }
+
+ jsxParseElementAt(startPos, startLoc) {
+ const node = this.startNodeAt(startPos, startLoc);
+ const children = [];
+ const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);
+ let closingElement = null;
+
+ if (!openingElement.selfClosing) {
+ contents: for (;;) {
+ switch (this.state.type) {
+ case 94:
+ startPos = this.state.start;
+ startLoc = this.state.startLoc;
+ this.next();
+
+ if (this.eat(55)) {
+ closingElement = this.jsxParseClosingElementAt(startPos, startLoc);
+ break contents;
+ }
+
+ children.push(this.jsxParseElementAt(startPos, startLoc));
+ break;
+
+ case 93:
+ children.push(this.parseExprAtom());
+ break;
+
+ case 13:
+ {
+ const node = this.startNode();
+ this.next();
+
+ if (this.match(29)) {
+ children.push(this.jsxParseSpreadChild(node));
+ } else {
+ children.push(this.jsxParseExpressionContainer(node));
+ }
+
+ break;
+ }
+
+ default:
+ throw this.unexpected();
+ }
+ }
+
+ if (isFragment(openingElement) && !isFragment(closingElement)) {
+ this.raise(closingElement.start, JsxErrors.MissingClosingTagFragment);
+ } else if (!isFragment(openingElement) && isFragment(closingElement)) {
+ this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));
+ } else if (!isFragment(openingElement) && !isFragment(closingElement)) {
+ if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {
+ this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));
+ }
+ }
+ }
+
+ if (isFragment(openingElement)) {
+ node.openingFragment = openingElement;
+ node.closingFragment = closingElement;
+ } else {
+ node.openingElement = openingElement;
+ node.closingElement = closingElement;
+ }
+
+ node.children = children;
+
+ if (this.isRelational("<")) {
+ throw this.raise(this.state.start, JsxErrors.UnwrappedAdjacentJSXElements);
+ }
+
+ return isFragment(openingElement) ? this.finishNode(node, "JSXFragment") : this.finishNode(node, "JSXElement");
+ }
+
+ jsxParseElement() {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ this.next();
+ return this.jsxParseElementAt(startPos, startLoc);
+ }
+
+ parseExprAtom(refExpressionErrors) {
+ if (this.match(93)) {
+ return this.parseLiteral(this.state.value, "JSXText");
+ } else if (this.match(94)) {
+ return this.jsxParseElement();
+ } else if (this.isRelational("<") && this.input.charCodeAt(this.state.pos) !== 33) {
+ this.finishToken(94);
+ return this.jsxParseElement();
+ } else {
+ return super.parseExprAtom(refExpressionErrors);
+ }
+ }
+
+ createLookaheadState(state) {
+ const lookaheadState = super.createLookaheadState(state);
+ lookaheadState.inPropertyName = state.inPropertyName;
+ return lookaheadState;
+ }
+
+ getTokenFromCode(code) {
+ if (this.state.inPropertyName) return super.getTokenFromCode(code);
+ const context = this.curContext();
+
+ if (context === types.j_expr) {
+ return this.jsxReadToken();
+ }
+
+ if (context === types.j_oTag || context === types.j_cTag) {
+ if (isIdentifierStart(code)) {
+ return this.jsxReadWord();
+ }
+
+ if (code === 62) {
+ ++this.state.pos;
+ return this.finishToken(95);
+ }
+
+ if ((code === 34 || code === 39) && context === types.j_oTag) {
+ return this.jsxReadString(code);
+ }
+ }
+
+ if (code === 60 && this.state.exprAllowed && this.input.charCodeAt(this.state.pos + 1) !== 33) {
+ ++this.state.pos;
+ return this.finishToken(94);
+ }
+
+ return super.getTokenFromCode(code);
+ }
+
+ updateContext(prevType) {
+ super.updateContext(prevType);
+ const {
+ context,
+ type
+ } = this.state;
+
+ if (type === 55 && prevType === 94) {
+ context.splice(-2, 2, types.j_cTag);
+ this.state.exprAllowed = false;
+ } else if (type === 94) {
+ context.push(types.j_expr, types.j_oTag);
+ } else if (type === 95) {
+ const out = context.pop();
+
+ if (out === types.j_oTag && prevType === 55 || out === types.j_cTag) {
+ context.pop();
+ this.state.exprAllowed = context[context.length - 1] === types.j_expr;
+ } else {
+ this.state.exprAllowed = true;
+ }
+ } else if (tokenIsKeyword(type) && (prevType === 24 || prevType === 26)) {
+ this.state.exprAllowed = false;
+ } else {
+ this.state.exprAllowed = tokenComesBeforeExpression(type);
+ }
+ }
+
+});
+
+class TypeScriptScope extends Scope {
+ constructor(...args) {
+ super(...args);
+ this.types = new Set();
+ this.enums = new Set();
+ this.constEnums = new Set();
+ this.classes = new Set();
+ this.exportOnlyBindings = new Set();
+ }
+
+}
+
+class TypeScriptScopeHandler extends ScopeHandler {
+ createScope(flags) {
+ return new TypeScriptScope(flags);
+ }
+
+ declareName(name, bindingType, pos) {
+ const scope = this.currentScope();
+
+ if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {
+ this.maybeExportDefined(scope, name);
+ scope.exportOnlyBindings.add(name);
+ return;
+ }
+
+ super.declareName(...arguments);
+
+ if (bindingType & BIND_KIND_TYPE) {
+ if (!(bindingType & BIND_KIND_VALUE)) {
+ this.checkRedeclarationInScope(scope, name, bindingType, pos);
+ this.maybeExportDefined(scope, name);
+ }
+
+ scope.types.add(name);
+ }
+
+ if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);
+ if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);
+ if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);
+ }
+
+ isRedeclaredInScope(scope, name, bindingType) {
+ if (scope.enums.has(name)) {
+ if (bindingType & BIND_FLAGS_TS_ENUM) {
+ const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);
+ const wasConst = scope.constEnums.has(name);
+ return isConst !== wasConst;
+ }
+
+ return true;
+ }
+
+ if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {
+ if (scope.lexical.has(name)) {
+ return !!(bindingType & BIND_KIND_VALUE);
+ } else {
+ return false;
+ }
+ }
+
+ if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {
+ return true;
+ }
+
+ return super.isRedeclaredInScope(...arguments);
+ }
+
+ checkLocalExport(id) {
+ const topLevelScope = this.scopeStack[0];
+ const {
+ name
+ } = id;
+
+ if (!topLevelScope.types.has(name) && !topLevelScope.exportOnlyBindings.has(name)) {
+ super.checkLocalExport(id);
+ }
+ }
+
+}
+
+function nonNull(x) {
+ if (x == null) {
+ throw new Error(`Unexpected ${x} value.`);
+ }
+
+ return x;
+}
+
+function assert(x) {
+ if (!x) {
+ throw new Error("Assert fail");
+ }
+}
+
+const TSErrors = makeErrorTemplates({
+ AbstractMethodHasImplementation: "Method '%0' cannot have an implementation because it is marked abstract.",
+ AbstractPropertyHasInitializer: "Property '%0' cannot have an initializer because it is marked abstract.",
+ AccesorCannotDeclareThisParameter: "'get' and 'set' accessors cannot declare 'this' parameters.",
+ AccesorCannotHaveTypeParameters: "An accessor cannot have type parameters.",
+ ClassMethodHasDeclare: "Class methods cannot have the 'declare' modifier.",
+ ClassMethodHasReadonly: "Class methods cannot have the 'readonly' modifier.",
+ ConstructorHasTypeParameters: "Type parameters cannot appear on a constructor declaration.",
+ DeclareAccessor: "'declare' is not allowed in %0ters.",
+ DeclareClassFieldHasInitializer: "Initializers are not allowed in ambient contexts.",
+ DeclareFunctionHasImplementation: "An implementation cannot be declared in ambient contexts.",
+ DuplicateAccessibilityModifier: "Accessibility modifier already seen.",
+ DuplicateModifier: "Duplicate modifier: '%0'.",
+ EmptyHeritageClauseType: "'%0' list cannot be empty.",
+ EmptyTypeArguments: "Type argument list cannot be empty.",
+ EmptyTypeParameters: "Type parameter list cannot be empty.",
+ ExpectedAmbientAfterExportDeclare: "'export declare' must be followed by an ambient declaration.",
+ ImportAliasHasImportType: "An import alias can not use 'import type'.",
+ IncompatibleModifiers: "'%0' modifier cannot be used with '%1' modifier.",
+ IndexSignatureHasAbstract: "Index signatures cannot have the 'abstract' modifier.",
+ IndexSignatureHasAccessibility: "Index signatures cannot have an accessibility modifier ('%0').",
+ IndexSignatureHasDeclare: "Index signatures cannot have the 'declare' modifier.",
+ IndexSignatureHasOverride: "'override' modifier cannot appear on an index signature.",
+ IndexSignatureHasStatic: "Index signatures cannot have the 'static' modifier.",
+ InvalidModifierOnTypeMember: "'%0' modifier cannot appear on a type member.",
+ InvalidModifiersOrder: "'%0' modifier must precede '%1' modifier.",
+ InvalidTupleMemberLabel: "Tuple members must be labeled with a simple identifier.",
+ MissingInterfaceName: "'interface' declarations must be followed by an identifier.",
+ MixedLabeledAndUnlabeledElements: "Tuple members must all have names or all not have names.",
+ NonAbstractClassHasAbstractMethod: "Abstract methods can only appear within an abstract class.",
+ NonClassMethodPropertyHasAbstractModifer: "'abstract' modifier can only appear on a class, method, or property declaration.",
+ OptionalTypeBeforeRequired: "A required element cannot follow an optional element.",
+ OverrideNotInSubClass: "This member cannot have an 'override' modifier because its containing class does not extend another class.",
+ PatternIsOptional: "A binding pattern parameter cannot be optional in an implementation signature.",
+ PrivateElementHasAbstract: "Private elements cannot have the 'abstract' modifier.",
+ PrivateElementHasAccessibility: "Private elements cannot have an accessibility modifier ('%0').",
+ ReadonlyForMethodSignature: "'readonly' modifier can only appear on a property declaration or index signature.",
+ SetAccesorCannotHaveOptionalParameter: "A 'set' accessor cannot have an optional parameter.",
+ SetAccesorCannotHaveRestParameter: "A 'set' accessor cannot have rest parameter.",
+ SetAccesorCannotHaveReturnType: "A 'set' accessor cannot have a return type annotation.",
+ StaticBlockCannotHaveModifier: "Static class blocks cannot have any modifier.",
+ TypeAnnotationAfterAssign: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",
+ TypeImportCannotSpecifyDefaultAndNamed: "A type-only import can specify a default import or named bindings, but not both.",
+ UnexpectedParameterModifier: "A parameter property is only allowed in a constructor implementation.",
+ UnexpectedReadonly: "'readonly' type modifier is only permitted on array and tuple literal types.",
+ UnexpectedTypeAnnotation: "Did not expect a type annotation here.",
+ UnexpectedTypeCastInParameter: "Unexpected type cast in parameter position.",
+ UnsupportedImportTypeArgument: "Argument in a type import must be a string literal.",
+ UnsupportedParameterPropertyKind: "A parameter property may not be declared using a binding pattern.",
+ UnsupportedSignatureParameterKind: "Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0."
+}, ErrorCodes.SyntaxError, "typescript");
+
+function keywordTypeFromName(value) {
+ switch (value) {
+ case "any":
+ return "TSAnyKeyword";
+
+ case "boolean":
+ return "TSBooleanKeyword";
+
+ case "bigint":
+ return "TSBigIntKeyword";
+
+ case "never":
+ return "TSNeverKeyword";
+
+ case "number":
+ return "TSNumberKeyword";
+
+ case "object":
+ return "TSObjectKeyword";
+
+ case "string":
+ return "TSStringKeyword";
+
+ case "symbol":
+ return "TSSymbolKeyword";
+
+ case "undefined":
+ return "TSUndefinedKeyword";
+
+ case "unknown":
+ return "TSUnknownKeyword";
+
+ default:
+ return undefined;
+ }
+}
+
+function tsIsAccessModifier(modifier) {
+ return modifier === "private" || modifier === "public" || modifier === "protected";
+}
+
+var typescript = (superClass => class extends superClass {
+ getScopeHandler() {
+ return TypeScriptScopeHandler;
+ }
+
+ tsIsIdentifier() {
+ return this.match(5);
+ }
+
+ tsTokenCanFollowModifier() {
+ return (this.match(8) || this.match(13) || this.match(54) || this.match(29) || this.match(6) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak();
+ }
+
+ tsNextTokenCanFollowModifier() {
+ this.next();
+ return this.tsTokenCanFollowModifier();
+ }
+
+ tsParseModifier(allowedModifiers, stopOnStartOfClassStaticBlock) {
+ if (!this.match(5)) {
+ return undefined;
+ }
+
+ const modifier = this.state.value;
+
+ if (allowedModifiers.indexOf(modifier) !== -1) {
+ if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {
+ return undefined;
+ }
+
+ if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {
+ return modifier;
+ }
+ }
+
+ return undefined;
+ }
+
+ tsParseModifiers(modified, allowedModifiers, disallowedModifiers, errorTemplate, stopOnStartOfClassStaticBlock) {
+ const enforceOrder = (pos, modifier, before, after) => {
+ if (modifier === before && modified[after]) {
+ this.raise(pos, TSErrors.InvalidModifiersOrder, before, after);
+ }
+ };
+
+ const incompatible = (pos, modifier, mod1, mod2) => {
+ if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) {
+ this.raise(pos, TSErrors.IncompatibleModifiers, mod1, mod2);
+ }
+ };
+
+ for (;;) {
+ const startPos = this.state.start;
+ const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []), stopOnStartOfClassStaticBlock);
+ if (!modifier) break;
+
+ if (tsIsAccessModifier(modifier)) {
+ if (modified.accessibility) {
+ this.raise(startPos, TSErrors.DuplicateAccessibilityModifier);
+ } else {
+ enforceOrder(startPos, modifier, modifier, "override");
+ enforceOrder(startPos, modifier, modifier, "static");
+ enforceOrder(startPos, modifier, modifier, "readonly");
+ modified.accessibility = modifier;
+ }
+ } else {
+ if (Object.hasOwnProperty.call(modified, modifier)) {
+ this.raise(startPos, TSErrors.DuplicateModifier, modifier);
+ } else {
+ enforceOrder(startPos, modifier, "static", "readonly");
+ enforceOrder(startPos, modifier, "static", "override");
+ enforceOrder(startPos, modifier, "override", "readonly");
+ enforceOrder(startPos, modifier, "abstract", "override");
+ incompatible(startPos, modifier, "declare", "override");
+ incompatible(startPos, modifier, "static", "abstract");
+ }
+
+ modified[modifier] = true;
+ }
+
+ if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) {
+ this.raise(startPos, errorTemplate, modifier);
+ }
+ }
+ }
+
+ tsIsListTerminator(kind) {
+ switch (kind) {
+ case "EnumMembers":
+ case "TypeMembers":
+ return this.match(16);
+
+ case "HeritageClauseElement":
+ return this.match(13);
+
+ case "TupleElementTypes":
+ return this.match(11);
+
+ case "TypeParametersOrArguments":
+ return this.isRelational(">");
+ }
+
+ throw new Error("Unreachable");
+ }
+
+ tsParseList(kind, parseElement) {
+ const result = [];
+
+ while (!this.tsIsListTerminator(kind)) {
+ result.push(parseElement());
+ }
+
+ return result;
+ }
+
+ tsParseDelimitedList(kind, parseElement) {
+ return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true));
+ }
+
+ tsParseDelimitedListWorker(kind, parseElement, expectSuccess) {
+ const result = [];
+
+ for (;;) {
+ if (this.tsIsListTerminator(kind)) {
+ break;
+ }
+
+ const element = parseElement();
+
+ if (element == null) {
+ return undefined;
+ }
+
+ result.push(element);
+
+ if (this.eat(20)) {
+ continue;
+ }
+
+ if (this.tsIsListTerminator(kind)) {
+ break;
+ }
+
+ if (expectSuccess) {
+ this.expect(20);
+ }
+
+ return undefined;
+ }
+
+ return result;
+ }
+
+ tsParseBracketedList(kind, parseElement, bracket, skipFirstToken) {
+ if (!skipFirstToken) {
+ if (bracket) {
+ this.expect(8);
+ } else {
+ this.expectRelational("<");
+ }
+ }
+
+ const result = this.tsParseDelimitedList(kind, parseElement);
+
+ if (bracket) {
+ this.expect(11);
+ } else {
+ this.expectRelational(">");
+ }
+
+ return result;
+ }
+
+ tsParseImportType() {
+ const node = this.startNode();
+ this.expect(82);
+ this.expect(18);
+
+ if (!this.match(4)) {
+ this.raise(this.state.start, TSErrors.UnsupportedImportTypeArgument);
+ }
+
+ node.argument = this.parseExprAtom();
+ this.expect(19);
+
+ if (this.eat(24)) {
+ node.qualifier = this.tsParseEntityName(true);
+ }
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.tsParseTypeArguments();
+ }
+
+ return this.finishNode(node, "TSImportType");
+ }
+
+ tsParseEntityName(allowReservedWords) {
+ let entity = this.parseIdentifier();
+
+ while (this.eat(24)) {
+ const node = this.startNodeAtNode(entity);
+ node.left = entity;
+ node.right = this.parseIdentifier(allowReservedWords);
+ entity = this.finishNode(node, "TSQualifiedName");
+ }
+
+ return entity;
+ }
+
+ tsParseTypeReference() {
+ const node = this.startNode();
+ node.typeName = this.tsParseEntityName(false);
+
+ if (!this.hasPrecedingLineBreak() && this.isRelational("<")) {
+ node.typeParameters = this.tsParseTypeArguments();
+ }
+
+ return this.finishNode(node, "TSTypeReference");
+ }
+
+ tsParseThisTypePredicate(lhs) {
+ this.next();
+ const node = this.startNodeAtNode(lhs);
+ node.parameterName = lhs;
+ node.typeAnnotation = this.tsParseTypeAnnotation(false);
+ node.asserts = false;
+ return this.finishNode(node, "TSTypePredicate");
+ }
+
+ tsParseThisTypeNode() {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, "TSThisType");
+ }
+
+ tsParseTypeQuery() {
+ const node = this.startNode();
+ this.expect(86);
+
+ if (this.match(82)) {
+ node.exprName = this.tsParseImportType();
+ } else {
+ node.exprName = this.tsParseEntityName(true);
+ }
+
+ return this.finishNode(node, "TSTypeQuery");
+ }
+
+ tsParseTypeParameter() {
+ const node = this.startNode();
+ node.name = this.tsParseTypeParameterName();
+ node.constraint = this.tsEatThenParseType(80);
+ node.default = this.tsEatThenParseType(35);
+ return this.finishNode(node, "TSTypeParameter");
+ }
+
+ tsTryParseTypeParameters() {
+ if (this.isRelational("<")) {
+ return this.tsParseTypeParameters();
+ }
+ }
+
+ tsParseTypeParameters() {
+ const node = this.startNode();
+
+ if (this.isRelational("<") || this.match(94)) {
+ this.next();
+ } else {
+ this.unexpected();
+ }
+
+ node.params = this.tsParseBracketedList("TypeParametersOrArguments", this.tsParseTypeParameter.bind(this), false, true);
+
+ if (node.params.length === 0) {
+ this.raise(node.start, TSErrors.EmptyTypeParameters);
+ }
+
+ return this.finishNode(node, "TSTypeParameterDeclaration");
+ }
+
+ tsTryNextParseConstantContext() {
+ if (this.lookahead().type === 74) {
+ this.next();
+ return this.tsParseTypeReference();
+ }
+
+ return null;
+ }
+
+ tsFillSignature(returnToken, signature) {
+ const returnTokenRequired = returnToken === 27;
+ signature.typeParameters = this.tsTryParseTypeParameters();
+ this.expect(18);
+ signature.parameters = this.tsParseBindingListForSignature();
+
+ if (returnTokenRequired) {
+ signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);
+ } else if (this.match(returnToken)) {
+ signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);
+ }
+ }
+
+ tsParseBindingListForSignature() {
+ return this.parseBindingList(19, 41).map(pattern => {
+ if (pattern.type !== "Identifier" && pattern.type !== "RestElement" && pattern.type !== "ObjectPattern" && pattern.type !== "ArrayPattern") {
+ this.raise(pattern.start, TSErrors.UnsupportedSignatureParameterKind, pattern.type);
+ }
+
+ return pattern;
+ });
+ }
+
+ tsParseTypeMemberSemicolon() {
+ if (!this.eat(20) && !this.isLineTerminator()) {
+ this.expect(21);
+ }
+ }
+
+ tsParseSignatureMember(kind, node) {
+ this.tsFillSignature(22, node);
+ this.tsParseTypeMemberSemicolon();
+ return this.finishNode(node, kind);
+ }
+
+ tsIsUnambiguouslyIndexSignature() {
+ this.next();
+ return this.eat(5) && this.match(22);
+ }
+
+ tsTryParseIndexSignature(node) {
+ if (!(this.match(8) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {
+ return undefined;
+ }
+
+ this.expect(8);
+ const id = this.parseIdentifier();
+ id.typeAnnotation = this.tsParseTypeAnnotation();
+ this.resetEndLocation(id);
+ this.expect(11);
+ node.parameters = [id];
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) node.typeAnnotation = type;
+ this.tsParseTypeMemberSemicolon();
+ return this.finishNode(node, "TSIndexSignature");
+ }
+
+ tsParsePropertyOrMethodSignature(node, readonly) {
+ if (this.eat(25)) node.optional = true;
+ const nodeAny = node;
+
+ if (this.match(18) || this.isRelational("<")) {
+ if (readonly) {
+ this.raise(node.start, TSErrors.ReadonlyForMethodSignature);
+ }
+
+ const method = nodeAny;
+
+ if (method.kind && this.isRelational("<")) {
+ this.raise(this.state.pos, TSErrors.AccesorCannotHaveTypeParameters);
+ }
+
+ this.tsFillSignature(22, method);
+ this.tsParseTypeMemberSemicolon();
+
+ if (method.kind === "get") {
+ if (method.parameters.length > 0) {
+ this.raise(this.state.pos, ErrorMessages.BadGetterArity);
+
+ if (this.isThisParam(method.parameters[0])) {
+ this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);
+ }
+ }
+ } else if (method.kind === "set") {
+ if (method.parameters.length !== 1) {
+ this.raise(this.state.pos, ErrorMessages.BadSetterArity);
+ } else {
+ const firstParameter = method.parameters[0];
+
+ if (this.isThisParam(firstParameter)) {
+ this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);
+ }
+
+ if (firstParameter.type === "Identifier" && firstParameter.optional) {
+ this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveOptionalParameter);
+ }
+
+ if (firstParameter.type === "RestElement") {
+ this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveRestParameter);
+ }
+ }
+
+ if (method.typeAnnotation) {
+ this.raise(method.typeAnnotation.start, TSErrors.SetAccesorCannotHaveReturnType);
+ }
+ } else {
+ method.kind = "method";
+ }
+
+ return this.finishNode(method, "TSMethodSignature");
+ } else {
+ const property = nodeAny;
+ if (readonly) property.readonly = true;
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) property.typeAnnotation = type;
+ this.tsParseTypeMemberSemicolon();
+ return this.finishNode(property, "TSPropertySignature");
+ }
+ }
+
+ tsParseTypeMember() {
+ const node = this.startNode();
+
+ if (this.match(18) || this.isRelational("<")) {
+ return this.tsParseSignatureMember("TSCallSignatureDeclaration", node);
+ }
+
+ if (this.match(76)) {
+ const id = this.startNode();
+ this.next();
+
+ if (this.match(18) || this.isRelational("<")) {
+ return this.tsParseSignatureMember("TSConstructSignatureDeclaration", node);
+ } else {
+ node.key = this.createIdentifier(id, "new");
+ return this.tsParsePropertyOrMethodSignature(node, false);
+ }
+ }
+
+ this.tsParseModifiers(node, ["readonly"], ["declare", "abstract", "private", "protected", "public", "static", "override"], TSErrors.InvalidModifierOnTypeMember);
+ const idx = this.tsTryParseIndexSignature(node);
+
+ if (idx) {
+ return idx;
+ }
+
+ this.parsePropertyName(node, false);
+
+ if (!node.computed && node.key.type === "Identifier" && (node.key.name === "get" || node.key.name === "set") && this.tsTokenCanFollowModifier()) {
+ node.kind = node.key.name;
+ this.parsePropertyName(node, false);
+ }
+
+ return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);
+ }
+
+ tsParseTypeLiteral() {
+ const node = this.startNode();
+ node.members = this.tsParseObjectTypeMembers();
+ return this.finishNode(node, "TSTypeLiteral");
+ }
+
+ tsParseObjectTypeMembers() {
+ this.expect(13);
+ const members = this.tsParseList("TypeMembers", this.tsParseTypeMember.bind(this));
+ this.expect(16);
+ return members;
+ }
+
+ tsIsStartOfMappedType() {
+ this.next();
+
+ if (this.eat(52)) {
+ return this.isContextual("readonly");
+ }
+
+ if (this.isContextual("readonly")) {
+ this.next();
+ }
+
+ if (!this.match(8)) {
+ return false;
+ }
+
+ this.next();
+
+ if (!this.tsIsIdentifier()) {
+ return false;
+ }
+
+ this.next();
+ return this.match(57);
+ }
+
+ tsParseMappedTypeParameter() {
+ const node = this.startNode();
+ node.name = this.tsParseTypeParameterName();
+ node.constraint = this.tsExpectThenParseType(57);
+ return this.finishNode(node, "TSTypeParameter");
+ }
+
+ tsParseMappedType() {
+ const node = this.startNode();
+ this.expect(13);
+
+ if (this.match(52)) {
+ node.readonly = this.state.value;
+ this.next();
+ this.expectContextual("readonly");
+ } else if (this.eatContextual("readonly")) {
+ node.readonly = true;
+ }
+
+ this.expect(8);
+ node.typeParameter = this.tsParseMappedTypeParameter();
+ node.nameType = this.eatContextual("as") ? this.tsParseType() : null;
+ this.expect(11);
+
+ if (this.match(52)) {
+ node.optional = this.state.value;
+ this.next();
+ this.expect(25);
+ } else if (this.eat(25)) {
+ node.optional = true;
+ }
+
+ node.typeAnnotation = this.tsTryParseType();
+ this.semicolon();
+ this.expect(16);
+ return this.finishNode(node, "TSMappedType");
+ }
+
+ tsParseTupleType() {
+ const node = this.startNode();
+ node.elementTypes = this.tsParseBracketedList("TupleElementTypes", this.tsParseTupleElementType.bind(this), true, false);
+ let seenOptionalElement = false;
+ let labeledElements = null;
+ node.elementTypes.forEach(elementNode => {
+ var _labeledElements;
+
+ let {
+ type
+ } = elementNode;
+
+ if (seenOptionalElement && type !== "TSRestType" && type !== "TSOptionalType" && !(type === "TSNamedTupleMember" && elementNode.optional)) {
+ this.raise(elementNode.start, TSErrors.OptionalTypeBeforeRequired);
+ }
+
+ seenOptionalElement = seenOptionalElement || type === "TSNamedTupleMember" && elementNode.optional || type === "TSOptionalType";
+
+ if (type === "TSRestType") {
+ elementNode = elementNode.typeAnnotation;
+ type = elementNode.type;
+ }
+
+ const isLabeled = type === "TSNamedTupleMember";
+ labeledElements = (_labeledElements = labeledElements) != null ? _labeledElements : isLabeled;
+
+ if (labeledElements !== isLabeled) {
+ this.raise(elementNode.start, TSErrors.MixedLabeledAndUnlabeledElements);
+ }
+ });
+ return this.finishNode(node, "TSTupleType");
+ }
+
+ tsParseTupleElementType() {
+ const {
+ start: startPos,
+ startLoc
+ } = this.state;
+ const rest = this.eat(29);
+ let type = this.tsParseType();
+ const optional = this.eat(25);
+ const labeled = this.eat(22);
+
+ if (labeled) {
+ const labeledNode = this.startNodeAtNode(type);
+ labeledNode.optional = optional;
+
+ if (type.type === "TSTypeReference" && !type.typeParameters && type.typeName.type === "Identifier") {
+ labeledNode.label = type.typeName;
+ } else {
+ this.raise(type.start, TSErrors.InvalidTupleMemberLabel);
+ labeledNode.label = type;
+ }
+
+ labeledNode.elementType = this.tsParseType();
+ type = this.finishNode(labeledNode, "TSNamedTupleMember");
+ } else if (optional) {
+ const optionalTypeNode = this.startNodeAtNode(type);
+ optionalTypeNode.typeAnnotation = type;
+ type = this.finishNode(optionalTypeNode, "TSOptionalType");
+ }
+
+ if (rest) {
+ const restNode = this.startNodeAt(startPos, startLoc);
+ restNode.typeAnnotation = type;
+ type = this.finishNode(restNode, "TSRestType");
+ }
+
+ return type;
+ }
+
+ tsParseParenthesizedType() {
+ const node = this.startNode();
+ this.expect(18);
+ node.typeAnnotation = this.tsParseType();
+ this.expect(19);
+ return this.finishNode(node, "TSParenthesizedType");
+ }
+
+ tsParseFunctionOrConstructorType(type, abstract) {
+ const node = this.startNode();
+
+ if (type === "TSConstructorType") {
+ node.abstract = !!abstract;
+ if (abstract) this.next();
+ this.next();
+ }
+
+ this.tsFillSignature(27, node);
+ return this.finishNode(node, type);
+ }
+
+ tsParseLiteralTypeNode() {
+ const node = this.startNode();
+
+ node.literal = (() => {
+ switch (this.state.type) {
+ case 0:
+ case 1:
+ case 4:
+ case 84:
+ case 85:
+ return this.parseExprAtom();
+
+ default:
+ throw this.unexpected();
+ }
+ })();
+
+ return this.finishNode(node, "TSLiteralType");
+ }
+
+ tsParseTemplateLiteralType() {
+ const node = this.startNode();
+ node.literal = this.parseTemplate(false);
+ return this.finishNode(node, "TSLiteralType");
+ }
+
+ parseTemplateSubstitution() {
+ if (this.state.inType) return this.tsParseType();
+ return super.parseTemplateSubstitution();
+ }
+
+ tsParseThisTypeOrThisTypePredicate() {
+ const thisKeyword = this.tsParseThisTypeNode();
+
+ if (this.isContextual("is") && !this.hasPrecedingLineBreak()) {
+ return this.tsParseThisTypePredicate(thisKeyword);
+ } else {
+ return thisKeyword;
+ }
+ }
+
+ tsParseNonArrayType() {
+ switch (this.state.type) {
+ case 5:
+ case 87:
+ case 83:
+ {
+ const type = this.match(87) ? "TSVoidKeyword" : this.match(83) ? "TSNullKeyword" : keywordTypeFromName(this.state.value);
+
+ if (type !== undefined && this.lookaheadCharCode() !== 46) {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, type);
+ }
+
+ return this.tsParseTypeReference();
+ }
+
+ case 4:
+ case 0:
+ case 1:
+ case 84:
+ case 85:
+ return this.tsParseLiteralTypeNode();
+
+ case 52:
+ if (this.state.value === "-") {
+ const node = this.startNode();
+ const nextToken = this.lookahead();
+
+ if (nextToken.type !== 0 && nextToken.type !== 1) {
+ throw this.unexpected();
+ }
+
+ node.literal = this.parseMaybeUnary();
+ return this.finishNode(node, "TSLiteralType");
+ }
+
+ break;
+
+ case 77:
+ return this.tsParseThisTypeOrThisTypePredicate();
+
+ case 86:
+ return this.tsParseTypeQuery();
+
+ case 82:
+ return this.tsParseImportType();
+
+ case 13:
+ return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();
+
+ case 8:
+ return this.tsParseTupleType();
+
+ case 18:
+ return this.tsParseParenthesizedType();
+
+ case 30:
+ return this.tsParseTemplateLiteralType();
+ }
+
+ throw this.unexpected();
+ }
+
+ tsParseArrayTypeOrHigher() {
+ let type = this.tsParseNonArrayType();
+
+ while (!this.hasPrecedingLineBreak() && this.eat(8)) {
+ if (this.match(11)) {
+ const node = this.startNodeAtNode(type);
+ node.elementType = type;
+ this.expect(11);
+ type = this.finishNode(node, "TSArrayType");
+ } else {
+ const node = this.startNodeAtNode(type);
+ node.objectType = type;
+ node.indexType = this.tsParseType();
+ this.expect(11);
+ type = this.finishNode(node, "TSIndexedAccessType");
+ }
+ }
+
+ return type;
+ }
+
+ tsParseTypeOperator(operator) {
+ const node = this.startNode();
+ this.expectContextual(operator);
+ node.operator = operator;
+ node.typeAnnotation = this.tsParseTypeOperatorOrHigher();
+
+ if (operator === "readonly") {
+ this.tsCheckTypeAnnotationForReadOnly(node);
+ }
+
+ return this.finishNode(node, "TSTypeOperator");
+ }
+
+ tsCheckTypeAnnotationForReadOnly(node) {
+ switch (node.typeAnnotation.type) {
+ case "TSTupleType":
+ case "TSArrayType":
+ return;
+
+ default:
+ this.raise(node.start, TSErrors.UnexpectedReadonly);
+ }
+ }
+
+ tsParseInferType() {
+ const node = this.startNode();
+ this.expectContextual("infer");
+ const typeParameter = this.startNode();
+ typeParameter.name = this.tsParseTypeParameterName();
+ node.typeParameter = this.finishNode(typeParameter, "TSTypeParameter");
+ return this.finishNode(node, "TSInferType");
+ }
+
+ tsParseTypeOperatorOrHigher() {
+ const operator = ["keyof", "unique", "readonly"].find(kw => this.isContextual(kw));
+ return operator ? this.tsParseTypeOperator(operator) : this.isContextual("infer") ? this.tsParseInferType() : this.tsParseArrayTypeOrHigher();
+ }
+
+ tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {
+ const node = this.startNode();
+ const hasLeadingOperator = this.eat(operator);
+ const types = [];
+
+ do {
+ types.push(parseConstituentType());
+ } while (this.eat(operator));
+
+ if (types.length === 1 && !hasLeadingOperator) {
+ return types[0];
+ }
+
+ node.types = types;
+ return this.finishNode(node, kind);
+ }
+
+ tsParseIntersectionTypeOrHigher() {
+ return this.tsParseUnionOrIntersectionType("TSIntersectionType", this.tsParseTypeOperatorOrHigher.bind(this), 48);
+ }
+
+ tsParseUnionTypeOrHigher() {
+ return this.tsParseUnionOrIntersectionType("TSUnionType", this.tsParseIntersectionTypeOrHigher.bind(this), 46);
+ }
+
+ tsIsStartOfFunctionType() {
+ if (this.isRelational("<")) {
+ return true;
+ }
+
+ return this.match(18) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));
+ }
+
+ tsSkipParameterStart() {
+ if (this.match(5) || this.match(77)) {
+ this.next();
+ return true;
+ }
+
+ if (this.match(13)) {
+ let braceStackCounter = 1;
+ this.next();
+
+ while (braceStackCounter > 0) {
+ if (this.match(13)) {
+ ++braceStackCounter;
+ } else if (this.match(16)) {
+ --braceStackCounter;
+ }
+
+ this.next();
+ }
+
+ return true;
+ }
+
+ if (this.match(8)) {
+ let braceStackCounter = 1;
+ this.next();
+
+ while (braceStackCounter > 0) {
+ if (this.match(8)) {
+ ++braceStackCounter;
+ } else if (this.match(11)) {
+ --braceStackCounter;
+ }
+
+ this.next();
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ tsIsUnambiguouslyStartOfFunctionType() {
+ this.next();
+
+ if (this.match(19) || this.match(29)) {
+ return true;
+ }
+
+ if (this.tsSkipParameterStart()) {
+ if (this.match(22) || this.match(20) || this.match(25) || this.match(35)) {
+ return true;
+ }
+
+ if (this.match(19)) {
+ this.next();
+
+ if (this.match(27)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ tsParseTypeOrTypePredicateAnnotation(returnToken) {
+ return this.tsInType(() => {
+ const t = this.startNode();
+ this.expect(returnToken);
+ const node = this.startNode();
+ const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));
+
+ if (asserts && this.match(77)) {
+ let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();
+
+ if (thisTypePredicate.type === "TSThisType") {
+ node.parameterName = thisTypePredicate;
+ node.asserts = true;
+ node.typeAnnotation = null;
+ thisTypePredicate = this.finishNode(node, "TSTypePredicate");
+ } else {
+ this.resetStartLocationFromNode(thisTypePredicate, node);
+ thisTypePredicate.asserts = true;
+ }
+
+ t.typeAnnotation = thisTypePredicate;
+ return this.finishNode(t, "TSTypeAnnotation");
+ }
+
+ const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));
+
+ if (!typePredicateVariable) {
+ if (!asserts) {
+ return this.tsParseTypeAnnotation(false, t);
+ }
+
+ node.parameterName = this.parseIdentifier();
+ node.asserts = asserts;
+ node.typeAnnotation = null;
+ t.typeAnnotation = this.finishNode(node, "TSTypePredicate");
+ return this.finishNode(t, "TSTypeAnnotation");
+ }
+
+ const type = this.tsParseTypeAnnotation(false);
+ node.parameterName = typePredicateVariable;
+ node.typeAnnotation = type;
+ node.asserts = asserts;
+ t.typeAnnotation = this.finishNode(node, "TSTypePredicate");
+ return this.finishNode(t, "TSTypeAnnotation");
+ });
+ }
+
+ tsTryParseTypeOrTypePredicateAnnotation() {
+ return this.match(22) ? this.tsParseTypeOrTypePredicateAnnotation(22) : undefined;
+ }
+
+ tsTryParseTypeAnnotation() {
+ return this.match(22) ? this.tsParseTypeAnnotation() : undefined;
+ }
+
+ tsTryParseType() {
+ return this.tsEatThenParseType(22);
+ }
+
+ tsParseTypePredicatePrefix() {
+ const id = this.parseIdentifier();
+
+ if (this.isContextual("is") && !this.hasPrecedingLineBreak()) {
+ this.next();
+ return id;
+ }
+ }
+
+ tsParseTypePredicateAsserts() {
+ if (!this.match(5) || this.state.value !== "asserts") {
+ return false;
+ }
+
+ const containsEsc = this.state.containsEsc;
+ this.next();
+
+ if (!this.match(5) && !this.match(77)) {
+ return false;
+ }
+
+ if (containsEsc) {
+ this.raise(this.state.lastTokStart, ErrorMessages.InvalidEscapedReservedWord, "asserts");
+ }
+
+ return true;
+ }
+
+ tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {
+ this.tsInType(() => {
+ if (eatColon) this.expect(22);
+ t.typeAnnotation = this.tsParseType();
+ });
+ return this.finishNode(t, "TSTypeAnnotation");
+ }
+
+ tsParseType() {
+ assert(this.state.inType);
+ const type = this.tsParseNonConditionalType();
+
+ if (this.hasPrecedingLineBreak() || !this.eat(80)) {
+ return type;
+ }
+
+ const node = this.startNodeAtNode(type);
+ node.checkType = type;
+ node.extendsType = this.tsParseNonConditionalType();
+ this.expect(25);
+ node.trueType = this.tsParseType();
+ this.expect(22);
+ node.falseType = this.tsParseType();
+ return this.finishNode(node, "TSConditionalType");
+ }
+
+ isAbstractConstructorSignature() {
+ return this.isContextual("abstract") && this.lookahead().type === 76;
+ }
+
+ tsParseNonConditionalType() {
+ if (this.tsIsStartOfFunctionType()) {
+ return this.tsParseFunctionOrConstructorType("TSFunctionType");
+ }
+
+ if (this.match(76)) {
+ return this.tsParseFunctionOrConstructorType("TSConstructorType");
+ } else if (this.isAbstractConstructorSignature()) {
+ return this.tsParseFunctionOrConstructorType("TSConstructorType", true);
+ }
+
+ return this.tsParseUnionTypeOrHigher();
+ }
+
+ tsParseTypeAssertion() {
+ const node = this.startNode();
+
+ const _const = this.tsTryNextParseConstantContext();
+
+ node.typeAnnotation = _const || this.tsNextThenParseType();
+ this.expectRelational(">");
+ node.expression = this.parseMaybeUnary();
+ return this.finishNode(node, "TSTypeAssertion");
+ }
+
+ tsParseHeritageClause(descriptor) {
+ const originalStart = this.state.start;
+ const delimitedList = this.tsParseDelimitedList("HeritageClauseElement", this.tsParseExpressionWithTypeArguments.bind(this));
+
+ if (!delimitedList.length) {
+ this.raise(originalStart, TSErrors.EmptyHeritageClauseType, descriptor);
+ }
+
+ return delimitedList;
+ }
+
+ tsParseExpressionWithTypeArguments() {
+ const node = this.startNode();
+ node.expression = this.tsParseEntityName(false);
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.tsParseTypeArguments();
+ }
+
+ return this.finishNode(node, "TSExpressionWithTypeArguments");
+ }
+
+ tsParseInterfaceDeclaration(node) {
+ if (this.match(5)) {
+ node.id = this.parseIdentifier();
+ this.checkLVal(node.id, "typescript interface declaration", BIND_TS_INTERFACE);
+ } else {
+ node.id = null;
+ this.raise(this.state.start, TSErrors.MissingInterfaceName);
+ }
+
+ node.typeParameters = this.tsTryParseTypeParameters();
+
+ if (this.eat(80)) {
+ node.extends = this.tsParseHeritageClause("extends");
+ }
+
+ const body = this.startNode();
+ body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));
+ node.body = this.finishNode(body, "TSInterfaceBody");
+ return this.finishNode(node, "TSInterfaceDeclaration");
+ }
+
+ tsParseTypeAliasDeclaration(node) {
+ node.id = this.parseIdentifier();
+ this.checkLVal(node.id, "typescript type alias", BIND_TS_TYPE);
+ node.typeParameters = this.tsTryParseTypeParameters();
+ node.typeAnnotation = this.tsInType(() => {
+ this.expect(35);
+
+ if (this.isContextual("intrinsic") && this.lookahead().type !== 24) {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, "TSIntrinsicKeyword");
+ }
+
+ return this.tsParseType();
+ });
+ this.semicolon();
+ return this.finishNode(node, "TSTypeAliasDeclaration");
+ }
+
+ tsInNoContext(cb) {
+ const oldContext = this.state.context;
+ this.state.context = [oldContext[0]];
+
+ try {
+ return cb();
+ } finally {
+ this.state.context = oldContext;
+ }
+ }
+
+ tsInType(cb) {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+
+ try {
+ return cb();
+ } finally {
+ this.state.inType = oldInType;
+ }
+ }
+
+ tsEatThenParseType(token) {
+ return !this.match(token) ? undefined : this.tsNextThenParseType();
+ }
+
+ tsExpectThenParseType(token) {
+ return this.tsDoThenParseType(() => this.expect(token));
+ }
+
+ tsNextThenParseType() {
+ return this.tsDoThenParseType(() => this.next());
+ }
+
+ tsDoThenParseType(cb) {
+ return this.tsInType(() => {
+ cb();
+ return this.tsParseType();
+ });
+ }
+
+ tsParseEnumMember() {
+ const node = this.startNode();
+ node.id = this.match(4) ? this.parseExprAtom() : this.parseIdentifier(true);
+
+ if (this.eat(35)) {
+ node.initializer = this.parseMaybeAssignAllowIn();
+ }
+
+ return this.finishNode(node, "TSEnumMember");
+ }
+
+ tsParseEnumDeclaration(node, isConst) {
+ if (isConst) node.const = true;
+ node.id = this.parseIdentifier();
+ this.checkLVal(node.id, "typescript enum declaration", isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM);
+ this.expect(13);
+ node.members = this.tsParseDelimitedList("EnumMembers", this.tsParseEnumMember.bind(this));
+ this.expect(16);
+ return this.finishNode(node, "TSEnumDeclaration");
+ }
+
+ tsParseModuleBlock() {
+ const node = this.startNode();
+ this.scope.enter(SCOPE_OTHER);
+ this.expect(13);
+ this.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 16);
+ this.scope.exit();
+ return this.finishNode(node, "TSModuleBlock");
+ }
+
+ tsParseModuleOrNamespaceDeclaration(node, nested = false) {
+ node.id = this.parseIdentifier();
+
+ if (!nested) {
+ this.checkLVal(node.id, "module or namespace declaration", BIND_TS_NAMESPACE);
+ }
+
+ if (this.eat(24)) {
+ const inner = this.startNode();
+ this.tsParseModuleOrNamespaceDeclaration(inner, true);
+ node.body = inner;
+ } else {
+ this.scope.enter(SCOPE_TS_MODULE);
+ this.prodParam.enter(PARAM);
+ node.body = this.tsParseModuleBlock();
+ this.prodParam.exit();
+ this.scope.exit();
+ }
+
+ return this.finishNode(node, "TSModuleDeclaration");
+ }
+
+ tsParseAmbientExternalModuleDeclaration(node) {
+ if (this.isContextual("global")) {
+ node.global = true;
+ node.id = this.parseIdentifier();
+ } else if (this.match(4)) {
+ node.id = this.parseExprAtom();
+ } else {
+ this.unexpected();
+ }
+
+ if (this.match(13)) {
+ this.scope.enter(SCOPE_TS_MODULE);
+ this.prodParam.enter(PARAM);
+ node.body = this.tsParseModuleBlock();
+ this.prodParam.exit();
+ this.scope.exit();
+ } else {
+ this.semicolon();
+ }
+
+ return this.finishNode(node, "TSModuleDeclaration");
+ }
+
+ tsParseImportEqualsDeclaration(node, isExport) {
+ node.isExport = isExport || false;
+ node.id = this.parseIdentifier();
+ this.checkLVal(node.id, "import equals declaration", BIND_LEXICAL);
+ this.expect(35);
+ const moduleReference = this.tsParseModuleReference();
+
+ if (node.importKind === "type" && moduleReference.type !== "TSExternalModuleReference") {
+ this.raise(moduleReference.start, TSErrors.ImportAliasHasImportType);
+ }
+
+ node.moduleReference = moduleReference;
+ this.semicolon();
+ return this.finishNode(node, "TSImportEqualsDeclaration");
+ }
+
+ tsIsExternalModuleReference() {
+ return this.isContextual("require") && this.lookaheadCharCode() === 40;
+ }
+
+ tsParseModuleReference() {
+ return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);
+ }
+
+ tsParseExternalModuleReference() {
+ const node = this.startNode();
+ this.expectContextual("require");
+ this.expect(18);
+
+ if (!this.match(4)) {
+ throw this.unexpected();
+ }
+
+ node.expression = this.parseExprAtom();
+ this.expect(19);
+ return this.finishNode(node, "TSExternalModuleReference");
+ }
+
+ tsLookAhead(f) {
+ const state = this.state.clone();
+ const res = f();
+ this.state = state;
+ return res;
+ }
+
+ tsTryParseAndCatch(f) {
+ const result = this.tryParse(abort => f() || abort());
+ if (result.aborted || !result.node) return undefined;
+ if (result.error) this.state = result.failState;
+ return result.node;
+ }
+
+ tsTryParse(f) {
+ const state = this.state.clone();
+ const result = f();
+
+ if (result !== undefined && result !== false) {
+ return result;
+ } else {
+ this.state = state;
+ return undefined;
+ }
+ }
+
+ tsTryParseDeclare(nany) {
+ if (this.isLineTerminator()) {
+ return;
+ }
+
+ let starttype = this.state.type;
+ let kind;
+
+ if (this.isContextual("let")) {
+ starttype = 73;
+ kind = "let";
+ }
+
+ return this.tsInAmbientContext(() => {
+ switch (starttype) {
+ case 67:
+ nany.declare = true;
+ return this.parseFunctionStatement(nany, false, true);
+
+ case 79:
+ nany.declare = true;
+ return this.parseClass(nany, true, false);
+
+ case 74:
+ if (this.match(74) && this.isLookaheadContextual("enum")) {
+ this.expect(74);
+ this.expectContextual("enum");
+ return this.tsParseEnumDeclaration(nany, true);
+ }
+
+ case 73:
+ kind = kind || this.state.value;
+ return this.parseVarStatement(nany, kind);
+
+ case 5:
+ {
+ const value = this.state.value;
+
+ if (value === "global") {
+ return this.tsParseAmbientExternalModuleDeclaration(nany);
+ } else {
+ return this.tsParseDeclaration(nany, value, true);
+ }
+ }
+ }
+ });
+ }
+
+ tsTryParseExportDeclaration() {
+ return this.tsParseDeclaration(this.startNode(), this.state.value, true);
+ }
+
+ tsParseExpressionStatement(node, expr) {
+ switch (expr.name) {
+ case "declare":
+ {
+ const declaration = this.tsTryParseDeclare(node);
+
+ if (declaration) {
+ declaration.declare = true;
+ return declaration;
+ }
+
+ break;
+ }
+
+ case "global":
+ if (this.match(13)) {
+ this.scope.enter(SCOPE_TS_MODULE);
+ this.prodParam.enter(PARAM);
+ const mod = node;
+ mod.global = true;
+ mod.id = expr;
+ mod.body = this.tsParseModuleBlock();
+ this.scope.exit();
+ this.prodParam.exit();
+ return this.finishNode(mod, "TSModuleDeclaration");
+ }
+
+ break;
+
+ default:
+ return this.tsParseDeclaration(node, expr.name, false);
+ }
+ }
+
+ tsParseDeclaration(node, value, next) {
+ switch (value) {
+ case "abstract":
+ if (this.tsCheckLineTerminator(next) && (this.match(79) || this.match(5))) {
+ return this.tsParseAbstractDeclaration(node);
+ }
+
+ break;
+
+ case "enum":
+ if (next || this.match(5)) {
+ if (next) this.next();
+ return this.tsParseEnumDeclaration(node, false);
+ }
+
+ break;
+
+ case "interface":
+ if (this.tsCheckLineTerminator(next) && this.match(5)) {
+ return this.tsParseInterfaceDeclaration(node);
+ }
+
+ break;
+
+ case "module":
+ if (this.tsCheckLineTerminator(next)) {
+ if (this.match(4)) {
+ return this.tsParseAmbientExternalModuleDeclaration(node);
+ } else if (this.match(5)) {
+ return this.tsParseModuleOrNamespaceDeclaration(node);
+ }
+ }
+
+ break;
+
+ case "namespace":
+ if (this.tsCheckLineTerminator(next) && this.match(5)) {
+ return this.tsParseModuleOrNamespaceDeclaration(node);
+ }
+
+ break;
+
+ case "type":
+ if (this.tsCheckLineTerminator(next) && this.match(5)) {
+ return this.tsParseTypeAliasDeclaration(node);
+ }
+
+ break;
+ }
+ }
+
+ tsCheckLineTerminator(next) {
+ if (next) {
+ if (this.hasFollowingLineBreak()) return false;
+ this.next();
+ return true;
+ }
+
+ return !this.isLineTerminator();
+ }
+
+ tsTryParseGenericAsyncArrowFunction(startPos, startLoc) {
+ if (!this.isRelational("<")) {
+ return undefined;
+ }
+
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ this.state.maybeInArrowParameters = true;
+ const res = this.tsTryParseAndCatch(() => {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.typeParameters = this.tsParseTypeParameters();
+ super.parseFunctionParams(node);
+ node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();
+ this.expect(27);
+ return node;
+ });
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+
+ if (!res) {
+ return undefined;
+ }
+
+ return this.parseArrowExpression(res, null, true);
+ }
+
+ tsParseTypeArguments() {
+ const node = this.startNode();
+ node.params = this.tsInType(() => this.tsInNoContext(() => {
+ this.expectRelational("<");
+ return this.tsParseDelimitedList("TypeParametersOrArguments", this.tsParseType.bind(this));
+ }));
+
+ if (node.params.length === 0) {
+ this.raise(node.start, TSErrors.EmptyTypeArguments);
+ }
+
+ this.expectRelational(">");
+ return this.finishNode(node, "TSTypeParameterInstantiation");
+ }
+
+ tsIsDeclarationStart() {
+ if (this.match(5)) {
+ switch (this.state.value) {
+ case "abstract":
+ case "declare":
+ case "enum":
+ case "interface":
+ case "module":
+ case "namespace":
+ case "type":
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ isExportDefaultSpecifier() {
+ if (this.tsIsDeclarationStart()) return false;
+ return super.isExportDefaultSpecifier();
+ }
+
+ parseAssignableListItem(allowModifiers, decorators) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ let accessibility;
+ let readonly = false;
+ let override = false;
+
+ if (allowModifiers !== undefined) {
+ const modified = {};
+ this.tsParseModifiers(modified, ["public", "private", "protected", "override", "readonly"]);
+ accessibility = modified.accessibility;
+ override = modified.override;
+ readonly = modified.readonly;
+
+ if (allowModifiers === false && (accessibility || readonly || override)) {
+ this.raise(startPos, TSErrors.UnexpectedParameterModifier);
+ }
+ }
+
+ const left = this.parseMaybeDefault();
+ this.parseAssignableListItemTypes(left);
+ const elt = this.parseMaybeDefault(left.start, left.loc.start, left);
+
+ if (accessibility || readonly || override) {
+ const pp = this.startNodeAt(startPos, startLoc);
+
+ if (decorators.length) {
+ pp.decorators = decorators;
+ }
+
+ if (accessibility) pp.accessibility = accessibility;
+ if (readonly) pp.readonly = readonly;
+ if (override) pp.override = override;
+
+ if (elt.type !== "Identifier" && elt.type !== "AssignmentPattern") {
+ this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);
+ }
+
+ pp.parameter = elt;
+ return this.finishNode(pp, "TSParameterProperty");
+ }
+
+ if (decorators.length) {
+ left.decorators = decorators;
+ }
+
+ return elt;
+ }
+
+ parseFunctionBodyAndFinish(node, type, isMethod = false) {
+ if (this.match(22)) {
+ node.returnType = this.tsParseTypeOrTypePredicateAnnotation(22);
+ }
+
+ const bodilessType = type === "FunctionDeclaration" ? "TSDeclareFunction" : type === "ClassMethod" ? "TSDeclareMethod" : undefined;
+
+ if (bodilessType && !this.match(13) && this.isLineTerminator()) {
+ this.finishNode(node, bodilessType);
+ return;
+ }
+
+ if (bodilessType === "TSDeclareFunction" && this.state.isAmbientContext) {
+ this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);
+
+ if (node.declare) {
+ super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);
+ return;
+ }
+ }
+
+ super.parseFunctionBodyAndFinish(node, type, isMethod);
+ }
+
+ registerFunctionStatementId(node) {
+ if (!node.body && node.id) {
+ this.checkLVal(node.id, "function name", BIND_TS_AMBIENT);
+ } else {
+ super.registerFunctionStatementId(...arguments);
+ }
+ }
+
+ tsCheckForInvalidTypeCasts(items) {
+ items.forEach(node => {
+ if ((node == null ? void 0 : node.type) === "TSTypeCastExpression") {
+ this.raise(node.typeAnnotation.start, TSErrors.UnexpectedTypeAnnotation);
+ }
+ });
+ }
+
+ toReferencedList(exprList, isInParens) {
+ this.tsCheckForInvalidTypeCasts(exprList);
+ return exprList;
+ }
+
+ parseArrayLike(...args) {
+ const node = super.parseArrayLike(...args);
+
+ if (node.type === "ArrayExpression") {
+ this.tsCheckForInvalidTypeCasts(node.elements);
+ }
+
+ return node;
+ }
+
+ parseSubscript(base, startPos, startLoc, noCalls, state) {
+ if (!this.hasPrecedingLineBreak() && this.match(40)) {
+ this.state.exprAllowed = false;
+ this.next();
+ const nonNullExpression = this.startNodeAt(startPos, startLoc);
+ nonNullExpression.expression = base;
+ return this.finishNode(nonNullExpression, "TSNonNullExpression");
+ }
+
+ let isOptionalCall = false;
+
+ if (this.match(26) && this.lookaheadCharCode() === 60) {
+ if (noCalls) {
+ state.stop = true;
+ return base;
+ }
+
+ state.optionalChainMember = isOptionalCall = true;
+ this.next();
+ }
+
+ if (this.isRelational("<")) {
+ let missingParenErrorPos;
+ const result = this.tsTryParseAndCatch(() => {
+ if (!noCalls && this.atPossibleAsyncArrow(base)) {
+ const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startPos, startLoc);
+
+ if (asyncArrowFn) {
+ return asyncArrowFn;
+ }
+ }
+
+ const node = this.startNodeAt(startPos, startLoc);
+ node.callee = base;
+ const typeArguments = this.tsParseTypeArguments();
+
+ if (typeArguments) {
+ if (isOptionalCall && !this.match(18)) {
+ missingParenErrorPos = this.state.pos;
+ this.unexpected();
+ }
+
+ if (!noCalls && this.eat(18)) {
+ node.arguments = this.parseCallExpressionArguments(19, false);
+ this.tsCheckForInvalidTypeCasts(node.arguments);
+ node.typeParameters = typeArguments;
+
+ if (state.optionalChainMember) {
+ node.optional = isOptionalCall;
+ }
+
+ return this.finishCallExpression(node, state.optionalChainMember);
+ } else if (this.match(30)) {
+ const result = this.parseTaggedTemplateExpression(base, startPos, startLoc, state);
+ result.typeParameters = typeArguments;
+ return result;
+ }
+ }
+
+ this.unexpected();
+ });
+
+ if (missingParenErrorPos) {
+ this.unexpected(missingParenErrorPos, 18);
+ }
+
+ if (result) return result;
+ }
+
+ return super.parseSubscript(base, startPos, startLoc, noCalls, state);
+ }
+
+ parseNewArguments(node) {
+ if (this.isRelational("<")) {
+ const typeParameters = this.tsTryParseAndCatch(() => {
+ const args = this.tsParseTypeArguments();
+ if (!this.match(18)) this.unexpected();
+ return args;
+ });
+
+ if (typeParameters) {
+ node.typeParameters = typeParameters;
+ }
+ }
+
+ super.parseNewArguments(node);
+ }
+
+ parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {
+ if (tokenOperatorPrecedence(57) > minPrec && !this.hasPrecedingLineBreak() && this.isContextual("as")) {
+ const node = this.startNodeAt(leftStartPos, leftStartLoc);
+ node.expression = left;
+
+ const _const = this.tsTryNextParseConstantContext();
+
+ if (_const) {
+ node.typeAnnotation = _const;
+ } else {
+ node.typeAnnotation = this.tsNextThenParseType();
+ }
+
+ this.finishNode(node, "TSAsExpression");
+ this.reScan_lt_gt();
+ return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);
+ }
+
+ return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec);
+ }
+
+ checkReservedWord(word, startLoc, checkKeywords, isBinding) {}
+
+ checkDuplicateExports() {}
+
+ parseImport(node) {
+ node.importKind = "value";
+
+ if (this.match(5) || this.match(54) || this.match(13)) {
+ let ahead = this.lookahead();
+
+ if (this.isContextual("type") && ahead.type !== 20 && !(ahead.type === 5 && ahead.value === "from") && ahead.type !== 35) {
+ node.importKind = "type";
+ this.next();
+ ahead = this.lookahead();
+ }
+
+ if (this.match(5) && ahead.type === 35) {
+ return this.tsParseImportEqualsDeclaration(node);
+ }
+ }
+
+ const importNode = super.parseImport(node);
+
+ if (importNode.importKind === "type" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === "ImportDefaultSpecifier") {
+ this.raise(importNode.start, TSErrors.TypeImportCannotSpecifyDefaultAndNamed);
+ }
+
+ return importNode;
+ }
+
+ parseExport(node) {
+ if (this.match(82)) {
+ this.next();
+
+ if (this.isContextual("type") && this.lookaheadCharCode() !== 61) {
+ node.importKind = "type";
+ this.next();
+ } else {
+ node.importKind = "value";
+ }
+
+ return this.tsParseImportEqualsDeclaration(node, true);
+ } else if (this.eat(35)) {
+ const assign = node;
+ assign.expression = this.parseExpression();
+ this.semicolon();
+ return this.finishNode(assign, "TSExportAssignment");
+ } else if (this.eatContextual("as")) {
+ const decl = node;
+ this.expectContextual("namespace");
+ decl.id = this.parseIdentifier();
+ this.semicolon();
+ return this.finishNode(decl, "TSNamespaceExportDeclaration");
+ } else {
+ if (this.isContextual("type") && this.lookahead().type === 13) {
+ this.next();
+ node.exportKind = "type";
+ } else {
+ node.exportKind = "value";
+ }
+
+ return super.parseExport(node);
+ }
+ }
+
+ isAbstractClass() {
+ return this.isContextual("abstract") && this.lookahead().type === 79;
+ }
+
+ parseExportDefaultExpression() {
+ if (this.isAbstractClass()) {
+ const cls = this.startNode();
+ this.next();
+ cls.abstract = true;
+ this.parseClass(cls, true, true);
+ return cls;
+ }
+
+ if (this.state.value === "interface") {
+ const interfaceNode = this.startNode();
+ this.next();
+ const result = this.tsParseInterfaceDeclaration(interfaceNode);
+ if (result) return result;
+ }
+
+ return super.parseExportDefaultExpression();
+ }
+
+ parseStatementContent(context, topLevel) {
+ if (this.state.type === 74) {
+ const ahead = this.lookahead();
+
+ if (ahead.type === 5 && ahead.value === "enum") {
+ const node = this.startNode();
+ this.expect(74);
+ this.expectContextual("enum");
+ return this.tsParseEnumDeclaration(node, true);
+ }
+ }
+
+ return super.parseStatementContent(context, topLevel);
+ }
+
+ parseAccessModifier() {
+ return this.tsParseModifier(["public", "protected", "private"]);
+ }
+
+ tsHasSomeModifiers(member, modifiers) {
+ return modifiers.some(modifier => {
+ if (tsIsAccessModifier(modifier)) {
+ return member.accessibility === modifier;
+ }
+
+ return !!member[modifier];
+ });
+ }
+
+ tsIsStartOfStaticBlocks() {
+ return this.isContextual("static") && this.lookaheadCharCode() === 123;
+ }
+
+ parseClassMember(classBody, member, state) {
+ const modifiers = ["declare", "private", "public", "protected", "override", "abstract", "readonly", "static"];
+ this.tsParseModifiers(member, modifiers, undefined, undefined, true);
+
+ const callParseClassMemberWithIsStatic = () => {
+ if (this.tsIsStartOfStaticBlocks()) {
+ this.next();
+ this.next();
+
+ if (this.tsHasSomeModifiers(member, modifiers)) {
+ this.raise(this.state.pos, TSErrors.StaticBlockCannotHaveModifier);
+ }
+
+ this.parseClassStaticBlock(classBody, member);
+ } else {
+ this.parseClassMemberWithIsStatic(classBody, member, state, !!member.static);
+ }
+ };
+
+ if (member.declare) {
+ this.tsInAmbientContext(callParseClassMemberWithIsStatic);
+ } else {
+ callParseClassMemberWithIsStatic();
+ }
+ }
+
+ parseClassMemberWithIsStatic(classBody, member, state, isStatic) {
+ const idx = this.tsTryParseIndexSignature(member);
+
+ if (idx) {
+ classBody.body.push(idx);
+
+ if (member.abstract) {
+ this.raise(member.start, TSErrors.IndexSignatureHasAbstract);
+ }
+
+ if (member.accessibility) {
+ this.raise(member.start, TSErrors.IndexSignatureHasAccessibility, member.accessibility);
+ }
+
+ if (member.declare) {
+ this.raise(member.start, TSErrors.IndexSignatureHasDeclare);
+ }
+
+ if (member.override) {
+ this.raise(member.start, TSErrors.IndexSignatureHasOverride);
+ }
+
+ return;
+ }
+
+ if (!this.state.inAbstractClass && member.abstract) {
+ this.raise(member.start, TSErrors.NonAbstractClassHasAbstractMethod);
+ }
+
+ if (member.override) {
+ if (!state.hadSuperClass) {
+ this.raise(member.start, TSErrors.OverrideNotInSubClass);
+ }
+ }
+
+ super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);
+ }
+
+ parsePostMemberNameModifiers(methodOrProp) {
+ const optional = this.eat(25);
+ if (optional) methodOrProp.optional = true;
+
+ if (methodOrProp.readonly && this.match(18)) {
+ this.raise(methodOrProp.start, TSErrors.ClassMethodHasReadonly);
+ }
+
+ if (methodOrProp.declare && this.match(18)) {
+ this.raise(methodOrProp.start, TSErrors.ClassMethodHasDeclare);
+ }
+ }
+
+ parseExpressionStatement(node, expr) {
+ const decl = expr.type === "Identifier" ? this.tsParseExpressionStatement(node, expr) : undefined;
+ return decl || super.parseExpressionStatement(node, expr);
+ }
+
+ shouldParseExportDeclaration() {
+ if (this.tsIsDeclarationStart()) return true;
+ return super.shouldParseExportDeclaration();
+ }
+
+ parseConditional(expr, startPos, startLoc, refExpressionErrors) {
+ if (!this.state.maybeInArrowParameters || !this.match(25)) {
+ return super.parseConditional(expr, startPos, startLoc, refExpressionErrors);
+ }
+
+ const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));
+
+ if (!result.node) {
+ if (result.error) {
+ super.setOptionalParametersError(refExpressionErrors, result.error);
+ }
+
+ return expr;
+ }
+
+ if (result.error) this.state = result.failState;
+ return result.node;
+ }
+
+ parseParenItem(node, startPos, startLoc) {
+ node = super.parseParenItem(node, startPos, startLoc);
+
+ if (this.eat(25)) {
+ node.optional = true;
+ this.resetEndLocation(node);
+ }
+
+ if (this.match(22)) {
+ const typeCastNode = this.startNodeAt(startPos, startLoc);
+ typeCastNode.expression = node;
+ typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();
+ return this.finishNode(typeCastNode, "TSTypeCastExpression");
+ }
+
+ return node;
+ }
+
+ parseExportDeclaration(node) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const isDeclare = this.eatContextual("declare");
+
+ if (isDeclare && (this.isContextual("declare") || !this.shouldParseExportDeclaration())) {
+ throw this.raise(this.state.start, TSErrors.ExpectedAmbientAfterExportDeclare);
+ }
+
+ let declaration;
+
+ if (this.match(5)) {
+ declaration = this.tsTryParseExportDeclaration();
+ }
+
+ if (!declaration) {
+ declaration = super.parseExportDeclaration(node);
+ }
+
+ if (declaration && (declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || isDeclare)) {
+ node.exportKind = "type";
+ }
+
+ if (declaration && isDeclare) {
+ this.resetStartLocation(declaration, startPos, startLoc);
+ declaration.declare = true;
+ }
+
+ return declaration;
+ }
+
+ parseClassId(node, isStatement, optionalId) {
+ if ((!isStatement || optionalId) && this.isContextual("implements")) {
+ return;
+ }
+
+ super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS);
+ const typeParameters = this.tsTryParseTypeParameters();
+ if (typeParameters) node.typeParameters = typeParameters;
+ }
+
+ parseClassPropertyAnnotation(node) {
+ if (!node.optional && this.eat(40)) {
+ node.definite = true;
+ }
+
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) node.typeAnnotation = type;
+ }
+
+ parseClassProperty(node) {
+ this.parseClassPropertyAnnotation(node);
+
+ if (this.state.isAmbientContext && this.match(35)) {
+ this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);
+ }
+
+ if (node.abstract && this.match(35)) {
+ const {
+ key
+ } = node;
+ this.raise(this.state.start, TSErrors.AbstractPropertyHasInitializer, key.type === "Identifier" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`);
+ }
+
+ return super.parseClassProperty(node);
+ }
+
+ parseClassPrivateProperty(node) {
+ if (node.abstract) {
+ this.raise(node.start, TSErrors.PrivateElementHasAbstract);
+ }
+
+ if (node.accessibility) {
+ this.raise(node.start, TSErrors.PrivateElementHasAccessibility, node.accessibility);
+ }
+
+ this.parseClassPropertyAnnotation(node);
+ return super.parseClassPrivateProperty(node);
+ }
+
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ const typeParameters = this.tsTryParseTypeParameters();
+
+ if (typeParameters && isConstructor) {
+ this.raise(typeParameters.start, TSErrors.ConstructorHasTypeParameters);
+ }
+
+ if (method.declare && (method.kind === "get" || method.kind === "set")) {
+ this.raise(method.start, TSErrors.DeclareAccessor, method.kind);
+ }
+
+ if (typeParameters) method.typeParameters = typeParameters;
+ super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);
+ }
+
+ pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
+ const typeParameters = this.tsTryParseTypeParameters();
+ if (typeParameters) method.typeParameters = typeParameters;
+ super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);
+ }
+
+ parseClassSuper(node) {
+ super.parseClassSuper(node);
+
+ if (node.superClass && this.isRelational("<")) {
+ node.superTypeParameters = this.tsParseTypeArguments();
+ }
+
+ if (this.eatContextual("implements")) {
+ node.implements = this.tsParseHeritageClause("implements");
+ }
+ }
+
+ parseObjPropValue(prop, ...args) {
+ const typeParameters = this.tsTryParseTypeParameters();
+ if (typeParameters) prop.typeParameters = typeParameters;
+ super.parseObjPropValue(prop, ...args);
+ }
+
+ parseFunctionParams(node, allowModifiers) {
+ const typeParameters = this.tsTryParseTypeParameters();
+ if (typeParameters) node.typeParameters = typeParameters;
+ super.parseFunctionParams(node, allowModifiers);
+ }
+
+ parseVarId(decl, kind) {
+ super.parseVarId(decl, kind);
+
+ if (decl.id.type === "Identifier" && this.eat(40)) {
+ decl.definite = true;
+ }
+
+ const type = this.tsTryParseTypeAnnotation();
+
+ if (type) {
+ decl.id.typeAnnotation = type;
+ this.resetEndLocation(decl.id);
+ }
+ }
+
+ parseAsyncArrowFromCallExpression(node, call) {
+ if (this.match(22)) {
+ node.returnType = this.tsParseTypeAnnotation();
+ }
+
+ return super.parseAsyncArrowFromCallExpression(node, call);
+ }
+
+ parseMaybeAssign(...args) {
+ var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3;
+
+ let state;
+ let jsx;
+ let typeCast;
+
+ if (this.hasPlugin("jsx") && (this.match(94) || this.isRelational("<"))) {
+ state = this.state.clone();
+ jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);
+ if (!jsx.error) return jsx.node;
+ const {
+ context
+ } = this.state;
+
+ if (context[context.length - 1] === types.j_oTag) {
+ context.length -= 2;
+ } else if (context[context.length - 1] === types.j_expr) {
+ context.length -= 1;
+ }
+ }
+
+ if (!((_jsx = jsx) != null && _jsx.error) && !this.isRelational("<")) {
+ return super.parseMaybeAssign(...args);
+ }
+
+ let typeParameters;
+ state = state || this.state.clone();
+ const arrow = this.tryParse(abort => {
+ var _expr$extra, _typeParameters;
+
+ typeParameters = this.tsParseTypeParameters();
+ const expr = super.parseMaybeAssign(...args);
+
+ if (expr.type !== "ArrowFunctionExpression" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {
+ abort();
+ }
+
+ if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {
+ this.resetStartLocationFromNode(expr, typeParameters);
+ }
+
+ expr.typeParameters = typeParameters;
+ return expr;
+ }, state);
+ if (!arrow.error && !arrow.aborted) return arrow.node;
+
+ if (!jsx) {
+ assert(!this.hasPlugin("jsx"));
+ typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);
+ if (!typeCast.error) return typeCast.node;
+ }
+
+ if ((_jsx2 = jsx) != null && _jsx2.node) {
+ this.state = jsx.failState;
+ return jsx.node;
+ }
+
+ if (arrow.node) {
+ this.state = arrow.failState;
+ return arrow.node;
+ }
+
+ if ((_typeCast = typeCast) != null && _typeCast.node) {
+ this.state = typeCast.failState;
+ return typeCast.node;
+ }
+
+ if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;
+ if (arrow.thrown) throw arrow.error;
+ if ((_typeCast2 = typeCast) != null && _typeCast2.thrown) throw typeCast.error;
+ throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error);
+ }
+
+ parseMaybeUnary(refExpressionErrors) {
+ if (!this.hasPlugin("jsx") && this.isRelational("<")) {
+ return this.tsParseTypeAssertion();
+ } else {
+ return super.parseMaybeUnary(refExpressionErrors);
+ }
+ }
+
+ parseArrow(node) {
+ if (this.match(22)) {
+ const result = this.tryParse(abort => {
+ const returnType = this.tsParseTypeOrTypePredicateAnnotation(22);
+ if (this.canInsertSemicolon() || !this.match(27)) abort();
+ return returnType;
+ });
+ if (result.aborted) return;
+
+ if (!result.thrown) {
+ if (result.error) this.state = result.failState;
+ node.returnType = result.node;
+ }
+ }
+
+ return super.parseArrow(node);
+ }
+
+ parseAssignableListItemTypes(param) {
+ if (this.eat(25)) {
+ if (param.type !== "Identifier" && !this.state.isAmbientContext && !this.state.inType) {
+ this.raise(param.start, TSErrors.PatternIsOptional);
+ }
+
+ param.optional = true;
+ }
+
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) param.typeAnnotation = type;
+ this.resetEndLocation(param);
+ return param;
+ }
+
+ isAssignable(node, isBinding) {
+ switch (node.type) {
+ case "TSTypeCastExpression":
+ return this.isAssignable(node.expression, isBinding);
+
+ case "TSParameterProperty":
+ return true;
+
+ default:
+ return super.isAssignable(node, isBinding);
+ }
+ }
+
+ toAssignable(node, isLHS = false) {
+ switch (node.type) {
+ case "TSTypeCastExpression":
+ return super.toAssignable(this.typeCastToParameter(node), isLHS);
+
+ case "TSParameterProperty":
+ return super.toAssignable(node, isLHS);
+
+ case "ParenthesizedExpression":
+ return this.toAssignableParenthesizedExpression(node, isLHS);
+
+ case "TSAsExpression":
+ case "TSNonNullExpression":
+ case "TSTypeAssertion":
+ node.expression = this.toAssignable(node.expression, isLHS);
+ return node;
+
+ default:
+ return super.toAssignable(node, isLHS);
+ }
+ }
+
+ toAssignableParenthesizedExpression(node, isLHS) {
+ switch (node.expression.type) {
+ case "TSAsExpression":
+ case "TSNonNullExpression":
+ case "TSTypeAssertion":
+ case "ParenthesizedExpression":
+ node.expression = this.toAssignable(node.expression, isLHS);
+ return node;
+
+ default:
+ return super.toAssignable(node, isLHS);
+ }
+ }
+
+ checkLVal(expr, contextDescription, ...args) {
+ var _expr$extra2;
+
+ switch (expr.type) {
+ case "TSTypeCastExpression":
+ return;
+
+ case "TSParameterProperty":
+ this.checkLVal(expr.parameter, "parameter property", ...args);
+ return;
+
+ case "TSAsExpression":
+ case "TSTypeAssertion":
+ if (!args[0] && contextDescription !== "parenthesized expression" && !((_expr$extra2 = expr.extra) != null && _expr$extra2.parenthesized)) {
+ this.raise(expr.start, ErrorMessages.InvalidLhs, contextDescription);
+ break;
+ }
+
+ this.checkLVal(expr.expression, "parenthesized expression", ...args);
+ return;
+
+ case "TSNonNullExpression":
+ this.checkLVal(expr.expression, contextDescription, ...args);
+ return;
+
+ default:
+ super.checkLVal(expr, contextDescription, ...args);
+ return;
+ }
+ }
+
+ parseBindingAtom() {
+ switch (this.state.type) {
+ case 77:
+ return this.parseIdentifier(true);
+
+ default:
+ return super.parseBindingAtom();
+ }
+ }
+
+ parseMaybeDecoratorArguments(expr) {
+ if (this.isRelational("<")) {
+ const typeArguments = this.tsParseTypeArguments();
+
+ if (this.match(18)) {
+ const call = super.parseMaybeDecoratorArguments(expr);
+ call.typeParameters = typeArguments;
+ return call;
+ }
+
+ this.unexpected(this.state.start, 18);
+ }
+
+ return super.parseMaybeDecoratorArguments(expr);
+ }
+
+ checkCommaAfterRest(close) {
+ if (this.state.isAmbientContext && this.match(20) && this.lookaheadCharCode() === close) {
+ this.next();
+ } else {
+ super.checkCommaAfterRest(close);
+ }
+ }
+
+ isClassMethod() {
+ return this.isRelational("<") || super.isClassMethod();
+ }
+
+ isClassProperty() {
+ return this.match(40) || this.match(22) || super.isClassProperty();
+ }
+
+ parseMaybeDefault(...args) {
+ const node = super.parseMaybeDefault(...args);
+
+ if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {
+ this.raise(node.typeAnnotation.start, TSErrors.TypeAnnotationAfterAssign);
+ }
+
+ return node;
+ }
+
+ getTokenFromCode(code) {
+ if (this.state.inType && (code === 62 || code === 60)) {
+ return this.finishOp(50, 1);
+ } else {
+ return super.getTokenFromCode(code);
+ }
+ }
+
+ reScan_lt_gt() {
+ if (this.match(50)) {
+ const code = this.input.charCodeAt(this.state.start);
+
+ if (code === 60 || code === 62) {
+ this.state.pos -= 1;
+ this.readToken_lt_gt(code);
+ }
+ }
+ }
+
+ toAssignableList(exprList) {
+ for (let i = 0; i < exprList.length; i++) {
+ const expr = exprList[i];
+ if (!expr) continue;
+
+ switch (expr.type) {
+ case "TSTypeCastExpression":
+ exprList[i] = this.typeCastToParameter(expr);
+ break;
+
+ case "TSAsExpression":
+ case "TSTypeAssertion":
+ if (!this.state.maybeInArrowParameters) {
+ exprList[i] = this.typeCastToParameter(expr);
+ } else {
+ this.raise(expr.start, TSErrors.UnexpectedTypeCastInParameter);
+ }
+
+ break;
+ }
+ }
+
+ return super.toAssignableList(...arguments);
+ }
+
+ typeCastToParameter(node) {
+ node.expression.typeAnnotation = node.typeAnnotation;
+ this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);
+ return node.expression;
+ }
+
+ shouldParseArrow(params) {
+ if (this.match(22)) {
+ return params.every(expr => this.isAssignable(expr, true));
+ }
+
+ return super.shouldParseArrow(params);
+ }
+
+ shouldParseAsyncArrow() {
+ return this.match(22) || super.shouldParseAsyncArrow();
+ }
+
+ canHaveLeadingDecorator() {
+ return super.canHaveLeadingDecorator() || this.isAbstractClass();
+ }
+
+ jsxParseOpeningElementAfterName(node) {
+ if (this.isRelational("<")) {
+ const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArguments());
+ if (typeArguments) node.typeParameters = typeArguments;
+ }
+
+ return super.jsxParseOpeningElementAfterName(node);
+ }
+
+ getGetterSetterExpectedParamCount(method) {
+ const baseCount = super.getGetterSetterExpectedParamCount(method);
+ const params = this.getObjectOrClassMethodParams(method);
+ const firstParam = params[0];
+ const hasContextParam = firstParam && this.isThisParam(firstParam);
+ return hasContextParam ? baseCount + 1 : baseCount;
+ }
+
+ parseCatchClauseParam() {
+ const param = super.parseCatchClauseParam();
+ const type = this.tsTryParseTypeAnnotation();
+
+ if (type) {
+ param.typeAnnotation = type;
+ this.resetEndLocation(param);
+ }
+
+ return param;
+ }
+
+ tsInAmbientContext(cb) {
+ const oldIsAmbientContext = this.state.isAmbientContext;
+ this.state.isAmbientContext = true;
+
+ try {
+ return cb();
+ } finally {
+ this.state.isAmbientContext = oldIsAmbientContext;
+ }
+ }
+
+ parseClass(node, ...args) {
+ const oldInAbstractClass = this.state.inAbstractClass;
+ this.state.inAbstractClass = !!node.abstract;
+
+ try {
+ return super.parseClass(node, ...args);
+ } finally {
+ this.state.inAbstractClass = oldInAbstractClass;
+ }
+ }
+
+ tsParseAbstractDeclaration(node) {
+ if (this.match(79)) {
+ node.abstract = true;
+ return this.parseClass(node, true, false);
+ } else if (this.isContextual("interface")) {
+ if (!this.hasFollowingLineBreak()) {
+ node.abstract = true;
+ this.raise(node.start, TSErrors.NonClassMethodPropertyHasAbstractModifer);
+ this.next();
+ return this.tsParseInterfaceDeclaration(node);
+ }
+ } else {
+ this.unexpected(null, 79);
+ }
+ }
+
+ parseMethod(...args) {
+ const method = super.parseMethod(...args);
+
+ if (method.abstract) {
+ const hasBody = this.hasPlugin("estree") ? !!method.value.body : !!method.body;
+
+ if (hasBody) {
+ const {
+ key
+ } = method;
+ this.raise(method.start, TSErrors.AbstractMethodHasImplementation, key.type === "Identifier" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`);
+ }
+ }
+
+ return method;
+ }
+
+ tsParseTypeParameterName() {
+ const typeName = this.parseIdentifier();
+ return typeName.name;
+ }
+
+ shouldParseAsAmbientContext() {
+ return !!this.getPluginOption("typescript", "dts");
+ }
+
+ parse() {
+ if (this.shouldParseAsAmbientContext()) {
+ this.state.isAmbientContext = true;
+ }
+
+ return super.parse();
+ }
+
+ getExpression() {
+ if (this.shouldParseAsAmbientContext()) {
+ this.state.isAmbientContext = true;
+ }
+
+ return super.getExpression();
+ }
+
+});
+
+const PlaceHolderErrors = makeErrorTemplates({
+ ClassNameIsRequired: "A class name is required."
+}, ErrorCodes.SyntaxError);
+var placeholders = (superClass => class extends superClass {
+ parsePlaceholder(expectedNode) {
+ if (this.match(96)) {
+ const node = this.startNode();
+ this.next();
+ this.assertNoSpace("Unexpected space in placeholder.");
+ node.name = super.parseIdentifier(true);
+ this.assertNoSpace("Unexpected space in placeholder.");
+ this.expect(96);
+ return this.finishPlaceholder(node, expectedNode);
+ }
+ }
+
+ finishPlaceholder(node, expectedNode) {
+ const isFinished = !!(node.expectedNode && node.type === "Placeholder");
+ node.expectedNode = expectedNode;
+ return isFinished ? node : this.finishNode(node, "Placeholder");
+ }
+
+ getTokenFromCode(code) {
+ if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {
+ return this.finishOp(96, 2);
+ }
+
+ return super.getTokenFromCode(...arguments);
+ }
+
+ parseExprAtom() {
+ return this.parsePlaceholder("Expression") || super.parseExprAtom(...arguments);
+ }
+
+ parseIdentifier() {
+ return this.parsePlaceholder("Identifier") || super.parseIdentifier(...arguments);
+ }
+
+ checkReservedWord(word) {
+ if (word !== undefined) super.checkReservedWord(...arguments);
+ }
+
+ parseBindingAtom() {
+ return this.parsePlaceholder("Pattern") || super.parseBindingAtom(...arguments);
+ }
+
+ checkLVal(expr) {
+ if (expr.type !== "Placeholder") super.checkLVal(...arguments);
+ }
+
+ toAssignable(node) {
+ if (node && node.type === "Placeholder" && node.expectedNode === "Expression") {
+ node.expectedNode = "Pattern";
+ return node;
+ }
+
+ return super.toAssignable(...arguments);
+ }
+
+ isLet(context) {
+ if (super.isLet(context)) {
+ return true;
+ }
+
+ if (!this.isContextual("let")) {
+ return false;
+ }
+
+ if (context) return false;
+ const nextToken = this.lookahead();
+
+ if (nextToken.type === 96) {
+ return true;
+ }
+
+ return false;
+ }
+
+ verifyBreakContinue(node) {
+ if (node.label && node.label.type === "Placeholder") return;
+ super.verifyBreakContinue(...arguments);
+ }
+
+ parseExpressionStatement(node, expr) {
+ if (expr.type !== "Placeholder" || expr.extra && expr.extra.parenthesized) {
+ return super.parseExpressionStatement(...arguments);
+ }
+
+ if (this.match(22)) {
+ const stmt = node;
+ stmt.label = this.finishPlaceholder(expr, "Identifier");
+ this.next();
+ stmt.body = this.parseStatement("label");
+ return this.finishNode(stmt, "LabeledStatement");
+ }
+
+ this.semicolon();
+ node.name = expr.name;
+ return this.finishPlaceholder(node, "Statement");
+ }
+
+ parseBlock() {
+ return this.parsePlaceholder("BlockStatement") || super.parseBlock(...arguments);
+ }
+
+ parseFunctionId() {
+ return this.parsePlaceholder("Identifier") || super.parseFunctionId(...arguments);
+ }
+
+ parseClass(node, isStatement, optionalId) {
+ const type = isStatement ? "ClassDeclaration" : "ClassExpression";
+ this.next();
+ this.takeDecorators(node);
+ const oldStrict = this.state.strict;
+ const placeholder = this.parsePlaceholder("Identifier");
+
+ if (placeholder) {
+ if (this.match(80) || this.match(96) || this.match(13)) {
+ node.id = placeholder;
+ } else if (optionalId || !isStatement) {
+ node.id = null;
+ node.body = this.finishPlaceholder(placeholder, "ClassBody");
+ return this.finishNode(node, type);
+ } else {
+ this.unexpected(null, PlaceHolderErrors.ClassNameIsRequired);
+ }
+ } else {
+ this.parseClassId(node, isStatement, optionalId);
+ }
+
+ this.parseClassSuper(node);
+ node.body = this.parsePlaceholder("ClassBody") || this.parseClassBody(!!node.superClass, oldStrict);
+ return this.finishNode(node, type);
+ }
+
+ parseExport(node) {
+ const placeholder = this.parsePlaceholder("Identifier");
+ if (!placeholder) return super.parseExport(...arguments);
+
+ if (!this.isContextual("from") && !this.match(20)) {
+ node.specifiers = [];
+ node.source = null;
+ node.declaration = this.finishPlaceholder(placeholder, "Declaration");
+ return this.finishNode(node, "ExportNamedDeclaration");
+ }
+
+ this.expectPlugin("exportDefaultFrom");
+ const specifier = this.startNode();
+ specifier.exported = placeholder;
+ node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
+ return super.parseExport(node);
+ }
+
+ isExportDefaultSpecifier() {
+ if (this.match(64)) {
+ const next = this.nextTokenStart();
+
+ if (this.isUnparsedContextual(next, "from")) {
+ if (this.input.startsWith(tokenLabelName(96), this.nextTokenStartSince(next + 4))) {
+ return true;
+ }
+ }
+ }
+
+ return super.isExportDefaultSpecifier();
+ }
+
+ maybeParseExportDefaultSpecifier(node) {
+ if (node.specifiers && node.specifiers.length > 0) {
+ return true;
+ }
+
+ return super.maybeParseExportDefaultSpecifier(...arguments);
+ }
+
+ checkExport(node) {
+ const {
+ specifiers
+ } = node;
+
+ if (specifiers != null && specifiers.length) {
+ node.specifiers = specifiers.filter(node => node.exported.type === "Placeholder");
+ }
+
+ super.checkExport(node);
+ node.specifiers = specifiers;
+ }
+
+ parseImport(node) {
+ const placeholder = this.parsePlaceholder("Identifier");
+ if (!placeholder) return super.parseImport(...arguments);
+ node.specifiers = [];
+
+ if (!this.isContextual("from") && !this.match(20)) {
+ node.source = this.finishPlaceholder(placeholder, "StringLiteral");
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+ }
+
+ const specifier = this.startNodeAtNode(placeholder);
+ specifier.local = placeholder;
+ this.finishNode(specifier, "ImportDefaultSpecifier");
+ node.specifiers.push(specifier);
+
+ if (this.eat(20)) {
+ const hasStarImport = this.maybeParseStarImportSpecifier(node);
+ if (!hasStarImport) this.parseNamedImportSpecifiers(node);
+ }
+
+ this.expectContextual("from");
+ node.source = this.parseImportSource();
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+ }
+
+ parseImportSource() {
+ return this.parsePlaceholder("StringLiteral") || super.parseImportSource(...arguments);
+ }
+
+});
+
+var v8intrinsic = (superClass => class extends superClass {
+ parseV8Intrinsic() {
+ if (this.match(53)) {
+ const v8IntrinsicStart = this.state.start;
+ const node = this.startNode();
+ this.eat(53);
+
+ if (this.match(5)) {
+ const name = this.parseIdentifierName(this.state.start);
+ const identifier = this.createIdentifier(node, name);
+ identifier.type = "V8IntrinsicIdentifier";
+
+ if (this.match(18)) {
+ return identifier;
+ }
+ }
+
+ this.unexpected(v8IntrinsicStart);
+ }
+ }
+
+ parseExprAtom() {
+ return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);
+ }
+
+});
+
+function hasPlugin(plugins, name) {
+ return plugins.some(plugin => {
+ if (Array.isArray(plugin)) {
+ return plugin[0] === name;
+ } else {
+ return plugin === name;
+ }
+ });
+}
+function getPluginOption(plugins, name, option) {
+ const plugin = plugins.find(plugin => {
+ if (Array.isArray(plugin)) {
+ return plugin[0] === name;
+ } else {
+ return plugin === name;
+ }
+ });
+
+ if (plugin && Array.isArray(plugin)) {
+ return plugin[1][option];
+ }
+
+ return null;
+}
+const PIPELINE_PROPOSALS = ["minimal", "fsharp", "hack", "smart"];
+const TOPIC_TOKENS = ["%", "#"];
+const RECORD_AND_TUPLE_SYNTAX_TYPES = ["hash", "bar"];
+function validatePlugins(plugins) {
+ if (hasPlugin(plugins, "decorators")) {
+ if (hasPlugin(plugins, "decorators-legacy")) {
+ throw new Error("Cannot use the decorators and decorators-legacy plugin together");
+ }
+
+ const decoratorsBeforeExport = getPluginOption(plugins, "decorators", "decoratorsBeforeExport");
+
+ if (decoratorsBeforeExport == null) {
+ throw new Error("The 'decorators' plugin requires a 'decoratorsBeforeExport' option," + " whose value must be a boolean. If you are migrating from" + " Babylon/Babel 6 or want to use the old decorators proposal, you" + " should use the 'decorators-legacy' plugin instead of 'decorators'.");
+ } else if (typeof decoratorsBeforeExport !== "boolean") {
+ throw new Error("'decoratorsBeforeExport' must be a boolean.");
+ }
+ }
+
+ if (hasPlugin(plugins, "flow") && hasPlugin(plugins, "typescript")) {
+ throw new Error("Cannot combine flow and typescript plugins.");
+ }
+
+ if (hasPlugin(plugins, "placeholders") && hasPlugin(plugins, "v8intrinsic")) {
+ throw new Error("Cannot combine placeholders and v8intrinsic plugins.");
+ }
+
+ if (hasPlugin(plugins, "pipelineOperator")) {
+ const proposal = getPluginOption(plugins, "pipelineOperator", "proposal");
+
+ if (!PIPELINE_PROPOSALS.includes(proposal)) {
+ const proposalList = PIPELINE_PROPOSALS.map(p => `"${p}"`).join(", ");
+ throw new Error(`"pipelineOperator" requires "proposal" option whose value must be one of: ${proposalList}.`);
+ }
+
+ const tupleSyntaxIsHash = hasPlugin(plugins, "recordAndTuple") && getPluginOption(plugins, "recordAndTuple", "syntaxType") === "hash";
+
+ if (proposal === "hack") {
+ if (hasPlugin(plugins, "placeholders")) {
+ throw new Error("Cannot combine placeholders plugin and Hack-style pipes.");
+ }
+
+ if (hasPlugin(plugins, "v8intrinsic")) {
+ throw new Error("Cannot combine v8intrinsic plugin and Hack-style pipes.");
+ }
+
+ const topicToken = getPluginOption(plugins, "pipelineOperator", "topicToken");
+
+ if (!TOPIC_TOKENS.includes(topicToken)) {
+ const tokenList = TOPIC_TOKENS.map(t => `"${t}"`).join(", ");
+ throw new Error(`"pipelineOperator" in "proposal": "hack" mode also requires a "topicToken" option whose value must be one of: ${tokenList}.`);
+ }
+
+ if (topicToken === "#" && tupleSyntaxIsHash) {
+ throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "hack", topicToken: "#" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
+ }
+ } else if (proposal === "smart" && tupleSyntaxIsHash) {
+ throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "smart" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
+ }
+ }
+
+ if (hasPlugin(plugins, "moduleAttributes")) {
+ {
+ if (hasPlugin(plugins, "importAssertions")) {
+ throw new Error("Cannot combine importAssertions and moduleAttributes plugins.");
+ }
+
+ const moduleAttributesVerionPluginOption = getPluginOption(plugins, "moduleAttributes", "version");
+
+ if (moduleAttributesVerionPluginOption !== "may-2020") {
+ throw new Error("The 'moduleAttributes' plugin requires a 'version' option," + " representing the last proposal update. Currently, the" + " only supported value is 'may-2020'.");
+ }
+ }
+ }
+
+ if (hasPlugin(plugins, "recordAndTuple") && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, "recordAndTuple", "syntaxType"))) {
+ throw new Error("'recordAndTuple' requires 'syntaxType' option whose value should be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", "));
+ }
+
+ if (hasPlugin(plugins, "asyncDoExpressions") && !hasPlugin(plugins, "doExpressions")) {
+ const error = new Error("'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.");
+ error.missingPlugins = "doExpressions";
+ throw error;
+ }
+}
+const mixinPlugins = {
+ estree,
+ jsx,
+ flow,
+ typescript,
+ v8intrinsic,
+ placeholders
+};
+const mixinPluginNames = Object.keys(mixinPlugins);
+
+const defaultOptions = {
+ sourceType: "script",
+ sourceFilename: undefined,
+ startLine: 1,
+ allowAwaitOutsideFunction: false,
+ allowReturnOutsideFunction: false,
+ allowImportExportEverywhere: false,
+ allowSuperOutsideMethod: false,
+ allowUndeclaredExports: false,
+ plugins: [],
+ strictMode: null,
+ ranges: false,
+ tokens: false,
+ createParenthesizedExpressions: false,
+ errorRecovery: false,
+ attachComment: true
+};
+function getOptions(opts) {
+ const options = {};
+
+ for (const key of Object.keys(defaultOptions)) {
+ options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];
+ }
+
+ return options;
+}
+
+const unwrapParenthesizedExpression = node => {
+ return node.type === "ParenthesizedExpression" ? unwrapParenthesizedExpression(node.expression) : node;
+};
+
+class LValParser extends NodeUtils {
+ toAssignable(node, isLHS = false) {
+ var _node$extra, _node$extra3;
+
+ let parenthesized = undefined;
+
+ if (node.type === "ParenthesizedExpression" || (_node$extra = node.extra) != null && _node$extra.parenthesized) {
+ parenthesized = unwrapParenthesizedExpression(node);
+
+ if (isLHS) {
+ if (parenthesized.type === "Identifier") {
+ this.expressionScope.recordParenthesizedIdentifierError(node.start, ErrorMessages.InvalidParenthesizedAssignment);
+ } else if (parenthesized.type !== "MemberExpression") {
+ this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);
+ }
+ } else {
+ this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);
+ }
+ }
+
+ switch (node.type) {
+ case "Identifier":
+ case "ObjectPattern":
+ case "ArrayPattern":
+ case "AssignmentPattern":
+ case "RestElement":
+ break;
+
+ case "ObjectExpression":
+ node.type = "ObjectPattern";
+
+ for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {
+ var _node$extra2;
+
+ const prop = node.properties[i];
+ const isLast = i === last;
+ this.toAssignableObjectExpressionProp(prop, isLast, isLHS);
+
+ if (isLast && prop.type === "RestElement" && (_node$extra2 = node.extra) != null && _node$extra2.trailingComma) {
+ this.raiseRestNotLast(node.extra.trailingComma);
+ }
+ }
+
+ break;
+
+ case "ObjectProperty":
+ this.toAssignable(node.value, isLHS);
+ break;
+
+ case "SpreadElement":
+ {
+ this.checkToRestConversion(node);
+ node.type = "RestElement";
+ const arg = node.argument;
+ this.toAssignable(arg, isLHS);
+ break;
+ }
+
+ case "ArrayExpression":
+ node.type = "ArrayPattern";
+ this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingComma, isLHS);
+ break;
+
+ case "AssignmentExpression":
+ if (node.operator !== "=") {
+ this.raise(node.left.end, ErrorMessages.MissingEqInAssignment);
+ }
+
+ node.type = "AssignmentPattern";
+ delete node.operator;
+ this.toAssignable(node.left, isLHS);
+ break;
+
+ case "ParenthesizedExpression":
+ this.toAssignable(parenthesized, isLHS);
+ break;
+ }
+
+ return node;
+ }
+
+ toAssignableObjectExpressionProp(prop, isLast, isLHS) {
+ if (prop.type === "ObjectMethod") {
+ const error = prop.kind === "get" || prop.kind === "set" ? ErrorMessages.PatternHasAccessor : ErrorMessages.PatternHasMethod;
+ this.raise(prop.key.start, error);
+ } else if (prop.type === "SpreadElement" && !isLast) {
+ this.raiseRestNotLast(prop.start);
+ } else {
+ this.toAssignable(prop, isLHS);
+ }
+ }
+
+ toAssignableList(exprList, trailingCommaPos, isLHS) {
+ let end = exprList.length;
+
+ if (end) {
+ const last = exprList[end - 1];
+
+ if ((last == null ? void 0 : last.type) === "RestElement") {
+ --end;
+ } else if ((last == null ? void 0 : last.type) === "SpreadElement") {
+ last.type = "RestElement";
+ let arg = last.argument;
+ this.toAssignable(arg, isLHS);
+ arg = unwrapParenthesizedExpression(arg);
+
+ if (arg.type !== "Identifier" && arg.type !== "MemberExpression" && arg.type !== "ArrayPattern" && arg.type !== "ObjectPattern") {
+ this.unexpected(arg.start);
+ }
+
+ if (trailingCommaPos) {
+ this.raiseTrailingCommaAfterRest(trailingCommaPos);
+ }
+
+ --end;
+ }
+ }
+
+ for (let i = 0; i < end; i++) {
+ const elt = exprList[i];
+
+ if (elt) {
+ this.toAssignable(elt, isLHS);
+
+ if (elt.type === "RestElement") {
+ this.raiseRestNotLast(elt.start);
+ }
+ }
+ }
+
+ return exprList;
+ }
+
+ isAssignable(node, isBinding) {
+ switch (node.type) {
+ case "Identifier":
+ case "ObjectPattern":
+ case "ArrayPattern":
+ case "AssignmentPattern":
+ case "RestElement":
+ return true;
+
+ case "ObjectExpression":
+ {
+ const last = node.properties.length - 1;
+ return node.properties.every((prop, i) => {
+ return prop.type !== "ObjectMethod" && (i === last || prop.type !== "SpreadElement") && this.isAssignable(prop);
+ });
+ }
+
+ case "ObjectProperty":
+ return this.isAssignable(node.value);
+
+ case "SpreadElement":
+ return this.isAssignable(node.argument);
+
+ case "ArrayExpression":
+ return node.elements.every(element => element === null || this.isAssignable(element));
+
+ case "AssignmentExpression":
+ return node.operator === "=";
+
+ case "ParenthesizedExpression":
+ return this.isAssignable(node.expression);
+
+ case "MemberExpression":
+ case "OptionalMemberExpression":
+ return !isBinding;
+
+ default:
+ return false;
+ }
+ }
+
+ toReferencedList(exprList, isParenthesizedExpr) {
+ return exprList;
+ }
+
+ toReferencedListDeep(exprList, isParenthesizedExpr) {
+ this.toReferencedList(exprList, isParenthesizedExpr);
+
+ for (const expr of exprList) {
+ if ((expr == null ? void 0 : expr.type) === "ArrayExpression") {
+ this.toReferencedListDeep(expr.elements);
+ }
+ }
+ }
+
+ parseSpread(refExpressionErrors, refNeedsArrowPos) {
+ const node = this.startNode();
+ this.next();
+ node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined, refNeedsArrowPos);
+ return this.finishNode(node, "SpreadElement");
+ }
+
+ parseRestBinding() {
+ const node = this.startNode();
+ this.next();
+ node.argument = this.parseBindingAtom();
+ return this.finishNode(node, "RestElement");
+ }
+
+ parseBindingAtom() {
+ switch (this.state.type) {
+ case 8:
+ {
+ const node = this.startNode();
+ this.next();
+ node.elements = this.parseBindingList(11, 93, true);
+ return this.finishNode(node, "ArrayPattern");
+ }
+
+ case 13:
+ return this.parseObjectLike(16, true);
+ }
+
+ return this.parseIdentifier();
+ }
+
+ parseBindingList(close, closeCharCode, allowEmpty, allowModifiers) {
+ const elts = [];
+ let first = true;
+
+ while (!this.eat(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(20);
+ }
+
+ if (allowEmpty && this.match(20)) {
+ elts.push(null);
+ } else if (this.eat(close)) {
+ break;
+ } else if (this.match(29)) {
+ elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));
+ this.checkCommaAfterRest(closeCharCode);
+ this.expect(close);
+ break;
+ } else {
+ const decorators = [];
+
+ if (this.match(32) && this.hasPlugin("decorators")) {
+ this.raise(this.state.start, ErrorMessages.UnsupportedParameterDecorator);
+ }
+
+ while (this.match(32)) {
+ decorators.push(this.parseDecorator());
+ }
+
+ elts.push(this.parseAssignableListItem(allowModifiers, decorators));
+ }
+ }
+
+ return elts;
+ }
+
+ parseAssignableListItem(allowModifiers, decorators) {
+ const left = this.parseMaybeDefault();
+ this.parseAssignableListItemTypes(left);
+ const elt = this.parseMaybeDefault(left.start, left.loc.start, left);
+
+ if (decorators.length) {
+ left.decorators = decorators;
+ }
+
+ return elt;
+ }
+
+ parseAssignableListItemTypes(param) {
+ return param;
+ }
+
+ parseMaybeDefault(startPos, startLoc, left) {
+ var _startLoc, _startPos, _left;
+
+ startLoc = (_startLoc = startLoc) != null ? _startLoc : this.state.startLoc;
+ startPos = (_startPos = startPos) != null ? _startPos : this.state.start;
+ left = (_left = left) != null ? _left : this.parseBindingAtom();
+ if (!this.eat(35)) return left;
+ const node = this.startNodeAt(startPos, startLoc);
+ node.left = left;
+ node.right = this.parseMaybeAssignAllowIn();
+ return this.finishNode(node, "AssignmentPattern");
+ }
+
+ checkLVal(expr, contextDescription, bindingType = BIND_NONE, checkClashes, disallowLetBinding, strictModeChanged = false) {
+ switch (expr.type) {
+ case "Identifier":
+ {
+ const {
+ name
+ } = expr;
+
+ if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(name, this.inModule) : isStrictBindOnlyReservedWord(name))) {
+ this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.StrictEvalArguments : ErrorMessages.StrictEvalArgumentsBinding, name);
+ }
+
+ if (checkClashes) {
+ if (checkClashes.has(name)) {
+ this.raise(expr.start, ErrorMessages.ParamDupe);
+ } else {
+ checkClashes.add(name);
+ }
+ }
+
+ if (disallowLetBinding && name === "let") {
+ this.raise(expr.start, ErrorMessages.LetInLexicalBinding);
+ }
+
+ if (!(bindingType & BIND_NONE)) {
+ this.scope.declareName(name, bindingType, expr.start);
+ }
+
+ break;
+ }
+
+ case "MemberExpression":
+ if (bindingType !== BIND_NONE) {
+ this.raise(expr.start, ErrorMessages.InvalidPropertyBindingPattern);
+ }
+
+ break;
+
+ case "ObjectPattern":
+ for (let prop of expr.properties) {
+ if (this.isObjectProperty(prop)) prop = prop.value;else if (this.isObjectMethod(prop)) continue;
+ this.checkLVal(prop, "object destructuring pattern", bindingType, checkClashes, disallowLetBinding);
+ }
+
+ break;
+
+ case "ArrayPattern":
+ for (const elem of expr.elements) {
+ if (elem) {
+ this.checkLVal(elem, "array destructuring pattern", bindingType, checkClashes, disallowLetBinding);
+ }
+ }
+
+ break;
+
+ case "AssignmentPattern":
+ this.checkLVal(expr.left, "assignment pattern", bindingType, checkClashes);
+ break;
+
+ case "RestElement":
+ this.checkLVal(expr.argument, "rest element", bindingType, checkClashes);
+ break;
+
+ case "ParenthesizedExpression":
+ this.checkLVal(expr.expression, "parenthesized expression", bindingType, checkClashes);
+ break;
+
+ default:
+ {
+ this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.InvalidLhs : ErrorMessages.InvalidLhsBinding, contextDescription);
+ }
+ }
+ }
+
+ checkToRestConversion(node) {
+ if (node.argument.type !== "Identifier" && node.argument.type !== "MemberExpression") {
+ this.raise(node.argument.start, ErrorMessages.InvalidRestAssignmentPattern);
+ }
+ }
+
+ checkCommaAfterRest(close) {
+ if (this.match(20)) {
+ if (this.lookaheadCharCode() === close) {
+ this.raiseTrailingCommaAfterRest(this.state.start);
+ } else {
+ this.raiseRestNotLast(this.state.start);
+ }
+ }
+ }
+
+ raiseRestNotLast(pos) {
+ throw this.raise(pos, ErrorMessages.ElementAfterRest);
+ }
+
+ raiseTrailingCommaAfterRest(pos) {
+ this.raise(pos, ErrorMessages.RestTrailingComma);
+ }
+
+}
+
+const invalidHackPipeBodies = new Map([["ArrowFunctionExpression", "arrow function"], ["AssignmentExpression", "assignment"], ["ConditionalExpression", "conditional"], ["YieldExpression", "yield"]]);
+class ExpressionParser extends LValParser {
+ checkProto(prop, isRecord, protoRef, refExpressionErrors) {
+ if (prop.type === "SpreadElement" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) {
+ return;
+ }
+
+ const key = prop.key;
+ const name = key.type === "Identifier" ? key.name : key.value;
+
+ if (name === "__proto__") {
+ if (isRecord) {
+ this.raise(key.start, ErrorMessages.RecordNoProto);
+ return;
+ }
+
+ if (protoRef.used) {
+ if (refExpressionErrors) {
+ if (refExpressionErrors.doubleProto === -1) {
+ refExpressionErrors.doubleProto = key.start;
+ }
+ } else {
+ this.raise(key.start, ErrorMessages.DuplicateProto);
+ }
+ }
+
+ protoRef.used = true;
+ }
+ }
+
+ shouldExitDescending(expr, potentialArrowAt) {
+ return expr.type === "ArrowFunctionExpression" && expr.start === potentialArrowAt;
+ }
+
+ getExpression() {
+ this.enterInitialScopes();
+ this.nextToken();
+ const expr = this.parseExpression();
+
+ if (!this.match(7)) {
+ this.unexpected();
+ }
+
+ this.finalizeRemainingComments();
+ expr.comments = this.state.comments;
+ expr.errors = this.state.errors;
+
+ if (this.options.tokens) {
+ expr.tokens = this.tokens;
+ }
+
+ return expr;
+ }
+
+ parseExpression(disallowIn, refExpressionErrors) {
+ if (disallowIn) {
+ return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));
+ }
+
+ return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));
+ }
+
+ parseExpressionBase(refExpressionErrors) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const expr = this.parseMaybeAssign(refExpressionErrors);
+
+ if (this.match(20)) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.expressions = [expr];
+
+ while (this.eat(20)) {
+ node.expressions.push(this.parseMaybeAssign(refExpressionErrors));
+ }
+
+ this.toReferencedList(node.expressions);
+ return this.finishNode(node, "SequenceExpression");
+ }
+
+ return expr;
+ }
+
+ parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {
+ return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
+ }
+
+ parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {
+ return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
+ }
+
+ setOptionalParametersError(refExpressionErrors, resultError) {
+ var _resultError$pos;
+
+ refExpressionErrors.optionalParameters = (_resultError$pos = resultError == null ? void 0 : resultError.pos) != null ? _resultError$pos : this.state.start;
+ }
+
+ parseMaybeAssign(refExpressionErrors, afterLeftParse) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+
+ if (this.isContextual("yield")) {
+ if (this.prodParam.hasYield) {
+ let left = this.parseYield();
+
+ if (afterLeftParse) {
+ left = afterLeftParse.call(this, left, startPos, startLoc);
+ }
+
+ return left;
+ }
+ }
+
+ let ownExpressionErrors;
+
+ if (refExpressionErrors) {
+ ownExpressionErrors = false;
+ } else {
+ refExpressionErrors = new ExpressionErrors();
+ ownExpressionErrors = true;
+ }
+
+ if (this.match(18) || this.match(5)) {
+ this.state.potentialArrowAt = this.state.start;
+ }
+
+ let left = this.parseMaybeConditional(refExpressionErrors);
+
+ if (afterLeftParse) {
+ left = afterLeftParse.call(this, left, startPos, startLoc);
+ }
+
+ if (tokenIsAssignment(this.state.type)) {
+ const node = this.startNodeAt(startPos, startLoc);
+ const operator = this.state.value;
+ node.operator = operator;
+
+ if (this.match(35)) {
+ node.left = this.toAssignable(left, true);
+ refExpressionErrors.doubleProto = -1;
+ } else {
+ node.left = left;
+ }
+
+ if (refExpressionErrors.shorthandAssign >= node.left.start) {
+ refExpressionErrors.shorthandAssign = -1;
+ }
+
+ this.checkLVal(left, "assignment expression");
+ this.next();
+ node.right = this.parseMaybeAssign();
+ return this.finishNode(node, "AssignmentExpression");
+ } else if (ownExpressionErrors) {
+ this.checkExpressionErrors(refExpressionErrors, true);
+ }
+
+ return left;
+ }
+
+ parseMaybeConditional(refExpressionErrors) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const potentialArrowAt = this.state.potentialArrowAt;
+ const expr = this.parseExprOps(refExpressionErrors);
+
+ if (this.shouldExitDescending(expr, potentialArrowAt)) {
+ return expr;
+ }
+
+ return this.parseConditional(expr, startPos, startLoc, refExpressionErrors);
+ }
+
+ parseConditional(expr, startPos, startLoc, refExpressionErrors) {
+ if (this.eat(25)) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.test = expr;
+ node.consequent = this.parseMaybeAssignAllowIn();
+ this.expect(22);
+ node.alternate = this.parseMaybeAssign();
+ return this.finishNode(node, "ConditionalExpression");
+ }
+
+ return expr;
+ }
+
+ parseMaybeUnaryOrPrivate(refExpressionErrors) {
+ return this.match(6) ? this.parsePrivateName() : this.parseMaybeUnary(refExpressionErrors);
+ }
+
+ parseExprOps(refExpressionErrors) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const potentialArrowAt = this.state.potentialArrowAt;
+ const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);
+
+ if (this.shouldExitDescending(expr, potentialArrowAt)) {
+ return expr;
+ }
+
+ return this.parseExprOp(expr, startPos, startLoc, -1);
+ }
+
+ parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {
+ if (this.isPrivateName(left)) {
+ const value = this.getPrivateNameSV(left);
+ const {
+ start
+ } = left;
+
+ if (minPrec >= tokenOperatorPrecedence(57) || !this.prodParam.hasIn || !this.match(57)) {
+ this.raise(start, ErrorMessages.PrivateInExpectedIn, value);
+ }
+
+ this.classScope.usePrivateName(value, start);
+ }
+
+ const op = this.state.type;
+
+ if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(57))) {
+ let prec = tokenOperatorPrecedence(op);
+
+ if (prec > minPrec) {
+ if (op === 42) {
+ this.expectPlugin("pipelineOperator");
+
+ if (this.state.inFSharpPipelineDirectBody) {
+ return left;
+ }
+
+ this.checkPipelineAtInfixOperator(left, leftStartPos);
+ }
+
+ const node = this.startNodeAt(leftStartPos, leftStartLoc);
+ node.left = left;
+ node.operator = this.state.value;
+ const logical = op === 44 || op === 45;
+ const coalesce = op === 43;
+
+ if (coalesce) {
+ prec = tokenOperatorPrecedence(45);
+ }
+
+ this.next();
+
+ if (op === 42 && this.getPluginOption("pipelineOperator", "proposal") === "minimal") {
+ if (this.match(5) && this.state.value === "await" && this.prodParam.hasAwait) {
+ throw this.raise(this.state.start, ErrorMessages.UnexpectedAwaitAfterPipelineBody);
+ }
+ }
+
+ node.right = this.parseExprOpRightExpr(op, prec);
+ this.finishNode(node, logical || coalesce ? "LogicalExpression" : "BinaryExpression");
+ const nextOp = this.state.type;
+
+ if (coalesce && (nextOp === 44 || nextOp === 45) || logical && nextOp === 43) {
+ throw this.raise(this.state.start, ErrorMessages.MixingCoalesceWithLogical);
+ }
+
+ return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);
+ }
+ }
+
+ return left;
+ }
+
+ parseExprOpRightExpr(op, prec) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+
+ switch (op) {
+ case 42:
+ switch (this.getPluginOption("pipelineOperator", "proposal")) {
+ case "hack":
+ return this.withTopicBindingContext(() => {
+ return this.parseHackPipeBody();
+ });
+
+ case "smart":
+ return this.withTopicBindingContext(() => {
+ if (this.prodParam.hasYield && this.isContextual("yield")) {
+ throw this.raise(this.state.start, ErrorMessages.PipeBodyIsTighter, this.state.value);
+ }
+
+ return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startPos, startLoc);
+ });
+
+ case "fsharp":
+ return this.withSoloAwaitPermittingContext(() => {
+ return this.parseFSharpPipelineBody(prec);
+ });
+ }
+
+ default:
+ return this.parseExprOpBaseRightExpr(op, prec);
+ }
+ }
+
+ parseExprOpBaseRightExpr(op, prec) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ return this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startPos, startLoc, tokenIsRightAssociative(op) ? prec - 1 : prec);
+ }
+
+ parseHackPipeBody() {
+ var _body$extra;
+
+ const {
+ start
+ } = this.state;
+ const body = this.parseMaybeAssign();
+
+ if (invalidHackPipeBodies.has(body.type) && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) {
+ this.raise(start, ErrorMessages.PipeUnparenthesizedBody, invalidHackPipeBodies.get(body.type));
+ }
+
+ if (!this.topicReferenceWasUsedInCurrentContext()) {
+ this.raise(start, ErrorMessages.PipeTopicUnused);
+ }
+
+ return body;
+ }
+
+ checkExponentialAfterUnary(node) {
+ if (this.match(56)) {
+ this.raise(node.argument.start, ErrorMessages.UnexpectedTokenUnaryExponentiation);
+ }
+ }
+
+ parseMaybeUnary(refExpressionErrors, sawUnary) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const isAwait = this.isContextual("await");
+
+ if (isAwait && this.isAwaitAllowed()) {
+ this.next();
+ const expr = this.parseAwait(startPos, startLoc);
+ if (!sawUnary) this.checkExponentialAfterUnary(expr);
+ return expr;
+ }
+
+ const update = this.match(39);
+ const node = this.startNode();
+
+ if (tokenIsPrefix(this.state.type)) {
+ node.operator = this.state.value;
+ node.prefix = true;
+
+ if (this.match(71)) {
+ this.expectPlugin("throwExpressions");
+ }
+
+ const isDelete = this.match(88);
+ this.next();
+ node.argument = this.parseMaybeUnary(null, true);
+ this.checkExpressionErrors(refExpressionErrors, true);
+
+ if (this.state.strict && isDelete) {
+ const arg = node.argument;
+
+ if (arg.type === "Identifier") {
+ this.raise(node.start, ErrorMessages.StrictDelete);
+ } else if (this.hasPropertyAsPrivateName(arg)) {
+ this.raise(node.start, ErrorMessages.DeletePrivateField);
+ }
+ }
+
+ if (!update) {
+ if (!sawUnary) this.checkExponentialAfterUnary(node);
+ return this.finishNode(node, "UnaryExpression");
+ }
+ }
+
+ const expr = this.parseUpdate(node, update, refExpressionErrors);
+
+ if (isAwait) {
+ const {
+ type
+ } = this.state;
+ const startsExpr = this.hasPlugin("v8intrinsic") ? tokenCanStartExpression(type) : tokenCanStartExpression(type) && !this.match(53);
+
+ if (startsExpr && !this.isAmbiguousAwait()) {
+ this.raiseOverwrite(startPos, ErrorMessages.AwaitNotInAsyncContext);
+ return this.parseAwait(startPos, startLoc);
+ }
+ }
+
+ return expr;
+ }
+
+ parseUpdate(node, update, refExpressionErrors) {
+ if (update) {
+ this.checkLVal(node.argument, "prefix operation");
+ return this.finishNode(node, "UpdateExpression");
+ }
+
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ let expr = this.parseExprSubscripts(refExpressionErrors);
+ if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;
+
+ while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.operator = this.state.value;
+ node.prefix = false;
+ node.argument = expr;
+ this.checkLVal(expr, "postfix operation");
+ this.next();
+ expr = this.finishNode(node, "UpdateExpression");
+ }
+
+ return expr;
+ }
+
+ parseExprSubscripts(refExpressionErrors) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ const potentialArrowAt = this.state.potentialArrowAt;
+ const expr = this.parseExprAtom(refExpressionErrors);
+
+ if (this.shouldExitDescending(expr, potentialArrowAt)) {
+ return expr;
+ }
+
+ return this.parseSubscripts(expr, startPos, startLoc);
+ }
+
+ parseSubscripts(base, startPos, startLoc, noCalls) {
+ const state = {
+ optionalChainMember: false,
+ maybeAsyncArrow: this.atPossibleAsyncArrow(base),
+ stop: false
+ };
+
+ do {
+ base = this.parseSubscript(base, startPos, startLoc, noCalls, state);
+ state.maybeAsyncArrow = false;
+ } while (!state.stop);
+
+ return base;
+ }
+
+ parseSubscript(base, startPos, startLoc, noCalls, state) {
+ if (!noCalls && this.eat(23)) {
+ return this.parseBind(base, startPos, startLoc, noCalls, state);
+ } else if (this.match(30)) {
+ return this.parseTaggedTemplateExpression(base, startPos, startLoc, state);
+ }
+
+ let optional = false;
+
+ if (this.match(26)) {
+ if (noCalls && this.lookaheadCharCode() === 40) {
+ state.stop = true;
+ return base;
+ }
+
+ state.optionalChainMember = optional = true;
+ this.next();
+ }
+
+ if (!noCalls && this.match(18)) {
+ return this.parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional);
+ } else {
+ const computed = this.eat(8);
+
+ if (computed || optional || this.eat(24)) {
+ return this.parseMember(base, startPos, startLoc, state, computed, optional);
+ } else {
+ state.stop = true;
+ return base;
+ }
+ }
+ }
+
+ parseMember(base, startPos, startLoc, state, computed, optional) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.object = base;
+ node.computed = computed;
+ const privateName = !computed && this.match(6) && this.state.value;
+ const property = computed ? this.parseExpression() : privateName ? this.parsePrivateName() : this.parseIdentifier(true);
+
+ if (privateName !== false) {
+ if (node.object.type === "Super") {
+ this.raise(startPos, ErrorMessages.SuperPrivateField);
+ }
+
+ this.classScope.usePrivateName(privateName, property.start);
+ }
+
+ node.property = property;
+
+ if (computed) {
+ this.expect(11);
+ }
+
+ if (state.optionalChainMember) {
+ node.optional = optional;
+ return this.finishNode(node, "OptionalMemberExpression");
+ } else {
+ return this.finishNode(node, "MemberExpression");
+ }
+ }
+
+ parseBind(base, startPos, startLoc, noCalls, state) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.object = base;
+ node.callee = this.parseNoCallExpr();
+ state.stop = true;
+ return this.parseSubscripts(this.finishNode(node, "BindExpression"), startPos, startLoc, noCalls);
+ }
+
+ parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional) {
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ let refExpressionErrors = null;
+ this.state.maybeInArrowParameters = true;
+ this.next();
+ let node = this.startNodeAt(startPos, startLoc);
+ node.callee = base;
+
+ if (state.maybeAsyncArrow) {
+ this.expressionScope.enter(newAsyncArrowScope());
+ refExpressionErrors = new ExpressionErrors();
+ }
+
+ if (state.optionalChainMember) {
+ node.optional = optional;
+ }
+
+ if (optional) {
+ node.arguments = this.parseCallExpressionArguments(19);
+ } else {
+ node.arguments = this.parseCallExpressionArguments(19, base.type === "Import", base.type !== "Super", node, refExpressionErrors);
+ }
+
+ this.finishCallExpression(node, state.optionalChainMember);
+
+ if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {
+ state.stop = true;
+ this.expressionScope.validateAsPattern();
+ this.expressionScope.exit();
+ node = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), node);
+ } else {
+ if (state.maybeAsyncArrow) {
+ this.checkExpressionErrors(refExpressionErrors, true);
+ this.expressionScope.exit();
+ }
+
+ this.toReferencedArguments(node);
+ }
+
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ return node;
+ }
+
+ toReferencedArguments(node, isParenthesizedExpr) {
+ this.toReferencedListDeep(node.arguments, isParenthesizedExpr);
+ }
+
+ parseTaggedTemplateExpression(base, startPos, startLoc, state) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.tag = base;
+ node.quasi = this.parseTemplate(true);
+
+ if (state.optionalChainMember) {
+ this.raise(startPos, ErrorMessages.OptionalChainingNoTemplate);
+ }
+
+ return this.finishNode(node, "TaggedTemplateExpression");
+ }
+
+ atPossibleAsyncArrow(base) {
+ return base.type === "Identifier" && base.name === "async" && this.state.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;
+ }
+
+ finishCallExpression(node, optional) {
+ if (node.callee.type === "Import") {
+ if (node.arguments.length === 2) {
+ {
+ if (!this.hasPlugin("moduleAttributes")) {
+ this.expectPlugin("importAssertions");
+ }
+ }
+ }
+
+ if (node.arguments.length === 0 || node.arguments.length > 2) {
+ this.raise(node.start, ErrorMessages.ImportCallArity, this.hasPlugin("importAssertions") || this.hasPlugin("moduleAttributes") ? "one or two arguments" : "one argument");
+ } else {
+ for (const arg of node.arguments) {
+ if (arg.type === "SpreadElement") {
+ this.raise(arg.start, ErrorMessages.ImportCallSpreadArgument);
+ }
+ }
+ }
+ }
+
+ return this.finishNode(node, optional ? "OptionalCallExpression" : "CallExpression");
+ }
+
+ parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {
+ const elts = [];
+ let first = true;
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = false;
+
+ while (!this.eat(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(20);
+
+ if (this.match(close)) {
+ if (dynamicImport && !this.hasPlugin("importAssertions") && !this.hasPlugin("moduleAttributes")) {
+ this.raise(this.state.lastTokStart, ErrorMessages.ImportCallArgumentTrailingComma);
+ }
+
+ if (nodeForExtra) {
+ this.addExtra(nodeForExtra, "trailingComma", this.state.lastTokStart);
+ }
+
+ this.next();
+ break;
+ }
+ }
+
+ elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));
+ }
+
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ return elts;
+ }
+
+ shouldParseAsyncArrow() {
+ return this.match(27) && !this.canInsertSemicolon();
+ }
+
+ parseAsyncArrowFromCallExpression(node, call) {
+ var _call$extra;
+
+ this.resetPreviousNodeTrailingComments(call);
+ this.expect(27);
+ this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingComma);
+ setInnerComments(node, call.innerComments);
+ setInnerComments(node, call.callee.trailingComments);
+ return node;
+ }
+
+ parseNoCallExpr() {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);
+ }
+
+ parseExprAtom(refExpressionErrors) {
+ let node;
+
+ switch (this.state.type) {
+ case 78:
+ return this.parseSuper();
+
+ case 82:
+ node = this.startNode();
+ this.next();
+
+ if (this.match(24)) {
+ return this.parseImportMetaProperty(node);
+ }
+
+ if (!this.match(18)) {
+ this.raise(this.state.lastTokStart, ErrorMessages.UnsupportedImport);
+ }
+
+ return this.finishNode(node, "Import");
+
+ case 77:
+ node = this.startNode();
+ this.next();
+ return this.finishNode(node, "ThisExpression");
+
+ case 5:
+ {
+ if (this.isContextual("module") && this.lookaheadCharCode() === 123 && !this.hasFollowingLineBreak()) {
+ return this.parseModuleExpression();
+ }
+
+ const canBeArrow = this.state.potentialArrowAt === this.state.start;
+ const containsEsc = this.state.containsEsc;
+ const id = this.parseIdentifier();
+
+ if (!containsEsc && id.name === "async" && !this.canInsertSemicolon()) {
+ if (this.match(67)) {
+ this.resetPreviousNodeTrailingComments(id);
+ this.next();
+ return this.parseFunction(this.startNodeAtNode(id), undefined, true);
+ } else if (this.match(5)) {
+ if (this.lookaheadCharCode() === 61) {
+ return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id));
+ } else {
+ return id;
+ }
+ } else if (this.match(89)) {
+ this.resetPreviousNodeTrailingComments(id);
+ return this.parseDo(this.startNodeAtNode(id), true);
+ }
+ }
+
+ if (canBeArrow && this.match(27) && !this.canInsertSemicolon()) {
+ this.next();
+ return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);
+ }
+
+ return id;
+ }
+
+ case 89:
+ {
+ return this.parseDo(this.startNode(), false);
+ }
+
+ case 55:
+ case 37:
+ {
+ this.readRegexp();
+ return this.parseRegExpLiteral(this.state.value);
+ }
+
+ case 0:
+ return this.parseNumericLiteral(this.state.value);
+
+ case 1:
+ return this.parseBigIntLiteral(this.state.value);
+
+ case 2:
+ return this.parseDecimalLiteral(this.state.value);
+
+ case 4:
+ return this.parseStringLiteral(this.state.value);
+
+ case 83:
+ return this.parseNullLiteral();
+
+ case 84:
+ return this.parseBooleanLiteral(true);
+
+ case 85:
+ return this.parseBooleanLiteral(false);
+
+ case 18:
+ {
+ const canBeArrow = this.state.potentialArrowAt === this.state.start;
+ return this.parseParenAndDistinguishExpression(canBeArrow);
+ }
+
+ case 10:
+ case 9:
+ {
+ return this.parseArrayLike(this.state.type === 10 ? 12 : 11, false, true, refExpressionErrors);
+ }
+
+ case 8:
+ {
+ return this.parseArrayLike(11, true, false, refExpressionErrors);
+ }
+
+ case 14:
+ case 15:
+ {
+ return this.parseObjectLike(this.state.type === 14 ? 17 : 16, false, true, refExpressionErrors);
+ }
+
+ case 13:
+ {
+ return this.parseObjectLike(16, false, false, refExpressionErrors);
+ }
+
+ case 67:
+ return this.parseFunctionOrFunctionSent();
+
+ case 32:
+ this.parseDecorators();
+
+ case 79:
+ node = this.startNode();
+ this.takeDecorators(node);
+ return this.parseClass(node, false);
+
+ case 76:
+ return this.parseNewOrNewTarget();
+
+ case 30:
+ return this.parseTemplate(false);
+
+ case 23:
+ {
+ node = this.startNode();
+ this.next();
+ node.object = null;
+ const callee = node.callee = this.parseNoCallExpr();
+
+ if (callee.type === "MemberExpression") {
+ return this.finishNode(node, "BindExpression");
+ } else {
+ throw this.raise(callee.start, ErrorMessages.UnsupportedBind);
+ }
+ }
+
+ case 6:
+ {
+ this.raise(this.state.start, ErrorMessages.PrivateInExpectedIn, this.state.value);
+ return this.parsePrivateName();
+ }
+
+ case 38:
+ if (this.getPluginOption("pipelineOperator", "proposal") === "hack" && this.getPluginOption("pipelineOperator", "topicToken") === "%") {
+ this.state.value = "%";
+ this.state.type = 53;
+ this.state.pos--;
+ this.state.end--;
+ this.state.endLoc.column--;
+ } else {
+ throw this.unexpected();
+ }
+
+ case 53:
+ case 33:
+ {
+ const pipeProposal = this.getPluginOption("pipelineOperator", "proposal");
+
+ if (pipeProposal) {
+ node = this.startNode();
+ const start = this.state.start;
+ const tokenType = this.state.type;
+ this.next();
+ return this.finishTopicReference(node, start, pipeProposal, tokenType);
+ }
+ }
+
+ case 50:
+ {
+ if (this.state.value === "<") {
+ const lookaheadCh = this.input.codePointAt(this.nextTokenStart());
+
+ if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) {
+ this.expectOnePlugin(["jsx", "flow", "typescript"]);
+ }
+ }
+ }
+
+ default:
+ throw this.unexpected();
+ }
+ }
+
+ finishTopicReference(node, start, pipeProposal, tokenType) {
+ if (this.testTopicReferenceConfiguration(pipeProposal, start, tokenType)) {
+ let nodeType;
+
+ if (pipeProposal === "smart") {
+ nodeType = "PipelinePrimaryTopicReference";
+ } else {
+ nodeType = "TopicReference";
+ }
+
+ if (!this.topicReferenceIsAllowedInCurrentContext()) {
+ if (pipeProposal === "smart") {
+ this.raise(start, ErrorMessages.PrimaryTopicNotAllowed);
+ } else {
+ this.raise(start, ErrorMessages.PipeTopicUnbound);
+ }
+ }
+
+ this.registerTopicReference();
+ return this.finishNode(node, nodeType);
+ } else {
+ throw this.raise(start, ErrorMessages.PipeTopicUnconfiguredToken, tokenLabelName(tokenType));
+ }
+ }
+
+ testTopicReferenceConfiguration(pipeProposal, start, tokenType) {
+ switch (pipeProposal) {
+ case "hack":
+ {
+ const pluginTopicToken = this.getPluginOption("pipelineOperator", "topicToken");
+ return tokenLabelName(tokenType) === pluginTopicToken;
+ }
+
+ case "smart":
+ return tokenType === 33;
+
+ default:
+ throw this.raise(start, ErrorMessages.PipeTopicRequiresHackPipes);
+ }
+ }
+
+ parseAsyncArrowUnaryFunction(node) {
+ this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));
+ const params = [this.parseIdentifier()];
+ this.prodParam.exit();
+
+ if (this.hasPrecedingLineBreak()) {
+ this.raise(this.state.pos, ErrorMessages.LineTerminatorBeforeArrow);
+ }
+
+ this.expect(27);
+ this.parseArrowExpression(node, params, true);
+ return node;
+ }
+
+ parseDo(node, isAsync) {
+ this.expectPlugin("doExpressions");
+
+ if (isAsync) {
+ this.expectPlugin("asyncDoExpressions");
+ }
+
+ node.async = isAsync;
+ this.next();
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+
+ if (isAsync) {
+ this.prodParam.enter(PARAM_AWAIT);
+ node.body = this.parseBlock();
+ this.prodParam.exit();
+ } else {
+ node.body = this.parseBlock();
+ }
+
+ this.state.labels = oldLabels;
+ return this.finishNode(node, "DoExpression");
+ }
+
+ parseSuper() {
+ const node = this.startNode();
+ this.next();
+
+ if (this.match(18) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {
+ this.raise(node.start, ErrorMessages.SuperNotAllowed);
+ } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {
+ this.raise(node.start, ErrorMessages.UnexpectedSuper);
+ }
+
+ if (!this.match(18) && !this.match(8) && !this.match(24)) {
+ this.raise(node.start, ErrorMessages.UnsupportedSuper);
+ }
+
+ return this.finishNode(node, "Super");
+ }
+
+ parseMaybePrivateName(isPrivateNameAllowed) {
+ const isPrivate = this.match(6);
+
+ if (isPrivate) {
+ if (!isPrivateNameAllowed) {
+ this.raise(this.state.start + 1, ErrorMessages.UnexpectedPrivateField);
+ }
+
+ return this.parsePrivateName();
+ } else {
+ return this.parseIdentifier(true);
+ }
+ }
+
+ parsePrivateName() {
+ const node = this.startNode();
+ const id = this.startNodeAt(this.state.start + 1, new Position(this.state.curLine, this.state.start + 1 - this.state.lineStart));
+ const name = this.state.value;
+ this.next();
+ node.id = this.createIdentifier(id, name);
+ return this.finishNode(node, "PrivateName");
+ }
+
+ parseFunctionOrFunctionSent() {
+ const node = this.startNode();
+ this.next();
+
+ if (this.prodParam.hasYield && this.match(24)) {
+ const meta = this.createIdentifier(this.startNodeAtNode(node), "function");
+ this.next();
+ return this.parseMetaProperty(node, meta, "sent");
+ }
+
+ return this.parseFunction(node);
+ }
+
+ parseMetaProperty(node, meta, propertyName) {
+ node.meta = meta;
+
+ if (meta.name === "function" && propertyName === "sent") {
+ if (this.isContextual(propertyName)) {
+ this.expectPlugin("functionSent");
+ } else if (!this.hasPlugin("functionSent")) {
+ this.unexpected();
+ }
+ }
+
+ const containsEsc = this.state.containsEsc;
+ node.property = this.parseIdentifier(true);
+
+ if (node.property.name !== propertyName || containsEsc) {
+ this.raise(node.property.start, ErrorMessages.UnsupportedMetaProperty, meta.name, propertyName);
+ }
+
+ return this.finishNode(node, "MetaProperty");
+ }
+
+ parseImportMetaProperty(node) {
+ const id = this.createIdentifier(this.startNodeAtNode(node), "import");
+ this.next();
+
+ if (this.isContextual("meta")) {
+ if (!this.inModule) {
+ this.raise(id.start, SourceTypeModuleErrorMessages.ImportMetaOutsideModule);
+ }
+
+ this.sawUnambiguousESM = true;
+ }
+
+ return this.parseMetaProperty(node, id, "meta");
+ }
+
+ parseLiteralAtNode(value, type, node) {
+ this.addExtra(node, "rawValue", value);
+ this.addExtra(node, "raw", this.input.slice(node.start, this.state.end));
+ node.value = value;
+ this.next();
+ return this.finishNode(node, type);
+ }
+
+ parseLiteral(value, type) {
+ const node = this.startNode();
+ return this.parseLiteralAtNode(value, type, node);
+ }
+
+ parseStringLiteral(value) {
+ return this.parseLiteral(value, "StringLiteral");
+ }
+
+ parseNumericLiteral(value) {
+ return this.parseLiteral(value, "NumericLiteral");
+ }
+
+ parseBigIntLiteral(value) {
+ return this.parseLiteral(value, "BigIntLiteral");
+ }
+
+ parseDecimalLiteral(value) {
+ return this.parseLiteral(value, "DecimalLiteral");
+ }
+
+ parseRegExpLiteral(value) {
+ const node = this.parseLiteral(value.value, "RegExpLiteral");
+ node.pattern = value.pattern;
+ node.flags = value.flags;
+ return node;
+ }
+
+ parseBooleanLiteral(value) {
+ const node = this.startNode();
+ node.value = value;
+ this.next();
+ return this.finishNode(node, "BooleanLiteral");
+ }
+
+ parseNullLiteral() {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, "NullLiteral");
+ }
+
+ parseParenAndDistinguishExpression(canBeArrow) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ let val;
+ this.next();
+ this.expressionScope.enter(newArrowHeadScope());
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.maybeInArrowParameters = true;
+ this.state.inFSharpPipelineDirectBody = false;
+ const innerStartPos = this.state.start;
+ const innerStartLoc = this.state.startLoc;
+ const exprList = [];
+ const refExpressionErrors = new ExpressionErrors();
+ let first = true;
+ let spreadStart;
+ let optionalCommaStart;
+
+ while (!this.match(19)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(20, refExpressionErrors.optionalParameters === -1 ? null : refExpressionErrors.optionalParameters);
+
+ if (this.match(19)) {
+ optionalCommaStart = this.state.start;
+ break;
+ }
+ }
+
+ if (this.match(29)) {
+ const spreadNodeStartPos = this.state.start;
+ const spreadNodeStartLoc = this.state.startLoc;
+ spreadStart = this.state.start;
+ exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartPos, spreadNodeStartLoc));
+ this.checkCommaAfterRest(41);
+ break;
+ } else {
+ exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));
+ }
+ }
+
+ const innerEndPos = this.state.lastTokEnd;
+ const innerEndLoc = this.state.lastTokEndLoc;
+ this.expect(19);
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ let arrowNode = this.startNodeAt(startPos, startLoc);
+
+ if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) {
+ this.expressionScope.validateAsPattern();
+ this.expressionScope.exit();
+ this.parseArrowExpression(arrowNode, exprList, false);
+ return arrowNode;
+ }
+
+ this.expressionScope.exit();
+
+ if (!exprList.length) {
+ this.unexpected(this.state.lastTokStart);
+ }
+
+ if (optionalCommaStart) this.unexpected(optionalCommaStart);
+ if (spreadStart) this.unexpected(spreadStart);
+ this.checkExpressionErrors(refExpressionErrors, true);
+ this.toReferencedListDeep(exprList, true);
+
+ if (exprList.length > 1) {
+ val = this.startNodeAt(innerStartPos, innerStartLoc);
+ val.expressions = exprList;
+ this.finishNode(val, "SequenceExpression");
+ this.resetEndLocation(val, innerEndPos, innerEndLoc);
+ } else {
+ val = exprList[0];
+ }
+
+ if (!this.options.createParenthesizedExpressions) {
+ this.addExtra(val, "parenthesized", true);
+ this.addExtra(val, "parenStart", startPos);
+ return val;
+ }
+
+ const parenExpression = this.startNodeAt(startPos, startLoc);
+ parenExpression.expression = val;
+ this.finishNode(parenExpression, "ParenthesizedExpression");
+ return parenExpression;
+ }
+
+ shouldParseArrow(params) {
+ return !this.canInsertSemicolon();
+ }
+
+ parseArrow(node) {
+ if (this.eat(27)) {
+ return node;
+ }
+ }
+
+ parseParenItem(node, startPos, startLoc) {
+ return node;
+ }
+
+ parseNewOrNewTarget() {
+ const node = this.startNode();
+ this.next();
+
+ if (this.match(24)) {
+ const meta = this.createIdentifier(this.startNodeAtNode(node), "new");
+ this.next();
+ const metaProp = this.parseMetaProperty(node, meta, "target");
+
+ if (!this.scope.inNonArrowFunction && !this.scope.inClass) {
+ this.raise(metaProp.start, ErrorMessages.UnexpectedNewTarget);
+ }
+
+ return metaProp;
+ }
+
+ return this.parseNew(node);
+ }
+
+ parseNew(node) {
+ node.callee = this.parseNoCallExpr();
+
+ if (node.callee.type === "Import") {
+ this.raise(node.callee.start, ErrorMessages.ImportCallNotNewExpression);
+ } else if (this.isOptionalChain(node.callee)) {
+ this.raise(this.state.lastTokEnd, ErrorMessages.OptionalChainingNoNew);
+ } else if (this.eat(26)) {
+ this.raise(this.state.start, ErrorMessages.OptionalChainingNoNew);
+ }
+
+ this.parseNewArguments(node);
+ return this.finishNode(node, "NewExpression");
+ }
+
+ parseNewArguments(node) {
+ if (this.eat(18)) {
+ const args = this.parseExprList(19);
+ this.toReferencedList(args);
+ node.arguments = args;
+ } else {
+ node.arguments = [];
+ }
+ }
+
+ parseTemplateElement(isTagged) {
+ const elem = this.startNode();
+
+ if (this.state.value === null) {
+ if (!isTagged) {
+ this.raise(this.state.start + 1, ErrorMessages.InvalidEscapeSequenceTemplate);
+ }
+ }
+
+ elem.value = {
+ raw: this.input.slice(this.state.start, this.state.end).replace(/\r\n?/g, "\n"),
+ cooked: this.state.value
+ };
+ this.next();
+ elem.tail = this.match(30);
+ return this.finishNode(elem, "TemplateElement");
+ }
+
+ parseTemplate(isTagged) {
+ const node = this.startNode();
+ this.next();
+ node.expressions = [];
+ let curElt = this.parseTemplateElement(isTagged);
+ node.quasis = [curElt];
+
+ while (!curElt.tail) {
+ this.expect(31);
+ node.expressions.push(this.parseTemplateSubstitution());
+ this.expect(16);
+ node.quasis.push(curElt = this.parseTemplateElement(isTagged));
+ }
+
+ this.next();
+ return this.finishNode(node, "TemplateLiteral");
+ }
+
+ parseTemplateSubstitution() {
+ return this.parseExpression();
+ }
+
+ parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {
+ if (isRecord) {
+ this.expectPlugin("recordAndTuple");
+ }
+
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = false;
+ const propHash = Object.create(null);
+ let first = true;
+ const node = this.startNode();
+ node.properties = [];
+ this.next();
+
+ while (!this.match(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(20);
+
+ if (this.match(close)) {
+ this.addExtra(node, "trailingComma", this.state.lastTokStart);
+ break;
+ }
+ }
+
+ const prop = this.parsePropertyDefinition(isPattern, refExpressionErrors);
+
+ if (!isPattern) {
+ this.checkProto(prop, isRecord, propHash, refExpressionErrors);
+ }
+
+ if (isRecord && !this.isObjectProperty(prop) && prop.type !== "SpreadElement") {
+ this.raise(prop.start, ErrorMessages.InvalidRecordProperty);
+ }
+
+ if (prop.shorthand) {
+ this.addExtra(prop, "shorthand", true);
+ }
+
+ node.properties.push(prop);
+ }
+
+ this.next();
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ let type = "ObjectExpression";
+
+ if (isPattern) {
+ type = "ObjectPattern";
+ } else if (isRecord) {
+ type = "RecordExpression";
+ }
+
+ return this.finishNode(node, type);
+ }
+
+ maybeAsyncOrAccessorProp(prop) {
+ return !prop.computed && prop.key.type === "Identifier" && (this.isLiteralPropertyName() || this.match(8) || this.match(54));
+ }
+
+ parsePropertyDefinition(isPattern, refExpressionErrors) {
+ let decorators = [];
+
+ if (this.match(32)) {
+ if (this.hasPlugin("decorators")) {
+ this.raise(this.state.start, ErrorMessages.UnsupportedPropertyDecorator);
+ }
+
+ while (this.match(32)) {
+ decorators.push(this.parseDecorator());
+ }
+ }
+
+ const prop = this.startNode();
+ let isGenerator = false;
+ let isAsync = false;
+ let isAccessor = false;
+ let startPos;
+ let startLoc;
+
+ if (this.match(29)) {
+ if (decorators.length) this.unexpected();
+
+ if (isPattern) {
+ this.next();
+ prop.argument = this.parseIdentifier();
+ this.checkCommaAfterRest(125);
+ return this.finishNode(prop, "RestElement");
+ }
+
+ return this.parseSpread();
+ }
+
+ if (decorators.length) {
+ prop.decorators = decorators;
+ decorators = [];
+ }
+
+ prop.method = false;
+
+ if (isPattern || refExpressionErrors) {
+ startPos = this.state.start;
+ startLoc = this.state.startLoc;
+ }
+
+ if (!isPattern) {
+ isGenerator = this.eat(54);
+ }
+
+ const containsEsc = this.state.containsEsc;
+ const key = this.parsePropertyName(prop, false);
+
+ if (!isPattern && !isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {
+ const keyName = key.name;
+
+ if (keyName === "async" && !this.hasPrecedingLineBreak()) {
+ isAsync = true;
+ this.resetPreviousNodeTrailingComments(key);
+ isGenerator = this.eat(54);
+ this.parsePropertyName(prop, false);
+ }
+
+ if (keyName === "get" || keyName === "set") {
+ isAccessor = true;
+ this.resetPreviousNodeTrailingComments(key);
+ prop.kind = keyName;
+
+ if (this.match(54)) {
+ isGenerator = true;
+ this.raise(this.state.pos, ErrorMessages.AccessorIsGenerator, keyName);
+ this.next();
+ }
+
+ this.parsePropertyName(prop, false);
+ }
+ }
+
+ this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);
+ return prop;
+ }
+
+ getGetterSetterExpectedParamCount(method) {
+ return method.kind === "get" ? 0 : 1;
+ }
+
+ getObjectOrClassMethodParams(method) {
+ return method.params;
+ }
+
+ checkGetterSetterParams(method) {
+ var _params;
+
+ const paramCount = this.getGetterSetterExpectedParamCount(method);
+ const params = this.getObjectOrClassMethodParams(method);
+ const start = method.start;
+
+ if (params.length !== paramCount) {
+ if (method.kind === "get") {
+ this.raise(start, ErrorMessages.BadGetterArity);
+ } else {
+ this.raise(start, ErrorMessages.BadSetterArity);
+ }
+ }
+
+ if (method.kind === "set" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === "RestElement") {
+ this.raise(start, ErrorMessages.BadSetterRestParameter);
+ }
+ }
+
+ parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {
+ if (isAccessor) {
+ this.parseMethod(prop, isGenerator, false, false, false, "ObjectMethod");
+ this.checkGetterSetterParams(prop);
+ return prop;
+ }
+
+ if (isAsync || isGenerator || this.match(18)) {
+ if (isPattern) this.unexpected();
+ prop.kind = "method";
+ prop.method = true;
+ return this.parseMethod(prop, isGenerator, isAsync, false, false, "ObjectMethod");
+ }
+ }
+
+ parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {
+ prop.shorthand = false;
+
+ if (this.eat(22)) {
+ prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);
+ return this.finishNode(prop, "ObjectProperty");
+ }
+
+ if (!prop.computed && prop.key.type === "Identifier") {
+ this.checkReservedWord(prop.key.name, prop.key.start, true, false);
+
+ if (isPattern) {
+ prop.value = this.parseMaybeDefault(startPos, startLoc, cloneIdentifier(prop.key));
+ } else if (this.match(35) && refExpressionErrors) {
+ if (refExpressionErrors.shorthandAssign === -1) {
+ refExpressionErrors.shorthandAssign = this.state.start;
+ }
+
+ prop.value = this.parseMaybeDefault(startPos, startLoc, cloneIdentifier(prop.key));
+ } else {
+ prop.value = cloneIdentifier(prop.key);
+ }
+
+ prop.shorthand = true;
+ return this.finishNode(prop, "ObjectProperty");
+ }
+ }
+
+ parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
+ const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);
+ if (!node) this.unexpected();
+ return node;
+ }
+
+ parsePropertyName(prop, isPrivateNameAllowed) {
+ if (this.eat(8)) {
+ prop.computed = true;
+ prop.key = this.parseMaybeAssignAllowIn();
+ this.expect(11);
+ } else {
+ const oldInPropertyName = this.state.inPropertyName;
+ this.state.inPropertyName = true;
+ const type = this.state.type;
+ prop.key = type === 0 || type === 4 || type === 1 || type === 2 ? this.parseExprAtom() : this.parseMaybePrivateName(isPrivateNameAllowed);
+
+ if (type !== 6) {
+ prop.computed = false;
+ }
+
+ this.state.inPropertyName = oldInPropertyName;
+ }
+
+ return prop.key;
+ }
+
+ initFunction(node, isAsync) {
+ node.id = null;
+ node.generator = false;
+ node.async = !!isAsync;
+ }
+
+ parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {
+ this.initFunction(node, isAsync);
+ node.generator = !!isGenerator;
+ const allowModifiers = isConstructor;
+ this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
+ this.prodParam.enter(functionFlags(isAsync, node.generator));
+ this.parseFunctionParams(node, allowModifiers);
+ this.parseFunctionBodyAndFinish(node, type, true);
+ this.prodParam.exit();
+ this.scope.exit();
+ return node;
+ }
+
+ parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
+ if (isTuple) {
+ this.expectPlugin("recordAndTuple");
+ }
+
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = false;
+ const node = this.startNode();
+ this.next();
+ node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ return this.finishNode(node, isTuple ? "TupleExpression" : "ArrayExpression");
+ }
+
+ parseArrowExpression(node, params, isAsync, trailingCommaPos) {
+ this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);
+ let flags = functionFlags(isAsync, false);
+
+ if (!this.match(8) && this.prodParam.hasIn) {
+ flags |= PARAM_IN;
+ }
+
+ this.prodParam.enter(flags);
+ this.initFunction(node, isAsync);
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+
+ if (params) {
+ this.state.maybeInArrowParameters = true;
+ this.setArrowFunctionParameters(node, params, trailingCommaPos);
+ }
+
+ this.state.maybeInArrowParameters = false;
+ this.parseFunctionBody(node, true);
+ this.prodParam.exit();
+ this.scope.exit();
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ return this.finishNode(node, "ArrowFunctionExpression");
+ }
+
+ setArrowFunctionParameters(node, params, trailingCommaPos) {
+ node.params = this.toAssignableList(params, trailingCommaPos, false);
+ }
+
+ parseFunctionBodyAndFinish(node, type, isMethod = false) {
+ this.parseFunctionBody(node, false, isMethod);
+ this.finishNode(node, type);
+ }
+
+ parseFunctionBody(node, allowExpression, isMethod = false) {
+ const isExpression = allowExpression && !this.match(13);
+ this.expressionScope.enter(newExpressionScope());
+
+ if (isExpression) {
+ node.body = this.parseMaybeAssign();
+ this.checkParams(node, false, allowExpression, false);
+ } else {
+ const oldStrict = this.state.strict;
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+ this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);
+ node.body = this.parseBlock(true, false, hasStrictModeDirective => {
+ const nonSimple = !this.isSimpleParamList(node.params);
+
+ if (hasStrictModeDirective && nonSimple) {
+ const errorPos = (node.kind === "method" || node.kind === "constructor") && !!node.key ? node.key.end : node.start;
+ this.raise(errorPos, ErrorMessages.IllegalLanguageModeDirective);
+ }
+
+ const strictModeChanged = !oldStrict && this.state.strict;
+ this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);
+
+ if (this.state.strict && node.id) {
+ this.checkLVal(node.id, "function name", BIND_OUTSIDE, undefined, undefined, strictModeChanged);
+ }
+ });
+ this.prodParam.exit();
+ this.expressionScope.exit();
+ this.state.labels = oldLabels;
+ }
+ }
+
+ isSimpleParamList(params) {
+ for (let i = 0, len = params.length; i < len; i++) {
+ if (params[i].type !== "Identifier") return false;
+ }
+
+ return true;
+ }
+
+ checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {
+ const checkClashes = new Set();
+
+ for (const param of node.params) {
+ this.checkLVal(param, "function parameter list", BIND_VAR, allowDuplicates ? null : checkClashes, undefined, strictModeChanged);
+ }
+ }
+
+ parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {
+ const elts = [];
+ let first = true;
+
+ while (!this.eat(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(20);
+
+ if (this.match(close)) {
+ if (nodeForExtra) {
+ this.addExtra(nodeForExtra, "trailingComma", this.state.lastTokStart);
+ }
+
+ this.next();
+ break;
+ }
+ }
+
+ elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));
+ }
+
+ return elts;
+ }
+
+ parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {
+ let elt;
+
+ if (this.match(20)) {
+ if (!allowEmpty) {
+ this.raise(this.state.pos, ErrorMessages.UnexpectedToken, ",");
+ }
+
+ elt = null;
+ } else if (this.match(29)) {
+ const spreadNodeStartPos = this.state.start;
+ const spreadNodeStartLoc = this.state.startLoc;
+ elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartPos, spreadNodeStartLoc);
+ } else if (this.match(25)) {
+ this.expectPlugin("partialApplication");
+
+ if (!allowPlaceholder) {
+ this.raise(this.state.start, ErrorMessages.UnexpectedArgumentPlaceholder);
+ }
+
+ const node = this.startNode();
+ this.next();
+ elt = this.finishNode(node, "ArgumentPlaceholder");
+ } else {
+ elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);
+ }
+
+ return elt;
+ }
+
+ parseIdentifier(liberal) {
+ const node = this.startNode();
+ const name = this.parseIdentifierName(node.start, liberal);
+ return this.createIdentifier(node, name);
+ }
+
+ createIdentifier(node, name) {
+ node.name = name;
+ node.loc.identifierName = name;
+ return this.finishNode(node, "Identifier");
+ }
+
+ parseIdentifierName(pos, liberal) {
+ let name;
+ const {
+ start,
+ type
+ } = this.state;
+
+ if (type === 5) {
+ name = this.state.value;
+ } else if (tokenIsKeyword(type)) {
+ name = tokenLabelName(type);
+ } else {
+ throw this.unexpected();
+ }
+
+ if (liberal) {
+ this.state.type = 5;
+ } else {
+ this.checkReservedWord(name, start, tokenIsKeyword(type), false);
+ }
+
+ this.next();
+ return name;
+ }
+
+ checkReservedWord(word, startLoc, checkKeywords, isBinding) {
+ if (word.length > 10) {
+ return;
+ }
+
+ if (!canBeReservedWord(word)) {
+ return;
+ }
+
+ if (word === "yield") {
+ if (this.prodParam.hasYield) {
+ this.raise(startLoc, ErrorMessages.YieldBindingIdentifier);
+ return;
+ }
+ } else if (word === "await") {
+ if (this.prodParam.hasAwait) {
+ this.raise(startLoc, ErrorMessages.AwaitBindingIdentifier);
+ return;
+ } else if (this.scope.inStaticBlock) {
+ this.raise(startLoc, ErrorMessages.AwaitBindingIdentifierInStaticBlock);
+ return;
+ } else {
+ this.expressionScope.recordAsyncArrowParametersError(startLoc, ErrorMessages.AwaitBindingIdentifier);
+ }
+ } else if (word === "arguments") {
+ if (this.scope.inClassAndNotInNonArrowFunction) {
+ this.raise(startLoc, ErrorMessages.ArgumentsInClass);
+ return;
+ }
+ }
+
+ if (checkKeywords && isKeyword(word)) {
+ this.raise(startLoc, ErrorMessages.UnexpectedKeyword, word);
+ return;
+ }
+
+ const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;
+
+ if (reservedTest(word, this.inModule)) {
+ this.raise(startLoc, ErrorMessages.UnexpectedReservedWord, word);
+ }
+ }
+
+ isAwaitAllowed() {
+ if (this.prodParam.hasAwait) return true;
+
+ if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {
+ return true;
+ }
+
+ return false;
+ }
+
+ parseAwait(startPos, startLoc) {
+ const node = this.startNodeAt(startPos, startLoc);
+ this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.AwaitExpressionFormalParameter);
+
+ if (this.eat(54)) {
+ this.raise(node.start, ErrorMessages.ObsoleteAwaitStar);
+ }
+
+ if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {
+ if (this.isAmbiguousAwait()) {
+ this.ambiguousScriptDifferentAst = true;
+ } else {
+ this.sawUnambiguousESM = true;
+ }
+ }
+
+ if (!this.state.soloAwait) {
+ node.argument = this.parseMaybeUnary(null, true);
+ }
+
+ return this.finishNode(node, "AwaitExpression");
+ }
+
+ isAmbiguousAwait() {
+ return this.hasPrecedingLineBreak() || this.match(52) || this.match(18) || this.match(8) || this.match(30) || this.match(3) || this.match(55) || this.hasPlugin("v8intrinsic") && this.match(53);
+ }
+
+ parseYield() {
+ const node = this.startNode();
+ this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.YieldInParameter);
+ this.next();
+ let delegating = false;
+ let argument = null;
+
+ if (!this.hasPrecedingLineBreak()) {
+ delegating = this.eat(54);
+
+ switch (this.state.type) {
+ case 21:
+ case 7:
+ case 16:
+ case 19:
+ case 11:
+ case 17:
+ case 22:
+ case 20:
+ if (!delegating) break;
+
+ default:
+ argument = this.parseMaybeAssign();
+ }
+ }
+
+ node.delegate = delegating;
+ node.argument = argument;
+ return this.finishNode(node, "YieldExpression");
+ }
+
+ checkPipelineAtInfixOperator(left, leftStartPos) {
+ if (this.getPluginOption("pipelineOperator", "proposal") === "smart") {
+ if (left.type === "SequenceExpression") {
+ this.raise(leftStartPos, ErrorMessages.PipelineHeadSequenceExpression);
+ }
+ }
+ }
+
+ checkHackPipeBodyEarlyErrors(startPos) {
+ if (!this.topicReferenceWasUsedInCurrentContext()) {
+ this.raise(startPos, ErrorMessages.PipeTopicUnused);
+ }
+ }
+
+ parseSmartPipelineBodyInStyle(childExpr, startPos, startLoc) {
+ const bodyNode = this.startNodeAt(startPos, startLoc);
+
+ if (this.isSimpleReference(childExpr)) {
+ bodyNode.callee = childExpr;
+ return this.finishNode(bodyNode, "PipelineBareFunction");
+ } else {
+ this.checkSmartPipeTopicBodyEarlyErrors(startPos);
+ bodyNode.expression = childExpr;
+ return this.finishNode(bodyNode, "PipelineTopicExpression");
+ }
+ }
+
+ isSimpleReference(expression) {
+ switch (expression.type) {
+ case "MemberExpression":
+ return !expression.computed && this.isSimpleReference(expression.object);
+
+ case "Identifier":
+ return true;
+
+ default:
+ return false;
+ }
+ }
+
+ checkSmartPipeTopicBodyEarlyErrors(startPos) {
+ if (this.match(27)) {
+ throw this.raise(this.state.start, ErrorMessages.PipelineBodyNoArrow);
+ } else if (!this.topicReferenceWasUsedInCurrentContext()) {
+ this.raise(startPos, ErrorMessages.PipelineTopicUnused);
+ }
+ }
+
+ withTopicBindingContext(callback) {
+ const outerContextTopicState = this.state.topicContext;
+ this.state.topicContext = {
+ maxNumOfResolvableTopics: 1,
+ maxTopicIndex: null
+ };
+
+ try {
+ return callback();
+ } finally {
+ this.state.topicContext = outerContextTopicState;
+ }
+ }
+
+ withSmartMixTopicForbiddingContext(callback) {
+ const proposal = this.getPluginOption("pipelineOperator", "proposal");
+
+ if (proposal === "smart") {
+ const outerContextTopicState = this.state.topicContext;
+ this.state.topicContext = {
+ maxNumOfResolvableTopics: 0,
+ maxTopicIndex: null
+ };
+
+ try {
+ return callback();
+ } finally {
+ this.state.topicContext = outerContextTopicState;
+ }
+ } else {
+ return callback();
+ }
+ }
+
+ withSoloAwaitPermittingContext(callback) {
+ const outerContextSoloAwaitState = this.state.soloAwait;
+ this.state.soloAwait = true;
+
+ try {
+ return callback();
+ } finally {
+ this.state.soloAwait = outerContextSoloAwaitState;
+ }
+ }
+
+ allowInAnd(callback) {
+ const flags = this.prodParam.currentFlags();
+ const prodParamToSet = PARAM_IN & ~flags;
+
+ if (prodParamToSet) {
+ this.prodParam.enter(flags | PARAM_IN);
+
+ try {
+ return callback();
+ } finally {
+ this.prodParam.exit();
+ }
+ }
+
+ return callback();
+ }
+
+ disallowInAnd(callback) {
+ const flags = this.prodParam.currentFlags();
+ const prodParamToClear = PARAM_IN & flags;
+
+ if (prodParamToClear) {
+ this.prodParam.enter(flags & ~PARAM_IN);
+
+ try {
+ return callback();
+ } finally {
+ this.prodParam.exit();
+ }
+ }
+
+ return callback();
+ }
+
+ registerTopicReference() {
+ this.state.topicContext.maxTopicIndex = 0;
+ }
+
+ topicReferenceIsAllowedInCurrentContext() {
+ return this.state.topicContext.maxNumOfResolvableTopics >= 1;
+ }
+
+ topicReferenceWasUsedInCurrentContext() {
+ return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;
+ }
+
+ parseFSharpPipelineBody(prec) {
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ this.state.potentialArrowAt = this.state.start;
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = true;
+ const ret = this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startPos, startLoc, prec);
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ return ret;
+ }
+
+ parseModuleExpression() {
+ this.expectPlugin("moduleBlocks");
+ const node = this.startNode();
+ this.next();
+ this.eat(13);
+ const revertScopes = this.initializeScopes(true);
+ this.enterInitialScopes();
+ const program = this.startNode();
+
+ try {
+ node.body = this.parseProgram(program, 16, "module");
+ } finally {
+ revertScopes();
+ }
+
+ this.eat(16);
+ return this.finishNode(node, "ModuleExpression");
+ }
+
+}
+
+const loopLabel = {
+ kind: "loop"
+},
+ switchLabel = {
+ kind: "switch"
+};
+const FUNC_NO_FLAGS = 0b000,
+ FUNC_STATEMENT = 0b001,
+ FUNC_HANGING_STATEMENT = 0b010,
+ FUNC_NULLABLE_ID = 0b100;
+const loneSurrogate = /[\uD800-\uDFFF]/u;
+const keywordRelationalOperator = /in(?:stanceof)?/y;
+
+function babel7CompatTokens(tokens) {
+ for (let i = 0; i < tokens.length; i++) {
+ const token = tokens[i];
+ const {
+ type
+ } = token;
+
+ if (type === 6) {
+ {
+ const {
+ loc,
+ start,
+ value,
+ end
+ } = token;
+ const hashEndPos = start + 1;
+ const hashEndLoc = new Position(loc.start.line, loc.start.column + 1);
+ tokens.splice(i, 1, new Token({
+ type: getExportedToken(33),
+ value: "#",
+ start: start,
+ end: hashEndPos,
+ startLoc: loc.start,
+ endLoc: hashEndLoc
+ }), new Token({
+ type: getExportedToken(5),
+ value: value,
+ start: hashEndPos,
+ end: end,
+ startLoc: hashEndLoc,
+ endLoc: loc.end
+ }));
+ i++;
+ continue;
+ }
+ }
+
+ if (typeof type === "number") {
+ token.type = getExportedToken(type);
+ }
+ }
+
+ return tokens;
+}
+
+class StatementParser extends ExpressionParser {
+ parseTopLevel(file, program) {
+ file.program = this.parseProgram(program);
+ file.comments = this.state.comments;
+ if (this.options.tokens) file.tokens = babel7CompatTokens(this.tokens);
+ return this.finishNode(file, "File");
+ }
+
+ parseProgram(program, end = 7, sourceType = this.options.sourceType) {
+ program.sourceType = sourceType;
+ program.interpreter = this.parseInterpreterDirective();
+ this.parseBlockBody(program, true, true, end);
+
+ if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {
+ for (const [name] of Array.from(this.scope.undefinedExports)) {
+ const pos = this.scope.undefinedExports.get(name);
+ this.raise(pos, ErrorMessages.ModuleExportUndefined, name);
+ }
+ }
+
+ return this.finishNode(program, "Program");
+ }
+
+ stmtToDirective(stmt) {
+ const directive = stmt;
+ directive.type = "Directive";
+ directive.value = directive.expression;
+ delete directive.expression;
+ const directiveLiteral = directive.value;
+ const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);
+ const val = directiveLiteral.value = raw.slice(1, -1);
+ this.addExtra(directiveLiteral, "raw", raw);
+ this.addExtra(directiveLiteral, "rawValue", val);
+ directiveLiteral.type = "DirectiveLiteral";
+ return directive;
+ }
+
+ parseInterpreterDirective() {
+ if (!this.match(34)) {
+ return null;
+ }
+
+ const node = this.startNode();
+ node.value = this.state.value;
+ this.next();
+ return this.finishNode(node, "InterpreterDirective");
+ }
+
+ isLet(context) {
+ if (!this.isContextual("let")) {
+ return false;
+ }
+
+ return this.isLetKeyword(context);
+ }
+
+ isLetKeyword(context) {
+ const next = this.nextTokenStart();
+ const nextCh = this.codePointAtPos(next);
+
+ if (nextCh === 92 || nextCh === 91) {
+ return true;
+ }
+
+ if (context) return false;
+ if (nextCh === 123) return true;
+
+ if (isIdentifierStart(nextCh)) {
+ keywordRelationalOperator.lastIndex = next;
+
+ if (keywordRelationalOperator.test(this.input)) {
+ const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);
+
+ if (!isIdentifierChar(endCh) && endCh !== 92) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ parseStatement(context, topLevel) {
+ if (this.match(32)) {
+ this.parseDecorators(true);
+ }
+
+ return this.parseStatementContent(context, topLevel);
+ }
+
+ parseStatementContent(context, topLevel) {
+ let starttype = this.state.type;
+ const node = this.startNode();
+ let kind;
+
+ if (this.isLet(context)) {
+ starttype = 73;
+ kind = "let";
+ }
+
+ switch (starttype) {
+ case 59:
+ return this.parseBreakContinueStatement(node, true);
+
+ case 62:
+ return this.parseBreakContinueStatement(node, false);
+
+ case 63:
+ return this.parseDebuggerStatement(node);
+
+ case 89:
+ return this.parseDoStatement(node);
+
+ case 90:
+ return this.parseForStatement(node);
+
+ case 67:
+ if (this.lookaheadCharCode() === 46) break;
+
+ if (context) {
+ if (this.state.strict) {
+ this.raise(this.state.start, ErrorMessages.StrictFunction);
+ } else if (context !== "if" && context !== "label") {
+ this.raise(this.state.start, ErrorMessages.SloppyFunction);
+ }
+ }
+
+ return this.parseFunctionStatement(node, false, !context);
+
+ case 79:
+ if (context) this.unexpected();
+ return this.parseClass(node, true);
+
+ case 68:
+ return this.parseIfStatement(node);
+
+ case 69:
+ return this.parseReturnStatement(node);
+
+ case 70:
+ return this.parseSwitchStatement(node);
+
+ case 71:
+ return this.parseThrowStatement(node);
+
+ case 72:
+ return this.parseTryStatement(node);
+
+ case 74:
+ case 73:
+ kind = kind || this.state.value;
+
+ if (context && kind !== "var") {
+ this.raise(this.state.start, ErrorMessages.UnexpectedLexicalDeclaration);
+ }
+
+ return this.parseVarStatement(node, kind);
+
+ case 91:
+ return this.parseWhileStatement(node);
+
+ case 75:
+ return this.parseWithStatement(node);
+
+ case 13:
+ return this.parseBlock();
+
+ case 21:
+ return this.parseEmptyStatement(node);
+
+ case 82:
+ {
+ const nextTokenCharCode = this.lookaheadCharCode();
+
+ if (nextTokenCharCode === 40 || nextTokenCharCode === 46) {
+ break;
+ }
+ }
+
+ case 81:
+ {
+ if (!this.options.allowImportExportEverywhere && !topLevel) {
+ this.raise(this.state.start, ErrorMessages.UnexpectedImportExport);
+ }
+
+ this.next();
+ let result;
+
+ if (starttype === 82) {
+ result = this.parseImport(node);
+
+ if (result.type === "ImportDeclaration" && (!result.importKind || result.importKind === "value")) {
+ this.sawUnambiguousESM = true;
+ }
+ } else {
+ result = this.parseExport(node);
+
+ if (result.type === "ExportNamedDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportAllDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportDefaultDeclaration") {
+ this.sawUnambiguousESM = true;
+ }
+ }
+
+ this.assertModuleNodeAllowed(node);
+ return result;
+ }
+
+ default:
+ {
+ if (this.isAsyncFunction()) {
+ if (context) {
+ this.raise(this.state.start, ErrorMessages.AsyncFunctionInSingleStatementContext);
+ }
+
+ this.next();
+ return this.parseFunctionStatement(node, true, !context);
+ }
+ }
+ }
+
+ const maybeName = this.state.value;
+ const expr = this.parseExpression();
+
+ if (starttype === 5 && expr.type === "Identifier" && this.eat(22)) {
+ return this.parseLabeledStatement(node, maybeName, expr, context);
+ } else {
+ return this.parseExpressionStatement(node, expr);
+ }
+ }
+
+ assertModuleNodeAllowed(node) {
+ if (!this.options.allowImportExportEverywhere && !this.inModule) {
+ this.raise(node.start, SourceTypeModuleErrorMessages.ImportOutsideModule);
+ }
+ }
+
+ takeDecorators(node) {
+ const decorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];
+
+ if (decorators.length) {
+ node.decorators = decorators;
+ this.resetStartLocationFromNode(node, decorators[0]);
+ this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];
+ }
+ }
+
+ canHaveLeadingDecorator() {
+ return this.match(79);
+ }
+
+ parseDecorators(allowExport) {
+ const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];
+
+ while (this.match(32)) {
+ const decorator = this.parseDecorator();
+ currentContextDecorators.push(decorator);
+ }
+
+ if (this.match(81)) {
+ if (!allowExport) {
+ this.unexpected();
+ }
+
+ if (this.hasPlugin("decorators") && !this.getPluginOption("decorators", "decoratorsBeforeExport")) {
+ this.raise(this.state.start, ErrorMessages.DecoratorExportClass);
+ }
+ } else if (!this.canHaveLeadingDecorator()) {
+ throw this.raise(this.state.start, ErrorMessages.UnexpectedLeadingDecorator);
+ }
+ }
+
+ parseDecorator() {
+ this.expectOnePlugin(["decorators-legacy", "decorators"]);
+ const node = this.startNode();
+ this.next();
+
+ if (this.hasPlugin("decorators")) {
+ this.state.decoratorStack.push([]);
+ const startPos = this.state.start;
+ const startLoc = this.state.startLoc;
+ let expr;
+
+ if (this.eat(18)) {
+ expr = this.parseExpression();
+ this.expect(19);
+ } else {
+ expr = this.parseIdentifier(false);
+
+ while (this.eat(24)) {
+ const node = this.startNodeAt(startPos, startLoc);
+ node.object = expr;
+ node.property = this.parseIdentifier(true);
+ node.computed = false;
+ expr = this.finishNode(node, "MemberExpression");
+ }
+ }
+
+ node.expression = this.parseMaybeDecoratorArguments(expr);
+ this.state.decoratorStack.pop();
+ } else {
+ node.expression = this.parseExprSubscripts();
+ }
+
+ return this.finishNode(node, "Decorator");
+ }
+
+ parseMaybeDecoratorArguments(expr) {
+ if (this.eat(18)) {
+ const node = this.startNodeAtNode(expr);
+ node.callee = expr;
+ node.arguments = this.parseCallExpressionArguments(19, false);
+ this.toReferencedList(node.arguments);
+ return this.finishNode(node, "CallExpression");
+ }
+
+ return expr;
+ }
+
+ parseBreakContinueStatement(node, isBreak) {
+ this.next();
+
+ if (this.isLineTerminator()) {
+ node.label = null;
+ } else {
+ node.label = this.parseIdentifier();
+ this.semicolon();
+ }
+
+ this.verifyBreakContinue(node, isBreak);
+ return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");
+ }
+
+ verifyBreakContinue(node, isBreak) {
+ let i;
+
+ for (i = 0; i < this.state.labels.length; ++i) {
+ const lab = this.state.labels[i];
+
+ if (node.label == null || lab.name === node.label.name) {
+ if (lab.kind != null && (isBreak || lab.kind === "loop")) break;
+ if (node.label && isBreak) break;
+ }
+ }
+
+ if (i === this.state.labels.length) {
+ this.raise(node.start, ErrorMessages.IllegalBreakContinue, isBreak ? "break" : "continue");
+ }
+ }
+
+ parseDebuggerStatement(node) {
+ this.next();
+ this.semicolon();
+ return this.finishNode(node, "DebuggerStatement");
+ }
+
+ parseHeaderExpression() {
+ this.expect(18);
+ const val = this.parseExpression();
+ this.expect(19);
+ return val;
+ }
+
+ parseDoStatement(node) {
+ this.next();
+ this.state.labels.push(loopLabel);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement("do"));
+ this.state.labels.pop();
+ this.expect(91);
+ node.test = this.parseHeaderExpression();
+ this.eat(21);
+ return this.finishNode(node, "DoWhileStatement");
+ }
+
+ parseForStatement(node) {
+ this.next();
+ this.state.labels.push(loopLabel);
+ let awaitAt = -1;
+
+ if (this.isAwaitAllowed() && this.eatContextual("await")) {
+ awaitAt = this.state.lastTokStart;
+ }
+
+ this.scope.enter(SCOPE_OTHER);
+ this.expect(18);
+
+ if (this.match(21)) {
+ if (awaitAt > -1) {
+ this.unexpected(awaitAt);
+ }
+
+ return this.parseFor(node, null);
+ }
+
+ const startsWithLet = this.isContextual("let");
+ const isLet = startsWithLet && this.isLetKeyword();
+
+ if (this.match(73) || this.match(74) || isLet) {
+ const init = this.startNode();
+ const kind = isLet ? "let" : this.state.value;
+ this.next();
+ this.parseVar(init, true, kind);
+ this.finishNode(init, "VariableDeclaration");
+
+ if ((this.match(57) || this.isContextual("of")) && init.declarations.length === 1) {
+ return this.parseForIn(node, init, awaitAt);
+ }
+
+ if (awaitAt > -1) {
+ this.unexpected(awaitAt);
+ }
+
+ return this.parseFor(node, init);
+ }
+
+ const startsWithUnescapedName = this.match(5) && !this.state.containsEsc;
+ const refExpressionErrors = new ExpressionErrors();
+ const init = this.parseExpression(true, refExpressionErrors);
+ const isForOf = this.isContextual("of");
+
+ if (isForOf) {
+ if (startsWithLet) {
+ this.raise(init.start, ErrorMessages.ForOfLet);
+ } else if (awaitAt === -1 && startsWithUnescapedName && init.type === "Identifier" && init.name === "async") {
+ this.raise(init.start, ErrorMessages.ForOfAsync);
+ }
+ }
+
+ if (isForOf || this.match(57)) {
+ this.toAssignable(init, true);
+ const description = isForOf ? "for-of statement" : "for-in statement";
+ this.checkLVal(init, description);
+ return this.parseForIn(node, init, awaitAt);
+ } else {
+ this.checkExpressionErrors(refExpressionErrors, true);
+ }
+
+ if (awaitAt > -1) {
+ this.unexpected(awaitAt);
+ }
+
+ return this.parseFor(node, init);
+ }
+
+ parseFunctionStatement(node, isAsync, declarationPosition) {
+ this.next();
+ return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), isAsync);
+ }
+
+ parseIfStatement(node) {
+ this.next();
+ node.test = this.parseHeaderExpression();
+ node.consequent = this.parseStatement("if");
+ node.alternate = this.eat(65) ? this.parseStatement("if") : null;
+ return this.finishNode(node, "IfStatement");
+ }
+
+ parseReturnStatement(node) {
+ if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {
+ this.raise(this.state.start, ErrorMessages.IllegalReturn);
+ }
+
+ this.next();
+
+ if (this.isLineTerminator()) {
+ node.argument = null;
+ } else {
+ node.argument = this.parseExpression();
+ this.semicolon();
+ }
+
+ return this.finishNode(node, "ReturnStatement");
+ }
+
+ parseSwitchStatement(node) {
+ this.next();
+ node.discriminant = this.parseHeaderExpression();
+ const cases = node.cases = [];
+ this.expect(13);
+ this.state.labels.push(switchLabel);
+ this.scope.enter(SCOPE_OTHER);
+ let cur;
+
+ for (let sawDefault; !this.match(16);) {
+ if (this.match(60) || this.match(64)) {
+ const isCase = this.match(60);
+ if (cur) this.finishNode(cur, "SwitchCase");
+ cases.push(cur = this.startNode());
+ cur.consequent = [];
+ this.next();
+
+ if (isCase) {
+ cur.test = this.parseExpression();
+ } else {
+ if (sawDefault) {
+ this.raise(this.state.lastTokStart, ErrorMessages.MultipleDefaultsInSwitch);
+ }
+
+ sawDefault = true;
+ cur.test = null;
+ }
+
+ this.expect(22);
+ } else {
+ if (cur) {
+ cur.consequent.push(this.parseStatement(null));
+ } else {
+ this.unexpected();
+ }
+ }
+ }
+
+ this.scope.exit();
+ if (cur) this.finishNode(cur, "SwitchCase");
+ this.next();
+ this.state.labels.pop();
+ return this.finishNode(node, "SwitchStatement");
+ }
+
+ parseThrowStatement(node) {
+ this.next();
+
+ if (this.hasPrecedingLineBreak()) {
+ this.raise(this.state.lastTokEnd, ErrorMessages.NewlineAfterThrow);
+ }
+
+ node.argument = this.parseExpression();
+ this.semicolon();
+ return this.finishNode(node, "ThrowStatement");
+ }
+
+ parseCatchClauseParam() {
+ const param = this.parseBindingAtom();
+ const simple = param.type === "Identifier";
+ this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);
+ this.checkLVal(param, "catch clause", BIND_LEXICAL);
+ return param;
+ }
+
+ parseTryStatement(node) {
+ this.next();
+ node.block = this.parseBlock();
+ node.handler = null;
+
+ if (this.match(61)) {
+ const clause = this.startNode();
+ this.next();
+
+ if (this.match(18)) {
+ this.expect(18);
+ clause.param = this.parseCatchClauseParam();
+ this.expect(19);
+ } else {
+ clause.param = null;
+ this.scope.enter(SCOPE_OTHER);
+ }
+
+ clause.body = this.withSmartMixTopicForbiddingContext(() => this.parseBlock(false, false));
+ this.scope.exit();
+ node.handler = this.finishNode(clause, "CatchClause");
+ }
+
+ node.finalizer = this.eat(66) ? this.parseBlock() : null;
+
+ if (!node.handler && !node.finalizer) {
+ this.raise(node.start, ErrorMessages.NoCatchOrFinally);
+ }
+
+ return this.finishNode(node, "TryStatement");
+ }
+
+ parseVarStatement(node, kind) {
+ this.next();
+ this.parseVar(node, false, kind);
+ this.semicolon();
+ return this.finishNode(node, "VariableDeclaration");
+ }
+
+ parseWhileStatement(node) {
+ this.next();
+ node.test = this.parseHeaderExpression();
+ this.state.labels.push(loopLabel);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement("while"));
+ this.state.labels.pop();
+ return this.finishNode(node, "WhileStatement");
+ }
+
+ parseWithStatement(node) {
+ if (this.state.strict) {
+ this.raise(this.state.start, ErrorMessages.StrictWith);
+ }
+
+ this.next();
+ node.object = this.parseHeaderExpression();
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement("with"));
+ return this.finishNode(node, "WithStatement");
+ }
+
+ parseEmptyStatement(node) {
+ this.next();
+ return this.finishNode(node, "EmptyStatement");
+ }
+
+ parseLabeledStatement(node, maybeName, expr, context) {
+ for (const label of this.state.labels) {
+ if (label.name === maybeName) {
+ this.raise(expr.start, ErrorMessages.LabelRedeclaration, maybeName);
+ }
+ }
+
+ const kind = tokenIsLoop(this.state.type) ? "loop" : this.match(70) ? "switch" : null;
+
+ for (let i = this.state.labels.length - 1; i >= 0; i--) {
+ const label = this.state.labels[i];
+
+ if (label.statementStart === node.start) {
+ label.statementStart = this.state.start;
+ label.kind = kind;
+ } else {
+ break;
+ }
+ }
+
+ this.state.labels.push({
+ name: maybeName,
+ kind: kind,
+ statementStart: this.state.start
+ });
+ node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");
+ this.state.labels.pop();
+ node.label = expr;
+ return this.finishNode(node, "LabeledStatement");
+ }
+
+ parseExpressionStatement(node, expr) {
+ node.expression = expr;
+ this.semicolon();
+ return this.finishNode(node, "ExpressionStatement");
+ }
+
+ parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {
+ const node = this.startNode();
+
+ if (allowDirectives) {
+ this.state.strictErrors.clear();
+ }
+
+ this.expect(13);
+
+ if (createNewLexicalScope) {
+ this.scope.enter(SCOPE_OTHER);
+ }
+
+ this.parseBlockBody(node, allowDirectives, false, 16, afterBlockParse);
+
+ if (createNewLexicalScope) {
+ this.scope.exit();
+ }
+
+ return this.finishNode(node, "BlockStatement");
+ }
+
+ isValidDirective(stmt) {
+ return stmt.type === "ExpressionStatement" && stmt.expression.type === "StringLiteral" && !stmt.expression.extra.parenthesized;
+ }
+
+ parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {
+ const body = node.body = [];
+ const directives = node.directives = [];
+ this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);
+ }
+
+ parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {
+ const oldStrict = this.state.strict;
+ let hasStrictModeDirective = false;
+ let parsedNonDirective = false;
+
+ while (!this.match(end)) {
+ const stmt = this.parseStatement(null, topLevel);
+
+ if (directives && !parsedNonDirective) {
+ if (this.isValidDirective(stmt)) {
+ const directive = this.stmtToDirective(stmt);
+ directives.push(directive);
+
+ if (!hasStrictModeDirective && directive.value.value === "use strict") {
+ hasStrictModeDirective = true;
+ this.setStrict(true);
+ }
+
+ continue;
+ }
+
+ parsedNonDirective = true;
+ this.state.strictErrors.clear();
+ }
+
+ body.push(stmt);
+ }
+
+ if (afterBlockParse) {
+ afterBlockParse.call(this, hasStrictModeDirective);
+ }
+
+ if (!oldStrict) {
+ this.setStrict(false);
+ }
+
+ this.next();
+ }
+
+ parseFor(node, init) {
+ node.init = init;
+ this.semicolon(false);
+ node.test = this.match(21) ? null : this.parseExpression();
+ this.semicolon(false);
+ node.update = this.match(19) ? null : this.parseExpression();
+ this.expect(19);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement("for"));
+ this.scope.exit();
+ this.state.labels.pop();
+ return this.finishNode(node, "ForStatement");
+ }
+
+ parseForIn(node, init, awaitAt) {
+ const isForIn = this.match(57);
+ this.next();
+
+ if (isForIn) {
+ if (awaitAt > -1) this.unexpected(awaitAt);
+ } else {
+ node.await = awaitAt > -1;
+ }
+
+ if (init.type === "VariableDeclaration" && init.declarations[0].init != null && (!isForIn || this.state.strict || init.kind !== "var" || init.declarations[0].id.type !== "Identifier")) {
+ this.raise(init.start, ErrorMessages.ForInOfLoopInitializer, isForIn ? "for-in" : "for-of");
+ } else if (init.type === "AssignmentPattern") {
+ this.raise(init.start, ErrorMessages.InvalidLhs, "for-loop");
+ }
+
+ node.left = init;
+ node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();
+ this.expect(19);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement("for"));
+ this.scope.exit();
+ this.state.labels.pop();
+ return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement");
+ }
+
+ parseVar(node, isFor, kind) {
+ const declarations = node.declarations = [];
+ const isTypescript = this.hasPlugin("typescript");
+ node.kind = kind;
+
+ for (;;) {
+ const decl = this.startNode();
+ this.parseVarId(decl, kind);
+
+ if (this.eat(35)) {
+ decl.init = isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();
+ } else {
+ if (kind === "const" && !(this.match(57) || this.isContextual("of"))) {
+ if (!isTypescript) {
+ this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, "Const declarations");
+ }
+ } else if (decl.id.type !== "Identifier" && !(isFor && (this.match(57) || this.isContextual("of")))) {
+ this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, "Complex binding patterns");
+ }
+
+ decl.init = null;
+ }
+
+ declarations.push(this.finishNode(decl, "VariableDeclarator"));
+ if (!this.eat(20)) break;
+ }
+
+ return node;
+ }
+
+ parseVarId(decl, kind) {
+ decl.id = this.parseBindingAtom();
+ this.checkLVal(decl.id, "variable declaration", kind === "var" ? BIND_VAR : BIND_LEXICAL, undefined, kind !== "var");
+ }
+
+ parseFunction(node, statement = FUNC_NO_FLAGS, isAsync = false) {
+ const isStatement = statement & FUNC_STATEMENT;
+ const isHangingStatement = statement & FUNC_HANGING_STATEMENT;
+ const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);
+ this.initFunction(node, isAsync);
+
+ if (this.match(54) && isHangingStatement) {
+ this.raise(this.state.start, ErrorMessages.GeneratorInSingleStatementContext);
+ }
+
+ node.generator = this.eat(54);
+
+ if (isStatement) {
+ node.id = this.parseFunctionId(requireId);
+ }
+
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ this.state.maybeInArrowParameters = false;
+ this.scope.enter(SCOPE_FUNCTION);
+ this.prodParam.enter(functionFlags(isAsync, node.generator));
+
+ if (!isStatement) {
+ node.id = this.parseFunctionId();
+ }
+
+ this.parseFunctionParams(node, false);
+ this.withSmartMixTopicForbiddingContext(() => {
+ this.parseFunctionBodyAndFinish(node, isStatement ? "FunctionDeclaration" : "FunctionExpression");
+ });
+ this.prodParam.exit();
+ this.scope.exit();
+
+ if (isStatement && !isHangingStatement) {
+ this.registerFunctionStatementId(node);
+ }
+
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ return node;
+ }
+
+ parseFunctionId(requireId) {
+ return requireId || this.match(5) ? this.parseIdentifier() : null;
+ }
+
+ parseFunctionParams(node, allowModifiers) {
+ this.expect(18);
+ this.expressionScope.enter(newParameterDeclarationScope());
+ node.params = this.parseBindingList(19, 41, false, allowModifiers);
+ this.expressionScope.exit();
+ }
+
+ registerFunctionStatementId(node) {
+ if (!node.id) return;
+ this.scope.declareName(node.id.name, this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.start);
+ }
+
+ parseClass(node, isStatement, optionalId) {
+ this.next();
+ this.takeDecorators(node);
+ const oldStrict = this.state.strict;
+ this.state.strict = true;
+ this.parseClassId(node, isStatement, optionalId);
+ this.parseClassSuper(node);
+ node.body = this.parseClassBody(!!node.superClass, oldStrict);
+ return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
+ }
+
+ isClassProperty() {
+ return this.match(35) || this.match(21) || this.match(16);
+ }
+
+ isClassMethod() {
+ return this.match(18);
+ }
+
+ isNonstaticConstructor(method) {
+ return !method.computed && !method.static && (method.key.name === "constructor" || method.key.value === "constructor");
+ }
+
+ parseClassBody(hadSuperClass, oldStrict) {
+ this.classScope.enter();
+ const state = {
+ hadConstructor: false,
+ hadSuperClass
+ };
+ let decorators = [];
+ const classBody = this.startNode();
+ classBody.body = [];
+ this.expect(13);
+ this.withSmartMixTopicForbiddingContext(() => {
+ while (!this.match(16)) {
+ if (this.eat(21)) {
+ if (decorators.length > 0) {
+ throw this.raise(this.state.lastTokEnd, ErrorMessages.DecoratorSemicolon);
+ }
+
+ continue;
+ }
+
+ if (this.match(32)) {
+ decorators.push(this.parseDecorator());
+ continue;
+ }
+
+ const member = this.startNode();
+
+ if (decorators.length) {
+ member.decorators = decorators;
+ this.resetStartLocationFromNode(member, decorators[0]);
+ decorators = [];
+ }
+
+ this.parseClassMember(classBody, member, state);
+
+ if (member.kind === "constructor" && member.decorators && member.decorators.length > 0) {
+ this.raise(member.start, ErrorMessages.DecoratorConstructor);
+ }
+ }
+ });
+ this.state.strict = oldStrict;
+ this.next();
+
+ if (decorators.length) {
+ throw this.raise(this.state.start, ErrorMessages.TrailingDecorator);
+ }
+
+ this.classScope.exit();
+ return this.finishNode(classBody, "ClassBody");
+ }
+
+ parseClassMemberFromModifier(classBody, member) {
+ const key = this.parseIdentifier(true);
+
+ if (this.isClassMethod()) {
+ const method = member;
+ method.kind = "method";
+ method.computed = false;
+ method.key = key;
+ method.static = false;
+ this.pushClassMethod(classBody, method, false, false, false, false);
+ return true;
+ } else if (this.isClassProperty()) {
+ const prop = member;
+ prop.computed = false;
+ prop.key = key;
+ prop.static = false;
+ classBody.body.push(this.parseClassProperty(prop));
+ return true;
+ }
+
+ this.resetPreviousNodeTrailingComments(key);
+ return false;
+ }
+
+ parseClassMember(classBody, member, state) {
+ const isStatic = this.isContextual("static");
+
+ if (isStatic) {
+ if (this.parseClassMemberFromModifier(classBody, member)) {
+ return;
+ }
+
+ if (this.eat(13)) {
+ this.parseClassStaticBlock(classBody, member);
+ return;
+ }
+ }
+
+ this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);
+ }
+
+ parseClassMemberWithIsStatic(classBody, member, state, isStatic) {
+ const publicMethod = member;
+ const privateMethod = member;
+ const publicProp = member;
+ const privateProp = member;
+ const method = publicMethod;
+ const publicMember = publicMethod;
+ member.static = isStatic;
+
+ if (this.eat(54)) {
+ method.kind = "method";
+ const isPrivateName = this.match(6);
+ this.parseClassElementName(method);
+
+ if (isPrivateName) {
+ this.pushClassPrivateMethod(classBody, privateMethod, true, false);
+ return;
+ }
+
+ if (this.isNonstaticConstructor(publicMethod)) {
+ this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsGenerator);
+ }
+
+ this.pushClassMethod(classBody, publicMethod, true, false, false, false);
+ return;
+ }
+
+ const isContextual = this.match(5) && !this.state.containsEsc;
+ const isPrivate = this.match(6);
+ const key = this.parseClassElementName(member);
+ const maybeQuestionTokenStart = this.state.start;
+ this.parsePostMemberNameModifiers(publicMember);
+
+ if (this.isClassMethod()) {
+ method.kind = "method";
+
+ if (isPrivate) {
+ this.pushClassPrivateMethod(classBody, privateMethod, false, false);
+ return;
+ }
+
+ const isConstructor = this.isNonstaticConstructor(publicMethod);
+ let allowsDirectSuper = false;
+
+ if (isConstructor) {
+ publicMethod.kind = "constructor";
+
+ if (state.hadConstructor && !this.hasPlugin("typescript")) {
+ this.raise(key.start, ErrorMessages.DuplicateConstructor);
+ }
+
+ if (isConstructor && this.hasPlugin("typescript") && member.override) {
+ this.raise(key.start, ErrorMessages.OverrideOnConstructor);
+ }
+
+ state.hadConstructor = true;
+ allowsDirectSuper = state.hadSuperClass;
+ }
+
+ this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);
+ } else if (this.isClassProperty()) {
+ if (isPrivate) {
+ this.pushClassPrivateProperty(classBody, privateProp);
+ } else {
+ this.pushClassProperty(classBody, publicProp);
+ }
+ } else if (isContextual && key.name === "async" && !this.isLineTerminator()) {
+ this.resetPreviousNodeTrailingComments(key);
+ const isGenerator = this.eat(54);
+
+ if (publicMember.optional) {
+ this.unexpected(maybeQuestionTokenStart);
+ }
+
+ method.kind = "method";
+ const isPrivate = this.match(6);
+ this.parseClassElementName(method);
+ this.parsePostMemberNameModifiers(publicMember);
+
+ if (isPrivate) {
+ this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);
+ } else {
+ if (this.isNonstaticConstructor(publicMethod)) {
+ this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAsync);
+ }
+
+ this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);
+ }
+ } else if (isContextual && (key.name === "get" || key.name === "set") && !(this.match(54) && this.isLineTerminator())) {
+ this.resetPreviousNodeTrailingComments(key);
+ method.kind = key.name;
+ const isPrivate = this.match(6);
+ this.parseClassElementName(publicMethod);
+
+ if (isPrivate) {
+ this.pushClassPrivateMethod(classBody, privateMethod, false, false);
+ } else {
+ if (this.isNonstaticConstructor(publicMethod)) {
+ this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAccessor);
+ }
+
+ this.pushClassMethod(classBody, publicMethod, false, false, false, false);
+ }
+
+ this.checkGetterSetterParams(publicMethod);
+ } else if (this.isLineTerminator()) {
+ if (isPrivate) {
+ this.pushClassPrivateProperty(classBody, privateProp);
+ } else {
+ this.pushClassProperty(classBody, publicProp);
+ }
+ } else {
+ this.unexpected();
+ }
+ }
+
+ parseClassElementName(member) {
+ const {
+ type,
+ value,
+ start
+ } = this.state;
+
+ if ((type === 5 || type === 4) && member.static && value === "prototype") {
+ this.raise(start, ErrorMessages.StaticPrototype);
+ }
+
+ if (type === 6 && value === "constructor") {
+ this.raise(start, ErrorMessages.ConstructorClassPrivateField);
+ }
+
+ return this.parsePropertyName(member, true);
+ }
+
+ parseClassStaticBlock(classBody, member) {
+ var _member$decorators;
+
+ this.expectPlugin("classStaticBlock", member.start);
+ this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+ this.prodParam.enter(PARAM);
+ const body = member.body = [];
+ this.parseBlockOrModuleBlockBody(body, undefined, false, 16);
+ this.prodParam.exit();
+ this.scope.exit();
+ this.state.labels = oldLabels;
+ classBody.body.push(this.finishNode(member, "StaticBlock"));
+
+ if ((_member$decorators = member.decorators) != null && _member$decorators.length) {
+ this.raise(member.start, ErrorMessages.DecoratorStaticBlock);
+ }
+ }
+
+ pushClassProperty(classBody, prop) {
+ if (!prop.computed && (prop.key.name === "constructor" || prop.key.value === "constructor")) {
+ this.raise(prop.key.start, ErrorMessages.ConstructorClassField);
+ }
+
+ classBody.body.push(this.parseClassProperty(prop));
+ }
+
+ pushClassPrivateProperty(classBody, prop) {
+ const node = this.parseClassPrivateProperty(prop);
+ classBody.body.push(node);
+ this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.start);
+ }
+
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true));
+ }
+
+ pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
+ const node = this.parseMethod(method, isGenerator, isAsync, false, false, "ClassPrivateMethod", true);
+ classBody.body.push(node);
+ const kind = node.kind === "get" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === "set" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER;
+ this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.start);
+ }
+
+ parsePostMemberNameModifiers(methodOrProp) {}
+
+ parseClassPrivateProperty(node) {
+ this.parseInitializer(node);
+ this.semicolon();
+ return this.finishNode(node, "ClassPrivateProperty");
+ }
+
+ parseClassProperty(node) {
+ this.parseInitializer(node);
+ this.semicolon();
+ return this.finishNode(node, "ClassProperty");
+ }
+
+ parseInitializer(node) {
+ this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);
+ this.expressionScope.enter(newExpressionScope());
+ this.prodParam.enter(PARAM);
+ node.value = this.eat(35) ? this.parseMaybeAssignAllowIn() : null;
+ this.expressionScope.exit();
+ this.prodParam.exit();
+ this.scope.exit();
+ }
+
+ parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) {
+ if (this.match(5)) {
+ node.id = this.parseIdentifier();
+
+ if (isStatement) {
+ this.checkLVal(node.id, "class name", bindingType);
+ }
+ } else {
+ if (optionalId || !isStatement) {
+ node.id = null;
+ } else {
+ this.unexpected(null, ErrorMessages.MissingClassName);
+ }
+ }
+ }
+
+ parseClassSuper(node) {
+ node.superClass = this.eat(80) ? this.parseExprSubscripts() : null;
+ }
+
+ parseExport(node) {
+ const hasDefault = this.maybeParseExportDefaultSpecifier(node);
+ const parseAfterDefault = !hasDefault || this.eat(20);
+ const hasStar = parseAfterDefault && this.eatExportStar(node);
+ const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node);
+ const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(20));
+ const isFromRequired = hasDefault || hasStar;
+
+ if (hasStar && !hasNamespace) {
+ if (hasDefault) this.unexpected();
+ this.parseExportFrom(node, true);
+ return this.finishNode(node, "ExportAllDeclaration");
+ }
+
+ const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);
+
+ if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers || hasNamespace && parseAfterNamespace && !hasSpecifiers) {
+ throw this.unexpected(null, 13);
+ }
+
+ let hasDeclaration;
+
+ if (isFromRequired || hasSpecifiers) {
+ hasDeclaration = false;
+ this.parseExportFrom(node, isFromRequired);
+ } else {
+ hasDeclaration = this.maybeParseExportDeclaration(node);
+ }
+
+ if (isFromRequired || hasSpecifiers || hasDeclaration) {
+ this.checkExport(node, true, false, !!node.source);
+ return this.finishNode(node, "ExportNamedDeclaration");
+ }
+
+ if (this.eat(64)) {
+ node.declaration = this.parseExportDefaultExpression();
+ this.checkExport(node, true, true);
+ return this.finishNode(node, "ExportDefaultDeclaration");
+ }
+
+ throw this.unexpected(null, 13);
+ }
+
+ eatExportStar(node) {
+ return this.eat(54);
+ }
+
+ maybeParseExportDefaultSpecifier(node) {
+ if (this.isExportDefaultSpecifier()) {
+ this.expectPlugin("exportDefaultFrom");
+ const specifier = this.startNode();
+ specifier.exported = this.parseIdentifier(true);
+ node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
+ return true;
+ }
+
+ return false;
+ }
+
+ maybeParseExportNamespaceSpecifier(node) {
+ if (this.isContextual("as")) {
+ if (!node.specifiers) node.specifiers = [];
+ const specifier = this.startNodeAt(this.state.lastTokStart, this.state.lastTokStartLoc);
+ this.next();
+ specifier.exported = this.parseModuleExportName();
+ node.specifiers.push(this.finishNode(specifier, "ExportNamespaceSpecifier"));
+ return true;
+ }
+
+ return false;
+ }
+
+ maybeParseExportNamedSpecifiers(node) {
+ if (this.match(13)) {
+ if (!node.specifiers) node.specifiers = [];
+ node.specifiers.push(...this.parseExportSpecifiers());
+ node.source = null;
+ node.declaration = null;
+ return true;
+ }
+
+ return false;
+ }
+
+ maybeParseExportDeclaration(node) {
+ if (this.shouldParseExportDeclaration()) {
+ node.specifiers = [];
+ node.source = null;
+ node.declaration = this.parseExportDeclaration(node);
+ return true;
+ }
+
+ return false;
+ }
+
+ isAsyncFunction() {
+ if (!this.isContextual("async")) return false;
+ const next = this.nextTokenStart();
+ return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, "function");
+ }
+
+ parseExportDefaultExpression() {
+ const expr = this.startNode();
+ const isAsync = this.isAsyncFunction();
+
+ if (this.match(67) || isAsync) {
+ this.next();
+
+ if (isAsync) {
+ this.next();
+ }
+
+ return this.parseFunction(expr, FUNC_STATEMENT | FUNC_NULLABLE_ID, isAsync);
+ } else if (this.match(79)) {
+ return this.parseClass(expr, true, true);
+ } else if (this.match(32)) {
+ if (this.hasPlugin("decorators") && this.getPluginOption("decorators", "decoratorsBeforeExport")) {
+ this.raise(this.state.start, ErrorMessages.DecoratorBeforeExport);
+ }
+
+ this.parseDecorators(false);
+ return this.parseClass(expr, true, true);
+ } else if (this.match(74) || this.match(73) || this.isLet()) {
+ throw this.raise(this.state.start, ErrorMessages.UnsupportedDefaultExport);
+ } else {
+ const res = this.parseMaybeAssignAllowIn();
+ this.semicolon();
+ return res;
+ }
+ }
+
+ parseExportDeclaration(node) {
+ return this.parseStatement(null);
+ }
+
+ isExportDefaultSpecifier() {
+ if (this.match(5)) {
+ const value = this.state.value;
+
+ if (value === "async" && !this.state.containsEsc || value === "let") {
+ return false;
+ }
+
+ if ((value === "type" || value === "interface") && !this.state.containsEsc) {
+ const l = this.lookahead();
+
+ if (l.type === 5 && l.value !== "from" || l.type === 13) {
+ this.expectOnePlugin(["flow", "typescript"]);
+ return false;
+ }
+ }
+ } else if (!this.match(64)) {
+ return false;
+ }
+
+ const next = this.nextTokenStart();
+ const hasFrom = this.isUnparsedContextual(next, "from");
+
+ if (this.input.charCodeAt(next) === 44 || this.match(5) && hasFrom) {
+ return true;
+ }
+
+ if (this.match(64) && hasFrom) {
+ const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));
+ return nextAfterFrom === 34 || nextAfterFrom === 39;
+ }
+
+ return false;
+ }
+
+ parseExportFrom(node, expect) {
+ if (this.eatContextual("from")) {
+ node.source = this.parseImportSource();
+ this.checkExport(node);
+ const assertions = this.maybeParseImportAssertions();
+
+ if (assertions) {
+ node.assertions = assertions;
+ }
+ } else {
+ if (expect) {
+ this.unexpected();
+ } else {
+ node.source = null;
+ }
+ }
+
+ this.semicolon();
+ }
+
+ shouldParseExportDeclaration() {
+ const {
+ type
+ } = this.state;
+
+ if (type === 32) {
+ this.expectOnePlugin(["decorators", "decorators-legacy"]);
+
+ if (this.hasPlugin("decorators")) {
+ if (this.getPluginOption("decorators", "decoratorsBeforeExport")) {
+ this.unexpected(this.state.start, ErrorMessages.DecoratorBeforeExport);
+ } else {
+ return true;
+ }
+ }
+ }
+
+ return type === 73 || type === 74 || type === 67 || type === 79 || this.isLet() || this.isAsyncFunction();
+ }
+
+ checkExport(node, checkNames, isDefault, isFrom) {
+ if (checkNames) {
+ if (isDefault) {
+ this.checkDuplicateExports(node, "default");
+
+ if (this.hasPlugin("exportDefaultFrom")) {
+ var _declaration$extra;
+
+ const declaration = node.declaration;
+
+ if (declaration.type === "Identifier" && declaration.name === "from" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) {
+ this.raise(declaration.start, ErrorMessages.ExportDefaultFromAsIdentifier);
+ }
+ }
+ } else if (node.specifiers && node.specifiers.length) {
+ for (const specifier of node.specifiers) {
+ const {
+ exported
+ } = specifier;
+ const exportedName = exported.type === "Identifier" ? exported.name : exported.value;
+ this.checkDuplicateExports(specifier, exportedName);
+
+ if (!isFrom && specifier.local) {
+ const {
+ local
+ } = specifier;
+
+ if (local.type !== "Identifier") {
+ this.raise(specifier.start, ErrorMessages.ExportBindingIsString, local.value, exportedName);
+ } else {
+ this.checkReservedWord(local.name, local.start, true, false);
+ this.scope.checkLocalExport(local);
+ }
+ }
+ }
+ } else if (node.declaration) {
+ if (node.declaration.type === "FunctionDeclaration" || node.declaration.type === "ClassDeclaration") {
+ const id = node.declaration.id;
+ if (!id) throw new Error("Assertion failure");
+ this.checkDuplicateExports(node, id.name);
+ } else if (node.declaration.type === "VariableDeclaration") {
+ for (const declaration of node.declaration.declarations) {
+ this.checkDeclaration(declaration.id);
+ }
+ }
+ }
+ }
+
+ const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];
+
+ if (currentContextDecorators.length) {
+ throw this.raise(node.start, ErrorMessages.UnsupportedDecoratorExport);
+ }
+ }
+
+ checkDeclaration(node) {
+ if (node.type === "Identifier") {
+ this.checkDuplicateExports(node, node.name);
+ } else if (node.type === "ObjectPattern") {
+ for (const prop of node.properties) {
+ this.checkDeclaration(prop);
+ }
+ } else if (node.type === "ArrayPattern") {
+ for (const elem of node.elements) {
+ if (elem) {
+ this.checkDeclaration(elem);
+ }
+ }
+ } else if (node.type === "ObjectProperty") {
+ this.checkDeclaration(node.value);
+ } else if (node.type === "RestElement") {
+ this.checkDeclaration(node.argument);
+ } else if (node.type === "AssignmentPattern") {
+ this.checkDeclaration(node.left);
+ }
+ }
+
+ checkDuplicateExports(node, name) {
+ if (this.exportedIdentifiers.has(name)) {
+ this.raise(node.start, name === "default" ? ErrorMessages.DuplicateDefaultExport : ErrorMessages.DuplicateExport, name);
+ }
+
+ this.exportedIdentifiers.add(name);
+ }
+
+ parseExportSpecifiers() {
+ const nodes = [];
+ let first = true;
+ this.expect(13);
+
+ while (!this.eat(16)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(20);
+ if (this.eat(16)) break;
+ }
+
+ const node = this.startNode();
+ const isString = this.match(4);
+ const local = this.parseModuleExportName();
+ node.local = local;
+
+ if (this.eatContextual("as")) {
+ node.exported = this.parseModuleExportName();
+ } else if (isString) {
+ node.exported = cloneStringLiteral(local);
+ } else {
+ node.exported = cloneIdentifier(local);
+ }
+
+ nodes.push(this.finishNode(node, "ExportSpecifier"));
+ }
+
+ return nodes;
+ }
+
+ parseModuleExportName() {
+ if (this.match(4)) {
+ const result = this.parseStringLiteral(this.state.value);
+ const surrogate = result.value.match(loneSurrogate);
+
+ if (surrogate) {
+ this.raise(result.start, ErrorMessages.ModuleExportNameHasLoneSurrogate, surrogate[0].charCodeAt(0).toString(16));
+ }
+
+ return result;
+ }
+
+ return this.parseIdentifier(true);
+ }
+
+ parseImport(node) {
+ node.specifiers = [];
+
+ if (!this.match(4)) {
+ const hasDefault = this.maybeParseDefaultImportSpecifier(node);
+ const parseNext = !hasDefault || this.eat(20);
+ const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);
+ if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);
+ this.expectContextual("from");
+ }
+
+ node.source = this.parseImportSource();
+ const assertions = this.maybeParseImportAssertions();
+
+ if (assertions) {
+ node.assertions = assertions;
+ } else {
+ const attributes = this.maybeParseModuleAttributes();
+
+ if (attributes) {
+ node.attributes = attributes;
+ }
+ }
+
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+ }
+
+ parseImportSource() {
+ if (!this.match(4)) this.unexpected();
+ return this.parseExprAtom();
+ }
+
+ shouldParseDefaultImport(node) {
+ return this.match(5);
+ }
+
+ parseImportSpecifierLocal(node, specifier, type, contextDescription) {
+ specifier.local = this.parseIdentifier();
+ this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);
+ node.specifiers.push(this.finishNode(specifier, type));
+ }
+
+ parseAssertEntries() {
+ const attrs = [];
+ const attrNames = new Set();
+
+ do {
+ if (this.match(16)) {
+ break;
+ }
+
+ const node = this.startNode();
+ const keyName = this.state.value;
+
+ if (attrNames.has(keyName)) {
+ this.raise(this.state.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, keyName);
+ }
+
+ attrNames.add(keyName);
+
+ if (this.match(4)) {
+ node.key = this.parseStringLiteral(keyName);
+ } else {
+ node.key = this.parseIdentifier(true);
+ }
+
+ this.expect(22);
+
+ if (!this.match(4)) {
+ throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);
+ }
+
+ node.value = this.parseStringLiteral(this.state.value);
+ this.finishNode(node, "ImportAttribute");
+ attrs.push(node);
+ } while (this.eat(20));
+
+ return attrs;
+ }
+
+ maybeParseModuleAttributes() {
+ if (this.match(75) && !this.hasPrecedingLineBreak()) {
+ this.expectPlugin("moduleAttributes");
+ this.next();
+ } else {
+ if (this.hasPlugin("moduleAttributes")) return [];
+ return null;
+ }
+
+ const attrs = [];
+ const attributes = new Set();
+
+ do {
+ const node = this.startNode();
+ node.key = this.parseIdentifier(true);
+
+ if (node.key.name !== "type") {
+ this.raise(node.key.start, ErrorMessages.ModuleAttributeDifferentFromType, node.key.name);
+ }
+
+ if (attributes.has(node.key.name)) {
+ this.raise(node.key.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, node.key.name);
+ }
+
+ attributes.add(node.key.name);
+ this.expect(22);
+
+ if (!this.match(4)) {
+ throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);
+ }
+
+ node.value = this.parseStringLiteral(this.state.value);
+ this.finishNode(node, "ImportAttribute");
+ attrs.push(node);
+ } while (this.eat(20));
+
+ return attrs;
+ }
+
+ maybeParseImportAssertions() {
+ if (this.isContextual("assert") && !this.hasPrecedingLineBreak()) {
+ this.expectPlugin("importAssertions");
+ this.next();
+ } else {
+ if (this.hasPlugin("importAssertions")) return [];
+ return null;
+ }
+
+ this.eat(13);
+ const attrs = this.parseAssertEntries();
+ this.eat(16);
+ return attrs;
+ }
+
+ maybeParseDefaultImportSpecifier(node) {
+ if (this.shouldParseDefaultImport(node)) {
+ this.parseImportSpecifierLocal(node, this.startNode(), "ImportDefaultSpecifier", "default import specifier");
+ return true;
+ }
+
+ return false;
+ }
+
+ maybeParseStarImportSpecifier(node) {
+ if (this.match(54)) {
+ const specifier = this.startNode();
+ this.next();
+ this.expectContextual("as");
+ this.parseImportSpecifierLocal(node, specifier, "ImportNamespaceSpecifier", "import namespace specifier");
+ return true;
+ }
+
+ return false;
+ }
+
+ parseNamedImportSpecifiers(node) {
+ let first = true;
+ this.expect(13);
+
+ while (!this.eat(16)) {
+ if (first) {
+ first = false;
+ } else {
+ if (this.eat(22)) {
+ throw this.raise(this.state.start, ErrorMessages.DestructureNamedImport);
+ }
+
+ this.expect(20);
+ if (this.eat(16)) break;
+ }
+
+ this.parseImportSpecifier(node);
+ }
+ }
+
+ parseImportSpecifier(node) {
+ const specifier = this.startNode();
+ const importedIsString = this.match(4);
+ specifier.imported = this.parseModuleExportName();
+
+ if (this.eatContextual("as")) {
+ specifier.local = this.parseIdentifier();
+ } else {
+ const {
+ imported
+ } = specifier;
+
+ if (importedIsString) {
+ throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, imported.value);
+ }
+
+ this.checkReservedWord(imported.name, specifier.start, true, true);
+ specifier.local = cloneIdentifier(imported);
+ }
+
+ this.checkLVal(specifier.local, "import specifier", BIND_LEXICAL);
+ node.specifiers.push(this.finishNode(specifier, "ImportSpecifier"));
+ }
+
+ isThisParam(param) {
+ return param.type === "Identifier" && param.name === "this";
+ }
+
+}
+
+class Parser extends StatementParser {
+ constructor(options, input) {
+ options = getOptions(options);
+ super(options, input);
+ this.options = options;
+ this.initializeScopes();
+ this.plugins = pluginsMap(this.options.plugins);
+ this.filename = options.sourceFilename;
+ }
+
+ getScopeHandler() {
+ return ScopeHandler;
+ }
+
+ parse() {
+ this.enterInitialScopes();
+ const file = this.startNode();
+ const program = this.startNode();
+ this.nextToken();
+ file.errors = null;
+ this.parseTopLevel(file, program);
+ file.errors = this.state.errors;
+ return file;
+ }
+
+}
+
+function pluginsMap(plugins) {
+ const pluginMap = new Map();
+
+ for (const plugin of plugins) {
+ const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];
+ if (!pluginMap.has(name)) pluginMap.set(name, options || {});
+ }
+
+ return pluginMap;
+}
+
+function parse(input, options) {
+ var _options;
+
+ if (((_options = options) == null ? void 0 : _options.sourceType) === "unambiguous") {
+ options = Object.assign({}, options);
+
+ try {
+ options.sourceType = "module";
+ const parser = getParser(options, input);
+ const ast = parser.parse();
+
+ if (parser.sawUnambiguousESM) {
+ return ast;
+ }
+
+ if (parser.ambiguousScriptDifferentAst) {
+ try {
+ options.sourceType = "script";
+ return getParser(options, input).parse();
+ } catch (_unused) {}
+ } else {
+ ast.program.sourceType = "script";
+ }
+
+ return ast;
+ } catch (moduleError) {
+ try {
+ options.sourceType = "script";
+ return getParser(options, input).parse();
+ } catch (_unused2) {}
+
+ throw moduleError;
+ }
+ } else {
+ return getParser(options, input).parse();
+ }
+}
+function parseExpression(input, options) {
+ const parser = getParser(options, input);
+
+ if (parser.options.strictMode) {
+ parser.state.strict = true;
+ }
+
+ return parser.getExpression();
+}
+
+function generateExportedTokenTypes(internalTokenTypes) {
+ const tokenTypes = {};
+
+ for (const typeName of Object.keys(internalTokenTypes)) {
+ tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);
+ }
+
+ return tokenTypes;
+}
+
+const tokTypes = generateExportedTokenTypes(tt);
+
+function getParser(options, input) {
+ let cls = Parser;
+
+ if (options != null && options.plugins) {
+ validatePlugins(options.plugins);
+ cls = getParserClass(options.plugins);
+ }
+
+ return new cls(options, input);
+}
+
+const parserClassCache = {};
+
+function getParserClass(pluginsFromOptions) {
+ const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));
+ const key = pluginList.join("/");
+ let cls = parserClassCache[key];
+
+ if (!cls) {
+ cls = Parser;
+
+ for (const plugin of pluginList) {
+ cls = mixinPlugins[plugin](cls);
+ }
+
+ parserClassCache[key] = cls;
+ }
+
+ return cls;
+}
+
+exports.parse = parse;
+exports.parseExpression = parseExpression;
+exports.tokTypes = tokTypes;
+//# sourceMappingURL=index.js.map
diff --git a/chromium/third_party/node/node_modules/@babel/parser/package.json b/chromium/third_party/node/node_modules/@babel/parser/package.json
new file mode 100644
index 00000000000..d2ef82f707b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/parser/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "@babel/parser",
+ "version": "7.15.7",
+ "description": "A JavaScript parser",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-parser",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A+parser+%28babylon%29%22+is%3Aopen",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "keywords": [
+ "babel",
+ "javascript",
+ "parser",
+ "tc39",
+ "ecmascript",
+ "@babel/parser"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-parser"
+ },
+ "main": "./lib/index.js",
+ "types": "./typings/babel-parser.d.ts",
+ "files": [
+ "bin",
+ "lib",
+ "typings"
+ ],
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "devDependencies": {
+ "@babel/code-frame": "7.14.5",
+ "@babel/helper-fixtures": "7.14.5",
+ "@babel/helper-validator-identifier": "7.15.7",
+ "charcodes": "^0.2.0"
+ },
+ "bin": "./bin/babel-parser.js"
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/LICENSE b/chromium/third_party/node/node_modules/@babel/template/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/builder.js b/chromium/third_party/node/node_modules/@babel/template/lib/builder.js
new file mode 100644
index 00000000000..e65b27d77c7
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/builder.js
@@ -0,0 +1,81 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = createTemplateBuilder;
+
+var _options = require("./options");
+
+var _string = require("./string");
+
+var _literal = require("./literal");
+
+const NO_PLACEHOLDER = (0, _options.validate)({
+ placeholderPattern: false
+});
+
+function createTemplateBuilder(formatter, defaultOpts) {
+ const templateFnCache = new WeakMap();
+ const templateAstCache = new WeakMap();
+ const cachedOpts = defaultOpts || (0, _options.validate)(null);
+ return Object.assign((tpl, ...args) => {
+ if (typeof tpl === "string") {
+ if (args.length > 1) throw new Error("Unexpected extra params.");
+ return extendedTrace((0, _string.default)(formatter, tpl, (0, _options.merge)(cachedOpts, (0, _options.validate)(args[0]))));
+ } else if (Array.isArray(tpl)) {
+ let builder = templateFnCache.get(tpl);
+
+ if (!builder) {
+ builder = (0, _literal.default)(formatter, tpl, cachedOpts);
+ templateFnCache.set(tpl, builder);
+ }
+
+ return extendedTrace(builder(args));
+ } else if (typeof tpl === "object" && tpl) {
+ if (args.length > 0) throw new Error("Unexpected extra params.");
+ return createTemplateBuilder(formatter, (0, _options.merge)(cachedOpts, (0, _options.validate)(tpl)));
+ }
+
+ throw new Error(`Unexpected template param ${typeof tpl}`);
+ }, {
+ ast: (tpl, ...args) => {
+ if (typeof tpl === "string") {
+ if (args.length > 1) throw new Error("Unexpected extra params.");
+ return (0, _string.default)(formatter, tpl, (0, _options.merge)((0, _options.merge)(cachedOpts, (0, _options.validate)(args[0])), NO_PLACEHOLDER))();
+ } else if (Array.isArray(tpl)) {
+ let builder = templateAstCache.get(tpl);
+
+ if (!builder) {
+ builder = (0, _literal.default)(formatter, tpl, (0, _options.merge)(cachedOpts, NO_PLACEHOLDER));
+ templateAstCache.set(tpl, builder);
+ }
+
+ return builder(args)();
+ }
+
+ throw new Error(`Unexpected template param ${typeof tpl}`);
+ }
+ });
+}
+
+function extendedTrace(fn) {
+ let rootStack = "";
+
+ try {
+ throw new Error();
+ } catch (error) {
+ if (error.stack) {
+ rootStack = error.stack.split("\n").slice(3).join("\n");
+ }
+ }
+
+ return arg => {
+ try {
+ return fn(arg);
+ } catch (err) {
+ err.stack += `\n =============\n${rootStack}`;
+ throw err;
+ }
+ };
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/formatters.js b/chromium/third_party/node/node_modules/@babel/template/lib/formatters.js
new file mode 100644
index 00000000000..addc6fee6b6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/formatters.js
@@ -0,0 +1,71 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.program = exports.expression = exports.statement = exports.statements = exports.smart = void 0;
+
+var _t = require("@babel/types");
+
+const {
+ assertExpressionStatement
+} = _t;
+
+function makeStatementFormatter(fn) {
+ return {
+ code: str => `/* @babel/template */;\n${str}`,
+ validate: () => {},
+ unwrap: ast => {
+ return fn(ast.program.body.slice(1));
+ }
+ };
+}
+
+const smart = makeStatementFormatter(body => {
+ if (body.length > 1) {
+ return body;
+ } else {
+ return body[0];
+ }
+});
+exports.smart = smart;
+const statements = makeStatementFormatter(body => body);
+exports.statements = statements;
+const statement = makeStatementFormatter(body => {
+ if (body.length === 0) {
+ throw new Error("Found nothing to return.");
+ }
+
+ if (body.length > 1) {
+ throw new Error("Found multiple statements but wanted one");
+ }
+
+ return body[0];
+});
+exports.statement = statement;
+const expression = {
+ code: str => `(\n${str}\n)`,
+ validate: ast => {
+ if (ast.program.body.length > 1) {
+ throw new Error("Found multiple statements but wanted one");
+ }
+
+ if (expression.unwrap(ast).start === 0) {
+ throw new Error("Parse result included parens.");
+ }
+ },
+ unwrap: ({
+ program
+ }) => {
+ const [stmt] = program.body;
+ assertExpressionStatement(stmt);
+ return stmt.expression;
+ }
+};
+exports.expression = expression;
+const program = {
+ code: str => str,
+ validate: () => {},
+ unwrap: ast => ast.program
+};
+exports.program = program; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/index.js b/chromium/third_party/node/node_modules/@babel/template/lib/index.js
new file mode 100644
index 00000000000..1a673a19bd4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/index.js
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = exports.program = exports.expression = exports.statements = exports.statement = exports.smart = void 0;
+
+var formatters = require("./formatters");
+
+var _builder = require("./builder");
+
+const smart = (0, _builder.default)(formatters.smart);
+exports.smart = smart;
+const statement = (0, _builder.default)(formatters.statement);
+exports.statement = statement;
+const statements = (0, _builder.default)(formatters.statements);
+exports.statements = statements;
+const expression = (0, _builder.default)(formatters.expression);
+exports.expression = expression;
+const program = (0, _builder.default)(formatters.program);
+exports.program = program;
+
+var _default = Object.assign(smart.bind(undefined), {
+ smart,
+ statement,
+ statements,
+ expression,
+ program,
+ ast: smart.ast
+});
+
+exports.default = _default; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/literal.js b/chromium/third_party/node/node_modules/@babel/template/lib/literal.js
new file mode 100644
index 00000000000..fd194c6abb0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/literal.js
@@ -0,0 +1,80 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = literalTemplate;
+
+var _options = require("./options");
+
+var _parse = require("./parse");
+
+var _populate = require("./populate");
+
+function literalTemplate(formatter, tpl, opts) {
+ const {
+ metadata,
+ names
+ } = buildLiteralData(formatter, tpl, opts);
+ return arg => {
+ const defaultReplacements = {};
+ arg.forEach((replacement, i) => {
+ defaultReplacements[names[i]] = replacement;
+ });
+ return arg => {
+ const replacements = (0, _options.normalizeReplacements)(arg);
+
+ if (replacements) {
+ Object.keys(replacements).forEach(key => {
+ if (Object.prototype.hasOwnProperty.call(defaultReplacements, key)) {
+ throw new Error("Unexpected replacement overlap.");
+ }
+ });
+ }
+
+ return formatter.unwrap((0, _populate.default)(metadata, replacements ? Object.assign(replacements, defaultReplacements) : defaultReplacements));
+ };
+ };
+}
+
+function buildLiteralData(formatter, tpl, opts) {
+ let names;
+ let nameSet;
+ let metadata;
+ let prefix = "";
+
+ do {
+ prefix += "$";
+ const result = buildTemplateCode(tpl, prefix);
+ names = result.names;
+ nameSet = new Set(names);
+ metadata = (0, _parse.default)(formatter, formatter.code(result.code), {
+ parser: opts.parser,
+ placeholderWhitelist: new Set(result.names.concat(opts.placeholderWhitelist ? Array.from(opts.placeholderWhitelist) : [])),
+ placeholderPattern: opts.placeholderPattern,
+ preserveComments: opts.preserveComments,
+ syntacticPlaceholders: opts.syntacticPlaceholders
+ });
+ } while (metadata.placeholders.some(placeholder => placeholder.isDuplicate && nameSet.has(placeholder.name)));
+
+ return {
+ metadata,
+ names
+ };
+}
+
+function buildTemplateCode(tpl, prefix) {
+ const names = [];
+ let code = tpl[0];
+
+ for (let i = 1; i < tpl.length; i++) {
+ const value = `${prefix}${i - 1}`;
+ names.push(value);
+ code += value + tpl[i];
+ }
+
+ return {
+ names,
+ code
+ };
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/options.js b/chromium/third_party/node/node_modules/@babel/template/lib/options.js
new file mode 100644
index 00000000000..1bb4fcbeed0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/options.js
@@ -0,0 +1,83 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.merge = merge;
+exports.validate = validate;
+exports.normalizeReplacements = normalizeReplacements;
+const _excluded = ["placeholderWhitelist", "placeholderPattern", "preserveComments", "syntacticPlaceholders"];
+
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+
+function merge(a, b) {
+ const {
+ placeholderWhitelist = a.placeholderWhitelist,
+ placeholderPattern = a.placeholderPattern,
+ preserveComments = a.preserveComments,
+ syntacticPlaceholders = a.syntacticPlaceholders
+ } = b;
+ return {
+ parser: Object.assign({}, a.parser, b.parser),
+ placeholderWhitelist,
+ placeholderPattern,
+ preserveComments,
+ syntacticPlaceholders
+ };
+}
+
+function validate(opts) {
+ if (opts != null && typeof opts !== "object") {
+ throw new Error("Unknown template options.");
+ }
+
+ const _ref = opts || {},
+ {
+ placeholderWhitelist,
+ placeholderPattern,
+ preserveComments,
+ syntacticPlaceholders
+ } = _ref,
+ parser = _objectWithoutPropertiesLoose(_ref, _excluded);
+
+ if (placeholderWhitelist != null && !(placeholderWhitelist instanceof Set)) {
+ throw new Error("'.placeholderWhitelist' must be a Set, null, or undefined");
+ }
+
+ if (placeholderPattern != null && !(placeholderPattern instanceof RegExp) && placeholderPattern !== false) {
+ throw new Error("'.placeholderPattern' must be a RegExp, false, null, or undefined");
+ }
+
+ if (preserveComments != null && typeof preserveComments !== "boolean") {
+ throw new Error("'.preserveComments' must be a boolean, null, or undefined");
+ }
+
+ if (syntacticPlaceholders != null && typeof syntacticPlaceholders !== "boolean") {
+ throw new Error("'.syntacticPlaceholders' must be a boolean, null, or undefined");
+ }
+
+ if (syntacticPlaceholders === true && (placeholderWhitelist != null || placeholderPattern != null)) {
+ throw new Error("'.placeholderWhitelist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'");
+ }
+
+ return {
+ parser,
+ placeholderWhitelist: placeholderWhitelist || undefined,
+ placeholderPattern: placeholderPattern == null ? undefined : placeholderPattern,
+ preserveComments: preserveComments == null ? undefined : preserveComments,
+ syntacticPlaceholders: syntacticPlaceholders == null ? undefined : syntacticPlaceholders
+ };
+}
+
+function normalizeReplacements(replacements) {
+ if (Array.isArray(replacements)) {
+ return replacements.reduce((acc, replacement, i) => {
+ acc["$" + i] = replacement;
+ return acc;
+ }, {});
+ } else if (typeof replacements === "object" || replacements == null) {
+ return replacements || undefined;
+ }
+
+ throw new Error("Template replacements must be an array, object, null, or undefined");
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/parse.js b/chromium/third_party/node/node_modules/@babel/template/lib/parse.js
new file mode 100644
index 00000000000..0d42ed435b3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/parse.js
@@ -0,0 +1,188 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = parseAndBuildMetadata;
+
+var _t = require("@babel/types");
+
+var _parser = require("@babel/parser");
+
+var _codeFrame = require("@babel/code-frame");
+
+const {
+ isCallExpression,
+ isExpressionStatement,
+ isFunction,
+ isIdentifier,
+ isJSXIdentifier,
+ isNewExpression,
+ isPlaceholder,
+ isStatement,
+ isStringLiteral,
+ removePropertiesDeep,
+ traverse
+} = _t;
+const PATTERN = /^[_$A-Z0-9]+$/;
+
+function parseAndBuildMetadata(formatter, code, opts) {
+ const {
+ placeholderWhitelist,
+ placeholderPattern,
+ preserveComments,
+ syntacticPlaceholders
+ } = opts;
+ const ast = parseWithCodeFrame(code, opts.parser, syntacticPlaceholders);
+ removePropertiesDeep(ast, {
+ preserveComments
+ });
+ formatter.validate(ast);
+ const syntactic = {
+ placeholders: [],
+ placeholderNames: new Set()
+ };
+ const legacy = {
+ placeholders: [],
+ placeholderNames: new Set()
+ };
+ const isLegacyRef = {
+ value: undefined
+ };
+ traverse(ast, placeholderVisitorHandler, {
+ syntactic,
+ legacy,
+ isLegacyRef,
+ placeholderWhitelist,
+ placeholderPattern,
+ syntacticPlaceholders
+ });
+ return Object.assign({
+ ast
+ }, isLegacyRef.value ? legacy : syntactic);
+}
+
+function placeholderVisitorHandler(node, ancestors, state) {
+ var _state$placeholderWhi;
+
+ let name;
+
+ if (isPlaceholder(node)) {
+ if (state.syntacticPlaceholders === false) {
+ throw new Error("%%foo%%-style placeholders can't be used when " + "'.syntacticPlaceholders' is false.");
+ } else {
+ name = node.name.name;
+ state.isLegacyRef.value = false;
+ }
+ } else if (state.isLegacyRef.value === false || state.syntacticPlaceholders) {
+ return;
+ } else if (isIdentifier(node) || isJSXIdentifier(node)) {
+ name = node.name;
+ state.isLegacyRef.value = true;
+ } else if (isStringLiteral(node)) {
+ name = node.value;
+ state.isLegacyRef.value = true;
+ } else {
+ return;
+ }
+
+ if (!state.isLegacyRef.value && (state.placeholderPattern != null || state.placeholderWhitelist != null)) {
+ throw new Error("'.placeholderWhitelist' and '.placeholderPattern' aren't compatible" + " with '.syntacticPlaceholders: true'");
+ }
+
+ if (state.isLegacyRef.value && (state.placeholderPattern === false || !(state.placeholderPattern || PATTERN).test(name)) && !((_state$placeholderWhi = state.placeholderWhitelist) != null && _state$placeholderWhi.has(name))) {
+ return;
+ }
+
+ ancestors = ancestors.slice();
+ const {
+ node: parent,
+ key
+ } = ancestors[ancestors.length - 1];
+ let type;
+
+ if (isStringLiteral(node) || isPlaceholder(node, {
+ expectedNode: "StringLiteral"
+ })) {
+ type = "string";
+ } else if (isNewExpression(parent) && key === "arguments" || isCallExpression(parent) && key === "arguments" || isFunction(parent) && key === "params") {
+ type = "param";
+ } else if (isExpressionStatement(parent) && !isPlaceholder(node)) {
+ type = "statement";
+ ancestors = ancestors.slice(0, -1);
+ } else if (isStatement(node) && isPlaceholder(node)) {
+ type = "statement";
+ } else {
+ type = "other";
+ }
+
+ const {
+ placeholders,
+ placeholderNames
+ } = state.isLegacyRef.value ? state.legacy : state.syntactic;
+ placeholders.push({
+ name,
+ type,
+ resolve: ast => resolveAncestors(ast, ancestors),
+ isDuplicate: placeholderNames.has(name)
+ });
+ placeholderNames.add(name);
+}
+
+function resolveAncestors(ast, ancestors) {
+ let parent = ast;
+
+ for (let i = 0; i < ancestors.length - 1; i++) {
+ const {
+ key,
+ index
+ } = ancestors[i];
+
+ if (index === undefined) {
+ parent = parent[key];
+ } else {
+ parent = parent[key][index];
+ }
+ }
+
+ const {
+ key,
+ index
+ } = ancestors[ancestors.length - 1];
+ return {
+ parent,
+ key,
+ index
+ };
+}
+
+function parseWithCodeFrame(code, parserOpts, syntacticPlaceholders) {
+ const plugins = (parserOpts.plugins || []).slice();
+
+ if (syntacticPlaceholders !== false) {
+ plugins.push("placeholders");
+ }
+
+ parserOpts = Object.assign({
+ allowReturnOutsideFunction: true,
+ allowSuperOutsideMethod: true,
+ sourceType: "module"
+ }, parserOpts, {
+ plugins
+ });
+
+ try {
+ return (0, _parser.parse)(code, parserOpts);
+ } catch (err) {
+ const loc = err.loc;
+
+ if (loc) {
+ err.message += "\n" + (0, _codeFrame.codeFrameColumns)(code, {
+ start: loc
+ });
+ err.code = "BABEL_TEMPLATE_PARSE_ERROR";
+ }
+
+ throw err;
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/populate.js b/chromium/third_party/node/node_modules/@babel/template/lib/populate.js
new file mode 100644
index 00000000000..b9125564b71
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/populate.js
@@ -0,0 +1,135 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = populatePlaceholders;
+
+var _t = require("@babel/types");
+
+const {
+ blockStatement,
+ cloneNode,
+ emptyStatement,
+ expressionStatement,
+ identifier,
+ isStatement,
+ isStringLiteral,
+ stringLiteral,
+ validate
+} = _t;
+
+function populatePlaceholders(metadata, replacements) {
+ const ast = cloneNode(metadata.ast);
+
+ if (replacements) {
+ metadata.placeholders.forEach(placeholder => {
+ if (!Object.prototype.hasOwnProperty.call(replacements, placeholder.name)) {
+ const placeholderName = placeholder.name;
+ throw new Error(`Error: No substitution given for "${placeholderName}". If this is not meant to be a
+ placeholder you may want to consider passing one of the following options to @babel/template:
+ - { placeholderPattern: false, placeholderWhitelist: new Set(['${placeholderName}'])}
+ - { placeholderPattern: /^${placeholderName}$/ }`);
+ }
+ });
+ Object.keys(replacements).forEach(key => {
+ if (!metadata.placeholderNames.has(key)) {
+ throw new Error(`Unknown substitution "${key}" given`);
+ }
+ });
+ }
+
+ metadata.placeholders.slice().reverse().forEach(placeholder => {
+ try {
+ applyReplacement(placeholder, ast, replacements && replacements[placeholder.name] || null);
+ } catch (e) {
+ e.message = `@babel/template placeholder "${placeholder.name}": ${e.message}`;
+ throw e;
+ }
+ });
+ return ast;
+}
+
+function applyReplacement(placeholder, ast, replacement) {
+ if (placeholder.isDuplicate) {
+ if (Array.isArray(replacement)) {
+ replacement = replacement.map(node => cloneNode(node));
+ } else if (typeof replacement === "object") {
+ replacement = cloneNode(replacement);
+ }
+ }
+
+ const {
+ parent,
+ key,
+ index
+ } = placeholder.resolve(ast);
+
+ if (placeholder.type === "string") {
+ if (typeof replacement === "string") {
+ replacement = stringLiteral(replacement);
+ }
+
+ if (!replacement || !isStringLiteral(replacement)) {
+ throw new Error("Expected string substitution");
+ }
+ } else if (placeholder.type === "statement") {
+ if (index === undefined) {
+ if (!replacement) {
+ replacement = emptyStatement();
+ } else if (Array.isArray(replacement)) {
+ replacement = blockStatement(replacement);
+ } else if (typeof replacement === "string") {
+ replacement = expressionStatement(identifier(replacement));
+ } else if (!isStatement(replacement)) {
+ replacement = expressionStatement(replacement);
+ }
+ } else {
+ if (replacement && !Array.isArray(replacement)) {
+ if (typeof replacement === "string") {
+ replacement = identifier(replacement);
+ }
+
+ if (!isStatement(replacement)) {
+ replacement = expressionStatement(replacement);
+ }
+ }
+ }
+ } else if (placeholder.type === "param") {
+ if (typeof replacement === "string") {
+ replacement = identifier(replacement);
+ }
+
+ if (index === undefined) throw new Error("Assertion failure.");
+ } else {
+ if (typeof replacement === "string") {
+ replacement = identifier(replacement);
+ }
+
+ if (Array.isArray(replacement)) {
+ throw new Error("Cannot replace single expression with an array.");
+ }
+ }
+
+ if (index === undefined) {
+ validate(parent, key, replacement);
+ parent[key] = replacement;
+ } else {
+ const items = parent[key].slice();
+
+ if (placeholder.type === "statement" || placeholder.type === "param") {
+ if (replacement == null) {
+ items.splice(index, 1);
+ } else if (Array.isArray(replacement)) {
+ items.splice(index, 1, ...replacement);
+ } else {
+ items[index] = replacement;
+ }
+ } else {
+ items[index] = replacement;
+ }
+
+ validate(parent, key, items);
+ parent[key] = items;
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/lib/string.js b/chromium/third_party/node/node_modules/@babel/template/lib/string.js
new file mode 100644
index 00000000000..fa8aade5313
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/lib/string.js
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = stringTemplate;
+
+var _options = require("./options");
+
+var _parse = require("./parse");
+
+var _populate = require("./populate");
+
+function stringTemplate(formatter, code, opts) {
+ code = formatter.code(code);
+ let metadata;
+ return arg => {
+ const replacements = (0, _options.normalizeReplacements)(arg);
+ if (!metadata) metadata = (0, _parse.default)(formatter, code, opts);
+ return formatter.unwrap((0, _populate.default)(metadata, replacements));
+ };
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/template/package.json b/chromium/third_party/node/node_modules/@babel/template/package.json
new file mode 100644
index 00000000000..0a43a23a8c4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/template/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@babel/template",
+ "version": "7.15.4",
+ "description": "Generate an AST from a string template.",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-template",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20template%22+is%3Aopen",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-template"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/code-frame": "^7.14.5",
+ "@babel/parser": "^7.15.4",
+ "@babel/types": "^7.15.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/LICENSE b/chromium/third_party/node/node_modules/@babel/traverse/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/cache.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/cache.js
new file mode 100644
index 00000000000..89f200777be
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/cache.js
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.clear = clear;
+exports.clearPath = clearPath;
+exports.clearScope = clearScope;
+exports.scope = exports.path = void 0;
+let path = new WeakMap();
+exports.path = path;
+let scope = new WeakMap();
+exports.scope = scope;
+
+function clear() {
+ clearPath();
+ clearScope();
+}
+
+function clearPath() {
+ exports.path = path = new WeakMap();
+}
+
+function clearScope() {
+ exports.scope = scope = new WeakMap();
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/context.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/context.js
new file mode 100644
index 00000000000..25e2e0a7501
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/context.js
@@ -0,0 +1,137 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _path = require("./path");
+
+var _t = require("@babel/types");
+
+const {
+ VISITOR_KEYS
+} = _t;
+
+class TraversalContext {
+ constructor(scope, opts, state, parentPath) {
+ this.queue = null;
+ this.priorityQueue = null;
+ this.parentPath = parentPath;
+ this.scope = scope;
+ this.state = state;
+ this.opts = opts;
+ }
+
+ shouldVisit(node) {
+ const opts = this.opts;
+ if (opts.enter || opts.exit) return true;
+ if (opts[node.type]) return true;
+ const keys = VISITOR_KEYS[node.type];
+ if (!(keys != null && keys.length)) return false;
+
+ for (const key of keys) {
+ if (node[key]) return true;
+ }
+
+ return false;
+ }
+
+ create(node, obj, key, listKey) {
+ return _path.default.get({
+ parentPath: this.parentPath,
+ parent: node,
+ container: obj,
+ key: key,
+ listKey
+ });
+ }
+
+ maybeQueue(path, notPriority) {
+ if (this.queue) {
+ if (notPriority) {
+ this.queue.push(path);
+ } else {
+ this.priorityQueue.push(path);
+ }
+ }
+ }
+
+ visitMultiple(container, parent, listKey) {
+ if (container.length === 0) return false;
+ const queue = [];
+
+ for (let key = 0; key < container.length; key++) {
+ const node = container[key];
+
+ if (node && this.shouldVisit(node)) {
+ queue.push(this.create(parent, container, key, listKey));
+ }
+ }
+
+ return this.visitQueue(queue);
+ }
+
+ visitSingle(node, key) {
+ if (this.shouldVisit(node[key])) {
+ return this.visitQueue([this.create(node, node, key)]);
+ } else {
+ return false;
+ }
+ }
+
+ visitQueue(queue) {
+ this.queue = queue;
+ this.priorityQueue = [];
+ const visited = new WeakSet();
+ let stop = false;
+
+ for (const path of queue) {
+ path.resync();
+
+ if (path.contexts.length === 0 || path.contexts[path.contexts.length - 1] !== this) {
+ path.pushContext(this);
+ }
+
+ if (path.key === null) continue;
+ const {
+ node
+ } = path;
+ if (visited.has(node)) continue;
+ if (node) visited.add(node);
+
+ if (path.visit()) {
+ stop = true;
+ break;
+ }
+
+ if (this.priorityQueue.length) {
+ stop = this.visitQueue(this.priorityQueue);
+ this.priorityQueue = [];
+ this.queue = queue;
+ if (stop) break;
+ }
+ }
+
+ for (const path of queue) {
+ path.popContext();
+ }
+
+ this.queue = null;
+ return stop;
+ }
+
+ visit(node, key) {
+ const nodes = node[key];
+ if (!nodes) return false;
+
+ if (Array.isArray(nodes)) {
+ return this.visitMultiple(nodes, node, key);
+ } else {
+ return this.visitSingle(node, key);
+ }
+ }
+
+}
+
+exports.default = TraversalContext; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/hub.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/hub.js
new file mode 100644
index 00000000000..fe139d2a8f2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/hub.js
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+class Hub {
+ getCode() {}
+
+ getScope() {}
+
+ addHelper() {
+ throw new Error("Helpers are not supported by the default hub.");
+ }
+
+ buildError(node, msg, Error = TypeError) {
+ return new Error(msg);
+ }
+
+}
+
+exports.default = Hub; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/index.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/index.js
new file mode 100644
index 00000000000..aa4616c9f63
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/index.js
@@ -0,0 +1,118 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "NodePath", {
+ enumerable: true,
+ get: function () {
+ return _path.default;
+ }
+});
+Object.defineProperty(exports, "Scope", {
+ enumerable: true,
+ get: function () {
+ return _scope.default;
+ }
+});
+Object.defineProperty(exports, "Hub", {
+ enumerable: true,
+ get: function () {
+ return _hub.default;
+ }
+});
+exports.visitors = exports.default = void 0;
+
+var _context = require("./context");
+
+var visitors = require("./visitors");
+
+exports.visitors = visitors;
+
+var _t = require("@babel/types");
+
+var cache = require("./cache");
+
+var _path = require("./path");
+
+var _scope = require("./scope");
+
+var _hub = require("./hub");
+
+const {
+ VISITOR_KEYS,
+ removeProperties,
+ traverseFast
+} = _t;
+
+function traverse(parent, opts = {}, scope, state, parentPath) {
+ if (!parent) return;
+
+ if (!opts.noScope && !scope) {
+ if (parent.type !== "Program" && parent.type !== "File") {
+ throw new Error("You must pass a scope and parentPath unless traversing a Program/File. " + `Instead of that you tried to traverse a ${parent.type} node without ` + "passing scope and parentPath.");
+ }
+ }
+
+ if (!VISITOR_KEYS[parent.type]) {
+ return;
+ }
+
+ visitors.explode(opts);
+ traverse.node(parent, opts, scope, state, parentPath);
+}
+
+var _default = traverse;
+exports.default = _default;
+traverse.visitors = visitors;
+traverse.verify = visitors.verify;
+traverse.explode = visitors.explode;
+
+traverse.cheap = function (node, enter) {
+ return traverseFast(node, enter);
+};
+
+traverse.node = function (node, opts, scope, state, parentPath, skipKeys) {
+ const keys = VISITOR_KEYS[node.type];
+ if (!keys) return;
+ const context = new _context.default(scope, opts, state, parentPath);
+
+ for (const key of keys) {
+ if (skipKeys && skipKeys[key]) continue;
+ if (context.visit(node, key)) return;
+ }
+};
+
+traverse.clearNode = function (node, opts) {
+ removeProperties(node, opts);
+ cache.path.delete(node);
+};
+
+traverse.removeProperties = function (tree, opts) {
+ traverseFast(tree, traverse.clearNode, opts);
+ return tree;
+};
+
+function hasDenylistedType(path, state) {
+ if (path.node.type === state.type) {
+ state.has = true;
+ path.stop();
+ }
+}
+
+traverse.hasType = function (tree, type, denylistTypes) {
+ if (denylistTypes != null && denylistTypes.includes(tree.type)) return false;
+ if (tree.type === type) return true;
+ const state = {
+ has: false,
+ type: type
+ };
+ traverse(tree, {
+ noScope: true,
+ denylist: denylistTypes,
+ enter: hasDenylistedType
+ }, null, state);
+ return state.has;
+};
+
+traverse.cache = cache; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/ancestry.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/ancestry.js
new file mode 100644
index 00000000000..763936bd0f9
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/ancestry.js
@@ -0,0 +1,180 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.findParent = findParent;
+exports.find = find;
+exports.getFunctionParent = getFunctionParent;
+exports.getStatementParent = getStatementParent;
+exports.getEarliestCommonAncestorFrom = getEarliestCommonAncestorFrom;
+exports.getDeepestCommonAncestorFrom = getDeepestCommonAncestorFrom;
+exports.getAncestry = getAncestry;
+exports.isAncestor = isAncestor;
+exports.isDescendant = isDescendant;
+exports.inType = inType;
+
+var _t = require("@babel/types");
+
+var _index = require("./index");
+
+const {
+ VISITOR_KEYS
+} = _t;
+
+function findParent(callback) {
+ let path = this;
+
+ while (path = path.parentPath) {
+ if (callback(path)) return path;
+ }
+
+ return null;
+}
+
+function find(callback) {
+ let path = this;
+
+ do {
+ if (callback(path)) return path;
+ } while (path = path.parentPath);
+
+ return null;
+}
+
+function getFunctionParent() {
+ return this.findParent(p => p.isFunction());
+}
+
+function getStatementParent() {
+ let path = this;
+
+ do {
+ if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) {
+ break;
+ } else {
+ path = path.parentPath;
+ }
+ } while (path);
+
+ if (path && (path.isProgram() || path.isFile())) {
+ throw new Error("File/Program node, we can't possibly find a statement parent to this");
+ }
+
+ return path;
+}
+
+function getEarliestCommonAncestorFrom(paths) {
+ return this.getDeepestCommonAncestorFrom(paths, function (deepest, i, ancestries) {
+ let earliest;
+ const keys = VISITOR_KEYS[deepest.type];
+
+ for (const ancestry of ancestries) {
+ const path = ancestry[i + 1];
+
+ if (!earliest) {
+ earliest = path;
+ continue;
+ }
+
+ if (path.listKey && earliest.listKey === path.listKey) {
+ if (path.key < earliest.key) {
+ earliest = path;
+ continue;
+ }
+ }
+
+ const earliestKeyIndex = keys.indexOf(earliest.parentKey);
+ const currentKeyIndex = keys.indexOf(path.parentKey);
+
+ if (earliestKeyIndex > currentKeyIndex) {
+ earliest = path;
+ }
+ }
+
+ return earliest;
+ });
+}
+
+function getDeepestCommonAncestorFrom(paths, filter) {
+ if (!paths.length) {
+ return this;
+ }
+
+ if (paths.length === 1) {
+ return paths[0];
+ }
+
+ let minDepth = Infinity;
+ let lastCommonIndex, lastCommon;
+ const ancestries = paths.map(path => {
+ const ancestry = [];
+
+ do {
+ ancestry.unshift(path);
+ } while ((path = path.parentPath) && path !== this);
+
+ if (ancestry.length < minDepth) {
+ minDepth = ancestry.length;
+ }
+
+ return ancestry;
+ });
+ const first = ancestries[0];
+
+ depthLoop: for (let i = 0; i < minDepth; i++) {
+ const shouldMatch = first[i];
+
+ for (const ancestry of ancestries) {
+ if (ancestry[i] !== shouldMatch) {
+ break depthLoop;
+ }
+ }
+
+ lastCommonIndex = i;
+ lastCommon = shouldMatch;
+ }
+
+ if (lastCommon) {
+ if (filter) {
+ return filter(lastCommon, lastCommonIndex, ancestries);
+ } else {
+ return lastCommon;
+ }
+ } else {
+ throw new Error("Couldn't find intersection");
+ }
+}
+
+function getAncestry() {
+ let path = this;
+ const paths = [];
+
+ do {
+ paths.push(path);
+ } while (path = path.parentPath);
+
+ return paths;
+}
+
+function isAncestor(maybeDescendant) {
+ return maybeDescendant.isDescendant(this);
+}
+
+function isDescendant(maybeAncestor) {
+ return !!this.findParent(parent => parent === maybeAncestor);
+}
+
+function inType(...candidateTypes) {
+ let path = this;
+
+ while (path) {
+ for (const type of candidateTypes) {
+ if (path.node.type === type) return true;
+ }
+
+ path = path.parentPath;
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/comments.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/comments.js
new file mode 100644
index 00000000000..0aa6b05b699
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/comments.js
@@ -0,0 +1,42 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.shareCommentsWithSiblings = shareCommentsWithSiblings;
+exports.addComment = addComment;
+exports.addComments = addComments;
+
+var _t = require("@babel/types");
+
+const {
+ addComment: _addComment,
+ addComments: _addComments
+} = _t;
+
+function shareCommentsWithSiblings() {
+ if (typeof this.key === "string") return;
+ const node = this.node;
+ if (!node) return;
+ const trailing = node.trailingComments;
+ const leading = node.leadingComments;
+ if (!trailing && !leading) return;
+ const prev = this.getSibling(this.key - 1);
+ const next = this.getSibling(this.key + 1);
+ const hasPrev = Boolean(prev.node);
+ const hasNext = Boolean(next.node);
+
+ if (hasPrev && !hasNext) {
+ prev.addComments("trailing", trailing);
+ } else if (hasNext && !hasPrev) {
+ next.addComments("leading", leading);
+ }
+}
+
+function addComment(type, content, line) {
+ _addComment(this.node, type, content, line);
+}
+
+function addComments(type, comments) {
+ _addComments(this.node, type, comments);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/context.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/context.js
new file mode 100644
index 00000000000..a1b34f53e4b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/context.js
@@ -0,0 +1,253 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.call = call;
+exports._call = _call;
+exports.isBlacklisted = exports.isDenylisted = isDenylisted;
+exports.visit = visit;
+exports.skip = skip;
+exports.skipKey = skipKey;
+exports.stop = stop;
+exports.setScope = setScope;
+exports.setContext = setContext;
+exports.resync = resync;
+exports._resyncParent = _resyncParent;
+exports._resyncKey = _resyncKey;
+exports._resyncList = _resyncList;
+exports._resyncRemoved = _resyncRemoved;
+exports.popContext = popContext;
+exports.pushContext = pushContext;
+exports.setup = setup;
+exports.setKey = setKey;
+exports.requeue = requeue;
+exports._getQueueContexts = _getQueueContexts;
+
+var _index = require("../index");
+
+var _index2 = require("./index");
+
+function call(key) {
+ const opts = this.opts;
+ this.debug(key);
+
+ if (this.node) {
+ if (this._call(opts[key])) return true;
+ }
+
+ if (this.node) {
+ return this._call(opts[this.node.type] && opts[this.node.type][key]);
+ }
+
+ return false;
+}
+
+function _call(fns) {
+ if (!fns) return false;
+
+ for (const fn of fns) {
+ if (!fn) continue;
+ const node = this.node;
+ if (!node) return true;
+ const ret = fn.call(this.state, this, this.state);
+
+ if (ret && typeof ret === "object" && typeof ret.then === "function") {
+ throw new Error(`You appear to be using a plugin with an async traversal visitor, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, you may need to upgrade ` + `your @babel/core version.`);
+ }
+
+ if (ret) {
+ throw new Error(`Unexpected return value from visitor method ${fn}`);
+ }
+
+ if (this.node !== node) return true;
+ if (this._traverseFlags > 0) return true;
+ }
+
+ return false;
+}
+
+function isDenylisted() {
+ var _this$opts$denylist;
+
+ const denylist = (_this$opts$denylist = this.opts.denylist) != null ? _this$opts$denylist : this.opts.blacklist;
+ return denylist && denylist.indexOf(this.node.type) > -1;
+}
+
+function visit() {
+ if (!this.node) {
+ return false;
+ }
+
+ if (this.isDenylisted()) {
+ return false;
+ }
+
+ if (this.opts.shouldSkip && this.opts.shouldSkip(this)) {
+ return false;
+ }
+
+ if (this.shouldSkip || this.call("enter") || this.shouldSkip) {
+ this.debug("Skip...");
+ return this.shouldStop;
+ }
+
+ this.debug("Recursing into...");
+
+ _index.default.node(this.node, this.opts, this.scope, this.state, this, this.skipKeys);
+
+ this.call("exit");
+ return this.shouldStop;
+}
+
+function skip() {
+ this.shouldSkip = true;
+}
+
+function skipKey(key) {
+ if (this.skipKeys == null) {
+ this.skipKeys = {};
+ }
+
+ this.skipKeys[key] = true;
+}
+
+function stop() {
+ this._traverseFlags |= _index2.SHOULD_SKIP | _index2.SHOULD_STOP;
+}
+
+function setScope() {
+ if (this.opts && this.opts.noScope) return;
+ let path = this.parentPath;
+ if (this.key === "key" && path.isMethod()) path = path.parentPath;
+ let target;
+
+ while (path && !target) {
+ if (path.opts && path.opts.noScope) return;
+ target = path.scope;
+ path = path.parentPath;
+ }
+
+ this.scope = this.getScope(target);
+ if (this.scope) this.scope.init();
+}
+
+function setContext(context) {
+ if (this.skipKeys != null) {
+ this.skipKeys = {};
+ }
+
+ this._traverseFlags = 0;
+
+ if (context) {
+ this.context = context;
+ this.state = context.state;
+ this.opts = context.opts;
+ }
+
+ this.setScope();
+ return this;
+}
+
+function resync() {
+ if (this.removed) return;
+
+ this._resyncParent();
+
+ this._resyncList();
+
+ this._resyncKey();
+}
+
+function _resyncParent() {
+ if (this.parentPath) {
+ this.parent = this.parentPath.node;
+ }
+}
+
+function _resyncKey() {
+ if (!this.container) return;
+ if (this.node === this.container[this.key]) return;
+
+ if (Array.isArray(this.container)) {
+ for (let i = 0; i < this.container.length; i++) {
+ if (this.container[i] === this.node) {
+ return this.setKey(i);
+ }
+ }
+ } else {
+ for (const key of Object.keys(this.container)) {
+ if (this.container[key] === this.node) {
+ return this.setKey(key);
+ }
+ }
+ }
+
+ this.key = null;
+}
+
+function _resyncList() {
+ if (!this.parent || !this.inList) return;
+ const newContainer = this.parent[this.listKey];
+ if (this.container === newContainer) return;
+ this.container = newContainer || null;
+}
+
+function _resyncRemoved() {
+ if (this.key == null || !this.container || this.container[this.key] !== this.node) {
+ this._markRemoved();
+ }
+}
+
+function popContext() {
+ this.contexts.pop();
+
+ if (this.contexts.length > 0) {
+ this.setContext(this.contexts[this.contexts.length - 1]);
+ } else {
+ this.setContext(undefined);
+ }
+}
+
+function pushContext(context) {
+ this.contexts.push(context);
+ this.setContext(context);
+}
+
+function setup(parentPath, container, listKey, key) {
+ this.listKey = listKey;
+ this.container = container;
+ this.parentPath = parentPath || this.parentPath;
+ this.setKey(key);
+}
+
+function setKey(key) {
+ var _this$node;
+
+ this.key = key;
+ this.node = this.container[this.key];
+ this.type = (_this$node = this.node) == null ? void 0 : _this$node.type;
+}
+
+function requeue(pathToQueue = this) {
+ if (pathToQueue.removed) return;
+ ;
+ const contexts = this.contexts;
+
+ for (const context of contexts) {
+ context.maybeQueue(pathToQueue);
+ }
+}
+
+function _getQueueContexts() {
+ let path = this;
+ let contexts = this.contexts;
+
+ while (!contexts.length) {
+ path = path.parentPath;
+ if (!path) break;
+ contexts = path.contexts;
+ }
+
+ return contexts;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/conversion.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/conversion.js
new file mode 100644
index 00000000000..2037748e024
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/conversion.js
@@ -0,0 +1,468 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.toComputedKey = toComputedKey;
+exports.ensureBlock = ensureBlock;
+exports.arrowFunctionToShadowed = arrowFunctionToShadowed;
+exports.unwrapFunctionEnvironment = unwrapFunctionEnvironment;
+exports.arrowFunctionToExpression = arrowFunctionToExpression;
+
+var _t = require("@babel/types");
+
+var _helperFunctionName = require("@babel/helper-function-name");
+
+const {
+ arrowFunctionExpression,
+ assignmentExpression,
+ binaryExpression,
+ blockStatement,
+ callExpression,
+ conditionalExpression,
+ expressionStatement,
+ identifier,
+ isIdentifier,
+ jsxIdentifier,
+ memberExpression,
+ metaProperty,
+ numericLiteral,
+ objectExpression,
+ restElement,
+ returnStatement,
+ sequenceExpression,
+ spreadElement,
+ stringLiteral,
+ super: _super,
+ thisExpression,
+ unaryExpression
+} = _t;
+
+function toComputedKey() {
+ let key;
+
+ if (this.isMemberExpression()) {
+ key = this.node.property;
+ } else if (this.isProperty() || this.isMethod()) {
+ key = this.node.key;
+ } else {
+ throw new ReferenceError("todo");
+ }
+
+ if (!this.node.computed) {
+ if (isIdentifier(key)) key = stringLiteral(key.name);
+ }
+
+ return key;
+}
+
+function ensureBlock() {
+ const body = this.get("body");
+ const bodyNode = body.node;
+
+ if (Array.isArray(body)) {
+ throw new Error("Can't convert array path to a block statement");
+ }
+
+ if (!bodyNode) {
+ throw new Error("Can't convert node without a body");
+ }
+
+ if (body.isBlockStatement()) {
+ return bodyNode;
+ }
+
+ const statements = [];
+ let stringPath = "body";
+ let key;
+ let listKey;
+
+ if (body.isStatement()) {
+ listKey = "body";
+ key = 0;
+ statements.push(body.node);
+ } else {
+ stringPath += ".body.0";
+
+ if (this.isFunction()) {
+ key = "argument";
+ statements.push(returnStatement(body.node));
+ } else {
+ key = "expression";
+ statements.push(expressionStatement(body.node));
+ }
+ }
+
+ this.node.body = blockStatement(statements);
+ const parentPath = this.get(stringPath);
+ body.setup(parentPath, listKey ? parentPath.node[listKey] : parentPath.node, listKey, key);
+ return this.node;
+}
+
+function arrowFunctionToShadowed() {
+ if (!this.isArrowFunctionExpression()) return;
+ this.arrowFunctionToExpression();
+}
+
+function unwrapFunctionEnvironment() {
+ if (!this.isArrowFunctionExpression() && !this.isFunctionExpression() && !this.isFunctionDeclaration()) {
+ throw this.buildCodeFrameError("Can only unwrap the environment of a function.");
+ }
+
+ hoistFunctionEnvironment(this);
+}
+
+function arrowFunctionToExpression({
+ allowInsertArrow = true,
+ specCompliant = false,
+ noNewArrows = !specCompliant
+} = {}) {
+ if (!this.isArrowFunctionExpression()) {
+ throw this.buildCodeFrameError("Cannot convert non-arrow function to a function expression.");
+ }
+
+ const thisBinding = hoistFunctionEnvironment(this, noNewArrows, allowInsertArrow);
+ this.ensureBlock();
+ this.node.type = "FunctionExpression";
+
+ if (!noNewArrows) {
+ const checkBinding = thisBinding ? null : this.parentPath.scope.generateUidIdentifier("arrowCheckId");
+
+ if (checkBinding) {
+ this.parentPath.scope.push({
+ id: checkBinding,
+ init: objectExpression([])
+ });
+ }
+
+ this.get("body").unshiftContainer("body", expressionStatement(callExpression(this.hub.addHelper("newArrowCheck"), [thisExpression(), checkBinding ? identifier(checkBinding.name) : identifier(thisBinding)])));
+ this.replaceWith(callExpression(memberExpression((0, _helperFunctionName.default)(this, true) || this.node, identifier("bind")), [checkBinding ? identifier(checkBinding.name) : thisExpression()]));
+ }
+}
+
+function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow = true) {
+ const thisEnvFn = fnPath.findParent(p => {
+ return p.isFunction() && !p.isArrowFunctionExpression() || p.isProgram() || p.isClassProperty({
+ static: false
+ });
+ });
+ const inConstructor = (thisEnvFn == null ? void 0 : thisEnvFn.node.kind) === "constructor";
+
+ if (thisEnvFn.isClassProperty()) {
+ throw fnPath.buildCodeFrameError("Unable to transform arrow inside class property");
+ }
+
+ const {
+ thisPaths,
+ argumentsPaths,
+ newTargetPaths,
+ superProps,
+ superCalls
+ } = getScopeInformation(fnPath);
+
+ if (inConstructor && superCalls.length > 0) {
+ if (!allowInsertArrow) {
+ throw superCalls[0].buildCodeFrameError("Unable to handle nested super() usage in arrow");
+ }
+
+ const allSuperCalls = [];
+ thisEnvFn.traverse({
+ Function(child) {
+ if (child.isArrowFunctionExpression()) return;
+ child.skip();
+ },
+
+ ClassProperty(child) {
+ child.skip();
+ },
+
+ CallExpression(child) {
+ if (!child.get("callee").isSuper()) return;
+ allSuperCalls.push(child);
+ }
+
+ });
+ const superBinding = getSuperBinding(thisEnvFn);
+ allSuperCalls.forEach(superCall => {
+ const callee = identifier(superBinding);
+ callee.loc = superCall.node.callee.loc;
+ superCall.get("callee").replaceWith(callee);
+ });
+ }
+
+ if (argumentsPaths.length > 0) {
+ const argumentsBinding = getBinding(thisEnvFn, "arguments", () => {
+ const args = () => identifier("arguments");
+
+ if (thisEnvFn.scope.path.isProgram()) {
+ return conditionalExpression(binaryExpression("===", unaryExpression("typeof", args()), stringLiteral("undefined")), thisEnvFn.scope.buildUndefinedNode(), args());
+ } else {
+ return args();
+ }
+ });
+ argumentsPaths.forEach(argumentsChild => {
+ const argsRef = identifier(argumentsBinding);
+ argsRef.loc = argumentsChild.node.loc;
+ argumentsChild.replaceWith(argsRef);
+ });
+ }
+
+ if (newTargetPaths.length > 0) {
+ const newTargetBinding = getBinding(thisEnvFn, "newtarget", () => metaProperty(identifier("new"), identifier("target")));
+ newTargetPaths.forEach(targetChild => {
+ const targetRef = identifier(newTargetBinding);
+ targetRef.loc = targetChild.node.loc;
+ targetChild.replaceWith(targetRef);
+ });
+ }
+
+ if (superProps.length > 0) {
+ if (!allowInsertArrow) {
+ throw superProps[0].buildCodeFrameError("Unable to handle nested super.prop usage");
+ }
+
+ const flatSuperProps = superProps.reduce((acc, superProp) => acc.concat(standardizeSuperProperty(superProp)), []);
+ flatSuperProps.forEach(superProp => {
+ const key = superProp.node.computed ? "" : superProp.get("property").node.name;
+ const isAssignment = superProp.parentPath.isAssignmentExpression({
+ left: superProp.node
+ });
+ const isCall = superProp.parentPath.isCallExpression({
+ callee: superProp.node
+ });
+ const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);
+ const args = [];
+
+ if (superProp.node.computed) {
+ args.push(superProp.get("property").node);
+ }
+
+ if (isAssignment) {
+ const value = superProp.parentPath.node.right;
+ args.push(value);
+ }
+
+ const call = callExpression(identifier(superBinding), args);
+
+ if (isCall) {
+ superProp.parentPath.unshiftContainer("arguments", thisExpression());
+ superProp.replaceWith(memberExpression(call, identifier("call")));
+ thisPaths.push(superProp.parentPath.get("arguments.0"));
+ } else if (isAssignment) {
+ superProp.parentPath.replaceWith(call);
+ } else {
+ superProp.replaceWith(call);
+ }
+ });
+ }
+
+ let thisBinding;
+
+ if (thisPaths.length > 0 || !noNewArrows) {
+ thisBinding = getThisBinding(thisEnvFn, inConstructor);
+
+ if (noNewArrows || inConstructor && hasSuperClass(thisEnvFn)) {
+ thisPaths.forEach(thisChild => {
+ const thisRef = thisChild.isJSX() ? jsxIdentifier(thisBinding) : identifier(thisBinding);
+ thisRef.loc = thisChild.node.loc;
+ thisChild.replaceWith(thisRef);
+ });
+ if (!noNewArrows) thisBinding = null;
+ }
+ }
+
+ return thisBinding;
+}
+
+function standardizeSuperProperty(superProp) {
+ if (superProp.parentPath.isAssignmentExpression() && superProp.parentPath.node.operator !== "=") {
+ const assignmentPath = superProp.parentPath;
+ const op = assignmentPath.node.operator.slice(0, -1);
+ const value = assignmentPath.node.right;
+ assignmentPath.node.operator = "=";
+
+ if (superProp.node.computed) {
+ const tmp = superProp.scope.generateDeclaredUidIdentifier("tmp");
+ assignmentPath.get("left").replaceWith(memberExpression(superProp.node.object, assignmentExpression("=", tmp, superProp.node.property), true));
+ assignmentPath.get("right").replaceWith(binaryExpression(op, memberExpression(superProp.node.object, identifier(tmp.name), true), value));
+ } else {
+ assignmentPath.get("left").replaceWith(memberExpression(superProp.node.object, superProp.node.property));
+ assignmentPath.get("right").replaceWith(binaryExpression(op, memberExpression(superProp.node.object, identifier(superProp.node.property.name)), value));
+ }
+
+ return [assignmentPath.get("left"), assignmentPath.get("right").get("left")];
+ } else if (superProp.parentPath.isUpdateExpression()) {
+ const updateExpr = superProp.parentPath;
+ const tmp = superProp.scope.generateDeclaredUidIdentifier("tmp");
+ const computedKey = superProp.node.computed ? superProp.scope.generateDeclaredUidIdentifier("prop") : null;
+ const parts = [assignmentExpression("=", tmp, memberExpression(superProp.node.object, computedKey ? assignmentExpression("=", computedKey, superProp.node.property) : superProp.node.property, superProp.node.computed)), assignmentExpression("=", memberExpression(superProp.node.object, computedKey ? identifier(computedKey.name) : superProp.node.property, superProp.node.computed), binaryExpression("+", identifier(tmp.name), numericLiteral(1)))];
+
+ if (!superProp.parentPath.node.prefix) {
+ parts.push(identifier(tmp.name));
+ }
+
+ updateExpr.replaceWith(sequenceExpression(parts));
+ const left = updateExpr.get("expressions.0.right");
+ const right = updateExpr.get("expressions.1.left");
+ return [left, right];
+ }
+
+ return [superProp];
+}
+
+function hasSuperClass(thisEnvFn) {
+ return thisEnvFn.isClassMethod() && !!thisEnvFn.parentPath.parentPath.node.superClass;
+}
+
+function getThisBinding(thisEnvFn, inConstructor) {
+ return getBinding(thisEnvFn, "this", thisBinding => {
+ if (!inConstructor || !hasSuperClass(thisEnvFn)) return thisExpression();
+ const supers = new WeakSet();
+ thisEnvFn.traverse({
+ Function(child) {
+ if (child.isArrowFunctionExpression()) return;
+ child.skip();
+ },
+
+ ClassProperty(child) {
+ child.skip();
+ },
+
+ CallExpression(child) {
+ if (!child.get("callee").isSuper()) return;
+ if (supers.has(child.node)) return;
+ supers.add(child.node);
+ child.replaceWithMultiple([child.node, assignmentExpression("=", identifier(thisBinding), identifier("this"))]);
+ }
+
+ });
+ });
+}
+
+function getSuperBinding(thisEnvFn) {
+ return getBinding(thisEnvFn, "supercall", () => {
+ const argsBinding = thisEnvFn.scope.generateUidIdentifier("args");
+ return arrowFunctionExpression([restElement(argsBinding)], callExpression(_super(), [spreadElement(identifier(argsBinding.name))]));
+ });
+}
+
+function getSuperPropBinding(thisEnvFn, isAssignment, propName) {
+ const op = isAssignment ? "set" : "get";
+ return getBinding(thisEnvFn, `superprop_${op}:${propName || ""}`, () => {
+ const argsList = [];
+ let fnBody;
+
+ if (propName) {
+ fnBody = memberExpression(_super(), identifier(propName));
+ } else {
+ const method = thisEnvFn.scope.generateUidIdentifier("prop");
+ argsList.unshift(method);
+ fnBody = memberExpression(_super(), identifier(method.name), true);
+ }
+
+ if (isAssignment) {
+ const valueIdent = thisEnvFn.scope.generateUidIdentifier("value");
+ argsList.push(valueIdent);
+ fnBody = assignmentExpression("=", fnBody, identifier(valueIdent.name));
+ }
+
+ return arrowFunctionExpression(argsList, fnBody);
+ });
+}
+
+function getBinding(thisEnvFn, key, init) {
+ const cacheKey = "binding:" + key;
+ let data = thisEnvFn.getData(cacheKey);
+
+ if (!data) {
+ const id = thisEnvFn.scope.generateUidIdentifier(key);
+ data = id.name;
+ thisEnvFn.setData(cacheKey, data);
+ thisEnvFn.scope.push({
+ id: id,
+ init: init(data)
+ });
+ }
+
+ return data;
+}
+
+function getScopeInformation(fnPath) {
+ const thisPaths = [];
+ const argumentsPaths = [];
+ const newTargetPaths = [];
+ const superProps = [];
+ const superCalls = [];
+ fnPath.traverse({
+ ClassProperty(child) {
+ child.skip();
+ },
+
+ Function(child) {
+ if (child.isArrowFunctionExpression()) return;
+ child.skip();
+ },
+
+ ThisExpression(child) {
+ thisPaths.push(child);
+ },
+
+ JSXIdentifier(child) {
+ if (child.node.name !== "this") return;
+
+ if (!child.parentPath.isJSXMemberExpression({
+ object: child.node
+ }) && !child.parentPath.isJSXOpeningElement({
+ name: child.node
+ })) {
+ return;
+ }
+
+ thisPaths.push(child);
+ },
+
+ CallExpression(child) {
+ if (child.get("callee").isSuper()) superCalls.push(child);
+ },
+
+ MemberExpression(child) {
+ if (child.get("object").isSuper()) superProps.push(child);
+ },
+
+ ReferencedIdentifier(child) {
+ if (child.node.name !== "arguments") return;
+ let curr = child.scope;
+
+ do {
+ if (curr.hasOwnBinding("arguments")) {
+ curr.rename("arguments");
+ return;
+ }
+
+ if (curr.path.isFunction() && !curr.path.isArrowFunctionExpression()) {
+ break;
+ }
+ } while (curr = curr.parent);
+
+ argumentsPaths.push(child);
+ },
+
+ MetaProperty(child) {
+ if (!child.get("meta").isIdentifier({
+ name: "new"
+ })) return;
+ if (!child.get("property").isIdentifier({
+ name: "target"
+ })) return;
+ newTargetPaths.push(child);
+ }
+
+ });
+ return {
+ thisPaths,
+ argumentsPaths,
+ newTargetPaths,
+ superProps,
+ superCalls
+ };
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/evaluation.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/evaluation.js
new file mode 100644
index 00000000000..1bea6807cb8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/evaluation.js
@@ -0,0 +1,401 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.evaluateTruthy = evaluateTruthy;
+exports.evaluate = evaluate;
+const VALID_CALLEES = ["String", "Number", "Math"];
+const INVALID_METHODS = ["random"];
+
+function evaluateTruthy() {
+ const res = this.evaluate();
+ if (res.confident) return !!res.value;
+}
+
+function deopt(path, state) {
+ if (!state.confident) return;
+ state.deoptPath = path;
+ state.confident = false;
+}
+
+function evaluateCached(path, state) {
+ const {
+ node
+ } = path;
+ const {
+ seen
+ } = state;
+
+ if (seen.has(node)) {
+ const existing = seen.get(node);
+
+ if (existing.resolved) {
+ return existing.value;
+ } else {
+ deopt(path, state);
+ return;
+ }
+ } else {
+ const item = {
+ resolved: false
+ };
+ seen.set(node, item);
+
+ const val = _evaluate(path, state);
+
+ if (state.confident) {
+ item.resolved = true;
+ item.value = val;
+ }
+
+ return val;
+ }
+}
+
+function _evaluate(path, state) {
+ if (!state.confident) return;
+
+ if (path.isSequenceExpression()) {
+ const exprs = path.get("expressions");
+ return evaluateCached(exprs[exprs.length - 1], state);
+ }
+
+ if (path.isStringLiteral() || path.isNumericLiteral() || path.isBooleanLiteral()) {
+ return path.node.value;
+ }
+
+ if (path.isNullLiteral()) {
+ return null;
+ }
+
+ if (path.isTemplateLiteral()) {
+ return evaluateQuasis(path, path.node.quasis, state);
+ }
+
+ if (path.isTaggedTemplateExpression() && path.get("tag").isMemberExpression()) {
+ const object = path.get("tag.object");
+ const {
+ node: {
+ name
+ }
+ } = object;
+ const property = path.get("tag.property");
+
+ if (object.isIdentifier() && name === "String" && !path.scope.getBinding(name) && property.isIdentifier() && property.node.name === "raw") {
+ return evaluateQuasis(path, path.node.quasi.quasis, state, true);
+ }
+ }
+
+ if (path.isConditionalExpression()) {
+ const testResult = evaluateCached(path.get("test"), state);
+ if (!state.confident) return;
+
+ if (testResult) {
+ return evaluateCached(path.get("consequent"), state);
+ } else {
+ return evaluateCached(path.get("alternate"), state);
+ }
+ }
+
+ if (path.isExpressionWrapper()) {
+ return evaluateCached(path.get("expression"), state);
+ }
+
+ if (path.isMemberExpression() && !path.parentPath.isCallExpression({
+ callee: path.node
+ })) {
+ const property = path.get("property");
+ const object = path.get("object");
+
+ if (object.isLiteral() && property.isIdentifier()) {
+ const value = object.node.value;
+ const type = typeof value;
+
+ if (type === "number" || type === "string") {
+ return value[property.node.name];
+ }
+ }
+ }
+
+ if (path.isReferencedIdentifier()) {
+ const binding = path.scope.getBinding(path.node.name);
+
+ if (binding && binding.constantViolations.length > 0) {
+ return deopt(binding.path, state);
+ }
+
+ if (binding && path.node.start < binding.path.node.end) {
+ return deopt(binding.path, state);
+ }
+
+ if (binding != null && binding.hasValue) {
+ return binding.value;
+ } else {
+ if (path.node.name === "undefined") {
+ return binding ? deopt(binding.path, state) : undefined;
+ } else if (path.node.name === "Infinity") {
+ return binding ? deopt(binding.path, state) : Infinity;
+ } else if (path.node.name === "NaN") {
+ return binding ? deopt(binding.path, state) : NaN;
+ }
+
+ const resolved = path.resolve();
+
+ if (resolved === path) {
+ return deopt(path, state);
+ } else {
+ return evaluateCached(resolved, state);
+ }
+ }
+ }
+
+ if (path.isUnaryExpression({
+ prefix: true
+ })) {
+ if (path.node.operator === "void") {
+ return undefined;
+ }
+
+ const argument = path.get("argument");
+
+ if (path.node.operator === "typeof" && (argument.isFunction() || argument.isClass())) {
+ return "function";
+ }
+
+ const arg = evaluateCached(argument, state);
+ if (!state.confident) return;
+
+ switch (path.node.operator) {
+ case "!":
+ return !arg;
+
+ case "+":
+ return +arg;
+
+ case "-":
+ return -arg;
+
+ case "~":
+ return ~arg;
+
+ case "typeof":
+ return typeof arg;
+ }
+ }
+
+ if (path.isArrayExpression()) {
+ const arr = [];
+ const elems = path.get("elements");
+
+ for (const elem of elems) {
+ const elemValue = elem.evaluate();
+
+ if (elemValue.confident) {
+ arr.push(elemValue.value);
+ } else {
+ return deopt(elemValue.deopt, state);
+ }
+ }
+
+ return arr;
+ }
+
+ if (path.isObjectExpression()) {
+ const obj = {};
+ const props = path.get("properties");
+
+ for (const prop of props) {
+ if (prop.isObjectMethod() || prop.isSpreadElement()) {
+ return deopt(prop, state);
+ }
+
+ const keyPath = prop.get("key");
+ let key = keyPath;
+
+ if (prop.node.computed) {
+ key = key.evaluate();
+
+ if (!key.confident) {
+ return deopt(key.deopt, state);
+ }
+
+ key = key.value;
+ } else if (key.isIdentifier()) {
+ key = key.node.name;
+ } else {
+ key = key.node.value;
+ }
+
+ const valuePath = prop.get("value");
+ let value = valuePath.evaluate();
+
+ if (!value.confident) {
+ return deopt(value.deopt, state);
+ }
+
+ value = value.value;
+ obj[key] = value;
+ }
+
+ return obj;
+ }
+
+ if (path.isLogicalExpression()) {
+ const wasConfident = state.confident;
+ const left = evaluateCached(path.get("left"), state);
+ const leftConfident = state.confident;
+ state.confident = wasConfident;
+ const right = evaluateCached(path.get("right"), state);
+ const rightConfident = state.confident;
+
+ switch (path.node.operator) {
+ case "||":
+ state.confident = leftConfident && (!!left || rightConfident);
+ if (!state.confident) return;
+ return left || right;
+
+ case "&&":
+ state.confident = leftConfident && (!left || rightConfident);
+ if (!state.confident) return;
+ return left && right;
+ }
+ }
+
+ if (path.isBinaryExpression()) {
+ const left = evaluateCached(path.get("left"), state);
+ if (!state.confident) return;
+ const right = evaluateCached(path.get("right"), state);
+ if (!state.confident) return;
+
+ switch (path.node.operator) {
+ case "-":
+ return left - right;
+
+ case "+":
+ return left + right;
+
+ case "/":
+ return left / right;
+
+ case "*":
+ return left * right;
+
+ case "%":
+ return left % right;
+
+ case "**":
+ return Math.pow(left, right);
+
+ case "<":
+ return left < right;
+
+ case ">":
+ return left > right;
+
+ case "<=":
+ return left <= right;
+
+ case ">=":
+ return left >= right;
+
+ case "==":
+ return left == right;
+
+ case "!=":
+ return left != right;
+
+ case "===":
+ return left === right;
+
+ case "!==":
+ return left !== right;
+
+ case "|":
+ return left | right;
+
+ case "&":
+ return left & right;
+
+ case "^":
+ return left ^ right;
+
+ case "<<":
+ return left << right;
+
+ case ">>":
+ return left >> right;
+
+ case ">>>":
+ return left >>> right;
+ }
+ }
+
+ if (path.isCallExpression()) {
+ const callee = path.get("callee");
+ let context;
+ let func;
+
+ if (callee.isIdentifier() && !path.scope.getBinding(callee.node.name) && VALID_CALLEES.indexOf(callee.node.name) >= 0) {
+ func = global[callee.node.name];
+ }
+
+ if (callee.isMemberExpression()) {
+ const object = callee.get("object");
+ const property = callee.get("property");
+
+ if (object.isIdentifier() && property.isIdentifier() && VALID_CALLEES.indexOf(object.node.name) >= 0 && INVALID_METHODS.indexOf(property.node.name) < 0) {
+ context = global[object.node.name];
+ func = context[property.node.name];
+ }
+
+ if (object.isLiteral() && property.isIdentifier()) {
+ const type = typeof object.node.value;
+
+ if (type === "string" || type === "number") {
+ context = object.node.value;
+ func = context[property.node.name];
+ }
+ }
+ }
+
+ if (func) {
+ const args = path.get("arguments").map(arg => evaluateCached(arg, state));
+ if (!state.confident) return;
+ return func.apply(context, args);
+ }
+ }
+
+ deopt(path, state);
+}
+
+function evaluateQuasis(path, quasis, state, raw = false) {
+ let str = "";
+ let i = 0;
+ const exprs = path.get("expressions");
+
+ for (const elem of quasis) {
+ if (!state.confident) break;
+ str += raw ? elem.value.raw : elem.value.cooked;
+ const expr = exprs[i++];
+ if (expr) str += String(evaluateCached(expr, state));
+ }
+
+ if (!state.confident) return;
+ return str;
+}
+
+function evaluate() {
+ const state = {
+ confident: true,
+ deoptPath: null,
+ seen: new Map()
+ };
+ let value = evaluateCached(this, state);
+ if (!state.confident) value = undefined;
+ return {
+ confident: state.confident,
+ deopt: state.deoptPath,
+ value: value
+ };
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/family.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/family.js
new file mode 100644
index 00000000000..111a331e181
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/family.js
@@ -0,0 +1,407 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getOpposite = getOpposite;
+exports.getCompletionRecords = getCompletionRecords;
+exports.getSibling = getSibling;
+exports.getPrevSibling = getPrevSibling;
+exports.getNextSibling = getNextSibling;
+exports.getAllNextSiblings = getAllNextSiblings;
+exports.getAllPrevSiblings = getAllPrevSiblings;
+exports.get = get;
+exports._getKey = _getKey;
+exports._getPattern = _getPattern;
+exports.getBindingIdentifiers = getBindingIdentifiers;
+exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers;
+exports.getBindingIdentifierPaths = getBindingIdentifierPaths;
+exports.getOuterBindingIdentifierPaths = getOuterBindingIdentifierPaths;
+
+var _index = require("./index");
+
+var _t = require("@babel/types");
+
+const {
+ getBindingIdentifiers: _getBindingIdentifiers,
+ getOuterBindingIdentifiers: _getOuterBindingIdentifiers,
+ isDeclaration,
+ numericLiteral,
+ unaryExpression
+} = _t;
+const NORMAL_COMPLETION = 0;
+const BREAK_COMPLETION = 1;
+
+function NormalCompletion(path) {
+ return {
+ type: NORMAL_COMPLETION,
+ path
+ };
+}
+
+function BreakCompletion(path) {
+ return {
+ type: BREAK_COMPLETION,
+ path
+ };
+}
+
+function getOpposite() {
+ if (this.key === "left") {
+ return this.getSibling("right");
+ } else if (this.key === "right") {
+ return this.getSibling("left");
+ }
+
+ return null;
+}
+
+function addCompletionRecords(path, records, context) {
+ if (path) {
+ records.push(..._getCompletionRecords(path, context));
+ }
+
+ return records;
+}
+
+function completionRecordForSwitch(cases, records, context) {
+ let lastNormalCompletions = [];
+
+ for (let i = 0; i < cases.length; i++) {
+ const casePath = cases[i];
+
+ const caseCompletions = _getCompletionRecords(casePath, context);
+
+ const normalCompletions = [];
+ const breakCompletions = [];
+
+ for (const c of caseCompletions) {
+ if (c.type === NORMAL_COMPLETION) {
+ normalCompletions.push(c);
+ }
+
+ if (c.type === BREAK_COMPLETION) {
+ breakCompletions.push(c);
+ }
+ }
+
+ if (normalCompletions.length) {
+ lastNormalCompletions = normalCompletions;
+ }
+
+ records.push(...breakCompletions);
+ }
+
+ records.push(...lastNormalCompletions);
+ return records;
+}
+
+function normalCompletionToBreak(completions) {
+ completions.forEach(c => {
+ c.type = BREAK_COMPLETION;
+ });
+}
+
+function replaceBreakStatementInBreakCompletion(completions, reachable) {
+ completions.forEach(c => {
+ if (c.path.isBreakStatement({
+ label: null
+ })) {
+ if (reachable) {
+ c.path.replaceWith(unaryExpression("void", numericLiteral(0)));
+ } else {
+ c.path.remove();
+ }
+ }
+ });
+}
+
+function getStatementListCompletion(paths, context) {
+ const completions = [];
+
+ if (context.canHaveBreak) {
+ let lastNormalCompletions = [];
+
+ for (let i = 0; i < paths.length; i++) {
+ const path = paths[i];
+ const newContext = Object.assign({}, context, {
+ inCaseClause: false
+ });
+
+ if (path.isBlockStatement() && (context.inCaseClause || context.shouldPopulateBreak)) {
+ newContext.shouldPopulateBreak = true;
+ } else {
+ newContext.shouldPopulateBreak = false;
+ }
+
+ const statementCompletions = _getCompletionRecords(path, newContext);
+
+ if (statementCompletions.length > 0 && statementCompletions.every(c => c.type === BREAK_COMPLETION)) {
+ if (lastNormalCompletions.length > 0 && statementCompletions.every(c => c.path.isBreakStatement({
+ label: null
+ }))) {
+ normalCompletionToBreak(lastNormalCompletions);
+ completions.push(...lastNormalCompletions);
+
+ if (lastNormalCompletions.some(c => c.path.isDeclaration())) {
+ completions.push(...statementCompletions);
+ replaceBreakStatementInBreakCompletion(statementCompletions, true);
+ }
+
+ replaceBreakStatementInBreakCompletion(statementCompletions, false);
+ } else {
+ completions.push(...statementCompletions);
+
+ if (!context.shouldPopulateBreak) {
+ replaceBreakStatementInBreakCompletion(statementCompletions, true);
+ }
+ }
+
+ break;
+ }
+
+ if (i === paths.length - 1) {
+ completions.push(...statementCompletions);
+ } else {
+ lastNormalCompletions = [];
+
+ for (let i = 0; i < statementCompletions.length; i++) {
+ const c = statementCompletions[i];
+
+ if (c.type === BREAK_COMPLETION) {
+ completions.push(c);
+ }
+
+ if (c.type === NORMAL_COMPLETION) {
+ lastNormalCompletions.push(c);
+ }
+ }
+ }
+ }
+ } else if (paths.length) {
+ for (let i = paths.length - 1; i >= 0; i--) {
+ const pathCompletions = _getCompletionRecords(paths[i], context);
+
+ if (pathCompletions.length > 1 || pathCompletions.length === 1 && !pathCompletions[0].path.isVariableDeclaration()) {
+ completions.push(...pathCompletions);
+ break;
+ }
+ }
+ }
+
+ return completions;
+}
+
+function _getCompletionRecords(path, context) {
+ let records = [];
+
+ if (path.isIfStatement()) {
+ records = addCompletionRecords(path.get("consequent"), records, context);
+ records = addCompletionRecords(path.get("alternate"), records, context);
+ } else if (path.isDoExpression() || path.isFor() || path.isWhile() || path.isLabeledStatement()) {
+ return addCompletionRecords(path.get("body"), records, context);
+ } else if (path.isProgram() || path.isBlockStatement()) {
+ return getStatementListCompletion(path.get("body"), context);
+ } else if (path.isFunction()) {
+ return _getCompletionRecords(path.get("body"), context);
+ } else if (path.isTryStatement()) {
+ records = addCompletionRecords(path.get("block"), records, context);
+ records = addCompletionRecords(path.get("handler"), records, context);
+ } else if (path.isCatchClause()) {
+ return addCompletionRecords(path.get("body"), records, context);
+ } else if (path.isSwitchStatement()) {
+ return completionRecordForSwitch(path.get("cases"), records, context);
+ } else if (path.isSwitchCase()) {
+ return getStatementListCompletion(path.get("consequent"), {
+ canHaveBreak: true,
+ shouldPopulateBreak: false,
+ inCaseClause: true
+ });
+ } else if (path.isBreakStatement()) {
+ records.push(BreakCompletion(path));
+ } else {
+ records.push(NormalCompletion(path));
+ }
+
+ return records;
+}
+
+function getCompletionRecords() {
+ const records = _getCompletionRecords(this, {
+ canHaveBreak: false,
+ shouldPopulateBreak: false,
+ inCaseClause: false
+ });
+
+ return records.map(r => r.path);
+}
+
+function getSibling(key) {
+ return _index.default.get({
+ parentPath: this.parentPath,
+ parent: this.parent,
+ container: this.container,
+ listKey: this.listKey,
+ key: key
+ }).setContext(this.context);
+}
+
+function getPrevSibling() {
+ return this.getSibling(this.key - 1);
+}
+
+function getNextSibling() {
+ return this.getSibling(this.key + 1);
+}
+
+function getAllNextSiblings() {
+ let _key = this.key;
+ let sibling = this.getSibling(++_key);
+ const siblings = [];
+
+ while (sibling.node) {
+ siblings.push(sibling);
+ sibling = this.getSibling(++_key);
+ }
+
+ return siblings;
+}
+
+function getAllPrevSiblings() {
+ let _key = this.key;
+ let sibling = this.getSibling(--_key);
+ const siblings = [];
+
+ while (sibling.node) {
+ siblings.push(sibling);
+ sibling = this.getSibling(--_key);
+ }
+
+ return siblings;
+}
+
+function get(key, context = true) {
+ if (context === true) context = this.context;
+ const parts = key.split(".");
+
+ if (parts.length === 1) {
+ return this._getKey(key, context);
+ } else {
+ return this._getPattern(parts, context);
+ }
+}
+
+function _getKey(key, context) {
+ const node = this.node;
+ const container = node[key];
+
+ if (Array.isArray(container)) {
+ return container.map((_, i) => {
+ return _index.default.get({
+ listKey: key,
+ parentPath: this,
+ parent: node,
+ container: container,
+ key: i
+ }).setContext(context);
+ });
+ } else {
+ return _index.default.get({
+ parentPath: this,
+ parent: node,
+ container: node,
+ key: key
+ }).setContext(context);
+ }
+}
+
+function _getPattern(parts, context) {
+ let path = this;
+
+ for (const part of parts) {
+ if (part === ".") {
+ path = path.parentPath;
+ } else {
+ if (Array.isArray(path)) {
+ path = path[part];
+ } else {
+ path = path.get(part, context);
+ }
+ }
+ }
+
+ return path;
+}
+
+function getBindingIdentifiers(duplicates) {
+ return _getBindingIdentifiers(this.node, duplicates);
+}
+
+function getOuterBindingIdentifiers(duplicates) {
+ return _getOuterBindingIdentifiers(this.node, duplicates);
+}
+
+function getBindingIdentifierPaths(duplicates = false, outerOnly = false) {
+ const path = this;
+ const search = [path];
+ const ids = Object.create(null);
+
+ while (search.length) {
+ const id = search.shift();
+ if (!id) continue;
+ if (!id.node) continue;
+ const keys = _getBindingIdentifiers.keys[id.node.type];
+
+ if (id.isIdentifier()) {
+ if (duplicates) {
+ const _ids = ids[id.node.name] = ids[id.node.name] || [];
+
+ _ids.push(id);
+ } else {
+ ids[id.node.name] = id;
+ }
+
+ continue;
+ }
+
+ if (id.isExportDeclaration()) {
+ const declaration = id.get("declaration");
+
+ if (isDeclaration(declaration)) {
+ search.push(declaration);
+ }
+
+ continue;
+ }
+
+ if (outerOnly) {
+ if (id.isFunctionDeclaration()) {
+ search.push(id.get("id"));
+ continue;
+ }
+
+ if (id.isFunctionExpression()) {
+ continue;
+ }
+ }
+
+ if (keys) {
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ const child = id.get(key);
+
+ if (Array.isArray(child)) {
+ search.push(...child);
+ } else if (child.node) {
+ search.push(child);
+ }
+ }
+ }
+ }
+
+ return ids;
+}
+
+function getOuterBindingIdentifierPaths(duplicates) {
+ return this.getBindingIdentifierPaths(duplicates, true);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/asserts.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/asserts.js
new file mode 100644
index 00000000000..bee8a438ea4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/asserts.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var t = require("@babel/types");
+
+var _index = require("../index"); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/validators.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/validators.js
new file mode 100644
index 00000000000..bee8a438ea4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/validators.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var t = require("@babel/types");
+
+var _index = require("../index"); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/virtual-types.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/virtual-types.js
new file mode 100644
index 00000000000..bf37ed9378a
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/generated/virtual-types.js
@@ -0,0 +1,3 @@
+"use strict";
+
+var t = require("@babel/types"); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/index.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/index.js
new file mode 100644
index 00000000000..0a1dd80bc0b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/index.js
@@ -0,0 +1,253 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = exports.SHOULD_SKIP = exports.SHOULD_STOP = exports.REMOVED = void 0;
+
+var virtualTypes = require("./lib/virtual-types");
+
+var _debug = require("debug");
+
+var _index = require("../index");
+
+var _scope = require("../scope");
+
+var _t = require("@babel/types");
+
+var t = _t;
+
+var _cache = require("../cache");
+
+var _generator = require("@babel/generator");
+
+var NodePath_ancestry = require("./ancestry");
+
+var NodePath_inference = require("./inference");
+
+var NodePath_replacement = require("./replacement");
+
+var NodePath_evaluation = require("./evaluation");
+
+var NodePath_conversion = require("./conversion");
+
+var NodePath_introspection = require("./introspection");
+
+var NodePath_context = require("./context");
+
+var NodePath_removal = require("./removal");
+
+var NodePath_modification = require("./modification");
+
+var NodePath_family = require("./family");
+
+var NodePath_comments = require("./comments");
+
+const {
+ validate
+} = _t;
+
+const debug = _debug("babel");
+
+const REMOVED = 1 << 0;
+exports.REMOVED = REMOVED;
+const SHOULD_STOP = 1 << 1;
+exports.SHOULD_STOP = SHOULD_STOP;
+const SHOULD_SKIP = 1 << 2;
+exports.SHOULD_SKIP = SHOULD_SKIP;
+
+class NodePath {
+ constructor(hub, parent) {
+ this.contexts = [];
+ this.state = null;
+ this.opts = null;
+ this._traverseFlags = 0;
+ this.skipKeys = null;
+ this.parentPath = null;
+ this.container = null;
+ this.listKey = null;
+ this.key = null;
+ this.node = null;
+ this.type = null;
+ this.parent = parent;
+ this.hub = hub;
+ this.data = null;
+ this.context = null;
+ this.scope = null;
+ }
+
+ static get({
+ hub,
+ parentPath,
+ parent,
+ container,
+ listKey,
+ key
+ }) {
+ if (!hub && parentPath) {
+ hub = parentPath.hub;
+ }
+
+ if (!parent) {
+ throw new Error("To get a node path the parent needs to exist");
+ }
+
+ const targetNode = container[key];
+
+ let paths = _cache.path.get(parent);
+
+ if (!paths) {
+ paths = new Map();
+
+ _cache.path.set(parent, paths);
+ }
+
+ let path = paths.get(targetNode);
+
+ if (!path) {
+ path = new NodePath(hub, parent);
+ if (targetNode) paths.set(targetNode, path);
+ }
+
+ path.setup(parentPath, container, listKey, key);
+ return path;
+ }
+
+ getScope(scope) {
+ return this.isScope() ? new _scope.default(this) : scope;
+ }
+
+ setData(key, val) {
+ if (this.data == null) {
+ this.data = Object.create(null);
+ }
+
+ return this.data[key] = val;
+ }
+
+ getData(key, def) {
+ if (this.data == null) {
+ this.data = Object.create(null);
+ }
+
+ let val = this.data[key];
+ if (val === undefined && def !== undefined) val = this.data[key] = def;
+ return val;
+ }
+
+ buildCodeFrameError(msg, Error = SyntaxError) {
+ return this.hub.buildError(this.node, msg, Error);
+ }
+
+ traverse(visitor, state) {
+ (0, _index.default)(this.node, visitor, this.scope, state, this);
+ }
+
+ set(key, node) {
+ validate(this.node, key, node);
+ this.node[key] = node;
+ }
+
+ getPathLocation() {
+ const parts = [];
+ let path = this;
+
+ do {
+ let key = path.key;
+ if (path.inList) key = `${path.listKey}[${key}]`;
+ parts.unshift(key);
+ } while (path = path.parentPath);
+
+ return parts.join(".");
+ }
+
+ debug(message) {
+ if (!debug.enabled) return;
+ debug(`${this.getPathLocation()} ${this.type}: ${message}`);
+ }
+
+ toString() {
+ return (0, _generator.default)(this.node).code;
+ }
+
+ get inList() {
+ return !!this.listKey;
+ }
+
+ set inList(inList) {
+ if (!inList) {
+ this.listKey = null;
+ }
+ }
+
+ get parentKey() {
+ return this.listKey || this.key;
+ }
+
+ get shouldSkip() {
+ return !!(this._traverseFlags & SHOULD_SKIP);
+ }
+
+ set shouldSkip(v) {
+ if (v) {
+ this._traverseFlags |= SHOULD_SKIP;
+ } else {
+ this._traverseFlags &= ~SHOULD_SKIP;
+ }
+ }
+
+ get shouldStop() {
+ return !!(this._traverseFlags & SHOULD_STOP);
+ }
+
+ set shouldStop(v) {
+ if (v) {
+ this._traverseFlags |= SHOULD_STOP;
+ } else {
+ this._traverseFlags &= ~SHOULD_STOP;
+ }
+ }
+
+ get removed() {
+ return !!(this._traverseFlags & REMOVED);
+ }
+
+ set removed(v) {
+ if (v) {
+ this._traverseFlags |= REMOVED;
+ } else {
+ this._traverseFlags &= ~REMOVED;
+ }
+ }
+
+}
+
+Object.assign(NodePath.prototype, NodePath_ancestry, NodePath_inference, NodePath_replacement, NodePath_evaluation, NodePath_conversion, NodePath_introspection, NodePath_context, NodePath_removal, NodePath_modification, NodePath_family, NodePath_comments);
+
+for (const type of t.TYPES) {
+ const typeKey = `is${type}`;
+ const fn = t[typeKey];
+
+ NodePath.prototype[typeKey] = function (opts) {
+ return fn(this.node, opts);
+ };
+
+ NodePath.prototype[`assert${type}`] = function (opts) {
+ if (!fn(this.node, opts)) {
+ throw new TypeError(`Expected node path of type ${type}`);
+ }
+ };
+}
+
+for (const type of Object.keys(virtualTypes)) {
+ if (type[0] === "_") continue;
+ if (t.TYPES.indexOf(type) < 0) t.TYPES.push(type);
+ const virtualType = virtualTypes[type];
+
+ NodePath.prototype[`is${type}`] = function (opts) {
+ return virtualType.checkPath(this, opts);
+ };
+}
+
+var _default = NodePath;
+exports.default = _default; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/index.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/index.js
new file mode 100644
index 00000000000..9f2cec93c2f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/index.js
@@ -0,0 +1,156 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getTypeAnnotation = getTypeAnnotation;
+exports._getTypeAnnotation = _getTypeAnnotation;
+exports.isBaseType = isBaseType;
+exports.couldBeBaseType = couldBeBaseType;
+exports.baseTypeStrictlyMatches = baseTypeStrictlyMatches;
+exports.isGenericType = isGenericType;
+
+var inferers = require("./inferers");
+
+var _t = require("@babel/types");
+
+const {
+ anyTypeAnnotation,
+ isAnyTypeAnnotation,
+ isBooleanTypeAnnotation,
+ isEmptyTypeAnnotation,
+ isFlowBaseAnnotation,
+ isGenericTypeAnnotation,
+ isIdentifier,
+ isMixedTypeAnnotation,
+ isNumberTypeAnnotation,
+ isStringTypeAnnotation,
+ isTypeAnnotation,
+ isUnionTypeAnnotation,
+ isVoidTypeAnnotation,
+ stringTypeAnnotation,
+ voidTypeAnnotation
+} = _t;
+
+function getTypeAnnotation() {
+ if (this.typeAnnotation) return this.typeAnnotation;
+ let type = this._getTypeAnnotation() || anyTypeAnnotation();
+ if (isTypeAnnotation(type)) type = type.typeAnnotation;
+ return this.typeAnnotation = type;
+}
+
+const typeAnnotationInferringNodes = new WeakSet();
+
+function _getTypeAnnotation() {
+ const node = this.node;
+
+ if (!node) {
+ if (this.key === "init" && this.parentPath.isVariableDeclarator()) {
+ const declar = this.parentPath.parentPath;
+ const declarParent = declar.parentPath;
+
+ if (declar.key === "left" && declarParent.isForInStatement()) {
+ return stringTypeAnnotation();
+ }
+
+ if (declar.key === "left" && declarParent.isForOfStatement()) {
+ return anyTypeAnnotation();
+ }
+
+ return voidTypeAnnotation();
+ } else {
+ return;
+ }
+ }
+
+ if (node.typeAnnotation) {
+ return node.typeAnnotation;
+ }
+
+ if (typeAnnotationInferringNodes.has(node)) {
+ return;
+ }
+
+ typeAnnotationInferringNodes.add(node);
+
+ try {
+ var _inferer;
+
+ let inferer = inferers[node.type];
+
+ if (inferer) {
+ return inferer.call(this, node);
+ }
+
+ inferer = inferers[this.parentPath.type];
+
+ if ((_inferer = inferer) != null && _inferer.validParent) {
+ return this.parentPath.getTypeAnnotation();
+ }
+ } finally {
+ typeAnnotationInferringNodes.delete(node);
+ }
+}
+
+function isBaseType(baseName, soft) {
+ return _isBaseType(baseName, this.getTypeAnnotation(), soft);
+}
+
+function _isBaseType(baseName, type, soft) {
+ if (baseName === "string") {
+ return isStringTypeAnnotation(type);
+ } else if (baseName === "number") {
+ return isNumberTypeAnnotation(type);
+ } else if (baseName === "boolean") {
+ return isBooleanTypeAnnotation(type);
+ } else if (baseName === "any") {
+ return isAnyTypeAnnotation(type);
+ } else if (baseName === "mixed") {
+ return isMixedTypeAnnotation(type);
+ } else if (baseName === "empty") {
+ return isEmptyTypeAnnotation(type);
+ } else if (baseName === "void") {
+ return isVoidTypeAnnotation(type);
+ } else {
+ if (soft) {
+ return false;
+ } else {
+ throw new Error(`Unknown base type ${baseName}`);
+ }
+ }
+}
+
+function couldBeBaseType(name) {
+ const type = this.getTypeAnnotation();
+ if (isAnyTypeAnnotation(type)) return true;
+
+ if (isUnionTypeAnnotation(type)) {
+ for (const type2 of type.types) {
+ if (isAnyTypeAnnotation(type2) || _isBaseType(name, type2, true)) {
+ return true;
+ }
+ }
+
+ return false;
+ } else {
+ return _isBaseType(name, type, true);
+ }
+}
+
+function baseTypeStrictlyMatches(rightArg) {
+ const left = this.getTypeAnnotation();
+ const right = rightArg.getTypeAnnotation();
+
+ if (!isAnyTypeAnnotation(left) && isFlowBaseAnnotation(left)) {
+ return right.type === left.type;
+ }
+
+ return false;
+}
+
+function isGenericType(genericName) {
+ const type = this.getTypeAnnotation();
+ return isGenericTypeAnnotation(type) && isIdentifier(type.id, {
+ name: genericName
+ });
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js
new file mode 100644
index 00000000000..c328dc150f4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js
@@ -0,0 +1,206 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = _default;
+
+var _t = require("@babel/types");
+
+const {
+ BOOLEAN_NUMBER_BINARY_OPERATORS,
+ createFlowUnionType,
+ createTSUnionType,
+ createTypeAnnotationBasedOnTypeof,
+ createUnionTypeAnnotation,
+ isTSTypeAnnotation,
+ numberTypeAnnotation,
+ voidTypeAnnotation
+} = _t;
+
+function _default(node) {
+ if (!this.isReferenced()) return;
+ const binding = this.scope.getBinding(node.name);
+
+ if (binding) {
+ if (binding.identifier.typeAnnotation) {
+ return binding.identifier.typeAnnotation;
+ } else {
+ return getTypeAnnotationBindingConstantViolations(binding, this, node.name);
+ }
+ }
+
+ if (node.name === "undefined") {
+ return voidTypeAnnotation();
+ } else if (node.name === "NaN" || node.name === "Infinity") {
+ return numberTypeAnnotation();
+ } else if (node.name === "arguments") {}
+}
+
+function getTypeAnnotationBindingConstantViolations(binding, path, name) {
+ const types = [];
+ const functionConstantViolations = [];
+ let constantViolations = getConstantViolationsBefore(binding, path, functionConstantViolations);
+ const testType = getConditionalAnnotation(binding, path, name);
+
+ if (testType) {
+ const testConstantViolations = getConstantViolationsBefore(binding, testType.ifStatement);
+ constantViolations = constantViolations.filter(path => testConstantViolations.indexOf(path) < 0);
+ types.push(testType.typeAnnotation);
+ }
+
+ if (constantViolations.length) {
+ constantViolations.push(...functionConstantViolations);
+
+ for (const violation of constantViolations) {
+ types.push(violation.getTypeAnnotation());
+ }
+ }
+
+ if (!types.length) {
+ return;
+ }
+
+ if (isTSTypeAnnotation(types[0]) && createTSUnionType) {
+ return createTSUnionType(types);
+ }
+
+ if (createFlowUnionType) {
+ return createFlowUnionType(types);
+ }
+
+ return createUnionTypeAnnotation(types);
+}
+
+function getConstantViolationsBefore(binding, path, functions) {
+ const violations = binding.constantViolations.slice();
+ violations.unshift(binding.path);
+ return violations.filter(violation => {
+ violation = violation.resolve();
+
+ const status = violation._guessExecutionStatusRelativeTo(path);
+
+ if (functions && status === "unknown") functions.push(violation);
+ return status === "before";
+ });
+}
+
+function inferAnnotationFromBinaryExpression(name, path) {
+ const operator = path.node.operator;
+ const right = path.get("right").resolve();
+ const left = path.get("left").resolve();
+ let target;
+
+ if (left.isIdentifier({
+ name
+ })) {
+ target = right;
+ } else if (right.isIdentifier({
+ name
+ })) {
+ target = left;
+ }
+
+ if (target) {
+ if (operator === "===") {
+ return target.getTypeAnnotation();
+ }
+
+ if (BOOLEAN_NUMBER_BINARY_OPERATORS.indexOf(operator) >= 0) {
+ return numberTypeAnnotation();
+ }
+
+ return;
+ }
+
+ if (operator !== "===" && operator !== "==") return;
+ let typeofPath;
+ let typePath;
+
+ if (left.isUnaryExpression({
+ operator: "typeof"
+ })) {
+ typeofPath = left;
+ typePath = right;
+ } else if (right.isUnaryExpression({
+ operator: "typeof"
+ })) {
+ typeofPath = right;
+ typePath = left;
+ }
+
+ if (!typeofPath) return;
+ if (!typeofPath.get("argument").isIdentifier({
+ name
+ })) return;
+ typePath = typePath.resolve();
+ if (!typePath.isLiteral()) return;
+ const typeValue = typePath.node.value;
+ if (typeof typeValue !== "string") return;
+ return createTypeAnnotationBasedOnTypeof(typeValue);
+}
+
+function getParentConditionalPath(binding, path, name) {
+ let parentPath;
+
+ while (parentPath = path.parentPath) {
+ if (parentPath.isIfStatement() || parentPath.isConditionalExpression()) {
+ if (path.key === "test") {
+ return;
+ }
+
+ return parentPath;
+ }
+
+ if (parentPath.isFunction()) {
+ if (parentPath.parentPath.scope.getBinding(name) !== binding) return;
+ }
+
+ path = parentPath;
+ }
+}
+
+function getConditionalAnnotation(binding, path, name) {
+ const ifStatement = getParentConditionalPath(binding, path, name);
+ if (!ifStatement) return;
+ const test = ifStatement.get("test");
+ const paths = [test];
+ const types = [];
+
+ for (let i = 0; i < paths.length; i++) {
+ const path = paths[i];
+
+ if (path.isLogicalExpression()) {
+ if (path.node.operator === "&&") {
+ paths.push(path.get("left"));
+ paths.push(path.get("right"));
+ }
+ } else if (path.isBinaryExpression()) {
+ const type = inferAnnotationFromBinaryExpression(name, path);
+ if (type) types.push(type);
+ }
+ }
+
+ if (types.length) {
+ if (isTSTypeAnnotation(types[0]) && createTSUnionType) {
+ return {
+ typeAnnotation: createTSUnionType(types),
+ ifStatement
+ };
+ }
+
+ if (createFlowUnionType) {
+ return {
+ typeAnnotation: createFlowUnionType(types),
+ ifStatement
+ };
+ }
+
+ return {
+ typeAnnotation: createUnionTypeAnnotation(types),
+ ifStatement
+ };
+ }
+
+ return getConditionalAnnotation(ifStatement, name);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferers.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferers.js
new file mode 100644
index 00000000000..043522458a2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/inference/inferers.js
@@ -0,0 +1,261 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.VariableDeclarator = VariableDeclarator;
+exports.TypeCastExpression = TypeCastExpression;
+exports.NewExpression = NewExpression;
+exports.TemplateLiteral = TemplateLiteral;
+exports.UnaryExpression = UnaryExpression;
+exports.BinaryExpression = BinaryExpression;
+exports.LogicalExpression = LogicalExpression;
+exports.ConditionalExpression = ConditionalExpression;
+exports.SequenceExpression = SequenceExpression;
+exports.ParenthesizedExpression = ParenthesizedExpression;
+exports.AssignmentExpression = AssignmentExpression;
+exports.UpdateExpression = UpdateExpression;
+exports.StringLiteral = StringLiteral;
+exports.NumericLiteral = NumericLiteral;
+exports.BooleanLiteral = BooleanLiteral;
+exports.NullLiteral = NullLiteral;
+exports.RegExpLiteral = RegExpLiteral;
+exports.ObjectExpression = ObjectExpression;
+exports.ArrayExpression = ArrayExpression;
+exports.RestElement = RestElement;
+exports.ClassDeclaration = exports.ClassExpression = exports.FunctionDeclaration = exports.ArrowFunctionExpression = exports.FunctionExpression = Func;
+exports.CallExpression = CallExpression;
+exports.TaggedTemplateExpression = TaggedTemplateExpression;
+Object.defineProperty(exports, "Identifier", {
+ enumerable: true,
+ get: function () {
+ return _infererReference.default;
+ }
+});
+
+var _t = require("@babel/types");
+
+var _infererReference = require("./inferer-reference");
+
+const {
+ BOOLEAN_BINARY_OPERATORS,
+ BOOLEAN_UNARY_OPERATORS,
+ NUMBER_BINARY_OPERATORS,
+ NUMBER_UNARY_OPERATORS,
+ STRING_UNARY_OPERATORS,
+ anyTypeAnnotation,
+ arrayTypeAnnotation,
+ booleanTypeAnnotation,
+ buildMatchMemberExpression,
+ createFlowUnionType,
+ createTSUnionType,
+ createUnionTypeAnnotation,
+ genericTypeAnnotation,
+ identifier,
+ isTSTypeAnnotation,
+ nullLiteralTypeAnnotation,
+ numberTypeAnnotation,
+ stringTypeAnnotation,
+ tupleTypeAnnotation,
+ unionTypeAnnotation,
+ voidTypeAnnotation
+} = _t;
+
+function VariableDeclarator() {
+ var _type;
+
+ const id = this.get("id");
+ if (!id.isIdentifier()) return;
+ const init = this.get("init");
+ let type = init.getTypeAnnotation();
+
+ if (((_type = type) == null ? void 0 : _type.type) === "AnyTypeAnnotation") {
+ if (init.isCallExpression() && init.get("callee").isIdentifier({
+ name: "Array"
+ }) && !init.scope.hasBinding("Array", true)) {
+ type = ArrayExpression();
+ }
+ }
+
+ return type;
+}
+
+function TypeCastExpression(node) {
+ return node.typeAnnotation;
+}
+
+TypeCastExpression.validParent = true;
+
+function NewExpression(node) {
+ if (this.get("callee").isIdentifier()) {
+ return genericTypeAnnotation(node.callee);
+ }
+}
+
+function TemplateLiteral() {
+ return stringTypeAnnotation();
+}
+
+function UnaryExpression(node) {
+ const operator = node.operator;
+
+ if (operator === "void") {
+ return voidTypeAnnotation();
+ } else if (NUMBER_UNARY_OPERATORS.indexOf(operator) >= 0) {
+ return numberTypeAnnotation();
+ } else if (STRING_UNARY_OPERATORS.indexOf(operator) >= 0) {
+ return stringTypeAnnotation();
+ } else if (BOOLEAN_UNARY_OPERATORS.indexOf(operator) >= 0) {
+ return booleanTypeAnnotation();
+ }
+}
+
+function BinaryExpression(node) {
+ const operator = node.operator;
+
+ if (NUMBER_BINARY_OPERATORS.indexOf(operator) >= 0) {
+ return numberTypeAnnotation();
+ } else if (BOOLEAN_BINARY_OPERATORS.indexOf(operator) >= 0) {
+ return booleanTypeAnnotation();
+ } else if (operator === "+") {
+ const right = this.get("right");
+ const left = this.get("left");
+
+ if (left.isBaseType("number") && right.isBaseType("number")) {
+ return numberTypeAnnotation();
+ } else if (left.isBaseType("string") || right.isBaseType("string")) {
+ return stringTypeAnnotation();
+ }
+
+ return unionTypeAnnotation([stringTypeAnnotation(), numberTypeAnnotation()]);
+ }
+}
+
+function LogicalExpression() {
+ const argumentTypes = [this.get("left").getTypeAnnotation(), this.get("right").getTypeAnnotation()];
+
+ if (isTSTypeAnnotation(argumentTypes[0]) && createTSUnionType) {
+ return createTSUnionType(argumentTypes);
+ }
+
+ if (createFlowUnionType) {
+ return createFlowUnionType(argumentTypes);
+ }
+
+ return createUnionTypeAnnotation(argumentTypes);
+}
+
+function ConditionalExpression() {
+ const argumentTypes = [this.get("consequent").getTypeAnnotation(), this.get("alternate").getTypeAnnotation()];
+
+ if (isTSTypeAnnotation(argumentTypes[0]) && createTSUnionType) {
+ return createTSUnionType(argumentTypes);
+ }
+
+ if (createFlowUnionType) {
+ return createFlowUnionType(argumentTypes);
+ }
+
+ return createUnionTypeAnnotation(argumentTypes);
+}
+
+function SequenceExpression() {
+ return this.get("expressions").pop().getTypeAnnotation();
+}
+
+function ParenthesizedExpression() {
+ return this.get("expression").getTypeAnnotation();
+}
+
+function AssignmentExpression() {
+ return this.get("right").getTypeAnnotation();
+}
+
+function UpdateExpression(node) {
+ const operator = node.operator;
+
+ if (operator === "++" || operator === "--") {
+ return numberTypeAnnotation();
+ }
+}
+
+function StringLiteral() {
+ return stringTypeAnnotation();
+}
+
+function NumericLiteral() {
+ return numberTypeAnnotation();
+}
+
+function BooleanLiteral() {
+ return booleanTypeAnnotation();
+}
+
+function NullLiteral() {
+ return nullLiteralTypeAnnotation();
+}
+
+function RegExpLiteral() {
+ return genericTypeAnnotation(identifier("RegExp"));
+}
+
+function ObjectExpression() {
+ return genericTypeAnnotation(identifier("Object"));
+}
+
+function ArrayExpression() {
+ return genericTypeAnnotation(identifier("Array"));
+}
+
+function RestElement() {
+ return ArrayExpression();
+}
+
+RestElement.validParent = true;
+
+function Func() {
+ return genericTypeAnnotation(identifier("Function"));
+}
+
+const isArrayFrom = buildMatchMemberExpression("Array.from");
+const isObjectKeys = buildMatchMemberExpression("Object.keys");
+const isObjectValues = buildMatchMemberExpression("Object.values");
+const isObjectEntries = buildMatchMemberExpression("Object.entries");
+
+function CallExpression() {
+ const {
+ callee
+ } = this.node;
+
+ if (isObjectKeys(callee)) {
+ return arrayTypeAnnotation(stringTypeAnnotation());
+ } else if (isArrayFrom(callee) || isObjectValues(callee)) {
+ return arrayTypeAnnotation(anyTypeAnnotation());
+ } else if (isObjectEntries(callee)) {
+ return arrayTypeAnnotation(tupleTypeAnnotation([stringTypeAnnotation(), anyTypeAnnotation()]));
+ }
+
+ return resolveCall(this.get("callee"));
+}
+
+function TaggedTemplateExpression() {
+ return resolveCall(this.get("tag"));
+}
+
+function resolveCall(callee) {
+ callee = callee.resolve();
+
+ if (callee.isFunction()) {
+ if (callee.is("async")) {
+ if (callee.is("generator")) {
+ return genericTypeAnnotation(identifier("AsyncIterator"));
+ } else {
+ return genericTypeAnnotation(identifier("Promise"));
+ }
+ } else {
+ if (callee.node.returnType) {
+ return callee.node.returnType;
+ } else {}
+ }
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/introspection.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/introspection.js
new file mode 100644
index 00000000000..65f98110bcf
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/introspection.js
@@ -0,0 +1,436 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.matchesPattern = matchesPattern;
+exports.has = has;
+exports.isStatic = isStatic;
+exports.isnt = isnt;
+exports.equals = equals;
+exports.isNodeType = isNodeType;
+exports.canHaveVariableDeclarationOrExpression = canHaveVariableDeclarationOrExpression;
+exports.canSwapBetweenExpressionAndStatement = canSwapBetweenExpressionAndStatement;
+exports.isCompletionRecord = isCompletionRecord;
+exports.isStatementOrBlock = isStatementOrBlock;
+exports.referencesImport = referencesImport;
+exports.getSource = getSource;
+exports.willIMaybeExecuteBefore = willIMaybeExecuteBefore;
+exports._guessExecutionStatusRelativeTo = _guessExecutionStatusRelativeTo;
+exports._guessExecutionStatusRelativeToDifferentFunctions = _guessExecutionStatusRelativeToDifferentFunctions;
+exports.resolve = resolve;
+exports._resolve = _resolve;
+exports.isConstantExpression = isConstantExpression;
+exports.isInStrictMode = isInStrictMode;
+exports.is = void 0;
+
+var _t = require("@babel/types");
+
+const {
+ STATEMENT_OR_BLOCK_KEYS,
+ VISITOR_KEYS,
+ isBlockStatement,
+ isExpression,
+ isIdentifier,
+ isLiteral,
+ isStringLiteral,
+ isType,
+ matchesPattern: _matchesPattern
+} = _t;
+
+function matchesPattern(pattern, allowPartial) {
+ return _matchesPattern(this.node, pattern, allowPartial);
+}
+
+function has(key) {
+ const val = this.node && this.node[key];
+
+ if (val && Array.isArray(val)) {
+ return !!val.length;
+ } else {
+ return !!val;
+ }
+}
+
+function isStatic() {
+ return this.scope.isStatic(this.node);
+}
+
+const is = has;
+exports.is = is;
+
+function isnt(key) {
+ return !this.has(key);
+}
+
+function equals(key, value) {
+ return this.node[key] === value;
+}
+
+function isNodeType(type) {
+ return isType(this.type, type);
+}
+
+function canHaveVariableDeclarationOrExpression() {
+ return (this.key === "init" || this.key === "left") && this.parentPath.isFor();
+}
+
+function canSwapBetweenExpressionAndStatement(replacement) {
+ if (this.key !== "body" || !this.parentPath.isArrowFunctionExpression()) {
+ return false;
+ }
+
+ if (this.isExpression()) {
+ return isBlockStatement(replacement);
+ } else if (this.isBlockStatement()) {
+ return isExpression(replacement);
+ }
+
+ return false;
+}
+
+function isCompletionRecord(allowInsideFunction) {
+ let path = this;
+ let first = true;
+
+ do {
+ const container = path.container;
+
+ if (path.isFunction() && !first) {
+ return !!allowInsideFunction;
+ }
+
+ first = false;
+
+ if (Array.isArray(container) && path.key !== container.length - 1) {
+ return false;
+ }
+ } while ((path = path.parentPath) && !path.isProgram());
+
+ return true;
+}
+
+function isStatementOrBlock() {
+ if (this.parentPath.isLabeledStatement() || isBlockStatement(this.container)) {
+ return false;
+ } else {
+ return STATEMENT_OR_BLOCK_KEYS.includes(this.key);
+ }
+}
+
+function referencesImport(moduleSource, importName) {
+ if (!this.isReferencedIdentifier()) {
+ if ((this.isMemberExpression() || this.isOptionalMemberExpression()) && (this.node.computed ? isStringLiteral(this.node.property, {
+ value: importName
+ }) : this.node.property.name === importName)) {
+ const object = this.get("object");
+ return object.isReferencedIdentifier() && object.referencesImport(moduleSource, "*");
+ }
+
+ return false;
+ }
+
+ const binding = this.scope.getBinding(this.node.name);
+ if (!binding || binding.kind !== "module") return false;
+ const path = binding.path;
+ const parent = path.parentPath;
+ if (!parent.isImportDeclaration()) return false;
+
+ if (parent.node.source.value === moduleSource) {
+ if (!importName) return true;
+ } else {
+ return false;
+ }
+
+ if (path.isImportDefaultSpecifier() && importName === "default") {
+ return true;
+ }
+
+ if (path.isImportNamespaceSpecifier() && importName === "*") {
+ return true;
+ }
+
+ if (path.isImportSpecifier() && isIdentifier(path.node.imported, {
+ name: importName
+ })) {
+ return true;
+ }
+
+ return false;
+}
+
+function getSource() {
+ const node = this.node;
+
+ if (node.end) {
+ const code = this.hub.getCode();
+ if (code) return code.slice(node.start, node.end);
+ }
+
+ return "";
+}
+
+function willIMaybeExecuteBefore(target) {
+ return this._guessExecutionStatusRelativeTo(target) !== "after";
+}
+
+function getOuterFunction(path) {
+ return (path.scope.getFunctionParent() || path.scope.getProgramParent()).path;
+}
+
+function isExecutionUncertain(type, key) {
+ switch (type) {
+ case "LogicalExpression":
+ return key === "right";
+
+ case "ConditionalExpression":
+ case "IfStatement":
+ return key === "consequent" || key === "alternate";
+
+ case "WhileStatement":
+ case "DoWhileStatement":
+ case "ForInStatement":
+ case "ForOfStatement":
+ return key === "body";
+
+ case "ForStatement":
+ return key === "body" || key === "update";
+
+ case "SwitchStatement":
+ return key === "cases";
+
+ case "TryStatement":
+ return key === "handler";
+
+ case "AssignmentPattern":
+ return key === "right";
+
+ case "OptionalMemberExpression":
+ return key === "property";
+
+ case "OptionalCallExpression":
+ return key === "arguments";
+
+ default:
+ return false;
+ }
+}
+
+function isExecutionUncertainInList(paths, maxIndex) {
+ for (let i = 0; i < maxIndex; i++) {
+ const path = paths[i];
+
+ if (isExecutionUncertain(path.parent.type, path.parentKey)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function _guessExecutionStatusRelativeTo(target) {
+ const funcParent = {
+ this: getOuterFunction(this),
+ target: getOuterFunction(target)
+ };
+
+ if (funcParent.target.node !== funcParent.this.node) {
+ return this._guessExecutionStatusRelativeToDifferentFunctions(funcParent.target);
+ }
+
+ const paths = {
+ target: target.getAncestry(),
+ this: this.getAncestry()
+ };
+ if (paths.target.indexOf(this) >= 0) return "after";
+ if (paths.this.indexOf(target) >= 0) return "before";
+ let commonPath;
+ const commonIndex = {
+ target: 0,
+ this: 0
+ };
+
+ while (!commonPath && commonIndex.this < paths.this.length) {
+ const path = paths.this[commonIndex.this];
+ commonIndex.target = paths.target.indexOf(path);
+
+ if (commonIndex.target >= 0) {
+ commonPath = path;
+ } else {
+ commonIndex.this++;
+ }
+ }
+
+ if (!commonPath) {
+ throw new Error("Internal Babel error - The two compared nodes" + " don't appear to belong to the same program.");
+ }
+
+ if (isExecutionUncertainInList(paths.this, commonIndex.this - 1) || isExecutionUncertainInList(paths.target, commonIndex.target - 1)) {
+ return "unknown";
+ }
+
+ const divergence = {
+ this: paths.this[commonIndex.this - 1],
+ target: paths.target[commonIndex.target - 1]
+ };
+
+ if (divergence.target.listKey && divergence.this.listKey && divergence.target.container === divergence.this.container) {
+ return divergence.target.key > divergence.this.key ? "before" : "after";
+ }
+
+ const keys = VISITOR_KEYS[commonPath.type];
+ const keyPosition = {
+ this: keys.indexOf(divergence.this.parentKey),
+ target: keys.indexOf(divergence.target.parentKey)
+ };
+ return keyPosition.target > keyPosition.this ? "before" : "after";
+}
+
+const executionOrderCheckedNodes = new WeakSet();
+
+function _guessExecutionStatusRelativeToDifferentFunctions(target) {
+ if (!target.isFunctionDeclaration() || target.parentPath.isExportDeclaration()) {
+ return "unknown";
+ }
+
+ const binding = target.scope.getBinding(target.node.id.name);
+ if (!binding.references) return "before";
+ const referencePaths = binding.referencePaths;
+ let allStatus;
+
+ for (const path of referencePaths) {
+ const childOfFunction = !!path.find(path => path.node === target.node);
+ if (childOfFunction) continue;
+
+ if (path.key !== "callee" || !path.parentPath.isCallExpression()) {
+ return "unknown";
+ }
+
+ if (executionOrderCheckedNodes.has(path.node)) continue;
+ executionOrderCheckedNodes.add(path.node);
+
+ const status = this._guessExecutionStatusRelativeTo(path);
+
+ executionOrderCheckedNodes.delete(path.node);
+
+ if (allStatus && allStatus !== status) {
+ return "unknown";
+ } else {
+ allStatus = status;
+ }
+ }
+
+ return allStatus;
+}
+
+function resolve(dangerous, resolved) {
+ return this._resolve(dangerous, resolved) || this;
+}
+
+function _resolve(dangerous, resolved) {
+ if (resolved && resolved.indexOf(this) >= 0) return;
+ resolved = resolved || [];
+ resolved.push(this);
+
+ if (this.isVariableDeclarator()) {
+ if (this.get("id").isIdentifier()) {
+ return this.get("init").resolve(dangerous, resolved);
+ } else {}
+ } else if (this.isReferencedIdentifier()) {
+ const binding = this.scope.getBinding(this.node.name);
+ if (!binding) return;
+ if (!binding.constant) return;
+ if (binding.kind === "module") return;
+
+ if (binding.path !== this) {
+ const ret = binding.path.resolve(dangerous, resolved);
+ if (this.find(parent => parent.node === ret.node)) return;
+ return ret;
+ }
+ } else if (this.isTypeCastExpression()) {
+ return this.get("expression").resolve(dangerous, resolved);
+ } else if (dangerous && this.isMemberExpression()) {
+ const targetKey = this.toComputedKey();
+ if (!isLiteral(targetKey)) return;
+ const targetName = targetKey.value;
+ const target = this.get("object").resolve(dangerous, resolved);
+
+ if (target.isObjectExpression()) {
+ const props = target.get("properties");
+
+ for (const prop of props) {
+ if (!prop.isProperty()) continue;
+ const key = prop.get("key");
+ let match = prop.isnt("computed") && key.isIdentifier({
+ name: targetName
+ });
+ match = match || key.isLiteral({
+ value: targetName
+ });
+ if (match) return prop.get("value").resolve(dangerous, resolved);
+ }
+ } else if (target.isArrayExpression() && !isNaN(+targetName)) {
+ const elems = target.get("elements");
+ const elem = elems[targetName];
+ if (elem) return elem.resolve(dangerous, resolved);
+ }
+ }
+}
+
+function isConstantExpression() {
+ if (this.isIdentifier()) {
+ const binding = this.scope.getBinding(this.node.name);
+ if (!binding) return false;
+ return binding.constant;
+ }
+
+ if (this.isLiteral()) {
+ if (this.isRegExpLiteral()) {
+ return false;
+ }
+
+ if (this.isTemplateLiteral()) {
+ return this.get("expressions").every(expression => expression.isConstantExpression());
+ }
+
+ return true;
+ }
+
+ if (this.isUnaryExpression()) {
+ if (this.node.operator !== "void") {
+ return false;
+ }
+
+ return this.get("argument").isConstantExpression();
+ }
+
+ if (this.isBinaryExpression()) {
+ return this.get("left").isConstantExpression() && this.get("right").isConstantExpression();
+ }
+
+ return false;
+}
+
+function isInStrictMode() {
+ const start = this.isProgram() ? this : this.parentPath;
+ const strictParent = start.find(path => {
+ if (path.isProgram({
+ sourceType: "module"
+ })) return true;
+ if (path.isClass()) return true;
+ if (!path.isProgram() && !path.isFunction()) return false;
+
+ if (path.isArrowFunctionExpression() && !path.get("body").isBlockStatement()) {
+ return false;
+ }
+
+ const body = path.isFunction() ? path.node.body : path.node;
+
+ for (const directive of body.directives) {
+ if (directive.value.value === "use strict") {
+ return true;
+ }
+ }
+ });
+ return !!strictParent;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/hoister.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/hoister.js
new file mode 100644
index 00000000000..536a3409741
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/hoister.js
@@ -0,0 +1,206 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _t = require("@babel/types");
+
+var _t2 = _t;
+const {
+ react
+} = _t;
+const {
+ cloneNode,
+ jsxExpressionContainer,
+ variableDeclaration,
+ variableDeclarator
+} = _t2;
+const referenceVisitor = {
+ ReferencedIdentifier(path, state) {
+ if (path.isJSXIdentifier() && react.isCompatTag(path.node.name) && !path.parentPath.isJSXMemberExpression()) {
+ return;
+ }
+
+ if (path.node.name === "this") {
+ let scope = path.scope;
+
+ do {
+ if (scope.path.isFunction() && !scope.path.isArrowFunctionExpression()) {
+ break;
+ }
+ } while (scope = scope.parent);
+
+ if (scope) state.breakOnScopePaths.push(scope.path);
+ }
+
+ const binding = path.scope.getBinding(path.node.name);
+ if (!binding) return;
+
+ for (const violation of binding.constantViolations) {
+ if (violation.scope !== binding.path.scope) {
+ state.mutableBinding = true;
+ path.stop();
+ return;
+ }
+ }
+
+ if (binding !== state.scope.getBinding(path.node.name)) return;
+ state.bindings[path.node.name] = binding;
+ }
+
+};
+
+class PathHoister {
+ constructor(path, scope) {
+ this.breakOnScopePaths = void 0;
+ this.bindings = void 0;
+ this.mutableBinding = void 0;
+ this.scopes = void 0;
+ this.scope = void 0;
+ this.path = void 0;
+ this.attachAfter = void 0;
+ this.breakOnScopePaths = [];
+ this.bindings = {};
+ this.mutableBinding = false;
+ this.scopes = [];
+ this.scope = scope;
+ this.path = path;
+ this.attachAfter = false;
+ }
+
+ isCompatibleScope(scope) {
+ for (const key of Object.keys(this.bindings)) {
+ const binding = this.bindings[key];
+
+ if (!scope.bindingIdentifierEquals(key, binding.identifier)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ getCompatibleScopes() {
+ let scope = this.path.scope;
+
+ do {
+ if (this.isCompatibleScope(scope)) {
+ this.scopes.push(scope);
+ } else {
+ break;
+ }
+
+ if (this.breakOnScopePaths.indexOf(scope.path) >= 0) {
+ break;
+ }
+ } while (scope = scope.parent);
+ }
+
+ getAttachmentPath() {
+ let path = this._getAttachmentPath();
+
+ if (!path) return;
+ let targetScope = path.scope;
+
+ if (targetScope.path === path) {
+ targetScope = path.scope.parent;
+ }
+
+ if (targetScope.path.isProgram() || targetScope.path.isFunction()) {
+ for (const name of Object.keys(this.bindings)) {
+ if (!targetScope.hasOwnBinding(name)) continue;
+ const binding = this.bindings[name];
+
+ if (binding.kind === "param" || binding.path.parentKey === "params") {
+ continue;
+ }
+
+ const bindingParentPath = this.getAttachmentParentForPath(binding.path);
+
+ if (bindingParentPath.key >= path.key) {
+ this.attachAfter = true;
+ path = binding.path;
+
+ for (const violationPath of binding.constantViolations) {
+ if (this.getAttachmentParentForPath(violationPath).key > path.key) {
+ path = violationPath;
+ }
+ }
+ }
+ }
+ }
+
+ return path;
+ }
+
+ _getAttachmentPath() {
+ const scopes = this.scopes;
+ const scope = scopes.pop();
+ if (!scope) return;
+
+ if (scope.path.isFunction()) {
+ if (this.hasOwnParamBindings(scope)) {
+ if (this.scope === scope) return;
+ const bodies = scope.path.get("body").get("body");
+
+ for (let i = 0; i < bodies.length; i++) {
+ if (bodies[i].node._blockHoist) continue;
+ return bodies[i];
+ }
+ } else {
+ return this.getNextScopeAttachmentParent();
+ }
+ } else if (scope.path.isProgram()) {
+ return this.getNextScopeAttachmentParent();
+ }
+ }
+
+ getNextScopeAttachmentParent() {
+ const scope = this.scopes.pop();
+ if (scope) return this.getAttachmentParentForPath(scope.path);
+ }
+
+ getAttachmentParentForPath(path) {
+ do {
+ if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) {
+ return path;
+ }
+ } while (path = path.parentPath);
+ }
+
+ hasOwnParamBindings(scope) {
+ for (const name of Object.keys(this.bindings)) {
+ if (!scope.hasOwnBinding(name)) continue;
+ const binding = this.bindings[name];
+ if (binding.kind === "param" && binding.constant) return true;
+ }
+
+ return false;
+ }
+
+ run() {
+ this.path.traverse(referenceVisitor, this);
+ if (this.mutableBinding) return;
+ this.getCompatibleScopes();
+ const attachTo = this.getAttachmentPath();
+ if (!attachTo) return;
+ if (attachTo.getFunctionParent() === this.path.getFunctionParent()) return;
+ let uid = attachTo.scope.generateUidIdentifier("ref");
+ const declarator = variableDeclarator(uid, this.path.node);
+ const insertFn = this.attachAfter ? "insertAfter" : "insertBefore";
+ const [attached] = attachTo[insertFn]([attachTo.isVariableDeclarator() ? declarator : variableDeclaration("var", [declarator])]);
+ const parent = this.path.parentPath;
+
+ if (parent.isJSXElement() && this.path.container === parent.node.children) {
+ uid = jsxExpressionContainer(uid);
+ }
+
+ this.path.replaceWith(cloneNode(uid));
+ return attachTo.isVariableDeclarator() ? attached.get("init") : attached.get("declarations.0.init");
+ }
+
+}
+
+exports.default = PathHoister; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js
new file mode 100644
index 00000000000..23ec8fe6d7e
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js
@@ -0,0 +1,38 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.hooks = void 0;
+const hooks = [function (self, parent) {
+ const removeParent = self.key === "test" && (parent.isWhile() || parent.isSwitchCase()) || self.key === "declaration" && parent.isExportDeclaration() || self.key === "body" && parent.isLabeledStatement() || self.listKey === "declarations" && parent.isVariableDeclaration() && parent.node.declarations.length === 1 || self.key === "expression" && parent.isExpressionStatement();
+
+ if (removeParent) {
+ parent.remove();
+ return true;
+ }
+}, function (self, parent) {
+ if (parent.isSequenceExpression() && parent.node.expressions.length === 1) {
+ parent.replaceWith(parent.node.expressions[0]);
+ return true;
+ }
+}, function (self, parent) {
+ if (parent.isBinary()) {
+ if (self.key === "left") {
+ parent.replaceWith(parent.node.right);
+ } else {
+ parent.replaceWith(parent.node.left);
+ }
+
+ return true;
+ }
+}, function (self, parent) {
+ if (parent.isIfStatement() && (self.key === "consequent" || self.key === "alternate") || self.key === "body" && (parent.isLoop() || parent.isArrowFunctionExpression())) {
+ self.replaceWith({
+ type: "BlockStatement",
+ body: []
+ });
+ return true;
+ }
+}];
+exports.hooks = hooks; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/virtual-types.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/virtual-types.js
new file mode 100644
index 00000000000..7dbda0b7ad8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/lib/virtual-types.js
@@ -0,0 +1,230 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ForAwaitStatement = exports.NumericLiteralTypeAnnotation = exports.ExistentialTypeParam = exports.SpreadProperty = exports.RestProperty = exports.Flow = exports.Pure = exports.Generated = exports.User = exports.Var = exports.BlockScoped = exports.Referenced = exports.Scope = exports.Expression = exports.Statement = exports.BindingIdentifier = exports.ReferencedMemberExpression = exports.ReferencedIdentifier = void 0;
+
+var _t = require("@babel/types");
+
+const {
+ isBinding,
+ isBlockScoped,
+ isExportDeclaration,
+ isExpression,
+ isFlow,
+ isForStatement,
+ isForXStatement,
+ isIdentifier,
+ isImportDeclaration,
+ isImportSpecifier,
+ isJSXIdentifier,
+ isJSXMemberExpression,
+ isMemberExpression,
+ isReferenced,
+ isScope,
+ isStatement,
+ isVar,
+ isVariableDeclaration,
+ react
+} = _t;
+const {
+ isCompatTag
+} = react;
+const ReferencedIdentifier = {
+ types: ["Identifier", "JSXIdentifier"],
+
+ checkPath(path, opts) {
+ const {
+ node,
+ parent
+ } = path;
+
+ if (!isIdentifier(node, opts) && !isJSXMemberExpression(parent, opts)) {
+ if (isJSXIdentifier(node, opts)) {
+ if (isCompatTag(node.name)) return false;
+ } else {
+ return false;
+ }
+ }
+
+ return isReferenced(node, parent, path.parentPath.parent);
+ }
+
+};
+exports.ReferencedIdentifier = ReferencedIdentifier;
+const ReferencedMemberExpression = {
+ types: ["MemberExpression"],
+
+ checkPath({
+ node,
+ parent
+ }) {
+ return isMemberExpression(node) && isReferenced(node, parent);
+ }
+
+};
+exports.ReferencedMemberExpression = ReferencedMemberExpression;
+const BindingIdentifier = {
+ types: ["Identifier"],
+
+ checkPath(path) {
+ const {
+ node,
+ parent
+ } = path;
+ const grandparent = path.parentPath.parent;
+ return isIdentifier(node) && isBinding(node, parent, grandparent);
+ }
+
+};
+exports.BindingIdentifier = BindingIdentifier;
+const Statement = {
+ types: ["Statement"],
+
+ checkPath({
+ node,
+ parent
+ }) {
+ if (isStatement(node)) {
+ if (isVariableDeclaration(node)) {
+ if (isForXStatement(parent, {
+ left: node
+ })) return false;
+ if (isForStatement(parent, {
+ init: node
+ })) return false;
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+};
+exports.Statement = Statement;
+const Expression = {
+ types: ["Expression"],
+
+ checkPath(path) {
+ if (path.isIdentifier()) {
+ return path.isReferencedIdentifier();
+ } else {
+ return isExpression(path.node);
+ }
+ }
+
+};
+exports.Expression = Expression;
+const Scope = {
+ types: ["Scopable", "Pattern"],
+
+ checkPath(path) {
+ return isScope(path.node, path.parent);
+ }
+
+};
+exports.Scope = Scope;
+const Referenced = {
+ checkPath(path) {
+ return isReferenced(path.node, path.parent);
+ }
+
+};
+exports.Referenced = Referenced;
+const BlockScoped = {
+ checkPath(path) {
+ return isBlockScoped(path.node);
+ }
+
+};
+exports.BlockScoped = BlockScoped;
+const Var = {
+ types: ["VariableDeclaration"],
+
+ checkPath(path) {
+ return isVar(path.node);
+ }
+
+};
+exports.Var = Var;
+const User = {
+ checkPath(path) {
+ return path.node && !!path.node.loc;
+ }
+
+};
+exports.User = User;
+const Generated = {
+ checkPath(path) {
+ return !path.isUser();
+ }
+
+};
+exports.Generated = Generated;
+const Pure = {
+ checkPath(path, opts) {
+ return path.scope.isPure(path.node, opts);
+ }
+
+};
+exports.Pure = Pure;
+const Flow = {
+ types: ["Flow", "ImportDeclaration", "ExportDeclaration", "ImportSpecifier"],
+
+ checkPath({
+ node
+ }) {
+ if (isFlow(node)) {
+ return true;
+ } else if (isImportDeclaration(node)) {
+ return node.importKind === "type" || node.importKind === "typeof";
+ } else if (isExportDeclaration(node)) {
+ return node.exportKind === "type";
+ } else if (isImportSpecifier(node)) {
+ return node.importKind === "type" || node.importKind === "typeof";
+ } else {
+ return false;
+ }
+ }
+
+};
+exports.Flow = Flow;
+const RestProperty = {
+ types: ["RestElement"],
+
+ checkPath(path) {
+ return path.parentPath && path.parentPath.isObjectPattern();
+ }
+
+};
+exports.RestProperty = RestProperty;
+const SpreadProperty = {
+ types: ["RestElement"],
+
+ checkPath(path) {
+ return path.parentPath && path.parentPath.isObjectExpression();
+ }
+
+};
+exports.SpreadProperty = SpreadProperty;
+const ExistentialTypeParam = {
+ types: ["ExistsTypeAnnotation"]
+};
+exports.ExistentialTypeParam = ExistentialTypeParam;
+const NumericLiteralTypeAnnotation = {
+ types: ["NumberLiteralTypeAnnotation"]
+};
+exports.NumericLiteralTypeAnnotation = NumericLiteralTypeAnnotation;
+const ForAwaitStatement = {
+ types: ["ForOfStatement"],
+
+ checkPath({
+ node
+ }) {
+ return node.await === true;
+ }
+
+};
+exports.ForAwaitStatement = ForAwaitStatement; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/modification.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/modification.js
new file mode 100644
index 00000000000..8b8c08925f8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/modification.js
@@ -0,0 +1,232 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.insertBefore = insertBefore;
+exports._containerInsert = _containerInsert;
+exports._containerInsertBefore = _containerInsertBefore;
+exports._containerInsertAfter = _containerInsertAfter;
+exports.insertAfter = insertAfter;
+exports.updateSiblingKeys = updateSiblingKeys;
+exports._verifyNodeList = _verifyNodeList;
+exports.unshiftContainer = unshiftContainer;
+exports.pushContainer = pushContainer;
+exports.hoist = hoist;
+
+var _cache = require("../cache");
+
+var _hoister = require("./lib/hoister");
+
+var _index = require("./index");
+
+var _t = require("@babel/types");
+
+const {
+ arrowFunctionExpression,
+ assertExpression,
+ assignmentExpression,
+ blockStatement,
+ callExpression,
+ cloneNode,
+ expressionStatement,
+ isExpression
+} = _t;
+
+function insertBefore(nodes_) {
+ this._assertUnremoved();
+
+ const nodes = this._verifyNodeList(nodes_);
+
+ const {
+ parentPath
+ } = this;
+
+ if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() || parentPath.isExportNamedDeclaration() || parentPath.isExportDefaultDeclaration() && this.isDeclaration()) {
+ return parentPath.insertBefore(nodes);
+ } else if (this.isNodeType("Expression") && !this.isJSXElement() || parentPath.isForStatement() && this.key === "init") {
+ if (this.node) nodes.push(this.node);
+ return this.replaceExpressionWithStatements(nodes);
+ } else if (Array.isArray(this.container)) {
+ return this._containerInsertBefore(nodes);
+ } else if (this.isStatementOrBlock()) {
+ const node = this.node;
+ const shouldInsertCurrentNode = node && (!this.isExpressionStatement() || node.expression != null);
+ this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));
+ return this.unshiftContainer("body", nodes);
+ } else {
+ throw new Error("We don't know what to do with this node type. " + "We were previously a Statement but we can't fit in here?");
+ }
+}
+
+function _containerInsert(from, nodes) {
+ this.updateSiblingKeys(from, nodes.length);
+ const paths = [];
+ this.container.splice(from, 0, ...nodes);
+
+ for (let i = 0; i < nodes.length; i++) {
+ const to = from + i;
+ const path = this.getSibling(to);
+ paths.push(path);
+
+ if (this.context && this.context.queue) {
+ path.pushContext(this.context);
+ }
+ }
+
+ const contexts = this._getQueueContexts();
+
+ for (const path of paths) {
+ path.setScope();
+ path.debug("Inserted.");
+
+ for (const context of contexts) {
+ context.maybeQueue(path, true);
+ }
+ }
+
+ return paths;
+}
+
+function _containerInsertBefore(nodes) {
+ return this._containerInsert(this.key, nodes);
+}
+
+function _containerInsertAfter(nodes) {
+ return this._containerInsert(this.key + 1, nodes);
+}
+
+function insertAfter(nodes_) {
+ this._assertUnremoved();
+
+ const nodes = this._verifyNodeList(nodes_);
+
+ const {
+ parentPath
+ } = this;
+
+ if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() || parentPath.isExportNamedDeclaration() || parentPath.isExportDefaultDeclaration() && this.isDeclaration()) {
+ return parentPath.insertAfter(nodes.map(node => {
+ return isExpression(node) ? expressionStatement(node) : node;
+ }));
+ } else if (this.isNodeType("Expression") && !this.isJSXElement() && !parentPath.isJSXElement() || parentPath.isForStatement() && this.key === "init") {
+ if (this.node) {
+ const node = this.node;
+ let {
+ scope
+ } = this;
+
+ if (scope.path.isPattern()) {
+ assertExpression(node);
+ this.replaceWith(callExpression(arrowFunctionExpression([], node), []));
+ this.get("callee.body").insertAfter(nodes);
+ return [this];
+ }
+
+ if (parentPath.isMethod({
+ computed: true,
+ key: node
+ })) {
+ scope = scope.parent;
+ }
+
+ const temp = scope.generateDeclaredUidIdentifier();
+ nodes.unshift(expressionStatement(assignmentExpression("=", cloneNode(temp), node)));
+ nodes.push(expressionStatement(cloneNode(temp)));
+ }
+
+ return this.replaceExpressionWithStatements(nodes);
+ } else if (Array.isArray(this.container)) {
+ return this._containerInsertAfter(nodes);
+ } else if (this.isStatementOrBlock()) {
+ const node = this.node;
+ const shouldInsertCurrentNode = node && (!this.isExpressionStatement() || node.expression != null);
+ this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));
+ return this.pushContainer("body", nodes);
+ } else {
+ throw new Error("We don't know what to do with this node type. " + "We were previously a Statement but we can't fit in here?");
+ }
+}
+
+function updateSiblingKeys(fromIndex, incrementBy) {
+ if (!this.parent) return;
+
+ const paths = _cache.path.get(this.parent);
+
+ for (const [, path] of paths) {
+ if (path.key >= fromIndex) {
+ path.key += incrementBy;
+ }
+ }
+}
+
+function _verifyNodeList(nodes) {
+ if (!nodes) {
+ return [];
+ }
+
+ if (!Array.isArray(nodes)) {
+ nodes = [nodes];
+ }
+
+ for (let i = 0; i < nodes.length; i++) {
+ const node = nodes[i];
+ let msg;
+
+ if (!node) {
+ msg = "has falsy node";
+ } else if (typeof node !== "object") {
+ msg = "contains a non-object node";
+ } else if (!node.type) {
+ msg = "without a type";
+ } else if (node instanceof _index.default) {
+ msg = "has a NodePath when it expected a raw object";
+ }
+
+ if (msg) {
+ const type = Array.isArray(node) ? "array" : typeof node;
+ throw new Error(`Node list ${msg} with the index of ${i} and type of ${type}`);
+ }
+ }
+
+ return nodes;
+}
+
+function unshiftContainer(listKey, nodes) {
+ this._assertUnremoved();
+
+ nodes = this._verifyNodeList(nodes);
+
+ const path = _index.default.get({
+ parentPath: this,
+ parent: this.node,
+ container: this.node[listKey],
+ listKey,
+ key: 0
+ }).setContext(this.context);
+
+ return path._containerInsertBefore(nodes);
+}
+
+function pushContainer(listKey, nodes) {
+ this._assertUnremoved();
+
+ const verifiedNodes = this._verifyNodeList(nodes);
+
+ const container = this.node[listKey];
+
+ const path = _index.default.get({
+ parentPath: this,
+ parent: this.node,
+ container: container,
+ listKey,
+ key: container.length
+ }).setContext(this.context);
+
+ return path.replaceWithMultiple(verifiedNodes);
+}
+
+function hoist(scope = this.scope) {
+ const hoister = new _hoister.default(this, scope);
+ return hoister.run();
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/removal.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/removal.js
new file mode 100644
index 00000000000..7f787c22c77
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/removal.js
@@ -0,0 +1,73 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.remove = remove;
+exports._removeFromScope = _removeFromScope;
+exports._callRemovalHooks = _callRemovalHooks;
+exports._remove = _remove;
+exports._markRemoved = _markRemoved;
+exports._assertUnremoved = _assertUnremoved;
+
+var _removalHooks = require("./lib/removal-hooks");
+
+var _cache = require("../cache");
+
+var _index = require("./index");
+
+function remove() {
+ var _this$opts;
+
+ this._assertUnremoved();
+
+ this.resync();
+
+ if (!((_this$opts = this.opts) != null && _this$opts.noScope)) {
+ this._removeFromScope();
+ }
+
+ if (this._callRemovalHooks()) {
+ this._markRemoved();
+
+ return;
+ }
+
+ this.shareCommentsWithSiblings();
+
+ this._remove();
+
+ this._markRemoved();
+}
+
+function _removeFromScope() {
+ const bindings = this.getBindingIdentifiers();
+ Object.keys(bindings).forEach(name => this.scope.removeBinding(name));
+}
+
+function _callRemovalHooks() {
+ for (const fn of _removalHooks.hooks) {
+ if (fn(this, this.parentPath)) return true;
+ }
+}
+
+function _remove() {
+ if (Array.isArray(this.container)) {
+ this.container.splice(this.key, 1);
+ this.updateSiblingKeys(this.key, -1);
+ } else {
+ this._replaceWith(null);
+ }
+}
+
+function _markRemoved() {
+ this._traverseFlags |= _index.SHOULD_SKIP | _index.REMOVED;
+ if (this.parent) _cache.path.get(this.parent).delete(this.node);
+ this.node = null;
+}
+
+function _assertUnremoved() {
+ if (this.removed) {
+ throw this.buildCodeFrameError("NodePath has been removed so is read-only.");
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/path/replacement.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/replacement.js
new file mode 100644
index 00000000000..ddd88baf979
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/path/replacement.js
@@ -0,0 +1,260 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.replaceWithMultiple = replaceWithMultiple;
+exports.replaceWithSourceString = replaceWithSourceString;
+exports.replaceWith = replaceWith;
+exports._replaceWith = _replaceWith;
+exports.replaceExpressionWithStatements = replaceExpressionWithStatements;
+exports.replaceInline = replaceInline;
+
+var _codeFrame = require("@babel/code-frame");
+
+var _index = require("../index");
+
+var _index2 = require("./index");
+
+var _cache = require("../cache");
+
+var _parser = require("@babel/parser");
+
+var _t = require("@babel/types");
+
+var _helperHoistVariables = require("@babel/helper-hoist-variables");
+
+const {
+ FUNCTION_TYPES,
+ arrowFunctionExpression,
+ assignmentExpression,
+ awaitExpression,
+ blockStatement,
+ callExpression,
+ cloneNode,
+ expressionStatement,
+ identifier,
+ inheritLeadingComments,
+ inheritTrailingComments,
+ inheritsComments,
+ isExpression,
+ isProgram,
+ isStatement,
+ removeComments,
+ returnStatement,
+ toSequenceExpression,
+ validate,
+ yieldExpression
+} = _t;
+
+function replaceWithMultiple(nodes) {
+ var _pathCache$get;
+
+ this.resync();
+ nodes = this._verifyNodeList(nodes);
+ inheritLeadingComments(nodes[0], this.node);
+ inheritTrailingComments(nodes[nodes.length - 1], this.node);
+ (_pathCache$get = _cache.path.get(this.parent)) == null ? void 0 : _pathCache$get.delete(this.node);
+ this.node = this.container[this.key] = null;
+ const paths = this.insertAfter(nodes);
+
+ if (this.node) {
+ this.requeue();
+ } else {
+ this.remove();
+ }
+
+ return paths;
+}
+
+function replaceWithSourceString(replacement) {
+ this.resync();
+
+ try {
+ replacement = `(${replacement})`;
+ replacement = (0, _parser.parse)(replacement);
+ } catch (err) {
+ const loc = err.loc;
+
+ if (loc) {
+ err.message += " - make sure this is an expression.\n" + (0, _codeFrame.codeFrameColumns)(replacement, {
+ start: {
+ line: loc.line,
+ column: loc.column + 1
+ }
+ });
+ err.code = "BABEL_REPLACE_SOURCE_ERROR";
+ }
+
+ throw err;
+ }
+
+ replacement = replacement.program.body[0].expression;
+
+ _index.default.removeProperties(replacement);
+
+ return this.replaceWith(replacement);
+}
+
+function replaceWith(replacement) {
+ this.resync();
+
+ if (this.removed) {
+ throw new Error("You can't replace this node, we've already removed it");
+ }
+
+ if (replacement instanceof _index2.default) {
+ replacement = replacement.node;
+ }
+
+ if (!replacement) {
+ throw new Error("You passed `path.replaceWith()` a falsy node, use `path.remove()` instead");
+ }
+
+ if (this.node === replacement) {
+ return [this];
+ }
+
+ if (this.isProgram() && !isProgram(replacement)) {
+ throw new Error("You can only replace a Program root node with another Program node");
+ }
+
+ if (Array.isArray(replacement)) {
+ throw new Error("Don't use `path.replaceWith()` with an array of nodes, use `path.replaceWithMultiple()`");
+ }
+
+ if (typeof replacement === "string") {
+ throw new Error("Don't use `path.replaceWith()` with a source string, use `path.replaceWithSourceString()`");
+ }
+
+ let nodePath = "";
+
+ if (this.isNodeType("Statement") && isExpression(replacement)) {
+ if (!this.canHaveVariableDeclarationOrExpression() && !this.canSwapBetweenExpressionAndStatement(replacement) && !this.parentPath.isExportDefaultDeclaration()) {
+ replacement = expressionStatement(replacement);
+ nodePath = "expression";
+ }
+ }
+
+ if (this.isNodeType("Expression") && isStatement(replacement)) {
+ if (!this.canHaveVariableDeclarationOrExpression() && !this.canSwapBetweenExpressionAndStatement(replacement)) {
+ return this.replaceExpressionWithStatements([replacement]);
+ }
+ }
+
+ const oldNode = this.node;
+
+ if (oldNode) {
+ inheritsComments(replacement, oldNode);
+ removeComments(oldNode);
+ }
+
+ this._replaceWith(replacement);
+
+ this.type = replacement.type;
+ this.setScope();
+ this.requeue();
+ return [nodePath ? this.get(nodePath) : this];
+}
+
+function _replaceWith(node) {
+ var _pathCache$get2;
+
+ if (!this.container) {
+ throw new ReferenceError("Container is falsy");
+ }
+
+ if (this.inList) {
+ validate(this.parent, this.key, [node]);
+ } else {
+ validate(this.parent, this.key, node);
+ }
+
+ this.debug(`Replace with ${node == null ? void 0 : node.type}`);
+ (_pathCache$get2 = _cache.path.get(this.parent)) == null ? void 0 : _pathCache$get2.set(node, this).delete(this.node);
+ this.node = this.container[this.key] = node;
+}
+
+function replaceExpressionWithStatements(nodes) {
+ this.resync();
+ const nodesAsSequenceExpression = toSequenceExpression(nodes, this.scope);
+
+ if (nodesAsSequenceExpression) {
+ return this.replaceWith(nodesAsSequenceExpression)[0].get("expressions");
+ }
+
+ const functionParent = this.getFunctionParent();
+ const isParentAsync = functionParent == null ? void 0 : functionParent.is("async");
+ const isParentGenerator = functionParent == null ? void 0 : functionParent.is("generator");
+ const container = arrowFunctionExpression([], blockStatement(nodes));
+ this.replaceWith(callExpression(container, []));
+ const callee = this.get("callee");
+ (0, _helperHoistVariables.default)(callee.get("body"), id => {
+ this.scope.push({
+ id
+ });
+ }, "var");
+ const completionRecords = this.get("callee").getCompletionRecords();
+
+ for (const path of completionRecords) {
+ if (!path.isExpressionStatement()) continue;
+ const loop = path.findParent(path => path.isLoop());
+
+ if (loop) {
+ let uid = loop.getData("expressionReplacementReturnUid");
+
+ if (!uid) {
+ uid = callee.scope.generateDeclaredUidIdentifier("ret");
+ callee.get("body").pushContainer("body", returnStatement(cloneNode(uid)));
+ loop.setData("expressionReplacementReturnUid", uid);
+ } else {
+ uid = identifier(uid.name);
+ }
+
+ path.get("expression").replaceWith(assignmentExpression("=", cloneNode(uid), path.node.expression));
+ } else {
+ path.replaceWith(returnStatement(path.node.expression));
+ }
+ }
+
+ callee.arrowFunctionToExpression();
+ const newCallee = callee;
+
+ const needToAwaitFunction = isParentAsync && _index.default.hasType(this.get("callee.body").node, "AwaitExpression", FUNCTION_TYPES);
+
+ const needToYieldFunction = isParentGenerator && _index.default.hasType(this.get("callee.body").node, "YieldExpression", FUNCTION_TYPES);
+
+ if (needToAwaitFunction) {
+ newCallee.set("async", true);
+
+ if (!needToYieldFunction) {
+ this.replaceWith(awaitExpression(this.node));
+ }
+ }
+
+ if (needToYieldFunction) {
+ newCallee.set("generator", true);
+ this.replaceWith(yieldExpression(this.node, true));
+ }
+
+ return newCallee.get("body.body");
+}
+
+function replaceInline(nodes) {
+ this.resync();
+
+ if (Array.isArray(nodes)) {
+ if (Array.isArray(this.container)) {
+ nodes = this._verifyNodeList(nodes);
+
+ const paths = this._containerInsertAfter(nodes);
+
+ this.remove();
+ return paths;
+ } else {
+ return this.replaceWithMultiple(nodes);
+ }
+ } else {
+ return this.replaceWith(nodes);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/binding.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/binding.js
new file mode 100644
index 00000000000..16911ef21c0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/binding.js
@@ -0,0 +1,75 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+class Binding {
+ constructor({
+ identifier,
+ scope,
+ path,
+ kind
+ }) {
+ this.identifier = void 0;
+ this.scope = void 0;
+ this.path = void 0;
+ this.kind = void 0;
+ this.constantViolations = [];
+ this.constant = true;
+ this.referencePaths = [];
+ this.referenced = false;
+ this.references = 0;
+ this.identifier = identifier;
+ this.scope = scope;
+ this.path = path;
+ this.kind = kind;
+ this.clearValue();
+ }
+
+ deoptValue() {
+ this.clearValue();
+ this.hasDeoptedValue = true;
+ }
+
+ setValue(value) {
+ if (this.hasDeoptedValue) return;
+ this.hasValue = true;
+ this.value = value;
+ }
+
+ clearValue() {
+ this.hasDeoptedValue = false;
+ this.hasValue = false;
+ this.value = null;
+ }
+
+ reassign(path) {
+ this.constant = false;
+
+ if (this.constantViolations.indexOf(path) !== -1) {
+ return;
+ }
+
+ this.constantViolations.push(path);
+ }
+
+ reference(path) {
+ if (this.referencePaths.indexOf(path) !== -1) {
+ return;
+ }
+
+ this.referenced = true;
+ this.references++;
+ this.referencePaths.push(path);
+ }
+
+ dereference() {
+ this.references--;
+ this.referenced = !!this.references;
+ }
+
+}
+
+exports.default = Binding; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/index.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/index.js
new file mode 100644
index 00000000000..8ab588a31d3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/index.js
@@ -0,0 +1,1015 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _renamer = require("./lib/renamer");
+
+var _index = require("../index");
+
+var _binding = require("./binding");
+
+var _globals = require("globals");
+
+var _t = require("@babel/types");
+
+var _cache = require("../cache");
+
+const {
+ NOT_LOCAL_BINDING,
+ callExpression,
+ cloneNode,
+ getBindingIdentifiers,
+ identifier,
+ isArrayExpression,
+ isBinary,
+ isClass,
+ isClassBody,
+ isClassDeclaration,
+ isExportAllDeclaration,
+ isExportDefaultDeclaration,
+ isExportNamedDeclaration,
+ isFunctionDeclaration,
+ isIdentifier,
+ isImportDeclaration,
+ isLiteral,
+ isMethod,
+ isModuleDeclaration,
+ isModuleSpecifier,
+ isObjectExpression,
+ isProperty,
+ isPureish,
+ isSuper,
+ isTaggedTemplateExpression,
+ isTemplateLiteral,
+ isThisExpression,
+ isUnaryExpression,
+ isVariableDeclaration,
+ matchesPattern,
+ memberExpression,
+ numericLiteral,
+ toIdentifier,
+ unaryExpression,
+ variableDeclaration,
+ variableDeclarator
+} = _t;
+
+function gatherNodeParts(node, parts) {
+ switch (node == null ? void 0 : node.type) {
+ default:
+ if (isModuleDeclaration(node)) {
+ if ((isExportAllDeclaration(node) || isExportNamedDeclaration(node) || isImportDeclaration(node)) && node.source) {
+ gatherNodeParts(node.source, parts);
+ } else if ((isExportNamedDeclaration(node) || isImportDeclaration(node)) && node.specifiers && node.specifiers.length) {
+ for (const e of node.specifiers) gatherNodeParts(e, parts);
+ } else if ((isExportDefaultDeclaration(node) || isExportNamedDeclaration(node)) && node.declaration) {
+ gatherNodeParts(node.declaration, parts);
+ }
+ } else if (isModuleSpecifier(node)) {
+ gatherNodeParts(node.local, parts);
+ } else if (isLiteral(node)) {
+ parts.push(node.value);
+ }
+
+ break;
+
+ case "MemberExpression":
+ case "OptionalMemberExpression":
+ case "JSXMemberExpression":
+ gatherNodeParts(node.object, parts);
+ gatherNodeParts(node.property, parts);
+ break;
+
+ case "Identifier":
+ case "JSXIdentifier":
+ parts.push(node.name);
+ break;
+
+ case "CallExpression":
+ case "OptionalCallExpression":
+ case "NewExpression":
+ gatherNodeParts(node.callee, parts);
+ break;
+
+ case "ObjectExpression":
+ case "ObjectPattern":
+ for (const e of node.properties) {
+ gatherNodeParts(e, parts);
+ }
+
+ break;
+
+ case "SpreadElement":
+ case "RestElement":
+ gatherNodeParts(node.argument, parts);
+ break;
+
+ case "ObjectProperty":
+ case "ObjectMethod":
+ case "ClassProperty":
+ case "ClassMethod":
+ case "ClassPrivateProperty":
+ case "ClassPrivateMethod":
+ gatherNodeParts(node.key, parts);
+ break;
+
+ case "ThisExpression":
+ parts.push("this");
+ break;
+
+ case "Super":
+ parts.push("super");
+ break;
+
+ case "Import":
+ parts.push("import");
+ break;
+
+ case "DoExpression":
+ parts.push("do");
+ break;
+
+ case "YieldExpression":
+ parts.push("yield");
+ gatherNodeParts(node.argument, parts);
+ break;
+
+ case "AwaitExpression":
+ parts.push("await");
+ gatherNodeParts(node.argument, parts);
+ break;
+
+ case "AssignmentExpression":
+ gatherNodeParts(node.left, parts);
+ break;
+
+ case "VariableDeclarator":
+ gatherNodeParts(node.id, parts);
+ break;
+
+ case "FunctionExpression":
+ case "FunctionDeclaration":
+ case "ClassExpression":
+ case "ClassDeclaration":
+ gatherNodeParts(node.id, parts);
+ break;
+
+ case "PrivateName":
+ gatherNodeParts(node.id, parts);
+ break;
+
+ case "ParenthesizedExpression":
+ gatherNodeParts(node.expression, parts);
+ break;
+
+ case "UnaryExpression":
+ case "UpdateExpression":
+ gatherNodeParts(node.argument, parts);
+ break;
+
+ case "MetaProperty":
+ gatherNodeParts(node.meta, parts);
+ gatherNodeParts(node.property, parts);
+ break;
+
+ case "JSXElement":
+ gatherNodeParts(node.openingElement, parts);
+ break;
+
+ case "JSXOpeningElement":
+ parts.push(node.name);
+ break;
+
+ case "JSXFragment":
+ gatherNodeParts(node.openingFragment, parts);
+ break;
+
+ case "JSXOpeningFragment":
+ parts.push("Fragment");
+ break;
+
+ case "JSXNamespacedName":
+ gatherNodeParts(node.namespace, parts);
+ gatherNodeParts(node.name, parts);
+ break;
+ }
+}
+
+const collectorVisitor = {
+ ForStatement(path) {
+ const declar = path.get("init");
+
+ if (declar.isVar()) {
+ const {
+ scope
+ } = path;
+ const parentScope = scope.getFunctionParent() || scope.getProgramParent();
+ parentScope.registerBinding("var", declar);
+ }
+ },
+
+ Declaration(path) {
+ if (path.isBlockScoped()) return;
+ if (path.isImportDeclaration()) return;
+ if (path.isExportDeclaration()) return;
+ const parent = path.scope.getFunctionParent() || path.scope.getProgramParent();
+ parent.registerDeclaration(path);
+ },
+
+ ImportDeclaration(path) {
+ const parent = path.scope.getBlockParent();
+ parent.registerDeclaration(path);
+ },
+
+ ReferencedIdentifier(path, state) {
+ state.references.push(path);
+ },
+
+ ForXStatement(path, state) {
+ const left = path.get("left");
+
+ if (left.isPattern() || left.isIdentifier()) {
+ state.constantViolations.push(path);
+ } else if (left.isVar()) {
+ const {
+ scope
+ } = path;
+ const parentScope = scope.getFunctionParent() || scope.getProgramParent();
+ parentScope.registerBinding("var", left);
+ }
+ },
+
+ ExportDeclaration: {
+ exit(path) {
+ const {
+ node,
+ scope
+ } = path;
+ if (isExportAllDeclaration(node)) return;
+ const declar = node.declaration;
+
+ if (isClassDeclaration(declar) || isFunctionDeclaration(declar)) {
+ const id = declar.id;
+ if (!id) return;
+ const binding = scope.getBinding(id.name);
+ binding == null ? void 0 : binding.reference(path);
+ } else if (isVariableDeclaration(declar)) {
+ for (const decl of declar.declarations) {
+ for (const name of Object.keys(getBindingIdentifiers(decl))) {
+ const binding = scope.getBinding(name);
+ binding == null ? void 0 : binding.reference(path);
+ }
+ }
+ }
+ }
+
+ },
+
+ LabeledStatement(path) {
+ path.scope.getBlockParent().registerDeclaration(path);
+ },
+
+ AssignmentExpression(path, state) {
+ state.assignments.push(path);
+ },
+
+ UpdateExpression(path, state) {
+ state.constantViolations.push(path);
+ },
+
+ UnaryExpression(path, state) {
+ if (path.node.operator === "delete") {
+ state.constantViolations.push(path);
+ }
+ },
+
+ BlockScoped(path) {
+ let scope = path.scope;
+ if (scope.path === path) scope = scope.parent;
+ const parent = scope.getBlockParent();
+ parent.registerDeclaration(path);
+
+ if (path.isClassDeclaration() && path.node.id) {
+ const id = path.node.id;
+ const name = id.name;
+ path.scope.bindings[name] = path.scope.parent.getBinding(name);
+ }
+ },
+
+ CatchClause(path) {
+ path.scope.registerBinding("let", path);
+ },
+
+ Function(path) {
+ if (path.isFunctionExpression() && path.has("id") && !path.get("id").node[NOT_LOCAL_BINDING]) {
+ path.scope.registerBinding("local", path.get("id"), path);
+ }
+
+ const params = path.get("params");
+
+ for (const param of params) {
+ path.scope.registerBinding("param", param);
+ }
+ },
+
+ ClassExpression(path) {
+ if (path.has("id") && !path.get("id").node[NOT_LOCAL_BINDING]) {
+ path.scope.registerBinding("local", path);
+ }
+ }
+
+};
+let uid = 0;
+
+class Scope {
+ constructor(path) {
+ this.uid = void 0;
+ this.path = void 0;
+ this.block = void 0;
+ this.labels = void 0;
+ this.inited = void 0;
+ this.bindings = void 0;
+ this.references = void 0;
+ this.globals = void 0;
+ this.uids = void 0;
+ this.data = void 0;
+ this.crawling = void 0;
+ const {
+ node
+ } = path;
+
+ const cached = _cache.scope.get(node);
+
+ if ((cached == null ? void 0 : cached.path) === path) {
+ return cached;
+ }
+
+ _cache.scope.set(node, this);
+
+ this.uid = uid++;
+ this.block = node;
+ this.path = path;
+ this.labels = new Map();
+ this.inited = false;
+ }
+
+ get parent() {
+ var _parent;
+
+ let parent,
+ path = this.path;
+
+ do {
+ const isKey = path.key === "key";
+ path = path.parentPath;
+ if (isKey && path.isMethod()) path = path.parentPath;
+ if (path && path.isScope()) parent = path;
+ } while (path && !parent);
+
+ return (_parent = parent) == null ? void 0 : _parent.scope;
+ }
+
+ get parentBlock() {
+ return this.path.parent;
+ }
+
+ get hub() {
+ return this.path.hub;
+ }
+
+ traverse(node, opts, state) {
+ (0, _index.default)(node, opts, this, state, this.path);
+ }
+
+ generateDeclaredUidIdentifier(name) {
+ const id = this.generateUidIdentifier(name);
+ this.push({
+ id
+ });
+ return cloneNode(id);
+ }
+
+ generateUidIdentifier(name) {
+ return identifier(this.generateUid(name));
+ }
+
+ generateUid(name = "temp") {
+ name = toIdentifier(name).replace(/^_+/, "").replace(/[0-9]+$/g, "");
+ let uid;
+ let i = 1;
+
+ do {
+ uid = this._generateUid(name, i);
+ i++;
+ } while (this.hasLabel(uid) || this.hasBinding(uid) || this.hasGlobal(uid) || this.hasReference(uid));
+
+ const program = this.getProgramParent();
+ program.references[uid] = true;
+ program.uids[uid] = true;
+ return uid;
+ }
+
+ _generateUid(name, i) {
+ let id = name;
+ if (i > 1) id += i;
+ return `_${id}`;
+ }
+
+ generateUidBasedOnNode(node, defaultName) {
+ const parts = [];
+ gatherNodeParts(node, parts);
+ let id = parts.join("$");
+ id = id.replace(/^_/, "") || defaultName || "ref";
+ return this.generateUid(id.slice(0, 20));
+ }
+
+ generateUidIdentifierBasedOnNode(node, defaultName) {
+ return identifier(this.generateUidBasedOnNode(node, defaultName));
+ }
+
+ isStatic(node) {
+ if (isThisExpression(node) || isSuper(node)) {
+ return true;
+ }
+
+ if (isIdentifier(node)) {
+ const binding = this.getBinding(node.name);
+
+ if (binding) {
+ return binding.constant;
+ } else {
+ return this.hasBinding(node.name);
+ }
+ }
+
+ return false;
+ }
+
+ maybeGenerateMemoised(node, dontPush) {
+ if (this.isStatic(node)) {
+ return null;
+ } else {
+ const id = this.generateUidIdentifierBasedOnNode(node);
+
+ if (!dontPush) {
+ this.push({
+ id
+ });
+ return cloneNode(id);
+ }
+
+ return id;
+ }
+ }
+
+ checkBlockScopedCollisions(local, kind, name, id) {
+ if (kind === "param") return;
+ if (local.kind === "local") return;
+ const duplicate = kind === "let" || local.kind === "let" || local.kind === "const" || local.kind === "module" || local.kind === "param" && (kind === "let" || kind === "const");
+
+ if (duplicate) {
+ throw this.hub.buildError(id, `Duplicate declaration "${name}"`, TypeError);
+ }
+ }
+
+ rename(oldName, newName, block) {
+ const binding = this.getBinding(oldName);
+
+ if (binding) {
+ newName = newName || this.generateUidIdentifier(oldName).name;
+ return new _renamer.default(binding, oldName, newName).rename(block);
+ }
+ }
+
+ _renameFromMap(map, oldName, newName, value) {
+ if (map[oldName]) {
+ map[newName] = value;
+ map[oldName] = null;
+ }
+ }
+
+ dump() {
+ const sep = "-".repeat(60);
+ console.log(sep);
+ let scope = this;
+
+ do {
+ console.log("#", scope.block.type);
+
+ for (const name of Object.keys(scope.bindings)) {
+ const binding = scope.bindings[name];
+ console.log(" -", name, {
+ constant: binding.constant,
+ references: binding.references,
+ violations: binding.constantViolations.length,
+ kind: binding.kind
+ });
+ }
+ } while (scope = scope.parent);
+
+ console.log(sep);
+ }
+
+ toArray(node, i, arrayLikeIsIterable) {
+ if (isIdentifier(node)) {
+ const binding = this.getBinding(node.name);
+
+ if (binding != null && binding.constant && binding.path.isGenericType("Array")) {
+ return node;
+ }
+ }
+
+ if (isArrayExpression(node)) {
+ return node;
+ }
+
+ if (isIdentifier(node, {
+ name: "arguments"
+ })) {
+ return callExpression(memberExpression(memberExpression(memberExpression(identifier("Array"), identifier("prototype")), identifier("slice")), identifier("call")), [node]);
+ }
+
+ let helperName;
+ const args = [node];
+
+ if (i === true) {
+ helperName = "toConsumableArray";
+ } else if (i) {
+ args.push(numericLiteral(i));
+ helperName = "slicedToArray";
+ } else {
+ helperName = "toArray";
+ }
+
+ if (arrayLikeIsIterable) {
+ args.unshift(this.hub.addHelper(helperName));
+ helperName = "maybeArrayLike";
+ }
+
+ return callExpression(this.hub.addHelper(helperName), args);
+ }
+
+ hasLabel(name) {
+ return !!this.getLabel(name);
+ }
+
+ getLabel(name) {
+ return this.labels.get(name);
+ }
+
+ registerLabel(path) {
+ this.labels.set(path.node.label.name, path);
+ }
+
+ registerDeclaration(path) {
+ if (path.isLabeledStatement()) {
+ this.registerLabel(path);
+ } else if (path.isFunctionDeclaration()) {
+ this.registerBinding("hoisted", path.get("id"), path);
+ } else if (path.isVariableDeclaration()) {
+ const declarations = path.get("declarations");
+
+ for (const declar of declarations) {
+ this.registerBinding(path.node.kind, declar);
+ }
+ } else if (path.isClassDeclaration()) {
+ this.registerBinding("let", path);
+ } else if (path.isImportDeclaration()) {
+ const specifiers = path.get("specifiers");
+
+ for (const specifier of specifiers) {
+ this.registerBinding("module", specifier);
+ }
+ } else if (path.isExportDeclaration()) {
+ const declar = path.get("declaration");
+
+ if (declar.isClassDeclaration() || declar.isFunctionDeclaration() || declar.isVariableDeclaration()) {
+ this.registerDeclaration(declar);
+ }
+ } else {
+ this.registerBinding("unknown", path);
+ }
+ }
+
+ buildUndefinedNode() {
+ return unaryExpression("void", numericLiteral(0), true);
+ }
+
+ registerConstantViolation(path) {
+ const ids = path.getBindingIdentifiers();
+
+ for (const name of Object.keys(ids)) {
+ const binding = this.getBinding(name);
+ if (binding) binding.reassign(path);
+ }
+ }
+
+ registerBinding(kind, path, bindingPath = path) {
+ if (!kind) throw new ReferenceError("no `kind`");
+
+ if (path.isVariableDeclaration()) {
+ const declarators = path.get("declarations");
+
+ for (const declar of declarators) {
+ this.registerBinding(kind, declar);
+ }
+
+ return;
+ }
+
+ const parent = this.getProgramParent();
+ const ids = path.getOuterBindingIdentifiers(true);
+
+ for (const name of Object.keys(ids)) {
+ parent.references[name] = true;
+
+ for (const id of ids[name]) {
+ const local = this.getOwnBinding(name);
+
+ if (local) {
+ if (local.identifier === id) continue;
+ this.checkBlockScopedCollisions(local, kind, name, id);
+ }
+
+ if (local) {
+ this.registerConstantViolation(bindingPath);
+ } else {
+ this.bindings[name] = new _binding.default({
+ identifier: id,
+ scope: this,
+ path: bindingPath,
+ kind: kind
+ });
+ }
+ }
+ }
+ }
+
+ addGlobal(node) {
+ this.globals[node.name] = node;
+ }
+
+ hasUid(name) {
+ let scope = this;
+
+ do {
+ if (scope.uids[name]) return true;
+ } while (scope = scope.parent);
+
+ return false;
+ }
+
+ hasGlobal(name) {
+ let scope = this;
+
+ do {
+ if (scope.globals[name]) return true;
+ } while (scope = scope.parent);
+
+ return false;
+ }
+
+ hasReference(name) {
+ return !!this.getProgramParent().references[name];
+ }
+
+ isPure(node, constantsOnly) {
+ if (isIdentifier(node)) {
+ const binding = this.getBinding(node.name);
+ if (!binding) return false;
+ if (constantsOnly) return binding.constant;
+ return true;
+ } else if (isClass(node)) {
+ if (node.superClass && !this.isPure(node.superClass, constantsOnly)) {
+ return false;
+ }
+
+ return this.isPure(node.body, constantsOnly);
+ } else if (isClassBody(node)) {
+ for (const method of node.body) {
+ if (!this.isPure(method, constantsOnly)) return false;
+ }
+
+ return true;
+ } else if (isBinary(node)) {
+ return this.isPure(node.left, constantsOnly) && this.isPure(node.right, constantsOnly);
+ } else if (isArrayExpression(node)) {
+ for (const elem of node.elements) {
+ if (!this.isPure(elem, constantsOnly)) return false;
+ }
+
+ return true;
+ } else if (isObjectExpression(node)) {
+ for (const prop of node.properties) {
+ if (!this.isPure(prop, constantsOnly)) return false;
+ }
+
+ return true;
+ } else if (isMethod(node)) {
+ if (node.computed && !this.isPure(node.key, constantsOnly)) return false;
+ if (node.kind === "get" || node.kind === "set") return false;
+ return true;
+ } else if (isProperty(node)) {
+ if (node.computed && !this.isPure(node.key, constantsOnly)) return false;
+ return this.isPure(node.value, constantsOnly);
+ } else if (isUnaryExpression(node)) {
+ return this.isPure(node.argument, constantsOnly);
+ } else if (isTaggedTemplateExpression(node)) {
+ return matchesPattern(node.tag, "String.raw") && !this.hasBinding("String", true) && this.isPure(node.quasi, constantsOnly);
+ } else if (isTemplateLiteral(node)) {
+ for (const expression of node.expressions) {
+ if (!this.isPure(expression, constantsOnly)) return false;
+ }
+
+ return true;
+ } else {
+ return isPureish(node);
+ }
+ }
+
+ setData(key, val) {
+ return this.data[key] = val;
+ }
+
+ getData(key) {
+ let scope = this;
+
+ do {
+ const data = scope.data[key];
+ if (data != null) return data;
+ } while (scope = scope.parent);
+ }
+
+ removeData(key) {
+ let scope = this;
+
+ do {
+ const data = scope.data[key];
+ if (data != null) scope.data[key] = null;
+ } while (scope = scope.parent);
+ }
+
+ init() {
+ if (!this.inited) {
+ this.inited = true;
+ this.crawl();
+ }
+ }
+
+ crawl() {
+ const path = this.path;
+ this.references = Object.create(null);
+ this.bindings = Object.create(null);
+ this.globals = Object.create(null);
+ this.uids = Object.create(null);
+ this.data = Object.create(null);
+ const programParent = this.getProgramParent();
+ if (programParent.crawling) return;
+ const state = {
+ references: [],
+ constantViolations: [],
+ assignments: []
+ };
+ this.crawling = true;
+
+ if (path.type !== "Program" && collectorVisitor._exploded) {
+ for (const visit of collectorVisitor.enter) {
+ visit(path, state);
+ }
+
+ const typeVisitors = collectorVisitor[path.type];
+
+ if (typeVisitors) {
+ for (const visit of typeVisitors.enter) {
+ visit(path, state);
+ }
+ }
+ }
+
+ path.traverse(collectorVisitor, state);
+ this.crawling = false;
+
+ for (const path of state.assignments) {
+ const ids = path.getBindingIdentifiers();
+
+ for (const name of Object.keys(ids)) {
+ if (path.scope.getBinding(name)) continue;
+ programParent.addGlobal(ids[name]);
+ }
+
+ path.scope.registerConstantViolation(path);
+ }
+
+ for (const ref of state.references) {
+ const binding = ref.scope.getBinding(ref.node.name);
+
+ if (binding) {
+ binding.reference(ref);
+ } else {
+ programParent.addGlobal(ref.node);
+ }
+ }
+
+ for (const path of state.constantViolations) {
+ path.scope.registerConstantViolation(path);
+ }
+ }
+
+ push(opts) {
+ let path = this.path;
+
+ if (!path.isBlockStatement() && !path.isProgram()) {
+ path = this.getBlockParent().path;
+ }
+
+ if (path.isSwitchStatement()) {
+ path = (this.getFunctionParent() || this.getProgramParent()).path;
+ }
+
+ if (path.isLoop() || path.isCatchClause() || path.isFunction()) {
+ path.ensureBlock();
+ path = path.get("body");
+ }
+
+ const unique = opts.unique;
+ const kind = opts.kind || "var";
+ const blockHoist = opts._blockHoist == null ? 2 : opts._blockHoist;
+ const dataKey = `declaration:${kind}:${blockHoist}`;
+ let declarPath = !unique && path.getData(dataKey);
+
+ if (!declarPath) {
+ const declar = variableDeclaration(kind, []);
+ declar._blockHoist = blockHoist;
+ [declarPath] = path.unshiftContainer("body", [declar]);
+ if (!unique) path.setData(dataKey, declarPath);
+ }
+
+ const declarator = variableDeclarator(opts.id, opts.init);
+ declarPath.node.declarations.push(declarator);
+ this.registerBinding(kind, declarPath.get("declarations").pop());
+ }
+
+ getProgramParent() {
+ let scope = this;
+
+ do {
+ if (scope.path.isProgram()) {
+ return scope;
+ }
+ } while (scope = scope.parent);
+
+ throw new Error("Couldn't find a Program");
+ }
+
+ getFunctionParent() {
+ let scope = this;
+
+ do {
+ if (scope.path.isFunctionParent()) {
+ return scope;
+ }
+ } while (scope = scope.parent);
+
+ return null;
+ }
+
+ getBlockParent() {
+ let scope = this;
+
+ do {
+ if (scope.path.isBlockParent()) {
+ return scope;
+ }
+ } while (scope = scope.parent);
+
+ throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...");
+ }
+
+ getAllBindings() {
+ const ids = Object.create(null);
+ let scope = this;
+
+ do {
+ for (const key of Object.keys(scope.bindings)) {
+ if (key in ids === false) {
+ ids[key] = scope.bindings[key];
+ }
+ }
+
+ scope = scope.parent;
+ } while (scope);
+
+ return ids;
+ }
+
+ getAllBindingsOfKind(...kinds) {
+ const ids = Object.create(null);
+
+ for (const kind of kinds) {
+ let scope = this;
+
+ do {
+ for (const name of Object.keys(scope.bindings)) {
+ const binding = scope.bindings[name];
+ if (binding.kind === kind) ids[name] = binding;
+ }
+
+ scope = scope.parent;
+ } while (scope);
+ }
+
+ return ids;
+ }
+
+ bindingIdentifierEquals(name, node) {
+ return this.getBindingIdentifier(name) === node;
+ }
+
+ getBinding(name) {
+ let scope = this;
+ let previousPath;
+
+ do {
+ const binding = scope.getOwnBinding(name);
+
+ if (binding) {
+ var _previousPath;
+
+ if ((_previousPath = previousPath) != null && _previousPath.isPattern() && binding.kind !== "param") {} else {
+ return binding;
+ }
+ }
+
+ previousPath = scope.path;
+ } while (scope = scope.parent);
+ }
+
+ getOwnBinding(name) {
+ return this.bindings[name];
+ }
+
+ getBindingIdentifier(name) {
+ var _this$getBinding;
+
+ return (_this$getBinding = this.getBinding(name)) == null ? void 0 : _this$getBinding.identifier;
+ }
+
+ getOwnBindingIdentifier(name) {
+ const binding = this.bindings[name];
+ return binding == null ? void 0 : binding.identifier;
+ }
+
+ hasOwnBinding(name) {
+ return !!this.getOwnBinding(name);
+ }
+
+ hasBinding(name, noGlobals) {
+ if (!name) return false;
+ if (this.hasOwnBinding(name)) return true;
+ if (this.parentHasBinding(name, noGlobals)) return true;
+ if (this.hasUid(name)) return true;
+ if (!noGlobals && Scope.globals.includes(name)) return true;
+ if (!noGlobals && Scope.contextVariables.includes(name)) return true;
+ return false;
+ }
+
+ parentHasBinding(name, noGlobals) {
+ var _this$parent;
+
+ return (_this$parent = this.parent) == null ? void 0 : _this$parent.hasBinding(name, noGlobals);
+ }
+
+ moveBindingTo(name, scope) {
+ const info = this.getBinding(name);
+
+ if (info) {
+ info.scope.removeOwnBinding(name);
+ info.scope = scope;
+ scope.bindings[name] = info;
+ }
+ }
+
+ removeOwnBinding(name) {
+ delete this.bindings[name];
+ }
+
+ removeBinding(name) {
+ var _this$getBinding2;
+
+ (_this$getBinding2 = this.getBinding(name)) == null ? void 0 : _this$getBinding2.scope.removeOwnBinding(name);
+ let scope = this;
+
+ do {
+ if (scope.uids[name]) {
+ scope.uids[name] = false;
+ }
+ } while (scope = scope.parent);
+ }
+
+}
+
+exports.default = Scope;
+Scope.globals = Object.keys(_globals.builtin);
+Scope.contextVariables = ["arguments", "undefined", "Infinity", "NaN"]; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/lib/renamer.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/lib/renamer.js
new file mode 100644
index 00000000000..f11bbb70066
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/scope/lib/renamer.js
@@ -0,0 +1,146 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _binding = require("../binding");
+
+var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
+
+var _t = require("@babel/types");
+
+const {
+ VISITOR_KEYS,
+ assignmentExpression,
+ identifier,
+ toExpression,
+ variableDeclaration,
+ variableDeclarator
+} = _t;
+const renameVisitor = {
+ ReferencedIdentifier({
+ node
+ }, state) {
+ if (node.name === state.oldName) {
+ node.name = state.newName;
+ }
+ },
+
+ Scope(path, state) {
+ if (!path.scope.bindingIdentifierEquals(state.oldName, state.binding.identifier)) {
+ skipAllButComputedMethodKey(path);
+ }
+ },
+
+ "AssignmentExpression|Declaration|VariableDeclarator"(path, state) {
+ if (path.isVariableDeclaration()) return;
+ const ids = path.getOuterBindingIdentifiers();
+
+ for (const name in ids) {
+ if (name === state.oldName) ids[name].name = state.newName;
+ }
+ }
+
+};
+
+class Renamer {
+ constructor(binding, oldName, newName) {
+ this.newName = newName;
+ this.oldName = oldName;
+ this.binding = binding;
+ }
+
+ maybeConvertFromExportDeclaration(parentDeclar) {
+ const maybeExportDeclar = parentDeclar.parentPath;
+
+ if (!maybeExportDeclar.isExportDeclaration()) {
+ return;
+ }
+
+ if (maybeExportDeclar.isExportDefaultDeclaration() && !maybeExportDeclar.get("declaration").node.id) {
+ return;
+ }
+
+ (0, _helperSplitExportDeclaration.default)(maybeExportDeclar);
+ }
+
+ maybeConvertFromClassFunctionDeclaration(path) {
+ return;
+ if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return;
+ if (this.binding.kind !== "hoisted") return;
+ path.node.id = identifier(this.oldName);
+ path.node._blockHoist = 3;
+ path.replaceWith(variableDeclaration("let", [variableDeclarator(identifier(this.newName), toExpression(path.node))]));
+ }
+
+ maybeConvertFromClassFunctionExpression(path) {
+ return;
+ if (!path.isFunctionExpression() && !path.isClassExpression()) return;
+ if (this.binding.kind !== "local") return;
+ path.node.id = identifier(this.oldName);
+ this.binding.scope.parent.push({
+ id: identifier(this.newName)
+ });
+ path.replaceWith(assignmentExpression("=", identifier(this.newName), path.node));
+ }
+
+ rename(block) {
+ const {
+ binding,
+ oldName,
+ newName
+ } = this;
+ const {
+ scope,
+ path
+ } = binding;
+ const parentDeclar = path.find(path => path.isDeclaration() || path.isFunctionExpression() || path.isClassExpression());
+
+ if (parentDeclar) {
+ const bindingIds = parentDeclar.getOuterBindingIdentifiers();
+
+ if (bindingIds[oldName] === binding.identifier) {
+ this.maybeConvertFromExportDeclaration(parentDeclar);
+ }
+ }
+
+ const blockToTraverse = block || scope.block;
+
+ if ((blockToTraverse == null ? void 0 : blockToTraverse.type) === "SwitchStatement") {
+ blockToTraverse.cases.forEach(c => {
+ scope.traverse(c, renameVisitor, this);
+ });
+ } else {
+ scope.traverse(blockToTraverse, renameVisitor, this);
+ }
+
+ if (!block) {
+ scope.removeOwnBinding(oldName);
+ scope.bindings[newName] = binding;
+ this.binding.identifier.name = newName;
+ }
+
+ if (parentDeclar) {
+ this.maybeConvertFromClassFunctionDeclaration(parentDeclar);
+ this.maybeConvertFromClassFunctionExpression(parentDeclar);
+ }
+ }
+
+}
+
+exports.default = Renamer;
+
+function skipAllButComputedMethodKey(path) {
+ if (!path.isMethod() || !path.node.computed) {
+ path.skip();
+ return;
+ }
+
+ const keys = VISITOR_KEYS[path.type];
+
+ for (const key of keys) {
+ if (key !== "key") path.skipKey(key);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/types.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/types.js
new file mode 100644
index 00000000000..ec17ee62fc5
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/types.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var _index = require("./index");
+
+var _virtualTypes = require("./path/generated/virtual-types"); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/lib/visitors.js b/chromium/third_party/node/node_modules/@babel/traverse/lib/visitors.js
new file mode 100644
index 00000000000..33fab0c9acb
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/lib/visitors.js
@@ -0,0 +1,242 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.explode = explode;
+exports.verify = verify;
+exports.merge = merge;
+
+var virtualTypes = require("./path/lib/virtual-types");
+
+var _t = require("@babel/types");
+
+const {
+ DEPRECATED_KEYS,
+ FLIPPED_ALIAS_KEYS,
+ TYPES
+} = _t;
+
+function explode(visitor) {
+ if (visitor._exploded) return visitor;
+ visitor._exploded = true;
+
+ for (const nodeType of Object.keys(visitor)) {
+ if (shouldIgnoreKey(nodeType)) continue;
+ const parts = nodeType.split("|");
+ if (parts.length === 1) continue;
+ const fns = visitor[nodeType];
+ delete visitor[nodeType];
+
+ for (const part of parts) {
+ visitor[part] = fns;
+ }
+ }
+
+ verify(visitor);
+ delete visitor.__esModule;
+ ensureEntranceObjects(visitor);
+ ensureCallbackArrays(visitor);
+
+ for (const nodeType of Object.keys(visitor)) {
+ if (shouldIgnoreKey(nodeType)) continue;
+ const wrapper = virtualTypes[nodeType];
+ if (!wrapper) continue;
+ const fns = visitor[nodeType];
+
+ for (const type of Object.keys(fns)) {
+ fns[type] = wrapCheck(wrapper, fns[type]);
+ }
+
+ delete visitor[nodeType];
+
+ if (wrapper.types) {
+ for (const type of wrapper.types) {
+ if (visitor[type]) {
+ mergePair(visitor[type], fns);
+ } else {
+ visitor[type] = fns;
+ }
+ }
+ } else {
+ mergePair(visitor, fns);
+ }
+ }
+
+ for (const nodeType of Object.keys(visitor)) {
+ if (shouldIgnoreKey(nodeType)) continue;
+ const fns = visitor[nodeType];
+ let aliases = FLIPPED_ALIAS_KEYS[nodeType];
+ const deprecatedKey = DEPRECATED_KEYS[nodeType];
+
+ if (deprecatedKey) {
+ console.trace(`Visitor defined for ${nodeType} but it has been renamed to ${deprecatedKey}`);
+ aliases = [deprecatedKey];
+ }
+
+ if (!aliases) continue;
+ delete visitor[nodeType];
+
+ for (const alias of aliases) {
+ const existing = visitor[alias];
+
+ if (existing) {
+ mergePair(existing, fns);
+ } else {
+ visitor[alias] = Object.assign({}, fns);
+ }
+ }
+ }
+
+ for (const nodeType of Object.keys(visitor)) {
+ if (shouldIgnoreKey(nodeType)) continue;
+ ensureCallbackArrays(visitor[nodeType]);
+ }
+
+ return visitor;
+}
+
+function verify(visitor) {
+ if (visitor._verified) return;
+
+ if (typeof visitor === "function") {
+ throw new Error("You passed `traverse()` a function when it expected a visitor object, " + "are you sure you didn't mean `{ enter: Function }`?");
+ }
+
+ for (const nodeType of Object.keys(visitor)) {
+ if (nodeType === "enter" || nodeType === "exit") {
+ validateVisitorMethods(nodeType, visitor[nodeType]);
+ }
+
+ if (shouldIgnoreKey(nodeType)) continue;
+
+ if (TYPES.indexOf(nodeType) < 0) {
+ throw new Error(`You gave us a visitor for the node type ${nodeType} but it's not a valid type`);
+ }
+
+ const visitors = visitor[nodeType];
+
+ if (typeof visitors === "object") {
+ for (const visitorKey of Object.keys(visitors)) {
+ if (visitorKey === "enter" || visitorKey === "exit") {
+ validateVisitorMethods(`${nodeType}.${visitorKey}`, visitors[visitorKey]);
+ } else {
+ throw new Error("You passed `traverse()` a visitor object with the property " + `${nodeType} that has the invalid property ${visitorKey}`);
+ }
+ }
+ }
+ }
+
+ visitor._verified = true;
+}
+
+function validateVisitorMethods(path, val) {
+ const fns = [].concat(val);
+
+ for (const fn of fns) {
+ if (typeof fn !== "function") {
+ throw new TypeError(`Non-function found defined in ${path} with type ${typeof fn}`);
+ }
+ }
+}
+
+function merge(visitors, states = [], wrapper) {
+ const rootVisitor = {};
+
+ for (let i = 0; i < visitors.length; i++) {
+ const visitor = visitors[i];
+ const state = states[i];
+ explode(visitor);
+
+ for (const type of Object.keys(visitor)) {
+ let visitorType = visitor[type];
+
+ if (state || wrapper) {
+ visitorType = wrapWithStateOrWrapper(visitorType, state, wrapper);
+ }
+
+ const nodeVisitor = rootVisitor[type] = rootVisitor[type] || {};
+ mergePair(nodeVisitor, visitorType);
+ }
+ }
+
+ return rootVisitor;
+}
+
+function wrapWithStateOrWrapper(oldVisitor, state, wrapper) {
+ const newVisitor = {};
+
+ for (const key of Object.keys(oldVisitor)) {
+ let fns = oldVisitor[key];
+ if (!Array.isArray(fns)) continue;
+ fns = fns.map(function (fn) {
+ let newFn = fn;
+
+ if (state) {
+ newFn = function (path) {
+ return fn.call(state, path, state);
+ };
+ }
+
+ if (wrapper) {
+ newFn = wrapper(state.key, key, newFn);
+ }
+
+ if (newFn !== fn) {
+ newFn.toString = () => fn.toString();
+ }
+
+ return newFn;
+ });
+ newVisitor[key] = fns;
+ }
+
+ return newVisitor;
+}
+
+function ensureEntranceObjects(obj) {
+ for (const key of Object.keys(obj)) {
+ if (shouldIgnoreKey(key)) continue;
+ const fns = obj[key];
+
+ if (typeof fns === "function") {
+ obj[key] = {
+ enter: fns
+ };
+ }
+ }
+}
+
+function ensureCallbackArrays(obj) {
+ if (obj.enter && !Array.isArray(obj.enter)) obj.enter = [obj.enter];
+ if (obj.exit && !Array.isArray(obj.exit)) obj.exit = [obj.exit];
+}
+
+function wrapCheck(wrapper, fn) {
+ const newFn = function (path) {
+ if (wrapper.checkPath(path)) {
+ return fn.apply(this, arguments);
+ }
+ };
+
+ newFn.toString = () => fn.toString();
+
+ return newFn;
+}
+
+function shouldIgnoreKey(key) {
+ if (key[0] === "_") return true;
+ if (key === "enter" || key === "exit" || key === "shouldSkip") return true;
+
+ if (key === "denylist" || key === "noScope" || key === "skipKeys" || key === "blacklist") {
+ return true;
+ }
+
+ return false;
+}
+
+function mergePair(dest, src) {
+ for (const key of Object.keys(src)) {
+ dest[key] = [].concat(dest[key] || [], src[key]);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/package.json b/chromium/third_party/node/node_modules/@babel/traverse/package.json
new file mode 100644
index 00000000000..4b43e12698d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "@babel/traverse",
+ "version": "7.15.4",
+ "description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-traverse",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20traverse%22+is%3Aopen",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-traverse"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/code-frame": "^7.14.5",
+ "@babel/generator": "^7.15.4",
+ "@babel/helper-function-name": "^7.15.4",
+ "@babel/helper-hoist-variables": "^7.15.4",
+ "@babel/helper-split-export-declaration": "^7.15.4",
+ "@babel/parser": "^7.15.4",
+ "@babel/types": "^7.15.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "devDependencies": {
+ "@babel/helper-plugin-test-runner": "7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/asserts.js b/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/asserts.js
new file mode 100644
index 00000000000..f10b33eede2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/asserts.js
@@ -0,0 +1,25 @@
+import t from "@babel/types";
+
+export default function generateAsserts() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+import * as t from "@babel/types";
+import NodePath from "../index";
+
+
+export interface NodePathAssetions {`;
+
+ for (const type of [...t.TYPES].sort()) {
+ output += `
+ assert${type}(
+ opts?: object,
+ ): asserts this is NodePath<t.${type}>;`;
+ }
+
+ output += `
+}`;
+
+ return output;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/validators.js b/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/validators.js
new file mode 100644
index 00000000000..a3ec31a3ebb
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/validators.js
@@ -0,0 +1,43 @@
+import t from "@babel/types";
+import virtualTypes from "../../lib/path/lib/virtual-types.js";
+import definitions from "@babel/types/lib/definitions/index.js";
+
+export default function generateValidators() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+import * as t from "@babel/types";
+import NodePath from "../index";
+import type { VirtualTypeAliases } from "./virtual-types";
+
+export interface NodePathValidators {
+`;
+
+ for (const type of [...t.TYPES].sort()) {
+ output += `is${type}(opts?: object): this is NodePath<t.${type}>;`;
+ }
+
+ for (const type of Object.keys(virtualTypes)) {
+ const { types } = virtualTypes[type];
+ if (type[0] === "_") continue;
+ if (definitions.NODE_FIELDS[type] || definitions.FLIPPED_ALIAS_KEYS[type]) {
+ output += `is${type}(opts?: object): this is NodePath<t.${type}>;`;
+ } else if (types /* in VirtualTypeAliases */) {
+ output += `is${type}(opts?: object): this is NodePath<VirtualTypeAliases["${type}"]>;`;
+ } else {
+ // if it don't have types, then VirtualTypeAliases[type] is t.Node
+ // which TS marked as always true
+ // eg. if (path.isBlockScope()) return;
+ // path resolved to `never` here
+ // so we have to return boolean instead of this is NodePath<t.Node> here
+ output += `is${type}(opts?: object): boolean;`;
+ }
+ }
+
+ output += `
+}
+`;
+
+ return output;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/virtual-types.js b/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/virtual-types.js
new file mode 100644
index 00000000000..6d55f54caaf
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/scripts/generators/virtual-types.js
@@ -0,0 +1,24 @@
+import virtualTypes from "../../lib/path/lib/virtual-types.js";
+
+export default function generateValidators() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+import * as t from "@babel/types";
+
+export interface VirtualTypeAliases {
+`;
+
+ for (const type of Object.keys(virtualTypes)) {
+ output += ` ${type}: ${(virtualTypes[type].types || ["Node"])
+ .map(t => `t.${t}`)
+ .join(" | ")};`;
+ }
+
+ output += `
+}
+`;
+
+ return output;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/traverse/scripts/package.json b/chromium/third_party/node/node_modules/@babel/traverse/scripts/package.json
new file mode 100644
index 00000000000..5ffd9800b97
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/traverse/scripts/package.json
@@ -0,0 +1 @@
+{ "type": "module" }
diff --git a/chromium/third_party/node/node_modules/@babel/types/LICENSE b/chromium/third_party/node/node_modules/@babel/types/LICENSE
new file mode 100644
index 00000000000..f31575ec773
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/asserts/assertNode.js b/chromium/third_party/node/node_modules/@babel/types/lib/asserts/assertNode.js
new file mode 100644
index 00000000000..e584e3eec60
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/asserts/assertNode.js
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = assertNode;
+
+var _isNode = require("../validators/isNode");
+
+function assertNode(node) {
+ if (!(0, _isNode.default)(node)) {
+ var _node$type;
+
+ const type = (_node$type = node == null ? void 0 : node.type) != null ? _node$type : JSON.stringify(node);
+ throw new TypeError(`Not a valid node of type "${type}"`);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/asserts/generated/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/asserts/generated/index.js
new file mode 100644
index 00000000000..b7309f7a241
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/asserts/generated/index.js
@@ -0,0 +1,1492 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.assertArrayExpression = assertArrayExpression;
+exports.assertAssignmentExpression = assertAssignmentExpression;
+exports.assertBinaryExpression = assertBinaryExpression;
+exports.assertInterpreterDirective = assertInterpreterDirective;
+exports.assertDirective = assertDirective;
+exports.assertDirectiveLiteral = assertDirectiveLiteral;
+exports.assertBlockStatement = assertBlockStatement;
+exports.assertBreakStatement = assertBreakStatement;
+exports.assertCallExpression = assertCallExpression;
+exports.assertCatchClause = assertCatchClause;
+exports.assertConditionalExpression = assertConditionalExpression;
+exports.assertContinueStatement = assertContinueStatement;
+exports.assertDebuggerStatement = assertDebuggerStatement;
+exports.assertDoWhileStatement = assertDoWhileStatement;
+exports.assertEmptyStatement = assertEmptyStatement;
+exports.assertExpressionStatement = assertExpressionStatement;
+exports.assertFile = assertFile;
+exports.assertForInStatement = assertForInStatement;
+exports.assertForStatement = assertForStatement;
+exports.assertFunctionDeclaration = assertFunctionDeclaration;
+exports.assertFunctionExpression = assertFunctionExpression;
+exports.assertIdentifier = assertIdentifier;
+exports.assertIfStatement = assertIfStatement;
+exports.assertLabeledStatement = assertLabeledStatement;
+exports.assertStringLiteral = assertStringLiteral;
+exports.assertNumericLiteral = assertNumericLiteral;
+exports.assertNullLiteral = assertNullLiteral;
+exports.assertBooleanLiteral = assertBooleanLiteral;
+exports.assertRegExpLiteral = assertRegExpLiteral;
+exports.assertLogicalExpression = assertLogicalExpression;
+exports.assertMemberExpression = assertMemberExpression;
+exports.assertNewExpression = assertNewExpression;
+exports.assertProgram = assertProgram;
+exports.assertObjectExpression = assertObjectExpression;
+exports.assertObjectMethod = assertObjectMethod;
+exports.assertObjectProperty = assertObjectProperty;
+exports.assertRestElement = assertRestElement;
+exports.assertReturnStatement = assertReturnStatement;
+exports.assertSequenceExpression = assertSequenceExpression;
+exports.assertParenthesizedExpression = assertParenthesizedExpression;
+exports.assertSwitchCase = assertSwitchCase;
+exports.assertSwitchStatement = assertSwitchStatement;
+exports.assertThisExpression = assertThisExpression;
+exports.assertThrowStatement = assertThrowStatement;
+exports.assertTryStatement = assertTryStatement;
+exports.assertUnaryExpression = assertUnaryExpression;
+exports.assertUpdateExpression = assertUpdateExpression;
+exports.assertVariableDeclaration = assertVariableDeclaration;
+exports.assertVariableDeclarator = assertVariableDeclarator;
+exports.assertWhileStatement = assertWhileStatement;
+exports.assertWithStatement = assertWithStatement;
+exports.assertAssignmentPattern = assertAssignmentPattern;
+exports.assertArrayPattern = assertArrayPattern;
+exports.assertArrowFunctionExpression = assertArrowFunctionExpression;
+exports.assertClassBody = assertClassBody;
+exports.assertClassExpression = assertClassExpression;
+exports.assertClassDeclaration = assertClassDeclaration;
+exports.assertExportAllDeclaration = assertExportAllDeclaration;
+exports.assertExportDefaultDeclaration = assertExportDefaultDeclaration;
+exports.assertExportNamedDeclaration = assertExportNamedDeclaration;
+exports.assertExportSpecifier = assertExportSpecifier;
+exports.assertForOfStatement = assertForOfStatement;
+exports.assertImportDeclaration = assertImportDeclaration;
+exports.assertImportDefaultSpecifier = assertImportDefaultSpecifier;
+exports.assertImportNamespaceSpecifier = assertImportNamespaceSpecifier;
+exports.assertImportSpecifier = assertImportSpecifier;
+exports.assertMetaProperty = assertMetaProperty;
+exports.assertClassMethod = assertClassMethod;
+exports.assertObjectPattern = assertObjectPattern;
+exports.assertSpreadElement = assertSpreadElement;
+exports.assertSuper = assertSuper;
+exports.assertTaggedTemplateExpression = assertTaggedTemplateExpression;
+exports.assertTemplateElement = assertTemplateElement;
+exports.assertTemplateLiteral = assertTemplateLiteral;
+exports.assertYieldExpression = assertYieldExpression;
+exports.assertAwaitExpression = assertAwaitExpression;
+exports.assertImport = assertImport;
+exports.assertBigIntLiteral = assertBigIntLiteral;
+exports.assertExportNamespaceSpecifier = assertExportNamespaceSpecifier;
+exports.assertOptionalMemberExpression = assertOptionalMemberExpression;
+exports.assertOptionalCallExpression = assertOptionalCallExpression;
+exports.assertClassProperty = assertClassProperty;
+exports.assertClassPrivateProperty = assertClassPrivateProperty;
+exports.assertClassPrivateMethod = assertClassPrivateMethod;
+exports.assertPrivateName = assertPrivateName;
+exports.assertAnyTypeAnnotation = assertAnyTypeAnnotation;
+exports.assertArrayTypeAnnotation = assertArrayTypeAnnotation;
+exports.assertBooleanTypeAnnotation = assertBooleanTypeAnnotation;
+exports.assertBooleanLiteralTypeAnnotation = assertBooleanLiteralTypeAnnotation;
+exports.assertNullLiteralTypeAnnotation = assertNullLiteralTypeAnnotation;
+exports.assertClassImplements = assertClassImplements;
+exports.assertDeclareClass = assertDeclareClass;
+exports.assertDeclareFunction = assertDeclareFunction;
+exports.assertDeclareInterface = assertDeclareInterface;
+exports.assertDeclareModule = assertDeclareModule;
+exports.assertDeclareModuleExports = assertDeclareModuleExports;
+exports.assertDeclareTypeAlias = assertDeclareTypeAlias;
+exports.assertDeclareOpaqueType = assertDeclareOpaqueType;
+exports.assertDeclareVariable = assertDeclareVariable;
+exports.assertDeclareExportDeclaration = assertDeclareExportDeclaration;
+exports.assertDeclareExportAllDeclaration = assertDeclareExportAllDeclaration;
+exports.assertDeclaredPredicate = assertDeclaredPredicate;
+exports.assertExistsTypeAnnotation = assertExistsTypeAnnotation;
+exports.assertFunctionTypeAnnotation = assertFunctionTypeAnnotation;
+exports.assertFunctionTypeParam = assertFunctionTypeParam;
+exports.assertGenericTypeAnnotation = assertGenericTypeAnnotation;
+exports.assertInferredPredicate = assertInferredPredicate;
+exports.assertInterfaceExtends = assertInterfaceExtends;
+exports.assertInterfaceDeclaration = assertInterfaceDeclaration;
+exports.assertInterfaceTypeAnnotation = assertInterfaceTypeAnnotation;
+exports.assertIntersectionTypeAnnotation = assertIntersectionTypeAnnotation;
+exports.assertMixedTypeAnnotation = assertMixedTypeAnnotation;
+exports.assertEmptyTypeAnnotation = assertEmptyTypeAnnotation;
+exports.assertNullableTypeAnnotation = assertNullableTypeAnnotation;
+exports.assertNumberLiteralTypeAnnotation = assertNumberLiteralTypeAnnotation;
+exports.assertNumberTypeAnnotation = assertNumberTypeAnnotation;
+exports.assertObjectTypeAnnotation = assertObjectTypeAnnotation;
+exports.assertObjectTypeInternalSlot = assertObjectTypeInternalSlot;
+exports.assertObjectTypeCallProperty = assertObjectTypeCallProperty;
+exports.assertObjectTypeIndexer = assertObjectTypeIndexer;
+exports.assertObjectTypeProperty = assertObjectTypeProperty;
+exports.assertObjectTypeSpreadProperty = assertObjectTypeSpreadProperty;
+exports.assertOpaqueType = assertOpaqueType;
+exports.assertQualifiedTypeIdentifier = assertQualifiedTypeIdentifier;
+exports.assertStringLiteralTypeAnnotation = assertStringLiteralTypeAnnotation;
+exports.assertStringTypeAnnotation = assertStringTypeAnnotation;
+exports.assertSymbolTypeAnnotation = assertSymbolTypeAnnotation;
+exports.assertThisTypeAnnotation = assertThisTypeAnnotation;
+exports.assertTupleTypeAnnotation = assertTupleTypeAnnotation;
+exports.assertTypeofTypeAnnotation = assertTypeofTypeAnnotation;
+exports.assertTypeAlias = assertTypeAlias;
+exports.assertTypeAnnotation = assertTypeAnnotation;
+exports.assertTypeCastExpression = assertTypeCastExpression;
+exports.assertTypeParameter = assertTypeParameter;
+exports.assertTypeParameterDeclaration = assertTypeParameterDeclaration;
+exports.assertTypeParameterInstantiation = assertTypeParameterInstantiation;
+exports.assertUnionTypeAnnotation = assertUnionTypeAnnotation;
+exports.assertVariance = assertVariance;
+exports.assertVoidTypeAnnotation = assertVoidTypeAnnotation;
+exports.assertEnumDeclaration = assertEnumDeclaration;
+exports.assertEnumBooleanBody = assertEnumBooleanBody;
+exports.assertEnumNumberBody = assertEnumNumberBody;
+exports.assertEnumStringBody = assertEnumStringBody;
+exports.assertEnumSymbolBody = assertEnumSymbolBody;
+exports.assertEnumBooleanMember = assertEnumBooleanMember;
+exports.assertEnumNumberMember = assertEnumNumberMember;
+exports.assertEnumStringMember = assertEnumStringMember;
+exports.assertEnumDefaultedMember = assertEnumDefaultedMember;
+exports.assertIndexedAccessType = assertIndexedAccessType;
+exports.assertOptionalIndexedAccessType = assertOptionalIndexedAccessType;
+exports.assertJSXAttribute = assertJSXAttribute;
+exports.assertJSXClosingElement = assertJSXClosingElement;
+exports.assertJSXElement = assertJSXElement;
+exports.assertJSXEmptyExpression = assertJSXEmptyExpression;
+exports.assertJSXExpressionContainer = assertJSXExpressionContainer;
+exports.assertJSXSpreadChild = assertJSXSpreadChild;
+exports.assertJSXIdentifier = assertJSXIdentifier;
+exports.assertJSXMemberExpression = assertJSXMemberExpression;
+exports.assertJSXNamespacedName = assertJSXNamespacedName;
+exports.assertJSXOpeningElement = assertJSXOpeningElement;
+exports.assertJSXSpreadAttribute = assertJSXSpreadAttribute;
+exports.assertJSXText = assertJSXText;
+exports.assertJSXFragment = assertJSXFragment;
+exports.assertJSXOpeningFragment = assertJSXOpeningFragment;
+exports.assertJSXClosingFragment = assertJSXClosingFragment;
+exports.assertNoop = assertNoop;
+exports.assertPlaceholder = assertPlaceholder;
+exports.assertV8IntrinsicIdentifier = assertV8IntrinsicIdentifier;
+exports.assertArgumentPlaceholder = assertArgumentPlaceholder;
+exports.assertBindExpression = assertBindExpression;
+exports.assertImportAttribute = assertImportAttribute;
+exports.assertDecorator = assertDecorator;
+exports.assertDoExpression = assertDoExpression;
+exports.assertExportDefaultSpecifier = assertExportDefaultSpecifier;
+exports.assertRecordExpression = assertRecordExpression;
+exports.assertTupleExpression = assertTupleExpression;
+exports.assertDecimalLiteral = assertDecimalLiteral;
+exports.assertStaticBlock = assertStaticBlock;
+exports.assertModuleExpression = assertModuleExpression;
+exports.assertTopicReference = assertTopicReference;
+exports.assertPipelineTopicExpression = assertPipelineTopicExpression;
+exports.assertPipelineBareFunction = assertPipelineBareFunction;
+exports.assertPipelinePrimaryTopicReference = assertPipelinePrimaryTopicReference;
+exports.assertTSParameterProperty = assertTSParameterProperty;
+exports.assertTSDeclareFunction = assertTSDeclareFunction;
+exports.assertTSDeclareMethod = assertTSDeclareMethod;
+exports.assertTSQualifiedName = assertTSQualifiedName;
+exports.assertTSCallSignatureDeclaration = assertTSCallSignatureDeclaration;
+exports.assertTSConstructSignatureDeclaration = assertTSConstructSignatureDeclaration;
+exports.assertTSPropertySignature = assertTSPropertySignature;
+exports.assertTSMethodSignature = assertTSMethodSignature;
+exports.assertTSIndexSignature = assertTSIndexSignature;
+exports.assertTSAnyKeyword = assertTSAnyKeyword;
+exports.assertTSBooleanKeyword = assertTSBooleanKeyword;
+exports.assertTSBigIntKeyword = assertTSBigIntKeyword;
+exports.assertTSIntrinsicKeyword = assertTSIntrinsicKeyword;
+exports.assertTSNeverKeyword = assertTSNeverKeyword;
+exports.assertTSNullKeyword = assertTSNullKeyword;
+exports.assertTSNumberKeyword = assertTSNumberKeyword;
+exports.assertTSObjectKeyword = assertTSObjectKeyword;
+exports.assertTSStringKeyword = assertTSStringKeyword;
+exports.assertTSSymbolKeyword = assertTSSymbolKeyword;
+exports.assertTSUndefinedKeyword = assertTSUndefinedKeyword;
+exports.assertTSUnknownKeyword = assertTSUnknownKeyword;
+exports.assertTSVoidKeyword = assertTSVoidKeyword;
+exports.assertTSThisType = assertTSThisType;
+exports.assertTSFunctionType = assertTSFunctionType;
+exports.assertTSConstructorType = assertTSConstructorType;
+exports.assertTSTypeReference = assertTSTypeReference;
+exports.assertTSTypePredicate = assertTSTypePredicate;
+exports.assertTSTypeQuery = assertTSTypeQuery;
+exports.assertTSTypeLiteral = assertTSTypeLiteral;
+exports.assertTSArrayType = assertTSArrayType;
+exports.assertTSTupleType = assertTSTupleType;
+exports.assertTSOptionalType = assertTSOptionalType;
+exports.assertTSRestType = assertTSRestType;
+exports.assertTSNamedTupleMember = assertTSNamedTupleMember;
+exports.assertTSUnionType = assertTSUnionType;
+exports.assertTSIntersectionType = assertTSIntersectionType;
+exports.assertTSConditionalType = assertTSConditionalType;
+exports.assertTSInferType = assertTSInferType;
+exports.assertTSParenthesizedType = assertTSParenthesizedType;
+exports.assertTSTypeOperator = assertTSTypeOperator;
+exports.assertTSIndexedAccessType = assertTSIndexedAccessType;
+exports.assertTSMappedType = assertTSMappedType;
+exports.assertTSLiteralType = assertTSLiteralType;
+exports.assertTSExpressionWithTypeArguments = assertTSExpressionWithTypeArguments;
+exports.assertTSInterfaceDeclaration = assertTSInterfaceDeclaration;
+exports.assertTSInterfaceBody = assertTSInterfaceBody;
+exports.assertTSTypeAliasDeclaration = assertTSTypeAliasDeclaration;
+exports.assertTSAsExpression = assertTSAsExpression;
+exports.assertTSTypeAssertion = assertTSTypeAssertion;
+exports.assertTSEnumDeclaration = assertTSEnumDeclaration;
+exports.assertTSEnumMember = assertTSEnumMember;
+exports.assertTSModuleDeclaration = assertTSModuleDeclaration;
+exports.assertTSModuleBlock = assertTSModuleBlock;
+exports.assertTSImportType = assertTSImportType;
+exports.assertTSImportEqualsDeclaration = assertTSImportEqualsDeclaration;
+exports.assertTSExternalModuleReference = assertTSExternalModuleReference;
+exports.assertTSNonNullExpression = assertTSNonNullExpression;
+exports.assertTSExportAssignment = assertTSExportAssignment;
+exports.assertTSNamespaceExportDeclaration = assertTSNamespaceExportDeclaration;
+exports.assertTSTypeAnnotation = assertTSTypeAnnotation;
+exports.assertTSTypeParameterInstantiation = assertTSTypeParameterInstantiation;
+exports.assertTSTypeParameterDeclaration = assertTSTypeParameterDeclaration;
+exports.assertTSTypeParameter = assertTSTypeParameter;
+exports.assertExpression = assertExpression;
+exports.assertBinary = assertBinary;
+exports.assertScopable = assertScopable;
+exports.assertBlockParent = assertBlockParent;
+exports.assertBlock = assertBlock;
+exports.assertStatement = assertStatement;
+exports.assertTerminatorless = assertTerminatorless;
+exports.assertCompletionStatement = assertCompletionStatement;
+exports.assertConditional = assertConditional;
+exports.assertLoop = assertLoop;
+exports.assertWhile = assertWhile;
+exports.assertExpressionWrapper = assertExpressionWrapper;
+exports.assertFor = assertFor;
+exports.assertForXStatement = assertForXStatement;
+exports.assertFunction = assertFunction;
+exports.assertFunctionParent = assertFunctionParent;
+exports.assertPureish = assertPureish;
+exports.assertDeclaration = assertDeclaration;
+exports.assertPatternLike = assertPatternLike;
+exports.assertLVal = assertLVal;
+exports.assertTSEntityName = assertTSEntityName;
+exports.assertLiteral = assertLiteral;
+exports.assertImmutable = assertImmutable;
+exports.assertUserWhitespacable = assertUserWhitespacable;
+exports.assertMethod = assertMethod;
+exports.assertObjectMember = assertObjectMember;
+exports.assertProperty = assertProperty;
+exports.assertUnaryLike = assertUnaryLike;
+exports.assertPattern = assertPattern;
+exports.assertClass = assertClass;
+exports.assertModuleDeclaration = assertModuleDeclaration;
+exports.assertExportDeclaration = assertExportDeclaration;
+exports.assertModuleSpecifier = assertModuleSpecifier;
+exports.assertPrivate = assertPrivate;
+exports.assertFlow = assertFlow;
+exports.assertFlowType = assertFlowType;
+exports.assertFlowBaseAnnotation = assertFlowBaseAnnotation;
+exports.assertFlowDeclaration = assertFlowDeclaration;
+exports.assertFlowPredicate = assertFlowPredicate;
+exports.assertEnumBody = assertEnumBody;
+exports.assertEnumMember = assertEnumMember;
+exports.assertJSX = assertJSX;
+exports.assertTSTypeElement = assertTSTypeElement;
+exports.assertTSType = assertTSType;
+exports.assertTSBaseType = assertTSBaseType;
+exports.assertNumberLiteral = assertNumberLiteral;
+exports.assertRegexLiteral = assertRegexLiteral;
+exports.assertRestProperty = assertRestProperty;
+exports.assertSpreadProperty = assertSpreadProperty;
+
+var _is = require("../../validators/is");
+
+function assert(type, node, opts) {
+ if (!(0, _is.default)(type, node, opts)) {
+ throw new Error(`Expected type "${type}" with option ${JSON.stringify(opts)}, ` + `but instead got "${node.type}".`);
+ }
+}
+
+function assertArrayExpression(node, opts) {
+ assert("ArrayExpression", node, opts);
+}
+
+function assertAssignmentExpression(node, opts) {
+ assert("AssignmentExpression", node, opts);
+}
+
+function assertBinaryExpression(node, opts) {
+ assert("BinaryExpression", node, opts);
+}
+
+function assertInterpreterDirective(node, opts) {
+ assert("InterpreterDirective", node, opts);
+}
+
+function assertDirective(node, opts) {
+ assert("Directive", node, opts);
+}
+
+function assertDirectiveLiteral(node, opts) {
+ assert("DirectiveLiteral", node, opts);
+}
+
+function assertBlockStatement(node, opts) {
+ assert("BlockStatement", node, opts);
+}
+
+function assertBreakStatement(node, opts) {
+ assert("BreakStatement", node, opts);
+}
+
+function assertCallExpression(node, opts) {
+ assert("CallExpression", node, opts);
+}
+
+function assertCatchClause(node, opts) {
+ assert("CatchClause", node, opts);
+}
+
+function assertConditionalExpression(node, opts) {
+ assert("ConditionalExpression", node, opts);
+}
+
+function assertContinueStatement(node, opts) {
+ assert("ContinueStatement", node, opts);
+}
+
+function assertDebuggerStatement(node, opts) {
+ assert("DebuggerStatement", node, opts);
+}
+
+function assertDoWhileStatement(node, opts) {
+ assert("DoWhileStatement", node, opts);
+}
+
+function assertEmptyStatement(node, opts) {
+ assert("EmptyStatement", node, opts);
+}
+
+function assertExpressionStatement(node, opts) {
+ assert("ExpressionStatement", node, opts);
+}
+
+function assertFile(node, opts) {
+ assert("File", node, opts);
+}
+
+function assertForInStatement(node, opts) {
+ assert("ForInStatement", node, opts);
+}
+
+function assertForStatement(node, opts) {
+ assert("ForStatement", node, opts);
+}
+
+function assertFunctionDeclaration(node, opts) {
+ assert("FunctionDeclaration", node, opts);
+}
+
+function assertFunctionExpression(node, opts) {
+ assert("FunctionExpression", node, opts);
+}
+
+function assertIdentifier(node, opts) {
+ assert("Identifier", node, opts);
+}
+
+function assertIfStatement(node, opts) {
+ assert("IfStatement", node, opts);
+}
+
+function assertLabeledStatement(node, opts) {
+ assert("LabeledStatement", node, opts);
+}
+
+function assertStringLiteral(node, opts) {
+ assert("StringLiteral", node, opts);
+}
+
+function assertNumericLiteral(node, opts) {
+ assert("NumericLiteral", node, opts);
+}
+
+function assertNullLiteral(node, opts) {
+ assert("NullLiteral", node, opts);
+}
+
+function assertBooleanLiteral(node, opts) {
+ assert("BooleanLiteral", node, opts);
+}
+
+function assertRegExpLiteral(node, opts) {
+ assert("RegExpLiteral", node, opts);
+}
+
+function assertLogicalExpression(node, opts) {
+ assert("LogicalExpression", node, opts);
+}
+
+function assertMemberExpression(node, opts) {
+ assert("MemberExpression", node, opts);
+}
+
+function assertNewExpression(node, opts) {
+ assert("NewExpression", node, opts);
+}
+
+function assertProgram(node, opts) {
+ assert("Program", node, opts);
+}
+
+function assertObjectExpression(node, opts) {
+ assert("ObjectExpression", node, opts);
+}
+
+function assertObjectMethod(node, opts) {
+ assert("ObjectMethod", node, opts);
+}
+
+function assertObjectProperty(node, opts) {
+ assert("ObjectProperty", node, opts);
+}
+
+function assertRestElement(node, opts) {
+ assert("RestElement", node, opts);
+}
+
+function assertReturnStatement(node, opts) {
+ assert("ReturnStatement", node, opts);
+}
+
+function assertSequenceExpression(node, opts) {
+ assert("SequenceExpression", node, opts);
+}
+
+function assertParenthesizedExpression(node, opts) {
+ assert("ParenthesizedExpression", node, opts);
+}
+
+function assertSwitchCase(node, opts) {
+ assert("SwitchCase", node, opts);
+}
+
+function assertSwitchStatement(node, opts) {
+ assert("SwitchStatement", node, opts);
+}
+
+function assertThisExpression(node, opts) {
+ assert("ThisExpression", node, opts);
+}
+
+function assertThrowStatement(node, opts) {
+ assert("ThrowStatement", node, opts);
+}
+
+function assertTryStatement(node, opts) {
+ assert("TryStatement", node, opts);
+}
+
+function assertUnaryExpression(node, opts) {
+ assert("UnaryExpression", node, opts);
+}
+
+function assertUpdateExpression(node, opts) {
+ assert("UpdateExpression", node, opts);
+}
+
+function assertVariableDeclaration(node, opts) {
+ assert("VariableDeclaration", node, opts);
+}
+
+function assertVariableDeclarator(node, opts) {
+ assert("VariableDeclarator", node, opts);
+}
+
+function assertWhileStatement(node, opts) {
+ assert("WhileStatement", node, opts);
+}
+
+function assertWithStatement(node, opts) {
+ assert("WithStatement", node, opts);
+}
+
+function assertAssignmentPattern(node, opts) {
+ assert("AssignmentPattern", node, opts);
+}
+
+function assertArrayPattern(node, opts) {
+ assert("ArrayPattern", node, opts);
+}
+
+function assertArrowFunctionExpression(node, opts) {
+ assert("ArrowFunctionExpression", node, opts);
+}
+
+function assertClassBody(node, opts) {
+ assert("ClassBody", node, opts);
+}
+
+function assertClassExpression(node, opts) {
+ assert("ClassExpression", node, opts);
+}
+
+function assertClassDeclaration(node, opts) {
+ assert("ClassDeclaration", node, opts);
+}
+
+function assertExportAllDeclaration(node, opts) {
+ assert("ExportAllDeclaration", node, opts);
+}
+
+function assertExportDefaultDeclaration(node, opts) {
+ assert("ExportDefaultDeclaration", node, opts);
+}
+
+function assertExportNamedDeclaration(node, opts) {
+ assert("ExportNamedDeclaration", node, opts);
+}
+
+function assertExportSpecifier(node, opts) {
+ assert("ExportSpecifier", node, opts);
+}
+
+function assertForOfStatement(node, opts) {
+ assert("ForOfStatement", node, opts);
+}
+
+function assertImportDeclaration(node, opts) {
+ assert("ImportDeclaration", node, opts);
+}
+
+function assertImportDefaultSpecifier(node, opts) {
+ assert("ImportDefaultSpecifier", node, opts);
+}
+
+function assertImportNamespaceSpecifier(node, opts) {
+ assert("ImportNamespaceSpecifier", node, opts);
+}
+
+function assertImportSpecifier(node, opts) {
+ assert("ImportSpecifier", node, opts);
+}
+
+function assertMetaProperty(node, opts) {
+ assert("MetaProperty", node, opts);
+}
+
+function assertClassMethod(node, opts) {
+ assert("ClassMethod", node, opts);
+}
+
+function assertObjectPattern(node, opts) {
+ assert("ObjectPattern", node, opts);
+}
+
+function assertSpreadElement(node, opts) {
+ assert("SpreadElement", node, opts);
+}
+
+function assertSuper(node, opts) {
+ assert("Super", node, opts);
+}
+
+function assertTaggedTemplateExpression(node, opts) {
+ assert("TaggedTemplateExpression", node, opts);
+}
+
+function assertTemplateElement(node, opts) {
+ assert("TemplateElement", node, opts);
+}
+
+function assertTemplateLiteral(node, opts) {
+ assert("TemplateLiteral", node, opts);
+}
+
+function assertYieldExpression(node, opts) {
+ assert("YieldExpression", node, opts);
+}
+
+function assertAwaitExpression(node, opts) {
+ assert("AwaitExpression", node, opts);
+}
+
+function assertImport(node, opts) {
+ assert("Import", node, opts);
+}
+
+function assertBigIntLiteral(node, opts) {
+ assert("BigIntLiteral", node, opts);
+}
+
+function assertExportNamespaceSpecifier(node, opts) {
+ assert("ExportNamespaceSpecifier", node, opts);
+}
+
+function assertOptionalMemberExpression(node, opts) {
+ assert("OptionalMemberExpression", node, opts);
+}
+
+function assertOptionalCallExpression(node, opts) {
+ assert("OptionalCallExpression", node, opts);
+}
+
+function assertClassProperty(node, opts) {
+ assert("ClassProperty", node, opts);
+}
+
+function assertClassPrivateProperty(node, opts) {
+ assert("ClassPrivateProperty", node, opts);
+}
+
+function assertClassPrivateMethod(node, opts) {
+ assert("ClassPrivateMethod", node, opts);
+}
+
+function assertPrivateName(node, opts) {
+ assert("PrivateName", node, opts);
+}
+
+function assertAnyTypeAnnotation(node, opts) {
+ assert("AnyTypeAnnotation", node, opts);
+}
+
+function assertArrayTypeAnnotation(node, opts) {
+ assert("ArrayTypeAnnotation", node, opts);
+}
+
+function assertBooleanTypeAnnotation(node, opts) {
+ assert("BooleanTypeAnnotation", node, opts);
+}
+
+function assertBooleanLiteralTypeAnnotation(node, opts) {
+ assert("BooleanLiteralTypeAnnotation", node, opts);
+}
+
+function assertNullLiteralTypeAnnotation(node, opts) {
+ assert("NullLiteralTypeAnnotation", node, opts);
+}
+
+function assertClassImplements(node, opts) {
+ assert("ClassImplements", node, opts);
+}
+
+function assertDeclareClass(node, opts) {
+ assert("DeclareClass", node, opts);
+}
+
+function assertDeclareFunction(node, opts) {
+ assert("DeclareFunction", node, opts);
+}
+
+function assertDeclareInterface(node, opts) {
+ assert("DeclareInterface", node, opts);
+}
+
+function assertDeclareModule(node, opts) {
+ assert("DeclareModule", node, opts);
+}
+
+function assertDeclareModuleExports(node, opts) {
+ assert("DeclareModuleExports", node, opts);
+}
+
+function assertDeclareTypeAlias(node, opts) {
+ assert("DeclareTypeAlias", node, opts);
+}
+
+function assertDeclareOpaqueType(node, opts) {
+ assert("DeclareOpaqueType", node, opts);
+}
+
+function assertDeclareVariable(node, opts) {
+ assert("DeclareVariable", node, opts);
+}
+
+function assertDeclareExportDeclaration(node, opts) {
+ assert("DeclareExportDeclaration", node, opts);
+}
+
+function assertDeclareExportAllDeclaration(node, opts) {
+ assert("DeclareExportAllDeclaration", node, opts);
+}
+
+function assertDeclaredPredicate(node, opts) {
+ assert("DeclaredPredicate", node, opts);
+}
+
+function assertExistsTypeAnnotation(node, opts) {
+ assert("ExistsTypeAnnotation", node, opts);
+}
+
+function assertFunctionTypeAnnotation(node, opts) {
+ assert("FunctionTypeAnnotation", node, opts);
+}
+
+function assertFunctionTypeParam(node, opts) {
+ assert("FunctionTypeParam", node, opts);
+}
+
+function assertGenericTypeAnnotation(node, opts) {
+ assert("GenericTypeAnnotation", node, opts);
+}
+
+function assertInferredPredicate(node, opts) {
+ assert("InferredPredicate", node, opts);
+}
+
+function assertInterfaceExtends(node, opts) {
+ assert("InterfaceExtends", node, opts);
+}
+
+function assertInterfaceDeclaration(node, opts) {
+ assert("InterfaceDeclaration", node, opts);
+}
+
+function assertInterfaceTypeAnnotation(node, opts) {
+ assert("InterfaceTypeAnnotation", node, opts);
+}
+
+function assertIntersectionTypeAnnotation(node, opts) {
+ assert("IntersectionTypeAnnotation", node, opts);
+}
+
+function assertMixedTypeAnnotation(node, opts) {
+ assert("MixedTypeAnnotation", node, opts);
+}
+
+function assertEmptyTypeAnnotation(node, opts) {
+ assert("EmptyTypeAnnotation", node, opts);
+}
+
+function assertNullableTypeAnnotation(node, opts) {
+ assert("NullableTypeAnnotation", node, opts);
+}
+
+function assertNumberLiteralTypeAnnotation(node, opts) {
+ assert("NumberLiteralTypeAnnotation", node, opts);
+}
+
+function assertNumberTypeAnnotation(node, opts) {
+ assert("NumberTypeAnnotation", node, opts);
+}
+
+function assertObjectTypeAnnotation(node, opts) {
+ assert("ObjectTypeAnnotation", node, opts);
+}
+
+function assertObjectTypeInternalSlot(node, opts) {
+ assert("ObjectTypeInternalSlot", node, opts);
+}
+
+function assertObjectTypeCallProperty(node, opts) {
+ assert("ObjectTypeCallProperty", node, opts);
+}
+
+function assertObjectTypeIndexer(node, opts) {
+ assert("ObjectTypeIndexer", node, opts);
+}
+
+function assertObjectTypeProperty(node, opts) {
+ assert("ObjectTypeProperty", node, opts);
+}
+
+function assertObjectTypeSpreadProperty(node, opts) {
+ assert("ObjectTypeSpreadProperty", node, opts);
+}
+
+function assertOpaqueType(node, opts) {
+ assert("OpaqueType", node, opts);
+}
+
+function assertQualifiedTypeIdentifier(node, opts) {
+ assert("QualifiedTypeIdentifier", node, opts);
+}
+
+function assertStringLiteralTypeAnnotation(node, opts) {
+ assert("StringLiteralTypeAnnotation", node, opts);
+}
+
+function assertStringTypeAnnotation(node, opts) {
+ assert("StringTypeAnnotation", node, opts);
+}
+
+function assertSymbolTypeAnnotation(node, opts) {
+ assert("SymbolTypeAnnotation", node, opts);
+}
+
+function assertThisTypeAnnotation(node, opts) {
+ assert("ThisTypeAnnotation", node, opts);
+}
+
+function assertTupleTypeAnnotation(node, opts) {
+ assert("TupleTypeAnnotation", node, opts);
+}
+
+function assertTypeofTypeAnnotation(node, opts) {
+ assert("TypeofTypeAnnotation", node, opts);
+}
+
+function assertTypeAlias(node, opts) {
+ assert("TypeAlias", node, opts);
+}
+
+function assertTypeAnnotation(node, opts) {
+ assert("TypeAnnotation", node, opts);
+}
+
+function assertTypeCastExpression(node, opts) {
+ assert("TypeCastExpression", node, opts);
+}
+
+function assertTypeParameter(node, opts) {
+ assert("TypeParameter", node, opts);
+}
+
+function assertTypeParameterDeclaration(node, opts) {
+ assert("TypeParameterDeclaration", node, opts);
+}
+
+function assertTypeParameterInstantiation(node, opts) {
+ assert("TypeParameterInstantiation", node, opts);
+}
+
+function assertUnionTypeAnnotation(node, opts) {
+ assert("UnionTypeAnnotation", node, opts);
+}
+
+function assertVariance(node, opts) {
+ assert("Variance", node, opts);
+}
+
+function assertVoidTypeAnnotation(node, opts) {
+ assert("VoidTypeAnnotation", node, opts);
+}
+
+function assertEnumDeclaration(node, opts) {
+ assert("EnumDeclaration", node, opts);
+}
+
+function assertEnumBooleanBody(node, opts) {
+ assert("EnumBooleanBody", node, opts);
+}
+
+function assertEnumNumberBody(node, opts) {
+ assert("EnumNumberBody", node, opts);
+}
+
+function assertEnumStringBody(node, opts) {
+ assert("EnumStringBody", node, opts);
+}
+
+function assertEnumSymbolBody(node, opts) {
+ assert("EnumSymbolBody", node, opts);
+}
+
+function assertEnumBooleanMember(node, opts) {
+ assert("EnumBooleanMember", node, opts);
+}
+
+function assertEnumNumberMember(node, opts) {
+ assert("EnumNumberMember", node, opts);
+}
+
+function assertEnumStringMember(node, opts) {
+ assert("EnumStringMember", node, opts);
+}
+
+function assertEnumDefaultedMember(node, opts) {
+ assert("EnumDefaultedMember", node, opts);
+}
+
+function assertIndexedAccessType(node, opts) {
+ assert("IndexedAccessType", node, opts);
+}
+
+function assertOptionalIndexedAccessType(node, opts) {
+ assert("OptionalIndexedAccessType", node, opts);
+}
+
+function assertJSXAttribute(node, opts) {
+ assert("JSXAttribute", node, opts);
+}
+
+function assertJSXClosingElement(node, opts) {
+ assert("JSXClosingElement", node, opts);
+}
+
+function assertJSXElement(node, opts) {
+ assert("JSXElement", node, opts);
+}
+
+function assertJSXEmptyExpression(node, opts) {
+ assert("JSXEmptyExpression", node, opts);
+}
+
+function assertJSXExpressionContainer(node, opts) {
+ assert("JSXExpressionContainer", node, opts);
+}
+
+function assertJSXSpreadChild(node, opts) {
+ assert("JSXSpreadChild", node, opts);
+}
+
+function assertJSXIdentifier(node, opts) {
+ assert("JSXIdentifier", node, opts);
+}
+
+function assertJSXMemberExpression(node, opts) {
+ assert("JSXMemberExpression", node, opts);
+}
+
+function assertJSXNamespacedName(node, opts) {
+ assert("JSXNamespacedName", node, opts);
+}
+
+function assertJSXOpeningElement(node, opts) {
+ assert("JSXOpeningElement", node, opts);
+}
+
+function assertJSXSpreadAttribute(node, opts) {
+ assert("JSXSpreadAttribute", node, opts);
+}
+
+function assertJSXText(node, opts) {
+ assert("JSXText", node, opts);
+}
+
+function assertJSXFragment(node, opts) {
+ assert("JSXFragment", node, opts);
+}
+
+function assertJSXOpeningFragment(node, opts) {
+ assert("JSXOpeningFragment", node, opts);
+}
+
+function assertJSXClosingFragment(node, opts) {
+ assert("JSXClosingFragment", node, opts);
+}
+
+function assertNoop(node, opts) {
+ assert("Noop", node, opts);
+}
+
+function assertPlaceholder(node, opts) {
+ assert("Placeholder", node, opts);
+}
+
+function assertV8IntrinsicIdentifier(node, opts) {
+ assert("V8IntrinsicIdentifier", node, opts);
+}
+
+function assertArgumentPlaceholder(node, opts) {
+ assert("ArgumentPlaceholder", node, opts);
+}
+
+function assertBindExpression(node, opts) {
+ assert("BindExpression", node, opts);
+}
+
+function assertImportAttribute(node, opts) {
+ assert("ImportAttribute", node, opts);
+}
+
+function assertDecorator(node, opts) {
+ assert("Decorator", node, opts);
+}
+
+function assertDoExpression(node, opts) {
+ assert("DoExpression", node, opts);
+}
+
+function assertExportDefaultSpecifier(node, opts) {
+ assert("ExportDefaultSpecifier", node, opts);
+}
+
+function assertRecordExpression(node, opts) {
+ assert("RecordExpression", node, opts);
+}
+
+function assertTupleExpression(node, opts) {
+ assert("TupleExpression", node, opts);
+}
+
+function assertDecimalLiteral(node, opts) {
+ assert("DecimalLiteral", node, opts);
+}
+
+function assertStaticBlock(node, opts) {
+ assert("StaticBlock", node, opts);
+}
+
+function assertModuleExpression(node, opts) {
+ assert("ModuleExpression", node, opts);
+}
+
+function assertTopicReference(node, opts) {
+ assert("TopicReference", node, opts);
+}
+
+function assertPipelineTopicExpression(node, opts) {
+ assert("PipelineTopicExpression", node, opts);
+}
+
+function assertPipelineBareFunction(node, opts) {
+ assert("PipelineBareFunction", node, opts);
+}
+
+function assertPipelinePrimaryTopicReference(node, opts) {
+ assert("PipelinePrimaryTopicReference", node, opts);
+}
+
+function assertTSParameterProperty(node, opts) {
+ assert("TSParameterProperty", node, opts);
+}
+
+function assertTSDeclareFunction(node, opts) {
+ assert("TSDeclareFunction", node, opts);
+}
+
+function assertTSDeclareMethod(node, opts) {
+ assert("TSDeclareMethod", node, opts);
+}
+
+function assertTSQualifiedName(node, opts) {
+ assert("TSQualifiedName", node, opts);
+}
+
+function assertTSCallSignatureDeclaration(node, opts) {
+ assert("TSCallSignatureDeclaration", node, opts);
+}
+
+function assertTSConstructSignatureDeclaration(node, opts) {
+ assert("TSConstructSignatureDeclaration", node, opts);
+}
+
+function assertTSPropertySignature(node, opts) {
+ assert("TSPropertySignature", node, opts);
+}
+
+function assertTSMethodSignature(node, opts) {
+ assert("TSMethodSignature", node, opts);
+}
+
+function assertTSIndexSignature(node, opts) {
+ assert("TSIndexSignature", node, opts);
+}
+
+function assertTSAnyKeyword(node, opts) {
+ assert("TSAnyKeyword", node, opts);
+}
+
+function assertTSBooleanKeyword(node, opts) {
+ assert("TSBooleanKeyword", node, opts);
+}
+
+function assertTSBigIntKeyword(node, opts) {
+ assert("TSBigIntKeyword", node, opts);
+}
+
+function assertTSIntrinsicKeyword(node, opts) {
+ assert("TSIntrinsicKeyword", node, opts);
+}
+
+function assertTSNeverKeyword(node, opts) {
+ assert("TSNeverKeyword", node, opts);
+}
+
+function assertTSNullKeyword(node, opts) {
+ assert("TSNullKeyword", node, opts);
+}
+
+function assertTSNumberKeyword(node, opts) {
+ assert("TSNumberKeyword", node, opts);
+}
+
+function assertTSObjectKeyword(node, opts) {
+ assert("TSObjectKeyword", node, opts);
+}
+
+function assertTSStringKeyword(node, opts) {
+ assert("TSStringKeyword", node, opts);
+}
+
+function assertTSSymbolKeyword(node, opts) {
+ assert("TSSymbolKeyword", node, opts);
+}
+
+function assertTSUndefinedKeyword(node, opts) {
+ assert("TSUndefinedKeyword", node, opts);
+}
+
+function assertTSUnknownKeyword(node, opts) {
+ assert("TSUnknownKeyword", node, opts);
+}
+
+function assertTSVoidKeyword(node, opts) {
+ assert("TSVoidKeyword", node, opts);
+}
+
+function assertTSThisType(node, opts) {
+ assert("TSThisType", node, opts);
+}
+
+function assertTSFunctionType(node, opts) {
+ assert("TSFunctionType", node, opts);
+}
+
+function assertTSConstructorType(node, opts) {
+ assert("TSConstructorType", node, opts);
+}
+
+function assertTSTypeReference(node, opts) {
+ assert("TSTypeReference", node, opts);
+}
+
+function assertTSTypePredicate(node, opts) {
+ assert("TSTypePredicate", node, opts);
+}
+
+function assertTSTypeQuery(node, opts) {
+ assert("TSTypeQuery", node, opts);
+}
+
+function assertTSTypeLiteral(node, opts) {
+ assert("TSTypeLiteral", node, opts);
+}
+
+function assertTSArrayType(node, opts) {
+ assert("TSArrayType", node, opts);
+}
+
+function assertTSTupleType(node, opts) {
+ assert("TSTupleType", node, opts);
+}
+
+function assertTSOptionalType(node, opts) {
+ assert("TSOptionalType", node, opts);
+}
+
+function assertTSRestType(node, opts) {
+ assert("TSRestType", node, opts);
+}
+
+function assertTSNamedTupleMember(node, opts) {
+ assert("TSNamedTupleMember", node, opts);
+}
+
+function assertTSUnionType(node, opts) {
+ assert("TSUnionType", node, opts);
+}
+
+function assertTSIntersectionType(node, opts) {
+ assert("TSIntersectionType", node, opts);
+}
+
+function assertTSConditionalType(node, opts) {
+ assert("TSConditionalType", node, opts);
+}
+
+function assertTSInferType(node, opts) {
+ assert("TSInferType", node, opts);
+}
+
+function assertTSParenthesizedType(node, opts) {
+ assert("TSParenthesizedType", node, opts);
+}
+
+function assertTSTypeOperator(node, opts) {
+ assert("TSTypeOperator", node, opts);
+}
+
+function assertTSIndexedAccessType(node, opts) {
+ assert("TSIndexedAccessType", node, opts);
+}
+
+function assertTSMappedType(node, opts) {
+ assert("TSMappedType", node, opts);
+}
+
+function assertTSLiteralType(node, opts) {
+ assert("TSLiteralType", node, opts);
+}
+
+function assertTSExpressionWithTypeArguments(node, opts) {
+ assert("TSExpressionWithTypeArguments", node, opts);
+}
+
+function assertTSInterfaceDeclaration(node, opts) {
+ assert("TSInterfaceDeclaration", node, opts);
+}
+
+function assertTSInterfaceBody(node, opts) {
+ assert("TSInterfaceBody", node, opts);
+}
+
+function assertTSTypeAliasDeclaration(node, opts) {
+ assert("TSTypeAliasDeclaration", node, opts);
+}
+
+function assertTSAsExpression(node, opts) {
+ assert("TSAsExpression", node, opts);
+}
+
+function assertTSTypeAssertion(node, opts) {
+ assert("TSTypeAssertion", node, opts);
+}
+
+function assertTSEnumDeclaration(node, opts) {
+ assert("TSEnumDeclaration", node, opts);
+}
+
+function assertTSEnumMember(node, opts) {
+ assert("TSEnumMember", node, opts);
+}
+
+function assertTSModuleDeclaration(node, opts) {
+ assert("TSModuleDeclaration", node, opts);
+}
+
+function assertTSModuleBlock(node, opts) {
+ assert("TSModuleBlock", node, opts);
+}
+
+function assertTSImportType(node, opts) {
+ assert("TSImportType", node, opts);
+}
+
+function assertTSImportEqualsDeclaration(node, opts) {
+ assert("TSImportEqualsDeclaration", node, opts);
+}
+
+function assertTSExternalModuleReference(node, opts) {
+ assert("TSExternalModuleReference", node, opts);
+}
+
+function assertTSNonNullExpression(node, opts) {
+ assert("TSNonNullExpression", node, opts);
+}
+
+function assertTSExportAssignment(node, opts) {
+ assert("TSExportAssignment", node, opts);
+}
+
+function assertTSNamespaceExportDeclaration(node, opts) {
+ assert("TSNamespaceExportDeclaration", node, opts);
+}
+
+function assertTSTypeAnnotation(node, opts) {
+ assert("TSTypeAnnotation", node, opts);
+}
+
+function assertTSTypeParameterInstantiation(node, opts) {
+ assert("TSTypeParameterInstantiation", node, opts);
+}
+
+function assertTSTypeParameterDeclaration(node, opts) {
+ assert("TSTypeParameterDeclaration", node, opts);
+}
+
+function assertTSTypeParameter(node, opts) {
+ assert("TSTypeParameter", node, opts);
+}
+
+function assertExpression(node, opts) {
+ assert("Expression", node, opts);
+}
+
+function assertBinary(node, opts) {
+ assert("Binary", node, opts);
+}
+
+function assertScopable(node, opts) {
+ assert("Scopable", node, opts);
+}
+
+function assertBlockParent(node, opts) {
+ assert("BlockParent", node, opts);
+}
+
+function assertBlock(node, opts) {
+ assert("Block", node, opts);
+}
+
+function assertStatement(node, opts) {
+ assert("Statement", node, opts);
+}
+
+function assertTerminatorless(node, opts) {
+ assert("Terminatorless", node, opts);
+}
+
+function assertCompletionStatement(node, opts) {
+ assert("CompletionStatement", node, opts);
+}
+
+function assertConditional(node, opts) {
+ assert("Conditional", node, opts);
+}
+
+function assertLoop(node, opts) {
+ assert("Loop", node, opts);
+}
+
+function assertWhile(node, opts) {
+ assert("While", node, opts);
+}
+
+function assertExpressionWrapper(node, opts) {
+ assert("ExpressionWrapper", node, opts);
+}
+
+function assertFor(node, opts) {
+ assert("For", node, opts);
+}
+
+function assertForXStatement(node, opts) {
+ assert("ForXStatement", node, opts);
+}
+
+function assertFunction(node, opts) {
+ assert("Function", node, opts);
+}
+
+function assertFunctionParent(node, opts) {
+ assert("FunctionParent", node, opts);
+}
+
+function assertPureish(node, opts) {
+ assert("Pureish", node, opts);
+}
+
+function assertDeclaration(node, opts) {
+ assert("Declaration", node, opts);
+}
+
+function assertPatternLike(node, opts) {
+ assert("PatternLike", node, opts);
+}
+
+function assertLVal(node, opts) {
+ assert("LVal", node, opts);
+}
+
+function assertTSEntityName(node, opts) {
+ assert("TSEntityName", node, opts);
+}
+
+function assertLiteral(node, opts) {
+ assert("Literal", node, opts);
+}
+
+function assertImmutable(node, opts) {
+ assert("Immutable", node, opts);
+}
+
+function assertUserWhitespacable(node, opts) {
+ assert("UserWhitespacable", node, opts);
+}
+
+function assertMethod(node, opts) {
+ assert("Method", node, opts);
+}
+
+function assertObjectMember(node, opts) {
+ assert("ObjectMember", node, opts);
+}
+
+function assertProperty(node, opts) {
+ assert("Property", node, opts);
+}
+
+function assertUnaryLike(node, opts) {
+ assert("UnaryLike", node, opts);
+}
+
+function assertPattern(node, opts) {
+ assert("Pattern", node, opts);
+}
+
+function assertClass(node, opts) {
+ assert("Class", node, opts);
+}
+
+function assertModuleDeclaration(node, opts) {
+ assert("ModuleDeclaration", node, opts);
+}
+
+function assertExportDeclaration(node, opts) {
+ assert("ExportDeclaration", node, opts);
+}
+
+function assertModuleSpecifier(node, opts) {
+ assert("ModuleSpecifier", node, opts);
+}
+
+function assertPrivate(node, opts) {
+ assert("Private", node, opts);
+}
+
+function assertFlow(node, opts) {
+ assert("Flow", node, opts);
+}
+
+function assertFlowType(node, opts) {
+ assert("FlowType", node, opts);
+}
+
+function assertFlowBaseAnnotation(node, opts) {
+ assert("FlowBaseAnnotation", node, opts);
+}
+
+function assertFlowDeclaration(node, opts) {
+ assert("FlowDeclaration", node, opts);
+}
+
+function assertFlowPredicate(node, opts) {
+ assert("FlowPredicate", node, opts);
+}
+
+function assertEnumBody(node, opts) {
+ assert("EnumBody", node, opts);
+}
+
+function assertEnumMember(node, opts) {
+ assert("EnumMember", node, opts);
+}
+
+function assertJSX(node, opts) {
+ assert("JSX", node, opts);
+}
+
+function assertTSTypeElement(node, opts) {
+ assert("TSTypeElement", node, opts);
+}
+
+function assertTSType(node, opts) {
+ assert("TSType", node, opts);
+}
+
+function assertTSBaseType(node, opts) {
+ assert("TSBaseType", node, opts);
+}
+
+function assertNumberLiteral(node, opts) {
+ console.trace("The node type NumberLiteral has been renamed to NumericLiteral");
+ assert("NumberLiteral", node, opts);
+}
+
+function assertRegexLiteral(node, opts) {
+ console.trace("The node type RegexLiteral has been renamed to RegExpLiteral");
+ assert("RegexLiteral", node, opts);
+}
+
+function assertRestProperty(node, opts) {
+ console.trace("The node type RestProperty has been renamed to RestElement");
+ assert("RestProperty", node, opts);
+}
+
+function assertSpreadProperty(node, opts) {
+ console.trace("The node type SpreadProperty has been renamed to SpreadElement");
+ assert("SpreadProperty", node, opts);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/ast-types/generated/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/ast-types/generated/index.js
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/ast-types/generated/index.js
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/builders/builder.js b/chromium/third_party/node/node_modules/@babel/types/lib/builders/builder.js
new file mode 100644
index 00000000000..b8a017138a0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/builders/builder.js
@@ -0,0 +1,42 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = builder;
+
+var _definitions = require("../definitions");
+
+var _validate = require("../validators/validate");
+
+function builder(type, ...args) {
+ const keys = _definitions.BUILDER_KEYS[type];
+ const countArgs = args.length;
+
+ if (countArgs > keys.length) {
+ throw new Error(`${type}: Too many arguments passed. Received ${countArgs} but can receive no more than ${keys.length}`);
+ }
+
+ const node = {
+ type
+ };
+ let i = 0;
+ keys.forEach(key => {
+ const field = _definitions.NODE_FIELDS[type][key];
+ let arg;
+ if (i < countArgs) arg = args[i];
+
+ if (arg === undefined) {
+ arg = Array.isArray(field.default) ? [] : field.default;
+ }
+
+ node[key] = arg;
+ i++;
+ });
+
+ for (const key of Object.keys(node)) {
+ (0, _validate.default)(node, key, node[key]);
+ }
+
+ return node;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js b/chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js
new file mode 100644
index 00000000000..ddf20fdd3ae
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = createFlowUnionType;
+
+var _generated = require("../generated");
+
+var _removeTypeDuplicates = require("../../modifications/flow/removeTypeDuplicates");
+
+function createFlowUnionType(types) {
+ const flattened = (0, _removeTypeDuplicates.default)(types);
+
+ if (flattened.length === 1) {
+ return flattened[0];
+ } else {
+ return (0, _generated.unionTypeAnnotation)(flattened);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js b/chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js
new file mode 100644
index 00000000000..7711322ed37
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js
@@ -0,0 +1,30 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = createTypeAnnotationBasedOnTypeof;
+
+var _generated = require("../generated");
+
+function createTypeAnnotationBasedOnTypeof(type) {
+ if (type === "string") {
+ return (0, _generated.stringTypeAnnotation)();
+ } else if (type === "number") {
+ return (0, _generated.numberTypeAnnotation)();
+ } else if (type === "undefined") {
+ return (0, _generated.voidTypeAnnotation)();
+ } else if (type === "boolean") {
+ return (0, _generated.booleanTypeAnnotation)();
+ } else if (type === "function") {
+ return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)("Function"));
+ } else if (type === "object") {
+ return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)("Object"));
+ } else if (type === "symbol") {
+ return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)("Symbol"));
+ } else if (type === "bigint") {
+ return (0, _generated.anyTypeAnnotation)();
+ } else {
+ throw new Error("Invalid typeof value: " + type);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/index.js
new file mode 100644
index 00000000000..cb40ee6e646
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/index.js
@@ -0,0 +1,1261 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.arrayExpression = arrayExpression;
+exports.assignmentExpression = assignmentExpression;
+exports.binaryExpression = binaryExpression;
+exports.interpreterDirective = interpreterDirective;
+exports.directive = directive;
+exports.directiveLiteral = directiveLiteral;
+exports.blockStatement = blockStatement;
+exports.breakStatement = breakStatement;
+exports.callExpression = callExpression;
+exports.catchClause = catchClause;
+exports.conditionalExpression = conditionalExpression;
+exports.continueStatement = continueStatement;
+exports.debuggerStatement = debuggerStatement;
+exports.doWhileStatement = doWhileStatement;
+exports.emptyStatement = emptyStatement;
+exports.expressionStatement = expressionStatement;
+exports.file = file;
+exports.forInStatement = forInStatement;
+exports.forStatement = forStatement;
+exports.functionDeclaration = functionDeclaration;
+exports.functionExpression = functionExpression;
+exports.identifier = identifier;
+exports.ifStatement = ifStatement;
+exports.labeledStatement = labeledStatement;
+exports.stringLiteral = stringLiteral;
+exports.numericLiteral = numericLiteral;
+exports.nullLiteral = nullLiteral;
+exports.booleanLiteral = booleanLiteral;
+exports.regExpLiteral = regExpLiteral;
+exports.logicalExpression = logicalExpression;
+exports.memberExpression = memberExpression;
+exports.newExpression = newExpression;
+exports.program = program;
+exports.objectExpression = objectExpression;
+exports.objectMethod = objectMethod;
+exports.objectProperty = objectProperty;
+exports.restElement = restElement;
+exports.returnStatement = returnStatement;
+exports.sequenceExpression = sequenceExpression;
+exports.parenthesizedExpression = parenthesizedExpression;
+exports.switchCase = switchCase;
+exports.switchStatement = switchStatement;
+exports.thisExpression = thisExpression;
+exports.throwStatement = throwStatement;
+exports.tryStatement = tryStatement;
+exports.unaryExpression = unaryExpression;
+exports.updateExpression = updateExpression;
+exports.variableDeclaration = variableDeclaration;
+exports.variableDeclarator = variableDeclarator;
+exports.whileStatement = whileStatement;
+exports.withStatement = withStatement;
+exports.assignmentPattern = assignmentPattern;
+exports.arrayPattern = arrayPattern;
+exports.arrowFunctionExpression = arrowFunctionExpression;
+exports.classBody = classBody;
+exports.classExpression = classExpression;
+exports.classDeclaration = classDeclaration;
+exports.exportAllDeclaration = exportAllDeclaration;
+exports.exportDefaultDeclaration = exportDefaultDeclaration;
+exports.exportNamedDeclaration = exportNamedDeclaration;
+exports.exportSpecifier = exportSpecifier;
+exports.forOfStatement = forOfStatement;
+exports.importDeclaration = importDeclaration;
+exports.importDefaultSpecifier = importDefaultSpecifier;
+exports.importNamespaceSpecifier = importNamespaceSpecifier;
+exports.importSpecifier = importSpecifier;
+exports.metaProperty = metaProperty;
+exports.classMethod = classMethod;
+exports.objectPattern = objectPattern;
+exports.spreadElement = spreadElement;
+exports.super = _super;
+exports.taggedTemplateExpression = taggedTemplateExpression;
+exports.templateElement = templateElement;
+exports.templateLiteral = templateLiteral;
+exports.yieldExpression = yieldExpression;
+exports.awaitExpression = awaitExpression;
+exports.import = _import;
+exports.bigIntLiteral = bigIntLiteral;
+exports.exportNamespaceSpecifier = exportNamespaceSpecifier;
+exports.optionalMemberExpression = optionalMemberExpression;
+exports.optionalCallExpression = optionalCallExpression;
+exports.classProperty = classProperty;
+exports.classPrivateProperty = classPrivateProperty;
+exports.classPrivateMethod = classPrivateMethod;
+exports.privateName = privateName;
+exports.anyTypeAnnotation = anyTypeAnnotation;
+exports.arrayTypeAnnotation = arrayTypeAnnotation;
+exports.booleanTypeAnnotation = booleanTypeAnnotation;
+exports.booleanLiteralTypeAnnotation = booleanLiteralTypeAnnotation;
+exports.nullLiteralTypeAnnotation = nullLiteralTypeAnnotation;
+exports.classImplements = classImplements;
+exports.declareClass = declareClass;
+exports.declareFunction = declareFunction;
+exports.declareInterface = declareInterface;
+exports.declareModule = declareModule;
+exports.declareModuleExports = declareModuleExports;
+exports.declareTypeAlias = declareTypeAlias;
+exports.declareOpaqueType = declareOpaqueType;
+exports.declareVariable = declareVariable;
+exports.declareExportDeclaration = declareExportDeclaration;
+exports.declareExportAllDeclaration = declareExportAllDeclaration;
+exports.declaredPredicate = declaredPredicate;
+exports.existsTypeAnnotation = existsTypeAnnotation;
+exports.functionTypeAnnotation = functionTypeAnnotation;
+exports.functionTypeParam = functionTypeParam;
+exports.genericTypeAnnotation = genericTypeAnnotation;
+exports.inferredPredicate = inferredPredicate;
+exports.interfaceExtends = interfaceExtends;
+exports.interfaceDeclaration = interfaceDeclaration;
+exports.interfaceTypeAnnotation = interfaceTypeAnnotation;
+exports.intersectionTypeAnnotation = intersectionTypeAnnotation;
+exports.mixedTypeAnnotation = mixedTypeAnnotation;
+exports.emptyTypeAnnotation = emptyTypeAnnotation;
+exports.nullableTypeAnnotation = nullableTypeAnnotation;
+exports.numberLiteralTypeAnnotation = numberLiteralTypeAnnotation;
+exports.numberTypeAnnotation = numberTypeAnnotation;
+exports.objectTypeAnnotation = objectTypeAnnotation;
+exports.objectTypeInternalSlot = objectTypeInternalSlot;
+exports.objectTypeCallProperty = objectTypeCallProperty;
+exports.objectTypeIndexer = objectTypeIndexer;
+exports.objectTypeProperty = objectTypeProperty;
+exports.objectTypeSpreadProperty = objectTypeSpreadProperty;
+exports.opaqueType = opaqueType;
+exports.qualifiedTypeIdentifier = qualifiedTypeIdentifier;
+exports.stringLiteralTypeAnnotation = stringLiteralTypeAnnotation;
+exports.stringTypeAnnotation = stringTypeAnnotation;
+exports.symbolTypeAnnotation = symbolTypeAnnotation;
+exports.thisTypeAnnotation = thisTypeAnnotation;
+exports.tupleTypeAnnotation = tupleTypeAnnotation;
+exports.typeofTypeAnnotation = typeofTypeAnnotation;
+exports.typeAlias = typeAlias;
+exports.typeAnnotation = typeAnnotation;
+exports.typeCastExpression = typeCastExpression;
+exports.typeParameter = typeParameter;
+exports.typeParameterDeclaration = typeParameterDeclaration;
+exports.typeParameterInstantiation = typeParameterInstantiation;
+exports.unionTypeAnnotation = unionTypeAnnotation;
+exports.variance = variance;
+exports.voidTypeAnnotation = voidTypeAnnotation;
+exports.enumDeclaration = enumDeclaration;
+exports.enumBooleanBody = enumBooleanBody;
+exports.enumNumberBody = enumNumberBody;
+exports.enumStringBody = enumStringBody;
+exports.enumSymbolBody = enumSymbolBody;
+exports.enumBooleanMember = enumBooleanMember;
+exports.enumNumberMember = enumNumberMember;
+exports.enumStringMember = enumStringMember;
+exports.enumDefaultedMember = enumDefaultedMember;
+exports.indexedAccessType = indexedAccessType;
+exports.optionalIndexedAccessType = optionalIndexedAccessType;
+exports.jSXAttribute = exports.jsxAttribute = jsxAttribute;
+exports.jSXClosingElement = exports.jsxClosingElement = jsxClosingElement;
+exports.jSXElement = exports.jsxElement = jsxElement;
+exports.jSXEmptyExpression = exports.jsxEmptyExpression = jsxEmptyExpression;
+exports.jSXExpressionContainer = exports.jsxExpressionContainer = jsxExpressionContainer;
+exports.jSXSpreadChild = exports.jsxSpreadChild = jsxSpreadChild;
+exports.jSXIdentifier = exports.jsxIdentifier = jsxIdentifier;
+exports.jSXMemberExpression = exports.jsxMemberExpression = jsxMemberExpression;
+exports.jSXNamespacedName = exports.jsxNamespacedName = jsxNamespacedName;
+exports.jSXOpeningElement = exports.jsxOpeningElement = jsxOpeningElement;
+exports.jSXSpreadAttribute = exports.jsxSpreadAttribute = jsxSpreadAttribute;
+exports.jSXText = exports.jsxText = jsxText;
+exports.jSXFragment = exports.jsxFragment = jsxFragment;
+exports.jSXOpeningFragment = exports.jsxOpeningFragment = jsxOpeningFragment;
+exports.jSXClosingFragment = exports.jsxClosingFragment = jsxClosingFragment;
+exports.noop = noop;
+exports.placeholder = placeholder;
+exports.v8IntrinsicIdentifier = v8IntrinsicIdentifier;
+exports.argumentPlaceholder = argumentPlaceholder;
+exports.bindExpression = bindExpression;
+exports.importAttribute = importAttribute;
+exports.decorator = decorator;
+exports.doExpression = doExpression;
+exports.exportDefaultSpecifier = exportDefaultSpecifier;
+exports.recordExpression = recordExpression;
+exports.tupleExpression = tupleExpression;
+exports.decimalLiteral = decimalLiteral;
+exports.staticBlock = staticBlock;
+exports.moduleExpression = moduleExpression;
+exports.topicReference = topicReference;
+exports.pipelineTopicExpression = pipelineTopicExpression;
+exports.pipelineBareFunction = pipelineBareFunction;
+exports.pipelinePrimaryTopicReference = pipelinePrimaryTopicReference;
+exports.tSParameterProperty = exports.tsParameterProperty = tsParameterProperty;
+exports.tSDeclareFunction = exports.tsDeclareFunction = tsDeclareFunction;
+exports.tSDeclareMethod = exports.tsDeclareMethod = tsDeclareMethod;
+exports.tSQualifiedName = exports.tsQualifiedName = tsQualifiedName;
+exports.tSCallSignatureDeclaration = exports.tsCallSignatureDeclaration = tsCallSignatureDeclaration;
+exports.tSConstructSignatureDeclaration = exports.tsConstructSignatureDeclaration = tsConstructSignatureDeclaration;
+exports.tSPropertySignature = exports.tsPropertySignature = tsPropertySignature;
+exports.tSMethodSignature = exports.tsMethodSignature = tsMethodSignature;
+exports.tSIndexSignature = exports.tsIndexSignature = tsIndexSignature;
+exports.tSAnyKeyword = exports.tsAnyKeyword = tsAnyKeyword;
+exports.tSBooleanKeyword = exports.tsBooleanKeyword = tsBooleanKeyword;
+exports.tSBigIntKeyword = exports.tsBigIntKeyword = tsBigIntKeyword;
+exports.tSIntrinsicKeyword = exports.tsIntrinsicKeyword = tsIntrinsicKeyword;
+exports.tSNeverKeyword = exports.tsNeverKeyword = tsNeverKeyword;
+exports.tSNullKeyword = exports.tsNullKeyword = tsNullKeyword;
+exports.tSNumberKeyword = exports.tsNumberKeyword = tsNumberKeyword;
+exports.tSObjectKeyword = exports.tsObjectKeyword = tsObjectKeyword;
+exports.tSStringKeyword = exports.tsStringKeyword = tsStringKeyword;
+exports.tSSymbolKeyword = exports.tsSymbolKeyword = tsSymbolKeyword;
+exports.tSUndefinedKeyword = exports.tsUndefinedKeyword = tsUndefinedKeyword;
+exports.tSUnknownKeyword = exports.tsUnknownKeyword = tsUnknownKeyword;
+exports.tSVoidKeyword = exports.tsVoidKeyword = tsVoidKeyword;
+exports.tSThisType = exports.tsThisType = tsThisType;
+exports.tSFunctionType = exports.tsFunctionType = tsFunctionType;
+exports.tSConstructorType = exports.tsConstructorType = tsConstructorType;
+exports.tSTypeReference = exports.tsTypeReference = tsTypeReference;
+exports.tSTypePredicate = exports.tsTypePredicate = tsTypePredicate;
+exports.tSTypeQuery = exports.tsTypeQuery = tsTypeQuery;
+exports.tSTypeLiteral = exports.tsTypeLiteral = tsTypeLiteral;
+exports.tSArrayType = exports.tsArrayType = tsArrayType;
+exports.tSTupleType = exports.tsTupleType = tsTupleType;
+exports.tSOptionalType = exports.tsOptionalType = tsOptionalType;
+exports.tSRestType = exports.tsRestType = tsRestType;
+exports.tSNamedTupleMember = exports.tsNamedTupleMember = tsNamedTupleMember;
+exports.tSUnionType = exports.tsUnionType = tsUnionType;
+exports.tSIntersectionType = exports.tsIntersectionType = tsIntersectionType;
+exports.tSConditionalType = exports.tsConditionalType = tsConditionalType;
+exports.tSInferType = exports.tsInferType = tsInferType;
+exports.tSParenthesizedType = exports.tsParenthesizedType = tsParenthesizedType;
+exports.tSTypeOperator = exports.tsTypeOperator = tsTypeOperator;
+exports.tSIndexedAccessType = exports.tsIndexedAccessType = tsIndexedAccessType;
+exports.tSMappedType = exports.tsMappedType = tsMappedType;
+exports.tSLiteralType = exports.tsLiteralType = tsLiteralType;
+exports.tSExpressionWithTypeArguments = exports.tsExpressionWithTypeArguments = tsExpressionWithTypeArguments;
+exports.tSInterfaceDeclaration = exports.tsInterfaceDeclaration = tsInterfaceDeclaration;
+exports.tSInterfaceBody = exports.tsInterfaceBody = tsInterfaceBody;
+exports.tSTypeAliasDeclaration = exports.tsTypeAliasDeclaration = tsTypeAliasDeclaration;
+exports.tSAsExpression = exports.tsAsExpression = tsAsExpression;
+exports.tSTypeAssertion = exports.tsTypeAssertion = tsTypeAssertion;
+exports.tSEnumDeclaration = exports.tsEnumDeclaration = tsEnumDeclaration;
+exports.tSEnumMember = exports.tsEnumMember = tsEnumMember;
+exports.tSModuleDeclaration = exports.tsModuleDeclaration = tsModuleDeclaration;
+exports.tSModuleBlock = exports.tsModuleBlock = tsModuleBlock;
+exports.tSImportType = exports.tsImportType = tsImportType;
+exports.tSImportEqualsDeclaration = exports.tsImportEqualsDeclaration = tsImportEqualsDeclaration;
+exports.tSExternalModuleReference = exports.tsExternalModuleReference = tsExternalModuleReference;
+exports.tSNonNullExpression = exports.tsNonNullExpression = tsNonNullExpression;
+exports.tSExportAssignment = exports.tsExportAssignment = tsExportAssignment;
+exports.tSNamespaceExportDeclaration = exports.tsNamespaceExportDeclaration = tsNamespaceExportDeclaration;
+exports.tSTypeAnnotation = exports.tsTypeAnnotation = tsTypeAnnotation;
+exports.tSTypeParameterInstantiation = exports.tsTypeParameterInstantiation = tsTypeParameterInstantiation;
+exports.tSTypeParameterDeclaration = exports.tsTypeParameterDeclaration = tsTypeParameterDeclaration;
+exports.tSTypeParameter = exports.tsTypeParameter = tsTypeParameter;
+exports.numberLiteral = NumberLiteral;
+exports.regexLiteral = RegexLiteral;
+exports.restProperty = RestProperty;
+exports.spreadProperty = SpreadProperty;
+
+var _builder = require("../builder");
+
+function arrayExpression(elements) {
+ return (0, _builder.default)("ArrayExpression", ...arguments);
+}
+
+function assignmentExpression(operator, left, right) {
+ return (0, _builder.default)("AssignmentExpression", ...arguments);
+}
+
+function binaryExpression(operator, left, right) {
+ return (0, _builder.default)("BinaryExpression", ...arguments);
+}
+
+function interpreterDirective(value) {
+ return (0, _builder.default)("InterpreterDirective", ...arguments);
+}
+
+function directive(value) {
+ return (0, _builder.default)("Directive", ...arguments);
+}
+
+function directiveLiteral(value) {
+ return (0, _builder.default)("DirectiveLiteral", ...arguments);
+}
+
+function blockStatement(body, directives) {
+ return (0, _builder.default)("BlockStatement", ...arguments);
+}
+
+function breakStatement(label) {
+ return (0, _builder.default)("BreakStatement", ...arguments);
+}
+
+function callExpression(callee, _arguments) {
+ return (0, _builder.default)("CallExpression", ...arguments);
+}
+
+function catchClause(param, body) {
+ return (0, _builder.default)("CatchClause", ...arguments);
+}
+
+function conditionalExpression(test, consequent, alternate) {
+ return (0, _builder.default)("ConditionalExpression", ...arguments);
+}
+
+function continueStatement(label) {
+ return (0, _builder.default)("ContinueStatement", ...arguments);
+}
+
+function debuggerStatement() {
+ return (0, _builder.default)("DebuggerStatement", ...arguments);
+}
+
+function doWhileStatement(test, body) {
+ return (0, _builder.default)("DoWhileStatement", ...arguments);
+}
+
+function emptyStatement() {
+ return (0, _builder.default)("EmptyStatement", ...arguments);
+}
+
+function expressionStatement(expression) {
+ return (0, _builder.default)("ExpressionStatement", ...arguments);
+}
+
+function file(program, comments, tokens) {
+ return (0, _builder.default)("File", ...arguments);
+}
+
+function forInStatement(left, right, body) {
+ return (0, _builder.default)("ForInStatement", ...arguments);
+}
+
+function forStatement(init, test, update, body) {
+ return (0, _builder.default)("ForStatement", ...arguments);
+}
+
+function functionDeclaration(id, params, body, generator, async) {
+ return (0, _builder.default)("FunctionDeclaration", ...arguments);
+}
+
+function functionExpression(id, params, body, generator, async) {
+ return (0, _builder.default)("FunctionExpression", ...arguments);
+}
+
+function identifier(name) {
+ return (0, _builder.default)("Identifier", ...arguments);
+}
+
+function ifStatement(test, consequent, alternate) {
+ return (0, _builder.default)("IfStatement", ...arguments);
+}
+
+function labeledStatement(label, body) {
+ return (0, _builder.default)("LabeledStatement", ...arguments);
+}
+
+function stringLiteral(value) {
+ return (0, _builder.default)("StringLiteral", ...arguments);
+}
+
+function numericLiteral(value) {
+ return (0, _builder.default)("NumericLiteral", ...arguments);
+}
+
+function nullLiteral() {
+ return (0, _builder.default)("NullLiteral", ...arguments);
+}
+
+function booleanLiteral(value) {
+ return (0, _builder.default)("BooleanLiteral", ...arguments);
+}
+
+function regExpLiteral(pattern, flags) {
+ return (0, _builder.default)("RegExpLiteral", ...arguments);
+}
+
+function logicalExpression(operator, left, right) {
+ return (0, _builder.default)("LogicalExpression", ...arguments);
+}
+
+function memberExpression(object, property, computed, optional) {
+ return (0, _builder.default)("MemberExpression", ...arguments);
+}
+
+function newExpression(callee, _arguments) {
+ return (0, _builder.default)("NewExpression", ...arguments);
+}
+
+function program(body, directives, sourceType, interpreter) {
+ return (0, _builder.default)("Program", ...arguments);
+}
+
+function objectExpression(properties) {
+ return (0, _builder.default)("ObjectExpression", ...arguments);
+}
+
+function objectMethod(kind, key, params, body, computed, generator, async) {
+ return (0, _builder.default)("ObjectMethod", ...arguments);
+}
+
+function objectProperty(key, value, computed, shorthand, decorators) {
+ return (0, _builder.default)("ObjectProperty", ...arguments);
+}
+
+function restElement(argument) {
+ return (0, _builder.default)("RestElement", ...arguments);
+}
+
+function returnStatement(argument) {
+ return (0, _builder.default)("ReturnStatement", ...arguments);
+}
+
+function sequenceExpression(expressions) {
+ return (0, _builder.default)("SequenceExpression", ...arguments);
+}
+
+function parenthesizedExpression(expression) {
+ return (0, _builder.default)("ParenthesizedExpression", ...arguments);
+}
+
+function switchCase(test, consequent) {
+ return (0, _builder.default)("SwitchCase", ...arguments);
+}
+
+function switchStatement(discriminant, cases) {
+ return (0, _builder.default)("SwitchStatement", ...arguments);
+}
+
+function thisExpression() {
+ return (0, _builder.default)("ThisExpression", ...arguments);
+}
+
+function throwStatement(argument) {
+ return (0, _builder.default)("ThrowStatement", ...arguments);
+}
+
+function tryStatement(block, handler, finalizer) {
+ return (0, _builder.default)("TryStatement", ...arguments);
+}
+
+function unaryExpression(operator, argument, prefix) {
+ return (0, _builder.default)("UnaryExpression", ...arguments);
+}
+
+function updateExpression(operator, argument, prefix) {
+ return (0, _builder.default)("UpdateExpression", ...arguments);
+}
+
+function variableDeclaration(kind, declarations) {
+ return (0, _builder.default)("VariableDeclaration", ...arguments);
+}
+
+function variableDeclarator(id, init) {
+ return (0, _builder.default)("VariableDeclarator", ...arguments);
+}
+
+function whileStatement(test, body) {
+ return (0, _builder.default)("WhileStatement", ...arguments);
+}
+
+function withStatement(object, body) {
+ return (0, _builder.default)("WithStatement", ...arguments);
+}
+
+function assignmentPattern(left, right) {
+ return (0, _builder.default)("AssignmentPattern", ...arguments);
+}
+
+function arrayPattern(elements) {
+ return (0, _builder.default)("ArrayPattern", ...arguments);
+}
+
+function arrowFunctionExpression(params, body, async) {
+ return (0, _builder.default)("ArrowFunctionExpression", ...arguments);
+}
+
+function classBody(body) {
+ return (0, _builder.default)("ClassBody", ...arguments);
+}
+
+function classExpression(id, superClass, body, decorators) {
+ return (0, _builder.default)("ClassExpression", ...arguments);
+}
+
+function classDeclaration(id, superClass, body, decorators) {
+ return (0, _builder.default)("ClassDeclaration", ...arguments);
+}
+
+function exportAllDeclaration(source) {
+ return (0, _builder.default)("ExportAllDeclaration", ...arguments);
+}
+
+function exportDefaultDeclaration(declaration) {
+ return (0, _builder.default)("ExportDefaultDeclaration", ...arguments);
+}
+
+function exportNamedDeclaration(declaration, specifiers, source) {
+ return (0, _builder.default)("ExportNamedDeclaration", ...arguments);
+}
+
+function exportSpecifier(local, exported) {
+ return (0, _builder.default)("ExportSpecifier", ...arguments);
+}
+
+function forOfStatement(left, right, body, _await) {
+ return (0, _builder.default)("ForOfStatement", ...arguments);
+}
+
+function importDeclaration(specifiers, source) {
+ return (0, _builder.default)("ImportDeclaration", ...arguments);
+}
+
+function importDefaultSpecifier(local) {
+ return (0, _builder.default)("ImportDefaultSpecifier", ...arguments);
+}
+
+function importNamespaceSpecifier(local) {
+ return (0, _builder.default)("ImportNamespaceSpecifier", ...arguments);
+}
+
+function importSpecifier(local, imported) {
+ return (0, _builder.default)("ImportSpecifier", ...arguments);
+}
+
+function metaProperty(meta, property) {
+ return (0, _builder.default)("MetaProperty", ...arguments);
+}
+
+function classMethod(kind, key, params, body, computed, _static, generator, async) {
+ return (0, _builder.default)("ClassMethod", ...arguments);
+}
+
+function objectPattern(properties) {
+ return (0, _builder.default)("ObjectPattern", ...arguments);
+}
+
+function spreadElement(argument) {
+ return (0, _builder.default)("SpreadElement", ...arguments);
+}
+
+function _super() {
+ return (0, _builder.default)("Super", ...arguments);
+}
+
+function taggedTemplateExpression(tag, quasi) {
+ return (0, _builder.default)("TaggedTemplateExpression", ...arguments);
+}
+
+function templateElement(value, tail) {
+ return (0, _builder.default)("TemplateElement", ...arguments);
+}
+
+function templateLiteral(quasis, expressions) {
+ return (0, _builder.default)("TemplateLiteral", ...arguments);
+}
+
+function yieldExpression(argument, delegate) {
+ return (0, _builder.default)("YieldExpression", ...arguments);
+}
+
+function awaitExpression(argument) {
+ return (0, _builder.default)("AwaitExpression", ...arguments);
+}
+
+function _import() {
+ return (0, _builder.default)("Import", ...arguments);
+}
+
+function bigIntLiteral(value) {
+ return (0, _builder.default)("BigIntLiteral", ...arguments);
+}
+
+function exportNamespaceSpecifier(exported) {
+ return (0, _builder.default)("ExportNamespaceSpecifier", ...arguments);
+}
+
+function optionalMemberExpression(object, property, computed, optional) {
+ return (0, _builder.default)("OptionalMemberExpression", ...arguments);
+}
+
+function optionalCallExpression(callee, _arguments, optional) {
+ return (0, _builder.default)("OptionalCallExpression", ...arguments);
+}
+
+function classProperty(key, value, typeAnnotation, decorators, computed, _static) {
+ return (0, _builder.default)("ClassProperty", ...arguments);
+}
+
+function classPrivateProperty(key, value, decorators, _static) {
+ return (0, _builder.default)("ClassPrivateProperty", ...arguments);
+}
+
+function classPrivateMethod(kind, key, params, body, _static) {
+ return (0, _builder.default)("ClassPrivateMethod", ...arguments);
+}
+
+function privateName(id) {
+ return (0, _builder.default)("PrivateName", ...arguments);
+}
+
+function anyTypeAnnotation() {
+ return (0, _builder.default)("AnyTypeAnnotation", ...arguments);
+}
+
+function arrayTypeAnnotation(elementType) {
+ return (0, _builder.default)("ArrayTypeAnnotation", ...arguments);
+}
+
+function booleanTypeAnnotation() {
+ return (0, _builder.default)("BooleanTypeAnnotation", ...arguments);
+}
+
+function booleanLiteralTypeAnnotation(value) {
+ return (0, _builder.default)("BooleanLiteralTypeAnnotation", ...arguments);
+}
+
+function nullLiteralTypeAnnotation() {
+ return (0, _builder.default)("NullLiteralTypeAnnotation", ...arguments);
+}
+
+function classImplements(id, typeParameters) {
+ return (0, _builder.default)("ClassImplements", ...arguments);
+}
+
+function declareClass(id, typeParameters, _extends, body) {
+ return (0, _builder.default)("DeclareClass", ...arguments);
+}
+
+function declareFunction(id) {
+ return (0, _builder.default)("DeclareFunction", ...arguments);
+}
+
+function declareInterface(id, typeParameters, _extends, body) {
+ return (0, _builder.default)("DeclareInterface", ...arguments);
+}
+
+function declareModule(id, body, kind) {
+ return (0, _builder.default)("DeclareModule", ...arguments);
+}
+
+function declareModuleExports(typeAnnotation) {
+ return (0, _builder.default)("DeclareModuleExports", ...arguments);
+}
+
+function declareTypeAlias(id, typeParameters, right) {
+ return (0, _builder.default)("DeclareTypeAlias", ...arguments);
+}
+
+function declareOpaqueType(id, typeParameters, supertype) {
+ return (0, _builder.default)("DeclareOpaqueType", ...arguments);
+}
+
+function declareVariable(id) {
+ return (0, _builder.default)("DeclareVariable", ...arguments);
+}
+
+function declareExportDeclaration(declaration, specifiers, source) {
+ return (0, _builder.default)("DeclareExportDeclaration", ...arguments);
+}
+
+function declareExportAllDeclaration(source) {
+ return (0, _builder.default)("DeclareExportAllDeclaration", ...arguments);
+}
+
+function declaredPredicate(value) {
+ return (0, _builder.default)("DeclaredPredicate", ...arguments);
+}
+
+function existsTypeAnnotation() {
+ return (0, _builder.default)("ExistsTypeAnnotation", ...arguments);
+}
+
+function functionTypeAnnotation(typeParameters, params, rest, returnType) {
+ return (0, _builder.default)("FunctionTypeAnnotation", ...arguments);
+}
+
+function functionTypeParam(name, typeAnnotation) {
+ return (0, _builder.default)("FunctionTypeParam", ...arguments);
+}
+
+function genericTypeAnnotation(id, typeParameters) {
+ return (0, _builder.default)("GenericTypeAnnotation", ...arguments);
+}
+
+function inferredPredicate() {
+ return (0, _builder.default)("InferredPredicate", ...arguments);
+}
+
+function interfaceExtends(id, typeParameters) {
+ return (0, _builder.default)("InterfaceExtends", ...arguments);
+}
+
+function interfaceDeclaration(id, typeParameters, _extends, body) {
+ return (0, _builder.default)("InterfaceDeclaration", ...arguments);
+}
+
+function interfaceTypeAnnotation(_extends, body) {
+ return (0, _builder.default)("InterfaceTypeAnnotation", ...arguments);
+}
+
+function intersectionTypeAnnotation(types) {
+ return (0, _builder.default)("IntersectionTypeAnnotation", ...arguments);
+}
+
+function mixedTypeAnnotation() {
+ return (0, _builder.default)("MixedTypeAnnotation", ...arguments);
+}
+
+function emptyTypeAnnotation() {
+ return (0, _builder.default)("EmptyTypeAnnotation", ...arguments);
+}
+
+function nullableTypeAnnotation(typeAnnotation) {
+ return (0, _builder.default)("NullableTypeAnnotation", ...arguments);
+}
+
+function numberLiteralTypeAnnotation(value) {
+ return (0, _builder.default)("NumberLiteralTypeAnnotation", ...arguments);
+}
+
+function numberTypeAnnotation() {
+ return (0, _builder.default)("NumberTypeAnnotation", ...arguments);
+}
+
+function objectTypeAnnotation(properties, indexers, callProperties, internalSlots, exact) {
+ return (0, _builder.default)("ObjectTypeAnnotation", ...arguments);
+}
+
+function objectTypeInternalSlot(id, value, optional, _static, method) {
+ return (0, _builder.default)("ObjectTypeInternalSlot", ...arguments);
+}
+
+function objectTypeCallProperty(value) {
+ return (0, _builder.default)("ObjectTypeCallProperty", ...arguments);
+}
+
+function objectTypeIndexer(id, key, value, variance) {
+ return (0, _builder.default)("ObjectTypeIndexer", ...arguments);
+}
+
+function objectTypeProperty(key, value, variance) {
+ return (0, _builder.default)("ObjectTypeProperty", ...arguments);
+}
+
+function objectTypeSpreadProperty(argument) {
+ return (0, _builder.default)("ObjectTypeSpreadProperty", ...arguments);
+}
+
+function opaqueType(id, typeParameters, supertype, impltype) {
+ return (0, _builder.default)("OpaqueType", ...arguments);
+}
+
+function qualifiedTypeIdentifier(id, qualification) {
+ return (0, _builder.default)("QualifiedTypeIdentifier", ...arguments);
+}
+
+function stringLiteralTypeAnnotation(value) {
+ return (0, _builder.default)("StringLiteralTypeAnnotation", ...arguments);
+}
+
+function stringTypeAnnotation() {
+ return (0, _builder.default)("StringTypeAnnotation", ...arguments);
+}
+
+function symbolTypeAnnotation() {
+ return (0, _builder.default)("SymbolTypeAnnotation", ...arguments);
+}
+
+function thisTypeAnnotation() {
+ return (0, _builder.default)("ThisTypeAnnotation", ...arguments);
+}
+
+function tupleTypeAnnotation(types) {
+ return (0, _builder.default)("TupleTypeAnnotation", ...arguments);
+}
+
+function typeofTypeAnnotation(argument) {
+ return (0, _builder.default)("TypeofTypeAnnotation", ...arguments);
+}
+
+function typeAlias(id, typeParameters, right) {
+ return (0, _builder.default)("TypeAlias", ...arguments);
+}
+
+function typeAnnotation(typeAnnotation) {
+ return (0, _builder.default)("TypeAnnotation", ...arguments);
+}
+
+function typeCastExpression(expression, typeAnnotation) {
+ return (0, _builder.default)("TypeCastExpression", ...arguments);
+}
+
+function typeParameter(bound, _default, variance) {
+ return (0, _builder.default)("TypeParameter", ...arguments);
+}
+
+function typeParameterDeclaration(params) {
+ return (0, _builder.default)("TypeParameterDeclaration", ...arguments);
+}
+
+function typeParameterInstantiation(params) {
+ return (0, _builder.default)("TypeParameterInstantiation", ...arguments);
+}
+
+function unionTypeAnnotation(types) {
+ return (0, _builder.default)("UnionTypeAnnotation", ...arguments);
+}
+
+function variance(kind) {
+ return (0, _builder.default)("Variance", ...arguments);
+}
+
+function voidTypeAnnotation() {
+ return (0, _builder.default)("VoidTypeAnnotation", ...arguments);
+}
+
+function enumDeclaration(id, body) {
+ return (0, _builder.default)("EnumDeclaration", ...arguments);
+}
+
+function enumBooleanBody(members) {
+ return (0, _builder.default)("EnumBooleanBody", ...arguments);
+}
+
+function enumNumberBody(members) {
+ return (0, _builder.default)("EnumNumberBody", ...arguments);
+}
+
+function enumStringBody(members) {
+ return (0, _builder.default)("EnumStringBody", ...arguments);
+}
+
+function enumSymbolBody(members) {
+ return (0, _builder.default)("EnumSymbolBody", ...arguments);
+}
+
+function enumBooleanMember(id) {
+ return (0, _builder.default)("EnumBooleanMember", ...arguments);
+}
+
+function enumNumberMember(id, init) {
+ return (0, _builder.default)("EnumNumberMember", ...arguments);
+}
+
+function enumStringMember(id, init) {
+ return (0, _builder.default)("EnumStringMember", ...arguments);
+}
+
+function enumDefaultedMember(id) {
+ return (0, _builder.default)("EnumDefaultedMember", ...arguments);
+}
+
+function indexedAccessType(objectType, indexType) {
+ return (0, _builder.default)("IndexedAccessType", ...arguments);
+}
+
+function optionalIndexedAccessType(objectType, indexType) {
+ return (0, _builder.default)("OptionalIndexedAccessType", ...arguments);
+}
+
+function jsxAttribute(name, value) {
+ return (0, _builder.default)("JSXAttribute", ...arguments);
+}
+
+function jsxClosingElement(name) {
+ return (0, _builder.default)("JSXClosingElement", ...arguments);
+}
+
+function jsxElement(openingElement, closingElement, children, selfClosing) {
+ return (0, _builder.default)("JSXElement", ...arguments);
+}
+
+function jsxEmptyExpression() {
+ return (0, _builder.default)("JSXEmptyExpression", ...arguments);
+}
+
+function jsxExpressionContainer(expression) {
+ return (0, _builder.default)("JSXExpressionContainer", ...arguments);
+}
+
+function jsxSpreadChild(expression) {
+ return (0, _builder.default)("JSXSpreadChild", ...arguments);
+}
+
+function jsxIdentifier(name) {
+ return (0, _builder.default)("JSXIdentifier", ...arguments);
+}
+
+function jsxMemberExpression(object, property) {
+ return (0, _builder.default)("JSXMemberExpression", ...arguments);
+}
+
+function jsxNamespacedName(namespace, name) {
+ return (0, _builder.default)("JSXNamespacedName", ...arguments);
+}
+
+function jsxOpeningElement(name, attributes, selfClosing) {
+ return (0, _builder.default)("JSXOpeningElement", ...arguments);
+}
+
+function jsxSpreadAttribute(argument) {
+ return (0, _builder.default)("JSXSpreadAttribute", ...arguments);
+}
+
+function jsxText(value) {
+ return (0, _builder.default)("JSXText", ...arguments);
+}
+
+function jsxFragment(openingFragment, closingFragment, children) {
+ return (0, _builder.default)("JSXFragment", ...arguments);
+}
+
+function jsxOpeningFragment() {
+ return (0, _builder.default)("JSXOpeningFragment", ...arguments);
+}
+
+function jsxClosingFragment() {
+ return (0, _builder.default)("JSXClosingFragment", ...arguments);
+}
+
+function noop() {
+ return (0, _builder.default)("Noop", ...arguments);
+}
+
+function placeholder(expectedNode, name) {
+ return (0, _builder.default)("Placeholder", ...arguments);
+}
+
+function v8IntrinsicIdentifier(name) {
+ return (0, _builder.default)("V8IntrinsicIdentifier", ...arguments);
+}
+
+function argumentPlaceholder() {
+ return (0, _builder.default)("ArgumentPlaceholder", ...arguments);
+}
+
+function bindExpression(object, callee) {
+ return (0, _builder.default)("BindExpression", ...arguments);
+}
+
+function importAttribute(key, value) {
+ return (0, _builder.default)("ImportAttribute", ...arguments);
+}
+
+function decorator(expression) {
+ return (0, _builder.default)("Decorator", ...arguments);
+}
+
+function doExpression(body, async) {
+ return (0, _builder.default)("DoExpression", ...arguments);
+}
+
+function exportDefaultSpecifier(exported) {
+ return (0, _builder.default)("ExportDefaultSpecifier", ...arguments);
+}
+
+function recordExpression(properties) {
+ return (0, _builder.default)("RecordExpression", ...arguments);
+}
+
+function tupleExpression(elements) {
+ return (0, _builder.default)("TupleExpression", ...arguments);
+}
+
+function decimalLiteral(value) {
+ return (0, _builder.default)("DecimalLiteral", ...arguments);
+}
+
+function staticBlock(body) {
+ return (0, _builder.default)("StaticBlock", ...arguments);
+}
+
+function moduleExpression(body) {
+ return (0, _builder.default)("ModuleExpression", ...arguments);
+}
+
+function topicReference() {
+ return (0, _builder.default)("TopicReference", ...arguments);
+}
+
+function pipelineTopicExpression(expression) {
+ return (0, _builder.default)("PipelineTopicExpression", ...arguments);
+}
+
+function pipelineBareFunction(callee) {
+ return (0, _builder.default)("PipelineBareFunction", ...arguments);
+}
+
+function pipelinePrimaryTopicReference() {
+ return (0, _builder.default)("PipelinePrimaryTopicReference", ...arguments);
+}
+
+function tsParameterProperty(parameter) {
+ return (0, _builder.default)("TSParameterProperty", ...arguments);
+}
+
+function tsDeclareFunction(id, typeParameters, params, returnType) {
+ return (0, _builder.default)("TSDeclareFunction", ...arguments);
+}
+
+function tsDeclareMethod(decorators, key, typeParameters, params, returnType) {
+ return (0, _builder.default)("TSDeclareMethod", ...arguments);
+}
+
+function tsQualifiedName(left, right) {
+ return (0, _builder.default)("TSQualifiedName", ...arguments);
+}
+
+function tsCallSignatureDeclaration(typeParameters, parameters, typeAnnotation) {
+ return (0, _builder.default)("TSCallSignatureDeclaration", ...arguments);
+}
+
+function tsConstructSignatureDeclaration(typeParameters, parameters, typeAnnotation) {
+ return (0, _builder.default)("TSConstructSignatureDeclaration", ...arguments);
+}
+
+function tsPropertySignature(key, typeAnnotation, initializer) {
+ return (0, _builder.default)("TSPropertySignature", ...arguments);
+}
+
+function tsMethodSignature(key, typeParameters, parameters, typeAnnotation) {
+ return (0, _builder.default)("TSMethodSignature", ...arguments);
+}
+
+function tsIndexSignature(parameters, typeAnnotation) {
+ return (0, _builder.default)("TSIndexSignature", ...arguments);
+}
+
+function tsAnyKeyword() {
+ return (0, _builder.default)("TSAnyKeyword", ...arguments);
+}
+
+function tsBooleanKeyword() {
+ return (0, _builder.default)("TSBooleanKeyword", ...arguments);
+}
+
+function tsBigIntKeyword() {
+ return (0, _builder.default)("TSBigIntKeyword", ...arguments);
+}
+
+function tsIntrinsicKeyword() {
+ return (0, _builder.default)("TSIntrinsicKeyword", ...arguments);
+}
+
+function tsNeverKeyword() {
+ return (0, _builder.default)("TSNeverKeyword", ...arguments);
+}
+
+function tsNullKeyword() {
+ return (0, _builder.default)("TSNullKeyword", ...arguments);
+}
+
+function tsNumberKeyword() {
+ return (0, _builder.default)("TSNumberKeyword", ...arguments);
+}
+
+function tsObjectKeyword() {
+ return (0, _builder.default)("TSObjectKeyword", ...arguments);
+}
+
+function tsStringKeyword() {
+ return (0, _builder.default)("TSStringKeyword", ...arguments);
+}
+
+function tsSymbolKeyword() {
+ return (0, _builder.default)("TSSymbolKeyword", ...arguments);
+}
+
+function tsUndefinedKeyword() {
+ return (0, _builder.default)("TSUndefinedKeyword", ...arguments);
+}
+
+function tsUnknownKeyword() {
+ return (0, _builder.default)("TSUnknownKeyword", ...arguments);
+}
+
+function tsVoidKeyword() {
+ return (0, _builder.default)("TSVoidKeyword", ...arguments);
+}
+
+function tsThisType() {
+ return (0, _builder.default)("TSThisType", ...arguments);
+}
+
+function tsFunctionType(typeParameters, parameters, typeAnnotation) {
+ return (0, _builder.default)("TSFunctionType", ...arguments);
+}
+
+function tsConstructorType(typeParameters, parameters, typeAnnotation) {
+ return (0, _builder.default)("TSConstructorType", ...arguments);
+}
+
+function tsTypeReference(typeName, typeParameters) {
+ return (0, _builder.default)("TSTypeReference", ...arguments);
+}
+
+function tsTypePredicate(parameterName, typeAnnotation, asserts) {
+ return (0, _builder.default)("TSTypePredicate", ...arguments);
+}
+
+function tsTypeQuery(exprName) {
+ return (0, _builder.default)("TSTypeQuery", ...arguments);
+}
+
+function tsTypeLiteral(members) {
+ return (0, _builder.default)("TSTypeLiteral", ...arguments);
+}
+
+function tsArrayType(elementType) {
+ return (0, _builder.default)("TSArrayType", ...arguments);
+}
+
+function tsTupleType(elementTypes) {
+ return (0, _builder.default)("TSTupleType", ...arguments);
+}
+
+function tsOptionalType(typeAnnotation) {
+ return (0, _builder.default)("TSOptionalType", ...arguments);
+}
+
+function tsRestType(typeAnnotation) {
+ return (0, _builder.default)("TSRestType", ...arguments);
+}
+
+function tsNamedTupleMember(label, elementType, optional) {
+ return (0, _builder.default)("TSNamedTupleMember", ...arguments);
+}
+
+function tsUnionType(types) {
+ return (0, _builder.default)("TSUnionType", ...arguments);
+}
+
+function tsIntersectionType(types) {
+ return (0, _builder.default)("TSIntersectionType", ...arguments);
+}
+
+function tsConditionalType(checkType, extendsType, trueType, falseType) {
+ return (0, _builder.default)("TSConditionalType", ...arguments);
+}
+
+function tsInferType(typeParameter) {
+ return (0, _builder.default)("TSInferType", ...arguments);
+}
+
+function tsParenthesizedType(typeAnnotation) {
+ return (0, _builder.default)("TSParenthesizedType", ...arguments);
+}
+
+function tsTypeOperator(typeAnnotation) {
+ return (0, _builder.default)("TSTypeOperator", ...arguments);
+}
+
+function tsIndexedAccessType(objectType, indexType) {
+ return (0, _builder.default)("TSIndexedAccessType", ...arguments);
+}
+
+function tsMappedType(typeParameter, typeAnnotation, nameType) {
+ return (0, _builder.default)("TSMappedType", ...arguments);
+}
+
+function tsLiteralType(literal) {
+ return (0, _builder.default)("TSLiteralType", ...arguments);
+}
+
+function tsExpressionWithTypeArguments(expression, typeParameters) {
+ return (0, _builder.default)("TSExpressionWithTypeArguments", ...arguments);
+}
+
+function tsInterfaceDeclaration(id, typeParameters, _extends, body) {
+ return (0, _builder.default)("TSInterfaceDeclaration", ...arguments);
+}
+
+function tsInterfaceBody(body) {
+ return (0, _builder.default)("TSInterfaceBody", ...arguments);
+}
+
+function tsTypeAliasDeclaration(id, typeParameters, typeAnnotation) {
+ return (0, _builder.default)("TSTypeAliasDeclaration", ...arguments);
+}
+
+function tsAsExpression(expression, typeAnnotation) {
+ return (0, _builder.default)("TSAsExpression", ...arguments);
+}
+
+function tsTypeAssertion(typeAnnotation, expression) {
+ return (0, _builder.default)("TSTypeAssertion", ...arguments);
+}
+
+function tsEnumDeclaration(id, members) {
+ return (0, _builder.default)("TSEnumDeclaration", ...arguments);
+}
+
+function tsEnumMember(id, initializer) {
+ return (0, _builder.default)("TSEnumMember", ...arguments);
+}
+
+function tsModuleDeclaration(id, body) {
+ return (0, _builder.default)("TSModuleDeclaration", ...arguments);
+}
+
+function tsModuleBlock(body) {
+ return (0, _builder.default)("TSModuleBlock", ...arguments);
+}
+
+function tsImportType(argument, qualifier, typeParameters) {
+ return (0, _builder.default)("TSImportType", ...arguments);
+}
+
+function tsImportEqualsDeclaration(id, moduleReference) {
+ return (0, _builder.default)("TSImportEqualsDeclaration", ...arguments);
+}
+
+function tsExternalModuleReference(expression) {
+ return (0, _builder.default)("TSExternalModuleReference", ...arguments);
+}
+
+function tsNonNullExpression(expression) {
+ return (0, _builder.default)("TSNonNullExpression", ...arguments);
+}
+
+function tsExportAssignment(expression) {
+ return (0, _builder.default)("TSExportAssignment", ...arguments);
+}
+
+function tsNamespaceExportDeclaration(id) {
+ return (0, _builder.default)("TSNamespaceExportDeclaration", ...arguments);
+}
+
+function tsTypeAnnotation(typeAnnotation) {
+ return (0, _builder.default)("TSTypeAnnotation", ...arguments);
+}
+
+function tsTypeParameterInstantiation(params) {
+ return (0, _builder.default)("TSTypeParameterInstantiation", ...arguments);
+}
+
+function tsTypeParameterDeclaration(params) {
+ return (0, _builder.default)("TSTypeParameterDeclaration", ...arguments);
+}
+
+function tsTypeParameter(constraint, _default, name) {
+ return (0, _builder.default)("TSTypeParameter", ...arguments);
+}
+
+function NumberLiteral(...args) {
+ console.trace("The node type NumberLiteral has been renamed to NumericLiteral");
+ return (0, _builder.default)("NumberLiteral", ...args);
+}
+
+function RegexLiteral(...args) {
+ console.trace("The node type RegexLiteral has been renamed to RegExpLiteral");
+ return (0, _builder.default)("RegexLiteral", ...args);
+}
+
+function RestProperty(...args) {
+ console.trace("The node type RestProperty has been renamed to RestElement");
+ return (0, _builder.default)("RestProperty", ...args);
+}
+
+function SpreadProperty(...args) {
+ console.trace("The node type SpreadProperty has been renamed to SpreadElement");
+ return (0, _builder.default)("SpreadProperty", ...args);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/uppercase.js b/chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/uppercase.js
new file mode 100644
index 00000000000..e2ad08d82aa
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/builders/generated/uppercase.js
@@ -0,0 +1,1507 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "ArrayExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.arrayExpression;
+ }
+});
+Object.defineProperty(exports, "AssignmentExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.assignmentExpression;
+ }
+});
+Object.defineProperty(exports, "BinaryExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.binaryExpression;
+ }
+});
+Object.defineProperty(exports, "InterpreterDirective", {
+ enumerable: true,
+ get: function () {
+ return _index.interpreterDirective;
+ }
+});
+Object.defineProperty(exports, "Directive", {
+ enumerable: true,
+ get: function () {
+ return _index.directive;
+ }
+});
+Object.defineProperty(exports, "DirectiveLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.directiveLiteral;
+ }
+});
+Object.defineProperty(exports, "BlockStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.blockStatement;
+ }
+});
+Object.defineProperty(exports, "BreakStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.breakStatement;
+ }
+});
+Object.defineProperty(exports, "CallExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.callExpression;
+ }
+});
+Object.defineProperty(exports, "CatchClause", {
+ enumerable: true,
+ get: function () {
+ return _index.catchClause;
+ }
+});
+Object.defineProperty(exports, "ConditionalExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.conditionalExpression;
+ }
+});
+Object.defineProperty(exports, "ContinueStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.continueStatement;
+ }
+});
+Object.defineProperty(exports, "DebuggerStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.debuggerStatement;
+ }
+});
+Object.defineProperty(exports, "DoWhileStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.doWhileStatement;
+ }
+});
+Object.defineProperty(exports, "EmptyStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.emptyStatement;
+ }
+});
+Object.defineProperty(exports, "ExpressionStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.expressionStatement;
+ }
+});
+Object.defineProperty(exports, "File", {
+ enumerable: true,
+ get: function () {
+ return _index.file;
+ }
+});
+Object.defineProperty(exports, "ForInStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.forInStatement;
+ }
+});
+Object.defineProperty(exports, "ForStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.forStatement;
+ }
+});
+Object.defineProperty(exports, "FunctionDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.functionDeclaration;
+ }
+});
+Object.defineProperty(exports, "FunctionExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.functionExpression;
+ }
+});
+Object.defineProperty(exports, "Identifier", {
+ enumerable: true,
+ get: function () {
+ return _index.identifier;
+ }
+});
+Object.defineProperty(exports, "IfStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.ifStatement;
+ }
+});
+Object.defineProperty(exports, "LabeledStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.labeledStatement;
+ }
+});
+Object.defineProperty(exports, "StringLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.stringLiteral;
+ }
+});
+Object.defineProperty(exports, "NumericLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.numericLiteral;
+ }
+});
+Object.defineProperty(exports, "NullLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.nullLiteral;
+ }
+});
+Object.defineProperty(exports, "BooleanLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.booleanLiteral;
+ }
+});
+Object.defineProperty(exports, "RegExpLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.regExpLiteral;
+ }
+});
+Object.defineProperty(exports, "LogicalExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.logicalExpression;
+ }
+});
+Object.defineProperty(exports, "MemberExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.memberExpression;
+ }
+});
+Object.defineProperty(exports, "NewExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.newExpression;
+ }
+});
+Object.defineProperty(exports, "Program", {
+ enumerable: true,
+ get: function () {
+ return _index.program;
+ }
+});
+Object.defineProperty(exports, "ObjectExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.objectExpression;
+ }
+});
+Object.defineProperty(exports, "ObjectMethod", {
+ enumerable: true,
+ get: function () {
+ return _index.objectMethod;
+ }
+});
+Object.defineProperty(exports, "ObjectProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.objectProperty;
+ }
+});
+Object.defineProperty(exports, "RestElement", {
+ enumerable: true,
+ get: function () {
+ return _index.restElement;
+ }
+});
+Object.defineProperty(exports, "ReturnStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.returnStatement;
+ }
+});
+Object.defineProperty(exports, "SequenceExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.sequenceExpression;
+ }
+});
+Object.defineProperty(exports, "ParenthesizedExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.parenthesizedExpression;
+ }
+});
+Object.defineProperty(exports, "SwitchCase", {
+ enumerable: true,
+ get: function () {
+ return _index.switchCase;
+ }
+});
+Object.defineProperty(exports, "SwitchStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.switchStatement;
+ }
+});
+Object.defineProperty(exports, "ThisExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.thisExpression;
+ }
+});
+Object.defineProperty(exports, "ThrowStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.throwStatement;
+ }
+});
+Object.defineProperty(exports, "TryStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.tryStatement;
+ }
+});
+Object.defineProperty(exports, "UnaryExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.unaryExpression;
+ }
+});
+Object.defineProperty(exports, "UpdateExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.updateExpression;
+ }
+});
+Object.defineProperty(exports, "VariableDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.variableDeclaration;
+ }
+});
+Object.defineProperty(exports, "VariableDeclarator", {
+ enumerable: true,
+ get: function () {
+ return _index.variableDeclarator;
+ }
+});
+Object.defineProperty(exports, "WhileStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.whileStatement;
+ }
+});
+Object.defineProperty(exports, "WithStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.withStatement;
+ }
+});
+Object.defineProperty(exports, "AssignmentPattern", {
+ enumerable: true,
+ get: function () {
+ return _index.assignmentPattern;
+ }
+});
+Object.defineProperty(exports, "ArrayPattern", {
+ enumerable: true,
+ get: function () {
+ return _index.arrayPattern;
+ }
+});
+Object.defineProperty(exports, "ArrowFunctionExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.arrowFunctionExpression;
+ }
+});
+Object.defineProperty(exports, "ClassBody", {
+ enumerable: true,
+ get: function () {
+ return _index.classBody;
+ }
+});
+Object.defineProperty(exports, "ClassExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.classExpression;
+ }
+});
+Object.defineProperty(exports, "ClassDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.classDeclaration;
+ }
+});
+Object.defineProperty(exports, "ExportAllDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.exportAllDeclaration;
+ }
+});
+Object.defineProperty(exports, "ExportDefaultDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.exportDefaultDeclaration;
+ }
+});
+Object.defineProperty(exports, "ExportNamedDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.exportNamedDeclaration;
+ }
+});
+Object.defineProperty(exports, "ExportSpecifier", {
+ enumerable: true,
+ get: function () {
+ return _index.exportSpecifier;
+ }
+});
+Object.defineProperty(exports, "ForOfStatement", {
+ enumerable: true,
+ get: function () {
+ return _index.forOfStatement;
+ }
+});
+Object.defineProperty(exports, "ImportDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.importDeclaration;
+ }
+});
+Object.defineProperty(exports, "ImportDefaultSpecifier", {
+ enumerable: true,
+ get: function () {
+ return _index.importDefaultSpecifier;
+ }
+});
+Object.defineProperty(exports, "ImportNamespaceSpecifier", {
+ enumerable: true,
+ get: function () {
+ return _index.importNamespaceSpecifier;
+ }
+});
+Object.defineProperty(exports, "ImportSpecifier", {
+ enumerable: true,
+ get: function () {
+ return _index.importSpecifier;
+ }
+});
+Object.defineProperty(exports, "MetaProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.metaProperty;
+ }
+});
+Object.defineProperty(exports, "ClassMethod", {
+ enumerable: true,
+ get: function () {
+ return _index.classMethod;
+ }
+});
+Object.defineProperty(exports, "ObjectPattern", {
+ enumerable: true,
+ get: function () {
+ return _index.objectPattern;
+ }
+});
+Object.defineProperty(exports, "SpreadElement", {
+ enumerable: true,
+ get: function () {
+ return _index.spreadElement;
+ }
+});
+Object.defineProperty(exports, "Super", {
+ enumerable: true,
+ get: function () {
+ return _index.super;
+ }
+});
+Object.defineProperty(exports, "TaggedTemplateExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.taggedTemplateExpression;
+ }
+});
+Object.defineProperty(exports, "TemplateElement", {
+ enumerable: true,
+ get: function () {
+ return _index.templateElement;
+ }
+});
+Object.defineProperty(exports, "TemplateLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.templateLiteral;
+ }
+});
+Object.defineProperty(exports, "YieldExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.yieldExpression;
+ }
+});
+Object.defineProperty(exports, "AwaitExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.awaitExpression;
+ }
+});
+Object.defineProperty(exports, "Import", {
+ enumerable: true,
+ get: function () {
+ return _index.import;
+ }
+});
+Object.defineProperty(exports, "BigIntLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.bigIntLiteral;
+ }
+});
+Object.defineProperty(exports, "ExportNamespaceSpecifier", {
+ enumerable: true,
+ get: function () {
+ return _index.exportNamespaceSpecifier;
+ }
+});
+Object.defineProperty(exports, "OptionalMemberExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.optionalMemberExpression;
+ }
+});
+Object.defineProperty(exports, "OptionalCallExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.optionalCallExpression;
+ }
+});
+Object.defineProperty(exports, "ClassProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.classProperty;
+ }
+});
+Object.defineProperty(exports, "ClassPrivateProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.classPrivateProperty;
+ }
+});
+Object.defineProperty(exports, "ClassPrivateMethod", {
+ enumerable: true,
+ get: function () {
+ return _index.classPrivateMethod;
+ }
+});
+Object.defineProperty(exports, "PrivateName", {
+ enumerable: true,
+ get: function () {
+ return _index.privateName;
+ }
+});
+Object.defineProperty(exports, "AnyTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.anyTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "ArrayTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.arrayTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "BooleanTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.booleanTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "BooleanLiteralTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.booleanLiteralTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "NullLiteralTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.nullLiteralTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "ClassImplements", {
+ enumerable: true,
+ get: function () {
+ return _index.classImplements;
+ }
+});
+Object.defineProperty(exports, "DeclareClass", {
+ enumerable: true,
+ get: function () {
+ return _index.declareClass;
+ }
+});
+Object.defineProperty(exports, "DeclareFunction", {
+ enumerable: true,
+ get: function () {
+ return _index.declareFunction;
+ }
+});
+Object.defineProperty(exports, "DeclareInterface", {
+ enumerable: true,
+ get: function () {
+ return _index.declareInterface;
+ }
+});
+Object.defineProperty(exports, "DeclareModule", {
+ enumerable: true,
+ get: function () {
+ return _index.declareModule;
+ }
+});
+Object.defineProperty(exports, "DeclareModuleExports", {
+ enumerable: true,
+ get: function () {
+ return _index.declareModuleExports;
+ }
+});
+Object.defineProperty(exports, "DeclareTypeAlias", {
+ enumerable: true,
+ get: function () {
+ return _index.declareTypeAlias;
+ }
+});
+Object.defineProperty(exports, "DeclareOpaqueType", {
+ enumerable: true,
+ get: function () {
+ return _index.declareOpaqueType;
+ }
+});
+Object.defineProperty(exports, "DeclareVariable", {
+ enumerable: true,
+ get: function () {
+ return _index.declareVariable;
+ }
+});
+Object.defineProperty(exports, "DeclareExportDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.declareExportDeclaration;
+ }
+});
+Object.defineProperty(exports, "DeclareExportAllDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.declareExportAllDeclaration;
+ }
+});
+Object.defineProperty(exports, "DeclaredPredicate", {
+ enumerable: true,
+ get: function () {
+ return _index.declaredPredicate;
+ }
+});
+Object.defineProperty(exports, "ExistsTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.existsTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "FunctionTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.functionTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "FunctionTypeParam", {
+ enumerable: true,
+ get: function () {
+ return _index.functionTypeParam;
+ }
+});
+Object.defineProperty(exports, "GenericTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.genericTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "InferredPredicate", {
+ enumerable: true,
+ get: function () {
+ return _index.inferredPredicate;
+ }
+});
+Object.defineProperty(exports, "InterfaceExtends", {
+ enumerable: true,
+ get: function () {
+ return _index.interfaceExtends;
+ }
+});
+Object.defineProperty(exports, "InterfaceDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.interfaceDeclaration;
+ }
+});
+Object.defineProperty(exports, "InterfaceTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.interfaceTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "IntersectionTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.intersectionTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "MixedTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.mixedTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "EmptyTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.emptyTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "NullableTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.nullableTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "NumberLiteralTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.numberLiteralTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "NumberTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.numberTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "ObjectTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.objectTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "ObjectTypeInternalSlot", {
+ enumerable: true,
+ get: function () {
+ return _index.objectTypeInternalSlot;
+ }
+});
+Object.defineProperty(exports, "ObjectTypeCallProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.objectTypeCallProperty;
+ }
+});
+Object.defineProperty(exports, "ObjectTypeIndexer", {
+ enumerable: true,
+ get: function () {
+ return _index.objectTypeIndexer;
+ }
+});
+Object.defineProperty(exports, "ObjectTypeProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.objectTypeProperty;
+ }
+});
+Object.defineProperty(exports, "ObjectTypeSpreadProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.objectTypeSpreadProperty;
+ }
+});
+Object.defineProperty(exports, "OpaqueType", {
+ enumerable: true,
+ get: function () {
+ return _index.opaqueType;
+ }
+});
+Object.defineProperty(exports, "QualifiedTypeIdentifier", {
+ enumerable: true,
+ get: function () {
+ return _index.qualifiedTypeIdentifier;
+ }
+});
+Object.defineProperty(exports, "StringLiteralTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.stringLiteralTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "StringTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.stringTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "SymbolTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.symbolTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "ThisTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.thisTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "TupleTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.tupleTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "TypeofTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.typeofTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "TypeAlias", {
+ enumerable: true,
+ get: function () {
+ return _index.typeAlias;
+ }
+});
+Object.defineProperty(exports, "TypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.typeAnnotation;
+ }
+});
+Object.defineProperty(exports, "TypeCastExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.typeCastExpression;
+ }
+});
+Object.defineProperty(exports, "TypeParameter", {
+ enumerable: true,
+ get: function () {
+ return _index.typeParameter;
+ }
+});
+Object.defineProperty(exports, "TypeParameterDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.typeParameterDeclaration;
+ }
+});
+Object.defineProperty(exports, "TypeParameterInstantiation", {
+ enumerable: true,
+ get: function () {
+ return _index.typeParameterInstantiation;
+ }
+});
+Object.defineProperty(exports, "UnionTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.unionTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "Variance", {
+ enumerable: true,
+ get: function () {
+ return _index.variance;
+ }
+});
+Object.defineProperty(exports, "VoidTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.voidTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "EnumDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.enumDeclaration;
+ }
+});
+Object.defineProperty(exports, "EnumBooleanBody", {
+ enumerable: true,
+ get: function () {
+ return _index.enumBooleanBody;
+ }
+});
+Object.defineProperty(exports, "EnumNumberBody", {
+ enumerable: true,
+ get: function () {
+ return _index.enumNumberBody;
+ }
+});
+Object.defineProperty(exports, "EnumStringBody", {
+ enumerable: true,
+ get: function () {
+ return _index.enumStringBody;
+ }
+});
+Object.defineProperty(exports, "EnumSymbolBody", {
+ enumerable: true,
+ get: function () {
+ return _index.enumSymbolBody;
+ }
+});
+Object.defineProperty(exports, "EnumBooleanMember", {
+ enumerable: true,
+ get: function () {
+ return _index.enumBooleanMember;
+ }
+});
+Object.defineProperty(exports, "EnumNumberMember", {
+ enumerable: true,
+ get: function () {
+ return _index.enumNumberMember;
+ }
+});
+Object.defineProperty(exports, "EnumStringMember", {
+ enumerable: true,
+ get: function () {
+ return _index.enumStringMember;
+ }
+});
+Object.defineProperty(exports, "EnumDefaultedMember", {
+ enumerable: true,
+ get: function () {
+ return _index.enumDefaultedMember;
+ }
+});
+Object.defineProperty(exports, "IndexedAccessType", {
+ enumerable: true,
+ get: function () {
+ return _index.indexedAccessType;
+ }
+});
+Object.defineProperty(exports, "OptionalIndexedAccessType", {
+ enumerable: true,
+ get: function () {
+ return _index.optionalIndexedAccessType;
+ }
+});
+Object.defineProperty(exports, "JSXAttribute", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxAttribute;
+ }
+});
+Object.defineProperty(exports, "JSXClosingElement", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxClosingElement;
+ }
+});
+Object.defineProperty(exports, "JSXElement", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxElement;
+ }
+});
+Object.defineProperty(exports, "JSXEmptyExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxEmptyExpression;
+ }
+});
+Object.defineProperty(exports, "JSXExpressionContainer", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxExpressionContainer;
+ }
+});
+Object.defineProperty(exports, "JSXSpreadChild", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxSpreadChild;
+ }
+});
+Object.defineProperty(exports, "JSXIdentifier", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxIdentifier;
+ }
+});
+Object.defineProperty(exports, "JSXMemberExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxMemberExpression;
+ }
+});
+Object.defineProperty(exports, "JSXNamespacedName", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxNamespacedName;
+ }
+});
+Object.defineProperty(exports, "JSXOpeningElement", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxOpeningElement;
+ }
+});
+Object.defineProperty(exports, "JSXSpreadAttribute", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxSpreadAttribute;
+ }
+});
+Object.defineProperty(exports, "JSXText", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxText;
+ }
+});
+Object.defineProperty(exports, "JSXFragment", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxFragment;
+ }
+});
+Object.defineProperty(exports, "JSXOpeningFragment", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxOpeningFragment;
+ }
+});
+Object.defineProperty(exports, "JSXClosingFragment", {
+ enumerable: true,
+ get: function () {
+ return _index.jsxClosingFragment;
+ }
+});
+Object.defineProperty(exports, "Noop", {
+ enumerable: true,
+ get: function () {
+ return _index.noop;
+ }
+});
+Object.defineProperty(exports, "Placeholder", {
+ enumerable: true,
+ get: function () {
+ return _index.placeholder;
+ }
+});
+Object.defineProperty(exports, "V8IntrinsicIdentifier", {
+ enumerable: true,
+ get: function () {
+ return _index.v8IntrinsicIdentifier;
+ }
+});
+Object.defineProperty(exports, "ArgumentPlaceholder", {
+ enumerable: true,
+ get: function () {
+ return _index.argumentPlaceholder;
+ }
+});
+Object.defineProperty(exports, "BindExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.bindExpression;
+ }
+});
+Object.defineProperty(exports, "ImportAttribute", {
+ enumerable: true,
+ get: function () {
+ return _index.importAttribute;
+ }
+});
+Object.defineProperty(exports, "Decorator", {
+ enumerable: true,
+ get: function () {
+ return _index.decorator;
+ }
+});
+Object.defineProperty(exports, "DoExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.doExpression;
+ }
+});
+Object.defineProperty(exports, "ExportDefaultSpecifier", {
+ enumerable: true,
+ get: function () {
+ return _index.exportDefaultSpecifier;
+ }
+});
+Object.defineProperty(exports, "RecordExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.recordExpression;
+ }
+});
+Object.defineProperty(exports, "TupleExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.tupleExpression;
+ }
+});
+Object.defineProperty(exports, "DecimalLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.decimalLiteral;
+ }
+});
+Object.defineProperty(exports, "StaticBlock", {
+ enumerable: true,
+ get: function () {
+ return _index.staticBlock;
+ }
+});
+Object.defineProperty(exports, "ModuleExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.moduleExpression;
+ }
+});
+Object.defineProperty(exports, "TopicReference", {
+ enumerable: true,
+ get: function () {
+ return _index.topicReference;
+ }
+});
+Object.defineProperty(exports, "PipelineTopicExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.pipelineTopicExpression;
+ }
+});
+Object.defineProperty(exports, "PipelineBareFunction", {
+ enumerable: true,
+ get: function () {
+ return _index.pipelineBareFunction;
+ }
+});
+Object.defineProperty(exports, "PipelinePrimaryTopicReference", {
+ enumerable: true,
+ get: function () {
+ return _index.pipelinePrimaryTopicReference;
+ }
+});
+Object.defineProperty(exports, "TSParameterProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.tsParameterProperty;
+ }
+});
+Object.defineProperty(exports, "TSDeclareFunction", {
+ enumerable: true,
+ get: function () {
+ return _index.tsDeclareFunction;
+ }
+});
+Object.defineProperty(exports, "TSDeclareMethod", {
+ enumerable: true,
+ get: function () {
+ return _index.tsDeclareMethod;
+ }
+});
+Object.defineProperty(exports, "TSQualifiedName", {
+ enumerable: true,
+ get: function () {
+ return _index.tsQualifiedName;
+ }
+});
+Object.defineProperty(exports, "TSCallSignatureDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsCallSignatureDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSConstructSignatureDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsConstructSignatureDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSPropertySignature", {
+ enumerable: true,
+ get: function () {
+ return _index.tsPropertySignature;
+ }
+});
+Object.defineProperty(exports, "TSMethodSignature", {
+ enumerable: true,
+ get: function () {
+ return _index.tsMethodSignature;
+ }
+});
+Object.defineProperty(exports, "TSIndexSignature", {
+ enumerable: true,
+ get: function () {
+ return _index.tsIndexSignature;
+ }
+});
+Object.defineProperty(exports, "TSAnyKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsAnyKeyword;
+ }
+});
+Object.defineProperty(exports, "TSBooleanKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsBooleanKeyword;
+ }
+});
+Object.defineProperty(exports, "TSBigIntKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsBigIntKeyword;
+ }
+});
+Object.defineProperty(exports, "TSIntrinsicKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsIntrinsicKeyword;
+ }
+});
+Object.defineProperty(exports, "TSNeverKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsNeverKeyword;
+ }
+});
+Object.defineProperty(exports, "TSNullKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsNullKeyword;
+ }
+});
+Object.defineProperty(exports, "TSNumberKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsNumberKeyword;
+ }
+});
+Object.defineProperty(exports, "TSObjectKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsObjectKeyword;
+ }
+});
+Object.defineProperty(exports, "TSStringKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsStringKeyword;
+ }
+});
+Object.defineProperty(exports, "TSSymbolKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsSymbolKeyword;
+ }
+});
+Object.defineProperty(exports, "TSUndefinedKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsUndefinedKeyword;
+ }
+});
+Object.defineProperty(exports, "TSUnknownKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsUnknownKeyword;
+ }
+});
+Object.defineProperty(exports, "TSVoidKeyword", {
+ enumerable: true,
+ get: function () {
+ return _index.tsVoidKeyword;
+ }
+});
+Object.defineProperty(exports, "TSThisType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsThisType;
+ }
+});
+Object.defineProperty(exports, "TSFunctionType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsFunctionType;
+ }
+});
+Object.defineProperty(exports, "TSConstructorType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsConstructorType;
+ }
+});
+Object.defineProperty(exports, "TSTypeReference", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeReference;
+ }
+});
+Object.defineProperty(exports, "TSTypePredicate", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypePredicate;
+ }
+});
+Object.defineProperty(exports, "TSTypeQuery", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeQuery;
+ }
+});
+Object.defineProperty(exports, "TSTypeLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeLiteral;
+ }
+});
+Object.defineProperty(exports, "TSArrayType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsArrayType;
+ }
+});
+Object.defineProperty(exports, "TSTupleType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTupleType;
+ }
+});
+Object.defineProperty(exports, "TSOptionalType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsOptionalType;
+ }
+});
+Object.defineProperty(exports, "TSRestType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsRestType;
+ }
+});
+Object.defineProperty(exports, "TSNamedTupleMember", {
+ enumerable: true,
+ get: function () {
+ return _index.tsNamedTupleMember;
+ }
+});
+Object.defineProperty(exports, "TSUnionType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsUnionType;
+ }
+});
+Object.defineProperty(exports, "TSIntersectionType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsIntersectionType;
+ }
+});
+Object.defineProperty(exports, "TSConditionalType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsConditionalType;
+ }
+});
+Object.defineProperty(exports, "TSInferType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsInferType;
+ }
+});
+Object.defineProperty(exports, "TSParenthesizedType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsParenthesizedType;
+ }
+});
+Object.defineProperty(exports, "TSTypeOperator", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeOperator;
+ }
+});
+Object.defineProperty(exports, "TSIndexedAccessType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsIndexedAccessType;
+ }
+});
+Object.defineProperty(exports, "TSMappedType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsMappedType;
+ }
+});
+Object.defineProperty(exports, "TSLiteralType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsLiteralType;
+ }
+});
+Object.defineProperty(exports, "TSExpressionWithTypeArguments", {
+ enumerable: true,
+ get: function () {
+ return _index.tsExpressionWithTypeArguments;
+ }
+});
+Object.defineProperty(exports, "TSInterfaceDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsInterfaceDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSInterfaceBody", {
+ enumerable: true,
+ get: function () {
+ return _index.tsInterfaceBody;
+ }
+});
+Object.defineProperty(exports, "TSTypeAliasDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeAliasDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSAsExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.tsAsExpression;
+ }
+});
+Object.defineProperty(exports, "TSTypeAssertion", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeAssertion;
+ }
+});
+Object.defineProperty(exports, "TSEnumDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsEnumDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSEnumMember", {
+ enumerable: true,
+ get: function () {
+ return _index.tsEnumMember;
+ }
+});
+Object.defineProperty(exports, "TSModuleDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsModuleDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSModuleBlock", {
+ enumerable: true,
+ get: function () {
+ return _index.tsModuleBlock;
+ }
+});
+Object.defineProperty(exports, "TSImportType", {
+ enumerable: true,
+ get: function () {
+ return _index.tsImportType;
+ }
+});
+Object.defineProperty(exports, "TSImportEqualsDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsImportEqualsDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSExternalModuleReference", {
+ enumerable: true,
+ get: function () {
+ return _index.tsExternalModuleReference;
+ }
+});
+Object.defineProperty(exports, "TSNonNullExpression", {
+ enumerable: true,
+ get: function () {
+ return _index.tsNonNullExpression;
+ }
+});
+Object.defineProperty(exports, "TSExportAssignment", {
+ enumerable: true,
+ get: function () {
+ return _index.tsExportAssignment;
+ }
+});
+Object.defineProperty(exports, "TSNamespaceExportDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsNamespaceExportDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeAnnotation;
+ }
+});
+Object.defineProperty(exports, "TSTypeParameterInstantiation", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeParameterInstantiation;
+ }
+});
+Object.defineProperty(exports, "TSTypeParameterDeclaration", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeParameterDeclaration;
+ }
+});
+Object.defineProperty(exports, "TSTypeParameter", {
+ enumerable: true,
+ get: function () {
+ return _index.tsTypeParameter;
+ }
+});
+Object.defineProperty(exports, "NumberLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.numberLiteral;
+ }
+});
+Object.defineProperty(exports, "RegexLiteral", {
+ enumerable: true,
+ get: function () {
+ return _index.regexLiteral;
+ }
+});
+Object.defineProperty(exports, "RestProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.restProperty;
+ }
+});
+Object.defineProperty(exports, "SpreadProperty", {
+ enumerable: true,
+ get: function () {
+ return _index.spreadProperty;
+ }
+});
+
+var _index = require("./index"); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/builders/react/buildChildren.js b/chromium/third_party/node/node_modules/@babel/types/lib/builders/react/buildChildren.js
new file mode 100644
index 00000000000..20a194b6b9e
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/builders/react/buildChildren.js
@@ -0,0 +1,29 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = buildChildren;
+
+var _generated = require("../../validators/generated");
+
+var _cleanJSXElementLiteralChild = require("../../utils/react/cleanJSXElementLiteralChild");
+
+function buildChildren(node) {
+ const elements = [];
+
+ for (let i = 0; i < node.children.length; i++) {
+ let child = node.children[i];
+
+ if ((0, _generated.isJSXText)(child)) {
+ (0, _cleanJSXElementLiteralChild.default)(child, elements);
+ continue;
+ }
+
+ if ((0, _generated.isJSXExpressionContainer)(child)) child = child.expression;
+ if ((0, _generated.isJSXEmptyExpression)(child)) continue;
+ elements.push(child);
+ }
+
+ return elements;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js b/chromium/third_party/node/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js
new file mode 100644
index 00000000000..9b53be29d32
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = createTSUnionType;
+
+var _generated = require("../generated");
+
+var _removeTypeDuplicates = require("../../modifications/typescript/removeTypeDuplicates");
+
+function createTSUnionType(typeAnnotations) {
+ const types = typeAnnotations.map(type => type.typeAnnotation);
+ const flattened = (0, _removeTypeDuplicates.default)(types);
+
+ if (flattened.length === 1) {
+ return flattened[0];
+ } else {
+ return (0, _generated.tsUnionType)(flattened);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/clone/clone.js b/chromium/third_party/node/node_modules/@babel/types/lib/clone/clone.js
new file mode 100644
index 00000000000..e262c632d8d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/clone/clone.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = clone;
+
+var _cloneNode = require("./cloneNode");
+
+function clone(node) {
+ return (0, _cloneNode.default)(node, false);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeep.js b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeep.js
new file mode 100644
index 00000000000..9067e7b73d9
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeep.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = cloneDeep;
+
+var _cloneNode = require("./cloneNode");
+
+function cloneDeep(node) {
+ return (0, _cloneNode.default)(node);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js
new file mode 100644
index 00000000000..a8c53dd4b1f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = cloneDeepWithoutLoc;
+
+var _cloneNode = require("./cloneNode");
+
+function cloneDeepWithoutLoc(node) {
+ return (0, _cloneNode.default)(node, true, true);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneNode.js b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneNode.js
new file mode 100644
index 00000000000..5980f2d1ba9
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneNode.js
@@ -0,0 +1,114 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = cloneNode;
+
+var _definitions = require("../definitions");
+
+var _generated = require("../validators/generated");
+
+const has = Function.call.bind(Object.prototype.hasOwnProperty);
+
+function cloneIfNode(obj, deep, withoutLoc) {
+ if (obj && typeof obj.type === "string") {
+ return cloneNode(obj, deep, withoutLoc);
+ }
+
+ return obj;
+}
+
+function cloneIfNodeOrArray(obj, deep, withoutLoc) {
+ if (Array.isArray(obj)) {
+ return obj.map(node => cloneIfNode(node, deep, withoutLoc));
+ }
+
+ return cloneIfNode(obj, deep, withoutLoc);
+}
+
+function cloneNode(node, deep = true, withoutLoc = false) {
+ if (!node) return node;
+ const {
+ type
+ } = node;
+ const newNode = {
+ type: node.type
+ };
+
+ if ((0, _generated.isIdentifier)(node)) {
+ newNode.name = node.name;
+
+ if (has(node, "optional") && typeof node.optional === "boolean") {
+ newNode.optional = node.optional;
+ }
+
+ if (has(node, "typeAnnotation")) {
+ newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc) : node.typeAnnotation;
+ }
+ } else if (!has(_definitions.NODE_FIELDS, type)) {
+ throw new Error(`Unknown node type: "${type}"`);
+ } else {
+ for (const field of Object.keys(_definitions.NODE_FIELDS[type])) {
+ if (has(node, field)) {
+ if (deep) {
+ newNode[field] = (0, _generated.isFile)(node) && field === "comments" ? maybeCloneComments(node.comments, deep, withoutLoc) : cloneIfNodeOrArray(node[field], true, withoutLoc);
+ } else {
+ newNode[field] = node[field];
+ }
+ }
+ }
+ }
+
+ if (has(node, "loc")) {
+ if (withoutLoc) {
+ newNode.loc = null;
+ } else {
+ newNode.loc = node.loc;
+ }
+ }
+
+ if (has(node, "leadingComments")) {
+ newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc);
+ }
+
+ if (has(node, "innerComments")) {
+ newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc);
+ }
+
+ if (has(node, "trailingComments")) {
+ newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc);
+ }
+
+ if (has(node, "extra")) {
+ newNode.extra = Object.assign({}, node.extra);
+ }
+
+ return newNode;
+}
+
+function maybeCloneComments(comments, deep, withoutLoc) {
+ if (!comments || !deep) {
+ return comments;
+ }
+
+ return comments.map(({
+ type,
+ value,
+ loc
+ }) => {
+ if (withoutLoc) {
+ return {
+ type,
+ value,
+ loc: null
+ };
+ }
+
+ return {
+ type,
+ value,
+ loc
+ };
+ });
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js
new file mode 100644
index 00000000000..d0420b1c0de
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = cloneWithoutLoc;
+
+var _cloneNode = require("./cloneNode");
+
+function cloneWithoutLoc(node) {
+ return (0, _cloneNode.default)(node, false, true);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/comments/addComment.js b/chromium/third_party/node/node_modules/@babel/types/lib/comments/addComment.js
new file mode 100644
index 00000000000..de19ab74e84
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/comments/addComment.js
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = addComment;
+
+var _addComments = require("./addComments");
+
+function addComment(node, type, content, line) {
+ return (0, _addComments.default)(node, type, [{
+ type: line ? "CommentLine" : "CommentBlock",
+ value: content
+ }]);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/comments/addComments.js b/chromium/third_party/node/node_modules/@babel/types/lib/comments/addComments.js
new file mode 100644
index 00000000000..26c456fc301
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/comments/addComments.js
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = addComments;
+
+function addComments(node, type, comments) {
+ if (!comments || !node) return node;
+ const key = `${type}Comments`;
+
+ if (node[key]) {
+ if (type === "leading") {
+ node[key] = comments.concat(node[key]);
+ } else {
+ node[key].push(...comments);
+ }
+ } else {
+ node[key] = comments;
+ }
+
+ return node;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritInnerComments.js b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritInnerComments.js
new file mode 100644
index 00000000000..4b5dc9cac2b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritInnerComments.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = inheritInnerComments;
+
+var _inherit = require("../utils/inherit");
+
+function inheritInnerComments(child, parent) {
+ (0, _inherit.default)("innerComments", child, parent);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritLeadingComments.js b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritLeadingComments.js
new file mode 100644
index 00000000000..6aa2b250290
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritLeadingComments.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = inheritLeadingComments;
+
+var _inherit = require("../utils/inherit");
+
+function inheritLeadingComments(child, parent) {
+ (0, _inherit.default)("leadingComments", child, parent);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritTrailingComments.js b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritTrailingComments.js
new file mode 100644
index 00000000000..934ef0b9cad
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritTrailingComments.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = inheritTrailingComments;
+
+var _inherit = require("../utils/inherit");
+
+function inheritTrailingComments(child, parent) {
+ (0, _inherit.default)("trailingComments", child, parent);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritsComments.js b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritsComments.js
new file mode 100644
index 00000000000..49476cffd95
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/comments/inheritsComments.js
@@ -0,0 +1,19 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = inheritsComments;
+
+var _inheritTrailingComments = require("./inheritTrailingComments");
+
+var _inheritLeadingComments = require("./inheritLeadingComments");
+
+var _inheritInnerComments = require("./inheritInnerComments");
+
+function inheritsComments(child, parent) {
+ (0, _inheritTrailingComments.default)(child, parent);
+ (0, _inheritLeadingComments.default)(child, parent);
+ (0, _inheritInnerComments.default)(child, parent);
+ return child;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/comments/removeComments.js b/chromium/third_party/node/node_modules/@babel/types/lib/comments/removeComments.js
new file mode 100644
index 00000000000..fe34f1a8905
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/comments/removeComments.js
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = removeComments;
+
+var _constants = require("../constants");
+
+function removeComments(node) {
+ _constants.COMMENT_KEYS.forEach(key => {
+ node[key] = null;
+ });
+
+ return node;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/constants/generated/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/constants/generated/index.js
new file mode 100644
index 00000000000..5c5900009f6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/constants/generated/index.js
@@ -0,0 +1,99 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.TSBASETYPE_TYPES = exports.TSTYPE_TYPES = exports.TSTYPEELEMENT_TYPES = exports.JSX_TYPES = exports.ENUMMEMBER_TYPES = exports.ENUMBODY_TYPES = exports.FLOWPREDICATE_TYPES = exports.FLOWDECLARATION_TYPES = exports.FLOWBASEANNOTATION_TYPES = exports.FLOWTYPE_TYPES = exports.FLOW_TYPES = exports.PRIVATE_TYPES = exports.MODULESPECIFIER_TYPES = exports.EXPORTDECLARATION_TYPES = exports.MODULEDECLARATION_TYPES = exports.CLASS_TYPES = exports.PATTERN_TYPES = exports.UNARYLIKE_TYPES = exports.PROPERTY_TYPES = exports.OBJECTMEMBER_TYPES = exports.METHOD_TYPES = exports.USERWHITESPACABLE_TYPES = exports.IMMUTABLE_TYPES = exports.LITERAL_TYPES = exports.TSENTITYNAME_TYPES = exports.LVAL_TYPES = exports.PATTERNLIKE_TYPES = exports.DECLARATION_TYPES = exports.PUREISH_TYPES = exports.FUNCTIONPARENT_TYPES = exports.FUNCTION_TYPES = exports.FORXSTATEMENT_TYPES = exports.FOR_TYPES = exports.EXPRESSIONWRAPPER_TYPES = exports.WHILE_TYPES = exports.LOOP_TYPES = exports.CONDITIONAL_TYPES = exports.COMPLETIONSTATEMENT_TYPES = exports.TERMINATORLESS_TYPES = exports.STATEMENT_TYPES = exports.BLOCK_TYPES = exports.BLOCKPARENT_TYPES = exports.SCOPABLE_TYPES = exports.BINARY_TYPES = exports.EXPRESSION_TYPES = void 0;
+
+var _definitions = require("../../definitions");
+
+const EXPRESSION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Expression"];
+exports.EXPRESSION_TYPES = EXPRESSION_TYPES;
+const BINARY_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Binary"];
+exports.BINARY_TYPES = BINARY_TYPES;
+const SCOPABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Scopable"];
+exports.SCOPABLE_TYPES = SCOPABLE_TYPES;
+const BLOCKPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["BlockParent"];
+exports.BLOCKPARENT_TYPES = BLOCKPARENT_TYPES;
+const BLOCK_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Block"];
+exports.BLOCK_TYPES = BLOCK_TYPES;
+const STATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Statement"];
+exports.STATEMENT_TYPES = STATEMENT_TYPES;
+const TERMINATORLESS_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Terminatorless"];
+exports.TERMINATORLESS_TYPES = TERMINATORLESS_TYPES;
+const COMPLETIONSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["CompletionStatement"];
+exports.COMPLETIONSTATEMENT_TYPES = COMPLETIONSTATEMENT_TYPES;
+const CONDITIONAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Conditional"];
+exports.CONDITIONAL_TYPES = CONDITIONAL_TYPES;
+const LOOP_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Loop"];
+exports.LOOP_TYPES = LOOP_TYPES;
+const WHILE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["While"];
+exports.WHILE_TYPES = WHILE_TYPES;
+const EXPRESSIONWRAPPER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ExpressionWrapper"];
+exports.EXPRESSIONWRAPPER_TYPES = EXPRESSIONWRAPPER_TYPES;
+const FOR_TYPES = _definitions.FLIPPED_ALIAS_KEYS["For"];
+exports.FOR_TYPES = FOR_TYPES;
+const FORXSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ForXStatement"];
+exports.FORXSTATEMENT_TYPES = FORXSTATEMENT_TYPES;
+const FUNCTION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Function"];
+exports.FUNCTION_TYPES = FUNCTION_TYPES;
+const FUNCTIONPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FunctionParent"];
+exports.FUNCTIONPARENT_TYPES = FUNCTIONPARENT_TYPES;
+const PUREISH_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Pureish"];
+exports.PUREISH_TYPES = PUREISH_TYPES;
+const DECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Declaration"];
+exports.DECLARATION_TYPES = DECLARATION_TYPES;
+const PATTERNLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["PatternLike"];
+exports.PATTERNLIKE_TYPES = PATTERNLIKE_TYPES;
+const LVAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS["LVal"];
+exports.LVAL_TYPES = LVAL_TYPES;
+const TSENTITYNAME_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSEntityName"];
+exports.TSENTITYNAME_TYPES = TSENTITYNAME_TYPES;
+const LITERAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Literal"];
+exports.LITERAL_TYPES = LITERAL_TYPES;
+const IMMUTABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Immutable"];
+exports.IMMUTABLE_TYPES = IMMUTABLE_TYPES;
+const USERWHITESPACABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["UserWhitespacable"];
+exports.USERWHITESPACABLE_TYPES = USERWHITESPACABLE_TYPES;
+const METHOD_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Method"];
+exports.METHOD_TYPES = METHOD_TYPES;
+const OBJECTMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ObjectMember"];
+exports.OBJECTMEMBER_TYPES = OBJECTMEMBER_TYPES;
+const PROPERTY_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Property"];
+exports.PROPERTY_TYPES = PROPERTY_TYPES;
+const UNARYLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["UnaryLike"];
+exports.UNARYLIKE_TYPES = UNARYLIKE_TYPES;
+const PATTERN_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Pattern"];
+exports.PATTERN_TYPES = PATTERN_TYPES;
+const CLASS_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Class"];
+exports.CLASS_TYPES = CLASS_TYPES;
+const MODULEDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ModuleDeclaration"];
+exports.MODULEDECLARATION_TYPES = MODULEDECLARATION_TYPES;
+const EXPORTDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ExportDeclaration"];
+exports.EXPORTDECLARATION_TYPES = EXPORTDECLARATION_TYPES;
+const MODULESPECIFIER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ModuleSpecifier"];
+exports.MODULESPECIFIER_TYPES = MODULESPECIFIER_TYPES;
+const PRIVATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Private"];
+exports.PRIVATE_TYPES = PRIVATE_TYPES;
+const FLOW_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Flow"];
+exports.FLOW_TYPES = FLOW_TYPES;
+const FLOWTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowType"];
+exports.FLOWTYPE_TYPES = FLOWTYPE_TYPES;
+const FLOWBASEANNOTATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowBaseAnnotation"];
+exports.FLOWBASEANNOTATION_TYPES = FLOWBASEANNOTATION_TYPES;
+const FLOWDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowDeclaration"];
+exports.FLOWDECLARATION_TYPES = FLOWDECLARATION_TYPES;
+const FLOWPREDICATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowPredicate"];
+exports.FLOWPREDICATE_TYPES = FLOWPREDICATE_TYPES;
+const ENUMBODY_TYPES = _definitions.FLIPPED_ALIAS_KEYS["EnumBody"];
+exports.ENUMBODY_TYPES = ENUMBODY_TYPES;
+const ENUMMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["EnumMember"];
+exports.ENUMMEMBER_TYPES = ENUMMEMBER_TYPES;
+const JSX_TYPES = _definitions.FLIPPED_ALIAS_KEYS["JSX"];
+exports.JSX_TYPES = JSX_TYPES;
+const TSTYPEELEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSTypeElement"];
+exports.TSTYPEELEMENT_TYPES = TSTYPEELEMENT_TYPES;
+const TSTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSType"];
+exports.TSTYPE_TYPES = TSTYPE_TYPES;
+const TSBASETYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSBaseType"];
+exports.TSBASETYPE_TYPES = TSBASETYPE_TYPES; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/constants/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/constants/index.js
new file mode 100644
index 00000000000..7553162c664
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/constants/index.js
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.ASSIGNMENT_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = void 0;
+const STATEMENT_OR_BLOCK_KEYS = ["consequent", "body", "alternate"];
+exports.STATEMENT_OR_BLOCK_KEYS = STATEMENT_OR_BLOCK_KEYS;
+const FLATTENABLE_KEYS = ["body", "expressions"];
+exports.FLATTENABLE_KEYS = FLATTENABLE_KEYS;
+const FOR_INIT_KEYS = ["left", "init"];
+exports.FOR_INIT_KEYS = FOR_INIT_KEYS;
+const COMMENT_KEYS = ["leadingComments", "trailingComments", "innerComments"];
+exports.COMMENT_KEYS = COMMENT_KEYS;
+const LOGICAL_OPERATORS = ["||", "&&", "??"];
+exports.LOGICAL_OPERATORS = LOGICAL_OPERATORS;
+const UPDATE_OPERATORS = ["++", "--"];
+exports.UPDATE_OPERATORS = UPDATE_OPERATORS;
+const BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="];
+exports.BOOLEAN_NUMBER_BINARY_OPERATORS = BOOLEAN_NUMBER_BINARY_OPERATORS;
+const EQUALITY_BINARY_OPERATORS = ["==", "===", "!=", "!=="];
+exports.EQUALITY_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS;
+const COMPARISON_BINARY_OPERATORS = [...EQUALITY_BINARY_OPERATORS, "in", "instanceof"];
+exports.COMPARISON_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS;
+const BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUMBER_BINARY_OPERATORS];
+exports.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS;
+const NUMBER_BINARY_OPERATORS = ["-", "/", "%", "*", "**", "&", "|", ">>", ">>>", "<<", "^"];
+exports.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS;
+const BINARY_OPERATORS = ["+", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS];
+exports.BINARY_OPERATORS = BINARY_OPERATORS;
+const ASSIGNMENT_OPERATORS = ["=", "+=", ...NUMBER_BINARY_OPERATORS.map(op => op + "="), ...LOGICAL_OPERATORS.map(op => op + "=")];
+exports.ASSIGNMENT_OPERATORS = ASSIGNMENT_OPERATORS;
+const BOOLEAN_UNARY_OPERATORS = ["delete", "!"];
+exports.BOOLEAN_UNARY_OPERATORS = BOOLEAN_UNARY_OPERATORS;
+const NUMBER_UNARY_OPERATORS = ["+", "-", "~"];
+exports.NUMBER_UNARY_OPERATORS = NUMBER_UNARY_OPERATORS;
+const STRING_UNARY_OPERATORS = ["typeof"];
+exports.STRING_UNARY_OPERATORS = STRING_UNARY_OPERATORS;
+const UNARY_OPERATORS = ["void", "throw", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS];
+exports.UNARY_OPERATORS = UNARY_OPERATORS;
+const INHERIT_KEYS = {
+ optional: ["typeAnnotation", "typeParameters", "returnType"],
+ force: ["start", "loc", "end"]
+};
+exports.INHERIT_KEYS = INHERIT_KEYS;
+const BLOCK_SCOPED_SYMBOL = Symbol.for("var used to be block scoped");
+exports.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL;
+const NOT_LOCAL_BINDING = Symbol.for("should not be considered a local binding");
+exports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/Scope.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/Scope.js
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/Scope.js
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/ensureBlock.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/ensureBlock.js
new file mode 100644
index 00000000000..56fdf1fdb43
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/ensureBlock.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = ensureBlock;
+
+var _toBlock = require("./toBlock");
+
+function ensureBlock(node, key = "body") {
+ return node[key] = (0, _toBlock.default)(node[key], node);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js
new file mode 100644
index 00000000000..379e5ffe099
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js
@@ -0,0 +1,75 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = gatherSequenceExpressions;
+
+var _getBindingIdentifiers = require("../retrievers/getBindingIdentifiers");
+
+var _generated = require("../validators/generated");
+
+var _generated2 = require("../builders/generated");
+
+var _cloneNode = require("../clone/cloneNode");
+
+function gatherSequenceExpressions(nodes, scope, declars) {
+ const exprs = [];
+ let ensureLastUndefined = true;
+
+ for (const node of nodes) {
+ if (!(0, _generated.isEmptyStatement)(node)) {
+ ensureLastUndefined = false;
+ }
+
+ if ((0, _generated.isExpression)(node)) {
+ exprs.push(node);
+ } else if ((0, _generated.isExpressionStatement)(node)) {
+ exprs.push(node.expression);
+ } else if ((0, _generated.isVariableDeclaration)(node)) {
+ if (node.kind !== "var") return;
+
+ for (const declar of node.declarations) {
+ const bindings = (0, _getBindingIdentifiers.default)(declar);
+
+ for (const key of Object.keys(bindings)) {
+ declars.push({
+ kind: node.kind,
+ id: (0, _cloneNode.default)(bindings[key])
+ });
+ }
+
+ if (declar.init) {
+ exprs.push((0, _generated2.assignmentExpression)("=", declar.id, declar.init));
+ }
+ }
+
+ ensureLastUndefined = true;
+ } else if ((0, _generated.isIfStatement)(node)) {
+ const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], scope, declars) : scope.buildUndefinedNode();
+ const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], scope, declars) : scope.buildUndefinedNode();
+ if (!consequent || !alternate) return;
+ exprs.push((0, _generated2.conditionalExpression)(node.test, consequent, alternate));
+ } else if ((0, _generated.isBlockStatement)(node)) {
+ const body = gatherSequenceExpressions(node.body, scope, declars);
+ if (!body) return;
+ exprs.push(body);
+ } else if ((0, _generated.isEmptyStatement)(node)) {
+ if (nodes.indexOf(node) === 0) {
+ ensureLastUndefined = true;
+ }
+ } else {
+ return;
+ }
+ }
+
+ if (ensureLastUndefined) {
+ exprs.push(scope.buildUndefinedNode());
+ }
+
+ if (exprs.length === 1) {
+ return exprs[0];
+ } else {
+ return (0, _generated2.sequenceExpression)(exprs);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js
new file mode 100644
index 00000000000..6bbce6e5578
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = toBindingIdentifierName;
+
+var _toIdentifier = require("./toIdentifier");
+
+function toBindingIdentifierName(name) {
+ name = (0, _toIdentifier.default)(name);
+ if (name === "eval" || name === "arguments") name = "_" + name;
+ return name;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toBlock.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toBlock.js
new file mode 100644
index 00000000000..19886833fa3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toBlock.js
@@ -0,0 +1,34 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = toBlock;
+
+var _generated = require("../validators/generated");
+
+var _generated2 = require("../builders/generated");
+
+function toBlock(node, parent) {
+ if ((0, _generated.isBlockStatement)(node)) {
+ return node;
+ }
+
+ let blockNodes = [];
+
+ if ((0, _generated.isEmptyStatement)(node)) {
+ blockNodes = [];
+ } else {
+ if (!(0, _generated.isStatement)(node)) {
+ if ((0, _generated.isFunction)(parent)) {
+ node = (0, _generated2.returnStatement)(node);
+ } else {
+ node = (0, _generated2.expressionStatement)(node);
+ }
+ }
+
+ blockNodes = [node];
+ }
+
+ return (0, _generated2.blockStatement)(blockNodes);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toComputedKey.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toComputedKey.js
new file mode 100644
index 00000000000..31e6770f6f7
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toComputedKey.js
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = toComputedKey;
+
+var _generated = require("../validators/generated");
+
+var _generated2 = require("../builders/generated");
+
+function toComputedKey(node, key = node.key || node.property) {
+ if (!node.computed && (0, _generated.isIdentifier)(key)) key = (0, _generated2.stringLiteral)(key.name);
+ return key;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toExpression.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toExpression.js
new file mode 100644
index 00000000000..2d944f0e98d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toExpression.js
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _generated = require("../validators/generated");
+
+var _default = toExpression;
+exports.default = _default;
+
+function toExpression(node) {
+ if ((0, _generated.isExpressionStatement)(node)) {
+ node = node.expression;
+ }
+
+ if ((0, _generated.isExpression)(node)) {
+ return node;
+ }
+
+ if ((0, _generated.isClass)(node)) {
+ node.type = "ClassExpression";
+ } else if ((0, _generated.isFunction)(node)) {
+ node.type = "FunctionExpression";
+ }
+
+ if (!(0, _generated.isExpression)(node)) {
+ throw new Error(`cannot turn ${node.type} to an expression`);
+ }
+
+ return node;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toIdentifier.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toIdentifier.js
new file mode 100644
index 00000000000..2fd4028d2db
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toIdentifier.js
@@ -0,0 +1,30 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = toIdentifier;
+
+var _isValidIdentifier = require("../validators/isValidIdentifier");
+
+var _helperValidatorIdentifier = require("@babel/helper-validator-identifier");
+
+function toIdentifier(input) {
+ input = input + "";
+ let name = "";
+
+ for (const c of input) {
+ name += (0, _helperValidatorIdentifier.isIdentifierChar)(c.codePointAt(0)) ? c : "-";
+ }
+
+ name = name.replace(/^[-0-9]+/, "");
+ name = name.replace(/[-\s]+(.)?/g, function (match, c) {
+ return c ? c.toUpperCase() : "";
+ });
+
+ if (!(0, _isValidIdentifier.default)(name)) {
+ name = `_${name}`;
+ }
+
+ return name || "_";
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toKeyAlias.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toKeyAlias.js
new file mode 100644
index 00000000000..49ef4b8ad64
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toKeyAlias.js
@@ -0,0 +1,46 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = toKeyAlias;
+
+var _generated = require("../validators/generated");
+
+var _cloneNode = require("../clone/cloneNode");
+
+var _removePropertiesDeep = require("../modifications/removePropertiesDeep");
+
+function toKeyAlias(node, key = node.key) {
+ let alias;
+
+ if (node.kind === "method") {
+ return toKeyAlias.increment() + "";
+ } else if ((0, _generated.isIdentifier)(key)) {
+ alias = key.name;
+ } else if ((0, _generated.isStringLiteral)(key)) {
+ alias = JSON.stringify(key.value);
+ } else {
+ alias = JSON.stringify((0, _removePropertiesDeep.default)((0, _cloneNode.default)(key)));
+ }
+
+ if (node.computed) {
+ alias = `[${alias}]`;
+ }
+
+ if (node.static) {
+ alias = `static:${alias}`;
+ }
+
+ return alias;
+}
+
+toKeyAlias.uid = 0;
+
+toKeyAlias.increment = function () {
+ if (toKeyAlias.uid >= Number.MAX_SAFE_INTEGER) {
+ return toKeyAlias.uid = 0;
+ } else {
+ return toKeyAlias.uid++;
+ }
+}; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toSequenceExpression.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toSequenceExpression.js
new file mode 100644
index 00000000000..c3d3133ecf3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toSequenceExpression.js
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = toSequenceExpression;
+
+var _gatherSequenceExpressions = require("./gatherSequenceExpressions");
+
+function toSequenceExpression(nodes, scope) {
+ if (!(nodes != null && nodes.length)) return;
+ const declars = [];
+ const result = (0, _gatherSequenceExpressions.default)(nodes, scope, declars);
+ if (!result) return;
+
+ for (const declar of declars) {
+ scope.push(declar);
+ }
+
+ return result;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/toStatement.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toStatement.js
new file mode 100644
index 00000000000..da020a61a01
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/toStatement.js
@@ -0,0 +1,47 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _generated = require("../validators/generated");
+
+var _generated2 = require("../builders/generated");
+
+var _default = toStatement;
+exports.default = _default;
+
+function toStatement(node, ignore) {
+ if ((0, _generated.isStatement)(node)) {
+ return node;
+ }
+
+ let mustHaveId = false;
+ let newType;
+
+ if ((0, _generated.isClass)(node)) {
+ mustHaveId = true;
+ newType = "ClassDeclaration";
+ } else if ((0, _generated.isFunction)(node)) {
+ mustHaveId = true;
+ newType = "FunctionDeclaration";
+ } else if ((0, _generated.isAssignmentExpression)(node)) {
+ return (0, _generated2.expressionStatement)(node);
+ }
+
+ if (mustHaveId && !node.id) {
+ newType = false;
+ }
+
+ if (!newType) {
+ if (ignore) {
+ return false;
+ } else {
+ throw new Error(`cannot turn ${node.type} to a statement`);
+ }
+ }
+
+ node.type = newType;
+ return node;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/converters/valueToNode.js b/chromium/third_party/node/node_modules/@babel/types/lib/converters/valueToNode.js
new file mode 100644
index 00000000000..b3e531b3551
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/converters/valueToNode.js
@@ -0,0 +1,99 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _isValidIdentifier = require("../validators/isValidIdentifier");
+
+var _generated = require("../builders/generated");
+
+var _default = valueToNode;
+exports.default = _default;
+const objectToString = Function.call.bind(Object.prototype.toString);
+
+function isRegExp(value) {
+ return objectToString(value) === "[object RegExp]";
+}
+
+function isPlainObject(value) {
+ if (typeof value !== "object" || value === null || Object.prototype.toString.call(value) !== "[object Object]") {
+ return false;
+ }
+
+ const proto = Object.getPrototypeOf(value);
+ return proto === null || Object.getPrototypeOf(proto) === null;
+}
+
+function valueToNode(value) {
+ if (value === undefined) {
+ return (0, _generated.identifier)("undefined");
+ }
+
+ if (value === true || value === false) {
+ return (0, _generated.booleanLiteral)(value);
+ }
+
+ if (value === null) {
+ return (0, _generated.nullLiteral)();
+ }
+
+ if (typeof value === "string") {
+ return (0, _generated.stringLiteral)(value);
+ }
+
+ if (typeof value === "number") {
+ let result;
+
+ if (Number.isFinite(value)) {
+ result = (0, _generated.numericLiteral)(Math.abs(value));
+ } else {
+ let numerator;
+
+ if (Number.isNaN(value)) {
+ numerator = (0, _generated.numericLiteral)(0);
+ } else {
+ numerator = (0, _generated.numericLiteral)(1);
+ }
+
+ result = (0, _generated.binaryExpression)("/", numerator, (0, _generated.numericLiteral)(0));
+ }
+
+ if (value < 0 || Object.is(value, -0)) {
+ result = (0, _generated.unaryExpression)("-", result);
+ }
+
+ return result;
+ }
+
+ if (isRegExp(value)) {
+ const pattern = value.source;
+ const flags = value.toString().match(/\/([a-z]+|)$/)[1];
+ return (0, _generated.regExpLiteral)(pattern, flags);
+ }
+
+ if (Array.isArray(value)) {
+ return (0, _generated.arrayExpression)(value.map(valueToNode));
+ }
+
+ if (isPlainObject(value)) {
+ const props = [];
+
+ for (const key of Object.keys(value)) {
+ let nodeKey;
+
+ if ((0, _isValidIdentifier.default)(key)) {
+ nodeKey = (0, _generated.identifier)(key);
+ } else {
+ nodeKey = (0, _generated.stringLiteral)(key);
+ }
+
+ props.push((0, _generated.objectProperty)(nodeKey, valueToNode(value[key])));
+ }
+
+ return (0, _generated.objectExpression)(props);
+ }
+
+ throw new Error("don't know how to turn this value into a node");
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/core.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/core.js
new file mode 100644
index 00000000000..c90f6dfafa2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/core.js
@@ -0,0 +1,1590 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.classMethodOrDeclareMethodCommon = exports.classMethodOrPropertyCommon = exports.patternLikeCommon = exports.functionDeclarationCommon = exports.functionTypeAnnotationCommon = exports.functionCommon = void 0;
+
+var _is = require("../validators/is");
+
+var _isValidIdentifier = require("../validators/isValidIdentifier");
+
+var _helperValidatorIdentifier = require("@babel/helper-validator-identifier");
+
+var _constants = require("../constants");
+
+var _utils = require("./utils");
+
+(0, _utils.default)("ArrayExpression", {
+ fields: {
+ elements: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)("null", "Expression", "SpreadElement"))),
+ default: !process.env.BABEL_TYPES_8_BREAKING ? [] : undefined
+ }
+ },
+ visitor: ["elements"],
+ aliases: ["Expression"]
+});
+(0, _utils.default)("AssignmentExpression", {
+ fields: {
+ operator: {
+ validate: function () {
+ if (!process.env.BABEL_TYPES_8_BREAKING) {
+ return (0, _utils.assertValueType)("string");
+ }
+
+ const identifier = (0, _utils.assertOneOf)(..._constants.ASSIGNMENT_OPERATORS);
+ const pattern = (0, _utils.assertOneOf)("=");
+ return function (node, key, val) {
+ const validator = (0, _is.default)("Pattern", node.left) ? pattern : identifier;
+ validator(node, key, val);
+ };
+ }()
+ },
+ left: {
+ validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal") : (0, _utils.assertNodeType)("Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern")
+ },
+ right: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ },
+ builder: ["operator", "left", "right"],
+ visitor: ["left", "right"],
+ aliases: ["Expression"]
+});
+(0, _utils.default)("BinaryExpression", {
+ builder: ["operator", "left", "right"],
+ fields: {
+ operator: {
+ validate: (0, _utils.assertOneOf)(..._constants.BINARY_OPERATORS)
+ },
+ left: {
+ validate: function () {
+ const expression = (0, _utils.assertNodeType)("Expression");
+ const inOp = (0, _utils.assertNodeType)("Expression", "PrivateName");
+
+ const validator = function (node, key, val) {
+ const validator = node.operator === "in" ? inOp : expression;
+ validator(node, key, val);
+ };
+
+ validator.oneOfNodeTypes = ["Expression", "PrivateName"];
+ return validator;
+ }()
+ },
+ right: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ },
+ visitor: ["left", "right"],
+ aliases: ["Binary", "Expression"]
+});
+(0, _utils.default)("InterpreterDirective", {
+ builder: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ }
+});
+(0, _utils.default)("Directive", {
+ visitor: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertNodeType)("DirectiveLiteral")
+ }
+ }
+});
+(0, _utils.default)("DirectiveLiteral", {
+ builder: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ }
+});
+(0, _utils.default)("BlockStatement", {
+ builder: ["body", "directives"],
+ visitor: ["directives", "body"],
+ fields: {
+ directives: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Directive"))),
+ default: []
+ },
+ body: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
+ }
+ },
+ aliases: ["Scopable", "BlockParent", "Block", "Statement"]
+});
+(0, _utils.default)("BreakStatement", {
+ visitor: ["label"],
+ fields: {
+ label: {
+ validate: (0, _utils.assertNodeType)("Identifier"),
+ optional: true
+ }
+ },
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"]
+});
+(0, _utils.default)("CallExpression", {
+ visitor: ["callee", "arguments", "typeParameters", "typeArguments"],
+ builder: ["callee", "arguments"],
+ aliases: ["Expression"],
+ fields: Object.assign({
+ callee: {
+ validate: (0, _utils.assertNodeType)("Expression", "V8IntrinsicIdentifier")
+ },
+ arguments: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "JSXNamespacedName", "ArgumentPlaceholder")))
+ }
+ }, !process.env.BABEL_TYPES_8_BREAKING ? {
+ optional: {
+ validate: (0, _utils.assertOneOf)(true, false),
+ optional: true
+ }
+ } : {}, {
+ typeArguments: {
+ validate: (0, _utils.assertNodeType)("TypeParameterInstantiation"),
+ optional: true
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TSTypeParameterInstantiation"),
+ optional: true
+ }
+ })
+});
+(0, _utils.default)("CatchClause", {
+ visitor: ["param", "body"],
+ fields: {
+ param: {
+ validate: (0, _utils.assertNodeType)("Identifier", "ArrayPattern", "ObjectPattern"),
+ optional: true
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ }
+ },
+ aliases: ["Scopable", "BlockParent"]
+});
+(0, _utils.default)("ConditionalExpression", {
+ visitor: ["test", "consequent", "alternate"],
+ fields: {
+ test: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ consequent: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ alternate: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ },
+ aliases: ["Expression", "Conditional"]
+});
+(0, _utils.default)("ContinueStatement", {
+ visitor: ["label"],
+ fields: {
+ label: {
+ validate: (0, _utils.assertNodeType)("Identifier"),
+ optional: true
+ }
+ },
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"]
+});
+(0, _utils.default)("DebuggerStatement", {
+ aliases: ["Statement"]
+});
+(0, _utils.default)("DoWhileStatement", {
+ visitor: ["test", "body"],
+ fields: {
+ test: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ }
+ },
+ aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"]
+});
+(0, _utils.default)("EmptyStatement", {
+ aliases: ["Statement"]
+});
+(0, _utils.default)("ExpressionStatement", {
+ visitor: ["expression"],
+ fields: {
+ expression: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ },
+ aliases: ["Statement", "ExpressionWrapper"]
+});
+(0, _utils.default)("File", {
+ builder: ["program", "comments", "tokens"],
+ visitor: ["program"],
+ fields: {
+ program: {
+ validate: (0, _utils.assertNodeType)("Program")
+ },
+ comments: {
+ validate: !process.env.BABEL_TYPES_8_BREAKING ? Object.assign(() => {}, {
+ each: {
+ oneOfNodeTypes: ["CommentBlock", "CommentLine"]
+ }
+ }) : (0, _utils.assertEach)((0, _utils.assertNodeType)("CommentBlock", "CommentLine")),
+ optional: true
+ },
+ tokens: {
+ validate: (0, _utils.assertEach)(Object.assign(() => {}, {
+ type: "any"
+ })),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("ForInStatement", {
+ visitor: ["left", "right", "body"],
+ aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"],
+ fields: {
+ left: {
+ validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("VariableDeclaration", "LVal") : (0, _utils.assertNodeType)("VariableDeclaration", "Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern")
+ },
+ right: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ }
+ }
+});
+(0, _utils.default)("ForStatement", {
+ visitor: ["init", "test", "update", "body"],
+ aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop"],
+ fields: {
+ init: {
+ validate: (0, _utils.assertNodeType)("VariableDeclaration", "Expression"),
+ optional: true
+ },
+ test: {
+ validate: (0, _utils.assertNodeType)("Expression"),
+ optional: true
+ },
+ update: {
+ validate: (0, _utils.assertNodeType)("Expression"),
+ optional: true
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ }
+ }
+});
+const functionCommon = {
+ params: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Identifier", "Pattern", "RestElement")))
+ },
+ generator: {
+ default: false
+ },
+ async: {
+ default: false
+ }
+};
+exports.functionCommon = functionCommon;
+const functionTypeAnnotationCommon = {
+ returnType: {
+ validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"),
+ optional: true
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TypeParameterDeclaration", "TSTypeParameterDeclaration", "Noop"),
+ optional: true
+ }
+};
+exports.functionTypeAnnotationCommon = functionTypeAnnotationCommon;
+const functionDeclarationCommon = Object.assign({}, functionCommon, {
+ declare: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ id: {
+ validate: (0, _utils.assertNodeType)("Identifier"),
+ optional: true
+ }
+});
+exports.functionDeclarationCommon = functionDeclarationCommon;
+(0, _utils.default)("FunctionDeclaration", {
+ builder: ["id", "params", "body", "generator", "async"],
+ visitor: ["id", "params", "body", "returnType", "typeParameters"],
+ fields: Object.assign({}, functionDeclarationCommon, functionTypeAnnotationCommon, {
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ }
+ }),
+ aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Statement", "Pureish", "Declaration"],
+ validate: function () {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return () => {};
+ const identifier = (0, _utils.assertNodeType)("Identifier");
+ return function (parent, key, node) {
+ if (!(0, _is.default)("ExportDefaultDeclaration", parent)) {
+ identifier(node, "id", node.id);
+ }
+ };
+ }()
+});
+(0, _utils.default)("FunctionExpression", {
+ inherits: "FunctionDeclaration",
+ aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"],
+ fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {
+ id: {
+ validate: (0, _utils.assertNodeType)("Identifier"),
+ optional: true
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ }
+ })
+});
+const patternLikeCommon = {
+ typeAnnotation: {
+ validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"),
+ optional: true
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator")))
+ }
+};
+exports.patternLikeCommon = patternLikeCommon;
+(0, _utils.default)("Identifier", {
+ builder: ["name"],
+ visitor: ["typeAnnotation", "decorators"],
+ aliases: ["Expression", "PatternLike", "LVal", "TSEntityName"],
+ fields: Object.assign({}, patternLikeCommon, {
+ name: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), Object.assign(function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (!(0, _isValidIdentifier.default)(val, false)) {
+ throw new TypeError(`"${val}" is not a valid identifier name`);
+ }
+ }, {
+ type: "string"
+ }))
+ },
+ optional: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ }
+ }),
+
+ validate(parent, key, node) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+ const match = /\.(\w+)$/.exec(key);
+ if (!match) return;
+ const [, parentKey] = match;
+ const nonComp = {
+ computed: false
+ };
+
+ if (parentKey === "property") {
+ if ((0, _is.default)("MemberExpression", parent, nonComp)) return;
+ if ((0, _is.default)("OptionalMemberExpression", parent, nonComp)) return;
+ } else if (parentKey === "key") {
+ if ((0, _is.default)("Property", parent, nonComp)) return;
+ if ((0, _is.default)("Method", parent, nonComp)) return;
+ } else if (parentKey === "exported") {
+ if ((0, _is.default)("ExportSpecifier", parent)) return;
+ } else if (parentKey === "imported") {
+ if ((0, _is.default)("ImportSpecifier", parent, {
+ imported: node
+ })) return;
+ } else if (parentKey === "meta") {
+ if ((0, _is.default)("MetaProperty", parent, {
+ meta: node
+ })) return;
+ }
+
+ if (((0, _helperValidatorIdentifier.isKeyword)(node.name) || (0, _helperValidatorIdentifier.isReservedWord)(node.name, false)) && node.name !== "this") {
+ throw new TypeError(`"${node.name}" is not a valid identifier`);
+ }
+ }
+
+});
+(0, _utils.default)("IfStatement", {
+ visitor: ["test", "consequent", "alternate"],
+ aliases: ["Statement", "Conditional"],
+ fields: {
+ test: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ consequent: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ },
+ alternate: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("Statement")
+ }
+ }
+});
+(0, _utils.default)("LabeledStatement", {
+ visitor: ["label", "body"],
+ aliases: ["Statement"],
+ fields: {
+ label: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ }
+ }
+});
+(0, _utils.default)("StringLiteral", {
+ builder: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ },
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
+});
+(0, _utils.default)("NumericLiteral", {
+ builder: ["value"],
+ deprecatedAlias: "NumberLiteral",
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("number")
+ }
+ },
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
+});
+(0, _utils.default)("NullLiteral", {
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
+});
+(0, _utils.default)("BooleanLiteral", {
+ builder: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("boolean")
+ }
+ },
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
+});
+(0, _utils.default)("RegExpLiteral", {
+ builder: ["pattern", "flags"],
+ deprecatedAlias: "RegexLiteral",
+ aliases: ["Expression", "Pureish", "Literal"],
+ fields: {
+ pattern: {
+ validate: (0, _utils.assertValueType)("string")
+ },
+ flags: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), Object.assign(function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+ const invalid = /[^gimsuy]/.exec(val);
+
+ if (invalid) {
+ throw new TypeError(`"${invalid[0]}" is not a valid RegExp flag`);
+ }
+ }, {
+ type: "string"
+ })),
+ default: ""
+ }
+ }
+});
+(0, _utils.default)("LogicalExpression", {
+ builder: ["operator", "left", "right"],
+ visitor: ["left", "right"],
+ aliases: ["Binary", "Expression"],
+ fields: {
+ operator: {
+ validate: (0, _utils.assertOneOf)(..._constants.LOGICAL_OPERATORS)
+ },
+ left: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ right: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("MemberExpression", {
+ builder: ["object", "property", "computed", ...(!process.env.BABEL_TYPES_8_BREAKING ? ["optional"] : [])],
+ visitor: ["object", "property"],
+ aliases: ["Expression", "LVal"],
+ fields: Object.assign({
+ object: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ property: {
+ validate: function () {
+ const normal = (0, _utils.assertNodeType)("Identifier", "PrivateName");
+ const computed = (0, _utils.assertNodeType)("Expression");
+
+ const validator = function (node, key, val) {
+ const validator = node.computed ? computed : normal;
+ validator(node, key, val);
+ };
+
+ validator.oneOfNodeTypes = ["Expression", "Identifier", "PrivateName"];
+ return validator;
+ }()
+ },
+ computed: {
+ default: false
+ }
+ }, !process.env.BABEL_TYPES_8_BREAKING ? {
+ optional: {
+ validate: (0, _utils.assertOneOf)(true, false),
+ optional: true
+ }
+ } : {})
+});
+(0, _utils.default)("NewExpression", {
+ inherits: "CallExpression"
+});
+(0, _utils.default)("Program", {
+ visitor: ["directives", "body"],
+ builder: ["body", "directives", "sourceType", "interpreter"],
+ fields: {
+ sourceFile: {
+ validate: (0, _utils.assertValueType)("string")
+ },
+ sourceType: {
+ validate: (0, _utils.assertOneOf)("script", "module"),
+ default: "script"
+ },
+ interpreter: {
+ validate: (0, _utils.assertNodeType)("InterpreterDirective"),
+ default: null,
+ optional: true
+ },
+ directives: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Directive"))),
+ default: []
+ },
+ body: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
+ }
+ },
+ aliases: ["Scopable", "BlockParent", "Block"]
+});
+(0, _utils.default)("ObjectExpression", {
+ visitor: ["properties"],
+ aliases: ["Expression"],
+ fields: {
+ properties: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ObjectMethod", "ObjectProperty", "SpreadElement")))
+ }
+ }
+});
+(0, _utils.default)("ObjectMethod", {
+ builder: ["kind", "key", "params", "body", "computed", "generator", "async"],
+ fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {
+ kind: Object.assign({
+ validate: (0, _utils.assertOneOf)("method", "get", "set")
+ }, !process.env.BABEL_TYPES_8_BREAKING ? {
+ default: "method"
+ } : {}),
+ computed: {
+ default: false
+ },
+ key: {
+ validate: function () {
+ const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral");
+ const computed = (0, _utils.assertNodeType)("Expression");
+
+ const validator = function (node, key, val) {
+ const validator = node.computed ? computed : normal;
+ validator(node, key, val);
+ };
+
+ validator.oneOfNodeTypes = ["Expression", "Identifier", "StringLiteral", "NumericLiteral"];
+ return validator;
+ }()
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ }
+ }),
+ visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"],
+ aliases: ["UserWhitespacable", "Function", "Scopable", "BlockParent", "FunctionParent", "Method", "ObjectMember"]
+});
+(0, _utils.default)("ObjectProperty", {
+ builder: ["key", "value", "computed", "shorthand", ...(!process.env.BABEL_TYPES_8_BREAKING ? ["decorators"] : [])],
+ fields: {
+ computed: {
+ default: false
+ },
+ key: {
+ validate: function () {
+ const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral");
+ const computed = (0, _utils.assertNodeType)("Expression");
+
+ const validator = function (node, key, val) {
+ const validator = node.computed ? computed : normal;
+ validator(node, key, val);
+ };
+
+ validator.oneOfNodeTypes = ["Expression", "Identifier", "StringLiteral", "NumericLiteral"];
+ return validator;
+ }()
+ },
+ value: {
+ validate: (0, _utils.assertNodeType)("Expression", "PatternLike")
+ },
+ shorthand: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("boolean"), Object.assign(function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (val && node.computed) {
+ throw new TypeError("Property shorthand of ObjectProperty cannot be true if computed is true");
+ }
+ }, {
+ type: "boolean"
+ }), function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (val && !(0, _is.default)("Identifier", node.key)) {
+ throw new TypeError("Property shorthand of ObjectProperty cannot be true if key is not an Identifier");
+ }
+ }),
+ default: false
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ }
+ },
+ visitor: ["key", "value", "decorators"],
+ aliases: ["UserWhitespacable", "Property", "ObjectMember"],
+ validate: function () {
+ const pattern = (0, _utils.assertNodeType)("Identifier", "Pattern");
+ const expression = (0, _utils.assertNodeType)("Expression");
+ return function (parent, key, node) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+ const validator = (0, _is.default)("ObjectPattern", parent) ? pattern : expression;
+ validator(node, "value", node.value);
+ };
+ }()
+});
+(0, _utils.default)("RestElement", {
+ visitor: ["argument", "typeAnnotation"],
+ builder: ["argument"],
+ aliases: ["LVal", "PatternLike"],
+ deprecatedAlias: "RestProperty",
+ fields: Object.assign({}, patternLikeCommon, {
+ argument: {
+ validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal") : (0, _utils.assertNodeType)("Identifier", "ArrayPattern", "ObjectPattern", "MemberExpression")
+ },
+ optional: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ }
+ }),
+
+ validate(parent, key) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+ const match = /(\w+)\[(\d+)\]/.exec(key);
+ if (!match) throw new Error("Internal Babel error: malformed key.");
+ const [, listKey, index] = match;
+
+ if (parent[listKey].length > index + 1) {
+ throw new TypeError(`RestElement must be last element of ${listKey}`);
+ }
+ }
+
+});
+(0, _utils.default)("ReturnStatement", {
+ visitor: ["argument"],
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"],
+ fields: {
+ argument: {
+ validate: (0, _utils.assertNodeType)("Expression"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("SequenceExpression", {
+ visitor: ["expressions"],
+ fields: {
+ expressions: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression")))
+ }
+ },
+ aliases: ["Expression"]
+});
+(0, _utils.default)("ParenthesizedExpression", {
+ visitor: ["expression"],
+ aliases: ["Expression", "ExpressionWrapper"],
+ fields: {
+ expression: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("SwitchCase", {
+ visitor: ["test", "consequent"],
+ fields: {
+ test: {
+ validate: (0, _utils.assertNodeType)("Expression"),
+ optional: true
+ },
+ consequent: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
+ }
+ }
+});
+(0, _utils.default)("SwitchStatement", {
+ visitor: ["discriminant", "cases"],
+ aliases: ["Statement", "BlockParent", "Scopable"],
+ fields: {
+ discriminant: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ cases: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("SwitchCase")))
+ }
+ }
+});
+(0, _utils.default)("ThisExpression", {
+ aliases: ["Expression"]
+});
+(0, _utils.default)("ThrowStatement", {
+ visitor: ["argument"],
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"],
+ fields: {
+ argument: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("TryStatement", {
+ visitor: ["block", "handler", "finalizer"],
+ aliases: ["Statement"],
+ fields: {
+ block: {
+ validate: (0, _utils.chain)((0, _utils.assertNodeType)("BlockStatement"), Object.assign(function (node) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (!node.handler && !node.finalizer) {
+ throw new TypeError("TryStatement expects either a handler or finalizer, or both");
+ }
+ }, {
+ oneOfNodeTypes: ["BlockStatement"]
+ }))
+ },
+ handler: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("CatchClause")
+ },
+ finalizer: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ }
+ }
+});
+(0, _utils.default)("UnaryExpression", {
+ builder: ["operator", "argument", "prefix"],
+ fields: {
+ prefix: {
+ default: true
+ },
+ argument: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ operator: {
+ validate: (0, _utils.assertOneOf)(..._constants.UNARY_OPERATORS)
+ }
+ },
+ visitor: ["argument"],
+ aliases: ["UnaryLike", "Expression"]
+});
+(0, _utils.default)("UpdateExpression", {
+ builder: ["operator", "argument", "prefix"],
+ fields: {
+ prefix: {
+ default: false
+ },
+ argument: {
+ validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("Expression") : (0, _utils.assertNodeType)("Identifier", "MemberExpression")
+ },
+ operator: {
+ validate: (0, _utils.assertOneOf)(..._constants.UPDATE_OPERATORS)
+ }
+ },
+ visitor: ["argument"],
+ aliases: ["Expression"]
+});
+(0, _utils.default)("VariableDeclaration", {
+ builder: ["kind", "declarations"],
+ visitor: ["declarations"],
+ aliases: ["Statement", "Declaration"],
+ fields: {
+ declare: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ kind: {
+ validate: (0, _utils.assertOneOf)("var", "let", "const")
+ },
+ declarations: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("VariableDeclarator")))
+ }
+ },
+
+ validate(parent, key, node) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+ if (!(0, _is.default)("ForXStatement", parent, {
+ left: node
+ })) return;
+
+ if (node.declarations.length !== 1) {
+ throw new TypeError(`Exactly one VariableDeclarator is required in the VariableDeclaration of a ${parent.type}`);
+ }
+ }
+
+});
+(0, _utils.default)("VariableDeclarator", {
+ visitor: ["id", "init"],
+ fields: {
+ id: {
+ validate: function () {
+ if (!process.env.BABEL_TYPES_8_BREAKING) {
+ return (0, _utils.assertNodeType)("LVal");
+ }
+
+ const normal = (0, _utils.assertNodeType)("Identifier", "ArrayPattern", "ObjectPattern");
+ const without = (0, _utils.assertNodeType)("Identifier");
+ return function (node, key, val) {
+ const validator = node.init ? normal : without;
+ validator(node, key, val);
+ };
+ }()
+ },
+ definite: {
+ optional: true,
+ validate: (0, _utils.assertValueType)("boolean")
+ },
+ init: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("WhileStatement", {
+ visitor: ["test", "body"],
+ aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"],
+ fields: {
+ test: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ }
+ }
+});
+(0, _utils.default)("WithStatement", {
+ visitor: ["object", "body"],
+ aliases: ["Statement"],
+ fields: {
+ object: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ }
+ }
+});
+(0, _utils.default)("AssignmentPattern", {
+ visitor: ["left", "right", "decorators"],
+ builder: ["left", "right"],
+ aliases: ["Pattern", "PatternLike", "LVal"],
+ fields: Object.assign({}, patternLikeCommon, {
+ left: {
+ validate: (0, _utils.assertNodeType)("Identifier", "ObjectPattern", "ArrayPattern", "MemberExpression")
+ },
+ right: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ }
+ })
+});
+(0, _utils.default)("ArrayPattern", {
+ visitor: ["elements", "typeAnnotation"],
+ builder: ["elements"],
+ aliases: ["Pattern", "PatternLike", "LVal"],
+ fields: Object.assign({}, patternLikeCommon, {
+ elements: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)("null", "PatternLike")))
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ },
+ optional: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ }
+ })
+});
+(0, _utils.default)("ArrowFunctionExpression", {
+ builder: ["params", "body", "async"],
+ visitor: ["params", "body", "returnType", "typeParameters"],
+ aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"],
+ fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {
+ expression: {
+ validate: (0, _utils.assertValueType)("boolean")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement", "Expression")
+ }
+ })
+});
+(0, _utils.default)("ClassBody", {
+ visitor: ["body"],
+ fields: {
+ body: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ClassMethod", "ClassPrivateMethod", "ClassProperty", "ClassPrivateProperty", "TSDeclareMethod", "TSIndexSignature")))
+ }
+ }
+});
+(0, _utils.default)("ClassExpression", {
+ builder: ["id", "superClass", "body", "decorators"],
+ visitor: ["id", "body", "superClass", "mixins", "typeParameters", "superTypeParameters", "implements", "decorators"],
+ aliases: ["Scopable", "Class", "Expression"],
+ fields: {
+ id: {
+ validate: (0, _utils.assertNodeType)("Identifier"),
+ optional: true
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TypeParameterDeclaration", "TSTypeParameterDeclaration", "Noop"),
+ optional: true
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("ClassBody")
+ },
+ superClass: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ superTypeParameters: {
+ validate: (0, _utils.assertNodeType)("TypeParameterInstantiation", "TSTypeParameterInstantiation"),
+ optional: true
+ },
+ implements: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSExpressionWithTypeArguments", "ClassImplements"))),
+ optional: true
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ },
+ mixins: {
+ validate: (0, _utils.assertNodeType)("InterfaceExtends"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("ClassDeclaration", {
+ inherits: "ClassExpression",
+ aliases: ["Scopable", "Class", "Statement", "Declaration"],
+ fields: {
+ id: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TypeParameterDeclaration", "TSTypeParameterDeclaration", "Noop"),
+ optional: true
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("ClassBody")
+ },
+ superClass: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ superTypeParameters: {
+ validate: (0, _utils.assertNodeType)("TypeParameterInstantiation", "TSTypeParameterInstantiation"),
+ optional: true
+ },
+ implements: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSExpressionWithTypeArguments", "ClassImplements"))),
+ optional: true
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ },
+ mixins: {
+ validate: (0, _utils.assertNodeType)("InterfaceExtends"),
+ optional: true
+ },
+ declare: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ abstract: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ }
+ },
+ validate: function () {
+ const identifier = (0, _utils.assertNodeType)("Identifier");
+ return function (parent, key, node) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (!(0, _is.default)("ExportDefaultDeclaration", parent)) {
+ identifier(node, "id", node.id);
+ }
+ };
+ }()
+});
+(0, _utils.default)("ExportAllDeclaration", {
+ visitor: ["source"],
+ aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"],
+ fields: {
+ source: {
+ validate: (0, _utils.assertNodeType)("StringLiteral")
+ },
+ exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type", "value")),
+ assertions: {
+ optional: true,
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
+ }
+ }
+});
+(0, _utils.default)("ExportDefaultDeclaration", {
+ visitor: ["declaration"],
+ aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"],
+ fields: {
+ declaration: {
+ validate: (0, _utils.assertNodeType)("FunctionDeclaration", "TSDeclareFunction", "ClassDeclaration", "Expression")
+ },
+ exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("value"))
+ }
+});
+(0, _utils.default)("ExportNamedDeclaration", {
+ visitor: ["declaration", "specifiers", "source"],
+ aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"],
+ fields: {
+ declaration: {
+ optional: true,
+ validate: (0, _utils.chain)((0, _utils.assertNodeType)("Declaration"), Object.assign(function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (val && node.specifiers.length) {
+ throw new TypeError("Only declaration or specifiers is allowed on ExportNamedDeclaration");
+ }
+ }, {
+ oneOfNodeTypes: ["Declaration"]
+ }), function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (val && node.source) {
+ throw new TypeError("Cannot export a declaration from a source");
+ }
+ })
+ },
+ assertions: {
+ optional: true,
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
+ },
+ specifiers: {
+ default: [],
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)(function () {
+ const sourced = (0, _utils.assertNodeType)("ExportSpecifier", "ExportDefaultSpecifier", "ExportNamespaceSpecifier");
+ const sourceless = (0, _utils.assertNodeType)("ExportSpecifier");
+ if (!process.env.BABEL_TYPES_8_BREAKING) return sourced;
+ return function (node, key, val) {
+ const validator = node.source ? sourced : sourceless;
+ validator(node, key, val);
+ };
+ }()))
+ },
+ source: {
+ validate: (0, _utils.assertNodeType)("StringLiteral"),
+ optional: true
+ },
+ exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type", "value"))
+ }
+});
+(0, _utils.default)("ExportSpecifier", {
+ visitor: ["local", "exported"],
+ aliases: ["ModuleSpecifier"],
+ fields: {
+ local: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ },
+ exported: {
+ validate: (0, _utils.assertNodeType)("Identifier", "StringLiteral")
+ }
+ }
+});
+(0, _utils.default)("ForOfStatement", {
+ visitor: ["left", "right", "body"],
+ builder: ["left", "right", "body", "await"],
+ aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"],
+ fields: {
+ left: {
+ validate: function () {
+ if (!process.env.BABEL_TYPES_8_BREAKING) {
+ return (0, _utils.assertNodeType)("VariableDeclaration", "LVal");
+ }
+
+ const declaration = (0, _utils.assertNodeType)("VariableDeclaration");
+ const lval = (0, _utils.assertNodeType)("Identifier", "MemberExpression", "ArrayPattern", "ObjectPattern");
+ return function (node, key, val) {
+ if ((0, _is.default)("VariableDeclaration", val)) {
+ declaration(node, key, val);
+ } else {
+ lval(node, key, val);
+ }
+ };
+ }()
+ },
+ right: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("Statement")
+ },
+ await: {
+ default: false
+ }
+ }
+});
+(0, _utils.default)("ImportDeclaration", {
+ visitor: ["specifiers", "source"],
+ aliases: ["Statement", "Declaration", "ModuleDeclaration"],
+ fields: {
+ assertions: {
+ optional: true,
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
+ },
+ specifiers: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportSpecifier", "ImportDefaultSpecifier", "ImportNamespaceSpecifier")))
+ },
+ source: {
+ validate: (0, _utils.assertNodeType)("StringLiteral")
+ },
+ importKind: {
+ validate: (0, _utils.assertOneOf)("type", "typeof", "value"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("ImportDefaultSpecifier", {
+ visitor: ["local"],
+ aliases: ["ModuleSpecifier"],
+ fields: {
+ local: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ }
+ }
+});
+(0, _utils.default)("ImportNamespaceSpecifier", {
+ visitor: ["local"],
+ aliases: ["ModuleSpecifier"],
+ fields: {
+ local: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ }
+ }
+});
+(0, _utils.default)("ImportSpecifier", {
+ visitor: ["local", "imported"],
+ aliases: ["ModuleSpecifier"],
+ fields: {
+ local: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ },
+ imported: {
+ validate: (0, _utils.assertNodeType)("Identifier", "StringLiteral")
+ },
+ importKind: {
+ validate: (0, _utils.assertOneOf)("type", "typeof"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("MetaProperty", {
+ visitor: ["meta", "property"],
+ aliases: ["Expression"],
+ fields: {
+ meta: {
+ validate: (0, _utils.chain)((0, _utils.assertNodeType)("Identifier"), Object.assign(function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+ let property;
+
+ switch (val.name) {
+ case "function":
+ property = "sent";
+ break;
+
+ case "new":
+ property = "target";
+ break;
+
+ case "import":
+ property = "meta";
+ break;
+ }
+
+ if (!(0, _is.default)("Identifier", node.property, {
+ name: property
+ })) {
+ throw new TypeError("Unrecognised MetaProperty");
+ }
+ }, {
+ oneOfNodeTypes: ["Identifier"]
+ }))
+ },
+ property: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ }
+ }
+});
+const classMethodOrPropertyCommon = {
+ abstract: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ accessibility: {
+ validate: (0, _utils.assertOneOf)("public", "private", "protected"),
+ optional: true
+ },
+ static: {
+ default: false
+ },
+ override: {
+ default: false
+ },
+ computed: {
+ default: false
+ },
+ optional: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ key: {
+ validate: (0, _utils.chain)(function () {
+ const normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral");
+ const computed = (0, _utils.assertNodeType)("Expression");
+ return function (node, key, val) {
+ const validator = node.computed ? computed : normal;
+ validator(node, key, val);
+ };
+ }(), (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral", "Expression"))
+ }
+};
+exports.classMethodOrPropertyCommon = classMethodOrPropertyCommon;
+const classMethodOrDeclareMethodCommon = Object.assign({}, functionCommon, classMethodOrPropertyCommon, {
+ params: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Identifier", "Pattern", "RestElement", "TSParameterProperty")))
+ },
+ kind: {
+ validate: (0, _utils.assertOneOf)("get", "set", "method", "constructor"),
+ default: "method"
+ },
+ access: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)("public", "private", "protected")),
+ optional: true
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ }
+});
+exports.classMethodOrDeclareMethodCommon = classMethodOrDeclareMethodCommon;
+(0, _utils.default)("ClassMethod", {
+ aliases: ["Function", "Scopable", "BlockParent", "FunctionParent", "Method"],
+ builder: ["kind", "key", "params", "body", "computed", "static", "generator", "async"],
+ visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"],
+ fields: Object.assign({}, classMethodOrDeclareMethodCommon, functionTypeAnnotationCommon, {
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ }
+ })
+});
+(0, _utils.default)("ObjectPattern", {
+ visitor: ["properties", "typeAnnotation", "decorators"],
+ builder: ["properties"],
+ aliases: ["Pattern", "PatternLike", "LVal"],
+ fields: Object.assign({}, patternLikeCommon, {
+ properties: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("RestElement", "ObjectProperty")))
+ }
+ })
+});
+(0, _utils.default)("SpreadElement", {
+ visitor: ["argument"],
+ aliases: ["UnaryLike"],
+ deprecatedAlias: "SpreadProperty",
+ fields: {
+ argument: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("Super", {
+ aliases: ["Expression"]
+});
+(0, _utils.default)("TaggedTemplateExpression", {
+ visitor: ["tag", "quasi", "typeParameters"],
+ builder: ["tag", "quasi"],
+ aliases: ["Expression"],
+ fields: {
+ tag: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ quasi: {
+ validate: (0, _utils.assertNodeType)("TemplateLiteral")
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TypeParameterInstantiation", "TSTypeParameterInstantiation"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("TemplateElement", {
+ builder: ["value", "tail"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertShape)({
+ raw: {
+ validate: (0, _utils.assertValueType)("string")
+ },
+ cooked: {
+ validate: (0, _utils.assertValueType)("string"),
+ optional: true
+ }
+ })
+ },
+ tail: {
+ default: false
+ }
+ }
+});
+(0, _utils.default)("TemplateLiteral", {
+ visitor: ["quasis", "expressions"],
+ aliases: ["Expression", "Literal"],
+ fields: {
+ quasis: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TemplateElement")))
+ },
+ expressions: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "TSType")), function (node, key, val) {
+ if (node.quasis.length !== val.length + 1) {
+ throw new TypeError(`Number of ${node.type} quasis should be exactly one more than the number of expressions.\nExpected ${val.length + 1} quasis but got ${node.quasis.length}`);
+ }
+ })
+ }
+ }
+});
+(0, _utils.default)("YieldExpression", {
+ builder: ["argument", "delegate"],
+ visitor: ["argument"],
+ aliases: ["Expression", "Terminatorless"],
+ fields: {
+ delegate: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("boolean"), Object.assign(function (node, key, val) {
+ if (!process.env.BABEL_TYPES_8_BREAKING) return;
+
+ if (val && !node.argument) {
+ throw new TypeError("Property delegate of YieldExpression cannot be true if there is no argument");
+ }
+ }, {
+ type: "boolean"
+ })),
+ default: false
+ },
+ argument: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("AwaitExpression", {
+ builder: ["argument"],
+ visitor: ["argument"],
+ aliases: ["Expression", "Terminatorless"],
+ fields: {
+ argument: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("Import", {
+ aliases: ["Expression"]
+});
+(0, _utils.default)("BigIntLiteral", {
+ builder: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ },
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
+});
+(0, _utils.default)("ExportNamespaceSpecifier", {
+ visitor: ["exported"],
+ aliases: ["ModuleSpecifier"],
+ fields: {
+ exported: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ }
+ }
+});
+(0, _utils.default)("OptionalMemberExpression", {
+ builder: ["object", "property", "computed", "optional"],
+ visitor: ["object", "property"],
+ aliases: ["Expression"],
+ fields: {
+ object: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ property: {
+ validate: function () {
+ const normal = (0, _utils.assertNodeType)("Identifier");
+ const computed = (0, _utils.assertNodeType)("Expression");
+
+ const validator = function (node, key, val) {
+ const validator = node.computed ? computed : normal;
+ validator(node, key, val);
+ };
+
+ validator.oneOfNodeTypes = ["Expression", "Identifier"];
+ return validator;
+ }()
+ },
+ computed: {
+ default: false
+ },
+ optional: {
+ validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)("boolean") : (0, _utils.chain)((0, _utils.assertValueType)("boolean"), (0, _utils.assertOptionalChainStart)())
+ }
+ }
+});
+(0, _utils.default)("OptionalCallExpression", {
+ visitor: ["callee", "arguments", "typeParameters", "typeArguments"],
+ builder: ["callee", "arguments", "optional"],
+ aliases: ["Expression"],
+ fields: {
+ callee: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ arguments: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "JSXNamespacedName", "ArgumentPlaceholder")))
+ },
+ optional: {
+ validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)("boolean") : (0, _utils.chain)((0, _utils.assertValueType)("boolean"), (0, _utils.assertOptionalChainStart)())
+ },
+ typeArguments: {
+ validate: (0, _utils.assertNodeType)("TypeParameterInstantiation"),
+ optional: true
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TSTypeParameterInstantiation"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("ClassProperty", {
+ visitor: ["key", "value", "typeAnnotation", "decorators"],
+ builder: ["key", "value", "typeAnnotation", "decorators", "computed", "static"],
+ aliases: ["Property"],
+ fields: Object.assign({}, classMethodOrPropertyCommon, {
+ value: {
+ validate: (0, _utils.assertNodeType)("Expression"),
+ optional: true
+ },
+ definite: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ typeAnnotation: {
+ validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"),
+ optional: true
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ },
+ readonly: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ declare: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ variance: {
+ validate: (0, _utils.assertNodeType)("Variance"),
+ optional: true
+ }
+ })
+});
+(0, _utils.default)("ClassPrivateProperty", {
+ visitor: ["key", "value", "decorators", "typeAnnotation"],
+ builder: ["key", "value", "decorators", "static"],
+ aliases: ["Property", "Private"],
+ fields: {
+ key: {
+ validate: (0, _utils.assertNodeType)("PrivateName")
+ },
+ value: {
+ validate: (0, _utils.assertNodeType)("Expression"),
+ optional: true
+ },
+ typeAnnotation: {
+ validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"),
+ optional: true
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ },
+ readonly: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ definite: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ variance: {
+ validate: (0, _utils.assertNodeType)("Variance"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("ClassPrivateMethod", {
+ builder: ["kind", "key", "params", "body", "static"],
+ visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"],
+ aliases: ["Function", "Scopable", "BlockParent", "FunctionParent", "Method", "Private"],
+ fields: Object.assign({}, classMethodOrDeclareMethodCommon, functionTypeAnnotationCommon, {
+ key: {
+ validate: (0, _utils.assertNodeType)("PrivateName")
+ },
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ }
+ })
+});
+(0, _utils.default)("PrivateName", {
+ visitor: ["id"],
+ aliases: ["Private"],
+ fields: {
+ id: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ }
+ }
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/experimental.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/experimental.js
new file mode 100644
index 00000000000..6a8e14ea7e0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/experimental.js
@@ -0,0 +1,142 @@
+"use strict";
+
+var _utils = require("./utils");
+
+(0, _utils.default)("ArgumentPlaceholder", {});
+(0, _utils.default)("BindExpression", {
+ visitor: ["object", "callee"],
+ aliases: ["Expression"],
+ fields: !process.env.BABEL_TYPES_8_BREAKING ? {
+ object: {
+ validate: Object.assign(() => {}, {
+ oneOfNodeTypes: ["Expression"]
+ })
+ },
+ callee: {
+ validate: Object.assign(() => {}, {
+ oneOfNodeTypes: ["Expression"]
+ })
+ }
+ } : {
+ object: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ },
+ callee: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("ImportAttribute", {
+ visitor: ["key", "value"],
+ fields: {
+ key: {
+ validate: (0, _utils.assertNodeType)("Identifier", "StringLiteral")
+ },
+ value: {
+ validate: (0, _utils.assertNodeType)("StringLiteral")
+ }
+ }
+});
+(0, _utils.default)("Decorator", {
+ visitor: ["expression"],
+ fields: {
+ expression: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("DoExpression", {
+ visitor: ["body"],
+ builder: ["body", "async"],
+ aliases: ["Expression"],
+ fields: {
+ body: {
+ validate: (0, _utils.assertNodeType)("BlockStatement")
+ },
+ async: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ default: false
+ }
+ }
+});
+(0, _utils.default)("ExportDefaultSpecifier", {
+ visitor: ["exported"],
+ aliases: ["ModuleSpecifier"],
+ fields: {
+ exported: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ }
+ }
+});
+(0, _utils.default)("RecordExpression", {
+ visitor: ["properties"],
+ aliases: ["Expression"],
+ fields: {
+ properties: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ObjectProperty", "SpreadElement")))
+ }
+ }
+});
+(0, _utils.default)("TupleExpression", {
+ fields: {
+ elements: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement"))),
+ default: []
+ }
+ },
+ visitor: ["elements"],
+ aliases: ["Expression"]
+});
+(0, _utils.default)("DecimalLiteral", {
+ builder: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ },
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
+});
+(0, _utils.default)("StaticBlock", {
+ visitor: ["body"],
+ fields: {
+ body: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
+ }
+ },
+ aliases: ["Scopable", "BlockParent"]
+});
+(0, _utils.default)("ModuleExpression", {
+ visitor: ["body"],
+ fields: {
+ body: {
+ validate: (0, _utils.assertNodeType)("Program")
+ }
+ },
+ aliases: ["Expression"]
+});
+(0, _utils.default)("TopicReference", {
+ aliases: ["Expression"]
+});
+(0, _utils.default)("PipelineTopicExpression", {
+ builder: ["expression"],
+ visitor: ["expression"],
+ fields: {
+ expression: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ },
+ aliases: ["Expression"]
+});
+(0, _utils.default)("PipelineBareFunction", {
+ builder: ["callee"],
+ visitor: ["callee"],
+ fields: {
+ callee: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ },
+ aliases: ["Expression"]
+});
+(0, _utils.default)("PipelinePrimaryTopicReference", {
+ aliases: ["Expression"]
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/flow.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/flow.js
new file mode 100644
index 00000000000..e658a91d548
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/flow.js
@@ -0,0 +1,481 @@
+"use strict";
+
+var _utils = require("./utils");
+
+const defineInterfaceishType = (name, typeParameterType = "TypeParameterDeclaration") => {
+ (0, _utils.default)(name, {
+ builder: ["id", "typeParameters", "extends", "body"],
+ visitor: ["id", "typeParameters", "extends", "mixins", "implements", "body"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)(typeParameterType),
+ extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
+ mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
+ implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ClassImplements")),
+ body: (0, _utils.validateType)("ObjectTypeAnnotation")
+ }
+ });
+};
+
+(0, _utils.default)("AnyTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("ArrayTypeAnnotation", {
+ visitor: ["elementType"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ elementType: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("BooleanTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("BooleanLiteralTypeAnnotation", {
+ builder: ["value"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ value: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("NullLiteralTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("ClassImplements", {
+ visitor: ["id", "typeParameters"],
+ aliases: ["Flow"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
+ }
+});
+defineInterfaceishType("DeclareClass");
+(0, _utils.default)("DeclareFunction", {
+ visitor: ["id"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ predicate: (0, _utils.validateOptionalType)("DeclaredPredicate")
+ }
+});
+defineInterfaceishType("DeclareInterface");
+(0, _utils.default)("DeclareModule", {
+ builder: ["id", "body", "kind"],
+ visitor: ["id", "body"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
+ body: (0, _utils.validateType)("BlockStatement"),
+ kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("CommonJS", "ES"))
+ }
+});
+(0, _utils.default)("DeclareModuleExports", {
+ visitor: ["typeAnnotation"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
+ }
+});
+(0, _utils.default)("DeclareTypeAlias", {
+ visitor: ["id", "typeParameters", "right"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
+ right: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("DeclareOpaqueType", {
+ visitor: ["id", "typeParameters", "supertype"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
+ supertype: (0, _utils.validateOptionalType)("FlowType"),
+ impltype: (0, _utils.validateOptionalType)("FlowType")
+ }
+});
+(0, _utils.default)("DeclareVariable", {
+ visitor: ["id"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier")
+ }
+});
+(0, _utils.default)("DeclareExportDeclaration", {
+ visitor: ["declaration", "specifiers", "source"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ declaration: (0, _utils.validateOptionalType)("Flow"),
+ specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)(["ExportSpecifier", "ExportNamespaceSpecifier"])),
+ source: (0, _utils.validateOptionalType)("StringLiteral"),
+ default: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("DeclareExportAllDeclaration", {
+ visitor: ["source"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ source: (0, _utils.validateType)("StringLiteral"),
+ exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type", "value"))
+ }
+});
+(0, _utils.default)("DeclaredPredicate", {
+ visitor: ["value"],
+ aliases: ["Flow", "FlowPredicate"],
+ fields: {
+ value: (0, _utils.validateType)("Flow")
+ }
+});
+(0, _utils.default)("ExistsTypeAnnotation", {
+ aliases: ["Flow", "FlowType"]
+});
+(0, _utils.default)("FunctionTypeAnnotation", {
+ visitor: ["typeParameters", "params", "rest", "returnType"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
+ params: (0, _utils.validate)((0, _utils.arrayOfType)("FunctionTypeParam")),
+ rest: (0, _utils.validateOptionalType)("FunctionTypeParam"),
+ this: (0, _utils.validateOptionalType)("FunctionTypeParam"),
+ returnType: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("FunctionTypeParam", {
+ visitor: ["name", "typeAnnotation"],
+ aliases: ["Flow"],
+ fields: {
+ name: (0, _utils.validateOptionalType)("Identifier"),
+ typeAnnotation: (0, _utils.validateType)("FlowType"),
+ optional: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("GenericTypeAnnotation", {
+ visitor: ["id", "typeParameters"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]),
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
+ }
+});
+(0, _utils.default)("InferredPredicate", {
+ aliases: ["Flow", "FlowPredicate"]
+});
+(0, _utils.default)("InterfaceExtends", {
+ visitor: ["id", "typeParameters"],
+ aliases: ["Flow"],
+ fields: {
+ id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]),
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
+ }
+});
+defineInterfaceishType("InterfaceDeclaration");
+(0, _utils.default)("InterfaceTypeAnnotation", {
+ visitor: ["extends", "body"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
+ body: (0, _utils.validateType)("ObjectTypeAnnotation")
+ }
+});
+(0, _utils.default)("IntersectionTypeAnnotation", {
+ visitor: ["types"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
+ }
+});
+(0, _utils.default)("MixedTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("EmptyTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("NullableTypeAnnotation", {
+ visitor: ["typeAnnotation"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ typeAnnotation: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("NumberLiteralTypeAnnotation", {
+ builder: ["value"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ value: (0, _utils.validate)((0, _utils.assertValueType)("number"))
+ }
+});
+(0, _utils.default)("NumberTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("ObjectTypeAnnotation", {
+ visitor: ["properties", "indexers", "callProperties", "internalSlots"],
+ aliases: ["Flow", "FlowType"],
+ builder: ["properties", "indexers", "callProperties", "internalSlots", "exact"],
+ fields: {
+ properties: (0, _utils.validate)((0, _utils.arrayOfType)(["ObjectTypeProperty", "ObjectTypeSpreadProperty"])),
+ indexers: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeIndexer")),
+ callProperties: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeCallProperty")),
+ internalSlots: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeInternalSlot")),
+ exact: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ default: false
+ },
+ inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("ObjectTypeInternalSlot", {
+ visitor: ["id", "value", "optional", "static", "method"],
+ aliases: ["Flow", "UserWhitespacable"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ value: (0, _utils.validateType)("FlowType"),
+ optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("ObjectTypeCallProperty", {
+ visitor: ["value"],
+ aliases: ["Flow", "UserWhitespacable"],
+ fields: {
+ value: (0, _utils.validateType)("FlowType"),
+ static: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("ObjectTypeIndexer", {
+ visitor: ["id", "key", "value", "variance"],
+ aliases: ["Flow", "UserWhitespacable"],
+ fields: {
+ id: (0, _utils.validateOptionalType)("Identifier"),
+ key: (0, _utils.validateType)("FlowType"),
+ value: (0, _utils.validateType)("FlowType"),
+ static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ variance: (0, _utils.validateOptionalType)("Variance")
+ }
+});
+(0, _utils.default)("ObjectTypeProperty", {
+ visitor: ["key", "value", "variance"],
+ aliases: ["Flow", "UserWhitespacable"],
+ fields: {
+ key: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
+ value: (0, _utils.validateType)("FlowType"),
+ kind: (0, _utils.validate)((0, _utils.assertOneOf)("init", "get", "set")),
+ static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ proto: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ variance: (0, _utils.validateOptionalType)("Variance"),
+ method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("ObjectTypeSpreadProperty", {
+ visitor: ["argument"],
+ aliases: ["Flow", "UserWhitespacable"],
+ fields: {
+ argument: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("OpaqueType", {
+ visitor: ["id", "typeParameters", "supertype", "impltype"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
+ supertype: (0, _utils.validateOptionalType)("FlowType"),
+ impltype: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("QualifiedTypeIdentifier", {
+ visitor: ["id", "qualification"],
+ aliases: ["Flow"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ qualification: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"])
+ }
+});
+(0, _utils.default)("StringLiteralTypeAnnotation", {
+ builder: ["value"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ value: (0, _utils.validate)((0, _utils.assertValueType)("string"))
+ }
+});
+(0, _utils.default)("StringTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("SymbolTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("ThisTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("TupleTypeAnnotation", {
+ visitor: ["types"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
+ }
+});
+(0, _utils.default)("TypeofTypeAnnotation", {
+ visitor: ["argument"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ argument: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("TypeAlias", {
+ visitor: ["id", "typeParameters", "right"],
+ aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
+ right: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("TypeAnnotation", {
+ aliases: ["Flow"],
+ visitor: ["typeAnnotation"],
+ fields: {
+ typeAnnotation: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("TypeCastExpression", {
+ visitor: ["expression", "typeAnnotation"],
+ aliases: ["Flow", "ExpressionWrapper", "Expression"],
+ fields: {
+ expression: (0, _utils.validateType)("Expression"),
+ typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
+ }
+});
+(0, _utils.default)("TypeParameter", {
+ aliases: ["Flow"],
+ visitor: ["bound", "default", "variance"],
+ fields: {
+ name: (0, _utils.validate)((0, _utils.assertValueType)("string")),
+ bound: (0, _utils.validateOptionalType)("TypeAnnotation"),
+ default: (0, _utils.validateOptionalType)("FlowType"),
+ variance: (0, _utils.validateOptionalType)("Variance")
+ }
+});
+(0, _utils.default)("TypeParameterDeclaration", {
+ aliases: ["Flow"],
+ visitor: ["params"],
+ fields: {
+ params: (0, _utils.validate)((0, _utils.arrayOfType)("TypeParameter"))
+ }
+});
+(0, _utils.default)("TypeParameterInstantiation", {
+ aliases: ["Flow"],
+ visitor: ["params"],
+ fields: {
+ params: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
+ }
+});
+(0, _utils.default)("UnionTypeAnnotation", {
+ visitor: ["types"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
+ }
+});
+(0, _utils.default)("Variance", {
+ aliases: ["Flow"],
+ builder: ["kind"],
+ fields: {
+ kind: (0, _utils.validate)((0, _utils.assertOneOf)("minus", "plus"))
+ }
+});
+(0, _utils.default)("VoidTypeAnnotation", {
+ aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
+});
+(0, _utils.default)("EnumDeclaration", {
+ aliases: ["Statement", "Declaration"],
+ visitor: ["id", "body"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ body: (0, _utils.validateType)(["EnumBooleanBody", "EnumNumberBody", "EnumStringBody", "EnumSymbolBody"])
+ }
+});
+(0, _utils.default)("EnumBooleanBody", {
+ aliases: ["EnumBody"],
+ visitor: ["members"],
+ fields: {
+ explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ members: (0, _utils.validateArrayOfType)("EnumBooleanMember"),
+ hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("EnumNumberBody", {
+ aliases: ["EnumBody"],
+ visitor: ["members"],
+ fields: {
+ explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ members: (0, _utils.validateArrayOfType)("EnumNumberMember"),
+ hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("EnumStringBody", {
+ aliases: ["EnumBody"],
+ visitor: ["members"],
+ fields: {
+ explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
+ members: (0, _utils.validateArrayOfType)(["EnumStringMember", "EnumDefaultedMember"]),
+ hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("EnumSymbolBody", {
+ aliases: ["EnumBody"],
+ visitor: ["members"],
+ fields: {
+ members: (0, _utils.validateArrayOfType)("EnumDefaultedMember"),
+ hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+});
+(0, _utils.default)("EnumBooleanMember", {
+ aliases: ["EnumMember"],
+ visitor: ["id"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ init: (0, _utils.validateType)("BooleanLiteral")
+ }
+});
+(0, _utils.default)("EnumNumberMember", {
+ aliases: ["EnumMember"],
+ visitor: ["id", "init"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ init: (0, _utils.validateType)("NumericLiteral")
+ }
+});
+(0, _utils.default)("EnumStringMember", {
+ aliases: ["EnumMember"],
+ visitor: ["id", "init"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier"),
+ init: (0, _utils.validateType)("StringLiteral")
+ }
+});
+(0, _utils.default)("EnumDefaultedMember", {
+ aliases: ["EnumMember"],
+ visitor: ["id"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier")
+ }
+});
+(0, _utils.default)("IndexedAccessType", {
+ visitor: ["objectType", "indexType"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ objectType: (0, _utils.validateType)("FlowType"),
+ indexType: (0, _utils.validateType)("FlowType")
+ }
+});
+(0, _utils.default)("OptionalIndexedAccessType", {
+ visitor: ["objectType", "indexType"],
+ aliases: ["Flow", "FlowType"],
+ fields: {
+ objectType: (0, _utils.validateType)("FlowType"),
+ indexType: (0, _utils.validateType)("FlowType"),
+ optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
+ }
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/index.js
new file mode 100644
index 00000000000..897fc24d361
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/index.js
@@ -0,0 +1,103 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "VISITOR_KEYS", {
+ enumerable: true,
+ get: function () {
+ return _utils.VISITOR_KEYS;
+ }
+});
+Object.defineProperty(exports, "ALIAS_KEYS", {
+ enumerable: true,
+ get: function () {
+ return _utils.ALIAS_KEYS;
+ }
+});
+Object.defineProperty(exports, "FLIPPED_ALIAS_KEYS", {
+ enumerable: true,
+ get: function () {
+ return _utils.FLIPPED_ALIAS_KEYS;
+ }
+});
+Object.defineProperty(exports, "NODE_FIELDS", {
+ enumerable: true,
+ get: function () {
+ return _utils.NODE_FIELDS;
+ }
+});
+Object.defineProperty(exports, "BUILDER_KEYS", {
+ enumerable: true,
+ get: function () {
+ return _utils.BUILDER_KEYS;
+ }
+});
+Object.defineProperty(exports, "DEPRECATED_KEYS", {
+ enumerable: true,
+ get: function () {
+ return _utils.DEPRECATED_KEYS;
+ }
+});
+Object.defineProperty(exports, "NODE_PARENT_VALIDATIONS", {
+ enumerable: true,
+ get: function () {
+ return _utils.NODE_PARENT_VALIDATIONS;
+ }
+});
+Object.defineProperty(exports, "PLACEHOLDERS", {
+ enumerable: true,
+ get: function () {
+ return _placeholders.PLACEHOLDERS;
+ }
+});
+Object.defineProperty(exports, "PLACEHOLDERS_ALIAS", {
+ enumerable: true,
+ get: function () {
+ return _placeholders.PLACEHOLDERS_ALIAS;
+ }
+});
+Object.defineProperty(exports, "PLACEHOLDERS_FLIPPED_ALIAS", {
+ enumerable: true,
+ get: function () {
+ return _placeholders.PLACEHOLDERS_FLIPPED_ALIAS;
+ }
+});
+exports.TYPES = void 0;
+
+var _toFastProperties = require("to-fast-properties");
+
+require("./core");
+
+require("./flow");
+
+require("./jsx");
+
+require("./misc");
+
+require("./experimental");
+
+require("./typescript");
+
+var _utils = require("./utils");
+
+var _placeholders = require("./placeholders");
+
+_toFastProperties(_utils.VISITOR_KEYS);
+
+_toFastProperties(_utils.ALIAS_KEYS);
+
+_toFastProperties(_utils.FLIPPED_ALIAS_KEYS);
+
+_toFastProperties(_utils.NODE_FIELDS);
+
+_toFastProperties(_utils.BUILDER_KEYS);
+
+_toFastProperties(_utils.DEPRECATED_KEYS);
+
+_toFastProperties(_placeholders.PLACEHOLDERS_ALIAS);
+
+_toFastProperties(_placeholders.PLACEHOLDERS_FLIPPED_ALIAS);
+
+const TYPES = Object.keys(_utils.VISITOR_KEYS).concat(Object.keys(_utils.FLIPPED_ALIAS_KEYS)).concat(Object.keys(_utils.DEPRECATED_KEYS));
+exports.TYPES = TYPES; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/jsx.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/jsx.js
new file mode 100644
index 00000000000..fc8e9071c37
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/jsx.js
@@ -0,0 +1,161 @@
+"use strict";
+
+var _utils = require("./utils");
+
+(0, _utils.default)("JSXAttribute", {
+ visitor: ["name", "value"],
+ aliases: ["JSX", "Immutable"],
+ fields: {
+ name: {
+ validate: (0, _utils.assertNodeType)("JSXIdentifier", "JSXNamespacedName")
+ },
+ value: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("JSXElement", "JSXFragment", "StringLiteral", "JSXExpressionContainer")
+ }
+ }
+});
+(0, _utils.default)("JSXClosingElement", {
+ visitor: ["name"],
+ aliases: ["JSX", "Immutable"],
+ fields: {
+ name: {
+ validate: (0, _utils.assertNodeType)("JSXIdentifier", "JSXMemberExpression", "JSXNamespacedName")
+ }
+ }
+});
+(0, _utils.default)("JSXElement", {
+ builder: ["openingElement", "closingElement", "children", "selfClosing"],
+ visitor: ["openingElement", "children", "closingElement"],
+ aliases: ["JSX", "Immutable", "Expression"],
+ fields: {
+ openingElement: {
+ validate: (0, _utils.assertNodeType)("JSXOpeningElement")
+ },
+ closingElement: {
+ optional: true,
+ validate: (0, _utils.assertNodeType)("JSXClosingElement")
+ },
+ children: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXText", "JSXExpressionContainer", "JSXSpreadChild", "JSXElement", "JSXFragment")))
+ },
+ selfClosing: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("JSXEmptyExpression", {
+ aliases: ["JSX"]
+});
+(0, _utils.default)("JSXExpressionContainer", {
+ visitor: ["expression"],
+ aliases: ["JSX", "Immutable"],
+ fields: {
+ expression: {
+ validate: (0, _utils.assertNodeType)("Expression", "JSXEmptyExpression")
+ }
+ }
+});
+(0, _utils.default)("JSXSpreadChild", {
+ visitor: ["expression"],
+ aliases: ["JSX", "Immutable"],
+ fields: {
+ expression: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("JSXIdentifier", {
+ builder: ["name"],
+ aliases: ["JSX"],
+ fields: {
+ name: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ }
+});
+(0, _utils.default)("JSXMemberExpression", {
+ visitor: ["object", "property"],
+ aliases: ["JSX"],
+ fields: {
+ object: {
+ validate: (0, _utils.assertNodeType)("JSXMemberExpression", "JSXIdentifier")
+ },
+ property: {
+ validate: (0, _utils.assertNodeType)("JSXIdentifier")
+ }
+ }
+});
+(0, _utils.default)("JSXNamespacedName", {
+ visitor: ["namespace", "name"],
+ aliases: ["JSX"],
+ fields: {
+ namespace: {
+ validate: (0, _utils.assertNodeType)("JSXIdentifier")
+ },
+ name: {
+ validate: (0, _utils.assertNodeType)("JSXIdentifier")
+ }
+ }
+});
+(0, _utils.default)("JSXOpeningElement", {
+ builder: ["name", "attributes", "selfClosing"],
+ visitor: ["name", "attributes"],
+ aliases: ["JSX", "Immutable"],
+ fields: {
+ name: {
+ validate: (0, _utils.assertNodeType)("JSXIdentifier", "JSXMemberExpression", "JSXNamespacedName")
+ },
+ selfClosing: {
+ default: false
+ },
+ attributes: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXAttribute", "JSXSpreadAttribute")))
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TypeParameterInstantiation", "TSTypeParameterInstantiation"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("JSXSpreadAttribute", {
+ visitor: ["argument"],
+ aliases: ["JSX"],
+ fields: {
+ argument: {
+ validate: (0, _utils.assertNodeType)("Expression")
+ }
+ }
+});
+(0, _utils.default)("JSXText", {
+ aliases: ["JSX", "Immutable"],
+ builder: ["value"],
+ fields: {
+ value: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ }
+});
+(0, _utils.default)("JSXFragment", {
+ builder: ["openingFragment", "closingFragment", "children"],
+ visitor: ["openingFragment", "children", "closingFragment"],
+ aliases: ["JSX", "Immutable", "Expression"],
+ fields: {
+ openingFragment: {
+ validate: (0, _utils.assertNodeType)("JSXOpeningFragment")
+ },
+ closingFragment: {
+ validate: (0, _utils.assertNodeType)("JSXClosingFragment")
+ },
+ children: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXText", "JSXExpressionContainer", "JSXSpreadChild", "JSXElement", "JSXFragment")))
+ }
+ }
+});
+(0, _utils.default)("JSXOpeningFragment", {
+ aliases: ["JSX", "Immutable"]
+});
+(0, _utils.default)("JSXClosingFragment", {
+ aliases: ["JSX", "Immutable"]
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/misc.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/misc.js
new file mode 100644
index 00000000000..d8d79b9640b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/misc.js
@@ -0,0 +1,31 @@
+"use strict";
+
+var _utils = require("./utils");
+
+var _placeholders = require("./placeholders");
+
+{
+ (0, _utils.default)("Noop", {
+ visitor: []
+ });
+}
+(0, _utils.default)("Placeholder", {
+ visitor: [],
+ builder: ["expectedNode", "name"],
+ fields: {
+ name: {
+ validate: (0, _utils.assertNodeType)("Identifier")
+ },
+ expectedNode: {
+ validate: (0, _utils.assertOneOf)(..._placeholders.PLACEHOLDERS)
+ }
+ }
+});
+(0, _utils.default)("V8IntrinsicIdentifier", {
+ builder: ["name"],
+ fields: {
+ name: {
+ validate: (0, _utils.assertValueType)("string")
+ }
+ }
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/placeholders.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/placeholders.js
new file mode 100644
index 00000000000..7277239ae41
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/placeholders.js
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PLACEHOLDERS_FLIPPED_ALIAS = exports.PLACEHOLDERS_ALIAS = exports.PLACEHOLDERS = void 0;
+
+var _utils = require("./utils");
+
+const PLACEHOLDERS = ["Identifier", "StringLiteral", "Expression", "Statement", "Declaration", "BlockStatement", "ClassBody", "Pattern"];
+exports.PLACEHOLDERS = PLACEHOLDERS;
+const PLACEHOLDERS_ALIAS = {
+ Declaration: ["Statement"],
+ Pattern: ["PatternLike", "LVal"]
+};
+exports.PLACEHOLDERS_ALIAS = PLACEHOLDERS_ALIAS;
+
+for (const type of PLACEHOLDERS) {
+ const alias = _utils.ALIAS_KEYS[type];
+ if (alias != null && alias.length) PLACEHOLDERS_ALIAS[type] = alias;
+}
+
+const PLACEHOLDERS_FLIPPED_ALIAS = {};
+exports.PLACEHOLDERS_FLIPPED_ALIAS = PLACEHOLDERS_FLIPPED_ALIAS;
+Object.keys(PLACEHOLDERS_ALIAS).forEach(type => {
+ PLACEHOLDERS_ALIAS[type].forEach(alias => {
+ if (!Object.hasOwnProperty.call(PLACEHOLDERS_FLIPPED_ALIAS, alias)) {
+ PLACEHOLDERS_FLIPPED_ALIAS[alias] = [];
+ }
+
+ PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type);
+ });
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/typescript.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/typescript.js
new file mode 100644
index 00000000000..7abbf046d76
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/typescript.js
@@ -0,0 +1,469 @@
+"use strict";
+
+var _utils = require("./utils");
+
+var _core = require("./core");
+
+var _is = require("../validators/is");
+
+const bool = (0, _utils.assertValueType)("boolean");
+const tSFunctionTypeAnnotationCommon = {
+ returnType: {
+ validate: (0, _utils.assertNodeType)("TSTypeAnnotation", "Noop"),
+ optional: true
+ },
+ typeParameters: {
+ validate: (0, _utils.assertNodeType)("TSTypeParameterDeclaration", "Noop"),
+ optional: true
+ }
+};
+(0, _utils.default)("TSParameterProperty", {
+ aliases: ["LVal"],
+ visitor: ["parameter"],
+ fields: {
+ accessibility: {
+ validate: (0, _utils.assertOneOf)("public", "private", "protected"),
+ optional: true
+ },
+ readonly: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ parameter: {
+ validate: (0, _utils.assertNodeType)("Identifier", "AssignmentPattern")
+ },
+ override: {
+ validate: (0, _utils.assertValueType)("boolean"),
+ optional: true
+ },
+ decorators: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("TSDeclareFunction", {
+ aliases: ["Statement", "Declaration"],
+ visitor: ["id", "typeParameters", "params", "returnType"],
+ fields: Object.assign({}, _core.functionDeclarationCommon, tSFunctionTypeAnnotationCommon)
+});
+(0, _utils.default)("TSDeclareMethod", {
+ visitor: ["decorators", "key", "typeParameters", "params", "returnType"],
+ fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, tSFunctionTypeAnnotationCommon)
+});
+(0, _utils.default)("TSQualifiedName", {
+ aliases: ["TSEntityName"],
+ visitor: ["left", "right"],
+ fields: {
+ left: (0, _utils.validateType)("TSEntityName"),
+ right: (0, _utils.validateType)("Identifier")
+ }
+});
+const signatureDeclarationCommon = {
+ typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
+ parameters: (0, _utils.validateArrayOfType)(["Identifier", "RestElement"]),
+ typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation")
+};
+const callConstructSignatureDeclaration = {
+ aliases: ["TSTypeElement"],
+ visitor: ["typeParameters", "parameters", "typeAnnotation"],
+ fields: signatureDeclarationCommon
+};
+(0, _utils.default)("TSCallSignatureDeclaration", callConstructSignatureDeclaration);
+(0, _utils.default)("TSConstructSignatureDeclaration", callConstructSignatureDeclaration);
+const namedTypeElementCommon = {
+ key: (0, _utils.validateType)("Expression"),
+ computed: (0, _utils.validate)(bool),
+ optional: (0, _utils.validateOptional)(bool)
+};
+(0, _utils.default)("TSPropertySignature", {
+ aliases: ["TSTypeElement"],
+ visitor: ["key", "typeAnnotation", "initializer"],
+ fields: Object.assign({}, namedTypeElementCommon, {
+ readonly: (0, _utils.validateOptional)(bool),
+ typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation"),
+ initializer: (0, _utils.validateOptionalType)("Expression"),
+ kind: {
+ validate: (0, _utils.assertOneOf)("get", "set")
+ }
+ })
+});
+(0, _utils.default)("TSMethodSignature", {
+ aliases: ["TSTypeElement"],
+ visitor: ["key", "typeParameters", "parameters", "typeAnnotation"],
+ fields: Object.assign({}, signatureDeclarationCommon, namedTypeElementCommon, {
+ kind: {
+ validate: (0, _utils.assertOneOf)("method", "get", "set")
+ }
+ })
+});
+(0, _utils.default)("TSIndexSignature", {
+ aliases: ["TSTypeElement"],
+ visitor: ["parameters", "typeAnnotation"],
+ fields: {
+ readonly: (0, _utils.validateOptional)(bool),
+ static: (0, _utils.validateOptional)(bool),
+ parameters: (0, _utils.validateArrayOfType)("Identifier"),
+ typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation")
+ }
+});
+const tsKeywordTypes = ["TSAnyKeyword", "TSBooleanKeyword", "TSBigIntKeyword", "TSIntrinsicKeyword", "TSNeverKeyword", "TSNullKeyword", "TSNumberKeyword", "TSObjectKeyword", "TSStringKeyword", "TSSymbolKeyword", "TSUndefinedKeyword", "TSUnknownKeyword", "TSVoidKeyword"];
+
+for (const type of tsKeywordTypes) {
+ (0, _utils.default)(type, {
+ aliases: ["TSType", "TSBaseType"],
+ visitor: [],
+ fields: {}
+ });
+}
+
+(0, _utils.default)("TSThisType", {
+ aliases: ["TSType", "TSBaseType"],
+ visitor: [],
+ fields: {}
+});
+const fnOrCtrBase = {
+ aliases: ["TSType"],
+ visitor: ["typeParameters", "parameters", "typeAnnotation"]
+};
+(0, _utils.default)("TSFunctionType", Object.assign({}, fnOrCtrBase, {
+ fields: signatureDeclarationCommon
+}));
+(0, _utils.default)("TSConstructorType", Object.assign({}, fnOrCtrBase, {
+ fields: Object.assign({}, signatureDeclarationCommon, {
+ abstract: (0, _utils.validateOptional)(bool)
+ })
+}));
+(0, _utils.default)("TSTypeReference", {
+ aliases: ["TSType"],
+ visitor: ["typeName", "typeParameters"],
+ fields: {
+ typeName: (0, _utils.validateType)("TSEntityName"),
+ typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
+ }
+});
+(0, _utils.default)("TSTypePredicate", {
+ aliases: ["TSType"],
+ visitor: ["parameterName", "typeAnnotation"],
+ builder: ["parameterName", "typeAnnotation", "asserts"],
+ fields: {
+ parameterName: (0, _utils.validateType)(["Identifier", "TSThisType"]),
+ typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation"),
+ asserts: (0, _utils.validateOptional)(bool)
+ }
+});
+(0, _utils.default)("TSTypeQuery", {
+ aliases: ["TSType"],
+ visitor: ["exprName"],
+ fields: {
+ exprName: (0, _utils.validateType)(["TSEntityName", "TSImportType"])
+ }
+});
+(0, _utils.default)("TSTypeLiteral", {
+ aliases: ["TSType"],
+ visitor: ["members"],
+ fields: {
+ members: (0, _utils.validateArrayOfType)("TSTypeElement")
+ }
+});
+(0, _utils.default)("TSArrayType", {
+ aliases: ["TSType"],
+ visitor: ["elementType"],
+ fields: {
+ elementType: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSTupleType", {
+ aliases: ["TSType"],
+ visitor: ["elementTypes"],
+ fields: {
+ elementTypes: (0, _utils.validateArrayOfType)(["TSType", "TSNamedTupleMember"])
+ }
+});
+(0, _utils.default)("TSOptionalType", {
+ aliases: ["TSType"],
+ visitor: ["typeAnnotation"],
+ fields: {
+ typeAnnotation: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSRestType", {
+ aliases: ["TSType"],
+ visitor: ["typeAnnotation"],
+ fields: {
+ typeAnnotation: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSNamedTupleMember", {
+ visitor: ["label", "elementType"],
+ builder: ["label", "elementType", "optional"],
+ fields: {
+ label: (0, _utils.validateType)("Identifier"),
+ optional: {
+ validate: bool,
+ default: false
+ },
+ elementType: (0, _utils.validateType)("TSType")
+ }
+});
+const unionOrIntersection = {
+ aliases: ["TSType"],
+ visitor: ["types"],
+ fields: {
+ types: (0, _utils.validateArrayOfType)("TSType")
+ }
+};
+(0, _utils.default)("TSUnionType", unionOrIntersection);
+(0, _utils.default)("TSIntersectionType", unionOrIntersection);
+(0, _utils.default)("TSConditionalType", {
+ aliases: ["TSType"],
+ visitor: ["checkType", "extendsType", "trueType", "falseType"],
+ fields: {
+ checkType: (0, _utils.validateType)("TSType"),
+ extendsType: (0, _utils.validateType)("TSType"),
+ trueType: (0, _utils.validateType)("TSType"),
+ falseType: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSInferType", {
+ aliases: ["TSType"],
+ visitor: ["typeParameter"],
+ fields: {
+ typeParameter: (0, _utils.validateType)("TSTypeParameter")
+ }
+});
+(0, _utils.default)("TSParenthesizedType", {
+ aliases: ["TSType"],
+ visitor: ["typeAnnotation"],
+ fields: {
+ typeAnnotation: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSTypeOperator", {
+ aliases: ["TSType"],
+ visitor: ["typeAnnotation"],
+ fields: {
+ operator: (0, _utils.validate)((0, _utils.assertValueType)("string")),
+ typeAnnotation: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSIndexedAccessType", {
+ aliases: ["TSType"],
+ visitor: ["objectType", "indexType"],
+ fields: {
+ objectType: (0, _utils.validateType)("TSType"),
+ indexType: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSMappedType", {
+ aliases: ["TSType"],
+ visitor: ["typeParameter", "typeAnnotation", "nameType"],
+ fields: {
+ readonly: (0, _utils.validateOptional)(bool),
+ typeParameter: (0, _utils.validateType)("TSTypeParameter"),
+ optional: (0, _utils.validateOptional)(bool),
+ typeAnnotation: (0, _utils.validateOptionalType)("TSType"),
+ nameType: (0, _utils.validateOptionalType)("TSType")
+ }
+});
+(0, _utils.default)("TSLiteralType", {
+ aliases: ["TSType", "TSBaseType"],
+ visitor: ["literal"],
+ fields: {
+ literal: {
+ validate: function () {
+ const unaryExpression = (0, _utils.assertNodeType)("NumericLiteral", "BigIntLiteral");
+ const unaryOperator = (0, _utils.assertOneOf)("-");
+ const literal = (0, _utils.assertNodeType)("NumericLiteral", "StringLiteral", "BooleanLiteral", "BigIntLiteral");
+
+ function validator(parent, key, node) {
+ if ((0, _is.default)("UnaryExpression", node)) {
+ unaryOperator(node, "operator", node.operator);
+ unaryExpression(node, "argument", node.argument);
+ } else {
+ literal(parent, key, node);
+ }
+ }
+
+ validator.oneOfNodeTypes = ["NumericLiteral", "StringLiteral", "BooleanLiteral", "BigIntLiteral", "UnaryExpression"];
+ return validator;
+ }()
+ }
+ }
+});
+(0, _utils.default)("TSExpressionWithTypeArguments", {
+ aliases: ["TSType"],
+ visitor: ["expression", "typeParameters"],
+ fields: {
+ expression: (0, _utils.validateType)("TSEntityName"),
+ typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
+ }
+});
+(0, _utils.default)("TSInterfaceDeclaration", {
+ aliases: ["Statement", "Declaration"],
+ visitor: ["id", "typeParameters", "extends", "body"],
+ fields: {
+ declare: (0, _utils.validateOptional)(bool),
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
+ extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("TSExpressionWithTypeArguments")),
+ body: (0, _utils.validateType)("TSInterfaceBody")
+ }
+});
+(0, _utils.default)("TSInterfaceBody", {
+ visitor: ["body"],
+ fields: {
+ body: (0, _utils.validateArrayOfType)("TSTypeElement")
+ }
+});
+(0, _utils.default)("TSTypeAliasDeclaration", {
+ aliases: ["Statement", "Declaration"],
+ visitor: ["id", "typeParameters", "typeAnnotation"],
+ fields: {
+ declare: (0, _utils.validateOptional)(bool),
+ id: (0, _utils.validateType)("Identifier"),
+ typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
+ typeAnnotation: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSAsExpression", {
+ aliases: ["Expression"],
+ visitor: ["expression", "typeAnnotation"],
+ fields: {
+ expression: (0, _utils.validateType)("Expression"),
+ typeAnnotation: (0, _utils.validateType)("TSType")
+ }
+});
+(0, _utils.default)("TSTypeAssertion", {
+ aliases: ["Expression"],
+ visitor: ["typeAnnotation", "expression"],
+ fields: {
+ typeAnnotation: (0, _utils.validateType)("TSType"),
+ expression: (0, _utils.validateType)("Expression")
+ }
+});
+(0, _utils.default)("TSEnumDeclaration", {
+ aliases: ["Statement", "Declaration"],
+ visitor: ["id", "members"],
+ fields: {
+ declare: (0, _utils.validateOptional)(bool),
+ const: (0, _utils.validateOptional)(bool),
+ id: (0, _utils.validateType)("Identifier"),
+ members: (0, _utils.validateArrayOfType)("TSEnumMember"),
+ initializer: (0, _utils.validateOptionalType)("Expression")
+ }
+});
+(0, _utils.default)("TSEnumMember", {
+ visitor: ["id", "initializer"],
+ fields: {
+ id: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
+ initializer: (0, _utils.validateOptionalType)("Expression")
+ }
+});
+(0, _utils.default)("TSModuleDeclaration", {
+ aliases: ["Statement", "Declaration"],
+ visitor: ["id", "body"],
+ fields: {
+ declare: (0, _utils.validateOptional)(bool),
+ global: (0, _utils.validateOptional)(bool),
+ id: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
+ body: (0, _utils.validateType)(["TSModuleBlock", "TSModuleDeclaration"])
+ }
+});
+(0, _utils.default)("TSModuleBlock", {
+ aliases: ["Scopable", "Block", "BlockParent"],
+ visitor: ["body"],
+ fields: {
+ body: (0, _utils.validateArrayOfType)("Statement")
+ }
+});
+(0, _utils.default)("TSImportType", {
+ aliases: ["TSType"],
+ visitor: ["argument", "qualifier", "typeParameters"],
+ fields: {
+ argument: (0, _utils.validateType)("StringLiteral"),
+ qualifier: (0, _utils.validateOptionalType)("TSEntityName"),
+ typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
+ }
+});
+(0, _utils.default)("TSImportEqualsDeclaration", {
+ aliases: ["Statement"],
+ visitor: ["id", "moduleReference"],
+ fields: {
+ isExport: (0, _utils.validate)(bool),
+ id: (0, _utils.validateType)("Identifier"),
+ moduleReference: (0, _utils.validateType)(["TSEntityName", "TSExternalModuleReference"]),
+ importKind: {
+ validate: (0, _utils.assertOneOf)("type", "value"),
+ optional: true
+ }
+ }
+});
+(0, _utils.default)("TSExternalModuleReference", {
+ visitor: ["expression"],
+ fields: {
+ expression: (0, _utils.validateType)("StringLiteral")
+ }
+});
+(0, _utils.default)("TSNonNullExpression", {
+ aliases: ["Expression"],
+ visitor: ["expression"],
+ fields: {
+ expression: (0, _utils.validateType)("Expression")
+ }
+});
+(0, _utils.default)("TSExportAssignment", {
+ aliases: ["Statement"],
+ visitor: ["expression"],
+ fields: {
+ expression: (0, _utils.validateType)("Expression")
+ }
+});
+(0, _utils.default)("TSNamespaceExportDeclaration", {
+ aliases: ["Statement"],
+ visitor: ["id"],
+ fields: {
+ id: (0, _utils.validateType)("Identifier")
+ }
+});
+(0, _utils.default)("TSTypeAnnotation", {
+ visitor: ["typeAnnotation"],
+ fields: {
+ typeAnnotation: {
+ validate: (0, _utils.assertNodeType)("TSType")
+ }
+ }
+});
+(0, _utils.default)("TSTypeParameterInstantiation", {
+ visitor: ["params"],
+ fields: {
+ params: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSType")))
+ }
+ }
+});
+(0, _utils.default)("TSTypeParameterDeclaration", {
+ visitor: ["params"],
+ fields: {
+ params: {
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSTypeParameter")))
+ }
+ }
+});
+(0, _utils.default)("TSTypeParameter", {
+ builder: ["constraint", "default", "name"],
+ visitor: ["constraint", "default"],
+ fields: {
+ name: {
+ validate: (0, _utils.assertValueType)("string")
+ },
+ constraint: {
+ validate: (0, _utils.assertNodeType)("TSType"),
+ optional: true
+ },
+ default: {
+ validate: (0, _utils.assertNodeType)("TSType"),
+ optional: true
+ }
+ }
+}); \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/definitions/utils.js b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/utils.js
new file mode 100644
index 00000000000..2acdae532aa
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/definitions/utils.js
@@ -0,0 +1,324 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.validate = validate;
+exports.typeIs = typeIs;
+exports.validateType = validateType;
+exports.validateOptional = validateOptional;
+exports.validateOptionalType = validateOptionalType;
+exports.arrayOf = arrayOf;
+exports.arrayOfType = arrayOfType;
+exports.validateArrayOfType = validateArrayOfType;
+exports.assertEach = assertEach;
+exports.assertOneOf = assertOneOf;
+exports.assertNodeType = assertNodeType;
+exports.assertNodeOrValueType = assertNodeOrValueType;
+exports.assertValueType = assertValueType;
+exports.assertShape = assertShape;
+exports.assertOptionalChainStart = assertOptionalChainStart;
+exports.chain = chain;
+exports.default = defineType;
+exports.NODE_PARENT_VALIDATIONS = exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.FLIPPED_ALIAS_KEYS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = void 0;
+
+var _is = require("../validators/is");
+
+var _validate = require("../validators/validate");
+
+const VISITOR_KEYS = {};
+exports.VISITOR_KEYS = VISITOR_KEYS;
+const ALIAS_KEYS = {};
+exports.ALIAS_KEYS = ALIAS_KEYS;
+const FLIPPED_ALIAS_KEYS = {};
+exports.FLIPPED_ALIAS_KEYS = FLIPPED_ALIAS_KEYS;
+const NODE_FIELDS = {};
+exports.NODE_FIELDS = NODE_FIELDS;
+const BUILDER_KEYS = {};
+exports.BUILDER_KEYS = BUILDER_KEYS;
+const DEPRECATED_KEYS = {};
+exports.DEPRECATED_KEYS = DEPRECATED_KEYS;
+const NODE_PARENT_VALIDATIONS = {};
+exports.NODE_PARENT_VALIDATIONS = NODE_PARENT_VALIDATIONS;
+
+function getType(val) {
+ if (Array.isArray(val)) {
+ return "array";
+ } else if (val === null) {
+ return "null";
+ } else {
+ return typeof val;
+ }
+}
+
+function validate(validate) {
+ return {
+ validate
+ };
+}
+
+function typeIs(typeName) {
+ return typeof typeName === "string" ? assertNodeType(typeName) : assertNodeType(...typeName);
+}
+
+function validateType(typeName) {
+ return validate(typeIs(typeName));
+}
+
+function validateOptional(validate) {
+ return {
+ validate,
+ optional: true
+ };
+}
+
+function validateOptionalType(typeName) {
+ return {
+ validate: typeIs(typeName),
+ optional: true
+ };
+}
+
+function arrayOf(elementType) {
+ return chain(assertValueType("array"), assertEach(elementType));
+}
+
+function arrayOfType(typeName) {
+ return arrayOf(typeIs(typeName));
+}
+
+function validateArrayOfType(typeName) {
+ return validate(arrayOfType(typeName));
+}
+
+function assertEach(callback) {
+ function validator(node, key, val) {
+ if (!Array.isArray(val)) return;
+
+ for (let i = 0; i < val.length; i++) {
+ const subkey = `${key}[${i}]`;
+ const v = val[i];
+ callback(node, subkey, v);
+ if (process.env.BABEL_TYPES_8_BREAKING) (0, _validate.validateChild)(node, subkey, v);
+ }
+ }
+
+ validator.each = callback;
+ return validator;
+}
+
+function assertOneOf(...values) {
+ function validate(node, key, val) {
+ if (values.indexOf(val) < 0) {
+ throw new TypeError(`Property ${key} expected value to be one of ${JSON.stringify(values)} but got ${JSON.stringify(val)}`);
+ }
+ }
+
+ validate.oneOf = values;
+ return validate;
+}
+
+function assertNodeType(...types) {
+ function validate(node, key, val) {
+ for (const type of types) {
+ if ((0, _is.default)(type, val)) {
+ (0, _validate.validateChild)(node, key, val);
+ return;
+ }
+ }
+
+ throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);
+ }
+
+ validate.oneOfNodeTypes = types;
+ return validate;
+}
+
+function assertNodeOrValueType(...types) {
+ function validate(node, key, val) {
+ for (const type of types) {
+ if (getType(val) === type || (0, _is.default)(type, val)) {
+ (0, _validate.validateChild)(node, key, val);
+ return;
+ }
+ }
+
+ throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);
+ }
+
+ validate.oneOfNodeOrValueTypes = types;
+ return validate;
+}
+
+function assertValueType(type) {
+ function validate(node, key, val) {
+ const valid = getType(val) === type;
+
+ if (!valid) {
+ throw new TypeError(`Property ${key} expected type of ${type} but got ${getType(val)}`);
+ }
+ }
+
+ validate.type = type;
+ return validate;
+}
+
+function assertShape(shape) {
+ function validate(node, key, val) {
+ const errors = [];
+
+ for (const property of Object.keys(shape)) {
+ try {
+ (0, _validate.validateField)(node, property, val[property], shape[property]);
+ } catch (error) {
+ if (error instanceof TypeError) {
+ errors.push(error.message);
+ continue;
+ }
+
+ throw error;
+ }
+ }
+
+ if (errors.length) {
+ throw new TypeError(`Property ${key} of ${node.type} expected to have the following:\n${errors.join("\n")}`);
+ }
+ }
+
+ validate.shapeOf = shape;
+ return validate;
+}
+
+function assertOptionalChainStart() {
+ function validate(node) {
+ var _current;
+
+ let current = node;
+
+ while (node) {
+ const {
+ type
+ } = current;
+
+ if (type === "OptionalCallExpression") {
+ if (current.optional) return;
+ current = current.callee;
+ continue;
+ }
+
+ if (type === "OptionalMemberExpression") {
+ if (current.optional) return;
+ current = current.object;
+ continue;
+ }
+
+ break;
+ }
+
+ throw new TypeError(`Non-optional ${node.type} must chain from an optional OptionalMemberExpression or OptionalCallExpression. Found chain from ${(_current = current) == null ? void 0 : _current.type}`);
+ }
+
+ return validate;
+}
+
+function chain(...fns) {
+ function validate(...args) {
+ for (const fn of fns) {
+ fn(...args);
+ }
+ }
+
+ validate.chainOf = fns;
+
+ if (fns.length >= 2 && "type" in fns[0] && fns[0].type === "array" && !("each" in fns[1])) {
+ throw new Error(`An assertValueType("array") validator can only be followed by an assertEach(...) validator.`);
+ }
+
+ return validate;
+}
+
+const validTypeOpts = ["aliases", "builder", "deprecatedAlias", "fields", "inherits", "visitor", "validate"];
+const validFieldKeys = ["default", "optional", "validate"];
+
+function defineType(type, opts = {}) {
+ const inherits = opts.inherits && store[opts.inherits] || {};
+ let fields = opts.fields;
+
+ if (!fields) {
+ fields = {};
+
+ if (inherits.fields) {
+ const keys = Object.getOwnPropertyNames(inherits.fields);
+
+ for (const key of keys) {
+ const field = inherits.fields[key];
+ const def = field.default;
+
+ if (Array.isArray(def) ? def.length > 0 : def && typeof def === "object") {
+ throw new Error("field defaults can only be primitives or empty arrays currently");
+ }
+
+ fields[key] = {
+ default: Array.isArray(def) ? [] : def,
+ optional: field.optional,
+ validate: field.validate
+ };
+ }
+ }
+ }
+
+ const visitor = opts.visitor || inherits.visitor || [];
+ const aliases = opts.aliases || inherits.aliases || [];
+ const builder = opts.builder || inherits.builder || opts.visitor || [];
+
+ for (const k of Object.keys(opts)) {
+ if (validTypeOpts.indexOf(k) === -1) {
+ throw new Error(`Unknown type option "${k}" on ${type}`);
+ }
+ }
+
+ if (opts.deprecatedAlias) {
+ DEPRECATED_KEYS[opts.deprecatedAlias] = type;
+ }
+
+ for (const key of visitor.concat(builder)) {
+ fields[key] = fields[key] || {};
+ }
+
+ for (const key of Object.keys(fields)) {
+ const field = fields[key];
+
+ if (field.default !== undefined && builder.indexOf(key) === -1) {
+ field.optional = true;
+ }
+
+ if (field.default === undefined) {
+ field.default = null;
+ } else if (!field.validate && field.default != null) {
+ field.validate = assertValueType(getType(field.default));
+ }
+
+ for (const k of Object.keys(field)) {
+ if (validFieldKeys.indexOf(k) === -1) {
+ throw new Error(`Unknown field key "${k}" on ${type}.${key}`);
+ }
+ }
+ }
+
+ VISITOR_KEYS[type] = opts.visitor = visitor;
+ BUILDER_KEYS[type] = opts.builder = builder;
+ NODE_FIELDS[type] = opts.fields = fields;
+ ALIAS_KEYS[type] = opts.aliases = aliases;
+ aliases.forEach(alias => {
+ FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || [];
+ FLIPPED_ALIAS_KEYS[alias].push(type);
+ });
+
+ if (opts.validate) {
+ NODE_PARENT_VALIDATIONS[type] = opts.validate;
+ }
+
+ store[type] = opts;
+}
+
+const store = {}; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/index.js
new file mode 100644
index 00000000000..6fd730b5223
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/index.js
@@ -0,0 +1,647 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var _exportNames = {
+ react: true,
+ assertNode: true,
+ createTypeAnnotationBasedOnTypeof: true,
+ createUnionTypeAnnotation: true,
+ createFlowUnionType: true,
+ createTSUnionType: true,
+ cloneNode: true,
+ clone: true,
+ cloneDeep: true,
+ cloneDeepWithoutLoc: true,
+ cloneWithoutLoc: true,
+ addComment: true,
+ addComments: true,
+ inheritInnerComments: true,
+ inheritLeadingComments: true,
+ inheritsComments: true,
+ inheritTrailingComments: true,
+ removeComments: true,
+ ensureBlock: true,
+ toBindingIdentifierName: true,
+ toBlock: true,
+ toComputedKey: true,
+ toExpression: true,
+ toIdentifier: true,
+ toKeyAlias: true,
+ toSequenceExpression: true,
+ toStatement: true,
+ valueToNode: true,
+ appendToMemberExpression: true,
+ inherits: true,
+ prependToMemberExpression: true,
+ removeProperties: true,
+ removePropertiesDeep: true,
+ removeTypeDuplicates: true,
+ getBindingIdentifiers: true,
+ getOuterBindingIdentifiers: true,
+ traverse: true,
+ traverseFast: true,
+ shallowEqual: true,
+ is: true,
+ isBinding: true,
+ isBlockScoped: true,
+ isImmutable: true,
+ isLet: true,
+ isNode: true,
+ isNodesEquivalent: true,
+ isPlaceholderType: true,
+ isReferenced: true,
+ isScope: true,
+ isSpecifierDefault: true,
+ isType: true,
+ isValidES3Identifier: true,
+ isValidIdentifier: true,
+ isVar: true,
+ matchesPattern: true,
+ validate: true,
+ buildMatchMemberExpression: true
+};
+Object.defineProperty(exports, "assertNode", {
+ enumerable: true,
+ get: function () {
+ return _assertNode.default;
+ }
+});
+Object.defineProperty(exports, "createTypeAnnotationBasedOnTypeof", {
+ enumerable: true,
+ get: function () {
+ return _createTypeAnnotationBasedOnTypeof.default;
+ }
+});
+Object.defineProperty(exports, "createUnionTypeAnnotation", {
+ enumerable: true,
+ get: function () {
+ return _createFlowUnionType.default;
+ }
+});
+Object.defineProperty(exports, "createFlowUnionType", {
+ enumerable: true,
+ get: function () {
+ return _createFlowUnionType.default;
+ }
+});
+Object.defineProperty(exports, "createTSUnionType", {
+ enumerable: true,
+ get: function () {
+ return _createTSUnionType.default;
+ }
+});
+Object.defineProperty(exports, "cloneNode", {
+ enumerable: true,
+ get: function () {
+ return _cloneNode.default;
+ }
+});
+Object.defineProperty(exports, "clone", {
+ enumerable: true,
+ get: function () {
+ return _clone.default;
+ }
+});
+Object.defineProperty(exports, "cloneDeep", {
+ enumerable: true,
+ get: function () {
+ return _cloneDeep.default;
+ }
+});
+Object.defineProperty(exports, "cloneDeepWithoutLoc", {
+ enumerable: true,
+ get: function () {
+ return _cloneDeepWithoutLoc.default;
+ }
+});
+Object.defineProperty(exports, "cloneWithoutLoc", {
+ enumerable: true,
+ get: function () {
+ return _cloneWithoutLoc.default;
+ }
+});
+Object.defineProperty(exports, "addComment", {
+ enumerable: true,
+ get: function () {
+ return _addComment.default;
+ }
+});
+Object.defineProperty(exports, "addComments", {
+ enumerable: true,
+ get: function () {
+ return _addComments.default;
+ }
+});
+Object.defineProperty(exports, "inheritInnerComments", {
+ enumerable: true,
+ get: function () {
+ return _inheritInnerComments.default;
+ }
+});
+Object.defineProperty(exports, "inheritLeadingComments", {
+ enumerable: true,
+ get: function () {
+ return _inheritLeadingComments.default;
+ }
+});
+Object.defineProperty(exports, "inheritsComments", {
+ enumerable: true,
+ get: function () {
+ return _inheritsComments.default;
+ }
+});
+Object.defineProperty(exports, "inheritTrailingComments", {
+ enumerable: true,
+ get: function () {
+ return _inheritTrailingComments.default;
+ }
+});
+Object.defineProperty(exports, "removeComments", {
+ enumerable: true,
+ get: function () {
+ return _removeComments.default;
+ }
+});
+Object.defineProperty(exports, "ensureBlock", {
+ enumerable: true,
+ get: function () {
+ return _ensureBlock.default;
+ }
+});
+Object.defineProperty(exports, "toBindingIdentifierName", {
+ enumerable: true,
+ get: function () {
+ return _toBindingIdentifierName.default;
+ }
+});
+Object.defineProperty(exports, "toBlock", {
+ enumerable: true,
+ get: function () {
+ return _toBlock.default;
+ }
+});
+Object.defineProperty(exports, "toComputedKey", {
+ enumerable: true,
+ get: function () {
+ return _toComputedKey.default;
+ }
+});
+Object.defineProperty(exports, "toExpression", {
+ enumerable: true,
+ get: function () {
+ return _toExpression.default;
+ }
+});
+Object.defineProperty(exports, "toIdentifier", {
+ enumerable: true,
+ get: function () {
+ return _toIdentifier.default;
+ }
+});
+Object.defineProperty(exports, "toKeyAlias", {
+ enumerable: true,
+ get: function () {
+ return _toKeyAlias.default;
+ }
+});
+Object.defineProperty(exports, "toSequenceExpression", {
+ enumerable: true,
+ get: function () {
+ return _toSequenceExpression.default;
+ }
+});
+Object.defineProperty(exports, "toStatement", {
+ enumerable: true,
+ get: function () {
+ return _toStatement.default;
+ }
+});
+Object.defineProperty(exports, "valueToNode", {
+ enumerable: true,
+ get: function () {
+ return _valueToNode.default;
+ }
+});
+Object.defineProperty(exports, "appendToMemberExpression", {
+ enumerable: true,
+ get: function () {
+ return _appendToMemberExpression.default;
+ }
+});
+Object.defineProperty(exports, "inherits", {
+ enumerable: true,
+ get: function () {
+ return _inherits.default;
+ }
+});
+Object.defineProperty(exports, "prependToMemberExpression", {
+ enumerable: true,
+ get: function () {
+ return _prependToMemberExpression.default;
+ }
+});
+Object.defineProperty(exports, "removeProperties", {
+ enumerable: true,
+ get: function () {
+ return _removeProperties.default;
+ }
+});
+Object.defineProperty(exports, "removePropertiesDeep", {
+ enumerable: true,
+ get: function () {
+ return _removePropertiesDeep.default;
+ }
+});
+Object.defineProperty(exports, "removeTypeDuplicates", {
+ enumerable: true,
+ get: function () {
+ return _removeTypeDuplicates.default;
+ }
+});
+Object.defineProperty(exports, "getBindingIdentifiers", {
+ enumerable: true,
+ get: function () {
+ return _getBindingIdentifiers.default;
+ }
+});
+Object.defineProperty(exports, "getOuterBindingIdentifiers", {
+ enumerable: true,
+ get: function () {
+ return _getOuterBindingIdentifiers.default;
+ }
+});
+Object.defineProperty(exports, "traverse", {
+ enumerable: true,
+ get: function () {
+ return _traverse.default;
+ }
+});
+Object.defineProperty(exports, "traverseFast", {
+ enumerable: true,
+ get: function () {
+ return _traverseFast.default;
+ }
+});
+Object.defineProperty(exports, "shallowEqual", {
+ enumerable: true,
+ get: function () {
+ return _shallowEqual.default;
+ }
+});
+Object.defineProperty(exports, "is", {
+ enumerable: true,
+ get: function () {
+ return _is.default;
+ }
+});
+Object.defineProperty(exports, "isBinding", {
+ enumerable: true,
+ get: function () {
+ return _isBinding.default;
+ }
+});
+Object.defineProperty(exports, "isBlockScoped", {
+ enumerable: true,
+ get: function () {
+ return _isBlockScoped.default;
+ }
+});
+Object.defineProperty(exports, "isImmutable", {
+ enumerable: true,
+ get: function () {
+ return _isImmutable.default;
+ }
+});
+Object.defineProperty(exports, "isLet", {
+ enumerable: true,
+ get: function () {
+ return _isLet.default;
+ }
+});
+Object.defineProperty(exports, "isNode", {
+ enumerable: true,
+ get: function () {
+ return _isNode.default;
+ }
+});
+Object.defineProperty(exports, "isNodesEquivalent", {
+ enumerable: true,
+ get: function () {
+ return _isNodesEquivalent.default;
+ }
+});
+Object.defineProperty(exports, "isPlaceholderType", {
+ enumerable: true,
+ get: function () {
+ return _isPlaceholderType.default;
+ }
+});
+Object.defineProperty(exports, "isReferenced", {
+ enumerable: true,
+ get: function () {
+ return _isReferenced.default;
+ }
+});
+Object.defineProperty(exports, "isScope", {
+ enumerable: true,
+ get: function () {
+ return _isScope.default;
+ }
+});
+Object.defineProperty(exports, "isSpecifierDefault", {
+ enumerable: true,
+ get: function () {
+ return _isSpecifierDefault.default;
+ }
+});
+Object.defineProperty(exports, "isType", {
+ enumerable: true,
+ get: function () {
+ return _isType.default;
+ }
+});
+Object.defineProperty(exports, "isValidES3Identifier", {
+ enumerable: true,
+ get: function () {
+ return _isValidES3Identifier.default;
+ }
+});
+Object.defineProperty(exports, "isValidIdentifier", {
+ enumerable: true,
+ get: function () {
+ return _isValidIdentifier.default;
+ }
+});
+Object.defineProperty(exports, "isVar", {
+ enumerable: true,
+ get: function () {
+ return _isVar.default;
+ }
+});
+Object.defineProperty(exports, "matchesPattern", {
+ enumerable: true,
+ get: function () {
+ return _matchesPattern.default;
+ }
+});
+Object.defineProperty(exports, "validate", {
+ enumerable: true,
+ get: function () {
+ return _validate.default;
+ }
+});
+Object.defineProperty(exports, "buildMatchMemberExpression", {
+ enumerable: true,
+ get: function () {
+ return _buildMatchMemberExpression.default;
+ }
+});
+exports.react = void 0;
+
+var _isReactComponent = require("./validators/react/isReactComponent");
+
+var _isCompatTag = require("./validators/react/isCompatTag");
+
+var _buildChildren = require("./builders/react/buildChildren");
+
+var _assertNode = require("./asserts/assertNode");
+
+var _generated = require("./asserts/generated");
+
+Object.keys(_generated).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _generated[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _generated[key];
+ }
+ });
+});
+
+var _createTypeAnnotationBasedOnTypeof = require("./builders/flow/createTypeAnnotationBasedOnTypeof");
+
+var _createFlowUnionType = require("./builders/flow/createFlowUnionType");
+
+var _createTSUnionType = require("./builders/typescript/createTSUnionType");
+
+var _generated2 = require("./builders/generated");
+
+Object.keys(_generated2).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _generated2[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _generated2[key];
+ }
+ });
+});
+
+var _uppercase = require("./builders/generated/uppercase");
+
+Object.keys(_uppercase).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _uppercase[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _uppercase[key];
+ }
+ });
+});
+
+var _cloneNode = require("./clone/cloneNode");
+
+var _clone = require("./clone/clone");
+
+var _cloneDeep = require("./clone/cloneDeep");
+
+var _cloneDeepWithoutLoc = require("./clone/cloneDeepWithoutLoc");
+
+var _cloneWithoutLoc = require("./clone/cloneWithoutLoc");
+
+var _addComment = require("./comments/addComment");
+
+var _addComments = require("./comments/addComments");
+
+var _inheritInnerComments = require("./comments/inheritInnerComments");
+
+var _inheritLeadingComments = require("./comments/inheritLeadingComments");
+
+var _inheritsComments = require("./comments/inheritsComments");
+
+var _inheritTrailingComments = require("./comments/inheritTrailingComments");
+
+var _removeComments = require("./comments/removeComments");
+
+var _generated3 = require("./constants/generated");
+
+Object.keys(_generated3).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _generated3[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _generated3[key];
+ }
+ });
+});
+
+var _constants = require("./constants");
+
+Object.keys(_constants).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _constants[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _constants[key];
+ }
+ });
+});
+
+var _ensureBlock = require("./converters/ensureBlock");
+
+var _toBindingIdentifierName = require("./converters/toBindingIdentifierName");
+
+var _toBlock = require("./converters/toBlock");
+
+var _toComputedKey = require("./converters/toComputedKey");
+
+var _toExpression = require("./converters/toExpression");
+
+var _toIdentifier = require("./converters/toIdentifier");
+
+var _toKeyAlias = require("./converters/toKeyAlias");
+
+var _toSequenceExpression = require("./converters/toSequenceExpression");
+
+var _toStatement = require("./converters/toStatement");
+
+var _valueToNode = require("./converters/valueToNode");
+
+var _definitions = require("./definitions");
+
+Object.keys(_definitions).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _definitions[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _definitions[key];
+ }
+ });
+});
+
+var _appendToMemberExpression = require("./modifications/appendToMemberExpression");
+
+var _inherits = require("./modifications/inherits");
+
+var _prependToMemberExpression = require("./modifications/prependToMemberExpression");
+
+var _removeProperties = require("./modifications/removeProperties");
+
+var _removePropertiesDeep = require("./modifications/removePropertiesDeep");
+
+var _removeTypeDuplicates = require("./modifications/flow/removeTypeDuplicates");
+
+var _getBindingIdentifiers = require("./retrievers/getBindingIdentifiers");
+
+var _getOuterBindingIdentifiers = require("./retrievers/getOuterBindingIdentifiers");
+
+var _traverse = require("./traverse/traverse");
+
+Object.keys(_traverse).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _traverse[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _traverse[key];
+ }
+ });
+});
+
+var _traverseFast = require("./traverse/traverseFast");
+
+var _shallowEqual = require("./utils/shallowEqual");
+
+var _is = require("./validators/is");
+
+var _isBinding = require("./validators/isBinding");
+
+var _isBlockScoped = require("./validators/isBlockScoped");
+
+var _isImmutable = require("./validators/isImmutable");
+
+var _isLet = require("./validators/isLet");
+
+var _isNode = require("./validators/isNode");
+
+var _isNodesEquivalent = require("./validators/isNodesEquivalent");
+
+var _isPlaceholderType = require("./validators/isPlaceholderType");
+
+var _isReferenced = require("./validators/isReferenced");
+
+var _isScope = require("./validators/isScope");
+
+var _isSpecifierDefault = require("./validators/isSpecifierDefault");
+
+var _isType = require("./validators/isType");
+
+var _isValidES3Identifier = require("./validators/isValidES3Identifier");
+
+var _isValidIdentifier = require("./validators/isValidIdentifier");
+
+var _isVar = require("./validators/isVar");
+
+var _matchesPattern = require("./validators/matchesPattern");
+
+var _validate = require("./validators/validate");
+
+var _buildMatchMemberExpression = require("./validators/buildMatchMemberExpression");
+
+var _generated4 = require("./validators/generated");
+
+Object.keys(_generated4).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _generated4[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _generated4[key];
+ }
+ });
+});
+
+var _generated5 = require("./ast-types/generated");
+
+Object.keys(_generated5).forEach(function (key) {
+ if (key === "default" || key === "__esModule") return;
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+ if (key in exports && exports[key] === _generated5[key]) return;
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: function () {
+ return _generated5[key];
+ }
+ });
+});
+const react = {
+ isReactComponent: _isReactComponent.default,
+ isCompatTag: _isCompatTag.default,
+ buildChildren: _buildChildren.default
+};
+exports.react = react; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/index.js.flow b/chromium/third_party/node/node_modules/@babel/types/lib/index.js.flow
new file mode 100644
index 00000000000..315ab9c9e8a
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/index.js.flow
@@ -0,0 +1,2539 @@
+// NOTE: This file is autogenerated. Do not modify.
+// See packages/babel-types/scripts/generators/flow.js for script used.
+
+declare class BabelNodeComment {
+ value: string;
+ start: number;
+ end: number;
+ loc: BabelNodeSourceLocation;
+}
+
+declare class BabelNodeCommentBlock extends BabelNodeComment {
+ type: "CommentBlock";
+}
+
+declare class BabelNodeCommentLine extends BabelNodeComment {
+ type: "CommentLine";
+}
+
+declare class BabelNodeSourceLocation {
+ start: {
+ line: number;
+ column: number;
+ };
+
+ end: {
+ line: number;
+ column: number;
+ };
+}
+
+declare class BabelNode {
+ leadingComments?: Array<BabelNodeComment>;
+ innerComments?: Array<BabelNodeComment>;
+ trailingComments?: Array<BabelNodeComment>;
+ start: ?number;
+ end: ?number;
+ loc: ?BabelNodeSourceLocation;
+ extra?: { [string]: mixed };
+}
+
+declare class BabelNodeArrayExpression extends BabelNode {
+ type: "ArrayExpression";
+ elements?: Array<null | BabelNodeExpression | BabelNodeSpreadElement>;
+}
+
+declare class BabelNodeAssignmentExpression extends BabelNode {
+ type: "AssignmentExpression";
+ operator: string;
+ left: BabelNodeLVal;
+ right: BabelNodeExpression;
+}
+
+declare class BabelNodeBinaryExpression extends BabelNode {
+ type: "BinaryExpression";
+ operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=";
+ left: BabelNodeExpression | BabelNodePrivateName;
+ right: BabelNodeExpression;
+}
+
+declare class BabelNodeInterpreterDirective extends BabelNode {
+ type: "InterpreterDirective";
+ value: string;
+}
+
+declare class BabelNodeDirective extends BabelNode {
+ type: "Directive";
+ value: BabelNodeDirectiveLiteral;
+}
+
+declare class BabelNodeDirectiveLiteral extends BabelNode {
+ type: "DirectiveLiteral";
+ value: string;
+}
+
+declare class BabelNodeBlockStatement extends BabelNode {
+ type: "BlockStatement";
+ body: Array<BabelNodeStatement>;
+ directives?: Array<BabelNodeDirective>;
+}
+
+declare class BabelNodeBreakStatement extends BabelNode {
+ type: "BreakStatement";
+ label?: BabelNodeIdentifier;
+}
+
+declare class BabelNodeCallExpression extends BabelNode {
+ type: "CallExpression";
+ callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier;
+ arguments: Array<BabelNodeExpression | BabelNodeSpreadElement | BabelNodeJSXNamespacedName | BabelNodeArgumentPlaceholder>;
+ optional?: true | false;
+ typeArguments?: BabelNodeTypeParameterInstantiation;
+ typeParameters?: BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeCatchClause extends BabelNode {
+ type: "CatchClause";
+ param?: BabelNodeIdentifier | BabelNodeArrayPattern | BabelNodeObjectPattern;
+ body: BabelNodeBlockStatement;
+}
+
+declare class BabelNodeConditionalExpression extends BabelNode {
+ type: "ConditionalExpression";
+ test: BabelNodeExpression;
+ consequent: BabelNodeExpression;
+ alternate: BabelNodeExpression;
+}
+
+declare class BabelNodeContinueStatement extends BabelNode {
+ type: "ContinueStatement";
+ label?: BabelNodeIdentifier;
+}
+
+declare class BabelNodeDebuggerStatement extends BabelNode {
+ type: "DebuggerStatement";
+}
+
+declare class BabelNodeDoWhileStatement extends BabelNode {
+ type: "DoWhileStatement";
+ test: BabelNodeExpression;
+ body: BabelNodeStatement;
+}
+
+declare class BabelNodeEmptyStatement extends BabelNode {
+ type: "EmptyStatement";
+}
+
+declare class BabelNodeExpressionStatement extends BabelNode {
+ type: "ExpressionStatement";
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodeFile extends BabelNode {
+ type: "File";
+ program: BabelNodeProgram;
+ comments?: Array<BabelNodeCommentBlock | BabelNodeCommentLine>;
+ tokens?: Array<any>;
+}
+
+declare class BabelNodeForInStatement extends BabelNode {
+ type: "ForInStatement";
+ left: BabelNodeVariableDeclaration | BabelNodeLVal;
+ right: BabelNodeExpression;
+ body: BabelNodeStatement;
+}
+
+declare class BabelNodeForStatement extends BabelNode {
+ type: "ForStatement";
+ init?: BabelNodeVariableDeclaration | BabelNodeExpression;
+ test?: BabelNodeExpression;
+ update?: BabelNodeExpression;
+ body: BabelNodeStatement;
+}
+
+declare class BabelNodeFunctionDeclaration extends BabelNode {
+ type: "FunctionDeclaration";
+ id?: BabelNodeIdentifier;
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>;
+ body: BabelNodeBlockStatement;
+ generator?: boolean;
+ async?: boolean;
+ declare?: boolean;
+ returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodeFunctionExpression extends BabelNode {
+ type: "FunctionExpression";
+ id?: BabelNodeIdentifier;
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>;
+ body: BabelNodeBlockStatement;
+ generator?: boolean;
+ async?: boolean;
+ returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodeIdentifier extends BabelNode {
+ type: "Identifier";
+ name: string;
+ decorators?: Array<BabelNodeDecorator>;
+ optional?: boolean;
+ typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+}
+
+declare class BabelNodeIfStatement extends BabelNode {
+ type: "IfStatement";
+ test: BabelNodeExpression;
+ consequent: BabelNodeStatement;
+ alternate?: BabelNodeStatement;
+}
+
+declare class BabelNodeLabeledStatement extends BabelNode {
+ type: "LabeledStatement";
+ label: BabelNodeIdentifier;
+ body: BabelNodeStatement;
+}
+
+declare class BabelNodeStringLiteral extends BabelNode {
+ type: "StringLiteral";
+ value: string;
+}
+
+declare class BabelNodeNumericLiteral extends BabelNode {
+ type: "NumericLiteral";
+ value: number;
+}
+
+declare class BabelNodeNullLiteral extends BabelNode {
+ type: "NullLiteral";
+}
+
+declare class BabelNodeBooleanLiteral extends BabelNode {
+ type: "BooleanLiteral";
+ value: boolean;
+}
+
+declare class BabelNodeRegExpLiteral extends BabelNode {
+ type: "RegExpLiteral";
+ pattern: string;
+ flags?: string;
+}
+
+declare class BabelNodeLogicalExpression extends BabelNode {
+ type: "LogicalExpression";
+ operator: "||" | "&&" | "??";
+ left: BabelNodeExpression;
+ right: BabelNodeExpression;
+}
+
+declare class BabelNodeMemberExpression extends BabelNode {
+ type: "MemberExpression";
+ object: BabelNodeExpression;
+ property: BabelNodeExpression | BabelNodeIdentifier | BabelNodePrivateName;
+ computed?: boolean;
+ optional?: true | false;
+}
+
+declare class BabelNodeNewExpression extends BabelNode {
+ type: "NewExpression";
+ callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier;
+ arguments: Array<BabelNodeExpression | BabelNodeSpreadElement | BabelNodeJSXNamespacedName | BabelNodeArgumentPlaceholder>;
+ optional?: true | false;
+ typeArguments?: BabelNodeTypeParameterInstantiation;
+ typeParameters?: BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeProgram extends BabelNode {
+ type: "Program";
+ body: Array<BabelNodeStatement>;
+ directives?: Array<BabelNodeDirective>;
+ sourceType?: "script" | "module";
+ interpreter?: BabelNodeInterpreterDirective;
+ sourceFile: string;
+}
+
+declare class BabelNodeObjectExpression extends BabelNode {
+ type: "ObjectExpression";
+ properties: Array<BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeSpreadElement>;
+}
+
+declare class BabelNodeObjectMethod extends BabelNode {
+ type: "ObjectMethod";
+ kind?: "method" | "get" | "set";
+ key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral;
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>;
+ body: BabelNodeBlockStatement;
+ computed?: boolean;
+ generator?: boolean;
+ async?: boolean;
+ decorators?: Array<BabelNodeDecorator>;
+ returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodeObjectProperty extends BabelNode {
+ type: "ObjectProperty";
+ key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral;
+ value: BabelNodeExpression | BabelNodePatternLike;
+ computed?: boolean;
+ shorthand?: boolean;
+ decorators?: Array<BabelNodeDecorator>;
+}
+
+declare class BabelNodeRestElement extends BabelNode {
+ type: "RestElement";
+ argument: BabelNodeLVal;
+ decorators?: Array<BabelNodeDecorator>;
+ optional?: boolean;
+ typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+}
+
+declare class BabelNodeReturnStatement extends BabelNode {
+ type: "ReturnStatement";
+ argument?: BabelNodeExpression;
+}
+
+declare class BabelNodeSequenceExpression extends BabelNode {
+ type: "SequenceExpression";
+ expressions: Array<BabelNodeExpression>;
+}
+
+declare class BabelNodeParenthesizedExpression extends BabelNode {
+ type: "ParenthesizedExpression";
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodeSwitchCase extends BabelNode {
+ type: "SwitchCase";
+ test?: BabelNodeExpression;
+ consequent: Array<BabelNodeStatement>;
+}
+
+declare class BabelNodeSwitchStatement extends BabelNode {
+ type: "SwitchStatement";
+ discriminant: BabelNodeExpression;
+ cases: Array<BabelNodeSwitchCase>;
+}
+
+declare class BabelNodeThisExpression extends BabelNode {
+ type: "ThisExpression";
+}
+
+declare class BabelNodeThrowStatement extends BabelNode {
+ type: "ThrowStatement";
+ argument: BabelNodeExpression;
+}
+
+declare class BabelNodeTryStatement extends BabelNode {
+ type: "TryStatement";
+ block: BabelNodeBlockStatement;
+ handler?: BabelNodeCatchClause;
+ finalizer?: BabelNodeBlockStatement;
+}
+
+declare class BabelNodeUnaryExpression extends BabelNode {
+ type: "UnaryExpression";
+ operator: "void" | "throw" | "delete" | "!" | "+" | "-" | "~" | "typeof";
+ argument: BabelNodeExpression;
+ prefix?: boolean;
+}
+
+declare class BabelNodeUpdateExpression extends BabelNode {
+ type: "UpdateExpression";
+ operator: "++" | "--";
+ argument: BabelNodeExpression;
+ prefix?: boolean;
+}
+
+declare class BabelNodeVariableDeclaration extends BabelNode {
+ type: "VariableDeclaration";
+ kind: "var" | "let" | "const";
+ declarations: Array<BabelNodeVariableDeclarator>;
+ declare?: boolean;
+}
+
+declare class BabelNodeVariableDeclarator extends BabelNode {
+ type: "VariableDeclarator";
+ id: BabelNodeLVal;
+ init?: BabelNodeExpression;
+ definite?: boolean;
+}
+
+declare class BabelNodeWhileStatement extends BabelNode {
+ type: "WhileStatement";
+ test: BabelNodeExpression;
+ body: BabelNodeStatement;
+}
+
+declare class BabelNodeWithStatement extends BabelNode {
+ type: "WithStatement";
+ object: BabelNodeExpression;
+ body: BabelNodeStatement;
+}
+
+declare class BabelNodeAssignmentPattern extends BabelNode {
+ type: "AssignmentPattern";
+ left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern | BabelNodeMemberExpression;
+ right: BabelNodeExpression;
+ decorators?: Array<BabelNodeDecorator>;
+ typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+}
+
+declare class BabelNodeArrayPattern extends BabelNode {
+ type: "ArrayPattern";
+ elements: Array<null | BabelNodePatternLike>;
+ decorators?: Array<BabelNodeDecorator>;
+ optional?: boolean;
+ typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+}
+
+declare class BabelNodeArrowFunctionExpression extends BabelNode {
+ type: "ArrowFunctionExpression";
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>;
+ body: BabelNodeBlockStatement | BabelNodeExpression;
+ async?: boolean;
+ expression: boolean;
+ generator?: boolean;
+ returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodeClassBody extends BabelNode {
+ type: "ClassBody";
+ body: Array<BabelNodeClassMethod | BabelNodeClassPrivateMethod | BabelNodeClassProperty | BabelNodeClassPrivateProperty | BabelNodeTSDeclareMethod | BabelNodeTSIndexSignature>;
+}
+
+declare class BabelNodeClassExpression extends BabelNode {
+ type: "ClassExpression";
+ id?: BabelNodeIdentifier;
+ superClass?: BabelNodeExpression;
+ body: BabelNodeClassBody;
+ decorators?: Array<BabelNodeDecorator>;
+ mixins?: BabelNodeInterfaceExtends;
+ superTypeParameters?: BabelNodeTypeParameterInstantiation | BabelNodeTSTypeParameterInstantiation;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodeClassDeclaration extends BabelNode {
+ type: "ClassDeclaration";
+ id: BabelNodeIdentifier;
+ superClass?: BabelNodeExpression;
+ body: BabelNodeClassBody;
+ decorators?: Array<BabelNodeDecorator>;
+ abstract?: boolean;
+ declare?: boolean;
+ mixins?: BabelNodeInterfaceExtends;
+ superTypeParameters?: BabelNodeTypeParameterInstantiation | BabelNodeTSTypeParameterInstantiation;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodeExportAllDeclaration extends BabelNode {
+ type: "ExportAllDeclaration";
+ source: BabelNodeStringLiteral;
+ assertions?: Array<BabelNodeImportAttribute>;
+ exportKind?: "type" | "value";
+}
+
+declare class BabelNodeExportDefaultDeclaration extends BabelNode {
+ type: "ExportDefaultDeclaration";
+ declaration: BabelNodeFunctionDeclaration | BabelNodeTSDeclareFunction | BabelNodeClassDeclaration | BabelNodeExpression;
+ exportKind?: "value";
+}
+
+declare class BabelNodeExportNamedDeclaration extends BabelNode {
+ type: "ExportNamedDeclaration";
+ declaration?: BabelNodeDeclaration;
+ specifiers?: Array<BabelNodeExportSpecifier | BabelNodeExportDefaultSpecifier | BabelNodeExportNamespaceSpecifier>;
+ source?: BabelNodeStringLiteral;
+ assertions?: Array<BabelNodeImportAttribute>;
+ exportKind?: "type" | "value";
+}
+
+declare class BabelNodeExportSpecifier extends BabelNode {
+ type: "ExportSpecifier";
+ local: BabelNodeIdentifier;
+ exported: BabelNodeIdentifier | BabelNodeStringLiteral;
+}
+
+declare class BabelNodeForOfStatement extends BabelNode {
+ type: "ForOfStatement";
+ left: BabelNodeVariableDeclaration | BabelNodeLVal;
+ right: BabelNodeExpression;
+ body: BabelNodeStatement;
+}
+
+declare class BabelNodeImportDeclaration extends BabelNode {
+ type: "ImportDeclaration";
+ specifiers: Array<BabelNodeImportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier>;
+ source: BabelNodeStringLiteral;
+ assertions?: Array<BabelNodeImportAttribute>;
+ importKind?: "type" | "typeof" | "value";
+}
+
+declare class BabelNodeImportDefaultSpecifier extends BabelNode {
+ type: "ImportDefaultSpecifier";
+ local: BabelNodeIdentifier;
+}
+
+declare class BabelNodeImportNamespaceSpecifier extends BabelNode {
+ type: "ImportNamespaceSpecifier";
+ local: BabelNodeIdentifier;
+}
+
+declare class BabelNodeImportSpecifier extends BabelNode {
+ type: "ImportSpecifier";
+ local: BabelNodeIdentifier;
+ imported: BabelNodeIdentifier | BabelNodeStringLiteral;
+ importKind?: "type" | "typeof";
+}
+
+declare class BabelNodeMetaProperty extends BabelNode {
+ type: "MetaProperty";
+ meta: BabelNodeIdentifier;
+ property: BabelNodeIdentifier;
+}
+
+declare class BabelNodeClassMethod extends BabelNode {
+ type: "ClassMethod";
+ kind?: "get" | "set" | "method" | "constructor";
+ key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression;
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement | BabelNodeTSParameterProperty>;
+ body: BabelNodeBlockStatement;
+ computed?: boolean;
+ generator?: boolean;
+ async?: boolean;
+ abstract?: boolean;
+ access?: "public" | "private" | "protected";
+ accessibility?: "public" | "private" | "protected";
+ decorators?: Array<BabelNodeDecorator>;
+ optional?: boolean;
+ override?: boolean;
+ returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodeObjectPattern extends BabelNode {
+ type: "ObjectPattern";
+ properties: Array<BabelNodeRestElement | BabelNodeObjectProperty>;
+ decorators?: Array<BabelNodeDecorator>;
+ typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+}
+
+declare class BabelNodeSpreadElement extends BabelNode {
+ type: "SpreadElement";
+ argument: BabelNodeExpression;
+}
+
+declare class BabelNodeSuper extends BabelNode {
+ type: "Super";
+}
+
+declare class BabelNodeTaggedTemplateExpression extends BabelNode {
+ type: "TaggedTemplateExpression";
+ tag: BabelNodeExpression;
+ quasi: BabelNodeTemplateLiteral;
+ typeParameters?: BabelNodeTypeParameterInstantiation | BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeTemplateElement extends BabelNode {
+ type: "TemplateElement";
+ value: { raw: string, cooked?: string };
+ tail?: boolean;
+}
+
+declare class BabelNodeTemplateLiteral extends BabelNode {
+ type: "TemplateLiteral";
+ quasis: Array<BabelNodeTemplateElement>;
+ expressions: Array<BabelNodeExpression | BabelNodeTSType>;
+}
+
+declare class BabelNodeYieldExpression extends BabelNode {
+ type: "YieldExpression";
+ argument?: BabelNodeExpression;
+ delegate?: boolean;
+}
+
+declare class BabelNodeAwaitExpression extends BabelNode {
+ type: "AwaitExpression";
+ argument: BabelNodeExpression;
+}
+
+declare class BabelNodeImport extends BabelNode {
+ type: "Import";
+}
+
+declare class BabelNodeBigIntLiteral extends BabelNode {
+ type: "BigIntLiteral";
+ value: string;
+}
+
+declare class BabelNodeExportNamespaceSpecifier extends BabelNode {
+ type: "ExportNamespaceSpecifier";
+ exported: BabelNodeIdentifier;
+}
+
+declare class BabelNodeOptionalMemberExpression extends BabelNode {
+ type: "OptionalMemberExpression";
+ object: BabelNodeExpression;
+ property: BabelNodeExpression | BabelNodeIdentifier;
+ computed?: boolean;
+ optional: boolean;
+}
+
+declare class BabelNodeOptionalCallExpression extends BabelNode {
+ type: "OptionalCallExpression";
+ callee: BabelNodeExpression;
+ arguments: Array<BabelNodeExpression | BabelNodeSpreadElement | BabelNodeJSXNamespacedName | BabelNodeArgumentPlaceholder>;
+ optional: boolean;
+ typeArguments?: BabelNodeTypeParameterInstantiation;
+ typeParameters?: BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeClassProperty extends BabelNode {
+ type: "ClassProperty";
+ key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression;
+ value?: BabelNodeExpression;
+ typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ decorators?: Array<BabelNodeDecorator>;
+ computed?: boolean;
+ abstract?: boolean;
+ accessibility?: "public" | "private" | "protected";
+ declare?: boolean;
+ definite?: boolean;
+ optional?: boolean;
+ override?: boolean;
+ readonly?: boolean;
+ variance?: BabelNodeVariance;
+}
+
+declare class BabelNodeClassPrivateProperty extends BabelNode {
+ type: "ClassPrivateProperty";
+ key: BabelNodePrivateName;
+ value?: BabelNodeExpression;
+ decorators?: Array<BabelNodeDecorator>;
+ definite?: boolean;
+ readonly?: boolean;
+ typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ variance?: BabelNodeVariance;
+}
+
+declare class BabelNodeClassPrivateMethod extends BabelNode {
+ type: "ClassPrivateMethod";
+ kind?: "get" | "set" | "method" | "constructor";
+ key: BabelNodePrivateName;
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement | BabelNodeTSParameterProperty>;
+ body: BabelNodeBlockStatement;
+ abstract?: boolean;
+ access?: "public" | "private" | "protected";
+ accessibility?: "public" | "private" | "protected";
+ async?: boolean;
+ computed?: boolean;
+ decorators?: Array<BabelNodeDecorator>;
+ generator?: boolean;
+ optional?: boolean;
+ override?: boolean;
+ returnType?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ typeParameters?: BabelNodeTypeParameterDeclaration | BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+}
+
+declare class BabelNodePrivateName extends BabelNode {
+ type: "PrivateName";
+ id: BabelNodeIdentifier;
+}
+
+declare class BabelNodeAnyTypeAnnotation extends BabelNode {
+ type: "AnyTypeAnnotation";
+}
+
+declare class BabelNodeArrayTypeAnnotation extends BabelNode {
+ type: "ArrayTypeAnnotation";
+ elementType: BabelNodeFlowType;
+}
+
+declare class BabelNodeBooleanTypeAnnotation extends BabelNode {
+ type: "BooleanTypeAnnotation";
+}
+
+declare class BabelNodeBooleanLiteralTypeAnnotation extends BabelNode {
+ type: "BooleanLiteralTypeAnnotation";
+ value: boolean;
+}
+
+declare class BabelNodeNullLiteralTypeAnnotation extends BabelNode {
+ type: "NullLiteralTypeAnnotation";
+}
+
+declare class BabelNodeClassImplements extends BabelNode {
+ type: "ClassImplements";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterInstantiation;
+}
+
+declare class BabelNodeDeclareClass extends BabelNode {
+ type: "DeclareClass";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ body: BabelNodeObjectTypeAnnotation;
+ mixins?: Array<BabelNodeInterfaceExtends>;
+}
+
+declare class BabelNodeDeclareFunction extends BabelNode {
+ type: "DeclareFunction";
+ id: BabelNodeIdentifier;
+ predicate?: BabelNodeDeclaredPredicate;
+}
+
+declare class BabelNodeDeclareInterface extends BabelNode {
+ type: "DeclareInterface";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ body: BabelNodeObjectTypeAnnotation;
+ mixins?: Array<BabelNodeInterfaceExtends>;
+}
+
+declare class BabelNodeDeclareModule extends BabelNode {
+ type: "DeclareModule";
+ id: BabelNodeIdentifier | BabelNodeStringLiteral;
+ body: BabelNodeBlockStatement;
+ kind?: "CommonJS" | "ES";
+}
+
+declare class BabelNodeDeclareModuleExports extends BabelNode {
+ type: "DeclareModuleExports";
+ typeAnnotation: BabelNodeTypeAnnotation;
+}
+
+declare class BabelNodeDeclareTypeAlias extends BabelNode {
+ type: "DeclareTypeAlias";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ right: BabelNodeFlowType;
+}
+
+declare class BabelNodeDeclareOpaqueType extends BabelNode {
+ type: "DeclareOpaqueType";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ supertype?: BabelNodeFlowType;
+ impltype?: BabelNodeFlowType;
+}
+
+declare class BabelNodeDeclareVariable extends BabelNode {
+ type: "DeclareVariable";
+ id: BabelNodeIdentifier;
+}
+
+declare class BabelNodeDeclareExportDeclaration extends BabelNode {
+ type: "DeclareExportDeclaration";
+ declaration?: BabelNodeFlow;
+ specifiers?: Array<BabelNodeExportSpecifier | BabelNodeExportNamespaceSpecifier>;
+ source?: BabelNodeStringLiteral;
+}
+
+declare class BabelNodeDeclareExportAllDeclaration extends BabelNode {
+ type: "DeclareExportAllDeclaration";
+ source: BabelNodeStringLiteral;
+ exportKind?: "type" | "value";
+}
+
+declare class BabelNodeDeclaredPredicate extends BabelNode {
+ type: "DeclaredPredicate";
+ value: BabelNodeFlow;
+}
+
+declare class BabelNodeExistsTypeAnnotation extends BabelNode {
+ type: "ExistsTypeAnnotation";
+}
+
+declare class BabelNodeFunctionTypeAnnotation extends BabelNode {
+ type: "FunctionTypeAnnotation";
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ params: Array<BabelNodeFunctionTypeParam>;
+ rest?: BabelNodeFunctionTypeParam;
+ returnType: BabelNodeFlowType;
+}
+
+declare class BabelNodeFunctionTypeParam extends BabelNode {
+ type: "FunctionTypeParam";
+ name?: BabelNodeIdentifier;
+ typeAnnotation: BabelNodeFlowType;
+ optional?: boolean;
+}
+
+declare class BabelNodeGenericTypeAnnotation extends BabelNode {
+ type: "GenericTypeAnnotation";
+ id: BabelNodeIdentifier | BabelNodeQualifiedTypeIdentifier;
+ typeParameters?: BabelNodeTypeParameterInstantiation;
+}
+
+declare class BabelNodeInferredPredicate extends BabelNode {
+ type: "InferredPredicate";
+}
+
+declare class BabelNodeInterfaceExtends extends BabelNode {
+ type: "InterfaceExtends";
+ id: BabelNodeIdentifier | BabelNodeQualifiedTypeIdentifier;
+ typeParameters?: BabelNodeTypeParameterInstantiation;
+}
+
+declare class BabelNodeInterfaceDeclaration extends BabelNode {
+ type: "InterfaceDeclaration";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ body: BabelNodeObjectTypeAnnotation;
+ mixins?: Array<BabelNodeInterfaceExtends>;
+}
+
+declare class BabelNodeInterfaceTypeAnnotation extends BabelNode {
+ type: "InterfaceTypeAnnotation";
+ body: BabelNodeObjectTypeAnnotation;
+}
+
+declare class BabelNodeIntersectionTypeAnnotation extends BabelNode {
+ type: "IntersectionTypeAnnotation";
+ types: Array<BabelNodeFlowType>;
+}
+
+declare class BabelNodeMixedTypeAnnotation extends BabelNode {
+ type: "MixedTypeAnnotation";
+}
+
+declare class BabelNodeEmptyTypeAnnotation extends BabelNode {
+ type: "EmptyTypeAnnotation";
+}
+
+declare class BabelNodeNullableTypeAnnotation extends BabelNode {
+ type: "NullableTypeAnnotation";
+ typeAnnotation: BabelNodeFlowType;
+}
+
+declare class BabelNodeNumberLiteralTypeAnnotation extends BabelNode {
+ type: "NumberLiteralTypeAnnotation";
+ value: number;
+}
+
+declare class BabelNodeNumberTypeAnnotation extends BabelNode {
+ type: "NumberTypeAnnotation";
+}
+
+declare class BabelNodeObjectTypeAnnotation extends BabelNode {
+ type: "ObjectTypeAnnotation";
+ properties: Array<BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty>;
+ indexers?: Array<BabelNodeObjectTypeIndexer>;
+ callProperties?: Array<BabelNodeObjectTypeCallProperty>;
+ internalSlots?: Array<BabelNodeObjectTypeInternalSlot>;
+ exact?: boolean;
+ inexact?: boolean;
+}
+
+declare class BabelNodeObjectTypeInternalSlot extends BabelNode {
+ type: "ObjectTypeInternalSlot";
+ id: BabelNodeIdentifier;
+ value: BabelNodeFlowType;
+ optional: boolean;
+ method: boolean;
+}
+
+declare class BabelNodeObjectTypeCallProperty extends BabelNode {
+ type: "ObjectTypeCallProperty";
+ value: BabelNodeFlowType;
+}
+
+declare class BabelNodeObjectTypeIndexer extends BabelNode {
+ type: "ObjectTypeIndexer";
+ id?: BabelNodeIdentifier;
+ key: BabelNodeFlowType;
+ value: BabelNodeFlowType;
+ variance?: BabelNodeVariance;
+}
+
+declare class BabelNodeObjectTypeProperty extends BabelNode {
+ type: "ObjectTypeProperty";
+ key: BabelNodeIdentifier | BabelNodeStringLiteral;
+ value: BabelNodeFlowType;
+ variance?: BabelNodeVariance;
+ kind: "init" | "get" | "set";
+ method: boolean;
+ optional: boolean;
+ proto: boolean;
+}
+
+declare class BabelNodeObjectTypeSpreadProperty extends BabelNode {
+ type: "ObjectTypeSpreadProperty";
+ argument: BabelNodeFlowType;
+}
+
+declare class BabelNodeOpaqueType extends BabelNode {
+ type: "OpaqueType";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ supertype?: BabelNodeFlowType;
+ impltype: BabelNodeFlowType;
+}
+
+declare class BabelNodeQualifiedTypeIdentifier extends BabelNode {
+ type: "QualifiedTypeIdentifier";
+ id: BabelNodeIdentifier;
+ qualification: BabelNodeIdentifier | BabelNodeQualifiedTypeIdentifier;
+}
+
+declare class BabelNodeStringLiteralTypeAnnotation extends BabelNode {
+ type: "StringLiteralTypeAnnotation";
+ value: string;
+}
+
+declare class BabelNodeStringTypeAnnotation extends BabelNode {
+ type: "StringTypeAnnotation";
+}
+
+declare class BabelNodeSymbolTypeAnnotation extends BabelNode {
+ type: "SymbolTypeAnnotation";
+}
+
+declare class BabelNodeThisTypeAnnotation extends BabelNode {
+ type: "ThisTypeAnnotation";
+}
+
+declare class BabelNodeTupleTypeAnnotation extends BabelNode {
+ type: "TupleTypeAnnotation";
+ types: Array<BabelNodeFlowType>;
+}
+
+declare class BabelNodeTypeofTypeAnnotation extends BabelNode {
+ type: "TypeofTypeAnnotation";
+ argument: BabelNodeFlowType;
+}
+
+declare class BabelNodeTypeAlias extends BabelNode {
+ type: "TypeAlias";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTypeParameterDeclaration;
+ right: BabelNodeFlowType;
+}
+
+declare class BabelNodeTypeAnnotation extends BabelNode {
+ type: "TypeAnnotation";
+ typeAnnotation: BabelNodeFlowType;
+}
+
+declare class BabelNodeTypeCastExpression extends BabelNode {
+ type: "TypeCastExpression";
+ expression: BabelNodeExpression;
+ typeAnnotation: BabelNodeTypeAnnotation;
+}
+
+declare class BabelNodeTypeParameter extends BabelNode {
+ type: "TypeParameter";
+ bound?: BabelNodeTypeAnnotation;
+ variance?: BabelNodeVariance;
+ name: string;
+}
+
+declare class BabelNodeTypeParameterDeclaration extends BabelNode {
+ type: "TypeParameterDeclaration";
+ params: Array<BabelNodeTypeParameter>;
+}
+
+declare class BabelNodeTypeParameterInstantiation extends BabelNode {
+ type: "TypeParameterInstantiation";
+ params: Array<BabelNodeFlowType>;
+}
+
+declare class BabelNodeUnionTypeAnnotation extends BabelNode {
+ type: "UnionTypeAnnotation";
+ types: Array<BabelNodeFlowType>;
+}
+
+declare class BabelNodeVariance extends BabelNode {
+ type: "Variance";
+ kind: "minus" | "plus";
+}
+
+declare class BabelNodeVoidTypeAnnotation extends BabelNode {
+ type: "VoidTypeAnnotation";
+}
+
+declare class BabelNodeEnumDeclaration extends BabelNode {
+ type: "EnumDeclaration";
+ id: BabelNodeIdentifier;
+ body: BabelNodeEnumBooleanBody | BabelNodeEnumNumberBody | BabelNodeEnumStringBody | BabelNodeEnumSymbolBody;
+}
+
+declare class BabelNodeEnumBooleanBody extends BabelNode {
+ type: "EnumBooleanBody";
+ members: Array<BabelNodeEnumBooleanMember>;
+ explicitType: boolean;
+ hasUnknownMembers: boolean;
+}
+
+declare class BabelNodeEnumNumberBody extends BabelNode {
+ type: "EnumNumberBody";
+ members: Array<BabelNodeEnumNumberMember>;
+ explicitType: boolean;
+ hasUnknownMembers: boolean;
+}
+
+declare class BabelNodeEnumStringBody extends BabelNode {
+ type: "EnumStringBody";
+ members: Array<BabelNodeEnumStringMember | BabelNodeEnumDefaultedMember>;
+ explicitType: boolean;
+ hasUnknownMembers: boolean;
+}
+
+declare class BabelNodeEnumSymbolBody extends BabelNode {
+ type: "EnumSymbolBody";
+ members: Array<BabelNodeEnumDefaultedMember>;
+ hasUnknownMembers: boolean;
+}
+
+declare class BabelNodeEnumBooleanMember extends BabelNode {
+ type: "EnumBooleanMember";
+ id: BabelNodeIdentifier;
+ init: BabelNodeBooleanLiteral;
+}
+
+declare class BabelNodeEnumNumberMember extends BabelNode {
+ type: "EnumNumberMember";
+ id: BabelNodeIdentifier;
+ init: BabelNodeNumericLiteral;
+}
+
+declare class BabelNodeEnumStringMember extends BabelNode {
+ type: "EnumStringMember";
+ id: BabelNodeIdentifier;
+ init: BabelNodeStringLiteral;
+}
+
+declare class BabelNodeEnumDefaultedMember extends BabelNode {
+ type: "EnumDefaultedMember";
+ id: BabelNodeIdentifier;
+}
+
+declare class BabelNodeIndexedAccessType extends BabelNode {
+ type: "IndexedAccessType";
+ objectType: BabelNodeFlowType;
+ indexType: BabelNodeFlowType;
+}
+
+declare class BabelNodeOptionalIndexedAccessType extends BabelNode {
+ type: "OptionalIndexedAccessType";
+ objectType: BabelNodeFlowType;
+ indexType: BabelNodeFlowType;
+ optional: boolean;
+}
+
+declare class BabelNodeJSXAttribute extends BabelNode {
+ type: "JSXAttribute";
+ name: BabelNodeJSXIdentifier | BabelNodeJSXNamespacedName;
+ value?: BabelNodeJSXElement | BabelNodeJSXFragment | BabelNodeStringLiteral | BabelNodeJSXExpressionContainer;
+}
+
+declare class BabelNodeJSXClosingElement extends BabelNode {
+ type: "JSXClosingElement";
+ name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName;
+}
+
+declare class BabelNodeJSXElement extends BabelNode {
+ type: "JSXElement";
+ openingElement: BabelNodeJSXOpeningElement;
+ closingElement?: BabelNodeJSXClosingElement;
+ children: Array<BabelNodeJSXText | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXElement | BabelNodeJSXFragment>;
+ selfClosing?: boolean;
+}
+
+declare class BabelNodeJSXEmptyExpression extends BabelNode {
+ type: "JSXEmptyExpression";
+}
+
+declare class BabelNodeJSXExpressionContainer extends BabelNode {
+ type: "JSXExpressionContainer";
+ expression: BabelNodeExpression | BabelNodeJSXEmptyExpression;
+}
+
+declare class BabelNodeJSXSpreadChild extends BabelNode {
+ type: "JSXSpreadChild";
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodeJSXIdentifier extends BabelNode {
+ type: "JSXIdentifier";
+ name: string;
+}
+
+declare class BabelNodeJSXMemberExpression extends BabelNode {
+ type: "JSXMemberExpression";
+ object: BabelNodeJSXMemberExpression | BabelNodeJSXIdentifier;
+ property: BabelNodeJSXIdentifier;
+}
+
+declare class BabelNodeJSXNamespacedName extends BabelNode {
+ type: "JSXNamespacedName";
+ namespace: BabelNodeJSXIdentifier;
+ name: BabelNodeJSXIdentifier;
+}
+
+declare class BabelNodeJSXOpeningElement extends BabelNode {
+ type: "JSXOpeningElement";
+ name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName;
+ attributes: Array<BabelNodeJSXAttribute | BabelNodeJSXSpreadAttribute>;
+ selfClosing?: boolean;
+ typeParameters?: BabelNodeTypeParameterInstantiation | BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeJSXSpreadAttribute extends BabelNode {
+ type: "JSXSpreadAttribute";
+ argument: BabelNodeExpression;
+}
+
+declare class BabelNodeJSXText extends BabelNode {
+ type: "JSXText";
+ value: string;
+}
+
+declare class BabelNodeJSXFragment extends BabelNode {
+ type: "JSXFragment";
+ openingFragment: BabelNodeJSXOpeningFragment;
+ closingFragment: BabelNodeJSXClosingFragment;
+ children: Array<BabelNodeJSXText | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXElement | BabelNodeJSXFragment>;
+}
+
+declare class BabelNodeJSXOpeningFragment extends BabelNode {
+ type: "JSXOpeningFragment";
+}
+
+declare class BabelNodeJSXClosingFragment extends BabelNode {
+ type: "JSXClosingFragment";
+}
+
+declare class BabelNodeNoop extends BabelNode {
+ type: "Noop";
+}
+
+declare class BabelNodePlaceholder extends BabelNode {
+ type: "Placeholder";
+ expectedNode: "Identifier" | "StringLiteral" | "Expression" | "Statement" | "Declaration" | "BlockStatement" | "ClassBody" | "Pattern";
+ name: BabelNodeIdentifier;
+}
+
+declare class BabelNodeV8IntrinsicIdentifier extends BabelNode {
+ type: "V8IntrinsicIdentifier";
+ name: string;
+}
+
+declare class BabelNodeArgumentPlaceholder extends BabelNode {
+ type: "ArgumentPlaceholder";
+}
+
+declare class BabelNodeBindExpression extends BabelNode {
+ type: "BindExpression";
+ object: BabelNodeExpression;
+ callee: BabelNodeExpression;
+}
+
+declare class BabelNodeImportAttribute extends BabelNode {
+ type: "ImportAttribute";
+ key: BabelNodeIdentifier | BabelNodeStringLiteral;
+ value: BabelNodeStringLiteral;
+}
+
+declare class BabelNodeDecorator extends BabelNode {
+ type: "Decorator";
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodeDoExpression extends BabelNode {
+ type: "DoExpression";
+ body: BabelNodeBlockStatement;
+ async?: boolean;
+}
+
+declare class BabelNodeExportDefaultSpecifier extends BabelNode {
+ type: "ExportDefaultSpecifier";
+ exported: BabelNodeIdentifier;
+}
+
+declare class BabelNodeRecordExpression extends BabelNode {
+ type: "RecordExpression";
+ properties: Array<BabelNodeObjectProperty | BabelNodeSpreadElement>;
+}
+
+declare class BabelNodeTupleExpression extends BabelNode {
+ type: "TupleExpression";
+ elements?: Array<BabelNodeExpression | BabelNodeSpreadElement>;
+}
+
+declare class BabelNodeDecimalLiteral extends BabelNode {
+ type: "DecimalLiteral";
+ value: string;
+}
+
+declare class BabelNodeStaticBlock extends BabelNode {
+ type: "StaticBlock";
+ body: Array<BabelNodeStatement>;
+}
+
+declare class BabelNodeModuleExpression extends BabelNode {
+ type: "ModuleExpression";
+ body: BabelNodeProgram;
+}
+
+declare class BabelNodeTopicReference extends BabelNode {
+ type: "TopicReference";
+}
+
+declare class BabelNodePipelineTopicExpression extends BabelNode {
+ type: "PipelineTopicExpression";
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodePipelineBareFunction extends BabelNode {
+ type: "PipelineBareFunction";
+ callee: BabelNodeExpression;
+}
+
+declare class BabelNodePipelinePrimaryTopicReference extends BabelNode {
+ type: "PipelinePrimaryTopicReference";
+}
+
+declare class BabelNodeTSParameterProperty extends BabelNode {
+ type: "TSParameterProperty";
+ parameter: BabelNodeIdentifier | BabelNodeAssignmentPattern;
+ accessibility?: "public" | "private" | "protected";
+ decorators?: Array<BabelNodeDecorator>;
+ override?: boolean;
+ readonly?: boolean;
+}
+
+declare class BabelNodeTSDeclareFunction extends BabelNode {
+ type: "TSDeclareFunction";
+ id?: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>;
+ returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ async?: boolean;
+ declare?: boolean;
+ generator?: boolean;
+}
+
+declare class BabelNodeTSDeclareMethod extends BabelNode {
+ type: "TSDeclareMethod";
+ decorators?: Array<BabelNodeDecorator>;
+ key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression;
+ typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop;
+ params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement | BabelNodeTSParameterProperty>;
+ returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop;
+ abstract?: boolean;
+ access?: "public" | "private" | "protected";
+ accessibility?: "public" | "private" | "protected";
+ async?: boolean;
+ computed?: boolean;
+ generator?: boolean;
+ kind?: "get" | "set" | "method" | "constructor";
+ optional?: boolean;
+ override?: boolean;
+}
+
+declare class BabelNodeTSQualifiedName extends BabelNode {
+ type: "TSQualifiedName";
+ left: BabelNodeTSEntityName;
+ right: BabelNodeIdentifier;
+}
+
+declare class BabelNodeTSCallSignatureDeclaration extends BabelNode {
+ type: "TSCallSignatureDeclaration";
+ typeParameters?: BabelNodeTSTypeParameterDeclaration;
+ parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+}
+
+declare class BabelNodeTSConstructSignatureDeclaration extends BabelNode {
+ type: "TSConstructSignatureDeclaration";
+ typeParameters?: BabelNodeTSTypeParameterDeclaration;
+ parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+}
+
+declare class BabelNodeTSPropertySignature extends BabelNode {
+ type: "TSPropertySignature";
+ key: BabelNodeExpression;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+ initializer?: BabelNodeExpression;
+ computed?: boolean;
+ kind: "get" | "set";
+ optional?: boolean;
+ readonly?: boolean;
+}
+
+declare class BabelNodeTSMethodSignature extends BabelNode {
+ type: "TSMethodSignature";
+ key: BabelNodeExpression;
+ typeParameters?: BabelNodeTSTypeParameterDeclaration;
+ parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+ computed?: boolean;
+ kind: "method" | "get" | "set";
+ optional?: boolean;
+}
+
+declare class BabelNodeTSIndexSignature extends BabelNode {
+ type: "TSIndexSignature";
+ parameters: Array<BabelNodeIdentifier>;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+ readonly?: boolean;
+}
+
+declare class BabelNodeTSAnyKeyword extends BabelNode {
+ type: "TSAnyKeyword";
+}
+
+declare class BabelNodeTSBooleanKeyword extends BabelNode {
+ type: "TSBooleanKeyword";
+}
+
+declare class BabelNodeTSBigIntKeyword extends BabelNode {
+ type: "TSBigIntKeyword";
+}
+
+declare class BabelNodeTSIntrinsicKeyword extends BabelNode {
+ type: "TSIntrinsicKeyword";
+}
+
+declare class BabelNodeTSNeverKeyword extends BabelNode {
+ type: "TSNeverKeyword";
+}
+
+declare class BabelNodeTSNullKeyword extends BabelNode {
+ type: "TSNullKeyword";
+}
+
+declare class BabelNodeTSNumberKeyword extends BabelNode {
+ type: "TSNumberKeyword";
+}
+
+declare class BabelNodeTSObjectKeyword extends BabelNode {
+ type: "TSObjectKeyword";
+}
+
+declare class BabelNodeTSStringKeyword extends BabelNode {
+ type: "TSStringKeyword";
+}
+
+declare class BabelNodeTSSymbolKeyword extends BabelNode {
+ type: "TSSymbolKeyword";
+}
+
+declare class BabelNodeTSUndefinedKeyword extends BabelNode {
+ type: "TSUndefinedKeyword";
+}
+
+declare class BabelNodeTSUnknownKeyword extends BabelNode {
+ type: "TSUnknownKeyword";
+}
+
+declare class BabelNodeTSVoidKeyword extends BabelNode {
+ type: "TSVoidKeyword";
+}
+
+declare class BabelNodeTSThisType extends BabelNode {
+ type: "TSThisType";
+}
+
+declare class BabelNodeTSFunctionType extends BabelNode {
+ type: "TSFunctionType";
+ typeParameters?: BabelNodeTSTypeParameterDeclaration;
+ parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+}
+
+declare class BabelNodeTSConstructorType extends BabelNode {
+ type: "TSConstructorType";
+ typeParameters?: BabelNodeTSTypeParameterDeclaration;
+ parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+ abstract?: boolean;
+}
+
+declare class BabelNodeTSTypeReference extends BabelNode {
+ type: "TSTypeReference";
+ typeName: BabelNodeTSEntityName;
+ typeParameters?: BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeTSTypePredicate extends BabelNode {
+ type: "TSTypePredicate";
+ parameterName: BabelNodeIdentifier | BabelNodeTSThisType;
+ typeAnnotation?: BabelNodeTSTypeAnnotation;
+ asserts?: boolean;
+}
+
+declare class BabelNodeTSTypeQuery extends BabelNode {
+ type: "TSTypeQuery";
+ exprName: BabelNodeTSEntityName | BabelNodeTSImportType;
+}
+
+declare class BabelNodeTSTypeLiteral extends BabelNode {
+ type: "TSTypeLiteral";
+ members: Array<BabelNodeTSTypeElement>;
+}
+
+declare class BabelNodeTSArrayType extends BabelNode {
+ type: "TSArrayType";
+ elementType: BabelNodeTSType;
+}
+
+declare class BabelNodeTSTupleType extends BabelNode {
+ type: "TSTupleType";
+ elementTypes: Array<BabelNodeTSType | BabelNodeTSNamedTupleMember>;
+}
+
+declare class BabelNodeTSOptionalType extends BabelNode {
+ type: "TSOptionalType";
+ typeAnnotation: BabelNodeTSType;
+}
+
+declare class BabelNodeTSRestType extends BabelNode {
+ type: "TSRestType";
+ typeAnnotation: BabelNodeTSType;
+}
+
+declare class BabelNodeTSNamedTupleMember extends BabelNode {
+ type: "TSNamedTupleMember";
+ label: BabelNodeIdentifier;
+ elementType: BabelNodeTSType;
+ optional?: boolean;
+}
+
+declare class BabelNodeTSUnionType extends BabelNode {
+ type: "TSUnionType";
+ types: Array<BabelNodeTSType>;
+}
+
+declare class BabelNodeTSIntersectionType extends BabelNode {
+ type: "TSIntersectionType";
+ types: Array<BabelNodeTSType>;
+}
+
+declare class BabelNodeTSConditionalType extends BabelNode {
+ type: "TSConditionalType";
+ checkType: BabelNodeTSType;
+ extendsType: BabelNodeTSType;
+ trueType: BabelNodeTSType;
+ falseType: BabelNodeTSType;
+}
+
+declare class BabelNodeTSInferType extends BabelNode {
+ type: "TSInferType";
+ typeParameter: BabelNodeTSTypeParameter;
+}
+
+declare class BabelNodeTSParenthesizedType extends BabelNode {
+ type: "TSParenthesizedType";
+ typeAnnotation: BabelNodeTSType;
+}
+
+declare class BabelNodeTSTypeOperator extends BabelNode {
+ type: "TSTypeOperator";
+ typeAnnotation: BabelNodeTSType;
+ operator: string;
+}
+
+declare class BabelNodeTSIndexedAccessType extends BabelNode {
+ type: "TSIndexedAccessType";
+ objectType: BabelNodeTSType;
+ indexType: BabelNodeTSType;
+}
+
+declare class BabelNodeTSMappedType extends BabelNode {
+ type: "TSMappedType";
+ typeParameter: BabelNodeTSTypeParameter;
+ typeAnnotation?: BabelNodeTSType;
+ nameType?: BabelNodeTSType;
+ optional?: boolean;
+ readonly?: boolean;
+}
+
+declare class BabelNodeTSLiteralType extends BabelNode {
+ type: "TSLiteralType";
+ literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeUnaryExpression;
+}
+
+declare class BabelNodeTSExpressionWithTypeArguments extends BabelNode {
+ type: "TSExpressionWithTypeArguments";
+ expression: BabelNodeTSEntityName;
+ typeParameters?: BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeTSInterfaceDeclaration extends BabelNode {
+ type: "TSInterfaceDeclaration";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTSTypeParameterDeclaration;
+ body: BabelNodeTSInterfaceBody;
+ declare?: boolean;
+}
+
+declare class BabelNodeTSInterfaceBody extends BabelNode {
+ type: "TSInterfaceBody";
+ body: Array<BabelNodeTSTypeElement>;
+}
+
+declare class BabelNodeTSTypeAliasDeclaration extends BabelNode {
+ type: "TSTypeAliasDeclaration";
+ id: BabelNodeIdentifier;
+ typeParameters?: BabelNodeTSTypeParameterDeclaration;
+ typeAnnotation: BabelNodeTSType;
+ declare?: boolean;
+}
+
+declare class BabelNodeTSAsExpression extends BabelNode {
+ type: "TSAsExpression";
+ expression: BabelNodeExpression;
+ typeAnnotation: BabelNodeTSType;
+}
+
+declare class BabelNodeTSTypeAssertion extends BabelNode {
+ type: "TSTypeAssertion";
+ typeAnnotation: BabelNodeTSType;
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodeTSEnumDeclaration extends BabelNode {
+ type: "TSEnumDeclaration";
+ id: BabelNodeIdentifier;
+ members: Array<BabelNodeTSEnumMember>;
+ declare?: boolean;
+ initializer?: BabelNodeExpression;
+}
+
+declare class BabelNodeTSEnumMember extends BabelNode {
+ type: "TSEnumMember";
+ id: BabelNodeIdentifier | BabelNodeStringLiteral;
+ initializer?: BabelNodeExpression;
+}
+
+declare class BabelNodeTSModuleDeclaration extends BabelNode {
+ type: "TSModuleDeclaration";
+ id: BabelNodeIdentifier | BabelNodeStringLiteral;
+ body: BabelNodeTSModuleBlock | BabelNodeTSModuleDeclaration;
+ declare?: boolean;
+ global?: boolean;
+}
+
+declare class BabelNodeTSModuleBlock extends BabelNode {
+ type: "TSModuleBlock";
+ body: Array<BabelNodeStatement>;
+}
+
+declare class BabelNodeTSImportType extends BabelNode {
+ type: "TSImportType";
+ argument: BabelNodeStringLiteral;
+ qualifier?: BabelNodeTSEntityName;
+ typeParameters?: BabelNodeTSTypeParameterInstantiation;
+}
+
+declare class BabelNodeTSImportEqualsDeclaration extends BabelNode {
+ type: "TSImportEqualsDeclaration";
+ id: BabelNodeIdentifier;
+ moduleReference: BabelNodeTSEntityName | BabelNodeTSExternalModuleReference;
+ importKind?: "type" | "value";
+ isExport: boolean;
+}
+
+declare class BabelNodeTSExternalModuleReference extends BabelNode {
+ type: "TSExternalModuleReference";
+ expression: BabelNodeStringLiteral;
+}
+
+declare class BabelNodeTSNonNullExpression extends BabelNode {
+ type: "TSNonNullExpression";
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodeTSExportAssignment extends BabelNode {
+ type: "TSExportAssignment";
+ expression: BabelNodeExpression;
+}
+
+declare class BabelNodeTSNamespaceExportDeclaration extends BabelNode {
+ type: "TSNamespaceExportDeclaration";
+ id: BabelNodeIdentifier;
+}
+
+declare class BabelNodeTSTypeAnnotation extends BabelNode {
+ type: "TSTypeAnnotation";
+ typeAnnotation: BabelNodeTSType;
+}
+
+declare class BabelNodeTSTypeParameterInstantiation extends BabelNode {
+ type: "TSTypeParameterInstantiation";
+ params: Array<BabelNodeTSType>;
+}
+
+declare class BabelNodeTSTypeParameterDeclaration extends BabelNode {
+ type: "TSTypeParameterDeclaration";
+ params: Array<BabelNodeTSTypeParameter>;
+}
+
+declare class BabelNodeTSTypeParameter extends BabelNode {
+ type: "TSTypeParameter";
+ constraint?: BabelNodeTSType;
+ name: string;
+}
+
+type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeParenthesizedExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeAwaitExpression | BabelNodeImport | BabelNodeBigIntLiteral | BabelNodeOptionalMemberExpression | BabelNodeOptionalCallExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXFragment | BabelNodeBindExpression | BabelNodeDoExpression | BabelNodeRecordExpression | BabelNodeTupleExpression | BabelNodeDecimalLiteral | BabelNodeModuleExpression | BabelNodeTopicReference | BabelNodePipelineTopicExpression | BabelNodePipelineBareFunction | BabelNodePipelinePrimaryTopicReference | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression;
+type BabelNodeBinary = BabelNodeBinaryExpression | BabelNodeLogicalExpression;
+type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeClassDeclaration | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeClassPrivateMethod | BabelNodeStaticBlock | BabelNodeTSModuleBlock;
+type BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeClassPrivateMethod | BabelNodeStaticBlock | BabelNodeTSModuleBlock;
+type BabelNodeBlock = BabelNodeBlockStatement | BabelNodeProgram | BabelNodeTSModuleBlock;
+type BabelNodeStatement = BabelNodeBlockStatement | BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeDebuggerStatement | BabelNodeDoWhileStatement | BabelNodeEmptyStatement | BabelNodeExpressionStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeIfStatement | BabelNodeLabeledStatement | BabelNodeReturnStatement | BabelNodeSwitchStatement | BabelNodeThrowStatement | BabelNodeTryStatement | BabelNodeVariableDeclaration | BabelNodeWhileStatement | BabelNodeWithStatement | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeForOfStatement | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeOpaqueType | BabelNodeTypeAlias | BabelNodeEnumDeclaration | BabelNodeTSDeclareFunction | BabelNodeTSInterfaceDeclaration | BabelNodeTSTypeAliasDeclaration | BabelNodeTSEnumDeclaration | BabelNodeTSModuleDeclaration | BabelNodeTSImportEqualsDeclaration | BabelNodeTSExportAssignment | BabelNodeTSNamespaceExportDeclaration;
+type BabelNodeTerminatorless = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement | BabelNodeYieldExpression | BabelNodeAwaitExpression;
+type BabelNodeCompletionStatement = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement;
+type BabelNodeConditional = BabelNodeConditionalExpression | BabelNodeIfStatement;
+type BabelNodeLoop = BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeWhileStatement | BabelNodeForOfStatement;
+type BabelNodeWhile = BabelNodeDoWhileStatement | BabelNodeWhileStatement;
+type BabelNodeExpressionWrapper = BabelNodeExpressionStatement | BabelNodeParenthesizedExpression | BabelNodeTypeCastExpression;
+type BabelNodeFor = BabelNodeForInStatement | BabelNodeForStatement | BabelNodeForOfStatement;
+type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement;
+type BabelNodeFunction = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod | BabelNodeClassPrivateMethod;
+type BabelNodeFunctionParent = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod | BabelNodeClassPrivateMethod;
+type BabelNodePureish = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeArrowFunctionExpression | BabelNodeBigIntLiteral | BabelNodeDecimalLiteral;
+type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeOpaqueType | BabelNodeTypeAlias | BabelNodeEnumDeclaration | BabelNodeTSDeclareFunction | BabelNodeTSInterfaceDeclaration | BabelNodeTSTypeAliasDeclaration | BabelNodeTSEnumDeclaration | BabelNodeTSModuleDeclaration;
+type BabelNodePatternLike = BabelNodeIdentifier | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern;
+type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern | BabelNodeTSParameterProperty;
+type BabelNodeTSEntityName = BabelNodeIdentifier | BabelNodeTSQualifiedName;
+type BabelNodeLiteral = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeTemplateLiteral | BabelNodeBigIntLiteral | BabelNodeDecimalLiteral;
+type BabelNodeImmutable = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXOpeningElement | BabelNodeJSXText | BabelNodeJSXFragment | BabelNodeJSXOpeningFragment | BabelNodeJSXClosingFragment | BabelNodeDecimalLiteral;
+type BabelNodeUserWhitespacable = BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeObjectTypeInternalSlot | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty;
+type BabelNodeMethod = BabelNodeObjectMethod | BabelNodeClassMethod | BabelNodeClassPrivateMethod;
+type BabelNodeObjectMember = BabelNodeObjectMethod | BabelNodeObjectProperty;
+type BabelNodeProperty = BabelNodeObjectProperty | BabelNodeClassProperty | BabelNodeClassPrivateProperty;
+type BabelNodeUnaryLike = BabelNodeUnaryExpression | BabelNodeSpreadElement;
+type BabelNodePattern = BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern;
+type BabelNodeClass = BabelNodeClassExpression | BabelNodeClassDeclaration;
+type BabelNodeModuleDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration;
+type BabelNodeExportDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration;
+type BabelNodeModuleSpecifier = BabelNodeExportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier | BabelNodeImportSpecifier | BabelNodeExportNamespaceSpecifier | BabelNodeExportDefaultSpecifier;
+type BabelNodePrivate = BabelNodeClassPrivateProperty | BabelNodeClassPrivateMethod | BabelNodePrivateName;
+type BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeDeclaredPredicate | BabelNodeExistsTypeAnnotation | BabelNodeFunctionTypeAnnotation | BabelNodeFunctionTypeParam | BabelNodeGenericTypeAnnotation | BabelNodeInferredPredicate | BabelNodeInterfaceExtends | BabelNodeInterfaceDeclaration | BabelNodeInterfaceTypeAnnotation | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumberLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeObjectTypeAnnotation | BabelNodeObjectTypeInternalSlot | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty | BabelNodeOpaqueType | BabelNodeQualifiedTypeIdentifier | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeSymbolTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeTypeAlias | BabelNodeTypeAnnotation | BabelNodeTypeCastExpression | BabelNodeTypeParameter | BabelNodeTypeParameterDeclaration | BabelNodeTypeParameterInstantiation | BabelNodeUnionTypeAnnotation | BabelNodeVariance | BabelNodeVoidTypeAnnotation | BabelNodeIndexedAccessType | BabelNodeOptionalIndexedAccessType;
+type BabelNodeFlowType = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeExistsTypeAnnotation | BabelNodeFunctionTypeAnnotation | BabelNodeGenericTypeAnnotation | BabelNodeInterfaceTypeAnnotation | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumberLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeObjectTypeAnnotation | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeSymbolTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeUnionTypeAnnotation | BabelNodeVoidTypeAnnotation | BabelNodeIndexedAccessType | BabelNodeOptionalIndexedAccessType;
+type BabelNodeFlowBaseAnnotation = BabelNodeAnyTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeSymbolTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeVoidTypeAnnotation;
+type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeOpaqueType | BabelNodeTypeAlias;
+type BabelNodeFlowPredicate = BabelNodeDeclaredPredicate | BabelNodeInferredPredicate;
+type BabelNodeEnumBody = BabelNodeEnumBooleanBody | BabelNodeEnumNumberBody | BabelNodeEnumStringBody | BabelNodeEnumSymbolBody;
+type BabelNodeEnumMember = BabelNodeEnumBooleanMember | BabelNodeEnumNumberMember | BabelNodeEnumStringMember | BabelNodeEnumDefaultedMember;
+type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText | BabelNodeJSXFragment | BabelNodeJSXOpeningFragment | BabelNodeJSXClosingFragment;
+type BabelNodeTSTypeElement = BabelNodeTSCallSignatureDeclaration | BabelNodeTSConstructSignatureDeclaration | BabelNodeTSPropertySignature | BabelNodeTSMethodSignature | BabelNodeTSIndexSignature;
+type BabelNodeTSType = BabelNodeTSAnyKeyword | BabelNodeTSBooleanKeyword | BabelNodeTSBigIntKeyword | BabelNodeTSIntrinsicKeyword | BabelNodeTSNeverKeyword | BabelNodeTSNullKeyword | BabelNodeTSNumberKeyword | BabelNodeTSObjectKeyword | BabelNodeTSStringKeyword | BabelNodeTSSymbolKeyword | BabelNodeTSUndefinedKeyword | BabelNodeTSUnknownKeyword | BabelNodeTSVoidKeyword | BabelNodeTSThisType | BabelNodeTSFunctionType | BabelNodeTSConstructorType | BabelNodeTSTypeReference | BabelNodeTSTypePredicate | BabelNodeTSTypeQuery | BabelNodeTSTypeLiteral | BabelNodeTSArrayType | BabelNodeTSTupleType | BabelNodeTSOptionalType | BabelNodeTSRestType | BabelNodeTSUnionType | BabelNodeTSIntersectionType | BabelNodeTSConditionalType | BabelNodeTSInferType | BabelNodeTSParenthesizedType | BabelNodeTSTypeOperator | BabelNodeTSIndexedAccessType | BabelNodeTSMappedType | BabelNodeTSLiteralType | BabelNodeTSExpressionWithTypeArguments | BabelNodeTSImportType;
+type BabelNodeTSBaseType = BabelNodeTSAnyKeyword | BabelNodeTSBooleanKeyword | BabelNodeTSBigIntKeyword | BabelNodeTSIntrinsicKeyword | BabelNodeTSNeverKeyword | BabelNodeTSNullKeyword | BabelNodeTSNumberKeyword | BabelNodeTSObjectKeyword | BabelNodeTSStringKeyword | BabelNodeTSSymbolKeyword | BabelNodeTSUndefinedKeyword | BabelNodeTSUnknownKeyword | BabelNodeTSVoidKeyword | BabelNodeTSThisType | BabelNodeTSLiteralType;
+
+declare module "@babel/types" {
+ declare export function arrayExpression(elements?: Array<null | BabelNodeExpression | BabelNodeSpreadElement>): BabelNodeArrayExpression;
+ declare export function assignmentExpression(operator: string, left: BabelNodeLVal, right: BabelNodeExpression): BabelNodeAssignmentExpression;
+ declare export function binaryExpression(operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=", left: BabelNodeExpression | BabelNodePrivateName, right: BabelNodeExpression): BabelNodeBinaryExpression;
+ declare export function interpreterDirective(value: string): BabelNodeInterpreterDirective;
+ declare export function directive(value: BabelNodeDirectiveLiteral): BabelNodeDirective;
+ declare export function directiveLiteral(value: string): BabelNodeDirectiveLiteral;
+ declare export function blockStatement(body: Array<BabelNodeStatement>, directives?: Array<BabelNodeDirective>): BabelNodeBlockStatement;
+ declare export function breakStatement(label?: BabelNodeIdentifier): BabelNodeBreakStatement;
+ declare export function callExpression(callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier, _arguments: Array<BabelNodeExpression | BabelNodeSpreadElement | BabelNodeJSXNamespacedName | BabelNodeArgumentPlaceholder>): BabelNodeCallExpression;
+ declare export function catchClause(param?: BabelNodeIdentifier | BabelNodeArrayPattern | BabelNodeObjectPattern, body: BabelNodeBlockStatement): BabelNodeCatchClause;
+ declare export function conditionalExpression(test: BabelNodeExpression, consequent: BabelNodeExpression, alternate: BabelNodeExpression): BabelNodeConditionalExpression;
+ declare export function continueStatement(label?: BabelNodeIdentifier): BabelNodeContinueStatement;
+ declare export function debuggerStatement(): BabelNodeDebuggerStatement;
+ declare export function doWhileStatement(test: BabelNodeExpression, body: BabelNodeStatement): BabelNodeDoWhileStatement;
+ declare export function emptyStatement(): BabelNodeEmptyStatement;
+ declare export function expressionStatement(expression: BabelNodeExpression): BabelNodeExpressionStatement;
+ declare export function file(program: BabelNodeProgram, comments?: Array<BabelNodeCommentBlock | BabelNodeCommentLine>, tokens?: Array<any>): BabelNodeFile;
+ declare export function forInStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForInStatement;
+ declare export function forStatement(init?: BabelNodeVariableDeclaration | BabelNodeExpression, test?: BabelNodeExpression, update?: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForStatement;
+ declare export function functionDeclaration(id?: BabelNodeIdentifier, params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean): BabelNodeFunctionDeclaration;
+ declare export function functionExpression(id?: BabelNodeIdentifier, params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean): BabelNodeFunctionExpression;
+ declare export function identifier(name: string): BabelNodeIdentifier;
+ declare export function ifStatement(test: BabelNodeExpression, consequent: BabelNodeStatement, alternate?: BabelNodeStatement): BabelNodeIfStatement;
+ declare export function labeledStatement(label: BabelNodeIdentifier, body: BabelNodeStatement): BabelNodeLabeledStatement;
+ declare export function stringLiteral(value: string): BabelNodeStringLiteral;
+ declare export function numericLiteral(value: number): BabelNodeNumericLiteral;
+ declare export function nullLiteral(): BabelNodeNullLiteral;
+ declare export function booleanLiteral(value: boolean): BabelNodeBooleanLiteral;
+ declare export function regExpLiteral(pattern: string, flags?: string): BabelNodeRegExpLiteral;
+ declare export function logicalExpression(operator: "||" | "&&" | "??", left: BabelNodeExpression, right: BabelNodeExpression): BabelNodeLogicalExpression;
+ declare export function memberExpression(object: BabelNodeExpression, property: BabelNodeExpression | BabelNodeIdentifier | BabelNodePrivateName, computed?: boolean, optional?: true | false): BabelNodeMemberExpression;
+ declare export function newExpression(callee: BabelNodeExpression | BabelNodeV8IntrinsicIdentifier, _arguments: Array<BabelNodeExpression | BabelNodeSpreadElement | BabelNodeJSXNamespacedName | BabelNodeArgumentPlaceholder>): BabelNodeNewExpression;
+ declare export function program(body: Array<BabelNodeStatement>, directives?: Array<BabelNodeDirective>, sourceType?: "script" | "module", interpreter?: BabelNodeInterpreterDirective): BabelNodeProgram;
+ declare export function objectExpression(properties: Array<BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeSpreadElement>): BabelNodeObjectExpression;
+ declare export function objectMethod(kind?: "method" | "get" | "set", key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral, params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>, body: BabelNodeBlockStatement, computed?: boolean, generator?: boolean, async?: boolean): BabelNodeObjectMethod;
+ declare export function objectProperty(key: BabelNodeExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral, value: BabelNodeExpression | BabelNodePatternLike, computed?: boolean, shorthand?: boolean, decorators?: Array<BabelNodeDecorator>): BabelNodeObjectProperty;
+ declare export function restElement(argument: BabelNodeLVal): BabelNodeRestElement;
+ declare export function returnStatement(argument?: BabelNodeExpression): BabelNodeReturnStatement;
+ declare export function sequenceExpression(expressions: Array<BabelNodeExpression>): BabelNodeSequenceExpression;
+ declare export function parenthesizedExpression(expression: BabelNodeExpression): BabelNodeParenthesizedExpression;
+ declare export function switchCase(test?: BabelNodeExpression, consequent: Array<BabelNodeStatement>): BabelNodeSwitchCase;
+ declare export function switchStatement(discriminant: BabelNodeExpression, cases: Array<BabelNodeSwitchCase>): BabelNodeSwitchStatement;
+ declare export function thisExpression(): BabelNodeThisExpression;
+ declare export function throwStatement(argument: BabelNodeExpression): BabelNodeThrowStatement;
+ declare export function tryStatement(block: BabelNodeBlockStatement, handler?: BabelNodeCatchClause, finalizer?: BabelNodeBlockStatement): BabelNodeTryStatement;
+ declare export function unaryExpression(operator: "void" | "throw" | "delete" | "!" | "+" | "-" | "~" | "typeof", argument: BabelNodeExpression, prefix?: boolean): BabelNodeUnaryExpression;
+ declare export function updateExpression(operator: "++" | "--", argument: BabelNodeExpression, prefix?: boolean): BabelNodeUpdateExpression;
+ declare export function variableDeclaration(kind: "var" | "let" | "const", declarations: Array<BabelNodeVariableDeclarator>): BabelNodeVariableDeclaration;
+ declare export function variableDeclarator(id: BabelNodeLVal, init?: BabelNodeExpression): BabelNodeVariableDeclarator;
+ declare export function whileStatement(test: BabelNodeExpression, body: BabelNodeStatement): BabelNodeWhileStatement;
+ declare export function withStatement(object: BabelNodeExpression, body: BabelNodeStatement): BabelNodeWithStatement;
+ declare export function assignmentPattern(left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern | BabelNodeMemberExpression, right: BabelNodeExpression): BabelNodeAssignmentPattern;
+ declare export function arrayPattern(elements: Array<null | BabelNodePatternLike>): BabelNodeArrayPattern;
+ declare export function arrowFunctionExpression(params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>, body: BabelNodeBlockStatement | BabelNodeExpression, async?: boolean): BabelNodeArrowFunctionExpression;
+ declare export function classBody(body: Array<BabelNodeClassMethod | BabelNodeClassPrivateMethod | BabelNodeClassProperty | BabelNodeClassPrivateProperty | BabelNodeTSDeclareMethod | BabelNodeTSIndexSignature>): BabelNodeClassBody;
+ declare export function classExpression(id?: BabelNodeIdentifier, superClass?: BabelNodeExpression, body: BabelNodeClassBody, decorators?: Array<BabelNodeDecorator>): BabelNodeClassExpression;
+ declare export function classDeclaration(id: BabelNodeIdentifier, superClass?: BabelNodeExpression, body: BabelNodeClassBody, decorators?: Array<BabelNodeDecorator>): BabelNodeClassDeclaration;
+ declare export function exportAllDeclaration(source: BabelNodeStringLiteral): BabelNodeExportAllDeclaration;
+ declare export function exportDefaultDeclaration(declaration: BabelNodeFunctionDeclaration | BabelNodeTSDeclareFunction | BabelNodeClassDeclaration | BabelNodeExpression): BabelNodeExportDefaultDeclaration;
+ declare export function exportNamedDeclaration(declaration?: BabelNodeDeclaration, specifiers?: Array<BabelNodeExportSpecifier | BabelNodeExportDefaultSpecifier | BabelNodeExportNamespaceSpecifier>, source?: BabelNodeStringLiteral): BabelNodeExportNamedDeclaration;
+ declare export function exportSpecifier(local: BabelNodeIdentifier, exported: BabelNodeIdentifier | BabelNodeStringLiteral): BabelNodeExportSpecifier;
+ declare export function forOfStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement, _await?: boolean): BabelNodeForOfStatement;
+ declare export function importDeclaration(specifiers: Array<BabelNodeImportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier>, source: BabelNodeStringLiteral): BabelNodeImportDeclaration;
+ declare export function importDefaultSpecifier(local: BabelNodeIdentifier): BabelNodeImportDefaultSpecifier;
+ declare export function importNamespaceSpecifier(local: BabelNodeIdentifier): BabelNodeImportNamespaceSpecifier;
+ declare export function importSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier | BabelNodeStringLiteral): BabelNodeImportSpecifier;
+ declare export function metaProperty(meta: BabelNodeIdentifier, property: BabelNodeIdentifier): BabelNodeMetaProperty;
+ declare export function classMethod(kind?: "get" | "set" | "method" | "constructor", key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression, params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement | BabelNodeTSParameterProperty>, body: BabelNodeBlockStatement, computed?: boolean, _static?: boolean, generator?: boolean, async?: boolean): BabelNodeClassMethod;
+ declare export function objectPattern(properties: Array<BabelNodeRestElement | BabelNodeObjectProperty>): BabelNodeObjectPattern;
+ declare export function spreadElement(argument: BabelNodeExpression): BabelNodeSpreadElement;
+ declare function _super(): BabelNodeSuper;
+ declare export { _super as super }
+ declare export function taggedTemplateExpression(tag: BabelNodeExpression, quasi: BabelNodeTemplateLiteral): BabelNodeTaggedTemplateExpression;
+ declare export function templateElement(value: { raw: string, cooked?: string }, tail?: boolean): BabelNodeTemplateElement;
+ declare export function templateLiteral(quasis: Array<BabelNodeTemplateElement>, expressions: Array<BabelNodeExpression | BabelNodeTSType>): BabelNodeTemplateLiteral;
+ declare export function yieldExpression(argument?: BabelNodeExpression, delegate?: boolean): BabelNodeYieldExpression;
+ declare export function awaitExpression(argument: BabelNodeExpression): BabelNodeAwaitExpression;
+ declare function _import(): BabelNodeImport;
+ declare export { _import as import }
+ declare export function bigIntLiteral(value: string): BabelNodeBigIntLiteral;
+ declare export function exportNamespaceSpecifier(exported: BabelNodeIdentifier): BabelNodeExportNamespaceSpecifier;
+ declare export function optionalMemberExpression(object: BabelNodeExpression, property: BabelNodeExpression | BabelNodeIdentifier, computed?: boolean, optional: boolean): BabelNodeOptionalMemberExpression;
+ declare export function optionalCallExpression(callee: BabelNodeExpression, _arguments: Array<BabelNodeExpression | BabelNodeSpreadElement | BabelNodeJSXNamespacedName | BabelNodeArgumentPlaceholder>, optional: boolean): BabelNodeOptionalCallExpression;
+ declare export function classProperty(key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression, value?: BabelNodeExpression, typeAnnotation?: BabelNodeTypeAnnotation | BabelNodeTSTypeAnnotation | BabelNodeNoop, decorators?: Array<BabelNodeDecorator>, computed?: boolean, _static?: boolean): BabelNodeClassProperty;
+ declare export function classPrivateProperty(key: BabelNodePrivateName, value?: BabelNodeExpression, decorators?: Array<BabelNodeDecorator>, _static: any): BabelNodeClassPrivateProperty;
+ declare export function classPrivateMethod(kind?: "get" | "set" | "method" | "constructor", key: BabelNodePrivateName, params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement | BabelNodeTSParameterProperty>, body: BabelNodeBlockStatement, _static?: boolean): BabelNodeClassPrivateMethod;
+ declare export function privateName(id: BabelNodeIdentifier): BabelNodePrivateName;
+ declare export function anyTypeAnnotation(): BabelNodeAnyTypeAnnotation;
+ declare export function arrayTypeAnnotation(elementType: BabelNodeFlowType): BabelNodeArrayTypeAnnotation;
+ declare export function booleanTypeAnnotation(): BabelNodeBooleanTypeAnnotation;
+ declare export function booleanLiteralTypeAnnotation(value: boolean): BabelNodeBooleanLiteralTypeAnnotation;
+ declare export function nullLiteralTypeAnnotation(): BabelNodeNullLiteralTypeAnnotation;
+ declare export function classImplements(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterInstantiation): BabelNodeClassImplements;
+ declare export function declareClass(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterDeclaration, _extends?: Array<BabelNodeInterfaceExtends>, body: BabelNodeObjectTypeAnnotation): BabelNodeDeclareClass;
+ declare export function declareFunction(id: BabelNodeIdentifier): BabelNodeDeclareFunction;
+ declare export function declareInterface(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterDeclaration, _extends?: Array<BabelNodeInterfaceExtends>, body: BabelNodeObjectTypeAnnotation): BabelNodeDeclareInterface;
+ declare export function declareModule(id: BabelNodeIdentifier | BabelNodeStringLiteral, body: BabelNodeBlockStatement, kind?: "CommonJS" | "ES"): BabelNodeDeclareModule;
+ declare export function declareModuleExports(typeAnnotation: BabelNodeTypeAnnotation): BabelNodeDeclareModuleExports;
+ declare export function declareTypeAlias(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterDeclaration, right: BabelNodeFlowType): BabelNodeDeclareTypeAlias;
+ declare export function declareOpaqueType(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterDeclaration, supertype?: BabelNodeFlowType): BabelNodeDeclareOpaqueType;
+ declare export function declareVariable(id: BabelNodeIdentifier): BabelNodeDeclareVariable;
+ declare export function declareExportDeclaration(declaration?: BabelNodeFlow, specifiers?: Array<BabelNodeExportSpecifier | BabelNodeExportNamespaceSpecifier>, source?: BabelNodeStringLiteral): BabelNodeDeclareExportDeclaration;
+ declare export function declareExportAllDeclaration(source: BabelNodeStringLiteral): BabelNodeDeclareExportAllDeclaration;
+ declare export function declaredPredicate(value: BabelNodeFlow): BabelNodeDeclaredPredicate;
+ declare export function existsTypeAnnotation(): BabelNodeExistsTypeAnnotation;
+ declare export function functionTypeAnnotation(typeParameters?: BabelNodeTypeParameterDeclaration, params: Array<BabelNodeFunctionTypeParam>, rest?: BabelNodeFunctionTypeParam, returnType: BabelNodeFlowType): BabelNodeFunctionTypeAnnotation;
+ declare export function functionTypeParam(name?: BabelNodeIdentifier, typeAnnotation: BabelNodeFlowType): BabelNodeFunctionTypeParam;
+ declare export function genericTypeAnnotation(id: BabelNodeIdentifier | BabelNodeQualifiedTypeIdentifier, typeParameters?: BabelNodeTypeParameterInstantiation): BabelNodeGenericTypeAnnotation;
+ declare export function inferredPredicate(): BabelNodeInferredPredicate;
+ declare export function interfaceExtends(id: BabelNodeIdentifier | BabelNodeQualifiedTypeIdentifier, typeParameters?: BabelNodeTypeParameterInstantiation): BabelNodeInterfaceExtends;
+ declare export function interfaceDeclaration(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterDeclaration, _extends?: Array<BabelNodeInterfaceExtends>, body: BabelNodeObjectTypeAnnotation): BabelNodeInterfaceDeclaration;
+ declare export function interfaceTypeAnnotation(_extends?: Array<BabelNodeInterfaceExtends>, body: BabelNodeObjectTypeAnnotation): BabelNodeInterfaceTypeAnnotation;
+ declare export function intersectionTypeAnnotation(types: Array<BabelNodeFlowType>): BabelNodeIntersectionTypeAnnotation;
+ declare export function mixedTypeAnnotation(): BabelNodeMixedTypeAnnotation;
+ declare export function emptyTypeAnnotation(): BabelNodeEmptyTypeAnnotation;
+ declare export function nullableTypeAnnotation(typeAnnotation: BabelNodeFlowType): BabelNodeNullableTypeAnnotation;
+ declare export function numberLiteralTypeAnnotation(value: number): BabelNodeNumberLiteralTypeAnnotation;
+ declare export function numberTypeAnnotation(): BabelNodeNumberTypeAnnotation;
+ declare export function objectTypeAnnotation(properties: Array<BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty>, indexers?: Array<BabelNodeObjectTypeIndexer>, callProperties?: Array<BabelNodeObjectTypeCallProperty>, internalSlots?: Array<BabelNodeObjectTypeInternalSlot>, exact?: boolean): BabelNodeObjectTypeAnnotation;
+ declare export function objectTypeInternalSlot(id: BabelNodeIdentifier, value: BabelNodeFlowType, optional: boolean, _static: boolean, method: boolean): BabelNodeObjectTypeInternalSlot;
+ declare export function objectTypeCallProperty(value: BabelNodeFlowType): BabelNodeObjectTypeCallProperty;
+ declare export function objectTypeIndexer(id?: BabelNodeIdentifier, key: BabelNodeFlowType, value: BabelNodeFlowType, variance?: BabelNodeVariance): BabelNodeObjectTypeIndexer;
+ declare export function objectTypeProperty(key: BabelNodeIdentifier | BabelNodeStringLiteral, value: BabelNodeFlowType, variance?: BabelNodeVariance): BabelNodeObjectTypeProperty;
+ declare export function objectTypeSpreadProperty(argument: BabelNodeFlowType): BabelNodeObjectTypeSpreadProperty;
+ declare export function opaqueType(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterDeclaration, supertype?: BabelNodeFlowType, impltype: BabelNodeFlowType): BabelNodeOpaqueType;
+ declare export function qualifiedTypeIdentifier(id: BabelNodeIdentifier, qualification: BabelNodeIdentifier | BabelNodeQualifiedTypeIdentifier): BabelNodeQualifiedTypeIdentifier;
+ declare export function stringLiteralTypeAnnotation(value: string): BabelNodeStringLiteralTypeAnnotation;
+ declare export function stringTypeAnnotation(): BabelNodeStringTypeAnnotation;
+ declare export function symbolTypeAnnotation(): BabelNodeSymbolTypeAnnotation;
+ declare export function thisTypeAnnotation(): BabelNodeThisTypeAnnotation;
+ declare export function tupleTypeAnnotation(types: Array<BabelNodeFlowType>): BabelNodeTupleTypeAnnotation;
+ declare export function typeofTypeAnnotation(argument: BabelNodeFlowType): BabelNodeTypeofTypeAnnotation;
+ declare export function typeAlias(id: BabelNodeIdentifier, typeParameters?: BabelNodeTypeParameterDeclaration, right: BabelNodeFlowType): BabelNodeTypeAlias;
+ declare export function typeAnnotation(typeAnnotation: BabelNodeFlowType): BabelNodeTypeAnnotation;
+ declare export function typeCastExpression(expression: BabelNodeExpression, typeAnnotation: BabelNodeTypeAnnotation): BabelNodeTypeCastExpression;
+ declare export function typeParameter(bound?: BabelNodeTypeAnnotation, _default?: BabelNodeFlowType, variance?: BabelNodeVariance): BabelNodeTypeParameter;
+ declare export function typeParameterDeclaration(params: Array<BabelNodeTypeParameter>): BabelNodeTypeParameterDeclaration;
+ declare export function typeParameterInstantiation(params: Array<BabelNodeFlowType>): BabelNodeTypeParameterInstantiation;
+ declare export function unionTypeAnnotation(types: Array<BabelNodeFlowType>): BabelNodeUnionTypeAnnotation;
+ declare export function variance(kind: "minus" | "plus"): BabelNodeVariance;
+ declare export function voidTypeAnnotation(): BabelNodeVoidTypeAnnotation;
+ declare export function enumDeclaration(id: BabelNodeIdentifier, body: BabelNodeEnumBooleanBody | BabelNodeEnumNumberBody | BabelNodeEnumStringBody | BabelNodeEnumSymbolBody): BabelNodeEnumDeclaration;
+ declare export function enumBooleanBody(members: Array<BabelNodeEnumBooleanMember>): BabelNodeEnumBooleanBody;
+ declare export function enumNumberBody(members: Array<BabelNodeEnumNumberMember>): BabelNodeEnumNumberBody;
+ declare export function enumStringBody(members: Array<BabelNodeEnumStringMember | BabelNodeEnumDefaultedMember>): BabelNodeEnumStringBody;
+ declare export function enumSymbolBody(members: Array<BabelNodeEnumDefaultedMember>): BabelNodeEnumSymbolBody;
+ declare export function enumBooleanMember(id: BabelNodeIdentifier): BabelNodeEnumBooleanMember;
+ declare export function enumNumberMember(id: BabelNodeIdentifier, init: BabelNodeNumericLiteral): BabelNodeEnumNumberMember;
+ declare export function enumStringMember(id: BabelNodeIdentifier, init: BabelNodeStringLiteral): BabelNodeEnumStringMember;
+ declare export function enumDefaultedMember(id: BabelNodeIdentifier): BabelNodeEnumDefaultedMember;
+ declare export function indexedAccessType(objectType: BabelNodeFlowType, indexType: BabelNodeFlowType): BabelNodeIndexedAccessType;
+ declare export function optionalIndexedAccessType(objectType: BabelNodeFlowType, indexType: BabelNodeFlowType): BabelNodeOptionalIndexedAccessType;
+ declare export function jsxAttribute(name: BabelNodeJSXIdentifier | BabelNodeJSXNamespacedName, value?: BabelNodeJSXElement | BabelNodeJSXFragment | BabelNodeStringLiteral | BabelNodeJSXExpressionContainer): BabelNodeJSXAttribute;
+ declare export function jsxClosingElement(name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName): BabelNodeJSXClosingElement;
+ declare export function jsxElement(openingElement: BabelNodeJSXOpeningElement, closingElement?: BabelNodeJSXClosingElement, children: Array<BabelNodeJSXText | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXElement | BabelNodeJSXFragment>, selfClosing?: boolean): BabelNodeJSXElement;
+ declare export function jsxEmptyExpression(): BabelNodeJSXEmptyExpression;
+ declare export function jsxExpressionContainer(expression: BabelNodeExpression | BabelNodeJSXEmptyExpression): BabelNodeJSXExpressionContainer;
+ declare export function jsxSpreadChild(expression: BabelNodeExpression): BabelNodeJSXSpreadChild;
+ declare export function jsxIdentifier(name: string): BabelNodeJSXIdentifier;
+ declare export function jsxMemberExpression(object: BabelNodeJSXMemberExpression | BabelNodeJSXIdentifier, property: BabelNodeJSXIdentifier): BabelNodeJSXMemberExpression;
+ declare export function jsxNamespacedName(namespace: BabelNodeJSXIdentifier, name: BabelNodeJSXIdentifier): BabelNodeJSXNamespacedName;
+ declare export function jsxOpeningElement(name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName, attributes: Array<BabelNodeJSXAttribute | BabelNodeJSXSpreadAttribute>, selfClosing?: boolean): BabelNodeJSXOpeningElement;
+ declare export function jsxSpreadAttribute(argument: BabelNodeExpression): BabelNodeJSXSpreadAttribute;
+ declare export function jsxText(value: string): BabelNodeJSXText;
+ declare export function jsxFragment(openingFragment: BabelNodeJSXOpeningFragment, closingFragment: BabelNodeJSXClosingFragment, children: Array<BabelNodeJSXText | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXElement | BabelNodeJSXFragment>): BabelNodeJSXFragment;
+ declare export function jsxOpeningFragment(): BabelNodeJSXOpeningFragment;
+ declare export function jsxClosingFragment(): BabelNodeJSXClosingFragment;
+ declare export function noop(): BabelNodeNoop;
+ declare export function placeholder(expectedNode: "Identifier" | "StringLiteral" | "Expression" | "Statement" | "Declaration" | "BlockStatement" | "ClassBody" | "Pattern", name: BabelNodeIdentifier): BabelNodePlaceholder;
+ declare export function v8IntrinsicIdentifier(name: string): BabelNodeV8IntrinsicIdentifier;
+ declare export function argumentPlaceholder(): BabelNodeArgumentPlaceholder;
+ declare export function bindExpression(object: BabelNodeExpression, callee: BabelNodeExpression): BabelNodeBindExpression;
+ declare export function importAttribute(key: BabelNodeIdentifier | BabelNodeStringLiteral, value: BabelNodeStringLiteral): BabelNodeImportAttribute;
+ declare export function decorator(expression: BabelNodeExpression): BabelNodeDecorator;
+ declare export function doExpression(body: BabelNodeBlockStatement, async?: boolean): BabelNodeDoExpression;
+ declare export function exportDefaultSpecifier(exported: BabelNodeIdentifier): BabelNodeExportDefaultSpecifier;
+ declare export function recordExpression(properties: Array<BabelNodeObjectProperty | BabelNodeSpreadElement>): BabelNodeRecordExpression;
+ declare export function tupleExpression(elements?: Array<BabelNodeExpression | BabelNodeSpreadElement>): BabelNodeTupleExpression;
+ declare export function decimalLiteral(value: string): BabelNodeDecimalLiteral;
+ declare export function staticBlock(body: Array<BabelNodeStatement>): BabelNodeStaticBlock;
+ declare export function moduleExpression(body: BabelNodeProgram): BabelNodeModuleExpression;
+ declare export function topicReference(): BabelNodeTopicReference;
+ declare export function pipelineTopicExpression(expression: BabelNodeExpression): BabelNodePipelineTopicExpression;
+ declare export function pipelineBareFunction(callee: BabelNodeExpression): BabelNodePipelineBareFunction;
+ declare export function pipelinePrimaryTopicReference(): BabelNodePipelinePrimaryTopicReference;
+ declare export function tsParameterProperty(parameter: BabelNodeIdentifier | BabelNodeAssignmentPattern): BabelNodeTSParameterProperty;
+ declare export function tsDeclareFunction(id?: BabelNodeIdentifier, typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop, params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement>, returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop): BabelNodeTSDeclareFunction;
+ declare export function tsDeclareMethod(decorators?: Array<BabelNodeDecorator>, key: BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeExpression, typeParameters?: BabelNodeTSTypeParameterDeclaration | BabelNodeNoop, params: Array<BabelNodeIdentifier | BabelNodePattern | BabelNodeRestElement | BabelNodeTSParameterProperty>, returnType?: BabelNodeTSTypeAnnotation | BabelNodeNoop): BabelNodeTSDeclareMethod;
+ declare export function tsQualifiedName(left: BabelNodeTSEntityName, right: BabelNodeIdentifier): BabelNodeTSQualifiedName;
+ declare export function tsCallSignatureDeclaration(typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSCallSignatureDeclaration;
+ declare export function tsConstructSignatureDeclaration(typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSConstructSignatureDeclaration;
+ declare export function tsPropertySignature(key: BabelNodeExpression, typeAnnotation?: BabelNodeTSTypeAnnotation, initializer?: BabelNodeExpression): BabelNodeTSPropertySignature;
+ declare export function tsMethodSignature(key: BabelNodeExpression, typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSMethodSignature;
+ declare export function tsIndexSignature(parameters: Array<BabelNodeIdentifier>, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSIndexSignature;
+ declare export function tsAnyKeyword(): BabelNodeTSAnyKeyword;
+ declare export function tsBooleanKeyword(): BabelNodeTSBooleanKeyword;
+ declare export function tsBigIntKeyword(): BabelNodeTSBigIntKeyword;
+ declare export function tsIntrinsicKeyword(): BabelNodeTSIntrinsicKeyword;
+ declare export function tsNeverKeyword(): BabelNodeTSNeverKeyword;
+ declare export function tsNullKeyword(): BabelNodeTSNullKeyword;
+ declare export function tsNumberKeyword(): BabelNodeTSNumberKeyword;
+ declare export function tsObjectKeyword(): BabelNodeTSObjectKeyword;
+ declare export function tsStringKeyword(): BabelNodeTSStringKeyword;
+ declare export function tsSymbolKeyword(): BabelNodeTSSymbolKeyword;
+ declare export function tsUndefinedKeyword(): BabelNodeTSUndefinedKeyword;
+ declare export function tsUnknownKeyword(): BabelNodeTSUnknownKeyword;
+ declare export function tsVoidKeyword(): BabelNodeTSVoidKeyword;
+ declare export function tsThisType(): BabelNodeTSThisType;
+ declare export function tsFunctionType(typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSFunctionType;
+ declare export function tsConstructorType(typeParameters?: BabelNodeTSTypeParameterDeclaration, parameters: Array<BabelNodeIdentifier | BabelNodeRestElement>, typeAnnotation?: BabelNodeTSTypeAnnotation): BabelNodeTSConstructorType;
+ declare export function tsTypeReference(typeName: BabelNodeTSEntityName, typeParameters?: BabelNodeTSTypeParameterInstantiation): BabelNodeTSTypeReference;
+ declare export function tsTypePredicate(parameterName: BabelNodeIdentifier | BabelNodeTSThisType, typeAnnotation?: BabelNodeTSTypeAnnotation, asserts?: boolean): BabelNodeTSTypePredicate;
+ declare export function tsTypeQuery(exprName: BabelNodeTSEntityName | BabelNodeTSImportType): BabelNodeTSTypeQuery;
+ declare export function tsTypeLiteral(members: Array<BabelNodeTSTypeElement>): BabelNodeTSTypeLiteral;
+ declare export function tsArrayType(elementType: BabelNodeTSType): BabelNodeTSArrayType;
+ declare export function tsTupleType(elementTypes: Array<BabelNodeTSType | BabelNodeTSNamedTupleMember>): BabelNodeTSTupleType;
+ declare export function tsOptionalType(typeAnnotation: BabelNodeTSType): BabelNodeTSOptionalType;
+ declare export function tsRestType(typeAnnotation: BabelNodeTSType): BabelNodeTSRestType;
+ declare export function tsNamedTupleMember(label: BabelNodeIdentifier, elementType: BabelNodeTSType, optional?: boolean): BabelNodeTSNamedTupleMember;
+ declare export function tsUnionType(types: Array<BabelNodeTSType>): BabelNodeTSUnionType;
+ declare export function tsIntersectionType(types: Array<BabelNodeTSType>): BabelNodeTSIntersectionType;
+ declare export function tsConditionalType(checkType: BabelNodeTSType, extendsType: BabelNodeTSType, trueType: BabelNodeTSType, falseType: BabelNodeTSType): BabelNodeTSConditionalType;
+ declare export function tsInferType(typeParameter: BabelNodeTSTypeParameter): BabelNodeTSInferType;
+ declare export function tsParenthesizedType(typeAnnotation: BabelNodeTSType): BabelNodeTSParenthesizedType;
+ declare export function tsTypeOperator(typeAnnotation: BabelNodeTSType): BabelNodeTSTypeOperator;
+ declare export function tsIndexedAccessType(objectType: BabelNodeTSType, indexType: BabelNodeTSType): BabelNodeTSIndexedAccessType;
+ declare export function tsMappedType(typeParameter: BabelNodeTSTypeParameter, typeAnnotation?: BabelNodeTSType, nameType?: BabelNodeTSType): BabelNodeTSMappedType;
+ declare export function tsLiteralType(literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral | BabelNodeBigIntLiteral | BabelNodeUnaryExpression): BabelNodeTSLiteralType;
+ declare export function tsExpressionWithTypeArguments(expression: BabelNodeTSEntityName, typeParameters?: BabelNodeTSTypeParameterInstantiation): BabelNodeTSExpressionWithTypeArguments;
+ declare export function tsInterfaceDeclaration(id: BabelNodeIdentifier, typeParameters?: BabelNodeTSTypeParameterDeclaration, _extends?: Array<BabelNodeTSExpressionWithTypeArguments>, body: BabelNodeTSInterfaceBody): BabelNodeTSInterfaceDeclaration;
+ declare export function tsInterfaceBody(body: Array<BabelNodeTSTypeElement>): BabelNodeTSInterfaceBody;
+ declare export function tsTypeAliasDeclaration(id: BabelNodeIdentifier, typeParameters?: BabelNodeTSTypeParameterDeclaration, typeAnnotation: BabelNodeTSType): BabelNodeTSTypeAliasDeclaration;
+ declare export function tsAsExpression(expression: BabelNodeExpression, typeAnnotation: BabelNodeTSType): BabelNodeTSAsExpression;
+ declare export function tsTypeAssertion(typeAnnotation: BabelNodeTSType, expression: BabelNodeExpression): BabelNodeTSTypeAssertion;
+ declare export function tsEnumDeclaration(id: BabelNodeIdentifier, members: Array<BabelNodeTSEnumMember>): BabelNodeTSEnumDeclaration;
+ declare export function tsEnumMember(id: BabelNodeIdentifier | BabelNodeStringLiteral, initializer?: BabelNodeExpression): BabelNodeTSEnumMember;
+ declare export function tsModuleDeclaration(id: BabelNodeIdentifier | BabelNodeStringLiteral, body: BabelNodeTSModuleBlock | BabelNodeTSModuleDeclaration): BabelNodeTSModuleDeclaration;
+ declare export function tsModuleBlock(body: Array<BabelNodeStatement>): BabelNodeTSModuleBlock;
+ declare export function tsImportType(argument: BabelNodeStringLiteral, qualifier?: BabelNodeTSEntityName, typeParameters?: BabelNodeTSTypeParameterInstantiation): BabelNodeTSImportType;
+ declare export function tsImportEqualsDeclaration(id: BabelNodeIdentifier, moduleReference: BabelNodeTSEntityName | BabelNodeTSExternalModuleReference): BabelNodeTSImportEqualsDeclaration;
+ declare export function tsExternalModuleReference(expression: BabelNodeStringLiteral): BabelNodeTSExternalModuleReference;
+ declare export function tsNonNullExpression(expression: BabelNodeExpression): BabelNodeTSNonNullExpression;
+ declare export function tsExportAssignment(expression: BabelNodeExpression): BabelNodeTSExportAssignment;
+ declare export function tsNamespaceExportDeclaration(id: BabelNodeIdentifier): BabelNodeTSNamespaceExportDeclaration;
+ declare export function tsTypeAnnotation(typeAnnotation: BabelNodeTSType): BabelNodeTSTypeAnnotation;
+ declare export function tsTypeParameterInstantiation(params: Array<BabelNodeTSType>): BabelNodeTSTypeParameterInstantiation;
+ declare export function tsTypeParameterDeclaration(params: Array<BabelNodeTSTypeParameter>): BabelNodeTSTypeParameterDeclaration;
+ declare export function tsTypeParameter(constraint?: BabelNodeTSType, _default?: BabelNodeTSType, name: string): BabelNodeTSTypeParameter;
+ declare export function isArrayExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeArrayExpression)
+ declare export function assertArrayExpression(node: ?Object, opts?: ?Object): void
+ declare export function isAssignmentExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeAssignmentExpression)
+ declare export function assertAssignmentExpression(node: ?Object, opts?: ?Object): void
+ declare export function isBinaryExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBinaryExpression)
+ declare export function assertBinaryExpression(node: ?Object, opts?: ?Object): void
+ declare export function isInterpreterDirective(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeInterpreterDirective)
+ declare export function assertInterpreterDirective(node: ?Object, opts?: ?Object): void
+ declare export function isDirective(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDirective)
+ declare export function assertDirective(node: ?Object, opts?: ?Object): void
+ declare export function isDirectiveLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDirectiveLiteral)
+ declare export function assertDirectiveLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isBlockStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBlockStatement)
+ declare export function assertBlockStatement(node: ?Object, opts?: ?Object): void
+ declare export function isBreakStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBreakStatement)
+ declare export function assertBreakStatement(node: ?Object, opts?: ?Object): void
+ declare export function isCallExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeCallExpression)
+ declare export function assertCallExpression(node: ?Object, opts?: ?Object): void
+ declare export function isCatchClause(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeCatchClause)
+ declare export function assertCatchClause(node: ?Object, opts?: ?Object): void
+ declare export function isConditionalExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeConditionalExpression)
+ declare export function assertConditionalExpression(node: ?Object, opts?: ?Object): void
+ declare export function isContinueStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeContinueStatement)
+ declare export function assertContinueStatement(node: ?Object, opts?: ?Object): void
+ declare export function isDebuggerStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDebuggerStatement)
+ declare export function assertDebuggerStatement(node: ?Object, opts?: ?Object): void
+ declare export function isDoWhileStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDoWhileStatement)
+ declare export function assertDoWhileStatement(node: ?Object, opts?: ?Object): void
+ declare export function isEmptyStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEmptyStatement)
+ declare export function assertEmptyStatement(node: ?Object, opts?: ?Object): void
+ declare export function isExpressionStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExpressionStatement)
+ declare export function assertExpressionStatement(node: ?Object, opts?: ?Object): void
+ declare export function isFile(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeFile)
+ declare export function assertFile(node: ?Object, opts?: ?Object): void
+ declare export function isForInStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeForInStatement)
+ declare export function assertForInStatement(node: ?Object, opts?: ?Object): void
+ declare export function isForStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeForStatement)
+ declare export function assertForStatement(node: ?Object, opts?: ?Object): void
+ declare export function isFunctionDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeFunctionDeclaration)
+ declare export function assertFunctionDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isFunctionExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeFunctionExpression)
+ declare export function assertFunctionExpression(node: ?Object, opts?: ?Object): void
+ declare export function isIdentifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeIdentifier)
+ declare export function assertIdentifier(node: ?Object, opts?: ?Object): void
+ declare export function isIfStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeIfStatement)
+ declare export function assertIfStatement(node: ?Object, opts?: ?Object): void
+ declare export function isLabeledStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeLabeledStatement)
+ declare export function assertLabeledStatement(node: ?Object, opts?: ?Object): void
+ declare export function isStringLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeStringLiteral)
+ declare export function assertStringLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isNumericLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNumericLiteral)
+ declare export function assertNumericLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isNullLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNullLiteral)
+ declare export function assertNullLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isBooleanLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBooleanLiteral)
+ declare export function assertBooleanLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isRegExpLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeRegExpLiteral)
+ declare export function assertRegExpLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isLogicalExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeLogicalExpression)
+ declare export function assertLogicalExpression(node: ?Object, opts?: ?Object): void
+ declare export function isMemberExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeMemberExpression)
+ declare export function assertMemberExpression(node: ?Object, opts?: ?Object): void
+ declare export function isNewExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNewExpression)
+ declare export function assertNewExpression(node: ?Object, opts?: ?Object): void
+ declare export function isProgram(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeProgram)
+ declare export function assertProgram(node: ?Object, opts?: ?Object): void
+ declare export function isObjectExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectExpression)
+ declare export function assertObjectExpression(node: ?Object, opts?: ?Object): void
+ declare export function isObjectMethod(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectMethod)
+ declare export function assertObjectMethod(node: ?Object, opts?: ?Object): void
+ declare export function isObjectProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectProperty)
+ declare export function assertObjectProperty(node: ?Object, opts?: ?Object): void
+ declare export function isRestElement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeRestElement)
+ declare export function assertRestElement(node: ?Object, opts?: ?Object): void
+ declare export function isReturnStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeReturnStatement)
+ declare export function assertReturnStatement(node: ?Object, opts?: ?Object): void
+ declare export function isSequenceExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeSequenceExpression)
+ declare export function assertSequenceExpression(node: ?Object, opts?: ?Object): void
+ declare export function isParenthesizedExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeParenthesizedExpression)
+ declare export function assertParenthesizedExpression(node: ?Object, opts?: ?Object): void
+ declare export function isSwitchCase(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeSwitchCase)
+ declare export function assertSwitchCase(node: ?Object, opts?: ?Object): void
+ declare export function isSwitchStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeSwitchStatement)
+ declare export function assertSwitchStatement(node: ?Object, opts?: ?Object): void
+ declare export function isThisExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeThisExpression)
+ declare export function assertThisExpression(node: ?Object, opts?: ?Object): void
+ declare export function isThrowStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeThrowStatement)
+ declare export function assertThrowStatement(node: ?Object, opts?: ?Object): void
+ declare export function isTryStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTryStatement)
+ declare export function assertTryStatement(node: ?Object, opts?: ?Object): void
+ declare export function isUnaryExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeUnaryExpression)
+ declare export function assertUnaryExpression(node: ?Object, opts?: ?Object): void
+ declare export function isUpdateExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeUpdateExpression)
+ declare export function assertUpdateExpression(node: ?Object, opts?: ?Object): void
+ declare export function isVariableDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeVariableDeclaration)
+ declare export function assertVariableDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isVariableDeclarator(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeVariableDeclarator)
+ declare export function assertVariableDeclarator(node: ?Object, opts?: ?Object): void
+ declare export function isWhileStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeWhileStatement)
+ declare export function assertWhileStatement(node: ?Object, opts?: ?Object): void
+ declare export function isWithStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeWithStatement)
+ declare export function assertWithStatement(node: ?Object, opts?: ?Object): void
+ declare export function isAssignmentPattern(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeAssignmentPattern)
+ declare export function assertAssignmentPattern(node: ?Object, opts?: ?Object): void
+ declare export function isArrayPattern(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeArrayPattern)
+ declare export function assertArrayPattern(node: ?Object, opts?: ?Object): void
+ declare export function isArrowFunctionExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeArrowFunctionExpression)
+ declare export function assertArrowFunctionExpression(node: ?Object, opts?: ?Object): void
+ declare export function isClassBody(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassBody)
+ declare export function assertClassBody(node: ?Object, opts?: ?Object): void
+ declare export function isClassExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassExpression)
+ declare export function assertClassExpression(node: ?Object, opts?: ?Object): void
+ declare export function isClassDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassDeclaration)
+ declare export function assertClassDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isExportAllDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExportAllDeclaration)
+ declare export function assertExportAllDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isExportDefaultDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExportDefaultDeclaration)
+ declare export function assertExportDefaultDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isExportNamedDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExportNamedDeclaration)
+ declare export function assertExportNamedDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isExportSpecifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExportSpecifier)
+ declare export function assertExportSpecifier(node: ?Object, opts?: ?Object): void
+ declare export function isForOfStatement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeForOfStatement)
+ declare export function assertForOfStatement(node: ?Object, opts?: ?Object): void
+ declare export function isImportDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeImportDeclaration)
+ declare export function assertImportDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isImportDefaultSpecifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeImportDefaultSpecifier)
+ declare export function assertImportDefaultSpecifier(node: ?Object, opts?: ?Object): void
+ declare export function isImportNamespaceSpecifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeImportNamespaceSpecifier)
+ declare export function assertImportNamespaceSpecifier(node: ?Object, opts?: ?Object): void
+ declare export function isImportSpecifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeImportSpecifier)
+ declare export function assertImportSpecifier(node: ?Object, opts?: ?Object): void
+ declare export function isMetaProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeMetaProperty)
+ declare export function assertMetaProperty(node: ?Object, opts?: ?Object): void
+ declare export function isClassMethod(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassMethod)
+ declare export function assertClassMethod(node: ?Object, opts?: ?Object): void
+ declare export function isObjectPattern(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectPattern)
+ declare export function assertObjectPattern(node: ?Object, opts?: ?Object): void
+ declare export function isSpreadElement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeSpreadElement)
+ declare export function assertSpreadElement(node: ?Object, opts?: ?Object): void
+ declare export function isSuper(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeSuper)
+ declare export function assertSuper(node: ?Object, opts?: ?Object): void
+ declare export function isTaggedTemplateExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTaggedTemplateExpression)
+ declare export function assertTaggedTemplateExpression(node: ?Object, opts?: ?Object): void
+ declare export function isTemplateElement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTemplateElement)
+ declare export function assertTemplateElement(node: ?Object, opts?: ?Object): void
+ declare export function isTemplateLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTemplateLiteral)
+ declare export function assertTemplateLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isYieldExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeYieldExpression)
+ declare export function assertYieldExpression(node: ?Object, opts?: ?Object): void
+ declare export function isAwaitExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeAwaitExpression)
+ declare export function assertAwaitExpression(node: ?Object, opts?: ?Object): void
+ declare export function isImport(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeImport)
+ declare export function assertImport(node: ?Object, opts?: ?Object): void
+ declare export function isBigIntLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBigIntLiteral)
+ declare export function assertBigIntLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isExportNamespaceSpecifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExportNamespaceSpecifier)
+ declare export function assertExportNamespaceSpecifier(node: ?Object, opts?: ?Object): void
+ declare export function isOptionalMemberExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeOptionalMemberExpression)
+ declare export function assertOptionalMemberExpression(node: ?Object, opts?: ?Object): void
+ declare export function isOptionalCallExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeOptionalCallExpression)
+ declare export function assertOptionalCallExpression(node: ?Object, opts?: ?Object): void
+ declare export function isClassProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassProperty)
+ declare export function assertClassProperty(node: ?Object, opts?: ?Object): void
+ declare export function isClassPrivateProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassPrivateProperty)
+ declare export function assertClassPrivateProperty(node: ?Object, opts?: ?Object): void
+ declare export function isClassPrivateMethod(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassPrivateMethod)
+ declare export function assertClassPrivateMethod(node: ?Object, opts?: ?Object): void
+ declare export function isPrivateName(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodePrivateName)
+ declare export function assertPrivateName(node: ?Object, opts?: ?Object): void
+ declare export function isAnyTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeAnyTypeAnnotation)
+ declare export function assertAnyTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isArrayTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeArrayTypeAnnotation)
+ declare export function assertArrayTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isBooleanTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBooleanTypeAnnotation)
+ declare export function assertBooleanTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isBooleanLiteralTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBooleanLiteralTypeAnnotation)
+ declare export function assertBooleanLiteralTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isNullLiteralTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNullLiteralTypeAnnotation)
+ declare export function assertNullLiteralTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isClassImplements(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeClassImplements)
+ declare export function assertClassImplements(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareClass(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareClass)
+ declare export function assertDeclareClass(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareFunction(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareFunction)
+ declare export function assertDeclareFunction(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareInterface(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareInterface)
+ declare export function assertDeclareInterface(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareModule(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareModule)
+ declare export function assertDeclareModule(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareModuleExports(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareModuleExports)
+ declare export function assertDeclareModuleExports(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareTypeAlias(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareTypeAlias)
+ declare export function assertDeclareTypeAlias(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareOpaqueType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareOpaqueType)
+ declare export function assertDeclareOpaqueType(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareVariable(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareVariable)
+ declare export function assertDeclareVariable(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareExportDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareExportDeclaration)
+ declare export function assertDeclareExportDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isDeclareExportAllDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclareExportAllDeclaration)
+ declare export function assertDeclareExportAllDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isDeclaredPredicate(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDeclaredPredicate)
+ declare export function assertDeclaredPredicate(node: ?Object, opts?: ?Object): void
+ declare export function isExistsTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExistsTypeAnnotation)
+ declare export function assertExistsTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isFunctionTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeFunctionTypeAnnotation)
+ declare export function assertFunctionTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isFunctionTypeParam(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeFunctionTypeParam)
+ declare export function assertFunctionTypeParam(node: ?Object, opts?: ?Object): void
+ declare export function isGenericTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeGenericTypeAnnotation)
+ declare export function assertGenericTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isInferredPredicate(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeInferredPredicate)
+ declare export function assertInferredPredicate(node: ?Object, opts?: ?Object): void
+ declare export function isInterfaceExtends(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeInterfaceExtends)
+ declare export function assertInterfaceExtends(node: ?Object, opts?: ?Object): void
+ declare export function isInterfaceDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeInterfaceDeclaration)
+ declare export function assertInterfaceDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isInterfaceTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeInterfaceTypeAnnotation)
+ declare export function assertInterfaceTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isIntersectionTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeIntersectionTypeAnnotation)
+ declare export function assertIntersectionTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isMixedTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeMixedTypeAnnotation)
+ declare export function assertMixedTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isEmptyTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEmptyTypeAnnotation)
+ declare export function assertEmptyTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isNullableTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNullableTypeAnnotation)
+ declare export function assertNullableTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isNumberLiteralTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNumberLiteralTypeAnnotation)
+ declare export function assertNumberLiteralTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isNumberTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNumberTypeAnnotation)
+ declare export function assertNumberTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isObjectTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectTypeAnnotation)
+ declare export function assertObjectTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isObjectTypeInternalSlot(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectTypeInternalSlot)
+ declare export function assertObjectTypeInternalSlot(node: ?Object, opts?: ?Object): void
+ declare export function isObjectTypeCallProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectTypeCallProperty)
+ declare export function assertObjectTypeCallProperty(node: ?Object, opts?: ?Object): void
+ declare export function isObjectTypeIndexer(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectTypeIndexer)
+ declare export function assertObjectTypeIndexer(node: ?Object, opts?: ?Object): void
+ declare export function isObjectTypeProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectTypeProperty)
+ declare export function assertObjectTypeProperty(node: ?Object, opts?: ?Object): void
+ declare export function isObjectTypeSpreadProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeObjectTypeSpreadProperty)
+ declare export function assertObjectTypeSpreadProperty(node: ?Object, opts?: ?Object): void
+ declare export function isOpaqueType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeOpaqueType)
+ declare export function assertOpaqueType(node: ?Object, opts?: ?Object): void
+ declare export function isQualifiedTypeIdentifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeQualifiedTypeIdentifier)
+ declare export function assertQualifiedTypeIdentifier(node: ?Object, opts?: ?Object): void
+ declare export function isStringLiteralTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeStringLiteralTypeAnnotation)
+ declare export function assertStringLiteralTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isStringTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeStringTypeAnnotation)
+ declare export function assertStringTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isSymbolTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeSymbolTypeAnnotation)
+ declare export function assertSymbolTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isThisTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeThisTypeAnnotation)
+ declare export function assertThisTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isTupleTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTupleTypeAnnotation)
+ declare export function assertTupleTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isTypeofTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTypeofTypeAnnotation)
+ declare export function assertTypeofTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isTypeAlias(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTypeAlias)
+ declare export function assertTypeAlias(node: ?Object, opts?: ?Object): void
+ declare export function isTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTypeAnnotation)
+ declare export function assertTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isTypeCastExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTypeCastExpression)
+ declare export function assertTypeCastExpression(node: ?Object, opts?: ?Object): void
+ declare export function isTypeParameter(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTypeParameter)
+ declare export function assertTypeParameter(node: ?Object, opts?: ?Object): void
+ declare export function isTypeParameterDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTypeParameterDeclaration)
+ declare export function assertTypeParameterDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTypeParameterInstantiation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTypeParameterInstantiation)
+ declare export function assertTypeParameterInstantiation(node: ?Object, opts?: ?Object): void
+ declare export function isUnionTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeUnionTypeAnnotation)
+ declare export function assertUnionTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isVariance(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeVariance)
+ declare export function assertVariance(node: ?Object, opts?: ?Object): void
+ declare export function isVoidTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeVoidTypeAnnotation)
+ declare export function assertVoidTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isEnumDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumDeclaration)
+ declare export function assertEnumDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isEnumBooleanBody(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumBooleanBody)
+ declare export function assertEnumBooleanBody(node: ?Object, opts?: ?Object): void
+ declare export function isEnumNumberBody(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumNumberBody)
+ declare export function assertEnumNumberBody(node: ?Object, opts?: ?Object): void
+ declare export function isEnumStringBody(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumStringBody)
+ declare export function assertEnumStringBody(node: ?Object, opts?: ?Object): void
+ declare export function isEnumSymbolBody(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumSymbolBody)
+ declare export function assertEnumSymbolBody(node: ?Object, opts?: ?Object): void
+ declare export function isEnumBooleanMember(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumBooleanMember)
+ declare export function assertEnumBooleanMember(node: ?Object, opts?: ?Object): void
+ declare export function isEnumNumberMember(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumNumberMember)
+ declare export function assertEnumNumberMember(node: ?Object, opts?: ?Object): void
+ declare export function isEnumStringMember(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumStringMember)
+ declare export function assertEnumStringMember(node: ?Object, opts?: ?Object): void
+ declare export function isEnumDefaultedMember(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeEnumDefaultedMember)
+ declare export function assertEnumDefaultedMember(node: ?Object, opts?: ?Object): void
+ declare export function isIndexedAccessType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeIndexedAccessType)
+ declare export function assertIndexedAccessType(node: ?Object, opts?: ?Object): void
+ declare export function isOptionalIndexedAccessType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeOptionalIndexedAccessType)
+ declare export function assertOptionalIndexedAccessType(node: ?Object, opts?: ?Object): void
+ declare export function isJSXAttribute(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXAttribute)
+ declare export function assertJSXAttribute(node: ?Object, opts?: ?Object): void
+ declare export function isJSXClosingElement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXClosingElement)
+ declare export function assertJSXClosingElement(node: ?Object, opts?: ?Object): void
+ declare export function isJSXElement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXElement)
+ declare export function assertJSXElement(node: ?Object, opts?: ?Object): void
+ declare export function isJSXEmptyExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXEmptyExpression)
+ declare export function assertJSXEmptyExpression(node: ?Object, opts?: ?Object): void
+ declare export function isJSXExpressionContainer(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXExpressionContainer)
+ declare export function assertJSXExpressionContainer(node: ?Object, opts?: ?Object): void
+ declare export function isJSXSpreadChild(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXSpreadChild)
+ declare export function assertJSXSpreadChild(node: ?Object, opts?: ?Object): void
+ declare export function isJSXIdentifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXIdentifier)
+ declare export function assertJSXIdentifier(node: ?Object, opts?: ?Object): void
+ declare export function isJSXMemberExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXMemberExpression)
+ declare export function assertJSXMemberExpression(node: ?Object, opts?: ?Object): void
+ declare export function isJSXNamespacedName(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXNamespacedName)
+ declare export function assertJSXNamespacedName(node: ?Object, opts?: ?Object): void
+ declare export function isJSXOpeningElement(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXOpeningElement)
+ declare export function assertJSXOpeningElement(node: ?Object, opts?: ?Object): void
+ declare export function isJSXSpreadAttribute(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXSpreadAttribute)
+ declare export function assertJSXSpreadAttribute(node: ?Object, opts?: ?Object): void
+ declare export function isJSXText(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXText)
+ declare export function assertJSXText(node: ?Object, opts?: ?Object): void
+ declare export function isJSXFragment(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXFragment)
+ declare export function assertJSXFragment(node: ?Object, opts?: ?Object): void
+ declare export function isJSXOpeningFragment(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXOpeningFragment)
+ declare export function assertJSXOpeningFragment(node: ?Object, opts?: ?Object): void
+ declare export function isJSXClosingFragment(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeJSXClosingFragment)
+ declare export function assertJSXClosingFragment(node: ?Object, opts?: ?Object): void
+ declare export function isNoop(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNoop)
+ declare export function assertNoop(node: ?Object, opts?: ?Object): void
+ declare export function isPlaceholder(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodePlaceholder)
+ declare export function assertPlaceholder(node: ?Object, opts?: ?Object): void
+ declare export function isV8IntrinsicIdentifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeV8IntrinsicIdentifier)
+ declare export function assertV8IntrinsicIdentifier(node: ?Object, opts?: ?Object): void
+ declare export function isArgumentPlaceholder(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeArgumentPlaceholder)
+ declare export function assertArgumentPlaceholder(node: ?Object, opts?: ?Object): void
+ declare export function isBindExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeBindExpression)
+ declare export function assertBindExpression(node: ?Object, opts?: ?Object): void
+ declare export function isImportAttribute(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeImportAttribute)
+ declare export function assertImportAttribute(node: ?Object, opts?: ?Object): void
+ declare export function isDecorator(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDecorator)
+ declare export function assertDecorator(node: ?Object, opts?: ?Object): void
+ declare export function isDoExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDoExpression)
+ declare export function assertDoExpression(node: ?Object, opts?: ?Object): void
+ declare export function isExportDefaultSpecifier(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeExportDefaultSpecifier)
+ declare export function assertExportDefaultSpecifier(node: ?Object, opts?: ?Object): void
+ declare export function isRecordExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeRecordExpression)
+ declare export function assertRecordExpression(node: ?Object, opts?: ?Object): void
+ declare export function isTupleExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTupleExpression)
+ declare export function assertTupleExpression(node: ?Object, opts?: ?Object): void
+ declare export function isDecimalLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeDecimalLiteral)
+ declare export function assertDecimalLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isStaticBlock(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeStaticBlock)
+ declare export function assertStaticBlock(node: ?Object, opts?: ?Object): void
+ declare export function isModuleExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeModuleExpression)
+ declare export function assertModuleExpression(node: ?Object, opts?: ?Object): void
+ declare export function isTopicReference(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTopicReference)
+ declare export function assertTopicReference(node: ?Object, opts?: ?Object): void
+ declare export function isPipelineTopicExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodePipelineTopicExpression)
+ declare export function assertPipelineTopicExpression(node: ?Object, opts?: ?Object): void
+ declare export function isPipelineBareFunction(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodePipelineBareFunction)
+ declare export function assertPipelineBareFunction(node: ?Object, opts?: ?Object): void
+ declare export function isPipelinePrimaryTopicReference(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodePipelinePrimaryTopicReference)
+ declare export function assertPipelinePrimaryTopicReference(node: ?Object, opts?: ?Object): void
+ declare export function isTSParameterProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSParameterProperty)
+ declare export function assertTSParameterProperty(node: ?Object, opts?: ?Object): void
+ declare export function isTSDeclareFunction(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSDeclareFunction)
+ declare export function assertTSDeclareFunction(node: ?Object, opts?: ?Object): void
+ declare export function isTSDeclareMethod(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSDeclareMethod)
+ declare export function assertTSDeclareMethod(node: ?Object, opts?: ?Object): void
+ declare export function isTSQualifiedName(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSQualifiedName)
+ declare export function assertTSQualifiedName(node: ?Object, opts?: ?Object): void
+ declare export function isTSCallSignatureDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSCallSignatureDeclaration)
+ declare export function assertTSCallSignatureDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSConstructSignatureDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSConstructSignatureDeclaration)
+ declare export function assertTSConstructSignatureDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSPropertySignature(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSPropertySignature)
+ declare export function assertTSPropertySignature(node: ?Object, opts?: ?Object): void
+ declare export function isTSMethodSignature(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSMethodSignature)
+ declare export function assertTSMethodSignature(node: ?Object, opts?: ?Object): void
+ declare export function isTSIndexSignature(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSIndexSignature)
+ declare export function assertTSIndexSignature(node: ?Object, opts?: ?Object): void
+ declare export function isTSAnyKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSAnyKeyword)
+ declare export function assertTSAnyKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSBooleanKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSBooleanKeyword)
+ declare export function assertTSBooleanKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSBigIntKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSBigIntKeyword)
+ declare export function assertTSBigIntKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSIntrinsicKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSIntrinsicKeyword)
+ declare export function assertTSIntrinsicKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSNeverKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSNeverKeyword)
+ declare export function assertTSNeverKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSNullKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSNullKeyword)
+ declare export function assertTSNullKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSNumberKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSNumberKeyword)
+ declare export function assertTSNumberKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSObjectKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSObjectKeyword)
+ declare export function assertTSObjectKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSStringKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSStringKeyword)
+ declare export function assertTSStringKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSSymbolKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSSymbolKeyword)
+ declare export function assertTSSymbolKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSUndefinedKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSUndefinedKeyword)
+ declare export function assertTSUndefinedKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSUnknownKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSUnknownKeyword)
+ declare export function assertTSUnknownKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSVoidKeyword(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSVoidKeyword)
+ declare export function assertTSVoidKeyword(node: ?Object, opts?: ?Object): void
+ declare export function isTSThisType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSThisType)
+ declare export function assertTSThisType(node: ?Object, opts?: ?Object): void
+ declare export function isTSFunctionType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSFunctionType)
+ declare export function assertTSFunctionType(node: ?Object, opts?: ?Object): void
+ declare export function isTSConstructorType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSConstructorType)
+ declare export function assertTSConstructorType(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeReference(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeReference)
+ declare export function assertTSTypeReference(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypePredicate(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypePredicate)
+ declare export function assertTSTypePredicate(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeQuery(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeQuery)
+ declare export function assertTSTypeQuery(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeLiteral)
+ declare export function assertTSTypeLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isTSArrayType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSArrayType)
+ declare export function assertTSArrayType(node: ?Object, opts?: ?Object): void
+ declare export function isTSTupleType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTupleType)
+ declare export function assertTSTupleType(node: ?Object, opts?: ?Object): void
+ declare export function isTSOptionalType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSOptionalType)
+ declare export function assertTSOptionalType(node: ?Object, opts?: ?Object): void
+ declare export function isTSRestType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSRestType)
+ declare export function assertTSRestType(node: ?Object, opts?: ?Object): void
+ declare export function isTSNamedTupleMember(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSNamedTupleMember)
+ declare export function assertTSNamedTupleMember(node: ?Object, opts?: ?Object): void
+ declare export function isTSUnionType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSUnionType)
+ declare export function assertTSUnionType(node: ?Object, opts?: ?Object): void
+ declare export function isTSIntersectionType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSIntersectionType)
+ declare export function assertTSIntersectionType(node: ?Object, opts?: ?Object): void
+ declare export function isTSConditionalType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSConditionalType)
+ declare export function assertTSConditionalType(node: ?Object, opts?: ?Object): void
+ declare export function isTSInferType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSInferType)
+ declare export function assertTSInferType(node: ?Object, opts?: ?Object): void
+ declare export function isTSParenthesizedType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSParenthesizedType)
+ declare export function assertTSParenthesizedType(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeOperator(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeOperator)
+ declare export function assertTSTypeOperator(node: ?Object, opts?: ?Object): void
+ declare export function isTSIndexedAccessType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSIndexedAccessType)
+ declare export function assertTSIndexedAccessType(node: ?Object, opts?: ?Object): void
+ declare export function isTSMappedType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSMappedType)
+ declare export function assertTSMappedType(node: ?Object, opts?: ?Object): void
+ declare export function isTSLiteralType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSLiteralType)
+ declare export function assertTSLiteralType(node: ?Object, opts?: ?Object): void
+ declare export function isTSExpressionWithTypeArguments(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSExpressionWithTypeArguments)
+ declare export function assertTSExpressionWithTypeArguments(node: ?Object, opts?: ?Object): void
+ declare export function isTSInterfaceDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSInterfaceDeclaration)
+ declare export function assertTSInterfaceDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSInterfaceBody(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSInterfaceBody)
+ declare export function assertTSInterfaceBody(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeAliasDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeAliasDeclaration)
+ declare export function assertTSTypeAliasDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSAsExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSAsExpression)
+ declare export function assertTSAsExpression(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeAssertion(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeAssertion)
+ declare export function assertTSTypeAssertion(node: ?Object, opts?: ?Object): void
+ declare export function isTSEnumDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSEnumDeclaration)
+ declare export function assertTSEnumDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSEnumMember(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSEnumMember)
+ declare export function assertTSEnumMember(node: ?Object, opts?: ?Object): void
+ declare export function isTSModuleDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSModuleDeclaration)
+ declare export function assertTSModuleDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSModuleBlock(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSModuleBlock)
+ declare export function assertTSModuleBlock(node: ?Object, opts?: ?Object): void
+ declare export function isTSImportType(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSImportType)
+ declare export function assertTSImportType(node: ?Object, opts?: ?Object): void
+ declare export function isTSImportEqualsDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSImportEqualsDeclaration)
+ declare export function assertTSImportEqualsDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSExternalModuleReference(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSExternalModuleReference)
+ declare export function assertTSExternalModuleReference(node: ?Object, opts?: ?Object): void
+ declare export function isTSNonNullExpression(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSNonNullExpression)
+ declare export function assertTSNonNullExpression(node: ?Object, opts?: ?Object): void
+ declare export function isTSExportAssignment(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSExportAssignment)
+ declare export function assertTSExportAssignment(node: ?Object, opts?: ?Object): void
+ declare export function isTSNamespaceExportDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSNamespaceExportDeclaration)
+ declare export function assertTSNamespaceExportDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeAnnotation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeAnnotation)
+ declare export function assertTSTypeAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeParameterInstantiation(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeParameterInstantiation)
+ declare export function assertTSTypeParameterInstantiation(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeParameterDeclaration(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeParameterDeclaration)
+ declare export function assertTSTypeParameterDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeParameter(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeTSTypeParameter)
+ declare export function assertTSTypeParameter(node: ?Object, opts?: ?Object): void
+ declare export function isExpression(node: ?Object, opts?: ?Object): boolean
+ declare export function assertExpression(node: ?Object, opts?: ?Object): void
+ declare export function isBinary(node: ?Object, opts?: ?Object): boolean
+ declare export function assertBinary(node: ?Object, opts?: ?Object): void
+ declare export function isScopable(node: ?Object, opts?: ?Object): boolean
+ declare export function assertScopable(node: ?Object, opts?: ?Object): void
+ declare export function isBlockParent(node: ?Object, opts?: ?Object): boolean
+ declare export function assertBlockParent(node: ?Object, opts?: ?Object): void
+ declare export function isBlock(node: ?Object, opts?: ?Object): boolean
+ declare export function assertBlock(node: ?Object, opts?: ?Object): void
+ declare export function isStatement(node: ?Object, opts?: ?Object): boolean
+ declare export function assertStatement(node: ?Object, opts?: ?Object): void
+ declare export function isTerminatorless(node: ?Object, opts?: ?Object): boolean
+ declare export function assertTerminatorless(node: ?Object, opts?: ?Object): void
+ declare export function isCompletionStatement(node: ?Object, opts?: ?Object): boolean
+ declare export function assertCompletionStatement(node: ?Object, opts?: ?Object): void
+ declare export function isConditional(node: ?Object, opts?: ?Object): boolean
+ declare export function assertConditional(node: ?Object, opts?: ?Object): void
+ declare export function isLoop(node: ?Object, opts?: ?Object): boolean
+ declare export function assertLoop(node: ?Object, opts?: ?Object): void
+ declare export function isWhile(node: ?Object, opts?: ?Object): boolean
+ declare export function assertWhile(node: ?Object, opts?: ?Object): void
+ declare export function isExpressionWrapper(node: ?Object, opts?: ?Object): boolean
+ declare export function assertExpressionWrapper(node: ?Object, opts?: ?Object): void
+ declare export function isFor(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFor(node: ?Object, opts?: ?Object): void
+ declare export function isForXStatement(node: ?Object, opts?: ?Object): boolean
+ declare export function assertForXStatement(node: ?Object, opts?: ?Object): void
+ declare export function isFunction(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFunction(node: ?Object, opts?: ?Object): void
+ declare export function isFunctionParent(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFunctionParent(node: ?Object, opts?: ?Object): void
+ declare export function isPureish(node: ?Object, opts?: ?Object): boolean
+ declare export function assertPureish(node: ?Object, opts?: ?Object): void
+ declare export function isDeclaration(node: ?Object, opts?: ?Object): boolean
+ declare export function assertDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isPatternLike(node: ?Object, opts?: ?Object): boolean
+ declare export function assertPatternLike(node: ?Object, opts?: ?Object): void
+ declare export function isLVal(node: ?Object, opts?: ?Object): boolean
+ declare export function assertLVal(node: ?Object, opts?: ?Object): void
+ declare export function isTSEntityName(node: ?Object, opts?: ?Object): boolean
+ declare export function assertTSEntityName(node: ?Object, opts?: ?Object): void
+ declare export function isLiteral(node: ?Object, opts?: ?Object): boolean
+ declare export function assertLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isImmutable(node: ?Object, opts?: ?Object): boolean
+ declare export function assertImmutable(node: ?Object, opts?: ?Object): void
+ declare export function isUserWhitespacable(node: ?Object, opts?: ?Object): boolean
+ declare export function assertUserWhitespacable(node: ?Object, opts?: ?Object): void
+ declare export function isMethod(node: ?Object, opts?: ?Object): boolean
+ declare export function assertMethod(node: ?Object, opts?: ?Object): void
+ declare export function isObjectMember(node: ?Object, opts?: ?Object): boolean
+ declare export function assertObjectMember(node: ?Object, opts?: ?Object): void
+ declare export function isProperty(node: ?Object, opts?: ?Object): boolean
+ declare export function assertProperty(node: ?Object, opts?: ?Object): void
+ declare export function isUnaryLike(node: ?Object, opts?: ?Object): boolean
+ declare export function assertUnaryLike(node: ?Object, opts?: ?Object): void
+ declare export function isPattern(node: ?Object, opts?: ?Object): boolean
+ declare export function assertPattern(node: ?Object, opts?: ?Object): void
+ declare export function isClass(node: ?Object, opts?: ?Object): boolean
+ declare export function assertClass(node: ?Object, opts?: ?Object): void
+ declare export function isModuleDeclaration(node: ?Object, opts?: ?Object): boolean
+ declare export function assertModuleDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isExportDeclaration(node: ?Object, opts?: ?Object): boolean
+ declare export function assertExportDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isModuleSpecifier(node: ?Object, opts?: ?Object): boolean
+ declare export function assertModuleSpecifier(node: ?Object, opts?: ?Object): void
+ declare export function isPrivate(node: ?Object, opts?: ?Object): boolean
+ declare export function assertPrivate(node: ?Object, opts?: ?Object): void
+ declare export function isFlow(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFlow(node: ?Object, opts?: ?Object): void
+ declare export function isFlowType(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFlowType(node: ?Object, opts?: ?Object): void
+ declare export function isFlowBaseAnnotation(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFlowBaseAnnotation(node: ?Object, opts?: ?Object): void
+ declare export function isFlowDeclaration(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFlowDeclaration(node: ?Object, opts?: ?Object): void
+ declare export function isFlowPredicate(node: ?Object, opts?: ?Object): boolean
+ declare export function assertFlowPredicate(node: ?Object, opts?: ?Object): void
+ declare export function isEnumBody(node: ?Object, opts?: ?Object): boolean
+ declare export function assertEnumBody(node: ?Object, opts?: ?Object): void
+ declare export function isEnumMember(node: ?Object, opts?: ?Object): boolean
+ declare export function assertEnumMember(node: ?Object, opts?: ?Object): void
+ declare export function isJSX(node: ?Object, opts?: ?Object): boolean
+ declare export function assertJSX(node: ?Object, opts?: ?Object): void
+ declare export function isTSTypeElement(node: ?Object, opts?: ?Object): boolean
+ declare export function assertTSTypeElement(node: ?Object, opts?: ?Object): void
+ declare export function isTSType(node: ?Object, opts?: ?Object): boolean
+ declare export function assertTSType(node: ?Object, opts?: ?Object): void
+ declare export function isTSBaseType(node: ?Object, opts?: ?Object): boolean
+ declare export function assertTSBaseType(node: ?Object, opts?: ?Object): void
+ declare export function isNumberLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeNumericLiteral)
+ declare export function assertNumberLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isRegexLiteral(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeRegExpLiteral)
+ declare export function assertRegexLiteral(node: ?Object, opts?: ?Object): void
+ declare export function isRestProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeRestElement)
+ declare export function assertRestProperty(node: ?Object, opts?: ?Object): void
+ declare export function isSpreadProperty(node: ?Object, opts?: ?Object): boolean %checks (node instanceof BabelNodeSpreadElement)
+ declare export function assertSpreadProperty(node: ?Object, opts?: ?Object): void
+ declare export var VISITOR_KEYS: { [type: string]: string[] }
+ declare export function assertNode(obj: any): void
+ declare export function createTypeAnnotationBasedOnTypeof(type: 'string' | 'number' | 'undefined' | 'boolean' | 'function' | 'object' | 'symbol'): BabelNodeTypeAnnotation
+ declare export function createUnionTypeAnnotation(types: Array<BabelNodeFlowType>): BabelNodeUnionTypeAnnotation
+ declare export function createFlowUnionType(types: Array<BabelNodeFlowType>): BabelNodeUnionTypeAnnotation
+ declare export function buildChildren(node: { children: Array<BabelNodeJSXText | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXElement | BabelNodeJSXFragment | BabelNodeJSXEmptyExpression> }): Array<BabelNodeJSXText | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXElement | BabelNodeJSXFragment>
+ declare export function clone<T>(n: T): T;
+ declare export function cloneDeep<T>(n: T): T;
+ declare export function cloneDeepWithoutLoc<T>(n: T): T;
+ declare export function cloneNode<T>(n: T, deep?: boolean, withoutLoc?: boolean): T;
+ declare export function cloneWithoutLoc<T>(n: T): T;
+ declare type CommentTypeShorthand = 'leading' | 'inner' | 'trailing'
+ declare export function addComment<T: BabelNode>(node: T, type: CommentTypeShorthand, content: string, line?: boolean): T
+ declare export function addComments<T: BabelNode>(node: T, type: CommentTypeShorthand, comments: Array<Comment>): T
+ declare export function inheritInnerComments(node: BabelNode, parent: BabelNode): void
+ declare export function inheritLeadingComments(node: BabelNode, parent: BabelNode): void
+ declare export function inheritsComments<T: BabelNode>(node: T, parent: BabelNode): void
+ declare export function inheritTrailingComments(node: BabelNode, parent: BabelNode): void
+ declare export function removeComments<T: BabelNode>(node: T): T
+ declare export function ensureBlock(node: BabelNode, key: string): BabelNodeBlockStatement
+ declare export function toBindingIdentifierName(name?: ?string): string
+ declare export function toBlock(node: BabelNodeStatement | BabelNodeExpression, parent?: BabelNodeFunction | null): BabelNodeBlockStatement
+ declare export function toComputedKey(node: BabelNodeMethod | BabelNodeProperty, key?: BabelNodeExpression | BabelNodeIdentifier): BabelNodeExpression
+ declare export function toExpression(node: BabelNodeExpressionStatement | BabelNodeExpression | BabelNodeClass | BabelNodeFunction): BabelNodeExpression
+ declare export function toIdentifier(name?: ?string): string
+ declare export function toKeyAlias(node: BabelNodeMethod | BabelNodeProperty, key?: BabelNode): string
+ declare export function toStatement(node: BabelNodeStatement | BabelNodeClass | BabelNodeFunction | BabelNodeAssignmentExpression, ignore?: boolean): BabelNodeStatement | void
+ declare export function valueToNode(value: any): BabelNodeExpression
+ declare export function removeTypeDuplicates(types: Array<BabelNodeFlowType>): Array<BabelNodeFlowType>
+ declare export function appendToMemberExpression(member: BabelNodeMemberExpression, append: BabelNode, computed?: boolean): BabelNodeMemberExpression
+ declare export function inherits<T: BabelNode>(child: T, parent: BabelNode | null | void): T
+ declare export function prependToMemberExpression(member: BabelNodeMemberExpression, prepend: BabelNodeExpression): BabelNodeMemberExpression
+ declare export function removeProperties<T>(n: T, opts: ?{}): void;
+ declare export function removePropertiesDeep<T>(n: T, opts: ?{}): T;
+ declare export var getBindingIdentifiers: {
+ (node: BabelNode, duplicates?: boolean, outerOnly?: boolean): { [key: string]: BabelNodeIdentifier | Array<BabelNodeIdentifier> },
+ keys: { [type: string]: string[] }
+ }
+ declare export function getOuterBindingIdentifiers(node: BabelNode, duplicates?: boolean): { [key: string]: BabelNodeIdentifier | Array<BabelNodeIdentifier> }
+ declare type TraversalAncestors = Array<{
+ node: BabelNode,
+ key: string,
+ index?: number,
+ }>;
+ declare type TraversalHandler<T> = (BabelNode, TraversalAncestors, T) => void;
+ declare type TraversalHandlers<T> = {
+ enter?: TraversalHandler<T>,
+ exit?: TraversalHandler<T>,
+ };
+ declare export function traverse<T>(n: BabelNode, TraversalHandler<T> | TraversalHandlers<T>, state?: T): void;
+ declare export function traverseFast<T>(n: BabelNode, h: TraversalHandler<T>, state?: T): void;
+ declare export function shallowEqual(actual: Object, expected: Object): boolean
+ declare export function buildMatchMemberExpression(match: string, allowPartial?: boolean): (?BabelNode) => boolean
+ declare export function is(type: string, n: BabelNode, opts: Object): boolean;
+ declare export function isBinding(node: BabelNode, parent: BabelNode, grandparent?: BabelNode): boolean
+ declare export function isBlockScoped(node: BabelNode): boolean
+ declare export function isImmutable(node: BabelNode): boolean
+ declare export function isLet(node: BabelNode): boolean
+ declare export function isNode(node: ?Object): boolean
+ declare export function isNodesEquivalent(a: any, b: any): boolean
+ declare export function isPlaceholderType(placeholderType: string, targetType: string): boolean
+ declare export function isReferenced(node: BabelNode, parent: BabelNode, grandparent?: BabelNode): boolean
+ declare export function isScope(node: BabelNode, parent: BabelNode): boolean
+ declare export function isSpecifierDefault(specifier: BabelNodeModuleSpecifier): boolean
+ declare export function isType(nodetype: ?string, targetType: string): boolean
+ declare export function isValidES3Identifier(name: string): boolean
+ declare export function isValidES3Identifier(name: string): boolean
+ declare export function isValidIdentifier(name: string): boolean
+ declare export function isVar(node: BabelNode): boolean
+ declare export function matchesPattern(node: ?BabelNode, match: string | Array<string>, allowPartial?: boolean): boolean
+ declare export function validate(n: BabelNode, key: string, value: mixed): void;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js
new file mode 100644
index 00000000000..6a0ac93c5cf
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = appendToMemberExpression;
+
+var _generated = require("../builders/generated");
+
+function appendToMemberExpression(member, append, computed = false) {
+ member.object = (0, _generated.memberExpression)(member.object, member.property, member.computed);
+ member.property = append;
+ member.computed = !!computed;
+ return member;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js
new file mode 100644
index 00000000000..de9464d1672
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js
@@ -0,0 +1,78 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = removeTypeDuplicates;
+
+var _generated = require("../../validators/generated");
+
+function getQualifiedName(node) {
+ return (0, _generated.isIdentifier)(node) ? node.name : `${node.id.name}.${getQualifiedName(node.qualification)}`;
+}
+
+function removeTypeDuplicates(nodes) {
+ const generics = {};
+ const bases = {};
+ const typeGroups = new Set();
+ const types = [];
+
+ for (let i = 0; i < nodes.length; i++) {
+ const node = nodes[i];
+ if (!node) continue;
+
+ if (types.indexOf(node) >= 0) {
+ continue;
+ }
+
+ if ((0, _generated.isAnyTypeAnnotation)(node)) {
+ return [node];
+ }
+
+ if ((0, _generated.isFlowBaseAnnotation)(node)) {
+ bases[node.type] = node;
+ continue;
+ }
+
+ if ((0, _generated.isUnionTypeAnnotation)(node)) {
+ if (!typeGroups.has(node.types)) {
+ nodes = nodes.concat(node.types);
+ typeGroups.add(node.types);
+ }
+
+ continue;
+ }
+
+ if ((0, _generated.isGenericTypeAnnotation)(node)) {
+ const name = getQualifiedName(node.id);
+
+ if (generics[name]) {
+ let existing = generics[name];
+
+ if (existing.typeParameters) {
+ if (node.typeParameters) {
+ existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params));
+ }
+ } else {
+ existing = node.typeParameters;
+ }
+ } else {
+ generics[name] = node;
+ }
+
+ continue;
+ }
+
+ types.push(node);
+ }
+
+ for (const type of Object.keys(bases)) {
+ types.push(bases[type]);
+ }
+
+ for (const name of Object.keys(generics)) {
+ types.push(generics[name]);
+ }
+
+ return types;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/modifications/inherits.js b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/inherits.js
new file mode 100644
index 00000000000..8701897d0e2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/inherits.js
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = inherits;
+
+var _constants = require("../constants");
+
+var _inheritsComments = require("../comments/inheritsComments");
+
+function inherits(child, parent) {
+ if (!child || !parent) return child;
+
+ for (const key of _constants.INHERIT_KEYS.optional) {
+ if (child[key] == null) {
+ child[key] = parent[key];
+ }
+ }
+
+ for (const key of Object.keys(parent)) {
+ if (key[0] === "_" && key !== "__clone") child[key] = parent[key];
+ }
+
+ for (const key of _constants.INHERIT_KEYS.force) {
+ child[key] = parent[key];
+ }
+
+ (0, _inheritsComments.default)(child, parent);
+ return child;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js
new file mode 100644
index 00000000000..ee6de0ec332
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = prependToMemberExpression;
+
+var _generated = require("../builders/generated");
+
+function prependToMemberExpression(member, prepend) {
+ member.object = (0, _generated.memberExpression)(prepend, member.object);
+ return member;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/modifications/removeProperties.js b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/removeProperties.js
new file mode 100644
index 00000000000..f9cf8e6065d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/removeProperties.js
@@ -0,0 +1,30 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = removeProperties;
+
+var _constants = require("../constants");
+
+const CLEAR_KEYS = ["tokens", "start", "end", "loc", "raw", "rawValue"];
+
+const CLEAR_KEYS_PLUS_COMMENTS = _constants.COMMENT_KEYS.concat(["comments"]).concat(CLEAR_KEYS);
+
+function removeProperties(node, opts = {}) {
+ const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS;
+
+ for (const key of map) {
+ if (node[key] != null) node[key] = undefined;
+ }
+
+ for (const key of Object.keys(node)) {
+ if (key[0] === "_" && node[key] != null) node[key] = undefined;
+ }
+
+ const symbols = Object.getOwnPropertySymbols(node);
+
+ for (const sym of symbols) {
+ node[sym] = null;
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js
new file mode 100644
index 00000000000..e36f7558934
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = removePropertiesDeep;
+
+var _traverseFast = require("../traverse/traverseFast");
+
+var _removeProperties = require("./removeProperties");
+
+function removePropertiesDeep(tree, opts) {
+ (0, _traverseFast.default)(tree, _removeProperties.default, opts);
+ return tree;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js
new file mode 100644
index 00000000000..25defea7ec5
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js
@@ -0,0 +1,54 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = removeTypeDuplicates;
+
+var _generated = require("../../validators/generated");
+
+function removeTypeDuplicates(nodes) {
+ const generics = {};
+ const bases = {};
+ const typeGroups = new Set();
+ const types = [];
+
+ for (let i = 0; i < nodes.length; i++) {
+ const node = nodes[i];
+ if (!node) continue;
+
+ if (types.indexOf(node) >= 0) {
+ continue;
+ }
+
+ if ((0, _generated.isTSAnyKeyword)(node)) {
+ return [node];
+ }
+
+ if ((0, _generated.isTSBaseType)(node)) {
+ bases[node.type] = node;
+ continue;
+ }
+
+ if ((0, _generated.isTSUnionType)(node)) {
+ if (!typeGroups.has(node.types)) {
+ nodes.push(...node.types);
+ typeGroups.add(node.types);
+ }
+
+ continue;
+ }
+
+ types.push(node);
+ }
+
+ for (const type of Object.keys(bases)) {
+ types.push(bases[type]);
+ }
+
+ for (const name of Object.keys(generics)) {
+ types.push(generics[name]);
+ }
+
+ return types;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js b/chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js
new file mode 100644
index 00000000000..4daaf8bf0fe
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js
@@ -0,0 +1,104 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = getBindingIdentifiers;
+
+var _generated = require("../validators/generated");
+
+function getBindingIdentifiers(node, duplicates, outerOnly) {
+ let search = [].concat(node);
+ const ids = Object.create(null);
+
+ while (search.length) {
+ const id = search.shift();
+ if (!id) continue;
+ const keys = getBindingIdentifiers.keys[id.type];
+
+ if ((0, _generated.isIdentifier)(id)) {
+ if (duplicates) {
+ const _ids = ids[id.name] = ids[id.name] || [];
+
+ _ids.push(id);
+ } else {
+ ids[id.name] = id;
+ }
+
+ continue;
+ }
+
+ if ((0, _generated.isExportDeclaration)(id) && !(0, _generated.isExportAllDeclaration)(id)) {
+ if ((0, _generated.isDeclaration)(id.declaration)) {
+ search.push(id.declaration);
+ }
+
+ continue;
+ }
+
+ if (outerOnly) {
+ if ((0, _generated.isFunctionDeclaration)(id)) {
+ search.push(id.id);
+ continue;
+ }
+
+ if ((0, _generated.isFunctionExpression)(id)) {
+ continue;
+ }
+ }
+
+ if (keys) {
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+
+ if (id[key]) {
+ search = search.concat(id[key]);
+ }
+ }
+ }
+ }
+
+ return ids;
+}
+
+getBindingIdentifiers.keys = {
+ DeclareClass: ["id"],
+ DeclareFunction: ["id"],
+ DeclareModule: ["id"],
+ DeclareVariable: ["id"],
+ DeclareInterface: ["id"],
+ DeclareTypeAlias: ["id"],
+ DeclareOpaqueType: ["id"],
+ InterfaceDeclaration: ["id"],
+ TypeAlias: ["id"],
+ OpaqueType: ["id"],
+ CatchClause: ["param"],
+ LabeledStatement: ["label"],
+ UnaryExpression: ["argument"],
+ AssignmentExpression: ["left"],
+ ImportSpecifier: ["local"],
+ ImportNamespaceSpecifier: ["local"],
+ ImportDefaultSpecifier: ["local"],
+ ImportDeclaration: ["specifiers"],
+ ExportSpecifier: ["exported"],
+ ExportNamespaceSpecifier: ["exported"],
+ ExportDefaultSpecifier: ["exported"],
+ FunctionDeclaration: ["id", "params"],
+ FunctionExpression: ["id", "params"],
+ ArrowFunctionExpression: ["params"],
+ ObjectMethod: ["params"],
+ ClassMethod: ["params"],
+ ClassPrivateMethod: ["params"],
+ ForInStatement: ["left"],
+ ForOfStatement: ["left"],
+ ClassDeclaration: ["id"],
+ ClassExpression: ["id"],
+ RestElement: ["argument"],
+ UpdateExpression: ["argument"],
+ ObjectProperty: ["value"],
+ AssignmentPattern: ["left"],
+ ArrayPattern: ["elements"],
+ ObjectPattern: ["properties"],
+ VariableDeclaration: ["declarations"],
+ VariableDeclarator: ["id"]
+}; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js b/chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js
new file mode 100644
index 00000000000..c27cffe544d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _getBindingIdentifiers = require("./getBindingIdentifiers");
+
+var _default = getOuterBindingIdentifiers;
+exports.default = _default;
+
+function getOuterBindingIdentifiers(node, duplicates) {
+ return (0, _getBindingIdentifiers.default)(node, duplicates, true);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverse.js b/chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverse.js
new file mode 100644
index 00000000000..775aed1eede
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverse.js
@@ -0,0 +1,55 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = traverse;
+
+var _definitions = require("../definitions");
+
+function traverse(node, handlers, state) {
+ if (typeof handlers === "function") {
+ handlers = {
+ enter: handlers
+ };
+ }
+
+ const {
+ enter,
+ exit
+ } = handlers;
+ traverseSimpleImpl(node, enter, exit, state, []);
+}
+
+function traverseSimpleImpl(node, enter, exit, state, ancestors) {
+ const keys = _definitions.VISITOR_KEYS[node.type];
+ if (!keys) return;
+ if (enter) enter(node, ancestors, state);
+
+ for (const key of keys) {
+ const subNode = node[key];
+
+ if (Array.isArray(subNode)) {
+ for (let i = 0; i < subNode.length; i++) {
+ const child = subNode[i];
+ if (!child) continue;
+ ancestors.push({
+ node,
+ key,
+ index: i
+ });
+ traverseSimpleImpl(child, enter, exit, state, ancestors);
+ ancestors.pop();
+ }
+ } else if (subNode) {
+ ancestors.push({
+ node,
+ key
+ });
+ traverseSimpleImpl(subNode, enter, exit, state, ancestors);
+ ancestors.pop();
+ }
+ }
+
+ if (exit) exit(node, ancestors, state);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverseFast.js b/chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverseFast.js
new file mode 100644
index 00000000000..f038dd835ed
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/traverse/traverseFast.js
@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = traverseFast;
+
+var _definitions = require("../definitions");
+
+function traverseFast(node, enter, opts) {
+ if (!node) return;
+ const keys = _definitions.VISITOR_KEYS[node.type];
+ if (!keys) return;
+ opts = opts || {};
+ enter(node, opts);
+
+ for (const key of keys) {
+ const subNode = node[key];
+
+ if (Array.isArray(subNode)) {
+ for (const node of subNode) {
+ traverseFast(node, enter, opts);
+ }
+ } else {
+ traverseFast(subNode, enter, opts);
+ }
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/utils/inherit.js b/chromium/third_party/node/node_modules/@babel/types/lib/utils/inherit.js
new file mode 100644
index 00000000000..35f33812439
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/utils/inherit.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = inherit;
+
+function inherit(key, child, parent) {
+ if (child && parent) {
+ child[key] = Array.from(new Set([].concat(child[key], parent[key]).filter(Boolean)));
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js b/chromium/third_party/node/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js
new file mode 100644
index 00000000000..f0ca13369be
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js
@@ -0,0 +1,47 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = cleanJSXElementLiteralChild;
+
+var _generated = require("../../builders/generated");
+
+function cleanJSXElementLiteralChild(child, args) {
+ const lines = child.value.split(/\r\n|\n|\r/);
+ let lastNonEmptyLine = 0;
+
+ for (let i = 0; i < lines.length; i++) {
+ if (lines[i].match(/[^ \t]/)) {
+ lastNonEmptyLine = i;
+ }
+ }
+
+ let str = "";
+
+ for (let i = 0; i < lines.length; i++) {
+ const line = lines[i];
+ const isFirstLine = i === 0;
+ const isLastLine = i === lines.length - 1;
+ const isLastNonEmptyLine = i === lastNonEmptyLine;
+ let trimmedLine = line.replace(/\t/g, " ");
+
+ if (!isFirstLine) {
+ trimmedLine = trimmedLine.replace(/^[ ]+/, "");
+ }
+
+ if (!isLastLine) {
+ trimmedLine = trimmedLine.replace(/[ ]+$/, "");
+ }
+
+ if (trimmedLine) {
+ if (!isLastNonEmptyLine) {
+ trimmedLine += " ";
+ }
+
+ str += trimmedLine;
+ }
+ }
+
+ if (str) args.push((0, _generated.stringLiteral)(str));
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/utils/shallowEqual.js b/chromium/third_party/node/node_modules/@babel/types/lib/utils/shallowEqual.js
new file mode 100644
index 00000000000..fae259e4fc5
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/utils/shallowEqual.js
@@ -0,0 +1,18 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = shallowEqual;
+
+function shallowEqual(actual, expected) {
+ const keys = Object.keys(expected);
+
+ for (const key of keys) {
+ if (actual[key] !== expected[key]) {
+ return false;
+ }
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js
new file mode 100644
index 00000000000..c0064968ecd
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = buildMatchMemberExpression;
+
+var _matchesPattern = require("./matchesPattern");
+
+function buildMatchMemberExpression(match, allowPartial) {
+ const parts = match.split(".");
+ return member => (0, _matchesPattern.default)(member, parts, allowPartial);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/generated/index.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/generated/index.js
new file mode 100644
index 00000000000..0d54c9bd95c
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/generated/index.js
@@ -0,0 +1,4731 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isArrayExpression = isArrayExpression;
+exports.isAssignmentExpression = isAssignmentExpression;
+exports.isBinaryExpression = isBinaryExpression;
+exports.isInterpreterDirective = isInterpreterDirective;
+exports.isDirective = isDirective;
+exports.isDirectiveLiteral = isDirectiveLiteral;
+exports.isBlockStatement = isBlockStatement;
+exports.isBreakStatement = isBreakStatement;
+exports.isCallExpression = isCallExpression;
+exports.isCatchClause = isCatchClause;
+exports.isConditionalExpression = isConditionalExpression;
+exports.isContinueStatement = isContinueStatement;
+exports.isDebuggerStatement = isDebuggerStatement;
+exports.isDoWhileStatement = isDoWhileStatement;
+exports.isEmptyStatement = isEmptyStatement;
+exports.isExpressionStatement = isExpressionStatement;
+exports.isFile = isFile;
+exports.isForInStatement = isForInStatement;
+exports.isForStatement = isForStatement;
+exports.isFunctionDeclaration = isFunctionDeclaration;
+exports.isFunctionExpression = isFunctionExpression;
+exports.isIdentifier = isIdentifier;
+exports.isIfStatement = isIfStatement;
+exports.isLabeledStatement = isLabeledStatement;
+exports.isStringLiteral = isStringLiteral;
+exports.isNumericLiteral = isNumericLiteral;
+exports.isNullLiteral = isNullLiteral;
+exports.isBooleanLiteral = isBooleanLiteral;
+exports.isRegExpLiteral = isRegExpLiteral;
+exports.isLogicalExpression = isLogicalExpression;
+exports.isMemberExpression = isMemberExpression;
+exports.isNewExpression = isNewExpression;
+exports.isProgram = isProgram;
+exports.isObjectExpression = isObjectExpression;
+exports.isObjectMethod = isObjectMethod;
+exports.isObjectProperty = isObjectProperty;
+exports.isRestElement = isRestElement;
+exports.isReturnStatement = isReturnStatement;
+exports.isSequenceExpression = isSequenceExpression;
+exports.isParenthesizedExpression = isParenthesizedExpression;
+exports.isSwitchCase = isSwitchCase;
+exports.isSwitchStatement = isSwitchStatement;
+exports.isThisExpression = isThisExpression;
+exports.isThrowStatement = isThrowStatement;
+exports.isTryStatement = isTryStatement;
+exports.isUnaryExpression = isUnaryExpression;
+exports.isUpdateExpression = isUpdateExpression;
+exports.isVariableDeclaration = isVariableDeclaration;
+exports.isVariableDeclarator = isVariableDeclarator;
+exports.isWhileStatement = isWhileStatement;
+exports.isWithStatement = isWithStatement;
+exports.isAssignmentPattern = isAssignmentPattern;
+exports.isArrayPattern = isArrayPattern;
+exports.isArrowFunctionExpression = isArrowFunctionExpression;
+exports.isClassBody = isClassBody;
+exports.isClassExpression = isClassExpression;
+exports.isClassDeclaration = isClassDeclaration;
+exports.isExportAllDeclaration = isExportAllDeclaration;
+exports.isExportDefaultDeclaration = isExportDefaultDeclaration;
+exports.isExportNamedDeclaration = isExportNamedDeclaration;
+exports.isExportSpecifier = isExportSpecifier;
+exports.isForOfStatement = isForOfStatement;
+exports.isImportDeclaration = isImportDeclaration;
+exports.isImportDefaultSpecifier = isImportDefaultSpecifier;
+exports.isImportNamespaceSpecifier = isImportNamespaceSpecifier;
+exports.isImportSpecifier = isImportSpecifier;
+exports.isMetaProperty = isMetaProperty;
+exports.isClassMethod = isClassMethod;
+exports.isObjectPattern = isObjectPattern;
+exports.isSpreadElement = isSpreadElement;
+exports.isSuper = isSuper;
+exports.isTaggedTemplateExpression = isTaggedTemplateExpression;
+exports.isTemplateElement = isTemplateElement;
+exports.isTemplateLiteral = isTemplateLiteral;
+exports.isYieldExpression = isYieldExpression;
+exports.isAwaitExpression = isAwaitExpression;
+exports.isImport = isImport;
+exports.isBigIntLiteral = isBigIntLiteral;
+exports.isExportNamespaceSpecifier = isExportNamespaceSpecifier;
+exports.isOptionalMemberExpression = isOptionalMemberExpression;
+exports.isOptionalCallExpression = isOptionalCallExpression;
+exports.isClassProperty = isClassProperty;
+exports.isClassPrivateProperty = isClassPrivateProperty;
+exports.isClassPrivateMethod = isClassPrivateMethod;
+exports.isPrivateName = isPrivateName;
+exports.isAnyTypeAnnotation = isAnyTypeAnnotation;
+exports.isArrayTypeAnnotation = isArrayTypeAnnotation;
+exports.isBooleanTypeAnnotation = isBooleanTypeAnnotation;
+exports.isBooleanLiteralTypeAnnotation = isBooleanLiteralTypeAnnotation;
+exports.isNullLiteralTypeAnnotation = isNullLiteralTypeAnnotation;
+exports.isClassImplements = isClassImplements;
+exports.isDeclareClass = isDeclareClass;
+exports.isDeclareFunction = isDeclareFunction;
+exports.isDeclareInterface = isDeclareInterface;
+exports.isDeclareModule = isDeclareModule;
+exports.isDeclareModuleExports = isDeclareModuleExports;
+exports.isDeclareTypeAlias = isDeclareTypeAlias;
+exports.isDeclareOpaqueType = isDeclareOpaqueType;
+exports.isDeclareVariable = isDeclareVariable;
+exports.isDeclareExportDeclaration = isDeclareExportDeclaration;
+exports.isDeclareExportAllDeclaration = isDeclareExportAllDeclaration;
+exports.isDeclaredPredicate = isDeclaredPredicate;
+exports.isExistsTypeAnnotation = isExistsTypeAnnotation;
+exports.isFunctionTypeAnnotation = isFunctionTypeAnnotation;
+exports.isFunctionTypeParam = isFunctionTypeParam;
+exports.isGenericTypeAnnotation = isGenericTypeAnnotation;
+exports.isInferredPredicate = isInferredPredicate;
+exports.isInterfaceExtends = isInterfaceExtends;
+exports.isInterfaceDeclaration = isInterfaceDeclaration;
+exports.isInterfaceTypeAnnotation = isInterfaceTypeAnnotation;
+exports.isIntersectionTypeAnnotation = isIntersectionTypeAnnotation;
+exports.isMixedTypeAnnotation = isMixedTypeAnnotation;
+exports.isEmptyTypeAnnotation = isEmptyTypeAnnotation;
+exports.isNullableTypeAnnotation = isNullableTypeAnnotation;
+exports.isNumberLiteralTypeAnnotation = isNumberLiteralTypeAnnotation;
+exports.isNumberTypeAnnotation = isNumberTypeAnnotation;
+exports.isObjectTypeAnnotation = isObjectTypeAnnotation;
+exports.isObjectTypeInternalSlot = isObjectTypeInternalSlot;
+exports.isObjectTypeCallProperty = isObjectTypeCallProperty;
+exports.isObjectTypeIndexer = isObjectTypeIndexer;
+exports.isObjectTypeProperty = isObjectTypeProperty;
+exports.isObjectTypeSpreadProperty = isObjectTypeSpreadProperty;
+exports.isOpaqueType = isOpaqueType;
+exports.isQualifiedTypeIdentifier = isQualifiedTypeIdentifier;
+exports.isStringLiteralTypeAnnotation = isStringLiteralTypeAnnotation;
+exports.isStringTypeAnnotation = isStringTypeAnnotation;
+exports.isSymbolTypeAnnotation = isSymbolTypeAnnotation;
+exports.isThisTypeAnnotation = isThisTypeAnnotation;
+exports.isTupleTypeAnnotation = isTupleTypeAnnotation;
+exports.isTypeofTypeAnnotation = isTypeofTypeAnnotation;
+exports.isTypeAlias = isTypeAlias;
+exports.isTypeAnnotation = isTypeAnnotation;
+exports.isTypeCastExpression = isTypeCastExpression;
+exports.isTypeParameter = isTypeParameter;
+exports.isTypeParameterDeclaration = isTypeParameterDeclaration;
+exports.isTypeParameterInstantiation = isTypeParameterInstantiation;
+exports.isUnionTypeAnnotation = isUnionTypeAnnotation;
+exports.isVariance = isVariance;
+exports.isVoidTypeAnnotation = isVoidTypeAnnotation;
+exports.isEnumDeclaration = isEnumDeclaration;
+exports.isEnumBooleanBody = isEnumBooleanBody;
+exports.isEnumNumberBody = isEnumNumberBody;
+exports.isEnumStringBody = isEnumStringBody;
+exports.isEnumSymbolBody = isEnumSymbolBody;
+exports.isEnumBooleanMember = isEnumBooleanMember;
+exports.isEnumNumberMember = isEnumNumberMember;
+exports.isEnumStringMember = isEnumStringMember;
+exports.isEnumDefaultedMember = isEnumDefaultedMember;
+exports.isIndexedAccessType = isIndexedAccessType;
+exports.isOptionalIndexedAccessType = isOptionalIndexedAccessType;
+exports.isJSXAttribute = isJSXAttribute;
+exports.isJSXClosingElement = isJSXClosingElement;
+exports.isJSXElement = isJSXElement;
+exports.isJSXEmptyExpression = isJSXEmptyExpression;
+exports.isJSXExpressionContainer = isJSXExpressionContainer;
+exports.isJSXSpreadChild = isJSXSpreadChild;
+exports.isJSXIdentifier = isJSXIdentifier;
+exports.isJSXMemberExpression = isJSXMemberExpression;
+exports.isJSXNamespacedName = isJSXNamespacedName;
+exports.isJSXOpeningElement = isJSXOpeningElement;
+exports.isJSXSpreadAttribute = isJSXSpreadAttribute;
+exports.isJSXText = isJSXText;
+exports.isJSXFragment = isJSXFragment;
+exports.isJSXOpeningFragment = isJSXOpeningFragment;
+exports.isJSXClosingFragment = isJSXClosingFragment;
+exports.isNoop = isNoop;
+exports.isPlaceholder = isPlaceholder;
+exports.isV8IntrinsicIdentifier = isV8IntrinsicIdentifier;
+exports.isArgumentPlaceholder = isArgumentPlaceholder;
+exports.isBindExpression = isBindExpression;
+exports.isImportAttribute = isImportAttribute;
+exports.isDecorator = isDecorator;
+exports.isDoExpression = isDoExpression;
+exports.isExportDefaultSpecifier = isExportDefaultSpecifier;
+exports.isRecordExpression = isRecordExpression;
+exports.isTupleExpression = isTupleExpression;
+exports.isDecimalLiteral = isDecimalLiteral;
+exports.isStaticBlock = isStaticBlock;
+exports.isModuleExpression = isModuleExpression;
+exports.isTopicReference = isTopicReference;
+exports.isPipelineTopicExpression = isPipelineTopicExpression;
+exports.isPipelineBareFunction = isPipelineBareFunction;
+exports.isPipelinePrimaryTopicReference = isPipelinePrimaryTopicReference;
+exports.isTSParameterProperty = isTSParameterProperty;
+exports.isTSDeclareFunction = isTSDeclareFunction;
+exports.isTSDeclareMethod = isTSDeclareMethod;
+exports.isTSQualifiedName = isTSQualifiedName;
+exports.isTSCallSignatureDeclaration = isTSCallSignatureDeclaration;
+exports.isTSConstructSignatureDeclaration = isTSConstructSignatureDeclaration;
+exports.isTSPropertySignature = isTSPropertySignature;
+exports.isTSMethodSignature = isTSMethodSignature;
+exports.isTSIndexSignature = isTSIndexSignature;
+exports.isTSAnyKeyword = isTSAnyKeyword;
+exports.isTSBooleanKeyword = isTSBooleanKeyword;
+exports.isTSBigIntKeyword = isTSBigIntKeyword;
+exports.isTSIntrinsicKeyword = isTSIntrinsicKeyword;
+exports.isTSNeverKeyword = isTSNeverKeyword;
+exports.isTSNullKeyword = isTSNullKeyword;
+exports.isTSNumberKeyword = isTSNumberKeyword;
+exports.isTSObjectKeyword = isTSObjectKeyword;
+exports.isTSStringKeyword = isTSStringKeyword;
+exports.isTSSymbolKeyword = isTSSymbolKeyword;
+exports.isTSUndefinedKeyword = isTSUndefinedKeyword;
+exports.isTSUnknownKeyword = isTSUnknownKeyword;
+exports.isTSVoidKeyword = isTSVoidKeyword;
+exports.isTSThisType = isTSThisType;
+exports.isTSFunctionType = isTSFunctionType;
+exports.isTSConstructorType = isTSConstructorType;
+exports.isTSTypeReference = isTSTypeReference;
+exports.isTSTypePredicate = isTSTypePredicate;
+exports.isTSTypeQuery = isTSTypeQuery;
+exports.isTSTypeLiteral = isTSTypeLiteral;
+exports.isTSArrayType = isTSArrayType;
+exports.isTSTupleType = isTSTupleType;
+exports.isTSOptionalType = isTSOptionalType;
+exports.isTSRestType = isTSRestType;
+exports.isTSNamedTupleMember = isTSNamedTupleMember;
+exports.isTSUnionType = isTSUnionType;
+exports.isTSIntersectionType = isTSIntersectionType;
+exports.isTSConditionalType = isTSConditionalType;
+exports.isTSInferType = isTSInferType;
+exports.isTSParenthesizedType = isTSParenthesizedType;
+exports.isTSTypeOperator = isTSTypeOperator;
+exports.isTSIndexedAccessType = isTSIndexedAccessType;
+exports.isTSMappedType = isTSMappedType;
+exports.isTSLiteralType = isTSLiteralType;
+exports.isTSExpressionWithTypeArguments = isTSExpressionWithTypeArguments;
+exports.isTSInterfaceDeclaration = isTSInterfaceDeclaration;
+exports.isTSInterfaceBody = isTSInterfaceBody;
+exports.isTSTypeAliasDeclaration = isTSTypeAliasDeclaration;
+exports.isTSAsExpression = isTSAsExpression;
+exports.isTSTypeAssertion = isTSTypeAssertion;
+exports.isTSEnumDeclaration = isTSEnumDeclaration;
+exports.isTSEnumMember = isTSEnumMember;
+exports.isTSModuleDeclaration = isTSModuleDeclaration;
+exports.isTSModuleBlock = isTSModuleBlock;
+exports.isTSImportType = isTSImportType;
+exports.isTSImportEqualsDeclaration = isTSImportEqualsDeclaration;
+exports.isTSExternalModuleReference = isTSExternalModuleReference;
+exports.isTSNonNullExpression = isTSNonNullExpression;
+exports.isTSExportAssignment = isTSExportAssignment;
+exports.isTSNamespaceExportDeclaration = isTSNamespaceExportDeclaration;
+exports.isTSTypeAnnotation = isTSTypeAnnotation;
+exports.isTSTypeParameterInstantiation = isTSTypeParameterInstantiation;
+exports.isTSTypeParameterDeclaration = isTSTypeParameterDeclaration;
+exports.isTSTypeParameter = isTSTypeParameter;
+exports.isExpression = isExpression;
+exports.isBinary = isBinary;
+exports.isScopable = isScopable;
+exports.isBlockParent = isBlockParent;
+exports.isBlock = isBlock;
+exports.isStatement = isStatement;
+exports.isTerminatorless = isTerminatorless;
+exports.isCompletionStatement = isCompletionStatement;
+exports.isConditional = isConditional;
+exports.isLoop = isLoop;
+exports.isWhile = isWhile;
+exports.isExpressionWrapper = isExpressionWrapper;
+exports.isFor = isFor;
+exports.isForXStatement = isForXStatement;
+exports.isFunction = isFunction;
+exports.isFunctionParent = isFunctionParent;
+exports.isPureish = isPureish;
+exports.isDeclaration = isDeclaration;
+exports.isPatternLike = isPatternLike;
+exports.isLVal = isLVal;
+exports.isTSEntityName = isTSEntityName;
+exports.isLiteral = isLiteral;
+exports.isImmutable = isImmutable;
+exports.isUserWhitespacable = isUserWhitespacable;
+exports.isMethod = isMethod;
+exports.isObjectMember = isObjectMember;
+exports.isProperty = isProperty;
+exports.isUnaryLike = isUnaryLike;
+exports.isPattern = isPattern;
+exports.isClass = isClass;
+exports.isModuleDeclaration = isModuleDeclaration;
+exports.isExportDeclaration = isExportDeclaration;
+exports.isModuleSpecifier = isModuleSpecifier;
+exports.isPrivate = isPrivate;
+exports.isFlow = isFlow;
+exports.isFlowType = isFlowType;
+exports.isFlowBaseAnnotation = isFlowBaseAnnotation;
+exports.isFlowDeclaration = isFlowDeclaration;
+exports.isFlowPredicate = isFlowPredicate;
+exports.isEnumBody = isEnumBody;
+exports.isEnumMember = isEnumMember;
+exports.isJSX = isJSX;
+exports.isTSTypeElement = isTSTypeElement;
+exports.isTSType = isTSType;
+exports.isTSBaseType = isTSBaseType;
+exports.isNumberLiteral = isNumberLiteral;
+exports.isRegexLiteral = isRegexLiteral;
+exports.isRestProperty = isRestProperty;
+exports.isSpreadProperty = isSpreadProperty;
+
+var _shallowEqual = require("../../utils/shallowEqual");
+
+function isArrayExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ArrayExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isAssignmentExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "AssignmentExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBinaryExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BinaryExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isInterpreterDirective(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "InterpreterDirective") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDirective(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Directive") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDirectiveLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DirectiveLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBlockStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BlockStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBreakStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BreakStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isCallExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "CallExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isCatchClause(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "CatchClause") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isConditionalExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ConditionalExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isContinueStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ContinueStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDebuggerStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DebuggerStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDoWhileStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DoWhileStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEmptyStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EmptyStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExpressionStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExpressionStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFile(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "File") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isForInStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ForInStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isForStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ForStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFunctionDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "FunctionDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFunctionExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "FunctionExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isIdentifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Identifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isIfStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "IfStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isLabeledStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "LabeledStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isStringLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "StringLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNumericLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NumericLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNullLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NullLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBooleanLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BooleanLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isRegExpLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "RegExpLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isLogicalExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "LogicalExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isMemberExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "MemberExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNewExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NewExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isProgram(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Program") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectMethod(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectMethod") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isRestElement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "RestElement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isReturnStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ReturnStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isSequenceExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "SequenceExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isParenthesizedExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ParenthesizedExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isSwitchCase(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "SwitchCase") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isSwitchStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "SwitchStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isThisExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ThisExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isThrowStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ThrowStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTryStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TryStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isUnaryExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "UnaryExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isUpdateExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "UpdateExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isVariableDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "VariableDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isVariableDeclarator(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "VariableDeclarator") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isWhileStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "WhileStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isWithStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "WithStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isAssignmentPattern(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "AssignmentPattern") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isArrayPattern(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ArrayPattern") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isArrowFunctionExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ArrowFunctionExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassBody(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassBody") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExportAllDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExportAllDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExportDefaultDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExportDefaultDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExportNamedDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExportNamedDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExportSpecifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExportSpecifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isForOfStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ForOfStatement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isImportDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ImportDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isImportDefaultSpecifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ImportDefaultSpecifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isImportNamespaceSpecifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ImportNamespaceSpecifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isImportSpecifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ImportSpecifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isMetaProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "MetaProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassMethod(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassMethod") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectPattern(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectPattern") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isSpreadElement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "SpreadElement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isSuper(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Super") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTaggedTemplateExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TaggedTemplateExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTemplateElement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TemplateElement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTemplateLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TemplateLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isYieldExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "YieldExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isAwaitExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "AwaitExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isImport(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Import") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBigIntLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BigIntLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExportNamespaceSpecifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExportNamespaceSpecifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isOptionalMemberExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "OptionalMemberExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isOptionalCallExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "OptionalCallExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassPrivateProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassPrivateProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassPrivateMethod(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassPrivateMethod") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPrivateName(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "PrivateName") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isAnyTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "AnyTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isArrayTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ArrayTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBooleanTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BooleanTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBooleanLiteralTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BooleanLiteralTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNullLiteralTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NullLiteralTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClassImplements(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ClassImplements") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareClass(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareClass") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareFunction(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareFunction") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareInterface(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareInterface") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareModule(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareModule") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareModuleExports(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareModuleExports") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareTypeAlias(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareTypeAlias") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareOpaqueType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareOpaqueType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareVariable(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareVariable") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareExportDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareExportDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclareExportAllDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclareExportAllDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclaredPredicate(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DeclaredPredicate") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExistsTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExistsTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFunctionTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "FunctionTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFunctionTypeParam(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "FunctionTypeParam") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isGenericTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "GenericTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isInferredPredicate(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "InferredPredicate") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isInterfaceExtends(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "InterfaceExtends") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isInterfaceDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "InterfaceDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isInterfaceTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "InterfaceTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isIntersectionTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "IntersectionTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isMixedTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "MixedTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEmptyTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EmptyTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNullableTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NullableTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNumberLiteralTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NumberLiteralTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNumberTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NumberTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectTypeInternalSlot(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectTypeInternalSlot") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectTypeCallProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectTypeCallProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectTypeIndexer(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectTypeIndexer") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectTypeProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectTypeProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectTypeSpreadProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ObjectTypeSpreadProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isOpaqueType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "OpaqueType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isQualifiedTypeIdentifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "QualifiedTypeIdentifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isStringLiteralTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "StringLiteralTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isStringTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "StringTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isSymbolTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "SymbolTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isThisTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ThisTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTupleTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TupleTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTypeofTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TypeofTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTypeAlias(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TypeAlias") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTypeCastExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TypeCastExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTypeParameter(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TypeParameter") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTypeParameterDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TypeParameterDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTypeParameterInstantiation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TypeParameterInstantiation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isUnionTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "UnionTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isVariance(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Variance") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isVoidTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "VoidTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumBooleanBody(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumBooleanBody") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumNumberBody(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumNumberBody") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumStringBody(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumStringBody") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumSymbolBody(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumSymbolBody") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumBooleanMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumBooleanMember") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumNumberMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumNumberMember") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumStringMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumStringMember") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumDefaultedMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "EnumDefaultedMember") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isIndexedAccessType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "IndexedAccessType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isOptionalIndexedAccessType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "OptionalIndexedAccessType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXAttribute(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXAttribute") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXClosingElement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXClosingElement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXElement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXElement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXEmptyExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXEmptyExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXExpressionContainer(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXExpressionContainer") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXSpreadChild(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXSpreadChild") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXIdentifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXIdentifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXMemberExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXMemberExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXNamespacedName(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXNamespacedName") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXOpeningElement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXOpeningElement") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXSpreadAttribute(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXSpreadAttribute") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXText(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXText") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXFragment(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXFragment") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXOpeningFragment(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXOpeningFragment") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSXClosingFragment(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "JSXClosingFragment") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNoop(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Noop") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPlaceholder(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Placeholder") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isV8IntrinsicIdentifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "V8IntrinsicIdentifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isArgumentPlaceholder(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ArgumentPlaceholder") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBindExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "BindExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isImportAttribute(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ImportAttribute") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDecorator(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "Decorator") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDoExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DoExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExportDefaultSpecifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ExportDefaultSpecifier") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isRecordExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "RecordExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTupleExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TupleExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDecimalLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "DecimalLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isStaticBlock(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "StaticBlock") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isModuleExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "ModuleExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTopicReference(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TopicReference") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPipelineTopicExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "PipelineTopicExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPipelineBareFunction(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "PipelineBareFunction") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPipelinePrimaryTopicReference(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "PipelinePrimaryTopicReference") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSParameterProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSParameterProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSDeclareFunction(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSDeclareFunction") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSDeclareMethod(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSDeclareMethod") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSQualifiedName(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSQualifiedName") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSCallSignatureDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSCallSignatureDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSConstructSignatureDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSConstructSignatureDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSPropertySignature(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSPropertySignature") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSMethodSignature(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSMethodSignature") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSIndexSignature(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSIndexSignature") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSAnyKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSAnyKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSBooleanKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSBooleanKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSBigIntKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSBigIntKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSIntrinsicKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSIntrinsicKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSNeverKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSNeverKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSNullKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSNullKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSNumberKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSNumberKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSObjectKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSObjectKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSStringKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSStringKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSSymbolKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSSymbolKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSUndefinedKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSUndefinedKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSUnknownKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSUnknownKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSVoidKeyword(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSVoidKeyword") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSThisType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSThisType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSFunctionType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSFunctionType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSConstructorType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSConstructorType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeReference(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeReference") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypePredicate(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypePredicate") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeQuery(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeQuery") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSArrayType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSArrayType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTupleType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTupleType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSOptionalType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSOptionalType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSRestType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSRestType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSNamedTupleMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSNamedTupleMember") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSUnionType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSUnionType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSIntersectionType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSIntersectionType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSConditionalType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSConditionalType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSInferType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSInferType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSParenthesizedType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSParenthesizedType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeOperator(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeOperator") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSIndexedAccessType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSIndexedAccessType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSMappedType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSMappedType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSLiteralType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSLiteralType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSExpressionWithTypeArguments(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSExpressionWithTypeArguments") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSInterfaceDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSInterfaceDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSInterfaceBody(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSInterfaceBody") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeAliasDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeAliasDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSAsExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSAsExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeAssertion(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeAssertion") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSEnumDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSEnumDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSEnumMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSEnumMember") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSModuleDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSModuleDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSModuleBlock(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSModuleBlock") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSImportType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSImportType") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSImportEqualsDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSImportEqualsDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSExternalModuleReference(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSExternalModuleReference") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSNonNullExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSNonNullExpression") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSExportAssignment(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSExportAssignment") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSNamespaceExportDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSNamespaceExportDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeAnnotation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeParameterInstantiation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeParameterInstantiation") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeParameterDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeParameterDeclaration") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeParameter(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "TSTypeParameter") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExpression(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ArrayExpression" === nodeType || "AssignmentExpression" === nodeType || "BinaryExpression" === nodeType || "CallExpression" === nodeType || "ConditionalExpression" === nodeType || "FunctionExpression" === nodeType || "Identifier" === nodeType || "StringLiteral" === nodeType || "NumericLiteral" === nodeType || "NullLiteral" === nodeType || "BooleanLiteral" === nodeType || "RegExpLiteral" === nodeType || "LogicalExpression" === nodeType || "MemberExpression" === nodeType || "NewExpression" === nodeType || "ObjectExpression" === nodeType || "SequenceExpression" === nodeType || "ParenthesizedExpression" === nodeType || "ThisExpression" === nodeType || "UnaryExpression" === nodeType || "UpdateExpression" === nodeType || "ArrowFunctionExpression" === nodeType || "ClassExpression" === nodeType || "MetaProperty" === nodeType || "Super" === nodeType || "TaggedTemplateExpression" === nodeType || "TemplateLiteral" === nodeType || "YieldExpression" === nodeType || "AwaitExpression" === nodeType || "Import" === nodeType || "BigIntLiteral" === nodeType || "OptionalMemberExpression" === nodeType || "OptionalCallExpression" === nodeType || "TypeCastExpression" === nodeType || "JSXElement" === nodeType || "JSXFragment" === nodeType || "BindExpression" === nodeType || "DoExpression" === nodeType || "RecordExpression" === nodeType || "TupleExpression" === nodeType || "DecimalLiteral" === nodeType || "ModuleExpression" === nodeType || "TopicReference" === nodeType || "PipelineTopicExpression" === nodeType || "PipelineBareFunction" === nodeType || "PipelinePrimaryTopicReference" === nodeType || "TSAsExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || nodeType === "Placeholder" && ("Expression" === node.expectedNode || "Identifier" === node.expectedNode || "StringLiteral" === node.expectedNode)) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBinary(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("BinaryExpression" === nodeType || "LogicalExpression" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isScopable(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("BlockStatement" === nodeType || "CatchClause" === nodeType || "DoWhileStatement" === nodeType || "ForInStatement" === nodeType || "ForStatement" === nodeType || "FunctionDeclaration" === nodeType || "FunctionExpression" === nodeType || "Program" === nodeType || "ObjectMethod" === nodeType || "SwitchStatement" === nodeType || "WhileStatement" === nodeType || "ArrowFunctionExpression" === nodeType || "ClassExpression" === nodeType || "ClassDeclaration" === nodeType || "ForOfStatement" === nodeType || "ClassMethod" === nodeType || "ClassPrivateMethod" === nodeType || "StaticBlock" === nodeType || "TSModuleBlock" === nodeType || nodeType === "Placeholder" && "BlockStatement" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBlockParent(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("BlockStatement" === nodeType || "CatchClause" === nodeType || "DoWhileStatement" === nodeType || "ForInStatement" === nodeType || "ForStatement" === nodeType || "FunctionDeclaration" === nodeType || "FunctionExpression" === nodeType || "Program" === nodeType || "ObjectMethod" === nodeType || "SwitchStatement" === nodeType || "WhileStatement" === nodeType || "ArrowFunctionExpression" === nodeType || "ForOfStatement" === nodeType || "ClassMethod" === nodeType || "ClassPrivateMethod" === nodeType || "StaticBlock" === nodeType || "TSModuleBlock" === nodeType || nodeType === "Placeholder" && "BlockStatement" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isBlock(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("BlockStatement" === nodeType || "Program" === nodeType || "TSModuleBlock" === nodeType || nodeType === "Placeholder" && "BlockStatement" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("BlockStatement" === nodeType || "BreakStatement" === nodeType || "ContinueStatement" === nodeType || "DebuggerStatement" === nodeType || "DoWhileStatement" === nodeType || "EmptyStatement" === nodeType || "ExpressionStatement" === nodeType || "ForInStatement" === nodeType || "ForStatement" === nodeType || "FunctionDeclaration" === nodeType || "IfStatement" === nodeType || "LabeledStatement" === nodeType || "ReturnStatement" === nodeType || "SwitchStatement" === nodeType || "ThrowStatement" === nodeType || "TryStatement" === nodeType || "VariableDeclaration" === nodeType || "WhileStatement" === nodeType || "WithStatement" === nodeType || "ClassDeclaration" === nodeType || "ExportAllDeclaration" === nodeType || "ExportDefaultDeclaration" === nodeType || "ExportNamedDeclaration" === nodeType || "ForOfStatement" === nodeType || "ImportDeclaration" === nodeType || "DeclareClass" === nodeType || "DeclareFunction" === nodeType || "DeclareInterface" === nodeType || "DeclareModule" === nodeType || "DeclareModuleExports" === nodeType || "DeclareTypeAlias" === nodeType || "DeclareOpaqueType" === nodeType || "DeclareVariable" === nodeType || "DeclareExportDeclaration" === nodeType || "DeclareExportAllDeclaration" === nodeType || "InterfaceDeclaration" === nodeType || "OpaqueType" === nodeType || "TypeAlias" === nodeType || "EnumDeclaration" === nodeType || "TSDeclareFunction" === nodeType || "TSInterfaceDeclaration" === nodeType || "TSTypeAliasDeclaration" === nodeType || "TSEnumDeclaration" === nodeType || "TSModuleDeclaration" === nodeType || "TSImportEqualsDeclaration" === nodeType || "TSExportAssignment" === nodeType || "TSNamespaceExportDeclaration" === nodeType || nodeType === "Placeholder" && ("Statement" === node.expectedNode || "Declaration" === node.expectedNode || "BlockStatement" === node.expectedNode)) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTerminatorless(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("BreakStatement" === nodeType || "ContinueStatement" === nodeType || "ReturnStatement" === nodeType || "ThrowStatement" === nodeType || "YieldExpression" === nodeType || "AwaitExpression" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isCompletionStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("BreakStatement" === nodeType || "ContinueStatement" === nodeType || "ReturnStatement" === nodeType || "ThrowStatement" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isConditional(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ConditionalExpression" === nodeType || "IfStatement" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isLoop(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("DoWhileStatement" === nodeType || "ForInStatement" === nodeType || "ForStatement" === nodeType || "WhileStatement" === nodeType || "ForOfStatement" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isWhile(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("DoWhileStatement" === nodeType || "WhileStatement" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExpressionWrapper(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ExpressionStatement" === nodeType || "ParenthesizedExpression" === nodeType || "TypeCastExpression" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFor(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ForInStatement" === nodeType || "ForStatement" === nodeType || "ForOfStatement" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isForXStatement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ForInStatement" === nodeType || "ForOfStatement" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFunction(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("FunctionDeclaration" === nodeType || "FunctionExpression" === nodeType || "ObjectMethod" === nodeType || "ArrowFunctionExpression" === nodeType || "ClassMethod" === nodeType || "ClassPrivateMethod" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFunctionParent(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("FunctionDeclaration" === nodeType || "FunctionExpression" === nodeType || "ObjectMethod" === nodeType || "ArrowFunctionExpression" === nodeType || "ClassMethod" === nodeType || "ClassPrivateMethod" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPureish(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("FunctionDeclaration" === nodeType || "FunctionExpression" === nodeType || "StringLiteral" === nodeType || "NumericLiteral" === nodeType || "NullLiteral" === nodeType || "BooleanLiteral" === nodeType || "RegExpLiteral" === nodeType || "ArrowFunctionExpression" === nodeType || "BigIntLiteral" === nodeType || "DecimalLiteral" === nodeType || nodeType === "Placeholder" && "StringLiteral" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("FunctionDeclaration" === nodeType || "VariableDeclaration" === nodeType || "ClassDeclaration" === nodeType || "ExportAllDeclaration" === nodeType || "ExportDefaultDeclaration" === nodeType || "ExportNamedDeclaration" === nodeType || "ImportDeclaration" === nodeType || "DeclareClass" === nodeType || "DeclareFunction" === nodeType || "DeclareInterface" === nodeType || "DeclareModule" === nodeType || "DeclareModuleExports" === nodeType || "DeclareTypeAlias" === nodeType || "DeclareOpaqueType" === nodeType || "DeclareVariable" === nodeType || "DeclareExportDeclaration" === nodeType || "DeclareExportAllDeclaration" === nodeType || "InterfaceDeclaration" === nodeType || "OpaqueType" === nodeType || "TypeAlias" === nodeType || "EnumDeclaration" === nodeType || "TSDeclareFunction" === nodeType || "TSInterfaceDeclaration" === nodeType || "TSTypeAliasDeclaration" === nodeType || "TSEnumDeclaration" === nodeType || "TSModuleDeclaration" === nodeType || nodeType === "Placeholder" && "Declaration" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPatternLike(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("Identifier" === nodeType || "RestElement" === nodeType || "AssignmentPattern" === nodeType || "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || nodeType === "Placeholder" && ("Pattern" === node.expectedNode || "Identifier" === node.expectedNode)) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isLVal(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("Identifier" === nodeType || "MemberExpression" === nodeType || "RestElement" === nodeType || "AssignmentPattern" === nodeType || "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || "TSParameterProperty" === nodeType || nodeType === "Placeholder" && ("Pattern" === node.expectedNode || "Identifier" === node.expectedNode)) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSEntityName(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("Identifier" === nodeType || "TSQualifiedName" === nodeType || nodeType === "Placeholder" && "Identifier" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isLiteral(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("StringLiteral" === nodeType || "NumericLiteral" === nodeType || "NullLiteral" === nodeType || "BooleanLiteral" === nodeType || "RegExpLiteral" === nodeType || "TemplateLiteral" === nodeType || "BigIntLiteral" === nodeType || "DecimalLiteral" === nodeType || nodeType === "Placeholder" && "StringLiteral" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isImmutable(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("StringLiteral" === nodeType || "NumericLiteral" === nodeType || "NullLiteral" === nodeType || "BooleanLiteral" === nodeType || "BigIntLiteral" === nodeType || "JSXAttribute" === nodeType || "JSXClosingElement" === nodeType || "JSXElement" === nodeType || "JSXExpressionContainer" === nodeType || "JSXSpreadChild" === nodeType || "JSXOpeningElement" === nodeType || "JSXText" === nodeType || "JSXFragment" === nodeType || "JSXOpeningFragment" === nodeType || "JSXClosingFragment" === nodeType || "DecimalLiteral" === nodeType || nodeType === "Placeholder" && "StringLiteral" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isUserWhitespacable(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ObjectMethod" === nodeType || "ObjectProperty" === nodeType || "ObjectTypeInternalSlot" === nodeType || "ObjectTypeCallProperty" === nodeType || "ObjectTypeIndexer" === nodeType || "ObjectTypeProperty" === nodeType || "ObjectTypeSpreadProperty" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isMethod(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ObjectMethod" === nodeType || "ClassMethod" === nodeType || "ClassPrivateMethod" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isObjectMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ObjectMethod" === nodeType || "ObjectProperty" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isProperty(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ObjectProperty" === nodeType || "ClassProperty" === nodeType || "ClassPrivateProperty" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isUnaryLike(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("UnaryExpression" === nodeType || "SpreadElement" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPattern(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("AssignmentPattern" === nodeType || "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || nodeType === "Placeholder" && "Pattern" === node.expectedNode) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isClass(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ClassExpression" === nodeType || "ClassDeclaration" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isModuleDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ExportAllDeclaration" === nodeType || "ExportDefaultDeclaration" === nodeType || "ExportNamedDeclaration" === nodeType || "ImportDeclaration" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isExportDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ExportAllDeclaration" === nodeType || "ExportDefaultDeclaration" === nodeType || "ExportNamedDeclaration" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isModuleSpecifier(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ExportSpecifier" === nodeType || "ImportDefaultSpecifier" === nodeType || "ImportNamespaceSpecifier" === nodeType || "ImportSpecifier" === nodeType || "ExportNamespaceSpecifier" === nodeType || "ExportDefaultSpecifier" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isPrivate(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("ClassPrivateProperty" === nodeType || "ClassPrivateMethod" === nodeType || "PrivateName" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFlow(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("AnyTypeAnnotation" === nodeType || "ArrayTypeAnnotation" === nodeType || "BooleanTypeAnnotation" === nodeType || "BooleanLiteralTypeAnnotation" === nodeType || "NullLiteralTypeAnnotation" === nodeType || "ClassImplements" === nodeType || "DeclareClass" === nodeType || "DeclareFunction" === nodeType || "DeclareInterface" === nodeType || "DeclareModule" === nodeType || "DeclareModuleExports" === nodeType || "DeclareTypeAlias" === nodeType || "DeclareOpaqueType" === nodeType || "DeclareVariable" === nodeType || "DeclareExportDeclaration" === nodeType || "DeclareExportAllDeclaration" === nodeType || "DeclaredPredicate" === nodeType || "ExistsTypeAnnotation" === nodeType || "FunctionTypeAnnotation" === nodeType || "FunctionTypeParam" === nodeType || "GenericTypeAnnotation" === nodeType || "InferredPredicate" === nodeType || "InterfaceExtends" === nodeType || "InterfaceDeclaration" === nodeType || "InterfaceTypeAnnotation" === nodeType || "IntersectionTypeAnnotation" === nodeType || "MixedTypeAnnotation" === nodeType || "EmptyTypeAnnotation" === nodeType || "NullableTypeAnnotation" === nodeType || "NumberLiteralTypeAnnotation" === nodeType || "NumberTypeAnnotation" === nodeType || "ObjectTypeAnnotation" === nodeType || "ObjectTypeInternalSlot" === nodeType || "ObjectTypeCallProperty" === nodeType || "ObjectTypeIndexer" === nodeType || "ObjectTypeProperty" === nodeType || "ObjectTypeSpreadProperty" === nodeType || "OpaqueType" === nodeType || "QualifiedTypeIdentifier" === nodeType || "StringLiteralTypeAnnotation" === nodeType || "StringTypeAnnotation" === nodeType || "SymbolTypeAnnotation" === nodeType || "ThisTypeAnnotation" === nodeType || "TupleTypeAnnotation" === nodeType || "TypeofTypeAnnotation" === nodeType || "TypeAlias" === nodeType || "TypeAnnotation" === nodeType || "TypeCastExpression" === nodeType || "TypeParameter" === nodeType || "TypeParameterDeclaration" === nodeType || "TypeParameterInstantiation" === nodeType || "UnionTypeAnnotation" === nodeType || "Variance" === nodeType || "VoidTypeAnnotation" === nodeType || "IndexedAccessType" === nodeType || "OptionalIndexedAccessType" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFlowType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("AnyTypeAnnotation" === nodeType || "ArrayTypeAnnotation" === nodeType || "BooleanTypeAnnotation" === nodeType || "BooleanLiteralTypeAnnotation" === nodeType || "NullLiteralTypeAnnotation" === nodeType || "ExistsTypeAnnotation" === nodeType || "FunctionTypeAnnotation" === nodeType || "GenericTypeAnnotation" === nodeType || "InterfaceTypeAnnotation" === nodeType || "IntersectionTypeAnnotation" === nodeType || "MixedTypeAnnotation" === nodeType || "EmptyTypeAnnotation" === nodeType || "NullableTypeAnnotation" === nodeType || "NumberLiteralTypeAnnotation" === nodeType || "NumberTypeAnnotation" === nodeType || "ObjectTypeAnnotation" === nodeType || "StringLiteralTypeAnnotation" === nodeType || "StringTypeAnnotation" === nodeType || "SymbolTypeAnnotation" === nodeType || "ThisTypeAnnotation" === nodeType || "TupleTypeAnnotation" === nodeType || "TypeofTypeAnnotation" === nodeType || "UnionTypeAnnotation" === nodeType || "VoidTypeAnnotation" === nodeType || "IndexedAccessType" === nodeType || "OptionalIndexedAccessType" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFlowBaseAnnotation(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("AnyTypeAnnotation" === nodeType || "BooleanTypeAnnotation" === nodeType || "NullLiteralTypeAnnotation" === nodeType || "MixedTypeAnnotation" === nodeType || "EmptyTypeAnnotation" === nodeType || "NumberTypeAnnotation" === nodeType || "StringTypeAnnotation" === nodeType || "SymbolTypeAnnotation" === nodeType || "ThisTypeAnnotation" === nodeType || "VoidTypeAnnotation" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFlowDeclaration(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("DeclareClass" === nodeType || "DeclareFunction" === nodeType || "DeclareInterface" === nodeType || "DeclareModule" === nodeType || "DeclareModuleExports" === nodeType || "DeclareTypeAlias" === nodeType || "DeclareOpaqueType" === nodeType || "DeclareVariable" === nodeType || "DeclareExportDeclaration" === nodeType || "DeclareExportAllDeclaration" === nodeType || "InterfaceDeclaration" === nodeType || "OpaqueType" === nodeType || "TypeAlias" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isFlowPredicate(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("DeclaredPredicate" === nodeType || "InferredPredicate" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumBody(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("EnumBooleanBody" === nodeType || "EnumNumberBody" === nodeType || "EnumStringBody" === nodeType || "EnumSymbolBody" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isEnumMember(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("EnumBooleanMember" === nodeType || "EnumNumberMember" === nodeType || "EnumStringMember" === nodeType || "EnumDefaultedMember" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isJSX(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("JSXAttribute" === nodeType || "JSXClosingElement" === nodeType || "JSXElement" === nodeType || "JSXEmptyExpression" === nodeType || "JSXExpressionContainer" === nodeType || "JSXSpreadChild" === nodeType || "JSXIdentifier" === nodeType || "JSXMemberExpression" === nodeType || "JSXNamespacedName" === nodeType || "JSXOpeningElement" === nodeType || "JSXSpreadAttribute" === nodeType || "JSXText" === nodeType || "JSXFragment" === nodeType || "JSXOpeningFragment" === nodeType || "JSXClosingFragment" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSTypeElement(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("TSCallSignatureDeclaration" === nodeType || "TSConstructSignatureDeclaration" === nodeType || "TSPropertySignature" === nodeType || "TSMethodSignature" === nodeType || "TSIndexSignature" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("TSAnyKeyword" === nodeType || "TSBooleanKeyword" === nodeType || "TSBigIntKeyword" === nodeType || "TSIntrinsicKeyword" === nodeType || "TSNeverKeyword" === nodeType || "TSNullKeyword" === nodeType || "TSNumberKeyword" === nodeType || "TSObjectKeyword" === nodeType || "TSStringKeyword" === nodeType || "TSSymbolKeyword" === nodeType || "TSUndefinedKeyword" === nodeType || "TSUnknownKeyword" === nodeType || "TSVoidKeyword" === nodeType || "TSThisType" === nodeType || "TSFunctionType" === nodeType || "TSConstructorType" === nodeType || "TSTypeReference" === nodeType || "TSTypePredicate" === nodeType || "TSTypeQuery" === nodeType || "TSTypeLiteral" === nodeType || "TSArrayType" === nodeType || "TSTupleType" === nodeType || "TSOptionalType" === nodeType || "TSRestType" === nodeType || "TSUnionType" === nodeType || "TSIntersectionType" === nodeType || "TSConditionalType" === nodeType || "TSInferType" === nodeType || "TSParenthesizedType" === nodeType || "TSTypeOperator" === nodeType || "TSIndexedAccessType" === nodeType || "TSMappedType" === nodeType || "TSLiteralType" === nodeType || "TSExpressionWithTypeArguments" === nodeType || "TSImportType" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isTSBaseType(node, opts) {
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if ("TSAnyKeyword" === nodeType || "TSBooleanKeyword" === nodeType || "TSBigIntKeyword" === nodeType || "TSIntrinsicKeyword" === nodeType || "TSNeverKeyword" === nodeType || "TSNullKeyword" === nodeType || "TSNumberKeyword" === nodeType || "TSObjectKeyword" === nodeType || "TSStringKeyword" === nodeType || "TSSymbolKeyword" === nodeType || "TSUndefinedKeyword" === nodeType || "TSUnknownKeyword" === nodeType || "TSVoidKeyword" === nodeType || "TSThisType" === nodeType || "TSLiteralType" === nodeType) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isNumberLiteral(node, opts) {
+ console.trace("The node type NumberLiteral has been renamed to NumericLiteral");
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "NumberLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isRegexLiteral(node, opts) {
+ console.trace("The node type RegexLiteral has been renamed to RegExpLiteral");
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "RegexLiteral") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isRestProperty(node, opts) {
+ console.trace("The node type RestProperty has been renamed to RestElement");
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "RestProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+}
+
+function isSpreadProperty(node, opts) {
+ console.trace("The node type SpreadProperty has been renamed to SpreadElement");
+ if (!node) return false;
+ const nodeType = node.type;
+
+ if (nodeType === "SpreadProperty") {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/is.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/is.js
new file mode 100644
index 00000000000..581979fa701
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/is.js
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = is;
+
+var _shallowEqual = require("../utils/shallowEqual");
+
+var _isType = require("./isType");
+
+var _isPlaceholderType = require("./isPlaceholderType");
+
+var _definitions = require("../definitions");
+
+function is(type, node, opts) {
+ if (!node) return false;
+ const matches = (0, _isType.default)(node.type, type);
+
+ if (!matches) {
+ if (!opts && node.type === "Placeholder" && type in _definitions.FLIPPED_ALIAS_KEYS) {
+ return (0, _isPlaceholderType.default)(node.expectedNode, type);
+ }
+
+ return false;
+ }
+
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return (0, _shallowEqual.default)(node, opts);
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isBinding.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isBinding.js
new file mode 100644
index 00000000000..74c86dd0e98
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isBinding.js
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isBinding;
+
+var _getBindingIdentifiers = require("../retrievers/getBindingIdentifiers");
+
+function isBinding(node, parent, grandparent) {
+ if (grandparent && node.type === "Identifier" && parent.type === "ObjectProperty" && grandparent.type === "ObjectExpression") {
+ return false;
+ }
+
+ const keys = _getBindingIdentifiers.default.keys[parent.type];
+
+ if (keys) {
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ const val = parent[key];
+
+ if (Array.isArray(val)) {
+ if (val.indexOf(node) >= 0) return true;
+ } else {
+ if (val === node) return true;
+ }
+ }
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isBlockScoped.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isBlockScoped.js
new file mode 100644
index 00000000000..77ec1663004
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isBlockScoped.js
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isBlockScoped;
+
+var _generated = require("./generated");
+
+var _isLet = require("./isLet");
+
+function isBlockScoped(node) {
+ return (0, _generated.isFunctionDeclaration)(node) || (0, _generated.isClassDeclaration)(node) || (0, _isLet.default)(node);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isImmutable.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isImmutable.js
new file mode 100644
index 00000000000..27754f6599e
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isImmutable.js
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isImmutable;
+
+var _isType = require("./isType");
+
+var _generated = require("./generated");
+
+function isImmutable(node) {
+ if ((0, _isType.default)(node.type, "Immutable")) return true;
+
+ if ((0, _generated.isIdentifier)(node)) {
+ if (node.name === "undefined") {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isLet.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isLet.js
new file mode 100644
index 00000000000..93d75628082
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isLet.js
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isLet;
+
+var _generated = require("./generated");
+
+var _constants = require("../constants");
+
+function isLet(node) {
+ return (0, _generated.isVariableDeclaration)(node) && (node.kind !== "var" || node[_constants.BLOCK_SCOPED_SYMBOL]);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isNode.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isNode.js
new file mode 100644
index 00000000000..e88a47aac45
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isNode.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isNode;
+
+var _definitions = require("../definitions");
+
+function isNode(node) {
+ return !!(node && _definitions.VISITOR_KEYS[node.type]);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isNodesEquivalent.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isNodesEquivalent.js
new file mode 100644
index 00000000000..f829834e910
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isNodesEquivalent.js
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isNodesEquivalent;
+
+var _definitions = require("../definitions");
+
+function isNodesEquivalent(a, b) {
+ if (typeof a !== "object" || typeof b !== "object" || a == null || b == null) {
+ return a === b;
+ }
+
+ if (a.type !== b.type) {
+ return false;
+ }
+
+ const fields = Object.keys(_definitions.NODE_FIELDS[a.type] || a.type);
+ const visitorKeys = _definitions.VISITOR_KEYS[a.type];
+
+ for (const field of fields) {
+ if (typeof a[field] !== typeof b[field]) {
+ return false;
+ }
+
+ if (a[field] == null && b[field] == null) {
+ continue;
+ } else if (a[field] == null || b[field] == null) {
+ return false;
+ }
+
+ if (Array.isArray(a[field])) {
+ if (!Array.isArray(b[field])) {
+ return false;
+ }
+
+ if (a[field].length !== b[field].length) {
+ return false;
+ }
+
+ for (let i = 0; i < a[field].length; i++) {
+ if (!isNodesEquivalent(a[field][i], b[field][i])) {
+ return false;
+ }
+ }
+
+ continue;
+ }
+
+ if (typeof a[field] === "object" && !(visitorKeys != null && visitorKeys.includes(field))) {
+ for (const key of Object.keys(a[field])) {
+ if (a[field][key] !== b[field][key]) {
+ return false;
+ }
+ }
+
+ continue;
+ }
+
+ if (!isNodesEquivalent(a[field], b[field])) {
+ return false;
+ }
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isPlaceholderType.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isPlaceholderType.js
new file mode 100644
index 00000000000..e8271de0b1c
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isPlaceholderType.js
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isPlaceholderType;
+
+var _definitions = require("../definitions");
+
+function isPlaceholderType(placeholderType, targetType) {
+ if (placeholderType === targetType) return true;
+ const aliases = _definitions.PLACEHOLDERS_ALIAS[placeholderType];
+
+ if (aliases) {
+ for (const alias of aliases) {
+ if (targetType === alias) return true;
+ }
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isReferenced.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isReferenced.js
new file mode 100644
index 00000000000..dc94a693383
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isReferenced.js
@@ -0,0 +1,127 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isReferenced;
+
+function isReferenced(node, parent, grandparent) {
+ switch (parent.type) {
+ case "MemberExpression":
+ case "OptionalMemberExpression":
+ if (parent.property === node) {
+ return !!parent.computed;
+ }
+
+ return parent.object === node;
+
+ case "JSXMemberExpression":
+ return parent.object === node;
+
+ case "VariableDeclarator":
+ return parent.init === node;
+
+ case "ArrowFunctionExpression":
+ return parent.body === node;
+
+ case "PrivateName":
+ return false;
+
+ case "ClassMethod":
+ case "ClassPrivateMethod":
+ case "ObjectMethod":
+ if (parent.key === node) {
+ return !!parent.computed;
+ }
+
+ return false;
+
+ case "ObjectProperty":
+ if (parent.key === node) {
+ return !!parent.computed;
+ }
+
+ return !grandparent || grandparent.type !== "ObjectPattern";
+
+ case "ClassProperty":
+ if (parent.key === node) {
+ return !!parent.computed;
+ }
+
+ return true;
+
+ case "ClassPrivateProperty":
+ return parent.key !== node;
+
+ case "ClassDeclaration":
+ case "ClassExpression":
+ return parent.superClass === node;
+
+ case "AssignmentExpression":
+ return parent.right === node;
+
+ case "AssignmentPattern":
+ return parent.right === node;
+
+ case "LabeledStatement":
+ return false;
+
+ case "CatchClause":
+ return false;
+
+ case "RestElement":
+ return false;
+
+ case "BreakStatement":
+ case "ContinueStatement":
+ return false;
+
+ case "FunctionDeclaration":
+ case "FunctionExpression":
+ return false;
+
+ case "ExportNamespaceSpecifier":
+ case "ExportDefaultSpecifier":
+ return false;
+
+ case "ExportSpecifier":
+ if (grandparent != null && grandparent.source) {
+ return false;
+ }
+
+ return parent.local === node;
+
+ case "ImportDefaultSpecifier":
+ case "ImportNamespaceSpecifier":
+ case "ImportSpecifier":
+ return false;
+
+ case "ImportAttribute":
+ return false;
+
+ case "JSXAttribute":
+ return false;
+
+ case "ObjectPattern":
+ case "ArrayPattern":
+ return false;
+
+ case "MetaProperty":
+ return false;
+
+ case "ObjectTypeProperty":
+ return parent.key !== node;
+
+ case "TSEnumMember":
+ return parent.id !== node;
+
+ case "TSPropertySignature":
+ if (parent.key === node) {
+ return !!parent.computed;
+ }
+
+ return true;
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isScope.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isScope.js
new file mode 100644
index 00000000000..0f82449cce7
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isScope.js
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isScope;
+
+var _generated = require("./generated");
+
+function isScope(node, parent) {
+ if ((0, _generated.isBlockStatement)(node) && ((0, _generated.isFunction)(parent) || (0, _generated.isCatchClause)(parent))) {
+ return false;
+ }
+
+ if ((0, _generated.isPattern)(node) && ((0, _generated.isFunction)(parent) || (0, _generated.isCatchClause)(parent))) {
+ return true;
+ }
+
+ return (0, _generated.isScopable)(node);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isSpecifierDefault.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isSpecifierDefault.js
new file mode 100644
index 00000000000..25431cc2732
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isSpecifierDefault.js
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isSpecifierDefault;
+
+var _generated = require("./generated");
+
+function isSpecifierDefault(specifier) {
+ return (0, _generated.isImportDefaultSpecifier)(specifier) || (0, _generated.isIdentifier)(specifier.imported || specifier.exported, {
+ name: "default"
+ });
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isType.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isType.js
new file mode 100644
index 00000000000..59d31dfbbfc
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isType.js
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isType;
+
+var _definitions = require("../definitions");
+
+function isType(nodeType, targetType) {
+ if (nodeType === targetType) return true;
+ if (_definitions.ALIAS_KEYS[targetType]) return false;
+ const aliases = _definitions.FLIPPED_ALIAS_KEYS[targetType];
+
+ if (aliases) {
+ if (aliases[0] === nodeType) return true;
+
+ for (const alias of aliases) {
+ if (nodeType === alias) return true;
+ }
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidES3Identifier.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidES3Identifier.js
new file mode 100644
index 00000000000..5cef5664df0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidES3Identifier.js
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isValidES3Identifier;
+
+var _isValidIdentifier = require("./isValidIdentifier");
+
+const RESERVED_WORDS_ES3_ONLY = new Set(["abstract", "boolean", "byte", "char", "double", "enum", "final", "float", "goto", "implements", "int", "interface", "long", "native", "package", "private", "protected", "public", "short", "static", "synchronized", "throws", "transient", "volatile"]);
+
+function isValidES3Identifier(name) {
+ return (0, _isValidIdentifier.default)(name) && !RESERVED_WORDS_ES3_ONLY.has(name);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidIdentifier.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidIdentifier.js
new file mode 100644
index 00000000000..3fa6f98000b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isValidIdentifier.js
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isValidIdentifier;
+
+var _helperValidatorIdentifier = require("@babel/helper-validator-identifier");
+
+function isValidIdentifier(name, reserved = true) {
+ if (typeof name !== "string") return false;
+
+ if (reserved) {
+ if ((0, _helperValidatorIdentifier.isKeyword)(name) || (0, _helperValidatorIdentifier.isStrictReservedWord)(name, true)) {
+ return false;
+ }
+ }
+
+ return (0, _helperValidatorIdentifier.isIdentifierName)(name);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/isVar.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isVar.js
new file mode 100644
index 00000000000..a34801d18fe
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/isVar.js
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isVar;
+
+var _generated = require("./generated");
+
+var _constants = require("../constants");
+
+function isVar(node) {
+ return (0, _generated.isVariableDeclaration)(node, {
+ kind: "var"
+ }) && !node[_constants.BLOCK_SCOPED_SYMBOL];
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/matchesPattern.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/matchesPattern.js
new file mode 100644
index 00000000000..d961f5a6ef2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/matchesPattern.js
@@ -0,0 +1,42 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = matchesPattern;
+
+var _generated = require("./generated");
+
+function matchesPattern(member, match, allowPartial) {
+ if (!(0, _generated.isMemberExpression)(member)) return false;
+ const parts = Array.isArray(match) ? match : match.split(".");
+ const nodes = [];
+ let node;
+
+ for (node = member; (0, _generated.isMemberExpression)(node); node = node.object) {
+ nodes.push(node.property);
+ }
+
+ nodes.push(node);
+ if (nodes.length < parts.length) return false;
+ if (!allowPartial && nodes.length > parts.length) return false;
+
+ for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) {
+ const node = nodes[j];
+ let value;
+
+ if ((0, _generated.isIdentifier)(node)) {
+ value = node.name;
+ } else if ((0, _generated.isStringLiteral)(node)) {
+ value = node.value;
+ } else if ((0, _generated.isThisExpression)(node)) {
+ value = "this";
+ } else {
+ return false;
+ }
+
+ if (parts[i] !== value) return false;
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isCompatTag.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isCompatTag.js
new file mode 100644
index 00000000000..57761c2b1b1
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isCompatTag.js
@@ -0,0 +1,10 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = isCompatTag;
+
+function isCompatTag(tagName) {
+ return !!tagName && /^[a-z]/.test(tagName);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isReactComponent.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isReactComponent.js
new file mode 100644
index 00000000000..0dd2102589a
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/react/isReactComponent.js
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _buildMatchMemberExpression = require("../buildMatchMemberExpression");
+
+const isReactComponent = (0, _buildMatchMemberExpression.default)("React.Component");
+var _default = isReactComponent;
+exports.default = _default; \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/lib/validators/validate.js b/chromium/third_party/node/node_modules/@babel/types/lib/validators/validate.js
new file mode 100644
index 00000000000..f5a2bef5fb1
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/lib/validators/validate.js
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = validate;
+exports.validateField = validateField;
+exports.validateChild = validateChild;
+
+var _definitions = require("../definitions");
+
+function validate(node, key, val) {
+ if (!node) return;
+ const fields = _definitions.NODE_FIELDS[node.type];
+ if (!fields) return;
+ const field = fields[key];
+ validateField(node, key, val, field);
+ validateChild(node, key, val);
+}
+
+function validateField(node, key, val, field) {
+ if (!(field != null && field.validate)) return;
+ if (field.optional && val == null) return;
+ field.validate(node, key, val);
+}
+
+function validateChild(node, key, val) {
+ if (val == null) return;
+ const validate = _definitions.NODE_PARENT_VALIDATIONS[val.type];
+ if (!validate) return;
+ validate(node, key, val);
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/package.json b/chromium/third_party/node/node_modules/@babel/types/package.json
new file mode 100644
index 00000000000..202d4baa466
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "@babel/types",
+ "version": "7.15.6",
+ "description": "Babel Types is a Lodash-esque utility library for AST nodes",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-types",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20types%22+is%3Aopen",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-types"
+ },
+ "main": "./lib/index.js",
+ "types": "./lib/index-legacy.d.ts",
+ "typesVersions": {
+ ">=3.7": {
+ "lib/index-legacy.d.ts": [
+ "lib/index.d.ts"
+ ]
+ }
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.14.9",
+ "to-fast-properties": "^2.0.0"
+ },
+ "devDependencies": {
+ "@babel/generator": "7.15.4",
+ "@babel/parser": "7.15.6",
+ "chalk": "^4.1.0",
+ "glob": "^7.1.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/asserts.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/asserts.js
new file mode 100644
index 00000000000..bdfd94857fc
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/asserts.js
@@ -0,0 +1,50 @@
+import definitions from "../../lib/definitions/index.js";
+
+function addAssertHelper(type) {
+ const result =
+ definitions.NODE_FIELDS[type] || definitions.FLIPPED_ALIAS_KEYS[type]
+ ? `node is t.${type}`
+ : "boolean";
+
+ return `export function assert${type}(node: object | null | undefined, opts?: object | null): asserts ${
+ result === "boolean" ? "node" : result
+ } {
+ assert("${type}", node, opts) }
+ `;
+}
+
+export default function generateAsserts() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+import is from "../../validators/is";
+import type * as t from "../..";
+
+function assert(type: string, node: any, opts?: any): void {
+ if (!is(type, node, opts)) {
+ throw new Error(
+ \`Expected type "\${type}" with option \${JSON.stringify(opts)}, \` +
+ \`but instead got "\${node.type}".\`,
+ );
+ }
+}\n\n`;
+
+ Object.keys(definitions.VISITOR_KEYS).forEach(type => {
+ output += addAssertHelper(type);
+ });
+
+ Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => {
+ output += addAssertHelper(type);
+ });
+
+ Object.keys(definitions.DEPRECATED_KEYS).forEach(type => {
+ const newType = definitions.DEPRECATED_KEYS[type];
+ output += `export function assert${type}(node: any, opts: any): void {
+ console.trace("The node type ${type} has been renamed to ${newType}");
+ assert("${type}", node, opts);
+}\n`;
+ });
+
+ return output;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/ast-types.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/ast-types.js
new file mode 100644
index 00000000000..cd31918a561
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/ast-types.js
@@ -0,0 +1,139 @@
+import t from "../../lib/index.js";
+import stringifyValidator from "../utils/stringifyValidator.js";
+
+export default function generateAstTypes() {
+ let code = `// NOTE: This file is autogenerated. Do not modify.
+// See packages/babel-types/scripts/generators/ast-types.js for script used.
+
+interface BaseComment {
+ value: string;
+ start: number;
+ end: number;
+ loc: SourceLocation;
+ type: "CommentBlock" | "CommentLine";
+}
+
+export interface CommentBlock extends BaseComment {
+ type: "CommentBlock";
+}
+
+export interface CommentLine extends BaseComment {
+ type: "CommentLine";
+}
+
+export type Comment = CommentBlock | CommentLine;
+
+export interface SourceLocation {
+ start: {
+ line: number;
+ column: number;
+ };
+
+ end: {
+ line: number;
+ column: number;
+ };
+}
+
+interface BaseNode {
+ leadingComments: ReadonlyArray<Comment> | null;
+ innerComments: ReadonlyArray<Comment> | null;
+ trailingComments: ReadonlyArray<Comment> | null;
+ start: number | null;
+ end: number | null;
+ loc: SourceLocation | null;
+ type: Node["type"];
+ range?: [number, number];
+ extra?: Record<string, unknown>;
+}
+
+export type CommentTypeShorthand = "leading" | "inner" | "trailing";
+
+export type Node = ${t.TYPES.sort().join(" | ")};\n\n`;
+
+ const deprecatedAlias = {};
+ for (const type in t.DEPRECATED_KEYS) {
+ deprecatedAlias[t.DEPRECATED_KEYS[type]] = type;
+ }
+ for (const type in t.NODE_FIELDS) {
+ const fields = t.NODE_FIELDS[type];
+ const fieldNames = sortFieldNames(Object.keys(t.NODE_FIELDS[type]), type);
+ const struct = [];
+
+ fieldNames.forEach(fieldName => {
+ const field = fields[fieldName];
+ // Future / annoying TODO:
+ // MemberExpression.property, ObjectProperty.key and ObjectMethod.key need special cases; either:
+ // - convert the declaration to chain() like ClassProperty.key and ClassMethod.key,
+ // - declare an alias type for valid keys, detect the case and reuse it here,
+ // - declare a disjoint union with, for example, ObjectPropertyBase,
+ // ObjectPropertyLiteralKey and ObjectPropertyComputedKey, and declare ObjectProperty
+ // as "ObjectPropertyBase & (ObjectPropertyLiteralKey | ObjectPropertyComputedKey)"
+ let typeAnnotation = stringifyValidator(field.validate, "");
+
+ if (isNullable(field) && !hasDefault(field)) {
+ typeAnnotation += " | null";
+ }
+
+ const alphaNumeric = /^\w+$/;
+ const optional = field.optional ? "?" : "";
+
+ if (t.isValidIdentifier(fieldName) || alphaNumeric.test(fieldName)) {
+ struct.push(`${fieldName}${optional}: ${typeAnnotation};`);
+ } else {
+ struct.push(`"${fieldName}"${optional}: ${typeAnnotation};`);
+ }
+ });
+
+ code += `export interface ${type} extends BaseNode {
+ type: "${type}";
+ ${struct.join("\n ").trim()}
+}\n\n`;
+
+ if (deprecatedAlias[type]) {
+ code += `/**
+ * @deprecated Use \`${type}\`
+ */
+export interface ${deprecatedAlias[type]} extends BaseNode {
+ type: "${deprecatedAlias[type]}";
+ ${struct.join("\n ").trim()}
+}\n\n
+`;
+ }
+ }
+
+ for (const type in t.FLIPPED_ALIAS_KEYS) {
+ const types = t.FLIPPED_ALIAS_KEYS[type];
+ code += `export type ${type} = ${types
+ .map(type => `${type}`)
+ .join(" | ")};\n`;
+ }
+ code += "\n";
+
+ code += "export interface Aliases {\n";
+ for (const type in t.FLIPPED_ALIAS_KEYS) {
+ code += ` ${type}: ${type};\n`;
+ }
+ code += "}\n\n";
+
+ return code;
+}
+
+function hasDefault(field) {
+ return field.default != null;
+}
+
+function isNullable(field) {
+ return field.optional || hasDefault(field);
+}
+
+function sortFieldNames(fields, type) {
+ return fields.sort((fieldA, fieldB) => {
+ const indexA = t.BUILDER_KEYS[type].indexOf(fieldA);
+ const indexB = t.BUILDER_KEYS[type].indexOf(fieldB);
+ if (indexA === indexB) return fieldA < fieldB ? -1 : 1;
+ if (indexA === -1) return 1;
+ if (indexB === -1) return -1;
+ return indexA - indexB;
+ });
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/builders.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/builders.js
new file mode 100644
index 00000000000..3a30e6053c1
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/builders.js
@@ -0,0 +1,163 @@
+import t from "../../lib/index.js";
+import definitions from "../../lib/definitions/index.js";
+import formatBuilderName from "../utils/formatBuilderName.js";
+import lowerFirst from "../utils/lowerFirst.js";
+import stringifyValidator from "../utils/stringifyValidator.js";
+
+function areAllRemainingFieldsNullable(fieldName, fieldNames, fields) {
+ const index = fieldNames.indexOf(fieldName);
+ return fieldNames.slice(index).every(_ => isNullable(fields[_]));
+}
+
+function hasDefault(field) {
+ return field.default != null;
+}
+
+function isNullable(field) {
+ return field.optional || hasDefault(field);
+}
+
+function sortFieldNames(fields, type) {
+ return fields.sort((fieldA, fieldB) => {
+ const indexA = t.BUILDER_KEYS[type].indexOf(fieldA);
+ const indexB = t.BUILDER_KEYS[type].indexOf(fieldB);
+ if (indexA === indexB) return fieldA < fieldB ? -1 : 1;
+ if (indexA === -1) return 1;
+ if (indexB === -1) return -1;
+ return indexA - indexB;
+ });
+}
+
+function generateBuilderArgs(type) {
+ const fields = t.NODE_FIELDS[type];
+ const fieldNames = sortFieldNames(Object.keys(t.NODE_FIELDS[type]), type);
+ const builderNames = t.BUILDER_KEYS[type];
+
+ const args = [];
+
+ fieldNames.forEach(fieldName => {
+ const field = fields[fieldName];
+ // Future / annoying TODO:
+ // MemberExpression.property, ObjectProperty.key and ObjectMethod.key need special cases; either:
+ // - convert the declaration to chain() like ClassProperty.key and ClassMethod.key,
+ // - declare an alias type for valid keys, detect the case and reuse it here,
+ // - declare a disjoint union with, for example, ObjectPropertyBase,
+ // ObjectPropertyLiteralKey and ObjectPropertyComputedKey, and declare ObjectProperty
+ // as "ObjectPropertyBase & (ObjectPropertyLiteralKey | ObjectPropertyComputedKey)"
+ let typeAnnotation = stringifyValidator(field.validate, "t.");
+
+ if (isNullable(field) && !hasDefault(field)) {
+ typeAnnotation += " | null";
+ }
+
+ if (builderNames.includes(fieldName)) {
+ const bindingIdentifierName = t.toBindingIdentifierName(fieldName);
+ if (areAllRemainingFieldsNullable(fieldName, builderNames, fields)) {
+ args.push(
+ `${bindingIdentifierName}${
+ isNullable(field) ? "?:" : ":"
+ } ${typeAnnotation}`
+ );
+ } else {
+ args.push(
+ `${bindingIdentifierName}: ${typeAnnotation}${
+ isNullable(field) ? " | undefined" : ""
+ }`
+ );
+ }
+ }
+ });
+
+ return args;
+}
+
+export default function generateBuilders(kind) {
+ return kind === "uppercase.js"
+ ? generateUppercaseBuilders()
+ : generateLowercaseBuilders();
+}
+
+function generateLowercaseBuilders() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+import builder from "../builder";
+import type * as t from "../..";
+
+/* eslint-disable @typescript-eslint/no-unused-vars */
+
+`;
+
+ const reservedNames = new Set(["super", "import"]);
+ Object.keys(definitions.BUILDER_KEYS).forEach(type => {
+ const defArgs = generateBuilderArgs(type);
+ const formatedBuilderName = formatBuilderName(type);
+ const formatedBuilderNameLocal = reservedNames.has(formatedBuilderName)
+ ? `_${formatedBuilderName}`
+ : formatedBuilderName;
+ output += `${
+ formatedBuilderNameLocal === formatedBuilderName ? "export " : ""
+ }function ${formatedBuilderNameLocal}(${defArgs.join(
+ ", "
+ )}): t.${type} { return builder("${type}", ...arguments); }\n`;
+ if (formatedBuilderNameLocal !== formatedBuilderName) {
+ output += `export { ${formatedBuilderNameLocal} as ${formatedBuilderName} };\n`;
+ }
+
+ // This is needed for backwards compatibility.
+ // It should be removed in the next major version.
+ // JSXIdentifier -> jSXIdentifier
+ if (/^[A-Z]{2}/.test(type)) {
+ output += `export { ${formatedBuilderNameLocal} as ${lowerFirst(
+ type
+ )} }\n`;
+ }
+ });
+
+ Object.keys(definitions.DEPRECATED_KEYS).forEach(type => {
+ const newType = definitions.DEPRECATED_KEYS[type];
+ const formatedBuilderName = formatBuilderName(type);
+ output += `/** @deprecated */
+function ${type}(...args: Array<any>): any {
+ console.trace("The node type ${type} has been renamed to ${newType}");
+ return builder("${type}", ...args);
+}
+export { ${type} as ${formatedBuilderName} };\n`;
+ // This is needed for backwards compatibility.
+ // It should be removed in the next major version.
+ // JSXIdentifier -> jSXIdentifier
+ if (/^[A-Z]{2}/.test(type)) {
+ output += `export { ${type} as ${lowerFirst(type)} }\n`;
+ }
+ });
+
+ return output;
+}
+
+function generateUppercaseBuilders() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+
+/**
+ * This file is written in JavaScript and not TypeScript because uppercase builders
+ * conflict with AST types. TypeScript reads the uppercase.d.ts file instead.
+ */
+
+ export {\n`;
+
+ Object.keys(definitions.BUILDER_KEYS).forEach(type => {
+ const formatedBuilderName = formatBuilderName(type);
+ output += ` ${formatedBuilderName} as ${type},\n`;
+ });
+
+ Object.keys(definitions.DEPRECATED_KEYS).forEach(type => {
+ const formatedBuilderName = formatBuilderName(type);
+ output += ` ${formatedBuilderName} as ${type},\n`;
+ });
+
+ output += ` } from './index';\n`;
+ return output;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/constants.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/constants.js
new file mode 100644
index 00000000000..68abdbd837f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/constants.js
@@ -0,0 +1,15 @@
+import definitions from "../../lib/definitions/index.js";
+
+export default function generateConstants() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+import { FLIPPED_ALIAS_KEYS } from "../../definitions";\n\n`;
+
+ Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => {
+ output += `export const ${type.toUpperCase()}_TYPES = FLIPPED_ALIAS_KEYS["${type}"];\n`;
+ });
+
+ return output;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/docs.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/docs.js
new file mode 100644
index 00000000000..f7b82e56d39
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/docs.js
@@ -0,0 +1,277 @@
+import util from "util";
+import stringifyValidator from "../utils/stringifyValidator.js";
+import toFunctionName from "../utils/toFunctionName.js";
+
+import t from "../../lib/index.js";
+
+const readme = [
+ `---
+id: babel-types
+title: @babel/types
+---
+<!-- Do not modify! This file is automatically generated by
+ github.com/babel/babel/babel-types/scripts/generators/docs.js !-->
+
+> This module contains methods for building ASTs manually and for checking the types of AST nodes.
+
+## Install
+
+\`\`\`sh
+npm install --save-dev @babel/types
+\`\`\`
+
+## API`,
+];
+
+const customTypes = {
+ ClassMethod: {
+ key: "if computed then `Expression` else `Identifier | Literal`",
+ },
+ Identifier: {
+ name: "`string`",
+ },
+ MemberExpression: {
+ property: "if computed then `Expression` else `Identifier`",
+ },
+ ObjectMethod: {
+ key: "if computed then `Expression` else `Identifier | Literal`",
+ },
+ ObjectProperty: {
+ key: "if computed then `Expression` else `Identifier | Literal`",
+ },
+ ClassPrivateMethod: {
+ computed: "'false'",
+ },
+ ClassPrivateProperty: {
+ computed: "'false'",
+ },
+};
+const APIHistory = {
+ ClassProperty: [["v7.6.0", "Supports `static`"]],
+};
+function formatHistory(historyItems) {
+ const lines = historyItems.map(
+ item => "| `" + item[0] + "` | " + item[1] + " |"
+ );
+ return [
+ "<details>",
+ " <summary>History</summary>",
+ "| Version | Changes |",
+ "| --- | --- |",
+ ...lines,
+ "</details>",
+ ];
+}
+function printAPIHistory(key, readme) {
+ if (APIHistory[key]) {
+ readme.push("");
+ readme.push(...formatHistory(APIHistory[key]));
+ }
+}
+function printNodeFields(key, readme) {
+ if (Object.keys(t.NODE_FIELDS[key]).length > 0) {
+ readme.push("");
+ readme.push("AST Node `" + key + "` shape:");
+ Object.keys(t.NODE_FIELDS[key])
+ .sort(function (fieldA, fieldB) {
+ const indexA = t.BUILDER_KEYS[key].indexOf(fieldA);
+ const indexB = t.BUILDER_KEYS[key].indexOf(fieldB);
+ if (indexA === indexB) return fieldA < fieldB ? -1 : 1;
+ if (indexA === -1) return 1;
+ if (indexB === -1) return -1;
+ return indexA - indexB;
+ })
+ .forEach(function (field) {
+ const defaultValue = t.NODE_FIELDS[key][field].default;
+ const fieldDescription = ["`" + field + "`"];
+ const validator = t.NODE_FIELDS[key][field].validate;
+ if (customTypes[key] && customTypes[key][field]) {
+ fieldDescription.push(`: ${customTypes[key][field]}`);
+ } else if (validator) {
+ try {
+ fieldDescription.push(
+ ": `" + stringifyValidator(validator, "") + "`"
+ );
+ } catch (ex) {
+ if (ex.code === "UNEXPECTED_VALIDATOR_TYPE") {
+ console.log(
+ "Unrecognised validator type for " + key + "." + field
+ );
+ console.dir(ex.validator, { depth: 10, colors: true });
+ }
+ }
+ }
+ if (defaultValue !== null || t.NODE_FIELDS[key][field].optional) {
+ fieldDescription.push(
+ " (default: `" + util.inspect(defaultValue) + "`"
+ );
+ if (t.BUILDER_KEYS[key].indexOf(field) < 0) {
+ fieldDescription.push(", excluded from builder function");
+ }
+ fieldDescription.push(")");
+ } else {
+ fieldDescription.push(" (required)");
+ }
+ readme.push("- " + fieldDescription.join(""));
+ });
+ }
+}
+
+function printAliasKeys(key, readme) {
+ if (t.ALIAS_KEYS[key] && t.ALIAS_KEYS[key].length) {
+ readme.push("");
+ readme.push(
+ "Aliases: " +
+ t.ALIAS_KEYS[key]
+ .map(function (key) {
+ return "[`" + key + "`](#" + key.toLowerCase() + ")";
+ })
+ .join(", ")
+ );
+ }
+}
+readme.push("### Node Builders");
+readme.push("");
+Object.keys(t.BUILDER_KEYS)
+ .sort()
+ .forEach(function (key) {
+ readme.push("#### " + toFunctionName(key));
+ readme.push("");
+ readme.push("```javascript");
+ readme.push(
+ "t." + toFunctionName(key) + "(" + t.BUILDER_KEYS[key].join(", ") + ");"
+ );
+ readme.push("```");
+ printAPIHistory(key, readme);
+ readme.push("");
+ readme.push(
+ "See also `t.is" +
+ key +
+ "(node, opts)` and `t.assert" +
+ key +
+ "(node, opts)`."
+ );
+
+ printNodeFields(key, readme);
+ printAliasKeys(key, readme);
+
+ readme.push("");
+ readme.push("---");
+ readme.push("");
+ });
+
+function generateMapAliasToNodeTypes() {
+ const result = new Map();
+ for (const nodeType of Object.keys(t.ALIAS_KEYS)) {
+ const aliases = t.ALIAS_KEYS[nodeType];
+ if (!aliases) continue;
+ for (const alias of aliases) {
+ if (!result.has(alias)) {
+ result.set(alias, []);
+ }
+ const nodeTypes = result.get(alias);
+ nodeTypes.push(nodeType);
+ }
+ }
+ return result;
+}
+const aliasDescriptions = {
+ Binary:
+ "A cover of BinaryExpression and LogicalExpression, which share the same AST shape.",
+ Block: "Deprecated. Will be removed in Babel 8.",
+ BlockParent:
+ "A cover of AST nodes that start an execution context with new [LexicalEnvironment](https://tc39.es/ecma262/#table-additional-state-components-for-ecmascript-code-execution-contexts). In other words, they define the scope of `let` and `const` declarations.",
+ Class:
+ "A cover of ClassExpression and ClassDeclaration, which share the same AST shape.",
+ CompletionStatement:
+ "A statement that indicates the [completion records](https://tc39.es/ecma262/#sec-completion-record-specification-type). In other words, they define the control flow of the program, such as when should a loop break or an action throws critical errors.",
+ Conditional:
+ "A cover of ConditionalExpression and IfStatement, which share the same AST shape.",
+ Declaration:
+ "A cover of any [Declaration](https://tc39.es/ecma262/#prod-Declaration)s.",
+ EnumBody: "A cover of Flow enum bodies.",
+ EnumMember: "A cover of Flow enum membors.",
+ ExportDeclaration:
+ "A cover of any [ExportDeclaration](https://tc39.es/ecma262/#prod-ExportDeclaration)s.",
+ Expression:
+ "A cover of any [Expression](https://tc39.es/ecma262/#sec-ecmascript-language-expressions)s.",
+ ExpressionWrapper:
+ "A wrapper of expression that does not have runtime semantics.",
+ Flow: "A cover of AST nodes defined for Flow.",
+ FlowBaseAnnotation: "A cover of primary Flow type annotations.",
+ FlowDeclaration: "A cover of Flow declarations.",
+ FlowPredicate: "A cover of Flow predicates.",
+ FlowType: "A cover of Flow type annotations.",
+ For: "A cover of [ForStatement](https://tc39.es/ecma262/#sec-for-statement)s and [ForXStatement](#forxstatement)s.",
+ ForXStatement:
+ "A cover of [ForInStatements and ForOfStatements](https://tc39.es/ecma262/#sec-for-in-and-for-of-statements).",
+ Function:
+ "A cover of functions and [method](#method)s, the must have `body` and `params`. Note: `Function` is different to `FunctionParent`.",
+ FunctionParent:
+ "A cover of AST nodes that start an execution context with new [VariableEnvironment](https://tc39.es/ecma262/#table-additional-state-components-for-ecmascript-code-execution-contexts). In other words, they define the scope of `var` declarations. FunctionParent did not include `Program` since Babel 7.",
+ Immutable:
+ "A cover of immutable objects and JSX elements. An object is [immutable](https://tc39.es/ecma262/#immutable-prototype-exotic-object) if no other properties can be defined once created.",
+ JSX: "A cover of AST nodes defined for [JSX](https://facebook.github.io/jsx/).",
+ LVal: "A cover of left hand side expressions used in the `left` of assignment expressions and [ForXStatement](#forxstatement)s. ",
+ Literal:
+ "A cover of [Literal](https://tc39.es/ecma262/#sec-primary-expression-literals)s, [Regular Expression Literal](https://tc39.es/ecma262/#sec-primary-expression-regular-expression-literals)s and [Template Literal](https://tc39.es/ecma262/#sec-template-literals)s.",
+ Loop: "A cover of loop statements.",
+ Method: "A cover of object methods and class methods.",
+ ModuleDeclaration:
+ "A cover of ImportDeclaration and [ExportDeclaration](#exportdeclaration)",
+ ModuleSpecifier:
+ "A cover of import and export specifiers. Note: It is _not_ the [ModuleSpecifier](https://tc39.es/ecma262/#prod-ModuleSpecifier) defined in the spec.",
+ ObjectMember:
+ "A cover of [members](https://tc39.es/ecma262/#prod-PropertyDefinitionList) in an object literal.",
+ Pattern:
+ "A cover of [BindingPattern](https://tc39.es/ecma262/#prod-BindingPattern) except Identifiers.",
+ PatternLike:
+ "A cover of [BindingPattern](https://tc39.es/ecma262/#prod-BindingPattern)s. ",
+ Private: "A cover of private class elements and private identifiers.",
+ Property: "A cover of object properties and class properties.",
+ Pureish:
+ "A cover of AST nodes which do not have side-effects. In other words, there is no observable behaviour changes if they are evaluated more than once.",
+ Scopable:
+ "A cover of [FunctionParent](#functionparent) and [BlockParent](#blockparent).",
+ Statement:
+ "A cover of any [Statement](https://tc39.es/ecma262/#prod-Statement)s.",
+ TSBaseType: "A cover of primary TypeScript type annotations.",
+ TSEntityName: "A cover of ts entities.",
+ TSType: "A cover of TypeScript type annotations.",
+ TSTypeElement: "A cover of TypeScript type declarations.",
+ Terminatorless:
+ "A cover of AST nodes whose semantic will change when a line terminator is inserted between the operator and the operand.",
+ UnaryLike: "A cover of UnaryExpression and SpreadElement.",
+ UserWhitespacable: "Deprecated. Will be removed in Babel 8.",
+ While:
+ "A cover of DoWhileStatement and WhileStatement, which share the same AST shape.",
+};
+const mapAliasToNodeTypes = generateMapAliasToNodeTypes();
+readme.push("### Aliases");
+readme.push("");
+for (const alias of [...mapAliasToNodeTypes.keys()].sort()) {
+ const nodeTypes = mapAliasToNodeTypes.get(alias);
+ nodeTypes.sort();
+ if (!(alias in aliasDescriptions)) {
+ throw new Error(
+ 'Missing alias descriptions of "' +
+ alias +
+ ", which covers " +
+ nodeTypes.join(",")
+ );
+ }
+ readme.push("#### " + alias);
+ readme.push("");
+ readme.push(aliasDescriptions[alias]);
+ readme.push("```javascript");
+ readme.push("t.is" + alias + "(node);");
+ readme.push("```");
+ readme.push("");
+ readme.push("Covered nodes: ");
+ for (const nodeType of nodeTypes) {
+ readme.push("- [`" + nodeType + "`](#" + nodeType.toLowerCase() + ")");
+ }
+ readme.push("");
+}
+
+process.stdout.write(readme.join("\n"));
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/flow.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/flow.js
new file mode 100644
index 00000000000..7fabcc67c52
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/flow.js
@@ -0,0 +1,260 @@
+import t from "../../lib/index.js";
+import stringifyValidator from "../utils/stringifyValidator.js";
+import toFunctionName from "../utils/toFunctionName.js";
+
+const NODE_PREFIX = "BabelNode";
+
+let code = `// NOTE: This file is autogenerated. Do not modify.
+// See packages/babel-types/scripts/generators/flow.js for script used.
+
+declare class ${NODE_PREFIX}Comment {
+ value: string;
+ start: number;
+ end: number;
+ loc: ${NODE_PREFIX}SourceLocation;
+}
+
+declare class ${NODE_PREFIX}CommentBlock extends ${NODE_PREFIX}Comment {
+ type: "CommentBlock";
+}
+
+declare class ${NODE_PREFIX}CommentLine extends ${NODE_PREFIX}Comment {
+ type: "CommentLine";
+}
+
+declare class ${NODE_PREFIX}SourceLocation {
+ start: {
+ line: number;
+ column: number;
+ };
+
+ end: {
+ line: number;
+ column: number;
+ };
+}
+
+declare class ${NODE_PREFIX} {
+ leadingComments?: Array<${NODE_PREFIX}Comment>;
+ innerComments?: Array<${NODE_PREFIX}Comment>;
+ trailingComments?: Array<${NODE_PREFIX}Comment>;
+ start: ?number;
+ end: ?number;
+ loc: ?${NODE_PREFIX}SourceLocation;
+ extra?: { [string]: mixed };
+}\n\n`;
+
+//
+
+const lines = [];
+
+for (const type in t.NODE_FIELDS) {
+ const fields = t.NODE_FIELDS[type];
+
+ const struct = ['type: "' + type + '";'];
+ const args = [];
+ const builderNames = t.BUILDER_KEYS[type];
+
+ Object.keys(t.NODE_FIELDS[type])
+ .sort((fieldA, fieldB) => {
+ const indexA = t.BUILDER_KEYS[type].indexOf(fieldA);
+ const indexB = t.BUILDER_KEYS[type].indexOf(fieldB);
+ if (indexA === indexB) return fieldA < fieldB ? -1 : 1;
+ if (indexA === -1) return 1;
+ if (indexB === -1) return -1;
+ return indexA - indexB;
+ })
+ .forEach(fieldName => {
+ const field = fields[fieldName];
+
+ let suffix = "";
+ if (field.optional || field.default != null) suffix += "?";
+
+ let typeAnnotation = "any";
+
+ const validate = field.validate;
+ if (validate) {
+ typeAnnotation = stringifyValidator(validate, NODE_PREFIX);
+ }
+
+ if (typeAnnotation) {
+ suffix += ": " + typeAnnotation;
+ }
+ if (builderNames.includes(fieldName)) {
+ args.push(t.toBindingIdentifierName(fieldName) + suffix);
+ }
+
+ if (t.isValidIdentifier(fieldName)) {
+ struct.push(fieldName + suffix + ";");
+ }
+ });
+
+ code += `declare class ${NODE_PREFIX}${type} extends ${NODE_PREFIX} {
+ ${struct.join("\n ").trim()}
+}\n\n`;
+
+ // Flow chokes on super() and import() :/
+ if (type !== "Super" && type !== "Import") {
+ lines.push(
+ `declare export function ${toFunctionName(type)}(${args.join(
+ ", "
+ )}): ${NODE_PREFIX}${type};`
+ );
+ } else {
+ const functionName = toFunctionName(type);
+ lines.push(
+ `declare function _${functionName}(${args.join(
+ ", "
+ )}): ${NODE_PREFIX}${type};`,
+ `declare export { _${functionName} as ${functionName} }`
+ );
+ }
+}
+
+for (const typeName of t.TYPES) {
+ const isDeprecated = !!t.DEPRECATED_KEYS[typeName];
+ const realName = isDeprecated ? t.DEPRECATED_KEYS[typeName] : typeName;
+
+ let decl = `declare export function is${typeName}(node: ?Object, opts?: ?Object): boolean`;
+ if (t.NODE_FIELDS[realName]) {
+ decl += ` %checks (node instanceof ${NODE_PREFIX}${realName})`;
+ }
+ lines.push(decl);
+
+ lines.push(
+ `declare export function assert${typeName}(node: ?Object, opts?: ?Object): void`
+ );
+}
+
+lines.push(
+ `declare export var VISITOR_KEYS: { [type: string]: string[] }`,
+
+ // assert/
+ `declare export function assertNode(obj: any): void`,
+
+ // builders/
+ // eslint-disable-next-line max-len
+ `declare export function createTypeAnnotationBasedOnTypeof(type: 'string' | 'number' | 'undefined' | 'boolean' | 'function' | 'object' | 'symbol'): ${NODE_PREFIX}TypeAnnotation`,
+ // eslint-disable-next-line max-len
+ `declare export function createUnionTypeAnnotation(types: Array<${NODE_PREFIX}FlowType>): ${NODE_PREFIX}UnionTypeAnnotation`,
+ // eslint-disable-next-line max-len
+ `declare export function createFlowUnionType(types: Array<${NODE_PREFIX}FlowType>): ${NODE_PREFIX}UnionTypeAnnotation`,
+ // this smells like "internal API"
+ // eslint-disable-next-line max-len
+ `declare export function buildChildren(node: { children: Array<${NODE_PREFIX}JSXText | ${NODE_PREFIX}JSXExpressionContainer | ${NODE_PREFIX}JSXSpreadChild | ${NODE_PREFIX}JSXElement | ${NODE_PREFIX}JSXFragment | ${NODE_PREFIX}JSXEmptyExpression> }): Array<${NODE_PREFIX}JSXText | ${NODE_PREFIX}JSXExpressionContainer | ${NODE_PREFIX}JSXSpreadChild | ${NODE_PREFIX}JSXElement | ${NODE_PREFIX}JSXFragment>`,
+
+ // clone/
+ `declare export function clone<T>(n: T): T;`,
+ `declare export function cloneDeep<T>(n: T): T;`,
+ `declare export function cloneDeepWithoutLoc<T>(n: T): T;`,
+ `declare export function cloneNode<T>(n: T, deep?: boolean, withoutLoc?: boolean): T;`,
+ `declare export function cloneWithoutLoc<T>(n: T): T;`,
+
+ // comments/
+ `declare type CommentTypeShorthand = 'leading' | 'inner' | 'trailing'`,
+ // eslint-disable-next-line max-len
+ `declare export function addComment<T: BabelNode>(node: T, type: CommentTypeShorthand, content: string, line?: boolean): T`,
+ // eslint-disable-next-line max-len
+ `declare export function addComments<T: BabelNode>(node: T, type: CommentTypeShorthand, comments: Array<Comment>): T`,
+ `declare export function inheritInnerComments(node: BabelNode, parent: BabelNode): void`,
+ `declare export function inheritLeadingComments(node: BabelNode, parent: BabelNode): void`,
+ `declare export function inheritsComments<T: BabelNode>(node: T, parent: BabelNode): void`,
+ `declare export function inheritTrailingComments(node: BabelNode, parent: BabelNode): void`,
+ `declare export function removeComments<T: BabelNode>(node: T): T`,
+
+ // converters/
+ `declare export function ensureBlock(node: ${NODE_PREFIX}, key: string): ${NODE_PREFIX}BlockStatement`,
+ `declare export function toBindingIdentifierName(name?: ?string): string`,
+ // eslint-disable-next-line max-len
+ `declare export function toBlock(node: ${NODE_PREFIX}Statement | ${NODE_PREFIX}Expression, parent?: ${NODE_PREFIX}Function | null): ${NODE_PREFIX}BlockStatement`,
+ // eslint-disable-next-line max-len
+ `declare export function toComputedKey(node: ${NODE_PREFIX}Method | ${NODE_PREFIX}Property, key?: ${NODE_PREFIX}Expression | ${NODE_PREFIX}Identifier): ${NODE_PREFIX}Expression`,
+ // eslint-disable-next-line max-len
+ `declare export function toExpression(node: ${NODE_PREFIX}ExpressionStatement | ${NODE_PREFIX}Expression | ${NODE_PREFIX}Class | ${NODE_PREFIX}Function): ${NODE_PREFIX}Expression`,
+ `declare export function toIdentifier(name?: ?string): string`,
+ // eslint-disable-next-line max-len
+ `declare export function toKeyAlias(node: ${NODE_PREFIX}Method | ${NODE_PREFIX}Property, key?: ${NODE_PREFIX}): string`,
+ // toSequenceExpression relies on types that aren't declared in flow
+ // eslint-disable-next-line max-len
+ `declare export function toStatement(node: ${NODE_PREFIX}Statement | ${NODE_PREFIX}Class | ${NODE_PREFIX}Function | ${NODE_PREFIX}AssignmentExpression, ignore?: boolean): ${NODE_PREFIX}Statement | void`,
+ `declare export function valueToNode(value: any): ${NODE_PREFIX}Expression`,
+
+ // modifications/
+ // eslint-disable-next-line max-len
+ `declare export function removeTypeDuplicates(types: Array<${NODE_PREFIX}FlowType>): Array<${NODE_PREFIX}FlowType>`,
+ // eslint-disable-next-line max-len
+ `declare export function appendToMemberExpression(member: ${NODE_PREFIX}MemberExpression, append: ${NODE_PREFIX}, computed?: boolean): ${NODE_PREFIX}MemberExpression`,
+ // eslint-disable-next-line max-len
+ `declare export function inherits<T: BabelNode>(child: T, parent: ${NODE_PREFIX} | null | void): T`,
+ // eslint-disable-next-line max-len
+ `declare export function prependToMemberExpression(member: ${NODE_PREFIX}MemberExpression, prepend: ${NODE_PREFIX}Expression): ${NODE_PREFIX}MemberExpression`,
+ `declare export function removeProperties<T>(n: T, opts: ?{}): void;`,
+ `declare export function removePropertiesDeep<T>(n: T, opts: ?{}): T;`,
+
+ // retrievers/
+ // eslint-disable-next-line max-len
+ `declare export var getBindingIdentifiers: {
+ (node: ${NODE_PREFIX}, duplicates?: boolean, outerOnly?: boolean): { [key: string]: ${NODE_PREFIX}Identifier | Array<${NODE_PREFIX}Identifier> },
+ keys: { [type: string]: string[] }
+ }`,
+ // eslint-disable-next-line max-len
+ `declare export function getOuterBindingIdentifiers(node: BabelNode, duplicates?: boolean): { [key: string]: ${NODE_PREFIX}Identifier | Array<${NODE_PREFIX}Identifier> }`,
+
+ // traverse/
+ `declare type TraversalAncestors = Array<{
+ node: BabelNode,
+ key: string,
+ index?: number,
+ }>;
+ declare type TraversalHandler<T> = (BabelNode, TraversalAncestors, T) => void;
+ declare type TraversalHandlers<T> = {
+ enter?: TraversalHandler<T>,
+ exit?: TraversalHandler<T>,
+ };`.replace(/(^|\n) {2}/g, "$1"),
+ // eslint-disable-next-line
+ `declare export function traverse<T>(n: BabelNode, TraversalHandler<T> | TraversalHandlers<T>, state?: T): void;`,
+ `declare export function traverseFast<T>(n: BabelNode, h: TraversalHandler<T>, state?: T): void;`,
+
+ // utils/
+ // cleanJSXElementLiteralChild is not exported
+ // inherit is not exported
+ `declare export function shallowEqual(actual: Object, expected: Object): boolean`,
+
+ // validators/
+ // eslint-disable-next-line max-len
+ `declare export function buildMatchMemberExpression(match: string, allowPartial?: boolean): (?BabelNode) => boolean`,
+ `declare export function is(type: string, n: BabelNode, opts: Object): boolean;`,
+ `declare export function isBinding(node: BabelNode, parent: BabelNode, grandparent?: BabelNode): boolean`,
+ `declare export function isBlockScoped(node: BabelNode): boolean`,
+ `declare export function isImmutable(node: BabelNode): boolean`,
+ `declare export function isLet(node: BabelNode): boolean`,
+ `declare export function isNode(node: ?Object): boolean`,
+ `declare export function isNodesEquivalent(a: any, b: any): boolean`,
+ `declare export function isPlaceholderType(placeholderType: string, targetType: string): boolean`,
+ `declare export function isReferenced(node: BabelNode, parent: BabelNode, grandparent?: BabelNode): boolean`,
+ `declare export function isScope(node: BabelNode, parent: BabelNode): boolean`,
+ `declare export function isSpecifierDefault(specifier: BabelNodeModuleSpecifier): boolean`,
+ `declare export function isType(nodetype: ?string, targetType: string): boolean`,
+ `declare export function isValidES3Identifier(name: string): boolean`,
+ `declare export function isValidES3Identifier(name: string): boolean`,
+ `declare export function isValidIdentifier(name: string): boolean`,
+ `declare export function isVar(node: BabelNode): boolean`,
+ // eslint-disable-next-line max-len
+ `declare export function matchesPattern(node: ?BabelNode, match: string | Array<string>, allowPartial?: boolean): boolean`,
+ `declare export function validate(n: BabelNode, key: string, value: mixed): void;`
+);
+
+for (const type in t.FLIPPED_ALIAS_KEYS) {
+ const types = t.FLIPPED_ALIAS_KEYS[type];
+ code += `type ${NODE_PREFIX}${type} = ${types
+ .map(type => `${NODE_PREFIX}${type}`)
+ .join(" | ")};\n`;
+}
+
+code += `\ndeclare module "@babel/types" {
+ ${lines.join("\n").replace(/\n/g, "\n ").trim()}
+}\n`;
+
+//
+
+process.stdout.write(code);
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/typescript-legacy.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/typescript-legacy.js
new file mode 100644
index 00000000000..40da48f4e7d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/typescript-legacy.js
@@ -0,0 +1,369 @@
+import t from "../../lib/index.js";
+import stringifyValidator from "../utils/stringifyValidator.js";
+import toFunctionName from "../utils/toFunctionName.js";
+
+let code = `// NOTE: This file is autogenerated. Do not modify.
+// See packages/babel-types/scripts/generators/typescript-legacy.js for script used.
+
+interface BaseComment {
+ value: string;
+ start: number;
+ end: number;
+ loc: SourceLocation;
+ type: "CommentBlock" | "CommentLine";
+}
+
+export interface CommentBlock extends BaseComment {
+ type: "CommentBlock";
+}
+
+export interface CommentLine extends BaseComment {
+ type: "CommentLine";
+}
+
+export type Comment = CommentBlock | CommentLine;
+
+export interface SourceLocation {
+ start: {
+ line: number;
+ column: number;
+ };
+
+ end: {
+ line: number;
+ column: number;
+ };
+}
+
+interface BaseNode {
+ leadingComments: ReadonlyArray<Comment> | null;
+ innerComments: ReadonlyArray<Comment> | null;
+ trailingComments: ReadonlyArray<Comment> | null;
+ start: number | null;
+ end: number | null;
+ loc: SourceLocation | null;
+ type: Node["type"];
+ extra?: Record<string, unknown>;
+}
+
+export type Node = ${t.TYPES.sort().join(" | ")};\n\n`;
+
+//
+
+const lines = [];
+
+for (const type in t.NODE_FIELDS) {
+ const fields = t.NODE_FIELDS[type];
+ const fieldNames = sortFieldNames(Object.keys(t.NODE_FIELDS[type]), type);
+ const builderNames = t.BUILDER_KEYS[type];
+
+ const struct = ['type: "' + type + '";'];
+ const args = [];
+
+ fieldNames.forEach(fieldName => {
+ const field = fields[fieldName];
+ // Future / annoying TODO:
+ // MemberExpression.property, ObjectProperty.key and ObjectMethod.key need special cases; either:
+ // - convert the declaration to chain() like ClassProperty.key and ClassMethod.key,
+ // - declare an alias type for valid keys, detect the case and reuse it here,
+ // - declare a disjoint union with, for example, ObjectPropertyBase,
+ // ObjectPropertyLiteralKey and ObjectPropertyComputedKey, and declare ObjectProperty
+ // as "ObjectPropertyBase & (ObjectPropertyLiteralKey | ObjectPropertyComputedKey)"
+ let typeAnnotation = stringifyValidator(field.validate, "");
+
+ if (isNullable(field) && !hasDefault(field)) {
+ typeAnnotation += " | null";
+ }
+
+ if (builderNames.includes(fieldName)) {
+ if (areAllRemainingFieldsNullable(fieldName, builderNames, fields)) {
+ args.push(
+ `${t.toBindingIdentifierName(fieldName)}${
+ isNullable(field) ? "?:" : ":"
+ } ${typeAnnotation}`
+ );
+ } else {
+ args.push(
+ `${t.toBindingIdentifierName(fieldName)}: ${typeAnnotation}${
+ isNullable(field) ? " | undefined" : ""
+ }`
+ );
+ }
+ }
+
+ const alphaNumeric = /^\w+$/;
+
+ if (t.isValidIdentifier(fieldName) || alphaNumeric.test(fieldName)) {
+ struct.push(`${fieldName}: ${typeAnnotation};`);
+ } else {
+ struct.push(`"${fieldName}": ${typeAnnotation};`);
+ }
+ });
+
+ code += `export interface ${type} extends BaseNode {
+ ${struct.join("\n ").trim()}
+}\n\n`;
+
+ // super and import are reserved words in JavaScript
+ if (type !== "Super" && type !== "Import") {
+ lines.push(
+ `export function ${toFunctionName(type)}(${args.join(", ")}): ${type};`
+ );
+ } else {
+ const functionName = toFunctionName(type);
+ lines.push(
+ `declare function _${functionName}(${args.join(", ")}): ${type};`,
+ `export { _${functionName} as ${functionName}}`
+ );
+ }
+}
+
+for (const typeName of t.TYPES) {
+ const isDeprecated = !!t.DEPRECATED_KEYS[typeName];
+ const realName = isDeprecated ? t.DEPRECATED_KEYS[typeName] : typeName;
+
+ const result =
+ t.NODE_FIELDS[realName] || t.FLIPPED_ALIAS_KEYS[realName]
+ ? `node is ${realName}`
+ : "boolean";
+
+ if (isDeprecated) {
+ lines.push(`/** @deprecated Use \`is${realName}\` */`);
+ }
+ lines.push(
+ `export function is${typeName}(node: object | null | undefined, opts?: object | null): ${result};`
+ );
+
+ if (isDeprecated) {
+ lines.push(`/** @deprecated Use \`assert${realName}\` */`);
+ }
+ lines.push(
+ `export function assert${typeName}(node: object | null | undefined, opts?: object | null): void;`
+ );
+}
+
+lines.push(
+ // assert/
+ `export function assertNode(obj: any): void`,
+
+ // builders/
+ // eslint-disable-next-line max-len
+ `export function createTypeAnnotationBasedOnTypeof(type: 'string' | 'number' | 'undefined' | 'boolean' | 'function' | 'object' | 'symbol'): StringTypeAnnotation | VoidTypeAnnotation | NumberTypeAnnotation | BooleanTypeAnnotation | GenericTypeAnnotation`,
+ `export function createUnionTypeAnnotation<T extends FlowType>(types: [T]): T`,
+ `export function createFlowUnionType<T extends FlowType>(types: [T]): T`,
+ // this probably misbehaves if there are 0 elements, and it's not a UnionTypeAnnotation if there's only 1
+ // it is possible to require "2 or more" for this overload ([T, T, ...T[]]) but it requires typescript 3.0
+ `export function createUnionTypeAnnotation(types: ReadonlyArray<FlowType>): UnionTypeAnnotation`,
+ `export function createFlowUnionType(types: ReadonlyArray<FlowType>): UnionTypeAnnotation`,
+ // this smells like "internal API"
+ // eslint-disable-next-line max-len
+ `export function buildChildren(node: { children: ReadonlyArray<JSXText | JSXExpressionContainer | JSXSpreadChild | JSXElement | JSXFragment | JSXEmptyExpression> }): JSXElement['children']`,
+
+ // clone/
+ `export function clone<T extends Node>(n: T): T;`,
+ `export function cloneDeep<T extends Node>(n: T): T;`,
+ `export function cloneDeepWithoutLoc<T extends Node>(n: T): T;`,
+ `export function cloneNode<T extends Node>(n: T, deep?: boolean, withoutLoc?: boolean): T;`,
+ `export function cloneWithoutLoc<T extends Node>(n: T): T;`,
+
+ // comments/
+ `export type CommentTypeShorthand = 'leading' | 'inner' | 'trailing'`,
+ // eslint-disable-next-line max-len
+ `export function addComment<T extends Node>(node: T, type: CommentTypeShorthand, content: string, line?: boolean): T`,
+ // eslint-disable-next-line max-len
+ `export function addComments<T extends Node>(node: T, type: CommentTypeShorthand, comments: ReadonlyArray<Comment>): T`,
+ `export function inheritInnerComments(node: Node, parent: Node): void`,
+ `export function inheritLeadingComments(node: Node, parent: Node): void`,
+ `export function inheritsComments<T extends Node>(node: T, parent: Node): void`,
+ `export function inheritTrailingComments(node: Node, parent: Node): void`,
+ `export function removeComments<T extends Node>(node: T): T`,
+
+ // converters/
+ // eslint-disable-next-line max-len
+ `export function ensureBlock(node: Extract<Node, { body: BlockStatement | Statement | Expression }>): BlockStatement`,
+ // too complex?
+ // eslint-disable-next-line max-len
+ `export function ensureBlock<K extends keyof Extract<Node, { body: BlockStatement | Statement | Expression }> = 'body'>(node: Extract<Node, Record<K, BlockStatement | Statement | Expression>>, key: K): BlockStatement`,
+ // gatherSequenceExpressions is not exported
+ `export function toBindingIdentifierName(name: { toString(): string } | null | undefined): string`,
+ `export function toBlock(node: Statement | Expression, parent?: Function | null): BlockStatement`,
+ // it is possible for `node` to be an arbitrary object if `key` is always provided,
+ // but that doesn't look like intended API
+ // eslint-disable-next-line max-len
+ `export function toComputedKey<T extends Extract<Node, { computed: boolean | null }>>(node: T, key?: Expression | Identifier): Expression`,
+ `export function toExpression(node: Function): FunctionExpression`,
+ `export function toExpression(node: Class): ClassExpression`,
+ `export function toExpression(node: ExpressionStatement | Expression | Class | Function): Expression`,
+ `export function toIdentifier(name: { toString(): string } | null | undefined): string`,
+ `export function toKeyAlias(node: Method | Property, key?: Node): string`,
+ // NOTE: this actually uses Scope from @babel/traverse, but we can't add a dependency on its types,
+ // as they live in @types. Declare the structural subset that is required.
+ // eslint-disable-next-line max-len
+ `export function toSequenceExpression(nodes: ReadonlyArray<Node>, scope: { push(value: { id: LVal; kind: 'var'; init?: Expression}): void; buildUndefinedNode(): Node }): SequenceExpression | undefined`,
+ `export function toStatement(node: AssignmentExpression, ignore?: boolean): ExpressionStatement`,
+ `export function toStatement(node: Statement | AssignmentExpression, ignore?: boolean): Statement`,
+ `export function toStatement(node: Class, ignore: true): ClassDeclaration | undefined`,
+ `export function toStatement(node: Class, ignore?: boolean): ClassDeclaration`,
+ `export function toStatement(node: Function, ignore: true): FunctionDeclaration | undefined`,
+ `export function toStatement(node: Function, ignore?: boolean): FunctionDeclaration`,
+ // eslint-disable-next-line max-len
+ `export function toStatement(node: Statement | Class | Function | AssignmentExpression, ignore: true): Statement | undefined`,
+ // eslint-disable-next-line max-len
+ `export function toStatement(node: Statement | Class | Function | AssignmentExpression, ignore?: boolean): Statement`,
+ // eslint-disable-next-line max-len
+ `export function valueToNode(value: undefined): Identifier`, // (should this not be a UnaryExpression to avoid shadowing?)
+ `export function valueToNode(value: boolean): BooleanLiteral`,
+ `export function valueToNode(value: null): NullLiteral`,
+ `export function valueToNode(value: string): StringLiteral`,
+ // Infinities and NaN need to use a BinaryExpression; negative values must be wrapped in UnaryExpression
+ `export function valueToNode(value: number): NumericLiteral | BinaryExpression | UnaryExpression`,
+ `export function valueToNode(value: RegExp): RegExpLiteral`,
+ // eslint-disable-next-line max-len
+ `export function valueToNode(value: ReadonlyArray<undefined | boolean | null | string | number | RegExp | object>): ArrayExpression`,
+ // this throws with objects that are not PlainObject according to lodash,
+ // or if there are non-valueToNode-able values
+ `export function valueToNode(value: object): ObjectExpression`,
+ // eslint-disable-next-line max-len
+ `export function valueToNode(value: undefined | boolean | null | string | number | RegExp | object): Expression`,
+
+ // modifications/
+ // eslint-disable-next-line max-len
+ `export function removeTypeDuplicates(types: ReadonlyArray<FlowType | false | null | undefined>): FlowType[]`,
+ // eslint-disable-next-line max-len
+ `export function appendToMemberExpression<T extends Pick<MemberExpression, 'object' | 'property'>>(member: T, append: MemberExpression['property'], computed?: boolean): T`,
+ // eslint-disable-next-line max-len
+ `export function inherits<T extends Node | null | undefined>(child: T, parent: Node | null | undefined): T`,
+ // eslint-disable-next-line max-len
+ `export function prependToMemberExpression<T extends Pick<MemberExpression, 'object' | 'property'>>(member: T, prepend: MemberExpression['object']): T`,
+ `export function removeProperties(
+ n: Node,
+ opts?: { preserveComments: boolean } | null
+): void;`,
+ `export function removePropertiesDeep<T extends Node>(
+ n: T,
+ opts?: { preserveComments: boolean } | null
+): T;`,
+
+ // retrievers/
+ // eslint-disable-next-line max-len
+ `export function getBindingIdentifiers(node: Node, duplicates: true, outerOnly?: boolean): Record<string, Array<Identifier>>`,
+ // eslint-disable-next-line max-len
+ `export function getBindingIdentifiers(node: Node, duplicates?: false, outerOnly?: boolean): Record<string, Identifier>`,
+ // eslint-disable-next-line max-len
+ `export function getBindingIdentifiers(node: Node, duplicates: boolean, outerOnly?: boolean): Record<string, Identifier | Array<Identifier>>`,
+ // eslint-disable-next-line max-len
+ `export function getOuterBindingIdentifiers(node: Node, duplicates: true): Record<string, Array<Identifier>>`,
+ `export function getOuterBindingIdentifiers(node: Node, duplicates?: false): Record<string, Identifier>`,
+ // eslint-disable-next-line max-len
+ `export function getOuterBindingIdentifiers(node: Node, duplicates: boolean): Record<string, Identifier | Array<Identifier>>`,
+
+ // traverse/
+ `export type TraversalAncestors = ReadonlyArray<{
+ node: Node,
+ key: string,
+ index?: number,
+ }>;
+ export type TraversalHandler<T> = (
+ this: undefined, node: Node, parent: TraversalAncestors, type: T
+ ) => void;
+ export type TraversalHandlers<T> = {
+ enter?: TraversalHandler<T>,
+ exit?: TraversalHandler<T>,
+ };`.replace(/(^|\n) {2}/g, "$1"),
+ // eslint-disable-next-line
+ `export function traverse<T>(n: Node, h: TraversalHandler<T> | TraversalHandlers<T>, state?: T): void;`,
+ `export function traverseFast<T>(n: Node, h: TraversalHandler<T>, state?: T): void;`,
+
+ // utils/
+ // cleanJSXElementLiteralChild is not exported
+ // inherit is not exported
+ `export function shallowEqual<T extends object>(actual: object, expected: T): actual is T`,
+
+ // validators/
+ // eslint-disable-next-line max-len
+ `export function buildMatchMemberExpression(match: string, allowPartial?: boolean): (node: Node | null | undefined) => node is MemberExpression`,
+ // eslint-disable-next-line max-len
+ `export function is<T extends Node['type']>(type: T, n: Node | null | undefined, required?: undefined): n is Extract<Node, { type: T }>`,
+ // eslint-disable-next-line max-len
+ `export function is<T extends Node['type'], P extends Extract<Node, { type: T }>>(type: T, n: Node | null | undefined, required: Partial<P>): n is P`,
+ // eslint-disable-next-line max-len
+ `export function is<P extends Node>(type: string, n: Node | null | undefined, required: Partial<P>): n is P`,
+ `export function is(type: string, n: Node | null | undefined, required?: Partial<Node>): n is Node`,
+ `export function isBinding(node: Node, parent: Node, grandparent?: Node): boolean`,
+ // eslint-disable-next-line max-len
+ `export function isBlockScoped(node: Node): node is FunctionDeclaration | ClassDeclaration | VariableDeclaration`,
+ `export function isImmutable(node: Node): node is Immutable`,
+ `export function isLet(node: Node): node is VariableDeclaration`,
+ `export function isNode(node: object | null | undefined): node is Node`,
+ `export function isNodesEquivalent<T extends Partial<Node>>(a: T, b: any): b is T`,
+ `export function isNodesEquivalent(a: any, b: any): boolean`,
+ `export function isPlaceholderType(placeholderType: Node['type'], targetType: Node['type']): boolean`,
+ `export function isReferenced(node: Node, parent: Node, grandparent?: Node): boolean`,
+ `export function isScope(node: Node, parent: Node): node is Scopable`,
+ `export function isSpecifierDefault(specifier: ModuleSpecifier): boolean`,
+ `export function isType<T extends Node['type']>(nodetype: string, targetType: T): nodetype is T`,
+ `export function isType(nodetype: string | null | undefined, targetType: string): boolean`,
+ `export function isValidES3Identifier(name: string): boolean`,
+ `export function isValidIdentifier(name: string): boolean`,
+ `export function isVar(node: Node): node is VariableDeclaration`,
+ // the MemberExpression implication is incidental, but it follows from the implementation
+ // eslint-disable-next-line max-len
+ `export function matchesPattern(node: Node | null | undefined, match: string | ReadonlyArray<string>, allowPartial?: boolean): node is MemberExpression`,
+ // eslint-disable-next-line max-len
+ `export function validate<T extends Node, K extends keyof T>(n: Node | null | undefined, key: K, value: T[K]): void;`,
+ `export function validate(n: Node, key: string, value: any): void;`
+);
+
+for (const type in t.DEPRECATED_KEYS) {
+ code += `/**
+ * @deprecated Use \`${t.DEPRECATED_KEYS[type]}\`
+ */
+export type ${type} = ${t.DEPRECATED_KEYS[type]};\n
+`;
+}
+
+for (const type in t.FLIPPED_ALIAS_KEYS) {
+ const types = t.FLIPPED_ALIAS_KEYS[type];
+ code += `export type ${type} = ${types
+ .map(type => `${type}`)
+ .join(" | ")};\n`;
+}
+code += "\n";
+
+code += "export interface Aliases {\n";
+for (const type in t.FLIPPED_ALIAS_KEYS) {
+ code += ` ${type}: ${type};\n`;
+}
+code += "}\n\n";
+
+code += lines.join("\n") + "\n";
+
+//
+
+process.stdout.write(code);
+
+//
+
+function areAllRemainingFieldsNullable(fieldName, fieldNames, fields) {
+ const index = fieldNames.indexOf(fieldName);
+ return fieldNames.slice(index).every(_ => isNullable(fields[_]));
+}
+
+function hasDefault(field) {
+ return field.default != null;
+}
+
+function isNullable(field) {
+ return field.optional || hasDefault(field);
+}
+
+function sortFieldNames(fields, type) {
+ return fields.sort((fieldA, fieldB) => {
+ const indexA = t.BUILDER_KEYS[type].indexOf(fieldA);
+ const indexB = t.BUILDER_KEYS[type].indexOf(fieldB);
+ if (indexA === indexB) return fieldA < fieldB ? -1 : 1;
+ if (indexA === -1) return 1;
+ if (indexB === -1) return -1;
+ return indexA - indexB;
+ });
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/generators/validators.js b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/validators.js
new file mode 100644
index 00000000000..acd6da65750
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/generators/validators.js
@@ -0,0 +1,87 @@
+import definitions from "../../lib/definitions/index.js";
+
+const has = Function.call.bind(Object.prototype.hasOwnProperty);
+
+function joinComparisons(leftArr, right) {
+ return (
+ leftArr.map(JSON.stringify).join(` === ${right} || `) + ` === ${right}`
+ );
+}
+
+function addIsHelper(type, aliasKeys, deprecated) {
+ const targetType = JSON.stringify(type);
+ let aliasSource = "";
+ if (aliasKeys) {
+ aliasSource = joinComparisons(aliasKeys, "nodeType");
+ }
+
+ let placeholderSource = "";
+ const placeholderTypes = [];
+ if (
+ definitions.PLACEHOLDERS.includes(type) &&
+ has(definitions.FLIPPED_ALIAS_KEYS, type)
+ ) {
+ placeholderTypes.push(type);
+ }
+ if (has(definitions.PLACEHOLDERS_FLIPPED_ALIAS, type)) {
+ placeholderTypes.push(...definitions.PLACEHOLDERS_FLIPPED_ALIAS[type]);
+ }
+ if (placeholderTypes.length > 0) {
+ placeholderSource =
+ ' || nodeType === "Placeholder" && (' +
+ joinComparisons(
+ placeholderTypes,
+ "(node as t.Placeholder).expectedNode"
+ ) +
+ ")";
+ }
+
+ const result =
+ definitions.NODE_FIELDS[type] || definitions.FLIPPED_ALIAS_KEYS[type]
+ ? `node is t.${type}`
+ : "boolean";
+
+ return `export function is${type}(node: object | null | undefined, opts?: object | null): ${result} {
+ ${deprecated || ""}
+ if (!node) return false;
+
+ const nodeType = (node as t.Node).type;
+ if (${
+ aliasSource ? aliasSource : `nodeType === ${targetType}`
+ }${placeholderSource}) {
+ if (typeof opts === "undefined") {
+ return true;
+ } else {
+ return shallowEqual(node, opts);
+ }
+ }
+
+ return false;
+ }
+ `;
+}
+
+export default function generateValidators() {
+ let output = `/*
+ * This file is auto-generated! Do not modify it directly.
+ * To re-generate run 'make build'
+ */
+import shallowEqual from "../../utils/shallowEqual";
+import type * as t from "../..";\n\n`;
+
+ Object.keys(definitions.VISITOR_KEYS).forEach(type => {
+ output += addIsHelper(type);
+ });
+
+ Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => {
+ output += addIsHelper(type, definitions.FLIPPED_ALIAS_KEYS[type]);
+ });
+
+ Object.keys(definitions.DEPRECATED_KEYS).forEach(type => {
+ const newType = definitions.DEPRECATED_KEYS[type];
+ const deprecated = `console.trace("The node type ${type} has been renamed to ${newType}");`;
+ output += addIsHelper(type, null, deprecated);
+ });
+
+ return output;
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/package.json b/chromium/third_party/node/node_modules/@babel/types/scripts/package.json
new file mode 100644
index 00000000000..5ffd9800b97
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/package.json
@@ -0,0 +1 @@
+{ "type": "module" }
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/utils/formatBuilderName.js b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/formatBuilderName.js
new file mode 100644
index 00000000000..f00a3c4a610
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/formatBuilderName.js
@@ -0,0 +1,8 @@
+const toLowerCase = Function.call.bind("".toLowerCase);
+
+export default function formatBuilderName(type) {
+ // FunctionExpression -> functionExpression
+ // JSXIdentifier -> jsxIdentifier
+ // V8IntrinsicIdentifier -> v8IntrinsicIdentifier
+ return type.replace(/^([A-Z](?=[a-z0-9])|[A-Z]+(?=[A-Z]))/, toLowerCase);
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/utils/lowerFirst.js b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/lowerFirst.js
new file mode 100644
index 00000000000..012f252a7f6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/lowerFirst.js
@@ -0,0 +1,3 @@
+export default function lowerFirst(string) {
+ return string[0].toLowerCase() + string.slice(1);
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/utils/stringifyValidator.js b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/stringifyValidator.js
new file mode 100644
index 00000000000..4b8d29c12c3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/stringifyValidator.js
@@ -0,0 +1,66 @@
+export default function stringifyValidator(validator, nodePrefix) {
+ if (validator === undefined) {
+ return "any";
+ }
+
+ if (validator.each) {
+ return `Array<${stringifyValidator(validator.each, nodePrefix)}>`;
+ }
+
+ if (validator.chainOf) {
+ return stringifyValidator(validator.chainOf[1], nodePrefix);
+ }
+
+ if (validator.oneOf) {
+ return validator.oneOf.map(JSON.stringify).join(" | ");
+ }
+
+ if (validator.oneOfNodeTypes) {
+ return validator.oneOfNodeTypes.map(_ => nodePrefix + _).join(" | ");
+ }
+
+ if (validator.oneOfNodeOrValueTypes) {
+ return validator.oneOfNodeOrValueTypes
+ .map(_ => {
+ return isValueType(_) ? _ : nodePrefix + _;
+ })
+ .join(" | ");
+ }
+
+ if (validator.type) {
+ return validator.type;
+ }
+
+ if (validator.shapeOf) {
+ return (
+ "{ " +
+ Object.keys(validator.shapeOf)
+ .map(shapeKey => {
+ const propertyDefinition = validator.shapeOf[shapeKey];
+ if (propertyDefinition.validate) {
+ const isOptional =
+ propertyDefinition.optional || propertyDefinition.default != null;
+ return (
+ shapeKey +
+ (isOptional ? "?: " : ": ") +
+ stringifyValidator(propertyDefinition.validate)
+ );
+ }
+ return null;
+ })
+ .filter(Boolean)
+ .join(", ") +
+ " }"
+ );
+ }
+
+ return ["any"];
+}
+
+/**
+ * Heuristic to decide whether or not the given type is a value type (eg. "null")
+ * or a Node type (eg. "Expression").
+ */
+function isValueType(type) {
+ return type.charAt(0).toLowerCase() === type.charAt(0);
+}
diff --git a/chromium/third_party/node/node_modules/@babel/types/scripts/utils/toFunctionName.js b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/toFunctionName.js
new file mode 100644
index 00000000000..2b645780ec6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/@babel/types/scripts/utils/toFunctionName.js
@@ -0,0 +1,4 @@
+export default function toFunctionName(typeName) {
+ const _ = typeName.replace(/^TS/, "ts").replace(/^JSX/, "jsx");
+ return _.slice(0, 1).toLowerCase() + _.slice(1);
+}
diff --git a/chromium/third_party/node/node_modules/ansi-styles/index.js b/chromium/third_party/node/node_modules/ansi-styles/index.js
new file mode 100644
index 00000000000..90a871c4d78
--- /dev/null
+++ b/chromium/third_party/node/node_modules/ansi-styles/index.js
@@ -0,0 +1,165 @@
+'use strict';
+const colorConvert = require('color-convert');
+
+const wrapAnsi16 = (fn, offset) => function () {
+ const code = fn.apply(colorConvert, arguments);
+ return `\u001B[${code + offset}m`;
+};
+
+const wrapAnsi256 = (fn, offset) => function () {
+ const code = fn.apply(colorConvert, arguments);
+ return `\u001B[${38 + offset};5;${code}m`;
+};
+
+const wrapAnsi16m = (fn, offset) => function () {
+ const rgb = fn.apply(colorConvert, arguments);
+ return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
+};
+
+function assembleStyles() {
+ const codes = new Map();
+ const styles = {
+ modifier: {
+ reset: [0, 0],
+ // 21 isn't widely supported and 22 does the same thing
+ bold: [1, 22],
+ dim: [2, 22],
+ italic: [3, 23],
+ underline: [4, 24],
+ inverse: [7, 27],
+ hidden: [8, 28],
+ strikethrough: [9, 29]
+ },
+ color: {
+ black: [30, 39],
+ red: [31, 39],
+ green: [32, 39],
+ yellow: [33, 39],
+ blue: [34, 39],
+ magenta: [35, 39],
+ cyan: [36, 39],
+ white: [37, 39],
+ gray: [90, 39],
+
+ // Bright color
+ redBright: [91, 39],
+ greenBright: [92, 39],
+ yellowBright: [93, 39],
+ blueBright: [94, 39],
+ magentaBright: [95, 39],
+ cyanBright: [96, 39],
+ whiteBright: [97, 39]
+ },
+ bgColor: {
+ bgBlack: [40, 49],
+ bgRed: [41, 49],
+ bgGreen: [42, 49],
+ bgYellow: [43, 49],
+ bgBlue: [44, 49],
+ bgMagenta: [45, 49],
+ bgCyan: [46, 49],
+ bgWhite: [47, 49],
+
+ // Bright color
+ bgBlackBright: [100, 49],
+ bgRedBright: [101, 49],
+ bgGreenBright: [102, 49],
+ bgYellowBright: [103, 49],
+ bgBlueBright: [104, 49],
+ bgMagentaBright: [105, 49],
+ bgCyanBright: [106, 49],
+ bgWhiteBright: [107, 49]
+ }
+ };
+
+ // Fix humans
+ styles.color.grey = styles.color.gray;
+
+ for (const groupName of Object.keys(styles)) {
+ const group = styles[groupName];
+
+ for (const styleName of Object.keys(group)) {
+ const style = group[styleName];
+
+ styles[styleName] = {
+ open: `\u001B[${style[0]}m`,
+ close: `\u001B[${style[1]}m`
+ };
+
+ group[styleName] = styles[styleName];
+
+ codes.set(style[0], style[1]);
+ }
+
+ Object.defineProperty(styles, groupName, {
+ value: group,
+ enumerable: false
+ });
+
+ Object.defineProperty(styles, 'codes', {
+ value: codes,
+ enumerable: false
+ });
+ }
+
+ const ansi2ansi = n => n;
+ const rgb2rgb = (r, g, b) => [r, g, b];
+
+ styles.color.close = '\u001B[39m';
+ styles.bgColor.close = '\u001B[49m';
+
+ styles.color.ansi = {
+ ansi: wrapAnsi16(ansi2ansi, 0)
+ };
+ styles.color.ansi256 = {
+ ansi256: wrapAnsi256(ansi2ansi, 0)
+ };
+ styles.color.ansi16m = {
+ rgb: wrapAnsi16m(rgb2rgb, 0)
+ };
+
+ styles.bgColor.ansi = {
+ ansi: wrapAnsi16(ansi2ansi, 10)
+ };
+ styles.bgColor.ansi256 = {
+ ansi256: wrapAnsi256(ansi2ansi, 10)
+ };
+ styles.bgColor.ansi16m = {
+ rgb: wrapAnsi16m(rgb2rgb, 10)
+ };
+
+ for (let key of Object.keys(colorConvert)) {
+ if (typeof colorConvert[key] !== 'object') {
+ continue;
+ }
+
+ const suite = colorConvert[key];
+
+ if (key === 'ansi16') {
+ key = 'ansi';
+ }
+
+ if ('ansi16' in suite) {
+ styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
+ styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
+ }
+
+ if ('ansi256' in suite) {
+ styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
+ styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
+ }
+
+ if ('rgb' in suite) {
+ styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
+ styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
+ }
+ }
+
+ return styles;
+}
+
+// Make the export immutable
+Object.defineProperty(module, 'exports', {
+ enumerable: true,
+ get: assembleStyles
+});
diff --git a/chromium/third_party/node/node_modules/ansi-styles/license b/chromium/third_party/node/node_modules/ansi-styles/license
new file mode 100644
index 00000000000..e7af2f77107
--- /dev/null
+++ b/chromium/third_party/node/node_modules/ansi-styles/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/ansi-styles/package.json b/chromium/third_party/node/node_modules/ansi-styles/package.json
new file mode 100644
index 00000000000..65edb48c399
--- /dev/null
+++ b/chromium/third_party/node/node_modules/ansi-styles/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "ansi-styles",
+ "version": "3.2.1",
+ "description": "ANSI escape codes for styling strings in the terminal",
+ "license": "MIT",
+ "repository": "chalk/ansi-styles",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "scripts": {
+ "test": "xo && ava",
+ "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "devDependencies": {
+ "ava": "*",
+ "babel-polyfill": "^6.23.0",
+ "svg-term-cli": "^2.1.1",
+ "xo": "*"
+ },
+ "ava": {
+ "require": "babel-polyfill"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/balanced-match/index.js b/chromium/third_party/node/node_modules/balanced-match/index.js
new file mode 100644
index 00000000000..c67a64608df
--- /dev/null
+++ b/chromium/third_party/node/node_modules/balanced-match/index.js
@@ -0,0 +1,62 @@
+'use strict';
+module.exports = balanced;
+function balanced(a, b, str) {
+ if (a instanceof RegExp) a = maybeMatch(a, str);
+ if (b instanceof RegExp) b = maybeMatch(b, str);
+
+ var r = range(a, b, str);
+
+ return r && {
+ start: r[0],
+ end: r[1],
+ pre: str.slice(0, r[0]),
+ body: str.slice(r[0] + a.length, r[1]),
+ post: str.slice(r[1] + b.length)
+ };
+}
+
+function maybeMatch(reg, str) {
+ var m = str.match(reg);
+ return m ? m[0] : null;
+}
+
+balanced.range = range;
+function range(a, b, str) {
+ var begs, beg, left, right, result;
+ var ai = str.indexOf(a);
+ var bi = str.indexOf(b, ai + 1);
+ var i = ai;
+
+ if (ai >= 0 && bi > 0) {
+ if(a===b) {
+ return [ai, bi];
+ }
+ begs = [];
+ left = str.length;
+
+ while (i >= 0 && !result) {
+ if (i == ai) {
+ begs.push(i);
+ ai = str.indexOf(a, i + 1);
+ } else if (begs.length == 1) {
+ result = [ begs.pop(), bi ];
+ } else {
+ beg = begs.pop();
+ if (beg < left) {
+ left = beg;
+ right = bi;
+ }
+
+ bi = str.indexOf(b, i + 1);
+ }
+
+ i = ai < bi && ai >= 0 ? ai : bi;
+ }
+
+ if (begs.length) {
+ result = [ left, right ];
+ }
+ }
+
+ return result;
+}
diff --git a/chromium/third_party/node/node_modules/balanced-match/package.json b/chromium/third_party/node/node_modules/balanced-match/package.json
new file mode 100644
index 00000000000..ce6073e0403
--- /dev/null
+++ b/chromium/third_party/node/node_modules/balanced-match/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "balanced-match",
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
+ "version": "1.0.2",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "homepage": "https://github.com/juliangruber/balanced-match",
+ "main": "index.js",
+ "scripts": {
+ "test": "tape test/test.js",
+ "bench": "matcha test/bench.js"
+ },
+ "devDependencies": {
+ "matcha": "^0.7.0",
+ "tape": "^4.6.0"
+ },
+ "keywords": [
+ "match",
+ "regexp",
+ "test",
+ "balanced",
+ "parse"
+ ],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ }
+}
diff --git a/chromium/third_party/node/node_modules/brace-expansion/LICENSE b/chromium/third_party/node/node_modules/brace-expansion/LICENSE
new file mode 100644
index 00000000000..de3226673c3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/brace-expansion/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/brace-expansion/index.js b/chromium/third_party/node/node_modules/brace-expansion/index.js
new file mode 100644
index 00000000000..0478be81eab
--- /dev/null
+++ b/chromium/third_party/node/node_modules/brace-expansion/index.js
@@ -0,0 +1,201 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ // I don't know why Bash 4.3 does this, but it does.
+ // Anything starting with {} will have the first two bytes preserved
+ // but *only* at the top level, so {},a}b will not expand to anything,
+ // but a{},b}c will be expanded to [a}c,abc].
+ // One could argue that this is a bug in Bash, but since the goal of
+ // this module is to match Bash's rules, we escape a leading {}
+ if (str.substr(0, 2) === '{}') {
+ str = '\\{\\}' + str.substr(2);
+ }
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str, isTop) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = m.body.indexOf(',') >= 0;
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*\}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
+
diff --git a/chromium/third_party/node/node_modules/brace-expansion/package.json b/chromium/third_party/node/node_modules/brace-expansion/package.json
new file mode 100644
index 00000000000..a18faa8fd67
--- /dev/null
+++ b/chromium/third_party/node/node_modules/brace-expansion/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "brace-expansion",
+ "description": "Brace expansion as known from sh/bash",
+ "version": "1.1.11",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
+ },
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "main": "index.js",
+ "scripts": {
+ "test": "tape test/*.js",
+ "gentest": "bash test/generate.sh",
+ "bench": "matcha test/perf/bench.js"
+ },
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "devDependencies": {
+ "matcha": "^0.7.0",
+ "tape": "^4.6.0"
+ },
+ "keywords": [],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ }
+}
diff --git a/chromium/third_party/node/node_modules/chalk/index.js b/chromium/third_party/node/node_modules/chalk/index.js
new file mode 100644
index 00000000000..1cc5fa89a95
--- /dev/null
+++ b/chromium/third_party/node/node_modules/chalk/index.js
@@ -0,0 +1,228 @@
+'use strict';
+const escapeStringRegexp = require('escape-string-regexp');
+const ansiStyles = require('ansi-styles');
+const stdoutColor = require('supports-color').stdout;
+
+const template = require('./templates.js');
+
+const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');
+
+// `supportsColor.level` → `ansiStyles.color[name]` mapping
+const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];
+
+// `color-convert` models to exclude from the Chalk API due to conflicts and such
+const skipModels = new Set(['gray']);
+
+const styles = Object.create(null);
+
+function applyOptions(obj, options) {
+ options = options || {};
+
+ // Detect level if not set manually
+ const scLevel = stdoutColor ? stdoutColor.level : 0;
+ obj.level = options.level === undefined ? scLevel : options.level;
+ obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0;
+}
+
+function Chalk(options) {
+ // We check for this.template here since calling `chalk.constructor()`
+ // by itself will have a `this` of a previously constructed chalk object
+ if (!this || !(this instanceof Chalk) || this.template) {
+ const chalk = {};
+ applyOptions(chalk, options);
+
+ chalk.template = function () {
+ const args = [].slice.call(arguments);
+ return chalkTag.apply(null, [chalk.template].concat(args));
+ };
+
+ Object.setPrototypeOf(chalk, Chalk.prototype);
+ Object.setPrototypeOf(chalk.template, chalk);
+
+ chalk.template.constructor = Chalk;
+
+ return chalk.template;
+ }
+
+ applyOptions(this, options);
+}
+
+// Use bright blue on Windows as the normal blue color is illegible
+if (isSimpleWindowsTerm) {
+ ansiStyles.blue.open = '\u001B[94m';
+}
+
+for (const key of Object.keys(ansiStyles)) {
+ ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
+
+ styles[key] = {
+ get() {
+ const codes = ansiStyles[key];
+ return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);
+ }
+ };
+}
+
+styles.visible = {
+ get() {
+ return build.call(this, this._styles || [], true, 'visible');
+ }
+};
+
+ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g');
+for (const model of Object.keys(ansiStyles.color.ansi)) {
+ if (skipModels.has(model)) {
+ continue;
+ }
+
+ styles[model] = {
+ get() {
+ const level = this.level;
+ return function () {
+ const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments);
+ const codes = {
+ open,
+ close: ansiStyles.color.close,
+ closeRe: ansiStyles.color.closeRe
+ };
+ return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
+ };
+ }
+ };
+}
+
+ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g');
+for (const model of Object.keys(ansiStyles.bgColor.ansi)) {
+ if (skipModels.has(model)) {
+ continue;
+ }
+
+ const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
+ styles[bgModel] = {
+ get() {
+ const level = this.level;
+ return function () {
+ const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments);
+ const codes = {
+ open,
+ close: ansiStyles.bgColor.close,
+ closeRe: ansiStyles.bgColor.closeRe
+ };
+ return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
+ };
+ }
+ };
+}
+
+const proto = Object.defineProperties(() => {}, styles);
+
+function build(_styles, _empty, key) {
+ const builder = function () {
+ return applyStyle.apply(builder, arguments);
+ };
+
+ builder._styles = _styles;
+ builder._empty = _empty;
+
+ const self = this;
+
+ Object.defineProperty(builder, 'level', {
+ enumerable: true,
+ get() {
+ return self.level;
+ },
+ set(level) {
+ self.level = level;
+ }
+ });
+
+ Object.defineProperty(builder, 'enabled', {
+ enumerable: true,
+ get() {
+ return self.enabled;
+ },
+ set(enabled) {
+ self.enabled = enabled;
+ }
+ });
+
+ // See below for fix regarding invisible grey/dim combination on Windows
+ builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey';
+
+ // `__proto__` is used because we must return a function, but there is
+ // no way to create a function with a different prototype
+ builder.__proto__ = proto; // eslint-disable-line no-proto
+
+ return builder;
+}
+
+function applyStyle() {
+ // Support varags, but simply cast to string in case there's only one arg
+ const args = arguments;
+ const argsLen = args.length;
+ let str = String(arguments[0]);
+
+ if (argsLen === 0) {
+ return '';
+ }
+
+ if (argsLen > 1) {
+ // Don't slice `arguments`, it prevents V8 optimizations
+ for (let a = 1; a < argsLen; a++) {
+ str += ' ' + args[a];
+ }
+ }
+
+ if (!this.enabled || this.level <= 0 || !str) {
+ return this._empty ? '' : str;
+ }
+
+ // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,
+ // see https://github.com/chalk/chalk/issues/58
+ // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.
+ const originalDim = ansiStyles.dim.open;
+ if (isSimpleWindowsTerm && this.hasGrey) {
+ ansiStyles.dim.open = '';
+ }
+
+ for (const code of this._styles.slice().reverse()) {
+ // Replace any instances already present with a re-opening code
+ // otherwise only the part of the string until said closing code
+ // will be colored, and the rest will simply be 'plain'.
+ str = code.open + str.replace(code.closeRe, code.open) + code.close;
+
+ // Close the styling before a linebreak and reopen
+ // after next line to fix a bleed issue on macOS
+ // https://github.com/chalk/chalk/pull/92
+ str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`);
+ }
+
+ // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue
+ ansiStyles.dim.open = originalDim;
+
+ return str;
+}
+
+function chalkTag(chalk, strings) {
+ if (!Array.isArray(strings)) {
+ // If chalk() was called by itself or with a string,
+ // return the string itself as a string.
+ return [].slice.call(arguments, 1).join(' ');
+ }
+
+ const args = [].slice.call(arguments, 2);
+ const parts = [strings.raw[0]];
+
+ for (let i = 1; i < strings.length; i++) {
+ parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&'));
+ parts.push(String(strings.raw[i]));
+ }
+
+ return template(chalk, parts.join(''));
+}
+
+Object.defineProperties(Chalk.prototype, styles);
+
+module.exports = Chalk(); // eslint-disable-line new-cap
+module.exports.supportsColor = stdoutColor;
+module.exports.default = module.exports; // For TypeScript
diff --git a/chromium/third_party/node/node_modules/chalk/index.js.flow b/chromium/third_party/node/node_modules/chalk/index.js.flow
new file mode 100644
index 00000000000..622caaa2e80
--- /dev/null
+++ b/chromium/third_party/node/node_modules/chalk/index.js.flow
@@ -0,0 +1,93 @@
+// @flow strict
+
+type TemplateStringsArray = $ReadOnlyArray<string>;
+
+export type Level = $Values<{
+ None: 0,
+ Basic: 1,
+ Ansi256: 2,
+ TrueColor: 3
+}>;
+
+export type ChalkOptions = {|
+ enabled?: boolean,
+ level?: Level
+|};
+
+export type ColorSupport = {|
+ level: Level,
+ hasBasic: boolean,
+ has256: boolean,
+ has16m: boolean
+|};
+
+export interface Chalk {
+ (...text: string[]): string,
+ (text: TemplateStringsArray, ...placeholders: string[]): string,
+ constructor(options?: ChalkOptions): Chalk,
+ enabled: boolean,
+ level: Level,
+ rgb(r: number, g: number, b: number): Chalk,
+ hsl(h: number, s: number, l: number): Chalk,
+ hsv(h: number, s: number, v: number): Chalk,
+ hwb(h: number, w: number, b: number): Chalk,
+ bgHex(color: string): Chalk,
+ bgKeyword(color: string): Chalk,
+ bgRgb(r: number, g: number, b: number): Chalk,
+ bgHsl(h: number, s: number, l: number): Chalk,
+ bgHsv(h: number, s: number, v: number): Chalk,
+ bgHwb(h: number, w: number, b: number): Chalk,
+ hex(color: string): Chalk,
+ keyword(color: string): Chalk,
+
+ +reset: Chalk,
+ +bold: Chalk,
+ +dim: Chalk,
+ +italic: Chalk,
+ +underline: Chalk,
+ +inverse: Chalk,
+ +hidden: Chalk,
+ +strikethrough: Chalk,
+
+ +visible: Chalk,
+
+ +black: Chalk,
+ +red: Chalk,
+ +green: Chalk,
+ +yellow: Chalk,
+ +blue: Chalk,
+ +magenta: Chalk,
+ +cyan: Chalk,
+ +white: Chalk,
+ +gray: Chalk,
+ +grey: Chalk,
+ +blackBright: Chalk,
+ +redBright: Chalk,
+ +greenBright: Chalk,
+ +yellowBright: Chalk,
+ +blueBright: Chalk,
+ +magentaBright: Chalk,
+ +cyanBright: Chalk,
+ +whiteBright: Chalk,
+
+ +bgBlack: Chalk,
+ +bgRed: Chalk,
+ +bgGreen: Chalk,
+ +bgYellow: Chalk,
+ +bgBlue: Chalk,
+ +bgMagenta: Chalk,
+ +bgCyan: Chalk,
+ +bgWhite: Chalk,
+ +bgBlackBright: Chalk,
+ +bgRedBright: Chalk,
+ +bgGreenBright: Chalk,
+ +bgYellowBright: Chalk,
+ +bgBlueBright: Chalk,
+ +bgMagentaBright: Chalk,
+ +bgCyanBright: Chalk,
+ +bgWhiteBrigh: Chalk,
+
+ supportsColor: ColorSupport
+};
+
+declare module.exports: Chalk;
diff --git a/chromium/third_party/node/node_modules/chalk/license b/chromium/third_party/node/node_modules/chalk/license
new file mode 100644
index 00000000000..e7af2f77107
--- /dev/null
+++ b/chromium/third_party/node/node_modules/chalk/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/chalk/package.json b/chromium/third_party/node/node_modules/chalk/package.json
new file mode 100644
index 00000000000..bc324685a76
--- /dev/null
+++ b/chromium/third_party/node/node_modules/chalk/package.json
@@ -0,0 +1,71 @@
+{
+ "name": "chalk",
+ "version": "2.4.2",
+ "description": "Terminal string styling done right",
+ "license": "MIT",
+ "repository": "chalk/chalk",
+ "engines": {
+ "node": ">=4"
+ },
+ "scripts": {
+ "test": "xo && tsc --project types && flow --max-warnings=0 && nyc ava",
+ "bench": "matcha benchmark.js",
+ "coveralls": "nyc report --reporter=text-lcov | coveralls"
+ },
+ "files": [
+ "index.js",
+ "templates.js",
+ "types/index.d.ts",
+ "index.js.flow"
+ ],
+ "keywords": [
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "str",
+ "ansi",
+ "style",
+ "styles",
+ "tty",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "devDependencies": {
+ "ava": "*",
+ "coveralls": "^3.0.0",
+ "execa": "^0.9.0",
+ "flow-bin": "^0.68.0",
+ "import-fresh": "^2.0.0",
+ "matcha": "^0.7.0",
+ "nyc": "^11.0.2",
+ "resolve-from": "^4.0.0",
+ "typescript": "^2.5.3",
+ "xo": "*"
+ },
+ "types": "types/index.d.ts",
+ "xo": {
+ "envs": [
+ "node",
+ "mocha"
+ ],
+ "ignores": [
+ "test/_flow.js"
+ ]
+ }
+}
diff --git a/chromium/third_party/node/node_modules/chalk/templates.js b/chromium/third_party/node/node_modules/chalk/templates.js
new file mode 100644
index 00000000000..dbdf9b22112
--- /dev/null
+++ b/chromium/third_party/node/node_modules/chalk/templates.js
@@ -0,0 +1,128 @@
+'use strict';
+const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
+const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
+const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
+const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi;
+
+const ESCAPES = new Map([
+ ['n', '\n'],
+ ['r', '\r'],
+ ['t', '\t'],
+ ['b', '\b'],
+ ['f', '\f'],
+ ['v', '\v'],
+ ['0', '\0'],
+ ['\\', '\\'],
+ ['e', '\u001B'],
+ ['a', '\u0007']
+]);
+
+function unescape(c) {
+ if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
+ return String.fromCharCode(parseInt(c.slice(1), 16));
+ }
+
+ return ESCAPES.get(c) || c;
+}
+
+function parseArguments(name, args) {
+ const results = [];
+ const chunks = args.trim().split(/\s*,\s*/g);
+ let matches;
+
+ for (const chunk of chunks) {
+ if (!isNaN(chunk)) {
+ results.push(Number(chunk));
+ } else if ((matches = chunk.match(STRING_REGEX))) {
+ results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr));
+ } else {
+ throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
+ }
+ }
+
+ return results;
+}
+
+function parseStyle(style) {
+ STYLE_REGEX.lastIndex = 0;
+
+ const results = [];
+ let matches;
+
+ while ((matches = STYLE_REGEX.exec(style)) !== null) {
+ const name = matches[1];
+
+ if (matches[2]) {
+ const args = parseArguments(name, matches[2]);
+ results.push([name].concat(args));
+ } else {
+ results.push([name]);
+ }
+ }
+
+ return results;
+}
+
+function buildStyle(chalk, styles) {
+ const enabled = {};
+
+ for (const layer of styles) {
+ for (const style of layer.styles) {
+ enabled[style[0]] = layer.inverse ? null : style.slice(1);
+ }
+ }
+
+ let current = chalk;
+ for (const styleName of Object.keys(enabled)) {
+ if (Array.isArray(enabled[styleName])) {
+ if (!(styleName in current)) {
+ throw new Error(`Unknown Chalk style: ${styleName}`);
+ }
+
+ if (enabled[styleName].length > 0) {
+ current = current[styleName].apply(current, enabled[styleName]);
+ } else {
+ current = current[styleName];
+ }
+ }
+ }
+
+ return current;
+}
+
+module.exports = (chalk, tmp) => {
+ const styles = [];
+ const chunks = [];
+ let chunk = [];
+
+ // eslint-disable-next-line max-params
+ tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => {
+ if (escapeChar) {
+ chunk.push(unescape(escapeChar));
+ } else if (style) {
+ const str = chunk.join('');
+ chunk = [];
+ chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str));
+ styles.push({inverse, styles: parseStyle(style)});
+ } else if (close) {
+ if (styles.length === 0) {
+ throw new Error('Found extraneous } in Chalk template literal');
+ }
+
+ chunks.push(buildStyle(chalk, styles)(chunk.join('')));
+ chunk = [];
+ styles.pop();
+ } else {
+ chunk.push(chr);
+ }
+ });
+
+ chunks.push(chunk.join(''));
+
+ if (styles.length > 0) {
+ const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
+ throw new Error(errMsg);
+ }
+
+ return chunks.join('');
+};
diff --git a/chromium/third_party/node/node_modules/color-convert/LICENSE b/chromium/third_party/node/node_modules/color-convert/LICENSE
new file mode 100644
index 00000000000..5b4c386f926
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-convert/LICENSE
@@ -0,0 +1,21 @@
+Copyright (c) 2011-2016 Heather Arthur <fayearthur@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/chromium/third_party/node/node_modules/color-convert/conversions.js b/chromium/third_party/node/node_modules/color-convert/conversions.js
new file mode 100644
index 00000000000..32172007ec0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-convert/conversions.js
@@ -0,0 +1,868 @@
+/* MIT license */
+var cssKeywords = require('color-name');
+
+// NOTE: conversions should only return primitive values (i.e. arrays, or
+// values that give correct `typeof` results).
+// do not use box values types (i.e. Number(), String(), etc.)
+
+var reverseKeywords = {};
+for (var key in cssKeywords) {
+ if (cssKeywords.hasOwnProperty(key)) {
+ reverseKeywords[cssKeywords[key]] = key;
+ }
+}
+
+var convert = module.exports = {
+ rgb: {channels: 3, labels: 'rgb'},
+ hsl: {channels: 3, labels: 'hsl'},
+ hsv: {channels: 3, labels: 'hsv'},
+ hwb: {channels: 3, labels: 'hwb'},
+ cmyk: {channels: 4, labels: 'cmyk'},
+ xyz: {channels: 3, labels: 'xyz'},
+ lab: {channels: 3, labels: 'lab'},
+ lch: {channels: 3, labels: 'lch'},
+ hex: {channels: 1, labels: ['hex']},
+ keyword: {channels: 1, labels: ['keyword']},
+ ansi16: {channels: 1, labels: ['ansi16']},
+ ansi256: {channels: 1, labels: ['ansi256']},
+ hcg: {channels: 3, labels: ['h', 'c', 'g']},
+ apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
+ gray: {channels: 1, labels: ['gray']}
+};
+
+// hide .channels and .labels properties
+for (var model in convert) {
+ if (convert.hasOwnProperty(model)) {
+ if (!('channels' in convert[model])) {
+ throw new Error('missing channels property: ' + model);
+ }
+
+ if (!('labels' in convert[model])) {
+ throw new Error('missing channel labels property: ' + model);
+ }
+
+ if (convert[model].labels.length !== convert[model].channels) {
+ throw new Error('channel and label counts mismatch: ' + model);
+ }
+
+ var channels = convert[model].channels;
+ var labels = convert[model].labels;
+ delete convert[model].channels;
+ delete convert[model].labels;
+ Object.defineProperty(convert[model], 'channels', {value: channels});
+ Object.defineProperty(convert[model], 'labels', {value: labels});
+ }
+}
+
+convert.rgb.hsl = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var min = Math.min(r, g, b);
+ var max = Math.max(r, g, b);
+ var delta = max - min;
+ var h;
+ var s;
+ var l;
+
+ if (max === min) {
+ h = 0;
+ } else if (r === max) {
+ h = (g - b) / delta;
+ } else if (g === max) {
+ h = 2 + (b - r) / delta;
+ } else if (b === max) {
+ h = 4 + (r - g) / delta;
+ }
+
+ h = Math.min(h * 60, 360);
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ l = (min + max) / 2;
+
+ if (max === min) {
+ s = 0;
+ } else if (l <= 0.5) {
+ s = delta / (max + min);
+ } else {
+ s = delta / (2 - max - min);
+ }
+
+ return [h, s * 100, l * 100];
+};
+
+convert.rgb.hsv = function (rgb) {
+ var rdif;
+ var gdif;
+ var bdif;
+ var h;
+ var s;
+
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var v = Math.max(r, g, b);
+ var diff = v - Math.min(r, g, b);
+ var diffc = function (c) {
+ return (v - c) / 6 / diff + 1 / 2;
+ };
+
+ if (diff === 0) {
+ h = s = 0;
+ } else {
+ s = diff / v;
+ rdif = diffc(r);
+ gdif = diffc(g);
+ bdif = diffc(b);
+
+ if (r === v) {
+ h = bdif - gdif;
+ } else if (g === v) {
+ h = (1 / 3) + rdif - bdif;
+ } else if (b === v) {
+ h = (2 / 3) + gdif - rdif;
+ }
+ if (h < 0) {
+ h += 1;
+ } else if (h > 1) {
+ h -= 1;
+ }
+ }
+
+ return [
+ h * 360,
+ s * 100,
+ v * 100
+ ];
+};
+
+convert.rgb.hwb = function (rgb) {
+ var r = rgb[0];
+ var g = rgb[1];
+ var b = rgb[2];
+ var h = convert.rgb.hsl(rgb)[0];
+ var w = 1 / 255 * Math.min(r, Math.min(g, b));
+
+ b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
+
+ return [h, w * 100, b * 100];
+};
+
+convert.rgb.cmyk = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var c;
+ var m;
+ var y;
+ var k;
+
+ k = Math.min(1 - r, 1 - g, 1 - b);
+ c = (1 - r - k) / (1 - k) || 0;
+ m = (1 - g - k) / (1 - k) || 0;
+ y = (1 - b - k) / (1 - k) || 0;
+
+ return [c * 100, m * 100, y * 100, k * 100];
+};
+
+/**
+ * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
+ * */
+function comparativeDistance(x, y) {
+ return (
+ Math.pow(x[0] - y[0], 2) +
+ Math.pow(x[1] - y[1], 2) +
+ Math.pow(x[2] - y[2], 2)
+ );
+}
+
+convert.rgb.keyword = function (rgb) {
+ var reversed = reverseKeywords[rgb];
+ if (reversed) {
+ return reversed;
+ }
+
+ var currentClosestDistance = Infinity;
+ var currentClosestKeyword;
+
+ for (var keyword in cssKeywords) {
+ if (cssKeywords.hasOwnProperty(keyword)) {
+ var value = cssKeywords[keyword];
+
+ // Compute comparative distance
+ var distance = comparativeDistance(rgb, value);
+
+ // Check if its less, if so set as closest
+ if (distance < currentClosestDistance) {
+ currentClosestDistance = distance;
+ currentClosestKeyword = keyword;
+ }
+ }
+ }
+
+ return currentClosestKeyword;
+};
+
+convert.keyword.rgb = function (keyword) {
+ return cssKeywords[keyword];
+};
+
+convert.rgb.xyz = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+
+ // assume sRGB
+ r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
+ g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
+ b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
+
+ var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
+ var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
+ var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
+
+ return [x * 100, y * 100, z * 100];
+};
+
+convert.rgb.lab = function (rgb) {
+ var xyz = convert.rgb.xyz(rgb);
+ var x = xyz[0];
+ var y = xyz[1];
+ var z = xyz[2];
+ var l;
+ var a;
+ var b;
+
+ x /= 95.047;
+ y /= 100;
+ z /= 108.883;
+
+ x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+
+ l = (116 * y) - 16;
+ a = 500 * (x - y);
+ b = 200 * (y - z);
+
+ return [l, a, b];
+};
+
+convert.hsl.rgb = function (hsl) {
+ var h = hsl[0] / 360;
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var t1;
+ var t2;
+ var t3;
+ var rgb;
+ var val;
+
+ if (s === 0) {
+ val = l * 255;
+ return [val, val, val];
+ }
+
+ if (l < 0.5) {
+ t2 = l * (1 + s);
+ } else {
+ t2 = l + s - l * s;
+ }
+
+ t1 = 2 * l - t2;
+
+ rgb = [0, 0, 0];
+ for (var i = 0; i < 3; i++) {
+ t3 = h + 1 / 3 * -(i - 1);
+ if (t3 < 0) {
+ t3++;
+ }
+ if (t3 > 1) {
+ t3--;
+ }
+
+ if (6 * t3 < 1) {
+ val = t1 + (t2 - t1) * 6 * t3;
+ } else if (2 * t3 < 1) {
+ val = t2;
+ } else if (3 * t3 < 2) {
+ val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
+ } else {
+ val = t1;
+ }
+
+ rgb[i] = val * 255;
+ }
+
+ return rgb;
+};
+
+convert.hsl.hsv = function (hsl) {
+ var h = hsl[0];
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var smin = s;
+ var lmin = Math.max(l, 0.01);
+ var sv;
+ var v;
+
+ l *= 2;
+ s *= (l <= 1) ? l : 2 - l;
+ smin *= lmin <= 1 ? lmin : 2 - lmin;
+ v = (l + s) / 2;
+ sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
+
+ return [h, sv * 100, v * 100];
+};
+
+convert.hsv.rgb = function (hsv) {
+ var h = hsv[0] / 60;
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+ var hi = Math.floor(h) % 6;
+
+ var f = h - Math.floor(h);
+ var p = 255 * v * (1 - s);
+ var q = 255 * v * (1 - (s * f));
+ var t = 255 * v * (1 - (s * (1 - f)));
+ v *= 255;
+
+ switch (hi) {
+ case 0:
+ return [v, t, p];
+ case 1:
+ return [q, v, p];
+ case 2:
+ return [p, v, t];
+ case 3:
+ return [p, q, v];
+ case 4:
+ return [t, p, v];
+ case 5:
+ return [v, p, q];
+ }
+};
+
+convert.hsv.hsl = function (hsv) {
+ var h = hsv[0];
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+ var vmin = Math.max(v, 0.01);
+ var lmin;
+ var sl;
+ var l;
+
+ l = (2 - s) * v;
+ lmin = (2 - s) * vmin;
+ sl = s * vmin;
+ sl /= (lmin <= 1) ? lmin : 2 - lmin;
+ sl = sl || 0;
+ l /= 2;
+
+ return [h, sl * 100, l * 100];
+};
+
+// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
+convert.hwb.rgb = function (hwb) {
+ var h = hwb[0] / 360;
+ var wh = hwb[1] / 100;
+ var bl = hwb[2] / 100;
+ var ratio = wh + bl;
+ var i;
+ var v;
+ var f;
+ var n;
+
+ // wh + bl cant be > 1
+ if (ratio > 1) {
+ wh /= ratio;
+ bl /= ratio;
+ }
+
+ i = Math.floor(6 * h);
+ v = 1 - bl;
+ f = 6 * h - i;
+
+ if ((i & 0x01) !== 0) {
+ f = 1 - f;
+ }
+
+ n = wh + f * (v - wh); // linear interpolation
+
+ var r;
+ var g;
+ var b;
+ switch (i) {
+ default:
+ case 6:
+ case 0: r = v; g = n; b = wh; break;
+ case 1: r = n; g = v; b = wh; break;
+ case 2: r = wh; g = v; b = n; break;
+ case 3: r = wh; g = n; b = v; break;
+ case 4: r = n; g = wh; b = v; break;
+ case 5: r = v; g = wh; b = n; break;
+ }
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.cmyk.rgb = function (cmyk) {
+ var c = cmyk[0] / 100;
+ var m = cmyk[1] / 100;
+ var y = cmyk[2] / 100;
+ var k = cmyk[3] / 100;
+ var r;
+ var g;
+ var b;
+
+ r = 1 - Math.min(1, c * (1 - k) + k);
+ g = 1 - Math.min(1, m * (1 - k) + k);
+ b = 1 - Math.min(1, y * (1 - k) + k);
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.rgb = function (xyz) {
+ var x = xyz[0] / 100;
+ var y = xyz[1] / 100;
+ var z = xyz[2] / 100;
+ var r;
+ var g;
+ var b;
+
+ r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
+ g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
+ b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
+
+ // assume sRGB
+ r = r > 0.0031308
+ ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
+ : r * 12.92;
+
+ g = g > 0.0031308
+ ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
+ : g * 12.92;
+
+ b = b > 0.0031308
+ ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
+ : b * 12.92;
+
+ r = Math.min(Math.max(0, r), 1);
+ g = Math.min(Math.max(0, g), 1);
+ b = Math.min(Math.max(0, b), 1);
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.lab = function (xyz) {
+ var x = xyz[0];
+ var y = xyz[1];
+ var z = xyz[2];
+ var l;
+ var a;
+ var b;
+
+ x /= 95.047;
+ y /= 100;
+ z /= 108.883;
+
+ x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+
+ l = (116 * y) - 16;
+ a = 500 * (x - y);
+ b = 200 * (y - z);
+
+ return [l, a, b];
+};
+
+convert.lab.xyz = function (lab) {
+ var l = lab[0];
+ var a = lab[1];
+ var b = lab[2];
+ var x;
+ var y;
+ var z;
+
+ y = (l + 16) / 116;
+ x = a / 500 + y;
+ z = y - b / 200;
+
+ var y2 = Math.pow(y, 3);
+ var x2 = Math.pow(x, 3);
+ var z2 = Math.pow(z, 3);
+ y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
+ x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
+ z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
+
+ x *= 95.047;
+ y *= 100;
+ z *= 108.883;
+
+ return [x, y, z];
+};
+
+convert.lab.lch = function (lab) {
+ var l = lab[0];
+ var a = lab[1];
+ var b = lab[2];
+ var hr;
+ var h;
+ var c;
+
+ hr = Math.atan2(b, a);
+ h = hr * 360 / 2 / Math.PI;
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ c = Math.sqrt(a * a + b * b);
+
+ return [l, c, h];
+};
+
+convert.lch.lab = function (lch) {
+ var l = lch[0];
+ var c = lch[1];
+ var h = lch[2];
+ var a;
+ var b;
+ var hr;
+
+ hr = h / 360 * 2 * Math.PI;
+ a = c * Math.cos(hr);
+ b = c * Math.sin(hr);
+
+ return [l, a, b];
+};
+
+convert.rgb.ansi16 = function (args) {
+ var r = args[0];
+ var g = args[1];
+ var b = args[2];
+ var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
+
+ value = Math.round(value / 50);
+
+ if (value === 0) {
+ return 30;
+ }
+
+ var ansi = 30
+ + ((Math.round(b / 255) << 2)
+ | (Math.round(g / 255) << 1)
+ | Math.round(r / 255));
+
+ if (value === 2) {
+ ansi += 60;
+ }
+
+ return ansi;
+};
+
+convert.hsv.ansi16 = function (args) {
+ // optimization here; we already know the value and don't need to get
+ // it converted for us.
+ return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
+};
+
+convert.rgb.ansi256 = function (args) {
+ var r = args[0];
+ var g = args[1];
+ var b = args[2];
+
+ // we use the extended greyscale palette here, with the exception of
+ // black and white. normal palette only has 4 greyscale shades.
+ if (r === g && g === b) {
+ if (r < 8) {
+ return 16;
+ }
+
+ if (r > 248) {
+ return 231;
+ }
+
+ return Math.round(((r - 8) / 247) * 24) + 232;
+ }
+
+ var ansi = 16
+ + (36 * Math.round(r / 255 * 5))
+ + (6 * Math.round(g / 255 * 5))
+ + Math.round(b / 255 * 5);
+
+ return ansi;
+};
+
+convert.ansi16.rgb = function (args) {
+ var color = args % 10;
+
+ // handle greyscale
+ if (color === 0 || color === 7) {
+ if (args > 50) {
+ color += 3.5;
+ }
+
+ color = color / 10.5 * 255;
+
+ return [color, color, color];
+ }
+
+ var mult = (~~(args > 50) + 1) * 0.5;
+ var r = ((color & 1) * mult) * 255;
+ var g = (((color >> 1) & 1) * mult) * 255;
+ var b = (((color >> 2) & 1) * mult) * 255;
+
+ return [r, g, b];
+};
+
+convert.ansi256.rgb = function (args) {
+ // handle greyscale
+ if (args >= 232) {
+ var c = (args - 232) * 10 + 8;
+ return [c, c, c];
+ }
+
+ args -= 16;
+
+ var rem;
+ var r = Math.floor(args / 36) / 5 * 255;
+ var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
+ var b = (rem % 6) / 5 * 255;
+
+ return [r, g, b];
+};
+
+convert.rgb.hex = function (args) {
+ var integer = ((Math.round(args[0]) & 0xFF) << 16)
+ + ((Math.round(args[1]) & 0xFF) << 8)
+ + (Math.round(args[2]) & 0xFF);
+
+ var string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+convert.hex.rgb = function (args) {
+ var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
+ if (!match) {
+ return [0, 0, 0];
+ }
+
+ var colorString = match[0];
+
+ if (match[0].length === 3) {
+ colorString = colorString.split('').map(function (char) {
+ return char + char;
+ }).join('');
+ }
+
+ var integer = parseInt(colorString, 16);
+ var r = (integer >> 16) & 0xFF;
+ var g = (integer >> 8) & 0xFF;
+ var b = integer & 0xFF;
+
+ return [r, g, b];
+};
+
+convert.rgb.hcg = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var max = Math.max(Math.max(r, g), b);
+ var min = Math.min(Math.min(r, g), b);
+ var chroma = (max - min);
+ var grayscale;
+ var hue;
+
+ if (chroma < 1) {
+ grayscale = min / (1 - chroma);
+ } else {
+ grayscale = 0;
+ }
+
+ if (chroma <= 0) {
+ hue = 0;
+ } else
+ if (max === r) {
+ hue = ((g - b) / chroma) % 6;
+ } else
+ if (max === g) {
+ hue = 2 + (b - r) / chroma;
+ } else {
+ hue = 4 + (r - g) / chroma + 4;
+ }
+
+ hue /= 6;
+ hue %= 1;
+
+ return [hue * 360, chroma * 100, grayscale * 100];
+};
+
+convert.hsl.hcg = function (hsl) {
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var c = 1;
+ var f = 0;
+
+ if (l < 0.5) {
+ c = 2.0 * s * l;
+ } else {
+ c = 2.0 * s * (1.0 - l);
+ }
+
+ if (c < 1.0) {
+ f = (l - 0.5 * c) / (1.0 - c);
+ }
+
+ return [hsl[0], c * 100, f * 100];
+};
+
+convert.hsv.hcg = function (hsv) {
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+
+ var c = s * v;
+ var f = 0;
+
+ if (c < 1.0) {
+ f = (v - c) / (1 - c);
+ }
+
+ return [hsv[0], c * 100, f * 100];
+};
+
+convert.hcg.rgb = function (hcg) {
+ var h = hcg[0] / 360;
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+
+ if (c === 0.0) {
+ return [g * 255, g * 255, g * 255];
+ }
+
+ var pure = [0, 0, 0];
+ var hi = (h % 1) * 6;
+ var v = hi % 1;
+ var w = 1 - v;
+ var mg = 0;
+
+ switch (Math.floor(hi)) {
+ case 0:
+ pure[0] = 1; pure[1] = v; pure[2] = 0; break;
+ case 1:
+ pure[0] = w; pure[1] = 1; pure[2] = 0; break;
+ case 2:
+ pure[0] = 0; pure[1] = 1; pure[2] = v; break;
+ case 3:
+ pure[0] = 0; pure[1] = w; pure[2] = 1; break;
+ case 4:
+ pure[0] = v; pure[1] = 0; pure[2] = 1; break;
+ default:
+ pure[0] = 1; pure[1] = 0; pure[2] = w;
+ }
+
+ mg = (1.0 - c) * g;
+
+ return [
+ (c * pure[0] + mg) * 255,
+ (c * pure[1] + mg) * 255,
+ (c * pure[2] + mg) * 255
+ ];
+};
+
+convert.hcg.hsv = function (hcg) {
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+
+ var v = c + g * (1.0 - c);
+ var f = 0;
+
+ if (v > 0.0) {
+ f = c / v;
+ }
+
+ return [hcg[0], f * 100, v * 100];
+};
+
+convert.hcg.hsl = function (hcg) {
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+
+ var l = g * (1.0 - c) + 0.5 * c;
+ var s = 0;
+
+ if (l > 0.0 && l < 0.5) {
+ s = c / (2 * l);
+ } else
+ if (l >= 0.5 && l < 1.0) {
+ s = c / (2 * (1 - l));
+ }
+
+ return [hcg[0], s * 100, l * 100];
+};
+
+convert.hcg.hwb = function (hcg) {
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+ var v = c + g * (1.0 - c);
+ return [hcg[0], (v - c) * 100, (1 - v) * 100];
+};
+
+convert.hwb.hcg = function (hwb) {
+ var w = hwb[1] / 100;
+ var b = hwb[2] / 100;
+ var v = 1 - b;
+ var c = v - w;
+ var g = 0;
+
+ if (c < 1) {
+ g = (v - c) / (1 - c);
+ }
+
+ return [hwb[0], c * 100, g * 100];
+};
+
+convert.apple.rgb = function (apple) {
+ return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
+};
+
+convert.rgb.apple = function (rgb) {
+ return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
+};
+
+convert.gray.rgb = function (args) {
+ return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
+};
+
+convert.gray.hsl = convert.gray.hsv = function (args) {
+ return [0, 0, args[0]];
+};
+
+convert.gray.hwb = function (gray) {
+ return [0, 100, gray[0]];
+};
+
+convert.gray.cmyk = function (gray) {
+ return [0, 0, 0, gray[0]];
+};
+
+convert.gray.lab = function (gray) {
+ return [gray[0], 0, 0];
+};
+
+convert.gray.hex = function (gray) {
+ var val = Math.round(gray[0] / 100 * 255) & 0xFF;
+ var integer = (val << 16) + (val << 8) + val;
+
+ var string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+convert.rgb.gray = function (rgb) {
+ var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
+ return [val / 255 * 100];
+};
diff --git a/chromium/third_party/node/node_modules/color-convert/index.js b/chromium/third_party/node/node_modules/color-convert/index.js
new file mode 100644
index 00000000000..e65b5d775da
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-convert/index.js
@@ -0,0 +1,78 @@
+var conversions = require('./conversions');
+var route = require('./route');
+
+var convert = {};
+
+var models = Object.keys(conversions);
+
+function wrapRaw(fn) {
+ var wrappedFn = function (args) {
+ if (args === undefined || args === null) {
+ return args;
+ }
+
+ if (arguments.length > 1) {
+ args = Array.prototype.slice.call(arguments);
+ }
+
+ return fn(args);
+ };
+
+ // preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+function wrapRounded(fn) {
+ var wrappedFn = function (args) {
+ if (args === undefined || args === null) {
+ return args;
+ }
+
+ if (arguments.length > 1) {
+ args = Array.prototype.slice.call(arguments);
+ }
+
+ var result = fn(args);
+
+ // we're assuming the result is an array here.
+ // see notice in conversions.js; don't use box types
+ // in conversion functions.
+ if (typeof result === 'object') {
+ for (var len = result.length, i = 0; i < len; i++) {
+ result[i] = Math.round(result[i]);
+ }
+ }
+
+ return result;
+ };
+
+ // preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+models.forEach(function (fromModel) {
+ convert[fromModel] = {};
+
+ Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
+ Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
+
+ var routes = route(fromModel);
+ var routeModels = Object.keys(routes);
+
+ routeModels.forEach(function (toModel) {
+ var fn = routes[toModel];
+
+ convert[fromModel][toModel] = wrapRounded(fn);
+ convert[fromModel][toModel].raw = wrapRaw(fn);
+ });
+});
+
+module.exports = convert;
diff --git a/chromium/third_party/node/node_modules/color-convert/package.json b/chromium/third_party/node/node_modules/color-convert/package.json
new file mode 100644
index 00000000000..dfbc471407f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-convert/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "color-convert",
+ "description": "Plain color conversion functions",
+ "version": "1.9.3",
+ "author": "Heather Arthur <fayearthur@gmail.com>",
+ "license": "MIT",
+ "repository": "Qix-/color-convert",
+ "scripts": {
+ "pretest": "xo",
+ "test": "node test/basic.js"
+ },
+ "keywords": [
+ "color",
+ "colour",
+ "convert",
+ "converter",
+ "conversion",
+ "rgb",
+ "hsl",
+ "hsv",
+ "hwb",
+ "cmyk",
+ "ansi",
+ "ansi16"
+ ],
+ "files": [
+ "index.js",
+ "conversions.js",
+ "css-keywords.js",
+ "route.js"
+ ],
+ "xo": {
+ "rules": {
+ "default-case": 0,
+ "no-inline-comments": 0,
+ "operator-linebreak": 0
+ }
+ },
+ "devDependencies": {
+ "chalk": "1.1.1",
+ "xo": "0.11.2"
+ },
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/color-convert/route.js b/chromium/third_party/node/node_modules/color-convert/route.js
new file mode 100644
index 00000000000..0a1fdea689e
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-convert/route.js
@@ -0,0 +1,97 @@
+var conversions = require('./conversions');
+
+/*
+ this function routes a model to all other models.
+
+ all functions that are routed have a property `.conversion` attached
+ to the returned synthetic function. This property is an array
+ of strings, each with the steps in between the 'from' and 'to'
+ color models (inclusive).
+
+ conversions that are not possible simply are not included.
+*/
+
+function buildGraph() {
+ var graph = {};
+ // https://jsperf.com/object-keys-vs-for-in-with-closure/3
+ var models = Object.keys(conversions);
+
+ for (var len = models.length, i = 0; i < len; i++) {
+ graph[models[i]] = {
+ // http://jsperf.com/1-vs-infinity
+ // micro-opt, but this is simple.
+ distance: -1,
+ parent: null
+ };
+ }
+
+ return graph;
+}
+
+// https://en.wikipedia.org/wiki/Breadth-first_search
+function deriveBFS(fromModel) {
+ var graph = buildGraph();
+ var queue = [fromModel]; // unshift -> queue -> pop
+
+ graph[fromModel].distance = 0;
+
+ while (queue.length) {
+ var current = queue.pop();
+ var adjacents = Object.keys(conversions[current]);
+
+ for (var len = adjacents.length, i = 0; i < len; i++) {
+ var adjacent = adjacents[i];
+ var node = graph[adjacent];
+
+ if (node.distance === -1) {
+ node.distance = graph[current].distance + 1;
+ node.parent = current;
+ queue.unshift(adjacent);
+ }
+ }
+ }
+
+ return graph;
+}
+
+function link(from, to) {
+ return function (args) {
+ return to(from(args));
+ };
+}
+
+function wrapConversion(toModel, graph) {
+ var path = [graph[toModel].parent, toModel];
+ var fn = conversions[graph[toModel].parent][toModel];
+
+ var cur = graph[toModel].parent;
+ while (graph[cur].parent) {
+ path.unshift(graph[cur].parent);
+ fn = link(conversions[graph[cur].parent][cur], fn);
+ cur = graph[cur].parent;
+ }
+
+ fn.conversion = path;
+ return fn;
+}
+
+module.exports = function (fromModel) {
+ var graph = deriveBFS(fromModel);
+ var conversion = {};
+
+ var models = Object.keys(graph);
+ for (var len = models.length, i = 0; i < len; i++) {
+ var toModel = models[i];
+ var node = graph[toModel];
+
+ if (node.parent === null) {
+ // no possible conversion, or this node is the source model.
+ continue;
+ }
+
+ conversion[toModel] = wrapConversion(toModel, graph);
+ }
+
+ return conversion;
+};
+
diff --git a/chromium/third_party/node/node_modules/color-name/LICENSE b/chromium/third_party/node/node_modules/color-name/LICENSE
new file mode 100644
index 00000000000..4d9802a89e2
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-name/LICENSE
@@ -0,0 +1,8 @@
+The MIT License (MIT)
+Copyright (c) 2015 Dmitry Ivanov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/color-name/index.js b/chromium/third_party/node/node_modules/color-name/index.js
new file mode 100644
index 00000000000..e42aa68a542
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-name/index.js
@@ -0,0 +1,152 @@
+'use strict'
+
+module.exports = {
+ "aliceblue": [240, 248, 255],
+ "antiquewhite": [250, 235, 215],
+ "aqua": [0, 255, 255],
+ "aquamarine": [127, 255, 212],
+ "azure": [240, 255, 255],
+ "beige": [245, 245, 220],
+ "bisque": [255, 228, 196],
+ "black": [0, 0, 0],
+ "blanchedalmond": [255, 235, 205],
+ "blue": [0, 0, 255],
+ "blueviolet": [138, 43, 226],
+ "brown": [165, 42, 42],
+ "burlywood": [222, 184, 135],
+ "cadetblue": [95, 158, 160],
+ "chartreuse": [127, 255, 0],
+ "chocolate": [210, 105, 30],
+ "coral": [255, 127, 80],
+ "cornflowerblue": [100, 149, 237],
+ "cornsilk": [255, 248, 220],
+ "crimson": [220, 20, 60],
+ "cyan": [0, 255, 255],
+ "darkblue": [0, 0, 139],
+ "darkcyan": [0, 139, 139],
+ "darkgoldenrod": [184, 134, 11],
+ "darkgray": [169, 169, 169],
+ "darkgreen": [0, 100, 0],
+ "darkgrey": [169, 169, 169],
+ "darkkhaki": [189, 183, 107],
+ "darkmagenta": [139, 0, 139],
+ "darkolivegreen": [85, 107, 47],
+ "darkorange": [255, 140, 0],
+ "darkorchid": [153, 50, 204],
+ "darkred": [139, 0, 0],
+ "darksalmon": [233, 150, 122],
+ "darkseagreen": [143, 188, 143],
+ "darkslateblue": [72, 61, 139],
+ "darkslategray": [47, 79, 79],
+ "darkslategrey": [47, 79, 79],
+ "darkturquoise": [0, 206, 209],
+ "darkviolet": [148, 0, 211],
+ "deeppink": [255, 20, 147],
+ "deepskyblue": [0, 191, 255],
+ "dimgray": [105, 105, 105],
+ "dimgrey": [105, 105, 105],
+ "dodgerblue": [30, 144, 255],
+ "firebrick": [178, 34, 34],
+ "floralwhite": [255, 250, 240],
+ "forestgreen": [34, 139, 34],
+ "fuchsia": [255, 0, 255],
+ "gainsboro": [220, 220, 220],
+ "ghostwhite": [248, 248, 255],
+ "gold": [255, 215, 0],
+ "goldenrod": [218, 165, 32],
+ "gray": [128, 128, 128],
+ "green": [0, 128, 0],
+ "greenyellow": [173, 255, 47],
+ "grey": [128, 128, 128],
+ "honeydew": [240, 255, 240],
+ "hotpink": [255, 105, 180],
+ "indianred": [205, 92, 92],
+ "indigo": [75, 0, 130],
+ "ivory": [255, 255, 240],
+ "khaki": [240, 230, 140],
+ "lavender": [230, 230, 250],
+ "lavenderblush": [255, 240, 245],
+ "lawngreen": [124, 252, 0],
+ "lemonchiffon": [255, 250, 205],
+ "lightblue": [173, 216, 230],
+ "lightcoral": [240, 128, 128],
+ "lightcyan": [224, 255, 255],
+ "lightgoldenrodyellow": [250, 250, 210],
+ "lightgray": [211, 211, 211],
+ "lightgreen": [144, 238, 144],
+ "lightgrey": [211, 211, 211],
+ "lightpink": [255, 182, 193],
+ "lightsalmon": [255, 160, 122],
+ "lightseagreen": [32, 178, 170],
+ "lightskyblue": [135, 206, 250],
+ "lightslategray": [119, 136, 153],
+ "lightslategrey": [119, 136, 153],
+ "lightsteelblue": [176, 196, 222],
+ "lightyellow": [255, 255, 224],
+ "lime": [0, 255, 0],
+ "limegreen": [50, 205, 50],
+ "linen": [250, 240, 230],
+ "magenta": [255, 0, 255],
+ "maroon": [128, 0, 0],
+ "mediumaquamarine": [102, 205, 170],
+ "mediumblue": [0, 0, 205],
+ "mediumorchid": [186, 85, 211],
+ "mediumpurple": [147, 112, 219],
+ "mediumseagreen": [60, 179, 113],
+ "mediumslateblue": [123, 104, 238],
+ "mediumspringgreen": [0, 250, 154],
+ "mediumturquoise": [72, 209, 204],
+ "mediumvioletred": [199, 21, 133],
+ "midnightblue": [25, 25, 112],
+ "mintcream": [245, 255, 250],
+ "mistyrose": [255, 228, 225],
+ "moccasin": [255, 228, 181],
+ "navajowhite": [255, 222, 173],
+ "navy": [0, 0, 128],
+ "oldlace": [253, 245, 230],
+ "olive": [128, 128, 0],
+ "olivedrab": [107, 142, 35],
+ "orange": [255, 165, 0],
+ "orangered": [255, 69, 0],
+ "orchid": [218, 112, 214],
+ "palegoldenrod": [238, 232, 170],
+ "palegreen": [152, 251, 152],
+ "paleturquoise": [175, 238, 238],
+ "palevioletred": [219, 112, 147],
+ "papayawhip": [255, 239, 213],
+ "peachpuff": [255, 218, 185],
+ "peru": [205, 133, 63],
+ "pink": [255, 192, 203],
+ "plum": [221, 160, 221],
+ "powderblue": [176, 224, 230],
+ "purple": [128, 0, 128],
+ "rebeccapurple": [102, 51, 153],
+ "red": [255, 0, 0],
+ "rosybrown": [188, 143, 143],
+ "royalblue": [65, 105, 225],
+ "saddlebrown": [139, 69, 19],
+ "salmon": [250, 128, 114],
+ "sandybrown": [244, 164, 96],
+ "seagreen": [46, 139, 87],
+ "seashell": [255, 245, 238],
+ "sienna": [160, 82, 45],
+ "silver": [192, 192, 192],
+ "skyblue": [135, 206, 235],
+ "slateblue": [106, 90, 205],
+ "slategray": [112, 128, 144],
+ "slategrey": [112, 128, 144],
+ "snow": [255, 250, 250],
+ "springgreen": [0, 255, 127],
+ "steelblue": [70, 130, 180],
+ "tan": [210, 180, 140],
+ "teal": [0, 128, 128],
+ "thistle": [216, 191, 216],
+ "tomato": [255, 99, 71],
+ "turquoise": [64, 224, 208],
+ "violet": [238, 130, 238],
+ "wheat": [245, 222, 179],
+ "white": [255, 255, 255],
+ "whitesmoke": [245, 245, 245],
+ "yellow": [255, 255, 0],
+ "yellowgreen": [154, 205, 50]
+};
diff --git a/chromium/third_party/node/node_modules/color-name/package.json b/chromium/third_party/node/node_modules/color-name/package.json
new file mode 100644
index 00000000000..d061123ef02
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-name/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "color-name",
+ "version": "1.1.3",
+ "description": "A list of color names and its values",
+ "main": "index.js",
+ "scripts": {
+ "test": "node test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:dfcreative/color-name.git"
+ },
+ "keywords": [
+ "color-name",
+ "color",
+ "color-keyword",
+ "keyword"
+ ],
+ "author": "DY <dfcreative@gmail.com>",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/dfcreative/color-name/issues"
+ },
+ "homepage": "https://github.com/dfcreative/color-name"
+}
diff --git a/chromium/third_party/node/node_modules/color-name/test.js b/chromium/third_party/node/node_modules/color-name/test.js
new file mode 100644
index 00000000000..7a08746215e
--- /dev/null
+++ b/chromium/third_party/node/node_modules/color-name/test.js
@@ -0,0 +1,7 @@
+'use strict'
+
+var names = require('./');
+var assert = require('assert');
+
+assert.deepEqual(names.red, [255,0,0]);
+assert.deepEqual(names.aliceblue, [240,248,255]);
diff --git a/chromium/third_party/node/node_modules/commander/LICENSE b/chromium/third_party/node/node_modules/commander/LICENSE
new file mode 100644
index 00000000000..10f997ab104
--- /dev/null
+++ b/chromium/third_party/node/node_modules/commander/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/commander/index.js b/chromium/third_party/node/node_modules/commander/index.js
new file mode 100644
index 00000000000..ec1d61d5872
--- /dev/null
+++ b/chromium/third_party/node/node_modules/commander/index.js
@@ -0,0 +1,1224 @@
+/**
+ * Module dependencies.
+ */
+
+var EventEmitter = require('events').EventEmitter;
+var spawn = require('child_process').spawn;
+var path = require('path');
+var dirname = path.dirname;
+var basename = path.basename;
+var fs = require('fs');
+
+/**
+ * Inherit `Command` from `EventEmitter.prototype`.
+ */
+
+require('util').inherits(Command, EventEmitter);
+
+/**
+ * Expose the root command.
+ */
+
+exports = module.exports = new Command();
+
+/**
+ * Expose `Command`.
+ */
+
+exports.Command = Command;
+
+/**
+ * Expose `Option`.
+ */
+
+exports.Option = Option;
+
+/**
+ * Initialize a new `Option` with the given `flags` and `description`.
+ *
+ * @param {String} flags
+ * @param {String} description
+ * @api public
+ */
+
+function Option(flags, description) {
+ this.flags = flags;
+ this.required = flags.indexOf('<') >= 0;
+ this.optional = flags.indexOf('[') >= 0;
+ this.bool = flags.indexOf('-no-') === -1;
+ flags = flags.split(/[ ,|]+/);
+ if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();
+ this.long = flags.shift();
+ this.description = description || '';
+}
+
+/**
+ * Return option name.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Option.prototype.name = function() {
+ return this.long
+ .replace('--', '')
+ .replace('no-', '');
+};
+
+/**
+ * Return option name, in a camelcase format that can be used
+ * as a object attribute key.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Option.prototype.attributeName = function() {
+ return camelcase(this.name());
+};
+
+/**
+ * Check if `arg` matches the short or long flag.
+ *
+ * @param {String} arg
+ * @return {Boolean}
+ * @api private
+ */
+
+Option.prototype.is = function(arg) {
+ return this.short === arg || this.long === arg;
+};
+
+/**
+ * Initialize a new `Command`.
+ *
+ * @param {String} name
+ * @api public
+ */
+
+function Command(name) {
+ this.commands = [];
+ this.options = [];
+ this._execs = {};
+ this._allowUnknownOption = false;
+ this._args = [];
+ this._name = name || '';
+}
+
+/**
+ * Add command `name`.
+ *
+ * The `.action()` callback is invoked when the
+ * command `name` is specified via __ARGV__,
+ * and the remaining arguments are applied to the
+ * function for access.
+ *
+ * When the `name` is "*" an un-matched command
+ * will be passed as the first arg, followed by
+ * the rest of __ARGV__ remaining.
+ *
+ * Examples:
+ *
+ * program
+ * .version('0.0.1')
+ * .option('-C, --chdir <path>', 'change the working directory')
+ * .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
+ * .option('-T, --no-tests', 'ignore test hook')
+ *
+ * program
+ * .command('setup')
+ * .description('run remote setup commands')
+ * .action(function() {
+ * console.log('setup');
+ * });
+ *
+ * program
+ * .command('exec <cmd>')
+ * .description('run the given remote command')
+ * .action(function(cmd) {
+ * console.log('exec "%s"', cmd);
+ * });
+ *
+ * program
+ * .command('teardown <dir> [otherDirs...]')
+ * .description('run teardown commands')
+ * .action(function(dir, otherDirs) {
+ * console.log('dir "%s"', dir);
+ * if (otherDirs) {
+ * otherDirs.forEach(function (oDir) {
+ * console.log('dir "%s"', oDir);
+ * });
+ * }
+ * });
+ *
+ * program
+ * .command('*')
+ * .description('deploy the given env')
+ * .action(function(env) {
+ * console.log('deploying "%s"', env);
+ * });
+ *
+ * program.parse(process.argv);
+ *
+ * @param {String} name
+ * @param {String} [desc] for git-style sub-commands
+ * @return {Command} the new command
+ * @api public
+ */
+
+Command.prototype.command = function(name, desc, opts) {
+ if (typeof desc === 'object' && desc !== null) {
+ opts = desc;
+ desc = null;
+ }
+ opts = opts || {};
+ var args = name.split(/ +/);
+ var cmd = new Command(args.shift());
+
+ if (desc) {
+ cmd.description(desc);
+ this.executables = true;
+ this._execs[cmd._name] = true;
+ if (opts.isDefault) this.defaultExecutable = cmd._name;
+ }
+ cmd._noHelp = !!opts.noHelp;
+ this.commands.push(cmd);
+ cmd.parseExpectedArgs(args);
+ cmd.parent = this;
+
+ if (desc) return this;
+ return cmd;
+};
+
+/**
+ * Define argument syntax for the top-level command.
+ *
+ * @api public
+ */
+
+Command.prototype.arguments = function(desc) {
+ return this.parseExpectedArgs(desc.split(/ +/));
+};
+
+/**
+ * Add an implicit `help [cmd]` subcommand
+ * which invokes `--help` for the given command.
+ *
+ * @api private
+ */
+
+Command.prototype.addImplicitHelpCommand = function() {
+ this.command('help [cmd]', 'display help for [cmd]');
+};
+
+/**
+ * Parse expected `args`.
+ *
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+ *
+ * @param {Array} args
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.parseExpectedArgs = function(args) {
+ if (!args.length) return;
+ var self = this;
+ args.forEach(function(arg) {
+ var argDetails = {
+ required: false,
+ name: '',
+ variadic: false
+ };
+
+ switch (arg[0]) {
+ case '<':
+ argDetails.required = true;
+ argDetails.name = arg.slice(1, -1);
+ break;
+ case '[':
+ argDetails.name = arg.slice(1, -1);
+ break;
+ }
+
+ if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {
+ argDetails.variadic = true;
+ argDetails.name = argDetails.name.slice(0, -3);
+ }
+ if (argDetails.name) {
+ self._args.push(argDetails);
+ }
+ });
+ return this;
+};
+
+/**
+ * Register callback `fn` for the command.
+ *
+ * Examples:
+ *
+ * program
+ * .command('help')
+ * .description('display verbose help')
+ * .action(function() {
+ * // output help here
+ * });
+ *
+ * @param {Function} fn
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.action = function(fn) {
+ var self = this;
+ var listener = function(args, unknown) {
+ // Parse any so-far unknown options
+ args = args || [];
+ unknown = unknown || [];
+
+ var parsed = self.parseOptions(unknown);
+
+ // Output help if necessary
+ outputHelpIfNecessary(self, parsed.unknown);
+
+ // If there are still any unknown options, then we simply
+ // die, unless someone asked for help, in which case we give it
+ // to them, and then we die.
+ if (parsed.unknown.length > 0) {
+ self.unknownOption(parsed.unknown[0]);
+ }
+
+ // Leftover arguments need to be pushed back. Fixes issue #56
+ if (parsed.args.length) args = parsed.args.concat(args);
+
+ self._args.forEach(function(arg, i) {
+ if (arg.required && args[i] == null) {
+ self.missingArgument(arg.name);
+ } else if (arg.variadic) {
+ if (i !== self._args.length - 1) {
+ self.variadicArgNotLast(arg.name);
+ }
+
+ args[i] = args.splice(i);
+ }
+ });
+
+ // Always append ourselves to the end of the arguments,
+ // to make sure we match the number of arguments the user
+ // expects
+ if (self._args.length) {
+ args[self._args.length] = self;
+ } else {
+ args.push(self);
+ }
+
+ fn.apply(self, args);
+ };
+ var parent = this.parent || this;
+ var name = parent === this ? '*' : this._name;
+ parent.on('command:' + name, listener);
+ if (this._alias) parent.on('command:' + this._alias, listener);
+ return this;
+};
+
+/**
+ * Define option with `flags`, `description` and optional
+ * coercion `fn`.
+ *
+ * The `flags` string should contain both the short and long flags,
+ * separated by comma, a pipe or space. The following are all valid
+ * all will output this way when `--help` is used.
+ *
+ * "-p, --pepper"
+ * "-p|--pepper"
+ * "-p --pepper"
+ *
+ * Examples:
+ *
+ * // simple boolean defaulting to false
+ * program.option('-p, --pepper', 'add pepper');
+ *
+ * --pepper
+ * program.pepper
+ * // => Boolean
+ *
+ * // simple boolean defaulting to true
+ * program.option('-C, --no-cheese', 'remove cheese');
+ *
+ * program.cheese
+ * // => true
+ *
+ * --no-cheese
+ * program.cheese
+ * // => false
+ *
+ * // required argument
+ * program.option('-C, --chdir <path>', 'change the working directory');
+ *
+ * --chdir /tmp
+ * program.chdir
+ * // => "/tmp"
+ *
+ * // optional argument
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
+ *
+ * @param {String} flags
+ * @param {String} description
+ * @param {Function|*} [fn] or default
+ * @param {*} [defaultValue]
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.option = function(flags, description, fn, defaultValue) {
+ var self = this,
+ option = new Option(flags, description),
+ oname = option.name(),
+ name = option.attributeName();
+
+ // default as 3rd arg
+ if (typeof fn !== 'function') {
+ if (fn instanceof RegExp) {
+ var regex = fn;
+ fn = function(val, def) {
+ var m = regex.exec(val);
+ return m ? m[0] : def;
+ };
+ } else {
+ defaultValue = fn;
+ fn = null;
+ }
+ }
+
+ // preassign default value only for --no-*, [optional], or <required>
+ if (!option.bool || option.optional || option.required) {
+ // when --no-* we make sure default is true
+ if (!option.bool) defaultValue = true;
+ // preassign only if we have a default
+ if (defaultValue !== undefined) {
+ self[name] = defaultValue;
+ option.defaultValue = defaultValue;
+ }
+ }
+
+ // register the option
+ this.options.push(option);
+
+ // when it's passed assign the value
+ // and conditionally invoke the callback
+ this.on('option:' + oname, function(val) {
+ // coercion
+ if (val !== null && fn) {
+ val = fn(val, self[name] === undefined ? defaultValue : self[name]);
+ }
+
+ // unassigned or bool
+ if (typeof self[name] === 'boolean' || typeof self[name] === 'undefined') {
+ // if no value, bool true, and we have a default, then use it!
+ if (val == null) {
+ self[name] = option.bool
+ ? defaultValue || true
+ : false;
+ } else {
+ self[name] = val;
+ }
+ } else if (val !== null) {
+ // reassign
+ self[name] = val;
+ }
+ });
+
+ return this;
+};
+
+/**
+ * Allow unknown options on the command line.
+ *
+ * @param {Boolean} arg if `true` or omitted, no error will be thrown
+ * for unknown options.
+ * @api public
+ */
+Command.prototype.allowUnknownOption = function(arg) {
+ this._allowUnknownOption = arguments.length === 0 || arg;
+ return this;
+};
+
+/**
+ * Parse `argv`, settings options and invoking commands when defined.
+ *
+ * @param {Array} argv
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.parse = function(argv) {
+ // implicit help
+ if (this.executables) this.addImplicitHelpCommand();
+
+ // store raw args
+ this.rawArgs = argv;
+
+ // guess name
+ this._name = this._name || basename(argv[1], '.js');
+
+ // github-style sub-commands with no sub-command
+ if (this.executables && argv.length < 3 && !this.defaultExecutable) {
+ // this user needs help
+ argv.push('--help');
+ }
+
+ // process argv
+ var parsed = this.parseOptions(this.normalize(argv.slice(2)));
+ var args = this.args = parsed.args;
+
+ var result = this.parseArgs(this.args, parsed.unknown);
+
+ // executable sub-commands
+ var name = result.args[0];
+
+ var aliasCommand = null;
+ // check alias of sub commands
+ if (name) {
+ aliasCommand = this.commands.filter(function(command) {
+ return command.alias() === name;
+ })[0];
+ }
+
+ if (this._execs[name] === true) {
+ return this.executeSubCommand(argv, args, parsed.unknown);
+ } else if (aliasCommand) {
+ // is alias of a subCommand
+ args[0] = aliasCommand._name;
+ return this.executeSubCommand(argv, args, parsed.unknown);
+ } else if (this.defaultExecutable) {
+ // use the default subcommand
+ args.unshift(this.defaultExecutable);
+ return this.executeSubCommand(argv, args, parsed.unknown);
+ }
+
+ return result;
+};
+
+/**
+ * Execute a sub-command executable.
+ *
+ * @param {Array} argv
+ * @param {Array} args
+ * @param {Array} unknown
+ * @api private
+ */
+
+Command.prototype.executeSubCommand = function(argv, args, unknown) {
+ args = args.concat(unknown);
+
+ if (!args.length) this.help();
+ if (args[0] === 'help' && args.length === 1) this.help();
+
+ // <cmd> --help
+ if (args[0] === 'help') {
+ args[0] = args[1];
+ args[1] = '--help';
+ }
+
+ // executable
+ var f = argv[1];
+ // name of the subcommand, link `pm-install`
+ var bin = basename(f, path.extname(f)) + '-' + args[0];
+
+ // In case of globally installed, get the base dir where executable
+ // subcommand file should be located at
+ var baseDir;
+
+ var resolvedLink = fs.realpathSync(f);
+
+ baseDir = dirname(resolvedLink);
+
+ // prefer local `./<bin>` to bin in the $PATH
+ var localBin = path.join(baseDir, bin);
+
+ // whether bin file is a js script with explicit `.js` or `.ts` extension
+ var isExplicitJS = false;
+ if (exists(localBin + '.js')) {
+ bin = localBin + '.js';
+ isExplicitJS = true;
+ } else if (exists(localBin + '.ts')) {
+ bin = localBin + '.ts';
+ isExplicitJS = true;
+ } else if (exists(localBin)) {
+ bin = localBin;
+ }
+
+ args = args.slice(1);
+
+ var proc;
+ if (process.platform !== 'win32') {
+ if (isExplicitJS) {
+ args.unshift(bin);
+ // add executable arguments to spawn
+ args = (process.execArgv || []).concat(args);
+
+ proc = spawn(process.argv[0], args, { stdio: 'inherit', customFds: [0, 1, 2] });
+ } else {
+ proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] });
+ }
+ } else {
+ args.unshift(bin);
+ proc = spawn(process.execPath, args, { stdio: 'inherit' });
+ }
+
+ var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];
+ signals.forEach(function(signal) {
+ process.on(signal, function() {
+ if (proc.killed === false && proc.exitCode === null) {
+ proc.kill(signal);
+ }
+ });
+ });
+ proc.on('close', process.exit.bind(process));
+ proc.on('error', function(err) {
+ if (err.code === 'ENOENT') {
+ console.error('error: %s(1) does not exist, try --help', bin);
+ } else if (err.code === 'EACCES') {
+ console.error('error: %s(1) not executable. try chmod or run with root', bin);
+ }
+ process.exit(1);
+ });
+
+ // Store the reference to the child process
+ this.runningCommand = proc;
+};
+
+/**
+ * Normalize `args`, splitting joined short flags. For example
+ * the arg "-abc" is equivalent to "-a -b -c".
+ * This also normalizes equal sign and splits "--abc=def" into "--abc def".
+ *
+ * @param {Array} args
+ * @return {Array}
+ * @api private
+ */
+
+Command.prototype.normalize = function(args) {
+ var ret = [],
+ arg,
+ lastOpt,
+ index;
+
+ for (var i = 0, len = args.length; i < len; ++i) {
+ arg = args[i];
+ if (i > 0) {
+ lastOpt = this.optionFor(args[i - 1]);
+ }
+
+ if (arg === '--') {
+ // Honor option terminator
+ ret = ret.concat(args.slice(i));
+ break;
+ } else if (lastOpt && lastOpt.required) {
+ ret.push(arg);
+ } else if (arg.length > 1 && arg[0] === '-' && arg[1] !== '-') {
+ arg.slice(1).split('').forEach(function(c) {
+ ret.push('-' + c);
+ });
+ } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) {
+ ret.push(arg.slice(0, index), arg.slice(index + 1));
+ } else {
+ ret.push(arg);
+ }
+ }
+
+ return ret;
+};
+
+/**
+ * Parse command `args`.
+ *
+ * When listener(s) are available those
+ * callbacks are invoked, otherwise the "*"
+ * event is emitted and those actions are invoked.
+ *
+ * @param {Array} args
+ * @return {Command} for chaining
+ * @api private
+ */
+
+Command.prototype.parseArgs = function(args, unknown) {
+ var name;
+
+ if (args.length) {
+ name = args[0];
+ if (this.listeners('command:' + name).length) {
+ this.emit('command:' + args.shift(), args, unknown);
+ } else {
+ this.emit('command:*', args);
+ }
+ } else {
+ outputHelpIfNecessary(this, unknown);
+
+ // If there were no args and we have unknown options,
+ // then they are extraneous and we need to error.
+ if (unknown.length > 0) {
+ this.unknownOption(unknown[0]);
+ }
+ if (this.commands.length === 0 &&
+ this._args.filter(function(a) { return a.required; }).length === 0) {
+ this.emit('command:*');
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Return an option matching `arg` if any.
+ *
+ * @param {String} arg
+ * @return {Option}
+ * @api private
+ */
+
+Command.prototype.optionFor = function(arg) {
+ for (var i = 0, len = this.options.length; i < len; ++i) {
+ if (this.options[i].is(arg)) {
+ return this.options[i];
+ }
+ }
+};
+
+/**
+ * Parse options from `argv` returning `argv`
+ * void of these options.
+ *
+ * @param {Array} argv
+ * @return {Array}
+ * @api public
+ */
+
+Command.prototype.parseOptions = function(argv) {
+ var args = [],
+ len = argv.length,
+ literal,
+ option,
+ arg;
+
+ var unknownOptions = [];
+
+ // parse options
+ for (var i = 0; i < len; ++i) {
+ arg = argv[i];
+
+ // literal args after --
+ if (literal) {
+ args.push(arg);
+ continue;
+ }
+
+ if (arg === '--') {
+ literal = true;
+ continue;
+ }
+
+ // find matching Option
+ option = this.optionFor(arg);
+
+ // option is defined
+ if (option) {
+ // requires arg
+ if (option.required) {
+ arg = argv[++i];
+ if (arg == null) return this.optionMissingArgument(option);
+ this.emit('option:' + option.name(), arg);
+ // optional arg
+ } else if (option.optional) {
+ arg = argv[i + 1];
+ if (arg == null || (arg[0] === '-' && arg !== '-')) {
+ arg = null;
+ } else {
+ ++i;
+ }
+ this.emit('option:' + option.name(), arg);
+ // bool
+ } else {
+ this.emit('option:' + option.name());
+ }
+ continue;
+ }
+
+ // looks like an option
+ if (arg.length > 1 && arg[0] === '-') {
+ unknownOptions.push(arg);
+
+ // If the next argument looks like it might be
+ // an argument for this option, we pass it on.
+ // If it isn't, then it'll simply be ignored
+ if ((i + 1) < argv.length && argv[i + 1][0] !== '-') {
+ unknownOptions.push(argv[++i]);
+ }
+ continue;
+ }
+
+ // arg
+ args.push(arg);
+ }
+
+ return { args: args, unknown: unknownOptions };
+};
+
+/**
+ * Return an object containing options as key-value pairs
+ *
+ * @return {Object}
+ * @api public
+ */
+Command.prototype.opts = function() {
+ var result = {},
+ len = this.options.length;
+
+ for (var i = 0; i < len; i++) {
+ var key = this.options[i].attributeName();
+ result[key] = key === this._versionOptionName ? this._version : this[key];
+ }
+ return result;
+};
+
+/**
+ * Argument `name` is missing.
+ *
+ * @param {String} name
+ * @api private
+ */
+
+Command.prototype.missingArgument = function(name) {
+ console.error("error: missing required argument `%s'", name);
+ process.exit(1);
+};
+
+/**
+ * `Option` is missing an argument, but received `flag` or nothing.
+ *
+ * @param {String} option
+ * @param {String} flag
+ * @api private
+ */
+
+Command.prototype.optionMissingArgument = function(option, flag) {
+ if (flag) {
+ console.error("error: option `%s' argument missing, got `%s'", option.flags, flag);
+ } else {
+ console.error("error: option `%s' argument missing", option.flags);
+ }
+ process.exit(1);
+};
+
+/**
+ * Unknown option `flag`.
+ *
+ * @param {String} flag
+ * @api private
+ */
+
+Command.prototype.unknownOption = function(flag) {
+ if (this._allowUnknownOption) return;
+ console.error("error: unknown option `%s'", flag);
+ process.exit(1);
+};
+
+/**
+ * Variadic argument with `name` is not the last argument as required.
+ *
+ * @param {String} name
+ * @api private
+ */
+
+Command.prototype.variadicArgNotLast = function(name) {
+ console.error("error: variadic arguments must be last `%s'", name);
+ process.exit(1);
+};
+
+/**
+ * Set the program version to `str`.
+ *
+ * This method auto-registers the "-V, --version" flag
+ * which will print the version number when passed.
+ *
+ * @param {String} str
+ * @param {String} [flags]
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.version = function(str, flags) {
+ if (arguments.length === 0) return this._version;
+ this._version = str;
+ flags = flags || '-V, --version';
+ var versionOption = new Option(flags, 'output the version number');
+ this._versionOptionName = versionOption.long.substr(2) || 'version';
+ this.options.push(versionOption);
+ this.on('option:' + this._versionOptionName, function() {
+ process.stdout.write(str + '\n');
+ process.exit(0);
+ });
+ return this;
+};
+
+/**
+ * Set the description to `str`.
+ *
+ * @param {String} str
+ * @param {Object} argsDescription
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.description = function(str, argsDescription) {
+ if (arguments.length === 0) return this._description;
+ this._description = str;
+ this._argsDescription = argsDescription;
+ return this;
+};
+
+/**
+ * Set an alias for the command
+ *
+ * @param {String} alias
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.alias = function(alias) {
+ var command = this;
+ if (this.commands.length !== 0) {
+ command = this.commands[this.commands.length - 1];
+ }
+
+ if (arguments.length === 0) return command._alias;
+
+ if (alias === command._name) throw new Error('Command alias can\'t be the same as its name');
+
+ command._alias = alias;
+ return this;
+};
+
+/**
+ * Set / get the command usage `str`.
+ *
+ * @param {String} str
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.usage = function(str) {
+ var args = this._args.map(function(arg) {
+ return humanReadableArgName(arg);
+ });
+
+ var usage = '[options]' +
+ (this.commands.length ? ' [command]' : '') +
+ (this._args.length ? ' ' + args.join(' ') : '');
+
+ if (arguments.length === 0) return this._usage || usage;
+ this._usage = str;
+
+ return this;
+};
+
+/**
+ * Get or set the name of the command
+ *
+ * @param {String} str
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.name = function(str) {
+ if (arguments.length === 0) return this._name;
+ this._name = str;
+ return this;
+};
+
+/**
+ * Return prepared commands.
+ *
+ * @return {Array}
+ * @api private
+ */
+
+Command.prototype.prepareCommands = function() {
+ return this.commands.filter(function(cmd) {
+ return !cmd._noHelp;
+ }).map(function(cmd) {
+ var args = cmd._args.map(function(arg) {
+ return humanReadableArgName(arg);
+ }).join(' ');
+
+ return [
+ cmd._name +
+ (cmd._alias ? '|' + cmd._alias : '') +
+ (cmd.options.length ? ' [options]' : '') +
+ (args ? ' ' + args : ''),
+ cmd._description
+ ];
+ });
+};
+
+/**
+ * Return the largest command length.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.largestCommandLength = function() {
+ var commands = this.prepareCommands();
+ return commands.reduce(function(max, command) {
+ return Math.max(max, command[0].length);
+ }, 0);
+};
+
+/**
+ * Return the largest option length.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.largestOptionLength = function() {
+ var options = [].slice.call(this.options);
+ options.push({
+ flags: '-h, --help'
+ });
+ return options.reduce(function(max, option) {
+ return Math.max(max, option.flags.length);
+ }, 0);
+};
+
+/**
+ * Return the largest arg length.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.largestArgLength = function() {
+ return this._args.reduce(function(max, arg) {
+ return Math.max(max, arg.name.length);
+ }, 0);
+};
+
+/**
+ * Return the pad width.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.padWidth = function() {
+ var width = this.largestOptionLength();
+ if (this._argsDescription && this._args.length) {
+ if (this.largestArgLength() > width) {
+ width = this.largestArgLength();
+ }
+ }
+
+ if (this.commands && this.commands.length) {
+ if (this.largestCommandLength() > width) {
+ width = this.largestCommandLength();
+ }
+ }
+
+ return width;
+};
+
+/**
+ * Return help for options.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Command.prototype.optionHelp = function() {
+ var width = this.padWidth();
+
+ // Append the help information
+ return this.options.map(function(option) {
+ return pad(option.flags, width) + ' ' + option.description +
+ ((option.bool && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : '');
+ }).concat([pad('-h, --help', width) + ' ' + 'output usage information'])
+ .join('\n');
+};
+
+/**
+ * Return command help documentation.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Command.prototype.commandHelp = function() {
+ if (!this.commands.length) return '';
+
+ var commands = this.prepareCommands();
+ var width = this.padWidth();
+
+ return [
+ 'Commands:',
+ commands.map(function(cmd) {
+ var desc = cmd[1] ? ' ' + cmd[1] : '';
+ return (desc ? pad(cmd[0], width) : cmd[0]) + desc;
+ }).join('\n').replace(/^/gm, ' '),
+ ''
+ ].join('\n');
+};
+
+/**
+ * Return program help documentation.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Command.prototype.helpInformation = function() {
+ var desc = [];
+ if (this._description) {
+ desc = [
+ this._description,
+ ''
+ ];
+
+ var argsDescription = this._argsDescription;
+ if (argsDescription && this._args.length) {
+ var width = this.padWidth();
+ desc.push('Arguments:');
+ desc.push('');
+ this._args.forEach(function(arg) {
+ desc.push(' ' + pad(arg.name, width) + ' ' + argsDescription[arg.name]);
+ });
+ desc.push('');
+ }
+ }
+
+ var cmdName = this._name;
+ if (this._alias) {
+ cmdName = cmdName + '|' + this._alias;
+ }
+ var usage = [
+ 'Usage: ' + cmdName + ' ' + this.usage(),
+ ''
+ ];
+
+ var cmds = [];
+ var commandHelp = this.commandHelp();
+ if (commandHelp) cmds = [commandHelp];
+
+ var options = [
+ 'Options:',
+ '' + this.optionHelp().replace(/^/gm, ' '),
+ ''
+ ];
+
+ return usage
+ .concat(desc)
+ .concat(options)
+ .concat(cmds)
+ .join('\n');
+};
+
+/**
+ * Output help information for this command
+ *
+ * @api public
+ */
+
+Command.prototype.outputHelp = function(cb) {
+ if (!cb) {
+ cb = function(passthru) {
+ return passthru;
+ };
+ }
+ process.stdout.write(cb(this.helpInformation()));
+ this.emit('--help');
+};
+
+/**
+ * Output help information and exit.
+ *
+ * @api public
+ */
+
+Command.prototype.help = function(cb) {
+ this.outputHelp(cb);
+ process.exit();
+};
+
+/**
+ * Camel-case the given `flag`
+ *
+ * @param {String} flag
+ * @return {String}
+ * @api private
+ */
+
+function camelcase(flag) {
+ return flag.split('-').reduce(function(str, word) {
+ return str + word[0].toUpperCase() + word.slice(1);
+ });
+}
+
+/**
+ * Pad `str` to `width`.
+ *
+ * @param {String} str
+ * @param {Number} width
+ * @return {String}
+ * @api private
+ */
+
+function pad(str, width) {
+ var len = Math.max(0, width - str.length);
+ return str + Array(len + 1).join(' ');
+}
+
+/**
+ * Output help information if necessary
+ *
+ * @param {Command} command to output help for
+ * @param {Array} array of options to search for -h or --help
+ * @api private
+ */
+
+function outputHelpIfNecessary(cmd, options) {
+ options = options || [];
+ for (var i = 0; i < options.length; i++) {
+ if (options[i] === '--help' || options[i] === '-h') {
+ cmd.outputHelp();
+ process.exit(0);
+ }
+ }
+}
+
+/**
+ * Takes an argument an returns its human readable equivalent for help usage.
+ *
+ * @param {Object} arg
+ * @return {String}
+ * @api private
+ */
+
+function humanReadableArgName(arg) {
+ var nameOutput = arg.name + (arg.variadic === true ? '...' : '');
+
+ return arg.required
+ ? '<' + nameOutput + '>'
+ : '[' + nameOutput + ']';
+}
+
+// for versions before node v0.8 when there weren't `fs.existsSync`
+function exists(file) {
+ try {
+ if (fs.statSync(file).isFile()) {
+ return true;
+ }
+ } catch (e) {
+ return false;
+ }
+}
diff --git a/chromium/third_party/node/node_modules/commander/package.json b/chromium/third_party/node/node_modules/commander/package.json
new file mode 100644
index 00000000000..0023c5cdf5f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/commander/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "commander",
+ "version": "2.20.3",
+ "description": "the complete solution for node.js command-line programs",
+ "keywords": [
+ "commander",
+ "command",
+ "option",
+ "parser"
+ ],
+ "author": "TJ Holowaychuk <tj@vision-media.ca>",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tj/commander.js.git"
+ },
+ "scripts": {
+ "lint": "eslint index.js",
+ "test": "node test/run.js && npm run test-typings",
+ "test-typings": "tsc -p tsconfig.json"
+ },
+ "main": "index",
+ "files": [
+ "index.js",
+ "typings/index.d.ts"
+ ],
+ "dependencies": {},
+ "devDependencies": {
+ "@types/node": "^12.7.8",
+ "eslint": "^6.4.0",
+ "should": "^13.2.3",
+ "sinon": "^7.5.0",
+ "standard": "^14.3.1",
+ "ts-node": "^8.4.1",
+ "typescript": "^3.6.3"
+ },
+ "typings": "typings/index.d.ts"
+}
diff --git a/chromium/third_party/node/node_modules/concat-map/LICENSE b/chromium/third_party/node/node_modules/concat-map/LICENSE
new file mode 100644
index 00000000000..ee27ba4b441
--- /dev/null
+++ b/chromium/third_party/node/node_modules/concat-map/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/concat-map/README.markdown b/chromium/third_party/node/node_modules/concat-map/README.markdown
new file mode 100644
index 00000000000..408f70a1be4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/concat-map/README.markdown
@@ -0,0 +1,62 @@
+concat-map
+==========
+
+Concatenative mapdashery.
+
+[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map)
+
+[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map)
+
+example
+=======
+
+``` js
+var concatMap = require('concat-map');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
+```
+
+***
+
+```
+[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]
+```
+
+methods
+=======
+
+``` js
+var concatMap = require('concat-map')
+```
+
+concatMap(xs, fn)
+-----------------
+
+Return an array of concatenated elements by calling `fn(x, i)` for each element
+`x` and each index `i` in the array `xs`.
+
+When `fn(x, i)` returns an array, its result will be concatenated with the
+result array. If `fn(x, i)` returns anything else, that value will be pushed
+onto the end of the result array.
+
+install
+=======
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install concat-map
+```
+
+license
+=======
+
+MIT
+
+notes
+=====
+
+This module was written while sitting high above the ground in a tree.
diff --git a/chromium/third_party/node/node_modules/concat-map/index.js b/chromium/third_party/node/node_modules/concat-map/index.js
new file mode 100644
index 00000000000..b29a7812e50
--- /dev/null
+++ b/chromium/third_party/node/node_modules/concat-map/index.js
@@ -0,0 +1,13 @@
+module.exports = function (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ var x = fn(xs[i], i);
+ if (isArray(x)) res.push.apply(res, x);
+ else res.push(x);
+ }
+ return res;
+};
+
+var isArray = Array.isArray || function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]';
+};
diff --git a/chromium/third_party/node/node_modules/concat-map/package.json b/chromium/third_party/node/node_modules/concat-map/package.json
new file mode 100644
index 00000000000..d3640e6b027
--- /dev/null
+++ b/chromium/third_party/node/node_modules/concat-map/package.json
@@ -0,0 +1,43 @@
+{
+ "name" : "concat-map",
+ "description" : "concatenative mapdashery",
+ "version" : "0.0.1",
+ "repository" : {
+ "type" : "git",
+ "url" : "git://github.com/substack/node-concat-map.git"
+ },
+ "main" : "index.js",
+ "keywords" : [
+ "concat",
+ "concatMap",
+ "map",
+ "functional",
+ "higher-order"
+ ],
+ "directories" : {
+ "example" : "example",
+ "test" : "test"
+ },
+ "scripts" : {
+ "test" : "tape test/*.js"
+ },
+ "devDependencies" : {
+ "tape" : "~2.4.0"
+ },
+ "license" : "MIT",
+ "author" : {
+ "name" : "James Halliday",
+ "email" : "mail@substack.net",
+ "url" : "http://substack.net"
+ },
+ "testling" : {
+ "files" : "test/*.js",
+ "browsers" : {
+ "ie" : [ 6, 7, 8, 9 ],
+ "ff" : [ 3.5, 10, 15.0 ],
+ "chrome" : [ 10, 22 ],
+ "safari" : [ 5.1 ],
+ "opera" : [ 12 ]
+ }
+ }
+}
diff --git a/chromium/third_party/node/node_modules/debug/LICENSE b/chromium/third_party/node/node_modules/debug/LICENSE
new file mode 100644
index 00000000000..1a9820e262b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/debug/LICENSE
@@ -0,0 +1,20 @@
+(The MIT License)
+
+Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>
+Copyright (c) 2018-2021 Josh Junon
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the 'Software'), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/chromium/third_party/node/node_modules/debug/package.json b/chromium/third_party/node/node_modules/debug/package.json
new file mode 100644
index 00000000000..cb7efa8eec3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/debug/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "debug",
+ "version": "4.3.3",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/debug-js/debug.git"
+ },
+ "description": "Lightweight debugging utility for Node.js and the browser",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "files": [
+ "src",
+ "LICENSE",
+ "README.md"
+ ],
+ "author": "Josh Junon <josh.junon@protonmail.com>",
+ "contributors": [
+ "TJ Holowaychuk <tj@vision-media.ca>",
+ "Nathan Rajlich <nathan@tootallnate.net> (http://n8.io)",
+ "Andrew Rhyne <rhyneandrew@gmail.com>"
+ ],
+ "license": "MIT",
+ "scripts": {
+ "lint": "xo",
+ "test": "npm run test:node && npm run test:browser && npm run lint",
+ "test:node": "istanbul cover _mocha -- test.js",
+ "test:browser": "karma start --single-run",
+ "test:coverage": "cat ./coverage/lcov.info | coveralls"
+ },
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "devDependencies": {
+ "brfs": "^2.0.1",
+ "browserify": "^16.2.3",
+ "coveralls": "^3.0.2",
+ "istanbul": "^0.4.5",
+ "karma": "^3.1.4",
+ "karma-browserify": "^6.0.0",
+ "karma-chrome-launcher": "^2.2.0",
+ "karma-mocha": "^1.3.0",
+ "mocha": "^5.2.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "xo": "^0.23.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ },
+ "main": "./src/index.js",
+ "browser": "./src/browser.js",
+ "engines": {
+ "node": ">=6.0"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/debug/src/browser.js b/chromium/third_party/node/node_modules/debug/src/browser.js
new file mode 100644
index 00000000000..cd0fc35d1ee
--- /dev/null
+++ b/chromium/third_party/node/node_modules/debug/src/browser.js
@@ -0,0 +1,269 @@
+/* eslint-env browser */
+
+/**
+ * This is the web browser implementation of `debug()`.
+ */
+
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = localstorage();
+exports.destroy = (() => {
+ let warned = false;
+
+ return () => {
+ if (!warned) {
+ warned = true;
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+ };
+})();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+ '#0000CC',
+ '#0000FF',
+ '#0033CC',
+ '#0033FF',
+ '#0066CC',
+ '#0066FF',
+ '#0099CC',
+ '#0099FF',
+ '#00CC00',
+ '#00CC33',
+ '#00CC66',
+ '#00CC99',
+ '#00CCCC',
+ '#00CCFF',
+ '#3300CC',
+ '#3300FF',
+ '#3333CC',
+ '#3333FF',
+ '#3366CC',
+ '#3366FF',
+ '#3399CC',
+ '#3399FF',
+ '#33CC00',
+ '#33CC33',
+ '#33CC66',
+ '#33CC99',
+ '#33CCCC',
+ '#33CCFF',
+ '#6600CC',
+ '#6600FF',
+ '#6633CC',
+ '#6633FF',
+ '#66CC00',
+ '#66CC33',
+ '#9900CC',
+ '#9900FF',
+ '#9933CC',
+ '#9933FF',
+ '#99CC00',
+ '#99CC33',
+ '#CC0000',
+ '#CC0033',
+ '#CC0066',
+ '#CC0099',
+ '#CC00CC',
+ '#CC00FF',
+ '#CC3300',
+ '#CC3333',
+ '#CC3366',
+ '#CC3399',
+ '#CC33CC',
+ '#CC33FF',
+ '#CC6600',
+ '#CC6633',
+ '#CC9900',
+ '#CC9933',
+ '#CCCC00',
+ '#CCCC33',
+ '#FF0000',
+ '#FF0033',
+ '#FF0066',
+ '#FF0099',
+ '#FF00CC',
+ '#FF00FF',
+ '#FF3300',
+ '#FF3333',
+ '#FF3366',
+ '#FF3399',
+ '#FF33CC',
+ '#FF33FF',
+ '#FF6600',
+ '#FF6633',
+ '#FF9900',
+ '#FF9933',
+ '#FFCC00',
+ '#FFCC33'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+// eslint-disable-next-line complexity
+function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+ return true;
+ }
+
+ // Internet Explorer and Edge do not support colors.
+ if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+ return false;
+ }
+
+ // Is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+ return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+ // Is firebug? http://stackoverflow.com/a/398120/376773
+ (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+ // Is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ // Double check webkit in userAgent just in case we are in a worker
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ args[0] = (this.useColors ? '%c' : '') +
+ this.namespace +
+ (this.useColors ? ' %c' : ' ') +
+ args[0] +
+ (this.useColors ? '%c ' : ' ') +
+ '+' + module.exports.humanize(this.diff);
+
+ if (!this.useColors) {
+ return;
+ }
+
+ const c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit');
+
+ // The final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+ let index = 0;
+ let lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, match => {
+ if (match === '%%') {
+ return;
+ }
+ index++;
+ if (match === '%c') {
+ // We only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+
+ args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.debug()` when available.
+ * No-op when `console.debug` is not a "function".
+ * If `console.debug` is not available, falls back
+ * to `console.log`.
+ *
+ * @api public
+ */
+exports.log = console.debug || console.log || (() => {});
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+ try {
+ if (namespaces) {
+ exports.storage.setItem('debug', namespaces);
+ } else {
+ exports.storage.removeItem('debug');
+ }
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+function load() {
+ let r;
+ try {
+ r = exports.storage.getItem('debug');
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+
+ // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+ if (!r && typeof process !== 'undefined' && 'env' in process) {
+ r = process.env.DEBUG;
+ }
+
+ return r;
+}
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+ try {
+ // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+ // The Browser also has localStorage in the global context.
+ return localStorage;
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+formatters.j = function (v) {
+ try {
+ return JSON.stringify(v);
+ } catch (error) {
+ return '[UnexpectedJSONParseError]: ' + error.message;
+ }
+};
diff --git a/chromium/third_party/node/node_modules/debug/src/common.js b/chromium/third_party/node/node_modules/debug/src/common.js
new file mode 100644
index 00000000000..6d571d2844d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/debug/src/common.js
@@ -0,0 +1,274 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ */
+
+function setup(env) {
+ createDebug.debug = createDebug;
+ createDebug.default = createDebug;
+ createDebug.coerce = coerce;
+ createDebug.disable = disable;
+ createDebug.enable = enable;
+ createDebug.enabled = enabled;
+ createDebug.humanize = require('ms');
+ createDebug.destroy = destroy;
+
+ Object.keys(env).forEach(key => {
+ createDebug[key] = env[key];
+ });
+
+ /**
+ * The currently active debug mode names, and names to skip.
+ */
+
+ createDebug.names = [];
+ createDebug.skips = [];
+
+ /**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+ createDebug.formatters = {};
+
+ /**
+ * Selects a color for a debug namespace
+ * @param {String} namespace The namespace string for the debug instance to be colored
+ * @return {Number|String} An ANSI color code for the given namespace
+ * @api private
+ */
+ function selectColor(namespace) {
+ let hash = 0;
+
+ for (let i = 0; i < namespace.length; i++) {
+ hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+ }
+ createDebug.selectColor = selectColor;
+
+ /**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+ function createDebug(namespace) {
+ let prevTime;
+ let enableOverride = null;
+ let namespacesCache;
+ let enabledCache;
+
+ function debug(...args) {
+ // Disabled?
+ if (!debug.enabled) {
+ return;
+ }
+
+ const self = debug;
+
+ // Set `diff` timestamp
+ const curr = Number(new Date());
+ const ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+
+ args[0] = createDebug.coerce(args[0]);
+
+ if (typeof args[0] !== 'string') {
+ // Anything else let's inspect with %O
+ args.unshift('%O');
+ }
+
+ // Apply any `formatters` transformations
+ let index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+ // If we encounter an escaped % then don't increase the array index
+ if (match === '%%') {
+ return '%';
+ }
+ index++;
+ const formatter = createDebug.formatters[format];
+ if (typeof formatter === 'function') {
+ const val = args[index];
+ match = formatter.call(self, val);
+
+ // Now we need to remove `args[index]` since it's inlined in the `format`
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+
+ // Apply env-specific formatting (colors, etc.)
+ createDebug.formatArgs.call(self, args);
+
+ const logFn = self.log || createDebug.log;
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.useColors = createDebug.useColors();
+ debug.color = createDebug.selectColor(namespace);
+ debug.extend = extend;
+ debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
+
+ Object.defineProperty(debug, 'enabled', {
+ enumerable: true,
+ configurable: false,
+ get: () => {
+ if (enableOverride !== null) {
+ return enableOverride;
+ }
+ if (namespacesCache !== createDebug.namespaces) {
+ namespacesCache = createDebug.namespaces;
+ enabledCache = createDebug.enabled(namespace);
+ }
+
+ return enabledCache;
+ },
+ set: v => {
+ enableOverride = v;
+ }
+ });
+
+ // Env-specific initialization logic for debug instances
+ if (typeof createDebug.init === 'function') {
+ createDebug.init(debug);
+ }
+
+ return debug;
+ }
+
+ function extend(namespace, delimiter) {
+ const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+ newDebug.log = this.log;
+ return newDebug;
+ }
+
+ /**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+ function enable(namespaces) {
+ createDebug.save(namespaces);
+ createDebug.namespaces = namespaces;
+
+ createDebug.names = [];
+ createDebug.skips = [];
+
+ let i;
+ const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+ const len = split.length;
+
+ for (i = 0; i < len; i++) {
+ if (!split[i]) {
+ // ignore empty strings
+ continue;
+ }
+
+ namespaces = split[i].replace(/\*/g, '.*?');
+
+ if (namespaces[0] === '-') {
+ createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+ } else {
+ createDebug.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+ }
+
+ /**
+ * Disable debug output.
+ *
+ * @return {String} namespaces
+ * @api public
+ */
+ function disable() {
+ const namespaces = [
+ ...createDebug.names.map(toNamespace),
+ ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
+ ].join(',');
+ createDebug.enable('');
+ return namespaces;
+ }
+
+ /**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+ function enabled(name) {
+ if (name[name.length - 1] === '*') {
+ return true;
+ }
+
+ let i;
+ let len;
+
+ for (i = 0, len = createDebug.skips.length; i < len; i++) {
+ if (createDebug.skips[i].test(name)) {
+ return false;
+ }
+ }
+
+ for (i = 0, len = createDebug.names.length; i < len; i++) {
+ if (createDebug.names[i].test(name)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Convert regexp to namespace
+ *
+ * @param {RegExp} regxep
+ * @return {String} namespace
+ * @api private
+ */
+ function toNamespace(regexp) {
+ return regexp.toString()
+ .substring(2, regexp.toString().length - 2)
+ .replace(/\.\*\?$/, '*');
+ }
+
+ /**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+ function coerce(val) {
+ if (val instanceof Error) {
+ return val.stack || val.message;
+ }
+ return val;
+ }
+
+ /**
+ * XXX DO NOT USE. This is a temporary stub function.
+ * XXX It WILL be removed in the next major release.
+ */
+ function destroy() {
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+
+ createDebug.enable(createDebug.load());
+
+ return createDebug;
+}
+
+module.exports = setup;
diff --git a/chromium/third_party/node/node_modules/debug/src/index.js b/chromium/third_party/node/node_modules/debug/src/index.js
new file mode 100644
index 00000000000..bf4c57f259d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/debug/src/index.js
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer / nwjs process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
+ module.exports = require('./browser.js');
+} else {
+ module.exports = require('./node.js');
+}
diff --git a/chromium/third_party/node/node_modules/debug/src/node.js b/chromium/third_party/node/node_modules/debug/src/node.js
new file mode 100644
index 00000000000..79bc085cb02
--- /dev/null
+++ b/chromium/third_party/node/node_modules/debug/src/node.js
@@ -0,0 +1,263 @@
+/**
+ * Module dependencies.
+ */
+
+const tty = require('tty');
+const util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ */
+
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.destroy = util.deprecate(
+ () => {},
+ 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'
+);
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+try {
+ // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ const supportsColor = require('supports-color');
+
+ if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
+ exports.colors = [
+ 20,
+ 21,
+ 26,
+ 27,
+ 32,
+ 33,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 56,
+ 57,
+ 62,
+ 63,
+ 68,
+ 69,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 92,
+ 93,
+ 98,
+ 99,
+ 112,
+ 113,
+ 128,
+ 129,
+ 134,
+ 135,
+ 148,
+ 149,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 178,
+ 179,
+ 184,
+ 185,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 214,
+ 215,
+ 220,
+ 221
+ ];
+ }
+} catch (error) {
+ // Swallow - we only care if `supports-color` is available; it doesn't have to be.
+}
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(key => {
+ return /^debug_/i.test(key);
+}).reduce((obj, key) => {
+ // Camel-case
+ const prop = key
+ .substring(6)
+ .toLowerCase()
+ .replace(/_([a-z])/g, (_, k) => {
+ return k.toUpperCase();
+ });
+
+ // Coerce string value into JS value
+ let val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) {
+ val = true;
+ } else if (/^(no|off|false|disabled)$/i.test(val)) {
+ val = false;
+ } else if (val === 'null') {
+ val = null;
+ } else {
+ val = Number(val);
+ }
+
+ obj[prop] = val;
+ return obj;
+}, {});
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+ return 'colors' in exports.inspectOpts ?
+ Boolean(exports.inspectOpts.colors) :
+ tty.isatty(process.stderr.fd);
+}
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ const {namespace: name, useColors} = this;
+
+ if (useColors) {
+ const c = this.color;
+ const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c);
+ const prefix = ` ${colorCode};1m${name} \u001B[0m`;
+
+ args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+ args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m');
+ } else {
+ args[0] = getDate() + name + ' ' + args[0];
+ }
+}
+
+function getDate() {
+ if (exports.inspectOpts.hideDate) {
+ return '';
+ }
+ return new Date().toISOString() + ' ';
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to stderr.
+ */
+
+function log(...args) {
+ return process.stderr.write(util.format(...args) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+ if (namespaces) {
+ process.env.DEBUG = namespaces;
+ } else {
+ // If you set a process.env field to null or undefined, it gets cast to the
+ // string 'null' or 'undefined'. Just delete instead.
+ delete process.env.DEBUG;
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ return process.env.DEBUG;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init(debug) {
+ debug.inspectOpts = {};
+
+ const keys = Object.keys(exports.inspectOpts);
+ for (let i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+formatters.o = function (v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts)
+ .split('\n')
+ .map(str => str.trim())
+ .join(' ');
+};
+
+/**
+ * Map %O to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+formatters.O = function (v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+};
diff --git a/chromium/third_party/node/node_modules/escape-string-regexp/index.js b/chromium/third_party/node/node_modules/escape-string-regexp/index.js
new file mode 100644
index 00000000000..7834bf9b24c
--- /dev/null
+++ b/chromium/third_party/node/node_modules/escape-string-regexp/index.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
+
+module.exports = function (str) {
+ if (typeof str !== 'string') {
+ throw new TypeError('Expected a string');
+ }
+
+ return str.replace(matchOperatorsRe, '\\$&');
+};
diff --git a/chromium/third_party/node/node_modules/escape-string-regexp/license b/chromium/third_party/node/node_modules/escape-string-regexp/license
new file mode 100644
index 00000000000..654d0bfe943
--- /dev/null
+++ b/chromium/third_party/node/node_modules/escape-string-regexp/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/escape-string-regexp/package.json b/chromium/third_party/node/node_modules/escape-string-regexp/package.json
new file mode 100644
index 00000000000..f307df34a23
--- /dev/null
+++ b/chromium/third_party/node/node_modules/escape-string-regexp/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "escape-string-regexp",
+ "version": "1.0.5",
+ "description": "Escape RegExp special characters",
+ "license": "MIT",
+ "repository": "sindresorhus/escape-string-regexp",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "maintainers": [
+ "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
+ "Joshua Boy Nicolai Appelman <joshua@jbna.nl> (jbna.nl)"
+ ],
+ "engines": {
+ "node": ">=0.8.0"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "escape",
+ "regex",
+ "regexp",
+ "re",
+ "regular",
+ "expression",
+ "string",
+ "str",
+ "special",
+ "characters"
+ ],
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/esutils/LICENSE.BSD b/chromium/third_party/node/node_modules/esutils/LICENSE.BSD
new file mode 100644
index 00000000000..3e580c355a9
--- /dev/null
+++ b/chromium/third_party/node/node_modules/esutils/LICENSE.BSD
@@ -0,0 +1,19 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/chromium/third_party/node/node_modules/esutils/lib/ast.js b/chromium/third_party/node/node_modules/esutils/lib/ast.js
new file mode 100644
index 00000000000..8faadae1ce7
--- /dev/null
+++ b/chromium/third_party/node/node_modules/esutils/lib/ast.js
@@ -0,0 +1,144 @@
+/*
+ Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+(function () {
+ 'use strict';
+
+ function isExpression(node) {
+ if (node == null) { return false; }
+ switch (node.type) {
+ case 'ArrayExpression':
+ case 'AssignmentExpression':
+ case 'BinaryExpression':
+ case 'CallExpression':
+ case 'ConditionalExpression':
+ case 'FunctionExpression':
+ case 'Identifier':
+ case 'Literal':
+ case 'LogicalExpression':
+ case 'MemberExpression':
+ case 'NewExpression':
+ case 'ObjectExpression':
+ case 'SequenceExpression':
+ case 'ThisExpression':
+ case 'UnaryExpression':
+ case 'UpdateExpression':
+ return true;
+ }
+ return false;
+ }
+
+ function isIterationStatement(node) {
+ if (node == null) { return false; }
+ switch (node.type) {
+ case 'DoWhileStatement':
+ case 'ForInStatement':
+ case 'ForStatement':
+ case 'WhileStatement':
+ return true;
+ }
+ return false;
+ }
+
+ function isStatement(node) {
+ if (node == null) { return false; }
+ switch (node.type) {
+ case 'BlockStatement':
+ case 'BreakStatement':
+ case 'ContinueStatement':
+ case 'DebuggerStatement':
+ case 'DoWhileStatement':
+ case 'EmptyStatement':
+ case 'ExpressionStatement':
+ case 'ForInStatement':
+ case 'ForStatement':
+ case 'IfStatement':
+ case 'LabeledStatement':
+ case 'ReturnStatement':
+ case 'SwitchStatement':
+ case 'ThrowStatement':
+ case 'TryStatement':
+ case 'VariableDeclaration':
+ case 'WhileStatement':
+ case 'WithStatement':
+ return true;
+ }
+ return false;
+ }
+
+ function isSourceElement(node) {
+ return isStatement(node) || node != null && node.type === 'FunctionDeclaration';
+ }
+
+ function trailingStatement(node) {
+ switch (node.type) {
+ case 'IfStatement':
+ if (node.alternate != null) {
+ return node.alternate;
+ }
+ return node.consequent;
+
+ case 'LabeledStatement':
+ case 'ForStatement':
+ case 'ForInStatement':
+ case 'WhileStatement':
+ case 'WithStatement':
+ return node.body;
+ }
+ return null;
+ }
+
+ function isProblematicIfStatement(node) {
+ var current;
+
+ if (node.type !== 'IfStatement') {
+ return false;
+ }
+ if (node.alternate == null) {
+ return false;
+ }
+ current = node.consequent;
+ do {
+ if (current.type === 'IfStatement') {
+ if (current.alternate == null) {
+ return true;
+ }
+ }
+ current = trailingStatement(current);
+ } while (current);
+
+ return false;
+ }
+
+ module.exports = {
+ isExpression: isExpression,
+ isStatement: isStatement,
+ isIterationStatement: isIterationStatement,
+ isSourceElement: isSourceElement,
+ isProblematicIfStatement: isProblematicIfStatement,
+
+ trailingStatement: trailingStatement
+ };
+}());
+/* vim: set sw=4 ts=4 et tw=80 : */
diff --git a/chromium/third_party/node/node_modules/esutils/lib/code.js b/chromium/third_party/node/node_modules/esutils/lib/code.js
new file mode 100644
index 00000000000..23136af91f9
--- /dev/null
+++ b/chromium/third_party/node/node_modules/esutils/lib/code.js
@@ -0,0 +1,135 @@
+/*
+ Copyright (C) 2013-2014 Yusuke Suzuki <utatane.tea@gmail.com>
+ Copyright (C) 2014 Ivan Nikulin <ifaaan@gmail.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+(function () {
+ 'use strict';
+
+ var ES6Regex, ES5Regex, NON_ASCII_WHITESPACES, IDENTIFIER_START, IDENTIFIER_PART, ch;
+
+ // See `tools/generate-identifier-regex.js`.
+ ES5Regex = {
+ // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierStart:
+ NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
+ // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierPart:
+ NonAsciiIdentifierPart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/
+ };
+
+ ES6Regex = {
+ // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierStart:
+ NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
+ // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierPart:
+ NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
+ };
+
+ function isDecimalDigit(ch) {
+ return 0x30 <= ch && ch <= 0x39; // 0..9
+ }
+
+ function isHexDigit(ch) {
+ return 0x30 <= ch && ch <= 0x39 || // 0..9
+ 0x61 <= ch && ch <= 0x66 || // a..f
+ 0x41 <= ch && ch <= 0x46; // A..F
+ }
+
+ function isOctalDigit(ch) {
+ return ch >= 0x30 && ch <= 0x37; // 0..7
+ }
+
+ // 7.2 White Space
+
+ NON_ASCII_WHITESPACES = [
+ 0x1680,
+ 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A,
+ 0x202F, 0x205F,
+ 0x3000,
+ 0xFEFF
+ ];
+
+ function isWhiteSpace(ch) {
+ return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 ||
+ ch >= 0x1680 && NON_ASCII_WHITESPACES.indexOf(ch) >= 0;
+ }
+
+ // 7.3 Line Terminators
+
+ function isLineTerminator(ch) {
+ return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;
+ }
+
+ // 7.6 Identifier Names and Identifiers
+
+ function fromCodePoint(cp) {
+ if (cp <= 0xFFFF) { return String.fromCharCode(cp); }
+ var cu1 = String.fromCharCode(Math.floor((cp - 0x10000) / 0x400) + 0xD800);
+ var cu2 = String.fromCharCode(((cp - 0x10000) % 0x400) + 0xDC00);
+ return cu1 + cu2;
+ }
+
+ IDENTIFIER_START = new Array(0x80);
+ for(ch = 0; ch < 0x80; ++ch) {
+ IDENTIFIER_START[ch] =
+ ch >= 0x61 && ch <= 0x7A || // a..z
+ ch >= 0x41 && ch <= 0x5A || // A..Z
+ ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore)
+ }
+
+ IDENTIFIER_PART = new Array(0x80);
+ for(ch = 0; ch < 0x80; ++ch) {
+ IDENTIFIER_PART[ch] =
+ ch >= 0x61 && ch <= 0x7A || // a..z
+ ch >= 0x41 && ch <= 0x5A || // A..Z
+ ch >= 0x30 && ch <= 0x39 || // 0..9
+ ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore)
+ }
+
+ function isIdentifierStartES5(ch) {
+ return ch < 0x80 ? IDENTIFIER_START[ch] : ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));
+ }
+
+ function isIdentifierPartES5(ch) {
+ return ch < 0x80 ? IDENTIFIER_PART[ch] : ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));
+ }
+
+ function isIdentifierStartES6(ch) {
+ return ch < 0x80 ? IDENTIFIER_START[ch] : ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));
+ }
+
+ function isIdentifierPartES6(ch) {
+ return ch < 0x80 ? IDENTIFIER_PART[ch] : ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));
+ }
+
+ module.exports = {
+ isDecimalDigit: isDecimalDigit,
+ isHexDigit: isHexDigit,
+ isOctalDigit: isOctalDigit,
+ isWhiteSpace: isWhiteSpace,
+ isLineTerminator: isLineTerminator,
+ isIdentifierStartES5: isIdentifierStartES5,
+ isIdentifierPartES5: isIdentifierPartES5,
+ isIdentifierStartES6: isIdentifierStartES6,
+ isIdentifierPartES6: isIdentifierPartES6
+ };
+}());
+/* vim: set sw=4 ts=4 et tw=80 : */
diff --git a/chromium/third_party/node/node_modules/esutils/lib/keyword.js b/chromium/third_party/node/node_modules/esutils/lib/keyword.js
new file mode 100644
index 00000000000..13c8c6a967c
--- /dev/null
+++ b/chromium/third_party/node/node_modules/esutils/lib/keyword.js
@@ -0,0 +1,165 @@
+/*
+ Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+(function () {
+ 'use strict';
+
+ var code = require('./code');
+
+ function isStrictModeReservedWordES6(id) {
+ switch (id) {
+ case 'implements':
+ case 'interface':
+ case 'package':
+ case 'private':
+ case 'protected':
+ case 'public':
+ case 'static':
+ case 'let':
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ function isKeywordES5(id, strict) {
+ // yield should not be treated as keyword under non-strict mode.
+ if (!strict && id === 'yield') {
+ return false;
+ }
+ return isKeywordES6(id, strict);
+ }
+
+ function isKeywordES6(id, strict) {
+ if (strict && isStrictModeReservedWordES6(id)) {
+ return true;
+ }
+
+ switch (id.length) {
+ case 2:
+ return (id === 'if') || (id === 'in') || (id === 'do');
+ case 3:
+ return (id === 'var') || (id === 'for') || (id === 'new') || (id === 'try');
+ case 4:
+ return (id === 'this') || (id === 'else') || (id === 'case') ||
+ (id === 'void') || (id === 'with') || (id === 'enum');
+ case 5:
+ return (id === 'while') || (id === 'break') || (id === 'catch') ||
+ (id === 'throw') || (id === 'const') || (id === 'yield') ||
+ (id === 'class') || (id === 'super');
+ case 6:
+ return (id === 'return') || (id === 'typeof') || (id === 'delete') ||
+ (id === 'switch') || (id === 'export') || (id === 'import');
+ case 7:
+ return (id === 'default') || (id === 'finally') || (id === 'extends');
+ case 8:
+ return (id === 'function') || (id === 'continue') || (id === 'debugger');
+ case 10:
+ return (id === 'instanceof');
+ default:
+ return false;
+ }
+ }
+
+ function isReservedWordES5(id, strict) {
+ return id === 'null' || id === 'true' || id === 'false' || isKeywordES5(id, strict);
+ }
+
+ function isReservedWordES6(id, strict) {
+ return id === 'null' || id === 'true' || id === 'false' || isKeywordES6(id, strict);
+ }
+
+ function isRestrictedWord(id) {
+ return id === 'eval' || id === 'arguments';
+ }
+
+ function isIdentifierNameES5(id) {
+ var i, iz, ch;
+
+ if (id.length === 0) { return false; }
+
+ ch = id.charCodeAt(0);
+ if (!code.isIdentifierStartES5(ch)) {
+ return false;
+ }
+
+ for (i = 1, iz = id.length; i < iz; ++i) {
+ ch = id.charCodeAt(i);
+ if (!code.isIdentifierPartES5(ch)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function decodeUtf16(lead, trail) {
+ return (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
+ }
+
+ function isIdentifierNameES6(id) {
+ var i, iz, ch, lowCh, check;
+
+ if (id.length === 0) { return false; }
+
+ check = code.isIdentifierStartES6;
+ for (i = 0, iz = id.length; i < iz; ++i) {
+ ch = id.charCodeAt(i);
+ if (0xD800 <= ch && ch <= 0xDBFF) {
+ ++i;
+ if (i >= iz) { return false; }
+ lowCh = id.charCodeAt(i);
+ if (!(0xDC00 <= lowCh && lowCh <= 0xDFFF)) {
+ return false;
+ }
+ ch = decodeUtf16(ch, lowCh);
+ }
+ if (!check(ch)) {
+ return false;
+ }
+ check = code.isIdentifierPartES6;
+ }
+ return true;
+ }
+
+ function isIdentifierES5(id, strict) {
+ return isIdentifierNameES5(id) && !isReservedWordES5(id, strict);
+ }
+
+ function isIdentifierES6(id, strict) {
+ return isIdentifierNameES6(id) && !isReservedWordES6(id, strict);
+ }
+
+ module.exports = {
+ isKeywordES5: isKeywordES5,
+ isKeywordES6: isKeywordES6,
+ isReservedWordES5: isReservedWordES5,
+ isReservedWordES6: isReservedWordES6,
+ isRestrictedWord: isRestrictedWord,
+ isIdentifierNameES5: isIdentifierNameES5,
+ isIdentifierNameES6: isIdentifierNameES6,
+ isIdentifierES5: isIdentifierES5,
+ isIdentifierES6: isIdentifierES6
+ };
+}());
+/* vim: set sw=4 ts=4 et tw=80 : */
diff --git a/chromium/third_party/node/node_modules/esutils/lib/utils.js b/chromium/third_party/node/node_modules/esutils/lib/utils.js
new file mode 100644
index 00000000000..ce18faa6bc8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/esutils/lib/utils.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+(function () {
+ 'use strict';
+
+ exports.ast = require('./ast');
+ exports.code = require('./code');
+ exports.keyword = require('./keyword');
+}());
+/* vim: set sw=4 ts=4 et tw=80 : */
diff --git a/chromium/third_party/node/node_modules/esutils/package.json b/chromium/third_party/node/node_modules/esutils/package.json
new file mode 100644
index 00000000000..8396f4cee3f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/esutils/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "esutils",
+ "description": "utility box for ECMAScript language tools",
+ "homepage": "https://github.com/estools/esutils",
+ "main": "lib/utils.js",
+ "version": "2.0.3",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "directories": {
+ "lib": "./lib"
+ },
+ "files": [
+ "LICENSE.BSD",
+ "README.md",
+ "lib"
+ ],
+ "maintainers": [
+ {
+ "name": "Yusuke Suzuki",
+ "email": "utatane.tea@gmail.com",
+ "web": "http://github.com/Constellation"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "http://github.com/estools/esutils.git"
+ },
+ "devDependencies": {
+ "chai": "~1.7.2",
+ "coffee-script": "~1.6.3",
+ "jshint": "2.6.3",
+ "mocha": "~2.2.1",
+ "regenerate": "~1.3.1",
+ "unicode-9.0.0": "~0.7.0"
+ },
+ "license": "BSD-2-Clause",
+ "scripts": {
+ "test": "npm run-script lint && npm run-script unit-test",
+ "lint": "jshint lib/*.js",
+ "unit-test": "mocha --compilers coffee:coffee-script -R spec",
+ "generate-regex": "node tools/generate-identifier-regex.js"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/function-bind/LICENSE b/chromium/third_party/node/node_modules/function-bind/LICENSE
new file mode 100644
index 00000000000..62d6d237ff1
--- /dev/null
+++ b/chromium/third_party/node/node_modules/function-bind/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2013 Raynos.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/chromium/third_party/node/node_modules/function-bind/implementation.js b/chromium/third_party/node/node_modules/function-bind/implementation.js
new file mode 100644
index 00000000000..cc4daec1b08
--- /dev/null
+++ b/chromium/third_party/node/node_modules/function-bind/implementation.js
@@ -0,0 +1,52 @@
+'use strict';
+
+/* eslint no-invalid-this: 1 */
+
+var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
+var slice = Array.prototype.slice;
+var toStr = Object.prototype.toString;
+var funcType = '[object Function]';
+
+module.exports = function bind(that) {
+ var target = this;
+ if (typeof target !== 'function' || toStr.call(target) !== funcType) {
+ throw new TypeError(ERROR_MESSAGE + target);
+ }
+ var args = slice.call(arguments, 1);
+
+ var bound;
+ var binder = function () {
+ if (this instanceof bound) {
+ var result = target.apply(
+ this,
+ args.concat(slice.call(arguments))
+ );
+ if (Object(result) === result) {
+ return result;
+ }
+ return this;
+ } else {
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+ }
+ };
+
+ var boundLength = Math.max(0, target.length - args.length);
+ var boundArgs = [];
+ for (var i = 0; i < boundLength; i++) {
+ boundArgs.push('$' + i);
+ }
+
+ bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
+
+ if (target.prototype) {
+ var Empty = function Empty() {};
+ Empty.prototype = target.prototype;
+ bound.prototype = new Empty();
+ Empty.prototype = null;
+ }
+
+ return bound;
+};
diff --git a/chromium/third_party/node/node_modules/function-bind/index.js b/chromium/third_party/node/node_modules/function-bind/index.js
new file mode 100644
index 00000000000..3bb6b960988
--- /dev/null
+++ b/chromium/third_party/node/node_modules/function-bind/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+var implementation = require('./implementation');
+
+module.exports = Function.prototype.bind || implementation;
diff --git a/chromium/third_party/node/node_modules/function-bind/package.json b/chromium/third_party/node/node_modules/function-bind/package.json
new file mode 100644
index 00000000000..20a1727cbf8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/function-bind/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "function-bind",
+ "version": "1.1.1",
+ "description": "Implementation of Function.prototype.bind",
+ "keywords": [
+ "function",
+ "bind",
+ "shim",
+ "es5"
+ ],
+ "author": "Raynos <raynos2@gmail.com>",
+ "repository": "git://github.com/Raynos/function-bind.git",
+ "main": "index",
+ "homepage": "https://github.com/Raynos/function-bind",
+ "contributors": [
+ {
+ "name": "Raynos"
+ },
+ {
+ "name": "Jordan Harband",
+ "url": "https://github.com/ljharb"
+ }
+ ],
+ "bugs": {
+ "url": "https://github.com/Raynos/function-bind/issues",
+ "email": "raynos2@gmail.com"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "@ljharb/eslint-config": "^12.2.1",
+ "covert": "^1.1.0",
+ "eslint": "^4.5.0",
+ "jscs": "^3.0.7",
+ "tape": "^4.8.0"
+ },
+ "license": "MIT",
+ "scripts": {
+ "pretest": "npm run lint",
+ "test": "npm run tests-only",
+ "posttest": "npm run coverage -- --quiet",
+ "tests-only": "node test",
+ "coverage": "covert test/*.js",
+ "lint": "npm run jscs && npm run eslint",
+ "jscs": "jscs *.js */*.js",
+ "eslint": "eslint *.js */*.js"
+ },
+ "testling": {
+ "files": "test/index.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/16..latest",
+ "firefox/nightly",
+ "chrome/22..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ }
+}
diff --git a/chromium/third_party/node/node_modules/globals/globals.json b/chromium/third_party/node/node_modules/globals/globals.json
new file mode 100644
index 00000000000..6f5ac02f1ea
--- /dev/null
+++ b/chromium/third_party/node/node_modules/globals/globals.json
@@ -0,0 +1,1563 @@
+{
+ "builtin": {
+ "Array": false,
+ "ArrayBuffer": false,
+ "Atomics": false,
+ "BigInt": false,
+ "BigInt64Array": false,
+ "BigUint64Array": false,
+ "Boolean": false,
+ "constructor": false,
+ "DataView": false,
+ "Date": false,
+ "decodeURI": false,
+ "decodeURIComponent": false,
+ "encodeURI": false,
+ "encodeURIComponent": false,
+ "Error": false,
+ "escape": false,
+ "eval": false,
+ "EvalError": false,
+ "Float32Array": false,
+ "Float64Array": false,
+ "Function": false,
+ "globalThis": false,
+ "hasOwnProperty": false,
+ "Infinity": false,
+ "Int16Array": false,
+ "Int32Array": false,
+ "Int8Array": false,
+ "isFinite": false,
+ "isNaN": false,
+ "isPrototypeOf": false,
+ "JSON": false,
+ "Map": false,
+ "Math": false,
+ "NaN": false,
+ "Number": false,
+ "Object": false,
+ "parseFloat": false,
+ "parseInt": false,
+ "Promise": false,
+ "propertyIsEnumerable": false,
+ "Proxy": false,
+ "RangeError": false,
+ "ReferenceError": false,
+ "Reflect": false,
+ "RegExp": false,
+ "Set": false,
+ "SharedArrayBuffer": false,
+ "String": false,
+ "Symbol": false,
+ "SyntaxError": false,
+ "toLocaleString": false,
+ "toString": false,
+ "TypeError": false,
+ "Uint16Array": false,
+ "Uint32Array": false,
+ "Uint8Array": false,
+ "Uint8ClampedArray": false,
+ "undefined": false,
+ "unescape": false,
+ "URIError": false,
+ "valueOf": false,
+ "WeakMap": false,
+ "WeakSet": false
+ },
+ "es5": {
+ "Array": false,
+ "Boolean": false,
+ "constructor": false,
+ "Date": false,
+ "decodeURI": false,
+ "decodeURIComponent": false,
+ "encodeURI": false,
+ "encodeURIComponent": false,
+ "Error": false,
+ "escape": false,
+ "eval": false,
+ "EvalError": false,
+ "Function": false,
+ "hasOwnProperty": false,
+ "Infinity": false,
+ "isFinite": false,
+ "isNaN": false,
+ "isPrototypeOf": false,
+ "JSON": false,
+ "Math": false,
+ "NaN": false,
+ "Number": false,
+ "Object": false,
+ "parseFloat": false,
+ "parseInt": false,
+ "propertyIsEnumerable": false,
+ "RangeError": false,
+ "ReferenceError": false,
+ "RegExp": false,
+ "String": false,
+ "SyntaxError": false,
+ "toLocaleString": false,
+ "toString": false,
+ "TypeError": false,
+ "undefined": false,
+ "unescape": false,
+ "URIError": false,
+ "valueOf": false
+ },
+ "es2015": {
+ "Array": false,
+ "ArrayBuffer": false,
+ "Boolean": false,
+ "constructor": false,
+ "DataView": false,
+ "Date": false,
+ "decodeURI": false,
+ "decodeURIComponent": false,
+ "encodeURI": false,
+ "encodeURIComponent": false,
+ "Error": false,
+ "escape": false,
+ "eval": false,
+ "EvalError": false,
+ "Float32Array": false,
+ "Float64Array": false,
+ "Function": false,
+ "hasOwnProperty": false,
+ "Infinity": false,
+ "Int16Array": false,
+ "Int32Array": false,
+ "Int8Array": false,
+ "isFinite": false,
+ "isNaN": false,
+ "isPrototypeOf": false,
+ "JSON": false,
+ "Map": false,
+ "Math": false,
+ "NaN": false,
+ "Number": false,
+ "Object": false,
+ "parseFloat": false,
+ "parseInt": false,
+ "Promise": false,
+ "propertyIsEnumerable": false,
+ "Proxy": false,
+ "RangeError": false,
+ "ReferenceError": false,
+ "Reflect": false,
+ "RegExp": false,
+ "Set": false,
+ "String": false,
+ "Symbol": false,
+ "SyntaxError": false,
+ "toLocaleString": false,
+ "toString": false,
+ "TypeError": false,
+ "Uint16Array": false,
+ "Uint32Array": false,
+ "Uint8Array": false,
+ "Uint8ClampedArray": false,
+ "undefined": false,
+ "unescape": false,
+ "URIError": false,
+ "valueOf": false,
+ "WeakMap": false,
+ "WeakSet": false
+ },
+ "es2017": {
+ "Array": false,
+ "ArrayBuffer": false,
+ "Atomics": false,
+ "Boolean": false,
+ "constructor": false,
+ "DataView": false,
+ "Date": false,
+ "decodeURI": false,
+ "decodeURIComponent": false,
+ "encodeURI": false,
+ "encodeURIComponent": false,
+ "Error": false,
+ "escape": false,
+ "eval": false,
+ "EvalError": false,
+ "Float32Array": false,
+ "Float64Array": false,
+ "Function": false,
+ "hasOwnProperty": false,
+ "Infinity": false,
+ "Int16Array": false,
+ "Int32Array": false,
+ "Int8Array": false,
+ "isFinite": false,
+ "isNaN": false,
+ "isPrototypeOf": false,
+ "JSON": false,
+ "Map": false,
+ "Math": false,
+ "NaN": false,
+ "Number": false,
+ "Object": false,
+ "parseFloat": false,
+ "parseInt": false,
+ "Promise": false,
+ "propertyIsEnumerable": false,
+ "Proxy": false,
+ "RangeError": false,
+ "ReferenceError": false,
+ "Reflect": false,
+ "RegExp": false,
+ "Set": false,
+ "SharedArrayBuffer": false,
+ "String": false,
+ "Symbol": false,
+ "SyntaxError": false,
+ "toLocaleString": false,
+ "toString": false,
+ "TypeError": false,
+ "Uint16Array": false,
+ "Uint32Array": false,
+ "Uint8Array": false,
+ "Uint8ClampedArray": false,
+ "undefined": false,
+ "unescape": false,
+ "URIError": false,
+ "valueOf": false,
+ "WeakMap": false,
+ "WeakSet": false
+ },
+ "browser": {
+ "AbortController": false,
+ "AbortSignal": false,
+ "addEventListener": false,
+ "alert": false,
+ "AnalyserNode": false,
+ "Animation": false,
+ "AnimationEffectReadOnly": false,
+ "AnimationEffectTiming": false,
+ "AnimationEffectTimingReadOnly": false,
+ "AnimationEvent": false,
+ "AnimationPlaybackEvent": false,
+ "AnimationTimeline": false,
+ "applicationCache": false,
+ "ApplicationCache": false,
+ "ApplicationCacheErrorEvent": false,
+ "atob": false,
+ "Attr": false,
+ "Audio": false,
+ "AudioBuffer": false,
+ "AudioBufferSourceNode": false,
+ "AudioContext": false,
+ "AudioDestinationNode": false,
+ "AudioListener": false,
+ "AudioNode": false,
+ "AudioParam": false,
+ "AudioProcessingEvent": false,
+ "AudioScheduledSourceNode": false,
+ "AudioWorkletGlobalScope ": false,
+ "AudioWorkletNode": false,
+ "AudioWorkletProcessor": false,
+ "BarProp": false,
+ "BaseAudioContext": false,
+ "BatteryManager": false,
+ "BeforeUnloadEvent": false,
+ "BiquadFilterNode": false,
+ "Blob": false,
+ "BlobEvent": false,
+ "blur": false,
+ "BroadcastChannel": false,
+ "btoa": false,
+ "BudgetService": false,
+ "ByteLengthQueuingStrategy": false,
+ "Cache": false,
+ "caches": false,
+ "CacheStorage": false,
+ "cancelAnimationFrame": false,
+ "cancelIdleCallback": false,
+ "CanvasCaptureMediaStreamTrack": false,
+ "CanvasGradient": false,
+ "CanvasPattern": false,
+ "CanvasRenderingContext2D": false,
+ "ChannelMergerNode": false,
+ "ChannelSplitterNode": false,
+ "CharacterData": false,
+ "clearInterval": false,
+ "clearTimeout": false,
+ "clientInformation": false,
+ "ClipboardEvent": false,
+ "close": false,
+ "closed": false,
+ "CloseEvent": false,
+ "Comment": false,
+ "CompositionEvent": false,
+ "confirm": false,
+ "console": false,
+ "ConstantSourceNode": false,
+ "ConvolverNode": false,
+ "CountQueuingStrategy": false,
+ "createImageBitmap": false,
+ "Credential": false,
+ "CredentialsContainer": false,
+ "crypto": false,
+ "Crypto": false,
+ "CryptoKey": false,
+ "CSS": false,
+ "CSSConditionRule": false,
+ "CSSFontFaceRule": false,
+ "CSSGroupingRule": false,
+ "CSSImportRule": false,
+ "CSSKeyframeRule": false,
+ "CSSKeyframesRule": false,
+ "CSSMediaRule": false,
+ "CSSNamespaceRule": false,
+ "CSSPageRule": false,
+ "CSSRule": false,
+ "CSSRuleList": false,
+ "CSSStyleDeclaration": false,
+ "CSSStyleRule": false,
+ "CSSStyleSheet": false,
+ "CSSSupportsRule": false,
+ "CustomElementRegistry": false,
+ "customElements": false,
+ "CustomEvent": false,
+ "DataTransfer": false,
+ "DataTransferItem": false,
+ "DataTransferItemList": false,
+ "defaultstatus": false,
+ "defaultStatus": false,
+ "DelayNode": false,
+ "DeviceMotionEvent": false,
+ "DeviceOrientationEvent": false,
+ "devicePixelRatio": false,
+ "dispatchEvent": false,
+ "document": false,
+ "Document": false,
+ "DocumentFragment": false,
+ "DocumentType": false,
+ "DOMError": false,
+ "DOMException": false,
+ "DOMImplementation": false,
+ "DOMMatrix": false,
+ "DOMMatrixReadOnly": false,
+ "DOMParser": false,
+ "DOMPoint": false,
+ "DOMPointReadOnly": false,
+ "DOMQuad": false,
+ "DOMRect": false,
+ "DOMRectReadOnly": false,
+ "DOMStringList": false,
+ "DOMStringMap": false,
+ "DOMTokenList": false,
+ "DragEvent": false,
+ "DynamicsCompressorNode": false,
+ "Element": false,
+ "ErrorEvent": false,
+ "event": false,
+ "Event": false,
+ "EventSource": false,
+ "EventTarget": false,
+ "external": false,
+ "fetch": false,
+ "File": false,
+ "FileList": false,
+ "FileReader": false,
+ "find": false,
+ "focus": false,
+ "FocusEvent": false,
+ "FontFace": false,
+ "FontFaceSetLoadEvent": false,
+ "FormData": false,
+ "frameElement": false,
+ "frames": false,
+ "GainNode": false,
+ "Gamepad": false,
+ "GamepadButton": false,
+ "GamepadEvent": false,
+ "getComputedStyle": false,
+ "getSelection": false,
+ "HashChangeEvent": false,
+ "Headers": false,
+ "history": false,
+ "History": false,
+ "HTMLAllCollection": false,
+ "HTMLAnchorElement": false,
+ "HTMLAreaElement": false,
+ "HTMLAudioElement": false,
+ "HTMLBaseElement": false,
+ "HTMLBodyElement": false,
+ "HTMLBRElement": false,
+ "HTMLButtonElement": false,
+ "HTMLCanvasElement": false,
+ "HTMLCollection": false,
+ "HTMLContentElement": false,
+ "HTMLDataElement": false,
+ "HTMLDataListElement": false,
+ "HTMLDetailsElement": false,
+ "HTMLDialogElement": false,
+ "HTMLDirectoryElement": false,
+ "HTMLDivElement": false,
+ "HTMLDListElement": false,
+ "HTMLDocument": false,
+ "HTMLElement": false,
+ "HTMLEmbedElement": false,
+ "HTMLFieldSetElement": false,
+ "HTMLFontElement": false,
+ "HTMLFormControlsCollection": false,
+ "HTMLFormElement": false,
+ "HTMLFrameElement": false,
+ "HTMLFrameSetElement": false,
+ "HTMLHeadElement": false,
+ "HTMLHeadingElement": false,
+ "HTMLHRElement": false,
+ "HTMLHtmlElement": false,
+ "HTMLIFrameElement": false,
+ "HTMLImageElement": false,
+ "HTMLInputElement": false,
+ "HTMLLabelElement": false,
+ "HTMLLegendElement": false,
+ "HTMLLIElement": false,
+ "HTMLLinkElement": false,
+ "HTMLMapElement": false,
+ "HTMLMarqueeElement": false,
+ "HTMLMediaElement": false,
+ "HTMLMenuElement": false,
+ "HTMLMetaElement": false,
+ "HTMLMeterElement": false,
+ "HTMLModElement": false,
+ "HTMLObjectElement": false,
+ "HTMLOListElement": false,
+ "HTMLOptGroupElement": false,
+ "HTMLOptionElement": false,
+ "HTMLOptionsCollection": false,
+ "HTMLOutputElement": false,
+ "HTMLParagraphElement": false,
+ "HTMLParamElement": false,
+ "HTMLPictureElement": false,
+ "HTMLPreElement": false,
+ "HTMLProgressElement": false,
+ "HTMLQuoteElement": false,
+ "HTMLScriptElement": false,
+ "HTMLSelectElement": false,
+ "HTMLShadowElement": false,
+ "HTMLSlotElement": false,
+ "HTMLSourceElement": false,
+ "HTMLSpanElement": false,
+ "HTMLStyleElement": false,
+ "HTMLTableCaptionElement": false,
+ "HTMLTableCellElement": false,
+ "HTMLTableColElement": false,
+ "HTMLTableElement": false,
+ "HTMLTableRowElement": false,
+ "HTMLTableSectionElement": false,
+ "HTMLTemplateElement": false,
+ "HTMLTextAreaElement": false,
+ "HTMLTimeElement": false,
+ "HTMLTitleElement": false,
+ "HTMLTrackElement": false,
+ "HTMLUListElement": false,
+ "HTMLUnknownElement": false,
+ "HTMLVideoElement": false,
+ "IDBCursor": false,
+ "IDBCursorWithValue": false,
+ "IDBDatabase": false,
+ "IDBFactory": false,
+ "IDBIndex": false,
+ "IDBKeyRange": false,
+ "IDBObjectStore": false,
+ "IDBOpenDBRequest": false,
+ "IDBRequest": false,
+ "IDBTransaction": false,
+ "IDBVersionChangeEvent": false,
+ "IdleDeadline": false,
+ "IIRFilterNode": false,
+ "Image": false,
+ "ImageBitmap": false,
+ "ImageBitmapRenderingContext": false,
+ "ImageCapture": false,
+ "ImageData": false,
+ "indexedDB": false,
+ "innerHeight": false,
+ "innerWidth": false,
+ "InputEvent": false,
+ "IntersectionObserver": false,
+ "IntersectionObserverEntry": false,
+ "Intl": false,
+ "isSecureContext": false,
+ "KeyboardEvent": false,
+ "KeyframeEffect": false,
+ "KeyframeEffectReadOnly": false,
+ "length": false,
+ "localStorage": false,
+ "location": true,
+ "Location": false,
+ "locationbar": false,
+ "matchMedia": false,
+ "MediaDeviceInfo": false,
+ "MediaDevices": false,
+ "MediaElementAudioSourceNode": false,
+ "MediaEncryptedEvent": false,
+ "MediaError": false,
+ "MediaKeyMessageEvent": false,
+ "MediaKeySession": false,
+ "MediaKeyStatusMap": false,
+ "MediaKeySystemAccess": false,
+ "MediaList": false,
+ "MediaQueryList": false,
+ "MediaQueryListEvent": false,
+ "MediaRecorder": false,
+ "MediaSettingsRange": false,
+ "MediaSource": false,
+ "MediaStream": false,
+ "MediaStreamAudioDestinationNode": false,
+ "MediaStreamAudioSourceNode": false,
+ "MediaStreamEvent": false,
+ "MediaStreamTrack": false,
+ "MediaStreamTrackEvent": false,
+ "menubar": false,
+ "MessageChannel": false,
+ "MessageEvent": false,
+ "MessagePort": false,
+ "MIDIAccess": false,
+ "MIDIConnectionEvent": false,
+ "MIDIInput": false,
+ "MIDIInputMap": false,
+ "MIDIMessageEvent": false,
+ "MIDIOutput": false,
+ "MIDIOutputMap": false,
+ "MIDIPort": false,
+ "MimeType": false,
+ "MimeTypeArray": false,
+ "MouseEvent": false,
+ "moveBy": false,
+ "moveTo": false,
+ "MutationEvent": false,
+ "MutationObserver": false,
+ "MutationRecord": false,
+ "name": false,
+ "NamedNodeMap": false,
+ "NavigationPreloadManager": false,
+ "navigator": false,
+ "Navigator": false,
+ "NetworkInformation": false,
+ "Node": false,
+ "NodeFilter": false,
+ "NodeIterator": false,
+ "NodeList": false,
+ "Notification": false,
+ "OfflineAudioCompletionEvent": false,
+ "OfflineAudioContext": false,
+ "offscreenBuffering": false,
+ "OffscreenCanvas": true,
+ "onabort": true,
+ "onafterprint": true,
+ "onanimationend": true,
+ "onanimationiteration": true,
+ "onanimationstart": true,
+ "onappinstalled": true,
+ "onauxclick": true,
+ "onbeforeinstallprompt": true,
+ "onbeforeprint": true,
+ "onbeforeunload": true,
+ "onblur": true,
+ "oncancel": true,
+ "oncanplay": true,
+ "oncanplaythrough": true,
+ "onchange": true,
+ "onclick": true,
+ "onclose": true,
+ "oncontextmenu": true,
+ "oncuechange": true,
+ "ondblclick": true,
+ "ondevicemotion": true,
+ "ondeviceorientation": true,
+ "ondeviceorientationabsolute": true,
+ "ondrag": true,
+ "ondragend": true,
+ "ondragenter": true,
+ "ondragleave": true,
+ "ondragover": true,
+ "ondragstart": true,
+ "ondrop": true,
+ "ondurationchange": true,
+ "onemptied": true,
+ "onended": true,
+ "onerror": true,
+ "onfocus": true,
+ "ongotpointercapture": true,
+ "onhashchange": true,
+ "oninput": true,
+ "oninvalid": true,
+ "onkeydown": true,
+ "onkeypress": true,
+ "onkeyup": true,
+ "onlanguagechange": true,
+ "onload": true,
+ "onloadeddata": true,
+ "onloadedmetadata": true,
+ "onloadstart": true,
+ "onlostpointercapture": true,
+ "onmessage": true,
+ "onmessageerror": true,
+ "onmousedown": true,
+ "onmouseenter": true,
+ "onmouseleave": true,
+ "onmousemove": true,
+ "onmouseout": true,
+ "onmouseover": true,
+ "onmouseup": true,
+ "onmousewheel": true,
+ "onoffline": true,
+ "ononline": true,
+ "onpagehide": true,
+ "onpageshow": true,
+ "onpause": true,
+ "onplay": true,
+ "onplaying": true,
+ "onpointercancel": true,
+ "onpointerdown": true,
+ "onpointerenter": true,
+ "onpointerleave": true,
+ "onpointermove": true,
+ "onpointerout": true,
+ "onpointerover": true,
+ "onpointerup": true,
+ "onpopstate": true,
+ "onprogress": true,
+ "onratechange": true,
+ "onrejectionhandled": true,
+ "onreset": true,
+ "onresize": true,
+ "onscroll": true,
+ "onsearch": true,
+ "onseeked": true,
+ "onseeking": true,
+ "onselect": true,
+ "onstalled": true,
+ "onstorage": true,
+ "onsubmit": true,
+ "onsuspend": true,
+ "ontimeupdate": true,
+ "ontoggle": true,
+ "ontransitionend": true,
+ "onunhandledrejection": true,
+ "onunload": true,
+ "onvolumechange": true,
+ "onwaiting": true,
+ "onwheel": true,
+ "open": false,
+ "openDatabase": false,
+ "opener": false,
+ "Option": false,
+ "origin": false,
+ "OscillatorNode": false,
+ "outerHeight": false,
+ "outerWidth": false,
+ "PageTransitionEvent": false,
+ "pageXOffset": false,
+ "pageYOffset": false,
+ "PannerNode": false,
+ "parent": false,
+ "Path2D": false,
+ "PaymentAddress": false,
+ "PaymentRequest": false,
+ "PaymentRequestUpdateEvent": false,
+ "PaymentResponse": false,
+ "performance": false,
+ "Performance": false,
+ "PerformanceEntry": false,
+ "PerformanceLongTaskTiming": false,
+ "PerformanceMark": false,
+ "PerformanceMeasure": false,
+ "PerformanceNavigation": false,
+ "PerformanceNavigationTiming": false,
+ "PerformanceObserver": false,
+ "PerformanceObserverEntryList": false,
+ "PerformancePaintTiming": false,
+ "PerformanceResourceTiming": false,
+ "PerformanceTiming": false,
+ "PeriodicWave": false,
+ "Permissions": false,
+ "PermissionStatus": false,
+ "personalbar": false,
+ "PhotoCapabilities": false,
+ "Plugin": false,
+ "PluginArray": false,
+ "PointerEvent": false,
+ "PopStateEvent": false,
+ "postMessage": false,
+ "Presentation": false,
+ "PresentationAvailability": false,
+ "PresentationConnection": false,
+ "PresentationConnectionAvailableEvent": false,
+ "PresentationConnectionCloseEvent": false,
+ "PresentationConnectionList": false,
+ "PresentationReceiver": false,
+ "PresentationRequest": false,
+ "print": false,
+ "ProcessingInstruction": false,
+ "ProgressEvent": false,
+ "PromiseRejectionEvent": false,
+ "prompt": false,
+ "PushManager": false,
+ "PushSubscription": false,
+ "PushSubscriptionOptions": false,
+ "queueMicrotask": false,
+ "RadioNodeList": false,
+ "Range": false,
+ "ReadableStream": false,
+ "registerProcessor": false,
+ "RemotePlayback": false,
+ "removeEventListener": false,
+ "Request": false,
+ "requestAnimationFrame": false,
+ "requestIdleCallback": false,
+ "resizeBy": false,
+ "ResizeObserver": false,
+ "ResizeObserverEntry": false,
+ "resizeTo": false,
+ "Response": false,
+ "RTCCertificate": false,
+ "RTCDataChannel": false,
+ "RTCDataChannelEvent": false,
+ "RTCDtlsTransport": false,
+ "RTCIceCandidate": false,
+ "RTCIceGatherer": false,
+ "RTCIceTransport": false,
+ "RTCPeerConnection": false,
+ "RTCPeerConnectionIceEvent": false,
+ "RTCRtpContributingSource": false,
+ "RTCRtpReceiver": false,
+ "RTCRtpSender": false,
+ "RTCSctpTransport": false,
+ "RTCSessionDescription": false,
+ "RTCStatsReport": false,
+ "RTCTrackEvent": false,
+ "screen": false,
+ "Screen": false,
+ "screenLeft": false,
+ "ScreenOrientation": false,
+ "screenTop": false,
+ "screenX": false,
+ "screenY": false,
+ "ScriptProcessorNode": false,
+ "scroll": false,
+ "scrollbars": false,
+ "scrollBy": false,
+ "scrollTo": false,
+ "scrollX": false,
+ "scrollY": false,
+ "SecurityPolicyViolationEvent": false,
+ "Selection": false,
+ "self": false,
+ "ServiceWorker": false,
+ "ServiceWorkerContainer": false,
+ "ServiceWorkerRegistration": false,
+ "sessionStorage": false,
+ "setInterval": false,
+ "setTimeout": false,
+ "ShadowRoot": false,
+ "SharedWorker": false,
+ "SourceBuffer": false,
+ "SourceBufferList": false,
+ "speechSynthesis": false,
+ "SpeechSynthesisEvent": false,
+ "SpeechSynthesisUtterance": false,
+ "StaticRange": false,
+ "status": false,
+ "statusbar": false,
+ "StereoPannerNode": false,
+ "stop": false,
+ "Storage": false,
+ "StorageEvent": false,
+ "StorageManager": false,
+ "styleMedia": false,
+ "StyleSheet": false,
+ "StyleSheetList": false,
+ "SubtleCrypto": false,
+ "SVGAElement": false,
+ "SVGAngle": false,
+ "SVGAnimatedAngle": false,
+ "SVGAnimatedBoolean": false,
+ "SVGAnimatedEnumeration": false,
+ "SVGAnimatedInteger": false,
+ "SVGAnimatedLength": false,
+ "SVGAnimatedLengthList": false,
+ "SVGAnimatedNumber": false,
+ "SVGAnimatedNumberList": false,
+ "SVGAnimatedPreserveAspectRatio": false,
+ "SVGAnimatedRect": false,
+ "SVGAnimatedString": false,
+ "SVGAnimatedTransformList": false,
+ "SVGAnimateElement": false,
+ "SVGAnimateMotionElement": false,
+ "SVGAnimateTransformElement": false,
+ "SVGAnimationElement": false,
+ "SVGCircleElement": false,
+ "SVGClipPathElement": false,
+ "SVGComponentTransferFunctionElement": false,
+ "SVGDefsElement": false,
+ "SVGDescElement": false,
+ "SVGDiscardElement": false,
+ "SVGElement": false,
+ "SVGEllipseElement": false,
+ "SVGFEBlendElement": false,
+ "SVGFEColorMatrixElement": false,
+ "SVGFEComponentTransferElement": false,
+ "SVGFECompositeElement": false,
+ "SVGFEConvolveMatrixElement": false,
+ "SVGFEDiffuseLightingElement": false,
+ "SVGFEDisplacementMapElement": false,
+ "SVGFEDistantLightElement": false,
+ "SVGFEDropShadowElement": false,
+ "SVGFEFloodElement": false,
+ "SVGFEFuncAElement": false,
+ "SVGFEFuncBElement": false,
+ "SVGFEFuncGElement": false,
+ "SVGFEFuncRElement": false,
+ "SVGFEGaussianBlurElement": false,
+ "SVGFEImageElement": false,
+ "SVGFEMergeElement": false,
+ "SVGFEMergeNodeElement": false,
+ "SVGFEMorphologyElement": false,
+ "SVGFEOffsetElement": false,
+ "SVGFEPointLightElement": false,
+ "SVGFESpecularLightingElement": false,
+ "SVGFESpotLightElement": false,
+ "SVGFETileElement": false,
+ "SVGFETurbulenceElement": false,
+ "SVGFilterElement": false,
+ "SVGForeignObjectElement": false,
+ "SVGGElement": false,
+ "SVGGeometryElement": false,
+ "SVGGradientElement": false,
+ "SVGGraphicsElement": false,
+ "SVGImageElement": false,
+ "SVGLength": false,
+ "SVGLengthList": false,
+ "SVGLinearGradientElement": false,
+ "SVGLineElement": false,
+ "SVGMarkerElement": false,
+ "SVGMaskElement": false,
+ "SVGMatrix": false,
+ "SVGMetadataElement": false,
+ "SVGMPathElement": false,
+ "SVGNumber": false,
+ "SVGNumberList": false,
+ "SVGPathElement": false,
+ "SVGPatternElement": false,
+ "SVGPoint": false,
+ "SVGPointList": false,
+ "SVGPolygonElement": false,
+ "SVGPolylineElement": false,
+ "SVGPreserveAspectRatio": false,
+ "SVGRadialGradientElement": false,
+ "SVGRect": false,
+ "SVGRectElement": false,
+ "SVGScriptElement": false,
+ "SVGSetElement": false,
+ "SVGStopElement": false,
+ "SVGStringList": false,
+ "SVGStyleElement": false,
+ "SVGSVGElement": false,
+ "SVGSwitchElement": false,
+ "SVGSymbolElement": false,
+ "SVGTextContentElement": false,
+ "SVGTextElement": false,
+ "SVGTextPathElement": false,
+ "SVGTextPositioningElement": false,
+ "SVGTitleElement": false,
+ "SVGTransform": false,
+ "SVGTransformList": false,
+ "SVGTSpanElement": false,
+ "SVGUnitTypes": false,
+ "SVGUseElement": false,
+ "SVGViewElement": false,
+ "TaskAttributionTiming": false,
+ "Text": false,
+ "TextDecoder": false,
+ "TextEncoder": false,
+ "TextEvent": false,
+ "TextMetrics": false,
+ "TextTrack": false,
+ "TextTrackCue": false,
+ "TextTrackCueList": false,
+ "TextTrackList": false,
+ "TimeRanges": false,
+ "toolbar": false,
+ "top": false,
+ "Touch": false,
+ "TouchEvent": false,
+ "TouchList": false,
+ "TrackEvent": false,
+ "TransitionEvent": false,
+ "TreeWalker": false,
+ "UIEvent": false,
+ "URL": false,
+ "URLSearchParams": false,
+ "ValidityState": false,
+ "visualViewport": false,
+ "VisualViewport": false,
+ "VTTCue": false,
+ "WaveShaperNode": false,
+ "WebAssembly": false,
+ "WebGL2RenderingContext": false,
+ "WebGLActiveInfo": false,
+ "WebGLBuffer": false,
+ "WebGLContextEvent": false,
+ "WebGLFramebuffer": false,
+ "WebGLProgram": false,
+ "WebGLQuery": false,
+ "WebGLRenderbuffer": false,
+ "WebGLRenderingContext": false,
+ "WebGLSampler": false,
+ "WebGLShader": false,
+ "WebGLShaderPrecisionFormat": false,
+ "WebGLSync": false,
+ "WebGLTexture": false,
+ "WebGLTransformFeedback": false,
+ "WebGLUniformLocation": false,
+ "WebGLVertexArrayObject": false,
+ "WebSocket": false,
+ "WheelEvent": false,
+ "window": false,
+ "Window": false,
+ "Worker": false,
+ "WritableStream": false,
+ "XMLDocument": false,
+ "XMLHttpRequest": false,
+ "XMLHttpRequestEventTarget": false,
+ "XMLHttpRequestUpload": false,
+ "XMLSerializer": false,
+ "XPathEvaluator": false,
+ "XPathExpression": false,
+ "XPathResult": false,
+ "XSLTProcessor": false
+ },
+ "worker": {
+ "addEventListener": false,
+ "applicationCache": false,
+ "atob": false,
+ "Blob": false,
+ "BroadcastChannel": false,
+ "btoa": false,
+ "Cache": false,
+ "caches": false,
+ "clearInterval": false,
+ "clearTimeout": false,
+ "close": true,
+ "console": false,
+ "fetch": false,
+ "FileReaderSync": false,
+ "FormData": false,
+ "Headers": false,
+ "IDBCursor": false,
+ "IDBCursorWithValue": false,
+ "IDBDatabase": false,
+ "IDBFactory": false,
+ "IDBIndex": false,
+ "IDBKeyRange": false,
+ "IDBObjectStore": false,
+ "IDBOpenDBRequest": false,
+ "IDBRequest": false,
+ "IDBTransaction": false,
+ "IDBVersionChangeEvent": false,
+ "ImageData": false,
+ "importScripts": true,
+ "indexedDB": false,
+ "location": false,
+ "MessageChannel": false,
+ "MessagePort": false,
+ "name": false,
+ "navigator": false,
+ "Notification": false,
+ "onclose": true,
+ "onconnect": true,
+ "onerror": true,
+ "onlanguagechange": true,
+ "onmessage": true,
+ "onoffline": true,
+ "ononline": true,
+ "onrejectionhandled": true,
+ "onunhandledrejection": true,
+ "performance": false,
+ "Performance": false,
+ "PerformanceEntry": false,
+ "PerformanceMark": false,
+ "PerformanceMeasure": false,
+ "PerformanceNavigation": false,
+ "PerformanceResourceTiming": false,
+ "PerformanceTiming": false,
+ "postMessage": true,
+ "Promise": false,
+ "queueMicrotask": false,
+ "removeEventListener": false,
+ "Request": false,
+ "Response": false,
+ "self": true,
+ "ServiceWorkerRegistration": false,
+ "setInterval": false,
+ "setTimeout": false,
+ "TextDecoder": false,
+ "TextEncoder": false,
+ "URL": false,
+ "URLSearchParams": false,
+ "WebSocket": false,
+ "Worker": false,
+ "WorkerGlobalScope": false,
+ "XMLHttpRequest": false
+ },
+ "node": {
+ "__dirname": false,
+ "__filename": false,
+ "Buffer": false,
+ "clearImmediate": false,
+ "clearInterval": false,
+ "clearTimeout": false,
+ "console": false,
+ "exports": true,
+ "global": false,
+ "Intl": false,
+ "module": false,
+ "process": false,
+ "queueMicrotask": false,
+ "require": false,
+ "setImmediate": false,
+ "setInterval": false,
+ "setTimeout": false,
+ "TextDecoder": false,
+ "TextEncoder": false,
+ "URL": false,
+ "URLSearchParams": false
+ },
+ "commonjs": {
+ "exports": true,
+ "global": false,
+ "module": false,
+ "require": false
+ },
+ "amd": {
+ "define": false,
+ "require": false
+ },
+ "mocha": {
+ "after": false,
+ "afterEach": false,
+ "before": false,
+ "beforeEach": false,
+ "context": false,
+ "describe": false,
+ "it": false,
+ "mocha": false,
+ "run": false,
+ "setup": false,
+ "specify": false,
+ "suite": false,
+ "suiteSetup": false,
+ "suiteTeardown": false,
+ "teardown": false,
+ "test": false,
+ "xcontext": false,
+ "xdescribe": false,
+ "xit": false,
+ "xspecify": false
+ },
+ "jasmine": {
+ "afterAll": false,
+ "afterEach": false,
+ "beforeAll": false,
+ "beforeEach": false,
+ "describe": false,
+ "expect": false,
+ "fail": false,
+ "fdescribe": false,
+ "fit": false,
+ "it": false,
+ "jasmine": false,
+ "pending": false,
+ "runs": false,
+ "spyOn": false,
+ "spyOnProperty": false,
+ "waits": false,
+ "waitsFor": false,
+ "xdescribe": false,
+ "xit": false
+ },
+ "jest": {
+ "afterAll": false,
+ "afterEach": false,
+ "beforeAll": false,
+ "beforeEach": false,
+ "describe": false,
+ "expect": false,
+ "fdescribe": false,
+ "fit": false,
+ "it": false,
+ "jest": false,
+ "pit": false,
+ "require": false,
+ "test": false,
+ "xdescribe": false,
+ "xit": false,
+ "xtest": false
+ },
+ "qunit": {
+ "asyncTest": false,
+ "deepEqual": false,
+ "equal": false,
+ "expect": false,
+ "module": false,
+ "notDeepEqual": false,
+ "notEqual": false,
+ "notOk": false,
+ "notPropEqual": false,
+ "notStrictEqual": false,
+ "ok": false,
+ "propEqual": false,
+ "QUnit": false,
+ "raises": false,
+ "start": false,
+ "stop": false,
+ "strictEqual": false,
+ "test": false,
+ "throws": false
+ },
+ "phantomjs": {
+ "console": true,
+ "exports": true,
+ "phantom": true,
+ "require": true,
+ "WebPage": true
+ },
+ "couch": {
+ "emit": false,
+ "exports": false,
+ "getRow": false,
+ "log": false,
+ "module": false,
+ "provides": false,
+ "require": false,
+ "respond": false,
+ "send": false,
+ "start": false,
+ "sum": false
+ },
+ "rhino": {
+ "defineClass": false,
+ "deserialize": false,
+ "gc": false,
+ "help": false,
+ "importClass": false,
+ "importPackage": false,
+ "java": false,
+ "load": false,
+ "loadClass": false,
+ "Packages": false,
+ "print": false,
+ "quit": false,
+ "readFile": false,
+ "readUrl": false,
+ "runCommand": false,
+ "seal": false,
+ "serialize": false,
+ "spawn": false,
+ "sync": false,
+ "toint32": false,
+ "version": false
+ },
+ "nashorn": {
+ "__DIR__": false,
+ "__FILE__": false,
+ "__LINE__": false,
+ "com": false,
+ "edu": false,
+ "exit": false,
+ "java": false,
+ "Java": false,
+ "javafx": false,
+ "JavaImporter": false,
+ "javax": false,
+ "JSAdapter": false,
+ "load": false,
+ "loadWithNewGlobal": false,
+ "org": false,
+ "Packages": false,
+ "print": false,
+ "quit": false
+ },
+ "wsh": {
+ "ActiveXObject": true,
+ "Enumerator": true,
+ "GetObject": true,
+ "ScriptEngine": true,
+ "ScriptEngineBuildVersion": true,
+ "ScriptEngineMajorVersion": true,
+ "ScriptEngineMinorVersion": true,
+ "VBArray": true,
+ "WScript": true,
+ "WSH": true,
+ "XDomainRequest": true
+ },
+ "jquery": {
+ "$": false,
+ "jQuery": false
+ },
+ "yui": {
+ "YAHOO": false,
+ "YAHOO_config": false,
+ "YUI": false,
+ "YUI_config": false
+ },
+ "shelljs": {
+ "cat": false,
+ "cd": false,
+ "chmod": false,
+ "config": false,
+ "cp": false,
+ "dirs": false,
+ "echo": false,
+ "env": false,
+ "error": false,
+ "exec": false,
+ "exit": false,
+ "find": false,
+ "grep": false,
+ "ln": false,
+ "ls": false,
+ "mkdir": false,
+ "mv": false,
+ "popd": false,
+ "pushd": false,
+ "pwd": false,
+ "rm": false,
+ "sed": false,
+ "set": false,
+ "target": false,
+ "tempdir": false,
+ "test": false,
+ "touch": false,
+ "which": false
+ },
+ "prototypejs": {
+ "$": false,
+ "$$": false,
+ "$A": false,
+ "$break": false,
+ "$continue": false,
+ "$F": false,
+ "$H": false,
+ "$R": false,
+ "$w": false,
+ "Abstract": false,
+ "Ajax": false,
+ "Autocompleter": false,
+ "Builder": false,
+ "Class": false,
+ "Control": false,
+ "Draggable": false,
+ "Draggables": false,
+ "Droppables": false,
+ "Effect": false,
+ "Element": false,
+ "Enumerable": false,
+ "Event": false,
+ "Field": false,
+ "Form": false,
+ "Hash": false,
+ "Insertion": false,
+ "ObjectRange": false,
+ "PeriodicalExecuter": false,
+ "Position": false,
+ "Prototype": false,
+ "Scriptaculous": false,
+ "Selector": false,
+ "Sortable": false,
+ "SortableObserver": false,
+ "Sound": false,
+ "Template": false,
+ "Toggle": false,
+ "Try": false
+ },
+ "meteor": {
+ "_": false,
+ "$": false,
+ "Accounts": false,
+ "AccountsClient": false,
+ "AccountsCommon": false,
+ "AccountsServer": false,
+ "App": false,
+ "Assets": false,
+ "Blaze": false,
+ "check": false,
+ "Cordova": false,
+ "DDP": false,
+ "DDPRateLimiter": false,
+ "DDPServer": false,
+ "Deps": false,
+ "EJSON": false,
+ "Email": false,
+ "HTTP": false,
+ "Log": false,
+ "Match": false,
+ "Meteor": false,
+ "Mongo": false,
+ "MongoInternals": false,
+ "Npm": false,
+ "Package": false,
+ "Plugin": false,
+ "process": false,
+ "Random": false,
+ "ReactiveDict": false,
+ "ReactiveVar": false,
+ "Router": false,
+ "ServiceConfiguration": false,
+ "Session": false,
+ "share": false,
+ "Spacebars": false,
+ "Template": false,
+ "Tinytest": false,
+ "Tracker": false,
+ "UI": false,
+ "Utils": false,
+ "WebApp": false,
+ "WebAppInternals": false
+ },
+ "mongo": {
+ "_isWindows": false,
+ "_rand": false,
+ "BulkWriteResult": false,
+ "cat": false,
+ "cd": false,
+ "connect": false,
+ "db": false,
+ "getHostName": false,
+ "getMemInfo": false,
+ "hostname": false,
+ "ISODate": false,
+ "listFiles": false,
+ "load": false,
+ "ls": false,
+ "md5sumFile": false,
+ "mkdir": false,
+ "Mongo": false,
+ "NumberInt": false,
+ "NumberLong": false,
+ "ObjectId": false,
+ "PlanCache": false,
+ "print": false,
+ "printjson": false,
+ "pwd": false,
+ "quit": false,
+ "removeFile": false,
+ "rs": false,
+ "sh": false,
+ "UUID": false,
+ "version": false,
+ "WriteResult": false
+ },
+ "applescript": {
+ "$": false,
+ "Application": false,
+ "Automation": false,
+ "console": false,
+ "delay": false,
+ "Library": false,
+ "ObjC": false,
+ "ObjectSpecifier": false,
+ "Path": false,
+ "Progress": false,
+ "Ref": false
+ },
+ "serviceworker": {
+ "addEventListener": false,
+ "applicationCache": false,
+ "atob": false,
+ "Blob": false,
+ "BroadcastChannel": false,
+ "btoa": false,
+ "Cache": false,
+ "caches": false,
+ "CacheStorage": false,
+ "clearInterval": false,
+ "clearTimeout": false,
+ "Client": false,
+ "clients": false,
+ "Clients": false,
+ "close": true,
+ "console": false,
+ "ExtendableEvent": false,
+ "ExtendableMessageEvent": false,
+ "fetch": false,
+ "FetchEvent": false,
+ "FileReaderSync": false,
+ "FormData": false,
+ "Headers": false,
+ "IDBCursor": false,
+ "IDBCursorWithValue": false,
+ "IDBDatabase": false,
+ "IDBFactory": false,
+ "IDBIndex": false,
+ "IDBKeyRange": false,
+ "IDBObjectStore": false,
+ "IDBOpenDBRequest": false,
+ "IDBRequest": false,
+ "IDBTransaction": false,
+ "IDBVersionChangeEvent": false,
+ "ImageData": false,
+ "importScripts": false,
+ "indexedDB": false,
+ "location": false,
+ "MessageChannel": false,
+ "MessagePort": false,
+ "name": false,
+ "navigator": false,
+ "Notification": false,
+ "onclose": true,
+ "onconnect": true,
+ "onerror": true,
+ "onfetch": true,
+ "oninstall": true,
+ "onlanguagechange": true,
+ "onmessage": true,
+ "onmessageerror": true,
+ "onnotificationclick": true,
+ "onnotificationclose": true,
+ "onoffline": true,
+ "ononline": true,
+ "onpush": true,
+ "onpushsubscriptionchange": true,
+ "onrejectionhandled": true,
+ "onsync": true,
+ "onunhandledrejection": true,
+ "performance": false,
+ "Performance": false,
+ "PerformanceEntry": false,
+ "PerformanceMark": false,
+ "PerformanceMeasure": false,
+ "PerformanceNavigation": false,
+ "PerformanceResourceTiming": false,
+ "PerformanceTiming": false,
+ "postMessage": true,
+ "Promise": false,
+ "queueMicrotask": false,
+ "registration": false,
+ "removeEventListener": false,
+ "Request": false,
+ "Response": false,
+ "self": false,
+ "ServiceWorker": false,
+ "ServiceWorkerContainer": false,
+ "ServiceWorkerGlobalScope": false,
+ "ServiceWorkerMessageEvent": false,
+ "ServiceWorkerRegistration": false,
+ "setInterval": false,
+ "setTimeout": false,
+ "skipWaiting": false,
+ "TextDecoder": false,
+ "TextEncoder": false,
+ "URL": false,
+ "URLSearchParams": false,
+ "WebSocket": false,
+ "WindowClient": false,
+ "Worker": false,
+ "WorkerGlobalScope": false,
+ "XMLHttpRequest": false
+ },
+ "atomtest": {
+ "advanceClock": false,
+ "fakeClearInterval": false,
+ "fakeClearTimeout": false,
+ "fakeSetInterval": false,
+ "fakeSetTimeout": false,
+ "resetTimeouts": false,
+ "waitsForPromise": false
+ },
+ "embertest": {
+ "andThen": false,
+ "click": false,
+ "currentPath": false,
+ "currentRouteName": false,
+ "currentURL": false,
+ "fillIn": false,
+ "find": false,
+ "findAll": false,
+ "findWithAssert": false,
+ "keyEvent": false,
+ "pauseTest": false,
+ "resumeTest": false,
+ "triggerEvent": false,
+ "visit": false,
+ "wait": false
+ },
+ "protractor": {
+ "$": false,
+ "$$": false,
+ "browser": false,
+ "by": false,
+ "By": false,
+ "DartObject": false,
+ "element": false,
+ "protractor": false
+ },
+ "shared-node-browser": {
+ "clearInterval": false,
+ "clearTimeout": false,
+ "console": false,
+ "setInterval": false,
+ "setTimeout": false,
+ "URL": false,
+ "URLSearchParams": false
+ },
+ "webextensions": {
+ "browser": false,
+ "chrome": false,
+ "opr": false
+ },
+ "greasemonkey": {
+ "cloneInto": false,
+ "createObjectIn": false,
+ "exportFunction": false,
+ "GM": false,
+ "GM_addStyle": false,
+ "GM_deleteValue": false,
+ "GM_getResourceText": false,
+ "GM_getResourceURL": false,
+ "GM_getValue": false,
+ "GM_info": false,
+ "GM_listValues": false,
+ "GM_log": false,
+ "GM_openInTab": false,
+ "GM_registerMenuCommand": false,
+ "GM_setClipboard": false,
+ "GM_setValue": false,
+ "GM_xmlhttpRequest": false,
+ "unsafeWindow": false
+ },
+ "devtools": {
+ "$": false,
+ "$_": false,
+ "$$": false,
+ "$0": false,
+ "$1": false,
+ "$2": false,
+ "$3": false,
+ "$4": false,
+ "$x": false,
+ "chrome": false,
+ "clear": false,
+ "copy": false,
+ "debug": false,
+ "dir": false,
+ "dirxml": false,
+ "getEventListeners": false,
+ "inspect": false,
+ "keys": false,
+ "monitor": false,
+ "monitorEvents": false,
+ "profile": false,
+ "profileEnd": false,
+ "queryObjects": false,
+ "table": false,
+ "undebug": false,
+ "unmonitor": false,
+ "unmonitorEvents": false,
+ "values": false
+ }
+}
diff --git a/chromium/third_party/node/node_modules/globals/index.js b/chromium/third_party/node/node_modules/globals/index.js
new file mode 100644
index 00000000000..a951582e417
--- /dev/null
+++ b/chromium/third_party/node/node_modules/globals/index.js
@@ -0,0 +1,2 @@
+'use strict';
+module.exports = require('./globals.json');
diff --git a/chromium/third_party/node/node_modules/globals/license b/chromium/third_party/node/node_modules/globals/license
new file mode 100644
index 00000000000..e7af2f77107
--- /dev/null
+++ b/chromium/third_party/node/node_modules/globals/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/globals/package.json b/chromium/third_party/node/node_modules/globals/package.json
new file mode 100644
index 00000000000..dfe459b6fa6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/globals/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "globals",
+ "version": "11.12.0",
+ "description": "Global identifiers from different JavaScript environments",
+ "license": "MIT",
+ "repository": "sindresorhus/globals",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js",
+ "globals.json"
+ ],
+ "keywords": [
+ "globals",
+ "global",
+ "identifiers",
+ "variables",
+ "vars",
+ "jshint",
+ "eslint",
+ "environments"
+ ],
+ "devDependencies": {
+ "ava": "0.21.0",
+ "xo": "0.18.0"
+ },
+ "xo": {
+ "ignores": [
+ "get-browser-globals.js"
+ ]
+ }
+}
diff --git a/chromium/third_party/node/node_modules/has-flag/index.js b/chromium/third_party/node/node_modules/has-flag/index.js
new file mode 100644
index 00000000000..5139728fba6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/has-flag/index.js
@@ -0,0 +1,8 @@
+'use strict';
+module.exports = (flag, argv) => {
+ argv = argv || process.argv;
+ const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
+ const pos = argv.indexOf(prefix + flag);
+ const terminatorPos = argv.indexOf('--');
+ return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
+};
diff --git a/chromium/third_party/node/node_modules/has-flag/license b/chromium/third_party/node/node_modules/has-flag/license
new file mode 100644
index 00000000000..e7af2f77107
--- /dev/null
+++ b/chromium/third_party/node/node_modules/has-flag/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/has-flag/package.json b/chromium/third_party/node/node_modules/has-flag/package.json
new file mode 100644
index 00000000000..e1eb17a15ed
--- /dev/null
+++ b/chromium/third_party/node/node_modules/has-flag/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "has-flag",
+ "version": "3.0.0",
+ "description": "Check if argv has a specific flag",
+ "license": "MIT",
+ "repository": "sindresorhus/has-flag",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "has",
+ "check",
+ "detect",
+ "contains",
+ "find",
+ "flag",
+ "cli",
+ "command-line",
+ "argv",
+ "process",
+ "arg",
+ "args",
+ "argument",
+ "arguments",
+ "getopt",
+ "minimist",
+ "optimist"
+ ],
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/has/LICENSE-MIT b/chromium/third_party/node/node_modules/has/LICENSE-MIT
new file mode 100644
index 00000000000..ae7014d385d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/has/LICENSE-MIT
@@ -0,0 +1,22 @@
+Copyright (c) 2013 Thiago de Arruda
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/has/package.json b/chromium/third_party/node/node_modules/has/package.json
new file mode 100644
index 00000000000..7c4592f16de
--- /dev/null
+++ b/chromium/third_party/node/node_modules/has/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "has",
+ "description": "Object.prototype.hasOwnProperty.call shortcut",
+ "version": "1.0.3",
+ "homepage": "https://github.com/tarruda/has",
+ "author": {
+ "name": "Thiago de Arruda",
+ "email": "tpadilha84@gmail.com"
+ },
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "email": "ljharb@gmail.com",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/tarruda/has.git"
+ },
+ "bugs": {
+ "url": "https://github.com/tarruda/has/issues"
+ },
+ "license": "MIT",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/tarruda/has/blob/master/LICENSE-MIT"
+ }
+ ],
+ "main": "./src",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^12.2.1",
+ "eslint": "^4.19.1",
+ "tape": "^4.9.0"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "tape test"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/has/src/index.js b/chromium/third_party/node/node_modules/has/src/index.js
new file mode 100644
index 00000000000..dd92dd9094e
--- /dev/null
+++ b/chromium/third_party/node/node_modules/has/src/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+var bind = require('function-bind');
+
+module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);
diff --git a/chromium/third_party/node/node_modules/is-core-module/LICENSE b/chromium/third_party/node/node_modules/is-core-module/LICENSE
new file mode 100644
index 00000000000..2e502872a74
--- /dev/null
+++ b/chromium/third_party/node/node_modules/is-core-module/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Dave Justice
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/chromium/third_party/node/node_modules/is-core-module/core.json b/chromium/third_party/node/node_modules/is-core-module/core.json
new file mode 100644
index 00000000000..5cd90d1732b
--- /dev/null
+++ b/chromium/third_party/node/node_modules/is-core-module/core.json
@@ -0,0 +1,150 @@
+{
+ "assert": true,
+ "node:assert": [">= 14.18 && < 15", ">= 16"],
+ "assert/strict": ">= 15",
+ "node:assert/strict": ">= 16",
+ "async_hooks": ">= 8",
+ "node:async_hooks": [">= 14.18 && < 15", ">= 16"],
+ "buffer_ieee754": "< 0.9.7",
+ "buffer": true,
+ "node:buffer": [">= 14.18 && < 15", ">= 16"],
+ "child_process": true,
+ "node:child_process": [">= 14.18 && < 15", ">= 16"],
+ "cluster": true,
+ "node:cluster": [">= 14.18 && < 15", ">= 16"],
+ "console": true,
+ "node:console": [">= 14.18 && < 15", ">= 16"],
+ "constants": true,
+ "node:constants": [">= 14.18 && < 15", ">= 16"],
+ "crypto": true,
+ "node:crypto": [">= 14.18 && < 15", ">= 16"],
+ "_debug_agent": ">= 1 && < 8",
+ "_debugger": "< 8",
+ "dgram": true,
+ "node:dgram": [">= 14.18 && < 15", ">= 16"],
+ "diagnostics_channel": [">= 14.17 && < 15", ">= 15.1"],
+ "node:diagnostics_channel": [">= 14.18 && < 15", ">= 16"],
+ "dns": true,
+ "node:dns": [">= 14.18 && < 15", ">= 16"],
+ "dns/promises": ">= 15",
+ "node:dns/promises": ">= 16",
+ "domain": ">= 0.7.12",
+ "node:domain": [">= 14.18 && < 15", ">= 16"],
+ "events": true,
+ "node:events": [">= 14.18 && < 15", ">= 16"],
+ "freelist": "< 6",
+ "fs": true,
+ "node:fs": [">= 14.18 && < 15", ">= 16"],
+ "fs/promises": [">= 10 && < 10.1", ">= 14"],
+ "node:fs/promises": [">= 14.18 && < 15", ">= 16"],
+ "_http_agent": ">= 0.11.1",
+ "node:_http_agent": [">= 14.18 && < 15", ">= 16"],
+ "_http_client": ">= 0.11.1",
+ "node:_http_client": [">= 14.18 && < 15", ">= 16"],
+ "_http_common": ">= 0.11.1",
+ "node:_http_common": [">= 14.18 && < 15", ">= 16"],
+ "_http_incoming": ">= 0.11.1",
+ "node:_http_incoming": [">= 14.18 && < 15", ">= 16"],
+ "_http_outgoing": ">= 0.11.1",
+ "node:_http_outgoing": [">= 14.18 && < 15", ">= 16"],
+ "_http_server": ">= 0.11.1",
+ "node:_http_server": [">= 14.18 && < 15", ">= 16"],
+ "http": true,
+ "node:http": [">= 14.18 && < 15", ">= 16"],
+ "http2": ">= 8.8",
+ "node:http2": [">= 14.18 && < 15", ">= 16"],
+ "https": true,
+ "node:https": [">= 14.18 && < 15", ">= 16"],
+ "inspector": ">= 8",
+ "node:inspector": [">= 14.18 && < 15", ">= 16"],
+ "_linklist": "< 8",
+ "module": true,
+ "node:module": [">= 14.18 && < 15", ">= 16"],
+ "net": true,
+ "node:net": [">= 14.18 && < 15", ">= 16"],
+ "node-inspect/lib/_inspect": ">= 7.6 && < 12",
+ "node-inspect/lib/internal/inspect_client": ">= 7.6 && < 12",
+ "node-inspect/lib/internal/inspect_repl": ">= 7.6 && < 12",
+ "os": true,
+ "node:os": [">= 14.18 && < 15", ">= 16"],
+ "path": true,
+ "node:path": [">= 14.18 && < 15", ">= 16"],
+ "path/posix": ">= 15.3",
+ "node:path/posix": ">= 16",
+ "path/win32": ">= 15.3",
+ "node:path/win32": ">= 16",
+ "perf_hooks": ">= 8.5",
+ "node:perf_hooks": [">= 14.18 && < 15", ">= 16"],
+ "process": ">= 1",
+ "node:process": [">= 14.18 && < 15", ">= 16"],
+ "punycode": true,
+ "node:punycode": [">= 14.18 && < 15", ">= 16"],
+ "querystring": true,
+ "node:querystring": [">= 14.18 && < 15", ">= 16"],
+ "readline": true,
+ "node:readline": [">= 14.18 && < 15", ">= 16"],
+ "repl": true,
+ "node:repl": [">= 14.18 && < 15", ">= 16"],
+ "smalloc": ">= 0.11.5 && < 3",
+ "_stream_duplex": ">= 0.9.4",
+ "node:_stream_duplex": [">= 14.18 && < 15", ">= 16"],
+ "_stream_transform": ">= 0.9.4",
+ "node:_stream_transform": [">= 14.18 && < 15", ">= 16"],
+ "_stream_wrap": ">= 1.4.1",
+ "node:_stream_wrap": [">= 14.18 && < 15", ">= 16"],
+ "_stream_passthrough": ">= 0.9.4",
+ "node:_stream_passthrough": [">= 14.18 && < 15", ">= 16"],
+ "_stream_readable": ">= 0.9.4",
+ "node:_stream_readable": [">= 14.18 && < 15", ">= 16"],
+ "_stream_writable": ">= 0.9.4",
+ "node:_stream_writable": [">= 14.18 && < 15", ">= 16"],
+ "stream": true,
+ "node:stream": [">= 14.18 && < 15", ">= 16"],
+ "stream/consumers": ">= 16.7",
+ "node:stream/consumers": ">= 16.7",
+ "stream/promises": ">= 15",
+ "node:stream/promises": ">= 16",
+ "stream/web": ">= 16.5",
+ "node:stream/web": ">= 16.5",
+ "string_decoder": true,
+ "node:string_decoder": [">= 14.18 && < 15", ">= 16"],
+ "sys": [">= 0.6 && < 0.7", ">= 0.8"],
+ "node:sys": [">= 14.18 && < 15", ">= 16"],
+ "timers": true,
+ "node:timers": [">= 14.18 && < 15", ">= 16"],
+ "timers/promises": ">= 15",
+ "node:timers/promises": ">= 16",
+ "_tls_common": ">= 0.11.13",
+ "node:_tls_common": [">= 14.18 && < 15", ">= 16"],
+ "_tls_legacy": ">= 0.11.3 && < 10",
+ "_tls_wrap": ">= 0.11.3",
+ "node:_tls_wrap": [">= 14.18 && < 15", ">= 16"],
+ "tls": true,
+ "node:tls": [">= 14.18 && < 15", ">= 16"],
+ "trace_events": ">= 10",
+ "node:trace_events": [">= 14.18 && < 15", ">= 16"],
+ "tty": true,
+ "node:tty": [">= 14.18 && < 15", ">= 16"],
+ "url": true,
+ "node:url": [">= 14.18 && < 15", ">= 16"],
+ "util": true,
+ "node:util": [">= 14.18 && < 15", ">= 16"],
+ "util/types": ">= 15.3",
+ "node:util/types": ">= 16",
+ "v8/tools/arguments": ">= 10 && < 12",
+ "v8/tools/codemap": [">= 4.4 && < 5", ">= 5.2 && < 12"],
+ "v8/tools/consarray": [">= 4.4 && < 5", ">= 5.2 && < 12"],
+ "v8/tools/csvparser": [">= 4.4 && < 5", ">= 5.2 && < 12"],
+ "v8/tools/logreader": [">= 4.4 && < 5", ">= 5.2 && < 12"],
+ "v8/tools/profile_view": [">= 4.4 && < 5", ">= 5.2 && < 12"],
+ "v8/tools/splaytree": [">= 4.4 && < 5", ">= 5.2 && < 12"],
+ "v8": ">= 1",
+ "node:v8": [">= 14.18 && < 15", ">= 16"],
+ "vm": true,
+ "node:vm": [">= 14.18 && < 15", ">= 16"],
+ "wasi": ">= 13.4 && < 13.5",
+ "worker_threads": ">= 11.7",
+ "node:worker_threads": [">= 14.18 && < 15", ">= 16"],
+ "zlib": true,
+ "node:zlib": [">= 14.18 && < 15", ">= 16"]
+}
diff --git a/chromium/third_party/node/node_modules/is-core-module/index.js b/chromium/third_party/node/node_modules/is-core-module/index.js
new file mode 100644
index 00000000000..f9637e0e7d3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/is-core-module/index.js
@@ -0,0 +1,69 @@
+'use strict';
+
+var has = require('has');
+
+function specifierIncluded(current, specifier) {
+ var nodeParts = current.split('.');
+ var parts = specifier.split(' ');
+ var op = parts.length > 1 ? parts[0] : '=';
+ var versionParts = (parts.length > 1 ? parts[1] : parts[0]).split('.');
+
+ for (var i = 0; i < 3; ++i) {
+ var cur = parseInt(nodeParts[i] || 0, 10);
+ var ver = parseInt(versionParts[i] || 0, 10);
+ if (cur === ver) {
+ continue; // eslint-disable-line no-restricted-syntax, no-continue
+ }
+ if (op === '<') {
+ return cur < ver;
+ }
+ if (op === '>=') {
+ return cur >= ver;
+ }
+ return false;
+ }
+ return op === '>=';
+}
+
+function matchesRange(current, range) {
+ var specifiers = range.split(/ ?&& ?/);
+ if (specifiers.length === 0) {
+ return false;
+ }
+ for (var i = 0; i < specifiers.length; ++i) {
+ if (!specifierIncluded(current, specifiers[i])) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function versionIncluded(nodeVersion, specifierValue) {
+ if (typeof specifierValue === 'boolean') {
+ return specifierValue;
+ }
+
+ var current = typeof nodeVersion === 'undefined'
+ ? process.versions && process.versions.node
+ : nodeVersion;
+
+ if (typeof current !== 'string') {
+ throw new TypeError(typeof nodeVersion === 'undefined' ? 'Unable to determine current node version' : 'If provided, a valid node version is required');
+ }
+
+ if (specifierValue && typeof specifierValue === 'object') {
+ for (var i = 0; i < specifierValue.length; ++i) {
+ if (matchesRange(current, specifierValue[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return matchesRange(current, specifierValue);
+}
+
+var data = require('./core.json');
+
+module.exports = function isCore(x, nodeVersion) {
+ return has(data, x) && versionIncluded(nodeVersion, data[x]);
+};
diff --git a/chromium/third_party/node/node_modules/is-core-module/package.json b/chromium/third_party/node/node_modules/is-core-module/package.json
new file mode 100644
index 00000000000..2b58b2332cd
--- /dev/null
+++ b/chromium/third_party/node/node_modules/is-core-module/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "is-core-module",
+ "version": "2.7.0",
+ "description": "Is this specifier a node.js core module?",
+ "main": "index.js",
+ "sideEffects": false,
+ "exports": {
+ ".": [
+ {
+ "default": "./index.js"
+ },
+ "./index.js"
+ ],
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "prepublishOnly": "safe-publish-latest",
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "tests-only": "tape 'test/**/*.js'",
+ "test": "nyc npm run tests-only",
+ "posttest": "aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/inspect-js/is-core-module.git"
+ },
+ "keywords": [
+ "core",
+ "modules",
+ "module",
+ "npm",
+ "node",
+ "dependencies"
+ ],
+ "author": "Jordan Harband <ljharb@gmail.com>",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/inspect-js/is-core-module/issues"
+ },
+ "homepage": "https://github.com/inspect-js/is-core-module",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^18.0.0",
+ "aud": "^1.1.5",
+ "auto-changelog": "^2.3.0",
+ "eslint": "^7.32.0",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^1.1.4",
+ "semver": "^6.3.0",
+ "tape": "^5.3.1"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/chromium/third_party/node/node_modules/js-tokens/LICENSE b/chromium/third_party/node/node_modules/js-tokens/LICENSE
new file mode 100644
index 00000000000..54aef52f3a4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/js-tokens/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/js-tokens/index.js b/chromium/third_party/node/node_modules/js-tokens/index.js
new file mode 100644
index 00000000000..b23a4a0e7f4
--- /dev/null
+++ b/chromium/third_party/node/node_modules/js-tokens/index.js
@@ -0,0 +1,23 @@
+// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell
+// License: MIT. (See LICENSE.)
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+})
+
+// This regex comes from regex.coffee, and is inserted here by generate-index.js
+// (run `npm run build`).
+exports.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g
+
+exports.matchToToken = function(match) {
+ var token = {type: "invalid", value: match[0], closed: undefined}
+ if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4])
+ else if (match[ 5]) token.type = "comment"
+ else if (match[ 6]) token.type = "comment", token.closed = !!match[7]
+ else if (match[ 8]) token.type = "regex"
+ else if (match[ 9]) token.type = "number"
+ else if (match[10]) token.type = "name"
+ else if (match[11]) token.type = "punctuator"
+ else if (match[12]) token.type = "whitespace"
+ return token
+}
diff --git a/chromium/third_party/node/node_modules/js-tokens/package.json b/chromium/third_party/node/node_modules/js-tokens/package.json
new file mode 100644
index 00000000000..66752fab275
--- /dev/null
+++ b/chromium/third_party/node/node_modules/js-tokens/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "js-tokens",
+ "version": "4.0.0",
+ "author": "Simon Lydell",
+ "license": "MIT",
+ "description": "A regex that tokenizes JavaScript.",
+ "keywords": [
+ "JavaScript",
+ "js",
+ "token",
+ "tokenize",
+ "regex"
+ ],
+ "files": [
+ "index.js"
+ ],
+ "repository": "lydell/js-tokens",
+ "scripts": {
+ "test": "mocha --ui tdd",
+ "esprima-compare": "node esprima-compare ./index.js everything.js/es5.js",
+ "build": "node generate-index.js",
+ "dev": "npm run build && npm test"
+ },
+ "devDependencies": {
+ "coffeescript": "2.1.1",
+ "esprima": "4.0.0",
+ "everything.js": "1.0.3",
+ "mocha": "5.0.0"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/jsesc/LICENSE-MIT.txt b/chromium/third_party/node/node_modules/jsesc/LICENSE-MIT.txt
new file mode 100644
index 00000000000..a41e0a7ef97
--- /dev/null
+++ b/chromium/third_party/node/node_modules/jsesc/LICENSE-MIT.txt
@@ -0,0 +1,20 @@
+Copyright Mathias Bynens <https://mathiasbynens.be/>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/jsesc/bin/jsesc b/chromium/third_party/node/node_modules/jsesc/bin/jsesc
new file mode 100755
index 00000000000..e9a541db322
--- /dev/null
+++ b/chromium/third_party/node/node_modules/jsesc/bin/jsesc
@@ -0,0 +1,148 @@
+#!/usr/bin/env node
+(function() {
+
+ var fs = require('fs');
+ var stringEscape = require('../jsesc.js');
+ var strings = process.argv.splice(2);
+ var stdin = process.stdin;
+ var data;
+ var timeout;
+ var isObject = false;
+ var options = {};
+ var log = console.log;
+
+ var main = function() {
+ var option = strings[0];
+
+ if (/^(?:-h|--help|undefined)$/.test(option)) {
+ log(
+ 'jsesc v%s - https://mths.be/jsesc',
+ stringEscape.version
+ );
+ log([
+ '\nUsage:\n',
+ '\tjsesc [string]',
+ '\tjsesc [-s | --single-quotes] [string]',
+ '\tjsesc [-d | --double-quotes] [string]',
+ '\tjsesc [-w | --wrap] [string]',
+ '\tjsesc [-e | --escape-everything] [string]',
+ '\tjsesc [-t | --escape-etago] [string]',
+ '\tjsesc [-6 | --es6] [string]',
+ '\tjsesc [-l | --lowercase-hex] [string]',
+ '\tjsesc [-j | --json] [string]',
+ '\tjsesc [-o | --object] [stringified_object]', // `JSON.parse()` the argument
+ '\tjsesc [-p | --pretty] [string]', // `compact: false`
+ '\tjsesc [-v | --version]',
+ '\tjsesc [-h | --help]',
+ '\nExamples:\n',
+ '\tjsesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
+ '\tjsesc --json \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
+ '\tjsesc --json --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
+ '\tjsesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
+ '\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | jsesc'
+ ].join('\n'));
+ return process.exit(1);
+ }
+
+ if (/^(?:-v|--version)$/.test(option)) {
+ log('v%s', stringEscape.version);
+ return process.exit(1);
+ }
+
+ strings.forEach(function(string) {
+ // Process options
+ if (/^(?:-s|--single-quotes)$/.test(string)) {
+ options.quotes = 'single';
+ return;
+ }
+ if (/^(?:-d|--double-quotes)$/.test(string)) {
+ options.quotes = 'double';
+ return;
+ }
+ if (/^(?:-w|--wrap)$/.test(string)) {
+ options.wrap = true;
+ return;
+ }
+ if (/^(?:-e|--escape-everything)$/.test(string)) {
+ options.escapeEverything = true;
+ return;
+ }
+ if (/^(?:-t|--escape-etago)$/.test(string)) {
+ options.escapeEtago = true;
+ return;
+ }
+ if (/^(?:-6|--es6)$/.test(string)) {
+ options.es6 = true;
+ return;
+ }
+ if (/^(?:-l|--lowercase-hex)$/.test(string)) {
+ options.lowercaseHex = true;
+ return;
+ }
+ if (/^(?:-j|--json)$/.test(string)) {
+ options.json = true;
+ return;
+ }
+ if (/^(?:-o|--object)$/.test(string)) {
+ isObject = true;
+ return;
+ }
+ if (/^(?:-p|--pretty)$/.test(string)) {
+ isObject = true;
+ options.compact = false;
+ return;
+ }
+
+ // Process string(s)
+ var result;
+ try {
+ if (isObject) {
+ string = JSON.parse(string);
+ }
+ result = stringEscape(string, options);
+ log(result);
+ } catch(error) {
+ log(error.message + '\n');
+ log('Error: failed to escape.');
+ log('If you think this is a bug in jsesc, please report it:');
+ log('https://github.com/mathiasbynens/jsesc/issues/new');
+ log(
+ '\nStack trace using jsesc@%s:\n',
+ stringEscape.version
+ );
+ log(error.stack);
+ return process.exit(1);
+ }
+ });
+ // Return with exit status 0 outside of the `forEach` loop, in case
+ // multiple strings were passed in.
+ return process.exit(0);
+
+ };
+
+ if (stdin.isTTY) {
+ // handle shell arguments
+ main();
+ } else {
+ // Either the script is called from within a non-TTY context,
+ // or `stdin` content is being piped in.
+ if (!process.stdout.isTTY) { // called from a non-TTY context
+ timeout = setTimeout(function() {
+ // if no piped data arrived after a while, handle shell arguments
+ main();
+ }, 250);
+ }
+
+ data = '';
+ stdin.on('data', function(chunk) {
+ clearTimeout(timeout);
+ data += chunk;
+ });
+ stdin.on('end', function() {
+ strings.push(data.trim());
+ main();
+ });
+ stdin.resume();
+ }
+
+}());
diff --git a/chromium/third_party/node/node_modules/jsesc/jsesc.js b/chromium/third_party/node/node_modules/jsesc/jsesc.js
new file mode 100644
index 00000000000..7b8b9236144
--- /dev/null
+++ b/chromium/third_party/node/node_modules/jsesc/jsesc.js
@@ -0,0 +1,329 @@
+'use strict';
+
+const object = {};
+const hasOwnProperty = object.hasOwnProperty;
+const forOwn = (object, callback) => {
+ for (const key in object) {
+ if (hasOwnProperty.call(object, key)) {
+ callback(key, object[key]);
+ }
+ }
+};
+
+const extend = (destination, source) => {
+ if (!source) {
+ return destination;
+ }
+ forOwn(source, (key, value) => {
+ destination[key] = value;
+ });
+ return destination;
+};
+
+const forEach = (array, callback) => {
+ const length = array.length;
+ let index = -1;
+ while (++index < length) {
+ callback(array[index]);
+ }
+};
+
+const toString = object.toString;
+const isArray = Array.isArray;
+const isBuffer = Buffer.isBuffer;
+const isObject = (value) => {
+ // This is a very simple check, but it’s good enough for what we need.
+ return toString.call(value) == '[object Object]';
+};
+const isString = (value) => {
+ return typeof value == 'string' ||
+ toString.call(value) == '[object String]';
+};
+const isNumber = (value) => {
+ return typeof value == 'number' ||
+ toString.call(value) == '[object Number]';
+};
+const isFunction = (value) => {
+ return typeof value == 'function';
+};
+const isMap = (value) => {
+ return toString.call(value) == '[object Map]';
+};
+const isSet = (value) => {
+ return toString.call(value) == '[object Set]';
+};
+
+/*--------------------------------------------------------------------------*/
+
+// https://mathiasbynens.be/notes/javascript-escapes#single
+const singleEscapes = {
+ '"': '\\"',
+ '\'': '\\\'',
+ '\\': '\\\\',
+ '\b': '\\b',
+ '\f': '\\f',
+ '\n': '\\n',
+ '\r': '\\r',
+ '\t': '\\t'
+ // `\v` is omitted intentionally, because in IE < 9, '\v' == 'v'.
+ // '\v': '\\x0B'
+};
+const regexSingleEscape = /["'\\\b\f\n\r\t]/;
+
+const regexDigit = /[0-9]/;
+const regexWhitelist = /[ !#-&\(-\[\]-_a-~]/;
+
+const jsesc = (argument, options) => {
+ const increaseIndentation = () => {
+ oldIndent = indent;
+ ++options.indentLevel;
+ indent = options.indent.repeat(options.indentLevel)
+ };
+ // Handle options
+ const defaults = {
+ 'escapeEverything': false,
+ 'minimal': false,
+ 'isScriptContext': false,
+ 'quotes': 'single',
+ 'wrap': false,
+ 'es6': false,
+ 'json': false,
+ 'compact': true,
+ 'lowercaseHex': false,
+ 'numbers': 'decimal',
+ 'indent': '\t',
+ 'indentLevel': 0,
+ '__inline1__': false,
+ '__inline2__': false
+ };
+ const json = options && options.json;
+ if (json) {
+ defaults.quotes = 'double';
+ defaults.wrap = true;
+ }
+ options = extend(defaults, options);
+ if (
+ options.quotes != 'single' &&
+ options.quotes != 'double' &&
+ options.quotes != 'backtick'
+ ) {
+ options.quotes = 'single';
+ }
+ const quote = options.quotes == 'double' ?
+ '"' :
+ (options.quotes == 'backtick' ?
+ '`' :
+ '\''
+ );
+ const compact = options.compact;
+ const lowercaseHex = options.lowercaseHex;
+ let indent = options.indent.repeat(options.indentLevel);
+ let oldIndent = '';
+ const inline1 = options.__inline1__;
+ const inline2 = options.__inline2__;
+ const newLine = compact ? '' : '\n';
+ let result;
+ let isEmpty = true;
+ const useBinNumbers = options.numbers == 'binary';
+ const useOctNumbers = options.numbers == 'octal';
+ const useDecNumbers = options.numbers == 'decimal';
+ const useHexNumbers = options.numbers == 'hexadecimal';
+
+ if (json && argument && isFunction(argument.toJSON)) {
+ argument = argument.toJSON();
+ }
+
+ if (!isString(argument)) {
+ if (isMap(argument)) {
+ if (argument.size == 0) {
+ return 'new Map()';
+ }
+ if (!compact) {
+ options.__inline1__ = true;
+ options.__inline2__ = false;
+ }
+ return 'new Map(' + jsesc(Array.from(argument), options) + ')';
+ }
+ if (isSet(argument)) {
+ if (argument.size == 0) {
+ return 'new Set()';
+ }
+ return 'new Set(' + jsesc(Array.from(argument), options) + ')';
+ }
+ if (isBuffer(argument)) {
+ if (argument.length == 0) {
+ return 'Buffer.from([])';
+ }
+ return 'Buffer.from(' + jsesc(Array.from(argument), options) + ')';
+ }
+ if (isArray(argument)) {
+ result = [];
+ options.wrap = true;
+ if (inline1) {
+ options.__inline1__ = false;
+ options.__inline2__ = true;
+ }
+ if (!inline2) {
+ increaseIndentation();
+ }
+ forEach(argument, (value) => {
+ isEmpty = false;
+ if (inline2) {
+ options.__inline2__ = false;
+ }
+ result.push(
+ (compact || inline2 ? '' : indent) +
+ jsesc(value, options)
+ );
+ });
+ if (isEmpty) {
+ return '[]';
+ }
+ if (inline2) {
+ return '[' + result.join(', ') + ']';
+ }
+ return '[' + newLine + result.join(',' + newLine) + newLine +
+ (compact ? '' : oldIndent) + ']';
+ } else if (isNumber(argument)) {
+ if (json) {
+ // Some number values (e.g. `Infinity`) cannot be represented in JSON.
+ return JSON.stringify(argument);
+ }
+ if (useDecNumbers) {
+ return String(argument);
+ }
+ if (useHexNumbers) {
+ let hexadecimal = argument.toString(16);
+ if (!lowercaseHex) {
+ hexadecimal = hexadecimal.toUpperCase();
+ }
+ return '0x' + hexadecimal;
+ }
+ if (useBinNumbers) {
+ return '0b' + argument.toString(2);
+ }
+ if (useOctNumbers) {
+ return '0o' + argument.toString(8);
+ }
+ } else if (!isObject(argument)) {
+ if (json) {
+ // For some values (e.g. `undefined`, `function` objects),
+ // `JSON.stringify(value)` returns `undefined` (which isn’t valid
+ // JSON) instead of `'null'`.
+ return JSON.stringify(argument) || 'null';
+ }
+ return String(argument);
+ } else { // it’s an object
+ result = [];
+ options.wrap = true;
+ increaseIndentation();
+ forOwn(argument, (key, value) => {
+ isEmpty = false;
+ result.push(
+ (compact ? '' : indent) +
+ jsesc(key, options) + ':' +
+ (compact ? '' : ' ') +
+ jsesc(value, options)
+ );
+ });
+ if (isEmpty) {
+ return '{}';
+ }
+ return '{' + newLine + result.join(',' + newLine) + newLine +
+ (compact ? '' : oldIndent) + '}';
+ }
+ }
+
+ const string = argument;
+ // Loop over each code unit in the string and escape it
+ let index = -1;
+ const length = string.length;
+ result = '';
+ while (++index < length) {
+ const character = string.charAt(index);
+ if (options.es6) {
+ const first = string.charCodeAt(index);
+ if ( // check if it’s the start of a surrogate pair
+ first >= 0xD800 && first <= 0xDBFF && // high surrogate
+ length > index + 1 // there is a next code unit
+ ) {
+ const second = string.charCodeAt(index + 1);
+ if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ const codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+ let hexadecimal = codePoint.toString(16);
+ if (!lowercaseHex) {
+ hexadecimal = hexadecimal.toUpperCase();
+ }
+ result += '\\u{' + hexadecimal + '}';
+ ++index;
+ continue;
+ }
+ }
+ }
+ if (!options.escapeEverything) {
+ if (regexWhitelist.test(character)) {
+ // It’s a printable ASCII character that is not `"`, `'` or `\`,
+ // so don’t escape it.
+ result += character;
+ continue;
+ }
+ if (character == '"') {
+ result += quote == character ? '\\"' : character;
+ continue;
+ }
+ if (character == '`') {
+ result += quote == character ? '\\`' : character;
+ continue;
+ }
+ if (character == '\'') {
+ result += quote == character ? '\\\'' : character;
+ continue;
+ }
+ }
+ if (
+ character == '\0' &&
+ !json &&
+ !regexDigit.test(string.charAt(index + 1))
+ ) {
+ result += '\\0';
+ continue;
+ }
+ if (regexSingleEscape.test(character)) {
+ // no need for a `hasOwnProperty` check here
+ result += singleEscapes[character];
+ continue;
+ }
+ const charCode = character.charCodeAt(0);
+ if (options.minimal && charCode != 0x2028 && charCode != 0x2029) {
+ result += character;
+ continue;
+ }
+ let hexadecimal = charCode.toString(16);
+ if (!lowercaseHex) {
+ hexadecimal = hexadecimal.toUpperCase();
+ }
+ const longhand = hexadecimal.length > 2 || json;
+ const escaped = '\\' + (longhand ? 'u' : 'x') +
+ ('0000' + hexadecimal).slice(longhand ? -4 : -2);
+ result += escaped;
+ continue;
+ }
+ if (options.wrap) {
+ result = quote + result + quote;
+ }
+ if (quote == '`') {
+ result = result.replace(/\$\{/g, '\\\$\{');
+ }
+ if (options.isScriptContext) {
+ // https://mathiasbynens.be/notes/etago
+ return result
+ .replace(/<\/(script|style)/gi, '<\\/$1')
+ .replace(/<!--/g, json ? '\\u003C!--' : '\\x3C!--');
+ }
+ return result;
+};
+
+jsesc.version = '2.5.2';
+
+module.exports = jsesc;
diff --git a/chromium/third_party/node/node_modules/jsesc/man/jsesc.1 b/chromium/third_party/node/node_modules/jsesc/man/jsesc.1
new file mode 100644
index 00000000000..2655ee7ae79
--- /dev/null
+++ b/chromium/third_party/node/node_modules/jsesc/man/jsesc.1
@@ -0,0 +1,94 @@
+.Dd May 13, 2016
+.Dt jsesc 1
+.Sh NAME
+.Nm jsesc
+.Nd escape strings for use in JavaScript string literals
+.Sh SYNOPSIS
+.Nm
+.Op Fl s | -single-quotes Ar string
+.br
+.Op Fl d | -double-quotes Ar string
+.br
+.Op Fl w | -wrap Ar string
+.br
+.Op Fl e | -escape-everything Ar string
+.br
+.Op Fl 6 | -es6 Ar string
+.br
+.Op Fl l | -lowercase-hex Ar string
+.br
+.Op Fl j | -json Ar string
+.br
+.Op Fl p | -object Ar string
+.br
+.Op Fl p | -pretty Ar string
+.br
+.Op Fl v | -version
+.br
+.Op Fl h | -help
+.Sh DESCRIPTION
+.Nm
+escapes strings for use in JavaScript string literals while generating the shortest possible valid ASCII-only output.
+.Sh OPTIONS
+.Bl -ohang -offset
+.It Sy "-s, --single-quotes"
+Escape any occurrences of ' in the input string as \\', so that the output can be used in a JavaScript string literal wrapped in single quotes.
+.It Sy "-d, --double-quotes"
+Escape any occurrences of " in the input string as \\", so that the output can be used in a JavaScript string literal wrapped in double quotes.
+.It Sy "-w, --wrap"
+Make sure the output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified using the
+.Ar -s | --single-quotes
+or
+.Ar -d | --double-quotes
+settings.
+.It Sy "-6, --es6"
+Escape any astral Unicode symbols using ECMAScript 6 Unicode code point escape sequences.
+.It Sy "-e, --escape-everything"
+Escape all the symbols in the output, even printable ASCII symbols.
+.It Sy "-j, --json"
+Make sure the output is valid JSON. Hexadecimal character escape sequences and the \\v or \\0 escape sequences will not be used. Setting this flag enables the
+.Ar -d | --double-quotes
+and
+.Ar -w | --wrap
+settings.
+.It Sy "-o, --object"
+Treat the input as a JavaScript object rather than a string. Accepted values are flat arrays containing only string values, and flat objects containing only string values.
+.It Sy "-p, --pretty"
+Pretty-print the output for objects, using whitespace to make it more readable. Setting this flag enables the
+.It Sy "-l, --lowercase-hex"
+Use lowercase for alphabetical hexadecimal digits in escape sequences.
+.Ar -o | --object
+setting.
+.It Sy "-v, --version"
+Print jsesc's version.
+.It Sy "-h, --help"
+Show the help screen.
+.El
+.Sh EXIT STATUS
+The
+.Nm jsesc
+utility exits with one of the following values:
+.Pp
+.Bl -tag -width flag -compact
+.It Li 0
+.Nm
+successfully escaped the given string and printed the result.
+.It Li 1
+.Nm
+wasn't instructed to escape anything (for example, the
+.Ar --help
+flag was set); or, an error occurred.
+.El
+.Sh EXAMPLES
+.Bl -ohang -offset
+.It Sy "jsesc 'foo bar baz'"
+Print an escaped version of the given string.
+.It Sy echo\ 'foo bar baz'\ |\ jsesc
+Print an escaped version of the string that gets piped in.
+.El
+.Sh BUGS
+jsesc's bug tracker is located at <https://github.com/mathiasbynens/jsesc/issues>.
+.Sh AUTHOR
+Mathias Bynens <https://mathiasbynens.be/>
+.Sh WWW
+<https://mths.be/jsesc>
diff --git a/chromium/third_party/node/node_modules/jsesc/package.json b/chromium/third_party/node/node_modules/jsesc/package.json
new file mode 100644
index 00000000000..f89a7c62a04
--- /dev/null
+++ b/chromium/third_party/node/node_modules/jsesc/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "jsesc",
+ "version": "2.5.2",
+ "description": "Given some data, jsesc returns the shortest possible stringified & ASCII-safe representation of that data.",
+ "homepage": "https://mths.be/jsesc",
+ "engines": {
+ "node": ">=4"
+ },
+ "main": "jsesc.js",
+ "bin": "bin/jsesc",
+ "man": "man/jsesc.1",
+ "keywords": [
+ "buffer",
+ "escape",
+ "javascript",
+ "json",
+ "map",
+ "set",
+ "string",
+ "stringify",
+ "tool"
+ ],
+ "license": "MIT",
+ "author": {
+ "name": "Mathias Bynens",
+ "url": "https://mathiasbynens.be/"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/mathiasbynens/jsesc.git"
+ },
+ "bugs": "https://github.com/mathiasbynens/jsesc/issues",
+ "files": [
+ "LICENSE-MIT.txt",
+ "jsesc.js",
+ "bin/",
+ "man/"
+ ],
+ "scripts": {
+ "build": "grunt template",
+ "coveralls": "istanbul cover --verbose --dir 'coverage' 'tests/tests.js' && coveralls < coverage/lcov.info'",
+ "cover": "istanbul cover --report 'html' --verbose --dir 'coverage' 'tests/tests.js'",
+ "test": "mocha tests"
+ },
+ "devDependencies": {
+ "coveralls": "^2.11.6",
+ "grunt": "^0.4.5",
+ "grunt-template": "^0.2.3",
+ "istanbul": "^0.4.2",
+ "mocha": "*",
+ "regenerate": "^1.3.0",
+ "requirejs": "^2.1.22"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/minimatch/LICENSE b/chromium/third_party/node/node_modules/minimatch/LICENSE
new file mode 100644
index 00000000000..19129e315fe
--- /dev/null
+++ b/chromium/third_party/node/node_modules/minimatch/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/minimatch/minimatch.js b/chromium/third_party/node/node_modules/minimatch/minimatch.js
new file mode 100644
index 00000000000..5b5f8cf444d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/minimatch/minimatch.js
@@ -0,0 +1,923 @@
+module.exports = minimatch
+minimatch.Minimatch = Minimatch
+
+var path = { sep: '/' }
+try {
+ path = require('path')
+} catch (er) {}
+
+var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
+var expand = require('brace-expansion')
+
+var plTypes = {
+ '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},
+ '?': { open: '(?:', close: ')?' },
+ '+': { open: '(?:', close: ')+' },
+ '*': { open: '(?:', close: ')*' },
+ '@': { open: '(?:', close: ')' }
+}
+
+// any single thing other than /
+// don't need to escape / when using new RegExp()
+var qmark = '[^/]'
+
+// * => any number of characters
+var star = qmark + '*?'
+
+// ** when dots are allowed. Anything goes, except .. and .
+// not (^ or / followed by one or two dots followed by $ or /),
+// followed by anything, any number of times.
+var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'
+
+// not a ^ or / followed by a dot,
+// followed by anything, any number of times.
+var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'
+
+// characters that need to be escaped in RegExp.
+var reSpecials = charSet('().*{}+?[]^$\\!')
+
+// "abc" -> { a:true, b:true, c:true }
+function charSet (s) {
+ return s.split('').reduce(function (set, c) {
+ set[c] = true
+ return set
+ }, {})
+}
+
+// normalizes slashes.
+var slashSplit = /\/+/
+
+minimatch.filter = filter
+function filter (pattern, options) {
+ options = options || {}
+ return function (p, i, list) {
+ return minimatch(p, pattern, options)
+ }
+}
+
+function ext (a, b) {
+ a = a || {}
+ b = b || {}
+ var t = {}
+ Object.keys(b).forEach(function (k) {
+ t[k] = b[k]
+ })
+ Object.keys(a).forEach(function (k) {
+ t[k] = a[k]
+ })
+ return t
+}
+
+minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return minimatch
+
+ var orig = minimatch
+
+ var m = function minimatch (p, pattern, options) {
+ return orig.minimatch(p, pattern, ext(def, options))
+ }
+
+ m.Minimatch = function Minimatch (pattern, options) {
+ return new orig.Minimatch(pattern, ext(def, options))
+ }
+
+ return m
+}
+
+Minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return Minimatch
+ return minimatch.defaults(def).Minimatch
+}
+
+function minimatch (p, pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('glob pattern string required')
+ }
+
+ if (!options) options = {}
+
+ // shortcut: comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === '#') {
+ return false
+ }
+
+ // "" only matches ""
+ if (pattern.trim() === '') return p === ''
+
+ return new Minimatch(pattern, options).match(p)
+}
+
+function Minimatch (pattern, options) {
+ if (!(this instanceof Minimatch)) {
+ return new Minimatch(pattern, options)
+ }
+
+ if (typeof pattern !== 'string') {
+ throw new TypeError('glob pattern string required')
+ }
+
+ if (!options) options = {}
+ pattern = pattern.trim()
+
+ // windows support: need to use /, not \
+ if (path.sep !== '/') {
+ pattern = pattern.split(path.sep).join('/')
+ }
+
+ this.options = options
+ this.set = []
+ this.pattern = pattern
+ this.regexp = null
+ this.negate = false
+ this.comment = false
+ this.empty = false
+
+ // make the set of regexps etc.
+ this.make()
+}
+
+Minimatch.prototype.debug = function () {}
+
+Minimatch.prototype.make = make
+function make () {
+ // don't do it more than once.
+ if (this._made) return
+
+ var pattern = this.pattern
+ var options = this.options
+
+ // empty patterns and comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === '#') {
+ this.comment = true
+ return
+ }
+ if (!pattern) {
+ this.empty = true
+ return
+ }
+
+ // step 1: figure out negation, etc.
+ this.parseNegate()
+
+ // step 2: expand braces
+ var set = this.globSet = this.braceExpand()
+
+ if (options.debug) this.debug = console.error
+
+ this.debug(this.pattern, set)
+
+ // step 3: now we have a set, so turn each one into a series of path-portion
+ // matching patterns.
+ // These will be regexps, except in the case of "**", which is
+ // set to the GLOBSTAR object for globstar behavior,
+ // and will not contain any / characters
+ set = this.globParts = set.map(function (s) {
+ return s.split(slashSplit)
+ })
+
+ this.debug(this.pattern, set)
+
+ // glob --> regexps
+ set = set.map(function (s, si, set) {
+ return s.map(this.parse, this)
+ }, this)
+
+ this.debug(this.pattern, set)
+
+ // filter out everything that didn't compile properly.
+ set = set.filter(function (s) {
+ return s.indexOf(false) === -1
+ })
+
+ this.debug(this.pattern, set)
+
+ this.set = set
+}
+
+Minimatch.prototype.parseNegate = parseNegate
+function parseNegate () {
+ var pattern = this.pattern
+ var negate = false
+ var options = this.options
+ var negateOffset = 0
+
+ if (options.nonegate) return
+
+ for (var i = 0, l = pattern.length
+ ; i < l && pattern.charAt(i) === '!'
+ ; i++) {
+ negate = !negate
+ negateOffset++
+ }
+
+ if (negateOffset) this.pattern = pattern.substr(negateOffset)
+ this.negate = negate
+}
+
+// Brace expansion:
+// a{b,c}d -> abd acd
+// a{b,}c -> abc ac
+// a{0..3}d -> a0d a1d a2d a3d
+// a{b,c{d,e}f}g -> abg acdfg acefg
+// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
+//
+// Invalid sets are not expanded.
+// a{2..}b -> a{2..}b
+// a{b}c -> a{b}c
+minimatch.braceExpand = function (pattern, options) {
+ return braceExpand(pattern, options)
+}
+
+Minimatch.prototype.braceExpand = braceExpand
+
+function braceExpand (pattern, options) {
+ if (!options) {
+ if (this instanceof Minimatch) {
+ options = this.options
+ } else {
+ options = {}
+ }
+ }
+
+ pattern = typeof pattern === 'undefined'
+ ? this.pattern : pattern
+
+ if (typeof pattern === 'undefined') {
+ throw new TypeError('undefined pattern')
+ }
+
+ if (options.nobrace ||
+ !pattern.match(/\{.*\}/)) {
+ // shortcut. no need to expand.
+ return [pattern]
+ }
+
+ return expand(pattern)
+}
+
+// parse a component of the expanded set.
+// At this point, no pattern may contain "/" in it
+// so we're going to return a 2d array, where each entry is the full
+// pattern, split on '/', and then turned into a regular expression.
+// A regexp is made at the end which joins each array with an
+// escaped /, and another full one which joins each regexp with |.
+//
+// Following the lead of Bash 4.1, note that "**" only has special meaning
+// when it is the *only* thing in a path portion. Otherwise, any series
+// of * is equivalent to a single *. Globstar behavior is enabled by
+// default, and can be disabled by setting options.noglobstar.
+Minimatch.prototype.parse = parse
+var SUBPARSE = {}
+function parse (pattern, isSub) {
+ if (pattern.length > 1024 * 64) {
+ throw new TypeError('pattern is too long')
+ }
+
+ var options = this.options
+
+ // shortcuts
+ if (!options.noglobstar && pattern === '**') return GLOBSTAR
+ if (pattern === '') return ''
+
+ var re = ''
+ var hasMagic = !!options.nocase
+ var escaping = false
+ // ? => one single character
+ var patternListStack = []
+ var negativeLists = []
+ var stateChar
+ var inClass = false
+ var reClassStart = -1
+ var classStart = -1
+ // . and .. never match anything that doesn't start with .,
+ // even when options.dot is set.
+ var patternStart = pattern.charAt(0) === '.' ? '' // anything
+ // not (start or / followed by . or .. followed by / or end)
+ : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
+ : '(?!\\.)'
+ var self = this
+
+ function clearStateChar () {
+ if (stateChar) {
+ // we had some state-tracking character
+ // that wasn't consumed by this pass.
+ switch (stateChar) {
+ case '*':
+ re += star
+ hasMagic = true
+ break
+ case '?':
+ re += qmark
+ hasMagic = true
+ break
+ default:
+ re += '\\' + stateChar
+ break
+ }
+ self.debug('clearStateChar %j %j', stateChar, re)
+ stateChar = false
+ }
+ }
+
+ for (var i = 0, len = pattern.length, c
+ ; (i < len) && (c = pattern.charAt(i))
+ ; i++) {
+ this.debug('%s\t%s %s %j', pattern, i, re, c)
+
+ // skip over any that are escaped.
+ if (escaping && reSpecials[c]) {
+ re += '\\' + c
+ escaping = false
+ continue
+ }
+
+ switch (c) {
+ case '/':
+ // completely not allowed, even escaped.
+ // Should already be path-split by now.
+ return false
+
+ case '\\':
+ clearStateChar()
+ escaping = true
+ continue
+
+ // the various stateChar values
+ // for the "extglob" stuff.
+ case '?':
+ case '*':
+ case '+':
+ case '@':
+ case '!':
+ this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
+
+ // all of those are literals inside a class, except that
+ // the glob [!a] means [^a] in regexp
+ if (inClass) {
+ this.debug(' in class')
+ if (c === '!' && i === classStart + 1) c = '^'
+ re += c
+ continue
+ }
+
+ // if we already have a stateChar, then it means
+ // that there was something like ** or +? in there.
+ // Handle the stateChar, then proceed with this one.
+ self.debug('call clearStateChar %j', stateChar)
+ clearStateChar()
+ stateChar = c
+ // if extglob is disabled, then +(asdf|foo) isn't a thing.
+ // just clear the statechar *now*, rather than even diving into
+ // the patternList stuff.
+ if (options.noext) clearStateChar()
+ continue
+
+ case '(':
+ if (inClass) {
+ re += '('
+ continue
+ }
+
+ if (!stateChar) {
+ re += '\\('
+ continue
+ }
+
+ patternListStack.push({
+ type: stateChar,
+ start: i - 1,
+ reStart: re.length,
+ open: plTypes[stateChar].open,
+ close: plTypes[stateChar].close
+ })
+ // negation is (?:(?!js)[^/]*)
+ re += stateChar === '!' ? '(?:(?!(?:' : '(?:'
+ this.debug('plType %j %j', stateChar, re)
+ stateChar = false
+ continue
+
+ case ')':
+ if (inClass || !patternListStack.length) {
+ re += '\\)'
+ continue
+ }
+
+ clearStateChar()
+ hasMagic = true
+ var pl = patternListStack.pop()
+ // negation is (?:(?!js)[^/]*)
+ // The others are (?:<pattern>)<type>
+ re += pl.close
+ if (pl.type === '!') {
+ negativeLists.push(pl)
+ }
+ pl.reEnd = re.length
+ continue
+
+ case '|':
+ if (inClass || !patternListStack.length || escaping) {
+ re += '\\|'
+ escaping = false
+ continue
+ }
+
+ clearStateChar()
+ re += '|'
+ continue
+
+ // these are mostly the same in regexp and glob
+ case '[':
+ // swallow any state-tracking char before the [
+ clearStateChar()
+
+ if (inClass) {
+ re += '\\' + c
+ continue
+ }
+
+ inClass = true
+ classStart = i
+ reClassStart = re.length
+ re += c
+ continue
+
+ case ']':
+ // a right bracket shall lose its special
+ // meaning and represent itself in
+ // a bracket expression if it occurs
+ // first in the list. -- POSIX.2 2.8.3.2
+ if (i === classStart + 1 || !inClass) {
+ re += '\\' + c
+ escaping = false
+ continue
+ }
+
+ // handle the case where we left a class open.
+ // "[z-a]" is valid, equivalent to "\[z-a\]"
+ if (inClass) {
+ // split where the last [ was, make sure we don't have
+ // an invalid re. if so, re-walk the contents of the
+ // would-be class to re-translate any characters that
+ // were passed through as-is
+ // TODO: It would probably be faster to determine this
+ // without a try/catch and a new RegExp, but it's tricky
+ // to do safely. For now, this is safe and works.
+ var cs = pattern.substring(classStart + 1, i)
+ try {
+ RegExp('[' + cs + ']')
+ } catch (er) {
+ // not a valid class!
+ var sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
+ hasMagic = hasMagic || sp[1]
+ inClass = false
+ continue
+ }
+ }
+
+ // finish up the class.
+ hasMagic = true
+ inClass = false
+ re += c
+ continue
+
+ default:
+ // swallow any state char that wasn't consumed
+ clearStateChar()
+
+ if (escaping) {
+ // no need
+ escaping = false
+ } else if (reSpecials[c]
+ && !(c === '^' && inClass)) {
+ re += '\\'
+ }
+
+ re += c
+
+ } // switch
+ } // for
+
+ // handle the case where we left a class open.
+ // "[abc" is valid, equivalent to "\[abc"
+ if (inClass) {
+ // split where the last [ was, and escape it
+ // this is a huge pita. We now have to re-walk
+ // the contents of the would-be class to re-translate
+ // any characters that were passed through as-is
+ cs = pattern.substr(classStart + 1)
+ sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + '\\[' + sp[0]
+ hasMagic = hasMagic || sp[1]
+ }
+
+ // handle the case where we had a +( thing at the *end*
+ // of the pattern.
+ // each pattern list stack adds 3 chars, and we need to go through
+ // and escape any | chars that were passed through as-is for the regexp.
+ // Go through and escape them, taking care not to double-escape any
+ // | chars that were already escaped.
+ for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
+ var tail = re.slice(pl.reStart + pl.open.length)
+ this.debug('setting tail', re, pl)
+ // maybe some even number of \, then maybe 1 \, followed by a |
+ tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) {
+ if (!$2) {
+ // the | isn't already escaped, so escape it.
+ $2 = '\\'
+ }
+
+ // need to escape all those slashes *again*, without escaping the
+ // one that we need for escaping the | character. As it works out,
+ // escaping an even number of slashes can be done by simply repeating
+ // it exactly after itself. That's why this trick works.
+ //
+ // I am sorry that you have to see this.
+ return $1 + $1 + $2 + '|'
+ })
+
+ this.debug('tail=%j\n %s', tail, tail, pl, re)
+ var t = pl.type === '*' ? star
+ : pl.type === '?' ? qmark
+ : '\\' + pl.type
+
+ hasMagic = true
+ re = re.slice(0, pl.reStart) + t + '\\(' + tail
+ }
+
+ // handle trailing things that only matter at the very end.
+ clearStateChar()
+ if (escaping) {
+ // trailing \\
+ re += '\\\\'
+ }
+
+ // only need to apply the nodot start if the re starts with
+ // something that could conceivably capture a dot
+ var addPatternStart = false
+ switch (re.charAt(0)) {
+ case '.':
+ case '[':
+ case '(': addPatternStart = true
+ }
+
+ // Hack to work around lack of negative lookbehind in JS
+ // A pattern like: *.!(x).!(y|z) needs to ensure that a name
+ // like 'a.xyz.yz' doesn't match. So, the first negative
+ // lookahead, has to look ALL the way ahead, to the end of
+ // the pattern.
+ for (var n = negativeLists.length - 1; n > -1; n--) {
+ var nl = negativeLists[n]
+
+ var nlBefore = re.slice(0, nl.reStart)
+ var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
+ var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)
+ var nlAfter = re.slice(nl.reEnd)
+
+ nlLast += nlAfter
+
+ // Handle nested stuff like *(*.js|!(*.json)), where open parens
+ // mean that we should *not* include the ) in the bit that is considered
+ // "after" the negated section.
+ var openParensBefore = nlBefore.split('(').length - 1
+ var cleanAfter = nlAfter
+ for (i = 0; i < openParensBefore; i++) {
+ cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
+ }
+ nlAfter = cleanAfter
+
+ var dollar = ''
+ if (nlAfter === '' && isSub !== SUBPARSE) {
+ dollar = '$'
+ }
+ var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast
+ re = newRe
+ }
+
+ // if the re is not "" at this point, then we need to make sure
+ // it doesn't match against an empty path part.
+ // Otherwise a/* will match a/, which it should not.
+ if (re !== '' && hasMagic) {
+ re = '(?=.)' + re
+ }
+
+ if (addPatternStart) {
+ re = patternStart + re
+ }
+
+ // parsing just a piece of a larger pattern.
+ if (isSub === SUBPARSE) {
+ return [re, hasMagic]
+ }
+
+ // skip the regexp for non-magical patterns
+ // unescape anything in it, though, so that it'll be
+ // an exact match against a file etc.
+ if (!hasMagic) {
+ return globUnescape(pattern)
+ }
+
+ var flags = options.nocase ? 'i' : ''
+ try {
+ var regExp = new RegExp('^' + re + '$', flags)
+ } catch (er) {
+ // If it was an invalid regular expression, then it can't match
+ // anything. This trick looks for a character after the end of
+ // the string, which is of course impossible, except in multi-line
+ // mode, but it's not a /m regex.
+ return new RegExp('$.')
+ }
+
+ regExp._glob = pattern
+ regExp._src = re
+
+ return regExp
+}
+
+minimatch.makeRe = function (pattern, options) {
+ return new Minimatch(pattern, options || {}).makeRe()
+}
+
+Minimatch.prototype.makeRe = makeRe
+function makeRe () {
+ if (this.regexp || this.regexp === false) return this.regexp
+
+ // at this point, this.set is a 2d array of partial
+ // pattern strings, or "**".
+ //
+ // It's better to use .match(). This function shouldn't
+ // be used, really, but it's pretty convenient sometimes,
+ // when you just want to work with a regex.
+ var set = this.set
+
+ if (!set.length) {
+ this.regexp = false
+ return this.regexp
+ }
+ var options = this.options
+
+ var twoStar = options.noglobstar ? star
+ : options.dot ? twoStarDot
+ : twoStarNoDot
+ var flags = options.nocase ? 'i' : ''
+
+ var re = set.map(function (pattern) {
+ return pattern.map(function (p) {
+ return (p === GLOBSTAR) ? twoStar
+ : (typeof p === 'string') ? regExpEscape(p)
+ : p._src
+ }).join('\\\/')
+ }).join('|')
+
+ // must match entire pattern
+ // ending in a * or ** will make it less strict.
+ re = '^(?:' + re + ')$'
+
+ // can match anything, as long as it's not this.
+ if (this.negate) re = '^(?!' + re + ').*$'
+
+ try {
+ this.regexp = new RegExp(re, flags)
+ } catch (ex) {
+ this.regexp = false
+ }
+ return this.regexp
+}
+
+minimatch.match = function (list, pattern, options) {
+ options = options || {}
+ var mm = new Minimatch(pattern, options)
+ list = list.filter(function (f) {
+ return mm.match(f)
+ })
+ if (mm.options.nonull && !list.length) {
+ list.push(pattern)
+ }
+ return list
+}
+
+Minimatch.prototype.match = match
+function match (f, partial) {
+ this.debug('match', f, this.pattern)
+ // short-circuit in the case of busted things.
+ // comments, etc.
+ if (this.comment) return false
+ if (this.empty) return f === ''
+
+ if (f === '/' && partial) return true
+
+ var options = this.options
+
+ // windows: need to use /, not \
+ if (path.sep !== '/') {
+ f = f.split(path.sep).join('/')
+ }
+
+ // treat the test path as a set of pathparts.
+ f = f.split(slashSplit)
+ this.debug(this.pattern, 'split', f)
+
+ // just ONE of the pattern sets in this.set needs to match
+ // in order for it to be valid. If negating, then just one
+ // match means that we have failed.
+ // Either way, return on the first hit.
+
+ var set = this.set
+ this.debug(this.pattern, 'set', set)
+
+ // Find the basename of the path by looking for the last non-empty segment
+ var filename
+ var i
+ for (i = f.length - 1; i >= 0; i--) {
+ filename = f[i]
+ if (filename) break
+ }
+
+ for (i = 0; i < set.length; i++) {
+ var pattern = set[i]
+ var file = f
+ if (options.matchBase && pattern.length === 1) {
+ file = [filename]
+ }
+ var hit = this.matchOne(file, pattern, partial)
+ if (hit) {
+ if (options.flipNegate) return true
+ return !this.negate
+ }
+ }
+
+ // didn't get any hits. this is success if it's a negative
+ // pattern, failure otherwise.
+ if (options.flipNegate) return false
+ return this.negate
+}
+
+// set partial to true to test if, for example,
+// "/a/b" matches the start of "/*/b/*/d"
+// Partial means, if you run out of file before you run
+// out of pattern, then that's fine, as long as all
+// the parts match.
+Minimatch.prototype.matchOne = function (file, pattern, partial) {
+ var options = this.options
+
+ this.debug('matchOne',
+ { 'this': this, file: file, pattern: pattern })
+
+ this.debug('matchOne', file.length, pattern.length)
+
+ for (var fi = 0,
+ pi = 0,
+ fl = file.length,
+ pl = pattern.length
+ ; (fi < fl) && (pi < pl)
+ ; fi++, pi++) {
+ this.debug('matchOne loop')
+ var p = pattern[pi]
+ var f = file[fi]
+
+ this.debug(pattern, p, f)
+
+ // should be impossible.
+ // some invalid regexp stuff in the set.
+ if (p === false) return false
+
+ if (p === GLOBSTAR) {
+ this.debug('GLOBSTAR', [pattern, p, f])
+
+ // "**"
+ // a/**/b/**/c would match the following:
+ // a/b/x/y/z/c
+ // a/x/y/z/b/c
+ // a/b/x/b/x/c
+ // a/b/c
+ // To do this, take the rest of the pattern after
+ // the **, and see if it would match the file remainder.
+ // If so, return success.
+ // If not, the ** "swallows" a segment, and try again.
+ // This is recursively awful.
+ //
+ // a/**/b/**/c matching a/b/x/y/z/c
+ // - a matches a
+ // - doublestar
+ // - matchOne(b/x/y/z/c, b/**/c)
+ // - b matches b
+ // - doublestar
+ // - matchOne(x/y/z/c, c) -> no
+ // - matchOne(y/z/c, c) -> no
+ // - matchOne(z/c, c) -> no
+ // - matchOne(c, c) yes, hit
+ var fr = fi
+ var pr = pi + 1
+ if (pr === pl) {
+ this.debug('** at the end')
+ // a ** at the end will just swallow the rest.
+ // We have found a match.
+ // however, it will not swallow /.x, unless
+ // options.dot is set.
+ // . and .. are *never* matched by **, for explosively
+ // exponential reasons.
+ for (; fi < fl; fi++) {
+ if (file[fi] === '.' || file[fi] === '..' ||
+ (!options.dot && file[fi].charAt(0) === '.')) return false
+ }
+ return true
+ }
+
+ // ok, let's see if we can swallow whatever we can.
+ while (fr < fl) {
+ var swallowee = file[fr]
+
+ this.debug('\nglobstar while', file, fr, pattern, pr, swallowee)
+
+ // XXX remove this slice. Just pass the start index.
+ if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+ this.debug('globstar found match!', fr, fl, swallowee)
+ // found a match.
+ return true
+ } else {
+ // can't swallow "." or ".." ever.
+ // can only swallow ".foo" when explicitly asked.
+ if (swallowee === '.' || swallowee === '..' ||
+ (!options.dot && swallowee.charAt(0) === '.')) {
+ this.debug('dot detected!', file, fr, pattern, pr)
+ break
+ }
+
+ // ** swallows a segment, and continue.
+ this.debug('globstar swallow a segment, and continue')
+ fr++
+ }
+ }
+
+ // no match was found.
+ // However, in partial mode, we can't say this is necessarily over.
+ // If there's more *pattern* left, then
+ if (partial) {
+ // ran out of file
+ this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
+ if (fr === fl) return true
+ }
+ return false
+ }
+
+ // something other than **
+ // non-magic patterns just have to match exactly
+ // patterns with magic have been turned into regexps.
+ var hit
+ if (typeof p === 'string') {
+ if (options.nocase) {
+ hit = f.toLowerCase() === p.toLowerCase()
+ } else {
+ hit = f === p
+ }
+ this.debug('string match', p, f, hit)
+ } else {
+ hit = f.match(p)
+ this.debug('pattern match', p, f, hit)
+ }
+
+ if (!hit) return false
+ }
+
+ // Note: ending in / means that we'll get a final ""
+ // at the end of the pattern. This can only match a
+ // corresponding "" at the end of the file.
+ // If the file ends in /, then it can only match a
+ // a pattern that ends in /, unless the pattern just
+ // doesn't have any more for it. But, a/b/ should *not*
+ // match "a/b/*", even though "" matches against the
+ // [^/]*? pattern, except in partial mode, where it might
+ // simply not be reached yet.
+ // However, a/b/ should still satisfy a/*
+
+ // now either we fell off the end of the pattern, or we're done.
+ if (fi === fl && pi === pl) {
+ // ran out of pattern and filename at the same time.
+ // an exact hit!
+ return true
+ } else if (fi === fl) {
+ // ran out of file, but still had pattern left.
+ // this is ok if we're doing the match as part of
+ // a glob fs traversal.
+ return partial
+ } else if (pi === pl) {
+ // ran out of pattern, still have file left.
+ // this is only acceptable if we're on the very last
+ // empty segment of a file with a trailing slash.
+ // a/* should match a/b/
+ var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
+ return emptyFileEnd
+ }
+
+ // should be unreachable.
+ throw new Error('wtf?')
+}
+
+// replace stuff like \* with *
+function globUnescape (s) {
+ return s.replace(/\\(.)/g, '$1')
+}
+
+function regExpEscape (s) {
+ return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
+}
diff --git a/chromium/third_party/node/node_modules/minimatch/package.json b/chromium/third_party/node/node_modules/minimatch/package.json
new file mode 100644
index 00000000000..c4514c80777
--- /dev/null
+++ b/chromium/third_party/node/node_modules/minimatch/package.json
@@ -0,0 +1,30 @@
+{
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
+ "name": "minimatch",
+ "description": "a glob matcher in javascript",
+ "version": "3.0.4",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/minimatch.git"
+ },
+ "main": "minimatch.js",
+ "scripts": {
+ "test": "tap test/*.js --cov",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "postpublish": "git push origin --all; git push origin --tags"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "devDependencies": {
+ "tap": "^10.3.2"
+ },
+ "license": "ISC",
+ "files": [
+ "minimatch.js"
+ ]
+}
diff --git a/chromium/third_party/node/node_modules/ms/index.js b/chromium/third_party/node/node_modules/ms/index.js
new file mode 100644
index 00000000000..c4498bcc212
--- /dev/null
+++ b/chromium/third_party/node/node_modules/ms/index.js
@@ -0,0 +1,162 @@
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var w = d * 7;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ * - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function(val, options) {
+ options = options || {};
+ var type = typeof val;
+ if (type === 'string' && val.length > 0) {
+ return parse(val);
+ } else if (type === 'number' && isFinite(val)) {
+ return options.long ? fmtLong(val) : fmtShort(val);
+ }
+ throw new Error(
+ 'val is not a non-empty string or a valid number. val=' +
+ JSON.stringify(val)
+ );
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+function parse(str) {
+ str = String(str);
+ if (str.length > 100) {
+ return;
+ }
+ var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+ str
+ );
+ if (!match) {
+ return;
+ }
+ var n = parseFloat(match[1]);
+ var type = (match[2] || 'ms').toLowerCase();
+ switch (type) {
+ case 'years':
+ case 'year':
+ case 'yrs':
+ case 'yr':
+ case 'y':
+ return n * y;
+ case 'weeks':
+ case 'week':
+ case 'w':
+ return n * w;
+ case 'days':
+ case 'day':
+ case 'd':
+ return n * d;
+ case 'hours':
+ case 'hour':
+ case 'hrs':
+ case 'hr':
+ case 'h':
+ return n * h;
+ case 'minutes':
+ case 'minute':
+ case 'mins':
+ case 'min':
+ case 'm':
+ return n * m;
+ case 'seconds':
+ case 'second':
+ case 'secs':
+ case 'sec':
+ case 's':
+ return n * s;
+ case 'milliseconds':
+ case 'millisecond':
+ case 'msecs':
+ case 'msec':
+ case 'ms':
+ return n;
+ default:
+ return undefined;
+ }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtShort(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return Math.round(ms / d) + 'd';
+ }
+ if (msAbs >= h) {
+ return Math.round(ms / h) + 'h';
+ }
+ if (msAbs >= m) {
+ return Math.round(ms / m) + 'm';
+ }
+ if (msAbs >= s) {
+ return Math.round(ms / s) + 's';
+ }
+ return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtLong(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return plural(ms, msAbs, d, 'day');
+ }
+ if (msAbs >= h) {
+ return plural(ms, msAbs, h, 'hour');
+ }
+ if (msAbs >= m) {
+ return plural(ms, msAbs, m, 'minute');
+ }
+ if (msAbs >= s) {
+ return plural(ms, msAbs, s, 'second');
+ }
+ return ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ */
+
+function plural(ms, msAbs, n, name) {
+ var isPlural = msAbs >= n * 1.5;
+ return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
+}
diff --git a/chromium/third_party/node/node_modules/ms/package.json b/chromium/third_party/node/node_modules/ms/package.json
new file mode 100644
index 00000000000..eea666e1fb0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/ms/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "ms",
+ "version": "2.1.2",
+ "description": "Tiny millisecond conversion utility",
+ "repository": "zeit/ms",
+ "main": "./index",
+ "files": [
+ "index.js"
+ ],
+ "scripts": {
+ "precommit": "lint-staged",
+ "lint": "eslint lib/* bin/*",
+ "test": "mocha tests.js"
+ },
+ "eslintConfig": {
+ "extends": "eslint:recommended",
+ "env": {
+ "node": true,
+ "es6": true
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "npm run lint",
+ "prettier --single-quote --write",
+ "git add"
+ ]
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "eslint": "4.12.1",
+ "expect.js": "0.3.1",
+ "husky": "0.14.3",
+ "lint-staged": "5.0.0",
+ "mocha": "4.0.1"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/path-is-inside/LICENSE.txt b/chromium/third_party/node/node_modules/path-is-inside/LICENSE.txt
new file mode 100644
index 00000000000..0bdbb61c9de
--- /dev/null
+++ b/chromium/third_party/node/node_modules/path-is-inside/LICENSE.txt
@@ -0,0 +1,47 @@
+Dual licensed under WTFPL and MIT:
+
+---
+
+Copyright © 2013–2016 Domenic Denicola <d@domenic.me>
+
+This work is free. You can redistribute it and/or modify it under the
+terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See below for more details.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
+
+---
+
+The MIT License (MIT)
+
+Copyright © 2013–2016 Domenic Denicola <d@domenic.me>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/path-is-inside/lib/path-is-inside.js b/chromium/third_party/node/node_modules/path-is-inside/lib/path-is-inside.js
new file mode 100644
index 00000000000..596dfd3b3c5
--- /dev/null
+++ b/chromium/third_party/node/node_modules/path-is-inside/lib/path-is-inside.js
@@ -0,0 +1,28 @@
+"use strict";
+
+var path = require("path");
+
+module.exports = function (thePath, potentialParent) {
+ // For inside-directory checking, we want to allow trailing slashes, so normalize.
+ thePath = stripTrailingSep(thePath);
+ potentialParent = stripTrailingSep(potentialParent);
+
+ // Node treats only Windows as case-insensitive in its path module; we follow those conventions.
+ if (process.platform === "win32") {
+ thePath = thePath.toLowerCase();
+ potentialParent = potentialParent.toLowerCase();
+ }
+
+ return thePath.lastIndexOf(potentialParent, 0) === 0 &&
+ (
+ thePath[potentialParent.length] === path.sep ||
+ thePath[potentialParent.length] === undefined
+ );
+};
+
+function stripTrailingSep(thePath) {
+ if (thePath[thePath.length - 1] === path.sep) {
+ return thePath.slice(0, -1);
+ }
+ return thePath;
+}
diff --git a/chromium/third_party/node/node_modules/path-is-inside/package.json b/chromium/third_party/node/node_modules/path-is-inside/package.json
new file mode 100644
index 00000000000..74c56e6959f
--- /dev/null
+++ b/chromium/third_party/node/node_modules/path-is-inside/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "path-is-inside",
+ "description": "Tests whether one path is inside another path",
+ "keywords": ["path", "directory", "folder", "inside", "relative"],
+ "version": "1.0.2",
+ "author": "Domenic Denicola <d@domenic.me> (https://domenic.me)",
+ "license": "(WTFPL OR MIT)",
+ "repository": "domenic/path-is-inside",
+ "main": "lib/path-is-inside.js",
+ "files": [
+ "lib"
+ ],
+ "scripts": {
+ "test": "mocha",
+ "lint": "jshint lib"
+ },
+ "devDependencies": {
+ "jshint": "~2.3.0",
+ "mocha": "~1.15.1"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/resolve/LICENSE b/chromium/third_party/node/node_modules/resolve/LICENSE
new file mode 100644
index 00000000000..ff4fce28af3
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2012 James Halliday
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/resolve/index.js b/chromium/third_party/node/node_modules/resolve/index.js
new file mode 100644
index 00000000000..125d8146423
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/index.js
@@ -0,0 +1,6 @@
+var async = require('./lib/async');
+async.core = require('./lib/core');
+async.isCore = require('./lib/is-core');
+async.sync = require('./lib/sync');
+
+module.exports = async;
diff --git a/chromium/third_party/node/node_modules/resolve/lib/async.js b/chromium/third_party/node/node_modules/resolve/lib/async.js
new file mode 100644
index 00000000000..02e80ac80e5
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/async.js
@@ -0,0 +1,320 @@
+var fs = require('fs');
+var path = require('path');
+var caller = require('./caller');
+var nodeModulesPaths = require('./node-modules-paths');
+var normalizeOptions = require('./normalize-options');
+var isCore = require('is-core-module');
+
+var realpathFS = fs.realpath && typeof fs.realpath.native === 'function' ? fs.realpath.native : fs.realpath;
+
+var defaultIsFile = function isFile(file, cb) {
+ fs.stat(file, function (err, stat) {
+ if (!err) {
+ return cb(null, stat.isFile() || stat.isFIFO());
+ }
+ if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false);
+ return cb(err);
+ });
+};
+
+var defaultIsDir = function isDirectory(dir, cb) {
+ fs.stat(dir, function (err, stat) {
+ if (!err) {
+ return cb(null, stat.isDirectory());
+ }
+ if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false);
+ return cb(err);
+ });
+};
+
+var defaultRealpath = function realpath(x, cb) {
+ realpathFS(x, function (realpathErr, realPath) {
+ if (realpathErr && realpathErr.code !== 'ENOENT') cb(realpathErr);
+ else cb(null, realpathErr ? x : realPath);
+ });
+};
+
+var maybeRealpath = function maybeRealpath(realpath, x, opts, cb) {
+ if (opts && opts.preserveSymlinks === false) {
+ realpath(x, cb);
+ } else {
+ cb(null, x);
+ }
+};
+
+var defaultReadPackage = function defaultReadPackage(readFile, pkgfile, cb) {
+ readFile(pkgfile, function (readFileErr, body) {
+ if (readFileErr) cb(readFileErr);
+ else {
+ try {
+ var pkg = JSON.parse(body);
+ cb(null, pkg);
+ } catch (jsonErr) {
+ cb(null);
+ }
+ }
+ });
+};
+
+var getPackageCandidates = function getPackageCandidates(x, start, opts) {
+ var dirs = nodeModulesPaths(start, opts, x);
+ for (var i = 0; i < dirs.length; i++) {
+ dirs[i] = path.join(dirs[i], x);
+ }
+ return dirs;
+};
+
+module.exports = function resolve(x, options, callback) {
+ var cb = callback;
+ var opts = options;
+ if (typeof options === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof x !== 'string') {
+ var err = new TypeError('Path must be a string.');
+ return process.nextTick(function () {
+ cb(err);
+ });
+ }
+
+ opts = normalizeOptions(x, opts);
+
+ var isFile = opts.isFile || defaultIsFile;
+ var isDirectory = opts.isDirectory || defaultIsDir;
+ var readFile = opts.readFile || fs.readFile;
+ var realpath = opts.realpath || defaultRealpath;
+ var readPackage = opts.readPackage || defaultReadPackage;
+ if (opts.readFile && opts.readPackage) {
+ var conflictErr = new TypeError('`readFile` and `readPackage` are mutually exclusive.');
+ return process.nextTick(function () {
+ cb(conflictErr);
+ });
+ }
+ var packageIterator = opts.packageIterator;
+
+ var extensions = opts.extensions || ['.js'];
+ var includeCoreModules = opts.includeCoreModules !== false;
+ var basedir = opts.basedir || path.dirname(caller());
+ var parent = opts.filename || basedir;
+
+ opts.paths = opts.paths || [];
+
+ // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory
+ var absoluteStart = path.resolve(basedir);
+
+ maybeRealpath(
+ realpath,
+ absoluteStart,
+ opts,
+ function (err, realStart) {
+ if (err) cb(err);
+ else init(realStart);
+ }
+ );
+
+ var res;
+ function init(basedir) {
+ if ((/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/).test(x)) {
+ res = path.resolve(basedir, x);
+ if (x === '.' || x === '..' || x.slice(-1) === '/') res += '/';
+ if ((/\/$/).test(x) && res === basedir) {
+ loadAsDirectory(res, opts.package, onfile);
+ } else loadAsFile(res, opts.package, onfile);
+ } else if (includeCoreModules && isCore(x)) {
+ return cb(null, x);
+ } else loadNodeModules(x, basedir, function (err, n, pkg) {
+ if (err) cb(err);
+ else if (n) {
+ return maybeRealpath(realpath, n, opts, function (err, realN) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(null, realN, pkg);
+ }
+ });
+ } else {
+ var moduleError = new Error("Cannot find module '" + x + "' from '" + parent + "'");
+ moduleError.code = 'MODULE_NOT_FOUND';
+ cb(moduleError);
+ }
+ });
+ }
+
+ function onfile(err, m, pkg) {
+ if (err) cb(err);
+ else if (m) cb(null, m, pkg);
+ else loadAsDirectory(res, function (err, d, pkg) {
+ if (err) cb(err);
+ else if (d) {
+ maybeRealpath(realpath, d, opts, function (err, realD) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(null, realD, pkg);
+ }
+ });
+ } else {
+ var moduleError = new Error("Cannot find module '" + x + "' from '" + parent + "'");
+ moduleError.code = 'MODULE_NOT_FOUND';
+ cb(moduleError);
+ }
+ });
+ }
+
+ function loadAsFile(x, thePackage, callback) {
+ var loadAsFilePackage = thePackage;
+ var cb = callback;
+ if (typeof loadAsFilePackage === 'function') {
+ cb = loadAsFilePackage;
+ loadAsFilePackage = undefined;
+ }
+
+ var exts = [''].concat(extensions);
+ load(exts, x, loadAsFilePackage);
+
+ function load(exts, x, loadPackage) {
+ if (exts.length === 0) return cb(null, undefined, loadPackage);
+ var file = x + exts[0];
+
+ var pkg = loadPackage;
+ if (pkg) onpkg(null, pkg);
+ else loadpkg(path.dirname(file), onpkg);
+
+ function onpkg(err, pkg_, dir) {
+ pkg = pkg_;
+ if (err) return cb(err);
+ if (dir && pkg && opts.pathFilter) {
+ var rfile = path.relative(dir, file);
+ var rel = rfile.slice(0, rfile.length - exts[0].length);
+ var r = opts.pathFilter(pkg, x, rel);
+ if (r) return load(
+ [''].concat(extensions.slice()),
+ path.resolve(dir, r),
+ pkg
+ );
+ }
+ isFile(file, onex);
+ }
+ function onex(err, ex) {
+ if (err) return cb(err);
+ if (ex) return cb(null, file, pkg);
+ load(exts.slice(1), x, pkg);
+ }
+ }
+ }
+
+ function loadpkg(dir, cb) {
+ if (dir === '' || dir === '/') return cb(null);
+ if (process.platform === 'win32' && (/^\w:[/\\]*$/).test(dir)) {
+ return cb(null);
+ }
+ if ((/[/\\]node_modules[/\\]*$/).test(dir)) return cb(null);
+
+ maybeRealpath(realpath, dir, opts, function (unwrapErr, pkgdir) {
+ if (unwrapErr) return loadpkg(path.dirname(dir), cb);
+ var pkgfile = path.join(pkgdir, 'package.json');
+ isFile(pkgfile, function (err, ex) {
+ // on err, ex is false
+ if (!ex) return loadpkg(path.dirname(dir), cb);
+
+ readPackage(readFile, pkgfile, function (err, pkgParam) {
+ if (err) cb(err);
+
+ var pkg = pkgParam;
+
+ if (pkg && opts.packageFilter) {
+ pkg = opts.packageFilter(pkg, pkgfile);
+ }
+ cb(null, pkg, dir);
+ });
+ });
+ });
+ }
+
+ function loadAsDirectory(x, loadAsDirectoryPackage, callback) {
+ var cb = callback;
+ var fpkg = loadAsDirectoryPackage;
+ if (typeof fpkg === 'function') {
+ cb = fpkg;
+ fpkg = opts.package;
+ }
+
+ maybeRealpath(realpath, x, opts, function (unwrapErr, pkgdir) {
+ if (unwrapErr) return cb(unwrapErr);
+ var pkgfile = path.join(pkgdir, 'package.json');
+ isFile(pkgfile, function (err, ex) {
+ if (err) return cb(err);
+ if (!ex) return loadAsFile(path.join(x, 'index'), fpkg, cb);
+
+ readPackage(readFile, pkgfile, function (err, pkgParam) {
+ if (err) return cb(err);
+
+ var pkg = pkgParam;
+
+ if (pkg && opts.packageFilter) {
+ pkg = opts.packageFilter(pkg, pkgfile);
+ }
+
+ if (pkg && pkg.main) {
+ if (typeof pkg.main !== 'string') {
+ var mainError = new TypeError('package “' + pkg.name + '” `main` must be a string');
+ mainError.code = 'INVALID_PACKAGE_MAIN';
+ return cb(mainError);
+ }
+ if (pkg.main === '.' || pkg.main === './') {
+ pkg.main = 'index';
+ }
+ loadAsFile(path.resolve(x, pkg.main), pkg, function (err, m, pkg) {
+ if (err) return cb(err);
+ if (m) return cb(null, m, pkg);
+ if (!pkg) return loadAsFile(path.join(x, 'index'), pkg, cb);
+
+ var dir = path.resolve(x, pkg.main);
+ loadAsDirectory(dir, pkg, function (err, n, pkg) {
+ if (err) return cb(err);
+ if (n) return cb(null, n, pkg);
+ loadAsFile(path.join(x, 'index'), pkg, cb);
+ });
+ });
+ return;
+ }
+
+ loadAsFile(path.join(x, '/index'), pkg, cb);
+ });
+ });
+ });
+ }
+
+ function processDirs(cb, dirs) {
+ if (dirs.length === 0) return cb(null, undefined);
+ var dir = dirs[0];
+
+ isDirectory(path.dirname(dir), isdir);
+
+ function isdir(err, isdir) {
+ if (err) return cb(err);
+ if (!isdir) return processDirs(cb, dirs.slice(1));
+ loadAsFile(dir, opts.package, onfile);
+ }
+
+ function onfile(err, m, pkg) {
+ if (err) return cb(err);
+ if (m) return cb(null, m, pkg);
+ loadAsDirectory(dir, opts.package, ondir);
+ }
+
+ function ondir(err, n, pkg) {
+ if (err) return cb(err);
+ if (n) return cb(null, n, pkg);
+ processDirs(cb, dirs.slice(1));
+ }
+ }
+ function loadNodeModules(x, start, cb) {
+ var thunk = function () { return getPackageCandidates(x, start, opts); };
+ processDirs(
+ cb,
+ packageIterator ? packageIterator(x, start, thunk, opts) : thunk()
+ );
+ }
+};
diff --git a/chromium/third_party/node/node_modules/resolve/lib/caller.js b/chromium/third_party/node/node_modules/resolve/lib/caller.js
new file mode 100644
index 00000000000..b14a2804ae8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/caller.js
@@ -0,0 +1,8 @@
+module.exports = function () {
+ // see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
+ var origPrepareStackTrace = Error.prepareStackTrace;
+ Error.prepareStackTrace = function (_, stack) { return stack; };
+ var stack = (new Error()).stack;
+ Error.prepareStackTrace = origPrepareStackTrace;
+ return stack[2].getFileName();
+};
diff --git a/chromium/third_party/node/node_modules/resolve/lib/core.js b/chromium/third_party/node/node_modules/resolve/lib/core.js
new file mode 100644
index 00000000000..c417d23c5a8
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/core.js
@@ -0,0 +1,53 @@
+var current = (process.versions && process.versions.node && process.versions.node.split('.')) || [];
+
+function specifierIncluded(specifier) {
+ var parts = specifier.split(' ');
+ var op = parts.length > 1 ? parts[0] : '=';
+ var versionParts = (parts.length > 1 ? parts[1] : parts[0]).split('.');
+
+ for (var i = 0; i < 3; ++i) {
+ var cur = parseInt(current[i] || 0, 10);
+ var ver = parseInt(versionParts[i] || 0, 10);
+ if (cur === ver) {
+ continue; // eslint-disable-line no-restricted-syntax, no-continue
+ }
+ if (op === '<') {
+ return cur < ver;
+ } else if (op === '>=') {
+ return cur >= ver;
+ } else {
+ return false;
+ }
+ }
+ return op === '>=';
+}
+
+function matchesRange(range) {
+ var specifiers = range.split(/ ?&& ?/);
+ if (specifiers.length === 0) { return false; }
+ for (var i = 0; i < specifiers.length; ++i) {
+ if (!specifierIncluded(specifiers[i])) { return false; }
+ }
+ return true;
+}
+
+function versionIncluded(specifierValue) {
+ if (typeof specifierValue === 'boolean') { return specifierValue; }
+ if (specifierValue && typeof specifierValue === 'object') {
+ for (var i = 0; i < specifierValue.length; ++i) {
+ if (matchesRange(specifierValue[i])) { return true; }
+ }
+ return false;
+ }
+ return matchesRange(specifierValue);
+}
+
+var data = require('./core.json');
+
+var core = {};
+for (var mod in data) { // eslint-disable-line no-restricted-syntax
+ if (Object.prototype.hasOwnProperty.call(data, mod)) {
+ core[mod] = versionIncluded(data[mod]);
+ }
+}
+module.exports = core;
diff --git a/chromium/third_party/node/node_modules/resolve/lib/core.json b/chromium/third_party/node/node_modules/resolve/lib/core.json
new file mode 100644
index 00000000000..0238b61a4c7
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/core.json
@@ -0,0 +1,83 @@
+{
+ "assert": true,
+ "assert/strict": ">= 15",
+ "async_hooks": ">= 8",
+ "buffer_ieee754": "< 0.9.7",
+ "buffer": true,
+ "child_process": true,
+ "cluster": true,
+ "console": true,
+ "constants": true,
+ "crypto": true,
+ "_debug_agent": ">= 1 && < 8",
+ "_debugger": "< 8",
+ "dgram": true,
+ "diagnostics_channel": ">= 15.1",
+ "dns": true,
+ "dns/promises": ">= 15",
+ "domain": ">= 0.7.12",
+ "events": true,
+ "freelist": "< 6",
+ "fs": true,
+ "fs/promises": [">= 10 && < 10.1", ">= 14"],
+ "_http_agent": ">= 0.11.1",
+ "_http_client": ">= 0.11.1",
+ "_http_common": ">= 0.11.1",
+ "_http_incoming": ">= 0.11.1",
+ "_http_outgoing": ">= 0.11.1",
+ "_http_server": ">= 0.11.1",
+ "http": true,
+ "http2": ">= 8.8",
+ "https": true,
+ "inspector": ">= 8.0.0",
+ "_linklist": "< 8",
+ "module": true,
+ "net": true,
+ "node-inspect/lib/_inspect": ">= 7.6.0 && < 12",
+ "node-inspect/lib/internal/inspect_client": ">= 7.6.0 && < 12",
+ "node-inspect/lib/internal/inspect_repl": ">= 7.6.0 && < 12",
+ "os": true,
+ "path": true,
+ "path/posix": ">= 15.3",
+ "path/win32": ">= 15.3",
+ "perf_hooks": ">= 8.5",
+ "process": ">= 1",
+ "punycode": true,
+ "querystring": true,
+ "readline": true,
+ "repl": true,
+ "smalloc": ">= 0.11.5 && < 3",
+ "_stream_duplex": ">= 0.9.4",
+ "_stream_transform": ">= 0.9.4",
+ "_stream_wrap": ">= 1.4.1",
+ "_stream_passthrough": ">= 0.9.4",
+ "_stream_readable": ">= 0.9.4",
+ "_stream_writable": ">= 0.9.4",
+ "stream": true,
+ "stream/promises": ">= 15",
+ "string_decoder": true,
+ "sys": [">= 0.6 && < 0.7", ">= 0.8"],
+ "timers": true,
+ "timers/promises": ">= 15",
+ "_tls_common": ">= 0.11.13",
+ "_tls_legacy": ">= 0.11.3 && < 10",
+ "_tls_wrap": ">= 0.11.3",
+ "tls": true,
+ "trace_events": ">= 10",
+ "tty": true,
+ "url": true,
+ "util": true,
+ "util/types": ">= 15.3",
+ "v8/tools/arguments": ">= 10 && < 12",
+ "v8/tools/codemap": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"],
+ "v8/tools/consarray": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"],
+ "v8/tools/csvparser": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"],
+ "v8/tools/logreader": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"],
+ "v8/tools/profile_view": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"],
+ "v8/tools/splaytree": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"],
+ "v8": ">= 1",
+ "vm": true,
+ "wasi": ">= 13.4 && < 13.5",
+ "worker_threads": ">= 11.7",
+ "zlib": true
+}
diff --git a/chromium/third_party/node/node_modules/resolve/lib/is-core.js b/chromium/third_party/node/node_modules/resolve/lib/is-core.js
new file mode 100644
index 00000000000..537f5c782ff
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/is-core.js
@@ -0,0 +1,5 @@
+var isCoreModule = require('is-core-module');
+
+module.exports = function isCore(x) {
+ return isCoreModule(x);
+};
diff --git a/chromium/third_party/node/node_modules/resolve/lib/node-modules-paths.js b/chromium/third_party/node/node_modules/resolve/lib/node-modules-paths.js
new file mode 100644
index 00000000000..2b43813a7a5
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/node-modules-paths.js
@@ -0,0 +1,42 @@
+var path = require('path');
+var parse = path.parse || require('path-parse');
+
+var getNodeModulesDirs = function getNodeModulesDirs(absoluteStart, modules) {
+ var prefix = '/';
+ if ((/^([A-Za-z]:)/).test(absoluteStart)) {
+ prefix = '';
+ } else if ((/^\\\\/).test(absoluteStart)) {
+ prefix = '\\\\';
+ }
+
+ var paths = [absoluteStart];
+ var parsed = parse(absoluteStart);
+ while (parsed.dir !== paths[paths.length - 1]) {
+ paths.push(parsed.dir);
+ parsed = parse(parsed.dir);
+ }
+
+ return paths.reduce(function (dirs, aPath) {
+ return dirs.concat(modules.map(function (moduleDir) {
+ return path.resolve(prefix, aPath, moduleDir);
+ }));
+ }, []);
+};
+
+module.exports = function nodeModulesPaths(start, opts, request) {
+ var modules = opts && opts.moduleDirectory
+ ? [].concat(opts.moduleDirectory)
+ : ['node_modules'];
+
+ if (opts && typeof opts.paths === 'function') {
+ return opts.paths(
+ request,
+ start,
+ function () { return getNodeModulesDirs(start, modules); },
+ opts
+ );
+ }
+
+ var dirs = getNodeModulesDirs(start, modules);
+ return opts && opts.paths ? dirs.concat(opts.paths) : dirs;
+};
diff --git a/chromium/third_party/node/node_modules/resolve/lib/normalize-options.js b/chromium/third_party/node/node_modules/resolve/lib/normalize-options.js
new file mode 100644
index 00000000000..4b56904eaea
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/normalize-options.js
@@ -0,0 +1,10 @@
+module.exports = function (x, opts) {
+ /**
+ * This file is purposefully a passthrough. It's expected that third-party
+ * environments will override it at runtime in order to inject special logic
+ * into `resolve` (by manipulating the options). One such example is the PnP
+ * code path in Yarn.
+ */
+
+ return opts || {};
+};
diff --git a/chromium/third_party/node/node_modules/resolve/lib/sync.js b/chromium/third_party/node/node_modules/resolve/lib/sync.js
new file mode 100644
index 00000000000..ef9bd803cee
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/lib/sync.js
@@ -0,0 +1,199 @@
+var isCore = require('is-core-module');
+var fs = require('fs');
+var path = require('path');
+var caller = require('./caller');
+var nodeModulesPaths = require('./node-modules-paths');
+var normalizeOptions = require('./normalize-options');
+
+var realpathFS = fs.realpathSync && typeof fs.realpathSync.native === 'function' ? fs.realpathSync.native : fs.realpathSync;
+
+var defaultIsFile = function isFile(file) {
+ try {
+ var stat = fs.statSync(file);
+ } catch (e) {
+ if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
+ throw e;
+ }
+ return stat.isFile() || stat.isFIFO();
+};
+
+var defaultIsDir = function isDirectory(dir) {
+ try {
+ var stat = fs.statSync(dir);
+ } catch (e) {
+ if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
+ throw e;
+ }
+ return stat.isDirectory();
+};
+
+var defaultRealpathSync = function realpathSync(x) {
+ try {
+ return realpathFS(x);
+ } catch (realpathErr) {
+ if (realpathErr.code !== 'ENOENT') {
+ throw realpathErr;
+ }
+ }
+ return x;
+};
+
+var maybeRealpathSync = function maybeRealpathSync(realpathSync, x, opts) {
+ if (opts && opts.preserveSymlinks === false) {
+ return realpathSync(x);
+ }
+ return x;
+};
+
+var defaultReadPackageSync = function defaultReadPackageSync(readFileSync, pkgfile) {
+ var body = readFileSync(pkgfile);
+ try {
+ var pkg = JSON.parse(body);
+ return pkg;
+ } catch (jsonErr) {}
+};
+
+var getPackageCandidates = function getPackageCandidates(x, start, opts) {
+ var dirs = nodeModulesPaths(start, opts, x);
+ for (var i = 0; i < dirs.length; i++) {
+ dirs[i] = path.join(dirs[i], x);
+ }
+ return dirs;
+};
+
+module.exports = function resolveSync(x, options) {
+ if (typeof x !== 'string') {
+ throw new TypeError('Path must be a string.');
+ }
+ var opts = normalizeOptions(x, options);
+
+ var isFile = opts.isFile || defaultIsFile;
+ var readFileSync = opts.readFileSync || fs.readFileSync;
+ var isDirectory = opts.isDirectory || defaultIsDir;
+ var realpathSync = opts.realpathSync || defaultRealpathSync;
+ var readPackageSync = opts.readPackageSync || defaultReadPackageSync;
+ if (opts.readFileSync && opts.readPackageSync) {
+ throw new TypeError('`readFileSync` and `readPackageSync` are mutually exclusive.');
+ }
+ var packageIterator = opts.packageIterator;
+
+ var extensions = opts.extensions || ['.js'];
+ var includeCoreModules = opts.includeCoreModules !== false;
+ var basedir = opts.basedir || path.dirname(caller());
+ var parent = opts.filename || basedir;
+
+ opts.paths = opts.paths || [];
+
+ // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory
+ var absoluteStart = maybeRealpathSync(realpathSync, path.resolve(basedir), opts);
+
+ if ((/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/).test(x)) {
+ var res = path.resolve(absoluteStart, x);
+ if (x === '.' || x === '..' || x.slice(-1) === '/') res += '/';
+ var m = loadAsFileSync(res) || loadAsDirectorySync(res);
+ if (m) return maybeRealpathSync(realpathSync, m, opts);
+ } else if (includeCoreModules && isCore(x)) {
+ return x;
+ } else {
+ var n = loadNodeModulesSync(x, absoluteStart);
+ if (n) return maybeRealpathSync(realpathSync, n, opts);
+ }
+
+ var err = new Error("Cannot find module '" + x + "' from '" + parent + "'");
+ err.code = 'MODULE_NOT_FOUND';
+ throw err;
+
+ function loadAsFileSync(x) {
+ var pkg = loadpkg(path.dirname(x));
+
+ if (pkg && pkg.dir && pkg.pkg && opts.pathFilter) {
+ var rfile = path.relative(pkg.dir, x);
+ var r = opts.pathFilter(pkg.pkg, x, rfile);
+ if (r) {
+ x = path.resolve(pkg.dir, r); // eslint-disable-line no-param-reassign
+ }
+ }
+
+ if (isFile(x)) {
+ return x;
+ }
+
+ for (var i = 0; i < extensions.length; i++) {
+ var file = x + extensions[i];
+ if (isFile(file)) {
+ return file;
+ }
+ }
+ }
+
+ function loadpkg(dir) {
+ if (dir === '' || dir === '/') return;
+ if (process.platform === 'win32' && (/^\w:[/\\]*$/).test(dir)) {
+ return;
+ }
+ if ((/[/\\]node_modules[/\\]*$/).test(dir)) return;
+
+ var pkgfile = path.join(maybeRealpathSync(realpathSync, dir, opts), 'package.json');
+
+ if (!isFile(pkgfile)) {
+ return loadpkg(path.dirname(dir));
+ }
+
+ var pkg = readPackageSync(readFileSync, pkgfile);
+
+ if (pkg && opts.packageFilter) {
+ // v2 will pass pkgfile
+ pkg = opts.packageFilter(pkg, /*pkgfile,*/ dir); // eslint-disable-line spaced-comment
+ }
+
+ return { pkg: pkg, dir: dir };
+ }
+
+ function loadAsDirectorySync(x) {
+ var pkgfile = path.join(maybeRealpathSync(realpathSync, x, opts), '/package.json');
+ if (isFile(pkgfile)) {
+ try {
+ var pkg = readPackageSync(readFileSync, pkgfile);
+ } catch (e) {}
+
+ if (pkg && opts.packageFilter) {
+ // v2 will pass pkgfile
+ pkg = opts.packageFilter(pkg, /*pkgfile,*/ x); // eslint-disable-line spaced-comment
+ }
+
+ if (pkg && pkg.main) {
+ if (typeof pkg.main !== 'string') {
+ var mainError = new TypeError('package “' + pkg.name + '” `main` must be a string');
+ mainError.code = 'INVALID_PACKAGE_MAIN';
+ throw mainError;
+ }
+ if (pkg.main === '.' || pkg.main === './') {
+ pkg.main = 'index';
+ }
+ try {
+ var m = loadAsFileSync(path.resolve(x, pkg.main));
+ if (m) return m;
+ var n = loadAsDirectorySync(path.resolve(x, pkg.main));
+ if (n) return n;
+ } catch (e) {}
+ }
+ }
+
+ return loadAsFileSync(path.join(x, '/index'));
+ }
+
+ function loadNodeModulesSync(x, start) {
+ var thunk = function () { return getPackageCandidates(x, start, opts); };
+ var dirs = packageIterator ? packageIterator(x, start, thunk, opts) : thunk();
+
+ for (var i = 0; i < dirs.length; i++) {
+ var dir = dirs[i];
+ if (isDirectory(path.dirname(dir))) {
+ var m = loadAsFileSync(dir);
+ if (m) return m;
+ var n = loadAsDirectorySync(dir);
+ if (n) return n;
+ }
+ }
+ }
+};
diff --git a/chromium/third_party/node/node_modules/resolve/package.json b/chromium/third_party/node/node_modules/resolve/package.json
new file mode 100644
index 00000000000..52a78a2338a
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "resolve",
+ "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously",
+ "version": "1.20.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/browserify/resolve.git"
+ },
+ "main": "index.js",
+ "keywords": [
+ "resolve",
+ "require",
+ "node",
+ "module"
+ ],
+ "scripts": {
+ "prepublish": "safe-publish-latest && cp node_modules/is-core-module/core.json ./lib/ ||:",
+ "prelint": "eclint check '**/*'",
+ "lint": "eslint --ext=js,mjs .",
+ "pretests-only": "cd ./test/resolver/nested_symlinks && node mylib/sync && node mylib/async",
+ "tests-only": "tape test/*.js",
+ "pretest": "npm run lint",
+ "test": "npm run --silent tests-only",
+ "posttest": "npm run test:multirepo && aud --production",
+ "test:multirepo": "cd ./test/resolver/multirepo && npm install && npm test"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.5.1",
+ "array.prototype.map": "^1.0.3",
+ "aud": "^1.1.4",
+ "eclint": "^2.8.1",
+ "eslint": "^7.19.0",
+ "object-keys": "^1.1.1",
+ "safe-publish-latest": "^1.1.4",
+ "tap": "0.4.13",
+ "tape": "^5.1.1"
+ },
+ "license": "MIT",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "dependencies": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+}
diff --git a/chromium/third_party/node/node_modules/resolve/readme.markdown b/chromium/third_party/node/node_modules/resolve/readme.markdown
new file mode 100644
index 00000000000..7c9f2dcd533
--- /dev/null
+++ b/chromium/third_party/node/node_modules/resolve/readme.markdown
@@ -0,0 +1,279 @@
+# resolve
+
+implements the [node `require.resolve()`
+algorithm](https://nodejs.org/api/modules.html#modules_all_together)
+such that you can `require.resolve()` on behalf of a file asynchronously and
+synchronously
+
+[![build status](https://secure.travis-ci.org/browserify/resolve.png)](http://travis-ci.org/browserify/resolve)
+
+# example
+
+asynchronously resolve:
+
+```js
+var resolve = require('resolve');
+resolve('tap', { basedir: __dirname }, function (err, res) {
+ if (err) console.error(err);
+ else console.log(res);
+});
+```
+
+```
+$ node example/async.js
+/home/substack/projects/node-resolve/node_modules/tap/lib/main.js
+```
+
+synchronously resolve:
+
+```js
+var resolve = require('resolve');
+var res = resolve.sync('tap', { basedir: __dirname });
+console.log(res);
+```
+
+```
+$ node example/sync.js
+/home/substack/projects/node-resolve/node_modules/tap/lib/main.js
+```
+
+# methods
+
+```js
+var resolve = require('resolve');
+```
+
+For both the synchronous and asynchronous methods, errors may have any of the following `err.code` values:
+
+- `MODULE_NOT_FOUND`: the given path string (`id`) could not be resolved to a module
+- `INVALID_BASEDIR`: the specified `opts.basedir` doesn't exist, or is not a directory
+- `INVALID_PACKAGE_MAIN`: a `package.json` was encountered with an invalid `main` property (eg. not a string)
+
+## resolve(id, opts={}, cb)
+
+Asynchronously resolve the module path string `id` into `cb(err, res [, pkg])`, where `pkg` (if defined) is the data from `package.json`.
+
+options are:
+
+* opts.basedir - directory to begin resolving from
+
+* opts.package - `package.json` data applicable to the module being loaded
+
+* opts.extensions - array of file extensions to search in order
+
+* opts.includeCoreModules - set to `false` to exclude node core modules (e.g. `fs`) from the search
+
+* opts.readFile - how to read files asynchronously
+
+* opts.isFile - function to asynchronously test whether a file exists
+
+* opts.isDirectory - function to asynchronously test whether a directory exists
+
+* opts.realpath - function to asynchronously resolve a potential symlink to its real path
+
+* `opts.readPackage(readFile, pkgfile, cb)` - function to asynchronously read and parse a package.json file
+ * readFile - the passed `opts.readFile` or `fs.readFile` if not specified
+ * pkgfile - path to package.json
+ * cb - callback
+
+* `opts.packageFilter(pkg, pkgfile, dir)` - transform the parsed package.json contents before looking at the "main" field
+ * pkg - package data
+ * pkgfile - path to package.json
+ * dir - directory for package.json
+
+* `opts.pathFilter(pkg, path, relativePath)` - transform a path within a package
+ * pkg - package data
+ * path - the path being resolved
+ * relativePath - the path relative from the package.json location
+ * returns - a relative path that will be joined from the package.json location
+
+* opts.paths - require.paths array to use if nothing is found on the normal `node_modules` recursive walk (probably don't use this)
+
+ For advanced users, `paths` can also be a `opts.paths(request, start, opts)` function
+ * request - the import specifier being resolved
+ * start - lookup path
+ * getNodeModulesDirs - a thunk (no-argument function) that returns the paths using standard `node_modules` resolution
+ * opts - the resolution options
+
+* `opts.packageIterator(request, start, opts)` - return the list of candidate paths where the packages sources may be found (probably don't use this)
+ * request - the import specifier being resolved
+ * start - lookup path
+ * getPackageCandidates - a thunk (no-argument function) that returns the paths using standard `node_modules` resolution
+ * opts - the resolution options
+
+* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"`
+
+* opts.preserveSymlinks - if true, doesn't resolve `basedir` to real path before resolving.
+This is the way Node resolves dependencies when executed with the [--preserve-symlinks](https://nodejs.org/api/all.html#cli_preserve_symlinks) flag.
+**Note:** this property is currently `true` by default but it will be changed to
+`false` in the next major version because *Node's resolution algorithm does not preserve symlinks by default*.
+
+default `opts` values:
+
+```js
+{
+ paths: [],
+ basedir: __dirname,
+ extensions: ['.js'],
+ includeCoreModules: true,
+ readFile: fs.readFile,
+ isFile: function isFile(file, cb) {
+ fs.stat(file, function (err, stat) {
+ if (!err) {
+ return cb(null, stat.isFile() || stat.isFIFO());
+ }
+ if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false);
+ return cb(err);
+ });
+ },
+ isDirectory: function isDirectory(dir, cb) {
+ fs.stat(dir, function (err, stat) {
+ if (!err) {
+ return cb(null, stat.isDirectory());
+ }
+ if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false);
+ return cb(err);
+ });
+ },
+ realpath: function realpath(file, cb) {
+ var realpath = typeof fs.realpath.native === 'function' ? fs.realpath.native : fs.realpath;
+ realpath(file, function (realPathErr, realPath) {
+ if (realPathErr && realPathErr.code !== 'ENOENT') cb(realPathErr);
+ else cb(null, realPathErr ? file : realPath);
+ });
+ },
+ readPackage: function defaultReadPackage(readFile, pkgfile, cb) {
+ readFile(pkgfile, function (readFileErr, body) {
+ if (readFileErr) cb(readFileErr);
+ else {
+ try {
+ var pkg = JSON.parse(body);
+ cb(null, pkg);
+ } catch (jsonErr) {
+ cb(null);
+ }
+ }
+ });
+ },
+ moduleDirectory: 'node_modules',
+ preserveSymlinks: true
+}
+```
+
+## resolve.sync(id, opts)
+
+Synchronously resolve the module path string `id`, returning the result and
+throwing an error when `id` can't be resolved.
+
+options are:
+
+* opts.basedir - directory to begin resolving from
+
+* opts.extensions - array of file extensions to search in order
+
+* opts.includeCoreModules - set to `false` to exclude node core modules (e.g. `fs`) from the search
+
+* opts.readFileSync - how to read files synchronously
+
+* opts.isFile - function to synchronously test whether a file exists
+
+* opts.isDirectory - function to synchronously test whether a directory exists
+
+* opts.realpathSync - function to synchronously resolve a potential symlink to its real path
+
+* `opts.readPackageSync(readFileSync, pkgfile)` - function to synchronously read and parse a package.json file
+ * readFileSync - the passed `opts.readFileSync` or `fs.readFileSync` if not specified
+ * pkgfile - path to package.json
+
+* `opts.packageFilter(pkg, dir)` - transform the parsed package.json contents before looking at the "main" field
+ * pkg - package data
+ * dir - directory for package.json (Note: the second argument will change to "pkgfile" in v2)
+
+* `opts.pathFilter(pkg, path, relativePath)` - transform a path within a package
+ * pkg - package data
+ * path - the path being resolved
+ * relativePath - the path relative from the package.json location
+ * returns - a relative path that will be joined from the package.json location
+
+* opts.paths - require.paths array to use if nothing is found on the normal `node_modules` recursive walk (probably don't use this)
+
+ For advanced users, `paths` can also be a `opts.paths(request, start, opts)` function
+ * request - the import specifier being resolved
+ * start - lookup path
+ * getNodeModulesDirs - a thunk (no-argument function) that returns the paths using standard `node_modules` resolution
+ * opts - the resolution options
+
+* `opts.packageIterator(request, start, opts)` - return the list of candidate paths where the packages sources may be found (probably don't use this)
+ * request - the import specifier being resolved
+ * start - lookup path
+ * getPackageCandidates - a thunk (no-argument function) that returns the paths using standard `node_modules` resolution
+ * opts - the resolution options
+
+* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"`
+
+* opts.preserveSymlinks - if true, doesn't resolve `basedir` to real path before resolving.
+This is the way Node resolves dependencies when executed with the [--preserve-symlinks](https://nodejs.org/api/all.html#cli_preserve_symlinks) flag.
+**Note:** this property is currently `true` by default but it will be changed to
+`false` in the next major version because *Node's resolution algorithm does not preserve symlinks by default*.
+
+default `opts` values:
+
+```js
+{
+ paths: [],
+ basedir: __dirname,
+ extensions: ['.js'],
+ includeCoreModules: true,
+ readFileSync: fs.readFileSync,
+ isFile: function isFile(file) {
+ try {
+ var stat = fs.statSync(file);
+ } catch (e) {
+ if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
+ throw e;
+ }
+ return stat.isFile() || stat.isFIFO();
+ },
+ isDirectory: function isDirectory(dir) {
+ try {
+ var stat = fs.statSync(dir);
+ } catch (e) {
+ if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
+ throw e;
+ }
+ return stat.isDirectory();
+ },
+ realpathSync: function realpathSync(file) {
+ try {
+ var realpath = typeof fs.realpathSync.native === 'function' ? fs.realpathSync.native : fs.realpathSync;
+ return realpath(file);
+ } catch (realPathErr) {
+ if (realPathErr.code !== 'ENOENT') {
+ throw realPathErr;
+ }
+ }
+ return file;
+ },
+ readPackageSync: function defaultReadPackageSync(readFileSync, pkgfile) {
+ var body = readFileSync(pkgfile);
+ try {
+ var pkg = JSON.parse(body);
+ return pkg;
+ } catch (jsonErr) {}
+ },
+ moduleDirectory: 'node_modules',
+ preserveSymlinks: true
+}
+```
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```sh
+npm install resolve
+```
+
+# license
+
+MIT
diff --git a/chromium/third_party/node/node_modules/supports-color/browser.js b/chromium/third_party/node/node_modules/supports-color/browser.js
new file mode 100644
index 00000000000..62afa3a7425
--- /dev/null
+++ b/chromium/third_party/node/node_modules/supports-color/browser.js
@@ -0,0 +1,5 @@
+'use strict';
+module.exports = {
+ stdout: false,
+ stderr: false
+};
diff --git a/chromium/third_party/node/node_modules/supports-color/index.js b/chromium/third_party/node/node_modules/supports-color/index.js
new file mode 100644
index 00000000000..1704131bdf6
--- /dev/null
+++ b/chromium/third_party/node/node_modules/supports-color/index.js
@@ -0,0 +1,131 @@
+'use strict';
+const os = require('os');
+const hasFlag = require('has-flag');
+
+const env = process.env;
+
+let forceColor;
+if (hasFlag('no-color') ||
+ hasFlag('no-colors') ||
+ hasFlag('color=false')) {
+ forceColor = false;
+} else if (hasFlag('color') ||
+ hasFlag('colors') ||
+ hasFlag('color=true') ||
+ hasFlag('color=always')) {
+ forceColor = true;
+}
+if ('FORCE_COLOR' in env) {
+ forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;
+}
+
+function translateLevel(level) {
+ if (level === 0) {
+ return false;
+ }
+
+ return {
+ level,
+ hasBasic: true,
+ has256: level >= 2,
+ has16m: level >= 3
+ };
+}
+
+function supportsColor(stream) {
+ if (forceColor === false) {
+ return 0;
+ }
+
+ if (hasFlag('color=16m') ||
+ hasFlag('color=full') ||
+ hasFlag('color=truecolor')) {
+ return 3;
+ }
+
+ if (hasFlag('color=256')) {
+ return 2;
+ }
+
+ if (stream && !stream.isTTY && forceColor !== true) {
+ return 0;
+ }
+
+ const min = forceColor ? 1 : 0;
+
+ if (process.platform === 'win32') {
+ // Node.js 7.5.0 is the first version of Node.js to include a patch to
+ // libuv that enables 256 color output on Windows. Anything earlier and it
+ // won't work. However, here we target Node.js 8 at minimum as it is an LTS
+ // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows
+ // release that supports 256 colors. Windows 10 build 14931 is the first release
+ // that supports 16m/TrueColor.
+ const osRelease = os.release().split('.');
+ if (
+ Number(process.versions.node.split('.')[0]) >= 8 &&
+ Number(osRelease[0]) >= 10 &&
+ Number(osRelease[2]) >= 10586
+ ) {
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
+ }
+
+ return 1;
+ }
+
+ if ('CI' in env) {
+ if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
+ return 1;
+ }
+
+ return min;
+ }
+
+ if ('TEAMCITY_VERSION' in env) {
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+ }
+
+ if (env.COLORTERM === 'truecolor') {
+ return 3;
+ }
+
+ if ('TERM_PROGRAM' in env) {
+ const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
+
+ switch (env.TERM_PROGRAM) {
+ case 'iTerm.app':
+ return version >= 3 ? 3 : 2;
+ case 'Apple_Terminal':
+ return 2;
+ // No default
+ }
+ }
+
+ if (/-256(color)?$/i.test(env.TERM)) {
+ return 2;
+ }
+
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+ return 1;
+ }
+
+ if ('COLORTERM' in env) {
+ return 1;
+ }
+
+ if (env.TERM === 'dumb') {
+ return min;
+ }
+
+ return min;
+}
+
+function getSupportLevel(stream) {
+ const level = supportsColor(stream);
+ return translateLevel(level);
+}
+
+module.exports = {
+ supportsColor: getSupportLevel,
+ stdout: getSupportLevel(process.stdout),
+ stderr: getSupportLevel(process.stderr)
+};
diff --git a/chromium/third_party/node/node_modules/supports-color/license b/chromium/third_party/node/node_modules/supports-color/license
new file mode 100644
index 00000000000..e7af2f77107
--- /dev/null
+++ b/chromium/third_party/node/node_modules/supports-color/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/supports-color/package.json b/chromium/third_party/node/node_modules/supports-color/package.json
new file mode 100644
index 00000000000..ad199f5cdb0
--- /dev/null
+++ b/chromium/third_party/node/node_modules/supports-color/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "supports-color",
+ "version": "5.5.0",
+ "description": "Detect whether a terminal supports color",
+ "license": "MIT",
+ "repository": "chalk/supports-color",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js",
+ "browser.js"
+ ],
+ "keywords": [
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "ansi",
+ "styles",
+ "tty",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "support",
+ "supports",
+ "capability",
+ "detect",
+ "truecolor",
+ "16m"
+ ],
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "devDependencies": {
+ "ava": "^0.25.0",
+ "import-fresh": "^2.0.0",
+ "xo": "^0.20.0"
+ },
+ "browser": "browser.js"
+}
diff --git a/chromium/third_party/node/node_modules/to-fast-properties/index.js b/chromium/third_party/node/node_modules/to-fast-properties/index.js
new file mode 100644
index 00000000000..028c88af01d
--- /dev/null
+++ b/chromium/third_party/node/node_modules/to-fast-properties/index.js
@@ -0,0 +1,27 @@
+'use strict';
+
+let fastProto = null;
+
+// Creates an object with permanently fast properties in V8. See Toon Verwaest's
+// post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62
+// for more details. Use %HasFastProperties(object) and the Node.js flag
+// --allow-natives-syntax to check whether an object has fast properties.
+function FastObject(o) {
+ // A prototype object will have "fast properties" enabled once it is checked
+ // against the inline property cache of a function, e.g. fastProto.property:
+ // https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63
+ if (fastProto !== null && typeof fastProto.property) {
+ const result = fastProto;
+ fastProto = FastObject.prototype = null;
+ return result;
+ }
+ fastProto = FastObject.prototype = o == null ? Object.create(null) : o;
+ return new FastObject;
+}
+
+// Initialize the inline property cache of FastObject
+FastObject();
+
+module.exports = function toFastproperties(o) {
+ return FastObject(o);
+};
diff --git a/chromium/third_party/node/node_modules/to-fast-properties/license b/chromium/third_party/node/node_modules/to-fast-properties/license
new file mode 100644
index 00000000000..cef79eff984
--- /dev/null
+++ b/chromium/third_party/node/node_modules/to-fast-properties/license
@@ -0,0 +1,10 @@
+MIT License
+
+Copyright (c) 2014 Petka Antonov
+ 2015 Sindre Sorhus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/node/node_modules/to-fast-properties/package.json b/chromium/third_party/node/node_modules/to-fast-properties/package.json
new file mode 100644
index 00000000000..7a64b2ccb13
--- /dev/null
+++ b/chromium/third_party/node/node_modules/to-fast-properties/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "to-fast-properties",
+ "version": "2.0.0",
+ "description": "Force V8 to use fast properties for an object",
+ "license": "MIT",
+ "repository": "sindresorhus/to-fast-properties",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "scripts": {
+ "test": "node --allow-natives-syntax test.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "object",
+ "obj",
+ "properties",
+ "props",
+ "v8",
+ "optimize",
+ "fast",
+ "convert",
+ "mode"
+ ],
+ "devDependencies": {
+ "ava": "0.0.4"
+ }
+}
diff --git a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.cpp b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.cpp
index 708e6778a8d..6aa6f3089f1 100644
--- a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.cpp
+++ b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.cpp
@@ -10,6 +10,7 @@
#include <utility>
#include "core/fpdfapi/parser/cpdf_boolean.h"
+#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
@@ -153,6 +154,10 @@ float CPDF_Array::GetNumberAt(size_t index) const {
return m_Objects[index]->GetNumber();
}
+RetainPtr<CPDF_Dictionary> CPDF_Array::GetMutableDictAt(size_t index) {
+ return pdfium::WrapRetain(GetDictAt(index));
+}
+
CPDF_Dictionary* CPDF_Array::GetDictAt(size_t index) {
CPDF_Object* p = GetDirectObjectAt(index);
if (!p)
diff --git a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.h b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.h
index 2270c7d9c8f..223cd59ab7c 100644
--- a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.h
+++ b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_array.h
@@ -62,7 +62,8 @@ class CPDF_Array final : public CPDF_Object {
bool GetBooleanAt(size_t index, bool bDefault) const;
int GetIntegerAt(size_t index) const;
float GetNumberAt(size_t index) const;
- CPDF_Dictionary* GetDictAt(size_t index);
+ RetainPtr<CPDF_Dictionary> GetMutableDictAt(size_t index);
+ CPDF_Dictionary* GetDictAt(size_t index); // prefer previous form.
const CPDF_Dictionary* GetDictAt(size_t index) const;
CPDF_Stream* GetStreamAt(size_t index);
const CPDF_Stream* GetStreamAt(size_t index) const;
diff --git a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.cpp b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.cpp
index fc671e76bfb..047b25e2c0b 100644
--- a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.cpp
+++ b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.cpp
@@ -148,6 +148,11 @@ float CPDF_Dictionary::GetNumberFor(const ByteString& key) const {
return p ? p->GetNumber() : 0;
}
+RetainPtr<CPDF_Dictionary> CPDF_Dictionary::GetMutableDictFor(
+ const ByteString& key) {
+ return pdfium::WrapRetain(GetDictFor(key));
+}
+
const CPDF_Dictionary* CPDF_Dictionary::GetDictFor(
const ByteString& key) const {
const CPDF_Object* p = GetDirectObjectFor(key);
@@ -165,6 +170,11 @@ CPDF_Dictionary* CPDF_Dictionary::GetDictFor(const ByteString& key) {
static_cast<const CPDF_Dictionary*>(this)->GetDictFor(key));
}
+RetainPtr<CPDF_Array> CPDF_Dictionary::GetMutableArrayFor(
+ const ByteString& key) {
+ return pdfium::WrapRetain(GetArrayFor(key));
+}
+
const CPDF_Array* CPDF_Dictionary::GetArrayFor(const ByteString& key) const {
return ToArray(GetDirectObjectFor(key));
}
diff --git a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.h b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.h
index 653b48c478f..c7ccdc6eef5 100644
--- a/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/chromium/third_party/pdfium/core/fpdfapi/parser/cpdf_dictionary.h
@@ -67,9 +67,11 @@ class CPDF_Dictionary final : public CPDF_Object {
int GetIntegerFor(const ByteString& key, int default_int) const;
float GetNumberFor(const ByteString& key) const;
const CPDF_Dictionary* GetDictFor(const ByteString& key) const;
- CPDF_Dictionary* GetDictFor(const ByteString& key);
+ CPDF_Dictionary* GetDictFor(const ByteString& key); // Prefer next form.
+ RetainPtr<CPDF_Dictionary> GetMutableDictFor(const ByteString& key);
const CPDF_Array* GetArrayFor(const ByteString& key) const;
- CPDF_Array* GetArrayFor(const ByteString& key);
+ CPDF_Array* GetArrayFor(const ByteString& key); // Prefer next form.
+ RetainPtr<CPDF_Array> GetMutableArrayFor(const ByteString& key);
const CPDF_Stream* GetStreamFor(const ByteString& key) const;
CPDF_Stream* GetStreamFor(const ByteString& key);
CFX_FloatRect GetRectFor(const ByteString& key) const;
diff --git a/chromium/third_party/pdfium/core/fpdfdoc/cpdf_nametree.cpp b/chromium/third_party/pdfium/core/fpdfdoc/cpdf_nametree.cpp
index ffec5fed201..09d4a873fbd 100644
--- a/chromium/third_party/pdfium/core/fpdfdoc/cpdf_nametree.cpp
+++ b/chromium/third_party/pdfium/core/fpdfdoc/cpdf_nametree.cpp
@@ -43,7 +43,7 @@ std::pair<WideString, WideString> GetNodeLimitsAndSanitize(
// Get the limit arrays that leaf array |pFind| is under in the tree with root
// |pNode|. |pLimits| will hold all the limit arrays from the leaf up to before
// the root. Return true if successful.
-bool GetNodeAncestorsLimitsInternal(CPDF_Dictionary* pNode,
+bool GetNodeAncestorsLimitsInternal(const RetainPtr<CPDF_Dictionary>& pNode,
const CPDF_Array* pFind,
int nLevel,
std::vector<CPDF_Array*>* pLimits) {
@@ -60,7 +60,7 @@ bool GetNodeAncestorsLimitsInternal(CPDF_Dictionary* pNode,
return false;
for (size_t i = 0; i < pKids->size(); ++i) {
- CPDF_Dictionary* pKid = pKids->GetDictAt(i);
+ RetainPtr<CPDF_Dictionary> pKid = pKids->GetMutableDictAt(i);
if (!pKid)
continue;
@@ -74,8 +74,9 @@ bool GetNodeAncestorsLimitsInternal(CPDF_Dictionary* pNode,
// Wrapper for GetNodeAncestorsLimitsInternal() so callers do not need to know
// about the details.
-std::vector<CPDF_Array*> GetNodeAncestorsLimits(CPDF_Dictionary* pNode,
- const CPDF_Array* pFind) {
+std::vector<CPDF_Array*> GetNodeAncestorsLimits(
+ const RetainPtr<CPDF_Dictionary>& pNode,
+ const CPDF_Array* pFind) {
std::vector<CPDF_Array*> results;
GetNodeAncestorsLimitsInternal(pNode, pFind, 0, &results);
return results;
@@ -169,21 +170,22 @@ bool UpdateNodesAndLimitsUponDeletion(CPDF_Dictionary* pNode,
// will be the index of |csName| in |ppFind|. If |csName| is not found, |ppFind|
// will be the leaf array that |csName| should be added to, and |pFindIndex|
// will be the index that it should be added at.
-CPDF_Object* SearchNameNodeByNameInternal(CPDF_Dictionary* pNode,
- const WideString& csName,
- int nLevel,
- size_t* nIndex,
- CPDF_Array** ppFind,
- int* pFindIndex) {
+CPDF_Object* SearchNameNodeByNameInternal(
+ const RetainPtr<CPDF_Dictionary>& pNode,
+ const WideString& csName,
+ int nLevel,
+ size_t* nIndex,
+ RetainPtr<CPDF_Array>* ppFind,
+ int* pFindIndex) {
if (nLevel > kNameTreeMaxRecursion)
return nullptr;
- CPDF_Array* pLimits = pNode->GetArrayFor("Limits");
- CPDF_Array* pNames = pNode->GetArrayFor("Names");
+ RetainPtr<CPDF_Array> pLimits = pNode->GetMutableArrayFor("Limits");
+ RetainPtr<CPDF_Array> pNames = pNode->GetMutableArrayFor("Names");
if (pLimits) {
WideString csLeft;
WideString csRight;
- std::tie(csLeft, csRight) = GetNodeLimitsAndSanitize(pLimits);
+ std::tie(csLeft, csRight) = GetNodeLimitsAndSanitize(pLimits.Get());
// Skip this node if the name to look for is smaller than its lower limit.
if (csName.Compare(csLeft) < 0)
return nullptr;
@@ -222,12 +224,12 @@ CPDF_Object* SearchNameNodeByNameInternal(CPDF_Dictionary* pNode,
}
// Search through the node's children.
- CPDF_Array* pKids = pNode->GetArrayFor("Kids");
+ RetainPtr<CPDF_Array> pKids = pNode->GetMutableArrayFor("Kids");
if (!pKids)
return nullptr;
for (size_t i = 0; i < pKids->size(); i++) {
- CPDF_Dictionary* pKid = pKids->GetDictAt(i);
+ RetainPtr<CPDF_Dictionary> pKid = pKids->GetMutableDictAt(i);
if (!pKid)
continue;
@@ -241,9 +243,9 @@ CPDF_Object* SearchNameNodeByNameInternal(CPDF_Dictionary* pNode,
// Wrapper for SearchNameNodeByNameInternal() so callers do not need to know
// about the details.
-CPDF_Object* SearchNameNodeByName(CPDF_Dictionary* pNode,
+CPDF_Object* SearchNameNodeByName(const RetainPtr<CPDF_Dictionary>& pNode,
const WideString& csName,
- CPDF_Array** ppFind,
+ RetainPtr<CPDF_Array>* ppFind,
int* pFindIndex) {
size_t nIndex = 0;
return SearchNameNodeByNameInternal(pNode, csName, 0, &nIndex, ppFind,
@@ -439,17 +441,17 @@ size_t CPDF_NameTree::GetCount() const {
bool CPDF_NameTree::AddValueAndName(RetainPtr<CPDF_Object> pObj,
const WideString& name) {
- CPDF_Array* pFind = nullptr;
+ RetainPtr<CPDF_Array> pFind;
int nFindIndex = -1;
// Handle the corner case where the root node is empty. i.e. No kids and no
// names. In which case, just insert into it and skip all the searches.
- CPDF_Array* pNames = m_pRoot->GetArrayFor("Names");
+ RetainPtr<CPDF_Array> pNames = m_pRoot->GetMutableArrayFor("Names");
if (pNames && pNames->IsEmpty() && !m_pRoot->GetArrayFor("Kids"))
pFind = pNames;
if (!pFind) {
// Fail if the tree already contains this name or if the tree is too deep.
- if (SearchNameNodeByName(m_pRoot.Get(), name, &pFind, &nFindIndex))
+ if (SearchNameNodeByName(m_pRoot, name, &pFind, &nFindIndex))
return false;
}
@@ -479,7 +481,7 @@ bool CPDF_NameTree::AddValueAndName(RetainPtr<CPDF_Object> pObj,
// Expand the limits that the newly added name is under, if the name falls
// outside of the limits of its leaf array or any arrays above it.
std::vector<CPDF_Array*> all_limits =
- GetNodeAncestorsLimits(m_pRoot.Get(), pFind);
+ GetNodeAncestorsLimits(m_pRoot, pFind.Get());
for (auto* pLimits : all_limits) {
if (!pLimits)
continue;
@@ -525,7 +527,7 @@ CPDF_Object* CPDF_NameTree::LookupValueAndName(size_t nIndex,
}
CPDF_Object* CPDF_NameTree::LookupValue(const WideString& csName) const {
- return SearchNameNodeByName(m_pRoot.Get(), csName, nullptr, nullptr);
+ return SearchNameNodeByName(m_pRoot, csName, nullptr, nullptr);
}
CPDF_Array* CPDF_NameTree::LookupNewStyleNamedDest(const ByteString& sName) {
diff --git a/chromium/third_party/sqlite/src/amalgamation/sqlite3.c b/chromium/third_party/sqlite/src/amalgamation/sqlite3.c
index 4f3bbab24a2..12663aa31f3 100644
--- a/chromium/third_party/sqlite/src/amalgamation/sqlite3.c
+++ b/chromium/third_party/sqlite/src/amalgamation/sqlite3.c
@@ -454,7 +454,7 @@ extern "C" {
*/
#define SQLITE_VERSION "3.38.1"
#define SQLITE_VERSION_NUMBER 3038001
-#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc"
+#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 77fe6454b9f28145248a0f14f2f6a6d72c606f5dabaf4895a850336a38df7efc"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -140710,7 +140710,9 @@ SQLITE_PRIVATE int sqlite3Select(
){
SELECTTRACE(0x100,pParse,p,
("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
- sqlite3ExprListDelete(db, pSub->pOrderBy);
+ sqlite3ParserAddCleanup(pParse,
+ (void(*)(sqlite3*,void*))sqlite3ExprListDelete,
+ pSub->pOrderBy);
pSub->pOrderBy = 0;
}
@@ -233857,7 +233859,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2022-03-12 13:37:29 0000000000000000000000000000000000000000000000000000000000000000", -1, SQLITE_TRANSIENT);
}
/*
diff --git a/chromium/third_party/sqlite/src/amalgamation/sqlite3.h b/chromium/third_party/sqlite/src/amalgamation/sqlite3.h
index d7f21648941..6a69197c338 100644
--- a/chromium/third_party/sqlite/src/amalgamation/sqlite3.h
+++ b/chromium/third_party/sqlite/src/amalgamation/sqlite3.h
@@ -148,7 +148,7 @@ extern "C" {
*/
#define SQLITE_VERSION "3.38.1"
#define SQLITE_VERSION_NUMBER 3038001
-#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc"
+#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 77fe6454b9f28145248a0f14f2f6a6d72c606f5dabaf4895a850336a38df7efc"
/*
** CAPI3REF: Run-Time Library Version Numbers
diff --git a/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.c b/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.c
index c04763e6a39..be4164500d3 100644
--- a/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.c
+++ b/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.c
@@ -454,7 +454,7 @@ extern "C" {
*/
#define SQLITE_VERSION "3.38.1"
#define SQLITE_VERSION_NUMBER 3038001
-#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc"
+#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 77fe6454b9f28145248a0f14f2f6a6d72c606f5dabaf4895a850336a38df7efc"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -140723,7 +140723,9 @@ SQLITE_PRIVATE int sqlite3Select(
){
SELECTTRACE(0x100,pParse,p,
("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
- sqlite3ExprListDelete(db, pSub->pOrderBy);
+ sqlite3ParserAddCleanup(pParse,
+ (void(*)(sqlite3*,void*))sqlite3ExprListDelete,
+ pSub->pOrderBy);
pSub->pOrderBy = 0;
}
@@ -234376,7 +234378,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2022-03-12 13:37:29 0000000000000000000000000000000000000000000000000000000000000000", -1, SQLITE_TRANSIENT);
}
/*
diff --git a/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.h b/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.h
index d7f21648941..6a69197c338 100644
--- a/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.h
+++ b/chromium/third_party/sqlite/src/amalgamation_dev/sqlite3.h
@@ -148,7 +148,7 @@ extern "C" {
*/
#define SQLITE_VERSION "3.38.1"
#define SQLITE_VERSION_NUMBER 3038001
-#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc"
+#define SQLITE_SOURCE_ID "2022-03-12 13:37:29 77fe6454b9f28145248a0f14f2f6a6d72c606f5dabaf4895a850336a38df7efc"
/*
** CAPI3REF: Run-Time Library Version Numbers
diff --git a/chromium/third_party/sqlite/src/manifest b/chromium/third_party/sqlite/src/manifest
index 4ca65c88cb8..79b57f8c6a0 100644
--- a/chromium/third_party/sqlite/src/manifest
+++ b/chromium/third_party/sqlite/src/manifest
@@ -552,7 +552,7 @@ F src/printf.c 05d8dfd2018bc4fc3ddb8b37eb97ccef7abf985643fa1caebdcf2916ca90fa32
F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c
F src/resolve.c ea935b87d6fb36c78b70cdc7b28561dc8f33f2ef37048389549c7b5ef9b0ba5e
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
-F src/select.c 3baa9dd8cf240654773c7974e2bcce398ac9dd24419c36684156963defe43b35
+F src/select.c fa35220b59972a30aa0a0bcd3419382952e8e94705b3bd67457d7253b2313ac7
F src/shell.c.in 69d1e59da4881f096ab47fbd3e6d99794f3e4a43f41fd9e4d2e845c9b8d20fd5
F src/sqlite.h.in b93deee892f1bc4030e5c8712df9e21d786a1bf8e921ab8dc987eaf1e44c676f
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
diff --git a/chromium/third_party/sqlite/src/manifest.uuid b/chromium/third_party/sqlite/src/manifest.uuid
index 5ec8976c068..cd09bbf164e 100644
--- a/chromium/third_party/sqlite/src/manifest.uuid
+++ b/chromium/third_party/sqlite/src/manifest.uuid
@@ -1 +1 @@
-38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc \ No newline at end of file
+0000000000000000000000000000000000000000000000000000000000000000
diff --git a/chromium/third_party/sqlite/src/src/select.c b/chromium/third_party/sqlite/src/src/select.c
index 6719d474718..268b711bd59 100644
--- a/chromium/third_party/sqlite/src/src/select.c
+++ b/chromium/third_party/sqlite/src/src/select.c
@@ -6516,7 +6516,9 @@ int sqlite3Select(
){
SELECTTRACE(0x100,pParse,p,
("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
- sqlite3ExprListDelete(db, pSub->pOrderBy);
+ sqlite3ParserAddCleanup(pParse,
+ (void(*)(sqlite3*,void*))sqlite3ExprListDelete,
+ pSub->pOrderBy);
pSub->pOrderBy = 0;
}
diff --git a/chromium/third_party/webrtc/pc/rtp_sender.cc b/chromium/third_party/webrtc/pc/rtp_sender.cc
index dc53105b6dc..3604d198e8f 100644
--- a/chromium/third_party/webrtc/pc/rtp_sender.cc
+++ b/chromium/third_party/webrtc/pc/rtp_sender.cc
@@ -75,8 +75,8 @@ RtpParameters RestoreEncodingLayers(
const RtpParameters& parameters,
const std::vector<std::string>& removed_rids,
const std::vector<RtpEncodingParameters>& all_layers) {
- RTC_DCHECK_EQ(parameters.encodings.size() + removed_rids.size(),
- all_layers.size());
+ RTC_CHECK_EQ(parameters.encodings.size() + removed_rids.size(),
+ all_layers.size());
RtpParameters result(parameters);
result.encodings.clear();
size_t index = 0;
@@ -300,8 +300,8 @@ void RtpSenderBase::SetSsrc(uint32_t ssrc) {
// we need to copy.
RtpParameters current_parameters =
media_channel_->GetRtpSendParameters(ssrc_);
- RTC_DCHECK_GE(current_parameters.encodings.size(),
- init_parameters_.encodings.size());
+ RTC_CHECK_GE(current_parameters.encodings.size(),
+ init_parameters_.encodings.size());
for (size_t i = 0; i < init_parameters_.encodings.size(); ++i) {
init_parameters_.encodings[i].ssrc =
current_parameters.encodings[i].ssrc;
diff --git a/chromium/third_party/webrtc/pc/rtp_sender_receiver_unittest.cc b/chromium/third_party/webrtc/pc/rtp_sender_receiver_unittest.cc
index 20621e44aea..d9d4b8db61d 100644
--- a/chromium/third_party/webrtc/pc/rtp_sender_receiver_unittest.cc
+++ b/chromium/third_party/webrtc/pc/rtp_sender_receiver_unittest.cc
@@ -1166,6 +1166,44 @@ TEST_F(RtpSenderReceiverTest,
DestroyVideoRtpSender();
}
+#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
+using RtpSenderReceiverDeathTest = RtpSenderReceiverTest;
+
+TEST_F(RtpSenderReceiverDeathTest,
+ VideoSenderManualRemoveSimulcastFailsDeathTest) {
+ AddVideoTrack(false);
+
+ std::unique_ptr<MockSetStreamsObserver> set_streams_observer =
+ std::make_unique<MockSetStreamsObserver>();
+ video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, video_track_->id(),
+ set_streams_observer.get());
+ ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_.get()));
+ EXPECT_CALL(*set_streams_observer, OnSetStreams());
+ video_rtp_sender_->SetStreams({local_stream_->id()});
+
+ std::vector<RtpEncodingParameters> init_encodings(2);
+ init_encodings[0].max_bitrate_bps = 60000;
+ init_encodings[1].max_bitrate_bps = 120000;
+ video_rtp_sender_->set_init_send_encodings(init_encodings);
+
+ RtpParameters params = video_rtp_sender_->GetParameters();
+ ASSERT_EQ(2u, params.encodings.size());
+ EXPECT_EQ(params.encodings[0].max_bitrate_bps, 60000);
+
+ // Simulate the setLocalDescription call as if the user used SDP munging
+ // to disable simulcast.
+ std::vector<uint32_t> ssrcs;
+ ssrcs.reserve(2);
+ for (int i = 0; i < 2; ++i)
+ ssrcs.push_back(kVideoSsrcSimulcast + i);
+ cricket::StreamParams stream_params =
+ cricket::StreamParams::CreateLegacy(kVideoSsrc);
+ video_media_channel_->AddSendStream(stream_params);
+ video_rtp_sender_->SetMediaChannel(video_media_channel_);
+ EXPECT_DEATH(video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast), "");
+}
+#endif
+
TEST_F(RtpSenderReceiverTest,
VideoSenderMustCallGetParametersBeforeSetParametersBeforeNegotiation) {
video_rtp_sender_ =
diff --git a/chromium/tools/metrics/histograms/metadata/net/histograms.xml b/chromium/tools/metrics/histograms/metadata/net/histograms.xml
index 14a6dac7108..c30ee50fdc5 100644
--- a/chromium/tools/metrics/histograms/metadata/net/histograms.xml
+++ b/chromium/tools/metrics/histograms/metadata/net/histograms.xml
@@ -4432,6 +4432,18 @@ chromium-metrics-reviews@google.com.
</summary>
</histogram>
+<histogram name="Net.SpdySession.AlpsDecoderStatus.Bypassed"
+ enum="AlpsDecoderError" expires_after="2023-09-11">
+ <owner>arichiv@chromium.org</owner>
+ <owner>src/net/OWNERS</owner>
+ <summary>
+ Net.SpdySession.AlpsDecoderStatus records errors returned by the AlpsDecoder
+ class in HTTP/2 responses. Errors logged to that histogram cause a session
+ termination, which isn't always desired. This histogram records errors that
+ we want to note, but that shouldn't stop the connection.
+ </summary>
+</histogram>
+
<histogram name="Net.SpdySession.AlpsSettingParameterCount" units="parameters"
expires_after="2023-05-11">
<owner>bnc@chromium.org</owner>
diff --git a/chromium/tools/metrics/histograms/metadata/phonehub/histograms.xml b/chromium/tools/metrics/histograms/metadata/phonehub/histograms.xml
index 236d4e224b5..6e822ff6e12 100644
--- a/chromium/tools/metrics/histograms/metadata/phonehub/histograms.xml
+++ b/chromium/tools/metrics/histograms/metadata/phonehub/histograms.xml
@@ -40,6 +40,11 @@ chromium-metrics-reviews@google.com.
<histogram name="PhoneHub.Adoption.LoginFeatureStatus"
enum="PhoneHubFeatureStatus" expires_after="2023-02-01">
+ <obsolete>
+ There was a bug associated with the recording on this metric. During
+ investigation, we decided that this metric is of no value and so it was
+ removed. Deprecated 07/2022
+ </obsolete>
<owner>jonmann@chromium.org</owner>
<owner>chromeos-cross-device-eng@google.com</owner>
<summary>The steady state feature status of PhoneHub on user login.</summary>
diff --git a/chromium/tools/variations/fieldtrial_to_struct.py b/chromium/tools/variations/fieldtrial_to_struct.py
index 9ecf3897479..3c90ff9fea5 100755
--- a/chromium/tools/variations/fieldtrial_to_struct.py
+++ b/chromium/tools/variations/fieldtrial_to_struct.py
@@ -76,7 +76,7 @@ def _LoadFieldTrialConfig(filename, platforms, invert):
def _ConvertOverrideUIStrings(override_ui_strings):
"""Converts override_ui_strings to formatted dicts."""
overrides = []
- for ui_string, override in override_ui_strings.iteritems():
+ for ui_string, override in override_ui_strings.items():
overrides.append({
'name_hash': generate_ui_string_overrider.HashName(ui_string),
'value': override
diff --git a/chromium/tools/variations/fieldtrial_util.py b/chromium/tools/variations/fieldtrial_util.py
index ac0b9f54292..284bcb5899c 100644
--- a/chromium/tools/variations/fieldtrial_util.py
+++ b/chromium/tools/variations/fieldtrial_util.py
@@ -31,7 +31,7 @@ def _FindDuplicates(entries):
duplicates.add(entry)
else:
seen.add(entry)
- return duplicates
+ return sorted(duplicates)
def _CheckForDuplicateFeatures(enable_features, disable_features):
enable_features = [f.split('<')[0] for f in enable_features]
diff --git a/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_kk.xtb b/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_kk.xtb
index 95b31fe8b7f..251bd32b3d8 100644
--- a/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_kk.xtb
+++ b/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_kk.xtb
@@ -27,7 +27,7 @@
<translation id="3812541808639806898">Image Alt Text Viewer</translation>
<translation id="381767806621926835">Ұзын сипаттамасын көру үшін "longdesc" немесе "aria-describedat" төлсипаты бар кез келген нәрседе оң жақ түймені басыңыз.</translation>
<translation id="4023902424053835668">Көрсеткі пернелерімен веб-беттер мәтінін шолу.</translation>
-<translation id="4388820049312272371">Курсор орнын жылдам жарқыл арқылы бөлектеу.</translation>
+<translation id="4388820049312272371">Курсор орнын жылдам жарқыл арқылы ерекшелеу.</translation>
<translation id="4394049700291259645">Өшіру</translation>
<translation id="4769065380738716500">Кескіндер олардың "Alt" мәтіндеріне ауыстырылған.</translation>
<translation id="4896660567607030658">Әсерлерсіз, курсорды ғана көрсету.</translation>
diff --git a/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb b/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
index 2e50e60afc0..7e86419a775 100644
--- a/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
+++ b/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
@@ -19,7 +19,7 @@
<translation id="2648340354586434750">शब्दांनुसार हलविण्‍यासाठी &lt;span class='key'&gt;पर्याय&lt;/span&gt; धरून ठेवा.</translation>
<translation id="2795227192542594043">हा विस्‍तार तुम्हाला कीबोर्डसह मजकूर निवडण्‍याची अनुमती देणारा, वेबपेजमधील हलणारा कर्सर देतो.</translation>
<translation id="2808027189040546825">पायरी 1: सर्वाधिक अंधुक तारे असलेली पंक्ती निवडा:</translation>
-<translation id="2965611304828530558">&lt;p&gt;तुम्ही दुव्‍यावर किंवा नियंत्रणावर पोहचता तेव्‍हा, ते आपोआप फोकस केले जाते. दुवा किंवा बटण क्लिक करण्यासाठी &lt;span class='key'&gt;Enter&lt;/span&gt; दाबा. &lt;/p&gt; &lt;p&gt; फोकस केलेले नियंत्रण (जसे की, मजकूर बॉक्‍स किंवा सूची बॉक्‍स) बाण की, कॅप्‍चर करतात तेव्‍हा, कॅरेट ब्राउझिंग करणे सुरू ठेवण्‍यासाठी &lt;span class='key'&gt;Esc&lt;/span&gt; त्यानंतर डावा किंवा उजवा बाण दाबा. &lt;/p&gt; &lt;p&gt; वैकल्पिकपणे, पुढील फोकस करण्‍यायोग्य नियंत्रणावर हलविण्‍यासाठी &lt;span class='key'&gt;Tab&lt;/span&gt; दाबा. &lt;/p&gt;</translation>
+<translation id="2965611304828530558">&lt;p&gt;तुम्ही लिंकवर किंवा नियंत्रणावर पोहचता तेव्‍हा, ते आपोआप फोकस केले जाते. लिंक किंवा बटण क्लिक करण्यासाठी &lt;span class='key'&gt;Enter&lt;/span&gt; दाबा. &lt;/p&gt; &lt;p&gt; फोकस केलेले नियंत्रण (जसे की, मजकूर बॉक्‍स किंवा सूची बॉक्‍स) बाण की, कॅप्‍चर करतात तेव्‍हा, कॅरेट ब्राउझिंग करणे सुरू ठेवण्‍यासाठी &lt;span class='key'&gt;Esc&lt;/span&gt; त्यानंतर डावा किंवा उजवा बाण दाबा. &lt;/p&gt; &lt;p&gt; वैकल्पिकपणे, पुढील फोकस करण्‍यायोग्य नियंत्रणावर हलविण्‍यासाठी &lt;span class='key'&gt;Tab&lt;/span&gt; दाबा. &lt;/p&gt;</translation>
<translation id="3252573918265662711">सेटअप</translation>
<translation id="3410969471888629217">साइट सानुकूलने विसरा</translation>
<translation id="3435896845095436175">सुरू करा</translation>
diff --git a/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_pa.xtb b/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_pa.xtb
index 10cf317e0eb..9f9c9d6eaea 100644
--- a/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_pa.xtb
+++ b/chromium/ui/accessibility/extensions/strings/accessibility_extensions_strings_pa.xtb
@@ -30,7 +30,7 @@
<translation id="4388820049312272371">ਇੱਕ ਤਤਕਾਲ ਫਲੈਸ਼ ਨਾਲ ਕਰਸਰ ਪੋਜੀਸ਼ਨ ਉਜਾਗਰ ਕਰੋ।</translation>
<translation id="4394049700291259645">ਬੰਦ ਕਰੋ</translation>
<translation id="4769065380738716500">ਚਿੱਤਰ ਉਹਨਾਂ ਦੇ alt ਟੈਕਸਟ ਰਾਹੀਂ ਬਦਲੇ ਗਏ ਹਨ।</translation>
-<translation id="4896660567607030658">ਕੋਈ ਫੀਡਬੈਕ ਨਹੀਂ, ਕੇਵਲ ਕਰਸਰ ਦਿਖਾਓ।</translation>
+<translation id="4896660567607030658">ਕੋਈ ਵਿਚਾਰ ਨਹੀਂ, ਬਸ ਕਰਸਰ ਦਿਖਾਓ।</translation>
<translation id="4937901943818762779">ਐਨੀਮੇਟ ਕੀਤੀ ਤਸਵੀਰਾਂ ਨੂੰ ਅਨੁਮਤੀ ਦਿਓ, ਲੇਕਿਨ ਸਿਰਫ਼ ਇੱਕ ਵਾਰ।</translation>
<translation id="4949131196216960195">ਕੈਰਟ ਬ੍ਰਾਊਜ਼ਿੰਗ ਚਾਲੂ ਕਰਨ ਲਈ &lt;span class='key'&gt;ਖੋਜ&lt;/span&gt; + &lt;img src='increase_brightness.png'&gt; (ਚਮਕ ਵਧਾਉਣ ਵਾਲੀ ਕੁੰਜੀ, ਜਾਂ F7) ਦਬਾਓ, ਇਸਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਇਸਨੂੰ ਦੁਬਾਰਾ ਦਬਾਓ।</translation>
<translation id="4954450790315188152">ਜਦੋਂ Caret ਬ੍ਰਾਊਜ਼ਿੰਗ ਸਮਰਥਿਤ ਹੁੰਦੀ ਹੈ:</translation>
@@ -43,7 +43,7 @@
<translation id="5558600050691192317">ਕੀ-ਬੋਰਡ ਕਮਾਂਡਾਂ</translation>
<translation id="5594989420907487559">ਐਨੀਮੇਸ਼ਨਾਂ ਨੂੰ ਸਿਰਫ਼ ਇੱਕ ਵਾਰ ਚਲਾਓ, ਜਾਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਐਨੀਮੇਸ਼ਨ ਨੂੰ ਅਸਮਰਥਿਤ ਕਰੋ।</translation>
<translation id="5631241868147802353">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਰੰਗ ਸਕੀਮ:</translation>
-<translation id="5650358096585648000">ਵਿਜ਼ੁਅਲ ਫੀਡਬੈਕ</translation>
+<translation id="5650358096585648000">ਦ੍ਰਿਸ਼ਟੀਗਤ ਵਿਚਾਰ</translation>
<translation id="5710185147685935461">ਵੈਬਸਫ਼ਿਆਂ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਪੜ੍ਹਨ ਯੋਗ ਬਣਾਉਣ ਲਈ ਰੰਗ ਸਕੀਮ ਬਦਲੋ ਜਾਂ ਇਨਵਰਟ ਕਰੋ।</translation>
<translation id="5939518447894949180">ਰੀਸੈਟ ਕਰੋ</translation>
<translation id="595639123821853262">ਇਨਵਰਟ ਕੀਤਾ ਗ੍ਰੇਸਕੇਲ</translation>
diff --git a/chromium/ui/base/ime/ash/input_method_ash.cc b/chromium/ui/base/ime/ash/input_method_ash.cc
index 05c334e6078..ed669c21a27 100644
--- a/chromium/ui/base/ime/ash/input_method_ash.cc
+++ b/chromium/ui/base/ime/ash/input_method_ash.cc
@@ -646,9 +646,16 @@ void InputMethodAsh::MaybeProcessPendingInputMethodResult(ui::KeyEvent* event,
DCHECK(client);
if (pending_commit_) {
- if (pending_commit_->text.empty()) {
+ if (handled && NeedInsertChar()) {
+ for (const auto& ch : pending_commit_->text) {
+ KeyEvent ch_event(ET_KEY_PRESSED, VKEY_UNKNOWN, EF_NONE);
+ ch_event.set_character(ch);
+ client->InsertChar(ch_event);
+ }
+ } else if (pending_commit_->text.empty()) {
client->InsertText(
u"", TextInputClient::InsertTextCursorBehavior::kMoveCursorAfterText);
+ composing_text_ = false;
} else {
// Split the commit into two separate commits, one for the substring
// before the cursor and one for the substring after.
@@ -666,8 +673,8 @@ void InputMethodAsh::MaybeProcessPendingInputMethodResult(ui::KeyEvent* event,
after_cursor,
TextInputClient::InsertTextCursorBehavior::kMoveCursorBeforeText);
}
+ composing_text_ = false;
}
- composing_text_ = false;
typing_session_manager_.CommitCharacters(pending_commit_->text.length());
}
diff --git a/chromium/ui/base/ime/ash/input_method_ash_unittest.cc b/chromium/ui/base/ime/ash/input_method_ash_unittest.cc
index e97a691e1c9..e943f986f6e 100644
--- a/chromium/ui/base/ime/ash/input_method_ash_unittest.cc
+++ b/chromium/ui/base/ime/ash/input_method_ash_unittest.cc
@@ -1005,7 +1005,7 @@ TEST_F(InputMethodAshKeyEventTest, KeyEventDelayResponseTest) {
u"A",
TextInputClient::InsertTextCursorBehavior::kMoveCursorAfterText);
- EXPECT_EQ(u"", inserted_text_);
+ EXPECT_EQ(0, inserted_char_);
// Do callback.
std::move(mock_ime_engine_handler_->last_passed_callback()).Run(true);
@@ -1018,7 +1018,7 @@ TEST_F(InputMethodAshKeyEventTest, KeyEventDelayResponseTest) {
EXPECT_EQ(kFlags, stored_event.flags());
EXPECT_TRUE(ime_->process_key_event_post_ime_args().handled);
- EXPECT_EQ(u"A", inserted_text_);
+ EXPECT_EQ(L'A', inserted_char_);
}
TEST_F(InputMethodAshKeyEventTest, MultiKeyEventDelayResponseTest) {
@@ -1185,7 +1185,7 @@ TEST_F(InputMethodAshKeyEventTest, SetAutocorrectRangeRunsAfterCommitText) {
std::move(mock_ime_engine_handler_->last_passed_callback())
.Run(/*handled=*/true);
- EXPECT_EQ(u"a", inserted_text_);
+ EXPECT_EQ(L'a', inserted_char_);
EXPECT_EQ(gfx::Range(0, 1), GetAutocorrectRange());
}
diff --git a/chromium/ui/base/ime/fuchsia/keyboard_client.cc b/chromium/ui/base/ime/fuchsia/keyboard_client.cc
index 4570ffdf27b..c70f72ca90d 100644
--- a/chromium/ui/base/ime/fuchsia/keyboard_client.cc
+++ b/chromium/ui/base/ime/fuchsia/keyboard_client.cc
@@ -160,13 +160,12 @@ absl::optional<ui::KeyEvent> KeyboardClient::ConvertKeystrokeEvent(
// TODO(https://crbug.com/1187257): Use input3.KeyMeaning instead of US layout
// as the default.
- DomCode dom_code =
- KeycodeConverter::UsbKeycodeToDomCode(static_cast<int>(key_event.key()));
+ DomCode dom_code = KeycodeConverter::UsbKeycodeToDomCode(key_event.key());
DomKey dom_key;
KeyboardCode key_code;
if (!DomCodeToUsLayoutDomKey(dom_code, event_flags, &dom_key, &key_code)) {
LOG(ERROR) << "DomCodeToUsLayoutDomKey() failed for key: "
- << static_cast<uint32_t>(key_event.key());
+ << key_event.key();
}
return ui::KeyEvent(*event_type, key_code, dom_code, event_flags, dom_key,
diff --git a/chromium/ui/events/keycodes/dom/keycode_converter.cc b/chromium/ui/events/keycodes/dom/keycode_converter.cc
index a8a1615e52f..88486fca8ba 100644
--- a/chromium/ui/events/keycodes/dom/keycode_converter.cc
+++ b/chromium/ui/events/keycodes/dom/keycode_converter.cc
@@ -5,6 +5,7 @@
#include "ui/events/keycodes/dom/keycode_converter.h"
#include "base/logging.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversion_utils.h"
#include "build/build_config.h"
#include "ui/events/keycodes/dom/dom_code.h"
@@ -223,7 +224,7 @@ KeyboardCode KeycodeConverter::MapPositionalDomCodeToUSShortcutKey(
#endif
// static
-DomCode KeycodeConverter::CodeStringToDomCode(const std::string& code) {
+DomCode KeycodeConverter::CodeStringToDomCode(base::StringPiece code) {
if (code.empty())
return DomCode::NONE;
for (auto& mapping : kDomCodeMappings) {
@@ -236,9 +237,29 @@ DomCode KeycodeConverter::CodeStringToDomCode(const std::string& code) {
}
// static
-const char* KeycodeConverter::DomCodeToCodeString(DomCode dom_code) {
+std::string KeycodeConverter::DomCodeToCodeString(DomCode dom_code) {
+ const auto usb_keycode = static_cast<uint32_t>(dom_code);
+
+ // Generate some continuous runs of codes, rather than looking them up.
+ if (dom_code >= DomCode::US_A && dom_code <= DomCode::US_Z) {
+ const int index = usb_keycode - static_cast<uint32_t>(DomCode::US_A);
+ return base::StringPrintf("Key%c", 'A' + index);
+ } else if (dom_code >= DomCode::DIGIT1 && dom_code <= DomCode::DIGIT0) {
+ const int index = usb_keycode - static_cast<uint32_t>(DomCode::DIGIT1);
+ return base::StringPrintf("Digit%d", (index + 1) % 10);
+ } else if (dom_code >= DomCode::NUMPAD1 && dom_code <= DomCode::NUMPAD0) {
+ const int index = usb_keycode - static_cast<uint32_t>(DomCode::NUMPAD1);
+ return base::StringPrintf("Numpad%d", (index + 1) % 10);
+ } else if (dom_code >= DomCode::F1 && dom_code <= DomCode::F12) {
+ const int index = usb_keycode - static_cast<uint32_t>(DomCode::F1);
+ return base::StringPrintf("F%d", index + 1);
+ } else if (dom_code >= DomCode::F13 && dom_code <= DomCode::F24) {
+ const int index = usb_keycode - static_cast<uint32_t>(DomCode::F13);
+ return base::StringPrintf("F%d", index + 13);
+ }
+
for (auto& mapping : kDomCodeMappings) {
- if (mapping.usb_keycode == static_cast<uint32_t>(dom_code)) {
+ if (mapping.usb_keycode == usb_keycode) {
if (mapping.code)
return mapping.code;
break;
@@ -297,7 +318,7 @@ DomKeyLocation KeycodeConverter::DomCodeToLocation(DomCode dom_code) {
}
// static
-DomKey KeycodeConverter::KeyStringToDomKey(const std::string& key) {
+DomKey KeycodeConverter::KeyStringToDomKey(base::StringPiece key) {
if (key.empty())
return DomKey::NONE;
// Check for standard key names.
@@ -315,12 +336,12 @@ DomKey KeycodeConverter::KeyStringToDomKey(const std::string& key) {
}
// Otherwise, if the string contains a single Unicode character,
// the key value is that character.
+ const auto key_length = static_cast<int32_t>(key.length());
int32_t char_index = 0;
uint32_t character;
- if (base::ReadUnicodeCharacter(key.c_str(),
- static_cast<int32_t>(key.length()),
- &char_index, &character) &&
- key[++char_index] == 0) {
+ if (base::ReadUnicodeCharacter(key.data(), key_length, &char_index,
+ &character) &&
+ ++char_index == key_length) {
return DomKey::FromCharacter(character);
}
return DomKey::NONE;
@@ -439,22 +460,4 @@ uint32_t KeycodeConverter::DomCodeToUsbKeycode(DomCode dom_code) {
return InvalidUsbKeycode();
}
-// static
-uint32_t KeycodeConverter::CodeStringToUsbKeycode(const std::string& code) {
- if (code.empty())
- return InvalidUsbKeycode();
-
- for (auto& mapping : kDomCodeMappings) {
- if (mapping.code && code == mapping.code) {
- return mapping.usb_keycode;
- }
- }
- return InvalidUsbKeycode();
-}
-
-// static
-int KeycodeConverter::CodeStringToNativeKeycode(const std::string& code) {
- return UsbKeycodeToNativeKeycode(CodeStringToUsbKeycode(code));
-}
-
} // namespace ui
diff --git a/chromium/ui/events/keycodes/dom/keycode_converter.h b/chromium/ui/events/keycodes/dom/keycode_converter.h
index d06621cf194..ee5ff4b1e35 100644
--- a/chromium/ui/events/keycodes/dom/keycode_converter.h
+++ b/chromium/ui/events/keycodes/dom/keycode_converter.h
@@ -9,6 +9,7 @@
#include <stdint.h>
#include <string>
+#include "base/strings/string_piece.h"
#include "build/build_config.h"
#include "ui/events/keycodes/dom/dom_key.h"
@@ -91,11 +92,11 @@ class KeycodeConverter {
static KeyboardCode MapPositionalDomCodeToUSShortcutKey(DomCode code);
#endif
- // Convert a UI Events |code| string value into a DomCode.
- static DomCode CodeStringToDomCode(const std::string& code);
-
- // Convert a DomCode into a UI Events |code| string value.
- static const char* DomCodeToCodeString(DomCode dom_code);
+ // Conversion between DOM Code string and DomCode enum values.
+ // Returns the invalid value if the supplied code is not recognized,
+ // or has no mapping.
+ static DomCode CodeStringToDomCode(base::StringPiece code);
+ static std::string DomCodeToCodeString(DomCode dom_code);
// Return the DomKeyLocation of a DomCode. The DomKeyLocation distinguishes
// keys with the same meaning, and therefore the same DomKey or non-located
@@ -108,10 +109,10 @@ class KeycodeConverter {
// - a key name from http://www.w3.org/TR/DOM-Level-3-Events-key/, or
// - a single Unicode character (represented in UTF-8).
// Returns DomKey::NONE for other inputs, including |nullptr|.
- static DomKey KeyStringToDomKey(const std::string& key);
+ static DomKey KeyStringToDomKey(base::StringPiece key);
// Convert a DomKey into a UI Events |key| string value.
- // For an invalid DomKey, returns an empty string.
+ // Returns an empty string for invalid DomKey values.
static std::string DomKeyToKeyString(DomKey dom_key);
// Returns true if the DomKey is a modifier.
@@ -128,24 +129,18 @@ class KeycodeConverter {
// Return the value that identifies an invalid USB keycode.
static uint32_t InvalidUsbKeycode();
- // Convert a USB keycode into an equivalent platform native keycode.
+ // Conversion between USB keycode and native keycode values.
+ // Returns the invalid value if the supplied code is not recognized,
+ // or has no mapping.
static int UsbKeycodeToNativeKeycode(uint32_t usb_keycode);
-
- // Convert a platform native keycode into an equivalent USB keycode.
static uint32_t NativeKeycodeToUsbKeycode(int native_keycode);
- // Convert a USB keycode into a DomCode.
+ // Conversion between USB keycode and DomCode values.
+ // Returns the "invalid" value if the supplied key code is not
+ // recognized.
static DomCode UsbKeycodeToDomCode(uint32_t usb_keycode);
-
- // Convert a DomCode into a USB keycode.
static uint32_t DomCodeToUsbKeycode(DomCode dom_code);
- // Convert a UI Event |code| string into a USB keycode value.
- static uint32_t CodeStringToUsbKeycode(const std::string& code);
-
- // Convert a UI Event |code| string into a native keycode.
- static int CodeStringToNativeKeycode(const std::string& code);
-
// Static methods to support testing.
static size_t NumKeycodeMapEntriesForTest();
static const KeycodeMapEntry* GetKeycodeMapForTest();
diff --git a/chromium/ui/events/keycodes/dom/keycode_converter_unittest.cc b/chromium/ui/events/keycodes/dom/keycode_converter_unittest.cc
index 3cbe92c0dbd..0d72bd39ad7 100644
--- a/chromium/ui/events/keycodes/dom/keycode_converter_unittest.cc
+++ b/chromium/ui/events/keycodes/dom/keycode_converter_unittest.cc
@@ -169,7 +169,7 @@ TEST(KeycodeConverter, DomCode) {
if (entry->code) {
ui::DomCode code = ui::KeycodeConverter::CodeStringToDomCode(entry->code);
EXPECT_STREQ(entry->code,
- ui::KeycodeConverter::DomCodeToCodeString(code));
+ ui::KeycodeConverter::DomCodeToCodeString(code).c_str());
}
ui::DomCode code =
ui::KeycodeConverter::NativeKeycodeToDomCode(entry->native_keycode);
diff --git a/chromium/ui/events/keycodes/keyboard_code_conversion_unittest.cc b/chromium/ui/events/keycodes/keyboard_code_conversion_unittest.cc
index 90bc05d5539..5fe65a1ebd4 100644
--- a/chromium/ui/events/keycodes/keyboard_code_conversion_unittest.cc
+++ b/chromium/ui/events/keycodes/keyboard_code_conversion_unittest.cc
@@ -36,10 +36,10 @@ void CheckDomCodeToMeaning(const char* label,
ui::DomKey result_dom_key = ui::DomKey::NONE;
ui::KeyboardCode result_key_code = ui::VKEY_UNKNOWN;
bool success = f(dom_code, event_flags, &result_dom_key, &result_key_code);
- SCOPED_TRACE(
- base::StringPrintf("%s %s %06X:%04X", label,
- ui::KeycodeConverter::DomCodeToCodeString(dom_code),
- static_cast<int>(dom_code), event_flags));
+ SCOPED_TRACE(base::StringPrintf(
+ "%s %s %06X:%04X", label,
+ ui::KeycodeConverter::DomCodeToCodeString(dom_code).c_str(),
+ static_cast<int>(dom_code), event_flags));
EXPECT_EQ(result.defined, success);
if (success) {
EXPECT_EQ(result.dom_key, result_dom_key)
diff --git a/chromium/ui/events/ozone/layout/keyboard_layout_engine_unittest.cc b/chromium/ui/events/ozone/layout/keyboard_layout_engine_unittest.cc
index cc0c54f8f25..d52acd96bff 100644
--- a/chromium/ui/events/ozone/layout/keyboard_layout_engine_unittest.cc
+++ b/chromium/ui/events/ozone/layout/keyboard_layout_engine_unittest.cc
@@ -201,7 +201,7 @@ void TestLookup(const char* name, KeyboardLayoutEngine* engine) {
KeyboardCode keycode;
SCOPED_TRACE(base::StringPrintf(
"%s(%s, 0x%X)", name,
- KeycodeConverter::DomCodeToCodeString(t.input_dom_code),
+ KeycodeConverter::DomCodeToCodeString(t.input_dom_code).c_str(),
t.input_flags));
EXPECT_TRUE(
engine->Lookup(t.input_dom_code, t.input_flags, &dom_key, &keycode));
diff --git a/chromium/ui/gfx/render_text_harfbuzz.cc b/chromium/ui/gfx/render_text_harfbuzz.cc
index cd19053ad39..cd779904454 100644
--- a/chromium/ui/gfx/render_text_harfbuzz.cc
+++ b/chromium/ui/gfx/render_text_harfbuzz.cc
@@ -201,7 +201,7 @@ GraphemeProperties RetrieveGraphemeProperties(const base::StringPiece16& text,
properties.block = ublock_getCode(codepoint);
}
- if (codepoint == '\n' || codepoint == ' ')
+ if (codepoint == '\n' || codepoint == '\r' || codepoint == ' ')
properties.has_control = true;
if (IsBracket(codepoint))
properties.has_bracket = true;
diff --git a/chromium/ui/gfx/render_text_unittest.cc b/chromium/ui/gfx/render_text_unittest.cc
index 57b5656f342..c2834e9cebf 100644
--- a/chromium/ui/gfx/render_text_unittest.cc
+++ b/chromium/ui/gfx/render_text_unittest.cc
@@ -1575,6 +1575,9 @@ const RunListCase kBasicsRunListCases[] = {
{"multiline_newline1", u"\n\n", "[0][1]", true},
{"multiline_newline2", u"\r\n\r\n", "[0->1][2->3]", true},
{"multiline_newline3", u"\r\r\n", "[0][1->2]", true},
+ {"multiline_newline4", u"x\r\r", "[0][1][2]", true},
+ {"multiline_newline5", u"x\n\r\r", "[0][1][2][3]", true},
+ {"multiline_newline6", u"x\ny\rz\r\n", "[0][1][2][3][4][5->6]", true},
};
INSTANTIATE_TEST_SUITE_P(ItemizeTextToRunsBasics,
@@ -8616,4 +8619,14 @@ TEST_F(RenderTextTest, Clusterfuzz_Issue_1299054) {
EXPECT_EQ(0, offset.y());
}
+TEST_F(RenderTextTest, Clusterfuzz_Issue_1287804) {
+ RenderText* render_text = GetRenderText();
+ render_text->SetMaxLines(1);
+ render_text->SetText(u">\r\r");
+ render_text->SetMultiline(true);
+ render_text->SetDisplayRect(Rect(0, 0, 100, 24));
+ render_text->SetElideBehavior(ELIDE_TAIL);
+ EXPECT_EQ(RangeF(0, 0), render_text->GetCursorSpan(Range(0, 0)));
+}
+
} // namespace gfx
diff --git a/chromium/ui/strings/translations/ax_strings_kk.xtb b/chromium/ui/strings/translations/ax_strings_kk.xtb
index fab2d774004..2768a0d81a0 100644
--- a/chromium/ui/strings/translations/ax_strings_kk.xtb
+++ b/chromium/ui/strings/translations/ax_strings_kk.xtb
@@ -75,7 +75,7 @@
<translation id="546643433018805598">төменгі индекс</translation>
<translation id="5476505524087279545">құсбелгіні алу</translation>
<translation id="5516424706154626233">күн таңдағышы</translation>
-<translation id="5608153257855394627">бөлектеу</translation>
+<translation id="5608153257855394627">ерекшелеу</translation>
<translation id="561939826962581046">time</translation>
<translation id="5631759159893697722">аннотация</translation>
<translation id="5643186887447432888">түйме</translation>
@@ -109,7 +109,7 @@
<translation id="7139483182332611405">алғысөз</translation>
<translation id="7198226213493847604">мәзірді ашатын қалқымалы түйме</translation>
<translation id="7214187073215825913">мазмұн туралы ақпарат</translation>
-<translation id="7238347055216017155">бөлектеу</translation>
+<translation id="7238347055216017155">ерекшелеу</translation>
<translation id="727747134524199931">баған тақырыбы</translation>
<translation id="7353453495576941748">алғыс сөз</translation>
<translation id="7405738980073107433">түсіндірмелер</translation>
diff --git a/chromium/ui/strings/translations/ax_strings_te.xtb b/chromium/ui/strings/translations/ax_strings_te.xtb
index 7437716cbb0..90f9031d479 100644
--- a/chromium/ui/strings/translations/ax_strings_te.xtb
+++ b/chromium/ui/strings/translations/ax_strings_te.xtb
@@ -127,7 +127,7 @@
<translation id="8105797009065549151">గమనిక సూచన</translation>
<translation id="8208673686607688524">స్థానిక తేదీ మరియు సమయం ఎంపిక</translation>
<translation id="8346634859695247203">విభాగం</translation>
-<translation id="838869780401515933">తనిఖీ చేయి</translation>
+<translation id="838869780401515933">చెక్ చేయండి</translation>
<translation id="8415319359811155763">భాగం</translation>
<translation id="8433900881053900389">సాధన పట్టీ</translation>
<translation id="8461852803063341183">రేడియో బటన్</translation>
diff --git a/chromium/ui/strings/translations/ui_strings_eu.xtb b/chromium/ui/strings/translations/ui_strings_eu.xtb
index 356a83dfeb6..e742040dc74 100644
--- a/chromium/ui/strings/translations/ui_strings_eu.xtb
+++ b/chromium/ui/strings/translations/ui_strings_eu.xtb
@@ -166,7 +166,7 @@
<translation id="7052633198403197513">F1</translation>
<translation id="7170202025028120564">Aplikazioaren bistaratze-ezarpenek aplikazioa berrabiarazten denean izango dute eragina.</translation>
<translation id="7222373446505536781">F11</translation>
-<translation id="7238427729722629793">{MINUTES,plural, =1{1 minutu gelditzen da}other{# minutu gelditzen dira}}</translation>
+<translation id="7238427729722629793">{MINUTES,plural, =1{1 min gelditzen da}other{# min gelditzen dira}}</translation>
<translation id="7365057348334984696">{MINUTES,plural, =1{Duela 1 min}other{Duela # min}}</translation>
<translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
<translation id="7410957453383678442">{MINUTES,plural, =1{1 minutu bat gelditzen da}other{# minutu gelditzen dira}}</translation>
diff --git a/chromium/ui/strings/translations/ui_strings_ml.xtb b/chromium/ui/strings/translations/ui_strings_ml.xtb
index 57b083b8817..1d6805b8907 100644
--- a/chromium/ui/strings/translations/ui_strings_ml.xtb
+++ b/chromium/ui/strings/translations/ui_strings_ml.xtb
@@ -6,7 +6,7 @@
<translation id="1127811143501539442">{DAYS,plural, =1{ഒരു ദിവസം മുമ്പ്}other{# ദിവസം മുമ്പ്}}</translation>
<translation id="1156623771253174079">{SECONDS,plural, =1{ഒരു മിനിറ്റിന് മുമ്പ്}other{# മിനിറ്റ് മുമ്പ്}}</translation>
<translation id="1169783199079129864">{MINUTES,plural, =1{ 1 മീറ്റര്‍}other{# മീറ്റർ}}</translation>
-<translation id="1243314992276662751">അപ്‌ലോഡുചെയ്യുക</translation>
+<translation id="1243314992276662751">അപ്‌ലോഡ് ചെയ്യുക</translation>
<translation id="1266864766717917324"><ph name="CONTENT_TYPE" /> പങ്കിടാനായില്ല</translation>
<translation id="1269641567813814718">Win</translation>
<translation id="1291104554099683393">ചെറിയ ഭാഗങ്ങളായി ടെക്‌സ്‌റ്റ് പങ്കിടാൻ ശ്രമിക്കൂ.</translation>
diff --git a/chromium/ui/strings/translations/ui_strings_te.xtb b/chromium/ui/strings/translations/ui_strings_te.xtb
index eaa4fdc67d1..5258c27b14a 100644
--- a/chromium/ui/strings/translations/ui_strings_te.xtb
+++ b/chromium/ui/strings/translations/ui_strings_te.xtb
@@ -45,7 +45,7 @@
<translation id="2289052229480071835">మీ స్క్రీన్‌పై ఉన్న స్పర్శ లక్ష్యాలను నొక్కండి.</translation>
<translation id="2295140143284145483">సర్వే</translation>
<translation id="2297836609126180313"><ph name="QUANTITY" /> TB/s</translation>
-<translation id="2353636109065292463">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేస్తోంది</translation>
+<translation id="2353636109065292463">మీ ఇంటర్నెట్ కనెక్షన్‌ను చెక్ చేస్తోంది</translation>
<translation id="2388990488038464401">మీ ఫోన్ నుండి ఈ నంబర్‌‌కు కాల్ చేయాలా?</translation>
<translation id="2435457462613246316">పాస్‌వర్డ్‌ను చూపించు</translation>
<translation id="24452542372838207">నోటిఫికేషన్‌ను విస్తరించు</translation>
@@ -102,7 +102,7 @@
<translation id="4266252015790371705">{MONTHS,plural, =1{1 నెల క్రితం}other{# నెలల క్రితం}}</translation>
<translation id="4289300219472526559">మాట్లాడటాన్ని ప్రారంభించు</translation>
<translation id="4289540628985791613">స్థూలదృష్టి</translation>
-<translation id="4306392492252714209">క్లిప్‌బోర్డ్ నుండి తీసివేయి.</translation>
+<translation id="4306392492252714209">క్లిప్‌బోర్డ్ నుండి తీసివేయండి.</translation>
<translation id="4491109536499578614">చిత్రం</translation>
<translation id="4565377596337484307">పాస్‌వర్డ్‌ను దాచిపెట్టు</translation>
<translation id="4588090240171750605">కుడికి స్క్రోల్ చేయి</translation>
@@ -149,7 +149,7 @@
<translation id="6483402905448010557">{SECONDS,plural, =1{1 సెకను క్రితం}other{# సెకన్ల క్రితం}}</translation>
<translation id="6503257047630241175">RTF కంటెంట్</translation>
<translation id="6539092367496845964">ఏదో తప్పు జరిగింది. తర్వాత మళ్లీ ప్రయత్నించండి.</translation>
-<translation id="654149438358937226">అన్ని నోటిఫికేషన్‌లను బ్లాక్ చేయి</translation>
+<translation id="654149438358937226">అన్ని నోటిఫికేషన్‌లను బ్లాక్ చేయండి</translation>
<translation id="6612467943526193239">క్రమాంకనం నుండి నిష్క్రమించేందుకు, Esc నొక్కండి.</translation>
<translation id="6620110761915583480">ఫైల్‌ను సేవ్ చేయి</translation>
<translation id="6699343763173986273">మీడియా తరువాత ట్రాక్</translation>
diff --git a/chromium/ui/strings/translations/ui_strings_zh-TW.xtb b/chromium/ui/strings/translations/ui_strings_zh-TW.xtb
index 3465cfadb1b..1a44c200f6b 100644
--- a/chromium/ui/strings/translations/ui_strings_zh-TW.xtb
+++ b/chromium/ui/strings/translations/ui_strings_zh-TW.xtb
@@ -62,7 +62,7 @@
<translation id="2586657967955657006">剪貼簿</translation>
<translation id="2666092431469916601">置頂</translation>
<translation id="2701330563083355633">透過 <ph name="DEVICE_NAME" /> 分享</translation>
-<translation id="271033894570825754">新</translation>
+<translation id="271033894570825754">全新</translation>
<translation id="2824719307700604149">{YEARS,plural, =1{1 年前}other{# 年前}}</translation>
<translation id="2878511608894704031">全部刪除</translation>
<translation id="2907671656515444832">{DAYS,plural, =1{1 天內}other{# 天內}}</translation>
diff --git a/chromium/v8/include/v8-version.h b/chromium/v8/include/v8-version.h
index f47ac397a88..9b879306de5 100644
--- a/chromium/v8/include/v8-version.h
+++ b/chromium/v8/include/v8-version.h
@@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 10
#define V8_MINOR_VERSION 2
#define V8_BUILD_NUMBER 154
-#define V8_PATCH_LEVEL 10
+#define V8_PATCH_LEVEL 16
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
diff --git a/chromium/v8/src/builtins/x64/builtins-x64.cc b/chromium/v8/src/builtins/x64/builtins-x64.cc
index 6b52a175d2e..d41d0dd24eb 100644
--- a/chromium/v8/src/builtins/x64/builtins-x64.cc
+++ b/chromium/v8/src/builtins/x64/builtins-x64.cc
@@ -3611,7 +3611,6 @@ void GenericJSToWasmWrapperHelper(MacroAssembler* masm, bool stack_switch) {
__ j(equal, &place_float_param);
// ref params have already been pushed, so go through directly
- __ addq(current_int_param_slot, Immediate(kSystemPointerSize));
__ jmp(&loop_through_valuetypes);
// All other types are reference types. We can just fall through to place them
diff --git a/chromium/v8/src/compiler/backend/instruction-selector.cc b/chromium/v8/src/compiler/backend/instruction-selector.cc
index 3c96e7f30e5..7da0bce3c51 100644
--- a/chromium/v8/src/compiler/backend/instruction-selector.cc
+++ b/chromium/v8/src/compiler/backend/instruction-selector.cc
@@ -283,7 +283,7 @@ Instruction* InstructionSelector::Emit(Instruction* instr) {
bool InstructionSelector::CanCover(Node* user, Node* node) const {
// 1. Both {user} and {node} must be in the same basic block.
- if (schedule()->block(node) != schedule()->block(user)) {
+ if (schedule()->block(node) != current_block_) {
return false;
}
// 2. Pure {node}s must be owned by the {user}.
@@ -291,7 +291,7 @@ bool InstructionSelector::CanCover(Node* user, Node* node) const {
return node->OwnedBy(user);
}
// 3. Impure {node}s must match the effect level of {user}.
- if (GetEffectLevel(node) != GetEffectLevel(user)) {
+ if (GetEffectLevel(node) != current_effect_level_) {
return false;
}
// 4. Only {node} must have value edges pointing to {user}.
@@ -303,21 +303,6 @@ bool InstructionSelector::CanCover(Node* user, Node* node) const {
return true;
}
-bool InstructionSelector::CanCoverTransitively(Node* user, Node* node,
- Node* node_input) const {
- if (CanCover(user, node) && CanCover(node, node_input)) {
- // If {node} is pure, transitivity might not hold.
- if (node->op()->HasProperty(Operator::kPure)) {
- // If {node_input} is pure, the effect levels do not matter.
- if (node_input->op()->HasProperty(Operator::kPure)) return true;
- // Otherwise, {user} and {node_input} must have the same effect level.
- return GetEffectLevel(user) == GetEffectLevel(node_input);
- }
- return true;
- }
- return false;
-}
-
bool InstructionSelector::IsOnlyUserOfNodeInSameBlock(Node* user,
Node* node) const {
BasicBlock* bb_user = schedule()->block(user);
@@ -1192,6 +1177,7 @@ void InstructionSelector::VisitBlock(BasicBlock* block) {
int effect_level = 0;
for (Node* const node : *block) {
SetEffectLevel(node, effect_level);
+ current_effect_level_ = effect_level;
if (node->opcode() == IrOpcode::kStore ||
node->opcode() == IrOpcode::kUnalignedStore ||
node->opcode() == IrOpcode::kCall ||
@@ -1209,6 +1195,7 @@ void InstructionSelector::VisitBlock(BasicBlock* block) {
// control input should be on the same effect level as the last node.
if (block->control_input() != nullptr) {
SetEffectLevel(block->control_input(), effect_level);
+ current_effect_level_ = effect_level;
}
auto FinishEmittedInstructions = [&](Node* node, int instruction_start) {
diff --git a/chromium/v8/src/compiler/backend/instruction-selector.h b/chromium/v8/src/compiler/backend/instruction-selector.h
index c1a12d97ec3..8bbe3061843 100644
--- a/chromium/v8/src/compiler/backend/instruction-selector.h
+++ b/chromium/v8/src/compiler/backend/instruction-selector.h
@@ -407,15 +407,12 @@ class V8_EXPORT_PRIVATE InstructionSelector final {
// Used in pattern matching during code generation.
// Check if {node} can be covered while generating code for the current
// instruction. A node can be covered if the {user} of the node has the only
- // edge and the two are in the same basic block.
- // Before fusing two instructions a and b, it is useful to check that
- // CanCover(a, b) holds. If this is not the case, code for b must still be
- // generated for other users, and fusing is unlikely to improve performance.
+ // edge, the two are in the same basic block, and there are no side-effects
+ // in-between. The last check is crucial for soundness.
+ // For pure nodes, CanCover(a,b) is checked to avoid duplicated execution:
+ // If this is not the case, code for b must still be generated for other
+ // users, and fusing is unlikely to improve performance.
bool CanCover(Node* user, Node* node) const;
- // CanCover is not transitive. The counter example are Nodes A,B,C such that
- // CanCover(A, B) and CanCover(B,C) and B is pure: The the effect level of A
- // and B might differ. CanCoverTransitively does the additional checks.
- bool CanCoverTransitively(Node* user, Node* node, Node* node_input) const;
// Used in pattern matching during code generation.
// This function checks that {node} and {user} are in the same basic block,
@@ -739,6 +736,7 @@ class V8_EXPORT_PRIVATE InstructionSelector final {
BoolVector defined_;
BoolVector used_;
IntVector effect_level_;
+ int current_effect_level_;
IntVector virtual_registers_;
IntVector virtual_register_rename_;
InstructionScheduler* scheduler_;
diff --git a/chromium/v8/src/compiler/backend/loong64/instruction-selector-loong64.cc b/chromium/v8/src/compiler/backend/loong64/instruction-selector-loong64.cc
index 4f03f99acd5..6b2d25f5dc1 100644
--- a/chromium/v8/src/compiler/backend/loong64/instruction-selector-loong64.cc
+++ b/chromium/v8/src/compiler/backend/loong64/instruction-selector-loong64.cc
@@ -1446,7 +1446,7 @@ void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) {
if (CanCover(node, value)) {
switch (value->opcode()) {
case IrOpcode::kWord64Sar: {
- if (CanCoverTransitively(node, value, value->InputAt(0)) &&
+ if (CanCover(value, value->InputAt(0)) &&
TryEmitExtendingLoad(this, value, node)) {
return;
} else {
diff --git a/chromium/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc b/chromium/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc
index 4f5738ddadd..1e29e0ed730 100644
--- a/chromium/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc
+++ b/chromium/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc
@@ -1532,7 +1532,7 @@ void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) {
if (CanCover(node, value)) {
switch (value->opcode()) {
case IrOpcode::kWord64Sar: {
- if (CanCoverTransitively(node, value, value->InputAt(0)) &&
+ if (CanCover(value, value->InputAt(0)) &&
TryEmitExtendingLoad(this, value, node)) {
return;
} else {
diff --git a/chromium/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc b/chromium/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc
index a4547402e94..fce1b92f968 100644
--- a/chromium/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc
+++ b/chromium/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc
@@ -1479,7 +1479,7 @@ void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) {
if (CanCover(node, value)) {
switch (value->opcode()) {
case IrOpcode::kWord64Sar: {
- if (CanCoverTransitively(node, value, value->InputAt(0)) &&
+ if (CanCover(value, value->InputAt(0)) &&
TryEmitExtendingLoad(this, value, node)) {
return;
} else {
diff --git a/chromium/v8/src/compiler/backend/x64/instruction-selector-x64.cc b/chromium/v8/src/compiler/backend/x64/instruction-selector-x64.cc
index d40f659e4b7..62e82b58475 100644
--- a/chromium/v8/src/compiler/backend/x64/instruction-selector-x64.cc
+++ b/chromium/v8/src/compiler/backend/x64/instruction-selector-x64.cc
@@ -1822,7 +1822,7 @@ void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) {
case IrOpcode::kWord64Shr: {
Int64BinopMatcher m(value);
if (m.right().Is(32)) {
- if (CanCoverTransitively(node, value, value->InputAt(0)) &&
+ if (CanCover(value, value->InputAt(0)) &&
TryMatchLoadWord64AndShiftRight(this, value, kX64Movl)) {
return EmitIdentity(node);
}
diff --git a/chromium/v8/src/compiler/escape-analysis.cc b/chromium/v8/src/compiler/escape-analysis.cc
index fe8126f9638..d6ea2171efa 100644
--- a/chromium/v8/src/compiler/escape-analysis.cc
+++ b/chromium/v8/src/compiler/escape-analysis.cc
@@ -78,6 +78,8 @@ class ReduceScope {
explicit ReduceScope(Node* node, Reduction* reduction)
: current_node_(node), reduction_(reduction) {}
+ void SetValueChanged() { reduction()->set_value_changed(); }
+
protected:
Node* current_node() const { return current_node_; }
Reduction* reduction() { return reduction_; }
@@ -806,7 +808,9 @@ void ReduceNode(const Operator* op, EscapeAnalysisTracker::Scope* current,
break;
}
case IrOpcode::kStateValues:
- // These uses are always safe.
+ // We visit StateValue nodes through their correpsonding FrameState node,
+ // so we need to make sure we revisit the FrameState.
+ current->SetValueChanged();
break;
case IrOpcode::kFrameState: {
// We mark the receiver as escaping due to the non-standard `.getThis`
diff --git a/chromium/v8/src/objects/value-serializer.cc b/chromium/v8/src/objects/value-serializer.cc
index 911ee9a7c66..44603cc7f9a 100644
--- a/chromium/v8/src/objects/value-serializer.cc
+++ b/chromium/v8/src/objects/value-serializer.cc
@@ -64,6 +64,17 @@ static const uint32_t kLatestVersion = 15;
static_assert(kLatestVersion == v8::CurrentValueSerializerFormatVersion(),
"Exported format version must match latest version.");
+namespace {
+// For serializing JSArrayBufferView flags. Instead of serializing /
+// deserializing the flags directly, we serialize them bit by bit. This is for
+// ensuring backwards compatilibity in the case where the representation
+// changes. Note that the ValueSerializer data can be stored on disk.
+using JSArrayBufferViewIsLengthTracking = base::BitField<bool, 0, 1>;
+using JSArrayBufferViewIsBackedByRab =
+ JSArrayBufferViewIsLengthTracking::Next<bool, 1>;
+
+} // namespace
+
template <typename T>
static size_t BytesNeededForVarint(T value) {
static_assert(std::is_integral<T>::value && std::is_unsigned<T>::value,
@@ -922,6 +933,8 @@ Maybe<bool> ValueSerializer::WriteJSArrayBuffer(
if (byte_length > std::numeric_limits<uint32_t>::max()) {
return ThrowDataCloneError(MessageTemplate::kDataCloneError, array_buffer);
}
+ // TODO(v8:11111): Support RAB / GSAB. The wire version will need to be
+ // bumped.
WriteTag(SerializationTag::kArrayBuffer);
WriteVarint<uint32_t>(byte_length);
WriteRawBytes(array_buffer->backing_store(), byte_length);
@@ -950,7 +963,10 @@ Maybe<bool> ValueSerializer::WriteJSArrayBufferView(JSArrayBufferView view) {
WriteVarint(static_cast<uint8_t>(tag));
WriteVarint(static_cast<uint32_t>(view.byte_offset()));
WriteVarint(static_cast<uint32_t>(view.byte_length()));
- WriteVarint(static_cast<uint32_t>(view.bit_field()));
+ uint32_t flags =
+ JSArrayBufferViewIsLengthTracking::encode(view.is_length_tracking()) |
+ JSArrayBufferViewIsBackedByRab::encode(view.is_backed_by_rab());
+ WriteVarint(flags);
return ThrowIfOutOfMemory();
}
@@ -1979,7 +1995,7 @@ MaybeHandle<JSArrayBuffer> ValueDeserializer::ReadTransferredJSArrayBuffer() {
MaybeHandle<JSArrayBufferView> ValueDeserializer::ReadJSArrayBufferView(
Handle<JSArrayBuffer> buffer) {
- uint32_t buffer_byte_length = static_cast<uint32_t>(buffer->byte_length());
+ uint32_t buffer_byte_length = static_cast<uint32_t>(buffer->GetByteLength());
uint8_t tag = 0;
uint32_t byte_offset = 0;
uint32_t byte_length = 0;
@@ -2004,7 +2020,9 @@ MaybeHandle<JSArrayBufferView> ValueDeserializer::ReadJSArrayBufferView(
Handle<JSDataView> data_view =
isolate_->factory()->NewJSDataView(buffer, byte_offset, byte_length);
AddObjectWithID(id, data_view);
- data_view->set_bit_field(flags);
+ if (!ValidateAndSetJSArrayBufferViewFlags(*data_view, *buffer, flags)) {
+ return MaybeHandle<JSArrayBufferView>();
+ }
return data_view;
}
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \
@@ -2021,11 +2039,39 @@ MaybeHandle<JSArrayBufferView> ValueDeserializer::ReadJSArrayBufferView(
}
Handle<JSTypedArray> typed_array = isolate_->factory()->NewJSTypedArray(
external_array_type, buffer, byte_offset, byte_length / element_size);
- typed_array->set_bit_field(flags);
+ if (!ValidateAndSetJSArrayBufferViewFlags(*typed_array, *buffer, flags)) {
+ return MaybeHandle<JSArrayBufferView>();
+ }
AddObjectWithID(id, typed_array);
return typed_array;
}
+bool ValueDeserializer::ValidateAndSetJSArrayBufferViewFlags(
+ JSArrayBufferView view, JSArrayBuffer buffer, uint32_t serialized_flags) {
+ bool is_length_tracking =
+ JSArrayBufferViewIsLengthTracking::decode(serialized_flags);
+ bool is_backed_by_rab =
+ JSArrayBufferViewIsBackedByRab::decode(serialized_flags);
+
+ // TODO(marja): When the version number is bumped the next time, check that
+ // serialized_flags doesn't contain spurious 1-bits.
+
+ if (is_backed_by_rab || is_length_tracking) {
+ if (!FLAG_harmony_rab_gsab) {
+ return false;
+ }
+ if (!buffer.is_resizable()) {
+ return false;
+ }
+ if (is_backed_by_rab && buffer.is_shared()) {
+ return false;
+ }
+ }
+ view.set_is_length_tracking(is_length_tracking);
+ view.set_is_backed_by_rab(is_backed_by_rab);
+ return true;
+}
+
MaybeHandle<Object> ValueDeserializer::ReadJSError() {
uint32_t id = next_id_++;
diff --git a/chromium/v8/src/objects/value-serializer.h b/chromium/v8/src/objects/value-serializer.h
index d6804e04a74..b07274a430c 100644
--- a/chromium/v8/src/objects/value-serializer.h
+++ b/chromium/v8/src/objects/value-serializer.h
@@ -295,6 +295,9 @@ class ValueDeserializer {
V8_WARN_UNUSED_RESULT;
MaybeHandle<JSArrayBufferView> ReadJSArrayBufferView(
Handle<JSArrayBuffer> buffer) V8_WARN_UNUSED_RESULT;
+ bool ValidateAndSetJSArrayBufferViewFlags(
+ JSArrayBufferView view, JSArrayBuffer buffer,
+ uint32_t serialized_flags) V8_WARN_UNUSED_RESULT;
MaybeHandle<Object> ReadJSError() V8_WARN_UNUSED_RESULT;
#if V8_ENABLE_WEBASSEMBLY
MaybeHandle<JSObject> ReadWasmModuleTransfer() V8_WARN_UNUSED_RESULT;